diff --git a/.betterer.results b/.betterer.results index 00598e6a0779f..983e03cb8ac83 100644 --- a/.betterer.results +++ b/.betterer.results @@ -5,37 +5,27 @@ // exports[`better eslint`] = { value: `{ + "e2e/scenes/utils/support/types.ts:5381": [ + [0, 0, 0, "Do not use any type assertions.", "0"] + ], "e2e/utils/support/types.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] ], "packages/grafana-data/src/dataframe/ArrayDataFrame.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"] + [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], "packages/grafana-data/src/dataframe/CircularDataFrame.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], "packages/grafana-data/src/dataframe/DataFrameJSON.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], - [0, 0, 0, "Do not use any type assertions.", "1"], - [0, 0, 0, "Do not use any type assertions.", "2"], - [0, 0, 0, "Do not use any type assertions.", "3"], - [0, 0, 0, "Unexpected any. Specify a different type.", "4"] - ], - "packages/grafana-data/src/dataframe/DataFrameView.test.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"] + [0, 0, 0, "Do not use any type assertions.", "1"] ], "packages/grafana-data/src/dataframe/DataFrameView.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Do not use any type assertions.", "1"], [0, 0, 0, "Do not use any type assertions.", "2"], - [0, 0, 0, "Do not use any type assertions.", "3"], - [0, 0, 0, "Unexpected any. Specify a different type.", "4"], - [0, 0, 0, "Do not use any type assertions.", "5"], - [0, 0, 0, "Unexpected any. Specify a different type.", "6"], - [0, 0, 0, "Do not use any type assertions.", "7"], - [0, 0, 0, "Unexpected any. Specify a different type.", "8"] + [0, 0, 0, "Unexpected any. Specify a different type.", "3"] ], "packages/grafana-data/src/dataframe/MutableDataFrame.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], @@ -46,16 +36,10 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "5"], [0, 0, 0, "Unexpected any. Specify a different type.", "6"], [0, 0, 0, "Unexpected any. Specify a different type.", "7"], - [0, 0, 0, "Unexpected any. Specify a different type.", "8"], + [0, 0, 0, "Do not use any type assertions.", "8"], [0, 0, 0, "Unexpected any. Specify a different type.", "9"], - [0, 0, 0, "Unexpected any. Specify a different type.", "10"], - [0, 0, 0, "Unexpected any. Specify a different type.", "11"], - [0, 0, 0, "Do not use any type assertions.", "12"], - [0, 0, 0, "Unexpected any. Specify a different type.", "13"], - [0, 0, 0, "Do not use any type assertions.", "14"], - [0, 0, 0, "Unexpected any. Specify a different type.", "15"], - [0, 0, 0, "Unexpected any. Specify a different type.", "16"], - [0, 0, 0, "Do not use any type assertions.", "17"] + [0, 0, 0, "Do not use any type assertions.", "10"], + [0, 0, 0, "Do not use any type assertions.", "11"] ], "packages/grafana-data/src/dataframe/StreamingDataFrame.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], @@ -63,9 +47,7 @@ exports[`better eslint`] = { [0, 0, 0, "Do not use any type assertions.", "2"], [0, 0, 0, "Do not use any type assertions.", "3"], [0, 0, 0, "Do not use any type assertions.", "4"], - [0, 0, 0, "Unexpected any. Specify a different type.", "5"], - [0, 0, 0, "Do not use any type assertions.", "6"], - [0, 0, 0, "Do not use any type assertions.", "7"] + [0, 0, 0, "Do not use any type assertions.", "5"] ], "packages/grafana-data/src/dataframe/dimensions.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] @@ -80,24 +62,23 @@ exports[`better eslint`] = { [0, 0, 0, "Do not use any type assertions.", "3"], [0, 0, 0, "Do not use any type assertions.", "4"], [0, 0, 0, "Do not use any type assertions.", "5"], - [0, 0, 0, "Do not use any type assertions.", "6"], - [0, 0, 0, "Unexpected any. Specify a different type.", "7"], + [0, 0, 0, "Unexpected any. Specify a different type.", "6"], + [0, 0, 0, "Do not use any type assertions.", "7"], [0, 0, 0, "Do not use any type assertions.", "8"], [0, 0, 0, "Do not use any type assertions.", "9"], - [0, 0, 0, "Do not use any type assertions.", "10"], - [0, 0, 0, "Unexpected any. Specify a different type.", "11"], - [0, 0, 0, "Do not use any type assertions.", "12"], - [0, 0, 0, "Unexpected any. Specify a different type.", "13"], - [0, 0, 0, "Do not use any type assertions.", "14"], - [0, 0, 0, "Unexpected any. Specify a different type.", "15"], + [0, 0, 0, "Unexpected any. Specify a different type.", "10"], + [0, 0, 0, "Do not use any type assertions.", "11"], + [0, 0, 0, "Unexpected any. Specify a different type.", "12"], + [0, 0, 0, "Do not use any type assertions.", "13"], + [0, 0, 0, "Unexpected any. Specify a different type.", "14"], + [0, 0, 0, "Do not use any type assertions.", "15"], [0, 0, 0, "Do not use any type assertions.", "16"], [0, 0, 0, "Do not use any type assertions.", "17"], [0, 0, 0, "Do not use any type assertions.", "18"], [0, 0, 0, "Do not use any type assertions.", "19"], [0, 0, 0, "Do not use any type assertions.", "20"], [0, 0, 0, "Do not use any type assertions.", "21"], - [0, 0, 0, "Do not use any type assertions.", "22"], - [0, 0, 0, "Do not use any type assertions.", "23"] + [0, 0, 0, "Do not use any type assertions.", "22"] ], "packages/grafana-data/src/datetime/datemath.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], @@ -139,10 +120,6 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"] ], - "packages/grafana-data/src/events/common.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"] - ], "packages/grafana-data/src/events/types.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"], @@ -153,32 +130,21 @@ exports[`better eslint`] = { "packages/grafana-data/src/field/displayProcessor.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], [0, 0, 0, "Do not use any type assertions.", "1"], - [0, 0, 0, "Do not use any type assertions.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"] + [0, 0, 0, "Do not use any type assertions.", "2"] ], - "packages/grafana-data/src/field/fieldOverrides.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"] + "packages/grafana-data/src/field/fieldState.ts:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], "packages/grafana-data/src/field/overrides/processors.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"], + [0, 0, 0, "Do not use any type assertions.", "2"], [0, 0, 0, "Unexpected any. Specify a different type.", "3"], [0, 0, 0, "Do not use any type assertions.", "4"], [0, 0, 0, "Unexpected any. Specify a different type.", "5"], - [0, 0, 0, "Do not use any type assertions.", "6"], + [0, 0, 0, "Unexpected any. Specify a different type.", "6"], [0, 0, 0, "Unexpected any. Specify a different type.", "7"], - [0, 0, 0, "Unexpected any. Specify a different type.", "8"], - [0, 0, 0, "Unexpected any. Specify a different type.", "9"], - [0, 0, 0, "Unexpected any. Specify a different type.", "10"], - [0, 0, 0, "Do not use any type assertions.", "11"] - ], - "packages/grafana-data/src/field/scale.ts:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"], - [0, 0, 0, "Do not use any type assertions.", "1"], - [0, 0, 0, "Do not use any type assertions.", "2"], - [0, 0, 0, "Do not use any type assertions.", "3"] + [0, 0, 0, "Do not use any type assertions.", "8"] ], "packages/grafana-data/src/field/standardFieldConfigEditorRegistry.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], @@ -191,8 +157,7 @@ exports[`better eslint`] = { ], "packages/grafana-data/src/geo/layer.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"] + [0, 0, 0, "Unexpected any. Specify a different type.", "1"] ], "packages/grafana-data/src/panel/PanelPlugin.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], @@ -204,16 +169,8 @@ exports[`better eslint`] = { [0, 0, 0, "Do not use any type assertions.", "6"], [0, 0, 0, "Do not use any type assertions.", "7"] ], - "packages/grafana-data/src/panel/getPanelOptionsWithDefaults.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"] - ], "packages/grafana-data/src/panel/registryFactories.ts:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"], - [0, 0, 0, "Do not use any type assertions.", "1"], - [0, 0, 0, "Do not use any type assertions.", "2"], - [0, 0, 0, "Do not use any type assertions.", "3"] + [0, 0, 0, "Do not use any type assertions.", "0"] ], "packages/grafana-data/src/themes/colorManipulator.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], @@ -223,9 +180,6 @@ exports[`better eslint`] = { "packages/grafana-data/src/themes/createColors.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] ], - "packages/grafana-data/src/transformations/fieldReducer.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], "packages/grafana-data/src/transformations/matchers/valueMatchers/types.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"] @@ -236,25 +190,14 @@ exports[`better eslint`] = { "packages/grafana-data/src/transformations/transformDataFrame.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], - "packages/grafana-data/src/transformations/transformers/groupBy.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"] - ], - "packages/grafana-data/src/transformations/transformers/groupingToMatrix.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], - "packages/grafana-data/src/transformations/transformers/histogram.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], "packages/grafana-data/src/transformations/transformers/joinDataFrames.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], - "packages/grafana-data/src/transformations/transformers/merge.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], + "packages/grafana-data/src/transformations/transformers/nulls/nullInsertThreshold.ts:5381": [ + [0, 0, 0, "Do not use any type assertions.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"], [0, 0, 0, "Unexpected any. Specify a different type.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"], - [0, 0, 0, "Unexpected any. Specify a different type.", "4"] + [0, 0, 0, "Unexpected any. Specify a different type.", "3"] ], "packages/grafana-data/src/transformations/transformers/reduce.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], @@ -344,26 +287,21 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "21"], [0, 0, 0, "Unexpected any. Specify a different type.", "22"], [0, 0, 0, "Unexpected any. Specify a different type.", "23"], - [0, 0, 0, "Unexpected any. Specify a different type.", "24"], - [0, 0, 0, "Unexpected any. Specify a different type.", "25"] + [0, 0, 0, "Unexpected any. Specify a different type.", "24"] ], "packages/grafana-data/src/types/explore.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], "packages/grafana-data/src/types/fieldOverrides.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Do not use any type assertions.", "1"], - [0, 0, 0, "Do not use any type assertions.", "2"], + [0, 0, 0, "Unexpected any. Specify a different type.", "1"], + [0, 0, 0, "Unexpected any. Specify a different type.", "2"], [0, 0, 0, "Unexpected any. Specify a different type.", "3"], [0, 0, 0, "Unexpected any. Specify a different type.", "4"], [0, 0, 0, "Unexpected any. Specify a different type.", "5"], [0, 0, 0, "Unexpected any. Specify a different type.", "6"], [0, 0, 0, "Unexpected any. Specify a different type.", "7"], - [0, 0, 0, "Unexpected any. Specify a different type.", "8"], - [0, 0, 0, "Unexpected any. Specify a different type.", "9"], - [0, 0, 0, "Unexpected any. Specify a different type.", "10"], - [0, 0, 0, "Unexpected any. Specify a different type.", "11"], - [0, 0, 0, "Unexpected any. Specify a different type.", "12"] + [0, 0, 0, "Unexpected any. Specify a different type.", "8"] ], "packages/grafana-data/src/types/flot.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] @@ -388,9 +326,6 @@ exports[`better eslint`] = { [0, 0, 0, "Do not use any type assertions.", "7"], [0, 0, 0, "Do not use any type assertions.", "8"] ], - "packages/grafana-data/src/types/logs.ts:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"] - ], "packages/grafana-data/src/types/options.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"] @@ -413,8 +348,7 @@ exports[`better eslint`] = { ], "packages/grafana-data/src/types/plugin.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Do not use any type assertions.", "2"] + [0, 0, 0, "Do not use any type assertions.", "1"] ], "packages/grafana-data/src/types/select.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], @@ -437,106 +371,34 @@ exports[`better eslint`] = { "packages/grafana-data/src/types/variables.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], - "packages/grafana-data/src/types/vector.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"] - ], "packages/grafana-data/src/utils/OptionsUIBuilders.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Do not use any type assertions.", "2"], + [0, 0, 0, "Unexpected any. Specify a different type.", "2"], [0, 0, 0, "Unexpected any. Specify a different type.", "3"], - [0, 0, 0, "Do not use any type assertions.", "4"], + [0, 0, 0, "Unexpected any. Specify a different type.", "4"], [0, 0, 0, "Unexpected any. Specify a different type.", "5"], - [0, 0, 0, "Do not use any type assertions.", "6"], + [0, 0, 0, "Unexpected any. Specify a different type.", "6"], [0, 0, 0, "Unexpected any. Specify a different type.", "7"], - [0, 0, 0, "Do not use any type assertions.", "8"], + [0, 0, 0, "Unexpected any. Specify a different type.", "8"], [0, 0, 0, "Unexpected any. Specify a different type.", "9"], - [0, 0, 0, "Do not use any type assertions.", "10"], + [0, 0, 0, "Unexpected any. Specify a different type.", "10"], [0, 0, 0, "Unexpected any. Specify a different type.", "11"], - [0, 0, 0, "Do not use any type assertions.", "12"], + [0, 0, 0, "Unexpected any. Specify a different type.", "12"], [0, 0, 0, "Unexpected any. Specify a different type.", "13"], - [0, 0, 0, "Do not use any type assertions.", "14"], + [0, 0, 0, "Unexpected any. Specify a different type.", "14"], [0, 0, 0, "Unexpected any. Specify a different type.", "15"], - [0, 0, 0, "Do not use any type assertions.", "16"], + [0, 0, 0, "Unexpected any. Specify a different type.", "16"], [0, 0, 0, "Unexpected any. Specify a different type.", "17"], [0, 0, 0, "Unexpected any. Specify a different type.", "18"], - [0, 0, 0, "Do not use any type assertions.", "19"], + [0, 0, 0, "Unexpected any. Specify a different type.", "19"], [0, 0, 0, "Unexpected any. Specify a different type.", "20"], - [0, 0, 0, "Do not use any type assertions.", "21"], + [0, 0, 0, "Unexpected any. Specify a different type.", "21"], [0, 0, 0, "Unexpected any. Specify a different type.", "22"], [0, 0, 0, "Unexpected any. Specify a different type.", "23"], - [0, 0, 0, "Do not use any type assertions.", "24"], + [0, 0, 0, "Unexpected any. Specify a different type.", "24"], [0, 0, 0, "Unexpected any. Specify a different type.", "25"], - [0, 0, 0, "Do not use any type assertions.", "26"], - [0, 0, 0, "Unexpected any. Specify a different type.", "27"], - [0, 0, 0, "Unexpected any. Specify a different type.", "28"], - [0, 0, 0, "Do not use any type assertions.", "29"], - [0, 0, 0, "Unexpected any. Specify a different type.", "30"], - [0, 0, 0, "Do not use any type assertions.", "31"], - [0, 0, 0, "Unexpected any. Specify a different type.", "32"], - [0, 0, 0, "Unexpected any. Specify a different type.", "33"], - [0, 0, 0, "Do not use any type assertions.", "34"], - [0, 0, 0, "Unexpected any. Specify a different type.", "35"], - [0, 0, 0, "Do not use any type assertions.", "36"], - [0, 0, 0, "Unexpected any. Specify a different type.", "37"], - [0, 0, 0, "Unexpected any. Specify a different type.", "38"], - [0, 0, 0, "Do not use any type assertions.", "39"], - [0, 0, 0, "Unexpected any. Specify a different type.", "40"], - [0, 0, 0, "Do not use any type assertions.", "41"], - [0, 0, 0, "Unexpected any. Specify a different type.", "42"], - [0, 0, 0, "Unexpected any. Specify a different type.", "43"], - [0, 0, 0, "Unexpected any. Specify a different type.", "44"], - [0, 0, 0, "Do not use any type assertions.", "45"], - [0, 0, 0, "Unexpected any. Specify a different type.", "46"], - [0, 0, 0, "Do not use any type assertions.", "47"], - [0, 0, 0, "Unexpected any. Specify a different type.", "48"], - [0, 0, 0, "Unexpected any. Specify a different type.", "49"], - [0, 0, 0, "Unexpected any. Specify a different type.", "50"], - [0, 0, 0, "Unexpected any. Specify a different type.", "51"], - [0, 0, 0, "Unexpected any. Specify a different type.", "52"], - [0, 0, 0, "Unexpected any. Specify a different type.", "53"], - [0, 0, 0, "Unexpected any. Specify a different type.", "54"], - [0, 0, 0, "Unexpected any. Specify a different type.", "55"], - [0, 0, 0, "Unexpected any. Specify a different type.", "56"], - [0, 0, 0, "Unexpected any. Specify a different type.", "57"], - [0, 0, 0, "Unexpected any. Specify a different type.", "58"], - [0, 0, 0, "Unexpected any. Specify a different type.", "59"], - [0, 0, 0, "Unexpected any. Specify a different type.", "60"], - [0, 0, 0, "Unexpected any. Specify a different type.", "61"], - [0, 0, 0, "Do not use any type assertions.", "62"], - [0, 0, 0, "Unexpected any. Specify a different type.", "63"], - [0, 0, 0, "Do not use any type assertions.", "64"], - [0, 0, 0, "Unexpected any. Specify a different type.", "65"], - [0, 0, 0, "Do not use any type assertions.", "66"], - [0, 0, 0, "Unexpected any. Specify a different type.", "67"], - [0, 0, 0, "Do not use any type assertions.", "68"], - [0, 0, 0, "Unexpected any. Specify a different type.", "69"], - [0, 0, 0, "Do not use any type assertions.", "70"], - [0, 0, 0, "Unexpected any. Specify a different type.", "71"], - [0, 0, 0, "Do not use any type assertions.", "72"], - [0, 0, 0, "Unexpected any. Specify a different type.", "73"], - [0, 0, 0, "Do not use any type assertions.", "74"], - [0, 0, 0, "Unexpected any. Specify a different type.", "75"], - [0, 0, 0, "Unexpected any. Specify a different type.", "76"], - [0, 0, 0, "Do not use any type assertions.", "77"], - [0, 0, 0, "Unexpected any. Specify a different type.", "78"], - [0, 0, 0, "Unexpected any. Specify a different type.", "79"], - [0, 0, 0, "Do not use any type assertions.", "80"], - [0, 0, 0, "Unexpected any. Specify a different type.", "81"], - [0, 0, 0, "Unexpected any. Specify a different type.", "82"], - [0, 0, 0, "Do not use any type assertions.", "83"], - [0, 0, 0, "Unexpected any. Specify a different type.", "84"], - [0, 0, 0, "Unexpected any. Specify a different type.", "85"], - [0, 0, 0, "Do not use any type assertions.", "86"], - [0, 0, 0, "Unexpected any. Specify a different type.", "87"], - [0, 0, 0, "Unexpected any. Specify a different type.", "88"], - [0, 0, 0, "Do not use any type assertions.", "89"], - [0, 0, 0, "Unexpected any. Specify a different type.", "90"], - [0, 0, 0, "Unexpected any. Specify a different type.", "91"], - [0, 0, 0, "Do not use any type assertions.", "92"], - [0, 0, 0, "Unexpected any. Specify a different type.", "93"] + [0, 0, 0, "Unexpected any. Specify a different type.", "26"] ], "packages/grafana-data/src/utils/Registry.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] @@ -556,34 +418,25 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], "packages/grafana-data/src/utils/datasource.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"], - [0, 0, 0, "Do not use any type assertions.", "3"], - [0, 0, 0, "Do not use any type assertions.", "4"] - ], - "packages/grafana-data/src/utils/fieldParser.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] + [0, 0, 0, "Do not use any type assertions.", "0"], + [0, 0, 0, "Do not use any type assertions.", "1"] ], "packages/grafana-data/src/utils/flotPairs.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], "packages/grafana-data/src/utils/location.ts:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"] + [0, 0, 0, "Do not use any type assertions.", "0"] ], "packages/grafana-data/src/utils/url.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"], [0, 0, 0, "Unexpected any. Specify a different type.", "2"], [0, 0, 0, "Unexpected any. Specify a different type.", "3"], - [0, 0, 0, "Unexpected any. Specify a different type.", "4"], - [0, 0, 0, "Do not use any type assertions.", "5"], + [0, 0, 0, "Do not use any type assertions.", "4"], + [0, 0, 0, "Unexpected any. Specify a different type.", "5"], [0, 0, 0, "Unexpected any. Specify a different type.", "6"], - [0, 0, 0, "Unexpected any. Specify a different type.", "7"], - [0, 0, 0, "Do not use any type assertions.", "8"], - [0, 0, 0, "Unexpected any. Specify a different type.", "9"] + [0, 0, 0, "Do not use any type assertions.", "7"], + [0, 0, 0, "Unexpected any. Specify a different type.", "8"] ], "packages/grafana-data/src/utils/valueMappings.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], @@ -592,24 +445,7 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "3"], [0, 0, 0, "Unexpected any. Specify a different type.", "4"] ], - "packages/grafana-data/src/vector/AppendedVectors.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Do not use any type assertions.", "1"], - [0, 0, 0, "Do not use any type assertions.", "2"] - ], - "packages/grafana-data/src/vector/ArrayVector.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"] - ], "packages/grafana-data/src/vector/CircularVector.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"] - ], - "packages/grafana-data/src/vector/ConstantVector.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], - "packages/grafana-data/src/vector/FormattedVector.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], "packages/grafana-data/src/vector/FunctionalVector.ts:5381": [ @@ -621,12 +457,7 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "5"], [0, 0, 0, "Unexpected any. Specify a different type.", "6"], [0, 0, 0, "Unexpected any. Specify a different type.", "7"], - [0, 0, 0, "Unexpected any. Specify a different type.", "8"], - [0, 0, 0, "Unexpected any. Specify a different type.", "9"], - [0, 0, 0, "Unexpected any. Specify a different type.", "10"] - ], - "packages/grafana-data/src/vector/SortedVector.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] + [0, 0, 0, "Unexpected any. Specify a different type.", "8"] ], "packages/grafana-data/test/__mocks__/pluginMocks.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] @@ -668,40 +499,67 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "12"] ], "packages/grafana-flamegraph/src/TopTable/FlameGraphTopTableContainer.tsx:5381": [ + [0, 0, 0, "Styles should be written using objects.", "0"], + [0, 0, 0, "Styles should be written using objects.", "1"] + ], + "packages/grafana-o11y-ds-frontend/src/utils.ts:5381": [ + [0, 0, 0, "Do not use any type assertions.", "0"] + ], + "packages/grafana-prometheus/src/components/PromExemplarField.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"] + [0, 0, 0, "Styles should be written using objects.", "2"] ], - "packages/grafana-runtime/src/analytics/types.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] + "packages/grafana-prometheus/src/components/PromExploreExtraField.tsx:5381": [ + [0, 0, 0, "Styles should be written using objects.", "0"], + [0, 0, 0, "Styles should be written using objects.", "1"] ], - "packages/grafana-runtime/src/config.ts:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"], - [0, 0, 0, "Do not use any type assertions.", "1"], - [0, 0, 0, "Do not use any type assertions.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"] + "packages/grafana-prometheus/src/components/PromQueryField.test.tsx:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], - "packages/grafana-runtime/src/services/AngularLoader.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"] + "packages/grafana-prometheus/src/components/PromQueryField.tsx:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], - "packages/grafana-runtime/src/services/EchoSrv.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"] + "packages/grafana-prometheus/src/components/PrometheusMetricsBrowser.tsx:5381": [ + [0, 0, 0, "Styles should be written using objects.", "0"], + [0, 0, 0, "Styles should be written using objects.", "1"], + [0, 0, 0, "Styles should be written using objects.", "2"], + [0, 0, 0, "Styles should be written using objects.", "3"], + [0, 0, 0, "Styles should be written using objects.", "4"], + [0, 0, 0, "Styles should be written using objects.", "5"], + [0, 0, 0, "Styles should be written using objects.", "6"], + [0, 0, 0, "Styles should be written using objects.", "7"], + [0, 0, 0, "Styles should be written using objects.", "8"], + [0, 0, 0, "Styles should be written using objects.", "9"], + [0, 0, 0, "Styles should be written using objects.", "10"], + [0, 0, 0, "Styles should be written using objects.", "11"] ], - "packages/grafana-runtime/src/services/LocationService.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"], - [0, 0, 0, "Do not use any type assertions.", "4"], - [0, 0, 0, "Unexpected any. Specify a different type.", "5"] + "packages/grafana-prometheus/src/components/monaco-query-field/MonacoQueryField.tsx:5381": [ + [0, 0, 0, "Styles should be written using objects.", "0"], + [0, 0, 0, "Styles should be written using objects.", "1"] ], - "packages/grafana-runtime/src/services/backendSrv.ts:5381": [ + "packages/grafana-prometheus/src/configuration/ConfigEditor.tsx:5381": [ + [0, 0, 0, "Styles should be written using objects.", "0"], + [0, 0, 0, "Styles should be written using objects.", "1"], + [0, 0, 0, "Styles should be written using objects.", "2"], + [0, 0, 0, "Styles should be written using objects.", "3"], + [0, 0, 0, "Styles should be written using objects.", "4"], + [0, 0, 0, "Styles should be written using objects.", "5"], + [0, 0, 0, "Styles should be written using objects.", "6"], + [0, 0, 0, "Styles should be written using objects.", "7"], + [0, 0, 0, "Styles should be written using objects.", "8"], + [0, 0, 0, "Styles should be written using objects.", "9"], + [0, 0, 0, "Styles should be written using objects.", "10"], + [0, 0, 0, "Styles should be written using objects.", "11"], + [0, 0, 0, "Styles should be written using objects.", "12"], + [0, 0, 0, "Styles should be written using objects.", "13"], + [0, 0, 0, "Styles should be written using objects.", "14"], + [0, 0, 0, "Styles should be written using objects.", "15"] + ], + "packages/grafana-prometheus/src/configuration/ExemplarsSettings.tsx:5381": [ + [0, 0, 0, "Styles should be written using objects.", "0"] + ], + "packages/grafana-prometheus/src/datasource.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"], [0, 0, 0, "Unexpected any. Specify a different type.", "2"], @@ -716,45 +574,189 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "11"], [0, 0, 0, "Unexpected any. Specify a different type.", "12"] ], - "packages/grafana-runtime/src/utils/DataSourceWithBackend.ts:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"], + "packages/grafana-prometheus/src/gcopypaste/app/features/live/data/amendTimeSeries.ts:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Do not use any type assertions.", "1"], + [0, 0, 0, "Do not use any type assertions.", "2"], + [0, 0, 0, "Do not use any type assertions.", "3"], + [0, 0, 0, "Do not use any type assertions.", "4"] + ], + "packages/grafana-prometheus/src/gcopypaste/public/test/matchers/index.ts:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"] + ], + "packages/grafana-prometheus/src/gcopypaste/public/test/matchers/toEmitValuesWith.ts:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"], + [0, 0, 0, "Unexpected any. Specify a different type.", "1"], + [0, 0, 0, "Unexpected any. Specify a different type.", "2"] + ], + "packages/grafana-prometheus/src/gcopypaste/public/test/matchers/utils.ts:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"] + ], + "packages/grafana-prometheus/src/gcopypaste/test/helpers/selectOptionInTest.ts:5381": [ + [0, 0, 0, "Do not use any type assertions.", "0"] + ], + "packages/grafana-prometheus/src/language_provider.ts:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"], + [0, 0, 0, "Unexpected any. Specify a different type.", "1"], [0, 0, 0, "Unexpected any. Specify a different type.", "2"], [0, 0, 0, "Unexpected any. Specify a different type.", "3"], [0, 0, 0, "Unexpected any. Specify a different type.", "4"] ], - "packages/grafana-runtime/src/utils/queryResponse.ts:5381": [ + "packages/grafana-prometheus/src/language_utils.ts:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"], + [0, 0, 0, "Unexpected any. Specify a different type.", "1"], + [0, 0, 0, "Do not use any type assertions.", "2"] + ], + "packages/grafana-prometheus/src/metric_find_query.ts:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"], + [0, 0, 0, "Unexpected any. Specify a different type.", "1"], + [0, 0, 0, "Unexpected any. Specify a different type.", "2"], + [0, 0, 0, "Unexpected any. Specify a different type.", "3"], + [0, 0, 0, "Unexpected any. Specify a different type.", "4"] + ], + "packages/grafana-prometheus/src/query_hints.ts:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"] + ], + "packages/grafana-prometheus/src/querybuilder/QueryPattern.tsx:5381": [ + [0, 0, 0, "Styles should be written using objects.", "0"], + [0, 0, 0, "Styles should be written using objects.", "1"], + [0, 0, 0, "Styles should be written using objects.", "2"], + [0, 0, 0, "Styles should be written using objects.", "3"] + ], + "packages/grafana-prometheus/src/querybuilder/QueryPatternsModal.tsx:5381": [ + [0, 0, 0, "Styles should be written using objects.", "0"], + [0, 0, 0, "Styles should be written using objects.", "1"] + ], + "packages/grafana-prometheus/src/querybuilder/binaryScalarOperations.ts:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"] + ], + "packages/grafana-prometheus/src/querybuilder/components/LabelFilterItem.tsx:5381": [ + [0, 0, 0, "Do not use any type assertions.", "0"], + [0, 0, 0, "Do not use any type assertions.", "1"], + [0, 0, 0, "Do not use any type assertions.", "2"], + [0, 0, 0, "Do not use any type assertions.", "3"] + ], + "packages/grafana-prometheus/src/querybuilder/components/LabelFilters.tsx:5381": [ + [0, 0, 0, "Styles should be written using objects.", "0"] + ], + "packages/grafana-prometheus/src/querybuilder/components/LabelParamEditor.tsx:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] ], - "packages/grafana-schema/src/veneer/common.types.ts:5381": [ + "packages/grafana-prometheus/src/querybuilder/components/MetricSelect.tsx:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"], + [0, 0, 0, "Unexpected any. Specify a different type.", "1"], + [0, 0, 0, "Unexpected any. Specify a different type.", "2"], + [0, 0, 0, "Unexpected any. Specify a different type.", "3"], + [0, 0, 0, "Styles should be written using objects.", "4"], + [0, 0, 0, "Styles should be written using objects.", "5"], + [0, 0, 0, "Styles should be written using objects.", "6"], + [0, 0, 0, "Styles should be written using objects.", "7"], + [0, 0, 0, "Styles should be written using objects.", "8"], + [0, 0, 0, "Styles should be written using objects.", "9"], + [0, 0, 0, "Styles should be written using objects.", "10"], + [0, 0, 0, "Styles should be written using objects.", "11"], + [0, 0, 0, "Styles should be written using objects.", "12"] + ], + "packages/grafana-prometheus/src/querybuilder/components/PromQueryBuilder.tsx:5381": [ + [0, 0, 0, "Do not use any type assertions.", "0"] + ], + "packages/grafana-prometheus/src/querybuilder/components/PromQueryCodeEditor.tsx:5381": [ + [0, 0, 0, "Styles should be written using objects.", "0"] + ], + "packages/grafana-prometheus/src/querybuilder/components/metrics-modal/AdditionalSettings.tsx:5381": [ + [0, 0, 0, "Styles should be written using objects.", "0"], + [0, 0, 0, "Styles should be written using objects.", "1"], + [0, 0, 0, "Styles should be written using objects.", "2"] + ], + "packages/grafana-prometheus/src/querybuilder/components/metrics-modal/ResultsTable.tsx:5381": [ + [0, 0, 0, "Styles should be written using objects.", "0"], + [0, 0, 0, "Styles should be written using objects.", "1"], + [0, 0, 0, "Styles should be written using objects.", "2"], + [0, 0, 0, "Styles should be written using objects.", "3"], + [0, 0, 0, "Styles should be written using objects.", "4"], + [0, 0, 0, "Styles should be written using objects.", "5"], + [0, 0, 0, "Styles should be written using objects.", "6"], + [0, 0, 0, "Styles should be written using objects.", "7"], + [0, 0, 0, "Styles should be written using objects.", "8"], + [0, 0, 0, "Styles should be written using objects.", "9"], + [0, 0, 0, "Styles should be written using objects.", "10"], + [0, 0, 0, "Styles should be written using objects.", "11"], + [0, 0, 0, "Styles should be written using objects.", "12"] + ], + "packages/grafana-prometheus/src/querybuilder/components/metrics-modal/styles.ts:5381": [ + [0, 0, 0, "Styles should be written using objects.", "0"], + [0, 0, 0, "Styles should be written using objects.", "1"], + [0, 0, 0, "Styles should be written using objects.", "2"], + [0, 0, 0, "Styles should be written using objects.", "3"], + [0, 0, 0, "Styles should be written using objects.", "4"], + [0, 0, 0, "Styles should be written using objects.", "5"], + [0, 0, 0, "Styles should be written using objects.", "6"], + [0, 0, 0, "Styles should be written using objects.", "7"], + [0, 0, 0, "Styles should be written using objects.", "8"], + [0, 0, 0, "Styles should be written using objects.", "9"], + [0, 0, 0, "Styles should be written using objects.", "10"], + [0, 0, 0, "Styles should be written using objects.", "11"], + [0, 0, 0, "Styles should be written using objects.", "12"], + [0, 0, 0, "Styles should be written using objects.", "13"], + [0, 0, 0, "Styles should be written using objects.", "14"], + [0, 0, 0, "Styles should be written using objects.", "15"], + [0, 0, 0, "Styles should be written using objects.", "16"], + [0, 0, 0, "Styles should be written using objects.", "17"], + [0, 0, 0, "Styles should be written using objects.", "18"] + ], + "packages/grafana-prometheus/src/querybuilder/operationUtils.ts:5381": [ + [0, 0, 0, "Do not use any type assertions.", "0"] + ], + "packages/grafana-prometheus/src/querybuilder/shared/OperationEditor.tsx:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], - "packages/grafana-schema/src/veneer/dashboard.types.ts:5381": [ + "packages/grafana-prometheus/src/querybuilder/shared/OperationParamEditor.tsx:5381": [ + [0, 0, 0, "Do not use any type assertions.", "0"], + [0, 0, 0, "Do not use any type assertions.", "1"] + ], + "packages/grafana-prometheus/src/querybuilder/shared/QueryBuilderHints.tsx:5381": [ + [0, 0, 0, "Styles should be written using objects.", "0"], + [0, 0, 0, "Styles should be written using objects.", "1"] + ], + "packages/grafana-prometheus/src/querybuilder/shared/types.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Do not use any type assertions.", "2"], - [0, 0, 0, "Do not use any type assertions.", "3"], - [0, 0, 0, "Do not use any type assertions.", "4"], - [0, 0, 0, "Do not use any type assertions.", "5"] + [0, 0, 0, "Unexpected any. Specify a different type.", "2"] ], - "packages/grafana-ui/src/components/ColorPicker/ColorPicker.tsx:5381": [ + "packages/grafana-prometheus/src/types.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"] + [0, 0, 0, "Unexpected any. Specify a different type.", "1"], + [0, 0, 0, "Unexpected any. Specify a different type.", "2"] ], - "packages/grafana-ui/src/components/DataLinks/DataLinkInput.tsx:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"] + "packages/grafana-runtime/src/analytics/types.ts:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], - "packages/grafana-ui/src/components/DataLinks/DataLinksContextMenu.tsx:5381": [ - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"] + "packages/grafana-runtime/src/config.ts:5381": [ + [0, 0, 0, "Do not use any type assertions.", "0"], + [0, 0, 0, "Do not use any type assertions.", "1"], + [0, 0, 0, "Do not use any type assertions.", "2"], + [0, 0, 0, "Unexpected any. Specify a different type.", "3"] ], - "packages/grafana-ui/src/components/DataSourceSettings/CustomHeadersSettings.tsx:5381": [ + "packages/grafana-runtime/src/services/AngularLoader.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"] + [0, 0, 0, "Unexpected any. Specify a different type.", "1"], + [0, 0, 0, "Unexpected any. Specify a different type.", "2"] ], - "packages/grafana-ui/src/components/DataSourceSettings/DataSourceHttpSettings.tsx:5381": [ - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"] + "packages/grafana-runtime/src/services/EchoSrv.ts:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"], + [0, 0, 0, "Unexpected any. Specify a different type.", "1"], + [0, 0, 0, "Unexpected any. Specify a different type.", "2"], + [0, 0, 0, "Unexpected any. Specify a different type.", "3"] ], - "packages/grafana-ui/src/components/DataSourceSettings/types.ts:5381": [ + "packages/grafana-runtime/src/services/LocationService.ts:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"], + [0, 0, 0, "Unexpected any. Specify a different type.", "1"], + [0, 0, 0, "Unexpected any. Specify a different type.", "2"], + [0, 0, 0, "Unexpected any. Specify a different type.", "3"], + [0, 0, 0, "Do not use any type assertions.", "4"], + [0, 0, 0, "Unexpected any. Specify a different type.", "5"] + ], + "packages/grafana-runtime/src/services/backendSrv.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"], [0, 0, 0, "Unexpected any. Specify a different type.", "2"], @@ -762,73 +764,89 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "4"], [0, 0, 0, "Unexpected any. Specify a different type.", "5"], [0, 0, 0, "Unexpected any. Specify a different type.", "6"], - [0, 0, 0, "Unexpected any. Specify a different type.", "7"] + [0, 0, 0, "Unexpected any. Specify a different type.", "7"], + [0, 0, 0, "Unexpected any. Specify a different type.", "8"], + [0, 0, 0, "Unexpected any. Specify a different type.", "9"], + [0, 0, 0, "Unexpected any. Specify a different type.", "10"], + [0, 0, 0, "Unexpected any. Specify a different type.", "11"], + [0, 0, 0, "Unexpected any. Specify a different type.", "12"] ], - "packages/grafana-ui/src/components/DateTimePickers/TimeRangeInput.tsx:5381": [ - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"] + "packages/grafana-runtime/src/services/pluginExtensions/getPluginExtensions.ts:5381": [ + [0, 0, 0, "Do not use any type assertions.", "0"] ], - "packages/grafana-ui/src/components/DateTimePickers/TimeRangePicker/CalendarHeader.tsx:5381": [ - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"] + "packages/grafana-runtime/src/utils/DataSourceWithBackend.ts:5381": [ + [0, 0, 0, "Do not use any type assertions.", "0"], + [0, 0, 0, "Unexpected any. Specify a different type.", "1"] ], - "packages/grafana-ui/src/components/DateTimePickers/TimeRangePicker/TimePickerCalendar.tsx:5381": [ - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"] + "packages/grafana-runtime/src/utils/queryResponse.ts:5381": [ + [0, 0, 0, "Do not use any type assertions.", "0"] ], - "packages/grafana-ui/src/components/DateTimePickers/TimeRangePicker/TimePickerFooter.tsx:5381": [ - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"] + "packages/grafana-schema/src/veneer/common.types.ts:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], - "packages/grafana-ui/src/components/DateTimePickers/TimeRangePicker/TimeRangeContent.tsx:5381": [ - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"], - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "1"], - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "2"] + "packages/grafana-schema/src/veneer/dashboard.types.ts:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"], + [0, 0, 0, "Unexpected any. Specify a different type.", "1"], + [0, 0, 0, "Do not use any type assertions.", "2"], + [0, 0, 0, "Do not use any type assertions.", "3"], + [0, 0, 0, "Do not use any type assertions.", "4"], + [0, 0, 0, "Do not use any type assertions.", "5"], + [0, 0, 0, "Do not use any type assertions.", "6"] ], - "packages/grafana-ui/src/components/Drawer/Drawer.tsx:5381": [ - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"] + "packages/grafana-sql/src/components/query-editor-raw/QueryToolbox.tsx:5381": [ + [0, 0, 0, "Styles should be written using objects.", "0"], + [0, 0, 0, "Styles should be written using objects.", "1"], + [0, 0, 0, "Styles should be written using objects.", "2"], + [0, 0, 0, "Styles should be written using objects.", "3"], + [0, 0, 0, "Styles should be written using objects.", "4"] ], - "packages/grafana-ui/src/components/Forms/Legacy/Input/Input.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Do not use any type assertions.", "1"], - [0, 0, 0, "Do not use any type assertions.", "2"] + "packages/grafana-sql/src/components/query-editor-raw/QueryValidator.tsx:5381": [ + [0, 0, 0, "Styles should be written using objects.", "0"], + [0, 0, 0, "Styles should be written using objects.", "1"], + [0, 0, 0, "Styles should be written using objects.", "2"] ], - "packages/grafana-ui/src/components/Forms/Legacy/Select/Select.tsx:5381": [ + "packages/grafana-sql/src/components/query-editor-raw/RawEditor.tsx:5381": [ + [0, 0, 0, "Styles should be written using objects.", "0"], + [0, 0, 0, "Styles should be written using objects.", "1"] + ], + "packages/grafana-sql/src/components/visual-query-builder/AwesomeQueryBuilder.tsx:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], - "packages/grafana-ui/src/components/Forms/Legacy/Select/SelectOption.tsx:5381": [ + "packages/grafana-sql/src/components/visual-query-builder/SQLWhereRow.tsx:5381": [ + [0, 0, 0, "Do not use any type assertions.", "0"] + ], + "packages/grafana-ui/src/components/ColorPicker/ColorPicker.tsx:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"] ], - "packages/grafana-ui/src/components/Graph/GraphContextMenu.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] + "packages/grafana-ui/src/components/DataLinks/DataLinkInput.tsx:5381": [ + [0, 0, 0, "Do not use any type assertions.", "0"] ], - "packages/grafana-ui/src/components/Graph/utils.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] + "packages/grafana-ui/src/components/DataSourceSettings/CustomHeadersSettings.tsx:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"], + [0, 0, 0, "Unexpected any. Specify a different type.", "1"] ], - "packages/grafana-ui/src/components/GraphNG/GraphNG.tsx:5381": [ + "packages/grafana-ui/src/components/DataSourceSettings/types.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"], [0, 0, 0, "Unexpected any. Specify a different type.", "2"], [0, 0, 0, "Unexpected any. Specify a different type.", "3"], [0, 0, 0, "Unexpected any. Specify a different type.", "4"], - [0, 0, 0, "Do not use any type assertions.", "5"], - [0, 0, 0, "Do not use any type assertions.", "6"], - [0, 0, 0, "Do not use any type assertions.", "7"], - [0, 0, 0, "Unexpected any. Specify a different type.", "8"], - [0, 0, 0, "Do not use any type assertions.", "9"], - [0, 0, 0, "Do not use any type assertions.", "10"], - [0, 0, 0, "Do not use any type assertions.", "11"] + [0, 0, 0, "Unexpected any. Specify a different type.", "5"], + [0, 0, 0, "Unexpected any. Specify a different type.", "6"], + [0, 0, 0, "Unexpected any. Specify a different type.", "7"] ], - "packages/grafana-ui/src/components/GraphNG/hooks.ts:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"] + "packages/grafana-ui/src/components/Forms/Legacy/Input/Input.tsx:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"], + [0, 0, 0, "Do not use any type assertions.", "1"], + [0, 0, 0, "Do not use any type assertions.", "2"] ], - "packages/grafana-ui/src/components/GraphNG/nullInsertThreshold.ts:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"] + "packages/grafana-ui/src/components/Forms/Legacy/Select/Select.tsx:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], - "packages/grafana-ui/src/components/GraphNG/nullToUndefThreshold.ts:5381": [ + "packages/grafana-ui/src/components/Forms/Legacy/Select/SelectOption.tsx:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Do not use any type assertions.", "2"] + [0, 0, 0, "Unexpected any. Specify a different type.", "1"] ], "packages/grafana-ui/src/components/InfoBox/InfoBox.tsx:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] @@ -843,22 +861,12 @@ exports[`better eslint`] = { "packages/grafana-ui/src/components/MatchersUI/fieldMatchersUI.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], - "packages/grafana-ui/src/components/Menu/SubMenu.tsx:5381": [ - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"], - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "1"] - ], "packages/grafana-ui/src/components/Modal/ModalsContext.tsx:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"], [0, 0, 0, "Unexpected any. Specify a different type.", "2"], [0, 0, 0, "Unexpected any. Specify a different type.", "3"] ], - "packages/grafana-ui/src/components/PageLayout/PageToolbar.tsx:5381": [ - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"] - ], - "packages/grafana-ui/src/components/PanelChrome/LoadingIndicator.tsx:5381": [ - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"] - ], "packages/grafana-ui/src/components/PanelChrome/PanelContext.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"] @@ -866,9 +874,6 @@ exports[`better eslint`] = { "packages/grafana-ui/src/components/PanelChrome/index.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] ], - "packages/grafana-ui/src/components/QueryField/QueryField.tsx:5381": [ - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"] - ], "packages/grafana-ui/src/components/Segment/SegmentSelect.tsx:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] ], @@ -884,8 +889,7 @@ exports[`better eslint`] = { [0, 0, 0, "Do not use any type assertions.", "8"], [0, 0, 0, "Unexpected any. Specify a different type.", "9"], [0, 0, 0, "Unexpected any. Specify a different type.", "10"], - [0, 0, 0, "Unexpected any. Specify a different type.", "11"], - [0, 0, 0, "Unexpected any. Specify a different type.", "12"] + [0, 0, 0, "Unexpected any. Specify a different type.", "11"] ], "packages/grafana-ui/src/components/Select/SelectOptionGroup.tsx:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], @@ -951,7 +955,8 @@ exports[`better eslint`] = { ], "packages/grafana-ui/src/components/Table/Table.tsx:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Do not use any type assertions.", "1"] + [0, 0, 0, "Unexpected any. Specify a different type.", "1"], + [0, 0, 0, "Do not use any type assertions.", "2"] ], "packages/grafana-ui/src/components/Table/TableCell.tsx:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], @@ -981,16 +986,7 @@ exports[`better eslint`] = { "packages/grafana-ui/src/components/Tags/Tag.tsx:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] ], - "packages/grafana-ui/src/components/TimeSeries/utils.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Do not use any type assertions.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"] - ], "packages/grafana-ui/src/components/ValuePicker/ValuePicker.tsx:5381": [ - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"], - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "1"] - ], - "packages/grafana-ui/src/components/VizLegend/VizLegendListItem.tsx:5381": [ [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"] ], "packages/grafana-ui/src/components/VizLegend/types.ts:5381": [ @@ -1025,9 +1021,6 @@ exports[`better eslint`] = { [0, 0, 0, "Do not use any type assertions.", "0"], [0, 0, 0, "Do not use any type assertions.", "1"] ], - "packages/grafana-ui/src/components/uPlot/plugins/TooltipPlugin2.tsx:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"] - ], "packages/grafana-ui/src/components/uPlot/types.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], @@ -1035,6 +1028,45 @@ exports[`better eslint`] = { [0, 0, 0, "Do not use any type assertions.", "0"], [0, 0, 0, "Do not use any type assertions.", "1"] ], + "packages/grafana-ui/src/graveyard/Graph/GraphContextMenu.tsx:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"] + ], + "packages/grafana-ui/src/graveyard/Graph/utils.ts:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"] + ], + "packages/grafana-ui/src/graveyard/GraphNG/GraphNG.tsx:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"], + [0, 0, 0, "Unexpected any. Specify a different type.", "1"], + [0, 0, 0, "Unexpected any. Specify a different type.", "2"], + [0, 0, 0, "Unexpected any. Specify a different type.", "3"], + [0, 0, 0, "Unexpected any. Specify a different type.", "4"], + [0, 0, 0, "Do not use any type assertions.", "5"], + [0, 0, 0, "Do not use any type assertions.", "6"], + [0, 0, 0, "Do not use any type assertions.", "7"], + [0, 0, 0, "Unexpected any. Specify a different type.", "8"], + [0, 0, 0, "Do not use any type assertions.", "9"], + [0, 0, 0, "Do not use any type assertions.", "10"], + [0, 0, 0, "Do not use any type assertions.", "11"] + ], + "packages/grafana-ui/src/graveyard/GraphNG/hooks.ts:5381": [ + [0, 0, 0, "Do not use any type assertions.", "0"] + ], + "packages/grafana-ui/src/graveyard/GraphNG/nullInsertThreshold.ts:5381": [ + [0, 0, 0, "Do not use any type assertions.", "0"], + [0, 0, 0, "Unexpected any. Specify a different type.", "1"], + [0, 0, 0, "Unexpected any. Specify a different type.", "2"], + [0, 0, 0, "Unexpected any. Specify a different type.", "3"] + ], + "packages/grafana-ui/src/graveyard/GraphNG/nullToUndefThreshold.ts:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"], + [0, 0, 0, "Unexpected any. Specify a different type.", "1"], + [0, 0, 0, "Do not use any type assertions.", "2"] + ], + "packages/grafana-ui/src/graveyard/TimeSeries/utils.ts:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"], + [0, 0, 0, "Do not use any type assertions.", "1"], + [0, 0, 0, "Unexpected any. Specify a different type.", "2"] + ], "packages/grafana-ui/src/options/builder/axis.tsx:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"], @@ -1044,9 +1076,6 @@ exports[`better eslint`] = { "packages/grafana-ui/src/options/builder/hideSeries.tsx:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] ], - "packages/grafana-ui/src/options/builder/stacking.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], "packages/grafana-ui/src/slate-plugins/braces.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] ], @@ -1113,256 +1142,63 @@ exports[`better eslint`] = { "packages/grafana-ui/src/utils/useAsyncDependency.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], - "plugins-bundled/internal/input-datasource/src/InputDatasource.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], "public/app/core/TableModel.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"], - [0, 0, 0, "Unexpected any. Specify a different type.", "4"], - [0, 0, 0, "Unexpected any. Specify a different type.", "5"], - [0, 0, 0, "Unexpected any. Specify a different type.", "6"] - ], - "public/app/core/components/AppChrome/MegaMenu/NavFeatureHighlight.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] - ], - "public/app/core/components/AppChrome/News/NewsContainer.tsx:5381": [ - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"] - ], - "public/app/core/components/AppChrome/SectionNav/SectionNavItem.tsx:5381": [ - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"] - ], - "public/app/core/components/AppChrome/TopBar/TopSearchBarCommandPaletteTrigger.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] - ], - "public/app/core/components/Branding/Branding.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"] - ], - "public/app/core/components/CardButton.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] - ], - "public/app/core/components/CloseButton/CloseButton.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] - ], - "public/app/core/components/ColorScale/ColorScale.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"], - [0, 0, 0, "Styles should be written using objects.", "4"], - [0, 0, 0, "Styles should be written using objects.", "5"] - ], - "public/app/core/components/Divider.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"] - ], - "public/app/core/components/DynamicImports/SafeDynamicImport.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], - "public/app/core/components/EmptyListCTA/EmptyListCTA.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"] - ], - "public/app/core/components/FolderFilter/FolderFilter.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"] - ], - "public/app/core/components/ForgottenPassword/ChangePassword.tsx:5381": [ - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"] - ], - "public/app/core/components/ForgottenPassword/ForgottenPassword.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] - ], - "public/app/core/components/Layers/LayerDragDropList.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"], - [0, 0, 0, "Styles should be written using objects.", "4"], - [0, 0, 0, "Styles should be written using objects.", "5"], - [0, 0, 0, "Styles should be written using objects.", "6"] - ], - "public/app/core/components/Layers/LayerName.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"], - [0, 0, 0, "Styles should be written using objects.", "4"] - ], - "public/app/core/components/Login/LoginForm.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "2"], - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "3"] - ], - "public/app/core/components/Login/LoginLayout.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"], - [0, 0, 0, "Styles should be written using objects.", "4"], - [0, 0, 0, "Styles should be written using objects.", "5"], - [0, 0, 0, "Styles should be written using objects.", "6"], - [0, 0, 0, "Styles should be written using objects.", "7"], - [0, 0, 0, "Styles should be written using objects.", "8"], - [0, 0, 0, "Styles should be written using objects.", "9"], - [0, 0, 0, "Styles should be written using objects.", "10"] - ], - "public/app/core/components/Login/LoginPage.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] - ], - "public/app/core/components/Login/LoginServiceButtons.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"], - [0, 0, 0, "Styles should be written using objects.", "4"] + [0, 0, 0, "Unexpected any. Specify a different type.", "2"], + [0, 0, 0, "Unexpected any. Specify a different type.", "3"], + [0, 0, 0, "Unexpected any. Specify a different type.", "4"], + [0, 0, 0, "Unexpected any. Specify a different type.", "5"], + [0, 0, 0, "Unexpected any. Specify a different type.", "6"] ], - "public/app/core/components/Login/UserSignup.tsx:5381": [ + "public/app/core/components/AppChrome/TopBar/TopSearchBarCommandPaletteTrigger.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"] ], - "public/app/core/components/NestedFolderPicker/Trigger.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] + "public/app/core/components/DynamicImports/SafeDynamicImport.tsx:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], - "public/app/core/components/NodeGraphSettings.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"] + "public/app/core/components/GraphNG/GraphNG.tsx:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"], + [0, 0, 0, "Unexpected any. Specify a different type.", "1"], + [0, 0, 0, "Unexpected any. Specify a different type.", "2"], + [0, 0, 0, "Unexpected any. Specify a different type.", "3"], + [0, 0, 0, "Unexpected any. Specify a different type.", "4"], + [0, 0, 0, "Do not use any type assertions.", "5"], + [0, 0, 0, "Do not use any type assertions.", "6"], + [0, 0, 0, "Unexpected any. Specify a different type.", "7"], + [0, 0, 0, "Do not use any type assertions.", "8"], + [0, 0, 0, "Do not use any type assertions.", "9"] ], - "public/app/core/components/OptionsUI/color.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"] + "public/app/core/components/GraphNG/hooks.ts:5381": [ + [0, 0, 0, "Do not use any type assertions.", "0"] ], - "public/app/core/components/OptionsUI/fieldColor.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"] + "public/app/core/components/NestedFolderPicker/Trigger.tsx:5381": [ + [0, 0, 0, "Styles should be written using objects.", "0"] ], "public/app/core/components/OptionsUI/registry.tsx:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"], + [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Do not use any type assertions.", "2"], + [0, 0, 0, "Unexpected any. Specify a different type.", "2"], [0, 0, 0, "Unexpected any. Specify a different type.", "3"], - [0, 0, 0, "Do not use any type assertions.", "4"], + [0, 0, 0, "Unexpected any. Specify a different type.", "4"], [0, 0, 0, "Unexpected any. Specify a different type.", "5"], - [0, 0, 0, "Do not use any type assertions.", "6"], + [0, 0, 0, "Unexpected any. Specify a different type.", "6"], [0, 0, 0, "Unexpected any. Specify a different type.", "7"], - [0, 0, 0, "Do not use any type assertions.", "8"], + [0, 0, 0, "Unexpected any. Specify a different type.", "8"], [0, 0, 0, "Unexpected any. Specify a different type.", "9"], - [0, 0, 0, "Do not use any type assertions.", "10"], - [0, 0, 0, "Unexpected any. Specify a different type.", "11"], - [0, 0, 0, "Do not use any type assertions.", "12"], - [0, 0, 0, "Unexpected any. Specify a different type.", "13"], - [0, 0, 0, "Do not use any type assertions.", "14"], - [0, 0, 0, "Unexpected any. Specify a different type.", "15"], - [0, 0, 0, "Do not use any type assertions.", "16"], - [0, 0, 0, "Unexpected any. Specify a different type.", "17"], - [0, 0, 0, "Do not use any type assertions.", "18"], - [0, 0, 0, "Unexpected any. Specify a different type.", "19"], - [0, 0, 0, "Unexpected any. Specify a different type.", "20"], - [0, 0, 0, "Do not use any type assertions.", "21"], - [0, 0, 0, "Unexpected any. Specify a different type.", "22"], - [0, 0, 0, "Do not use any type assertions.", "23"], - [0, 0, 0, "Unexpected any. Specify a different type.", "24"], - [0, 0, 0, "Unexpected any. Specify a different type.", "25"], - [0, 0, 0, "Do not use any type assertions.", "26"], - [0, 0, 0, "Unexpected any. Specify a different type.", "27"], - [0, 0, 0, "Do not use any type assertions.", "28"], - [0, 0, 0, "Unexpected any. Specify a different type.", "29"], - [0, 0, 0, "Unexpected any. Specify a different type.", "30"], - [0, 0, 0, "Do not use any type assertions.", "31"], - [0, 0, 0, "Unexpected any. Specify a different type.", "32"], - [0, 0, 0, "Do not use any type assertions.", "33"], - [0, 0, 0, "Unexpected any. Specify a different type.", "34"], - [0, 0, 0, "Unexpected any. Specify a different type.", "35"], - [0, 0, 0, "Do not use any type assertions.", "36"], - [0, 0, 0, "Unexpected any. Specify a different type.", "37"], - [0, 0, 0, "Do not use any type assertions.", "38"], - [0, 0, 0, "Unexpected any. Specify a different type.", "39"], - [0, 0, 0, "Unexpected any. Specify a different type.", "40"], - [0, 0, 0, "Do not use any type assertions.", "41"], - [0, 0, 0, "Unexpected any. Specify a different type.", "42"], - [0, 0, 0, "Do not use any type assertions.", "43"], - [0, 0, 0, "Unexpected any. Specify a different type.", "44"], - [0, 0, 0, "Unexpected any. Specify a different type.", "45"], - [0, 0, 0, "Do not use any type assertions.", "46"], - [0, 0, 0, "Unexpected any. Specify a different type.", "47"], - [0, 0, 0, "Do not use any type assertions.", "48"], - [0, 0, 0, "Unexpected any. Specify a different type.", "49"], - [0, 0, 0, "Unexpected any. Specify a different type.", "50"], - [0, 0, 0, "Do not use any type assertions.", "51"], - [0, 0, 0, "Unexpected any. Specify a different type.", "52"], - [0, 0, 0, "Do not use any type assertions.", "53"], - [0, 0, 0, "Unexpected any. Specify a different type.", "54"], - [0, 0, 0, "Unexpected any. Specify a different type.", "55"], - [0, 0, 0, "Do not use any type assertions.", "56"], - [0, 0, 0, "Unexpected any. Specify a different type.", "57"], - [0, 0, 0, "Do not use any type assertions.", "58"], - [0, 0, 0, "Unexpected any. Specify a different type.", "59"], - [0, 0, 0, "Unexpected any. Specify a different type.", "60"], - [0, 0, 0, "Do not use any type assertions.", "61"], - [0, 0, 0, "Unexpected any. Specify a different type.", "62"], - [0, 0, 0, "Do not use any type assertions.", "63"], - [0, 0, 0, "Unexpected any. Specify a different type.", "64"], - [0, 0, 0, "Unexpected any. Specify a different type.", "65"], - [0, 0, 0, "Do not use any type assertions.", "66"], - [0, 0, 0, "Unexpected any. Specify a different type.", "67"], - [0, 0, 0, "Do not use any type assertions.", "68"], - [0, 0, 0, "Unexpected any. Specify a different type.", "69"], - [0, 0, 0, "Unexpected any. Specify a different type.", "70"], - [0, 0, 0, "Do not use any type assertions.", "71"], - [0, 0, 0, "Unexpected any. Specify a different type.", "72"], - [0, 0, 0, "Do not use any type assertions.", "73"], - [0, 0, 0, "Unexpected any. Specify a different type.", "74"], - [0, 0, 0, "Do not use any type assertions.", "75"], - [0, 0, 0, "Unexpected any. Specify a different type.", "76"], - [0, 0, 0, "Do not use any type assertions.", "77"], - [0, 0, 0, "Unexpected any. Specify a different type.", "78"] - ], - "public/app/core/components/OptionsUI/slider.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] - ], - "public/app/core/components/OptionsUI/strings.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"] - ], - "public/app/core/components/OptionsUI/units.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"] + [0, 0, 0, "Unexpected any. Specify a different type.", "10"] ], "public/app/core/components/PageHeader/PageHeader.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"] ], - "public/app/core/components/PageHeader/PanelHeaderMenuItem.tsx:5381": [ - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"] - ], "public/app/core/components/PanelTypeFilter/PanelTypeFilter.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"] ], - "public/app/core/components/PasswordField/PasswordField.tsx:5381": [ - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"] - ], - "public/app/core/components/PermissionList/AddPermission.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] - ], "public/app/core/components/QueryOperationRow/OperationRowHelp.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"] ], - "public/app/core/components/QueryOperationRow/QueryOperationAction.tsx:5381": [ - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"] - ], "public/app/core/components/QueryOperationRow/QueryOperationRow.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"] @@ -1383,27 +1219,11 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "3"], [0, 0, 0, "Styles should be written using objects.", "4"], [0, 0, 0, "Styles should be written using objects.", "5"], - [0, 0, 0, "Styles should be written using objects.", "6"], - [0, 0, 0, "Styles should be written using objects.", "7"] - ], - "public/app/core/components/RolePicker/RolePickerMenu.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] + [0, 0, 0, "Styles should be written using objects.", "6"] ], "public/app/core/components/RolePicker/ValueContainer.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"] ], - "public/app/core/components/Select/OldFolderPicker.tsx:5381": [ - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"] - ], - "public/app/core/components/SharedPreferences/SharedPreferences.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] - ], - "public/app/core/components/SplitPaneWrapper/SplitPaneWrapper.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"] - ], "public/app/core/components/TagFilter/TagFilter.tsx:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"], @@ -1418,15 +1238,10 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "1"], [0, 0, 0, "Styles should be written using objects.", "2"] ], - "public/app/core/components/TraceToLogs/TagMappingInput.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"] - ], - "public/app/core/components/TraceToMetrics/TraceToMetricsSettings.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"] + "public/app/core/components/TimeSeries/utils.ts:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"], + [0, 0, 0, "Do not use any type assertions.", "1"], + [0, 0, 0, "Unexpected any. Specify a different type.", "2"] ], "public/app/core/components/Upgrade/ProBadge.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"] @@ -1455,19 +1270,6 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Do not use any type assertions.", "1"] ], - "public/app/core/components/help/HelpModal.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"], - [0, 0, 0, "Styles should be written using objects.", "4"], - [0, 0, 0, "Styles should be written using objects.", "5"], - [0, 0, 0, "Styles should be written using objects.", "6"], - [0, 0, 0, "Styles should be written using objects.", "7"] - ], - "public/app/core/navigation/GrafanaRouteError.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] - ], "public/app/core/navigation/types.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], @@ -1506,9 +1308,6 @@ exports[`better eslint`] = { "public/app/core/specs/backend_srv.test.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], - "public/app/core/specs/time_series.test.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], "public/app/core/time_series2.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"], @@ -1549,24 +1348,13 @@ exports[`better eslint`] = { "public/app/core/utils/deferred.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], - "public/app/core/utils/explore.ts:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"] - ], "public/app/core/utils/fetch.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], + [0, 0, 0, "Do not use any type assertions.", "1"], [0, 0, 0, "Do not use any type assertions.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"], + [0, 0, 0, "Do not use any type assertions.", "3"], [0, 0, 0, "Do not use any type assertions.", "4"], - [0, 0, 0, "Do not use any type assertions.", "5"], - [0, 0, 0, "Do not use any type assertions.", "6"], - [0, 0, 0, "Unexpected any. Specify a different type.", "7"], - [0, 0, 0, "Do not use any type assertions.", "8"], - [0, 0, 0, "Unexpected any. Specify a different type.", "9"], - [0, 0, 0, "Unexpected any. Specify a different type.", "10"] + [0, 0, 0, "Unexpected any. Specify a different type.", "5"] ], "public/app/core/utils/flatten.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] @@ -1582,15 +1370,8 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], "public/app/core/utils/ticks.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"], - [0, 0, 0, "Do not use any type assertions.", "4"], - [0, 0, 0, "Do not use any type assertions.", "5"] - ], - "public/app/core/utils/tracing.ts:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"] + [0, 0, 0, "Do not use any type assertions.", "0"], + [0, 0, 0, "Do not use any type assertions.", "1"] ], "public/app/features/admin/LicenseChrome.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], @@ -1600,154 +1381,66 @@ exports[`better eslint`] = { "public/app/features/admin/OrgRolePicker.tsx:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] ], - "public/app/features/admin/ServerStats.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"], - [0, 0, 0, "Styles should be written using objects.", "4"], - [0, 0, 0, "Styles should be written using objects.", "5"], - [0, 0, 0, "Styles should be written using objects.", "6"], - [0, 0, 0, "Styles should be written using objects.", "7"], - [0, 0, 0, "Styles should be written using objects.", "8"] - ], - "public/app/features/admin/UpgradePage.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"], - [0, 0, 0, "Styles should be written using objects.", "4"] - ], - "public/app/features/admin/UserListPublicDashboardPage/DashboardsListModalButton.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"], - [0, 0, 0, "Styles should be written using objects.", "4"], - [0, 0, 0, "Styles should be written using objects.", "5"], - [0, 0, 0, "Styles should be written using objects.", "6"], - [0, 0, 0, "Styles should be written using objects.", "7"] - ], - "public/app/features/admin/UserListPublicDashboardPage/DeleteUserModalButton.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"] - ], - "public/app/features/admin/UserOrgs.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"], - [0, 0, 0, "Styles should be written using objects.", "4"], - [0, 0, 0, "Styles should be written using objects.", "5"], - [0, 0, 0, "Styles should be written using objects.", "6"], - [0, 0, 0, "Styles should be written using objects.", "7"], - [0, 0, 0, "Styles should be written using objects.", "8"], - [0, 0, 0, "Styles should be written using objects.", "9"], - [0, 0, 0, "Styles should be written using objects.", "10"], - [0, 0, 0, "Styles should be written using objects.", "11"], - [0, 0, 0, "Styles should be written using objects.", "12"], - [0, 0, 0, "Styles should be written using objects.", "13"], - [0, 0, 0, "Styles should be written using objects.", "14"], - [0, 0, 0, "Styles should be written using objects.", "15"], - [0, 0, 0, "Styles should be written using objects.", "16"], - [0, 0, 0, "Styles should be written using objects.", "17"] - ], - "public/app/features/admin/UserPermissions.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] - ], - "public/app/features/admin/UserProfile.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"] - ], - "public/app/features/admin/UserSessions.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] - ], - "public/app/features/alerting/AlertTab.tsx:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "2"] - ], - "public/app/features/alerting/AlertTabCtrl.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"], - [0, 0, 0, "Unexpected any. Specify a different type.", "4"], - [0, 0, 0, "Unexpected any. Specify a different type.", "5"], - [0, 0, 0, "Unexpected any. Specify a different type.", "6"], - [0, 0, 0, "Unexpected any. Specify a different type.", "7"], - [0, 0, 0, "Unexpected any. Specify a different type.", "8"], - [0, 0, 0, "Unexpected any. Specify a different type.", "9"], - [0, 0, 0, "Unexpected any. Specify a different type.", "10"], - [0, 0, 0, "Unexpected any. Specify a different type.", "11"], - [0, 0, 0, "Unexpected any. Specify a different type.", "12"], - [0, 0, 0, "Unexpected any. Specify a different type.", "13"], - [0, 0, 0, "Unexpected any. Specify a different type.", "14"], - [0, 0, 0, "Unexpected any. Specify a different type.", "15"], - [0, 0, 0, "Unexpected any. Specify a different type.", "16"], - [0, 0, 0, "Unexpected any. Specify a different type.", "17"], - [0, 0, 0, "Unexpected any. Specify a different type.", "18"], - [0, 0, 0, "Unexpected any. Specify a different type.", "19"], - [0, 0, 0, "Unexpected any. Specify a different type.", "20"], - [0, 0, 0, "Unexpected any. Specify a different type.", "21"], - [0, 0, 0, "Unexpected any. Specify a different type.", "22"], - [0, 0, 0, "Do not use any type assertions.", "23"], - [0, 0, 0, "Unexpected any. Specify a different type.", "24"], - [0, 0, 0, "Unexpected any. Specify a different type.", "25"], - [0, 0, 0, "Unexpected any. Specify a different type.", "26"], - [0, 0, 0, "Unexpected any. Specify a different type.", "27"], - [0, 0, 0, "Unexpected any. Specify a different type.", "28"], - [0, 0, 0, "Unexpected any. Specify a different type.", "29"], - [0, 0, 0, "Unexpected any. Specify a different type.", "30"], - [0, 0, 0, "Unexpected any. Specify a different type.", "31"], - [0, 0, 0, "Unexpected any. Specify a different type.", "32"], - [0, 0, 0, "Unexpected any. Specify a different type.", "33"] - ], - "public/app/features/alerting/EditNotificationChannelPage.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] + "public/app/features/admin/UpgradePage.tsx:5381": [ + [0, 0, 0, "Styles should be written using objects.", "0"], + [0, 0, 0, "Styles should be written using objects.", "1"], + [0, 0, 0, "Styles should be written using objects.", "2"], + [0, 0, 0, "Styles should be written using objects.", "3"], + [0, 0, 0, "Styles should be written using objects.", "4"] ], - "public/app/features/alerting/StateHistory.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"] + "public/app/features/admin/UserListPublicDashboardPage/DashboardsListModalButton.tsx:5381": [ + [0, 0, 0, "Styles should be written using objects.", "0"], + [0, 0, 0, "Styles should be written using objects.", "1"], + [0, 0, 0, "Styles should be written using objects.", "2"], + [0, 0, 0, "Styles should be written using objects.", "3"], + [0, 0, 0, "Styles should be written using objects.", "4"], + [0, 0, 0, "Styles should be written using objects.", "5"], + [0, 0, 0, "Styles should be written using objects.", "6"], + [0, 0, 0, "Styles should be written using objects.", "7"] ], - "public/app/features/alerting/TestRuleResult.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"] + "public/app/features/admin/UserListPublicDashboardPage/DeleteUserModalButton.tsx:5381": [ + [0, 0, 0, "Styles should be written using objects.", "0"], + [0, 0, 0, "Styles should be written using objects.", "1"] ], - "public/app/features/alerting/components/NotificationChannelForm.tsx:5381": [ + "public/app/features/admin/UserOrgs.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"] + [0, 0, 0, "Styles should be written using objects.", "2"], + [0, 0, 0, "Styles should be written using objects.", "3"], + [0, 0, 0, "Styles should be written using objects.", "4"], + [0, 0, 0, "Styles should be written using objects.", "5"], + [0, 0, 0, "Styles should be written using objects.", "6"], + [0, 0, 0, "Styles should be written using objects.", "7"], + [0, 0, 0, "Styles should be written using objects.", "8"], + [0, 0, 0, "Styles should be written using objects.", "9"], + [0, 0, 0, "Styles should be written using objects.", "10"], + [0, 0, 0, "Styles should be written using objects.", "11"], + [0, 0, 0, "Styles should be written using objects.", "12"], + [0, 0, 0, "Styles should be written using objects.", "13"], + [0, 0, 0, "Styles should be written using objects.", "14"], + [0, 0, 0, "Styles should be written using objects.", "15"], + [0, 0, 0, "Styles should be written using objects.", "16"] ], - "public/app/features/alerting/components/NotificationChannelOptions.tsx:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"] + "public/app/features/admin/UserPermissions.tsx:5381": [ + [0, 0, 0, "Styles should be written using objects.", "0"] ], - "public/app/features/alerting/components/OptionElement.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] + "public/app/features/admin/UserProfile.tsx:5381": [ + [0, 0, 0, "Styles should be written using objects.", "0"], + [0, 0, 0, "Styles should be written using objects.", "1"], + [0, 0, 0, "Styles should be written using objects.", "2"] ], - "public/app/features/alerting/getAlertingValidationMessage.ts:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Do not use any type assertions.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"] + "public/app/features/alerting/routes.tsx:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], "public/app/features/alerting/state/ThresholdMapper.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], - "public/app/features/alerting/state/actions.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"] - ], "public/app/features/alerting/state/alertDef.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"], [0, 0, 0, "Do not use any type assertions.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"] + [0, 0, 0, "Unexpected any. Specify a different type.", "3"], + [0, 0, 0, "Unexpected any. Specify a different type.", "4"] ], "public/app/features/alerting/state/query_part.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], @@ -1772,9 +1465,6 @@ exports[`better eslint`] = { "public/app/features/alerting/unified/AlertWarning.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"] ], - "public/app/features/alerting/unified/AlertsFolderView.test.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], "public/app/features/alerting/unified/AlertsFolderView.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"], @@ -1797,20 +1487,15 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "11"], [0, 0, 0, "Styles should be written using objects.", "12"], [0, 0, 0, "Styles should be written using objects.", "13"], - [0, 0, 0, "Styles should be written using objects.", "14"], - [0, 0, 0, "Styles should be written using objects.", "15"], - [0, 0, 0, "Styles should be written using objects.", "16"], - [0, 0, 0, "Styles should be written using objects.", "17"], - [0, 0, 0, "Styles should be written using objects.", "18"] + [0, 0, 0, "Styles should be written using objects.", "14"] ], "public/app/features/alerting/unified/NotificationPolicies.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"] ], "public/app/features/alerting/unified/PanelAlertTabContent.tsx:5381": [ - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"], + [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"] + [0, 0, 0, "Styles should be written using objects.", "2"] ], "public/app/features/alerting/unified/RedirectToRuleViewer.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], @@ -1826,14 +1511,6 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "4"], [0, 0, 0, "Styles should be written using objects.", "5"] ], - "public/app/features/alerting/unified/api/alertmanager.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"] - ], - "public/app/features/alerting/unified/api/ruler.ts:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"], - [0, 0, 0, "Do not use any type assertions.", "1"] - ], "public/app/features/alerting/unified/components/AlertLabel.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"] ], @@ -1844,16 +1521,12 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "0"] ], "public/app/features/alerting/unified/components/AlertStateDot.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"] + [0, 0, 0, "Styles should be written using objects.", "0"] ], "public/app/features/alerting/unified/components/AnnotationDetailsField.tsx:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], [0, 0, 0, "Do not use any type assertions.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"] + [0, 0, 0, "Styles should be written using objects.", "2"] ], "public/app/features/alerting/unified/components/Authorize.tsx:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], @@ -1895,13 +1568,6 @@ exports[`better eslint`] = { "public/app/features/alerting/unified/components/GrafanaAlertmanagerDeliveryWarning.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"] ], - "public/app/features/alerting/unified/components/HoverCard.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"], - [0, 0, 0, "Styles should be written using objects.", "4"] - ], "public/app/features/alerting/unified/components/Label.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"], @@ -1971,24 +1637,19 @@ exports[`better eslint`] = { [0, 0, 0, "Do not use any type assertions.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"], [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"], - [0, 0, 0, "Styles should be written using objects.", "4"] + [0, 0, 0, "Styles should be written using objects.", "3"] ], "public/app/features/alerting/unified/components/alert-groups/AlertGroupHeader.tsx:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], [0, 0, 0, "Do not use any type assertions.", "1"] ], - "public/app/features/alerting/unified/components/alert-groups/AlertStateFilter.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] - ], "public/app/features/alerting/unified/components/alert-groups/GroupBy.tsx:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] ], "public/app/features/alerting/unified/components/alert-groups/MatcherFilter.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"] + [0, 0, 0, "Do not use any type assertions.", "0"] ], - "public/app/features/alerting/unified/components/contact-points/ContactPoints.v2.tsx:5381": [ + "public/app/features/alerting/unified/components/contact-points/ContactPoints.tsx:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] ], "public/app/features/alerting/unified/components/export/FileExportPreview.tsx:5381": [ @@ -2053,23 +1714,12 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "2"], [0, 0, 0, "Styles should be written using objects.", "3"] ], - "public/app/features/alerting/unified/components/notification-policies/Filters.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] - ], "public/app/features/alerting/unified/components/notification-policies/Matchers.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"] ], "public/app/features/alerting/unified/components/notification-policies/Policy.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"], - [0, 0, 0, "Styles should be written using objects.", "4"], - [0, 0, 0, "Styles should be written using objects.", "5"], - [0, 0, 0, "Styles should be written using objects.", "6"], - [0, 0, 0, "Styles should be written using objects.", "7"], - [0, 0, 0, "Styles should be written using objects.", "8"] + [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], "public/app/features/alerting/unified/components/notification-policies/PromDurationDocs.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], @@ -2171,9 +1821,8 @@ exports[`better eslint`] = { [0, 0, 0, "Do not use any type assertions.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"], [0, 0, 0, "Do not use any type assertions.", "2"], - [0, 0, 0, "Do not use any type assertions.", "3"], - [0, 0, 0, "Styles should be written using objects.", "4"], - [0, 0, 0, "Styles should be written using objects.", "5"] + [0, 0, 0, "Styles should be written using objects.", "3"], + [0, 0, 0, "Styles should be written using objects.", "4"] ], "public/app/features/alerting/unified/components/receivers/form/TestContactPointModal.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], @@ -2188,12 +1837,10 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "1"], [0, 0, 0, "Do not use any type assertions.", "2"], [0, 0, 0, "Unexpected any. Specify a different type.", "3"], - [0, 0, 0, "Do not use any type assertions.", "4"], - [0, 0, 0, "Unexpected any. Specify a different type.", "5"], - [0, 0, 0, "Styles should be written using objects.", "6"], - [0, 0, 0, "Styles should be written using objects.", "7"], - [0, 0, 0, "Unexpected any. Specify a different type.", "8"], - [0, 0, 0, "Unexpected any. Specify a different type.", "9"] + [0, 0, 0, "Styles should be written using objects.", "4"], + [0, 0, 0, "Styles should be written using objects.", "5"], + [0, 0, 0, "Unexpected any. Specify a different type.", "6"], + [0, 0, 0, "Unexpected any. Specify a different type.", "7"] ], "public/app/features/alerting/unified/components/receivers/form/fields/StringArrayInput.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], @@ -2298,16 +1945,6 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"] ], - "public/app/features/alerting/unified/components/rule-editor/LabelsField.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"], - [0, 0, 0, "Styles should be written using objects.", "4"], - [0, 0, 0, "Styles should be written using objects.", "5"], - [0, 0, 0, "Styles should be written using objects.", "6"], - [0, 0, 0, "Styles should be written using objects.", "7"] - ], "public/app/features/alerting/unified/components/rule-editor/NeedHelpInfo.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"] @@ -2403,11 +2040,10 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "1"] ], "public/app/features/alerting/unified/components/rule-editor/query-and-alert-condition/QueryAndExpressionsStep.tsx:5381": [ - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"], + [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"], [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"], - [0, 0, 0, "Styles should be written using objects.", "4"] + [0, 0, 0, "Styles should be written using objects.", "3"] ], "public/app/features/alerting/unified/components/rule-editor/rule-types/RuleType.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], @@ -2416,41 +2052,16 @@ exports[`better eslint`] = { "public/app/features/alerting/unified/components/rule-editor/rule-types/RuleTypePicker.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"] ], - "public/app/features/alerting/unified/components/rule-viewer/RuleViewer.v1.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"], - [0, 0, 0, "Styles should be written using objects.", "4"], - [0, 0, 0, "Styles should be written using objects.", "5"], - [0, 0, 0, "Styles should be written using objects.", "6"], - [0, 0, 0, "Styles should be written using objects.", "7"], - [0, 0, 0, "Styles should be written using objects.", "8"], - [0, 0, 0, "Styles should be written using objects.", "9"], - [0, 0, 0, "Styles should be written using objects.", "10"], - [0, 0, 0, "Styles should be written using objects.", "11"], - [0, 0, 0, "Styles should be written using objects.", "12"] - ], "public/app/features/alerting/unified/components/rule-viewer/RuleViewerLayout.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"] ], - "public/app/features/alerting/unified/components/rule-viewer/RuleViewerVisualization.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"], - [0, 0, 0, "Styles should be written using objects.", "4"] - ], "public/app/features/alerting/unified/components/rules/ActionButton.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"] ], "public/app/features/alerting/unified/components/rules/AlertInstanceStateFilter.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"] ], - "public/app/features/alerting/unified/components/rules/CloneRule.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] - ], "public/app/features/alerting/unified/components/rules/CloudRules.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"], @@ -2511,8 +2122,7 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "1"], [0, 0, 0, "Styles should be written using objects.", "2"], [0, 0, 0, "Styles should be written using objects.", "3"], - [0, 0, 0, "Styles should be written using objects.", "4"], - [0, 0, 0, "Styles should be written using objects.", "5"] + [0, 0, 0, "Styles should be written using objects.", "4"] ], "public/app/features/alerting/unified/components/rules/RuleHealth.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"] @@ -2530,13 +2140,6 @@ exports[`better eslint`] = { "public/app/features/alerting/unified/components/rules/RuleState.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"] ], - "public/app/features/alerting/unified/components/rules/RulesFilter.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"], - [0, 0, 0, "Styles should be written using objects.", "4"] - ], "public/app/features/alerting/unified/components/rules/RulesGroup.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"], @@ -2629,23 +2232,6 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "3"], [0, 0, 0, "Styles should be written using objects.", "4"] ], - "public/app/features/alerting/unified/home/GettingStarted.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"], - [0, 0, 0, "Styles should be written using objects.", "4"], - [0, 0, 0, "Styles should be written using objects.", "5"], - [0, 0, 0, "Styles should be written using objects.", "6"], - [0, 0, 0, "Styles should be written using objects.", "7"], - [0, 0, 0, "Styles should be written using objects.", "8"], - [0, 0, 0, "Styles should be written using objects.", "9"], - [0, 0, 0, "Styles should be written using objects.", "10"], - [0, 0, 0, "Styles should be written using objects.", "11"], - [0, 0, 0, "Styles should be written using objects.", "12"], - [0, 0, 0, "Styles should be written using objects.", "13"], - [0, 0, 0, "Styles should be written using objects.", "14"] - ], "public/app/features/alerting/unified/hooks/useAlertmanagerConfig.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] ], @@ -2663,11 +2249,9 @@ exports[`better eslint`] = { [0, 0, 0, "Do not use any type assertions.", "3"], [0, 0, 0, "Unexpected any. Specify a different type.", "4"], [0, 0, 0, "Unexpected any. Specify a different type.", "5"], - [0, 0, 0, "Do not use any type assertions.", "6"], - [0, 0, 0, "Do not use any type assertions.", "7"], - [0, 0, 0, "Unexpected any. Specify a different type.", "8"], - [0, 0, 0, "Unexpected any. Specify a different type.", "9"], - [0, 0, 0, "Do not use any type assertions.", "10"] + [0, 0, 0, "Unexpected any. Specify a different type.", "6"], + [0, 0, 0, "Unexpected any. Specify a different type.", "7"], + [0, 0, 0, "Do not use any type assertions.", "8"] ], "public/app/features/alerting/unified/state/actions.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], @@ -2697,6 +2281,9 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "1"], [0, 0, 0, "Unexpected any. Specify a different type.", "2"] ], + "public/app/features/alerting/unified/utils/misc.ts:5381": [ + [0, 0, 0, "Do not use any type assertions.", "0"] + ], "public/app/features/alerting/unified/utils/receiver-form.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], [0, 0, 0, "Do not use any type assertions.", "1"], @@ -2721,11 +2308,7 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Do not use any type assertions.", "1"], [0, 0, 0, "Do not use any type assertions.", "2"], - [0, 0, 0, "Do not use any type assertions.", "3"], - [0, 0, 0, "Do not use any type assertions.", "4"] - ], - "public/app/features/annotations/components/StandardAnnotationQueryEditor.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] + [0, 0, 0, "Do not use any type assertions.", "3"] ], "public/app/features/annotations/events_processing.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] @@ -2737,89 +2320,30 @@ exports[`better eslint`] = { ], "public/app/features/api-keys/ApiKeysTable.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"] - ], - "public/app/features/api-keys/MigrateToServiceAccountsCard.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"] - ], - "public/app/features/auth-config/AuthConfigPage.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"], - [0, 0, 0, "Styles should be written using objects.", "4"], - [0, 0, 0, "Styles should be written using objects.", "5"] - ], - "public/app/features/auth-config/components/ConfigureAuthCTA.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"] - ], - "public/app/features/auth-config/components/ProviderCard.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"], - [0, 0, 0, "Styles should be written using objects.", "4"], - [0, 0, 0, "Styles should be written using objects.", "5"], - [0, 0, 0, "Styles should be written using objects.", "6"] - ], - "public/app/features/canvas/element.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"], - [0, 0, 0, "Unexpected any. Specify a different type.", "4"] - ], - "public/app/features/canvas/elements/droneFront.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] - ], - "public/app/features/canvas/elements/droneSide.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] - ], - "public/app/features/canvas/elements/droneTop.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"] - ], - "public/app/features/canvas/elements/ellipse.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"] - ], - "public/app/features/canvas/elements/icon.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] - ], - "public/app/features/canvas/elements/metricValue.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"] - ], - "public/app/features/canvas/elements/server/server.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"], - [0, 0, 0, "Styles should be written using objects.", "4"] + [0, 0, 0, "Styles should be written using objects.", "1"] ], - "public/app/features/canvas/elements/text.tsx:5381": [ + "public/app/features/api-keys/MigrateToServiceAccountsCard.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"], [0, 0, 0, "Styles should be written using objects.", "2"] ], - "public/app/features/canvas/elements/windTurbine.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] + "public/app/features/auth-config/utils/data.ts:5381": [ + [0, 0, 0, "Do not use any type assertions.", "0"] + ], + "public/app/features/canvas/element.ts:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"], + [0, 0, 0, "Unexpected any. Specify a different type.", "1"], + [0, 0, 0, "Unexpected any. Specify a different type.", "2"], + [0, 0, 0, "Unexpected any. Specify a different type.", "3"], + [0, 0, 0, "Unexpected any. Specify a different type.", "4"] ], "public/app/features/canvas/runtime/element.tsx:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Do not use any type assertions.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"], + [0, 0, 0, "Do not use any type assertions.", "2"], [0, 0, 0, "Do not use any type assertions.", "3"], - [0, 0, 0, "Unexpected any. Specify a different type.", "4"], - [0, 0, 0, "Do not use any type assertions.", "5"], - [0, 0, 0, "Unexpected any. Specify a different type.", "6"], - [0, 0, 0, "Do not use any type assertions.", "7"], - [0, 0, 0, "Unexpected any. Specify a different type.", "8"] + [0, 0, 0, "Do not use any type assertions.", "4"], + [0, 0, 0, "Do not use any type assertions.", "5"] ], "public/app/features/canvas/runtime/frame.tsx:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] @@ -2841,11 +2365,6 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"] ], - "public/app/features/connections/tabs/ConnectData/ConnectData.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"] - ], "public/app/features/connections/tabs/ConnectData/NoAccessModal/NoAccessModal.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"], @@ -2857,12 +2376,6 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "7"], [0, 0, 0, "Styles should be written using objects.", "8"] ], - "public/app/features/connections/tabs/ConnectData/NoResults/NoResults.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] - ], - "public/app/features/connections/tabs/ConnectData/Search/Search.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] - ], "public/app/features/correlations/CorrelationsPage.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"], @@ -2881,23 +2394,42 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"] ], - "public/app/features/correlations/Forms/TransformationsEditor.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"] + "public/app/features/dashboard-scene/inspect/HelpWizard/utils.ts:5381": [ + [0, 0, 0, "Do not use any type assertions.", "0"] ], "public/app/features/dashboard-scene/inspect/InspectJsonTab.tsx:5381": [ [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"] ], - "public/app/features/dashboard-scene/scene/setDashboardPanelContext.test.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] + "public/app/features/dashboard-scene/pages/DashboardScenePage.tsx:5381": [ + [0, 0, 0, "Do not use any type assertions.", "0"], + [0, 0, 0, "Unexpected any. Specify a different type.", "1"], + [0, 0, 0, "Do not use any type assertions.", "2"] ], - "public/app/features/dashboard-scene/serialization/angularMigration.test.ts:5381": [ + "public/app/features/dashboard-scene/panel-edit/PanelDataPane/PanelDataPane.tsx:5381": [ + [0, 0, 0, "Do not use any type assertions.", "0"] + ], + "public/app/features/dashboard-scene/saving/DetectChangesWorker.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"] ], + "public/app/features/dashboard-scene/saving/getDashboardChanges.ts:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"], + [0, 0, 0, "Do not use any type assertions.", "1"], + [0, 0, 0, "Do not use any type assertions.", "2"] + ], + "public/app/features/dashboard-scene/scene/PanelMenuBehavior.tsx:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"], + [0, 0, 0, "Unexpected any. Specify a different type.", "1"], + [0, 0, 0, "Do not use any type assertions.", "2"] + ], + "public/app/features/dashboard-scene/serialization/angularMigration.test.ts:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"] + ], "public/app/features/dashboard-scene/serialization/transformSaveModelToScene.test.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"] + [0, 0, 0, "Unexpected any. Specify a different type.", "1"], + [0, 0, 0, "Unexpected any. Specify a different type.", "2"], + [0, 0, 0, "Unexpected any. Specify a different type.", "3"] ], "public/app/features/dashboard-scene/serialization/transformSceneToSaveModel.test.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], @@ -2907,37 +2439,41 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "4"], [0, 0, 0, "Unexpected any. Specify a different type.", "5"], [0, 0, 0, "Unexpected any. Specify a different type.", "6"], - [0, 0, 0, "Unexpected any. Specify a different type.", "7"] + [0, 0, 0, "Unexpected any. Specify a different type.", "7"], + [0, 0, 0, "Unexpected any. Specify a different type.", "8"], + [0, 0, 0, "Unexpected any. Specify a different type.", "9"], + [0, 0, 0, "Unexpected any. Specify a different type.", "10"], + [0, 0, 0, "Unexpected any. Specify a different type.", "11"], + [0, 0, 0, "Unexpected any. Specify a different type.", "12"] ], "public/app/features/dashboard-scene/serialization/transformSceneToSaveModel.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], [0, 0, 0, "Do not use any type assertions.", "1"], [0, 0, 0, "Do not use any type assertions.", "2"], - [0, 0, 0, "Do not use any type assertions.", "3"], + [0, 0, 0, "Unexpected any. Specify a different type.", "3"], [0, 0, 0, "Do not use any type assertions.", "4"], - [0, 0, 0, "Do not use any type assertions.", "5"] + [0, 0, 0, "Do not use any type assertions.", "5"], + [0, 0, 0, "Do not use any type assertions.", "6"], + [0, 0, 0, "Do not use any type assertions.", "7"], + [0, 0, 0, "Do not use any type assertions.", "8"] + ], + "public/app/features/dashboard-scene/settings/variables/components/VariableSelectField.tsx:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"] + ], + "public/app/features/dashboard-scene/settings/variables/utils.ts:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"] + ], + "public/app/features/dashboard-scene/utils/DashboardModelCompatibilityWrapper.ts:5381": [ + [0, 0, 0, "Do not use any type assertions.", "0"] + ], + "public/app/features/dashboard-scene/utils/PanelModelCompatibilityWrapper.ts:5381": [ + [0, 0, 0, "Do not use any type assertions.", "0"] ], "public/app/features/dashboard-scene/utils/test-utils.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], [0, 0, 0, "Do not use any type assertions.", "1"], [0, 0, 0, "Do not use any type assertions.", "2"] ], - "public/app/features/dashboard/components/AddPanelWidget/AddPanelWidget.test.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], - "public/app/features/dashboard/components/AddPanelWidget/AddPanelWidget.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "1"], - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "2"], - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "3"], - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "4"], - [0, 0, 0, "Styles should be written using objects.", "5"], - [0, 0, 0, "Styles should be written using objects.", "6"], - [0, 0, 0, "Styles should be written using objects.", "7"], - [0, 0, 0, "Styles should be written using objects.", "8"], - [0, 0, 0, "Styles should be written using objects.", "9"], - [0, 0, 0, "Styles should be written using objects.", "10"] - ], "public/app/features/dashboard/components/AddWidgetModal/AddWidgetModal.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"], @@ -2959,22 +2495,7 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "2"], [0, 0, 0, "Unexpected any. Specify a different type.", "3"], [0, 0, 0, "Unexpected any. Specify a different type.", "4"], - [0, 0, 0, "Unexpected any. Specify a different type.", "5"], - [0, 0, 0, "Unexpected any. Specify a different type.", "6"], - [0, 0, 0, "Unexpected any. Specify a different type.", "7"], - [0, 0, 0, "Unexpected any. Specify a different type.", "8"], - [0, 0, 0, "Unexpected any. Specify a different type.", "9"], - [0, 0, 0, "Unexpected any. Specify a different type.", "10"], - [0, 0, 0, "Unexpected any. Specify a different type.", "11"], - [0, 0, 0, "Unexpected any. Specify a different type.", "12"], - [0, 0, 0, "Unexpected any. Specify a different type.", "13"], - [0, 0, 0, "Unexpected any. Specify a different type.", "14"], - [0, 0, 0, "Unexpected any. Specify a different type.", "15"], - [0, 0, 0, "Unexpected any. Specify a different type.", "16"], - [0, 0, 0, "Unexpected any. Specify a different type.", "17"], - [0, 0, 0, "Unexpected any. Specify a different type.", "18"], - [0, 0, 0, "Unexpected any. Specify a different type.", "19"], - [0, 0, 0, "Unexpected any. Specify a different type.", "20"] + [0, 0, 0, "Unexpected any. Specify a different type.", "5"] ], "public/app/features/dashboard/components/DashExportModal/DashboardExporter.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], @@ -2982,12 +2503,11 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "2"], [0, 0, 0, "Unexpected any. Specify a different type.", "3"], [0, 0, 0, "Unexpected any. Specify a different type.", "4"], - [0, 0, 0, "Unexpected any. Specify a different type.", "5"], - [0, 0, 0, "Do not use any type assertions.", "6"], - [0, 0, 0, "Unexpected any. Specify a different type.", "7"], + [0, 0, 0, "Do not use any type assertions.", "5"], + [0, 0, 0, "Unexpected any. Specify a different type.", "6"], + [0, 0, 0, "Do not use any type assertions.", "7"], [0, 0, 0, "Do not use any type assertions.", "8"], - [0, 0, 0, "Do not use any type assertions.", "9"], - [0, 0, 0, "Unexpected any. Specify a different type.", "10"] + [0, 0, 0, "Unexpected any. Specify a different type.", "9"] ], "public/app/features/dashboard/components/DashNav/DashNavButton.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"] @@ -3008,9 +2528,10 @@ exports[`better eslint`] = { [0, 0, 0, "Do not use any type assertions.", "2"], [0, 0, 0, "Do not use any type assertions.", "3"], [0, 0, 0, "Do not use any type assertions.", "4"], - [0, 0, 0, "Unexpected any. Specify a different type.", "5"], - [0, 0, 0, "Do not use any type assertions.", "6"], - [0, 0, 0, "Unexpected any. Specify a different type.", "7"] + [0, 0, 0, "Do not use any type assertions.", "5"], + [0, 0, 0, "Unexpected any. Specify a different type.", "6"], + [0, 0, 0, "Do not use any type assertions.", "7"], + [0, 0, 0, "Unexpected any. Specify a different type.", "8"] ], "public/app/features/dashboard/components/DashboardRow/DashboardRow.test.tsx:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] @@ -3029,10 +2550,6 @@ exports[`better eslint`] = { "public/app/features/dashboard/components/Inspector/PanelInspector.tsx:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] ], - "public/app/features/dashboard/components/LinksSettings/LinkSettingsList.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"] - ], "public/app/features/dashboard/components/PanelEditor/DynamicConfigValueEditor.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"] @@ -3046,16 +2563,7 @@ exports[`better eslint`] = { ], "public/app/features/dashboard/components/PanelEditor/OptionsPaneCategory.tsx:5381": [ [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"], - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"], - [0, 0, 0, "Styles should be written using objects.", "4"], - [0, 0, 0, "Styles should be written using objects.", "5"], - [0, 0, 0, "Styles should be written using objects.", "6"], - [0, 0, 0, "Styles should be written using objects.", "7"], - [0, 0, 0, "Styles should be written using objects.", "8"], - [0, 0, 0, "Styles should be written using objects.", "9"], - [0, 0, 0, "Styles should be written using objects.", "10"] + [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "1"] ], "public/app/features/dashboard/components/PanelEditor/OptionsPaneItemDescriptor.tsx:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], @@ -3128,9 +2636,6 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "1"], [0, 0, 0, "Unexpected any. Specify a different type.", "2"] ], - "public/app/features/dashboard/components/PanelEditor/types.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], "public/app/features/dashboard/components/PanelEditor/utils.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"], @@ -3152,9 +2657,6 @@ exports[`better eslint`] = { [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"], [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "1"] ], - "public/app/features/dashboard/components/SaveDashboard/SaveDashboardDiff.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] - ], "public/app/features/dashboard/components/SaveDashboard/SaveDashboardErrorProxy.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"], @@ -3215,14 +2717,14 @@ exports[`better eslint`] = { "public/app/features/dashboard/components/ShareModal/SharePublicDashboard/ModalAlerts/UnsupportedDataSourcesAlert.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"] ], - "public/app/features/dashboard/components/ShareModal/SharePublicDashboard/SharePublicDashboard.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"] - ], "public/app/features/dashboard/components/SubMenu/AnnotationPicker.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"] ], + "public/app/features/dashboard/components/SubMenu/DashboardLinksDashboard.tsx:5381": [ + [0, 0, 0, "Do not use any type assertions.", "0"], + [0, 0, 0, "Unexpected any. Specify a different type.", "1"] + ], "public/app/features/dashboard/components/SubMenu/SubMenu.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"] @@ -3240,75 +2742,27 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "9"], [0, 0, 0, "Styles should be written using objects.", "10"] ], - "public/app/features/dashboard/components/TransformationsEditor/TransformationFilter.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] - ], "public/app/features/dashboard/components/TransformationsEditor/TransformationsEditor.tsx:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], - [0, 0, 0, "Do not use any type assertions.", "1"], - [0, 0, 0, "Do not use any type assertions.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"], - [0, 0, 0, "Styles should be written using objects.", "4"], - [0, 0, 0, "Unexpected any. Specify a different type.", "5"] - ], - "public/app/features/dashboard/components/VersionHistory/DiffGroup.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"] - ], - "public/app/features/dashboard/components/VersionHistory/DiffTitle.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"], - [0, 0, 0, "Styles should be written using objects.", "4"], - [0, 0, 0, "Styles should be written using objects.", "5"], - [0, 0, 0, "Styles should be written using objects.", "6"], - [0, 0, 0, "Styles should be written using objects.", "7"], - [0, 0, 0, "Styles should be written using objects.", "8"] - ], - "public/app/features/dashboard/components/VersionHistory/DiffValues.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] - ], - "public/app/features/dashboard/components/VersionHistory/DiffViewer.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] - ], - "public/app/features/dashboard/components/VersionHistory/VersionHistoryComparison.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"] - ], - "public/app/features/dashboard/components/VersionHistory/VersionHistoryHeader.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] - ], - "public/app/features/dashboard/components/VersionHistory/VersionHistoryTable.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] + [0, 0, 0, "Do not use any type assertions.", "1"] ], "public/app/features/dashboard/components/VersionHistory/useDashboardRestore.tsx:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"] ], - "public/app/features/dashboard/components/VersionHistory/utils.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"] - ], "public/app/features/dashboard/containers/DashboardPage.tsx:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"], [0, 0, 0, "Do not use any type assertions.", "2"], [0, 0, 0, "Unexpected any. Specify a different type.", "3"], - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "4"] - ], - "public/app/features/dashboard/dashgrid/DashboardGrid.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] + [0, 0, 0, "Do not use any type assertions.", "4"], + [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "5"] ], - "public/app/features/dashboard/dashgrid/DashboardPanel.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] + "public/app/features/dashboard/containers/DashboardPageProxy.tsx:5381": [ + [0, 0, 0, "Do not use any type assertions.", "0"] ], "public/app/features/dashboard/dashgrid/PanelStateWrapper.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"] + [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], "public/app/features/dashboard/dashgrid/SeriesVisibilityConfigFactory.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] @@ -3330,14 +2784,7 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "8"], [0, 0, 0, "Unexpected any. Specify a different type.", "9"], [0, 0, 0, "Unexpected any. Specify a different type.", "10"], - [0, 0, 0, "Unexpected any. Specify a different type.", "11"], - [0, 0, 0, "Unexpected any. Specify a different type.", "12"], - [0, 0, 0, "Unexpected any. Specify a different type.", "13"], - [0, 0, 0, "Unexpected any. Specify a different type.", "14"], - [0, 0, 0, "Unexpected any. Specify a different type.", "15"], - [0, 0, 0, "Unexpected any. Specify a different type.", "16"], - [0, 0, 0, "Unexpected any. Specify a different type.", "17"], - [0, 0, 0, "Unexpected any. Specify a different type.", "18"] + [0, 0, 0, "Unexpected any. Specify a different type.", "11"] ], "public/app/features/dashboard/state/DashboardMigrator.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], @@ -3360,28 +2807,23 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "17"], [0, 0, 0, "Unexpected any. Specify a different type.", "18"], [0, 0, 0, "Unexpected any. Specify a different type.", "19"], - [0, 0, 0, "Unexpected any. Specify a different type.", "20"], + [0, 0, 0, "Do not use any type assertions.", "20"], [0, 0, 0, "Unexpected any. Specify a different type.", "21"], [0, 0, 0, "Unexpected any. Specify a different type.", "22"], [0, 0, 0, "Unexpected any. Specify a different type.", "23"], [0, 0, 0, "Unexpected any. Specify a different type.", "24"], [0, 0, 0, "Unexpected any. Specify a different type.", "25"], - [0, 0, 0, "Unexpected any. Specify a different type.", "26"], - [0, 0, 0, "Unexpected any. Specify a different type.", "27"], - [0, 0, 0, "Do not use any type assertions.", "28"], - [0, 0, 0, "Do not use any type assertions.", "29"], - [0, 0, 0, "Unexpected any. Specify a different type.", "30"], - [0, 0, 0, "Unexpected any. Specify a different type.", "31"], - [0, 0, 0, "Do not use any type assertions.", "32"] + [0, 0, 0, "Do not use any type assertions.", "26"], + [0, 0, 0, "Do not use any type assertions.", "27"], + [0, 0, 0, "Unexpected any. Specify a different type.", "28"], + [0, 0, 0, "Unexpected any. Specify a different type.", "29"], + [0, 0, 0, "Do not use any type assertions.", "30"] ], "public/app/features/dashboard/state/DashboardModel.repeat.test.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"], [0, 0, 0, "Unexpected any. Specify a different type.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"], - [0, 0, 0, "Unexpected any. Specify a different type.", "4"], - [0, 0, 0, "Unexpected any. Specify a different type.", "5"], - [0, 0, 0, "Unexpected any. Specify a different type.", "6"] + [0, 0, 0, "Unexpected any. Specify a different type.", "3"] ], "public/app/features/dashboard/state/DashboardModel.test.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] @@ -3409,22 +2851,11 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "19"], [0, 0, 0, "Unexpected any. Specify a different type.", "20"], [0, 0, 0, "Unexpected any. Specify a different type.", "21"], - [0, 0, 0, "Unexpected any. Specify a different type.", "22"], - [0, 0, 0, "Unexpected any. Specify a different type.", "23"], - [0, 0, 0, "Unexpected any. Specify a different type.", "24"], - [0, 0, 0, "Unexpected any. Specify a different type.", "25"], - [0, 0, 0, "Do not use any type assertions.", "26"], - [0, 0, 0, "Unexpected any. Specify a different type.", "27"] + [0, 0, 0, "Do not use any type assertions.", "22"], + [0, 0, 0, "Unexpected any. Specify a different type.", "23"] ], "public/app/features/dashboard/state/PanelModel.test.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"], - [0, 0, 0, "Unexpected any. Specify a different type.", "4"], - [0, 0, 0, "Unexpected any. Specify a different type.", "5"], - [0, 0, 0, "Unexpected any. Specify a different type.", "6"], - [0, 0, 0, "Unexpected any. Specify a different type.", "7"] + [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], "public/app/features/dashboard/state/PanelModel.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], @@ -3460,19 +2891,10 @@ exports[`better eslint`] = { "public/app/features/dashboard/state/actions.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], - "public/app/features/dashboard/state/initDashboard.test.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"], - [0, 0, 0, "Unexpected any. Specify a different type.", "4"], - [0, 0, 0, "Unexpected any. Specify a different type.", "5"], - [0, 0, 0, "Unexpected any. Specify a different type.", "6"] - ], - "public/app/features/dashboard/state/initDashboard.ts:5381": [ + "public/app/features/dashboard/state/getPanelPluginToMigrateTo.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], - "public/app/features/dashboard/state/reducers.ts:5381": [ + "public/app/features/dashboard/state/initDashboard.test.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], "public/app/features/dashboard/utils/getPanelMenu.test.ts:5381": [ @@ -3489,26 +2911,18 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "3"] ], "public/app/features/datasources/components/BasicSettings.tsx:5381": [ - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"] - ], - "public/app/features/datasources/components/DataSourceReadOnlyMessage.tsx:5381": [ - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"] + [0, 0, 0, "Styles should be written using objects.", "0"] ], "public/app/features/datasources/components/DataSourceTestingStatus.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Do not use any type assertions.", "2"], - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "3"] + [0, 0, 0, "Do not use any type assertions.", "2"] ], "public/app/features/datasources/components/DataSourceTypeCard.tsx:5381": [ [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"] ], "public/app/features/datasources/components/DataSourceTypeCardList.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] - ], - "public/app/features/datasources/components/EditDataSource.tsx:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"] + [0, 0, 0, "Styles should be written using objects.", "0"] ], "public/app/features/datasources/components/picker/DataSourceCard.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], @@ -3521,16 +2935,6 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "7"], [0, 0, 0, "Styles should be written using objects.", "8"] ], - "public/app/features/datasources/components/picker/DataSourceDropdown.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"], - [0, 0, 0, "Styles should be written using objects.", "4"], - [0, 0, 0, "Styles should be written using objects.", "5"], - [0, 0, 0, "Styles should be written using objects.", "6"], - [0, 0, 0, "Styles should be written using objects.", "7"] - ], "public/app/features/datasources/components/picker/DataSourceList.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"], @@ -3554,11 +2958,7 @@ exports[`better eslint`] = { ], "public/app/features/datasources/state/actions.test.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"], - [0, 0, 0, "Unexpected any. Specify a different type.", "4"], - [0, 0, 0, "Unexpected any. Specify a different type.", "5"] + [0, 0, 0, "Unexpected any. Specify a different type.", "1"] ], "public/app/features/datasources/state/actions.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], @@ -3652,32 +3052,11 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], "public/app/features/dimensions/utils.ts:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"] + [0, 0, 0, "Do not use any type assertions.", "0"] ], "public/app/features/explore/ContentOutline/ContentOutline.tsx:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] ], - "public/app/features/explore/ExploreDrawer.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"] - ], - "public/app/features/explore/ExplorePaneContainer.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] - ], - "public/app/features/explore/FeatureTogglePage.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] - ], - "public/app/features/explore/FlameGraph/FlameGraphExploreContainer.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] - ], - "public/app/features/explore/LiveTailButton.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"] - ], "public/app/features/explore/Logs/LiveLogs.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"], @@ -3686,19 +3065,7 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "4"] ], "public/app/features/explore/Logs/Logs.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Do not use any type assertions.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"], - [0, 0, 0, "Styles should be written using objects.", "4"], - [0, 0, 0, "Styles should be written using objects.", "5"], - [0, 0, 0, "Styles should be written using objects.", "6"], - [0, 0, 0, "Styles should be written using objects.", "7"], - [0, 0, 0, "Styles should be written using objects.", "8"], - [0, 0, 0, "Styles should be written using objects.", "9"], - [0, 0, 0, "Styles should be written using objects.", "10"], - [0, 0, 0, "Styles should be written using objects.", "11"], - [0, 0, 0, "Styles should be written using objects.", "12"] + [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], "public/app/features/explore/Logs/LogsMetaRow.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], @@ -3720,8 +3087,7 @@ exports[`better eslint`] = { "public/app/features/explore/Logs/LogsSamplePanel.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"] + [0, 0, 0, "Styles should be written using objects.", "2"] ], "public/app/features/explore/Logs/LogsVolumePanel.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], @@ -3740,19 +3106,6 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "2"], [0, 0, 0, "Styles should be written using objects.", "3"] ], - "public/app/features/explore/MetaInfoText.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"] - ], - "public/app/features/explore/NoData.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"] - ], - "public/app/features/explore/NoDataSourceCallToAction.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] - ], "public/app/features/explore/NodeGraph/NodeGraphContainer.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"] ], @@ -3785,9 +3138,6 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "1"], [0, 0, 0, "Styles should be written using objects.", "2"] ], - "public/app/features/explore/QueryRows.test.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], "public/app/features/explore/RichHistory/RichHistoryCard.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"], @@ -3836,13 +3186,6 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "5"], [0, 0, 0, "Styles should be written using objects.", "6"] ], - "public/app/features/explore/SecondaryActions.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] - ], - "public/app/features/explore/SupplementaryResultError.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"] - ], "public/app/features/explore/TraceView/TraceView.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Do not use any type assertions.", "1"], @@ -3851,10 +3194,6 @@ exports[`better eslint`] = { "public/app/features/explore/TraceView/components/TracePageHeader/Actions/ActionButton.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"] ], - "public/app/features/explore/TraceView/components/TracePageHeader/Actions/TracePageActions.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"] - ], "public/app/features/explore/TraceView/components/TracePageHeader/SearchBar/NextPrevResult.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"], @@ -3868,8 +3207,7 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "1"], [0, 0, 0, "Styles should be written using objects.", "2"], [0, 0, 0, "Styles should be written using objects.", "3"], - [0, 0, 0, "Styles should be written using objects.", "4"], - [0, 0, 0, "Styles should be written using objects.", "5"] + [0, 0, 0, "Styles should be written using objects.", "4"] ], "public/app/features/explore/TraceView/components/TracePageHeader/SpanFilters/SpanFilters.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], @@ -3877,8 +3215,7 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "2"], [0, 0, 0, "Styles should be written using objects.", "3"], [0, 0, 0, "Styles should be written using objects.", "4"], - [0, 0, 0, "Styles should be written using objects.", "5"], - [0, 0, 0, "Styles should be written using objects.", "6"] + [0, 0, 0, "Styles should be written using objects.", "5"] ], "public/app/features/explore/TraceView/components/TracePageHeader/SpanGraph/CanvasSpanGraph.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"] @@ -3916,18 +3253,7 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "5"], [0, 0, 0, "Styles should be written using objects.", "6"], [0, 0, 0, "Styles should be written using objects.", "7"], - [0, 0, 0, "Styles should be written using objects.", "8"], - [0, 0, 0, "Styles should be written using objects.", "9"], - [0, 0, 0, "Styles should be written using objects.", "10"], - [0, 0, 0, "Styles should be written using objects.", "11"], - [0, 0, 0, "Styles should be written using objects.", "12"] - ], - "public/app/features/explore/TraceView/components/TraceTimelineViewer/SpanBar.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"], - [0, 0, 0, "Styles should be written using objects.", "4"] + [0, 0, 0, "Styles should be written using objects.", "8"] ], "public/app/features/explore/TraceView/components/TraceTimelineViewer/SpanBarRow.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], @@ -3996,6 +3322,9 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "4"], [0, 0, 0, "Styles should be written using objects.", "5"] ], + "public/app/features/explore/TraceView/components/TraceTimelineViewer/SpanDetail/SpanFlameGraph.tsx:5381": [ + [0, 0, 0, "Do not use any type assertions.", "0"] + ], "public/app/features/explore/TraceView/components/TraceTimelineViewer/SpanDetail/TextList.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"], @@ -4066,9 +3395,6 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "6"], [0, 0, 0, "Styles should be written using objects.", "7"] ], - "public/app/features/explore/TraceView/components/TraceTimelineViewer/TimelineRow.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] - ], "public/app/features/explore/TraceView/components/TraceTimelineViewer/VirtualizedTraceView.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"], @@ -4083,11 +3409,6 @@ exports[`better eslint`] = { "public/app/features/explore/TraceView/components/common/CopyIcon.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"] ], - "public/app/features/explore/TraceView/components/common/Divider.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"] - ], "public/app/features/explore/TraceView/components/common/LabeledList.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"], @@ -4103,10 +3424,6 @@ exports[`better eslint`] = { "public/app/features/explore/TraceView/components/demo/trace-generators.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] ], - "public/app/features/explore/TraceView/components/model/link-patterns.test.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"] - ], "public/app/features/explore/TraceView/components/model/link-patterns.tsx:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"], @@ -4119,8 +3436,7 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "8"], [0, 0, 0, "Do not use any type assertions.", "9"], [0, 0, 0, "Unexpected any. Specify a different type.", "10"], - [0, 0, 0, "Do not use any type assertions.", "11"], - [0, 0, 0, "Unexpected any. Specify a different type.", "12"] + [0, 0, 0, "Do not use any type assertions.", "11"] ], "public/app/features/explore/TraceView/components/model/transform-trace-data.tsx:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] @@ -4132,25 +3448,6 @@ exports[`better eslint`] = { "public/app/features/explore/TraceView/components/types/trace.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], - "public/app/features/explore/TraceView/components/uberUtilityStyles.ts:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"], - [0, 0, 0, "Styles should be written using objects.", "4"], - [0, 0, 0, "Styles should be written using objects.", "5"], - [0, 0, 0, "Styles should be written using objects.", "6"], - [0, 0, 0, "Styles should be written using objects.", "7"], - [0, 0, 0, "Styles should be written using objects.", "8"], - [0, 0, 0, "Styles should be written using objects.", "9"], - [0, 0, 0, "Styles should be written using objects.", "10"], - [0, 0, 0, "Styles should be written using objects.", "11"], - [0, 0, 0, "Styles should be written using objects.", "12"], - [0, 0, 0, "Styles should be written using objects.", "13"], - [0, 0, 0, "Styles should be written using objects.", "14"], - [0, 0, 0, "Styles should be written using objects.", "15"], - [0, 0, 0, "Styles should be written using objects.", "16"] - ], "public/app/features/explore/TraceView/createSpanLink.tsx:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], [0, 0, 0, "Do not use any type assertions.", "1"] @@ -4159,12 +3456,6 @@ exports[`better eslint`] = { [0, 0, 0, "Do not use any type assertions.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"] ], - "public/app/features/explore/spec/interpolation.test.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], - "public/app/features/explore/spec/queryHistory.test.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], "public/app/features/explore/state/time.test.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], @@ -4177,9 +3468,8 @@ exports[`better eslint`] = { [0, 0, 0, "Do not use any type assertions.", "5"] ], "public/app/features/expressions/ExpressionDatasource.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Do not use any type assertions.", "1"], - [0, 0, 0, "Do not use any type assertions.", "2"] + [0, 0, 0, "Do not use any type assertions.", "0"], + [0, 0, 0, "Do not use any type assertions.", "1"] ], "public/app/features/expressions/components/Condition.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], @@ -4195,16 +3485,9 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "5"], [0, 0, 0, "Styles should be written using objects.", "6"] ], - "public/app/features/expressions/components/Threshold.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"] - ], "public/app/features/expressions/guards.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] ], - "public/app/features/folders/state/actions.test.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], "public/app/features/geo/editor/GazetteerPathEditor.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"] ], @@ -4212,19 +3495,10 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"] ], - "public/app/features/geo/format/geohash.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], - "public/app/features/geo/format/geojson.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], "public/app/features/geo/gazetteer/gazetteer.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Do not use any type assertions.", "1"] ], - "public/app/features/geo/gazetteer/worldmap.test.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], "public/app/features/geo/utils/frameVectorSource.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], [0, 0, 0, "Do not use any type assertions.", "1"] @@ -4238,9 +3512,6 @@ exports[`better eslint`] = { "public/app/features/inspector/InspectDataTab.tsx:5381": [ [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"] ], - "public/app/features/inspector/InspectErrorTab.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], "public/app/features/inspector/InspectJSONTab.tsx:5381": [ [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"] ], @@ -4258,11 +3529,9 @@ exports[`better eslint`] = { ], "public/app/features/inspector/QueryInspector.tsx:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"], - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "4"], - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "5"] + [0, 0, 0, "Styles should be written using objects.", "1"], + [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "2"], + [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "3"] ], "public/app/features/inspector/styles.ts:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], @@ -4277,36 +3546,11 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "9"], [0, 0, 0, "Styles should be written using objects.", "10"] ], - "public/app/features/invites/state/selectors.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], - "public/app/features/library-panels/components/LibraryPanelCard/LibraryPanelCard.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] - ], "public/app/features/library-panels/components/LibraryPanelInfo/LibraryPanelInfo.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"], [0, 0, 0, "Styles should be written using objects.", "2"] ], - "public/app/features/library-panels/components/LibraryPanelsSearch/LibraryPanelsSearch.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"], - [0, 0, 0, "Styles should be written using objects.", "4"], - [0, 0, 0, "Styles should be written using objects.", "5"], - [0, 0, 0, "Styles should be written using objects.", "6"], - [0, 0, 0, "Styles should be written using objects.", "7"], - [0, 0, 0, "Styles should be written using objects.", "8"] - ], - "public/app/features/library-panels/components/LibraryPanelsView/LibraryPanelsView.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"], - [0, 0, 0, "Styles should be written using objects.", "4"], - [0, 0, 0, "Styles should be written using objects.", "5"] - ], "public/app/features/library-panels/components/LibraryPanelsView/actions.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], @@ -4331,11 +3575,6 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"] ], - "public/app/features/live/centrifuge/LiveDataStream.test.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"] - ], "public/app/features/live/centrifuge/LiveDataStream.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] ], @@ -4345,9 +3584,6 @@ exports[`better eslint`] = { "public/app/features/live/centrifuge/serviceWorkerProxy.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] ], - "public/app/features/live/centrifuge/transferHandlers.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], "public/app/features/live/data/amendTimeSeries.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Do not use any type assertions.", "1"], @@ -4355,8 +3591,8 @@ exports[`better eslint`] = { [0, 0, 0, "Do not use any type assertions.", "3"], [0, 0, 0, "Do not use any type assertions.", "4"] ], - "public/app/features/live/index.ts:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"] + "public/app/features/logs/components/LoadingIndicator.tsx:5381": [ + [0, 0, 0, "Styles should be written using objects.", "0"] ], "public/app/features/logs/components/LogDetailsRow.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], @@ -4430,9 +3666,6 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "34"], [0, 0, 0, "Styles should be written using objects.", "35"] ], - "public/app/features/logs/components/log-context/LoadingIndicator.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] - ], "public/app/features/logs/components/log-context/LogRowContextModal.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"], @@ -4473,9 +3706,6 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "4"], [0, 0, 0, "Styles should be written using objects.", "5"] ], - "public/app/features/manage-dashboards/state/actions.test.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], "public/app/features/manage-dashboards/state/actions.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"], @@ -4483,7 +3713,7 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "3"], [0, 0, 0, "Do not use any type assertions.", "4"], [0, 0, 0, "Unexpected any. Specify a different type.", "5"], - [0, 0, 0, "Do not use any type assertions.", "6"], + [0, 0, 0, "Unexpected any. Specify a different type.", "6"], [0, 0, 0, "Unexpected any. Specify a different type.", "7"], [0, 0, 0, "Unexpected any. Specify a different type.", "8"], [0, 0, 0, "Unexpected any. Specify a different type.", "9"], @@ -4491,12 +3721,7 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "11"], [0, 0, 0, "Unexpected any. Specify a different type.", "12"], [0, 0, 0, "Unexpected any. Specify a different type.", "13"], - [0, 0, 0, "Unexpected any. Specify a different type.", "14"], - [0, 0, 0, "Unexpected any. Specify a different type.", "15"], - [0, 0, 0, "Unexpected any. Specify a different type.", "16"], - [0, 0, 0, "Unexpected any. Specify a different type.", "17"], - [0, 0, 0, "Unexpected any. Specify a different type.", "18"], - [0, 0, 0, "Unexpected any. Specify a different type.", "19"] + [0, 0, 0, "Unexpected any. Specify a different type.", "14"] ], "public/app/features/manage-dashboards/state/reducers.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], @@ -4506,27 +3731,13 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "4"] ], "public/app/features/org/state/actions.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"], - [0, 0, 0, "Unexpected any. Specify a different type.", "4"] + [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], "public/app/features/org/state/reducers.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] ], "public/app/features/panel/components/VizTypePicker/PanelTypeCard.tsx:5381": [ - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"], - [0, 0, 0, "Styles should be written using objects.", "4"], - [0, 0, 0, "Styles should be written using objects.", "5"], - [0, 0, 0, "Styles should be written using objects.", "6"], - [0, 0, 0, "Styles should be written using objects.", "7"], - [0, 0, 0, "Styles should be written using objects.", "8"], - [0, 0, 0, "Styles should be written using objects.", "9"], - [0, 0, 0, "Styles should be written using objects.", "10"] + [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"] ], "public/app/features/panel/components/VizTypePicker/VisualizationSuggestionCard.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], @@ -4535,12 +3746,6 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "3"], [0, 0, 0, "Styles should be written using objects.", "4"] ], - "public/app/features/panel/components/VizTypePicker/VizTypePicker.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] - ], - "public/app/features/panel/components/VizTypePicker/types.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], "public/app/features/panel/panellinks/linkSuppliers.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], @@ -4548,18 +3753,7 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"], [0, 0, 0, "Unexpected any. Specify a different type.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"], - [0, 0, 0, "Unexpected any. Specify a different type.", "4"] - ], - "public/app/features/panel/state/actions.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], - "public/app/features/panel/state/reducers.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"] - ], - "public/app/features/playlist/EmptyQueryListBanner.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] + [0, 0, 0, "Unexpected any. Specify a different type.", "3"] ], "public/app/features/playlist/PlaylistForm.tsx:5381": [ [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"], @@ -4590,12 +3784,7 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "0"] ], "public/app/features/plugins/admin/components/PluginDetailsBody.tsx:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"] - ], - "public/app/features/plugins/admin/components/PluginDetailsDisabledError.tsx:5381": [ - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"] + [0, 0, 0, "Do not use any type assertions.", "0"] ], "public/app/features/plugins/admin/components/PluginDetailsHeaderDependencies.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], @@ -4611,17 +3800,6 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "2"], [0, 0, 0, "Styles should be written using objects.", "3"] ], - "public/app/features/plugins/admin/components/PluginDetailsSignature.tsx:5381": [ - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"] - ], - "public/app/features/plugins/admin/components/PluginListItem.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"], - [0, 0, 0, "Styles should be written using objects.", "4"], - [0, 0, 0, "Styles should be written using objects.", "5"] - ], "public/app/features/plugins/admin/components/PluginSignatureDetailsBadge.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"], @@ -4635,9 +3813,6 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"] ], - "public/app/features/plugins/admin/components/SearchField.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], "public/app/features/plugins/admin/components/VersionList.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"], @@ -4651,11 +3826,7 @@ exports[`better eslint`] = { ], "public/app/features/plugins/admin/pages/Browse.tsx:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], - [0, 0, 0, "Do not use any type assertions.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"], - [0, 0, 0, "Styles should be written using objects.", "4"], - [0, 0, 0, "Styles should be written using objects.", "5"] + [0, 0, 0, "Do not use any type assertions.", "1"] ], "public/app/features/plugins/admin/state/actions.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] @@ -4663,9 +3834,6 @@ exports[`better eslint`] = { "public/app/features/plugins/admin/types.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], - "public/app/features/plugins/components/PluginsErrorsInfo.tsx:5381": [ - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"] - ], "public/app/features/plugins/datasource_srv.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"], @@ -4677,57 +3845,22 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "7"], [0, 0, 0, "Do not use any type assertions.", "8"], [0, 0, 0, "Unexpected any. Specify a different type.", "9"], - [0, 0, 0, "Do not use any type assertions.", "10"], - [0, 0, 0, "Unexpected any. Specify a different type.", "11"], - [0, 0, 0, "Unexpected any. Specify a different type.", "12"], - [0, 0, 0, "Do not use any type assertions.", "13"] - ], - "public/app/features/plugins/pluginSettings.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"] + [0, 0, 0, "Do not use any type assertions.", "10"], + [0, 0, 0, "Unexpected any. Specify a different type.", "11"], + [0, 0, 0, "Do not use any type assertions.", "12"] ], "public/app/features/plugins/sandbox/distortion_map.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] ], - "public/app/features/plugins/sandbox/sandbox_components.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], "public/app/features/plugins/sandbox/sandbox_plugin_loader.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], [0, 0, 0, "Do not use any type assertions.", "1"], [0, 0, 0, "Do not use any type assertions.", "2"] ], - "public/app/features/plugins/sql/components/query-editor-raw/QueryToolbox.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"], - [0, 0, 0, "Styles should be written using objects.", "4"] - ], - "public/app/features/plugins/sql/components/query-editor-raw/QueryValidator.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"] - ], - "public/app/features/plugins/sql/components/query-editor-raw/RawEditor.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"] - ], - "public/app/features/plugins/sql/components/visual-query-builder/AwesomeQueryBuilder.tsx:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"], - [0, 0, 0, "Do not use any type assertions.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"] - ], - "public/app/features/plugins/sql/components/visual-query-builder/SQLWhereRow.tsx:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"] - ], "public/app/features/plugins/tests/datasource_srv.test.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"], - [0, 0, 0, "Unexpected any. Specify a different type.", "4"], - [0, 0, 0, "Unexpected any. Specify a different type.", "5"] + [0, 0, 0, "Unexpected any. Specify a different type.", "2"] ], "public/app/features/plugins/utils.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], @@ -4735,9 +3868,6 @@ exports[`better eslint`] = { [0, 0, 0, "Do not use any type assertions.", "2"], [0, 0, 0, "Do not use any type assertions.", "3"] ], - "public/app/features/profile/ChangePasswordForm.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] - ], "public/app/features/query/components/QueryEditorRow.tsx:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], [0, 0, 0, "Do not use any type assertions.", "1"], @@ -4758,26 +3888,18 @@ exports[`better eslint`] = { ], "public/app/features/query/components/QueryGroup.tsx:5381": [ [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"], - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "1"], + [0, 0, 0, "Styles should be written using objects.", "1"], [0, 0, 0, "Styles should be written using objects.", "2"], [0, 0, 0, "Styles should be written using objects.", "3"], [0, 0, 0, "Styles should be written using objects.", "4"], [0, 0, 0, "Styles should be written using objects.", "5"], [0, 0, 0, "Styles should be written using objects.", "6"], [0, 0, 0, "Styles should be written using objects.", "7"], - [0, 0, 0, "Styles should be written using objects.", "8"] + [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "8"] ], "public/app/features/query/components/QueryGroupOptions.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"] ], - "public/app/features/query/state/DashboardQueryRunner/AlertStatesWorker.test.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"] - ], - "public/app/features/query/state/DashboardQueryRunner/AnnotationsQueryRunner.test.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], "public/app/features/query/state/DashboardQueryRunner/AnnotationsQueryRunner.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] ], @@ -4800,8 +3922,7 @@ exports[`better eslint`] = { ], "public/app/features/query/state/PanelQueryRunner.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], - [0, 0, 0, "Do not use any type assertions.", "1"], - [0, 0, 0, "Do not use any type assertions.", "2"] + [0, 0, 0, "Do not use any type assertions.", "1"] ], "public/app/features/query/state/runRequest.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] @@ -4817,90 +3938,12 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "7"], [0, 0, 0, "Unexpected any. Specify a different type.", "8"], [0, 0, 0, "Unexpected any. Specify a different type.", "9"], - [0, 0, 0, "Unexpected any. Specify a different type.", "10"], - [0, 0, 0, "Unexpected any. Specify a different type.", "11"] - ], - "public/app/features/sandbox/TestStuffPage.tsx:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"] - ], - "public/app/features/search/components/DashboardListPage.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] - ], - "public/app/features/search/components/ManageDashboardsNew.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"], - [0, 0, 0, "Styles should be written using objects.", "4"] - ], - "public/app/features/search/components/SearchCard.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Do not use any type assertions.", "1"], - [0, 0, 0, "Do not use any type assertions.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"], - [0, 0, 0, "Styles should be written using objects.", "4"], - [0, 0, 0, "Styles should be written using objects.", "5"], - [0, 0, 0, "Styles should be written using objects.", "6"], - [0, 0, 0, "Styles should be written using objects.", "7"], - [0, 0, 0, "Styles should be written using objects.", "8"], - [0, 0, 0, "Styles should be written using objects.", "9"], - [0, 0, 0, "Styles should be written using objects.", "10"], - [0, 0, 0, "Styles should be written using objects.", "11"] - ], - "public/app/features/search/components/SearchCardExpanded.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"], - [0, 0, 0, "Styles should be written using objects.", "4"], - [0, 0, 0, "Styles should be written using objects.", "5"], - [0, 0, 0, "Styles should be written using objects.", "6"], - [0, 0, 0, "Styles should be written using objects.", "7"], - [0, 0, 0, "Styles should be written using objects.", "8"], - [0, 0, 0, "Styles should be written using objects.", "9"], - [0, 0, 0, "Styles should be written using objects.", "10"] - ], - "public/app/features/search/components/SearchItem.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"] - ], - "public/app/features/search/hooks/useSearchKeyboardSelection.ts:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"] + [0, 0, 0, "Unexpected any. Specify a different type.", "10"] ], "public/app/features/search/page/components/ActionRow.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"] ], - "public/app/features/search/page/components/ConfirmDeleteModal.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] - ], - "public/app/features/search/page/components/FolderSection.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"], - [0, 0, 0, "Styles should be written using objects.", "4"], - [0, 0, 0, "Styles should be written using objects.", "5"], - [0, 0, 0, "Styles should be written using objects.", "6"], - [0, 0, 0, "Styles should be written using objects.", "7"], - [0, 0, 0, "Styles should be written using objects.", "8"] - ], - "public/app/features/search/page/components/MoveToFolderModal.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"] - ], - "public/app/features/search/page/components/RootFolderView.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"] - ], - "public/app/features/search/page/components/SearchResultsCards.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"] - ], "public/app/features/search/page/components/SearchResultsTable.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"], @@ -4916,11 +3959,6 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "11"], [0, 0, 0, "Styles should be written using objects.", "12"] ], - "public/app/features/search/page/components/SearchView.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"] - ], "public/app/features/search/page/components/columns.tsx:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] ], @@ -4943,24 +3981,6 @@ exports[`better eslint`] = { "public/app/features/search/utils.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] ], - "public/app/features/serviceaccounts/ServiceAccountsListPage.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"], - [0, 0, 0, "Styles should be written using objects.", "4"], - [0, 0, 0, "Styles should be written using objects.", "5"], - [0, 0, 0, "Styles should be written using objects.", "6"], - [0, 0, 0, "Styles should be written using objects.", "7"], - [0, 0, 0, "Styles should be written using objects.", "8"], - [0, 0, 0, "Styles should be written using objects.", "9"] - ], - "public/app/features/serviceaccounts/components/CreateTokenModal.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"] - ], "public/app/features/serviceaccounts/components/ServiceAccountProfile.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"] ], @@ -4976,14 +3996,6 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "5"], [0, 0, 0, "Styles should be written using objects.", "6"] ], - "public/app/features/serviceaccounts/components/ServiceAccountsListItem.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"], - [0, 0, 0, "Styles should be written using objects.", "4"], - [0, 0, 0, "Styles should be written using objects.", "5"] - ], "public/app/features/serviceaccounts/state/reducers.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] ], @@ -5023,9 +4035,7 @@ exports[`better eslint`] = { ], "public/app/features/storage/storage.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Do not use any type assertions.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"] + [0, 0, 0, "Unexpected any. Specify a different type.", "1"] ], "public/app/features/teams/TeamGroupSync.tsx:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], @@ -5045,14 +4055,14 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "1"], [0, 0, 0, "Unexpected any. Specify a different type.", "2"] ], - "public/app/features/templating/macroRegistry.test.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], "public/app/features/templating/templateProxies.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], "public/app/features/templating/template_srv.mock.ts:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"] + [0, 0, 0, "Do not use any type assertions.", "0"], + [0, 0, 0, "Do not use any type assertions.", "1"], + [0, 0, 0, "Do not use any type assertions.", "2"], + [0, 0, 0, "Do not use any type assertions.", "3"] ], "public/app/features/templating/template_srv.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], @@ -5065,12 +4075,15 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "7"], [0, 0, 0, "Unexpected any. Specify a different type.", "8"], [0, 0, 0, "Unexpected any. Specify a different type.", "9"], - [0, 0, 0, "Unexpected any. Specify a different type.", "10"], - [0, 0, 0, "Unexpected any. Specify a different type.", "11"], - [0, 0, 0, "Do not use any type assertions.", "12"], - [0, 0, 0, "Do not use any type assertions.", "13"], - [0, 0, 0, "Unexpected any. Specify a different type.", "14"], - [0, 0, 0, "Do not use any type assertions.", "15"] + [0, 0, 0, "Do not use any type assertions.", "10"], + [0, 0, 0, "Do not use any type assertions.", "11"], + [0, 0, 0, "Do not use any type assertions.", "12"] + ], + "public/app/features/trails/ActionTabs/utils.ts:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"] + ], + "public/app/features/trails/MetricScene.tsx:5381": [ + [0, 0, 0, "Do not use any type assertions.", "0"] ], "public/app/features/transformers/FilterByValueTransformer/ValueMatchers/BasicMatcherEditor.tsx:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] @@ -5099,13 +4112,18 @@ exports[`better eslint`] = { ], "public/app/features/transformers/calculateHeatmap/heatmap.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], - [0, 0, 0, "Do not use any type assertions.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"] + [0, 0, 0, "Do not use any type assertions.", "1"] ], "public/app/features/transformers/configFromQuery/ConfigFromQueryTransformerEditor.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"] ], - "public/app/features/transformers/editors/CalculateFieldTransformerEditor.tsx:5381": [ + "public/app/features/transformers/editors/CalculateFieldTransformerEditor/CumulativeOptionsEditor.tsx:5381": [ + [0, 0, 0, "Do not use any type assertions.", "0"] + ], + "public/app/features/transformers/editors/CalculateFieldTransformerEditor/ReduceRowOptionsEditor.tsx:5381": [ + [0, 0, 0, "Do not use any type assertions.", "0"] + ], + "public/app/features/transformers/editors/CalculateFieldTransformerEditor/WindowOptionsEditor.tsx:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] ], "public/app/features/transformers/editors/ConvertFieldTypeTransformerEditor.tsx:5381": [ @@ -5123,13 +4141,7 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "2"] ], "public/app/features/transformers/editors/ReduceTransformerEditor.tsx:5381": [ - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"], - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "1"], - [0, 0, 0, "Do not use any type assertions.", "2"] - ], - "public/app/features/transformers/editors/RenameByRegexTransformer.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"] + [0, 0, 0, "Do not use any type assertions.", "0"] ], "public/app/features/transformers/editors/SortByTransformerEditor.tsx:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] @@ -5175,8 +4187,7 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "0"] ], "public/app/features/transformers/prepareTimeSeries/prepareTimeSeries.test.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"] + [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], "public/app/features/transformers/prepareTimeSeries/prepareTimeSeries.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], @@ -5202,17 +4213,11 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "1"], [0, 0, 0, "Styles should be written using objects.", "2"] ], - "public/app/features/users/state/reducers.ts:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"] - ], "public/app/features/variables/adapters.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"], [0, 0, 0, "Unexpected any. Specify a different type.", "2"] ], - "public/app/features/variables/adhoc/actions.ts:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"] - ], "public/app/features/variables/adhoc/picker/AdHocFilterRenderer.tsx:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], @@ -5225,19 +4230,12 @@ exports[`better eslint`] = { "public/app/features/variables/datasource/actions.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], - "public/app/features/variables/datasource/reducer.ts:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"] - ], - "public/app/features/variables/editor/LegacyVariableQueryEditor.tsx:5381": [ - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"] - ], "public/app/features/variables/editor/VariableEditorContainer.tsx:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], [0, 0, 0, "Do not use any type assertions.", "1"] ], "public/app/features/variables/editor/VariableEditorEditor.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "1"] + [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], "public/app/features/variables/editor/VariableEditorList.tsx:5381": [ [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"], @@ -5257,16 +4255,6 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "9"], [0, 0, 0, "Styles should be written using objects.", "10"] ], - "public/app/features/variables/editor/VariableSelectField.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"] - ], - "public/app/features/variables/editor/VariableTextAreaField.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] - ], - "public/app/features/variables/editor/VariableValuesPreview.tsx:5381": [ - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"] - ], "public/app/features/variables/editor/getVariableQueryEditor.tsx:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"] @@ -5309,39 +4297,17 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "8"], [0, 0, 0, "Unexpected any. Specify a different type.", "9"] ], - "public/app/features/variables/interval/reducer.ts:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"] - ], "public/app/features/variables/pickers/OptionsPicker/actions.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"] ], - "public/app/features/variables/pickers/OptionsPicker/reducer.test.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"], - [0, 0, 0, "Unexpected any. Specify a different type.", "4"], - [0, 0, 0, "Unexpected any. Specify a different type.", "5"], - [0, 0, 0, "Unexpected any. Specify a different type.", "6"], - [0, 0, 0, "Unexpected any. Specify a different type.", "7"], - [0, 0, 0, "Unexpected any. Specify a different type.", "8"], - [0, 0, 0, "Unexpected any. Specify a different type.", "9"], - [0, 0, 0, "Unexpected any. Specify a different type.", "10"], - [0, 0, 0, "Unexpected any. Specify a different type.", "11"], - [0, 0, 0, "Unexpected any. Specify a different type.", "12"] - ], "public/app/features/variables/pickers/shared/VariableLink.tsx:5381": [ - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"] + [0, 0, 0, "Styles should be written using objects.", "0"], + [0, 0, 0, "Styles should be written using objects.", "1"] ], "public/app/features/variables/pickers/shared/VariableOptions.tsx:5381": [ [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"] ], - "public/app/features/variables/query/QueryVariableEditor.test.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], "public/app/features/variables/query/QueryVariableEditor.tsx:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"] @@ -5351,51 +4317,29 @@ exports[`better eslint`] = { [0, 0, 0, "Do not use any type assertions.", "1"] ], "public/app/features/variables/query/actions.test.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"], - [0, 0, 0, "Unexpected any. Specify a different type.", "4"] - ], - "public/app/features/variables/query/actions.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"], - [0, 0, 0, "Unexpected any. Specify a different type.", "4"] - ], - "public/app/features/variables/query/operators.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"] - ], - "public/app/features/variables/query/queryRunners.test.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"], - [0, 0, 0, "Unexpected any. Specify a different type.", "4"], - [0, 0, 0, "Unexpected any. Specify a different type.", "5"], - [0, 0, 0, "Unexpected any. Specify a different type.", "6"], - [0, 0, 0, "Unexpected any. Specify a different type.", "7"], - [0, 0, 0, "Unexpected any. Specify a different type.", "8"], - [0, 0, 0, "Unexpected any. Specify a different type.", "9"], - [0, 0, 0, "Unexpected any. Specify a different type.", "10"], - [0, 0, 0, "Unexpected any. Specify a different type.", "11"], - [0, 0, 0, "Unexpected any. Specify a different type.", "12"], - [0, 0, 0, "Unexpected any. Specify a different type.", "13"], - [0, 0, 0, "Unexpected any. Specify a different type.", "14"], - [0, 0, 0, "Unexpected any. Specify a different type.", "15"], - [0, 0, 0, "Unexpected any. Specify a different type.", "16"], - [0, 0, 0, "Unexpected any. Specify a different type.", "17"] + [0, 0, 0, "Unexpected any. Specify a different type.", "0"] + ], + "public/app/features/variables/query/actions.ts:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"], + [0, 0, 0, "Unexpected any. Specify a different type.", "1"], + [0, 0, 0, "Unexpected any. Specify a different type.", "2"], + [0, 0, 0, "Unexpected any. Specify a different type.", "3"], + [0, 0, 0, "Unexpected any. Specify a different type.", "4"] + ], + "public/app/features/variables/query/operators.ts:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"], + [0, 0, 0, "Unexpected any. Specify a different type.", "1"] + ], + "public/app/features/variables/query/queryRunners.test.ts:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], "public/app/features/variables/query/queryRunners.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"] ], "public/app/features/variables/query/reducer.ts:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"] + [0, 0, 0, "Unexpected any. Specify a different type.", "0"], + [0, 0, 0, "Unexpected any. Specify a different type.", "1"] ], "public/app/features/variables/query/variableQueryObserver.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], @@ -5405,13 +4349,9 @@ exports[`better eslint`] = { [0, 0, 0, "Do not use any type assertions.", "0"], [0, 0, 0, "Do not use any type assertions.", "1"] ], - "public/app/features/variables/shared/testing/datasourceVariableBuilder.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], "public/app/features/variables/shared/testing/optionsVariableBuilder.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], - [0, 0, 0, "Do not use any type assertions.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"] + [0, 0, 0, "Do not use any type assertions.", "1"] ], "public/app/features/variables/shared/testing/variableBuilder.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] @@ -5422,35 +4362,18 @@ exports[`better eslint`] = { [0, 0, 0, "Do not use any type assertions.", "2"], [0, 0, 0, "Do not use any type assertions.", "3"], [0, 0, 0, "Do not use any type assertions.", "4"], - [0, 0, 0, "Unexpected any. Specify a different type.", "5"], - [0, 0, 0, "Do not use any type assertions.", "6"], - [0, 0, 0, "Do not use any type assertions.", "7"], - [0, 0, 0, "Do not use any type assertions.", "8"], - [0, 0, 0, "Do not use any type assertions.", "9"], - [0, 0, 0, "Unexpected any. Specify a different type.", "10"], - [0, 0, 0, "Unexpected any. Specify a different type.", "11"], - [0, 0, 0, "Unexpected any. Specify a different type.", "12"], - [0, 0, 0, "Unexpected any. Specify a different type.", "13"] + [0, 0, 0, "Do not use any type assertions.", "5"], + [0, 0, 0, "Do not use any type assertions.", "6"] ], "public/app/features/variables/state/keyedVariablesReducer.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"] ], - "public/app/features/variables/state/reducers.test.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"] - ], "public/app/features/variables/state/sharedReducer.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Do not use any type assertions.", "1"], [0, 0, 0, "Unexpected any. Specify a different type.", "2"] ], - "public/app/features/variables/state/transactionReducer.test.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"] - ], "public/app/features/variables/state/types.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], @@ -5461,13 +4384,12 @@ exports[`better eslint`] = { "public/app/features/variables/system/adapter.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"], + [0, 0, 0, "Do not use any type assertions.", "2"], [0, 0, 0, "Do not use any type assertions.", "3"], - [0, 0, 0, "Do not use any type assertions.", "4"], - [0, 0, 0, "Unexpected any. Specify a different type.", "5"], + [0, 0, 0, "Unexpected any. Specify a different type.", "4"], + [0, 0, 0, "Do not use any type assertions.", "5"], [0, 0, 0, "Do not use any type assertions.", "6"], - [0, 0, 0, "Do not use any type assertions.", "7"], - [0, 0, 0, "Unexpected any. Specify a different type.", "8"] + [0, 0, 0, "Unexpected any. Specify a different type.", "7"] ], "public/app/features/variables/types.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], @@ -5480,25 +4402,14 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"], [0, 0, 0, "Unexpected any. Specify a different type.", "2"], - [0, 0, 0, "Do not use any type assertions.", "3"], + [0, 0, 0, "Unexpected any. Specify a different type.", "3"], [0, 0, 0, "Unexpected any. Specify a different type.", "4"], [0, 0, 0, "Unexpected any. Specify a different type.", "5"], - [0, 0, 0, "Unexpected any. Specify a different type.", "6"], - [0, 0, 0, "Unexpected any. Specify a different type.", "7"], - [0, 0, 0, "Unexpected any. Specify a different type.", "8"], - [0, 0, 0, "Do not use any type assertions.", "9"] + [0, 0, 0, "Do not use any type assertions.", "6"] ], "public/app/features/visualization/data-hover/DataHoverRows.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"] ], - "public/app/features/visualization/data-hover/DataHoverView.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"], - [0, 0, 0, "Styles should be written using objects.", "4"], - [0, 0, 0, "Styles should be written using objects.", "5"] - ], "public/app/plugins/datasource/alertmanager/DataSource.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], @@ -5510,10 +4421,6 @@ exports[`better eslint`] = { "public/app/plugins/datasource/azuremonitor/azure_monitor/azure_monitor_datasource.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] ], - "public/app/plugins/datasource/azuremonitor/components/LogsQueryEditor/QueryField.tsx:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"], - [0, 0, 0, "Do not use any type assertions.", "1"] - ], "public/app/plugins/datasource/azuremonitor/components/QueryEditor/QueryEditor.tsx:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] ], @@ -5522,8 +4429,7 @@ exports[`better eslint`] = { ], "public/app/plugins/datasource/cloud-monitoring/CloudMonitoringMetricFindQuery.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], - [0, 0, 0, "Do not use any type assertions.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"] + [0, 0, 0, "Unexpected any. Specify a different type.", "1"] ], "public/app/plugins/datasource/cloud-monitoring/annotationSupport.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], @@ -5532,42 +4438,24 @@ exports[`better eslint`] = { "public/app/plugins/datasource/cloud-monitoring/components/Aggregation.tsx:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] ], - "public/app/plugins/datasource/cloud-monitoring/components/AliasBy.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"] - ], "public/app/plugins/datasource/cloud-monitoring/components/CloudMonitoringCheatSheet.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"] ], - "public/app/plugins/datasource/cloud-monitoring/components/MQLQueryEditor.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], "public/app/plugins/datasource/cloud-monitoring/components/VariableQueryEditor.tsx:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"], - [0, 0, 0, "Unexpected any. Specify a different type.", "4"], - [0, 0, 0, "Unexpected any. Specify a different type.", "5"], - [0, 0, 0, "Unexpected any. Specify a different type.", "6"] + [0, 0, 0, "Do not use any type assertions.", "0"] ], "public/app/plugins/datasource/cloud-monitoring/components/VisualMetricQueryEditor.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"] + [0, 0, 0, "Styles should be written using objects.", "0"] ], "public/app/plugins/datasource/cloud-monitoring/datasource.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], + [0, 0, 0, "Do not use any type assertions.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Do not use any type assertions.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"], - [0, 0, 0, "Unexpected any. Specify a different type.", "4"], - [0, 0, 0, "Do not use any type assertions.", "5"], - [0, 0, 0, "Do not use any type assertions.", "6"] + [0, 0, 0, "Unexpected any. Specify a different type.", "2"], + [0, 0, 0, "Do not use any type assertions.", "3"] ], "public/app/plugins/datasource/cloud-monitoring/functions.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], - [0, 0, 0, "Do not use any type assertions.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"] + [0, 0, 0, "Do not use any type assertions.", "1"] ], "public/app/plugins/datasource/cloud-monitoring/types/types.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] @@ -5582,18 +4470,12 @@ exports[`better eslint`] = { "public/app/plugins/datasource/cloudwatch/components/QueryEditor/LogsQueryEditor/LogsQueryEditor.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"] ], - "public/app/plugins/datasource/cloudwatch/components/QueryEditor/LogsQueryEditor/LogsQueryFieldOld.tsx:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"] - ], "public/app/plugins/datasource/cloudwatch/components/QueryEditor/MetricsQueryEditor/DynamicLabelsField.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"] ], "public/app/plugins/datasource/cloudwatch/components/shared/LogGroups/LegacyLogGroupNamesSelection.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"] ], - "public/app/plugins/datasource/cloudwatch/components/shared/LogGroups/LogGroupsField.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] - ], "public/app/plugins/datasource/cloudwatch/datasource.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], @@ -5609,9 +4491,6 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"] ], - "public/app/plugins/datasource/cloudwatch/query-runner/CloudWatchLogsQueryRunner.ts:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"] - ], "public/app/plugins/datasource/cloudwatch/types.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"], @@ -5623,15 +4502,10 @@ exports[`better eslint`] = { ], "public/app/plugins/datasource/cloudwatch/utils/datalinks.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], - [0, 0, 0, "Do not use any type assertions.", "1"], - [0, 0, 0, "Do not use any type assertions.", "2"] + [0, 0, 0, "Do not use any type assertions.", "1"] ], "public/app/plugins/datasource/cloudwatch/utils/logsRetry.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"] - ], - "public/app/plugins/datasource/dashboard/DashboardQueryEditor.tsx:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"] + [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], "public/app/plugins/datasource/dashboard/runSharedRequest.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], @@ -5643,27 +4517,27 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "2"], [0, 0, 0, "Unexpected any. Specify a different type.", "3"], [0, 0, 0, "Unexpected any. Specify a different type.", "4"], - [0, 0, 0, "Do not use any type assertions.", "5"], + [0, 0, 0, "Unexpected any. Specify a different type.", "5"], [0, 0, 0, "Unexpected any. Specify a different type.", "6"], [0, 0, 0, "Unexpected any. Specify a different type.", "7"], [0, 0, 0, "Unexpected any. Specify a different type.", "8"], [0, 0, 0, "Unexpected any. Specify a different type.", "9"], - [0, 0, 0, "Unexpected any. Specify a different type.", "10"], - [0, 0, 0, "Do not use any type assertions.", "11"], - [0, 0, 0, "Do not use any type assertions.", "12"], + [0, 0, 0, "Do not use any type assertions.", "10"], + [0, 0, 0, "Unexpected any. Specify a different type.", "11"], + [0, 0, 0, "Unexpected any. Specify a different type.", "12"], [0, 0, 0, "Unexpected any. Specify a different type.", "13"], [0, 0, 0, "Unexpected any. Specify a different type.", "14"], [0, 0, 0, "Unexpected any. Specify a different type.", "15"], [0, 0, 0, "Unexpected any. Specify a different type.", "16"], [0, 0, 0, "Unexpected any. Specify a different type.", "17"], - [0, 0, 0, "Unexpected any. Specify a different type.", "18"], + [0, 0, 0, "Do not use any type assertions.", "18"], [0, 0, 0, "Unexpected any. Specify a different type.", "19"], [0, 0, 0, "Unexpected any. Specify a different type.", "20"], [0, 0, 0, "Unexpected any. Specify a different type.", "21"], [0, 0, 0, "Unexpected any. Specify a different type.", "22"], [0, 0, 0, "Unexpected any. Specify a different type.", "23"], [0, 0, 0, "Unexpected any. Specify a different type.", "24"], - [0, 0, 0, "Do not use any type assertions.", "25"], + [0, 0, 0, "Unexpected any. Specify a different type.", "25"], [0, 0, 0, "Unexpected any. Specify a different type.", "26"], [0, 0, 0, "Unexpected any. Specify a different type.", "27"], [0, 0, 0, "Unexpected any. Specify a different type.", "28"], @@ -5671,19 +4545,7 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "30"], [0, 0, 0, "Unexpected any. Specify a different type.", "31"], [0, 0, 0, "Unexpected any. Specify a different type.", "32"], - [0, 0, 0, "Unexpected any. Specify a different type.", "33"], - [0, 0, 0, "Unexpected any. Specify a different type.", "34"], - [0, 0, 0, "Unexpected any. Specify a different type.", "35"], - [0, 0, 0, "Unexpected any. Specify a different type.", "36"], - [0, 0, 0, "Unexpected any. Specify a different type.", "37"], - [0, 0, 0, "Unexpected any. Specify a different type.", "38"], - [0, 0, 0, "Unexpected any. Specify a different type.", "39"], - [0, 0, 0, "Unexpected any. Specify a different type.", "40"], - [0, 0, 0, "Unexpected any. Specify a different type.", "41"], - [0, 0, 0, "Unexpected any. Specify a different type.", "42"], - [0, 0, 0, "Unexpected any. Specify a different type.", "43"], - [0, 0, 0, "Unexpected any. Specify a different type.", "44"], - [0, 0, 0, "Unexpected any. Specify a different type.", "45"] + [0, 0, 0, "Unexpected any. Specify a different type.", "33"] ], "public/app/plugins/datasource/elasticsearch/LanguageProvider.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], @@ -5697,9 +4559,6 @@ exports[`better eslint`] = { [0, 0, 0, "Do not use any type assertions.", "2"], [0, 0, 0, "Unexpected any. Specify a different type.", "3"] ], - "public/app/plugins/datasource/elasticsearch/QueryBuilder.test.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], "public/app/plugins/datasource/elasticsearch/QueryBuilder.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"], @@ -5707,17 +4566,12 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "3"], [0, 0, 0, "Unexpected any. Specify a different type.", "4"], [0, 0, 0, "Unexpected any. Specify a different type.", "5"], - [0, 0, 0, "Unexpected any. Specify a different type.", "6"], + [0, 0, 0, "Do not use any type assertions.", "6"], [0, 0, 0, "Unexpected any. Specify a different type.", "7"], - [0, 0, 0, "Unexpected any. Specify a different type.", "8"], - [0, 0, 0, "Unexpected any. Specify a different type.", "9"], - [0, 0, 0, "Do not use any type assertions.", "10"], - [0, 0, 0, "Unexpected any. Specify a different type.", "11"], - [0, 0, 0, "Unexpected any. Specify a different type.", "12"] + [0, 0, 0, "Unexpected any. Specify a different type.", "8"] ], "public/app/plugins/datasource/elasticsearch/components/AddRemove.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"] + [0, 0, 0, "Styles should be written using objects.", "0"] ], "public/app/plugins/datasource/elasticsearch/components/MetricPicker.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"] @@ -5734,21 +4588,14 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "2"] ], "public/app/plugins/datasource/elasticsearch/components/QueryEditor/BucketAggregationsEditor/SettingsEditor/TermsSettingsEditor.tsx:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"], - [0, 0, 0, "Do not use any type assertions.", "1"] + [0, 0, 0, "Do not use any type assertions.", "0"] ], "public/app/plugins/datasource/elasticsearch/components/QueryEditor/BucketAggregationsEditor/aggregations.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] ], - "public/app/plugins/datasource/elasticsearch/components/QueryEditor/BucketAggregationsEditor/state/actions.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], "public/app/plugins/datasource/elasticsearch/components/QueryEditor/BucketAggregationsEditor/state/reducer.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] ], - "public/app/plugins/datasource/elasticsearch/components/QueryEditor/ElasticsearchQueryContext.tsx:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"] - ], "public/app/plugins/datasource/elasticsearch/components/QueryEditor/MetricAggregationsEditor/MetricEditor.tsx:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] ], @@ -5768,11 +4615,6 @@ exports[`better eslint`] = { "public/app/plugins/datasource/elasticsearch/components/QueryEditor/MetricAggregationsEditor/aggregations.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] ], - "public/app/plugins/datasource/elasticsearch/components/QueryEditor/MetricAggregationsEditor/state/actions.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"] - ], "public/app/plugins/datasource/elasticsearch/components/QueryEditor/MetricAggregationsEditor/state/reducer.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] ], @@ -5811,13 +4653,11 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "2"] ], "public/app/plugins/datasource/elasticsearch/datasource.ts:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"], + [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"], [0, 0, 0, "Unexpected any. Specify a different type.", "2"], [0, 0, 0, "Unexpected any. Specify a different type.", "3"], - [0, 0, 0, "Unexpected any. Specify a different type.", "4"], - [0, 0, 0, "Unexpected any. Specify a different type.", "5"], - [0, 0, 0, "Unexpected any. Specify a different type.", "6"] + [0, 0, 0, "Unexpected any. Specify a different type.", "4"] ], "public/app/plugins/datasource/elasticsearch/hooks/useStatelessReducer.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] @@ -5829,32 +4669,25 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"] ], - "public/app/plugins/datasource/grafana-testdata-datasource/ConfigEditor.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] + "public/app/plugins/datasource/grafana-pyroscope-datasource/utils.ts:5381": [ + [0, 0, 0, "Do not use any type assertions.", "0"] ], "public/app/plugins/datasource/grafana-testdata-datasource/QueryEditor.tsx:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Do not use any type assertions.", "1"], [0, 0, 0, "Do not use any type assertions.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"], - [0, 0, 0, "Unexpected any. Specify a different type.", "4"], - [0, 0, 0, "Do not use any type assertions.", "5"], - [0, 0, 0, "Unexpected any. Specify a different type.", "6"] + [0, 0, 0, "Do not use any type assertions.", "3"], + [0, 0, 0, "Unexpected any. Specify a different type.", "4"] ], "public/app/plugins/datasource/grafana-testdata-datasource/components/RandomWalkEditor.tsx:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], - [0, 0, 0, "Do not use any type assertions.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"], - [0, 0, 0, "Do not use any type assertions.", "3"] - ], - "public/app/plugins/datasource/grafana-testdata-datasource/components/RawFrameEditor.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] + [0, 0, 0, "Unexpected any. Specify a different type.", "1"], + [0, 0, 0, "Do not use any type assertions.", "2"] ], "public/app/plugins/datasource/grafana-testdata-datasource/components/SimulationQueryEditor.tsx:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], - [0, 0, 0, "Do not use any type assertions.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"] + [0, 0, 0, "Unexpected any. Specify a different type.", "1"], + [0, 0, 0, "Unexpected any. Specify a different type.", "2"] ], "public/app/plugins/datasource/grafana-testdata-datasource/components/SimulationSchemaForm.tsx:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], @@ -5865,11 +4698,6 @@ exports[`better eslint`] = { [0, 0, 0, "Do not use any type assertions.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"] ], - "public/app/plugins/datasource/grafana-testdata-datasource/nodeGraphUtils.ts:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"] - ], "public/app/plugins/datasource/grafana-testdata-datasource/runStreams.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], @@ -5877,19 +4705,11 @@ exports[`better eslint`] = { [0, 0, 0, "Do not use any type assertions.", "0"] ], "public/app/plugins/datasource/grafana/components/QueryEditor.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Do not use any type assertions.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"], - [0, 0, 0, "Do not use any type assertions.", "3"], - [0, 0, 0, "Unexpected any. Specify a different type.", "4"], - [0, 0, 0, "Do not use any type assertions.", "5"], - [0, 0, 0, "Do not use any type assertions.", "6"], - [0, 0, 0, "Styles should be written using objects.", "7"] - ], - "public/app/plugins/datasource/grafana/components/SearchEditor.tsx:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Do not use any type assertions.", "2"] + [0, 0, 0, "Do not use any type assertions.", "2"], + [0, 0, 0, "Do not use any type assertions.", "3"], + [0, 0, 0, "Styles should be written using objects.", "4"] ], "public/app/plugins/datasource/grafana/components/TimePickerInput.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], @@ -5901,31 +4721,21 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"] ], - "public/app/plugins/datasource/grafana/datasource.test.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], "public/app/plugins/datasource/grafana/datasource.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Do not use any type assertions.", "1"], [0, 0, 0, "Do not use any type assertions.", "2"], [0, 0, 0, "Do not use any type assertions.", "3"], - [0, 0, 0, "Do not use any type assertions.", "4"], - [0, 0, 0, "Unexpected any. Specify a different type.", "5"], - [0, 0, 0, "Unexpected any. Specify a different type.", "6"], + [0, 0, 0, "Unexpected any. Specify a different type.", "4"], + [0, 0, 0, "Do not use any type assertions.", "5"], + [0, 0, 0, "Do not use any type assertions.", "6"], [0, 0, 0, "Do not use any type assertions.", "7"], - [0, 0, 0, "Do not use any type assertions.", "8"], - [0, 0, 0, "Do not use any type assertions.", "9"], - [0, 0, 0, "Unexpected any. Specify a different type.", "10"], - [0, 0, 0, "Unexpected any. Specify a different type.", "11"], - [0, 0, 0, "Do not use any type assertions.", "12"] + [0, 0, 0, "Unexpected any. Specify a different type.", "8"], + [0, 0, 0, "Do not use any type assertions.", "9"] ], "public/app/plugins/datasource/graphite/components/AddGraphiteFunction.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"] ], - "public/app/plugins/datasource/graphite/components/FunctionEditor.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"] - ], "public/app/plugins/datasource/graphite/components/FunctionParamEditor.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"] ], @@ -5959,26 +4769,22 @@ exports[`better eslint`] = { "public/app/plugins/datasource/graphite/datasource.test.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"], - [0, 0, 0, "Unexpected any. Specify a different type.", "4"], - [0, 0, 0, "Unexpected any. Specify a different type.", "5"], - [0, 0, 0, "Unexpected any. Specify a different type.", "6"] + [0, 0, 0, "Unexpected any. Specify a different type.", "2"] ], "public/app/plugins/datasource/graphite/datasource.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"], [0, 0, 0, "Unexpected any. Specify a different type.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"], + [0, 0, 0, "Do not use any type assertions.", "3"], [0, 0, 0, "Do not use any type assertions.", "4"], - [0, 0, 0, "Do not use any type assertions.", "5"], + [0, 0, 0, "Unexpected any. Specify a different type.", "5"], [0, 0, 0, "Unexpected any. Specify a different type.", "6"], [0, 0, 0, "Unexpected any. Specify a different type.", "7"], [0, 0, 0, "Unexpected any. Specify a different type.", "8"], [0, 0, 0, "Unexpected any. Specify a different type.", "9"], - [0, 0, 0, "Unexpected any. Specify a different type.", "10"], + [0, 0, 0, "Do not use any type assertions.", "10"], [0, 0, 0, "Do not use any type assertions.", "11"], - [0, 0, 0, "Do not use any type assertions.", "12"], + [0, 0, 0, "Unexpected any. Specify a different type.", "12"], [0, 0, 0, "Unexpected any. Specify a different type.", "13"], [0, 0, 0, "Unexpected any. Specify a different type.", "14"], [0, 0, 0, "Unexpected any. Specify a different type.", "15"], @@ -6020,15 +4826,7 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "51"], [0, 0, 0, "Unexpected any. Specify a different type.", "52"], [0, 0, 0, "Unexpected any. Specify a different type.", "53"], - [0, 0, 0, "Unexpected any. Specify a different type.", "54"], - [0, 0, 0, "Unexpected any. Specify a different type.", "55"], - [0, 0, 0, "Unexpected any. Specify a different type.", "56"], - [0, 0, 0, "Unexpected any. Specify a different type.", "57"], - [0, 0, 0, "Unexpected any. Specify a different type.", "58"], - [0, 0, 0, "Unexpected any. Specify a different type.", "59"], - [0, 0, 0, "Unexpected any. Specify a different type.", "60"], - [0, 0, 0, "Unexpected any. Specify a different type.", "61"], - [0, 0, 0, "Unexpected any. Specify a different type.", "62"] + [0, 0, 0, "Unexpected any. Specify a different type.", "54"] ], "public/app/plugins/datasource/graphite/gfunc.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], @@ -6041,11 +4839,7 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "7"], [0, 0, 0, "Unexpected any. Specify a different type.", "8"], [0, 0, 0, "Unexpected any. Specify a different type.", "9"], - [0, 0, 0, "Unexpected any. Specify a different type.", "10"], - [0, 0, 0, "Unexpected any. Specify a different type.", "11"], - [0, 0, 0, "Unexpected any. Specify a different type.", "12"], - [0, 0, 0, "Unexpected any. Specify a different type.", "13"], - [0, 0, 0, "Unexpected any. Specify a different type.", "14"] + [0, 0, 0, "Unexpected any. Specify a different type.", "10"] ], "public/app/plugins/datasource/graphite/graphite_query.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], @@ -6063,15 +4857,11 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "12"], [0, 0, 0, "Unexpected any. Specify a different type.", "13"], [0, 0, 0, "Unexpected any. Specify a different type.", "14"], - [0, 0, 0, "Unexpected any. Specify a different type.", "15"], - [0, 0, 0, "Unexpected any. Specify a different type.", "16"], - [0, 0, 0, "Unexpected any. Specify a different type.", "17"], - [0, 0, 0, "Unexpected any. Specify a different type.", "18"], - [0, 0, 0, "Do not use any type assertions.", "19"], - [0, 0, 0, "Unexpected any. Specify a different type.", "20"], - [0, 0, 0, "Unexpected any. Specify a different type.", "21"], - [0, 0, 0, "Unexpected any. Specify a different type.", "22"], - [0, 0, 0, "Unexpected any. Specify a different type.", "23"] + [0, 0, 0, "Do not use any type assertions.", "15"], + [0, 0, 0, "Unexpected any. Specify a different type.", "16"], + [0, 0, 0, "Unexpected any. Specify a different type.", "17"], + [0, 0, 0, "Unexpected any. Specify a different type.", "18"], + [0, 0, 0, "Unexpected any. Specify a different type.", "19"] ], "public/app/plugins/datasource/graphite/lexer.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], @@ -6085,11 +4875,6 @@ exports[`better eslint`] = { "public/app/plugins/datasource/graphite/migrations.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], - "public/app/plugins/datasource/graphite/parser.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"] - ], "public/app/plugins/datasource/graphite/specs/graphite_query.test.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], @@ -6106,17 +4891,14 @@ exports[`better eslint`] = { ], "public/app/plugins/datasource/graphite/state/store.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], - [0, 0, 0, "Do not use any type assertions.", "1"], - [0, 0, 0, "Do not use any type assertions.", "2"], - [0, 0, 0, "Do not use any type assertions.", "3"] + [0, 0, 0, "Do not use any type assertions.", "1"] ], "public/app/plugins/datasource/graphite/types.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"] ], "public/app/plugins/datasource/graphite/utils.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"] + [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], "public/app/plugins/datasource/influxdb/components/editor/config/ConfigEditor.tsx:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] @@ -6149,9 +4931,7 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "12"], [0, 0, 0, "Unexpected any. Specify a different type.", "13"], [0, 0, 0, "Unexpected any. Specify a different type.", "14"], - [0, 0, 0, "Unexpected any. Specify a different type.", "15"], - [0, 0, 0, "Unexpected any. Specify a different type.", "16"], - [0, 0, 0, "Do not use any type assertions.", "17"] + [0, 0, 0, "Do not use any type assertions.", "15"] ], "public/app/plugins/datasource/influxdb/influx_query_model.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], @@ -6166,14 +4946,7 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "9"], [0, 0, 0, "Unexpected any. Specify a different type.", "10"], [0, 0, 0, "Unexpected any. Specify a different type.", "11"], - [0, 0, 0, "Unexpected any. Specify a different type.", "12"], - [0, 0, 0, "Unexpected any. Specify a different type.", "13"], - [0, 0, 0, "Unexpected any. Specify a different type.", "14"], - [0, 0, 0, "Unexpected any. Specify a different type.", "15"], - [0, 0, 0, "Unexpected any. Specify a different type.", "16"], - [0, 0, 0, "Unexpected any. Specify a different type.", "17"], - [0, 0, 0, "Unexpected any. Specify a different type.", "18"], - [0, 0, 0, "Unexpected any. Specify a different type.", "19"] + [0, 0, 0, "Unexpected any. Specify a different type.", "12"] ], "public/app/plugins/datasource/influxdb/influx_series.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], @@ -6221,8 +4994,7 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "12"], [0, 0, 0, "Unexpected any. Specify a different type.", "13"], [0, 0, 0, "Unexpected any. Specify a different type.", "14"], - [0, 0, 0, "Unexpected any. Specify a different type.", "15"], - [0, 0, 0, "Unexpected any. Specify a different type.", "16"] + [0, 0, 0, "Unexpected any. Specify a different type.", "15"] ], "public/app/plugins/datasource/influxdb/response_parser.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], @@ -6232,8 +5004,11 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"] ], - "public/app/plugins/datasource/jaeger/components/QueryEditor.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] + "public/app/plugins/datasource/jaeger/_importedDependencies/model/transform-trace-data.tsx:5381": [ + [0, 0, 0, "Do not use any type assertions.", "0"] + ], + "public/app/plugins/datasource/jaeger/_importedDependencies/types/trace.ts:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], "public/app/plugins/datasource/jaeger/configuration/ConfigEditor.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"] @@ -6243,14 +5018,12 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "1"] ], "public/app/plugins/datasource/jaeger/datasource.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Do not use any type assertions.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"], - [0, 0, 0, "Unexpected any. Specify a different type.", "4"], - [0, 0, 0, "Unexpected any. Specify a different type.", "5"], - [0, 0, 0, "Unexpected any. Specify a different type.", "6"], - [0, 0, 0, "Unexpected any. Specify a different type.", "7"] + [0, 0, 0, "Do not use any type assertions.", "0"], + [0, 0, 0, "Unexpected any. Specify a different type.", "1"] + ], + "public/app/plugins/datasource/jaeger/helpers/createFetchResponse.ts:5381": [ + [0, 0, 0, "Do not use any type assertions.", "0"], + [0, 0, 0, "Do not use any type assertions.", "1"] ], "public/app/plugins/datasource/jaeger/testResponse.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], @@ -6259,13 +5032,9 @@ exports[`better eslint`] = { "public/app/plugins/datasource/jaeger/types.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], - "public/app/plugins/datasource/jaeger/util.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], "public/app/plugins/datasource/loki/LanguageProvider.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"] + [0, 0, 0, "Unexpected any. Specify a different type.", "1"] ], "public/app/plugins/datasource/loki/LiveStreams.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] @@ -6297,29 +5066,15 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "10"], [0, 0, 0, "Styles should be written using objects.", "11"], [0, 0, 0, "Styles should be written using objects.", "12"], - [0, 0, 0, "Styles should be written using objects.", "13"], - [0, 0, 0, "Do not use any type assertions.", "14"], - [0, 0, 0, "Do not use any type assertions.", "15"] - ], - "public/app/plugins/datasource/loki/components/LokiOptionFields.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"] - ], - "public/app/plugins/datasource/loki/components/LokiQueryEditor.tsx:5381": [ - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"] + [0, 0, 0, "Styles should be written using objects.", "13"] ], "public/app/plugins/datasource/loki/components/monaco-query-field/MonacoQueryField.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "2"] + [0, 0, 0, "Styles should be written using objects.", "1"] ], "public/app/plugins/datasource/loki/configuration/ConfigEditor.tsx:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], - "public/app/plugins/datasource/loki/configuration/DebugSection.tsx:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"] - ], "public/app/plugins/datasource/loki/configuration/DerivedField.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"], @@ -6342,8 +5097,7 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "2"], [0, 0, 0, "Unexpected any. Specify a different type.", "3"], [0, 0, 0, "Unexpected any. Specify a different type.", "4"], - [0, 0, 0, "Unexpected any. Specify a different type.", "5"], - [0, 0, 0, "Unexpected any. Specify a different type.", "6"] + [0, 0, 0, "Unexpected any. Specify a different type.", "5"] ], "public/app/plugins/datasource/loki/queryUtils.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] @@ -6375,13 +5129,11 @@ exports[`better eslint`] = { ], "public/app/plugins/datasource/loki/streaming.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Do not use any type assertions.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"] + [0, 0, 0, "Unexpected any. Specify a different type.", "1"] ], "public/app/plugins/datasource/opentsdb/components/OpenTsdbQueryEditor.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"] + [0, 0, 0, "Styles should be written using objects.", "1"] ], "public/app/plugins/datasource/opentsdb/datasource.d.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] @@ -6462,16 +5214,11 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"] ], - "public/app/plugins/datasource/prometheus/components/PromLink.tsx:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"] - ], "public/app/plugins/datasource/prometheus/components/PromQueryField.test.tsx:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], "public/app/plugins/datasource/prometheus/components/PromQueryField.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Do not use any type assertions.", "2"] + [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], "public/app/plugins/datasource/prometheus/components/PrometheusMetricsBrowser.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], @@ -6485,14 +5232,11 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "8"], [0, 0, 0, "Styles should be written using objects.", "9"], [0, 0, 0, "Styles should be written using objects.", "10"], - [0, 0, 0, "Styles should be written using objects.", "11"], - [0, 0, 0, "Do not use any type assertions.", "12"], - [0, 0, 0, "Do not use any type assertions.", "13"] + [0, 0, 0, "Styles should be written using objects.", "11"] ], "public/app/plugins/datasource/prometheus/components/monaco-query-field/MonacoQueryField.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "2"] + [0, 0, 0, "Styles should be written using objects.", "1"] ], "public/app/plugins/datasource/prometheus/configuration/AzureCredentialsConfig.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], @@ -6537,29 +5281,14 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "18"], [0, 0, 0, "Styles should be written using objects.", "19"] ], - "public/app/plugins/datasource/prometheus/configuration/ExemplarSetting.tsx:5381": [ - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"] - ], - "public/app/plugins/datasource/prometheus/configuration/ExemplarsSettings.tsx:5381": [ - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"] - ], - "public/app/plugins/datasource/prometheus/configuration/PromSettings.tsx:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"] - ], - "public/app/plugins/datasource/prometheus/datasource.test.ts:5381": [ + "public/app/plugins/datasource/prometheus/configuration/ConfigEditorPackage.tsx:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"], [0, 0, 0, "Unexpected any. Specify a different type.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"], - [0, 0, 0, "Unexpected any. Specify a different type.", "4"], - [0, 0, 0, "Unexpected any. Specify a different type.", "5"], - [0, 0, 0, "Unexpected any. Specify a different type.", "6"], - [0, 0, 0, "Unexpected any. Specify a different type.", "7"], - [0, 0, 0, "Unexpected any. Specify a different type.", "8"], - [0, 0, 0, "Unexpected any. Specify a different type.", "9"], - [0, 0, 0, "Unexpected any. Specify a different type.", "10"], - [0, 0, 0, "Unexpected any. Specify a different type.", "11"] + [0, 0, 0, "Unexpected any. Specify a different type.", "3"] + ], + "public/app/plugins/datasource/prometheus/configuration/ExemplarsSettings.tsx:5381": [ + [0, 0, 0, "Styles should be written using objects.", "0"] ], "public/app/plugins/datasource/prometheus/datasource.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], @@ -6573,54 +5302,26 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "8"], [0, 0, 0, "Unexpected any. Specify a different type.", "9"], [0, 0, 0, "Unexpected any. Specify a different type.", "10"], - [0, 0, 0, "Do not use any type assertions.", "11"], - [0, 0, 0, "Unexpected any. Specify a different type.", "12"], - [0, 0, 0, "Unexpected any. Specify a different type.", "13"], - [0, 0, 0, "Unexpected any. Specify a different type.", "14"], - [0, 0, 0, "Unexpected any. Specify a different type.", "15"], - [0, 0, 0, "Unexpected any. Specify a different type.", "16"], - [0, 0, 0, "Unexpected any. Specify a different type.", "17"], - [0, 0, 0, "Unexpected any. Specify a different type.", "18"], - [0, 0, 0, "Unexpected any. Specify a different type.", "19"], - [0, 0, 0, "Unexpected any. Specify a different type.", "20"], - [0, 0, 0, "Unexpected any. Specify a different type.", "21"], - [0, 0, 0, "Unexpected any. Specify a different type.", "22"], - [0, 0, 0, "Unexpected any. Specify a different type.", "23"], - [0, 0, 0, "Unexpected any. Specify a different type.", "24"], - [0, 0, 0, "Unexpected any. Specify a different type.", "25"], - [0, 0, 0, "Unexpected any. Specify a different type.", "26"], - [0, 0, 0, "Unexpected any. Specify a different type.", "27"], - [0, 0, 0, "Unexpected any. Specify a different type.", "28"] + [0, 0, 0, "Unexpected any. Specify a different type.", "11"], + [0, 0, 0, "Unexpected any. Specify a different type.", "12"] ], "public/app/plugins/datasource/prometheus/language_provider.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"], [0, 0, 0, "Unexpected any. Specify a different type.", "2"], [0, 0, 0, "Unexpected any. Specify a different type.", "3"], - [0, 0, 0, "Unexpected any. Specify a different type.", "4"], - [0, 0, 0, "Unexpected any. Specify a different type.", "5"], - [0, 0, 0, "Do not use any type assertions.", "6"] + [0, 0, 0, "Unexpected any. Specify a different type.", "4"] ], "public/app/plugins/datasource/prometheus/language_utils.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Do not use any type assertions.", "2"], - [0, 0, 0, "Do not use any type assertions.", "3"], - [0, 0, 0, "Unexpected any. Specify a different type.", "4"], - [0, 0, 0, "Do not use any type assertions.", "5"], - [0, 0, 0, "Unexpected any. Specify a different type.", "6"], - [0, 0, 0, "Do not use any type assertions.", "7"], - [0, 0, 0, "Do not use any type assertions.", "8"], - [0, 0, 0, "Do not use any type assertions.", "9"] - ], - "public/app/plugins/datasource/prometheus/metric_find_query.test.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] + [0, 0, 0, "Do not use any type assertions.", "2"] ], "public/app/plugins/datasource/prometheus/metric_find_query.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"], [0, 0, 0, "Unexpected any. Specify a different type.", "2"], - [0, 0, 0, "Do not use any type assertions.", "3"], + [0, 0, 0, "Unexpected any. Specify a different type.", "3"], [0, 0, 0, "Unexpected any. Specify a different type.", "4"] ], "public/app/plugins/datasource/prometheus/query_hints.ts:5381": [ @@ -6640,13 +5341,10 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], "public/app/plugins/datasource/prometheus/querybuilder/components/LabelFilterItem.tsx:5381": [ - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"], + [0, 0, 0, "Do not use any type assertions.", "0"], [0, 0, 0, "Do not use any type assertions.", "1"], - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "2"], - [0, 0, 0, "Do not use any type assertions.", "3"], - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "4"], - [0, 0, 0, "Do not use any type assertions.", "5"], - [0, 0, 0, "Do not use any type assertions.", "6"] + [0, 0, 0, "Do not use any type assertions.", "2"], + [0, 0, 0, "Do not use any type assertions.", "3"] ], "public/app/plugins/datasource/prometheus/querybuilder/components/LabelFilters.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"] @@ -6675,9 +5373,6 @@ exports[`better eslint`] = { "public/app/plugins/datasource/prometheus/querybuilder/components/PromQueryCodeEditor.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"] ], - "public/app/plugins/datasource/prometheus/querybuilder/components/PromQueryEditorSelector.tsx:5381": [ - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"] - ], "public/app/plugins/datasource/prometheus/querybuilder/components/metrics-modal/AdditionalSettings.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"], @@ -6719,19 +5414,19 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "17"], [0, 0, 0, "Styles should be written using objects.", "18"] ], + "public/app/plugins/datasource/prometheus/querybuilder/operationUtils.ts:5381": [ + [0, 0, 0, "Do not use any type assertions.", "0"] + ], "public/app/plugins/datasource/prometheus/querybuilder/shared/LabelFilterItem.tsx:5381": [ - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"], + [0, 0, 0, "Do not use any type assertions.", "0"], [0, 0, 0, "Do not use any type assertions.", "1"], [0, 0, 0, "Do not use any type assertions.", "2"], - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "3"], + [0, 0, 0, "Do not use any type assertions.", "3"], [0, 0, 0, "Do not use any type assertions.", "4"], [0, 0, 0, "Do not use any type assertions.", "5"], - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "6"], + [0, 0, 0, "Unexpected any. Specify a different type.", "6"], [0, 0, 0, "Do not use any type assertions.", "7"], - [0, 0, 0, "Do not use any type assertions.", "8"], - [0, 0, 0, "Unexpected any. Specify a different type.", "9"], - [0, 0, 0, "Do not use any type assertions.", "10"], - [0, 0, 0, "Do not use any type assertions.", "11"] + [0, 0, 0, "Do not use any type assertions.", "8"] ], "public/app/plugins/datasource/prometheus/querybuilder/shared/LabelFilters.tsx:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] @@ -6747,138 +5442,43 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"] ], - "public/app/plugins/datasource/prometheus/querybuilder/shared/operationUtils.ts:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"] - ], - "public/app/plugins/datasource/prometheus/querybuilder/shared/parsingUtils.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], "public/app/plugins/datasource/prometheus/querybuilder/shared/types.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"], [0, 0, 0, "Unexpected any. Specify a different type.", "2"] ], - "public/app/plugins/datasource/prometheus/result_transformer.test.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"], - [0, 0, 0, "Unexpected any. Specify a different type.", "4"], - [0, 0, 0, "Unexpected any. Specify a different type.", "5"], - [0, 0, 0, "Unexpected any. Specify a different type.", "6"], - [0, 0, 0, "Unexpected any. Specify a different type.", "7"], - [0, 0, 0, "Unexpected any. Specify a different type.", "8"], - [0, 0, 0, "Unexpected any. Specify a different type.", "9"], - [0, 0, 0, "Unexpected any. Specify a different type.", "10"], - [0, 0, 0, "Unexpected any. Specify a different type.", "11"], - [0, 0, 0, "Unexpected any. Specify a different type.", "12"], - [0, 0, 0, "Unexpected any. Specify a different type.", "13"], - [0, 0, 0, "Unexpected any. Specify a different type.", "14"], - [0, 0, 0, "Unexpected any. Specify a different type.", "15"], - [0, 0, 0, "Unexpected any. Specify a different type.", "16"], - [0, 0, 0, "Unexpected any. Specify a different type.", "17"], - [0, 0, 0, "Unexpected any. Specify a different type.", "18"], - [0, 0, 0, "Unexpected any. Specify a different type.", "19"], - [0, 0, 0, "Unexpected any. Specify a different type.", "20"], - [0, 0, 0, "Unexpected any. Specify a different type.", "21"], - [0, 0, 0, "Unexpected any. Specify a different type.", "22"], - [0, 0, 0, "Unexpected any. Specify a different type.", "23"], - [0, 0, 0, "Unexpected any. Specify a different type.", "24"], - [0, 0, 0, "Unexpected any. Specify a different type.", "25"], - [0, 0, 0, "Unexpected any. Specify a different type.", "26"], - [0, 0, 0, "Unexpected any. Specify a different type.", "27"], - [0, 0, 0, "Unexpected any. Specify a different type.", "28"], - [0, 0, 0, "Unexpected any. Specify a different type.", "29"], - [0, 0, 0, "Unexpected any. Specify a different type.", "30"], - [0, 0, 0, "Unexpected any. Specify a different type.", "31"] - ], "public/app/plugins/datasource/prometheus/types.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"] - ], - "public/app/plugins/datasource/tempo/LokiSearch.tsx:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"], - [0, 0, 0, "Do not use any type assertions.", "1"] - ], - "public/app/plugins/datasource/tempo/NativeSearch/NativeSearch.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"] - ], - "public/app/plugins/datasource/tempo/NativeSearch/TagsField/TagsField.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"] - ], - "public/app/plugins/datasource/tempo/SearchTraceQLEditor/DurationInput.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] - ], - "public/app/plugins/datasource/tempo/SearchTraceQLEditor/GroupByField.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] - ], - "public/app/plugins/datasource/tempo/SearchTraceQLEditor/SearchField.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] - ], - "public/app/plugins/datasource/tempo/SearchTraceQLEditor/TagsInput.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"] - ], - "public/app/plugins/datasource/tempo/SearchTraceQLEditor/TraceQLSearch.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"] + [0, 0, 0, "Unexpected any. Specify a different type.", "2"] ], "public/app/plugins/datasource/tempo/ServiceGraphSection.tsx:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"], - [0, 0, 0, "Do not use any type assertions.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"] - ], - "public/app/plugins/datasource/tempo/configuration/ConfigEditor.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] + [0, 0, 0, "Do not use any type assertions.", "0"] ], - "public/app/plugins/datasource/tempo/configuration/QuerySettings.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"] + "public/app/plugins/datasource/tempo/_importedDependencies/components/AdHocFilter/AdHocFilterRenderer.tsx:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], - "public/app/plugins/datasource/tempo/configuration/TraceQLSearchSettings.tsx:5381": [ + "public/app/plugins/datasource/tempo/_importedDependencies/datasources/prometheus/language_utils.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] ], - "public/app/plugins/datasource/tempo/datasource.test.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"], - [0, 0, 0, "Unexpected any. Specify a different type.", "4"], - [0, 0, 0, "Unexpected any. Specify a different type.", "5"], - [0, 0, 0, "Unexpected any. Specify a different type.", "6"], - [0, 0, 0, "Unexpected any. Specify a different type.", "7"], - [0, 0, 0, "Unexpected any. Specify a different type.", "8"], - [0, 0, 0, "Unexpected any. Specify a different type.", "9"], - [0, 0, 0, "Unexpected any. Specify a different type.", "10"], - [0, 0, 0, "Unexpected any. Specify a different type.", "11"], - [0, 0, 0, "Unexpected any. Specify a different type.", "12"], - [0, 0, 0, "Unexpected any. Specify a different type.", "13"], - [0, 0, 0, "Unexpected any. Specify a different type.", "14"] - ], - "public/app/plugins/datasource/tempo/datasource.ts:5381": [ + "public/app/plugins/datasource/tempo/_importedDependencies/datasources/prometheus/types.ts:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"], + [0, 0, 0, "Unexpected any. Specify a different type.", "1"], + [0, 0, 0, "Unexpected any. Specify a different type.", "2"] + ], + "public/app/plugins/datasource/tempo/_importedDependencies/test/helpers/createFetchResponse.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], + [0, 0, 0, "Do not use any type assertions.", "1"] + ], + "public/app/plugins/datasource/tempo/configuration/TraceQLSearchSettings.tsx:5381": [ + [0, 0, 0, "Do not use any type assertions.", "0"] + ], + "public/app/plugins/datasource/tempo/datasource.ts:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Do not use any type assertions.", "1"], [0, 0, 0, "Unexpected any. Specify a different type.", "2"], - [0, 0, 0, "Do not use any type assertions.", "3"], - [0, 0, 0, "Do not use any type assertions.", "4"], - [0, 0, 0, "Unexpected any. Specify a different type.", "5"], - [0, 0, 0, "Unexpected any. Specify a different type.", "6"], - [0, 0, 0, "Unexpected any. Specify a different type.", "7"], - [0, 0, 0, "Unexpected any. Specify a different type.", "8"], - [0, 0, 0, "Do not use any type assertions.", "9"], - [0, 0, 0, "Do not use any type assertions.", "10"], - [0, 0, 0, "Do not use any type assertions.", "11"], - [0, 0, 0, "Do not use any type assertions.", "12"], - [0, 0, 0, "Unexpected any. Specify a different type.", "13"], - [0, 0, 0, "Unexpected any. Specify a different type.", "14"], - [0, 0, 0, "Unexpected any. Specify a different type.", "15"], - [0, 0, 0, "Unexpected any. Specify a different type.", "16"] + [0, 0, 0, "Unexpected any. Specify a different type.", "3"], + [0, 0, 0, "Unexpected any. Specify a different type.", "4"] ], "public/app/plugins/datasource/tempo/language_provider.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] @@ -6893,31 +5493,16 @@ exports[`better eslint`] = { [0, 0, 0, "Do not use any type assertions.", "6"], [0, 0, 0, "Unexpected any. Specify a different type.", "7"] ], - "public/app/plugins/datasource/tempo/traceql/QueryEditor.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] - ], - "public/app/plugins/datasource/tempo/traceql/TraceQLEditor.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"] - ], - "public/app/plugins/datasource/tempo/traceql/autocomplete.test.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"] - ], "public/app/plugins/datasource/zipkin/ConfigEditor.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"] ], "public/app/plugins/datasource/zipkin/QueryField.tsx:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], - [0, 0, 0, "Do not use any type assertions.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"] + [0, 0, 0, "Unexpected any. Specify a different type.", "1"] ], "public/app/plugins/datasource/zipkin/datasource.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"], - [0, 0, 0, "Unexpected any. Specify a different type.", "4"] + [0, 0, 0, "Unexpected any. Specify a different type.", "1"] ], "public/app/plugins/datasource/zipkin/utils/testResponse.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], @@ -6926,39 +5511,10 @@ exports[`better eslint`] = { "public/app/plugins/datasource/zipkin/utils/transforms.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], - "public/app/plugins/panel/alertGroups/AlertGroup.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"], - [0, 0, 0, "Styles should be written using objects.", "4"], - [0, 0, 0, "Styles should be written using objects.", "5"], - [0, 0, 0, "Styles should be written using objects.", "6"] - ], "public/app/plugins/panel/alertlist/AlertInstances.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"] ], - "public/app/plugins/panel/alertlist/AlertList.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"], - [0, 0, 0, "Styles should be written using objects.", "4"], - [0, 0, 0, "Styles should be written using objects.", "5"], - [0, 0, 0, "Styles should be written using objects.", "6"], - [0, 0, 0, "Styles should be written using objects.", "7"], - [0, 0, 0, "Styles should be written using objects.", "8"], - [0, 0, 0, "Styles should be written using objects.", "9"], - [0, 0, 0, "Styles should be written using objects.", "10"], - [0, 0, 0, "Styles should be written using objects.", "11"], - [0, 0, 0, "Styles should be written using objects.", "12"] - ], - "public/app/plugins/panel/alertlist/AlertListMigrationHandler.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"] - ], "public/app/plugins/panel/alertlist/UnifiedAlertList.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"], @@ -6987,20 +5543,9 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "5"], [0, 0, 0, "Styles should be written using objects.", "6"] ], - "public/app/plugins/panel/annolist/AnnoListPanel.test.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"] - ], "public/app/plugins/panel/annolist/AnnoListPanel.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Do not use any type assertions.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"] - ], - "public/app/plugins/panel/annolist/module.tsx:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"] + [0, 0, 0, "Do not use any type assertions.", "0"], + [0, 0, 0, "Styles should be written using objects.", "1"] ], "public/app/plugins/panel/barchart/BarChartPanel.tsx:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], @@ -7019,77 +5564,24 @@ exports[`better eslint`] = { [0, 0, 0, "Do not use any type assertions.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"] ], - "public/app/plugins/panel/canvas/components/CanvasContextMenu.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] - ], - "public/app/plugins/panel/canvas/components/CanvasTooltip.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] - ], - "public/app/plugins/panel/canvas/components/SetBackground.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"] - ], - "public/app/plugins/panel/canvas/components/connections/ConnectionAnchors.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"] - ], - "public/app/plugins/panel/canvas/components/connections/ConnectionSVG.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"] - ], - "public/app/plugins/panel/canvas/editor/connectionEditor.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], "public/app/plugins/panel/canvas/editor/element/APIEditor.tsx:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] ], - "public/app/plugins/panel/canvas/editor/element/ConstraintSelectionBox.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"], - [0, 0, 0, "Styles should be written using objects.", "4"], - [0, 0, 0, "Styles should be written using objects.", "5"], - [0, 0, 0, "Styles should be written using objects.", "6"], - [0, 0, 0, "Styles should be written using objects.", "7"] - ], "public/app/plugins/panel/canvas/editor/element/PlacementEditor.tsx:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], - "public/app/plugins/panel/canvas/editor/element/QuickPositioning.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"] - ], "public/app/plugins/panel/canvas/editor/element/elementEditor.tsx:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"] ], - "public/app/plugins/panel/canvas/editor/inline/InlineEdit.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"], - [0, 0, 0, "Styles should be written using objects.", "4"], - [0, 0, 0, "Styles should be written using objects.", "5"], - [0, 0, 0, "Styles should be written using objects.", "6"] - ], "public/app/plugins/panel/canvas/editor/inline/InlineEditBody.tsx:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"], [0, 0, 0, "Do not use any type assertions.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"], - [0, 0, 0, "Styles should be written using objects.", "4"] + [0, 0, 0, "Unexpected any. Specify a different type.", "3"] ], "public/app/plugins/panel/canvas/editor/layer/TreeNavigationEditor.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"] - ], - "public/app/plugins/panel/canvas/editor/layer/TreeNodeTitle.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"] + [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], "public/app/plugins/panel/canvas/editor/layer/layerEditor.tsx:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], @@ -7100,9 +5592,6 @@ exports[`better eslint`] = { "public/app/plugins/panel/canvas/globalStyles.ts:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"] ], - "public/app/plugins/panel/dashlist/migrations.test.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], "public/app/plugins/panel/dashlist/styles.ts:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"], @@ -7123,8 +5612,7 @@ exports[`better eslint`] = { ], "public/app/plugins/panel/debug/EventBusLogger.tsx:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Do not use any type assertions.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"] + [0, 0, 0, "Unexpected any. Specify a different type.", "1"] ], "public/app/plugins/panel/gauge/GaugeMigrations.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] @@ -7174,28 +5662,11 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "1"] ], "public/app/plugins/panel/geomap/utils/layers.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Do not use any type assertions.", "1"] - ], - "public/app/plugins/panel/geomap/utils/selection.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], "public/app/plugins/panel/geomap/utils/tooltip.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] ], - "public/app/plugins/panel/gettingstarted/GettingStarted.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"], - [0, 0, 0, "Styles should be written using objects.", "4"], - [0, 0, 0, "Styles should be written using objects.", "5"], - [0, 0, 0, "Styles should be written using objects.", "6"], - [0, 0, 0, "Styles should be written using objects.", "7"], - [0, 0, 0, "Styles should be written using objects.", "8"], - [0, 0, 0, "Styles should be written using objects.", "9"], - [0, 0, 0, "Styles should be written using objects.", "10"] - ], "public/app/plugins/panel/gettingstarted/components/DocsCard.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"], @@ -7203,12 +5674,6 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "3"], [0, 0, 0, "Styles should be written using objects.", "4"] ], - "public/app/plugins/panel/gettingstarted/components/Step.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"] - ], "public/app/plugins/panel/gettingstarted/components/TutorialCard.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"], @@ -7218,23 +5683,15 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "5"] ], "public/app/plugins/panel/gettingstarted/components/sharedStyles.ts:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"] + [0, 0, 0, "Styles should be written using objects.", "0"] ], "public/app/plugins/panel/heatmap/HeatmapPanel.tsx:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"] + [0, 0, 0, "Unexpected any. Specify a different type.", "1"] ], "public/app/plugins/panel/heatmap/migrations.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], - "public/app/plugins/panel/heatmap/module.tsx:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Do not use any type assertions.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"] - ], "public/app/plugins/panel/heatmap/palettes.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"] @@ -7261,11 +5718,8 @@ exports[`better eslint`] = { [0, 0, 0, "Do not use any type assertions.", "15"], [0, 0, 0, "Do not use any type assertions.", "16"] ], - "public/app/plugins/panel/histogram/Histogram.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Do not use any type assertions.", "1"], - [0, 0, 0, "Do not use any type assertions.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"] + "public/app/plugins/panel/histogram/migrations.ts:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], "public/app/plugins/panel/live/LiveChannelEditor.tsx:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], @@ -7281,24 +5735,9 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "6"], [0, 0, 0, "Styles should be written using objects.", "7"] ], - "public/app/plugins/panel/live/types.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], "public/app/plugins/panel/logs/LogsPanel.tsx:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] ], - "public/app/plugins/panel/news/component/News.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"], - [0, 0, 0, "Styles should be written using objects.", "4"], - [0, 0, 0, "Styles should be written using objects.", "5"], - [0, 0, 0, "Styles should be written using objects.", "6"], - [0, 0, 0, "Styles should be written using objects.", "7"], - [0, 0, 0, "Styles should be written using objects.", "8"], - [0, 0, 0, "Styles should be written using objects.", "9"] - ], "public/app/plugins/panel/nodeGraph/Edge.tsx:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] ], @@ -7359,128 +5798,23 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"] ], - "public/app/plugins/panel/nodeGraph/utils.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"] - ], "public/app/plugins/panel/piechart/PieChart.tsx:5381": [ - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"], + [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"], [0, 0, 0, "Styles should be written using objects.", "2"], [0, 0, 0, "Styles should be written using objects.", "3"], - [0, 0, 0, "Styles should be written using objects.", "4"], - [0, 0, 0, "Styles should be written using objects.", "5"] - ], - "public/app/plugins/panel/piechart/migrations.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"] - ], - "public/app/plugins/panel/stat/StatMigrations.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"] - ], - "public/app/plugins/panel/state-timeline/migrations.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"] - ], - "public/app/plugins/panel/table-old/column_options.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"], - [0, 0, 0, "Unexpected any. Specify a different type.", "4"], - [0, 0, 0, "Unexpected any. Specify a different type.", "5"], - [0, 0, 0, "Unexpected any. Specify a different type.", "6"], - [0, 0, 0, "Unexpected any. Specify a different type.", "7"], - [0, 0, 0, "Unexpected any. Specify a different type.", "8"], - [0, 0, 0, "Unexpected any. Specify a different type.", "9"], - [0, 0, 0, "Unexpected any. Specify a different type.", "10"], - [0, 0, 0, "Unexpected any. Specify a different type.", "11"], - [0, 0, 0, "Unexpected any. Specify a different type.", "12"], - [0, 0, 0, "Unexpected any. Specify a different type.", "13"], - [0, 0, 0, "Unexpected any. Specify a different type.", "14"], - [0, 0, 0, "Unexpected any. Specify a different type.", "15"], - [0, 0, 0, "Unexpected any. Specify a different type.", "16"], - [0, 0, 0, "Unexpected any. Specify a different type.", "17"], - [0, 0, 0, "Unexpected any. Specify a different type.", "18"], - [0, 0, 0, "Unexpected any. Specify a different type.", "19"], - [0, 0, 0, "Unexpected any. Specify a different type.", "20"], - [0, 0, 0, "Unexpected any. Specify a different type.", "21"] - ], - "public/app/plugins/panel/table-old/editor.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"], - [0, 0, 0, "Unexpected any. Specify a different type.", "4"], - [0, 0, 0, "Unexpected any. Specify a different type.", "5"], - [0, 0, 0, "Unexpected any. Specify a different type.", "6"], - [0, 0, 0, "Unexpected any. Specify a different type.", "7"], - [0, 0, 0, "Unexpected any. Specify a different type.", "8"] - ], - "public/app/plugins/panel/table-old/module.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"], - [0, 0, 0, "Unexpected any. Specify a different type.", "4"], - [0, 0, 0, "Unexpected any. Specify a different type.", "5"], - [0, 0, 0, "Unexpected any. Specify a different type.", "6"], - [0, 0, 0, "Unexpected any. Specify a different type.", "7"], - [0, 0, 0, "Unexpected any. Specify a different type.", "8"], - [0, 0, 0, "Unexpected any. Specify a different type.", "9"], - [0, 0, 0, "Unexpected any. Specify a different type.", "10"], - [0, 0, 0, "Unexpected any. Specify a different type.", "11"], - [0, 0, 0, "Unexpected any. Specify a different type.", "12"], - [0, 0, 0, "Unexpected any. Specify a different type.", "13"], - [0, 0, 0, "Unexpected any. Specify a different type.", "14"], - [0, 0, 0, "Unexpected any. Specify a different type.", "15"], - [0, 0, 0, "Unexpected any. Specify a different type.", "16"], - [0, 0, 0, "Unexpected any. Specify a different type.", "17"], - [0, 0, 0, "Unexpected any. Specify a different type.", "18"] + [0, 0, 0, "Styles should be written using objects.", "4"] ], - "public/app/plugins/panel/table-old/renderer.ts:5381": [ + "public/app/plugins/panel/piechart/migrations.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"], - [0, 0, 0, "Unexpected any. Specify a different type.", "4"], - [0, 0, 0, "Unexpected any. Specify a different type.", "5"], - [0, 0, 0, "Do not use any type assertions.", "6"], - [0, 0, 0, "Unexpected any. Specify a different type.", "7"], - [0, 0, 0, "Unexpected any. Specify a different type.", "8"], - [0, 0, 0, "Unexpected any. Specify a different type.", "9"], - [0, 0, 0, "Unexpected any. Specify a different type.", "10"], - [0, 0, 0, "Unexpected any. Specify a different type.", "11"], - [0, 0, 0, "Unexpected any. Specify a different type.", "12"] + [0, 0, 0, "Unexpected any. Specify a different type.", "1"] ], - "public/app/plugins/panel/table-old/transformers.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"], - [0, 0, 0, "Unexpected any. Specify a different type.", "4"], - [0, 0, 0, "Unexpected any. Specify a different type.", "5"], - [0, 0, 0, "Unexpected any. Specify a different type.", "6"], - [0, 0, 0, "Unexpected any. Specify a different type.", "7"], - [0, 0, 0, "Unexpected any. Specify a different type.", "8"] + "public/app/plugins/panel/stat/StatMigrations.ts:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], - "public/app/plugins/panel/table-old/types.ts:5381": [ + "public/app/plugins/panel/state-timeline/migrations.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"], - [0, 0, 0, "Unexpected any. Specify a different type.", "4"], - [0, 0, 0, "Unexpected any. Specify a different type.", "5"], - [0, 0, 0, "Unexpected any. Specify a different type.", "6"], - [0, 0, 0, "Unexpected any. Specify a different type.", "7"], - [0, 0, 0, "Unexpected any. Specify a different type.", "8"], - [0, 0, 0, "Unexpected any. Specify a different type.", "9"], - [0, 0, 0, "Unexpected any. Specify a different type.", "10"], - [0, 0, 0, "Unexpected any. Specify a different type.", "11"], - [0, 0, 0, "Unexpected any. Specify a different type.", "12"] + [0, 0, 0, "Unexpected any. Specify a different type.", "1"] ], "public/app/plugins/panel/table/TablePanel.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], @@ -7514,31 +5848,18 @@ exports[`better eslint`] = { ], "public/app/plugins/panel/timeseries/migrations.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Do not use any type assertions.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"], - [0, 0, 0, "Do not use any type assertions.", "4"], - [0, 0, 0, "Unexpected any. Specify a different type.", "5"], - [0, 0, 0, "Do not use any type assertions.", "6"], - [0, 0, 0, "Unexpected any. Specify a different type.", "7"], - [0, 0, 0, "Do not use any type assertions.", "8"], - [0, 0, 0, "Unexpected any. Specify a different type.", "9"], - [0, 0, 0, "Unexpected any. Specify a different type.", "10"], - [0, 0, 0, "Unexpected any. Specify a different type.", "11"] + [0, 0, 0, "Do not use any type assertions.", "1"], + [0, 0, 0, "Unexpected any. Specify a different type.", "2"], + [0, 0, 0, "Do not use any type assertions.", "3"], + [0, 0, 0, "Unexpected any. Specify a different type.", "4"], + [0, 0, 0, "Do not use any type assertions.", "5"], + [0, 0, 0, "Unexpected any. Specify a different type.", "6"], + [0, 0, 0, "Do not use any type assertions.", "7"], + [0, 0, 0, "Unexpected any. Specify a different type.", "8"], + [0, 0, 0, "Unexpected any. Specify a different type.", "9"] ], - "public/app/plugins/panel/timeseries/plugins/ExemplarMarker.tsx:5381": [ - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"], - [0, 0, 0, "Styles should be written using objects.", "4"], - [0, 0, 0, "Styles should be written using objects.", "5"], - [0, 0, 0, "Styles should be written using objects.", "6"], - [0, 0, 0, "Styles should be written using objects.", "7"], - [0, 0, 0, "Styles should be written using objects.", "8"], - [0, 0, 0, "Styles should be written using objects.", "9"], - [0, 0, 0, "Styles should be written using objects.", "10"], - [0, 0, 0, "Styles should be written using objects.", "11"] + "public/app/plugins/panel/timeseries/plugins/AnnotationsPlugin2.tsx:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], "public/app/plugins/panel/timeseries/plugins/ThresholdDragHandle.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], @@ -7550,12 +5871,7 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "6"] ], "public/app/plugins/panel/timeseries/plugins/annotations/AnnotationEditor.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Do not use any type assertions.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"], - [0, 0, 0, "Styles should be written using objects.", "4"], - [0, 0, 0, "Styles should be written using objects.", "5"] + [0, 0, 0, "Do not use any type assertions.", "0"] ], "public/app/plugins/panel/timeseries/plugins/annotations/AnnotationEditorForm.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], @@ -7566,11 +5882,6 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "5"], [0, 0, 0, "Styles should be written using objects.", "6"] ], - "public/app/plugins/panel/timeseries/plugins/annotations/AnnotationMarker.tsx:5381": [ - [0, 0, 0, "Styles should be written using objects.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"] - ], "public/app/plugins/panel/timeseries/plugins/annotations/AnnotationTooltip.tsx:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"], @@ -7582,6 +5893,15 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "7"], [0, 0, 0, "Styles should be written using objects.", "8"] ], + "public/app/plugins/panel/timeseries/plugins/annotations2/AnnotationEditor2.tsx:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"] + ], + "public/app/plugins/panel/timeseries/plugins/annotations2/AnnotationMarker2.tsx:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"] + ], + "public/app/plugins/panel/timeseries/plugins/annotations2/AnnotationTooltip2.tsx:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"] + ], "public/app/plugins/panel/timeseries/plugins/styles.ts:5381": [ [0, 0, 0, "Styles should be written using objects.", "0"], [0, 0, 0, "Styles should be written using objects.", "1"] @@ -7603,8 +5923,18 @@ exports[`better eslint`] = { [0, 0, 0, "Styles should be written using objects.", "2"] ], "public/app/plugins/panel/xychart/ManualEditor.tsx:5381": [ + [0, 0, 0, "Do not use any type assertions.", "0"] + ], + "public/app/plugins/panel/xychart/TooltipView.tsx:5381": [ + [0, 0, 0, "Do not use any type assertions.", "0"] + ], + "public/app/plugins/panel/xychart/XYChartPanel.tsx:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], + [0, 0, 0, "Do not use any type assertions.", "1"] + ], + "public/app/plugins/panel/xychart/scatter.ts:5381": [ + [0, 0, 0, "Do not use any type assertions.", "0"], + [0, 0, 0, "Do not use any type assertions.", "1"], [0, 0, 0, "Do not use any type assertions.", "2"], [0, 0, 0, "Unexpected any. Specify a different type.", "3"], [0, 0, 0, "Do not use any type assertions.", "4"], @@ -7613,33 +5943,20 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "7"], [0, 0, 0, "Do not use any type assertions.", "8"], [0, 0, 0, "Unexpected any. Specify a different type.", "9"], - [0, 0, 0, "Do not use any type assertions.", "10"], - [0, 0, 0, "Unexpected any. Specify a different type.", "11"], - [0, 0, 0, "Styles should be written using objects.", "12"], - [0, 0, 0, "Styles should be written using objects.", "13"], - [0, 0, 0, "Styles should be written using objects.", "14"], - [0, 0, 0, "Styles should be written using objects.", "15"] - ], - "public/app/plugins/panel/xychart/TooltipView.tsx:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"], - [0, 0, 0, "Styles should be written using objects.", "2"], - [0, 0, 0, "Styles should be written using objects.", "3"], - [0, 0, 0, "Styles should be written using objects.", "4"] - ], - "public/app/plugins/panel/xychart/XYChartPanel2.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Styles should be written using objects.", "1"] + [0, 0, 0, "Do not use any type assertions.", "10"] ], - "public/app/plugins/panel/xychart/dims.ts:5381": [ + "public/app/plugins/panel/xychart/v2/SeriesEditor.tsx:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], [0, 0, 0, "Do not use any type assertions.", "1"], [0, 0, 0, "Do not use any type assertions.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"], - [0, 0, 0, "Do not use any type assertions.", "4"], - [0, 0, 0, "Unexpected any. Specify a different type.", "5"] + [0, 0, 0, "Do not use any type assertions.", "3"], + [0, 0, 0, "Do not use any type assertions.", "4"] ], - "public/app/plugins/panel/xychart/scatter.ts:5381": [ + "public/app/plugins/panel/xychart/v2/migrations.ts:5381": [ + [0, 0, 0, "Do not use any type assertions.", "0"], + [0, 0, 0, "Do not use any type assertions.", "1"] + ], + "public/app/plugins/panel/xychart/v2/scatter.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], [0, 0, 0, "Do not use any type assertions.", "1"], [0, 0, 0, "Do not use any type assertions.", "2"], @@ -7649,9 +5966,10 @@ exports[`better eslint`] = { [0, 0, 0, "Do not use any type assertions.", "6"], [0, 0, 0, "Unexpected any. Specify a different type.", "7"], [0, 0, 0, "Do not use any type assertions.", "8"], - [0, 0, 0, "Unexpected any. Specify a different type.", "9"], - [0, 0, 0, "Do not use any type assertions.", "10"], - [0, 0, 0, "Do not use any type assertions.", "11"] + [0, 0, 0, "Unexpected any. Specify a different type.", "9"] + ], + "public/app/plugins/panel/xychart/v2/utils.ts:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], "public/app/store/configureStore.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] @@ -7709,19 +6027,8 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Do not use any type assertions.", "1"] ], - "public/app/types/templates.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], "public/app/types/unified-alerting-dto.ts:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"], - [0, 0, 0, "Do not use any type assertions.", "1"] - ], - "public/test/core/redux/mocks.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], - "public/test/core/redux/reducerTester.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"] + [0, 0, 0, "Do not use any type assertions.", "0"] ], "public/test/core/redux/reduxTester.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], @@ -7739,15 +6046,11 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "4"], [0, 0, 0, "Unexpected any. Specify a different type.", "5"], [0, 0, 0, "Unexpected any. Specify a different type.", "6"], - [0, 0, 0, "Unexpected any. Specify a different type.", "7"], - [0, 0, 0, "Unexpected any. Specify a different type.", "8"] + [0, 0, 0, "Unexpected any. Specify a different type.", "7"] ], "public/test/global-jquery-shim.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], - "public/test/helpers/convertToStoreState.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], "public/test/helpers/getDashboardModel.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], @@ -7760,20 +6063,6 @@ exports[`better eslint`] = { "public/test/lib/common.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], - "public/test/matchers/index.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], - "public/test/matchers/toEmitValuesWith.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"] - ], - "public/test/matchers/utils.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], - "public/test/mocks/workers.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], "public/test/specs/helpers.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"], @@ -7785,12 +6074,7 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "7"], [0, 0, 0, "Unexpected any. Specify a different type.", "8"], [0, 0, 0, "Unexpected any. Specify a different type.", "9"], - [0, 0, 0, "Unexpected any. Specify a different type.", "10"], - [0, 0, 0, "Unexpected any. Specify a different type.", "11"], - [0, 0, 0, "Unexpected any. Specify a different type.", "12"], - [0, 0, 0, "Unexpected any. Specify a different type.", "13"], - [0, 0, 0, "Unexpected any. Specify a different type.", "14"], - [0, 0, 0, "Unexpected any. Specify a different type.", "15"] + [0, 0, 0, "Unexpected any. Specify a different type.", "10"] ] }` }; @@ -7859,3 +6143,1072 @@ exports[`no undocumented stories`] = { ] }` }; + +exports[`no gf-form usage`] = { + value: `{ + "e2e/scenes/utils/flows/addDataSource.ts:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "e2e/utils/flows/addDataSource.ts:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "packages/grafana-e2e/src/flows/addDataSource.ts:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "packages/grafana-prometheus/src/components/PromExploreExtraField.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "packages/grafana-prometheus/src/components/PromQueryField.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "packages/grafana-prometheus/src/configuration/AlertingSettingsOverhaul.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "packages/grafana-prometheus/src/configuration/ExemplarSetting.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "packages/grafana-prometheus/src/configuration/PromSettings.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "packages/grafana-prometheus/src/querybuilder/components/PromQueryCodeEditor.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "packages/grafana-ui/src/components/DataSourceSettings/AlertingSettings.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "packages/grafana-ui/src/components/DataSourceSettings/CustomHeadersSettings.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "packages/grafana-ui/src/components/DataSourceSettings/DataSourceHttpSettings.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "packages/grafana-ui/src/components/DataSourceSettings/HttpProxySettings.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "packages/grafana-ui/src/components/DataSourceSettings/SecureSocksProxySettings.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "packages/grafana-ui/src/components/DataSourceSettings/TLSAuthSettings.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "packages/grafana-ui/src/components/FormField/FormField.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "packages/grafana-ui/src/components/FormLabel/FormLabel.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "packages/grafana-ui/src/components/Forms/Legacy/Input/Input.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "packages/grafana-ui/src/components/Forms/Legacy/Select/NoOptionsMessage.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "packages/grafana-ui/src/components/Forms/Legacy/Select/Select.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "packages/grafana-ui/src/components/Forms/Legacy/Select/SelectOption.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "packages/grafana-ui/src/components/Forms/Legacy/Switch/Switch.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "packages/grafana-ui/src/components/SecretFormField/SecretFormField.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "packages/grafana-ui/src/components/Segment/Segment.story.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "packages/grafana-ui/src/components/Segment/SegmentAsync.story.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "packages/grafana-ui/src/components/Segment/SegmentInput.story.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "packages/grafana-ui/src/components/Segment/SegmentInput.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/angular/components/code_editor/code_editor.ts:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/angular/components/form_dropdown/form_dropdown.ts:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/angular/components/info_popover.ts:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/angular/components/switch.ts:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/angular/dropdown_typeahead.ts:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/angular/metric_segment.ts:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/angular/misc.ts:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/angular/panel/partials/query_editor_row.html:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/angular/partials/tls_auth_settings.html:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/core/components/AccessControl/PermissionList.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/core/components/PageHeader/PageHeader.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/features/admin/UserLdapSyncInfo.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/features/admin/partials/edit_org.html:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/features/admin/partials/styleguide.html:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/features/annotations/partials/event_editor.html:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/features/dashboard-scene/sharing/ShareLinkTab.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/features/dashboard/components/SubMenu/AnnotationPicker.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/features/dashboard/components/SubMenu/SubMenuItems.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/features/datasources/components/BasicSettings.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/features/datasources/components/ButtonRow.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/features/datasources/components/DataSourceLoadError.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/features/datasources/components/DataSourcePluginState.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/features/datasources/components/DataSourceTestingStatus.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/features/plugins/admin/components/AppConfigWrapper.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/features/query/components/QueryEditorRow.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/features/query/components/QueryGroupOptions.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/features/transformers/FilterByValueTransformer/ValueMatchers/RangeMatcherEditor.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/features/transformers/editors/OrganizeFieldsTransformerEditor.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/features/variables/adhoc/picker/AdHocFilter.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/features/variables/adhoc/picker/AdHocFilterKey.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/features/variables/adhoc/picker/AdHocFilterRenderer.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/features/variables/adhoc/picker/AdHocFilterValue.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/features/variables/adhoc/picker/ConditionSegment.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/features/variables/pickers/PickerRenderer.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/features/variables/pickers/shared/VariableInput.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/partials/confirm_modal.html:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/partials/reset_password.html:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/partials/signup_invited.html:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/plugins/datasource/alertmanager/ConfigEditor.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/plugins/datasource/cloudwatch/components/ConfigEditor/ConfigEditor.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/plugins/datasource/cloudwatch/components/ConfigEditor/XrayLinkConfig.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/plugins/datasource/cloudwatch/components/QueryEditor/LogsQueryEditor/LogsQueryEditor.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/plugins/datasource/cloudwatch/components/QueryEditor/LogsQueryEditor/LogsQueryField.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/plugins/datasource/cloudwatch/components/shared/LogGroups/LegacyLogGroupNamesSelection.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/plugins/datasource/cloudwatch/components/shared/LogGroups/LogGroupsField.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/plugins/datasource/elasticsearch/components/QueryEditor/SettingsEditorContainer.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/plugins/datasource/elasticsearch/configuration/DataLinks.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/plugins/datasource/grafana-pyroscope-datasource/ConfigEditor.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/plugins/datasource/graphite/components/AnnotationsEditor.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/plugins/datasource/graphite/configuration/MappingsConfiguration.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/plugins/datasource/influxdb/components/editor/annotation/AnnotationEditor.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/plugins/datasource/influxdb/components/editor/query/QueryEditor.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/plugins/datasource/influxdb/components/editor/query/flux/FluxQueryEditor.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/plugins/datasource/influxdb/components/editor/query/fsql/FSQLEditor.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/plugins/datasource/influxdb/components/editor/query/influxql/visual/PartListSection.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/plugins/datasource/influxdb/components/editor/query/influxql/visual/TagsSection.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/plugins/datasource/influxdb/components/editor/variable/VariableQueryEditor.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/plugins/datasource/loki/components/LokiQueryField.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/plugins/datasource/loki/configuration/DerivedField.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/plugins/datasource/loki/querybuilder/components/LokiQueryCodeEditor.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/plugins/datasource/opentsdb/components/AnnotationEditor.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/plugins/datasource/prometheus/components/PromExploreExtraField.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/plugins/datasource/prometheus/components/PromQueryField.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/plugins/datasource/prometheus/configuration/AlertingSettingsOverhaul.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/plugins/datasource/prometheus/configuration/AzureAuthSettings.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/plugins/datasource/prometheus/configuration/AzureCredentialsForm.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/plugins/datasource/prometheus/configuration/ExemplarSetting.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/plugins/datasource/prometheus/configuration/PromSettings.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/plugins/datasource/prometheus/querybuilder/components/PromQueryCodeEditor.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/plugins/datasource/tempo/_importedDependencies/components/AdHocFilter/AdHocFilter.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/plugins/datasource/tempo/_importedDependencies/components/AdHocFilter/AdHocFilterKey.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/plugins/datasource/tempo/_importedDependencies/components/AdHocFilter/AdHocFilterRenderer.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/plugins/datasource/tempo/_importedDependencies/components/AdHocFilter/AdHocFilterValue.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/plugins/datasource/tempo/_importedDependencies/components/AdHocFilter/ConditionSegment.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/plugins/datasource/zipkin/QueryField.tsx:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/plugins/panel/graph/axes_editor.html:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/plugins/panel/graph/tab_display.html:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/plugins/panel/graph/tab_legend.html:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/plugins/panel/graph/tab_series_overrides.html:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/plugins/panel/graph/thresholds_form.html:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/plugins/panel/graph/time_regions_form.html:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/plugins/panel/heatmap/partials/axes_editor.html:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/plugins/panel/heatmap/partials/display_editor.html:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/plugins/panel/table-old/column_options.html:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ], + "public/app/plugins/panel/table-old/editor.html:5381": [ + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"], + [0, 0, 0, "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", "5381"] + ] + }` +}; diff --git a/.betterer.results.json b/.betterer.results.json new file mode 100644 index 0000000000000..d5db475d6b14b --- /dev/null +++ b/.betterer.results.json @@ -0,0 +1,8166 @@ +{ + "better eslint": { + "/e2e/utils/support/types.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/packages/grafana-data/src/dataframe/ArrayDataFrame.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/packages/grafana-data/src/dataframe/CircularDataFrame.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-data/src/dataframe/DataFrameJSON.ts": [ + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/packages/grafana-data/src/dataframe/DataFrameView.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + }, + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/packages/grafana-data/src/dataframe/MutableDataFrame.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 13 + }, + { + "message": "Do not use any type assertions.", + "count": 3 + } + ], + "/packages/grafana-data/src/dataframe/StreamingDataFrame.ts": [ + { + "message": "Do not use any type assertions.", + "count": 6 + } + ], + "/packages/grafana-data/src/dataframe/dimensions.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-data/src/dataframe/processDataFrame.test.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-data/src/dataframe/processDataFrame.ts": [ + { + "message": "Do not use any type assertions.", + "count": 18 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 5 + } + ], + "/packages/grafana-data/src/datetime/datemath.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/packages/grafana-data/src/datetime/durationutil.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/packages/grafana-data/src/datetime/formatter.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/packages/grafana-data/src/datetime/moment_wrapper.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + }, + { + "message": "Do not use any type assertions.", + "count": 8 + } + ], + "/packages/grafana-data/src/datetime/parser.ts": [ + { + "message": "Do not use any type assertions.", + "count": 9 + } + ], + "/packages/grafana-data/src/datetime/rangeutil.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/packages/grafana-data/src/events/EventBus.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/packages/grafana-data/src/events/types.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 5 + } + ], + "/packages/grafana-data/src/field/displayProcessor.ts": [ + { + "message": "Do not use any type assertions.", + "count": 3 + } + ], + "/packages/grafana-data/src/field/overrides/processors.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 6 + }, + { + "message": "Do not use any type assertions.", + "count": 3 + } + ], + "/packages/grafana-data/src/field/standardFieldConfigEditorRegistry.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 7 + } + ], + "/packages/grafana-data/src/geo/layer.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/packages/grafana-data/src/panel/PanelPlugin.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 6 + }, + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/packages/grafana-data/src/panel/registryFactories.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/packages/grafana-data/src/themes/colorManipulator.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + } + ], + "/packages/grafana-data/src/themes/createColors.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/packages/grafana-data/src/transformations/matchers/valueMatchers/types.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/packages/grafana-data/src/transformations/standardTransformersRegistry.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-data/src/transformations/transformDataFrame.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-data/src/transformations/transformers/joinDataFrames.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-data/src/transformations/transformers/nulls/nullInsertThreshold.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + } + ], + "/packages/grafana-data/src/transformations/transformers/reduce.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/packages/grafana-data/src/transformations/transformers/utils.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-data/src/types/OptionsUIRegistryBuilder.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 7 + } + ], + "/packages/grafana-data/src/types/ScopedVars.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/packages/grafana-data/src/types/annotations.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 6 + } + ], + "/packages/grafana-data/src/types/app.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + }, + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/packages/grafana-data/src/types/config.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-data/src/types/dashboard.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + } + ], + "/packages/grafana-data/src/types/data.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 4 + } + ], + "/packages/grafana-data/src/types/dataFrame.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 4 + } + ], + "/packages/grafana-data/src/types/dataLink.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 7 + } + ], + "/packages/grafana-data/src/types/datasource.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 25 + } + ], + "/packages/grafana-data/src/types/explore.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-data/src/types/fieldOverrides.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 9 + } + ], + "/packages/grafana-data/src/types/flot.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-data/src/types/graph.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + } + ], + "/packages/grafana-data/src/types/legacyEvents.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/packages/grafana-data/src/types/live.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 7 + }, + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/packages/grafana-data/src/types/options.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/packages/grafana-data/src/types/panel.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 14 + } + ], + "/packages/grafana-data/src/types/plugin.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/packages/grafana-data/src/types/select.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/packages/grafana-data/src/types/templateVars.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/packages/grafana-data/src/types/trace.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-data/src/types/transformations.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 5 + } + ], + "/packages/grafana-data/src/types/variables.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-data/src/types/vector.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + } + ], + "/packages/grafana-data/src/utils/OptionsUIBuilders.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 27 + } + ], + "/packages/grafana-data/src/utils/Registry.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-data/src/utils/arrayUtils.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/packages/grafana-data/src/utils/csv.ts": [ + { + "message": "Do not use any type assertions.", + "count": 3 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/packages/grafana-data/src/utils/dataLinks.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-data/src/utils/datasource.ts": [ + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/packages/grafana-data/src/utils/flotPairs.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-data/src/utils/location.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/packages/grafana-data/src/utils/url.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 7 + }, + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/packages/grafana-data/src/utils/valueMappings.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + }, + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/packages/grafana-data/src/vector/AppendedVectors.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + }, + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/packages/grafana-data/src/vector/ArrayVector.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + } + ], + "/packages/grafana-data/src/vector/CircularVector.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-data/src/vector/ConstantVector.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-data/src/vector/FormattedVector.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-data/src/vector/FunctionalVector.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 10 + } + ], + "/packages/grafana-data/src/vector/SortedVector.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-data/test/__mocks__/pluginMocks.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-flamegraph/src/FlameGraph/FlameGraph.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 5 + } + ], + "/packages/grafana-flamegraph/src/FlameGraph/FlameGraphMetadata.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 4 + } + ], + "/packages/grafana-flamegraph/src/FlameGraph/FlameGraphTooltip.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 6 + } + ], + "/packages/grafana-flamegraph/src/FlameGraphHeader.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 13 + } + ], + "/packages/grafana-flamegraph/src/TopTable/FlameGraphTopTableContainer.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/packages/grafana-o11y-ds-frontend/src/utils.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/packages/grafana-prometheus/src/components/PromExemplarField.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/packages/grafana-prometheus/src/components/PromExploreExtraField.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/packages/grafana-prometheus/src/components/PromQueryField.test.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-prometheus/src/components/PromQueryField.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-prometheus/src/components/PrometheusMetricsBrowser.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 12 + } + ], + "/packages/grafana-prometheus/src/components/monaco-query-field/MonacoQueryField.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/packages/grafana-prometheus/src/configuration/ConfigEditor.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 16 + } + ], + "/packages/grafana-prometheus/src/configuration/ExemplarsSettings.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/packages/grafana-prometheus/src/datasource.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 13 + } + ], + "/packages/grafana-prometheus/src/gcopypaste/app/features/live/data/amendTimeSeries.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + }, + { + "message": "Do not use any type assertions.", + "count": 4 + } + ], + "/packages/grafana-prometheus/src/gcopypaste/public/test/matchers/index.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-prometheus/src/gcopypaste/public/test/matchers/toEmitValuesWith.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + } + ], + "/packages/grafana-prometheus/src/gcopypaste/public/test/matchers/utils.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-prometheus/src/gcopypaste/test/helpers/selectOptionInTest.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/packages/grafana-prometheus/src/language_provider.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 5 + } + ], + "/packages/grafana-prometheus/src/language_utils.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/packages/grafana-prometheus/src/metric_find_query.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 5 + } + ], + "/packages/grafana-prometheus/src/query_hints.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-prometheus/src/querybuilder/QueryPattern.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 4 + } + ], + "/packages/grafana-prometheus/src/querybuilder/QueryPatternsModal.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/packages/grafana-prometheus/src/querybuilder/binaryScalarOperations.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-prometheus/src/querybuilder/components/LabelFilterItem.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 4 + } + ], + "/packages/grafana-prometheus/src/querybuilder/components/LabelFilters.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/packages/grafana-prometheus/src/querybuilder/components/LabelParamEditor.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/packages/grafana-prometheus/src/querybuilder/components/MetricSelect.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 4 + }, + { + "message": "Styles should be written using objects.", + "count": 9 + } + ], + "/packages/grafana-prometheus/src/querybuilder/components/PromQueryBuilder.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/packages/grafana-prometheus/src/querybuilder/components/PromQueryCodeEditor.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/packages/grafana-prometheus/src/querybuilder/components/metrics-modal/AdditionalSettings.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/packages/grafana-prometheus/src/querybuilder/components/metrics-modal/ResultsTable.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 13 + } + ], + "/packages/grafana-prometheus/src/querybuilder/components/metrics-modal/styles.ts": [ + { + "message": "Styles should be written using objects.", + "count": 19 + } + ], + "/packages/grafana-prometheus/src/querybuilder/operationUtils.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/packages/grafana-prometheus/src/querybuilder/shared/OperationEditor.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-prometheus/src/querybuilder/shared/OperationParamEditor.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/packages/grafana-prometheus/src/querybuilder/shared/QueryBuilderHints.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/packages/grafana-prometheus/src/querybuilder/shared/types.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + } + ], + "/packages/grafana-prometheus/src/types.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + } + ], + "/packages/grafana-runtime/src/analytics/types.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-runtime/src/config.ts": [ + { + "message": "Do not use any type assertions.", + "count": 3 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-runtime/src/services/AngularLoader.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + } + ], + "/packages/grafana-runtime/src/services/EchoSrv.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 4 + } + ], + "/packages/grafana-runtime/src/services/LocationService.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 5 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/packages/grafana-runtime/src/services/backendSrv.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 13 + } + ], + "/packages/grafana-runtime/src/utils/DataSourceWithBackend.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-runtime/src/utils/queryResponse.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/packages/grafana-schema/src/veneer/common.types.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-schema/src/veneer/dashboard.types.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + }, + { + "message": "Do not use any type assertions.", + "count": 5 + } + ], + "/packages/grafana-sql/src/components/query-editor-raw/QueryToolbox.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 5 + } + ], + "/packages/grafana-sql/src/components/query-editor-raw/QueryValidator.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/packages/grafana-sql/src/components/query-editor-raw/RawEditor.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/packages/grafana-sql/src/components/visual-query-builder/AwesomeQueryBuilder.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-sql/src/components/visual-query-builder/SQLWhereRow.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/ColorPicker/ColorPicker.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/packages/grafana-ui/src/components/DataLinks/DataLinkInput.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/DataSourceSettings/CustomHeadersSettings.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/packages/grafana-ui/src/components/DataSourceSettings/types.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 8 + } + ], + "/packages/grafana-ui/src/components/Forms/Legacy/Input/Input.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + }, + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/packages/grafana-ui/src/components/Forms/Legacy/Select/Select.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/Forms/Legacy/Select/SelectOption.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/packages/grafana-ui/src/components/InfoBox/InfoBox.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/JSONFormatter/json_explorer/json_explorer.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/packages/grafana-ui/src/components/MatchersUI/FieldValueMatcher.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/MatchersUI/fieldMatchersUI.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/Modal/ModalsContext.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 4 + } + ], + "/packages/grafana-ui/src/components/PanelChrome/PanelContext.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/packages/grafana-ui/src/components/PanelChrome/index.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/Segment/SegmentSelect.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/Select/SelectBase.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 8 + }, + { + "message": "Do not use any type assertions.", + "count": 4 + } + ], + "/packages/grafana-ui/src/components/Select/SelectOptionGroup.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + } + ], + "/packages/grafana-ui/src/components/Select/ValueContainer.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/Select/resetSelectStyles.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 4 + } + ], + "/packages/grafana-ui/src/components/Select/types.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 6 + } + ], + "/packages/grafana-ui/src/components/SingleStatShared/SingleStatBaseOptions.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 15 + }, + { + "message": "Do not use any type assertions.", + "count": 5 + } + ], + "/packages/grafana-ui/src/components/StatsPicker/StatsPicker.story.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + } + ], + "/packages/grafana-ui/src/components/Table/Filter.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/Table/FilterPopup.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/Table/FooterRow.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/Table/HeaderRow.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/Table/Table.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/Table/TableCell.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 3 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/Table/TableCellInspectModal.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/Table/reducer.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/Table/types.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/packages/grafana-ui/src/components/Table/utils.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 6 + } + ], + "/packages/grafana-ui/src/components/Tags/Tag.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/ValuePicker/ValuePicker.tsx": [ + { + "message": "Use data-testid for E2E selectors instead of aria-label", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/VizLegend/types.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/packages/grafana-ui/src/components/VizRepeater/VizRepeater.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 4 + } + ], + "/packages/grafana-ui/src/components/VizTooltip/VizTooltip.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/packages/grafana-ui/src/components/uPlot/Plot.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/packages/grafana-ui/src/components/uPlot/PlotLegend.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/uPlot/config/UPlotAxisBuilder.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + }, + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/packages/grafana-ui/src/components/uPlot/config/UPlotConfigBuilder.ts": [ + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/packages/grafana-ui/src/components/uPlot/types.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/uPlot/utils.ts": [ + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/packages/grafana-ui/src/graveyard/Graph/GraphContextMenu.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-ui/src/graveyard/Graph/utils.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-ui/src/graveyard/GraphNG/GraphNG.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 6 + }, + { + "message": "Do not use any type assertions.", + "count": 6 + } + ], + "/packages/grafana-ui/src/graveyard/GraphNG/hooks.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/packages/grafana-ui/src/graveyard/GraphNG/nullInsertThreshold.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + } + ], + "/packages/grafana-ui/src/graveyard/GraphNG/nullToUndefThreshold.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/packages/grafana-ui/src/graveyard/TimeSeries/utils.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/packages/grafana-ui/src/options/builder/axis.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 2 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/packages/grafana-ui/src/options/builder/hideSeries.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/packages/grafana-ui/src/slate-plugins/braces.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/packages/grafana-ui/src/slate-plugins/slate-prism/index.ts": [ + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/packages/grafana-ui/src/slate-plugins/slate-prism/options.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/packages/grafana-ui/src/slate-plugins/suggestions.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 2 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-ui/src/themes/ThemeContext.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 3 + } + ], + "/packages/grafana-ui/src/themes/stylesFactory.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/packages/grafana-ui/src/types/forms.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-ui/src/types/jquery.d.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 9 + } + ], + "/packages/grafana-ui/src/types/mdx.d.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-ui/src/types/react-table-config.d.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/packages/grafana-ui/src/utils/debug.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/packages/grafana-ui/src/utils/dom.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + } + ], + "/packages/grafana-ui/src/utils/logger.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + } + ], + "/packages/grafana-ui/src/utils/storybook/withTheme.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/packages/grafana-ui/src/utils/useAsyncDependency.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/plugins-bundled/internal/input-datasource/src/InputDatasource.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/core/TableModel.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 7 + } + ], + "/public/app/core/components/AppChrome/TopBar/TopSearchBarCommandPaletteTrigger.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/core/components/DynamicImports/SafeDynamicImport.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/core/components/GraphNG/GraphNG.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 6 + }, + { + "message": "Do not use any type assertions.", + "count": 6 + } + ], + "/public/app/core/components/GraphNG/hooks.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/core/components/NestedFolderPicker/Trigger.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/core/components/OptionsUI/registry.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 11 + } + ], + "/public/app/core/components/PageHeader/PageHeader.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/core/components/PanelTypeFilter/PanelTypeFilter.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/core/components/QueryOperationRow/OperationRowHelp.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/core/components/QueryOperationRow/QueryOperationRow.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/core/components/QueryOperationRow/QueryOperationRowHeader.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 7 + } + ], + "/public/app/core/components/RolePicker/RolePickerInput.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 7 + } + ], + "/public/app/core/components/RolePicker/ValueContainer.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/core/components/TagFilter/TagFilter.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 5 + }, + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/core/components/TagFilter/TagOption.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + }, + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/core/components/TimeSeries/utils.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/core/components/Upgrade/ProBadge.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/core/components/Upgrade/UpgradeBox.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 18 + } + ], + "/public/app/core/components/connectWithCleanUp.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/core/navigation/types.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/core/reducers/root.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/core/services/ResponseQueue.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/core/services/backend_srv.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 9 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/core/services/context_srv.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/core/services/echo/backends/analytics/ApplicationInsightsBackend.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/core/services/echo/backends/analytics/RudderstackBackend.ts": [ + { + "message": "Do not use any type assertions.", + "count": 2 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/core/specs/backend_srv.test.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/core/time_series2.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 19 + } + ], + "/public/app/core/utils/ConfigProvider.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/core/utils/connectWithReduxStore.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 8 + }, + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/public/app/core/utils/deferred.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/core/utils/fetch.ts": [ + { + "message": "Do not use any type assertions.", + "count": 5 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/core/utils/flatten.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/core/utils/object.ts": [ + { + "message": "Do not use any type assertions.", + "count": 3 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/core/utils/richHistory.test.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/core/utils/ticks.ts": [ + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/public/app/features/admin/LicenseChrome.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/admin/OrgRolePicker.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/admin/UpgradePage.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 5 + } + ], + "/public/app/features/admin/UserListPublicDashboardPage/DashboardsListModalButton.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 8 + } + ], + "/public/app/features/admin/UserListPublicDashboardPage/DeleteUserModalButton.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/admin/UserOrgs.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 17 + } + ], + "/public/app/features/admin/UserPermissions.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/admin/UserProfile.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/alerting/AlertTab.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/alerting/AlertTabCtrl.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 33 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/alerting/EditNotificationChannelPage.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/alerting/StateHistory.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + }, + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/alerting/TestRuleResult.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + } + ], + "/public/app/features/alerting/components/NotificationChannelForm.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/alerting/components/NotificationChannelOptions.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/alerting/components/OptionElement.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/alerting/state/ThresholdMapper.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/alerting/state/actions.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + } + ], + "/public/app/features/alerting/state/alertDef.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/alerting/state/query_part.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 11 + } + ], + "/public/app/features/alerting/state/reducers.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/features/alerting/unified/AlertGroups.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/AlertWarning.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/AlertsFolderView.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 5 + } + ], + "/public/app/features/alerting/unified/GrafanaRuleQueryViewer.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 19 + } + ], + "/public/app/features/alerting/unified/NotificationPolicies.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/PanelAlertTabContent.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/alerting/unified/RedirectToRuleViewer.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 4 + } + ], + "/public/app/features/alerting/unified/RuleList.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 2 + }, + { + "message": "Styles should be written using objects.", + "count": 4 + } + ], + "/public/app/features/alerting/unified/components/AlertLabel.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/components/AlertLabels.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/components/AlertManagerPicker.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/components/AlertStateDot.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/components/AnnotationDetailsField.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 2 + }, + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/components/Authorize.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/public/app/features/alerting/unified/components/DetailsField.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/alerting/unified/components/DynamicTable.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 7 + } + ], + "/public/app/features/alerting/unified/components/DynamicTableWithGuidelines.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 6 + } + ], + "/public/app/features/alerting/unified/components/EmptyArea.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/components/EmptyAreaWithCTA.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/alerting/unified/components/Expression.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/components/GrafanaAlertmanagerDeliveryWarning.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/components/HoverCard.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 5 + } + ], + "/public/app/features/alerting/unified/components/Label.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/alerting/unified/components/MetaText.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/components/Spacer.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/components/StateColoredText.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 4 + } + ], + "/public/app/features/alerting/unified/components/StateTag.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 9 + } + ], + "/public/app/features/alerting/unified/components/Tokenize.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 4 + } + ], + "/public/app/features/alerting/unified/components/Well.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/components/admin/AlertmanagerConfig.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/components/admin/AlertmanagerConfigSelector.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/components/admin/ExternalAlertmanagerDataSources.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 5 + } + ], + "/public/app/features/alerting/unified/components/admin/ExternalAlertmanagers.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 4 + } + ], + "/public/app/features/alerting/unified/components/alert-groups/AlertDetails.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/alerting/unified/components/alert-groups/AlertGroupAlertsTable.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/alerting/unified/components/alert-groups/AlertGroupFilter.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/alerting/unified/components/alert-groups/AlertGroupHeader.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/public/app/features/alerting/unified/components/alert-groups/GroupBy.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/components/alert-groups/MatcherFilter.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/components/contact-points/ContactPoints.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/components/export/FileExportPreview.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/alerting/unified/components/expressions/Expression.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 25 + } + ], + "/public/app/features/alerting/unified/components/expressions/ExpressionStatusIndicator.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/components/mute-timings/MuteTimingForm.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/alerting/unified/components/mute-timings/MuteTimingTimeInterval.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 4 + } + ], + "/public/app/features/alerting/unified/components/mute-timings/MuteTimingTimeRange.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 5 + } + ], + "/public/app/features/alerting/unified/components/mute-timings/MuteTimingsTable.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/alerting/unified/components/notification-policies/EditNotificationPolicyForm.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 4 + } + ], + "/public/app/features/alerting/unified/components/notification-policies/Matchers.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/alerting/unified/components/notification-policies/Policy.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/components/notification-policies/PromDurationDocs.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 4 + } + ], + "/public/app/features/alerting/unified/components/notification-policies/formStyles.ts": [ + { + "message": "Styles should be written using objects.", + "count": 6 + } + ], + "/public/app/features/alerting/unified/components/receivers/AlertInstanceModalSelector.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 18 + } + ], + "/public/app/features/alerting/unified/components/receivers/PayloadEditor.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 9 + } + ], + "/public/app/features/alerting/unified/components/receivers/ReceiversSection.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/alerting/unified/components/receivers/TemplateDataDocs.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/alerting/unified/components/receivers/TemplateForm.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 13 + } + ], + "/public/app/features/alerting/unified/components/receivers/form/ChannelOptions.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/components/receivers/form/ChannelSubForm.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 5 + } + ], + "/public/app/features/alerting/unified/components/receivers/form/CollapsibleSection.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 5 + } + ], + "/public/app/features/alerting/unified/components/receivers/form/GenerateAlertDataModal.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 6 + } + ], + "/public/app/features/alerting/unified/components/receivers/form/ReceiverForm.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 2 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + }, + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/alerting/unified/components/receivers/form/TestContactPointModal.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/alerting/unified/components/receivers/form/fields/KeyValueMapInput.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/alerting/unified/components/receivers/form/fields/OptionField.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 5 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/alerting/unified/components/receivers/form/fields/StringArrayInput.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/alerting/unified/components/receivers/form/fields/SubformArrayField.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/features/alerting/unified/components/receivers/form/fields/SubformField.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/features/alerting/unified/components/receivers/form/fields/styles.ts": [ + { + "message": "Styles should be written using objects.", + "count": 5 + } + ], + "/public/app/features/alerting/unified/components/rule-editor/AnnotationKeyInput.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/components/rule-editor/AnnotationsStep.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 11 + } + ], + "/public/app/features/alerting/unified/components/rule-editor/CloudAlertPreview.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/alerting/unified/components/rule-editor/CloudEvaluationBehavior.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/alerting/unified/components/rule-editor/CustomAnnotationHeaderField.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/alerting/unified/components/rule-editor/DashboardAnnotationField.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 4 + } + ], + "/public/app/features/alerting/unified/components/rule-editor/DashboardPicker.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 15 + } + ], + "/public/app/features/alerting/unified/components/rule-editor/ExpressionEditor.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/components/rule-editor/ExpressionsEditor.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/components/rule-editor/FolderAndGroup.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 4 + } + ], + "/public/app/features/alerting/unified/components/rule-editor/GrafanaEvaluationBehavior.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 11 + } + ], + "/public/app/features/alerting/unified/components/rule-editor/GroupAndNamespaceFields.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/alerting/unified/components/rule-editor/NeedHelpInfo.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/alerting/unified/components/rule-editor/PreviewRule.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + }, + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/components/rule-editor/PreviewRuleResult.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/alerting/unified/components/rule-editor/QueryEditor.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/components/rule-editor/QueryOptions.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/alerting/unified/components/rule-editor/QueryWrapper.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/alerting/unified/components/rule-editor/RecordingRuleEditor.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/components/rule-editor/RuleEditorSection.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/alerting/unified/components/rule-editor/RuleFolderPicker.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/alerting/unified/components/rule-editor/RuleInspector.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/alerting/unified/components/rule-editor/VizWrapper.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/alerting/unified/components/rule-editor/notificaton-preview/NotificationPolicyMatchers.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/alerting/unified/components/rule-editor/notificaton-preview/NotificationPreview.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 7 + } + ], + "/public/app/features/alerting/unified/components/rule-editor/notificaton-preview/NotificationPreviewByAlertManager.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 5 + } + ], + "/public/app/features/alerting/unified/components/rule-editor/notificaton-preview/NotificationRoute.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 9 + } + ], + "/public/app/features/alerting/unified/components/rule-editor/notificaton-preview/NotificationRouteDetailsModal.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 11 + } + ], + "/public/app/features/alerting/unified/components/rule-editor/query-and-alert-condition/CloudDataSourceSelector.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/alerting/unified/components/rule-editor/query-and-alert-condition/QueryAndExpressionsStep.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 4 + } + ], + "/public/app/features/alerting/unified/components/rule-editor/rule-types/RuleType.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/alerting/unified/components/rule-editor/rule-types/RuleTypePicker.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/components/rule-viewer/RuleViewer.v1.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 13 + } + ], + "/public/app/features/alerting/unified/components/rule-viewer/RuleViewerLayout.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/alerting/unified/components/rule-viewer/RuleViewerVisualization.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 5 + } + ], + "/public/app/features/alerting/unified/components/rules/ActionButton.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/components/rules/AlertInstanceStateFilter.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/components/rules/CloudRules.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 4 + } + ], + "/public/app/features/alerting/unified/components/rules/EditRuleGroupModal.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 5 + } + ], + "/public/app/features/alerting/unified/components/rules/GrafanaRules.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 4 + } + ], + "/public/app/features/alerting/unified/components/rules/NoRulesCTA.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/components/rules/ReorderRuleGroupModal.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 7 + } + ], + "/public/app/features/alerting/unified/components/rules/RuleActionsButtons.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/components/rules/RuleConfigStatus.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/alerting/unified/components/rules/RuleDetails.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/alerting/unified/components/rules/RuleDetailsActionButtons.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/components/rules/RuleDetailsAnnotations.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/components/rules/RuleDetailsDataSources.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/components/rules/RuleDetailsExpression.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/components/rules/RuleDetailsMatchingInstances.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 5 + } + ], + "/public/app/features/alerting/unified/components/rules/RuleHealth.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/components/rules/RuleListErrors.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/alerting/unified/components/rules/RuleListStateSection.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/alerting/unified/components/rules/RuleState.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/components/rules/RulesGroup.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 12 + } + ], + "/public/app/features/alerting/unified/components/rules/RulesTable.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 4 + } + ], + "/public/app/features/alerting/unified/components/rules/state-history/LogRecordViewer.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 5 + } + ], + "/public/app/features/alerting/unified/components/rules/state-history/LokiStateHistory.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 6 + } + ], + "/public/app/features/alerting/unified/components/rules/state-history/StateHistory.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/alerting/unified/components/silences/Matchers.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/components/silences/MatchersField.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 5 + } + ], + "/public/app/features/alerting/unified/components/silences/SilenceDetails.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/alerting/unified/components/silences/SilencePeriod.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/components/silences/SilencedAlertsTable.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/alerting/unified/components/silences/SilencedInstancesPreview.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 5 + } + ], + "/public/app/features/alerting/unified/components/silences/SilencesEditor.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Styles should be written using objects.", + "count": 5 + } + ], + "/public/app/features/alerting/unified/components/silences/SilencesFilter.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Styles should be written using objects.", + "count": 4 + } + ], + "/public/app/features/alerting/unified/components/silences/SilencesTable.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 5 + } + ], + "/public/app/features/alerting/unified/home/GettingStarted.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 15 + } + ], + "/public/app/features/alerting/unified/hooks/useAlertmanagerConfig.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/hooks/useControlledFieldArray.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/hooks/useStateHistoryModal.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/alerting/unified/mocks.ts": [ + { + "message": "Do not use any type assertions.", + "count": 5 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 4 + } + ], + "/public/app/features/alerting/unified/state/actions.ts": [ + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/public/app/features/alerting/unified/styles/notifications.ts": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/alerting/unified/styles/pagination.ts": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/styles/table.ts": [ + { + "message": "Styles should be written using objects.", + "count": 5 + } + ], + "/public/app/features/alerting/unified/types/receiver-form.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/features/alerting/unified/utils/misc.test.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + } + ], + "/public/app/features/alerting/unified/utils/misc.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/utils/receiver-form.ts": [ + { + "message": "Do not use any type assertions.", + "count": 3 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/utils/redux.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + }, + { + "message": "Do not use any type assertions.", + "count": 7 + } + ], + "/public/app/features/alerting/unified/utils/rulerClient.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/alerting/unified/utils/rules.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + }, + { + "message": "Do not use any type assertions.", + "count": 3 + } + ], + "/public/app/features/annotations/components/StandardAnnotationQueryEditor.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/annotations/events_processing.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/annotations/standardAnnotationSupport.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/api-keys/ApiKeysTable.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/api-keys/MigrateToServiceAccountsCard.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/auth-config/utils/data.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/canvas/element.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 5 + } + ], + "/public/app/features/canvas/elements/ellipse.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/canvas/runtime/element.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 5 + }, + { + "message": "Do not use any type assertions.", + "count": 4 + } + ], + "/public/app/features/canvas/runtime/frame.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/canvas/runtime/root.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/canvas/runtime/scene.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 2 + }, + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/connections/components/ConnectionsRedirectNotice/ConnectionsRedirectNotice.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/connections/tabs/ConnectData/CategoryHeader/CategoryHeader.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/connections/tabs/ConnectData/NoAccessModal/NoAccessModal.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 9 + } + ], + "/public/app/features/connections/tabs/ConnectData/NoResults/NoResults.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/correlations/CorrelationsPage.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 4 + } + ], + "/public/app/features/correlations/Forms/AddCorrelationForm.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/correlations/Forms/ConfigureCorrelationBasicInfoForm.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/correlations/Forms/ConfigureCorrelationSourceForm.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/dashboard-scene/inspect/HelpWizard/utils.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/dashboard-scene/inspect/InspectJsonTab.tsx": [ + { + "message": "Use data-testid for E2E selectors instead of aria-label", + "count": 1 + } + ], + "/public/app/features/dashboard-scene/pages/DashboardScenePage.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 2 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/dashboard-scene/panel-edit/PanelDataPane/PanelDataPane.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/dashboard-scene/saving/SaveDashboardForm.tsx": [ + { + "message": "Use data-testid for E2E selectors instead of aria-label", + "count": 2 + } + ], + "/public/app/features/dashboard-scene/saving/getSaveDashboardChange.ts": [ + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/public/app/features/dashboard-scene/saving/shared.tsx": [ + { + "message": "Use data-testid for E2E selectors instead of aria-label", + "count": 1 + } + ], + "/public/app/features/dashboard-scene/scene/PanelMenuBehavior.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/dashboard-scene/serialization/transformSaveModelToScene.test.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 4 + } + ], + "/public/app/features/dashboard-scene/serialization/transformSceneToSaveModel.test.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 10 + } + ], + "/public/app/features/dashboard-scene/serialization/transformSceneToSaveModel.ts": [ + { + "message": "Do not use any type assertions.", + "count": 7 + } + ], + "/public/app/features/dashboard-scene/settings/variables/components/VariableSelectField.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/dashboard-scene/settings/variables/utils.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/dashboard-scene/utils/DashboardModelCompatibilityWrapper.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/dashboard-scene/utils/PanelModelCompatibilityWrapper.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/dashboard-scene/utils/test-utils.ts": [ + { + "message": "Do not use any type assertions.", + "count": 3 + } + ], + "/public/app/features/dashboard/components/AddWidgetModal/AddWidgetModal.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/dashboard/components/AnnotationSettings/AnnotationSettingsEdit.tsx": [ + { + "message": "Use data-testid for E2E selectors instead of aria-label", + "count": 4 + }, + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/dashboard/components/AnnotationSettings/AnnotationSettingsList.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/dashboard/components/DashExportModal/DashboardExporter.test.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 6 + } + ], + "/public/app/features/dashboard/components/DashExportModal/DashboardExporter.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 7 + }, + { + "message": "Do not use any type assertions.", + "count": 3 + } + ], + "/public/app/features/dashboard/components/DashNav/DashNavButton.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/dashboard/components/DashboardLoading/DashboardFailed.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/dashboard/components/DashboardLoading/DashboardLoading.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/dashboard/components/DashboardPrompt/DashboardPrompt.test.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/dashboard/components/DashboardPrompt/DashboardPrompt.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 7 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/features/dashboard/components/DashboardRow/DashboardRow.test.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/dashboard/components/DashboardSettings/ListNewButton.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/dashboard/components/DeleteDashboard/DeleteDashboardModal.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/dashboard/components/HelpWizard/HelpWizard.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/dashboard/components/Inspector/PanelInspector.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/dashboard/components/PanelEditor/DynamicConfigValueEditor.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/dashboard/components/PanelEditor/OptionsPane.tsx": [ + { + "message": "Use data-testid for E2E selectors instead of aria-label", + "count": 1 + }, + { + "message": "Styles should be written using objects.", + "count": 4 + } + ], + "/public/app/features/dashboard/components/PanelEditor/OptionsPaneCategory.tsx": [ + { + "message": "Use data-testid for E2E selectors instead of aria-label", + "count": 2 + } + ], + "/public/app/features/dashboard/components/PanelEditor/OptionsPaneItemDescriptor.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + }, + { + "message": "Use data-testid for E2E selectors instead of aria-label", + "count": 1 + }, + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/dashboard/components/PanelEditor/OptionsPaneOptions.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 10 + } + ], + "/public/app/features/dashboard/components/PanelEditor/OverrideCategoryTitle.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + }, + { + "message": "Styles should be written using objects.", + "count": 5 + } + ], + "/public/app/features/dashboard/components/PanelEditor/PanelEditor.tsx": [ + { + "message": "Use data-testid for E2E selectors instead of aria-label", + "count": 3 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Styles should be written using objects.", + "count": 10 + } + ], + "/public/app/features/dashboard/components/PanelEditor/PanelEditorTabs.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/dashboard/components/PanelEditor/VisualizationButton.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/dashboard/components/PanelEditor/VisualizationSelectPane.tsx": [ + { + "message": "Use data-testid for E2E selectors instead of aria-label", + "count": 1 + }, + { + "message": "Styles should be written using objects.", + "count": 10 + } + ], + "/public/app/features/dashboard/components/PanelEditor/getFieldOverrideElements.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/dashboard/components/PanelEditor/getVisualizationOptions.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + } + ], + "/public/app/features/dashboard/components/PanelEditor/utils.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 4 + }, + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/public/app/features/dashboard/components/PublicDashboardNotAvailable/PublicDashboardNotAvailable.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 4 + } + ], + "/public/app/features/dashboard/components/RowOptions/RowOptionsModal.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/dashboard/components/SaveDashboard/SaveDashboardButton.tsx": [ + { + "message": "Use data-testid for E2E selectors instead of aria-label", + "count": 2 + } + ], + "/public/app/features/dashboard/components/SaveDashboard/SaveDashboardErrorProxy.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/dashboard/components/SaveDashboard/UnsavedChangesModal.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/dashboard/components/SaveDashboard/forms/SaveDashboardAsForm.test.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/dashboard/components/SaveDashboard/forms/SaveDashboardForm.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + }, + { + "message": "Use data-testid for E2E selectors instead of aria-label", + "count": 3 + }, + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/dashboard/components/SaveDashboard/forms/SaveProvisionedDashboardForm.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/dashboard/components/SaveDashboard/types.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/dashboard/components/SaveDashboard/useDashboardSave.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/dashboard/components/ShareModal/ShareExport.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/dashboard/components/ShareModal/SharePublicDashboard/ConfigPublicDashboard/ConfigPublicDashboard.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/dashboard/components/ShareModal/SharePublicDashboard/ConfigPublicDashboard/EmailSharingConfiguration.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 6 + } + ], + "/public/app/features/dashboard/components/ShareModal/SharePublicDashboard/ConfigPublicDashboard/SettingsSummary.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/dashboard/components/ShareModal/SharePublicDashboard/CreatePublicDashboard/AcknowledgeCheckboxes.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/dashboard/components/ShareModal/SharePublicDashboard/CreatePublicDashboard/CreatePublicDashboard.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 6 + } + ], + "/public/app/features/dashboard/components/ShareModal/SharePublicDashboard/ModalAlerts/UnsupportedDataSourcesAlert.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/dashboard/components/SubMenu/AnnotationPicker.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/dashboard/components/SubMenu/DashboardLinksDashboard.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/dashboard/components/SubMenu/SubMenu.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/dashboard/components/TransformationsEditor/TransformationEditor.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + }, + { + "message": "Styles should be written using objects.", + "count": 10 + } + ], + "/public/app/features/dashboard/components/TransformationsEditor/TransformationsEditor.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/public/app/features/dashboard/components/VersionHistory/useDashboardRestore.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/dashboard/containers/DashboardPage.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 2 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + }, + { + "message": "Use data-testid for E2E selectors instead of aria-label", + "count": 1 + } + ], + "/public/app/features/dashboard/containers/DashboardPageProxy.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/dashboard/dashgrid/PanelStateWrapper.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/dashboard/dashgrid/SeriesVisibilityConfigFactory.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/dashboard/services/DashboardLoaderSrv.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + } + ], + "/public/app/features/dashboard/state/DashboardMigrator.test.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 12 + } + ], + "/public/app/features/dashboard/state/DashboardMigrator.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 27 + }, + { + "message": "Do not use any type assertions.", + "count": 4 + } + ], + "/public/app/features/dashboard/state/DashboardModel.repeat.test.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 4 + } + ], + "/public/app/features/dashboard/state/DashboardModel.test.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/dashboard/state/DashboardModel.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 23 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/dashboard/state/PanelModel.test.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/dashboard/state/PanelModel.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 20 + }, + { + "message": "Do not use any type assertions.", + "count": 5 + } + ], + "/public/app/features/dashboard/state/TimeModel.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/features/dashboard/state/actions.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/dashboard/state/initDashboard.test.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/dashboard/utils/getPanelMenu.test.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/dashboard/utils/getPanelMenu.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/dashboard/utils/panelMerge.ts": [ + { + "message": "Do not use any type assertions.", + "count": 2 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/features/datasources/components/BasicSettings.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/datasources/components/DataSourceTestingStatus.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/datasources/components/DataSourceTypeCard.tsx": [ + { + "message": "Use data-testid for E2E selectors instead of aria-label", + "count": 1 + } + ], + "/public/app/features/datasources/components/DataSourceTypeCardList.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/datasources/components/EditDataSource.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/datasources/components/picker/DataSourceCard.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 9 + } + ], + "/public/app/features/datasources/components/picker/DataSourceList.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 4 + } + ], + "/public/app/features/datasources/components/picker/DataSourceLogo.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/datasources/components/picker/DataSourceModal.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 10 + } + ], + "/public/app/features/datasources/state/actions.test.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/features/datasources/state/actions.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/datasources/state/navModel.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/datasources/state/reducers.ts": [ + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/public/app/features/datasources/state/selectors.ts": [ + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/public/app/features/dimensions/editors/ColorDimensionEditor.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/dimensions/editors/FileUploader.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 8 + } + ], + "/public/app/features/dimensions/editors/FolderPickerTab.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/dimensions/editors/ResourceCards.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 5 + } + ], + "/public/app/features/dimensions/editors/ResourceDimensionEditor.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/dimensions/editors/ResourcePicker.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/dimensions/editors/ResourcePickerPopover.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 5 + } + ], + "/public/app/features/dimensions/editors/ScalarDimensionEditor.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/dimensions/editors/ScaleDimensionEditor.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/dimensions/editors/TextDimensionEditor.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/public/app/features/dimensions/editors/ThresholdsEditor/ThresholdsEditor.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Styles should be written using objects.", + "count": 8 + } + ], + "/public/app/features/dimensions/editors/URLPickerTab.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/dimensions/editors/ValueMappingsEditor/ValueMappingsEditorModal.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/dimensions/scale.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/dimensions/types.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/dimensions/utils.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/explore/ContentOutline/ContentOutline.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/explore/Logs/LiveLogs.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 5 + } + ], + "/public/app/features/explore/Logs/Logs.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/explore/Logs/LogsMetaRow.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/explore/Logs/LogsNavigation.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 4 + } + ], + "/public/app/features/explore/Logs/LogsNavigationPages.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 5 + } + ], + "/public/app/features/explore/Logs/LogsSamplePanel.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/explore/Logs/LogsVolumePanel.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/explore/Logs/LogsVolumePanelList.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 4 + } + ], + "/public/app/features/explore/Logs/utils/LogsCrossFadeTransition.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 4 + } + ], + "/public/app/features/explore/NodeGraph/NodeGraphContainer.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/explore/PrometheusListView/ItemLabels.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/explore/PrometheusListView/ItemValues.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/explore/PrometheusListView/RawListContainer.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 6 + } + ], + "/public/app/features/explore/PrometheusListView/RawListItem.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 4 + } + ], + "/public/app/features/explore/PrometheusListView/RawListItemAttributes.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/explore/RichHistory/RichHistoryCard.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 14 + } + ], + "/public/app/features/explore/RichHistory/RichHistoryQueriesTab.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 14 + } + ], + "/public/app/features/explore/RichHistory/RichHistorySettingsTab.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 5 + } + ], + "/public/app/features/explore/RichHistory/RichHistoryStarredTab.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 7 + } + ], + "/public/app/features/explore/TraceView/TraceView.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + }, + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/public/app/features/explore/TraceView/components/TracePageHeader/Actions/ActionButton.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/explore/TraceView/components/TracePageHeader/SearchBar/NextPrevResult.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 6 + } + ], + "/public/app/features/explore/TraceView/components/TracePageHeader/SearchBar/TracePageSearchBar.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 5 + } + ], + "/public/app/features/explore/TraceView/components/TracePageHeader/SpanFilters/SpanFilters.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 6 + } + ], + "/public/app/features/explore/TraceView/components/TracePageHeader/SpanGraph/CanvasSpanGraph.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/explore/TraceView/components/TracePageHeader/SpanGraph/GraphTicks.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/explore/TraceView/components/TracePageHeader/SpanGraph/Scrubber.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 5 + } + ], + "/public/app/features/explore/TraceView/components/TracePageHeader/SpanGraph/TickLabels.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/explore/TraceView/components/TracePageHeader/SpanGraph/ViewingLayer.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 8 + } + ], + "/public/app/features/explore/TraceView/components/TracePageHeader/TracePageHeader.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 9 + } + ], + "/public/app/features/explore/TraceView/components/TraceTimelineViewer/SpanBarRow.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 22 + } + ], + "/public/app/features/explore/TraceView/components/TraceTimelineViewer/SpanDetail/AccordianKeyValues.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 8 + } + ], + "/public/app/features/explore/TraceView/components/TraceTimelineViewer/SpanDetail/AccordianLogs.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 4 + } + ], + "/public/app/features/explore/TraceView/components/TraceTimelineViewer/SpanDetail/AccordianReferences.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 14 + } + ], + "/public/app/features/explore/TraceView/components/TraceTimelineViewer/SpanDetail/AccordianText.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/explore/TraceView/components/TraceTimelineViewer/SpanDetail/KeyValuesTable.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 6 + } + ], + "/public/app/features/explore/TraceView/components/TraceTimelineViewer/SpanDetail/SpanFlameGraph.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/explore/TraceView/components/TraceTimelineViewer/SpanDetail/TextList.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/explore/TraceView/components/TraceTimelineViewer/SpanDetail/index.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 11 + } + ], + "/public/app/features/explore/TraceView/components/TraceTimelineViewer/SpanDetailRow.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/explore/TraceView/components/TraceTimelineViewer/SpanLinks.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 4 + } + ], + "/public/app/features/explore/TraceView/components/TraceTimelineViewer/SpanTreeOffset.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 6 + } + ], + "/public/app/features/explore/TraceView/components/TraceTimelineViewer/Ticks.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 4 + } + ], + "/public/app/features/explore/TraceView/components/TraceTimelineViewer/TimelineHeaderRow/TimelineCollapser.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/explore/TraceView/components/TraceTimelineViewer/TimelineHeaderRow/TimelineColumnResizer.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 8 + } + ], + "/public/app/features/explore/TraceView/components/TraceTimelineViewer/TimelineHeaderRow/TimelineHeaderRow.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/explore/TraceView/components/TraceTimelineViewer/TimelineHeaderRow/TimelineViewingLayer.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 8 + } + ], + "/public/app/features/explore/TraceView/components/TraceTimelineViewer/VirtualizedTraceView.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/explore/TraceView/components/TraceTimelineViewer/index.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/explore/TraceView/components/common/BreakableText.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/explore/TraceView/components/common/CopyIcon.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/explore/TraceView/components/common/LabeledList.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 4 + } + ], + "/public/app/features/explore/TraceView/components/common/NewWindowIcon.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/explore/TraceView/components/common/TraceName.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/explore/TraceView/components/demo/trace-generators.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/explore/TraceView/components/model/link-patterns.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 10 + }, + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/public/app/features/explore/TraceView/components/model/transform-trace-data.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/explore/TraceView/components/settings/SpanBarSettings.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/explore/TraceView/components/types/trace.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/explore/TraceView/createSpanLink.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/public/app/features/explore/spec/helper/setup.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/explore/state/time.test.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/explore/state/utils.ts": [ + { + "message": "Do not use any type assertions.", + "count": 4 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/features/expressions/ExpressionDatasource.ts": [ + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/public/app/features/expressions/components/Condition.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/expressions/components/Math.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 7 + } + ], + "/public/app/features/expressions/guards.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/geo/editor/GazetteerPathEditor.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/geo/editor/locationModeEditor.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/geo/gazetteer/gazetteer.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/geo/utils/frameVectorSource.ts": [ + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/public/app/features/inspector/DetailText.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/inspector/InspectDataOptions.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/inspector/InspectDataTab.tsx": [ + { + "message": "Use data-testid for E2E selectors instead of aria-label", + "count": 1 + } + ], + "/public/app/features/inspector/InspectJSONTab.tsx": [ + { + "message": "Use data-testid for E2E selectors instead of aria-label", + "count": 1 + } + ], + "/public/app/features/inspector/InspectStatsTab.tsx": [ + { + "message": "Use data-testid for E2E selectors instead of aria-label", + "count": 1 + }, + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/inspector/InspectStatsTable.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/inspector/InspectStatsTraceIdsTable.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/inspector/QueryInspector.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + }, + { + "message": "Styles should be written using objects.", + "count": 1 + }, + { + "message": "Use data-testid for E2E selectors instead of aria-label", + "count": 2 + } + ], + "/public/app/features/inspector/styles.ts": [ + { + "message": "Styles should be written using objects.", + "count": 11 + } + ], + "/public/app/features/library-panels/components/LibraryPanelInfo/LibraryPanelInfo.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/library-panels/components/LibraryPanelsSearch/LibraryPanelsSearch.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 9 + } + ], + "/public/app/features/library-panels/components/LibraryPanelsView/actions.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/library-panels/components/OpenLibraryPanelModal/OpenLibraryPanelModal.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/library-panels/components/PanelLibraryOptionsGroup/PanelLibraryOptionsGroup.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/library-panels/styles.ts": [ + { + "message": "Styles should be written using objects.", + "count": 6 + } + ], + "/public/app/features/library-panels/utils.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/live/LiveConnectionWarning.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/live/centrifuge/LiveDataStream.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/live/centrifuge/channel.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/live/centrifuge/serviceWorkerProxy.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/live/data/amendTimeSeries.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + }, + { + "message": "Do not use any type assertions.", + "count": 4 + } + ], + "/public/app/features/logs/components/LoadingIndicator.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/logs/components/LogDetailsRow.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 7 + } + ], + "/public/app/features/logs/components/LogLabelStats.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 5 + } + ], + "/public/app/features/logs/components/LogLabelStatsRow.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 8 + } + ], + "/public/app/features/logs/components/LogLabels.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/logs/components/LogRowMessageDisplayedFields.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/logs/components/getLogRowStyles.ts": [ + { + "message": "Styles should be written using objects.", + "count": 36 + } + ], + "/public/app/features/logs/components/log-context/LogRowContextModal.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 13 + } + ], + "/public/app/features/logs/utils.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/manage-dashboards/DashboardImportPage.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/manage-dashboards/components/ImportDashboardLibraryPanelsList.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/manage-dashboards/components/PublicDashboardListTable/DeletePublicDashboardModal.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/manage-dashboards/components/PublicDashboardListTable/PublicDashboardListTable.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 6 + } + ], + "/public/app/features/manage-dashboards/state/actions.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 14 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/manage-dashboards/state/reducers.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 4 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/org/state/actions.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/org/state/reducers.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/panel/components/VizTypePicker/PanelTypeCard.tsx": [ + { + "message": "Use data-testid for E2E selectors instead of aria-label", + "count": 1 + } + ], + "/public/app/features/panel/components/VizTypePicker/VisualizationSuggestionCard.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 5 + } + ], + "/public/app/features/panel/panellinks/linkSuppliers.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/panel/panellinks/link_srv.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 4 + } + ], + "/public/app/features/playlist/EmptyQueryListBanner.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/playlist/PlaylistForm.tsx": [ + { + "message": "Use data-testid for E2E selectors instead of aria-label", + "count": 2 + } + ], + "/public/app/features/playlist/PlaylistTableRows.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 4 + } + ], + "/public/app/features/plugins/admin/components/Badges/PluginUpdateAvailableBadge.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/plugins/admin/components/Badges/sharedStyles.ts": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/plugins/admin/components/GetStartedWithPlugin/GetStartedWithDataSource.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/plugins/admin/components/HorizontalGroup.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/plugins/admin/components/InstallControls/InstallControlsWarning.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/plugins/admin/components/PluginActions.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/plugins/admin/components/PluginDetailsBody.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/plugins/admin/components/PluginDetailsHeaderDependencies.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/plugins/admin/components/PluginDetailsHeaderSignature.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/plugins/admin/components/PluginDetailsPage.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/plugins/admin/components/PluginSignatureDetailsBadge.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 4 + } + ], + "/public/app/features/plugins/admin/components/PluginSubtitle.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/plugins/admin/components/PluginUsage.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/plugins/admin/components/VersionList.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/plugins/admin/hooks/useHistory.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/plugins/admin/hooks/usePluginInfo.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/plugins/admin/pages/Browse.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/public/app/features/plugins/admin/state/actions.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/plugins/admin/types.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/plugins/datasource_srv.ts": [ + { + "message": "Do not use any type assertions.", + "count": 5 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 8 + } + ], + "/public/app/features/plugins/sandbox/distortion_map.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/plugins/sandbox/sandbox_plugin_loader.ts": [ + { + "message": "Do not use any type assertions.", + "count": 3 + } + ], + "/public/app/features/plugins/tests/datasource_srv.test.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + } + ], + "/public/app/features/plugins/utils.ts": [ + { + "message": "Do not use any type assertions.", + "count": 4 + } + ], + "/public/app/features/profile/ChangePasswordForm.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/query/components/QueryEditorRow.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 4 + }, + { + "message": "Use data-testid for E2E selectors instead of aria-label", + "count": 1 + } + ], + "/public/app/features/query/components/QueryEditorRowHeader.tsx": [ + { + "message": "Use data-testid for E2E selectors instead of aria-label", + "count": 1 + }, + { + "message": "Styles should be written using objects.", + "count": 8 + } + ], + "/public/app/features/query/components/QueryGroup.tsx": [ + { + "message": "Use data-testid for E2E selectors instead of aria-label", + "count": 2 + }, + { + "message": "Styles should be written using objects.", + "count": 7 + } + ], + "/public/app/features/query/components/QueryGroupOptions.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/query/state/DashboardQueryRunner/AnnotationsQueryRunner.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/query/state/DashboardQueryRunner/DashboardQueryRunner.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/query/state/DashboardQueryRunner/PublicAnnotationsDataSource.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/query/state/DashboardQueryRunner/testHelpers.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/query/state/DashboardQueryRunner/utils.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 4 + } + ], + "/public/app/features/query/state/PanelQueryRunner.ts": [ + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/public/app/features/query/state/runRequest.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/query/state/updateQueries.test.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 11 + } + ], + "/public/app/features/search/page/components/ActionRow.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/search/page/components/SearchResultsTable.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 13 + } + ], + "/public/app/features/search/page/components/columns.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/search/service/bluge.ts": [ + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/public/app/features/search/service/sql.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/search/service/utils.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/search/state/SearchStateManager.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/search/types.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/search/utils.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/serviceaccounts/components/CreateTokenModal.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 4 + } + ], + "/public/app/features/serviceaccounts/components/ServiceAccountProfile.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/serviceaccounts/components/ServiceAccountProfileRow.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/serviceaccounts/components/ServiceAccountTokensTable.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 7 + } + ], + "/public/app/features/serviceaccounts/state/reducers.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/storage/Breadcrumb.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/storage/FileView.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 7 + } + ], + "/public/app/features/storage/FolderView.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 5 + } + ], + "/public/app/features/storage/RootView.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/storage/StoragePage.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 6 + } + ], + "/public/app/features/storage/UploadButton.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/storage/storage.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/features/teams/TeamGroupSync.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/features/teams/state/reducers.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/teams/state/selectors.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/templating/fieldAccessorCache.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/templating/formatVariableValue.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + } + ], + "/public/app/features/templating/templateProxies.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/templating/template_srv.mock.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/templating/template_srv.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 10 + }, + { + "message": "Do not use any type assertions.", + "count": 3 + } + ], + "/public/app/features/transformers/FilterByValueTransformer/ValueMatchers/BasicMatcherEditor.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/transformers/FilterByValueTransformer/ValueMatchers/NoopMatcherEditor.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/transformers/FilterByValueTransformer/ValueMatchers/RangeMatcherEditor.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/transformers/FilterByValueTransformer/ValueMatchers/types.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + } + ], + "/public/app/features/transformers/FilterByValueTransformer/ValueMatchers/utils.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + } + ], + "/public/app/features/transformers/FilterByValueTransformer/ValueMatchers/valueMatchersUI.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/transformers/calculateHeatmap/editor/helper.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/transformers/calculateHeatmap/heatmap.ts": [ + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/public/app/features/transformers/configFromQuery/ConfigFromQueryTransformerEditor.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/transformers/editors/CalculateFieldTransformerEditor/CumulativeOptionsEditor.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/transformers/editors/CalculateFieldTransformerEditor/ReduceRowOptionsEditor.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/transformers/editors/CalculateFieldTransformerEditor/WindowOptionsEditor.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/transformers/editors/ConvertFieldTypeTransformerEditor.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/transformers/editors/GroupByTransformerEditor.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/transformers/editors/OrganizeFieldsTransformerEditor.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/transformers/editors/ReduceTransformerEditor.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/transformers/editors/SortByTransformerEditor.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/transformers/extractFields/ExtractFieldsTransformerEditor.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 2 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/features/transformers/extractFields/components/JSONPathEditor.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/transformers/extractFields/extractFields.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/transformers/extractFields/fieldExtractors.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/transformers/fieldToConfigMapping/FieldToConfigMappingEditor.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 2 + }, + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/transformers/fieldToConfigMapping/fieldToConfigMapping.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 4 + } + ], + "/public/app/features/transformers/lookupGazetteer/FieldLookupTransformerEditor.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/transformers/lookupGazetteer/fieldLookup.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/transformers/prepareTimeSeries/PrepareTimeSeriesEditor.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/transformers/prepareTimeSeries/prepareTimeSeries.test.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/transformers/prepareTimeSeries/prepareTimeSeries.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/features/transformers/spatial/SpatialTransformerEditor.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/transformers/spatial/optionsHelper.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + }, + { + "message": "Do not use any type assertions.", + "count": 3 + } + ], + "/public/app/features/transformers/standardTransformers.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/users/TokenRevokedModal.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/features/variables/adapters.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + } + ], + "/public/app/features/variables/adhoc/picker/AdHocFilterRenderer.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/variables/constant/reducer.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/variables/custom/reducer.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/variables/datasource/actions.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/variables/editor/VariableEditorContainer.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/public/app/features/variables/editor/VariableEditorEditor.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/variables/editor/VariableEditorList.tsx": [ + { + "message": "Use data-testid for E2E selectors instead of aria-label", + "count": 2 + }, + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/features/variables/editor/VariableEditorListRow.tsx": [ + { + "message": "Use data-testid for E2E selectors instead of aria-label", + "count": 4 + }, + { + "message": "Styles should be written using objects.", + "count": 7 + } + ], + "/public/app/features/variables/editor/getVariableQueryEditor.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/features/variables/editor/reducer.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/variables/editor/types.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/variables/guard.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/features/variables/inspect/NetworkGraph.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 7 + } + ], + "/public/app/features/variables/inspect/VariablesUnknownTable.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 5 + } + ], + "/public/app/features/variables/inspect/utils.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 8 + }, + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/public/app/features/variables/pickers/OptionsPicker/actions.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/features/variables/pickers/shared/VariableLink.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/features/variables/pickers/shared/VariableOptions.tsx": [ + { + "message": "Use data-testid for E2E selectors instead of aria-label", + "count": 1 + } + ], + "/public/app/features/variables/query/QueryVariableEditor.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/features/variables/query/VariableQueryRunner.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/variables/query/actions.test.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/variables/query/actions.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 5 + } + ], + "/public/app/features/variables/query/operators.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/features/variables/query/queryRunners.test.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/variables/query/queryRunners.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/features/variables/query/reducer.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/features/variables/query/variableQueryObserver.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/features/variables/shared/formatVariable.ts": [ + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/public/app/features/variables/shared/testing/optionsVariableBuilder.ts": [ + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/public/app/features/variables/shared/testing/variableBuilder.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/variables/state/actions.ts": [ + { + "message": "Do not use any type assertions.", + "count": 7 + } + ], + "/public/app/features/variables/state/keyedVariablesReducer.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/features/variables/state/sharedReducer.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/features/variables/state/types.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/features/variables/state/upgradeLegacyQueries.test.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/features/variables/system/adapter.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 4 + }, + { + "message": "Do not use any type assertions.", + "count": 4 + } + ], + "/public/app/features/variables/types.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 5 + } + ], + "/public/app/features/variables/utils.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 6 + }, + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/public/app/features/visualization/data-hover/DataHoverRows.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/plugins/datasource/alertmanager/DataSource.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/datasource/alertmanager/types.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + } + ], + "/public/app/plugins/datasource/azuremonitor/azure_monitor/azure_monitor_datasource.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/datasource/azuremonitor/components/LogsQueryEditor/QueryField.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/public/app/plugins/datasource/azuremonitor/components/QueryEditor/QueryEditor.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/datasource/azuremonitor/utils/messageFromError.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/datasource/cloud-monitoring/CloudMonitoringMetricFindQuery.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/datasource/cloud-monitoring/annotationSupport.ts": [ + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/public/app/plugins/datasource/cloud-monitoring/components/Aggregation.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/datasource/cloud-monitoring/components/CloudMonitoringCheatSheet.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/plugins/datasource/cloud-monitoring/components/VariableQueryEditor.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/datasource/cloud-monitoring/components/VisualMetricQueryEditor.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/plugins/datasource/cloud-monitoring/datasource.ts": [ + { + "message": "Do not use any type assertions.", + "count": 2 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/plugins/datasource/cloud-monitoring/functions.ts": [ + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/public/app/plugins/datasource/cloud-monitoring/types/types.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/datasource/cloudwatch/components/CheatSheet/LogsCheatSheet.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/plugins/datasource/cloudwatch/components/ConfigEditor/XrayLinkConfig.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/plugins/datasource/cloudwatch/components/QueryEditor/LogsQueryEditor/LogsQueryEditor.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/plugins/datasource/cloudwatch/components/QueryEditor/LogsQueryEditor/LogsQueryFieldOld.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/datasource/cloudwatch/components/QueryEditor/MetricsQueryEditor/DynamicLabelsField.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/plugins/datasource/cloudwatch/components/shared/LogGroups/LegacyLogGroupNamesSelection.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/plugins/datasource/cloudwatch/datasource.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/datasource/cloudwatch/guards.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/datasource/cloudwatch/language/cloudwatch-logs/CloudWatchLogsLanguageProvider.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + } + ], + "/public/app/plugins/datasource/cloudwatch/memoizedDebounce.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/plugins/datasource/cloudwatch/types.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 7 + } + ], + "/public/app/plugins/datasource/cloudwatch/utils/datalinks.ts": [ + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/public/app/plugins/datasource/cloudwatch/utils/logsRetry.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/datasource/dashboard/runSharedRequest.ts": [ + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/public/app/plugins/datasource/elasticsearch/ElasticResponse.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 32 + }, + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/public/app/plugins/datasource/elasticsearch/LanguageProvider.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 4 + } + ], + "/public/app/plugins/datasource/elasticsearch/LegacyQueryRunner.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/datasource/elasticsearch/QueryBuilder.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 8 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/datasource/elasticsearch/components/AddRemove.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/plugins/datasource/elasticsearch/components/MetricPicker.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/plugins/datasource/elasticsearch/components/QueryEditor/BucketAggregationsEditor/BucketAggregationEditor.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/datasource/elasticsearch/components/QueryEditor/BucketAggregationsEditor/SettingsEditor/DateHistogramSettingsEditor.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/datasource/elasticsearch/components/QueryEditor/BucketAggregationsEditor/SettingsEditor/FiltersSettingsEditor/index.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/plugins/datasource/elasticsearch/components/QueryEditor/BucketAggregationsEditor/SettingsEditor/TermsSettingsEditor.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/datasource/elasticsearch/components/QueryEditor/BucketAggregationsEditor/aggregations.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/datasource/elasticsearch/components/QueryEditor/BucketAggregationsEditor/state/reducer.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/datasource/elasticsearch/components/QueryEditor/MetricAggregationsEditor/MetricEditor.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/datasource/elasticsearch/components/QueryEditor/MetricAggregationsEditor/SettingsEditor/BucketScriptSettingsEditor/index.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/plugins/datasource/elasticsearch/components/QueryEditor/MetricAggregationsEditor/SettingsEditor/SettingField.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/public/app/plugins/datasource/elasticsearch/components/QueryEditor/MetricAggregationsEditor/SettingsEditor/TopMetricsSettingsEditor.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/plugins/datasource/elasticsearch/components/QueryEditor/MetricAggregationsEditor/aggregations.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/datasource/elasticsearch/components/QueryEditor/MetricAggregationsEditor/state/reducer.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/datasource/elasticsearch/components/QueryEditor/MetricAggregationsEditor/styles.ts": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/plugins/datasource/elasticsearch/components/QueryEditor/QueryEditorRow.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/plugins/datasource/elasticsearch/components/QueryEditor/SettingsEditorContainer.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 5 + } + ], + "/public/app/plugins/datasource/elasticsearch/components/QueryEditor/index.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/plugins/datasource/elasticsearch/components/QueryEditor/styles.ts": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/plugins/datasource/elasticsearch/configuration/DataLink.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 6 + } + ], + "/public/app/plugins/datasource/elasticsearch/configuration/DataLinks.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/plugins/datasource/elasticsearch/datasource.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 5 + } + ], + "/public/app/plugins/datasource/elasticsearch/hooks/useStatelessReducer.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/datasource/elasticsearch/test-helpers/render.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/datasource/grafana-pyroscope-datasource/QueryEditor/LabelsEditor.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/plugins/datasource/grafana-pyroscope-datasource/utils.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/datasource/grafana-testdata-datasource/QueryEditor.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + }, + { + "message": "Do not use any type assertions.", + "count": 3 + } + ], + "/public/app/plugins/datasource/grafana-testdata-datasource/components/RandomWalkEditor.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 2 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/datasource/grafana-testdata-datasource/components/SimulationQueryEditor.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/plugins/datasource/grafana-testdata-datasource/components/SimulationSchemaForm.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + }, + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/plugins/datasource/grafana-testdata-datasource/datasource.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/datasource/grafana-testdata-datasource/nodeGraphUtils.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/datasource/grafana-testdata-datasource/runStreams.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/datasource/grafana/components/AnnotationQueryEditor.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/datasource/grafana/components/QueryEditor.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + }, + { + "message": "Do not use any type assertions.", + "count": 4 + }, + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/plugins/datasource/grafana/components/TimePickerInput.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 4 + } + ], + "/public/app/plugins/datasource/grafana/components/TimeRegionEditor.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/plugins/datasource/grafana/datasource.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + }, + { + "message": "Do not use any type assertions.", + "count": 7 + } + ], + "/public/app/plugins/datasource/graphite/components/AddGraphiteFunction.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/plugins/datasource/graphite/components/FunctionParamEditor.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/plugins/datasource/graphite/components/GraphiteFunctionEditor.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/plugins/datasource/graphite/components/GraphiteQueryEditor.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/plugins/datasource/graphite/components/MetricTankMetaInspector.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Styles should be written using objects.", + "count": 10 + } + ], + "/public/app/plugins/datasource/graphite/components/TagsSection.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/plugins/datasource/graphite/components/helpers.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/datasource/graphite/datasource.test.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + } + ], + "/public/app/plugins/datasource/graphite/datasource.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 51 + }, + { + "message": "Do not use any type assertions.", + "count": 4 + } + ], + "/public/app/plugins/datasource/graphite/gfunc.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 9 + }, + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/public/app/plugins/datasource/graphite/graphite_query.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 19 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/datasource/graphite/lexer.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 7 + } + ], + "/public/app/plugins/datasource/graphite/migrations.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/datasource/graphite/specs/graphite_query.test.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/datasource/graphite/specs/store.test.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/plugins/datasource/graphite/state/context.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/public/app/plugins/datasource/graphite/state/helpers.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/datasource/graphite/state/store.ts": [ + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/public/app/plugins/datasource/graphite/types.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/plugins/datasource/graphite/utils.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/datasource/influxdb/components/editor/config/ConfigEditor.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/datasource/influxdb/components/editor/query/flux/FluxQueryEditor.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/plugins/datasource/influxdb/components/editor/query/fsql/FSQLEditor.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/plugins/datasource/influxdb/components/editor/query/influxql/visual/VisualInfluxQLEditor.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/plugins/datasource/influxdb/datasource.ts": [ + { + "message": "Do not use any type assertions.", + "count": 2 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 14 + } + ], + "/public/app/plugins/datasource/influxdb/influx_query_model.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 13 + } + ], + "/public/app/plugins/datasource/influxdb/influx_series.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 19 + } + ], + "/public/app/plugins/datasource/influxdb/migrations.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/datasource/influxdb/mocks.ts": [ + { + "message": "Do not use any type assertions.", + "count": 4 + } + ], + "/public/app/plugins/datasource/influxdb/query_part.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 16 + } + ], + "/public/app/plugins/datasource/influxdb/response_parser.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/plugins/datasource/jaeger/CheatSheet.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/plugins/datasource/jaeger/configuration/ConfigEditor.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/plugins/datasource/jaeger/configuration/TraceIdTimeParams.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/plugins/datasource/jaeger/datasource.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/datasource/jaeger/testResponse.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/plugins/datasource/jaeger/types.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/datasource/loki/LanguageProvider.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/plugins/datasource/loki/LiveStreams.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/datasource/loki/components/LokiContextUi.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 11 + } + ], + "/public/app/plugins/datasource/loki/components/LokiLabelBrowser.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 14 + } + ], + "/public/app/plugins/datasource/loki/components/LokiOptionFields.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/plugins/datasource/loki/components/monaco-query-field/MonacoQueryField.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/plugins/datasource/loki/configuration/ConfigEditor.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/datasource/loki/configuration/DerivedField.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 7 + } + ], + "/public/app/plugins/datasource/loki/configuration/DerivedFields.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 5 + } + ], + "/public/app/plugins/datasource/loki/datasource.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 6 + } + ], + "/public/app/plugins/datasource/loki/queryUtils.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/datasource/loki/querybuilder/binaryScalarOperations.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/datasource/loki/querybuilder/components/LabelBrowserModal.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/plugins/datasource/loki/querybuilder/components/LokiQueryBuilder.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/datasource/loki/querybuilder/components/LokiQueryCodeEditor.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/plugins/datasource/loki/querybuilder/components/QueryPattern.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 4 + } + ], + "/public/app/plugins/datasource/loki/querybuilder/components/QueryPatternsModal.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/plugins/datasource/loki/streaming.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/plugins/datasource/opentsdb/components/OpenTsdbQueryEditor.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/plugins/datasource/opentsdb/datasource.d.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/datasource/opentsdb/datasource.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 57 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/datasource/opentsdb/migrations.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/datasource/parca/QueryEditor/LabelsEditor.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/plugins/datasource/prometheus/components/PromExemplarField.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/plugins/datasource/prometheus/components/PromExploreExtraField.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/plugins/datasource/prometheus/components/PromQueryField.test.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/datasource/prometheus/components/PromQueryField.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/datasource/prometheus/components/PrometheusMetricsBrowser.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 12 + } + ], + "/public/app/plugins/datasource/prometheus/components/monaco-query-field/MonacoQueryField.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/plugins/datasource/prometheus/configuration/AzureCredentialsConfig.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 18 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/datasource/prometheus/configuration/ConfigEditor.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 4 + }, + { + "message": "Styles should be written using objects.", + "count": 16 + } + ], + "/public/app/plugins/datasource/prometheus/configuration/ExemplarsSettings.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/plugins/datasource/prometheus/datasource.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 13 + } + ], + "/public/app/plugins/datasource/prometheus/language_provider.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 5 + } + ], + "/public/app/plugins/datasource/prometheus/language_utils.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/datasource/prometheus/metric_find_query.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 5 + } + ], + "/public/app/plugins/datasource/prometheus/query_hints.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/datasource/prometheus/querybuilder/QueryPattern.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 4 + } + ], + "/public/app/plugins/datasource/prometheus/querybuilder/QueryPatternsModal.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/plugins/datasource/prometheus/querybuilder/binaryScalarOperations.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/datasource/prometheus/querybuilder/components/LabelFilterItem.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 4 + } + ], + "/public/app/plugins/datasource/prometheus/querybuilder/components/LabelFilters.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/plugins/datasource/prometheus/querybuilder/components/LabelParamEditor.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/datasource/prometheus/querybuilder/components/MetricSelect.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 4 + }, + { + "message": "Styles should be written using objects.", + "count": 9 + } + ], + "/public/app/plugins/datasource/prometheus/querybuilder/components/PromQueryBuilder.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/datasource/prometheus/querybuilder/components/PromQueryCodeEditor.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/plugins/datasource/prometheus/querybuilder/components/metrics-modal/AdditionalSettings.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/plugins/datasource/prometheus/querybuilder/components/metrics-modal/ResultsTable.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 13 + } + ], + "/public/app/plugins/datasource/prometheus/querybuilder/components/metrics-modal/styles.ts": [ + { + "message": "Styles should be written using objects.", + "count": 19 + } + ], + "/public/app/plugins/datasource/prometheus/querybuilder/operationUtils.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/datasource/prometheus/querybuilder/shared/LabelFilterItem.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 8 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/datasource/prometheus/querybuilder/shared/LabelFilters.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/datasource/prometheus/querybuilder/shared/OperationEditor.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/datasource/prometheus/querybuilder/shared/OperationParamEditor.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/public/app/plugins/datasource/prometheus/querybuilder/shared/QueryBuilderHints.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/plugins/datasource/prometheus/querybuilder/shared/types.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + } + ], + "/public/app/plugins/datasource/prometheus/types.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + } + ], + "/public/app/plugins/datasource/tempo/LokiSearch.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/public/app/plugins/datasource/tempo/ServiceGraphSection.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/datasource/tempo/_importedDependencies/components/AdHocFilter/AdHocFilterRenderer.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/datasource/tempo/_importedDependencies/datasources/loki/LanguageProvider.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/plugins/datasource/tempo/_importedDependencies/datasources/loki/monaco-query-field/MonacoQueryField.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + }, + { + "message": "Use data-testid for E2E selectors instead of aria-label", + "count": 1 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/datasource/tempo/_importedDependencies/datasources/loki/monaco-query-field/monaco-completion-provider/CompletionDataProvider.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/datasource/tempo/_importedDependencies/datasources/loki/monaco-query-field/monaco-completion-provider/index.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/datasource/tempo/_importedDependencies/datasources/loki/types.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 4 + } + ], + "/public/app/plugins/datasource/tempo/_importedDependencies/datasources/prometheus/language_utils.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/datasource/tempo/_importedDependencies/datasources/prometheus/types.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + } + ], + "/public/app/plugins/datasource/tempo/_importedDependencies/store.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/datasource/tempo/_importedDependencies/test/helpers/createFetchResponse.ts": [ + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/public/app/plugins/datasource/tempo/configuration/TraceQLSearchSettings.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/datasource/tempo/datasource.ts": [ + { + "message": "Do not use any type assertions.", + "count": 2 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 4 + } + ], + "/public/app/plugins/datasource/tempo/language_provider.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/datasource/tempo/resultTransformer.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 4 + }, + { + "message": "Do not use any type assertions.", + "count": 4 + } + ], + "/public/app/plugins/datasource/zipkin/ConfigEditor.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/plugins/datasource/zipkin/QueryField.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/datasource/zipkin/datasource.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/datasource/zipkin/utils/testResponse.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/plugins/datasource/zipkin/utils/transforms.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/panel/alertGroups/AlertGroup.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 7 + } + ], + "/public/app/plugins/panel/alertlist/AlertInstances.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/plugins/panel/alertlist/AlertList.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + }, + { + "message": "Styles should be written using objects.", + "count": 10 + } + ], + "/public/app/plugins/panel/alertlist/AlertListMigrationHandler.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/plugins/panel/alertlist/UnifiedAlertList.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 17 + } + ], + "/public/app/plugins/panel/alertlist/unified-alerting/UngroupedView.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 7 + } + ], + "/public/app/plugins/panel/annolist/AnnoListPanel.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/plugins/panel/barchart/BarChartPanel.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/public/app/plugins/panel/barchart/bars.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/panel/barchart/module.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/panel/barchart/quadtree.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/panel/candlestick/CandlestickPanel.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/panel/canvas/editor/element/APIEditor.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/panel/canvas/editor/element/PlacementEditor.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/panel/canvas/editor/element/elementEditor.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/panel/canvas/editor/inline/InlineEditBody.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 3 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/panel/canvas/editor/layer/TreeNavigationEditor.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/panel/canvas/editor/layer/layerEditor.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 2 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/plugins/panel/canvas/globalStyles.ts": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/plugins/panel/dashlist/styles.ts": [ + { + "message": "Styles should be written using objects.", + "count": 7 + } + ], + "/public/app/plugins/panel/datagrid/utils.ts": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/plugins/panel/debug/CursorView.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/panel/debug/EventBusLogger.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/plugins/panel/gauge/GaugeMigrations.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/panel/geomap/components/MarkersLegend.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 2 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/panel/geomap/editor/GeomapStyleRulesEditor.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/panel/geomap/editor/StyleEditor.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 12 + } + ], + "/public/app/plugins/panel/geomap/editor/StyleRuleEditor.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/panel/geomap/layers/basemaps/esri.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/panel/geomap/layers/data/geojsonDynamic.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/panel/geomap/layers/data/routeLayer.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/panel/geomap/layers/registry.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/plugins/panel/geomap/migrations.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/plugins/panel/geomap/utils/layers.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/panel/geomap/utils/tooltip.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/panel/gettingstarted/components/DocsCard.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 5 + } + ], + "/public/app/plugins/panel/gettingstarted/components/Step.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 4 + } + ], + "/public/app/plugins/panel/gettingstarted/components/TutorialCard.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 6 + } + ], + "/public/app/plugins/panel/gettingstarted/components/sharedStyles.ts": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/plugins/panel/heatmap/HeatmapPanel.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/panel/heatmap/migrations.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/panel/heatmap/palettes.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/panel/heatmap/types.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/panel/heatmap/utils.ts": [ + { + "message": "Do not use any type assertions.", + "count": 17 + } + ], + "/public/app/plugins/panel/histogram/Histogram.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/panel/live/LiveChannelEditor.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + }, + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/plugins/panel/live/LivePanel.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Styles should be written using objects.", + "count": 7 + } + ], + "/public/app/plugins/panel/live/types.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/panel/logs/LogsPanel.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/panel/nodeGraph/Edge.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/panel/nodeGraph/EdgeLabel.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/panel/nodeGraph/Legend.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/plugins/panel/nodeGraph/Marker.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 3 + } + ], + "/public/app/plugins/panel/nodeGraph/Node.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 9 + } + ], + "/public/app/plugins/panel/nodeGraph/NodeGraph.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 10 + }, + { + "message": "Do not use any type assertions.", + "count": 4 + } + ], + "/public/app/plugins/panel/nodeGraph/ViewControls.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/panel/nodeGraph/editor/ArcOptionsEditor.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/plugins/panel/nodeGraph/layout.ts": [ + { + "message": "Do not use any type assertions.", + "count": 2 + } + ], + "/public/app/plugins/panel/nodeGraph/useContextMenu.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/plugins/panel/piechart/PieChart.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 5 + } + ], + "/public/app/plugins/panel/piechart/migrations.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/plugins/panel/stat/StatMigrations.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/panel/state-timeline/migrations.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 2 + } + ], + "/public/app/plugins/panel/table/TablePanel.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/plugins/panel/table/cells/SparklineCellOptionsEditor.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/plugins/panel/table/migrations.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 6 + } + ], + "/public/app/plugins/panel/text/TextPanel.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/plugins/panel/text/TextPanelEditor.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + }, + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/plugins/panel/text/textPanelMigrationHandler.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/panel/timeseries/TimezonesEditor.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/plugins/panel/timeseries/migrations.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 6 + }, + { + "message": "Do not use any type assertions.", + "count": 4 + } + ], + "/public/app/plugins/panel/timeseries/plugins/AnnotationsPlugin2.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/panel/timeseries/plugins/ThresholdDragHandle.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 7 + } + ], + "/public/app/plugins/panel/timeseries/plugins/annotations/AnnotationEditor.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/panel/timeseries/plugins/annotations/AnnotationEditorForm.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 7 + } + ], + "/public/app/plugins/panel/timeseries/plugins/annotations/AnnotationTooltip.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 9 + } + ], + "/public/app/plugins/panel/timeseries/plugins/annotations2/AnnotationEditor2.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/panel/timeseries/plugins/annotations2/AnnotationMarker2.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/panel/timeseries/plugins/annotations2/AnnotationTooltip2.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/plugins/panel/timeseries/plugins/styles.ts": [ + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/plugins/panel/traces/TracesPanel.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 1 + } + ], + "/public/app/plugins/panel/welcome/Welcome.tsx": [ + { + "message": "Styles should be written using objects.", + "count": 6 + } + ], + "/public/app/plugins/panel/xychart/AutoEditor.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + }, + { + "message": "Styles should be written using objects.", + "count": 2 + } + ], + "/public/app/plugins/panel/xychart/ManualEditor.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/panel/xychart/TooltipView.tsx": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/panel/xychart/XYChartPanel.tsx": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/plugins/panel/xychart/scatter.ts": [ + { + "message": "Do not use any type assertions.", + "count": 7 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 4 + } + ], + "/public/app/store/configureStore.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/store/store.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + }, + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/types/alerting.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 5 + } + ], + "/public/app/types/appEvent.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 7 + } + ], + "/public/app/types/dashboard.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/app/types/events.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 13 + } + ], + "/public/app/types/jquery/jquery.d.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 9 + } + ], + "/public/app/types/store.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + }, + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/app/types/unified-alerting-dto.ts": [ + { + "message": "Do not use any type assertions.", + "count": 1 + } + ], + "/public/test/core/redux/reduxTester.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 6 + } + ], + "/public/test/core/thunk/thunkTester.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 8 + } + ], + "/public/test/global-jquery-shim.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/test/helpers/getDashboardModel.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/test/helpers/initTemplateSrv.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/test/jest-setup.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/test/lib/common.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 1 + } + ], + "/public/test/specs/helpers.ts": [ + { + "message": "Unexpected any. Specify a different type.", + "count": 11 + } + ] + }, + "no undocumented stories": { + "/packages/grafana-ui/src/components/ButtonCascader/ButtonCascader.story.tsx": [ + { + "message": "No undocumented stories are allowed, please add an .mdx file with some documentation", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/ColorPicker/ColorPickerPopover.story.tsx": [ + { + "message": "No undocumented stories are allowed, please add an .mdx file with some documentation", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/DateTimePickers/RelativeTimeRangePicker/RelativeTimeRangePicker.story.tsx": [ + { + "message": "No undocumented stories are allowed, please add an .mdx file with some documentation", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/DateTimePickers/TimeOfDayPicker.story.tsx": [ + { + "message": "No undocumented stories are allowed, please add an .mdx file with some documentation", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/DateTimePickers/TimeRangePicker.story.tsx": [ + { + "message": "No undocumented stories are allowed, please add an .mdx file with some documentation", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/DateTimePickers/TimeZonePicker.story.tsx": [ + { + "message": "No undocumented stories are allowed, please add an .mdx file with some documentation", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/DateTimePickers/WeekStartPicker.story.tsx": [ + { + "message": "No undocumented stories are allowed, please add an .mdx file with some documentation", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/PageLayout/PageToolbar.story.tsx": [ + { + "message": "No undocumented stories are allowed, please add an .mdx file with some documentation", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/QueryField/QueryField.story.tsx": [ + { + "message": "No undocumented stories are allowed, please add an .mdx file with some documentation", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/SecretTextArea/SecretTextArea.story.tsx": [ + { + "message": "No undocumented stories are allowed, please add an .mdx file with some documentation", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/Segment/Segment.story.tsx": [ + { + "message": "No undocumented stories are allowed, please add an .mdx file with some documentation", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/Segment/SegmentAsync.story.tsx": [ + { + "message": "No undocumented stories are allowed, please add an .mdx file with some documentation", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/Segment/SegmentInput.story.tsx": [ + { + "message": "No undocumented stories are allowed, please add an .mdx file with some documentation", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/Slider/RangeSlider.story.tsx": [ + { + "message": "No undocumented stories are allowed, please add an .mdx file with some documentation", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/Slider/Slider.story.tsx": [ + { + "message": "No undocumented stories are allowed, please add an .mdx file with some documentation", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/StatsPicker/StatsPicker.story.tsx": [ + { + "message": "No undocumented stories are allowed, please add an .mdx file with some documentation", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/ThemeDemos/ThemeDemo.story.tsx": [ + { + "message": "No undocumented stories are allowed, please add an .mdx file with some documentation", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/VizLayout/VizLayout.story.tsx": [ + { + "message": "No undocumented stories are allowed, please add an .mdx file with some documentation", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/VizLegend/VizLegend.story.tsx": [ + { + "message": "No undocumented stories are allowed, please add an .mdx file with some documentation", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/VizTooltip/SeriesTable.story.tsx": [ + { + "message": "No undocumented stories are allowed, please add an .mdx file with some documentation", + "count": 1 + } + ] + }, + "no gf-form usage": { + "/e2e/utils/flows/addDataSource.ts": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 1 + } + ], + "/packages/grafana-e2e/src/flows/addDataSource.ts": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 1 + } + ], + "/packages/grafana-prometheus/src/components/PromExploreExtraField.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 4 + } + ], + "/packages/grafana-prometheus/src/components/PromQueryField.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 6 + } + ], + "/packages/grafana-prometheus/src/configuration/AlertingSettingsOverhaul.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 3 + } + ], + "/packages/grafana-prometheus/src/configuration/ExemplarSetting.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 1 + } + ], + "/packages/grafana-prometheus/src/configuration/PromSettings.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 25 + } + ], + "/packages/grafana-prometheus/src/querybuilder/components/PromQueryCodeEditor.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/DataSourceSettings/AlertingSettings.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 3 + } + ], + "/packages/grafana-ui/src/components/DataSourceSettings/CustomHeadersSettings.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 3 + } + ], + "/packages/grafana-ui/src/components/DataSourceSettings/DataSourceHttpSettings.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 16 + } + ], + "/packages/grafana-ui/src/components/DataSourceSettings/HttpProxySettings.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 3 + } + ], + "/packages/grafana-ui/src/components/DataSourceSettings/SecureSocksProxySettings.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 3 + } + ], + "/packages/grafana-ui/src/components/DataSourceSettings/TLSAuthSettings.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 3 + } + ], + "/packages/grafana-ui/src/components/FormField/FormField.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/FormLabel/FormLabel.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 3 + } + ], + "/packages/grafana-ui/src/components/Forms/Legacy/Input/Input.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/Forms/Legacy/Select/NoOptionsMessage.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 2 + } + ], + "/packages/grafana-ui/src/components/Forms/Legacy/Select/Select.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 6 + } + ], + "/packages/grafana-ui/src/components/Forms/Legacy/Select/SelectOption.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 4 + } + ], + "/packages/grafana-ui/src/components/Forms/Legacy/Switch/Switch.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 8 + } + ], + "/packages/grafana-ui/src/components/SecretFormField/SecretFormField.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 2 + } + ], + "/packages/grafana-ui/src/components/Segment/Segment.story.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 2 + } + ], + "/packages/grafana-ui/src/components/Segment/SegmentAsync.story.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 2 + } + ], + "/packages/grafana-ui/src/components/Segment/SegmentInput.story.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 1 + } + ], + "/packages/grafana-ui/src/components/Segment/SegmentInput.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 2 + } + ], + "/plugins-bundled/internal/input-datasource/src/InputConfigEditor.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 1 + } + ], + "/public/app/angular/components/code_editor/code_editor.ts": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 1 + } + ], + "/public/app/angular/components/form_dropdown/form_dropdown.ts": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 4 + } + ], + "/public/app/angular/components/info_popover.ts": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 2 + } + ], + "/public/app/angular/components/switch.ts": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 8 + } + ], + "/public/app/angular/dropdown_typeahead.ts": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 4 + } + ], + "/public/app/angular/metric_segment.ts": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 4 + } + ], + "/public/app/angular/misc.ts": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 2 + } + ], + "/public/app/angular/panel/partials/query_editor_row.html": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 1 + } + ], + "/public/app/angular/partials/tls_auth_settings.html": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 35 + } + ], + "/public/app/core/components/AccessControl/PermissionList.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 1 + } + ], + "/public/app/core/components/PageHeader/PageHeader.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 2 + } + ], + "/public/app/features/admin/UserLdapSyncInfo.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 3 + } + ], + "/public/app/features/admin/partials/edit_org.html": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 8 + } + ], + "/public/app/features/admin/partials/styleguide.html": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 4 + } + ], + "/public/app/features/alerting/AlertRuleList.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 4 + } + ], + "/public/app/features/alerting/partials/alert_tab.html": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 71 + } + ], + "/public/app/features/annotations/partials/event_editor.html": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 7 + } + ], + "/public/app/features/dashboard-scene/sharing/ShareLinkTab.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 1 + } + ], + "/public/app/features/dashboard/components/SubMenu/AnnotationPicker.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 2 + } + ], + "/public/app/features/dashboard/components/SubMenu/SubMenuItems.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 1 + } + ], + "/public/app/features/datasources/components/BasicSettings.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 3 + } + ], + "/public/app/features/datasources/components/ButtonRow.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 1 + } + ], + "/public/app/features/datasources/components/DataSourceLoadError.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 1 + } + ], + "/public/app/features/datasources/components/DataSourcePluginState.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 4 + } + ], + "/public/app/features/datasources/components/DataSourceTestingStatus.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 1 + } + ], + "/public/app/features/plugins/admin/components/AppConfigWrapper.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 1 + } + ], + "/public/app/features/query/components/QueryEditorRow.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 1 + } + ], + "/public/app/features/query/components/QueryGroupOptions.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 17 + } + ], + "/public/app/features/transformers/FilterByValueTransformer/ValueMatchers/RangeMatcherEditor.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 3 + } + ], + "/public/app/features/transformers/editors/OrganizeFieldsTransformerEditor.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 5 + } + ], + "/public/app/features/variables/adhoc/picker/AdHocFilter.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 1 + } + ], + "/public/app/features/variables/adhoc/picker/AdHocFilterKey.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 3 + } + ], + "/public/app/features/variables/adhoc/picker/AdHocFilterRenderer.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 1 + } + ], + "/public/app/features/variables/adhoc/picker/AdHocFilterValue.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 1 + } + ], + "/public/app/features/variables/adhoc/picker/ConditionSegment.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 2 + } + ], + "/public/app/features/variables/pickers/PickerRenderer.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 5 + } + ], + "/public/app/features/variables/pickers/shared/VariableInput.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 1 + } + ], + "/public/app/partials/confirm_modal.html": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 1 + } + ], + "/public/app/partials/reset_password.html": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 13 + } + ], + "/public/app/partials/signup_invited.html": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 14 + } + ], + "/public/app/plugins/datasource/alertmanager/ConfigEditor.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 4 + } + ], + "/public/app/plugins/datasource/cloud-monitoring/components/AnnotationsHelp.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 1 + } + ], + "/public/app/plugins/datasource/cloudwatch/components/ConfigEditor/ConfigEditor.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 1 + } + ], + "/public/app/plugins/datasource/cloudwatch/components/ConfigEditor/XrayLinkConfig.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 1 + } + ], + "/public/app/plugins/datasource/cloudwatch/components/QueryEditor/LogsQueryEditor/LogsQueryEditor.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 2 + } + ], + "/public/app/plugins/datasource/cloudwatch/components/QueryEditor/LogsQueryEditor/LogsQueryField.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 3 + } + ], + "/public/app/plugins/datasource/cloudwatch/components/QueryEditor/LogsQueryEditor/LogsQueryFieldOld.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 4 + } + ], + "/public/app/plugins/datasource/cloudwatch/components/shared/LogGroups/LegacyLogGroupNamesSelection.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 2 + } + ], + "/public/app/plugins/datasource/cloudwatch/components/shared/LogGroups/LogGroupsField.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 2 + } + ], + "/public/app/plugins/datasource/elasticsearch/components/QueryEditor/SettingsEditorContainer.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 1 + } + ], + "/public/app/plugins/datasource/elasticsearch/configuration/DataLinks.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 1 + } + ], + "/public/app/plugins/datasource/grafana-pyroscope-datasource/ConfigEditor.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 3 + } + ], + "/public/app/plugins/datasource/graphite/components/AnnotationsEditor.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 3 + } + ], + "/public/app/plugins/datasource/graphite/configuration/MappingsConfiguration.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 1 + } + ], + "/public/app/plugins/datasource/influxdb/components/editor/annotation/AnnotationEditor.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 8 + } + ], + "/public/app/plugins/datasource/influxdb/components/editor/query/QueryEditor.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 1 + } + ], + "/public/app/plugins/datasource/influxdb/components/editor/query/flux/FluxQueryEditor.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 5 + } + ], + "/public/app/plugins/datasource/influxdb/components/editor/query/fsql/FSQLEditor.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 5 + } + ], + "/public/app/plugins/datasource/influxdb/components/editor/query/influxql/visual/PartListSection.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 3 + } + ], + "/public/app/plugins/datasource/influxdb/components/editor/query/influxql/visual/TagsSection.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 1 + } + ], + "/public/app/plugins/datasource/influxdb/components/editor/variable/VariableQueryEditor.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 4 + } + ], + "/public/app/plugins/datasource/loki/components/AnnotationsQueryEditor.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 1 + } + ], + "/public/app/plugins/datasource/loki/components/LokiOptionFields.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 3 + } + ], + "/public/app/plugins/datasource/loki/components/LokiQueryField.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 3 + } + ], + "/public/app/plugins/datasource/loki/configuration/DerivedField.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 3 + } + ], + "/public/app/plugins/datasource/loki/querybuilder/components/LokiQueryCodeEditor.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 1 + } + ], + "/public/app/plugins/datasource/opentsdb/components/AnnotationEditor.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 3 + } + ], + "/public/app/plugins/datasource/prometheus/components/PromExploreExtraField.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 4 + } + ], + "/public/app/plugins/datasource/prometheus/components/PromQueryField.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 6 + } + ], + "/public/app/plugins/datasource/prometheus/configuration/AlertingSettingsOverhaul.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 3 + } + ], + "/public/app/plugins/datasource/prometheus/configuration/AzureAuthSettings.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 1 + } + ], + "/public/app/plugins/datasource/prometheus/configuration/AzureCredentialsForm.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 21 + } + ], + "/public/app/plugins/datasource/prometheus/configuration/ExemplarSetting.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 1 + } + ], + "/public/app/plugins/datasource/prometheus/configuration/PromSettings.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 25 + } + ], + "/public/app/plugins/datasource/prometheus/querybuilder/components/PromQueryCodeEditor.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 1 + } + ], + "/public/app/plugins/datasource/tempo/_importedDependencies/components/AdHocFilter/AdHocFilter.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 1 + } + ], + "/public/app/plugins/datasource/tempo/_importedDependencies/components/AdHocFilter/AdHocFilterKey.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 3 + } + ], + "/public/app/plugins/datasource/tempo/_importedDependencies/components/AdHocFilter/AdHocFilterRenderer.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 1 + } + ], + "/public/app/plugins/datasource/tempo/_importedDependencies/components/AdHocFilter/AdHocFilterValue.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 1 + } + ], + "/public/app/plugins/datasource/tempo/_importedDependencies/components/AdHocFilter/ConditionSegment.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 2 + } + ], + "/public/app/plugins/datasource/tempo/_importedDependencies/datasources/loki/LokiQueryField.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 3 + } + ], + "/public/app/plugins/datasource/zipkin/QueryField.tsx": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 2 + } + ], + "/public/app/plugins/panel/graph/axes_editor.html": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 50 + } + ], + "/public/app/plugins/panel/graph/tab_display.html": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 56 + } + ], + "/public/app/plugins/panel/graph/tab_legend.html": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 42 + } + ], + "/public/app/plugins/panel/graph/tab_series_overrides.html": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 10 + } + ], + "/public/app/plugins/panel/graph/thresholds_form.html": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 31 + } + ], + "/public/app/plugins/panel/graph/time_regions_form.html": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 32 + } + ], + "/public/app/plugins/panel/heatmap/partials/axes_editor.html": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 53 + } + ], + "/public/app/plugins/panel/heatmap/partials/display_editor.html": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 51 + } + ], + "/public/app/plugins/panel/table-old/column_options.html": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 91 + } + ], + "/public/app/plugins/panel/table-old/editor.html": [ + { + "message": "gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.", + "count": 22 + } + ] + } +} diff --git a/.betterer.ts b/.betterer.ts index 4b57b973e4d3d..019979e7e9405 100644 --- a/.betterer.ts +++ b/.betterer.ts @@ -5,19 +5,26 @@ import path from 'path'; import { glob } from 'glob'; // Why are we ignoring these? -// They're all deprecated/being removed soon so doesn't make sense to fix types +// They're all deprecated/being removed so doesn't make sense to fix types const eslintPathsToIgnore = [ 'packages/grafana-e2e', // deprecated. 'public/app/angular', // will be removed in Grafana 11 'public/app/plugins/panel/graph', // will be removed alongside angular + 'public/app/plugins/panel/table-old', // will be removed alongside angular ]; +// Avoid using functions that report the position of the issues, as this causes a lot of merge conflicts export default { 'better eslint': () => countEslintErrors() .include('**/*.{ts,tsx}') .exclude(new RegExp(eslintPathsToIgnore.join('|'))), 'no undocumented stories': () => countUndocumentedStories().include('**/!(*.internal).story.tsx'), + 'no gf-form usage': () => + regexp( + /gf-form/gm, + 'gf-form usage has been deprecated. Use a component from @grafana/ui or custom CSS instead.' + ).include('**/*.{ts,tsx,html}'), }; function countUndocumentedStories() { @@ -25,9 +32,16 @@ function countUndocumentedStories() { await Promise.all( filePaths.map(async (filePath) => { // look for .mdx import in the story file - const regex = new RegExp("^import.*.mdx';$", 'gm'); + const mdxImportRegex = new RegExp("^import.*\\.mdx';$", 'gm'); + // Looks for the "autodocs" string in the file + const autodocsStringRegex = /autodocs/; + const fileText = await fs.readFile(filePath, 'utf8'); - if (!regex.test(fileText)) { + + const hasMdxImport = mdxImportRegex.test(fileText); + const hasAutodocsString = autodocsStringRegex.test(fileText); + // If both .mdx import and autodocs string are missing, add an issue + if (!hasMdxImport && !hasAutodocsString) { // In this case the file contents don't matter: const file = fileTestResult.addFile(filePath, ''); // Add the issue to the first character of the file: @@ -38,6 +52,28 @@ function countUndocumentedStories() { }); } +/** + * Generic regexp pattern matcher, similar to @betterer/regexp. + * The only difference is that the positions of the errors are not reported, as this may cause a lot of merge conflicts. + */ +function regexp(pattern: RegExp, issueMessage: string) { + return new BettererFileTest(async (filePaths, fileTestResult) => { + await Promise.all( + filePaths.map(async (filePath) => { + const fileText = await fs.readFile(filePath, 'utf8'); + const matches = fileText.match(pattern); + if (matches) { + // File contents doesn't matter, since we're not reporting the position + const file = fileTestResult.addFile(filePath, ''); + matches.forEach(() => { + file.addIssue(0, 0, issueMessage); + }); + } + }) + ); + }); +} + function countEslintErrors() { return new BettererFileTest(async (filePaths, fileTestResult, resolver) => { const { baseDirectory } = resolver; diff --git a/.bingo/Variables.mk b/.bingo/Variables.mk index 84f3fe5ce8ce8..c6a5d32a42892 100644 --- a/.bingo/Variables.mk +++ b/.bingo/Variables.mk @@ -35,11 +35,11 @@ $(DRONE): $(BINGO_DIR)/drone.mod @echo "(re)installing $(GOBIN)/drone-v1.5.0" @cd $(BINGO_DIR) && GOWORK=off CGO_ENABLED=0 $(GO) build -mod=mod -modfile=drone.mod -o=$(GOBIN)/drone-v1.5.0 "github.com/drone/drone-cli/drone" -GOLANGCI_LINT := $(GOBIN)/golangci-lint-v1.53.3 +GOLANGCI_LINT := $(GOBIN)/golangci-lint-v1.57.1 $(GOLANGCI_LINT): $(BINGO_DIR)/golangci-lint.mod @# Install binary/ries using Go 1.14+ build command. This is using bwplotka/bingo-controlled, separate go module with pinned dependencies. - @echo "(re)installing $(GOBIN)/golangci-lint-v1.53.3" - @cd $(BINGO_DIR) && GOWORK=off $(GO) build -mod=mod -modfile=golangci-lint.mod -o=$(GOBIN)/golangci-lint-v1.53.3 "github.com/golangci/golangci-lint/cmd/golangci-lint" + @echo "(re)installing $(GOBIN)/golangci-lint-v1.57.1" + @cd $(BINGO_DIR) && GOWORK=off $(GO) build -mod=mod -modfile=golangci-lint.mod -o=$(GOBIN)/golangci-lint-v1.57.1 "github.com/golangci/golangci-lint/cmd/golangci-lint" JB := $(GOBIN)/jb-v0.5.1 $(JB): $(BINGO_DIR)/jb.mod @@ -59,9 +59,3 @@ $(SWAGGER): $(BINGO_DIR)/swagger.mod @echo "(re)installing $(GOBIN)/swagger-v0.30.2" @cd $(BINGO_DIR) && GOWORK=off $(GO) build -mod=mod -modfile=swagger.mod -o=$(GOBIN)/swagger-v0.30.2 "github.com/go-swagger/go-swagger/cmd/swagger" -WIRE := $(GOBIN)/wire-v0.5.0 -$(WIRE): $(BINGO_DIR)/wire.mod - @# Install binary/ries using Go 1.14+ build command. This is using bwplotka/bingo-controlled, separate go module with pinned dependencies. - @echo "(re)installing $(GOBIN)/wire-v0.5.0" - @cd $(BINGO_DIR) && GOWORK=off $(GO) build -mod=mod -modfile=wire.mod -o=$(GOBIN)/wire-v0.5.0 "github.com/google/wire/cmd/wire" - diff --git a/.bingo/golangci-lint.mod b/.bingo/golangci-lint.mod index 6275d68be9537..3eb46ed1e4cb3 100644 --- a/.bingo/golangci-lint.mod +++ b/.bingo/golangci-lint.mod @@ -1,5 +1,7 @@ module _ // Auto generated by https://github.com/bwplotka/bingo. DO NOT EDIT -go 1.20 +go 1.21 -require github.com/golangci/golangci-lint v1.53.3 // cmd/golangci-lint +toolchain go1.21.6 + +require github.com/golangci/golangci-lint v1.57.1 // cmd/golangci-lint diff --git a/.bingo/golangci-lint.sum b/.bingo/golangci-lint.sum index dea162a792ef1..c41da6943cb5f 100644 --- a/.bingo/golangci-lint.sum +++ b/.bingo/golangci-lint.sum @@ -42,22 +42,32 @@ cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3f dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/4meepo/tagalign v1.2.2 h1:kQeUTkFTaBRtd/7jm8OKJl9iHk0gAO+TDFPHGSna0aw= github.com/4meepo/tagalign v1.2.2/go.mod h1:Q9c1rYMZJc9dPRkbQPpcBNCLEmY2njbAsXhQOZFE2dE= +github.com/4meepo/tagalign v1.3.3 h1:ZsOxcwGD/jP4U/aw7qeWu58i7dwYemfy5Y+IF1ACoNw= +github.com/4meepo/tagalign v1.3.3/go.mod h1:Q9c1rYMZJc9dPRkbQPpcBNCLEmY2njbAsXhQOZFE2dE= github.com/Abirdcfly/dupword v0.0.9 h1:MxprGjKq3yDBICXDgEEsyGirIXfMYXkLNT/agPsE1tk= github.com/Abirdcfly/dupword v0.0.9/go.mod h1:PzmHVLLZ27MvHSzV7eFmMXSFArWXZPZmfuuziuUrf2g= github.com/Abirdcfly/dupword v0.0.11 h1:z6v8rMETchZXUIuHxYNmlUAuKuB21PeaSymTed16wgU= github.com/Abirdcfly/dupword v0.0.11/go.mod h1:wH8mVGuf3CP5fsBTkfWwwwKTjDnVVCxtU8d8rgeVYXA= +github.com/Abirdcfly/dupword v0.0.14 h1:3U4ulkc8EUo+CaT105/GJ1BQwtgyj6+VaBVbAX11Ba8= +github.com/Abirdcfly/dupword v0.0.14/go.mod h1:VKDAbxdY8YbKUByLGg8EETzYSuC4crm9WwI6Y3S0cLI= github.com/Antonboom/errname v0.1.7 h1:mBBDKvEYwPl4WFFNwec1CZO096G6vzK9vvDQzAwkako= github.com/Antonboom/errname v0.1.7/go.mod h1:g0ONh16msHIPgJSGsecu1G/dcF2hlYR/0SddnIAGavU= github.com/Antonboom/errname v0.1.9 h1:BZDX4r3l4TBZxZ2o2LNrlGxSHran4d1u4veZdoORTT4= github.com/Antonboom/errname v0.1.9/go.mod h1:nLTcJzevREuAsgTbG85UsuiWpMpAqbKD1HNZ29OzE58= github.com/Antonboom/errname v0.1.10 h1:RZ7cYo/GuZqjr1nuJLNe8ZH+a+Jd9DaZzttWzak9Bls= github.com/Antonboom/errname v0.1.10/go.mod h1:xLeiCIrvVNpUtsN0wxAh05bNIZpqE22/qDMnTBTttiA= +github.com/Antonboom/errname v0.1.12 h1:oh9ak2zUtsLp5oaEd/erjB4GPu9w19NyoIskZClDcQY= +github.com/Antonboom/errname v0.1.12/go.mod h1:bK7todrzvlaZoQagP1orKzWXv59X/x0W0Io2XT1Ssro= github.com/Antonboom/nilnil v0.1.1 h1:PHhrh5ANKFWRBh7TdYmyyq2gyT2lotnvFvvFbylF81Q= github.com/Antonboom/nilnil v0.1.1/go.mod h1:L1jBqoWM7AOeTD+tSquifKSesRHs4ZdaxvZR+xdJEaI= github.com/Antonboom/nilnil v0.1.3 h1:6RTbx3d2mcEu3Zwq9TowQpQMVpP75zugwOtqY1RTtcE= github.com/Antonboom/nilnil v0.1.3/go.mod h1:iOov/7gRcXkeEU+EMGpBu2ORih3iyVEiWjeste1SJm8= github.com/Antonboom/nilnil v0.1.5 h1:X2JAdEVcbPaOom2TUa1FxZ3uyuUlex0XMLGYMemu6l0= github.com/Antonboom/nilnil v0.1.5/go.mod h1:I24toVuBKhfP5teihGWctrRiPbRKHwZIFOvc6v3HZXk= +github.com/Antonboom/nilnil v0.1.7 h1:ofgL+BA7vlA1K2wNQOsHzLJ2Pw5B5DpWRLdDAVvvTow= +github.com/Antonboom/nilnil v0.1.7/go.mod h1:TP+ScQWVEq0eSIxqU8CbdT5DFWoHp0MbP+KMUO1BKYQ= +github.com/Antonboom/testifylint v1.2.0 h1:015bxD8zc5iY8QwTp4+RG9I4kIbqwvGX9TrBbb7jGdM= +github.com/Antonboom/testifylint v1.2.0/go.mod h1:rkmEqjqVnHDRNsinyN6fPSLnoajzFwsCcguJgwADBkw= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/toml v1.2.1 h1:9F2/+DoOYIOksmaJFPw1tGFy1eDnIJXg+UHjuD8lTak= github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= @@ -68,12 +78,18 @@ github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24 h1:sHglBQTwgx+rW github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24/go.mod h1:4UJr5HIiMZrwgkSPdsjy2uOQExX/WEILpIrO9UPGuXs= github.com/GaijinEntertainment/go-exhaustruct/v2 v2.3.0 h1:+r1rSv4gvYn0wmRjC8X7IAzX8QezqtFV9m0MUHFJgts= github.com/GaijinEntertainment/go-exhaustruct/v2 v2.3.0/go.mod h1:b3g59n2Y+T5xmcxJL+UEG2f8cQploZm1mR/v6BW0mU0= +github.com/GaijinEntertainment/go-exhaustruct/v3 v3.2.0 h1:sATXp1x6/axKxz2Gjxv8MALP0bXaNRfQinEwyfMcx8c= +github.com/GaijinEntertainment/go-exhaustruct/v3 v3.2.0/go.mod h1:Nl76DrGNJTA1KJ0LePKBw/vznBX1EHbAZX8mwjR82nI= github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww= github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= github.com/OpenPeeDeeP/depguard v1.1.1 h1:TSUznLjvp/4IUP+OQ0t/4jF4QUyxIcVX8YnghZdunyA= github.com/OpenPeeDeeP/depguard v1.1.1/go.mod h1:JtAMzWkmFEzDPyAd+W0NHl1lvpQKTvT9jnRVsohBKpc= github.com/OpenPeeDeeP/depguard/v2 v2.1.0 h1:aQl70G173h/GZYhWf36aE5H0KaujXfVMnn/f1kSDVYY= github.com/OpenPeeDeeP/depguard/v2 v2.1.0/go.mod h1:PUBgk35fX4i7JDmwzlJwJ+GMe6NfO1723wmJMgPThNQ= +github.com/OpenPeeDeeP/depguard/v2 v2.2.0 h1:vDfG60vDtIuf0MEOhmLlLLSzqaRM8EMcgJPdp74zmpA= +github.com/OpenPeeDeeP/depguard/v2 v2.2.0/go.mod h1:CIzddKRvLBC4Au5aYP/i3nyaWQ+ClszLIuVocRiCYFQ= +github.com/alecthomas/go-check-sumtype v0.1.4 h1:WCvlB3l5Vq5dZQTFmodqL2g68uHiSwwlWcT5a2FGK0c= +github.com/alecthomas/go-check-sumtype v0.1.4/go.mod h1:WyYPfhfkdhyrdaligV6svFopZV8Lqdzn5pyVBaV6jhQ= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= @@ -81,6 +97,8 @@ github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRF github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= github.com/alexkohler/nakedret/v2 v2.0.2 h1:qnXuZNvv3/AxkAb22q/sEsEpcA99YxLFACDtEw9TPxE= github.com/alexkohler/nakedret/v2 v2.0.2/go.mod h1:2b8Gkk0GsOrqQv/gPWjNLDSKwG8I5moSXG1K4VIBcTQ= +github.com/alexkohler/nakedret/v2 v2.0.4 h1:yZuKmjqGi0pSmjGpOC016LtPJysIL0WEUiaXW5SUnNg= +github.com/alexkohler/nakedret/v2 v2.0.4/go.mod h1:bF5i0zF2Wo2o4X4USt9ntUWve6JbFv02Ff4vlkmS/VU= github.com/alexkohler/prealloc v1.0.0 h1:Hbq0/3fJPQhNkN0dR95AVrr6R7tou91y0uHG5pOcUuw= github.com/alexkohler/prealloc v1.0.0/go.mod h1:VetnK3dIgFBBKmg0YnD9F9x6Icjd+9cvfHR56wJVlKE= github.com/alingse/asasalint v0.0.11 h1:SFwnQXJ49Kx/1GghOFz1XGqHYKp21Kq1nHad/0WQRnw= @@ -91,6 +109,8 @@ github.com/ashanbrown/forbidigo v1.5.1 h1:WXhzLjOlnuDYPYQo/eFlcFMi8X/kLfvWLYu6CS github.com/ashanbrown/forbidigo v1.5.1/go.mod h1:Y8j9jy9ZYAEHXdu723cUlraTqbzjKF1MUyfOKL+AjcU= github.com/ashanbrown/forbidigo v1.5.3 h1:jfg+fkm/snMx+V9FBwsl1d340BV/99kZGv5jN9hBoXk= github.com/ashanbrown/forbidigo v1.5.3/go.mod h1:Y8j9jy9ZYAEHXdu723cUlraTqbzjKF1MUyfOKL+AjcU= +github.com/ashanbrown/forbidigo v1.6.0 h1:D3aewfM37Yb3pxHujIPSpTf6oQk9sc9WZi8gerOIVIY= +github.com/ashanbrown/forbidigo v1.6.0/go.mod h1:Y8j9jy9ZYAEHXdu723cUlraTqbzjKF1MUyfOKL+AjcU= github.com/ashanbrown/makezero v1.1.1 h1:iCQ87C0V0vSyO+M9E/FZYbu65auqH0lnsOkf5FcB28s= github.com/ashanbrown/makezero v1.1.1/go.mod h1:i1bJLCRSCHOcOa9Y6MyF2FTfMZMFdHvxKHxgO5Z1axI= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= @@ -105,20 +125,32 @@ github.com/blizzy78/varnamelen v0.8.0 h1:oqSblyuQvFsW1hbBHh1zfwrKe3kcSj0rnXkKzsQ github.com/blizzy78/varnamelen v0.8.0/go.mod h1:V9TzQZ4fLJ1DSrjVDfl89H7aMnTvKkApdHeyESmyR7k= github.com/bombsimon/wsl/v3 v3.4.0 h1:RkSxjT3tmlptwfgEgTgU+KYKLI35p/tviNXNXiL2aNU= github.com/bombsimon/wsl/v3 v3.4.0/go.mod h1:KkIB+TXkqy6MvK9BDZVbZxKNYsE1/oLRJbIFtf14qqo= +github.com/bombsimon/wsl/v4 v4.2.1 h1:Cxg6u+XDWff75SIFFmNsqnIOgob+Q9hG6y/ioKbRFiM= +github.com/bombsimon/wsl/v4 v4.2.1/go.mod h1:Xu/kDxGZTofQcDGCtQe9KCzhHphIe0fDuyWTxER9Feo= github.com/breml/bidichk v0.2.3 h1:qe6ggxpTfA8E75hdjWPZ581sY3a2lnl0IRxLQFelECI= github.com/breml/bidichk v0.2.3/go.mod h1:8u2C6DnAy0g2cEq+k/A2+tr9O1s+vHGxWn0LTc70T2A= github.com/breml/bidichk v0.2.4 h1:i3yedFWWQ7YzjdZJHnPo9d/xURinSq3OM+gyM43K4/8= github.com/breml/bidichk v0.2.4/go.mod h1:7Zk0kRFt1LIZxtQdl9W9JwGAcLTTkOs+tN7wuEYGJ3s= +github.com/breml/bidichk v0.2.7 h1:dAkKQPLl/Qrk7hnP6P+E0xOodrq8Us7+U0o4UBOAlQY= +github.com/breml/bidichk v0.2.7/go.mod h1:YodjipAGI9fGcYM7II6wFvGhdMYsC5pHDlGzqvEW3tQ= github.com/breml/errchkjson v0.3.0 h1:YdDqhfqMT+I1vIxPSas44P+9Z9HzJwCeAzjB8PxP1xw= github.com/breml/errchkjson v0.3.0/go.mod h1:9Cogkyv9gcT8HREpzi3TiqBxCqDzo8awa92zSDFcofU= github.com/breml/errchkjson v0.3.1 h1:hlIeXuspTyt8Y/UmP5qy1JocGNR00KQHgfaNtRAjoxQ= github.com/breml/errchkjson v0.3.1/go.mod h1:XroxrzKjdiutFyW3nWhw34VGg7kiMsDQox73yWCGI2U= +github.com/breml/errchkjson v0.3.6 h1:VLhVkqSBH96AvXEyclMR37rZslRrY2kcyq+31HCsVrA= +github.com/breml/errchkjson v0.3.6/go.mod h1:jhSDoFheAF2RSDOlCfhHO9KqhZgAYLyvHe7bRCX8f/U= github.com/butuzov/ireturn v0.1.1 h1:QvrO2QF2+/Cx1WA/vETCIYBKtRjc30vesdoPUNo1EbY= github.com/butuzov/ireturn v0.1.1/go.mod h1:Wh6Zl3IMtTpaIKbmwzqi6olnM9ptYQxxVacMsOEFPoc= github.com/butuzov/ireturn v0.2.0 h1:kCHi+YzC150GE98WFuZQu9yrTn6GEydO2AuPLbTgnO4= github.com/butuzov/ireturn v0.2.0/go.mod h1:Wh6Zl3IMtTpaIKbmwzqi6olnM9ptYQxxVacMsOEFPoc= +github.com/butuzov/ireturn v0.3.0 h1:hTjMqWw3y5JC3kpnC5vXmFJAWI/m31jaCYQqzkS6PL0= +github.com/butuzov/ireturn v0.3.0/go.mod h1:A09nIiwiqzN/IoVo9ogpa0Hzi9fex1kd9PSD6edP5ZA= github.com/butuzov/mirror v1.1.0 h1:ZqX54gBVMXu78QLoiqdwpl2mgmoOJTk7s4p4o+0avZI= github.com/butuzov/mirror v1.1.0/go.mod h1:8Q0BdQU6rC6WILDiBM60DBfvV78OLJmMmixe7GF45AE= +github.com/catenacyber/perfsprint v0.7.1 h1:PGW5G/Kxn+YrN04cRAZKC+ZuvlVwolYMrIyyTJ/rMmc= +github.com/catenacyber/perfsprint v0.7.1/go.mod h1:/wclWYompEyjUD2FuIIDVKNkqz7IgBIWXIH3V0Zol50= +github.com/ccojocar/zxcvbn-go v1.0.2 h1:na/czXU8RrhXO4EZme6eQJLR4PzcGsahsBOAwU6I3Vg= +github.com/ccojocar/zxcvbn-go v1.0.2/go.mod h1:g1qkXtUSvHP8lhHp5GrSmTz6uWALGRMQdw6Qnz/hi60= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= @@ -131,9 +163,13 @@ github.com/chavacava/garif v0.0.0-20221024190013-b3ef35877348 h1:cy5GCEZLUCshCGC github.com/chavacava/garif v0.0.0-20221024190013-b3ef35877348/go.mod h1:f/miWtG3SSuTxKsNK3o58H1xl+XV6ZIfbC6p7lPPB8U= github.com/chavacava/garif v0.0.0-20230227094218-b8c73b2037b8 h1:W9o46d2kbNL06lq7UNDPV0zYLzkrde/bjIqO02eoll0= github.com/chavacava/garif v0.0.0-20230227094218-b8c73b2037b8/go.mod h1:gakxgyXaaPkxvLw1XQxNGK4I37ys9iBRzNUx/B7pUCo= +github.com/chavacava/garif v0.1.0 h1:2JHa3hbYf5D9dsgseMKAmc/MZ109otzgNFk5s87H9Pc= +github.com/chavacava/garif v0.1.0/go.mod h1:XMyYCkEL58DF0oyW4qDjjnPWONs2HBqYKI+UIPD+Gww= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/ckaznocha/intrange v0.1.0 h1:ZiGBhvrdsKpoEfzh9CjBfDSZof6QB0ORY5tXasUtiew= +github.com/ckaznocha/intrange v0.1.0/go.mod h1:Vwa9Ekex2BrEQMg6zlrWwbs/FtYw7eS5838Q7UjK7TQ= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= @@ -145,11 +181,15 @@ github.com/daixiang0/gci v0.9.1 h1:jBrwBmBZTDsGsXiaCTLIe9diotp1X4X64zodFrh7l+c= github.com/daixiang0/gci v0.9.1/go.mod h1:EpVfrztufwVgQRXjnX4zuNinEpLj5OmMjtu/+MB0V0c= github.com/daixiang0/gci v0.10.1 h1:eheNA3ljF6SxnPD/vE4lCBusVHmV3Rs3dkKvFrJ7MR0= github.com/daixiang0/gci v0.10.1/go.mod h1:xtHP9N7AHdNvtRNfcx9gwTDfw7FRJx4bZUsiEfiNNAI= +github.com/daixiang0/gci v0.12.3 h1:yOZI7VAxAGPQmkb1eqt5g/11SUlwoat1fSblGLmdiQc= +github.com/daixiang0/gci v0.12.3/go.mod h1:xtHP9N7AHdNvtRNfcx9gwTDfw7FRJx4bZUsiEfiNNAI= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/denis-tingaikin/go-header v0.4.3 h1:tEaZKAlqql6SKCY++utLmkPLd6K8IBM20Ha7UVm+mtU= github.com/denis-tingaikin/go-header v0.4.3/go.mod h1:0wOCWuN71D5qIgE2nz9KrKmuYBAC2Mra5RassOIQ2/c= +github.com/denis-tingaikin/go-header v0.5.0 h1:SRdnP5ZKvcO9KKRP1KJrhFR3RrlGuD+42t4429eC9k8= +github.com/denis-tingaikin/go-header v0.5.0/go.mod h1:mMenU5bWrok6Wl2UsZjy+1okegmwQ3UgWl4V1D8gjlY= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= @@ -160,10 +200,14 @@ github.com/esimonov/ifshort v1.0.4 h1:6SID4yGWfRae/M7hkVDVVyppy8q/v9OuxNdmjLQStB github.com/esimonov/ifshort v1.0.4/go.mod h1:Pe8zjlRrJ80+q2CxHLfEOfTwxCZ4O+MuhcHcfgNWTk0= github.com/ettle/strcase v0.1.1 h1:htFueZyVeE1XNnMEfbqp5r67qAN/4r6ya1ysq8Q+Zcw= github.com/ettle/strcase v0.1.1/go.mod h1:hzDLsPC7/lwKyBOywSHEP89nt2pDgdy+No1NBA9o9VY= +github.com/ettle/strcase v0.2.0 h1:fGNiVF21fHXpX1niBgk0aROov1LagYsOwV/xqKDKR/Q= +github.com/ettle/strcase v0.2.0/go.mod h1:DajmHElDSaX76ITe3/VHVyMin4LWSJN5Z909Wp+ED1A= github.com/fatih/color v1.14.1 h1:qfhVLaG5s+nCROl1zJsZRxFeYrHLqWroPOQ8BWiNb4w= github.com/fatih/color v1.14.1/go.mod h1:2oHN61fhTpgcxD3TSWCgKDiH1+x4OiDVVGH8WlgGZGg= github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs= github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw= +github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM= +github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE= github.com/fatih/structtag v1.2.0 h1:/OdNE99OxoI/PqaW/SuSK9uxxT3f/tcSZgon/ssNSx4= github.com/fatih/structtag v1.2.0/go.mod h1:mBJUNpUnHmRKrKlQQlmCrh5PuhftFbNv8Ys4/aAZl94= github.com/firefart/nonamedreturns v1.0.4 h1:abzI1p7mAEPYuR4A+VLKn4eNDOycjYo2phmY9sfv40Y= @@ -172,12 +216,16 @@ github.com/fsnotify/fsnotify v1.5.4 h1:jRbGcIw6P2Meqdwuo0H1p6JVLbL5DHKAKlYndzMwV github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= github.com/fzipp/gocyclo v0.6.0 h1:lsblElZG7d3ALtGMx9fmxeTKZaLLpU8mET09yN4BBLo= github.com/fzipp/gocyclo v0.6.0/go.mod h1:rXPyn8fnlpa0R2csP/31uerbiVBugk5whMdlyaLkLoA= +github.com/ghostiam/protogetter v0.3.5 h1:+f7UiF8XNd4w3a//4DnusQ2SZjPkUjxkMEfjbxOK4Ug= +github.com/ghostiam/protogetter v0.3.5/go.mod h1:7lpeDnEJ1ZjL/YtyoN99ljO4z0pd3H0d18/t2dPBxHw= github.com/go-critic/go-critic v0.6.7 h1:1evPrElnLQ2LZtJfmNDzlieDhjnq36SLgNzisx06oPM= github.com/go-critic/go-critic v0.6.7/go.mod h1:fYZUijFdcnxgx6wPjQA2QEjIRaNCT0gO8bhexy6/QmE= github.com/go-critic/go-critic v0.7.0 h1:tqbKzB8pqi0NsRZ+1pyU4aweAF7A7QN0Pi4Q02+rYnQ= github.com/go-critic/go-critic v0.7.0/go.mod h1:moYzd7GdVXE2C2hYTwd7h0CPcqlUeclsyBRwMa38v64= github.com/go-critic/go-critic v0.8.1 h1:16omCF1gN3gTzt4j4J6fKI/HnRojhEp+Eks6EuKw3vw= github.com/go-critic/go-critic v0.8.1/go.mod h1:kpzXl09SIJX1cr9TB/g/sAG+eFEl7ZS9f9cqvZtyNl0= +github.com/go-critic/go-critic v0.11.2 h1:81xH/2muBphEgPtcwH1p6QD+KzXl2tMSi3hXjBSxDnM= +github.com/go-critic/go-critic v0.11.2/go.mod h1:OePaicfjsf+KPy33yq4gzv6CO7TEQ9Rom6ns1KsJnl8= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= @@ -198,6 +246,8 @@ github.com/go-toolsmith/astequal v1.0.2/go.mod h1:9Ai4UglvtR+4up+bAD4+hCj7iTo4m/ github.com/go-toolsmith/astequal v1.0.3/go.mod h1:9Ai4UglvtR+4up+bAD4+hCj7iTo4m/OXVTSLnCyTAx4= github.com/go-toolsmith/astequal v1.1.0 h1:kHKm1AWqClYn15R0K1KKE4RG614D46n+nqUQ06E1dTw= github.com/go-toolsmith/astequal v1.1.0/go.mod h1:sedf7VIdCL22LD8qIvv7Nn9MuWJruQA/ysswh64lffQ= +github.com/go-toolsmith/astequal v1.2.0 h1:3Fs3CYZ1k9Vo4FzFhwwewC3CHISHDnVUPC4x0bI2+Cw= +github.com/go-toolsmith/astequal v1.2.0/go.mod h1:c8NZ3+kSFtFY/8lPso4v8LuJjdJiUFVnSuU3s0qrrDY= github.com/go-toolsmith/astfmt v1.1.0 h1:iJVPDPp6/7AaeLJEruMsBUlOYCmvg0MoCfJprsOmcco= github.com/go-toolsmith/astfmt v1.1.0/go.mod h1:OrcLlRwu0CuiIBp/8b5PYF9ktGVZUjlNMV634mhwuQ4= github.com/go-toolsmith/astp v1.1.0 h1:dXPuCl6u2llURjdPLLDxJeZInAeZ0/eZwFJmqZMnpQA= @@ -207,6 +257,8 @@ github.com/go-toolsmith/strparse v1.1.0 h1:GAioeZUK9TGxnLS+qfdqNbA4z0SSm5zVNtCQi github.com/go-toolsmith/strparse v1.1.0/go.mod h1:7ksGy58fsaQkGQlY8WVoBFNyEPMGuJin1rfoPS4lBSQ= github.com/go-toolsmith/typep v1.1.0 h1:fIRYDyF+JywLfqzyhdiHzRop/GQDxxNhLGQ6gFUNHus= github.com/go-toolsmith/typep v1.1.0/go.mod h1:fVIw+7zjdsMxDA3ITWnH1yOiw1rnTQKCsF/sk2H/qig= +github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 h1:TQcrn6Wq+sKGkpyPvppOz99zsMBaUOKXq6HSv655U1c= +github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= github.com/go-xmlfmt/xmlfmt v1.1.2 h1:Nea7b4icn8s57fTx1M5AI4qQT5HEM3rVUO8MuE6g80U= github.com/go-xmlfmt/xmlfmt v1.1.2/go.mod h1:aUCEOzzezBEjDBbFBoSiya/gduyIiWYRP6CnSFIV8AM= github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= @@ -242,6 +294,8 @@ github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= +github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2 h1:23T5iq8rbUYlhpt5DB4XJkc6BU31uODLD1o1gKvZmD0= github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2/go.mod h1:k9Qvh+8juN+UKMCS/3jFtGICgW8O96FVaZsaxdzDkR4= github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a h1:w8hkcTqaFpzKqonE9uMCefW1WDie15eSP/4MssdenaM= @@ -250,22 +304,34 @@ github.com/golangci/go-misc v0.0.0-20220329215616-d24fe342adfe h1:6RGUuS7EGotKx6 github.com/golangci/go-misc v0.0.0-20220329215616-d24fe342adfe/go.mod h1:gjqyPShc/m8pEMpk0a3SeagVb0kaqvhscv+i9jI5ZhQ= github.com/golangci/gofmt v0.0.0-20220901101216-f2edd75033f2 h1:amWTbTGqOZ71ruzrdA+Nx5WA3tV1N0goTspwmKCQvBY= github.com/golangci/gofmt v0.0.0-20220901101216-f2edd75033f2/go.mod h1:9wOXstvyDRshQ9LggQuzBCGysxs3b6Uo/1MvYCR2NMs= +github.com/golangci/gofmt v0.0.0-20231018234816-f50ced29576e h1:ULcKCDV1LOZPFxGZaA6TlQbiM3J2GCPnkx/bGF6sX/g= +github.com/golangci/gofmt v0.0.0-20231018234816-f50ced29576e/go.mod h1:Pm5KhLPA8gSnQwrQ6ukebRcapGb/BG9iUkdaiCcGHJM= github.com/golangci/golangci-lint v1.51.2 h1:yIcsT1X9ZYHdSpeWXRT1ORC/FPGSqDHbHsu9uk4FK7M= github.com/golangci/golangci-lint v1.51.2/go.mod h1:KH9Q7/3glwpYSknxUgUyLlAv46A8fsSKo1hH2wDvkr8= github.com/golangci/golangci-lint v1.52.2 h1:FrPElUUI5rrHXg1mQ7KxI1MXPAw5lBVskiz7U7a8a1A= github.com/golangci/golangci-lint v1.52.2/go.mod h1:S5fhC5sHM5kE22/HcATKd1XLWQxX+y7mHj8B5H91Q/0= github.com/golangci/golangci-lint v1.53.3 h1:CUcRafczT4t1F+mvdkUm6KuOpxUZTl0yWN/rSU6sSMo= github.com/golangci/golangci-lint v1.53.3/go.mod h1:W4Gg3ONq6p3Jl+0s/h9Gr0j7yEgHJWWZO2bHl2tBUXM= +github.com/golangci/golangci-lint v1.57.1 h1:cqhpzkzjDwdN12rfMf1SUyyKyp88a1SltNqEYGS0nJw= +github.com/golangci/golangci-lint v1.57.1/go.mod h1:zLcHhz3NHc88T5zV2j75lyc0zH3LdOPOybblYa4p0oI= github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0 h1:MfyDlzVjl1hoaPzPD4Gpb/QgoRfSBR0jdhwGyAWwMSA= github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0/go.mod h1:66R6K6P6VWk9I95jvqGxkqJxVWGFy9XlDwLwVz1RCFg= github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca h1:kNY3/svz5T29MYHubXix4aDDuE3RWHkPvopM/EDv/MA= github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca/go.mod h1:tvlJhZqDe4LMs4ZHD0oMUlt9G2LWuDGoisJTBzLMV9o= github.com/golangci/misspell v0.4.0 h1:KtVB/hTK4bbL/S6bs64rYyk8adjmh1BygbBiaAiX+a0= github.com/golangci/misspell v0.4.0/go.mod h1:W6O/bwV6lGDxUCChm2ykw9NQdd5bYd1Xkjo88UcWyJc= +github.com/golangci/misspell v0.4.1 h1:+y73iSicVy2PqyX7kmUefHusENlrP9YwuHZHPLGQj/g= +github.com/golangci/misspell v0.4.1/go.mod h1:9mAN1quEo3DlpbaIKKyEvRxK1pwqR9s/Sea1bJCtlNI= +github.com/golangci/plugin-module-register v0.1.1 h1:TCmesur25LnyJkpsVrupv1Cdzo+2f7zX0H6Jkw1Ol6c= +github.com/golangci/plugin-module-register v0.1.1/go.mod h1:TTpqoB6KkwOJMV8u7+NyXMrkwwESJLOkfl9TxR1DGFc= github.com/golangci/revgrep v0.0.0-20220804021717-745bb2f7c2e6 h1:DIPQnGy2Gv2FSA4B/hh8Q7xx3B7AIDk3DAMeHclH1vQ= github.com/golangci/revgrep v0.0.0-20220804021717-745bb2f7c2e6/go.mod h1:0AKcRCkMoKvUvlf89F6O7H2LYdhr1zBh736mBItOdRs= +github.com/golangci/revgrep v0.5.2 h1:EndcWoRhcnfj2NHQ+28hyuXpLMF+dQmCN+YaeeIl4FU= +github.com/golangci/revgrep v0.5.2/go.mod h1:bjAMA+Sh/QUfTDcHzxfyHxr4xKvllVr/0sCv2e7jJHA= github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4 h1:zwtduBRr5SSWhqsYNgcuWO2kFlpdOZbP0+yRjmvPGys= github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4/go.mod h1:Izgrg8RkN3rCIMLGE9CyYmU9pY2Jer6DgANEnZ/L/cQ= +github.com/golangci/unconvert v0.0.0-20240309020433-c5143eacb3ed h1:IURFTjxeTfNFP0hTEi1YKjB/ub8zkpaOqFFMApi2EAs= +github.com/golangci/unconvert v0.0.0-20240309020433-c5143eacb3ed/go.mod h1:XLXN8bNw4CGRPaqgl3bv/lhz7bsGPh4/xSaMTbo2vkQ= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= @@ -282,6 +348,8 @@ github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= @@ -305,6 +373,8 @@ github.com/gordonklaus/ineffassign v0.0.0-20230107090616-13ace0543b28 h1:9alfqbr github.com/gordonklaus/ineffassign v0.0.0-20230107090616-13ace0543b28/go.mod h1:Qcp2HIAYhR7mNUVSIxZww3Guk4it82ghYcEXIAk+QT0= github.com/gordonklaus/ineffassign v0.0.0-20230610083614-0e73809eb601 h1:mrEEilTAUmaAORhssPPkxj84TsHrPMLBGW2Z4SoTxm8= github.com/gordonklaus/ineffassign v0.0.0-20230610083614-0e73809eb601/go.mod h1:Qcp2HIAYhR7mNUVSIxZww3Guk4it82ghYcEXIAk+QT0= +github.com/gordonklaus/ineffassign v0.1.0 h1:y2Gd/9I7MdY1oEIt+n+rowjBNDcLQq3RsH5hwJd0f9s= +github.com/gordonklaus/ineffassign v0.1.0/go.mod h1:Qcp2HIAYhR7mNUVSIxZww3Guk4it82ghYcEXIAk+QT0= github.com/gostaticanalysis/analysisutil v0.0.3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= github.com/gostaticanalysis/analysisutil v0.1.0/go.mod h1:dMhHRU9KTiDcuLGdy87/2gTR8WruwYZrKdRq9m1O6uw= github.com/gostaticanalysis/analysisutil v0.7.1 h1:ZMCjoue3DtDWQ5WyU16YbjbQEQ3VuzwxALrpYd+HeKk= @@ -339,10 +409,14 @@ github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2 github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/jgautheron/goconst v1.5.1 h1:HxVbL1MhydKs8R8n/HE5NPvzfaYmQJA3o879lE4+WcM= github.com/jgautheron/goconst v1.5.1/go.mod h1:aAosetZ5zaeC/2EfMeRswtxUFBpe2Hr7HzkgX4fanO4= +github.com/jgautheron/goconst v1.7.0 h1:cEqH+YBKLsECnRSd4F4TK5ri8t/aXtt/qoL0Ft252B0= +github.com/jgautheron/goconst v1.7.0/go.mod h1:aAosetZ5zaeC/2EfMeRswtxUFBpe2Hr7HzkgX4fanO4= github.com/jingyugao/rowserrcheck v1.1.1 h1:zibz55j/MJtLsjP1OF4bSdgXxwL1b+Vn7Tjzq7gFzUs= github.com/jingyugao/rowserrcheck v1.1.1/go.mod h1:4yvlZSDb3IyDTUZJUmpZfm2Hwok+Dtp+nu2qOq+er9c= github.com/jirfag/go-printf-func-name v0.0.0-20200119135958-7558a9eaa5af h1:KA9BjwUk7KlCh6S9EAGWBt1oExIUv9WyNCiRz5amv48= github.com/jirfag/go-printf-func-name v0.0.0-20200119135958-7558a9eaa5af/go.mod h1:HEWGJkRDzjJY2sqdDwxccsGicWEf9BQOZsq2tV+xzM0= +github.com/jjti/go-spancheck v0.5.3 h1:vfq4s2IB8T3HvbpiwDTYgVPj1Ze/ZSXrTtaZRTc7CuM= +github.com/jjti/go-spancheck v0.5.3/go.mod h1:eQdOX1k3T+nAKvZDyLC3Eby0La4dZ+I19iOl5NzSPFE= github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= @@ -358,8 +432,12 @@ github.com/junk1tm/musttag v0.4.5 h1:d+mpJ1vn6WFEVKHwkgJiIedis1u/EawKOuUTygAUtCo github.com/junk1tm/musttag v0.4.5/go.mod h1:XkcL/9O6RmD88JBXb+I15nYRl9W4ExhgQeCBEhfMC8U= github.com/junk1tm/musttag v0.5.0 h1:bV1DTdi38Hi4pG4OVWa7Kap0hi0o7EczuK6wQt9zPOM= github.com/junk1tm/musttag v0.5.0/go.mod h1:PcR7BA+oREQYvHwgjIDmw3exJeds5JzRcvEJTfjrA0M= +github.com/karamaru-alpha/copyloopvar v1.0.8 h1:gieLARwuByhEMxRwM3GRS/juJqFbLraftXIKDDNJ50Q= +github.com/karamaru-alpha/copyloopvar v1.0.8/go.mod h1:u7CIfztblY0jZLOQZgH3oYsJzpC2A7S6u/lfgSXHy0k= github.com/kisielk/errcheck v1.6.3 h1:dEKh+GLHcWm2oN34nMvDzn1sqI0i0WxPvrgiJA5JuM8= github.com/kisielk/errcheck v1.6.3/go.mod h1:nXw/i/MfnvRHqXa7XXmQMUB0oNFGuBrNI8d8NLy0LPw= +github.com/kisielk/errcheck v1.7.0 h1:+SbscKmWJ5mOK/bO1zS60F5I9WwZDWOfRsC4RwfwRV0= +github.com/kisielk/errcheck v1.7.0/go.mod h1:1kLL+jV4e+CFfueBmI1dSK2ADDyQnlrnrY/FqKluHJQ= github.com/kisielk/gotool v1.0.0 h1:AV2c/EiW3KqPNT9ZKl07ehoAGi4C5/01Cfbblndcapg= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/kkHAIKE/contextcheck v1.1.3 h1:l4pNvrb8JSwRd51ojtcOxOeHJzHek+MtOyXbaR0uvmw= @@ -379,6 +457,8 @@ github.com/kunwardeep/paralleltest v1.0.6 h1:FCKYMF1OF2+RveWlABsdnmsvJrei5aoyZoa github.com/kunwardeep/paralleltest v1.0.6/go.mod h1:Y0Y0XISdZM5IKm3TREQMZ6iteqn1YuwCsJO/0kL9Zes= github.com/kunwardeep/paralleltest v1.0.7 h1:2uCk94js0+nVNQoHZNLBkAR1DQJrVzw6T0RMzJn55dQ= github.com/kunwardeep/paralleltest v1.0.7/go.mod h1:2C7s65hONVqY7Q5Efj5aLzRCNLjw2h4eMc9EcypGjcY= +github.com/kunwardeep/paralleltest v1.0.10 h1:wrodoaKYzS2mdNVnc4/w31YaXFtsc21PCTdvWJ/lDDs= +github.com/kunwardeep/paralleltest v1.0.10/go.mod h1:2C7s65hONVqY7Q5Efj5aLzRCNLjw2h4eMc9EcypGjcY= github.com/kyoh86/exportloopref v0.1.11 h1:1Z0bcmTypkL3Q4k+IDHMWTcnCliEZcaPiIe0/ymEyhQ= github.com/kyoh86/exportloopref v0.1.11/go.mod h1:qkV4UF1zGl6EkF1ox8L5t9SwyeBAZ3qLMd6up458uqA= github.com/ldez/gomoddirectives v0.2.3 h1:y7MBaisZVDYmKvt9/l1mjNCiSA1BVn34U0ObUcJwlhA= @@ -391,6 +471,8 @@ github.com/leonklingele/grouper v1.1.1 h1:suWXRU57D4/Enn6pXR0QVqqWWrnJ9Osrz+5rjt github.com/leonklingele/grouper v1.1.1/go.mod h1:uk3I3uDfi9B6PeUjsCKi6ndcf63Uy7snXgR4yDYQVDY= github.com/lufeee/execinquery v1.2.1 h1:hf0Ems4SHcUGBxpGN7Jz78z1ppVkP/837ZlETPCEtOM= github.com/lufeee/execinquery v1.2.1/go.mod h1:EC7DrEKView09ocscGHC+apXMIaorh4xqSxS/dy8SbM= +github.com/macabu/inamedparam v0.1.3 h1:2tk/phHkMlEL/1GNe/Yf6kkR/hkcUdAEY3L0hjYV1Mk= +github.com/macabu/inamedparam v0.1.3/go.mod h1:93FLICAIk/quk7eaPPQvbzihUdn/QkGDwIZEoLtpH6I= github.com/magiconair/properties v1.8.6 h1:5ibWZ6iY0NctNGWo87LalDlEZ6R41TqbbDamhfG/Qzo= github.com/magiconair/properties v1.8.6/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= github.com/maratori/testableexamples v1.0.0 h1:dU5alXRrD8WKSjOUnmJZuzdxWOEQ57+7s93SLMxb2vI= @@ -409,6 +491,8 @@ github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovk github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng= github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0= github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= @@ -421,6 +505,8 @@ github.com/mgechev/revive v1.3.1 h1:OlQkcH40IB2cGuprTPcjB0iIUddgVZgGmDX3IAMR8D4= github.com/mgechev/revive v1.3.1/go.mod h1:YlD6TTWl2B8A103R9KWJSPVI9DrEf+oqr15q21Ld+5I= github.com/mgechev/revive v1.3.2 h1:Wb8NQKBaALBJ3xrrj4zpwJwqwNA6nDpyJSEQWcCka6U= github.com/mgechev/revive v1.3.2/go.mod h1:UCLtc7o5vg5aXCwdUTU1kEBQ1v+YXPAkYDIDXbrs5I0= +github.com/mgechev/revive v1.3.7 h1:502QY0vQGe9KtYJ9FpxMz9rL+Fc/P13CI5POL4uHCcE= +github.com/mgechev/revive v1.3.7/go.mod h1:RJ16jUbF0OWC3co/+XTxmFNgEpUPwnnA0BRllX2aDNA= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= @@ -444,6 +530,8 @@ github.com/nishanths/exhaustive v0.9.5 h1:TzssWan6orBiLYVqewCG8faud9qlFntJE30ACp github.com/nishanths/exhaustive v0.9.5/go.mod h1:IbwrGdVMizvDcIxPYGVdQn5BqWJaOwpCvg4RGb8r/TA= github.com/nishanths/exhaustive v0.11.0 h1:T3I8nUGhl/Cwu5Z2hfc92l0e04D2GEW6e0l8pzda2l0= github.com/nishanths/exhaustive v0.11.0/go.mod h1:RqwDsZ1xY0dNdqHho2z6X+bgzizwbLYOWnZbbl2wLB4= +github.com/nishanths/exhaustive v0.12.0 h1:vIY9sALmw6T/yxiASewa4TQcFsVYZQQRUQJhKRf3Swg= +github.com/nishanths/exhaustive v0.12.0/go.mod h1:mEZ95wPIZW+x8kC4TgC+9YCUgiST7ecevsVDTgc2obs= github.com/nishanths/predeclared v0.2.2 h1:V2EPdZPliZymNAn79T8RkNApBjMmVKh5XRpLm/w98Vk= github.com/nishanths/predeclared v0.2.2/go.mod h1:RROzoN6TnGQupbC+lqggsOlcgysk3LMK/HI84Mp280c= github.com/nunnatsa/ginkgolinter v0.8.1 h1:/y4o/0hV+ruUHj4xXh89xlFjoaitnI4LnkpuYs02q1c= @@ -452,6 +540,8 @@ github.com/nunnatsa/ginkgolinter v0.9.0 h1:Sm0zX5QfjJzkeCjEp+t6d3Ha0jwvoDjleP9XC github.com/nunnatsa/ginkgolinter v0.9.0/go.mod h1:FHaMLURXP7qImeH6bvxWJUpyH+2tuqe5j4rW1gxJRmI= github.com/nunnatsa/ginkgolinter v0.12.1 h1:vwOqb5Nu05OikTXqhvLdHCGcx5uthIYIl0t79UVrERQ= github.com/nunnatsa/ginkgolinter v0.12.1/go.mod h1:AK8Ab1PypVrcGUusuKD8RDcl2KgsIwvNaaxAlyHSzso= +github.com/nunnatsa/ginkgolinter v0.16.1 h1:uDIPSxgVHZ7PgbJElRDGzymkXH+JaF7mjew+Thjnt6Q= +github.com/nunnatsa/ginkgolinter v0.16.1/go.mod h1:4tWRinDN1FeJgU+iJANW/kz7xKN5nYRAOfJDQUS9dOQ= github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= github.com/otiai10/copy v1.2.0/go.mod h1:rrF5dJ5F0t/EWSYODDu4j9/vEeYHMkc8jt0zJChqQWw= @@ -463,6 +553,8 @@ github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3v github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= github.com/pelletier/go-toml/v2 v2.0.5 h1:ipoSadvV8oGUjnUbMub59IDPPwfxF694nG/jwbMiyQg= github.com/pelletier/go-toml/v2 v2.0.5/go.mod h1:OMHamSCAODeSsVrwwvcJOaoN0LIUIaFVNZzmWyNfXas= +github.com/pelletier/go-toml/v2 v2.2.0 h1:QLgLl2yMN7N+ruc31VynXs1vhMZa7CeHHejIeBAsoHo= +github.com/pelletier/go-toml/v2 v2.2.0/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h4qDAS4n929Rs= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= @@ -476,6 +568,8 @@ github.com/polyfloyd/go-errorlint v1.4.0 h1:b+sQ5HibPIAjEZwtuwU8Wz/u0dMZ7YL+bk+9 github.com/polyfloyd/go-errorlint v1.4.0/go.mod h1:qJCkPeBn+0EXkdKTrUCcuFStM2xrDKfxI3MGLXPexUs= github.com/polyfloyd/go-errorlint v1.4.2 h1:CU+O4181IxFDdPH6t/HT7IiDj1I7zxNi1RIUxYwn8d0= github.com/polyfloyd/go-errorlint v1.4.2/go.mod h1:k6fU/+fQe38ednoZS51T7gSIGQW1y94d6TkSr35OzH8= +github.com/polyfloyd/go-errorlint v1.4.8 h1:jiEjKDH33ouFktyez7sckv6pHWif9B7SuS8cutDXFHw= +github.com/polyfloyd/go-errorlint v1.4.8/go.mod h1:NNCxFcFjZcw3xNjVdCchERkEM6Oz7wta2XJVxRftwO4= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= @@ -500,6 +594,8 @@ github.com/prometheus/procfs v0.7.3 h1:4jVXhlkAyzOScmCkXBTOLRLTz8EeU+eyjrwB/EPq0 github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/quasilyte/go-ruleguard v0.3.19 h1:tfMnabXle/HzOb5Xe9CUZYWXKfkS1KwRmZyPmD9nVcc= github.com/quasilyte/go-ruleguard v0.3.19/go.mod h1:lHSn69Scl48I7Gt9cX3VrbsZYvYiBYszZOZW4A+oTEw= +github.com/quasilyte/go-ruleguard v0.4.2 h1:htXcXDK6/rO12kiTHKfHuqR4kr3Y4M0J0rOL6CH/BYs= +github.com/quasilyte/go-ruleguard v0.4.2/go.mod h1:GJLgqsLeo4qgavUoL8JeGFNS7qcisx3awV/w9eWTmNI= github.com/quasilyte/gogrep v0.5.0 h1:eTKODPXbI8ffJMN+W2aE0+oL0z/nh8/5eNdiO34SOAo= github.com/quasilyte/gogrep v0.5.0/go.mod h1:Cm9lpz9NZjEoL1tgZ2OgeUKPIxL1meE7eo60Z6Sk+Ng= github.com/quasilyte/regex/syntax v0.0.0-20200407221936-30656e2c4a95 h1:L8QM9bvf68pVdQ3bCFZMDmnt9yqcMBro1pC7F+IPYMY= @@ -512,18 +608,28 @@ github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ryancurrah/gomodguard v1.3.0 h1:q15RT/pd6UggBXVBuLps8BXRvl5GPBcwVA7BJHMLuTw= github.com/ryancurrah/gomodguard v1.3.0/go.mod h1:ggBxb3luypPEzqVtq33ee7YSN35V28XeGnid8dnni50= +github.com/ryancurrah/gomodguard v1.3.1 h1:fH+fUg+ngsQO0ruZXXHnA/2aNllWA1whly4a6UvyzGE= +github.com/ryancurrah/gomodguard v1.3.1/go.mod h1:DGFHzEhi6iJ0oIDfMuo3TgrS+L9gZvrEfmjjuelnRU0= github.com/ryanrolds/sqlclosecheck v0.4.0 h1:i8SX60Rppc1wRuyQjMciLqIzV3xnoHB7/tXbr6RGYNI= github.com/ryanrolds/sqlclosecheck v0.4.0/go.mod h1:TBRRjzL31JONc9i4XMinicuo+s+E8yKZ5FN8X3G6CKQ= +github.com/ryanrolds/sqlclosecheck v0.5.1 h1:dibWW826u0P8jNLsLN+En7+RqWWTYrjCB9fJfSfdyCU= +github.com/ryanrolds/sqlclosecheck v0.5.1/go.mod h1:2g3dUjoS6AL4huFdv6wn55WpLIDjY7ZgUR4J8HOO/XQ= github.com/sanposhiho/wastedassign/v2 v2.0.7 h1:J+6nrY4VW+gC9xFzUc+XjPD3g3wF3je/NsJFwFK7Uxc= github.com/sanposhiho/wastedassign/v2 v2.0.7/go.mod h1:KyZ0MWTwxxBmfwn33zh3k1dmsbF2ud9pAAGfoLfjhtI= +github.com/santhosh-tekuri/jsonschema/v5 v5.3.1 h1:lZUw3E0/J3roVtGQ+SCrUrg3ON6NgVqpn3+iol9aGu4= +github.com/santhosh-tekuri/jsonschema/v5 v5.3.1/go.mod h1:uToXkOrWAZ6/Oc07xWQrPOhJotwFIyu2bBVN41fcDUY= github.com/sashamelentyev/interfacebloat v1.1.0 h1:xdRdJp0irL086OyW1H/RTZTr1h/tMEOsumirXcOJqAw= github.com/sashamelentyev/interfacebloat v1.1.0/go.mod h1:+Y9yU5YdTkrNvoX0xHc84dxiN1iBi9+G8zZIhPVoNjQ= github.com/sashamelentyev/usestdlibvars v1.23.0 h1:01h+/2Kd+NblNItNeux0veSL5cBF1jbEOPrEhDzGYq0= github.com/sashamelentyev/usestdlibvars v1.23.0/go.mod h1:YPwr/Y1LATzHI93CqoPUN/2BzGQ/6N/cl/KwgR0B/aU= +github.com/sashamelentyev/usestdlibvars v1.25.0 h1:IK8SI2QyFzy/2OD2PYnhy84dpfNo9qADrRt6LH8vSzU= +github.com/sashamelentyev/usestdlibvars v1.25.0/go.mod h1:9nl0jgOfHKWNFS43Ojw0i7aRoS4j6EBye3YBhmAIRF8= github.com/securego/gosec/v2 v2.15.0 h1:v4Ym7FF58/jlykYmmhZ7mTm7FQvN/setNm++0fgIAtw= github.com/securego/gosec/v2 v2.15.0/go.mod h1:VOjTrZOkUtSDt2QLSJmQBMWnvwiQPEjg0l+5juIqGk8= github.com/securego/gosec/v2 v2.16.0 h1:Pi0JKoasQQ3NnoRao/ww/N/XdynIB9NRYYZT5CyOs5U= github.com/securego/gosec/v2 v2.16.0/go.mod h1:xvLcVZqUfo4aAQu56TNv7/Ltz6emAOQAEsrZrt7uGlI= +github.com/securego/gosec/v2 v2.19.0 h1:gl5xMkOI0/E6Hxx0XCY2XujA3V7SNSefA8sC+3f1gnk= +github.com/securego/gosec/v2 v2.19.0/go.mod h1:hOkDcHz9J/XIgIlPDXalxjeVYsHxoWUc5zJSHxcB8YM= github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c h1:W65qqJCIOVP4jpqPQ0YvHYKwcMEMVWIzWC5iNQQfBTU= github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c/go.mod h1:/PevMnwAxekIXwN8qQyfc5gl2NlkB3CQlkizAbOkeBs= github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= @@ -551,6 +657,8 @@ github.com/sourcegraph/go-diff v0.7.0 h1:9uLlrd5T46OXs5qpp8L/MTltk0zikUGi0sNNyCp github.com/sourcegraph/go-diff v0.7.0/go.mod h1:iBszgVvyxdc8SFZ7gm69go2KDdt3ag071iBaWPF6cjs= github.com/spf13/afero v1.8.2 h1:xehSyVa0YnHWsJ49JFljMpg1HX19V6NDZ1fkm1Xznbo= github.com/spf13/afero v1.8.2/go.mod h1:CtAatgMJh6bJEIs48Ay/FOnkljP3WeGUG0MC1RfAqwo= +github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8= +github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY= github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w= github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU= github.com/spf13/cobra v1.6.1 h1:o94oiPyS4KD1mPy2fmcYYHHfCxLqYjJOhGsCHFZtEzA= @@ -572,6 +680,8 @@ github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+ github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= +github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= github.com/stretchr/testify v1.1.4/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= @@ -586,6 +696,8 @@ github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/subosito/gotenv v1.4.1 h1:jyEFiXpy21Wm81FBN71l9VoMMV8H8jG+qIK3GCpY6Qs= github.com/subosito/gotenv v1.4.1/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= github.com/t-yuki/gocover-cobertura v0.0.0-20180217150009-aaee18c8195c h1:+aPplBwWcHBo6q9xrfWdMrT9o4kltkmmvpemgIjep/8= @@ -598,6 +710,8 @@ github.com/tenntenn/modver v1.0.1/go.mod h1:bePIyQPb7UeioSRkw3Q0XeMhYZSMx9B8ePqg github.com/tenntenn/text/transform v0.0.0-20200319021203-7eef512accb3/go.mod h1:ON8b8w4BN/kE1EOhwT0o+d62W65a6aPw1nouo9LMgyY= github.com/tetafro/godot v1.4.11 h1:BVoBIqAf/2QdbFmSwAWnaIqDivZdOV0ZRwEm6jivLKw= github.com/tetafro/godot v1.4.11/go.mod h1:LR3CJpxDVGlYOWn3ZZg1PgNZdTUvzsZWu8xaEohUpn8= +github.com/tetafro/godot v1.4.16 h1:4ChfhveiNLk4NveAZ9Pu2AN8QZ2nkUGFuadM9lrr5D0= +github.com/tetafro/godot v1.4.16/go.mod h1:2oVxTBSftRTh4+MVfUaUXR6bn2GDXCaMcOG4Dk3rfio= github.com/timakin/bodyclose v0.0.0-20221125081123-e39cf3fc478e h1:MV6KaVu/hzByHP0UvJ4HcMGE/8a6A4Rggc/0wx2AvJo= github.com/timakin/bodyclose v0.0.0-20221125081123-e39cf3fc478e/go.mod h1:27bSVNWSBOHm+qRp1T9qzaIpsWEP6TbUnei/43HK+PQ= github.com/timakin/bodyclose v0.0.0-20230421092635-574207250966 h1:quvGphlmUVU+nhpFa4gg4yJyTRJ13reZMDHrKwYw53M= @@ -610,22 +724,34 @@ github.com/tomarrell/wrapcheck/v2 v2.8.0 h1:qDzbir0xmoE+aNxGCPrn+rUSxAX+nG6vREgb github.com/tomarrell/wrapcheck/v2 v2.8.0/go.mod h1:ao7l5p0aOlUNJKI0qVwB4Yjlqutd0IvAB9Rdwyilxvg= github.com/tomarrell/wrapcheck/v2 v2.8.1 h1:HxSqDSN0sAt0yJYsrcYVoEeyM4aI9yAm3KQpIXDJRhQ= github.com/tomarrell/wrapcheck/v2 v2.8.1/go.mod h1:/n2Q3NZ4XFT50ho6Hbxg+RV1uyo2Uow/Vdm9NQcl5SE= +github.com/tomarrell/wrapcheck/v2 v2.8.3 h1:5ov+Cbhlgi7s/a42BprYoxsr73CbdMUTzE3bRDFASUs= +github.com/tomarrell/wrapcheck/v2 v2.8.3/go.mod h1:g9vNIyhb5/9TQgumxQyOEqDHsmGYcGsVMOx/xGkqdMo= github.com/tommy-muehle/go-mnd/v2 v2.5.1 h1:NowYhSdyE/1zwK9QCLeRb6USWdoif80Ie+v+yU8u1Zw= github.com/tommy-muehle/go-mnd/v2 v2.5.1/go.mod h1:WsUAkMJMYww6l/ufffCD3m+P7LEvr8TnZn9lwVDlgzw= github.com/ultraware/funlen v0.0.3 h1:5ylVWm8wsNwH5aWo9438pwvsK0QiqVuUrt9bn7S/iLA= github.com/ultraware/funlen v0.0.3/go.mod h1:Dp4UiAus7Wdb9KUZsYWZEWiRzGuM2kXM1lPbfaF6xhA= +github.com/ultraware/funlen v0.1.0 h1:BuqclbkY6pO+cvxoq7OsktIXZpgBSkYTQtmwhAK81vI= +github.com/ultraware/funlen v0.1.0/go.mod h1:XJqmOQja6DpxarLj6Jj1U7JuoS8PvL4nEqDaQhy22p4= github.com/ultraware/whitespace v0.0.5 h1:hh+/cpIcopyMYbZNVov9iSxvJU3OYQg78Sfaqzi/CzI= github.com/ultraware/whitespace v0.0.5/go.mod h1:aVMh/gQve5Maj9hQ/hg+F75lr/X5A89uZnzAmWSineA= +github.com/ultraware/whitespace v0.1.0 h1:O1HKYoh0kIeqE8sFqZf1o0qbORXUCOQFrlaQyZsczZw= +github.com/ultraware/whitespace v0.1.0/go.mod h1:/se4r3beMFNmewJ4Xmz0nMQ941GJt+qmSHGP9emHYe0= github.com/uudashr/gocognit v1.0.6 h1:2Cgi6MweCsdB6kpcVQp7EW4U23iBFQWfTXiWlyp842Y= github.com/uudashr/gocognit v1.0.6/go.mod h1:nAIUuVBnYU7pcninia3BHOvQkpQCeO76Uscky5BOwcY= +github.com/uudashr/gocognit v1.1.2 h1:l6BAEKJqQH2UpKAPKdMfZf5kE4W/2xk8pfU1OVLvniI= +github.com/uudashr/gocognit v1.1.2/go.mod h1:aAVdLURqcanke8h3vg35BC++eseDm66Z7KmchI5et4k= github.com/xen0n/gosmopolitan v1.2.1 h1:3pttnTuFumELBRSh+KQs1zcz4fN6Zy7aB0xlnQSn1Iw= github.com/xen0n/gosmopolitan v1.2.1/go.mod h1:JsHq/Brs1o050OOdmzHeOr0N7OtlnKRAGAsElF8xBQA= +github.com/xen0n/gosmopolitan v1.2.2 h1:/p2KTnMzwRexIW8GlKawsTWOxn7UHA+jCMF/V8HHtvU= +github.com/xen0n/gosmopolitan v1.2.2/go.mod h1:7XX7Mj61uLYrj0qmeN0zi7XDon9JRAEhYQqAPLVNTeg= github.com/yagipy/maintidx v1.0.0 h1:h5NvIsCz+nRDapQ0exNv4aJ0yXSI0420omVANTv3GJM= github.com/yagipy/maintidx v1.0.0/go.mod h1:0qNf/I/CCZXSMhsRsrEPDZ+DkekpKLXAJfsTACwgXLk= github.com/yeya24/promlinter v0.2.0 h1:xFKDQ82orCU5jQujdaD8stOHiv8UN68BSdn2a8u8Y3o= github.com/yeya24/promlinter v0.2.0/go.mod h1:u54lkmBOZrpEbQQ6gox2zWKKLKu2SGe+2KOiextY+IA= github.com/ykadowak/zerologlint v0.1.2 h1:Um4P5RMmelfjQqQJKtE8ZW+dLZrXrENeIzWWKw800U4= github.com/ykadowak/zerologlint v0.1.2/go.mod h1:KaUskqF3e/v59oPmdq1U1DnKcuHokl2/K1U4pmIELKg= +github.com/ykadowak/zerologlint v0.1.5 h1:Gy/fMz1dFQN9JZTPjv1hxEk+sRWm05row04Yoolgdiw= +github.com/ykadowak/zerologlint v0.1.5/go.mod h1:KaUskqF3e/v59oPmdq1U1DnKcuHokl2/K1U4pmIELKg= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= @@ -635,6 +761,12 @@ github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1 github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= gitlab.com/bosi/decorder v0.2.3 h1:gX4/RgK16ijY8V+BRQHAySfQAb354T7/xQpDB2n10P0= gitlab.com/bosi/decorder v0.2.3/go.mod h1:9K1RB5+VPNQYtXtTDAzd2OEftsZb1oV0IrJrzChSdGE= +gitlab.com/bosi/decorder v0.4.1 h1:VdsdfxhstabyhZovHafFw+9eJ6eU0d2CkFNJcZz/NU4= +gitlab.com/bosi/decorder v0.4.1/go.mod h1:jecSqWUew6Yle1pCr2eLWTensJMmsxHsBwt+PVbkAqA= +go-simpler.org/musttag v0.9.0 h1:Dzt6/tyP9ONr5g9h9P3cnYWCxeBFRkd0uJL/w+1Mxos= +go-simpler.org/musttag v0.9.0/go.mod h1:gA9nThnalvNSKpEoyp3Ko4/vCX2xTpqKoUtNqXOnVR4= +go-simpler.org/sloglint v0.5.0 h1:2YCcd+YMuYpuqthCgubcF5lBSjb6berc5VMOYUHKrpY= +go-simpler.org/sloglint v0.5.0/go.mod h1:EUknX5s8iXqf18KQxKnaBHUPVriiPnOrPjjJcsaTcSQ= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= @@ -645,6 +777,8 @@ go.tmz.dev/musttag v0.7.0 h1:QfytzjTWGXZmChoX0L++7uQN+yRCPfyFm+whsM+lfGc= go.tmz.dev/musttag v0.7.0/go.mod h1:oTFPvgOkJmp5kYL02S8+jrH0eLrBIl57rzWeA26zDEM= go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= +go.uber.org/automaxprocs v1.5.3 h1:kWazyxZUrS3Gs4qUpbwo5kEIMGe/DAvi5Z4tl2NW4j8= +go.uber.org/automaxprocs v1.5.3/go.mod h1:eRbA25aqJrxAbsLO0xy5jVwPt7FQnRgjW+efnwa1WM0= go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= go.uber.org/zap v1.17.0 h1:MTjgFu6ZLKvY6Pvaqk97GlxNBuMpV4Hy/3P6tRGlI2U= @@ -675,11 +809,15 @@ golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e h1:+WEEuIdZHnUeJJmEUjyYC2gfU golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e/go.mod h1:Kr81I6Kryrl9sr8s2FK3vxD90NdsKWRuOIl2O4CvYbA= golang.org/x/exp v0.0.0-20230510235704-dd950f8aeaea h1:vLCWI/yYrdEHyN2JzIzPO3aaQJHQdp89IZBA/+azVC4= golang.org/x/exp v0.0.0-20230510235704-dd950f8aeaea/go.mod h1:V1LtkGg67GoY2N1AnLN78QLrzxkLyJw7RJb1gzOOz9w= +golang.org/x/exp v0.0.0-20240103183307-be819d1f06fc h1:ao2WRsKSzW6KuUY9IWPwWahcHCgR0s52IfwutMfEbdM= +golang.org/x/exp v0.0.0-20240103183307-be819d1f06fc/go.mod h1:iRJReGqOEeBhDZGkGbynYwcHlctCvnjTYIamk7uXpHI= golang.org/x/exp/typeparams v0.0.0-20220428152302-39d4317da171/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= golang.org/x/exp/typeparams v0.0.0-20230203172020-98cc5a0785f9 h1:6WHiuFL9FNjg8RljAaT7FNUuKDbvMqS1i5cr2OE2sLQ= golang.org/x/exp/typeparams v0.0.0-20230203172020-98cc5a0785f9/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= golang.org/x/exp/typeparams v0.0.0-20230224173230-c95f2b4c22f2 h1:J74nGeMgeFnYQJN59eFwh06jX/V8g0lB7LWpjSLxtgU= golang.org/x/exp/typeparams v0.0.0-20230224173230-c95f2b4c22f2/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= +golang.org/x/exp/typeparams v0.0.0-20240314144324-c7f7c6466f7f h1:phY1HzDcf18Aq9A8KkmRtY9WvOFIxN8wgfvy6Zm1DV8= +golang.org/x/exp/typeparams v0.0.0-20240314144324-c7f7c6466f7f/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -715,6 +853,8 @@ golang.org/x/mod v0.9.0 h1:KENHtAZL2y3NLMYZeHY9DW8HW8V+kQyJsY/V9JlKvCs= golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.10.0 h1:lFO9qtOdlre5W1jxS3r/4szv2/6iXxScdzjoBMXNhYk= golang.org/x/mod v0.10.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.16.0 h1:QX4fJ0Rr5cPQCF7O9lh9Se4pmwfwskqZfq5moyldzic= +golang.org/x/mod v0.16.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -783,6 +923,8 @@ golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.2.0 h1:PUR+T4wwASmuSTYdKjYHI5TD22Wy5ogLU5qZCOLxBrI= golang.org/x/sync v0.2.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ= +golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -847,6 +989,8 @@ golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4= +golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= @@ -870,6 +1014,8 @@ golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -954,6 +1100,8 @@ golang.org/x/tools v0.7.0 h1:W4OVu8VVOaIO0yzWMNdepAulS7YfoS3Zabrm8DOXXU4= golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s= golang.org/x/tools v0.9.3 h1:Gn1I8+64MsuTb/HpH+LmQtNas23LhUVr3rYZ0eKuaMM= golang.org/x/tools v0.9.3/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc= +golang.org/x/tools v0.19.0 h1:tfGCXNR1OsFG+sVdLAitlpjAvD/I6dHDKnYrpEZUHkw= +golang.org/x/tools v0.19.0/go.mod h1:qoJWxmGSIBmAeriMx19ogtrEPrGtDbPK634QFIcLAhc= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -1050,6 +1198,8 @@ google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp0 google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw= google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= +google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -1080,16 +1230,22 @@ honnef.co/go/tools v0.4.2 h1:6qXr+R5w+ktL5UkwEbPp+fEvfyoMPche6GkOpGHZcLc= honnef.co/go/tools v0.4.2/go.mod h1:36ZgoUOrqOk1GxwHhyryEkq8FQWkUO2xGuSMhUCcdvA= honnef.co/go/tools v0.4.3 h1:o/n5/K5gXqk8Gozvs2cnL0F2S1/g1vcGCAx2vETjITw= honnef.co/go/tools v0.4.3/go.mod h1:36ZgoUOrqOk1GxwHhyryEkq8FQWkUO2xGuSMhUCcdvA= +honnef.co/go/tools v0.4.7 h1:9MDAWxMoSnB6QoSqiVr7P5mtkT9pOc1kSxchzPCnqJs= +honnef.co/go/tools v0.4.7/go.mod h1:+rnGS1THNh8zMwnd2oVOTL9QF6vmfyG6ZXBULae2uc0= mvdan.cc/gofumpt v0.4.0 h1:JVf4NN1mIpHogBj7ABpgOyZc65/UUOkKQFkoURsz4MM= mvdan.cc/gofumpt v0.4.0/go.mod h1:PljLOHDeZqgS8opHRKLzp2It2VBuSdteAgqUfzMTxlQ= mvdan.cc/gofumpt v0.5.0 h1:0EQ+Z56k8tXjj/6TQD25BFNKQXpCvT0rnansIc7Ug5E= mvdan.cc/gofumpt v0.5.0/go.mod h1:HBeVDtMKRZpXyxFciAirzdKklDlGu8aAy1wEbH5Y9js= +mvdan.cc/gofumpt v0.6.0 h1:G3QvahNDmpD+Aek/bNOLrFR2XC6ZAdo62dZu65gmwGo= +mvdan.cc/gofumpt v0.6.0/go.mod h1:4L0wf+kgIPZtcCWXynNS2e6bhmj73umwnuXSZarixzA= mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed h1:WX1yoOaKQfddO/mLzdV4wptyWgoH/6hwLs7QHTixo0I= mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed/go.mod h1:Xkxe497xwlCKkIaQYRfC7CSLworTXY9RMqwhhCm+8Nc= mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b h1:DxJ5nJdkhDlLok9K6qO+5290kphDJbHOQO1DFFFTeBo= mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b/go.mod h1:2odslEg/xrtNQqCYg2/jCoyKnw3vv5biOc3JnIcYfL4= mvdan.cc/unparam v0.0.0-20221223090309-7455f1af531d h1:3rvTIIM22r9pvXk+q3swxUQAQOxksVMGK7sml4nG57w= mvdan.cc/unparam v0.0.0-20221223090309-7455f1af531d/go.mod h1:IeHQjmn6TOD+e4Z3RFiZMMsLVL+A96Nvptar8Fj71is= +mvdan.cc/unparam v0.0.0-20240104100049-c549a3470d14 h1:zCr3iRRgdk5eIikZNDphGcM6KGVTx3Yu+/Uu9Es254w= +mvdan.cc/unparam v0.0.0-20240104100049-c549a3470d14/go.mod h1:ZzZjEpJDOmx8TdVU6umamY3Xy0UAQUI2DHbf05USVbI= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/.bingo/variables.env b/.bingo/variables.env index cf844231b928d..c48e144db2237 100644 --- a/.bingo/variables.env +++ b/.bingo/variables.env @@ -14,7 +14,7 @@ CUE="${GOBIN}/cue-v0.5.0" DRONE="${GOBIN}/drone-v1.5.0" -GOLANGCI_LINT="${GOBIN}/golangci-lint-v1.53.3" +GOLANGCI_LINT="${GOBIN}/golangci-lint-v1.57.1" JB="${GOBIN}/jb-v0.5.1" @@ -22,5 +22,3 @@ LEFTHOOK="${GOBIN}/lefthook-v1.4.8" SWAGGER="${GOBIN}/swagger-v0.30.2" -WIRE="${GOBIN}/wire-v0.5.0" - diff --git a/.bingo/wire.mod b/.bingo/wire.mod deleted file mode 100644 index fc39b30da167c..0000000000000 --- a/.bingo/wire.mod +++ /dev/null @@ -1,5 +0,0 @@ -module _ // Auto generated by https://github.com/bwplotka/bingo. DO NOT EDIT - -go 1.16 - -require github.com/google/wire v0.5.0 // cmd/wire diff --git a/.bingo/wire.sum b/.bingo/wire.sum deleted file mode 100644 index 6d4b4b386440f..0000000000000 --- a/.bingo/wire.sum +++ /dev/null @@ -1,13 +0,0 @@ -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/subcommands v1.0.1 h1:/eqq+otEXm5vhfBrbREPCSVQbvofip6kIz+mX5TUH7k= -github.com/google/subcommands v1.0.1/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= -github.com/google/wire v0.5.0 h1:I7ELFeVBr3yfPIcc8+MWvrjk+3VjbcSzoXm3JVa+jD8= -github.com/google/wire v0.5.0/go.mod h1:ngWDr9Qvq3yZA10YrxfyGELY/AFWGVpy9c1LTRi1EoU= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/tools v0.0.0-20190422233926-fe54fb35175b h1:NVD8gBK33xpdqCaZVVtd6OFJp+3dxkXuz7+U7KaVN6s= -golang.org/x/tools v0.0.0-20190422233926-fe54fb35175b/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= diff --git a/.changelog-archive/CHANGELOG.2.md b/.changelog-archive/CHANGELOG.2.md index 34491f2731f88..7fc14a683dc40 100644 --- a/.changelog-archive/CHANGELOG.2.md +++ b/.changelog-archive/CHANGELOG.2.md @@ -105,7 +105,7 @@ - Notice to makers/users of custom data sources, there is a minor breaking change in 2.2 that require an update to custom data sources for them to work in 2.2. [Read this doc](https://github.com/grafana/grafana/tree/master/docs/sources/datasources/plugin_api.md) for more on the data source api change. -- Data source api changes, [PLUGIN_CHANGES.md](https://github.com/grafana/grafana/blob/master/public/app/plugins/PLUGIN_CHANGES.md) +- Data source api changes, [PLUGIN_CHANGES.md](https://github.com/grafana/grafana/blob/main/public/app/plugins/PLUGIN_CHANGES.md) - The duplicate query function used in data source editors is changed, and moveMetricQuery function was renamed **Tech (Note for devs)** diff --git a/.changelog-archive/CHANGELOG.3.md b/.changelog-archive/CHANGELOG.3.md index 12f18c3128765..258aa1ce2e432 100644 --- a/.changelog-archive/CHANGELOG.3.md +++ b/.changelog-archive/CHANGELOG.3.md @@ -198,7 +198,7 @@ slack channel (link to slack channel in readme). ### Breaking changes -- **Plugin API**: Both data source and panel plugin api (and plugin.json schema) have been updated, requiring an update to plugins. See [plugin api](https://github.com/grafana/grafana/blob/master/public/app/plugins/plugin_api.md) for more info. +- **Plugin API**: Both data source and panel plugin api (and plugin.json schema) have been updated, requiring an update to plugins. See [plugin api](https://github.com/grafana/grafana/blob/main/public/app/plugins/plugin_api.md) for more info. - **InfluxDB 0.8.x** The data source for the old version of influxdb (0.8.x) is no longer included in default builds, but can easily be installed via improved plugin system, closes [#3523](https://github.com/grafana/grafana/issues/3523) - **KairosDB** The data source is no longer included in default builds, but can easily be installed via improved plugin system, closes [#3524](https://github.com/grafana/grafana/issues/3524) - **Templating**: Templating value formats (glob/regex/pipe etc) are now handled automatically and not specified by the user, this makes variable values possible to reuse in many contexts. It can in some edge cases break existing dashboards that have template variables that do not reload on dashboard load. To fix any issue just go into template variable options and update the variable (so it's values are reloaded.). diff --git a/.changelog-archive/CHANGELOG.4.md b/.changelog-archive/CHANGELOG.4.md index bb93963a2b443..e919c0c51e3e9 100644 --- a/.changelog-archive/CHANGELOG.4.md +++ b/.changelog-archive/CHANGELOG.4.md @@ -100,7 +100,7 @@ See [security announcement](https://community.grafana.com/t/grafana-5-2-3-and-4- ## Tech - **Go**: Grafana is now built using golang 1.9 -- **Webpack**: Changed from systemjs to webpack (see readme or building from source guide for new build instructions). Systemjs is still used to load plugins but now plugins can only import a limited set of dependencies. See [PLUGIN_DEV.md](https://github.com/grafana/grafana/blob/master/PLUGIN_DEV.md) for more details on how this can effect some plugins. +- **Webpack**: Changed from systemjs to webpack (see readme or building from source guide for new build instructions). Systemjs is still used to load plugins but now plugins can only import a limited set of dependencies. See [PLUGIN_DEV.md](https://github.com/grafana/grafana/blob/main/PLUGIN_DEV.md) for more details on how this can effect some plugins. # 4.5.2 (2017-09-22) diff --git a/.changelog-archive/CHANGELOG.6.md b/.changelog-archive/CHANGELOG.6.md index 4cfbded16cab1..6d4ddfe0086de 100644 --- a/.changelog-archive/CHANGELOG.6.md +++ b/.changelog-archive/CHANGELOG.6.md @@ -1291,4 +1291,4 @@ repo on July 1st. Make sure you have switched to the new repo by then. The new r - **Text Panel**: The text panel does no longer by default allow unsanitized HTML. [#4117](https://github.com/grafana/grafana/issues/4117). This means that if you have text panels with scripts tags they will no longer work as before. To enable unsafe javascript execution in text panels enable the settings `disable_sanitize_html` under the section `[panels]` in your Grafana ini file, or set env variable `GF_PANELS_DISABLE_SANITIZE_HTML=true`. - **Dashboard**: Panel property `minSpan` replaced by `maxPerRow`. Dashboard migration will automatically migrate all dashboard panels using the `minSpan` property to the new `maxPerRow` property [#12991](https://github.com/grafana/grafana/pull/12991) -For older release notes, refer to the [CHANGELOG_ARCHIVE.md](https://github.com/grafana/grafana/blob/master/CHANGELOG_ARCHIVE.md) +For older release notes, refer to the [CHANGELOG_ARCHIVE.md](https://github.com/grafana/grafana/blob/main/CHANGELOG_ARCHIVE.md) diff --git a/.changelog-archive/CHANGELOG.7.md b/.changelog-archive/CHANGELOG.7.md index baa857fcdfc88..504788b7481e4 100644 --- a/.changelog-archive/CHANGELOG.7.md +++ b/.changelog-archive/CHANGELOG.7.md @@ -544,7 +544,7 @@ Issue [#29407](https://github.com/grafana/grafana/issues/29407) We have upgraded AngularJS from version 1.6.6 to 1.8.2. Due to this upgrade some old angular plugins might stop working and will require a small update. This is due to the deprecation and removal of pre-assigned bindings. So if your custom angular controllers expect component bindings in the controller constructor you need to move this code to an `$onInit` function. For more details on how to migrate AngularJS code open the [migration guide](https://docs.angularjs.org/guide/migration) and search for **pre-assigning bindings**. -In order not to break all angular panel plugins and data sources we have some custom [angular inject behavior](https://github.com/grafana/grafana/blob/master/public/app/core/injectorMonkeyPatch.ts) that makes sure that bindings for these controllers are still set before constructor is called so many old angular panels and data source plugins will still work. Issue [#28736](https://github.com/grafana/grafana/issues/28736) +In order not to break all angular panel plugins and data sources we have some custom [angular inject behavior](https://github.com/grafana/grafana/blob/main/public/app/core/injectorMonkeyPatch.ts) that makes sure that bindings for these controllers are still set before constructor is called so many old angular panels and data source plugins will still work. Issue [#28736](https://github.com/grafana/grafana/issues/28736) ### Deprecations @@ -1288,8 +1288,8 @@ This option to group query variable values into groups by tags has been an exper - **Datasource/Loki**: Support for [deprecated Loki endpoints](https://github.com/grafana/loki/blob/master/docs/api.md#lokis-http-api) has been removed. - **Backend plugins**: Grafana now requires backend plugins to be signed, otherwise Grafana will not load/start them. This is an additional security measure to make sure backend plugin binaries and files haven't been tampered with. Refer to [Upgrade Grafana](https://grafana.com/docs/grafana/latest/installation/upgrading/#upgrading-to-v7-0) for more information. - **Docker**: Our Ubuntu based images have been upgraded to Ubuntu [20.04 LTS](https://releases.ubuntu.com/20.04/). -- **@grafana/ui**: Forms migration notice, see [@grafana/ui changelog](https://github.com/grafana/grafana/blob/master/packages/grafana-ui/CHANGELOG.md) -- **@grafana/ui**: Select API change for creating custom values, see [@grafana/ui changelog](https://github.com/grafana/grafana/blob/master/packages/grafana-ui/CHANGELOG.md) +- **@grafana/ui**: Forms migration notice, see [@grafana/ui changelog](https://github.com/grafana/grafana/blob/main/packages/grafana-ui/CHANGELOG.md) +- **@grafana/ui**: Select API change for creating custom values, see [@grafana/ui changelog](https://github.com/grafana/grafana/blob/main/packages/grafana-ui/CHANGELOG.md) **Deprecation warnings** @@ -1304,7 +1304,7 @@ Not just visualizing data from anywhere, in Grafana 7 you can transform it too. Data transformations will provide a common set of data operations that were previously duplicated as custom features in many panels or data sources but are now an integral part of the Grafana data processing pipeline and something all data sources and panels can take advantage of. -In Grafana 7.0 we have a shared data model for both time series and table data that we call [DataFrame](https://github.com/grafana/grafana/blob/master/docs/sources/plugins/developing/dataframe.md). A DataFrame is like a table with columns but we refer to columns as fields. A time series is simply a DataFrame with two fields (time & value). +In Grafana 7.0 we have a shared data model for both time series and table data that we call [DataFrame](https://github.com/grafana/grafana/blob/main/docs/sources/plugins/developing/dataframe.md). A DataFrame is like a table with columns but we refer to columns as fields. A time series is simply a DataFrame with two fields (time & value). **Transformations shipping in 7.0** @@ -1414,7 +1414,7 @@ We have also extended the time zone options so you can select any of the standar ### Features / Enhancements - **Docker**: Upgrade to Alpine 3.11. [#24056](https://github.com/grafana/grafana/pull/24056), [@aknuds1](https://github.com/aknuds1) -- **Forms**: Remove Forms namespace [BREAKING]. Will cause all `Forms` imports to stop working. See migration guide in [@grafana/ui changelog](https://github.com/grafana/grafana/blob/master/packages/grafana-ui/CHANGELOG.md)[#24378](https://github.com/grafana/grafana/pull/24378), [@tskarhed](https://github.com/tskarhed) +- **Forms**: Remove Forms namespace [BREAKING]. Will cause all `Forms` imports to stop working. See migration guide in [@grafana/ui changelog](https://github.com/grafana/grafana/blob/main/packages/grafana-ui/CHANGELOG.md)[#24378](https://github.com/grafana/grafana/pull/24378), [@tskarhed](https://github.com/tskarhed) ### Bug Fixes @@ -1429,7 +1429,7 @@ We have also extended the time zone options so you can select any of the standar - **Removed PhantomJS**: PhantomJS was deprecated in [Grafana v6.4](https://grafana.com/docs/grafana/latest/guides/whats-new-in-v6-4/#phantomjs-deprecation) and starting from Grafana v7.0.0, all PhantomJS support has been removed. This means that Grafana no longer ships with a built-in image renderer, and we advise you to install the [Grafana Image Renderer plugin](https://grafana.com/grafana/plugins/grafana-image-renderer). - **Docker**: Our Ubuntu based images have been upgraded to Ubuntu [20.04 LTS](https://releases.ubuntu.com/20.04/). - **Dashboard**: A global minimum dashboard refresh interval is now enforced and defaults to 5 seconds. -- **@grafana/ui**: Forms migration notice, see [@grafana/ui changelog](https://github.com/grafana/grafana/blob/master/packages/grafana-ui/CHANGELOG.md) +- **@grafana/ui**: Forms migration notice, see [@grafana/ui changelog](https://github.com/grafana/grafana/blob/main/packages/grafana-ui/CHANGELOG.md) - **Interval calculation**: There is now a new option `Max data points` that controls the auto interval `$__interval` calculation. Interval was previously calculated by dividing the panel width by the time range. With the new max data points option it is now easy to set `$__interval` to a dynamic value that is time range agnostic. For example if you set `Max data points` to 10 Grafana will dynamically set `$__interval` by dividing the current time range by 10. - **Datasource/Loki**: Support for [deprecated Loki endpoints](https://github.com/grafana/loki/blob/master/docs/api.md#lokis-http-api) has been removed. @@ -1484,8 +1484,8 @@ We have also extended the time zone options so you can select any of the standar - **Removed PhantomJS**: PhantomJS was deprecated in [Grafana v6.4](https://grafana.com/docs/grafana/latest/guides/whats-new-in-v6-4/#phantomjs-deprecation) and starting from Grafana v7.0.0, all PhantomJS support has been removed. This means that Grafana no longer ships with a built-in image renderer, and we advise you to install the [Grafana Image Renderer plugin](https://grafana.com/grafana/plugins/grafana-image-renderer). - **Docker**: Our Ubuntu based images have been upgraded to Ubuntu [20.04 LTS](https://releases.ubuntu.com/20.04/). - **Dashboard**: A global minimum dashboard refresh interval is now enforced and defaults to 5 seconds. -- **@grafana/ui**: Forms migration notice, see [@grafana/ui changelog](https://github.com/grafana/grafana/blob/master/packages/grafana-ui/CHANGELOG.md) -- **@grafana/ui**: Select API change for creating custom values, see [@grafana/ui changelog](https://github.com/grafana/grafana/blob/master/packages/grafana-ui/CHANGELOG.md) +- **@grafana/ui**: Forms migration notice, see [@grafana/ui changelog](https://github.com/grafana/grafana/blob/main/packages/grafana-ui/CHANGELOG.md) +- **@grafana/ui**: Select API change for creating custom values, see [@grafana/ui changelog](https://github.com/grafana/grafana/blob/main/packages/grafana-ui/CHANGELOG.md) - **Interval calculation**: There is now a new option `Max data points` that controls the auto interval `$__interval` calculation. Interval was previously calculated by dividing the panel width by the time range. With the new max data points option it is now easy to set `$__interval` to a dynamic value that is time range agnostic. For example if you set `Max data points` to 10 Grafana will dynamically set `$__interval` by dividing the current time range by 10. - **Datasource/Loki**: Support for [deprecated Loki endpoints](https://github.com/grafana/loki/blob/master/docs/api.md#lokis-http-api) has been removed. diff --git a/.drone.star b/.drone.star index a14146a7c144b..725aeec7850ab 100644 --- a/.drone.star +++ b/.drone.star @@ -19,7 +19,6 @@ load( ) load( "scripts/drone/pipelines/ci_images.star", - "publish_ci_build_container_image_pipeline", "publish_ci_windows_test_image_pipeline", ) load( @@ -51,7 +50,6 @@ def main(_ctx): }, "oss", "testing")] + integration_test_pipelines() + publish_ci_windows_test_image_pipeline() + - publish_ci_build_container_image_pipeline() + cronjobs() + secrets() ) diff --git a/.drone.yml b/.drone.yml index d0814c2440789..f4d661a86157a 100644 --- a/.drone.yml +++ b/.drone.yml @@ -5,7 +5,8 @@ depends_on: [] environment: EDITION: oss image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: pr-verify-drone node: @@ -17,14 +18,14 @@ services: [] steps: - commands: - echo $DRONE_RUNNER_NAME - image: alpine:3.18.3 + image: alpine:3.19.1 name: identify-runner - commands: - go build -o ./bin/build -ldflags '-extldflags -static' ./pkg/build/cmd depends_on: [] environment: CGO_ENABLED: 0 - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: compile-build-cmd - commands: - ./bin/build verify-drone @@ -55,7 +56,8 @@ depends_on: [] environment: EDITION: oss image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: pr-verify-starlark node: @@ -67,21 +69,21 @@ services: [] steps: - commands: - echo $DRONE_RUNNER_NAME - image: alpine:3.18.3 + image: alpine:3.19.1 name: identify-runner - commands: - go build -o ./bin/build -ldflags '-extldflags -static' ./pkg/build/cmd depends_on: [] environment: CGO_ENABLED: 0 - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: compile-build-cmd - commands: - go install github.com/bazelbuild/buildtools/buildifier@latest - buildifier --lint=warn -mode=check -r . depends_on: - compile-build-cmd - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: lint-starlark trigger: event: @@ -105,7 +107,8 @@ depends_on: [] environment: EDITION: oss image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: pr-test-frontend node: @@ -117,10 +120,11 @@ services: [] steps: - commands: - echo $DRONE_RUNNER_NAME - image: alpine:3.18.3 + image: alpine:3.19.1 name: identify-runner - commands: - - yarn install --immutable + - apk add --update g++ make python3 && ln -sf /usr/bin/python3 /usr/bin/python + - yarn install --immutable || yarn install --immutable depends_on: [] image: node:20.9.0-alpine name: yarn-install @@ -184,7 +188,8 @@ depends_on: [] environment: EDITION: oss image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: pr-lint-frontend node: @@ -217,10 +222,11 @@ steps: name: clone-enterprise - commands: - echo $DRONE_RUNNER_NAME - image: alpine:3.18.3 + image: alpine:3.19.1 name: identify-runner - commands: - - yarn install --immutable + - apk add --update g++ make python3 && ln -sf /usr/bin/python3 /usr/bin/python + - yarn install --immutable || yarn install --immutable depends_on: [] image: node:20.9.0-alpine name: yarn-install @@ -244,9 +250,9 @@ steps: \"\nTranslation extraction has not been committed. Please run 'yarn i18n:extract', commit the changes and push again.\"\n exit 1\n fi\n \ " - - yarn run i18n:compile depends_on: - yarn-install + failure: ignore image: node:20.9.0-alpine name: verify-i18n trigger: @@ -273,7 +279,8 @@ depends_on: [] environment: EDITION: oss image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: pr-test-backend node: @@ -306,7 +313,7 @@ steps: name: clone-enterprise - commands: - echo $DRONE_RUNNER_NAME - image: alpine:3.18.3 + image: alpine:3.19.1 name: identify-runner - commands: - '# It is required that code generated from Thema/CUE be committed and in sync @@ -316,7 +323,7 @@ steps: - apk add --update make - CODEGEN_VERIFY=1 make gen-cue depends_on: [] - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: verify-gen-cue - commands: - '# It is required that generated jsonnet is committed and in sync with its inputs.' @@ -325,21 +332,22 @@ steps: - apk add --update make - CODEGEN_VERIFY=1 make gen-jsonnet depends_on: [] - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: verify-gen-jsonnet - commands: - apk add --update make - make gen-go depends_on: - verify-gen-cue - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: wire-install - commands: - apk add --update build-base shared-mime-info shared-mime-info-lang - - go test -tags requires_buildifer -short -covermode=atomic -timeout=5m ./pkg/... + - go list -f '{{.Dir}}/...' -m | xargs go test -tags requires_buildifer -short -covermode=atomic + -timeout=5m depends_on: - wire-install - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: test-backend - commands: - apk add --update build-base @@ -348,7 +356,7 @@ steps: | grep -o '\(.*\)/' | sort -u) depends_on: - wire-install - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: test-backend-integration trigger: event: @@ -358,6 +366,7 @@ trigger: - docs/** - '*.md' include: + - Makefile - pkg/** - packaging/** - .drone.yml @@ -365,6 +374,7 @@ trigger: - go.sum - go.mod - public/app/plugins/**/plugin.json + - docs/sources/setup-grafana/configure-grafana/feature-toggles/** - devenv/** type: docker volumes: @@ -378,7 +388,8 @@ depends_on: [] environment: EDITION: oss image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: pr-lint-backend node: @@ -390,14 +401,14 @@ services: [] steps: - commands: - echo $DRONE_RUNNER_NAME - image: alpine:3.18.3 + image: alpine:3.19.1 name: identify-runner - commands: - go build -o ./bin/build -ldflags '-extldflags -static' ./pkg/build/cmd depends_on: [] environment: CGO_ENABLED: 0 - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: compile-build-cmd - commands: - apk add --update curl jq bash @@ -424,7 +435,7 @@ steps: - apk add --update make - make gen-go depends_on: [] - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: wire-install - commands: - apk add --update make build-base @@ -433,16 +444,16 @@ steps: - wire-install environment: CGO_ENABLED: "1" - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: lint-backend - commands: - go run scripts/modowners/modowners.go check go.mod - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: validate-modfile - commands: - apk add --update make - make swagger-validate - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: validate-openapi-spec trigger: event: @@ -452,6 +463,8 @@ trigger: - docs/** - '*.md' include: + - .golangci.toml + - Makefile - pkg/** - packaging/** - .drone.yml @@ -473,7 +486,8 @@ depends_on: [] environment: EDITION: oss image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: pr-build-e2e node: @@ -485,11 +499,11 @@ services: [] steps: - commands: - echo $DRONE_RUNNER_NAME - image: alpine:3.18.3 + image: alpine:3.19.1 name: identify-runner - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.42/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.50/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -498,7 +512,7 @@ steps: depends_on: [] environment: CGO_ENABLED: 0 - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: compile-build-cmd - commands: - '# It is required that code generated from Thema/CUE be committed and in sync @@ -508,7 +522,7 @@ steps: - apk add --update make - CODEGEN_VERIFY=1 make gen-cue depends_on: [] - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: verify-gen-cue - commands: - '# It is required that generated jsonnet is committed and in sync with its inputs.' @@ -517,17 +531,18 @@ steps: - apk add --update make - CODEGEN_VERIFY=1 make gen-jsonnet depends_on: [] - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: verify-gen-jsonnet - commands: - apk add --update make - make gen-go depends_on: - verify-gen-cue - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: wire-install - commands: - - yarn install --immutable + - apk add --update g++ make python3 && ln -sf /usr/bin/python3 /usr/bin/python + - yarn install --immutable || yarn install --immutable depends_on: [] image: node:20.9.0-alpine name: yarn-install @@ -556,11 +571,14 @@ steps: token: from_secret: drone_token - commands: - - /src/grafana-build package --distro=linux/amd64,linux/arm64 --go-version=1.20.10 - --yarn-cache=$$YARN_CACHE_FOLDER --build-id=$$DRONE_BUILD_NUMBER --grafana-dir=$$PWD - > packages.txt + - /src/grafana-build artifacts -a targz:grafana:linux/amd64 -a targz:grafana:linux/arm64 + -a targz:grafana:linux/arm/v7 --go-version=1.21.10 --yarn-cache=$$YARN_CACHE_FOLDER + --build-id=$$DRONE_BUILD_NUMBER --grafana-dir=$$PWD > packages.txt depends_on: - yarn-install + environment: + _EXPERIMENTAL_DAGGER_CLOUD_TOKEN: + from_secret: dagger_token image: grafana/grafana-build:main name: rgm-package pull: always @@ -579,7 +597,7 @@ steps: GF_APP_MODE: development GF_SERVER_HTTP_PORT: "3001" GF_SERVER_ROUTER_LOGGING: "1" - image: alpine:3.18.3 + image: alpine:3.19.1 name: grafana-server - commands: - ./bin/build e2e-tests --port 3001 --suite dashboards-suite @@ -640,6 +658,61 @@ steps: repo: - grafana/grafana - commands: + - sleep 10s + - yarn e2e:playwright + depends_on: + - grafana-server + environment: + HOST: grafana-server + PORT: "3001" + PROV_DIR: /grafana/scripts/grafana-server/tmp/conf/provisioning + image: mcr.microsoft.com/playwright:v1.42.1-jammy + name: playwright-plugin-e2e +- commands: + - apt-get update + - apt-get install -yq zip + - printenv GCP_GRAFANA_UPLOAD_ARTIFACTS_KEY > /tmp/gcpkey_upload_artifacts.json + - gcloud auth activate-service-account --key-file=/tmp/gcpkey_upload_artifacts.json + - gsutil cp -r ./playwright-report/. gs://releng-pipeline-artifacts-dev/${DRONE_BUILD_NUMBER}/playwright-report + - export E2E_PLAYWRIGHT_REPORT_URL=https://storage.googleapis.com/releng-pipeline-artifacts-dev/${DRONE_BUILD_NUMBER}/playwright-report/index.html + - "echo \"E2E Playwright report uploaded to: \n $${E2E_PLAYWRIGHT_REPORT_URL}\"" + depends_on: + - playwright-plugin-e2e + environment: + GCP_GRAFANA_UPLOAD_ARTIFACTS_KEY: + from_secret: gcp_upload_artifacts_key + failure: ignore + image: google/cloud-sdk:431.0.0 + name: playwright-e2e-report-upload + when: + status: + - success + - failure +- commands: + - if [ ! -d ./playwright-report/trace ]; then echo 'all tests passed'; exit 0; fi + - export E2E_PLAYWRIGHT_REPORT_URL=https://storage.googleapis.com/releng-pipeline-artifacts-dev/${DRONE_BUILD_NUMBER}/playwright-report/index.html + - 'curl -L -X POST https://api.github.com/repos/grafana/grafana/issues/${DRONE_PULL_REQUEST}/comments + -H "Accept: application/vnd.github+json" -H "Authorization: Bearer $${GITHUB_TOKEN}" + -H "X-GitHub-Api-Version: 2022-11-28" -d "{\"body\":\"❌ Failed to run Playwright + plugin e2e tests.

Click [here]($${E2E_PLAYWRIGHT_REPORT_URL}) to + browse the Playwright report and trace viewer.
For information on how to + run Playwright tests locally, refer to the [Developer guide](https://github.com/grafana/grafana/blob/main/contribute/developer-guide.md#to-run-the-playwright-tests). + \"}"' + depends_on: + - playwright-e2e-report-upload + environment: + GITHUB_TOKEN: + from_secret: github_token + failure: ignore + image: byrnedo/alpine-curl:0.1.8 + name: playwright-e2e-report-post-link + when: + status: + - success + - failure +- commands: + - if [ -z `find ./e2e -type f -name *spec.ts.mp4` ]; then echo 'missing videos'; + false; fi - apt-get update - apt-get install -yq zip - printenv GCP_GRAFANA_UPLOAD_ARTIFACTS_KEY > /tmp/gcpkey_upload_artifacts.json @@ -685,7 +758,7 @@ steps: include: - packages/grafana-ui/** - commands: - - yarn wait-on http://$HOST:$PORT + - npx wait-on@7.0.1 http://$HOST:$PORT - pa11y-ci --config .pa11yci-pr.conf.js depends_on: - grafana-server @@ -699,13 +772,18 @@ steps: name: test-a11y-frontend - commands: - docker run --privileged --rm tonistiigi/binfmt --install all - - /src/grafana-build docker $(cat packages.txt | grep tar.gz | grep -v docker | - grep -v sha256 | awk '{print "--package=" $0}') --ubuntu-base=ubuntu:22.04 --alpine-base=alpine:3.18.3 - --tag-format='{{ .version_base }}-{{ .buildID }}-{{ .arch }}' --ubuntu-tag-format='{{ + - /src/grafana-build artifacts -a docker:grafana:linux/amd64 -a docker:grafana:linux/amd64:ubuntu + -a docker:grafana:linux/arm64 -a docker:grafana:linux/arm64:ubuntu -a docker:grafana:linux/arm/v7 + -a docker:grafana:linux/arm/v7:ubuntu --yarn-cache=$$YARN_CACHE_FOLDER --build-id=$$DRONE_BUILD_NUMBER + --go-version=1.21.10 --ubuntu-base=ubuntu:22.04 --alpine-base=alpine:3.19.1 --tag-format='{{ + .version_base }}-{{ .buildID }}-{{ .arch }}' --grafana-dir=$$PWD --ubuntu-tag-format='{{ .version_base }}-{{ .buildID }}-ubuntu-{{ .arch }}' > docker.txt - find ./dist -name '*docker*.tar.gz' -type f | xargs -n1 docker load -i depends_on: - - rgm-package + - yarn-install + environment: + _EXPERIMENTAL_DAGGER_CLOUD_TOKEN: + from_secret: dagger_token image: grafana/grafana-build:main name: rgm-build-docker pull: always @@ -753,7 +831,8 @@ depends_on: [] environment: EDITION: oss image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: pr-integration-tests node: @@ -797,9 +876,9 @@ services: - name: mysql80 path: /var/lib/mysql - commands: - - /bin/mimir -target=backend + - /bin/mimir -target=backend -alertmanager.grafana-alertmanager-compatibility-enabled environment: {} - image: grafana/mimir:latest + image: us.gcr.io/kubernetes-dev/mimir:santihernandezc-remove_id_from_grafana_config-d3826b4f8-WIP name: mimir_backend - environment: {} image: redis:6.2.11-alpine @@ -831,7 +910,7 @@ steps: name: clone-enterprise - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.42/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.50/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -840,11 +919,11 @@ steps: depends_on: [] environment: CGO_ENABLED: 0 - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: compile-build-cmd - commands: - echo $DRONE_RUNNER_NAME - image: alpine:3.18.3 + image: alpine:3.19.1 name: identify-runner - commands: - '# It is required that code generated from Thema/CUE be committed and in sync @@ -854,7 +933,7 @@ steps: - apk add --update make - CODEGEN_VERIFY=1 make gen-cue depends_on: [] - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: verify-gen-cue - commands: - '# It is required that generated jsonnet is committed and in sync with its inputs.' @@ -863,14 +942,14 @@ steps: - apk add --update make - CODEGEN_VERIFY=1 make gen-jsonnet depends_on: [] - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: verify-gen-jsonnet - commands: - apk add --update make - make gen-go depends_on: - verify-gen-cue - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: wire-install - commands: - dockerize -wait tcp://postgres:5432 -timeout 120s @@ -891,7 +970,7 @@ steps: GRAFANA_TEST_DB: postgres PGPASSWORD: grafanatest POSTGRES_HOST: postgres - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: postgres-integration-tests - commands: - dockerize -wait tcp://mysql57:3306 -timeout 120s @@ -912,7 +991,7 @@ steps: environment: GRAFANA_TEST_DB: mysql MYSQL_HOST: mysql57 - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: mysql-5.7-integration-tests - commands: - dockerize -wait tcp://mysql80:3306 -timeout 120s @@ -933,7 +1012,7 @@ steps: environment: GRAFANA_TEST_DB: mysql MYSQL_HOST: mysql80 - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: mysql-8.0-integration-tests - commands: - dockerize -wait tcp://redis:6379 -timeout 120s @@ -942,13 +1021,14 @@ steps: - commands: - apk add --update build-base - go clean -testcache - - go test -run IntegrationRedis -covermode=atomic -timeout=2m ./pkg/... + - go list -f '{{.Dir}}/...' -m | xargs go test -run IntegrationRedis -covermode=atomic + -timeout=2m depends_on: - wire-install - wait-for-redis environment: REDIS_URL: redis://redis:6379/0 - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: redis-integration-tests - commands: - dockerize -wait tcp://memcached:11211 -timeout 120s @@ -957,13 +1037,14 @@ steps: - commands: - apk add --update build-base - go clean -testcache - - go test -run IntegrationMemcached -covermode=atomic -timeout=2m ./pkg/... + - go list -f '{{.Dir}}/...' -m | xargs go test -run IntegrationMemcached -covermode=atomic + -timeout=2m depends_on: - wire-install - wait-for-memcached environment: MEMCACHED_HOSTS: memcached:11211 - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: memcached-integration-tests - commands: - dockerize -wait tcp://mimir_backend:8080 -timeout 120s @@ -972,15 +1053,14 @@ steps: - commands: - apk add --update build-base - go clean -testcache - - go test -run TestIntegrationRemoteAlertmanager -covermode=atomic -timeout=2m ./pkg/services/ngalert/notifier/... + - go test -run TestIntegrationRemoteAlertmanager -covermode=atomic -timeout=2m ./pkg/services/ngalert/... depends_on: - wire-install - wait-for-remote-alertmanager environment: - AM_PASSWORD: test AM_TENANT_ID: test AM_URL: http://mimir_backend:8080 - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: remote-alertmanager-integration-tests trigger: event: @@ -1018,7 +1098,8 @@ depends_on: [] environment: EDITION: oss image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: pr-docs node: @@ -1030,16 +1111,17 @@ services: [] steps: - commands: - echo $DRONE_RUNNER_NAME - image: alpine:3.18.3 + image: alpine:3.19.1 name: identify-runner - commands: - - yarn install --immutable + - apk add --update g++ make python3 && ln -sf /usr/bin/python3 /usr/bin/python + - yarn install --immutable || yarn install --immutable depends_on: [] image: node:20.9.0-alpine name: yarn-install - commands: - pip3 install codespell - - codespell -I .codespellignore docs/ + - codespell -I docs/.codespellignore docs/ image: python:3.8 name: codespell - commands: @@ -1056,8 +1138,9 @@ steps: true\n---\n'' > /hugo/content/docs/grafana/_index.md' - cp -r docs/sources/* /hugo/content/docs/grafana/latest/ - cd /hugo && make prod - image: grafana/docs-base:dbd975af06 + image: grafana/docs-base:latest name: build-docs-website + pull: always - commands: - '# It is required that code generated from Thema/CUE be committed and in sync with its inputs.' @@ -1066,7 +1149,7 @@ steps: - apk add --update make - CODEGEN_VERIFY=1 make gen-cue depends_on: [] - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: verify-gen-cue trigger: event: @@ -1091,7 +1174,8 @@ depends_on: [] environment: EDITION: oss image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: pr-shellcheck node: @@ -1106,7 +1190,7 @@ steps: depends_on: [] environment: CGO_ENABLED: 0 - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: compile-build-cmd - commands: - apt-get update -yq && apt-get install shellcheck @@ -1133,7 +1217,8 @@ clone: retries: 3 depends_on: [] image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: pr-swagger-gen node: @@ -1149,11 +1234,15 @@ steps: | jq .head.repo.fork) - if [ "$is_fork" != false ]; then return 1; fi - git clone "https://$${GITHUB_TOKEN}@github.com/grafana/grafana-enterprise.git" - grafana-enterprise - - cd grafana-enterprise + ../grafana-enterprise + - cd ../grafana-enterprise - if git checkout ${DRONE_SOURCE_BRANCH}; then echo "checked out ${DRONE_SOURCE_BRANCH}"; - elif git checkout main; then echo "git checkout main"; else git checkout main; - fi + elif git checkout ${DRONE_TARGET_BRANCH}; then echo "git checkout ${DRONE_TARGET_BRANCH}"; + else git checkout main; fi + - cd ../ + - ln -s src grafana + - cd ./grafana-enterprise + - ./build.sh environment: GITHUB_TOKEN: from_secret: github_token @@ -1165,25 +1254,19 @@ steps: - make swagger-clean && make openapi3-gen - for f in public/api-merged.json public/openapi3.json; do git add $f; done - if [ -z "$(git diff --name-only --cached)" ]; then echo "Everything seems up to - date!"; else echo "Please ensure the branch is up-to-date, then regenerate the - specification by running make swagger-clean && make openapi3-gen" && return 1; - fi + date!"; else git diff --cached && echo "Please ensure the branch is up-to-date, + then regenerate the specification by running make swagger-clean && make openapi3-gen" + && return 1; fi depends_on: - clone-enterprise environment: GITHUB_TOKEN: from_secret: github_token - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: swagger-gen trigger: event: - pull_request - paths: - exclude: - - docs/** - - '*.md' - include: - - pkg/** type: docker volumes: - host: @@ -1196,7 +1279,8 @@ depends_on: [] environment: EDITION: oss image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: pr-integration-benchmarks node: @@ -1240,9 +1324,9 @@ services: - name: mysql80 path: /var/lib/mysql - commands: - - /bin/mimir -target=backend + - /bin/mimir -target=backend -alertmanager.grafana-alertmanager-compatibility-enabled environment: {} - image: grafana/mimir:latest + image: us.gcr.io/kubernetes-dev/mimir:santihernandezc-remove_id_from_grafana_config-d3826b4f8-WIP name: mimir_backend - environment: {} image: redis:6.2.11-alpine @@ -1274,7 +1358,7 @@ steps: depends_on: [] environment: CGO_ENABLED: 0 - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: compile-build-cmd - commands: - '# It is required that code generated from Thema/CUE be committed and in sync @@ -1285,7 +1369,7 @@ steps: - CODEGEN_VERIFY=1 make gen-cue depends_on: - clone-enterprise - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: verify-gen-cue - commands: - '# It is required that generated jsonnet is committed and in sync with its inputs.' @@ -1295,14 +1379,14 @@ steps: - CODEGEN_VERIFY=1 make gen-jsonnet depends_on: - clone-enterprise - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: verify-gen-jsonnet - commands: - apk add --update make - make gen-go depends_on: - verify-gen-cue - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: wire-install - commands: - apk add --update build-base @@ -1310,7 +1394,7 @@ steps: - go test -v -run=^$ -benchmem -timeout=1h -count=8 -bench=. ${GO_PACKAGES} depends_on: - wire-install - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: sqlite-benchmark-integration-tests - commands: - apk add --update build-base @@ -1322,7 +1406,7 @@ steps: GRAFANA_TEST_DB: postgres PGPASSWORD: grafanatest POSTGRES_HOST: postgres - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: postgres-benchmark-integration-tests - commands: - apk add --update build-base @@ -1333,7 +1417,7 @@ steps: environment: GRAFANA_TEST_DB: mysql MYSQL_HOST: mysql57 - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: mysql-5.7-benchmark-integration-tests - commands: - apk add --update build-base @@ -1344,7 +1428,7 @@ steps: environment: GRAFANA_TEST_DB: mysql MYSQL_HOST: mysql80 - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: mysql-8.0-benchmark-integration-tests trigger: event: @@ -1372,7 +1456,8 @@ depends_on: [] environment: EDITION: oss image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: main-docs node: @@ -1384,16 +1469,17 @@ services: [] steps: - commands: - echo $DRONE_RUNNER_NAME - image: alpine:3.18.3 + image: alpine:3.19.1 name: identify-runner - commands: - - yarn install --immutable + - apk add --update g++ make python3 && ln -sf /usr/bin/python3 /usr/bin/python + - yarn install --immutable || yarn install --immutable depends_on: [] image: node:20.9.0-alpine name: yarn-install - commands: - pip3 install codespell - - codespell -I .codespellignore docs/ + - codespell -I docs/.codespellignore docs/ image: python:3.8 name: codespell - commands: @@ -1410,8 +1496,9 @@ steps: true\n---\n'' > /hugo/content/docs/grafana/_index.md' - cp -r docs/sources/* /hugo/content/docs/grafana/latest/ - cd /hugo && make prod - image: grafana/docs-base:dbd975af06 + image: grafana/docs-base:latest name: build-docs-website + pull: always - commands: - '# It is required that code generated from Thema/CUE be committed and in sync with its inputs.' @@ -1420,7 +1507,7 @@ steps: - apk add --update make - CODEGEN_VERIFY=1 make gen-cue depends_on: [] - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: verify-gen-cue trigger: branch: main @@ -1446,7 +1533,8 @@ depends_on: [] environment: EDITION: oss image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: main-test-frontend node: @@ -1458,10 +1546,11 @@ services: [] steps: - commands: - echo $DRONE_RUNNER_NAME - image: alpine:3.18.3 + image: alpine:3.19.1 name: identify-runner - commands: - - yarn install --immutable + - apk add --update g++ make python3 && ln -sf /usr/bin/python3 /usr/bin/python + - yarn install --immutable || yarn install --immutable depends_on: [] image: node:20.9.0-alpine name: yarn-install @@ -1503,7 +1592,8 @@ depends_on: [] environment: EDITION: oss image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: main-lint-frontend node: @@ -1515,10 +1605,11 @@ services: [] steps: - commands: - echo $DRONE_RUNNER_NAME - image: alpine:3.18.3 + image: alpine:3.19.1 name: identify-runner - commands: - - yarn install --immutable + - apk add --update g++ make python3 && ln -sf /usr/bin/python3 /usr/bin/python + - yarn install --immutable || yarn install --immutable depends_on: [] image: node:20.9.0-alpine name: yarn-install @@ -1542,9 +1633,9 @@ steps: \"\nTranslation extraction has not been committed. Please run 'yarn i18n:extract', commit the changes and push again.\"\n exit 1\n fi\n \ " - - yarn run i18n:compile depends_on: - yarn-install + failure: ignore image: node:20.9.0-alpine name: verify-i18n trigger: @@ -1570,7 +1661,8 @@ depends_on: [] environment: EDITION: oss image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: main-test-backend node: @@ -1582,7 +1674,7 @@ services: [] steps: - commands: - echo $DRONE_RUNNER_NAME - image: alpine:3.18.3 + image: alpine:3.19.1 name: identify-runner - commands: - '# It is required that code generated from Thema/CUE be committed and in sync @@ -1592,7 +1684,7 @@ steps: - apk add --update make - CODEGEN_VERIFY=1 make gen-cue depends_on: [] - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: verify-gen-cue - commands: - '# It is required that generated jsonnet is committed and in sync with its inputs.' @@ -1601,21 +1693,22 @@ steps: - apk add --update make - CODEGEN_VERIFY=1 make gen-jsonnet depends_on: [] - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: verify-gen-jsonnet - commands: - apk add --update make - make gen-go depends_on: - verify-gen-cue - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: wire-install - commands: - apk add --update build-base shared-mime-info shared-mime-info-lang - - go test -tags requires_buildifer -short -covermode=atomic -timeout=5m ./pkg/... + - go list -f '{{.Dir}}/...' -m | xargs go test -tags requires_buildifer -short -covermode=atomic + -timeout=5m depends_on: - wire-install - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: test-backend - commands: - apk add --update build-base @@ -1624,7 +1717,7 @@ steps: | grep -o '\(.*\)/' | sort -u) depends_on: - wire-install - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: test-backend-integration trigger: branch: main @@ -1649,7 +1742,8 @@ depends_on: [] environment: EDITION: oss image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: main-lint-backend node: @@ -1661,20 +1755,20 @@ services: [] steps: - commands: - echo $DRONE_RUNNER_NAME - image: alpine:3.18.3 + image: alpine:3.19.1 name: identify-runner - commands: - go build -o ./bin/build -ldflags '-extldflags -static' ./pkg/build/cmd depends_on: [] environment: CGO_ENABLED: 0 - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: compile-build-cmd - commands: - apk add --update make - make gen-go depends_on: [] - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: wire-install - commands: - apk add --update make build-base @@ -1683,16 +1777,16 @@ steps: - wire-install environment: CGO_ENABLED: "1" - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: lint-backend - commands: - go run scripts/modowners/modowners.go check go.mod - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: validate-modfile - commands: - apk add --update make - make swagger-validate - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: validate-openapi-spec - commands: - ./bin/build verify-drone @@ -1723,7 +1817,8 @@ depends_on: [] environment: EDITION: oss image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: main-build-e2e-publish node: @@ -1735,11 +1830,11 @@ services: [] steps: - commands: - echo $DRONE_RUNNER_NAME - image: alpine:3.18.3 + image: alpine:3.19.1 name: identify-runner - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.42/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.50/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -1748,7 +1843,7 @@ steps: depends_on: [] environment: CGO_ENABLED: 0 - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: compile-build-cmd - commands: - '# It is required that code generated from Thema/CUE be committed and in sync @@ -1758,7 +1853,7 @@ steps: - apk add --update make - CODEGEN_VERIFY=1 make gen-cue depends_on: [] - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: verify-gen-cue - commands: - '# It is required that generated jsonnet is committed and in sync with its inputs.' @@ -1767,23 +1862,24 @@ steps: - apk add --update make - CODEGEN_VERIFY=1 make gen-jsonnet depends_on: [] - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: verify-gen-jsonnet - commands: - apk add --update make - make gen-go depends_on: - verify-gen-cue - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: wire-install - commands: - - yarn install --immutable + - apk add --update g++ make python3 && ln -sf /usr/bin/python3 /usr/bin/python + - yarn install --immutable || yarn install --immutable depends_on: [] image: node:20.9.0-alpine name: yarn-install - commands: - apk add --update jq - - new_version=$(cat package.json | jq .version | sed s/pre/${DRONE_BUILD_NUMBER}/g) + - new_version=$(cat package.json | jq -r .version | sed s/pre/${DRONE_BUILD_NUMBER}/g) - 'echo "New version: $new_version"' - yarn run lerna version $new_version --exact --no-git-tag-version --no-push --force-publish -y @@ -1805,11 +1901,14 @@ steps: image: node:20.9.0-alpine name: build-frontend-packages - commands: - - /src/grafana-build package --distro=linux/amd64,linux/arm64 --go-version=1.20.10 - --yarn-cache=$$YARN_CACHE_FOLDER --build-id=$$DRONE_BUILD_NUMBER --grafana-dir=$$PWD - > packages.txt + - /src/grafana-build artifacts -a targz:grafana:linux/amd64 -a targz:grafana:linux/arm64 + -a targz:grafana:linux/arm/v7 --go-version=1.21.10 --yarn-cache=$$YARN_CACHE_FOLDER + --build-id=$$DRONE_BUILD_NUMBER --grafana-dir=$$PWD > packages.txt depends_on: - update-package-json-version + environment: + _EXPERIMENTAL_DAGGER_CLOUD_TOKEN: + from_secret: dagger_token image: grafana/grafana-build:main name: rgm-package pull: always @@ -1828,7 +1927,7 @@ steps: GF_APP_MODE: development GF_SERVER_HTTP_PORT: "3001" GF_SERVER_ROUTER_LOGGING: "1" - image: alpine:3.18.3 + image: alpine:3.19.1 name: grafana-server - commands: - ./bin/build e2e-tests --port 3001 --suite dashboards-suite @@ -1889,6 +1988,61 @@ steps: repo: - grafana/grafana - commands: + - sleep 10s + - yarn e2e:playwright + depends_on: + - grafana-server + environment: + HOST: grafana-server + PORT: "3001" + PROV_DIR: /grafana/scripts/grafana-server/tmp/conf/provisioning + image: mcr.microsoft.com/playwright:v1.42.1-jammy + name: playwright-plugin-e2e +- commands: + - apt-get update + - apt-get install -yq zip + - printenv GCP_GRAFANA_UPLOAD_ARTIFACTS_KEY > /tmp/gcpkey_upload_artifacts.json + - gcloud auth activate-service-account --key-file=/tmp/gcpkey_upload_artifacts.json + - gsutil cp -r ./playwright-report/. gs://releng-pipeline-artifacts-dev/${DRONE_BUILD_NUMBER}/playwright-report + - export E2E_PLAYWRIGHT_REPORT_URL=https://storage.googleapis.com/releng-pipeline-artifacts-dev/${DRONE_BUILD_NUMBER}/playwright-report/index.html + - "echo \"E2E Playwright report uploaded to: \n $${E2E_PLAYWRIGHT_REPORT_URL}\"" + depends_on: + - playwright-plugin-e2e + environment: + GCP_GRAFANA_UPLOAD_ARTIFACTS_KEY: + from_secret: gcp_upload_artifacts_key + failure: ignore + image: google/cloud-sdk:431.0.0 + name: playwright-e2e-report-upload + when: + status: + - success + - failure +- commands: + - if [ ! -d ./playwright-report/trace ]; then echo 'all tests passed'; exit 0; fi + - export E2E_PLAYWRIGHT_REPORT_URL=https://storage.googleapis.com/releng-pipeline-artifacts-dev/${DRONE_BUILD_NUMBER}/playwright-report/index.html + - 'curl -L -X POST https://api.github.com/repos/grafana/grafana/issues/${DRONE_PULL_REQUEST}/comments + -H "Accept: application/vnd.github+json" -H "Authorization: Bearer $${GITHUB_TOKEN}" + -H "X-GitHub-Api-Version: 2022-11-28" -d "{\"body\":\"❌ Failed to run Playwright + plugin e2e tests.

Click [here]($${E2E_PLAYWRIGHT_REPORT_URL}) to + browse the Playwright report and trace viewer.
For information on how to + run Playwright tests locally, refer to the [Developer guide](https://github.com/grafana/grafana/blob/main/contribute/developer-guide.md#to-run-the-playwright-tests). + \"}"' + depends_on: + - playwright-e2e-report-upload + environment: + GITHUB_TOKEN: + from_secret: github_token + failure: ignore + image: byrnedo/alpine-curl:0.1.8 + name: playwright-e2e-report-post-link + when: + status: + - success + - failure +- commands: + - if [ -z `find ./e2e -type f -name *spec.ts.mp4` ]; then echo 'missing videos'; + false; fi - apt-get update - apt-get install -yq zip - printenv GCP_GRAFANA_UPLOAD_ARTIFACTS_KEY > /tmp/gcpkey_upload_artifacts.json @@ -1934,7 +2088,7 @@ steps: include: - packages/grafana-ui/** - commands: - - yarn wait-on http://$HOST:$PORT + - npx wait-on@7.0.1 http://$HOST:$PORT - pa11y-ci --config .pa11yci.conf.js --json > pa11y-ci-results.json depends_on: - grafana-server @@ -1984,13 +2138,18 @@ steps: - grafana/grafana - commands: - docker run --privileged --rm tonistiigi/binfmt --install all - - /src/grafana-build docker $(cat packages.txt | grep tar.gz | grep -v docker | - grep -v sha256 | awk '{print "--package=" $0}') --ubuntu-base=ubuntu:22.04 --alpine-base=alpine:3.18.3 - --tag-format='{{ .version_base }}-{{ .buildID }}-{{ .arch }}' --ubuntu-tag-format='{{ + - /src/grafana-build artifacts -a docker:grafana:linux/amd64 -a docker:grafana:linux/amd64:ubuntu + -a docker:grafana:linux/arm64 -a docker:grafana:linux/arm64:ubuntu -a docker:grafana:linux/arm/v7 + -a docker:grafana:linux/arm/v7:ubuntu --yarn-cache=$$YARN_CACHE_FOLDER --build-id=$$DRONE_BUILD_NUMBER + --go-version=1.21.10 --ubuntu-base=ubuntu:22.04 --alpine-base=alpine:3.19.1 --tag-format='{{ + .version_base }}-{{ .buildID }}-{{ .arch }}' --grafana-dir=$$PWD --ubuntu-tag-format='{{ .version_base }}-{{ .buildID }}-ubuntu-{{ .arch }}' > docker.txt - find ./dist -name '*docker*.tar.gz' -type f | xargs -n1 docker load -i depends_on: - - rgm-package + - update-package-json-version + environment: + _EXPERIMENTAL_DAGGER_CLOUD_TOKEN: + from_secret: dagger_token image: grafana/grafana-build:main name: rgm-build-docker pull: always @@ -2121,7 +2280,8 @@ depends_on: [] environment: EDITION: oss image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: main-integration-tests node: @@ -2165,9 +2325,9 @@ services: - name: mysql80 path: /var/lib/mysql - commands: - - /bin/mimir -target=backend + - /bin/mimir -target=backend -alertmanager.grafana-alertmanager-compatibility-enabled environment: {} - image: grafana/mimir:latest + image: us.gcr.io/kubernetes-dev/mimir:santihernandezc-remove_id_from_grafana_config-d3826b4f8-WIP name: mimir_backend - environment: {} image: redis:6.2.11-alpine @@ -2178,7 +2338,7 @@ services: steps: - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.42/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.50/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -2187,11 +2347,11 @@ steps: depends_on: [] environment: CGO_ENABLED: 0 - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: compile-build-cmd - commands: - echo $DRONE_RUNNER_NAME - image: alpine:3.18.3 + image: alpine:3.19.1 name: identify-runner - commands: - '# It is required that code generated from Thema/CUE be committed and in sync @@ -2201,7 +2361,7 @@ steps: - apk add --update make - CODEGEN_VERIFY=1 make gen-cue depends_on: [] - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: verify-gen-cue - commands: - '# It is required that generated jsonnet is committed and in sync with its inputs.' @@ -2210,14 +2370,14 @@ steps: - apk add --update make - CODEGEN_VERIFY=1 make gen-jsonnet depends_on: [] - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: verify-gen-jsonnet - commands: - apk add --update make - make gen-go depends_on: - verify-gen-cue - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: wire-install - commands: - dockerize -wait tcp://postgres:5432 -timeout 120s @@ -2238,7 +2398,7 @@ steps: GRAFANA_TEST_DB: postgres PGPASSWORD: grafanatest POSTGRES_HOST: postgres - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: postgres-integration-tests - commands: - dockerize -wait tcp://mysql57:3306 -timeout 120s @@ -2259,7 +2419,7 @@ steps: environment: GRAFANA_TEST_DB: mysql MYSQL_HOST: mysql57 - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: mysql-5.7-integration-tests - commands: - dockerize -wait tcp://mysql80:3306 -timeout 120s @@ -2280,7 +2440,7 @@ steps: environment: GRAFANA_TEST_DB: mysql MYSQL_HOST: mysql80 - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: mysql-8.0-integration-tests - commands: - dockerize -wait tcp://redis:6379 -timeout 120s @@ -2289,13 +2449,14 @@ steps: - commands: - apk add --update build-base - go clean -testcache - - go test -run IntegrationRedis -covermode=atomic -timeout=2m ./pkg/... + - go list -f '{{.Dir}}/...' -m | xargs go test -run IntegrationRedis -covermode=atomic + -timeout=2m depends_on: - wire-install - wait-for-redis environment: REDIS_URL: redis://redis:6379/0 - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: redis-integration-tests - commands: - dockerize -wait tcp://memcached:11211 -timeout 120s @@ -2304,13 +2465,14 @@ steps: - commands: - apk add --update build-base - go clean -testcache - - go test -run IntegrationMemcached -covermode=atomic -timeout=2m ./pkg/... + - go list -f '{{.Dir}}/...' -m | xargs go test -run IntegrationMemcached -covermode=atomic + -timeout=2m depends_on: - wire-install - wait-for-memcached environment: MEMCACHED_HOSTS: memcached:11211 - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: memcached-integration-tests - commands: - dockerize -wait tcp://mimir_backend:8080 -timeout 120s @@ -2319,15 +2481,14 @@ steps: - commands: - apk add --update build-base - go clean -testcache - - go test -run TestIntegrationRemoteAlertmanager -covermode=atomic -timeout=2m ./pkg/services/ngalert/notifier/... + - go test -run TestIntegrationRemoteAlertmanager -covermode=atomic -timeout=2m ./pkg/services/ngalert/... depends_on: - wire-install - wait-for-remote-alertmanager environment: - AM_PASSWORD: test AM_TENANT_ID: test AM_URL: http://mimir_backend:8080 - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: remote-alertmanager-integration-tests trigger: branch: main @@ -2365,7 +2526,8 @@ depends_on: environment: EDITION: oss image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: main-windows platform: @@ -2380,7 +2542,7 @@ steps: name: identify-runner - commands: - $$ProgressPreference = "SilentlyContinue" - - Invoke-WebRequest https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.42/windows/grabpl.exe + - Invoke-WebRequest https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.50/windows/grabpl.exe -OutFile grabpl.exe image: grafana/ci-wix:0.1.1 name: windows-init @@ -2409,7 +2571,8 @@ depends_on: environment: EDITION: oss image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: main-trigger-downstream node: @@ -2440,7 +2603,7 @@ trigger: - docs/** - latest.json repo: - - grafana/grafana-security-mirror + - grafana/grafana type: docker volumes: - host: @@ -2492,7 +2655,8 @@ depends_on: [] environment: EDITION: oss image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: publish-docker-public node: @@ -2504,11 +2668,11 @@ services: [] steps: - commands: - echo $DRONE_RUNNER_NAME - image: alpine:3.18.3 + image: alpine:3.19.1 name: identify-runner - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.42/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.50/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -2517,7 +2681,7 @@ steps: depends_on: [] environment: CGO_ENABLED: 0 - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: compile-build-cmd - commands: - ./bin/build artifacts docker fetch --edition oss @@ -2598,7 +2762,8 @@ depends_on: [] environment: EDITION: oss image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: publish-artifacts-public node: @@ -2613,7 +2778,7 @@ steps: depends_on: [] environment: CGO_ENABLED: 0 - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: compile-build-cmd - commands: - ./bin/build artifacts packages --tag $${DRONE_TAG} --src-bucket $${PRERELEASE_BUCKET} @@ -2667,7 +2832,8 @@ depends_on: [] environment: EDITION: oss image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: publish-npm-packages-public node: @@ -2682,10 +2848,11 @@ steps: depends_on: [] environment: CGO_ENABLED: 0 - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: compile-build-cmd - commands: - - yarn install --immutable + - apk add --update g++ make python3 && ln -sf /usr/bin/python3 /usr/bin/python + - yarn install --immutable || yarn install --immutable depends_on: [] image: node:20.9.0-alpine name: yarn-install @@ -2711,7 +2878,7 @@ steps: NPM_TOKEN: from_secret: npm_token failure: ignore - image: golang:1.20.10-alpine + image: node:20.9.0-alpine name: release-npm-packages trigger: event: @@ -2732,7 +2899,8 @@ depends_on: environment: EDITION: oss image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: publish-packages node: @@ -2747,7 +2915,7 @@ steps: depends_on: [] environment: CGO_ENABLED: 0 - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: compile-build-cmd - depends_on: - compile-build-cmd @@ -2820,7 +2988,8 @@ depends_on: - main-test-backend - main-test-frontend image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: rgm-main-prerelease node: @@ -2836,6 +3005,7 @@ steps: environment: _EXPERIMENTAL_DAGGER_CLOUD_TOKEN: from_secret: dagger_token + ALPINE_BASE: alpine:3.19.1 CDN_DESTINATION: from_secret: rgm_cdn_destination DESTINATION: @@ -2852,7 +3022,7 @@ steps: from_secret: gcp_key_base64 GITHUB_TOKEN: from_secret: github_token - GO_VERSION: 1.20.10 + GO_VERSION: 1.21.10 GPG_PASSPHRASE: from_secret: packages_gpg_passphrase GPG_PRIVATE_KEY: @@ -2863,6 +3033,7 @@ steps: from_secret: npm_token STORYBOOK_DESTINATION: from_secret: rgm_storybook_destination + UBUNTU_BASE: ubuntu:22.04 image: grafana/grafana-build:main name: rgm-build pull: always @@ -2893,7 +3064,8 @@ depends_on: [] environment: EDITION: oss image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: release-whatsnew-checker node: @@ -2908,13 +3080,13 @@ steps: depends_on: [] environment: CGO_ENABLED: 0 - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: compile-build-cmd - commands: - ./bin/build whatsnew-checker depends_on: - compile-build-cmd - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: whats-new-checker trigger: event: @@ -2937,7 +3109,8 @@ depends_on: [] environment: EDITION: oss image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: release-test-frontend node: @@ -2949,10 +3122,11 @@ services: [] steps: - commands: - echo $DRONE_RUNNER_NAME - image: alpine:3.18.3 + image: alpine:3.19.1 name: identify-runner - commands: - - yarn install --immutable + - apk add --update g++ make python3 && ln -sf /usr/bin/python3 /usr/bin/python + - yarn install --immutable || yarn install --immutable depends_on: [] image: node:20.9.0-alpine name: yarn-install @@ -2992,7 +3166,8 @@ depends_on: [] environment: EDITION: oss image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: release-test-backend node: @@ -3004,7 +3179,7 @@ services: [] steps: - commands: - echo $DRONE_RUNNER_NAME - image: alpine:3.18.3 + image: alpine:3.19.1 name: identify-runner - commands: - '# It is required that code generated from Thema/CUE be committed and in sync @@ -3014,7 +3189,7 @@ steps: - apk add --update make - CODEGEN_VERIFY=1 make gen-cue depends_on: [] - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: verify-gen-cue - commands: - '# It is required that generated jsonnet is committed and in sync with its inputs.' @@ -3023,21 +3198,22 @@ steps: - apk add --update make - CODEGEN_VERIFY=1 make gen-jsonnet depends_on: [] - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: verify-gen-jsonnet - commands: - apk add --update make - make gen-go depends_on: - verify-gen-cue - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: wire-install - commands: - apk add --update build-base shared-mime-info shared-mime-info-lang - - go test -tags requires_buildifer -short -covermode=atomic -timeout=5m ./pkg/... + - go list -f '{{.Dir}}/...' -m | xargs go test -tags requires_buildifer -short -covermode=atomic + -timeout=5m depends_on: - wire-install - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: test-backend - commands: - apk add --update build-base @@ -3046,7 +3222,7 @@ steps: | grep -o '\(.*\)/' | sort -u) depends_on: - wire-install - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: test-backend-integration trigger: event: @@ -3069,7 +3245,8 @@ depends_on: - release-test-backend - release-test-frontend image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: rgm-tag-prerelease node: @@ -3085,6 +3262,7 @@ steps: environment: _EXPERIMENTAL_DAGGER_CLOUD_TOKEN: from_secret: dagger_token + ALPINE_BASE: alpine:3.19.1 CDN_DESTINATION: from_secret: rgm_cdn_destination DESTINATION: @@ -3101,7 +3279,7 @@ steps: from_secret: gcp_key_base64 GITHUB_TOKEN: from_secret: github_token - GO_VERSION: 1.20.10 + GO_VERSION: 1.21.10 GPG_PASSPHRASE: from_secret: packages_gpg_passphrase GPG_PRIVATE_KEY: @@ -3112,6 +3290,7 @@ steps: from_secret: npm_token STORYBOOK_DESTINATION: from_secret: rgm_storybook_destination + UBUNTU_BASE: ubuntu:22.04 image: grafana/grafana-build:main name: rgm-build pull: always @@ -3138,7 +3317,8 @@ clone: depends_on: - rgm-tag-prerelease image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: rgm-tag-prerelease-windows platform: @@ -3153,7 +3333,7 @@ steps: name: identify-runner - commands: - $$ProgressPreference = "SilentlyContinue" - - Invoke-WebRequest https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.42/windows/grabpl.exe + - Invoke-WebRequest https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.50/windows/grabpl.exe -OutFile grabpl.exe image: grafana/ci-wix:0.1.1 name: windows-init @@ -3202,7 +3382,8 @@ depends_on: - rgm-tag-prerelease - rgm-tag-prerelease-windows image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: rgm-tag-verify-prerelease-assets node: @@ -3247,7 +3428,8 @@ depends_on: - release-test-backend - release-test-frontend image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: rgm-version-branch-prerelease node: @@ -3263,6 +3445,7 @@ steps: environment: _EXPERIMENTAL_DAGGER_CLOUD_TOKEN: from_secret: dagger_token + ALPINE_BASE: alpine:3.19.1 CDN_DESTINATION: from_secret: rgm_cdn_destination DESTINATION: @@ -3279,7 +3462,7 @@ steps: from_secret: gcp_key_base64 GITHUB_TOKEN: from_secret: github_token - GO_VERSION: 1.20.10 + GO_VERSION: 1.21.10 GPG_PASSPHRASE: from_secret: packages_gpg_passphrase GPG_PRIVATE_KEY: @@ -3290,6 +3473,7 @@ steps: from_secret: npm_token STORYBOOK_DESTINATION: from_secret: rgm_storybook_destination + UBUNTU_BASE: ubuntu:22.04 image: grafana/grafana-build:main name: rgm-build pull: always @@ -3310,7 +3494,8 @@ clone: depends_on: - rgm-version-branch-prerelease image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: rgm-prerelease-verify-prerelease-assets node: @@ -3349,7 +3534,8 @@ depends_on: [] environment: EDITION: oss image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: nightly-test-frontend node: @@ -3361,10 +3547,11 @@ services: [] steps: - commands: - echo $DRONE_RUNNER_NAME - image: alpine:3.18.3 + image: alpine:3.19.1 name: identify-runner - commands: - - yarn install --immutable + - apk add --update g++ make python3 && ln -sf /usr/bin/python3 /usr/bin/python + - yarn install --immutable || yarn install --immutable depends_on: [] image: node:20.9.0-alpine name: yarn-install @@ -3402,7 +3589,8 @@ depends_on: [] environment: EDITION: oss image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: nightly-test-backend node: @@ -3414,7 +3602,7 @@ services: [] steps: - commands: - echo $DRONE_RUNNER_NAME - image: alpine:3.18.3 + image: alpine:3.19.1 name: identify-runner - commands: - '# It is required that code generated from Thema/CUE be committed and in sync @@ -3424,7 +3612,7 @@ steps: - apk add --update make - CODEGEN_VERIFY=1 make gen-cue depends_on: [] - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: verify-gen-cue - commands: - '# It is required that generated jsonnet is committed and in sync with its inputs.' @@ -3433,21 +3621,22 @@ steps: - apk add --update make - CODEGEN_VERIFY=1 make gen-jsonnet depends_on: [] - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: verify-gen-jsonnet - commands: - apk add --update make - make gen-go depends_on: - verify-gen-cue - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: wire-install - commands: - apk add --update build-base shared-mime-info shared-mime-info-lang - - go test -tags requires_buildifer -short -covermode=atomic -timeout=5m ./pkg/... + - go list -f '{{.Dir}}/...' -m | xargs go test -tags requires_buildifer -short -covermode=atomic + -timeout=5m depends_on: - wire-install - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: test-backend - commands: - apk add --update build-base @@ -3456,7 +3645,7 @@ steps: | grep -o '\(.*\)/' | sort -u) depends_on: - wire-install - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: test-backend-integration trigger: cron: @@ -3477,7 +3666,8 @@ depends_on: - nightly-test-backend - nightly-test-frontend image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: rgm-nightly-build node: @@ -3493,6 +3683,7 @@ steps: environment: _EXPERIMENTAL_DAGGER_CLOUD_TOKEN: from_secret: dagger_token + ALPINE_BASE: alpine:3.19.1 CDN_DESTINATION: from_secret: rgm_cdn_destination DESTINATION: @@ -3509,7 +3700,7 @@ steps: from_secret: gcp_key_base64 GITHUB_TOKEN: from_secret: github_token - GO_VERSION: 1.20.10 + GO_VERSION: 1.21.10 GPG_PASSPHRASE: from_secret: packages_gpg_passphrase GPG_PRIVATE_KEY: @@ -3520,6 +3711,7 @@ steps: from_secret: npm_token STORYBOOK_DESTINATION: from_secret: rgm_storybook_destination + UBUNTU_BASE: ubuntu:22.04 image: grafana/grafana-build:main name: rgm-build pull: always @@ -3582,7 +3774,8 @@ clone: depends_on: - rgm-nightly-build image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: rgm-nightly-publish node: @@ -3637,6 +3830,7 @@ steps: environment: _EXPERIMENTAL_DAGGER_CLOUD_TOKEN: from_secret: dagger_token + ALPINE_BASE: alpine:3.19.1 CDN_DESTINATION: from_secret: rgm_cdn_destination DESTINATION: @@ -3653,7 +3847,7 @@ steps: from_secret: gcp_key_base64 GITHUB_TOKEN: from_secret: github_token - GO_VERSION: 1.20.10 + GO_VERSION: 1.21.10 GPG_PASSPHRASE: from_secret: packages_gpg_passphrase GPG_PRIVATE_KEY: @@ -3664,6 +3858,7 @@ steps: from_secret: npm_token STORYBOOK_DESTINATION: from_secret: rgm_storybook_destination + UBUNTU_BASE: ubuntu:22.04 image: grafana/grafana-build:main name: rgm-publish pull: always @@ -3723,13 +3918,115 @@ volumes: path: /var/run/docker.sock name: docker --- +clone: + retries: 3 +depends_on: [] +image_pull_secrets: +- gcr +- gar +kind: pipeline +name: rgm-promotion +node: + type: no-parallel +platform: + arch: amd64 + os: linux +services: [] +steps: +- commands: + - 'dagger run --silent /src/grafana-build artifacts -a $${ARTIFACTS} --grafana-ref=$${GRAFANA_REF} + --enterprise-ref=$${ENTERPRISE_REF} --grafana-repo=$${GRAFANA_REPO} --version=$${VERSION} ' + environment: + _EXPERIMENTAL_DAGGER_CLOUD_TOKEN: + from_secret: dagger_token + ALPINE_BASE: alpine:3.19.1 + CDN_DESTINATION: + from_secret: rgm_cdn_destination + DESTINATION: + from_secret: destination + DOCKER_PASSWORD: + from_secret: docker_password + DOCKER_USERNAME: + from_secret: docker_username + DOWNLOADS_DESTINATION: + from_secret: rgm_downloads_destination + GCOM_API_KEY: + from_secret: grafana_api_key + GCP_KEY_BASE64: + from_secret: gcp_key_base64 + GITHUB_TOKEN: + from_secret: github_token + GO_VERSION: 1.21.10 + GPG_PASSPHRASE: + from_secret: packages_gpg_passphrase + GPG_PRIVATE_KEY: + from_secret: packages_gpg_private_key + GPG_PUBLIC_KEY: + from_secret: packages_gpg_public_key + NPM_TOKEN: + from_secret: npm_token + STORYBOOK_DESTINATION: + from_secret: rgm_storybook_destination + UBUNTU_BASE: ubuntu:22.04 + image: grafana/grafana-build:main + name: rgm-build + pull: always + volumes: + - name: docker + path: /var/run/docker.sock +- commands: + - printenv GCP_KEY_BASE64 | base64 -d > /tmp/key.json + - gcloud auth activate-service-account --key-file=/tmp/key.json + - gcloud storage cp -r dist/* $${UPLOAD_TO} + environment: + _EXPERIMENTAL_DAGGER_CLOUD_TOKEN: + from_secret: dagger_token + CDN_DESTINATION: + from_secret: rgm_cdn_destination + DESTINATION: + from_secret: destination + DOCKER_PASSWORD: + from_secret: docker_password + DOCKER_USERNAME: + from_secret: docker_username + DOWNLOADS_DESTINATION: + from_secret: rgm_downloads_destination + GCOM_API_KEY: + from_secret: grafana_api_key + GCP_KEY_BASE64: + from_secret: gcp_key_base64 + GITHUB_TOKEN: + from_secret: github_token + GPG_PASSPHRASE: + from_secret: packages_gpg_passphrase + GPG_PRIVATE_KEY: + from_secret: packages_gpg_private_key + GPG_PUBLIC_KEY: + from_secret: packages_gpg_public_key + NPM_TOKEN: + from_secret: npm_token + STORYBOOK_DESTINATION: + from_secret: rgm_storybook_destination + image: google/cloud-sdk:alpine + name: rgm-copy +trigger: + event: + - promote + target: upload-packages +type: docker +volumes: +- host: + path: /var/run/docker.sock + name: docker +--- clone: disable: true depends_on: [] environment: EDITION: oss image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: testing-test-backend-windows platform: @@ -3749,20 +4046,20 @@ steps: - commands: [] depends_on: - clone - image: golang:1.20.10-windowsservercore-1809 + image: golang:1.21.10-windowsservercore-1809 name: windows-init - commands: - go install github.com/google/wire/cmd/wire@v0.5.0 - wire gen -tags oss ./pkg/server depends_on: - windows-init - image: golang:1.20.10-windowsservercore-1809 + image: golang:1.21.10-windowsservercore-1809 name: wire-install - commands: - go test -tags requires_buildifer -short -covermode=atomic -timeout=5m ./pkg/... depends_on: - wire-install - image: golang:1.20.10-windowsservercore-1809 + image: golang:1.21.10-windowsservercore-1809 name: test-backend trigger: event: @@ -3781,7 +4078,8 @@ depends_on: [] environment: EDITION: oss image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: integration-tests node: @@ -3825,9 +4123,9 @@ services: - name: mysql80 path: /var/lib/mysql - commands: - - /bin/mimir -target=backend + - /bin/mimir -target=backend -alertmanager.grafana-alertmanager-compatibility-enabled environment: {} - image: grafana/mimir:latest + image: us.gcr.io/kubernetes-dev/mimir:santihernandezc-remove_id_from_grafana_config-d3826b4f8-WIP name: mimir_backend - environment: {} image: redis:6.2.11-alpine @@ -3838,13 +4136,13 @@ services: steps: - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.42/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.50/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl - commands: - echo $DRONE_RUNNER_NAME - image: alpine:3.18.3 + image: alpine:3.19.1 name: identify-runner - commands: - '# It is required that code generated from Thema/CUE be committed and in sync @@ -3854,7 +4152,7 @@ steps: - apk add --update make - CODEGEN_VERIFY=1 make gen-cue depends_on: [] - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: verify-gen-cue - commands: - '# It is required that generated jsonnet is committed and in sync with its inputs.' @@ -3863,14 +4161,14 @@ steps: - apk add --update make - CODEGEN_VERIFY=1 make gen-jsonnet depends_on: [] - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: verify-gen-jsonnet - commands: - apk add --update make - make gen-go depends_on: - verify-gen-cue - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: wire-install - commands: - dockerize -wait tcp://postgres:5432 -timeout 120s @@ -3891,7 +4189,7 @@ steps: GRAFANA_TEST_DB: postgres PGPASSWORD: grafanatest POSTGRES_HOST: postgres - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: postgres-integration-tests - commands: - dockerize -wait tcp://mysql57:3306 -timeout 120s @@ -3912,7 +4210,7 @@ steps: environment: GRAFANA_TEST_DB: mysql MYSQL_HOST: mysql57 - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: mysql-5.7-integration-tests - commands: - dockerize -wait tcp://mysql80:3306 -timeout 120s @@ -3933,7 +4231,7 @@ steps: environment: GRAFANA_TEST_DB: mysql MYSQL_HOST: mysql80 - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: mysql-8.0-integration-tests - commands: - dockerize -wait tcp://redis:6379 -timeout 120s @@ -3942,13 +4240,14 @@ steps: - commands: - apk add --update build-base - go clean -testcache - - go test -run IntegrationRedis -covermode=atomic -timeout=2m ./pkg/... + - go list -f '{{.Dir}}/...' -m | xargs go test -run IntegrationRedis -covermode=atomic + -timeout=2m depends_on: - wire-install - wait-for-redis environment: REDIS_URL: redis://redis:6379/0 - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: redis-integration-tests - commands: - dockerize -wait tcp://memcached:11211 -timeout 120s @@ -3957,13 +4256,14 @@ steps: - commands: - apk add --update build-base - go clean -testcache - - go test -run IntegrationMemcached -covermode=atomic -timeout=2m ./pkg/... + - go list -f '{{.Dir}}/...' -m | xargs go test -run IntegrationMemcached -covermode=atomic + -timeout=2m depends_on: - wire-install - wait-for-memcached environment: MEMCACHED_HOSTS: memcached:11211 - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: memcached-integration-tests - commands: - dockerize -wait tcp://mimir_backend:8080 -timeout 120s @@ -3972,15 +4272,14 @@ steps: - commands: - apk add --update build-base - go clean -testcache - - go test -run TestIntegrationRemoteAlertmanager -covermode=atomic -timeout=2m ./pkg/services/ngalert/notifier/... + - go test -run TestIntegrationRemoteAlertmanager -covermode=atomic -timeout=2m ./pkg/services/ngalert/... depends_on: - wire-install - wait-for-remote-alertmanager environment: - AM_PASSWORD: test AM_TENANT_ID: test AM_URL: http://mimir_backend:8080 - image: golang:1.20.10-alpine + image: golang:1.21.10-alpine name: remote-alertmanager-integration-tests trigger: event: @@ -4005,7 +4304,8 @@ clone: disable: true depends_on: [] image_pull_secrets: -- dockerconfigjson +- gcr +- gar kind: pipeline name: publish-ci-windows-test-image platform: @@ -4049,59 +4349,6 @@ volumes: path: //./pipe/docker_engine/ name: docker --- -clone: - retries: 3 -depends_on: [] -image_pull_secrets: -- dockerconfigjson -kind: pipeline -name: publish-ci-build-container-image -node: - type: no-parallel -platform: - arch: amd64 - os: linux -services: [] -steps: -- commands: - - if [ -z "${BUILD_CONTAINER_VERSION}" ]; then echo Missing BUILD_CONTAINER_VERSION; - false; fi - image: alpine:3.18.3 - name: validate-version -- commands: - - printenv GCP_KEY > /tmp/key.json - - gcloud auth activate-service-account --key-file=/tmp/key.json - - gsutil cp gs://grafana-private-downloads/MacOSX10.15.sdk.tar.xz ./scripts/build/ci-build/MacOSX10.15.sdk.tar.xz - environment: - GCP_KEY: - from_secret: gcp_download_build_container_assets_key - image: google/cloud-sdk:431.0.0 - name: download-macos-sdk -- commands: - - printenv DOCKER_PASSWORD | docker login -u "$DOCKER_USERNAME" --password-stdin - - docker build -t "grafana/build-container:${BUILD_CONTAINER_VERSION}" ./scripts/build/ci-build - - docker push "grafana/build-container:${BUILD_CONTAINER_VERSION}" - environment: - DOCKER_PASSWORD: - from_secret: docker_password - DOCKER_USERNAME: - from_secret: docker_username - image: google/cloud-sdk:431.0.0 - name: build-and-publish - volumes: - - name: docker - path: /var/run/docker.sock -trigger: - event: - - promote - target: - - ci-build-container-image -type: docker -volumes: -- host: - path: /var/run/docker.sock - name: docker ---- clone: retries: 3 kind: pipeline @@ -4386,17 +4633,17 @@ steps: path: /root/.docker/ - commands: - trivy --exit-code 0 --severity UNKNOWN,LOW,MEDIUM alpine/git:2.40.1 - - trivy --exit-code 0 --severity UNKNOWN,LOW,MEDIUM golang:1.20.10-alpine + - trivy --exit-code 0 --severity UNKNOWN,LOW,MEDIUM golang:1.21.10-alpine - trivy --exit-code 0 --severity UNKNOWN,LOW,MEDIUM node:20.9.0-alpine - trivy --exit-code 0 --severity UNKNOWN,LOW,MEDIUM google/cloud-sdk:431.0.0 - trivy --exit-code 0 --severity UNKNOWN,LOW,MEDIUM grafana/grafana-ci-deploy:1.3.3 - - trivy --exit-code 0 --severity UNKNOWN,LOW,MEDIUM alpine:3.18.3 + - trivy --exit-code 0 --severity UNKNOWN,LOW,MEDIUM alpine:3.19.1 - trivy --exit-code 0 --severity UNKNOWN,LOW,MEDIUM ubuntu:22.04 - trivy --exit-code 0 --severity UNKNOWN,LOW,MEDIUM byrnedo/alpine-curl:0.1.8 - trivy --exit-code 0 --severity UNKNOWN,LOW,MEDIUM plugins/slack - trivy --exit-code 0 --severity UNKNOWN,LOW,MEDIUM python:3.8 - trivy --exit-code 0 --severity UNKNOWN,LOW,MEDIUM postgres:12.3-alpine - - trivy --exit-code 0 --severity UNKNOWN,LOW,MEDIUM grafana/mimir:latest + - trivy --exit-code 0 --severity UNKNOWN,LOW,MEDIUM us.gcr.io/kubernetes-dev/mimir:santihernandezc-remove_id_from_grafana_config-d3826b4f8-WIP - trivy --exit-code 0 --severity UNKNOWN,LOW,MEDIUM mysql:5.7.39 - trivy --exit-code 0 --severity UNKNOWN,LOW,MEDIUM mysql:8.0.32 - trivy --exit-code 0 --severity UNKNOWN,LOW,MEDIUM redis:6.2.11-alpine @@ -4405,10 +4652,11 @@ steps: - trivy --exit-code 0 --severity UNKNOWN,LOW,MEDIUM osixia/openldap:1.4.0 - trivy --exit-code 0 --severity UNKNOWN,LOW,MEDIUM grafana/drone-downstream - trivy --exit-code 0 --severity UNKNOWN,LOW,MEDIUM grafana/docker-puppeteer:1.1.0 - - trivy --exit-code 0 --severity UNKNOWN,LOW,MEDIUM grafana/docs-base:dbd975af06 + - trivy --exit-code 0 --severity UNKNOWN,LOW,MEDIUM grafana/docs-base:latest - trivy --exit-code 0 --severity UNKNOWN,LOW,MEDIUM cypress/included:13.1.0 - trivy --exit-code 0 --severity UNKNOWN,LOW,MEDIUM jwilder/dockerize:0.6.1 - trivy --exit-code 0 --severity UNKNOWN,LOW,MEDIUM koalaman/shellcheck:stable + - trivy --exit-code 0 --severity UNKNOWN,LOW,MEDIUM mcr.microsoft.com/playwright:v1.42.1-jammy depends_on: - authenticate-gcr image: aquasec/trivy:0.21.0 @@ -4420,17 +4668,17 @@ steps: path: /root/.docker/ - commands: - trivy --exit-code 1 --severity HIGH,CRITICAL alpine/git:2.40.1 - - trivy --exit-code 1 --severity HIGH,CRITICAL golang:1.20.10-alpine + - trivy --exit-code 1 --severity HIGH,CRITICAL golang:1.21.10-alpine - trivy --exit-code 1 --severity HIGH,CRITICAL node:20.9.0-alpine - trivy --exit-code 1 --severity HIGH,CRITICAL google/cloud-sdk:431.0.0 - trivy --exit-code 1 --severity HIGH,CRITICAL grafana/grafana-ci-deploy:1.3.3 - - trivy --exit-code 1 --severity HIGH,CRITICAL alpine:3.18.3 + - trivy --exit-code 1 --severity HIGH,CRITICAL alpine:3.19.1 - trivy --exit-code 1 --severity HIGH,CRITICAL ubuntu:22.04 - trivy --exit-code 1 --severity HIGH,CRITICAL byrnedo/alpine-curl:0.1.8 - trivy --exit-code 1 --severity HIGH,CRITICAL plugins/slack - trivy --exit-code 1 --severity HIGH,CRITICAL python:3.8 - trivy --exit-code 1 --severity HIGH,CRITICAL postgres:12.3-alpine - - trivy --exit-code 1 --severity HIGH,CRITICAL grafana/mimir:latest + - trivy --exit-code 1 --severity HIGH,CRITICAL us.gcr.io/kubernetes-dev/mimir:santihernandezc-remove_id_from_grafana_config-d3826b4f8-WIP - trivy --exit-code 1 --severity HIGH,CRITICAL mysql:5.7.39 - trivy --exit-code 1 --severity HIGH,CRITICAL mysql:8.0.32 - trivy --exit-code 1 --severity HIGH,CRITICAL redis:6.2.11-alpine @@ -4439,10 +4687,11 @@ steps: - trivy --exit-code 1 --severity HIGH,CRITICAL osixia/openldap:1.4.0 - trivy --exit-code 1 --severity HIGH,CRITICAL grafana/drone-downstream - trivy --exit-code 1 --severity HIGH,CRITICAL grafana/docker-puppeteer:1.1.0 - - trivy --exit-code 1 --severity HIGH,CRITICAL grafana/docs-base:dbd975af06 + - trivy --exit-code 1 --severity HIGH,CRITICAL grafana/docs-base:latest - trivy --exit-code 1 --severity HIGH,CRITICAL cypress/included:13.1.0 - trivy --exit-code 1 --severity HIGH,CRITICAL jwilder/dockerize:0.6.1 - trivy --exit-code 1 --severity HIGH,CRITICAL koalaman/shellcheck:stable + - trivy --exit-code 1 --severity HIGH,CRITICAL mcr.microsoft.com/playwright:v1.42.1-jammy depends_on: - authenticate-gcr environment: @@ -4497,7 +4746,13 @@ get: name: .dockerconfigjson path: secret/data/common/gcr kind: secret -name: dockerconfigjson +name: gcr +--- +get: + name: .dockerconfigjson + path: secret/data/common/gar +kind: secret +name: gar --- get: name: pat @@ -4668,6 +4923,6 @@ kind: secret name: gcr_credentials --- kind: signature -hmac: 4c04040e7890d9f1da64ff3e2c006db1b3de4276b57ce4401849ec4ceb665ea8 +hmac: 9aca5c8de91c97ea30ac4ff4b5f5acf930a61afa727197d99b8dd4f3311fca47 ... diff --git a/.eslintrc b/.eslintrc index 50061606929d3..b64d731e0c913 100644 --- a/.eslintrc +++ b/.eslintrc @@ -96,8 +96,36 @@ }, { "files": [ + "public/app/plugins/datasource/azuremonitor/*.{ts,tsx}", + "public/app/plugins/datasource/azuremonitor/**/*.{ts,tsx}", + "public/app/plugins/datasource/cloud-monitoring/*.{ts,tsx}", + "public/app/plugins/datasource/cloud-monitoring/**/*.{ts,tsx}", + "public/app/plugins/datasource/elasticsearch/*.{ts,tsx}", + "public/app/plugins/datasource/elasticsearch/**/*.{ts,tsx}", + "public/app/plugins/datasource/grafana-postgresql-datasource/*.{ts,tsx}", + "public/app/plugins/datasource/grafana-postgresql-datasource/**/*.{ts,tsx}", + "public/app/plugins/datasource/grafana-pyroscope-datasource/*.{ts,tsx}", + "public/app/plugins/datasource/grafana-pyroscope-datasource/**/*.{ts,tsx}", "public/app/plugins/datasource/grafana-testdata-datasource/*.{ts,tsx}", - "public/app/plugins/datasource/grafana-testdata-datasource/**/*.{ts,tsx}" + "public/app/plugins/datasource/grafana-testdata-datasource/**/*.{ts,tsx}", + "public/app/plugins/datasource/jaeger/*.{ts,tsx}", + "public/app/plugins/datasource/jaeger/**/*.{ts,tsx}", + "public/app/plugins/datasource/loki/*.{ts,tsx}", + "public/app/plugins/datasource/loki/**/*.{ts,tsx}", + "public/app/plugins/datasource/mysql/*.{ts,tsx}", + "public/app/plugins/datasource/mysql/**/*.{ts,tsx}", + "public/app/plugins/datasource/parca/*.{ts,tsx}", + "public/app/plugins/datasource/parca/**/*.{ts,tsx}", + "public/app/plugins/datasource/tempo/*.{ts,tsx}", + "public/app/plugins/datasource/tempo/**/*.{ts,tsx}", + "public/app/plugins/datasource/loki/*.{ts,tsx}", + "public/app/plugins/datasource/loki/**/*.{ts,tsx}", + "public/app/plugins/datasource/elasticsearch/*.{ts,tsx}", + "public/app/plugins/datasource/elasticsearch/**/*.{ts,tsx}", + "public/app/plugins/datasource/cloudwatch/*.{ts,tsx}", + "public/app/plugins/datasource/cloudwatch/**/*.{ts,tsx}", + "public/app/plugins/datasource/zipkin/*.{ts,tsx}", + "public/app/plugins/datasource/zipkin/**/*.{ts,tsx}" ], "settings": { "import/resolver": { @@ -113,8 +141,8 @@ "zones": [ { "target": "./public/app/plugins", - "from": "./public/app", - "except": ["./plugins"], + "from": "./public", + "except": ["./app/plugins"], "message": "Core plugins are not allowed to depend on Grafana core packages" } ] diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 2a7d1df2adc17..f1898318c7db9 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -12,14 +12,12 @@ # This should make it easy to add new rules without breaking existing ones. # Documentation -/.changelog-archive @grafana/grafana-delivery -/.codespellignore @grafana/docs-tooling -/CHANGELOG.md @grafana/grafana-delivery +/.changelog-archive @grafana/grafana-release-guild +/CHANGELOG.md @grafana/grafana-release-guild /CODE_OF_CONDUCT.md @grafana/grafana-community-support /CONTRIBUTING.md @grafana/grafana-community-support /GOVERNANCE.md @RichiH /HALL_OF_FAME.md @grafana/grafana-community-support -/ISSUE_TRIAGE.md @grafana/grafana-community-support /LICENSE @torkelo /LICENSING.md @torkelo /MAINTAINERS.md @RichiH @@ -28,35 +26,42 @@ /ROADMAP.md @torkelo /SECURITY.md @grafana/security-team /SUPPORT.md @torkelo -/UPGRADING_DEPENDENCIES.md @grafana/docs-grafana /WORKFLOW.md @torkelo /contribute/ @grafana/grafana-community-support +/contribute/UPGRADING_DEPENDENCIES.md @grafana/docs-grafana /devenv/README.md @grafana/docs-grafana -# Technical documentation +# START Technical documentation # `make docs` procedure and related workflows are owned @grafana/docs-tooling. Slack #docs. -# Documentation sources might have different owners. -/docs/ @grafana/docs-tooling -/docs/sources/ @Eve832 -/docs/sources/administration/ @jdbaldry -/docs/sources/alerting/ @brendamuir -/docs/sources/dashboards/ @imatwawana -/docs/sources/datasources/ @lwandz13 -/docs/sources/explore/ @grafana/explore-squad -/docs/sources/fundamentals @chri2547 -/docs/sources/getting-started/ @chri2547 -/docs/sources/introduction/ @chri2547 -/docs/sources/old-alerting/ @brendamuir -/docs/sources/panels-visualizations/ @imatwawana -/docs/sources/release-notes/ @Eve832 @GrafanaWriter -/docs/sources/setup-grafana/ @chri2547 -/docs/sources/upgrade-guide/ @imatwawana -/docs/sources/whatsnew/ @imatwawana -/docs/sources/developers/plugins/ @Eve832 @josmperez @grafana/plugins-platform-frontend @grafana/plugins-platform-backend +/docs/ @grafana/docs-tooling + +/docs/.codespellignore @grafana/docs-tooling +/docs/sources/ @Eve832 + +/docs/sources/administration/ @jdbaldry +/docs/sources/alerting/ @brendamuir +/docs/sources/dashboards/ @imatwawana +/docs/sources/datasources/ @jdbaldry +/docs/sources/explore/ @grafana/explore-squad @lwandz13 +/docs/sources/fundamentals @chri2547 +/docs/sources/getting-started/ @chri2547 +/docs/sources/introduction/ @chri2547 +/docs/sources/panels-visualizations/ @imatwawana +/docs/sources/release-notes/ @Eve832 @GrafanaWriter +/docs/sources/setup-grafana/ @chri2547 +/docs/sources/upgrade-guide/ @imatwawana +/docs/sources/whatsnew/ @imatwawana + +/docs/sources/developers/plugins/ @Eve832 @josmperez @grafana/plugins-platform-frontend @grafana/plugins-platform-backend + +/docs/sources/panels-visualizations/query-transform-data/transform-data/index.md @imatwawana @baldm0mma +# END Technical documentation # Backend code /go.mod @grafana/backend-platform /go.sum @grafana/backend-platform +/go.work @grafana/grafana-app-platform-squad +/go.work.sum @grafana/grafana-app-platform-squad /.bingo/ @grafana/backend-platform /pkg/README.md @grafana/backend-platform /pkg/ruleguard.rules.go @grafana/backend-platform @@ -64,13 +69,15 @@ /.golangci.toml @grafana/backend-platform /build.go @grafana/backend-platform /scripts/modowners/ @grafana/backend-platform +/hack/ @grafana/grafana-app-platform-squad /pkg/api/ @grafana/backend-platform /pkg/apis/ @grafana/grafana-app-platform-squad /pkg/bus/ @grafana/backend-platform /pkg/cmd/ @grafana/backend-platform -/pkg/components/apikeygen/ @grafana/grafana-authnz-team -/pkg/components/satokengen/ @grafana/grafana-authnz-team +/pkg/cmd/grafana/apiserver @grafana/grafana-app-platform-squad +/pkg/components/apikeygen/ @grafana/identity-access-team +/pkg/components/satokengen/ @grafana/identity-access-team /pkg/components/dashdiffs/ @grafana/backend-platform /pkg/components/imguploader/ @grafana/backend-platform /pkg/components/loki/ @grafana/backend-platform @@ -81,7 +88,6 @@ /pkg/ifaces/ @grafana/backend-platform /pkg/infra/appcontext/ @grafana/backend-platform /pkg/infra/db/ @grafana/backend-platform -/pkg/infra/grn/ @grafana/backend-platform /pkg/infra/localcache/ @grafana/backend-platform /pkg/infra/log/ @grafana/backend-platform /pkg/infra/metrics/ @grafana/backend-platform @@ -96,18 +102,20 @@ /pkg/mocks/ @grafana/backend-platform /pkg/models/ @grafana/backend-platform /pkg/server/ @grafana/backend-platform +/pkg/apiserver @grafana/grafana-app-platform-squad +/pkg/apimachinery @grafana/grafana-app-platform-squad +/pkg/promlib @grafana/observability-metrics /pkg/services/annotations/ @grafana/backend-platform -/pkg/services/apikey/ @grafana/grafana-authnz-team +/pkg/services/apikey/ @grafana/identity-access-team /pkg/services/cleanup/ @grafana/backend-platform /pkg/services/contexthandler/ @grafana/backend-platform /pkg/services/correlations/ @grafana/explore-squad /pkg/services/dashboardimport/ @grafana/backend-platform /pkg/services/dashboards/ @grafana/backend-platform -/pkg/services/dashboardsnapshots/ @grafana/sharing-squad /pkg/services/dashboardversion/ @grafana/backend-platform /pkg/services/encryption/ @grafana/backend-platform /pkg/services/folder/ @grafana/backend-platform -/pkg/services/grafana-apiserver @grafana/grafana-app-platform-squad +/pkg/services/apiserver @grafana/grafana-app-platform-squad /pkg/services/hooks/ @grafana/backend-platform /pkg/services/kmsproviders/ @grafana/backend-platform /pkg/services/licensing/ @grafana/backend-platform @@ -115,10 +123,8 @@ /pkg/services/notifications/ @grafana/backend-platform /pkg/services/org/ @grafana/backend-platform /pkg/services/playlist/ @grafana/grafana-app-platform-squad -/pkg/services/plugindashboards/ @grafana/backend-platform /pkg/services/preference/ @grafana/backend-platform /pkg/services/provisioning/ @grafana/backend-platform -/pkg/services/publicdashboards/ @grafana/sharing-squad /pkg/services/query/ @grafana/backend-platform /pkg/services/queryhistory/ @grafana/backend-platform /pkg/services/quota/ @grafana/backend-platform @@ -129,27 +135,26 @@ /pkg/services/secrets/ @grafana/backend-platform /pkg/services/shorturls/ @grafana/backend-platform /pkg/services/sqlstore/ @grafana/backend-platform +/pkg/services/ssosettings/ @grafana/identity-access-team /pkg/services/star/ @grafana/backend-platform /pkg/services/stats/ @grafana/backend-platform /pkg/services/tag/ @grafana/backend-platform -/pkg/services/team/ @grafana/grafana-authnz-team +/pkg/services/team/ @grafana/identity-access-team /pkg/services/temp_user/ @grafana/backend-platform /pkg/services/updatechecker/ @grafana/backend-platform -/pkg/services/user/ @grafana/grafana-authnz-team +/pkg/services/user/ @grafana/identity-access-team /pkg/services/validations/ @grafana/backend-platform /pkg/setting/ @grafana/backend-platform /pkg/tests/ @grafana/backend-platform +/pkg/tests/apis/ @grafana/grafana-app-platform-squad /pkg/tests/api/correlations/ @grafana/explore-squad /pkg/tsdb/grafanads/ @grafana/backend-platform -/pkg/tsdb/intervalv2/ @grafana/backend-platform /pkg/tsdb/legacydata/ @grafana/backend-platform /pkg/tsdb/opentsdb/ @grafana/backend-platform /pkg/tsdb/sqleng/ @grafana/partner-datasources @grafana/oss-big-tent -/pkg/tsdb/sqleng/proxyutil @grafana/hosted-grafana-team /pkg/util/ @grafana/backend-platform /pkg/web/ @grafana/backend-platform -/pkg/services/grpcserver/ @grafana/backend-platform /pkg/infra/kvstore/ @grafana/backend-platform /pkg/infra/fs/ @grafana/backend-platform /pkg/infra/x/ @grafana/backend-platform @@ -157,7 +162,7 @@ # devenv # Backend code, developers environment -/devenv/docker/blocks/auth/ @grafana/grafana-authnz-team +/devenv/docker/blocks/auth/ @grafana/identity-access-team # Logs code, developers environment /devenv/docker/blocks/loki* @grafana/observability-logs @@ -166,8 +171,8 @@ /devenv/bulk-dashboards/ @grafana/dashboards-squad /devenv/bulk-folders/ @grafana/grafana-frontend-platform -/devenv/bulk_alerting_dashboards/ @grafana/alerting-backend-product /devenv/create_docker_compose.sh @grafana/backend-platform +/devenv/alert_rules.yaml @grafana/alerting-backend-product /devenv/dashboards.yaml @grafana/dashboards-squad /devenv/datasources.yaml @grafana/backend-platform /devenv/datasources_docker.yaml @grafana/backend-platform @@ -185,13 +190,13 @@ /devenv/docker/blocks/influxdb1/ @grafana/observability-metrics /devenv/docker/blocks/jaeger/ @grafana/observability-traces-and-profiling /devenv/docker/blocks/maildev/ @grafana/alerting-frontend -/devenv/docker/blocks/mariadb/ @grafana/grafana-bi-squad +/devenv/docker/blocks/mariadb/ @grafana/oss-big-tent /devenv/docker/blocks/memcached/ @grafana/backend-platform /devenv/docker/blocks/mimir_backend/ @grafana/alerting-backend-product -/devenv/docker/blocks/mssql/ @grafana/grafana-bi-squad -/devenv/docker/blocks/mssql_arm64/ @grafana/grafana-bi-squad -/devenv/docker/blocks/mssql_tests/ @grafana/grafana-bi-squad -/devenv/docker/blocks/mssql_tls/ @grafana/grafana-bi-squad +/devenv/docker/blocks/mssql/ @grafana/partner-datasources +/devenv/docker/blocks/mssql_arm64/ @grafana/partner-datasources +/devenv/docker/blocks/mssql_tests/ @grafana/partner-datasources +/devenv/docker/blocks/mssql_tls/ @grafana/partner-datasources /devenv/docker/blocks/mysql/ @grafana/oss-big-tent /devenv/docker/blocks/mysql_exporter/ @grafana/oss-big-tent /devenv/docker/blocks/mysql_opendata/ @grafana/oss-big-tent @@ -230,15 +235,15 @@ # Continuous Integration -.drone.yml @grafana/grafana-delivery -.drone.star @grafana/grafana-delivery -/scripts/drone/ @grafana/grafana-delivery -/pkg/build/ @grafana/grafana-delivery -/.dockerignore @grafana/grafana-delivery -/Dockerfile @grafana/grafana-delivery -/Makefile @grafana/grafana-delivery -/scripts/build/ @grafana/grafana-delivery -/scripts/list-release-artifacts.sh @grafana/grafana-delivery +.drone.yml @grafana/grafana-release-guild +.drone.star @grafana/grafana-release-guild +/scripts/drone/ @grafana/grafana-release-guild +/pkg/build/ @grafana/grafana-release-guild +/.dockerignore @grafana/grafana-release-guild +/Dockerfile @grafana/grafana-release-guild +/Makefile @grafana/grafana-release-guild +/scripts/build/ @grafana/grafana-release-guild +/scripts/list-release-artifacts.sh @grafana/grafana-release-guild # OSS Plugin Partnerships backend code /pkg/tsdb/cloudwatch/ @grafana/aws-datasources @@ -255,10 +260,12 @@ /pkg/tsdb/grafana-pyroscope-datasource/ @grafana/observability-traces-and-profiling /pkg/tsdb/parca/ @grafana/observability-traces-and-profiling -# BI backend code +# OSS Big Tent backend code /pkg/tsdb/mysql/ @grafana/oss-big-tent -/pkg/tsdb/postgres/ @grafana/oss-big-tent -/pkg/tsdb/mssql/ @grafana/grafana-bi-squad +/pkg/tsdb/grafana-postgresql-datasource/ @grafana/oss-big-tent + +# Partner Datasources backend code +/pkg/tsdb/mssql/ @grafana/partner-datasources # Database migrations /pkg/services/sqlstore/migrations/ @grafana/backend-platform @grafana/hosted-grafana-team @@ -269,20 +276,19 @@ /pkg/services/searchV2/ @grafana/grafana-app-platform-squad /pkg/services/store/ @grafana/grafana-app-platform-squad /pkg/infra/filestorage/ @grafana/grafana-app-platform-squad -/pkg/util/converter/ @grafana/grafana-app-platform-squad /pkg/modules/ @grafana/grafana-app-platform-squad -/pkg/kindsysreport/ @grafana/grafana-app-platform-squad +/pkg/services/grpcserver/ @grafana/grafana-app-platform-squad +/pkg/generated @grafana/grafana-app-platform-squad # Alerting /pkg/services/ngalert/ @grafana/alerting-backend-product /pkg/services/sqlstore/migrations/ualert/ @grafana/alerting-backend-product -/pkg/services/alerting/ @grafana/alerting-backend-product /pkg/tests/api/alerting/ @grafana/alerting-backend-product /public/app/features/alerting/ @grafana/alerting-frontend # Library Services -/pkg/services/libraryelements/ @grafana/grafana-frontend-platform -/pkg/services/librarypanels/ @grafana/grafana-frontend-platform +/pkg/services/libraryelements/ @grafana/dashboards-squad +/pkg/services/librarypanels/ @grafana/dashboards-squad # Plugins /pkg/api/pluginproxy/ @grafana/plugins-platform-backend @@ -295,6 +301,7 @@ /pkg/tsdb/grafana-testdata-datasource/ @grafana/plugins-platform-backend /pkg/tsdb/Magefile.go @grafana/plugins-platform-backend /pkg/services/pluginsintegration/pluginsettings/ @grafana/plugins-platform-backend +/pkg/services/plugindashboards/ @grafana/plugins-platform-backend # Backend code docs /contribute/backend/ @grafana/backend-platform @@ -305,18 +312,17 @@ /public/app/core/internationalization/ @grafana/grafana-frontend-platform /e2e/ @grafana/grafana-frontend-platform /e2e/cloud-plugins-suite/ @grafana/partner-datasources +/e2e/plugin-e2e/plugin-e2e-api-tests/ @grafana/plugins-platform-frontend /packages/ @grafana/grafana-frontend-platform @grafana/plugins-platform-frontend /packages/grafana-e2e-selectors/ @grafana/grafana-frontend-platform /packages/grafana-e2e/ @grafana/grafana-frontend-platform /packages/grafana-ui/.storybook/ @grafana/plugins-platform-frontend /packages/grafana-ui/src/components/ @grafana/grafana-frontend-platform /packages/grafana-ui/src/components/DateTimePickers/ @grafana/grafana-frontend-platform -/packages/grafana-ui/src/components/Table/ @grafana/grafana-bi-squad +/packages/grafana-ui/src/components/Table/ @grafana/dataviz-squad +/packages/grafana-ui/src/components/Table/SparklineCell.tsx @grafana/dataviz-squad @grafana/app-o11y-visualizations /packages/grafana-ui/src/components/Gauge/ @grafana/dataviz-squad /packages/grafana-ui/src/components/BarGauge/ @grafana/dataviz-squad -/packages/grafana-ui/src/components/GraphNG/ @grafana/dataviz-squad -/packages/grafana-ui/src/components/Graph/ @grafana/dataviz-squad -/packages/grafana-ui/src/components/TimeSeries/ @grafana/dataviz-squad /packages/grafana-ui/src/components/uPlot/ @grafana/dataviz-squad /packages/grafana-ui/src/components/DataLinks/ @grafana/dataviz-squad /packages/grafana-ui/src/components/ValuePicker/ @grafana/dataviz-squad @@ -324,19 +330,28 @@ /packages/grafana-ui/src/components/VizLegend/ @grafana/dataviz-squad /packages/grafana-ui/src/components/VizRepeater/ @grafana/dataviz-squad /packages/grafana-ui/src/components/VizTooltip/ @grafana/dataviz-squad +/packages/grafana-ui/src/components/Sparkline/ @grafana/grafana-frontend-platform @grafana/app-o11y-visualizations +/packages/grafana-ui/src/graveyard/Graph/ @grafana/dataviz-squad +/packages/grafana-ui/src/graveyard/GraphNG/ @grafana/dataviz-squad +/packages/grafana-ui/src/graveyard/TimeSeries/ @grafana/dataviz-squad /packages/grafana-ui/src/utils/storybook/ @grafana/plugins-platform-frontend -/packages/grafana-data/src/transformations/ @grafana/grafana-bi-squad +/packages/grafana-data/src/transformations/ @grafana/dataviz-squad /packages/grafana-data/src/**/*logs* @grafana/observability-logs /packages/grafana-schema/src/**/*tempo* @grafana/observability-traces-and-profiling +/packages/grafana-schema/src/**/*canvas* @grafana/dataviz-squad /packages/grafana-flamegraph/ @grafana/observability-traces-and-profiling /plugins-bundled/ @grafana/plugins-platform-frontend /packages/grafana-plugin-configs/ @grafana/plugins-platform-frontend - +/packages/grafana-prometheus/ @grafana/observability-metrics +/packages/grafana-o11y-ds-frontend/ @grafana/observability-logs @grafana/observability-traces-and-profiling +/packages/grafana-sql/ @grafana/partner-datasources @grafana/oss-big-tent # root files, mostly frontend -.browserslistrc @grafana/frontend-ops -package.json @grafana/frontend-ops -tsconfig.json @grafana/frontend-ops +/.browserslistrc @grafana/frontend-ops +/package.json @grafana/frontend-ops +/nx.json @grafana/frontend-ops +/project.json @grafana/frontend-ops +/tsconfig.json @grafana/frontend-ops /.editorconfig @grafana/frontend-ops /.eslintignore @grafana/frontend-ops /.gitattributes @grafana/frontend-ops @@ -346,33 +361,39 @@ tsconfig.json @grafana/frontend-ops /.yarn @grafana/frontend-ops /.yarnrc.yml @grafana/frontend-ops /yarn.lock @grafana/frontend-ops -/babel.config.json @grafana/frontend-ops -lerna.json @grafana/frontend-ops +/lerna.json @grafana/frontend-ops /.prettierrc.js @grafana/frontend-ops /.eslintrc @grafana/frontend-ops /.vim @zoltanbedi /jest.config.js @grafana/frontend-ops /latest.json @grafana/frontend-ops -/metadata.md @grafana/plugins-platform /stylelint.config.js @grafana/frontend-ops /tools/ @grafana/frontend-ops /lefthook.yml @grafana/frontend-ops /lefthook.rc @grafana/frontend-ops -.husky/pre-commit @grafana/frontend-ops -cypress.config.js @grafana/grafana-frontend-platform -.levignore.js @grafana/plugins-platform-frontend +/.husky/pre-commit @grafana/frontend-ops +/cypress.config.js @grafana/grafana-frontend-platform +/.levignore.js @grafana/plugins-platform-frontend +playwright.config.ts @grafana/plugins-platform-frontend # public folder /public/app/core/ @grafana/grafana-frontend-platform /public/app/core/components/TimePicker/ @grafana/grafana-frontend-platform /public/app/core/components/Layers/ @grafana/dataviz-squad -/public/app/core/components/TraceToLogs @grafana/observability-traces-and-profiling +/public/app/core/components/GraphNG/ @grafana/dataviz-squad +/public/app/core/components/TimeSeries/ @grafana/dataviz-squad +/public/app/core/components/TimelineChart/ @grafana/dataviz-squad +/public/app/core/components/Form/ @grafana/grafana-frontend-platform /public/app/features/all.ts @grafana/grafana-frontend-platform -/public/app/features/admin/ @grafana/grafana-authnz-team -/public/app/features/auth-config/ @grafana/grafana-authnz-team -/public/app/features/annotations/ @grafana/grafana-frontend-platform -/public/app/features/api-keys/ @grafana/grafana-authnz-team +/public/app/features/admin/ @grafana/identity-access-team + +# Temp owners until Enterprise team takes over +/public/app/features/migrate-to-cloud @grafana/grafana-frontend-platform + +/public/app/features/auth-config/ @grafana/identity-access-team +/public/app/features/annotations/ @grafana/dashboards-squad +/public/app/features/api-keys/ @grafana/identity-access-team /public/app/features/canvas/ @grafana/dataviz-squad /public/app/features/geo/ @grafana/dataviz-squad /public/app/features/visualization/data-hover/ @grafana/dataviz-squad @@ -380,62 +401,64 @@ cypress.config.js @grafana/grafana-frontend-platform /public/app/features/connections/ @grafana/plugins-platform-frontend @mikkancso /public/app/features/correlations/ @grafana/explore-squad /public/app/features/dashboard/ @grafana/dashboards-squad -/public/app/features/dashboard/components/TransformationsEditor/ @grafana/grafana-bi-squad +/public/app/features/dashboard/components/TransformationsEditor/ @grafana/dataviz-squad /public/app/features/dashboard-scene/ @grafana/dashboards-squad +/public/app/features/scopes/ @grafana/dashboards-squad /public/app/features/datasources/ @grafana/plugins-platform-frontend @mikkancso /public/app/features/dimensions/ @grafana/dataviz-squad -/public/app/features/dataframe-import/ @grafana/grafana-bi-squad +/public/app/features/dataframe-import/ @grafana/dataviz-squad /public/app/features/explore/ @grafana/explore-squad /public/app/features/expressions/ @grafana/observability-metrics /public/app/features/folders/ @grafana/grafana-frontend-platform /public/app/features/inspector/ @grafana/dashboards-squad /public/app/features/invites/ @grafana/grafana-frontend-platform -/public/app/features/library-panels/ @grafana/grafana-frontend-platform +/public/app/features/library-panels/ @grafana/dashboards-squad /public/app/features/logs/ @grafana/observability-logs /public/app/features/live/ @grafana/grafana-app-platform-squad +/public/app/features/apiserver/ @grafana/grafana-app-platform-squad /public/app/features/manage-dashboards/ @grafana/dashboards-squad /public/app/features/notifications/ @grafana/grafana-frontend-platform /public/app/features/org/ @grafana/grafana-frontend-platform /public/app/features/panel/ @grafana/dashboards-squad /public/app/features/playlist/ @grafana/dashboards-squad /public/app/features/plugins/ @grafana/plugins-platform-frontend -/public/app/features/plugins/sql/ @grafana/partner-datasources @grafana/oss-big-tent /public/app/features/profile/ @grafana/grafana-frontend-platform /public/app/features/runtime/ @ryantxu /public/app/features/query/ @grafana/dashboards-squad /public/app/features/sandbox/ @grafana/grafana-frontend-platform -/public/app/features/scenes/ @grafana/dashboards-squad /public/app/features/browse-dashboards/ @grafana/grafana-frontend-platform /public/app/features/search/ @grafana/grafana-frontend-platform -/public/app/features/serviceaccounts/ @grafana/grafana-authnz-team +/public/app/features/serviceaccounts/ @grafana/identity-access-team /public/app/features/storage/ @grafana/grafana-app-platform-squad -/public/app/features/teams/ @grafana/grafana-authnz-team +/public/app/features/teams/ @grafana/identity-access-team /public/app/features/templating/ @grafana/dashboards-squad -/public/app/features/transformers/ @grafana/grafana-bi-squad -/public/app/features/users/ @grafana/grafana-authnz-team +/public/app/features/trails/ @torkelo +/public/app/features/transformers/ @grafana/dataviz-squad +/public/app/features/transformers/timeSeriesTable/ @grafana/dataviz-squad @grafana/app-o11y-visualizations +/public/app/features/users/ @grafana/identity-access-team /public/app/features/variables/ @grafana/dashboards-squad -/public/app/plugins/panel/alertGroups/ @grafana/alerting-frontend /public/app/plugins/panel/alertlist/ @grafana/alerting-frontend /public/app/plugins/panel/annolist/ @grafana/grafana-frontend-platform /public/app/plugins/panel/barchart/ @grafana/dataviz-squad /public/app/plugins/panel/bargauge/ @grafana/dataviz-squad /public/app/plugins/panel/dashlist/ @grafana/grafana-frontend-platform /public/app/plugins/panel/debug/ @ryantxu -/public/app/plugins/panel/datagrid/ @grafana/grafana-bi-squad +/public/app/plugins/panel/datagrid/ @grafana/dataviz-squad /public/app/plugins/panel/gauge/ @grafana/dataviz-squad /public/app/plugins/panel/gettingstarted/ @grafana/grafana-frontend-platform /public/app/plugins/panel/graph/ @grafana/dataviz-squad /public/app/plugins/panel/heatmap/ @grafana/dataviz-squad /public/app/plugins/panel/histogram/ @grafana/dataviz-squad /public/app/plugins/panel/logs/ @grafana/observability-logs -/public/app/plugins/panel/nodeGraph/ @grafana/observability-traces-and-profiling +/public/app/plugins/panel/nodeGraph/ @grafana/observability-traces-and-profiling @grafana/app-o11y-visualizations /public/app/plugins/panel/traces/ @grafana/observability-traces-and-profiling /public/app/plugins/panel/flamegraph/ @grafana/observability-traces-and-profiling /public/app/plugins/panel/piechart/ @grafana/dataviz-squad /public/app/plugins/panel/state-timeline/ @grafana/dataviz-squad /public/app/plugins/panel/status-history/ @grafana/dataviz-squad -/public/app/plugins/panel/table/ @grafana/grafana-bi-squad -/public/app/plugins/panel/table-old/ @grafana/grafana-bi-squad +/public/app/plugins/panel/table/ @grafana/dataviz-squad +/public/app/plugins/panel/table/cells/SparklineCellOptionsEditor.tsx @grafana/dataviz-squad @grafana/app-o11y-visualizations +/public/app/plugins/panel/table-old/ @grafana/dataviz-squad /public/app/plugins/panel/timeseries/ @grafana/dataviz-squad /public/app/plugins/panel/trend/ @grafana/dataviz-squad /public/app/plugins/panel/geomap/ @grafana/dataviz-squad @@ -451,19 +474,19 @@ cypress.config.js @grafana/grafana-frontend-platform /public/app/routes/ @grafana/grafana-frontend-platform /public/app/store/ @grafana/grafana-frontend-platform /public/app/types/ @grafana/grafana-frontend-platform +/public/app/types/alerting.ts @grafana/alerting-frontend /public/dashboards/ @grafana/dashboards-squad -/public/fonts/ @grafana/alerting-frontend /public/gazetteer/ @ryantxu /public/img/ @grafana/grafana-frontend-platform /public/lib/ @grafana/grafana-frontend-platform /public/lib/monaco-languages/kusto.ts @grafana/partner-datasources /public/maps/ @ryantxu /public/robots.txt @grafana/frontend-ops +/public/fonts/ @grafana/grafana-frontend-platform /public/sass/ @grafana/grafana-frontend-platform /public/test/ @grafana/grafana-frontend-platform /public/test/helpers/alertingRuleEditor.tsx @grafana/alerting-frontend /public/views/ @grafana/grafana-frontend-platform -/public/views/openapi3.html @grafana/backend-platform /public/views/swagger.html @grafana/backend-platform /public/app/features/explore/Logs/ @grafana/observability-logs @@ -488,37 +511,39 @@ cypress.config.js @grafana/grafana-frontend-platform -/scripts/benchmark-access-control.sh @grafana/grafana-authnz-team +/scripts/benchmark-access-control.sh @grafana/identity-access-team /scripts/check-breaking-changes.sh @grafana/plugins-platform-frontend -/scripts/ci-* @grafana/grafana-delivery -/scripts/circle-* @grafana/grafana-delivery -/scripts/publish-npm-packages.sh @grafana/grafana-delivery @grafana/plugins-platform-frontend -/scripts/validate-npm-packages.sh @grafana/grafana-delivery @grafana/plugins-platform-frontend -/scripts/ci-frontend-metrics.sh @grafana/grafana-frontend-platform @grafana/plugins-platform-frontend @grafana/grafana-bi-squad +/scripts/ci-* @grafana/grafana-release-guild +/scripts/circle-* @grafana/grafana-release-guild +/scripts/publish-npm-packages.sh @grafana/grafana-release-guild @grafana/plugins-platform-frontend +/scripts/validate-npm-packages.sh @grafana/grafana-release-guild @grafana/plugins-platform-frontend +/scripts/ci-frontend-metrics.sh @grafana/grafana-frontend-platform @grafana/plugins-platform-frontend @grafana/dataviz-squad /scripts/cli/ @grafana/grafana-frontend-platform /scripts/clean-git-or-error.sh @grafana/grafana-as-code /scripts/grafana-server/ @grafana/grafana-frontend-platform -/scripts/helpers/ @grafana/grafana-delivery +/scripts/helpers/ @grafana/grafana-release-guild /scripts/import_many_dashboards.sh @torkelo /scripts/mixin-check.sh @bergquist /scripts/openapi3/ @grafana/grafana-operator-experience-squad /scripts/prepare-packagejson.js @grafana/frontend-ops /scripts/protobuf-check.sh @grafana/plugins-platform-backend /scripts/stripnulls.sh @grafana/grafana-as-code -/scripts/tag_release.sh @grafana/grafana-delivery -/scripts/trigger_docker_build.sh @grafana/grafana-delivery -/scripts/trigger_grafana_packer.sh @grafana/grafana-delivery -/scripts/trigger_windows_build.sh @grafana/grafana-delivery +/scripts/tag_release.sh @grafana/grafana-release-guild +/scripts/trigger_docker_build.sh @grafana/grafana-release-guild +/scripts/trigger_grafana_packer.sh @grafana/grafana-release-guild +/scripts/trigger_windows_build.sh @grafana/grafana-release-guild /scripts/cleanup-husky.sh @grafana/frontend-ops -/scripts/verify-repo-update/ @grafana/grafana-delivery -scripts/generate-icon-bundle.js @grafana/plugins-platform-frontend @grafana/grafana-frontend-platform +/scripts/verify-repo-update/ @grafana/grafana-release-guild +/scripts/generate-icon-bundle.js @grafana/plugins-platform-frontend @grafana/grafana-frontend-platform +/scripts/levitate-parse-json-report.js @grafana/plugins-platform-frontend -/scripts/docs/generate-transformations.ts @grafana/grafana-bi-squad +/scripts/**/generate-transformations* @grafana/dataviz-squad /scripts/webpack/ @grafana/frontend-ops /scripts/generate-a11y-report.sh @grafana/grafana-frontend-platform .pa11yci.conf.js @grafana/grafana-frontend-platform .pa11yci-pr.conf.js @grafana/grafana-frontend-platform .betterer.results @grafanabot +.betterer.results.json @grafanabot .betterer.ts @grafana/grafana-frontend-platform # @grafana/ui component documentation @@ -539,10 +564,10 @@ scripts/generate-icon-bundle.js @grafana/plugins-platform-frontend @grafana/graf /public/app/plugins/datasource/jaeger/ @grafana/observability-traces-and-profiling /public/app/plugins/datasource/loki/ @grafana/observability-logs /public/app/plugins/datasource/mixed/ @grafana/dashboards-squad -/public/app/plugins/datasource/mssql/ @grafana/grafana-bi-squad +/public/app/plugins/datasource/mssql/ @grafana/partner-datasources /public/app/plugins/datasource/mysql/ @grafana/oss-big-tent /public/app/plugins/datasource/opentsdb/ @grafana/observability-metrics -/public/app/plugins/datasource/postgres/ @grafana/oss-big-tent +/public/app/plugins/datasource/grafana-postgresql-datasource/ @grafana/oss-big-tent /public/app/plugins/datasource/prometheus/ @grafana/observability-metrics /public/app/plugins/datasource/cloud-monitoring/ @grafana/partner-datasources /public/app/plugins/datasource/zipkin/ @grafana/observability-traces-and-profiling @@ -551,6 +576,14 @@ scripts/generate-icon-bundle.js @grafana/plugins-platform-frontend @grafana/graf /public/app/plugins/datasource/parca/ @grafana/observability-traces-and-profiling /public/app/plugins/datasource/alertmanager/ @grafana/alerting-squad +# Grafana Sharing Squad +/public/app/features/dashboard/components/ShareModal/ @grafana/sharing-squad +/public/app/features/manage-dashboards/components/PublicDashboardListTable/ @grafana/sharing-squad +/public/app/features/dashboard/containers/PublicDashboardPage.tsx @grafana/sharing-squad +/public/app/features/manage-dashboards/components/SnapshotListTable.tsx @grafana/sharing-squad +/pkg/services/dashboardsnapshots/ @grafana/sharing-squad +/pkg/services/publicdashboards/ @grafana/sharing-squad + # SSE - Server Side Expressions /pkg/expr/ @grafana/observability-metrics @@ -558,31 +591,34 @@ scripts/generate-icon-bundle.js @grafana/plugins-platform-frontend @grafana/graf /grafana-mixin/ @grafana/hosted-grafana-team # Grafana authentication and authorization -/pkg/login/ @grafana/grafana-authnz-team -/pkg/services/accesscontrol/ @grafana/grafana-authnz-team -/pkg/services/anonymous/ @grafana/grafana-authnz-team -/pkg/services/auth/ @grafana/grafana-authnz-team -/pkg/services/authn/ @grafana/grafana-authnz-team -/pkg/services/signingkeys/ @grafana/grafana-authnz-team -/pkg/services/dashboards/accesscontrol.go @grafana/grafana-authnz-team -/pkg/services/datasources/guardian/ @grafana/grafana-authnz-team -/pkg/services/guardian/ @grafana/grafana-authnz-team -/pkg/services/ldap/ @grafana/grafana-authnz-team -/pkg/services/login/ @grafana/grafana-authnz-team -/pkg/services/loginattempt/ @grafana/grafana-authnz-team -/pkg/services/extsvcauth/ @grafana/grafana-authnz-team -/pkg/services/oauthtoken/ @grafana/grafana-authnz-team -/pkg/services/serviceaccounts/ @grafana/grafana-authnz-team +/pkg/login/ @grafana/identity-access-team +/pkg/services/accesscontrol/ @grafana/identity-access-team +/pkg/services/anonymous/ @grafana/identity-access-team +/pkg/services/auth/ @grafana/identity-access-team +/pkg/services/authn/ @grafana/identity-access-team +/pkg/services/signingkeys/ @grafana/identity-access-team +/pkg/services/dashboards/accesscontrol.go @grafana/identity-access-team +/pkg/services/datasources/guardian/ @grafana/identity-access-team +/pkg/services/guardian/ @grafana/identity-access-team +/pkg/services/ldap/ @grafana/identity-access-team +/pkg/services/login/ @grafana/identity-access-team +/pkg/services/loginattempt/ @grafana/identity-access-team +/pkg/services/extsvcauth/ @grafana/identity-access-team +/pkg/services/oauthtoken/ @grafana/identity-access-team +/pkg/services/serviceaccounts/ @grafana/identity-access-team # Support bundles -/public/app/features/support-bundles/ @grafana/grafana-authnz-team -/pkg/services/supportbundles/ @grafana/grafana-authnz-team +/public/app/features/support-bundles/ @grafana/identity-access-team +/pkg/services/supportbundles/ @grafana/identity-access-team # Grafana Operator Experience Team -/pkg/infra/httpclient/httpclientprovider/sigv4_middleware.go @grafana/grafana-operator-experience-squad -/pkg/infra/httpclient/httpclientprovider/sigv4_middleware_test.go @grafana/grafana-operator-experience-squad /pkg/services/caching/ @grafana/grafana-operator-experience-squad -/pkg/services/featuremgmt/ @grafana/grafana-operator-experience-squad +/pkg/services/cloudmigration/ @grafana/grafana-operator-experience-squad +/pkg/services/gcom/ @grafana/grafana-operator-experience-squad + +# Feature toggles +/pkg/services/featuremgmt/ @grafana/grafana-backend-services-squad + # Kind definitions /kinds/dashboard @grafana/dashboards-squad @@ -591,11 +627,12 @@ scripts/generate-icon-bundle.js @grafana/plugins-platform-frontend @grafana/graf # Kind system and code generation embed.go @grafana/grafana-as-code /pkg/kinds/ @grafana/grafana-as-code -/pkg/cuectx/ @grafana/grafana-as-code /pkg/registry/ @grafana/grafana-as-code +/pkg/registry/apis/ @grafana/grafana-app-platform-squad /pkg/codegen/ @grafana/grafana-as-code +/pkg/codegen/generators @grafana/grafana-as-code /pkg/kinds/*/*_gen.go @grafana/grafana-as-code -/pkg/registry/corekind/ @grafana/grafana-as-code +/pkg/registry/schemas/ @grafana/grafana-as-code /public/app/plugins/*gen.go @grafana/grafana-as-code /cue.mod/ @grafana/grafana-as-code @@ -613,49 +650,54 @@ embed.go @grafana/grafana-as-code /.github/renovate.json5 @grafana/frontend-ops /.github/teams.yml @armandgrillet /.github/workflows/alerting-swagger-gen.yml @grafana/alerting-backend-product -/.github/workflows/auto-milestone.yml @grafana/grafana-delivery -/.github/workflows/backport.yml @grafana/grafana-delivery -/.github/workflows/bump-version.yml @grafana/grafana-delivery -/.github/workflows/close-milestone.yml @grafana/grafana-delivery +/.github/workflows/auto-milestone.yml @grafana/grafana-release-guild +/.github/workflows/backport.yml @grafana/grafana-release-guild +/.github/workflows/bump-version.yml @grafana/grafana-release-guild +/.github/workflows/close-milestone.yml @grafana/grafana-release-guild /.github/workflows/codeowners-validator.yml @tolzhabayev /.github/workflows/codeql-analysis.yml @DanCech /.github/workflows/commands.yml @torkelo -/.github/workflows/community-release.yml @grafana/grafana-delivery +/.github/workflows/community-release.yml @grafana/grafana-release-guild /.github/workflows/detect-breaking-changes-* @grafana/plugins-platform-frontend /.github/workflows/doc-validator.yml @grafana/docs-tooling /.github/workflows/epic-add-to-platform-ux-parent-project.yml @meanmina -/.github/workflows/github-release.yml @grafana/grafana-delivery +/.github/workflows/github-release.yml @grafana/grafana-release-guild /.github/workflows/issue-labeled.yml @armandgrillet /.github/workflows/issue-opened.yml @grafana/grafana-community-support /.github/workflows/metrics-collector.yml @torkelo /.github/workflows/milestone.yml @marefr -/.github/workflows/ox-code-coverage.yml @grafana/explore-squad /.github/workflows/pr-checks.yml @marefr /.github/workflows/pr-codeql-analysis-go.yml @DanCech /.github/workflows/pr-codeql-analysis-javascript.yml @DanCech /.github/workflows/pr-codeql-analysis-python.yml @DanCech /.github/workflows/pr-commands.yml @marefr -/.github/workflows/pr-patch-check.yml @grafana/grafana-delivery -/.github/workflows/sync-mirror.yml @grafana/grafana-delivery +/.github/workflows/pr-patch-check.yml @grafana/grafana-release-guild +/.github/workflows/sync-mirror.yml @grafana/grafana-release-guild /.github/workflows/publish-technical-documentation-next.yml @grafana/docs-tooling /.github/workflows/publish-technical-documentation-release.yml @grafana/docs-tooling -/.github/workflows/remove-milestone.yml @grafana/grafana-delivery +/.github/workflows/remove-milestone.yml @grafana/grafana-release-guild /.github/workflows/sbom-report.yml @grafana/security-team /.github/workflows/scripts/json-file-to-job-output.js @grafana/plugins-platform-frontend /.github/workflows/scripts/pr-get-job-link.js @grafana/plugins-platform-frontend -/.github/workflows/stale.yml @grafana/grafana-delivery -/.github/workflows/update-changelog.yml @grafana/grafana-delivery +/.github/workflows/stale.yml @grafana/grafana-release-guild +/.github/workflows/update-changelog.yml @grafana/grafana-release-guild /.github/workflows/update-make-docs.yml @grafana/docs-tooling /.github/workflows/snyk.yml @grafana/security-team -/.github/workflows/scripts/kinds/verify-kinds.go @grafana/grafana-as-code -/.github/workflows/publish-kinds-next.yml @grafana/grafana-as-code -/.github/workflows/publish-kinds-release.yml @grafana/grafana-as-code -/.github/workflows/verify-kinds.yml @grafana/grafana-as-code +/.github/workflows/scripts/kinds/verify-kinds.go @grafana/platform-cat +/.github/workflows/publish-kinds-next.yml @grafana/platform-cat +/.github/workflows/publish-kinds-release.yml @grafana/platform-cat +/.github/workflows/verify-kinds.yml @grafana/platform-cat /.github/workflows/dashboards-issue-add-label.yml @grafana/dashboards-squad /.github/workflows/ephemeral-instances-pr-comment.yml @grafana/grafana-operator-experience-squad /.github/workflows/ephemeral-instances-pr-opened-closed.yml @grafana/grafana-operator-experience-squad -/.github/workflows/create-security-patch-from-security-mirror.yml @grafana/grafana-delivery - +/.github/workflows/create-security-patch-from-security-mirror.yml @grafana/grafana-release-guild +/.github/workflows/core-plugins-build-and-release.yml @grafana/plugins-platform-frontend @grafana/plugins-platform-backend +/.github/workflows/i18n-crowdin-upload.yml @grafana/grafana-frontend-platform +/.github/workflows/i18n-crowdin-download.yml @grafana/grafana-frontend-platform +/.github/workflows/feature-toggle-cleanup.yml @tolzhabayev +/.github/workflows/scripts/feature-toggle-cleanup/feature-toggle-cleanup.js @tolzhabayev +/.github/workflows/pr-go-workspace-check.yml @grafana/grafana-app-platform-squad +/.github/workflows/run-scenes-e2e.yml @grafana/dashboards-squad # Generated files not requiring owner approval /packages/grafana-data/src/types/featureToggles.gen.ts @grafanabot @@ -667,11 +709,10 @@ embed.go @grafana/grafana-as-code # Conf /conf/defaults.ini @torkelo /conf/sample.ini @torkelo -/conf/ldap.toml @grafana/grafana-authnz-team -/conf/ldap_multiple.toml @grafana/grafana-authnz-team -/conf/provisioning/access-control/ @grafana/grafana-authnz-team +/conf/ldap.toml @grafana/identity-access-team +/conf/ldap_multiple.toml @grafana/identity-access-team +/conf/provisioning/access-control/ @grafana/identity-access-team /conf/provisioning/alerting/ @grafana/alerting-backend-product /conf/provisioning/dashboards/ @grafana/dashboards-squad /conf/provisioning/datasources/ @grafana/plugins-platform-backend -/conf/provisioning/notifiers/ @bergquist /conf/provisioning/plugins/ @grafana/plugins-platform-backend diff --git a/.github/ISSUE_TEMPLATE/1-feature_requests.md b/.github/ISSUE_TEMPLATE/1-feature_requests.md index ab43f8c1d83be..67449c9af2a1f 100644 --- a/.github/ISSUE_TEMPLATE/1-feature_requests.md +++ b/.github/ISSUE_TEMPLATE/1-feature_requests.md @@ -1,7 +1,6 @@ --- name: Feature Requests about: Suggest an enhancement or new feature for the Grafana project -labels: 'type/feature-request' --- @@ -18,4 +17,4 @@ labels: 'type/feature-request' **Who is this feature for?** -[Add information on what kind of user the feature is for.] \ No newline at end of file +[Add information on what kind of user the feature is for.] diff --git a/.github/bot.md b/.github/bot.md index ec745bcf93aa9..9477ab291e27f 100644 --- a/.github/bot.md +++ b/.github/bot.md @@ -9,8 +9,8 @@ Comment commands: Label commands: -* Add label `bot/question` the the bot will close with standard question message and add label `type/question` -* Add label `bot/duplicate` the the bot will close with standard duplicate message and add label `type/duplicate` +* Add label `bot/question` the bot will close with standard question message and add label `type/question` +* Add label `bot/duplicate` the bot will close with standard duplicate message and add label `type/duplicate` * Add label `bot/needs more info` for bot to request more info (or use comment command mentioned above) * Add label `bot/close feature request` for bot to close a feature request with standard message and adds label `not implemented` * Add label `bot/no new info` for bot to close an issue where we asked for more info but has not received any updates in at least 14 days. diff --git a/.github/pr-checks.json b/.github/pr-checks.json index fec10a1201dda..b97dbc137ece1 100644 --- a/.github/pr-checks.json +++ b/.github/pr-checks.json @@ -6,25 +6,6 @@ "success": "Milestone set", "failure": "Milestone not set" }, - { - "type": "check-label", - "title": "Backport Check", - "labels": { - "exists": "Backport enabled", - "notExists": "Backport decision needed", - "matches": [ - "backport v*" - ] - }, - "skip": { - "message": "Backport skipped", - "matches": [ - "backport", - "no-backport" - ] - }, - "targetUrl": "https://github.com/grafana/grafana/blob/main/contribute/merge-pull-request.md#should-the-pull-request-be-backported" - }, { "type": "check-changelog", "title": "Changelog Check", diff --git a/.github/pr-commands.json b/.github/pr-commands.json index ec60e516e218e..0e4f0da1150c3 100644 --- a/.github/pr-commands.json +++ b/.github/pr-commands.json @@ -23,7 +23,6 @@ "package.json", "tsconfig.json", "lerna.json", - ".babelrc", ".prettierrc.js", ".eslintrc", "**/*.mdx" @@ -119,7 +118,7 @@ }, { "type": "changedfiles", - "matches": [ "public/app/plugins/datasource/jaeger"], + "matches": [ "public/app/plugins/datasource/jaeger/**/*"], "action": "updateLabel", "addLabel": "datasource/Jaeger" }, @@ -149,7 +148,19 @@ }, { "type": "changedfiles", - "matches": [ "public/app/plugins/datasource/postgres/**/*", "pkg/tsdb/postgres/**/*"], + "matches": [ "public/app/plugins/datasource/parca/**/*"], + "action": "updateLabel", + "addLabel": "datasource/Parca" + }, + { + "type": "changedfiles", + "matches": [ "public/app/plugins/datasource/grafana-pyroscope-datasource/**/*", "pkg/tsdb/grafana-pyroscope-datasource/**/*"], + "action": "updateLabel", + "addLabel": "datasource/grafana-pyroscope" + }, + { + "type": "changedfiles", + "matches": [ "public/app/plugins/datasource/grafana-postgresql-datasource/**/*", "pkg/tsdb/grafana-postgresql-datasource/**/*"], "action": "updateLabel", "addLabel": "datasource/Postgres" }, diff --git a/.github/renovate.json5 b/.github/renovate.json5 index 6f64cde93fdf8..f1df23dde1a45 100644 --- a/.github/renovate.json5 +++ b/.github/renovate.json5 @@ -4,30 +4,23 @@ ], "enabledManagers": ["npm"], "ignoreDeps": [ - "commander", // we are planning to remove this, so no need to update it - "execa", // we should bump this once we move to esm modules - "history", // we should bump this together with react-router-dom - "@mdx-js/react", // storybook peer-depends on its 1.x version, we should upgrade this when we upgrade storybook + "history", // we should bump this together with react-router-dom (see https://github.com/grafana/grafana/issues/76744) + "react-router-dom", // we should bump this together with history (see https://github.com/grafana/grafana/issues/76744) + "loader-utils", // v3 requires upstream changes in ngtemplate-loader. ignore, and remove when we remove angular. "monaco-editor", // due to us exposing this via @grafana/ui/CodeEditor's props bumping can break plugins - "react-hook-form", // due to us exposing these hooks via @grafana/ui form components bumping can break plugins - "react-redux", // react-beautiful-dnd depends on react-redux 7.x, we need to update that one first - "react-router-dom", // we should bump this together with history - "ts-loader", // we should remove ts-loader and use babel-loader instead - "ora", // we should bump this once we move to esm modules - "@locker/near-membrane-dom", // critical library. we need to bump this only intentionally - "@locker/near-membrane-shared", // critical library. we need to bump this only intentionally - "@locker/near-membrane-shared-dom", // critical library. we need to bump this only intentionally + "@fingerprintjs/fingerprintjs", // we don't want to bump to v4 due to licensing changes + "@swc/core", // versions ~1.4.5 contain multiple bugs related to baseUrl resolution breaking builds. ], "includePaths": ["package.json", "packages/**", "public/app/plugins/**"], - "ignorePaths": ["emails/**", "plugins-bundled/**", "**/mocks/**"], - "labels": ["area/frontend", "dependencies", "no-backport", "no-changelog"], + "ignorePaths": ["emails/**", "plugins-bundled/**", "**/mocks/**", "packages/grafana-e2e/**"], + "labels": ["area/frontend", "dependencies", "no-changelog"], "postUpdateOptions": ["yarnDedupeHighest"], "packageRules": [ { + "automerge": true, + "matchCurrentVersion": "!/^0/", "matchUpdateTypes": ["patch"], - "excludePackagePatterns": ["^@?storybook"], - "extends": ["schedule:monthly"], - "groupName": "Monthly patch updates" + "excludePackagePatterns": ["^@?storybook", "^@locker"] }, { "matchPackagePatterns": ["^@?storybook"], @@ -78,6 +71,13 @@ ], "reviewers": ["leeoniya"], }, + { + "groupName": "locker", + "matchPackagePrefixes": [ + "@locker/" + ], + "reviewers": ["team:grafana/plugins-platform-frontend"], + }, ], "pin": { "enabled": false diff --git a/.github/workflows/alerting-swagger-gen.yml b/.github/workflows/alerting-swagger-gen.yml index f42389ceeed26..2fa61fe231244 100644 --- a/.github/workflows/alerting-swagger-gen.yml +++ b/.github/workflows/alerting-swagger-gen.yml @@ -16,7 +16,7 @@ jobs: - name: Set go version uses: actions/setup-go@v4 with: - go-version: '1.20.10' + go-version: '1.21.10' - name: Build swagger run: | make -C pkg/services/ngalert/api/tooling post.json api.json @@ -31,7 +31,7 @@ jobs: Please review and merge. branch: update-alerting-swagger-spec delete-branch: true - labels: 'area/alerting,type/docs,no-backport,no-changelog' + labels: 'area/alerting,type/docs,no-changelog' team-reviewers: 'grafana/alerting-backend-product' draft: false diff --git a/.github/workflows/bump-version.yml b/.github/workflows/bump-version.yml index 768fb684dc65d..56cf8d5ddd18a 100644 --- a/.github/workflows/bump-version.yml +++ b/.github/workflows/bump-version.yml @@ -58,10 +58,10 @@ jobs: # Go is required for also updating the schema versions as part of the precommit hook: - uses: actions/setup-go@v4 with: - go-version: '1.20' - - uses: actions/setup-node@v3.8.1 + go-version: '1.21' + - uses: actions/setup-node@v4 with: - node-version: '16' + node-version: '18' - name: Install Actions run: npm install --production --prefix ./actions - name: "Generate token" diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 60fe93679cf42..d6dd9f8f6f06f 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -47,7 +47,7 @@ jobs: name: Set go version uses: actions/setup-go@v4 with: - go-version: '1.20.10' + go-version: '1.21.10' # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL @@ -67,3 +67,4 @@ jobs: - name: Perform CodeQL Analysis uses: github/codeql-action/analyze@v2 + if: github.repository == 'grafana/grafana' diff --git a/.github/workflows/core-plugins-build-and-release.yml b/.github/workflows/core-plugins-build-and-release.yml new file mode 100644 index 0000000000000..e4803a2208f67 --- /dev/null +++ b/.github/workflows/core-plugins-build-and-release.yml @@ -0,0 +1,269 @@ +name: Build and release core plugins + +on: + workflow_dispatch: + inputs: + plugin_id: + description: "ID of the plugin you want to publish" + required: true + type: choice + options: + - grafana-azure-monitor-datasource + - grafana-pyroscope-datasource + - grafana-testdata-datasource + - jaeger + - parca + - stackdriver + - tempo + - zipkin + +concurrency: + group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}-${{ inputs.plugin_id }} + cancel-in-progress: true + +env: + GRABPL_VERSION: 3.0.44 + GCP_BUCKET: integration-artifacts # Dev: plugins-community-staging + GCOM_API: https://grafana.com # Dev: https://grafana-dev.com + +# These permissions are needed to assume roles from Github's OIDC. +permissions: + contents: read + id-token: write + +jobs: + build-and-publish: + name: Build and publish ${{ inputs.plugin_id }} + runs-on: ubuntu-latest + outputs: + type: ${{ steps.get_dir.outputs.dir }} + has_backend: ${{ steps.check_backend.outputs.has_backend }} + version: ${{ steps.build_frontend.outputs.version }} + steps: + - name: checkout + uses: actions/checkout@v4 + - name: Verify inputs + run: | + if [ -z ${{ inputs.plugin_id }} ]; then echo "Missing plugin ID"; exit 1; fi + - id: get-secrets + uses: grafana/shared-workflows/actions/get-vault-secrets@main + with: + # Secrets placed in the ci/repo/grafana// path in Vault + repo_secrets: | + PLUGINS_GOOGLE_CREDENTIALS=core-plugins-build-and-release:PLUGINS_GOOGLE_CREDENTIALS + PLUGINS_GRAFANA_API_KEY=core-plugins-build-and-release:PLUGINS_GRAFANA_API_KEY + PLUGINS_GCOM_TOKEN=core-plugins-build-and-release:PLUGINS_GCOM_TOKEN + - name: 'Authenticate to Google Cloud' + uses: 'google-github-actions/auth@v2' + with: + credentials_json: '${{ env.PLUGINS_GOOGLE_CREDENTIALS }}' + - name: 'Set up Cloud SDK' + uses: 'google-github-actions/setup-gcloud@v2' + - name: Setup nodejs environment + uses: actions/setup-node@v4 + with: + node-version-file: .nvmrc + cache: yarn + - name: Find plugin directory + shell: bash + id: get_dir + run: | + dir=$(dirname \ + $(egrep -lir --include=plugin.json --exclude-dir=dist \ + '"id": "${{ inputs.plugin_id }}"' \ + public/app/plugins \ + ) \ + ) + echo "dir=${dir}" >> $GITHUB_OUTPUT + - name: Install frontend dependencies + shell: bash + working-directory: ${{ steps.get_dir.outputs.dir }} + run: | + yarn install --immutable + - name: Download grabpl executable + shell: sh + working-directory: ${{ steps.get_dir.outputs.dir }} + run: | + [ ! -d ./bin ] && mkdir -pv ./bin || true + curl -fL -o ./bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v${{ env.GRABPL_VERSION }}/grabpl + chmod 0755 ./bin/grabpl + - name: Check backend + id: check_backend + shell: bash + run: | + if egrep -qr --include=main.go 'datasource.Manage\("${{ inputs.plugin_id }}"' pkg/tsdb; then + echo "has_backend=true" >> $GITHUB_OUTPUT + else + echo "has_backend=false" >> $GITHUB_OUTPUT + fi + - name: Setup golang environment + uses: actions/setup-go@v4 + if: steps.check_backend.outputs.has_backend == 'true' + with: + go-version-file: go.mod + - name: Install Mage + shell: bash + if: steps.check_backend.outputs.has_backend == 'true' + run: | + go install github.com/magefile/mage + - name: Check tools + shell: bash + working-directory: ${{ steps.get_dir.outputs.dir }} + run: | + echo "=======================================" + echo " Frontend tools" + echo "=======================================" + echo "-------- node version -----" + node --version + echo "-------- npm version -----" + npm --version + echo "-------- yarn version -----" + yarn --version + echo "=======================================" + echo " Misc tools" + echo "=======================================" + echo "-------- docker version -----" + docker --version + echo "-------- jq version -----" + jq --version + echo "-------- grabpl version -----" + ./bin/grabpl --version + echo "=======================================" + - name: Check backend tools + shell: bash + if: steps.check_backend.outputs.has_backend == 'true' + working-directory: ${{ steps.get_dir.outputs.dir }} + run: | + echo "=======================================" + echo " Backend tools" + echo "=======================================" + echo "-------- go version -----" + go version + echo "-------- mage version -----" + mage --version + echo "=======================================" + - name: build:frontend + shell: bash + id: build_frontend + run: | + command="plugin:build:commit" + if [ "$GITHUB_REF" != "refs/heads/main" ]; then + # Release branch, do not add commit hash to version + command="plugin:build" + fi + yarn $command --scope="@grafana-plugins/${{ inputs.plugin_id }}" + version=$(cat ${{ steps.get_dir.outputs.dir }}/dist/plugin.json | jq -r .info.version) + echo "version=${version}" >> $GITHUB_OUTPUT + - name: build:backend + if: steps.check_backend.outputs.has_backend == 'true' + shell: bash + env: + VERSION: ${{ steps.build_frontend.outputs.version }} + run: | + make build-plugin-go PLUGIN_ID=${{ inputs.plugin_id }} + - name: package + working-directory: ${{ steps.get_dir.outputs.dir }} + run: | + mkdir -p ci/jobs/package + bin/grabpl plugin package + env: + GRAFANA_API_KEY: ${{ env.PLUGINS_GRAFANA_API_KEY }} + PLUGIN_SIGNATURE_TYPE: grafana + - name: Check existing release + env: + GCOM_TOKEN: ${{ env.PLUGINS_GCOM_TOKEN }} + VERSION: ${{ steps.build_frontend.outputs.version }} + run: | + api_res=$(curl -X 'GET' -H "Authorization: Bearer $GCOM_TOKEN" \ + '${{ env.GCOM_API}}/api/plugins/${{ inputs.plugin_id }}?version=$VERSION' \ + -H 'accept: application/json') + api_res_code=$(echo $api_res | jq -r .code) + if [ "$api_res_code" = "NotFound" ]; then + echo "No existing release found" + else + echo "Expecting a missing release, got:" + echo $api_res + exit 1 + fi + - name: store build artifacts + uses: actions/upload-artifact@v4 + with: + name: build-artifacts + path: ${{ steps.get_dir.outputs.dir }}/ci/packages/*.zip + - name: Publish release to Google Cloud Storage + working-directory: ${{ steps.get_dir.outputs.dir }} + env: + VERSION: ${{ steps.build_frontend.outputs.version }} + run: | + echo "Publish release to Google Cloud Storage:" + touch ci/packages/windows ci/packages/darwin ci/packages/linux ci/packages/any + gsutil -m cp -r ci/packages/*windows* gs://${{ env.GCP_BUCKET }}/${{ inputs.plugin_id }}/release/${VERSION}/windows + gsutil -m cp -r ci/packages/*linux* gs://${{ env.GCP_BUCKET }}/${{ inputs.plugin_id }}/release/${VERSION}/linux + gsutil -m cp -r ci/packages/*darwin* gs://${{ env.GCP_BUCKET }}/${{ inputs.plugin_id }}/release/${VERSION}/darwin + gsutil -m cp -r ci/packages/*any* gs://${{ env.GCP_BUCKET }}/${{ inputs.plugin_id }}/release/${VERSION}/any + - name: Publish new plugin version on grafana.com + if: steps.check_backend.outputs.has_backend == 'true' + working-directory: ${{ steps.get_dir.outputs.dir }} + env: + GCOM_TOKEN: ${{ env.PLUGINS_GCOM_TOKEN }} + VERSION: ${{ steps.build_frontend.outputs.version }} + run: | + echo "Publish new plugin version on grafana.com:" + echo "Plugin version: ${VERSION}" + result=`curl -H "Authorization: Bearer $GCOM_TOKEN" -H "Content-Type: application/json" ${{ env.GCOM_API}}/api/plugins -d "{ + \"url\": \"https://github.com/grafana/grafana/tree/main/${{ steps.get_dir.outputs.dir }}\", + \"download\": { + \"linux-amd64\": { + \"url\": \"https://storage.googleapis.com/${{ env.GCP_BUCKET }}/${{ inputs.plugin_id }}/release/${VERSION}/linux/${{ inputs.plugin_id }}-${VERSION}.linux_amd64.zip\", + \"md5\": \"$(cat ci/packages/info-linux_amd64.json | jq -r .plugin.md5)\" + }, + \"linux-arm64\": { + \"url\": \"https://storage.googleapis.com/${{ env.GCP_BUCKET }}/${{ inputs.plugin_id }}/release/${VERSION}/linux/${{ inputs.plugin_id }}-${VERSION}.linux_arm64.zip\", + \"md5\": \"$(cat ci/packages/info-linux_arm64.json | jq -r .plugin.md5)\" + }, + \"linux-arm\": { + \"url\": \"https://storage.googleapis.com/${{ env.GCP_BUCKET }}/${{ inputs.plugin_id }}/release/${VERSION}/linux/${{ inputs.plugin_id }}-${VERSION}.linux_arm.zip\", + \"md5\": \"$(cat ci/packages/info-linux_arm.json | jq -r .plugin.md5)\" + }, + \"windows-amd64\": { + \"url\": \"https://storage.googleapis.com/${{ env.GCP_BUCKET }}/${{ inputs.plugin_id }}/release/${VERSION}/windows/${{ inputs.plugin_id }}-${VERSION}.windows_amd64.zip\", + \"md5\": \"$(cat ci/packages/info-windows_amd64.json | jq -r .plugin.md5)\" + }, + \"darwin-amd64\": { + \"url\": \"https://storage.googleapis.com/${{ env.GCP_BUCKET }}/${{ inputs.plugin_id }}/release/${VERSION}/darwin/${{ inputs.plugin_id }}-${VERSION}.darwin_amd64.zip\", + \"md5\": \"$(cat ci/packages/info-darwin_amd64.json | jq -r .plugin.md5)\" + }, + \"darwin-arm64\": { + \"url\": \"https://storage.googleapis.com/${{ env.GCP_BUCKET }}/${{ inputs.plugin_id }}/release/${VERSION}/darwin/${{ inputs.plugin_id }}-${VERSION}.darwin_arm64.zip\", + \"md5\": \"$(cat ci/packages/info-darwin_arm64.json | jq -r .plugin.md5)\" + } + } + }"` + if [[ "$(echo $result | jq -r .version)" == "null" ]]; then + echo "Failed to publish plugin version. Got:" + echo $result + exit 1 + fi + - name: Publish new plugin version on grafana.com (frontend only) + if: steps.check_backend.outputs.has_backend == 'false' + working-directory: ${{ steps.get_dir.outputs.dir }} + env: + GCOM_TOKEN: ${{ env.PLUGINS_GCOM_TOKEN }} + VERSION: ${{ steps.build_frontend.outputs.version }} + run: | + echo "Publish new plugin version on grafana.com:" + echo "Plugin version: ${VERSION}" + result=`curl -H "Authorization: Bearer $GCOM_TOKEN" -H "Content-Type: application/json" ${{ env.GCOM_API}}/api/plugins -d "{ + \"url\": \"https://github.com/grafana/grafana/tree/main/${{ steps.get_dir.outputs.dir }}\", + \"download\": { + \"any\": { + \"url\": \"https://storage.googleapis.com/${{ env.GCP_BUCKET }}/${{ inputs.plugin_id }}/release/${VERSION}/any/${{ inputs.plugin_id }}-${VERSION}.any.zip\", + \"md5\": \"$(cat ci/packages/info-any.json | jq -r .plugin.md5)\" + } + } + }"` + if [[ "$(echo $result | jq -r .version)" == "null" ]]; then + echo "Failed to publish plugin version. Got:" + echo $result + exit 1 + fi diff --git a/.github/workflows/create-security-patch-from-security-mirror.yml b/.github/workflows/create-security-patch-from-security-mirror.yml index 413addb6827dc..e187149b8b47c 100644 --- a/.github/workflows/create-security-patch-from-security-mirror.yml +++ b/.github/workflows/create-security-patch-from-security-mirror.yml @@ -1,5 +1,5 @@ -# Owned by grafana-delivery-squad -# Intended to be dropped into the base repo (Ex: grafana/grafana) for use in the security mirror. +# Owned by grafana-release-guild +# Intended to be dropped into the base repo (Ex: grafana/grafana) for use in the security mirror. name: Create security patch run-name: create-security-patch on: @@ -17,7 +17,7 @@ jobs: trigger_downstream_create_security_patch: concurrency: create-patch-${{ github.ref_name }} uses: grafana/security-patch-actions/.github/workflows/create-patch.yml@main - if: github.repository == 'grafana/grafana-security-mirror' + if: github.repository == 'grafana/grafana-security-mirror' with: repo: "${{ github.repository }}" src_ref: "${{ github.head_ref }}" # this is the source branch name, Ex: "feature/newthing" diff --git a/.github/workflows/detect-breaking-changes-build-skip.yml b/.github/workflows/detect-breaking-changes-build-skip.yml deleted file mode 100644 index 58e3cb5642451..0000000000000 --- a/.github/workflows/detect-breaking-changes-build-skip.yml +++ /dev/null @@ -1,34 +0,0 @@ -# Workflow for skipping the Levitate detection -# (This is needed because workflows that are skipped due to path filtering will show up as pending in Github. -# As this has the same name as the one in detect-breaking-changes-build.yml it will take over in these cases and succeed quickly.) - -name: Levitate / Detect breaking changes - -on: - pull_request: - paths-ignore: - - "packages/**" - branches: - - 'main' - -jobs: - detect: - name: Detect breaking changes - runs-on: ubuntu-latest - - steps: - - name: Skipping - run: echo "No modifications in the public API (packages/), skipping." - - # Build and persist output as a JSON (we need to tell the report workflow that the check has been skipped) - - name: Persisting the check output - run: | - mkdir -p ./levitate - echo "{ \"shouldSkip\": true }" > ./levitate/result.json - - # Upload artifact (so it can be used in the more privileged "report" workflow) - - name: Upload check output as artifact - uses: actions/upload-artifact@v3 - with: - name: levitate - path: levitate/ diff --git a/.github/workflows/detect-breaking-changes-build.yml b/.github/workflows/detect-breaking-changes-build.yml deleted file mode 100644 index 4479c8600fc9a..0000000000000 --- a/.github/workflows/detect-breaking-changes-build.yml +++ /dev/null @@ -1,163 +0,0 @@ -# Only runs if anything under the packages/ directory changes. -# (Otherwise detect-breaking-changes-build-skip.yml takes over) - -name: Levitate / Detect breaking changes - -on: - pull_request: - paths: - - 'packages/**' - branches: - - 'main' - -jobs: - buildPR: - name: Build PR - runs-on: ubuntu-latest - defaults: - run: - working-directory: './pr' - - steps: - - uses: actions/checkout@v4 - with: - path: './pr' - - uses: actions/setup-node@v3.8.1 - with: - node-version: 16.16.0 - - - name: Get yarn cache directory path - id: yarn-cache-dir-path - run: echo "dir=$(yarn config get cacheFolder)" >> $GITHUB_OUTPUT - - - name: Restore yarn cache - uses: actions/cache@v3.3.1 - id: yarn-cache - with: - path: ${{ steps.yarn-cache-dir-path.outputs.dir }} - key: yarn-cache-folder-${{ hashFiles('**/yarn.lock', '.yarnrc.yml') }} - restore-keys: | - yarn-cache-folder- - - - name: Install dependencies - run: yarn install --immutable - - - name: Build packages - run: yarn packages:build - - - name: Pack packages - run: yarn packages:pack --out ./%s.tgz - - - name: Zip built tarballed packages - run: zip -r ./pr_built_packages.zip ./packages/**/*.tgz - - - name: Upload build output as artifact - uses: actions/upload-artifact@v3 - with: - name: buildPr - path: './pr/pr_built_packages.zip' - - buildBase: - name: Build Base - runs-on: ubuntu-latest - defaults: - run: - working-directory: './base' - - steps: - - uses: actions/checkout@v4 - with: - path: './base' - ref: ${{ github.event.pull_request.base.ref }} - - - uses: actions/setup-node@v3.8.1 - with: - node-version: 16.16.0 - - - name: Get yarn cache directory path - id: yarn-cache-dir-path - run: echo "dir=$(yarn config get cacheFolder)" >> $GITHUB_OUTPUT - - - name: Restore yarn cache - uses: actions/cache@v3.3.1 - id: yarn-cache - with: - path: ${{ steps.yarn-cache-dir-path.outputs.dir }} - key: yarn-cache-folder-${{ hashFiles('**/yarn.lock', '.yarnrc.yml') }} - restore-keys: | - yarn-cache-folder- - - - name: Install dependencies - run: yarn install --immutable - - - name: Build packages - run: yarn packages:build - - - name: Pack packages - run: yarn packages:pack --out ./%s.tgz - - - name: Zip built tarballed packages - run: zip -r ./base_built_packages.zip ./packages/**/*.tgz - - - name: Upload build output as artifact - uses: actions/upload-artifact@v3 - with: - name: buildBase - path: './base/base_built_packages.zip' - - Detect: - name: Detect breaking changes - runs-on: ubuntu-latest - needs: ['buildPR', 'buildBase'] - env: - GITHUB_STEP_NUMBER: 8 - - steps: - - uses: actions/checkout@v4 - - - name: Get built packages from pr - uses: actions/download-artifact@v3 - with: - name: buildPr - - - name: Get built packages from base - uses: actions/download-artifact@v3 - with: - name: buildBase - - - name: Unzip artifact from pr - run: unzip -j pr_built_packages.zip -d ./pr && rm pr_built_packages.zip - - - name: Unzip artifact from base - run: unzip -j base_built_packages.zip -d ./base && rm base_built_packages.zip - - - name: Get link for the Github Action job - id: job - uses: actions/github-script@v6 - with: - script: | - const name = 'Detect breaking changes'; - const script = require('./.github/workflows/scripts/pr-get-job-link.js') - await script({name, github, context, core}) - - - name: Detect breaking changes - id: breaking-changes - run: ./scripts/check-breaking-changes.sh - env: - FORCE_COLOR: 3 - GITHUB_JOB_LINK: ${{ steps.job.outputs.link }} - - - name: Persisting the check output - run: | - mkdir -p ./levitate - echo "{ \"exit_code\": ${{ steps.breaking-changes.outputs.is_breaking }}, \"message\": \"${{ steps.breaking-changes.outputs.message }}\", \"job_link\": \"${{ steps.job.outputs.link }}#step:${GITHUB_STEP_NUMBER}:1\", \"pr_number\": \"${{ github.event.pull_request.number }}\" }" > ./levitate/result.json - - - name: Upload check output as artifact - uses: actions/upload-artifact@v3 - with: - name: levitate - path: levitate/ - - - name: Exit - run: exit ${{ steps.breaking-changes.outputs.is_breaking }} - shell: bash diff --git a/.github/workflows/detect-breaking-changes-levitate.yml b/.github/workflows/detect-breaking-changes-levitate.yml new file mode 100644 index 0000000000000..6ef0ac3514a68 --- /dev/null +++ b/.github/workflows/detect-breaking-changes-levitate.yml @@ -0,0 +1,340 @@ +# Only runs if anything under the packages/ directory changes. +--- +name: Levitate / Detect breaking changes in PR + +on: + pull_request: + paths: + - 'packages/**' + branches: + - 'main' + +jobs: + buildPR: + name: Build PR + runs-on: ubuntu-latest + defaults: + run: + working-directory: './pr' + + steps: + - uses: actions/checkout@v4 + with: + path: './pr' + - uses: actions/setup-node@v4 + with: + node-version: 20.9.0 + + - name: Get yarn cache directory path + id: yarn-cache-dir-path + run: echo "dir=$(yarn config get cacheFolder)" >> $GITHUB_OUTPUT + + - name: Restore yarn cache + uses: actions/cache@v4 + id: yarn-cache + with: + path: ${{ steps.yarn-cache-dir-path.outputs.dir }} + key: yarn-cache-folder-${{ hashFiles('**/yarn.lock', '.yarnrc.yml') }} + restore-keys: | + yarn-cache-folder- + + - name: Install dependencies + run: yarn install --immutable + + - name: Build packages + run: yarn packages:build + + - name: Pack packages + run: yarn packages:pack --out ./%s.tgz + + - name: Zip built tarballed packages + run: zip -r ./pr_built_packages.zip ./packages/**/*.tgz + + - name: Upload build output as artifact + uses: actions/upload-artifact@v4 + with: + name: buildPr + path: './pr/pr_built_packages.zip' + + buildBase: + name: Build Base + runs-on: ubuntu-latest + defaults: + run: + working-directory: './base' + + steps: + - uses: actions/checkout@v4 + with: + path: './base' + ref: ${{ github.event.pull_request.base.ref }} + + - uses: actions/setup-node@v4 + with: + node-version: 20.9.0 + + - name: Get yarn cache directory path + id: yarn-cache-dir-path + run: echo "dir=$(yarn config get cacheFolder)" >> $GITHUB_OUTPUT + + - name: Restore yarn cache + uses: actions/cache@v4 + id: yarn-cache + with: + path: ${{ steps.yarn-cache-dir-path.outputs.dir }} + key: yarn-cache-folder-${{ hashFiles('**/yarn.lock', '.yarnrc.yml') }} + restore-keys: | + yarn-cache-folder- + + - name: Install dependencies + run: yarn install --immutable + + - name: Build packages + run: yarn packages:build + + - name: Pack packages + run: yarn packages:pack --out ./%s.tgz + + - name: Zip built tarballed packages + run: zip -r ./base_built_packages.zip ./packages/**/*.tgz + + - name: Upload build output as artifact + uses: actions/upload-artifact@v4 + with: + name: buildBase + path: './base/base_built_packages.zip' + + Detect: + name: Detect breaking changes + runs-on: ubuntu-latest + needs: ['buildPR', 'buildBase'] + env: + GITHUB_STEP_NUMBER: 8 + + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: 20.9.0 + + - name: Get built packages from pr + uses: actions/download-artifact@v4 + with: + name: buildPr + + - name: Get built packages from base + uses: actions/download-artifact@v4 + with: + name: buildBase + + - name: Unzip artifact from pr + run: unzip -j pr_built_packages.zip -d ./pr && rm pr_built_packages.zip + + - name: Unzip artifact from base + run: unzip -j base_built_packages.zip -d ./base && rm base_built_packages.zip + + - name: Get link for the Github Action job + id: job + uses: actions/github-script@v6 + with: + script: | + const name = 'Detect breaking changes'; + const script = require('./.github/workflows/scripts/pr-get-job-link.js') + await script({name, github, context, core}) + + - name: Detect breaking changes + id: breaking-changes + run: ./scripts/check-breaking-changes.sh + env: + FORCE_COLOR: 3 + GITHUB_JOB_LINK: ${{ steps.job.outputs.link }} + + - name: Persisting the check output + run: | + mkdir -p ./levitate + echo "{ \"exit_code\": ${{ steps.breaking-changes.outputs.is_breaking }}, \"message\": \"${{ steps.breaking-changes.outputs.message }}\", \"job_link\": \"${{ steps.job.outputs.link }}#step:${GITHUB_STEP_NUMBER}:1\", \"pr_number\": \"${{ github.event.pull_request.number }}\" }" > ./levitate/result.json + + - name: Upload check output as artifact + uses: actions/upload-artifact@v4 + with: + name: levitate + path: levitate/ + + + Report: + name: Report breaking changes in PR + runs-on: ubuntu-latest + needs: ['Detect'] + + steps: + - name: "Generate token" + id: generate_token + uses: tibdex/github-app-token@b62528385c34dbc9f38e5f4225ac829252d1ea92 + with: + app_id: ${{ secrets.GRAFANA_PR_AUTOMATION_APP_ID }} + private_key: ${{ secrets.GRAFANA_PR_AUTOMATION_APP_PEM }} + + - uses: actions/checkout@v4 + + - name: 'Download artifact' + uses: actions/download-artifact@v4 + with: + name: levitate + + - name: Parsing levitate result + uses: actions/github-script@v6 + id: levitate-run + with: + script: | + const filePath = 'result.json'; + const script = require('./.github/workflows/scripts/json-file-to-job-output.js'); + await script({ core, filePath }); + + # Check if label exists + - name: Check if "levitate breaking change" label exists + id: does-label-exist + uses: actions/github-script@v6 + env: + PR_NUMBER: ${{ github.event.pull_request.number }} + with: + script: | + const { data } = await github.rest.issues.listLabelsOnIssue({ + issue_number: process.env.PR_NUMBER, + owner: context.repo.owner, + repo: context.repo.repo, + }); + const labels = data.map(({ name }) => name); + const doesExist = labels.includes('levitate breaking change'); + + return doesExist ? 1 : 0; + + # put the markdown into a variable + - name: Levitate Markdown + id: levitate-markdown + run: | + if [ -f "levitate.md" ]; then + { + echo 'levitate_markdown<> $GITHUB_OUTPUT + else + echo "levitate_markdown=No breaking changes detected" >> $GITHUB_OUTPUT + fi + + + # Comment on the PR + - name: Comment on PR + if: steps.levitate-run.outputs.exit_code == 1 + uses: marocchino/sticky-pull-request-comment@v2 + with: + header: levitate-breaking-change-comment + number: ${{ github.event.pull_request.number }} + message: | + ⚠️   **Possible breaking changes (md version)**   ⚠️ + + ${{ steps.levitate-markdown.outputs.levitate_markdown }} + + [Read our guideline](https://github.com/grafana/grafana/blob/main/contribute/breaking-changes-guide/breaking-changes-guide.md) + [Console output](${{ steps.levitate-run.outputs.job_link }}) + GITHUB_TOKEN: ${{ steps.generate_token.outputs.token }} + + # Remove comment from the PR (no more breaking changes) + - name: Remove comment from PR + if: steps.levitate-run.outputs.exit_code == 0 + uses: marocchino/sticky-pull-request-comment@v2 + with: + header: levitate-breaking-change-comment + number: ${{ github.event.pull_request.number }} + delete: true + GITHUB_TOKEN: ${{ steps.generate_token.outputs.token }} + + # Posts a notification to Slack if a PR has a breaking change and it did not have a breaking change before + - name: Post to Slack + id: slack + if: steps.levitate-run.outputs.exit_code == 1 && steps.does-label-exist.outputs.result == 0 && env.HAS_SECRETS + uses: slackapi/slack-github-action@v1.24.0 + with: + payload: | + { + "pr_link": "https://github.com/grafana/grafana/pull/${{ steps.levitate-run.outputs.pr_number }}", + "pr_number": "${{ steps.levitate-run.outputs.pr_number }}", + "job_link": "${{ steps.levitate-run.outputs.job_link }}", + "reporting_job_link": "${{ github.event.workflow_run.html_url }}", + "message": "${{ steps.levitate-run.outputs.message }}" + } + env: + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_LEVITATE_WEBHOOK_URL }} + HAS_SECRETS: ${{ (github.repository == 'grafana/grafana' || secrets.SLACK_LEVITATE_WEBHOOK_URL != '') || '' }} + + # Add the label + - name: Add "levitate breaking change" label + if: steps.levitate-run.outputs.exit_code == 1 && steps.does-label-exist.outputs.result == 0 + uses: actions/github-script@v6 + env: + PR_NUMBER: ${{ steps.levitate-run.outputs.pr_number }} + with: + github-token: ${{ steps.generate_token.outputs.token }} + script: | + await github.rest.issues.addLabels({ + issue_number: process.env.PR_NUMBER, + owner: context.repo.owner, + repo: context.repo.repo, + labels: ['levitate breaking change'] + }) + + # Remove label (no more breaking changes) + - name: Remove "levitate breaking change" label + if: steps.levitate-run.outputs.exit_code == 0 && steps.does-label-exist.outputs.result == 1 + uses: actions/github-script@v6 + env: + PR_NUMBER: ${{ steps.levitate-run.outputs.pr_number }} + with: + github-token: ${{ steps.generate_token.outputs.token }} + script: | + await github.rest.issues.removeLabel({ + issue_number: process.env.PR_NUMBER, + owner: context.repo.owner, + repo: context.repo.repo, + name: 'levitate breaking change' + }) + + # Add reviewers + # This is very weird, the actual request goes through (comes back with a 201), but does not assign the team. + # Related issue: https://github.com/renovatebot/renovate/issues/1908 + - name: Add "grafana/plugins-platform-frontend" as a reviewer + if: steps.levitate-run.outputs.exit_code == 1 + uses: actions/github-script@v6 + env: + PR_NUMBER: ${{ steps.levitate-run.outputs.pr_number }} + with: + github-token: ${{ steps.generate_token.outputs.token }} + script: | + await github.rest.pulls.requestReviewers({ + pull_number: process.env.PR_NUMBER, + owner: context.repo.owner, + repo: context.repo.repo, + reviewers: [], + team_reviewers: ['plugins-platform-frontend'] + }); + + # Remove reviewers (no more breaking changes) + - name: Remove "grafana/plugins-platform-frontend" from the list of reviewers + if: steps.levitate-run.outputs.exit_code == 0 + uses: actions/github-script@v6 + env: + PR_NUMBER: ${{ steps.levitate-run.outputs.pr_number }} + with: + github-token: ${{ steps.generate_token.outputs.token }} + script: | + await github.rest.pulls.removeRequestedReviewers({ + pull_number: process.env.PR_NUMBER, + owner: context.repo.owner, + repo: context.repo.repo, + reviewers: [], + team_reviewers: ['plugins-platform-frontend'] + }); + + - name: Exit + run: exit ${{ steps.levitate-run.outputs.exit_code }} + shell: bash diff --git a/.github/workflows/detect-breaking-changes-report.yml b/.github/workflows/detect-breaking-changes-report.yml deleted file mode 100644 index fbf0431a2a887..0000000000000 --- a/.github/workflows/detect-breaking-changes-report.yml +++ /dev/null @@ -1,209 +0,0 @@ -name: Levitate / Report breaking changes - -on: - workflow_run: - workflows: ["Levitate / Detect breaking changes"] - types: [completed] - -permissions: - pull-requests: write - -jobs: - notify: - name: Report - runs-on: ubuntu-latest - env: - ARTIFACT_NAME: 'levitate' # The name of the artifact that we would like to download - ARTIFACT_FOLDER: '${{ github.workspace }}/tmp' # The name of the folder where we will download the artifact to - permissions: - contents: read - issues: write - pull-requests: write - - steps: - - uses: actions/checkout@v4 - - # Download artifact (as a .zip archive) - - name: 'Download artifact' - uses: actions/github-script@v6 - env: - RUN_ID: ${{ github.event.workflow_run.id }} - with: - script: | - const fs = require('fs'); - - const { owner, repo } = context.repo; - const runId = process.env.RUN_ID; - const artifactName = process.env.ARTIFACT_NAME; - const artifactFolder = process.env.ARTIFACT_FOLDER; - const artifacts = await github.rest.actions.listWorkflowRunArtifacts({ - owner, - repo, - run_id: runId, - }); - const artifact = artifacts.data.artifacts.find(a => a.name === artifactName); - - if (!artifact) { - throw new Error(`Could not find artifact ${ artifactName } in workflow (${ runId })`); - } - - const download = await github.rest.actions.downloadArtifact({ - owner, - repo, - artifact_id: artifact.id, - archive_format: 'zip', - }); - - fs.mkdirSync(artifactFolder, { recursive: true }); - fs.writeFileSync(`${ artifactFolder }/${ artifactName }.zip`, Buffer.from(download.data)); - - # Unzip artifact - - name: Unzip artifact - run: unzip "${ARTIFACT_FOLDER}/${ARTIFACT_NAME}.zip" -d "${ARTIFACT_FOLDER}" - - # Parse the artifact and register fields as step output variables - # (All fields in the JSON will be available as ${{ steps.levitate-run.outputs. }} - - name: Parsing levitate result - uses: actions/github-script@v6 - id: levitate-run - with: - script: | - const filePath = `${ process.env.ARTIFACT_FOLDER }/result.json`; - const script = require('./.github/workflows/scripts/json-file-to-job-output.js'); - await script({ core, filePath }); - - # Skip - print a message if the "Detect" workflow was skipped - - name: Check if the workflow should be skipped - if: steps.levitate-run.outputs.shouldSkip == 'true' - run: echo "Skipping." - - # Check if label exists - - name: Check if "levitate breaking change" label exists - id: does-label-exist - if: steps.levitate-run.outputs.shouldSkip != 'true' - uses: actions/github-script@v6 - env: - PR_NUMBER: ${{ github.event.workflow_run.pull_requests[0].number }} - with: - script: | - const { data } = await github.rest.issues.listLabelsOnIssue({ - issue_number: process.env.PR_NUMBER, - owner: context.repo.owner, - repo: context.repo.repo, - }); - const labels = data.map(({ name }) => name); - const doesExist = labels.includes('levitate breaking change'); - - return doesExist ? 1 : 0; - - # Comment on the PR - - name: Comment on PR - if: steps.levitate-run.outputs.exit_code == 1 && steps.levitate-run.outputs.shouldSkip != 'true' - uses: marocchino/sticky-pull-request-comment@v2 - with: - number: ${{ steps.levitate-run.outputs.pr_number }} - message: | - ⚠️   **Possible breaking changes** - - _(Open the links below in a new tab to go to the correct steps)_ - - ${{ steps.levitate-run.outputs.message }} - - [Console output](${{ steps.levitate-run.outputs.job_link }}) - [Read our guideline](https://github.com/grafana/grafana/blob/main/contribute/breaking-changes-guide/breaking-changes-guide.md) - - # Remove comment from the PR (no more breaking changes) - - name: Remove comment from PR - if: steps.levitate-run.outputs.exit_code == 0 && steps.levitate-run.outputs.shouldSkip != 'true' - uses: marocchino/sticky-pull-request-comment@v2 - with: - number: ${{ steps.levitate-run.outputs.pr_number }} - delete: true - - # Posts a notification to Slack if a PR has a breaking change and it did not have a breaking change before - - name: Post to Slack - id: slack - if: steps.levitate-run.outputs.exit_code == 1 && steps.does-label-exist.outputs.result == 0 && steps.levitate-run.outputs.shouldSkip != 'true' && env.HAS_SECRETS - uses: slackapi/slack-github-action@v1.24.0 - with: - payload: | - { - "pr_link": "https://github.com/grafana/grafana/pull/${{ steps.levitate-run.outputs.pr_number }}", - "pr_number": "${{ steps.levitate-run.outputs.pr_number }}", - "job_link": "${{ steps.levitate-run.outputs.job_link }}", - "reporting_job_link": "${{ github.event.workflow_run.html_url }}", - "message": "${{ steps.levitate-run.outputs.message }}" - } - env: - SLACK_WEBHOOK_URL: ${{ secrets.SLACK_LEVITATE_WEBHOOK_URL }} - HAS_SECRETS: ${{ (github.repository == 'grafana/grafana' || secrets.SLACK_LEVITATE_WEBHOOK_URL != '') || '' }} - - # Add the label - - name: Add "levitate breaking change" label - if: steps.levitate-run.outputs.exit_code == 1 && steps.does-label-exist.outputs.result == 0 && steps.levitate-run.outputs.shouldSkip != 'true' - uses: actions/github-script@v6 - env: - PR_NUMBER: ${{ steps.levitate-run.outputs.pr_number }} - with: - github-token: ${{ secrets.GITHUB_TOKEN }} - script: | - await github.rest.issues.addLabels({ - issue_number: process.env.PR_NUMBER, - owner: context.repo.owner, - repo: context.repo.repo, - labels: ['levitate breaking change'] - }) - - # Remove label (no more breaking changes) - - name: Remove "levitate breaking change" label - if: steps.levitate-run.outputs.exit_code == 0 && steps.does-label-exist.outputs.result == 1 && steps.levitate-run.outputs.shouldSkip != 'true' - uses: actions/github-script@v6 - env: - PR_NUMBER: ${{ steps.levitate-run.outputs.pr_number }} - with: - github-token: ${{ secrets.GITHUB_TOKEN }} - script: | - await github.rest.issues.removeLabel({ - issue_number: process.env.PR_NUMBER, - owner: context.repo.owner, - repo: context.repo.repo, - name: 'levitate breaking change' - }) - - # Add reviewers - # This is very weird, the actual request goes through (comes back with a 201), but does not assign the team. - # Related issue: https://github.com/renovatebot/renovate/issues/1908 - - name: Add "grafana/plugins-platform-frontend" as a reviewer - if: steps.levitate-run.outputs.exit_code && steps.levitate-run.outputs.shouldSkip != 'true' - uses: actions/github-script@v6 - env: - PR_NUMBER: ${{ steps.levitate-run.outputs.pr_number }} - with: - github-token: ${{ secrets.GITHUB_TOKEN }} - script: | - await github.rest.pulls.requestReviewers({ - pull_number: process.env.PR_NUMBER, - owner: context.repo.owner, - repo: context.repo.repo, - reviewers: [], - team_reviewers: ['grafana/plugins-platform-frontend'] - }); - - # Remove reviewers (no more breaking changes) - - name: Remove "grafana/plugins-platform-frontend" from the list of reviewers - if: steps.levitate-run.outputs.exit_code == 0 && steps.levitate-run.outputs.shouldSkip != 'true' - uses: actions/github-script@v6 - env: - PR_NUMBER: ${{ steps.levitate-run.outputs.pr_number }} - with: - github-token: ${{ secrets.GITHUB_TOKEN }} - script: | - await github.rest.pulls.removeRequestedReviewers({ - pull_number: process.env.PR_NUMBER, - owner: context.repo.owner, - repo: context.repo.repo, - reviewers: [], - team_reviewers: ['grafana/plugins-platform-frontend'] - }); - - diff --git a/.github/workflows/doc-validator.yml b/.github/workflows/doc-validator.yml index 9e28a128b9785..75b721904cc10 100644 --- a/.github/workflows/doc-validator.yml +++ b/.github/workflows/doc-validator.yml @@ -7,7 +7,7 @@ jobs: doc-validator: runs-on: "ubuntu-latest" container: - image: "grafana/doc-validator:v4.0.0" + image: "grafana/doc-validator:v5.0.0" steps: - name: "Checkout code" uses: "actions/checkout@v4" diff --git a/.github/workflows/ephemeral-instances-pr-comment.yml b/.github/workflows/ephemeral-instances-pr-comment.yml index 13916e5829dd9..4a6ec0ff134f3 100644 --- a/.github/workflows/ephemeral-instances-pr-comment.yml +++ b/.github/workflows/ephemeral-instances-pr-comment.yml @@ -4,7 +4,11 @@ on: types: [created] jobs: config: - runs-on: "ubuntu-latest" + if: github.event.sender.type == 'User' && + github.event.issue.pull_request && + startsWith(github.event.comment.body, '/deploy-to-hg') + runs-on: + labels: ubuntu-latest-8-cores outputs: has-secrets: ${{ steps.check.outputs.has-secrets }} steps: diff --git a/.github/workflows/feature-toggle-cleanup.yml b/.github/workflows/feature-toggle-cleanup.yml new file mode 100644 index 0000000000000..f157dfcb61491 --- /dev/null +++ b/.github/workflows/feature-toggle-cleanup.yml @@ -0,0 +1,28 @@ +name: Feature Toggle Cleanup + +on: + workflow_dispatch: + schedule: + # * is a special character in YAML so you have to quote this string + - cron: '30 10 * * *' +jobs: + feature-toggle-cleanup: + runs-on: ubuntu-latest + # This check is here to prevent this workflow from running on forks. + if: github.repository == 'grafana/grafana' + steps: + - name: Check out the code + uses: actions/checkout@v3 + - uses: actions/setup-node@v4 + with: + node-version: "20.x" + - run: npm install csv-parse + - name: Parse CVS file to see which Feature Toggles should be notified about + id: parse-csv-file + uses: actions/github-script@v7 + env: + FEATURE_TOGGLES_CSV_FILE_PATH: "pkg/services/featuremgmt/toggles_gen.csv" + with: + script: | + const { default: cleanupFeatureFlags } = await import('${{ github.workspace }}/.github/workflows/scripts/feature-toggle-cleanup/feature-toggle-cleanup.mjs') + await cleanupFeatureFlags({github, context, core}) \ No newline at end of file diff --git a/.github/workflows/i18n-crowdin-download.yml b/.github/workflows/i18n-crowdin-download.yml new file mode 100644 index 0000000000000..c442dc1404897 --- /dev/null +++ b/.github/workflows/i18n-crowdin-download.yml @@ -0,0 +1,122 @@ +name: Crowdin Download Action + +on: + workflow_dispatch: + schedule: + - cron: "0 * * * *" + +jobs: + download-sources-from-crowdin: + runs-on: ubuntu-latest + + permissions: + contents: write # needed to commit changes into the PR + pull-requests: write # needed to update PR description, labels, etc + + steps: + - uses: actions/checkout@v4 + with: + ref: ${{ github.head_ref }} + + - name: Download sources + id: crowdin-download + uses: crowdin/github-action@v1 + with: + upload_sources: false + upload_translations: false + download_sources: false + download_translations: true + export_only_approved: true + localization_branch_name: i18n_crowdin_translations + create_pull_request: true + pull_request_title: 'I18n: Download translations from Crowdin' + pull_request_body: | + :robot: Automatic download of translations from Crowdin. + + Steps for merging: + 1. A quick sanity check of the changes and approve. Things to look out for: + - No changes in the English file. The source of truth is in the main branch, NOT in Crowdin. + - Translations maybe be removed if the English phrase was removed, but there should not be many of these + - Anything else that looks 'funky'. Ask if you're not sure. + 2. Approve & (Auto-)merge. :tada: + + If there's a conflict, close the pull request and **delete the branch**. A GH action will recreate the pull request. + Remember, the longer this pull request is open, the more likely it is that it'll get conflicts. + pull_request_labels: 'area/frontend, area/internationalization, no-changelog, no-backport' + pull_request_reviewers: 'grafana-frontend-platform' + pull_request_base_branch_name: 'main' + base_url: 'https://grafana.api.crowdin.com' + config: 'crowdin.yml' + source: 'public/locales/en-US/grafana.json' + translation: 'public/locales/%locale%/%original_file_name%' + # Magic details of the github-actions bot user, to pass CLA checks + github_user_name: "github-actions[bot]" + github_user_email: "41898282+github-actions[bot]@users.noreply.github.com" + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_PROJECT_ID }} + CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }} + + - name: Generate token + if: steps.crowdin-download.outputs.pull_request_url + id: generate_token + uses: tibdex/github-app-token@b62528385c34dbc9f38e5f4225ac829252d1ea92 + with: + app_id: ${{ secrets.GRAFANA_PR_AUTOMATION_APP_ID }} + private_key: ${{ secrets.GRAFANA_PR_AUTOMATION_APP_PEM }} + + - name: Get pull request ID + if: steps.crowdin-download.outputs.pull_request_url + shell: bash + # Crowdin action returns us the URL of the pull request, but we need an ID for the GraphQL API + # that looks like 'PR_kwDOAOaWjc5mP_GU' + run: | + pr_id=$(gh pr view ${{ steps.crowdin-download.outputs.pull_request_url }} --json id -q .id) + echo "PULL_REQUEST_ID=$pr_id" >> "$GITHUB_ENV" + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Get project board ID + uses: octokit/graphql-action@v2.x + id: get-project-id + if: steps.crowdin-download.outputs.pull_request_url + with: + # Frontend Platform project - https://github.com/orgs/grafana/projects/78 + org: grafana + project_number: 78 + query: | + query getProjectId($org: String!, $project_number: Int!){ + organization(login: $org) { + projectV2(number: $project_number) { + title + id + } + } + } + env: + GITHUB_TOKEN: ${{ steps.generate_token.outputs.token }} + + - name: Add to project board + uses: octokit/graphql-action@v2.x + if: steps.crowdin-download.outputs.pull_request_url + with: + projectid: ${{ fromJson(steps.get-project-id.outputs.data).organization.projectV2.id }} + prid: ${{ env.PULL_REQUEST_ID }} + query: | + mutation addPullRequestToProject($projectid: ID!, $prid: ID!){ + addProjectV2ItemById(input: {projectId: $projectid, contentId: $prid}) { + item { + id + } + } + } + + env: + GITHUB_TOKEN: ${{ steps.generate_token.outputs.token }} + + - name: Run auto-milestone + uses: grafana/grafana-github-actions-go/auto-milestone@main + if: steps.crowdin-download.outputs.pull_request_url + with: + pr: ${{ steps.crowdin-download.outputs.pull_request_number }} + token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/i18n-crowdin-upload.yml b/.github/workflows/i18n-crowdin-upload.yml new file mode 100644 index 0000000000000..9e028b5386fe2 --- /dev/null +++ b/.github/workflows/i18n-crowdin-upload.yml @@ -0,0 +1,33 @@ +name: Crowdin Upload Action + +on: + workflow_dispatch: + push: + paths: + - 'public/locales/en-US/grafana.json' + branches: + - main + +jobs: + upload-sources-to-crowdin: + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Upload sources + uses: crowdin/github-action@v1 + with: + upload_sources: true + upload_sources_args: '--dest=public/locales/en-US/grafana.json' + upload_translations: false + download_translations: false + create_pull_request: false + base_url: 'https://grafana.api.crowdin.com' + config: 'crowdin.yml' + source: 'public/locales/en-US/grafana.json' + translation: 'public/locales/%locale%/%original_file_name%' + env: + CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_PROJECT_ID }} + CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }} diff --git a/.github/workflows/issue-labeled.yml b/.github/workflows/issue-labeled.yml index e0a5abcdc3798..586b2d6d7f13e 100644 --- a/.github/workflows/issue-labeled.yml +++ b/.github/workflows/issue-labeled.yml @@ -53,7 +53,7 @@ jobs: echo "TEAM=${TEAM}" >> $GITHUB_ENV - name: "Prepare payload" - uses: frabert/replace-string-action@v2.0 + uses: frabert/replace-string-action@v2.5 id: preparePayload with: # replace double quotes with single quotes to avoid breaking the JSON payload sent to Slack @@ -64,7 +64,7 @@ jobs: - name: Get Token id: get_workflow_token - uses: peter-murray/workflow-application-token-action@v2 + uses: peter-murray/workflow-application-token-action@v3 with: application_id: ${{ secrets.APP_GRAFANA_TEAM_CHECKER_ID }} application_private_key: ${{ secrets.APP_GRAFANA_TEAM_CHECKER_KEY }} diff --git a/.github/workflows/metrics-collector.yml b/.github/workflows/metrics-collector.yml index 7728516153329..2e22a830a8845 100644 --- a/.github/workflows/metrics-collector.yml +++ b/.github/workflows/metrics-collector.yml @@ -25,7 +25,7 @@ jobs: id: check shell: bash run: | - if [ -n "${{ (secrets.GRAFANA_MISC_STATS_API_KEY != '' && secrets.GH_BOT_ACCESS_TOKEN != '') || '' }}" ]; then + if [ -n "${{ (secrets.GRAFANA_MISC_STATS_API_KEY != '') || '' }}" ]; then echo "has-secrets=1" >> "$GITHUB_OUTPUT" fi @@ -46,5 +46,5 @@ jobs: uses: ./actions/metrics-collector with: metricsWriteAPIKey: ${{secrets.GRAFANA_MISC_STATS_API_KEY}} - token: ${{secrets.GH_BOT_ACCESS_TOKEN}} + token: ${{secrets.GITHUB_TOKEN}} configPath: "metrics-collector" diff --git a/.github/workflows/ox-code-coverage.yml b/.github/workflows/ox-code-coverage.yml deleted file mode 100644 index acc72ed68528e..0000000000000 --- a/.github/workflows/ox-code-coverage.yml +++ /dev/null @@ -1,21 +0,0 @@ -name: Observability Experience test code coverage -on: - pull_request: - paths: - - 'pkg/services/queryhistory/**' - - 'pkg/tsdb/loki/**' - - 'pkg/tsdb/elasticsearch/**' - - 'public/app/features/explore/**' - - 'public/app/features/correlations/**' - - 'public/app/plugins/datasource/loki/**' - - 'public/app/plugins/datasource/elasticsearch/**' - branches-ignore: - - dependabot/** - - backport-* - -jobs: - workflow-call: - uses: grafana/code-coverage/.github/workflows/code-coverage.yml@v0.1.20 - with: - frontend-path-regexp: public\/app\/features\/(explore|correlations)|public\/app\/plugins\/datasource\/(loki|elasticsearch) - backend-path-regexp: pkg\/services\/(queryhistory)|pkg\/tsdb\/(loki|elasticsearch) diff --git a/.github/workflows/pr-codeql-analysis-go.yml b/.github/workflows/pr-codeql-analysis-go.yml index 26b45ad58145f..8485f33868332 100644 --- a/.github/workflows/pr-codeql-analysis-go.yml +++ b/.github/workflows/pr-codeql-analysis-go.yml @@ -16,17 +16,26 @@ jobs: runs-on: ubuntu-latest steps: + - name: "Generate token" + id: generate_token + continue-on-error: true + uses: tibdex/github-app-token@3beb63f4bd073e61482598c45c71c1019b59b73a + with: + app_id: ${{ secrets.GRAFANA_DELIVERY_BOT_APP_ID }} + private_key: ${{ secrets.GRAFANA_DELIVERY_BOT_APP_PEM }} + - name: Checkout repository uses: actions/checkout@v4 with: # We must fetch at least the immediate parents so that if this is # a pull request then we can checkout the head. fetch-depth: 2 + token: ${{ steps.generate_token.outputs.token }} - name: Set go version uses: actions/setup-go@v4 with: - go-version: '1.20.10' + go-version: '1.21.10' # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL @@ -41,3 +50,4 @@ jobs: - name: Perform CodeQL Analysis uses: github/codeql-action/analyze@v2 + if: github.repository == 'grafana/grafana' diff --git a/.github/workflows/pr-codeql-analysis-javascript.yml b/.github/workflows/pr-codeql-analysis-javascript.yml index 304b2798fbc80..e09b3a71c7051 100644 --- a/.github/workflows/pr-codeql-analysis-javascript.yml +++ b/.github/workflows/pr-codeql-analysis-javascript.yml @@ -33,3 +33,4 @@ jobs: - name: Perform CodeQL Analysis uses: github/codeql-action/analyze@v2 + if: github.repository == 'grafana/grafana' diff --git a/.github/workflows/pr-codeql-analysis-python.yml b/.github/workflows/pr-codeql-analysis-python.yml index acd2352a2aecf..e990d71391509 100644 --- a/.github/workflows/pr-codeql-analysis-python.yml +++ b/.github/workflows/pr-codeql-analysis-python.yml @@ -31,3 +31,4 @@ jobs: - name: Perform CodeQL Analysis uses: github/codeql-action/analyze@v2 + if: github.repository == 'grafana/grafana' diff --git a/.github/workflows/pr-go-workspace-check.yml b/.github/workflows/pr-go-workspace-check.yml new file mode 100644 index 0000000000000..4f1672e367a0c --- /dev/null +++ b/.github/workflows/pr-go-workspace-check.yml @@ -0,0 +1,47 @@ +name: "Go Workspace Check" + +on: + workflow_dispatch: + pull_request: + branches: [main] + paths: + - '**/go.work' + - '**/go.work.sum' + - '**/go.mod' + - '**/go.sum' + +jobs: + check: + name: Go Workspace Check + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Set go version + uses: actions/setup-go@v4 + with: + go-version: '1.21.10' + + - name: Workspace Sync + run: go work sync + + - name: Check for go mod & workspace changes + run: | + if ! git diff --exit-code --quiet; then + echo "Changes detected. Please run 'go work sync' and commit the changes." + exit 1 + fi + + - name: Build + run: make build-go + + - name: Check for go workspace changes + run: | + if ! git diff --exit-code --quiet; then + echo "Changes detected. Please run 'make build-go' and commit the changes." + exit 1 + fi \ No newline at end of file diff --git a/.github/workflows/pr-patch-check.yml b/.github/workflows/pr-patch-check.yml index 1ff327ebdef8c..ef1009b7545a4 100644 --- a/.github/workflows/pr-patch-check.yml +++ b/.github/workflows/pr-patch-check.yml @@ -1,4 +1,4 @@ -# Owned by grafana-delivery-squad +# Owned by grafana-release-guild # Intended to be dropped into the base repo Ex: grafana/grafana name: Check for patch conflicts run-name: check-patch-conflicts-${{ github.base_ref }}-${{ github.head_ref }} @@ -18,6 +18,7 @@ on: jobs: trigger_downstream_patch_check: uses: grafana/security-patch-actions/.github/workflows/test-patches.yml@main + if: github.repository == 'grafana/grafana' with: src_repo: "${{ github.repository }}" src_ref: "${{ github.head_ref }}" # this is the source branch name, Ex: "feature/newthing" diff --git a/.github/workflows/publish-kinds-next.yml b/.github/workflows/publish-kinds-next.yml index 97c70377ac559..ec2c8e7ae7abb 100644 --- a/.github/workflows/publish-kinds-next.yml +++ b/.github/workflows/publish-kinds-next.yml @@ -36,7 +36,7 @@ jobs: - name: "Setup Go" uses: "actions/setup-go@v4" with: - go-version: '1.20.10' + go-version: '1.21.10' - name: "Verify kinds" run: go run .github/workflows/scripts/kinds/verify-kinds.go diff --git a/.github/workflows/publish-kinds-release.yml b/.github/workflows/publish-kinds-release.yml index 30516f062d895..3a86ae356e562 100644 --- a/.github/workflows/publish-kinds-release.yml +++ b/.github/workflows/publish-kinds-release.yml @@ -39,7 +39,7 @@ jobs: - name: "Setup Go" uses: "actions/setup-go@v4" with: - go-version: '1.20.10' + go-version: '1.21.10' - name: "Verify kinds" run: go run .github/workflows/scripts/kinds/verify-kinds.go diff --git a/.github/workflows/publish-technical-documentation-release.yml b/.github/workflows/publish-technical-documentation-release.yml index 87f34de25b269..3cc7a8d45f989 100644 --- a/.github/workflows/publish-technical-documentation-release.yml +++ b/.github/workflows/publish-technical-documentation-release.yml @@ -28,23 +28,13 @@ jobs: - name: "Install Actions from library" run: "npm install --production --prefix ./actions" - - name: "Determine if there is a matching release tag" - id: "has-matching-release-tag" - uses: "./actions/has-matching-release-tag" - with: - ref_name: "${{ github.ref_name }}" - release_tag_regexp: "^v(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)$" - release_branch_regexp: "^v(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.x$" - - name: "Determine technical documentation version" - if: "steps.has-matching-release-tag.outputs.bool == 'true'" uses: "./actions/docs-target" id: "target" with: ref_name: "${{ github.ref_name }}" - name: "Clone website-sync Action" - if: "steps.has-matching-release-tag.outputs.bool == 'true'" # WEBSITE_SYNC_TOKEN is a fine-grained GitHub Personal Access Token that expires. # It must be regenerated in the grafanabot GitHub account and requires a Grafana organization # GitHub administrator to update the organization secret. @@ -54,11 +44,10 @@ jobs: - name: "Switch to HEAD of version branch for tags" # Tags aren't necessarily made to the HEAD of the version branch. # The documentation to be published is always on the HEAD of the version branch. - if: "steps.has-matching-release-tag.outputs.bool == 'true' && github.ref_type == 'tag'" - run: "git switch --detach origin/${{ steps.target.output.target }}.x" + if: "github.ref_type == 'tag'" + run: "git switch --detach origin/${{ steps.target.outputs.target }}.x" - name: "Publish to website repository (release)" - if: "steps.has-matching-release-tag.outputs.bool == 'true'" uses: "./.github/actions/website-sync" id: "publish-release" with: diff --git a/.github/workflows/run-scenes-e2e.yml b/.github/workflows/run-scenes-e2e.yml new file mode 100644 index 0000000000000..ff2e70841a2d6 --- /dev/null +++ b/.github/workflows/run-scenes-e2e.yml @@ -0,0 +1,46 @@ +name: Run dashboard scenes e2e + +on: + schedule: + - cron: "0 8 * * 1-5" # every day at 08:00UTC on weekdays + +env: + ARCH: linux-amd64 + +jobs: + dashboard-scenes-e2e: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Pin Go version to mod file + uses: actions/setup-go@v5 + with: + go-version-file: 'go.mod' + - run: go version + - uses: actions/setup-node@v4 + with: + node-version: 20 + - name: Install dependencies + run: yarn install --immutable + - name: Build grafana + run: make build + - name: Install Cypress dependencies + uses: cypress-io/github-action@v6 + with: + runTests: false + - name: Run dashboard scenes e2e + run: yarn e2e:scenes + - name: "Send Slack notification" + if: ${{ failure() }} + uses: slackapi/slack-github-action@v1.26.0 + with: + payload: > + { + "icon_emoji": ":this-is-fine-fire:", + "username": "Dashboard scenes e2e tests failed", + "text": "Link to run: https://github.com/${{github.repository}}/actions/runs/${{github.run_id}}", + "channel": "#grafana-dashboards-squad" + } + env: + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} diff --git a/.github/workflows/scripts/feature-toggle-cleanup/feature-toggle-cleanup.js b/.github/workflows/scripts/feature-toggle-cleanup/feature-toggle-cleanup.js new file mode 100644 index 0000000000000..35bc2938c1002 --- /dev/null +++ b/.github/workflows/scripts/feature-toggle-cleanup/feature-toggle-cleanup.js @@ -0,0 +1,38 @@ +import { parse } from 'csv-parse/sync'; +import fs from 'fs'; + +/*** + * Feauture Flag Structure example + * Name: 'disableEnvelopeEncryption', + Stage: 'GA', + Owner: '@grafana/grafana-as-code', + Created: '2022-05-24', + requiresDevMode: 'false', + RequiresLicense: 'false', + RequiresRestart: 'false', + FrontendOnly: 'false' + * + */ + + +export default function cleanupFeatureFlags() { + const today = new Date(); + const sixMonthAgo = today.setMonth(today.getMonth() - 6); + const inputFileContents = fs.readFileSync(process.env.FEATURE_TOGGLES_CSV_FILE_PATH); + const parsedFeatureFlags = parse(inputFileContents, { + columns: true, + skip_empty_lines: true, + cast: true, + cast_date: true, + }); + + // Here we can have the custom logic of how to handle what type of feature flag - e.g. GA can be treated differently than experimental and so on. + for (const flag of parsedFeatureFlags) { + if (flag.Created < sixMonthAgo) { + console.log(`The flag ${flag.Name} was created more than 6 months ago. It should be checked.`); + console.log(flag); + } + } + + +} diff --git a/.github/workflows/scripts/kinds/verify-kinds.go b/.github/workflows/scripts/kinds/verify-kinds.go index 72fc3b3047619..ab60a90bd3ee0 100644 --- a/.github/workflows/scripts/kinds/verify-kinds.go +++ b/.github/workflows/scripts/kinds/verify-kinds.go @@ -1,227 +1,124 @@ package main import ( - "archive/zip" "context" + "errors" "fmt" - "io" - "net/http" + "golang.org/x/text/cases" + "golang.org/x/text/language" "os" "path/filepath" "regexp" - "strconv" "strings" - "testing/fstest" "cuelang.org/go/cue" cueformat "cuelang.org/go/cue/format" - "github.com/google/go-github/github" "github.com/grafana/codejen" - "github.com/grafana/grafana/pkg/codegen" - "github.com/grafana/grafana/pkg/cuectx" - "github.com/grafana/grafana/pkg/plugins/pfs" - "github.com/grafana/grafana/pkg/plugins/pfs/corelist" - "github.com/grafana/grafana/pkg/registry/corekind" - "github.com/grafana/kindsys" - "github.com/grafana/thema" - "golang.org/x/oauth2" + "github.com/grafana/grafana/pkg/registry/schemas" ) -const ( - GITHUB_OWNER = "grafana" - GITHUB_REPO = "kind-registry" -) +var nonAlphaNumRegex = regexp.MustCompile("[^a-zA-Z0-9 ]+") // main This script verifies that stable kinds are not updated once published (new schemas // can be added but existing ones cannot be updated). -// If the env variable CODEGEN_VERIFY is not present, this also generates kind files into a -// local "next" folder, ready to be published in the kind-registry repo. +// It generates kind files into a local "next" folder, ready to be published in the kind-registry repo. // If kind names are given as parameters, the script will make the above actions only for the // given kinds. func main() { - var corek []kindsys.Kind - var compok []kindsys.Composable - - kindRegistry, err := NewKindRegistry() - defer kindRegistry.cleanUp() - if err != nil { - die(err) - } - - // Search for the latest version directory present in the kind-registry repo - latestRegistryDir, err := kindRegistry.findLatestDir() - if err != nil { - die(fmt.Errorf("failed to get latest directory for published kinds: %s", err)) - } - - errs := make([]error, 0) - - // Kind verification - for _, kind := range corekind.NewBase(nil).All() { - name := kind.Props().Common().MachineName - err := verifyKind(kindRegistry, kind, name, "core", latestRegistryDir) - if err != nil { - errs = append(errs, err) - continue - } - - corek = append(corek, kind) - } - - for _, pp := range corelist.New(nil) { - for _, kind := range pp.ComposableKinds { - si, err := kindsys.FindSchemaInterface(kind.Def().Properties.SchemaInterface) - if err != nil { - errs = append(errs, err) - continue - } - - name := strings.ToLower(fmt.Sprintf("%s/%s", strings.TrimSuffix(kind.Lineage().Name(), si.Name()), si.Name())) - err = verifyKind(kindRegistry, kind, name, "composable", latestRegistryDir) - if err != nil { - errs = append(errs, err) - continue - } - - compok = append(compok, kind) - } - } - - die(errs...) - - if _, set := os.LookupEnv("CODEGEN_VERIFY"); set { - os.Exit(0) - } - // File generation jfs := codejen.NewFS() outputPath := filepath.Join(".github", "workflows", "scripts", "kinds") - coreJennies := codejen.JennyList[kindsys.Kind]{} + corekinds, err := schemas.GetCoreKinds() + die(err) + + composableKinds, err := schemas.GetComposableKinds() + die(err) + + coreJennies := codejen.JennyList[schemas.CoreKind]{} coreJennies.Append( - KindRegistryJenny(outputPath), + CoreKindRegistryJenny(outputPath), ) - corefs, err := coreJennies.GenerateFS(corek...) + corefs, err := coreJennies.GenerateFS(corekinds...) die(err) die(jfs.Merge(corefs)) - composableJennies := codejen.JennyList[kindsys.Composable]{} + composableJennies := codejen.JennyList[schemas.ComposableKind]{} composableJennies.Append( ComposableKindRegistryJenny(outputPath), ) - composablefs, err := composableJennies.GenerateFS(compok...) + composablefs, err := composableJennies.GenerateFS(composableKinds...) die(err) die(jfs.Merge(composablefs)) if err = jfs.Write(context.Background(), ""); err != nil { die(fmt.Errorf("error while writing generated code to disk:\n%s", err)) } -} -func die(errs ...error) { - if len(errs) > 0 && errs[0] != nil { - for _, err := range errs { - fmt.Fprint(os.Stderr, err, "\n") - } - os.Exit(1) + if err := copyCueSchemas("packages/grafana-schema/src/common", filepath.Join(outputPath, "next")); err != nil { + die(fmt.Errorf("error while copying the grafana-schema/common package:\n%s", err)) } } -// verifyKind verifies that stable kinds are not updated once published (new schemas -// can be added but existing ones cannot be updated) -func verifyKind(registry *kindRegistry, kind kindsys.Kind, name string, category string, latestRegistryDir string) error { - oldKindString, err := registry.getPublishedKind(name, category, latestRegistryDir) - if err != nil { - return err - } +func copyCueSchemas(fromDir string, toDir string) error { + baseTargetDir := filepath.Base(fromDir) - var oldKind kindsys.Kind - if oldKindString != "" { - switch category { - case "core": - oldKind, err = loadCoreKind(name, oldKindString) - case "composable": - oldKind, err = loadComposableKind(name, oldKindString) - default: - return fmt.Errorf("kind can only be core or composable") + return filepath.Walk(fromDir, func(path string, info os.FileInfo, err error) error { + if err != nil { + return err } - } - if err != nil { - return err - } - - // Kind is new - no need to compare it - if oldKind == nil { - return nil - } - - // Check that maturity isn't downgraded - if kind.Maturity().Less(oldKind.Maturity()) { - return fmt.Errorf("kind maturity can't be downgraded once a kind is published") - } - - if oldKind.Maturity().Less(kindsys.MaturityStable) { - return nil - } - // Check that old schemas do not contain updates - err = thema.IsAppendOnly(oldKind.Lineage(), kind.Lineage()) - if err != nil { - return fmt.Errorf("existing schemas in lineage %s cannot be modified: %w", name, err) - } + targetPath := filepath.Join( + toDir, + baseTargetDir, + strings.TrimPrefix(path, fromDir), + ) - return nil -} + if info.IsDir() { + return ensureDirectoryExists(targetPath, info.Mode()) + } -func isLess(v1 []uint64, v2 []uint64) bool { - if len(v1) == 1 || len(v2) == 1 { - return v1[0] < v2[0] - } + if !strings.HasSuffix(path, ".cue") { + return nil + } - return v1[0] < v2[0] || (v1[0] == v2[0] && isLess(v1[2:], v2[2:])) + return copyFile(path, targetPath, info.Mode()) + }) } -func loadCoreKind(name string, kind string) (kindsys.Kind, error) { - fs := fstest.MapFS{ - fmt.Sprintf("%s.cue", name): &fstest.MapFile{ - Data: []byte(kind), - }, - } - - rt := cuectx.GrafanaThemaRuntime() - - def, err := cuectx.LoadCoreKindDef(fmt.Sprintf("%s.cue", name), rt.Context(), fs) +func copyFile(from string, to string, mode os.FileMode) error { + input, err := os.ReadFile(from) if err != nil { - return nil, fmt.Errorf("%s is not a valid kind: %w", name, err) + return err } - return kindsys.BindCore(rt, def) + return os.WriteFile(to, input, mode) } -func loadComposableKind(name string, kind string) (kindsys.Kind, error) { - parts := strings.Split(name, "/") - if len(parts) > 1 { - name = parts[1] - } - - fs := fstest.MapFS{ - fmt.Sprintf("%s.cue", name): &fstest.MapFile{ - Data: []byte(kind), - }, +func ensureDirectoryExists(directory string, mode os.FileMode) error { + _, err := os.Stat(directory) + if errors.Is(err, os.ErrNotExist) { + if err = os.Mkdir(directory, mode); err != nil { + return err + } + } else if err != nil { + return err } - rt := cuectx.GrafanaThemaRuntime() + return os.Chmod(directory, mode) +} - def, err := pfs.LoadComposableKindDef(fs, rt, fmt.Sprintf("%s.cue", name)) - if err != nil { - return nil, fmt.Errorf("%s is not a valid kind: %w", name, err) +func die(errs ...error) { + if len(errs) > 0 && errs[0] != nil { + for _, err := range errs { + fmt.Fprint(os.Stderr, err, "\n") + } + os.Exit(1) } - - return kindsys.BindComposable(rt, def) } -// KindRegistryJenny generates kind files into the "next" folder of the local kind registry. -func KindRegistryJenny(path string) codegen.OneToOne { +// CoreKindRegistryJenny generates kind files into the "next" folder of the local kind registry. +func CoreKindRegistryJenny(path string) codejen.OneToOne[schemas.CoreKind] { return &kindregjenny{ path: path, } @@ -235,35 +132,18 @@ func (j *kindregjenny) JennyName() string { return "KindRegistryJenny" } -func (j *kindregjenny) Generate(kind kindsys.Kind) (*codejen.File, error) { - name := kind.Props().Common().MachineName - core, ok := kind.(kindsys.Core) - if !ok { - return nil, fmt.Errorf("kind sent to KindRegistryJenny must be a core kind") - } - - newKindBytes, err := kindToBytes(core.Def().V) +func (j *kindregjenny) Generate(kind schemas.CoreKind) (*codejen.File, error) { + newKindBytes, err := kindToBytes(kind.CueFile) if err != nil { return nil, err } - path := filepath.Join(j.path, "next", "core", name, name+".cue") + path := filepath.Join(j.path, "next", "core", kind.Name, kind.Name+".cue") return codejen.NewFile(path, newKindBytes, j), nil } -// kindToBytes converts a kind cue value to a .cue file content -func kindToBytes(kind cue.Value) ([]byte, error) { - node := kind.Syntax( - cue.All(), - cue.Schema(), - cue.Docs(true), - ) - - return cueformat.Node(node) -} - // ComposableKindRegistryJenny generates kind files into the "next" folder of the local kind registry. -func ComposableKindRegistryJenny(path string) codejen.OneToOne[kindsys.Composable] { +func ComposableKindRegistryJenny(path string) codejen.OneToOne[schemas.ComposableKind] { return &ckrJenny{ path: path, } @@ -277,149 +157,73 @@ func (j *ckrJenny) JennyName() string { return "ComposableKindRegistryJenny" } -func (j *ckrJenny) Generate(k kindsys.Composable) (*codejen.File, error) { - si, err := kindsys.FindSchemaInterface(k.Def().Properties.SchemaInterface) - if err != nil { - panic(err) - } +func (j *ckrJenny) Generate(k schemas.ComposableKind) (*codejen.File, error) { + name := strings.ToLower(fmt.Sprintf("%s/%s", k.Name, k.Filename)) - name := strings.ToLower(fmt.Sprintf("%s/%s", strings.TrimSuffix(k.Lineage().Name(), si.Name()), si.Name())) + v := fixComposableKindFormat(k) - newKindBytes, err := kindToBytes(k.Def().V) + newKindBytes, err := kindToBytes(v) if err != nil { return nil, err } newKindBytes = []byte(fmt.Sprintf("package grafanaplugin\n\n%s", newKindBytes)) - return codejen.NewFile(filepath.Join(j.path, "next", "composable", name+".cue"), newKindBytes, j), nil -} - -type kindRegistry struct { - zipDir string - zipFile *zip.ReadCloser + return codejen.NewFile(filepath.Join(j.path, "next", "composable", name), newKindBytes, j), nil } -// NewKindRegistry downloads the archive of the kind-registry GH repository and open it -func NewKindRegistry() (*kindRegistry, error) { - ctx := context.Background() - tc := oauth2.NewClient(ctx, nil) - client := github.NewClient(tc) - - // Create a temporary file to store the downloaded archive - file, err := os.CreateTemp("", "*.zip") - if err != nil { - return nil, fmt.Errorf("failed to create temporary file: %w", err) - } - defer file.Close() - - // Get the repository archive URL - archiveURL, _, err := client.Repositories.GetArchiveLink(ctx, GITHUB_OWNER, GITHUB_REPO, github.Zipball, &github.RepositoryContentGetOptions{}) - if err != nil { - return nil, fmt.Errorf("failed to get archive URL: %w", err) - } - - // Download the archive file - httpClient := http.DefaultClient - resp, err := httpClient.Get(archiveURL.String()) - if err != nil { - return nil, fmt.Errorf("failed to download archive: %w", err) - } - defer resp.Body.Close() - - // Save the downloaded archive to the temporary file - _, err = io.Copy(file, resp.Body) - if err != nil { - return nil, fmt.Errorf("failed to save archive: %w", err) - } - - // Open the zip file for reading - zipDir := file.Name() - zipFile, err := zip.OpenReader(zipDir) - if err != nil { - return nil, fmt.Errorf("failed to open zip file %s: %w", zipDir, err) - } +// kindToBytes converts a kind cue value to a .cue file content +func kindToBytes(kind cue.Value) ([]byte, error) { + node := kind.Syntax( + cue.All(), + cue.Schema(), + cue.Docs(true), + ) - return &kindRegistry{ - zipDir: zipDir, - zipFile: zipFile, - }, nil + return cueformat.Node(node) } -// cleanUp removes the archive from the temporary files and closes the zip reader -func (registry *kindRegistry) cleanUp() { - if registry.zipDir != "" { - err := os.Remove(registry.zipDir) - if err != nil { - fmt.Fprint(os.Stderr, fmt.Errorf("failed to remove zip archive: %w", err)) - } +func fixComposableKindFormat(schema schemas.ComposableKind) cue.Value { + variant := "PanelCfg" + if schema.CueFile.LookupPath(cue.ParsePath("composableKinds.DataQuery")).Exists() { + variant = "DataQuery" } - if registry.zipFile != nil { - err := registry.zipFile.Close() - if err != nil { - fmt.Fprint(os.Stderr, fmt.Errorf("failed to close zip file reader: %w", err)) - } - } -} - -// findLatestDir get the latest version directory published in the kind registry -func (registry *kindRegistry) findLatestDir() (string, error) { - re := regexp.MustCompile(`([0-9]+)\.([0-9]+)\.([0-9]+)`) - latestVersion := []uint64{0, 0, 0} - latestDir := "" + newCue := schema.CueFile.Context().CompileString( + fmt.Sprintf("schemaInterface: %q\n", variant) + + fmt.Sprintf("name: %q + %q\n\n", UpperCamelCase(schema.Name), variant) + + "lineage: _", + ) - for _, file := range registry.zipFile.File { - if !file.FileInfo().IsDir() { - continue - } + lineagePath := cue.MakePath(cue.Str("composableKinds"), cue.Str(variant), cue.Str("lineage")) + return newCue.FillPath(cue.MakePath(cue.Str("lineage")), schema.CueFile.LookupPath(lineagePath)) +} - parts := re.FindStringSubmatch(file.Name) - if parts == nil || len(parts) < 4 { - continue - } +func UpperCamelCase(s string) string { + s = LowerCamelCase(s) - version := make([]uint64, len(parts)-1) - for i := 1; i < len(parts); i++ { - version[i-1], _ = strconv.ParseUint(parts[i], 10, 32) - } - - if isLess(latestVersion, version) { - latestVersion = version - latestDir = file.Name - } + // Uppercase the first letter + if len(s) > 0 { + s = strings.ToUpper(s[:1]) + s[1:] } - return latestDir, nil + return s } -// getPublishedKind retrieves the latest published kind from the kind registry -func (registry *kindRegistry) getPublishedKind(name string, category string, latestRegistryDir string) (string, error) { - if latestRegistryDir == "" { - return "", nil - } +func LowerCamelCase(s string) string { + // Replace all non-alphanumeric characters by spaces + s = nonAlphaNumRegex.ReplaceAllString(s, " ") - var cueFilePath string - switch category { - case "core": - cueFilePath = fmt.Sprintf("%s/%s.cue", name, name) - case "composable": - cueFilePath = fmt.Sprintf("%s.cue", name) - default: - return "", fmt.Errorf("kind can only be core or composable") - } + // Title case s + s = cases.Title(language.AmericanEnglish, cases.NoLower).String(s) - kindPath := filepath.Join(latestRegistryDir, category, cueFilePath) - file, err := registry.zipFile.Open(kindPath) - if err != nil { - return "", fmt.Errorf("failed to open file: %w", err) - } - defer file.Close() + // Remove all spaces + s = strings.ReplaceAll(s, " ", "") - data, err := io.ReadAll(file) - if err != nil { - return "", fmt.Errorf("failed to read file: %w", err) + // Lowercase the first letter + if len(s) > 0 { + s = strings.ToLower(s[:1]) + s[1:] } - return string(data), nil + return s } diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index de50fe2f26bf2..778a49b16d00f 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -4,33 +4,39 @@ on: - cron: '30 1 * * *' permissions: + issues: write pull-requests: write jobs: stale: runs-on: ubuntu-latest steps: - - uses: actions/stale@v8 + - uses: actions/stale@v9 with: repo-token: ${{ secrets.GITHUB_TOKEN }} - # Number of days of inactivity before a stale Issue or Pull Request is closed. - # Set to -1 to disable. If disabled, issues still need to be closed manually, but will remain marked as stale. - days-before-close: 14 - # Number of days of inactivity before an Issue or Pull Request becomes stale - days-before-stale: 30 - # We don't want any Issues to be marked as stale for now. - days-before-issue-stale: -1 - exempt-issue-labels: no stalebot - exempt-pr-labels: no stalebot - operations-per-run: 500 + operations-per-run: 750 + # start from the oldest issues/PRs when performing stale operations + ascending: true + days-before-issue-stale: 365 + days-before-issue-close: 30 stale-issue-label: stale + exempt-issue-labels: no stalebot,type/epic + stale-issue-message: > + This issue has been automatically marked as stale because it has not had + activity in the last year. It will be closed in 30 days if no further activity occurs. Please + feel free to leave a comment if you believe the issue is still relevant. + Thank you for your contributions! + close-issue-message: > + This issue has been automatically closed because it has not had any further + activity in the last 30 days. Thank you for your contributions! + days-before-pr-stale: 30 + days-before-pr-close: 14 stale-pr-label: stale + exempt-pr-labels: no stalebot stale-pr-message: > This pull request has been automatically marked as stale because it has not had activity in the last 30 days. It will be closed in 2 weeks if no further activity occurs. Please - feel free to give a status update now, ping for review, or re-open when it's ready. - Thank you for your contributions! + feel free to give a status update or ping for review. Thank you for your contributions! close-pr-message: > - This pull request has been automatically closed because it has not had - activity in the last 2 weeks. Please feel free to give a status update now, ping for review, or re-open when it's ready. - Thank you for your contributions! + This pull request has been automatically closed because it has not had any further + activity in the last 2 weeks. Thank you for your contributions! diff --git a/.github/workflows/sync-mirror.yml b/.github/workflows/sync-mirror.yml index fd8d93d62260c..09c8f87d50902 100644 --- a/.github/workflows/sync-mirror.yml +++ b/.github/workflows/sync-mirror.yml @@ -1,4 +1,4 @@ -# Owned by grafana-delivery-squad +# Owned by grafana-release-guild # Intended to be dropped into the base repo, Ex: grafana/grafana name: Sync to mirror run-name: sync-to-mirror-${{ github.ref_name }} diff --git a/.github/workflows/update-make-docs.yml b/.github/workflows/update-make-docs.yml index 1bd0f70cb7131..49b64504bd0db 100644 --- a/.github/workflows/update-make-docs.yml +++ b/.github/workflows/update-make-docs.yml @@ -2,26 +2,18 @@ name: Update `make docs` procedure on: schedule: - cron: '0 7 * * 1-5' + workflow_dispatch: jobs: main: if: github.repository == 'grafana/grafana' runs-on: ubuntu-latest steps: - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Update procedure - run: | - curl -s -Lo docs/docs.mk https://raw.githubusercontent.com/grafana/writers-toolkit/main/docs/docs.mk - curl -s -Lo docs/make-docs https://raw.githubusercontent.com/grafana/writers-toolkit/main/docs/make-docs - if git diff --exit-code; then exit 0; fi - BRANCH="$(date +%Y-%m-%d)/update-make-docs" - git checkout -b "${BRANCH}" - git add . - git config --local user.email "bot@grafana.com" - git config --local user.name "grafanabot" - git commit -m "Update \`make docs\` procedure" - git push -v origin "refs/heads/${BRANCH}" - gh pr create --fill --label no-changelog --label --no-backport --label type/docs - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - uses: actions/checkout@v4 + - uses: grafana/writers-toolkit/update-make-docs@update-make-docs/v1 + with: + pr_options: > + --label 'backport v10.1.x' + --label 'backport v10.2.x' + --label 'backport v10.3.x' + --label no-changelog + --label type/docs diff --git a/.github/workflows/verify-kinds.yml b/.github/workflows/verify-kinds.yml index 7ea1bb46a1c38..169dc8663569d 100644 --- a/.github/workflows/verify-kinds.yml +++ b/.github/workflows/verify-kinds.yml @@ -4,7 +4,7 @@ on: pull_request: branches: [ main ] paths: - - '**/*.cue' + - '**/*.cue' jobs: main: @@ -18,10 +18,9 @@ jobs: - name: "Setup Go" uses: "actions/setup-go@v4" with: - go-version: '1.20.10' + go-version: '1.21.10' - name: "Verify kinds" run: go run .github/workflows/scripts/kinds/verify-kinds.go env: - CODEGEN_VERIFY: 1 GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} diff --git a/.gitignore b/.gitignore index 431a6300f7619..c85e9ef4fbf79 100644 --- a/.gitignore +++ b/.gitignore @@ -7,8 +7,6 @@ awsconfig /.awcache /dist /public/build -/public/views/index.html -/public/views/error.html /emails/dist /reports /e2e/tmp @@ -26,9 +24,6 @@ __debug_bin* !.yarn/plugins !.yarn/sdks !.yarn/versions -# we temporarily commit this file because yarn downloading it -# somehow produces different checksum values -!.yarn/cache/pa11y-ci-https-1e9675e9e1-668c9119bd.zip .pnp.* # Enterprise emails @@ -78,6 +73,13 @@ public/css/*.min.css /data/* /bin/* +# any certificates generated by grafana apiserver +apiserver.local.config/ +default.etcd/ + +# kubeconfig path used by example apiserver +example-apiserver/ + # devenv /devenv/docker-compose.yaml /devenv/docker-compose.override.yaml @@ -86,7 +88,7 @@ public/css/*.min.css /devenv/docker/ha-test-unified-alerting/logs/webhook/dumps/ /devenv/docker/ha-test-unified-alerting/logs/webhook/webhook-listener.log -conf/custom.ini +# Psiphon change - remove conf/custom.ini from gitignore so custom config can be used /conf/provisioning/**/*.yaml !/conf/provisioning/**/sample.yaml @@ -129,9 +131,7 @@ pkg/services/quota/quotaimpl/storage/storage.json /devenv/bulk-dashboards/*.json /devenv/bulk-folders/*/*.json -/devenv/bulk_alerting_dashboards/*.json /devenv/datasources_bulk.yaml -/devenv/bulk_alerting_dashboards/bulk_alerting_datasources.yaml /scripts/build/release_publisher/release_publisher *.patch @@ -169,6 +169,11 @@ compilation-stats.json /e2e/build_results.zip /e2e/extensions /e2e/extensions-suite +/test-results/ +/playwright-report/ +/blob-report/ +/playwright/.cache/ +/playwright/.auth/ # grafana server /scripts/grafana-server/server.log @@ -197,6 +202,7 @@ public/api-spec.json deployment_tools_config.json .betterer.cache +.nx # Temporary file for backporting PRs .pr-body.txt @@ -207,3 +213,6 @@ public/app/plugins/**/dist/ # Ignore transpiled JavaScript resulting from the generate-transformations.ts script. /public/app/features/transformers/docs/*.js /scripts/docs/generate-transformations.js + +# Go coverage files created with go test -cover -coverprogile=something.out ... +*.out diff --git a/.golangci.toml b/.golangci.toml index 1d894ab85cd9f..c3be795e99dca 100644 --- a/.golangci.toml +++ b/.golangci.toml @@ -1,10 +1,6 @@ [run] timeout = "10m" -[linters-settings.goconst] -min-len = 5 -min-occurrences = 5 - [linters-settings.exhaustive] default-signifies-exhaustive = true @@ -52,10 +48,63 @@ deny = [ { pkg = "github.com/grafana/grafana/pkg/server", desc = "Core plugins are not allowed to depend on Grafana core packages" }, { pkg = "github.com/grafana/grafana/pkg/tests", desc = "Core plugins are not allowed to depend on Grafana core packages" }, { pkg = "github.com/grafana/grafana/pkg/web", desc = "Core plugins are not allowed to depend on Grafana core packages" }, + { pkg = "github.com/grafana/grafana/pkg/tsdb/intervalv2", desc = "Core plugins are not allowed to depend on Grafana core packages" }, ] files = [ + "**/pkg/tsdb/grafana-pyroscope-datasource/*", + "**/pkg/tsdb/grafana-pyroscope-datasource/**/*", "**/pkg/tsdb/grafana-testdata-datasource/*", "**/pkg/tsdb/grafana-testdata-datasource/**/*", + "**/pkg/tsdb/azuremonitor/*", + "**/pkg/tsdb/azuremonitor/**/*", + "**/pkg/tsdb/cloud-monitoring/*", + "**/pkg/tsdb/cloud-monitoring/**/*", + "**/pkg/tsdb/parca/*", + "**/pkg/tsdb/parca/**/*", + "**/pkg/tsdb/tempo/*", + "**/pkg/tsdb/tempo/**/*", + "**/pkg/tsdb/cloudwatch/*", + "**/pkg/tsdb/cloudwatch/**/*", +] + +[linters-settings.depguard.rules.apiserver] +list-mode = "lax" +allow = [ + "github.com/grafana/grafana/pkg/apimachinery", + "github.com/grafana/grafana/pkg/apiserver", +] +deny = [ + { pkg = "github.com/grafana/grafana/pkg", desc = "apiserver is not allowed to import grafana core" } +] +files = [ + "**/pkg/apiserver/*", + "**/pkg/apiserver/**/*" +] + +[linters-settings.depguard.rules.apimachinery] +list-mode = "lax" +allow = [ + "github.com/grafana/grafana/pkg/apimachinery", +] +deny = [ + { pkg = "github.com/grafana/grafana/pkg", desc = "apimachinery is not allowed to import grafana core" } +] +files = [ + "**/pkg/apimachinery/*", + "**/pkg/apimachinery/**/*" +] + +[linters-settings.depguard.rules.promlib] +list-mode = "lax" # allow unless explicitely denied +deny = [ + { pkg = "github.com/grafana/grafana/pkg", desc = "promlib is not allowed to import grafana core" } +] +allow = [ + "github.com/grafana/grafana/pkg/promlib" +] +files = [ + "**/pkg/promlib/*", + "**/pkg/promlib/**/*" ] [linters-settings.gocritic] @@ -74,7 +123,7 @@ enable = [ "dogsled", "errcheck", # "gochecknoinits", - "goconst", + # "goconst", # "gocritic", # Temporarily disabled on 2022-09-09, running into weird bug "ruleguard: execution error: used Run() with an empty rule set; forgot to call Load() first?" "goimports", "goprintffuncname", @@ -192,3 +241,10 @@ text = "ST1020" [[issues.exclude-rules]] linters = ["stylecheck"] text = "ST1021" + +# Remove this when we have go v1.22 in place +# https://stackoverflow.com/a/68247837/767660 +[[issues.exclude-rules]] +linters = ["gosec"] +path = '(.+)_test\.go' +text = "G601" diff --git a/.pa11yci-pr.conf.js b/.pa11yci-pr.conf.js index 71990e6a11524..acbfdd782ab2a 100644 --- a/.pa11yci-pr.conf.js +++ b/.pa11yci-pr.conf.js @@ -34,7 +34,7 @@ var dashboardSettings = [ wait: 500, rootElement: '.main-view', // TODO: improve the accessibility of the permission tab https://github.com/grafana/grafana/issues/77203 - threshold: 11, + threshold: 5, }, { url: '${HOST}/d/O6f11TZWk/panel-tests-bar-gauge?orgId=1&editview=dashboard_json', @@ -51,6 +51,7 @@ var config = { useIncognitoBrowserContext: false, standard: 'WCAG2AA', chromeLaunchConfig: { + executablePath: '/usr/bin/google-chrome', args: ['--no-sandbox'], }, // see https://github.com/grafana/grafana/pull/41693#issuecomment-979921463 for context @@ -63,7 +64,7 @@ var config = { url: '${HOST}/login', wait: 500, rootElement: '.main-view', - threshold: 13, + threshold: 0, }, { url: '${HOST}/login', @@ -72,16 +73,16 @@ var config = { "wait for element input[name='user'] to be added", "set field input[name='user'] to admin", "set field input[name='password'] to admin", - "click element button[aria-label='Login button']", - "wait for element [aria-label='Skip change password button'] to be visible", + "click element button[data-testid='data-testid Login button']", + "wait for element button[data-testid='data-testid Skip change password button'] to be visible", ], - threshold: 15, + threshold: 2, rootElement: '.main-view', }, { url: '${HOST}/?orgId=1', wait: 500, - threshold: 3, + threshold: 0, }, { url: '${HOST}/d/O6f11TZWk/panel-tests-bar-gauge', @@ -94,7 +95,7 @@ var config = { url: '${HOST}/?orgId=1&search=open', wait: 500, rootElement: '.main-view', - threshold: 3, + threshold: 0, }, { url: '${HOST}/alerting/list', @@ -102,49 +103,49 @@ var config = { rootElement: '.main-view', // the unified alerting promotion alert's content contrast is too low // see https://github.com/grafana/grafana/pull/41829 - threshold: 6, + threshold: 7, }, { url: '${HOST}/datasources', wait: 500, rootElement: '.main-view', - threshold: 3, + threshold: 0, }, { url: '${HOST}/org/users', wait: 500, rootElement: '.main-view', - threshold: 1, + threshold: 0, }, { url: '${HOST}/org/teams', wait: 500, rootElement: '.main-view', - threshold: 1, + threshold: 0, }, { url: '${HOST}/plugins', wait: 500, rootElement: '.main-view', - threshold: 3, + threshold: 0, }, { url: '${HOST}/org', wait: 500, rootElement: '.main-view', - threshold: 1, + threshold: 0, }, { url: '${HOST}/org/apikeys', wait: 500, rootElement: '.main-view', - threshold: 4, + threshold: 2, }, { url: '${HOST}/dashboards', wait: 500, rootElement: '.main-view', - threshold: 1, + threshold: 0, }, ], }; diff --git a/.pa11yci.conf.js b/.pa11yci.conf.js index b15b7c7d80a95..5c8256c3f3ed7 100644 --- a/.pa11yci.conf.js +++ b/.pa11yci.conf.js @@ -61,8 +61,8 @@ var config = { "wait for element input[name='user'] to be added", "set field input[name='user'] to admin", "set field input[name='password'] to admin", - "click element button[aria-label='Login button']", - "wait for element [aria-label='Skip change password button'] to be visible", + "click element button[data-testid='data-testid Login button']", + "wait for element button[data-testid='data-testid Skip change password button'] to be visible", ], wait: 500, rootElement: '.main-view', diff --git a/.prettierignore b/.prettierignore index 9f95507f7b307..160926fd718cc 100644 --- a/.prettierignore +++ b/.prettierignore @@ -12,6 +12,7 @@ node_modules pkg public/lib/monaco public/sass/*.generated.scss +scripts/cli/bettererIssueTemplate.md scripts/grafana-server/tmp vendor @@ -31,10 +32,5 @@ public/api-merged.json public/api-enterprise-spec.json public/openapi3.json -# Generated Kinds report -kinds/report.json - -# Generated schema docs -docs/sources/developers/kinds/ - -scripts/cli/bettererIssueTemplate.md +# Crowdin files +public/locales/**/*.json diff --git a/.vscode/launch.json b/.vscode/launch.json index 792addee9505c..99a3f849ca932 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -11,6 +11,33 @@ "cwd": "${workspaceFolder}", "args": ["server", "--homepath", "${workspaceFolder}", "--packaging", "dev"] }, + { + "name": "Run API Server (testdata)", + "type": "go", + "request": "launch", + "mode": "auto", + "program": "${workspaceFolder}/pkg/cmd/grafana/", + "env": {}, + "cwd": "${workspaceFolder}", + "args": ["apiserver", + "--secure-port=8443", + "--runtime-config=testdata.datasource.grafana.app/v0alpha1=true"] + }, + { + "name": "Run API Server (query-localhost)", + "type": "go", + "request": "launch", + "mode": "auto", + "program": "${workspaceFolder}/pkg/cmd/grafana/", + "env": {}, + "cwd": "${workspaceFolder}", + "args": ["apiserver", + "--secure-port=8443", + "--runtime-config=query.grafana.app/v0alpha1=true", + "--grafana.authn.signing-keys-url=http://localhost:3000/api/signing-keys/keys", + "--hg-url=http://localhost:3000", + "--hg-key=$HGAPIKEY"] + }, { "name": "Attach to Chrome", "port": 9222, diff --git a/.yarn/cache/tether-drop-https-3382d2649f-a10a7337d5.zip b/.yarn/cache/tether-drop-https-3382d2649f-a10a7337d5.zip deleted file mode 100644 index 1602b2e6742fa..0000000000000 Binary files a/.yarn/cache/tether-drop-https-3382d2649f-a10a7337d5.zip and /dev/null differ diff --git a/.yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs b/.yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs deleted file mode 100644 index f55248f90a0e3..0000000000000 --- a/.yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs +++ /dev/null @@ -1,546 +0,0 @@ -/* eslint-disable */ -//prettier-ignore -module.exports = { -name: "@yarnpkg/plugin-interactive-tools", -factory: function (require) { -var plugin=(()=>{var ZP=Object.create,Pg=Object.defineProperty,$P=Object.defineProperties,eI=Object.getOwnPropertyDescriptor,tI=Object.getOwnPropertyDescriptors,nI=Object.getOwnPropertyNames,L_=Object.getOwnPropertySymbols,rI=Object.getPrototypeOf,nD=Object.prototype.hasOwnProperty,lS=Object.prototype.propertyIsEnumerable;var sS=(i,o,a)=>o in i?Pg(i,o,{enumerable:!0,configurable:!0,writable:!0,value:a}):i[o]=a,Ht=(i,o)=>{for(var a in o||(o={}))nD.call(o,a)&&sS(i,a,o[a]);if(L_)for(var a of L_(o))lS.call(o,a)&&sS(i,a,o[a]);return i},Zr=(i,o)=>$P(i,tI(o)),iI=i=>Pg(i,"__esModule",{value:!0});var wl=(i,o)=>{var a={};for(var c in i)nD.call(i,c)&&o.indexOf(c)<0&&(a[c]=i[c]);if(i!=null&&L_)for(var c of L_(i))o.indexOf(c)<0&&lS.call(i,c)&&(a[c]=i[c]);return a};var Ke=(i,o)=>()=>(o||i((o={exports:{}}).exports,o),o.exports),uI=(i,o)=>{for(var a in o)Pg(i,a,{get:o[a],enumerable:!0})},oI=(i,o,a)=>{if(o&&typeof o=="object"||typeof o=="function")for(let c of nI(o))!nD.call(i,c)&&c!=="default"&&Pg(i,c,{get:()=>o[c],enumerable:!(a=eI(o,c))||a.enumerable});return i},ou=i=>oI(iI(Pg(i!=null?ZP(rI(i)):{},"default",i&&i.__esModule&&"default"in i?{get:()=>i.default,enumerable:!0}:{value:i,enumerable:!0})),i);var Ig=Ke((mW,aS)=>{"use strict";var fS=Object.getOwnPropertySymbols,lI=Object.prototype.hasOwnProperty,sI=Object.prototype.propertyIsEnumerable;function aI(i){if(i==null)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(i)}function fI(){try{if(!Object.assign)return!1;var i=new String("abc");if(i[5]="de",Object.getOwnPropertyNames(i)[0]==="5")return!1;for(var o={},a=0;a<10;a++)o["_"+String.fromCharCode(a)]=a;var c=Object.getOwnPropertyNames(o).map(function(t){return o[t]});if(c.join("")!=="0123456789")return!1;var _={};return"abcdefghijklmnopqrst".split("").forEach(function(t){_[t]=t}),Object.keys(Object.assign({},_)).join("")==="abcdefghijklmnopqrst"}catch(t){return!1}}aS.exports=fI()?Object.assign:function(i,o){for(var a,c=aI(i),_,t=1;t{"use strict";var rD=Ig(),$f=typeof Symbol=="function"&&Symbol.for,bg=$f?Symbol.for("react.element"):60103,cI=$f?Symbol.for("react.portal"):60106,dI=$f?Symbol.for("react.fragment"):60107,pI=$f?Symbol.for("react.strict_mode"):60108,hI=$f?Symbol.for("react.profiler"):60114,vI=$f?Symbol.for("react.provider"):60109,mI=$f?Symbol.for("react.context"):60110,gI=$f?Symbol.for("react.forward_ref"):60112,yI=$f?Symbol.for("react.suspense"):60113,_I=$f?Symbol.for("react.memo"):60115,EI=$f?Symbol.for("react.lazy"):60116,cS=typeof Symbol=="function"&&Symbol.iterator;function Bg(i){for(var o="https://reactjs.org/docs/error-decoder.html?invariant="+i,a=1;aN_.length&&N_.push(i)}function sD(i,o,a,c){var _=typeof i;(_==="undefined"||_==="boolean")&&(i=null);var t=!1;if(i===null)t=!0;else switch(_){case"string":case"number":t=!0;break;case"object":switch(i.$$typeof){case bg:case cI:t=!0}}if(t)return a(c,i,o===""?"."+aD(i,0):o),1;if(t=0,o=o===""?".":o+":",Array.isArray(i))for(var O=0;O{"use strict";var xI="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED";SS.exports=xI});var pD=Ke((_W,CS)=>{"use strict";var dD=function(){};process.env.NODE_ENV!=="production"&&(xS=TS(),F_={},AS=Function.call.bind(Object.prototype.hasOwnProperty),dD=function(i){var o="Warning: "+i;typeof console!="undefined"&&console.error(o);try{throw new Error(o)}catch(a){}});var xS,F_,AS;function RS(i,o,a,c,_){if(process.env.NODE_ENV!=="production"){for(var t in i)if(AS(i,t)){var O;try{if(typeof i[t]!="function"){var N=Error((c||"React class")+": "+a+" type `"+t+"` is invalid; it must be a function, usually from the `prop-types` package, but received `"+typeof i[t]+"`.");throw N.name="Invariant Violation",N}O=i[t](o,t,c,a,null,xS)}catch(T){O=T}if(O&&!(O instanceof Error)&&dD((c||"React class")+": type specification of "+a+" `"+t+"` is invalid; the type checker function must return `null` or an `Error` but returned a "+typeof O+". You may have forgotten to pass an argument to the type checker creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and shape all require an argument)."),O instanceof Error&&!(O.message in F_)){F_[O.message]=!0;var M=_?_():"";dD("Failed "+a+" type: "+O.message+(M!=null?M:""))}}}}RS.resetWarningCache=function(){process.env.NODE_ENV!=="production"&&(F_={})};CS.exports=RS});var OS=Ke(Eu=>{"use strict";process.env.NODE_ENV!=="production"&&function(){"use strict";var i=Ig(),o=pD(),a="16.13.1",c=typeof Symbol=="function"&&Symbol.for,_=c?Symbol.for("react.element"):60103,t=c?Symbol.for("react.portal"):60106,O=c?Symbol.for("react.fragment"):60107,N=c?Symbol.for("react.strict_mode"):60108,M=c?Symbol.for("react.profiler"):60114,T=c?Symbol.for("react.provider"):60109,B=c?Symbol.for("react.context"):60110,H=c?Symbol.for("react.concurrent_mode"):60111,q=c?Symbol.for("react.forward_ref"):60112,ne=c?Symbol.for("react.suspense"):60113,m=c?Symbol.for("react.suspense_list"):60120,he=c?Symbol.for("react.memo"):60115,De=c?Symbol.for("react.lazy"):60116,se=c?Symbol.for("react.block"):60121,fe=c?Symbol.for("react.fundamental"):60117,_e=c?Symbol.for("react.responder"):60118,ce=c?Symbol.for("react.scope"):60119,me=typeof Symbol=="function"&&Symbol.iterator,ie="@@iterator";function Oe(Q){if(Q===null||typeof Q!="object")return null;var we=me&&Q[me]||Q[ie];return typeof we=="function"?we:null}var Ue={current:null},je={suspense:null},at={current:null},Dt=/^(.*)[\\\/]/;function Qe(Q,we,Ne){var Le="";if(we){var pt=we.fileName,Yn=pt.replace(Dt,"");if(/^index\./.test(Yn)){var Cn=pt.match(Dt);if(Cn){var cr=Cn[1];if(cr){var Si=cr.replace(Dt,"");Yn=Si+"/"+Yn}}}Le=" (at "+Yn+":"+we.lineNumber+")"}else Ne&&(Le=" (created by "+Ne+")");return` - in `+(Q||"Unknown")+Le}var ut=1;function Ve(Q){return Q._status===ut?Q._result:null}function It(Q,we,Ne){var Le=we.displayName||we.name||"";return Q.displayName||(Le!==""?Ne+"("+Le+")":Ne)}function Xt(Q){if(Q==null)return null;if(typeof Q.tag=="number"&&dt("Received an unexpected object in getComponentName(). This is likely a bug in React. Please file an issue."),typeof Q=="function")return Q.displayName||Q.name||null;if(typeof Q=="string")return Q;switch(Q){case O:return"Fragment";case t:return"Portal";case M:return"Profiler";case N:return"StrictMode";case ne:return"Suspense";case m:return"SuspenseList"}if(typeof Q=="object")switch(Q.$$typeof){case B:return"Context.Consumer";case T:return"Context.Provider";case q:return It(Q,Q.render,"ForwardRef");case he:return Xt(Q.type);case se:return Xt(Q.render);case De:{var we=Q,Ne=Ve(we);if(Ne)return Xt(Ne);break}}return null}var rt={},X=null;function de(Q){X=Q}rt.getCurrentStack=null,rt.getStackAddendum=function(){var Q="";if(X){var we=Xt(X.type),Ne=X._owner;Q+=Qe(we,X._source,Ne&&Xt(Ne.type))}var Le=rt.getCurrentStack;return Le&&(Q+=Le()||""),Q};var Ce={current:!1},oe={ReactCurrentDispatcher:Ue,ReactCurrentBatchConfig:je,ReactCurrentOwner:at,IsSomeRendererActing:Ce,assign:i};i(oe,{ReactDebugCurrentFrame:rt,ReactComponentTreeHook:{}});function He(Q){{for(var we=arguments.length,Ne=new Array(we>1?we-1:0),Le=1;Le1?we-1:0),Le=1;Le0&&typeof Ne[Ne.length-1]=="string"&&Ne[Ne.length-1].indexOf(` - in`)===0;if(!Le){var pt=oe.ReactDebugCurrentFrame,Yn=pt.getStackAddendum();Yn!==""&&(we+="%s",Ne=Ne.concat([Yn]))}var Cn=Ne.map(function(Mu){return""+Mu});Cn.unshift("Warning: "+we),Function.prototype.apply.call(console[Q],console,Cn);try{var cr=0,Si="Warning: "+we.replace(/%s/g,function(){return Ne[cr++]});throw new Error(Si)}catch(Mu){}}}var nn={};function an(Q,we){{var Ne=Q.constructor,Le=Ne&&(Ne.displayName||Ne.name)||"ReactClass",pt=Le+"."+we;if(nn[pt])return;dt("Can't call %s on a component that is not yet mounted. This is a no-op, but it might indicate a bug in your application. Instead, assign to `this.state` directly or define a `state = {};` class property with the desired state in the %s component.",we,Le),nn[pt]=!0}}var Mn={isMounted:function(Q){return!1},enqueueForceUpdate:function(Q,we,Ne){an(Q,"forceUpdate")},enqueueReplaceState:function(Q,we,Ne,Le){an(Q,"replaceState")},enqueueSetState:function(Q,we,Ne,Le){an(Q,"setState")}},lr={};Object.freeze(lr);function ln(Q,we,Ne){this.props=Q,this.context=we,this.refs=lr,this.updater=Ne||Mn}ln.prototype.isReactComponent={},ln.prototype.setState=function(Q,we){if(!(typeof Q=="object"||typeof Q=="function"||Q==null))throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,Q,we,"setState")},ln.prototype.forceUpdate=function(Q){this.updater.enqueueForceUpdate(this,Q,"forceUpdate")};{var Vt={isMounted:["isMounted","Instead, make sure to clean up subscriptions and pending requests in componentWillUnmount to prevent memory leaks."],replaceState:["replaceState","Refactor your code to use setState instead (see https://github.com/facebook/react/issues/3236)."]},Dr=function(Q,we){Object.defineProperty(ln.prototype,Q,{get:function(){He("%s(...) is deprecated in plain JavaScript React classes. %s",we[0],we[1])}})};for(var w in Vt)Vt.hasOwnProperty(w)&&Dr(w,Vt[w])}function jt(){}jt.prototype=ln.prototype;function Xn(Q,we,Ne){this.props=Q,this.context=we,this.refs=lr,this.updater=Ne||Mn}var vr=Xn.prototype=new jt;vr.constructor=Xn,i(vr,ln.prototype),vr.isPureReactComponent=!0;function jr(){var Q={current:null};return Object.seal(Q),Q}var fr=Object.prototype.hasOwnProperty,zr={key:!0,ref:!0,__self:!0,__source:!0},Qt,wu,d0;d0={};function Ro(Q){if(fr.call(Q,"ref")){var we=Object.getOwnPropertyDescriptor(Q,"ref").get;if(we&&we.isReactWarning)return!1}return Q.ref!==void 0}function Jo(Q){if(fr.call(Q,"key")){var we=Object.getOwnPropertyDescriptor(Q,"key").get;if(we&&we.isReactWarning)return!1}return Q.key!==void 0}function Ps(Q,we){var Ne=function(){Qt||(Qt=!0,dt("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://fb.me/react-special-props)",we))};Ne.isReactWarning=!0,Object.defineProperty(Q,"key",{get:Ne,configurable:!0})}function Zo(Q,we){var Ne=function(){wu||(wu=!0,dt("%s: `ref` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://fb.me/react-special-props)",we))};Ne.isReactWarning=!0,Object.defineProperty(Q,"ref",{get:Ne,configurable:!0})}function $o(Q){if(typeof Q.ref=="string"&&at.current&&Q.__self&&at.current.stateNode!==Q.__self){var we=Xt(at.current.type);d0[we]||(dt('Component "%s" contains the string ref "%s". Support for string refs will be removed in a future major release. This case cannot be automatically converted to an arrow function. We ask you to manually fix this case by using useRef() or createRef() instead. Learn more about using refs safely here: https://fb.me/react-strict-mode-string-ref',Xt(at.current.type),Q.ref),d0[we]=!0)}}var qt=function(Q,we,Ne,Le,pt,Yn,Cn){var cr={$$typeof:_,type:Q,key:we,ref:Ne,props:Cn,_owner:Yn};return cr._store={},Object.defineProperty(cr._store,"validated",{configurable:!1,enumerable:!1,writable:!0,value:!1}),Object.defineProperty(cr,"_self",{configurable:!1,enumerable:!1,writable:!1,value:Le}),Object.defineProperty(cr,"_source",{configurable:!1,enumerable:!1,writable:!1,value:pt}),Object.freeze&&(Object.freeze(cr.props),Object.freeze(cr)),cr};function Ai(Q,we,Ne){var Le,pt={},Yn=null,Cn=null,cr=null,Si=null;if(we!=null){Ro(we)&&(Cn=we.ref,$o(we)),Jo(we)&&(Yn=""+we.key),cr=we.__self===void 0?null:we.__self,Si=we.__source===void 0?null:we.__source;for(Le in we)fr.call(we,Le)&&!zr.hasOwnProperty(Le)&&(pt[Le]=we[Le])}var Mu=arguments.length-2;if(Mu===1)pt.children=Ne;else if(Mu>1){for(var zu=Array(Mu),Hu=0;Hu1){for(var Su=Array(Hu),Ti=0;Ti is not supported and will be removed in a future major release. Did you mean to render instead?")),Ne.Provider},set:function(Cn){Ne.Provider=Cn}},_currentValue:{get:function(){return Ne._currentValue},set:function(Cn){Ne._currentValue=Cn}},_currentValue2:{get:function(){return Ne._currentValue2},set:function(Cn){Ne._currentValue2=Cn}},_threadCount:{get:function(){return Ne._threadCount},set:function(Cn){Ne._threadCount=Cn}},Consumer:{get:function(){return Le||(Le=!0,dt("Rendering is not supported and will be removed in a future major release. Did you mean to render instead?")),Ne.Consumer}}}),Ne.Consumer=Yn}return Ne._currentRenderer=null,Ne._currentRenderer2=null,Ne}function Wt(Q){var we={$$typeof:De,_ctor:Q,_status:-1,_result:null};{var Ne,Le;Object.defineProperties(we,{defaultProps:{configurable:!0,get:function(){return Ne},set:function(pt){dt("React.lazy(...): It is not supported to assign `defaultProps` to a lazy component import. Either specify them where the component is defined, or create a wrapping component around it."),Ne=pt,Object.defineProperty(we,"defaultProps",{enumerable:!0})}},propTypes:{configurable:!0,get:function(){return Le},set:function(pt){dt("React.lazy(...): It is not supported to assign `propTypes` to a lazy component import. Either specify them where the component is defined, or create a wrapping component around it."),Le=pt,Object.defineProperty(we,"propTypes",{enumerable:!0})}}})}return we}function Ru(Q){return Q!=null&&Q.$$typeof===he?dt("forwardRef requires a render function but received a `memo` component. Instead of forwardRef(memo(...)), use memo(forwardRef(...))."):typeof Q!="function"?dt("forwardRef requires a render function but was given %s.",Q===null?"null":typeof Q):Q.length!==0&&Q.length!==2&&dt("forwardRef render functions accept exactly two parameters: props and ref. %s",Q.length===1?"Did you forget to use the ref parameter?":"Any additional parameter will be undefined."),Q!=null&&(Q.defaultProps!=null||Q.propTypes!=null)&&dt("forwardRef render functions do not support propTypes or defaultProps. Did you accidentally pass a React component?"),{$$typeof:q,render:Q}}function eu(Q){return typeof Q=="string"||typeof Q=="function"||Q===O||Q===H||Q===M||Q===N||Q===ne||Q===m||typeof Q=="object"&&Q!==null&&(Q.$$typeof===De||Q.$$typeof===he||Q.$$typeof===T||Q.$$typeof===B||Q.$$typeof===q||Q.$$typeof===fe||Q.$$typeof===_e||Q.$$typeof===ce||Q.$$typeof===se)}function Q0(Q,we){return eu(Q)||dt("memo: The first argument must be a component. Instead received: %s",Q===null?"null":typeof Q),{$$typeof:he,type:Q,compare:we===void 0?null:we}}function Yi(){var Q=Ue.current;if(Q===null)throw Error(`Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons: -1. You might have mismatching versions of React and the renderer (such as React DOM) -2. You might be breaking the Rules of Hooks -3. You might have more than one copy of React in the same app -See https://fb.me/react-invalid-hook-call for tips about how to debug and fix this problem.`);return Q}function Ql(Q,we){var Ne=Yi();if(we!==void 0&&dt("useContext() second argument is reserved for future use in React. Passing it is not supported. You passed: %s.%s",we,typeof we=="number"&&Array.isArray(arguments[2])?` - -Did you call array.map(useContext)? Calling Hooks inside a loop is not supported. Learn more at https://fb.me/rules-of-hooks`:""),Q._context!==void 0){var Le=Q._context;Le.Consumer===Q?dt("Calling useContext(Context.Consumer) is not supported, may cause bugs, and will be removed in a future major release. Did you mean to call useContext(Context) instead?"):Le.Provider===Q&&dt("Calling useContext(Context.Provider) is not supported. Did you mean to call useContext(Context) instead?")}return Ne.useContext(Q,we)}function ko(Q){var we=Yi();return we.useState(Q)}function ai(Q,we,Ne){var Le=Yi();return Le.useReducer(Q,we,Ne)}function ao(Q){var we=Yi();return we.useRef(Q)}function Jl(Q,we){var Ne=Yi();return Ne.useEffect(Q,we)}function Lo(Q,we){var Ne=Yi();return Ne.useLayoutEffect(Q,we)}function bs(Q,we){var Ne=Yi();return Ne.useCallback(Q,we)}function $n(Q,we){var Ne=Yi();return Ne.useMemo(Q,we)}function tl(Q,we,Ne){var Le=Yi();return Le.useImperativeHandle(Q,we,Ne)}function fo(Q,we){{var Ne=Yi();return Ne.useDebugValue(Q,we)}}var I0;I0=!1;function Sl(){if(at.current){var Q=Xt(at.current.type);if(Q)return` - -Check the render method of \``+Q+"`."}return""}function No(Q){if(Q!==void 0){var we=Q.fileName.replace(/^.*[\\\/]/,""),Ne=Q.lineNumber;return` - -Check your code at `+we+":"+Ne+"."}return""}function wt(Q){return Q!=null?No(Q.__source):""}var bt={};function Hn(Q){var we=Sl();if(!we){var Ne=typeof Q=="string"?Q:Q.displayName||Q.name;Ne&&(we=` - -Check the top-level render call using <`+Ne+">.")}return we}function qr(Q,we){if(!(!Q._store||Q._store.validated||Q.key!=null)){Q._store.validated=!0;var Ne=Hn(we);if(!bt[Ne]){bt[Ne]=!0;var Le="";Q&&Q._owner&&Q._owner!==at.current&&(Le=" It was passed a child from "+Xt(Q._owner.type)+"."),de(Q),dt('Each child in a list should have a unique "key" prop.%s%s See https://fb.me/react-warning-keys for more information.',Ne,Le),de(null)}}}function Ki(Q,we){if(typeof Q=="object"){if(Array.isArray(Q))for(var Ne=0;Ne",pt=" Did you accidentally export a JSX literal instead of a component?"):Cn=typeof Q,dt("React.createElement: type is invalid -- expected a string (for built-in components) or a class/function (for composite components) but got: %s.%s",Cn,pt)}var cr=Ai.apply(this,arguments);if(cr==null)return cr;if(Le)for(var Si=2;Si{"use strict";process.env.NODE_ENV==="production"?hD.exports=wS():hD.exports=OS()});var MS=Ke((Wv,Ug)=>{(function(){var i,o="4.17.21",a=200,c="Unsupported core-js use. Try https://npms.io/search?q=ponyfill.",_="Expected a function",t="Invalid `variable` option passed into `_.template`",O="__lodash_hash_undefined__",N=500,M="__lodash_placeholder__",T=1,B=2,H=4,q=1,ne=2,m=1,he=2,De=4,se=8,fe=16,_e=32,ce=64,me=128,ie=256,Oe=512,Ue=30,je="...",at=800,Dt=16,Qe=1,ut=2,Ve=3,It=1/0,Xt=9007199254740991,rt=17976931348623157e292,X=0/0,de=4294967295,Ce=de-1,oe=de>>>1,He=[["ary",me],["bind",m],["bindKey",he],["curry",se],["curryRight",fe],["flip",Oe],["partial",_e],["partialRight",ce],["rearg",ie]],dt="[object Arguments]",At="[object Array]",nn="[object AsyncFunction]",an="[object Boolean]",Mn="[object Date]",lr="[object DOMException]",ln="[object Error]",Vt="[object Function]",Dr="[object GeneratorFunction]",w="[object Map]",jt="[object Number]",Xn="[object Null]",vr="[object Object]",jr="[object Promise]",fr="[object Proxy]",zr="[object RegExp]",Qt="[object Set]",wu="[object String]",d0="[object Symbol]",Ro="[object Undefined]",Jo="[object WeakMap]",Ps="[object WeakSet]",Zo="[object ArrayBuffer]",$o="[object DataView]",qt="[object Float32Array]",Ai="[object Float64Array]",su="[object Int8Array]",mi="[object Int16Array]",wr="[object Int32Array]",el="[object Uint8Array]",Y0="[object Uint8ClampedArray]",Uu="[object Uint16Array]",K0="[object Uint32Array]",Xr=/\b__p \+= '';/g,Oo=/\b(__p \+=) '' \+/g,Mo=/(__e\(.*?\)|\b__t\)) \+\n'';/g,F0=/&(?:amp|lt|gt|quot|#39);/g,au=/[&<>"']/g,Li=RegExp(F0.source),Is=RegExp(au.source),Xl=/<%-([\s\S]+?)%>/g,P0=/<%([\s\S]+?)%>/g,p0=/<%=([\s\S]+?)%>/g,Hr=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Ri=/^\w*$/,X0=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,gi=/[\\^$.*+?()[\]{}|]/g,en=RegExp(gi.source),bn=/^\s+/,Oi=/\s/,yi=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,Wt=/\{\n\/\* \[wrapped with (.+)\] \*/,Ru=/,? & /,eu=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,Q0=/[()=,{}\[\]\/\s]/,Yi=/\\(\\)?/g,Ql=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,ko=/\w*$/,ai=/^[-+]0x[0-9a-f]+$/i,ao=/^0b[01]+$/i,Jl=/^\[object .+?Constructor\]$/,Lo=/^0o[0-7]+$/i,bs=/^(?:0|[1-9]\d*)$/,$n=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,tl=/($^)/,fo=/['\n\r\u2028\u2029\\]/g,I0="\\ud800-\\udfff",Sl="\\u0300-\\u036f",No="\\ufe20-\\ufe2f",wt="\\u20d0-\\u20ff",bt=Sl+No+wt,Hn="\\u2700-\\u27bf",qr="a-z\\xdf-\\xf6\\xf8-\\xff",Ki="\\xac\\xb1\\xd7\\xf7",Qr="\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf",Ou="\\u2000-\\u206f",h0=" \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",Ni="A-Z\\xc0-\\xd6\\xd8-\\xde",v0="\\ufe0e\\ufe0f",vs=Ki+Qr+Ou+h0,Tt="['\u2019]",co="["+I0+"]",nl="["+vs+"]",Zl="["+bt+"]",ju="\\d+",ms="["+Hn+"]",b0="["+qr+"]",Q="[^"+I0+vs+ju+Hn+qr+Ni+"]",we="\\ud83c[\\udffb-\\udfff]",Ne="(?:"+Zl+"|"+we+")",Le="[^"+I0+"]",pt="(?:\\ud83c[\\udde6-\\uddff]){2}",Yn="[\\ud800-\\udbff][\\udc00-\\udfff]",Cn="["+Ni+"]",cr="\\u200d",Si="(?:"+b0+"|"+Q+")",Mu="(?:"+Cn+"|"+Q+")",zu="(?:"+Tt+"(?:d|ll|m|re|s|t|ve))?",Hu="(?:"+Tt+"(?:D|LL|M|RE|S|T|VE))?",Su=Ne+"?",Ti="["+v0+"]?",Fo="(?:"+cr+"(?:"+[Le,pt,Yn].join("|")+")"+Ti+Su+")*",ku="\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",po="\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])",qu=Ti+Su+Fo,Ia="(?:"+[ms,pt,Yn].join("|")+")"+qu,m0="(?:"+[Le+Zl+"?",Zl,pt,Yn,co].join("|")+")",ua=RegExp(Tt,"g"),J0=RegExp(Zl,"g"),oa=RegExp(we+"(?="+we+")|"+m0+qu,"g"),ba=RegExp([Cn+"?"+b0+"+"+zu+"(?="+[nl,Cn,"$"].join("|")+")",Mu+"+"+Hu+"(?="+[nl,Cn+Si,"$"].join("|")+")",Cn+"?"+Si+"+"+zu,Cn+"+"+Hu,po,ku,ju,Ia].join("|"),"g"),gs=RegExp("["+cr+I0+bt+v0+"]"),S0=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,Qn=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],fc=-1,fi={};fi[qt]=fi[Ai]=fi[su]=fi[mi]=fi[wr]=fi[el]=fi[Y0]=fi[Uu]=fi[K0]=!0,fi[dt]=fi[At]=fi[Zo]=fi[an]=fi[$o]=fi[Mn]=fi[ln]=fi[Vt]=fi[w]=fi[jt]=fi[vr]=fi[zr]=fi[Qt]=fi[wu]=fi[Jo]=!1;var $r={};$r[dt]=$r[At]=$r[Zo]=$r[$o]=$r[an]=$r[Mn]=$r[qt]=$r[Ai]=$r[su]=$r[mi]=$r[wr]=$r[w]=$r[jt]=$r[vr]=$r[zr]=$r[Qt]=$r[wu]=$r[d0]=$r[el]=$r[Y0]=$r[Uu]=$r[K0]=!0,$r[ln]=$r[Vt]=$r[Jo]=!1;var $l={\u00C0:"A",\u00C1:"A",\u00C2:"A",\u00C3:"A",\u00C4:"A",\u00C5:"A",\u00E0:"a",\u00E1:"a",\u00E2:"a",\u00E3:"a",\u00E4:"a",\u00E5:"a",\u00C7:"C",\u00E7:"c",\u00D0:"D",\u00F0:"d",\u00C8:"E",\u00C9:"E",\u00CA:"E",\u00CB:"E",\u00E8:"e",\u00E9:"e",\u00EA:"e",\u00EB:"e",\u00CC:"I",\u00CD:"I",\u00CE:"I",\u00CF:"I",\u00EC:"i",\u00ED:"i",\u00EE:"i",\u00EF:"i",\u00D1:"N",\u00F1:"n",\u00D2:"O",\u00D3:"O",\u00D4:"O",\u00D5:"O",\u00D6:"O",\u00D8:"O",\u00F2:"o",\u00F3:"o",\u00F4:"o",\u00F5:"o",\u00F6:"o",\u00F8:"o",\u00D9:"U",\u00DA:"U",\u00DB:"U",\u00DC:"U",\u00F9:"u",\u00FA:"u",\u00FB:"u",\u00FC:"u",\u00DD:"Y",\u00FD:"y",\u00FF:"y",\u00C6:"Ae",\u00E6:"ae",\u00DE:"Th",\u00FE:"th",\u00DF:"ss",\u0100:"A",\u0102:"A",\u0104:"A",\u0101:"a",\u0103:"a",\u0105:"a",\u0106:"C",\u0108:"C",\u010A:"C",\u010C:"C",\u0107:"c",\u0109:"c",\u010B:"c",\u010D:"c",\u010E:"D",\u0110:"D",\u010F:"d",\u0111:"d",\u0112:"E",\u0114:"E",\u0116:"E",\u0118:"E",\u011A:"E",\u0113:"e",\u0115:"e",\u0117:"e",\u0119:"e",\u011B:"e",\u011C:"G",\u011E:"G",\u0120:"G",\u0122:"G",\u011D:"g",\u011F:"g",\u0121:"g",\u0123:"g",\u0124:"H",\u0126:"H",\u0125:"h",\u0127:"h",\u0128:"I",\u012A:"I",\u012C:"I",\u012E:"I",\u0130:"I",\u0129:"i",\u012B:"i",\u012D:"i",\u012F:"i",\u0131:"i",\u0134:"J",\u0135:"j",\u0136:"K",\u0137:"k",\u0138:"k",\u0139:"L",\u013B:"L",\u013D:"L",\u013F:"L",\u0141:"L",\u013A:"l",\u013C:"l",\u013E:"l",\u0140:"l",\u0142:"l",\u0143:"N",\u0145:"N",\u0147:"N",\u014A:"N",\u0144:"n",\u0146:"n",\u0148:"n",\u014B:"n",\u014C:"O",\u014E:"O",\u0150:"O",\u014D:"o",\u014F:"o",\u0151:"o",\u0154:"R",\u0156:"R",\u0158:"R",\u0155:"r",\u0157:"r",\u0159:"r",\u015A:"S",\u015C:"S",\u015E:"S",\u0160:"S",\u015B:"s",\u015D:"s",\u015F:"s",\u0161:"s",\u0162:"T",\u0164:"T",\u0166:"T",\u0163:"t",\u0165:"t",\u0167:"t",\u0168:"U",\u016A:"U",\u016C:"U",\u016E:"U",\u0170:"U",\u0172:"U",\u0169:"u",\u016B:"u",\u016D:"u",\u016F:"u",\u0171:"u",\u0173:"u",\u0174:"W",\u0175:"w",\u0176:"Y",\u0177:"y",\u0178:"Y",\u0179:"Z",\u017B:"Z",\u017D:"Z",\u017A:"z",\u017C:"z",\u017E:"z",\u0132:"IJ",\u0133:"ij",\u0152:"Oe",\u0153:"oe",\u0149:"'n",\u017F:"s"},la={"&":"&","<":"<",">":">",'"':""","'":"'"},hf={"&":"&","<":"<",">":">",""":'"',"'":"'"},Bs={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},Ba=parseFloat,Us=parseInt,g0=typeof global=="object"&&global&&global.Object===Object&&global,js=typeof self=="object"&&self&&self.Object===Object&&self,ji=g0||js||Function("return this")(),U=typeof Wv=="object"&&Wv&&!Wv.nodeType&&Wv,z=U&&typeof Ug=="object"&&Ug&&!Ug.nodeType&&Ug,G=z&&z.exports===U,$=G&&g0.process,Te=function(){try{var xe=z&&z.require&&z.require("util").types;return xe||$&&$.binding&&$.binding("util")}catch(tt){}}(),ye=Te&&Te.isArrayBuffer,Ae=Te&&Te.isDate,Z=Te&&Te.isMap,ke=Te&&Te.isRegExp,Je=Te&&Te.isSet,vt=Te&&Te.isTypedArray;function ue(xe,tt,Ye){switch(Ye.length){case 0:return xe.call(tt);case 1:return xe.call(tt,Ye[0]);case 2:return xe.call(tt,Ye[0],Ye[1]);case 3:return xe.call(tt,Ye[0],Ye[1],Ye[2])}return xe.apply(tt,Ye)}function qe(xe,tt,Ye,Yt){for(var Kt=-1,pr=xe==null?0:xe.length;++Kt-1}function rn(xe,tt,Ye){for(var Yt=-1,Kt=xe==null?0:xe.length;++Yt-1;);return Ye}function Tl(xe,tt){for(var Ye=xe.length;Ye--&&Et(tt,xe[Ye],0)>-1;);return Ye}function mf(xe,tt){for(var Ye=xe.length,Yt=0;Ye--;)xe[Ye]===tt&&++Yt;return Yt}var Io=Jn($l),ys=Jn(la);function zs(xe){return"\\"+Bs[xe]}function bo(xe,tt){return xe==null?i:xe[tt]}function Bo(xe){return gs.test(xe)}function _s(xe){return S0.test(xe)}function Qu(xe){for(var tt,Ye=[];!(tt=xe.next()).done;)Ye.push(tt.value);return Ye}function Tu(xe){var tt=-1,Ye=Array(xe.size);return xe.forEach(function(Yt,Kt){Ye[++tt]=[Kt,Yt]}),Ye}function Ei(xe,tt){return function(Ye){return xe(tt(Ye))}}function C0(xe,tt){for(var Ye=-1,Yt=xe.length,Kt=0,pr=[];++Ye-1}function ca(p,v){var x=this.__data__,P=ns(x,p);return P<0?(++this.size,x.push([p,v])):x[P][1]=v,this}io.prototype.clear=Ua,io.prototype.delete=Ef,io.prototype.get=cc,io.prototype.has=ws,io.prototype.set=ca;function U0(p){var v=-1,x=p==null?0:p.length;for(this.clear();++v=v?p:v)),p}function j0(p,v,x,P,W,ee){var ve,Ee=v&T,Ie=v&B,_t=v&H;if(x&&(ve=W?x(p,P,W,ee):x(p)),ve!==i)return ve;if(!bu(p))return p;var St=tr(p);if(St){if(ve=xs(p),!Ee)return iu(p,ve)}else{var Rt=Iu(p),on=Rt==Vt||Rt==Dr;if(Zs(p))return mc(p,Ee);if(Rt==vr||Rt==dt||on&&!W){if(ve=Ie||on?{}:Dc(p),!Ee)return Ie?rs(p,ol(ve,p)):o0(p,Df(ve,p))}else{if(!$r[Rt])return W?p:{};ve=Th(p,Rt,Ee)}}ee||(ee=new ul);var kn=ee.get(p);if(kn)return kn;ee.set(p,ve),bd(p)?p.forEach(function(ar){ve.add(j0(ar,v,x,ar,p,ee))}):Dp(p)&&p.forEach(function(ar,ui){ve.set(ui,j0(ar,v,x,ui,p,ee))});var rr=_t?Ie?sr:r1:Ie?dn:L0,br=St?i:rr(p);return nt(br||p,function(ar,ui){br&&(ui=ar,ar=p[ui]),Ts(ve,ui,j0(ar,v,x,ui,p,ee))}),ve}function wf(p){var v=L0(p);return function(x){return Wc(x,p,v)}}function Wc(p,v,x){var P=x.length;if(p==null)return!P;for(p=xn(p);P--;){var W=x[P],ee=v[W],ve=p[W];if(ve===i&&!(W in p)||!ee(ve))return!1}return!0}function pc(p,v,x){if(typeof p!="function")throw new ti(_);return Ja(function(){p.apply(i,x)},v)}function Ol(p,v,x,P){var W=-1,ee=sn,ve=!0,Ee=p.length,Ie=[],_t=v.length;if(!Ee)return Ie;x&&(v=Nt(v,_i(x))),P?(ee=rn,ve=!1):v.length>=a&&(ee=rl,ve=!1,v=new go(v));e:for(;++WW?0:W+x),P=P===i||P>W?W:Mr(P),P<0&&(P+=W),P=x>P?0:Sp(P);x0&&x(Ee)?v>1?qi(Ee,v-1,x,P,W):Dn(W,Ee):P||(W[W.length]=Ee)}return W}var y=yc(),g=yc(!0);function A(p,v){return p&&y(p,v,L0)}function F(p,v){return p&&g(p,v,L0)}function b(p,v){return Pt(v,function(x){return Aa(p[x])})}function J(p,v){v=Vs(v,p);for(var x=0,P=v.length;p!=null&&xv}function kt(p,v){return p!=null&&li.call(p,v)}function xr(p,v){return p!=null&&v in xn(p)}function i0(p,v,x){return p>=Kn(v,x)&&p=120&&St.length>=120)?new go(ve&&St):i}St=p[0];var Rt=-1,on=Ee[0];e:for(;++Rt-1;)Ee!==p&&O0.call(Ee,Ie,1),O0.call(p,Ie,1);return p}function ad(p,v){for(var x=p?v.length:0,P=x-1;x--;){var W=v[x];if(x==P||W!==ee){var ee=W;Do(W)?O0.call(p,W,1):R2(p,W)}}return p}function fd(p,v){return p+Ds(E0()*(v-p+1))}function C2(p,v,x,P){for(var W=-1,ee=ni($u((v-p)/(x||1)),0),ve=Ye(ee);ee--;)ve[P?ee:++W]=p,p+=x;return ve}function Yc(p,v){var x="";if(!p||v<1||v>Xt)return x;do v%2&&(x+=p),v=Ds(v/2),v&&(p+=p);while(v);return x}function Ir(p,v){return l1(P2(p,v,s0),p+"")}function cd(p){return Ha(Nc(p))}function dd(p,v){var x=Nc(p);return Sc(x,r0(v,0,x.length))}function Ya(p,v,x,P){if(!bu(p))return p;v=Vs(v,p);for(var W=-1,ee=v.length,ve=ee-1,Ee=p;Ee!=null&&++WW?0:W+v),x=x>W?W:x,x<0&&(x+=W),W=v>x?0:x-v>>>0,v>>>=0;for(var ee=Ye(W);++P>>1,ve=p[ee];ve!==null&&!Bl(ve)&&(x?ve<=v:ve=a){var _t=v?null:fm(p);if(_t)return $0(_t);ve=!1,W=rl,Ie=new go}else Ie=v?[]:Ee;e:for(;++P=P?p:sl(p,v,x)}var Zc=Es||function(p){return ji.clearTimeout(p)};function mc(p,v){if(v)return p.slice();var x=p.length,P=Hi?Hi(x):new p.constructor(x);return p.copy(P),P}function gc(p){var v=new p.constructor(p.byteLength);return new R0(v).set(new R0(p)),v}function hd(p,v){var x=v?gc(p.buffer):p.buffer;return new p.constructor(x,p.byteOffset,p.byteLength)}function Eh(p){var v=new p.constructor(p.source,ko.exec(p));return v.lastIndex=p.lastIndex,v}function Cf(p){return Rr?xn(Rr.call(p)):{}}function $c(p,v){var x=v?gc(p.buffer):p.buffer;return new p.constructor(x,p.byteOffset,p.length)}function Dh(p,v){if(p!==v){var x=p!==i,P=p===null,W=p===p,ee=Bl(p),ve=v!==i,Ee=v===null,Ie=v===v,_t=Bl(v);if(!Ee&&!_t&&!ee&&p>v||ee&&ve&&Ie&&!Ee&&!_t||P&&ve&&Ie||!x&&Ie||!W)return 1;if(!P&&!ee&&!_t&&p=Ee)return Ie;var _t=x[P];return Ie*(_t=="desc"?-1:1)}}return p.index-v.index}function Gs(p,v,x,P){for(var W=-1,ee=p.length,ve=x.length,Ee=-1,Ie=v.length,_t=ni(ee-ve,0),St=Ye(Ie+_t),Rt=!P;++Ee1?x[W-1]:i,ve=W>2?x[2]:i;for(ee=p.length>3&&typeof ee=="function"?(W--,ee):i,ve&&lo(x[0],x[1],ve)&&(ee=W<3?i:ee,W=1),v=xn(v);++P-1?W[ee?v[ve]:ve]:i}}function t1(p){return cl(function(v){var x=v.length,P=x,W=Vr.prototype.thru;for(p&&v.reverse();P--;){var ee=v[P];if(typeof ee!="function")throw new ti(_);if(W&&!ve&&qo(ee)=="wrapper")var ve=new Vr([],!0)}for(P=ve?P:x;++P1&&di.reverse(),St&&IeEe))return!1;var _t=ee.get(p),St=ee.get(v);if(_t&&St)return _t==v&&St==p;var Rt=-1,on=!0,kn=x&ne?new go:i;for(ee.set(p,v),ee.set(v,p);++Rt1?"& ":"")+v[P],v=v.join(x>2?", ":" "),p.replace(yi,`{ -/* [wrapped with `+v+`] */ -`)}function us(p){return tr(p)||pl(p)||!!(vo&&p&&p[vo])}function Do(p,v){var x=typeof p;return v=v==null?Xt:v,!!v&&(x=="number"||x!="symbol"&&bs.test(p))&&p>-1&&p%1==0&&p0){if(++v>=at)return arguments[0]}else v=0;return p.apply(i,arguments)}}function Sc(p,v){var x=-1,P=p.length,W=P-1;for(v=v===i?P:v;++x1?p[v-1]:i;return x=typeof x=="function"?(p.pop(),x):i,Td(p,x)});function zh(p){var v=Y(p);return v.__chain__=!0,v}function Hh(p,v){return v(p),p}function y1(p,v){return v(p)}var $2=cl(function(p){var v=p.length,x=v?p[0]:0,P=this.__wrapped__,W=function(ee){return Wa(ee,p)};return v>1||this.__actions__.length||!(P instanceof ft)||!Do(x)?this.thru(W):(P=P.slice(x,+x+(v?1:0)),P.__actions__.push({func:y1,args:[W],thisArg:i}),new Vr(P,this.__chain__).thru(function(ee){return v&&!ee.length&&ee.push(i),ee}))});function qh(){return zh(this)}function ep(){return new Vr(this.value(),this.__chain__)}function Wh(){this.__values__===i&&(this.__values__=fv(this.value()));var p=this.__index__>=this.__values__.length,v=p?i:this.__values__[this.__index__++];return{done:p,value:v}}function _m(){return this}function Em(p){for(var v,x=this;x instanceof ii;){var P=b2(x);P.__index__=0,P.__values__=i,v?W.__wrapped__=P:v=P;var W=P;x=x.__wrapped__}return W.__wrapped__=p,v}function If(){var p=this.__wrapped__;if(p instanceof ft){var v=p;return this.__actions__.length&&(v=new ft(this)),v=v.reverse(),v.__actions__.push({func:y1,args:[G2],thisArg:i}),new Vr(v,this.__chain__)}return this.thru(G2)}function bf(){return _h(this.__wrapped__,this.__actions__)}var Cd=Ka(function(p,v,x){li.call(p,x)?++p[x]:Gu(p,x,1)});function Dm(p,v,x){var P=tr(p)?Mt:od;return x&&lo(p,v,x)&&(v=i),P(p,Vn(v,3))}function tp(p,v){var x=tr(p)?Pt:Vc;return x(p,Vn(v,3))}var xd=Ll(z2),np=Ll(a1);function Vh(p,v){return qi(_1(p,v),1)}function rp(p,v){return qi(_1(p,v),It)}function Gh(p,v,x){return x=x===i?1:Mr(x),qi(_1(p,v),x)}function Yh(p,v){var x=tr(p)?nt:Cs;return x(p,Vn(v,3))}function ip(p,v){var x=tr(p)?Ct:pa;return x(p,Vn(v,3))}var wm=Ka(function(p,v,x){li.call(p,x)?p[x].push(v):Gu(p,x,[v])});function Sm(p,v,x,P){p=hl(p)?p:Nc(p),x=x&&!P?Mr(x):0;var W=p.length;return x<0&&(x=ni(W+x,0)),S1(p)?x<=W&&p.indexOf(v,x)>-1:!!W&&Et(p,v,x)>-1}var Tm=Ir(function(p,v,x){var P=-1,W=typeof v=="function",ee=hl(p)?Ye(p.length):[];return Cs(p,function(ve){ee[++P]=W?ue(v,ve,x):Ml(ve,v,x)}),ee}),Kh=Ka(function(p,v,x){Gu(p,x,v)});function _1(p,v){var x=tr(p)?Nt:S2;return x(p,Vn(v,3))}function Cm(p,v,x,P){return p==null?[]:(tr(v)||(v=v==null?[]:[v]),x=P?i:x,tr(x)||(x=x==null?[]:[x]),yo(p,v,x))}var up=Ka(function(p,v,x){p[x?0:1].push(v)},function(){return[[],[]]});function op(p,v,x){var P=tr(p)?dr:Sr,W=arguments.length<3;return P(p,Vn(v,4),x,W,Cs)}function xm(p,v,x){var P=tr(p)?er:Sr,W=arguments.length<3;return P(p,Vn(v,4),x,W,pa)}function Am(p,v){var x=tr(p)?Pt:Vc;return x(p,Od(Vn(v,3)))}function Xh(p){var v=tr(p)?Ha:cd;return v(p)}function Rm(p,v,x){(x?lo(p,v,x):v===i)?v=1:v=Mr(v);var P=tr(p)?qa:dd;return P(p,v)}function Om(p){var v=tr(p)?da:ll;return v(p)}function lp(p){if(p==null)return 0;if(hl(p))return S1(p)?tu(p):p.length;var v=Iu(p);return v==w||v==Qt?p.size:Va(p).length}function sp(p,v,x){var P=tr(p)?Cr:gh;return x&&lo(p,v,x)&&(v=i),P(p,Vn(v,3))}var Ca=Ir(function(p,v){if(p==null)return[];var x=v.length;return x>1&&lo(p,v[0],v[1])?v=[]:x>2&&lo(v[0],v[1],v[2])&&(v=[v[0]]),yo(p,qi(v,1),[])}),E1=fa||function(){return ji.Date.now()};function ap(p,v){if(typeof v!="function")throw new ti(_);return p=Mr(p),function(){if(--p<1)return v.apply(this,arguments)}}function Qh(p,v,x){return v=x?i:v,v=p&&v==null?p.length:v,hn(p,me,i,i,i,i,v)}function Ad(p,v){var x;if(typeof v!="function")throw new ti(_);return p=Mr(p),function(){return--p>0&&(x=v.apply(this,arguments)),p<=1&&(v=i),x}}var D1=Ir(function(p,v,x){var P=m;if(x.length){var W=C0(x,yr(D1));P|=_e}return hn(p,P,v,x,W)}),Jh=Ir(function(p,v,x){var P=m|he;if(x.length){var W=C0(x,yr(Jh));P|=_e}return hn(v,P,p,x,W)});function fp(p,v,x){v=x?i:v;var P=hn(p,se,i,i,i,i,i,v);return P.placeholder=fp.placeholder,P}function Zh(p,v,x){v=x?i:v;var P=hn(p,fe,i,i,i,i,i,v);return P.placeholder=Zh.placeholder,P}function cp(p,v,x){var P,W,ee,ve,Ee,Ie,_t=0,St=!1,Rt=!1,on=!0;if(typeof p!="function")throw new ti(_);v=vl(v)||0,bu(x)&&(St=!!x.leading,Rt="maxWait"in x,ee=Rt?ni(vl(x.maxWait)||0,v):ee,on="trailing"in x?!!x.trailing:on);function kn(a0){var Ms=P,Co=W;return P=W=i,_t=a0,ve=p.apply(Co,Ms),ve}function rr(a0){return _t=a0,Ee=Ja(ui,v),St?kn(a0):ve}function br(a0){var Ms=a0-Ie,Co=a0-_t,kv=v-Ms;return Rt?Kn(kv,ee-Co):kv}function ar(a0){var Ms=a0-Ie,Co=a0-_t;return Ie===i||Ms>=v||Ms<0||Rt&&Co>=ee}function ui(){var a0=E1();if(ar(a0))return di(a0);Ee=Ja(ui,br(a0))}function di(a0){return Ee=i,on&&P?kn(a0):(P=W=i,ve)}function zl(){Ee!==i&&Zc(Ee),_t=0,P=Ie=W=Ee=i}function Zi(){return Ee===i?ve:di(E1())}function so(){var a0=E1(),Ms=ar(a0);if(P=arguments,W=this,Ie=a0,Ms){if(Ee===i)return rr(Ie);if(Rt)return Zc(Ee),Ee=Ja(ui,v),kn(Ie)}return Ee===i&&(Ee=Ja(ui,v)),ve}return so.cancel=zl,so.flush=Zi,so}var $h=Ir(function(p,v){return pc(p,1,v)}),ev=Ir(function(p,v,x){return pc(p,vl(v)||0,x)});function dp(p){return hn(p,Oe)}function Rd(p,v){if(typeof p!="function"||v!=null&&typeof v!="function")throw new ti(_);var x=function(){var P=arguments,W=v?v.apply(this,P):P[0],ee=x.cache;if(ee.has(W))return ee.get(W);var ve=p.apply(this,P);return x.cache=ee.set(W,ve)||ee,ve};return x.cache=new(Rd.Cache||U0),x}Rd.Cache=U0;function Od(p){if(typeof p!="function")throw new ti(_);return function(){var v=arguments;switch(v.length){case 0:return!p.call(this);case 1:return!p.call(this,v[0]);case 2:return!p.call(this,v[0],v[1]);case 3:return!p.call(this,v[0],v[1],v[2])}return!p.apply(this,v)}}function H0(p){return Ad(2,p)}var Md=k2(function(p,v){v=v.length==1&&tr(v[0])?Nt(v[0],_i(Vn())):Nt(qi(v,1),_i(Vn()));var x=v.length;return Ir(function(P){for(var W=-1,ee=Kn(P.length,x);++W=v}),pl=u0(function(){return arguments}())?u0:function(p){return Yu(p)&&li.call(p,"callee")&&!B0.call(p,"callee")},tr=Ye.isArray,Js=ye?_i(ye):We;function hl(p){return p!=null&&Pd(p.length)&&!Aa(p)}function l0(p){return Yu(p)&&hl(p)}function rv(p){return p===!0||p===!1||Yu(p)&>(p)==an}var Zs=no||jp,gp=Ae?_i(Ae):ze;function Fm(p){return Yu(p)&&p.nodeType===1&&!xc(p)}function iv(p){if(p==null)return!0;if(hl(p)&&(tr(p)||typeof p=="string"||typeof p.splice=="function"||Zs(p)||Ra(p)||pl(p)))return!p.length;var v=Iu(p);if(v==w||v==Qt)return!p.size;if(Nf(p))return!Va(p).length;for(var x in p)if(li.call(p,x))return!1;return!0}function yp(p,v){return lt(p,v)}function Pm(p,v,x){x=typeof x=="function"?x:i;var P=x?x(p,v):i;return P===i?lt(p,v,i,x):!!P}function _p(p){if(!Yu(p))return!1;var v=gt(p);return v==ln||v==lr||typeof p.message=="string"&&typeof p.name=="string"&&!xc(p)}function Cc(p){return typeof p=="number"&&nu(p)}function Aa(p){if(!bu(p))return!1;var v=gt(p);return v==Vt||v==Dr||v==nn||v==fr}function Ep(p){return typeof p=="number"&&p==Mr(p)}function Pd(p){return typeof p=="number"&&p>-1&&p%1==0&&p<=Xt}function bu(p){var v=typeof p;return p!=null&&(v=="object"||v=="function")}function Yu(p){return p!=null&&typeof p=="object"}var Dp=Z?_i(Z):Wn;function wp(p,v){return p===v||si(p,v,jn(v))}function uv(p,v,x){return x=typeof x=="function"?x:i,si(p,v,jn(v),x)}function Im(p){return ov(p)&&p!=+p}function bm(p){if(Nl(p))throw new Kt(c);return ur(p)}function Bm(p){return p===null}function Id(p){return p==null}function ov(p){return typeof p=="number"||Yu(p)&>(p)==jt}function xc(p){if(!Yu(p)||gt(p)!=vr)return!1;var v=il(p);if(v===null)return!0;var x=li.call(v,"constructor")&&v.constructor;return typeof x=="function"&&x instanceof x&&Fu.call(x)==aa}var w1=ke?_i(ke):ci;function Um(p){return Ep(p)&&p>=-Xt&&p<=Xt}var bd=Je?_i(Je):Qi;function S1(p){return typeof p=="string"||!tr(p)&&Yu(p)&>(p)==wu}function Bl(p){return typeof p=="symbol"||Yu(p)&>(p)==d0}var Ra=vt?_i(vt):Gr;function lv(p){return p===i}function jm(p){return Yu(p)&&Iu(p)==Jo}function sv(p){return Yu(p)&>(p)==Ps}var av=gd(ld),zm=gd(function(p,v){return p<=v});function fv(p){if(!p)return[];if(hl(p))return S1(p)?ei(p):iu(p);if(Pu&&p[Pu])return Qu(p[Pu]());var v=Iu(p),x=v==w?Tu:v==Qt?$0:Nc;return x(p)}function Oa(p){if(!p)return p===0?p:0;if(p=vl(p),p===It||p===-It){var v=p<0?-1:1;return v*rt}return p===p?p:0}function Mr(p){var v=Oa(p),x=v%1;return v===v?x?v-x:v:0}function Sp(p){return p?r0(Mr(p),0,de):0}function vl(p){if(typeof p=="number")return p;if(Bl(p))return X;if(bu(p)){var v=typeof p.valueOf=="function"?p.valueOf():p;p=bu(v)?v+"":v}if(typeof p!="string")return p===0?p:+p;p=Nu(p);var x=ao.test(p);return x||Lo.test(p)?Us(p.slice(2),x?2:8):ai.test(p)?X:+p}function yu(p){return M0(p,dn(p))}function T1(p){return p?r0(Mr(p),-Xt,Xt):p===0?p:0}function Ui(p){return p==null?"":al(p)}var Tp=uo(function(p,v){if(Nf(v)||hl(v)){M0(v,L0(v),p);return}for(var x in v)li.call(v,x)&&Ts(p,x,v[x])}),Bd=uo(function(p,v){M0(v,dn(v),p)}),To=uo(function(p,v,x,P){M0(v,dn(v),p,P)}),Os=uo(function(p,v,x,P){M0(v,L0(v),p,P)}),Bf=cl(Wa);function Ud(p,v){var x=ri(p);return v==null?x:Df(x,v)}var Cp=Ir(function(p,v){p=xn(p);var x=-1,P=v.length,W=P>2?v[2]:i;for(W&&lo(v[0],v[1],W)&&(P=1);++x1),ee}),M0(p,sr(p),x),P&&(x=j0(x,T|B|H,cm));for(var W=v.length;W--;)R2(x,v[W]);return x});function R1(p,v){return tf(p,Od(Vn(v)))}var Rp=cl(function(p,v){return p==null?{}:vh(p,v)});function tf(p,v){if(p==null)return{};var x=Nt(sr(p),function(P){return[P]});return v=Vn(v),mh(p,x,function(P,W){return v(P,W[0])})}function Hm(p,v,x){v=Vs(v,p);var P=-1,W=v.length;for(W||(W=1,p=i);++Pv){var P=p;p=v,v=P}if(x||p%1||v%1){var W=E0();return Kn(p+W*(v-p+Ba("1e-"+((W+"").length-1))),v)}return fd(p,v)}var Gd=xf(function(p,v,x){return v=v.toLowerCase(),p+(x?Wo(v):v)});function Wo(p){return kp(Ui(p).toLowerCase())}function Yd(p){return p=Ui(p),p&&p.replace($n,Io).replace(J0,"")}function Wm(p,v,x){p=Ui(p),v=al(v);var P=p.length;x=x===i?P:r0(Mr(x),0,P);var W=x;return x-=v.length,x>=0&&p.slice(x,W)==v}function k1(p){return p=Ui(p),p&&Is.test(p)?p.replace(au,ys):p}function Vm(p){return p=Ui(p),p&&en.test(p)?p.replace(gi,"\\$&"):p}var Gm=xf(function(p,v,x){return p+(x?"-":"")+v.toLowerCase()}),dv=xf(function(p,v,x){return p+(x?" ":"")+v.toLowerCase()}),Ym=wh("toLowerCase");function pv(p,v,x){p=Ui(p),v=Mr(v);var P=v?tu(p):0;if(!v||P>=v)return p;var W=(v-P)/2;return Ea(Ds(W),x)+p+Ea($u(W),x)}function Km(p,v,x){p=Ui(p),v=Mr(v);var P=v?tu(p):0;return v&&P>>0,x?(p=Ui(p),p&&(typeof v=="string"||v!=null&&!w1(v))&&(v=al(v),!v&&Bo(p))?ma(ei(p),0,x):p.split(v,x)):[]}var Hf=xf(function(p,v,x){return p+(x?" ":"")+kp(v)});function vv(p,v,x){return p=Ui(p),x=x==null?0:r0(Mr(x),0,p.length),v=al(v),p.slice(x,x+v.length)==v}function mv(p,v,x){var P=Y.templateSettings;x&&lo(p,v,x)&&(v=i),p=Ui(p),v=To({},v,P,Rf);var W=To({},v.imports,P.imports,Rf),ee=L0(W),ve=Po(W,ee),Ee,Ie,_t=0,St=v.interpolate||tl,Rt="__p += '",on=gu((v.escape||tl).source+"|"+St.source+"|"+(St===p0?Ql:tl).source+"|"+(v.evaluate||tl).source+"|$","g"),kn="//# sourceURL="+(li.call(v,"sourceURL")?(v.sourceURL+"").replace(/\s/g," "):"lodash.templateSources["+ ++fc+"]")+` -`;p.replace(on,function(ar,ui,di,zl,Zi,so){return di||(di=zl),Rt+=p.slice(_t,so).replace(fo,zs),ui&&(Ee=!0,Rt+=`' + -__e(`+ui+`) + -'`),Zi&&(Ie=!0,Rt+=`'; -`+Zi+`; -__p += '`),di&&(Rt+=`' + -((__t = (`+di+`)) == null ? '' : __t) + -'`),_t=so+ar.length,ar}),Rt+=`'; -`;var rr=li.call(v,"variable")&&v.variable;if(!rr)Rt=`with (obj) { -`+Rt+` -} -`;else if(Q0.test(rr))throw new Kt(t);Rt=(Ie?Rt.replace(Xr,""):Rt).replace(Oo,"$1").replace(Mo,"$1;"),Rt="function("+(rr||"obj")+`) { -`+(rr?"":`obj || (obj = {}); -`)+"var __t, __p = ''"+(Ee?", __e = _.escape":"")+(Ie?`, __j = Array.prototype.join; -function print() { __p += __j.call(arguments, '') } -`:`; -`)+Rt+`return __p -}`;var br=wv(function(){return pr(ee,kn+"return "+Rt).apply(i,ve)});if(br.source=Rt,_p(br))throw br;return br}function gv(p){return Ui(p).toLowerCase()}function Kd(p){return Ui(p).toUpperCase()}function Xd(p,v,x){if(p=Ui(p),p&&(x||v===i))return Nu(p);if(!p||!(v=al(v)))return p;var P=ei(p),W=ei(v),ee=vf(P,W),ve=Tl(P,W)+1;return ma(P,ee,ve).join("")}function Mp(p,v,x){if(p=Ui(p),p&&(x||v===i))return p.slice(0,ho(p)+1);if(!p||!(v=al(v)))return p;var P=ei(p),W=Tl(P,ei(v))+1;return ma(P,0,W).join("")}function yv(p,v,x){if(p=Ui(p),p&&(x||v===i))return p.replace(bn,"");if(!p||!(v=al(v)))return p;var P=ei(p),W=vf(P,ei(v));return ma(P,W).join("")}function Qd(p,v){var x=Ue,P=je;if(bu(v)){var W="separator"in v?v.separator:W;x="length"in v?Mr(v.length):x,P="omission"in v?al(v.omission):P}p=Ui(p);var ee=p.length;if(Bo(p)){var ve=ei(p);ee=ve.length}if(x>=ee)return p;var Ee=x-tu(P);if(Ee<1)return P;var Ie=ve?ma(ve,0,Ee).join(""):p.slice(0,Ee);if(W===i)return Ie+P;if(ve&&(Ee+=Ie.length-Ee),w1(W)){if(p.slice(Ee).search(W)){var _t,St=Ie;for(W.global||(W=gu(W.source,Ui(ko.exec(W))+"g")),W.lastIndex=0;_t=W.exec(St);)var Rt=_t.index;Ie=Ie.slice(0,Rt===i?Ee:Rt)}}else if(p.indexOf(al(W),Ee)!=Ee){var on=Ie.lastIndexOf(W);on>-1&&(Ie=Ie.slice(0,on))}return Ie+P}function _v(p){return p=Ui(p),p&&Li.test(p)?p.replace(F0,Bi):p}var Ev=xf(function(p,v,x){return p+(x?" ":"")+v.toUpperCase()}),kp=wh("toUpperCase");function Dv(p,v,x){return p=Ui(p),v=x?i:v,v===i?_s(p)?yf(p):y0(p):p.match(v)||[]}var wv=Ir(function(p,v){try{return ue(p,i,v)}catch(x){return _p(x)?x:new Kt(x)}}),$m=cl(function(p,v){return nt(v,function(x){x=Fl(x),Gu(p,x,D1(p[x],p))}),p});function Sv(p){var v=p==null?0:p.length,x=Vn();return p=v?Nt(p,function(P){if(typeof P[1]!="function")throw new ti(_);return[x(P[0]),P[1]]}):[],Ir(function(P){for(var W=-1;++WXt)return[];var x=de,P=Kn(p,de);v=Vn(v),p-=de;for(var W=T0(P,v);++x0||v<0)?new ft(x):(p<0?x=x.takeRight(-p):p&&(x=x.drop(p)),v!==i&&(v=Mr(v),x=v<0?x.dropRight(-v):x.take(v-p)),x)},ft.prototype.takeRightWhile=function(p){return this.reverse().takeWhile(p).reverse()},ft.prototype.toArray=function(){return this.take(de)},A(ft.prototype,function(p,v){var x=/^(?:filter|find|map|reject)|While$/.test(v),P=/^(?:head|last)$/.test(v),W=Y[P?"take"+(v=="last"?"Right":""):v],ee=P||/^find/.test(v);!W||(Y.prototype[v]=function(){var ve=this.__wrapped__,Ee=P?[1]:arguments,Ie=ve instanceof ft,_t=Ee[0],St=Ie||tr(ve),Rt=function(ui){var di=W.apply(Y,Dn([ui],Ee));return P&&on?di[0]:di};St&&x&&typeof _t=="function"&&_t.length!=1&&(Ie=St=!1);var on=this.__chain__,kn=!!this.__actions__.length,rr=ee&&!on,br=Ie&&!kn;if(!ee&&St){ve=br?ve:new ft(this);var ar=p.apply(ve,Ee);return ar.__actions__.push({func:y1,args:[Rt],thisArg:i}),new Vr(ar,on)}return rr&&br?p.apply(this,Ee):(ar=this.thru(Rt),rr?P?ar.value()[0]:ar.value():ar)})}),nt(["pop","push","shift","sort","splice","unshift"],function(p){var v=Jr[p],x=/^(?:push|sort|unshift)$/.test(p)?"tap":"thru",P=/^(?:pop|shift)$/.test(p);Y.prototype[p]=function(){var W=arguments;if(P&&!this.__chain__){var ee=this.value();return v.apply(tr(ee)?ee:[],W)}return this[x](function(ve){return v.apply(tr(ve)?ve:[],W)})}}),A(ft.prototype,function(p,v){var x=Y[v];if(x){var P=x.name+"";li.call(On,P)||(On[P]=[]),On[P].push({name:v,func:x})}}),On[ya(i,he).name]=[{name:"wrapper",func:i}],ft.prototype.clone=Di,ft.prototype.reverse=ru,ft.prototype.value=D0,Y.prototype.at=$2,Y.prototype.chain=qh,Y.prototype.commit=ep,Y.prototype.next=Wh,Y.prototype.plant=Em,Y.prototype.reverse=If,Y.prototype.toJSON=Y.prototype.valueOf=Y.prototype.value=bf,Y.prototype.first=Y.prototype.head,Pu&&(Y.prototype[Pu]=_m),Y},to=eo();typeof define=="function"&&typeof define.amd=="object"&&define.amd?(ji._=to,define(function(){return to})):z?((z.exports=to)._=to,U._=to):ji._=to}).call(Wv)});var mD=Ke((wW,vD)=>{"use strict";var Ii=vD.exports;vD.exports.default=Ii;var Du="[",jg="]",Vv="\x07",P_=";",kS=process.env.TERM_PROGRAM==="Apple_Terminal";Ii.cursorTo=(i,o)=>{if(typeof i!="number")throw new TypeError("The `x` argument is required");return typeof o!="number"?Du+(i+1)+"G":Du+(o+1)+";"+(i+1)+"H"};Ii.cursorMove=(i,o)=>{if(typeof i!="number")throw new TypeError("The `x` argument is required");let a="";return i<0?a+=Du+-i+"D":i>0&&(a+=Du+i+"C"),o<0?a+=Du+-o+"A":o>0&&(a+=Du+o+"B"),a};Ii.cursorUp=(i=1)=>Du+i+"A";Ii.cursorDown=(i=1)=>Du+i+"B";Ii.cursorForward=(i=1)=>Du+i+"C";Ii.cursorBackward=(i=1)=>Du+i+"D";Ii.cursorLeft=Du+"G";Ii.cursorSavePosition=kS?"7":Du+"s";Ii.cursorRestorePosition=kS?"8":Du+"u";Ii.cursorGetPosition=Du+"6n";Ii.cursorNextLine=Du+"E";Ii.cursorPrevLine=Du+"F";Ii.cursorHide=Du+"?25l";Ii.cursorShow=Du+"?25h";Ii.eraseLines=i=>{let o="";for(let a=0;a[jg,"8",P_,P_,o,Vv,i,jg,"8",P_,P_,Vv].join("");Ii.image=(i,o={})=>{let a=`${jg}1337;File=inline=1`;return o.width&&(a+=`;width=${o.width}`),o.height&&(a+=`;height=${o.height}`),o.preserveAspectRatio===!1&&(a+=";preserveAspectRatio=0"),a+":"+i.toString("base64")+Vv};Ii.iTerm={setCwd:(i=process.cwd())=>`${jg}50;CurrentDir=${i}${Vv}`,annotation:(i,o={})=>{let a=`${jg}1337;`,c=typeof o.x!="undefined",_=typeof o.y!="undefined";if((c||_)&&!(c&&_&&typeof o.length!="undefined"))throw new Error("`x`, `y` and `length` must be defined when `x` or `y` is defined");return i=i.replace(/\|/g,""),a+=o.isHidden?"AddHiddenAnnotation=":"AddAnnotation=",o.length>0?a+=(c?[i,o.length,o.x,o.y]:[o.length,i]).join("|"):a+=i,a+Vv}}});var NS=Ke((SW,gD)=>{"use strict";var LS=(i,o)=>{for(let a of Reflect.ownKeys(o))Object.defineProperty(i,a,Object.getOwnPropertyDescriptor(o,a));return i};gD.exports=LS;gD.exports.default=LS});var IS=Ke((TW,I_)=>{"use strict";var AI=NS(),b_=new WeakMap,PS=(i,o={})=>{if(typeof i!="function")throw new TypeError("Expected a function");let a,c=!1,_=0,t=i.displayName||i.name||"",O=function(...N){if(b_.set(O,++_),c){if(o.throw===!0)throw new Error(`Function \`${t}\` can only be called once`);return a}return c=!0,a=i.apply(this,N),i=null,a};return AI(O,i),b_.set(O,_),O};I_.exports=PS;I_.exports.default=PS;I_.exports.callCount=i=>{if(!b_.has(i))throw new Error(`The given function \`${i.name}\` is not wrapped by the \`onetime\` package`);return b_.get(i)}});var bS=Ke((CW,B_)=>{B_.exports=["SIGABRT","SIGALRM","SIGHUP","SIGINT","SIGTERM"];process.platform!=="win32"&&B_.exports.push("SIGVTALRM","SIGXCPU","SIGXFSZ","SIGUSR2","SIGTRAP","SIGSYS","SIGQUIT","SIGIOT");process.platform==="linux"&&B_.exports.push("SIGIO","SIGPOLL","SIGPWR","SIGSTKFLT","SIGUNUSED")});var DD=Ke((xW,zg)=>{var RI=require("assert"),Hg=bS(),OI=/^win/i.test(process.platform),U_=require("events");typeof U_!="function"&&(U_=U_.EventEmitter);var Yl;process.__signal_exit_emitter__?Yl=process.__signal_exit_emitter__:(Yl=process.__signal_exit_emitter__=new U_,Yl.count=0,Yl.emitted={});Yl.infinite||(Yl.setMaxListeners(Infinity),Yl.infinite=!0);zg.exports=function(i,o){RI.equal(typeof i,"function","a callback must be provided for exit handler"),qg===!1&&BS();var a="exit";o&&o.alwaysLast&&(a="afterexit");var c=function(){Yl.removeListener(a,i),Yl.listeners("exit").length===0&&Yl.listeners("afterexit").length===0&&yD()};return Yl.on(a,i),c};zg.exports.unload=yD;function yD(){!qg||(qg=!1,Hg.forEach(function(i){try{process.removeListener(i,_D[i])}catch(o){}}),process.emit=ED,process.reallyExit=US,Yl.count-=1)}function Gv(i,o,a){Yl.emitted[i]||(Yl.emitted[i]=!0,Yl.emit(i,o,a))}var _D={};Hg.forEach(function(i){_D[i]=function(){var a=process.listeners(i);a.length===Yl.count&&(yD(),Gv("exit",null,i),Gv("afterexit",null,i),OI&&i==="SIGHUP"&&(i="SIGINT"),process.kill(process.pid,i))}});zg.exports.signals=function(){return Hg};zg.exports.load=BS;var qg=!1;function BS(){qg||(qg=!0,Yl.count+=1,Hg=Hg.filter(function(i){try{return process.on(i,_D[i]),!0}catch(o){return!1}}),process.emit=kI,process.reallyExit=MI)}var US=process.reallyExit;function MI(i){process.exitCode=i||0,Gv("exit",process.exitCode,null),Gv("afterexit",process.exitCode,null),US.call(process,process.exitCode)}var ED=process.emit;function kI(i,o){if(i==="exit"){o!==void 0&&(process.exitCode=o);var a=ED.apply(this,arguments);return Gv("exit",process.exitCode,null),Gv("afterexit",process.exitCode,null),a}else return ED.apply(this,arguments)}});var zS=Ke((AW,jS)=>{"use strict";var LI=IS(),NI=DD();jS.exports=LI(()=>{NI(()=>{process.stderr.write("[?25h")},{alwaysLast:!0})})});var wD=Ke(Yv=>{"use strict";var FI=zS(),j_=!1;Yv.show=(i=process.stderr)=>{!i.isTTY||(j_=!1,i.write("[?25h"))};Yv.hide=(i=process.stderr)=>{!i.isTTY||(FI(),j_=!0,i.write("[?25l"))};Yv.toggle=(i,o)=>{i!==void 0&&(j_=i),j_?Yv.show(o):Yv.hide(o)}});var VS=Ke(Wg=>{"use strict";var HS=Wg&&Wg.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(Wg,"__esModule",{value:!0});var qS=HS(mD()),WS=HS(wD()),PI=(i,{showCursor:o=!1}={})=>{let a=0,c="",_=!1,t=O=>{!o&&!_&&(WS.default.hide(),_=!0);let N=O+` -`;N!==c&&(c=N,i.write(qS.default.eraseLines(a)+N),a=N.split(` -`).length)};return t.clear=()=>{i.write(qS.default.eraseLines(a)),c="",a=0},t.done=()=>{c="",a=0,o||(WS.default.show(),_=!1)},t};Wg.default={create:PI}});var YS=Ke((MW,GS)=>{GS.exports=[{name:"AppVeyor",constant:"APPVEYOR",env:"APPVEYOR",pr:"APPVEYOR_PULL_REQUEST_NUMBER"},{name:"Azure Pipelines",constant:"AZURE_PIPELINES",env:"SYSTEM_TEAMFOUNDATIONCOLLECTIONURI",pr:"SYSTEM_PULLREQUEST_PULLREQUESTID"},{name:"Bamboo",constant:"BAMBOO",env:"bamboo_planKey"},{name:"Bitbucket Pipelines",constant:"BITBUCKET",env:"BITBUCKET_COMMIT",pr:"BITBUCKET_PR_ID"},{name:"Bitrise",constant:"BITRISE",env:"BITRISE_IO",pr:"BITRISE_PULL_REQUEST"},{name:"Buddy",constant:"BUDDY",env:"BUDDY_WORKSPACE_ID",pr:"BUDDY_EXECUTION_PULL_REQUEST_ID"},{name:"Buildkite",constant:"BUILDKITE",env:"BUILDKITE",pr:{env:"BUILDKITE_PULL_REQUEST",ne:"false"}},{name:"CircleCI",constant:"CIRCLE",env:"CIRCLECI",pr:"CIRCLE_PULL_REQUEST"},{name:"Cirrus CI",constant:"CIRRUS",env:"CIRRUS_CI",pr:"CIRRUS_PR"},{name:"AWS CodeBuild",constant:"CODEBUILD",env:"CODEBUILD_BUILD_ARN"},{name:"Codeship",constant:"CODESHIP",env:{CI_NAME:"codeship"}},{name:"Drone",constant:"DRONE",env:"DRONE",pr:{DRONE_BUILD_EVENT:"pull_request"}},{name:"dsari",constant:"DSARI",env:"DSARI"},{name:"GitLab CI",constant:"GITLAB",env:"GITLAB_CI"},{name:"GoCD",constant:"GOCD",env:"GO_PIPELINE_LABEL"},{name:"Hudson",constant:"HUDSON",env:"HUDSON_URL"},{name:"Jenkins",constant:"JENKINS",env:["JENKINS_URL","BUILD_ID"],pr:{any:["ghprbPullId","CHANGE_ID"]}},{name:"Magnum CI",constant:"MAGNUM",env:"MAGNUM"},{name:"Netlify CI",constant:"NETLIFY",env:"NETLIFY_BUILD_BASE",pr:{env:"PULL_REQUEST",ne:"false"}},{name:"Sail CI",constant:"SAIL",env:"SAILCI",pr:"SAIL_PULL_REQUEST_NUMBER"},{name:"Semaphore",constant:"SEMAPHORE",env:"SEMAPHORE",pr:"PULL_REQUEST_NUMBER"},{name:"Shippable",constant:"SHIPPABLE",env:"SHIPPABLE",pr:{IS_PULL_REQUEST:"true"}},{name:"Solano CI",constant:"SOLANO",env:"TDDIUM",pr:"TDDIUM_PR_ID"},{name:"Strider CD",constant:"STRIDER",env:"STRIDER"},{name:"TaskCluster",constant:"TASKCLUSTER",env:["TASK_ID","RUN_ID"]},{name:"TeamCity",constant:"TEAMCITY",env:"TEAMCITY_VERSION"},{name:"Travis CI",constant:"TRAVIS",env:"TRAVIS",pr:{env:"TRAVIS_PULL_REQUEST",ne:"false"}}]});var QS=Ke(Pa=>{"use strict";var KS=YS(),jc=process.env;Object.defineProperty(Pa,"_vendors",{value:KS.map(function(i){return i.constant})});Pa.name=null;Pa.isPR=null;KS.forEach(function(i){var o=Array.isArray(i.env)?i.env:[i.env],a=o.every(function(c){return XS(c)});if(Pa[i.constant]=a,a)switch(Pa.name=i.name,typeof i.pr){case"string":Pa.isPR=!!jc[i.pr];break;case"object":"env"in i.pr?Pa.isPR=i.pr.env in jc&&jc[i.pr.env]!==i.pr.ne:"any"in i.pr?Pa.isPR=i.pr.any.some(function(c){return!!jc[c]}):Pa.isPR=XS(i.pr);break;default:Pa.isPR=null}});Pa.isCI=!!(jc.CI||jc.CONTINUOUS_INTEGRATION||jc.BUILD_NUMBER||jc.RUN_ID||Pa.name);function XS(i){return typeof i=="string"?!!jc[i]:Object.keys(i).every(function(o){return jc[o]===i[o]})}});var ZS=Ke((LW,JS)=>{"use strict";JS.exports=QS().isCI});var eT=Ke((NW,$S)=>{"use strict";var II=i=>{let o=new Set;do for(let a of Reflect.ownKeys(i))o.add([i,a]);while((i=Reflect.getPrototypeOf(i))&&i!==Object.prototype);return o};$S.exports=(i,{include:o,exclude:a}={})=>{let c=_=>{let t=O=>typeof O=="string"?_===O:O.test(_);return o?o.some(t):a?!a.some(t):!0};for(let[_,t]of II(i.constructor.prototype)){if(t==="constructor"||!c(t))continue;let O=Reflect.getOwnPropertyDescriptor(_,t);O&&typeof O.value=="function"&&(i[t]=i[t].bind(i))}return i}});var lT=Ke(lu=>{"use strict";Object.defineProperty(lu,"__esModule",{value:!0});var Kv,Vg,z_,H_,SD;typeof window=="undefined"||typeof MessageChannel!="function"?(Xv=null,TD=null,CD=function(){if(Xv!==null)try{var i=lu.unstable_now();Xv(!0,i),Xv=null}catch(o){throw setTimeout(CD,0),o}},tT=Date.now(),lu.unstable_now=function(){return Date.now()-tT},Kv=function(i){Xv!==null?setTimeout(Kv,0,i):(Xv=i,setTimeout(CD,0))},Vg=function(i,o){TD=setTimeout(i,o)},z_=function(){clearTimeout(TD)},H_=function(){return!1},SD=lu.unstable_forceFrameRate=function(){}):(q_=window.performance,xD=window.Date,nT=window.setTimeout,rT=window.clearTimeout,typeof console!="undefined"&&(iT=window.cancelAnimationFrame,typeof window.requestAnimationFrame!="function"&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills"),typeof iT!="function"&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills")),typeof q_=="object"&&typeof q_.now=="function"?lu.unstable_now=function(){return q_.now()}:(uT=xD.now(),lu.unstable_now=function(){return xD.now()-uT}),Gg=!1,Yg=null,W_=-1,AD=5,RD=0,H_=function(){return lu.unstable_now()>=RD},SD=function(){},lu.unstable_forceFrameRate=function(i){0>i||125G_(O,a))M!==void 0&&0>G_(M,O)?(i[c]=M,i[N]=a,c=N):(i[c]=O,i[t]=a,c=t);else if(M!==void 0&&0>G_(M,a))i[c]=M,i[N]=a,c=N;else break e}}return o}return null}function G_(i,o){var a=i.sortIndex-o.sortIndex;return a!==0?a:i.id-o.id}var ec=[],d2=[],bI=1,Fs=null,ps=3,K_=!1,$p=!1,Kg=!1;function X_(i){for(var o=df(d2);o!==null;){if(o.callback===null)Y_(d2);else if(o.startTime<=i)Y_(d2),o.sortIndex=o.expirationTime,MD(ec,o);else break;o=df(d2)}}function kD(i){if(Kg=!1,X_(i),!$p)if(df(ec)!==null)$p=!0,Kv(LD);else{var o=df(d2);o!==null&&Vg(kD,o.startTime-i)}}function LD(i,o){$p=!1,Kg&&(Kg=!1,z_()),K_=!0;var a=ps;try{for(X_(o),Fs=df(ec);Fs!==null&&(!(Fs.expirationTime>o)||i&&!H_());){var c=Fs.callback;if(c!==null){Fs.callback=null,ps=Fs.priorityLevel;var _=c(Fs.expirationTime<=o);o=lu.unstable_now(),typeof _=="function"?Fs.callback=_:Fs===df(ec)&&Y_(ec),X_(o)}else Y_(ec);Fs=df(ec)}if(Fs!==null)var t=!0;else{var O=df(d2);O!==null&&Vg(kD,O.startTime-o),t=!1}return t}finally{Fs=null,ps=a,K_=!1}}function oT(i){switch(i){case 1:return-1;case 2:return 250;case 5:return 1073741823;case 4:return 1e4;default:return 5e3}}var BI=SD;lu.unstable_ImmediatePriority=1;lu.unstable_UserBlockingPriority=2;lu.unstable_NormalPriority=3;lu.unstable_IdlePriority=5;lu.unstable_LowPriority=4;lu.unstable_runWithPriority=function(i,o){switch(i){case 1:case 2:case 3:case 4:case 5:break;default:i=3}var a=ps;ps=i;try{return o()}finally{ps=a}};lu.unstable_next=function(i){switch(ps){case 1:case 2:case 3:var o=3;break;default:o=ps}var a=ps;ps=o;try{return i()}finally{ps=a}};lu.unstable_scheduleCallback=function(i,o,a){var c=lu.unstable_now();if(typeof a=="object"&&a!==null){var _=a.delay;_=typeof _=="number"&&0<_?c+_:c,a=typeof a.timeout=="number"?a.timeout:oT(i)}else a=oT(i),_=c;return a=_+a,i={id:bI++,callback:o,priorityLevel:i,startTime:_,expirationTime:a,sortIndex:-1},_>c?(i.sortIndex=_,MD(d2,i),df(ec)===null&&i===df(d2)&&(Kg?z_():Kg=!0,Vg(kD,_-c))):(i.sortIndex=a,MD(ec,i),$p||K_||($p=!0,Kv(LD))),i};lu.unstable_cancelCallback=function(i){i.callback=null};lu.unstable_wrapCallback=function(i){var o=ps;return function(){var a=ps;ps=o;try{return i.apply(this,arguments)}finally{ps=a}}};lu.unstable_getCurrentPriorityLevel=function(){return ps};lu.unstable_shouldYield=function(){var i=lu.unstable_now();X_(i);var o=df(ec);return o!==Fs&&Fs!==null&&o!==null&&o.callback!==null&&o.startTime<=i&&o.expirationTime{"use strict";process.env.NODE_ENV!=="production"&&function(){"use strict";Object.defineProperty(bi,"__esModule",{value:!0});var i=!1,o=!1,a=!0,c,_,t,O,N;if(typeof window=="undefined"||typeof MessageChannel!="function"){var M=null,T=null,B=function(){if(M!==null)try{var wt=bi.unstable_now(),bt=!0;M(bt,wt),M=null}catch(Hn){throw setTimeout(B,0),Hn}},H=Date.now();bi.unstable_now=function(){return Date.now()-H},c=function(wt){M!==null?setTimeout(c,0,wt):(M=wt,setTimeout(B,0))},_=function(wt,bt){T=setTimeout(wt,bt)},t=function(){clearTimeout(T)},O=function(){return!1},N=bi.unstable_forceFrameRate=function(){}}else{var q=window.performance,ne=window.Date,m=window.setTimeout,he=window.clearTimeout;if(typeof console!="undefined"){var De=window.requestAnimationFrame,se=window.cancelAnimationFrame;typeof De!="function"&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills"),typeof se!="function"&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills")}if(typeof q=="object"&&typeof q.now=="function")bi.unstable_now=function(){return q.now()};else{var fe=ne.now();bi.unstable_now=function(){return ne.now()-fe}}var _e=!1,ce=null,me=-1,ie=5,Oe=0,Ue=300,je=!1;if(o&&navigator!==void 0&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0){var at=navigator.scheduling;O=function(){var wt=bi.unstable_now();return wt>=Oe?je||at.isInputPending()?!0:wt>=Ue:!1},N=function(){je=!0}}else O=function(){return bi.unstable_now()>=Oe},N=function(){};bi.unstable_forceFrameRate=function(wt){if(wt<0||wt>125){console.error("forceFrameRate takes a positive int between 0 and 125, forcing framerates higher than 125 fps is not unsupported");return}wt>0?ie=Math.floor(1e3/wt):ie=5};var Dt=function(){if(ce!==null){var wt=bi.unstable_now();Oe=wt+ie;var bt=!0;try{var Hn=ce(bt,wt);Hn?ut.postMessage(null):(_e=!1,ce=null)}catch(qr){throw ut.postMessage(null),qr}}else _e=!1;je=!1},Qe=new MessageChannel,ut=Qe.port2;Qe.port1.onmessage=Dt,c=function(wt){ce=wt,_e||(_e=!0,ut.postMessage(null))},_=function(wt,bt){me=m(function(){wt(bi.unstable_now())},bt)},t=function(){he(me),me=-1}}function Ve(wt,bt){var Hn=wt.length;wt.push(bt),rt(wt,bt,Hn)}function It(wt){var bt=wt[0];return bt===void 0?null:bt}function Xt(wt){var bt=wt[0];if(bt!==void 0){var Hn=wt.pop();return Hn!==bt&&(wt[0]=Hn,X(wt,Hn,0)),bt}else return null}function rt(wt,bt,Hn){for(var qr=Hn;;){var Ki=Math.floor((qr-1)/2),Qr=wt[Ki];if(Qr!==void 0&&de(Qr,bt)>0)wt[Ki]=bt,wt[qr]=Qr,qr=Ki;else return}}function X(wt,bt,Hn){for(var qr=Hn,Ki=wt.length;qrfr){if(fr*=2,fr>jr){console.error("Scheduler Profiling: Event log exceeded maximum size. Don't forget to call `stopLoggingProfilingEvents()`."),wr();return}var Hn=new Int32Array(fr*4);Hn.set(Qt),zr=Hn.buffer,Qt=Hn}Qt.set(wt,bt)}}function mi(){fr=vr,zr=new ArrayBuffer(fr*4),Qt=new Int32Array(zr),wu=0}function wr(){var wt=zr;return fr=0,zr=null,Qt=null,wu=0,wt}function el(wt,bt){a&&(Vt[Xn]++,Qt!==null&&su([d0,bt*1e3,wt.id,wt.priorityLevel]))}function Y0(wt,bt){a&&(Vt[Dr]=Ce,Vt[w]=0,Vt[Xn]--,Qt!==null&&su([Ro,bt*1e3,wt.id]))}function Uu(wt,bt){a&&(Vt[Xn]--,Qt!==null&&su([Ps,bt*1e3,wt.id]))}function K0(wt,bt){a&&(Vt[Dr]=Ce,Vt[w]=0,Vt[Xn]--,Qt!==null&&su([Jo,bt*1e3,wt.id]))}function Xr(wt,bt){a&&(an++,Vt[Dr]=wt.priorityLevel,Vt[w]=wt.id,Vt[jt]=an,Qt!==null&&su([Zo,bt*1e3,wt.id,an]))}function Oo(wt,bt){a&&(Vt[Dr]=Ce,Vt[w]=0,Vt[jt]=0,Qt!==null&&su([$o,bt*1e3,wt.id,an]))}function Mo(wt){a&&(Mn++,Qt!==null&&su([qt,wt*1e3,Mn]))}function F0(wt){a&&Qt!==null&&su([Ai,wt*1e3,Mn])}var au=1073741823,Li=-1,Is=250,Xl=5e3,P0=1e4,p0=au,Hr=[],Ri=[],X0=1,gi=!1,en=null,bn=dt,Oi=!1,yi=!1,Wt=!1;function Ru(wt){for(var bt=It(Ri);bt!==null;){if(bt.callback===null)Xt(Ri);else if(bt.startTime<=wt)Xt(Ri),bt.sortIndex=bt.expirationTime,Ve(Hr,bt),a&&(el(bt,wt),bt.isQueued=!0);else return;bt=It(Ri)}}function eu(wt){if(Wt=!1,Ru(wt),!yi)if(It(Hr)!==null)yi=!0,c(Q0);else{var bt=It(Ri);bt!==null&&_(eu,bt.startTime-wt)}}function Q0(wt,bt){a&&F0(bt),yi=!1,Wt&&(Wt=!1,t()),Oi=!0;var Hn=bn;try{if(a)try{return Yi(wt,bt)}catch(Qr){if(en!==null){var qr=bi.unstable_now();K0(en,qr),en.isQueued=!1}throw Qr}else return Yi(wt,bt)}finally{if(en=null,bn=Hn,Oi=!1,a){var Ki=bi.unstable_now();Mo(Ki)}}}function Yi(wt,bt){var Hn=bt;for(Ru(Hn),en=It(Hr);en!==null&&!(i&&gi)&&!(en.expirationTime>Hn&&(!wt||O()));){var qr=en.callback;if(qr!==null){en.callback=null,bn=en.priorityLevel;var Ki=en.expirationTime<=Hn;Xr(en,Hn);var Qr=qr(Ki);Hn=bi.unstable_now(),typeof Qr=="function"?(en.callback=Qr,Oo(en,Hn)):(a&&(Y0(en,Hn),en.isQueued=!1),en===It(Hr)&&Xt(Hr)),Ru(Hn)}else Xt(Hr);en=It(Hr)}if(en!==null)return!0;var Ou=It(Ri);return Ou!==null&&_(eu,Ou.startTime-Hn),!1}function Ql(wt,bt){switch(wt){case oe:case He:case dt:case At:case nn:break;default:wt=dt}var Hn=bn;bn=wt;try{return bt()}finally{bn=Hn}}function ko(wt){var bt;switch(bn){case oe:case He:case dt:bt=dt;break;default:bt=bn;break}var Hn=bn;bn=bt;try{return wt()}finally{bn=Hn}}function ai(wt){var bt=bn;return function(){var Hn=bn;bn=bt;try{return wt.apply(this,arguments)}finally{bn=Hn}}}function ao(wt){switch(wt){case oe:return Li;case He:return Is;case nn:return p0;case At:return P0;case dt:default:return Xl}}function Jl(wt,bt,Hn){var qr=bi.unstable_now(),Ki,Qr;if(typeof Hn=="object"&&Hn!==null){var Ou=Hn.delay;typeof Ou=="number"&&Ou>0?Ki=qr+Ou:Ki=qr,Qr=typeof Hn.timeout=="number"?Hn.timeout:ao(wt)}else Qr=ao(wt),Ki=qr;var h0=Ki+Qr,Ni={id:X0++,callback:bt,priorityLevel:wt,startTime:Ki,expirationTime:h0,sortIndex:-1};return a&&(Ni.isQueued=!1),Ki>qr?(Ni.sortIndex=Ki,Ve(Ri,Ni),It(Hr)===null&&Ni===It(Ri)&&(Wt?t():Wt=!0,_(eu,Ki-qr))):(Ni.sortIndex=h0,Ve(Hr,Ni),a&&(el(Ni,qr),Ni.isQueued=!0),!yi&&!Oi&&(yi=!0,c(Q0))),Ni}function Lo(){gi=!0}function bs(){gi=!1,!yi&&!Oi&&(yi=!0,c(Q0))}function $n(){return It(Hr)}function tl(wt){if(a&&wt.isQueued){var bt=bi.unstable_now();Uu(wt,bt),wt.isQueued=!1}wt.callback=null}function fo(){return bn}function I0(){var wt=bi.unstable_now();Ru(wt);var bt=It(Hr);return bt!==en&&en!==null&&bt!==null&&bt.callback!==null&&bt.startTime<=wt&&bt.expirationTime{"use strict";process.env.NODE_ENV==="production"?ND.exports=lT():ND.exports=sT()});var aT=Ke((bW,Xg)=>{Xg.exports=function i(o){"use strict";var a=Ig(),c=ki(),_=Q_();function t(y){for(var g="https://reactjs.org/docs/error-decoder.html?invariant="+y,A=1;AX0||(y.current=Ri[X0],Ri[X0]=null,X0--)}function en(y,g){X0++,Ri[X0]=y.current,y.current=g}var bn={},Oi={current:bn},yi={current:!1},Wt=bn;function Ru(y,g){var A=y.type.contextTypes;if(!A)return bn;var F=y.stateNode;if(F&&F.__reactInternalMemoizedUnmaskedChildContext===g)return F.__reactInternalMemoizedMaskedChildContext;var b={},J;for(J in A)b[J]=g[J];return F&&(y=y.stateNode,y.__reactInternalMemoizedUnmaskedChildContext=g,y.__reactInternalMemoizedMaskedChildContext=b),b}function eu(y){return y=y.childContextTypes,y!=null}function Q0(y){gi(yi,y),gi(Oi,y)}function Yi(y){gi(yi,y),gi(Oi,y)}function Ql(y,g,A){if(Oi.current!==bn)throw Error(t(168));en(Oi,g,y),en(yi,A,y)}function ko(y,g,A){var F=y.stateNode;if(y=g.childContextTypes,typeof F.getChildContext!="function")return A;F=F.getChildContext();for(var b in F)if(!(b in y))throw Error(t(108,Ue(g)||"Unknown",b));return a({},A,{},F)}function ai(y){var g=y.stateNode;return g=g&&g.__reactInternalMemoizedMergedChildContext||bn,Wt=Oi.current,en(Oi,g,y),en(yi,yi.current,y),!0}function ao(y,g,A){var F=y.stateNode;if(!F)throw Error(t(169));A?(g=ko(y,g,Wt),F.__reactInternalMemoizedMergedChildContext=g,gi(yi,y),gi(Oi,y),en(Oi,g,y)):gi(yi,y),en(yi,A,y)}var Jl=_.unstable_runWithPriority,Lo=_.unstable_scheduleCallback,bs=_.unstable_cancelCallback,$n=_.unstable_shouldYield,tl=_.unstable_requestPaint,fo=_.unstable_now,I0=_.unstable_getCurrentPriorityLevel,Sl=_.unstable_ImmediatePriority,No=_.unstable_UserBlockingPriority,wt=_.unstable_NormalPriority,bt=_.unstable_LowPriority,Hn=_.unstable_IdlePriority,qr={},Ki=tl!==void 0?tl:function(){},Qr=null,Ou=null,h0=!1,Ni=fo(),v0=1e4>Ni?fo:function(){return fo()-Ni};function vs(){switch(I0()){case Sl:return 99;case No:return 98;case wt:return 97;case bt:return 96;case Hn:return 95;default:throw Error(t(332))}}function Tt(y){switch(y){case 99:return Sl;case 98:return No;case 97:return wt;case 96:return bt;case 95:return Hn;default:throw Error(t(332))}}function co(y,g){return y=Tt(y),Jl(y,g)}function nl(y,g,A){return y=Tt(y),Lo(y,g,A)}function Zl(y){return Qr===null?(Qr=[y],Ou=Lo(Sl,ms)):Qr.push(y),qr}function ju(){if(Ou!==null){var y=Ou;Ou=null,bs(y)}ms()}function ms(){if(!h0&&Qr!==null){h0=!0;var y=0;try{var g=Qr;co(99,function(){for(;y=g&&(ho=!0),y.firstContext=null)}function ku(y,g){if(Mu!==y&&g!==!1&&g!==0)if((typeof g!="number"||g===1073741823)&&(Mu=y,g=1073741823),g={context:y,observedBits:g,next:null},Si===null){if(cr===null)throw Error(t(308));Si=g,cr.dependencies={expirationTime:0,firstContext:g,responders:null}}else Si=Si.next=g;return ln?y._currentValue:y._currentValue2}var po=!1;function qu(y){return{baseState:y,firstUpdate:null,lastUpdate:null,firstCapturedUpdate:null,lastCapturedUpdate:null,firstEffect:null,lastEffect:null,firstCapturedEffect:null,lastCapturedEffect:null}}function Ia(y){return{baseState:y.baseState,firstUpdate:y.firstUpdate,lastUpdate:y.lastUpdate,firstCapturedUpdate:null,lastCapturedUpdate:null,firstEffect:null,lastEffect:null,firstCapturedEffect:null,lastCapturedEffect:null}}function m0(y,g){return{expirationTime:y,suspenseConfig:g,tag:0,payload:null,callback:null,next:null,nextEffect:null}}function ua(y,g){y.lastUpdate===null?y.firstUpdate=y.lastUpdate=g:(y.lastUpdate.next=g,y.lastUpdate=g)}function J0(y,g){var A=y.alternate;if(A===null){var F=y.updateQueue,b=null;F===null&&(F=y.updateQueue=qu(y.memoizedState))}else F=y.updateQueue,b=A.updateQueue,F===null?b===null?(F=y.updateQueue=qu(y.memoizedState),b=A.updateQueue=qu(A.memoizedState)):F=y.updateQueue=Ia(b):b===null&&(b=A.updateQueue=Ia(F));b===null||F===b?ua(F,g):F.lastUpdate===null||b.lastUpdate===null?(ua(F,g),ua(b,g)):(ua(F,g),b.lastUpdate=g)}function oa(y,g){var A=y.updateQueue;A=A===null?y.updateQueue=qu(y.memoizedState):ba(y,A),A.lastCapturedUpdate===null?A.firstCapturedUpdate=A.lastCapturedUpdate=g:(A.lastCapturedUpdate.next=g,A.lastCapturedUpdate=g)}function ba(y,g){var A=y.alternate;return A!==null&&g===A.updateQueue&&(g=y.updateQueue=Ia(g)),g}function gs(y,g,A,F,b,J){switch(A.tag){case 1:return y=A.payload,typeof y=="function"?y.call(J,F,b):y;case 3:y.effectTag=y.effectTag&-4097|64;case 0:if(y=A.payload,b=typeof y=="function"?y.call(J,F,b):y,b==null)break;return a({},F,b);case 2:po=!0}return F}function S0(y,g,A,F,b){po=!1,g=ba(y,g);for(var J=g.baseState,pe=null,gt=0,xt=g.firstUpdate,kt=J;xt!==null;){var xr=xt.expirationTime;xrci?(Qi=ur,ur=null):Qi=ur.sibling;var Gr=du(We,ur,lt[ci],$t);if(Gr===null){ur===null&&(ur=Qi);break}y&&ur&&Gr.alternate===null&&g(We,ur),ze=J(Gr,ze,ci),si===null?Wn=Gr:si.sibling=Gr,si=Gr,ur=Qi}if(ci===lt.length)return A(We,ur),Wn;if(ur===null){for(;cici?(Qi=ur,ur=null):Qi=ur.sibling;var Cu=du(We,ur,Gr.value,$t);if(Cu===null){ur===null&&(ur=Qi);break}y&&ur&&Cu.alternate===null&&g(We,ur),ze=J(Cu,ze,ci),si===null?Wn=Cu:si.sibling=Cu,si=Cu,ur=Qi}if(Gr.done)return A(We,ur),Wn;if(ur===null){for(;!Gr.done;ci++,Gr=lt.next())Gr=i0(We,Gr.value,$t),Gr!==null&&(ze=J(Gr,ze,ci),si===null?Wn=Gr:si.sibling=Gr,si=Gr);return Wn}for(ur=F(We,ur);!Gr.done;ci++,Gr=lt.next())Gr=z0(ur,We,ci,Gr.value,$t),Gr!==null&&(y&&Gr.alternate!==null&&ur.delete(Gr.key===null?ci:Gr.key),ze=J(Gr,ze,ci),si===null?Wn=Gr:si.sibling=Gr,si=Gr);return y&&ur.forEach(function(Va){return g(We,Va)}),Wn}return function(We,ze,lt,$t){var Wn=typeof lt=="object"&<!==null&<.type===B&<.key===null;Wn&&(lt=lt.props.children);var si=typeof lt=="object"&<!==null;if(si)switch(lt.$$typeof){case M:e:{for(si=lt.key,Wn=ze;Wn!==null;){if(Wn.key===si)if(Wn.tag===7?lt.type===B:Wn.elementType===lt.type){A(We,Wn.sibling),ze=b(Wn,lt.type===B?lt.props.children:lt.props,$t),ze.ref=js(We,Wn,lt),ze.return=We,We=ze;break e}else{A(We,Wn);break}else g(We,Wn);Wn=Wn.sibling}lt.type===B?(ze=r0(lt.props.children,We.mode,$t,lt.key),ze.return=We,We=ze):($t=Wa(lt.type,lt.key,lt.props,null,We.mode,$t),$t.ref=js(We,ze,lt),$t.return=We,We=$t)}return pe(We);case T:e:{for(Wn=lt.key;ze!==null;){if(ze.key===Wn)if(ze.tag===4&&ze.stateNode.containerInfo===lt.containerInfo&&ze.stateNode.implementation===lt.implementation){A(We,ze.sibling),ze=b(ze,lt.children||[],$t),ze.return=We,We=ze;break e}else{A(We,ze);break}else g(We,ze);ze=ze.sibling}ze=wf(lt,We.mode,$t),ze.return=We,We=ze}return pe(We)}if(typeof lt=="string"||typeof lt=="number")return lt=""+lt,ze!==null&&ze.tag===6?(A(We,ze.sibling),ze=b(ze,lt,$t),ze.return=We,We=ze):(A(We,ze),ze=j0(lt,We.mode,$t),ze.return=We,We=ze),pe(We);if(g0(lt))return Ml(We,ze,lt,$t);if(ie(lt))return u0(We,ze,lt,$t);if(si&&ji(We,lt),typeof lt=="undefined"&&!Wn)switch(We.tag){case 1:case 0:throw We=We.type,Error(t(152,We.displayName||We.name||"Component"))}return A(We,ze)}}var z=U(!0),G=U(!1),$={},Te={current:$},ye={current:$},Ae={current:$};function Z(y){if(y===$)throw Error(t(174));return y}function ke(y,g){en(Ae,g,y),en(ye,y,y),en(Te,$,y),g=It(g),gi(Te,y),en(Te,g,y)}function Je(y){gi(Te,y),gi(ye,y),gi(Ae,y)}function vt(y){var g=Z(Ae.current),A=Z(Te.current);g=Xt(A,y.type,g),A!==g&&(en(ye,y,y),en(Te,g,y))}function ue(y){ye.current===y&&(gi(Te,y),gi(ye,y))}var qe={current:0};function nt(y){for(var g=y;g!==null;){if(g.tag===13){var A=g.memoizedState;if(A!==null&&(A=A.dehydrated,A===null||Xr(A)||Oo(A)))return g}else if(g.tag===19&&g.memoizedProps.revealOrder!==void 0){if((g.effectTag&64)!=0)return g}else if(g.child!==null){g.child.return=g,g=g.child;continue}if(g===y)break;for(;g.sibling===null;){if(g.return===null||g.return===y)return null;g=g.return}g.sibling.return=g.return,g=g.sibling}return null}function Ct(y,g){return{responder:y,props:g}}var Mt=O.ReactCurrentDispatcher,Pt=O.ReactCurrentBatchConfig,sn=0,rn=null,Nt=null,Dn=null,dr=null,er=null,Cr=null,Rn=0,Lr=null,y0=0,Nr=!1,it=null,Et=0;function et(){throw Error(t(321))}function Ft(y,g){if(g===null)return!1;for(var A=0;ARn&&(Rn=xr,ja(Rn))):(dc(xr,xt.suspenseConfig),J=xt.eagerReducer===y?xt.eagerState:y(J,xt.action)),pe=xt,xt=xt.next}while(xt!==null&&xt!==F);kt||(gt=pe,b=J),Ne(J,g.memoizedState)||(ho=!0),g.memoizedState=J,g.baseUpdate=gt,g.baseState=b,A.lastRenderedState=J}return[g.memoizedState,A.dispatch]}function T0(y){var g=Jn();return typeof y=="function"&&(y=y()),g.memoizedState=g.baseState=y,y=g.queue={last:null,dispatch:null,lastRenderedReducer:fu,lastRenderedState:y},y=y.dispatch=zs.bind(null,rn,y),[g.memoizedState,y]}function Z0(y){return Lu(fu,y)}function Nu(y,g,A,F){return y={tag:y,create:g,destroy:A,deps:F,next:null},Lr===null?(Lr={lastEffect:null},Lr.lastEffect=y.next=y):(g=Lr.lastEffect,g===null?Lr.lastEffect=y.next=y:(A=g.next,g.next=y,y.next=A,Lr.lastEffect=y)),y}function _i(y,g,A,F){var b=Jn();y0|=y,b.memoizedState=Nu(g,A,void 0,F===void 0?null:F)}function Po(y,g,A,F){var b=Sr();F=F===void 0?null:F;var J=void 0;if(Nt!==null){var pe=Nt.memoizedState;if(J=pe.destroy,F!==null&&Ft(F,pe.deps)){Nu(0,A,J,F);return}}y0|=y,b.memoizedState=Nu(g,A,J,F)}function rl(y,g){return _i(516,192,y,g)}function vf(y,g){return Po(516,192,y,g)}function Tl(y,g){if(typeof g=="function")return y=y(),g(y),function(){g(null)};if(g!=null)return y=y(),g.current=y,function(){g.current=null}}function mf(){}function Io(y,g){return Jn().memoizedState=[y,g===void 0?null:g],y}function ys(y,g){var A=Sr();g=g===void 0?null:g;var F=A.memoizedState;return F!==null&&g!==null&&Ft(g,F[1])?F[0]:(A.memoizedState=[y,g],y)}function zs(y,g,A){if(!(25>Et))throw Error(t(301));var F=y.alternate;if(y===rn||F!==null&&F===rn)if(Nr=!0,y={expirationTime:sn,suspenseConfig:null,action:A,eagerReducer:null,eagerState:null,next:null},it===null&&(it=new Map),A=it.get(g),A===void 0)it.set(g,y);else{for(g=A;g.next!==null;)g=g.next;g.next=y}else{var b=D0(),J=fi.suspense;b=Un(b,y,J),J={expirationTime:b,suspenseConfig:J,action:A,eagerReducer:null,eagerState:null,next:null};var pe=g.last;if(pe===null)J.next=J;else{var gt=pe.next;gt!==null&&(J.next=gt),pe.next=J}if(g.last=J,y.expirationTime===0&&(F===null||F.expirationTime===0)&&(F=g.lastRenderedReducer,F!==null))try{var xt=g.lastRenderedState,kt=F(xt,A);if(J.eagerReducer=F,J.eagerState=kt,Ne(kt,xt))return}catch(xr){}finally{}t0(y,b)}}var bo={readContext:ku,useCallback:et,useContext:et,useEffect:et,useImperativeHandle:et,useLayoutEffect:et,useMemo:et,useReducer:et,useRef:et,useState:et,useDebugValue:et,useResponder:et,useDeferredValue:et,useTransition:et},Bo={readContext:ku,useCallback:Io,useContext:ku,useEffect:rl,useImperativeHandle:function(y,g,A){return A=A!=null?A.concat([y]):null,_i(4,36,Tl.bind(null,g,y),A)},useLayoutEffect:function(y,g){return _i(4,36,y,g)},useMemo:function(y,g){var A=Jn();return g=g===void 0?null:g,y=y(),A.memoizedState=[y,g],y},useReducer:function(y,g,A){var F=Jn();return g=A!==void 0?A(g):g,F.memoizedState=F.baseState=g,y=F.queue={last:null,dispatch:null,lastRenderedReducer:y,lastRenderedState:g},y=y.dispatch=zs.bind(null,rn,y),[F.memoizedState,y]},useRef:function(y){var g=Jn();return y={current:y},g.memoizedState=y},useState:T0,useDebugValue:mf,useResponder:Ct,useDeferredValue:function(y,g){var A=T0(y),F=A[0],b=A[1];return rl(function(){_.unstable_next(function(){var J=Pt.suspense;Pt.suspense=g===void 0?null:g;try{b(y)}finally{Pt.suspense=J}})},[y,g]),F},useTransition:function(y){var g=T0(!1),A=g[0],F=g[1];return[Io(function(b){F(!0),_.unstable_next(function(){var J=Pt.suspense;Pt.suspense=y===void 0?null:y;try{F(!1),b()}finally{Pt.suspense=J}})},[y,A]),A]}},_s={readContext:ku,useCallback:ys,useContext:ku,useEffect:vf,useImperativeHandle:function(y,g,A){return A=A!=null?A.concat([y]):null,Po(4,36,Tl.bind(null,g,y),A)},useLayoutEffect:function(y,g){return Po(4,36,y,g)},useMemo:function(y,g){var A=Sr();g=g===void 0?null:g;var F=A.memoizedState;return F!==null&&g!==null&&Ft(g,F[1])?F[0]:(y=y(),A.memoizedState=[y,g],y)},useReducer:Lu,useRef:function(){return Sr().memoizedState},useState:Z0,useDebugValue:mf,useResponder:Ct,useDeferredValue:function(y,g){var A=Z0(y),F=A[0],b=A[1];return vf(function(){_.unstable_next(function(){var J=Pt.suspense;Pt.suspense=g===void 0?null:g;try{b(y)}finally{Pt.suspense=J}})},[y,g]),F},useTransition:function(y){var g=Z0(!1),A=g[0],F=g[1];return[ys(function(b){F(!0),_.unstable_next(function(){var J=Pt.suspense;Pt.suspense=y===void 0?null:y;try{F(!1),b()}finally{Pt.suspense=J}})},[y,A]),A]}},Qu=null,Tu=null,Ei=!1;function C0(y,g){var A=Ho(5,null,null,0);A.elementType="DELETED",A.type="DELETED",A.stateNode=g,A.return=y,A.effectTag=8,y.lastEffect!==null?(y.lastEffect.nextEffect=A,y.lastEffect=A):y.firstEffect=y.lastEffect=A}function $0(y,g){switch(y.tag){case 5:return g=Uu(g,y.type,y.pendingProps),g!==null?(y.stateNode=g,!0):!1;case 6:return g=K0(g,y.pendingProps),g!==null?(y.stateNode=g,!0):!1;case 13:return!1;default:return!1}}function Uo(y){if(Ei){var g=Tu;if(g){var A=g;if(!$0(y,g)){if(g=Mo(A),!g||!$0(y,g)){y.effectTag=y.effectTag&-1025|2,Ei=!1,Qu=y;return}C0(Qu,A)}Qu=y,Tu=F0(g)}else y.effectTag=y.effectTag&-1025|2,Ei=!1,Qu=y}}function sa(y){for(y=y.return;y!==null&&y.tag!==5&&y.tag!==3&&y.tag!==13;)y=y.return;Qu=y}function es(y){if(!w||y!==Qu)return!1;if(!Ei)return sa(y),Ei=!0,!1;var g=y.type;if(y.tag!==5||g!=="head"&&g!=="body"&&!dt(g,y.memoizedProps))for(g=Tu;g;)C0(y,g),g=Mo(g);if(sa(y),y.tag===13){if(!w)throw Error(t(316));if(y=y.memoizedState,y=y!==null?y.dehydrated:null,!y)throw Error(t(317));Tu=Is(y)}else Tu=Qu?Mo(y.stateNode):null;return!0}function tu(){w&&(Tu=Qu=null,Ei=!1)}var ei=O.ReactCurrentOwner,ho=!1;function Bi(y,g,A,F){g.child=y===null?G(g,null,A,F):z(g,y.child,A,F)}function Ci(y,g,A,F,b){A=A.render;var J=g.ref;return Fo(g,b),F=un(y,g,A,F,J,b),y!==null&&!ho?(g.updateQueue=y.updateQueue,g.effectTag&=-517,y.expirationTime<=b&&(y.expirationTime=0),gu(y,g,b)):(g.effectTag|=1,Bi(y,g,F,b),g.child)}function gf(y,g,A,F,b,J){if(y===null){var pe=A.type;return typeof pe=="function"&&!Df(pe)&&pe.defaultProps===void 0&&A.compare===null&&A.defaultProps===void 0?(g.tag=15,g.type=pe,yf(y,g,pe,F,b,J)):(y=Wa(A.type,null,F,null,g.mode,J),y.ref=g.ref,y.return=g,g.child=y)}return pe=y.child,bg)&&Vr.set(y,g)))}}function ro(y,g){y.expirationTimey?g:y)}function n0(y){if(y.lastExpiredTime!==0)y.callbackExpirationTime=1073741823,y.callbackPriority=99,y.callbackNode=Zl(io.bind(null,y));else{var g=mo(y),A=y.callbackNode;if(g===0)A!==null&&(y.callbackNode=null,y.callbackExpirationTime=0,y.callbackPriority=90);else{var F=D0();if(g===1073741823?F=99:g===1||g===2?F=95:(F=10*(1073741821-g)-10*(1073741821-F),F=0>=F?99:250>=F?98:5250>=F?97:95),A!==null){var b=y.callbackPriority;if(y.callbackExpirationTime===g&&b>=F)return;A!==qr&&bs(A)}y.callbackExpirationTime=g,y.callbackPriority=F,g=g===1073741823?Zl(io.bind(null,y)):nl(F,jo.bind(null,y),{timeout:10*(1073741821-g)-v0()}),y.callbackNode=g}}}function jo(y,g){if(ru=0,g)return g=D0(),pa(y,g),n0(y),null;var A=mo(y);if(A!==0){if(g=y.callbackNode,(Fn&(nu|cu))!==Ar)throw Error(t(327));if(Ws(),y===ae&&A===Fe||ws(y,A),re!==null){var F=Fn;Fn|=nu;var b=U0(y);do try{rd();break}catch(gt){ca(y,gt)}while(1);if(zu(),Fn=F,$u.current=b,Re===ni)throw g=st,ws(y,A),Ol(y,A),n0(y),g;if(re===null)switch(b=y.finishedWork=y.current.alternate,y.finishedExpirationTime=A,F=Re,ae=null,F){case Fi:case ni:throw Error(t(345));case Kn:pa(y,2=A){y.lastPingedTime=A,ws(y,A);break}}if(J=mo(y),J!==0&&J!==A)break;if(F!==0&&F!==A){y.lastPingedTime=F;break}y.timeoutHandle=an(Al.bind(null,y),b);break}Al(y);break;case _0:if(Ol(y,A),F=y.lastSuspendedTime,A===F&&(y.nextKnownPendingLevel=qc(b)),_n&&(b=y.lastPingedTime,b===0||b>=A)){y.lastPingedTime=A,ws(y,A);break}if(b=mo(y),b!==0&&b!==A)break;if(F!==0&&F!==A){y.lastPingedTime=F;break}if(Jt!==1073741823?F=10*(1073741821-Jt)-v0():mt===1073741823?F=0:(F=10*(1073741821-mt)-5e3,b=v0(),A=10*(1073741821-A)-b,F=b-F,0>F&&(F=0),F=(120>F?120:480>F?480:1080>F?1080:1920>F?1920:3e3>F?3e3:4320>F?4320:1960*_f(F/1960))-F,A=F?F=0:(b=pe.busyDelayMs|0,J=v0()-(10*(1073741821-J)-(pe.timeoutMs|0||5e3)),F=J<=b?0:b+F-J),10 component higher in the tree to provide a loading indicator or placeholder to display.`+Hr(b))}Re!==E0&&(Re=Kn),J=Cl(J,b),xt=F;do{switch(xt.tag){case 3:pe=J,xt.effectTag|=4096,xt.expirationTime=g;var ze=Es(xt,pe,g);oa(xt,ze);break e;case 1:pe=J;var lt=xt.type,$t=xt.stateNode;if((xt.effectTag&64)==0&&(typeof lt.getDerivedStateFromError=="function"||$t!==null&&typeof $t.componentDidCatch=="function"&&(mr===null||!mr.has($t)))){xt.effectTag|=4096,xt.expirationTime=g;var Wn=fa(xt,pe,g);oa(xt,Wn);break e}}xt=xt.return}while(xt!==null)}re=go(re)}catch(si){g=si;continue}break}while(1)}function U0(){var y=$u.current;return $u.current=bo,y===null?bo:y}function dc(y,g){ySn&&(Sn=y)}function D2(){for(;re!==null;)re=id(re)}function rd(){for(;re!==null&&!$n();)re=id(re)}function id(y){var g=qa(y.alternate,y,Fe);return y.memoizedProps=y.pendingProps,g===null&&(g=go(y)),Ds.current=null,g}function go(y){re=y;do{var g=re.alternate;if(y=re.return,(re.effectTag&2048)==0){e:{var A=g;g=re;var F=Fe,b=g.pendingProps;switch(g.tag){case 2:break;case 16:break;case 15:case 0:break;case 1:eu(g.type)&&Q0(g);break;case 3:Je(g),Yi(g),b=g.stateNode,b.pendingContext&&(b.context=b.pendingContext,b.pendingContext=null),(A===null||A.child===null)&&es(g)&&Ju(g),Jr(g);break;case 5:ue(g);var J=Z(Ae.current);if(F=g.type,A!==null&&g.stateNode!=null)Wu(A,g,F,b,J),A.ref!==g.ref&&(g.effectTag|=128);else if(b){if(A=Z(Te.current),es(g)){if(b=g,!w)throw Error(t(175));A=au(b.stateNode,b.type,b.memoizedProps,J,A,b),b.updateQueue=A,A=A!==null,A&&Ju(g)}else{var pe=de(F,b,J,A,g);ti(pe,g,!1,!1),g.stateNode=pe,oe(pe,F,b,J,A)&&Ju(g)}g.ref!==null&&(g.effectTag|=128)}else if(g.stateNode===null)throw Error(t(166));break;case 6:if(A&&g.stateNode!=null)An(A,g,A.memoizedProps,b);else{if(typeof b!="string"&&g.stateNode===null)throw Error(t(166));if(A=Z(Ae.current),J=Z(Te.current),es(g)){if(A=g,!w)throw Error(t(176));(A=Li(A.stateNode,A.memoizedProps,A))&&Ju(g)}else g.stateNode=nn(b,A,J,g)}break;case 11:break;case 13:if(gi(qe,g),b=g.memoizedState,(g.effectTag&64)!=0){g.expirationTime=F;break e}b=b!==null,J=!1,A===null?g.memoizedProps.fallback!==void 0&&es(g):(F=A.memoizedState,J=F!==null,b||F===null||(F=A.child.sibling,F!==null&&(pe=g.firstEffect,pe!==null?(g.firstEffect=F,F.nextEffect=pe):(g.firstEffect=g.lastEffect=F,F.nextEffect=null),F.effectTag=8))),b&&!J&&(g.mode&2)!=0&&(A===null&&g.memoizedProps.unstable_avoidThisFallback!==!0||(qe.current&1)!=0?Re===Fi&&(Re=e0):((Re===Fi||Re===e0)&&(Re=_0),Sn!==0&&ae!==null&&(Ol(ae,Fe),Cs(ae,Sn)))),Dr&&b&&(g.effectTag|=4),Vt&&(b||J)&&(g.effectTag|=4);break;case 7:break;case 8:break;case 12:break;case 4:Je(g),Jr(g);break;case 10:Su(g);break;case 9:break;case 14:break;case 17:eu(g.type)&&Q0(g);break;case 19:if(gi(qe,g),b=g.memoizedState,b===null)break;if(J=(g.effectTag&64)!=0,pe=b.rendering,pe===null){if(J)Fu(b,!1);else if(Re!==Fi||A!==null&&(A.effectTag&64)!=0)for(A=g.child;A!==null;){if(pe=nt(A),pe!==null){for(g.effectTag|=64,Fu(b,!1),A=pe.updateQueue,A!==null&&(g.updateQueue=A,g.effectTag|=4),b.lastEffect===null&&(g.firstEffect=null),g.lastEffect=b.lastEffect,A=F,b=g.child;b!==null;)J=b,F=A,J.effectTag&=2,J.nextEffect=null,J.firstEffect=null,J.lastEffect=null,pe=J.alternate,pe===null?(J.childExpirationTime=0,J.expirationTime=F,J.child=null,J.memoizedProps=null,J.memoizedState=null,J.updateQueue=null,J.dependencies=null):(J.childExpirationTime=pe.childExpirationTime,J.expirationTime=pe.expirationTime,J.child=pe.child,J.memoizedProps=pe.memoizedProps,J.memoizedState=pe.memoizedState,J.updateQueue=pe.updateQueue,F=pe.dependencies,J.dependencies=F===null?null:{expirationTime:F.expirationTime,firstContext:F.firstContext,responders:F.responders}),b=b.sibling;en(qe,qe.current&1|2,g),g=g.child;break e}A=A.sibling}}else{if(!J)if(A=nt(pe),A!==null){if(g.effectTag|=64,J=!0,A=A.updateQueue,A!==null&&(g.updateQueue=A,g.effectTag|=4),Fu(b,!0),b.tail===null&&b.tailMode==="hidden"&&!pe.alternate){g=g.lastEffect=b.lastEffect,g!==null&&(g.nextEffect=null);break}}else v0()>b.tailExpiration&&1b&&(b=F),pe>b&&(b=pe),J=J.sibling;A.childExpirationTime=b}if(g!==null)return g;y!==null&&(y.effectTag&2048)==0&&(y.firstEffect===null&&(y.firstEffect=re.firstEffect),re.lastEffect!==null&&(y.lastEffect!==null&&(y.lastEffect.nextEffect=re.firstEffect),y.lastEffect=re.lastEffect),1y?g:y}function Al(y){var g=vs();return co(99,ul.bind(null,y,g)),null}function ul(y,g){do Ws();while(ri!==null);if((Fn&(nu|cu))!==Ar)throw Error(t(327));var A=y.finishedWork,F=y.finishedExpirationTime;if(A===null)return null;if(y.finishedWork=null,y.finishedExpirationTime=0,A===y.current)throw Error(t(177));y.callbackNode=null,y.callbackExpirationTime=0,y.callbackPriority=90,y.nextKnownPendingLevel=0;var b=qc(A);if(y.firstPendingTime=b,F<=y.lastSuspendedTime?y.firstSuspendedTime=y.lastSuspendedTime=y.nextKnownPendingLevel=0:F<=y.firstSuspendedTime&&(y.firstSuspendedTime=F-1),F<=y.lastPingedTime&&(y.lastPingedTime=0),F<=y.lastExpiredTime&&(y.lastExpiredTime=0),y===ae&&(re=ae=null,Fe=0),1=A?Kt(y,g,A):(en(qe,qe.current&1,g),g=gu(y,g,A),g!==null?g.sibling:null);en(qe,qe.current&1,g);break;case 19:if(F=g.childExpirationTime>=A,(y.effectTag&64)!=0){if(F)return xn(y,g,A);g.effectTag|=64}if(b=g.memoizedState,b!==null&&(b.rendering=null,b.tail=null),en(qe,qe.current,g),!F)return null}return gu(y,g,A)}ho=!1}}else ho=!1;switch(g.expirationTime=0,g.tag){case 2:if(F=g.type,y!==null&&(y.alternate=null,g.alternate=null,g.effectTag|=2),y=g.pendingProps,b=Ru(g,Oi.current),Fo(g,A),b=un(null,g,F,y,b,A),g.effectTag|=1,typeof b=="object"&&b!==null&&typeof b.render=="function"&&b.$$typeof===void 0){if(g.tag=1,fn(),eu(F)){var J=!0;ai(g)}else J=!1;g.memoizedState=b.state!==null&&b.state!==void 0?b.state:null;var pe=F.getDerivedStateFromProps;typeof pe=="function"&&$l(g,F,pe,y),b.updater=la,g.stateNode=b,b._reactInternalFiber=g,Us(g,F,y,A),g=tt(null,g,F,!0,J,A)}else g.tag=0,Bi(null,g,b,A),g=g.child;return g;case 16:if(b=g.elementType,y!==null&&(y.alternate=null,g.alternate=null,g.effectTag|=2),y=g.pendingProps,Oe(b),b._status!==1)throw b._result;switch(b=b._result,g.type=b,J=g.tag=ol(b),y=Yn(b,y),J){case 0:g=to(null,g,b,y,A);break;case 1:g=xe(null,g,b,y,A);break;case 11:g=Ci(null,g,b,y,A);break;case 14:g=gf(null,g,b,Yn(b.type,y),F,A);break;default:throw Error(t(306,b,""))}return g;case 0:return F=g.type,b=g.pendingProps,b=g.elementType===F?b:Yn(F,b),to(y,g,F,b,A);case 1:return F=g.type,b=g.pendingProps,b=g.elementType===F?b:Yn(F,b),xe(y,g,F,b,A);case 3:if(Ye(g),F=g.updateQueue,F===null)throw Error(t(282));if(b=g.memoizedState,b=b!==null?b.element:null,S0(g,F,g.pendingProps,null,A),F=g.memoizedState.element,F===b)tu(),g=gu(y,g,A);else{if((b=g.stateNode.hydrate)&&(w?(Tu=F0(g.stateNode.containerInfo),Qu=g,b=Ei=!0):b=!1),b)for(A=G(g,null,F,A),g.child=A;A;)A.effectTag=A.effectTag&-3|1024,A=A.sibling;else Bi(y,g,F,A),tu();g=g.child}return g;case 5:return vt(g),y===null&&Uo(g),F=g.type,b=g.pendingProps,J=y!==null?y.memoizedProps:null,pe=b.children,dt(F,b)?pe=null:J!==null&&dt(F,J)&&(g.effectTag|=16),eo(y,g),g.mode&4&&A!==1&&At(F,b)?(g.expirationTime=g.childExpirationTime=1,g=null):(Bi(y,g,pe,A),g=g.child),g;case 6:return y===null&&Uo(g),null;case 13:return Kt(y,g,A);case 4:return ke(g,g.stateNode.containerInfo),F=g.pendingProps,y===null?g.child=z(g,null,F,A):Bi(y,g,F,A),g.child;case 11:return F=g.type,b=g.pendingProps,b=g.elementType===F?b:Yn(F,b),Ci(y,g,F,b,A);case 7:return Bi(y,g,g.pendingProps,A),g.child;case 8:return Bi(y,g,g.pendingProps.children,A),g.child;case 12:return Bi(y,g,g.pendingProps.children,A),g.child;case 10:e:{if(F=g.type._context,b=g.pendingProps,pe=g.memoizedProps,J=b.value,Hu(g,J),pe!==null){var gt=pe.value;if(J=Ne(gt,J)?0:(typeof F._calculateChangedBits=="function"?F._calculateChangedBits(gt,J):1073741823)|0,J===0){if(pe.children===b.children&&!yi.current){g=gu(y,g,A);break e}}else for(gt=g.child,gt!==null&&(gt.return=g);gt!==null;){var xt=gt.dependencies;if(xt!==null){pe=gt.child;for(var kt=xt.firstContext;kt!==null;){if(kt.context===F&&(kt.observedBits&J)!=0){gt.tag===1&&(kt=m0(A,null),kt.tag=2,J0(gt,kt)),gt.expirationTime=g&&y<=g}function Ol(y,g){var A=y.firstSuspendedTime,F=y.lastSuspendedTime;Ag||A===0)&&(y.lastSuspendedTime=g),g<=y.lastPingedTime&&(y.lastPingedTime=0),g<=y.lastExpiredTime&&(y.lastExpiredTime=0)}function Cs(y,g){g>y.firstPendingTime&&(y.firstPendingTime=g);var A=y.firstSuspendedTime;A!==0&&(g>=A?y.firstSuspendedTime=y.lastSuspendedTime=y.nextKnownPendingLevel=0:g>=y.lastSuspendedTime&&(y.lastSuspendedTime=g+1),g>y.nextKnownPendingLevel&&(y.nextKnownPendingLevel=g))}function pa(y,g){var A=y.lastExpiredTime;(A===0||A>g)&&(y.lastExpiredTime=g)}function od(y){var g=y._reactInternalFiber;if(g===void 0)throw typeof y.render=="function"?Error(t(188)):Error(t(268,Object.keys(y)));return y=Qe(g),y===null?null:y.stateNode}function ha(y,g){y=y.memoizedState,y!==null&&y.dehydrated!==null&&y.retryTime{"use strict";Object.defineProperty(tc,"__esModule",{value:!0});var UI=0;tc.__interactionsRef=null;tc.__subscriberRef=null;tc.unstable_clear=function(i){return i()};tc.unstable_getCurrent=function(){return null};tc.unstable_getThreadID=function(){return++UI};tc.unstable_trace=function(i,o,a){return a()};tc.unstable_wrap=function(i){return i};tc.unstable_subscribe=function(){};tc.unstable_unsubscribe=function(){}});var cT=Ke(mu=>{"use strict";process.env.NODE_ENV!=="production"&&function(){"use strict";Object.defineProperty(mu,"__esModule",{value:!0});var i=!0,o=0,a=0,c=0;mu.__interactionsRef=null,mu.__subscriberRef=null,i&&(mu.__interactionsRef={current:new Set},mu.__subscriberRef={current:null});function _(fe){if(!i)return fe();var _e=mu.__interactionsRef.current;mu.__interactionsRef.current=new Set;try{return fe()}finally{mu.__interactionsRef.current=_e}}function t(){return i?mu.__interactionsRef.current:null}function O(){return++c}function N(fe,_e,ce){var me=arguments.length>3&&arguments[3]!==void 0?arguments[3]:o;if(!i)return ce();var ie={__count:1,id:a++,name:fe,timestamp:_e},Oe=mu.__interactionsRef.current,Ue=new Set(Oe);Ue.add(ie),mu.__interactionsRef.current=Ue;var je=mu.__subscriberRef.current,at;try{je!==null&&je.onInteractionTraced(ie)}finally{try{je!==null&&je.onWorkStarted(Ue,me)}finally{try{at=ce()}finally{mu.__interactionsRef.current=Oe;try{je!==null&&je.onWorkStopped(Ue,me)}finally{ie.__count--,je!==null&&ie.__count===0&&je.onInteractionScheduledWorkCompleted(ie)}}}}return at}function M(fe){var _e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:o;if(!i)return fe;var ce=mu.__interactionsRef.current,me=mu.__subscriberRef.current;me!==null&&me.onWorkScheduled(ce,_e),ce.forEach(function(Ue){Ue.__count++});var ie=!1;function Oe(){var Ue=mu.__interactionsRef.current;mu.__interactionsRef.current=ce,me=mu.__subscriberRef.current;try{var je;try{me!==null&&me.onWorkStarted(ce,_e)}finally{try{je=fe.apply(void 0,arguments)}finally{mu.__interactionsRef.current=Ue,me!==null&&me.onWorkStopped(ce,_e)}}return je}finally{ie||(ie=!0,ce.forEach(function(at){at.__count--,me!==null&&at.__count===0&&me.onInteractionScheduledWorkCompleted(at)}))}}return Oe.cancel=function(){me=mu.__subscriberRef.current;try{me!==null&&me.onWorkCanceled(ce,_e)}finally{ce.forEach(function(je){je.__count--,me&&je.__count===0&&me.onInteractionScheduledWorkCompleted(je)})}},Oe}var T=null;i&&(T=new Set);function B(fe){i&&(T.add(fe),T.size===1&&(mu.__subscriberRef.current={onInteractionScheduledWorkCompleted:ne,onInteractionTraced:q,onWorkCanceled:se,onWorkScheduled:m,onWorkStarted:he,onWorkStopped:De}))}function H(fe){i&&(T.delete(fe),T.size===0&&(mu.__subscriberRef.current=null))}function q(fe){var _e=!1,ce=null;if(T.forEach(function(me){try{me.onInteractionTraced(fe)}catch(ie){_e||(_e=!0,ce=ie)}}),_e)throw ce}function ne(fe){var _e=!1,ce=null;if(T.forEach(function(me){try{me.onInteractionScheduledWorkCompleted(fe)}catch(ie){_e||(_e=!0,ce=ie)}}),_e)throw ce}function m(fe,_e){var ce=!1,me=null;if(T.forEach(function(ie){try{ie.onWorkScheduled(fe,_e)}catch(Oe){ce||(ce=!0,me=Oe)}}),ce)throw me}function he(fe,_e){var ce=!1,me=null;if(T.forEach(function(ie){try{ie.onWorkStarted(fe,_e)}catch(Oe){ce||(ce=!0,me=Oe)}}),ce)throw me}function De(fe,_e){var ce=!1,me=null;if(T.forEach(function(ie){try{ie.onWorkStopped(fe,_e)}catch(Oe){ce||(ce=!0,me=Oe)}}),ce)throw me}function se(fe,_e){var ce=!1,me=null;if(T.forEach(function(ie){try{ie.onWorkCanceled(fe,_e)}catch(Oe){ce||(ce=!0,me=Oe)}}),ce)throw me}mu.unstable_clear=_,mu.unstable_getCurrent=t,mu.unstable_getThreadID=O,mu.unstable_trace=N,mu.unstable_wrap=M,mu.unstable_subscribe=B,mu.unstable_unsubscribe=H}()});var dT=Ke((jW,FD)=>{"use strict";process.env.NODE_ENV==="production"?FD.exports=fT():FD.exports=cT()});var pT=Ke((zW,Qg)=>{"use strict";process.env.NODE_ENV!=="production"&&(Qg.exports=function i(o){"use strict";var a=Ig(),c=ki(),_=pD(),t=Q_(),O=dT(),N=0,M=1,T=2,B=3,H=4,q=5,ne=6,m=7,he=8,De=9,se=10,fe=11,_e=12,ce=13,me=14,ie=15,Oe=16,Ue=17,je=18,at=19,Dt=20,Qe=21,ut=function(){};ut=function(f,d){for(var E=arguments.length,C=new Array(E>2?E-2:0),R=2;R8)throw new Error("warningWithoutStack() currently supports at most 8 arguments.");if(!f){if(typeof console!="undefined"){var j=C.map(function(le){return""+le});j.unshift("Warning: "+d),Function.prototype.apply.call(console.error,console,j)}try{var V=0,te="Warning: "+d.replace(/%s/g,function(){return C[V++]});throw new Error(te)}catch(le){}}};var Ve=ut;function It(f){return f._reactInternalFiber}function Xt(f,d){f._reactInternalFiber=d}var rt=c.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;rt.hasOwnProperty("ReactCurrentDispatcher")||(rt.ReactCurrentDispatcher={current:null}),rt.hasOwnProperty("ReactCurrentBatchConfig")||(rt.ReactCurrentBatchConfig={suspense:null});var X=typeof Symbol=="function"&&Symbol.for,de=X?Symbol.for("react.element"):60103,Ce=X?Symbol.for("react.portal"):60106,oe=X?Symbol.for("react.fragment"):60107,He=X?Symbol.for("react.strict_mode"):60108,dt=X?Symbol.for("react.profiler"):60114,At=X?Symbol.for("react.provider"):60109,nn=X?Symbol.for("react.context"):60110,an=X?Symbol.for("react.concurrent_mode"):60111,Mn=X?Symbol.for("react.forward_ref"):60112,lr=X?Symbol.for("react.suspense"):60113,ln=X?Symbol.for("react.suspense_list"):60120,Vt=X?Symbol.for("react.memo"):60115,Dr=X?Symbol.for("react.lazy"):60116,w=X?Symbol.for("react.fundamental"):60117,jt=X?Symbol.for("react.responder"):60118,Xn=X?Symbol.for("react.scope"):60119,vr=typeof Symbol=="function"&&Symbol.iterator,jr="@@iterator";function fr(f){if(f===null||typeof f!="object")return null;var d=vr&&f[vr]||f[jr];return typeof d=="function"?d:null}var zr=Ve;zr=function(f,d){if(!f){for(var E=rt.ReactDebugCurrentFrame,C=E.getStackAddendum(),R=arguments.length,j=new Array(R>2?R-2:0),V=2;V import('./MyComponent'))`,C),f._status=Ro,f._result=R}},function(C){f._status===d0&&(f._status=Jo,f._result=C)})}}function $o(f,d,E){var C=d.displayName||d.name||"";return f.displayName||(C!==""?E+"("+C+")":E)}function qt(f){if(f==null)return null;if(typeof f.tag=="number"&&Ve(!1,"Received an unexpected object in getComponentName(). This is likely a bug in React. Please file an issue."),typeof f=="function")return f.displayName||f.name||null;if(typeof f=="string")return f;switch(f){case oe:return"Fragment";case Ce:return"Portal";case dt:return"Profiler";case He:return"StrictMode";case lr:return"Suspense";case ln:return"SuspenseList"}if(typeof f=="object")switch(f.$$typeof){case nn:return"Context.Consumer";case At:return"Context.Provider";case Mn:return $o(f,f.render,"ForwardRef");case Vt:return qt(f.type);case Dr:{var d=f,E=Ps(d);if(E)return qt(E);break}}return null}var Ai=0,su=1,mi=2,wr=4,el=6,Y0=8,Uu=16,K0=32,Xr=64,Oo=128,Mo=256,F0=512,au=1024,Li=1028,Is=932,Xl=2047,P0=2048,p0=4096,Hr=!0,Ri=!0,X0=!0,gi=!0,en=!0,bn=!0,Oi=!1,yi=!1,Wt=!1,Ru=!1,eu=!1,Q0=!0,Yi=!1,Ql=!1,ko=!1,ai=!1,ao=!1,Jl=rt.ReactCurrentOwner;function Lo(f){var d=f,E=f;if(f.alternate)for(;d.return;)d=d.return;else{var C=d;do d=C,(d.effectTag&(mi|au))!==Ai&&(E=d.return),C=d.return;while(C)}return d.tag===B?E:null}function bs(f){return Lo(f)===f}function $n(f){{var d=Jl.current;if(d!==null&&d.tag===M){var E=d,C=E.stateNode;C._warnedAboutRefsInRender||Ve(!1,"%s is accessing isMounted inside its render() function. render() should be a pure function of props and state. It should never access something that requires stale data from the previous render, such as refs. Move this logic to componentDidMount and componentDidUpdate instead.",qt(E.type)||"A component"),C._warnedAboutRefsInRender=!0}}var R=It(f);return R?Lo(R)===R:!1}function tl(f){if(Lo(f)!==f)throw Error("Unable to find node on an unmounted component.")}function fo(f){var d=f.alternate;if(!d){var E=Lo(f);if(E===null)throw Error("Unable to find node on an unmounted component.");return E!==f?null:f}for(var C=f,R=d;;){var j=C.return;if(j===null)break;var V=j.alternate;if(V===null){var te=j.return;if(te!==null){C=R=te;continue}break}if(j.child===V.child){for(var le=j.child;le;){if(le===C)return tl(j),f;if(le===R)return tl(j),d;le=le.sibling}throw Error("Unable to find node on an unmounted component.")}if(C.return!==R.return)C=j,R=V;else{for(var Be=!1,Xe=j.child;Xe;){if(Xe===C){Be=!0,C=j,R=V;break}if(Xe===R){Be=!0,R=j,C=V;break}Xe=Xe.sibling}if(!Be){for(Xe=V.child;Xe;){if(Xe===C){Be=!0,C=V,R=j;break}if(Xe===R){Be=!0,R=V,C=j;break}Xe=Xe.sibling}if(!Be)throw Error("Child was not found in either parent set. This indicates a bug in React related to the return pointer. Please file an issue.")}}if(C.alternate!==R)throw Error("Return fibers should always be each others' alternates. This error is likely caused by a bug in React. Please file an issue.")}if(C.tag!==B)throw Error("Unable to find node on an unmounted component.");return C.stateNode.current===C?f:d}function I0(f){var d=fo(f);if(!d)return null;for(var E=d;;){if(E.tag===q||E.tag===ne)return E;if(E.child){E.child.return=E,E=E.child;continue}if(E===d)return null;for(;!E.sibling;){if(!E.return||E.return===d)return null;E=E.return}E.sibling.return=E.return,E=E.sibling}return null}function Sl(f){var d=fo(f);if(!d)return null;for(var E=d;;){if(E.tag===q||E.tag===ne||Wt&&E.tag===Dt)return E;if(E.child&&E.tag!==H){E.child.return=E,E=E.child;continue}if(E===d)return null;for(;!E.sibling;){if(!E.return||E.return===d)return null;E=E.return}E.sibling.return=E.return,E=E.sibling}return null}var No=o.getPublicInstance,wt=o.getRootHostContext,bt=o.getChildHostContext,Hn=o.prepareForCommit,qr=o.resetAfterCommit,Ki=o.createInstance,Qr=o.appendInitialChild,Ou=o.finalizeInitialChildren,h0=o.prepareUpdate,Ni=o.shouldSetTextContent,v0=o.shouldDeprioritizeSubtree,vs=o.createTextInstance,Tt=o.setTimeout,co=o.clearTimeout,nl=o.noTimeout,Zl=o.now,ju=o.isPrimaryRenderer,ms=o.warnsIfNotActing,b0=o.supportsMutation,Q=o.supportsPersistence,we=o.supportsHydration,Ne=o.mountResponderInstance,Le=o.unmountResponderInstance,pt=o.getFundamentalComponentInstance,Yn=o.mountFundamentalComponent,Cn=o.shouldUpdateFundamentalComponent,cr=o.getInstanceFromNode,Si=o.appendChild,Mu=o.appendChildToContainer,zu=o.commitTextUpdate,Hu=o.commitMount,Su=o.commitUpdate,Ti=o.insertBefore,Fo=o.insertInContainerBefore,ku=o.removeChild,po=o.removeChildFromContainer,qu=o.resetTextContent,Ia=o.hideInstance,m0=o.hideTextInstance,ua=o.unhideInstance,J0=o.unhideTextInstance,oa=o.updateFundamentalComponent,ba=o.unmountFundamentalComponent,gs=o.cloneInstance,S0=o.createContainerChildSet,Qn=o.appendChildToContainerChildSet,fc=o.finalizeContainerChildren,fi=o.replaceContainerChildren,$r=o.cloneHiddenInstance,$l=o.cloneHiddenTextInstance,la=o.cloneInstance,hf=o.canHydrateInstance,Bs=o.canHydrateTextInstance,Ba=o.canHydrateSuspenseInstance,Us=o.isSuspenseInstancePending,g0=o.isSuspenseInstanceFallback,js=o.registerSuspenseInstanceRetry,ji=o.getNextHydratableSibling,U=o.getFirstHydratableChild,z=o.hydrateInstance,G=o.hydrateTextInstance,$=o.hydrateSuspenseInstance,Te=o.getNextHydratableInstanceAfterSuspenseInstance,ye=o.commitHydratedContainer,Ae=o.commitHydratedSuspenseInstance,Z=o.clearSuspenseBoundary,ke=o.clearSuspenseBoundaryFromContainer,Je=o.didNotMatchHydratedContainerTextInstance,vt=o.didNotMatchHydratedTextInstance,ue=o.didNotHydrateContainerInstance,qe=o.didNotHydrateInstance,nt=o.didNotFindHydratableContainerInstance,Ct=o.didNotFindHydratableContainerTextInstance,Mt=o.didNotFindHydratableContainerSuspenseInstance,Pt=o.didNotFindHydratableInstance,sn=o.didNotFindHydratableTextInstance,rn=o.didNotFindHydratableSuspenseInstance,Nt=/^(.*)[\\\/]/,Dn=function(f,d,E){var C="";if(d){var R=d.fileName,j=R.replace(Nt,"");if(/^index\./.test(j)){var V=R.match(Nt);if(V){var te=V[1];if(te){var le=te.replace(Nt,"");j=le+"/"+j}}}C=" (at "+j+":"+d.lineNumber+")"}else E&&(C=" (created by "+E+")");return` - in `+(f||"Unknown")+C},dr=rt.ReactDebugCurrentFrame;function er(f){switch(f.tag){case B:case H:case ne:case m:case se:case De:return"";default:var d=f._debugOwner,E=f._debugSource,C=qt(f.type),R=null;return d&&(R=qt(d.type)),Dn(C,E,R)}}function Cr(f){var d="",E=f;do d+=er(E),E=E.return;while(E);return d}var Rn=null,Lr=null;function y0(){{if(Rn===null)return null;var f=Rn._debugOwner;if(f!==null&&typeof f!="undefined")return qt(f.type)}return null}function Nr(){return Rn===null?"":Cr(Rn)}function it(){dr.getCurrentStack=null,Rn=null,Lr=null}function Et(f){dr.getCurrentStack=Nr,Rn=f,Lr=null}function et(f){Lr=f}var Ft="\u269B",un="\u26D4",fn=typeof performance!="undefined"&&typeof performance.mark=="function"&&typeof performance.clearMarks=="function"&&typeof performance.measure=="function"&&typeof performance.clearMeasures=="function",Jn=null,Sr=null,fu=null,Lu=!1,T0=!1,Z0=!1,Nu=0,_i=0,Po=new Set,rl=function(f){return Ft+" "+f},vf=function(f,d){var E=d?un+" ":Ft+" ",C=d?" Warning: "+d:"";return""+E+f+C},Tl=function(f){performance.mark(rl(f))},mf=function(f){performance.clearMarks(rl(f))},Io=function(f,d,E){var C=rl(d),R=vf(f,E);try{performance.measure(R,C)}catch(j){}performance.clearMarks(C),performance.clearMeasures(R)},ys=function(f,d){return f+" (#"+d+")"},zs=function(f,d,E){return E===null?f+" ["+(d?"update":"mount")+"]":f+"."+E},bo=function(f,d){var E=qt(f.type)||"Unknown",C=f._debugID,R=f.alternate!==null,j=zs(E,R,d);if(Lu&&Po.has(j))return!1;Po.add(j);var V=ys(j,C);return Tl(V),!0},Bo=function(f,d){var E=qt(f.type)||"Unknown",C=f._debugID,R=f.alternate!==null,j=zs(E,R,d),V=ys(j,C);mf(V)},_s=function(f,d,E){var C=qt(f.type)||"Unknown",R=f._debugID,j=f.alternate!==null,V=zs(C,j,d),te=ys(V,R);Io(V,te,E)},Qu=function(f){switch(f.tag){case B:case q:case ne:case H:case m:case se:case De:case he:return!0;default:return!1}},Tu=function(){Sr!==null&&fu!==null&&Bo(fu,Sr),fu=null,Sr=null,Z0=!1},Ei=function(){for(var f=Jn;f;)f._debugIsCurrentlyTiming&&_s(f,null,null),f=f.return},C0=function(f){f.return!==null&&C0(f.return),f._debugIsCurrentlyTiming&&bo(f,null)},$0=function(){Jn!==null&&C0(Jn)};function Uo(){Hr&&_i++}function sa(){Hr&&(Lu&&(T0=!0),Sr!==null&&Sr!=="componentWillMount"&&Sr!=="componentWillReceiveProps"&&(Z0=!0))}function es(f){if(Hr){if(!fn||Qu(f)||(Jn=f,!bo(f,null)))return;f._debugIsCurrentlyTiming=!0}}function tu(f){if(Hr){if(!fn||Qu(f))return;f._debugIsCurrentlyTiming=!1,Bo(f,null)}}function ei(f){if(Hr){if(!fn||Qu(f)||(Jn=f.return,!f._debugIsCurrentlyTiming))return;f._debugIsCurrentlyTiming=!1,_s(f,null,null)}}function ho(f){if(Hr){if(!fn||Qu(f)||(Jn=f.return,!f._debugIsCurrentlyTiming))return;f._debugIsCurrentlyTiming=!1;var d=f.tag===ce?"Rendering was suspended":"An error was thrown inside this error boundary";_s(f,null,d)}}function Bi(f,d){if(Hr){if(!fn||(Tu(),!bo(f,d)))return;fu=f,Sr=d}}function Ci(){if(Hr){if(!fn)return;if(Sr!==null&&fu!==null){var f=Z0?"Scheduled a cascading update":null;_s(fu,Sr,f)}Sr=null,fu=null}}function gf(f){if(Hr){if(Jn=f,!fn)return;Nu=0,Tl("(React Tree Reconciliation)"),$0()}}function yf(f,d){if(Hr){if(!fn)return;var E=null;if(f!==null)if(f.tag===B)E="A top-level update interrupted the previous render";else{var C=qt(f.type)||"Unknown";E="An update to "+C+" interrupted the previous render"}else Nu>1&&(E="There were cascading updates");Nu=0;var R=d?"(React Tree Reconciliation: Completed Root)":"(React Tree Reconciliation: Yielded)";Ei(),Io(R,"(React Tree Reconciliation)",E)}}function eo(){if(Hr){if(!fn)return;Lu=!0,T0=!1,Po.clear(),Tl("(Committing Changes)")}}function to(){if(Hr){if(!fn)return;var f=null;T0?f="Lifecycle hook scheduled a cascading update":Nu>0&&(f="Caused by a cascading update in earlier commit"),T0=!1,Nu++,Lu=!1,Po.clear(),Io("(Committing Changes)","(Committing Changes)",f)}}function xe(){if(Hr){if(!fn)return;_i=0,Tl("(Committing Snapshot Effects)")}}function tt(){if(Hr){if(!fn)return;var f=_i;_i=0,Io("(Committing Snapshot Effects: "+f+" Total)","(Committing Snapshot Effects)",null)}}function Ye(){if(Hr){if(!fn)return;_i=0,Tl("(Committing Host Effects)")}}function Yt(){if(Hr){if(!fn)return;var f=_i;_i=0,Io("(Committing Host Effects: "+f+" Total)","(Committing Host Effects)",null)}}function Kt(){if(Hr){if(!fn)return;_i=0,Tl("(Calling Lifecycle Methods)")}}function pr(){if(Hr){if(!fn)return;var f=_i;_i=0,Io("(Calling Lifecycle Methods: "+f+" Total)","(Calling Lifecycle Methods)",null)}}var Wr=[],xn;xn=[];var gu=-1;function Ju(f){return{current:f}}function ti(f,d){if(gu<0){Ve(!1,"Unexpected pop.");return}d!==xn[gu]&&Ve(!1,"Unexpected Fiber popped."),f.current=Wr[gu],Wr[gu]=null,xn[gu]=null,gu--}function Jr(f,d,E){gu++,Wr[gu]=f.current,xn[gu]=E,f.current=d}var Wu;Wu={};var An={};Object.freeze(An);var x0=Ju(An),Fu=Ju(!1),li=An;function Cl(f,d,E){return ai?An:E&&Xi(d)?li:x0.current}function Hs(f,d,E){if(!ai){var C=f.stateNode;C.__reactInternalMemoizedUnmaskedChildContext=d,C.__reactInternalMemoizedMaskedChildContext=E}}function Vu(f,d){if(ai)return An;var E=f.type,C=E.contextTypes;if(!C)return An;var R=f.stateNode;if(R&&R.__reactInternalMemoizedUnmaskedChildContext===d)return R.__reactInternalMemoizedMaskedChildContext;var j={};for(var V in C)j[V]=d[V];{var te=qt(E)||"Unknown";_(C,j,"context",te,Nr)}return R&&Hs(f,d,j),j}function aa(){return ai?!1:Fu.current}function Xi(f){if(ai)return!1;var d=f.childContextTypes;return d!=null}function qs(f){ai||(ti(Fu,f),ti(x0,f))}function A0(f){ai||(ti(Fu,f),ti(x0,f))}function zi(f,d,E){if(!ai){if(x0.current!==An)throw Error("Unexpected context found on stack. This error is likely caused by a bug in React. Please file an issue.");Jr(x0,d,f),Jr(Fu,E,f)}}function R0(f,d,E){if(ai)return E;var C=f.stateNode,R=d.childContextTypes;if(typeof C.getChildContext!="function"){{var j=qt(d)||"Unknown";Wu[j]||(Wu[j]=!0,Ve(!1,"%s.childContextTypes is specified but there is no getChildContext() method on the instance. You can either define getChildContext() on %s or remove childContextTypes from it.",j,j))}return E}var V;et("getChildContext"),Bi(f,"getChildContext"),V=C.getChildContext(),Ci(),et(null);for(var te in V)if(!(te in R))throw Error((qt(d)||"Unknown")+'.getChildContext(): key "'+te+'" is not defined in childContextTypes.');{var le=qt(d)||"Unknown";_(R,V,"child context",le,Nr)}return a({},E,{},V)}function Hi(f){if(ai)return!1;var d=f.stateNode,E=d&&d.__reactInternalMemoizedMergedChildContext||An;return li=x0.current,Jr(x0,E,f),Jr(Fu,Fu.current,f),!0}function il(f,d,E){if(!ai){var C=f.stateNode;if(!C)throw Error("Expected to have an instance by this point. This error is likely caused by a bug in React. Please file an issue.");if(E){var R=R0(f,d,li);C.__reactInternalMemoizedMergedChildContext=R,ti(Fu,f),ti(x0,f),Jr(x0,R,f),Jr(Fu,E,f)}else ti(Fu,f),Jr(Fu,E,f)}}function xl(f){if(ai)return An;if(!(bs(f)&&f.tag===M))throw Error("Expected subtree parent to be a mounted class component. This error is likely caused by a bug in React. Please file an issue.");var d=f;do{switch(d.tag){case B:return d.stateNode.context;case M:{var E=d.type;if(Xi(E))return d.stateNode.__reactInternalMemoizedMergedChildContext;break}}d=d.return}while(d!==null);throw Error("Found unexpected detached subtree parent. This error is likely caused by a bug in React. Please file an issue.")}var B0=1,O0=2,vo=t.unstable_runWithPriority,Pu=t.unstable_scheduleCallback,Zu=t.unstable_cancelCallback,ts=t.unstable_shouldYield,Es=t.unstable_requestPaint,fa=t.unstable_now,_f=t.unstable_getCurrentPriorityLevel,$u=t.unstable_ImmediatePriority,Ds=t.unstable_UserBlockingPriority,Ar=t.unstable_NormalPriority,no=t.unstable_LowPriority,nu=t.unstable_IdlePriority;if(bn&&!(O.__interactionsRef!=null&&O.__interactionsRef.current!=null))throw Error("It is not supported to run the profiling version of a renderer (for example, `react-dom/profiling`) without also replacing the `scheduler/tracing` module with `scheduler/tracing-profiling`. Your bundler might have a setting for aliasing both modules. Learn more at http://fb.me/react-profiling");var cu={},Fi=99,ni=98,Kn=97,e0=96,_0=95,E0=90,Fn=ts,ae=Es!==void 0?Es:function(){},re=null,Fe=null,Re=!1,st=fa(),mt=st<1e4?fa:function(){return fa()-st};function Jt(){switch(_f()){case $u:return Fi;case Ds:return ni;case Ar:return Kn;case no:return e0;case nu:return _0;default:throw Error("Unknown priority level.")}}function On(f){switch(f){case Fi:return $u;case ni:return Ds;case Kn:return Ar;case e0:return no;case _0:return nu;default:throw Error("Unknown priority level.")}}function Sn(f,d){var E=On(f);return vo(E,d)}function _n(f,d,E){var C=On(f);return Pu(C,d,E)}function Tn(f){return re===null?(re=[f],Fe=Pu($u,Pi)):re.push(f),cu}function ir(f){f!==cu&&Zu(f)}function Bt(){if(Fe!==null){var f=Fe;Fe=null,Zu(f)}Pi()}function Pi(){if(!Re&&re!==null){Re=!0;var f=0;try{var d=!0,E=re;Sn(Fi,function(){for(;f1?d-1:0),C=1;C2?E-2:0),R=2;R0&&(za.forEach(function(Lt){f.add(qt(Lt.type)||"Component"),ns.add(Lt.type)}),za=[]);var d=new Set;Ha.length>0&&(Ha.forEach(function(Lt){d.add(qt(Lt.type)||"Component"),ns.add(Lt.type)}),Ha=[]);var E=new Set;qa.length>0&&(qa.forEach(function(Lt){E.add(qt(Lt.type)||"Component"),ns.add(Lt.type)}),qa=[]);var C=new Set;da.length>0&&(da.forEach(function(Lt){C.add(qt(Lt.type)||"Component"),ns.add(Lt.type)}),da=[]);var R=new Set;Ss.length>0&&(Ss.forEach(function(Lt){R.add(qt(Lt.type)||"Component"),ns.add(Lt.type)}),Ss=[]);var j=new Set;if(Ts.length>0&&(Ts.forEach(function(Lt){j.add(qt(Lt.type)||"Component"),ns.add(Lt.type)}),Ts=[]),d.size>0){var V=zo(d);Ve(!1,`Using UNSAFE_componentWillMount in strict mode is not recommended and may indicate bugs in your code. See https://fb.me/react-unsafe-component-lifecycles for details. - -* Move code with side effects to componentDidMount, and set initial state in the constructor. - -Please update the following components: %s`,V)}if(C.size>0){var te=zo(C);Ve(!1,`Using UNSAFE_componentWillReceiveProps in strict mode is not recommended and may indicate bugs in your code. See https://fb.me/react-unsafe-component-lifecycles for details. - -* Move data fetching code or side effects to componentDidUpdate. -* If you're updating state whenever props change, refactor your code to use memoization techniques or move it to static getDerivedStateFromProps. Learn more at: https://fb.me/react-derived-state - -Please update the following components: %s`,te)}if(j.size>0){var le=zo(j);Ve(!1,`Using UNSAFE_componentWillUpdate in strict mode is not recommended and may indicate bugs in your code. See https://fb.me/react-unsafe-component-lifecycles for details. - -* Move data fetching code or side effects to componentDidUpdate. - -Please update the following components: %s`,le)}if(f.size>0){var Be=zo(f);Ws(!1,`componentWillMount has been renamed, and is not recommended for use. See https://fb.me/react-unsafe-component-lifecycles for details. - -* Move code with side effects to componentDidMount, and set initial state in the constructor. -* Rename componentWillMount to UNSAFE_componentWillMount to suppress this warning in non-strict mode. In React 17.x, only the UNSAFE_ name will work. To rename all deprecated lifecycles to their new names, you can run \`npx react-codemod rename-unsafe-lifecycles\` in your project source folder. - -Please update the following components: %s`,Be)}if(E.size>0){var Xe=zo(E);Ws(!1,`componentWillReceiveProps has been renamed, and is not recommended for use. See https://fb.me/react-unsafe-component-lifecycles for details. - -* Move data fetching code or side effects to componentDidUpdate. -* If you're updating state whenever props change, refactor your code to use memoization techniques or move it to static getDerivedStateFromProps. Learn more at: https://fb.me/react-derived-state -* Rename componentWillReceiveProps to UNSAFE_componentWillReceiveProps to suppress this warning in non-strict mode. In React 17.x, only the UNSAFE_ name will work. To rename all deprecated lifecycles to their new names, you can run \`npx react-codemod rename-unsafe-lifecycles\` in your project source folder. - -Please update the following components: %s`,Xe)}if(R.size>0){var ht=zo(R);Ws(!1,`componentWillUpdate has been renamed, and is not recommended for use. See https://fb.me/react-unsafe-component-lifecycles for details. - -* Move data fetching code or side effects to componentDidUpdate. -* Rename componentWillUpdate to UNSAFE_componentWillUpdate to suppress this warning in non-strict mode. In React 17.x, only the UNSAFE_ name will work. To rename all deprecated lifecycles to their new names, you can run \`npx react-codemod rename-unsafe-lifecycles\` in your project source folder. - -Please update the following components: %s`,ht)}};var Ho=new Map,Df=new Set;Rl.recordLegacyContextWarning=function(f,d){var E=ud(f);if(E===null){Ve(!1,"Expected to find a StrictMode component in a strict mode tree. This error is likely caused by a bug in React. Please file an issue.");return}if(!Df.has(f.type)){var C=Ho.get(E);(f.type.contextTypes!=null||f.type.childContextTypes!=null||d!==null&&typeof d.getChildContext=="function")&&(C===void 0&&(C=[],Ho.set(E,C)),C.push(f))}},Rl.flushLegacyContextWarning=function(){Ho.forEach(function(f,d){var E=new Set;f.forEach(function(j){E.add(qt(j.type)||"Component"),Df.add(j.type)});var C=zo(E),R=Cr(d);Ve(!1,`Legacy context API has been detected within a strict-mode tree. - -The old API will be supported in all 16.x releases, but applications using it should migrate to the new version. - -Please update the following components: %s - -Learn more about this warning here: https://fb.me/react-legacy-context%s`,C,R)})},Rl.discardPendingWarnings=function(){za=[],Ha=[],qa=[],da=[],Ss=[],Ts=[],Ho=new Map}}var ol=null,Gu=null,Wa=function(f){ol=f};function r0(f){{if(ol===null)return f;var d=ol(f);return d===void 0?f:d.current}}function j0(f){return r0(f)}function wf(f){{if(ol===null)return f;var d=ol(f);if(d===void 0){if(f!=null&&typeof f.render=="function"){var E=r0(f.render);if(f.render!==E){var C={$$typeof:Mn,render:E};return f.displayName!==void 0&&(C.displayName=f.displayName),C}}return f}return d.current}}function Wc(f,d){{if(ol===null)return!1;var E=f.elementType,C=d.type,R=!1,j=typeof C=="object"&&C!==null?C.$$typeof:null;switch(f.tag){case M:{typeof C=="function"&&(R=!0);break}case N:{(typeof C=="function"||j===Dr)&&(R=!0);break}case fe:{(j===Mn||j===Dr)&&(R=!0);break}case me:case ie:{(j===Vt||j===Dr)&&(R=!0);break}default:return!1}if(R){var V=ol(E);if(V!==void 0&&V===ol(C))return!0}return!1}}function pc(f){{if(ol===null||typeof WeakSet!="function")return;Gu===null&&(Gu=new WeakSet),Gu.add(f)}}var Ol=function(f,d){{if(ol===null)return;var E=d.staleFamilies,C=d.updatedFamilies;nf(),Op(function(){pa(f.current,C,E)})}},Cs=function(f,d){{if(f.context!==An)return;nf(),pv(function(){o_(d,f,null,null)})}};function pa(f,d,E){{var C=f.alternate,R=f.child,j=f.sibling,V=f.tag,te=f.type,le=null;switch(V){case N:case ie:case M:le=te;break;case fe:le=te.render;break;default:break}if(ol===null)throw new Error("Expected resolveFamily to be set during hot reload.");var Be=!1,Xe=!1;if(le!==null){var ht=ol(le);ht!==void 0&&(E.has(ht)?Xe=!0:d.has(ht)&&(V===M?Xe=!0:Be=!0))}Gu!==null&&(Gu.has(f)||C!==null&&Gu.has(C))&&(Xe=!0),Xe&&(f._debugNeedsRemount=!0),(Xe||Be)&&gl(f,Un),R!==null&&!Xe&&pa(R,d,E),j!==null&&pa(j,d,E)}}var od=function(f,d){{var E=new Set,C=new Set(d.map(function(R){return R.current}));return ha(f.current,C,E),E}};function ha(f,d,E){{var C=f.child,R=f.sibling,j=f.tag,V=f.type,te=null;switch(j){case N:case ie:case M:te=V;break;case fe:te=V.render;break;default:break}var le=!1;te!==null&&d.has(te)&&(le=!0),le?hc(f,E):C!==null&&ha(C,d,E),R!==null&&ha(R,d,E)}}function hc(f,d){{var E=Vc(f,d);if(E)return;for(var C=f;;){switch(C.tag){case q:d.add(C.stateNode);return;case H:d.add(C.stateNode.containerInfo);return;case B:d.add(C.stateNode.containerInfo);return}if(C.return===null)throw new Error("Expected to reach root first.");C=C.return}}}function Vc(f,d){for(var E=f,C=!1;;){if(E.tag===q)C=!0,d.add(E.stateNode);else if(E.child!==null){E.child.return=E,E=E.child;continue}if(E===f)return C;for(;E.sibling===null;){if(E.return===null||E.return===f)return C;E=E.return}E.sibling.return=E.return,E=E.sibling}return!1}function qi(f,d){if(f&&f.defaultProps){var E=a({},d),C=f.defaultProps;for(var R in C)E[R]===void 0&&(E[R]=C[R]);return E}return d}function y(f){if(Zo(f),f._status!==Ro)throw f._result;return f._result}var g=Ju(null),A;A={};var F=null,b=null,J=null,pe=!1;function gt(){F=null,b=null,J=null,pe=!1}function xt(){pe=!0}function kt(){pe=!1}function xr(f,d){var E=f.type._context;ju?(Jr(g,E._currentValue,f),E._currentValue=d,E._currentRenderer===void 0||E._currentRenderer===null||E._currentRenderer===A||Ve(!1,"Detected multiple renderers concurrently rendering the same context provider. This is currently unsupported."),E._currentRenderer=A):(Jr(g,E._currentValue2,f),E._currentValue2=d,E._currentRenderer2===void 0||E._currentRenderer2===null||E._currentRenderer2===A||Ve(!1,"Detected multiple renderers concurrently rendering the same context provider. This is currently unsupported."),E._currentRenderer2=A)}function i0(f){var d=g.current;ti(g,f);var E=f.type._context;ju?E._currentValue=d:E._currentValue2=d}function du(f,d,E){if(go(E,d))return 0;var C=typeof f._calculateChangedBits=="function"?f._calculateChangedBits(E,d):Vr;return(C&Vr)!==C&&Qt(!1,"calculateChangedBits: Expected the return value to be a 31-bit integer. Instead received: %s",C),C|0}function z0(f,d){for(var E=f;E!==null;){var C=E.alternate;if(E.childExpirationTime=d&&sp(),E.firstContext=null)}}function We(f,d){if(pe&&Qt(!1,"Context can only be read while React is rendering. In classes, you can read it in the render method or getDerivedStateFromProps. In function components, you can read it directly in the function body, but not inside Hooks like useReducer() or useMemo()."),J!==f){if(!(d===!1||d===0)){var E;typeof d!="number"||d===Vr?(J=f,E=Vr):E=d;var C={context:f,observedBits:E,next:null};if(b===null){if(F===null)throw Error("Context can only be read while React is rendering. In classes, you can read it in the render method or getDerivedStateFromProps. In function components, you can read it directly in the function body, but not inside Hooks like useReducer() or useMemo().");b=C,F.dependencies={expirationTime:ft,firstContext:C,responders:null}}else b=b.next=C}}return ju?f._currentValue:f._currentValue2}var ze=0,lt=1,$t=2,Wn=3,si=!1,ur,ci;ur=!1,ci=null;function Qi(f){var d={baseState:f,firstUpdate:null,lastUpdate:null,firstCapturedUpdate:null,lastCapturedUpdate:null,firstEffect:null,lastEffect:null,firstCapturedEffect:null,lastCapturedEffect:null};return d}function Gr(f){var d={baseState:f.baseState,firstUpdate:f.firstUpdate,lastUpdate:f.lastUpdate,firstCapturedUpdate:null,lastCapturedUpdate:null,firstEffect:null,lastEffect:null,firstCapturedEffect:null,lastCapturedEffect:null};return d}function Cu(f,d){var E={expirationTime:f,suspenseConfig:d,tag:ze,payload:null,callback:null,next:null,nextEffect:null};return E.priority=Jt(),E}function Va(f,d){f.lastUpdate===null?f.firstUpdate=f.lastUpdate=d:(f.lastUpdate.next=d,f.lastUpdate=d)}function Ga(f,d){var E=f.alternate,C,R;E===null?(C=f.updateQueue,R=null,C===null&&(C=f.updateQueue=Qi(f.memoizedState))):(C=f.updateQueue,R=E.updateQueue,C===null?R===null?(C=f.updateQueue=Qi(f.memoizedState),R=E.updateQueue=Qi(E.memoizedState)):C=f.updateQueue=Gr(R):R===null&&(R=E.updateQueue=Gr(C))),R===null||C===R?Va(C,d):C.lastUpdate===null||R.lastUpdate===null?(Va(C,d),Va(R,d)):(Va(C,d),R.lastUpdate=d),f.tag===M&&(ci===C||R!==null&&ci===R)&&!ur&&(Ve(!1,"An update (setState, replaceState, or forceUpdate) was scheduled from inside an update function. Update functions should be pure, with zero side-effects. Consider using componentDidUpdate or a callback."),ur=!0)}function ld(f,d){var E=f.updateQueue;E===null?E=f.updateQueue=Qi(f.memoizedState):E=S2(f,E),E.lastCapturedUpdate===null?E.firstCapturedUpdate=E.lastCapturedUpdate=d:(E.lastCapturedUpdate.next=d,E.lastCapturedUpdate=d)}function S2(f,d){var E=f.alternate;return E!==null&&d===E.updateQueue&&(d=f.updateQueue=Gr(d)),d}function T2(f,d,E,C,R,j){switch(E.tag){case lt:{var V=E.payload;if(typeof V=="function"){xt(),Ri&&f.mode&mr&&V.call(j,C,R);var te=V.call(j,C,R);return kt(),te}return V}case Wn:f.effectTag=f.effectTag&~p0|Xr;case ze:{var le=E.payload,Be;return typeof le=="function"?(xt(),Ri&&f.mode&mr&&le.call(j,C,R),Be=le.call(j,C,R),kt()):Be=le,Be==null?C:a({},C,Be)}case $t:return si=!0,C}return C}function Sf(f,d,E,C,R){si=!1,d=S2(f,d),ci=d;for(var j=d.baseState,V=null,te=ft,le=d.firstUpdate,Be=j;le!==null;){var Xe=le.expirationTime;if(Xe from render. Or maybe you meant to call this function rather than return it."))}function Eh(f){function d(ot,Ot){if(!!f){var $e=ot.lastEffect;$e!==null?($e.nextEffect=Ot,ot.lastEffect=Ot):ot.firstEffect=ot.lastEffect=Ot,Ot.nextEffect=null,Ot.effectTag=Y0}}function E(ot,Ot){if(!f)return null;for(var $e=Ot;$e!==null;)d(ot,$e),$e=$e.sibling;return null}function C(ot,Ot){for(var $e=new Map,Ut=Ot;Ut!==null;)Ut.key!==null?$e.set(Ut.key,Ut):$e.set(Ut.index,Ut),Ut=Ut.sibling;return $e}function R(ot,Ot,$e){var Ut=Co(ot,Ot,$e);return Ut.index=0,Ut.sibling=null,Ut}function j(ot,Ot,$e){if(ot.index=$e,!f)return Ot;var Ut=ot.alternate;if(Ut!==null){var Pn=Ut.index;return PnKr?(xu=hr,hr=null):xu=hr.sibling;var w0=Lt(ot,hr,$e[Kr],Ut);if(w0===null){hr===null&&(hr=xu);break}f&&hr&&w0.alternate===null&&d(ot,hr),hu=j(w0,hu,Kr),Ku===null?pi=w0:Ku.sibling=w0,Ku=w0,hr=xu}if(Kr===$e.length)return E(ot,hr),pi;if(hr===null){for(;Kr<$e.length;Kr++){var W0=ht(ot,$e[Kr],Ut);W0!==null&&(hu=j(W0,hu,Kr),Ku===null?pi=W0:Ku.sibling=W0,Ku=W0)}return pi}for(var ks=C(ot,hr);Kr<$e.length;Kr++){var Xu=Gt(ks,ot,Kr,$e[Kr],Ut);Xu!==null&&(f&&Xu.alternate!==null&&ks.delete(Xu.key===null?Kr:Xu.key),hu=j(Xu,hu,Kr),Ku===null?pi=Xu:Ku.sibling=Xu,Ku=Xu)}return f&&ks.forEach(function(yl){return d(ot,yl)}),pi}function kr(ot,Ot,$e,Ut){var Pn=fr($e);if(typeof Pn!="function")throw Error("An object is not an iterable. This error is likely caused by a bug in React. Please file an issue.");{typeof Symbol=="function"&&$e[Symbol.toStringTag]==="Generator"&&(Qc||Qt(!1,"Using Generators as children is unsupported and will likely yield unexpected results because enumerating a generator mutates it. You may convert it to an array with `Array.from()` or the `[...spread]` operator before rendering. Keep in mind you might need to polyfill these features for older browsers."),Qc=!0),$e.entries===Pn&&(pd||Qt(!1,"Using Maps as children is unsupported and will likely yield unexpected results. Convert it to a sequence/iterable of keyed ReactElements instead."),pd=!0);var vn=Pn.call($e);if(vn)for(var Wi=null,pi=vn.next();!pi.done;pi=vn.next()){var Ku=pi.value;Wi=zt(Ku,Wi)}}var hr=Pn.call($e);if(hr==null)throw Error("An iterable object provided no iterator.");for(var hu=null,Kr=null,xu=Ot,w0=0,W0=0,ks=null,Xu=hr.next();xu!==null&&!Xu.done;W0++,Xu=hr.next()){xu.index>W0?(ks=xu,xu=null):ks=xu.sibling;var yl=Lt(ot,xu,Xu.value,Ut);if(yl===null){xu===null&&(xu=ks);break}f&&xu&&yl.alternate===null&&d(ot,xu),w0=j(yl,w0,W0),Kr===null?hu=yl:Kr.sibling=yl,Kr=yl,xu=ks}if(Xu.done)return E(ot,xu),hu;if(xu===null){for(;!Xu.done;W0++,Xu=hr.next()){var uf=ht(ot,Xu.value,Ut);uf!==null&&(w0=j(uf,w0,W0),Kr===null?hu=uf:Kr.sibling=uf,Kr=uf)}return hu}for(var Vo=C(ot,xu);!Xu.done;W0++,Xu=hr.next()){var Ls=Gt(Vo,ot,W0,Xu.value,Ut);Ls!==null&&(f&&Ls.alternate!==null&&Vo.delete(Ls.key===null?W0:Ls.key),w0=j(Ls,w0,W0),Kr===null?hu=Ls:Kr.sibling=Ls,Kr=Ls)}return f&&Vo.forEach(function($d){return d(ot,$d)}),hu}function oi(ot,Ot,$e,Ut){if(Ot!==null&&Ot.tag===ne){E(ot,Ot.sibling);var Pn=R(Ot,$e,Ut);return Pn.return=ot,Pn}E(ot,Ot);var vn=_g($e,ot.mode,Ut);return vn.return=ot,vn}function Mi(ot,Ot,$e,Ut){for(var Pn=$e.key,vn=Ot;vn!==null;){if(vn.key===Pn)if(vn.tag===m?$e.type===oe:vn.elementType===$e.type||Wc(vn,$e)){E(ot,vn.sibling);var Wi=R(vn,$e.type===oe?$e.props.children:$e.props,Ut);return Wi.ref=mc(ot,vn,$e),Wi.return=ot,Wi._debugSource=$e._source,Wi._debugOwner=$e._owner,Wi}else{E(ot,vn);break}else d(ot,vn);vn=vn.sibling}if($e.type===oe){var pi=rf($e.props.children,ot.mode,Ut,$e.key);return pi.return=ot,pi}else{var Ku=yg($e,ot.mode,Ut);return Ku.ref=mc(ot,Ot,$e),Ku.return=ot,Ku}}function N0(ot,Ot,$e,Ut){for(var Pn=$e.key,vn=Ot;vn!==null;){if(vn.key===Pn)if(vn.tag===H&&vn.stateNode.containerInfo===$e.containerInfo&&vn.stateNode.implementation===$e.implementation){E(ot,vn.sibling);var Wi=R(vn,$e.children||[],Ut);return Wi.return=ot,Wi}else{E(ot,vn);break}else d(ot,vn);vn=vn.sibling}var pi=Eg($e,ot.mode,Ut);return pi.return=ot,pi}function $i(ot,Ot,$e,Ut){var Pn=typeof $e=="object"&&$e!==null&&$e.type===oe&&$e.key===null;Pn&&($e=$e.props.children);var vn=typeof $e=="object"&&$e!==null;if(vn)switch($e.$$typeof){case de:return V(Mi(ot,Ot,$e,Ut));case Ce:return V(N0(ot,Ot,$e,Ut))}if(typeof $e=="string"||typeof $e=="number")return V(oi(ot,Ot,""+$e,Ut));if(Zc($e))return gn(ot,Ot,$e,Ut);if(fr($e))return kr(ot,Ot,$e,Ut);if(vn&&gc(ot,$e),typeof $e=="function"&&hd(),typeof $e=="undefined"&&!Pn)switch(ot.tag){case M:{var Wi=ot.stateNode;if(Wi.render._isMockFunction)break}case N:{var pi=ot.type;throw Error((pi.displayName||pi.name||"Component")+"(...): Nothing was returned from render. This usually means a return statement is missing. Or, to render nothing, return null.")}}return E(ot,Ot)}return $i}var Cf=Eh(!0),$c=Eh(!1);function Dh(f,d){if(!(f===null||d.child===f.child))throw Error("Resuming work not yet implemented.");if(d.child!==null){var E=d.child,C=Co(E,E.pendingProps,E.expirationTime);for(d.child=C,C.return=d;E.sibling!==null;)E=E.sibling,C=C.sibling=Co(E,E.pendingProps,E.expirationTime),C.return=d;C.sibling=null}}function am(f,d){for(var E=f.child;E!==null;)kv(E,d),E=E.sibling}var Gs={},ga=Ju(Gs),iu=Ju(Gs),M0=Ju(Gs);function o0(f){if(f===Gs)throw Error("Expected host context to exist. This error is likely caused by a bug in React. Please file an issue.");return f}function rs(){var f=o0(M0.current);return f}function Ka(f,d){Jr(M0,d,f),Jr(iu,f,f),Jr(ga,Gs,f);var E=wt(d);ti(ga,f),Jr(ga,E,f)}function uo(f){ti(ga,f),ti(iu,f),ti(M0,f)}function fl(){var f=o0(ga.current);return f}function yc(f){var d=o0(M0.current),E=o0(ga.current),C=bt(E,f.type,d);E!==C&&(Jr(iu,f,f),Jr(ga,C,f))}function L2(f){iu.current===f&&(ti(ga,f),ti(iu,f))}var wh=0,xf=1,Af=1,e1=2,Ll=Ju(wh);function t1(f,d){return(f&d)!=0}function ya(f){return f&xf}function vd(f,d){return f&xf|d}function md(f,d){return f|d}function Fr(f,d){Jr(Ll,d,f)}function Ea(f){ti(Ll,f)}function N2(f,d){var E=f.memoizedState;if(E!==null)return E.dehydrated!==null;var C=f.memoizedProps;return C.fallback===void 0?!1:C.unstable_avoidThisFallback!==!0?!0:!d}function n1(f){for(var d=f;d!==null;){if(d.tag===ce){var E=d.memoizedState;if(E!==null){var C=E.dehydrated;if(C===null||Us(C)||g0(C))return d}}else if(d.tag===at&&d.memoizedProps.revealOrder!==void 0){var R=(d.effectTag&Xr)!==Ai;if(R)return d}else if(d.child!==null){d.child.return=d,d=d.child;continue}if(d===f)return null;for(;d.sibling===null;){if(d.return===null||d.return===f)return null;d=d.return}d.sibling.return=d.return,d=d.sibling}return null}var gd={},wi=Array.isArray;function F2(f,d,E,C){return{fiber:C,props:d,responder:f,rootEventTypes:null,state:E}}function fm(f,d,E,C,R){var j=gd,V=f.getInitialState;V!==null&&(j=V(d));var te=F2(f,d,j,E);if(!R)for(var le=E;le!==null;){var Be=le.tag;if(Be===q){R=le.stateNode;break}else if(Be===B){R=le.stateNode.containerInfo;break}le=le.return}Ne(f,te,d,j,R),C.set(f,te)}function yd(f,d,E,C,R){var j,V;if(f&&(j=f.responder,V=f.props),!(j&&j.$$typeof===jt))throw Error("An invalid value was used as an event listener. Expect one or many event listeners created via React.unstable_useResponder().");var te=V;if(E.has(j)){Qt(!1,'Duplicate event responder "%s" found in event listeners. Event listeners passed to elements cannot use the same event responder more than once.',j.displayName);return}E.add(j);var le=C.get(j);le===void 0?fm(j,te,d,C,R):(le.props=te,le.fiber=d)}function hn(f,d,E){var C=new Set,R=d.dependencies;if(f!=null){R===null&&(R=d.dependencies={expirationTime:ft,firstContext:null,responders:new Map});var j=R.responders;if(j===null&&(j=new Map),wi(f))for(var V=0,te=f.length;V0){var j=R.dispatch;if(xs!==null){var V=xs.get(R);if(V!==void 0){xs.delete(R);var te=C.memoizedState,le=V;do{var Be=le.action;te=f(te,Be),le=le.next}while(le!==null);return go(te,C.memoizedState)||sp(),C.memoizedState=te,C.baseUpdate===R.last&&(C.baseState=te),R.lastRenderedState=te,[te,j]}}return[C.memoizedState,j]}var Xe=R.last,ht=C.baseUpdate,Lt=C.baseState,Gt;if(ht!==null?(Xe!==null&&(Xe.next=null),Gt=ht.next):Gt=Xe!==null?Xe.next:null,Gt!==null){var zt=Lt,gn=null,kr=null,oi=ht,Mi=Gt,N0=!1;do{var $i=Mi.expirationTime;if($iIu&&(Iu=$i,Qd(Iu));else if(yv($i,Mi.suspenseConfig),Mi.eagerReducer===f)zt=Mi.eagerState;else{var ot=Mi.action;zt=f(zt,ot)}oi=Mi,Mi=Mi.next}while(Mi!==null&&Mi!==Gt);N0||(kr=oi,gn=zt),go(zt,C.memoizedState)||sp(),C.memoizedState=zt,C.baseUpdate=kr,C.baseState=gn,R.lastRenderedState=zt}var Ot=R.dispatch;return[C.memoizedState,Ot]}function Pf(f){var d=wc();typeof f=="function"&&(f=f()),d.memoizedState=d.baseState=f;var E=d.queue={last:null,dispatch:null,lastRenderedReducer:P2,lastRenderedState:f},C=E.dispatch=a1.bind(null,dl,E);return[d.memoizedState,C]}function o1(f){return u1(P2,f)}function Ja(f,d,E,C){var R={tag:f,create:d,destroy:E,deps:C,next:null};if(is===null)is=Qa(),is.lastEffect=R.next=R;else{var j=is.lastEffect;if(j===null)is.lastEffect=R.next=R;else{var V=j.next;j.next=R,R.next=V,is.lastEffect=R}}return R}function l1(f){var d=wc(),E={current:f};return Object.seal(E),d.memoizedState=E,E}function I2(f){var d=i1();return d.memoizedState}function wd(f,d,E,C){var R=wc(),j=C===void 0?null:C;kf|=f,R.memoizedState=Ja(d,E,void 0,j)}function Sc(f,d,E,C){var R=i1(),j=C===void 0?null:C,V=void 0;if(jn!==null){var te=jn.memoizedState;if(V=te.destroy,j!==null){var le=te.deps;if(Nf(j,le)){Ja(Of,E,V,j);return}}}kf|=f,R.memoizedState=Ja(d,E,V,j)}function s1(f,d){return typeof jest!="undefined"&&Mv(dl),wd(wr|F0,sr|r1,f,d)}function Fl(f,d){return typeof jest!="undefined"&&Mv(dl),Sc(wr|F0,sr|r1,f,d)}function Da(f,d){return wd(wr,Mf|cl,f,d)}function Ch(f,d){return Sc(wr,Mf|cl,f,d)}function b2(f,d){if(typeof d=="function"){var E=d,C=f();return E(C),function(){E(null)}}else if(d!=null){var R=d;R.hasOwnProperty("current")||Qt(!1,"Expected useImperativeHandle() first argument to either be a ref callback or React.createRef() object. Instead received: %s.","an object with keys {"+Object.keys(R).join(", ")+"}");var j=f();return R.current=j,function(){R.current=null}}}function B2(f,d,E){typeof d!="function"&&Qt(!1,"Expected useImperativeHandle() second argument to be a function that creates a handle. Instead received: %s.",d!==null?typeof d:"null");var C=E!=null?E.concat([f]):null;return wd(wr,Mf|cl,b2.bind(null,d,f),C)}function xh(f,d,E){typeof d!="function"&&Qt(!1,"Expected useImperativeHandle() second argument to be a function that creates a handle. Instead received: %s.",d!==null?typeof d:"null");var C=E!=null?E.concat([f]):null;return Sc(wr,Mf|cl,b2.bind(null,d,f),C)}function Sd(f,d){}var Ah=Sd;function Pl(f,d){var E=wc(),C=d===void 0?null:d;return E.memoizedState=[f,C],f}function os(f,d){var E=i1(),C=d===void 0?null:d,R=E.memoizedState;if(R!==null&&C!==null){var j=R[1];if(Nf(C,j))return R[0]}return E.memoizedState=[f,C],f}function As(f,d){var E=wc(),C=d===void 0?null:d,R=f();return E.memoizedState=[R,C],R}function Ys(f,d){var E=i1(),C=d===void 0?null:d,R=E.memoizedState;if(R!==null&&C!==null){var j=R[1];if(Nf(C,j))return R[0]}var V=f();return E.memoizedState=[V,C],V}function U2(f,d){var E=Pf(f),C=E[0],R=E[1];return s1(function(){t.unstable_next(function(){var j=qo.suspense;qo.suspense=d===void 0?null:d;try{R(f)}finally{qo.suspense=j}})},[f,d]),C}function Rh(f,d){var E=o1(f),C=E[0],R=E[1];return Fl(function(){t.unstable_next(function(){var j=qo.suspense;qo.suspense=d===void 0?null:d;try{R(f)}finally{qo.suspense=j}})},[f,d]),C}function j2(f){var d=Pf(!1),E=d[0],C=d[1],R=Pl(function(j){C(!0),t.unstable_next(function(){var V=qo.suspense;qo.suspense=f===void 0?null:f;try{C(!1),j()}finally{qo.suspense=V}})},[f,E]);return[R,E]}function z2(f){var d=o1(!1),E=d[0],C=d[1],R=os(function(j){C(!0),t.unstable_next(function(){var V=qo.suspense;qo.suspense=f===void 0?null:f;try{C(!1),j()}finally{qo.suspense=V}})},[f,E]);return[R,E]}function a1(f,d,E){if(!(Dc=0){var E=c1()-d1;f.actualDuration+=E,d&&(f.selfBaseDuration=E),d1=-1}}var bl=null,$a=null,wa=!1;function V2(){wa&&Qt(!1,"We should not be hydrating here. This is a bug in React. Please file a bug.")}function G2(f){if(!we)return!1;var d=f.stateNode.containerInfo;return $a=U(d),bl=f,wa=!0,!0}function hm(f,d){return we?($a=ji(d),X2(f),wa=!0,!0):!1}function Y2(f,d){switch(f.tag){case B:ue(f.stateNode.containerInfo,d);break;case q:qe(f.type,f.memoizedProps,f.stateNode,d);break}var E=nE();E.stateNode=d,E.return=f,E.effectTag=Y0,f.lastEffect!==null?(f.lastEffect.nextEffect=E,f.lastEffect=E):f.firstEffect=f.lastEffect=E}function Fh(f,d){switch(d.effectTag=d.effectTag&~au|mi,f.tag){case B:{var E=f.stateNode.containerInfo;switch(d.tag){case q:var C=d.type,R=d.pendingProps;nt(E,C,R);break;case ne:var j=d.pendingProps;Ct(E,j);break;case ce:Mt(E);break}break}case q:{var V=f.type,te=f.memoizedProps,le=f.stateNode;switch(d.tag){case q:var Be=d.type,Xe=d.pendingProps;Pt(V,te,le,Be,Xe);break;case ne:var ht=d.pendingProps;sn(V,te,le,ht);break;case ce:rn(V,te,le);break}break}default:return}}function Ph(f,d){switch(f.tag){case q:{var E=f.type,C=f.pendingProps,R=hf(d,E,C);return R!==null?(f.stateNode=R,!0):!1}case ne:{var j=f.pendingProps,V=Bs(d,j);return V!==null?(f.stateNode=V,!0):!1}case ce:{if(Oi){var te=Ba(d);if(te!==null){var le={dehydrated:te,retryTime:Di};f.memoizedState=le;var Be=rE(te);return Be.return=f,f.child=Be,!0}}return!1}default:return!1}}function K2(f){if(!!wa){var d=$a;if(!d){Fh(bl,f),wa=!1,bl=f;return}var E=d;if(!Ph(f,d)){if(d=ji(E),!d||!Ph(f,d)){Fh(bl,f),wa=!1,bl=f;return}Y2(bl,E)}bl=f,$a=U(d)}}function vm(f,d,E){if(!we)throw Error("Expected prepareToHydrateHostInstance() to never be called. This error is likely caused by a bug in React. Please file an issue.");var C=f.stateNode,R=z(C,f.type,f.memoizedProps,d,E,f);return f.updateQueue=R,R!==null}function mm(f){if(!we)throw Error("Expected prepareToHydrateHostTextInstance() to never be called. This error is likely caused by a bug in React. Please file an issue.");var d=f.stateNode,E=f.memoizedProps,C=G(d,E,f);if(C){var R=bl;if(R!==null)switch(R.tag){case B:{var j=R.stateNode.containerInfo;Je(j,d,E);break}case q:{var V=R.type,te=R.memoizedProps,le=R.stateNode;vt(V,te,le,d,E);break}}}return C}function Ih(f){if(!we)throw Error("Expected prepareToHydrateHostSuspenseInstance() to never be called. This error is likely caused by a bug in React. Please file an issue.");var d=f.memoizedState,E=d!==null?d.dehydrated:null;if(!E)throw Error("Expected to have a hydrated suspense instance. This error is likely caused by a bug in React. Please file an issue.");$(E,f)}function gm(f){if(!we)throw Error("Expected skipPastDehydratedSuspenseInstance() to never be called. This error is likely caused by a bug in React. Please file an issue.");var d=f.memoizedState,E=d!==null?d.dehydrated:null;if(!E)throw Error("Expected to have a hydrated suspense instance. This error is likely caused by a bug in React. Please file an issue.");return Te(E)}function X2(f){for(var d=f.return;d!==null&&d.tag!==q&&d.tag!==B&&d.tag!==ce;)d=d.return;bl=d}function h1(f){if(!we||f!==bl)return!1;if(!wa)return X2(f),wa=!0,!1;var d=f.type;if(f.tag!==q||d!=="head"&&d!=="body"&&!Ni(d,f.memoizedProps))for(var E=$a;E;)Y2(f,E),E=ji(E);return X2(f),f.tag===ce?$a=gm(f):$a=bl?ji(f.stateNode):null,!0}function v1(){!we||(bl=null,$a=null,wa=!1)}var m1=rt.ReactCurrentOwner,Sa=!1,Q2,Ks,Xs,Qs,J2,Ta,g1,Td,Tc,Z2;Q2={},Ks={},Xs={},Qs={},J2={},Ta=!1,g1=!1,Td={},Tc={},Z2={};function wo(f,d,E,C){f===null?d.child=$c(d,null,E,C):d.child=Cf(d,f.child,E,C)}function bh(f,d,E,C){d.child=Cf(d,f.child,null,C),d.child=Cf(d,null,E,C)}function Bh(f,d,E,C,R){if(d.type!==d.elementType){var j=E.propTypes;j&&_(j,C,"prop",qt(E),Nr)}var V=E.render,te=d.ref,le;return u0(d,R),m1.current=d,et("render"),le=Ff(f,d,V,C,te,R),Ri&&d.mode&mr&&d.memoizedState!==null&&(le=Ff(f,d,V,C,te,R)),et(null),f!==null&&!Sa?(_d(f,d,R),Ca(f,d,R)):(d.effectTag|=su,wo(f,d,le,R),d.child)}function Uh(f,d,E,C,R,j){if(f===null){var V=E.type;if(a0(V)&&E.compare===null&&E.defaultProps===void 0){var te=V;return te=r0(V),d.tag=ie,d.type=te,tp(d,V),jh(f,d,te,C,R,j)}{var le=V.propTypes;le&&_(le,C,"prop",qt(V),Nr)}var Be=gg(E.type,null,C,null,d.mode,j);return Be.ref=d.ref,Be.return=d,d.child=Be,Be}{var Xe=E.type,ht=Xe.propTypes;ht&&_(ht,C,"prop",qt(Xe),Nr)}var Lt=f.child;if(R component appears to have a render method, but doesn't extend React.Component. This is likely to cause errors. Change %s to extend React.Component instead.",le,le),Q2[le]=!0)}d.mode&mr&&Rl.recordLegacyContextWarning(d,null),m1.current=d,te=Ff(null,d,E,R,j,C)}if(d.effectTag|=su,typeof te=="object"&&te!==null&&typeof te.render=="function"&&te.$$typeof===void 0){{var Be=qt(E)||"Unknown";Ks[Be]||(Ve(!1,"The <%s /> component appears to be a function component that returns a class instance. Change %s to a class that extends React.Component instead. If you can't use a class try assigning the prototype on the function as a workaround. `%s.prototype = React.Component.prototype`. Don't use an arrow function since it cannot be called with `new` by React.",Be,Be,Be),Ks[Be]=!0)}d.tag=M,Ed();var Xe=!1;Xi(E)?(Xe=!0,Hi(d)):Xe=!1,d.memoizedState=te.state!==null&&te.state!==void 0?te.state:null;var ht=E.getDerivedStateFromProps;return typeof ht=="function"&&Tf(d,E,ht,R),al(d,te),vc(d,E,R,C),ep(null,d,E,!0,Xe,C)}else return d.tag=N,ai&&E.contextTypes&&Ve(!1,"%s uses the legacy contextTypes API which is no longer supported. Use React.createContext() with React.useContext() instead.",qt(E)||"Unknown"),Ri&&d.mode&mr&&d.memoizedState!==null&&(te=Ff(null,d,E,R,j,C)),wo(null,d,te,C),tp(d,E),d.child}function tp(f,d){if(d&&d.childContextTypes&&Ve(!1,"%s(...): childContextTypes cannot be defined on a function component.",d.displayName||d.name||"Component"),f.ref!==null){var E="",C=y0();C&&(E+=` - -Check the render method of \``+C+"`.");var R=C||f._debugID||"",j=f._debugSource;j&&(R=j.fileName+":"+j.lineNumber),J2[R]||(J2[R]=!0,Qt(!1,"Function components cannot be given refs. Attempts to access this ref will fail. Did you mean to use React.forwardRef()?%s",E))}if(Ql&&d.defaultProps!==void 0){var V=qt(d)||"Unknown";Z2[V]||(Ve(!1,"%s: Support for defaultProps will be removed from function components in a future major release. Use JavaScript default parameters instead.",V),Z2[V]=!0)}if(typeof d.getDerivedStateFromProps=="function"){var te=qt(d)||"Unknown";Qs[te]||(Ve(!1,"%s: Function components do not support getDerivedStateFromProps.",te),Qs[te]=!0)}if(typeof d.contextType=="object"&&d.contextType!==null){var le=qt(d)||"Unknown";Xs[le]||(Ve(!1,"%s: Function components do not support contextType.",le),Xs[le]=!0)}}var xd={dehydrated:null,retryTime:ft};function np(f,d,E){return t1(f,e1)&&(d===null||d.memoizedState!==null)}function Vh(f,d,E){var C=d.mode,R=d.pendingProps;s_(d)&&(d.effectTag|=Xr);var j=Ll.current,V=!1,te=(d.effectTag&Xr)!==Ai;if(te||np(j,f,d)?(V=!0,d.effectTag&=~Xr):(f===null||f.memoizedState!==null)&&R.fallback!==void 0&&R.unstable_avoidThisFallback!==!0&&(j=md(j,Af)),j=ya(j),Fr(d,j),"maxDuration"in R&&(g1||(g1=!0,Qt(!1,"maxDuration has been removed from React. Remove the maxDuration prop."))),f===null){if(R.fallback!==void 0&&(K2(d),Oi)){var le=d.memoizedState;if(le!==null){var Be=le.dehydrated;if(Be!==null)return Gh(d,Be,E)}}if(V){var Xe=R.fallback,ht=rf(null,C,ft,null);if(ht.return=d,(d.mode&Y)===Rr){var Lt=d.memoizedState,Gt=Lt!==null?d.child.child:d.child;ht.child=Gt;for(var zt=Gt;zt!==null;)zt.return=ht,zt=zt.sibling}var gn=rf(Xe,C,E,null);return gn.return=d,ht.sibling=gn,d.memoizedState=xd,d.child=ht,gn}else{var kr=R.children;return d.memoizedState=null,d.child=$c(d,null,kr,E)}}else{var oi=f.memoizedState;if(oi!==null){if(Oi){var Mi=oi.dehydrated;if(Mi!==null)if(te){if(d.memoizedState!==null)return d.child=f.child,d.effectTag|=Xr,null;var N0=R.fallback,$i=rf(null,C,ft,null);if($i.return=d,$i.child=null,(d.mode&Y)===Rr)for(var ot=$i.child=d.child;ot!==null;)ot.return=$i,ot=ot.sibling;else Cf(d,f.child,null,E);if(en&&d.mode&ii){for(var Ot=0,$e=$i.child;$e!==null;)Ot+=$e.treeBaseDuration,$e=$e.sibling;$i.treeBaseDuration=Ot}var Ut=rf(N0,C,E,null);return Ut.return=d,$i.sibling=Ut,Ut.effectTag|=mi,$i.childExpirationTime=ft,d.memoizedState=xd,d.child=$i,Ut}else return Yh(f,d,Mi,oi,E)}var Pn=f.child,vn=Pn.sibling;if(V){var Wi=R.fallback,pi=Co(Pn,Pn.pendingProps,ft);if(pi.return=d,(d.mode&Y)===Rr){var Ku=d.memoizedState,hr=Ku!==null?d.child.child:d.child;if(hr!==Pn.child){pi.child=hr;for(var hu=hr;hu!==null;)hu.return=pi,hu=hu.sibling}}if(en&&d.mode&ii){for(var Kr=0,xu=pi.child;xu!==null;)Kr+=xu.treeBaseDuration,xu=xu.sibling;pi.treeBaseDuration=Kr}var w0=Co(vn,Wi,vn.expirationTime);return w0.return=d,pi.sibling=w0,pi.childExpirationTime=ft,d.memoizedState=xd,d.child=pi,w0}else{var W0=R.children,ks=Pn.child,Xu=Cf(d,ks,W0,E);return d.memoizedState=null,d.child=Xu}}else{var yl=f.child;if(V){var uf=R.fallback,Vo=rf(null,C,ft,null);if(Vo.return=d,Vo.child=yl,yl!==null&&(yl.return=Vo),(d.mode&Y)===Rr){var Ls=d.memoizedState,$d=Ls!==null?d.child.child:d.child;Vo.child=$d;for(var Gf=$d;Gf!==null;)Gf.return=Vo,Gf=Gf.sibling}if(en&&d.mode&ii){for(var Fc=0,Hl=Vo.child;Hl!==null;)Fc+=Hl.treeBaseDuration,Hl=Hl.sibling;Vo.treeBaseDuration=Fc}var Go=rf(uf,C,E,null);return Go.return=d,Vo.sibling=Go,Go.effectTag|=mi,Vo.childExpirationTime=ft,d.memoizedState=xd,d.child=Vo,Go}else{d.memoizedState=null;var N1=R.children;return d.child=Cf(d,yl,N1,E)}}}}function rp(f,d,E){d.memoizedState=null;var C=d.pendingProps,R=C.children;return wo(f,d,R,E),d.child}function Gh(f,d,E){if((f.mode&Y)===Rr)Qt(!1,"Cannot hydrate Suspense in legacy mode. Switch from ReactDOM.hydrate(element, container) to ReactDOM.createBlockingRoot(container, { hydrate: true }).render(element) or remove the Suspense components from the server rendered components."),f.expirationTime=Un;else if(g0(d)){var C=jl(),R=ws(C);bn&&x(R),f.expirationTime=R}else f.expirationTime=Di,bn&&x(Di);return null}function Yh(f,d,E,C,R){if(V2(),(d.mode&Y)===Rr||g0(E))return rp(f,d,R);var j=f.childExpirationTime>=R;if(Sa||j){if(R. Use lowercase "%s" instead.',f,f.toLowerCase());break}case"forward":case"backward":{Qt(!1,'"%s" is not a valid value for revealOrder on . React uses the -s suffix in the spelling. Use "%ss" instead.',f,f.toLowerCase());break}default:Qt(!1,'"%s" is not a supported revealOrder on . Did you mean "together", "forwards" or "backwards"?',f);break}else Qt(!1,'%s is not a supported value for revealOrder on . Did you mean "together", "forwards" or "backwards"?',f)}function Kh(f,d){f!==void 0&&!Tc[f]&&(f!=="collapsed"&&f!=="hidden"?(Tc[f]=!0,Qt(!1,'"%s" is not a supported value for tail on . Did you mean "collapsed" or "hidden"?',f)):d!=="forwards"&&d!=="backwards"&&(Tc[f]=!0,Qt(!1,' is only valid if revealOrder is "forwards" or "backwards". Did you mean to specify revealOrder="forwards"?',f)))}function _1(f,d){{var E=Array.isArray(f),C=!E&&typeof fr(f)=="function";if(E||C){var R=E?"array":"iterable";return Qt(!1,"A nested %s was passed to row #%s in . Wrap it in an additional SuspenseList to configure its revealOrder: ... {%s} ... ",R,d,R),!1}}return!0}function Cm(f,d){if((d==="forwards"||d==="backwards")&&f!==void 0&&f!==null&&f!==!1)if(Array.isArray(f)){for(var E=0;E. This is not useful since it needs multiple rows. Did you mean to pass multiple children or an array?',d)}}function up(f,d,E,C,R,j){var V=f.memoizedState;V===null?f.memoizedState={isBackwards:d,rendering:null,last:C,tail:E,tailExpiration:0,tailMode:R,lastEffect:j}:(V.isBackwards=d,V.rendering=null,V.last=C,V.tail=E,V.tailExpiration=0,V.tailMode=R,V.lastEffect=j)}function op(f,d,E){var C=d.pendingProps,R=C.revealOrder,j=C.tail,V=C.children;Tm(R),Kh(j,R),Cm(V,R),wo(f,d,V,E);var te=Ll.current,le=t1(te,e1);if(le)te=vd(te,e1),d.effectTag|=Xr;else{var Be=f!==null&&(f.effectTag&Xr)!==Ai;Be&&wm(d,d.child,E),te=ya(te)}if(Fr(d,te),(d.mode&Y)===Rr)d.memoizedState=null;else switch(R){case"forwards":{var Xe=Sm(d.child),ht;Xe===null?(ht=d.child,d.child=null):(ht=Xe.sibling,Xe.sibling=null),up(d,!1,ht,Xe,j,d.lastEffect);break}case"backwards":{var Lt=null,Gt=d.child;for(d.child=null;Gt!==null;){var zt=Gt.alternate;if(zt!==null&&n1(zt)===null){d.child=Gt;break}var gn=Gt.sibling;Gt.sibling=Lt,Lt=Gt,Gt=gn}up(d,!0,Lt,null,j,d.lastEffect);break}case"together":{up(d,!1,null,null,void 0,d.lastEffect);break}default:d.memoizedState=null}return d.child}function xm(f,d,E){Ka(d,d.stateNode.containerInfo);var C=d.pendingProps;return f===null?d.child=Cf(d,null,C,E):wo(f,d,C,E),d.child}function Am(f,d,E){var C=d.type,R=C._context,j=d.pendingProps,V=d.memoizedProps,te=j.value;{var le=d.type.propTypes;le&&_(le,j,"prop","Context.Provider",Nr)}if(xr(d,te),V!==null){var Be=V.value,Xe=du(R,te,Be);if(Xe===0){if(V.children===j.children&&!aa())return Ca(f,d,E)}else Ml(d,R,Xe,E)}var ht=j.children;return wo(f,d,ht,E),d.child}var Xh=!1;function Rm(f,d,E){var C=d.type;C._context===void 0?C!==C.Consumer&&(Xh||(Xh=!0,Qt(!1,"Rendering directly is not supported and will be removed in a future major release. Did you mean to render instead?"))):C=C._context;var R=d.pendingProps,j=R.children;typeof j!="function"&&Ve(!1,"A context consumer was rendered with multiple children, or a child that isn't a function. A context consumer expects a single child that is a function. If you did pass a function, make sure there is no trailing or leading whitespace around it."),u0(d,E);var V=We(C,R.unstable_observedBits),te;return m1.current=d,et("render"),te=j(V),et(null),d.effectTag|=su,wo(f,d,te,E),d.child}function Om(f,d,E){var C=d.type.impl;if(C.reconcileChildren===!1)return null;var R=d.pendingProps,j=R.children;return wo(f,d,j,E),d.child}function lp(f,d,E){var C=d.pendingProps,R=C.children;return wo(f,d,R,E),d.child}function sp(){Sa=!0}function Ca(f,d,E){tu(d),f!==null&&(d.dependencies=f.dependencies),en&&Nh(d);var C=d.expirationTime;C!==ft&&Qd(C);var R=d.childExpirationTime;return R=E;le&&(d.effectTag|=wr)}break;case ce:{var Be=d.memoizedState;if(Be!==null){if(Oi&&Be.dehydrated!==null){Fr(d,ya(Ll.current)),d.effectTag|=Xr;break}var Xe=d.child,ht=Xe.childExpirationTime;if(ht!==ft&&ht>=E)return Vh(f,d,E);Fr(d,ya(Ll.current));var Lt=Ca(f,d,E);return Lt!==null?Lt.sibling:null}else Fr(d,ya(Ll.current));break}case at:{var Gt=(f.effectTag&Xr)!==Ai,zt=d.childExpirationTime>=E;if(Gt){if(zt)return op(f,d,E);d.effectTag|=Xr}var gn=d.memoizedState;if(gn!==null&&(gn.rendering=null,gn.tail=null),Fr(d,Ll.current),zt)break;return null}}return Ca(f,d,E)}else Sa=!1}else Sa=!1;switch(d.expirationTime=ft,d.tag){case T:return Dm(f,d,d.type,E);case Oe:{var kr=d.elementType;return bf(f,d,kr,C,E)}case N:{var oi=d.type,Mi=d.pendingProps,N0=d.elementType===oi?Mi:qi(oi,Mi);return $2(f,d,oi,N0,E)}case M:{var $i=d.type,ot=d.pendingProps,Ot=d.elementType===$i?ot:qi($i,ot);return qh(f,d,$i,Ot,E)}case B:return _m(f,d,E);case q:return Em(f,d,E);case ne:return If(f,d);case ce:return Vh(f,d,E);case H:return xm(f,d,E);case fe:{var $e=d.type,Ut=d.pendingProps,Pn=d.elementType===$e?Ut:qi($e,Ut);return Bh(f,d,$e,Pn,E)}case m:return ym(f,d,E);case he:return zh(f,d,E);case _e:return Hh(f,d,E);case se:return Am(f,d,E);case De:return Rm(f,d,E);case me:{var vn=d.type,Wi=d.pendingProps,pi=qi(vn,Wi);if(d.type!==d.elementType){var Ku=vn.propTypes;Ku&&_(Ku,pi,"prop",qt(vn),Nr)}return pi=qi(vn.type,pi),Uh(f,d,vn,pi,C,E)}case ie:return jh(f,d,d.type,d.pendingProps,C,E);case Ue:{var hr=d.type,hu=d.pendingProps,Kr=d.elementType===hr?hu:qi(hr,hu);return Cd(f,d,hr,Kr,E)}case at:return op(f,d,E);case Dt:{if(Wt)return Om(f,d,E);break}case Qe:{if(Ru)return lp(f,d,E);break}}throw Error("Unknown unit of work tag ("+d.tag+"). This error is likely caused by a bug in React. Please file an issue.")}function Qh(f,d,E,C){return{currentFiber:f,impl:E,instance:null,prevProps:null,props:d,state:C}}function Ad(f){return f.tag===ce&&f.memoizedState!==null}function D1(f){return f.child.sibling.child}var Jh={};function fp(f,d,E){if(Ru){if(f.tag===q){var C=f.type,R=f.memoizedProps,j=f.stateNode,V=No(j);V!==null&&d(C,R||Jh,V)===!0&&E.push(V)}var te=f.child;Ad(f)&&(te=D1(f)),te!==null&&cp(te,d,E)}}function Zh(f,d){if(Ru){if(f.tag===q){var E=f.type,C=f.memoizedProps,R=f.stateNode,j=No(R);if(j!==null&&d(E,C,j)===!0)return j}var V=f.child;if(Ad(f)&&(V=D1(f)),V!==null)return $h(V,d)}return null}function cp(f,d,E){for(var C=f;C!==null;)fp(C,d,E),C=C.sibling}function $h(f,d){for(var E=f;E!==null;){var C=Zh(E,d);if(C!==null)return C;E=E.sibling}return null}function ev(f,d,E){if(Rd(f,d))E.push(f.stateNode.methods);else{var C=f.child;Ad(f)&&(C=D1(f)),C!==null&&dp(C,d,E)}}function dp(f,d,E){for(var C=f;C!==null;)ev(C,d,E),C=C.sibling}function Rd(f,d){return f.tag===Qe&&f.type===d&&f.stateNode!==null}function Od(f,d){return{getChildren:function(){var E=d.fiber,C=E.child,R=[];return C!==null&&dp(C,f,R),R.length===0?null:R},getChildrenFromRoot:function(){for(var E=d.fiber,C=E;C!==null;){var R=C.return;if(R===null||(C=R,C.tag===Qe&&C.type===f))break}var j=[];return dp(C.child,f,j),j.length===0?null:j},getParent:function(){for(var E=d.fiber.return;E!==null;){if(E.tag===Qe&&E.type===f)return E.stateNode.methods;E=E.return}return null},getProps:function(){var E=d.fiber;return E.memoizedProps},queryAllNodes:function(E){var C=d.fiber,R=C.child,j=[];return R!==null&&cp(R,E,j),j.length===0?null:j},queryFirstNode:function(E){var C=d.fiber,R=C.child;return R!==null?$h(R,E):null},containsNode:function(E){for(var C=cr(E);C!==null;){if(C.tag===Qe&&C.type===f&&C.stateNode===d)return!0;C=C.return}return!1}}}function H0(f){f.effectTag|=wr}function Md(f){f.effectTag|=Oo}var xa,ef,kd,Ld;if(b0)xa=function(f,d,E,C){for(var R=d.child;R!==null;){if(R.tag===q||R.tag===ne)Qr(f,R.stateNode);else if(Wt&&R.tag===Dt)Qr(f,R.stateNode.instance);else if(R.tag!==H){if(R.child!==null){R.child.return=R,R=R.child;continue}}if(R===d)return;for(;R.sibling===null;){if(R.return===null||R.return===d)return;R=R.return}R.sibling.return=R.return,R=R.sibling}},ef=function(f){},kd=function(f,d,E,C,R){var j=f.memoizedProps;if(j!==C){var V=d.stateNode,te=fl(),le=h0(V,E,j,C,R,te);d.updateQueue=le,le&&H0(d)}},Ld=function(f,d,E,C){E!==C&&H0(d)};else if(Q){xa=function(f,d,E,C){for(var R=d.child;R!==null;){e:if(R.tag===q){var j=R.stateNode;if(E&&C){var V=R.memoizedProps,te=R.type;j=$r(j,te,V,R)}Qr(f,j)}else if(R.tag===ne){var le=R.stateNode;if(E&&C){var Be=R.memoizedProps;le=$l(le,Be,R)}Qr(f,le)}else if(Wt&&R.tag===Dt){var Xe=R.stateNode.instance;if(E&&C){var ht=R.memoizedProps,Lt=R.type;Xe=$r(Xe,Lt,ht,R)}Qr(f,Xe)}else if(R.tag!==H){if(R.tag===ce){if((R.effectTag&wr)!==Ai){var Gt=R.memoizedState!==null;if(Gt){var zt=R.child;if(zt!==null){zt.child!==null&&(zt.child.return=zt,xa(f,zt,!0,Gt));var gn=zt.sibling;if(gn!==null){gn.return=R,R=gn;continue}}}}if(R.child!==null){R.child.return=R,R=R.child;continue}}else if(R.child!==null){R.child.return=R,R=R.child;continue}}if(R=R,R===d)return;for(;R.sibling===null;){if(R.return===null||R.return===d)return;R=R.return}R.sibling.return=R.return,R=R.sibling}};var pp=function(f,d,E,C){for(var R=d.child;R!==null;){e:if(R.tag===q){var j=R.stateNode;if(E&&C){var V=R.memoizedProps,te=R.type;j=$r(j,te,V,R)}Qn(f,j)}else if(R.tag===ne){var le=R.stateNode;if(E&&C){var Be=R.memoizedProps;le=$l(le,Be,R)}Qn(f,le)}else if(Wt&&R.tag===Dt){var Xe=R.stateNode.instance;if(E&&C){var ht=R.memoizedProps,Lt=R.type;Xe=$r(Xe,Lt,ht,R)}Qn(f,Xe)}else if(R.tag!==H){if(R.tag===ce){if((R.effectTag&wr)!==Ai){var Gt=R.memoizedState!==null;if(Gt){var zt=R.child;if(zt!==null){zt.child!==null&&(zt.child.return=zt,pp(f,zt,!0,Gt));var gn=zt.sibling;if(gn!==null){gn.return=R,R=gn;continue}}}}if(R.child!==null){R.child.return=R,R=R.child;continue}}else if(R.child!==null){R.child.return=R,R=R.child;continue}}if(R=R,R===d)return;for(;R.sibling===null;){if(R.return===null||R.return===d)return;R=R.return}R.sibling.return=R.return,R=R.sibling}};ef=function(f){var d=f.stateNode,E=f.firstEffect===null;if(!E){var C=d.containerInfo,R=S0(C);pp(R,f,!1,!1),d.pendingChildren=R,H0(f),fc(C,R)}},kd=function(f,d,E,C,R){var j=f.stateNode,V=f.memoizedProps,te=d.firstEffect===null;if(te&&V===C){d.stateNode=j;return}var le=d.stateNode,Be=fl(),Xe=null;if(V!==C&&(Xe=h0(le,E,V,C,R,Be)),te&&Xe===null){d.stateNode=j;return}var ht=gs(j,Xe,E,V,C,d,te,le);Ou(ht,E,C,R,Be)&&H0(d),d.stateNode=ht,te?H0(d):xa(ht,d,!1,!1)},Ld=function(f,d,E,C){if(E!==C){var R=rs(),j=fl();d.stateNode=vs(C,R,j,d),H0(d)}}}else ef=function(f){},kd=function(f,d,E,C,R){},Ld=function(f,d,E,C){};function Nd(f,d){switch(f.tailMode){case"hidden":{for(var E=f.tail,C=null;E!==null;)E.alternate!==null&&(C=E),E=E.sibling;C===null?f.tail=null:C.sibling=null;break}case"collapsed":{for(var R=f.tail,j=null;R!==null;)R.alternate!==null&&(j=R),R=R.sibling;j===null?!d&&f.tail!==null?f.tail.sibling=null:f.tail=null:j.sibling=null;break}}}function tv(f,d,E){var C=d.pendingProps;switch(d.tag){case T:break;case Oe:break;case ie:case N:break;case M:{var R=d.type;Xi(R)&&qs(d);break}case B:{uo(d),A0(d);var j=d.stateNode;if(j.pendingContext&&(j.context=j.pendingContext,j.pendingContext=null),f===null||f.child===null){var V=h1(d);V&&H0(d)}ef(d);break}case q:{L2(d);var te=rs(),le=d.type;if(f!==null&&d.stateNode!=null){if(kd(f,d,le,C,te),yi){var Be=f.memoizedProps.listeners,Xe=C.listeners;Be!==Xe&&H0(d)}f.ref!==d.ref&&Md(d)}else{if(!C){if(d.stateNode===null)throw Error("We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue.");break}var ht=fl(),Lt=h1(d);if(Lt){if(vm(d,te,ht)&&H0(d),yi){var Gt=C.listeners;Gt!=null&&hn(Gt,d,te)}}else{var zt=Ki(le,C,te,ht,d);if(xa(zt,d,!1,!1),d.stateNode=zt,yi){var gn=C.listeners;gn!=null&&hn(gn,d,te)}Ou(zt,le,C,te,ht)&&H0(d)}d.ref!==null&&Md(d)}break}case ne:{var kr=C;if(f&&d.stateNode!=null){var oi=f.memoizedProps;Ld(f,d,oi,kr)}else{if(typeof kr!="string"&&d.stateNode===null)throw Error("We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue.");var Mi=rs(),N0=fl(),$i=h1(d);$i?mm(d)&&H0(d):d.stateNode=vs(kr,Mi,N0,d)}break}case fe:break;case ce:{Ea(d);var ot=d.memoizedState;if(Oi&&ot!==null&&ot.dehydrated!==null)if(f===null){var Ot=h1(d);if(!Ot)throw Error("A dehydrated suspense component was completed without a hydrated node. This is probably a bug in React.");return Ih(d),bn&&x(Di),null}else return v1(),(d.effectTag&Xr)===Ai&&(d.memoizedState=null),d.effectTag|=wr,null;if((d.effectTag&Xr)!==Ai)return d.expirationTime=E,d;var $e=ot!==null,Ut=!1;if(f===null)d.memoizedProps.fallback!==void 0&&h1(d);else{var Pn=f.memoizedState;if(Ut=Pn!==null,!$e&&Pn!==null){var vn=f.child.sibling;if(vn!==null){var Wi=d.firstEffect;Wi!==null?(d.firstEffect=vn,vn.nextEffect=Wi):(d.firstEffect=d.lastEffect=vn,vn.nextEffect=null),vn.effectTag=Y0}}}if($e&&!Ut&&(d.mode&Y)!==Rr){var pi=f===null&&d.memoizedProps.unstable_avoidThisFallback!==!0;pi||t1(Ll.current,Af)?_v():Ev()}Q&&$e&&(d.effectTag|=wr),b0&&($e||Ut)&&(d.effectTag|=wr),Yi&&d.updateQueue!==null&&d.memoizedProps.suspenseCallback!=null&&(d.effectTag|=wr);break}case m:break;case he:break;case _e:break;case H:uo(d),ef(d);break;case se:i0(d);break;case De:break;case me:break;case Ue:{var Ku=d.type;Xi(Ku)&&qs(d);break}case at:{Ea(d);var hr=d.memoizedState;if(hr===null)break;var hu=(d.effectTag&Xr)!==Ai,Kr=hr.rendering;if(Kr===null)if(hu)Nd(hr,!1);else{var xu=Dv()&&(f===null||(f.effectTag&Xr)===Ai);if(!xu)for(var w0=d.child;w0!==null;){var W0=n1(w0);if(W0!==null){hu=!0,d.effectTag|=Xr,Nd(hr,!1);var ks=W0.updateQueue;return ks!==null&&(d.updateQueue=ks,d.effectTag|=wr),hr.lastEffect===null&&(d.firstEffect=null),d.lastEffect=hr.lastEffect,am(d,E),Fr(d,vd(Ll.current,e1)),d.child}w0=w0.sibling}}else{if(!hu){var Xu=n1(Kr);if(Xu!==null){d.effectTag|=Xr,hu=!0;var yl=Xu.updateQueue;if(yl!==null&&(d.updateQueue=yl,d.effectTag|=wr),Nd(hr,!0),hr.tail===null&&hr.tailMode==="hidden"&&!Kr.alternate){var uf=d.lastEffect=hr.lastEffect;return uf!==null&&(uf.nextEffect=null),null}}else if(mt()>hr.tailExpiration&&E>Di){d.effectTag|=Xr,hu=!0,Nd(hr,!1);var Vo=E-1;d.expirationTime=d.childExpirationTime=Vo,bn&&x(Vo)}}if(hr.isBackwards)Kr.sibling=d.child,d.child=Kr;else{var Ls=hr.last;Ls!==null?Ls.sibling=Kr:d.child=Kr,hr.last=Kr}}if(hr.tail!==null){if(hr.tailExpiration===0){var $d=500;hr.tailExpiration=mt()+$d}var Gf=hr.tail;hr.rendering=Gf,hr.tail=Gf.sibling,hr.lastEffect=d.lastEffect,Gf.sibling=null;var Fc=Ll.current;return hu?Fc=vd(Fc,e1):Fc=ya(Fc),Fr(d,Fc),Gf}break}case Dt:{if(Wt){var Hl=d.type.impl,Go=d.stateNode;if(Go===null){var N1=Hl.getInitialState,v_;N1!==void 0&&(v_=N1(C)),Go=d.stateNode=Qh(d,C,Hl,v_||{});var m_=pt(Go);if(Go.instance=m_,Hl.reconcileChildren===!1)return null;xa(m_,d,!1,!1),Yn(Go)}else{var _E=Go.props;if(Go.prevProps=_E,Go.props=C,Go.currentFiber=d,Q){var g_=la(Go);Go.instance=g_,xa(g_,d,!1,!1)}var EE=Cn(Go);EE&&H0(d)}}break}case Qe:{if(Ru)if(f===null){var DE=d.type,Ag={fiber:d,methods:null};if(d.stateNode=Ag,Ag.methods=Od(DE,Ag),yi){var y_=C.listeners;if(y_!=null){var wE=rs();hn(y_,d,wE)}}d.ref!==null&&(Md(d),H0(d))}else{if(yi){var SE=f.memoizedProps.listeners,TE=C.listeners;(SE!==TE||d.ref!==null)&&H0(d)}else d.ref!==null&&H0(d);f.ref!==d.ref&&Md(d)}break}default:throw Error("Unknown unit of work tag ("+d.tag+"). This error is likely caused by a bug in React. Please file an issue.")}return null}function Mm(f,d){switch(f.tag){case M:{var E=f.type;Xi(E)&&qs(f);var C=f.effectTag;return C&p0?(f.effectTag=C&~p0|Xr,f):null}case B:{uo(f),A0(f);var R=f.effectTag;if((R&Xr)!==Ai)throw Error("The root failed to unmount after an error. This is likely a bug in React. Please file an issue.");return f.effectTag=R&~p0|Xr,f}case q:return L2(f),null;case ce:{if(Ea(f),Oi){var j=f.memoizedState;if(j!==null&&j.dehydrated!==null){if(f.alternate===null)throw Error("Threw in newly mounted dehydrated component. This is likely a bug in React. Please file an issue.");v1()}}var V=f.effectTag;return V&p0?(f.effectTag=V&~p0|Xr,f):null}case at:return Ea(f),null;case H:return uo(f),null;case se:return i0(f),null;default:return null}}function nv(f){switch(f.tag){case M:{var d=f.type.childContextTypes;d!=null&&qs(f);break}case B:{uo(f),A0(f);break}case q:{L2(f);break}case H:uo(f);break;case ce:Ea(f);break;case at:Ea(f);break;case se:i0(f);break;default:break}}function hp(f,d){return{value:f,source:d,stack:Cr(d)}}var vp=function(f,d,E,C,R,j,V,te,le){var Be=Array.prototype.slice.call(arguments,3);try{d.apply(E,Be)}catch(Xe){this.onError(Xe)}};if(typeof window!="undefined"&&typeof window.dispatchEvent=="function"&&typeof document!="undefined"&&typeof document.createEvent=="function"){var mp=document.createElement("react"),km=function(f,d,E,C,R,j,V,te,le){if(typeof document=="undefined")throw Error("The `document` global was defined when React was initialized, but is not defined anymore. This can happen in a test environment if a component schedules an update from an asynchronous callback, but the test has already finished running. To solve this, you can either unmount the component at the end of your test (and ensure that any asynchronous operations get canceled in `componentWillUnmount`), or you can change the test itself to be asynchronous.");var Be=document.createEvent("Event"),Xe=!0,ht=window.event,Lt=Object.getOwnPropertyDescriptor(window,"event"),Gt=Array.prototype.slice.call(arguments,3);function zt(){mp.removeEventListener(N0,zt,!1),typeof window.event!="undefined"&&window.hasOwnProperty("event")&&(window.event=ht),d.apply(E,Gt),Xe=!1}var gn,kr=!1,oi=!1;function Mi($i){if(gn=$i.error,kr=!0,gn===null&&$i.colno===0&&$i.lineno===0&&(oi=!0),$i.defaultPrevented&&gn!=null&&typeof gn=="object")try{gn._suppressLogging=!0}catch(ot){}}var N0="react-"+(f||"invokeguardedcallback");window.addEventListener("error",Mi),mp.addEventListener(N0,zt,!1),Be.initEvent(N0,!1,!1),mp.dispatchEvent(Be),Lt&&Object.defineProperty(window,"event",Lt),Xe&&(kr?oi&&(gn=new Error("A cross-origin error was thrown. React doesn't have access to the actual error object in development. See https://fb.me/react-crossorigin-error for more information.")):gn=new Error(`An error was thrown inside one of your components, but React doesn't know what it was. This is likely due to browser flakiness. React does its best to preserve the "Pause on exceptions" behavior of the DevTools, which requires some DEV-mode only tricks. It's possible that these don't work in your browser. Try triggering the error in production mode, or switching to a modern browser. If you suspect that this is actually an issue with React, please file an issue.`),this.onError(gn)),window.removeEventListener("error",Mi)};vp=km}var Lm=vp,So=!1,Fd=null,Nm={onError:function(f){So=!0,Fd=f}};function pl(f,d,E,C,R,j,V,te,le){So=!1,Fd=null,Lm.apply(Nm,arguments)}function tr(){return So}function Js(){if(So){var f=Fd;return So=!1,Fd=null,f}else throw Error("clearCaughtError was called but no error was captured. This error is likely caused by a bug in React. Please file an issue.")}function hl(f){return!0}function l0(f){var d=hl(f);if(d!==!1){var E=f.error;{var C=f.componentName,R=f.componentStack,j=f.errorBoundaryName,V=f.errorBoundaryFound,te=f.willRetry;if(E!=null&&E._suppressLogging){if(V&&te)return;console.error(E)}var le=C?"The above error occurred in the <"+C+"> component:":"The above error occurred in one of your React components:",Be;V&&j?te?Be="React will try to recreate this component tree from scratch "+("using the error boundary you provided, "+j+"."):Be="This error was initially handled by the error boundary "+j+`. -Recreating the tree from scratch failed so React will unmount the tree.`:Be=`Consider adding an error boundary to your tree to customize error handling behavior. -Visit https://fb.me/react-error-boundaries to learn more about error boundaries.`;var Xe=""+le+R+` - -`+(""+Be);console.error(Xe)}}}var rv=null;rv=new Set;var Zs=typeof WeakSet=="function"?WeakSet:Set;function gp(f,d){var E=d.source,C=d.stack;C===null&&E!==null&&(C=Cr(E));var R={componentName:E!==null?qt(E.type):null,componentStack:C!==null?C:"",error:d.value,errorBoundary:null,errorBoundaryName:null,errorBoundaryFound:!1,willRetry:!1};f!==null&&f.tag===M&&(R.errorBoundary=f.stateNode,R.errorBoundaryName=qt(f.type),R.errorBoundaryFound=!0,R.willRetry=!0);try{l0(R)}catch(j){setTimeout(function(){throw j})}}var Fm=function(f,d){Bi(f,"componentWillUnmount"),d.props=f.memoizedProps,d.state=f.memoizedState,d.componentWillUnmount(),Ci()};function iv(f,d){if(pl(null,Fm,null,f,d),tr()){var E=Js();qf(f,E)}}function yp(f){var d=f.ref;if(d!==null)if(typeof d=="function"){if(pl(null,d,null,null),tr()){var E=Js();qf(f,E)}}else d.current=null}function Pm(f,d){if(pl(null,d,null),tr()){var E=Js();qf(f,E)}}function _p(f,d){switch(d.tag){case N:case fe:case ie:{Cc(cm,Of,d);return}case M:{if(d.effectTag&Mo&&f!==null){var E=f.memoizedProps,C=f.memoizedState;Bi(d,"getSnapshotBeforeUpdate");var R=d.stateNode;d.type===d.elementType&&!Ta&&(R.props!==d.memoizedProps&&Qt(!1,"Expected %s props to match memoized props before getSnapshotBeforeUpdate. This might either be because of a bug in React, or because a component reassigns its own `this.props`. Please file an issue.",qt(d.type)||"instance"),R.state!==d.memoizedState&&Qt(!1,"Expected %s state to match memoized state before getSnapshotBeforeUpdate. This might either be because of a bug in React, or because a component reassigns its own `this.props`. Please file an issue.",qt(d.type)||"instance"));var j=R.getSnapshotBeforeUpdate(d.elementType===d.type?E:qi(d.type,E),C);{var V=rv;j===void 0&&!V.has(d.type)&&(V.add(d.type),Ve(!1,"%s.getSnapshotBeforeUpdate(): A snapshot value (or null) must be returned. You have returned undefined.",qt(d.type)))}R.__reactInternalSnapshotBeforeUpdate=j,Ci()}return}case B:case q:case ne:case H:case Ue:return;default:throw Error("This unit of work tag should not have side-effects. This error is likely caused by a bug in React. Please file an issue.")}}function Cc(f,d,E){var C=E.updateQueue,R=C!==null?C.lastEffect:null;if(R!==null){var j=R.next,V=j;do{if((V.tag&f)!==Of){var te=V.destroy;V.destroy=void 0,te!==void 0&&te()}if((V.tag&d)!==Of){var le=V.create;V.destroy=le();{var Be=V.destroy;if(Be!==void 0&&typeof Be!="function"){var Xe=void 0;Be===null?Xe=" You returned null. If your effect does not require clean up, return undefined (or nothing).":typeof Be.then=="function"?Xe=` - -It looks like you wrote useEffect(async () => ...) or returned a Promise. Instead, write the async function inside your effect and call it immediately: - -useEffect(() => { - async function fetchData() { - // You can await here - const response = await MyAPI.getData(someId); - // ... - } - fetchData(); -}, [someId]); // Or [] if effect doesn't need props or state - -Learn more about data fetching with Hooks: https://fb.me/react-hooks-data-fetching`:Xe=" You returned: "+Be,Ve(!1,"An effect function must not return anything besides a function, which is used for clean-up.%s%s",Xe,Cr(E))}}}V=V.next}while(V!==j)}}function Aa(f){if((f.effectTag&F0)!==Ai)switch(f.tag){case N:case fe:case ie:{Cc(sr,Of,f),Cc(Of,r1,f);break}default:break}}function Ep(f,d,E,C){switch(E.tag){case N:case fe:case ie:{Cc(dm,cl,E);break}case M:{var R=E.stateNode;if(E.effectTag&wr)if(d===null)Bi(E,"componentDidMount"),E.type===E.elementType&&!Ta&&(R.props!==E.memoizedProps&&Qt(!1,"Expected %s props to match memoized props before componentDidMount. This might either be because of a bug in React, or because a component reassigns its own `this.props`. Please file an issue.",qt(E.type)||"instance"),R.state!==E.memoizedState&&Qt(!1,"Expected %s state to match memoized state before componentDidMount. This might either be because of a bug in React, or because a component reassigns its own `this.props`. Please file an issue.",qt(E.type)||"instance")),R.componentDidMount(),Ci();else{var j=E.elementType===E.type?d.memoizedProps:qi(E.type,d.memoizedProps),V=d.memoizedState;Bi(E,"componentDidUpdate"),E.type===E.elementType&&!Ta&&(R.props!==E.memoizedProps&&Qt(!1,"Expected %s props to match memoized props before componentDidUpdate. This might either be because of a bug in React, or because a component reassigns its own `this.props`. Please file an issue.",qt(E.type)||"instance"),R.state!==E.memoizedState&&Qt(!1,"Expected %s state to match memoized state before componentDidUpdate. This might either be because of a bug in React, or because a component reassigns its own `this.props`. Please file an issue.",qt(E.type)||"instance")),R.componentDidUpdate(j,V,R.__reactInternalSnapshotBeforeUpdate),Ci()}var te=E.updateQueue;te!==null&&(E.type===E.elementType&&!Ta&&(R.props!==E.memoizedProps&&Qt(!1,"Expected %s props to match memoized props before processing the update queue. This might either be because of a bug in React, or because a component reassigns its own `this.props`. Please file an issue.",qt(E.type)||"instance"),R.state!==E.memoizedState&&Qt(!1,"Expected %s state to match memoized state before processing the update queue. This might either be because of a bug in React, or because a component reassigns its own `this.props`. Please file an issue.",qt(E.type)||"instance")),yo(E,te,R,C));return}case B:{var le=E.updateQueue;if(le!==null){var Be=null;if(E.child!==null)switch(E.child.tag){case q:Be=No(E.child.stateNode);break;case M:Be=E.child.stateNode;break}yo(E,le,Be,C)}return}case q:{var Xe=E.stateNode;if(d===null&&E.effectTag&wr){var ht=E.type,Lt=E.memoizedProps;Hu(Xe,ht,Lt,E)}return}case ne:return;case H:return;case _e:{if(en){var Gt=E.memoizedProps.onRender;typeof Gt=="function"&&(bn?Gt(E.memoizedProps.id,d===null?"mount":"update",E.actualDuration,E.treeBaseDuration,E.actualStartTime,Il(),f.memoizedInteractions):Gt(E.memoizedProps.id,d===null?"mount":"update",E.actualDuration,E.treeBaseDuration,E.actualStartTime,Il()))}return}case ce:{Bl(f,E);return}case at:case Ue:case Dt:case Qe:return;default:throw Error("This unit of work tag should not have side-effects. This error is likely caused by a bug in React. Please file an issue.")}}function Pd(f,d){if(b0)for(var E=f;;){if(E.tag===q){var C=E.stateNode;d?Ia(C):ua(E.stateNode,E.memoizedProps)}else if(E.tag===ne){var R=E.stateNode;d?m0(R):J0(R,E.memoizedProps)}else if(E.tag===ce&&E.memoizedState!==null&&E.memoizedState.dehydrated===null){var j=E.child.sibling;j.return=E,E=j;continue}else if(E.child!==null){E.child.return=E,E=E.child;continue}if(E===f)return;for(;E.sibling===null;){if(E.return===null||E.return===f)return;E=E.return}E.sibling.return=E.return,E=E.sibling}}function bu(f){var d=f.ref;if(d!==null){var E=f.stateNode,C;switch(f.tag){case q:C=No(E);break;default:C=E}Ru&&f.tag===Qe&&(C=E.methods),typeof d=="function"?d(C):(d.hasOwnProperty("current")||Ve(!1,"Unexpected ref object provided for %s. Use either a ref-setter function or React.createRef().%s",qt(f.type),Cr(f)),d.current=C)}}function Yu(f){var d=f.ref;d!==null&&(typeof d=="function"?d(null):d.current=null)}function Dp(f,d,E){switch(kn(d),d.tag){case N:case fe:case me:case ie:{var C=d.updateQueue;if(C!==null){var R=C.lastEffect;if(R!==null){var j=R.next,V=E>Kn?Kn:E;Sn(V,function(){var oi=j;do{var Mi=oi.destroy;Mi!==void 0&&Pm(d,Mi),oi=oi.next}while(oi!==j)})}}break}case M:{yp(d);var te=d.stateNode;typeof te.componentWillUnmount=="function"&&iv(d,te);return}case q:{if(yi){var le=d.dependencies;if(le!==null){var Be=le.responders;if(Be!==null){for(var Xe=Array.from(Be.values()),ht=0,Lt=Xe.length;ht component higher in the tree to provide a loading indicator or placeholder to display.`+Cr(E))}kp(),C=hp(C,E);var Lt=d;do{switch(Lt.tag){case B:{var Gt=C;Lt.effectTag|=p0,Lt.expirationTime=R;var zt=sv(Lt,Gt,R);ld(Lt,zt);return}case M:var gn=C,kr=Lt.type,oi=Lt.stateNode;if((Lt.effectTag&Xr)===Ai&&(typeof kr.getDerivedStateFromError=="function"||oi!==null&&typeof oi.componentDidCatch=="function"&&!Ip(oi))){Lt.effectTag|=p0,Lt.expirationTime=R;var Mi=av(Lt,gn,R);ld(Lt,Mi);return}break;default:break}Lt=Lt.return}while(Lt!==null)}var Oa=Math.ceil,Mr=rt.ReactCurrentDispatcher,Sp=rt.ReactCurrentOwner,vl=rt.IsSomeRendererActing,yu=0,T1=1,Ui=2,Tp=4,Bd=8,To=16,Os=32,Bf=0,Ud=1,Cp=2,C1=3,x1=4,xp=5,nr=yu,ml=null,Gn=null,q0=ft,k0=Bf,jd=null,Ul=Un,A1=Un,Ac=null,Rc=ft,zd=!1,Ap=0,L0=500,dn=null,Hd=!1,qd=null,Oc=null,Mc=!1,kc=null,R1=E0,Rp=ft,tf=null,Hm=50,Lc=0,Wd=null,cv=50,O1=0,Uf=null,jf=null,M1=ft;function jl(){return(nr&(To|Os))!==yu?n0(mt()):(M1!==ft||(M1=n0(mt())),M1)}function Nc(){return n0(mt())}function zf(f,d,E){var C=d.mode;if((C&Y)===Rr)return Un;var R=Jt();if((C&ri)===Rr)return R===Fi?Un:t0;if((nr&To)!==yu)return q0;var j;if(E!==null)j=ca(f,E.timeoutMs|0||Ef);else switch(R){case Fi:j=Un;break;case ni:j=ja(f);break;case Kn:case e0:j=ws(f);break;case _0:j=ru;break;default:throw Error("Expected a valid priority level")}return ml!==null&&j===q0&&(j-=1),j}function qm(f,d){sg(),dg(f);var E=Vd(f,d);if(E===null){fg(f);return}Hp(f,d),sa();var C=Jt();if(d===Un?(nr&Bd)!==yu&&(nr&(To|Os))===yu?(W(E,d),k1(E)):(Wo(E),W(E,d),nr===yu&&Bt()):(Wo(E),W(E,d)),(nr&Tp)!==yu&&(C===ni||C===Fi))if(tf===null)tf=new Map([[E,d]]);else{var R=tf.get(E);(R===void 0||R>d)&&tf.set(E,d)}}var gl=qm;function Vd(f,d){f.expirationTimeR?C:R}function Wo(f){var d=f.lastExpiredTime;if(d!==ft){f.callbackExpirationTime=Un,f.callbackPriority=Fi,f.callbackNode=Tn(k1.bind(null,f));return}var E=Gd(f),C=f.callbackNode;if(E===ft){C!==null&&(f.callbackNode=null,f.callbackExpirationTime=ft,f.callbackPriority=E0);return}var R=jl(),j=rd(R,E);if(C!==null){var V=f.callbackPriority,te=f.callbackExpirationTime;if(te===E&&V>=j)return;ir(C)}f.callbackExpirationTime=E,f.callbackPriority=j;var le;E===Un?le=Tn(k1.bind(null,f)):ao?le=_n(j,Yd.bind(null,f)):le=_n(j,Yd.bind(null,f),{timeout:jo(E)-mt()}),f.callbackNode=le}function Yd(f,d){if(M1=ft,d){var E=jl();return Vp(f,E),Wo(f),null}var C=Gd(f);if(C!==ft){var R=f.callbackNode;if((nr&(To|Os))!==yu)throw Error("Should not already be working.");if(nf(),(f!==ml||C!==q0)&&(Hf(f,C),ee(f,C)),Gn!==null){var j=nr;nr|=To;var V=mv(f),te=Kd(f);gf(Gn);do try{eg();break}catch(Xe){vv(f,Xe)}while(!0);if(gt(),nr=j,gv(V),bn&&Xd(te),k0===Ud){var le=jd;throw zp(),Hf(f,C),Vf(f,C),Wo(f),le}if(Gn!==null)zp();else{Av();var Be=f.finishedWork=f.current.alternate;f.finishedExpirationTime=C,Wm(f,Be,k0,C)}if(Wo(f),f.callbackNode===R)return Yd.bind(null,f)}}return null}function Wm(f,d,E,C){switch(ml=null,E){case Bf:case Ud:throw Error("Root did not complete. This is a bug in React.");case Cp:{Vp(f,C>ru?ru:C);break}case C1:{Vf(f,C);var R=f.lastSuspendedTime;C===R&&(f.nextKnownPendingLevel=Lp(d)),p();var j=Ul===Un;if(j&&!(Q0&&Wf.current)){var V=Ap+L0-mt();if(V>10){if(zd){var te=f.lastPingedTime;if(te===ft||te>=C){f.lastPingedTime=C,Hf(f,C);break}}var le=Gd(f);if(le!==ft&&le!==C)break;if(R!==ft&&R!==C){f.lastPingedTime=R;break}f.timeoutHandle=Tt(s0.bind(null,f),V);break}}s0(f);break}case x1:{Vf(f,C);var Be=f.lastSuspendedTime;if(C===Be&&(f.nextKnownPendingLevel=Lp(d)),p(),!(Q0&&Wf.current)){if(zd){var Xe=f.lastPingedTime;if(Xe===ft||Xe>=C){f.lastPingedTime=C,Hf(f,C);break}}var ht=Gd(f);if(ht!==ft&&ht!==C)break;if(Be!==ft&&Be!==C){f.lastPingedTime=Be;break}var Lt;if(A1!==Un)Lt=jo(A1)-mt();else if(Ul===Un)Lt=0;else{var Gt=wv(Ul),zt=mt(),gn=jo(C)-zt,kr=zt-Gt;kr<0&&(kr=0),Lt=Up(kr)-kr,gn10){f.timeoutHandle=Tt(s0.bind(null,f),Lt);break}}s0(f);break}case xp:{if(!(Q0&&Wf.current)&&Ul!==Un&&Ac!==null){var oi=jp(Ul,C,Ac);if(oi>10){Vf(f,C),f.timeoutHandle=Tt(s0.bind(null,f),oi);break}}s0(f);break}default:throw Error("Unknown root exit status.")}}function k1(f){var d=f.lastExpiredTime,E=d!==ft?d:Un;if(f.finishedExpirationTime===E)s0(f);else{if((nr&(To|Os))!==yu)throw Error("Should not already be working.");if(nf(),(f!==ml||E!==q0)&&(Hf(f,E),ee(f,E)),Gn!==null){var C=nr;nr|=To;var R=mv(f),j=Kd(f);gf(Gn);do try{Sv();break}catch(te){vv(f,te)}while(!0);if(gt(),nr=C,gv(R),bn&&Xd(j),k0===Ud){var V=jd;throw zp(),Hf(f,E),Vf(f,E),Wo(f),V}if(Gn!==null)throw Error("Cannot commit an incomplete root. This error is likely caused by a bug in React. Please file an issue.");Av(),f.finishedWork=f.current.alternate,f.finishedExpirationTime=E,Vm(f,k0,E),Wo(f)}}return null}function Vm(f,d,E){ml=null,(d===C1||d===x1)&&p(),s0(f)}function Gm(f,d){Vp(f,d),Wo(f),(nr&(To|Os))===yu&&Bt()}function dv(){if((nr&(T1|To|Os))!==yu){(nr&To)!==yu&&Qt(!1,"unstable_flushDiscreteUpdates: Cannot flush updates when React is already rendering.");return}Km(),nf()}function Ym(f){return Sn(Kn,f)}function pv(f,d,E,C){return Sn(Fi,f.bind(null,d,E,C))}function Km(){if(tf!==null){var f=tf;tf=null,f.forEach(function(d,E){Vp(E,d),Wo(E)}),Bt()}}function Xm(f,d){var E=nr;nr|=T1;try{return f(d)}finally{nr=E,nr===yu&&Bt()}}function Qm(f,d){var E=nr;nr|=Ui;try{return f(d)}finally{nr=E,nr===yu&&Bt()}}function hv(f,d,E,C){var R=nr;nr|=Tp;try{return Sn(ni,f.bind(null,d,E,C))}finally{nr=R,nr===yu&&Bt()}}function Jm(f,d){var E=nr;nr&=~T1,nr|=Bd;try{return f(d)}finally{nr=E,nr===yu&&Bt()}}function Op(f,d){if((nr&(To|Os))!==yu)throw Error("flushSync was called from inside a lifecycle method. It cannot be called when React is already rendering.");var E=nr;nr|=T1;try{return Sn(Fi,f.bind(null,d))}finally{nr=E,Bt()}}function Zm(f){var d=nr;nr|=T1;try{Sn(Fi,f)}finally{nr=d,nr===yu&&Bt()}}function Hf(f,d){f.finishedWork=null,f.finishedExpirationTime=ft;var E=f.timeoutHandle;if(E!==nl&&(f.timeoutHandle=nl,co(E)),Gn!==null)for(var C=Gn.return;C!==null;)nv(C),C=C.return;ml=f,Gn=Co(f.current,null,d),q0=d,k0=Bf,jd=null,Ul=Un,A1=Un,Ac=null,Rc=ft,zd=!1,bn&&(jf=null),Rl.discardPendingWarnings(),$s=null}function vv(f,d){do{try{if(gt(),Ed(),it(),Gn===null||Gn.return===null)return k0=Ud,jd=d,null;en&&Gn.mode&ii&&p1(Gn,!0),fv(f,Gn.return,Gn,d,q0),Gn=Tv(Gn)}catch(E){d=E;continue}return}while(!0)}function mv(f){var d=Mr.current;return Mr.current=f1,d===null?f1:d}function gv(f){Mr.current=f}function Kd(f){if(bn){var d=O.__interactionsRef.current;return O.__interactionsRef.current=f.memoizedInteractions,d}return null}function Xd(f){bn&&(O.__interactionsRef.current=f)}function Mp(){Ap=mt()}function yv(f,d){fru&&(Ul=f),d!==null&&fru&&(A1=f,Ac=d)}function Qd(f){f>Rc&&(Rc=f)}function _v(){k0===Bf&&(k0=C1)}function Ev(){(k0===Bf||k0===C1)&&(k0=x1),Rc!==ft&&ml!==null&&(Vf(ml,q0),u_(ml,Rc))}function kp(){k0!==xp&&(k0=Cp)}function Dv(){return k0===Bf}function wv(f){var d=jo(f);return d-Ef}function $m(f,d){var E=jo(f);return E-(d.timeoutMs|0||Ef)}function Sv(){for(;Gn!==null;)Gn=Jd(Gn)}function eg(){for(;Gn!==null&&!Fn();)Gn=Jd(Gn)}function Jd(f){var d=f.alternate;es(f),Et(f);var E;return en&&(f.mode&ii)!==Rr?(W2(f),E=L1(d,f,q0),p1(f,!0)):E=L1(d,f,q0),it(),f.memoizedProps=f.pendingProps,E===null&&(E=Tv(f)),Sp.current=null,E}function Tv(f){Gn=f;do{var d=Gn.alternate,E=Gn.return;if((Gn.effectTag&P0)===Ai){Et(Gn);var C=void 0;if(!en||(Gn.mode&ii)===Rr?C=tv(d,Gn,q0):(W2(Gn),C=tv(d,Gn,q0),p1(Gn,!1)),ei(Gn),it(),tg(Gn),C!==null)return C;if(E!==null&&(E.effectTag&P0)===Ai){E.firstEffect===null&&(E.firstEffect=Gn.firstEffect),Gn.lastEffect!==null&&(E.lastEffect!==null&&(E.lastEffect.nextEffect=Gn.firstEffect),E.lastEffect=Gn.lastEffect);var R=Gn.effectTag;R>su&&(E.lastEffect!==null?E.lastEffect.nextEffect=Gn:E.firstEffect=Gn,E.lastEffect=Gn)}}else{var j=Mm(Gn,q0);if(en&&(Gn.mode&ii)!==Rr){p1(Gn,!1);for(var V=Gn.actualDuration,te=Gn.child;te!==null;)V+=te.actualDuration,te=te.sibling;Gn.actualDuration=V}if(j!==null)return ho(Gn),j.effectTag&=Xl,j;ei(Gn),E!==null&&(E.firstEffect=E.lastEffect=null,E.effectTag|=P0)}var le=Gn.sibling;if(le!==null)return le;Gn=E}while(Gn!==null);return k0===Bf&&(k0=xp),null}function Lp(f){var d=f.expirationTime,E=f.childExpirationTime;return d>E?d:E}function tg(f){if(!(q0!==Di&&f.childExpirationTime===Di)){var d=ft;if(en&&(f.mode&ii)!==Rr){for(var E=f.actualDuration,C=f.selfBaseDuration,R=f.alternate===null||f.child!==f.alternate.child,j=f.child;j!==null;){var V=j.expirationTime,te=j.childExpirationTime;V>d&&(d=V),te>d&&(d=te),R&&(E+=j.actualDuration),C+=j.treeBaseDuration,j=j.sibling}f.actualDuration=E,f.treeBaseDuration=C}else for(var le=f.child;le!==null;){var Be=le.expirationTime,Xe=le.childExpirationTime;Be>d&&(d=Be),Xe>d&&(d=Xe),le=le.sibling}f.childExpirationTime=d}}function s0(f){var d=Jt();return Sn(Fi,Np.bind(null,f,d)),null}function Np(f,d){do nf();while(kc!==null);if(ag(),(nr&(To|Os))!==yu)throw Error("Should not already be working.");var E=f.finishedWork,C=f.finishedExpirationTime;if(E===null)return null;if(f.finishedWork=null,f.finishedExpirationTime=ft,E===f.current)throw Error("Cannot commit the same tree as before. This error is likely caused by a bug in React. Please file an issue.");f.callbackNode=null,f.callbackExpirationTime=ft,f.callbackPriority=E0,f.nextKnownPendingLevel=ft,eo();var R=Lp(E);oE(f,C,R),f===ml&&(ml=null,Gn=null,q0=ft);var j;if(E.effectTag>su?E.lastEffect!==null?(E.lastEffect.nextEffect=E,j=E.firstEffect):j=E:j=E.firstEffect,j!==null){var V=nr;nr|=Os;var te=Kd(f);Sp.current=null,xe(),Hn(f.containerInfo),dn=j;do if(pl(null,ng,null),tr()){if(dn===null)throw Error("Should be working on an effect.");var le=Js();qf(dn,le),dn=dn.nextEffect}while(dn!==null);tt(),en&&Lh(),Ye(),dn=j;do if(pl(null,rg,null,f,d),tr()){if(dn===null)throw Error("Should be working on an effect.");var Be=Js();qf(dn,Be),dn=dn.nextEffect}while(dn!==null);Yt(),qr(f.containerInfo),f.current=E,Kt(),dn=j;do if(pl(null,Fp,null,f,C),tr()){if(dn===null)throw Error("Should be working on an effect.");var Xe=Js();qf(dn,Xe),dn=dn.nextEffect}while(dn!==null);pr(),dn=null,ae(),bn&&Xd(te),nr=V}else f.current=E,xe(),tt(),en&&Lh(),Ye(),Yt(),Kt(),pr();to();var ht=Mc;if(Mc)Mc=!1,kc=f,Rp=C,R1=d;else for(dn=j;dn!==null;){var Lt=dn.nextEffect;dn.nextEffect=null,dn=Lt}var Gt=f.firstPendingTime;if(Gt!==ft){if(bn){if(jf!==null){var zt=jf;jf=null;for(var gn=0;gnKn?Kn:R1;return R1=E0,Sn(f,Pp)}}function Pp(){if(kc===null)return!1;var f=kc,d=Rp;if(kc=null,Rp=ft,(nr&(To|Os))!==yu)throw Error("Cannot flush passive effects while already rendering.");var E=nr;nr|=Os;for(var C=Kd(f),R=f.current.firstEffect;R!==null;){{if(Et(R),pl(null,Aa,null,R),tr()){if(R===null)throw Error("Should be working on an effect.");var j=Js();qf(R,j)}it()}var V=R.nextEffect;R.nextEffect=null,R=V}return bn&&(Xd(C),ve(f,d)),nr=E,Bt(),O1=kc===null?0:O1+1,!0}function Ip(f){return Oc!==null&&Oc.has(f)}function bp(f){Oc===null?Oc=new Set([f]):Oc.add(f)}function ig(f){Hd||(Hd=!0,qd=f)}var ug=ig;function Cv(f,d,E){var C=hp(E,d),R=sv(f,C,Un);Ga(f,R);var j=Vd(f,Un);j!==null&&(Wo(j),W(j,Un))}function qf(f,d){if(f.tag===B){Cv(f,f,d);return}for(var E=f.return;E!==null;){if(E.tag===B){Cv(E,f,d);return}else if(E.tag===M){var C=E.type,R=E.stateNode;if(typeof C.getDerivedStateFromError=="function"||typeof R.componentDidCatch=="function"&&!Ip(R)){var j=hp(d,f),V=av(E,j,Un);Ga(E,V);var te=Vd(E,Un);te!==null&&(Wo(te),W(te,Un));return}}E=E.return}}function Bp(f,d,E){var C=f.pingCache;if(C!==null&&C.delete(d),ml===f&&q0===E){k0===x1||k0===C1&&Ul===Un&&mt()-ApHm)throw Lc=0,Wd=null,Error("Maximum update depth exceeded. This can happen when a component repeatedly calls setState inside componentWillUpdate or componentDidUpdate. React limits the number of nested updates to prevent infinite loops.");O1>cv&&(O1=0,Qt(!1,"Maximum update depth exceeded. This can happen when a component calls setState inside useEffect, but useEffect either doesn't have a dependency array, or one of the dependencies changes on every render."))}function ag(){Rl.flushLegacyContextWarning(),gi&&Rl.flushPendingUnsafeLifecycleWarnings()}function Av(){var f=!0;yf(Uf,f),Uf=null}function zp(){var f=!1;yf(Uf,f),Uf=null}function Hp(f,d){Hr&&ml!==null&&d>q0&&(Uf=f)}var Zd=null;function fg(f){{var d=f.tag;if(d!==B&&d!==M&&d!==N&&d!==fe&&d!==me&&d!==ie)return;var E=qt(f.type)||"ReactComponent";if(Zd!==null){if(Zd.has(E))return;Zd.add(E)}else Zd=new Set([E]);Ve(!1,"Can't perform a React state update on an unmounted component. This is a no-op, but it indicates a memory leak in your application. To fix, cancel all subscriptions and asynchronous tasks in %s.%s",d===M?"the componentWillUnmount method":"a useEffect cleanup function",Cr(f))}}var L1;if(X0){var cg=null;L1=function(f,d,E){var C=r_(cg,d);try{return ap(f,d,E)}catch(j){if(j!==null&&typeof j=="object"&&typeof j.then=="function")throw j;if(gt(),Ed(),nv(d),r_(d,C),en&&d.mode&ii&&W2(d),pl(null,ap,null,f,d,E),tr()){var R=Js();throw R}else throw j}}}else L1=ap;var Rv=!1,Ov=!1;function dg(f){if(f.tag===M)switch(Lr){case"getChildContext":if(Ov)return;Ve(!1,"setState(...): Cannot call setState() inside getChildContext()"),Ov=!0;break;case"render":if(Rv)return;Ve(!1,"Cannot update during an existing state transition (such as within `render`). Render methods should be a pure function of props and state."),Rv=!0;break}}var Wf={current:!1};function qp(f){ms===!0&&vl.current===!0&&Wf.current!==!0&&Ve(!1,`It looks like you're using the wrong act() around your test interactions. -Be sure to use the matching version of act() corresponding to your renderer: - -// for react-dom: -import {act} from 'react-dom/test-utils'; -// ... -act(() => ...); - -// for react-test-renderer: -import TestRenderer from 'react-test-renderer'; -const {act} = TestRenderer; -// ... -act(() => ...);%s`,Cr(f))}function Mv(f){ms===!0&&(f.mode&mr)!==Rr&&vl.current===!1&&Wf.current===!1&&Ve(!1,`An update to %s ran an effect, but was not wrapped in act(...). - -When testing, code that causes React state updates should be wrapped into act(...): - -act(() => { - /* fire events that update state */ -}); -/* assert on the output */ - -This ensures that you're testing the behavior the user would see in the browser. Learn more at https://fb.me/react-wrap-tests-with-act%s`,qt(f.type),Cr(f))}function pg(f){ms===!0&&nr===yu&&vl.current===!1&&Wf.current===!1&&Ve(!1,`An update to %s inside a test was not wrapped in act(...). - -When testing, code that causes React state updates should be wrapped into act(...): - -act(() => { - /* fire events that update state */ -}); -/* assert on the output */ - -This ensures that you're testing the behavior the user would see in the browser. Learn more at https://fb.me/react-wrap-tests-with-act%s`,qt(f.type),Cr(f))}var hg=pg,Wp=!1;function vg(f){Wp===!1&&t.unstable_flushAllWithoutAsserting===void 0&&(f.mode&Y||f.mode&ri?(Wp=!0,Ve(!1,`In Concurrent or Sync modes, the "scheduler" module needs to be mocked to guarantee consistent behaviour across tests and browsers. For example, with jest: -jest.mock('scheduler', () => require('scheduler/unstable_mock')); - -For more info, visit https://fb.me/react-mock-scheduler`)):eu===!0&&(Wp=!0,Ve(!1,`Starting from React v17, the "scheduler" module will need to be mocked to guarantee consistent behaviour across tests and browsers. For example, with jest: -jest.mock('scheduler', () => require('scheduler/unstable_mock')); - -For more info, visit https://fb.me/react-mock-scheduler`)))}var $s=null;function mg(f){{var d=Jt();if((f.mode&ri)!==Ai&&(d===ni||d===Fi))for(var E=f;E!==null;){var C=E.alternate;if(C!==null)switch(E.tag){case M:var R=C.updateQueue;if(R!==null)for(var j=R.firstUpdate;j!==null;){var V=j.priority;if(V===ni||V===Fi){$s===null?$s=new Set([qt(E.type)]):$s.add(qt(E.type));break}j=j.next}break;case N:case fe:case ie:if(E.memoizedState!==null&&E.memoizedState.baseUpdate!==null)for(var te=E.memoizedState.baseUpdate;te!==null;){var le=te.priority;if(le===ni||le===Fi){$s===null?$s=new Set([qt(E.type)]):$s.add(qt(E.type));break}if(te.next===E.memoizedState.baseUpdate)break;te=te.next}break;default:break}E=E.return}}}function p(){if($s!==null){var f=[];$s.forEach(function(d){return f.push(d)}),$s=null,f.length>0&&Ve(!1,`%s triggered a user-blocking update that suspended. - -The fix is to split the update into multiple parts: a user-blocking update to provide immediate feedback, and another update that triggers the bulk of the changes. - -Refer to the documentation for useTransition to learn how to implement this pattern.`,f.sort().join(", "))}}function v(f,d){return d*1e3+f.interactionThreadID}function x(f){!bn||(jf===null?jf=[f]:jf.push(f))}function P(f,d,E){if(!!bn&&E.size>0){var C=f.pendingInteractionMap,R=C.get(d);R!=null?E.forEach(function(te){R.has(te)||te.__count++,R.add(te)}):(C.set(d,new Set(E)),E.forEach(function(te){te.__count++}));var j=O.__subscriberRef.current;if(j!==null){var V=v(f,d);j.onWorkScheduled(E,V)}}}function W(f,d){!bn||P(f,d,O.__interactionsRef.current)}function ee(f,d){if(!!bn){var E=new Set;if(f.pendingInteractionMap.forEach(function(j,V){V>=d&&j.forEach(function(te){return E.add(te)})}),f.memoizedInteractions=E,E.size>0){var C=O.__subscriberRef.current;if(C!==null){var R=v(f,d);try{C.onWorkStarted(E,R)}catch(j){_n(Fi,function(){throw j})}}}}}function ve(f,d){if(!!bn){var E=f.firstPendingTime,C;try{if(C=O.__subscriberRef.current,C!==null&&f.memoizedInteractions.size>0){var R=v(f,d);C.onWorkStopped(f.memoizedInteractions,R)}}catch(V){_n(Fi,function(){throw V})}finally{var j=f.pendingInteractionMap;j.forEach(function(V,te){te>E&&(j.delete(te),V.forEach(function(le){if(le.__count--,C!==null&&le.__count===0)try{C.onInteractionScheduledWorkCompleted(le)}catch(Be){_n(Fi,function(){throw Be})}}))})}}}var Ee=null,Ie=null,_t=!1,St=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__!="undefined";function Rt(f){if(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__=="undefined")return!1;var d=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(d.isDisabled)return!0;if(!d.supportsFiber)return Ve(!1,"The installed version of React DevTools is too old and will not work with the current version of React. Please update React DevTools. https://fb.me/react-devtools"),!0;try{var E=d.inject(f);Ee=function(C,R){try{var j=(C.current.effectTag&Xr)===Xr;if(en){var V=Nc(),te=rd(V,R);d.onCommitFiberRoot(E,C,te,j)}else d.onCommitFiberRoot(E,C,void 0,j)}catch(le){_t||(_t=!0,Ve(!1,"React DevTools encountered an error: %s",le))}},Ie=function(C){try{d.onCommitFiberUnmount(E,C)}catch(R){_t||(_t=!0,Ve(!1,"React DevTools encountered an error: %s",R))}}}catch(C){Ve(!1,"React DevTools encountered an error: %s.",C)}return!0}function on(f,d){typeof Ee=="function"&&Ee(f,d)}function kn(f){typeof Ie=="function"&&Ie(f)}var rr;{rr=!1;try{var br=Object.preventExtensions({}),ar=new Map([[br,null]]),ui=new Set([br]);ar.set(0,0),ui.add(0)}catch(f){rr=!0}}var di=1;function zl(f,d,E,C){this.tag=f,this.key=E,this.elementType=null,this.type=null,this.stateNode=null,this.return=null,this.child=null,this.sibling=null,this.index=0,this.ref=null,this.pendingProps=d,this.memoizedProps=null,this.updateQueue=null,this.memoizedState=null,this.dependencies=null,this.mode=C,this.effectTag=Ai,this.nextEffect=null,this.firstEffect=null,this.lastEffect=null,this.expirationTime=ft,this.childExpirationTime=ft,this.alternate=null,en&&(this.actualDuration=Number.NaN,this.actualStartTime=Number.NaN,this.selfBaseDuration=Number.NaN,this.treeBaseDuration=Number.NaN,this.actualDuration=0,this.actualStartTime=-1,this.selfBaseDuration=0,this.treeBaseDuration=0),Hr&&(this._debugID=di++,this._debugIsCurrentlyTiming=!1),this._debugSource=null,this._debugOwner=null,this._debugNeedsRemount=!1,this._debugHookTypes=null,!rr&&typeof Object.preventExtensions=="function"&&Object.preventExtensions(this)}var Zi=function(f,d,E,C){return new zl(f,d,E,C)};function so(f){var d=f.prototype;return!!(d&&d.isReactComponent)}function a0(f){return typeof f=="function"&&!so(f)&&f.defaultProps===void 0}function Ms(f){if(typeof f=="function")return so(f)?M:N;if(f!=null){var d=f.$$typeof;if(d===Mn)return fe;if(d===Vt)return me}return T}function Co(f,d,E){var C=f.alternate;C===null?(C=Zi(f.tag,d,f.key,f.mode),C.elementType=f.elementType,C.type=f.type,C.stateNode=f.stateNode,C._debugID=f._debugID,C._debugSource=f._debugSource,C._debugOwner=f._debugOwner,C._debugHookTypes=f._debugHookTypes,C.alternate=f,f.alternate=C):(C.pendingProps=d,C.effectTag=Ai,C.nextEffect=null,C.firstEffect=null,C.lastEffect=null,en&&(C.actualDuration=0,C.actualStartTime=-1)),C.childExpirationTime=f.childExpirationTime,C.expirationTime=f.expirationTime,C.child=f.child,C.memoizedProps=f.memoizedProps,C.memoizedState=f.memoizedState,C.updateQueue=f.updateQueue;var R=f.dependencies;switch(C.dependencies=R===null?null:{expirationTime:R.expirationTime,firstContext:R.firstContext,responders:R.responders},C.sibling=f.sibling,C.index=f.index,C.ref=f.ref,en&&(C.selfBaseDuration=f.selfBaseDuration,C.treeBaseDuration=f.treeBaseDuration),C._debugNeedsRemount=f._debugNeedsRemount,C.tag){case T:case N:case ie:C.type=r0(f.type);break;case M:C.type=j0(f.type);break;case fe:C.type=wf(f.type);break;default:break}return C}function kv(f,d){f.effectTag&=mi,f.nextEffect=null,f.firstEffect=null,f.lastEffect=null;var E=f.alternate;if(E===null)f.childExpirationTime=ft,f.expirationTime=d,f.child=null,f.memoizedProps=null,f.memoizedState=null,f.updateQueue=null,f.dependencies=null,en&&(f.selfBaseDuration=0,f.treeBaseDuration=0);else{f.childExpirationTime=E.childExpirationTime,f.expirationTime=E.expirationTime,f.child=E.child,f.memoizedProps=E.memoizedProps,f.memoizedState=E.memoizedState,f.updateQueue=E.updateQueue;var C=E.dependencies;f.dependencies=C===null?null:{expirationTime:C.expirationTime,firstContext:C.firstContext,responders:C.responders},en&&(f.selfBaseDuration=E.selfBaseDuration,f.treeBaseDuration=E.treeBaseDuration)}return f}function J4(f){var d;return f===O0?d=ri|Y|mr:f===B0?d=Y|mr:d=Rr,en&&St&&(d|=ii),Zi(B,null,null,d)}function gg(f,d,E,C,R,j){var V,te=T,le=f;if(typeof f=="function")so(f)?(te=M,le=j0(le)):le=r0(le);else if(typeof f=="string")te=q;else{e:switch(f){case oe:return rf(E.children,R,j,d);case an:te=he,R|=ri|Y|mr;break;case He:te=he,R|=mr;break;case dt:return $4(E,R,j,d);case lr:return eE(E,R,j,d);case ln:return tE(E,R,j,d);default:{if(typeof f=="object"&&f!==null)switch(f.$$typeof){case At:te=se;break e;case nn:te=De;break e;case Mn:te=fe,le=wf(le);break e;case Vt:te=me;break e;case Dr:te=Oe,le=null;break e;case w:if(Wt)return n_(f,E,R,j,d);break;case Xn:if(Ru)return Z4(f,E,R,j,d)}var Be="";{(f===void 0||typeof f=="object"&&f!==null&&Object.keys(f).length===0)&&(Be+=" You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.");var Xe=C?qt(C.type):null;Xe&&(Be+=` - -Check the render method of \``+Xe+"`.")}throw Error("Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: "+(f==null?f:typeof f)+"."+Be)}}}return V=Zi(te,E,d,R),V.elementType=f,V.type=le,V.expirationTime=j,V}function yg(f,d,E){var C=null;C=f._owner;var R=f.type,j=f.key,V=f.props,te=gg(R,j,V,C,d,E);return te._debugSource=f._source,te._debugOwner=f._owner,te}function rf(f,d,E,C){var R=Zi(m,f,C,d);return R.expirationTime=E,R}function n_(f,d,E,C,R){var j=Zi(Dt,d,R,E);return j.elementType=f,j.type=f,j.expirationTime=C,j}function Z4(f,d,E,C,R){var j=Zi(Qe,d,R,E);return j.type=f,j.elementType=f,j.expirationTime=C,j}function $4(f,d,E,C){(typeof f.id!="string"||typeof f.onRender!="function")&&Ve(!1,'Profiler must specify an "id" string and "onRender" function as props');var R=Zi(_e,f,C,d|ii);return R.elementType=dt,R.type=dt,R.expirationTime=E,R}function eE(f,d,E,C){var R=Zi(ce,f,C,d);return R.type=lr,R.elementType=lr,R.expirationTime=E,R}function tE(f,d,E,C){var R=Zi(at,f,C,d);return R.type=ln,R.elementType=ln,R.expirationTime=E,R}function _g(f,d,E){var C=Zi(ne,f,null,d);return C.expirationTime=E,C}function nE(){var f=Zi(q,null,null,Rr);return f.elementType="DELETED",f.type="DELETED",f}function rE(f){var d=Zi(je,null,null,Rr);return d.stateNode=f,d}function Eg(f,d,E){var C=f.children!==null?f.children:[],R=Zi(H,C,f.key,d);return R.expirationTime=E,R.stateNode={containerInfo:f.containerInfo,pendingChildren:null,implementation:f.implementation},R}function r_(f,d){return f===null&&(f=Zi(T,null,null,Rr)),f.tag=d.tag,f.key=d.key,f.elementType=d.elementType,f.type=d.type,f.stateNode=d.stateNode,f.return=d.return,f.child=d.child,f.sibling=d.sibling,f.index=d.index,f.ref=d.ref,f.pendingProps=d.pendingProps,f.memoizedProps=d.memoizedProps,f.updateQueue=d.updateQueue,f.memoizedState=d.memoizedState,f.dependencies=d.dependencies,f.mode=d.mode,f.effectTag=d.effectTag,f.nextEffect=d.nextEffect,f.firstEffect=d.firstEffect,f.lastEffect=d.lastEffect,f.expirationTime=d.expirationTime,f.childExpirationTime=d.childExpirationTime,f.alternate=d.alternate,en&&(f.actualDuration=d.actualDuration,f.actualStartTime=d.actualStartTime,f.selfBaseDuration=d.selfBaseDuration,f.treeBaseDuration=d.treeBaseDuration),f._debugID=d._debugID,f._debugSource=d._debugSource,f._debugOwner=d._debugOwner,f._debugIsCurrentlyTiming=d._debugIsCurrentlyTiming,f._debugNeedsRemount=d._debugNeedsRemount,f._debugHookTypes=d._debugHookTypes,f}function iE(f,d,E){this.tag=d,this.current=null,this.containerInfo=f,this.pendingChildren=null,this.pingCache=null,this.finishedExpirationTime=ft,this.finishedWork=null,this.timeoutHandle=nl,this.context=null,this.pendingContext=null,this.hydrate=E,this.callbackNode=null,this.callbackPriority=E0,this.firstPendingTime=ft,this.firstSuspendedTime=ft,this.lastSuspendedTime=ft,this.nextKnownPendingLevel=ft,this.lastPingedTime=ft,this.lastExpiredTime=ft,bn&&(this.interactionThreadID=O.unstable_getThreadID(),this.memoizedInteractions=new Set,this.pendingInteractionMap=new Map),Yi&&(this.hydrationCallbacks=null)}function uE(f,d,E,C){var R=new iE(f,d,E);Yi&&(R.hydrationCallbacks=C);var j=J4(d);return R.current=j,j.stateNode=R,R}function i_(f,d){var E=f.firstSuspendedTime,C=f.lastSuspendedTime;return E!==ft&&E>=d&&C<=d}function Vf(f,d){var E=f.firstSuspendedTime,C=f.lastSuspendedTime;Ed||E===ft)&&(f.lastSuspendedTime=d),d<=f.lastPingedTime&&(f.lastPingedTime=ft),d<=f.lastExpiredTime&&(f.lastExpiredTime=ft)}function u_(f,d){var E=f.firstPendingTime;d>E&&(f.firstPendingTime=d);var C=f.firstSuspendedTime;C!==ft&&(d>=C?f.firstSuspendedTime=f.lastSuspendedTime=f.nextKnownPendingLevel=ft:d>=f.lastSuspendedTime&&(f.lastSuspendedTime=d+1),d>f.nextKnownPendingLevel&&(f.nextKnownPendingLevel=d))}function oE(f,d,E){f.firstPendingTime=E,d<=f.lastSuspendedTime?f.firstSuspendedTime=f.lastSuspendedTime=f.nextKnownPendingLevel=ft:d<=f.firstSuspendedTime&&(f.firstSuspendedTime=d-1),d<=f.lastPingedTime&&(f.lastPingedTime=ft),d<=f.lastExpiredTime&&(f.lastExpiredTime=ft)}function Vp(f,d){var E=f.lastExpiredTime;(E===ft||E>d)&&(f.lastExpiredTime=d)}var lE={debugTool:null},Lv=lE,Dg,wg;Dg=!1,wg={};function sE(f){if(!f)return An;var d=It(f),E=xl(d);if(d.tag===M){var C=d.type;if(Xi(C))return R0(d,C,E)}return E}function Sg(f){var d=It(f);if(d===void 0)throw typeof f.render=="function"?Error("Unable to find node on an unmounted component."):Error("Argument appears to not be a ReactComponent. Keys: "+Object.keys(f));var E=I0(d);return E===null?null:E.stateNode}function aE(f,d){{var E=It(f);if(E===void 0)throw typeof f.render=="function"?Error("Unable to find node on an unmounted component."):Error("Argument appears to not be a ReactComponent. Keys: "+Object.keys(f));var C=I0(E);if(C===null)return null;if(C.mode&mr){var R=qt(E.type)||"Component";wg[R]||(wg[R]=!0,E.mode&mr?Ve(!1,"%s is deprecated in StrictMode. %s was passed an instance of %s which is inside StrictMode. Instead, add a ref directly to the element you want to reference. Learn more about using refs safely here: https://fb.me/react-strict-mode-find-node%s",d,d,R,Cr(C)):Ve(!1,"%s is deprecated in StrictMode. %s was passed an instance of %s which renders StrictMode children. Instead, add a ref directly to the element you want to reference. Learn more about using refs safely here: https://fb.me/react-strict-mode-find-node%s",d,d,R,Cr(C)))}return C.stateNode}return Sg(f)}function fE(f,d,E,C){return uE(f,d,E,C)}function o_(f,d,E,C){var R=d.current,j=jl();typeof jest!="undefined"&&(vg(R),qp(R));var V=_o(),te=zf(j,R,V);Lv.debugTool&&(R.alternate===null?Lv.debugTool.onMountContainer(d):f===null?Lv.debugTool.onUnmountContainer(d):Lv.debugTool.onUpdateContainer(d));var le=sE(E);d.context===null?d.context=le:d.pendingContext=le,Lr==="render"&&Rn!==null&&!Dg&&(Dg=!0,Ve(!1,`Render methods should be a pure function of props and state; triggering nested component updates from render is not allowed. If necessary, trigger nested updates in componentDidUpdate. - -Check the render method of %s.`,qt(Rn.type)||"Unknown"));var Be=Cu(te,V);return Be.payload={element:f},C=C===void 0?null:C,C!==null&&(typeof C!="function"&&Ve(!1,"render(...): Expected the last optional `callback` argument to be a function. Instead received: %s.",C),Be.callback=C),Ga(R,Be),gl(R,te),te}function cE(f){var d=f.current;if(!d.child)return null;switch(d.child.tag){case q:return No(d.child.stateNode);default:return d.child.stateNode}}function dE(f){switch(f.tag){case B:var d=f.stateNode;d.hydrate&&Gm(d,d.firstPendingTime);break;case ce:Op(function(){return gl(f,Un)});var E=ja(jl());Nv(f,E);break}}function l_(f,d){var E=f.memoizedState;E!==null&&E.dehydrated!==null&&E.retryTime=d.length)return C;var R=d[E],j=Array.isArray(f)?f.slice():a({},f);return j[R]=xg(f[R],d,E+1,C),j},p_=function(f,d,E){return xg(f,d,0,E)};a_=function(f,d,E,C){for(var R=f.memoizedState;R!==null&&d>0;)R=R.next,d--;if(R!==null){var j=p_(R.memoizedState,E,C);R.memoizedState=j,R.baseState=j,f.memoizedProps=a({},f.memoizedProps),gl(f,Un)}},f_=function(f,d,E){f.pendingProps=p_(f.memoizedProps,d,E),f.alternate&&(f.alternate.pendingProps=f.pendingProps),gl(f,Un)},c_=function(f){gl(f,Un)},d_=function(f){Cg=f}}function mE(f){var d=f.findFiberByHostInstance,E=rt.ReactCurrentDispatcher;return Rt(a({},f,{overrideHookState:a_,overrideProps:f_,setSuspenseHandler:d_,scheduleUpdate:c_,currentDispatcherRef:E,findHostInstanceByFiber:function(C){var R=I0(C);return R===null?null:R.stateNode},findFiberByHostInstance:function(C){return d?d(C):null},findHostInstancesForRefresh:od,scheduleRefresh:Ol,scheduleRoot:Cs,setRefreshHandler:Wa,getCurrentFiber:function(){return Rn}}))}var h_=Object.freeze({createContainer:fE,updateContainer:o_,batchedEventUpdates:Qm,batchedUpdates:Xm,unbatchedUpdates:Jm,deferredUpdates:Ym,syncUpdates:pv,discreteUpdates:hv,flushDiscreteUpdates:dv,flushControlled:Zm,flushSync:Op,flushPassiveEffects:nf,IsThisRendererActing:Wf,getPublicRootInstance:cE,attemptSynchronousHydration:dE,attemptUserBlockingHydration:pE,attemptContinuousHydration:Tg,attemptHydrationAtCurrentPriority:hE,findHostInstance:Sg,findHostInstanceWithWarning:aE,findHostInstanceWithNoPortals:vE,shouldSuspend:s_,injectIntoDevTools:mE}),gE=h_.default||h_;Qg.exports=gE;var yE=Qg.exports;return Qg.exports=i,yE})});var hT=Ke((HW,PD)=>{"use strict";process.env.NODE_ENV==="production"?PD.exports=aT():PD.exports=pT()});var mT=Ke((qW,vT)=>{"use strict";var jI={ALIGN_COUNT:8,ALIGN_AUTO:0,ALIGN_FLEX_START:1,ALIGN_CENTER:2,ALIGN_FLEX_END:3,ALIGN_STRETCH:4,ALIGN_BASELINE:5,ALIGN_SPACE_BETWEEN:6,ALIGN_SPACE_AROUND:7,DIMENSION_COUNT:2,DIMENSION_WIDTH:0,DIMENSION_HEIGHT:1,DIRECTION_COUNT:3,DIRECTION_INHERIT:0,DIRECTION_LTR:1,DIRECTION_RTL:2,DISPLAY_COUNT:2,DISPLAY_FLEX:0,DISPLAY_NONE:1,EDGE_COUNT:9,EDGE_LEFT:0,EDGE_TOP:1,EDGE_RIGHT:2,EDGE_BOTTOM:3,EDGE_START:4,EDGE_END:5,EDGE_HORIZONTAL:6,EDGE_VERTICAL:7,EDGE_ALL:8,EXPERIMENTAL_FEATURE_COUNT:1,EXPERIMENTAL_FEATURE_WEB_FLEX_BASIS:0,FLEX_DIRECTION_COUNT:4,FLEX_DIRECTION_COLUMN:0,FLEX_DIRECTION_COLUMN_REVERSE:1,FLEX_DIRECTION_ROW:2,FLEX_DIRECTION_ROW_REVERSE:3,JUSTIFY_COUNT:6,JUSTIFY_FLEX_START:0,JUSTIFY_CENTER:1,JUSTIFY_FLEX_END:2,JUSTIFY_SPACE_BETWEEN:3,JUSTIFY_SPACE_AROUND:4,JUSTIFY_SPACE_EVENLY:5,LOG_LEVEL_COUNT:6,LOG_LEVEL_ERROR:0,LOG_LEVEL_WARN:1,LOG_LEVEL_INFO:2,LOG_LEVEL_DEBUG:3,LOG_LEVEL_VERBOSE:4,LOG_LEVEL_FATAL:5,MEASURE_MODE_COUNT:3,MEASURE_MODE_UNDEFINED:0,MEASURE_MODE_EXACTLY:1,MEASURE_MODE_AT_MOST:2,NODE_TYPE_COUNT:2,NODE_TYPE_DEFAULT:0,NODE_TYPE_TEXT:1,OVERFLOW_COUNT:3,OVERFLOW_VISIBLE:0,OVERFLOW_HIDDEN:1,OVERFLOW_SCROLL:2,POSITION_TYPE_COUNT:2,POSITION_TYPE_RELATIVE:0,POSITION_TYPE_ABSOLUTE:1,PRINT_OPTIONS_COUNT:3,PRINT_OPTIONS_LAYOUT:1,PRINT_OPTIONS_STYLE:2,PRINT_OPTIONS_CHILDREN:4,UNIT_COUNT:4,UNIT_UNDEFINED:0,UNIT_POINT:1,UNIT_PERCENT:2,UNIT_AUTO:3,WRAP_COUNT:3,WRAP_NO_WRAP:0,WRAP_WRAP:1,WRAP_WRAP_REVERSE:2};vT.exports=jI});var ET=Ke((WW,gT)=>{"use strict";var zI=Object.assign||function(i){for(var o=1;o"}}]),i}(),yT=function(){J_(i,null,[{key:"fromJS",value:function(a){var c=a.width,_=a.height;return new i(c,_)}}]);function i(o,a){bD(this,i),this.width=o,this.height=a}return J_(i,[{key:"fromJS",value:function(a){a(this.width,this.height)}},{key:"toString",value:function(){return""}}]),i}(),_T=function(){function i(o,a){bD(this,i),this.unit=o,this.value=a}return J_(i,[{key:"fromJS",value:function(a){a(this.unit,this.value)}},{key:"toString",value:function(){switch(this.unit){case nc.UNIT_POINT:return String(this.value);case nc.UNIT_PERCENT:return this.value+"%";case nc.UNIT_AUTO:return"auto";default:return this.value+"?"}}},{key:"valueOf",value:function(){return this.value}}]),i}();gT.exports=function(i,o){function a(O,N,M){var T=O[N];O[N]=function(){for(var B=arguments.length,H=Array(B),q=0;q1?H-1:0),ne=1;ne1&&arguments[1]!==void 0?arguments[1]:NaN,M=arguments.length>2&&arguments[2]!==void 0?arguments[2]:NaN,T=arguments.length>3&&arguments[3]!==void 0?arguments[3]:nc.DIRECTION_LTR;return O.call(this,N,M,T)}),zI({Config:o.Config,Node:o.Node,Layout:i("Layout",HI),Size:i("Size",yT),Value:i("Value",_T),getInstanceCount:function(){return o.getInstanceCount.apply(o,arguments)}},nc)}});var DT=Ke((exports,module)=>{(function(i,o){typeof define=="function"&&define.amd?define([],function(){return o}):typeof module=="object"&&module.exports?module.exports=o:(i.nbind=i.nbind||{}).init=o})(exports,function(Module,cb){typeof Module=="function"&&(cb=Module,Module={}),Module.onRuntimeInitialized=function(i,o){return function(){i&&i.apply(this,arguments);try{Module.ccall("nbind_init")}catch(a){o(a);return}o(null,{bind:Module._nbind_value,reflect:Module.NBind.reflect,queryType:Module.NBind.queryType,toggleLightGC:Module.toggleLightGC,lib:Module})}}(Module.onRuntimeInitialized,cb);var Module;Module||(Module=(typeof Module!="undefined"?Module:null)||{});var moduleOverrides={};for(var key in Module)Module.hasOwnProperty(key)&&(moduleOverrides[key]=Module[key]);var ENVIRONMENT_IS_WEB=!1,ENVIRONMENT_IS_WORKER=!1,ENVIRONMENT_IS_NODE=!1,ENVIRONMENT_IS_SHELL=!1;if(Module.ENVIRONMENT)if(Module.ENVIRONMENT==="WEB")ENVIRONMENT_IS_WEB=!0;else if(Module.ENVIRONMENT==="WORKER")ENVIRONMENT_IS_WORKER=!0;else if(Module.ENVIRONMENT==="NODE")ENVIRONMENT_IS_NODE=!0;else if(Module.ENVIRONMENT==="SHELL")ENVIRONMENT_IS_SHELL=!0;else throw new Error("The provided Module['ENVIRONMENT'] value is not valid. It must be one of: WEB|WORKER|NODE|SHELL.");else ENVIRONMENT_IS_WEB=typeof window=="object",ENVIRONMENT_IS_WORKER=typeof importScripts=="function",ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof require=="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER,ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;if(ENVIRONMENT_IS_NODE){Module.print||(Module.print=console.log),Module.printErr||(Module.printErr=console.warn);var nodeFS,nodePath;Module.read=function(o,a){nodeFS||(nodeFS={}("")),nodePath||(nodePath={}("")),o=nodePath.normalize(o);var c=nodeFS.readFileSync(o);return a?c:c.toString()},Module.readBinary=function(o){var a=Module.read(o,!0);return a.buffer||(a=new Uint8Array(a)),assert(a.buffer),a},Module.load=function(o){globalEval(read(o))},Module.thisProgram||(process.argv.length>1?Module.thisProgram=process.argv[1].replace(/\\/g,"/"):Module.thisProgram="unknown-program"),Module.arguments=process.argv.slice(2),typeof module!="undefined"&&(module.exports=Module),Module.inspect=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL)Module.print||(Module.print=print),typeof printErr!="undefined"&&(Module.printErr=printErr),typeof read!="undefined"?Module.read=read:Module.read=function(){throw"no read() available"},Module.readBinary=function(o){if(typeof readbuffer=="function")return new Uint8Array(readbuffer(o));var a=read(o,"binary");return assert(typeof a=="object"),a},typeof scriptArgs!="undefined"?Module.arguments=scriptArgs:typeof arguments!="undefined"&&(Module.arguments=arguments),typeof quit=="function"&&(Module.quit=function(i,o){quit(i)});else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(Module.read=function(o){var a=new XMLHttpRequest;return a.open("GET",o,!1),a.send(null),a.responseText},ENVIRONMENT_IS_WORKER&&(Module.readBinary=function(o){var a=new XMLHttpRequest;return a.open("GET",o,!1),a.responseType="arraybuffer",a.send(null),new Uint8Array(a.response)}),Module.readAsync=function(o,a,c){var _=new XMLHttpRequest;_.open("GET",o,!0),_.responseType="arraybuffer",_.onload=function(){_.status==200||_.status==0&&_.response?a(_.response):c()},_.onerror=c,_.send(null)},typeof arguments!="undefined"&&(Module.arguments=arguments),typeof console!="undefined")Module.print||(Module.print=function(o){console.log(o)}),Module.printErr||(Module.printErr=function(o){console.warn(o)});else{var TRY_USE_DUMP=!1;Module.print||(Module.print=TRY_USE_DUMP&&typeof dump!="undefined"?function(i){dump(i)}:function(i){})}ENVIRONMENT_IS_WORKER&&(Module.load=importScripts),typeof Module.setWindowTitle=="undefined"&&(Module.setWindowTitle=function(i){document.title=i})}else throw"Unknown runtime environment. Where are we?";function globalEval(i){eval.call(null,i)}!Module.load&&Module.read&&(Module.load=function(o){globalEval(Module.read(o))}),Module.print||(Module.print=function(){}),Module.printErr||(Module.printErr=Module.print),Module.arguments||(Module.arguments=[]),Module.thisProgram||(Module.thisProgram="./this.program"),Module.quit||(Module.quit=function(i,o){throw o}),Module.print=Module.print,Module.printErr=Module.printErr,Module.preRun=[],Module.postRun=[];for(var key in moduleOverrides)moduleOverrides.hasOwnProperty(key)&&(Module[key]=moduleOverrides[key]);moduleOverrides=void 0;var Runtime={setTempRet0:function(i){return tempRet0=i,i},getTempRet0:function(){return tempRet0},stackSave:function(){return STACKTOP},stackRestore:function(i){STACKTOP=i},getNativeTypeSize:function(i){switch(i){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(i[i.length-1]==="*")return Runtime.QUANTUM_SIZE;if(i[0]==="i"){var o=parseInt(i.substr(1));return assert(o%8==0),o/8}else return 0}}},getNativeFieldSize:function(i){return Math.max(Runtime.getNativeTypeSize(i),Runtime.QUANTUM_SIZE)},STACK_ALIGN:16,prepVararg:function(i,o){return o==="double"||o==="i64"?i&7&&(assert((i&7)==4),i+=4):assert((i&3)==0),i},getAlignSize:function(i,o,a){return!a&&(i=="i64"||i=="double")?8:i?Math.min(o||(i?Runtime.getNativeFieldSize(i):0),Runtime.QUANTUM_SIZE):Math.min(o,8)},dynCall:function(i,o,a){return a&&a.length?Module["dynCall_"+i].apply(null,[o].concat(a)):Module["dynCall_"+i].call(null,o)},functionPointers:[],addFunction:function(i){for(var o=0;o>2],a=(o+i+15|0)&-16;if(HEAP32[DYNAMICTOP_PTR>>2]=a,a>=TOTAL_MEMORY){var c=enlargeMemory();if(!c)return HEAP32[DYNAMICTOP_PTR>>2]=o,0}return o},alignMemory:function(i,o){var a=i=Math.ceil(i/(o||16))*(o||16);return a},makeBigInt:function(i,o,a){var c=a?+(i>>>0)+ +(o>>>0)*4294967296:+(i>>>0)+ +(o|0)*4294967296;return c},GLOBAL_BASE:8,QUANTUM_SIZE:4,__dummy__:0};Module.Runtime=Runtime;var ABORT=0,EXITSTATUS=0;function assert(i,o){i||abort("Assertion failed: "+o)}function getCFunc(ident){var func=Module["_"+ident];if(!func)try{func=eval("_"+ident)}catch(i){}return assert(func,"Cannot call unknown function "+ident+" (perhaps LLVM optimizations or closure removed it?)"),func}var cwrap,ccall;(function(){var JSfuncs={stackSave:function(){Runtime.stackSave()},stackRestore:function(){Runtime.stackRestore()},arrayToC:function(i){var o=Runtime.stackAlloc(i.length);return writeArrayToMemory(i,o),o},stringToC:function(i){var o=0;if(i!=null&&i!==0){var a=(i.length<<2)+1;o=Runtime.stackAlloc(a),stringToUTF8(i,o,a)}return o}},toC={string:JSfuncs.stringToC,array:JSfuncs.arrayToC};ccall=function(o,a,c,_,t){var O=getCFunc(o),N=[],M=0;if(_)for(var T=0;T<_.length;T++){var B=toC[c[T]];B?(M===0&&(M=Runtime.stackSave()),N[T]=B(_[T])):N[T]=_[T]}var H=O.apply(null,N);if(a==="string"&&(H=Pointer_stringify(H)),M!==0){if(t&&t.async){EmterpreterAsync.asyncFinalizers.push(function(){Runtime.stackRestore(M)});return}Runtime.stackRestore(M)}return H};var sourceRegex=/^function\s*[a-zA-Z$_0-9]*\s*\(([^)]*)\)\s*{\s*([^*]*?)[\s;]*(?:return\s*(.*?)[;\s]*)?}$/;function parseJSFunc(i){var o=i.toString().match(sourceRegex).slice(1);return{arguments:o[0],body:o[1],returnValue:o[2]}}var JSsource=null;function ensureJSsource(){if(!JSsource){JSsource={};for(var i in JSfuncs)JSfuncs.hasOwnProperty(i)&&(JSsource[i]=parseJSFunc(JSfuncs[i]))}}cwrap=function(ident,returnType,argTypes){argTypes=argTypes||[];var cfunc=getCFunc(ident),numericArgs=argTypes.every(function(i){return i==="number"}),numericRet=returnType!=="string";if(numericRet&&numericArgs)return cfunc;var argNames=argTypes.map(function(i,o){return"$"+o}),funcstr="(function("+argNames.join(",")+") {",nargs=argTypes.length;if(!numericArgs){ensureJSsource(),funcstr+="var stack = "+JSsource.stackSave.body+";";for(var i=0;i>0]=o;break;case"i8":HEAP8[i>>0]=o;break;case"i16":HEAP16[i>>1]=o;break;case"i32":HEAP32[i>>2]=o;break;case"i64":tempI64=[o>>>0,(tempDouble=o,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[i>>2]=tempI64[0],HEAP32[i+4>>2]=tempI64[1];break;case"float":HEAPF32[i>>2]=o;break;case"double":HEAPF64[i>>3]=o;break;default:abort("invalid type for setValue: "+a)}}Module.setValue=setValue;function getValue(i,o,a){switch(o=o||"i8",o.charAt(o.length-1)==="*"&&(o="i32"),o){case"i1":return HEAP8[i>>0];case"i8":return HEAP8[i>>0];case"i16":return HEAP16[i>>1];case"i32":return HEAP32[i>>2];case"i64":return HEAP32[i>>2];case"float":return HEAPF32[i>>2];case"double":return HEAPF64[i>>3];default:abort("invalid type for setValue: "+o)}return null}Module.getValue=getValue;var ALLOC_NORMAL=0,ALLOC_STACK=1,ALLOC_STATIC=2,ALLOC_DYNAMIC=3,ALLOC_NONE=4;Module.ALLOC_NORMAL=ALLOC_NORMAL,Module.ALLOC_STACK=ALLOC_STACK,Module.ALLOC_STATIC=ALLOC_STATIC,Module.ALLOC_DYNAMIC=ALLOC_DYNAMIC,Module.ALLOC_NONE=ALLOC_NONE;function allocate(i,o,a,c){var _,t;typeof i=="number"?(_=!0,t=i):(_=!1,t=i.length);var O=typeof o=="string"?o:null,N;if(a==ALLOC_NONE?N=c:N=[typeof _malloc=="function"?_malloc:Runtime.staticAlloc,Runtime.stackAlloc,Runtime.staticAlloc,Runtime.dynamicAlloc][a===void 0?ALLOC_STATIC:a](Math.max(t,O?1:o.length)),_){var c=N,M;for(assert((N&3)==0),M=N+(t&~3);c>2]=0;for(M=N+t;c>0]=0;return N}if(O==="i8")return i.subarray||i.slice?HEAPU8.set(i,N):HEAPU8.set(new Uint8Array(i),N),N;for(var T=0,B,H,q;T>0],a|=c,!(c==0&&!o||(_++,o&&_==o)););o||(o=_);var t="";if(a<128){for(var O=1024,N;o>0;)N=String.fromCharCode.apply(String,HEAPU8.subarray(i,i+Math.min(o,O))),t=t?t+N:N,i+=O,o-=O;return t}return Module.UTF8ToString(i)}Module.Pointer_stringify=Pointer_stringify;function AsciiToString(i){for(var o="";;){var a=HEAP8[i++>>0];if(!a)return o;o+=String.fromCharCode(a)}}Module.AsciiToString=AsciiToString;function stringToAscii(i,o){return writeAsciiToMemory(i,o,!1)}Module.stringToAscii=stringToAscii;var UTF8Decoder=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):void 0;function UTF8ArrayToString(i,o){for(var a=o;i[a];)++a;if(a-o>16&&i.subarray&&UTF8Decoder)return UTF8Decoder.decode(i.subarray(o,a));for(var c,_,t,O,N,M,T="";;){if(c=i[o++],!c)return T;if(!(c&128)){T+=String.fromCharCode(c);continue}if(_=i[o++]&63,(c&224)==192){T+=String.fromCharCode((c&31)<<6|_);continue}if(t=i[o++]&63,(c&240)==224?c=(c&15)<<12|_<<6|t:(O=i[o++]&63,(c&248)==240?c=(c&7)<<18|_<<12|t<<6|O:(N=i[o++]&63,(c&252)==248?c=(c&3)<<24|_<<18|t<<12|O<<6|N:(M=i[o++]&63,c=(c&1)<<30|_<<24|t<<18|O<<12|N<<6|M))),c<65536)T+=String.fromCharCode(c);else{var B=c-65536;T+=String.fromCharCode(55296|B>>10,56320|B&1023)}}}Module.UTF8ArrayToString=UTF8ArrayToString;function UTF8ToString(i){return UTF8ArrayToString(HEAPU8,i)}Module.UTF8ToString=UTF8ToString;function stringToUTF8Array(i,o,a,c){if(!(c>0))return 0;for(var _=a,t=a+c-1,O=0;O=55296&&N<=57343&&(N=65536+((N&1023)<<10)|i.charCodeAt(++O)&1023),N<=127){if(a>=t)break;o[a++]=N}else if(N<=2047){if(a+1>=t)break;o[a++]=192|N>>6,o[a++]=128|N&63}else if(N<=65535){if(a+2>=t)break;o[a++]=224|N>>12,o[a++]=128|N>>6&63,o[a++]=128|N&63}else if(N<=2097151){if(a+3>=t)break;o[a++]=240|N>>18,o[a++]=128|N>>12&63,o[a++]=128|N>>6&63,o[a++]=128|N&63}else if(N<=67108863){if(a+4>=t)break;o[a++]=248|N>>24,o[a++]=128|N>>18&63,o[a++]=128|N>>12&63,o[a++]=128|N>>6&63,o[a++]=128|N&63}else{if(a+5>=t)break;o[a++]=252|N>>30,o[a++]=128|N>>24&63,o[a++]=128|N>>18&63,o[a++]=128|N>>12&63,o[a++]=128|N>>6&63,o[a++]=128|N&63}}return o[a]=0,a-_}Module.stringToUTF8Array=stringToUTF8Array;function stringToUTF8(i,o,a){return stringToUTF8Array(i,HEAPU8,o,a)}Module.stringToUTF8=stringToUTF8;function lengthBytesUTF8(i){for(var o=0,a=0;a=55296&&c<=57343&&(c=65536+((c&1023)<<10)|i.charCodeAt(++a)&1023),c<=127?++o:c<=2047?o+=2:c<=65535?o+=3:c<=2097151?o+=4:c<=67108863?o+=5:o+=6}return o}Module.lengthBytesUTF8=lengthBytesUTF8;var UTF16Decoder=typeof TextDecoder!="undefined"?new TextDecoder("utf-16le"):void 0;function demangle(i){var o=Module.___cxa_demangle||Module.__cxa_demangle;if(o){try{var a=i.substr(1),c=lengthBytesUTF8(a)+1,_=_malloc(c);stringToUTF8(a,_,c);var t=_malloc(4),O=o(_,0,0,t);if(getValue(t,"i32")===0&&O)return Pointer_stringify(O)}catch(N){}finally{_&&_free(_),t&&_free(t),O&&_free(O)}return i}return Runtime.warnOnce("warning: build with -s DEMANGLE_SUPPORT=1 to link in libcxxabi demangling"),i}function demangleAll(i){var o=/__Z[\w\d_]+/g;return i.replace(o,function(a){var c=demangle(a);return a===c?a:a+" ["+c+"]"})}function jsStackTrace(){var i=new Error;if(!i.stack){try{throw new Error(0)}catch(o){i=o}if(!i.stack)return"(no stack trace available)"}return i.stack.toString()}function stackTrace(){var i=jsStackTrace();return Module.extraStackTrace&&(i+=` -`+Module.extraStackTrace()),demangleAll(i)}Module.stackTrace=stackTrace;var HEAP,buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module.HEAP8=HEAP8=new Int8Array(buffer),Module.HEAP16=HEAP16=new Int16Array(buffer),Module.HEAP32=HEAP32=new Int32Array(buffer),Module.HEAPU8=HEAPU8=new Uint8Array(buffer),Module.HEAPU16=HEAPU16=new Uint16Array(buffer),Module.HEAPU32=HEAPU32=new Uint32Array(buffer),Module.HEAPF32=HEAPF32=new Float32Array(buffer),Module.HEAPF64=HEAPF64=new Float64Array(buffer)}var STATIC_BASE,STATICTOP,staticSealed,STACK_BASE,STACKTOP,STACK_MAX,DYNAMIC_BASE,DYNAMICTOP_PTR;STATIC_BASE=STATICTOP=STACK_BASE=STACKTOP=STACK_MAX=DYNAMIC_BASE=DYNAMICTOP_PTR=0,staticSealed=!1;function abortOnCannotGrowMemory(){abort("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+TOTAL_MEMORY+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or (4) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")}function enlargeMemory(){abortOnCannotGrowMemory()}var TOTAL_STACK=Module.TOTAL_STACK||5242880,TOTAL_MEMORY=Module.TOTAL_MEMORY||134217728;TOTAL_MEMORY0;){var o=i.shift();if(typeof o=="function"){o();continue}var a=o.func;typeof a=="number"?o.arg===void 0?Module.dynCall_v(a):Module.dynCall_vi(a,o.arg):a(o.arg===void 0?null:o.arg)}}var __ATPRERUN__=[],__ATINIT__=[],__ATMAIN__=[],__ATEXIT__=[],__ATPOSTRUN__=[],runtimeInitialized=!1,runtimeExited=!1;function preRun(){if(Module.preRun)for(typeof Module.preRun=="function"&&(Module.preRun=[Module.preRun]);Module.preRun.length;)addOnPreRun(Module.preRun.shift());callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){runtimeInitialized||(runtimeInitialized=!0,callRuntimeCallbacks(__ATINIT__))}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__),runtimeExited=!0}function postRun(){if(Module.postRun)for(typeof Module.postRun=="function"&&(Module.postRun=[Module.postRun]);Module.postRun.length;)addOnPostRun(Module.postRun.shift());callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(i){__ATPRERUN__.unshift(i)}Module.addOnPreRun=addOnPreRun;function addOnInit(i){__ATINIT__.unshift(i)}Module.addOnInit=addOnInit;function addOnPreMain(i){__ATMAIN__.unshift(i)}Module.addOnPreMain=addOnPreMain;function addOnExit(i){__ATEXIT__.unshift(i)}Module.addOnExit=addOnExit;function addOnPostRun(i){__ATPOSTRUN__.unshift(i)}Module.addOnPostRun=addOnPostRun;function intArrayFromString(i,o,a){var c=a>0?a:lengthBytesUTF8(i)+1,_=new Array(c),t=stringToUTF8Array(i,_,0,_.length);return o&&(_.length=t),_}Module.intArrayFromString=intArrayFromString;function intArrayToString(i){for(var o=[],a=0;a255&&(c&=255),o.push(String.fromCharCode(c))}return o.join("")}Module.intArrayToString=intArrayToString;function writeStringToMemory(i,o,a){Runtime.warnOnce("writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!");var c,_;a&&(_=o+lengthBytesUTF8(i),c=HEAP8[_]),stringToUTF8(i,o,Infinity),a&&(HEAP8[_]=c)}Module.writeStringToMemory=writeStringToMemory;function writeArrayToMemory(i,o){HEAP8.set(i,o)}Module.writeArrayToMemory=writeArrayToMemory;function writeAsciiToMemory(i,o,a){for(var c=0;c>0]=i.charCodeAt(c);a||(HEAP8[o>>0]=0)}if(Module.writeAsciiToMemory=writeAsciiToMemory,(!Math.imul||Math.imul(4294967295,5)!==-5)&&(Math.imul=function(o,a){var c=o>>>16,_=o&65535,t=a>>>16,O=a&65535;return _*O+(c*O+_*t<<16)|0}),Math.imul=Math.imul,!Math.fround){var froundBuffer=new Float32Array(1);Math.fround=function(i){return froundBuffer[0]=i,froundBuffer[0]}}Math.fround=Math.fround,Math.clz32||(Math.clz32=function(i){i=i>>>0;for(var o=0;o<32;o++)if(i&1<<31-o)return o;return 32}),Math.clz32=Math.clz32,Math.trunc||(Math.trunc=function(i){return i<0?Math.ceil(i):Math.floor(i)}),Math.trunc=Math.trunc;var Math_abs=Math.abs,Math_cos=Math.cos,Math_sin=Math.sin,Math_tan=Math.tan,Math_acos=Math.acos,Math_asin=Math.asin,Math_atan=Math.atan,Math_atan2=Math.atan2,Math_exp=Math.exp,Math_log=Math.log,Math_sqrt=Math.sqrt,Math_ceil=Math.ceil,Math_floor=Math.floor,Math_pow=Math.pow,Math_imul=Math.imul,Math_fround=Math.fround,Math_round=Math.round,Math_min=Math.min,Math_clz32=Math.clz32,Math_trunc=Math.trunc,runDependencies=0,runDependencyWatcher=null,dependenciesFulfilled=null;function getUniqueRunDependency(i){return i}function addRunDependency(i){runDependencies++,Module.monitorRunDependencies&&Module.monitorRunDependencies(runDependencies)}Module.addRunDependency=addRunDependency;function removeRunDependency(i){if(runDependencies--,Module.monitorRunDependencies&&Module.monitorRunDependencies(runDependencies),runDependencies==0&&(runDependencyWatcher!==null&&(clearInterval(runDependencyWatcher),runDependencyWatcher=null),dependenciesFulfilled)){var o=dependenciesFulfilled;dependenciesFulfilled=null,o()}}Module.removeRunDependency=removeRunDependency,Module.preloadedImages={},Module.preloadedAudios={};var ASM_CONSTS=[function(i,o,a,c,_,t,O,N){return _nbind.callbackSignatureList[i].apply(this,arguments)}];function _emscripten_asm_const_iiiiiiii(i,o,a,c,_,t,O,N){return ASM_CONSTS[i](o,a,c,_,t,O,N)}function _emscripten_asm_const_iiiii(i,o,a,c,_){return ASM_CONSTS[i](o,a,c,_)}function _emscripten_asm_const_iiidddddd(i,o,a,c,_,t,O,N,M){return ASM_CONSTS[i](o,a,c,_,t,O,N,M)}function _emscripten_asm_const_iiididi(i,o,a,c,_,t,O){return ASM_CONSTS[i](o,a,c,_,t,O)}function _emscripten_asm_const_iiii(i,o,a,c){return ASM_CONSTS[i](o,a,c)}function _emscripten_asm_const_iiiid(i,o,a,c,_){return ASM_CONSTS[i](o,a,c,_)}function _emscripten_asm_const_iiiiii(i,o,a,c,_,t){return ASM_CONSTS[i](o,a,c,_,t)}STATIC_BASE=Runtime.GLOBAL_BASE,STATICTOP=STATIC_BASE+12800,__ATINIT__.push({func:function(){__GLOBAL__sub_I_Yoga_cpp()}},{func:function(){__GLOBAL__sub_I_nbind_cc()}},{func:function(){__GLOBAL__sub_I_common_cc()}},{func:function(){__GLOBAL__sub_I_Binding_cc()}}),allocate([0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,192,127,0,0,192,127,0,0,192,127,3,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,3,0,0,0,0,0,192,127,3,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,192,127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,0,0,0,0,0,0,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,192,127,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,0,0,128,191,0,0,128,191,0,0,192,127,0,0,0,0,0,0,0,0,0,0,128,63,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0,1,0,0,0,2,0,0,0,0,0,0,0,190,12,0,0,200,12,0,0,208,12,0,0,216,12,0,0,230,12,0,0,242,12,0,0,1,0,0,0,3,0,0,0,0,0,0,0,2,0,0,0,0,0,192,127,3,0,0,0,180,45,0,0,181,45,0,0,182,45,0,0,181,45,0,0,182,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,1,0,0,0,4,0,0,0,183,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,184,45,0,0,185,45,0,0,181,45,0,0,181,45,0,0,182,45,0,0,186,45,0,0,185,45,0,0,148,4,0,0,3,0,0,0,187,45,0,0,164,4,0,0,188,45,0,0,2,0,0,0,189,45,0,0,164,4,0,0,188,45,0,0,185,45,0,0,164,4,0,0,185,45,0,0,164,4,0,0,188,45,0,0,181,45,0,0,182,45,0,0,181,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,5,0,0,0,6,0,0,0,1,0,0,0,7,0,0,0,183,45,0,0,182,45,0,0,181,45,0,0,190,45,0,0,190,45,0,0,182,45,0,0,182,45,0,0,185,45,0,0,181,45,0,0,185,45,0,0,182,45,0,0,181,45,0,0,185,45,0,0,182,45,0,0,185,45,0,0,48,5,0,0,3,0,0,0,56,5,0,0,1,0,0,0,189,45,0,0,185,45,0,0,164,4,0,0,76,5,0,0,2,0,0,0,191,45,0,0,186,45,0,0,182,45,0,0,185,45,0,0,192,45,0,0,185,45,0,0,182,45,0,0,186,45,0,0,185,45,0,0,76,5,0,0,76,5,0,0,136,5,0,0,182,45,0,0,181,45,0,0,2,0,0,0,190,45,0,0,136,5,0,0,56,19,0,0,156,5,0,0,2,0,0,0,184,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,8,0,0,0,9,0,0,0,1,0,0,0,10,0,0,0,204,5,0,0,181,45,0,0,181,45,0,0,2,0,0,0,180,45,0,0,204,5,0,0,2,0,0,0,195,45,0,0,236,5,0,0,97,19,0,0,198,45,0,0,211,45,0,0,212,45,0,0,213,45,0,0,214,45,0,0,215,45,0,0,188,45,0,0,182,45,0,0,216,45,0,0,217,45,0,0,218,45,0,0,219,45,0,0,192,45,0,0,181,45,0,0,0,0,0,0,185,45,0,0,110,19,0,0,186,45,0,0,115,19,0,0,221,45,0,0,120,19,0,0,148,4,0,0,132,19,0,0,96,6,0,0,145,19,0,0,222,45,0,0,164,19,0,0,223,45,0,0,173,19,0,0,0,0,0,0,3,0,0,0,104,6,0,0,1,0,0,0,187,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,11,0,0,0,12,0,0,0,1,0,0,0,13,0,0,0,185,45,0,0,224,45,0,0,164,6,0,0,188,45,0,0,172,6,0,0,180,6,0,0,2,0,0,0,188,6,0,0,7,0,0,0,224,45,0,0,7,0,0,0,164,6,0,0,1,0,0,0,213,45,0,0,185,45,0,0,224,45,0,0,172,6,0,0,185,45,0,0,224,45,0,0,164,6,0,0,185,45,0,0,224,45,0,0,211,45,0,0,211,45,0,0,222,45,0,0,211,45,0,0,224,45,0,0,222,45,0,0,211,45,0,0,224,45,0,0,172,6,0,0,222,45,0,0,211,45,0,0,224,45,0,0,188,45,0,0,222,45,0,0,211,45,0,0,40,7,0,0,188,45,0,0,2,0,0,0,224,45,0,0,185,45,0,0,188,45,0,0,188,45,0,0,188,45,0,0,188,45,0,0,222,45,0,0,224,45,0,0,148,4,0,0,185,45,0,0,148,4,0,0,148,4,0,0,148,4,0,0,148,4,0,0,148,4,0,0,185,45,0,0,164,6,0,0,148,4,0,0,0,0,0,0,0,0,0,0,1,0,0,0,14,0,0,0,15,0,0,0,1,0,0,0,16,0,0,0,148,7,0,0,2,0,0,0,225,45,0,0,183,45,0,0,188,45,0,0,168,7,0,0,5,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,234,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,148,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28,9,0,0,5,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,2,0,0,0,242,45,0,0,0,4,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67,111,117,108,100,32,110,111,116,32,97,108,108,111,99,97,116,101,32,109,101,109,111,114,121,32,102,111,114,32,110,111,100,101,0,67,97,110,110,111,116,32,114,101,115,101,116,32,97,32,110,111,100,101,32,119,104,105,99,104,32,115,116,105,108,108,32,104,97,115,32,99,104,105,108,100,114,101,110,32,97,116,116,97,99,104,101,100,0,67,97,110,110,111,116,32,114,101,115,101,116,32,97,32,110,111,100,101,32,115,116,105,108,108,32,97,116,116,97,99,104,101,100,32,116,111,32,97,32,112,97,114,101,110,116,0,67,111,117,108,100,32,110,111,116,32,97,108,108,111,99,97,116,101,32,109,101,109,111,114,121,32,102,111,114,32,99,111,110,102,105,103,0,67,97,110,110,111,116,32,115,101,116,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,58,32,78,111,100,101,115,32,119,105,116,104,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,115,32,99,97,110,110,111,116,32,104,97,118,101,32,99,104,105,108,100,114,101,110,46,0,67,104,105,108,100,32,97,108,114,101,97,100,121,32,104,97,115,32,97,32,112,97,114,101,110,116,44,32,105,116,32,109,117,115,116,32,98,101,32,114,101,109,111,118,101,100,32,102,105,114,115,116,46,0,67,97,110,110,111,116,32,97,100,100,32,99,104,105,108,100,58,32,78,111,100,101,115,32,119,105,116,104,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,115,32,99,97,110,110,111,116,32,104,97,118,101,32,99,104,105,108,100,114,101,110,46,0,79,110,108,121,32,108,101,97,102,32,110,111,100,101,115,32,119,105,116,104,32,99,117,115,116,111,109,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,115,115,104,111,117,108,100,32,109,97,110,117,97,108,108,121,32,109,97,114,107,32,116,104,101,109,115,101,108,118,101,115,32,97,115,32,100,105,114,116,121,0,67,97,110,110,111,116,32,103,101,116,32,108,97,121,111,117,116,32,112,114,111,112,101,114,116,105,101,115,32,111,102,32,109,117,108,116,105,45,101,100,103,101,32,115,104,111,114,116,104,97,110,100,115,0,37,115,37,100,46,123,91,115,107,105,112,112,101,100,93,32,0,119,109,58,32,37,115,44,32,104,109,58,32,37,115,44,32,97,119,58,32,37,102,32,97,104,58,32,37,102,32,61,62,32,100,58,32,40,37,102,44,32,37,102,41,32,37,115,10,0,37,115,37,100,46,123,37,115,0,42,0,119,109,58,32,37,115,44,32,104,109,58,32,37,115,44,32,97,119,58,32,37,102,32,97,104,58,32,37,102,32,37,115,10,0,37,115,37,100,46,125,37,115,0,119,109,58,32,37,115,44,32,104,109,58,32,37,115,44,32,100,58,32,40,37,102,44,32,37,102,41,32,37,115,10,0,79,117,116,32,111,102,32,99,97,99,104,101,32,101,110,116,114,105,101,115,33,10,0,83,99,97,108,101,32,102,97,99,116,111,114,32,115,104,111,117,108,100,32,110,111,116,32,98,101,32,108,101,115,115,32,116,104,97,110,32,122,101,114,111,0,105,110,105,116,105,97,108,0,37,115,10,0,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,0,85,78,68,69,70,73,78,69,68,0,69,88,65,67,84,76,89,0,65,84,95,77,79,83,84,0,76,65,89,95,85,78,68,69,70,73,78,69,68,0,76,65,89,95,69,88,65,67,84,76,89,0,76,65,89,95,65,84,95,77,79,83,84,0,97,118,97,105,108,97,98,108,101,87,105,100,116,104,32,105,115,32,105,110,100,101,102,105,110,105,116,101,32,115,111,32,119,105,100,116,104,77,101,97,115,117,114,101,77,111,100,101,32,109,117,115,116,32,98,101,32,89,71,77,101,97,115,117,114,101,77,111,100,101,85,110,100,101,102,105,110,101,100,0,97,118,97,105,108,97,98,108,101,72,101,105,103,104,116,32,105,115,32,105,110,100,101,102,105,110,105,116,101,32,115,111,32,104,101,105,103,104,116,77,101,97,115,117,114,101,77,111,100,101,32,109,117,115,116,32,98,101,32,89,71,77,101,97,115,117,114,101,77,111,100,101,85,110,100,101,102,105,110,101,100,0,102,108,101,120,0,115,116,114,101,116,99,104,0,109,117,108,116,105,108,105,110,101,45,115,116,114,101,116,99,104,0,69,120,112,101,99,116,101,100,32,110,111,100,101,32,116,111,32,104,97,118,101,32,99,117,115,116,111,109,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,0,109,101,97,115,117,114,101,0,69,120,112,101,99,116,32,99,117,115,116,111,109,32,98,97,115,101,108,105,110,101,32,102,117,110,99,116,105,111,110,32,116,111,32,110,111,116,32,114,101,116,117,114,110,32,78,97,78,0,97,98,115,45,109,101,97,115,117,114,101,0,97,98,115,45,108,97,121,111,117,116,0,78,111,100,101,0,99,114,101,97,116,101,68,101,102,97,117,108,116,0,99,114,101,97,116,101,87,105,116,104,67,111,110,102,105,103,0,100,101,115,116,114,111,121,0,114,101,115,101,116,0,99,111,112,121,83,116,121,108,101,0,115,101,116,80,111,115,105,116,105,111,110,84,121,112,101,0,115,101,116,80,111,115,105,116,105,111,110,0,115,101,116,80,111,115,105,116,105,111,110,80,101,114,99,101,110,116,0,115,101,116,65,108,105,103,110,67,111,110,116,101,110,116,0,115,101,116,65,108,105,103,110,73,116,101,109,115,0,115,101,116,65,108,105,103,110,83,101,108,102,0,115,101,116,70,108,101,120,68,105,114,101,99,116,105,111,110,0,115,101,116,70,108,101,120,87,114,97,112,0,115,101,116,74,117,115,116,105,102,121,67,111,110,116,101,110,116,0,115,101,116,77,97,114,103,105,110,0,115,101,116,77,97,114,103,105,110,80,101,114,99,101,110,116,0,115,101,116,77,97,114,103,105,110,65,117,116,111,0,115,101,116,79,118,101,114,102,108,111,119,0,115,101,116,68,105,115,112,108,97,121,0,115,101,116,70,108,101,120,0,115,101,116,70,108,101,120,66,97,115,105,115,0,115,101,116,70,108,101,120,66,97,115,105,115,80,101,114,99,101,110,116,0,115,101,116,70,108,101,120,71,114,111,119,0,115,101,116,70,108,101,120,83,104,114,105,110,107,0,115,101,116,87,105,100,116,104,0,115,101,116,87,105,100,116,104,80,101,114,99,101,110,116,0,115,101,116,87,105,100,116,104,65,117,116,111,0,115,101,116,72,101,105,103,104,116,0,115,101,116,72,101,105,103,104,116,80,101,114,99,101,110,116,0,115,101,116,72,101,105,103,104,116,65,117,116,111,0,115,101,116,77,105,110,87,105,100,116,104,0,115,101,116,77,105,110,87,105,100,116,104,80,101,114,99,101,110,116,0,115,101,116,77,105,110,72,101,105,103,104,116,0,115,101,116,77,105,110,72,101,105,103,104,116,80,101,114,99,101,110,116,0,115,101,116,77,97,120,87,105,100,116,104,0,115,101,116,77,97,120,87,105,100,116,104,80,101,114,99,101,110,116,0,115,101,116,77,97,120,72,101,105,103,104,116,0,115,101,116,77,97,120,72,101,105,103,104,116,80,101,114,99,101,110,116,0,115,101,116,65,115,112,101,99,116,82,97,116,105,111,0,115,101,116,66,111,114,100,101,114,0,115,101,116,80,97,100,100,105,110,103,0,115,101,116,80,97,100,100,105,110,103,80,101,114,99,101,110,116,0,103,101,116,80,111,115,105,116,105,111,110,84,121,112,101,0,103,101,116,80,111,115,105,116,105,111,110,0,103,101,116,65,108,105,103,110,67,111,110,116,101,110,116,0,103,101,116,65,108,105,103,110,73,116,101,109,115,0,103,101,116,65,108,105,103,110,83,101,108,102,0,103,101,116,70,108,101,120,68,105,114,101,99,116,105,111,110,0,103,101,116,70,108,101,120,87,114,97,112,0,103,101,116,74,117,115,116,105,102,121,67,111,110,116,101,110,116,0,103,101,116,77,97,114,103,105,110,0,103,101,116,70,108,101,120,66,97,115,105,115,0,103,101,116,70,108,101,120,71,114,111,119,0,103,101,116,70,108,101,120,83,104,114,105,110,107,0,103,101,116,87,105,100,116,104,0,103,101,116,72,101,105,103,104,116,0,103,101,116,77,105,110,87,105,100,116,104,0,103,101,116,77,105,110,72,101,105,103,104,116,0,103,101,116,77,97,120,87,105,100,116,104,0,103,101,116,77,97,120,72,101,105,103,104,116,0,103,101,116,65,115,112,101,99,116,82,97,116,105,111,0,103,101,116,66,111,114,100,101,114,0,103,101,116,79,118,101,114,102,108,111,119,0,103,101,116,68,105,115,112,108,97,121,0,103,101,116,80,97,100,100,105,110,103,0,105,110,115,101,114,116,67,104,105,108,100,0,114,101,109,111,118,101,67,104,105,108,100,0,103,101,116,67,104,105,108,100,67,111,117,110,116,0,103,101,116,80,97,114,101,110,116,0,103,101,116,67,104,105,108,100,0,115,101,116,77,101,97,115,117,114,101,70,117,110,99,0,117,110,115,101,116,77,101,97,115,117,114,101,70,117,110,99,0,109,97,114,107,68,105,114,116,121,0,105,115,68,105,114,116,121,0,99,97,108,99,117,108,97,116,101,76,97,121,111,117,116,0,103,101,116,67,111,109,112,117,116,101,100,76,101,102,116,0,103,101,116,67,111,109,112,117,116,101,100,82,105,103,104,116,0,103,101,116,67,111,109,112,117,116,101,100,84,111,112,0,103,101,116,67,111,109,112,117,116,101,100,66,111,116,116,111,109,0,103,101,116,67,111,109,112,117,116,101,100,87,105,100,116,104,0,103,101,116,67,111,109,112,117,116,101,100,72,101,105,103,104,116,0,103,101,116,67,111,109,112,117,116,101,100,76,97,121,111,117,116,0,103,101,116,67,111,109,112,117,116,101,100,77,97,114,103,105,110,0,103,101,116,67,111,109,112,117,116,101,100,66,111,114,100,101,114,0,103,101,116,67,111,109,112,117,116,101,100,80,97,100,100,105,110,103,0,67,111,110,102,105,103,0,99,114,101,97,116,101,0,115,101,116,69,120,112,101,114,105,109,101,110,116,97,108,70,101,97,116,117,114,101,69,110,97,98,108,101,100,0,115,101,116,80,111,105,110,116,83,99,97,108,101,70,97,99,116,111,114,0,105,115,69,120,112,101,114,105,109,101,110,116,97,108,70,101,97,116,117,114,101,69,110,97,98,108,101,100,0,86,97,108,117,101,0,76,97,121,111,117,116,0,83,105,122,101,0,103,101,116,73,110,115,116,97,110,99,101,67,111,117,110,116,0,73,110,116,54,52,0,1,1,1,2,2,4,4,4,4,8,8,4,8,118,111,105,100,0,98,111,111,108,0,115,116,100,58,58,115,116,114,105,110,103,0,99,98,70,117,110,99,116,105,111,110,32,38,0,99,111,110,115,116,32,99,98,70,117,110,99,116,105,111,110,32,38,0,69,120,116,101,114,110,97,108,0,66,117,102,102,101,114,0,78,66,105,110,100,73,68,0,78,66,105,110,100,0,98,105,110,100,95,118,97,108,117,101,0,114,101,102,108,101,99,116,0,113,117,101,114,121,84,121,112,101,0,108,97,108,108,111,99,0,108,114,101,115,101,116,0,123,114,101,116,117,114,110,40,95,110,98,105,110,100,46,99,97,108,108,98,97,99,107,83,105,103,110,97,116,117,114,101,76,105,115,116,91,36,48,93,46,97,112,112,108,121,40,116,104,105,115,44,97,114,103,117,109,101,110,116,115,41,41,59,125,0,95,110,98,105,110,100,95,110,101,119,0,17,0,10,0,17,17,17,0,0,0,0,5,0,0,0,0,0,0,9,0,0,0,0,11,0,0,0,0,0,0,0,0,17,0,15,10,17,17,17,3,10,7,0,1,19,9,11,11,0,0,9,6,11,0,0,11,0,6,17,0,0,0,17,17,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,17,0,10,10,17,17,17,0,10,0,0,2,0,9,11,0,0,0,9,0,11,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,12,0,0,0,0,9,12,0,0,0,0,0,12,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,13,0,0,0,4,13,0,0,0,0,9,14,0,0,0,0,0,14,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,0,15,0,0,0,0,9,16,0,0,0,0,0,16,0,0,16,0,0,18,0,0,0,18,18,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,0,0,0,18,18,18,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,10,0,0,0,0,9,11,0,0,0,0,0,11,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,12,0,0,0,0,9,12,0,0,0,0,0,12,0,0,12,0,0,45,43,32,32,32,48,88,48,120,0,40,110,117,108,108,41,0,45,48,88,43,48,88,32,48,88,45,48,120,43,48,120,32,48,120,0,105,110,102,0,73,78,70,0,110,97,110,0,78,65,78,0,48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70,46,0,84,33,34,25,13,1,2,3,17,75,28,12,16,4,11,29,18,30,39,104,110,111,112,113,98,32,5,6,15,19,20,21,26,8,22,7,40,36,23,24,9,10,14,27,31,37,35,131,130,125,38,42,43,60,61,62,63,67,71,74,77,88,89,90,91,92,93,94,95,96,97,99,100,101,102,103,105,106,107,108,114,115,116,121,122,123,124,0,73,108,108,101,103,97,108,32,98,121,116,101,32,115,101,113,117,101,110,99,101,0,68,111,109,97,105,110,32,101,114,114,111,114,0,82,101,115,117,108,116,32,110,111,116,32,114,101,112,114,101,115,101,110,116,97,98,108,101,0,78,111,116,32,97,32,116,116,121,0,80,101,114,109,105,115,115,105,111,110,32,100,101,110,105,101,100,0,79,112,101,114,97,116,105,111,110,32,110,111,116,32,112,101,114,109,105,116,116,101,100,0,78,111,32,115,117,99,104,32,102,105,108,101,32,111,114,32,100,105,114,101,99,116,111,114,121,0,78,111,32,115,117,99,104,32,112,114,111,99,101,115,115,0,70,105,108,101,32,101,120,105,115,116,115,0,86,97,108,117,101,32,116,111,111,32,108,97,114,103,101,32,102,111,114,32,100,97,116,97,32,116,121,112,101,0,78,111,32,115,112,97,99,101,32,108,101,102,116,32,111,110,32,100,101,118,105,99,101,0,79,117,116,32,111,102,32,109,101,109,111,114,121,0,82,101,115,111,117,114,99,101,32,98,117,115,121,0,73,110,116,101,114,114,117,112,116,101,100,32,115,121,115,116,101,109,32,99,97,108,108,0,82,101,115,111,117,114,99,101,32,116,101,109,112,111,114,97,114,105,108,121,32,117,110,97,118,97,105,108,97,98,108,101,0,73,110,118,97,108,105,100,32,115,101,101,107,0,67,114,111,115,115,45,100,101,118,105,99,101,32,108,105,110,107,0,82,101,97,100,45,111,110,108,121,32,102,105,108,101,32,115,121,115,116,101,109,0,68,105,114,101,99,116,111,114,121,32,110,111,116,32,101,109,112,116,121,0,67,111,110,110,101,99,116,105,111,110,32,114,101,115,101,116,32,98,121,32,112,101,101,114,0,79,112,101,114,97,116,105,111,110,32,116,105,109,101,100,32,111,117,116,0,67,111,110,110,101,99,116,105,111,110,32,114,101,102,117,115,101,100,0,72,111,115,116,32,105,115,32,100,111,119,110,0,72,111,115,116,32,105,115,32,117,110,114,101,97,99,104,97,98,108,101,0,65,100,100,114,101,115,115,32,105,110,32,117,115,101,0,66,114,111,107,101,110,32,112,105,112,101,0,73,47,79,32,101,114,114,111,114,0,78,111,32,115,117,99,104,32,100,101,118,105,99,101,32,111,114,32,97,100,100,114,101,115,115,0,66,108,111,99,107,32,100,101,118,105,99,101,32,114,101,113,117,105,114,101,100,0,78,111,32,115,117,99,104,32,100,101,118,105,99,101,0,78,111,116,32,97,32,100,105,114,101,99,116,111,114,121,0,73,115,32,97,32,100,105,114,101,99,116,111,114,121,0,84,101,120,116,32,102,105,108,101,32,98,117,115,121,0,69,120,101,99,32,102,111,114,109,97,116,32,101,114,114,111,114,0,73,110,118,97,108,105,100,32,97,114,103,117,109,101,110,116,0,65,114,103,117,109,101,110,116,32,108,105,115,116,32,116,111,111,32,108,111,110,103,0,83,121,109,98,111,108,105,99,32,108,105,110,107,32,108,111,111,112,0,70,105,108,101,110,97,109,101,32,116,111,111,32,108,111,110,103,0,84,111,111,32,109,97,110,121,32,111,112,101,110,32,102,105,108,101,115,32,105,110,32,115,121,115,116,101,109,0,78,111,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,115,32,97,118,97,105,108,97,98,108,101,0,66,97,100,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,0,78,111,32,99,104,105,108,100,32,112,114,111,99,101,115,115,0,66,97,100,32,97,100,100,114,101,115,115,0,70,105,108,101,32,116,111,111,32,108,97,114,103,101,0,84,111,111,32,109,97,110,121,32,108,105,110,107,115,0,78,111,32,108,111,99,107,115,32,97,118,97,105,108,97,98,108,101,0,82,101,115,111,117,114,99,101,32,100,101,97,100,108,111,99,107,32,119,111,117,108,100,32,111,99,99,117,114,0,83,116,97,116,101,32,110,111,116,32,114,101,99,111,118,101,114,97,98,108,101,0,80,114,101,118,105,111,117,115,32,111,119,110,101,114,32,100,105,101,100,0,79,112,101,114,97,116,105,111,110,32,99,97,110,99,101,108,101,100,0,70,117,110,99,116,105,111,110,32,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,0,78,111,32,109,101,115,115,97,103,101,32,111,102,32,100,101,115,105,114,101,100,32,116,121,112,101,0,73,100,101,110,116,105,102,105,101,114,32,114,101,109,111,118,101,100,0,68,101,118,105,99,101,32,110,111,116,32,97,32,115,116,114,101,97,109,0,78,111,32,100,97,116,97,32,97,118,97,105,108,97,98,108,101,0,68,101,118,105,99,101,32,116,105,109,101,111,117,116,0,79,117,116,32,111,102,32,115,116,114,101,97,109,115,32,114,101,115,111,117,114,99,101,115,0,76,105,110,107,32,104,97,115,32,98,101,101,110,32,115,101,118,101,114,101,100,0,80,114,111,116,111,99,111,108,32,101,114,114,111,114,0,66,97,100,32,109,101,115,115,97,103,101,0,70,105,108,101,32,100,101,115,99,114,105,112,116,111,114,32,105,110,32,98,97,100,32,115,116,97,116,101,0,78,111,116,32,97,32,115,111,99,107,101,116,0,68,101,115,116,105,110,97,116,105,111,110,32,97,100,100,114,101,115,115,32,114,101,113,117,105,114,101,100,0,77,101,115,115,97,103,101,32,116,111,111,32,108,97,114,103,101,0,80,114,111,116,111,99,111,108,32,119,114,111,110,103,32,116,121,112,101,32,102,111,114,32,115,111,99,107,101,116,0,80,114,111,116,111,99,111,108,32,110,111,116,32,97,118,97,105,108,97,98,108,101,0,80,114,111,116,111,99,111,108,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,83,111,99,107,101,116,32,116,121,112,101,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,78,111,116,32,115,117,112,112,111,114,116,101,100,0,80,114,111,116,111,99,111,108,32,102,97,109,105,108,121,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,65,100,100,114,101,115,115,32,102,97,109,105,108,121,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,98,121,32,112,114,111,116,111,99,111,108,0,65,100,100,114,101,115,115,32,110,111,116,32,97,118,97,105,108,97,98,108,101,0,78,101,116,119,111,114,107,32,105,115,32,100,111,119,110,0,78,101,116,119,111,114,107,32,117,110,114,101,97,99,104,97,98,108,101,0,67,111,110,110,101,99,116,105,111,110,32,114,101,115,101,116,32,98,121,32,110,101,116,119,111,114,107,0,67,111,110,110,101,99,116,105,111,110,32,97,98,111,114,116,101,100,0,78,111,32,98,117,102,102,101,114,32,115,112,97,99,101,32,97,118,97,105,108,97,98,108,101,0,83,111,99,107,101,116,32,105,115,32,99,111,110,110,101,99,116,101,100,0,83,111,99,107,101,116,32,110,111,116,32,99,111,110,110,101,99,116,101,100,0,67,97,110,110,111,116,32,115,101,110,100,32,97,102,116,101,114,32,115,111,99,107,101,116,32,115,104,117,116,100,111,119,110,0,79,112,101,114,97,116,105,111,110,32,97,108,114,101,97,100,121,32,105,110,32,112,114,111,103,114,101,115,115,0,79,112,101,114,97,116,105,111,110,32,105,110,32,112,114,111,103,114,101,115,115,0,83,116,97,108,101,32,102,105,108,101,32,104,97,110,100,108,101,0,82,101,109,111,116,101,32,73,47,79,32,101,114,114,111,114,0,81,117,111,116,97,32,101,120,99,101,101,100,101,100,0,78,111,32,109,101,100,105,117,109,32,102,111,117,110,100,0,87,114,111,110,103,32,109,101,100,105,117,109,32,116,121,112,101,0,78,111,32,101,114,114,111,114,32,105,110,102,111,114,109,97,116,105,111,110,0,0],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE);var tempDoublePtr=STATICTOP;STATICTOP+=16;function _atexit(i,o){__ATEXIT__.unshift({func:i,arg:o})}function ___cxa_atexit(){return _atexit.apply(null,arguments)}function _abort(){Module.abort()}function __ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj(){Module.printErr("missing function: _ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj"),abort(-1)}function __decorate(i,o,a,c){var _=arguments.length,t=_<3?o:c===null?c=Object.getOwnPropertyDescriptor(o,a):c,O;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")t=Reflect.decorate(i,o,a,c);else for(var N=i.length-1;N>=0;N--)(O=i[N])&&(t=(_<3?O(t):_>3?O(o,a,t):O(o,a))||t);return _>3&&t&&Object.defineProperty(o,a,t),t}function _defineHidden(i){return function(o,a){Object.defineProperty(o,a,{configurable:!1,enumerable:!1,value:i,writable:!0})}}var _nbind={};function __nbind_free_external(i){_nbind.externalList[i].dereference(i)}function __nbind_reference_external(i){_nbind.externalList[i].reference()}function _llvm_stackrestore(i){var o=_llvm_stacksave,a=o.LLVM_SAVEDSTACKS[i];o.LLVM_SAVEDSTACKS.splice(i,1),Runtime.stackRestore(a)}function __nbind_register_pool(i,o,a,c){_nbind.Pool.pageSize=i,_nbind.Pool.usedPtr=o/4,_nbind.Pool.rootPtr=a,_nbind.Pool.pagePtr=c/4,HEAP32[o/4]=16909060,HEAP8[o]==1&&(_nbind.bigEndian=!0),HEAP32[o/4]=0,_nbind.makeTypeKindTbl=(t={},t[1024]=_nbind.PrimitiveType,t[64]=_nbind.Int64Type,t[2048]=_nbind.BindClass,t[3072]=_nbind.BindClassPtr,t[4096]=_nbind.SharedClassPtr,t[5120]=_nbind.ArrayType,t[6144]=_nbind.ArrayType,t[7168]=_nbind.CStringType,t[9216]=_nbind.CallbackType,t[10240]=_nbind.BindType,t),_nbind.makeTypeNameTbl={Buffer:_nbind.BufferType,External:_nbind.ExternalType,Int64:_nbind.Int64Type,_nbind_new:_nbind.CreateValueType,bool:_nbind.BooleanType,"cbFunction &":_nbind.CallbackType,"const cbFunction &":_nbind.CallbackType,"const std::string &":_nbind.StringType,"std::string":_nbind.StringType},Module.toggleLightGC=_nbind.toggleLightGC,_nbind.callUpcast=Module.dynCall_ii;var _=_nbind.makeType(_nbind.constructType,{flags:2048,id:0,name:""});_.proto=Module,_nbind.BindClass.list.push(_);var t}function _emscripten_set_main_loop_timing(i,o){if(Browser.mainLoop.timingMode=i,Browser.mainLoop.timingValue=o,!Browser.mainLoop.func)return 1;if(i==0)Browser.mainLoop.scheduler=function(){var O=Math.max(0,Browser.mainLoop.tickStartTime+o-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,O)},Browser.mainLoop.method="timeout";else if(i==1)Browser.mainLoop.scheduler=function(){Browser.requestAnimationFrame(Browser.mainLoop.runner)},Browser.mainLoop.method="rAF";else if(i==2){if(!window.setImmediate){let t=function(O){O.source===window&&O.data===c&&(O.stopPropagation(),a.shift()())};var _=t,a=[],c="setimmediate";window.addEventListener("message",t,!0),window.setImmediate=function(N){a.push(N),ENVIRONMENT_IS_WORKER?(Module.setImmediates===void 0&&(Module.setImmediates=[]),Module.setImmediates.push(N),window.postMessage({target:c})):window.postMessage(c,"*")}}Browser.mainLoop.scheduler=function(){window.setImmediate(Browser.mainLoop.runner)},Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(i,o,a,c,_){Module.noExitRuntime=!0,assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters."),Browser.mainLoop.func=i,Browser.mainLoop.arg=c;var t;typeof c!="undefined"?t=function(){Module.dynCall_vi(i,c)}:t=function(){Module.dynCall_v(i)};var O=Browser.mainLoop.currentlyRunningMainloop;if(Browser.mainLoop.runner=function(){if(!ABORT){if(Browser.mainLoop.queue.length>0){var M=Date.now(),T=Browser.mainLoop.queue.shift();if(T.func(T.arg),Browser.mainLoop.remainingBlockers){var B=Browser.mainLoop.remainingBlockers,H=B%1==0?B-1:Math.floor(B);T.counted?Browser.mainLoop.remainingBlockers=H:(H=H+.5,Browser.mainLoop.remainingBlockers=(8*B+H)/9)}if(console.log('main loop blocker "'+T.name+'" took '+(Date.now()-M)+" ms"),Browser.mainLoop.updateStatus(),O1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else Browser.mainLoop.timingMode==0&&(Browser.mainLoop.tickStartTime=_emscripten_get_now());Browser.mainLoop.method==="timeout"&&Module.ctx&&(Module.printErr("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!"),Browser.mainLoop.method=""),Browser.mainLoop.runIter(t),!(O0?_emscripten_set_main_loop_timing(0,1e3/o):_emscripten_set_main_loop_timing(1,1),Browser.mainLoop.scheduler()),a)throw"SimulateInfiniteLoop"}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null,Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var i=Browser.mainLoop.timingMode,o=Browser.mainLoop.timingValue,a=Browser.mainLoop.func;Browser.mainLoop.func=null,_emscripten_set_main_loop(a,0,!1,Browser.mainLoop.arg,!0),_emscripten_set_main_loop_timing(i,o),Browser.mainLoop.scheduler()},updateStatus:function(){if(Module.setStatus){var i=Module.statusMessage||"Please wait...",o=Browser.mainLoop.remainingBlockers,a=Browser.mainLoop.expectedBlockers;o?o=6;){var je=ie>>Oe-6&63;Oe-=6,me+=_e[je]}return Oe==2?(me+=_e[(ie&3)<<4],me+=ce+ce):Oe==4&&(me+=_e[(ie&15)<<2],me+=ce),me}m.src="data:audio/x-"+O.substr(-3)+";base64,"+se(t),B(m)},m.src=ne,Browser.safeSetTimeout(function(){B(m)},1e4)}else return H()},Module.preloadPlugins.push(o);function a(){Browser.pointerLock=document.pointerLockElement===Module.canvas||document.mozPointerLockElement===Module.canvas||document.webkitPointerLockElement===Module.canvas||document.msPointerLockElement===Module.canvas}var c=Module.canvas;c&&(c.requestPointerLock=c.requestPointerLock||c.mozRequestPointerLock||c.webkitRequestPointerLock||c.msRequestPointerLock||function(){},c.exitPointerLock=document.exitPointerLock||document.mozExitPointerLock||document.webkitExitPointerLock||document.msExitPointerLock||function(){},c.exitPointerLock=c.exitPointerLock.bind(document),document.addEventListener("pointerlockchange",a,!1),document.addEventListener("mozpointerlockchange",a,!1),document.addEventListener("webkitpointerlockchange",a,!1),document.addEventListener("mspointerlockchange",a,!1),Module.elementPointerLock&&c.addEventListener("click",function(_){!Browser.pointerLock&&Module.canvas.requestPointerLock&&(Module.canvas.requestPointerLock(),_.preventDefault())},!1))},createContext:function(i,o,a,c){if(o&&Module.ctx&&i==Module.canvas)return Module.ctx;var _,t;if(o){var O={antialias:!1,alpha:!1};if(c)for(var N in c)O[N]=c[N];t=GL.createContext(i,O),t&&(_=GL.getContext(t).GLctx)}else _=i.getContext("2d");return _?(a&&(o||assert(typeof GLctx=="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it"),Module.ctx=_,o&&GL.makeContextCurrent(t),Module.useWebGL=o,Browser.moduleContextCreatedCallbacks.forEach(function(M){M()}),Browser.init()),_):null},destroyContext:function(i,o,a){},fullscreenHandlersInstalled:!1,lockPointer:void 0,resizeCanvas:void 0,requestFullscreen:function(i,o,a){Browser.lockPointer=i,Browser.resizeCanvas=o,Browser.vrDevice=a,typeof Browser.lockPointer=="undefined"&&(Browser.lockPointer=!0),typeof Browser.resizeCanvas=="undefined"&&(Browser.resizeCanvas=!1),typeof Browser.vrDevice=="undefined"&&(Browser.vrDevice=null);var c=Module.canvas;function _(){Browser.isFullscreen=!1;var O=c.parentNode;(document.fullscreenElement||document.mozFullScreenElement||document.msFullscreenElement||document.webkitFullscreenElement||document.webkitCurrentFullScreenElement)===O?(c.exitFullscreen=document.exitFullscreen||document.cancelFullScreen||document.mozCancelFullScreen||document.msExitFullscreen||document.webkitCancelFullScreen||function(){},c.exitFullscreen=c.exitFullscreen.bind(document),Browser.lockPointer&&c.requestPointerLock(),Browser.isFullscreen=!0,Browser.resizeCanvas&&Browser.setFullscreenCanvasSize()):(O.parentNode.insertBefore(c,O),O.parentNode.removeChild(O),Browser.resizeCanvas&&Browser.setWindowedCanvasSize()),Module.onFullScreen&&Module.onFullScreen(Browser.isFullscreen),Module.onFullscreen&&Module.onFullscreen(Browser.isFullscreen),Browser.updateCanvasDimensions(c)}Browser.fullscreenHandlersInstalled||(Browser.fullscreenHandlersInstalled=!0,document.addEventListener("fullscreenchange",_,!1),document.addEventListener("mozfullscreenchange",_,!1),document.addEventListener("webkitfullscreenchange",_,!1),document.addEventListener("MSFullscreenChange",_,!1));var t=document.createElement("div");c.parentNode.insertBefore(t,c),t.appendChild(c),t.requestFullscreen=t.requestFullscreen||t.mozRequestFullScreen||t.msRequestFullscreen||(t.webkitRequestFullscreen?function(){t.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT)}:null)||(t.webkitRequestFullScreen?function(){t.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT)}:null),a?t.requestFullscreen({vrDisplay:a}):t.requestFullscreen()},requestFullScreen:function(i,o,a){return Module.printErr("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead."),Browser.requestFullScreen=function(c,_,t){return Browser.requestFullscreen(c,_,t)},Browser.requestFullscreen(i,o,a)},nextRAF:0,fakeRequestAnimationFrame:function(i){var o=Date.now();if(Browser.nextRAF===0)Browser.nextRAF=o+1e3/60;else for(;o+2>=Browser.nextRAF;)Browser.nextRAF+=1e3/60;var a=Math.max(Browser.nextRAF-o,0);setTimeout(i,a)},requestAnimationFrame:function(o){typeof window=="undefined"?Browser.fakeRequestAnimationFrame(o):(window.requestAnimationFrame||(window.requestAnimationFrame=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame||window.oRequestAnimationFrame||Browser.fakeRequestAnimationFrame),window.requestAnimationFrame(o))},safeCallback:function(i){return function(){if(!ABORT)return i.apply(null,arguments)}},allowAsyncCallbacks:!0,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=!1},resumeAsyncCallbacks:function(){if(Browser.allowAsyncCallbacks=!0,Browser.queuedAsyncCallbacks.length>0){var i=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[],i.forEach(function(o){o()})}},safeRequestAnimationFrame:function(i){return Browser.requestAnimationFrame(function(){ABORT||(Browser.allowAsyncCallbacks?i():Browser.queuedAsyncCallbacks.push(i))})},safeSetTimeout:function(i,o){return Module.noExitRuntime=!0,setTimeout(function(){ABORT||(Browser.allowAsyncCallbacks?i():Browser.queuedAsyncCallbacks.push(i))},o)},safeSetInterval:function(i,o){return Module.noExitRuntime=!0,setInterval(function(){ABORT||Browser.allowAsyncCallbacks&&i()},o)},getMimetype:function(i){return{jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",bmp:"image/bmp",ogg:"audio/ogg",wav:"audio/wav",mp3:"audio/mpeg"}[i.substr(i.lastIndexOf(".")+1)]},getUserMedia:function(i){window.getUserMedia||(window.getUserMedia=navigator.getUserMedia||navigator.mozGetUserMedia),window.getUserMedia(i)},getMovementX:function(i){return i.movementX||i.mozMovementX||i.webkitMovementX||0},getMovementY:function(i){return i.movementY||i.mozMovementY||i.webkitMovementY||0},getMouseWheelDelta:function(i){var o=0;switch(i.type){case"DOMMouseScroll":o=i.detail;break;case"mousewheel":o=i.wheelDelta;break;case"wheel":o=i.deltaY;break;default:throw"unrecognized mouse wheel event: "+i.type}return o},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(i){if(Browser.pointerLock)i.type!="mousemove"&&"mozMovementX"in i?Browser.mouseMovementX=Browser.mouseMovementY=0:(Browser.mouseMovementX=Browser.getMovementX(i),Browser.mouseMovementY=Browser.getMovementY(i)),typeof SDL!="undefined"?(Browser.mouseX=SDL.mouseX+Browser.mouseMovementX,Browser.mouseY=SDL.mouseY+Browser.mouseMovementY):(Browser.mouseX+=Browser.mouseMovementX,Browser.mouseY+=Browser.mouseMovementY);else{var o=Module.canvas.getBoundingClientRect(),a=Module.canvas.width,c=Module.canvas.height,_=typeof window.scrollX!="undefined"?window.scrollX:window.pageXOffset,t=typeof window.scrollY!="undefined"?window.scrollY:window.pageYOffset;if(i.type==="touchstart"||i.type==="touchend"||i.type==="touchmove"){var O=i.touch;if(O===void 0)return;var N=O.pageX-(_+o.left),M=O.pageY-(t+o.top);N=N*(a/o.width),M=M*(c/o.height);var T={x:N,y:M};if(i.type==="touchstart")Browser.lastTouches[O.identifier]=T,Browser.touches[O.identifier]=T;else if(i.type==="touchend"||i.type==="touchmove"){var B=Browser.touches[O.identifier];B||(B=T),Browser.lastTouches[O.identifier]=B,Browser.touches[O.identifier]=T}return}var H=i.pageX-(_+o.left),q=i.pageY-(t+o.top);H=H*(a/o.width),q=q*(c/o.height),Browser.mouseMovementX=H-Browser.mouseX,Browser.mouseMovementY=q-Browser.mouseY,Browser.mouseX=H,Browser.mouseY=q}},asyncLoad:function(i,o,a,c){var _=c?"":getUniqueRunDependency("al "+i);Module.readAsync(i,function(t){assert(t,'Loading data file "'+i+'" failed (no arrayBuffer).'),o(new Uint8Array(t)),_&&removeRunDependency(_)},function(t){if(a)a();else throw'Loading data file "'+i+'" failed.'}),_&&addRunDependency(_)},resizeListeners:[],updateResizeListeners:function(){var i=Module.canvas;Browser.resizeListeners.forEach(function(o){o(i.width,i.height)})},setCanvasSize:function(i,o,a){var c=Module.canvas;Browser.updateCanvasDimensions(c,i,o),a||Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var i=HEAPU32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2];i=i|8388608,HEAP32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2]=i}Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var i=HEAPU32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2];i=i&~8388608,HEAP32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2]=i}Browser.updateResizeListeners()},updateCanvasDimensions:function(i,o,a){o&&a?(i.widthNative=o,i.heightNative=a):(o=i.widthNative,a=i.heightNative);var c=o,_=a;if(Module.forcedAspectRatio&&Module.forcedAspectRatio>0&&(c/_>2];return o},getStr:function(){var i=Pointer_stringify(SYSCALLS.get());return i},get64:function(){var i=SYSCALLS.get(),o=SYSCALLS.get();return i>=0?assert(o===0):assert(o===-1),i},getZero:function(){assert(SYSCALLS.get()===0)}};function ___syscall6(i,o){SYSCALLS.varargs=o;try{var a=SYSCALLS.getStreamFromFD();return FS.close(a),0}catch(c){return(typeof FS=="undefined"||!(c instanceof FS.ErrnoError))&&abort(c),-c.errno}}function ___syscall54(i,o){SYSCALLS.varargs=o;try{return 0}catch(a){return(typeof FS=="undefined"||!(a instanceof FS.ErrnoError))&&abort(a),-a.errno}}function _typeModule(i){var o=[[0,1,"X"],[1,1,"const X"],[128,1,"X *"],[256,1,"X &"],[384,1,"X &&"],[512,1,"std::shared_ptr"],[640,1,"std::unique_ptr"],[5120,1,"std::vector"],[6144,2,"std::array"],[9216,-1,"std::function"]];function a(M,T,B,H,q,ne){if(T==1){var m=H&896;(m==128||m==256||m==384)&&(M="X const")}var he;return ne?he=B.replace("X",M).replace("Y",q):he=M.replace("X",B).replace("Y",q),he.replace(/([*&]) (?=[*&])/g,"$1")}function c(M,T,B,H,q){throw new Error(M+" type "+B.replace("X",T+"?")+(H?" with flag "+H:"")+" in "+q)}function _(M,T,B,H,q,ne,m,he){ne===void 0&&(ne="X"),he===void 0&&(he=1);var De=B(M);if(De)return De;var se=H(M),fe=se.placeholderFlag,_e=o[fe];m&&_e&&(ne=a(m[2],m[0],ne,_e[0],"?",!0));var ce;fe==0&&(ce="Unbound"),fe>=10&&(ce="Corrupt"),he>20&&(ce="Deeply nested"),ce&&c(ce,M,ne,fe,q||"?");var me=se.paramList[0],ie=_(me,T,B,H,q,ne,_e,he+1),Oe,Ue={flags:_e[0],id:M,name:"",paramList:[ie]},je=[],at="?";switch(se.placeholderFlag){case 1:Oe=ie.spec;break;case 2:if((ie.flags&15360)==1024&&ie.spec.ptrSize==1){Ue.flags=7168;break}case 3:case 6:case 5:Oe=ie.spec,(ie.flags&15360)!=2048;break;case 8:at=""+se.paramList[1],Ue.paramList.push(se.paramList[1]);break;case 9:for(var Dt=0,Qe=se.paramList[1];Dt>2]=i),i}function _llvm_stacksave(){var i=_llvm_stacksave;return i.LLVM_SAVEDSTACKS||(i.LLVM_SAVEDSTACKS=[]),i.LLVM_SAVEDSTACKS.push(Runtime.stackSave()),i.LLVM_SAVEDSTACKS.length-1}function ___syscall140(i,o){SYSCALLS.varargs=o;try{var a=SYSCALLS.getStreamFromFD(),c=SYSCALLS.get(),_=SYSCALLS.get(),t=SYSCALLS.get(),O=SYSCALLS.get(),N=_;return FS.llseek(a,N,O),HEAP32[t>>2]=a.position,a.getdents&&N===0&&O===0&&(a.getdents=null),0}catch(M){return(typeof FS=="undefined"||!(M instanceof FS.ErrnoError))&&abort(M),-M.errno}}function ___syscall146(i,o){SYSCALLS.varargs=o;try{var a=SYSCALLS.get(),c=SYSCALLS.get(),_=SYSCALLS.get(),t=0;___syscall146.buffer||(___syscall146.buffers=[null,[],[]],___syscall146.printChar=function(B,H){var q=___syscall146.buffers[B];assert(q),H===0||H===10?((B===1?Module.print:Module.printErr)(UTF8ArrayToString(q,0)),q.length=0):q.push(H)});for(var O=0;O<_;O++){for(var N=HEAP32[c+O*8>>2],M=HEAP32[c+(O*8+4)>>2],T=0;Ti.pageSize/2||o>i.pageSize-a){var c=_nbind.typeNameTbl.NBind.proto;return c.lalloc(o)}else return HEAPU32[i.usedPtr]=a+o,i.rootPtr+a},i.lreset=function(o,a){var c=HEAPU32[i.pagePtr];if(c){var _=_nbind.typeNameTbl.NBind.proto;_.lreset(o,a)}else HEAPU32[i.usedPtr]=o},i}();_nbind.Pool=Pool;function constructType(i,o){var a=i==10240?_nbind.makeTypeNameTbl[o.name]||_nbind.BindType:_nbind.makeTypeKindTbl[i],c=new a(o);return typeIdTbl[o.id]=c,_nbind.typeNameTbl[o.name]=c,c}_nbind.constructType=constructType;function getType(i){return typeIdTbl[i]}_nbind.getType=getType;function queryType(i){var o=HEAPU8[i],a=_nbind.structureList[o][1];i/=4,a<0&&(++i,a=HEAPU32[i]+1);var c=Array.prototype.slice.call(HEAPU32.subarray(i+1,i+1+a));return o==9&&(c=[c[0],c.slice(1)]),{paramList:c,placeholderFlag:o}}_nbind.queryType=queryType;function getTypes(i,o){return i.map(function(a){return typeof a=="number"?_nbind.getComplexType(a,constructType,getType,queryType,o):_nbind.typeNameTbl[a]})}_nbind.getTypes=getTypes;function readTypeIdList(i,o){return Array.prototype.slice.call(HEAPU32,i/4,i/4+o)}_nbind.readTypeIdList=readTypeIdList;function readAsciiString(i){for(var o=i;HEAPU8[o++];);return String.fromCharCode.apply("",HEAPU8.subarray(i,o-1))}_nbind.readAsciiString=readAsciiString;function readPolicyList(i){var o={};if(i)for(;;){var a=HEAPU32[i/4];if(!a)break;o[readAsciiString(a)]=!0,i+=4}return o}_nbind.readPolicyList=readPolicyList;function getDynCall(i,o){var a={float32_t:"d",float64_t:"d",int64_t:"d",uint64_t:"d",void:"v"},c=i.map(function(t){return a[t.name]||"i"}).join(""),_=Module["dynCall_"+c];if(!_)throw new Error("dynCall_"+c+" not found for "+o+"("+i.map(function(t){return t.name}).join(", ")+")");return _}_nbind.getDynCall=getDynCall;function addMethod(i,o,a,c){var _=i[o];i.hasOwnProperty(o)&&_?((_.arity||_.arity===0)&&(_=_nbind.makeOverloader(_,_.arity),i[o]=_),_.addMethod(a,c)):(a.arity=c,i[o]=a)}_nbind.addMethod=addMethod;function throwError(i){throw new Error(i)}_nbind.throwError=throwError,_nbind.bigEndian=!1,_a=_typeModule(_typeModule),_nbind.Type=_a.Type,_nbind.makeType=_a.makeType,_nbind.getComplexType=_a.getComplexType,_nbind.structureList=_a.structureList;var BindType=function(i){__extends(o,i);function o(){var a=i!==null&&i.apply(this,arguments)||this;return a.heap=HEAPU32,a.ptrSize=4,a}return o.prototype.needsWireRead=function(a){return!!this.wireRead||!!this.makeWireRead},o.prototype.needsWireWrite=function(a){return!!this.wireWrite||!!this.makeWireWrite},o}(_nbind.Type);_nbind.BindType=BindType;var PrimitiveType=function(i){__extends(o,i);function o(a){var c=i.call(this,a)||this,_=a.flags&32?{32:HEAPF32,64:HEAPF64}:a.flags&8?{8:HEAPU8,16:HEAPU16,32:HEAPU32}:{8:HEAP8,16:HEAP16,32:HEAP32};return c.heap=_[a.ptrSize*8],c.ptrSize=a.ptrSize,c}return o.prototype.needsWireWrite=function(a){return!!a&&!!a.Strict},o.prototype.makeWireWrite=function(a,c){return c&&c.Strict&&function(_){if(typeof _=="number")return _;throw new Error("Type mismatch")}},o}(BindType);_nbind.PrimitiveType=PrimitiveType;function pushCString(i,o){if(i==null){if(o&&o.Nullable)return 0;throw new Error("Type mismatch")}if(o&&o.Strict){if(typeof i!="string")throw new Error("Type mismatch")}else i=i.toString();var a=Module.lengthBytesUTF8(i)+1,c=_nbind.Pool.lalloc(a);return Module.stringToUTF8Array(i,HEAPU8,c,a),c}_nbind.pushCString=pushCString;function popCString(i){return i===0?null:Module.Pointer_stringify(i)}_nbind.popCString=popCString;var CStringType=function(i){__extends(o,i);function o(){var a=i!==null&&i.apply(this,arguments)||this;return a.wireRead=popCString,a.wireWrite=pushCString,a.readResources=[_nbind.resources.pool],a.writeResources=[_nbind.resources.pool],a}return o.prototype.makeWireWrite=function(a,c){return function(_){return pushCString(_,c)}},o}(BindType);_nbind.CStringType=CStringType;var BooleanType=function(i){__extends(o,i);function o(){var a=i!==null&&i.apply(this,arguments)||this;return a.wireRead=function(c){return!!c},a}return o.prototype.needsWireWrite=function(a){return!!a&&!!a.Strict},o.prototype.makeWireRead=function(a){return"!!("+a+")"},o.prototype.makeWireWrite=function(a,c){return c&&c.Strict&&function(_){if(typeof _=="boolean")return _;throw new Error("Type mismatch")}||a},o}(BindType);_nbind.BooleanType=BooleanType;var Wrapper=function(){function i(){}return i.prototype.persist=function(){this.__nbindState|=1},i}();_nbind.Wrapper=Wrapper;function makeBound(i,o){var a=function(c){__extends(_,c);function _(t,O,N,M){var T=c.call(this)||this;if(!(T instanceof _))return new(Function.prototype.bind.apply(_,Array.prototype.concat.apply([null],arguments)));var B=O,H=N,q=M;if(t!==_nbind.ptrMarker){var ne=T.__nbindConstructor.apply(T,arguments);B=4096|512,q=HEAPU32[ne/4],H=HEAPU32[ne/4+1]}var m={configurable:!0,enumerable:!1,value:null,writable:!1},he={__nbindFlags:B,__nbindPtr:H};q&&(he.__nbindShared=q,_nbind.mark(T));for(var De=0,se=Object.keys(he);De>=1;var a=_nbind.valueList[i];return _nbind.valueList[i]=firstFreeValue,firstFreeValue=i,a}else{if(o)return _nbind.popShared(i,o);throw new Error("Invalid value slot "+i)}}_nbind.popValue=popValue;var valueBase=18446744073709552e3;function push64(i){return typeof i=="number"?i:pushValue(i)*4096+valueBase}function pop64(i){return i=3?O=Buffer.from(t):O=new Buffer(t),O.copy(c)}else getBuffer(c).set(t)}}_nbind.commitBuffer=commitBuffer;var dirtyList=[],gcTimer=0;function sweep(){for(var i=0,o=dirtyList;i>2]=DYNAMIC_BASE,staticSealed=!0;function invoke_viiiii(i,o,a,c,_,t){try{Module.dynCall_viiiii(i,o,a,c,_,t)}catch(O){if(typeof O!="number"&&O!=="longjmp")throw O;Module.setThrew(1,0)}}function invoke_vif(i,o,a){try{Module.dynCall_vif(i,o,a)}catch(c){if(typeof c!="number"&&c!=="longjmp")throw c;Module.setThrew(1,0)}}function invoke_vid(i,o,a){try{Module.dynCall_vid(i,o,a)}catch(c){if(typeof c!="number"&&c!=="longjmp")throw c;Module.setThrew(1,0)}}function invoke_fiff(i,o,a,c){try{return Module.dynCall_fiff(i,o,a,c)}catch(_){if(typeof _!="number"&&_!=="longjmp")throw _;Module.setThrew(1,0)}}function invoke_vi(i,o){try{Module.dynCall_vi(i,o)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_vii(i,o,a){try{Module.dynCall_vii(i,o,a)}catch(c){if(typeof c!="number"&&c!=="longjmp")throw c;Module.setThrew(1,0)}}function invoke_ii(i,o){try{return Module.dynCall_ii(i,o)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_viddi(i,o,a,c,_){try{Module.dynCall_viddi(i,o,a,c,_)}catch(t){if(typeof t!="number"&&t!=="longjmp")throw t;Module.setThrew(1,0)}}function invoke_vidd(i,o,a,c){try{Module.dynCall_vidd(i,o,a,c)}catch(_){if(typeof _!="number"&&_!=="longjmp")throw _;Module.setThrew(1,0)}}function invoke_iiii(i,o,a,c){try{return Module.dynCall_iiii(i,o,a,c)}catch(_){if(typeof _!="number"&&_!=="longjmp")throw _;Module.setThrew(1,0)}}function invoke_diii(i,o,a,c){try{return Module.dynCall_diii(i,o,a,c)}catch(_){if(typeof _!="number"&&_!=="longjmp")throw _;Module.setThrew(1,0)}}function invoke_di(i,o){try{return Module.dynCall_di(i,o)}catch(a){if(typeof a!="number"&&a!=="longjmp")throw a;Module.setThrew(1,0)}}function invoke_iid(i,o,a){try{return Module.dynCall_iid(i,o,a)}catch(c){if(typeof c!="number"&&c!=="longjmp")throw c;Module.setThrew(1,0)}}function invoke_iii(i,o,a){try{return Module.dynCall_iii(i,o,a)}catch(c){if(typeof c!="number"&&c!=="longjmp")throw c;Module.setThrew(1,0)}}function invoke_viiddi(i,o,a,c,_,t){try{Module.dynCall_viiddi(i,o,a,c,_,t)}catch(O){if(typeof O!="number"&&O!=="longjmp")throw O;Module.setThrew(1,0)}}function invoke_viiiiii(i,o,a,c,_,t,O){try{Module.dynCall_viiiiii(i,o,a,c,_,t,O)}catch(N){if(typeof N!="number"&&N!=="longjmp")throw N;Module.setThrew(1,0)}}function invoke_dii(i,o,a){try{return Module.dynCall_dii(i,o,a)}catch(c){if(typeof c!="number"&&c!=="longjmp")throw c;Module.setThrew(1,0)}}function invoke_i(i){try{return Module.dynCall_i(i)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_iiiiii(i,o,a,c,_,t){try{return Module.dynCall_iiiiii(i,o,a,c,_,t)}catch(O){if(typeof O!="number"&&O!=="longjmp")throw O;Module.setThrew(1,0)}}function invoke_viiid(i,o,a,c,_){try{Module.dynCall_viiid(i,o,a,c,_)}catch(t){if(typeof t!="number"&&t!=="longjmp")throw t;Module.setThrew(1,0)}}function invoke_viififi(i,o,a,c,_,t,O){try{Module.dynCall_viififi(i,o,a,c,_,t,O)}catch(N){if(typeof N!="number"&&N!=="longjmp")throw N;Module.setThrew(1,0)}}function invoke_viii(i,o,a,c){try{Module.dynCall_viii(i,o,a,c)}catch(_){if(typeof _!="number"&&_!=="longjmp")throw _;Module.setThrew(1,0)}}function invoke_v(i){try{Module.dynCall_v(i)}catch(o){if(typeof o!="number"&&o!=="longjmp")throw o;Module.setThrew(1,0)}}function invoke_viid(i,o,a,c){try{Module.dynCall_viid(i,o,a,c)}catch(_){if(typeof _!="number"&&_!=="longjmp")throw _;Module.setThrew(1,0)}}function invoke_idd(i,o,a){try{return Module.dynCall_idd(i,o,a)}catch(c){if(typeof c!="number"&&c!=="longjmp")throw c;Module.setThrew(1,0)}}function invoke_viiii(i,o,a,c,_){try{Module.dynCall_viiii(i,o,a,c,_)}catch(t){if(typeof t!="number"&&t!=="longjmp")throw t;Module.setThrew(1,0)}}Module.asmGlobalArg={Math,Int8Array,Int16Array,Int32Array,Uint8Array,Uint16Array,Uint32Array,Float32Array,Float64Array,NaN:NaN,Infinity:Infinity},Module.asmLibraryArg={abort,assert,enlargeMemory,getTotalMemory,abortOnCannotGrowMemory,invoke_viiiii,invoke_vif,invoke_vid,invoke_fiff,invoke_vi,invoke_vii,invoke_ii,invoke_viddi,invoke_vidd,invoke_iiii,invoke_diii,invoke_di,invoke_iid,invoke_iii,invoke_viiddi,invoke_viiiiii,invoke_dii,invoke_i,invoke_iiiiii,invoke_viiid,invoke_viififi,invoke_viii,invoke_v,invoke_viid,invoke_idd,invoke_viiii,_emscripten_asm_const_iiiii,_emscripten_asm_const_iiidddddd,_emscripten_asm_const_iiiid,__nbind_reference_external,_emscripten_asm_const_iiiiiiii,_removeAccessorPrefix,_typeModule,__nbind_register_pool,__decorate,_llvm_stackrestore,___cxa_atexit,__extends,__nbind_get_value_object,__ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj,_emscripten_set_main_loop_timing,__nbind_register_primitive,__nbind_register_type,_emscripten_memcpy_big,__nbind_register_function,___setErrNo,__nbind_register_class,__nbind_finish,_abort,_nbind_value,_llvm_stacksave,___syscall54,_defineHidden,_emscripten_set_main_loop,_emscripten_get_now,__nbind_register_callback_signature,_emscripten_asm_const_iiiiii,__nbind_free_external,_emscripten_asm_const_iiii,_emscripten_asm_const_iiididi,___syscall6,_atexit,___syscall140,___syscall146,DYNAMICTOP_PTR,tempDoublePtr,ABORT,STACKTOP,STACK_MAX,cttz_i8,___dso_handle};var asm=function(i,o,a){var c=new i.Int8Array(a),_=new i.Int16Array(a),t=new i.Int32Array(a),O=new i.Uint8Array(a),N=new i.Uint16Array(a),M=new i.Uint32Array(a),T=new i.Float32Array(a),B=new i.Float64Array(a),H=o.DYNAMICTOP_PTR|0,q=o.tempDoublePtr|0,ne=o.ABORT|0,m=o.STACKTOP|0,he=o.STACK_MAX|0,De=o.cttz_i8|0,se=o.___dso_handle|0,fe=0,_e=0,ce=0,me=0,ie=i.NaN,Oe=i.Infinity,Ue=0,je=0,at=0,Dt=0,Qe=0,ut=0,Ve=i.Math.floor,It=i.Math.abs,Xt=i.Math.sqrt,rt=i.Math.pow,X=i.Math.cos,de=i.Math.sin,Ce=i.Math.tan,oe=i.Math.acos,He=i.Math.asin,dt=i.Math.atan,At=i.Math.atan2,nn=i.Math.exp,an=i.Math.log,Mn=i.Math.ceil,lr=i.Math.imul,ln=i.Math.min,Vt=i.Math.max,Dr=i.Math.clz32,w=i.Math.fround,jt=o.abort,Xn=o.assert,vr=o.enlargeMemory,jr=o.getTotalMemory,fr=o.abortOnCannotGrowMemory,zr=o.invoke_viiiii,Qt=o.invoke_vif,wu=o.invoke_vid,d0=o.invoke_fiff,Ro=o.invoke_vi,Jo=o.invoke_vii,Ps=o.invoke_ii,Zo=o.invoke_viddi,$o=o.invoke_vidd,qt=o.invoke_iiii,Ai=o.invoke_diii,su=o.invoke_di,mi=o.invoke_iid,wr=o.invoke_iii,el=o.invoke_viiddi,Y0=o.invoke_viiiiii,Uu=o.invoke_dii,K0=o.invoke_i,Xr=o.invoke_iiiiii,Oo=o.invoke_viiid,Mo=o.invoke_viififi,F0=o.invoke_viii,au=o.invoke_v,Li=o.invoke_viid,Is=o.invoke_idd,Xl=o.invoke_viiii,P0=o._emscripten_asm_const_iiiii,p0=o._emscripten_asm_const_iiidddddd,Hr=o._emscripten_asm_const_iiiid,Ri=o.__nbind_reference_external,X0=o._emscripten_asm_const_iiiiiiii,gi=o._removeAccessorPrefix,en=o._typeModule,bn=o.__nbind_register_pool,Oi=o.__decorate,yi=o._llvm_stackrestore,Wt=o.___cxa_atexit,Ru=o.__extends,eu=o.__nbind_get_value_object,Q0=o.__ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj,Yi=o._emscripten_set_main_loop_timing,Ql=o.__nbind_register_primitive,ko=o.__nbind_register_type,ai=o._emscripten_memcpy_big,ao=o.__nbind_register_function,Jl=o.___setErrNo,Lo=o.__nbind_register_class,bs=o.__nbind_finish,$n=o._abort,tl=o._nbind_value,fo=o._llvm_stacksave,I0=o.___syscall54,Sl=o._defineHidden,No=o._emscripten_set_main_loop,wt=o._emscripten_get_now,bt=o.__nbind_register_callback_signature,Hn=o._emscripten_asm_const_iiiiii,qr=o.__nbind_free_external,Ki=o._emscripten_asm_const_iiii,Qr=o._emscripten_asm_const_iiididi,Ou=o.___syscall6,h0=o._atexit,Ni=o.___syscall140,v0=o.___syscall146,vs=w(0);let Tt=w(0);function co(e){e=e|0;var n=0;return n=m,m=m+e|0,m=m+15&-16,n|0}function nl(){return m|0}function Zl(e){e=e|0,m=e}function ju(e,n){e=e|0,n=n|0,m=e,he=n}function ms(e,n){e=e|0,n=n|0,fe||(fe=e,_e=n)}function b0(e){e=e|0,ut=e}function Q(){return ut|0}function we(){var e=0,n=0;_r(8104,8,400)|0,_r(8504,408,540)|0,e=9044,n=e+44|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));c[9088]=0,c[9089]=1,t[2273]=0,t[2274]=948,t[2275]=948,Wt(17,8104,se|0)|0}function Ne(e){e=e|0,fc(e+948|0)}function Le(e){return e=w(e),((mr(e)|0)&2147483647)>>>0>2139095040|0}function pt(e,n,r){e=e|0,n=n|0,r=r|0;e:do if(t[e+(n<<3)+4>>2]|0)e=e+(n<<3)|0;else{if((n|2|0)==3?t[e+60>>2]|0:0){e=e+56|0;break}switch(n|0){case 0:case 2:case 4:case 5:{if(t[e+52>>2]|0){e=e+48|0;break e}break}default:}if(t[e+68>>2]|0){e=e+64|0;break}else{e=(n|1|0)==5?948:r;break}}while(0);return e|0}function Yn(e){e=e|0;var n=0;return n=T_(1e3)|0,Cn(e,(n|0)!=0,2456),t[2276]=(t[2276]|0)+1,_r(n|0,8104,1e3)|0,c[e+2>>0]|0&&(t[n+4>>2]=2,t[n+12>>2]=4),t[n+976>>2]=e,n|0}function Cn(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0;l=m,m=m+16|0,u=l,n||(t[u>>2]=r,Cl(e,5,3197,u)),m=l}function cr(){return Yn(956)|0}function Si(e){e=e|0;var n=0;return n=pn(1e3)|0,Mu(n,e),Cn(t[e+976>>2]|0,1,2456),t[2276]=(t[2276]|0)+1,t[n+944>>2]=0,n|0}function Mu(e,n){e=e|0,n=n|0;var r=0;_r(e|0,n|0,948)|0,aa(e+948|0,n+948|0),r=e+960|0,e=n+960|0,n=r+40|0;do t[r>>2]=t[e>>2],r=r+4|0,e=e+4|0;while((r|0)<(n|0))}function zu(e){e=e|0;var n=0,r=0,u=0,l=0;if(n=e+944|0,r=t[n>>2]|0,r|0&&(Hu(r+948|0,e)|0,t[n>>2]=0),r=Su(e)|0,r|0){n=0;do t[(Ti(e,n)|0)+944>>2]=0,n=n+1|0;while((n|0)!=(r|0))}r=e+948|0,u=t[r>>2]|0,l=e+952|0,n=t[l>>2]|0,(n|0)!=(u|0)&&(t[l>>2]=n+(~((n+-4-u|0)>>>2)<<2)),Fo(r),C_(e),t[2276]=(t[2276]|0)+-1}function Hu(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0;u=t[e>>2]|0,D=e+4|0,r=t[D>>2]|0,s=r;e:do if((u|0)==(r|0))l=u,h=4;else for(e=u;;){if((t[e>>2]|0)==(n|0)){l=e,h=4;break e}if(e=e+4|0,(e|0)==(r|0)){e=0;break}}while(0);return(h|0)==4&&((l|0)!=(r|0)?(u=l+4|0,e=s-u|0,n=e>>2,n&&(kg(l|0,u|0,e|0)|0,r=t[D>>2]|0),e=l+(n<<2)|0,(r|0)==(e|0)||(t[D>>2]=r+(~((r+-4-e|0)>>>2)<<2)),e=1):e=0),e|0}function Su(e){return e=e|0,(t[e+952>>2]|0)-(t[e+948>>2]|0)>>2|0}function Ti(e,n){e=e|0,n=n|0;var r=0;return r=t[e+948>>2]|0,(t[e+952>>2]|0)-r>>2>>>0>n>>>0?e=t[r+(n<<2)>>2]|0:e=0,e|0}function Fo(e){e=e|0;var n=0,r=0,u=0,l=0;u=m,m=m+32|0,n=u,l=t[e>>2]|0,r=(t[e+4>>2]|0)-l|0,((t[e+8>>2]|0)-l|0)>>>0>r>>>0&&(l=r>>2,Y(n,l,l,e+8|0),ri(e,n),ii(n)),m=u}function ku(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0,L=0;L=Su(e)|0;do if(L|0){if((t[(Ti(e,0)|0)+944>>2]|0)==(e|0)){if(!(Hu(e+948|0,n)|0))break;_r(n+400|0,8504,540)|0,t[n+944>>2]=0,Qn(e);break}h=t[(t[e+976>>2]|0)+12>>2]|0,D=e+948|0,S=(h|0)==0,r=0,s=0;do u=t[(t[D>>2]|0)+(s<<2)>>2]|0,(u|0)==(n|0)?Qn(e):(l=Si(u)|0,t[(t[D>>2]|0)+(r<<2)>>2]=l,t[l+944>>2]=e,S||tD[h&15](u,l,e,r),r=r+1|0),s=s+1|0;while((s|0)!=(L|0));if(r>>>0>>0){S=e+948|0,D=e+952|0,h=r,r=t[D>>2]|0;do s=(t[S>>2]|0)+(h<<2)|0,u=s+4|0,l=r-u|0,n=l>>2,n&&(kg(s|0,u|0,l|0)|0,r=t[D>>2]|0),l=r,u=s+(n<<2)|0,(l|0)!=(u|0)&&(r=l+(~((l+-4-u|0)>>>2)<<2)|0,t[D>>2]=r),h=h+1|0;while((h|0)!=(L|0))}}while(0)}function po(e){e=e|0;var n=0,r=0,u=0,l=0;qu(e,(Su(e)|0)==0,2491),qu(e,(t[e+944>>2]|0)==0,2545),n=e+948|0,r=t[n>>2]|0,u=e+952|0,l=t[u>>2]|0,(l|0)!=(r|0)&&(t[u>>2]=l+(~((l+-4-r|0)>>>2)<<2)),Fo(n),n=e+976|0,r=t[n>>2]|0,_r(e|0,8104,1e3)|0,c[r+2>>0]|0&&(t[e+4>>2]=2,t[e+12>>2]=4),t[n>>2]=r}function qu(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0;l=m,m=m+16|0,u=l,n||(t[u>>2]=r,pr(e,5,3197,u)),m=l}function Ia(){return t[2276]|0}function m0(){var e=0;return e=T_(20)|0,ua((e|0)!=0,2592),t[2277]=(t[2277]|0)+1,t[e>>2]=t[239],t[e+4>>2]=t[240],t[e+8>>2]=t[241],t[e+12>>2]=t[242],t[e+16>>2]=t[243],e|0}function ua(e,n){e=e|0,n=n|0;var r=0,u=0;u=m,m=m+16|0,r=u,e||(t[r>>2]=n,pr(0,5,3197,r)),m=u}function J0(e){e=e|0,C_(e),t[2277]=(t[2277]|0)+-1}function oa(e,n){e=e|0,n=n|0;var r=0;n?(qu(e,(Su(e)|0)==0,2629),r=1):(r=0,n=0),t[e+964>>2]=n,t[e+988>>2]=r}function ba(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;u=m,m=m+16|0,s=u+8|0,l=u+4|0,h=u,t[l>>2]=n,qu(e,(t[n+944>>2]|0)==0,2709),qu(e,(t[e+964>>2]|0)==0,2763),gs(e),n=e+948|0,t[h>>2]=(t[n>>2]|0)+(r<<2),t[s>>2]=t[h>>2],S0(n,s,l)|0,t[(t[l>>2]|0)+944>>2]=e,Qn(e),m=u}function gs(e){e=e|0;var n=0,r=0,u=0,l=0,s=0,h=0,D=0;if(r=Su(e)|0,r|0?(t[(Ti(e,0)|0)+944>>2]|0)!=(e|0):0){u=t[(t[e+976>>2]|0)+12>>2]|0,l=e+948|0,s=(u|0)==0,n=0;do h=t[(t[l>>2]|0)+(n<<2)>>2]|0,D=Si(h)|0,t[(t[l>>2]|0)+(n<<2)>>2]=D,t[D+944>>2]=e,s||tD[u&15](h,D,e,n),n=n+1|0;while((n|0)!=(r|0))}}function S0(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,L=0,k=0,I=0,K=0,be=0,Se=0,ge=0,Ze=0,Ge=0;Ze=m,m=m+64|0,I=Ze+52|0,D=Ze+48|0,K=Ze+28|0,be=Ze+24|0,Se=Ze+20|0,ge=Ze,u=t[e>>2]|0,s=u,n=u+((t[n>>2]|0)-s>>2<<2)|0,u=e+4|0,l=t[u>>2]|0,h=e+8|0;do if(l>>>0<(t[h>>2]|0)>>>0){if((n|0)==(l|0)){t[n>>2]=t[r>>2],t[u>>2]=(t[u>>2]|0)+4;break}Vr(e,n,l,n+4|0),n>>>0<=r>>>0&&(r=(t[u>>2]|0)>>>0>r>>>0?r+4|0:r),t[n>>2]=t[r>>2]}else{u=(l-s>>2)+1|0,l=A0(e)|0,l>>>0>>0&&hi(e),k=t[e>>2]|0,L=(t[h>>2]|0)-k|0,s=L>>1,Y(ge,L>>2>>>0>>1>>>0?s>>>0>>0?u:s:l,n-k>>2,e+8|0),k=ge+8|0,u=t[k>>2]|0,s=ge+12|0,L=t[s>>2]|0,h=L,S=u;do if((u|0)==(L|0)){if(L=ge+4|0,u=t[L>>2]|0,Ge=t[ge>>2]|0,l=Ge,u>>>0<=Ge>>>0){u=h-l>>1,u=(u|0)==0?1:u,Y(K,u,u>>>2,t[ge+16>>2]|0),t[be>>2]=t[L>>2],t[Se>>2]=t[k>>2],t[D>>2]=t[be>>2],t[I>>2]=t[Se>>2],Di(K,D,I),u=t[ge>>2]|0,t[ge>>2]=t[K>>2],t[K>>2]=u,u=K+4|0,Ge=t[L>>2]|0,t[L>>2]=t[u>>2],t[u>>2]=Ge,u=K+8|0,Ge=t[k>>2]|0,t[k>>2]=t[u>>2],t[u>>2]=Ge,u=K+12|0,Ge=t[s>>2]|0,t[s>>2]=t[u>>2],t[u>>2]=Ge,ii(K),u=t[k>>2]|0;break}s=u,h=((s-l>>2)+1|0)/-2|0,D=u+(h<<2)|0,l=S-s|0,s=l>>2,s&&(kg(D|0,u|0,l|0)|0,u=t[L>>2]|0),Ge=D+(s<<2)|0,t[k>>2]=Ge,t[L>>2]=u+(h<<2),u=Ge}while(0);t[u>>2]=t[r>>2],t[k>>2]=(t[k>>2]|0)+4,n=ft(e,ge,n)|0,ii(ge)}while(0);return m=Ze,n|0}function Qn(e){e=e|0;var n=0;do{if(n=e+984|0,c[n>>0]|0)break;c[n>>0]=1,T[e+504>>2]=w(ie),e=t[e+944>>2]|0}while((e|0)!=0)}function fc(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-4-u|0)>>>2)<<2)),yt(r))}function fi(e){return e=e|0,t[e+944>>2]|0}function $r(e){e=e|0,qu(e,(t[e+964>>2]|0)!=0,2832),Qn(e)}function $l(e){return e=e|0,(c[e+984>>0]|0)!=0|0}function la(e,n){e=e|0,n=n|0,kF(e,n,400)|0&&(_r(e|0,n|0,400)|0,Qn(e))}function hf(e){e=e|0;var n=Tt;return n=w(T[e+44>>2]),e=Le(n)|0,w(e?w(0):n)}function Bs(e){e=e|0;var n=Tt;return n=w(T[e+48>>2]),Le(n)|0&&(n=c[(t[e+976>>2]|0)+2>>0]|0?w(1):w(0)),w(n)}function Ba(e,n){e=e|0,n=n|0,t[e+980>>2]=n}function Us(e){return e=e|0,t[e+980>>2]|0}function g0(e,n){e=e|0,n=n|0;var r=0;r=e+4|0,(t[r>>2]|0)!=(n|0)&&(t[r>>2]=n,Qn(e))}function js(e){return e=e|0,t[e+4>>2]|0}function ji(e,n){e=e|0,n=n|0;var r=0;r=e+8|0,(t[r>>2]|0)!=(n|0)&&(t[r>>2]=n,Qn(e))}function U(e){return e=e|0,t[e+8>>2]|0}function z(e,n){e=e|0,n=n|0;var r=0;r=e+12|0,(t[r>>2]|0)!=(n|0)&&(t[r>>2]=n,Qn(e))}function G(e){return e=e|0,t[e+12>>2]|0}function $(e,n){e=e|0,n=n|0;var r=0;r=e+16|0,(t[r>>2]|0)!=(n|0)&&(t[r>>2]=n,Qn(e))}function Te(e){return e=e|0,t[e+16>>2]|0}function ye(e,n){e=e|0,n=n|0;var r=0;r=e+20|0,(t[r>>2]|0)!=(n|0)&&(t[r>>2]=n,Qn(e))}function Ae(e){return e=e|0,t[e+20>>2]|0}function Z(e,n){e=e|0,n=n|0;var r=0;r=e+24|0,(t[r>>2]|0)!=(n|0)&&(t[r>>2]=n,Qn(e))}function ke(e){return e=e|0,t[e+24>>2]|0}function Je(e,n){e=e|0,n=n|0;var r=0;r=e+28|0,(t[r>>2]|0)!=(n|0)&&(t[r>>2]=n,Qn(e))}function vt(e){return e=e|0,t[e+28>>2]|0}function ue(e,n){e=e|0,n=n|0;var r=0;r=e+32|0,(t[r>>2]|0)!=(n|0)&&(t[r>>2]=n,Qn(e))}function qe(e){return e=e|0,t[e+32>>2]|0}function nt(e,n){e=e|0,n=n|0;var r=0;r=e+36|0,(t[r>>2]|0)!=(n|0)&&(t[r>>2]=n,Qn(e))}function Ct(e){return e=e|0,t[e+36>>2]|0}function Mt(e,n){e=e|0,n=w(n);var r=0;r=e+40|0,w(T[r>>2])!=n&&(T[r>>2]=n,Qn(e))}function Pt(e,n){e=e|0,n=w(n);var r=0;r=e+44|0,w(T[r>>2])!=n&&(T[r>>2]=n,Qn(e))}function sn(e,n){e=e|0,n=w(n);var r=0;r=e+48|0,w(T[r>>2])!=n&&(T[r>>2]=n,Qn(e))}function rn(e,n){e=e|0,n=w(n);var r=0,u=0,l=0,s=0;s=Le(n)|0,r=(s^1)&1,u=e+52|0,l=e+56|0,(s|w(T[u>>2])==n?(t[l>>2]|0)==(r|0):0)||(T[u>>2]=n,t[l>>2]=r,Qn(e))}function Nt(e,n){e=e|0,n=w(n);var r=0,u=0;u=e+52|0,r=e+56|0,(w(T[u>>2])==n?(t[r>>2]|0)==2:0)||(T[u>>2]=n,u=Le(n)|0,t[r>>2]=u?3:2,Qn(e))}function Dn(e,n){e=e|0,n=n|0;var r=0,u=0;u=n+52|0,r=t[u+4>>2]|0,n=e,t[n>>2]=t[u>>2],t[n+4>>2]=r}function dr(e,n,r){e=e|0,n=n|0,r=w(r);var u=0,l=0,s=0;s=Le(r)|0,u=(s^1)&1,l=e+132+(n<<3)|0,n=e+132+(n<<3)+4|0,(s|w(T[l>>2])==r?(t[n>>2]|0)==(u|0):0)||(T[l>>2]=r,t[n>>2]=u,Qn(e))}function er(e,n,r){e=e|0,n=n|0,r=w(r);var u=0,l=0,s=0;s=Le(r)|0,u=s?0:2,l=e+132+(n<<3)|0,n=e+132+(n<<3)+4|0,(s|w(T[l>>2])==r?(t[n>>2]|0)==(u|0):0)||(T[l>>2]=r,t[n>>2]=u,Qn(e))}function Cr(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;u=n+132+(r<<3)|0,n=t[u+4>>2]|0,r=e,t[r>>2]=t[u>>2],t[r+4>>2]=n}function Rn(e,n,r){e=e|0,n=n|0,r=w(r);var u=0,l=0,s=0;s=Le(r)|0,u=(s^1)&1,l=e+60+(n<<3)|0,n=e+60+(n<<3)+4|0,(s|w(T[l>>2])==r?(t[n>>2]|0)==(u|0):0)||(T[l>>2]=r,t[n>>2]=u,Qn(e))}function Lr(e,n,r){e=e|0,n=n|0,r=w(r);var u=0,l=0,s=0;s=Le(r)|0,u=s?0:2,l=e+60+(n<<3)|0,n=e+60+(n<<3)+4|0,(s|w(T[l>>2])==r?(t[n>>2]|0)==(u|0):0)||(T[l>>2]=r,t[n>>2]=u,Qn(e))}function y0(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;u=n+60+(r<<3)|0,n=t[u+4>>2]|0,r=e,t[r>>2]=t[u>>2],t[r+4>>2]=n}function Nr(e,n){e=e|0,n=n|0;var r=0;r=e+60+(n<<3)+4|0,(t[r>>2]|0)!=3&&(T[e+60+(n<<3)>>2]=w(ie),t[r>>2]=3,Qn(e))}function it(e,n,r){e=e|0,n=n|0,r=w(r);var u=0,l=0,s=0;s=Le(r)|0,u=(s^1)&1,l=e+204+(n<<3)|0,n=e+204+(n<<3)+4|0,(s|w(T[l>>2])==r?(t[n>>2]|0)==(u|0):0)||(T[l>>2]=r,t[n>>2]=u,Qn(e))}function Et(e,n,r){e=e|0,n=n|0,r=w(r);var u=0,l=0,s=0;s=Le(r)|0,u=s?0:2,l=e+204+(n<<3)|0,n=e+204+(n<<3)+4|0,(s|w(T[l>>2])==r?(t[n>>2]|0)==(u|0):0)||(T[l>>2]=r,t[n>>2]=u,Qn(e))}function et(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;u=n+204+(r<<3)|0,n=t[u+4>>2]|0,r=e,t[r>>2]=t[u>>2],t[r+4>>2]=n}function Ft(e,n,r){e=e|0,n=n|0,r=w(r);var u=0,l=0,s=0;s=Le(r)|0,u=(s^1)&1,l=e+276+(n<<3)|0,n=e+276+(n<<3)+4|0,(s|w(T[l>>2])==r?(t[n>>2]|0)==(u|0):0)||(T[l>>2]=r,t[n>>2]=u,Qn(e))}function un(e,n){return e=e|0,n=n|0,w(T[e+276+(n<<3)>>2])}function fn(e,n){e=e|0,n=w(n);var r=0,u=0,l=0,s=0;s=Le(n)|0,r=(s^1)&1,u=e+348|0,l=e+352|0,(s|w(T[u>>2])==n?(t[l>>2]|0)==(r|0):0)||(T[u>>2]=n,t[l>>2]=r,Qn(e))}function Jn(e,n){e=e|0,n=w(n);var r=0,u=0;u=e+348|0,r=e+352|0,(w(T[u>>2])==n?(t[r>>2]|0)==2:0)||(T[u>>2]=n,u=Le(n)|0,t[r>>2]=u?3:2,Qn(e))}function Sr(e){e=e|0;var n=0;n=e+352|0,(t[n>>2]|0)!=3&&(T[e+348>>2]=w(ie),t[n>>2]=3,Qn(e))}function fu(e,n){e=e|0,n=n|0;var r=0,u=0;u=n+348|0,r=t[u+4>>2]|0,n=e,t[n>>2]=t[u>>2],t[n+4>>2]=r}function Lu(e,n){e=e|0,n=w(n);var r=0,u=0,l=0,s=0;s=Le(n)|0,r=(s^1)&1,u=e+356|0,l=e+360|0,(s|w(T[u>>2])==n?(t[l>>2]|0)==(r|0):0)||(T[u>>2]=n,t[l>>2]=r,Qn(e))}function T0(e,n){e=e|0,n=w(n);var r=0,u=0;u=e+356|0,r=e+360|0,(w(T[u>>2])==n?(t[r>>2]|0)==2:0)||(T[u>>2]=n,u=Le(n)|0,t[r>>2]=u?3:2,Qn(e))}function Z0(e){e=e|0;var n=0;n=e+360|0,(t[n>>2]|0)!=3&&(T[e+356>>2]=w(ie),t[n>>2]=3,Qn(e))}function Nu(e,n){e=e|0,n=n|0;var r=0,u=0;u=n+356|0,r=t[u+4>>2]|0,n=e,t[n>>2]=t[u>>2],t[n+4>>2]=r}function _i(e,n){e=e|0,n=w(n);var r=0,u=0,l=0,s=0;s=Le(n)|0,r=(s^1)&1,u=e+364|0,l=e+368|0,(s|w(T[u>>2])==n?(t[l>>2]|0)==(r|0):0)||(T[u>>2]=n,t[l>>2]=r,Qn(e))}function Po(e,n){e=e|0,n=w(n);var r=0,u=0,l=0,s=0;s=Le(n)|0,r=s?0:2,u=e+364|0,l=e+368|0,(s|w(T[u>>2])==n?(t[l>>2]|0)==(r|0):0)||(T[u>>2]=n,t[l>>2]=r,Qn(e))}function rl(e,n){e=e|0,n=n|0;var r=0,u=0;u=n+364|0,r=t[u+4>>2]|0,n=e,t[n>>2]=t[u>>2],t[n+4>>2]=r}function vf(e,n){e=e|0,n=w(n);var r=0,u=0,l=0,s=0;s=Le(n)|0,r=(s^1)&1,u=e+372|0,l=e+376|0,(s|w(T[u>>2])==n?(t[l>>2]|0)==(r|0):0)||(T[u>>2]=n,t[l>>2]=r,Qn(e))}function Tl(e,n){e=e|0,n=w(n);var r=0,u=0,l=0,s=0;s=Le(n)|0,r=s?0:2,u=e+372|0,l=e+376|0,(s|w(T[u>>2])==n?(t[l>>2]|0)==(r|0):0)||(T[u>>2]=n,t[l>>2]=r,Qn(e))}function mf(e,n){e=e|0,n=n|0;var r=0,u=0;u=n+372|0,r=t[u+4>>2]|0,n=e,t[n>>2]=t[u>>2],t[n+4>>2]=r}function Io(e,n){e=e|0,n=w(n);var r=0,u=0,l=0,s=0;s=Le(n)|0,r=(s^1)&1,u=e+380|0,l=e+384|0,(s|w(T[u>>2])==n?(t[l>>2]|0)==(r|0):0)||(T[u>>2]=n,t[l>>2]=r,Qn(e))}function ys(e,n){e=e|0,n=w(n);var r=0,u=0,l=0,s=0;s=Le(n)|0,r=s?0:2,u=e+380|0,l=e+384|0,(s|w(T[u>>2])==n?(t[l>>2]|0)==(r|0):0)||(T[u>>2]=n,t[l>>2]=r,Qn(e))}function zs(e,n){e=e|0,n=n|0;var r=0,u=0;u=n+380|0,r=t[u+4>>2]|0,n=e,t[n>>2]=t[u>>2],t[n+4>>2]=r}function bo(e,n){e=e|0,n=w(n);var r=0,u=0,l=0,s=0;s=Le(n)|0,r=(s^1)&1,u=e+388|0,l=e+392|0,(s|w(T[u>>2])==n?(t[l>>2]|0)==(r|0):0)||(T[u>>2]=n,t[l>>2]=r,Qn(e))}function Bo(e,n){e=e|0,n=w(n);var r=0,u=0,l=0,s=0;s=Le(n)|0,r=s?0:2,u=e+388|0,l=e+392|0,(s|w(T[u>>2])==n?(t[l>>2]|0)==(r|0):0)||(T[u>>2]=n,t[l>>2]=r,Qn(e))}function _s(e,n){e=e|0,n=n|0;var r=0,u=0;u=n+388|0,r=t[u+4>>2]|0,n=e,t[n>>2]=t[u>>2],t[n+4>>2]=r}function Qu(e,n){e=e|0,n=w(n);var r=0;r=e+396|0,w(T[r>>2])!=n&&(T[r>>2]=n,Qn(e))}function Tu(e){return e=e|0,w(T[e+396>>2])}function Ei(e){return e=e|0,w(T[e+400>>2])}function C0(e){return e=e|0,w(T[e+404>>2])}function $0(e){return e=e|0,w(T[e+408>>2])}function Uo(e){return e=e|0,w(T[e+412>>2])}function sa(e){return e=e|0,w(T[e+416>>2])}function es(e){return e=e|0,w(T[e+420>>2])}function tu(e,n){switch(e=e|0,n=n|0,qu(e,(n|0)<6,2918),n|0){case 0:{n=(t[e+496>>2]|0)==2?5:4;break}case 2:{n=(t[e+496>>2]|0)==2?4:5;break}default:}return w(T[e+424+(n<<2)>>2])}function ei(e,n){switch(e=e|0,n=n|0,qu(e,(n|0)<6,2918),n|0){case 0:{n=(t[e+496>>2]|0)==2?5:4;break}case 2:{n=(t[e+496>>2]|0)==2?4:5;break}default:}return w(T[e+448+(n<<2)>>2])}function ho(e,n){switch(e=e|0,n=n|0,qu(e,(n|0)<6,2918),n|0){case 0:{n=(t[e+496>>2]|0)==2?5:4;break}case 2:{n=(t[e+496>>2]|0)==2?4:5;break}default:}return w(T[e+472+(n<<2)>>2])}function Bi(e,n){e=e|0,n=n|0;var r=0,u=Tt;return r=t[e+4>>2]|0,(r|0)==(t[n+4>>2]|0)?r?(u=w(T[e>>2]),e=w(It(w(u-w(T[n>>2]))))>2]=0,t[u+4>>2]=0,t[u+8>>2]=0,Q0(u|0,e|0,n|0,0),pr(e,3,(c[u+11>>0]|0)<0?t[u>>2]|0:u,r),eP(u),m=r}function eo(e,n,r,u){e=w(e),n=w(n),r=r|0,u=u|0;var l=Tt;e=w(e*n),l=w(XE(e,w(1)));do if(Ci(l,w(0))|0)e=w(e-l);else{if(e=w(e-l),Ci(l,w(1))|0){e=w(e+w(1));break}if(r){e=w(e+w(1));break}u||(l>w(.5)?l=w(1):(u=Ci(l,w(.5))|0,l=w(u?1:0)),e=w(e+l))}while(0);return w(e/n)}function to(e,n,r,u,l,s,h,D,S,L,k,I,K){e=e|0,n=w(n),r=r|0,u=w(u),l=l|0,s=w(s),h=h|0,D=w(D),S=w(S),L=w(L),k=w(k),I=w(I),K=K|0;var be=0,Se=Tt,ge=Tt,Ze=Tt,Ge=Tt,ct=Tt,Me=Tt;return S>2]),Se!=w(0)):0)?(Ze=w(eo(n,Se,0,0)),Ge=w(eo(u,Se,0,0)),ge=w(eo(s,Se,0,0)),Se=w(eo(D,Se,0,0))):(ge=s,Ze=n,Se=D,Ge=u),(l|0)==(e|0)?be=Ci(ge,Ze)|0:be=0,(h|0)==(r|0)?K=Ci(Se,Ge)|0:K=0,((be?0:(ct=w(n-k),!(xe(e,ct,S)|0)))?!(tt(e,ct,l,S)|0):0)?be=Ye(e,ct,l,s,S)|0:be=1,((K?0:(Me=w(u-I),!(xe(r,Me,L)|0)))?!(tt(r,Me,h,L)|0):0)?K=Ye(r,Me,h,D,L)|0:K=1,K=be&K),K|0}function xe(e,n,r){return e=e|0,n=w(n),r=w(r),(e|0)==1?e=Ci(n,r)|0:e=0,e|0}function tt(e,n,r,u){return e=e|0,n=w(n),r=r|0,u=w(u),(e|0)==2&(r|0)==0?n>=u?e=1:e=Ci(n,u)|0:e=0,e|0}function Ye(e,n,r,u,l){return e=e|0,n=w(n),r=r|0,u=w(u),l=w(l),(e|0)==2&(r|0)==2&u>n?l<=n?e=1:e=Ci(n,l)|0:e=0,e|0}function Yt(e,n,r,u,l,s,h,D,S,L,k){e=e|0,n=w(n),r=w(r),u=u|0,l=l|0,s=s|0,h=w(h),D=w(D),S=S|0,L=L|0,k=k|0;var I=0,K=0,be=0,Se=0,ge=Tt,Ze=Tt,Ge=0,ct=0,Me=0,Pe=0,Zt=0,Br=0,In=0,yn=0,Er=0,Pr=0,Ln=0,uu=Tt,ls=Tt,ss=Tt,as=0,ta=0;Ln=m,m=m+160|0,yn=Ln+152|0,In=Ln+120|0,Br=Ln+104|0,Me=Ln+72|0,Se=Ln+56|0,Zt=Ln+8|0,ct=Ln,Pe=(t[2279]|0)+1|0,t[2279]=Pe,Er=e+984|0,((c[Er>>0]|0)!=0?(t[e+512>>2]|0)!=(t[2278]|0):0)?Ge=4:(t[e+516>>2]|0)==(u|0)?Pr=0:Ge=4,(Ge|0)==4&&(t[e+520>>2]=0,t[e+924>>2]=-1,t[e+928>>2]=-1,T[e+932>>2]=w(-1),T[e+936>>2]=w(-1),Pr=1);e:do if(t[e+964>>2]|0)if(ge=w(Kt(e,2,h)),Ze=w(Kt(e,0,h)),I=e+916|0,ss=w(T[I>>2]),ls=w(T[e+920>>2]),uu=w(T[e+932>>2]),to(l,n,s,r,t[e+924>>2]|0,ss,t[e+928>>2]|0,ls,uu,w(T[e+936>>2]),ge,Ze,k)|0)Ge=22;else if(be=t[e+520>>2]|0,!be)Ge=21;else for(K=0;;){if(I=e+524+(K*24|0)|0,uu=w(T[I>>2]),ls=w(T[e+524+(K*24|0)+4>>2]),ss=w(T[e+524+(K*24|0)+16>>2]),to(l,n,s,r,t[e+524+(K*24|0)+8>>2]|0,uu,t[e+524+(K*24|0)+12>>2]|0,ls,ss,w(T[e+524+(K*24|0)+20>>2]),ge,Ze,k)|0){Ge=22;break e}if(K=K+1|0,K>>>0>=be>>>0){Ge=21;break}}else{if(S){if(I=e+916|0,!(Ci(w(T[I>>2]),n)|0)){Ge=21;break}if(!(Ci(w(T[e+920>>2]),r)|0)){Ge=21;break}if((t[e+924>>2]|0)!=(l|0)){Ge=21;break}I=(t[e+928>>2]|0)==(s|0)?I:0,Ge=22;break}if(be=t[e+520>>2]|0,!be)Ge=21;else for(K=0;;){if(I=e+524+(K*24|0)|0,((Ci(w(T[I>>2]),n)|0?Ci(w(T[e+524+(K*24|0)+4>>2]),r)|0:0)?(t[e+524+(K*24|0)+8>>2]|0)==(l|0):0)?(t[e+524+(K*24|0)+12>>2]|0)==(s|0):0){Ge=22;break e}if(K=K+1|0,K>>>0>=be>>>0){Ge=21;break}}}while(0);do if((Ge|0)==21)c[11697]|0?(I=0,Ge=28):(I=0,Ge=31);else if((Ge|0)==22){if(K=(c[11697]|0)!=0,!((I|0)!=0&(Pr^1)))if(K){Ge=28;break}else{Ge=31;break}Se=I+16|0,t[e+908>>2]=t[Se>>2],be=I+20|0,t[e+912>>2]=t[be>>2],(c[11698]|0)==0|K^1||(t[ct>>2]=Wr(Pe)|0,t[ct+4>>2]=Pe,pr(e,4,2972,ct),K=t[e+972>>2]|0,K|0&&P1[K&127](e),l=xn(l,S)|0,s=xn(s,S)|0,ta=+w(T[Se>>2]),as=+w(T[be>>2]),t[Zt>>2]=l,t[Zt+4>>2]=s,B[Zt+8>>3]=+n,B[Zt+16>>3]=+r,B[Zt+24>>3]=ta,B[Zt+32>>3]=as,t[Zt+40>>2]=L,pr(e,4,2989,Zt))}while(0);return(Ge|0)==28&&(K=Wr(Pe)|0,t[Se>>2]=K,t[Se+4>>2]=Pe,t[Se+8>>2]=Pr?3047:11699,pr(e,4,3038,Se),K=t[e+972>>2]|0,K|0&&P1[K&127](e),Zt=xn(l,S)|0,Ge=xn(s,S)|0,t[Me>>2]=Zt,t[Me+4>>2]=Ge,B[Me+8>>3]=+n,B[Me+16>>3]=+r,t[Me+24>>2]=L,pr(e,4,3049,Me),Ge=31),(Ge|0)==31&&(gu(e,n,r,u,l,s,h,D,S,k),c[11697]|0&&(K=t[2279]|0,Zt=Wr(K)|0,t[Br>>2]=Zt,t[Br+4>>2]=K,t[Br+8>>2]=Pr?3047:11699,pr(e,4,3083,Br),K=t[e+972>>2]|0,K|0&&P1[K&127](e),Zt=xn(l,S)|0,Br=xn(s,S)|0,as=+w(T[e+908>>2]),ta=+w(T[e+912>>2]),t[In>>2]=Zt,t[In+4>>2]=Br,B[In+8>>3]=as,B[In+16>>3]=ta,t[In+24>>2]=L,pr(e,4,3092,In)),t[e+516>>2]=u,I||(K=e+520|0,I=t[K>>2]|0,(I|0)==16&&(c[11697]|0&&pr(e,4,3124,yn),t[K>>2]=0,I=0),S?I=e+916|0:(t[K>>2]=I+1,I=e+524+(I*24|0)|0),T[I>>2]=n,T[I+4>>2]=r,t[I+8>>2]=l,t[I+12>>2]=s,t[I+16>>2]=t[e+908>>2],t[I+20>>2]=t[e+912>>2],I=0)),S&&(t[e+416>>2]=t[e+908>>2],t[e+420>>2]=t[e+912>>2],c[e+985>>0]=1,c[Er>>0]=0),t[2279]=(t[2279]|0)+-1,t[e+512>>2]=t[2278],m=Ln,Pr|(I|0)==0|0}function Kt(e,n,r){e=e|0,n=n|0,r=w(r);var u=Tt;return u=w(zi(e,n,r)),w(u+w(R0(e,n,r)))}function pr(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0;s=m,m=m+16|0,l=s,t[l>>2]=u,e?u=t[e+976>>2]|0:u=0,Hs(u,e,n,r,l),m=s}function Wr(e){return e=e|0,(e>>>0>60?3201:3201+(60-e)|0)|0}function xn(e,n){e=e|0,n=n|0;var r=0,u=0,l=0;return l=m,m=m+32|0,r=l+12|0,u=l,t[r>>2]=t[254],t[r+4>>2]=t[255],t[r+8>>2]=t[256],t[u>>2]=t[257],t[u+4>>2]=t[258],t[u+8>>2]=t[259],(e|0)>2?e=11699:e=t[(n?u:r)+(e<<2)>>2]|0,m=l,e|0}function gu(e,n,r,u,l,s,h,D,S,L){e=e|0,n=w(n),r=w(r),u=u|0,l=l|0,s=s|0,h=w(h),D=w(D),S=S|0,L=L|0;var k=0,I=0,K=0,be=0,Se=Tt,ge=Tt,Ze=Tt,Ge=Tt,ct=Tt,Me=Tt,Pe=Tt,Zt=0,Br=0,In=0,yn=Tt,Er=Tt,Pr=0,Ln=Tt,uu=0,ls=0,ss=0,as=0,ta=0,r2=0,i2=0,of=0,u2=0,Pc=0,Ic=0,o2=0,l2=0,s2=0,vi=0,lf=0,a2=0,Kf=0,f2=Tt,c2=Tt,bc=Tt,Bc=Tt,Xf=Tt,ql=0,Fa=0,Ns=0,sf=0,b1=0,B1=Tt,Uc=Tt,U1=Tt,j1=Tt,Wl=Tt,El=Tt,af=0,vu=Tt,z1=Tt,fs=Tt,Qf=Tt,cs=Tt,Jf=Tt,H1=0,q1=0,Zf=Tt,Vl=Tt,ff=0,W1=0,V1=0,G1=0,Tr=Tt,Bu=0,Dl=0,ds=0,Gl=0,Or=0,Bn=0,cf=0,mn=Tt,Y1=0,f0=0;cf=m,m=m+16|0,ql=cf+12|0,Fa=cf+8|0,Ns=cf+4|0,sf=cf,qu(e,(l|0)==0|(Le(n)|0)^1,3326),qu(e,(s|0)==0|(Le(r)|0)^1,3406),Dl=xl(e,u)|0,t[e+496>>2]=Dl,Or=B0(2,Dl)|0,Bn=B0(0,Dl)|0,T[e+440>>2]=w(zi(e,Or,h)),T[e+444>>2]=w(R0(e,Or,h)),T[e+428>>2]=w(zi(e,Bn,h)),T[e+436>>2]=w(R0(e,Bn,h)),T[e+464>>2]=w(O0(e,Or)),T[e+468>>2]=w(vo(e,Or)),T[e+452>>2]=w(O0(e,Bn)),T[e+460>>2]=w(vo(e,Bn)),T[e+488>>2]=w(Pu(e,Or,h)),T[e+492>>2]=w(Zu(e,Or,h)),T[e+476>>2]=w(Pu(e,Bn,h)),T[e+484>>2]=w(Zu(e,Bn,h));do if(t[e+964>>2]|0)ts(e,n,r,l,s,h,D);else{if(ds=e+948|0,Gl=(t[e+952>>2]|0)-(t[ds>>2]|0)>>2,!Gl){Es(e,n,r,l,s,h,D);break}if(S?0:fa(e,n,r,l,s,h,D)|0)break;gs(e),lf=e+508|0,c[lf>>0]=0,Or=B0(t[e+4>>2]|0,Dl)|0,Bn=_f(Or,Dl)|0,Bu=Hi(Or)|0,a2=t[e+8>>2]|0,W1=e+28|0,Kf=(t[W1>>2]|0)!=0,cs=Bu?h:D,Zf=Bu?D:h,f2=w($u(e,Or,h)),c2=w(Ds(e,Or,h)),Se=w($u(e,Bn,h)),Jf=w(Ar(e,Or,h)),Vl=w(Ar(e,Bn,h)),In=Bu?l:s,ff=Bu?s:l,Tr=Bu?Jf:Vl,ct=Bu?Vl:Jf,Qf=w(Kt(e,2,h)),Ge=w(Kt(e,0,h)),ge=w(w(An(e+364|0,h))-Tr),Ze=w(w(An(e+380|0,h))-Tr),Me=w(w(An(e+372|0,D))-ct),Pe=w(w(An(e+388|0,D))-ct),bc=Bu?ge:Me,Bc=Bu?Ze:Pe,Qf=w(n-Qf),n=w(Qf-Tr),Le(n)|0?Tr=n:Tr=w(Au(w(Qp(n,Ze)),ge)),z1=w(r-Ge),n=w(z1-ct),Le(n)|0?fs=n:fs=w(Au(w(Qp(n,Pe)),Me)),ge=Bu?Tr:fs,vu=Bu?fs:Tr;e:do if((In|0)==1)for(u=0,I=0;;){if(k=Ti(e,I)|0,!u)(w(nu(k))>w(0)?w(cu(k))>w(0):0)?u=k:u=0;else if(no(k)|0){be=0;break e}if(I=I+1|0,I>>>0>=Gl>>>0){be=u;break}}else be=0;while(0);Zt=be+500|0,Br=be+504|0,u=0,k=0,n=w(0),K=0;do{if(I=t[(t[ds>>2]|0)+(K<<2)>>2]|0,(t[I+36>>2]|0)==1)Fi(I),c[I+985>>0]=1,c[I+984>>0]=0;else{Jr(I),S&&x0(I,xl(I,Dl)|0,ge,vu,Tr);do if((t[I+24>>2]|0)!=1)if((I|0)==(be|0)){t[Zt>>2]=t[2278],T[Br>>2]=w(0);break}else{ni(e,I,Tr,l,fs,Tr,fs,s,Dl,L);break}else k|0&&(t[k+960>>2]=I),t[I+960>>2]=0,k=I,u=(u|0)==0?I:u;while(0);El=w(T[I+504>>2]),n=w(n+w(El+w(Kt(I,Or,Tr))))}K=K+1|0}while((K|0)!=(Gl|0));for(ss=n>ge,af=Kf&((In|0)==2&ss)?1:In,uu=(ff|0)==1,ta=uu&(S^1),r2=(af|0)==1,i2=(af|0)==2,of=976+(Or<<2)|0,u2=(ff|2|0)==2,s2=uu&(Kf^1),Pc=1040+(Bn<<2)|0,Ic=1040+(Or<<2)|0,o2=976+(Bn<<2)|0,l2=(ff|0)!=1,ss=Kf&((In|0)!=0&ss),ls=e+976|0,uu=uu^1,n=ge,Pr=0,as=0,El=w(0),Xf=w(0);;){e:do if(Pr>>>0>>0)for(Br=t[ds>>2]|0,K=0,Pe=w(0),Me=w(0),Ze=w(0),ge=w(0),I=0,k=0,be=Pr;;){if(Zt=t[Br+(be<<2)>>2]|0,(t[Zt+36>>2]|0)!=1?(t[Zt+940>>2]=as,(t[Zt+24>>2]|0)!=1):0){if(Ge=w(Kt(Zt,Or,Tr)),vi=t[of>>2]|0,r=w(An(Zt+380+(vi<<3)|0,cs)),ct=w(T[Zt+504>>2]),r=w(Qp(r,ct)),r=w(Au(w(An(Zt+364+(vi<<3)|0,cs)),r)),Kf&(K|0)!=0&w(Ge+w(Me+r))>n){s=K,Ge=Pe,In=be;break e}Ge=w(Ge+r),r=w(Me+Ge),Ge=w(Pe+Ge),no(Zt)|0&&(Ze=w(Ze+w(nu(Zt))),ge=w(ge-w(ct*w(cu(Zt))))),k|0&&(t[k+960>>2]=Zt),t[Zt+960>>2]=0,K=K+1|0,k=Zt,I=(I|0)==0?Zt:I}else Ge=Pe,r=Me;if(be=be+1|0,be>>>0>>0)Pe=Ge,Me=r;else{s=K,In=be;break}}else s=0,Ge=w(0),Ze=w(0),ge=w(0),I=0,In=Pr;while(0);vi=Ze>w(0)&Zew(0)&geBc&((Le(Bc)|0)^1))n=Bc,vi=51;else if(c[(t[ls>>2]|0)+3>>0]|0)vi=51;else{if(yn!=w(0)?w(nu(e))!=w(0):0){vi=53;break}n=Ge,vi=53}while(0);if((vi|0)==51&&(vi=0,Le(n)|0?vi=53:(Er=w(n-Ge),Ln=n)),(vi|0)==53&&(vi=0,Ge>2]|0,be=Erw(0),Me=w(Er/yn),Ze=w(0),Ge=w(0),n=w(0),k=I;do r=w(An(k+380+(K<<3)|0,cs)),ge=w(An(k+364+(K<<3)|0,cs)),ge=w(Qp(r,w(Au(ge,w(T[k+504>>2]))))),be?(r=w(ge*w(cu(k))),(r!=w(-0)?(mn=w(ge-w(ct*r)),B1=w(Kn(k,Or,mn,Ln,Tr)),mn!=B1):0)&&(Ze=w(Ze-w(B1-ge)),n=w(n+r))):((Zt?(Uc=w(nu(k)),Uc!=w(0)):0)?(mn=w(ge+w(Me*Uc)),U1=w(Kn(k,Or,mn,Ln,Tr)),mn!=U1):0)&&(Ze=w(Ze-w(U1-ge)),Ge=w(Ge-Uc)),k=t[k+960>>2]|0;while((k|0)!=0);if(n=w(Pe+n),ge=w(Er+Ze),b1)n=w(0);else{ct=w(yn+Ge),be=t[of>>2]|0,Zt=gew(0),ct=w(ge/ct),n=w(0);do{mn=w(An(I+380+(be<<3)|0,cs)),Ze=w(An(I+364+(be<<3)|0,cs)),Ze=w(Qp(mn,w(Au(Ze,w(T[I+504>>2]))))),Zt?(mn=w(Ze*w(cu(I))),ge=w(-mn),mn!=w(-0)?(mn=w(Me*ge),ge=w(Kn(I,Or,w(Ze+(Br?ge:mn)),Ln,Tr))):ge=Ze):(K?(j1=w(nu(I)),j1!=w(0)):0)?ge=w(Kn(I,Or,w(Ze+w(ct*j1)),Ln,Tr)):ge=Ze,n=w(n-w(ge-Ze)),Ge=w(Kt(I,Or,Tr)),r=w(Kt(I,Bn,Tr)),ge=w(ge+Ge),T[Fa>>2]=ge,t[sf>>2]=1,Ze=w(T[I+396>>2]);e:do if(Le(Ze)|0){k=Le(vu)|0;do if(!k){if(ss|(Wu(I,Bn,vu)|0|uu)||(e0(e,I)|0)!=4||(t[(_0(I,Bn)|0)+4>>2]|0)==3||(t[(E0(I,Bn)|0)+4>>2]|0)==3)break;T[ql>>2]=vu,t[Ns>>2]=1;break e}while(0);if(Wu(I,Bn,vu)|0){k=t[I+992+(t[o2>>2]<<2)>>2]|0,mn=w(r+w(An(k,vu))),T[ql>>2]=mn,k=l2&(t[k+4>>2]|0)==2,t[Ns>>2]=((Le(mn)|0|k)^1)&1;break}else{T[ql>>2]=vu,t[Ns>>2]=k?0:2;break}}else mn=w(ge-Ge),yn=w(mn/Ze),mn=w(Ze*mn),t[Ns>>2]=1,T[ql>>2]=w(r+(Bu?yn:mn));while(0);Fn(I,Or,Ln,Tr,sf,Fa),Fn(I,Bn,vu,Tr,Ns,ql);do if(Wu(I,Bn,vu)|0?0:(e0(e,I)|0)==4){if((t[(_0(I,Bn)|0)+4>>2]|0)==3){k=0;break}k=(t[(E0(I,Bn)|0)+4>>2]|0)!=3}else k=0;while(0);mn=w(T[Fa>>2]),yn=w(T[ql>>2]),Y1=t[sf>>2]|0,f0=t[Ns>>2]|0,Yt(I,Bu?mn:yn,Bu?yn:mn,Dl,Bu?Y1:f0,Bu?f0:Y1,Tr,fs,S&(k^1),3488,L)|0,c[lf>>0]=c[lf>>0]|c[I+508>>0],I=t[I+960>>2]|0}while((I|0)!=0)}}else n=w(0);if(n=w(Er+n),f0=n>0]=f0|O[lf>>0],i2&n>w(0)?(k=t[of>>2]|0,((t[e+364+(k<<3)+4>>2]|0)!=0?(Wl=w(An(e+364+(k<<3)|0,cs)),Wl>=w(0)):0)?ge=w(Au(w(0),w(Wl-w(Ln-n)))):ge=w(0)):ge=n,Zt=Pr>>>0>>0,Zt){be=t[ds>>2]|0,K=Pr,k=0;do I=t[be+(K<<2)>>2]|0,t[I+24>>2]|0||(k=((t[(_0(I,Or)|0)+4>>2]|0)==3&1)+k|0,k=k+((t[(E0(I,Or)|0)+4>>2]|0)==3&1)|0),K=K+1|0;while((K|0)!=(In|0));k?(Ge=w(0),r=w(0)):vi=101}else vi=101;e:do if((vi|0)==101)switch(vi=0,a2|0){case 1:{k=0,Ge=w(ge*w(.5)),r=w(0);break e}case 2:{k=0,Ge=ge,r=w(0);break e}case 3:{if(s>>>0<=1){k=0,Ge=w(0),r=w(0);break e}r=w((s+-1|0)>>>0),k=0,Ge=w(0),r=w(w(Au(ge,w(0)))/r);break e}case 5:{r=w(ge/w((s+1|0)>>>0)),k=0,Ge=r;break e}case 4:{r=w(ge/w(s>>>0)),k=0,Ge=w(r*w(.5));break e}default:{k=0,Ge=w(0),r=w(0);break e}}while(0);if(n=w(f2+Ge),Zt){Ze=w(ge/w(k|0)),K=t[ds>>2]|0,I=Pr,ge=w(0);do{k=t[K+(I<<2)>>2]|0;e:do if((t[k+36>>2]|0)!=1){switch(t[k+24>>2]|0){case 1:{if(ae(k,Or)|0){if(!S)break e;mn=w(re(k,Or,Ln)),mn=w(mn+w(O0(e,Or))),mn=w(mn+w(zi(k,Or,Tr))),T[k+400+(t[Ic>>2]<<2)>>2]=mn;break e}break}case 0:if(f0=(t[(_0(k,Or)|0)+4>>2]|0)==3,mn=w(Ze+n),n=f0?mn:n,S&&(f0=k+400+(t[Ic>>2]<<2)|0,T[f0>>2]=w(n+w(T[f0>>2]))),f0=(t[(E0(k,Or)|0)+4>>2]|0)==3,mn=w(Ze+n),n=f0?mn:n,ta){mn=w(r+w(Kt(k,Or,Tr))),ge=vu,n=w(n+w(mn+w(T[k+504>>2])));break e}else{n=w(n+w(r+w(Fe(k,Or,Tr)))),ge=w(Au(ge,w(Fe(k,Bn,Tr))));break e}default:}S&&(mn=w(Ge+w(O0(e,Or))),f0=k+400+(t[Ic>>2]<<2)|0,T[f0>>2]=w(mn+w(T[f0>>2])))}while(0);I=I+1|0}while((I|0)!=(In|0))}else ge=w(0);if(r=w(c2+n),u2?Ge=w(w(Kn(e,Bn,w(Vl+ge),Zf,h))-Vl):Ge=vu,Ze=w(w(Kn(e,Bn,w(Vl+(s2?vu:ge)),Zf,h))-Vl),Zt&S){I=Pr;do{K=t[(t[ds>>2]|0)+(I<<2)>>2]|0;do if((t[K+36>>2]|0)!=1){if((t[K+24>>2]|0)==1){if(ae(K,Bn)|0){if(mn=w(re(K,Bn,vu)),mn=w(mn+w(O0(e,Bn))),mn=w(mn+w(zi(K,Bn,Tr))),k=t[Pc>>2]|0,T[K+400+(k<<2)>>2]=mn,!(Le(mn)|0))break}else k=t[Pc>>2]|0;mn=w(O0(e,Bn)),T[K+400+(k<<2)>>2]=w(mn+w(zi(K,Bn,Tr)));break}k=e0(e,K)|0;do if((k|0)==4){if((t[(_0(K,Bn)|0)+4>>2]|0)==3){vi=139;break}if((t[(E0(K,Bn)|0)+4>>2]|0)==3){vi=139;break}if(Wu(K,Bn,vu)|0){n=Se;break}Y1=t[K+908+(t[of>>2]<<2)>>2]|0,t[ql>>2]=Y1,n=w(T[K+396>>2]),f0=Le(n)|0,ge=(t[q>>2]=Y1,w(T[q>>2])),f0?n=Ze:(Er=w(Kt(K,Bn,Tr)),mn=w(ge/n),n=w(n*ge),n=w(Er+(Bu?mn:n))),T[Fa>>2]=n,T[ql>>2]=w(w(Kt(K,Or,Tr))+ge),t[Ns>>2]=1,t[sf>>2]=1,Fn(K,Or,Ln,Tr,Ns,ql),Fn(K,Bn,vu,Tr,sf,Fa),n=w(T[ql>>2]),Er=w(T[Fa>>2]),mn=Bu?n:Er,n=Bu?Er:n,f0=((Le(mn)|0)^1)&1,Yt(K,mn,n,Dl,f0,((Le(n)|0)^1)&1,Tr,fs,1,3493,L)|0,n=Se}else vi=139;while(0);e:do if((vi|0)==139){vi=0,n=w(Ge-w(Fe(K,Bn,Tr)));do if((t[(_0(K,Bn)|0)+4>>2]|0)==3){if((t[(E0(K,Bn)|0)+4>>2]|0)!=3)break;n=w(Se+w(Au(w(0),w(n*w(.5)))));break e}while(0);if((t[(E0(K,Bn)|0)+4>>2]|0)==3){n=Se;break}if((t[(_0(K,Bn)|0)+4>>2]|0)==3){n=w(Se+w(Au(w(0),n)));break}switch(k|0){case 1:{n=Se;break e}case 2:{n=w(Se+w(n*w(.5)));break e}default:{n=w(Se+n);break e}}}while(0);mn=w(El+n),f0=K+400+(t[Pc>>2]<<2)|0,T[f0>>2]=w(mn+w(T[f0>>2]))}while(0);I=I+1|0}while((I|0)!=(In|0))}if(El=w(El+Ze),Xf=w(Au(Xf,r)),s=as+1|0,In>>>0>=Gl>>>0)break;n=Ln,Pr=In,as=s}do if(S){if(k=s>>>0>1,k?0:!(Re(e)|0))break;if(!(Le(vu)|0)){n=w(vu-El);e:do switch(t[e+12>>2]|0){case 3:{Se=w(Se+n),Me=w(0);break}case 2:{Se=w(Se+w(n*w(.5))),Me=w(0);break}case 4:{vu>El?Me=w(n/w(s>>>0)):Me=w(0);break}case 7:if(vu>El){Se=w(Se+w(n/w(s<<1>>>0))),Me=w(n/w(s>>>0)),Me=k?Me:w(0);break e}else{Se=w(Se+w(n*w(.5))),Me=w(0);break e}case 6:{Me=w(n/w(as>>>0)),Me=vu>El&k?Me:w(0);break}default:Me=w(0)}while(0);if(s|0)for(Zt=1040+(Bn<<2)|0,Br=976+(Bn<<2)|0,be=0,I=0;;){e:do if(I>>>0>>0)for(ge=w(0),Ze=w(0),n=w(0),K=I;;){k=t[(t[ds>>2]|0)+(K<<2)>>2]|0;do if((t[k+36>>2]|0)!=1?(t[k+24>>2]|0)==0:0){if((t[k+940>>2]|0)!=(be|0))break e;if(st(k,Bn)|0&&(mn=w(T[k+908+(t[Br>>2]<<2)>>2]),n=w(Au(n,w(mn+w(Kt(k,Bn,Tr)))))),(e0(e,k)|0)!=5)break;Wl=w(mt(k)),Wl=w(Wl+w(zi(k,0,Tr))),mn=w(T[k+912>>2]),mn=w(w(mn+w(Kt(k,0,Tr)))-Wl),Wl=w(Au(Ze,Wl)),mn=w(Au(ge,mn)),ge=mn,Ze=Wl,n=w(Au(n,w(Wl+mn)))}while(0);if(k=K+1|0,k>>>0>>0)K=k;else{K=k;break}}else Ze=w(0),n=w(0),K=I;while(0);if(ct=w(Me+n),r=Se,Se=w(Se+ct),I>>>0>>0){Ge=w(r+Ze),k=I;do{I=t[(t[ds>>2]|0)+(k<<2)>>2]|0;e:do if((t[I+36>>2]|0)!=1?(t[I+24>>2]|0)==0:0)switch(e0(e,I)|0){case 1:{mn=w(r+w(zi(I,Bn,Tr))),T[I+400+(t[Zt>>2]<<2)>>2]=mn;break e}case 3:{mn=w(w(Se-w(R0(I,Bn,Tr)))-w(T[I+908+(t[Br>>2]<<2)>>2])),T[I+400+(t[Zt>>2]<<2)>>2]=mn;break e}case 2:{mn=w(r+w(w(ct-w(T[I+908+(t[Br>>2]<<2)>>2]))*w(.5))),T[I+400+(t[Zt>>2]<<2)>>2]=mn;break e}case 4:{if(mn=w(r+w(zi(I,Bn,Tr))),T[I+400+(t[Zt>>2]<<2)>>2]=mn,Wu(I,Bn,vu)|0||(Bu?(ge=w(T[I+908>>2]),n=w(ge+w(Kt(I,Or,Tr))),Ze=ct):(Ze=w(T[I+912>>2]),Ze=w(Ze+w(Kt(I,Bn,Tr))),n=ct,ge=w(T[I+908>>2])),Ci(n,ge)|0?Ci(Ze,w(T[I+912>>2]))|0:0))break e;Yt(I,n,Ze,Dl,1,1,Tr,fs,1,3501,L)|0;break e}case 5:{T[I+404>>2]=w(w(Ge-w(mt(I)))+w(re(I,0,vu)));break e}default:break e}while(0);k=k+1|0}while((k|0)!=(K|0))}if(be=be+1|0,(be|0)==(s|0))break;I=K}}}while(0);if(T[e+908>>2]=w(Kn(e,2,Qf,h,h)),T[e+912>>2]=w(Kn(e,0,z1,D,h)),((af|0)!=0?(H1=t[e+32>>2]|0,q1=(af|0)==2,!(q1&(H1|0)!=2)):0)?q1&(H1|0)==2&&(n=w(Jf+Ln),n=w(Au(w(Qp(n,w(Jt(e,Or,Xf,cs)))),Jf)),vi=198):(n=w(Kn(e,Or,Xf,cs,h)),vi=198),(vi|0)==198&&(T[e+908+(t[976+(Or<<2)>>2]<<2)>>2]=n),((ff|0)!=0?(V1=t[e+32>>2]|0,G1=(ff|0)==2,!(G1&(V1|0)!=2)):0)?G1&(V1|0)==2&&(n=w(Vl+vu),n=w(Au(w(Qp(n,w(Jt(e,Bn,w(Vl+El),Zf)))),Vl)),vi=204):(n=w(Kn(e,Bn,w(Vl+El),Zf,h)),vi=204),(vi|0)==204&&(T[e+908+(t[976+(Bn<<2)>>2]<<2)>>2]=n),S){if((t[W1>>2]|0)==2){I=976+(Bn<<2)|0,K=1040+(Bn<<2)|0,k=0;do be=Ti(e,k)|0,t[be+24>>2]|0||(Y1=t[I>>2]|0,mn=w(T[e+908+(Y1<<2)>>2]),f0=be+400+(t[K>>2]<<2)|0,mn=w(mn-w(T[f0>>2])),T[f0>>2]=w(mn-w(T[be+908+(Y1<<2)>>2]))),k=k+1|0;while((k|0)!=(Gl|0))}if(u|0){k=Bu?af:l;do On(e,u,Tr,k,fs,Dl,L),u=t[u+960>>2]|0;while((u|0)!=0)}if(k=(Or|2|0)==3,I=(Bn|2|0)==3,k|I){u=0;do K=t[(t[ds>>2]|0)+(u<<2)>>2]|0,(t[K+36>>2]|0)!=1&&(k&&Sn(e,K,Or),I&&Sn(e,K,Bn)),u=u+1|0;while((u|0)!=(Gl|0))}}}while(0);m=cf}function Ju(e,n){e=e|0,n=w(n);var r=0;Cn(e,n>=w(0),3147),r=n==w(0),T[e+4>>2]=r?w(0):n}function ti(e,n,r,u){e=e|0,n=w(n),r=w(r),u=u|0;var l=Tt,s=Tt,h=0,D=0,S=0;t[2278]=(t[2278]|0)+1,Jr(e),Wu(e,2,n)|0?(l=w(An(t[e+992>>2]|0,n)),S=1,l=w(l+w(Kt(e,2,n)))):(l=w(An(e+380|0,n)),l>=w(0)?S=2:(S=((Le(n)|0)^1)&1,l=n)),Wu(e,0,r)|0?(s=w(An(t[e+996>>2]|0,r)),D=1,s=w(s+w(Kt(e,0,n)))):(s=w(An(e+388|0,r)),s>=w(0)?D=2:(D=((Le(r)|0)^1)&1,s=r)),h=e+976|0,(Yt(e,l,s,u,S,D,n,r,1,3189,t[h>>2]|0)|0?(x0(e,t[e+496>>2]|0,n,r,n),Fu(e,w(T[(t[h>>2]|0)+4>>2]),w(0),w(0)),c[11696]|0):0)&&gf(e,7)}function Jr(e){e=e|0;var n=0,r=0,u=0,l=0,s=0,h=0,D=0,S=0,L=0,k=0;D=m,m=m+32|0,h=D+24|0,s=D+16|0,u=D+8|0,l=D,r=0;do n=e+380+(r<<3)|0,((t[e+380+(r<<3)+4>>2]|0)!=0?(S=n,L=t[S+4>>2]|0,k=u,t[k>>2]=t[S>>2],t[k+4>>2]=L,k=e+364+(r<<3)|0,L=t[k+4>>2]|0,S=l,t[S>>2]=t[k>>2],t[S+4>>2]=L,t[s>>2]=t[u>>2],t[s+4>>2]=t[u+4>>2],t[h>>2]=t[l>>2],t[h+4>>2]=t[l+4>>2],Bi(s,h)|0):0)||(n=e+348+(r<<3)|0),t[e+992+(r<<2)>>2]=n,r=r+1|0;while((r|0)!=2);m=D}function Wu(e,n,r){e=e|0,n=n|0,r=w(r);var u=0;switch(e=t[e+992+(t[976+(n<<2)>>2]<<2)>>2]|0,t[e+4>>2]|0){case 0:case 3:{e=0;break}case 1:{w(T[e>>2])>2])>2]|0){case 2:{n=w(w(w(T[e>>2])*n)/w(100));break}case 1:{n=w(T[e>>2]);break}default:n=w(ie)}return w(n)}function x0(e,n,r,u,l){e=e|0,n=n|0,r=w(r),u=w(u),l=w(l);var s=0,h=Tt;n=t[e+944>>2]|0?n:1,s=B0(t[e+4>>2]|0,n)|0,n=_f(s,n)|0,r=w(Rr(e,s,r)),u=w(Rr(e,n,u)),h=w(r+w(zi(e,s,l))),T[e+400+(t[1040+(s<<2)>>2]<<2)>>2]=h,r=w(r+w(R0(e,s,l))),T[e+400+(t[1e3+(s<<2)>>2]<<2)>>2]=r,r=w(u+w(zi(e,n,l))),T[e+400+(t[1040+(n<<2)>>2]<<2)>>2]=r,l=w(u+w(R0(e,n,l))),T[e+400+(t[1e3+(n<<2)>>2]<<2)>>2]=l}function Fu(e,n,r,u){e=e|0,n=w(n),r=w(r),u=w(u);var l=0,s=0,h=Tt,D=Tt,S=0,L=0,k=Tt,I=0,K=Tt,be=Tt,Se=Tt,ge=Tt;if(n!=w(0)&&(l=e+400|0,ge=w(T[l>>2]),s=e+404|0,Se=w(T[s>>2]),I=e+416|0,be=w(T[I>>2]),L=e+420|0,h=w(T[L>>2]),K=w(ge+r),k=w(Se+u),u=w(K+be),D=w(k+h),S=(t[e+988>>2]|0)==1,T[l>>2]=w(eo(ge,n,0,S)),T[s>>2]=w(eo(Se,n,0,S)),r=w(XE(w(be*n),w(1))),Ci(r,w(0))|0?s=0:s=(Ci(r,w(1))|0)^1,r=w(XE(w(h*n),w(1))),Ci(r,w(0))|0?l=0:l=(Ci(r,w(1))|0)^1,ge=w(eo(u,n,S&s,S&(s^1))),T[I>>2]=w(ge-w(eo(K,n,0,S))),ge=w(eo(D,n,S&l,S&(l^1))),T[L>>2]=w(ge-w(eo(k,n,0,S))),s=(t[e+952>>2]|0)-(t[e+948>>2]|0)>>2,s|0)){l=0;do Fu(Ti(e,l)|0,n,K,k),l=l+1|0;while((l|0)!=(s|0))}}function li(e,n,r,u,l){switch(e=e|0,n=n|0,r=r|0,u=u|0,l=l|0,r|0){case 5:case 0:{e=I8(t[489]|0,u,l)|0;break}default:e=QF(u,l)|0}return e|0}function Cl(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0;l=m,m=m+16|0,s=l,t[s>>2]=u,Hs(e,0,n,r,s),m=l}function Hs(e,n,r,u,l){if(e=e|0,n=n|0,r=r|0,u=u|0,l=l|0,e=e|0?e:956,rS[t[e+8>>2]&1](e,n,r,u,l)|0,(r|0)==5)$n();else return}function Vu(e,n,r){e=e|0,n=n|0,r=r|0,c[e+n>>0]=r&1}function aa(e,n){e=e|0,n=n|0;var r=0,u=0;t[e>>2]=0,t[e+4>>2]=0,t[e+8>>2]=0,r=n+4|0,u=(t[r>>2]|0)-(t[n>>2]|0)>>2,u|0&&(Xi(e,u),qs(e,t[n>>2]|0,t[r>>2]|0,u))}function Xi(e,n){e=e|0,n=n|0;var r=0;if((A0(e)|0)>>>0>>0&&hi(e),n>>>0>1073741823)$n();else{r=pn(n<<2)|0,t[e+4>>2]=r,t[e>>2]=r,t[e+8>>2]=r+(n<<2);return}}function qs(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0,u=e+4|0,e=r-n|0,(e|0)>0&&(_r(t[u>>2]|0,n|0,e|0)|0,t[u>>2]=(t[u>>2]|0)+(e>>>2<<2))}function A0(e){return e=e|0,1073741823}function zi(e,n,r){return e=e|0,n=n|0,r=w(r),(Hi(n)|0?(t[e+96>>2]|0)!=0:0)?e=e+92|0:e=pt(e+60|0,t[1040+(n<<2)>>2]|0,992)|0,w(il(e,r))}function R0(e,n,r){return e=e|0,n=n|0,r=w(r),(Hi(n)|0?(t[e+104>>2]|0)!=0:0)?e=e+100|0:e=pt(e+60|0,t[1e3+(n<<2)>>2]|0,992)|0,w(il(e,r))}function Hi(e){return e=e|0,(e|1|0)==3|0}function il(e,n){return e=e|0,n=w(n),(t[e+4>>2]|0)==3?n=w(0):n=w(An(e,n)),w(n)}function xl(e,n){return e=e|0,n=n|0,e=t[e>>2]|0,((e|0)==0?(n|0)>1?n:1:e)|0}function B0(e,n){e=e|0,n=n|0;var r=0;e:do if((n|0)==2){switch(e|0){case 2:{e=3;break e}case 3:break;default:{r=4;break e}}e=2}else r=4;while(0);return e|0}function O0(e,n){e=e|0,n=n|0;var r=Tt;return((Hi(n)|0?(t[e+312>>2]|0)!=0:0)?(r=w(T[e+308>>2]),r>=w(0)):0)||(r=w(Au(w(T[(pt(e+276|0,t[1040+(n<<2)>>2]|0,992)|0)>>2]),w(0)))),w(r)}function vo(e,n){e=e|0,n=n|0;var r=Tt;return((Hi(n)|0?(t[e+320>>2]|0)!=0:0)?(r=w(T[e+316>>2]),r>=w(0)):0)||(r=w(Au(w(T[(pt(e+276|0,t[1e3+(n<<2)>>2]|0,992)|0)>>2]),w(0)))),w(r)}function Pu(e,n,r){e=e|0,n=n|0,r=w(r);var u=Tt;return((Hi(n)|0?(t[e+240>>2]|0)!=0:0)?(u=w(An(e+236|0,r)),u>=w(0)):0)||(u=w(Au(w(An(pt(e+204|0,t[1040+(n<<2)>>2]|0,992)|0,r)),w(0)))),w(u)}function Zu(e,n,r){e=e|0,n=n|0,r=w(r);var u=Tt;return((Hi(n)|0?(t[e+248>>2]|0)!=0:0)?(u=w(An(e+244|0,r)),u>=w(0)):0)||(u=w(Au(w(An(pt(e+204|0,t[1e3+(n<<2)>>2]|0,992)|0,r)),w(0)))),w(u)}function ts(e,n,r,u,l,s,h){e=e|0,n=w(n),r=w(r),u=u|0,l=l|0,s=w(s),h=w(h);var D=Tt,S=Tt,L=Tt,k=Tt,I=Tt,K=Tt,be=0,Se=0,ge=0;ge=m,m=m+16|0,be=ge,Se=e+964|0,qu(e,(t[Se>>2]|0)!=0,3519),D=w(Ar(e,2,n)),S=w(Ar(e,0,n)),L=w(Kt(e,2,n)),k=w(Kt(e,0,n)),Le(n)|0?I=n:I=w(Au(w(0),w(w(n-L)-D))),Le(r)|0?K=r:K=w(Au(w(0),w(w(r-k)-S))),(u|0)==1&(l|0)==1?(T[e+908>>2]=w(Kn(e,2,w(n-L),s,s)),n=w(Kn(e,0,w(r-k),h,s))):(iS[t[Se>>2]&1](be,e,I,u,K,l),I=w(D+w(T[be>>2])),K=w(n-L),T[e+908>>2]=w(Kn(e,2,(u|2|0)==2?I:K,s,s)),K=w(S+w(T[be+4>>2])),n=w(r-k),n=w(Kn(e,0,(l|2|0)==2?K:n,h,s))),T[e+912>>2]=n,m=ge}function Es(e,n,r,u,l,s,h){e=e|0,n=w(n),r=w(r),u=u|0,l=l|0,s=w(s),h=w(h);var D=Tt,S=Tt,L=Tt,k=Tt;L=w(Ar(e,2,s)),D=w(Ar(e,0,s)),k=w(Kt(e,2,s)),S=w(Kt(e,0,s)),n=w(n-k),T[e+908>>2]=w(Kn(e,2,(u|2|0)==2?L:n,s,s)),r=w(r-S),T[e+912>>2]=w(Kn(e,0,(l|2|0)==2?D:r,h,s))}function fa(e,n,r,u,l,s,h){e=e|0,n=w(n),r=w(r),u=u|0,l=l|0,s=w(s),h=w(h);var D=0,S=Tt,L=Tt;return D=(u|0)==2,((n<=w(0)&D?0:!(r<=w(0)&(l|0)==2))?!((u|0)==1&(l|0)==1):0)?e=0:(S=w(Kt(e,0,s)),L=w(Kt(e,2,s)),D=n>2]=w(Kn(e,2,D?w(0):n,s,s)),n=w(r-S),D=r>2]=w(Kn(e,0,D?w(0):n,h,s)),e=1),e|0}function _f(e,n){return e=e|0,n=n|0,_n(e)|0?e=B0(2,n)|0:e=0,e|0}function $u(e,n,r){return e=e|0,n=n|0,r=w(r),r=w(Pu(e,n,r)),w(r+w(O0(e,n)))}function Ds(e,n,r){return e=e|0,n=n|0,r=w(r),r=w(Zu(e,n,r)),w(r+w(vo(e,n)))}function Ar(e,n,r){e=e|0,n=n|0,r=w(r);var u=Tt;return u=w($u(e,n,r)),w(u+w(Ds(e,n,r)))}function no(e){return e=e|0,t[e+24>>2]|0?e=0:w(nu(e))!=w(0)?e=1:e=w(cu(e))!=w(0),e|0}function nu(e){e=e|0;var n=Tt;if(t[e+944>>2]|0){if(n=w(T[e+44>>2]),Le(n)|0)return n=w(T[e+40>>2]),e=n>w(0)&((Le(n)|0)^1),w(e?n:w(0))}else n=w(0);return w(n)}function cu(e){e=e|0;var n=Tt,r=0,u=Tt;do if(t[e+944>>2]|0){if(n=w(T[e+48>>2]),Le(n)|0){if(r=c[(t[e+976>>2]|0)+2>>0]|0,r<<24>>24==0?(u=w(T[e+40>>2]),u>24?w(1):w(0)}}else n=w(0);while(0);return w(n)}function Fi(e){e=e|0;var n=0,r=0;if(jv(e+400|0,0,540)|0,c[e+985>>0]=1,gs(e),r=Su(e)|0,r|0){n=e+948|0,e=0;do Fi(t[(t[n>>2]|0)+(e<<2)>>2]|0),e=e+1|0;while((e|0)!=(r|0))}}function ni(e,n,r,u,l,s,h,D,S,L){e=e|0,n=n|0,r=w(r),u=u|0,l=w(l),s=w(s),h=w(h),D=D|0,S=S|0,L=L|0;var k=0,I=Tt,K=0,be=0,Se=Tt,ge=Tt,Ze=0,Ge=Tt,ct=0,Me=Tt,Pe=0,Zt=0,Br=0,In=0,yn=0,Er=0,Pr=0,Ln=0,uu=0,ls=0;uu=m,m=m+16|0,Br=uu+12|0,In=uu+8|0,yn=uu+4|0,Er=uu,Ln=B0(t[e+4>>2]|0,S)|0,Pe=Hi(Ln)|0,I=w(An(Tn(n)|0,Pe?s:h)),Zt=Wu(n,2,s)|0,Pr=Wu(n,0,h)|0;do if(Le(I)|0?0:!(Le(Pe?r:l)|0)){if(k=n+504|0,!(Le(w(T[k>>2]))|0)&&(!(ir(t[n+976>>2]|0,0)|0)||(t[n+500>>2]|0)==(t[2278]|0)))break;T[k>>2]=w(Au(I,w(Ar(n,Ln,s))))}else K=7;while(0);do if((K|0)==7){if(ct=Pe^1,!(ct|Zt^1)){h=w(An(t[n+992>>2]|0,s)),T[n+504>>2]=w(Au(h,w(Ar(n,2,s))));break}if(!(Pe|Pr^1)){h=w(An(t[n+996>>2]|0,h)),T[n+504>>2]=w(Au(h,w(Ar(n,0,s))));break}T[Br>>2]=w(ie),T[In>>2]=w(ie),t[yn>>2]=0,t[Er>>2]=0,Ge=w(Kt(n,2,s)),Me=w(Kt(n,0,s)),Zt?(Se=w(Ge+w(An(t[n+992>>2]|0,s))),T[Br>>2]=Se,t[yn>>2]=1,be=1):(be=0,Se=w(ie)),Pr?(I=w(Me+w(An(t[n+996>>2]|0,h))),T[In>>2]=I,t[Er>>2]=1,k=1):(k=0,I=w(ie)),K=t[e+32>>2]|0,Pe&(K|0)==2?K=2:(Le(Se)|0?!(Le(r)|0):0)&&(T[Br>>2]=r,t[yn>>2]=2,be=2,Se=r),(((K|0)==2&ct?0:Le(I)|0)?!(Le(l)|0):0)&&(T[In>>2]=l,t[Er>>2]=2,k=2,I=l),ge=w(T[n+396>>2]),Ze=Le(ge)|0;do if(Ze)K=be;else{if((be|0)==1&ct){T[In>>2]=w(w(Se-Ge)/ge),t[Er>>2]=1,k=1,K=1;break}Pe&(k|0)==1?(T[Br>>2]=w(ge*w(I-Me)),t[yn>>2]=1,k=1,K=1):K=be}while(0);ls=Le(r)|0,be=(e0(e,n)|0)!=4,(Pe|Zt|((u|0)!=1|ls)|(be|(K|0)==1)?0:(T[Br>>2]=r,t[yn>>2]=1,!Ze))&&(T[In>>2]=w(w(r-Ge)/ge),t[Er>>2]=1,k=1),(Pr|ct|((D|0)!=1|(Le(l)|0))|(be|(k|0)==1)?0:(T[In>>2]=l,t[Er>>2]=1,!Ze))&&(T[Br>>2]=w(ge*w(l-Me)),t[yn>>2]=1),Fn(n,2,s,s,yn,Br),Fn(n,0,h,s,Er,In),r=w(T[Br>>2]),l=w(T[In>>2]),Yt(n,r,l,S,t[yn>>2]|0,t[Er>>2]|0,s,h,0,3565,L)|0,h=w(T[n+908+(t[976+(Ln<<2)>>2]<<2)>>2]),T[n+504>>2]=w(Au(h,w(Ar(n,Ln,s))))}while(0);t[n+500>>2]=t[2278],m=uu}function Kn(e,n,r,u,l){return e=e|0,n=n|0,r=w(r),u=w(u),l=w(l),u=w(Jt(e,n,r,u)),w(Au(u,w(Ar(e,n,l))))}function e0(e,n){return e=e|0,n=n|0,n=n+20|0,n=t[((t[n>>2]|0)==0?e+16|0:n)>>2]|0,((n|0)==5?_n(t[e+4>>2]|0)|0:0)&&(n=1),n|0}function _0(e,n){return e=e|0,n=n|0,(Hi(n)|0?(t[e+96>>2]|0)!=0:0)?n=4:n=t[1040+(n<<2)>>2]|0,e+60+(n<<3)|0}function E0(e,n){return e=e|0,n=n|0,(Hi(n)|0?(t[e+104>>2]|0)!=0:0)?n=5:n=t[1e3+(n<<2)>>2]|0,e+60+(n<<3)|0}function Fn(e,n,r,u,l,s){switch(e=e|0,n=n|0,r=w(r),u=w(u),l=l|0,s=s|0,r=w(An(e+380+(t[976+(n<<2)>>2]<<3)|0,r)),r=w(r+w(Kt(e,n,u))),t[l>>2]|0){case 2:case 1:{l=Le(r)|0,u=w(T[s>>2]),T[s>>2]=l|u>2]=2,T[s>>2]=r);break}default:}}function ae(e,n){return e=e|0,n=n|0,e=e+132|0,(Hi(n)|0?(t[(pt(e,4,948)|0)+4>>2]|0)!=0:0)?e=1:e=(t[(pt(e,t[1040+(n<<2)>>2]|0,948)|0)+4>>2]|0)!=0,e|0}function re(e,n,r){e=e|0,n=n|0,r=w(r);var u=0,l=0;return e=e+132|0,(Hi(n)|0?(u=pt(e,4,948)|0,(t[u+4>>2]|0)!=0):0)?l=4:(u=pt(e,t[1040+(n<<2)>>2]|0,948)|0,t[u+4>>2]|0?l=4:r=w(0)),(l|0)==4&&(r=w(An(u,r))),w(r)}function Fe(e,n,r){e=e|0,n=n|0,r=w(r);var u=Tt;return u=w(T[e+908+(t[976+(n<<2)>>2]<<2)>>2]),u=w(u+w(zi(e,n,r))),w(u+w(R0(e,n,r)))}function Re(e){e=e|0;var n=0,r=0,u=0;e:do if(_n(t[e+4>>2]|0)|0)n=0;else if((t[e+16>>2]|0)!=5)if(r=Su(e)|0,!r)n=0;else for(n=0;;){if(u=Ti(e,n)|0,(t[u+24>>2]|0)==0?(t[u+20>>2]|0)==5:0){n=1;break e}if(n=n+1|0,n>>>0>=r>>>0){n=0;break}}else n=1;while(0);return n|0}function st(e,n){e=e|0,n=n|0;var r=Tt;return r=w(T[e+908+(t[976+(n<<2)>>2]<<2)>>2]),r>=w(0)&((Le(r)|0)^1)|0}function mt(e){e=e|0;var n=Tt,r=0,u=0,l=0,s=0,h=0,D=0,S=Tt;if(r=t[e+968>>2]|0,r)S=w(T[e+908>>2]),n=w(T[e+912>>2]),n=w($8[r&0](e,S,n)),qu(e,(Le(n)|0)^1,3573);else{s=Su(e)|0;do if(s|0){for(r=0,l=0;;){if(u=Ti(e,l)|0,t[u+940>>2]|0){h=8;break}if((t[u+24>>2]|0)!=1)if(D=(e0(e,u)|0)==5,D){r=u;break}else r=(r|0)==0?u:r;if(l=l+1|0,l>>>0>=s>>>0){h=8;break}}if((h|0)==8&&!r)break;return n=w(mt(r)),w(n+w(T[r+404>>2]))}while(0);n=w(T[e+912>>2])}return w(n)}function Jt(e,n,r,u){e=e|0,n=n|0,r=w(r),u=w(u);var l=Tt,s=0;return _n(n)|0?(n=1,s=3):Hi(n)|0?(n=0,s=3):(u=w(ie),l=w(ie)),(s|0)==3&&(l=w(An(e+364+(n<<3)|0,u)),u=w(An(e+380+(n<<3)|0,u))),s=u=w(0)&((Le(u)|0)^1)),r=s?u:r,s=l>=w(0)&((Le(l)|0)^1)&r>2]|0,s)|0,Se=_f(Ze,s)|0,ge=Hi(Ze)|0,I=w(Kt(n,2,r)),K=w(Kt(n,0,r)),Wu(n,2,r)|0?D=w(I+w(An(t[n+992>>2]|0,r))):(ae(n,2)|0?Bt(n,2)|0:0)?(D=w(T[e+908>>2]),S=w(O0(e,2)),S=w(D-w(S+w(vo(e,2)))),D=w(re(n,2,r)),D=w(Kn(n,2,w(S-w(D+w(Pi(n,2,r)))),r,r))):D=w(ie),Wu(n,0,l)|0?S=w(K+w(An(t[n+996>>2]|0,l))):(ae(n,0)|0?Bt(n,0)|0:0)?(S=w(T[e+912>>2]),ct=w(O0(e,0)),ct=w(S-w(ct+w(vo(e,0)))),S=w(re(n,0,l)),S=w(Kn(n,0,w(ct-w(S+w(Pi(n,0,l)))),l,r))):S=w(ie),L=Le(D)|0,k=Le(S)|0;do if(L^k?(be=w(T[n+396>>2]),!(Le(be)|0)):0)if(L){D=w(I+w(w(S-K)*be));break}else{ct=w(K+w(w(D-I)/be)),S=k?ct:S;break}while(0);k=Le(D)|0,L=Le(S)|0,k|L&&(Me=(k^1)&1,u=r>w(0)&((u|0)!=0&k),D=ge?D:u?r:D,Yt(n,D,S,s,ge?Me:u?2:Me,k&(L^1)&1,D,S,0,3623,h)|0,D=w(T[n+908>>2]),D=w(D+w(Kt(n,2,r))),S=w(T[n+912>>2]),S=w(S+w(Kt(n,0,r)))),Yt(n,D,S,s,1,1,D,S,1,3635,h)|0,(Bt(n,Ze)|0?!(ae(n,Ze)|0):0)?(Me=t[976+(Ze<<2)>>2]|0,ct=w(T[e+908+(Me<<2)>>2]),ct=w(ct-w(T[n+908+(Me<<2)>>2])),ct=w(ct-w(vo(e,Ze))),ct=w(ct-w(R0(n,Ze,r))),ct=w(ct-w(Pi(n,Ze,ge?r:l))),T[n+400+(t[1040+(Ze<<2)>>2]<<2)>>2]=ct):Ge=21;do if((Ge|0)==21){if(ae(n,Ze)|0?0:(t[e+8>>2]|0)==1){Me=t[976+(Ze<<2)>>2]|0,ct=w(T[e+908+(Me<<2)>>2]),ct=w(w(ct-w(T[n+908+(Me<<2)>>2]))*w(.5)),T[n+400+(t[1040+(Ze<<2)>>2]<<2)>>2]=ct;break}(ae(n,Ze)|0?0:(t[e+8>>2]|0)==2)&&(Me=t[976+(Ze<<2)>>2]|0,ct=w(T[e+908+(Me<<2)>>2]),ct=w(ct-w(T[n+908+(Me<<2)>>2])),T[n+400+(t[1040+(Ze<<2)>>2]<<2)>>2]=ct)}while(0);(Bt(n,Se)|0?!(ae(n,Se)|0):0)?(Me=t[976+(Se<<2)>>2]|0,ct=w(T[e+908+(Me<<2)>>2]),ct=w(ct-w(T[n+908+(Me<<2)>>2])),ct=w(ct-w(vo(e,Se))),ct=w(ct-w(R0(n,Se,r))),ct=w(ct-w(Pi(n,Se,ge?l:r))),T[n+400+(t[1040+(Se<<2)>>2]<<2)>>2]=ct):Ge=30;do if((Ge|0)==30?!(ae(n,Se)|0):0){if((e0(e,n)|0)==2){Me=t[976+(Se<<2)>>2]|0,ct=w(T[e+908+(Me<<2)>>2]),ct=w(w(ct-w(T[n+908+(Me<<2)>>2]))*w(.5)),T[n+400+(t[1040+(Se<<2)>>2]<<2)>>2]=ct;break}Me=(e0(e,n)|0)==3,Me^(t[e+28>>2]|0)==2&&(Me=t[976+(Se<<2)>>2]|0,ct=w(T[e+908+(Me<<2)>>2]),ct=w(ct-w(T[n+908+(Me<<2)>>2])),T[n+400+(t[1040+(Se<<2)>>2]<<2)>>2]=ct)}while(0)}function Sn(e,n,r){e=e|0,n=n|0,r=r|0;var u=Tt,l=0;l=t[976+(r<<2)>>2]|0,u=w(T[n+908+(l<<2)>>2]),u=w(w(T[e+908+(l<<2)>>2])-u),u=w(u-w(T[n+400+(t[1040+(r<<2)>>2]<<2)>>2])),T[n+400+(t[1e3+(r<<2)>>2]<<2)>>2]=u}function _n(e){return e=e|0,(e|1|0)==1|0}function Tn(e){e=e|0;var n=Tt;switch(t[e+56>>2]|0){case 0:case 3:{n=w(T[e+40>>2]),n>w(0)&((Le(n)|0)^1)?e=c[(t[e+976>>2]|0)+2>>0]|0?1056:992:e=1056;break}default:e=e+52|0}return e|0}function ir(e,n){return e=e|0,n=n|0,(c[e+n>>0]|0)!=0|0}function Bt(e,n){return e=e|0,n=n|0,e=e+132|0,(Hi(n)|0?(t[(pt(e,5,948)|0)+4>>2]|0)!=0:0)?e=1:e=(t[(pt(e,t[1e3+(n<<2)>>2]|0,948)|0)+4>>2]|0)!=0,e|0}function Pi(e,n,r){e=e|0,n=n|0,r=w(r);var u=0,l=0;return e=e+132|0,(Hi(n)|0?(u=pt(e,5,948)|0,(t[u+4>>2]|0)!=0):0)?l=4:(u=pt(e,t[1e3+(n<<2)>>2]|0,948)|0,t[u+4>>2]|0?l=4:r=w(0)),(l|0)==4&&(r=w(An(u,r))),w(r)}function Rr(e,n,r){return e=e|0,n=n|0,r=w(r),ae(e,n)|0?r=w(re(e,n,r)):r=w(-w(Pi(e,n,r))),w(r)}function mr(e){return e=w(e),T[q>>2]=e,t[q>>2]|0|0}function Y(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>1073741823)$n();else{l=pn(n<<2)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r<<2)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n<<2)}function ri(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(0-(l>>2)<<2)|0,t[s>>2]=r,(l|0)>0?(_r(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function ii(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~((u+-4-n|0)>>>2)<<2)),e=t[e>>2]|0,e|0&&yt(e)}function Vr(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0;if(h=e+4|0,D=t[h>>2]|0,l=D-u|0,s=l>>2,e=n+(s<<2)|0,e>>>0>>0){u=D;do t[u>>2]=t[e>>2],e=e+4|0,u=(t[h>>2]|0)+4|0,t[h>>2]=u;while(e>>>0>>0)}s|0&&kg(D+(0-s<<2)|0,n|0,l|0)|0}function ft(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0;return D=n+4|0,S=t[D>>2]|0,l=t[e>>2]|0,h=r,s=h-l|0,u=S+(0-(s>>2)<<2)|0,t[D>>2]=u,(s|0)>0&&_r(u|0,l|0,s|0)|0,l=e+4|0,s=n+8|0,u=(t[l>>2]|0)-h|0,(u|0)>0&&(_r(t[s>>2]|0,r|0,u|0)|0,t[s>>2]=(t[s>>2]|0)+(u>>>2<<2)),h=t[e>>2]|0,t[e>>2]=t[D>>2],t[D>>2]=h,h=t[l>>2]|0,t[l>>2]=t[s>>2],t[s>>2]=h,h=e+8|0,r=n+12|0,e=t[h>>2]|0,t[h>>2]=t[r>>2],t[r>>2]=e,t[n>>2]=t[D>>2],S|0}function Di(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;if(h=t[n>>2]|0,s=t[r>>2]|0,(h|0)!=(s|0)){l=e+8|0,r=((s+-4-h|0)>>>2)+1|0,e=h,u=t[l>>2]|0;do t[u>>2]=t[e>>2],u=(t[l>>2]|0)+4|0,t[l>>2]=u,e=e+4|0;while((e|0)!=(s|0));t[n>>2]=h+(r<<2)}}function ru(){we()}function D0(){var e=0;return e=pn(4)|0,Un(e),e|0}function Un(e){e=e|0,t[e>>2]=m0()|0}function t0(e){e=e|0,e|0&&(ro(e),yt(e))}function ro(e){e=e|0,J0(t[e>>2]|0)}function mo(e,n,r){e=e|0,n=n|0,r=r|0,Vu(t[e>>2]|0,n,r)}function n0(e,n){e=e|0,n=w(n),Ju(t[e>>2]|0,n)}function jo(e,n){return e=e|0,n=n|0,ir(t[e>>2]|0,n)|0}function io(){var e=0;return e=pn(8)|0,Ua(e,0),e|0}function Ua(e,n){e=e|0,n=n|0,n?n=Yn(t[n>>2]|0)|0:n=cr()|0,t[e>>2]=n,t[e+4>>2]=0,Ba(n,e)}function Ef(e){e=e|0;var n=0;return n=pn(8)|0,Ua(n,e),n|0}function cc(e){e=e|0,e|0&&(ws(e),yt(e))}function ws(e){e=e|0;var n=0;zu(t[e>>2]|0),n=e+4|0,e=t[n>>2]|0,t[n>>2]=0,e|0&&(ca(e),yt(e))}function ca(e){e=e|0,U0(e)}function U0(e){e=e|0,e=t[e>>2]|0,e|0&&qr(e|0)}function dc(e){return e=e|0,Us(e)|0}function ja(e){e=e|0;var n=0,r=0;r=e+4|0,n=t[r>>2]|0,t[r>>2]=0,n|0&&(ca(n),yt(n)),po(t[e>>2]|0)}function D2(e,n){e=e|0,n=n|0,la(t[e>>2]|0,t[n>>2]|0)}function rd(e,n){e=e|0,n=n|0,Z(t[e>>2]|0,n)}function id(e,n,r){e=e|0,n=n|0,r=+r,dr(t[e>>2]|0,n,w(r))}function go(e,n,r){e=e|0,n=n|0,r=+r,er(t[e>>2]|0,n,w(r))}function qc(e,n){e=e|0,n=n|0,z(t[e>>2]|0,n)}function Al(e,n){e=e|0,n=n|0,$(t[e>>2]|0,n)}function ul(e,n){e=e|0,n=n|0,ye(t[e>>2]|0,n)}function w2(e,n){e=e|0,n=n|0,g0(t[e>>2]|0,n)}function Ws(e,n){e=e|0,n=n|0,Je(t[e>>2]|0,n)}function Rl(e,n){e=e|0,n=n|0,ji(t[e>>2]|0,n)}function ud(e,n,r){e=e|0,n=n|0,r=+r,Rn(t[e>>2]|0,n,w(r))}function zo(e,n,r){e=e|0,n=n|0,r=+r,Lr(t[e>>2]|0,n,w(r))}function za(e,n){e=e|0,n=n|0,Nr(t[e>>2]|0,n)}function Ha(e,n){e=e|0,n=n|0,ue(t[e>>2]|0,n)}function qa(e,n){e=e|0,n=n|0,nt(t[e>>2]|0,n)}function da(e,n){e=e|0,n=+n,Mt(t[e>>2]|0,w(n))}function Ss(e,n){e=e|0,n=+n,rn(t[e>>2]|0,w(n))}function Ts(e,n){e=e|0,n=+n,Nt(t[e>>2]|0,w(n))}function ns(e,n){e=e|0,n=+n,Pt(t[e>>2]|0,w(n))}function Ho(e,n){e=e|0,n=+n,sn(t[e>>2]|0,w(n))}function Df(e,n){e=e|0,n=+n,fn(t[e>>2]|0,w(n))}function ol(e,n){e=e|0,n=+n,Jn(t[e>>2]|0,w(n))}function Gu(e){e=e|0,Sr(t[e>>2]|0)}function Wa(e,n){e=e|0,n=+n,Lu(t[e>>2]|0,w(n))}function r0(e,n){e=e|0,n=+n,T0(t[e>>2]|0,w(n))}function j0(e){e=e|0,Z0(t[e>>2]|0)}function wf(e,n){e=e|0,n=+n,_i(t[e>>2]|0,w(n))}function Wc(e,n){e=e|0,n=+n,Po(t[e>>2]|0,w(n))}function pc(e,n){e=e|0,n=+n,vf(t[e>>2]|0,w(n))}function Ol(e,n){e=e|0,n=+n,Tl(t[e>>2]|0,w(n))}function Cs(e,n){e=e|0,n=+n,Io(t[e>>2]|0,w(n))}function pa(e,n){e=e|0,n=+n,ys(t[e>>2]|0,w(n))}function od(e,n){e=e|0,n=+n,bo(t[e>>2]|0,w(n))}function ha(e,n){e=e|0,n=+n,Bo(t[e>>2]|0,w(n))}function hc(e,n){e=e|0,n=+n,Qu(t[e>>2]|0,w(n))}function Vc(e,n,r){e=e|0,n=n|0,r=+r,Ft(t[e>>2]|0,n,w(r))}function qi(e,n,r){e=e|0,n=n|0,r=+r,it(t[e>>2]|0,n,w(r))}function y(e,n,r){e=e|0,n=n|0,r=+r,Et(t[e>>2]|0,n,w(r))}function g(e){return e=e|0,ke(t[e>>2]|0)|0}function A(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0;u=m,m=m+16|0,l=u,Cr(l,t[n>>2]|0,r),F(e,l),m=u}function F(e,n){e=e|0,n=n|0,b(e,t[n+4>>2]|0,+w(T[n>>2]))}function b(e,n,r){e=e|0,n=n|0,r=+r,t[e>>2]=n,B[e+8>>3]=r}function J(e){return e=e|0,G(t[e>>2]|0)|0}function pe(e){return e=e|0,Te(t[e>>2]|0)|0}function gt(e){return e=e|0,Ae(t[e>>2]|0)|0}function xt(e){return e=e|0,js(t[e>>2]|0)|0}function kt(e){return e=e|0,vt(t[e>>2]|0)|0}function xr(e){return e=e|0,U(t[e>>2]|0)|0}function i0(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0;u=m,m=m+16|0,l=u,y0(l,t[n>>2]|0,r),F(e,l),m=u}function du(e){return e=e|0,qe(t[e>>2]|0)|0}function z0(e){return e=e|0,Ct(t[e>>2]|0)|0}function Ml(e,n){e=e|0,n=n|0;var r=0,u=0;r=m,m=m+16|0,u=r,Dn(u,t[n>>2]|0),F(e,u),m=r}function u0(e){return e=e|0,+ +w(hf(t[e>>2]|0))}function We(e){return e=e|0,+ +w(Bs(t[e>>2]|0))}function ze(e,n){e=e|0,n=n|0;var r=0,u=0;r=m,m=m+16|0,u=r,fu(u,t[n>>2]|0),F(e,u),m=r}function lt(e,n){e=e|0,n=n|0;var r=0,u=0;r=m,m=m+16|0,u=r,Nu(u,t[n>>2]|0),F(e,u),m=r}function $t(e,n){e=e|0,n=n|0;var r=0,u=0;r=m,m=m+16|0,u=r,rl(u,t[n>>2]|0),F(e,u),m=r}function Wn(e,n){e=e|0,n=n|0;var r=0,u=0;r=m,m=m+16|0,u=r,mf(u,t[n>>2]|0),F(e,u),m=r}function si(e,n){e=e|0,n=n|0;var r=0,u=0;r=m,m=m+16|0,u=r,zs(u,t[n>>2]|0),F(e,u),m=r}function ur(e,n){e=e|0,n=n|0;var r=0,u=0;r=m,m=m+16|0,u=r,_s(u,t[n>>2]|0),F(e,u),m=r}function ci(e){return e=e|0,+ +w(Tu(t[e>>2]|0))}function Qi(e,n){return e=e|0,n=n|0,+ +w(un(t[e>>2]|0,n))}function Gr(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0;u=m,m=m+16|0,l=u,et(l,t[n>>2]|0,r),F(e,l),m=u}function Cu(e,n,r){e=e|0,n=n|0,r=r|0,ba(t[e>>2]|0,t[n>>2]|0,r)}function Va(e,n){e=e|0,n=n|0,ku(t[e>>2]|0,t[n>>2]|0)}function Ga(e){return e=e|0,Su(t[e>>2]|0)|0}function ld(e){return e=e|0,e=fi(t[e>>2]|0)|0,e?e=dc(e)|0:e=0,e|0}function S2(e,n){return e=e|0,n=n|0,e=Ti(t[e>>2]|0,n)|0,e?e=dc(e)|0:e=0,e|0}function T2(e,n){e=e|0,n=n|0;var r=0,u=0;u=pn(4)|0,Sf(u,n),r=e+4|0,n=t[r>>2]|0,t[r>>2]=u,n|0&&(ca(n),yt(n)),oa(t[e>>2]|0,1)}function Sf(e,n){e=e|0,n=n|0,sl(e,n)}function sd(e,n,r,u,l,s){e=e|0,n=n|0,r=w(r),u=u|0,l=w(l),s=s|0;var h=0,D=0;h=m,m=m+16|0,D=h,hh(D,Us(n)|0,+r,u,+l,s),T[e>>2]=w(+B[D>>3]),T[e+4>>2]=w(+B[D+8>>3]),m=h}function hh(e,n,r,u,l,s){e=e|0,n=n|0,r=+r,u=u|0,l=+l,s=s|0;var h=0,D=0,S=0,L=0,k=0;h=m,m=m+32|0,k=h+8|0,L=h+20|0,S=h,D=h+16|0,B[k>>3]=r,t[L>>2]=u,B[S>>3]=l,t[D>>2]=s,Gc(e,t[n+4>>2]|0,k,L,S,D),m=h}function Gc(e,n,r,u,l,s){e=e|0,n=n|0,r=r|0,u=u|0,l=l|0,s=s|0;var h=0,D=0;h=m,m=m+16|0,D=h,ka(D),n=yo(n)|0,vh(e,n,+B[r>>3],t[u>>2]|0,+B[l>>3],t[s>>2]|0),La(D),m=h}function yo(e){return e=e|0,t[e>>2]|0}function vh(e,n,r,u,l,s){e=e|0,n=n|0,r=+r,u=u|0,l=+l,s=s|0;var h=0;h=_o(mh()|0)|0,r=+kl(r),u=ad(u)|0,l=+kl(l),fd(e,Qr(0,h|0,n|0,+r,u|0,+l,ad(s)|0)|0)}function mh(){var e=0;return c[7608]|0||(Kc(9120),e=7608,t[e>>2]=1,t[e+4>>2]=0),9120}function _o(e){return e=e|0,t[e+8>>2]|0}function kl(e){return e=+e,+ +Ya(e)}function ad(e){return e=e|0,dd(e)|0}function fd(e,n){e=e|0,n=n|0;var r=0,u=0,l=0;l=m,m=m+32|0,r=l,u=n,u&1?(C2(r,0),eu(u|0,r|0)|0,Yc(e,r),Ir(r)):(t[e>>2]=t[n>>2],t[e+4>>2]=t[n+4>>2],t[e+8>>2]=t[n+8>>2],t[e+12>>2]=t[n+12>>2]),m=l}function C2(e,n){e=e|0,n=n|0,cd(e,n),t[e+8>>2]=0,c[e+24>>0]=0}function Yc(e,n){e=e|0,n=n|0,n=n+8|0,t[e>>2]=t[n>>2],t[e+4>>2]=t[n+4>>2],t[e+8>>2]=t[n+8>>2],t[e+12>>2]=t[n+12>>2]}function Ir(e){e=e|0,c[e+24>>0]=0}function cd(e,n){e=e|0,n=n|0,t[e>>2]=n}function dd(e){return e=e|0,e|0}function Ya(e){return e=+e,+e}function Kc(e){e=e|0,ll(e,x2()|0,4)}function x2(){return 1064}function ll(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r,t[e+8>>2]=bt(n|0,r+1|0)|0}function sl(e,n){e=e|0,n=n|0,n=t[n>>2]|0,t[e>>2]=n,Ri(n|0)}function gh(e){e=e|0;var n=0,r=0;r=e+4|0,n=t[r>>2]|0,t[r>>2]=0,n|0&&(ca(n),yt(n)),oa(t[e>>2]|0,0)}function Tf(e){e=e|0,$r(t[e>>2]|0)}function Xc(e){return e=e|0,$l(t[e>>2]|0)|0}function A2(e,n,r,u){e=e|0,n=+n,r=+r,u=u|0,ti(t[e>>2]|0,w(n),w(r),u)}function yh(e){return e=e|0,+ +w(Ei(t[e>>2]|0))}function al(e){return e=e|0,+ +w($0(t[e>>2]|0))}function va(e){return e=e|0,+ +w(C0(t[e>>2]|0))}function R2(e){return e=e|0,+ +w(Uo(t[e>>2]|0))}function O2(e){return e=e|0,+ +w(sa(t[e>>2]|0))}function vc(e){return e=e|0,+ +w(es(t[e>>2]|0))}function _h(e,n){e=e|0,n=n|0,B[e>>3]=+w(Ei(t[n>>2]|0)),B[e+8>>3]=+w($0(t[n>>2]|0)),B[e+16>>3]=+w(C0(t[n>>2]|0)),B[e+24>>3]=+w(Uo(t[n>>2]|0)),B[e+32>>3]=+w(sa(t[n>>2]|0)),B[e+40>>3]=+w(es(t[n>>2]|0))}function M2(e,n){return e=e|0,n=n|0,+ +w(tu(t[e>>2]|0,n))}function pd(e,n){return e=e|0,n=n|0,+ +w(ei(t[e>>2]|0,n))}function Qc(e,n){return e=e|0,n=n|0,+ +w(ho(t[e>>2]|0,n))}function Jc(){return Ia()|0}function Vs(){k2(),ma(),Zc(),mc(),gc(),hd()}function k2(){PO(11713,4938,1)}function ma(){eO(10448)}function Zc(){P7(10408)}function mc(){i7(10324)}function gc(){_E(10096)}function hd(){Eh(9132)}function Eh(e){e=e|0;var n=0,r=0,u=0,l=0,s=0,h=0,D=0,S=0,L=0,k=0,I=0,K=0,be=0,Se=0,ge=0,Ze=0,Ge=0,ct=0,Me=0,Pe=0,Zt=0,Br=0,In=0,yn=0,Er=0,Pr=0,Ln=0,uu=0,ls=0,ss=0,as=0,ta=0,r2=0,i2=0,of=0,u2=0,Pc=0,Ic=0,o2=0,l2=0,s2=0,vi=0,lf=0,a2=0,Kf=0,f2=0,c2=0,bc=0,Bc=0,Xf=0,ql=0,Fa=0,Ns=0,sf=0,b1=0,B1=0,Uc=0,U1=0,j1=0,Wl=0,El=0,af=0,vu=0,z1=0,fs=0,Qf=0,cs=0,Jf=0,H1=0,q1=0,Zf=0,Vl=0,ff=0,W1=0,V1=0,G1=0,Tr=0,Bu=0,Dl=0,ds=0,Gl=0,Or=0,Bn=0,cf=0;n=m,m=m+672|0,r=n+656|0,cf=n+648|0,Bn=n+640|0,Or=n+632|0,Gl=n+624|0,ds=n+616|0,Dl=n+608|0,Bu=n+600|0,Tr=n+592|0,G1=n+584|0,V1=n+576|0,W1=n+568|0,ff=n+560|0,Vl=n+552|0,Zf=n+544|0,q1=n+536|0,H1=n+528|0,Jf=n+520|0,cs=n+512|0,Qf=n+504|0,fs=n+496|0,z1=n+488|0,vu=n+480|0,af=n+472|0,El=n+464|0,Wl=n+456|0,j1=n+448|0,U1=n+440|0,Uc=n+432|0,B1=n+424|0,b1=n+416|0,sf=n+408|0,Ns=n+400|0,Fa=n+392|0,ql=n+384|0,Xf=n+376|0,Bc=n+368|0,bc=n+360|0,c2=n+352|0,f2=n+344|0,Kf=n+336|0,a2=n+328|0,lf=n+320|0,vi=n+312|0,s2=n+304|0,l2=n+296|0,o2=n+288|0,Ic=n+280|0,Pc=n+272|0,u2=n+264|0,of=n+256|0,i2=n+248|0,r2=n+240|0,ta=n+232|0,as=n+224|0,ss=n+216|0,ls=n+208|0,uu=n+200|0,Ln=n+192|0,Pr=n+184|0,Er=n+176|0,yn=n+168|0,In=n+160|0,Br=n+152|0,Zt=n+144|0,Pe=n+136|0,Me=n+128|0,ct=n+120|0,Ge=n+112|0,Ze=n+104|0,ge=n+96|0,Se=n+88|0,be=n+80|0,K=n+72|0,I=n+64|0,k=n+56|0,L=n+48|0,S=n+40|0,D=n+32|0,h=n+24|0,s=n+16|0,l=n+8|0,u=n,Cf(e,3646),$c(e,3651,2)|0,Dh(e,3665,2)|0,am(e,3682,18)|0,t[cf>>2]=19,t[cf+4>>2]=0,t[r>>2]=t[cf>>2],t[r+4>>2]=t[cf+4>>2],Gs(e,3690,r)|0,t[Bn>>2]=1,t[Bn+4>>2]=0,t[r>>2]=t[Bn>>2],t[r+4>>2]=t[Bn+4>>2],ga(e,3696,r)|0,t[Or>>2]=2,t[Or+4>>2]=0,t[r>>2]=t[Or>>2],t[r+4>>2]=t[Or+4>>2],iu(e,3706,r)|0,t[Gl>>2]=1,t[Gl+4>>2]=0,t[r>>2]=t[Gl>>2],t[r+4>>2]=t[Gl+4>>2],M0(e,3722,r)|0,t[ds>>2]=2,t[ds+4>>2]=0,t[r>>2]=t[ds>>2],t[r+4>>2]=t[ds+4>>2],M0(e,3734,r)|0,t[Dl>>2]=3,t[Dl+4>>2]=0,t[r>>2]=t[Dl>>2],t[r+4>>2]=t[Dl+4>>2],iu(e,3753,r)|0,t[Bu>>2]=4,t[Bu+4>>2]=0,t[r>>2]=t[Bu>>2],t[r+4>>2]=t[Bu+4>>2],iu(e,3769,r)|0,t[Tr>>2]=5,t[Tr+4>>2]=0,t[r>>2]=t[Tr>>2],t[r+4>>2]=t[Tr+4>>2],iu(e,3783,r)|0,t[G1>>2]=6,t[G1+4>>2]=0,t[r>>2]=t[G1>>2],t[r+4>>2]=t[G1+4>>2],iu(e,3796,r)|0,t[V1>>2]=7,t[V1+4>>2]=0,t[r>>2]=t[V1>>2],t[r+4>>2]=t[V1+4>>2],iu(e,3813,r)|0,t[W1>>2]=8,t[W1+4>>2]=0,t[r>>2]=t[W1>>2],t[r+4>>2]=t[W1+4>>2],iu(e,3825,r)|0,t[ff>>2]=3,t[ff+4>>2]=0,t[r>>2]=t[ff>>2],t[r+4>>2]=t[ff+4>>2],M0(e,3843,r)|0,t[Vl>>2]=4,t[Vl+4>>2]=0,t[r>>2]=t[Vl>>2],t[r+4>>2]=t[Vl+4>>2],M0(e,3853,r)|0,t[Zf>>2]=9,t[Zf+4>>2]=0,t[r>>2]=t[Zf>>2],t[r+4>>2]=t[Zf+4>>2],iu(e,3870,r)|0,t[q1>>2]=10,t[q1+4>>2]=0,t[r>>2]=t[q1>>2],t[r+4>>2]=t[q1+4>>2],iu(e,3884,r)|0,t[H1>>2]=11,t[H1+4>>2]=0,t[r>>2]=t[H1>>2],t[r+4>>2]=t[H1+4>>2],iu(e,3896,r)|0,t[Jf>>2]=1,t[Jf+4>>2]=0,t[r>>2]=t[Jf>>2],t[r+4>>2]=t[Jf+4>>2],o0(e,3907,r)|0,t[cs>>2]=2,t[cs+4>>2]=0,t[r>>2]=t[cs>>2],t[r+4>>2]=t[cs+4>>2],o0(e,3915,r)|0,t[Qf>>2]=3,t[Qf+4>>2]=0,t[r>>2]=t[Qf>>2],t[r+4>>2]=t[Qf+4>>2],o0(e,3928,r)|0,t[fs>>2]=4,t[fs+4>>2]=0,t[r>>2]=t[fs>>2],t[r+4>>2]=t[fs+4>>2],o0(e,3948,r)|0,t[z1>>2]=5,t[z1+4>>2]=0,t[r>>2]=t[z1>>2],t[r+4>>2]=t[z1+4>>2],o0(e,3960,r)|0,t[vu>>2]=6,t[vu+4>>2]=0,t[r>>2]=t[vu>>2],t[r+4>>2]=t[vu+4>>2],o0(e,3974,r)|0,t[af>>2]=7,t[af+4>>2]=0,t[r>>2]=t[af>>2],t[r+4>>2]=t[af+4>>2],o0(e,3983,r)|0,t[El>>2]=20,t[El+4>>2]=0,t[r>>2]=t[El>>2],t[r+4>>2]=t[El+4>>2],Gs(e,3999,r)|0,t[Wl>>2]=8,t[Wl+4>>2]=0,t[r>>2]=t[Wl>>2],t[r+4>>2]=t[Wl+4>>2],o0(e,4012,r)|0,t[j1>>2]=9,t[j1+4>>2]=0,t[r>>2]=t[j1>>2],t[r+4>>2]=t[j1+4>>2],o0(e,4022,r)|0,t[U1>>2]=21,t[U1+4>>2]=0,t[r>>2]=t[U1>>2],t[r+4>>2]=t[U1+4>>2],Gs(e,4039,r)|0,t[Uc>>2]=10,t[Uc+4>>2]=0,t[r>>2]=t[Uc>>2],t[r+4>>2]=t[Uc+4>>2],o0(e,4053,r)|0,t[B1>>2]=11,t[B1+4>>2]=0,t[r>>2]=t[B1>>2],t[r+4>>2]=t[B1+4>>2],o0(e,4065,r)|0,t[b1>>2]=12,t[b1+4>>2]=0,t[r>>2]=t[b1>>2],t[r+4>>2]=t[b1+4>>2],o0(e,4084,r)|0,t[sf>>2]=13,t[sf+4>>2]=0,t[r>>2]=t[sf>>2],t[r+4>>2]=t[sf+4>>2],o0(e,4097,r)|0,t[Ns>>2]=14,t[Ns+4>>2]=0,t[r>>2]=t[Ns>>2],t[r+4>>2]=t[Ns+4>>2],o0(e,4117,r)|0,t[Fa>>2]=15,t[Fa+4>>2]=0,t[r>>2]=t[Fa>>2],t[r+4>>2]=t[Fa+4>>2],o0(e,4129,r)|0,t[ql>>2]=16,t[ql+4>>2]=0,t[r>>2]=t[ql>>2],t[r+4>>2]=t[ql+4>>2],o0(e,4148,r)|0,t[Xf>>2]=17,t[Xf+4>>2]=0,t[r>>2]=t[Xf>>2],t[r+4>>2]=t[Xf+4>>2],o0(e,4161,r)|0,t[Bc>>2]=18,t[Bc+4>>2]=0,t[r>>2]=t[Bc>>2],t[r+4>>2]=t[Bc+4>>2],o0(e,4181,r)|0,t[bc>>2]=5,t[bc+4>>2]=0,t[r>>2]=t[bc>>2],t[r+4>>2]=t[bc+4>>2],M0(e,4196,r)|0,t[c2>>2]=6,t[c2+4>>2]=0,t[r>>2]=t[c2>>2],t[r+4>>2]=t[c2+4>>2],M0(e,4206,r)|0,t[f2>>2]=7,t[f2+4>>2]=0,t[r>>2]=t[f2>>2],t[r+4>>2]=t[f2+4>>2],M0(e,4217,r)|0,t[Kf>>2]=3,t[Kf+4>>2]=0,t[r>>2]=t[Kf>>2],t[r+4>>2]=t[Kf+4>>2],rs(e,4235,r)|0,t[a2>>2]=1,t[a2+4>>2]=0,t[r>>2]=t[a2>>2],t[r+4>>2]=t[a2+4>>2],Ka(e,4251,r)|0,t[lf>>2]=4,t[lf+4>>2]=0,t[r>>2]=t[lf>>2],t[r+4>>2]=t[lf+4>>2],rs(e,4263,r)|0,t[vi>>2]=5,t[vi+4>>2]=0,t[r>>2]=t[vi>>2],t[r+4>>2]=t[vi+4>>2],rs(e,4279,r)|0,t[s2>>2]=6,t[s2+4>>2]=0,t[r>>2]=t[s2>>2],t[r+4>>2]=t[s2+4>>2],rs(e,4293,r)|0,t[l2>>2]=7,t[l2+4>>2]=0,t[r>>2]=t[l2>>2],t[r+4>>2]=t[l2+4>>2],rs(e,4306,r)|0,t[o2>>2]=8,t[o2+4>>2]=0,t[r>>2]=t[o2>>2],t[r+4>>2]=t[o2+4>>2],rs(e,4323,r)|0,t[Ic>>2]=9,t[Ic+4>>2]=0,t[r>>2]=t[Ic>>2],t[r+4>>2]=t[Ic+4>>2],rs(e,4335,r)|0,t[Pc>>2]=2,t[Pc+4>>2]=0,t[r>>2]=t[Pc>>2],t[r+4>>2]=t[Pc+4>>2],Ka(e,4353,r)|0,t[u2>>2]=12,t[u2+4>>2]=0,t[r>>2]=t[u2>>2],t[r+4>>2]=t[u2+4>>2],uo(e,4363,r)|0,t[of>>2]=1,t[of+4>>2]=0,t[r>>2]=t[of>>2],t[r+4>>2]=t[of+4>>2],fl(e,4376,r)|0,t[i2>>2]=2,t[i2+4>>2]=0,t[r>>2]=t[i2>>2],t[r+4>>2]=t[i2+4>>2],fl(e,4388,r)|0,t[r2>>2]=13,t[r2+4>>2]=0,t[r>>2]=t[r2>>2],t[r+4>>2]=t[r2+4>>2],uo(e,4402,r)|0,t[ta>>2]=14,t[ta+4>>2]=0,t[r>>2]=t[ta>>2],t[r+4>>2]=t[ta+4>>2],uo(e,4411,r)|0,t[as>>2]=15,t[as+4>>2]=0,t[r>>2]=t[as>>2],t[r+4>>2]=t[as+4>>2],uo(e,4421,r)|0,t[ss>>2]=16,t[ss+4>>2]=0,t[r>>2]=t[ss>>2],t[r+4>>2]=t[ss+4>>2],uo(e,4433,r)|0,t[ls>>2]=17,t[ls+4>>2]=0,t[r>>2]=t[ls>>2],t[r+4>>2]=t[ls+4>>2],uo(e,4446,r)|0,t[uu>>2]=18,t[uu+4>>2]=0,t[r>>2]=t[uu>>2],t[r+4>>2]=t[uu+4>>2],uo(e,4458,r)|0,t[Ln>>2]=3,t[Ln+4>>2]=0,t[r>>2]=t[Ln>>2],t[r+4>>2]=t[Ln+4>>2],fl(e,4471,r)|0,t[Pr>>2]=1,t[Pr+4>>2]=0,t[r>>2]=t[Pr>>2],t[r+4>>2]=t[Pr+4>>2],yc(e,4486,r)|0,t[Er>>2]=10,t[Er+4>>2]=0,t[r>>2]=t[Er>>2],t[r+4>>2]=t[Er+4>>2],rs(e,4496,r)|0,t[yn>>2]=11,t[yn+4>>2]=0,t[r>>2]=t[yn>>2],t[r+4>>2]=t[yn+4>>2],rs(e,4508,r)|0,t[In>>2]=3,t[In+4>>2]=0,t[r>>2]=t[In>>2],t[r+4>>2]=t[In+4>>2],Ka(e,4519,r)|0,t[Br>>2]=4,t[Br+4>>2]=0,t[r>>2]=t[Br>>2],t[r+4>>2]=t[Br+4>>2],L2(e,4530,r)|0,t[Zt>>2]=19,t[Zt+4>>2]=0,t[r>>2]=t[Zt>>2],t[r+4>>2]=t[Zt+4>>2],wh(e,4542,r)|0,t[Pe>>2]=12,t[Pe+4>>2]=0,t[r>>2]=t[Pe>>2],t[r+4>>2]=t[Pe+4>>2],xf(e,4554,r)|0,t[Me>>2]=13,t[Me+4>>2]=0,t[r>>2]=t[Me>>2],t[r+4>>2]=t[Me+4>>2],Af(e,4568,r)|0,t[ct>>2]=2,t[ct+4>>2]=0,t[r>>2]=t[ct>>2],t[r+4>>2]=t[ct+4>>2],e1(e,4578,r)|0,t[Ge>>2]=20,t[Ge+4>>2]=0,t[r>>2]=t[Ge>>2],t[r+4>>2]=t[Ge+4>>2],Ll(e,4587,r)|0,t[Ze>>2]=22,t[Ze+4>>2]=0,t[r>>2]=t[Ze>>2],t[r+4>>2]=t[Ze+4>>2],Gs(e,4602,r)|0,t[ge>>2]=23,t[ge+4>>2]=0,t[r>>2]=t[ge>>2],t[r+4>>2]=t[ge+4>>2],Gs(e,4619,r)|0,t[Se>>2]=14,t[Se+4>>2]=0,t[r>>2]=t[Se>>2],t[r+4>>2]=t[Se+4>>2],t1(e,4629,r)|0,t[be>>2]=1,t[be+4>>2]=0,t[r>>2]=t[be>>2],t[r+4>>2]=t[be+4>>2],ya(e,4637,r)|0,t[K>>2]=4,t[K+4>>2]=0,t[r>>2]=t[K>>2],t[r+4>>2]=t[K+4>>2],fl(e,4653,r)|0,t[I>>2]=5,t[I+4>>2]=0,t[r>>2]=t[I>>2],t[r+4>>2]=t[I+4>>2],fl(e,4669,r)|0,t[k>>2]=6,t[k+4>>2]=0,t[r>>2]=t[k>>2],t[r+4>>2]=t[k+4>>2],fl(e,4686,r)|0,t[L>>2]=7,t[L+4>>2]=0,t[r>>2]=t[L>>2],t[r+4>>2]=t[L+4>>2],fl(e,4701,r)|0,t[S>>2]=8,t[S+4>>2]=0,t[r>>2]=t[S>>2],t[r+4>>2]=t[S+4>>2],fl(e,4719,r)|0,t[D>>2]=9,t[D+4>>2]=0,t[r>>2]=t[D>>2],t[r+4>>2]=t[D+4>>2],fl(e,4736,r)|0,t[h>>2]=21,t[h+4>>2]=0,t[r>>2]=t[h>>2],t[r+4>>2]=t[h+4>>2],vd(e,4754,r)|0,t[s>>2]=2,t[s+4>>2]=0,t[r>>2]=t[s>>2],t[r+4>>2]=t[s+4>>2],yc(e,4772,r)|0,t[l>>2]=3,t[l+4>>2]=0,t[r>>2]=t[l>>2],t[r+4>>2]=t[l+4>>2],yc(e,4790,r)|0,t[u>>2]=4,t[u+4>>2]=0,t[r>>2]=t[u>>2],t[r+4>>2]=t[u+4>>2],yc(e,4808,r)|0,m=n}function Cf(e,n){e=e|0,n=n|0;var r=0;r=uf()|0,t[e>>2]=r,Vo(r,n),e2(t[e>>2]|0)}function $c(e,n,r){return e=e|0,n=n|0,r=r|0,Ot(e,Fr(n)|0,r,0),e|0}function Dh(e,n,r){return e=e|0,n=n|0,r=r|0,d(e,Fr(n)|0,r,0),e|0}function am(e,n,r){return e=e|0,n=n|0,r=r|0,pE(e,Fr(n)|0,r,0),e|0}function Gs(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;return u=m,m=m+16|0,l=u+8|0,s=u,h=t[r+4>>2]|0,t[s>>2]=t[r>>2],t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],uE(e,n,l),m=u,e|0}function ga(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;return u=m,m=m+16|0,l=u+8|0,s=u,h=t[r+4>>2]|0,t[s>>2]=t[r>>2],t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],zl(e,n,l),m=u,e|0}function iu(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;return u=m,m=m+16|0,l=u+8|0,s=u,h=t[r+4>>2]|0,t[s>>2]=t[r>>2],t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],p(e,n,l),m=u,e|0}function M0(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;return u=m,m=m+16|0,l=u+8|0,s=u,h=t[r+4>>2]|0,t[s>>2]=t[r>>2],t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],Av(e,n,l),m=u,e|0}function o0(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;return u=m,m=m+16|0,l=u+8|0,s=u,h=t[r+4>>2]|0,t[s>>2]=t[r>>2],t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],ng(e,n,l),m=u,e|0}function rs(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;return u=m,m=m+16|0,l=u+8|0,s=u,h=t[r+4>>2]|0,t[s>>2]=t[r>>2],t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],Kd(e,n,l),m=u,e|0}function Ka(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;return u=m,m=m+16|0,l=u+8|0,s=u,h=t[r+4>>2]|0,t[s>>2]=t[r>>2],t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],Yd(e,n,l),m=u,e|0}function uo(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;return u=m,m=m+16|0,l=u+8|0,s=u,h=t[r+4>>2]|0,t[s>>2]=t[r>>2],t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],k0(e,n,l),m=u,e|0}function fl(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;return u=m,m=m+16|0,l=u+8|0,s=u,h=t[r+4>>2]|0,t[s>>2]=t[r>>2],t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],Sp(e,n,l),m=u,e|0}function yc(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;return u=m,m=m+16|0,l=u+8|0,s=u,h=t[r+4>>2]|0,t[s>>2]=t[r>>2],t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],bm(e,n,l),m=u,e|0}function L2(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;return u=m,m=m+16|0,l=u+8|0,s=u,h=t[r+4>>2]|0,t[s>>2]=t[r>>2],t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],l0(e,n,l),m=u,e|0}function wh(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;return u=m,m=m+16|0,l=u+8|0,s=u,h=t[r+4>>2]|0,t[s>>2]=t[r>>2],t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],Md(e,n,l),m=u,e|0}function xf(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;return u=m,m=m+16|0,l=u+8|0,s=u,h=t[r+4>>2]|0,t[s>>2]=t[r>>2],t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],Rm(e,n,l),m=u,e|0}function Af(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;return u=m,m=m+16|0,l=u+8|0,s=u,h=t[r+4>>2]|0,t[s>>2]=t[r>>2],t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],tp(e,n,l),m=u,e|0}function e1(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;return u=m,m=m+16|0,l=u+8|0,s=u,h=t[r+4>>2]|0,t[s>>2]=t[r>>2],t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],g1(e,n,l),m=u,e|0}function Ll(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;return u=m,m=m+16|0,l=u+8|0,s=u,h=t[r+4>>2]|0,t[s>>2]=t[r>>2],t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],$a(e,n,l),m=u,e|0}function t1(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;return u=m,m=m+16|0,l=u+8|0,s=u,h=t[r+4>>2]|0,t[s>>2]=t[r>>2],t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],j2(e,n,l),m=u,e|0}function ya(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;return u=m,m=m+16|0,l=u+8|0,s=u,h=t[r+4>>2]|0,t[s>>2]=t[r>>2],t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],P2(e,n,l),m=u,e|0}function vd(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;return u=m,m=m+16|0,l=u+8|0,s=u,h=t[r+4>>2]|0,t[s>>2]=t[r>>2],t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],md(e,n,l),m=u,e|0}function md(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0;u=m,m=m+16|0,l=u+8|0,s=u,D=t[r>>2]|0,h=t[r+4>>2]|0,r=Fr(n)|0,t[s>>2]=D,t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],Ea(e,r,l,1),m=u}function Fr(e){return e=e|0,e|0}function Ea(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0,S=0,L=0,k=0;l=m,m=m+32|0,s=l+16|0,k=l+8|0,D=l,L=t[r>>2]|0,S=t[r+4>>2]|0,h=t[e>>2]|0,e=N2()|0,t[k>>2]=L,t[k+4>>2]=S,t[s>>2]=t[k>>2],t[s+4>>2]=t[k+4>>2],r=n1(s)|0,t[D>>2]=L,t[D+4>>2]=S,t[s>>2]=t[D>>2],t[s+4>>2]=t[D+4>>2],wi(h,n,e,r,gd(s,u)|0,u),m=l}function N2(){var e=0,n=0;if(c[7616]|0||(cl(9136),Wt(24,9136,se|0)|0,n=7616,t[n>>2]=1,t[n+4>>2]=0),!(sr(9136)|0)){e=9136,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));cl(9136)}return 9136}function n1(e){return e=e|0,0}function gd(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0,L=0,k=0,I=0;return k=m,m=m+32|0,l=k+24|0,h=k+16|0,D=k,S=k+8|0,s=t[e>>2]|0,u=t[e+4>>2]|0,t[D>>2]=s,t[D+4>>2]=u,I=N2()|0,L=I+24|0,e=hn(n,4)|0,t[S>>2]=e,n=I+28|0,r=t[n>>2]|0,r>>>0<(t[I+32>>2]|0)>>>0?(t[h>>2]=s,t[h+4>>2]=u,t[l>>2]=t[h>>2],t[l+4>>2]=t[h+4>>2],Rf(r,l,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(Of(L,D,S),e=t[n>>2]|0),m=k,((e-(t[L>>2]|0)|0)/12|0)+-1|0}function wi(e,n,r,u,l,s){e=e|0,n=n|0,r=r|0,u=u|0,l=l|0,s=s|0;var h=0,D=0,S=0,L=0,k=0,I=0,K=0,be=0;h=m,m=m+32|0,K=h+24|0,I=h+20|0,S=h+16|0,k=h+12|0,L=h+8|0,D=h+4|0,be=h,t[I>>2]=n,t[S>>2]=r,t[k>>2]=u,t[L>>2]=l,t[D>>2]=s,s=e+28|0,t[be>>2]=t[s>>2],t[K>>2]=t[be>>2],F2(e+24|0,K,I,k,L,S,D)|0,t[s>>2]=t[t[s>>2]>>2],m=h}function F2(e,n,r,u,l,s,h){return e=e|0,n=n|0,r=r|0,u=u|0,l=l|0,s=s|0,h=h|0,e=fm(n)|0,n=pn(24)|0,yd(n+4|0,t[r>>2]|0,t[u>>2]|0,t[l>>2]|0,t[s>>2]|0,t[h>>2]|0),t[n>>2]=t[e>>2],t[e>>2]=n,n|0}function fm(e){return e=e|0,t[e>>2]|0}function yd(e,n,r,u,l,s){e=e|0,n=n|0,r=r|0,u=u|0,l=l|0,s=s|0,t[e>>2]=n,t[e+4>>2]=r,t[e+8>>2]=u,t[e+12>>2]=l,t[e+16>>2]=s}function hn(e,n){return e=e|0,n=n|0,n|e|0}function Rf(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;u=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=u,t[e+8>>2]=r}function Of(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,L=0,k=0,I=0,K=0;if(L=m,m=m+48|0,u=L+32|0,h=L+24|0,D=L,S=e+4|0,l=(((t[S>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,s=cm(e)|0,s>>>0>>0)hi(e);else{k=t[e>>2]|0,K=((t[e+8>>2]|0)-k|0)/12|0,I=K<<1,Mf(D,K>>>0>>1>>>0?I>>>0>>0?l:I:s,((t[S>>2]|0)-k|0)/12|0,e+8|0),S=D+8|0,s=t[S>>2]|0,l=t[n+4>>2]|0,r=t[r>>2]|0,t[h>>2]=t[n>>2],t[h+4>>2]=l,t[u>>2]=t[h>>2],t[u+4>>2]=t[h+4>>2],Rf(s,u,r),t[S>>2]=(t[S>>2]|0)+12,Sh(e,D),dm(D),m=L;return}}function cm(e){return e=e|0,357913941}function Mf(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>357913941)$n();else{l=pn(n*12|0)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r*12|0)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n*12|0)}function Sh(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(((l|0)/-12|0)*12|0)|0,t[s>>2]=r,(l|0)>0?(_r(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function dm(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~(((u+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&yt(e)}function cl(e){e=e|0,qo(e)}function r1(e){e=e|0,qn(e+24|0)}function sr(e){return e=e|0,t[e>>2]|0}function qn(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-u|0)>>>0)/12|0)*12|0)),yt(r))}function qo(e){e=e|0;var n=0;n=yr()|0,jn(e,2,3,n,Vn()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function yr(){return 9228}function Vn(){return 1140}function dl(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0;return r=m,m=m+16|0,u=r+8|0,l=r,s=Eo(e)|0,e=t[s+4>>2]|0,t[l>>2]=t[s>>2],t[l+4>>2]=e,t[u>>2]=t[l>>2],t[u+4>>2]=t[l+4>>2],n=_c(n,u)|0,m=r,n|0}function jn(e,n,r,u,l,s){e=e|0,n=n|0,r=r|0,u=u|0,l=l|0,s=s|0,t[e>>2]=n,t[e+4>>2]=r,t[e+8>>2]=u,t[e+12>>2]=l,t[e+16>>2]=s}function Eo(e){return e=e|0,(t[(N2()|0)+24>>2]|0)+(e*12|0)|0}function _c(e,n){e=e|0,n=n|0;var r=0,u=0,l=0;return l=m,m=m+48|0,u=l,r=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(r=t[(t[e>>2]|0)+r>>2]|0),I1[r&31](u,e),u=oo(u)|0,m=l,u|0}function oo(e){e=e|0;var n=0,r=0,u=0,l=0;return l=m,m=m+32|0,n=l+12|0,r=l,u=Iu(Xa()|0)|0,u?(is(n,u),kf(r,n),Ec(e,r),e=xs(n)|0):e=Dc(e)|0,m=l,e|0}function Xa(){var e=0;return c[7632]|0||(Nf(9184),Wt(25,9184,se|0)|0,e=7632,t[e>>2]=1,t[e+4>>2]=0),9184}function Iu(e){return e=e|0,t[e+36>>2]|0}function is(e,n){e=e|0,n=n|0,t[e>>2]=n,t[e+4>>2]=e,t[e+8>>2]=0}function kf(e,n){e=e|0,n=n|0,t[e>>2]=t[n>>2],t[e+4>>2]=t[n+4>>2],t[e+8>>2]=0}function Ec(e,n){e=e|0,n=n|0,lo(n,e,e+8|0,e+16|0,e+24|0,e+32|0,e+40|0)|0}function xs(e){return e=e|0,t[(t[e+4>>2]|0)+8>>2]|0}function Dc(e){e=e|0;var n=0,r=0,u=0,l=0,s=0,h=0,D=0,S=0;S=m,m=m+16|0,r=S+4|0,u=S,l=Ma(8)|0,s=l,h=pn(48)|0,D=h,n=D+48|0;do t[D>>2]=t[e>>2],D=D+4|0,e=e+4|0;while((D|0)<(n|0));return n=s+4|0,t[n>>2]=h,D=pn(8)|0,h=t[n>>2]|0,t[u>>2]=0,t[r>>2]=t[u>>2],Th(D,h,r),t[l>>2]=D,m=S,s|0}function Th(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,r=pn(16)|0,t[r+4>>2]=0,t[r+8>>2]=0,t[r>>2]=1092,t[r+12>>2]=n,t[e+4>>2]=r}function cn(e){e=e|0,Uv(e),yt(e)}function us(e){e=e|0,e=t[e+12>>2]|0,e|0&&yt(e)}function Do(e){e=e|0,yt(e)}function lo(e,n,r,u,l,s,h){return e=e|0,n=n|0,r=r|0,u=u|0,l=l|0,s=s|0,h=h|0,s=Ji(t[e>>2]|0,n,r,u,l,s,h)|0,h=e+4|0,t[(t[h>>2]|0)+8>>2]=s,t[(t[h>>2]|0)+8>>2]|0}function Ji(e,n,r,u,l,s,h){e=e|0,n=n|0,r=r|0,u=u|0,l=l|0,s=s|0,h=h|0;var D=0,S=0;return D=m,m=m+16|0,S=D,ka(S),e=yo(e)|0,h=Yr(e,+B[n>>3],+B[r>>3],+B[u>>3],+B[l>>3],+B[s>>3],+B[h>>3])|0,La(S),m=D,h|0}function Yr(e,n,r,u,l,s,h){e=e|0,n=+n,r=+r,u=+u,l=+l,s=+s,h=+h;var D=0;return D=_o(Lf()|0)|0,n=+kl(n),r=+kl(r),u=+kl(u),l=+kl(l),s=+kl(s),p0(0,D|0,e|0,+n,+r,+u,+l,+s,+ +kl(h))|0}function Lf(){var e=0;return c[7624]|0||(pm(9172),e=7624,t[e>>2]=1,t[e+4>>2]=0),9172}function pm(e){e=e|0,ll(e,Nl()|0,6)}function Nl(){return 1112}function Nf(e){e=e|0,Qa(e)}function Ff(e){e=e|0,_d(e+24|0),Ed(e+16|0)}function _d(e){e=e|0,i1(e)}function Ed(e){e=e|0,wc(e)}function wc(e){e=e|0;var n=0,r=0;if(n=t[e>>2]|0,n|0)do r=n,n=t[n>>2]|0,yt(r);while((n|0)!=0);t[e>>2]=0}function i1(e){e=e|0;var n=0,r=0;if(n=t[e>>2]|0,n|0)do r=n,n=t[n>>2]|0,yt(r);while((n|0)!=0);t[e>>2]=0}function Qa(e){e=e|0;var n=0;t[e+16>>2]=0,t[e+20>>2]=0,n=e+24|0,t[n>>2]=0,t[e+28>>2]=n,t[e+36>>2]=0,c[e+40>>0]=0,c[e+41>>0]=0}function P2(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0;u=m,m=m+16|0,l=u+8|0,s=u,D=t[r>>2]|0,h=t[r+4>>2]|0,r=Fr(n)|0,t[s>>2]=D,t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],Dd(e,r,l,0),m=u}function Dd(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0,S=0,L=0,k=0;l=m,m=m+32|0,s=l+16|0,k=l+8|0,D=l,L=t[r>>2]|0,S=t[r+4>>2]|0,h=t[e>>2]|0,e=u1()|0,t[k>>2]=L,t[k+4>>2]=S,t[s>>2]=t[k>>2],t[s+4>>2]=t[k+4>>2],r=Pf(s)|0,t[D>>2]=L,t[D+4>>2]=S,t[s>>2]=t[D>>2],t[s+4>>2]=t[D+4>>2],wi(h,n,e,r,o1(s,u)|0,u),m=l}function u1(){var e=0,n=0;if(c[7640]|0||(Fl(9232),Wt(26,9232,se|0)|0,n=7640,t[n>>2]=1,t[n+4>>2]=0),!(sr(9232)|0)){e=9232,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Fl(9232)}return 9232}function Pf(e){return e=e|0,0}function o1(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0,L=0,k=0,I=0;return k=m,m=m+32|0,l=k+24|0,h=k+16|0,D=k,S=k+8|0,s=t[e>>2]|0,u=t[e+4>>2]|0,t[D>>2]=s,t[D+4>>2]=u,I=u1()|0,L=I+24|0,e=hn(n,4)|0,t[S>>2]=e,n=I+28|0,r=t[n>>2]|0,r>>>0<(t[I+32>>2]|0)>>>0?(t[h>>2]=s,t[h+4>>2]=u,t[l>>2]=t[h>>2],t[l+4>>2]=t[h+4>>2],Ja(r,l,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(l1(L,D,S),e=t[n>>2]|0),m=k,((e-(t[L>>2]|0)|0)/12|0)+-1|0}function Ja(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;u=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=u,t[e+8>>2]=r}function l1(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,L=0,k=0,I=0,K=0;if(L=m,m=m+48|0,u=L+32|0,h=L+24|0,D=L,S=e+4|0,l=(((t[S>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,s=I2(e)|0,s>>>0>>0)hi(e);else{k=t[e>>2]|0,K=((t[e+8>>2]|0)-k|0)/12|0,I=K<<1,wd(D,K>>>0>>1>>>0?I>>>0>>0?l:I:s,((t[S>>2]|0)-k|0)/12|0,e+8|0),S=D+8|0,s=t[S>>2]|0,l=t[n+4>>2]|0,r=t[r>>2]|0,t[h>>2]=t[n>>2],t[h+4>>2]=l,t[u>>2]=t[h>>2],t[u+4>>2]=t[h+4>>2],Ja(s,u,r),t[S>>2]=(t[S>>2]|0)+12,Sc(e,D),s1(D),m=L;return}}function I2(e){return e=e|0,357913941}function wd(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>357913941)$n();else{l=pn(n*12|0)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r*12|0)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n*12|0)}function Sc(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(((l|0)/-12|0)*12|0)|0,t[s>>2]=r,(l|0)>0?(_r(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function s1(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~(((u+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&yt(e)}function Fl(e){e=e|0,b2(e)}function Da(e){e=e|0,Ch(e+24|0)}function Ch(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-u|0)>>>0)/12|0)*12|0)),yt(r))}function b2(e){e=e|0;var n=0;n=yr()|0,jn(e,2,1,n,B2()|0,3),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function B2(){return 1144}function xh(e,n,r,u,l){e=e|0,n=n|0,r=+r,u=+u,l=l|0;var s=0,h=0,D=0,S=0;s=m,m=m+16|0,h=s+8|0,D=s,S=Sd(e)|0,e=t[S+4>>2]|0,t[D>>2]=t[S>>2],t[D+4>>2]=e,t[h>>2]=t[D>>2],t[h+4>>2]=t[D+4>>2],Ah(n,h,r,u,l),m=s}function Sd(e){return e=e|0,(t[(u1()|0)+24>>2]|0)+(e*12|0)|0}function Ah(e,n,r,u,l){e=e|0,n=n|0,r=+r,u=+u,l=l|0;var s=0,h=0,D=0,S=0,L=0;L=m,m=m+16|0,h=L+2|0,D=L+1|0,S=L,s=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(s=t[(t[e>>2]|0)+s>>2]|0),Pl(h,r),r=+os(h,r),Pl(D,u),u=+os(D,u),As(S,l),S=Ys(S,l)|0,eS[s&1](e,r,u,S),m=L}function Pl(e,n){e=e|0,n=+n}function os(e,n){return e=e|0,n=+n,+ +Rh(n)}function As(e,n){e=e|0,n=n|0}function Ys(e,n){return e=e|0,n=n|0,U2(n)|0}function U2(e){return e=e|0,e|0}function Rh(e){return e=+e,+e}function j2(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0;u=m,m=m+16|0,l=u+8|0,s=u,D=t[r>>2]|0,h=t[r+4>>2]|0,r=Fr(n)|0,t[s>>2]=D,t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],z2(e,r,l,1),m=u}function z2(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0,S=0,L=0,k=0;l=m,m=m+32|0,s=l+16|0,k=l+8|0,D=l,L=t[r>>2]|0,S=t[r+4>>2]|0,h=t[e>>2]|0,e=a1()|0,t[k>>2]=L,t[k+4>>2]=S,t[s>>2]=t[k>>2],t[s+4>>2]=t[k+4>>2],r=f1(s)|0,t[D>>2]=L,t[D+4>>2]=S,t[s>>2]=t[D>>2],t[s+4>>2]=t[D+4>>2],wi(h,n,e,r,Oh(s,u)|0,u),m=l}function a1(){var e=0,n=0;if(c[7648]|0||(c1(9268),Wt(27,9268,se|0)|0,n=7648,t[n>>2]=1,t[n+4>>2]=0),!(sr(9268)|0)){e=9268,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));c1(9268)}return 9268}function f1(e){return e=e|0,0}function Oh(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0,L=0,k=0,I=0;return k=m,m=m+32|0,l=k+24|0,h=k+16|0,D=k,S=k+8|0,s=t[e>>2]|0,u=t[e+4>>2]|0,t[D>>2]=s,t[D+4>>2]=u,I=a1()|0,L=I+24|0,e=hn(n,4)|0,t[S>>2]=e,n=I+28|0,r=t[n>>2]|0,r>>>0<(t[I+32>>2]|0)>>>0?(t[h>>2]=s,t[h+4>>2]=u,t[l>>2]=t[h>>2],t[l+4>>2]=t[h+4>>2],H2(r,l,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(q2(L,D,S),e=t[n>>2]|0),m=k,((e-(t[L>>2]|0)|0)/12|0)+-1|0}function H2(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;u=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=u,t[e+8>>2]=r}function q2(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,L=0,k=0,I=0,K=0;if(L=m,m=m+48|0,u=L+32|0,h=L+24|0,D=L,S=e+4|0,l=(((t[S>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,s=Rs(e)|0,s>>>0>>0)hi(e);else{k=t[e>>2]|0,K=((t[e+8>>2]|0)-k|0)/12|0,I=K<<1,Za(D,K>>>0>>1>>>0?I>>>0>>0?l:I:s,((t[S>>2]|0)-k|0)/12|0,e+8|0),S=D+8|0,s=t[S>>2]|0,l=t[n+4>>2]|0,r=t[r>>2]|0,t[h>>2]=t[n>>2],t[h+4>>2]=l,t[u>>2]=t[h>>2],t[u+4>>2]=t[h+4>>2],H2(s,u,r),t[S>>2]=(t[S>>2]|0)+12,Mh(e,D),pu(D),m=L;return}}function Rs(e){return e=e|0,357913941}function Za(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>357913941)$n();else{l=pn(n*12|0)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r*12|0)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n*12|0)}function Mh(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(((l|0)/-12|0)*12|0)|0,t[s>>2]=r,(l|0)>0?(_r(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function pu(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~(((u+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&yt(e)}function c1(e){e=e|0,Il(e)}function kh(e){e=e|0,d1(e+24|0)}function d1(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-u|0)>>>0)/12|0)*12|0)),yt(r))}function Il(e){e=e|0;var n=0;n=yr()|0,jn(e,2,4,n,Lh()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function Lh(){return 1160}function W2(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0;return r=m,m=m+16|0,u=r+8|0,l=r,s=Nh(e)|0,e=t[s+4>>2]|0,t[l>>2]=t[s>>2],t[l+4>>2]=e,t[u>>2]=t[l>>2],t[u+4>>2]=t[l+4>>2],n=p1(n,u)|0,m=r,n|0}function Nh(e){return e=e|0,(t[(a1()|0)+24>>2]|0)+(e*12|0)|0}function p1(e,n){e=e|0,n=n|0;var r=0;return r=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(r=t[(t[e>>2]|0)+r>>2]|0),bl(Zp[r&31](e)|0)|0}function bl(e){return e=e|0,e&1|0}function $a(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0;u=m,m=m+16|0,l=u+8|0,s=u,D=t[r>>2]|0,h=t[r+4>>2]|0,r=Fr(n)|0,t[s>>2]=D,t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],wa(e,r,l,0),m=u}function wa(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0,S=0,L=0,k=0;l=m,m=m+32|0,s=l+16|0,k=l+8|0,D=l,L=t[r>>2]|0,S=t[r+4>>2]|0,h=t[e>>2]|0,e=V2()|0,t[k>>2]=L,t[k+4>>2]=S,t[s>>2]=t[k>>2],t[s+4>>2]=t[k+4>>2],r=G2(s)|0,t[D>>2]=L,t[D+4>>2]=S,t[s>>2]=t[D>>2],t[s+4>>2]=t[D+4>>2],wi(h,n,e,r,hm(s,u)|0,u),m=l}function V2(){var e=0,n=0;if(c[7656]|0||(Ih(9304),Wt(28,9304,se|0)|0,n=7656,t[n>>2]=1,t[n+4>>2]=0),!(sr(9304)|0)){e=9304,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Ih(9304)}return 9304}function G2(e){return e=e|0,0}function hm(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0,L=0,k=0,I=0;return k=m,m=m+32|0,l=k+24|0,h=k+16|0,D=k,S=k+8|0,s=t[e>>2]|0,u=t[e+4>>2]|0,t[D>>2]=s,t[D+4>>2]=u,I=V2()|0,L=I+24|0,e=hn(n,4)|0,t[S>>2]=e,n=I+28|0,r=t[n>>2]|0,r>>>0<(t[I+32>>2]|0)>>>0?(t[h>>2]=s,t[h+4>>2]=u,t[l>>2]=t[h>>2],t[l+4>>2]=t[h+4>>2],Y2(r,l,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(Fh(L,D,S),e=t[n>>2]|0),m=k,((e-(t[L>>2]|0)|0)/12|0)+-1|0}function Y2(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;u=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=u,t[e+8>>2]=r}function Fh(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,L=0,k=0,I=0,K=0;if(L=m,m=m+48|0,u=L+32|0,h=L+24|0,D=L,S=e+4|0,l=(((t[S>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,s=Ph(e)|0,s>>>0>>0)hi(e);else{k=t[e>>2]|0,K=((t[e+8>>2]|0)-k|0)/12|0,I=K<<1,K2(D,K>>>0>>1>>>0?I>>>0>>0?l:I:s,((t[S>>2]|0)-k|0)/12|0,e+8|0),S=D+8|0,s=t[S>>2]|0,l=t[n+4>>2]|0,r=t[r>>2]|0,t[h>>2]=t[n>>2],t[h+4>>2]=l,t[u>>2]=t[h>>2],t[u+4>>2]=t[h+4>>2],Y2(s,u,r),t[S>>2]=(t[S>>2]|0)+12,vm(e,D),mm(D),m=L;return}}function Ph(e){return e=e|0,357913941}function K2(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>357913941)$n();else{l=pn(n*12|0)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r*12|0)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n*12|0)}function vm(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(((l|0)/-12|0)*12|0)|0,t[s>>2]=r,(l|0)>0?(_r(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function mm(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~(((u+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&yt(e)}function Ih(e){e=e|0,h1(e)}function gm(e){e=e|0,X2(e+24|0)}function X2(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-u|0)>>>0)/12|0)*12|0)),yt(r))}function h1(e){e=e|0;var n=0;n=yr()|0,jn(e,2,5,n,v1()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function v1(){return 1164}function m1(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;u=m,m=m+16|0,l=u+8|0,s=u,h=Sa(e)|0,e=t[h+4>>2]|0,t[s>>2]=t[h>>2],t[s+4>>2]=e,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],Q2(n,l,r),m=u}function Sa(e){return e=e|0,(t[(V2()|0)+24>>2]|0)+(e*12|0)|0}function Q2(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0;s=m,m=m+16|0,l=s,u=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(u=t[(t[e>>2]|0)+u>>2]|0),Ks(l,r),r=Xs(l,r)|0,I1[u&31](e,r),Qs(l),m=s}function Ks(e,n){e=e|0,n=n|0,J2(e,n)}function Xs(e,n){return e=e|0,n=n|0,e|0}function Qs(e){e=e|0,ca(e)}function J2(e,n){e=e|0,n=n|0,Ta(e,n)}function Ta(e,n){e=e|0,n=n|0,t[e>>2]=n}function g1(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0;u=m,m=m+16|0,l=u+8|0,s=u,D=t[r>>2]|0,h=t[r+4>>2]|0,r=Fr(n)|0,t[s>>2]=D,t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],Td(e,r,l,0),m=u}function Td(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0,S=0,L=0,k=0;l=m,m=m+32|0,s=l+16|0,k=l+8|0,D=l,L=t[r>>2]|0,S=t[r+4>>2]|0,h=t[e>>2]|0,e=Tc()|0,t[k>>2]=L,t[k+4>>2]=S,t[s>>2]=t[k>>2],t[s+4>>2]=t[k+4>>2],r=Z2(s)|0,t[D>>2]=L,t[D+4>>2]=S,t[s>>2]=t[D>>2],t[s+4>>2]=t[D+4>>2],wi(h,n,e,r,wo(s,u)|0,u),m=l}function Tc(){var e=0,n=0;if(c[7664]|0||(Hh(9340),Wt(29,9340,se|0)|0,n=7664,t[n>>2]=1,t[n+4>>2]=0),!(sr(9340)|0)){e=9340,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Hh(9340)}return 9340}function Z2(e){return e=e|0,0}function wo(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0,L=0,k=0,I=0;return k=m,m=m+32|0,l=k+24|0,h=k+16|0,D=k,S=k+8|0,s=t[e>>2]|0,u=t[e+4>>2]|0,t[D>>2]=s,t[D+4>>2]=u,I=Tc()|0,L=I+24|0,e=hn(n,4)|0,t[S>>2]=e,n=I+28|0,r=t[n>>2]|0,r>>>0<(t[I+32>>2]|0)>>>0?(t[h>>2]=s,t[h+4>>2]=u,t[l>>2]=t[h>>2],t[l+4>>2]=t[h+4>>2],bh(r,l,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(Bh(L,D,S),e=t[n>>2]|0),m=k,((e-(t[L>>2]|0)|0)/12|0)+-1|0}function bh(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;u=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=u,t[e+8>>2]=r}function Bh(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,L=0,k=0,I=0,K=0;if(L=m,m=m+48|0,u=L+32|0,h=L+24|0,D=L,S=e+4|0,l=(((t[S>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,s=Uh(e)|0,s>>>0>>0)hi(e);else{k=t[e>>2]|0,K=((t[e+8>>2]|0)-k|0)/12|0,I=K<<1,jh(D,K>>>0>>1>>>0?I>>>0>>0?l:I:s,((t[S>>2]|0)-k|0)/12|0,e+8|0),S=D+8|0,s=t[S>>2]|0,l=t[n+4>>2]|0,r=t[r>>2]|0,t[h>>2]=t[n>>2],t[h+4>>2]=l,t[u>>2]=t[h>>2],t[u+4>>2]=t[h+4>>2],bh(s,u,r),t[S>>2]=(t[S>>2]|0)+12,ym(e,D),zh(D),m=L;return}}function Uh(e){return e=e|0,357913941}function jh(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>357913941)$n();else{l=pn(n*12|0)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r*12|0)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n*12|0)}function ym(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(((l|0)/-12|0)*12|0)|0,t[s>>2]=r,(l|0)>0?(_r(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function zh(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~(((u+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&yt(e)}function Hh(e){e=e|0,qh(e)}function y1(e){e=e|0,$2(e+24|0)}function $2(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-u|0)>>>0)/12|0)*12|0)),yt(r))}function qh(e){e=e|0;var n=0;n=yr()|0,jn(e,2,4,n,ep()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function ep(){return 1180}function Wh(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;return u=m,m=m+16|0,l=u+8|0,s=u,h=_m(e)|0,e=t[h+4>>2]|0,t[s>>2]=t[h>>2],t[s+4>>2]=e,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],r=Em(n,l,r)|0,m=u,r|0}function _m(e){return e=e|0,(t[(Tc()|0)+24>>2]|0)+(e*12|0)|0}function Em(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0;return s=m,m=m+16|0,l=s,u=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(u=t[(t[e>>2]|0)+u>>2]|0),If(l,r),l=bf(l,r)|0,l=Cd(eD[u&15](e,l)|0)|0,m=s,l|0}function If(e,n){e=e|0,n=n|0}function bf(e,n){return e=e|0,n=n|0,Dm(n)|0}function Cd(e){return e=e|0,e|0}function Dm(e){return e=e|0,e|0}function tp(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0;u=m,m=m+16|0,l=u+8|0,s=u,D=t[r>>2]|0,h=t[r+4>>2]|0,r=Fr(n)|0,t[s>>2]=D,t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],xd(e,r,l,0),m=u}function xd(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0,S=0,L=0,k=0;l=m,m=m+32|0,s=l+16|0,k=l+8|0,D=l,L=t[r>>2]|0,S=t[r+4>>2]|0,h=t[e>>2]|0,e=np()|0,t[k>>2]=L,t[k+4>>2]=S,t[s>>2]=t[k>>2],t[s+4>>2]=t[k+4>>2],r=Vh(s)|0,t[D>>2]=L,t[D+4>>2]=S,t[s>>2]=t[D>>2],t[s+4>>2]=t[D+4>>2],wi(h,n,e,r,rp(s,u)|0,u),m=l}function np(){var e=0,n=0;if(c[7672]|0||(Kh(9376),Wt(30,9376,se|0)|0,n=7672,t[n>>2]=1,t[n+4>>2]=0),!(sr(9376)|0)){e=9376,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Kh(9376)}return 9376}function Vh(e){return e=e|0,0}function rp(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0,L=0,k=0,I=0;return k=m,m=m+32|0,l=k+24|0,h=k+16|0,D=k,S=k+8|0,s=t[e>>2]|0,u=t[e+4>>2]|0,t[D>>2]=s,t[D+4>>2]=u,I=np()|0,L=I+24|0,e=hn(n,4)|0,t[S>>2]=e,n=I+28|0,r=t[n>>2]|0,r>>>0<(t[I+32>>2]|0)>>>0?(t[h>>2]=s,t[h+4>>2]=u,t[l>>2]=t[h>>2],t[l+4>>2]=t[h+4>>2],Gh(r,l,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(Yh(L,D,S),e=t[n>>2]|0),m=k,((e-(t[L>>2]|0)|0)/12|0)+-1|0}function Gh(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;u=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=u,t[e+8>>2]=r}function Yh(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,L=0,k=0,I=0,K=0;if(L=m,m=m+48|0,u=L+32|0,h=L+24|0,D=L,S=e+4|0,l=(((t[S>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,s=ip(e)|0,s>>>0>>0)hi(e);else{k=t[e>>2]|0,K=((t[e+8>>2]|0)-k|0)/12|0,I=K<<1,wm(D,K>>>0>>1>>>0?I>>>0>>0?l:I:s,((t[S>>2]|0)-k|0)/12|0,e+8|0),S=D+8|0,s=t[S>>2]|0,l=t[n+4>>2]|0,r=t[r>>2]|0,t[h>>2]=t[n>>2],t[h+4>>2]=l,t[u>>2]=t[h>>2],t[u+4>>2]=t[h+4>>2],Gh(s,u,r),t[S>>2]=(t[S>>2]|0)+12,Sm(e,D),Tm(D),m=L;return}}function ip(e){return e=e|0,357913941}function wm(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>357913941)$n();else{l=pn(n*12|0)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r*12|0)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n*12|0)}function Sm(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(((l|0)/-12|0)*12|0)|0,t[s>>2]=r,(l|0)>0?(_r(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function Tm(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~(((u+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&yt(e)}function Kh(e){e=e|0,up(e)}function _1(e){e=e|0,Cm(e+24|0)}function Cm(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-u|0)>>>0)/12|0)*12|0)),yt(r))}function up(e){e=e|0;var n=0;n=yr()|0,jn(e,2,5,n,op()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function op(){return 1196}function xm(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0;return r=m,m=m+16|0,u=r+8|0,l=r,s=Am(e)|0,e=t[s+4>>2]|0,t[l>>2]=t[s>>2],t[l+4>>2]=e,t[u>>2]=t[l>>2],t[u+4>>2]=t[l+4>>2],n=Xh(n,u)|0,m=r,n|0}function Am(e){return e=e|0,(t[(np()|0)+24>>2]|0)+(e*12|0)|0}function Xh(e,n){e=e|0,n=n|0;var r=0;return r=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(r=t[(t[e>>2]|0)+r>>2]|0),Cd(Zp[r&31](e)|0)|0}function Rm(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0;u=m,m=m+16|0,l=u+8|0,s=u,D=t[r>>2]|0,h=t[r+4>>2]|0,r=Fr(n)|0,t[s>>2]=D,t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],Om(e,r,l,1),m=u}function Om(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0,S=0,L=0,k=0;l=m,m=m+32|0,s=l+16|0,k=l+8|0,D=l,L=t[r>>2]|0,S=t[r+4>>2]|0,h=t[e>>2]|0,e=lp()|0,t[k>>2]=L,t[k+4>>2]=S,t[s>>2]=t[k>>2],t[s+4>>2]=t[k+4>>2],r=sp(s)|0,t[D>>2]=L,t[D+4>>2]=S,t[s>>2]=t[D>>2],t[s+4>>2]=t[D+4>>2],wi(h,n,e,r,Ca(s,u)|0,u),m=l}function lp(){var e=0,n=0;if(c[7680]|0||(fp(9412),Wt(31,9412,se|0)|0,n=7680,t[n>>2]=1,t[n+4>>2]=0),!(sr(9412)|0)){e=9412,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));fp(9412)}return 9412}function sp(e){return e=e|0,0}function Ca(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0,L=0,k=0,I=0;return k=m,m=m+32|0,l=k+24|0,h=k+16|0,D=k,S=k+8|0,s=t[e>>2]|0,u=t[e+4>>2]|0,t[D>>2]=s,t[D+4>>2]=u,I=lp()|0,L=I+24|0,e=hn(n,4)|0,t[S>>2]=e,n=I+28|0,r=t[n>>2]|0,r>>>0<(t[I+32>>2]|0)>>>0?(t[h>>2]=s,t[h+4>>2]=u,t[l>>2]=t[h>>2],t[l+4>>2]=t[h+4>>2],E1(r,l,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(ap(L,D,S),e=t[n>>2]|0),m=k,((e-(t[L>>2]|0)|0)/12|0)+-1|0}function E1(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;u=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=u,t[e+8>>2]=r}function ap(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,L=0,k=0,I=0,K=0;if(L=m,m=m+48|0,u=L+32|0,h=L+24|0,D=L,S=e+4|0,l=(((t[S>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,s=Qh(e)|0,s>>>0>>0)hi(e);else{k=t[e>>2]|0,K=((t[e+8>>2]|0)-k|0)/12|0,I=K<<1,Ad(D,K>>>0>>1>>>0?I>>>0>>0?l:I:s,((t[S>>2]|0)-k|0)/12|0,e+8|0),S=D+8|0,s=t[S>>2]|0,l=t[n+4>>2]|0,r=t[r>>2]|0,t[h>>2]=t[n>>2],t[h+4>>2]=l,t[u>>2]=t[h>>2],t[u+4>>2]=t[h+4>>2],E1(s,u,r),t[S>>2]=(t[S>>2]|0)+12,D1(e,D),Jh(D),m=L;return}}function Qh(e){return e=e|0,357913941}function Ad(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>357913941)$n();else{l=pn(n*12|0)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r*12|0)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n*12|0)}function D1(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(((l|0)/-12|0)*12|0)|0,t[s>>2]=r,(l|0)>0?(_r(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function Jh(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~(((u+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&yt(e)}function fp(e){e=e|0,$h(e)}function Zh(e){e=e|0,cp(e+24|0)}function cp(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-u|0)>>>0)/12|0)*12|0)),yt(r))}function $h(e){e=e|0;var n=0;n=yr()|0,jn(e,2,6,n,ev()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function ev(){return 1200}function dp(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0;return r=m,m=m+16|0,u=r+8|0,l=r,s=Rd(e)|0,e=t[s+4>>2]|0,t[l>>2]=t[s>>2],t[l+4>>2]=e,t[u>>2]=t[l>>2],t[u+4>>2]=t[l+4>>2],n=Od(n,u)|0,m=r,n|0}function Rd(e){return e=e|0,(t[(lp()|0)+24>>2]|0)+(e*12|0)|0}function Od(e,n){e=e|0,n=n|0;var r=0;return r=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(r=t[(t[e>>2]|0)+r>>2]|0),H0(Zp[r&31](e)|0)|0}function H0(e){return e=e|0,e|0}function Md(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0;u=m,m=m+16|0,l=u+8|0,s=u,D=t[r>>2]|0,h=t[r+4>>2]|0,r=Fr(n)|0,t[s>>2]=D,t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],xa(e,r,l,0),m=u}function xa(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0,S=0,L=0,k=0;l=m,m=m+32|0,s=l+16|0,k=l+8|0,D=l,L=t[r>>2]|0,S=t[r+4>>2]|0,h=t[e>>2]|0,e=ef()|0,t[k>>2]=L,t[k+4>>2]=S,t[s>>2]=t[k>>2],t[s+4>>2]=t[k+4>>2],r=kd(s)|0,t[D>>2]=L,t[D+4>>2]=S,t[s>>2]=t[D>>2],t[s+4>>2]=t[D+4>>2],wi(h,n,e,r,Ld(s,u)|0,u),m=l}function ef(){var e=0,n=0;if(c[7688]|0||(vp(9448),Wt(32,9448,se|0)|0,n=7688,t[n>>2]=1,t[n+4>>2]=0),!(sr(9448)|0)){e=9448,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));vp(9448)}return 9448}function kd(e){return e=e|0,0}function Ld(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0,L=0,k=0,I=0;return k=m,m=m+32|0,l=k+24|0,h=k+16|0,D=k,S=k+8|0,s=t[e>>2]|0,u=t[e+4>>2]|0,t[D>>2]=s,t[D+4>>2]=u,I=ef()|0,L=I+24|0,e=hn(n,4)|0,t[S>>2]=e,n=I+28|0,r=t[n>>2]|0,r>>>0<(t[I+32>>2]|0)>>>0?(t[h>>2]=s,t[h+4>>2]=u,t[l>>2]=t[h>>2],t[l+4>>2]=t[h+4>>2],pp(r,l,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(Nd(L,D,S),e=t[n>>2]|0),m=k,((e-(t[L>>2]|0)|0)/12|0)+-1|0}function pp(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;u=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=u,t[e+8>>2]=r}function Nd(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,L=0,k=0,I=0,K=0;if(L=m,m=m+48|0,u=L+32|0,h=L+24|0,D=L,S=e+4|0,l=(((t[S>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,s=tv(e)|0,s>>>0>>0)hi(e);else{k=t[e>>2]|0,K=((t[e+8>>2]|0)-k|0)/12|0,I=K<<1,Mm(D,K>>>0>>1>>>0?I>>>0>>0?l:I:s,((t[S>>2]|0)-k|0)/12|0,e+8|0),S=D+8|0,s=t[S>>2]|0,l=t[n+4>>2]|0,r=t[r>>2]|0,t[h>>2]=t[n>>2],t[h+4>>2]=l,t[u>>2]=t[h>>2],t[u+4>>2]=t[h+4>>2],pp(s,u,r),t[S>>2]=(t[S>>2]|0)+12,nv(e,D),hp(D),m=L;return}}function tv(e){return e=e|0,357913941}function Mm(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>357913941)$n();else{l=pn(n*12|0)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r*12|0)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n*12|0)}function nv(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(((l|0)/-12|0)*12|0)|0,t[s>>2]=r,(l|0)>0?(_r(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function hp(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~(((u+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&yt(e)}function vp(e){e=e|0,Lm(e)}function mp(e){e=e|0,km(e+24|0)}function km(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-u|0)>>>0)/12|0)*12|0)),yt(r))}function Lm(e){e=e|0;var n=0;n=yr()|0,jn(e,2,6,n,So()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function So(){return 1204}function Fd(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;u=m,m=m+16|0,l=u+8|0,s=u,h=Nm(e)|0,e=t[h+4>>2]|0,t[s>>2]=t[h>>2],t[s+4>>2]=e,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],pl(n,l,r),m=u}function Nm(e){return e=e|0,(t[(ef()|0)+24>>2]|0)+(e*12|0)|0}function pl(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0;s=m,m=m+16|0,l=s,u=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(u=t[(t[e>>2]|0)+u>>2]|0),tr(l,r),l=Js(l,r)|0,I1[u&31](e,l),m=s}function tr(e,n){e=e|0,n=n|0}function Js(e,n){return e=e|0,n=n|0,hl(n)|0}function hl(e){return e=e|0,e|0}function l0(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0;u=m,m=m+16|0,l=u+8|0,s=u,D=t[r>>2]|0,h=t[r+4>>2]|0,r=Fr(n)|0,t[s>>2]=D,t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],rv(e,r,l,0),m=u}function rv(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0,S=0,L=0,k=0;l=m,m=m+32|0,s=l+16|0,k=l+8|0,D=l,L=t[r>>2]|0,S=t[r+4>>2]|0,h=t[e>>2]|0,e=Zs()|0,t[k>>2]=L,t[k+4>>2]=S,t[s>>2]=t[k>>2],t[s+4>>2]=t[k+4>>2],r=gp(s)|0,t[D>>2]=L,t[D+4>>2]=S,t[s>>2]=t[D>>2],t[s+4>>2]=t[D+4>>2],wi(h,n,e,r,Fm(s,u)|0,u),m=l}function Zs(){var e=0,n=0;if(c[7696]|0||(Ep(9484),Wt(33,9484,se|0)|0,n=7696,t[n>>2]=1,t[n+4>>2]=0),!(sr(9484)|0)){e=9484,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Ep(9484)}return 9484}function gp(e){return e=e|0,0}function Fm(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0,L=0,k=0,I=0;return k=m,m=m+32|0,l=k+24|0,h=k+16|0,D=k,S=k+8|0,s=t[e>>2]|0,u=t[e+4>>2]|0,t[D>>2]=s,t[D+4>>2]=u,I=Zs()|0,L=I+24|0,e=hn(n,4)|0,t[S>>2]=e,n=I+28|0,r=t[n>>2]|0,r>>>0<(t[I+32>>2]|0)>>>0?(t[h>>2]=s,t[h+4>>2]=u,t[l>>2]=t[h>>2],t[l+4>>2]=t[h+4>>2],iv(r,l,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(yp(L,D,S),e=t[n>>2]|0),m=k,((e-(t[L>>2]|0)|0)/12|0)+-1|0}function iv(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;u=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=u,t[e+8>>2]=r}function yp(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,L=0,k=0,I=0,K=0;if(L=m,m=m+48|0,u=L+32|0,h=L+24|0,D=L,S=e+4|0,l=(((t[S>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,s=Pm(e)|0,s>>>0>>0)hi(e);else{k=t[e>>2]|0,K=((t[e+8>>2]|0)-k|0)/12|0,I=K<<1,_p(D,K>>>0>>1>>>0?I>>>0>>0?l:I:s,((t[S>>2]|0)-k|0)/12|0,e+8|0),S=D+8|0,s=t[S>>2]|0,l=t[n+4>>2]|0,r=t[r>>2]|0,t[h>>2]=t[n>>2],t[h+4>>2]=l,t[u>>2]=t[h>>2],t[u+4>>2]=t[h+4>>2],iv(s,u,r),t[S>>2]=(t[S>>2]|0)+12,Cc(e,D),Aa(D),m=L;return}}function Pm(e){return e=e|0,357913941}function _p(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>357913941)$n();else{l=pn(n*12|0)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r*12|0)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n*12|0)}function Cc(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(((l|0)/-12|0)*12|0)|0,t[s>>2]=r,(l|0)>0?(_r(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function Aa(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~(((u+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&yt(e)}function Ep(e){e=e|0,Yu(e)}function Pd(e){e=e|0,bu(e+24|0)}function bu(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-u|0)>>>0)/12|0)*12|0)),yt(r))}function Yu(e){e=e|0;var n=0;n=yr()|0,jn(e,2,1,n,Dp()|0,2),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function Dp(){return 1212}function wp(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0;l=m,m=m+16|0,s=l+8|0,h=l,D=uv(e)|0,e=t[D+4>>2]|0,t[h>>2]=t[D>>2],t[h+4>>2]=e,t[s>>2]=t[h>>2],t[s+4>>2]=t[h+4>>2],Im(n,s,r,u),m=l}function uv(e){return e=e|0,(t[(Zs()|0)+24>>2]|0)+(e*12|0)|0}function Im(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0;D=m,m=m+16|0,s=D+1|0,h=D,l=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(l=t[(t[e>>2]|0)+l>>2]|0),tr(s,r),s=Js(s,r)|0,If(h,u),h=bf(h,u)|0,Fg[l&15](e,s,h),m=D}function bm(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0;u=m,m=m+16|0,l=u+8|0,s=u,D=t[r>>2]|0,h=t[r+4>>2]|0,r=Fr(n)|0,t[s>>2]=D,t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],Bm(e,r,l,1),m=u}function Bm(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0,S=0,L=0,k=0;l=m,m=m+32|0,s=l+16|0,k=l+8|0,D=l,L=t[r>>2]|0,S=t[r+4>>2]|0,h=t[e>>2]|0,e=Id()|0,t[k>>2]=L,t[k+4>>2]=S,t[s>>2]=t[k>>2],t[s+4>>2]=t[k+4>>2],r=ov(s)|0,t[D>>2]=L,t[D+4>>2]=S,t[s>>2]=t[D>>2],t[s+4>>2]=t[D+4>>2],wi(h,n,e,r,xc(s,u)|0,u),m=l}function Id(){var e=0,n=0;if(c[7704]|0||(lv(9520),Wt(34,9520,se|0)|0,n=7704,t[n>>2]=1,t[n+4>>2]=0),!(sr(9520)|0)){e=9520,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));lv(9520)}return 9520}function ov(e){return e=e|0,0}function xc(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0,L=0,k=0,I=0;return k=m,m=m+32|0,l=k+24|0,h=k+16|0,D=k,S=k+8|0,s=t[e>>2]|0,u=t[e+4>>2]|0,t[D>>2]=s,t[D+4>>2]=u,I=Id()|0,L=I+24|0,e=hn(n,4)|0,t[S>>2]=e,n=I+28|0,r=t[n>>2]|0,r>>>0<(t[I+32>>2]|0)>>>0?(t[h>>2]=s,t[h+4>>2]=u,t[l>>2]=t[h>>2],t[l+4>>2]=t[h+4>>2],w1(r,l,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(Um(L,D,S),e=t[n>>2]|0),m=k,((e-(t[L>>2]|0)|0)/12|0)+-1|0}function w1(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;u=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=u,t[e+8>>2]=r}function Um(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,L=0,k=0,I=0,K=0;if(L=m,m=m+48|0,u=L+32|0,h=L+24|0,D=L,S=e+4|0,l=(((t[S>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,s=bd(e)|0,s>>>0>>0)hi(e);else{k=t[e>>2]|0,K=((t[e+8>>2]|0)-k|0)/12|0,I=K<<1,S1(D,K>>>0>>1>>>0?I>>>0>>0?l:I:s,((t[S>>2]|0)-k|0)/12|0,e+8|0),S=D+8|0,s=t[S>>2]|0,l=t[n+4>>2]|0,r=t[r>>2]|0,t[h>>2]=t[n>>2],t[h+4>>2]=l,t[u>>2]=t[h>>2],t[u+4>>2]=t[h+4>>2],w1(s,u,r),t[S>>2]=(t[S>>2]|0)+12,Bl(e,D),Ra(D),m=L;return}}function bd(e){return e=e|0,357913941}function S1(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>357913941)$n();else{l=pn(n*12|0)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r*12|0)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n*12|0)}function Bl(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(((l|0)/-12|0)*12|0)|0,t[s>>2]=r,(l|0)>0?(_r(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function Ra(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~(((u+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&yt(e)}function lv(e){e=e|0,av(e)}function jm(e){e=e|0,sv(e+24|0)}function sv(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-u|0)>>>0)/12|0)*12|0)),yt(r))}function av(e){e=e|0;var n=0;n=yr()|0,jn(e,2,1,n,zm()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function zm(){return 1224}function fv(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0;return l=m,m=m+16|0,s=l+8|0,h=l,D=Oa(e)|0,e=t[D+4>>2]|0,t[h>>2]=t[D>>2],t[h+4>>2]=e,t[s>>2]=t[h>>2],t[s+4>>2]=t[h+4>>2],u=+Mr(n,s,r),m=l,+u}function Oa(e){return e=e|0,(t[(Id()|0)+24>>2]|0)+(e*12|0)|0}function Mr(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;return s=m,m=m+16|0,l=s,u=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(u=t[(t[e>>2]|0)+u>>2]|0),As(l,r),l=Ys(l,r)|0,h=+Ya(+nS[u&7](e,l)),m=s,+h}function Sp(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0;u=m,m=m+16|0,l=u+8|0,s=u,D=t[r>>2]|0,h=t[r+4>>2]|0,r=Fr(n)|0,t[s>>2]=D,t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],vl(e,r,l,1),m=u}function vl(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0,S=0,L=0,k=0;l=m,m=m+32|0,s=l+16|0,k=l+8|0,D=l,L=t[r>>2]|0,S=t[r+4>>2]|0,h=t[e>>2]|0,e=yu()|0,t[k>>2]=L,t[k+4>>2]=S,t[s>>2]=t[k>>2],t[s+4>>2]=t[k+4>>2],r=T1(s)|0,t[D>>2]=L,t[D+4>>2]=S,t[s>>2]=t[D>>2],t[s+4>>2]=t[D+4>>2],wi(h,n,e,r,Ui(s,u)|0,u),m=l}function yu(){var e=0,n=0;if(c[7712]|0||(Cp(9556),Wt(35,9556,se|0)|0,n=7712,t[n>>2]=1,t[n+4>>2]=0),!(sr(9556)|0)){e=9556,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Cp(9556)}return 9556}function T1(e){return e=e|0,0}function Ui(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0,L=0,k=0,I=0;return k=m,m=m+32|0,l=k+24|0,h=k+16|0,D=k,S=k+8|0,s=t[e>>2]|0,u=t[e+4>>2]|0,t[D>>2]=s,t[D+4>>2]=u,I=yu()|0,L=I+24|0,e=hn(n,4)|0,t[S>>2]=e,n=I+28|0,r=t[n>>2]|0,r>>>0<(t[I+32>>2]|0)>>>0?(t[h>>2]=s,t[h+4>>2]=u,t[l>>2]=t[h>>2],t[l+4>>2]=t[h+4>>2],Tp(r,l,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(Bd(L,D,S),e=t[n>>2]|0),m=k,((e-(t[L>>2]|0)|0)/12|0)+-1|0}function Tp(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;u=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=u,t[e+8>>2]=r}function Bd(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,L=0,k=0,I=0,K=0;if(L=m,m=m+48|0,u=L+32|0,h=L+24|0,D=L,S=e+4|0,l=(((t[S>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,s=To(e)|0,s>>>0>>0)hi(e);else{k=t[e>>2]|0,K=((t[e+8>>2]|0)-k|0)/12|0,I=K<<1,Os(D,K>>>0>>1>>>0?I>>>0>>0?l:I:s,((t[S>>2]|0)-k|0)/12|0,e+8|0),S=D+8|0,s=t[S>>2]|0,l=t[n+4>>2]|0,r=t[r>>2]|0,t[h>>2]=t[n>>2],t[h+4>>2]=l,t[u>>2]=t[h>>2],t[u+4>>2]=t[h+4>>2],Tp(s,u,r),t[S>>2]=(t[S>>2]|0)+12,Bf(e,D),Ud(D),m=L;return}}function To(e){return e=e|0,357913941}function Os(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>357913941)$n();else{l=pn(n*12|0)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r*12|0)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n*12|0)}function Bf(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(((l|0)/-12|0)*12|0)|0,t[s>>2]=r,(l|0)>0?(_r(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function Ud(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~(((u+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&yt(e)}function Cp(e){e=e|0,xp(e)}function C1(e){e=e|0,x1(e+24|0)}function x1(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-u|0)>>>0)/12|0)*12|0)),yt(r))}function xp(e){e=e|0;var n=0;n=yr()|0,jn(e,2,5,n,nr()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function nr(){return 1232}function ml(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;return u=m,m=m+16|0,l=u+8|0,s=u,h=Gn(e)|0,e=t[h+4>>2]|0,t[s>>2]=t[h>>2],t[s+4>>2]=e,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],r=+q0(n,l),m=u,+r}function Gn(e){return e=e|0,(t[(yu()|0)+24>>2]|0)+(e*12|0)|0}function q0(e,n){e=e|0,n=n|0;var r=0;return r=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(r=t[(t[e>>2]|0)+r>>2]|0),+ +Ya(+tS[r&15](e))}function k0(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0;u=m,m=m+16|0,l=u+8|0,s=u,D=t[r>>2]|0,h=t[r+4>>2]|0,r=Fr(n)|0,t[s>>2]=D,t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],jd(e,r,l,1),m=u}function jd(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0,S=0,L=0,k=0;l=m,m=m+32|0,s=l+16|0,k=l+8|0,D=l,L=t[r>>2]|0,S=t[r+4>>2]|0,h=t[e>>2]|0,e=Ul()|0,t[k>>2]=L,t[k+4>>2]=S,t[s>>2]=t[k>>2],t[s+4>>2]=t[k+4>>2],r=A1(s)|0,t[D>>2]=L,t[D+4>>2]=S,t[s>>2]=t[D>>2],t[s+4>>2]=t[D+4>>2],wi(h,n,e,r,Ac(s,u)|0,u),m=l}function Ul(){var e=0,n=0;if(c[7720]|0||(qd(9592),Wt(36,9592,se|0)|0,n=7720,t[n>>2]=1,t[n+4>>2]=0),!(sr(9592)|0)){e=9592,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));qd(9592)}return 9592}function A1(e){return e=e|0,0}function Ac(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0,L=0,k=0,I=0;return k=m,m=m+32|0,l=k+24|0,h=k+16|0,D=k,S=k+8|0,s=t[e>>2]|0,u=t[e+4>>2]|0,t[D>>2]=s,t[D+4>>2]=u,I=Ul()|0,L=I+24|0,e=hn(n,4)|0,t[S>>2]=e,n=I+28|0,r=t[n>>2]|0,r>>>0<(t[I+32>>2]|0)>>>0?(t[h>>2]=s,t[h+4>>2]=u,t[l>>2]=t[h>>2],t[l+4>>2]=t[h+4>>2],Rc(r,l,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(zd(L,D,S),e=t[n>>2]|0),m=k,((e-(t[L>>2]|0)|0)/12|0)+-1|0}function Rc(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;u=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=u,t[e+8>>2]=r}function zd(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,L=0,k=0,I=0,K=0;if(L=m,m=m+48|0,u=L+32|0,h=L+24|0,D=L,S=e+4|0,l=(((t[S>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,s=Ap(e)|0,s>>>0>>0)hi(e);else{k=t[e>>2]|0,K=((t[e+8>>2]|0)-k|0)/12|0,I=K<<1,L0(D,K>>>0>>1>>>0?I>>>0>>0?l:I:s,((t[S>>2]|0)-k|0)/12|0,e+8|0),S=D+8|0,s=t[S>>2]|0,l=t[n+4>>2]|0,r=t[r>>2]|0,t[h>>2]=t[n>>2],t[h+4>>2]=l,t[u>>2]=t[h>>2],t[u+4>>2]=t[h+4>>2],Rc(s,u,r),t[S>>2]=(t[S>>2]|0)+12,dn(e,D),Hd(D),m=L;return}}function Ap(e){return e=e|0,357913941}function L0(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>357913941)$n();else{l=pn(n*12|0)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r*12|0)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n*12|0)}function dn(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(((l|0)/-12|0)*12|0)|0,t[s>>2]=r,(l|0)>0?(_r(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function Hd(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~(((u+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&yt(e)}function qd(e){e=e|0,kc(e)}function Oc(e){e=e|0,Mc(e+24|0)}function Mc(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-u|0)>>>0)/12|0)*12|0)),yt(r))}function kc(e){e=e|0;var n=0;n=yr()|0,jn(e,2,7,n,R1()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function R1(){return 1276}function Rp(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0;return r=m,m=m+16|0,u=r+8|0,l=r,s=tf(e)|0,e=t[s+4>>2]|0,t[l>>2]=t[s>>2],t[l+4>>2]=e,t[u>>2]=t[l>>2],t[u+4>>2]=t[l+4>>2],n=Hm(n,u)|0,m=r,n|0}function tf(e){return e=e|0,(t[(Ul()|0)+24>>2]|0)+(e*12|0)|0}function Hm(e,n){e=e|0,n=n|0;var r=0,u=0,l=0;return l=m,m=m+16|0,u=l,r=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(r=t[(t[e>>2]|0)+r>>2]|0),I1[r&31](u,e),u=Lc(u)|0,m=l,u|0}function Lc(e){e=e|0;var n=0,r=0,u=0,l=0;return l=m,m=m+32|0,n=l+12|0,r=l,u=Iu(Wd()|0)|0,u?(is(n,u),kf(r,n),cv(e,r),e=xs(n)|0):e=O1(e)|0,m=l,e|0}function Wd(){var e=0;return c[7736]|0||(Wo(9640),Wt(25,9640,se|0)|0,e=7736,t[e>>2]=1,t[e+4>>2]=0),9640}function cv(e,n){e=e|0,n=n|0,Nc(n,e,e+8|0)|0}function O1(e){e=e|0;var n=0,r=0,u=0,l=0,s=0,h=0,D=0;return r=m,m=m+16|0,l=r+4|0,h=r,u=Ma(8)|0,n=u,D=pn(16)|0,t[D>>2]=t[e>>2],t[D+4>>2]=t[e+4>>2],t[D+8>>2]=t[e+8>>2],t[D+12>>2]=t[e+12>>2],s=n+4|0,t[s>>2]=D,e=pn(8)|0,s=t[s>>2]|0,t[h>>2]=0,t[l>>2]=t[h>>2],Uf(e,s,l),t[u>>2]=e,m=r,n|0}function Uf(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,r=pn(16)|0,t[r+4>>2]=0,t[r+8>>2]=0,t[r>>2]=1244,t[r+12>>2]=n,t[e+4>>2]=r}function jf(e){e=e|0,Uv(e),yt(e)}function M1(e){e=e|0,e=t[e+12>>2]|0,e|0&&yt(e)}function jl(e){e=e|0,yt(e)}function Nc(e,n,r){return e=e|0,n=n|0,r=r|0,n=zf(t[e>>2]|0,n,r)|0,r=e+4|0,t[(t[r>>2]|0)+8>>2]=n,t[(t[r>>2]|0)+8>>2]|0}function zf(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0;return u=m,m=m+16|0,l=u,ka(l),e=yo(e)|0,r=qm(e,t[n>>2]|0,+B[r>>3])|0,La(l),m=u,r|0}function qm(e,n,r){e=e|0,n=n|0,r=+r;var u=0;return u=_o(gl()|0)|0,n=ad(n)|0,Hr(0,u|0,e|0,n|0,+ +kl(r))|0}function gl(){var e=0;return c[7728]|0||(Vd(9628),e=7728,t[e>>2]=1,t[e+4>>2]=0),9628}function Vd(e){e=e|0,ll(e,Gd()|0,2)}function Gd(){return 1264}function Wo(e){e=e|0,Qa(e)}function Yd(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0;u=m,m=m+16|0,l=u+8|0,s=u,D=t[r>>2]|0,h=t[r+4>>2]|0,r=Fr(n)|0,t[s>>2]=D,t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],Wm(e,r,l,1),m=u}function Wm(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0,S=0,L=0,k=0;l=m,m=m+32|0,s=l+16|0,k=l+8|0,D=l,L=t[r>>2]|0,S=t[r+4>>2]|0,h=t[e>>2]|0,e=k1()|0,t[k>>2]=L,t[k+4>>2]=S,t[s>>2]=t[k>>2],t[s+4>>2]=t[k+4>>2],r=Vm(s)|0,t[D>>2]=L,t[D+4>>2]=S,t[s>>2]=t[D>>2],t[s+4>>2]=t[D+4>>2],wi(h,n,e,r,Gm(s,u)|0,u),m=l}function k1(){var e=0,n=0;if(c[7744]|0||(hv(9684),Wt(37,9684,se|0)|0,n=7744,t[n>>2]=1,t[n+4>>2]=0),!(sr(9684)|0)){e=9684,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));hv(9684)}return 9684}function Vm(e){return e=e|0,0}function Gm(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0,L=0,k=0,I=0;return k=m,m=m+32|0,l=k+24|0,h=k+16|0,D=k,S=k+8|0,s=t[e>>2]|0,u=t[e+4>>2]|0,t[D>>2]=s,t[D+4>>2]=u,I=k1()|0,L=I+24|0,e=hn(n,4)|0,t[S>>2]=e,n=I+28|0,r=t[n>>2]|0,r>>>0<(t[I+32>>2]|0)>>>0?(t[h>>2]=s,t[h+4>>2]=u,t[l>>2]=t[h>>2],t[l+4>>2]=t[h+4>>2],dv(r,l,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(Ym(L,D,S),e=t[n>>2]|0),m=k,((e-(t[L>>2]|0)|0)/12|0)+-1|0}function dv(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;u=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=u,t[e+8>>2]=r}function Ym(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,L=0,k=0,I=0,K=0;if(L=m,m=m+48|0,u=L+32|0,h=L+24|0,D=L,S=e+4|0,l=(((t[S>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,s=pv(e)|0,s>>>0>>0)hi(e);else{k=t[e>>2]|0,K=((t[e+8>>2]|0)-k|0)/12|0,I=K<<1,Km(D,K>>>0>>1>>>0?I>>>0>>0?l:I:s,((t[S>>2]|0)-k|0)/12|0,e+8|0),S=D+8|0,s=t[S>>2]|0,l=t[n+4>>2]|0,r=t[r>>2]|0,t[h>>2]=t[n>>2],t[h+4>>2]=l,t[u>>2]=t[h>>2],t[u+4>>2]=t[h+4>>2],dv(s,u,r),t[S>>2]=(t[S>>2]|0)+12,Xm(e,D),Qm(D),m=L;return}}function pv(e){return e=e|0,357913941}function Km(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>357913941)$n();else{l=pn(n*12|0)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r*12|0)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n*12|0)}function Xm(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(((l|0)/-12|0)*12|0)|0,t[s>>2]=r,(l|0)>0?(_r(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function Qm(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~(((u+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&yt(e)}function hv(e){e=e|0,Zm(e)}function Jm(e){e=e|0,Op(e+24|0)}function Op(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-u|0)>>>0)/12|0)*12|0)),yt(r))}function Zm(e){e=e|0;var n=0;n=yr()|0,jn(e,2,5,n,Hf()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function Hf(){return 1280}function vv(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;return u=m,m=m+16|0,l=u+8|0,s=u,h=mv(e)|0,e=t[h+4>>2]|0,t[s>>2]=t[h>>2],t[s+4>>2]=e,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],r=gv(n,l,r)|0,m=u,r|0}function mv(e){return e=e|0,(t[(k1()|0)+24>>2]|0)+(e*12|0)|0}function gv(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;return h=m,m=m+32|0,l=h,s=h+16|0,u=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(u=t[(t[e>>2]|0)+u>>2]|0),As(s,r),s=Ys(s,r)|0,Fg[u&15](l,e,s),s=Lc(l)|0,m=h,s|0}function Kd(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0;u=m,m=m+16|0,l=u+8|0,s=u,D=t[r>>2]|0,h=t[r+4>>2]|0,r=Fr(n)|0,t[s>>2]=D,t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],Xd(e,r,l,1),m=u}function Xd(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0,S=0,L=0,k=0;l=m,m=m+32|0,s=l+16|0,k=l+8|0,D=l,L=t[r>>2]|0,S=t[r+4>>2]|0,h=t[e>>2]|0,e=Mp()|0,t[k>>2]=L,t[k+4>>2]=S,t[s>>2]=t[k>>2],t[s+4>>2]=t[k+4>>2],r=yv(s)|0,t[D>>2]=L,t[D+4>>2]=S,t[s>>2]=t[D>>2],t[s+4>>2]=t[D+4>>2],wi(h,n,e,r,Qd(s,u)|0,u),m=l}function Mp(){var e=0,n=0;if(c[7752]|0||(Sv(9720),Wt(38,9720,se|0)|0,n=7752,t[n>>2]=1,t[n+4>>2]=0),!(sr(9720)|0)){e=9720,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Sv(9720)}return 9720}function yv(e){return e=e|0,0}function Qd(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0,L=0,k=0,I=0;return k=m,m=m+32|0,l=k+24|0,h=k+16|0,D=k,S=k+8|0,s=t[e>>2]|0,u=t[e+4>>2]|0,t[D>>2]=s,t[D+4>>2]=u,I=Mp()|0,L=I+24|0,e=hn(n,4)|0,t[S>>2]=e,n=I+28|0,r=t[n>>2]|0,r>>>0<(t[I+32>>2]|0)>>>0?(t[h>>2]=s,t[h+4>>2]=u,t[l>>2]=t[h>>2],t[l+4>>2]=t[h+4>>2],_v(r,l,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(Ev(L,D,S),e=t[n>>2]|0),m=k,((e-(t[L>>2]|0)|0)/12|0)+-1|0}function _v(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;u=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=u,t[e+8>>2]=r}function Ev(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,L=0,k=0,I=0,K=0;if(L=m,m=m+48|0,u=L+32|0,h=L+24|0,D=L,S=e+4|0,l=(((t[S>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,s=kp(e)|0,s>>>0>>0)hi(e);else{k=t[e>>2]|0,K=((t[e+8>>2]|0)-k|0)/12|0,I=K<<1,Dv(D,K>>>0>>1>>>0?I>>>0>>0?l:I:s,((t[S>>2]|0)-k|0)/12|0,e+8|0),S=D+8|0,s=t[S>>2]|0,l=t[n+4>>2]|0,r=t[r>>2]|0,t[h>>2]=t[n>>2],t[h+4>>2]=l,t[u>>2]=t[h>>2],t[u+4>>2]=t[h+4>>2],_v(s,u,r),t[S>>2]=(t[S>>2]|0)+12,wv(e,D),$m(D),m=L;return}}function kp(e){return e=e|0,357913941}function Dv(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>357913941)$n();else{l=pn(n*12|0)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r*12|0)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n*12|0)}function wv(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(((l|0)/-12|0)*12|0)|0,t[s>>2]=r,(l|0)>0?(_r(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function $m(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~(((u+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&yt(e)}function Sv(e){e=e|0,Tv(e)}function eg(e){e=e|0,Jd(e+24|0)}function Jd(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-u|0)>>>0)/12|0)*12|0)),yt(r))}function Tv(e){e=e|0;var n=0;n=yr()|0,jn(e,2,8,n,Lp()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function Lp(){return 1288}function tg(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0;return r=m,m=m+16|0,u=r+8|0,l=r,s=s0(e)|0,e=t[s+4>>2]|0,t[l>>2]=t[s>>2],t[l+4>>2]=e,t[u>>2]=t[l>>2],t[u+4>>2]=t[l+4>>2],n=Np(n,u)|0,m=r,n|0}function s0(e){return e=e|0,(t[(Mp()|0)+24>>2]|0)+(e*12|0)|0}function Np(e,n){e=e|0,n=n|0;var r=0;return r=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(r=t[(t[e>>2]|0)+r>>2]|0),dd(Zp[r&31](e)|0)|0}function ng(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0;u=m,m=m+16|0,l=u+8|0,s=u,D=t[r>>2]|0,h=t[r+4>>2]|0,r=Fr(n)|0,t[s>>2]=D,t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],rg(e,r,l,0),m=u}function rg(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0,S=0,L=0,k=0;l=m,m=m+32|0,s=l+16|0,k=l+8|0,D=l,L=t[r>>2]|0,S=t[r+4>>2]|0,h=t[e>>2]|0,e=Fp()|0,t[k>>2]=L,t[k+4>>2]=S,t[s>>2]=t[k>>2],t[s+4>>2]=t[k+4>>2],r=nf(s)|0,t[D>>2]=L,t[D+4>>2]=S,t[s>>2]=t[D>>2],t[s+4>>2]=t[D+4>>2],wi(h,n,e,r,Pp(s,u)|0,u),m=l}function Fp(){var e=0,n=0;if(c[7760]|0||(Bp(9756),Wt(39,9756,se|0)|0,n=7760,t[n>>2]=1,t[n+4>>2]=0),!(sr(9756)|0)){e=9756,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Bp(9756)}return 9756}function nf(e){return e=e|0,0}function Pp(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0,L=0,k=0,I=0;return k=m,m=m+32|0,l=k+24|0,h=k+16|0,D=k,S=k+8|0,s=t[e>>2]|0,u=t[e+4>>2]|0,t[D>>2]=s,t[D+4>>2]=u,I=Fp()|0,L=I+24|0,e=hn(n,4)|0,t[S>>2]=e,n=I+28|0,r=t[n>>2]|0,r>>>0<(t[I+32>>2]|0)>>>0?(t[h>>2]=s,t[h+4>>2]=u,t[l>>2]=t[h>>2],t[l+4>>2]=t[h+4>>2],Ip(r,l,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(bp(L,D,S),e=t[n>>2]|0),m=k,((e-(t[L>>2]|0)|0)/12|0)+-1|0}function Ip(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;u=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=u,t[e+8>>2]=r}function bp(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,L=0,k=0,I=0,K=0;if(L=m,m=m+48|0,u=L+32|0,h=L+24|0,D=L,S=e+4|0,l=(((t[S>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,s=ig(e)|0,s>>>0>>0)hi(e);else{k=t[e>>2]|0,K=((t[e+8>>2]|0)-k|0)/12|0,I=K<<1,ug(D,K>>>0>>1>>>0?I>>>0>>0?l:I:s,((t[S>>2]|0)-k|0)/12|0,e+8|0),S=D+8|0,s=t[S>>2]|0,l=t[n+4>>2]|0,r=t[r>>2]|0,t[h>>2]=t[n>>2],t[h+4>>2]=l,t[u>>2]=t[h>>2],t[u+4>>2]=t[h+4>>2],Ip(s,u,r),t[S>>2]=(t[S>>2]|0)+12,Cv(e,D),qf(D),m=L;return}}function ig(e){return e=e|0,357913941}function ug(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>357913941)$n();else{l=pn(n*12|0)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r*12|0)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n*12|0)}function Cv(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(((l|0)/-12|0)*12|0)|0,t[s>>2]=r,(l|0)>0?(_r(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function qf(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~(((u+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&yt(e)}function Bp(e){e=e|0,lg(e)}function xv(e){e=e|0,og(e+24|0)}function og(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-u|0)>>>0)/12|0)*12|0)),yt(r))}function lg(e){e=e|0;var n=0;n=yr()|0,jn(e,2,8,n,Up()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function Up(){return 1292}function jp(e,n,r){e=e|0,n=n|0,r=+r;var u=0,l=0,s=0,h=0;u=m,m=m+16|0,l=u+8|0,s=u,h=sg(e)|0,e=t[h+4>>2]|0,t[s>>2]=t[h>>2],t[s+4>>2]=e,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],ag(n,l,r),m=u}function sg(e){return e=e|0,(t[(Fp()|0)+24>>2]|0)+(e*12|0)|0}function ag(e,n,r){e=e|0,n=n|0,r=+r;var u=0,l=0,s=0;s=m,m=m+16|0,l=s,u=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(u=t[(t[e>>2]|0)+u>>2]|0),Pl(l,r),r=+os(l,r),Z8[u&31](e,r),m=s}function Av(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0;u=m,m=m+16|0,l=u+8|0,s=u,D=t[r>>2]|0,h=t[r+4>>2]|0,r=Fr(n)|0,t[s>>2]=D,t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],zp(e,r,l,0),m=u}function zp(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0,S=0,L=0,k=0;l=m,m=m+32|0,s=l+16|0,k=l+8|0,D=l,L=t[r>>2]|0,S=t[r+4>>2]|0,h=t[e>>2]|0,e=Hp()|0,t[k>>2]=L,t[k+4>>2]=S,t[s>>2]=t[k>>2],t[s+4>>2]=t[k+4>>2],r=Zd(s)|0,t[D>>2]=L,t[D+4>>2]=S,t[s>>2]=t[D>>2],t[s+4>>2]=t[D+4>>2],wi(h,n,e,r,fg(s,u)|0,u),m=l}function Hp(){var e=0,n=0;if(c[7768]|0||(qp(9792),Wt(40,9792,se|0)|0,n=7768,t[n>>2]=1,t[n+4>>2]=0),!(sr(9792)|0)){e=9792,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));qp(9792)}return 9792}function Zd(e){return e=e|0,0}function fg(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0,L=0,k=0,I=0;return k=m,m=m+32|0,l=k+24|0,h=k+16|0,D=k,S=k+8|0,s=t[e>>2]|0,u=t[e+4>>2]|0,t[D>>2]=s,t[D+4>>2]=u,I=Hp()|0,L=I+24|0,e=hn(n,4)|0,t[S>>2]=e,n=I+28|0,r=t[n>>2]|0,r>>>0<(t[I+32>>2]|0)>>>0?(t[h>>2]=s,t[h+4>>2]=u,t[l>>2]=t[h>>2],t[l+4>>2]=t[h+4>>2],L1(r,l,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(cg(L,D,S),e=t[n>>2]|0),m=k,((e-(t[L>>2]|0)|0)/12|0)+-1|0}function L1(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;u=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=u,t[e+8>>2]=r}function cg(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,L=0,k=0,I=0,K=0;if(L=m,m=m+48|0,u=L+32|0,h=L+24|0,D=L,S=e+4|0,l=(((t[S>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,s=Rv(e)|0,s>>>0>>0)hi(e);else{k=t[e>>2]|0,K=((t[e+8>>2]|0)-k|0)/12|0,I=K<<1,Ov(D,K>>>0>>1>>>0?I>>>0>>0?l:I:s,((t[S>>2]|0)-k|0)/12|0,e+8|0),S=D+8|0,s=t[S>>2]|0,l=t[n+4>>2]|0,r=t[r>>2]|0,t[h>>2]=t[n>>2],t[h+4>>2]=l,t[u>>2]=t[h>>2],t[u+4>>2]=t[h+4>>2],L1(s,u,r),t[S>>2]=(t[S>>2]|0)+12,dg(e,D),Wf(D),m=L;return}}function Rv(e){return e=e|0,357913941}function Ov(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>357913941)$n();else{l=pn(n*12|0)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r*12|0)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n*12|0)}function dg(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(((l|0)/-12|0)*12|0)|0,t[s>>2]=r,(l|0)>0?(_r(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function Wf(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~(((u+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&yt(e)}function qp(e){e=e|0,hg(e)}function Mv(e){e=e|0,pg(e+24|0)}function pg(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-u|0)>>>0)/12|0)*12|0)),yt(r))}function hg(e){e=e|0;var n=0;n=yr()|0,jn(e,2,1,n,Wp()|0,2),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function Wp(){return 1300}function vg(e,n,r,u){e=e|0,n=n|0,r=r|0,u=+u;var l=0,s=0,h=0,D=0;l=m,m=m+16|0,s=l+8|0,h=l,D=$s(e)|0,e=t[D+4>>2]|0,t[h>>2]=t[D>>2],t[h+4>>2]=e,t[s>>2]=t[h>>2],t[s+4>>2]=t[h+4>>2],mg(n,s,r,u),m=l}function $s(e){return e=e|0,(t[(Hp()|0)+24>>2]|0)+(e*12|0)|0}function mg(e,n,r,u){e=e|0,n=n|0,r=r|0,u=+u;var l=0,s=0,h=0,D=0;D=m,m=m+16|0,s=D+1|0,h=D,l=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(l=t[(t[e>>2]|0)+l>>2]|0),As(s,r),s=Ys(s,r)|0,Pl(h,u),u=+os(h,u),oS[l&15](e,s,u),m=D}function p(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0;u=m,m=m+16|0,l=u+8|0,s=u,D=t[r>>2]|0,h=t[r+4>>2]|0,r=Fr(n)|0,t[s>>2]=D,t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],v(e,r,l,0),m=u}function v(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0,S=0,L=0,k=0;l=m,m=m+32|0,s=l+16|0,k=l+8|0,D=l,L=t[r>>2]|0,S=t[r+4>>2]|0,h=t[e>>2]|0,e=x()|0,t[k>>2]=L,t[k+4>>2]=S,t[s>>2]=t[k>>2],t[s+4>>2]=t[k+4>>2],r=P(s)|0,t[D>>2]=L,t[D+4>>2]=S,t[s>>2]=t[D>>2],t[s+4>>2]=t[D+4>>2],wi(h,n,e,r,W(s,u)|0,u),m=l}function x(){var e=0,n=0;if(c[7776]|0||(Rt(9828),Wt(41,9828,se|0)|0,n=7776,t[n>>2]=1,t[n+4>>2]=0),!(sr(9828)|0)){e=9828,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Rt(9828)}return 9828}function P(e){return e=e|0,0}function W(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0,L=0,k=0,I=0;return k=m,m=m+32|0,l=k+24|0,h=k+16|0,D=k,S=k+8|0,s=t[e>>2]|0,u=t[e+4>>2]|0,t[D>>2]=s,t[D+4>>2]=u,I=x()|0,L=I+24|0,e=hn(n,4)|0,t[S>>2]=e,n=I+28|0,r=t[n>>2]|0,r>>>0<(t[I+32>>2]|0)>>>0?(t[h>>2]=s,t[h+4>>2]=u,t[l>>2]=t[h>>2],t[l+4>>2]=t[h+4>>2],ee(r,l,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(ve(L,D,S),e=t[n>>2]|0),m=k,((e-(t[L>>2]|0)|0)/12|0)+-1|0}function ee(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;u=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=u,t[e+8>>2]=r}function ve(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,L=0,k=0,I=0,K=0;if(L=m,m=m+48|0,u=L+32|0,h=L+24|0,D=L,S=e+4|0,l=(((t[S>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,s=Ee(e)|0,s>>>0>>0)hi(e);else{k=t[e>>2]|0,K=((t[e+8>>2]|0)-k|0)/12|0,I=K<<1,Ie(D,K>>>0>>1>>>0?I>>>0>>0?l:I:s,((t[S>>2]|0)-k|0)/12|0,e+8|0),S=D+8|0,s=t[S>>2]|0,l=t[n+4>>2]|0,r=t[r>>2]|0,t[h>>2]=t[n>>2],t[h+4>>2]=l,t[u>>2]=t[h>>2],t[u+4>>2]=t[h+4>>2],ee(s,u,r),t[S>>2]=(t[S>>2]|0)+12,_t(e,D),St(D),m=L;return}}function Ee(e){return e=e|0,357913941}function Ie(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>357913941)$n();else{l=pn(n*12|0)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r*12|0)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n*12|0)}function _t(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(((l|0)/-12|0)*12|0)|0,t[s>>2]=r,(l|0)>0?(_r(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function St(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~(((u+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&yt(e)}function Rt(e){e=e|0,rr(e)}function on(e){e=e|0,kn(e+24|0)}function kn(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-u|0)>>>0)/12|0)*12|0)),yt(r))}function rr(e){e=e|0;var n=0;n=yr()|0,jn(e,2,7,n,br()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function br(){return 1312}function ar(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;u=m,m=m+16|0,l=u+8|0,s=u,h=ui(e)|0,e=t[h+4>>2]|0,t[s>>2]=t[h>>2],t[s+4>>2]=e,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],di(n,l,r),m=u}function ui(e){return e=e|0,(t[(x()|0)+24>>2]|0)+(e*12|0)|0}function di(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0;s=m,m=m+16|0,l=s,u=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(u=t[(t[e>>2]|0)+u>>2]|0),As(l,r),l=Ys(l,r)|0,I1[u&31](e,l),m=s}function zl(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0;u=m,m=m+16|0,l=u+8|0,s=u,D=t[r>>2]|0,h=t[r+4>>2]|0,r=Fr(n)|0,t[s>>2]=D,t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],Zi(e,r,l,0),m=u}function Zi(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0,S=0,L=0,k=0;l=m,m=m+32|0,s=l+16|0,k=l+8|0,D=l,L=t[r>>2]|0,S=t[r+4>>2]|0,h=t[e>>2]|0,e=so()|0,t[k>>2]=L,t[k+4>>2]=S,t[s>>2]=t[k>>2],t[s+4>>2]=t[k+4>>2],r=a0(s)|0,t[D>>2]=L,t[D+4>>2]=S,t[s>>2]=t[D>>2],t[s+4>>2]=t[D+4>>2],wi(h,n,e,r,Ms(s,u)|0,u),m=l}function so(){var e=0,n=0;if(c[7784]|0||(n_(9864),Wt(42,9864,se|0)|0,n=7784,t[n>>2]=1,t[n+4>>2]=0),!(sr(9864)|0)){e=9864,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));n_(9864)}return 9864}function a0(e){return e=e|0,0}function Ms(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0,L=0,k=0,I=0;return k=m,m=m+32|0,l=k+24|0,h=k+16|0,D=k,S=k+8|0,s=t[e>>2]|0,u=t[e+4>>2]|0,t[D>>2]=s,t[D+4>>2]=u,I=so()|0,L=I+24|0,e=hn(n,4)|0,t[S>>2]=e,n=I+28|0,r=t[n>>2]|0,r>>>0<(t[I+32>>2]|0)>>>0?(t[h>>2]=s,t[h+4>>2]=u,t[l>>2]=t[h>>2],t[l+4>>2]=t[h+4>>2],Co(r,l,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(kv(L,D,S),e=t[n>>2]|0),m=k,((e-(t[L>>2]|0)|0)/12|0)+-1|0}function Co(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;u=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=u,t[e+8>>2]=r}function kv(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,L=0,k=0,I=0,K=0;if(L=m,m=m+48|0,u=L+32|0,h=L+24|0,D=L,S=e+4|0,l=(((t[S>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,s=J4(e)|0,s>>>0>>0)hi(e);else{k=t[e>>2]|0,K=((t[e+8>>2]|0)-k|0)/12|0,I=K<<1,gg(D,K>>>0>>1>>>0?I>>>0>>0?l:I:s,((t[S>>2]|0)-k|0)/12|0,e+8|0),S=D+8|0,s=t[S>>2]|0,l=t[n+4>>2]|0,r=t[r>>2]|0,t[h>>2]=t[n>>2],t[h+4>>2]=l,t[u>>2]=t[h>>2],t[u+4>>2]=t[h+4>>2],Co(s,u,r),t[S>>2]=(t[S>>2]|0)+12,yg(e,D),rf(D),m=L;return}}function J4(e){return e=e|0,357913941}function gg(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>357913941)$n();else{l=pn(n*12|0)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r*12|0)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n*12|0)}function yg(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(((l|0)/-12|0)*12|0)|0,t[s>>2]=r,(l|0)>0?(_r(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function rf(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~(((u+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&yt(e)}function n_(e){e=e|0,eE(e)}function Z4(e){e=e|0,$4(e+24|0)}function $4(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-u|0)>>>0)/12|0)*12|0)),yt(r))}function eE(e){e=e|0;var n=0;n=yr()|0,jn(e,2,8,n,tE()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function tE(){return 1320}function _g(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;u=m,m=m+16|0,l=u+8|0,s=u,h=nE(e)|0,e=t[h+4>>2]|0,t[s>>2]=t[h>>2],t[s+4>>2]=e,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],rE(n,l,r),m=u}function nE(e){return e=e|0,(t[(so()|0)+24>>2]|0)+(e*12|0)|0}function rE(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0;s=m,m=m+16|0,l=s,u=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(u=t[(t[e>>2]|0)+u>>2]|0),Eg(l,r),l=r_(l,r)|0,I1[u&31](e,l),m=s}function Eg(e,n){e=e|0,n=n|0}function r_(e,n){return e=e|0,n=n|0,iE(n)|0}function iE(e){return e=e|0,e|0}function uE(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0;u=m,m=m+16|0,l=u+8|0,s=u,D=t[r>>2]|0,h=t[r+4>>2]|0,r=Fr(n)|0,t[s>>2]=D,t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],i_(e,r,l,0),m=u}function i_(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0,S=0,L=0,k=0;l=m,m=m+32|0,s=l+16|0,k=l+8|0,D=l,L=t[r>>2]|0,S=t[r+4>>2]|0,h=t[e>>2]|0,e=Vf()|0,t[k>>2]=L,t[k+4>>2]=S,t[s>>2]=t[k>>2],t[s+4>>2]=t[k+4>>2],r=u_(s)|0,t[D>>2]=L,t[D+4>>2]=S,t[s>>2]=t[D>>2],t[s+4>>2]=t[D+4>>2],wi(h,n,e,r,oE(s,u)|0,u),m=l}function Vf(){var e=0,n=0;if(c[7792]|0||(Sg(9900),Wt(43,9900,se|0)|0,n=7792,t[n>>2]=1,t[n+4>>2]=0),!(sr(9900)|0)){e=9900,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Sg(9900)}return 9900}function u_(e){return e=e|0,0}function oE(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0,L=0,k=0,I=0;return k=m,m=m+32|0,l=k+24|0,h=k+16|0,D=k,S=k+8|0,s=t[e>>2]|0,u=t[e+4>>2]|0,t[D>>2]=s,t[D+4>>2]=u,I=Vf()|0,L=I+24|0,e=hn(n,4)|0,t[S>>2]=e,n=I+28|0,r=t[n>>2]|0,r>>>0<(t[I+32>>2]|0)>>>0?(t[h>>2]=s,t[h+4>>2]=u,t[l>>2]=t[h>>2],t[l+4>>2]=t[h+4>>2],Vp(r,l,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(lE(L,D,S),e=t[n>>2]|0),m=k,((e-(t[L>>2]|0)|0)/12|0)+-1|0}function Vp(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;u=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=u,t[e+8>>2]=r}function lE(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,L=0,k=0,I=0,K=0;if(L=m,m=m+48|0,u=L+32|0,h=L+24|0,D=L,S=e+4|0,l=(((t[S>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,s=Lv(e)|0,s>>>0>>0)hi(e);else{k=t[e>>2]|0,K=((t[e+8>>2]|0)-k|0)/12|0,I=K<<1,Dg(D,K>>>0>>1>>>0?I>>>0>>0?l:I:s,((t[S>>2]|0)-k|0)/12|0,e+8|0),S=D+8|0,s=t[S>>2]|0,l=t[n+4>>2]|0,r=t[r>>2]|0,t[h>>2]=t[n>>2],t[h+4>>2]=l,t[u>>2]=t[h>>2],t[u+4>>2]=t[h+4>>2],Vp(s,u,r),t[S>>2]=(t[S>>2]|0)+12,wg(e,D),sE(D),m=L;return}}function Lv(e){return e=e|0,357913941}function Dg(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>357913941)$n();else{l=pn(n*12|0)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r*12|0)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n*12|0)}function wg(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(((l|0)/-12|0)*12|0)|0,t[s>>2]=r,(l|0)>0?(_r(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function sE(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~(((u+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&yt(e)}function Sg(e){e=e|0,o_(e)}function aE(e){e=e|0,fE(e+24|0)}function fE(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-u|0)>>>0)/12|0)*12|0)),yt(r))}function o_(e){e=e|0;var n=0;n=yr()|0,jn(e,2,22,n,cE()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function cE(){return 1344}function dE(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0;r=m,m=m+16|0,u=r+8|0,l=r,s=l_(e)|0,e=t[s+4>>2]|0,t[l>>2]=t[s>>2],t[l+4>>2]=e,t[u>>2]=t[l>>2],t[u+4>>2]=t[l+4>>2],Nv(n,u),m=r}function l_(e){return e=e|0,(t[(Vf()|0)+24>>2]|0)+(e*12|0)|0}function Nv(e,n){e=e|0,n=n|0;var r=0;r=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(r=t[(t[e>>2]|0)+r>>2]|0),P1[r&127](e)}function pE(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0;s=t[e>>2]|0,l=Tg()|0,e=hE(r)|0,wi(s,n,l,e,vE(r,u)|0,u)}function Tg(){var e=0,n=0;if(c[7800]|0||(xg(9936),Wt(44,9936,se|0)|0,n=7800,t[n>>2]=1,t[n+4>>2]=0),!(sr(9936)|0)){e=9936,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));xg(9936)}return 9936}function hE(e){return e=e|0,e|0}function vE(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0;return D=m,m=m+16|0,l=D,s=D+4|0,t[l>>2]=e,S=Tg()|0,h=S+24|0,n=hn(n,4)|0,t[s>>2]=n,r=S+28|0,u=t[r>>2]|0,u>>>0<(t[S+32>>2]|0)>>>0?(Cg(u,e,n),n=(t[r>>2]|0)+8|0,t[r>>2]=n):(s_(h,l,s),n=t[r>>2]|0),m=D,(n-(t[h>>2]|0)>>3)+-1|0}function Cg(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r}function s_(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,L=0,k=0;if(D=m,m=m+32|0,l=D,s=e+4|0,h=((t[s>>2]|0)-(t[e>>2]|0)>>3)+1|0,u=a_(e)|0,u>>>0>>0)hi(e);else{S=t[e>>2]|0,k=(t[e+8>>2]|0)-S|0,L=k>>2,f_(l,k>>3>>>0>>1>>>0?L>>>0>>0?h:L:u,(t[s>>2]|0)-S>>3,e+8|0),h=l+8|0,Cg(t[h>>2]|0,t[n>>2]|0,t[r>>2]|0),t[h>>2]=(t[h>>2]|0)+8,c_(e,l),d_(l),m=D;return}}function a_(e){return e=e|0,536870911}function f_(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>536870911)$n();else{l=pn(n<<3)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r<<3)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n<<3)}function c_(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(0-(l>>3)<<3)|0,t[s>>2]=r,(l|0)>0?(_r(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function d_(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~((u+-8-n|0)>>>3)<<3)),e=t[e>>2]|0,e|0&&yt(e)}function xg(e){e=e|0,h_(e)}function p_(e){e=e|0,mE(e+24|0)}function mE(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-u|0)>>>3)<<3)),yt(r))}function h_(e){e=e|0;var n=0;n=yr()|0,jn(e,1,23,n,So()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function gE(e,n){e=e|0,n=n|0,f(t[(yE(e)|0)>>2]|0,n)}function yE(e){return e=e|0,(t[(Tg()|0)+24>>2]|0)+(e<<3)|0}function f(e,n){e=e|0,n=n|0;var r=0,u=0;r=m,m=m+16|0,u=r,tr(u,n),n=Js(u,n)|0,P1[e&127](n),m=r}function d(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0;s=t[e>>2]|0,l=E()|0,e=C(r)|0,wi(s,n,l,e,R(r,u)|0,u)}function E(){var e=0,n=0;if(c[7808]|0||(ht(9972),Wt(45,9972,se|0)|0,n=7808,t[n>>2]=1,t[n+4>>2]=0),!(sr(9972)|0)){e=9972,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));ht(9972)}return 9972}function C(e){return e=e|0,e|0}function R(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0;return D=m,m=m+16|0,l=D,s=D+4|0,t[l>>2]=e,S=E()|0,h=S+24|0,n=hn(n,4)|0,t[s>>2]=n,r=S+28|0,u=t[r>>2]|0,u>>>0<(t[S+32>>2]|0)>>>0?(j(u,e,n),n=(t[r>>2]|0)+8|0,t[r>>2]=n):(V(h,l,s),n=t[r>>2]|0),m=D,(n-(t[h>>2]|0)>>3)+-1|0}function j(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r}function V(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,L=0,k=0;if(D=m,m=m+32|0,l=D,s=e+4|0,h=((t[s>>2]|0)-(t[e>>2]|0)>>3)+1|0,u=te(e)|0,u>>>0>>0)hi(e);else{S=t[e>>2]|0,k=(t[e+8>>2]|0)-S|0,L=k>>2,le(l,k>>3>>>0>>1>>>0?L>>>0>>0?h:L:u,(t[s>>2]|0)-S>>3,e+8|0),h=l+8|0,j(t[h>>2]|0,t[n>>2]|0,t[r>>2]|0),t[h>>2]=(t[h>>2]|0)+8,Be(e,l),Xe(l),m=D;return}}function te(e){return e=e|0,536870911}function le(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>536870911)$n();else{l=pn(n<<3)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r<<3)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n<<3)}function Be(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(0-(l>>3)<<3)|0,t[s>>2]=r,(l|0)>0?(_r(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function Xe(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~((u+-8-n|0)>>>3)<<3)),e=t[e>>2]|0,e|0&&yt(e)}function ht(e){e=e|0,zt(e)}function Lt(e){e=e|0,Gt(e+24|0)}function Gt(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-u|0)>>>3)<<3)),yt(r))}function zt(e){e=e|0;var n=0;n=yr()|0,jn(e,1,9,n,gn()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function gn(){return 1348}function kr(e,n){return e=e|0,n=n|0,Mi(t[(oi(e)|0)>>2]|0,n)|0}function oi(e){return e=e|0,(t[(E()|0)+24>>2]|0)+(e<<3)|0}function Mi(e,n){e=e|0,n=n|0;var r=0,u=0;return r=m,m=m+16|0,u=r,N0(u,n),n=$i(u,n)|0,n=Cd(Zp[e&31](n)|0)|0,m=r,n|0}function N0(e,n){e=e|0,n=n|0}function $i(e,n){return e=e|0,n=n|0,ot(n)|0}function ot(e){return e=e|0,e|0}function Ot(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0;s=t[e>>2]|0,l=$e()|0,e=Ut(r)|0,wi(s,n,l,e,Pn(r,u)|0,u)}function $e(){var e=0,n=0;if(c[7816]|0||(Kr(10008),Wt(46,10008,se|0)|0,n=7816,t[n>>2]=1,t[n+4>>2]=0),!(sr(10008)|0)){e=10008,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Kr(10008)}return 10008}function Ut(e){return e=e|0,e|0}function Pn(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0;return D=m,m=m+16|0,l=D,s=D+4|0,t[l>>2]=e,S=$e()|0,h=S+24|0,n=hn(n,4)|0,t[s>>2]=n,r=S+28|0,u=t[r>>2]|0,u>>>0<(t[S+32>>2]|0)>>>0?(vn(u,e,n),n=(t[r>>2]|0)+8|0,t[r>>2]=n):(Wi(h,l,s),n=t[r>>2]|0),m=D,(n-(t[h>>2]|0)>>3)+-1|0}function vn(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r}function Wi(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,L=0,k=0;if(D=m,m=m+32|0,l=D,s=e+4|0,h=((t[s>>2]|0)-(t[e>>2]|0)>>3)+1|0,u=pi(e)|0,u>>>0>>0)hi(e);else{S=t[e>>2]|0,k=(t[e+8>>2]|0)-S|0,L=k>>2,Ku(l,k>>3>>>0>>1>>>0?L>>>0>>0?h:L:u,(t[s>>2]|0)-S>>3,e+8|0),h=l+8|0,vn(t[h>>2]|0,t[n>>2]|0,t[r>>2]|0),t[h>>2]=(t[h>>2]|0)+8,hr(e,l),hu(l),m=D;return}}function pi(e){return e=e|0,536870911}function Ku(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>536870911)$n();else{l=pn(n<<3)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r<<3)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n<<3)}function hr(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(0-(l>>3)<<3)|0,t[s>>2]=r,(l|0)>0?(_r(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function hu(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~((u+-8-n|0)>>>3)<<3)),e=t[e>>2]|0,e|0&&yt(e)}function Kr(e){e=e|0,W0(e)}function xu(e){e=e|0,w0(e+24|0)}function w0(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-u|0)>>>3)<<3)),yt(r))}function W0(e){e=e|0;var n=0;n=yr()|0,jn(e,1,15,n,op()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function ks(e){return e=e|0,yl(t[(Xu(e)|0)>>2]|0)|0}function Xu(e){return e=e|0,(t[($e()|0)+24>>2]|0)+(e<<3)|0}function yl(e){return e=e|0,Cd(k_[e&7]()|0)|0}function uf(){var e=0;return c[7832]|0||(m_(10052),Wt(25,10052,se|0)|0,e=7832,t[e>>2]=1,t[e+4>>2]=0),10052}function Vo(e,n){e=e|0,n=n|0,t[e>>2]=Ls()|0,t[e+4>>2]=$d()|0,t[e+12>>2]=n,t[e+8>>2]=Gf()|0,t[e+32>>2]=2}function Ls(){return 11709}function $d(){return 1188}function Gf(){return N1()|0}function Fc(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0,(Hl(u,896)|0)==512?r|0&&(Go(r),yt(r)):n|0&&(ws(n),yt(n))}function Hl(e,n){return e=e|0,n=n|0,n&e|0}function Go(e){e=e|0,e=t[e+4>>2]|0,e|0&&t2(e)}function N1(){var e=0;return c[7824]|0||(t[2511]=v_()|0,t[2512]=0,e=7824,t[e>>2]=1,t[e+4>>2]=0),10044}function v_(){return 0}function m_(e){e=e|0,Qa(e)}function _E(e){e=e|0;var n=0,r=0,u=0,l=0,s=0;n=m,m=m+32|0,r=n+24|0,s=n+16|0,l=n+8|0,u=n,g_(e,4827),EE(e,4834,3)|0,DE(e,3682,47)|0,t[s>>2]=9,t[s+4>>2]=0,t[r>>2]=t[s>>2],t[r+4>>2]=t[s+4>>2],Ag(e,4841,r)|0,t[l>>2]=1,t[l+4>>2]=0,t[r>>2]=t[l>>2],t[r+4>>2]=t[l+4>>2],y_(e,4871,r)|0,t[u>>2]=10,t[u+4>>2]=0,t[r>>2]=t[u>>2],t[r+4>>2]=t[u+4>>2],wE(e,4891,r)|0,m=n}function g_(e,n){e=e|0,n=n|0;var r=0;r=QR()|0,t[e>>2]=r,JR(r,n),e2(t[e>>2]|0)}function EE(e,n,r){return e=e|0,n=n|0,r=r|0,FR(e,Fr(n)|0,r,0),e|0}function DE(e,n,r){return e=e|0,n=n|0,r=r|0,_R(e,Fr(n)|0,r,0),e|0}function Ag(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;return u=m,m=m+16|0,l=u+8|0,s=u,h=t[r+4>>2]|0,t[s>>2]=t[r>>2],t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],eR(e,n,l),m=u,e|0}function y_(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;return u=m,m=m+16|0,l=u+8|0,s=u,h=t[r+4>>2]|0,t[s>>2]=t[r>>2],t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],PA(e,n,l),m=u,e|0}function wE(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;return u=m,m=m+16|0,l=u+8|0,s=u,h=t[r+4>>2]|0,t[s>>2]=t[r>>2],t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],SE(e,n,l),m=u,e|0}function SE(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0;u=m,m=m+16|0,l=u+8|0,s=u,D=t[r>>2]|0,h=t[r+4>>2]|0,r=Fr(n)|0,t[s>>2]=D,t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],TE(e,r,l,1),m=u}function TE(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0,S=0,L=0,k=0;l=m,m=m+32|0,s=l+16|0,k=l+8|0,D=l,L=t[r>>2]|0,S=t[r+4>>2]|0,h=t[e>>2]|0,e=CE()|0,t[k>>2]=L,t[k+4>>2]=S,t[s>>2]=t[k>>2],t[s+4>>2]=t[k+4>>2],r=DA(s)|0,t[D>>2]=L,t[D+4>>2]=S,t[s>>2]=t[D>>2],t[s+4>>2]=t[D+4>>2],wi(h,n,e,r,wA(s,u)|0,u),m=l}function CE(){var e=0,n=0;if(c[7840]|0||(Pw(10100),Wt(48,10100,se|0)|0,n=7840,t[n>>2]=1,t[n+4>>2]=0),!(sr(10100)|0)){e=10100,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Pw(10100)}return 10100}function DA(e){return e=e|0,0}function wA(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0,L=0,k=0,I=0;return k=m,m=m+32|0,l=k+24|0,h=k+16|0,D=k,S=k+8|0,s=t[e>>2]|0,u=t[e+4>>2]|0,t[D>>2]=s,t[D+4>>2]=u,I=CE()|0,L=I+24|0,e=hn(n,4)|0,t[S>>2]=e,n=I+28|0,r=t[n>>2]|0,r>>>0<(t[I+32>>2]|0)>>>0?(t[h>>2]=s,t[h+4>>2]=u,t[l>>2]=t[h>>2],t[l+4>>2]=t[h+4>>2],Fw(r,l,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(SA(L,D,S),e=t[n>>2]|0),m=k,((e-(t[L>>2]|0)|0)/12|0)+-1|0}function Fw(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;u=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=u,t[e+8>>2]=r}function SA(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,L=0,k=0,I=0,K=0;if(L=m,m=m+48|0,u=L+32|0,h=L+24|0,D=L,S=e+4|0,l=(((t[S>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,s=TA(e)|0,s>>>0>>0)hi(e);else{k=t[e>>2]|0,K=((t[e+8>>2]|0)-k|0)/12|0,I=K<<1,CA(D,K>>>0>>1>>>0?I>>>0>>0?l:I:s,((t[S>>2]|0)-k|0)/12|0,e+8|0),S=D+8|0,s=t[S>>2]|0,l=t[n+4>>2]|0,r=t[r>>2]|0,t[h>>2]=t[n>>2],t[h+4>>2]=l,t[u>>2]=t[h>>2],t[u+4>>2]=t[h+4>>2],Fw(s,u,r),t[S>>2]=(t[S>>2]|0)+12,xA(e,D),AA(D),m=L;return}}function TA(e){return e=e|0,357913941}function CA(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>357913941)$n();else{l=pn(n*12|0)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r*12|0)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n*12|0)}function xA(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(((l|0)/-12|0)*12|0)|0,t[s>>2]=r,(l|0)>0?(_r(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function AA(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~(((u+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&yt(e)}function Pw(e){e=e|0,MA(e)}function RA(e){e=e|0,OA(e+24|0)}function OA(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-u|0)>>>0)/12|0)*12|0)),yt(r))}function MA(e){e=e|0;var n=0;n=yr()|0,jn(e,2,6,n,kA()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function kA(){return 1364}function LA(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;return u=m,m=m+16|0,l=u+8|0,s=u,h=NA(e)|0,e=t[h+4>>2]|0,t[s>>2]=t[h>>2],t[s+4>>2]=e,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],r=FA(n,l,r)|0,m=u,r|0}function NA(e){return e=e|0,(t[(CE()|0)+24>>2]|0)+(e*12|0)|0}function FA(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0;return s=m,m=m+16|0,l=s,u=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(u=t[(t[e>>2]|0)+u>>2]|0),As(l,r),l=Ys(l,r)|0,l=bl(eD[u&15](e,l)|0)|0,m=s,l|0}function PA(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0;u=m,m=m+16|0,l=u+8|0,s=u,D=t[r>>2]|0,h=t[r+4>>2]|0,r=Fr(n)|0,t[s>>2]=D,t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],IA(e,r,l,0),m=u}function IA(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0,S=0,L=0,k=0;l=m,m=m+32|0,s=l+16|0,k=l+8|0,D=l,L=t[r>>2]|0,S=t[r+4>>2]|0,h=t[e>>2]|0,e=xE()|0,t[k>>2]=L,t[k+4>>2]=S,t[s>>2]=t[k>>2],t[s+4>>2]=t[k+4>>2],r=bA(s)|0,t[D>>2]=L,t[D+4>>2]=S,t[s>>2]=t[D>>2],t[s+4>>2]=t[D+4>>2],wi(h,n,e,r,BA(s,u)|0,u),m=l}function xE(){var e=0,n=0;if(c[7848]|0||(bw(10136),Wt(49,10136,se|0)|0,n=7848,t[n>>2]=1,t[n+4>>2]=0),!(sr(10136)|0)){e=10136,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));bw(10136)}return 10136}function bA(e){return e=e|0,0}function BA(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0,L=0,k=0,I=0;return k=m,m=m+32|0,l=k+24|0,h=k+16|0,D=k,S=k+8|0,s=t[e>>2]|0,u=t[e+4>>2]|0,t[D>>2]=s,t[D+4>>2]=u,I=xE()|0,L=I+24|0,e=hn(n,4)|0,t[S>>2]=e,n=I+28|0,r=t[n>>2]|0,r>>>0<(t[I+32>>2]|0)>>>0?(t[h>>2]=s,t[h+4>>2]=u,t[l>>2]=t[h>>2],t[l+4>>2]=t[h+4>>2],Iw(r,l,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(UA(L,D,S),e=t[n>>2]|0),m=k,((e-(t[L>>2]|0)|0)/12|0)+-1|0}function Iw(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;u=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=u,t[e+8>>2]=r}function UA(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,L=0,k=0,I=0,K=0;if(L=m,m=m+48|0,u=L+32|0,h=L+24|0,D=L,S=e+4|0,l=(((t[S>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,s=jA(e)|0,s>>>0>>0)hi(e);else{k=t[e>>2]|0,K=((t[e+8>>2]|0)-k|0)/12|0,I=K<<1,zA(D,K>>>0>>1>>>0?I>>>0>>0?l:I:s,((t[S>>2]|0)-k|0)/12|0,e+8|0),S=D+8|0,s=t[S>>2]|0,l=t[n+4>>2]|0,r=t[r>>2]|0,t[h>>2]=t[n>>2],t[h+4>>2]=l,t[u>>2]=t[h>>2],t[u+4>>2]=t[h+4>>2],Iw(s,u,r),t[S>>2]=(t[S>>2]|0)+12,HA(e,D),qA(D),m=L;return}}function jA(e){return e=e|0,357913941}function zA(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>357913941)$n();else{l=pn(n*12|0)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r*12|0)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n*12|0)}function HA(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(((l|0)/-12|0)*12|0)|0,t[s>>2]=r,(l|0)>0?(_r(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function qA(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~(((u+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&yt(e)}function bw(e){e=e|0,GA(e)}function WA(e){e=e|0,VA(e+24|0)}function VA(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-u|0)>>>0)/12|0)*12|0)),yt(r))}function GA(e){e=e|0;var n=0;n=yr()|0,jn(e,2,9,n,YA()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function YA(){return 1372}function KA(e,n,r){e=e|0,n=n|0,r=+r;var u=0,l=0,s=0,h=0;u=m,m=m+16|0,l=u+8|0,s=u,h=XA(e)|0,e=t[h+4>>2]|0,t[s>>2]=t[h>>2],t[s+4>>2]=e,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],QA(n,l,r),m=u}function XA(e){return e=e|0,(t[(xE()|0)+24>>2]|0)+(e*12|0)|0}function QA(e,n,r){e=e|0,n=n|0,r=+r;var u=0,l=0,s=0,h=Tt;s=m,m=m+16|0,l=s,u=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(u=t[(t[e>>2]|0)+u>>2]|0),JA(l,r),h=w(ZA(l,r)),J8[u&1](e,h),m=s}function JA(e,n){e=e|0,n=+n}function ZA(e,n){return e=e|0,n=+n,w($A(n))}function $A(e){return e=+e,w(e)}function eR(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0;u=m,m=m+16|0,l=u+8|0,s=u,D=t[r>>2]|0,h=t[r+4>>2]|0,r=Fr(n)|0,t[s>>2]=D,t[s+4>>2]=h,t[l>>2]=t[s>>2],t[l+4>>2]=t[s+4>>2],tR(e,r,l,0),m=u}function tR(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0,S=0,L=0,k=0;l=m,m=m+32|0,s=l+16|0,k=l+8|0,D=l,L=t[r>>2]|0,S=t[r+4>>2]|0,h=t[e>>2]|0,e=AE()|0,t[k>>2]=L,t[k+4>>2]=S,t[s>>2]=t[k>>2],t[s+4>>2]=t[k+4>>2],r=nR(s)|0,t[D>>2]=L,t[D+4>>2]=S,t[s>>2]=t[D>>2],t[s+4>>2]=t[D+4>>2],wi(h,n,e,r,rR(s,u)|0,u),m=l}function AE(){var e=0,n=0;if(c[7856]|0||(Uw(10172),Wt(50,10172,se|0)|0,n=7856,t[n>>2]=1,t[n+4>>2]=0),!(sr(10172)|0)){e=10172,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Uw(10172)}return 10172}function nR(e){return e=e|0,0}function rR(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0,L=0,k=0,I=0;return k=m,m=m+32|0,l=k+24|0,h=k+16|0,D=k,S=k+8|0,s=t[e>>2]|0,u=t[e+4>>2]|0,t[D>>2]=s,t[D+4>>2]=u,I=AE()|0,L=I+24|0,e=hn(n,4)|0,t[S>>2]=e,n=I+28|0,r=t[n>>2]|0,r>>>0<(t[I+32>>2]|0)>>>0?(t[h>>2]=s,t[h+4>>2]=u,t[l>>2]=t[h>>2],t[l+4>>2]=t[h+4>>2],Bw(r,l,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(iR(L,D,S),e=t[n>>2]|0),m=k,((e-(t[L>>2]|0)|0)/12|0)+-1|0}function Bw(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;u=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=u,t[e+8>>2]=r}function iR(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,L=0,k=0,I=0,K=0;if(L=m,m=m+48|0,u=L+32|0,h=L+24|0,D=L,S=e+4|0,l=(((t[S>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,s=uR(e)|0,s>>>0>>0)hi(e);else{k=t[e>>2]|0,K=((t[e+8>>2]|0)-k|0)/12|0,I=K<<1,oR(D,K>>>0>>1>>>0?I>>>0>>0?l:I:s,((t[S>>2]|0)-k|0)/12|0,e+8|0),S=D+8|0,s=t[S>>2]|0,l=t[n+4>>2]|0,r=t[r>>2]|0,t[h>>2]=t[n>>2],t[h+4>>2]=l,t[u>>2]=t[h>>2],t[u+4>>2]=t[h+4>>2],Bw(s,u,r),t[S>>2]=(t[S>>2]|0)+12,lR(e,D),sR(D),m=L;return}}function uR(e){return e=e|0,357913941}function oR(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>357913941)$n();else{l=pn(n*12|0)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r*12|0)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n*12|0)}function lR(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(((l|0)/-12|0)*12|0)|0,t[s>>2]=r,(l|0)>0?(_r(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function sR(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~(((u+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&yt(e)}function Uw(e){e=e|0,cR(e)}function aR(e){e=e|0,fR(e+24|0)}function fR(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-u|0)>>>0)/12|0)*12|0)),yt(r))}function cR(e){e=e|0;var n=0;n=yr()|0,jn(e,2,3,n,dR()|0,2),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function dR(){return 1380}function pR(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0;l=m,m=m+16|0,s=l+8|0,h=l,D=hR(e)|0,e=t[D+4>>2]|0,t[h>>2]=t[D>>2],t[h+4>>2]=e,t[s>>2]=t[h>>2],t[s+4>>2]=t[h+4>>2],vR(n,s,r,u),m=l}function hR(e){return e=e|0,(t[(AE()|0)+24>>2]|0)+(e*12|0)|0}function vR(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0;D=m,m=m+16|0,s=D+1|0,h=D,l=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(l=t[(t[e>>2]|0)+l>>2]|0),As(s,r),s=Ys(s,r)|0,mR(h,u),h=gR(h,u)|0,Fg[l&15](e,s,h),m=D}function mR(e,n){e=e|0,n=n|0}function gR(e,n){return e=e|0,n=n|0,yR(n)|0}function yR(e){return e=e|0,(e|0)!=0|0}function _R(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0;s=t[e>>2]|0,l=RE()|0,e=ER(r)|0,wi(s,n,l,e,DR(r,u)|0,u)}function RE(){var e=0,n=0;if(c[7864]|0||(zw(10208),Wt(51,10208,se|0)|0,n=7864,t[n>>2]=1,t[n+4>>2]=0),!(sr(10208)|0)){e=10208,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));zw(10208)}return 10208}function ER(e){return e=e|0,e|0}function DR(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0;return D=m,m=m+16|0,l=D,s=D+4|0,t[l>>2]=e,S=RE()|0,h=S+24|0,n=hn(n,4)|0,t[s>>2]=n,r=S+28|0,u=t[r>>2]|0,u>>>0<(t[S+32>>2]|0)>>>0?(jw(u,e,n),n=(t[r>>2]|0)+8|0,t[r>>2]=n):(wR(h,l,s),n=t[r>>2]|0),m=D,(n-(t[h>>2]|0)>>3)+-1|0}function jw(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r}function wR(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,L=0,k=0;if(D=m,m=m+32|0,l=D,s=e+4|0,h=((t[s>>2]|0)-(t[e>>2]|0)>>3)+1|0,u=SR(e)|0,u>>>0>>0)hi(e);else{S=t[e>>2]|0,k=(t[e+8>>2]|0)-S|0,L=k>>2,TR(l,k>>3>>>0>>1>>>0?L>>>0>>0?h:L:u,(t[s>>2]|0)-S>>3,e+8|0),h=l+8|0,jw(t[h>>2]|0,t[n>>2]|0,t[r>>2]|0),t[h>>2]=(t[h>>2]|0)+8,CR(e,l),xR(l),m=D;return}}function SR(e){return e=e|0,536870911}function TR(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>536870911)$n();else{l=pn(n<<3)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r<<3)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n<<3)}function CR(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(0-(l>>3)<<3)|0,t[s>>2]=r,(l|0)>0?(_r(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function xR(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~((u+-8-n|0)>>>3)<<3)),e=t[e>>2]|0,e|0&&yt(e)}function zw(e){e=e|0,OR(e)}function AR(e){e=e|0,RR(e+24|0)}function RR(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-u|0)>>>3)<<3)),yt(r))}function OR(e){e=e|0;var n=0;n=yr()|0,jn(e,1,24,n,MR()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function MR(){return 1392}function kR(e,n){e=e|0,n=n|0,NR(t[(LR(e)|0)>>2]|0,n)}function LR(e){return e=e|0,(t[(RE()|0)+24>>2]|0)+(e<<3)|0}function NR(e,n){e=e|0,n=n|0;var r=0,u=0;r=m,m=m+16|0,u=r,N0(u,n),n=$i(u,n)|0,P1[e&127](n),m=r}function FR(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0;s=t[e>>2]|0,l=OE()|0,e=PR(r)|0,wi(s,n,l,e,IR(r,u)|0,u)}function OE(){var e=0,n=0;if(c[7872]|0||(qw(10244),Wt(52,10244,se|0)|0,n=7872,t[n>>2]=1,t[n+4>>2]=0),!(sr(10244)|0)){e=10244,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));qw(10244)}return 10244}function PR(e){return e=e|0,e|0}function IR(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0;return D=m,m=m+16|0,l=D,s=D+4|0,t[l>>2]=e,S=OE()|0,h=S+24|0,n=hn(n,4)|0,t[s>>2]=n,r=S+28|0,u=t[r>>2]|0,u>>>0<(t[S+32>>2]|0)>>>0?(Hw(u,e,n),n=(t[r>>2]|0)+8|0,t[r>>2]=n):(bR(h,l,s),n=t[r>>2]|0),m=D,(n-(t[h>>2]|0)>>3)+-1|0}function Hw(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r}function bR(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,L=0,k=0;if(D=m,m=m+32|0,l=D,s=e+4|0,h=((t[s>>2]|0)-(t[e>>2]|0)>>3)+1|0,u=BR(e)|0,u>>>0>>0)hi(e);else{S=t[e>>2]|0,k=(t[e+8>>2]|0)-S|0,L=k>>2,UR(l,k>>3>>>0>>1>>>0?L>>>0>>0?h:L:u,(t[s>>2]|0)-S>>3,e+8|0),h=l+8|0,Hw(t[h>>2]|0,t[n>>2]|0,t[r>>2]|0),t[h>>2]=(t[h>>2]|0)+8,jR(e,l),zR(l),m=D;return}}function BR(e){return e=e|0,536870911}function UR(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>536870911)$n();else{l=pn(n<<3)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r<<3)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n<<3)}function jR(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(0-(l>>3)<<3)|0,t[s>>2]=r,(l|0)>0?(_r(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function zR(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~((u+-8-n|0)>>>3)<<3)),e=t[e>>2]|0,e|0&&yt(e)}function qw(e){e=e|0,WR(e)}function HR(e){e=e|0,qR(e+24|0)}function qR(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-u|0)>>>3)<<3)),yt(r))}function WR(e){e=e|0;var n=0;n=yr()|0,jn(e,1,16,n,VR()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function VR(){return 1400}function GR(e){return e=e|0,KR(t[(YR(e)|0)>>2]|0)|0}function YR(e){return e=e|0,(t[(OE()|0)+24>>2]|0)+(e<<3)|0}function KR(e){return e=e|0,XR(k_[e&7]()|0)|0}function XR(e){return e=e|0,e|0}function QR(){var e=0;return c[7880]|0||(r7(10280),Wt(25,10280,se|0)|0,e=7880,t[e>>2]=1,t[e+4>>2]=0),10280}function JR(e,n){e=e|0,n=n|0,t[e>>2]=ZR()|0,t[e+4>>2]=$R()|0,t[e+12>>2]=n,t[e+8>>2]=e7()|0,t[e+32>>2]=4}function ZR(){return 11711}function $R(){return 1356}function e7(){return N1()|0}function t7(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0,(Hl(u,896)|0)==512?r|0&&(n7(r),yt(r)):n|0&&(ro(n),yt(n))}function n7(e){e=e|0,e=t[e+4>>2]|0,e|0&&t2(e)}function r7(e){e=e|0,Qa(e)}function i7(e){e=e|0,u7(e,4920),o7(e)|0,l7(e)|0}function u7(e,n){e=e|0,n=n|0;var r=0;r=Wd()|0,t[e>>2]=r,R7(r,n),e2(t[e>>2]|0)}function o7(e){e=e|0;var n=0;return n=t[e>>2]|0,Gp(n,y7()|0),e|0}function l7(e){e=e|0;var n=0;return n=t[e>>2]|0,Gp(n,s7()|0),e|0}function s7(){var e=0;return c[7888]|0||(Ww(10328),Wt(53,10328,se|0)|0,e=7888,t[e>>2]=1,t[e+4>>2]=0),sr(10328)|0||Ww(10328),10328}function Gp(e,n){e=e|0,n=n|0,wi(e,0,n,0,0,0)}function Ww(e){e=e|0,c7(e),Yp(e,10)}function a7(e){e=e|0,f7(e+24|0)}function f7(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-u|0)>>>3)<<3)),yt(r))}function c7(e){e=e|0;var n=0;n=yr()|0,jn(e,5,1,n,v7()|0,2),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function d7(e,n,r){e=e|0,n=n|0,r=+r,p7(e,n,r)}function Yp(e,n){e=e|0,n=n|0,t[e+20>>2]=n}function p7(e,n,r){e=e|0,n=n|0,r=+r;var u=0,l=0,s=0,h=0,D=0;u=m,m=m+16|0,s=u+8|0,D=u+13|0,l=u,h=u+12|0,As(D,n),t[s>>2]=Ys(D,n)|0,Pl(h,r),B[l>>3]=+os(h,r),h7(e,s,l),m=u}function h7(e,n,r){e=e|0,n=n|0,r=r|0,b(e+8|0,t[n>>2]|0,+B[r>>3]),c[e+24>>0]=1}function v7(){return 1404}function m7(e,n){return e=e|0,n=+n,g7(e,n)|0}function g7(e,n){e=e|0,n=+n;var r=0,u=0,l=0,s=0,h=0,D=0,S=0;return u=m,m=m+16|0,s=u+4|0,h=u+8|0,D=u,l=Ma(8)|0,r=l,S=pn(16)|0,As(s,e),e=Ys(s,e)|0,Pl(h,n),b(S,e,+os(h,n)),h=r+4|0,t[h>>2]=S,e=pn(8)|0,h=t[h>>2]|0,t[D>>2]=0,t[s>>2]=t[D>>2],Uf(e,h,s),t[l>>2]=e,m=u,r|0}function y7(){var e=0;return c[7896]|0||(Vw(10364),Wt(54,10364,se|0)|0,e=7896,t[e>>2]=1,t[e+4>>2]=0),sr(10364)|0||Vw(10364),10364}function Vw(e){e=e|0,D7(e),Yp(e,55)}function _7(e){e=e|0,E7(e+24|0)}function E7(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-u|0)>>>3)<<3)),yt(r))}function D7(e){e=e|0;var n=0;n=yr()|0,jn(e,5,4,n,C7()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function w7(e){e=e|0,S7(e)}function S7(e){e=e|0,T7(e)}function T7(e){e=e|0,Gw(e+8|0),c[e+24>>0]=1}function Gw(e){e=e|0,t[e>>2]=0,B[e+8>>3]=0}function C7(){return 1424}function x7(){return A7()|0}function A7(){var e=0,n=0,r=0,u=0,l=0,s=0,h=0;return n=m,m=m+16|0,l=n+4|0,h=n,r=Ma(8)|0,e=r,u=pn(16)|0,Gw(u),s=e+4|0,t[s>>2]=u,u=pn(8)|0,s=t[s>>2]|0,t[h>>2]=0,t[l>>2]=t[h>>2],Uf(u,s,l),t[r>>2]=u,m=n,e|0}function R7(e,n){e=e|0,n=n|0,t[e>>2]=O7()|0,t[e+4>>2]=M7()|0,t[e+12>>2]=n,t[e+8>>2]=k7()|0,t[e+32>>2]=5}function O7(){return 11710}function M7(){return 1416}function k7(){return __()|0}function L7(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0,(Hl(u,896)|0)==512?r|0&&(N7(r),yt(r)):n|0&&yt(n)}function N7(e){e=e|0,e=t[e+4>>2]|0,e|0&&t2(e)}function __(){var e=0;return c[7904]|0||(t[2600]=F7()|0,t[2601]=0,e=7904,t[e>>2]=1,t[e+4>>2]=0),10400}function F7(){return t[357]|0}function P7(e){e=e|0,I7(e,4926),b7(e)|0}function I7(e,n){e=e|0,n=n|0;var r=0;r=Xa()|0,t[e>>2]=r,K7(r,n),e2(t[e>>2]|0)}function b7(e){e=e|0;var n=0;return n=t[e>>2]|0,Gp(n,B7()|0),e|0}function B7(){var e=0;return c[7912]|0||(Yw(10412),Wt(56,10412,se|0)|0,e=7912,t[e>>2]=1,t[e+4>>2]=0),sr(10412)|0||Yw(10412),10412}function Yw(e){e=e|0,z7(e),Yp(e,57)}function U7(e){e=e|0,j7(e+24|0)}function j7(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-u|0)>>>3)<<3)),yt(r))}function z7(e){e=e|0;var n=0;n=yr()|0,jn(e,5,5,n,V7()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function H7(e){e=e|0,q7(e)}function q7(e){e=e|0,W7(e)}function W7(e){e=e|0;var n=0,r=0;n=e+8|0,r=n+48|0;do t[n>>2]=0,n=n+4|0;while((n|0)<(r|0));c[e+56>>0]=1}function V7(){return 1432}function G7(){return Y7()|0}function Y7(){var e=0,n=0,r=0,u=0,l=0,s=0,h=0,D=0;h=m,m=m+16|0,e=h+4|0,n=h,r=Ma(8)|0,u=r,l=pn(48)|0,s=l,D=s+48|0;do t[s>>2]=0,s=s+4|0;while((s|0)<(D|0));return s=u+4|0,t[s>>2]=l,D=pn(8)|0,s=t[s>>2]|0,t[n>>2]=0,t[e>>2]=t[n>>2],Th(D,s,e),t[r>>2]=D,m=h,u|0}function K7(e,n){e=e|0,n=n|0,t[e>>2]=X7()|0,t[e+4>>2]=Q7()|0,t[e+12>>2]=n,t[e+8>>2]=J7()|0,t[e+32>>2]=6}function X7(){return 11704}function Q7(){return 1436}function J7(){return __()|0}function Z7(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0,(Hl(u,896)|0)==512?r|0&&($7(r),yt(r)):n|0&&yt(n)}function $7(e){e=e|0,e=t[e+4>>2]|0,e|0&&t2(e)}function eO(e){e=e|0,tO(e,4933),nO(e)|0,rO(e)|0}function tO(e,n){e=e|0,n=n|0;var r=0;r=AO()|0,t[e>>2]=r,RO(r,n),e2(t[e>>2]|0)}function nO(e){e=e|0;var n=0;return n=t[e>>2]|0,Gp(n,gO()|0),e|0}function rO(e){e=e|0;var n=0;return n=t[e>>2]|0,Gp(n,iO()|0),e|0}function iO(){var e=0;return c[7920]|0||(Kw(10452),Wt(58,10452,se|0)|0,e=7920,t[e>>2]=1,t[e+4>>2]=0),sr(10452)|0||Kw(10452),10452}function Kw(e){e=e|0,lO(e),Yp(e,1)}function uO(e){e=e|0,oO(e+24|0)}function oO(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-u|0)>>>3)<<3)),yt(r))}function lO(e){e=e|0;var n=0;n=yr()|0,jn(e,5,1,n,cO()|0,2),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function sO(e,n,r){e=e|0,n=+n,r=+r,aO(e,n,r)}function aO(e,n,r){e=e|0,n=+n,r=+r;var u=0,l=0,s=0,h=0,D=0;u=m,m=m+32|0,s=u+8|0,D=u+17|0,l=u,h=u+16|0,Pl(D,n),B[s>>3]=+os(D,n),Pl(h,r),B[l>>3]=+os(h,r),fO(e,s,l),m=u}function fO(e,n,r){e=e|0,n=n|0,r=r|0,Xw(e+8|0,+B[n>>3],+B[r>>3]),c[e+24>>0]=1}function Xw(e,n,r){e=e|0,n=+n,r=+r,B[e>>3]=n,B[e+8>>3]=r}function cO(){return 1472}function dO(e,n){return e=+e,n=+n,pO(e,n)|0}function pO(e,n){e=+e,n=+n;var r=0,u=0,l=0,s=0,h=0,D=0,S=0;return u=m,m=m+16|0,h=u+4|0,D=u+8|0,S=u,l=Ma(8)|0,r=l,s=pn(16)|0,Pl(h,e),e=+os(h,e),Pl(D,n),Xw(s,e,+os(D,n)),D=r+4|0,t[D>>2]=s,s=pn(8)|0,D=t[D>>2]|0,t[S>>2]=0,t[h>>2]=t[S>>2],Qw(s,D,h),t[l>>2]=s,m=u,r|0}function Qw(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,r=pn(16)|0,t[r+4>>2]=0,t[r+8>>2]=0,t[r>>2]=1452,t[r+12>>2]=n,t[e+4>>2]=r}function hO(e){e=e|0,Uv(e),yt(e)}function vO(e){e=e|0,e=t[e+12>>2]|0,e|0&&yt(e)}function mO(e){e=e|0,yt(e)}function gO(){var e=0;return c[7928]|0||(Jw(10488),Wt(59,10488,se|0)|0,e=7928,t[e>>2]=1,t[e+4>>2]=0),sr(10488)|0||Jw(10488),10488}function Jw(e){e=e|0,EO(e),Yp(e,60)}function yO(e){e=e|0,_O(e+24|0)}function _O(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-u|0)>>>3)<<3)),yt(r))}function EO(e){e=e|0;var n=0;n=yr()|0,jn(e,5,6,n,TO()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function DO(e){e=e|0,wO(e)}function wO(e){e=e|0,SO(e)}function SO(e){e=e|0,Zw(e+8|0),c[e+24>>0]=1}function Zw(e){e=e|0,t[e>>2]=0,t[e+4>>2]=0,t[e+8>>2]=0,t[e+12>>2]=0}function TO(){return 1492}function CO(){return xO()|0}function xO(){var e=0,n=0,r=0,u=0,l=0,s=0,h=0;return n=m,m=m+16|0,l=n+4|0,h=n,r=Ma(8)|0,e=r,u=pn(16)|0,Zw(u),s=e+4|0,t[s>>2]=u,u=pn(8)|0,s=t[s>>2]|0,t[h>>2]=0,t[l>>2]=t[h>>2],Qw(u,s,l),t[r>>2]=u,m=n,e|0}function AO(){var e=0;return c[7936]|0||(FO(10524),Wt(25,10524,se|0)|0,e=7936,t[e>>2]=1,t[e+4>>2]=0),10524}function RO(e,n){e=e|0,n=n|0,t[e>>2]=OO()|0,t[e+4>>2]=MO()|0,t[e+12>>2]=n,t[e+8>>2]=kO()|0,t[e+32>>2]=7}function OO(){return 11700}function MO(){return 1484}function kO(){return __()|0}function LO(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0,(Hl(u,896)|0)==512?r|0&&(NO(r),yt(r)):n|0&&yt(n)}function NO(e){e=e|0,e=t[e+4>>2]|0,e|0&&t2(e)}function FO(e){e=e|0,Qa(e)}function PO(e,n,r){e=e|0,n=n|0,r=r|0,e=Fr(n)|0,n=IO(r)|0,r=bO(r,0)|0,pM(e,n,r,ME()|0,0)}function IO(e){return e=e|0,e|0}function bO(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0;return D=m,m=m+16|0,l=D,s=D+4|0,t[l>>2]=e,S=ME()|0,h=S+24|0,n=hn(n,4)|0,t[s>>2]=n,r=S+28|0,u=t[r>>2]|0,u>>>0<(t[S+32>>2]|0)>>>0?(e8(u,e,n),n=(t[r>>2]|0)+8|0,t[r>>2]=n):(WO(h,l,s),n=t[r>>2]|0),m=D,(n-(t[h>>2]|0)>>3)+-1|0}function ME(){var e=0,n=0;if(c[7944]|0||($w(10568),Wt(61,10568,se|0)|0,n=7944,t[n>>2]=1,t[n+4>>2]=0),!(sr(10568)|0)){e=10568,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));$w(10568)}return 10568}function $w(e){e=e|0,jO(e)}function BO(e){e=e|0,UO(e+24|0)}function UO(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-u|0)>>>3)<<3)),yt(r))}function jO(e){e=e|0;var n=0;n=yr()|0,jn(e,1,17,n,ev()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function zO(e){return e=e|0,qO(t[(HO(e)|0)>>2]|0)|0}function HO(e){return e=e|0,(t[(ME()|0)+24>>2]|0)+(e<<3)|0}function qO(e){return e=e|0,H0(k_[e&7]()|0)|0}function e8(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r}function WO(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,L=0,k=0;if(D=m,m=m+32|0,l=D,s=e+4|0,h=((t[s>>2]|0)-(t[e>>2]|0)>>3)+1|0,u=VO(e)|0,u>>>0>>0)hi(e);else{S=t[e>>2]|0,k=(t[e+8>>2]|0)-S|0,L=k>>2,GO(l,k>>3>>>0>>1>>>0?L>>>0>>0?h:L:u,(t[s>>2]|0)-S>>3,e+8|0),h=l+8|0,e8(t[h>>2]|0,t[n>>2]|0,t[r>>2]|0),t[h>>2]=(t[h>>2]|0)+8,YO(e,l),KO(l),m=D;return}}function VO(e){return e=e|0,536870911}function GO(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>536870911)$n();else{l=pn(n<<3)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r<<3)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n<<3)}function YO(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(0-(l>>3)<<3)|0,t[s>>2]=r,(l|0)>0?(_r(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function KO(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~((u+-8-n|0)>>>3)<<3)),e=t[e>>2]|0,e|0&&yt(e)}function XO(){QO()}function QO(){JO(10604)}function JO(e){e=e|0,ZO(e,4955)}function ZO(e,n){e=e|0,n=n|0;var r=0;r=$O()|0,t[e>>2]=r,eM(r,n),e2(t[e>>2]|0)}function $O(){var e=0;return c[7952]|0||(aM(10612),Wt(25,10612,se|0)|0,e=7952,t[e>>2]=1,t[e+4>>2]=0),10612}function eM(e,n){e=e|0,n=n|0,t[e>>2]=iM()|0,t[e+4>>2]=uM()|0,t[e+12>>2]=n,t[e+8>>2]=oM()|0,t[e+32>>2]=8}function e2(e){e=e|0;var n=0,r=0;n=m,m=m+16|0,r=n,Fv()|0,t[r>>2]=e,tM(10608,r),m=n}function Fv(){return c[11714]|0||(t[2652]=0,Wt(62,10608,se|0)|0,c[11714]=1),10608}function tM(e,n){e=e|0,n=n|0;var r=0;r=pn(8)|0,t[r+4>>2]=t[n>>2],t[r>>2]=t[e>>2],t[e>>2]=r}function nM(e){e=e|0,rM(e)}function rM(e){e=e|0;var n=0,r=0;if(n=t[e>>2]|0,n|0)do r=n,n=t[n>>2]|0,yt(r);while((n|0)!=0);t[e>>2]=0}function iM(){return 11715}function uM(){return 1496}function oM(){return N1()|0}function lM(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0,(Hl(u,896)|0)==512?r|0&&(sM(r),yt(r)):n|0&&yt(n)}function sM(e){e=e|0,e=t[e+4>>2]|0,e|0&&t2(e)}function aM(e){e=e|0,Qa(e)}function fM(e,n){e=e|0,n=n|0;var r=0,u=0;Fv()|0,r=t[2652]|0;e:do if(r|0){for(;u=t[r+4>>2]|0,!(u|0?(P8(kE(u)|0,e)|0)==0:0);)if(r=t[r>>2]|0,!r)break e;cM(u,n)}while(0)}function kE(e){return e=e|0,t[e+12>>2]|0}function cM(e,n){e=e|0,n=n|0;var r=0;e=e+36|0,r=t[e>>2]|0,r|0&&(ca(r),yt(r)),r=pn(4)|0,Sf(r,n),t[e>>2]=r}function LE(){return c[11716]|0||(t[2664]=0,Wt(63,10656,se|0)|0,c[11716]=1),10656}function t8(){var e=0;return c[11717]|0?e=t[2665]|0:(dM(),t[2665]=1504,c[11717]=1,e=1504),e|0}function dM(){c[11740]|0||(c[11718]=hn(hn(8,0)|0,0)|0,c[11719]=hn(hn(0,0)|0,0)|0,c[11720]=hn(hn(0,16)|0,0)|0,c[11721]=hn(hn(8,0)|0,0)|0,c[11722]=hn(hn(0,0)|0,0)|0,c[11723]=hn(hn(8,0)|0,0)|0,c[11724]=hn(hn(0,0)|0,0)|0,c[11725]=hn(hn(8,0)|0,0)|0,c[11726]=hn(hn(0,0)|0,0)|0,c[11727]=hn(hn(8,0)|0,0)|0,c[11728]=hn(hn(0,0)|0,0)|0,c[11729]=hn(hn(0,0)|0,32)|0,c[11730]=hn(hn(0,0)|0,32)|0,c[11740]=1)}function n8(){return 1572}function pM(e,n,r,u,l){e=e|0,n=n|0,r=r|0,u=u|0,l=l|0;var s=0,h=0,D=0,S=0,L=0,k=0;s=m,m=m+32|0,k=s+16|0,L=s+12|0,S=s+8|0,D=s+4|0,h=s,t[k>>2]=e,t[L>>2]=n,t[S>>2]=r,t[D>>2]=u,t[h>>2]=l,LE()|0,hM(10656,k,L,S,D,h),m=s}function hM(e,n,r,u,l,s){e=e|0,n=n|0,r=r|0,u=u|0,l=l|0,s=s|0;var h=0;h=pn(24)|0,yd(h+4|0,t[n>>2]|0,t[r>>2]|0,t[u>>2]|0,t[l>>2]|0,t[s>>2]|0),t[h>>2]=t[e>>2],t[e>>2]=h}function r8(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,L=0,k=0,I=0,K=0,be=0,Se=0,ge=0,Ze=0,Ge=0,ct=0;if(ct=m,m=m+32|0,Se=ct+20|0,ge=ct+8|0,Ze=ct+4|0,Ge=ct,n=t[n>>2]|0,n|0){be=Se+4|0,S=Se+8|0,L=ge+4|0,k=ge+8|0,I=ge+8|0,K=Se+8|0;do{if(h=n+4|0,D=NE(h)|0,D|0){if(l=Rg(D)|0,t[Se>>2]=0,t[be>>2]=0,t[S>>2]=0,u=(Og(D)|0)+1|0,vM(Se,u),u|0)for(;u=u+-1|0,Yf(ge,t[l>>2]|0),s=t[be>>2]|0,s>>>0<(t[K>>2]|0)>>>0?(t[s>>2]=t[ge>>2],t[be>>2]=(t[be>>2]|0)+4):FE(Se,ge),u;)l=l+4|0;u=Mg(D)|0,t[ge>>2]=0,t[L>>2]=0,t[k>>2]=0;e:do if(t[u>>2]|0)for(l=0,s=0;;){if((l|0)==(s|0)?mM(ge,u):(t[l>>2]=t[u>>2],t[L>>2]=(t[L>>2]|0)+4),u=u+4|0,!(t[u>>2]|0))break e;l=t[L>>2]|0,s=t[I>>2]|0}while(0);t[Ze>>2]=E_(h)|0,t[Ge>>2]=sr(D)|0,gM(r,e,Ze,Ge,Se,ge),PE(ge),F1(Se)}n=t[n>>2]|0}while((n|0)!=0)}m=ct}function NE(e){return e=e|0,t[e+12>>2]|0}function Rg(e){return e=e|0,t[e+12>>2]|0}function Og(e){return e=e|0,t[e+16>>2]|0}function vM(e,n){e=e|0,n=n|0;var r=0,u=0,l=0;l=m,m=m+32|0,r=l,u=t[e>>2]|0,(t[e+8>>2]|0)-u>>2>>>0>>0&&(c8(r,n,(t[e+4>>2]|0)-u>>2,e+8|0),d8(e,r),p8(r)),m=l}function FE(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0,L=0;if(h=m,m=m+32|0,r=h,u=e+4|0,l=((t[u>>2]|0)-(t[e>>2]|0)>>2)+1|0,s=f8(e)|0,s>>>0>>0)hi(e);else{D=t[e>>2]|0,L=(t[e+8>>2]|0)-D|0,S=L>>1,c8(r,L>>2>>>0>>1>>>0?S>>>0>>0?l:S:s,(t[u>>2]|0)-D>>2,e+8|0),s=r+8|0,t[t[s>>2]>>2]=t[n>>2],t[s>>2]=(t[s>>2]|0)+4,d8(e,r),p8(r),m=h;return}}function Mg(e){return e=e|0,t[e+8>>2]|0}function mM(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0,L=0;if(h=m,m=m+32|0,r=h,u=e+4|0,l=((t[u>>2]|0)-(t[e>>2]|0)>>2)+1|0,s=a8(e)|0,s>>>0>>0)hi(e);else{D=t[e>>2]|0,L=(t[e+8>>2]|0)-D|0,S=L>>1,IM(r,L>>2>>>0>>1>>>0?S>>>0>>0?l:S:s,(t[u>>2]|0)-D>>2,e+8|0),s=r+8|0,t[t[s>>2]>>2]=t[n>>2],t[s>>2]=(t[s>>2]|0)+4,bM(e,r),BM(r),m=h;return}}function E_(e){return e=e|0,t[e>>2]|0}function gM(e,n,r,u,l,s){e=e|0,n=n|0,r=r|0,u=u|0,l=l|0,s=s|0,yM(e,n,r,u,l,s)}function PE(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-4-u|0)>>>2)<<2)),yt(r))}function F1(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-4-u|0)>>>2)<<2)),yt(r))}function yM(e,n,r,u,l,s){e=e|0,n=n|0,r=r|0,u=u|0,l=l|0,s=s|0;var h=0,D=0,S=0,L=0,k=0,I=0;h=m,m=m+48|0,k=h+40|0,D=h+32|0,I=h+24|0,S=h+12|0,L=h,ka(D),e=yo(e)|0,t[I>>2]=t[n>>2],r=t[r>>2]|0,u=t[u>>2]|0,IE(S,l),_M(L,s),t[k>>2]=t[I>>2],EM(e,k,r,u,S,L),PE(L),F1(S),La(D),m=h}function IE(e,n){e=e|0,n=n|0;var r=0,u=0;t[e>>2]=0,t[e+4>>2]=0,t[e+8>>2]=0,r=n+4|0,u=(t[r>>2]|0)-(t[n>>2]|0)>>2,u|0&&(FM(e,u),PM(e,t[n>>2]|0,t[r>>2]|0,u))}function _M(e,n){e=e|0,n=n|0;var r=0,u=0;t[e>>2]=0,t[e+4>>2]=0,t[e+8>>2]=0,r=n+4|0,u=(t[r>>2]|0)-(t[n>>2]|0)>>2,u|0&&(LM(e,u),NM(e,t[n>>2]|0,t[r>>2]|0,u))}function EM(e,n,r,u,l,s){e=e|0,n=n|0,r=r|0,u=u|0,l=l|0,s=s|0;var h=0,D=0,S=0,L=0,k=0,I=0;h=m,m=m+32|0,k=h+28|0,I=h+24|0,D=h+12|0,S=h,L=_o(DM()|0)|0,t[I>>2]=t[n>>2],t[k>>2]=t[I>>2],n=Kp(k)|0,r=i8(r)|0,u=bE(u)|0,t[D>>2]=t[l>>2],k=l+4|0,t[D+4>>2]=t[k>>2],I=l+8|0,t[D+8>>2]=t[I>>2],t[I>>2]=0,t[k>>2]=0,t[l>>2]=0,l=BE(D)|0,t[S>>2]=t[s>>2],k=s+4|0,t[S+4>>2]=t[k>>2],I=s+8|0,t[S+8>>2]=t[I>>2],t[I>>2]=0,t[k>>2]=0,t[s>>2]=0,X0(0,L|0,e|0,n|0,r|0,u|0,l|0,wM(S)|0)|0,PE(S),F1(D),m=h}function DM(){var e=0;return c[7968]|0||(MM(10708),e=7968,t[e>>2]=1,t[e+4>>2]=0),10708}function Kp(e){return e=e|0,o8(e)|0}function i8(e){return e=e|0,u8(e)|0}function bE(e){return e=e|0,H0(e)|0}function BE(e){return e=e|0,TM(e)|0}function wM(e){return e=e|0,SM(e)|0}function SM(e){e=e|0;var n=0,r=0,u=0;if(u=(t[e+4>>2]|0)-(t[e>>2]|0)|0,r=u>>2,u=Ma(u+4|0)|0,t[u>>2]=r,r|0){n=0;do t[u+4+(n<<2)>>2]=u8(t[(t[e>>2]|0)+(n<<2)>>2]|0)|0,n=n+1|0;while((n|0)!=(r|0))}return u|0}function u8(e){return e=e|0,e|0}function TM(e){e=e|0;var n=0,r=0,u=0;if(u=(t[e+4>>2]|0)-(t[e>>2]|0)|0,r=u>>2,u=Ma(u+4|0)|0,t[u>>2]=r,r|0){n=0;do t[u+4+(n<<2)>>2]=o8((t[e>>2]|0)+(n<<2)|0)|0,n=n+1|0;while((n|0)!=(r|0))}return u|0}function o8(e){e=e|0;var n=0,r=0,u=0,l=0;return l=m,m=m+32|0,n=l+12|0,r=l,u=Iu(l8()|0)|0,u?(is(n,u),kf(r,n),lF(e,r),e=xs(n)|0):e=CM(e)|0,m=l,e|0}function l8(){var e=0;return c[7960]|0||(OM(10664),Wt(25,10664,se|0)|0,e=7960,t[e>>2]=1,t[e+4>>2]=0),10664}function CM(e){e=e|0;var n=0,r=0,u=0,l=0,s=0,h=0,D=0;return r=m,m=m+16|0,l=r+4|0,h=r,u=Ma(8)|0,n=u,D=pn(4)|0,t[D>>2]=t[e>>2],s=n+4|0,t[s>>2]=D,e=pn(8)|0,s=t[s>>2]|0,t[h>>2]=0,t[l>>2]=t[h>>2],s8(e,s,l),t[u>>2]=e,m=r,n|0}function s8(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,r=pn(16)|0,t[r+4>>2]=0,t[r+8>>2]=0,t[r>>2]=1656,t[r+12>>2]=n,t[e+4>>2]=r}function xM(e){e=e|0,Uv(e),yt(e)}function AM(e){e=e|0,e=t[e+12>>2]|0,e|0&&yt(e)}function RM(e){e=e|0,yt(e)}function OM(e){e=e|0,Qa(e)}function MM(e){e=e|0,ll(e,kM()|0,5)}function kM(){return 1676}function LM(e,n){e=e|0,n=n|0;var r=0;if((a8(e)|0)>>>0>>0&&hi(e),n>>>0>1073741823)$n();else{r=pn(n<<2)|0,t[e+4>>2]=r,t[e>>2]=r,t[e+8>>2]=r+(n<<2);return}}function NM(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0,u=e+4|0,e=r-n|0,(e|0)>0&&(_r(t[u>>2]|0,n|0,e|0)|0,t[u>>2]=(t[u>>2]|0)+(e>>>2<<2))}function a8(e){return e=e|0,1073741823}function FM(e,n){e=e|0,n=n|0;var r=0;if((f8(e)|0)>>>0>>0&&hi(e),n>>>0>1073741823)$n();else{r=pn(n<<2)|0,t[e+4>>2]=r,t[e>>2]=r,t[e+8>>2]=r+(n<<2);return}}function PM(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0,u=e+4|0,e=r-n|0,(e|0)>0&&(_r(t[u>>2]|0,n|0,e|0)|0,t[u>>2]=(t[u>>2]|0)+(e>>>2<<2))}function f8(e){return e=e|0,1073741823}function IM(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>1073741823)$n();else{l=pn(n<<2)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r<<2)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n<<2)}function bM(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(0-(l>>2)<<2)|0,t[s>>2]=r,(l|0)>0?(_r(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function BM(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~((u+-4-n|0)>>>2)<<2)),e=t[e>>2]|0,e|0&&yt(e)}function c8(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>1073741823)$n();else{l=pn(n<<2)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r<<2)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n<<2)}function d8(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(0-(l>>2)<<2)|0,t[s>>2]=r,(l|0)>0?(_r(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function p8(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~((u+-4-n|0)>>>2)<<2)),e=t[e>>2]|0,e|0&&yt(e)}function UM(e,n,r,u,l){e=e|0,n=n|0,r=r|0,u=u|0,l=l|0;var s=0,h=0,D=0,S=0,L=0,k=0,I=0,K=0,be=0,Se=0,ge=0;if(ge=m,m=m+32|0,k=ge+20|0,I=ge+12|0,L=ge+16|0,K=ge+4|0,be=ge,Se=ge+8|0,D=t8()|0,s=t[D>>2]|0,h=t[s>>2]|0,h|0)for(S=t[D+8>>2]|0,D=t[D+4>>2]|0;Yf(k,h),jM(e,k,D,S),s=s+4|0,h=t[s>>2]|0,h;)S=S+1|0,D=D+1|0;if(s=n8()|0,h=t[s>>2]|0,h|0)do Yf(k,h),t[I>>2]=t[s+4>>2],zM(n,k,I),s=s+8|0,h=t[s>>2]|0;while((h|0)!=0);if(s=t[(Fv()|0)>>2]|0,s|0)do n=t[s+4>>2]|0,Yf(k,t[(Pv(n)|0)>>2]|0),t[I>>2]=kE(n)|0,HM(r,k,I),s=t[s>>2]|0;while((s|0)!=0);if(Yf(L,0),s=LE()|0,t[k>>2]=t[L>>2],r8(k,s,l),s=t[(Fv()|0)>>2]|0,s|0){e=k+4|0,n=k+8|0,r=k+8|0;do{if(S=t[s+4>>2]|0,Yf(I,t[(Pv(S)|0)>>2]|0),qM(K,h8(S)|0),h=t[K>>2]|0,h|0){t[k>>2]=0,t[e>>2]=0,t[n>>2]=0;do Yf(be,t[(Pv(t[h+4>>2]|0)|0)>>2]|0),D=t[e>>2]|0,D>>>0<(t[r>>2]|0)>>>0?(t[D>>2]=t[be>>2],t[e>>2]=(t[e>>2]|0)+4):FE(k,be),h=t[h>>2]|0;while((h|0)!=0);WM(u,I,k),F1(k)}t[Se>>2]=t[I>>2],L=v8(S)|0,t[k>>2]=t[Se>>2],r8(k,L,l),Ed(K),s=t[s>>2]|0}while((s|0)!=0)}m=ge}function jM(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0,nk(e,n,r,u)}function zM(e,n,r){e=e|0,n=n|0,r=r|0,tk(e,n,r)}function Pv(e){return e=e|0,e|0}function HM(e,n,r){e=e|0,n=n|0,r=r|0,JM(e,n,r)}function h8(e){return e=e|0,e+16|0}function qM(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0;if(s=m,m=m+16|0,l=s+8|0,r=s,t[e>>2]=0,u=t[n>>2]|0,t[l>>2]=u,t[r>>2]=e,r=QM(r)|0,u|0){if(u=pn(12)|0,h=(m8(l)|0)+4|0,e=t[h+4>>2]|0,n=u+4|0,t[n>>2]=t[h>>2],t[n+4>>2]=e,n=t[t[l>>2]>>2]|0,t[l>>2]=n,!n)e=u;else for(n=u;e=pn(12)|0,S=(m8(l)|0)+4|0,D=t[S+4>>2]|0,h=e+4|0,t[h>>2]=t[S>>2],t[h+4>>2]=D,t[n>>2]=e,h=t[t[l>>2]>>2]|0,t[l>>2]=h,h;)n=e;t[e>>2]=t[r>>2],t[r>>2]=u}m=s}function WM(e,n,r){e=e|0,n=n|0,r=r|0,VM(e,n,r)}function v8(e){return e=e|0,e+24|0}function VM(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0;u=m,m=m+32|0,h=u+24|0,l=u+16|0,D=u+12|0,s=u,ka(l),e=yo(e)|0,t[D>>2]=t[n>>2],IE(s,r),t[h>>2]=t[D>>2],GM(e,h,s),F1(s),La(l),m=u}function GM(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0;u=m,m=m+32|0,h=u+16|0,D=u+12|0,l=u,s=_o(YM()|0)|0,t[D>>2]=t[n>>2],t[h>>2]=t[D>>2],n=Kp(h)|0,t[l>>2]=t[r>>2],h=r+4|0,t[l+4>>2]=t[h>>2],D=r+8|0,t[l+8>>2]=t[D>>2],t[D>>2]=0,t[h>>2]=0,t[r>>2]=0,P0(0,s|0,e|0,n|0,BE(l)|0)|0,F1(l),m=u}function YM(){var e=0;return c[7976]|0||(KM(10720),e=7976,t[e>>2]=1,t[e+4>>2]=0),10720}function KM(e){e=e|0,ll(e,XM()|0,2)}function XM(){return 1732}function QM(e){return e=e|0,t[e>>2]|0}function m8(e){return e=e|0,t[e>>2]|0}function JM(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;u=m,m=m+32|0,s=u+16|0,l=u+8|0,h=u,ka(l),e=yo(e)|0,t[h>>2]=t[n>>2],r=t[r>>2]|0,t[s>>2]=t[h>>2],g8(e,s,r),La(l),m=u}function g8(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;u=m,m=m+16|0,s=u+4|0,h=u,l=_o(ZM()|0)|0,t[h>>2]=t[n>>2],t[s>>2]=t[h>>2],n=Kp(s)|0,P0(0,l|0,e|0,n|0,i8(r)|0)|0,m=u}function ZM(){var e=0;return c[7984]|0||($M(10732),e=7984,t[e>>2]=1,t[e+4>>2]=0),10732}function $M(e){e=e|0,ll(e,ek()|0,2)}function ek(){return 1744}function tk(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;u=m,m=m+32|0,s=u+16|0,l=u+8|0,h=u,ka(l),e=yo(e)|0,t[h>>2]=t[n>>2],r=t[r>>2]|0,t[s>>2]=t[h>>2],g8(e,s,r),La(l),m=u}function nk(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0;l=m,m=m+32|0,h=l+16|0,s=l+8|0,D=l,ka(s),e=yo(e)|0,t[D>>2]=t[n>>2],r=c[r>>0]|0,u=c[u>>0]|0,t[h>>2]=t[D>>2],rk(e,h,r,u),La(s),m=l}function rk(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0;l=m,m=m+16|0,h=l+4|0,D=l,s=_o(ik()|0)|0,t[D>>2]=t[n>>2],t[h>>2]=t[D>>2],n=Kp(h)|0,r=Iv(r)|0,Hn(0,s|0,e|0,n|0,r|0,Iv(u)|0)|0,m=l}function ik(){var e=0;return c[7992]|0||(ok(10744),e=7992,t[e>>2]=1,t[e+4>>2]=0),10744}function Iv(e){return e=e|0,uk(e)|0}function uk(e){return e=e|0,e&255|0}function ok(e){e=e|0,ll(e,lk()|0,3)}function lk(){return 1756}function sk(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,L=0,k=0,I=0,K=0;switch(K=m,m=m+32|0,D=K+8|0,S=K+4|0,L=K+20|0,k=K,Ta(e,0),u=oF(n)|0,t[D>>2]=0,I=D+4|0,t[I>>2]=0,t[D+8>>2]=0,u<<24>>24){case 0:{c[L>>0]=0,ak(S,r,L),D_(e,S)|0,U0(S);break}case 8:{I=WE(n)|0,c[L>>0]=8,Yf(k,t[I+4>>2]|0),fk(S,r,L,k,I+8|0),D_(e,S)|0,U0(S);break}case 9:{if(s=WE(n)|0,n=t[s+4>>2]|0,n|0)for(h=D+8|0,l=s+12|0;n=n+-1|0,Yf(S,t[l>>2]|0),u=t[I>>2]|0,u>>>0<(t[h>>2]|0)>>>0?(t[u>>2]=t[S>>2],t[I>>2]=(t[I>>2]|0)+4):FE(D,S),n;)l=l+4|0;c[L>>0]=9,Yf(k,t[s+8>>2]|0),ck(S,r,L,k,D),D_(e,S)|0,U0(S);break}default:I=WE(n)|0,c[L>>0]=u,Yf(k,t[I+4>>2]|0),dk(S,r,L,k),D_(e,S)|0,U0(S)}F1(D),m=K}function ak(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0;u=m,m=m+16|0,l=u,ka(l),n=yo(n)|0,Ck(e,n,c[r>>0]|0),La(l),m=u}function D_(e,n){e=e|0,n=n|0;var r=0;return r=t[e>>2]|0,r|0&&qr(r|0),t[e>>2]=t[n>>2],t[n>>2]=0,e|0}function fk(e,n,r,u,l){e=e|0,n=n|0,r=r|0,u=u|0,l=l|0;var s=0,h=0,D=0,S=0;s=m,m=m+32|0,D=s+16|0,h=s+8|0,S=s,ka(h),n=yo(n)|0,r=c[r>>0]|0,t[S>>2]=t[u>>2],l=t[l>>2]|0,t[D>>2]=t[S>>2],Dk(e,n,r,D,l),La(h),m=s}function ck(e,n,r,u,l){e=e|0,n=n|0,r=r|0,u=u|0,l=l|0;var s=0,h=0,D=0,S=0,L=0;s=m,m=m+32|0,S=s+24|0,h=s+16|0,L=s+12|0,D=s,ka(h),n=yo(n)|0,r=c[r>>0]|0,t[L>>2]=t[u>>2],IE(D,l),t[S>>2]=t[L>>2],gk(e,n,r,S,D),F1(D),La(h),m=s}function dk(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0;l=m,m=m+32|0,h=l+16|0,s=l+8|0,D=l,ka(s),n=yo(n)|0,r=c[r>>0]|0,t[D>>2]=t[u>>2],t[h>>2]=t[D>>2],pk(e,n,r,h),La(s),m=l}function pk(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0,h=0,D=0;l=m,m=m+16|0,s=l+4|0,D=l,h=_o(hk()|0)|0,r=Iv(r)|0,t[D>>2]=t[u>>2],t[s>>2]=t[D>>2],w_(e,P0(0,h|0,n|0,r|0,Kp(s)|0)|0),m=l}function hk(){var e=0;return c[8e3]|0||(vk(10756),e=8e3,t[e>>2]=1,t[e+4>>2]=0),10756}function w_(e,n){e=e|0,n=n|0,Ta(e,n)}function vk(e){e=e|0,ll(e,mk()|0,2)}function mk(){return 1772}function gk(e,n,r,u,l){e=e|0,n=n|0,r=r|0,u=u|0,l=l|0;var s=0,h=0,D=0,S=0,L=0;s=m,m=m+32|0,S=s+16|0,L=s+12|0,h=s,D=_o(yk()|0)|0,r=Iv(r)|0,t[L>>2]=t[u>>2],t[S>>2]=t[L>>2],u=Kp(S)|0,t[h>>2]=t[l>>2],S=l+4|0,t[h+4>>2]=t[S>>2],L=l+8|0,t[h+8>>2]=t[L>>2],t[L>>2]=0,t[S>>2]=0,t[l>>2]=0,w_(e,Hn(0,D|0,n|0,r|0,u|0,BE(h)|0)|0),F1(h),m=s}function yk(){var e=0;return c[8008]|0||(_k(10768),e=8008,t[e>>2]=1,t[e+4>>2]=0),10768}function _k(e){e=e|0,ll(e,Ek()|0,3)}function Ek(){return 1784}function Dk(e,n,r,u,l){e=e|0,n=n|0,r=r|0,u=u|0,l=l|0;var s=0,h=0,D=0,S=0;s=m,m=m+16|0,D=s+4|0,S=s,h=_o(wk()|0)|0,r=Iv(r)|0,t[S>>2]=t[u>>2],t[D>>2]=t[S>>2],u=Kp(D)|0,w_(e,Hn(0,h|0,n|0,r|0,u|0,bE(l)|0)|0),m=s}function wk(){var e=0;return c[8016]|0||(Sk(10780),e=8016,t[e>>2]=1,t[e+4>>2]=0),10780}function Sk(e){e=e|0,ll(e,Tk()|0,3)}function Tk(){return 1800}function Ck(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;u=_o(xk()|0)|0,w_(e,Ki(0,u|0,n|0,Iv(r)|0)|0)}function xk(){var e=0;return c[8024]|0||(Ak(10792),e=8024,t[e>>2]=1,t[e+4>>2]=0),10792}function Ak(e){e=e|0,ll(e,Rk()|0,1)}function Rk(){return 1816}function Ok(){Mk(),kk(),Lk()}function Mk(){t[2702]=V8(65536)|0}function kk(){Zk(10856)}function Lk(){Nk(10816)}function Nk(e){e=e|0,Fk(e,5044),Pk(e)|0}function Fk(e,n){e=e|0,n=n|0;var r=0;r=l8()|0,t[e>>2]=r,Gk(r,n),e2(t[e>>2]|0)}function Pk(e){e=e|0;var n=0;return n=t[e>>2]|0,Gp(n,Ik()|0),e|0}function Ik(){var e=0;return c[8032]|0||(y8(10820),Wt(64,10820,se|0)|0,e=8032,t[e>>2]=1,t[e+4>>2]=0),sr(10820)|0||y8(10820),10820}function y8(e){e=e|0,Uk(e),Yp(e,25)}function bk(e){e=e|0,Bk(e+24|0)}function Bk(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-u|0)>>>3)<<3)),yt(r))}function Uk(e){e=e|0;var n=0;n=yr()|0,jn(e,5,18,n,qk()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function jk(e,n){e=e|0,n=n|0,zk(e,n)}function zk(e,n){e=e|0,n=n|0;var r=0,u=0,l=0;r=m,m=m+16|0,u=r,l=r+4|0,If(l,n),t[u>>2]=bf(l,n)|0,Hk(e,u),m=r}function Hk(e,n){e=e|0,n=n|0,_8(e+4|0,t[n>>2]|0),c[e+8>>0]=1}function _8(e,n){e=e|0,n=n|0,t[e>>2]=n}function qk(){return 1824}function Wk(e){return e=e|0,Vk(e)|0}function Vk(e){e=e|0;var n=0,r=0,u=0,l=0,s=0,h=0,D=0;return r=m,m=m+16|0,l=r+4|0,h=r,u=Ma(8)|0,n=u,D=pn(4)|0,If(l,e),_8(D,bf(l,e)|0),s=n+4|0,t[s>>2]=D,e=pn(8)|0,s=t[s>>2]|0,t[h>>2]=0,t[l>>2]=t[h>>2],s8(e,s,l),t[u>>2]=e,m=r,n|0}function Ma(e){e=e|0;var n=0,r=0;return e=e+7&-8,(e>>>0<=32768?(n=t[2701]|0,e>>>0<=(65536-n|0)>>>0):0)?(r=(t[2702]|0)+n|0,t[2701]=n+e,e=r):(e=V8(e+8|0)|0,t[e>>2]=t[2703],t[2703]=e,e=e+8|0),e|0}function Gk(e,n){e=e|0,n=n|0,t[e>>2]=Yk()|0,t[e+4>>2]=Kk()|0,t[e+12>>2]=n,t[e+8>>2]=Xk()|0,t[e+32>>2]=9}function Yk(){return 11744}function Kk(){return 1832}function Xk(){return __()|0}function Qk(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0,(Hl(u,896)|0)==512?r|0&&(Jk(r),yt(r)):n|0&&yt(n)}function Jk(e){e=e|0,e=t[e+4>>2]|0,e|0&&t2(e)}function Zk(e){e=e|0,$k(e,5052),eL(e)|0,tL(e,5058,26)|0,nL(e,5069,1)|0,rL(e,5077,10)|0,iL(e,5087,19)|0,uL(e,5094,27)|0}function $k(e,n){e=e|0,n=n|0;var r=0;r=ZN()|0,t[e>>2]=r,$N(r,n),e2(t[e>>2]|0)}function eL(e){e=e|0;var n=0;return n=t[e>>2]|0,Gp(n,BN()|0),e|0}function tL(e,n,r){return e=e|0,n=n|0,r=r|0,EN(e,Fr(n)|0,r,0),e|0}function nL(e,n,r){return e=e|0,n=n|0,r=r|0,uN(e,Fr(n)|0,r,0),e|0}function rL(e,n,r){return e=e|0,n=n|0,r=r|0,IL(e,Fr(n)|0,r,0),e|0}function iL(e,n,r){return e=e|0,n=n|0,r=r|0,DL(e,Fr(n)|0,r,0),e|0}function E8(e,n){e=e|0,n=n|0;var r=0,u=0;e:for(;;){for(r=t[2703]|0;;){if((r|0)==(n|0))break e;if(u=t[r>>2]|0,t[2703]=u,!r)r=u;else break}yt(r)}t[2701]=e}function uL(e,n,r){return e=e|0,n=n|0,r=r|0,oL(e,Fr(n)|0,r,0),e|0}function oL(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0;s=t[e>>2]|0,l=UE()|0,e=lL(r)|0,wi(s,n,l,e,sL(r,u)|0,u)}function UE(){var e=0,n=0;if(c[8040]|0||(w8(10860),Wt(65,10860,se|0)|0,n=8040,t[n>>2]=1,t[n+4>>2]=0),!(sr(10860)|0)){e=10860,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));w8(10860)}return 10860}function lL(e){return e=e|0,e|0}function sL(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0;return D=m,m=m+16|0,l=D,s=D+4|0,t[l>>2]=e,S=UE()|0,h=S+24|0,n=hn(n,4)|0,t[s>>2]=n,r=S+28|0,u=t[r>>2]|0,u>>>0<(t[S+32>>2]|0)>>>0?(D8(u,e,n),n=(t[r>>2]|0)+8|0,t[r>>2]=n):(aL(h,l,s),n=t[r>>2]|0),m=D,(n-(t[h>>2]|0)>>3)+-1|0}function D8(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r}function aL(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,L=0,k=0;if(D=m,m=m+32|0,l=D,s=e+4|0,h=((t[s>>2]|0)-(t[e>>2]|0)>>3)+1|0,u=fL(e)|0,u>>>0>>0)hi(e);else{S=t[e>>2]|0,k=(t[e+8>>2]|0)-S|0,L=k>>2,cL(l,k>>3>>>0>>1>>>0?L>>>0>>0?h:L:u,(t[s>>2]|0)-S>>3,e+8|0),h=l+8|0,D8(t[h>>2]|0,t[n>>2]|0,t[r>>2]|0),t[h>>2]=(t[h>>2]|0)+8,dL(e,l),pL(l),m=D;return}}function fL(e){return e=e|0,536870911}function cL(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>536870911)$n();else{l=pn(n<<3)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r<<3)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n<<3)}function dL(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(0-(l>>3)<<3)|0,t[s>>2]=r,(l|0)>0?(_r(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function pL(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~((u+-8-n|0)>>>3)<<3)),e=t[e>>2]|0,e|0&&yt(e)}function w8(e){e=e|0,mL(e)}function hL(e){e=e|0,vL(e+24|0)}function vL(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-u|0)>>>3)<<3)),yt(r))}function mL(e){e=e|0;var n=0;n=yr()|0,jn(e,1,11,n,gL()|0,2),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function gL(){return 1840}function yL(e,n,r){e=e|0,n=n|0,r=r|0,EL(t[(_L(e)|0)>>2]|0,n,r)}function _L(e){return e=e|0,(t[(UE()|0)+24>>2]|0)+(e<<3)|0}function EL(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0;u=m,m=m+16|0,s=u+1|0,l=u,If(s,n),n=bf(s,n)|0,If(l,r),r=bf(l,r)|0,I1[e&31](n,r),m=u}function DL(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0;s=t[e>>2]|0,l=jE()|0,e=wL(r)|0,wi(s,n,l,e,SL(r,u)|0,u)}function jE(){var e=0,n=0;if(c[8048]|0||(T8(10896),Wt(66,10896,se|0)|0,n=8048,t[n>>2]=1,t[n+4>>2]=0),!(sr(10896)|0)){e=10896,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));T8(10896)}return 10896}function wL(e){return e=e|0,e|0}function SL(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0;return D=m,m=m+16|0,l=D,s=D+4|0,t[l>>2]=e,S=jE()|0,h=S+24|0,n=hn(n,4)|0,t[s>>2]=n,r=S+28|0,u=t[r>>2]|0,u>>>0<(t[S+32>>2]|0)>>>0?(S8(u,e,n),n=(t[r>>2]|0)+8|0,t[r>>2]=n):(TL(h,l,s),n=t[r>>2]|0),m=D,(n-(t[h>>2]|0)>>3)+-1|0}function S8(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r}function TL(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,L=0,k=0;if(D=m,m=m+32|0,l=D,s=e+4|0,h=((t[s>>2]|0)-(t[e>>2]|0)>>3)+1|0,u=CL(e)|0,u>>>0>>0)hi(e);else{S=t[e>>2]|0,k=(t[e+8>>2]|0)-S|0,L=k>>2,xL(l,k>>3>>>0>>1>>>0?L>>>0>>0?h:L:u,(t[s>>2]|0)-S>>3,e+8|0),h=l+8|0,S8(t[h>>2]|0,t[n>>2]|0,t[r>>2]|0),t[h>>2]=(t[h>>2]|0)+8,AL(e,l),RL(l),m=D;return}}function CL(e){return e=e|0,536870911}function xL(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>536870911)$n();else{l=pn(n<<3)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r<<3)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n<<3)}function AL(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(0-(l>>3)<<3)|0,t[s>>2]=r,(l|0)>0?(_r(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function RL(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~((u+-8-n|0)>>>3)<<3)),e=t[e>>2]|0,e|0&&yt(e)}function T8(e){e=e|0,kL(e)}function OL(e){e=e|0,ML(e+24|0)}function ML(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-u|0)>>>3)<<3)),yt(r))}function kL(e){e=e|0;var n=0;n=yr()|0,jn(e,1,11,n,LL()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function LL(){return 1852}function NL(e,n){return e=e|0,n=n|0,PL(t[(FL(e)|0)>>2]|0,n)|0}function FL(e){return e=e|0,(t[(jE()|0)+24>>2]|0)+(e<<3)|0}function PL(e,n){e=e|0,n=n|0;var r=0,u=0;return r=m,m=m+16|0,u=r,If(u,n),n=bf(u,n)|0,n=H0(Zp[e&31](n)|0)|0,m=r,n|0}function IL(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0;s=t[e>>2]|0,l=zE()|0,e=bL(r)|0,wi(s,n,l,e,BL(r,u)|0,u)}function zE(){var e=0,n=0;if(c[8056]|0||(x8(10932),Wt(67,10932,se|0)|0,n=8056,t[n>>2]=1,t[n+4>>2]=0),!(sr(10932)|0)){e=10932,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));x8(10932)}return 10932}function bL(e){return e=e|0,e|0}function BL(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0;return D=m,m=m+16|0,l=D,s=D+4|0,t[l>>2]=e,S=zE()|0,h=S+24|0,n=hn(n,4)|0,t[s>>2]=n,r=S+28|0,u=t[r>>2]|0,u>>>0<(t[S+32>>2]|0)>>>0?(C8(u,e,n),n=(t[r>>2]|0)+8|0,t[r>>2]=n):(UL(h,l,s),n=t[r>>2]|0),m=D,(n-(t[h>>2]|0)>>3)+-1|0}function C8(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r}function UL(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,L=0,k=0;if(D=m,m=m+32|0,l=D,s=e+4|0,h=((t[s>>2]|0)-(t[e>>2]|0)>>3)+1|0,u=jL(e)|0,u>>>0>>0)hi(e);else{S=t[e>>2]|0,k=(t[e+8>>2]|0)-S|0,L=k>>2,zL(l,k>>3>>>0>>1>>>0?L>>>0>>0?h:L:u,(t[s>>2]|0)-S>>3,e+8|0),h=l+8|0,C8(t[h>>2]|0,t[n>>2]|0,t[r>>2]|0),t[h>>2]=(t[h>>2]|0)+8,HL(e,l),qL(l),m=D;return}}function jL(e){return e=e|0,536870911}function zL(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>536870911)$n();else{l=pn(n<<3)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r<<3)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n<<3)}function HL(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(0-(l>>3)<<3)|0,t[s>>2]=r,(l|0)>0?(_r(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function qL(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~((u+-8-n|0)>>>3)<<3)),e=t[e>>2]|0,e|0&&yt(e)}function x8(e){e=e|0,YL(e)}function WL(e){e=e|0,VL(e+24|0)}function VL(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-u|0)>>>3)<<3)),yt(r))}function YL(e){e=e|0;var n=0;n=yr()|0,jn(e,1,7,n,KL()|0,2),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function KL(){return 1860}function XL(e,n,r){return e=e|0,n=n|0,r=r|0,JL(t[(QL(e)|0)>>2]|0,n,r)|0}function QL(e){return e=e|0,(t[(zE()|0)+24>>2]|0)+(e<<3)|0}function JL(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0;return u=m,m=m+32|0,h=u+12|0,s=u+8|0,D=u,S=u+16|0,l=u+4|0,ZL(S,n),$L(D,S,n),Ks(l,r),r=Xs(l,r)|0,t[h>>2]=t[D>>2],Fg[e&15](s,h,r),r=eN(s)|0,U0(s),Qs(l),m=u,r|0}function ZL(e,n){e=e|0,n=n|0}function $L(e,n,r){e=e|0,n=n|0,r=r|0,tN(e,r)}function eN(e){return e=e|0,yo(e)|0}function tN(e,n){e=e|0,n=n|0;var r=0,u=0,l=0;l=m,m=m+16|0,r=l,u=n,u&1?(nN(r,0),eu(u|0,r|0)|0,rN(e,r),iN(r)):t[e>>2]=t[n>>2],m=l}function nN(e,n){e=e|0,n=n|0,cd(e,n),t[e+4>>2]=0,c[e+8>>0]=0}function rN(e,n){e=e|0,n=n|0,t[e>>2]=t[n+4>>2]}function iN(e){e=e|0,c[e+8>>0]=0}function uN(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0;s=t[e>>2]|0,l=HE()|0,e=oN(r)|0,wi(s,n,l,e,lN(r,u)|0,u)}function HE(){var e=0,n=0;if(c[8064]|0||(R8(10968),Wt(68,10968,se|0)|0,n=8064,t[n>>2]=1,t[n+4>>2]=0),!(sr(10968)|0)){e=10968,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));R8(10968)}return 10968}function oN(e){return e=e|0,e|0}function lN(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0;return D=m,m=m+16|0,l=D,s=D+4|0,t[l>>2]=e,S=HE()|0,h=S+24|0,n=hn(n,4)|0,t[s>>2]=n,r=S+28|0,u=t[r>>2]|0,u>>>0<(t[S+32>>2]|0)>>>0?(A8(u,e,n),n=(t[r>>2]|0)+8|0,t[r>>2]=n):(sN(h,l,s),n=t[r>>2]|0),m=D,(n-(t[h>>2]|0)>>3)+-1|0}function A8(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r}function sN(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,L=0,k=0;if(D=m,m=m+32|0,l=D,s=e+4|0,h=((t[s>>2]|0)-(t[e>>2]|0)>>3)+1|0,u=aN(e)|0,u>>>0>>0)hi(e);else{S=t[e>>2]|0,k=(t[e+8>>2]|0)-S|0,L=k>>2,fN(l,k>>3>>>0>>1>>>0?L>>>0>>0?h:L:u,(t[s>>2]|0)-S>>3,e+8|0),h=l+8|0,A8(t[h>>2]|0,t[n>>2]|0,t[r>>2]|0),t[h>>2]=(t[h>>2]|0)+8,cN(e,l),dN(l),m=D;return}}function aN(e){return e=e|0,536870911}function fN(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>536870911)$n();else{l=pn(n<<3)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r<<3)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n<<3)}function cN(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(0-(l>>3)<<3)|0,t[s>>2]=r,(l|0)>0?(_r(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function dN(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~((u+-8-n|0)>>>3)<<3)),e=t[e>>2]|0,e|0&&yt(e)}function R8(e){e=e|0,vN(e)}function pN(e){e=e|0,hN(e+24|0)}function hN(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-u|0)>>>3)<<3)),yt(r))}function vN(e){e=e|0;var n=0;n=yr()|0,jn(e,1,1,n,mN()|0,5),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function mN(){return 1872}function gN(e,n,r,u,l,s){e=e|0,n=n|0,r=r|0,u=u|0,l=l|0,s=s|0,_N(t[(yN(e)|0)>>2]|0,n,r,u,l,s)}function yN(e){return e=e|0,(t[(HE()|0)+24>>2]|0)+(e<<3)|0}function _N(e,n,r,u,l,s){e=e|0,n=n|0,r=r|0,u=u|0,l=l|0,s=s|0;var h=0,D=0,S=0,L=0,k=0,I=0;h=m,m=m+32|0,D=h+16|0,S=h+12|0,L=h+8|0,k=h+4|0,I=h,Ks(D,n),n=Xs(D,n)|0,Ks(S,r),r=Xs(S,r)|0,Ks(L,u),u=Xs(L,u)|0,Ks(k,l),l=Xs(k,l)|0,Ks(I,s),s=Xs(I,s)|0,Q8[e&1](n,r,u,l,s),Qs(I),Qs(k),Qs(L),Qs(S),Qs(D),m=h}function EN(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0;s=t[e>>2]|0,l=qE()|0,e=DN(r)|0,wi(s,n,l,e,wN(r,u)|0,u)}function qE(){var e=0,n=0;if(c[8072]|0||(M8(11004),Wt(69,11004,se|0)|0,n=8072,t[n>>2]=1,t[n+4>>2]=0),!(sr(11004)|0)){e=11004,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));M8(11004)}return 11004}function DN(e){return e=e|0,e|0}function wN(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0,D=0,S=0;return D=m,m=m+16|0,l=D,s=D+4|0,t[l>>2]=e,S=qE()|0,h=S+24|0,n=hn(n,4)|0,t[s>>2]=n,r=S+28|0,u=t[r>>2]|0,u>>>0<(t[S+32>>2]|0)>>>0?(O8(u,e,n),n=(t[r>>2]|0)+8|0,t[r>>2]=n):(SN(h,l,s),n=t[r>>2]|0),m=D,(n-(t[h>>2]|0)>>3)+-1|0}function O8(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r}function SN(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,L=0,k=0;if(D=m,m=m+32|0,l=D,s=e+4|0,h=((t[s>>2]|0)-(t[e>>2]|0)>>3)+1|0,u=TN(e)|0,u>>>0>>0)hi(e);else{S=t[e>>2]|0,k=(t[e+8>>2]|0)-S|0,L=k>>2,CN(l,k>>3>>>0>>1>>>0?L>>>0>>0?h:L:u,(t[s>>2]|0)-S>>3,e+8|0),h=l+8|0,O8(t[h>>2]|0,t[n>>2]|0,t[r>>2]|0),t[h>>2]=(t[h>>2]|0)+8,xN(e,l),AN(l),m=D;return}}function TN(e){return e=e|0,536870911}function CN(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0;t[e+12>>2]=0,t[e+16>>2]=u;do if(n)if(n>>>0>536870911)$n();else{l=pn(n<<3)|0;break}else l=0;while(0);t[e>>2]=l,u=l+(r<<3)|0,t[e+8>>2]=u,t[e+4>>2]=u,t[e+12>>2]=l+(n<<3)}function xN(e,n){e=e|0,n=n|0;var r=0,u=0,l=0,s=0,h=0;u=t[e>>2]|0,h=e+4|0,s=n+4|0,l=(t[h>>2]|0)-u|0,r=(t[s>>2]|0)+(0-(l>>3)<<3)|0,t[s>>2]=r,(l|0)>0?(_r(r|0,u|0,l|0)|0,u=s,r=t[s>>2]|0):u=s,s=t[e>>2]|0,t[e>>2]=r,t[u>>2]=s,s=n+8|0,l=t[h>>2]|0,t[h>>2]=t[s>>2],t[s>>2]=l,s=e+8|0,h=n+12|0,e=t[s>>2]|0,t[s>>2]=t[h>>2],t[h>>2]=e,t[n>>2]=t[u>>2]}function AN(e){e=e|0;var n=0,r=0,u=0;n=t[e+4>>2]|0,r=e+8|0,u=t[r>>2]|0,(u|0)!=(n|0)&&(t[r>>2]=u+(~((u+-8-n|0)>>>3)<<3)),e=t[e>>2]|0,e|0&&yt(e)}function M8(e){e=e|0,MN(e)}function RN(e){e=e|0,ON(e+24|0)}function ON(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-u|0)>>>3)<<3)),yt(r))}function MN(e){e=e|0;var n=0;n=yr()|0,jn(e,1,12,n,kN()|0,2),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function kN(){return 1896}function LN(e,n,r){e=e|0,n=n|0,r=r|0,FN(t[(NN(e)|0)>>2]|0,n,r)}function NN(e){return e=e|0,(t[(qE()|0)+24>>2]|0)+(e<<3)|0}function FN(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0;u=m,m=m+16|0,s=u+4|0,l=u,PN(s,n),n=IN(s,n)|0,Ks(l,r),r=Xs(l,r)|0,I1[e&31](n,r),Qs(l),m=u}function PN(e,n){e=e|0,n=n|0}function IN(e,n){return e=e|0,n=n|0,bN(n)|0}function bN(e){return e=e|0,e|0}function BN(){var e=0;return c[8080]|0||(k8(11040),Wt(70,11040,se|0)|0,e=8080,t[e>>2]=1,t[e+4>>2]=0),sr(11040)|0||k8(11040),11040}function k8(e){e=e|0,zN(e),Yp(e,71)}function UN(e){e=e|0,jN(e+24|0)}function jN(e){e=e|0;var n=0,r=0,u=0;r=t[e>>2]|0,u=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-u|0)>>>3)<<3)),yt(r))}function zN(e){e=e|0;var n=0;n=yr()|0,jn(e,5,7,n,VN()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function HN(e){e=e|0,qN(e)}function qN(e){e=e|0,WN(e)}function WN(e){e=e|0,c[e+8>>0]=1}function VN(){return 1936}function GN(){return YN()|0}function YN(){var e=0,n=0,r=0,u=0,l=0,s=0,h=0;return n=m,m=m+16|0,l=n+4|0,h=n,r=Ma(8)|0,e=r,s=e+4|0,t[s>>2]=pn(1)|0,u=pn(8)|0,s=t[s>>2]|0,t[h>>2]=0,t[l>>2]=t[h>>2],KN(u,s,l),t[r>>2]=u,m=n,e|0}function KN(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,r=pn(16)|0,t[r+4>>2]=0,t[r+8>>2]=0,t[r>>2]=1916,t[r+12>>2]=n,t[e+4>>2]=r}function XN(e){e=e|0,Uv(e),yt(e)}function QN(e){e=e|0,e=t[e+12>>2]|0,e|0&&yt(e)}function JN(e){e=e|0,yt(e)}function ZN(){var e=0;return c[8088]|0||(uF(11076),Wt(25,11076,se|0)|0,e=8088,t[e>>2]=1,t[e+4>>2]=0),11076}function $N(e,n){e=e|0,n=n|0,t[e>>2]=eF()|0,t[e+4>>2]=tF()|0,t[e+12>>2]=n,t[e+8>>2]=nF()|0,t[e+32>>2]=10}function eF(){return 11745}function tF(){return 1940}function nF(){return N1()|0}function rF(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0,(Hl(u,896)|0)==512?r|0&&(iF(r),yt(r)):n|0&&yt(n)}function iF(e){e=e|0,e=t[e+4>>2]|0,e|0&&t2(e)}function uF(e){e=e|0,Qa(e)}function Yf(e,n){e=e|0,n=n|0,t[e>>2]=n}function WE(e){return e=e|0,t[e>>2]|0}function oF(e){return e=e|0,c[t[e>>2]>>0]|0}function lF(e,n){e=e|0,n=n|0;var r=0,u=0;r=m,m=m+16|0,u=r,t[u>>2]=t[e>>2],sF(n,u)|0,m=r}function sF(e,n){e=e|0,n=n|0;var r=0;return r=aF(t[e>>2]|0,n)|0,n=e+4|0,t[(t[n>>2]|0)+8>>2]=r,t[(t[n>>2]|0)+8>>2]|0}function aF(e,n){e=e|0,n=n|0;var r=0,u=0;return r=m,m=m+16|0,u=r,ka(u),e=yo(e)|0,n=fF(e,t[n>>2]|0)|0,La(u),m=r,n|0}function ka(e){e=e|0,t[e>>2]=t[2701],t[e+4>>2]=t[2703]}function fF(e,n){e=e|0,n=n|0;var r=0;return r=_o(cF()|0)|0,Ki(0,r|0,e|0,bE(n)|0)|0}function La(e){e=e|0,E8(t[e>>2]|0,t[e+4>>2]|0)}function cF(){var e=0;return c[8096]|0||(dF(11120),e=8096,t[e>>2]=1,t[e+4>>2]=0),11120}function dF(e){e=e|0,ll(e,pF()|0,1)}function pF(){return 1948}function hF(){vF()}function vF(){var e=0,n=0,r=0,u=0,l=0,s=0,h=0,D=0,S=0,L=0,k=0,I=0,K=0,be=0,Se=0,ge=0;if(Se=m,m=m+16|0,k=Se+4|0,I=Se,bn(65536,10804,t[2702]|0,10812),r=t8()|0,n=t[r>>2]|0,e=t[n>>2]|0,e|0)for(u=t[r+8>>2]|0,r=t[r+4>>2]|0;Ql(e|0,O[r>>0]|0|0,c[u>>0]|0),n=n+4|0,e=t[n>>2]|0,e;)u=u+1|0,r=r+1|0;if(e=n8()|0,n=t[e>>2]|0,n|0)do ko(n|0,t[e+4>>2]|0),e=e+8|0,n=t[e>>2]|0;while((n|0)!=0);ko(mF()|0,5167),L=Fv()|0,e=t[L>>2]|0;e:do if(e|0){do gF(t[e+4>>2]|0),e=t[e>>2]|0;while((e|0)!=0);if(e=t[L>>2]|0,e|0){S=L;do{for(;l=e,e=t[e>>2]|0,l=t[l+4>>2]|0,!!(yF(l)|0);)if(t[I>>2]=S,t[k>>2]=t[I>>2],_F(L,k)|0,!e)break e;if(EF(l),S=t[S>>2]|0,n=L8(l)|0,s=fo()|0,h=m,m=m+((1*(n<<2)|0)+15&-16)|0,D=m,m=m+((1*(n<<2)|0)+15&-16)|0,n=t[(h8(l)|0)>>2]|0,n|0)for(r=h,u=D;t[r>>2]=t[(Pv(t[n+4>>2]|0)|0)>>2],t[u>>2]=t[n+8>>2],n=t[n>>2]|0,n;)r=r+4|0,u=u+4|0;ge=Pv(l)|0,n=DF(l)|0,r=L8(l)|0,u=wF(l)|0,Lo(ge|0,n|0,h|0,D|0,r|0,u|0,kE(l)|0),yi(s|0)}while((e|0)!=0)}}while(0);if(e=t[(LE()|0)>>2]|0,e|0)do ge=e+4|0,L=NE(ge)|0,l=Mg(L)|0,s=Rg(L)|0,h=(Og(L)|0)+1|0,D=S_(L)|0,S=N8(ge)|0,L=sr(L)|0,k=E_(ge)|0,I=VE(ge)|0,ao(0,l|0,s|0,h|0,D|0,S|0,L|0,k|0,I|0,GE(ge)|0),e=t[e>>2]|0;while((e|0)!=0);e=t[(Fv()|0)>>2]|0;e:do if(e|0){t:for(;;){if(n=t[e+4>>2]|0,n|0?(K=t[(Pv(n)|0)>>2]|0,be=t[(v8(n)|0)>>2]|0,be|0):0){r=be;do{n=r+4|0,u=NE(n)|0;n:do if(u|0)switch(sr(u)|0){case 0:break t;case 4:case 3:case 2:{D=Mg(u)|0,S=Rg(u)|0,L=(Og(u)|0)+1|0,k=S_(u)|0,I=sr(u)|0,ge=E_(n)|0,ao(K|0,D|0,S|0,L|0,k|0,0,I|0,ge|0,VE(n)|0,GE(n)|0);break n}case 1:{h=Mg(u)|0,D=Rg(u)|0,S=(Og(u)|0)+1|0,L=S_(u)|0,k=N8(n)|0,I=sr(u)|0,ge=E_(n)|0,ao(K|0,h|0,D|0,S|0,L|0,k|0,I|0,ge|0,VE(n)|0,GE(n)|0);break n}case 5:{L=Mg(u)|0,k=Rg(u)|0,I=(Og(u)|0)+1|0,ge=S_(u)|0,ao(K|0,L|0,k|0,I|0,ge|0,SF(u)|0,sr(u)|0,0,0,0);break n}default:break n}while(0);r=t[r>>2]|0}while((r|0)!=0)}if(e=t[e>>2]|0,!e)break e}$n()}while(0);bs(),m=Se}function mF(){return 11703}function gF(e){e=e|0,c[e+40>>0]=0}function yF(e){return e=e|0,(c[e+40>>0]|0)!=0|0}function _F(e,n){return e=e|0,n=n|0,n=TF(n)|0,e=t[n>>2]|0,t[n>>2]=t[e>>2],yt(e),t[n>>2]|0}function EF(e){e=e|0,c[e+40>>0]=1}function L8(e){return e=e|0,t[e+20>>2]|0}function DF(e){return e=e|0,t[e+8>>2]|0}function wF(e){return e=e|0,t[e+32>>2]|0}function S_(e){return e=e|0,t[e+4>>2]|0}function N8(e){return e=e|0,t[e+4>>2]|0}function VE(e){return e=e|0,t[e+8>>2]|0}function GE(e){return e=e|0,t[e+16>>2]|0}function SF(e){return e=e|0,t[e+20>>2]|0}function TF(e){return e=e|0,t[e>>2]|0}function T_(e){e=e|0;var n=0,r=0,u=0,l=0,s=0,h=0,D=0,S=0,L=0,k=0,I=0,K=0,be=0,Se=0,ge=0,Ze=0,Ge=0,ct=0,Me=0,Pe=0,Zt=0;Zt=m,m=m+16|0,K=Zt;do if(e>>>0<245){if(L=e>>>0<11?16:e+11&-8,e=L>>>3,I=t[2783]|0,r=I>>>e,r&3|0)return n=(r&1^1)+e|0,e=11172+(n<<1<<2)|0,r=e+8|0,u=t[r>>2]|0,l=u+8|0,s=t[l>>2]|0,(e|0)==(s|0)?t[2783]=I&~(1<>2]=e,t[r>>2]=s),Pe=n<<3,t[u+4>>2]=Pe|3,Pe=u+Pe+4|0,t[Pe>>2]=t[Pe>>2]|1,Pe=l,m=Zt,Pe|0;if(k=t[2785]|0,L>>>0>k>>>0){if(r|0)return n=2<>>12&16,n=n>>>h,r=n>>>5&8,n=n>>>r,l=n>>>2&4,n=n>>>l,e=n>>>1&2,n=n>>>e,u=n>>>1&1,u=(r|h|l|e|u)+(n>>>u)|0,n=11172+(u<<1<<2)|0,e=n+8|0,l=t[e>>2]|0,h=l+8|0,r=t[h>>2]|0,(n|0)==(r|0)?(e=I&~(1<>2]=n,t[e>>2]=r,e=I),s=(u<<3)-L|0,t[l+4>>2]=L|3,u=l+L|0,t[u+4>>2]=s|1,t[u+s>>2]=s,k|0&&(l=t[2788]|0,n=k>>>3,r=11172+(n<<1<<2)|0,n=1<>2]|0):(t[2783]=e|n,n=r,e=r+8|0),t[e>>2]=l,t[n+12>>2]=l,t[l+8>>2]=n,t[l+12>>2]=r),t[2785]=s,t[2788]=u,Pe=h,m=Zt,Pe|0;if(D=t[2784]|0,D){if(r=(D&0-D)+-1|0,h=r>>>12&16,r=r>>>h,s=r>>>5&8,r=r>>>s,S=r>>>2&4,r=r>>>S,u=r>>>1&2,r=r>>>u,e=r>>>1&1,e=t[11436+((s|h|S|u|e)+(r>>>e)<<2)>>2]|0,r=(t[e+4>>2]&-8)-L|0,u=t[e+16+(((t[e+16>>2]|0)==0&1)<<2)>>2]|0,!u)S=e,s=r;else{do h=(t[u+4>>2]&-8)-L|0,S=h>>>0>>0,r=S?h:r,e=S?u:e,u=t[u+16+(((t[u+16>>2]|0)==0&1)<<2)>>2]|0;while((u|0)!=0);S=e,s=r}if(h=S+L|0,S>>>0>>0){l=t[S+24>>2]|0,n=t[S+12>>2]|0;do if((n|0)==(S|0)){if(e=S+20|0,n=t[e>>2]|0,!n&&(e=S+16|0,n=t[e>>2]|0,!n)){r=0;break}for(;;){if(r=n+20|0,u=t[r>>2]|0,u|0){n=u,e=r;continue}if(r=n+16|0,u=t[r>>2]|0,u)n=u,e=r;else break}t[e>>2]=0,r=n}else r=t[S+8>>2]|0,t[r+12>>2]=n,t[n+8>>2]=r,r=n;while(0);do if(l|0){if(n=t[S+28>>2]|0,e=11436+(n<<2)|0,(S|0)==(t[e>>2]|0)){if(t[e>>2]=r,!r){t[2784]=D&~(1<>2]|0)!=(S|0)&1)<<2)>>2]=r,!r)break;t[r+24>>2]=l,n=t[S+16>>2]|0,n|0&&(t[r+16>>2]=n,t[n+24>>2]=r),n=t[S+20>>2]|0,n|0&&(t[r+20>>2]=n,t[n+24>>2]=r)}while(0);return s>>>0<16?(Pe=s+L|0,t[S+4>>2]=Pe|3,Pe=S+Pe+4|0,t[Pe>>2]=t[Pe>>2]|1):(t[S+4>>2]=L|3,t[h+4>>2]=s|1,t[h+s>>2]=s,k|0&&(u=t[2788]|0,n=k>>>3,r=11172+(n<<1<<2)|0,n=1<>2]|0):(t[2783]=I|n,n=r,e=r+8|0),t[e>>2]=u,t[n+12>>2]=u,t[u+8>>2]=n,t[u+12>>2]=r),t[2785]=s,t[2788]=h),Pe=S+8|0,m=Zt,Pe|0}else I=L}else I=L}else I=L}else if(e>>>0<=4294967231)if(e=e+11|0,L=e&-8,S=t[2784]|0,S){u=0-L|0,e=e>>>8,e?L>>>0>16777215?D=31:(I=(e+1048320|0)>>>16&8,Me=e<>>16&4,Me=Me<>>16&2,D=14-(k|I|D)+(Me<>>15)|0,D=L>>>(D+7|0)&1|D<<1):D=0,r=t[11436+(D<<2)>>2]|0;e:do if(!r)r=0,e=0,Me=57;else for(e=0,h=L<<((D|0)==31?0:25-(D>>>1)|0),s=0;;){if(l=(t[r+4>>2]&-8)-L|0,l>>>0>>0)if(l)e=r,u=l;else{e=r,u=0,l=r,Me=61;break e}if(l=t[r+20>>2]|0,r=t[r+16+(h>>>31<<2)>>2]|0,s=(l|0)==0|(l|0)==(r|0)?s:l,l=(r|0)==0,l){r=s,Me=57;break}else h=h<<((l^1)&1)}while(0);if((Me|0)==57){if((r|0)==0&(e|0)==0){if(e=2<>>12&16,I=I>>>h,s=I>>>5&8,I=I>>>s,D=I>>>2&4,I=I>>>D,k=I>>>1&2,I=I>>>k,r=I>>>1&1,e=0,r=t[11436+((s|h|D|k|r)+(I>>>r)<<2)>>2]|0}r?(l=r,Me=61):(D=e,h=u)}if((Me|0)==61)for(;;)if(Me=0,r=(t[l+4>>2]&-8)-L|0,I=r>>>0>>0,r=I?r:u,e=I?l:e,l=t[l+16+(((t[l+16>>2]|0)==0&1)<<2)>>2]|0,l)u=r,Me=61;else{D=e,h=r;break}if((D|0)!=0?h>>>0<((t[2785]|0)-L|0)>>>0:0){if(s=D+L|0,D>>>0>=s>>>0)return Pe=0,m=Zt,Pe|0;l=t[D+24>>2]|0,n=t[D+12>>2]|0;do if((n|0)==(D|0)){if(e=D+20|0,n=t[e>>2]|0,!n&&(e=D+16|0,n=t[e>>2]|0,!n)){n=0;break}for(;;){if(r=n+20|0,u=t[r>>2]|0,u|0){n=u,e=r;continue}if(r=n+16|0,u=t[r>>2]|0,u)n=u,e=r;else break}t[e>>2]=0}else Pe=t[D+8>>2]|0,t[Pe+12>>2]=n,t[n+8>>2]=Pe;while(0);do if(l){if(e=t[D+28>>2]|0,r=11436+(e<<2)|0,(D|0)==(t[r>>2]|0)){if(t[r>>2]=n,!n){u=S&~(1<>2]|0)!=(D|0)&1)<<2)>>2]=n,!n){u=S;break}t[n+24>>2]=l,e=t[D+16>>2]|0,e|0&&(t[n+16>>2]=e,t[e+24>>2]=n),e=t[D+20>>2]|0,e&&(t[n+20>>2]=e,t[e+24>>2]=n),u=S}else u=S;while(0);do if(h>>>0>=16){if(t[D+4>>2]=L|3,t[s+4>>2]=h|1,t[s+h>>2]=h,n=h>>>3,h>>>0<256){r=11172+(n<<1<<2)|0,e=t[2783]|0,n=1<>2]|0):(t[2783]=e|n,n=r,e=r+8|0),t[e>>2]=s,t[n+12>>2]=s,t[s+8>>2]=n,t[s+12>>2]=r;break}if(n=h>>>8,n?h>>>0>16777215?n=31:(Me=(n+1048320|0)>>>16&8,Pe=n<>>16&4,Pe=Pe<>>16&2,n=14-(ct|Me|n)+(Pe<>>15)|0,n=h>>>(n+7|0)&1|n<<1):n=0,r=11436+(n<<2)|0,t[s+28>>2]=n,e=s+16|0,t[e+4>>2]=0,t[e>>2]=0,e=1<>2]=s,t[s+24>>2]=r,t[s+12>>2]=s,t[s+8>>2]=s;break}for(e=h<<((n|0)==31?0:25-(n>>>1)|0),r=t[r>>2]|0;;){if((t[r+4>>2]&-8|0)==(h|0)){Me=97;break}if(u=r+16+(e>>>31<<2)|0,n=t[u>>2]|0,n)e=e<<1,r=n;else{Me=96;break}}if((Me|0)==96){t[u>>2]=s,t[s+24>>2]=r,t[s+12>>2]=s,t[s+8>>2]=s;break}else if((Me|0)==97){Me=r+8|0,Pe=t[Me>>2]|0,t[Pe+12>>2]=s,t[Me>>2]=s,t[s+8>>2]=Pe,t[s+12>>2]=r,t[s+24>>2]=0;break}}else Pe=h+L|0,t[D+4>>2]=Pe|3,Pe=D+Pe+4|0,t[Pe>>2]=t[Pe>>2]|1;while(0);return Pe=D+8|0,m=Zt,Pe|0}else I=L}else I=L;else I=-1;while(0);if(r=t[2785]|0,r>>>0>=I>>>0)return n=r-I|0,e=t[2788]|0,n>>>0>15?(Pe=e+I|0,t[2788]=Pe,t[2785]=n,t[Pe+4>>2]=n|1,t[Pe+n>>2]=n,t[e+4>>2]=I|3):(t[2785]=0,t[2788]=0,t[e+4>>2]=r|3,Pe=e+r+4|0,t[Pe>>2]=t[Pe>>2]|1),Pe=e+8|0,m=Zt,Pe|0;if(h=t[2786]|0,h>>>0>I>>>0)return ct=h-I|0,t[2786]=ct,Pe=t[2789]|0,Me=Pe+I|0,t[2789]=Me,t[Me+4>>2]=ct|1,t[Pe+4>>2]=I|3,Pe=Pe+8|0,m=Zt,Pe|0;if(t[2901]|0?e=t[2903]|0:(t[2903]=4096,t[2902]=4096,t[2904]=-1,t[2905]=-1,t[2906]=0,t[2894]=0,e=K&-16^1431655768,t[K>>2]=e,t[2901]=e,e=4096),D=I+48|0,S=I+47|0,s=e+S|0,l=0-e|0,L=s&l,L>>>0<=I>>>0||(e=t[2893]|0,e|0?(k=t[2891]|0,K=k+L|0,K>>>0<=k>>>0|K>>>0>e>>>0):0))return Pe=0,m=Zt,Pe|0;e:do if(t[2894]&4)n=0,Me=133;else{r=t[2789]|0;t:do if(r){for(u=11580;e=t[u>>2]|0,!(e>>>0<=r>>>0?(ge=u+4|0,(e+(t[ge>>2]|0)|0)>>>0>r>>>0):0);)if(e=t[u+8>>2]|0,e)u=e;else{Me=118;break t}if(n=s-h&l,n>>>0<2147483647)if(e=n2(n|0)|0,(e|0)==((t[u>>2]|0)+(t[ge>>2]|0)|0)){if((e|0)!=(-1|0)){h=n,s=e,Me=135;break e}}else u=e,Me=126;else n=0}else Me=118;while(0);do if((Me|0)==118)if(r=n2(0)|0,(r|0)!=(-1|0)?(n=r,be=t[2902]|0,Se=be+-1|0,n=((Se&n|0)==0?0:(Se+n&0-be)-n|0)+L|0,be=t[2891]|0,Se=n+be|0,n>>>0>I>>>0&n>>>0<2147483647):0){if(ge=t[2893]|0,ge|0?Se>>>0<=be>>>0|Se>>>0>ge>>>0:0){n=0;break}if(e=n2(n|0)|0,(e|0)==(r|0)){h=n,s=r,Me=135;break e}else u=e,Me=126}else n=0;while(0);do if((Me|0)==126){if(r=0-n|0,!(D>>>0>n>>>0&(n>>>0<2147483647&(u|0)!=(-1|0))))if((u|0)==(-1|0)){n=0;break}else{h=n,s=u,Me=135;break e}if(e=t[2903]|0,e=S-n+e&0-e,e>>>0>=2147483647){h=n,s=u,Me=135;break e}if((n2(e|0)|0)==(-1|0)){n2(r|0)|0,n=0;break}else{h=e+n|0,s=u,Me=135;break e}}while(0);t[2894]=t[2894]|4,Me=133}while(0);if((((Me|0)==133?L>>>0<2147483647:0)?(ct=n2(L|0)|0,ge=n2(0)|0,Ze=ge-ct|0,Ge=Ze>>>0>(I+40|0)>>>0,!((ct|0)==(-1|0)|Ge^1|ct>>>0>>0&((ct|0)!=(-1|0)&(ge|0)!=(-1|0))^1)):0)&&(h=Ge?Ze:n,s=ct,Me=135),(Me|0)==135){n=(t[2891]|0)+h|0,t[2891]=n,n>>>0>(t[2892]|0)>>>0&&(t[2892]=n),S=t[2789]|0;do if(S){for(n=11580;;){if(e=t[n>>2]|0,r=n+4|0,u=t[r>>2]|0,(s|0)==(e+u|0)){Me=145;break}if(l=t[n+8>>2]|0,l)n=l;else break}if(((Me|0)==145?(t[n+12>>2]&8|0)==0:0)?S>>>0>>0&S>>>0>=e>>>0:0){t[r>>2]=u+h,Pe=S+8|0,Pe=(Pe&7|0)==0?0:0-Pe&7,Me=S+Pe|0,Pe=(t[2786]|0)+(h-Pe)|0,t[2789]=Me,t[2786]=Pe,t[Me+4>>2]=Pe|1,t[Me+Pe+4>>2]=40,t[2790]=t[2905];break}for(s>>>0<(t[2787]|0)>>>0&&(t[2787]=s),r=s+h|0,n=11580;;){if((t[n>>2]|0)==(r|0)){Me=153;break}if(e=t[n+8>>2]|0,e)n=e;else break}if((Me|0)==153?(t[n+12>>2]&8|0)==0:0){t[n>>2]=s,k=n+4|0,t[k>>2]=(t[k>>2]|0)+h,k=s+8|0,k=s+((k&7|0)==0?0:0-k&7)|0,n=r+8|0,n=r+((n&7|0)==0?0:0-n&7)|0,L=k+I|0,D=n-k-I|0,t[k+4>>2]=I|3;do if((n|0)!=(S|0)){if((n|0)==(t[2788]|0)){Pe=(t[2785]|0)+D|0,t[2785]=Pe,t[2788]=L,t[L+4>>2]=Pe|1,t[L+Pe>>2]=Pe;break}if(e=t[n+4>>2]|0,(e&3|0)==1){h=e&-8,u=e>>>3;e:do if(e>>>0<256)if(e=t[n+8>>2]|0,r=t[n+12>>2]|0,(r|0)==(e|0)){t[2783]=t[2783]&~(1<>2]=r,t[r+8>>2]=e;break}else{s=t[n+24>>2]|0,e=t[n+12>>2]|0;do if((e|0)==(n|0)){if(u=n+16|0,r=u+4|0,e=t[r>>2]|0,!e)if(e=t[u>>2]|0,e)r=u;else{e=0;break}for(;;){if(u=e+20|0,l=t[u>>2]|0,l|0){e=l,r=u;continue}if(u=e+16|0,l=t[u>>2]|0,l)e=l,r=u;else break}t[r>>2]=0}else Pe=t[n+8>>2]|0,t[Pe+12>>2]=e,t[e+8>>2]=Pe;while(0);if(!s)break;r=t[n+28>>2]|0,u=11436+(r<<2)|0;do if((n|0)!=(t[u>>2]|0)){if(t[s+16+(((t[s+16>>2]|0)!=(n|0)&1)<<2)>>2]=e,!e)break e}else{if(t[u>>2]=e,e|0)break;t[2784]=t[2784]&~(1<>2]=s,r=n+16|0,u=t[r>>2]|0,u|0&&(t[e+16>>2]=u,t[u+24>>2]=e),r=t[r+4>>2]|0,!r)break;t[e+20>>2]=r,t[r+24>>2]=e}while(0);n=n+h|0,l=h+D|0}else l=D;if(n=n+4|0,t[n>>2]=t[n>>2]&-2,t[L+4>>2]=l|1,t[L+l>>2]=l,n=l>>>3,l>>>0<256){r=11172+(n<<1<<2)|0,e=t[2783]|0,n=1<>2]|0):(t[2783]=e|n,n=r,e=r+8|0),t[e>>2]=L,t[n+12>>2]=L,t[L+8>>2]=n,t[L+12>>2]=r;break}n=l>>>8;do if(!n)n=0;else{if(l>>>0>16777215){n=31;break}Me=(n+1048320|0)>>>16&8,Pe=n<>>16&4,Pe=Pe<>>16&2,n=14-(ct|Me|n)+(Pe<>>15)|0,n=l>>>(n+7|0)&1|n<<1}while(0);if(u=11436+(n<<2)|0,t[L+28>>2]=n,e=L+16|0,t[e+4>>2]=0,t[e>>2]=0,e=t[2784]|0,r=1<>2]=L,t[L+24>>2]=u,t[L+12>>2]=L,t[L+8>>2]=L;break}for(e=l<<((n|0)==31?0:25-(n>>>1)|0),r=t[u>>2]|0;;){if((t[r+4>>2]&-8|0)==(l|0)){Me=194;break}if(u=r+16+(e>>>31<<2)|0,n=t[u>>2]|0,n)e=e<<1,r=n;else{Me=193;break}}if((Me|0)==193){t[u>>2]=L,t[L+24>>2]=r,t[L+12>>2]=L,t[L+8>>2]=L;break}else if((Me|0)==194){Me=r+8|0,Pe=t[Me>>2]|0,t[Pe+12>>2]=L,t[Me>>2]=L,t[L+8>>2]=Pe,t[L+12>>2]=r,t[L+24>>2]=0;break}}else Pe=(t[2786]|0)+D|0,t[2786]=Pe,t[2789]=L,t[L+4>>2]=Pe|1;while(0);return Pe=k+8|0,m=Zt,Pe|0}for(n=11580;e=t[n>>2]|0,!(e>>>0<=S>>>0?(Pe=e+(t[n+4>>2]|0)|0,Pe>>>0>S>>>0):0);)n=t[n+8>>2]|0;l=Pe+-47|0,e=l+8|0,e=l+((e&7|0)==0?0:0-e&7)|0,l=S+16|0,e=e>>>0>>0?S:e,n=e+8|0,r=s+8|0,r=(r&7|0)==0?0:0-r&7,Me=s+r|0,r=h+-40-r|0,t[2789]=Me,t[2786]=r,t[Me+4>>2]=r|1,t[Me+r+4>>2]=40,t[2790]=t[2905],r=e+4|0,t[r>>2]=27,t[n>>2]=t[2895],t[n+4>>2]=t[2896],t[n+8>>2]=t[2897],t[n+12>>2]=t[2898],t[2895]=s,t[2896]=h,t[2898]=0,t[2897]=n,n=e+24|0;do Me=n,n=n+4|0,t[n>>2]=7;while((Me+8|0)>>>0>>0);if((e|0)!=(S|0)){if(s=e-S|0,t[r>>2]=t[r>>2]&-2,t[S+4>>2]=s|1,t[e>>2]=s,n=s>>>3,s>>>0<256){r=11172+(n<<1<<2)|0,e=t[2783]|0,n=1<>2]|0):(t[2783]=e|n,n=r,e=r+8|0),t[e>>2]=S,t[n+12>>2]=S,t[S+8>>2]=n,t[S+12>>2]=r;break}if(n=s>>>8,n?s>>>0>16777215?r=31:(Me=(n+1048320|0)>>>16&8,Pe=n<>>16&4,Pe=Pe<>>16&2,r=14-(ct|Me|r)+(Pe<>>15)|0,r=s>>>(r+7|0)&1|r<<1):r=0,u=11436+(r<<2)|0,t[S+28>>2]=r,t[S+20>>2]=0,t[l>>2]=0,n=t[2784]|0,e=1<>2]=S,t[S+24>>2]=u,t[S+12>>2]=S,t[S+8>>2]=S;break}for(e=s<<((r|0)==31?0:25-(r>>>1)|0),r=t[u>>2]|0;;){if((t[r+4>>2]&-8|0)==(s|0)){Me=216;break}if(u=r+16+(e>>>31<<2)|0,n=t[u>>2]|0,n)e=e<<1,r=n;else{Me=215;break}}if((Me|0)==215){t[u>>2]=S,t[S+24>>2]=r,t[S+12>>2]=S,t[S+8>>2]=S;break}else if((Me|0)==216){Me=r+8|0,Pe=t[Me>>2]|0,t[Pe+12>>2]=S,t[Me>>2]=S,t[S+8>>2]=Pe,t[S+12>>2]=r,t[S+24>>2]=0;break}}}else{Pe=t[2787]|0,(Pe|0)==0|s>>>0>>0&&(t[2787]=s),t[2895]=s,t[2896]=h,t[2898]=0,t[2792]=t[2901],t[2791]=-1,n=0;do Pe=11172+(n<<1<<2)|0,t[Pe+12>>2]=Pe,t[Pe+8>>2]=Pe,n=n+1|0;while((n|0)!=32);Pe=s+8|0,Pe=(Pe&7|0)==0?0:0-Pe&7,Me=s+Pe|0,Pe=h+-40-Pe|0,t[2789]=Me,t[2786]=Pe,t[Me+4>>2]=Pe|1,t[Me+Pe+4>>2]=40,t[2790]=t[2905]}while(0);if(n=t[2786]|0,n>>>0>I>>>0)return ct=n-I|0,t[2786]=ct,Pe=t[2789]|0,Me=Pe+I|0,t[2789]=Me,t[Me+4>>2]=ct|1,t[Pe+4>>2]=I|3,Pe=Pe+8|0,m=Zt,Pe|0}return t[(bv()|0)>>2]=12,Pe=0,m=Zt,Pe|0}function C_(e){e=e|0;var n=0,r=0,u=0,l=0,s=0,h=0,D=0,S=0;if(!!e){r=e+-8|0,l=t[2787]|0,e=t[e+-4>>2]|0,n=e&-8,S=r+n|0;do if(e&1)D=r,h=r;else{if(u=t[r>>2]|0,!(e&3)||(h=r+(0-u)|0,s=u+n|0,h>>>0>>0))return;if((h|0)==(t[2788]|0)){if(e=S+4|0,n=t[e>>2]|0,(n&3|0)!=3){D=h,n=s;break}t[2785]=s,t[e>>2]=n&-2,t[h+4>>2]=s|1,t[h+s>>2]=s;return}if(r=u>>>3,u>>>0<256)if(e=t[h+8>>2]|0,n=t[h+12>>2]|0,(n|0)==(e|0)){t[2783]=t[2783]&~(1<>2]=n,t[n+8>>2]=e,D=h,n=s;break}l=t[h+24>>2]|0,e=t[h+12>>2]|0;do if((e|0)==(h|0)){if(r=h+16|0,n=r+4|0,e=t[n>>2]|0,!e)if(e=t[r>>2]|0,e)n=r;else{e=0;break}for(;;){if(r=e+20|0,u=t[r>>2]|0,u|0){e=u,n=r;continue}if(r=e+16|0,u=t[r>>2]|0,u)e=u,n=r;else break}t[n>>2]=0}else D=t[h+8>>2]|0,t[D+12>>2]=e,t[e+8>>2]=D;while(0);if(l){if(n=t[h+28>>2]|0,r=11436+(n<<2)|0,(h|0)==(t[r>>2]|0)){if(t[r>>2]=e,!e){t[2784]=t[2784]&~(1<>2]|0)!=(h|0)&1)<<2)>>2]=e,!e){D=h,n=s;break}t[e+24>>2]=l,n=h+16|0,r=t[n>>2]|0,r|0&&(t[e+16>>2]=r,t[r+24>>2]=e),n=t[n+4>>2]|0,n?(t[e+20>>2]=n,t[n+24>>2]=e,D=h,n=s):(D=h,n=s)}else D=h,n=s}while(0);if(!(h>>>0>=S>>>0)&&(e=S+4|0,u=t[e>>2]|0,!!(u&1))){if(u&2)t[e>>2]=u&-2,t[D+4>>2]=n|1,t[h+n>>2]=n,l=n;else{if(e=t[2788]|0,(S|0)==(t[2789]|0)){if(S=(t[2786]|0)+n|0,t[2786]=S,t[2789]=D,t[D+4>>2]=S|1,(D|0)!=(e|0))return;t[2788]=0,t[2785]=0;return}if((S|0)==(e|0)){S=(t[2785]|0)+n|0,t[2785]=S,t[2788]=h,t[D+4>>2]=S|1,t[h+S>>2]=S;return}l=(u&-8)+n|0,r=u>>>3;do if(u>>>0<256)if(n=t[S+8>>2]|0,e=t[S+12>>2]|0,(e|0)==(n|0)){t[2783]=t[2783]&~(1<>2]=e,t[e+8>>2]=n;break}else{s=t[S+24>>2]|0,e=t[S+12>>2]|0;do if((e|0)==(S|0)){if(r=S+16|0,n=r+4|0,e=t[n>>2]|0,!e)if(e=t[r>>2]|0,e)n=r;else{r=0;break}for(;;){if(r=e+20|0,u=t[r>>2]|0,u|0){e=u,n=r;continue}if(r=e+16|0,u=t[r>>2]|0,u)e=u,n=r;else break}t[n>>2]=0,r=e}else r=t[S+8>>2]|0,t[r+12>>2]=e,t[e+8>>2]=r,r=e;while(0);if(s|0){if(e=t[S+28>>2]|0,n=11436+(e<<2)|0,(S|0)==(t[n>>2]|0)){if(t[n>>2]=r,!r){t[2784]=t[2784]&~(1<>2]|0)!=(S|0)&1)<<2)>>2]=r,!r)break;t[r+24>>2]=s,e=S+16|0,n=t[e>>2]|0,n|0&&(t[r+16>>2]=n,t[n+24>>2]=r),e=t[e+4>>2]|0,e|0&&(t[r+20>>2]=e,t[e+24>>2]=r)}}while(0);if(t[D+4>>2]=l|1,t[h+l>>2]=l,(D|0)==(t[2788]|0)){t[2785]=l;return}}if(e=l>>>3,l>>>0<256){r=11172+(e<<1<<2)|0,n=t[2783]|0,e=1<>2]|0):(t[2783]=n|e,e=r,n=r+8|0),t[n>>2]=D,t[e+12>>2]=D,t[D+8>>2]=e,t[D+12>>2]=r;return}e=l>>>8,e?l>>>0>16777215?e=31:(h=(e+1048320|0)>>>16&8,S=e<>>16&4,S=S<>>16&2,e=14-(s|h|e)+(S<>>15)|0,e=l>>>(e+7|0)&1|e<<1):e=0,u=11436+(e<<2)|0,t[D+28>>2]=e,t[D+20>>2]=0,t[D+16>>2]=0,n=t[2784]|0,r=1<>>1)|0),r=t[u>>2]|0;;){if((t[r+4>>2]&-8|0)==(l|0)){e=73;break}if(u=r+16+(n>>>31<<2)|0,e=t[u>>2]|0,e)n=n<<1,r=e;else{e=72;break}}if((e|0)==72){t[u>>2]=D,t[D+24>>2]=r,t[D+12>>2]=D,t[D+8>>2]=D;break}else if((e|0)==73){h=r+8|0,S=t[h>>2]|0,t[S+12>>2]=D,t[h>>2]=D,t[D+8>>2]=S,t[D+12>>2]=r,t[D+24>>2]=0;break}}else t[2784]=n|r,t[u>>2]=D,t[D+24>>2]=u,t[D+12>>2]=D,t[D+8>>2]=D;while(0);if(S=(t[2791]|0)+-1|0,t[2791]=S,!S)e=11588;else return;for(;e=t[e>>2]|0,e;)e=e+8|0;t[2791]=-1}}}function CF(){return 11628}function xF(e){e=e|0;var n=0,r=0;return n=m,m=m+16|0,r=n,t[r>>2]=OF(t[e+60>>2]|0)|0,e=x_(Ou(6,r|0)|0)|0,m=n,e|0}function F8(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,L=0,k=0,I=0,K=0,be=0;I=m,m=m+48|0,L=I+16|0,s=I,l=I+32|0,D=e+28|0,u=t[D>>2]|0,t[l>>2]=u,S=e+20|0,u=(t[S>>2]|0)-u|0,t[l+4>>2]=u,t[l+8>>2]=n,t[l+12>>2]=r,u=u+r|0,h=e+60|0,t[s>>2]=t[h>>2],t[s+4>>2]=l,t[s+8>>2]=2,s=x_(v0(146,s|0)|0)|0;e:do if((u|0)!=(s|0)){for(n=2;!((s|0)<0);)if(u=u-s|0,be=t[l+4>>2]|0,K=s>>>0>be>>>0,l=K?l+8|0:l,n=(K<<31>>31)+n|0,be=s-(K?be:0)|0,t[l>>2]=(t[l>>2]|0)+be,K=l+4|0,t[K>>2]=(t[K>>2]|0)-be,t[L>>2]=t[h>>2],t[L+4>>2]=l,t[L+8>>2]=n,s=x_(v0(146,L|0)|0)|0,(u|0)==(s|0)){k=3;break e}t[e+16>>2]=0,t[D>>2]=0,t[S>>2]=0,t[e>>2]=t[e>>2]|32,(n|0)==2?r=0:r=r-(t[l+4>>2]|0)|0}else k=3;while(0);return(k|0)==3&&(be=t[e+44>>2]|0,t[e+16>>2]=be+(t[e+48>>2]|0),t[D>>2]=be,t[S>>2]=be),m=I,r|0}function AF(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0;return l=m,m=m+32|0,s=l,u=l+20|0,t[s>>2]=t[e+60>>2],t[s+4>>2]=0,t[s+8>>2]=n,t[s+12>>2]=u,t[s+16>>2]=r,(x_(Ni(140,s|0)|0)|0)<0?(t[u>>2]=-1,e=-1):e=t[u>>2]|0,m=l,e|0}function x_(e){return e=e|0,e>>>0>4294963200&&(t[(bv()|0)>>2]=0-e,e=-1),e|0}function bv(){return(RF()|0)+64|0}function RF(){return YE()|0}function YE(){return 2084}function OF(e){return e=e|0,e|0}function MF(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0;return l=m,m=m+32|0,u=l,t[e+36>>2]=1,((t[e>>2]&64|0)==0?(t[u>>2]=t[e+60>>2],t[u+4>>2]=21523,t[u+8>>2]=l+16,I0(54,u|0)|0):0)&&(c[e+75>>0]=-1),u=F8(e,n,r)|0,m=l,u|0}function P8(e,n){e=e|0,n=n|0;var r=0,u=0;if(r=c[e>>0]|0,u=c[n>>0]|0,r<<24>>24==0?1:r<<24>>24!=u<<24>>24)e=u;else{do e=e+1|0,n=n+1|0,r=c[e>>0]|0,u=c[n>>0]|0;while(!(r<<24>>24==0?1:r<<24>>24!=u<<24>>24));e=u}return(r&255)-(e&255)|0}function kF(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0;e:do if(!r)e=0;else{for(;u=c[e>>0]|0,l=c[n>>0]|0,u<<24>>24==l<<24>>24;)if(r=r+-1|0,r)e=e+1|0,n=n+1|0;else{e=0;break e}e=(u&255)-(l&255)|0}while(0);return e|0}function I8(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,L=0,k=0,I=0,K=0,be=0,Se=0,ge=0;ge=m,m=m+224|0,k=ge+120|0,I=ge+80|0,be=ge,Se=ge+136|0,u=I,l=u+40|0;do t[u>>2]=0,u=u+4|0;while((u|0)<(l|0));return t[k>>2]=t[r>>2],(KE(0,n,k,be,I)|0)<0?r=-1:((t[e+76>>2]|0)>-1?K=LF(e)|0:K=0,r=t[e>>2]|0,L=r&32,(c[e+74>>0]|0)<1&&(t[e>>2]=r&-33),u=e+48|0,t[u>>2]|0?r=KE(e,n,k,be,I)|0:(l=e+44|0,s=t[l>>2]|0,t[l>>2]=Se,h=e+28|0,t[h>>2]=Se,D=e+20|0,t[D>>2]=Se,t[u>>2]=80,S=e+16|0,t[S>>2]=Se+80,r=KE(e,n,k,be,I)|0,s&&(M_[t[e+36>>2]&7](e,0,0)|0,r=(t[D>>2]|0)==0?-1:r,t[l>>2]=s,t[u>>2]=0,t[S>>2]=0,t[h>>2]=0,t[D>>2]=0)),u=t[e>>2]|0,t[e>>2]=u|L,K|0&&NF(e),r=(u&32|0)==0?r:-1),m=ge,r|0}function KE(e,n,r,u,l){e=e|0,n=n|0,r=r|0,u=u|0,l=l|0;var s=0,h=0,D=0,S=0,L=0,k=0,I=0,K=0,be=0,Se=0,ge=0,Ze=0,Ge=0,ct=0,Me=0,Pe=0,Zt=0,Br=0,In=0,yn=0,Er=0,Pr=0,Ln=0;Ln=m,m=m+64|0,In=Ln+16|0,yn=Ln,Zt=Ln+24|0,Er=Ln+8|0,Pr=Ln+20|0,t[In>>2]=n,ct=(e|0)!=0,Me=Zt+40|0,Pe=Me,Zt=Zt+39|0,Br=Er+4|0,h=0,s=0,k=0;e:for(;;){do if((s|0)>-1)if((h|0)>(2147483647-s|0)){t[(bv()|0)>>2]=75,s=-1;break}else{s=h+s|0;break}while(0);if(h=c[n>>0]|0,h<<24>>24)D=n;else{Ge=87;break}t:for(;;){switch(h<<24>>24){case 37:{h=D,Ge=9;break t}case 0:{h=D;break t}default:}Ze=D+1|0,t[In>>2]=Ze,h=c[Ze>>0]|0,D=Ze}t:do if((Ge|0)==9)for(;;){if(Ge=0,(c[D+1>>0]|0)!=37)break t;if(h=h+1|0,D=D+2|0,t[In>>2]=D,(c[D>>0]|0)==37)Ge=9;else break}while(0);if(h=h-n|0,ct&&Yo(e,n,h),h|0){n=D;continue}S=D+1|0,h=(c[S>>0]|0)+-48|0,h>>>0<10?(Ze=(c[D+2>>0]|0)==36,ge=Ze?h:-1,k=Ze?1:k,S=Ze?D+3|0:S):ge=-1,t[In>>2]=S,h=c[S>>0]|0,D=(h<<24>>24)+-32|0;t:do if(D>>>0<32)for(L=0,I=h;;){if(h=1<>2]=S,h=c[S>>0]|0,D=(h<<24>>24)+-32|0,D>>>0>=32)break;I=h}else L=0;while(0);if(h<<24>>24==42){if(D=S+1|0,h=(c[D>>0]|0)+-48|0,h>>>0<10?(c[S+2>>0]|0)==36:0)t[l+(h<<2)>>2]=10,h=t[u+((c[D>>0]|0)+-48<<3)>>2]|0,k=1,S=S+3|0;else{if(k|0){s=-1;break}ct?(k=(t[r>>2]|0)+(4-1)&~(4-1),h=t[k>>2]|0,t[r>>2]=k+4,k=0,S=D):(h=0,k=0,S=D)}t[In>>2]=S,Ze=(h|0)<0,h=Ze?0-h|0:h,L=Ze?L|8192:L}else{if(h=b8(In)|0,(h|0)<0){s=-1;break}S=t[In>>2]|0}do if((c[S>>0]|0)==46){if((c[S+1>>0]|0)!=42){t[In>>2]=S+1,D=b8(In)|0,S=t[In>>2]|0;break}if(I=S+2|0,D=(c[I>>0]|0)+-48|0,D>>>0<10?(c[S+3>>0]|0)==36:0){t[l+(D<<2)>>2]=10,D=t[u+((c[I>>0]|0)+-48<<3)>>2]|0,S=S+4|0,t[In>>2]=S;break}if(k|0){s=-1;break e}ct?(Ze=(t[r>>2]|0)+(4-1)&~(4-1),D=t[Ze>>2]|0,t[r>>2]=Ze+4):D=0,t[In>>2]=I,S=I}else D=-1;while(0);for(Se=0;;){if(((c[S>>0]|0)+-65|0)>>>0>57){s=-1;break e}if(Ze=S+1|0,t[In>>2]=Ze,I=c[(c[S>>0]|0)+-65+(5178+(Se*58|0))>>0]|0,K=I&255,(K+-1|0)>>>0<8)Se=K,S=Ze;else break}if(!(I<<24>>24)){s=-1;break}be=(ge|0)>-1;do if(I<<24>>24==19)if(be){s=-1;break e}else Ge=49;else{if(be){t[l+(ge<<2)>>2]=K,be=u+(ge<<3)|0,ge=t[be+4>>2]|0,Ge=yn,t[Ge>>2]=t[be>>2],t[Ge+4>>2]=ge,Ge=49;break}if(!ct){s=0;break e}B8(yn,K,r)}while(0);if((Ge|0)==49?(Ge=0,!ct):0){h=0,n=Ze;continue}S=c[S>>0]|0,S=(Se|0)!=0&(S&15|0)==3?S&-33:S,be=L&-65537,ge=(L&8192|0)==0?L:be;t:do switch(S|0){case 110:switch((Se&255)<<24>>24){case 0:{t[t[yn>>2]>>2]=s,h=0,n=Ze;continue e}case 1:{t[t[yn>>2]>>2]=s,h=0,n=Ze;continue e}case 2:{h=t[yn>>2]|0,t[h>>2]=s,t[h+4>>2]=((s|0)<0)<<31>>31,h=0,n=Ze;continue e}case 3:{_[t[yn>>2]>>1]=s,h=0,n=Ze;continue e}case 4:{c[t[yn>>2]>>0]=s,h=0,n=Ze;continue e}case 6:{t[t[yn>>2]>>2]=s,h=0,n=Ze;continue e}case 7:{h=t[yn>>2]|0,t[h>>2]=s,t[h+4>>2]=((s|0)<0)<<31>>31,h=0,n=Ze;continue e}default:{h=0,n=Ze;continue e}}case 112:{S=120,D=D>>>0>8?D:8,n=ge|8,Ge=61;break}case 88:case 120:{n=ge,Ge=61;break}case 111:{S=yn,n=t[S>>2]|0,S=t[S+4>>2]|0,K=PF(n,S,Me)|0,be=Pe-K|0,L=0,I=5642,D=(ge&8|0)==0|(D|0)>(be|0)?D:be+1|0,be=ge,Ge=67;break}case 105:case 100:if(S=yn,n=t[S>>2]|0,S=t[S+4>>2]|0,(S|0)<0){n=A_(0,0,n|0,S|0)|0,S=ut,L=yn,t[L>>2]=n,t[L+4>>2]=S,L=1,I=5642,Ge=66;break t}else{L=(ge&2049|0)!=0&1,I=(ge&2048|0)==0?(ge&1|0)==0?5642:5644:5643,Ge=66;break t}case 117:{S=yn,L=0,I=5642,n=t[S>>2]|0,S=t[S+4>>2]|0,Ge=66;break}case 99:{c[Zt>>0]=t[yn>>2],n=Zt,L=0,I=5642,K=Me,S=1,D=be;break}case 109:{S=IF(t[(bv()|0)>>2]|0)|0,Ge=71;break}case 115:{S=t[yn>>2]|0,S=S|0?S:5652,Ge=71;break}case 67:{t[Er>>2]=t[yn>>2],t[Br>>2]=0,t[yn>>2]=Er,K=-1,S=Er,Ge=75;break}case 83:{n=t[yn>>2]|0,D?(K=D,S=n,Ge=75):(_l(e,32,h,0,ge),n=0,Ge=84);break}case 65:case 71:case 70:case 69:case 97:case 103:case 102:case 101:{h=BF(e,+B[yn>>3],h,D,ge,S)|0,n=Ze;continue e}default:L=0,I=5642,K=Me,S=D,D=ge}while(0);t:do if((Ge|0)==61)ge=yn,Se=t[ge>>2]|0,ge=t[ge+4>>2]|0,K=FF(Se,ge,Me,S&32)|0,I=(n&8|0)==0|(Se|0)==0&(ge|0)==0,L=I?0:2,I=I?5642:5642+(S>>4)|0,be=n,n=Se,S=ge,Ge=67;else if((Ge|0)==66)K=Bv(n,S,Me)|0,be=ge,Ge=67;else if((Ge|0)==71)Ge=0,ge=bF(S,0,D)|0,Se=(ge|0)==0,n=S,L=0,I=5642,K=Se?S+D|0:ge,S=Se?D:ge-S|0,D=be;else if((Ge|0)==75){for(Ge=0,I=S,n=0,D=0;L=t[I>>2]|0,!(!L||(D=U8(Pr,L)|0,(D|0)<0|D>>>0>(K-n|0)>>>0));)if(n=D+n|0,K>>>0>n>>>0)I=I+4|0;else break;if((D|0)<0){s=-1;break e}if(_l(e,32,h,n,ge),!n)n=0,Ge=84;else for(L=0;;){if(D=t[S>>2]|0,!D){Ge=84;break t}if(D=U8(Pr,D)|0,L=D+L|0,(L|0)>(n|0)){Ge=84;break t}if(Yo(e,Pr,D),L>>>0>=n>>>0){Ge=84;break}else S=S+4|0}}while(0);if((Ge|0)==67)Ge=0,S=(n|0)!=0|(S|0)!=0,ge=(D|0)!=0|S,S=((S^1)&1)+(Pe-K)|0,n=ge?K:Me,K=Me,S=ge?(D|0)>(S|0)?D:S:D,D=(D|0)>-1?be&-65537:be;else if((Ge|0)==84){Ge=0,_l(e,32,h,n,ge^8192),h=(h|0)>(n|0)?h:n,n=Ze;continue}Se=K-n|0,be=(S|0)<(Se|0)?Se:S,ge=be+L|0,h=(h|0)<(ge|0)?ge:h,_l(e,32,h,ge,D),Yo(e,I,L),_l(e,48,h,ge,D^65536),_l(e,48,be,Se,0),Yo(e,n,Se),_l(e,32,h,ge,D^8192),n=Ze}e:do if((Ge|0)==87&&!e)if(!k)s=0;else{for(s=1;n=t[l+(s<<2)>>2]|0,!!n;)if(B8(u+(s<<3)|0,n,r),s=s+1|0,(s|0)>=10){s=1;break e}for(;;){if(t[l+(s<<2)>>2]|0){s=-1;break e}if(s=s+1|0,(s|0)>=10){s=1;break}}}while(0);return m=Ln,s|0}function LF(e){return e=e|0,0}function NF(e){e=e|0}function Yo(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]&32||YF(n,r,e)|0}function b8(e){e=e|0;var n=0,r=0,u=0;if(r=t[e>>2]|0,u=(c[r>>0]|0)+-48|0,u>>>0<10){n=0;do n=u+(n*10|0)|0,r=r+1|0,t[e>>2]=r,u=(c[r>>0]|0)+-48|0;while(u>>>0<10)}else n=0;return n|0}function B8(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0;e:do if(n>>>0<=20)do switch(n|0){case 9:{u=(t[r>>2]|0)+(4-1)&~(4-1),n=t[u>>2]|0,t[r>>2]=u+4,t[e>>2]=n;break e}case 10:{u=(t[r>>2]|0)+(4-1)&~(4-1),n=t[u>>2]|0,t[r>>2]=u+4,u=e,t[u>>2]=n,t[u+4>>2]=((n|0)<0)<<31>>31;break e}case 11:{u=(t[r>>2]|0)+(4-1)&~(4-1),n=t[u>>2]|0,t[r>>2]=u+4,u=e,t[u>>2]=n,t[u+4>>2]=0;break e}case 12:{u=(t[r>>2]|0)+(8-1)&~(8-1),n=u,l=t[n>>2]|0,n=t[n+4>>2]|0,t[r>>2]=u+8,u=e,t[u>>2]=l,t[u+4>>2]=n;break e}case 13:{l=(t[r>>2]|0)+(4-1)&~(4-1),u=t[l>>2]|0,t[r>>2]=l+4,u=(u&65535)<<16>>16,l=e,t[l>>2]=u,t[l+4>>2]=((u|0)<0)<<31>>31;break e}case 14:{l=(t[r>>2]|0)+(4-1)&~(4-1),u=t[l>>2]|0,t[r>>2]=l+4,l=e,t[l>>2]=u&65535,t[l+4>>2]=0;break e}case 15:{l=(t[r>>2]|0)+(4-1)&~(4-1),u=t[l>>2]|0,t[r>>2]=l+4,u=(u&255)<<24>>24,l=e,t[l>>2]=u,t[l+4>>2]=((u|0)<0)<<31>>31;break e}case 16:{l=(t[r>>2]|0)+(4-1)&~(4-1),u=t[l>>2]|0,t[r>>2]=l+4,l=e,t[l>>2]=u&255,t[l+4>>2]=0;break e}case 17:{l=(t[r>>2]|0)+(8-1)&~(8-1),s=+B[l>>3],t[r>>2]=l+8,B[e>>3]=s;break e}case 18:{l=(t[r>>2]|0)+(8-1)&~(8-1),s=+B[l>>3],t[r>>2]=l+8,B[e>>3]=s;break e}default:break e}while(0);while(0)}function FF(e,n,r,u){if(e=e|0,n=n|0,r=r|0,u=u|0,!((e|0)==0&(n|0)==0))do r=r+-1|0,c[r>>0]=O[5694+(e&15)>>0]|0|u,e=R_(e|0,n|0,4)|0,n=ut;while(!((e|0)==0&(n|0)==0));return r|0}function PF(e,n,r){if(e=e|0,n=n|0,r=r|0,!((e|0)==0&(n|0)==0))do r=r+-1|0,c[r>>0]=e&7|48,e=R_(e|0,n|0,3)|0,n=ut;while(!((e|0)==0&(n|0)==0));return r|0}function Bv(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;if(n>>>0>0|(n|0)==0&e>>>0>4294967295){for(;u=ZE(e|0,n|0,10,0)|0,r=r+-1|0,c[r>>0]=u&255|48,u=e,e=JE(e|0,n|0,10,0)|0,n>>>0>9|(n|0)==9&u>>>0>4294967295;)n=ut;n=e}else n=e;if(n)for(;r=r+-1|0,c[r>>0]=(n>>>0)%10|0|48,!(n>>>0<10);)n=(n>>>0)/10|0;return r|0}function IF(e){return e=e|0,qF(e,t[(HF()|0)+188>>2]|0)|0}function bF(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;s=n&255,u=(r|0)!=0;e:do if(u&(e&3|0)!=0)for(l=n&255;;){if((c[e>>0]|0)==l<<24>>24){h=6;break e}if(e=e+1|0,r=r+-1|0,u=(r|0)!=0,!(u&(e&3|0)!=0)){h=5;break}}else h=5;while(0);(h|0)==5&&(u?h=6:r=0);e:do if((h|0)==6&&(l=n&255,(c[e>>0]|0)!=l<<24>>24)){u=lr(s,16843009)|0;t:do if(r>>>0>3){for(;s=t[e>>2]^u,!((s&-2139062144^-2139062144)&s+-16843009|0);)if(e=e+4|0,r=r+-4|0,r>>>0<=3){h=11;break t}}else h=11;while(0);if((h|0)==11&&!r){r=0;break}for(;;){if((c[e>>0]|0)==l<<24>>24)break e;if(e=e+1|0,r=r+-1|0,!r){r=0;break}}}while(0);return(r|0?e:0)|0}function _l(e,n,r,u,l){e=e|0,n=n|0,r=r|0,u=u|0,l=l|0;var s=0,h=0;if(h=m,m=m+256|0,s=h,(r|0)>(u|0)&(l&73728|0)==0){if(l=r-u|0,jv(s|0,n|0,(l>>>0<256?l:256)|0)|0,l>>>0>255){n=r-u|0;do Yo(e,s,256),l=l+-256|0;while(l>>>0>255);l=n&255}Yo(e,s,l)}m=h}function U8(e,n){return e=e|0,n=n|0,e?e=jF(e,n,0)|0:e=0,e|0}function BF(e,n,r,u,l,s){e=e|0,n=+n,r=r|0,u=u|0,l=l|0,s=s|0;var h=0,D=0,S=0,L=0,k=0,I=0,K=0,be=0,Se=0,ge=0,Ze=0,Ge=0,ct=0,Me=0,Pe=0,Zt=0,Br=0,In=0,yn=0,Er=0,Pr=0,Ln=0,uu=0;uu=m,m=m+560|0,S=uu+8|0,Ze=uu,Ln=uu+524|0,Pr=Ln,L=uu+512|0,t[Ze>>2]=0,Er=L+12|0,j8(n)|0,(ut|0)<0?(n=-n,In=1,Br=5659):(In=(l&2049|0)!=0&1,Br=(l&2048|0)==0?(l&1|0)==0?5660:5665:5662),j8(n)|0,yn=ut&2146435072;do if(yn>>>0<2146435072|(yn|0)==2146435072&0<0){if(be=+UF(n,Ze)*2,h=be!=0,h&&(t[Ze>>2]=(t[Ze>>2]|0)+-1),ct=s|32,(ct|0)==97){Se=s&32,K=(Se|0)==0?Br:Br+9|0,I=In|2,h=12-u|0;do if(u>>>0>11|(h|0)==0)n=be;else{n=8;do h=h+-1|0,n=n*16;while((h|0)!=0);if((c[K>>0]|0)==45){n=-(n+(-be-n));break}else{n=be+n-n;break}}while(0);D=t[Ze>>2]|0,h=(D|0)<0?0-D|0:D,h=Bv(h,((h|0)<0)<<31>>31,Er)|0,(h|0)==(Er|0)&&(h=L+11|0,c[h>>0]=48),c[h+-1>>0]=(D>>31&2)+43,k=h+-2|0,c[k>>0]=s+15,L=(u|0)<1,S=(l&8|0)==0,h=Ln;do yn=~~n,D=h+1|0,c[h>>0]=O[5694+yn>>0]|Se,n=(n-+(yn|0))*16,((D-Pr|0)==1?!(S&(L&n==0)):0)?(c[D>>0]=46,h=h+2|0):h=D;while(n!=0);yn=h-Pr|0,Pr=Er-k|0,Er=(u|0)!=0&(yn+-2|0)<(u|0)?u+2|0:yn,h=Pr+I+Er|0,_l(e,32,r,h,l),Yo(e,K,I),_l(e,48,r,h,l^65536),Yo(e,Ln,yn),_l(e,48,Er-yn|0,0,0),Yo(e,k,Pr),_l(e,32,r,h,l^8192);break}D=(u|0)<0?6:u,h?(h=(t[Ze>>2]|0)+-28|0,t[Ze>>2]=h,n=be*268435456):(n=be,h=t[Ze>>2]|0),yn=(h|0)<0?S:S+288|0,S=yn;do Pe=~~n>>>0,t[S>>2]=Pe,S=S+4|0,n=(n-+(Pe>>>0))*1e9;while(n!=0);if((h|0)>0)for(L=yn,I=S;;){if(k=(h|0)<29?h:29,h=I+-4|0,h>>>0>=L>>>0){S=0;do Me=G8(t[h>>2]|0,0,k|0)|0,Me=QE(Me|0,ut|0,S|0,0)|0,Pe=ut,Ge=ZE(Me|0,Pe|0,1e9,0)|0,t[h>>2]=Ge,S=JE(Me|0,Pe|0,1e9,0)|0,h=h+-4|0;while(h>>>0>=L>>>0);S&&(L=L+-4|0,t[L>>2]=S)}for(S=I;!(S>>>0<=L>>>0);)if(h=S+-4|0,!(t[h>>2]|0))S=h;else break;if(h=(t[Ze>>2]|0)-k|0,t[Ze>>2]=h,(h|0)>0)I=S;else break}else L=yn;if((h|0)<0){u=((D+25|0)/9|0)+1|0,ge=(ct|0)==102;do{if(Se=0-h|0,Se=(Se|0)<9?Se:9,L>>>0>>0){k=(1<>>Se,K=0,h=L;do Pe=t[h>>2]|0,t[h>>2]=(Pe>>>Se)+K,K=lr(Pe&k,I)|0,h=h+4|0;while(h>>>0>>0);h=(t[L>>2]|0)==0?L+4|0:L,K?(t[S>>2]=K,L=h,h=S+4|0):(L=h,h=S)}else L=(t[L>>2]|0)==0?L+4|0:L,h=S;S=ge?yn:L,S=(h-S>>2|0)>(u|0)?S+(u<<2)|0:h,h=(t[Ze>>2]|0)+Se|0,t[Ze>>2]=h}while((h|0)<0);h=L,u=S}else h=L,u=S;if(Pe=yn,h>>>0>>0){if(S=(Pe-h>>2)*9|0,k=t[h>>2]|0,k>>>0>=10){L=10;do L=L*10|0,S=S+1|0;while(k>>>0>=L>>>0)}}else S=0;if(ge=(ct|0)==103,Ge=(D|0)!=0,L=D-((ct|0)!=102?S:0)+((Ge&ge)<<31>>31)|0,(L|0)<(((u-Pe>>2)*9|0)+-9|0)){if(L=L+9216|0,Se=yn+4+(((L|0)/9|0)+-1024<<2)|0,L=((L|0)%9|0)+1|0,(L|0)<9){k=10;do k=k*10|0,L=L+1|0;while((L|0)!=9)}else k=10;if(I=t[Se>>2]|0,K=(I>>>0)%(k>>>0)|0,L=(Se+4|0)==(u|0),L&(K|0)==0)L=Se;else if(be=(((I>>>0)/(k>>>0)|0)&1|0)==0?9007199254740992:9007199254740994,Me=(k|0)/2|0,n=K>>>0>>0?.5:L&(K|0)==(Me|0)?1:1.5,In&&(Me=(c[Br>>0]|0)==45,n=Me?-n:n,be=Me?-be:be),L=I-K|0,t[Se>>2]=L,be+n!=be){if(Me=L+k|0,t[Se>>2]=Me,Me>>>0>999999999)for(S=Se;L=S+-4|0,t[S>>2]=0,L>>>0>>0&&(h=h+-4|0,t[h>>2]=0),Me=(t[L>>2]|0)+1|0,t[L>>2]=Me,Me>>>0>999999999;)S=L;else L=Se;if(S=(Pe-h>>2)*9|0,I=t[h>>2]|0,I>>>0>=10){k=10;do k=k*10|0,S=S+1|0;while(I>>>0>=k>>>0)}}else L=Se;L=L+4|0,L=u>>>0>L>>>0?L:u,Me=h}else L=u,Me=h;for(ct=L;;){if(ct>>>0<=Me>>>0){Ze=0;break}if(h=ct+-4|0,!(t[h>>2]|0))ct=h;else{Ze=1;break}}u=0-S|0;do if(ge)if(h=((Ge^1)&1)+D|0,(h|0)>(S|0)&(S|0)>-5?(k=s+-1|0,D=h+-1-S|0):(k=s+-2|0,D=h+-1|0),h=l&8,h)Se=h;else{if(Ze?(Zt=t[ct+-4>>2]|0,(Zt|0)!=0):0)if((Zt>>>0)%10|0)L=0;else{L=0,h=10;do h=h*10|0,L=L+1|0;while(!((Zt>>>0)%(h>>>0)|0|0))}else L=9;if(h=((ct-Pe>>2)*9|0)+-9|0,(k|32|0)==102){Se=h-L|0,Se=(Se|0)>0?Se:0,D=(D|0)<(Se|0)?D:Se,Se=0;break}else{Se=h+S-L|0,Se=(Se|0)>0?Se:0,D=(D|0)<(Se|0)?D:Se,Se=0;break}}else k=s,Se=l&8;while(0);if(ge=D|Se,I=(ge|0)!=0&1,K=(k|32|0)==102,K)Ge=0,h=(S|0)>0?S:0;else{if(h=(S|0)<0?u:S,h=Bv(h,((h|0)<0)<<31>>31,Er)|0,L=Er,(L-h|0)<2)do h=h+-1|0,c[h>>0]=48;while((L-h|0)<2);c[h+-1>>0]=(S>>31&2)+43,h=h+-2|0,c[h>>0]=k,Ge=h,h=L-h|0}if(h=In+1+D+I+h|0,_l(e,32,r,h,l),Yo(e,Br,In),_l(e,48,r,h,l^65536),K){k=Me>>>0>yn>>>0?yn:Me,Se=Ln+9|0,I=Se,K=Ln+8|0,L=k;do{if(S=Bv(t[L>>2]|0,0,Se)|0,(L|0)==(k|0))(S|0)==(Se|0)&&(c[K>>0]=48,S=K);else if(S>>>0>Ln>>>0){jv(Ln|0,48,S-Pr|0)|0;do S=S+-1|0;while(S>>>0>Ln>>>0)}Yo(e,S,I-S|0),L=L+4|0}while(L>>>0<=yn>>>0);if(ge|0&&Yo(e,5710,1),L>>>0>>0&(D|0)>0)for(;;){if(S=Bv(t[L>>2]|0,0,Se)|0,S>>>0>Ln>>>0){jv(Ln|0,48,S-Pr|0)|0;do S=S+-1|0;while(S>>>0>Ln>>>0)}if(Yo(e,S,(D|0)<9?D:9),L=L+4|0,S=D+-9|0,L>>>0>>0&(D|0)>9)D=S;else{D=S;break}}_l(e,48,D+9|0,9,0)}else{if(ge=Ze?ct:Me+4|0,(D|0)>-1){Ze=Ln+9|0,Se=(Se|0)==0,u=Ze,I=0-Pr|0,K=Ln+8|0,k=Me;do{S=Bv(t[k>>2]|0,0,Ze)|0,(S|0)==(Ze|0)&&(c[K>>0]=48,S=K);do if((k|0)==(Me|0)){if(L=S+1|0,Yo(e,S,1),Se&(D|0)<1){S=L;break}Yo(e,5710,1),S=L}else{if(S>>>0<=Ln>>>0)break;jv(Ln|0,48,S+I|0)|0;do S=S+-1|0;while(S>>>0>Ln>>>0)}while(0);Pr=u-S|0,Yo(e,S,(D|0)>(Pr|0)?Pr:D),D=D-Pr|0,k=k+4|0}while(k>>>0>>0&(D|0)>-1)}_l(e,48,D+18|0,18,0),Yo(e,Ge,Er-Ge|0)}_l(e,32,r,h,l^8192)}else Ln=(s&32|0)!=0,h=In+3|0,_l(e,32,r,h,l&-65537),Yo(e,Br,In),Yo(e,n!=n|!1?Ln?5686:5690:Ln?5678:5682,3),_l(e,32,r,h,l^8192);while(0);return m=uu,((h|0)<(r|0)?r:h)|0}function j8(e){e=+e;var n=0;return B[q>>3]=e,n=t[q>>2]|0,ut=t[q+4>>2]|0,n|0}function UF(e,n){return e=+e,n=n|0,+ +z8(e,n)}function z8(e,n){e=+e,n=n|0;var r=0,u=0,l=0;switch(B[q>>3]=e,r=t[q>>2]|0,u=t[q+4>>2]|0,l=R_(r|0,u|0,52)|0,l&2047){case 0:{e!=0?(e=+z8(e*18446744073709552e3,n),r=(t[n>>2]|0)+-64|0):r=0,t[n>>2]=r;break}case 2047:break;default:t[n>>2]=(l&2047)+-1022,t[q>>2]=r,t[q+4>>2]=u&-2146435073|1071644672,e=+B[q>>3]}return+e}function jF(e,n,r){e=e|0,n=n|0,r=r|0;do if(e){if(n>>>0<128){c[e>>0]=n,e=1;break}if(!(t[t[(zF()|0)+188>>2]>>2]|0))if((n&-128|0)==57216){c[e>>0]=n,e=1;break}else{t[(bv()|0)>>2]=84,e=-1;break}if(n>>>0<2048){c[e>>0]=n>>>6|192,c[e+1>>0]=n&63|128,e=2;break}if(n>>>0<55296|(n&-8192|0)==57344){c[e>>0]=n>>>12|224,c[e+1>>0]=n>>>6&63|128,c[e+2>>0]=n&63|128,e=3;break}if((n+-65536|0)>>>0<1048576){c[e>>0]=n>>>18|240,c[e+1>>0]=n>>>12&63|128,c[e+2>>0]=n>>>6&63|128,c[e+3>>0]=n&63|128,e=4;break}else{t[(bv()|0)>>2]=84,e=-1;break}}else e=1;while(0);return e|0}function zF(){return YE()|0}function HF(){return YE()|0}function qF(e,n){e=e|0,n=n|0;var r=0,u=0;for(u=0;;){if((O[5712+u>>0]|0)==(e|0)){e=2;break}if(r=u+1|0,(r|0)==87){r=5800,u=87,e=5;break}else u=r}if((e|0)==2&&(u?(r=5800,e=5):r=5800),(e|0)==5)for(;;){do e=r,r=r+1|0;while((c[e>>0]|0)!=0);if(u=u+-1|0,u)e=5;else break}return WF(r,t[n+20>>2]|0)|0}function WF(e,n){return e=e|0,n=n|0,VF(e,n)|0}function VF(e,n){return e=e|0,n=n|0,n?n=GF(t[n>>2]|0,t[n+4>>2]|0,e)|0:n=0,(n|0?n:e)|0}function GF(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0,S=0,L=0,k=0,I=0,K=0;K=(t[e>>2]|0)+1794895138|0,s=Xp(t[e+8>>2]|0,K)|0,u=Xp(t[e+12>>2]|0,K)|0,l=Xp(t[e+16>>2]|0,K)|0;e:do if((s>>>0>>2>>>0?(I=n-(s<<2)|0,u>>>0>>0&l>>>0>>0):0)?((l|u)&3|0)==0:0){for(I=u>>>2,k=l>>>2,L=0;;){if(D=s>>>1,S=L+D|0,h=S<<1,l=h+I|0,u=Xp(t[e+(l<<2)>>2]|0,K)|0,l=Xp(t[e+(l+1<<2)>>2]|0,K)|0,!(l>>>0>>0&u>>>0<(n-l|0)>>>0)){u=0;break e}if(c[e+(l+u)>>0]|0){u=0;break e}if(u=P8(r,e+l|0)|0,!u)break;if(u=(u|0)<0,(s|0)==1){u=0;break e}else L=u?L:S,s=u?D:s-D|0}u=h+k|0,l=Xp(t[e+(u<<2)>>2]|0,K)|0,u=Xp(t[e+(u+1<<2)>>2]|0,K)|0,u>>>0>>0&l>>>0<(n-u|0)>>>0?u=(c[e+(u+l)>>0]|0)==0?e+u|0:0:u=0}else u=0;while(0);return u|0}function Xp(e,n){e=e|0,n=n|0;var r=0;return r=X8(e|0)|0,((n|0)==0?e:r)|0}function YF(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0,D=0;u=r+16|0,l=t[u>>2]|0,l?s=5:KF(r)|0?u=0:(l=t[u>>2]|0,s=5);e:do if((s|0)==5){if(D=r+20|0,h=t[D>>2]|0,u=h,(l-h|0)>>>0>>0){u=M_[t[r+36>>2]&7](r,e,n)|0;break}t:do if((c[r+75>>0]|0)>-1){for(h=n;;){if(!h){s=0,l=e;break t}if(l=h+-1|0,(c[e+l>>0]|0)==10)break;h=l}if(u=M_[t[r+36>>2]&7](r,e,h)|0,u>>>0>>0)break e;s=h,l=e+h|0,n=n-h|0,u=t[D>>2]|0}else s=0,l=e;while(0);_r(u|0,l|0,n|0)|0,t[D>>2]=(t[D>>2]|0)+n,u=s+n|0}while(0);return u|0}function KF(e){e=e|0;var n=0,r=0;return n=e+74|0,r=c[n>>0]|0,c[n>>0]=r+255|r,n=t[e>>2]|0,n&8?(t[e>>2]=n|32,e=-1):(t[e+8>>2]=0,t[e+4>>2]=0,r=t[e+44>>2]|0,t[e+28>>2]=r,t[e+20>>2]=r,t[e+16>>2]=r+(t[e+48>>2]|0),e=0),e|0}function Au(e,n){e=w(e),n=w(n);var r=0,u=0;r=H8(e)|0;do if((r&2147483647)>>>0<=2139095040){if(u=H8(n)|0,(u&2147483647)>>>0<=2139095040)if((u^r|0)<0){e=(r|0)<0?n:e;break}else{e=e>2]=e,t[q>>2]|0|0}function Qp(e,n){e=w(e),n=w(n);var r=0,u=0;r=q8(e)|0;do if((r&2147483647)>>>0<=2139095040){if(u=q8(n)|0,(u&2147483647)>>>0<=2139095040)if((u^r|0)<0){e=(r|0)<0?e:n;break}else{e=e>2]=e,t[q>>2]|0|0}function XE(e,n){e=w(e),n=w(n);var r=0,u=0,l=0,s=0,h=0,D=0,S=0,L=0;s=(T[q>>2]=e,t[q>>2]|0),D=(T[q>>2]=n,t[q>>2]|0),r=s>>>23&255,h=D>>>23&255,S=s&-2147483648,l=D<<1;e:do if((l|0)!=0?!((r|0)==255|((XF(n)|0)&2147483647)>>>0>2139095040):0){if(u=s<<1,u>>>0<=l>>>0)return n=w(e*w(0)),w((u|0)==(l|0)?n:e);if(r)u=s&8388607|8388608;else{if(r=s<<9,(r|0)>-1){u=r,r=0;do r=r+-1|0,u=u<<1;while((u|0)>-1)}else r=0;u=s<<1-r}if(h)D=D&8388607|8388608;else{if(s=D<<9,(s|0)>-1){l=0;do l=l+-1|0,s=s<<1;while((s|0)>-1)}else l=0;h=l,D=D<<1-l}l=u-D|0,s=(l|0)>-1;t:do if((r|0)>(h|0)){for(;;){if(s)if(l)u=l;else break;if(u=u<<1,r=r+-1|0,l=u-D|0,s=(l|0)>-1,(r|0)<=(h|0))break t}n=w(e*w(0));break e}while(0);if(s)if(l)u=l;else{n=w(e*w(0));break}if(u>>>0<8388608)do u=u<<1,r=r+-1|0;while(u>>>0<8388608);(r|0)>0?r=u+-8388608|r<<23:r=u>>>(1-r|0),n=(t[q>>2]=r|S,w(T[q>>2]))}else L=3;while(0);return(L|0)==3&&(n=w(e*n),n=w(n/n)),w(n)}function XF(e){return e=w(e),T[q>>2]=e,t[q>>2]|0|0}function QF(e,n){return e=e|0,n=n|0,I8(t[582]|0,e,n)|0}function hi(e){e=e|0,$n()}function Uv(e){e=e|0}function JF(e,n){return e=e|0,n=n|0,0}function ZF(e){return e=e|0,(W8(e+4|0)|0)==-1?(P1[t[(t[e>>2]|0)+8>>2]&127](e),e=1):e=0,e|0}function W8(e){e=e|0;var n=0;return n=t[e>>2]|0,t[e>>2]=n+-1,n+-1|0}function t2(e){e=e|0,ZF(e)|0&&$F(e)}function $F(e){e=e|0;var n=0;n=e+8|0,((t[n>>2]|0)!=0?(W8(n)|0)!=-1:0)||P1[t[(t[e>>2]|0)+16>>2]&127](e)}function pn(e){e=e|0;var n=0;for(n=(e|0)==0?1:e;e=T_(n)|0,!(e|0);){if(e=tP()|0,!e){e=0;break}uS[e&0]()}return e|0}function V8(e){return e=e|0,pn(e)|0}function yt(e){e=e|0,C_(e)}function eP(e){e=e|0,(c[e+11>>0]|0)<0&&yt(t[e>>2]|0)}function tP(){var e=0;return e=t[2923]|0,t[2923]=e+0,e|0}function nP(){}function A_(e,n,r,u){return e=e|0,n=n|0,r=r|0,u=u|0,u=n-u-(r>>>0>e>>>0|0)>>>0,ut=u,e-r>>>0|0|0}function QE(e,n,r,u){return e=e|0,n=n|0,r=r|0,u=u|0,r=e+r>>>0,ut=n+u+(r>>>0>>0|0)>>>0,r|0|0}function jv(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0,h=0;if(s=e+r|0,n=n&255,(r|0)>=67){for(;e&3;)c[e>>0]=n,e=e+1|0;for(u=s&-4|0,l=u-64|0,h=n|n<<8|n<<16|n<<24;(e|0)<=(l|0);)t[e>>2]=h,t[e+4>>2]=h,t[e+8>>2]=h,t[e+12>>2]=h,t[e+16>>2]=h,t[e+20>>2]=h,t[e+24>>2]=h,t[e+28>>2]=h,t[e+32>>2]=h,t[e+36>>2]=h,t[e+40>>2]=h,t[e+44>>2]=h,t[e+48>>2]=h,t[e+52>>2]=h,t[e+56>>2]=h,t[e+60>>2]=h,e=e+64|0;for(;(e|0)<(u|0);)t[e>>2]=h,e=e+4|0}for(;(e|0)<(s|0);)c[e>>0]=n,e=e+1|0;return s-r|0}function G8(e,n,r){return e=e|0,n=n|0,r=r|0,(r|0)<32?(ut=n<>>32-r,e<>>r,e>>>r|(n&(1<>>r-32|0)}function _r(e,n,r){e=e|0,n=n|0,r=r|0;var u=0,l=0,s=0;if((r|0)>=8192)return ai(e|0,n|0,r|0)|0;if(s=e|0,l=e+r|0,(e&3)==(n&3)){for(;e&3;){if(!r)return s|0;c[e>>0]=c[n>>0]|0,e=e+1|0,n=n+1|0,r=r-1|0}for(r=l&-4|0,u=r-64|0;(e|0)<=(u|0);)t[e>>2]=t[n>>2],t[e+4>>2]=t[n+4>>2],t[e+8>>2]=t[n+8>>2],t[e+12>>2]=t[n+12>>2],t[e+16>>2]=t[n+16>>2],t[e+20>>2]=t[n+20>>2],t[e+24>>2]=t[n+24>>2],t[e+28>>2]=t[n+28>>2],t[e+32>>2]=t[n+32>>2],t[e+36>>2]=t[n+36>>2],t[e+40>>2]=t[n+40>>2],t[e+44>>2]=t[n+44>>2],t[e+48>>2]=t[n+48>>2],t[e+52>>2]=t[n+52>>2],t[e+56>>2]=t[n+56>>2],t[e+60>>2]=t[n+60>>2],e=e+64|0,n=n+64|0;for(;(e|0)<(r|0);)t[e>>2]=t[n>>2],e=e+4|0,n=n+4|0}else for(r=l-4|0;(e|0)<(r|0);)c[e>>0]=c[n>>0]|0,c[e+1>>0]=c[n+1>>0]|0,c[e+2>>0]=c[n+2>>0]|0,c[e+3>>0]=c[n+3>>0]|0,e=e+4|0,n=n+4|0;for(;(e|0)<(l|0);)c[e>>0]=c[n>>0]|0,e=e+1|0,n=n+1|0;return s|0}function Y8(e){e=e|0;var n=0;return n=c[De+(e&255)>>0]|0,(n|0)<8?n|0:(n=c[De+(e>>8&255)>>0]|0,(n|0)<8?n+8|0:(n=c[De+(e>>16&255)>>0]|0,(n|0)<8?n+16|0:(c[De+(e>>>24)>>0]|0)+24|0))}function K8(e,n,r,u,l){e=e|0,n=n|0,r=r|0,u=u|0,l=l|0;var s=0,h=0,D=0,S=0,L=0,k=0,I=0,K=0,be=0,Se=0;if(k=e,S=n,L=S,h=r,K=u,D=K,!L)return s=(l|0)!=0,D?s?(t[l>>2]=e|0,t[l+4>>2]=n&0,K=0,l=0,ut=K,l|0):(K=0,l=0,ut=K,l|0):(s&&(t[l>>2]=(k>>>0)%(h>>>0),t[l+4>>2]=0),K=0,l=(k>>>0)/(h>>>0)>>>0,ut=K,l|0);s=(D|0)==0;do if(h){if(!s){if(s=(Dr(D|0)|0)-(Dr(L|0)|0)|0,s>>>0<=31){I=s+1|0,D=31-s|0,n=s-31>>31,h=I,e=k>>>(I>>>0)&n|L<>>(I>>>0)&n,s=0,D=k<>2]=e|0,t[l+4>>2]=S|n&0,K=0,l=0,ut=K,l|0):(K=0,l=0,ut=K,l|0)}if(s=h-1|0,s&h|0){D=(Dr(h|0)|0)+33-(Dr(L|0)|0)|0,Se=64-D|0,I=32-D|0,S=I>>31,be=D-32|0,n=be>>31,h=D,e=I-1>>31&L>>>(be>>>0)|(L<>>(D>>>0))&n,n=n&L>>>(D>>>0),s=k<>>(be>>>0))&S|k<>31;break}return l|0&&(t[l>>2]=s&k,t[l+4>>2]=0),(h|0)==1?(be=S|n&0,Se=e|0|0,ut=be,Se|0):(Se=Y8(h|0)|0,be=L>>>(Se>>>0)|0,Se=L<<32-Se|k>>>(Se>>>0)|0,ut=be,Se|0)}else{if(s)return l|0&&(t[l>>2]=(L>>>0)%(h>>>0),t[l+4>>2]=0),be=0,Se=(L>>>0)/(h>>>0)>>>0,ut=be,Se|0;if(!k)return l|0&&(t[l>>2]=0,t[l+4>>2]=(L>>>0)%(D>>>0)),be=0,Se=(L>>>0)/(D>>>0)>>>0,ut=be,Se|0;if(s=D-1|0,!(s&D))return l|0&&(t[l>>2]=e|0,t[l+4>>2]=s&L|n&0),be=0,Se=L>>>((Y8(D|0)|0)>>>0),ut=be,Se|0;if(s=(Dr(D|0)|0)-(Dr(L|0)|0)|0,s>>>0<=30){n=s+1|0,D=31-s|0,h=n,e=L<>>(n>>>0),n=L>>>(n>>>0),s=0,D=k<>2]=e|0,t[l+4>>2]=S|n&0,be=0,Se=0,ut=be,Se|0):(be=0,Se=0,ut=be,Se|0)}while(0);if(!h)L=D,S=0,D=0;else{I=r|0|0,k=K|u&0,L=QE(I|0,k|0,-1,-1)|0,r=ut,S=D,D=0;do u=S,S=s>>>31|S<<1,s=D|s<<1,u=e<<1|u>>>31|0,K=e>>>31|n<<1|0,A_(L|0,r|0,u|0,K|0)|0,Se=ut,be=Se>>31|((Se|0)<0?-1:0)<<1,D=be&1,e=A_(u|0,K|0,be&I|0,(((Se|0)<0?-1:0)>>31|((Se|0)<0?-1:0)<<1)&k|0)|0,n=ut,h=h-1|0;while((h|0)!=0);L=S,S=0}return h=0,l|0&&(t[l>>2]=e,t[l+4>>2]=n),be=(s|0)>>>31|(L|h)<<1|(h<<1|s>>>31)&0|S,Se=(s<<1|0>>>31)&-2|D,ut=be,Se|0}function JE(e,n,r,u){return e=e|0,n=n|0,r=r|0,u=u|0,K8(e,n,r,u,0)|0}function n2(e){e=e|0;var n=0,r=0;return r=e+15&-16|0,n=t[H>>2]|0,e=n+r|0,(r|0)>0&(e|0)<(n|0)|(e|0)<0?(fr()|0,Jl(12),-1):(t[H>>2]=e,((e|0)>(jr()|0)?(vr()|0)==0:0)?(t[H>>2]=n,Jl(12),-1):n|0)}function kg(e,n,r){e=e|0,n=n|0,r=r|0;var u=0;if((n|0)<(e|0)&(e|0)<(n+r|0)){for(u=e,n=n+r|0,e=e+r|0;(r|0)>0;)e=e-1|0,n=n-1|0,r=r-1|0,c[e>>0]=c[n>>0]|0;e=u}else _r(e,n,r)|0;return e|0}function ZE(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0;var l=0,s=0;return s=m,m=m+16|0,l=s|0,K8(e,n,r,u,l)|0,m=s,ut=t[l+4>>2]|0,t[l>>2]|0|0}function X8(e){return e=e|0,(e&255)<<24|(e>>8&255)<<16|(e>>16&255)<<8|e>>>24|0}function rP(e,n,r,u,l,s){e=e|0,n=n|0,r=r|0,u=u|0,l=l|0,s=s|0,Q8[e&1](n|0,r|0,u|0,l|0,s|0)}function iP(e,n,r){e=e|0,n=n|0,r=w(r),J8[e&1](n|0,w(r))}function uP(e,n,r){e=e|0,n=n|0,r=+r,Z8[e&31](n|0,+r)}function oP(e,n,r,u){return e=e|0,n=n|0,r=w(r),u=w(u),w($8[e&0](n|0,w(r),w(u)))}function lP(e,n){e=e|0,n=n|0,P1[e&127](n|0)}function sP(e,n,r){e=e|0,n=n|0,r=r|0,I1[e&31](n|0,r|0)}function aP(e,n){return e=e|0,n=n|0,Zp[e&31](n|0)|0}function fP(e,n,r,u,l){e=e|0,n=n|0,r=+r,u=+u,l=l|0,eS[e&1](n|0,+r,+u,l|0)}function cP(e,n,r,u){e=e|0,n=n|0,r=+r,u=+u,VP[e&1](n|0,+r,+u)}function dP(e,n,r,u){return e=e|0,n=n|0,r=r|0,u=u|0,M_[e&7](n|0,r|0,u|0)|0}function pP(e,n,r,u){return e=e|0,n=n|0,r=r|0,u=u|0,+GP[e&1](n|0,r|0,u|0)}function hP(e,n){return e=e|0,n=n|0,+tS[e&15](n|0)}function vP(e,n,r){return e=e|0,n=n|0,r=+r,YP[e&1](n|0,+r)|0}function mP(e,n,r){return e=e|0,n=n|0,r=r|0,eD[e&15](n|0,r|0)|0}function gP(e,n,r,u,l,s){e=e|0,n=n|0,r=r|0,u=+u,l=+l,s=s|0,KP[e&1](n|0,r|0,+u,+l,s|0)}function yP(e,n,r,u,l,s,h){e=e|0,n=n|0,r=r|0,u=u|0,l=l|0,s=s|0,h=h|0,XP[e&1](n|0,r|0,u|0,l|0,s|0,h|0)}function _P(e,n,r){return e=e|0,n=n|0,r=r|0,+nS[e&7](n|0,r|0)}function EP(e){return e=e|0,k_[e&7]()|0}function DP(e,n,r,u,l,s){return e=e|0,n=n|0,r=r|0,u=u|0,l=l|0,s=s|0,rS[e&1](n|0,r|0,u|0,l|0,s|0)|0}function wP(e,n,r,u,l){e=e|0,n=n|0,r=r|0,u=u|0,l=+l,QP[e&1](n|0,r|0,u|0,+l)}function SP(e,n,r,u,l,s,h){e=e|0,n=n|0,r=r|0,u=w(u),l=l|0,s=w(s),h=h|0,iS[e&1](n|0,r|0,w(u),l|0,w(s),h|0)}function TP(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0,Fg[e&15](n|0,r|0,u|0)}function CP(e){e=e|0,uS[e&0]()}function xP(e,n,r,u){e=e|0,n=n|0,r=r|0,u=+u,oS[e&15](n|0,r|0,+u)}function AP(e,n,r){return e=e|0,n=+n,r=+r,JP[e&1](+n,+r)|0}function RP(e,n,r,u,l){e=e|0,n=n|0,r=r|0,u=u|0,l=l|0,tD[e&15](n|0,r|0,u|0,l|0)}function OP(e,n,r,u,l){e=e|0,n=n|0,r=r|0,u=u|0,l=l|0,jt(0)}function MP(e,n){e=e|0,n=w(n),jt(1)}function ea(e,n){e=e|0,n=+n,jt(2)}function kP(e,n,r){return e=e|0,n=w(n),r=w(r),jt(3),Tt}function Zn(e){e=e|0,jt(4)}function Lg(e,n){e=e|0,n=n|0,jt(5)}function Na(e){return e=e|0,jt(6),0}function LP(e,n,r,u){e=e|0,n=+n,r=+r,u=u|0,jt(7)}function NP(e,n,r){e=e|0,n=+n,r=+r,jt(8)}function FP(e,n,r){return e=e|0,n=n|0,r=r|0,jt(9),0}function PP(e,n,r){return e=e|0,n=n|0,r=r|0,jt(10),0}function Jp(e){return e=e|0,jt(11),0}function IP(e,n){return e=e|0,n=+n,jt(12),0}function Ng(e,n){return e=e|0,n=n|0,jt(13),0}function bP(e,n,r,u,l){e=e|0,n=n|0,r=+r,u=+u,l=l|0,jt(14)}function BP(e,n,r,u,l,s){e=e|0,n=n|0,r=r|0,u=u|0,l=l|0,s=s|0,jt(15)}function $E(e,n){return e=e|0,n=n|0,jt(16),0}function UP(){return jt(17),0}function jP(e,n,r,u,l){return e=e|0,n=n|0,r=r|0,u=u|0,l=l|0,jt(18),0}function zP(e,n,r,u){e=e|0,n=n|0,r=r|0,u=+u,jt(19)}function HP(e,n,r,u,l,s){e=e|0,n=n|0,r=w(r),u=u|0,l=w(l),s=s|0,jt(20)}function O_(e,n,r){e=e|0,n=n|0,r=r|0,jt(21)}function qP(){jt(22)}function zv(e,n,r){e=e|0,n=n|0,r=+r,jt(23)}function WP(e,n){return e=+e,n=+n,jt(24),0}function Hv(e,n,r,u){e=e|0,n=n|0,r=r|0,u=u|0,jt(25)}var Q8=[OP,UM],J8=[MP,n0],Z8=[ea,da,Ss,Ts,ns,Ho,Df,ol,Wa,r0,wf,Wc,pc,Ol,Cs,pa,od,ha,hc,ea,ea,ea,ea,ea,ea,ea,ea,ea,ea,ea,ea,ea],$8=[kP],P1=[Zn,Uv,cn,us,Do,jf,M1,jl,hO,vO,mO,xM,AM,RM,XN,QN,JN,Ne,cc,ja,Gu,j0,gh,Tf,r1,Ff,Da,kh,gm,y1,_1,Zh,mp,Pd,jm,C1,Oc,Jm,eg,xv,Mv,on,Z4,aE,p_,Lt,xu,t0,RA,WA,aR,AR,HR,a7,_7,w7,U7,H7,uO,yO,DO,BO,nM,_d,bk,hL,OL,WL,pN,RN,UN,HN,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn,Zn],I1=[Lg,D2,rd,qc,Al,ul,w2,Ws,Rl,za,Ha,qa,Ml,ze,lt,$t,Wn,si,ur,Va,T2,_h,dE,gE,kR,jk,fM,E8,Lg,Lg,Lg,Lg],Zp=[Na,xF,Ef,g,J,pe,gt,xt,kt,xr,du,z0,Ga,ld,Xc,ks,GR,zO,Wk,Ma,Na,Na,Na,Na,Na,Na,Na,Na,Na,Na,Na,Na],eS=[LP,A2],VP=[NP,sO],M_=[FP,F8,AF,MF,Wh,vv,LA,XL],GP=[PP,fv],tS=[Jp,u0,We,ci,yh,al,va,R2,O2,vc,Jp,Jp,Jp,Jp,Jp,Jp],YP=[IP,m7],eD=[Ng,JF,S2,dl,W2,xm,dp,Rp,tg,kr,jo,NL,Ng,Ng,Ng,Ng],KP=[bP,xh],XP=[BP,gN],nS=[$E,Qi,M2,pd,Qc,ml,$E,$E],k_=[UP,Jc,io,D0,x7,G7,CO,GN],rS=[jP,li],QP=[zP,vg],iS=[HP,sd],Fg=[O_,A,i0,Gr,Cu,m1,Fd,ar,_g,mo,sk,yL,LN,O_,O_,O_],uS=[qP],oS=[zv,id,go,ud,zo,Vc,qi,y,jp,KA,d7,zv,zv,zv,zv,zv],JP=[WP,dO],tD=[Hv,wp,Fc,pR,t7,L7,Z7,LO,lM,Qk,rF,Hv,Hv,Hv,Hv,Hv];return{_llvm_bswap_i32:X8,dynCall_idd:AP,dynCall_i:EP,_i64Subtract:A_,___udivdi3:JE,dynCall_vif:iP,setThrew:ms,dynCall_viii:TP,_bitshift64Lshr:R_,_bitshift64Shl:G8,dynCall_vi:lP,dynCall_viiddi:gP,dynCall_diii:pP,dynCall_iii:mP,_memset:jv,_sbrk:n2,_memcpy:_r,__GLOBAL__sub_I_Yoga_cpp:ru,dynCall_vii:sP,___uremdi3:ZE,dynCall_vid:uP,stackAlloc:co,_nbind_init:hF,getTempRet0:Q,dynCall_di:hP,dynCall_iid:vP,setTempRet0:b0,_i64Add:QE,dynCall_fiff:oP,dynCall_iiii:dP,_emscripten_get_global_libc:CF,dynCall_viid:xP,dynCall_viiid:wP,dynCall_viififi:SP,dynCall_ii:aP,__GLOBAL__sub_I_Binding_cc:Ok,dynCall_viiii:RP,dynCall_iiiiii:DP,stackSave:nl,dynCall_viiiii:rP,__GLOBAL__sub_I_nbind_cc:Vs,dynCall_vidd:cP,_free:C_,runPostSets:nP,dynCall_viiiiii:yP,establishStackSpace:ju,_memmove:kg,stackRestore:Zl,_malloc:T_,__GLOBAL__sub_I_common_cc:XO,dynCall_viddi:fP,dynCall_dii:_P,dynCall_v:CP}}(Module.asmGlobalArg,Module.asmLibraryArg,buffer),_llvm_bswap_i32=Module._llvm_bswap_i32=asm._llvm_bswap_i32,getTempRet0=Module.getTempRet0=asm.getTempRet0,___udivdi3=Module.___udivdi3=asm.___udivdi3,setThrew=Module.setThrew=asm.setThrew,_bitshift64Lshr=Module._bitshift64Lshr=asm._bitshift64Lshr,_bitshift64Shl=Module._bitshift64Shl=asm._bitshift64Shl,_memset=Module._memset=asm._memset,_sbrk=Module._sbrk=asm._sbrk,_memcpy=Module._memcpy=asm._memcpy,stackAlloc=Module.stackAlloc=asm.stackAlloc,___uremdi3=Module.___uremdi3=asm.___uremdi3,_nbind_init=Module._nbind_init=asm._nbind_init,_i64Subtract=Module._i64Subtract=asm._i64Subtract,setTempRet0=Module.setTempRet0=asm.setTempRet0,_i64Add=Module._i64Add=asm._i64Add,_emscripten_get_global_libc=Module._emscripten_get_global_libc=asm._emscripten_get_global_libc,__GLOBAL__sub_I_Yoga_cpp=Module.__GLOBAL__sub_I_Yoga_cpp=asm.__GLOBAL__sub_I_Yoga_cpp,__GLOBAL__sub_I_Binding_cc=Module.__GLOBAL__sub_I_Binding_cc=asm.__GLOBAL__sub_I_Binding_cc,stackSave=Module.stackSave=asm.stackSave,__GLOBAL__sub_I_nbind_cc=Module.__GLOBAL__sub_I_nbind_cc=asm.__GLOBAL__sub_I_nbind_cc,_free=Module._free=asm._free,runPostSets=Module.runPostSets=asm.runPostSets,establishStackSpace=Module.establishStackSpace=asm.establishStackSpace,_memmove=Module._memmove=asm._memmove,stackRestore=Module.stackRestore=asm.stackRestore,_malloc=Module._malloc=asm._malloc,__GLOBAL__sub_I_common_cc=Module.__GLOBAL__sub_I_common_cc=asm.__GLOBAL__sub_I_common_cc,dynCall_viiiii=Module.dynCall_viiiii=asm.dynCall_viiiii,dynCall_vif=Module.dynCall_vif=asm.dynCall_vif,dynCall_vid=Module.dynCall_vid=asm.dynCall_vid,dynCall_fiff=Module.dynCall_fiff=asm.dynCall_fiff,dynCall_vi=Module.dynCall_vi=asm.dynCall_vi,dynCall_vii=Module.dynCall_vii=asm.dynCall_vii,dynCall_ii=Module.dynCall_ii=asm.dynCall_ii,dynCall_viddi=Module.dynCall_viddi=asm.dynCall_viddi,dynCall_vidd=Module.dynCall_vidd=asm.dynCall_vidd,dynCall_iiii=Module.dynCall_iiii=asm.dynCall_iiii,dynCall_diii=Module.dynCall_diii=asm.dynCall_diii,dynCall_di=Module.dynCall_di=asm.dynCall_di,dynCall_iid=Module.dynCall_iid=asm.dynCall_iid,dynCall_iii=Module.dynCall_iii=asm.dynCall_iii,dynCall_viiddi=Module.dynCall_viiddi=asm.dynCall_viiddi,dynCall_viiiiii=Module.dynCall_viiiiii=asm.dynCall_viiiiii,dynCall_dii=Module.dynCall_dii=asm.dynCall_dii,dynCall_i=Module.dynCall_i=asm.dynCall_i,dynCall_iiiiii=Module.dynCall_iiiiii=asm.dynCall_iiiiii,dynCall_viiid=Module.dynCall_viiid=asm.dynCall_viiid,dynCall_viififi=Module.dynCall_viififi=asm.dynCall_viififi,dynCall_viii=Module.dynCall_viii=asm.dynCall_viii,dynCall_v=Module.dynCall_v=asm.dynCall_v,dynCall_viid=Module.dynCall_viid=asm.dynCall_viid,dynCall_idd=Module.dynCall_idd=asm.dynCall_idd,dynCall_viiii=Module.dynCall_viiii=asm.dynCall_viiii;Runtime.stackAlloc=Module.stackAlloc,Runtime.stackSave=Module.stackSave,Runtime.stackRestore=Module.stackRestore,Runtime.establishStackSpace=Module.establishStackSpace,Runtime.setTempRet0=Module.setTempRet0,Runtime.getTempRet0=Module.getTempRet0,Module.asm=asm;function ExitStatus(i){this.name="ExitStatus",this.message="Program terminated with exit("+i+")",this.status=i}ExitStatus.prototype=new Error,ExitStatus.prototype.constructor=ExitStatus;var initialStackTop,preloadStartTime=null,calledMain=!1;dependenciesFulfilled=function i(){Module.calledRun||run(),Module.calledRun||(dependenciesFulfilled=i)},Module.callMain=Module.callMain=function(o){o=o||[],ensureInitRuntime();var a=o.length+1;function c(){for(var M=0;M<4-1;M++)_.push(0)}var _=[allocate(intArrayFromString(Module.thisProgram),"i8",ALLOC_NORMAL)];c();for(var t=0;t0||(preRun(),runDependencies>0)||Module.calledRun)return;function o(){Module.calledRun||(Module.calledRun=!0,!ABORT&&(ensureInitRuntime(),preMain(),Module.onRuntimeInitialized&&Module.onRuntimeInitialized(),Module._main&&shouldRunNow&&Module.callMain(i),postRun()))}Module.setStatus?(Module.setStatus("Running..."),setTimeout(function(){setTimeout(function(){Module.setStatus("")},1),o()},1)):o()}Module.run=Module.run=run;function exit(i,o){o&&Module.noExitRuntime||(Module.noExitRuntime||(ABORT=!0,EXITSTATUS=i,STACKTOP=initialStackTop,exitRuntime(),Module.onExit&&Module.onExit(i)),ENVIRONMENT_IS_NODE&&process.exit(i),Module.quit(i,new ExitStatus(i)))}Module.exit=Module.exit=exit;var abortDecorators=[];function abort(i){Module.onAbort&&Module.onAbort(i),i!==void 0?(Module.print(i),Module.printErr(i),i=JSON.stringify(i)):i="",ABORT=!0,EXITSTATUS=1;var o=` -If this abort() is unexpected, build with -s ASSERTIONS=1 which can give more information.`,a="abort("+i+") at "+stackTrace()+o;throw abortDecorators&&abortDecorators.forEach(function(c){a=c(a,i)}),a}if(Module.abort=Module.abort=abort,Module.preInit)for(typeof Module.preInit=="function"&&(Module.preInit=[Module.preInit]);Module.preInit.length>0;)Module.preInit.pop()();var shouldRunNow=!0;Module.noInitialRun&&(shouldRunNow=!1),run()})});var eh=Ke((VW,wT)=>{"use strict";var qI=ET(),WI=DT(),BD=!1,UD=null;WI({},function(i,o){if(!BD){if(BD=!0,i)throw i;UD=o}});if(!BD)throw new Error("Failed to load the yoga module - it needed to be loaded synchronously, but didn't");wT.exports=qI(UD.bind,UD.lib)});var TT=Ke((GW,ST)=>{"use strict";ST.exports=({onlyFirst:i=!1}={})=>{let o=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:[a-zA-Z\\d]*(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))"].join("|");return new RegExp(o,i?void 0:"g")}});var jD=Ke((YW,CT)=>{"use strict";var VI=TT();CT.exports=i=>typeof i=="string"?i.replace(VI(),""):i});var HD=Ke((KW,zD)=>{"use strict";var xT=i=>Number.isNaN(i)?!1:i>=4352&&(i<=4447||i===9001||i===9002||11904<=i&&i<=12871&&i!==12351||12880<=i&&i<=19903||19968<=i&&i<=42182||43360<=i&&i<=43388||44032<=i&&i<=55203||63744<=i&&i<=64255||65040<=i&&i<=65049||65072<=i&&i<=65131||65281<=i&&i<=65376||65504<=i&&i<=65510||110592<=i&&i<=110593||127488<=i&&i<=127569||131072<=i&&i<=262141);zD.exports=xT;zD.exports.default=xT});var RT=Ke((XW,AT)=>{"use strict";AT.exports=function(){return/\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F|\uD83D\uDC68(?:\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68\uD83C\uDFFB|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|[\u2695\u2696\u2708]\uFE0F|\uD83D[\uDC66\uDC67]|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708])\uFE0F|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C[\uDFFB-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)\uD83C\uDFFB|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB\uDFFC])|\uD83D\uDC69(?:\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB-\uDFFD])|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)\uFE0F|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\uD83C\uDFF4\u200D\u2620)\uFE0F|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF4\uD83C\uDDF2|\uD83C\uDDF6\uD83C\uDDE6|[#\*0-9]\uFE0F\u20E3|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270A-\u270D]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC70\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDCAA\uDD74\uDD7A\uDD90\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD36\uDDB5\uDDB6\uDDBB\uDDD2-\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5\uDEEB\uDEEC\uDEF4-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g}});var Z_=Ke((QW,qD)=>{"use strict";var GI=jD(),YI=HD(),KI=RT(),OT=i=>{if(i=i.replace(KI()," "),typeof i!="string"||i.length===0)return 0;i=GI(i);let o=0;for(let a=0;a=127&&c<=159||c>=768&&c<=879||(c>65535&&a++,o+=YI(c)?2:1)}return o};qD.exports=OT;qD.exports.default=OT});var VD=Ke((JW,WD)=>{"use strict";var XI=Z_(),MT=i=>{let o=0;for(let a of i.split(` -`))o=Math.max(o,XI(a));return o};WD.exports=MT;WD.exports.default=MT});var kT=Ke(Jg=>{"use strict";var QI=Jg&&Jg.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(Jg,"__esModule",{value:!0});var JI=QI(VD()),GD={};Jg.default=i=>{if(i.length===0)return{width:0,height:0};if(GD[i])return GD[i];let o=JI.default(i),a=i.split(` -`).length;return GD[i]={width:o,height:a},{width:o,height:a}}});var LT=Ke(Zg=>{"use strict";var ZI=Zg&&Zg.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(Zg,"__esModule",{value:!0});var Vi=ZI(eh()),$I=(i,o)=>{"position"in o&&i.setPositionType(o.position==="absolute"?Vi.default.POSITION_TYPE_ABSOLUTE:Vi.default.POSITION_TYPE_RELATIVE)},eb=(i,o)=>{"marginLeft"in o&&i.setMargin(Vi.default.EDGE_START,o.marginLeft||0),"marginRight"in o&&i.setMargin(Vi.default.EDGE_END,o.marginRight||0),"marginTop"in o&&i.setMargin(Vi.default.EDGE_TOP,o.marginTop||0),"marginBottom"in o&&i.setMargin(Vi.default.EDGE_BOTTOM,o.marginBottom||0)},tb=(i,o)=>{"paddingLeft"in o&&i.setPadding(Vi.default.EDGE_LEFT,o.paddingLeft||0),"paddingRight"in o&&i.setPadding(Vi.default.EDGE_RIGHT,o.paddingRight||0),"paddingTop"in o&&i.setPadding(Vi.default.EDGE_TOP,o.paddingTop||0),"paddingBottom"in o&&i.setPadding(Vi.default.EDGE_BOTTOM,o.paddingBottom||0)},nb=(i,o)=>{var a;"flexGrow"in o&&i.setFlexGrow((a=o.flexGrow)!==null&&a!==void 0?a:0),"flexShrink"in o&&i.setFlexShrink(typeof o.flexShrink=="number"?o.flexShrink:1),"flexDirection"in o&&(o.flexDirection==="row"&&i.setFlexDirection(Vi.default.FLEX_DIRECTION_ROW),o.flexDirection==="row-reverse"&&i.setFlexDirection(Vi.default.FLEX_DIRECTION_ROW_REVERSE),o.flexDirection==="column"&&i.setFlexDirection(Vi.default.FLEX_DIRECTION_COLUMN),o.flexDirection==="column-reverse"&&i.setFlexDirection(Vi.default.FLEX_DIRECTION_COLUMN_REVERSE)),"flexBasis"in o&&(typeof o.flexBasis=="number"?i.setFlexBasis(o.flexBasis):typeof o.flexBasis=="string"?i.setFlexBasisPercent(Number.parseInt(o.flexBasis,10)):i.setFlexBasis(NaN)),"alignItems"in o&&((o.alignItems==="stretch"||!o.alignItems)&&i.setAlignItems(Vi.default.ALIGN_STRETCH),o.alignItems==="flex-start"&&i.setAlignItems(Vi.default.ALIGN_FLEX_START),o.alignItems==="center"&&i.setAlignItems(Vi.default.ALIGN_CENTER),o.alignItems==="flex-end"&&i.setAlignItems(Vi.default.ALIGN_FLEX_END)),"alignSelf"in o&&((o.alignSelf==="auto"||!o.alignSelf)&&i.setAlignSelf(Vi.default.ALIGN_AUTO),o.alignSelf==="flex-start"&&i.setAlignSelf(Vi.default.ALIGN_FLEX_START),o.alignSelf==="center"&&i.setAlignSelf(Vi.default.ALIGN_CENTER),o.alignSelf==="flex-end"&&i.setAlignSelf(Vi.default.ALIGN_FLEX_END)),"justifyContent"in o&&((o.justifyContent==="flex-start"||!o.justifyContent)&&i.setJustifyContent(Vi.default.JUSTIFY_FLEX_START),o.justifyContent==="center"&&i.setJustifyContent(Vi.default.JUSTIFY_CENTER),o.justifyContent==="flex-end"&&i.setJustifyContent(Vi.default.JUSTIFY_FLEX_END),o.justifyContent==="space-between"&&i.setJustifyContent(Vi.default.JUSTIFY_SPACE_BETWEEN),o.justifyContent==="space-around"&&i.setJustifyContent(Vi.default.JUSTIFY_SPACE_AROUND))},rb=(i,o)=>{var a,c;"width"in o&&(typeof o.width=="number"?i.setWidth(o.width):typeof o.width=="string"?i.setWidthPercent(Number.parseInt(o.width,10)):i.setWidthAuto()),"height"in o&&(typeof o.height=="number"?i.setHeight(o.height):typeof o.height=="string"?i.setHeightPercent(Number.parseInt(o.height,10)):i.setHeightAuto()),"minWidth"in o&&(typeof o.minWidth=="string"?i.setMinWidthPercent(Number.parseInt(o.minWidth,10)):i.setMinWidth((a=o.minWidth)!==null&&a!==void 0?a:0)),"minHeight"in o&&(typeof o.minHeight=="string"?i.setMinHeightPercent(Number.parseInt(o.minHeight,10)):i.setMinHeight((c=o.minHeight)!==null&&c!==void 0?c:0))},ib=(i,o)=>{"display"in o&&i.setDisplay(o.display==="flex"?Vi.default.DISPLAY_FLEX:Vi.default.DISPLAY_NONE)},ub=(i,o)=>{if("borderStyle"in o){let a=typeof o.borderStyle=="string"?1:0;i.setBorder(Vi.default.EDGE_TOP,a),i.setBorder(Vi.default.EDGE_BOTTOM,a),i.setBorder(Vi.default.EDGE_LEFT,a),i.setBorder(Vi.default.EDGE_RIGHT,a)}};Zg.default=(i,o={})=>{$I(i,o),eb(i,o),tb(i,o),nb(i,o),rb(i,o),ib(i,o),ub(i,o)}});var FT=Ke((eV,NT)=>{"use strict";NT.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}});var YD=Ke((tV,PT)=>{var $g=FT(),IT={};for(let i of Object.keys($g))IT[$g[i]]=i;var zn={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};PT.exports=zn;for(let i of Object.keys(zn)){if(!("channels"in zn[i]))throw new Error("missing channels property: "+i);if(!("labels"in zn[i]))throw new Error("missing channel labels property: "+i);if(zn[i].labels.length!==zn[i].channels)throw new Error("channel and label counts mismatch: "+i);let{channels:o,labels:a}=zn[i];delete zn[i].channels,delete zn[i].labels,Object.defineProperty(zn[i],"channels",{value:o}),Object.defineProperty(zn[i],"labels",{value:a})}zn.rgb.hsl=function(i){let o=i[0]/255,a=i[1]/255,c=i[2]/255,_=Math.min(o,a,c),t=Math.max(o,a,c),O=t-_,N,M;t===_?N=0:o===t?N=(a-c)/O:a===t?N=2+(c-o)/O:c===t&&(N=4+(o-a)/O),N=Math.min(N*60,360),N<0&&(N+=360);let T=(_+t)/2;return t===_?M=0:T<=.5?M=O/(t+_):M=O/(2-t-_),[N,M*100,T*100]};zn.rgb.hsv=function(i){let o,a,c,_,t,O=i[0]/255,N=i[1]/255,M=i[2]/255,T=Math.max(O,N,M),B=T-Math.min(O,N,M),H=function(q){return(T-q)/6/B+1/2};return B===0?(_=0,t=0):(t=B/T,o=H(O),a=H(N),c=H(M),O===T?_=c-a:N===T?_=1/3+o-c:M===T&&(_=2/3+a-o),_<0?_+=1:_>1&&(_-=1)),[_*360,t*100,T*100]};zn.rgb.hwb=function(i){let o=i[0],a=i[1],c=i[2],_=zn.rgb.hsl(i)[0],t=1/255*Math.min(o,Math.min(a,c));return c=1-1/255*Math.max(o,Math.max(a,c)),[_,t*100,c*100]};zn.rgb.cmyk=function(i){let o=i[0]/255,a=i[1]/255,c=i[2]/255,_=Math.min(1-o,1-a,1-c),t=(1-o-_)/(1-_)||0,O=(1-a-_)/(1-_)||0,N=(1-c-_)/(1-_)||0;return[t*100,O*100,N*100,_*100]};function ob(i,o){return(i[0]-o[0])**2+(i[1]-o[1])**2+(i[2]-o[2])**2}zn.rgb.keyword=function(i){let o=IT[i];if(o)return o;let a=Infinity,c;for(let _ of Object.keys($g)){let t=$g[_],O=ob(i,t);O.04045?((o+.055)/1.055)**2.4:o/12.92,a=a>.04045?((a+.055)/1.055)**2.4:a/12.92,c=c>.04045?((c+.055)/1.055)**2.4:c/12.92;let _=o*.4124+a*.3576+c*.1805,t=o*.2126+a*.7152+c*.0722,O=o*.0193+a*.1192+c*.9505;return[_*100,t*100,O*100]};zn.rgb.lab=function(i){let o=zn.rgb.xyz(i),a=o[0],c=o[1],_=o[2];a/=95.047,c/=100,_/=108.883,a=a>.008856?a**(1/3):7.787*a+16/116,c=c>.008856?c**(1/3):7.787*c+16/116,_=_>.008856?_**(1/3):7.787*_+16/116;let t=116*c-16,O=500*(a-c),N=200*(c-_);return[t,O,N]};zn.hsl.rgb=function(i){let o=i[0]/360,a=i[1]/100,c=i[2]/100,_,t,O;if(a===0)return O=c*255,[O,O,O];c<.5?_=c*(1+a):_=c+a-c*a;let N=2*c-_,M=[0,0,0];for(let T=0;T<3;T++)t=o+1/3*-(T-1),t<0&&t++,t>1&&t--,6*t<1?O=N+(_-N)*6*t:2*t<1?O=_:3*t<2?O=N+(_-N)*(2/3-t)*6:O=N,M[T]=O*255;return M};zn.hsl.hsv=function(i){let o=i[0],a=i[1]/100,c=i[2]/100,_=a,t=Math.max(c,.01);c*=2,a*=c<=1?c:2-c,_*=t<=1?t:2-t;let O=(c+a)/2,N=c===0?2*_/(t+_):2*a/(c+a);return[o,N*100,O*100]};zn.hsv.rgb=function(i){let o=i[0]/60,a=i[1]/100,c=i[2]/100,_=Math.floor(o)%6,t=o-Math.floor(o),O=255*c*(1-a),N=255*c*(1-a*t),M=255*c*(1-a*(1-t));switch(c*=255,_){case 0:return[c,M,O];case 1:return[N,c,O];case 2:return[O,c,M];case 3:return[O,N,c];case 4:return[M,O,c];case 5:return[c,O,N]}};zn.hsv.hsl=function(i){let o=i[0],a=i[1]/100,c=i[2]/100,_=Math.max(c,.01),t,O;O=(2-a)*c;let N=(2-a)*_;return t=a*_,t/=N<=1?N:2-N,t=t||0,O/=2,[o,t*100,O*100]};zn.hwb.rgb=function(i){let o=i[0]/360,a=i[1]/100,c=i[2]/100,_=a+c,t;_>1&&(a/=_,c/=_);let O=Math.floor(6*o),N=1-c;t=6*o-O,(O&1)!=0&&(t=1-t);let M=a+t*(N-a),T,B,H;switch(O){default:case 6:case 0:T=N,B=M,H=a;break;case 1:T=M,B=N,H=a;break;case 2:T=a,B=N,H=M;break;case 3:T=a,B=M,H=N;break;case 4:T=M,B=a,H=N;break;case 5:T=N,B=a,H=M;break}return[T*255,B*255,H*255]};zn.cmyk.rgb=function(i){let o=i[0]/100,a=i[1]/100,c=i[2]/100,_=i[3]/100,t=1-Math.min(1,o*(1-_)+_),O=1-Math.min(1,a*(1-_)+_),N=1-Math.min(1,c*(1-_)+_);return[t*255,O*255,N*255]};zn.xyz.rgb=function(i){let o=i[0]/100,a=i[1]/100,c=i[2]/100,_,t,O;return _=o*3.2406+a*-1.5372+c*-.4986,t=o*-.9689+a*1.8758+c*.0415,O=o*.0557+a*-.204+c*1.057,_=_>.0031308?1.055*_**(1/2.4)-.055:_*12.92,t=t>.0031308?1.055*t**(1/2.4)-.055:t*12.92,O=O>.0031308?1.055*O**(1/2.4)-.055:O*12.92,_=Math.min(Math.max(0,_),1),t=Math.min(Math.max(0,t),1),O=Math.min(Math.max(0,O),1),[_*255,t*255,O*255]};zn.xyz.lab=function(i){let o=i[0],a=i[1],c=i[2];o/=95.047,a/=100,c/=108.883,o=o>.008856?o**(1/3):7.787*o+16/116,a=a>.008856?a**(1/3):7.787*a+16/116,c=c>.008856?c**(1/3):7.787*c+16/116;let _=116*a-16,t=500*(o-a),O=200*(a-c);return[_,t,O]};zn.lab.xyz=function(i){let o=i[0],a=i[1],c=i[2],_,t,O;t=(o+16)/116,_=a/500+t,O=t-c/200;let N=t**3,M=_**3,T=O**3;return t=N>.008856?N:(t-16/116)/7.787,_=M>.008856?M:(_-16/116)/7.787,O=T>.008856?T:(O-16/116)/7.787,_*=95.047,t*=100,O*=108.883,[_,t,O]};zn.lab.lch=function(i){let o=i[0],a=i[1],c=i[2],_;_=Math.atan2(c,a)*360/2/Math.PI,_<0&&(_+=360);let O=Math.sqrt(a*a+c*c);return[o,O,_]};zn.lch.lab=function(i){let o=i[0],a=i[1],_=i[2]/360*2*Math.PI,t=a*Math.cos(_),O=a*Math.sin(_);return[o,t,O]};zn.rgb.ansi16=function(i,o=null){let[a,c,_]=i,t=o===null?zn.rgb.hsv(i)[2]:o;if(t=Math.round(t/50),t===0)return 30;let O=30+(Math.round(_/255)<<2|Math.round(c/255)<<1|Math.round(a/255));return t===2&&(O+=60),O};zn.hsv.ansi16=function(i){return zn.rgb.ansi16(zn.hsv.rgb(i),i[2])};zn.rgb.ansi256=function(i){let o=i[0],a=i[1],c=i[2];return o===a&&a===c?o<8?16:o>248?231:Math.round((o-8)/247*24)+232:16+36*Math.round(o/255*5)+6*Math.round(a/255*5)+Math.round(c/255*5)};zn.ansi16.rgb=function(i){let o=i%10;if(o===0||o===7)return i>50&&(o+=3.5),o=o/10.5*255,[o,o,o];let a=(~~(i>50)+1)*.5,c=(o&1)*a*255,_=(o>>1&1)*a*255,t=(o>>2&1)*a*255;return[c,_,t]};zn.ansi256.rgb=function(i){if(i>=232){let t=(i-232)*10+8;return[t,t,t]}i-=16;let o,a=Math.floor(i/36)/5*255,c=Math.floor((o=i%36)/6)/5*255,_=o%6/5*255;return[a,c,_]};zn.rgb.hex=function(i){let a=(((Math.round(i[0])&255)<<16)+((Math.round(i[1])&255)<<8)+(Math.round(i[2])&255)).toString(16).toUpperCase();return"000000".substring(a.length)+a};zn.hex.rgb=function(i){let o=i.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!o)return[0,0,0];let a=o[0];o[0].length===3&&(a=a.split("").map(N=>N+N).join(""));let c=parseInt(a,16),_=c>>16&255,t=c>>8&255,O=c&255;return[_,t,O]};zn.rgb.hcg=function(i){let o=i[0]/255,a=i[1]/255,c=i[2]/255,_=Math.max(Math.max(o,a),c),t=Math.min(Math.min(o,a),c),O=_-t,N,M;return O<1?N=t/(1-O):N=0,O<=0?M=0:_===o?M=(a-c)/O%6:_===a?M=2+(c-o)/O:M=4+(o-a)/O,M/=6,M%=1,[M*360,O*100,N*100]};zn.hsl.hcg=function(i){let o=i[1]/100,a=i[2]/100,c=a<.5?2*o*a:2*o*(1-a),_=0;return c<1&&(_=(a-.5*c)/(1-c)),[i[0],c*100,_*100]};zn.hsv.hcg=function(i){let o=i[1]/100,a=i[2]/100,c=o*a,_=0;return c<1&&(_=(a-c)/(1-c)),[i[0],c*100,_*100]};zn.hcg.rgb=function(i){let o=i[0]/360,a=i[1]/100,c=i[2]/100;if(a===0)return[c*255,c*255,c*255];let _=[0,0,0],t=o%1*6,O=t%1,N=1-O,M=0;switch(Math.floor(t)){case 0:_[0]=1,_[1]=O,_[2]=0;break;case 1:_[0]=N,_[1]=1,_[2]=0;break;case 2:_[0]=0,_[1]=1,_[2]=O;break;case 3:_[0]=0,_[1]=N,_[2]=1;break;case 4:_[0]=O,_[1]=0,_[2]=1;break;default:_[0]=1,_[1]=0,_[2]=N}return M=(1-a)*c,[(a*_[0]+M)*255,(a*_[1]+M)*255,(a*_[2]+M)*255]};zn.hcg.hsv=function(i){let o=i[1]/100,a=i[2]/100,c=o+a*(1-o),_=0;return c>0&&(_=o/c),[i[0],_*100,c*100]};zn.hcg.hsl=function(i){let o=i[1]/100,c=i[2]/100*(1-o)+.5*o,_=0;return c>0&&c<.5?_=o/(2*c):c>=.5&&c<1&&(_=o/(2*(1-c))),[i[0],_*100,c*100]};zn.hcg.hwb=function(i){let o=i[1]/100,a=i[2]/100,c=o+a*(1-o);return[i[0],(c-o)*100,(1-c)*100]};zn.hwb.hcg=function(i){let o=i[1]/100,a=i[2]/100,c=1-a,_=c-o,t=0;return _<1&&(t=(c-_)/(1-_)),[i[0],_*100,t*100]};zn.apple.rgb=function(i){return[i[0]/65535*255,i[1]/65535*255,i[2]/65535*255]};zn.rgb.apple=function(i){return[i[0]/255*65535,i[1]/255*65535,i[2]/255*65535]};zn.gray.rgb=function(i){return[i[0]/100*255,i[0]/100*255,i[0]/100*255]};zn.gray.hsl=function(i){return[0,0,i[0]]};zn.gray.hsv=zn.gray.hsl;zn.gray.hwb=function(i){return[0,100,i[0]]};zn.gray.cmyk=function(i){return[0,0,0,i[0]]};zn.gray.lab=function(i){return[i[0],0,0]};zn.gray.hex=function(i){let o=Math.round(i[0]/100*255)&255,c=((o<<16)+(o<<8)+o).toString(16).toUpperCase();return"000000".substring(c.length)+c};zn.rgb.gray=function(i){return[(i[0]+i[1]+i[2])/3/255*100]}});var BT=Ke((nV,bT)=>{var $_=YD();function lb(){let i={},o=Object.keys($_);for(let a=o.length,c=0;c{var KD=YD(),cb=BT(),Qv={},db=Object.keys(KD);function pb(i){let o=function(...a){let c=a[0];return c==null?c:(c.length>1&&(a=c),i(a))};return"conversion"in i&&(o.conversion=i.conversion),o}function hb(i){let o=function(...a){let c=a[0];if(c==null)return c;c.length>1&&(a=c);let _=i(a);if(typeof _=="object")for(let t=_.length,O=0;O{Qv[i]={},Object.defineProperty(Qv[i],"channels",{value:KD[i].channels}),Object.defineProperty(Qv[i],"labels",{value:KD[i].labels});let o=cb(i);Object.keys(o).forEach(c=>{let _=o[c];Qv[i][c]=hb(_),Qv[i][c].raw=pb(_)})});UT.exports=Qv});var t4=Ke((iV,zT)=>{"use strict";var HT=(i,o)=>(...a)=>`[${i(...a)+o}m`,qT=(i,o)=>(...a)=>{let c=i(...a);return`[${38+o};5;${c}m`},WT=(i,o)=>(...a)=>{let c=i(...a);return`[${38+o};2;${c[0]};${c[1]};${c[2]}m`},e4=i=>i,VT=(i,o,a)=>[i,o,a],Jv=(i,o,a)=>{Object.defineProperty(i,o,{get:()=>{let c=a();return Object.defineProperty(i,o,{value:c,enumerable:!0,configurable:!0}),c},enumerable:!0,configurable:!0})},XD,Zv=(i,o,a,c)=>{XD===void 0&&(XD=jT());let _=c?10:0,t={};for(let[O,N]of Object.entries(XD)){let M=O==="ansi16"?"ansi":O;O===o?t[M]=i(a,_):typeof N=="object"&&(t[M]=i(N[o],_))}return t};function vb(){let i=new Map,o={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};o.color.gray=o.color.blackBright,o.bgColor.bgGray=o.bgColor.bgBlackBright,o.color.grey=o.color.blackBright,o.bgColor.bgGrey=o.bgColor.bgBlackBright;for(let[a,c]of Object.entries(o)){for(let[_,t]of Object.entries(c))o[_]={open:`[${t[0]}m`,close:`[${t[1]}m`},c[_]=o[_],i.set(t[0],t[1]);Object.defineProperty(o,a,{value:c,enumerable:!1})}return Object.defineProperty(o,"codes",{value:i,enumerable:!1}),o.color.close="",o.bgColor.close="",Jv(o.color,"ansi",()=>Zv(HT,"ansi16",e4,!1)),Jv(o.color,"ansi256",()=>Zv(qT,"ansi256",e4,!1)),Jv(o.color,"ansi16m",()=>Zv(WT,"rgb",VT,!1)),Jv(o.bgColor,"ansi",()=>Zv(HT,"ansi16",e4,!0)),Jv(o.bgColor,"ansi256",()=>Zv(qT,"ansi256",e4,!0)),Jv(o.bgColor,"ansi16m",()=>Zv(WT,"rgb",VT,!0)),o}Object.defineProperty(zT,"exports",{enumerable:!0,get:vb})});var KT=Ke((uV,GT)=>{"use strict";var ey=Z_(),mb=jD(),gb=t4(),QD=new Set(["","\x9B"]),yb=39,YT=i=>`${QD.values().next().value}[${i}m`,_b=i=>i.split(" ").map(o=>ey(o)),JD=(i,o,a)=>{let c=[...o],_=!1,t=ey(mb(i[i.length-1]));for(let[O,N]of c.entries()){let M=ey(N);if(t+M<=a?i[i.length-1]+=N:(i.push(N),t=0),QD.has(N))_=!0;else if(_&&N==="m"){_=!1;continue}_||(t+=M,t===a&&O0&&i.length>1&&(i[i.length-2]+=i.pop())},Eb=i=>{let o=i.split(" "),a=o.length;for(;a>0&&!(ey(o[a-1])>0);)a--;return a===o.length?i:o.slice(0,a).join(" ")+o.slice(a).join("")},Db=(i,o,a={})=>{if(a.trim!==!1&&i.trim()==="")return"";let c="",_="",t,O=_b(i),N=[""];for(let[M,T]of i.split(" ").entries()){a.trim!==!1&&(N[N.length-1]=N[N.length-1].trimLeft());let B=ey(N[N.length-1]);if(M!==0&&(B>=o&&(a.wordWrap===!1||a.trim===!1)&&(N.push(""),B=0),(B>0||a.trim===!1)&&(N[N.length-1]+=" ",B++)),a.hard&&O[M]>o){let H=o-B,q=1+Math.floor((O[M]-H-1)/o);Math.floor((O[M]-1)/o)o&&B>0&&O[M]>0){if(a.wordWrap===!1&&Bo&&a.wordWrap===!1){JD(N,T,o);continue}N[N.length-1]+=T}a.trim!==!1&&(N=N.map(Eb)),c=N.join(` -`);for(let[M,T]of[...c].entries()){if(_+=T,QD.has(T)){let H=parseFloat(/\d[^m]*/.exec(c.slice(M,M+4)));t=H===yb?null:H}let B=gb.codes.get(Number(t));t&&B&&(c[M+1]===` -`?_+=YT(B):T===` -`&&(_+=YT(t)))}return _};GT.exports=(i,o,a)=>String(i).normalize().replace(/\r\n/g,` -`).split(` -`).map(c=>Db(c,o,a)).join(` -`)});var JT=Ke((oV,XT)=>{"use strict";var QT="[\uD800-\uDBFF][\uDC00-\uDFFF]",wb=i=>i&&i.exact?new RegExp(`^${QT}$`):new RegExp(QT,"g");XT.exports=wb});var ZD=Ke((lV,ZT)=>{"use strict";var Sb=HD(),Tb=JT(),$T=t4(),eC=["","\x9B"],n4=i=>`${eC[0]}[${i}m`,tC=(i,o,a)=>{let c=[];i=[...i];for(let _ of i){let t=_;_.match(";")&&(_=_.split(";")[0][0]+"0");let O=$T.codes.get(parseInt(_,10));if(O){let N=i.indexOf(O.toString());N>=0?i.splice(N,1):c.push(n4(o?O:t))}else if(o){c.push(n4(0));break}else c.push(n4(t))}if(o&&(c=c.filter((_,t)=>c.indexOf(_)===t),a!==void 0)){let _=n4($T.codes.get(parseInt(a,10)));c=c.reduce((t,O)=>O===_?[O,...t]:[...t,O],[])}return c.join("")};ZT.exports=(i,o,a)=>{let c=[...i.normalize()],_=[];a=typeof a=="number"?a:c.length;let t=!1,O,N=0,M="";for(let[T,B]of c.entries()){let H=!1;if(eC.includes(B)){let q=/\d[^m]*/.exec(i.slice(T,T+18));O=q&&q.length>0?q[0]:void 0,No&&N<=a)M+=B;else if(N===o&&!t&&O!==void 0)M=tC(_);else if(N>=a){M+=tC(_,!0,O);break}}return M}});var rC=Ke((sV,nC)=>{"use strict";var p2=ZD(),Cb=Z_();function r4(i,o,a){if(i.charAt(o)===" ")return o;for(let c=1;c<=3;c++)if(a){if(i.charAt(o+c)===" ")return o+c}else if(i.charAt(o-c)===" ")return o-c;return o}nC.exports=(i,o,a)=>{a=Ht({position:"end",preferTruncationOnSpace:!1},a);let{position:c,space:_,preferTruncationOnSpace:t}=a,O="\u2026",N=1;if(typeof i!="string")throw new TypeError(`Expected \`input\` to be a string, got ${typeof i}`);if(typeof o!="number")throw new TypeError(`Expected \`columns\` to be a number, got ${typeof o}`);if(o<1)return"";if(o===1)return O;let M=Cb(i);if(M<=o)return i;if(c==="start"){if(t){let T=r4(i,M-o+1,!0);return O+p2(i,T,M).trim()}return _===!0&&(O+=" ",N=2),O+p2(i,M-o+N,M)}if(c==="middle"){_===!0&&(O=" "+O+" ",N=3);let T=Math.floor(o/2);if(t){let B=r4(i,T),H=r4(i,M-(o-T)+1,!0);return p2(i,0,B)+O+p2(i,H,M).trim()}return p2(i,0,T)+O+p2(i,M-(o-T)+N,M)}if(c==="end"){if(t){let T=r4(i,o-1);return p2(i,0,T)+O}return _===!0&&(O=" "+O,N=2),p2(i,0,o-N)+O}throw new Error(`Expected \`options.position\` to be either \`start\`, \`middle\` or \`end\`, got ${c}`)}});var e3=Ke(ty=>{"use strict";var iC=ty&&ty.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(ty,"__esModule",{value:!0});var xb=iC(KT()),Ab=iC(rC()),$D={};ty.default=(i,o,a)=>{let c=i+String(o)+String(a);if($D[c])return $D[c];let _=i;if(a==="wrap"&&(_=xb.default(i,o,{trim:!1,hard:!0})),a.startsWith("truncate")){let t="end";a==="truncate-middle"&&(t="middle"),a==="truncate-start"&&(t="start"),_=Ab.default(i,o,{position:t})}return $D[c]=_,_}});var n3=Ke(t3=>{"use strict";Object.defineProperty(t3,"__esModule",{value:!0});var uC=i=>{let o="";if(i.childNodes.length>0)for(let a of i.childNodes){let c="";a.nodeName==="#text"?c=a.nodeValue:((a.nodeName==="ink-text"||a.nodeName==="ink-virtual-text")&&(c=uC(a)),c.length>0&&typeof a.internal_transform=="function"&&(c=a.internal_transform(c))),o+=c}return o};t3.default=uC});var r3=Ke(c0=>{"use strict";var ny=c0&&c0.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(c0,"__esModule",{value:!0});c0.setTextNodeValue=c0.createTextNode=c0.setStyle=c0.setAttribute=c0.removeChildNode=c0.insertBeforeNode=c0.appendChildNode=c0.createNode=c0.TEXT_NAME=void 0;var Rb=ny(eh()),oC=ny(kT()),Ob=ny(LT()),Mb=ny(e3()),kb=ny(n3());c0.TEXT_NAME="#text";c0.createNode=i=>{var o;let a={nodeName:i,style:{},attributes:{},childNodes:[],parentNode:null,yogaNode:i==="ink-virtual-text"?void 0:Rb.default.Node.create()};return i==="ink-text"&&((o=a.yogaNode)===null||o===void 0||o.setMeasureFunc(Lb.bind(null,a))),a};c0.appendChildNode=(i,o)=>{var a;o.parentNode&&c0.removeChildNode(o.parentNode,o),o.parentNode=i,i.childNodes.push(o),o.yogaNode&&((a=i.yogaNode)===null||a===void 0||a.insertChild(o.yogaNode,i.yogaNode.getChildCount())),(i.nodeName==="ink-text"||i.nodeName==="ink-virtual-text")&&i4(i)};c0.insertBeforeNode=(i,o,a)=>{var c,_;o.parentNode&&c0.removeChildNode(o.parentNode,o),o.parentNode=i;let t=i.childNodes.indexOf(a);if(t>=0){i.childNodes.splice(t,0,o),o.yogaNode&&((c=i.yogaNode)===null||c===void 0||c.insertChild(o.yogaNode,t));return}i.childNodes.push(o),o.yogaNode&&((_=i.yogaNode)===null||_===void 0||_.insertChild(o.yogaNode,i.yogaNode.getChildCount())),(i.nodeName==="ink-text"||i.nodeName==="ink-virtual-text")&&i4(i)};c0.removeChildNode=(i,o)=>{var a,c;o.yogaNode&&((c=(a=o.parentNode)===null||a===void 0?void 0:a.yogaNode)===null||c===void 0||c.removeChild(o.yogaNode)),o.parentNode=null;let _=i.childNodes.indexOf(o);_>=0&&i.childNodes.splice(_,1),(i.nodeName==="ink-text"||i.nodeName==="ink-virtual-text")&&i4(i)};c0.setAttribute=(i,o,a)=>{i.attributes[o]=a};c0.setStyle=(i,o)=>{i.style=o,i.yogaNode&&Ob.default(i.yogaNode,o)};c0.createTextNode=i=>{let o={nodeName:"#text",nodeValue:i,yogaNode:void 0,parentNode:null,style:{}};return c0.setTextNodeValue(o,i),o};var Lb=function(i,o){var a,c;let _=i.nodeName==="#text"?i.nodeValue:kb.default(i),t=oC.default(_);if(t.width<=o||t.width>=1&&o>0&&o<1)return t;let O=(c=(a=i.style)===null||a===void 0?void 0:a.textWrap)!==null&&c!==void 0?c:"wrap",N=Mb.default(_,o,O);return oC.default(N)},lC=i=>{var o;if(!(!i||!i.parentNode))return(o=i.yogaNode)!==null&&o!==void 0?o:lC(i.parentNode)},i4=i=>{let o=lC(i);o==null||o.markDirty()};c0.setTextNodeValue=(i,o)=>{typeof o!="string"&&(o=String(o)),i.nodeValue=o,i4(i)}});var th=Ke((dV,sC)=>{"use strict";sC.exports={BINARY_TYPES:["nodebuffer","arraybuffer","fragments"],GUID:"258EAFA5-E914-47DA-95CA-C5AB0DC85B11",kStatusCode:Symbol("status-code"),kWebSocket:Symbol("websocket"),EMPTY_BUFFER:Buffer.alloc(0),NOOP:()=>{}}});var ry=Ke((pV,i3)=>{"use strict";var{EMPTY_BUFFER:Nb}=th();function aC(i,o){if(i.length===0)return Nb;if(i.length===1)return i[0];let a=Buffer.allocUnsafe(o),c=0;for(let _=0;_{"use strict";var hC=Symbol("kDone"),u3=Symbol("kRun"),vC=class{constructor(o){this[hC]=()=>{this.pending--,this[u3]()},this.concurrency=o||Infinity,this.jobs=[],this.pending=0}add(o){this.jobs.push(o),this[u3]()}[u3](){if(this.pending!==this.concurrency&&this.jobs.length){let o=this.jobs.shift();this.pending++,o(this[hC])}}};pC.exports=vC});var oy=Ke((vV,gC)=>{"use strict";var iy=require("zlib"),yC=ry(),Fb=mC(),{kStatusCode:_C,NOOP:Pb}=th(),Ib=Buffer.from([0,0,255,255]),o4=Symbol("permessage-deflate"),X1=Symbol("total-length"),uy=Symbol("callback"),h2=Symbol("buffers"),o3=Symbol("error"),l4,EC=class{constructor(o,a,c){if(this._maxPayload=c|0,this._options=o||{},this._threshold=this._options.threshold!==void 0?this._options.threshold:1024,this._isServer=!!a,this._deflate=null,this._inflate=null,this.params=null,!l4){let _=this._options.concurrencyLimit!==void 0?this._options.concurrencyLimit:10;l4=new Fb(_)}}static get extensionName(){return"permessage-deflate"}offer(){let o={};return this._options.serverNoContextTakeover&&(o.server_no_context_takeover=!0),this._options.clientNoContextTakeover&&(o.client_no_context_takeover=!0),this._options.serverMaxWindowBits&&(o.server_max_window_bits=this._options.serverMaxWindowBits),this._options.clientMaxWindowBits?o.client_max_window_bits=this._options.clientMaxWindowBits:this._options.clientMaxWindowBits==null&&(o.client_max_window_bits=!0),o}accept(o){return o=this.normalizeParams(o),this.params=this._isServer?this.acceptAsServer(o):this.acceptAsClient(o),this.params}cleanup(){if(this._inflate&&(this._inflate.close(),this._inflate=null),this._deflate){let o=this._deflate[uy];this._deflate.close(),this._deflate=null,o&&o(new Error("The deflate stream was closed while data was being processed"))}}acceptAsServer(o){let a=this._options,c=o.find(_=>!(a.serverNoContextTakeover===!1&&_.server_no_context_takeover||_.server_max_window_bits&&(a.serverMaxWindowBits===!1||typeof a.serverMaxWindowBits=="number"&&a.serverMaxWindowBits>_.server_max_window_bits)||typeof a.clientMaxWindowBits=="number"&&!_.client_max_window_bits));if(!c)throw new Error("None of the extension offers can be accepted");return a.serverNoContextTakeover&&(c.server_no_context_takeover=!0),a.clientNoContextTakeover&&(c.client_no_context_takeover=!0),typeof a.serverMaxWindowBits=="number"&&(c.server_max_window_bits=a.serverMaxWindowBits),typeof a.clientMaxWindowBits=="number"?c.client_max_window_bits=a.clientMaxWindowBits:(c.client_max_window_bits===!0||a.clientMaxWindowBits===!1)&&delete c.client_max_window_bits,c}acceptAsClient(o){let a=o[0];if(this._options.clientNoContextTakeover===!1&&a.client_no_context_takeover)throw new Error('Unexpected parameter "client_no_context_takeover"');if(!a.client_max_window_bits)typeof this._options.clientMaxWindowBits=="number"&&(a.client_max_window_bits=this._options.clientMaxWindowBits);else if(this._options.clientMaxWindowBits===!1||typeof this._options.clientMaxWindowBits=="number"&&a.client_max_window_bits>this._options.clientMaxWindowBits)throw new Error('Unexpected or invalid parameter "client_max_window_bits"');return a}normalizeParams(o){return o.forEach(a=>{Object.keys(a).forEach(c=>{let _=a[c];if(_.length>1)throw new Error(`Parameter "${c}" must have only a single value`);if(_=_[0],c==="client_max_window_bits"){if(_!==!0){let t=+_;if(!Number.isInteger(t)||t<8||t>15)throw new TypeError(`Invalid value for parameter "${c}": ${_}`);_=t}else if(!this._isServer)throw new TypeError(`Invalid value for parameter "${c}": ${_}`)}else if(c==="server_max_window_bits"){let t=+_;if(!Number.isInteger(t)||t<8||t>15)throw new TypeError(`Invalid value for parameter "${c}": ${_}`);_=t}else if(c==="client_no_context_takeover"||c==="server_no_context_takeover"){if(_!==!0)throw new TypeError(`Invalid value for parameter "${c}": ${_}`)}else throw new Error(`Unknown parameter "${c}"`);a[c]=_})}),o}decompress(o,a,c){l4.add(_=>{this._decompress(o,a,(t,O)=>{_(),c(t,O)})})}compress(o,a,c){l4.add(_=>{this._compress(o,a,(t,O)=>{_(),c(t,O)})})}_decompress(o,a,c){let _=this._isServer?"client":"server";if(!this._inflate){let t=`${_}_max_window_bits`,O=typeof this.params[t]!="number"?iy.Z_DEFAULT_WINDOWBITS:this.params[t];this._inflate=iy.createInflateRaw(Zr(Ht({},this._options.zlibInflateOptions),{windowBits:O})),this._inflate[o4]=this,this._inflate[X1]=0,this._inflate[h2]=[],this._inflate.on("error",Bb),this._inflate.on("data",DC)}this._inflate[uy]=c,this._inflate.write(o),a&&this._inflate.write(Ib),this._inflate.flush(()=>{let t=this._inflate[o3];if(t){this._inflate.close(),this._inflate=null,c(t);return}let O=yC.concat(this._inflate[h2],this._inflate[X1]);this._inflate._readableState.endEmitted?(this._inflate.close(),this._inflate=null):(this._inflate[X1]=0,this._inflate[h2]=[],a&&this.params[`${_}_no_context_takeover`]&&this._inflate.reset()),c(null,O)})}_compress(o,a,c){let _=this._isServer?"server":"client";if(!this._deflate){let t=`${_}_max_window_bits`,O=typeof this.params[t]!="number"?iy.Z_DEFAULT_WINDOWBITS:this.params[t];this._deflate=iy.createDeflateRaw(Zr(Ht({},this._options.zlibDeflateOptions),{windowBits:O})),this._deflate[X1]=0,this._deflate[h2]=[],this._deflate.on("error",Pb),this._deflate.on("data",bb)}this._deflate[uy]=c,this._deflate.write(o),this._deflate.flush(iy.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let t=yC.concat(this._deflate[h2],this._deflate[X1]);a&&(t=t.slice(0,t.length-4)),this._deflate[uy]=null,this._deflate[X1]=0,this._deflate[h2]=[],a&&this.params[`${_}_no_context_takeover`]&&this._deflate.reset(),c(null,t)})}};gC.exports=EC;function bb(i){this[h2].push(i),this[X1]+=i.length}function DC(i){if(this[X1]+=i.length,this[o4]._maxPayload<1||this[X1]<=this[o4]._maxPayload){this[h2].push(i);return}this[o3]=new RangeError("Max payload size exceeded"),this[o3][_C]=1009,this.removeListener("data",DC),this.reset()}function Bb(i){this[o4]._inflate=null,i[_C]=1007,this[uy](i)}});var s3=Ke((mV,l3)=>{"use strict";function wC(i){return i>=1e3&&i<=1014&&i!==1004&&i!==1005&&i!==1006||i>=3e3&&i<=4999}function SC(i){let o=i.length,a=0;for(;a=o||(i[a+1]&192)!=128||(i[a+2]&192)!=128||i[a]===224&&(i[a+1]&224)==128||i[a]===237&&(i[a+1]&224)==160)return!1;a+=3}else if((i[a]&248)==240){if(a+3>=o||(i[a+1]&192)!=128||(i[a+2]&192)!=128||(i[a+3]&192)!=128||i[a]===240&&(i[a+1]&240)==128||i[a]===244&&i[a+1]>143||i[a]>244)return!1;a+=4}else return!1;return!0}try{let i=require("utf-8-validate");typeof i=="object"&&(i=i.Validation.isValidUTF8),l3.exports={isValidStatusCode:wC,isValidUTF8(o){return o.length<150?SC(o):i(o)}}}catch(i){l3.exports={isValidStatusCode:wC,isValidUTF8:SC}}});var c3=Ke((gV,TC)=>{"use strict";var{Writable:Ub}=require("stream"),CC=oy(),{BINARY_TYPES:jb,EMPTY_BUFFER:zb,kStatusCode:Hb,kWebSocket:qb}=th(),{concat:a3,toArrayBuffer:Wb,unmask:Vb}=ry(),{isValidStatusCode:Gb,isValidUTF8:xC}=s3(),ly=0,AC=1,RC=2,OC=3,f3=4,Yb=5,MC=class extends Ub{constructor(o,a,c,_){super();this._binaryType=o||jb[0],this[qb]=void 0,this._extensions=a||{},this._isServer=!!c,this._maxPayload=_|0,this._bufferedBytes=0,this._buffers=[],this._compressed=!1,this._payloadLength=0,this._mask=void 0,this._fragmented=0,this._masked=!1,this._fin=!1,this._opcode=0,this._totalPayloadLength=0,this._messageLength=0,this._fragments=[],this._state=ly,this._loop=!1}_write(o,a,c){if(this._opcode===8&&this._state==ly)return c();this._bufferedBytes+=o.length,this._buffers.push(o),this.startLoop(c)}consume(o){if(this._bufferedBytes-=o,o===this._buffers[0].length)return this._buffers.shift();if(o=c.length?a.set(this._buffers.shift(),_):(a.set(new Uint8Array(c.buffer,c.byteOffset,o),_),this._buffers[0]=c.slice(o)),o-=c.length}while(o>0);return a}startLoop(o){let a;this._loop=!0;do switch(this._state){case ly:a=this.getInfo();break;case AC:a=this.getPayloadLength16();break;case RC:a=this.getPayloadLength64();break;case OC:this.getMask();break;case f3:a=this.getData(o);break;default:this._loop=!1;return}while(this._loop);o(a)}getInfo(){if(this._bufferedBytes<2){this._loop=!1;return}let o=this.consume(2);if((o[0]&48)!=0)return this._loop=!1,Ko(RangeError,"RSV2 and RSV3 must be clear",!0,1002);let a=(o[0]&64)==64;if(a&&!this._extensions[CC.extensionName])return this._loop=!1,Ko(RangeError,"RSV1 must be clear",!0,1002);if(this._fin=(o[0]&128)==128,this._opcode=o[0]&15,this._payloadLength=o[1]&127,this._opcode===0){if(a)return this._loop=!1,Ko(RangeError,"RSV1 must be clear",!0,1002);if(!this._fragmented)return this._loop=!1,Ko(RangeError,"invalid opcode 0",!0,1002);this._opcode=this._fragmented}else if(this._opcode===1||this._opcode===2){if(this._fragmented)return this._loop=!1,Ko(RangeError,`invalid opcode ${this._opcode}`,!0,1002);this._compressed=a}else if(this._opcode>7&&this._opcode<11){if(!this._fin)return this._loop=!1,Ko(RangeError,"FIN must be set",!0,1002);if(a)return this._loop=!1,Ko(RangeError,"RSV1 must be clear",!0,1002);if(this._payloadLength>125)return this._loop=!1,Ko(RangeError,`invalid payload length ${this._payloadLength}`,!0,1002)}else return this._loop=!1,Ko(RangeError,`invalid opcode ${this._opcode}`,!0,1002);if(!this._fin&&!this._fragmented&&(this._fragmented=this._opcode),this._masked=(o[1]&128)==128,this._isServer){if(!this._masked)return this._loop=!1,Ko(RangeError,"MASK must be set",!0,1002)}else if(this._masked)return this._loop=!1,Ko(RangeError,"MASK must be clear",!0,1002);if(this._payloadLength===126)this._state=AC;else if(this._payloadLength===127)this._state=RC;else return this.haveLength()}getPayloadLength16(){if(this._bufferedBytes<2){this._loop=!1;return}return this._payloadLength=this.consume(2).readUInt16BE(0),this.haveLength()}getPayloadLength64(){if(this._bufferedBytes<8){this._loop=!1;return}let o=this.consume(8),a=o.readUInt32BE(0);return a>Math.pow(2,53-32)-1?(this._loop=!1,Ko(RangeError,"Unsupported WebSocket frame: payload length > 2^53 - 1",!1,1009)):(this._payloadLength=a*Math.pow(2,32)+o.readUInt32BE(4),this.haveLength())}haveLength(){if(this._payloadLength&&this._opcode<8&&(this._totalPayloadLength+=this._payloadLength,this._totalPayloadLength>this._maxPayload&&this._maxPayload>0))return this._loop=!1,Ko(RangeError,"Max payload size exceeded",!1,1009);this._masked?this._state=OC:this._state=f3}getMask(){if(this._bufferedBytes<4){this._loop=!1;return}this._mask=this.consume(4),this._state=f3}getData(o){let a=zb;if(this._payloadLength){if(this._bufferedBytes7)return this.controlMessage(a);if(this._compressed){this._state=Yb,this.decompress(a,o);return}return a.length&&(this._messageLength=this._totalPayloadLength,this._fragments.push(a)),this.dataMessage()}decompress(o,a){this._extensions[CC.extensionName].decompress(o,this._fin,(_,t)=>{if(_)return a(_);if(t.length){if(this._messageLength+=t.length,this._messageLength>this._maxPayload&&this._maxPayload>0)return a(Ko(RangeError,"Max payload size exceeded",!1,1009));this._fragments.push(t)}let O=this.dataMessage();if(O)return a(O);this.startLoop(a)})}dataMessage(){if(this._fin){let o=this._messageLength,a=this._fragments;if(this._totalPayloadLength=0,this._messageLength=0,this._fragmented=0,this._fragments=[],this._opcode===2){let c;this._binaryType==="nodebuffer"?c=a3(a,o):this._binaryType==="arraybuffer"?c=Wb(a3(a,o)):c=a,this.emit("message",c)}else{let c=a3(a,o);if(!xC(c))return this._loop=!1,Ko(Error,"invalid UTF-8 sequence",!0,1007);this.emit("message",c.toString())}}this._state=ly}controlMessage(o){if(this._opcode===8)if(this._loop=!1,o.length===0)this.emit("conclude",1005,""),this.end();else{if(o.length===1)return Ko(RangeError,"invalid payload length 1",!0,1002);{let a=o.readUInt16BE(0);if(!Gb(a))return Ko(RangeError,`invalid status code ${a}`,!0,1002);let c=o.slice(2);if(!xC(c))return Ko(Error,"invalid UTF-8 sequence",!0,1007);this.emit("conclude",a,c.toString()),this.end()}}else this._opcode===9?this.emit("ping",o):this.emit("pong",o);this._state=ly}};TC.exports=MC;function Ko(i,o,a,c){let _=new i(a?`Invalid WebSocket frame: ${o}`:o);return Error.captureStackTrace(_,Ko),_[Hb]=c,_}});var d3=Ke((yV,kC)=>{"use strict";var{randomFillSync:Kb}=require("crypto"),LC=oy(),{EMPTY_BUFFER:Xb}=th(),{isValidStatusCode:Qb}=s3(),{mask:NC,toBuffer:Q1}=ry(),nh=Buffer.alloc(4),J1=class{constructor(o,a){this._extensions=a||{},this._socket=o,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._deflating=!1,this._queue=[]}static frame(o,a){let c=a.mask&&a.readOnly,_=a.mask?6:2,t=o.length;o.length>=65536?(_+=8,t=127):o.length>125&&(_+=2,t=126);let O=Buffer.allocUnsafe(c?o.length+_:_);return O[0]=a.fin?a.opcode|128:a.opcode,a.rsv1&&(O[0]|=64),O[1]=t,t===126?O.writeUInt16BE(o.length,2):t===127&&(O.writeUInt32BE(0,2),O.writeUInt32BE(o.length,6)),a.mask?(Kb(nh,0,4),O[1]|=128,O[_-4]=nh[0],O[_-3]=nh[1],O[_-2]=nh[2],O[_-1]=nh[3],c?(NC(o,nh,O,_,o.length),[O]):(NC(o,nh,o,0,o.length),[O,o])):[O,o]}close(o,a,c,_){let t;if(o===void 0)t=Xb;else{if(typeof o!="number"||!Qb(o))throw new TypeError("First argument must be a valid error code number");if(a===void 0||a==="")t=Buffer.allocUnsafe(2),t.writeUInt16BE(o,0);else{let O=Buffer.byteLength(a);if(O>123)throw new RangeError("The message must not be greater than 123 bytes");t=Buffer.allocUnsafe(2+O),t.writeUInt16BE(o,0),t.write(a,2)}}this._deflating?this.enqueue([this.doClose,t,c,_]):this.doClose(t,c,_)}doClose(o,a,c){this.sendFrame(J1.frame(o,{fin:!0,rsv1:!1,opcode:8,mask:a,readOnly:!1}),c)}ping(o,a,c){let _=Q1(o);if(_.length>125)throw new RangeError("The data size must not be greater than 125 bytes");this._deflating?this.enqueue([this.doPing,_,a,Q1.readOnly,c]):this.doPing(_,a,Q1.readOnly,c)}doPing(o,a,c,_){this.sendFrame(J1.frame(o,{fin:!0,rsv1:!1,opcode:9,mask:a,readOnly:c}),_)}pong(o,a,c){let _=Q1(o);if(_.length>125)throw new RangeError("The data size must not be greater than 125 bytes");this._deflating?this.enqueue([this.doPong,_,a,Q1.readOnly,c]):this.doPong(_,a,Q1.readOnly,c)}doPong(o,a,c,_){this.sendFrame(J1.frame(o,{fin:!0,rsv1:!1,opcode:10,mask:a,readOnly:c}),_)}send(o,a,c){let _=Q1(o),t=this._extensions[LC.extensionName],O=a.binary?2:1,N=a.compress;if(this._firstFragment?(this._firstFragment=!1,N&&t&&(N=_.length>=t._threshold),this._compress=N):(N=!1,O=0),a.fin&&(this._firstFragment=!0),t){let M={fin:a.fin,rsv1:N,opcode:O,mask:a.mask,readOnly:Q1.readOnly};this._deflating?this.enqueue([this.dispatch,_,this._compress,M,c]):this.dispatch(_,this._compress,M,c)}else this.sendFrame(J1.frame(_,{fin:a.fin,rsv1:!1,opcode:O,mask:a.mask,readOnly:Q1.readOnly}),c)}dispatch(o,a,c,_){if(!a){this.sendFrame(J1.frame(o,c),_);return}let t=this._extensions[LC.extensionName];this._bufferedBytes+=o.length,this._deflating=!0,t.compress(o,c.fin,(O,N)=>{if(this._socket.destroyed){let M=new Error("The socket was closed while data was being compressed");typeof _=="function"&&_(M);for(let T=0;T{"use strict";var sy=class{constructor(o,a){this.target=a,this.type=o}},PC=class extends sy{constructor(o,a){super("message",a);this.data=o}},IC=class extends sy{constructor(o,a,c){super("close",c);this.wasClean=c._closeFrameReceived&&c._closeFrameSent,this.reason=a,this.code=o}},bC=class extends sy{constructor(o){super("open",o)}},BC=class extends sy{constructor(o,a){super("error",a);this.message=o.message,this.error=o}},Jb={addEventListener(i,o,a){if(typeof o!="function")return;function c(M){o.call(this,new PC(M,this))}function _(M,T){o.call(this,new IC(M,T,this))}function t(M){o.call(this,new BC(M,this))}function O(){o.call(this,new bC(this))}let N=a&&a.once?"once":"on";i==="message"?(c._listener=o,this[N](i,c)):i==="close"?(_._listener=o,this[N](i,_)):i==="error"?(t._listener=o,this[N](i,t)):i==="open"?(O._listener=o,this[N](i,O)):this[N](i,o)},removeEventListener(i,o){let a=this.listeners(i);for(let c=0;c{"use strict";var ay=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,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,0,0,0,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,0,1,0,1,0];function zc(i,o,a){i[o]===void 0?i[o]=[a]:i[o].push(a)}function Zb(i){let o=Object.create(null);if(i===void 0||i==="")return o;let a=Object.create(null),c=!1,_=!1,t=!1,O,N,M=-1,T=-1,B=0;for(;B{let a=i[o];return Array.isArray(a)||(a=[a]),a.map(c=>[o].concat(Object.keys(c).map(_=>{let t=c[_];return Array.isArray(t)||(t=[t]),t.map(O=>O===!0?_:`${_}=${O}`).join("; ")})).join("; ")).join(", ")}).join(", ")}jC.exports={format:$b,parse:Zb}});var y3=Ke((DV,zC)=>{"use strict";var eB=require("events"),tB=require("https"),nB=require("http"),HC=require("net"),rB=require("tls"),{randomBytes:iB,createHash:uB}=require("crypto"),{URL:h3}=require("url"),v2=oy(),oB=c3(),lB=d3(),{BINARY_TYPES:qC,EMPTY_BUFFER:v3,GUID:sB,kStatusCode:aB,kWebSocket:na,NOOP:WC}=th(),{addEventListener:fB,removeEventListener:cB}=UC(),{format:dB,parse:pB}=p3(),{toBuffer:hB}=ry(),VC=["CONNECTING","OPEN","CLOSING","CLOSED"],m3=[8,13],vB=30*1e3,Gi=class extends eB{constructor(o,a,c){super();this._binaryType=qC[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage="",this._closeTimer=null,this._extensions={},this._protocol="",this._readyState=Gi.CONNECTING,this._receiver=null,this._sender=null,this._socket=null,o!==null?(this._bufferedAmount=0,this._isServer=!1,this._redirects=0,Array.isArray(a)?a=a.join(", "):typeof a=="object"&&a!==null&&(c=a,a=void 0),GC(this,o,a,c)):this._isServer=!0}get binaryType(){return this._binaryType}set binaryType(o){!qC.includes(o)||(this._binaryType=o,this._receiver&&(this._receiver._binaryType=o))}get bufferedAmount(){return this._socket?this._socket._writableState.length+this._sender._bufferedBytes:this._bufferedAmount}get extensions(){return Object.keys(this._extensions).join()}get protocol(){return this._protocol}get readyState(){return this._readyState}get url(){return this._url}setSocket(o,a,c){let _=new oB(this.binaryType,this._extensions,this._isServer,c);this._sender=new lB(o,this._extensions),this._receiver=_,this._socket=o,_[na]=this,o[na]=this,_.on("conclude",mB),_.on("drain",gB),_.on("error",yB),_.on("message",_B),_.on("ping",EB),_.on("pong",DB),o.setTimeout(0),o.setNoDelay(),a.length>0&&o.unshift(a),o.on("close",YC),o.on("data",s4),o.on("end",KC),o.on("error",XC),this._readyState=Gi.OPEN,this.emit("open")}emitClose(){if(!this._socket){this._readyState=Gi.CLOSED,this.emit("close",this._closeCode,this._closeMessage);return}this._extensions[v2.extensionName]&&this._extensions[v2.extensionName].cleanup(),this._receiver.removeAllListeners(),this._readyState=Gi.CLOSED,this.emit("close",this._closeCode,this._closeMessage)}close(o,a){if(this.readyState!==Gi.CLOSED){if(this.readyState===Gi.CONNECTING){let c="WebSocket was closed before the connection was established";return Z1(this,this._req,c)}if(this.readyState===Gi.CLOSING){this._closeFrameSent&&this._closeFrameReceived&&this._socket.end();return}this._readyState=Gi.CLOSING,this._sender.close(o,a,!this._isServer,c=>{c||(this._closeFrameSent=!0,this._closeFrameReceived&&this._socket.end())}),this._closeTimer=setTimeout(this._socket.destroy.bind(this._socket),vB)}}ping(o,a,c){if(this.readyState===Gi.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof o=="function"?(c=o,o=a=void 0):typeof a=="function"&&(c=a,a=void 0),typeof o=="number"&&(o=o.toString()),this.readyState!==Gi.OPEN){g3(this,o,c);return}a===void 0&&(a=!this._isServer),this._sender.ping(o||v3,a,c)}pong(o,a,c){if(this.readyState===Gi.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof o=="function"?(c=o,o=a=void 0):typeof a=="function"&&(c=a,a=void 0),typeof o=="number"&&(o=o.toString()),this.readyState!==Gi.OPEN){g3(this,o,c);return}a===void 0&&(a=!this._isServer),this._sender.pong(o||v3,a,c)}send(o,a,c){if(this.readyState===Gi.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof a=="function"&&(c=a,a={}),typeof o=="number"&&(o=o.toString()),this.readyState!==Gi.OPEN){g3(this,o,c);return}let _=Ht({binary:typeof o!="string",mask:!this._isServer,compress:!0,fin:!0},a);this._extensions[v2.extensionName]||(_.compress=!1),this._sender.send(o||v3,_,c)}terminate(){if(this.readyState!==Gi.CLOSED){if(this.readyState===Gi.CONNECTING){let o="WebSocket was closed before the connection was established";return Z1(this,this._req,o)}this._socket&&(this._readyState=Gi.CLOSING,this._socket.destroy())}}};VC.forEach((i,o)=>{let a={enumerable:!0,value:o};Object.defineProperty(Gi.prototype,i,a),Object.defineProperty(Gi,i,a)});["binaryType","bufferedAmount","extensions","protocol","readyState","url"].forEach(i=>{Object.defineProperty(Gi.prototype,i,{enumerable:!0})});["open","error","close","message"].forEach(i=>{Object.defineProperty(Gi.prototype,`on${i}`,{configurable:!0,enumerable:!0,get(){let o=this.listeners(i);for(let a=0;a{Z1(i,q,"Opening handshake has timed out")}),q.on("error",ne=>{q===null||q.aborted||(q=i._req=null,i._readyState=Gi.CLOSING,i.emit("error",ne),i.emitClose())}),q.on("response",ne=>{let m=ne.headers.location,he=ne.statusCode;if(m&&_.followRedirects&&he>=300&&he<400){if(++i._redirects>_.maxRedirects){Z1(i,q,"Maximum redirects exceeded");return}q.abort();let De=new h3(m,o);GC(i,De,a,c)}else i.emit("unexpected-response",q,ne)||Z1(i,q,`Unexpected server response: ${ne.statusCode}`)}),q.on("upgrade",(ne,m,he)=>{if(i.emit("upgrade",ne),i.readyState!==Gi.CONNECTING)return;q=i._req=null;let De=uB("sha1").update(T+sB).digest("base64");if(ne.headers["sec-websocket-accept"]!==De){Z1(i,m,"Invalid Sec-WebSocket-Accept header");return}let se=ne.headers["sec-websocket-protocol"],fe=(a||"").split(/, */),_e;if(!a&&se?_e="Server sent a subprotocol but none was requested":a&&!se?_e="Server sent no subprotocol":se&&!fe.includes(se)&&(_e="Server sent an invalid subprotocol"),_e){Z1(i,m,_e);return}if(se&&(i._protocol=se),H)try{let ce=pB(ne.headers["sec-websocket-extensions"]);ce[v2.extensionName]&&(H.accept(ce[v2.extensionName]),i._extensions[v2.extensionName]=H)}catch(ce){Z1(i,m,"Invalid Sec-WebSocket-Extensions header");return}i.setSocket(m,he,_.maxPayload)})}function wB(i){return i.path=i.socketPath,HC.connect(i)}function SB(i){return i.path=void 0,!i.servername&&i.servername!==""&&(i.servername=HC.isIP(i.host)?"":i.host),rB.connect(i)}function Z1(i,o,a){i._readyState=Gi.CLOSING;let c=new Error(a);Error.captureStackTrace(c,Z1),o.setHeader?(o.abort(),o.socket&&!o.socket.destroyed&&o.socket.destroy(),o.once("abort",i.emitClose.bind(i)),i.emit("error",c)):(o.destroy(c),o.once("error",i.emit.bind(i,"error")),o.once("close",i.emitClose.bind(i)))}function g3(i,o,a){if(o){let c=hB(o).length;i._socket?i._sender._bufferedBytes+=c:i._bufferedAmount+=c}if(a){let c=new Error(`WebSocket is not open: readyState ${i.readyState} (${VC[i.readyState]})`);a(c)}}function mB(i,o){let a=this[na];a._socket.removeListener("data",s4),a._socket.resume(),a._closeFrameReceived=!0,a._closeMessage=o,a._closeCode=i,i===1005?a.close():a.close(i,o)}function gB(){this[na]._socket.resume()}function yB(i){let o=this[na];o._socket.removeListener("data",s4),o._readyState=Gi.CLOSING,o._closeCode=i[aB],o.emit("error",i),o._socket.destroy()}function QC(){this[na].emitClose()}function _B(i){this[na].emit("message",i)}function EB(i){let o=this[na];o.pong(i,!o._isServer,WC),o.emit("ping",i)}function DB(i){this[na].emit("pong",i)}function YC(){let i=this[na];this.removeListener("close",YC),this.removeListener("end",KC),i._readyState=Gi.CLOSING,i._socket.read(),i._receiver.end(),this.removeListener("data",s4),this[na]=void 0,clearTimeout(i._closeTimer),i._receiver._writableState.finished||i._receiver._writableState.errorEmitted?i.emitClose():(i._receiver.on("error",QC),i._receiver.on("finish",QC))}function s4(i){this[na]._receiver.write(i)||this.pause()}function KC(){let i=this[na];i._readyState=Gi.CLOSING,i._receiver.end(),this.end()}function XC(){let i=this[na];this.removeListener("error",XC),this.on("error",WC),i&&(i._readyState=Gi.CLOSING,this.destroy())}});var e6=Ke((wV,JC)=>{"use strict";var{Duplex:TB}=require("stream");function ZC(i){i.emit("close")}function CB(){!this.destroyed&&this._writableState.finished&&this.destroy()}function $C(i){this.removeListener("error",$C),this.destroy(),this.listenerCount("error")===0&&this.emit("error",i)}function xB(i,o){let a=!0;function c(){a&&i._socket.resume()}i.readyState===i.CONNECTING?i.once("open",function(){i._receiver.removeAllListeners("drain"),i._receiver.on("drain",c)}):(i._receiver.removeAllListeners("drain"),i._receiver.on("drain",c));let _=new TB(Zr(Ht({},o),{autoDestroy:!1,emitClose:!1,objectMode:!1,writableObjectMode:!1}));return i.on("message",function(O){_.push(O)||(a=!1,i._socket.pause())}),i.once("error",function(O){_.destroyed||_.destroy(O)}),i.once("close",function(){_.destroyed||_.push(null)}),_._destroy=function(t,O){if(i.readyState===i.CLOSED){O(t),process.nextTick(ZC,_);return}let N=!1;i.once("error",function(T){N=!0,O(T)}),i.once("close",function(){N||O(t),process.nextTick(ZC,_)}),i.terminate()},_._final=function(t){if(i.readyState===i.CONNECTING){i.once("open",function(){_._final(t)});return}i._socket!==null&&(i._socket._writableState.finished?(t(),_._readableState.endEmitted&&_.destroy()):(i._socket.once("finish",function(){t()}),i.close()))},_._read=function(){i.readyState===i.OPEN&&!a&&(a=!0,i._receiver._writableState.needDrain||i._socket.resume())},_._write=function(t,O,N){if(i.readyState===i.CONNECTING){i.once("open",function(){_._write(t,O,N)});return}i.send(t,N)},_.on("end",CB),_.on("error",$C),_}JC.exports=xB});var r6=Ke((SV,t6)=>{"use strict";var AB=require("events"),{createHash:RB}=require("crypto"),{createServer:OB,STATUS_CODES:_3}=require("http"),rh=oy(),MB=y3(),{format:kB,parse:LB}=p3(),{GUID:NB,kWebSocket:FB}=th(),PB=/^[+/0-9A-Za-z]{22}==$/,n6=class extends AB{constructor(o,a){super();if(o=Ht({maxPayload:100*1024*1024,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null},o),o.port==null&&!o.server&&!o.noServer)throw new TypeError('One of the "port", "server", or "noServer" options must be specified');if(o.port!=null?(this._server=OB((c,_)=>{let t=_3[426];_.writeHead(426,{"Content-Length":t.length,"Content-Type":"text/plain"}),_.end(t)}),this._server.listen(o.port,o.host,o.backlog,a)):o.server&&(this._server=o.server),this._server){let c=this.emit.bind(this,"connection");this._removeListeners=IB(this._server,{listening:this.emit.bind(this,"listening"),error:this.emit.bind(this,"error"),upgrade:(_,t,O)=>{this.handleUpgrade(_,t,O,c)}})}o.perMessageDeflate===!0&&(o.perMessageDeflate={}),o.clientTracking&&(this.clients=new Set),this.options=o}address(){if(this.options.noServer)throw new Error('The server is operating in "noServer" mode');return this._server?this._server.address():null}close(o){if(o&&this.once("close",o),this.clients)for(let c of this.clients)c.terminate();let a=this._server;if(a&&(this._removeListeners(),this._removeListeners=this._server=null,this.options.port!=null)){a.close(()=>this.emit("close"));return}process.nextTick(bB,this)}shouldHandle(o){if(this.options.path){let a=o.url.indexOf("?");if((a!==-1?o.url.slice(0,a):o.url)!==this.options.path)return!1}return!0}handleUpgrade(o,a,c,_){a.on("error",E3);let t=o.headers["sec-websocket-key"]!==void 0?o.headers["sec-websocket-key"].trim():!1,O=+o.headers["sec-websocket-version"],N={};if(o.method!=="GET"||o.headers.upgrade.toLowerCase()!=="websocket"||!t||!PB.test(t)||O!==8&&O!==13||!this.shouldHandle(o))return a4(a,400);if(this.options.perMessageDeflate){let M=new rh(this.options.perMessageDeflate,!0,this.options.maxPayload);try{let T=LB(o.headers["sec-websocket-extensions"]);T[rh.extensionName]&&(M.accept(T[rh.extensionName]),N[rh.extensionName]=M)}catch(T){return a4(a,400)}}if(this.options.verifyClient){let M={origin:o.headers[`${O===8?"sec-websocket-origin":"origin"}`],secure:!!(o.socket.authorized||o.socket.encrypted),req:o};if(this.options.verifyClient.length===2){this.options.verifyClient(M,(T,B,H,q)=>{if(!T)return a4(a,B||401,H,q);this.completeUpgrade(t,N,o,a,c,_)});return}if(!this.options.verifyClient(M))return a4(a,401)}this.completeUpgrade(t,N,o,a,c,_)}completeUpgrade(o,a,c,_,t,O){if(!_.readable||!_.writable)return _.destroy();if(_[FB])throw new Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");let N=RB("sha1").update(o+NB).digest("base64"),M=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${N}`],T=new MB(null),B=c.headers["sec-websocket-protocol"];if(B&&(B=B.split(",").map(BB),this.options.handleProtocols?B=this.options.handleProtocols(B,c):B=B[0],B&&(M.push(`Sec-WebSocket-Protocol: ${B}`),T._protocol=B)),a[rh.extensionName]){let H=a[rh.extensionName].params,q=kB({[rh.extensionName]:[H]});M.push(`Sec-WebSocket-Extensions: ${q}`),T._extensions=a}this.emit("headers",M,c),_.write(M.concat(`\r -`).join(`\r -`)),_.removeListener("error",E3),T.setSocket(_,t,this.options.maxPayload),this.clients&&(this.clients.add(T),T.on("close",()=>this.clients.delete(T))),O(T,c)}};t6.exports=n6;function IB(i,o){for(let a of Object.keys(o))i.on(a,o[a]);return function(){for(let c of Object.keys(o))i.removeListener(c,o[c])}}function bB(i){i.emit("close")}function E3(){this.destroy()}function a4(i,o,a,c){i.writable&&(a=a||_3[o],c=Ht({Connection:"close","Content-Type":"text/html","Content-Length":Buffer.byteLength(a)},c),i.write(`HTTP/1.1 ${o} ${_3[o]}\r -`+Object.keys(c).map(_=>`${_}: ${c[_]}`).join(`\r -`)+`\r -\r -`+a)),i.removeListener("error",E3),i.destroy()}function BB(i){return i.trim()}});var u6=Ke((TV,i6)=>{"use strict";var fy=y3();fy.createWebSocketStream=e6();fy.Server=r6();fy.Receiver=c3();fy.Sender=d3();i6.exports=fy});var o6=Ke(f4=>{"use strict";var UB=f4&&f4.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(f4,"__esModule",{value:!0});var jB=UB(u6()),cy=global;cy.WebSocket||(cy.WebSocket=jB.default);cy.window||(cy.window=global);cy.window.__REACT_DEVTOOLS_COMPONENT_FILTERS__=[{type:1,value:7,isEnabled:!0},{type:2,value:"InternalApp",isEnabled:!0,isValid:!0},{type:2,value:"InternalAppContext",isEnabled:!0,isValid:!0},{type:2,value:"InternalStdoutContext",isEnabled:!0,isValid:!0},{type:2,value:"InternalStderrContext",isEnabled:!0,isValid:!0},{type:2,value:"InternalStdinContext",isEnabled:!0,isValid:!0},{type:2,value:"InternalFocusContext",isEnabled:!0,isValid:!0}]});var l6=Ke((c4,D3)=>{(function(i,o){typeof c4=="object"&&typeof D3=="object"?D3.exports=o():typeof define=="function"&&define.amd?define([],o):typeof c4=="object"?c4.ReactDevToolsBackend=o():i.ReactDevToolsBackend=o()})(window,function(){return function(i){var o={};function a(c){if(o[c])return o[c].exports;var _=o[c]={i:c,l:!1,exports:{}};return i[c].call(_.exports,_,_.exports,a),_.l=!0,_.exports}return a.m=i,a.c=o,a.d=function(c,_,t){a.o(c,_)||Object.defineProperty(c,_,{enumerable:!0,get:t})},a.r=function(c){typeof Symbol!="undefined"&&Symbol.toStringTag&&Object.defineProperty(c,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(c,"__esModule",{value:!0})},a.t=function(c,_){if(1&_&&(c=a(c)),8&_||4&_&&typeof c=="object"&&c&&c.__esModule)return c;var t=Object.create(null);if(a.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:c}),2&_&&typeof c!="string")for(var O in c)a.d(t,O,function(N){return c[N]}.bind(null,O));return t},a.n=function(c){var _=c&&c.__esModule?function(){return c.default}:function(){return c};return a.d(_,"a",_),_},a.o=function(c,_){return Object.prototype.hasOwnProperty.call(c,_)},a.p="",a(a.s=20)}([function(i,o,a){"use strict";i.exports=a(12)},function(i,o,a){"use strict";var c=Object.getOwnPropertySymbols,_=Object.prototype.hasOwnProperty,t=Object.prototype.propertyIsEnumerable;function O(N){if(N==null)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(N)}i.exports=function(){try{if(!Object.assign)return!1;var N=new String("abc");if(N[5]="de",Object.getOwnPropertyNames(N)[0]==="5")return!1;for(var M={},T=0;T<10;T++)M["_"+String.fromCharCode(T)]=T;if(Object.getOwnPropertyNames(M).map(function(H){return M[H]}).join("")!=="0123456789")return!1;var B={};return"abcdefghijklmnopqrst".split("").forEach(function(H){B[H]=H}),Object.keys(Object.assign({},B)).join("")==="abcdefghijklmnopqrst"}catch(H){return!1}}()?Object.assign:function(N,M){for(var T,B,H=O(N),q=1;q=ie||nn<0||Xt&&At-Ve>=at}function oe(){var At=De();if(Ce(At))return He(At);Qe=setTimeout(oe,function(nn){var an=ie-(nn-ut);return Xt?he(an,at-(nn-Ve)):an}(At))}function He(At){return Qe=void 0,rt&&Ue?X(At):(Ue=je=void 0,Dt)}function dt(){var At=De(),nn=Ce(At);if(Ue=arguments,je=this,ut=At,nn){if(Qe===void 0)return de(ut);if(Xt)return Qe=setTimeout(oe,ie),X(ut)}return Qe===void 0&&(Qe=setTimeout(oe,ie)),Dt}return ie=ce(ie)||0,fe(Oe)&&(It=!!Oe.leading,at=(Xt="maxWait"in Oe)?m(ce(Oe.maxWait)||0,ie):at,rt="trailing"in Oe?!!Oe.trailing:rt),dt.cancel=function(){Qe!==void 0&&clearTimeout(Qe),Ve=0,Ue=ut=je=Qe=void 0},dt.flush=function(){return Qe===void 0?Dt:He(De())},dt}function fe(me){var ie=_(me);return!!me&&(ie=="object"||ie=="function")}function _e(me){return _(me)=="symbol"||function(ie){return!!ie&&_(ie)=="object"}(me)&&ne.call(me)=="[object Symbol]"}function ce(me){if(typeof me=="number")return me;if(_e(me))return NaN;if(fe(me)){var ie=typeof me.valueOf=="function"?me.valueOf():me;me=fe(ie)?ie+"":ie}if(typeof me!="string")return me===0?me:+me;me=me.replace(t,"");var Oe=N.test(me);return Oe||M.test(me)?T(me.slice(2),Oe?2:8):O.test(me)?NaN:+me}i.exports=function(me,ie,Oe){var Ue=!0,je=!0;if(typeof me!="function")throw new TypeError("Expected a function");return fe(Oe)&&(Ue="leading"in Oe?!!Oe.leading:Ue,je="trailing"in Oe?!!Oe.trailing:je),se(me,ie,{leading:Ue,maxWait:ie,trailing:je})}}).call(this,a(4))},function(i,o,a){(function(c){function _(X){return(_=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(de){return typeof de}:function(de){return de&&typeof Symbol=="function"&&de.constructor===Symbol&&de!==Symbol.prototype?"symbol":typeof de})(X)}var t;o=i.exports=m,t=(c===void 0?"undefined":_(c))==="object"&&c.env&&c.env.NODE_DEBUG&&/\bsemver\b/i.test(c.env.NODE_DEBUG)?function(){var X=Array.prototype.slice.call(arguments,0);X.unshift("SEMVER"),console.log.apply(console,X)}:function(){},o.SEMVER_SPEC_VERSION="2.0.0";var O=Number.MAX_SAFE_INTEGER||9007199254740991,N=o.re=[],M=o.src=[],T=o.tokens={},B=0;function H(X){T[X]=B++}H("NUMERICIDENTIFIER"),M[T.NUMERICIDENTIFIER]="0|[1-9]\\d*",H("NUMERICIDENTIFIERLOOSE"),M[T.NUMERICIDENTIFIERLOOSE]="[0-9]+",H("NONNUMERICIDENTIFIER"),M[T.NONNUMERICIDENTIFIER]="\\d*[a-zA-Z-][a-zA-Z0-9-]*",H("MAINVERSION"),M[T.MAINVERSION]="("+M[T.NUMERICIDENTIFIER]+")\\.("+M[T.NUMERICIDENTIFIER]+")\\.("+M[T.NUMERICIDENTIFIER]+")",H("MAINVERSIONLOOSE"),M[T.MAINVERSIONLOOSE]="("+M[T.NUMERICIDENTIFIERLOOSE]+")\\.("+M[T.NUMERICIDENTIFIERLOOSE]+")\\.("+M[T.NUMERICIDENTIFIERLOOSE]+")",H("PRERELEASEIDENTIFIER"),M[T.PRERELEASEIDENTIFIER]="(?:"+M[T.NUMERICIDENTIFIER]+"|"+M[T.NONNUMERICIDENTIFIER]+")",H("PRERELEASEIDENTIFIERLOOSE"),M[T.PRERELEASEIDENTIFIERLOOSE]="(?:"+M[T.NUMERICIDENTIFIERLOOSE]+"|"+M[T.NONNUMERICIDENTIFIER]+")",H("PRERELEASE"),M[T.PRERELEASE]="(?:-("+M[T.PRERELEASEIDENTIFIER]+"(?:\\."+M[T.PRERELEASEIDENTIFIER]+")*))",H("PRERELEASELOOSE"),M[T.PRERELEASELOOSE]="(?:-?("+M[T.PRERELEASEIDENTIFIERLOOSE]+"(?:\\."+M[T.PRERELEASEIDENTIFIERLOOSE]+")*))",H("BUILDIDENTIFIER"),M[T.BUILDIDENTIFIER]="[0-9A-Za-z-]+",H("BUILD"),M[T.BUILD]="(?:\\+("+M[T.BUILDIDENTIFIER]+"(?:\\."+M[T.BUILDIDENTIFIER]+")*))",H("FULL"),H("FULLPLAIN"),M[T.FULLPLAIN]="v?"+M[T.MAINVERSION]+M[T.PRERELEASE]+"?"+M[T.BUILD]+"?",M[T.FULL]="^"+M[T.FULLPLAIN]+"$",H("LOOSEPLAIN"),M[T.LOOSEPLAIN]="[v=\\s]*"+M[T.MAINVERSIONLOOSE]+M[T.PRERELEASELOOSE]+"?"+M[T.BUILD]+"?",H("LOOSE"),M[T.LOOSE]="^"+M[T.LOOSEPLAIN]+"$",H("GTLT"),M[T.GTLT]="((?:<|>)?=?)",H("XRANGEIDENTIFIERLOOSE"),M[T.XRANGEIDENTIFIERLOOSE]=M[T.NUMERICIDENTIFIERLOOSE]+"|x|X|\\*",H("XRANGEIDENTIFIER"),M[T.XRANGEIDENTIFIER]=M[T.NUMERICIDENTIFIER]+"|x|X|\\*",H("XRANGEPLAIN"),M[T.XRANGEPLAIN]="[v=\\s]*("+M[T.XRANGEIDENTIFIER]+")(?:\\.("+M[T.XRANGEIDENTIFIER]+")(?:\\.("+M[T.XRANGEIDENTIFIER]+")(?:"+M[T.PRERELEASE]+")?"+M[T.BUILD]+"?)?)?",H("XRANGEPLAINLOOSE"),M[T.XRANGEPLAINLOOSE]="[v=\\s]*("+M[T.XRANGEIDENTIFIERLOOSE]+")(?:\\.("+M[T.XRANGEIDENTIFIERLOOSE]+")(?:\\.("+M[T.XRANGEIDENTIFIERLOOSE]+")(?:"+M[T.PRERELEASELOOSE]+")?"+M[T.BUILD]+"?)?)?",H("XRANGE"),M[T.XRANGE]="^"+M[T.GTLT]+"\\s*"+M[T.XRANGEPLAIN]+"$",H("XRANGELOOSE"),M[T.XRANGELOOSE]="^"+M[T.GTLT]+"\\s*"+M[T.XRANGEPLAINLOOSE]+"$",H("COERCE"),M[T.COERCE]="(^|[^\\d])(\\d{1,16})(?:\\.(\\d{1,16}))?(?:\\.(\\d{1,16}))?(?:$|[^\\d])",H("COERCERTL"),N[T.COERCERTL]=new RegExp(M[T.COERCE],"g"),H("LONETILDE"),M[T.LONETILDE]="(?:~>?)",H("TILDETRIM"),M[T.TILDETRIM]="(\\s*)"+M[T.LONETILDE]+"\\s+",N[T.TILDETRIM]=new RegExp(M[T.TILDETRIM],"g"),H("TILDE"),M[T.TILDE]="^"+M[T.LONETILDE]+M[T.XRANGEPLAIN]+"$",H("TILDELOOSE"),M[T.TILDELOOSE]="^"+M[T.LONETILDE]+M[T.XRANGEPLAINLOOSE]+"$",H("LONECARET"),M[T.LONECARET]="(?:\\^)",H("CARETTRIM"),M[T.CARETTRIM]="(\\s*)"+M[T.LONECARET]+"\\s+",N[T.CARETTRIM]=new RegExp(M[T.CARETTRIM],"g"),H("CARET"),M[T.CARET]="^"+M[T.LONECARET]+M[T.XRANGEPLAIN]+"$",H("CARETLOOSE"),M[T.CARETLOOSE]="^"+M[T.LONECARET]+M[T.XRANGEPLAINLOOSE]+"$",H("COMPARATORLOOSE"),M[T.COMPARATORLOOSE]="^"+M[T.GTLT]+"\\s*("+M[T.LOOSEPLAIN]+")$|^$",H("COMPARATOR"),M[T.COMPARATOR]="^"+M[T.GTLT]+"\\s*("+M[T.FULLPLAIN]+")$|^$",H("COMPARATORTRIM"),M[T.COMPARATORTRIM]="(\\s*)"+M[T.GTLT]+"\\s*("+M[T.LOOSEPLAIN]+"|"+M[T.XRANGEPLAIN]+")",N[T.COMPARATORTRIM]=new RegExp(M[T.COMPARATORTRIM],"g"),H("HYPHENRANGE"),M[T.HYPHENRANGE]="^\\s*("+M[T.XRANGEPLAIN]+")\\s+-\\s+("+M[T.XRANGEPLAIN]+")\\s*$",H("HYPHENRANGELOOSE"),M[T.HYPHENRANGELOOSE]="^\\s*("+M[T.XRANGEPLAINLOOSE]+")\\s+-\\s+("+M[T.XRANGEPLAINLOOSE]+")\\s*$",H("STAR"),M[T.STAR]="(<|>)?=?\\s*\\*";for(var q=0;q256||!(de.loose?N[T.LOOSE]:N[T.FULL]).test(X))return null;try{return new m(X,de)}catch(Ce){return null}}function m(X,de){if(de&&_(de)==="object"||(de={loose:!!de,includePrerelease:!1}),X instanceof m){if(X.loose===de.loose)return X;X=X.version}else if(typeof X!="string")throw new TypeError("Invalid Version: "+X);if(X.length>256)throw new TypeError("version is longer than 256 characters");if(!(this instanceof m))return new m(X,de);t("SemVer",X,de),this.options=de,this.loose=!!de.loose;var Ce=X.trim().match(de.loose?N[T.LOOSE]:N[T.FULL]);if(!Ce)throw new TypeError("Invalid Version: "+X);if(this.raw=X,this.major=+Ce[1],this.minor=+Ce[2],this.patch=+Ce[3],this.major>O||this.major<0)throw new TypeError("Invalid major version");if(this.minor>O||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>O||this.patch<0)throw new TypeError("Invalid patch version");Ce[4]?this.prerelease=Ce[4].split(".").map(function(oe){if(/^[0-9]+$/.test(oe)){var He=+oe;if(He>=0&&He=0;)typeof this.prerelease[Ce]=="number"&&(this.prerelease[Ce]++,Ce=-2);Ce===-1&&this.prerelease.push(0)}de&&(this.prerelease[0]===de?isNaN(this.prerelease[1])&&(this.prerelease=[de,0]):this.prerelease=[de,0]);break;default:throw new Error("invalid increment argument: "+X)}return this.format(),this.raw=this.version,this},o.inc=function(X,de,Ce,oe){typeof Ce=="string"&&(oe=Ce,Ce=void 0);try{return new m(X,Ce).inc(de,oe).version}catch(He){return null}},o.diff=function(X,de){if(ce(X,de))return null;var Ce=ne(X),oe=ne(de),He="";if(Ce.prerelease.length||oe.prerelease.length){He="pre";var dt="prerelease"}for(var At in Ce)if((At==="major"||At==="minor"||At==="patch")&&Ce[At]!==oe[At])return He+At;return dt},o.compareIdentifiers=De;var he=/^[0-9]+$/;function De(X,de){var Ce=he.test(X),oe=he.test(de);return Ce&&oe&&(X=+X,de=+de),X===de?0:Ce&&!oe?-1:oe&&!Ce?1:X0}function _e(X,de,Ce){return se(X,de,Ce)<0}function ce(X,de,Ce){return se(X,de,Ce)===0}function me(X,de,Ce){return se(X,de,Ce)!==0}function ie(X,de,Ce){return se(X,de,Ce)>=0}function Oe(X,de,Ce){return se(X,de,Ce)<=0}function Ue(X,de,Ce,oe){switch(de){case"===":return _(X)==="object"&&(X=X.version),_(Ce)==="object"&&(Ce=Ce.version),X===Ce;case"!==":return _(X)==="object"&&(X=X.version),_(Ce)==="object"&&(Ce=Ce.version),X!==Ce;case"":case"=":case"==":return ce(X,Ce,oe);case"!=":return me(X,Ce,oe);case">":return fe(X,Ce,oe);case">=":return ie(X,Ce,oe);case"<":return _e(X,Ce,oe);case"<=":return Oe(X,Ce,oe);default:throw new TypeError("Invalid operator: "+de)}}function je(X,de){if(de&&_(de)==="object"||(de={loose:!!de,includePrerelease:!1}),X instanceof je){if(X.loose===!!de.loose)return X;X=X.value}if(!(this instanceof je))return new je(X,de);t("comparator",X,de),this.options=de,this.loose=!!de.loose,this.parse(X),this.semver===at?this.value="":this.value=this.operator+this.semver.version,t("comp",this)}o.rcompareIdentifiers=function(X,de){return De(de,X)},o.major=function(X,de){return new m(X,de).major},o.minor=function(X,de){return new m(X,de).minor},o.patch=function(X,de){return new m(X,de).patch},o.compare=se,o.compareLoose=function(X,de){return se(X,de,!0)},o.compareBuild=function(X,de,Ce){var oe=new m(X,Ce),He=new m(de,Ce);return oe.compare(He)||oe.compareBuild(He)},o.rcompare=function(X,de,Ce){return se(de,X,Ce)},o.sort=function(X,de){return X.sort(function(Ce,oe){return o.compareBuild(Ce,oe,de)})},o.rsort=function(X,de){return X.sort(function(Ce,oe){return o.compareBuild(oe,Ce,de)})},o.gt=fe,o.lt=_e,o.eq=ce,o.neq=me,o.gte=ie,o.lte=Oe,o.cmp=Ue,o.Comparator=je;var at={};function Dt(X,de){if(de&&_(de)==="object"||(de={loose:!!de,includePrerelease:!1}),X instanceof Dt)return X.loose===!!de.loose&&X.includePrerelease===!!de.includePrerelease?X:new Dt(X.raw,de);if(X instanceof je)return new Dt(X.value,de);if(!(this instanceof Dt))return new Dt(X,de);if(this.options=de,this.loose=!!de.loose,this.includePrerelease=!!de.includePrerelease,this.raw=X,this.set=X.split(/\s*\|\|\s*/).map(function(Ce){return this.parseRange(Ce.trim())},this).filter(function(Ce){return Ce.length}),!this.set.length)throw new TypeError("Invalid SemVer Range: "+X);this.format()}function Qe(X,de){for(var Ce=!0,oe=X.slice(),He=oe.pop();Ce&&oe.length;)Ce=oe.every(function(dt){return He.intersects(dt,de)}),He=oe.pop();return Ce}function ut(X){return!X||X.toLowerCase()==="x"||X==="*"}function Ve(X,de,Ce,oe,He,dt,At,nn,an,Mn,lr,ln,Vt){return((de=ut(Ce)?"":ut(oe)?">="+Ce+".0.0":ut(He)?">="+Ce+"."+oe+".0":">="+de)+" "+(nn=ut(an)?"":ut(Mn)?"<"+(+an+1)+".0.0":ut(lr)?"<"+an+"."+(+Mn+1)+".0":ln?"<="+an+"."+Mn+"."+lr+"-"+ln:"<="+nn)).trim()}function It(X,de,Ce){for(var oe=0;oe0){var He=X[oe].semver;if(He.major===de.major&&He.minor===de.minor&&He.patch===de.patch)return!0}return!1}return!0}function Xt(X,de,Ce){try{de=new Dt(de,Ce)}catch(oe){return!1}return de.test(X)}function rt(X,de,Ce,oe){var He,dt,At,nn,an;switch(X=new m(X,oe),de=new Dt(de,oe),Ce){case">":He=fe,dt=Oe,At=_e,nn=">",an=">=";break;case"<":He=_e,dt=ie,At=fe,nn="<",an="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(Xt(X,de,oe))return!1;for(var Mn=0;Mn=0.0.0")),ln=ln||Dr,Vt=Vt||Dr,He(Dr.semver,ln.semver,oe)?ln=Dr:At(Dr.semver,Vt.semver,oe)&&(Vt=Dr)}),ln.operator===nn||ln.operator===an||(!Vt.operator||Vt.operator===nn)&&dt(X,Vt.semver)||Vt.operator===an&&At(X,Vt.semver))return!1}return!0}je.prototype.parse=function(X){var de=this.options.loose?N[T.COMPARATORLOOSE]:N[T.COMPARATOR],Ce=X.match(de);if(!Ce)throw new TypeError("Invalid comparator: "+X);this.operator=Ce[1]!==void 0?Ce[1]:"",this.operator==="="&&(this.operator=""),Ce[2]?this.semver=new m(Ce[2],this.options.loose):this.semver=at},je.prototype.toString=function(){return this.value},je.prototype.test=function(X){if(t("Comparator.test",X,this.options.loose),this.semver===at||X===at)return!0;if(typeof X=="string")try{X=new m(X,this.options)}catch(de){return!1}return Ue(X,this.operator,this.semver,this.options)},je.prototype.intersects=function(X,de){if(!(X instanceof je))throw new TypeError("a Comparator is required");var Ce;if(de&&_(de)==="object"||(de={loose:!!de,includePrerelease:!1}),this.operator==="")return this.value===""||(Ce=new Dt(X.value,de),Xt(this.value,Ce,de));if(X.operator==="")return X.value===""||(Ce=new Dt(this.value,de),Xt(X.semver,Ce,de));var oe=!(this.operator!==">="&&this.operator!==">"||X.operator!==">="&&X.operator!==">"),He=!(this.operator!=="<="&&this.operator!=="<"||X.operator!=="<="&&X.operator!=="<"),dt=this.semver.version===X.semver.version,At=!(this.operator!==">="&&this.operator!=="<="||X.operator!==">="&&X.operator!=="<="),nn=Ue(this.semver,"<",X.semver,de)&&(this.operator===">="||this.operator===">")&&(X.operator==="<="||X.operator==="<"),an=Ue(this.semver,">",X.semver,de)&&(this.operator==="<="||this.operator==="<")&&(X.operator===">="||X.operator===">");return oe||He||dt&&At||nn||an},o.Range=Dt,Dt.prototype.format=function(){return this.range=this.set.map(function(X){return X.join(" ").trim()}).join("||").trim(),this.range},Dt.prototype.toString=function(){return this.range},Dt.prototype.parseRange=function(X){var de=this.options.loose;X=X.trim();var Ce=de?N[T.HYPHENRANGELOOSE]:N[T.HYPHENRANGE];X=X.replace(Ce,Ve),t("hyphen replace",X),X=X.replace(N[T.COMPARATORTRIM],"$1$2$3"),t("comparator trim",X,N[T.COMPARATORTRIM]),X=(X=(X=X.replace(N[T.TILDETRIM],"$1~")).replace(N[T.CARETTRIM],"$1^")).split(/\s+/).join(" ");var oe=de?N[T.COMPARATORLOOSE]:N[T.COMPARATOR],He=X.split(" ").map(function(dt){return function(At,nn){return t("comp",At,nn),At=function(an,Mn){return an.trim().split(/\s+/).map(function(lr){return function(ln,Vt){t("caret",ln,Vt);var Dr=Vt.loose?N[T.CARETLOOSE]:N[T.CARET];return ln.replace(Dr,function(w,jt,Xn,vr,jr){var fr;return t("caret",ln,w,jt,Xn,vr,jr),ut(jt)?fr="":ut(Xn)?fr=">="+jt+".0.0 <"+(+jt+1)+".0.0":ut(vr)?fr=jt==="0"?">="+jt+"."+Xn+".0 <"+jt+"."+(+Xn+1)+".0":">="+jt+"."+Xn+".0 <"+(+jt+1)+".0.0":jr?(t("replaceCaret pr",jr),fr=jt==="0"?Xn==="0"?">="+jt+"."+Xn+"."+vr+"-"+jr+" <"+jt+"."+Xn+"."+(+vr+1):">="+jt+"."+Xn+"."+vr+"-"+jr+" <"+jt+"."+(+Xn+1)+".0":">="+jt+"."+Xn+"."+vr+"-"+jr+" <"+(+jt+1)+".0.0"):(t("no pr"),fr=jt==="0"?Xn==="0"?">="+jt+"."+Xn+"."+vr+" <"+jt+"."+Xn+"."+(+vr+1):">="+jt+"."+Xn+"."+vr+" <"+jt+"."+(+Xn+1)+".0":">="+jt+"."+Xn+"."+vr+" <"+(+jt+1)+".0.0"),t("caret return",fr),fr})}(lr,Mn)}).join(" ")}(At,nn),t("caret",At),At=function(an,Mn){return an.trim().split(/\s+/).map(function(lr){return function(ln,Vt){var Dr=Vt.loose?N[T.TILDELOOSE]:N[T.TILDE];return ln.replace(Dr,function(w,jt,Xn,vr,jr){var fr;return t("tilde",ln,w,jt,Xn,vr,jr),ut(jt)?fr="":ut(Xn)?fr=">="+jt+".0.0 <"+(+jt+1)+".0.0":ut(vr)?fr=">="+jt+"."+Xn+".0 <"+jt+"."+(+Xn+1)+".0":jr?(t("replaceTilde pr",jr),fr=">="+jt+"."+Xn+"."+vr+"-"+jr+" <"+jt+"."+(+Xn+1)+".0"):fr=">="+jt+"."+Xn+"."+vr+" <"+jt+"."+(+Xn+1)+".0",t("tilde return",fr),fr})}(lr,Mn)}).join(" ")}(At,nn),t("tildes",At),At=function(an,Mn){return t("replaceXRanges",an,Mn),an.split(/\s+/).map(function(lr){return function(ln,Vt){ln=ln.trim();var Dr=Vt.loose?N[T.XRANGELOOSE]:N[T.XRANGE];return ln.replace(Dr,function(w,jt,Xn,vr,jr,fr){t("xRange",ln,w,jt,Xn,vr,jr,fr);var zr=ut(Xn),Qt=zr||ut(vr),wu=Qt||ut(jr),d0=wu;return jt==="="&&d0&&(jt=""),fr=Vt.includePrerelease?"-0":"",zr?w=jt===">"||jt==="<"?"<0.0.0-0":"*":jt&&d0?(Qt&&(vr=0),jr=0,jt===">"?(jt=">=",Qt?(Xn=+Xn+1,vr=0,jr=0):(vr=+vr+1,jr=0)):jt==="<="&&(jt="<",Qt?Xn=+Xn+1:vr=+vr+1),w=jt+Xn+"."+vr+"."+jr+fr):Qt?w=">="+Xn+".0.0"+fr+" <"+(+Xn+1)+".0.0"+fr:wu&&(w=">="+Xn+"."+vr+".0"+fr+" <"+Xn+"."+(+vr+1)+".0"+fr),t("xRange return",w),w})}(lr,Mn)}).join(" ")}(At,nn),t("xrange",At),At=function(an,Mn){return t("replaceStars",an,Mn),an.trim().replace(N[T.STAR],"")}(At,nn),t("stars",At),At}(dt,this.options)},this).join(" ").split(/\s+/);return this.options.loose&&(He=He.filter(function(dt){return!!dt.match(oe)})),He=He.map(function(dt){return new je(dt,this.options)},this)},Dt.prototype.intersects=function(X,de){if(!(X instanceof Dt))throw new TypeError("a Range is required");return this.set.some(function(Ce){return Qe(Ce,de)&&X.set.some(function(oe){return Qe(oe,de)&&Ce.every(function(He){return oe.every(function(dt){return He.intersects(dt,de)})})})})},o.toComparators=function(X,de){return new Dt(X,de).set.map(function(Ce){return Ce.map(function(oe){return oe.value}).join(" ").trim().split(" ")})},Dt.prototype.test=function(X){if(!X)return!1;if(typeof X=="string")try{X=new m(X,this.options)}catch(Ce){return!1}for(var de=0;de":dt.prerelease.length===0?dt.patch++:dt.prerelease.push(0),dt.raw=dt.format();case"":case">=":Ce&&!fe(Ce,dt)||(Ce=dt);break;case"<":case"<=":break;default:throw new Error("Unexpected operation: "+He.operator)}});return Ce&&X.test(Ce)?Ce:null},o.validRange=function(X,de){try{return new Dt(X,de).range||"*"}catch(Ce){return null}},o.ltr=function(X,de,Ce){return rt(X,de,"<",Ce)},o.gtr=function(X,de,Ce){return rt(X,de,">",Ce)},o.outside=rt,o.prerelease=function(X,de){var Ce=ne(X,de);return Ce&&Ce.prerelease.length?Ce.prerelease:null},o.intersects=function(X,de,Ce){return X=new Dt(X,Ce),de=new Dt(de,Ce),X.intersects(de)},o.coerce=function(X,de){if(X instanceof m)return X;if(typeof X=="number"&&(X=String(X)),typeof X!="string")return null;var Ce=null;if((de=de||{}).rtl){for(var oe;(oe=N[T.COERCERTL].exec(X))&&(!Ce||Ce.index+Ce[0].length!==X.length);)Ce&&oe.index+oe[0].length===Ce.index+Ce[0].length||(Ce=oe),N[T.COERCERTL].lastIndex=oe.index+oe[1].length+oe[2].length;N[T.COERCERTL].lastIndex=-1}else Ce=X.match(N[T.COERCE]);return Ce===null?null:ne(Ce[2]+"."+(Ce[3]||"0")+"."+(Ce[4]||"0"),de)}}).call(this,a(5))},function(i,o){function a(_){return(a=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(_)}var c;c=function(){return this}();try{c=c||new Function("return this")()}catch(_){(typeof window=="undefined"?"undefined":a(window))==="object"&&(c=window)}i.exports=c},function(i,o){var a,c,_=i.exports={};function t(){throw new Error("setTimeout has not been defined")}function O(){throw new Error("clearTimeout has not been defined")}function N(De){if(a===setTimeout)return setTimeout(De,0);if((a===t||!a)&&setTimeout)return a=setTimeout,setTimeout(De,0);try{return a(De,0)}catch(se){try{return a.call(null,De,0)}catch(fe){return a.call(this,De,0)}}}(function(){try{a=typeof setTimeout=="function"?setTimeout:t}catch(De){a=t}try{c=typeof clearTimeout=="function"?clearTimeout:O}catch(De){c=O}})();var M,T=[],B=!1,H=-1;function q(){B&&M&&(B=!1,M.length?T=M.concat(T):H=-1,T.length&&ne())}function ne(){if(!B){var De=N(q);B=!0;for(var se=T.length;se;){for(M=T,T=[];++H1)for(var fe=1;fethis[O])return me(this,this[m].get(Qe)),!1;var rt=this[m].get(Qe).value;return this[H]&&(this[q]||this[H](Qe,rt.value)),rt.now=It,rt.maxAge=Ve,rt.value=ut,this[N]+=Xt-rt.length,rt.length=Xt,this.get(Qe),ce(this),!0}var X=new ie(Qe,ut,Xt,It,Ve);return X.length>this[O]?(this[H]&&this[H](Qe,ut),!1):(this[N]+=X.length,this[ne].unshift(X),this[m].set(Qe,this[ne].head),ce(this),!0)}},{key:"has",value:function(Qe){if(!this[m].has(Qe))return!1;var ut=this[m].get(Qe).value;return!_e(this,ut)}},{key:"get",value:function(Qe){return fe(this,Qe,!0)}},{key:"peek",value:function(Qe){return fe(this,Qe,!1)}},{key:"pop",value:function(){var Qe=this[ne].tail;return Qe?(me(this,Qe),Qe.value):null}},{key:"del",value:function(Qe){me(this,this[m].get(Qe))}},{key:"load",value:function(Qe){this.reset();for(var ut=Date.now(),Ve=Qe.length-1;Ve>=0;Ve--){var It=Qe[Ve],Xt=It.e||0;if(Xt===0)this.set(It.k,It.v);else{var rt=Xt-ut;rt>0&&this.set(It.k,It.v,rt)}}}},{key:"prune",value:function(){var Qe=this;this[m].forEach(function(ut,Ve){return fe(Qe,Ve,!1)})}},{key:"max",set:function(Qe){if(typeof Qe!="number"||Qe<0)throw new TypeError("max must be a non-negative number");this[O]=Qe||1/0,ce(this)},get:function(){return this[O]}},{key:"allowStale",set:function(Qe){this[T]=!!Qe},get:function(){return this[T]}},{key:"maxAge",set:function(Qe){if(typeof Qe!="number")throw new TypeError("maxAge must be a non-negative number");this[B]=Qe,ce(this)},get:function(){return this[B]}},{key:"lengthCalculator",set:function(Qe){var ut=this;typeof Qe!="function"&&(Qe=De),Qe!==this[M]&&(this[M]=Qe,this[N]=0,this[ne].forEach(function(Ve){Ve.length=ut[M](Ve.value,Ve.key),ut[N]+=Ve.length})),ce(this)},get:function(){return this[M]}},{key:"length",get:function(){return this[N]}},{key:"itemCount",get:function(){return this[ne].length}}])&&_(je.prototype,at),Dt&&_(je,Dt),Ue}(),fe=function(Ue,je,at){var Dt=Ue[m].get(je);if(Dt){var Qe=Dt.value;if(_e(Ue,Qe)){if(me(Ue,Dt),!Ue[T])return}else at&&(Ue[he]&&(Dt.value.now=Date.now()),Ue[ne].unshiftNode(Dt));return Qe.value}},_e=function(Ue,je){if(!je||!je.maxAge&&!Ue[B])return!1;var at=Date.now()-je.now;return je.maxAge?at>je.maxAge:Ue[B]&&at>Ue[B]},ce=function(Ue){if(Ue[N]>Ue[O])for(var je=Ue[ne].tail;Ue[N]>Ue[O]&&je!==null;){var at=je.prev;me(Ue,je),je=at}},me=function(Ue,je){if(je){var at=je.value;Ue[H]&&Ue[H](at.key,at.value),Ue[N]-=at.length,Ue[m].delete(at.key),Ue[ne].removeNode(je)}},ie=function Ue(je,at,Dt,Qe,ut){c(this,Ue),this.key=je,this.value=at,this.length=Dt,this.now=Qe,this.maxAge=ut||0},Oe=function(Ue,je,at,Dt){var Qe=at.value;_e(Ue,Qe)&&(me(Ue,at),Ue[T]||(Qe=void 0)),Qe&&je.call(Dt,Qe.value,Qe.key,Ue)};i.exports=se},function(i,o,a){(function(c){function _(t){return(_=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(O){return typeof O}:function(O){return O&&typeof Symbol=="function"&&O.constructor===Symbol&&O!==Symbol.prototype?"symbol":typeof O})(t)}i.exports=function(){if(typeof document=="undefined"||!document.addEventListener)return null;var t,O,N,M={};return M.copy=function(){var T=!1,B=null,H=!1;function q(){T=!1,B=null,H&&window.getSelection().removeAllRanges(),H=!1}return document.addEventListener("copy",function(ne){if(T){for(var m in B)ne.clipboardData.setData(m,B[m]);ne.preventDefault()}}),function(ne){return new Promise(function(m,he){T=!0,typeof ne=="string"?B={"text/plain":ne}:ne instanceof Node?B={"text/html":new XMLSerializer().serializeToString(ne)}:ne instanceof Object?B=ne:he("Invalid data type. Must be string, DOM node, or an object mapping MIME types to strings."),function De(se){try{if(document.execCommand("copy"))q(),m();else{if(se)throw q(),new Error("Unable to copy. Perhaps it's not available in your browser?");(function(){var fe=document.getSelection();if(!document.queryCommandEnabled("copy")&&fe.isCollapsed){var _e=document.createRange();_e.selectNodeContents(document.body),fe.removeAllRanges(),fe.addRange(_e),H=!0}})(),De(!0)}}catch(fe){q(),he(fe)}}(!1)})}}(),M.paste=(N=!1,document.addEventListener("paste",function(T){if(N){N=!1,T.preventDefault();var B=t;t=null,B(T.clipboardData.getData(O))}}),function(T){return new Promise(function(B,H){N=!0,t=B,O=T||"text/plain";try{document.execCommand("paste")||(N=!1,H(new Error("Unable to paste. Pasting only works in Internet Explorer at the moment.")))}catch(q){N=!1,H(new Error(q))}})}),typeof ClipboardEvent=="undefined"&&window.clipboardData!==void 0&&window.clipboardData.setData!==void 0&&(function(T){function B(ce,me){return function(){ce.apply(me,arguments)}}function H(ce){if(_(this)!="object")throw new TypeError("Promises must be constructed via new");if(typeof ce!="function")throw new TypeError("not a function");this._state=null,this._value=null,this._deferreds=[],se(ce,B(ne,this),B(m,this))}function q(ce){var me=this;return this._state===null?void this._deferreds.push(ce):void fe(function(){var ie=me._state?ce.onFulfilled:ce.onRejected;if(ie!==null){var Oe;try{Oe=ie(me._value)}catch(Ue){return void ce.reject(Ue)}ce.resolve(Oe)}else(me._state?ce.resolve:ce.reject)(me._value)})}function ne(ce){try{if(ce===this)throw new TypeError("A promise cannot be resolved with itself.");if(ce&&(_(ce)=="object"||typeof ce=="function")){var me=ce.then;if(typeof me=="function")return void se(B(me,ce),B(ne,this),B(m,this))}this._state=!0,this._value=ce,he.call(this)}catch(ie){m.call(this,ie)}}function m(ce){this._state=!1,this._value=ce,he.call(this)}function he(){for(var ce=0,me=this._deferreds.length;me>ce;ce++)q.call(this,this._deferreds[ce]);this._deferreds=null}function De(ce,me,ie,Oe){this.onFulfilled=typeof ce=="function"?ce:null,this.onRejected=typeof me=="function"?me:null,this.resolve=ie,this.reject=Oe}function se(ce,me,ie){var Oe=!1;try{ce(function(Ue){Oe||(Oe=!0,me(Ue))},function(Ue){Oe||(Oe=!0,ie(Ue))})}catch(Ue){if(Oe)return;Oe=!0,ie(Ue)}}var fe=H.immediateFn||typeof c=="function"&&c||function(ce){setTimeout(ce,1)},_e=Array.isArray||function(ce){return Object.prototype.toString.call(ce)==="[object Array]"};H.prototype.catch=function(ce){return this.then(null,ce)},H.prototype.then=function(ce,me){var ie=this;return new H(function(Oe,Ue){q.call(ie,new De(ce,me,Oe,Ue))})},H.all=function(){var ce=Array.prototype.slice.call(arguments.length===1&&_e(arguments[0])?arguments[0]:arguments);return new H(function(me,ie){function Oe(at,Dt){try{if(Dt&&(_(Dt)=="object"||typeof Dt=="function")){var Qe=Dt.then;if(typeof Qe=="function")return void Qe.call(Dt,function(ut){Oe(at,ut)},ie)}ce[at]=Dt,--Ue==0&&me(ce)}catch(ut){ie(ut)}}if(ce.length===0)return me([]);for(var Ue=ce.length,je=0;jeOe;Oe++)ce[Oe].then(me,ie)})},i.exports?i.exports=H:T.Promise||(T.Promise=H)}(this),M.copy=function(T){return new Promise(function(B,H){if(typeof T!="string"&&!("text/plain"in T))throw new Error("You must provide a text/plain type.");var q=typeof T=="string"?T:T["text/plain"];window.clipboardData.setData("Text",q)?B():H(new Error("Copying was rejected."))})},M.paste=function(){return new Promise(function(T,B){var H=window.clipboardData.getData("Text");H?T(H):B(new Error("Pasting was rejected."))})}),M}()}).call(this,a(13).setImmediate)},function(i,o,a){"use strict";i.exports=a(15)},function(i,o,a){"use strict";a.r(o),o.default=`:root { - /** - * IMPORTANT: When new theme variables are added below\u2013 also add them to SettingsContext updateThemeVariables() - */ - - /* Light theme */ - --light-color-attribute-name: #ef6632; - --light-color-attribute-name-not-editable: #23272f; - --light-color-attribute-name-inverted: rgba(255, 255, 255, 0.7); - --light-color-attribute-value: #1a1aa6; - --light-color-attribute-value-inverted: #ffffff; - --light-color-attribute-editable-value: #1a1aa6; - --light-color-background: #ffffff; - --light-color-background-hover: rgba(0, 136, 250, 0.1); - --light-color-background-inactive: #e5e5e5; - --light-color-background-invalid: #fff0f0; - --light-color-background-selected: #0088fa; - --light-color-button-background: #ffffff; - --light-color-button-background-focus: #ededed; - --light-color-button: #5f6673; - --light-color-button-disabled: #cfd1d5; - --light-color-button-active: #0088fa; - --light-color-button-focus: #23272f; - --light-color-button-hover: #23272f; - --light-color-border: #eeeeee; - --light-color-commit-did-not-render-fill: #cfd1d5; - --light-color-commit-did-not-render-fill-text: #000000; - --light-color-commit-did-not-render-pattern: #cfd1d5; - --light-color-commit-did-not-render-pattern-text: #333333; - --light-color-commit-gradient-0: #37afa9; - --light-color-commit-gradient-1: #63b19e; - --light-color-commit-gradient-2: #80b393; - --light-color-commit-gradient-3: #97b488; - --light-color-commit-gradient-4: #abb67d; - --light-color-commit-gradient-5: #beb771; - --light-color-commit-gradient-6: #cfb965; - --light-color-commit-gradient-7: #dfba57; - --light-color-commit-gradient-8: #efbb49; - --light-color-commit-gradient-9: #febc38; - --light-color-commit-gradient-text: #000000; - --light-color-component-name: #6a51b2; - --light-color-component-name-inverted: #ffffff; - --light-color-component-badge-background: rgba(0, 0, 0, 0.1); - --light-color-component-badge-background-inverted: rgba(255, 255, 255, 0.25); - --light-color-component-badge-count: #777d88; - --light-color-component-badge-count-inverted: rgba(255, 255, 255, 0.7); - --light-color-context-background: rgba(0,0,0,.9); - --light-color-context-background-hover: rgba(255, 255, 255, 0.1); - --light-color-context-background-selected: #178fb9; - --light-color-context-border: #3d424a; - --light-color-context-text: #ffffff; - --light-color-context-text-selected: #ffffff; - --light-color-dim: #777d88; - --light-color-dimmer: #cfd1d5; - --light-color-dimmest: #eff0f1; - --light-color-error-background: hsl(0, 100%, 97%); - --light-color-error-border: hsl(0, 100%, 92%); - --light-color-error-text: #ff0000; - --light-color-expand-collapse-toggle: #777d88; - --light-color-link: #0000ff; - --light-color-modal-background: rgba(255, 255, 255, 0.75); - --light-color-record-active: #fc3a4b; - --light-color-record-hover: #3578e5; - --light-color-record-inactive: #0088fa; - --light-color-scroll-thumb: #c2c2c2; - --light-color-scroll-track: #fafafa; - --light-color-search-match: yellow; - --light-color-search-match-current: #f7923b; - --light-color-selected-tree-highlight-active: rgba(0, 136, 250, 0.1); - --light-color-selected-tree-highlight-inactive: rgba(0, 0, 0, 0.05); - --light-color-shadow: rgba(0, 0, 0, 0.25); - --light-color-tab-selected-border: #0088fa; - --light-color-text: #000000; - --light-color-text-invalid: #ff0000; - --light-color-text-selected: #ffffff; - --light-color-toggle-background-invalid: #fc3a4b; - --light-color-toggle-background-on: #0088fa; - --light-color-toggle-background-off: #cfd1d5; - --light-color-toggle-text: #ffffff; - --light-color-tooltip-background: rgba(0, 0, 0, 0.9); - --light-color-tooltip-text: #ffffff; - - /* Dark theme */ - --dark-color-attribute-name: #9d87d2; - --dark-color-attribute-name-not-editable: #ededed; - --dark-color-attribute-name-inverted: #282828; - --dark-color-attribute-value: #cedae0; - --dark-color-attribute-value-inverted: #ffffff; - --dark-color-attribute-editable-value: yellow; - --dark-color-background: #282c34; - --dark-color-background-hover: rgba(255, 255, 255, 0.1); - --dark-color-background-inactive: #3d424a; - --dark-color-background-invalid: #5c0000; - --dark-color-background-selected: #178fb9; - --dark-color-button-background: #282c34; - --dark-color-button-background-focus: #3d424a; - --dark-color-button: #afb3b9; - --dark-color-button-active: #61dafb; - --dark-color-button-disabled: #4f5766; - --dark-color-button-focus: #a2e9fc; - --dark-color-button-hover: #ededed; - --dark-color-border: #3d424a; - --dark-color-commit-did-not-render-fill: #777d88; - --dark-color-commit-did-not-render-fill-text: #000000; - --dark-color-commit-did-not-render-pattern: #666c77; - --dark-color-commit-did-not-render-pattern-text: #ffffff; - --dark-color-commit-gradient-0: #37afa9; - --dark-color-commit-gradient-1: #63b19e; - --dark-color-commit-gradient-2: #80b393; - --dark-color-commit-gradient-3: #97b488; - --dark-color-commit-gradient-4: #abb67d; - --dark-color-commit-gradient-5: #beb771; - --dark-color-commit-gradient-6: #cfb965; - --dark-color-commit-gradient-7: #dfba57; - --dark-color-commit-gradient-8: #efbb49; - --dark-color-commit-gradient-9: #febc38; - --dark-color-commit-gradient-text: #000000; - --dark-color-component-name: #61dafb; - --dark-color-component-name-inverted: #282828; - --dark-color-component-badge-background: rgba(255, 255, 255, 0.25); - --dark-color-component-badge-background-inverted: rgba(0, 0, 0, 0.25); - --dark-color-component-badge-count: #8f949d; - --dark-color-component-badge-count-inverted: rgba(255, 255, 255, 0.7); - --dark-color-context-background: rgba(255,255,255,.9); - --dark-color-context-background-hover: rgba(0, 136, 250, 0.1); - --dark-color-context-background-selected: #0088fa; - --dark-color-context-border: #eeeeee; - --dark-color-context-text: #000000; - --dark-color-context-text-selected: #ffffff; - --dark-color-dim: #8f949d; - --dark-color-dimmer: #777d88; - --dark-color-dimmest: #4f5766; - --dark-color-error-background: #200; - --dark-color-error-border: #900; - --dark-color-error-text: #f55; - --dark-color-expand-collapse-toggle: #8f949d; - --dark-color-link: #61dafb; - --dark-color-modal-background: rgba(0, 0, 0, 0.75); - --dark-color-record-active: #fc3a4b; - --dark-color-record-hover: #a2e9fc; - --dark-color-record-inactive: #61dafb; - --dark-color-scroll-thumb: #afb3b9; - --dark-color-scroll-track: #313640; - --dark-color-search-match: yellow; - --dark-color-search-match-current: #f7923b; - --dark-color-selected-tree-highlight-active: rgba(23, 143, 185, 0.15); - --dark-color-selected-tree-highlight-inactive: rgba(255, 255, 255, 0.05); - --dark-color-shadow: rgba(0, 0, 0, 0.5); - --dark-color-tab-selected-border: #178fb9; - --dark-color-text: #ffffff; - --dark-color-text-invalid: #ff8080; - --dark-color-text-selected: #ffffff; - --dark-color-toggle-background-invalid: #fc3a4b; - --dark-color-toggle-background-on: #178fb9; - --dark-color-toggle-background-off: #777d88; - --dark-color-toggle-text: #ffffff; - --dark-color-tooltip-background: rgba(255, 255, 255, 0.9); - --dark-color-tooltip-text: #000000; - - /* Font smoothing */ - --light-font-smoothing: auto; - --dark-font-smoothing: antialiased; - --font-smoothing: auto; - - /* Compact density */ - --compact-font-size-monospace-small: 9px; - --compact-font-size-monospace-normal: 11px; - --compact-font-size-monospace-large: 15px; - --compact-font-size-sans-small: 10px; - --compact-font-size-sans-normal: 12px; - --compact-font-size-sans-large: 14px; - --compact-line-height-data: 18px; - --compact-root-font-size: 16px; - - /* Comfortable density */ - --comfortable-font-size-monospace-small: 10px; - --comfortable-font-size-monospace-normal: 13px; - --comfortable-font-size-monospace-large: 17px; - --comfortable-font-size-sans-small: 12px; - --comfortable-font-size-sans-normal: 14px; - --comfortable-font-size-sans-large: 16px; - --comfortable-line-height-data: 22px; - --comfortable-root-font-size: 20px; - - /* GitHub.com system fonts */ - --font-family-monospace: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, - Courier, monospace; - --font-family-sans: -apple-system, BlinkMacSystemFont, Segoe UI, Helvetica, - Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol; - - /* Constant values shared between JS and CSS */ - --interaction-commit-size: 10px; - --interaction-label-width: 200px; -} -`},function(i,o,a){"use strict";function c(M){var T=this;if(T instanceof c||(T=new c),T.tail=null,T.head=null,T.length=0,M&&typeof M.forEach=="function")M.forEach(function(q){T.push(q)});else if(arguments.length>0)for(var B=0,H=arguments.length;B1)B=T;else{if(!this.head)throw new TypeError("Reduce of empty list with no initial value");H=this.head.next,B=this.head.value}for(var q=0;H!==null;q++)B=M(B,H.value,q),H=H.next;return B},c.prototype.reduceReverse=function(M,T){var B,H=this.tail;if(arguments.length>1)B=T;else{if(!this.tail)throw new TypeError("Reduce of empty list with no initial value");H=this.tail.prev,B=this.tail.value}for(var q=this.length-1;H!==null;q--)B=M(B,H.value,q),H=H.prev;return B},c.prototype.toArray=function(){for(var M=new Array(this.length),T=0,B=this.head;B!==null;T++)M[T]=B.value,B=B.next;return M},c.prototype.toArrayReverse=function(){for(var M=new Array(this.length),T=0,B=this.tail;B!==null;T++)M[T]=B.value,B=B.prev;return M},c.prototype.slice=function(M,T){(T=T||this.length)<0&&(T+=this.length),(M=M||0)<0&&(M+=this.length);var B=new c;if(Tthis.length&&(T=this.length);for(var H=0,q=this.head;q!==null&&Hthis.length&&(T=this.length);for(var H=this.length,q=this.tail;q!==null&&H>T;H--)q=q.prev;for(;q!==null&&H>M;H--,q=q.prev)B.push(q.value);return B},c.prototype.splice=function(M,T){M>this.length&&(M=this.length-1),M<0&&(M=this.length+M);for(var B=0,H=this.head;H!==null&&B=0&&(N._idleTimeoutId=setTimeout(function(){N._onTimeout&&N._onTimeout()},M))},a(14),o.setImmediate=typeof self!="undefined"&&self.setImmediate||c!==void 0&&c.setImmediate||this&&this.setImmediate,o.clearImmediate=typeof self!="undefined"&&self.clearImmediate||c!==void 0&&c.clearImmediate||this&&this.clearImmediate}).call(this,a(4))},function(i,o,a){(function(c,_){(function(t,O){"use strict";if(!t.setImmediate){var N,M,T,B,H,q=1,ne={},m=!1,he=t.document,De=Object.getPrototypeOf&&Object.getPrototypeOf(t);De=De&&De.setTimeout?De:t,{}.toString.call(t.process)==="[object process]"?N=function(_e){_.nextTick(function(){fe(_e)})}:function(){if(t.postMessage&&!t.importScripts){var _e=!0,ce=t.onmessage;return t.onmessage=function(){_e=!1},t.postMessage("","*"),t.onmessage=ce,_e}}()?(B="setImmediate$"+Math.random()+"$",H=function(_e){_e.source===t&&typeof _e.data=="string"&&_e.data.indexOf(B)===0&&fe(+_e.data.slice(B.length))},t.addEventListener?t.addEventListener("message",H,!1):t.attachEvent("onmessage",H),N=function(_e){t.postMessage(B+_e,"*")}):t.MessageChannel?((T=new MessageChannel).port1.onmessage=function(_e){fe(_e.data)},N=function(_e){T.port2.postMessage(_e)}):he&&"onreadystatechange"in he.createElement("script")?(M=he.documentElement,N=function(_e){var ce=he.createElement("script");ce.onreadystatechange=function(){fe(_e),ce.onreadystatechange=null,M.removeChild(ce),ce=null},M.appendChild(ce)}):N=function(_e){setTimeout(fe,0,_e)},De.setImmediate=function(_e){typeof _e!="function"&&(_e=new Function(""+_e));for(var ce=new Array(arguments.length-1),me=0;mede;de++)if((X=se(rt,It,de))!==-1){De=de,It=X;break e}It=-1}}e:{if(rt=Xt,(X=q().get(Ve.primitive))!==void 0){for(de=0;deIt-rt?null:Xt.slice(rt,It-1))!==null){if(It=0,je!==null){for(;ItIt;je--)at=Qe.pop()}for(je=Xt.length-It-1;1<=je;je--)It=[],at.push({id:null,isStateEditable:!1,name:_e(Xt[je-1].functionName),value:void 0,subHooks:It}),Qe.push(at),at=It;je=Xt}It=(Xt=Ve.primitive)==="Context"||Xt==="DebugValue"?null:Dt++,at.push({id:It,isStateEditable:Xt==="Reducer"||Xt==="State",name:Xt,value:Ve.value,subHooks:[]})}return function Ce(oe,He){for(var dt=[],At=0;At-1&&(ne=ne.replace(/eval code/g,"eval").replace(/(\(eval at [^()]*)|(\),.*$)/g,""));var m=ne.replace(/^\s+/,"").replace(/\(eval code/g,"("),he=m.match(/ (\((.+):(\d+):(\d+)\)$)/),De=(m=he?m.replace(he[0],""):m).split(/\s+/).slice(1),se=this.extractLocation(he?he[1]:De.pop()),fe=De.join(" ")||void 0,_e=["eval",""].indexOf(se[0])>-1?void 0:se[0];return new M({functionName:fe,fileName:_e,lineNumber:se[1],columnNumber:se[2],source:ne})},this)},parseFFOrSafari:function(q){return q.stack.split(` -`).filter(function(ne){return!ne.match(H)},this).map(function(ne){if(ne.indexOf(" > eval")>-1&&(ne=ne.replace(/ line (\d+)(?: > eval line \d+)* > eval:\d+:\d+/g,":$1")),ne.indexOf("@")===-1&&ne.indexOf(":")===-1)return new M({functionName:ne});var m=/((.*".+"[^@]*)?[^@]*)(?:@)/,he=ne.match(m),De=he&&he[1]?he[1]:void 0,se=this.extractLocation(ne.replace(m,""));return new M({functionName:De,fileName:se[0],lineNumber:se[1],columnNumber:se[2],source:ne})},this)},parseOpera:function(q){return!q.stacktrace||q.message.indexOf(` -`)>-1&&q.message.split(` -`).length>q.stacktrace.split(` -`).length?this.parseOpera9(q):q.stack?this.parseOpera11(q):this.parseOpera10(q)},parseOpera9:function(q){for(var ne=/Line (\d+).*script (?:in )?(\S+)/i,m=q.message.split(` -`),he=[],De=2,se=m.length;De/,"$2").replace(/\([^)]*\)/g,"")||void 0;se.match(/\(([^)]*)\)/)&&(m=se.replace(/^[^(]+\(([^)]*)\)$/,"$1"));var _e=m===void 0||m==="[arguments not available]"?void 0:m.split(",");return new M({functionName:fe,args:_e,fileName:De[0],lineNumber:De[1],columnNumber:De[2],source:ne})},this)}}})=="function"?c.apply(o,_):c)===void 0||(i.exports=t)})()},function(i,o,a){var c,_,t;(function(O,N){"use strict";_=[],(t=typeof(c=function(){function M(fe){return fe.charAt(0).toUpperCase()+fe.substring(1)}function T(fe){return function(){return this[fe]}}var B=["isConstructor","isEval","isNative","isToplevel"],H=["columnNumber","lineNumber"],q=["fileName","functionName","source"],ne=B.concat(H,q,["args"]);function m(fe){if(fe)for(var _e=0;_e1?Ae-1:0),ke=1;ke=0&&Ae.splice(Z,1)}}}])&&c(z.prototype,G),$&&c(z,$),U}(),t=a(2),O=a.n(t);try{var N=a(9).default,M=function(U){var z=new RegExp("".concat(U,": ([0-9]+)")),G=N.match(z);return parseInt(G[1],10)};M("comfortable-line-height-data"),M("compact-line-height-data")}catch(U){}function T(U){try{return sessionStorage.getItem(U)}catch(z){return null}}function B(U){try{sessionStorage.removeItem(U)}catch(z){}}function H(U,z){try{return sessionStorage.setItem(U,z)}catch(G){}}var q=function(U,z){return U===z},ne=a(1),m=a.n(ne);function he(U){return U.ownerDocument?U.ownerDocument.defaultView:null}function De(U){var z=he(U);return z?z.frameElement:null}function se(U){var z=ce(U);return fe([U.getBoundingClientRect(),{top:z.borderTop,left:z.borderLeft,bottom:z.borderBottom,right:z.borderRight,width:0,height:0}])}function fe(U){return U.reduce(function(z,G){return z==null?G:{top:z.top+G.top,left:z.left+G.left,width:z.width,height:z.height,bottom:z.bottom+G.bottom,right:z.right+G.right}})}function _e(U,z){var G=De(U);if(G&&G!==z){for(var $=[U.getBoundingClientRect()],Te=G,ye=!1;Te;){var Ae=se(Te);if($.push(Ae),Te=De(Te),ye)break;Te&&he(Te)===z&&(ye=!0)}return fe($)}return U.getBoundingClientRect()}function ce(U){var z=window.getComputedStyle(U);return{borderLeft:parseInt(z.borderLeftWidth,10),borderRight:parseInt(z.borderRightWidth,10),borderTop:parseInt(z.borderTopWidth,10),borderBottom:parseInt(z.borderBottomWidth,10),marginLeft:parseInt(z.marginLeft,10),marginRight:parseInt(z.marginRight,10),marginTop:parseInt(z.marginTop,10),marginBottom:parseInt(z.marginBottom,10),paddingLeft:parseInt(z.paddingLeft,10),paddingRight:parseInt(z.paddingRight,10),paddingTop:parseInt(z.paddingTop,10),paddingBottom:parseInt(z.paddingBottom,10)}}function me(U,z){var G;if(typeof Symbol=="undefined"||U[Symbol.iterator]==null){if(Array.isArray(U)||(G=function(ke,Je){if(!!ke){if(typeof ke=="string")return ie(ke,Je);var vt=Object.prototype.toString.call(ke).slice(8,-1);if(vt==="Object"&&ke.constructor&&(vt=ke.constructor.name),vt==="Map"||vt==="Set")return Array.from(ke);if(vt==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(vt))return ie(ke,Je)}}(U))||z&&U&&typeof U.length=="number"){G&&(U=G);var $=0,Te=function(){};return{s:Te,n:function(){return $>=U.length?{done:!0}:{done:!1,value:U[$++]}},e:function(ke){throw ke},f:Te}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var ye,Ae=!0,Z=!1;return{s:function(){G=U[Symbol.iterator]()},n:function(){var ke=G.next();return Ae=ke.done,ke},e:function(ke){Z=!0,ye=ke},f:function(){try{Ae||G.return==null||G.return()}finally{if(Z)throw ye}}}}function ie(U,z){(z==null||z>U.length)&&(z=U.length);for(var G=0,$=new Array(z);GAe.left+Ae.width&&(ue=Ae.left+Ae.width-vt-5),{style:{top:ke+="px",left:ue+="px"}}}(z,G,{width:$.width,height:$.height});m()(this.tip.style,Te.style)}}]),U}(),Qe=function(){function U(){Oe(this,U);var z=window.__REACT_DEVTOOLS_TARGET_WINDOW__||window;this.window=z;var G=window.__REACT_DEVTOOLS_TARGET_WINDOW__||window;this.tipBoundsWindow=G;var $=z.document;this.container=$.createElement("div"),this.container.style.zIndex="10000000",this.tip=new Dt($,this.container),this.rects=[],$.body.appendChild(this.container)}return je(U,[{key:"remove",value:function(){this.tip.remove(),this.rects.forEach(function(z){z.remove()}),this.rects.length=0,this.container.parentNode&&this.container.parentNode.removeChild(this.container)}},{key:"inspect",value:function(z,G){for(var $=this,Te=z.filter(function(Ct){return Ct.nodeType===Node.ELEMENT_NODE});this.rects.length>Te.length;)this.rects.pop().remove();if(Te.length!==0){for(;this.rects.length1&&arguments[1]!==void 0?arguments[1]:q,nt=void 0,Ct=[],Mt=void 0,Pt=!1,sn=function(Nt,Dn){return qe(Nt,Ct[Dn])},rn=function(){for(var Nt=arguments.length,Dn=Array(Nt),dr=0;dr5&&arguments[5]!==void 0?arguments[5]:0,Z=Mo(U);switch(Z){case"html_element":return z.push($),{inspectable:!1,preview_short:Li(U,!1),preview_long:Li(U,!0),name:U.tagName,type:Z};case"function":return z.push($),{inspectable:!1,preview_short:Li(U,!1),preview_long:Li(U,!0),name:typeof U.name!="function"&&U.name?U.name:"function",type:Z};case"string":return U.length<=500?U:U.slice(0,500)+"...";case"bigint":case"symbol":return z.push($),{inspectable:!1,preview_short:Li(U,!1),preview_long:Li(U,!0),name:U.toString(),type:Z};case"react_element":return z.push($),{inspectable:!1,preview_short:Li(U,!1),preview_long:Li(U,!0),name:F0(U)||"Unknown",type:Z};case"array_buffer":case"data_view":return z.push($),{inspectable:!1,preview_short:Li(U,!1),preview_long:Li(U,!0),name:Z==="data_view"?"DataView":"ArrayBuffer",size:U.byteLength,type:Z};case"array":return ye=Te($),Ae>=2&&!ye?d0(Z,!0,U,z,$):U.map(function(vt,ue){return Ro(vt,z,G,$.concat([ue]),Te,ye?1:Ae+1)});case"html_all_collection":case"typed_array":case"iterator":if(ye=Te($),Ae>=2&&!ye)return d0(Z,!0,U,z,$);var ke={unserializable:!0,type:Z,readonly:!0,size:Z==="typed_array"?U.length:void 0,preview_short:Li(U,!1),preview_long:Li(U,!0),name:U.constructor&&U.constructor.name!=="Object"?U.constructor.name:""};return Qt(U[Symbol.iterator])&&Array.from(U).forEach(function(vt,ue){return ke[ue]=Ro(vt,z,G,$.concat([ue]),Te,ye?1:Ae+1)}),G.push($),ke;case"opaque_iterator":return z.push($),{inspectable:!1,preview_short:Li(U,!1),preview_long:Li(U,!0),name:U[Symbol.toStringTag],type:Z};case"date":case"regexp":return z.push($),{inspectable:!1,preview_short:Li(U,!1),preview_long:Li(U,!0),name:U.toString(),type:Z};case"object":if(ye=Te($),Ae>=2&&!ye)return d0(Z,!0,U,z,$);var Je={};return su(U).forEach(function(vt){var ue=vt.toString();Je[ue]=Ro(U[vt],z,G,$.concat([ue]),Te,ye?1:Ae+1)}),Je;case"infinity":case"nan":case"undefined":return z.push($),{type:Z};default:return U}}function Jo(U){return(Jo=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(z){return typeof z}:function(z){return z&&typeof Symbol=="function"&&z.constructor===Symbol&&z!==Symbol.prototype?"symbol":typeof z})(U)}function Ps(U){return function(z){if(Array.isArray(z))return Zo(z)}(U)||function(z){if(typeof Symbol!="undefined"&&Symbol.iterator in Object(z))return Array.from(z)}(U)||function(z,G){if(!!z){if(typeof z=="string")return Zo(z,G);var $=Object.prototype.toString.call(z).slice(8,-1);if($==="Object"&&z.constructor&&($=z.constructor.name),$==="Map"||$==="Set")return Array.from(z);if($==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test($))return Zo(z,G)}}(U)||function(){throw new TypeError(`Invalid attempt to spread non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}()}function Zo(U,z){(z==null||z>U.length)&&(z=U.length);for(var G=0,$=new Array(z);Gz.toString()?1:z.toString()>U.toString()?-1:0}function su(U){for(var z=[],G=U,$=function(){var Te=[].concat(Ps(Object.keys(G)),Ps(Object.getOwnPropertySymbols(G))),ye=Object.getOwnPropertyDescriptors(G);Te.forEach(function(Ae){ye[Ae].enumerable&&z.push(Ae)}),G=Object.getPrototypeOf(G)};G!=null;)$();return z}function mi(U){var z=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"Anonymous",G=$o.get(U);if(G!=null)return G;var $=z;return typeof U.displayName=="string"?$=U.displayName:typeof U.name=="string"&&U.name!==""&&($=U.name),$o.set(U,$),$}var wr=0;function el(){return++wr}function Y0(U){var z=qt.get(U);if(z!==void 0)return z;for(var G=new Array(U.length),$=0;$1&&arguments[1]!==void 0?arguments[1]:50;return U.length>z?U.substr(0,z)+"\u2026":U}function Li(U,z){if(U!=null&&hasOwnProperty.call(U,wu.type))return z?U[wu.preview_long]:U[wu.preview_short];switch(Mo(U)){case"html_element":return"<".concat(au(U.tagName.toLowerCase())," />");case"function":return au("\u0192 ".concat(typeof U.name=="function"?"":U.name,"() {}"));case"string":return'"'.concat(U,'"');case"bigint":return au(U.toString()+"n");case"regexp":case"symbol":return au(U.toString());case"react_element":return"<".concat(au(F0(U)||"Unknown")," />");case"array_buffer":return"ArrayBuffer(".concat(U.byteLength,")");case"data_view":return"DataView(".concat(U.buffer.byteLength,")");case"array":if(z){for(var G="",$=0;$0&&(G+=", "),!((G+=Li(U[$],!1)).length>50));$++);return"[".concat(au(G),"]")}var Te=hasOwnProperty.call(U,wu.size)?U[wu.size]:U.length;return"Array(".concat(Te,")");case"typed_array":var ye="".concat(U.constructor.name,"(").concat(U.length,")");if(z){for(var Ae="",Z=0;Z0&&(Ae+=", "),!((Ae+=U[Z]).length>50));Z++);return"".concat(ye," [").concat(au(Ae),"]")}return ye;case"iterator":var ke=U.constructor.name;if(z){for(var Je=Array.from(U),vt="",ue=0;ue0&&(vt+=", "),Array.isArray(qe)){var nt=Li(qe[0],!0),Ct=Li(qe[1],!1);vt+="".concat(nt," => ").concat(Ct)}else vt+=Li(qe,!1);if(vt.length>50)break}return"".concat(ke,"(").concat(U.size,") {").concat(au(vt),"}")}return"".concat(ke,"(").concat(U.size,")");case"opaque_iterator":return U[Symbol.toStringTag];case"date":return U.toString();case"object":if(z){for(var Mt=su(U).sort(Ai),Pt="",sn=0;sn0&&(Pt+=", "),(Pt+="".concat(rn.toString(),": ").concat(Li(U[rn],!1))).length>50)break}return"{".concat(au(Pt),"}")}return"{\u2026}";case"boolean":case"number":case"infinity":case"nan":case"null":case"undefined":return U;default:try{return au(""+U)}catch(Nt){return"unserializable"}}}var Is=a(7);function Xl(U){return(Xl=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(z){return typeof z}:function(z){return z&&typeof Symbol=="function"&&z.constructor===Symbol&&z!==Symbol.prototype?"symbol":typeof z})(U)}function P0(U,z){var G=Object.keys(U);if(Object.getOwnPropertySymbols){var $=Object.getOwnPropertySymbols(U);z&&($=$.filter(function(Te){return Object.getOwnPropertyDescriptor(U,Te).enumerable})),G.push.apply(G,$)}return G}function p0(U){for(var z=1;z2&&arguments[2]!==void 0?arguments[2]:[];if(U!==null){var $=[],Te=[],ye=Ro(U,$,Te,G,z);return{data:ye,cleaned:$,unserializable:Te}}return null}function X0(U){var z,G,$=(z=U,G=new Set,JSON.stringify(z,function(Ae,Z){if(Xl(Z)==="object"&&Z!==null){if(G.has(Z))return;G.add(Z)}return typeof Z=="bigint"?Z.toString()+"n":Z})),Te=$===void 0?"undefined":$,ye=window.__REACT_DEVTOOLS_GLOBAL_HOOK__.clipboardCopyText;typeof ye=="function"?ye(Te).catch(function(Ae){}):Object(Is.copy)(Te)}function gi(U,z){var G=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0,$=z[G],Te=Array.isArray(U)?U.slice():p0({},U);return G+1===z.length?Array.isArray(Te)?Te.splice($,1):delete Te[$]:Te[$]=gi(U[$],z,G+1),Te}function en(U,z,G){var $=arguments.length>3&&arguments[3]!==void 0?arguments[3]:0,Te=z[$],ye=Array.isArray(U)?U.slice():p0({},U);if($+1===z.length){var Ae=G[$];ye[Ae]=ye[Te],Array.isArray(ye)?ye.splice(Te,1):delete ye[Te]}else ye[Te]=en(U[Te],z,G,$+1);return ye}function bn(U,z,G){var $=arguments.length>3&&arguments[3]!==void 0?arguments[3]:0;if($>=z.length)return G;var Te=z[$],ye=Array.isArray(U)?U.slice():p0({},U);return ye[Te]=bn(U[Te],z,G,$+1),ye}var Oi=a(8);function yi(U,z){var G=Object.keys(U);if(Object.getOwnPropertySymbols){var $=Object.getOwnPropertySymbols(U);z&&($=$.filter(function(Te){return Object.getOwnPropertyDescriptor(U,Te).enumerable})),G.push.apply(G,$)}return G}function Wt(U){for(var z=1;z=U.length?{done:!0}:{done:!1,value:U[$++]}},e:function(ke){throw ke},f:Te}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var ye,Ae=!0,Z=!1;return{s:function(){G=U[Symbol.iterator]()},n:function(){var ke=G.next();return Ae=ke.done,ke},e:function(ke){Z=!0,ye=ke},f:function(){try{Ae||G.return==null||G.return()}finally{if(Z)throw ye}}}}function Ql(U,z){if(U){if(typeof U=="string")return ko(U,z);var G=Object.prototype.toString.call(U).slice(8,-1);return G==="Object"&&U.constructor&&(G=U.constructor.name),G==="Map"||G==="Set"?Array.from(U):G==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(G)?ko(U,z):void 0}}function ko(U,z){(z==null||z>U.length)&&(z=U.length);for(var G=0,$=new Array(z);G0){var mt=ye(ae);if(mt!=null){var Jt,On=Yi(Io);try{for(On.s();!(Jt=On.n()).done;)if(Jt.value.test(mt))return!0}catch(ir){On.e(ir)}finally{On.f()}}}if(re!=null&&ys.size>0){var Sn,_n=re.fileName,Tn=Yi(ys);try{for(Tn.s();!(Sn=Tn.n()).done;)if(Sn.value.test(_n))return!0}catch(ir){Tn.e(ir)}finally{Tn.f()}}return!1}function Tu(ae){var re=ae.type;switch(ae.tag){case Ct:case Cr:return 1;case nt:case Rn:return 5;case rn:return 6;case Nt:return 11;case dr:return 7;case Dn:case er:case sn:return 9;case Lr:case Nr:return 8;case it:return 12;case Et:return 13;default:switch(Ae(re)){case 60111:case"Symbol(react.concurrent_mode)":case"Symbol(react.async_mode)":return 9;case 60109:case"Symbol(react.provider)":return 2;case 60110:case"Symbol(react.context)":return 2;case 60108:case"Symbol(react.strict_mode)":return 9;case 60114:case"Symbol(react.profiler)":return 10;default:return 9}}}function Ei(ae){if(Uo.has(ae))return ae;var re=ae.alternate;return re!=null&&Uo.has(re)?re:(Uo.add(ae),ae)}window.__REACT_DEVTOOLS_COMPONENT_FILTERS__!=null?_s(window.__REACT_DEVTOOLS_COMPONENT_FILTERS__):_s([{type:1,value:7,isEnabled:!0}]);var C0=new Map,$0=new Map,Uo=new Set,sa=new Map,es=new Map,tu=-1;function ei(ae){if(!C0.has(ae)){var re=el();C0.set(ae,re),$0.set(re,ae)}return C0.get(ae)}function ho(ae){switch(Tu(ae)){case 1:if(B0!==null){var re=ei(Ei(ae)),Fe=Ci(ae);Fe!==null&&B0.set(re,Fe)}}}var Bi={};function Ci(ae){switch(Tu(ae)){case 1:var re=ae.stateNode,Fe=Bi,Re=Bi;return re!=null&&(re.constructor&&re.constructor.contextType!=null?Re=re.context:(Fe=re.context)&&Object.keys(Fe).length===0&&(Fe=Bi)),[Fe,Re];default:return null}}function gf(ae){switch(Tu(ae)){case 1:if(B0!==null){var re=ei(Ei(ae)),Fe=B0.has(re)?B0.get(re):null,Re=Ci(ae);if(Fe==null||Re==null)return null;var st=Q0(Fe,2),mt=st[0],Jt=st[1],On=Q0(Re,2),Sn=On[0],_n=On[1];if(Sn!==Bi)return eo(mt,Sn);if(_n!==Bi)return Jt!==_n}}return null}function yf(ae,re){if(ae==null||re==null)return!1;if(re.hasOwnProperty("baseState")&&re.hasOwnProperty("memoizedState")&&re.hasOwnProperty("next")&&re.hasOwnProperty("queue"))for(;re!==null;){if(re.memoizedState!==ae.memoizedState)return!0;re=re.next,ae=ae.next}return!1}function eo(ae,re){if(ae==null||re==null||re.hasOwnProperty("baseState")&&re.hasOwnProperty("memoizedState")&&re.hasOwnProperty("next")&&re.hasOwnProperty("queue"))return null;var Fe,Re=[],st=Yi(new Set([].concat(eu(Object.keys(ae)),eu(Object.keys(re)))));try{for(st.s();!(Fe=st.n()).done;){var mt=Fe.value;ae[mt]!==re[mt]&&Re.push(mt)}}catch(Jt){st.e(Jt)}finally{st.f()}return Re}function to(ae,re){switch(re.tag){case Ct:case nt:case Mt:case Lr:case Nr:return(ao(re)&ue)===ue;default:return ae.memoizedProps!==re.memoizedProps||ae.memoizedState!==re.memoizedState||ae.ref!==re.ref}}var xe=[],tt=[],Ye=[],Yt=[],Kt=new Map,pr=0,Wr=null;function xn(ae){xe.push(ae)}function gu(ae){if(xe.length!==0||tt.length!==0||Ye.length!==0||Wr!==null||Pu){var re=tt.length+Ye.length+(Wr===null?0:1),Fe=new Array(3+pr+(re>0?2+re:0)+xe.length),Re=0;if(Fe[Re++]=z,Fe[Re++]=tu,Fe[Re++]=pr,Kt.forEach(function(On,Sn){Fe[Re++]=Sn.length;for(var _n=Y0(Sn),Tn=0;Tn<_n.length;Tn++)Fe[Re+Tn]=_n[Tn];Re+=Sn.length}),re>0){Fe[Re++]=2,Fe[Re++]=re;for(var st=tt.length-1;st>=0;st--)Fe[Re++]=tt[st];for(var mt=0;mt0?ae.forEach(function(re){U.emit("operations",re)}):(Ar!==null&&(cu=!0),U.getFiberRoots(z).forEach(function(re){e0(tu=ei(Ei(re.current)),re.current),Pu&&re.memoizedInteractions!=null&&(il={changeDescriptions:ts?new Map:null,durations:[],commitTime:Jl()-Zu,interactions:Array.from(re.memoizedInteractions).map(function(Fe){return Wt(Wt({},Fe),{},{timestamp:Fe.timestamp-Zu})}),maxActualDuration:0,priorityLevel:null}),Jr(re.current,null,!1,!1),gu(),tu=-1}))},getBestMatchForTrackedPath:function(){if(Ar===null||no===null)return null;for(var ae=no;ae!==null&&Qu(ae);)ae=ae.return;return ae===null?null:{id:ei(Ei(ae)),isFullMatch:nu===Ar.length-1}},getDisplayNameForFiberID:function(ae){var re=$0.get(ae);return re!=null?ye(re):null},getFiberIDForNative:function(ae){var re=arguments.length>1&&arguments[1]!==void 0&&arguments[1],Fe=G.findFiberByHostInstance(ae);if(Fe!=null){if(re)for(;Fe!==null&&Qu(Fe);)Fe=Fe.return;return ei(Ei(Fe))}return null},getInstanceAndStyle:function(ae){var re=null,Fe=null,Re=Vu(ae);return Re!==null&&(re=Re.stateNode,Re.memoizedProps!==null&&(Fe=Re.memoizedProps.style)),{instance:re,style:Fe}},getOwnersList:function(ae){var re=Vu(ae);if(re==null)return null;var Fe=re._debugOwner,Re=[{displayName:ye(re)||"Anonymous",id:ae,type:Tu(re)}];if(Fe)for(var st=Fe;st!==null;)Re.unshift({displayName:ye(st)||"Anonymous",id:ei(Ei(st)),type:Tu(st)}),st=st._debugOwner||null;return Re},getPathForElement:function(ae){var re=$0.get(ae);if(re==null)return null;for(var Fe=[];re!==null;)Fe.push(E0(re)),re=re.return;return Fe.reverse(),Fe},getProfilingData:function(){var ae=[];if(Es===null)throw Error("getProfilingData() called before any profiling data was recorded");return Es.forEach(function(re,Fe){var Re=[],st=[],mt=new Map,Jt=new Map,On=xl!==null&&xl.get(Fe)||"Unknown";O0!=null&&O0.forEach(function(Sn,_n){vo!=null&&vo.get(_n)===Fe&&st.push([_n,Sn])}),re.forEach(function(Sn,_n){var Tn=Sn.changeDescriptions,ir=Sn.durations,Bt=Sn.interactions,Pi=Sn.maxActualDuration,Rr=Sn.priorityLevel,mr=Sn.commitTime,Y=[];Bt.forEach(function(Di){mt.has(Di.id)||mt.set(Di.id,Di),Y.push(Di.id);var ru=Jt.get(Di.id);ru!=null?ru.push(_n):Jt.set(Di.id,[_n])});for(var ri=[],ii=[],Vr=0;Vr1?Kn.set(Tn,ir-1):Kn.delete(Tn),ni.delete(Sn)}(tu),ti(Fe,!1))}else e0(tu,Fe),Jr(Fe,null,!1,!1);if(Pu&&st){var On=Es.get(tu);On!=null?On.push(il):Es.set(tu,[il])}gu(),bo&&U.emit("traceUpdates",Bo),tu=-1},handleCommitFiberUnmount:function(ae){ti(ae,!1)},inspectElement:function(ae,re){if(zi(ae)){if(re!=null){R0(re);var Fe=null;return re[0]==="hooks"&&(Fe="hooks"),{id:ae,type:"hydrated-path",path:re,value:Ri(Uu(Xi,re),Hi(null,Fe),re)}}return{id:ae,type:"no-change"}}if(qs=!1,Xi!==null&&Xi.id===ae||(A0={}),(Xi=aa(ae))===null)return{id:ae,type:"not-found"};re!=null&&R0(re),function(st){var mt=st.hooks,Jt=st.id,On=st.props,Sn=$0.get(Jt);if(Sn!=null){var _n=Sn.elementType,Tn=Sn.stateNode,ir=Sn.tag,Bt=Sn.type;switch(ir){case Ct:case Cr:case Rn:$.$r=Tn;break;case nt:$.$r={hooks:mt,props:On,type:Bt};break;case rn:$.$r={props:On,type:Bt.render};break;case Lr:case Nr:$.$r={props:On,type:_n!=null&&_n.type!=null?_n.type:Bt};break;default:$.$r=null}}else console.warn('Could not find Fiber with id "'.concat(Jt,'"'))}(Xi);var Re=Wt({},Xi);return Re.context=Ri(Re.context,Hi("context",null)),Re.hooks=Ri(Re.hooks,Hi("hooks","hooks")),Re.props=Ri(Re.props,Hi("props",null)),Re.state=Ri(Re.state,Hi("state",null)),{id:ae,type:"full-data",value:Re}},logElementToConsole:function(ae){var re=zi(ae)?Xi:aa(ae);if(re!==null){var Fe=typeof console.groupCollapsed=="function";Fe&&console.groupCollapsed("[Click to expand] %c<".concat(re.displayName||"Component"," />"),"color: var(--dom-tag-name-color); font-weight: normal;"),re.props!==null&&console.log("Props:",re.props),re.state!==null&&console.log("State:",re.state),re.hooks!==null&&console.log("Hooks:",re.hooks);var Re=Cl(ae);Re!==null&&console.log("Nodes:",Re),re.source!==null&&console.log("Location:",re.source),(window.chrome||/firefox/i.test(navigator.userAgent))&&console.log("Right-click any value to save it as a global variable for further inspection."),Fe&&console.groupEnd()}else console.warn('Could not find Fiber with id "'.concat(ae,'"'))},prepareViewAttributeSource:function(ae,re){zi(ae)&&(window.$attribute=Uu(Xi,re))},prepareViewElementSource:function(ae){var re=$0.get(ae);if(re!=null){var Fe=re.elementType,Re=re.tag,st=re.type;switch(Re){case Ct:case Cr:case Rn:case nt:$.$type=st;break;case rn:$.$type=st.render;break;case Lr:case Nr:$.$type=Fe!=null&&Fe.type!=null?Fe.type:st;break;default:$.$type=null}}else console.warn('Could not find Fiber with id "'.concat(ae,'"'))},overrideSuspense:function(ae,re){if(typeof Po!="function"||typeof rl!="function")throw new Error("Expected overrideSuspense() to not get called for earlier React versions.");re?($u.add(ae),$u.size===1&&Po(Ds)):($u.delete(ae),$u.size===0&&Po(_f));var Fe=$0.get(ae);Fe!=null&&rl(Fe)},overrideValueAtPath:function(ae,re,Fe,Re,st){var mt=Vu(re);if(mt!==null){var Jt=mt.stateNode;switch(ae){case"context":switch(Re=Re.slice(1),mt.tag){case Ct:Re.length===0?Jt.context=st:Oo(Jt.context,Re,st),Jt.forceUpdate()}break;case"hooks":typeof fu=="function"&&fu(mt,Fe,Re,st);break;case"props":switch(mt.tag){case Ct:mt.pendingProps=bn(Jt.props,Re,st),Jt.forceUpdate();break;default:typeof Z0=="function"&&Z0(mt,Re,st)}break;case"state":switch(mt.tag){case Ct:Oo(Jt.state,Re,st),Jt.forceUpdate()}}}},renamePath:function(ae,re,Fe,Re,st){var mt=Vu(re);if(mt!==null){var Jt=mt.stateNode;switch(ae){case"context":switch(Re=Re.slice(1),st=st.slice(1),mt.tag){case Ct:Re.length===0||Xr(Jt.context,Re,st),Jt.forceUpdate()}break;case"hooks":typeof T0=="function"&&T0(mt,Fe,Re,st);break;case"props":Jt===null?typeof _i=="function"&&_i(mt,Re,st):(mt.pendingProps=en(Jt.props,Re,st),Jt.forceUpdate());break;case"state":Xr(Jt.state,Re,st),Jt.forceUpdate()}}},renderer:G,setTraceUpdatesEnabled:function(ae){bo=ae},setTrackedPath:Fi,startProfiling:fa,stopProfiling:function(){Pu=!1,ts=!1},storeAsGlobal:function(ae,re,Fe){if(zi(ae)){var Re=Uu(Xi,re),st="$reactTemp".concat(Fe);window[st]=Re,console.log(st),console.log(Re)}},updateComponentFilters:function(ae){if(Pu)throw Error("Cannot modify filter preferences while profiling");U.getFiberRoots(z).forEach(function(re){tu=ei(Ei(re.current)),Wu(re.current),ti(re.current,!1),tu=-1}),_s(ae),Kn.clear(),U.getFiberRoots(z).forEach(function(re){e0(tu=ei(Ei(re.current)),re.current),Jr(re.current,null,!1,!1),gu(re),tu=-1})}}}var $n;function tl(U){return(tl=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(z){return typeof z}:function(z){return z&&typeof Symbol=="function"&&z.constructor===Symbol&&z!==Symbol.prototype?"symbol":typeof z})(U)}function fo(U,z,G){if($n===void 0)try{throw Error()}catch(Te){var $=Te.stack.trim().match(/\n( *(at )?)/);$n=$&&$[1]||""}return` -`+$n+U}var I0=!1;function Sl(U,z,G){if(!U||I0)return"";var $,Te=Error.prepareStackTrace;Error.prepareStackTrace=void 0,I0=!0;var ye=G.current;G.current=null;try{if(z){var Ae=function(){throw Error()};if(Object.defineProperty(Ae.prototype,"props",{set:function(){throw Error()}}),(typeof Reflect=="undefined"?"undefined":tl(Reflect))==="object"&&Reflect.construct){try{Reflect.construct(Ae,[])}catch(qe){$=qe}Reflect.construct(U,[],Ae)}else{try{Ae.call()}catch(qe){$=qe}U.call(Ae.prototype)}}else{try{throw Error()}catch(qe){$=qe}U()}}catch(qe){if(qe&&$&&typeof qe.stack=="string"){for(var Z=qe.stack.split(` -`),ke=$.stack.split(` -`),Je=Z.length-1,vt=ke.length-1;Je>=1&&vt>=0&&Z[Je]!==ke[vt];)vt--;for(;Je>=1&&vt>=0;Je--,vt--)if(Z[Je]!==ke[vt]){if(Je!==1||vt!==1)do if(Je--,--vt<0||Z[Je]!==ke[vt])return` -`+Z[Je].replace(" at new "," at ");while(Je>=1&&vt>=0);break}}}finally{I0=!1,Error.prepareStackTrace=Te,G.current=ye}var ue=U?U.displayName||U.name:"";return ue?fo(ue):""}function No(U,z,G,$){return Sl(U,!1,$)}function wt(U,z,G){var $=U.HostComponent,Te=U.LazyComponent,ye=U.SuspenseComponent,Ae=U.SuspenseListComponent,Z=U.FunctionComponent,ke=U.IndeterminateComponent,Je=U.SimpleMemoComponent,vt=U.ForwardRef,ue=U.Block,qe=U.ClassComponent;switch(z.tag){case $:return fo(z.type);case Te:return fo("Lazy");case ye:return fo("Suspense");case Ae:return fo("SuspenseList");case Z:case ke:case Je:return No(z.type,0,0,G);case vt:return No(z.type.render,0,0,G);case ue:return No(z.type._render,0,0,G);case qe:return function(nt,Ct,Mt,Pt){return Sl(nt,!0,Pt)}(z.type,0,0,G);default:return""}}function bt(U,z,G){try{var $="",Te=z;do $+=wt(U,Te,G),Te=Te.return;while(Te);return $}catch(ye){return` -Error generating stack: `+ye.message+` -`+ye.stack}}function Hn(U,z){var G;if(typeof Symbol=="undefined"||U[Symbol.iterator]==null){if(Array.isArray(U)||(G=function(ke,Je){if(!!ke){if(typeof ke=="string")return qr(ke,Je);var vt=Object.prototype.toString.call(ke).slice(8,-1);if(vt==="Object"&&ke.constructor&&(vt=ke.constructor.name),vt==="Map"||vt==="Set")return Array.from(ke);if(vt==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(vt))return qr(ke,Je)}}(U))||z&&U&&typeof U.length=="number"){G&&(U=G);var $=0,Te=function(){};return{s:Te,n:function(){return $>=U.length?{done:!0}:{done:!1,value:U[$++]}},e:function(ke){throw ke},f:Te}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var ye,Ae=!0,Z=!1;return{s:function(){G=U[Symbol.iterator]()},n:function(){var ke=G.next();return Ae=ke.done,ke},e:function(ke){Z=!0,ye=ke},f:function(){try{Ae||G.return==null||G.return()}finally{if(Z)throw ye}}}}function qr(U,z){(z==null||z>U.length)&&(z=U.length);for(var G=0,$=new Array(z);G0?Je[Je.length-1]:null,qe=ue!==null&&(Qr.test(ue)||Ou.test(ue));if(!qe){var nt,Ct=Hn(h0.values());try{for(Ct.s();!(nt=Ct.n()).done;){var Mt=nt.value,Pt=Mt.currentDispatcherRef,sn=Mt.getCurrentFiber,rn=Mt.workTagMap,Nt=sn();if(Nt!=null){var Dn=bt(rn,Nt,Pt);Dn!==""&&Je.push(Dn);break}}}catch(dr){Ct.e(dr)}finally{Ct.f()}}}catch(dr){}ye.apply(void 0,Je)};Ae.__REACT_DEVTOOLS_ORIGINAL_METHOD__=ye,Ni[Te]=Ae}catch(Z){}})}}function ju(U){return(ju=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(z){return typeof z}:function(z){return z&&typeof Symbol=="function"&&z.constructor===Symbol&&z!==Symbol.prototype?"symbol":typeof z})(U)}function ms(U,z){for(var G=0;GU.length)&&(z=U.length);for(var G=0,$=new Array(z);G1?Z-1:0),Je=1;Je0?ue[ue.length-1]:0),ue.push(un),Z.set(et,Je(Ft._topLevelWrapper));try{var fn=it.apply(this,Et);return ue.pop(),fn}catch(Sr){throw ue=[],Sr}finally{if(ue.length===0){var Jn=Z.get(et);if(Jn===void 0)throw new Error("Expected to find root ID.");dr(Jn)}}},performUpdateIfNecessary:function(it,Et){var et=Et[0];if(S0(et)===9)return it.apply(this,Et);var Ft=Je(et);ue.push(Ft);var un=Qn(et);try{var fn=it.apply(this,Et),Jn=Qn(et);return vt(un,Jn)||Ct(et,Ft,Jn),ue.pop(),fn}catch(fu){throw ue=[],fu}finally{if(ue.length===0){var Sr=Z.get(et);if(Sr===void 0)throw new Error("Expected to find root ID.");dr(Sr)}}},receiveComponent:function(it,Et){var et=Et[0];if(S0(et)===9)return it.apply(this,Et);var Ft=Je(et);ue.push(Ft);var un=Qn(et);try{var fn=it.apply(this,Et),Jn=Qn(et);return vt(un,Jn)||Ct(et,Ft,Jn),ue.pop(),fn}catch(fu){throw ue=[],fu}finally{if(ue.length===0){var Sr=Z.get(et);if(Sr===void 0)throw new Error("Expected to find root ID.");dr(Sr)}}},unmountComponent:function(it,Et){var et=Et[0];if(S0(et)===9)return it.apply(this,Et);var Ft=Je(et);ue.push(Ft);try{var un=it.apply(this,Et);return ue.pop(),function(Jn,Sr){rn.push(Sr),ye.delete(Sr)}(0,Ft),un}catch(Jn){throw ue=[],Jn}finally{if(ue.length===0){var fn=Z.get(et);if(fn===void 0)throw new Error("Expected to find root ID.");dr(fn)}}}}));var Pt=[],sn=new Map,rn=[],Nt=0,Dn=null;function dr(it){if(Pt.length!==0||rn.length!==0||Dn!==null){var Et=rn.length+(Dn===null?0:1),et=new Array(3+Nt+(Et>0?2+Et:0)+Pt.length),Ft=0;if(et[Ft++]=z,et[Ft++]=it,et[Ft++]=Nt,sn.forEach(function(Jn,Sr){et[Ft++]=Sr.length;for(var fu=Y0(Sr),Lu=0;Lu0){et[Ft++]=2,et[Ft++]=Et;for(var un=0;un"),"color: var(--dom-tag-name-color); font-weight: normal;"),Et.props!==null&&console.log("Props:",Et.props),Et.state!==null&&console.log("State:",Et.state),Et.context!==null&&console.log("Context:",Et.context);var Ft=Te(it);Ft!==null&&console.log("Node:",Ft),(window.chrome||/firefox/i.test(navigator.userAgent))&&console.log("Right-click any value to save it as a global variable for further inspection."),et&&console.groupEnd()}else console.warn('Could not find element with id "'.concat(it,'"'))},overrideSuspense:function(){throw new Error("overrideSuspense not supported by this renderer")},overrideValueAtPath:function(it,Et,et,Ft,un){var fn=ye.get(Et);if(fn!=null){var Jn=fn._instance;if(Jn!=null)switch(it){case"context":Oo(Jn.context,Ft,un),m0(Jn);break;case"hooks":throw new Error("Hooks not supported by this renderer");case"props":var Sr=fn._currentElement;fn._currentElement=J0(J0({},Sr),{},{props:bn(Sr.props,Ft,un)}),m0(Jn);break;case"state":Oo(Jn.state,Ft,un),m0(Jn)}}},renamePath:function(it,Et,et,Ft,un){var fn=ye.get(Et);if(fn!=null){var Jn=fn._instance;if(Jn!=null)switch(it){case"context":Xr(Jn.context,Ft,un),m0(Jn);break;case"hooks":throw new Error("Hooks not supported by this renderer");case"props":var Sr=fn._currentElement;fn._currentElement=J0(J0({},Sr),{},{props:en(Sr.props,Ft,un)}),m0(Jn);break;case"state":Xr(Jn.state,Ft,un),m0(Jn)}}},prepareViewAttributeSource:function(it,Et){var et=Nr(it);et!==null&&(window.$attribute=Uu(et,Et))},prepareViewElementSource:function(it){var Et=ye.get(it);if(Et!=null){var et=Et._currentElement;et!=null?$.$type=et.type:console.warn('Could not find element with id "'.concat(it,'"'))}else console.warn('Could not find instance with id "'.concat(it,'"'))},renderer:G,setTraceUpdatesEnabled:function(it){},setTrackedPath:function(it){},startProfiling:function(){},stopProfiling:function(){},storeAsGlobal:function(it,Et,et){var Ft=Nr(it);if(Ft!==null){var un=Uu(Ft,Et),fn="$reactTemp".concat(et);window[fn]=un,console.log(fn),console.log(un)}},updateComponentFilters:function(it){}}}function fi(U,z){var G=!1,$={bottom:0,left:0,right:0,top:0},Te=z[U];if(Te!=null){for(var ye=0,Ae=Object.keys($);ye0?"development":"production";var Pt=Function.prototype.toString;if(Mt.Mount&&Mt.Mount._renderNewRootComponent){var sn=Pt.call(Mt.Mount._renderNewRootComponent);return sn.indexOf("function")!==0?"production":sn.indexOf("storedMeasure")!==-1?"development":sn.indexOf("should be a pure function")!==-1?sn.indexOf("NODE_ENV")!==-1||sn.indexOf("development")!==-1||sn.indexOf("true")!==-1?"development":sn.indexOf("nextElement")!==-1||sn.indexOf("nextComponent")!==-1?"unminified":"development":sn.indexOf("nextElement")!==-1||sn.indexOf("nextComponent")!==-1?"unminified":"outdated"}}catch(rn){}return"production"}(ke);try{var ue=window.__REACT_DEVTOOLS_APPEND_COMPONENT_STACK__!==!1,qe=window.__REACT_DEVTOOLS_BREAK_ON_CONSOLE_ERRORS__===!0;(ue||qe)&&(co(ke),Zl({appendComponentStack:ue,breakOnConsoleErrors:qe}))}catch(Mt){}var nt=U.__REACT_DEVTOOLS_ATTACH__;if(typeof nt=="function"){var Ct=nt(Z,Je,ke,U);Z.rendererInterfaces.set(Je,Ct)}return Z.emit("renderer",{id:Je,renderer:ke,reactBuildType:vt}),Je},on:function(ke,Je){ye[ke]||(ye[ke]=[]),ye[ke].push(Je)},off:function(ke,Je){if(ye[ke]){var vt=ye[ke].indexOf(Je);vt!==-1&&ye[ke].splice(vt,1),ye[ke].length||delete ye[ke]}},sub:function(ke,Je){return Z.on(ke,Je),function(){return Z.off(ke,Je)}},supportsFiber:!0,checkDCE:function(ke){try{Function.prototype.toString.call(ke).indexOf("^_^")>-1&&(G=!0,setTimeout(function(){throw new Error("React is running in production mode, but dead code elimination has not been applied. Read how to correctly configure React for production: https://reactjs.org/link/perf-use-production-build")}))}catch(Je){}},onCommitFiberUnmount:function(ke,Je){var vt=Te.get(ke);vt!=null&&vt.handleCommitFiberUnmount(Je)},onCommitFiberRoot:function(ke,Je,vt){var ue=Z.getFiberRoots(ke),qe=Je.current,nt=ue.has(Je),Ct=qe.memoizedState==null||qe.memoizedState.element==null;nt||Ct?nt&&Ct&&ue.delete(Je):ue.add(Je);var Mt=Te.get(ke);Mt!=null&&Mt.handleCommitFiberRoot(Je,vt)}};Object.defineProperty(U,"__REACT_DEVTOOLS_GLOBAL_HOOK__",{configurable:!1,enumerable:!1,get:function(){return Z}})})(window);var g0=window.__REACT_DEVTOOLS_GLOBAL_HOOK__,js=[{type:1,value:7,isEnabled:!0}];function ji(U){if(g0!=null){var z=U||{},G=z.host,$=G===void 0?"localhost":G,Te=z.nativeStyleEditorValidAttributes,ye=z.useHttps,Ae=ye!==void 0&&ye,Z=z.port,ke=Z===void 0?8097:Z,Je=z.websocket,vt=z.resolveRNStyle,ue=vt===void 0?null:vt,qe=z.isAppActive,nt=Ae?"wss":"ws",Ct=null;if((qe===void 0?function(){return!0}:qe)()){var Mt=null,Pt=[],sn=nt+"://"+$+":"+ke,rn=Je||new window.WebSocket(sn);rn.onclose=function(){Mt!==null&&Mt.emit("shutdown"),Nt()},rn.onerror=function(){Nt()},rn.onmessage=function(Dn){var dr;try{if(typeof Dn.data!="string")throw Error();dr=JSON.parse(Dn.data)}catch(er){return void console.error("[React DevTools] Failed to parse JSON: "+Dn.data)}Pt.forEach(function(er){try{er(dr)}catch(Cr){throw console.log("[React DevTools] Error calling listener",dr),console.log("error:",Cr),Cr}})},rn.onopen=function(){(Mt=new po({listen:function(Rn){return Pt.push(Rn),function(){var Lr=Pt.indexOf(Rn);Lr>=0&&Pt.splice(Lr,1)}},send:function(Rn,Lr,y0){rn.readyState===rn.OPEN?rn.send(JSON.stringify({event:Rn,payload:Lr})):(Mt!==null&&Mt.shutdown(),Nt())}})).addListener("inspectElement",function(Rn){var Lr=Rn.id,y0=Rn.rendererID,Nr=Dn.rendererInterfaces[y0];if(Nr!=null){var it=Nr.findNativeNodesForFiberID(Lr);it!=null&&it[0]!=null&&Dn.emit("showNativeHighlight",it[0])}}),Mt.addListener("updateComponentFilters",function(Rn){js=Rn}),window.__REACT_DEVTOOLS_COMPONENT_FILTERS__==null&&Mt.send("overrideComponentFilters",js);var Dn=new Yn(Mt);if(Dn.addListener("shutdown",function(){g0.emit("shutdown")}),function(Rn,Lr,y0){if(Rn==null)return function(){};var Nr=[Rn.sub("renderer-attached",function(et){var Ft=et.id,un=(et.renderer,et.rendererInterface);Lr.setRendererInterface(Ft,un),un.flushInitialOperations()}),Rn.sub("unsupported-renderer-version",function(et){Lr.onUnsupportedRenderer(et)}),Rn.sub("operations",Lr.onHookOperations),Rn.sub("traceUpdates",Lr.onTraceUpdates)],it=function(et,Ft){var un=Rn.rendererInterfaces.get(et);un==null&&(typeof Ft.findFiberByHostInstance=="function"?un=bs(Rn,et,Ft,y0):Ft.ComponentTree&&(un=fc(Rn,et,Ft,y0)),un!=null&&Rn.rendererInterfaces.set(et,un)),un!=null?Rn.emit("renderer-attached",{id:et,renderer:Ft,rendererInterface:un}):Rn.emit("unsupported-renderer-version",et)};Rn.renderers.forEach(function(et,Ft){it(Ft,et)}),Nr.push(Rn.sub("renderer",function(et){var Ft=et.id,un=et.renderer;it(Ft,un)})),Rn.emit("react-devtools",Lr),Rn.reactDevtoolsAgent=Lr;var Et=function(){Nr.forEach(function(et){return et()}),Rn.rendererInterfaces.forEach(function(et){et.cleanup()}),Rn.reactDevtoolsAgent=null};Lr.addListener("shutdown",Et),Nr.push(function(){Lr.removeListener("shutdown",Et)})}(g0,Dn,window),ue!=null||g0.resolveRNStyle!=null)la(Mt,Dn,ue||g0.resolveRNStyle,Te||g0.nativeStyleEditorValidAttributes||null);else{var dr,er,Cr=function(){Mt!==null&&la(Mt,Dn,dr,er)};g0.hasOwnProperty("resolveRNStyle")||Object.defineProperty(g0,"resolveRNStyle",{enumerable:!1,get:function(){return dr},set:function(Rn){dr=Rn,Cr()}}),g0.hasOwnProperty("nativeStyleEditorValidAttributes")||Object.defineProperty(g0,"nativeStyleEditorValidAttributes",{enumerable:!1,get:function(){return er},set:function(Rn){er=Rn,Cr()}})}}}else Nt()}function Nt(){Ct===null&&(Ct=setTimeout(function(){return ji(U)},2e3))}}}])})});var a6=Ke(s6=>{"use strict";Object.defineProperty(s6,"__esModule",{value:!0});o6();var zB=l6();zB.connectToDevTools()});var h6=Ke(dy=>{"use strict";var f6=dy&&dy.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(dy,"__esModule",{value:!0});var c6=Q_(),HB=f6(hT()),d6=f6(eh()),hs=r3();process.env.DEV==="true"&&a6();var p6=i=>{i==null||i.unsetMeasureFunc(),i==null||i.freeRecursive()};dy.default=HB.default({schedulePassiveEffects:c6.unstable_scheduleCallback,cancelPassiveEffects:c6.unstable_cancelCallback,now:Date.now,getRootHostContext:()=>({isInsideText:!1}),prepareForCommit:()=>{},resetAfterCommit:i=>{if(i.isStaticDirty){i.isStaticDirty=!1,typeof i.onImmediateRender=="function"&&i.onImmediateRender();return}typeof i.onRender=="function"&&i.onRender()},getChildHostContext:(i,o)=>{let a=i.isInsideText,c=o==="ink-text"||o==="ink-virtual-text";return a===c?i:{isInsideText:c}},shouldSetTextContent:()=>!1,createInstance:(i,o,a,c)=>{if(c.isInsideText&&i==="ink-box")throw new Error(" can\u2019t be nested inside component");let _=i==="ink-text"&&c.isInsideText?"ink-virtual-text":i,t=hs.createNode(_);for(let[O,N]of Object.entries(o))O!=="children"&&(O==="style"?hs.setStyle(t,N):O==="internal_transform"?t.internal_transform=N:O==="internal_static"?t.internal_static=!0:hs.setAttribute(t,O,N));return t},createTextInstance:(i,o,a)=>{if(!a.isInsideText)throw new Error(`Text string "${i}" must be rendered inside component`);return hs.createTextNode(i)},resetTextContent:()=>{},hideTextInstance:i=>{hs.setTextNodeValue(i,"")},unhideTextInstance:(i,o)=>{hs.setTextNodeValue(i,o)},getPublicInstance:i=>i,hideInstance:i=>{var o;(o=i.yogaNode)===null||o===void 0||o.setDisplay(d6.default.DISPLAY_NONE)},unhideInstance:i=>{var o;(o=i.yogaNode)===null||o===void 0||o.setDisplay(d6.default.DISPLAY_FLEX)},appendInitialChild:hs.appendChildNode,appendChild:hs.appendChildNode,insertBefore:hs.insertBeforeNode,finalizeInitialChildren:(i,o,a,c)=>(i.internal_static&&(c.isStaticDirty=!0,c.staticNode=i),!1),supportsMutation:!0,appendChildToContainer:hs.appendChildNode,insertInContainerBefore:hs.insertBeforeNode,removeChildFromContainer:(i,o)=>{hs.removeChildNode(i,o),p6(o.yogaNode)},prepareUpdate:(i,o,a,c,_)=>{i.internal_static&&(_.isStaticDirty=!0);let t={},O=Object.keys(c);for(let N of O)if(c[N]!==a[N]){if(N==="style"&&typeof c.style=="object"&&typeof a.style=="object"){let T=c.style,B=a.style,H=Object.keys(T);for(let q of H){if(q==="borderStyle"||q==="borderColor"){if(typeof t.style!="object"){let ne={};t.style=ne}t.style.borderStyle=T.borderStyle,t.style.borderColor=T.borderColor}if(T[q]!==B[q]){if(typeof t.style!="object"){let ne={};t.style=ne}t.style[q]=T[q]}}continue}t[N]=c[N]}return t},commitUpdate:(i,o)=>{for(let[a,c]of Object.entries(o))a!=="children"&&(a==="style"?hs.setStyle(i,c):a==="internal_transform"?i.internal_transform=c:a==="internal_static"?i.internal_static=!0:hs.setAttribute(i,a,c))},commitTextUpdate:(i,o,a)=>{hs.setTextNodeValue(i,a)},removeChild:(i,o)=>{hs.removeChildNode(i,o),p6(o.yogaNode)}})});var m6=Ke((RV,v6)=>{"use strict";v6.exports=(i,o=1,a)=>{if(a=Ht({indent:" ",includeEmptyLines:!1},a),typeof i!="string")throw new TypeError(`Expected \`input\` to be a \`string\`, got \`${typeof i}\``);if(typeof o!="number")throw new TypeError(`Expected \`count\` to be a \`number\`, got \`${typeof o}\``);if(typeof a.indent!="string")throw new TypeError(`Expected \`options.indent\` to be a \`string\`, got \`${typeof a.indent}\``);if(o===0)return i;let c=a.includeEmptyLines?/^/gm:/^(?!\s*$)/gm;return i.replace(c,a.indent.repeat(o))}});var g6=Ke(py=>{"use strict";var qB=py&&py.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(py,"__esModule",{value:!0});var d4=qB(eh());py.default=i=>i.getComputedWidth()-i.getComputedPadding(d4.default.EDGE_LEFT)-i.getComputedPadding(d4.default.EDGE_RIGHT)-i.getComputedBorder(d4.default.EDGE_LEFT)-i.getComputedBorder(d4.default.EDGE_RIGHT)});var _6=Ke((MV,y6)=>{y6.exports={single:{topLeft:"\u250C",topRight:"\u2510",bottomRight:"\u2518",bottomLeft:"\u2514",vertical:"\u2502",horizontal:"\u2500"},double:{topLeft:"\u2554",topRight:"\u2557",bottomRight:"\u255D",bottomLeft:"\u255A",vertical:"\u2551",horizontal:"\u2550"},round:{topLeft:"\u256D",topRight:"\u256E",bottomRight:"\u256F",bottomLeft:"\u2570",vertical:"\u2502",horizontal:"\u2500"},bold:{topLeft:"\u250F",topRight:"\u2513",bottomRight:"\u251B",bottomLeft:"\u2517",vertical:"\u2503",horizontal:"\u2501"},singleDouble:{topLeft:"\u2553",topRight:"\u2556",bottomRight:"\u255C",bottomLeft:"\u2559",vertical:"\u2551",horizontal:"\u2500"},doubleSingle:{topLeft:"\u2552",topRight:"\u2555",bottomRight:"\u255B",bottomLeft:"\u2558",vertical:"\u2502",horizontal:"\u2550"},classic:{topLeft:"+",topRight:"+",bottomRight:"+",bottomLeft:"+",vertical:"|",horizontal:"-"}}});var D6=Ke((kV,w3)=>{"use strict";var E6=_6();w3.exports=E6;w3.exports.default=E6});var S6=Ke((LV,w6)=>{"use strict";w6.exports=(i,o=process.argv)=>{let a=i.startsWith("-")?"":i.length===1?"-":"--",c=o.indexOf(a+i),_=o.indexOf("--");return c!==-1&&(_===-1||c<_)}});var x6=Ke((NV,T6)=>{"use strict";var WB=require("os"),C6=require("tty"),pf=S6(),{env:Xo}=process,m2;pf("no-color")||pf("no-colors")||pf("color=false")||pf("color=never")?m2=0:(pf("color")||pf("colors")||pf("color=true")||pf("color=always"))&&(m2=1);"FORCE_COLOR"in Xo&&(Xo.FORCE_COLOR==="true"?m2=1:Xo.FORCE_COLOR==="false"?m2=0:m2=Xo.FORCE_COLOR.length===0?1:Math.min(parseInt(Xo.FORCE_COLOR,10),3));function S3(i){return i===0?!1:{level:i,hasBasic:!0,has256:i>=2,has16m:i>=3}}function T3(i,o){if(m2===0)return 0;if(pf("color=16m")||pf("color=full")||pf("color=truecolor"))return 3;if(pf("color=256"))return 2;if(i&&!o&&m2===void 0)return 0;let a=m2||0;if(Xo.TERM==="dumb")return a;if(process.platform==="win32"){let c=WB.release().split(".");return Number(c[0])>=10&&Number(c[2])>=10586?Number(c[2])>=14931?3:2:1}if("CI"in Xo)return["TRAVIS","CIRCLECI","APPVEYOR","GITLAB_CI"].some(c=>c in Xo)||Xo.CI_NAME==="codeship"?1:a;if("TEAMCITY_VERSION"in Xo)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(Xo.TEAMCITY_VERSION)?1:0;if("GITHUB_ACTIONS"in Xo)return 1;if(Xo.COLORTERM==="truecolor")return 3;if("TERM_PROGRAM"in Xo){let c=parseInt((Xo.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(Xo.TERM_PROGRAM){case"iTerm.app":return c>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(Xo.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(Xo.TERM)||"COLORTERM"in Xo?1:a}function VB(i){let o=T3(i,i&&i.isTTY);return S3(o)}T6.exports={supportsColor:VB,stdout:S3(T3(!0,C6.isatty(1))),stderr:S3(T3(!0,C6.isatty(2)))}});var R6=Ke((FV,A6)=>{"use strict";var GB=(i,o,a)=>{let c=i.indexOf(o);if(c===-1)return i;let _=o.length,t=0,O="";do O+=i.substr(t,c-t)+o+a,t=c+_,c=i.indexOf(o,t);while(c!==-1);return O+=i.substr(t),O},YB=(i,o,a,c)=>{let _=0,t="";do{let O=i[c-1]==="\r";t+=i.substr(_,(O?c-1:c)-_)+o+(O?`\r -`:` -`)+a,_=c+1,c=i.indexOf(` -`,_)}while(c!==-1);return t+=i.substr(_),t};A6.exports={stringReplaceAll:GB,stringEncaseCRLFWithFirstIndex:YB}});var N6=Ke((PV,O6)=>{"use strict";var KB=/(?:\\(u(?:[a-f\d]{4}|\{[a-f\d]{1,6}\})|x[a-f\d]{2}|.))|(?:\{(~)?(\w+(?:\([^)]*\))?(?:\.\w+(?:\([^)]*\))?)*)(?:[ \t]|(?=\r?\n)))|(\})|((?:.|[\r\n\f])+?)/gi,M6=/(?:^|\.)(\w+)(?:\(([^)]*)\))?/g,XB=/^(['"])((?:\\.|(?!\1)[^\\])*)\1$/,QB=/\\(u(?:[a-f\d]{4}|{[a-f\d]{1,6}})|x[a-f\d]{2}|.)|([^\\])/gi,JB=new Map([["n",` -`],["r","\r"],["t"," "],["b","\b"],["f","\f"],["v","\v"],["0","\0"],["\\","\\"],["e",""],["a","\x07"]]);function k6(i){let o=i[0]==="u",a=i[1]==="{";return o&&!a&&i.length===5||i[0]==="x"&&i.length===3?String.fromCharCode(parseInt(i.slice(1),16)):o&&a?String.fromCodePoint(parseInt(i.slice(2,-1),16)):JB.get(i)||i}function ZB(i,o){let a=[],c=o.trim().split(/\s*,\s*/g),_;for(let t of c){let O=Number(t);if(!Number.isNaN(O))a.push(O);else if(_=t.match(XB))a.push(_[2].replace(QB,(N,M,T)=>M?k6(M):T));else throw new Error(`Invalid Chalk template style argument: ${t} (in style '${i}')`)}return a}function $B(i){M6.lastIndex=0;let o=[],a;for(;(a=M6.exec(i))!==null;){let c=a[1];if(a[2]){let _=ZB(c,a[2]);o.push([c].concat(_))}else o.push([c])}return o}function L6(i,o){let a={};for(let _ of o)for(let t of _.styles)a[t[0]]=_.inverse?null:t.slice(1);let c=i;for(let[_,t]of Object.entries(a))if(!!Array.isArray(t)){if(!(_ in c))throw new Error(`Unknown Chalk style: ${_}`);c=t.length>0?c[_](...t):c[_]}return c}O6.exports=(i,o)=>{let a=[],c=[],_=[];if(o.replace(KB,(t,O,N,M,T,B)=>{if(O)_.push(k6(O));else if(M){let H=_.join("");_=[],c.push(a.length===0?H:L6(i,a)(H)),a.push({inverse:N,styles:$B(M)})}else if(T){if(a.length===0)throw new Error("Found extraneous } in Chalk template literal");c.push(L6(i,a)(_.join(""))),_=[],a.pop()}else _.push(B)}),c.push(_.join("")),a.length>0){let t=`Chalk template literal is missing ${a.length} closing bracket${a.length===1?"":"s"} (\`}\`)`;throw new Error(t)}return c.join("")}});var g4=Ke((IV,F6)=>{"use strict";var hy=t4(),{stdout:C3,stderr:x3}=x6(),{stringReplaceAll:eU,stringEncaseCRLFWithFirstIndex:tU}=R6(),{isArray:p4}=Array,P6=["ansi","ansi","ansi256","ansi16m"],$v=Object.create(null),nU=(i,o={})=>{if(o.level&&!(Number.isInteger(o.level)&&o.level>=0&&o.level<=3))throw new Error("The `level` option should be an integer from 0 to 3");let a=C3?C3.level:0;i.level=o.level===void 0?a:o.level},I6=class{constructor(o){return b6(o)}},b6=i=>{let o={};return nU(o,i),o.template=(...a)=>B6(o.template,...a),Object.setPrototypeOf(o,h4.prototype),Object.setPrototypeOf(o.template,o),o.template.constructor=()=>{throw new Error("`chalk.constructor()` is deprecated. Use `new chalk.Instance()` instead.")},o.template.Instance=I6,o.template};function h4(i){return b6(i)}for(let[i,o]of Object.entries(hy))$v[i]={get(){let a=v4(this,A3(o.open,o.close,this._styler),this._isEmpty);return Object.defineProperty(this,i,{value:a}),a}};$v.visible={get(){let i=v4(this,this._styler,!0);return Object.defineProperty(this,"visible",{value:i}),i}};var U6=["rgb","hex","keyword","hsl","hsv","hwb","ansi","ansi256"];for(let i of U6)$v[i]={get(){let{level:o}=this;return function(...a){let c=A3(hy.color[P6[o]][i](...a),hy.color.close,this._styler);return v4(this,c,this._isEmpty)}}};for(let i of U6){let o="bg"+i[0].toUpperCase()+i.slice(1);$v[o]={get(){let{level:a}=this;return function(...c){let _=A3(hy.bgColor[P6[a]][i](...c),hy.bgColor.close,this._styler);return v4(this,_,this._isEmpty)}}}}var rU=Object.defineProperties(()=>{},Zr(Ht({},$v),{level:{enumerable:!0,get(){return this._generator.level},set(i){this._generator.level=i}}})),A3=(i,o,a)=>{let c,_;return a===void 0?(c=i,_=o):(c=a.openAll+i,_=o+a.closeAll),{open:i,close:o,openAll:c,closeAll:_,parent:a}},v4=(i,o,a)=>{let c=(..._)=>p4(_[0])&&p4(_[0].raw)?j6(c,B6(c,..._)):j6(c,_.length===1?""+_[0]:_.join(" "));return Object.setPrototypeOf(c,rU),c._generator=i,c._styler=o,c._isEmpty=a,c},j6=(i,o)=>{if(i.level<=0||!o)return i._isEmpty?"":o;let a=i._styler;if(a===void 0)return o;let{openAll:c,closeAll:_}=a;if(o.indexOf("")!==-1)for(;a!==void 0;)o=eU(o,a.close,a.open),a=a.parent;let t=o.indexOf(` -`);return t!==-1&&(o=tU(o,_,c,t)),c+o+_},R3,B6=(i,...o)=>{let[a]=o;if(!p4(a)||!p4(a.raw))return o.join(" ");let c=o.slice(1),_=[a.raw[0]];for(let t=1;t{"use strict";var iU=vy&&vy.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(vy,"__esModule",{value:!0});var my=iU(g4()),uU=/^(rgb|hsl|hsv|hwb)\(\s?(\d+),\s?(\d+),\s?(\d+)\s?\)$/,oU=/^(ansi|ansi256)\(\s?(\d+)\s?\)$/,y4=(i,o)=>o==="foreground"?i:"bg"+i[0].toUpperCase()+i.slice(1);vy.default=(i,o,a)=>{if(!o)return i;if(o in my.default){let _=y4(o,a);return my.default[_](i)}if(o.startsWith("#")){let _=y4("hex",a);return my.default[_](o)(i)}if(o.startsWith("ansi")){let _=oU.exec(o);if(!_)return i;let t=y4(_[1],a),O=Number(_[2]);return my.default[t](O)(i)}if(o.startsWith("rgb")||o.startsWith("hsl")||o.startsWith("hsv")||o.startsWith("hwb")){let _=uU.exec(o);if(!_)return i;let t=y4(_[1],a),O=Number(_[2]),N=Number(_[3]),M=Number(_[4]);return my.default[t](O,N,M)(i)}return i}});var H6=Ke(gy=>{"use strict";var z6=gy&&gy.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(gy,"__esModule",{value:!0});var lU=z6(D6()),M3=z6(O3());gy.default=(i,o,a,c)=>{if(typeof a.style.borderStyle=="string"){let _=a.yogaNode.getComputedWidth(),t=a.yogaNode.getComputedHeight(),O=a.style.borderColor,N=lU.default[a.style.borderStyle],M=M3.default(N.topLeft+N.horizontal.repeat(_-2)+N.topRight,O,"foreground"),T=(M3.default(N.vertical,O,"foreground")+` -`).repeat(t-2),B=M3.default(N.bottomLeft+N.horizontal.repeat(_-2)+N.bottomRight,O,"foreground");c.write(i,o,M,{transformers:[]}),c.write(i,o+1,T,{transformers:[]}),c.write(i+_-1,o+1,T,{transformers:[]}),c.write(i,o+t-1,B,{transformers:[]})}}});var W6=Ke(yy=>{"use strict";var ih=yy&&yy.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(yy,"__esModule",{value:!0});var sU=ih(eh()),aU=ih(VD()),fU=ih(m6()),cU=ih(e3()),dU=ih(g6()),pU=ih(n3()),hU=ih(H6()),vU=(i,o)=>{var a;let c=(a=i.childNodes[0])===null||a===void 0?void 0:a.yogaNode;if(c){let _=c.getComputedLeft(),t=c.getComputedTop();o=` -`.repeat(t)+fU.default(o,_)}return o},q6=(i,o,a)=>{var c;let{offsetX:_=0,offsetY:t=0,transformers:O=[],skipStaticElements:N}=a;if(N&&i.internal_static)return;let{yogaNode:M}=i;if(M){if(M.getDisplay()===sU.default.DISPLAY_NONE)return;let T=_+M.getComputedLeft(),B=t+M.getComputedTop(),H=O;if(typeof i.internal_transform=="function"&&(H=[i.internal_transform,...O]),i.nodeName==="ink-text"){let q=pU.default(i);if(q.length>0){let ne=aU.default(q),m=dU.default(M);if(ne>m){let he=(c=i.style.textWrap)!==null&&c!==void 0?c:"wrap";q=cU.default(q,m,he)}q=vU(i,q),o.write(T,B,q,{transformers:H})}return}if(i.nodeName==="ink-box"&&hU.default(T,B,i,o),i.nodeName==="ink-root"||i.nodeName==="ink-box")for(let q of i.childNodes)q6(q,o,{offsetX:T,offsetY:B,transformers:H,skipStaticElements:N})}};yy.default=q6});var G6=Ke((jV,V6)=>{"use strict";V6.exports=i=>{i=Object.assign({onlyFirst:!1},i);let o=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:[a-zA-Z\\d]*(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))"].join("|");return new RegExp(o,i.onlyFirst?void 0:"g")}});var K6=Ke((zV,k3)=>{"use strict";var mU=G6(),Y6=i=>typeof i=="string"?i.replace(mU(),""):i;k3.exports=Y6;k3.exports.default=Y6});var J6=Ke((HV,X6)=>{"use strict";var Q6="[\uD800-\uDBFF][\uDC00-\uDFFF]";X6.exports=i=>i&&i.exact?new RegExp(`^${Q6}$`):new RegExp(Q6,"g")});var $6=Ke((qV,L3)=>{"use strict";var gU=K6(),yU=J6(),Z6=i=>gU(i).replace(yU()," ").length;L3.exports=Z6;L3.exports.default=Z6});var rx=Ke(_y=>{"use strict";var ex=_y&&_y.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(_y,"__esModule",{value:!0});var tx=ex(ZD()),_U=ex($6()),nx=class{constructor(o){this.writes=[];let{width:a,height:c}=o;this.width=a,this.height=c}write(o,a,c,_){let{transformers:t}=_;!c||this.writes.push({x:o,y:a,text:c,transformers:t})}get(){let o=[];for(let c=0;cc.trimRight()).join(` -`),height:o.length}}};_y.default=nx});var ox=Ke(Ey=>{"use strict";var N3=Ey&&Ey.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(Ey,"__esModule",{value:!0});var EU=N3(eh()),ix=N3(W6()),ux=N3(rx());Ey.default=(i,o)=>{var a;if(i.yogaNode.setWidth(o),i.yogaNode){i.yogaNode.calculateLayout(void 0,void 0,EU.default.DIRECTION_LTR);let c=new ux.default({width:i.yogaNode.getComputedWidth(),height:i.yogaNode.getComputedHeight()});ix.default(i,c,{skipStaticElements:!0});let _;((a=i.staticNode)===null||a===void 0?void 0:a.yogaNode)&&(_=new ux.default({width:i.staticNode.yogaNode.getComputedWidth(),height:i.staticNode.yogaNode.getComputedHeight()}),ix.default(i.staticNode,_,{skipStaticElements:!1}));let{output:t,height:O}=c.get();return{output:t,outputHeight:O,staticOutput:_?`${_.get().output} -`:""}}return{output:"",outputHeight:0,staticOutput:""}}});var fx=Ke((GV,lx)=>{"use strict";var sx=require("stream"),ax=["assert","count","countReset","debug","dir","dirxml","error","group","groupCollapsed","groupEnd","info","log","table","time","timeEnd","timeLog","trace","warn"],F3={},DU=i=>{let o=new sx.PassThrough,a=new sx.PassThrough;o.write=_=>i("stdout",_),a.write=_=>i("stderr",_);let c=new console.Console(o,a);for(let _ of ax)F3[_]=console[_],console[_]=c[_];return()=>{for(let _ of ax)console[_]=F3[_];F3={}}};lx.exports=DU});var I3=Ke(P3=>{"use strict";Object.defineProperty(P3,"__esModule",{value:!0});P3.default=new WeakMap});var B3=Ke(b3=>{"use strict";Object.defineProperty(b3,"__esModule",{value:!0});var wU=ki(),cx=wU.createContext({exit:()=>{}});cx.displayName="InternalAppContext";b3.default=cx});var j3=Ke(U3=>{"use strict";Object.defineProperty(U3,"__esModule",{value:!0});var SU=ki(),dx=SU.createContext({stdin:void 0,setRawMode:()=>{},isRawModeSupported:!1,internal_exitOnCtrlC:!0});dx.displayName="InternalStdinContext";U3.default=dx});var H3=Ke(z3=>{"use strict";Object.defineProperty(z3,"__esModule",{value:!0});var TU=ki(),px=TU.createContext({stdout:void 0,write:()=>{}});px.displayName="InternalStdoutContext";z3.default=px});var W3=Ke(q3=>{"use strict";Object.defineProperty(q3,"__esModule",{value:!0});var CU=ki(),hx=CU.createContext({stderr:void 0,write:()=>{}});hx.displayName="InternalStderrContext";q3.default=hx});var _4=Ke(V3=>{"use strict";Object.defineProperty(V3,"__esModule",{value:!0});var xU=ki(),vx=xU.createContext({activeId:void 0,add:()=>{},remove:()=>{},activate:()=>{},deactivate:()=>{},enableFocus:()=>{},disableFocus:()=>{},focusNext:()=>{},focusPrevious:()=>{}});vx.displayName="InternalFocusContext";V3.default=vx});var gx=Ke(($V,mx)=>{"use strict";var AU=/[|\\{}()[\]^$+*?.-]/g;mx.exports=i=>{if(typeof i!="string")throw new TypeError("Expected a string");return i.replace(AU,"\\$&")}});var Dx=Ke((eG,yx)=>{"use strict";var RU=gx(),_x=[].concat(require("module").builtinModules,"bootstrap_node","node").map(i=>new RegExp(`(?:\\(${i}\\.js:\\d+:\\d+\\)$|^\\s*at ${i}\\.js:\\d+:\\d+$)`));_x.push(/\(internal\/[^:]+:\d+:\d+\)$/,/\s*at internal\/[^:]+:\d+:\d+$/,/\/\.node-spawn-wrap-\w+-\w+\/node:\d+:\d+\)?$/);var E4=class{constructor(o){o=Ht({ignoredPackages:[]},o),"internals"in o||(o.internals=E4.nodeInternals()),"cwd"in o||(o.cwd=process.cwd()),this._cwd=o.cwd.replace(/\\/g,"/"),this._internals=[].concat(o.internals,OU(o.ignoredPackages)),this._wrapCallSite=o.wrapCallSite||!1}static nodeInternals(){return[..._x]}clean(o,a=0){a=" ".repeat(a),Array.isArray(o)||(o=o.split(` -`)),!/^\s*at /.test(o[0])&&/^\s*at /.test(o[1])&&(o=o.slice(1));let c=!1,_=null,t=[];return o.forEach(O=>{if(O=O.replace(/\\/g,"/"),this._internals.some(M=>M.test(O)))return;let N=/^\s*at /.test(O);c?O=O.trimEnd().replace(/^(\s+)at /,"$1"):(O=O.trim(),N&&(O=O.slice(3))),O=O.replace(`${this._cwd}/`,""),O&&(N?(_&&(t.push(_),_=null),t.push(O)):(c=!0,_=O))}),t.map(O=>`${a}${O} -`).join("")}captureString(o,a=this.captureString){typeof o=="function"&&(a=o,o=Infinity);let{stackTraceLimit:c}=Error;o&&(Error.stackTraceLimit=o);let _={};Error.captureStackTrace(_,a);let{stack:t}=_;return Error.stackTraceLimit=c,this.clean(t)}capture(o,a=this.capture){typeof o=="function"&&(a=o,o=Infinity);let{prepareStackTrace:c,stackTraceLimit:_}=Error;Error.prepareStackTrace=(N,M)=>this._wrapCallSite?M.map(this._wrapCallSite):M,o&&(Error.stackTraceLimit=o);let t={};Error.captureStackTrace(t,a);let{stack:O}=t;return Object.assign(Error,{prepareStackTrace:c,stackTraceLimit:_}),O}at(o=this.at){let[a]=this.capture(1,o);if(!a)return{};let c={line:a.getLineNumber(),column:a.getColumnNumber()};Ex(c,a.getFileName(),this._cwd),a.isConstructor()&&(c.constructor=!0),a.isEval()&&(c.evalOrigin=a.getEvalOrigin()),a.isNative()&&(c.native=!0);let _;try{_=a.getTypeName()}catch(N){}_&&_!=="Object"&&_!=="[object Object]"&&(c.type=_);let t=a.getFunctionName();t&&(c.function=t);let O=a.getMethodName();return O&&t!==O&&(c.method=O),c}parseLine(o){let a=o&&o.match(MU);if(!a)return null;let c=a[1]==="new",_=a[2],t=a[3],O=a[4],N=Number(a[5]),M=Number(a[6]),T=a[7],B=a[8],H=a[9],q=a[10]==="native",ne=a[11]===")",m,he={};if(B&&(he.line=Number(B)),H&&(he.column=Number(H)),ne&&T){let De=0;for(let se=T.length-1;se>0;se--)if(T.charAt(se)===")")De++;else if(T.charAt(se)==="("&&T.charAt(se-1)===" "&&(De--,De===-1&&T.charAt(se-1)===" ")){let fe=T.slice(0,se-1);T=T.slice(se+1),_+=` (${fe}`;break}}if(_){let De=_.match(kU);De&&(_=De[1],m=De[2])}return Ex(he,T,this._cwd),c&&(he.constructor=!0),t&&(he.evalOrigin=t,he.evalLine=N,he.evalColumn=M,he.evalFile=O&&O.replace(/\\/g,"/")),q&&(he.native=!0),_&&(he.function=_),m&&_!==m&&(he.method=m),he}};function Ex(i,o,a){o&&(o=o.replace(/\\/g,"/"),o.startsWith(`${a}/`)&&(o=o.slice(a.length+1)),i.file=o)}function OU(i){if(i.length===0)return[];let o=i.map(a=>RU(a));return new RegExp(`[/\\\\]node_modules[/\\\\](?:${o.join("|")})[/\\\\][^:]+:\\d+:\\d+`)}var MU=new RegExp("^(?:\\s*at )?(?:(new) )?(?:(.*?) \\()?(?:eval at ([^ ]+) \\((.+?):(\\d+):(\\d+)\\), )?(?:(.+?):(\\d+):(\\d+)|(native))(\\)?)$"),kU=/^(.*?) \[as (.*?)\]$/;yx.exports=E4});var Sx=Ke((tG,wx)=>{"use strict";wx.exports=(i,o)=>i.replace(/^\t+/gm,a=>" ".repeat(a.length*(o||2)))});var Cx=Ke((nG,Tx)=>{"use strict";var LU=Sx(),NU=(i,o)=>{let a=[],c=i-o,_=i+o;for(let t=c;t<=_;t++)a.push(t);return a};Tx.exports=(i,o,a)=>{if(typeof i!="string")throw new TypeError("Source code is missing.");if(!o||o<1)throw new TypeError("Line number must start from `1`.");if(i=LU(i).split(/\r?\n/),!(o>i.length))return a=Ht({around:3},a),NU(o,a.around).filter(c=>i[c-1]!==void 0).map(c=>({line:c,value:i[c-1]}))}});var D4=Ke(rc=>{"use strict";var FU=rc&&rc.__createBinding||(Object.create?function(i,o,a,c){c===void 0&&(c=a),Object.defineProperty(i,c,{enumerable:!0,get:function(){return o[a]}})}:function(i,o,a,c){c===void 0&&(c=a),i[c]=o[a]}),PU=rc&&rc.__setModuleDefault||(Object.create?function(i,o){Object.defineProperty(i,"default",{enumerable:!0,value:o})}:function(i,o){i.default=o}),IU=rc&&rc.__importStar||function(i){if(i&&i.__esModule)return i;var o={};if(i!=null)for(var a in i)a!=="default"&&Object.hasOwnProperty.call(i,a)&&FU(o,i,a);return PU(o,i),o},bU=rc&&rc.__rest||function(i,o){var a={};for(var c in i)Object.prototype.hasOwnProperty.call(i,c)&&o.indexOf(c)<0&&(a[c]=i[c]);if(i!=null&&typeof Object.getOwnPropertySymbols=="function")for(var _=0,c=Object.getOwnPropertySymbols(i);_{var{children:a}=i,c=bU(i,["children"]);let _=Object.assign(Object.assign({},c),{marginLeft:c.marginLeft||c.marginX||c.margin||0,marginRight:c.marginRight||c.marginX||c.margin||0,marginTop:c.marginTop||c.marginY||c.margin||0,marginBottom:c.marginBottom||c.marginY||c.margin||0,paddingLeft:c.paddingLeft||c.paddingX||c.padding||0,paddingRight:c.paddingRight||c.paddingX||c.padding||0,paddingTop:c.paddingTop||c.paddingY||c.padding||0,paddingBottom:c.paddingBottom||c.paddingY||c.padding||0});return xx.default.createElement("ink-box",{ref:o,style:_},a)});G3.displayName="Box";G3.defaultProps={flexDirection:"row",flexGrow:0,flexShrink:1};rc.default=G3});var X3=Ke(Dy=>{"use strict";var Y3=Dy&&Dy.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(Dy,"__esModule",{value:!0});var BU=Y3(ki()),em=Y3(g4()),Ax=Y3(O3()),K3=({color:i,backgroundColor:o,dimColor:a,bold:c,italic:_,underline:t,strikethrough:O,inverse:N,wrap:M,children:T})=>{if(T==null)return null;let B=H=>(a&&(H=em.default.dim(H)),i&&(H=Ax.default(H,i,"foreground")),o&&(H=Ax.default(H,o,"background")),c&&(H=em.default.bold(H)),_&&(H=em.default.italic(H)),t&&(H=em.default.underline(H)),O&&(H=em.default.strikethrough(H)),N&&(H=em.default.inverse(H)),H);return BU.default.createElement("ink-text",{style:{flexGrow:0,flexShrink:1,flexDirection:"row",textWrap:M},internal_transform:B},T)};K3.displayName="Text";K3.defaultProps={dimColor:!1,bold:!1,italic:!1,underline:!1,strikethrough:!1,wrap:"wrap"};Dy.default=K3});var kx=Ke(ic=>{"use strict";var UU=ic&&ic.__createBinding||(Object.create?function(i,o,a,c){c===void 0&&(c=a),Object.defineProperty(i,c,{enumerable:!0,get:function(){return o[a]}})}:function(i,o,a,c){c===void 0&&(c=a),i[c]=o[a]}),jU=ic&&ic.__setModuleDefault||(Object.create?function(i,o){Object.defineProperty(i,"default",{enumerable:!0,value:o})}:function(i,o){i.default=o}),zU=ic&&ic.__importStar||function(i){if(i&&i.__esModule)return i;var o={};if(i!=null)for(var a in i)a!=="default"&&Object.hasOwnProperty.call(i,a)&&UU(o,i,a);return jU(o,i),o},wy=ic&&ic.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(ic,"__esModule",{value:!0});var Rx=zU(require("fs")),Qo=wy(ki()),Ox=wy(Dx()),HU=wy(Cx()),$1=wy(D4()),Hc=wy(X3()),Mx=new Ox.default({cwd:process.cwd(),internals:Ox.default.nodeInternals()}),qU=({error:i})=>{let o=i.stack?i.stack.split(` -`).slice(1):void 0,a=o?Mx.parseLine(o[0]):void 0,c,_=0;if((a==null?void 0:a.file)&&(a==null?void 0:a.line)&&Rx.existsSync(a.file)){let t=Rx.readFileSync(a.file,"utf8");if(c=HU.default(t,a.line),c)for(let{line:O}of c)_=Math.max(_,String(O).length)}return Qo.default.createElement($1.default,{flexDirection:"column",padding:1},Qo.default.createElement($1.default,null,Qo.default.createElement(Hc.default,{backgroundColor:"red",color:"white"}," ","ERROR"," "),Qo.default.createElement(Hc.default,null," ",i.message)),a&&Qo.default.createElement($1.default,{marginTop:1},Qo.default.createElement(Hc.default,{dimColor:!0},a.file,":",a.line,":",a.column)),a&&c&&Qo.default.createElement($1.default,{marginTop:1,flexDirection:"column"},c.map(({line:t,value:O})=>Qo.default.createElement($1.default,{key:t},Qo.default.createElement($1.default,{width:_+1},Qo.default.createElement(Hc.default,{dimColor:t!==a.line,backgroundColor:t===a.line?"red":void 0,color:t===a.line?"white":void 0},String(t).padStart(_," "),":")),Qo.default.createElement(Hc.default,{key:t,backgroundColor:t===a.line?"red":void 0,color:t===a.line?"white":void 0}," "+O)))),i.stack&&Qo.default.createElement($1.default,{marginTop:1,flexDirection:"column"},i.stack.split(` -`).slice(1).map(t=>{let O=Mx.parseLine(t);return O?Qo.default.createElement($1.default,{key:t},Qo.default.createElement(Hc.default,{dimColor:!0},"- "),Qo.default.createElement(Hc.default,{dimColor:!0,bold:!0},O.function),Qo.default.createElement(Hc.default,{dimColor:!0,color:"gray"}," ","(",O.file,":",O.line,":",O.column,")")):Qo.default.createElement($1.default,{key:t},Qo.default.createElement(Hc.default,{dimColor:!0},"- "),Qo.default.createElement(Hc.default,{dimColor:!0,bold:!0},t))})))};ic.default=qU});var Nx=Ke(uc=>{"use strict";var WU=uc&&uc.__createBinding||(Object.create?function(i,o,a,c){c===void 0&&(c=a),Object.defineProperty(i,c,{enumerable:!0,get:function(){return o[a]}})}:function(i,o,a,c){c===void 0&&(c=a),i[c]=o[a]}),VU=uc&&uc.__setModuleDefault||(Object.create?function(i,o){Object.defineProperty(i,"default",{enumerable:!0,value:o})}:function(i,o){i.default=o}),GU=uc&&uc.__importStar||function(i){if(i&&i.__esModule)return i;var o={};if(i!=null)for(var a in i)a!=="default"&&Object.hasOwnProperty.call(i,a)&&WU(o,i,a);return VU(o,i),o},uh=uc&&uc.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(uc,"__esModule",{value:!0});var oh=GU(ki()),Lx=uh(wD()),YU=uh(B3()),KU=uh(j3()),XU=uh(H3()),QU=uh(W3()),JU=uh(_4()),ZU=uh(kx()),$U=" ",ej="",tj="",Q3=class extends oh.PureComponent{constructor(){super(...arguments);this.state={isFocusEnabled:!0,activeFocusId:void 0,focusables:[],error:void 0},this.rawModeEnabledCount=0,this.handleSetRawMode=o=>{let{stdin:a}=this.props;if(!this.isRawModeSupported())throw a===process.stdin?new Error(`Raw mode is not supported on the current process.stdin, which Ink uses as input stream by default. -Read about how to prevent this error on https://github.com/vadimdemedes/ink/#israwmodesupported`):new Error(`Raw mode is not supported on the stdin provided to Ink. -Read about how to prevent this error on https://github.com/vadimdemedes/ink/#israwmodesupported`);if(a.setEncoding("utf8"),o){this.rawModeEnabledCount===0&&(a.addListener("data",this.handleInput),a.resume(),a.setRawMode(!0)),this.rawModeEnabledCount++;return}--this.rawModeEnabledCount==0&&(a.setRawMode(!1),a.removeListener("data",this.handleInput),a.pause())},this.handleInput=o=>{o===""&&this.props.exitOnCtrlC&&this.handleExit(),o===tj&&this.state.activeFocusId&&this.setState({activeFocusId:void 0}),this.state.isFocusEnabled&&this.state.focusables.length>0&&(o===$U&&this.focusNext(),o===ej&&this.focusPrevious())},this.handleExit=o=>{this.isRawModeSupported()&&this.handleSetRawMode(!1),this.props.onExit(o)},this.enableFocus=()=>{this.setState({isFocusEnabled:!0})},this.disableFocus=()=>{this.setState({isFocusEnabled:!1})},this.focusNext=()=>{this.setState(o=>{let a=o.focusables[0].id;return{activeFocusId:this.findNextFocusable(o)||a}})},this.focusPrevious=()=>{this.setState(o=>{let a=o.focusables[o.focusables.length-1].id;return{activeFocusId:this.findPreviousFocusable(o)||a}})},this.addFocusable=(o,{autoFocus:a})=>{this.setState(c=>{let _=c.activeFocusId;return!_&&a&&(_=o),{activeFocusId:_,focusables:[...c.focusables,{id:o,isActive:!0}]}})},this.removeFocusable=o=>{this.setState(a=>({activeFocusId:a.activeFocusId===o?void 0:a.activeFocusId,focusables:a.focusables.filter(c=>c.id!==o)}))},this.activateFocusable=o=>{this.setState(a=>({focusables:a.focusables.map(c=>c.id!==o?c:{id:o,isActive:!0})}))},this.deactivateFocusable=o=>{this.setState(a=>({activeFocusId:a.activeFocusId===o?void 0:a.activeFocusId,focusables:a.focusables.map(c=>c.id!==o?c:{id:o,isActive:!1})}))},this.findNextFocusable=o=>{let a=o.focusables.findIndex(c=>c.id===o.activeFocusId);for(let c=a+1;c{let a=o.focusables.findIndex(c=>c.id===o.activeFocusId);for(let c=a-1;c>=0;c--)if(o.focusables[c].isActive)return o.focusables[c].id}}static getDerivedStateFromError(o){return{error:o}}isRawModeSupported(){return this.props.stdin.isTTY}render(){return oh.default.createElement(YU.default.Provider,{value:{exit:this.handleExit}},oh.default.createElement(KU.default.Provider,{value:{stdin:this.props.stdin,setRawMode:this.handleSetRawMode,isRawModeSupported:this.isRawModeSupported(),internal_exitOnCtrlC:this.props.exitOnCtrlC}},oh.default.createElement(XU.default.Provider,{value:{stdout:this.props.stdout,write:this.props.writeToStdout}},oh.default.createElement(QU.default.Provider,{value:{stderr:this.props.stderr,write:this.props.writeToStderr}},oh.default.createElement(JU.default.Provider,{value:{activeId:this.state.activeFocusId,add:this.addFocusable,remove:this.removeFocusable,activate:this.activateFocusable,deactivate:this.deactivateFocusable,enableFocus:this.enableFocus,disableFocus:this.disableFocus,focusNext:this.focusNext,focusPrevious:this.focusPrevious}},this.state.error?oh.default.createElement(ZU.default,{error:this.state.error}):this.props.children)))))}componentDidMount(){Lx.default.hide(this.props.stdout)}componentWillUnmount(){Lx.default.show(this.props.stdout),this.isRawModeSupported()&&this.handleSetRawMode(!1)}componentDidCatch(o){this.handleExit(o)}};uc.default=Q3;Q3.displayName="InternalApp"});var bx=Ke(oc=>{"use strict";var nj=oc&&oc.__createBinding||(Object.create?function(i,o,a,c){c===void 0&&(c=a),Object.defineProperty(i,c,{enumerable:!0,get:function(){return o[a]}})}:function(i,o,a,c){c===void 0&&(c=a),i[c]=o[a]}),rj=oc&&oc.__setModuleDefault||(Object.create?function(i,o){Object.defineProperty(i,"default",{enumerable:!0,value:o})}:function(i,o){i.default=o}),ij=oc&&oc.__importStar||function(i){if(i&&i.__esModule)return i;var o={};if(i!=null)for(var a in i)a!=="default"&&Object.hasOwnProperty.call(i,a)&&nj(o,i,a);return rj(o,i),o},lc=oc&&oc.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(oc,"__esModule",{value:!0});var uj=lc(ki()),Fx=MS(),oj=lc(VS()),lj=lc(mD()),sj=lc(ZS()),aj=lc(eT()),w4=lc(h6()),fj=lc(ox()),cj=lc(DD()),dj=lc(fx()),pj=ij(r3()),hj=lc(I3()),vj=lc(Nx()),tm=process.env.CI==="false"?!1:sj.default,Px=()=>{},Ix=class{constructor(o){this.resolveExitPromise=()=>{},this.rejectExitPromise=()=>{},this.unsubscribeExit=()=>{},this.onRender=()=>{if(this.isUnmounted)return;let{output:a,outputHeight:c,staticOutput:_}=fj.default(this.rootNode,this.options.stdout.columns||80),t=_&&_!==` -`;if(this.options.debug){t&&(this.fullStaticOutput+=_),this.options.stdout.write(this.fullStaticOutput+a);return}if(tm){t&&this.options.stdout.write(_),this.lastOutput=a;return}if(t&&(this.fullStaticOutput+=_),c>=this.options.stdout.rows){this.options.stdout.write(lj.default.clearTerminal+this.fullStaticOutput+a),this.lastOutput=a;return}t&&(this.log.clear(),this.options.stdout.write(_),this.log(a)),!t&&a!==this.lastOutput&&this.throttledLog(a),this.lastOutput=a},aj.default(this),this.options=o,this.rootNode=pj.createNode("ink-root"),this.rootNode.onRender=o.debug?this.onRender:Fx.throttle(this.onRender,32,{leading:!0,trailing:!0}),this.rootNode.onImmediateRender=this.onRender,this.log=oj.default.create(o.stdout),this.throttledLog=o.debug?this.log:Fx.throttle(this.log,void 0,{leading:!0,trailing:!0}),this.isUnmounted=!1,this.lastOutput="",this.fullStaticOutput="",this.container=w4.default.createContainer(this.rootNode,!1,!1),this.unsubscribeExit=cj.default(this.unmount,{alwaysLast:!1}),process.env.DEV==="true"&&w4.default.injectIntoDevTools({bundleType:0,version:"16.13.1",rendererPackageName:"ink"}),o.patchConsole&&this.patchConsole(),tm||(o.stdout.on("resize",this.onRender),this.unsubscribeResize=()=>{o.stdout.off("resize",this.onRender)})}render(o){let a=uj.default.createElement(vj.default,{stdin:this.options.stdin,stdout:this.options.stdout,stderr:this.options.stderr,writeToStdout:this.writeToStdout,writeToStderr:this.writeToStderr,exitOnCtrlC:this.options.exitOnCtrlC,onExit:this.unmount},o);w4.default.updateContainer(a,this.container,null,Px)}writeToStdout(o){if(!this.isUnmounted){if(this.options.debug){this.options.stdout.write(o+this.fullStaticOutput+this.lastOutput);return}if(tm){this.options.stdout.write(o);return}this.log.clear(),this.options.stdout.write(o),this.log(this.lastOutput)}}writeToStderr(o){if(!this.isUnmounted){if(this.options.debug){this.options.stderr.write(o),this.options.stdout.write(this.fullStaticOutput+this.lastOutput);return}if(tm){this.options.stderr.write(o);return}this.log.clear(),this.options.stderr.write(o),this.log(this.lastOutput)}}unmount(o){this.isUnmounted||(this.onRender(),this.unsubscribeExit(),typeof this.restoreConsole=="function"&&this.restoreConsole(),typeof this.unsubscribeResize=="function"&&this.unsubscribeResize(),tm?this.options.stdout.write(this.lastOutput+` -`):this.options.debug||this.log.done(),this.isUnmounted=!0,w4.default.updateContainer(null,this.container,null,Px),hj.default.delete(this.options.stdout),o instanceof Error?this.rejectExitPromise(o):this.resolveExitPromise())}waitUntilExit(){return this.exitPromise||(this.exitPromise=new Promise((o,a)=>{this.resolveExitPromise=o,this.rejectExitPromise=a})),this.exitPromise}clear(){!tm&&!this.options.debug&&this.log.clear()}patchConsole(){this.options.debug||(this.restoreConsole=dj.default((o,a)=>{o==="stdout"&&this.writeToStdout(a),o==="stderr"&&(a.startsWith("The above error occurred")||this.writeToStderr(a))}))}};oc.default=Ix});var Ux=Ke(Sy=>{"use strict";var Bx=Sy&&Sy.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(Sy,"__esModule",{value:!0});var mj=Bx(bx()),S4=Bx(I3()),gj=require("stream"),Ej=(i,o)=>{let a=Object.assign({stdout:process.stdout,stdin:process.stdin,stderr:process.stderr,debug:!1,exitOnCtrlC:!0,patchConsole:!0},yj(o)),c=_j(a.stdout,()=>new mj.default(a));return c.render(i),{rerender:c.render,unmount:()=>c.unmount(),waitUntilExit:c.waitUntilExit,cleanup:()=>S4.default.delete(a.stdout),clear:c.clear}};Sy.default=Ej;var yj=(i={})=>i instanceof gj.Stream?{stdout:i,stdin:process.stdin}:i,_j=(i,o)=>{let a;return S4.default.has(i)?a=S4.default.get(i):(a=o(),S4.default.set(i,a)),a}});var zx=Ke(ed=>{"use strict";var Dj=ed&&ed.__createBinding||(Object.create?function(i,o,a,c){c===void 0&&(c=a),Object.defineProperty(i,c,{enumerable:!0,get:function(){return o[a]}})}:function(i,o,a,c){c===void 0&&(c=a),i[c]=o[a]}),wj=ed&&ed.__setModuleDefault||(Object.create?function(i,o){Object.defineProperty(i,"default",{enumerable:!0,value:o})}:function(i,o){i.default=o}),Sj=ed&&ed.__importStar||function(i){if(i&&i.__esModule)return i;var o={};if(i!=null)for(var a in i)a!=="default"&&Object.hasOwnProperty.call(i,a)&&Dj(o,i,a);return wj(o,i),o};Object.defineProperty(ed,"__esModule",{value:!0});var Ty=Sj(ki()),jx=i=>{let{items:o,children:a,style:c}=i,[_,t]=Ty.useState(0),O=Ty.useMemo(()=>o.slice(_),[o,_]);Ty.useLayoutEffect(()=>{t(o.length)},[o.length]);let N=O.map((T,B)=>a(T,_+B)),M=Ty.useMemo(()=>Object.assign({position:"absolute",flexDirection:"column"},c),[c]);return Ty.default.createElement("ink-box",{internal_static:!0,style:M},N)};jx.displayName="Static";ed.default=jx});var qx=Ke(Cy=>{"use strict";var Tj=Cy&&Cy.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(Cy,"__esModule",{value:!0});var Cj=Tj(ki()),Hx=({children:i,transform:o})=>i==null?null:Cj.default.createElement("ink-text",{style:{flexGrow:0,flexShrink:1,flexDirection:"row"},internal_transform:o},i);Hx.displayName="Transform";Cy.default=Hx});var Vx=Ke(xy=>{"use strict";var xj=xy&&xy.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(xy,"__esModule",{value:!0});var Aj=xj(ki()),Wx=({count:i=1})=>Aj.default.createElement("ink-text",null,` -`.repeat(i));Wx.displayName="Newline";xy.default=Wx});var Kx=Ke(Ay=>{"use strict";var Gx=Ay&&Ay.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(Ay,"__esModule",{value:!0});var Rj=Gx(ki()),Oj=Gx(D4()),Yx=()=>Rj.default.createElement(Oj.default,{flexGrow:1});Yx.displayName="Spacer";Ay.default=Yx});var T4=Ke(Ry=>{"use strict";var Mj=Ry&&Ry.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(Ry,"__esModule",{value:!0});var kj=ki(),Lj=Mj(j3()),Nj=()=>kj.useContext(Lj.default);Ry.default=Nj});var Qx=Ke(Oy=>{"use strict";var Fj=Oy&&Oy.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(Oy,"__esModule",{value:!0});var Xx=ki(),Pj=Fj(T4()),Ij=(i,o={})=>{let{stdin:a,setRawMode:c,internal_exitOnCtrlC:_}=Pj.default();Xx.useEffect(()=>{if(o.isActive!==!1)return c(!0),()=>{c(!1)}},[o.isActive,c]),Xx.useEffect(()=>{if(o.isActive===!1)return;let t=O=>{let N=String(O),M={upArrow:N==="",downArrow:N==="",leftArrow:N==="",rightArrow:N==="",pageDown:N==="[6~",pageUp:N==="[5~",return:N==="\r",escape:N==="",ctrl:!1,shift:!1,tab:N===" "||N==="",backspace:N==="\b",delete:N==="\x7F"||N==="[3~",meta:!1};N<=""&&!M.return&&(N=String.fromCharCode(N.charCodeAt(0)+"a".charCodeAt(0)-1),M.ctrl=!0),N.startsWith("")&&(N=N.slice(1),M.meta=!0);let T=N>="A"&&N<="Z",B=N>="\u0410"&&N<="\u042F";N.length===1&&(T||B)&&(M.shift=!0),M.tab&&N==="[Z"&&(M.shift=!0),(M.tab||M.backspace||M.delete)&&(N=""),(!(N==="c"&&M.ctrl)||!_)&&i(N,M)};return a==null||a.on("data",t),()=>{a==null||a.off("data",t)}},[o.isActive,a,_,i])};Oy.default=Ij});var Jx=Ke(My=>{"use strict";var bj=My&&My.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(My,"__esModule",{value:!0});var Bj=ki(),Uj=bj(B3()),jj=()=>Bj.useContext(Uj.default);My.default=jj});var Zx=Ke(ky=>{"use strict";var zj=ky&&ky.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(ky,"__esModule",{value:!0});var Hj=ki(),qj=zj(H3()),Wj=()=>Hj.useContext(qj.default);ky.default=Wj});var $x=Ke(Ly=>{"use strict";var Vj=Ly&&Ly.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(Ly,"__esModule",{value:!0});var Gj=ki(),Yj=Vj(W3()),Kj=()=>Gj.useContext(Yj.default);Ly.default=Kj});var t5=Ke(Ny=>{"use strict";var e5=Ny&&Ny.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(Ny,"__esModule",{value:!0});var Fy=ki(),Xj=e5(_4()),Qj=e5(T4()),Jj=({isActive:i=!0,autoFocus:o=!1}={})=>{let{isRawModeSupported:a,setRawMode:c}=Qj.default(),{activeId:_,add:t,remove:O,activate:N,deactivate:M}=Fy.useContext(Xj.default),T=Fy.useMemo(()=>Math.random().toString().slice(2,7),[]);return Fy.useEffect(()=>(t(T,{autoFocus:o}),()=>{O(T)}),[T,o]),Fy.useEffect(()=>{i?N(T):M(T)},[i,T]),Fy.useEffect(()=>{if(!(!a||!i))return c(!0),()=>{c(!1)}},[i]),{isFocused:Boolean(T)&&_===T}};Ny.default=Jj});var n5=Ke(Py=>{"use strict";var Zj=Py&&Py.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(Py,"__esModule",{value:!0});var $j=ki(),ez=Zj(_4()),tz=()=>{let i=$j.useContext(ez.default);return{enableFocus:i.enableFocus,disableFocus:i.disableFocus,focusNext:i.focusNext,focusPrevious:i.focusPrevious}};Py.default=tz});var r5=Ke(J3=>{"use strict";Object.defineProperty(J3,"__esModule",{value:!0});J3.default=i=>{var o,a,c,_;return{width:(a=(o=i.yogaNode)===null||o===void 0?void 0:o.getComputedWidth())!==null&&a!==void 0?a:0,height:(_=(c=i.yogaNode)===null||c===void 0?void 0:c.getComputedHeight())!==null&&_!==void 0?_:0}}});var sc=Ke(Kl=>{"use strict";Object.defineProperty(Kl,"__esModule",{value:!0});var nz=Ux();Object.defineProperty(Kl,"render",{enumerable:!0,get:function(){return nz.default}});var rz=D4();Object.defineProperty(Kl,"Box",{enumerable:!0,get:function(){return rz.default}});var iz=X3();Object.defineProperty(Kl,"Text",{enumerable:!0,get:function(){return iz.default}});var uz=zx();Object.defineProperty(Kl,"Static",{enumerable:!0,get:function(){return uz.default}});var oz=qx();Object.defineProperty(Kl,"Transform",{enumerable:!0,get:function(){return oz.default}});var lz=Vx();Object.defineProperty(Kl,"Newline",{enumerable:!0,get:function(){return lz.default}});var sz=Kx();Object.defineProperty(Kl,"Spacer",{enumerable:!0,get:function(){return sz.default}});var az=Qx();Object.defineProperty(Kl,"useInput",{enumerable:!0,get:function(){return az.default}});var fz=Jx();Object.defineProperty(Kl,"useApp",{enumerable:!0,get:function(){return fz.default}});var cz=T4();Object.defineProperty(Kl,"useStdin",{enumerable:!0,get:function(){return cz.default}});var dz=Zx();Object.defineProperty(Kl,"useStdout",{enumerable:!0,get:function(){return dz.default}});var pz=$x();Object.defineProperty(Kl,"useStderr",{enumerable:!0,get:function(){return pz.default}});var hz=t5();Object.defineProperty(Kl,"useFocus",{enumerable:!0,get:function(){return hz.default}});var vz=n5();Object.defineProperty(Kl,"useFocusManager",{enumerable:!0,get:function(){return vz.default}});var mz=r5();Object.defineProperty(Kl,"measureElement",{enumerable:!0,get:function(){return mz.default}})});var p5=Ke(Iy=>{"use strict";Object.defineProperty(Iy,"__esModule",{value:!0});Iy.UncontrolledTextInput=void 0;var f5=ki(),ew=ki(),c5=sc(),ah=g4(),d5=({value:i,placeholder:o="",focus:a=!0,mask:c,highlightPastedText:_=!1,showCursor:t=!0,onChange:O,onSubmit:N})=>{let[{cursorOffset:M,cursorWidth:T},B]=ew.useState({cursorOffset:(i||"").length,cursorWidth:0});ew.useEffect(()=>{B(he=>{if(!a||!t)return he;let De=i||"";return he.cursorOffset>De.length-1?{cursorOffset:De.length,cursorWidth:0}:he})},[i,a,t]);let H=_?T:0,q=c?c.repeat(i.length):i,ne=q,m=o?ah.grey(o):void 0;if(t&&a){m=o.length>0?ah.inverse(o[0])+ah.grey(o.slice(1)):ah.inverse(" "),ne=q.length>0?"":ah.inverse(" ");let he=0;for(let De of q)he>=M-H&&he<=M?ne+=ah.inverse(De):ne+=De,he++;q.length>0&&M===q.length&&(ne+=ah.inverse(" "))}return c5.useInput((he,De)=>{if(De.upArrow||De.downArrow||De.ctrl&&he==="c"||De.tab||De.shift&&De.tab)return;if(De.return){N&&N(i);return}let se=M,fe=i,_e=0;De.leftArrow?t&&se--:De.rightArrow?t&&se++:De.backspace||De.delete?M>0&&(fe=i.slice(0,M-1)+i.slice(M,i.length),se--):(fe=i.slice(0,M)+he+i.slice(M,i.length),se+=he.length,he.length>1&&(_e=he.length)),M<0&&(se=0),M>i.length&&(se=i.length),B({cursorOffset:se,cursorWidth:_e}),fe!==i&&O(fe)},{isActive:a}),f5.createElement(c5.Text,null,o?q.length>0?ne:m:ne)};Iy.default=d5;Iy.UncontrolledTextInput=i=>{let[o,a]=ew.useState("");return f5.createElement(d5,Object.assign({},i,{value:o,onChange:a}))}});var v5=Ke(N4=>{"use strict";Object.defineProperty(N4,"__esModule",{value:!0});function by(i){let o=[...i.caches],a=o.shift();return a===void 0?h5():{get(c,_,t={miss:()=>Promise.resolve()}){return a.get(c,_,t).catch(()=>by({caches:o}).get(c,_,t))},set(c,_){return a.set(c,_).catch(()=>by({caches:o}).set(c,_))},delete(c){return a.delete(c).catch(()=>by({caches:o}).delete(c))},clear(){return a.clear().catch(()=>by({caches:o}).clear())}}}function h5(){return{get(i,o,a={miss:()=>Promise.resolve()}){return o().then(_=>Promise.all([_,a.miss(_)])).then(([_])=>_)},set(i,o){return Promise.resolve(o)},delete(i){return Promise.resolve()},clear(){return Promise.resolve()}}}N4.createFallbackableCache=by;N4.createNullCache=h5});var g5=Ke((jG,m5)=>{m5.exports=v5()});var y5=Ke(tw=>{"use strict";Object.defineProperty(tw,"__esModule",{value:!0});function gz(i={serializable:!0}){let o={};return{get(a,c,_={miss:()=>Promise.resolve()}){let t=JSON.stringify(a);if(t in o)return Promise.resolve(i.serializable?JSON.parse(o[t]):o[t]);let O=c(),N=_&&_.miss||(()=>Promise.resolve());return O.then(M=>N(M)).then(()=>O)},set(a,c){return o[JSON.stringify(a)]=i.serializable?JSON.stringify(c):c,Promise.resolve(c)},delete(a){return delete o[JSON.stringify(a)],Promise.resolve()},clear(){return o={},Promise.resolve()}}}tw.createInMemoryCache=gz});var E5=Ke((HG,_5)=>{_5.exports=y5()});var w5=Ke(ac=>{"use strict";Object.defineProperty(ac,"__esModule",{value:!0});function yz(i,o,a){let c={"x-algolia-api-key":a,"x-algolia-application-id":o};return{headers(){return i===nw.WithinHeaders?c:{}},queryParameters(){return i===nw.WithinQueryParameters?c:{}}}}function _z(i){let o=0,a=()=>(o++,new Promise(c=>{setTimeout(()=>{c(i(a))},Math.min(100*o,1e3))}));return i(a)}function D5(i,o=(a,c)=>Promise.resolve()){return Object.assign(i,{wait(a){return D5(i.then(c=>Promise.all([o(c,a),c])).then(c=>c[1]))}})}function Ez(i){let o=i.length-1;for(o;o>0;o--){let a=Math.floor(Math.random()*(o+1)),c=i[o];i[o]=i[a],i[a]=c}return i}function Dz(i,o){return Object.keys(o!==void 0?o:{}).forEach(a=>{i[a]=o[a](i)}),i}function wz(i,...o){let a=0;return i.replace(/%s/g,()=>encodeURIComponent(o[a++]))}var Sz="4.2.0",Tz=i=>()=>i.transporter.requester.destroy(),nw={WithinQueryParameters:0,WithinHeaders:1};ac.AuthMode=nw;ac.addMethods=Dz;ac.createAuth=yz;ac.createRetryablePromise=_z;ac.createWaitablePromise=D5;ac.destroy=Tz;ac.encode=wz;ac.shuffle=Ez;ac.version=Sz});var By=Ke((WG,S5)=>{S5.exports=w5()});var T5=Ke(rw=>{"use strict";Object.defineProperty(rw,"__esModule",{value:!0});var Cz={Delete:"DELETE",Get:"GET",Post:"POST",Put:"PUT"};rw.MethodEnum=Cz});var Uy=Ke((GG,C5)=>{C5.exports=T5()});var j5=Ke(V0=>{"use strict";Object.defineProperty(V0,"__esModule",{value:!0});var x5=Uy();function iw(i,o){let a=i||{},c=a.data||{};return Object.keys(a).forEach(_=>{["timeout","headers","queryParameters","data","cacheable"].indexOf(_)===-1&&(c[_]=a[_])}),{data:Object.entries(c).length>0?c:void 0,timeout:a.timeout||o,headers:a.headers||{},queryParameters:a.queryParameters||{},cacheable:a.cacheable}}var F4={Read:1,Write:2,Any:3},nm={Up:1,Down:2,Timeouted:3},A5=2*60*1e3;function uw(i,o=nm.Up){return Zr(Ht({},i),{status:o,lastUpdate:Date.now()})}function R5(i){return i.status===nm.Up||Date.now()-i.lastUpdate>A5}function O5(i){return i.status===nm.Timeouted&&Date.now()-i.lastUpdate<=A5}function ow(i){return{protocol:i.protocol||"https",url:i.url,accept:i.accept||F4.Any}}function xz(i,o){return Promise.all(o.map(a=>i.get(a,()=>Promise.resolve(uw(a))))).then(a=>{let c=a.filter(N=>R5(N)),_=a.filter(N=>O5(N)),t=[...c,..._],O=t.length>0?t.map(N=>ow(N)):o;return{getTimeout(N,M){return(_.length===0&&N===0?1:_.length+3+N)*M},statelessHosts:O}})}var Az=({isTimedOut:i,status:o})=>!i&&~~o==0,Rz=i=>{let o=i.status;return i.isTimedOut||Az(i)||~~(o/100)!=2&&~~(o/100)!=4},Oz=({status:i})=>~~(i/100)==2,Mz=(i,o)=>Rz(i)?o.onRetry(i):Oz(i)?o.onSucess(i):o.onFail(i);function I5(i,o,a,c){let _=[],t=N5(a,c),O=F5(i,c),N=a.method,M=a.method!==x5.MethodEnum.Get?{}:Ht(Ht({},a.data),c.data),T=Ht(Ht(Ht({"x-algolia-agent":i.userAgent.value},i.queryParameters),M),c.queryParameters),B=0,H=(q,ne)=>{let m=q.pop();if(m===void 0)throw P5(lw(_));let he={data:t,headers:O,method:N,url:L5(m,a.path,T),connectTimeout:ne(B,i.timeouts.connect),responseTimeout:ne(B,c.timeout)},De=fe=>{let _e={request:he,response:fe,host:m,triesLeft:q.length};return _.push(_e),_e},se={onSucess:fe=>M5(fe),onRetry(fe){let _e=De(fe);return fe.isTimedOut&&B++,Promise.all([i.logger.info("Retryable failure",sw(_e)),i.hostsCache.set(m,uw(m,fe.isTimedOut?nm.Timeouted:nm.Down))]).then(()=>H(q,ne))},onFail(fe){throw De(fe),k5(fe,lw(_))}};return i.requester.send(he).then(fe=>Mz(fe,se))};return xz(i.hostsCache,o).then(q=>H([...q.statelessHosts].reverse(),q.getTimeout))}function kz(i){let{hostsCache:o,logger:a,requester:c,requestsCache:_,responsesCache:t,timeouts:O,userAgent:N,hosts:M,queryParameters:T,headers:B}=i,H={hostsCache:o,logger:a,requester:c,requestsCache:_,responsesCache:t,timeouts:O,userAgent:N,headers:B,queryParameters:T,hosts:M.map(q=>ow(q)),read(q,ne){let m=iw(ne,H.timeouts.read),he=()=>I5(H,H.hosts.filter(fe=>(fe.accept&F4.Read)!=0),q,m);if((m.cacheable!==void 0?m.cacheable:q.cacheable)!==!0)return he();let se={request:q,mappedRequestOptions:m,transporter:{queryParameters:H.queryParameters,headers:H.headers}};return H.responsesCache.get(se,()=>H.requestsCache.get(se,()=>H.requestsCache.set(se,he()).then(fe=>Promise.all([H.requestsCache.delete(se),fe]),fe=>Promise.all([H.requestsCache.delete(se),Promise.reject(fe)])).then(([fe,_e])=>_e)),{miss:fe=>H.responsesCache.set(se,fe)})},write(q,ne){return I5(H,H.hosts.filter(m=>(m.accept&F4.Write)!=0),q,iw(ne,H.timeouts.write))}};return H}function Lz(i){let o={value:`Algolia for JavaScript (${i})`,add(a){let c=`; ${a.segment}${a.version!==void 0?` (${a.version})`:""}`;return o.value.indexOf(c)===-1&&(o.value=`${o.value}${c}`),o}};return o}function M5(i){try{return JSON.parse(i.content)}catch(o){throw b5(o.message,i)}}function k5({content:i,status:o},a){let c=i;try{c=JSON.parse(i).message}catch(_){}return B5(c,o,a)}function Nz(i,...o){let a=0;return i.replace(/%s/g,()=>encodeURIComponent(o[a++]))}function L5(i,o,a){let c=U5(a),_=`${i.protocol}://${i.url}/${o.charAt(0)==="/"?o.substr(1):o}`;return c.length&&(_+=`?${c}`),_}function U5(i){let o=a=>Object.prototype.toString.call(a)==="[object Object]"||Object.prototype.toString.call(a)==="[object Array]";return Object.keys(i).map(a=>Nz("%s=%s",a,o(i[a])?JSON.stringify(i[a]):i[a])).join("&")}function N5(i,o){if(i.method===x5.MethodEnum.Get||i.data===void 0&&o.data===void 0)return;let a=Array.isArray(i.data)?i.data:Ht(Ht({},i.data),o.data);return JSON.stringify(a)}function F5(i,o){let a=Ht(Ht({},i.headers),o.headers),c={};return Object.keys(a).forEach(_=>{let t=a[_];c[_.toLowerCase()]=t}),c}function lw(i){return i.map(o=>sw(o))}function sw(i){let o=i.request.headers["x-algolia-api-key"]?{"x-algolia-api-key":"*****"}:{};return Zr(Ht({},i),{request:Zr(Ht({},i.request),{headers:Ht(Ht({},i.request.headers),o)})})}function B5(i,o,a){return{name:"ApiError",message:i,status:o,transporterStackTrace:a}}function b5(i,o){return{name:"DeserializationError",message:i,response:o}}function P5(i){return{name:"RetryError",message:"Unreachable hosts - your application id may be incorrect. If the error persists, contact support@algolia.com.",transporterStackTrace:i}}V0.CallEnum=F4;V0.HostStatusEnum=nm;V0.createApiError=B5;V0.createDeserializationError=b5;V0.createMappedRequestOptions=iw;V0.createRetryError=P5;V0.createStatefulHost=uw;V0.createStatelessHost=ow;V0.createTransporter=kz;V0.createUserAgent=Lz;V0.deserializeFailure=k5;V0.deserializeSuccess=M5;V0.isStatefulHostTimeouted=O5;V0.isStatefulHostUp=R5;V0.serializeData=N5;V0.serializeHeaders=F5;V0.serializeQueryParameters=U5;V0.serializeUrl=L5;V0.stackFrameWithoutCredentials=sw;V0.stackTraceWithoutCredentials=lw});var jy=Ke((KG,z5)=>{z5.exports=j5()});var H5=Ke(_2=>{"use strict";Object.defineProperty(_2,"__esModule",{value:!0});var rm=By(),Fz=jy(),zy=Uy(),Pz=i=>{let o=i.region||"us",a=rm.createAuth(rm.AuthMode.WithinHeaders,i.appId,i.apiKey),c=Fz.createTransporter(Zr(Ht({hosts:[{url:`analytics.${o}.algolia.com`}]},i),{headers:Ht(Zr(Ht({},a.headers()),{"content-type":"application/json"}),i.headers),queryParameters:Ht(Ht({},a.queryParameters()),i.queryParameters)})),_=i.appId;return rm.addMethods({appId:_,transporter:c},i.methods)},Iz=i=>(o,a)=>i.transporter.write({method:zy.MethodEnum.Post,path:"2/abtests",data:o},a),bz=i=>(o,a)=>i.transporter.write({method:zy.MethodEnum.Delete,path:rm.encode("2/abtests/%s",o)},a),Bz=i=>(o,a)=>i.transporter.read({method:zy.MethodEnum.Get,path:rm.encode("2/abtests/%s",o)},a),Uz=i=>o=>i.transporter.read({method:zy.MethodEnum.Get,path:"2/abtests"},o),jz=i=>(o,a)=>i.transporter.write({method:zy.MethodEnum.Post,path:rm.encode("2/abtests/%s/stop",o)},a);_2.addABTest=Iz;_2.createAnalyticsClient=Pz;_2.deleteABTest=bz;_2.getABTest=Bz;_2.getABTests=Uz;_2.stopABTest=jz});var W5=Ke((QG,q5)=>{q5.exports=H5()});var G5=Ke(Hy=>{"use strict";Object.defineProperty(Hy,"__esModule",{value:!0});var aw=By(),zz=jy(),V5=Uy(),Hz=i=>{let o=i.region||"us",a=aw.createAuth(aw.AuthMode.WithinHeaders,i.appId,i.apiKey),c=zz.createTransporter(Zr(Ht({hosts:[{url:`recommendation.${o}.algolia.com`}]},i),{headers:Ht(Zr(Ht({},a.headers()),{"content-type":"application/json"}),i.headers),queryParameters:Ht(Ht({},a.queryParameters()),i.queryParameters)}));return aw.addMethods({appId:i.appId,transporter:c},i.methods)},qz=i=>o=>i.transporter.read({method:V5.MethodEnum.Get,path:"1/strategies/personalization"},o),Wz=i=>(o,a)=>i.transporter.write({method:V5.MethodEnum.Post,path:"1/strategies/personalization",data:o},a);Hy.createRecommendationClient=Hz;Hy.getPersonalizationStrategy=qz;Hy.setPersonalizationStrategy=Wz});var K5=Ke((ZG,Y5)=>{Y5.exports=G5()});var l9=Ke(tn=>{"use strict";Object.defineProperty(tn,"__esModule",{value:!0});var Nn=By(),ia=jy(),Ur=Uy(),Vz=require("crypto");function P4(i){let o=a=>i.request(a).then(c=>{if(i.batch!==void 0&&i.batch(c.hits),!i.shouldStop(c))return c.cursor?o({cursor:c.cursor}):o({page:(a.page||0)+1})});return o({})}var Gz=i=>{let o=i.appId,a=Nn.createAuth(i.authMode!==void 0?i.authMode:Nn.AuthMode.WithinHeaders,o,i.apiKey),c=ia.createTransporter(Zr(Ht({hosts:[{url:`${o}-dsn.algolia.net`,accept:ia.CallEnum.Read},{url:`${o}.algolia.net`,accept:ia.CallEnum.Write}].concat(Nn.shuffle([{url:`${o}-1.algolianet.com`},{url:`${o}-2.algolianet.com`},{url:`${o}-3.algolianet.com`}]))},i),{headers:Ht(Zr(Ht({},a.headers()),{"content-type":"application/x-www-form-urlencoded"}),i.headers),queryParameters:Ht(Ht({},a.queryParameters()),i.queryParameters)})),_={transporter:c,appId:o,addAlgoliaAgent(t,O){c.userAgent.add({segment:t,version:O})},clearCache(){return Promise.all([c.requestsCache.clear(),c.responsesCache.clear()]).then(()=>{})}};return Nn.addMethods(_,i.methods)};function X5(){return{name:"MissingObjectIDError",message:"All objects must have an unique objectID (like a primary key) to be valid. Algolia is also able to generate objectIDs automatically but *it's not recommended*. To do it, use the `{'autoGenerateObjectIDIfNotExist': true}` option."}}function Q5(){return{name:"ObjectNotFoundError",message:"Object not found."}}function J5(){return{name:"ValidUntilNotFoundError",message:"ValidUntil not found in given secured api key."}}var Yz=i=>(o,a)=>{let N=a||{},{queryParameters:c}=N,_=wl(N,["queryParameters"]),t=Ht({acl:o},c!==void 0?{queryParameters:c}:{}),O=(M,T)=>Nn.createRetryablePromise(B=>qy(i)(M.key,T).catch(H=>{if(H.status!==404)throw H;return B()}));return Nn.createWaitablePromise(i.transporter.write({method:Ur.MethodEnum.Post,path:"1/keys",data:t},_),O)},Kz=i=>(o,a,c)=>{let _=ia.createMappedRequestOptions(c);return _.queryParameters["X-Algolia-User-ID"]=o,i.transporter.write({method:Ur.MethodEnum.Post,path:"1/clusters/mapping",data:{cluster:a}},_)},Xz=i=>(o,a,c)=>i.transporter.write({method:Ur.MethodEnum.Post,path:"1/clusters/mapping/batch",data:{users:o,cluster:a}},c),I4=i=>(o,a,c)=>{let _=(t,O)=>Wy(i)(o,{methods:{waitTask:xo}}).waitTask(t.taskID,O);return Nn.createWaitablePromise(i.transporter.write({method:Ur.MethodEnum.Post,path:Nn.encode("1/indexes/%s/operation",o),data:{operation:"copy",destination:a}},c),_)},Qz=i=>(o,a,c)=>I4(i)(o,a,Zr(Ht({},c),{scope:[b4.Rules]})),Jz=i=>(o,a,c)=>I4(i)(o,a,Zr(Ht({},c),{scope:[b4.Settings]})),Zz=i=>(o,a,c)=>I4(i)(o,a,Zr(Ht({},c),{scope:[b4.Synonyms]})),$z=i=>(o,a)=>{let c=(_,t)=>Nn.createRetryablePromise(O=>qy(i)(o,t).then(O).catch(N=>{if(N.status!==404)throw N}));return Nn.createWaitablePromise(i.transporter.write({method:Ur.MethodEnum.Delete,path:Nn.encode("1/keys/%s",o)},a),c)},eH=()=>(i,o)=>{let a=ia.serializeQueryParameters(o),c=Vz.createHmac("sha256",i).update(a).digest("hex");return Buffer.from(c+a).toString("base64")},qy=i=>(o,a)=>i.transporter.read({method:Ur.MethodEnum.Get,path:Nn.encode("1/keys/%s",o)},a),tH=i=>o=>i.transporter.read({method:Ur.MethodEnum.Get,path:"1/logs"},o),nH=()=>i=>{let o=Buffer.from(i,"base64").toString("ascii"),a=/validUntil=(\d+)/,c=o.match(a);if(c===null)throw J5();return parseInt(c[1],10)-Math.round(new Date().getTime()/1e3)},rH=i=>o=>i.transporter.read({method:Ur.MethodEnum.Get,path:"1/clusters/mapping/top"},o),iH=i=>(o,a)=>i.transporter.read({method:Ur.MethodEnum.Get,path:Nn.encode("1/clusters/mapping/%s",o)},a),uH=i=>o=>{let _=o||{},{retrieveMappings:a}=_,c=wl(_,["retrieveMappings"]);return a===!0&&(c.getClusters=!0),i.transporter.read({method:Ur.MethodEnum.Get,path:"1/clusters/mapping/pending"},c)},Wy=i=>(o,a={})=>{let c={transporter:i.transporter,appId:i.appId,indexName:o};return Nn.addMethods(c,a.methods)},oH=i=>o=>i.transporter.read({method:Ur.MethodEnum.Get,path:"1/keys"},o),lH=i=>o=>i.transporter.read({method:Ur.MethodEnum.Get,path:"1/clusters"},o),sH=i=>o=>i.transporter.read({method:Ur.MethodEnum.Get,path:"1/indexes"},o),aH=i=>o=>i.transporter.read({method:Ur.MethodEnum.Get,path:"1/clusters/mapping"},o),fH=i=>(o,a,c)=>{let _=(t,O)=>Wy(i)(o,{methods:{waitTask:xo}}).waitTask(t.taskID,O);return Nn.createWaitablePromise(i.transporter.write({method:Ur.MethodEnum.Post,path:Nn.encode("1/indexes/%s/operation",o),data:{operation:"move",destination:a}},c),_)},cH=i=>(o,a)=>{let c=(_,t)=>Promise.all(Object.keys(_.taskID).map(O=>Wy(i)(O,{methods:{waitTask:xo}}).waitTask(_.taskID[O],t)));return Nn.createWaitablePromise(i.transporter.write({method:Ur.MethodEnum.Post,path:"1/indexes/*/batch",data:{requests:o}},a),c)},dH=i=>(o,a)=>i.transporter.read({method:Ur.MethodEnum.Post,path:"1/indexes/*/objects",data:{requests:o}},a),pH=i=>(o,a)=>{let c=o.map(_=>Zr(Ht({},_),{params:ia.serializeQueryParameters(_.params||{})}));return i.transporter.read({method:Ur.MethodEnum.Post,path:"1/indexes/*/queries",data:{requests:c},cacheable:!0},a)},hH=i=>(o,a)=>Promise.all(o.map(c=>{let N=c.params,{facetName:_,facetQuery:t}=N,O=wl(N,["facetName","facetQuery"]);return Wy(i)(c.indexName,{methods:{searchForFacetValues:Z5}}).searchForFacetValues(_,t,Ht(Ht({},a),O))})),vH=i=>(o,a)=>{let c=ia.createMappedRequestOptions(a);return c.queryParameters["X-Algolia-User-ID"]=o,i.transporter.write({method:Ur.MethodEnum.Delete,path:"1/clusters/mapping"},c)},mH=i=>(o,a)=>{let c=(_,t)=>Nn.createRetryablePromise(O=>qy(i)(o,t).catch(N=>{if(N.status!==404)throw N;return O()}));return Nn.createWaitablePromise(i.transporter.write({method:Ur.MethodEnum.Post,path:Nn.encode("1/keys/%s/restore",o)},a),c)},gH=i=>(o,a)=>i.transporter.read({method:Ur.MethodEnum.Post,path:"1/clusters/mapping/search",data:{query:o}},a),yH=i=>(o,a)=>{let c=Object.assign({},a),B=a||{},{queryParameters:_}=B,t=wl(B,["queryParameters"]),O=_?{queryParameters:_}:{},N=["acl","indexes","referers","restrictSources","queryParameters","description","maxQueriesPerIPPerHour","maxHitsPerQuery"],M=H=>Object.keys(c).filter(q=>N.indexOf(q)!==-1).every(q=>H[q]===c[q]),T=(H,q)=>Nn.createRetryablePromise(ne=>qy(i)(o,q).then(m=>M(m)?Promise.resolve():ne()));return Nn.createWaitablePromise(i.transporter.write({method:Ur.MethodEnum.Put,path:Nn.encode("1/keys/%s",o),data:O},t),T)},$5=i=>(o,a)=>{let c=(_,t)=>xo(i)(_.taskID,t);return Nn.createWaitablePromise(i.transporter.write({method:Ur.MethodEnum.Post,path:Nn.encode("1/indexes/%s/batch",i.indexName),data:{requests:o}},a),c)},_H=i=>o=>P4(Zr(Ht({},o),{shouldStop:a=>a.cursor===void 0,request:a=>i.transporter.read({method:Ur.MethodEnum.Post,path:Nn.encode("1/indexes/%s/browse",i.indexName),data:a},o)})),EH=i=>o=>{let a=Ht({hitsPerPage:1e3},o);return P4(Zr(Ht({},a),{shouldStop:c=>c.hits.lengthZr(Ht({},_),{hits:_.hits.map(t=>(delete t._highlightResult,t))}))}}))},DH=i=>o=>{let a=Ht({hitsPerPage:1e3},o);return P4(Zr(Ht({},a),{shouldStop:c=>c.hits.lengthZr(Ht({},_),{hits:_.hits.map(t=>(delete t._highlightResult,t))}))}}))},B4=i=>(o,a,c)=>{let M=c||{},{batchSize:_}=M,t=wl(M,["batchSize"]),O={taskIDs:[],objectIDs:[]},N=(T=0)=>{let B=[],H;for(H=T;H({action:a,body:q})),t).then(q=>(O.objectIDs=O.objectIDs.concat(q.objectIDs),O.taskIDs.push(q.taskID),H++,N(H)))};return Nn.createWaitablePromise(N(),(T,B)=>Promise.all(T.taskIDs.map(H=>xo(i)(H,B))))},wH=i=>o=>Nn.createWaitablePromise(i.transporter.write({method:Ur.MethodEnum.Post,path:Nn.encode("1/indexes/%s/clear",i.indexName)},o),(a,c)=>xo(i)(a.taskID,c)),SH=i=>o=>{let t=o||{},{forwardToReplicas:a}=t,c=wl(t,["forwardToReplicas"]),_=ia.createMappedRequestOptions(c);return a&&(_.queryParameters.forwardToReplicas=1),Nn.createWaitablePromise(i.transporter.write({method:Ur.MethodEnum.Post,path:Nn.encode("1/indexes/%s/rules/clear",i.indexName)},_),(O,N)=>xo(i)(O.taskID,N))},TH=i=>o=>{let t=o||{},{forwardToReplicas:a}=t,c=wl(t,["forwardToReplicas"]),_=ia.createMappedRequestOptions(c);return a&&(_.queryParameters.forwardToReplicas=1),Nn.createWaitablePromise(i.transporter.write({method:Ur.MethodEnum.Post,path:Nn.encode("1/indexes/%s/synonyms/clear",i.indexName)},_),(O,N)=>xo(i)(O.taskID,N))},CH=i=>(o,a)=>Nn.createWaitablePromise(i.transporter.write({method:Ur.MethodEnum.Post,path:Nn.encode("1/indexes/%s/deleteByQuery",i.indexName),data:o},a),(c,_)=>xo(i)(c.taskID,_)),xH=i=>o=>Nn.createWaitablePromise(i.transporter.write({method:Ur.MethodEnum.Delete,path:Nn.encode("1/indexes/%s",i.indexName)},o),(a,c)=>xo(i)(a.taskID,c)),AH=i=>(o,a)=>Nn.createWaitablePromise(n9(i)([o],a).then(c=>({taskID:c.taskIDs[0]})),(c,_)=>xo(i)(c.taskID,_)),n9=i=>(o,a)=>{let c=o.map(_=>({objectID:_}));return B4(i)(c,fh.DeleteObject,a)},RH=i=>(o,a)=>{let O=a||{},{forwardToReplicas:c}=O,_=wl(O,["forwardToReplicas"]),t=ia.createMappedRequestOptions(_);return c&&(t.queryParameters.forwardToReplicas=1),Nn.createWaitablePromise(i.transporter.write({method:Ur.MethodEnum.Delete,path:Nn.encode("1/indexes/%s/rules/%s",i.indexName,o)},t),(N,M)=>xo(i)(N.taskID,M))},OH=i=>(o,a)=>{let O=a||{},{forwardToReplicas:c}=O,_=wl(O,["forwardToReplicas"]),t=ia.createMappedRequestOptions(_);return c&&(t.queryParameters.forwardToReplicas=1),Nn.createWaitablePromise(i.transporter.write({method:Ur.MethodEnum.Delete,path:Nn.encode("1/indexes/%s/synonyms/%s",i.indexName,o)},t),(N,M)=>xo(i)(N.taskID,M))},MH=i=>o=>r9(i)(o).then(()=>!0).catch(a=>{if(a.status!==404)throw a;return!1}),kH=i=>(o,a)=>{let M=a||{},{query:c,paginate:_}=M,t=wl(M,["query","paginate"]),O=0,N=()=>i9(i)(c||"",Zr(Ht({},t),{page:O})).then(T=>{for(let[B,H]of Object.entries(T.hits))if(o(H))return{object:H,position:parseInt(B,10),page:O};if(O++,_===!1||O>=T.nbPages)throw Q5();return N()});return N()},LH=i=>(o,a)=>i.transporter.read({method:Ur.MethodEnum.Get,path:Nn.encode("1/indexes/%s/%s",i.indexName,o)},a),NH=()=>(i,o)=>{for(let[a,c]of Object.entries(i.hits))if(c.objectID===o)return parseInt(a,10);return-1},FH=i=>(o,a)=>{let O=a||{},{attributesToRetrieve:c}=O,_=wl(O,["attributesToRetrieve"]),t=o.map(N=>Ht({indexName:i.indexName,objectID:N},c?{attributesToRetrieve:c}:{}));return i.transporter.read({method:Ur.MethodEnum.Post,path:"1/indexes/*/objects",data:{requests:t}},_)},PH=i=>(o,a)=>i.transporter.read({method:Ur.MethodEnum.Get,path:Nn.encode("1/indexes/%s/rules/%s",i.indexName,o)},a),r9=i=>o=>i.transporter.read({method:Ur.MethodEnum.Get,path:Nn.encode("1/indexes/%s/settings",i.indexName),data:{getVersion:2}},o),IH=i=>(o,a)=>i.transporter.read({method:Ur.MethodEnum.Get,path:Nn.encode("1/indexes/%s/synonyms/%s",i.indexName,o)},a),u9=i=>(o,a)=>i.transporter.read({method:Ur.MethodEnum.Get,path:Nn.encode("1/indexes/%s/task/%s",i.indexName,o.toString())},a),bH=i=>(o,a)=>Nn.createWaitablePromise(o9(i)([o],a).then(c=>({objectID:c.objectIDs[0],taskID:c.taskIDs[0]})),(c,_)=>xo(i)(c.taskID,_)),o9=i=>(o,a)=>{let O=a||{},{createIfNotExists:c}=O,_=wl(O,["createIfNotExists"]),t=c?fh.PartialUpdateObject:fh.PartialUpdateObjectNoCreate;return B4(i)(o,t,_)},BH=i=>(o,a)=>{let m=a||{},{safe:c,autoGenerateObjectIDIfNotExist:_,batchSize:t}=m,O=wl(m,["safe","autoGenerateObjectIDIfNotExist","batchSize"]),N=(he,De,se,fe)=>Nn.createWaitablePromise(i.transporter.write({method:Ur.MethodEnum.Post,path:Nn.encode("1/indexes/%s/operation",he),data:{operation:se,destination:De}},fe),(_e,ce)=>xo(i)(_e.taskID,ce)),M=Math.random().toString(36).substring(7),T=`${i.indexName}_tmp_${M}`,B=fw({appId:i.appId,transporter:i.transporter,indexName:T}),H=[],q=N(i.indexName,T,"copy",Zr(Ht({},O),{scope:["settings","synonyms","rules"]}));H.push(q);let ne=(c?q.wait(O):q).then(()=>{let he=B(o,Zr(Ht({},O),{autoGenerateObjectIDIfNotExist:_,batchSize:t}));return H.push(he),c?he.wait(O):he}).then(()=>{let he=N(T,i.indexName,"move",O);return H.push(he),c?he.wait(O):he}).then(()=>Promise.all(H)).then(([he,De,se])=>({objectIDs:De.objectIDs,taskIDs:[he.taskID,...De.taskIDs,se.taskID]}));return Nn.createWaitablePromise(ne,(he,De)=>Promise.all(H.map(se=>se.wait(De))))},UH=i=>(o,a)=>cw(i)(o,Zr(Ht({},a),{clearExistingRules:!0})),jH=i=>(o,a)=>dw(i)(o,Zr(Ht({},a),{replaceExistingSynonyms:!0})),zH=i=>(o,a)=>Nn.createWaitablePromise(fw(i)([o],a).then(c=>({objectID:c.objectIDs[0],taskID:c.taskIDs[0]})),(c,_)=>xo(i)(c.taskID,_)),fw=i=>(o,a)=>{let O=a||{},{autoGenerateObjectIDIfNotExist:c}=O,_=wl(O,["autoGenerateObjectIDIfNotExist"]),t=c?fh.AddObject:fh.UpdateObject;if(t===fh.UpdateObject){for(let N of o)if(N.objectID===void 0)return Nn.createWaitablePromise(Promise.reject(X5()))}return B4(i)(o,t,_)},HH=i=>(o,a)=>cw(i)([o],a),cw=i=>(o,a)=>{let N=a||{},{forwardToReplicas:c,clearExistingRules:_}=N,t=wl(N,["forwardToReplicas","clearExistingRules"]),O=ia.createMappedRequestOptions(t);return c&&(O.queryParameters.forwardToReplicas=1),_&&(O.queryParameters.clearExistingRules=1),Nn.createWaitablePromise(i.transporter.write({method:Ur.MethodEnum.Post,path:Nn.encode("1/indexes/%s/rules/batch",i.indexName),data:o},O),(M,T)=>xo(i)(M.taskID,T))},qH=i=>(o,a)=>dw(i)([o],a),dw=i=>(o,a)=>{let N=a||{},{forwardToReplicas:c,replaceExistingSynonyms:_}=N,t=wl(N,["forwardToReplicas","replaceExistingSynonyms"]),O=ia.createMappedRequestOptions(t);return c&&(O.queryParameters.forwardToReplicas=1),_&&(O.queryParameters.replaceExistingSynonyms=1),Nn.createWaitablePromise(i.transporter.write({method:Ur.MethodEnum.Post,path:Nn.encode("1/indexes/%s/synonyms/batch",i.indexName),data:o},O),(M,T)=>xo(i)(M.taskID,T))},i9=i=>(o,a)=>i.transporter.read({method:Ur.MethodEnum.Post,path:Nn.encode("1/indexes/%s/query",i.indexName),data:{query:o},cacheable:!0},a),Z5=i=>(o,a,c)=>i.transporter.read({method:Ur.MethodEnum.Post,path:Nn.encode("1/indexes/%s/facets/%s/query",i.indexName,o),data:{facetQuery:a},cacheable:!0},c),e9=i=>(o,a)=>i.transporter.read({method:Ur.MethodEnum.Post,path:Nn.encode("1/indexes/%s/rules/search",i.indexName),data:{query:o}},a),t9=i=>(o,a)=>i.transporter.read({method:Ur.MethodEnum.Post,path:Nn.encode("1/indexes/%s/synonyms/search",i.indexName),data:{query:o}},a),WH=i=>(o,a)=>{let O=a||{},{forwardToReplicas:c}=O,_=wl(O,["forwardToReplicas"]),t=ia.createMappedRequestOptions(_);return c&&(t.queryParameters.forwardToReplicas=1),Nn.createWaitablePromise(i.transporter.write({method:Ur.MethodEnum.Put,path:Nn.encode("1/indexes/%s/settings",i.indexName),data:o},t),(N,M)=>xo(i)(N.taskID,M))},xo=i=>(o,a)=>Nn.createRetryablePromise(c=>u9(i)(o,a).then(_=>_.status!=="published"?c():void 0)),VH={AddObject:"addObject",Analytics:"analytics",Browser:"browse",DeleteIndex:"deleteIndex",DeleteObject:"deleteObject",EditSettings:"editSettings",ListIndexes:"listIndexes",Logs:"logs",Recommendation:"recommendation",Search:"search",SeeUnretrievableAttributes:"seeUnretrievableAttributes",Settings:"settings",Usage:"usage"},fh={AddObject:"addObject",UpdateObject:"updateObject",PartialUpdateObject:"partialUpdateObject",PartialUpdateObjectNoCreate:"partialUpdateObjectNoCreate",DeleteObject:"deleteObject"},b4={Settings:"settings",Synonyms:"synonyms",Rules:"rules"},GH={None:"none",StopIfEnoughMatches:"stopIfEnoughMatches"},YH={Synonym:"synonym",OneWaySynonym:"oneWaySynonym",AltCorrection1:"altCorrection1",AltCorrection2:"altCorrection2",Placeholder:"placeholder"};tn.ApiKeyACLEnum=VH;tn.BatchActionEnum=fh;tn.ScopeEnum=b4;tn.StrategyEnum=GH;tn.SynonymEnum=YH;tn.addApiKey=Yz;tn.assignUserID=Kz;tn.assignUserIDs=Xz;tn.batch=$5;tn.browseObjects=_H;tn.browseRules=EH;tn.browseSynonyms=DH;tn.chunkedBatch=B4;tn.clearObjects=wH;tn.clearRules=SH;tn.clearSynonyms=TH;tn.copyIndex=I4;tn.copyRules=Qz;tn.copySettings=Jz;tn.copySynonyms=Zz;tn.createBrowsablePromise=P4;tn.createMissingObjectIDError=X5;tn.createObjectNotFoundError=Q5;tn.createSearchClient=Gz;tn.createValidUntilNotFoundError=J5;tn.deleteApiKey=$z;tn.deleteBy=CH;tn.deleteIndex=xH;tn.deleteObject=AH;tn.deleteObjects=n9;tn.deleteRule=RH;tn.deleteSynonym=OH;tn.exists=MH;tn.findObject=kH;tn.generateSecuredApiKey=eH;tn.getApiKey=qy;tn.getLogs=tH;tn.getObject=LH;tn.getObjectPosition=NH;tn.getObjects=FH;tn.getRule=PH;tn.getSecuredApiKeyRemainingValidity=nH;tn.getSettings=r9;tn.getSynonym=IH;tn.getTask=u9;tn.getTopUserIDs=rH;tn.getUserID=iH;tn.hasPendingMappings=uH;tn.initIndex=Wy;tn.listApiKeys=oH;tn.listClusters=lH;tn.listIndices=sH;tn.listUserIDs=aH;tn.moveIndex=fH;tn.multipleBatch=cH;tn.multipleGetObjects=dH;tn.multipleQueries=pH;tn.multipleSearchForFacetValues=hH;tn.partialUpdateObject=bH;tn.partialUpdateObjects=o9;tn.removeUserID=vH;tn.replaceAllObjects=BH;tn.replaceAllRules=UH;tn.replaceAllSynonyms=jH;tn.restoreApiKey=mH;tn.saveObject=zH;tn.saveObjects=fw;tn.saveRule=HH;tn.saveRules=cw;tn.saveSynonym=qH;tn.saveSynonyms=dw;tn.search=i9;tn.searchForFacetValues=Z5;tn.searchRules=e9;tn.searchSynonyms=t9;tn.searchUserIDs=gH;tn.setSettings=WH;tn.updateApiKey=yH;tn.waitTask=xo});var a9=Ke((eY,s9)=>{s9.exports=l9()});var f9=Ke(U4=>{"use strict";Object.defineProperty(U4,"__esModule",{value:!0});function KH(){return{debug(i,o){return Promise.resolve()},info(i,o){return Promise.resolve()},error(i,o){return Promise.resolve()}}}var XH={Debug:1,Info:2,Error:3};U4.LogLevelEnum=XH;U4.createNullLogger=KH});var d9=Ke((nY,c9)=>{c9.exports=f9()});var v9=Ke(pw=>{"use strict";Object.defineProperty(pw,"__esModule",{value:!0});var p9=require("http"),h9=require("https"),QH=require("url");function JH(){let i={keepAlive:!0},o=new p9.Agent(i),a=new h9.Agent(i);return{send(c){return new Promise(_=>{let t=QH.parse(c.url),O=t.query===null?t.pathname:`${t.pathname}?${t.query}`,N=Ht({agent:t.protocol==="https:"?a:o,hostname:t.hostname,path:O,method:c.method,headers:c.headers},t.port!==void 0?{port:t.port||""}:{}),M=(t.protocol==="https:"?h9:p9).request(N,q=>{let ne="";q.on("data",m=>ne+=m),q.on("end",()=>{clearTimeout(B),clearTimeout(H),_({status:q.statusCode||0,content:ne,isTimedOut:!1})})}),T=(q,ne)=>setTimeout(()=>{M.abort(),_({status:0,content:ne,isTimedOut:!0})},q*1e3),B=T(c.connectTimeout,"Connection timeout"),H;M.on("error",q=>{clearTimeout(B),clearTimeout(H),_({status:0,content:q.message,isTimedOut:!1})}),M.once("response",()=>{clearTimeout(B),H=T(c.responseTimeout,"Socket timeout")}),c.data!==void 0&&M.write(c.data),M.end()})},destroy(){return o.destroy(),a.destroy(),Promise.resolve()}}}pw.createNodeHttpRequester=JH});var g9=Ke((iY,m9)=>{m9.exports=v9()});var D9=Ke((uY,y9)=>{"use strict";var _9=g5(),ZH=E5(),im=W5(),hw=By(),vw=K5(),wn=a9(),$H=d9(),eq=g9(),tq=jy();function E9(i,o,a){let c={appId:i,apiKey:o,timeouts:{connect:2,read:5,write:30},requester:eq.createNodeHttpRequester(),logger:$H.createNullLogger(),responsesCache:_9.createNullCache(),requestsCache:_9.createNullCache(),hostsCache:ZH.createInMemoryCache(),userAgent:tq.createUserAgent(hw.version).add({segment:"Node.js",version:process.versions.node})};return wn.createSearchClient(Zr(Ht(Ht({},c),a),{methods:{search:wn.multipleQueries,searchForFacetValues:wn.multipleSearchForFacetValues,multipleBatch:wn.multipleBatch,multipleGetObjects:wn.multipleGetObjects,multipleQueries:wn.multipleQueries,copyIndex:wn.copyIndex,copySettings:wn.copySettings,copyRules:wn.copyRules,copySynonyms:wn.copySynonyms,moveIndex:wn.moveIndex,listIndices:wn.listIndices,getLogs:wn.getLogs,listClusters:wn.listClusters,multipleSearchForFacetValues:wn.multipleSearchForFacetValues,getApiKey:wn.getApiKey,addApiKey:wn.addApiKey,listApiKeys:wn.listApiKeys,updateApiKey:wn.updateApiKey,deleteApiKey:wn.deleteApiKey,restoreApiKey:wn.restoreApiKey,assignUserID:wn.assignUserID,assignUserIDs:wn.assignUserIDs,getUserID:wn.getUserID,searchUserIDs:wn.searchUserIDs,listUserIDs:wn.listUserIDs,getTopUserIDs:wn.getTopUserIDs,removeUserID:wn.removeUserID,hasPendingMappings:wn.hasPendingMappings,generateSecuredApiKey:wn.generateSecuredApiKey,getSecuredApiKeyRemainingValidity:wn.getSecuredApiKeyRemainingValidity,destroy:hw.destroy,initIndex:_=>t=>wn.initIndex(_)(t,{methods:{batch:wn.batch,delete:wn.deleteIndex,getObject:wn.getObject,getObjects:wn.getObjects,saveObject:wn.saveObject,saveObjects:wn.saveObjects,search:wn.search,searchForFacetValues:wn.searchForFacetValues,waitTask:wn.waitTask,setSettings:wn.setSettings,getSettings:wn.getSettings,partialUpdateObject:wn.partialUpdateObject,partialUpdateObjects:wn.partialUpdateObjects,deleteObject:wn.deleteObject,deleteObjects:wn.deleteObjects,deleteBy:wn.deleteBy,clearObjects:wn.clearObjects,browseObjects:wn.browseObjects,getObjectPosition:wn.getObjectPosition,findObject:wn.findObject,exists:wn.exists,saveSynonym:wn.saveSynonym,saveSynonyms:wn.saveSynonyms,getSynonym:wn.getSynonym,searchSynonyms:wn.searchSynonyms,browseSynonyms:wn.browseSynonyms,deleteSynonym:wn.deleteSynonym,clearSynonyms:wn.clearSynonyms,replaceAllObjects:wn.replaceAllObjects,replaceAllSynonyms:wn.replaceAllSynonyms,searchRules:wn.searchRules,getRule:wn.getRule,deleteRule:wn.deleteRule,saveRule:wn.saveRule,saveRules:wn.saveRules,replaceAllRules:wn.replaceAllRules,browseRules:wn.browseRules,clearRules:wn.clearRules}}),initAnalytics:()=>_=>im.createAnalyticsClient(Zr(Ht(Ht({},c),_),{methods:{addABTest:im.addABTest,getABTest:im.getABTest,getABTests:im.getABTests,stopABTest:im.stopABTest,deleteABTest:im.deleteABTest}})),initRecommendation:()=>_=>vw.createRecommendationClient(Zr(Ht(Ht({},c),_),{methods:{getPersonalizationStrategy:vw.getPersonalizationStrategy,setPersonalizationStrategy:vw.setPersonalizationStrategy}}))}}))}E9.version=hw.version;y9.exports=E9});var S9=Ke((oY,mw)=>{var w9=D9();mw.exports=w9;mw.exports.default=w9});var nd=Ke(_w=>{"use strict";Object.defineProperty(_w,"__esModule",{value:!0});_w.default=L9;function L9(){}L9.prototype={diff:function(o,a){var c=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},_=c.callback;typeof c=="function"&&(_=c,c={}),this.options=c;var t=this;function O(he){return _?(setTimeout(function(){_(void 0,he)},0),!0):he}o=this.castInput(o),a=this.castInput(a),o=this.removeEmpty(this.tokenize(o)),a=this.removeEmpty(this.tokenize(a));var N=a.length,M=o.length,T=1,B=N+M,H=[{newPos:-1,components:[]}],q=this.extractCommon(H[0],a,o,0);if(H[0].newPos+1>=N&&q+1>=M)return O([{value:this.join(a),count:a.length}]);function ne(){for(var he=-1*T;he<=T;he+=2){var De=void 0,se=H[he-1],fe=H[he+1],_e=(fe?fe.newPos:0)-he;se&&(H[he-1]=void 0);var ce=se&&se.newPos+1=N&&_e+1>=M)return O(rq(t,De.components,a,o,t.useLongestToken));H[he]=De}T++}if(_)(function he(){setTimeout(function(){if(T>B)return _();ne()||he()},0)})();else for(;T<=B;){var m=ne();if(m)return m}},pushComponent:function(o,a,c){var _=o[o.length-1];_&&_.added===a&&_.removed===c?o[o.length-1]={count:_.count+1,added:a,removed:c}:o.push({count:1,added:a,removed:c})},extractCommon:function(o,a,c,_){for(var t=a.length,O=c.length,N=o.newPos,M=N-_,T=0;N+1ne.length?he:ne}),T.value=i.join(B)}else T.value=i.join(a.slice(N,N+T.count));N+=T.count,T.added||(M+=T.count)}}var q=o[O-1];return O>1&&typeof q.value=="string"&&(q.added||q.removed)&&i.equals("",q.value)&&(o[O-2].value+=q.value,o.pop()),o}function iq(i){return{newPos:i.newPos,components:i.components.slice(0)}}});var F9=Ke(Ky=>{"use strict";Object.defineProperty(Ky,"__esModule",{value:!0});Ky.diffChars=uq;Ky.characterDiff=void 0;var lq=oq(nd());function oq(i){return i&&i.__esModule?i:{default:i}}var N9=new lq.default;Ky.characterDiff=N9;function uq(i,o,a){return N9.diff(i,o,a)}});var Dw=Ke(Ew=>{"use strict";Object.defineProperty(Ew,"__esModule",{value:!0});Ew.generateOptions=sq;function sq(i,o){if(typeof i=="function")o.callback=i;else if(i)for(var a in i)i.hasOwnProperty(a)&&(o[a]=i[a]);return o}});var b9=Ke(um=>{"use strict";Object.defineProperty(um,"__esModule",{value:!0});um.diffWords=aq;um.diffWordsWithSpace=fq;um.wordDiff=void 0;var dq=cq(nd()),pq=Dw();function cq(i){return i&&i.__esModule?i:{default:i}}var P9=/^[A-Za-z\xC0-\u02C6\u02C8-\u02D7\u02DE-\u02FF\u1E00-\u1EFF]+$/,I9=/\S/,Xy=new dq.default;um.wordDiff=Xy;Xy.equals=function(i,o){return this.options.ignoreCase&&(i=i.toLowerCase(),o=o.toLowerCase()),i===o||this.options.ignoreWhitespace&&!I9.test(i)&&!I9.test(o)};Xy.tokenize=function(i){for(var o=i.split(/(\s+|[()[\]{}'"]|\b)/),a=0;a{"use strict";Object.defineProperty(om,"__esModule",{value:!0});om.diffLines=hq;om.diffTrimmedLines=vq;om.lineDiff=void 0;var gq=mq(nd()),yq=Dw();function mq(i){return i&&i.__esModule?i:{default:i}}var z4=new gq.default;om.lineDiff=z4;z4.tokenize=function(i){var o=[],a=i.split(/(\n|\r\n)/);a[a.length-1]||a.pop();for(var c=0;c{"use strict";Object.defineProperty(Qy,"__esModule",{value:!0});Qy.diffSentences=_q;Qy.sentenceDiff=void 0;var Dq=Eq(nd());function Eq(i){return i&&i.__esModule?i:{default:i}}var ww=new Dq.default;Qy.sentenceDiff=ww;ww.tokenize=function(i){return i.split(/(\S.+?[.!?])(?=\s+|$)/)};function _q(i,o,a){return ww.diff(i,o,a)}});var U9=Ke(Jy=>{"use strict";Object.defineProperty(Jy,"__esModule",{value:!0});Jy.diffCss=wq;Jy.cssDiff=void 0;var Tq=Sq(nd());function Sq(i){return i&&i.__esModule?i:{default:i}}var Sw=new Tq.default;Jy.cssDiff=Sw;Sw.tokenize=function(i){return i.split(/([{}:;,]|\s+)/)};function wq(i,o,a){return Sw.diff(i,o,a)}});var z9=Ke(lm=>{"use strict";Object.defineProperty(lm,"__esModule",{value:!0});lm.diffJson=Cq;lm.canonicalize=q4;lm.jsonDiff=void 0;var j9=xq(nd()),Aq=H4();function xq(i){return i&&i.__esModule?i:{default:i}}function W4(i){return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?W4=function(a){return typeof a}:W4=function(a){return a&&typeof Symbol=="function"&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a},W4(i)}var Rq=Object.prototype.toString,dh=new j9.default;lm.jsonDiff=dh;dh.useLongestToken=!0;dh.tokenize=Aq.lineDiff.tokenize;dh.castInput=function(i){var o=this.options,a=o.undefinedReplacement,c=o.stringifyReplacer,_=c===void 0?function(t,O){return typeof O=="undefined"?a:O}:c;return typeof i=="string"?i:JSON.stringify(q4(i,null,null,_),_," ")};dh.equals=function(i,o){return j9.default.prototype.equals.call(dh,i.replace(/,([\r\n])/g,"$1"),o.replace(/,([\r\n])/g,"$1"))};function Cq(i,o,a){return dh.diff(i,o,a)}function q4(i,o,a,c,_){o=o||[],a=a||[],c&&(i=c(_,i));var t;for(t=0;t{"use strict";Object.defineProperty(Zy,"__esModule",{value:!0});Zy.diffArrays=Oq;Zy.arrayDiff=void 0;var kq=Mq(nd());function Mq(i){return i&&i.__esModule?i:{default:i}}var $y=new kq.default;Zy.arrayDiff=$y;$y.tokenize=function(i){return i.slice()};$y.join=$y.removeEmpty=function(i){return i};function Oq(i,o,a){return $y.diff(i,o,a)}});var V4=Ke(Tw=>{"use strict";Object.defineProperty(Tw,"__esModule",{value:!0});Tw.parsePatch=Lq;function Lq(i){var o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},a=i.split(/\r\n|[\n\v\f\r\x85]/),c=i.match(/\r\n|[\n\v\f\r\x85]/g)||[],_=[],t=0;function O(){var T={};for(_.push(T);t{"use strict";Object.defineProperty(Cw,"__esModule",{value:!0});Cw.default=Nq;function Nq(i,o,a){var c=!0,_=!1,t=!1,O=1;return function N(){if(c&&!t){if(_?O++:c=!1,i+O<=a)return O;t=!0}if(!_)return t||(c=!0),o<=i-O?-O++:(_=!0,N())}}});var G9=Ke(G4=>{"use strict";Object.defineProperty(G4,"__esModule",{value:!0});G4.applyPatch=W9;G4.applyPatches=Fq;var V9=V4(),Iq=Pq(q9());function Pq(i){return i&&i.__esModule?i:{default:i}}function W9(i,o){var a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};if(typeof o=="string"&&(o=(0,V9.parsePatch)(o)),Array.isArray(o)){if(o.length>1)throw new Error("applyPatch only works with a single input.");o=o[0]}var c=i.split(/\r\n|[\n\v\f\r\x85]/),_=i.match(/\r\n|[\n\v\f\r\x85]/g)||[],t=o.hunks,O=a.compareLine||function(It,Xt,rt,X){return Xt===X},N=0,M=a.fuzzFactor||0,T=0,B=0,H,q;function ne(It,Xt){for(var rt=0;rt0?X[0]:" ",Ce=X.length>0?X.substr(1):X;if(de===" "||de==="-"){if(!O(Xt+1,c[Xt],de,Ce)&&(N++,N>M))return!1;Xt++}}return!0}for(var m=0;m0?je[0]:" ",Dt=je.length>0?je.substr(1):je,Qe=ie.linedelimiters[Ue];if(at===" ")Oe++;else if(at==="-")c.splice(Oe,1),_.splice(Oe,1);else if(at==="+")c.splice(Oe,0,Dt),_.splice(Oe,0,Qe),Oe++;else if(at==="\\"){var ut=ie.lines[Ue-1]?ie.lines[Ue-1][0]:null;ut==="+"?H=!0:ut==="-"&&(q=!0)}}}if(H)for(;!c[c.length-1];)c.pop(),_.pop();else q&&(c.push(""),_.push(` -`));for(var Ve=0;Ve{"use strict";Object.defineProperty(e_,"__esModule",{value:!0});e_.structuredPatch=Y9;e_.createTwoFilesPatch=K9;e_.createPatch=bq;var Bq=H4();function xw(i){return zq(i)||jq(i)||Uq()}function Uq(){throw new TypeError("Invalid attempt to spread non-iterable instance")}function jq(i){if(Symbol.iterator in Object(i)||Object.prototype.toString.call(i)==="[object Arguments]")return Array.from(i)}function zq(i){if(Array.isArray(i)){for(var o=0,a=new Array(i.length);o0?M(ie.lines.slice(-O.context)):[],B-=q.length,H-=q.length)}(me=q).push.apply(me,xw(ce.map(function(Ve){return(_e.added?"+":"-")+Ve}))),_e.added?m+=ce.length:ne+=ce.length}else{if(B)if(ce.length<=O.context*2&&fe=N.length-2&&ce.length<=O.context){var Dt=/\n$/.test(a),Qe=/\n$/.test(c),ut=ce.length==0&&q.length>at.oldLines;!Dt&&ut&&q.splice(at.oldLines,0,"\\ No newline at end of file"),(!Dt&&!ut||!Qe)&&q.push("\\ No newline at end of file")}T.push(at),B=0,H=0,q=[]}ne+=ce.length,m+=ce.length}},De=0;De{"use strict";Object.defineProperty(Y4,"__esModule",{value:!0});Y4.arrayEqual=Hq;Y4.arrayStartsWith=X9;function Hq(i,o){return i.length!==o.length?!1:X9(i,o)}function X9(i,o){if(o.length>i.length)return!1;for(var a=0;a{"use strict";Object.defineProperty(K4,"__esModule",{value:!0});K4.calcLineCount=J9;K4.merge=qq;var Wq=Aw(),Vq=V4(),Rw=Q9();function sm(i){return Kq(i)||Yq(i)||Gq()}function Gq(){throw new TypeError("Invalid attempt to spread non-iterable instance")}function Yq(i){if(Symbol.iterator in Object(i)||Object.prototype.toString.call(i)==="[object Arguments]")return Array.from(i)}function Kq(i){if(Array.isArray(i)){for(var o=0,a=new Array(i.length);o{"use strict";Object.defineProperty(kw,"__esModule",{value:!0});kw.convertChangesToDMP=Zq;function Zq(i){for(var o=[],a,c,_=0;_{"use strict";Object.defineProperty(Lw,"__esModule",{value:!0});Lw.convertChangesToXML=$q;function $q(i){for(var o=[],a=0;a"):c.removed&&o.push(""),o.push(eW(c.value)),c.added?o.push(""):c.removed&&o.push("")}return o.join("")}function eW(i){var o=i;return o=o.replace(/&/g,"&"),o=o.replace(//g,">"),o=o.replace(/"/g,"""),o}});var hA=Ke(G0=>{"use strict";Object.defineProperty(G0,"__esModule",{value:!0});Object.defineProperty(G0,"Diff",{enumerable:!0,get:function(){return tW.default}});Object.defineProperty(G0,"diffChars",{enumerable:!0,get:function(){return nW.diffChars}});Object.defineProperty(G0,"diffWords",{enumerable:!0,get:function(){return fA.diffWords}});Object.defineProperty(G0,"diffWordsWithSpace",{enumerable:!0,get:function(){return fA.diffWordsWithSpace}});Object.defineProperty(G0,"diffLines",{enumerable:!0,get:function(){return cA.diffLines}});Object.defineProperty(G0,"diffTrimmedLines",{enumerable:!0,get:function(){return cA.diffTrimmedLines}});Object.defineProperty(G0,"diffSentences",{enumerable:!0,get:function(){return rW.diffSentences}});Object.defineProperty(G0,"diffCss",{enumerable:!0,get:function(){return iW.diffCss}});Object.defineProperty(G0,"diffJson",{enumerable:!0,get:function(){return dA.diffJson}});Object.defineProperty(G0,"canonicalize",{enumerable:!0,get:function(){return dA.canonicalize}});Object.defineProperty(G0,"diffArrays",{enumerable:!0,get:function(){return uW.diffArrays}});Object.defineProperty(G0,"applyPatch",{enumerable:!0,get:function(){return pA.applyPatch}});Object.defineProperty(G0,"applyPatches",{enumerable:!0,get:function(){return pA.applyPatches}});Object.defineProperty(G0,"parsePatch",{enumerable:!0,get:function(){return oW.parsePatch}});Object.defineProperty(G0,"merge",{enumerable:!0,get:function(){return lW.merge}});Object.defineProperty(G0,"structuredPatch",{enumerable:!0,get:function(){return Nw.structuredPatch}});Object.defineProperty(G0,"createTwoFilesPatch",{enumerable:!0,get:function(){return Nw.createTwoFilesPatch}});Object.defineProperty(G0,"createPatch",{enumerable:!0,get:function(){return Nw.createPatch}});Object.defineProperty(G0,"convertChangesToDMP",{enumerable:!0,get:function(){return sW.convertChangesToDMP}});Object.defineProperty(G0,"convertChangesToXML",{enumerable:!0,get:function(){return aW.convertChangesToXML}});var tW=fW(nd()),nW=F9(),fA=b9(),cA=H4(),rW=B9(),iW=U9(),dA=z9(),uW=H9(),pA=G9(),oW=V4(),lW=lA(),Nw=Aw(),sW=sA(),aW=aA();function fW(i){return i&&i.__esModule?i:{default:i}}});var dW={};uI(dW,{default:()=>hW});var C9=ou(require("@yarnpkg/cli")),ch=ou(require("@yarnpkg/core"));var i5=ou(sc()),lh=ou(ki()),C4=(0,lh.memo)(({active:i})=>{let o=(0,lh.useMemo)(()=>i?"\u25C9":"\u25EF",[i]),a=(0,lh.useMemo)(()=>i?"green":"yellow",[i]);return lh.default.createElement(i5.Text,{color:a},o)});var y2=ou(sc()),ra=ou(ki());var u5=ou(sc()),x4=ou(ki());function g2({active:i},o,a){let{stdin:c}=(0,u5.useStdin)(),_=(0,x4.useCallback)((t,O)=>o(t,O),a);(0,x4.useEffect)(()=>{if(!(!i||!c))return c.on("keypress",_),()=>{c.off("keypress",_)}},[i,_,c])}var A4;(function(a){a.BEFORE="before",a.AFTER="after"})(A4||(A4={}));var o5=function({active:i},o,a){g2({active:i},(c,_)=>{_.name==="tab"&&(_.shift?o(A4.BEFORE):o(A4.AFTER))},a)};var R4=function(i,o,{active:a,minus:c,plus:_,set:t,loop:O=!0}){g2({active:a},(N,M)=>{let T=o.indexOf(i);switch(M.name){case c:{let B=T-1;if(O){t(o[(o.length+B)%o.length]);return}if(B<0)return;t(o[B])}break;case _:{let B=T+1;if(O){t(o[B%o.length]);return}if(B>=o.length)return;t(o[B])}break}},[o,i,_,t,O])};var O4=({active:i=!0,children:o=[],radius:a=10,size:c=1,loop:_=!0,onFocusRequest:t,willReachEnd:O})=>{let N=De=>{if(De.key===null)throw new Error("Expected all children to have a key");return De.key},M=ra.default.Children.map(o,De=>N(De)),T=M[0],[B,H]=(0,ra.useState)(T),q=M.indexOf(B);(0,ra.useEffect)(()=>{M.includes(B)||H(T)},[o]),(0,ra.useEffect)(()=>{O&&q>=M.length-2&&O()},[q]),o5({active:i&&!!t},De=>{t==null||t(De)},[t]),R4(B,M,{active:i,minus:"up",plus:"down",set:H,loop:_});let ne=q-a,m=q+a;m>M.length&&(ne-=m-M.length,m=M.length),ne<0&&(m+=-ne,ne=0),m>=M.length&&(m=M.length-1);let he=[];for(let De=ne;De<=m;++De){let se=M[De],fe=i&&se===B;he.push(ra.default.createElement(y2.Box,{key:se,height:c},ra.default.createElement(y2.Box,{marginLeft:1,marginRight:1},ra.default.createElement(y2.Text,null,fe?ra.default.createElement(y2.Text,{color:"cyan",bold:!0},">"):" ")),ra.default.createElement(y2.Box,null,ra.default.cloneElement(o[De],{active:fe}))))}return ra.default.createElement(y2.Box,{flexDirection:"column",width:"100%"},he)};var M4=ou(ki());var l5=ou(sc()),td=ou(ki()),s5=ou(require("readline")),Z3=td.default.createContext(null),a5=({children:i})=>{let{stdin:o,setRawMode:a}=(0,l5.useStdin)();(0,td.useEffect)(()=>{a&&a(!0),o&&(0,s5.emitKeypressEvents)(o)},[o,a]);let[c,_]=(0,td.useState)(new Map),t=(0,td.useMemo)(()=>({getAll:()=>c,get:O=>c.get(O),set:(O,N)=>_(new Map([...c,[O,N]]))}),[c,_]);return td.default.createElement(Z3.Provider,{value:t,children:i})};function sh(i,o){let a=(0,M4.useContext)(Z3);if(a===null)throw new Error("Expected this hook to run with a ministore context attached");if(typeof i=="undefined")return a.getAll();let c=(0,M4.useCallback)(t=>{a.set(i,t)},[i,a.set]),_=a.get(i);return typeof _=="undefined"&&(_=o),[_,c]}var k4=ou(sc()),$3=ou(ki());async function L4(i,o){let a,c=t=>{let{exit:O}=(0,k4.useApp)();g2({active:!0},(N,M)=>{M.name==="return"&&(a=t,O())},[O,t])},{waitUntilExit:_}=(0,k4.render)($3.default.createElement(a5,null,$3.default.createElement(i,Zr(Ht({},o),{useSubmit:c}))));return await _(),a}var x9=ou(require("clipanion")),A9=ou(p5()),or=ou(sc()),En=ou(ki());var T9=ou(S9()),gw={appId:"OFCNCOG2CU",apiKey:"6fe4476ee5a1832882e326b506d14126",indexName:"npm-search"},nq=(0,T9.default)(gw.appId,gw.apiKey).initIndex(gw.indexName),yw=async(i,o=0)=>await nq.search(i,{analyticsTags:["yarn-plugin-interactive-tools"],attributesToRetrieve:["name","version","owner","repository","humanDownloadsLast30Days"],page:o,hitsPerPage:10});var Vy=["regular","dev","peer"],Gy=class extends C9.BaseCommand{async execute(){let o=await ch.Configuration.find(this.context.cwd,this.context.plugins),a=()=>En.default.createElement(or.Box,{flexDirection:"row"},En.default.createElement(or.Box,{flexDirection:"column",width:48},En.default.createElement(or.Box,null,En.default.createElement(or.Text,null,"Press ",En.default.createElement(or.Text,{bold:!0,color:"cyanBright"},""),"/",En.default.createElement(or.Text,{bold:!0,color:"cyanBright"},"")," to move between packages.")),En.default.createElement(or.Box,null,En.default.createElement(or.Text,null,"Press ",En.default.createElement(or.Text,{bold:!0,color:"cyanBright"},"")," to select a package.")),En.default.createElement(or.Box,null,En.default.createElement(or.Text,null,"Press ",En.default.createElement(or.Text,{bold:!0,color:"cyanBright"},"")," again to change the target."))),En.default.createElement(or.Box,{flexDirection:"column"},En.default.createElement(or.Box,{marginLeft:1},En.default.createElement(or.Text,null,"Press ",En.default.createElement(or.Text,{bold:!0,color:"cyanBright"},"")," to install the selected packages.")),En.default.createElement(or.Box,{marginLeft:1},En.default.createElement(or.Text,null,"Press ",En.default.createElement(or.Text,{bold:!0,color:"cyanBright"},"")," to abort.")))),c=()=>En.default.createElement(En.default.Fragment,null,En.default.createElement(or.Box,{width:15},En.default.createElement(or.Text,{bold:!0,underline:!0,color:"gray"},"Owner")),En.default.createElement(or.Box,{width:11},En.default.createElement(or.Text,{bold:!0,underline:!0,color:"gray"},"Version")),En.default.createElement(or.Box,{width:10},En.default.createElement(or.Text,{bold:!0,underline:!0,color:"gray"},"Downloads"))),_=()=>En.default.createElement(or.Box,{width:17},En.default.createElement(or.Text,{bold:!0,underline:!0,color:"gray"},"Target")),t=({hit:ne,active:m})=>{let[he,De]=sh(ne.name,null);g2({active:m},(_e,ce)=>{if(ce.name!=="space")return;if(!he){De(Vy[0]);return}let me=Vy.indexOf(he)+1;me===Vy.length?De(null):De(Vy[me])},[he,De]);let se=ch.structUtils.parseIdent(ne.name),fe=ch.structUtils.prettyIdent(o,se);return En.default.createElement(or.Box,null,En.default.createElement(or.Box,{width:45},En.default.createElement(or.Text,{bold:!0,wrap:"wrap"},fe)),En.default.createElement(or.Box,{width:14,marginLeft:1},En.default.createElement(or.Text,{bold:!0,wrap:"truncate"},ne.owner.name)),En.default.createElement(or.Box,{width:10,marginLeft:1},En.default.createElement(or.Text,{italic:!0,wrap:"truncate"},ne.version)),En.default.createElement(or.Box,{width:16,marginLeft:1},En.default.createElement(or.Text,null,ne.humanDownloadsLast30Days)))},O=({name:ne,active:m})=>{let[he]=sh(ne,null),De=ch.structUtils.parseIdent(ne);return En.default.createElement(or.Box,null,En.default.createElement(or.Box,{width:47},En.default.createElement(or.Text,{bold:!0}," - ",ch.structUtils.prettyIdent(o,De))),Vy.map(se=>En.default.createElement(or.Box,{key:se,width:14,marginLeft:1},En.default.createElement(or.Text,null," ",En.default.createElement(C4,{active:he===se})," ",En.default.createElement(or.Text,{bold:!0},se)))))},N=()=>En.default.createElement(or.Box,{marginTop:1},En.default.createElement(or.Text,null,"Powered by Algolia.")),T=await L4(({useSubmit:ne})=>{let m=sh();ne(m);let he=Array.from(m.keys()).filter(je=>m.get(je)!==null),[De,se]=(0,En.useState)(""),[fe,_e]=(0,En.useState)(0),[ce,me]=(0,En.useState)([]),ie=je=>{je.match(/\t| /)||se(je)},Oe=async()=>{_e(0);let je=await yw(De);je.query===De&&me(je.hits)},Ue=async()=>{let je=await yw(De,fe+1);je.query===De&&je.page-1===fe&&(_e(je.page),me([...ce,...je.hits]))};return(0,En.useEffect)(()=>{De?Oe():me([])},[De]),En.default.createElement(or.Box,{flexDirection:"column"},En.default.createElement(a,null),En.default.createElement(or.Box,{flexDirection:"row",marginTop:1},En.default.createElement(or.Text,{bold:!0},"Search: "),En.default.createElement(or.Box,{width:41},En.default.createElement(A9.default,{value:De,onChange:ie,placeholder:"i.e. babel, webpack, react...",showCursor:!1})),En.default.createElement(c,null)),ce.length?En.default.createElement(O4,{radius:2,loop:!1,children:ce.map(je=>En.default.createElement(t,{key:je.name,hit:je,active:!1})),willReachEnd:Ue}):En.default.createElement(or.Text,{color:"gray"},"Start typing..."),En.default.createElement(or.Box,{flexDirection:"row",marginTop:1},En.default.createElement(or.Box,{width:49},En.default.createElement(or.Text,{bold:!0},"Selected:")),En.default.createElement(_,null)),he.length?he.map(je=>En.default.createElement(O,{key:je,name:je,active:!1})):En.default.createElement(or.Text,{color:"gray"},"No selected packages..."),En.default.createElement(N,null))},{});if(typeof T=="undefined")return 1;let B=Array.from(T.keys()).filter(ne=>T.get(ne)==="regular"),H=Array.from(T.keys()).filter(ne=>T.get(ne)==="dev"),q=Array.from(T.keys()).filter(ne=>T.get(ne)==="peer");return B.length&&await this.cli.run(["add",...B]),H.length&&await this.cli.run(["add","--dev",...H]),q&&await this.cli.run(["add","--peer",...q]),0}};Gy.paths=[["search"]],Gy.usage=x9.Command.Usage({category:"Interactive commands",description:"open the search interface",details:` - This command opens a fullscreen terminal interface where you can search for and install packages from the npm registry. - `,examples:[["Open the search window","yarn search"]]});var R9=Gy;var Q4=ou(require("@yarnpkg/cli")),Ao=ou(require("@yarnpkg/core"));var Yy=ou(sc()),E2=ou(ki());var O9=ou(sc()),M9=ou(ki()),j4=({length:i,active:o})=>{if(i===0)return null;let a=i>1?` ${"-".repeat(i-1)}`:" ";return M9.default.createElement(O9.Text,{dimColor:!o},a)};var k9=function({active:i,skewer:o,options:a,value:c,onChange:_,sizes:t=[]}){let O=a.filter(({label:M})=>!!M).map(({value:M})=>M),N=a.findIndex(M=>M.value===c&&M.label!="");return R4(c,O,{active:i,minus:"left",plus:"right",set:_}),E2.default.createElement(E2.default.Fragment,null,a.map(({label:M},T)=>{let B=T===N,H=t[T]-1||0,q=M.replace(/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g,""),ne=Math.max(0,H-q.length-2);return M?E2.default.createElement(Yy.Box,{key:M,width:H,marginLeft:1},E2.default.createElement(Yy.Text,{wrap:"truncate"},E2.default.createElement(C4,{active:B})," ",M),o?E2.default.createElement(j4,{active:i,length:ne}):null):E2.default.createElement(Yy.Box,{key:`spacer-${T}`,width:H,marginLeft:1})}))};var vA=ou(require("@yarnpkg/plugin-essentials")),mA=ou(require("clipanion")),gA=ou(hA()),xi=ou(sc()),gr=ou(ki()),yA=ou(require("semver")),_A=/^((?:[\^~]|>=?)?)([0-9]+)(\.[0-9]+)(\.[0-9]+)((?:-\S+)?)$/,cW=10,t_=class extends Q4.BaseCommand{async execute(){let o=await Ao.Configuration.find(this.context.cwd,this.context.plugins),{project:a,workspace:c}=await Ao.Project.find(o,this.context.cwd),_=await Ao.Cache.find(o);if(!c)throw new Q4.WorkspaceRequiredError(a.cwd,this.context.cwd);await a.restoreInstallState({restoreResolutions:!1});let t=(se,fe)=>{let _e=(0,gA.diffWords)(se,fe),ce="";for(let me of _e)me.added?ce+=Ao.formatUtils.pretty(o,me.value,"green"):me.removed||(ce+=me.value);return ce},O=(se,fe)=>{if(se===fe)return fe;let _e=Ao.structUtils.parseRange(se),ce=Ao.structUtils.parseRange(fe),me=_e.selector.match(_A),ie=ce.selector.match(_A);if(!me||!ie)return t(se,fe);let Oe=["gray","red","yellow","green","magenta"],Ue=null,je="";for(let at=1;at{let ce=await vA.suggestUtils.fetchDescriptorFrom(se,_e,{project:a,cache:_,preserveModifier:fe,workspace:c});return ce!==null?ce.range:se.range},M=async se=>{let fe=yA.default.valid(se.range)?`^${se.range}`:se.range,[_e,ce]=await Promise.all([N(se,se.range,fe).catch(()=>null),N(se,se.range,"latest").catch(()=>null)]),me=[{value:null,label:se.range}];return _e&&_e!==se.range?me.push({value:_e,label:O(se.range,_e)}):me.push({value:null,label:""}),ce&&ce!==_e&&ce!==se.range?me.push({value:ce,label:O(se.range,ce)}):me.push({value:null,label:""}),me},T=()=>gr.default.createElement(xi.Box,{flexDirection:"row"},gr.default.createElement(xi.Box,{flexDirection:"column",width:49},gr.default.createElement(xi.Box,{marginLeft:1},gr.default.createElement(xi.Text,null,"Press ",gr.default.createElement(xi.Text,{bold:!0,color:"cyanBright"},""),"/",gr.default.createElement(xi.Text,{bold:!0,color:"cyanBright"},"")," to select packages.")),gr.default.createElement(xi.Box,{marginLeft:1},gr.default.createElement(xi.Text,null,"Press ",gr.default.createElement(xi.Text,{bold:!0,color:"cyanBright"},""),"/",gr.default.createElement(xi.Text,{bold:!0,color:"cyanBright"},"")," to select versions."))),gr.default.createElement(xi.Box,{flexDirection:"column"},gr.default.createElement(xi.Box,{marginLeft:1},gr.default.createElement(xi.Text,null,"Press ",gr.default.createElement(xi.Text,{bold:!0,color:"cyanBright"},"")," to install.")),gr.default.createElement(xi.Box,{marginLeft:1},gr.default.createElement(xi.Text,null,"Press ",gr.default.createElement(xi.Text,{bold:!0,color:"cyanBright"},"")," to abort.")))),B=()=>gr.default.createElement(xi.Box,{flexDirection:"row",paddingTop:1,paddingBottom:1},gr.default.createElement(xi.Box,{width:50},gr.default.createElement(xi.Text,{bold:!0},gr.default.createElement(xi.Text,{color:"greenBright"},"?")," Pick the packages you want to upgrade.")),gr.default.createElement(xi.Box,{width:17},gr.default.createElement(xi.Text,{bold:!0,underline:!0,color:"gray"},"Current")),gr.default.createElement(xi.Box,{width:17},gr.default.createElement(xi.Text,{bold:!0,underline:!0,color:"gray"},"Range")),gr.default.createElement(xi.Box,{width:17},gr.default.createElement(xi.Text,{bold:!0,underline:!0,color:"gray"},"Latest"))),H=({active:se,descriptor:fe,suggestions:_e})=>{let[ce,me]=sh(fe.descriptorHash,null),ie=Ao.structUtils.stringifyIdent(fe),Oe=Math.max(0,45-ie.length);return gr.default.createElement(gr.default.Fragment,null,gr.default.createElement(xi.Box,null,gr.default.createElement(xi.Box,{width:45},gr.default.createElement(xi.Text,{bold:!0},Ao.structUtils.prettyIdent(o,fe)),gr.default.createElement(j4,{active:se,length:Oe})),_e!==null?gr.default.createElement(k9,{active:se,options:_e,value:ce,skewer:!0,onChange:me,sizes:[17,17,17]}):gr.default.createElement(xi.Box,{marginLeft:2},gr.default.createElement(xi.Text,{color:"gray"},"Fetching suggestions..."))))},q=({dependencies:se})=>{let[fe,_e]=(0,gr.useState)(null),ce=(0,gr.useRef)(!0);return(0,gr.useEffect)(()=>()=>{ce.current=!1}),(0,gr.useEffect)(()=>{Promise.all(se.map(me=>M(me))).then(me=>{let ie=se.map((Oe,Ue)=>{let je=me[Ue];return[Oe,je]}).filter(([Oe,Ue])=>Ue.filter(je=>je.label!=="").length>1);ce.current&&_e(ie)})},[]),fe?fe.length?gr.default.createElement(O4,{radius:cW,children:fe.map(([me,ie])=>gr.default.createElement(H,{key:me.descriptorHash,active:!1,descriptor:me,suggestions:ie}))}):gr.default.createElement(xi.Text,null,"No upgrades found"):gr.default.createElement(xi.Text,null,"Fetching suggestions...")},m=await L4(({useSubmit:se})=>{se(sh());let fe=new Map;for(let ce of a.workspaces)for(let me of["dependencies","devDependencies"])for(let ie of ce.manifest[me].values())a.tryWorkspaceByDescriptor(ie)===null&&fe.set(ie.descriptorHash,ie);let _e=Ao.miscUtils.sortMap(fe.values(),ce=>Ao.structUtils.stringifyDescriptor(ce));return gr.default.createElement(xi.Box,{flexDirection:"column"},gr.default.createElement(T,null),gr.default.createElement(B,null),gr.default.createElement(q,{dependencies:_e}))},{});if(typeof m=="undefined")return 1;let he=!1;for(let se of a.workspaces)for(let fe of["dependencies","devDependencies"]){let _e=se.manifest[fe];for(let ce of _e.values()){let me=m.get(ce.descriptorHash);typeof me!="undefined"&&me!==null&&(_e.set(ce.identHash,Ao.structUtils.makeDescriptor(ce,me)),he=!0)}}return he?(await Ao.StreamReport.start({configuration:o,stdout:this.context.stdout,includeLogs:!this.context.quiet},async se=>{await a.install({cache:_,report:se})})).exitCode():0}};t_.paths=[["upgrade-interactive"]],t_.usage=mA.Command.Usage({category:"Interactive commands",description:"open the upgrade interface",details:` - This command opens a fullscreen terminal interface where you can see any out of date packages used by your application, their status compared to the latest versions available on the remote registry, and select packages to upgrade. - `,examples:[["Open the upgrade window","yarn upgrade-interactive"]]});var EA=t_;var pW={commands:[R9,EA]},hW=pW;return dW;})(); -/* -object-assign -(c) Sindre Sorhus -@license MIT -*/ -/** - * @license - * Lodash - * Copyright OpenJS Foundation and other contributors - * Released under MIT license - * Based on Underscore.js 1.8.3 - * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - */ -/** @license React v0.0.0-experimental-51a3aa6af - * react-debug-tools.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -/** @license React v0.0.0-experimental-51a3aa6af - * react-is.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -/** @license React v0.0.0-experimental-51a3aa6af - * react.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -/** @license React v0.18.0 - * scheduler-tracing.development.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -/** @license React v0.18.0 - * scheduler-tracing.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -/** @license React v0.18.0 - * scheduler.development.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -/** @license React v0.18.0 - * scheduler.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -/** @license React v0.24.0 - * react-reconciler.development.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -/** @license React v0.24.0 - * react-reconciler.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -/** @license React v16.13.1 - * react.development.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -/** @license React v16.13.1 - * react.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -return plugin; -} -}; diff --git a/.yarn/plugins/@yarnpkg/plugin-typescript.cjs b/.yarn/plugins/@yarnpkg/plugin-typescript.cjs deleted file mode 100644 index 5c1859e0b90d1..0000000000000 --- a/.yarn/plugins/@yarnpkg/plugin-typescript.cjs +++ /dev/null @@ -1,9 +0,0 @@ -/* eslint-disable */ -//prettier-ignore -module.exports = { -name: "@yarnpkg/plugin-typescript", -factory: function (require) { -var plugin=(()=>{var Ft=Object.create,H=Object.defineProperty,Bt=Object.defineProperties,Kt=Object.getOwnPropertyDescriptor,zt=Object.getOwnPropertyDescriptors,Gt=Object.getOwnPropertyNames,Q=Object.getOwnPropertySymbols,$t=Object.getPrototypeOf,ne=Object.prototype.hasOwnProperty,De=Object.prototype.propertyIsEnumerable;var Re=(e,t,r)=>t in e?H(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,u=(e,t)=>{for(var r in t||(t={}))ne.call(t,r)&&Re(e,r,t[r]);if(Q)for(var r of Q(t))De.call(t,r)&&Re(e,r,t[r]);return e},g=(e,t)=>Bt(e,zt(t)),Lt=e=>H(e,"__esModule",{value:!0});var R=(e,t)=>{var r={};for(var s in e)ne.call(e,s)&&t.indexOf(s)<0&&(r[s]=e[s]);if(e!=null&&Q)for(var s of Q(e))t.indexOf(s)<0&&De.call(e,s)&&(r[s]=e[s]);return r};var I=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Vt=(e,t)=>{for(var r in t)H(e,r,{get:t[r],enumerable:!0})},Qt=(e,t,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of Gt(t))!ne.call(e,s)&&s!=="default"&&H(e,s,{get:()=>t[s],enumerable:!(r=Kt(t,s))||r.enumerable});return e},C=e=>Qt(Lt(H(e!=null?Ft($t(e)):{},"default",e&&e.__esModule&&"default"in e?{get:()=>e.default,enumerable:!0}:{value:e,enumerable:!0})),e);var xe=I(J=>{"use strict";Object.defineProperty(J,"__esModule",{value:!0});function _(e){let t=[...e.caches],r=t.shift();return r===void 0?ve():{get(s,n,a={miss:()=>Promise.resolve()}){return r.get(s,n,a).catch(()=>_({caches:t}).get(s,n,a))},set(s,n){return r.set(s,n).catch(()=>_({caches:t}).set(s,n))},delete(s){return r.delete(s).catch(()=>_({caches:t}).delete(s))},clear(){return r.clear().catch(()=>_({caches:t}).clear())}}}function ve(){return{get(e,t,r={miss:()=>Promise.resolve()}){return t().then(n=>Promise.all([n,r.miss(n)])).then(([n])=>n)},set(e,t){return Promise.resolve(t)},delete(e){return Promise.resolve()},clear(){return Promise.resolve()}}}J.createFallbackableCache=_;J.createNullCache=ve});var Ee=I(($s,qe)=>{qe.exports=xe()});var Te=I(ae=>{"use strict";Object.defineProperty(ae,"__esModule",{value:!0});function Jt(e={serializable:!0}){let t={};return{get(r,s,n={miss:()=>Promise.resolve()}){let a=JSON.stringify(r);if(a in t)return Promise.resolve(e.serializable?JSON.parse(t[a]):t[a]);let o=s(),d=n&&n.miss||(()=>Promise.resolve());return o.then(y=>d(y)).then(()=>o)},set(r,s){return t[JSON.stringify(r)]=e.serializable?JSON.stringify(s):s,Promise.resolve(s)},delete(r){return delete t[JSON.stringify(r)],Promise.resolve()},clear(){return t={},Promise.resolve()}}}ae.createInMemoryCache=Jt});var we=I((Vs,Me)=>{Me.exports=Te()});var Ce=I(M=>{"use strict";Object.defineProperty(M,"__esModule",{value:!0});function Xt(e,t,r){let s={"x-algolia-api-key":r,"x-algolia-application-id":t};return{headers(){return e===oe.WithinHeaders?s:{}},queryParameters(){return e===oe.WithinQueryParameters?s:{}}}}function Yt(e){let t=0,r=()=>(t++,new Promise(s=>{setTimeout(()=>{s(e(r))},Math.min(100*t,1e3))}));return e(r)}function ke(e,t=(r,s)=>Promise.resolve()){return Object.assign(e,{wait(r){return ke(e.then(s=>Promise.all([t(s,r),s])).then(s=>s[1]))}})}function Zt(e){let t=e.length-1;for(t;t>0;t--){let r=Math.floor(Math.random()*(t+1)),s=e[t];e[t]=e[r],e[r]=s}return e}function er(e,t){return Object.keys(t!==void 0?t:{}).forEach(r=>{e[r]=t[r](e)}),e}function tr(e,...t){let r=0;return e.replace(/%s/g,()=>encodeURIComponent(t[r++]))}var rr="4.2.0",sr=e=>()=>e.transporter.requester.destroy(),oe={WithinQueryParameters:0,WithinHeaders:1};M.AuthMode=oe;M.addMethods=er;M.createAuth=Xt;M.createRetryablePromise=Yt;M.createWaitablePromise=ke;M.destroy=sr;M.encode=tr;M.shuffle=Zt;M.version=rr});var F=I((Js,Ue)=>{Ue.exports=Ce()});var Ne=I(ie=>{"use strict";Object.defineProperty(ie,"__esModule",{value:!0});var nr={Delete:"DELETE",Get:"GET",Post:"POST",Put:"PUT"};ie.MethodEnum=nr});var B=I((Ys,We)=>{We.exports=Ne()});var Ze=I(A=>{"use strict";Object.defineProperty(A,"__esModule",{value:!0});var He=B();function ce(e,t){let r=e||{},s=r.data||{};return Object.keys(r).forEach(n=>{["timeout","headers","queryParameters","data","cacheable"].indexOf(n)===-1&&(s[n]=r[n])}),{data:Object.entries(s).length>0?s:void 0,timeout:r.timeout||t,headers:r.headers||{},queryParameters:r.queryParameters||{},cacheable:r.cacheable}}var X={Read:1,Write:2,Any:3},U={Up:1,Down:2,Timeouted:3},_e=2*60*1e3;function ue(e,t=U.Up){return g(u({},e),{status:t,lastUpdate:Date.now()})}function Fe(e){return e.status===U.Up||Date.now()-e.lastUpdate>_e}function Be(e){return e.status===U.Timeouted&&Date.now()-e.lastUpdate<=_e}function le(e){return{protocol:e.protocol||"https",url:e.url,accept:e.accept||X.Any}}function ar(e,t){return Promise.all(t.map(r=>e.get(r,()=>Promise.resolve(ue(r))))).then(r=>{let s=r.filter(d=>Fe(d)),n=r.filter(d=>Be(d)),a=[...s,...n],o=a.length>0?a.map(d=>le(d)):t;return{getTimeout(d,y){return(n.length===0&&d===0?1:n.length+3+d)*y},statelessHosts:o}})}var or=({isTimedOut:e,status:t})=>!e&&~~t==0,ir=e=>{let t=e.status;return e.isTimedOut||or(e)||~~(t/100)!=2&&~~(t/100)!=4},cr=({status:e})=>~~(e/100)==2,ur=(e,t)=>ir(e)?t.onRetry(e):cr(e)?t.onSucess(e):t.onFail(e);function Qe(e,t,r,s){let n=[],a=$e(r,s),o=Le(e,s),d=r.method,y=r.method!==He.MethodEnum.Get?{}:u(u({},r.data),s.data),b=u(u(u({"x-algolia-agent":e.userAgent.value},e.queryParameters),y),s.queryParameters),f=0,p=(h,S)=>{let O=h.pop();if(O===void 0)throw Ve(de(n));let P={data:a,headers:o,method:d,url:Ge(O,r.path,b),connectTimeout:S(f,e.timeouts.connect),responseTimeout:S(f,s.timeout)},x=j=>{let T={request:P,response:j,host:O,triesLeft:h.length};return n.push(T),T},v={onSucess:j=>Ke(j),onRetry(j){let T=x(j);return j.isTimedOut&&f++,Promise.all([e.logger.info("Retryable failure",pe(T)),e.hostsCache.set(O,ue(O,j.isTimedOut?U.Timeouted:U.Down))]).then(()=>p(h,S))},onFail(j){throw x(j),ze(j,de(n))}};return e.requester.send(P).then(j=>ur(j,v))};return ar(e.hostsCache,t).then(h=>p([...h.statelessHosts].reverse(),h.getTimeout))}function lr(e){let{hostsCache:t,logger:r,requester:s,requestsCache:n,responsesCache:a,timeouts:o,userAgent:d,hosts:y,queryParameters:b,headers:f}=e,p={hostsCache:t,logger:r,requester:s,requestsCache:n,responsesCache:a,timeouts:o,userAgent:d,headers:f,queryParameters:b,hosts:y.map(h=>le(h)),read(h,S){let O=ce(S,p.timeouts.read),P=()=>Qe(p,p.hosts.filter(j=>(j.accept&X.Read)!=0),h,O);if((O.cacheable!==void 0?O.cacheable:h.cacheable)!==!0)return P();let v={request:h,mappedRequestOptions:O,transporter:{queryParameters:p.queryParameters,headers:p.headers}};return p.responsesCache.get(v,()=>p.requestsCache.get(v,()=>p.requestsCache.set(v,P()).then(j=>Promise.all([p.requestsCache.delete(v),j]),j=>Promise.all([p.requestsCache.delete(v),Promise.reject(j)])).then(([j,T])=>T)),{miss:j=>p.responsesCache.set(v,j)})},write(h,S){return Qe(p,p.hosts.filter(O=>(O.accept&X.Write)!=0),h,ce(S,p.timeouts.write))}};return p}function dr(e){let t={value:`Algolia for JavaScript (${e})`,add(r){let s=`; ${r.segment}${r.version!==void 0?` (${r.version})`:""}`;return t.value.indexOf(s)===-1&&(t.value=`${t.value}${s}`),t}};return t}function Ke(e){try{return JSON.parse(e.content)}catch(t){throw Je(t.message,e)}}function ze({content:e,status:t},r){let s=e;try{s=JSON.parse(e).message}catch(n){}return Xe(s,t,r)}function pr(e,...t){let r=0;return e.replace(/%s/g,()=>encodeURIComponent(t[r++]))}function Ge(e,t,r){let s=Ye(r),n=`${e.protocol}://${e.url}/${t.charAt(0)==="/"?t.substr(1):t}`;return s.length&&(n+=`?${s}`),n}function Ye(e){let t=r=>Object.prototype.toString.call(r)==="[object Object]"||Object.prototype.toString.call(r)==="[object Array]";return Object.keys(e).map(r=>pr("%s=%s",r,t(e[r])?JSON.stringify(e[r]):e[r])).join("&")}function $e(e,t){if(e.method===He.MethodEnum.Get||e.data===void 0&&t.data===void 0)return;let r=Array.isArray(e.data)?e.data:u(u({},e.data),t.data);return JSON.stringify(r)}function Le(e,t){let r=u(u({},e.headers),t.headers),s={};return Object.keys(r).forEach(n=>{let a=r[n];s[n.toLowerCase()]=a}),s}function de(e){return e.map(t=>pe(t))}function pe(e){let t=e.request.headers["x-algolia-api-key"]?{"x-algolia-api-key":"*****"}:{};return g(u({},e),{request:g(u({},e.request),{headers:u(u({},e.request.headers),t)})})}function Xe(e,t,r){return{name:"ApiError",message:e,status:t,transporterStackTrace:r}}function Je(e,t){return{name:"DeserializationError",message:e,response:t}}function Ve(e){return{name:"RetryError",message:"Unreachable hosts - your application id may be incorrect. If the error persists, contact support@algolia.com.",transporterStackTrace:e}}A.CallEnum=X;A.HostStatusEnum=U;A.createApiError=Xe;A.createDeserializationError=Je;A.createMappedRequestOptions=ce;A.createRetryError=Ve;A.createStatefulHost=ue;A.createStatelessHost=le;A.createTransporter=lr;A.createUserAgent=dr;A.deserializeFailure=ze;A.deserializeSuccess=Ke;A.isStatefulHostTimeouted=Be;A.isStatefulHostUp=Fe;A.serializeData=$e;A.serializeHeaders=Le;A.serializeQueryParameters=Ye;A.serializeUrl=Ge;A.stackFrameWithoutCredentials=pe;A.stackTraceWithoutCredentials=de});var K=I((en,et)=>{et.exports=Ze()});var tt=I(w=>{"use strict";Object.defineProperty(w,"__esModule",{value:!0});var N=F(),mr=K(),z=B(),hr=e=>{let t=e.region||"us",r=N.createAuth(N.AuthMode.WithinHeaders,e.appId,e.apiKey),s=mr.createTransporter(g(u({hosts:[{url:`analytics.${t}.algolia.com`}]},e),{headers:u(g(u({},r.headers()),{"content-type":"application/json"}),e.headers),queryParameters:u(u({},r.queryParameters()),e.queryParameters)})),n=e.appId;return N.addMethods({appId:n,transporter:s},e.methods)},yr=e=>(t,r)=>e.transporter.write({method:z.MethodEnum.Post,path:"2/abtests",data:t},r),gr=e=>(t,r)=>e.transporter.write({method:z.MethodEnum.Delete,path:N.encode("2/abtests/%s",t)},r),fr=e=>(t,r)=>e.transporter.read({method:z.MethodEnum.Get,path:N.encode("2/abtests/%s",t)},r),br=e=>t=>e.transporter.read({method:z.MethodEnum.Get,path:"2/abtests"},t),Pr=e=>(t,r)=>e.transporter.write({method:z.MethodEnum.Post,path:N.encode("2/abtests/%s/stop",t)},r);w.addABTest=yr;w.createAnalyticsClient=hr;w.deleteABTest=gr;w.getABTest=fr;w.getABTests=br;w.stopABTest=Pr});var st=I((rn,rt)=>{rt.exports=tt()});var at=I(G=>{"use strict";Object.defineProperty(G,"__esModule",{value:!0});var me=F(),jr=K(),nt=B(),Or=e=>{let t=e.region||"us",r=me.createAuth(me.AuthMode.WithinHeaders,e.appId,e.apiKey),s=jr.createTransporter(g(u({hosts:[{url:`recommendation.${t}.algolia.com`}]},e),{headers:u(g(u({},r.headers()),{"content-type":"application/json"}),e.headers),queryParameters:u(u({},r.queryParameters()),e.queryParameters)}));return me.addMethods({appId:e.appId,transporter:s},e.methods)},Ir=e=>t=>e.transporter.read({method:nt.MethodEnum.Get,path:"1/strategies/personalization"},t),Ar=e=>(t,r)=>e.transporter.write({method:nt.MethodEnum.Post,path:"1/strategies/personalization",data:t},r);G.createRecommendationClient=Or;G.getPersonalizationStrategy=Ir;G.setPersonalizationStrategy=Ar});var it=I((nn,ot)=>{ot.exports=at()});var jt=I(i=>{"use strict";Object.defineProperty(i,"__esModule",{value:!0});var l=F(),q=K(),m=B(),Sr=require("crypto");function Y(e){let t=r=>e.request(r).then(s=>{if(e.batch!==void 0&&e.batch(s.hits),!e.shouldStop(s))return s.cursor?t({cursor:s.cursor}):t({page:(r.page||0)+1})});return t({})}var Dr=e=>{let t=e.appId,r=l.createAuth(e.authMode!==void 0?e.authMode:l.AuthMode.WithinHeaders,t,e.apiKey),s=q.createTransporter(g(u({hosts:[{url:`${t}-dsn.algolia.net`,accept:q.CallEnum.Read},{url:`${t}.algolia.net`,accept:q.CallEnum.Write}].concat(l.shuffle([{url:`${t}-1.algolianet.com`},{url:`${t}-2.algolianet.com`},{url:`${t}-3.algolianet.com`}]))},e),{headers:u(g(u({},r.headers()),{"content-type":"application/x-www-form-urlencoded"}),e.headers),queryParameters:u(u({},r.queryParameters()),e.queryParameters)})),n={transporter:s,appId:t,addAlgoliaAgent(a,o){s.userAgent.add({segment:a,version:o})},clearCache(){return Promise.all([s.requestsCache.clear(),s.responsesCache.clear()]).then(()=>{})}};return l.addMethods(n,e.methods)};function ct(){return{name:"MissingObjectIDError",message:"All objects must have an unique objectID (like a primary key) to be valid. Algolia is also able to generate objectIDs automatically but *it's not recommended*. To do it, use the `{'autoGenerateObjectIDIfNotExist': true}` option."}}function ut(){return{name:"ObjectNotFoundError",message:"Object not found."}}function lt(){return{name:"ValidUntilNotFoundError",message:"ValidUntil not found in given secured api key."}}var Rr=e=>(t,r)=>{let d=r||{},{queryParameters:s}=d,n=R(d,["queryParameters"]),a=u({acl:t},s!==void 0?{queryParameters:s}:{}),o=(y,b)=>l.createRetryablePromise(f=>$(e)(y.key,b).catch(p=>{if(p.status!==404)throw p;return f()}));return l.createWaitablePromise(e.transporter.write({method:m.MethodEnum.Post,path:"1/keys",data:a},n),o)},vr=e=>(t,r,s)=>{let n=q.createMappedRequestOptions(s);return n.queryParameters["X-Algolia-User-ID"]=t,e.transporter.write({method:m.MethodEnum.Post,path:"1/clusters/mapping",data:{cluster:r}},n)},xr=e=>(t,r,s)=>e.transporter.write({method:m.MethodEnum.Post,path:"1/clusters/mapping/batch",data:{users:t,cluster:r}},s),Z=e=>(t,r,s)=>{let n=(a,o)=>L(e)(t,{methods:{waitTask:D}}).waitTask(a.taskID,o);return l.createWaitablePromise(e.transporter.write({method:m.MethodEnum.Post,path:l.encode("1/indexes/%s/operation",t),data:{operation:"copy",destination:r}},s),n)},qr=e=>(t,r,s)=>Z(e)(t,r,g(u({},s),{scope:[ee.Rules]})),Er=e=>(t,r,s)=>Z(e)(t,r,g(u({},s),{scope:[ee.Settings]})),Tr=e=>(t,r,s)=>Z(e)(t,r,g(u({},s),{scope:[ee.Synonyms]})),Mr=e=>(t,r)=>{let s=(n,a)=>l.createRetryablePromise(o=>$(e)(t,a).then(o).catch(d=>{if(d.status!==404)throw d}));return l.createWaitablePromise(e.transporter.write({method:m.MethodEnum.Delete,path:l.encode("1/keys/%s",t)},r),s)},wr=()=>(e,t)=>{let r=q.serializeQueryParameters(t),s=Sr.createHmac("sha256",e).update(r).digest("hex");return Buffer.from(s+r).toString("base64")},$=e=>(t,r)=>e.transporter.read({method:m.MethodEnum.Get,path:l.encode("1/keys/%s",t)},r),kr=e=>t=>e.transporter.read({method:m.MethodEnum.Get,path:"1/logs"},t),Cr=()=>e=>{let t=Buffer.from(e,"base64").toString("ascii"),r=/validUntil=(\d+)/,s=t.match(r);if(s===null)throw lt();return parseInt(s[1],10)-Math.round(new Date().getTime()/1e3)},Ur=e=>t=>e.transporter.read({method:m.MethodEnum.Get,path:"1/clusters/mapping/top"},t),Nr=e=>(t,r)=>e.transporter.read({method:m.MethodEnum.Get,path:l.encode("1/clusters/mapping/%s",t)},r),Wr=e=>t=>{let n=t||{},{retrieveMappings:r}=n,s=R(n,["retrieveMappings"]);return r===!0&&(s.getClusters=!0),e.transporter.read({method:m.MethodEnum.Get,path:"1/clusters/mapping/pending"},s)},L=e=>(t,r={})=>{let s={transporter:e.transporter,appId:e.appId,indexName:t};return l.addMethods(s,r.methods)},Hr=e=>t=>e.transporter.read({method:m.MethodEnum.Get,path:"1/keys"},t),_r=e=>t=>e.transporter.read({method:m.MethodEnum.Get,path:"1/clusters"},t),Fr=e=>t=>e.transporter.read({method:m.MethodEnum.Get,path:"1/indexes"},t),Br=e=>t=>e.transporter.read({method:m.MethodEnum.Get,path:"1/clusters/mapping"},t),Kr=e=>(t,r,s)=>{let n=(a,o)=>L(e)(t,{methods:{waitTask:D}}).waitTask(a.taskID,o);return l.createWaitablePromise(e.transporter.write({method:m.MethodEnum.Post,path:l.encode("1/indexes/%s/operation",t),data:{operation:"move",destination:r}},s),n)},zr=e=>(t,r)=>{let s=(n,a)=>Promise.all(Object.keys(n.taskID).map(o=>L(e)(o,{methods:{waitTask:D}}).waitTask(n.taskID[o],a)));return l.createWaitablePromise(e.transporter.write({method:m.MethodEnum.Post,path:"1/indexes/*/batch",data:{requests:t}},r),s)},Gr=e=>(t,r)=>e.transporter.read({method:m.MethodEnum.Post,path:"1/indexes/*/objects",data:{requests:t}},r),$r=e=>(t,r)=>{let s=t.map(n=>g(u({},n),{params:q.serializeQueryParameters(n.params||{})}));return e.transporter.read({method:m.MethodEnum.Post,path:"1/indexes/*/queries",data:{requests:s},cacheable:!0},r)},Lr=e=>(t,r)=>Promise.all(t.map(s=>{let d=s.params,{facetName:n,facetQuery:a}=d,o=R(d,["facetName","facetQuery"]);return L(e)(s.indexName,{methods:{searchForFacetValues:dt}}).searchForFacetValues(n,a,u(u({},r),o))})),Vr=e=>(t,r)=>{let s=q.createMappedRequestOptions(r);return s.queryParameters["X-Algolia-User-ID"]=t,e.transporter.write({method:m.MethodEnum.Delete,path:"1/clusters/mapping"},s)},Qr=e=>(t,r)=>{let s=(n,a)=>l.createRetryablePromise(o=>$(e)(t,a).catch(d=>{if(d.status!==404)throw d;return o()}));return l.createWaitablePromise(e.transporter.write({method:m.MethodEnum.Post,path:l.encode("1/keys/%s/restore",t)},r),s)},Jr=e=>(t,r)=>e.transporter.read({method:m.MethodEnum.Post,path:"1/clusters/mapping/search",data:{query:t}},r),Xr=e=>(t,r)=>{let s=Object.assign({},r),f=r||{},{queryParameters:n}=f,a=R(f,["queryParameters"]),o=n?{queryParameters:n}:{},d=["acl","indexes","referers","restrictSources","queryParameters","description","maxQueriesPerIPPerHour","maxHitsPerQuery"],y=p=>Object.keys(s).filter(h=>d.indexOf(h)!==-1).every(h=>p[h]===s[h]),b=(p,h)=>l.createRetryablePromise(S=>$(e)(t,h).then(O=>y(O)?Promise.resolve():S()));return l.createWaitablePromise(e.transporter.write({method:m.MethodEnum.Put,path:l.encode("1/keys/%s",t),data:o},a),b)},pt=e=>(t,r)=>{let s=(n,a)=>D(e)(n.taskID,a);return l.createWaitablePromise(e.transporter.write({method:m.MethodEnum.Post,path:l.encode("1/indexes/%s/batch",e.indexName),data:{requests:t}},r),s)},Yr=e=>t=>Y(g(u({},t),{shouldStop:r=>r.cursor===void 0,request:r=>e.transporter.read({method:m.MethodEnum.Post,path:l.encode("1/indexes/%s/browse",e.indexName),data:r},t)})),Zr=e=>t=>{let r=u({hitsPerPage:1e3},t);return Y(g(u({},r),{shouldStop:s=>s.hits.lengthg(u({},n),{hits:n.hits.map(a=>(delete a._highlightResult,a))}))}}))},es=e=>t=>{let r=u({hitsPerPage:1e3},t);return Y(g(u({},r),{shouldStop:s=>s.hits.lengthg(u({},n),{hits:n.hits.map(a=>(delete a._highlightResult,a))}))}}))},te=e=>(t,r,s)=>{let y=s||{},{batchSize:n}=y,a=R(y,["batchSize"]),o={taskIDs:[],objectIDs:[]},d=(b=0)=>{let f=[],p;for(p=b;p({action:r,body:h})),a).then(h=>(o.objectIDs=o.objectIDs.concat(h.objectIDs),o.taskIDs.push(h.taskID),p++,d(p)))};return l.createWaitablePromise(d(),(b,f)=>Promise.all(b.taskIDs.map(p=>D(e)(p,f))))},ts=e=>t=>l.createWaitablePromise(e.transporter.write({method:m.MethodEnum.Post,path:l.encode("1/indexes/%s/clear",e.indexName)},t),(r,s)=>D(e)(r.taskID,s)),rs=e=>t=>{let a=t||{},{forwardToReplicas:r}=a,s=R(a,["forwardToReplicas"]),n=q.createMappedRequestOptions(s);return r&&(n.queryParameters.forwardToReplicas=1),l.createWaitablePromise(e.transporter.write({method:m.MethodEnum.Post,path:l.encode("1/indexes/%s/rules/clear",e.indexName)},n),(o,d)=>D(e)(o.taskID,d))},ss=e=>t=>{let a=t||{},{forwardToReplicas:r}=a,s=R(a,["forwardToReplicas"]),n=q.createMappedRequestOptions(s);return r&&(n.queryParameters.forwardToReplicas=1),l.createWaitablePromise(e.transporter.write({method:m.MethodEnum.Post,path:l.encode("1/indexes/%s/synonyms/clear",e.indexName)},n),(o,d)=>D(e)(o.taskID,d))},ns=e=>(t,r)=>l.createWaitablePromise(e.transporter.write({method:m.MethodEnum.Post,path:l.encode("1/indexes/%s/deleteByQuery",e.indexName),data:t},r),(s,n)=>D(e)(s.taskID,n)),as=e=>t=>l.createWaitablePromise(e.transporter.write({method:m.MethodEnum.Delete,path:l.encode("1/indexes/%s",e.indexName)},t),(r,s)=>D(e)(r.taskID,s)),os=e=>(t,r)=>l.createWaitablePromise(yt(e)([t],r).then(s=>({taskID:s.taskIDs[0]})),(s,n)=>D(e)(s.taskID,n)),yt=e=>(t,r)=>{let s=t.map(n=>({objectID:n}));return te(e)(s,k.DeleteObject,r)},is=e=>(t,r)=>{let o=r||{},{forwardToReplicas:s}=o,n=R(o,["forwardToReplicas"]),a=q.createMappedRequestOptions(n);return s&&(a.queryParameters.forwardToReplicas=1),l.createWaitablePromise(e.transporter.write({method:m.MethodEnum.Delete,path:l.encode("1/indexes/%s/rules/%s",e.indexName,t)},a),(d,y)=>D(e)(d.taskID,y))},cs=e=>(t,r)=>{let o=r||{},{forwardToReplicas:s}=o,n=R(o,["forwardToReplicas"]),a=q.createMappedRequestOptions(n);return s&&(a.queryParameters.forwardToReplicas=1),l.createWaitablePromise(e.transporter.write({method:m.MethodEnum.Delete,path:l.encode("1/indexes/%s/synonyms/%s",e.indexName,t)},a),(d,y)=>D(e)(d.taskID,y))},us=e=>t=>gt(e)(t).then(()=>!0).catch(r=>{if(r.status!==404)throw r;return!1}),ls=e=>(t,r)=>{let y=r||{},{query:s,paginate:n}=y,a=R(y,["query","paginate"]),o=0,d=()=>ft(e)(s||"",g(u({},a),{page:o})).then(b=>{for(let[f,p]of Object.entries(b.hits))if(t(p))return{object:p,position:parseInt(f,10),page:o};if(o++,n===!1||o>=b.nbPages)throw ut();return d()});return d()},ds=e=>(t,r)=>e.transporter.read({method:m.MethodEnum.Get,path:l.encode("1/indexes/%s/%s",e.indexName,t)},r),ps=()=>(e,t)=>{for(let[r,s]of Object.entries(e.hits))if(s.objectID===t)return parseInt(r,10);return-1},ms=e=>(t,r)=>{let o=r||{},{attributesToRetrieve:s}=o,n=R(o,["attributesToRetrieve"]),a=t.map(d=>u({indexName:e.indexName,objectID:d},s?{attributesToRetrieve:s}:{}));return e.transporter.read({method:m.MethodEnum.Post,path:"1/indexes/*/objects",data:{requests:a}},n)},hs=e=>(t,r)=>e.transporter.read({method:m.MethodEnum.Get,path:l.encode("1/indexes/%s/rules/%s",e.indexName,t)},r),gt=e=>t=>e.transporter.read({method:m.MethodEnum.Get,path:l.encode("1/indexes/%s/settings",e.indexName),data:{getVersion:2}},t),ys=e=>(t,r)=>e.transporter.read({method:m.MethodEnum.Get,path:l.encode("1/indexes/%s/synonyms/%s",e.indexName,t)},r),bt=e=>(t,r)=>e.transporter.read({method:m.MethodEnum.Get,path:l.encode("1/indexes/%s/task/%s",e.indexName,t.toString())},r),gs=e=>(t,r)=>l.createWaitablePromise(Pt(e)([t],r).then(s=>({objectID:s.objectIDs[0],taskID:s.taskIDs[0]})),(s,n)=>D(e)(s.taskID,n)),Pt=e=>(t,r)=>{let o=r||{},{createIfNotExists:s}=o,n=R(o,["createIfNotExists"]),a=s?k.PartialUpdateObject:k.PartialUpdateObjectNoCreate;return te(e)(t,a,n)},fs=e=>(t,r)=>{let O=r||{},{safe:s,autoGenerateObjectIDIfNotExist:n,batchSize:a}=O,o=R(O,["safe","autoGenerateObjectIDIfNotExist","batchSize"]),d=(P,x,v,j)=>l.createWaitablePromise(e.transporter.write({method:m.MethodEnum.Post,path:l.encode("1/indexes/%s/operation",P),data:{operation:v,destination:x}},j),(T,V)=>D(e)(T.taskID,V)),y=Math.random().toString(36).substring(7),b=`${e.indexName}_tmp_${y}`,f=he({appId:e.appId,transporter:e.transporter,indexName:b}),p=[],h=d(e.indexName,b,"copy",g(u({},o),{scope:["settings","synonyms","rules"]}));p.push(h);let S=(s?h.wait(o):h).then(()=>{let P=f(t,g(u({},o),{autoGenerateObjectIDIfNotExist:n,batchSize:a}));return p.push(P),s?P.wait(o):P}).then(()=>{let P=d(b,e.indexName,"move",o);return p.push(P),s?P.wait(o):P}).then(()=>Promise.all(p)).then(([P,x,v])=>({objectIDs:x.objectIDs,taskIDs:[P.taskID,...x.taskIDs,v.taskID]}));return l.createWaitablePromise(S,(P,x)=>Promise.all(p.map(v=>v.wait(x))))},bs=e=>(t,r)=>ye(e)(t,g(u({},r),{clearExistingRules:!0})),Ps=e=>(t,r)=>ge(e)(t,g(u({},r),{replaceExistingSynonyms:!0})),js=e=>(t,r)=>l.createWaitablePromise(he(e)([t],r).then(s=>({objectID:s.objectIDs[0],taskID:s.taskIDs[0]})),(s,n)=>D(e)(s.taskID,n)),he=e=>(t,r)=>{let o=r||{},{autoGenerateObjectIDIfNotExist:s}=o,n=R(o,["autoGenerateObjectIDIfNotExist"]),a=s?k.AddObject:k.UpdateObject;if(a===k.UpdateObject){for(let d of t)if(d.objectID===void 0)return l.createWaitablePromise(Promise.reject(ct()))}return te(e)(t,a,n)},Os=e=>(t,r)=>ye(e)([t],r),ye=e=>(t,r)=>{let d=r||{},{forwardToReplicas:s,clearExistingRules:n}=d,a=R(d,["forwardToReplicas","clearExistingRules"]),o=q.createMappedRequestOptions(a);return s&&(o.queryParameters.forwardToReplicas=1),n&&(o.queryParameters.clearExistingRules=1),l.createWaitablePromise(e.transporter.write({method:m.MethodEnum.Post,path:l.encode("1/indexes/%s/rules/batch",e.indexName),data:t},o),(y,b)=>D(e)(y.taskID,b))},Is=e=>(t,r)=>ge(e)([t],r),ge=e=>(t,r)=>{let d=r||{},{forwardToReplicas:s,replaceExistingSynonyms:n}=d,a=R(d,["forwardToReplicas","replaceExistingSynonyms"]),o=q.createMappedRequestOptions(a);return s&&(o.queryParameters.forwardToReplicas=1),n&&(o.queryParameters.replaceExistingSynonyms=1),l.createWaitablePromise(e.transporter.write({method:m.MethodEnum.Post,path:l.encode("1/indexes/%s/synonyms/batch",e.indexName),data:t},o),(y,b)=>D(e)(y.taskID,b))},ft=e=>(t,r)=>e.transporter.read({method:m.MethodEnum.Post,path:l.encode("1/indexes/%s/query",e.indexName),data:{query:t},cacheable:!0},r),dt=e=>(t,r,s)=>e.transporter.read({method:m.MethodEnum.Post,path:l.encode("1/indexes/%s/facets/%s/query",e.indexName,t),data:{facetQuery:r},cacheable:!0},s),mt=e=>(t,r)=>e.transporter.read({method:m.MethodEnum.Post,path:l.encode("1/indexes/%s/rules/search",e.indexName),data:{query:t}},r),ht=e=>(t,r)=>e.transporter.read({method:m.MethodEnum.Post,path:l.encode("1/indexes/%s/synonyms/search",e.indexName),data:{query:t}},r),As=e=>(t,r)=>{let o=r||{},{forwardToReplicas:s}=o,n=R(o,["forwardToReplicas"]),a=q.createMappedRequestOptions(n);return s&&(a.queryParameters.forwardToReplicas=1),l.createWaitablePromise(e.transporter.write({method:m.MethodEnum.Put,path:l.encode("1/indexes/%s/settings",e.indexName),data:t},a),(d,y)=>D(e)(d.taskID,y))},D=e=>(t,r)=>l.createRetryablePromise(s=>bt(e)(t,r).then(n=>n.status!=="published"?s():void 0)),Ss={AddObject:"addObject",Analytics:"analytics",Browser:"browse",DeleteIndex:"deleteIndex",DeleteObject:"deleteObject",EditSettings:"editSettings",ListIndexes:"listIndexes",Logs:"logs",Recommendation:"recommendation",Search:"search",SeeUnretrievableAttributes:"seeUnretrievableAttributes",Settings:"settings",Usage:"usage"},k={AddObject:"addObject",UpdateObject:"updateObject",PartialUpdateObject:"partialUpdateObject",PartialUpdateObjectNoCreate:"partialUpdateObjectNoCreate",DeleteObject:"deleteObject"},ee={Settings:"settings",Synonyms:"synonyms",Rules:"rules"},Ds={None:"none",StopIfEnoughMatches:"stopIfEnoughMatches"},Rs={Synonym:"synonym",OneWaySynonym:"oneWaySynonym",AltCorrection1:"altCorrection1",AltCorrection2:"altCorrection2",Placeholder:"placeholder"};i.ApiKeyACLEnum=Ss;i.BatchActionEnum=k;i.ScopeEnum=ee;i.StrategyEnum=Ds;i.SynonymEnum=Rs;i.addApiKey=Rr;i.assignUserID=vr;i.assignUserIDs=xr;i.batch=pt;i.browseObjects=Yr;i.browseRules=Zr;i.browseSynonyms=es;i.chunkedBatch=te;i.clearObjects=ts;i.clearRules=rs;i.clearSynonyms=ss;i.copyIndex=Z;i.copyRules=qr;i.copySettings=Er;i.copySynonyms=Tr;i.createBrowsablePromise=Y;i.createMissingObjectIDError=ct;i.createObjectNotFoundError=ut;i.createSearchClient=Dr;i.createValidUntilNotFoundError=lt;i.deleteApiKey=Mr;i.deleteBy=ns;i.deleteIndex=as;i.deleteObject=os;i.deleteObjects=yt;i.deleteRule=is;i.deleteSynonym=cs;i.exists=us;i.findObject=ls;i.generateSecuredApiKey=wr;i.getApiKey=$;i.getLogs=kr;i.getObject=ds;i.getObjectPosition=ps;i.getObjects=ms;i.getRule=hs;i.getSecuredApiKeyRemainingValidity=Cr;i.getSettings=gt;i.getSynonym=ys;i.getTask=bt;i.getTopUserIDs=Ur;i.getUserID=Nr;i.hasPendingMappings=Wr;i.initIndex=L;i.listApiKeys=Hr;i.listClusters=_r;i.listIndices=Fr;i.listUserIDs=Br;i.moveIndex=Kr;i.multipleBatch=zr;i.multipleGetObjects=Gr;i.multipleQueries=$r;i.multipleSearchForFacetValues=Lr;i.partialUpdateObject=gs;i.partialUpdateObjects=Pt;i.removeUserID=Vr;i.replaceAllObjects=fs;i.replaceAllRules=bs;i.replaceAllSynonyms=Ps;i.restoreApiKey=Qr;i.saveObject=js;i.saveObjects=he;i.saveRule=Os;i.saveRules=ye;i.saveSynonym=Is;i.saveSynonyms=ge;i.search=ft;i.searchForFacetValues=dt;i.searchRules=mt;i.searchSynonyms=ht;i.searchUserIDs=Jr;i.setSettings=As;i.updateApiKey=Xr;i.waitTask=D});var It=I((on,Ot)=>{Ot.exports=jt()});var At=I(re=>{"use strict";Object.defineProperty(re,"__esModule",{value:!0});function vs(){return{debug(e,t){return Promise.resolve()},info(e,t){return Promise.resolve()},error(e,t){return Promise.resolve()}}}var xs={Debug:1,Info:2,Error:3};re.LogLevelEnum=xs;re.createNullLogger=vs});var Dt=I((un,St)=>{St.exports=At()});var xt=I(fe=>{"use strict";Object.defineProperty(fe,"__esModule",{value:!0});var Rt=require("http"),vt=require("https"),qs=require("url");function Es(){let e={keepAlive:!0},t=new Rt.Agent(e),r=new vt.Agent(e);return{send(s){return new Promise(n=>{let a=qs.parse(s.url),o=a.query===null?a.pathname:`${a.pathname}?${a.query}`,d=u({agent:a.protocol==="https:"?r:t,hostname:a.hostname,path:o,method:s.method,headers:s.headers},a.port!==void 0?{port:a.port||""}:{}),y=(a.protocol==="https:"?vt:Rt).request(d,h=>{let S="";h.on("data",O=>S+=O),h.on("end",()=>{clearTimeout(f),clearTimeout(p),n({status:h.statusCode||0,content:S,isTimedOut:!1})})}),b=(h,S)=>setTimeout(()=>{y.abort(),n({status:0,content:S,isTimedOut:!0})},h*1e3),f=b(s.connectTimeout,"Connection timeout"),p;y.on("error",h=>{clearTimeout(f),clearTimeout(p),n({status:0,content:h.message,isTimedOut:!1})}),y.once("response",()=>{clearTimeout(f),p=b(s.responseTimeout,"Socket timeout")}),s.data!==void 0&&y.write(s.data),y.end()})},destroy(){return t.destroy(),r.destroy(),Promise.resolve()}}}fe.createNodeHttpRequester=Es});var Et=I((dn,qt)=>{qt.exports=xt()});var kt=I((pn,Tt)=>{"use strict";var Mt=Ee(),Ts=we(),W=st(),be=F(),Pe=it(),c=It(),Ms=Dt(),ws=Et(),ks=K();function wt(e,t,r){let s={appId:e,apiKey:t,timeouts:{connect:2,read:5,write:30},requester:ws.createNodeHttpRequester(),logger:Ms.createNullLogger(),responsesCache:Mt.createNullCache(),requestsCache:Mt.createNullCache(),hostsCache:Ts.createInMemoryCache(),userAgent:ks.createUserAgent(be.version).add({segment:"Node.js",version:process.versions.node})};return c.createSearchClient(g(u(u({},s),r),{methods:{search:c.multipleQueries,searchForFacetValues:c.multipleSearchForFacetValues,multipleBatch:c.multipleBatch,multipleGetObjects:c.multipleGetObjects,multipleQueries:c.multipleQueries,copyIndex:c.copyIndex,copySettings:c.copySettings,copyRules:c.copyRules,copySynonyms:c.copySynonyms,moveIndex:c.moveIndex,listIndices:c.listIndices,getLogs:c.getLogs,listClusters:c.listClusters,multipleSearchForFacetValues:c.multipleSearchForFacetValues,getApiKey:c.getApiKey,addApiKey:c.addApiKey,listApiKeys:c.listApiKeys,updateApiKey:c.updateApiKey,deleteApiKey:c.deleteApiKey,restoreApiKey:c.restoreApiKey,assignUserID:c.assignUserID,assignUserIDs:c.assignUserIDs,getUserID:c.getUserID,searchUserIDs:c.searchUserIDs,listUserIDs:c.listUserIDs,getTopUserIDs:c.getTopUserIDs,removeUserID:c.removeUserID,hasPendingMappings:c.hasPendingMappings,generateSecuredApiKey:c.generateSecuredApiKey,getSecuredApiKeyRemainingValidity:c.getSecuredApiKeyRemainingValidity,destroy:be.destroy,initIndex:n=>a=>c.initIndex(n)(a,{methods:{batch:c.batch,delete:c.deleteIndex,getObject:c.getObject,getObjects:c.getObjects,saveObject:c.saveObject,saveObjects:c.saveObjects,search:c.search,searchForFacetValues:c.searchForFacetValues,waitTask:c.waitTask,setSettings:c.setSettings,getSettings:c.getSettings,partialUpdateObject:c.partialUpdateObject,partialUpdateObjects:c.partialUpdateObjects,deleteObject:c.deleteObject,deleteObjects:c.deleteObjects,deleteBy:c.deleteBy,clearObjects:c.clearObjects,browseObjects:c.browseObjects,getObjectPosition:c.getObjectPosition,findObject:c.findObject,exists:c.exists,saveSynonym:c.saveSynonym,saveSynonyms:c.saveSynonyms,getSynonym:c.getSynonym,searchSynonyms:c.searchSynonyms,browseSynonyms:c.browseSynonyms,deleteSynonym:c.deleteSynonym,clearSynonyms:c.clearSynonyms,replaceAllObjects:c.replaceAllObjects,replaceAllSynonyms:c.replaceAllSynonyms,searchRules:c.searchRules,getRule:c.getRule,deleteRule:c.deleteRule,saveRule:c.saveRule,saveRules:c.saveRules,replaceAllRules:c.replaceAllRules,browseRules:c.browseRules,clearRules:c.clearRules}}),initAnalytics:()=>n=>W.createAnalyticsClient(g(u(u({},s),n),{methods:{addABTest:W.addABTest,getABTest:W.getABTest,getABTests:W.getABTests,stopABTest:W.stopABTest,deleteABTest:W.deleteABTest}})),initRecommendation:()=>n=>Pe.createRecommendationClient(g(u(u({},s),n),{methods:{getPersonalizationStrategy:Pe.getPersonalizationStrategy,setPersonalizationStrategy:Pe.setPersonalizationStrategy}}))}}))}wt.version=be.version;Tt.exports=wt});var Ut=I((mn,je)=>{var Ct=kt();je.exports=Ct;je.exports.default=Ct});var Ws={};Vt(Ws,{default:()=>Ks});var Oe=C(require("@yarnpkg/core")),E=C(require("@yarnpkg/core")),Ie=C(require("@yarnpkg/plugin-essentials")),Ht=C(require("semver"));var se=C(require("@yarnpkg/core")),Nt=C(Ut()),Cs="e8e1bd300d860104bb8c58453ffa1eb4",Us="OFCNCOG2CU",Wt=async(e,t)=>{var a;let r=se.structUtils.stringifyIdent(e),n=Ns(t).initIndex("npm-search");try{return((a=(await n.getObject(r,{attributesToRetrieve:["types"]})).types)==null?void 0:a.ts)==="definitely-typed"}catch(o){return!1}},Ns=e=>(0,Nt.default)(Us,Cs,{requester:{async send(r){try{let s=await se.httpUtils.request(r.url,r.data||null,{configuration:e,headers:r.headers});return{content:s.body,isTimedOut:!1,status:s.statusCode}}catch(s){return{content:s.response.body,isTimedOut:!1,status:s.response.statusCode}}}}});var _t=e=>e.scope?`${e.scope}__${e.name}`:`${e.name}`,Hs=async(e,t,r,s)=>{if(r.scope==="types")return;let{project:n}=e,{configuration:a}=n,o=a.makeResolver(),d={project:n,resolver:o,report:new E.ThrowReport};if(!await Wt(r,a))return;let b=_t(r),f=E.structUtils.parseRange(r.range).selector;if(!E.semverUtils.validRange(f)){let P=await o.getCandidates(r,new Map,d);f=E.structUtils.parseRange(P[0].reference).selector}let p=Ht.default.coerce(f);if(p===null)return;let h=`${Ie.suggestUtils.Modifier.CARET}${p.major}`,S=E.structUtils.makeDescriptor(E.structUtils.makeIdent("types",b),h),O=E.miscUtils.mapAndFind(n.workspaces,P=>{var T,V;let x=(T=P.manifest.dependencies.get(r.identHash))==null?void 0:T.descriptorHash,v=(V=P.manifest.devDependencies.get(r.identHash))==null?void 0:V.descriptorHash;if(x!==r.descriptorHash&&v!==r.descriptorHash)return E.miscUtils.mapAndFind.skip;let j=[];for(let Ae of Oe.Manifest.allDependencies){let Se=P.manifest[Ae].get(S.identHash);typeof Se!="undefined"&&j.push([Ae,Se])}return j.length===0?E.miscUtils.mapAndFind.skip:j});if(typeof O!="undefined")for(let[P,x]of O)e.manifest[P].set(x.identHash,x);else{try{if((await o.getCandidates(S,new Map,d)).length===0)return}catch{return}e.manifest[Ie.suggestUtils.Target.DEVELOPMENT].set(S.identHash,S)}},_s=async(e,t,r)=>{if(r.scope==="types")return;let s=_t(r),n=E.structUtils.makeIdent("types",s);for(let a of Oe.Manifest.allDependencies)typeof e.manifest[a].get(n.identHash)!="undefined"&&e.manifest[a].delete(n.identHash)},Fs=(e,t)=>{t.publishConfig&&t.publishConfig.typings&&(t.typings=t.publishConfig.typings),t.publishConfig&&t.publishConfig.types&&(t.types=t.publishConfig.types)},Bs={hooks:{afterWorkspaceDependencyAddition:Hs,afterWorkspaceDependencyRemoval:_s,beforeWorkspacePacking:Fs}},Ks=Bs;return Ws;})(); -return plugin; -} -}; diff --git a/.yarn/releases/yarn-3.6.4.cjs b/.yarn/releases/yarn-3.6.4.cjs deleted file mode 100755 index ebd9272da5e06..0000000000000 --- a/.yarn/releases/yarn-3.6.4.cjs +++ /dev/null @@ -1,874 +0,0 @@ -#!/usr/bin/env node -/* eslint-disable */ -//prettier-ignore -(()=>{var Dge=Object.create;var lS=Object.defineProperty;var kge=Object.getOwnPropertyDescriptor;var Rge=Object.getOwnPropertyNames;var Fge=Object.getPrototypeOf,Nge=Object.prototype.hasOwnProperty;var J=(r=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(r,{get:(e,t)=>(typeof require<"u"?require:e)[t]}):r)(function(r){if(typeof require<"u")return require.apply(this,arguments);throw new Error('Dynamic require of "'+r+'" is not supported')});var Tge=(r,e)=>()=>(r&&(e=r(r=0)),e);var w=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),ut=(r,e)=>{for(var t in e)lS(r,t,{get:e[t],enumerable:!0})},Lge=(r,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of Rge(e))!Nge.call(r,n)&&n!==t&&lS(r,n,{get:()=>e[n],enumerable:!(i=kge(e,n))||i.enumerable});return r};var Pe=(r,e,t)=>(t=r!=null?Dge(Fge(r)):{},Lge(e||!r||!r.__esModule?lS(t,"default",{value:r,enumerable:!0}):t,r));var PK=w((zXe,xK)=>{xK.exports=vK;vK.sync=ife;var QK=J("fs");function rfe(r,e){var t=e.pathExt!==void 0?e.pathExt:process.env.PATHEXT;if(!t||(t=t.split(";"),t.indexOf("")!==-1))return!0;for(var i=0;i{FK.exports=kK;kK.sync=nfe;var DK=J("fs");function kK(r,e,t){DK.stat(r,function(i,n){t(i,i?!1:RK(n,e))})}function nfe(r,e){return RK(DK.statSync(r),e)}function RK(r,e){return r.isFile()&&sfe(r,e)}function sfe(r,e){var t=r.mode,i=r.uid,n=r.gid,s=e.uid!==void 0?e.uid:process.getuid&&process.getuid(),o=e.gid!==void 0?e.gid:process.getgid&&process.getgid(),a=parseInt("100",8),l=parseInt("010",8),c=parseInt("001",8),u=a|l,g=t&c||t&l&&n===o||t&a&&i===s||t&u&&s===0;return g}});var LK=w((ZXe,TK)=>{var XXe=J("fs"),lI;process.platform==="win32"||global.TESTING_WINDOWS?lI=PK():lI=NK();TK.exports=SS;SS.sync=ofe;function SS(r,e,t){if(typeof e=="function"&&(t=e,e={}),!t){if(typeof Promise!="function")throw new TypeError("callback not provided");return new Promise(function(i,n){SS(r,e||{},function(s,o){s?n(s):i(o)})})}lI(r,e||{},function(i,n){i&&(i.code==="EACCES"||e&&e.ignoreErrors)&&(i=null,n=!1),t(i,n)})}function ofe(r,e){try{return lI.sync(r,e||{})}catch(t){if(e&&e.ignoreErrors||t.code==="EACCES")return!1;throw t}}});var YK=w((_Xe,GK)=>{var Dg=process.platform==="win32"||process.env.OSTYPE==="cygwin"||process.env.OSTYPE==="msys",OK=J("path"),afe=Dg?";":":",MK=LK(),KK=r=>Object.assign(new Error(`not found: ${r}`),{code:"ENOENT"}),UK=(r,e)=>{let t=e.colon||afe,i=r.match(/\//)||Dg&&r.match(/\\/)?[""]:[...Dg?[process.cwd()]:[],...(e.path||process.env.PATH||"").split(t)],n=Dg?e.pathExt||process.env.PATHEXT||".EXE;.CMD;.BAT;.COM":"",s=Dg?n.split(t):[""];return Dg&&r.indexOf(".")!==-1&&s[0]!==""&&s.unshift(""),{pathEnv:i,pathExt:s,pathExtExe:n}},HK=(r,e,t)=>{typeof e=="function"&&(t=e,e={}),e||(e={});let{pathEnv:i,pathExt:n,pathExtExe:s}=UK(r,e),o=[],a=c=>new Promise((u,g)=>{if(c===i.length)return e.all&&o.length?u(o):g(KK(r));let f=i[c],h=/^".*"$/.test(f)?f.slice(1,-1):f,p=OK.join(h,r),C=!h&&/^\.[\\\/]/.test(r)?r.slice(0,2)+p:p;u(l(C,c,0))}),l=(c,u,g)=>new Promise((f,h)=>{if(g===n.length)return f(a(u+1));let p=n[g];MK(c+p,{pathExt:s},(C,y)=>{if(!C&&y)if(e.all)o.push(c+p);else return f(c+p);return f(l(c,u,g+1))})});return t?a(0).then(c=>t(null,c),t):a(0)},Afe=(r,e)=>{e=e||{};let{pathEnv:t,pathExt:i,pathExtExe:n}=UK(r,e),s=[];for(let o=0;o{"use strict";var jK=(r={})=>{let e=r.env||process.env;return(r.platform||process.platform)!=="win32"?"PATH":Object.keys(e).reverse().find(i=>i.toUpperCase()==="PATH")||"Path"};vS.exports=jK;vS.exports.default=jK});var VK=w((eZe,zK)=>{"use strict";var JK=J("path"),lfe=YK(),cfe=qK();function WK(r,e){let t=r.options.env||process.env,i=process.cwd(),n=r.options.cwd!=null,s=n&&process.chdir!==void 0&&!process.chdir.disabled;if(s)try{process.chdir(r.options.cwd)}catch{}let o;try{o=lfe.sync(r.command,{path:t[cfe({env:t})],pathExt:e?JK.delimiter:void 0})}catch{}finally{s&&process.chdir(i)}return o&&(o=JK.resolve(n?r.options.cwd:"",o)),o}function ufe(r){return WK(r)||WK(r,!0)}zK.exports=ufe});var XK=w((tZe,PS)=>{"use strict";var xS=/([()\][%!^"`<>&|;, *?])/g;function gfe(r){return r=r.replace(xS,"^$1"),r}function ffe(r,e){return r=`${r}`,r=r.replace(/(\\*)"/g,'$1$1\\"'),r=r.replace(/(\\*)$/,"$1$1"),r=`"${r}"`,r=r.replace(xS,"^$1"),e&&(r=r.replace(xS,"^$1")),r}PS.exports.command=gfe;PS.exports.argument=ffe});var _K=w((rZe,ZK)=>{"use strict";ZK.exports=/^#!(.*)/});var eU=w((iZe,$K)=>{"use strict";var hfe=_K();$K.exports=(r="")=>{let e=r.match(hfe);if(!e)return null;let[t,i]=e[0].replace(/#! ?/,"").split(" "),n=t.split("/").pop();return n==="env"?i:i?`${n} ${i}`:n}});var rU=w((nZe,tU)=>{"use strict";var DS=J("fs"),pfe=eU();function dfe(r){let t=Buffer.alloc(150),i;try{i=DS.openSync(r,"r"),DS.readSync(i,t,0,150,0),DS.closeSync(i)}catch{}return pfe(t.toString())}tU.exports=dfe});var oU=w((sZe,sU)=>{"use strict";var Cfe=J("path"),iU=VK(),nU=XK(),mfe=rU(),Efe=process.platform==="win32",Ife=/\.(?:com|exe)$/i,yfe=/node_modules[\\/].bin[\\/][^\\/]+\.cmd$/i;function wfe(r){r.file=iU(r);let e=r.file&&mfe(r.file);return e?(r.args.unshift(r.file),r.command=e,iU(r)):r.file}function Bfe(r){if(!Efe)return r;let e=wfe(r),t=!Ife.test(e);if(r.options.forceShell||t){let i=yfe.test(e);r.command=Cfe.normalize(r.command),r.command=nU.command(r.command),r.args=r.args.map(s=>nU.argument(s,i));let n=[r.command].concat(r.args).join(" ");r.args=["/d","/s","/c",`"${n}"`],r.command=process.env.comspec||"cmd.exe",r.options.windowsVerbatimArguments=!0}return r}function bfe(r,e,t){e&&!Array.isArray(e)&&(t=e,e=null),e=e?e.slice(0):[],t=Object.assign({},t);let i={command:r,args:e,options:t,file:void 0,original:{command:r,args:e}};return t.shell?i:Bfe(i)}sU.exports=bfe});var lU=w((oZe,AU)=>{"use strict";var kS=process.platform==="win32";function RS(r,e){return Object.assign(new Error(`${e} ${r.command} ENOENT`),{code:"ENOENT",errno:"ENOENT",syscall:`${e} ${r.command}`,path:r.command,spawnargs:r.args})}function Qfe(r,e){if(!kS)return;let t=r.emit;r.emit=function(i,n){if(i==="exit"){let s=aU(n,e,"spawn");if(s)return t.call(r,"error",s)}return t.apply(r,arguments)}}function aU(r,e){return kS&&r===1&&!e.file?RS(e.original,"spawn"):null}function Sfe(r,e){return kS&&r===1&&!e.file?RS(e.original,"spawnSync"):null}AU.exports={hookChildProcess:Qfe,verifyENOENT:aU,verifyENOENTSync:Sfe,notFoundError:RS}});var TS=w((aZe,kg)=>{"use strict";var cU=J("child_process"),FS=oU(),NS=lU();function uU(r,e,t){let i=FS(r,e,t),n=cU.spawn(i.command,i.args,i.options);return NS.hookChildProcess(n,i),n}function vfe(r,e,t){let i=FS(r,e,t),n=cU.spawnSync(i.command,i.args,i.options);return n.error=n.error||NS.verifyENOENTSync(n.status,i),n}kg.exports=uU;kg.exports.spawn=uU;kg.exports.sync=vfe;kg.exports._parse=FS;kg.exports._enoent=NS});var fU=w((AZe,gU)=>{"use strict";function xfe(r,e){function t(){this.constructor=r}t.prototype=e.prototype,r.prototype=new t}function Zl(r,e,t,i){this.message=r,this.expected=e,this.found=t,this.location=i,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,Zl)}xfe(Zl,Error);Zl.buildMessage=function(r,e){var t={literal:function(c){return'"'+n(c.text)+'"'},class:function(c){var u="",g;for(g=0;g0){for(g=1,f=1;g>",ie=me(">>",!1),de=">&",_e=me(">&",!1),Pt=">",It=me(">",!1),Or="<<<",ii=me("<<<",!1),gi="<&",hr=me("<&",!1),fi="<",ni=me("<",!1),Ks=function(m){return{type:"argument",segments:[].concat(...m)}},pr=function(m){return m},Ii="$'",rs=me("$'",!1),fa="'",dA=me("'",!1),cg=function(m){return[{type:"text",text:m}]},is='""',CA=me('""',!1),ha=function(){return{type:"text",text:""}},wp='"',mA=me('"',!1),EA=function(m){return m},wr=function(m){return{type:"arithmetic",arithmetic:m,quoted:!0}},Tl=function(m){return{type:"shell",shell:m,quoted:!0}},ug=function(m){return{type:"variable",...m,quoted:!0}},yo=function(m){return{type:"text",text:m}},gg=function(m){return{type:"arithmetic",arithmetic:m,quoted:!1}},Bp=function(m){return{type:"shell",shell:m,quoted:!1}},bp=function(m){return{type:"variable",...m,quoted:!1}},vr=function(m){return{type:"glob",pattern:m}},se=/^[^']/,wo=Je(["'"],!0,!1),Fn=function(m){return m.join("")},fg=/^[^$"]/,bt=Je(["$",'"'],!0,!1),Ll=`\\ -`,Nn=me(`\\ -`,!1),ns=function(){return""},ss="\\",gt=me("\\",!1),Bo=/^[\\$"`]/,At=Je(["\\","$",'"',"`"],!1,!1),ln=function(m){return m},S="\\a",Lt=me("\\a",!1),hg=function(){return"a"},Ol="\\b",Qp=me("\\b",!1),Sp=function(){return"\b"},vp=/^[Ee]/,xp=Je(["E","e"],!1,!1),Pp=function(){return"\x1B"},G="\\f",yt=me("\\f",!1),IA=function(){return"\f"},zi="\\n",Ml=me("\\n",!1),Xe=function(){return` -`},pa="\\r",pg=me("\\r",!1),OE=function(){return"\r"},Dp="\\t",ME=me("\\t",!1),ar=function(){return" "},Tn="\\v",Kl=me("\\v",!1),kp=function(){return"\v"},Us=/^[\\'"?]/,da=Je(["\\","'",'"',"?"],!1,!1),cn=function(m){return String.fromCharCode(parseInt(m,16))},Le="\\x",dg=me("\\x",!1),Ul="\\u",Hs=me("\\u",!1),Hl="\\U",yA=me("\\U",!1),Cg=function(m){return String.fromCodePoint(parseInt(m,16))},mg=/^[0-7]/,Ca=Je([["0","7"]],!1,!1),ma=/^[0-9a-fA-f]/,rt=Je([["0","9"],["a","f"],["A","f"]],!1,!1),bo=nt(),wA="-",Gl=me("-",!1),Gs="+",Yl=me("+",!1),KE=".",Rp=me(".",!1),Eg=function(m,Q,N){return{type:"number",value:(m==="-"?-1:1)*parseFloat(Q.join("")+"."+N.join(""))}},Fp=function(m,Q){return{type:"number",value:(m==="-"?-1:1)*parseInt(Q.join(""))}},UE=function(m){return{type:"variable",...m}},jl=function(m){return{type:"variable",name:m}},HE=function(m){return m},Ig="*",BA=me("*",!1),Rr="/",GE=me("/",!1),Ys=function(m,Q,N){return{type:Q==="*"?"multiplication":"division",right:N}},js=function(m,Q){return Q.reduce((N,U)=>({left:N,...U}),m)},yg=function(m,Q,N){return{type:Q==="+"?"addition":"subtraction",right:N}},bA="$((",R=me("$((",!1),q="))",Ce=me("))",!1),Ke=function(m){return m},Re="$(",ze=me("$(",!1),dt=function(m){return m},Ft="${",Ln=me("${",!1),JQ=":-",k1=me(":-",!1),R1=function(m,Q){return{name:m,defaultValue:Q}},WQ=":-}",F1=me(":-}",!1),N1=function(m){return{name:m,defaultValue:[]}},zQ=":+",T1=me(":+",!1),L1=function(m,Q){return{name:m,alternativeValue:Q}},VQ=":+}",O1=me(":+}",!1),M1=function(m){return{name:m,alternativeValue:[]}},XQ=function(m){return{name:m}},K1="$",U1=me("$",!1),H1=function(m){return e.isGlobPattern(m)},G1=function(m){return m},ZQ=/^[a-zA-Z0-9_]/,_Q=Je([["a","z"],["A","Z"],["0","9"],"_"],!1,!1),$Q=function(){return L()},eS=/^[$@*?#a-zA-Z0-9_\-]/,tS=Je(["$","@","*","?","#",["a","z"],["A","Z"],["0","9"],"_","-"],!1,!1),Y1=/^[(){}<>$|&; \t"']/,wg=Je(["(",")","{","}","<",">","$","|","&",";"," "," ",'"',"'"],!1,!1),rS=/^[<>&; \t"']/,iS=Je(["<",">","&",";"," "," ",'"',"'"],!1,!1),YE=/^[ \t]/,jE=Je([" "," "],!1,!1),b=0,Me=0,QA=[{line:1,column:1}],d=0,E=[],I=0,k;if("startRule"in e){if(!(e.startRule in i))throw new Error(`Can't start parsing from rule "`+e.startRule+'".');n=i[e.startRule]}function L(){return r.substring(Me,b)}function Z(){return Et(Me,b)}function te(m,Q){throw Q=Q!==void 0?Q:Et(Me,b),Ri([lt(m)],r.substring(Me,b),Q)}function we(m,Q){throw Q=Q!==void 0?Q:Et(Me,b),On(m,Q)}function me(m,Q){return{type:"literal",text:m,ignoreCase:Q}}function Je(m,Q,N){return{type:"class",parts:m,inverted:Q,ignoreCase:N}}function nt(){return{type:"any"}}function wt(){return{type:"end"}}function lt(m){return{type:"other",description:m}}function it(m){var Q=QA[m],N;if(Q)return Q;for(N=m-1;!QA[N];)N--;for(Q=QA[N],Q={line:Q.line,column:Q.column};Nd&&(d=b,E=[]),E.push(m))}function On(m,Q){return new Zl(m,null,null,Q)}function Ri(m,Q,N){return new Zl(Zl.buildMessage(m,Q),m,Q,N)}function SA(){var m,Q;return m=b,Q=Mr(),Q===t&&(Q=null),Q!==t&&(Me=m,Q=s(Q)),m=Q,m}function Mr(){var m,Q,N,U,ce;if(m=b,Q=Kr(),Q!==t){for(N=[],U=He();U!==t;)N.push(U),U=He();N!==t?(U=Ea(),U!==t?(ce=os(),ce===t&&(ce=null),ce!==t?(Me=m,Q=o(Q,U,ce),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)}else b=m,m=t;if(m===t)if(m=b,Q=Kr(),Q!==t){for(N=[],U=He();U!==t;)N.push(U),U=He();N!==t?(U=Ea(),U===t&&(U=null),U!==t?(Me=m,Q=a(Q,U),m=Q):(b=m,m=t)):(b=m,m=t)}else b=m,m=t;return m}function os(){var m,Q,N,U,ce;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t)if(N=Mr(),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();U!==t?(Me=m,Q=l(N),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t;return m}function Ea(){var m;return r.charCodeAt(b)===59?(m=c,b++):(m=t,I===0&&be(u)),m===t&&(r.charCodeAt(b)===38?(m=g,b++):(m=t,I===0&&be(f))),m}function Kr(){var m,Q,N;return m=b,Q=j1(),Q!==t?(N=fge(),N===t&&(N=null),N!==t?(Me=m,Q=h(Q,N),m=Q):(b=m,m=t)):(b=m,m=t),m}function fge(){var m,Q,N,U,ce,Se,ht;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t)if(N=hge(),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();if(U!==t)if(ce=Kr(),ce!==t){for(Se=[],ht=He();ht!==t;)Se.push(ht),ht=He();Se!==t?(Me=m,Q=p(N,ce),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t;return m}function hge(){var m;return r.substr(b,2)===C?(m=C,b+=2):(m=t,I===0&&be(y)),m===t&&(r.substr(b,2)===B?(m=B,b+=2):(m=t,I===0&&be(v))),m}function j1(){var m,Q,N;return m=b,Q=Cge(),Q!==t?(N=pge(),N===t&&(N=null),N!==t?(Me=m,Q=D(Q,N),m=Q):(b=m,m=t)):(b=m,m=t),m}function pge(){var m,Q,N,U,ce,Se,ht;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t)if(N=dge(),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();if(U!==t)if(ce=j1(),ce!==t){for(Se=[],ht=He();ht!==t;)Se.push(ht),ht=He();Se!==t?(Me=m,Q=T(N,ce),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t;return m}function dge(){var m;return r.substr(b,2)===H?(m=H,b+=2):(m=t,I===0&&be(j)),m===t&&(r.charCodeAt(b)===124?(m=$,b++):(m=t,I===0&&be(V))),m}function qE(){var m,Q,N,U,ce,Se;if(m=b,Q=rK(),Q!==t)if(r.charCodeAt(b)===61?(N=W,b++):(N=t,I===0&&be(_)),N!==t)if(U=W1(),U!==t){for(ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();ce!==t?(Me=m,Q=A(Q,U),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t;else b=m,m=t;if(m===t)if(m=b,Q=rK(),Q!==t)if(r.charCodeAt(b)===61?(N=W,b++):(N=t,I===0&&be(_)),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();U!==t?(Me=m,Q=Ae(Q),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t;return m}function Cge(){var m,Q,N,U,ce,Se,ht,Bt,qr,hi,as;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t)if(r.charCodeAt(b)===40?(N=ge,b++):(N=t,I===0&&be(re)),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();if(U!==t)if(ce=Mr(),ce!==t){for(Se=[],ht=He();ht!==t;)Se.push(ht),ht=He();if(Se!==t)if(r.charCodeAt(b)===41?(ht=O,b++):(ht=t,I===0&&be(F)),ht!==t){for(Bt=[],qr=He();qr!==t;)Bt.push(qr),qr=He();if(Bt!==t){for(qr=[],hi=Np();hi!==t;)qr.push(hi),hi=Np();if(qr!==t){for(hi=[],as=He();as!==t;)hi.push(as),as=He();hi!==t?(Me=m,Q=ue(ce,qr),m=Q):(b=m,m=t)}else b=m,m=t}else b=m,m=t}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t;if(m===t){for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t)if(r.charCodeAt(b)===123?(N=pe,b++):(N=t,I===0&&be(ke)),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();if(U!==t)if(ce=Mr(),ce!==t){for(Se=[],ht=He();ht!==t;)Se.push(ht),ht=He();if(Se!==t)if(r.charCodeAt(b)===125?(ht=Fe,b++):(ht=t,I===0&&be(Ne)),ht!==t){for(Bt=[],qr=He();qr!==t;)Bt.push(qr),qr=He();if(Bt!==t){for(qr=[],hi=Np();hi!==t;)qr.push(hi),hi=Np();if(qr!==t){for(hi=[],as=He();as!==t;)hi.push(as),as=He();hi!==t?(Me=m,Q=oe(ce,qr),m=Q):(b=m,m=t)}else b=m,m=t}else b=m,m=t}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t;if(m===t){for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t){for(N=[],U=qE();U!==t;)N.push(U),U=qE();if(N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();if(U!==t){if(ce=[],Se=J1(),Se!==t)for(;Se!==t;)ce.push(Se),Se=J1();else ce=t;if(ce!==t){for(Se=[],ht=He();ht!==t;)Se.push(ht),ht=He();Se!==t?(Me=m,Q=le(N,ce),m=Q):(b=m,m=t)}else b=m,m=t}else b=m,m=t}else b=m,m=t}else b=m,m=t;if(m===t){for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t){if(N=[],U=qE(),U!==t)for(;U!==t;)N.push(U),U=qE();else N=t;if(N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();U!==t?(Me=m,Q=Be(N),m=Q):(b=m,m=t)}else b=m,m=t}else b=m,m=t}}}return m}function q1(){var m,Q,N,U,ce;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t){if(N=[],U=JE(),U!==t)for(;U!==t;)N.push(U),U=JE();else N=t;if(N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();U!==t?(Me=m,Q=fe(N),m=Q):(b=m,m=t)}else b=m,m=t}else b=m,m=t;return m}function J1(){var m,Q,N;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();if(Q!==t?(N=Np(),N!==t?(Me=m,Q=ae(N),m=Q):(b=m,m=t)):(b=m,m=t),m===t){for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();Q!==t?(N=JE(),N!==t?(Me=m,Q=ae(N),m=Q):(b=m,m=t)):(b=m,m=t)}return m}function Np(){var m,Q,N,U,ce;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();return Q!==t?(qe.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(ne)),N===t&&(N=null),N!==t?(U=mge(),U!==t?(ce=JE(),ce!==t?(Me=m,Q=Y(N,U,ce),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m}function mge(){var m;return r.substr(b,2)===he?(m=he,b+=2):(m=t,I===0&&be(ie)),m===t&&(r.substr(b,2)===de?(m=de,b+=2):(m=t,I===0&&be(_e)),m===t&&(r.charCodeAt(b)===62?(m=Pt,b++):(m=t,I===0&&be(It)),m===t&&(r.substr(b,3)===Or?(m=Or,b+=3):(m=t,I===0&&be(ii)),m===t&&(r.substr(b,2)===gi?(m=gi,b+=2):(m=t,I===0&&be(hr)),m===t&&(r.charCodeAt(b)===60?(m=fi,b++):(m=t,I===0&&be(ni))))))),m}function JE(){var m,Q,N;for(m=b,Q=[],N=He();N!==t;)Q.push(N),N=He();return Q!==t?(N=W1(),N!==t?(Me=m,Q=ae(N),m=Q):(b=m,m=t)):(b=m,m=t),m}function W1(){var m,Q,N;if(m=b,Q=[],N=z1(),N!==t)for(;N!==t;)Q.push(N),N=z1();else Q=t;return Q!==t&&(Me=m,Q=Ks(Q)),m=Q,m}function z1(){var m,Q;return m=b,Q=Ege(),Q!==t&&(Me=m,Q=pr(Q)),m=Q,m===t&&(m=b,Q=Ige(),Q!==t&&(Me=m,Q=pr(Q)),m=Q,m===t&&(m=b,Q=yge(),Q!==t&&(Me=m,Q=pr(Q)),m=Q,m===t&&(m=b,Q=wge(),Q!==t&&(Me=m,Q=pr(Q)),m=Q))),m}function Ege(){var m,Q,N,U;return m=b,r.substr(b,2)===Ii?(Q=Ii,b+=2):(Q=t,I===0&&be(rs)),Q!==t?(N=Qge(),N!==t?(r.charCodeAt(b)===39?(U=fa,b++):(U=t,I===0&&be(dA)),U!==t?(Me=m,Q=cg(N),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m}function Ige(){var m,Q,N,U;return m=b,r.charCodeAt(b)===39?(Q=fa,b++):(Q=t,I===0&&be(dA)),Q!==t?(N=Bge(),N!==t?(r.charCodeAt(b)===39?(U=fa,b++):(U=t,I===0&&be(dA)),U!==t?(Me=m,Q=cg(N),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m}function yge(){var m,Q,N,U;if(m=b,r.substr(b,2)===is?(Q=is,b+=2):(Q=t,I===0&&be(CA)),Q!==t&&(Me=m,Q=ha()),m=Q,m===t)if(m=b,r.charCodeAt(b)===34?(Q=wp,b++):(Q=t,I===0&&be(mA)),Q!==t){for(N=[],U=V1();U!==t;)N.push(U),U=V1();N!==t?(r.charCodeAt(b)===34?(U=wp,b++):(U=t,I===0&&be(mA)),U!==t?(Me=m,Q=EA(N),m=Q):(b=m,m=t)):(b=m,m=t)}else b=m,m=t;return m}function wge(){var m,Q,N;if(m=b,Q=[],N=X1(),N!==t)for(;N!==t;)Q.push(N),N=X1();else Q=t;return Q!==t&&(Me=m,Q=EA(Q)),m=Q,m}function V1(){var m,Q;return m=b,Q=eK(),Q!==t&&(Me=m,Q=wr(Q)),m=Q,m===t&&(m=b,Q=tK(),Q!==t&&(Me=m,Q=Tl(Q)),m=Q,m===t&&(m=b,Q=aS(),Q!==t&&(Me=m,Q=ug(Q)),m=Q,m===t&&(m=b,Q=bge(),Q!==t&&(Me=m,Q=yo(Q)),m=Q))),m}function X1(){var m,Q;return m=b,Q=eK(),Q!==t&&(Me=m,Q=gg(Q)),m=Q,m===t&&(m=b,Q=tK(),Q!==t&&(Me=m,Q=Bp(Q)),m=Q,m===t&&(m=b,Q=aS(),Q!==t&&(Me=m,Q=bp(Q)),m=Q,m===t&&(m=b,Q=xge(),Q!==t&&(Me=m,Q=vr(Q)),m=Q,m===t&&(m=b,Q=vge(),Q!==t&&(Me=m,Q=yo(Q)),m=Q)))),m}function Bge(){var m,Q,N;for(m=b,Q=[],se.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(wo));N!==t;)Q.push(N),se.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(wo));return Q!==t&&(Me=m,Q=Fn(Q)),m=Q,m}function bge(){var m,Q,N;if(m=b,Q=[],N=Z1(),N===t&&(fg.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(bt))),N!==t)for(;N!==t;)Q.push(N),N=Z1(),N===t&&(fg.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(bt)));else Q=t;return Q!==t&&(Me=m,Q=Fn(Q)),m=Q,m}function Z1(){var m,Q,N;return m=b,r.substr(b,2)===Ll?(Q=Ll,b+=2):(Q=t,I===0&&be(Nn)),Q!==t&&(Me=m,Q=ns()),m=Q,m===t&&(m=b,r.charCodeAt(b)===92?(Q=ss,b++):(Q=t,I===0&&be(gt)),Q!==t?(Bo.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(At)),N!==t?(Me=m,Q=ln(N),m=Q):(b=m,m=t)):(b=m,m=t)),m}function Qge(){var m,Q,N;for(m=b,Q=[],N=_1(),N===t&&(se.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(wo)));N!==t;)Q.push(N),N=_1(),N===t&&(se.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(wo)));return Q!==t&&(Me=m,Q=Fn(Q)),m=Q,m}function _1(){var m,Q,N;return m=b,r.substr(b,2)===S?(Q=S,b+=2):(Q=t,I===0&&be(Lt)),Q!==t&&(Me=m,Q=hg()),m=Q,m===t&&(m=b,r.substr(b,2)===Ol?(Q=Ol,b+=2):(Q=t,I===0&&be(Qp)),Q!==t&&(Me=m,Q=Sp()),m=Q,m===t&&(m=b,r.charCodeAt(b)===92?(Q=ss,b++):(Q=t,I===0&&be(gt)),Q!==t?(vp.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(xp)),N!==t?(Me=m,Q=Pp(),m=Q):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===G?(Q=G,b+=2):(Q=t,I===0&&be(yt)),Q!==t&&(Me=m,Q=IA()),m=Q,m===t&&(m=b,r.substr(b,2)===zi?(Q=zi,b+=2):(Q=t,I===0&&be(Ml)),Q!==t&&(Me=m,Q=Xe()),m=Q,m===t&&(m=b,r.substr(b,2)===pa?(Q=pa,b+=2):(Q=t,I===0&&be(pg)),Q!==t&&(Me=m,Q=OE()),m=Q,m===t&&(m=b,r.substr(b,2)===Dp?(Q=Dp,b+=2):(Q=t,I===0&&be(ME)),Q!==t&&(Me=m,Q=ar()),m=Q,m===t&&(m=b,r.substr(b,2)===Tn?(Q=Tn,b+=2):(Q=t,I===0&&be(Kl)),Q!==t&&(Me=m,Q=kp()),m=Q,m===t&&(m=b,r.charCodeAt(b)===92?(Q=ss,b++):(Q=t,I===0&&be(gt)),Q!==t?(Us.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(da)),N!==t?(Me=m,Q=ln(N),m=Q):(b=m,m=t)):(b=m,m=t),m===t&&(m=Sge()))))))))),m}function Sge(){var m,Q,N,U,ce,Se,ht,Bt,qr,hi,as,AS;return m=b,r.charCodeAt(b)===92?(Q=ss,b++):(Q=t,I===0&&be(gt)),Q!==t?(N=nS(),N!==t?(Me=m,Q=cn(N),m=Q):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Le?(Q=Le,b+=2):(Q=t,I===0&&be(dg)),Q!==t?(N=b,U=b,ce=nS(),ce!==t?(Se=Mn(),Se!==t?(ce=[ce,Se],U=ce):(b=U,U=t)):(b=U,U=t),U===t&&(U=nS()),U!==t?N=r.substring(N,b):N=U,N!==t?(Me=m,Q=cn(N),m=Q):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Ul?(Q=Ul,b+=2):(Q=t,I===0&&be(Hs)),Q!==t?(N=b,U=b,ce=Mn(),ce!==t?(Se=Mn(),Se!==t?(ht=Mn(),ht!==t?(Bt=Mn(),Bt!==t?(ce=[ce,Se,ht,Bt],U=ce):(b=U,U=t)):(b=U,U=t)):(b=U,U=t)):(b=U,U=t),U!==t?N=r.substring(N,b):N=U,N!==t?(Me=m,Q=cn(N),m=Q):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Hl?(Q=Hl,b+=2):(Q=t,I===0&&be(yA)),Q!==t?(N=b,U=b,ce=Mn(),ce!==t?(Se=Mn(),Se!==t?(ht=Mn(),ht!==t?(Bt=Mn(),Bt!==t?(qr=Mn(),qr!==t?(hi=Mn(),hi!==t?(as=Mn(),as!==t?(AS=Mn(),AS!==t?(ce=[ce,Se,ht,Bt,qr,hi,as,AS],U=ce):(b=U,U=t)):(b=U,U=t)):(b=U,U=t)):(b=U,U=t)):(b=U,U=t)):(b=U,U=t)):(b=U,U=t)):(b=U,U=t),U!==t?N=r.substring(N,b):N=U,N!==t?(Me=m,Q=Cg(N),m=Q):(b=m,m=t)):(b=m,m=t)))),m}function nS(){var m;return mg.test(r.charAt(b))?(m=r.charAt(b),b++):(m=t,I===0&&be(Ca)),m}function Mn(){var m;return ma.test(r.charAt(b))?(m=r.charAt(b),b++):(m=t,I===0&&be(rt)),m}function vge(){var m,Q,N,U,ce;if(m=b,Q=[],N=b,r.charCodeAt(b)===92?(U=ss,b++):(U=t,I===0&&be(gt)),U!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&be(bo)),ce!==t?(Me=N,U=ln(ce),N=U):(b=N,N=t)):(b=N,N=t),N===t&&(N=b,U=b,I++,ce=iK(),I--,ce===t?U=void 0:(b=U,U=t),U!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&be(bo)),ce!==t?(Me=N,U=ln(ce),N=U):(b=N,N=t)):(b=N,N=t)),N!==t)for(;N!==t;)Q.push(N),N=b,r.charCodeAt(b)===92?(U=ss,b++):(U=t,I===0&&be(gt)),U!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&be(bo)),ce!==t?(Me=N,U=ln(ce),N=U):(b=N,N=t)):(b=N,N=t),N===t&&(N=b,U=b,I++,ce=iK(),I--,ce===t?U=void 0:(b=U,U=t),U!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&be(bo)),ce!==t?(Me=N,U=ln(ce),N=U):(b=N,N=t)):(b=N,N=t));else Q=t;return Q!==t&&(Me=m,Q=Fn(Q)),m=Q,m}function sS(){var m,Q,N,U,ce,Se;if(m=b,r.charCodeAt(b)===45?(Q=wA,b++):(Q=t,I===0&&be(Gl)),Q===t&&(r.charCodeAt(b)===43?(Q=Gs,b++):(Q=t,I===0&&be(Yl))),Q===t&&(Q=null),Q!==t){if(N=[],qe.test(r.charAt(b))?(U=r.charAt(b),b++):(U=t,I===0&&be(ne)),U!==t)for(;U!==t;)N.push(U),qe.test(r.charAt(b))?(U=r.charAt(b),b++):(U=t,I===0&&be(ne));else N=t;if(N!==t)if(r.charCodeAt(b)===46?(U=KE,b++):(U=t,I===0&&be(Rp)),U!==t){if(ce=[],qe.test(r.charAt(b))?(Se=r.charAt(b),b++):(Se=t,I===0&&be(ne)),Se!==t)for(;Se!==t;)ce.push(Se),qe.test(r.charAt(b))?(Se=r.charAt(b),b++):(Se=t,I===0&&be(ne));else ce=t;ce!==t?(Me=m,Q=Eg(Q,N,ce),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t}else b=m,m=t;if(m===t){if(m=b,r.charCodeAt(b)===45?(Q=wA,b++):(Q=t,I===0&&be(Gl)),Q===t&&(r.charCodeAt(b)===43?(Q=Gs,b++):(Q=t,I===0&&be(Yl))),Q===t&&(Q=null),Q!==t){if(N=[],qe.test(r.charAt(b))?(U=r.charAt(b),b++):(U=t,I===0&&be(ne)),U!==t)for(;U!==t;)N.push(U),qe.test(r.charAt(b))?(U=r.charAt(b),b++):(U=t,I===0&&be(ne));else N=t;N!==t?(Me=m,Q=Fp(Q,N),m=Q):(b=m,m=t)}else b=m,m=t;if(m===t&&(m=b,Q=aS(),Q!==t&&(Me=m,Q=UE(Q)),m=Q,m===t&&(m=b,Q=ql(),Q!==t&&(Me=m,Q=jl(Q)),m=Q,m===t)))if(m=b,r.charCodeAt(b)===40?(Q=ge,b++):(Q=t,I===0&&be(re)),Q!==t){for(N=[],U=He();U!==t;)N.push(U),U=He();if(N!==t)if(U=$1(),U!==t){for(ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();ce!==t?(r.charCodeAt(b)===41?(Se=O,b++):(Se=t,I===0&&be(F)),Se!==t?(Me=m,Q=HE(U),m=Q):(b=m,m=t)):(b=m,m=t)}else b=m,m=t;else b=m,m=t}else b=m,m=t}return m}function oS(){var m,Q,N,U,ce,Se,ht,Bt;if(m=b,Q=sS(),Q!==t){for(N=[],U=b,ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();if(ce!==t)if(r.charCodeAt(b)===42?(Se=Ig,b++):(Se=t,I===0&&be(BA)),Se===t&&(r.charCodeAt(b)===47?(Se=Rr,b++):(Se=t,I===0&&be(GE))),Se!==t){for(ht=[],Bt=He();Bt!==t;)ht.push(Bt),Bt=He();ht!==t?(Bt=sS(),Bt!==t?(Me=U,ce=Ys(Q,Se,Bt),U=ce):(b=U,U=t)):(b=U,U=t)}else b=U,U=t;else b=U,U=t;for(;U!==t;){for(N.push(U),U=b,ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();if(ce!==t)if(r.charCodeAt(b)===42?(Se=Ig,b++):(Se=t,I===0&&be(BA)),Se===t&&(r.charCodeAt(b)===47?(Se=Rr,b++):(Se=t,I===0&&be(GE))),Se!==t){for(ht=[],Bt=He();Bt!==t;)ht.push(Bt),Bt=He();ht!==t?(Bt=sS(),Bt!==t?(Me=U,ce=Ys(Q,Se,Bt),U=ce):(b=U,U=t)):(b=U,U=t)}else b=U,U=t;else b=U,U=t}N!==t?(Me=m,Q=js(Q,N),m=Q):(b=m,m=t)}else b=m,m=t;return m}function $1(){var m,Q,N,U,ce,Se,ht,Bt;if(m=b,Q=oS(),Q!==t){for(N=[],U=b,ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();if(ce!==t)if(r.charCodeAt(b)===43?(Se=Gs,b++):(Se=t,I===0&&be(Yl)),Se===t&&(r.charCodeAt(b)===45?(Se=wA,b++):(Se=t,I===0&&be(Gl))),Se!==t){for(ht=[],Bt=He();Bt!==t;)ht.push(Bt),Bt=He();ht!==t?(Bt=oS(),Bt!==t?(Me=U,ce=yg(Q,Se,Bt),U=ce):(b=U,U=t)):(b=U,U=t)}else b=U,U=t;else b=U,U=t;for(;U!==t;){for(N.push(U),U=b,ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();if(ce!==t)if(r.charCodeAt(b)===43?(Se=Gs,b++):(Se=t,I===0&&be(Yl)),Se===t&&(r.charCodeAt(b)===45?(Se=wA,b++):(Se=t,I===0&&be(Gl))),Se!==t){for(ht=[],Bt=He();Bt!==t;)ht.push(Bt),Bt=He();ht!==t?(Bt=oS(),Bt!==t?(Me=U,ce=yg(Q,Se,Bt),U=ce):(b=U,U=t)):(b=U,U=t)}else b=U,U=t;else b=U,U=t}N!==t?(Me=m,Q=js(Q,N),m=Q):(b=m,m=t)}else b=m,m=t;return m}function eK(){var m,Q,N,U,ce,Se;if(m=b,r.substr(b,3)===bA?(Q=bA,b+=3):(Q=t,I===0&&be(R)),Q!==t){for(N=[],U=He();U!==t;)N.push(U),U=He();if(N!==t)if(U=$1(),U!==t){for(ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();ce!==t?(r.substr(b,2)===q?(Se=q,b+=2):(Se=t,I===0&&be(Ce)),Se!==t?(Me=m,Q=Ke(U),m=Q):(b=m,m=t)):(b=m,m=t)}else b=m,m=t;else b=m,m=t}else b=m,m=t;return m}function tK(){var m,Q,N,U;return m=b,r.substr(b,2)===Re?(Q=Re,b+=2):(Q=t,I===0&&be(ze)),Q!==t?(N=Mr(),N!==t?(r.charCodeAt(b)===41?(U=O,b++):(U=t,I===0&&be(F)),U!==t?(Me=m,Q=dt(N),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m}function aS(){var m,Q,N,U,ce,Se;return m=b,r.substr(b,2)===Ft?(Q=Ft,b+=2):(Q=t,I===0&&be(Ln)),Q!==t?(N=ql(),N!==t?(r.substr(b,2)===JQ?(U=JQ,b+=2):(U=t,I===0&&be(k1)),U!==t?(ce=q1(),ce!==t?(r.charCodeAt(b)===125?(Se=Fe,b++):(Se=t,I===0&&be(Ne)),Se!==t?(Me=m,Q=R1(N,ce),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Ft?(Q=Ft,b+=2):(Q=t,I===0&&be(Ln)),Q!==t?(N=ql(),N!==t?(r.substr(b,3)===WQ?(U=WQ,b+=3):(U=t,I===0&&be(F1)),U!==t?(Me=m,Q=N1(N),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Ft?(Q=Ft,b+=2):(Q=t,I===0&&be(Ln)),Q!==t?(N=ql(),N!==t?(r.substr(b,2)===zQ?(U=zQ,b+=2):(U=t,I===0&&be(T1)),U!==t?(ce=q1(),ce!==t?(r.charCodeAt(b)===125?(Se=Fe,b++):(Se=t,I===0&&be(Ne)),Se!==t?(Me=m,Q=L1(N,ce),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Ft?(Q=Ft,b+=2):(Q=t,I===0&&be(Ln)),Q!==t?(N=ql(),N!==t?(r.substr(b,3)===VQ?(U=VQ,b+=3):(U=t,I===0&&be(O1)),U!==t?(Me=m,Q=M1(N),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Ft?(Q=Ft,b+=2):(Q=t,I===0&&be(Ln)),Q!==t?(N=ql(),N!==t?(r.charCodeAt(b)===125?(U=Fe,b++):(U=t,I===0&&be(Ne)),U!==t?(Me=m,Q=XQ(N),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.charCodeAt(b)===36?(Q=K1,b++):(Q=t,I===0&&be(U1)),Q!==t?(N=ql(),N!==t?(Me=m,Q=XQ(N),m=Q):(b=m,m=t)):(b=m,m=t)))))),m}function xge(){var m,Q,N;return m=b,Q=Pge(),Q!==t?(Me=b,N=H1(Q),N?N=void 0:N=t,N!==t?(Me=m,Q=G1(Q),m=Q):(b=m,m=t)):(b=m,m=t),m}function Pge(){var m,Q,N,U,ce;if(m=b,Q=[],N=b,U=b,I++,ce=nK(),I--,ce===t?U=void 0:(b=U,U=t),U!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&be(bo)),ce!==t?(Me=N,U=ln(ce),N=U):(b=N,N=t)):(b=N,N=t),N!==t)for(;N!==t;)Q.push(N),N=b,U=b,I++,ce=nK(),I--,ce===t?U=void 0:(b=U,U=t),U!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&be(bo)),ce!==t?(Me=N,U=ln(ce),N=U):(b=N,N=t)):(b=N,N=t);else Q=t;return Q!==t&&(Me=m,Q=Fn(Q)),m=Q,m}function rK(){var m,Q,N;if(m=b,Q=[],ZQ.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(_Q)),N!==t)for(;N!==t;)Q.push(N),ZQ.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(_Q));else Q=t;return Q!==t&&(Me=m,Q=$Q()),m=Q,m}function ql(){var m,Q,N;if(m=b,Q=[],eS.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(tS)),N!==t)for(;N!==t;)Q.push(N),eS.test(r.charAt(b))?(N=r.charAt(b),b++):(N=t,I===0&&be(tS));else Q=t;return Q!==t&&(Me=m,Q=$Q()),m=Q,m}function iK(){var m;return Y1.test(r.charAt(b))?(m=r.charAt(b),b++):(m=t,I===0&&be(wg)),m}function nK(){var m;return rS.test(r.charAt(b))?(m=r.charAt(b),b++):(m=t,I===0&&be(iS)),m}function He(){var m,Q;if(m=[],YE.test(r.charAt(b))?(Q=r.charAt(b),b++):(Q=t,I===0&&be(jE)),Q!==t)for(;Q!==t;)m.push(Q),YE.test(r.charAt(b))?(Q=r.charAt(b),b++):(Q=t,I===0&&be(jE));else m=t;return m}if(k=n(),k!==t&&b===r.length)return k;throw k!==t&&b{"use strict";function Dfe(r,e){function t(){this.constructor=r}t.prototype=e.prototype,r.prototype=new t}function $l(r,e,t,i){this.message=r,this.expected=e,this.found=t,this.location=i,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,$l)}Dfe($l,Error);$l.buildMessage=function(r,e){var t={literal:function(c){return'"'+n(c.text)+'"'},class:function(c){var u="",g;for(g=0;g0){for(g=1,f=1;gH&&(H=v,j=[]),j.push(ne))}function Ne(ne,Y){return new $l(ne,null,null,Y)}function oe(ne,Y,he){return new $l($l.buildMessage(ne,Y),ne,Y,he)}function le(){var ne,Y,he,ie;return ne=v,Y=Be(),Y!==t?(r.charCodeAt(v)===47?(he=s,v++):(he=t,$===0&&Fe(o)),he!==t?(ie=Be(),ie!==t?(D=ne,Y=a(Y,ie),ne=Y):(v=ne,ne=t)):(v=ne,ne=t)):(v=ne,ne=t),ne===t&&(ne=v,Y=Be(),Y!==t&&(D=ne,Y=l(Y)),ne=Y),ne}function Be(){var ne,Y,he,ie;return ne=v,Y=fe(),Y!==t?(r.charCodeAt(v)===64?(he=c,v++):(he=t,$===0&&Fe(u)),he!==t?(ie=qe(),ie!==t?(D=ne,Y=g(Y,ie),ne=Y):(v=ne,ne=t)):(v=ne,ne=t)):(v=ne,ne=t),ne===t&&(ne=v,Y=fe(),Y!==t&&(D=ne,Y=f(Y)),ne=Y),ne}function fe(){var ne,Y,he,ie,de;return ne=v,r.charCodeAt(v)===64?(Y=c,v++):(Y=t,$===0&&Fe(u)),Y!==t?(he=ae(),he!==t?(r.charCodeAt(v)===47?(ie=s,v++):(ie=t,$===0&&Fe(o)),ie!==t?(de=ae(),de!==t?(D=ne,Y=h(),ne=Y):(v=ne,ne=t)):(v=ne,ne=t)):(v=ne,ne=t)):(v=ne,ne=t),ne===t&&(ne=v,Y=ae(),Y!==t&&(D=ne,Y=h()),ne=Y),ne}function ae(){var ne,Y,he;if(ne=v,Y=[],p.test(r.charAt(v))?(he=r.charAt(v),v++):(he=t,$===0&&Fe(C)),he!==t)for(;he!==t;)Y.push(he),p.test(r.charAt(v))?(he=r.charAt(v),v++):(he=t,$===0&&Fe(C));else Y=t;return Y!==t&&(D=ne,Y=h()),ne=Y,ne}function qe(){var ne,Y,he;if(ne=v,Y=[],y.test(r.charAt(v))?(he=r.charAt(v),v++):(he=t,$===0&&Fe(B)),he!==t)for(;he!==t;)Y.push(he),y.test(r.charAt(v))?(he=r.charAt(v),v++):(he=t,$===0&&Fe(B));else Y=t;return Y!==t&&(D=ne,Y=h()),ne=Y,ne}if(V=n(),V!==t&&v===r.length)return V;throw V!==t&&v{"use strict";function mU(r){return typeof r>"u"||r===null}function Rfe(r){return typeof r=="object"&&r!==null}function Ffe(r){return Array.isArray(r)?r:mU(r)?[]:[r]}function Nfe(r,e){var t,i,n,s;if(e)for(s=Object.keys(e),t=0,i=s.length;t{"use strict";function Vp(r,e){Error.call(this),this.name="YAMLException",this.reason=r,this.mark=e,this.message=(this.reason||"(unknown reason)")+(this.mark?" "+this.mark.toString():""),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack||""}Vp.prototype=Object.create(Error.prototype);Vp.prototype.constructor=Vp;Vp.prototype.toString=function(e){var t=this.name+": ";return t+=this.reason||"(unknown reason)",!e&&this.mark&&(t+=" "+this.mark.toString()),t};EU.exports=Vp});var wU=w((SZe,yU)=>{"use strict";var IU=tc();function HS(r,e,t,i,n){this.name=r,this.buffer=e,this.position=t,this.line=i,this.column=n}HS.prototype.getSnippet=function(e,t){var i,n,s,o,a;if(!this.buffer)return null;for(e=e||4,t=t||75,i="",n=this.position;n>0&&`\0\r -\x85\u2028\u2029`.indexOf(this.buffer.charAt(n-1))===-1;)if(n-=1,this.position-n>t/2-1){i=" ... ",n+=5;break}for(s="",o=this.position;ot/2-1){s=" ... ",o-=5;break}return a=this.buffer.slice(n,o),IU.repeat(" ",e)+i+a+s+` -`+IU.repeat(" ",e+this.position-n+i.length)+"^"};HS.prototype.toString=function(e){var t,i="";return this.name&&(i+='in "'+this.name+'" '),i+="at line "+(this.line+1)+", column "+(this.column+1),e||(t=this.getSnippet(),t&&(i+=`: -`+t)),i};yU.exports=HS});var si=w((vZe,bU)=>{"use strict";var BU=Ng(),Ofe=["kind","resolve","construct","instanceOf","predicate","represent","defaultStyle","styleAliases"],Mfe=["scalar","sequence","mapping"];function Kfe(r){var e={};return r!==null&&Object.keys(r).forEach(function(t){r[t].forEach(function(i){e[String(i)]=t})}),e}function Ufe(r,e){if(e=e||{},Object.keys(e).forEach(function(t){if(Ofe.indexOf(t)===-1)throw new BU('Unknown option "'+t+'" is met in definition of "'+r+'" YAML type.')}),this.tag=r,this.kind=e.kind||null,this.resolve=e.resolve||function(){return!0},this.construct=e.construct||function(t){return t},this.instanceOf=e.instanceOf||null,this.predicate=e.predicate||null,this.represent=e.represent||null,this.defaultStyle=e.defaultStyle||null,this.styleAliases=Kfe(e.styleAliases||null),Mfe.indexOf(this.kind)===-1)throw new BU('Unknown kind "'+this.kind+'" is specified for "'+r+'" YAML type.')}bU.exports=Ufe});var rc=w((xZe,SU)=>{"use strict";var QU=tc(),dI=Ng(),Hfe=si();function GS(r,e,t){var i=[];return r.include.forEach(function(n){t=GS(n,e,t)}),r[e].forEach(function(n){t.forEach(function(s,o){s.tag===n.tag&&s.kind===n.kind&&i.push(o)}),t.push(n)}),t.filter(function(n,s){return i.indexOf(s)===-1})}function Gfe(){var r={scalar:{},sequence:{},mapping:{},fallback:{}},e,t;function i(n){r[n.kind][n.tag]=r.fallback[n.tag]=n}for(e=0,t=arguments.length;e{"use strict";var Yfe=si();vU.exports=new Yfe("tag:yaml.org,2002:str",{kind:"scalar",construct:function(r){return r!==null?r:""}})});var DU=w((DZe,PU)=>{"use strict";var jfe=si();PU.exports=new jfe("tag:yaml.org,2002:seq",{kind:"sequence",construct:function(r){return r!==null?r:[]}})});var RU=w((kZe,kU)=>{"use strict";var qfe=si();kU.exports=new qfe("tag:yaml.org,2002:map",{kind:"mapping",construct:function(r){return r!==null?r:{}}})});var CI=w((RZe,FU)=>{"use strict";var Jfe=rc();FU.exports=new Jfe({explicit:[xU(),DU(),RU()]})});var TU=w((FZe,NU)=>{"use strict";var Wfe=si();function zfe(r){if(r===null)return!0;var e=r.length;return e===1&&r==="~"||e===4&&(r==="null"||r==="Null"||r==="NULL")}function Vfe(){return null}function Xfe(r){return r===null}NU.exports=new Wfe("tag:yaml.org,2002:null",{kind:"scalar",resolve:zfe,construct:Vfe,predicate:Xfe,represent:{canonical:function(){return"~"},lowercase:function(){return"null"},uppercase:function(){return"NULL"},camelcase:function(){return"Null"}},defaultStyle:"lowercase"})});var OU=w((NZe,LU)=>{"use strict";var Zfe=si();function _fe(r){if(r===null)return!1;var e=r.length;return e===4&&(r==="true"||r==="True"||r==="TRUE")||e===5&&(r==="false"||r==="False"||r==="FALSE")}function $fe(r){return r==="true"||r==="True"||r==="TRUE"}function ehe(r){return Object.prototype.toString.call(r)==="[object Boolean]"}LU.exports=new Zfe("tag:yaml.org,2002:bool",{kind:"scalar",resolve:_fe,construct:$fe,predicate:ehe,represent:{lowercase:function(r){return r?"true":"false"},uppercase:function(r){return r?"TRUE":"FALSE"},camelcase:function(r){return r?"True":"False"}},defaultStyle:"lowercase"})});var KU=w((TZe,MU)=>{"use strict";var the=tc(),rhe=si();function ihe(r){return 48<=r&&r<=57||65<=r&&r<=70||97<=r&&r<=102}function nhe(r){return 48<=r&&r<=55}function she(r){return 48<=r&&r<=57}function ohe(r){if(r===null)return!1;var e=r.length,t=0,i=!1,n;if(!e)return!1;if(n=r[t],(n==="-"||n==="+")&&(n=r[++t]),n==="0"){if(t+1===e)return!0;if(n=r[++t],n==="b"){for(t++;t=0?"0b"+r.toString(2):"-0b"+r.toString(2).slice(1)},octal:function(r){return r>=0?"0"+r.toString(8):"-0"+r.toString(8).slice(1)},decimal:function(r){return r.toString(10)},hexadecimal:function(r){return r>=0?"0x"+r.toString(16).toUpperCase():"-0x"+r.toString(16).toUpperCase().slice(1)}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}})});var GU=w((LZe,HU)=>{"use strict";var UU=tc(),lhe=si(),che=new RegExp("^(?:[-+]?(?:0|[1-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");function uhe(r){return!(r===null||!che.test(r)||r[r.length-1]==="_")}function ghe(r){var e,t,i,n;return e=r.replace(/_/g,"").toLowerCase(),t=e[0]==="-"?-1:1,n=[],"+-".indexOf(e[0])>=0&&(e=e.slice(1)),e===".inf"?t===1?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:e===".nan"?NaN:e.indexOf(":")>=0?(e.split(":").forEach(function(s){n.unshift(parseFloat(s,10))}),e=0,i=1,n.forEach(function(s){e+=s*i,i*=60}),t*e):t*parseFloat(e,10)}var fhe=/^[-+]?[0-9]+e/;function hhe(r,e){var t;if(isNaN(r))switch(e){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===r)switch(e){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===r)switch(e){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(UU.isNegativeZero(r))return"-0.0";return t=r.toString(10),fhe.test(t)?t.replace("e",".e"):t}function phe(r){return Object.prototype.toString.call(r)==="[object Number]"&&(r%1!==0||UU.isNegativeZero(r))}HU.exports=new lhe("tag:yaml.org,2002:float",{kind:"scalar",resolve:uhe,construct:ghe,predicate:phe,represent:hhe,defaultStyle:"lowercase"})});var YS=w((OZe,YU)=>{"use strict";var dhe=rc();YU.exports=new dhe({include:[CI()],implicit:[TU(),OU(),KU(),GU()]})});var jS=w((MZe,jU)=>{"use strict";var Che=rc();jU.exports=new Che({include:[YS()]})});var zU=w((KZe,WU)=>{"use strict";var mhe=si(),qU=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),JU=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");function Ehe(r){return r===null?!1:qU.exec(r)!==null||JU.exec(r)!==null}function Ihe(r){var e,t,i,n,s,o,a,l=0,c=null,u,g,f;if(e=qU.exec(r),e===null&&(e=JU.exec(r)),e===null)throw new Error("Date resolve error");if(t=+e[1],i=+e[2]-1,n=+e[3],!e[4])return new Date(Date.UTC(t,i,n));if(s=+e[4],o=+e[5],a=+e[6],e[7]){for(l=e[7].slice(0,3);l.length<3;)l+="0";l=+l}return e[9]&&(u=+e[10],g=+(e[11]||0),c=(u*60+g)*6e4,e[9]==="-"&&(c=-c)),f=new Date(Date.UTC(t,i,n,s,o,a,l)),c&&f.setTime(f.getTime()-c),f}function yhe(r){return r.toISOString()}WU.exports=new mhe("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:Ehe,construct:Ihe,instanceOf:Date,represent:yhe})});var XU=w((UZe,VU)=>{"use strict";var whe=si();function Bhe(r){return r==="<<"||r===null}VU.exports=new whe("tag:yaml.org,2002:merge",{kind:"scalar",resolve:Bhe})});var $U=w((HZe,_U)=>{"use strict";var ic;try{ZU=J,ic=ZU("buffer").Buffer}catch{}var ZU,bhe=si(),qS=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/= -\r`;function Qhe(r){if(r===null)return!1;var e,t,i=0,n=r.length,s=qS;for(t=0;t64)){if(e<0)return!1;i+=6}return i%8===0}function She(r){var e,t,i=r.replace(/[\r\n=]/g,""),n=i.length,s=qS,o=0,a=[];for(e=0;e>16&255),a.push(o>>8&255),a.push(o&255)),o=o<<6|s.indexOf(i.charAt(e));return t=n%4*6,t===0?(a.push(o>>16&255),a.push(o>>8&255),a.push(o&255)):t===18?(a.push(o>>10&255),a.push(o>>2&255)):t===12&&a.push(o>>4&255),ic?ic.from?ic.from(a):new ic(a):a}function vhe(r){var e="",t=0,i,n,s=r.length,o=qS;for(i=0;i>18&63],e+=o[t>>12&63],e+=o[t>>6&63],e+=o[t&63]),t=(t<<8)+r[i];return n=s%3,n===0?(e+=o[t>>18&63],e+=o[t>>12&63],e+=o[t>>6&63],e+=o[t&63]):n===2?(e+=o[t>>10&63],e+=o[t>>4&63],e+=o[t<<2&63],e+=o[64]):n===1&&(e+=o[t>>2&63],e+=o[t<<4&63],e+=o[64],e+=o[64]),e}function xhe(r){return ic&&ic.isBuffer(r)}_U.exports=new bhe("tag:yaml.org,2002:binary",{kind:"scalar",resolve:Qhe,construct:She,predicate:xhe,represent:vhe})});var t2=w((YZe,e2)=>{"use strict";var Phe=si(),Dhe=Object.prototype.hasOwnProperty,khe=Object.prototype.toString;function Rhe(r){if(r===null)return!0;var e=[],t,i,n,s,o,a=r;for(t=0,i=a.length;t{"use strict";var Nhe=si(),The=Object.prototype.toString;function Lhe(r){if(r===null)return!0;var e,t,i,n,s,o=r;for(s=new Array(o.length),e=0,t=o.length;e{"use strict";var Mhe=si(),Khe=Object.prototype.hasOwnProperty;function Uhe(r){if(r===null)return!0;var e,t=r;for(e in t)if(Khe.call(t,e)&&t[e]!==null)return!1;return!0}function Hhe(r){return r!==null?r:{}}n2.exports=new Mhe("tag:yaml.org,2002:set",{kind:"mapping",resolve:Uhe,construct:Hhe})});var Lg=w((JZe,o2)=>{"use strict";var Ghe=rc();o2.exports=new Ghe({include:[jS()],implicit:[zU(),XU()],explicit:[$U(),t2(),i2(),s2()]})});var A2=w((WZe,a2)=>{"use strict";var Yhe=si();function jhe(){return!0}function qhe(){}function Jhe(){return""}function Whe(r){return typeof r>"u"}a2.exports=new Yhe("tag:yaml.org,2002:js/undefined",{kind:"scalar",resolve:jhe,construct:qhe,predicate:Whe,represent:Jhe})});var c2=w((zZe,l2)=>{"use strict";var zhe=si();function Vhe(r){if(r===null||r.length===0)return!1;var e=r,t=/\/([gim]*)$/.exec(r),i="";return!(e[0]==="/"&&(t&&(i=t[1]),i.length>3||e[e.length-i.length-1]!=="/"))}function Xhe(r){var e=r,t=/\/([gim]*)$/.exec(r),i="";return e[0]==="/"&&(t&&(i=t[1]),e=e.slice(1,e.length-i.length-1)),new RegExp(e,i)}function Zhe(r){var e="/"+r.source+"/";return r.global&&(e+="g"),r.multiline&&(e+="m"),r.ignoreCase&&(e+="i"),e}function _he(r){return Object.prototype.toString.call(r)==="[object RegExp]"}l2.exports=new zhe("tag:yaml.org,2002:js/regexp",{kind:"scalar",resolve:Vhe,construct:Xhe,predicate:_he,represent:Zhe})});var f2=w((VZe,g2)=>{"use strict";var mI;try{u2=J,mI=u2("esprima")}catch{typeof window<"u"&&(mI=window.esprima)}var u2,$he=si();function epe(r){if(r===null)return!1;try{var e="("+r+")",t=mI.parse(e,{range:!0});return!(t.type!=="Program"||t.body.length!==1||t.body[0].type!=="ExpressionStatement"||t.body[0].expression.type!=="ArrowFunctionExpression"&&t.body[0].expression.type!=="FunctionExpression")}catch{return!1}}function tpe(r){var e="("+r+")",t=mI.parse(e,{range:!0}),i=[],n;if(t.type!=="Program"||t.body.length!==1||t.body[0].type!=="ExpressionStatement"||t.body[0].expression.type!=="ArrowFunctionExpression"&&t.body[0].expression.type!=="FunctionExpression")throw new Error("Failed to resolve function");return t.body[0].expression.params.forEach(function(s){i.push(s.name)}),n=t.body[0].expression.body.range,t.body[0].expression.body.type==="BlockStatement"?new Function(i,e.slice(n[0]+1,n[1]-1)):new Function(i,"return "+e.slice(n[0],n[1]))}function rpe(r){return r.toString()}function ipe(r){return Object.prototype.toString.call(r)==="[object Function]"}g2.exports=new $he("tag:yaml.org,2002:js/function",{kind:"scalar",resolve:epe,construct:tpe,predicate:ipe,represent:rpe})});var Xp=w((ZZe,p2)=>{"use strict";var h2=rc();p2.exports=h2.DEFAULT=new h2({include:[Lg()],explicit:[A2(),c2(),f2()]})});var N2=w((_Ze,Zp)=>{"use strict";var Ba=tc(),w2=Ng(),npe=wU(),B2=Lg(),spe=Xp(),kA=Object.prototype.hasOwnProperty,EI=1,b2=2,Q2=3,II=4,JS=1,ope=2,d2=3,ape=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,Ape=/[\x85\u2028\u2029]/,lpe=/[,\[\]\{\}]/,S2=/^(?:!|!!|![a-z\-]+!)$/i,v2=/^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;function C2(r){return Object.prototype.toString.call(r)}function xo(r){return r===10||r===13}function sc(r){return r===9||r===32}function fn(r){return r===9||r===32||r===10||r===13}function Og(r){return r===44||r===91||r===93||r===123||r===125}function cpe(r){var e;return 48<=r&&r<=57?r-48:(e=r|32,97<=e&&e<=102?e-97+10:-1)}function upe(r){return r===120?2:r===117?4:r===85?8:0}function gpe(r){return 48<=r&&r<=57?r-48:-1}function m2(r){return r===48?"\0":r===97?"\x07":r===98?"\b":r===116||r===9?" ":r===110?` -`:r===118?"\v":r===102?"\f":r===114?"\r":r===101?"\x1B":r===32?" ":r===34?'"':r===47?"/":r===92?"\\":r===78?"\x85":r===95?"\xA0":r===76?"\u2028":r===80?"\u2029":""}function fpe(r){return r<=65535?String.fromCharCode(r):String.fromCharCode((r-65536>>10)+55296,(r-65536&1023)+56320)}var x2=new Array(256),P2=new Array(256);for(nc=0;nc<256;nc++)x2[nc]=m2(nc)?1:0,P2[nc]=m2(nc);var nc;function hpe(r,e){this.input=r,this.filename=e.filename||null,this.schema=e.schema||spe,this.onWarning=e.onWarning||null,this.legacy=e.legacy||!1,this.json=e.json||!1,this.listener=e.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=r.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.documents=[]}function D2(r,e){return new w2(e,new npe(r.filename,r.input,r.position,r.line,r.position-r.lineStart))}function ft(r,e){throw D2(r,e)}function yI(r,e){r.onWarning&&r.onWarning.call(null,D2(r,e))}var E2={YAML:function(e,t,i){var n,s,o;e.version!==null&&ft(e,"duplication of %YAML directive"),i.length!==1&&ft(e,"YAML directive accepts exactly one argument"),n=/^([0-9]+)\.([0-9]+)$/.exec(i[0]),n===null&&ft(e,"ill-formed argument of the YAML directive"),s=parseInt(n[1],10),o=parseInt(n[2],10),s!==1&&ft(e,"unacceptable YAML version of the document"),e.version=i[0],e.checkLineBreaks=o<2,o!==1&&o!==2&&yI(e,"unsupported YAML version of the document")},TAG:function(e,t,i){var n,s;i.length!==2&&ft(e,"TAG directive accepts exactly two arguments"),n=i[0],s=i[1],S2.test(n)||ft(e,"ill-formed tag handle (first argument) of the TAG directive"),kA.call(e.tagMap,n)&&ft(e,'there is a previously declared suffix for "'+n+'" tag handle'),v2.test(s)||ft(e,"ill-formed tag prefix (second argument) of the TAG directive"),e.tagMap[n]=s}};function DA(r,e,t,i){var n,s,o,a;if(e1&&(r.result+=Ba.repeat(` -`,e-1))}function ppe(r,e,t){var i,n,s,o,a,l,c,u,g=r.kind,f=r.result,h;if(h=r.input.charCodeAt(r.position),fn(h)||Og(h)||h===35||h===38||h===42||h===33||h===124||h===62||h===39||h===34||h===37||h===64||h===96||(h===63||h===45)&&(n=r.input.charCodeAt(r.position+1),fn(n)||t&&Og(n)))return!1;for(r.kind="scalar",r.result="",s=o=r.position,a=!1;h!==0;){if(h===58){if(n=r.input.charCodeAt(r.position+1),fn(n)||t&&Og(n))break}else if(h===35){if(i=r.input.charCodeAt(r.position-1),fn(i))break}else{if(r.position===r.lineStart&&wI(r)||t&&Og(h))break;if(xo(h))if(l=r.line,c=r.lineStart,u=r.lineIndent,zr(r,!1,-1),r.lineIndent>=e){a=!0,h=r.input.charCodeAt(r.position);continue}else{r.position=o,r.line=l,r.lineStart=c,r.lineIndent=u;break}}a&&(DA(r,s,o,!1),zS(r,r.line-l),s=o=r.position,a=!1),sc(h)||(o=r.position+1),h=r.input.charCodeAt(++r.position)}return DA(r,s,o,!1),r.result?!0:(r.kind=g,r.result=f,!1)}function dpe(r,e){var t,i,n;if(t=r.input.charCodeAt(r.position),t!==39)return!1;for(r.kind="scalar",r.result="",r.position++,i=n=r.position;(t=r.input.charCodeAt(r.position))!==0;)if(t===39)if(DA(r,i,r.position,!0),t=r.input.charCodeAt(++r.position),t===39)i=r.position,r.position++,n=r.position;else return!0;else xo(t)?(DA(r,i,n,!0),zS(r,zr(r,!1,e)),i=n=r.position):r.position===r.lineStart&&wI(r)?ft(r,"unexpected end of the document within a single quoted scalar"):(r.position++,n=r.position);ft(r,"unexpected end of the stream within a single quoted scalar")}function Cpe(r,e){var t,i,n,s,o,a;if(a=r.input.charCodeAt(r.position),a!==34)return!1;for(r.kind="scalar",r.result="",r.position++,t=i=r.position;(a=r.input.charCodeAt(r.position))!==0;){if(a===34)return DA(r,t,r.position,!0),r.position++,!0;if(a===92){if(DA(r,t,r.position,!0),a=r.input.charCodeAt(++r.position),xo(a))zr(r,!1,e);else if(a<256&&x2[a])r.result+=P2[a],r.position++;else if((o=upe(a))>0){for(n=o,s=0;n>0;n--)a=r.input.charCodeAt(++r.position),(o=cpe(a))>=0?s=(s<<4)+o:ft(r,"expected hexadecimal character");r.result+=fpe(s),r.position++}else ft(r,"unknown escape sequence");t=i=r.position}else xo(a)?(DA(r,t,i,!0),zS(r,zr(r,!1,e)),t=i=r.position):r.position===r.lineStart&&wI(r)?ft(r,"unexpected end of the document within a double quoted scalar"):(r.position++,i=r.position)}ft(r,"unexpected end of the stream within a double quoted scalar")}function mpe(r,e){var t=!0,i,n=r.tag,s,o=r.anchor,a,l,c,u,g,f={},h,p,C,y;if(y=r.input.charCodeAt(r.position),y===91)l=93,g=!1,s=[];else if(y===123)l=125,g=!0,s={};else return!1;for(r.anchor!==null&&(r.anchorMap[r.anchor]=s),y=r.input.charCodeAt(++r.position);y!==0;){if(zr(r,!0,e),y=r.input.charCodeAt(r.position),y===l)return r.position++,r.tag=n,r.anchor=o,r.kind=g?"mapping":"sequence",r.result=s,!0;t||ft(r,"missed comma between flow collection entries"),p=h=C=null,c=u=!1,y===63&&(a=r.input.charCodeAt(r.position+1),fn(a)&&(c=u=!0,r.position++,zr(r,!0,e))),i=r.line,Kg(r,e,EI,!1,!0),p=r.tag,h=r.result,zr(r,!0,e),y=r.input.charCodeAt(r.position),(u||r.line===i)&&y===58&&(c=!0,y=r.input.charCodeAt(++r.position),zr(r,!0,e),Kg(r,e,EI,!1,!0),C=r.result),g?Mg(r,s,f,p,h,C):c?s.push(Mg(r,null,f,p,h,C)):s.push(h),zr(r,!0,e),y=r.input.charCodeAt(r.position),y===44?(t=!0,y=r.input.charCodeAt(++r.position)):t=!1}ft(r,"unexpected end of the stream within a flow collection")}function Epe(r,e){var t,i,n=JS,s=!1,o=!1,a=e,l=0,c=!1,u,g;if(g=r.input.charCodeAt(r.position),g===124)i=!1;else if(g===62)i=!0;else return!1;for(r.kind="scalar",r.result="";g!==0;)if(g=r.input.charCodeAt(++r.position),g===43||g===45)JS===n?n=g===43?d2:ope:ft(r,"repeat of a chomping mode identifier");else if((u=gpe(g))>=0)u===0?ft(r,"bad explicit indentation width of a block scalar; it cannot be less than one"):o?ft(r,"repeat of an indentation width identifier"):(a=e+u-1,o=!0);else break;if(sc(g)){do g=r.input.charCodeAt(++r.position);while(sc(g));if(g===35)do g=r.input.charCodeAt(++r.position);while(!xo(g)&&g!==0)}for(;g!==0;){for(WS(r),r.lineIndent=0,g=r.input.charCodeAt(r.position);(!o||r.lineIndenta&&(a=r.lineIndent),xo(g)){l++;continue}if(r.lineIndente)&&l!==0)ft(r,"bad indentation of a sequence entry");else if(r.lineIndente)&&(Kg(r,e,II,!0,n)&&(p?f=r.result:h=r.result),p||(Mg(r,c,u,g,f,h,s,o),g=f=h=null),zr(r,!0,-1),y=r.input.charCodeAt(r.position)),r.lineIndent>e&&y!==0)ft(r,"bad indentation of a mapping entry");else if(r.lineIndente?l=1:r.lineIndent===e?l=0:r.lineIndente?l=1:r.lineIndent===e?l=0:r.lineIndent tag; it should be "scalar", not "'+r.kind+'"'),g=0,f=r.implicitTypes.length;g tag; it should be "'+h.kind+'", not "'+r.kind+'"'),h.resolve(r.result)?(r.result=h.construct(r.result),r.anchor!==null&&(r.anchorMap[r.anchor]=r.result)):ft(r,"cannot resolve a node with !<"+r.tag+"> explicit tag")):ft(r,"unknown tag !<"+r.tag+">");return r.listener!==null&&r.listener("close",r),r.tag!==null||r.anchor!==null||u}function bpe(r){var e=r.position,t,i,n,s=!1,o;for(r.version=null,r.checkLineBreaks=r.legacy,r.tagMap={},r.anchorMap={};(o=r.input.charCodeAt(r.position))!==0&&(zr(r,!0,-1),o=r.input.charCodeAt(r.position),!(r.lineIndent>0||o!==37));){for(s=!0,o=r.input.charCodeAt(++r.position),t=r.position;o!==0&&!fn(o);)o=r.input.charCodeAt(++r.position);for(i=r.input.slice(t,r.position),n=[],i.length<1&&ft(r,"directive name must not be less than one character in length");o!==0;){for(;sc(o);)o=r.input.charCodeAt(++r.position);if(o===35){do o=r.input.charCodeAt(++r.position);while(o!==0&&!xo(o));break}if(xo(o))break;for(t=r.position;o!==0&&!fn(o);)o=r.input.charCodeAt(++r.position);n.push(r.input.slice(t,r.position))}o!==0&&WS(r),kA.call(E2,i)?E2[i](r,i,n):yI(r,'unknown document directive "'+i+'"')}if(zr(r,!0,-1),r.lineIndent===0&&r.input.charCodeAt(r.position)===45&&r.input.charCodeAt(r.position+1)===45&&r.input.charCodeAt(r.position+2)===45?(r.position+=3,zr(r,!0,-1)):s&&ft(r,"directives end mark is expected"),Kg(r,r.lineIndent-1,II,!1,!0),zr(r,!0,-1),r.checkLineBreaks&&Ape.test(r.input.slice(e,r.position))&&yI(r,"non-ASCII line breaks are interpreted as content"),r.documents.push(r.result),r.position===r.lineStart&&wI(r)){r.input.charCodeAt(r.position)===46&&(r.position+=3,zr(r,!0,-1));return}if(r.position"u"&&(t=e,e=null);var i=k2(r,t);if(typeof e!="function")return i;for(var n=0,s=i.length;n"u"&&(t=e,e=null),R2(r,e,Ba.extend({schema:B2},t))}function Spe(r,e){return F2(r,Ba.extend({schema:B2},e))}Zp.exports.loadAll=R2;Zp.exports.load=F2;Zp.exports.safeLoadAll=Qpe;Zp.exports.safeLoad=Spe});var iH=w(($Ze,_S)=>{"use strict";var $p=tc(),ed=Ng(),vpe=Xp(),xpe=Lg(),G2=Object.prototype.toString,Y2=Object.prototype.hasOwnProperty,Ppe=9,_p=10,Dpe=13,kpe=32,Rpe=33,Fpe=34,j2=35,Npe=37,Tpe=38,Lpe=39,Ope=42,q2=44,Mpe=45,J2=58,Kpe=61,Upe=62,Hpe=63,Gpe=64,W2=91,z2=93,Ype=96,V2=123,jpe=124,X2=125,Ni={};Ni[0]="\\0";Ni[7]="\\a";Ni[8]="\\b";Ni[9]="\\t";Ni[10]="\\n";Ni[11]="\\v";Ni[12]="\\f";Ni[13]="\\r";Ni[27]="\\e";Ni[34]='\\"';Ni[92]="\\\\";Ni[133]="\\N";Ni[160]="\\_";Ni[8232]="\\L";Ni[8233]="\\P";var qpe=["y","Y","yes","Yes","YES","on","On","ON","n","N","no","No","NO","off","Off","OFF"];function Jpe(r,e){var t,i,n,s,o,a,l;if(e===null)return{};for(t={},i=Object.keys(e),n=0,s=i.length;n0?r.charCodeAt(s-1):null,f=f&&O2(o,a)}else{for(s=0;si&&r[g+1]!==" ",g=s);else if(!Ug(o))return BI;a=s>0?r.charCodeAt(s-1):null,f=f&&O2(o,a)}c=c||u&&s-g-1>i&&r[g+1]!==" "}return!l&&!c?f&&!n(r)?_2:$2:t>9&&Z2(r)?BI:c?tH:eH}function _pe(r,e,t,i){r.dump=function(){if(e.length===0)return"''";if(!r.noCompatMode&&qpe.indexOf(e)!==-1)return"'"+e+"'";var n=r.indent*Math.max(1,t),s=r.lineWidth===-1?-1:Math.max(Math.min(r.lineWidth,40),r.lineWidth-n),o=i||r.flowLevel>-1&&t>=r.flowLevel;function a(l){return zpe(r,l)}switch(Zpe(e,o,r.indent,s,a)){case _2:return e;case $2:return"'"+e.replace(/'/g,"''")+"'";case eH:return"|"+M2(e,r.indent)+K2(L2(e,n));case tH:return">"+M2(e,r.indent)+K2(L2($pe(e,s),n));case BI:return'"'+ede(e,s)+'"';default:throw new ed("impossible error: invalid scalar style")}}()}function M2(r,e){var t=Z2(r)?String(e):"",i=r[r.length-1]===` -`,n=i&&(r[r.length-2]===` -`||r===` -`),s=n?"+":i?"":"-";return t+s+` -`}function K2(r){return r[r.length-1]===` -`?r.slice(0,-1):r}function $pe(r,e){for(var t=/(\n+)([^\n]*)/g,i=function(){var c=r.indexOf(` -`);return c=c!==-1?c:r.length,t.lastIndex=c,U2(r.slice(0,c),e)}(),n=r[0]===` -`||r[0]===" ",s,o;o=t.exec(r);){var a=o[1],l=o[2];s=l[0]===" ",i+=a+(!n&&!s&&l!==""?` -`:"")+U2(l,e),n=s}return i}function U2(r,e){if(r===""||r[0]===" ")return r;for(var t=/ [^ ]/g,i,n=0,s,o=0,a=0,l="";i=t.exec(r);)a=i.index,a-n>e&&(s=o>n?o:a,l+=` -`+r.slice(n,s),n=s+1),o=a;return l+=` -`,r.length-n>e&&o>n?l+=r.slice(n,o)+` -`+r.slice(o+1):l+=r.slice(n),l.slice(1)}function ede(r){for(var e="",t,i,n,s=0;s=55296&&t<=56319&&(i=r.charCodeAt(s+1),i>=56320&&i<=57343)){e+=T2((t-55296)*1024+i-56320+65536),s++;continue}n=Ni[t],e+=!n&&Ug(t)?r[s]:n||T2(t)}return e}function tde(r,e,t){var i="",n=r.tag,s,o;for(s=0,o=t.length;s1024&&(u+="? "),u+=r.dump+(r.condenseFlow?'"':"")+":"+(r.condenseFlow?"":" "),oc(r,e,c,!1,!1)&&(u+=r.dump,i+=u));r.tag=n,r.dump="{"+i+"}"}function nde(r,e,t,i){var n="",s=r.tag,o=Object.keys(t),a,l,c,u,g,f;if(r.sortKeys===!0)o.sort();else if(typeof r.sortKeys=="function")o.sort(r.sortKeys);else if(r.sortKeys)throw new ed("sortKeys must be a boolean or a function");for(a=0,l=o.length;a1024,g&&(r.dump&&_p===r.dump.charCodeAt(0)?f+="?":f+="? "),f+=r.dump,g&&(f+=VS(r,e)),oc(r,e+1,u,!0,g)&&(r.dump&&_p===r.dump.charCodeAt(0)?f+=":":f+=": ",f+=r.dump,n+=f));r.tag=s,r.dump=n||"{}"}function H2(r,e,t){var i,n,s,o,a,l;for(n=t?r.explicitTypes:r.implicitTypes,s=0,o=n.length;s tag resolver accepts not "'+l+'" style');r.dump=i}return!0}return!1}function oc(r,e,t,i,n,s){r.tag=null,r.dump=t,H2(r,t,!1)||H2(r,t,!0);var o=G2.call(r.dump);i&&(i=r.flowLevel<0||r.flowLevel>e);var a=o==="[object Object]"||o==="[object Array]",l,c;if(a&&(l=r.duplicates.indexOf(t),c=l!==-1),(r.tag!==null&&r.tag!=="?"||c||r.indent!==2&&e>0)&&(n=!1),c&&r.usedDuplicates[l])r.dump="*ref_"+l;else{if(a&&c&&!r.usedDuplicates[l]&&(r.usedDuplicates[l]=!0),o==="[object Object]")i&&Object.keys(r.dump).length!==0?(nde(r,e,r.dump,n),c&&(r.dump="&ref_"+l+r.dump)):(ide(r,e,r.dump),c&&(r.dump="&ref_"+l+" "+r.dump));else if(o==="[object Array]"){var u=r.noArrayIndent&&e>0?e-1:e;i&&r.dump.length!==0?(rde(r,u,r.dump,n),c&&(r.dump="&ref_"+l+r.dump)):(tde(r,u,r.dump),c&&(r.dump="&ref_"+l+" "+r.dump))}else if(o==="[object String]")r.tag!=="?"&&_pe(r,r.dump,e,s);else{if(r.skipInvalid)return!1;throw new ed("unacceptable kind of an object to dump "+o)}r.tag!==null&&r.tag!=="?"&&(r.dump="!<"+r.tag+"> "+r.dump)}return!0}function sde(r,e){var t=[],i=[],n,s;for(XS(r,t,i),n=0,s=i.length;n{"use strict";var bI=N2(),nH=iH();function QI(r){return function(){throw new Error("Function "+r+" is deprecated and cannot be used.")}}Fr.exports.Type=si();Fr.exports.Schema=rc();Fr.exports.FAILSAFE_SCHEMA=CI();Fr.exports.JSON_SCHEMA=YS();Fr.exports.CORE_SCHEMA=jS();Fr.exports.DEFAULT_SAFE_SCHEMA=Lg();Fr.exports.DEFAULT_FULL_SCHEMA=Xp();Fr.exports.load=bI.load;Fr.exports.loadAll=bI.loadAll;Fr.exports.safeLoad=bI.safeLoad;Fr.exports.safeLoadAll=bI.safeLoadAll;Fr.exports.dump=nH.dump;Fr.exports.safeDump=nH.safeDump;Fr.exports.YAMLException=Ng();Fr.exports.MINIMAL_SCHEMA=CI();Fr.exports.SAFE_SCHEMA=Lg();Fr.exports.DEFAULT_SCHEMA=Xp();Fr.exports.scan=QI("scan");Fr.exports.parse=QI("parse");Fr.exports.compose=QI("compose");Fr.exports.addConstructor=QI("addConstructor")});var aH=w((t_e,oH)=>{"use strict";var ade=sH();oH.exports=ade});var lH=w((r_e,AH)=>{"use strict";function Ade(r,e){function t(){this.constructor=r}t.prototype=e.prototype,r.prototype=new t}function ac(r,e,t,i){this.message=r,this.expected=e,this.found=t,this.location=i,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,ac)}Ade(ac,Error);ac.buildMessage=function(r,e){var t={literal:function(c){return'"'+n(c.text)+'"'},class:function(c){var u="",g;for(g=0;g0){for(g=1,f=1;g({[Ke]:Ce})))},H=function(R){return R},j=function(R){return R},$=Us("correct indentation"),V=" ",W=ar(" ",!1),_=function(R){return R.length===bA*yg},A=function(R){return R.length===(bA+1)*yg},Ae=function(){return bA++,!0},ge=function(){return bA--,!0},re=function(){return pg()},O=Us("pseudostring"),F=/^[^\r\n\t ?:,\][{}#&*!|>'"%@`\-]/,ue=Tn(["\r",` -`," "," ","?",":",",","]","[","{","}","#","&","*","!","|",">","'",'"',"%","@","`","-"],!0,!1),pe=/^[^\r\n\t ,\][{}:#"']/,ke=Tn(["\r",` -`," "," ",",","]","[","{","}",":","#",'"',"'"],!0,!1),Fe=function(){return pg().replace(/^ *| *$/g,"")},Ne="--",oe=ar("--",!1),le=/^[a-zA-Z\/0-9]/,Be=Tn([["a","z"],["A","Z"],"/",["0","9"]],!1,!1),fe=/^[^\r\n\t :,]/,ae=Tn(["\r",` -`," "," ",":",","],!0,!1),qe="null",ne=ar("null",!1),Y=function(){return null},he="true",ie=ar("true",!1),de=function(){return!0},_e="false",Pt=ar("false",!1),It=function(){return!1},Or=Us("string"),ii='"',gi=ar('"',!1),hr=function(){return""},fi=function(R){return R},ni=function(R){return R.join("")},Ks=/^[^"\\\0-\x1F\x7F]/,pr=Tn(['"',"\\",["\0",""],"\x7F"],!0,!1),Ii='\\"',rs=ar('\\"',!1),fa=function(){return'"'},dA="\\\\",cg=ar("\\\\",!1),is=function(){return"\\"},CA="\\/",ha=ar("\\/",!1),wp=function(){return"/"},mA="\\b",EA=ar("\\b",!1),wr=function(){return"\b"},Tl="\\f",ug=ar("\\f",!1),yo=function(){return"\f"},gg="\\n",Bp=ar("\\n",!1),bp=function(){return` -`},vr="\\r",se=ar("\\r",!1),wo=function(){return"\r"},Fn="\\t",fg=ar("\\t",!1),bt=function(){return" "},Ll="\\u",Nn=ar("\\u",!1),ns=function(R,q,Ce,Ke){return String.fromCharCode(parseInt(`0x${R}${q}${Ce}${Ke}`))},ss=/^[0-9a-fA-F]/,gt=Tn([["0","9"],["a","f"],["A","F"]],!1,!1),Bo=Us("blank space"),At=/^[ \t]/,ln=Tn([" "," "],!1,!1),S=Us("white space"),Lt=/^[ \t\n\r]/,hg=Tn([" "," ",` -`,"\r"],!1,!1),Ol=`\r -`,Qp=ar(`\r -`,!1),Sp=` -`,vp=ar(` -`,!1),xp="\r",Pp=ar("\r",!1),G=0,yt=0,IA=[{line:1,column:1}],zi=0,Ml=[],Xe=0,pa;if("startRule"in e){if(!(e.startRule in i))throw new Error(`Can't start parsing from rule "`+e.startRule+'".');n=i[e.startRule]}function pg(){return r.substring(yt,G)}function OE(){return cn(yt,G)}function Dp(R,q){throw q=q!==void 0?q:cn(yt,G),Ul([Us(R)],r.substring(yt,G),q)}function ME(R,q){throw q=q!==void 0?q:cn(yt,G),dg(R,q)}function ar(R,q){return{type:"literal",text:R,ignoreCase:q}}function Tn(R,q,Ce){return{type:"class",parts:R,inverted:q,ignoreCase:Ce}}function Kl(){return{type:"any"}}function kp(){return{type:"end"}}function Us(R){return{type:"other",description:R}}function da(R){var q=IA[R],Ce;if(q)return q;for(Ce=R-1;!IA[Ce];)Ce--;for(q=IA[Ce],q={line:q.line,column:q.column};Cezi&&(zi=G,Ml=[]),Ml.push(R))}function dg(R,q){return new ac(R,null,null,q)}function Ul(R,q,Ce){return new ac(ac.buildMessage(R,q),R,q,Ce)}function Hs(){var R;return R=Cg(),R}function Hl(){var R,q,Ce;for(R=G,q=[],Ce=yA();Ce!==t;)q.push(Ce),Ce=yA();return q!==t&&(yt=R,q=s(q)),R=q,R}function yA(){var R,q,Ce,Ke,Re;return R=G,q=ma(),q!==t?(r.charCodeAt(G)===45?(Ce=o,G++):(Ce=t,Xe===0&&Le(a)),Ce!==t?(Ke=Rr(),Ke!==t?(Re=Ca(),Re!==t?(yt=R,q=l(Re),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R}function Cg(){var R,q,Ce;for(R=G,q=[],Ce=mg();Ce!==t;)q.push(Ce),Ce=mg();return q!==t&&(yt=R,q=c(q)),R=q,R}function mg(){var R,q,Ce,Ke,Re,ze,dt,Ft,Ln;if(R=G,q=Rr(),q===t&&(q=null),q!==t){if(Ce=G,r.charCodeAt(G)===35?(Ke=u,G++):(Ke=t,Xe===0&&Le(g)),Ke!==t){if(Re=[],ze=G,dt=G,Xe++,Ft=js(),Xe--,Ft===t?dt=void 0:(G=dt,dt=t),dt!==t?(r.length>G?(Ft=r.charAt(G),G++):(Ft=t,Xe===0&&Le(f)),Ft!==t?(dt=[dt,Ft],ze=dt):(G=ze,ze=t)):(G=ze,ze=t),ze!==t)for(;ze!==t;)Re.push(ze),ze=G,dt=G,Xe++,Ft=js(),Xe--,Ft===t?dt=void 0:(G=dt,dt=t),dt!==t?(r.length>G?(Ft=r.charAt(G),G++):(Ft=t,Xe===0&&Le(f)),Ft!==t?(dt=[dt,Ft],ze=dt):(G=ze,ze=t)):(G=ze,ze=t);else Re=t;Re!==t?(Ke=[Ke,Re],Ce=Ke):(G=Ce,Ce=t)}else G=Ce,Ce=t;if(Ce===t&&(Ce=null),Ce!==t){if(Ke=[],Re=Ys(),Re!==t)for(;Re!==t;)Ke.push(Re),Re=Ys();else Ke=t;Ke!==t?(yt=R,q=h(),R=q):(G=R,R=t)}else G=R,R=t}else G=R,R=t;if(R===t&&(R=G,q=ma(),q!==t?(Ce=Gl(),Ce!==t?(Ke=Rr(),Ke===t&&(Ke=null),Ke!==t?(r.charCodeAt(G)===58?(Re=p,G++):(Re=t,Xe===0&&Le(C)),Re!==t?(ze=Rr(),ze===t&&(ze=null),ze!==t?(dt=Ca(),dt!==t?(yt=R,q=y(Ce,dt),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R===t&&(R=G,q=ma(),q!==t?(Ce=Gs(),Ce!==t?(Ke=Rr(),Ke===t&&(Ke=null),Ke!==t?(r.charCodeAt(G)===58?(Re=p,G++):(Re=t,Xe===0&&Le(C)),Re!==t?(ze=Rr(),ze===t&&(ze=null),ze!==t?(dt=Ca(),dt!==t?(yt=R,q=y(Ce,dt),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R===t))){if(R=G,q=ma(),q!==t)if(Ce=Gs(),Ce!==t)if(Ke=Rr(),Ke!==t)if(Re=KE(),Re!==t){if(ze=[],dt=Ys(),dt!==t)for(;dt!==t;)ze.push(dt),dt=Ys();else ze=t;ze!==t?(yt=R,q=y(Ce,Re),R=q):(G=R,R=t)}else G=R,R=t;else G=R,R=t;else G=R,R=t;else G=R,R=t;if(R===t)if(R=G,q=ma(),q!==t)if(Ce=Gs(),Ce!==t){if(Ke=[],Re=G,ze=Rr(),ze===t&&(ze=null),ze!==t?(r.charCodeAt(G)===44?(dt=B,G++):(dt=t,Xe===0&&Le(v)),dt!==t?(Ft=Rr(),Ft===t&&(Ft=null),Ft!==t?(Ln=Gs(),Ln!==t?(yt=Re,ze=D(Ce,Ln),Re=ze):(G=Re,Re=t)):(G=Re,Re=t)):(G=Re,Re=t)):(G=Re,Re=t),Re!==t)for(;Re!==t;)Ke.push(Re),Re=G,ze=Rr(),ze===t&&(ze=null),ze!==t?(r.charCodeAt(G)===44?(dt=B,G++):(dt=t,Xe===0&&Le(v)),dt!==t?(Ft=Rr(),Ft===t&&(Ft=null),Ft!==t?(Ln=Gs(),Ln!==t?(yt=Re,ze=D(Ce,Ln),Re=ze):(G=Re,Re=t)):(G=Re,Re=t)):(G=Re,Re=t)):(G=Re,Re=t);else Ke=t;Ke!==t?(Re=Rr(),Re===t&&(Re=null),Re!==t?(r.charCodeAt(G)===58?(ze=p,G++):(ze=t,Xe===0&&Le(C)),ze!==t?(dt=Rr(),dt===t&&(dt=null),dt!==t?(Ft=Ca(),Ft!==t?(yt=R,q=T(Ce,Ke,Ft),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)}else G=R,R=t;else G=R,R=t}return R}function Ca(){var R,q,Ce,Ke,Re,ze,dt;if(R=G,q=G,Xe++,Ce=G,Ke=js(),Ke!==t?(Re=rt(),Re!==t?(r.charCodeAt(G)===45?(ze=o,G++):(ze=t,Xe===0&&Le(a)),ze!==t?(dt=Rr(),dt!==t?(Ke=[Ke,Re,ze,dt],Ce=Ke):(G=Ce,Ce=t)):(G=Ce,Ce=t)):(G=Ce,Ce=t)):(G=Ce,Ce=t),Xe--,Ce!==t?(G=q,q=void 0):q=t,q!==t?(Ce=Ys(),Ce!==t?(Ke=bo(),Ke!==t?(Re=Hl(),Re!==t?(ze=wA(),ze!==t?(yt=R,q=H(Re),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R===t&&(R=G,q=js(),q!==t?(Ce=bo(),Ce!==t?(Ke=Cg(),Ke!==t?(Re=wA(),Re!==t?(yt=R,q=H(Ke),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R===t))if(R=G,q=Yl(),q!==t){if(Ce=[],Ke=Ys(),Ke!==t)for(;Ke!==t;)Ce.push(Ke),Ke=Ys();else Ce=t;Ce!==t?(yt=R,q=j(q),R=q):(G=R,R=t)}else G=R,R=t;return R}function ma(){var R,q,Ce;for(Xe++,R=G,q=[],r.charCodeAt(G)===32?(Ce=V,G++):(Ce=t,Xe===0&&Le(W));Ce!==t;)q.push(Ce),r.charCodeAt(G)===32?(Ce=V,G++):(Ce=t,Xe===0&&Le(W));return q!==t?(yt=G,Ce=_(q),Ce?Ce=void 0:Ce=t,Ce!==t?(q=[q,Ce],R=q):(G=R,R=t)):(G=R,R=t),Xe--,R===t&&(q=t,Xe===0&&Le($)),R}function rt(){var R,q,Ce;for(R=G,q=[],r.charCodeAt(G)===32?(Ce=V,G++):(Ce=t,Xe===0&&Le(W));Ce!==t;)q.push(Ce),r.charCodeAt(G)===32?(Ce=V,G++):(Ce=t,Xe===0&&Le(W));return q!==t?(yt=G,Ce=A(q),Ce?Ce=void 0:Ce=t,Ce!==t?(q=[q,Ce],R=q):(G=R,R=t)):(G=R,R=t),R}function bo(){var R;return yt=G,R=Ae(),R?R=void 0:R=t,R}function wA(){var R;return yt=G,R=ge(),R?R=void 0:R=t,R}function Gl(){var R;return R=jl(),R===t&&(R=Rp()),R}function Gs(){var R,q,Ce;if(R=jl(),R===t){if(R=G,q=[],Ce=Eg(),Ce!==t)for(;Ce!==t;)q.push(Ce),Ce=Eg();else q=t;q!==t&&(yt=R,q=re()),R=q}return R}function Yl(){var R;return R=Fp(),R===t&&(R=UE(),R===t&&(R=jl(),R===t&&(R=Rp()))),R}function KE(){var R;return R=Fp(),R===t&&(R=jl(),R===t&&(R=Eg())),R}function Rp(){var R,q,Ce,Ke,Re,ze;if(Xe++,R=G,F.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,Xe===0&&Le(ue)),q!==t){for(Ce=[],Ke=G,Re=Rr(),Re===t&&(Re=null),Re!==t?(pe.test(r.charAt(G))?(ze=r.charAt(G),G++):(ze=t,Xe===0&&Le(ke)),ze!==t?(Re=[Re,ze],Ke=Re):(G=Ke,Ke=t)):(G=Ke,Ke=t);Ke!==t;)Ce.push(Ke),Ke=G,Re=Rr(),Re===t&&(Re=null),Re!==t?(pe.test(r.charAt(G))?(ze=r.charAt(G),G++):(ze=t,Xe===0&&Le(ke)),ze!==t?(Re=[Re,ze],Ke=Re):(G=Ke,Ke=t)):(G=Ke,Ke=t);Ce!==t?(yt=R,q=Fe(),R=q):(G=R,R=t)}else G=R,R=t;return Xe--,R===t&&(q=t,Xe===0&&Le(O)),R}function Eg(){var R,q,Ce,Ke,Re;if(R=G,r.substr(G,2)===Ne?(q=Ne,G+=2):(q=t,Xe===0&&Le(oe)),q===t&&(q=null),q!==t)if(le.test(r.charAt(G))?(Ce=r.charAt(G),G++):(Ce=t,Xe===0&&Le(Be)),Ce!==t){for(Ke=[],fe.test(r.charAt(G))?(Re=r.charAt(G),G++):(Re=t,Xe===0&&Le(ae));Re!==t;)Ke.push(Re),fe.test(r.charAt(G))?(Re=r.charAt(G),G++):(Re=t,Xe===0&&Le(ae));Ke!==t?(yt=R,q=Fe(),R=q):(G=R,R=t)}else G=R,R=t;else G=R,R=t;return R}function Fp(){var R,q;return R=G,r.substr(G,4)===qe?(q=qe,G+=4):(q=t,Xe===0&&Le(ne)),q!==t&&(yt=R,q=Y()),R=q,R}function UE(){var R,q;return R=G,r.substr(G,4)===he?(q=he,G+=4):(q=t,Xe===0&&Le(ie)),q!==t&&(yt=R,q=de()),R=q,R===t&&(R=G,r.substr(G,5)===_e?(q=_e,G+=5):(q=t,Xe===0&&Le(Pt)),q!==t&&(yt=R,q=It()),R=q),R}function jl(){var R,q,Ce,Ke;return Xe++,R=G,r.charCodeAt(G)===34?(q=ii,G++):(q=t,Xe===0&&Le(gi)),q!==t?(r.charCodeAt(G)===34?(Ce=ii,G++):(Ce=t,Xe===0&&Le(gi)),Ce!==t?(yt=R,q=hr(),R=q):(G=R,R=t)):(G=R,R=t),R===t&&(R=G,r.charCodeAt(G)===34?(q=ii,G++):(q=t,Xe===0&&Le(gi)),q!==t?(Ce=HE(),Ce!==t?(r.charCodeAt(G)===34?(Ke=ii,G++):(Ke=t,Xe===0&&Le(gi)),Ke!==t?(yt=R,q=fi(Ce),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)),Xe--,R===t&&(q=t,Xe===0&&Le(Or)),R}function HE(){var R,q,Ce;if(R=G,q=[],Ce=Ig(),Ce!==t)for(;Ce!==t;)q.push(Ce),Ce=Ig();else q=t;return q!==t&&(yt=R,q=ni(q)),R=q,R}function Ig(){var R,q,Ce,Ke,Re,ze;return Ks.test(r.charAt(G))?(R=r.charAt(G),G++):(R=t,Xe===0&&Le(pr)),R===t&&(R=G,r.substr(G,2)===Ii?(q=Ii,G+=2):(q=t,Xe===0&&Le(rs)),q!==t&&(yt=R,q=fa()),R=q,R===t&&(R=G,r.substr(G,2)===dA?(q=dA,G+=2):(q=t,Xe===0&&Le(cg)),q!==t&&(yt=R,q=is()),R=q,R===t&&(R=G,r.substr(G,2)===CA?(q=CA,G+=2):(q=t,Xe===0&&Le(ha)),q!==t&&(yt=R,q=wp()),R=q,R===t&&(R=G,r.substr(G,2)===mA?(q=mA,G+=2):(q=t,Xe===0&&Le(EA)),q!==t&&(yt=R,q=wr()),R=q,R===t&&(R=G,r.substr(G,2)===Tl?(q=Tl,G+=2):(q=t,Xe===0&&Le(ug)),q!==t&&(yt=R,q=yo()),R=q,R===t&&(R=G,r.substr(G,2)===gg?(q=gg,G+=2):(q=t,Xe===0&&Le(Bp)),q!==t&&(yt=R,q=bp()),R=q,R===t&&(R=G,r.substr(G,2)===vr?(q=vr,G+=2):(q=t,Xe===0&&Le(se)),q!==t&&(yt=R,q=wo()),R=q,R===t&&(R=G,r.substr(G,2)===Fn?(q=Fn,G+=2):(q=t,Xe===0&&Le(fg)),q!==t&&(yt=R,q=bt()),R=q,R===t&&(R=G,r.substr(G,2)===Ll?(q=Ll,G+=2):(q=t,Xe===0&&Le(Nn)),q!==t?(Ce=BA(),Ce!==t?(Ke=BA(),Ke!==t?(Re=BA(),Re!==t?(ze=BA(),ze!==t?(yt=R,q=ns(Ce,Ke,Re,ze),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)))))))))),R}function BA(){var R;return ss.test(r.charAt(G))?(R=r.charAt(G),G++):(R=t,Xe===0&&Le(gt)),R}function Rr(){var R,q;if(Xe++,R=[],At.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,Xe===0&&Le(ln)),q!==t)for(;q!==t;)R.push(q),At.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,Xe===0&&Le(ln));else R=t;return Xe--,R===t&&(q=t,Xe===0&&Le(Bo)),R}function GE(){var R,q;if(Xe++,R=[],Lt.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,Xe===0&&Le(hg)),q!==t)for(;q!==t;)R.push(q),Lt.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,Xe===0&&Le(hg));else R=t;return Xe--,R===t&&(q=t,Xe===0&&Le(S)),R}function Ys(){var R,q,Ce,Ke,Re,ze;if(R=G,q=js(),q!==t){for(Ce=[],Ke=G,Re=Rr(),Re===t&&(Re=null),Re!==t?(ze=js(),ze!==t?(Re=[Re,ze],Ke=Re):(G=Ke,Ke=t)):(G=Ke,Ke=t);Ke!==t;)Ce.push(Ke),Ke=G,Re=Rr(),Re===t&&(Re=null),Re!==t?(ze=js(),ze!==t?(Re=[Re,ze],Ke=Re):(G=Ke,Ke=t)):(G=Ke,Ke=t);Ce!==t?(q=[q,Ce],R=q):(G=R,R=t)}else G=R,R=t;return R}function js(){var R;return r.substr(G,2)===Ol?(R=Ol,G+=2):(R=t,Xe===0&&Le(Qp)),R===t&&(r.charCodeAt(G)===10?(R=Sp,G++):(R=t,Xe===0&&Le(vp)),R===t&&(r.charCodeAt(G)===13?(R=xp,G++):(R=t,Xe===0&&Le(Pp)))),R}let yg=2,bA=0;if(pa=n(),pa!==t&&G===r.length)return pa;throw pa!==t&&G{"use strict";var hde=r=>{let e=!1,t=!1,i=!1;for(let n=0;n{if(!(typeof r=="string"||Array.isArray(r)))throw new TypeError("Expected the input to be `string | string[]`");e=Object.assign({pascalCase:!1},e);let t=n=>e.pascalCase?n.charAt(0).toUpperCase()+n.slice(1):n;return Array.isArray(r)?r=r.map(n=>n.trim()).filter(n=>n.length).join("-"):r=r.trim(),r.length===0?"":r.length===1?e.pascalCase?r.toUpperCase():r.toLowerCase():(r!==r.toLowerCase()&&(r=hde(r)),r=r.replace(/^[_.\- ]+/,"").toLowerCase().replace(/[_.\- ]+(\w|$)/g,(n,s)=>s.toUpperCase()).replace(/\d+(\w|$)/g,n=>n.toUpperCase()),t(r))};ev.exports=hH;ev.exports.default=hH});var dH=w((A_e,pde)=>{pde.exports=[{name:"AppVeyor",constant:"APPVEYOR",env:"APPVEYOR",pr:"APPVEYOR_PULL_REQUEST_NUMBER"},{name:"Azure Pipelines",constant:"AZURE_PIPELINES",env:"SYSTEM_TEAMFOUNDATIONCOLLECTIONURI",pr:"SYSTEM_PULLREQUEST_PULLREQUESTID"},{name:"Appcircle",constant:"APPCIRCLE",env:"AC_APPCIRCLE"},{name:"Bamboo",constant:"BAMBOO",env:"bamboo_planKey"},{name:"Bitbucket Pipelines",constant:"BITBUCKET",env:"BITBUCKET_COMMIT",pr:"BITBUCKET_PR_ID"},{name:"Bitrise",constant:"BITRISE",env:"BITRISE_IO",pr:"BITRISE_PULL_REQUEST"},{name:"Buddy",constant:"BUDDY",env:"BUDDY_WORKSPACE_ID",pr:"BUDDY_EXECUTION_PULL_REQUEST_ID"},{name:"Buildkite",constant:"BUILDKITE",env:"BUILDKITE",pr:{env:"BUILDKITE_PULL_REQUEST",ne:"false"}},{name:"CircleCI",constant:"CIRCLE",env:"CIRCLECI",pr:"CIRCLE_PULL_REQUEST"},{name:"Cirrus CI",constant:"CIRRUS",env:"CIRRUS_CI",pr:"CIRRUS_PR"},{name:"AWS CodeBuild",constant:"CODEBUILD",env:"CODEBUILD_BUILD_ARN"},{name:"Codefresh",constant:"CODEFRESH",env:"CF_BUILD_ID",pr:{any:["CF_PULL_REQUEST_NUMBER","CF_PULL_REQUEST_ID"]}},{name:"Codeship",constant:"CODESHIP",env:{CI_NAME:"codeship"}},{name:"Drone",constant:"DRONE",env:"DRONE",pr:{DRONE_BUILD_EVENT:"pull_request"}},{name:"dsari",constant:"DSARI",env:"DSARI"},{name:"GitHub Actions",constant:"GITHUB_ACTIONS",env:"GITHUB_ACTIONS",pr:{GITHUB_EVENT_NAME:"pull_request"}},{name:"GitLab CI",constant:"GITLAB",env:"GITLAB_CI",pr:"CI_MERGE_REQUEST_ID"},{name:"GoCD",constant:"GOCD",env:"GO_PIPELINE_LABEL"},{name:"LayerCI",constant:"LAYERCI",env:"LAYERCI",pr:"LAYERCI_PULL_REQUEST"},{name:"Hudson",constant:"HUDSON",env:"HUDSON_URL"},{name:"Jenkins",constant:"JENKINS",env:["JENKINS_URL","BUILD_ID"],pr:{any:["ghprbPullId","CHANGE_ID"]}},{name:"Magnum CI",constant:"MAGNUM",env:"MAGNUM"},{name:"Netlify CI",constant:"NETLIFY",env:"NETLIFY",pr:{env:"PULL_REQUEST",ne:"false"}},{name:"Nevercode",constant:"NEVERCODE",env:"NEVERCODE",pr:{env:"NEVERCODE_PULL_REQUEST",ne:"false"}},{name:"Render",constant:"RENDER",env:"RENDER",pr:{IS_PULL_REQUEST:"true"}},{name:"Sail CI",constant:"SAIL",env:"SAILCI",pr:"SAIL_PULL_REQUEST_NUMBER"},{name:"Semaphore",constant:"SEMAPHORE",env:"SEMAPHORE",pr:"PULL_REQUEST_NUMBER"},{name:"Screwdriver",constant:"SCREWDRIVER",env:"SCREWDRIVER",pr:{env:"SD_PULL_REQUEST",ne:"false"}},{name:"Shippable",constant:"SHIPPABLE",env:"SHIPPABLE",pr:{IS_PULL_REQUEST:"true"}},{name:"Solano CI",constant:"SOLANO",env:"TDDIUM",pr:"TDDIUM_PR_ID"},{name:"Strider CD",constant:"STRIDER",env:"STRIDER"},{name:"TaskCluster",constant:"TASKCLUSTER",env:["TASK_ID","RUN_ID"]},{name:"TeamCity",constant:"TEAMCITY",env:"TEAMCITY_VERSION"},{name:"Travis CI",constant:"TRAVIS",env:"TRAVIS",pr:{env:"TRAVIS_PULL_REQUEST",ne:"false"}},{name:"Vercel",constant:"VERCEL",env:"NOW_BUILDER"},{name:"Visual Studio App Center",constant:"APPCENTER",env:"APPCENTER_BUILD_ID"}]});var Ac=w(Un=>{"use strict";var mH=dH(),Po=process.env;Object.defineProperty(Un,"_vendors",{value:mH.map(function(r){return r.constant})});Un.name=null;Un.isPR=null;mH.forEach(function(r){let t=(Array.isArray(r.env)?r.env:[r.env]).every(function(i){return CH(i)});if(Un[r.constant]=t,t)switch(Un.name=r.name,typeof r.pr){case"string":Un.isPR=!!Po[r.pr];break;case"object":"env"in r.pr?Un.isPR=r.pr.env in Po&&Po[r.pr.env]!==r.pr.ne:"any"in r.pr?Un.isPR=r.pr.any.some(function(i){return!!Po[i]}):Un.isPR=CH(r.pr);break;default:Un.isPR=null}});Un.isCI=!!(Po.CI||Po.CONTINUOUS_INTEGRATION||Po.BUILD_NUMBER||Po.RUN_ID||Un.name);function CH(r){return typeof r=="string"?!!Po[r]:Object.keys(r).every(function(e){return Po[e]===r[e]})}});var hn={};ut(hn,{KeyRelationship:()=>lc,applyCascade:()=>od,base64RegExp:()=>BH,colorStringAlphaRegExp:()=>wH,colorStringRegExp:()=>yH,computeKey:()=>RA,getPrintable:()=>Vr,hasExactLength:()=>xH,hasForbiddenKeys:()=>Wde,hasKeyRelationship:()=>av,hasMaxLength:()=>Dde,hasMinLength:()=>Pde,hasMutuallyExclusiveKeys:()=>zde,hasRequiredKeys:()=>Jde,hasUniqueItems:()=>kde,isArray:()=>yde,isAtLeast:()=>Nde,isAtMost:()=>Tde,isBase64:()=>jde,isBoolean:()=>mde,isDate:()=>Ide,isDict:()=>Bde,isEnum:()=>Zi,isHexColor:()=>Yde,isISO8601:()=>Gde,isInExclusiveRange:()=>Ode,isInInclusiveRange:()=>Lde,isInstanceOf:()=>Qde,isInteger:()=>Mde,isJSON:()=>qde,isLiteral:()=>dde,isLowerCase:()=>Kde,isNegative:()=>Rde,isNullable:()=>xde,isNumber:()=>Ede,isObject:()=>bde,isOneOf:()=>Sde,isOptional:()=>vde,isPositive:()=>Fde,isString:()=>sd,isTuple:()=>wde,isUUID4:()=>Hde,isUnknown:()=>vH,isUpperCase:()=>Ude,iso8601RegExp:()=>ov,makeCoercionFn:()=>cc,makeSetter:()=>SH,makeTrait:()=>QH,makeValidator:()=>Qt,matchesRegExp:()=>ad,plural:()=>kI,pushError:()=>pt,simpleKeyRegExp:()=>IH,uuid4RegExp:()=>bH});function Qt({test:r}){return QH(r)()}function Vr(r){return r===null?"null":r===void 0?"undefined":r===""?"an empty string":JSON.stringify(r)}function RA(r,e){var t,i,n;return typeof e=="number"?`${(t=r==null?void 0:r.p)!==null&&t!==void 0?t:"."}[${e}]`:IH.test(e)?`${(i=r==null?void 0:r.p)!==null&&i!==void 0?i:""}.${e}`:`${(n=r==null?void 0:r.p)!==null&&n!==void 0?n:"."}[${JSON.stringify(e)}]`}function cc(r,e){return t=>{let i=r[e];return r[e]=t,cc(r,e).bind(null,i)}}function SH(r,e){return t=>{r[e]=t}}function kI(r,e,t){return r===1?e:t}function pt({errors:r,p:e}={},t){return r==null||r.push(`${e!=null?e:"."}: ${t}`),!1}function dde(r){return Qt({test:(e,t)=>e!==r?pt(t,`Expected a literal (got ${Vr(r)})`):!0})}function Zi(r){let e=Array.isArray(r)?r:Object.values(r),t=new Set(e);return Qt({test:(i,n)=>t.has(i)?!0:pt(n,`Expected a valid enumeration value (got ${Vr(i)})`)})}var IH,yH,wH,BH,bH,ov,QH,vH,sd,Cde,mde,Ede,Ide,yde,wde,Bde,bde,Qde,Sde,od,vde,xde,Pde,Dde,xH,kde,Rde,Fde,Nde,Tde,Lde,Ode,Mde,ad,Kde,Ude,Hde,Gde,Yde,jde,qde,Jde,Wde,zde,lc,Vde,av,ls=Tge(()=>{IH=/^[a-zA-Z_][a-zA-Z0-9_]*$/,yH=/^#[0-9a-f]{6}$/i,wH=/^#[0-9a-f]{6}([0-9a-f]{2})?$/i,BH=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,bH=/^[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89aAbB][a-f0-9]{3}-[a-f0-9]{12}$/i,ov=/^(?:[1-9]\d{3}(-?)(?:(?:0[1-9]|1[0-2])\1(?:0[1-9]|1\d|2[0-8])|(?:0[13-9]|1[0-2])\1(?:29|30)|(?:0[13578]|1[02])(?:\1)31|00[1-9]|0[1-9]\d|[12]\d{2}|3(?:[0-5]\d|6[0-5]))|(?:[1-9]\d(?:0[48]|[2468][048]|[13579][26])|(?:[2468][048]|[13579][26])00)(?:(-?)02(?:\2)29|-?366))T(?:[01]\d|2[0-3])(:?)[0-5]\d(?:\3[0-5]\d)?(?:Z|[+-][01]\d(?:\3[0-5]\d)?)$/,QH=r=>()=>r;vH=()=>Qt({test:(r,e)=>!0});sd=()=>Qt({test:(r,e)=>typeof r!="string"?pt(e,`Expected a string (got ${Vr(r)})`):!0});Cde=new Map([["true",!0],["True",!0],["1",!0],[1,!0],["false",!1],["False",!1],["0",!1],[0,!1]]),mde=()=>Qt({test:(r,e)=>{var t;if(typeof r!="boolean"){if(typeof(e==null?void 0:e.coercions)<"u"){if(typeof(e==null?void 0:e.coercion)>"u")return pt(e,"Unbound coercion result");let i=Cde.get(r);if(typeof i<"u")return e.coercions.push([(t=e.p)!==null&&t!==void 0?t:".",e.coercion.bind(null,i)]),!0}return pt(e,`Expected a boolean (got ${Vr(r)})`)}return!0}}),Ede=()=>Qt({test:(r,e)=>{var t;if(typeof r!="number"){if(typeof(e==null?void 0:e.coercions)<"u"){if(typeof(e==null?void 0:e.coercion)>"u")return pt(e,"Unbound coercion result");let i;if(typeof r=="string"){let n;try{n=JSON.parse(r)}catch{}if(typeof n=="number")if(JSON.stringify(n)===r)i=n;else return pt(e,`Received a number that can't be safely represented by the runtime (${r})`)}if(typeof i<"u")return e.coercions.push([(t=e.p)!==null&&t!==void 0?t:".",e.coercion.bind(null,i)]),!0}return pt(e,`Expected a number (got ${Vr(r)})`)}return!0}}),Ide=()=>Qt({test:(r,e)=>{var t;if(!(r instanceof Date)){if(typeof(e==null?void 0:e.coercions)<"u"){if(typeof(e==null?void 0:e.coercion)>"u")return pt(e,"Unbound coercion result");let i;if(typeof r=="string"&&ov.test(r))i=new Date(r);else{let n;if(typeof r=="string"){let s;try{s=JSON.parse(r)}catch{}typeof s=="number"&&(n=s)}else typeof r=="number"&&(n=r);if(typeof n<"u")if(Number.isSafeInteger(n)||!Number.isSafeInteger(n*1e3))i=new Date(n*1e3);else return pt(e,`Received a timestamp that can't be safely represented by the runtime (${r})`)}if(typeof i<"u")return e.coercions.push([(t=e.p)!==null&&t!==void 0?t:".",e.coercion.bind(null,i)]),!0}return pt(e,`Expected a date (got ${Vr(r)})`)}return!0}}),yde=(r,{delimiter:e}={})=>Qt({test:(t,i)=>{var n;if(typeof t=="string"&&typeof e<"u"&&typeof(i==null?void 0:i.coercions)<"u"){if(typeof(i==null?void 0:i.coercion)>"u")return pt(i,"Unbound coercion result");t=t.split(e),i.coercions.push([(n=i.p)!==null&&n!==void 0?n:".",i.coercion.bind(null,t)])}if(!Array.isArray(t))return pt(i,`Expected an array (got ${Vr(t)})`);let s=!0;for(let o=0,a=t.length;o{let t=xH(r.length);return Qt({test:(i,n)=>{var s;if(typeof i=="string"&&typeof e<"u"&&typeof(n==null?void 0:n.coercions)<"u"){if(typeof(n==null?void 0:n.coercion)>"u")return pt(n,"Unbound coercion result");i=i.split(e),n.coercions.push([(s=n.p)!==null&&s!==void 0?s:".",n.coercion.bind(null,i)])}if(!Array.isArray(i))return pt(n,`Expected a tuple (got ${Vr(i)})`);let o=t(i,Object.assign({},n));for(let a=0,l=i.length;aQt({test:(t,i)=>{if(typeof t!="object"||t===null)return pt(i,`Expected an object (got ${Vr(t)})`);let n=Object.keys(t),s=!0;for(let o=0,a=n.length;o{let t=Object.keys(r);return Qt({test:(i,n)=>{if(typeof i!="object"||i===null)return pt(n,`Expected an object (got ${Vr(i)})`);let s=new Set([...t,...Object.keys(i)]),o={},a=!0;for(let l of s){if(l==="constructor"||l==="__proto__")a=pt(Object.assign(Object.assign({},n),{p:RA(n,l)}),"Unsafe property name");else{let c=Object.prototype.hasOwnProperty.call(r,l)?r[l]:void 0,u=Object.prototype.hasOwnProperty.call(i,l)?i[l]:void 0;typeof c<"u"?a=c(u,Object.assign(Object.assign({},n),{p:RA(n,l),coercion:cc(i,l)}))&&a:e===null?a=pt(Object.assign(Object.assign({},n),{p:RA(n,l)}),`Extraneous property (got ${Vr(u)})`):Object.defineProperty(o,l,{enumerable:!0,get:()=>u,set:SH(i,l)})}if(!a&&(n==null?void 0:n.errors)==null)break}return e!==null&&(a||(n==null?void 0:n.errors)!=null)&&(a=e(o,n)&&a),a}})},Qde=r=>Qt({test:(e,t)=>e instanceof r?!0:pt(t,`Expected an instance of ${r.name} (got ${Vr(e)})`)}),Sde=(r,{exclusive:e=!1}={})=>Qt({test:(t,i)=>{var n,s,o;let a=[],l=typeof(i==null?void 0:i.errors)<"u"?[]:void 0;for(let c=0,u=r.length;c1?pt(i,`Expected to match exactly a single predicate (matched ${a.join(", ")})`):(o=i==null?void 0:i.errors)===null||o===void 0||o.push(...l),!1}}),od=(r,e)=>Qt({test:(t,i)=>{var n,s;let o={value:t},a=typeof(i==null?void 0:i.coercions)<"u"?cc(o,"value"):void 0,l=typeof(i==null?void 0:i.coercions)<"u"?[]:void 0;if(!r(t,Object.assign(Object.assign({},i),{coercion:a,coercions:l})))return!1;let c=[];if(typeof l<"u")for(let[,u]of l)c.push(u());try{if(typeof(i==null?void 0:i.coercions)<"u"){if(o.value!==t){if(typeof(i==null?void 0:i.coercion)>"u")return pt(i,"Unbound coercion result");i.coercions.push([(n=i.p)!==null&&n!==void 0?n:".",i.coercion.bind(null,o.value)])}(s=i==null?void 0:i.coercions)===null||s===void 0||s.push(...l)}return e.every(u=>u(o.value,i))}finally{for(let u of c)u()}}}),vde=r=>Qt({test:(e,t)=>typeof e>"u"?!0:r(e,t)}),xde=r=>Qt({test:(e,t)=>e===null?!0:r(e,t)}),Pde=r=>Qt({test:(e,t)=>e.length>=r?!0:pt(t,`Expected to have a length of at least ${r} elements (got ${e.length})`)}),Dde=r=>Qt({test:(e,t)=>e.length<=r?!0:pt(t,`Expected to have a length of at most ${r} elements (got ${e.length})`)}),xH=r=>Qt({test:(e,t)=>e.length!==r?pt(t,`Expected to have a length of exactly ${r} elements (got ${e.length})`):!0}),kde=({map:r}={})=>Qt({test:(e,t)=>{let i=new Set,n=new Set;for(let s=0,o=e.length;sQt({test:(r,e)=>r<=0?!0:pt(e,`Expected to be negative (got ${r})`)}),Fde=()=>Qt({test:(r,e)=>r>=0?!0:pt(e,`Expected to be positive (got ${r})`)}),Nde=r=>Qt({test:(e,t)=>e>=r?!0:pt(t,`Expected to be at least ${r} (got ${e})`)}),Tde=r=>Qt({test:(e,t)=>e<=r?!0:pt(t,`Expected to be at most ${r} (got ${e})`)}),Lde=(r,e)=>Qt({test:(t,i)=>t>=r&&t<=e?!0:pt(i,`Expected to be in the [${r}; ${e}] range (got ${t})`)}),Ode=(r,e)=>Qt({test:(t,i)=>t>=r&&tQt({test:(e,t)=>e!==Math.round(e)?pt(t,`Expected to be an integer (got ${e})`):Number.isSafeInteger(e)?!0:pt(t,`Expected to be a safe integer (got ${e})`)}),ad=r=>Qt({test:(e,t)=>r.test(e)?!0:pt(t,`Expected to match the pattern ${r.toString()} (got ${Vr(e)})`)}),Kde=()=>Qt({test:(r,e)=>r!==r.toLowerCase()?pt(e,`Expected to be all-lowercase (got ${r})`):!0}),Ude=()=>Qt({test:(r,e)=>r!==r.toUpperCase()?pt(e,`Expected to be all-uppercase (got ${r})`):!0}),Hde=()=>Qt({test:(r,e)=>bH.test(r)?!0:pt(e,`Expected to be a valid UUID v4 (got ${Vr(r)})`)}),Gde=()=>Qt({test:(r,e)=>ov.test(r)?!1:pt(e,`Expected to be a valid ISO 8601 date string (got ${Vr(r)})`)}),Yde=({alpha:r=!1})=>Qt({test:(e,t)=>(r?yH.test(e):wH.test(e))?!0:pt(t,`Expected to be a valid hexadecimal color string (got ${Vr(e)})`)}),jde=()=>Qt({test:(r,e)=>BH.test(r)?!0:pt(e,`Expected to be a valid base 64 string (got ${Vr(r)})`)}),qde=(r=vH())=>Qt({test:(e,t)=>{let i;try{i=JSON.parse(e)}catch{return pt(t,`Expected to be a valid JSON string (got ${Vr(e)})`)}return r(i,t)}}),Jde=r=>{let e=new Set(r);return Qt({test:(t,i)=>{let n=new Set(Object.keys(t)),s=[];for(let o of e)n.has(o)||s.push(o);return s.length>0?pt(i,`Missing required ${kI(s.length,"property","properties")} ${s.map(o=>`"${o}"`).join(", ")}`):!0}})},Wde=r=>{let e=new Set(r);return Qt({test:(t,i)=>{let n=new Set(Object.keys(t)),s=[];for(let o of e)n.has(o)&&s.push(o);return s.length>0?pt(i,`Forbidden ${kI(s.length,"property","properties")} ${s.map(o=>`"${o}"`).join(", ")}`):!0}})},zde=r=>{let e=new Set(r);return Qt({test:(t,i)=>{let n=new Set(Object.keys(t)),s=[];for(let o of e)n.has(o)&&s.push(o);return s.length>1?pt(i,`Mutually exclusive properties ${s.map(o=>`"${o}"`).join(", ")}`):!0}})};(function(r){r.Forbids="Forbids",r.Requires="Requires"})(lc||(lc={}));Vde={[lc.Forbids]:{expect:!1,message:"forbids using"},[lc.Requires]:{expect:!0,message:"requires using"}},av=(r,e,t,{ignore:i=[]}={})=>{let n=new Set(i),s=new Set(t),o=Vde[e];return Qt({test:(a,l)=>{let c=new Set(Object.keys(a));if(!c.has(r)||n.has(a[r]))return!0;let u=[];for(let g of s)(c.has(g)&&!n.has(a[g]))!==o.expect&&u.push(g);return u.length>=1?pt(l,`Property "${r}" ${o.message} ${kI(u.length,"property","properties")} ${u.map(g=>`"${g}"`).join(", ")}`):!0}})}});var qH=w((A$e,jH)=>{"use strict";jH.exports=(r,...e)=>new Promise(t=>{t(r(...e))})});var Jg=w((l$e,pv)=>{"use strict";var gCe=qH(),JH=r=>{if(r<1)throw new TypeError("Expected `concurrency` to be a number from 1 and up");let e=[],t=0,i=()=>{t--,e.length>0&&e.shift()()},n=(a,l,...c)=>{t++;let u=gCe(a,...c);l(u),u.then(i,i)},s=(a,l,...c)=>{tnew Promise(c=>s(a,c,...l));return Object.defineProperties(o,{activeCount:{get:()=>t},pendingCount:{get:()=>e.length}}),o};pv.exports=JH;pv.exports.default=JH});var gd=w((u$e,WH)=>{var fCe="2.0.0",hCe=Number.MAX_SAFE_INTEGER||9007199254740991,pCe=16;WH.exports={SEMVER_SPEC_VERSION:fCe,MAX_LENGTH:256,MAX_SAFE_INTEGER:hCe,MAX_SAFE_COMPONENT_LENGTH:pCe}});var fd=w((g$e,zH)=>{var dCe=typeof process=="object"&&process.env&&process.env.NODE_DEBUG&&/\bsemver\b/i.test(process.env.NODE_DEBUG)?(...r)=>console.error("SEMVER",...r):()=>{};zH.exports=dCe});var uc=w((NA,VH)=>{var{MAX_SAFE_COMPONENT_LENGTH:dv}=gd(),CCe=fd();NA=VH.exports={};var mCe=NA.re=[],et=NA.src=[],tt=NA.t={},ECe=0,St=(r,e,t)=>{let i=ECe++;CCe(i,e),tt[r]=i,et[i]=e,mCe[i]=new RegExp(e,t?"g":void 0)};St("NUMERICIDENTIFIER","0|[1-9]\\d*");St("NUMERICIDENTIFIERLOOSE","[0-9]+");St("NONNUMERICIDENTIFIER","\\d*[a-zA-Z-][a-zA-Z0-9-]*");St("MAINVERSION",`(${et[tt.NUMERICIDENTIFIER]})\\.(${et[tt.NUMERICIDENTIFIER]})\\.(${et[tt.NUMERICIDENTIFIER]})`);St("MAINVERSIONLOOSE",`(${et[tt.NUMERICIDENTIFIERLOOSE]})\\.(${et[tt.NUMERICIDENTIFIERLOOSE]})\\.(${et[tt.NUMERICIDENTIFIERLOOSE]})`);St("PRERELEASEIDENTIFIER",`(?:${et[tt.NUMERICIDENTIFIER]}|${et[tt.NONNUMERICIDENTIFIER]})`);St("PRERELEASEIDENTIFIERLOOSE",`(?:${et[tt.NUMERICIDENTIFIERLOOSE]}|${et[tt.NONNUMERICIDENTIFIER]})`);St("PRERELEASE",`(?:-(${et[tt.PRERELEASEIDENTIFIER]}(?:\\.${et[tt.PRERELEASEIDENTIFIER]})*))`);St("PRERELEASELOOSE",`(?:-?(${et[tt.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${et[tt.PRERELEASEIDENTIFIERLOOSE]})*))`);St("BUILDIDENTIFIER","[0-9A-Za-z-]+");St("BUILD",`(?:\\+(${et[tt.BUILDIDENTIFIER]}(?:\\.${et[tt.BUILDIDENTIFIER]})*))`);St("FULLPLAIN",`v?${et[tt.MAINVERSION]}${et[tt.PRERELEASE]}?${et[tt.BUILD]}?`);St("FULL",`^${et[tt.FULLPLAIN]}$`);St("LOOSEPLAIN",`[v=\\s]*${et[tt.MAINVERSIONLOOSE]}${et[tt.PRERELEASELOOSE]}?${et[tt.BUILD]}?`);St("LOOSE",`^${et[tt.LOOSEPLAIN]}$`);St("GTLT","((?:<|>)?=?)");St("XRANGEIDENTIFIERLOOSE",`${et[tt.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`);St("XRANGEIDENTIFIER",`${et[tt.NUMERICIDENTIFIER]}|x|X|\\*`);St("XRANGEPLAIN",`[v=\\s]*(${et[tt.XRANGEIDENTIFIER]})(?:\\.(${et[tt.XRANGEIDENTIFIER]})(?:\\.(${et[tt.XRANGEIDENTIFIER]})(?:${et[tt.PRERELEASE]})?${et[tt.BUILD]}?)?)?`);St("XRANGEPLAINLOOSE",`[v=\\s]*(${et[tt.XRANGEIDENTIFIERLOOSE]})(?:\\.(${et[tt.XRANGEIDENTIFIERLOOSE]})(?:\\.(${et[tt.XRANGEIDENTIFIERLOOSE]})(?:${et[tt.PRERELEASELOOSE]})?${et[tt.BUILD]}?)?)?`);St("XRANGE",`^${et[tt.GTLT]}\\s*${et[tt.XRANGEPLAIN]}$`);St("XRANGELOOSE",`^${et[tt.GTLT]}\\s*${et[tt.XRANGEPLAINLOOSE]}$`);St("COERCE",`(^|[^\\d])(\\d{1,${dv}})(?:\\.(\\d{1,${dv}}))?(?:\\.(\\d{1,${dv}}))?(?:$|[^\\d])`);St("COERCERTL",et[tt.COERCE],!0);St("LONETILDE","(?:~>?)");St("TILDETRIM",`(\\s*)${et[tt.LONETILDE]}\\s+`,!0);NA.tildeTrimReplace="$1~";St("TILDE",`^${et[tt.LONETILDE]}${et[tt.XRANGEPLAIN]}$`);St("TILDELOOSE",`^${et[tt.LONETILDE]}${et[tt.XRANGEPLAINLOOSE]}$`);St("LONECARET","(?:\\^)");St("CARETTRIM",`(\\s*)${et[tt.LONECARET]}\\s+`,!0);NA.caretTrimReplace="$1^";St("CARET",`^${et[tt.LONECARET]}${et[tt.XRANGEPLAIN]}$`);St("CARETLOOSE",`^${et[tt.LONECARET]}${et[tt.XRANGEPLAINLOOSE]}$`);St("COMPARATORLOOSE",`^${et[tt.GTLT]}\\s*(${et[tt.LOOSEPLAIN]})$|^$`);St("COMPARATOR",`^${et[tt.GTLT]}\\s*(${et[tt.FULLPLAIN]})$|^$`);St("COMPARATORTRIM",`(\\s*)${et[tt.GTLT]}\\s*(${et[tt.LOOSEPLAIN]}|${et[tt.XRANGEPLAIN]})`,!0);NA.comparatorTrimReplace="$1$2$3";St("HYPHENRANGE",`^\\s*(${et[tt.XRANGEPLAIN]})\\s+-\\s+(${et[tt.XRANGEPLAIN]})\\s*$`);St("HYPHENRANGELOOSE",`^\\s*(${et[tt.XRANGEPLAINLOOSE]})\\s+-\\s+(${et[tt.XRANGEPLAINLOOSE]})\\s*$`);St("STAR","(<|>)?=?\\s*\\*");St("GTE0","^\\s*>=\\s*0.0.0\\s*$");St("GTE0PRE","^\\s*>=\\s*0.0.0-0\\s*$")});var hd=w((f$e,XH)=>{var ICe=["includePrerelease","loose","rtl"],yCe=r=>r?typeof r!="object"?{loose:!0}:ICe.filter(e=>r[e]).reduce((e,t)=>(e[t]=!0,e),{}):{};XH.exports=yCe});var OI=w((h$e,$H)=>{var ZH=/^[0-9]+$/,_H=(r,e)=>{let t=ZH.test(r),i=ZH.test(e);return t&&i&&(r=+r,e=+e),r===e?0:t&&!i?-1:i&&!t?1:r_H(e,r);$H.exports={compareIdentifiers:_H,rcompareIdentifiers:wCe}});var Li=w((p$e,iG)=>{var MI=fd(),{MAX_LENGTH:eG,MAX_SAFE_INTEGER:KI}=gd(),{re:tG,t:rG}=uc(),BCe=hd(),{compareIdentifiers:pd}=OI(),Yn=class{constructor(e,t){if(t=BCe(t),e instanceof Yn){if(e.loose===!!t.loose&&e.includePrerelease===!!t.includePrerelease)return e;e=e.version}else if(typeof e!="string")throw new TypeError(`Invalid Version: ${e}`);if(e.length>eG)throw new TypeError(`version is longer than ${eG} characters`);MI("SemVer",e,t),this.options=t,this.loose=!!t.loose,this.includePrerelease=!!t.includePrerelease;let i=e.trim().match(t.loose?tG[rG.LOOSE]:tG[rG.FULL]);if(!i)throw new TypeError(`Invalid Version: ${e}`);if(this.raw=e,this.major=+i[1],this.minor=+i[2],this.patch=+i[3],this.major>KI||this.major<0)throw new TypeError("Invalid major version");if(this.minor>KI||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>KI||this.patch<0)throw new TypeError("Invalid patch version");i[4]?this.prerelease=i[4].split(".").map(n=>{if(/^[0-9]+$/.test(n)){let s=+n;if(s>=0&&s=0;)typeof this.prerelease[i]=="number"&&(this.prerelease[i]++,i=-2);i===-1&&this.prerelease.push(0)}t&&(this.prerelease[0]===t?isNaN(this.prerelease[1])&&(this.prerelease=[t,0]):this.prerelease=[t,0]);break;default:throw new Error(`invalid increment argument: ${e}`)}return this.format(),this.raw=this.version,this}};iG.exports=Yn});var gc=w((d$e,aG)=>{var{MAX_LENGTH:bCe}=gd(),{re:nG,t:sG}=uc(),oG=Li(),QCe=hd(),SCe=(r,e)=>{if(e=QCe(e),r instanceof oG)return r;if(typeof r!="string"||r.length>bCe||!(e.loose?nG[sG.LOOSE]:nG[sG.FULL]).test(r))return null;try{return new oG(r,e)}catch{return null}};aG.exports=SCe});var lG=w((C$e,AG)=>{var vCe=gc(),xCe=(r,e)=>{let t=vCe(r,e);return t?t.version:null};AG.exports=xCe});var uG=w((m$e,cG)=>{var PCe=gc(),DCe=(r,e)=>{let t=PCe(r.trim().replace(/^[=v]+/,""),e);return t?t.version:null};cG.exports=DCe});var fG=w((E$e,gG)=>{var kCe=Li(),RCe=(r,e,t,i)=>{typeof t=="string"&&(i=t,t=void 0);try{return new kCe(r,t).inc(e,i).version}catch{return null}};gG.exports=RCe});var cs=w((I$e,pG)=>{var hG=Li(),FCe=(r,e,t)=>new hG(r,t).compare(new hG(e,t));pG.exports=FCe});var UI=w((y$e,dG)=>{var NCe=cs(),TCe=(r,e,t)=>NCe(r,e,t)===0;dG.exports=TCe});var EG=w((w$e,mG)=>{var CG=gc(),LCe=UI(),OCe=(r,e)=>{if(LCe(r,e))return null;{let t=CG(r),i=CG(e),n=t.prerelease.length||i.prerelease.length,s=n?"pre":"",o=n?"prerelease":"";for(let a in t)if((a==="major"||a==="minor"||a==="patch")&&t[a]!==i[a])return s+a;return o}};mG.exports=OCe});var yG=w((B$e,IG)=>{var MCe=Li(),KCe=(r,e)=>new MCe(r,e).major;IG.exports=KCe});var BG=w((b$e,wG)=>{var UCe=Li(),HCe=(r,e)=>new UCe(r,e).minor;wG.exports=HCe});var QG=w((Q$e,bG)=>{var GCe=Li(),YCe=(r,e)=>new GCe(r,e).patch;bG.exports=YCe});var vG=w((S$e,SG)=>{var jCe=gc(),qCe=(r,e)=>{let t=jCe(r,e);return t&&t.prerelease.length?t.prerelease:null};SG.exports=qCe});var PG=w((v$e,xG)=>{var JCe=cs(),WCe=(r,e,t)=>JCe(e,r,t);xG.exports=WCe});var kG=w((x$e,DG)=>{var zCe=cs(),VCe=(r,e)=>zCe(r,e,!0);DG.exports=VCe});var HI=w((P$e,FG)=>{var RG=Li(),XCe=(r,e,t)=>{let i=new RG(r,t),n=new RG(e,t);return i.compare(n)||i.compareBuild(n)};FG.exports=XCe});var TG=w((D$e,NG)=>{var ZCe=HI(),_Ce=(r,e)=>r.sort((t,i)=>ZCe(t,i,e));NG.exports=_Ce});var OG=w((k$e,LG)=>{var $Ce=HI(),eme=(r,e)=>r.sort((t,i)=>$Ce(i,t,e));LG.exports=eme});var dd=w((R$e,MG)=>{var tme=cs(),rme=(r,e,t)=>tme(r,e,t)>0;MG.exports=rme});var GI=w((F$e,KG)=>{var ime=cs(),nme=(r,e,t)=>ime(r,e,t)<0;KG.exports=nme});var Cv=w((N$e,UG)=>{var sme=cs(),ome=(r,e,t)=>sme(r,e,t)!==0;UG.exports=ome});var YI=w((T$e,HG)=>{var ame=cs(),Ame=(r,e,t)=>ame(r,e,t)>=0;HG.exports=Ame});var jI=w((L$e,GG)=>{var lme=cs(),cme=(r,e,t)=>lme(r,e,t)<=0;GG.exports=cme});var mv=w((O$e,YG)=>{var ume=UI(),gme=Cv(),fme=dd(),hme=YI(),pme=GI(),dme=jI(),Cme=(r,e,t,i)=>{switch(e){case"===":return typeof r=="object"&&(r=r.version),typeof t=="object"&&(t=t.version),r===t;case"!==":return typeof r=="object"&&(r=r.version),typeof t=="object"&&(t=t.version),r!==t;case"":case"=":case"==":return ume(r,t,i);case"!=":return gme(r,t,i);case">":return fme(r,t,i);case">=":return hme(r,t,i);case"<":return pme(r,t,i);case"<=":return dme(r,t,i);default:throw new TypeError(`Invalid operator: ${e}`)}};YG.exports=Cme});var qG=w((M$e,jG)=>{var mme=Li(),Eme=gc(),{re:qI,t:JI}=uc(),Ime=(r,e)=>{if(r instanceof mme)return r;if(typeof r=="number"&&(r=String(r)),typeof r!="string")return null;e=e||{};let t=null;if(!e.rtl)t=r.match(qI[JI.COERCE]);else{let i;for(;(i=qI[JI.COERCERTL].exec(r))&&(!t||t.index+t[0].length!==r.length);)(!t||i.index+i[0].length!==t.index+t[0].length)&&(t=i),qI[JI.COERCERTL].lastIndex=i.index+i[1].length+i[2].length;qI[JI.COERCERTL].lastIndex=-1}return t===null?null:Eme(`${t[2]}.${t[3]||"0"}.${t[4]||"0"}`,e)};jG.exports=Ime});var WG=w((K$e,JG)=>{"use strict";JG.exports=function(r){r.prototype[Symbol.iterator]=function*(){for(let e=this.head;e;e=e.next)yield e.value}}});var WI=w((U$e,zG)=>{"use strict";zG.exports=Ht;Ht.Node=fc;Ht.create=Ht;function Ht(r){var e=this;if(e instanceof Ht||(e=new Ht),e.tail=null,e.head=null,e.length=0,r&&typeof r.forEach=="function")r.forEach(function(n){e.push(n)});else if(arguments.length>0)for(var t=0,i=arguments.length;t1)t=e;else if(this.head)i=this.head.next,t=this.head.value;else throw new TypeError("Reduce of empty list with no initial value");for(var n=0;i!==null;n++)t=r(t,i.value,n),i=i.next;return t};Ht.prototype.reduceReverse=function(r,e){var t,i=this.tail;if(arguments.length>1)t=e;else if(this.tail)i=this.tail.prev,t=this.tail.value;else throw new TypeError("Reduce of empty list with no initial value");for(var n=this.length-1;i!==null;n--)t=r(t,i.value,n),i=i.prev;return t};Ht.prototype.toArray=function(){for(var r=new Array(this.length),e=0,t=this.head;t!==null;e++)r[e]=t.value,t=t.next;return r};Ht.prototype.toArrayReverse=function(){for(var r=new Array(this.length),e=0,t=this.tail;t!==null;e++)r[e]=t.value,t=t.prev;return r};Ht.prototype.slice=function(r,e){e=e||this.length,e<0&&(e+=this.length),r=r||0,r<0&&(r+=this.length);var t=new Ht;if(ethis.length&&(e=this.length);for(var i=0,n=this.head;n!==null&&ithis.length&&(e=this.length);for(var i=this.length,n=this.tail;n!==null&&i>e;i--)n=n.prev;for(;n!==null&&i>r;i--,n=n.prev)t.push(n.value);return t};Ht.prototype.splice=function(r,e,...t){r>this.length&&(r=this.length-1),r<0&&(r=this.length+r);for(var i=0,n=this.head;n!==null&&i{"use strict";var bme=WI(),hc=Symbol("max"),va=Symbol("length"),Wg=Symbol("lengthCalculator"),md=Symbol("allowStale"),pc=Symbol("maxAge"),Sa=Symbol("dispose"),VG=Symbol("noDisposeOnSet"),di=Symbol("lruList"),Zs=Symbol("cache"),ZG=Symbol("updateAgeOnGet"),Ev=()=>1,yv=class{constructor(e){if(typeof e=="number"&&(e={max:e}),e||(e={}),e.max&&(typeof e.max!="number"||e.max<0))throw new TypeError("max must be a non-negative number");let t=this[hc]=e.max||1/0,i=e.length||Ev;if(this[Wg]=typeof i!="function"?Ev:i,this[md]=e.stale||!1,e.maxAge&&typeof e.maxAge!="number")throw new TypeError("maxAge must be a number");this[pc]=e.maxAge||0,this[Sa]=e.dispose,this[VG]=e.noDisposeOnSet||!1,this[ZG]=e.updateAgeOnGet||!1,this.reset()}set max(e){if(typeof e!="number"||e<0)throw new TypeError("max must be a non-negative number");this[hc]=e||1/0,Cd(this)}get max(){return this[hc]}set allowStale(e){this[md]=!!e}get allowStale(){return this[md]}set maxAge(e){if(typeof e!="number")throw new TypeError("maxAge must be a non-negative number");this[pc]=e,Cd(this)}get maxAge(){return this[pc]}set lengthCalculator(e){typeof e!="function"&&(e=Ev),e!==this[Wg]&&(this[Wg]=e,this[va]=0,this[di].forEach(t=>{t.length=this[Wg](t.value,t.key),this[va]+=t.length})),Cd(this)}get lengthCalculator(){return this[Wg]}get length(){return this[va]}get itemCount(){return this[di].length}rforEach(e,t){t=t||this;for(let i=this[di].tail;i!==null;){let n=i.prev;XG(this,e,i,t),i=n}}forEach(e,t){t=t||this;for(let i=this[di].head;i!==null;){let n=i.next;XG(this,e,i,t),i=n}}keys(){return this[di].toArray().map(e=>e.key)}values(){return this[di].toArray().map(e=>e.value)}reset(){this[Sa]&&this[di]&&this[di].length&&this[di].forEach(e=>this[Sa](e.key,e.value)),this[Zs]=new Map,this[di]=new bme,this[va]=0}dump(){return this[di].map(e=>zI(this,e)?!1:{k:e.key,v:e.value,e:e.now+(e.maxAge||0)}).toArray().filter(e=>e)}dumpLru(){return this[di]}set(e,t,i){if(i=i||this[pc],i&&typeof i!="number")throw new TypeError("maxAge must be a number");let n=i?Date.now():0,s=this[Wg](t,e);if(this[Zs].has(e)){if(s>this[hc])return zg(this,this[Zs].get(e)),!1;let l=this[Zs].get(e).value;return this[Sa]&&(this[VG]||this[Sa](e,l.value)),l.now=n,l.maxAge=i,l.value=t,this[va]+=s-l.length,l.length=s,this.get(e),Cd(this),!0}let o=new wv(e,t,s,n,i);return o.length>this[hc]?(this[Sa]&&this[Sa](e,t),!1):(this[va]+=o.length,this[di].unshift(o),this[Zs].set(e,this[di].head),Cd(this),!0)}has(e){if(!this[Zs].has(e))return!1;let t=this[Zs].get(e).value;return!zI(this,t)}get(e){return Iv(this,e,!0)}peek(e){return Iv(this,e,!1)}pop(){let e=this[di].tail;return e?(zg(this,e),e.value):null}del(e){zg(this,this[Zs].get(e))}load(e){this.reset();let t=Date.now();for(let i=e.length-1;i>=0;i--){let n=e[i],s=n.e||0;if(s===0)this.set(n.k,n.v);else{let o=s-t;o>0&&this.set(n.k,n.v,o)}}}prune(){this[Zs].forEach((e,t)=>Iv(this,t,!1))}},Iv=(r,e,t)=>{let i=r[Zs].get(e);if(i){let n=i.value;if(zI(r,n)){if(zg(r,i),!r[md])return}else t&&(r[ZG]&&(i.value.now=Date.now()),r[di].unshiftNode(i));return n.value}},zI=(r,e)=>{if(!e||!e.maxAge&&!r[pc])return!1;let t=Date.now()-e.now;return e.maxAge?t>e.maxAge:r[pc]&&t>r[pc]},Cd=r=>{if(r[va]>r[hc])for(let e=r[di].tail;r[va]>r[hc]&&e!==null;){let t=e.prev;zg(r,e),e=t}},zg=(r,e)=>{if(e){let t=e.value;r[Sa]&&r[Sa](t.key,t.value),r[va]-=t.length,r[Zs].delete(t.key),r[di].removeNode(e)}},wv=class{constructor(e,t,i,n,s){this.key=e,this.value=t,this.length=i,this.now=n,this.maxAge=s||0}},XG=(r,e,t,i)=>{let n=t.value;zI(r,n)&&(zg(r,t),r[md]||(n=void 0)),n&&e.call(i,n.value,n.key,r)};_G.exports=yv});var us=w((G$e,iY)=>{var dc=class{constructor(e,t){if(t=Sme(t),e instanceof dc)return e.loose===!!t.loose&&e.includePrerelease===!!t.includePrerelease?e:new dc(e.raw,t);if(e instanceof Bv)return this.raw=e.value,this.set=[[e]],this.format(),this;if(this.options=t,this.loose=!!t.loose,this.includePrerelease=!!t.includePrerelease,this.raw=e,this.set=e.split(/\s*\|\|\s*/).map(i=>this.parseRange(i.trim())).filter(i=>i.length),!this.set.length)throw new TypeError(`Invalid SemVer Range: ${e}`);if(this.set.length>1){let i=this.set[0];if(this.set=this.set.filter(n=>!tY(n[0])),this.set.length===0)this.set=[i];else if(this.set.length>1){for(let n of this.set)if(n.length===1&&kme(n[0])){this.set=[n];break}}}this.format()}format(){return this.range=this.set.map(e=>e.join(" ").trim()).join("||").trim(),this.range}toString(){return this.range}parseRange(e){e=e.trim();let i=`parseRange:${Object.keys(this.options).join(",")}:${e}`,n=eY.get(i);if(n)return n;let s=this.options.loose,o=s?Oi[bi.HYPHENRANGELOOSE]:Oi[bi.HYPHENRANGE];e=e.replace(o,Hme(this.options.includePrerelease)),Hr("hyphen replace",e),e=e.replace(Oi[bi.COMPARATORTRIM],xme),Hr("comparator trim",e,Oi[bi.COMPARATORTRIM]),e=e.replace(Oi[bi.TILDETRIM],Pme),e=e.replace(Oi[bi.CARETTRIM],Dme),e=e.split(/\s+/).join(" ");let a=s?Oi[bi.COMPARATORLOOSE]:Oi[bi.COMPARATOR],l=e.split(" ").map(f=>Rme(f,this.options)).join(" ").split(/\s+/).map(f=>Ume(f,this.options)).filter(this.options.loose?f=>!!f.match(a):()=>!0).map(f=>new Bv(f,this.options)),c=l.length,u=new Map;for(let f of l){if(tY(f))return[f];u.set(f.value,f)}u.size>1&&u.has("")&&u.delete("");let g=[...u.values()];return eY.set(i,g),g}intersects(e,t){if(!(e instanceof dc))throw new TypeError("a Range is required");return this.set.some(i=>rY(i,t)&&e.set.some(n=>rY(n,t)&&i.every(s=>n.every(o=>s.intersects(o,t)))))}test(e){if(!e)return!1;if(typeof e=="string")try{e=new vme(e,this.options)}catch{return!1}for(let t=0;tr.value==="<0.0.0-0",kme=r=>r.value==="",rY=(r,e)=>{let t=!0,i=r.slice(),n=i.pop();for(;t&&i.length;)t=i.every(s=>n.intersects(s,e)),n=i.pop();return t},Rme=(r,e)=>(Hr("comp",r,e),r=Tme(r,e),Hr("caret",r),r=Fme(r,e),Hr("tildes",r),r=Ome(r,e),Hr("xrange",r),r=Kme(r,e),Hr("stars",r),r),$i=r=>!r||r.toLowerCase()==="x"||r==="*",Fme=(r,e)=>r.trim().split(/\s+/).map(t=>Nme(t,e)).join(" "),Nme=(r,e)=>{let t=e.loose?Oi[bi.TILDELOOSE]:Oi[bi.TILDE];return r.replace(t,(i,n,s,o,a)=>{Hr("tilde",r,i,n,s,o,a);let l;return $i(n)?l="":$i(s)?l=`>=${n}.0.0 <${+n+1}.0.0-0`:$i(o)?l=`>=${n}.${s}.0 <${n}.${+s+1}.0-0`:a?(Hr("replaceTilde pr",a),l=`>=${n}.${s}.${o}-${a} <${n}.${+s+1}.0-0`):l=`>=${n}.${s}.${o} <${n}.${+s+1}.0-0`,Hr("tilde return",l),l})},Tme=(r,e)=>r.trim().split(/\s+/).map(t=>Lme(t,e)).join(" "),Lme=(r,e)=>{Hr("caret",r,e);let t=e.loose?Oi[bi.CARETLOOSE]:Oi[bi.CARET],i=e.includePrerelease?"-0":"";return r.replace(t,(n,s,o,a,l)=>{Hr("caret",r,n,s,o,a,l);let c;return $i(s)?c="":$i(o)?c=`>=${s}.0.0${i} <${+s+1}.0.0-0`:$i(a)?s==="0"?c=`>=${s}.${o}.0${i} <${s}.${+o+1}.0-0`:c=`>=${s}.${o}.0${i} <${+s+1}.0.0-0`:l?(Hr("replaceCaret pr",l),s==="0"?o==="0"?c=`>=${s}.${o}.${a}-${l} <${s}.${o}.${+a+1}-0`:c=`>=${s}.${o}.${a}-${l} <${s}.${+o+1}.0-0`:c=`>=${s}.${o}.${a}-${l} <${+s+1}.0.0-0`):(Hr("no pr"),s==="0"?o==="0"?c=`>=${s}.${o}.${a}${i} <${s}.${o}.${+a+1}-0`:c=`>=${s}.${o}.${a}${i} <${s}.${+o+1}.0-0`:c=`>=${s}.${o}.${a} <${+s+1}.0.0-0`),Hr("caret return",c),c})},Ome=(r,e)=>(Hr("replaceXRanges",r,e),r.split(/\s+/).map(t=>Mme(t,e)).join(" ")),Mme=(r,e)=>{r=r.trim();let t=e.loose?Oi[bi.XRANGELOOSE]:Oi[bi.XRANGE];return r.replace(t,(i,n,s,o,a,l)=>{Hr("xRange",r,i,n,s,o,a,l);let c=$i(s),u=c||$i(o),g=u||$i(a),f=g;return n==="="&&f&&(n=""),l=e.includePrerelease?"-0":"",c?n===">"||n==="<"?i="<0.0.0-0":i="*":n&&f?(u&&(o=0),a=0,n===">"?(n=">=",u?(s=+s+1,o=0,a=0):(o=+o+1,a=0)):n==="<="&&(n="<",u?s=+s+1:o=+o+1),n==="<"&&(l="-0"),i=`${n+s}.${o}.${a}${l}`):u?i=`>=${s}.0.0${l} <${+s+1}.0.0-0`:g&&(i=`>=${s}.${o}.0${l} <${s}.${+o+1}.0-0`),Hr("xRange return",i),i})},Kme=(r,e)=>(Hr("replaceStars",r,e),r.trim().replace(Oi[bi.STAR],"")),Ume=(r,e)=>(Hr("replaceGTE0",r,e),r.trim().replace(Oi[e.includePrerelease?bi.GTE0PRE:bi.GTE0],"")),Hme=r=>(e,t,i,n,s,o,a,l,c,u,g,f,h)=>($i(i)?t="":$i(n)?t=`>=${i}.0.0${r?"-0":""}`:$i(s)?t=`>=${i}.${n}.0${r?"-0":""}`:o?t=`>=${t}`:t=`>=${t}${r?"-0":""}`,$i(c)?l="":$i(u)?l=`<${+c+1}.0.0-0`:$i(g)?l=`<${c}.${+u+1}.0-0`:f?l=`<=${c}.${u}.${g}-${f}`:r?l=`<${c}.${u}.${+g+1}-0`:l=`<=${l}`,`${t} ${l}`.trim()),Gme=(r,e,t)=>{for(let i=0;i0){let n=r[i].semver;if(n.major===e.major&&n.minor===e.minor&&n.patch===e.patch)return!0}return!1}return!0}});var Ed=w((Y$e,AY)=>{var Id=Symbol("SemVer ANY"),Vg=class{static get ANY(){return Id}constructor(e,t){if(t=Yme(t),e instanceof Vg){if(e.loose===!!t.loose)return e;e=e.value}Qv("comparator",e,t),this.options=t,this.loose=!!t.loose,this.parse(e),this.semver===Id?this.value="":this.value=this.operator+this.semver.version,Qv("comp",this)}parse(e){let t=this.options.loose?nY[sY.COMPARATORLOOSE]:nY[sY.COMPARATOR],i=e.match(t);if(!i)throw new TypeError(`Invalid comparator: ${e}`);this.operator=i[1]!==void 0?i[1]:"",this.operator==="="&&(this.operator=""),i[2]?this.semver=new oY(i[2],this.options.loose):this.semver=Id}toString(){return this.value}test(e){if(Qv("Comparator.test",e,this.options.loose),this.semver===Id||e===Id)return!0;if(typeof e=="string")try{e=new oY(e,this.options)}catch{return!1}return bv(e,this.operator,this.semver,this.options)}intersects(e,t){if(!(e instanceof Vg))throw new TypeError("a Comparator is required");if((!t||typeof t!="object")&&(t={loose:!!t,includePrerelease:!1}),this.operator==="")return this.value===""?!0:new aY(e.value,t).test(this.value);if(e.operator==="")return e.value===""?!0:new aY(this.value,t).test(e.semver);let i=(this.operator===">="||this.operator===">")&&(e.operator===">="||e.operator===">"),n=(this.operator==="<="||this.operator==="<")&&(e.operator==="<="||e.operator==="<"),s=this.semver.version===e.semver.version,o=(this.operator===">="||this.operator==="<=")&&(e.operator===">="||e.operator==="<="),a=bv(this.semver,"<",e.semver,t)&&(this.operator===">="||this.operator===">")&&(e.operator==="<="||e.operator==="<"),l=bv(this.semver,">",e.semver,t)&&(this.operator==="<="||this.operator==="<")&&(e.operator===">="||e.operator===">");return i||n||s&&o||a||l}};AY.exports=Vg;var Yme=hd(),{re:nY,t:sY}=uc(),bv=mv(),Qv=fd(),oY=Li(),aY=us()});var yd=w((j$e,lY)=>{var jme=us(),qme=(r,e,t)=>{try{e=new jme(e,t)}catch{return!1}return e.test(r)};lY.exports=qme});var uY=w((q$e,cY)=>{var Jme=us(),Wme=(r,e)=>new Jme(r,e).set.map(t=>t.map(i=>i.value).join(" ").trim().split(" "));cY.exports=Wme});var fY=w((J$e,gY)=>{var zme=Li(),Vme=us(),Xme=(r,e,t)=>{let i=null,n=null,s=null;try{s=new Vme(e,t)}catch{return null}return r.forEach(o=>{s.test(o)&&(!i||n.compare(o)===-1)&&(i=o,n=new zme(i,t))}),i};gY.exports=Xme});var pY=w((W$e,hY)=>{var Zme=Li(),_me=us(),$me=(r,e,t)=>{let i=null,n=null,s=null;try{s=new _me(e,t)}catch{return null}return r.forEach(o=>{s.test(o)&&(!i||n.compare(o)===1)&&(i=o,n=new Zme(i,t))}),i};hY.exports=$me});var mY=w((z$e,CY)=>{var Sv=Li(),eEe=us(),dY=dd(),tEe=(r,e)=>{r=new eEe(r,e);let t=new Sv("0.0.0");if(r.test(t)||(t=new Sv("0.0.0-0"),r.test(t)))return t;t=null;for(let i=0;i{let a=new Sv(o.semver.version);switch(o.operator){case">":a.prerelease.length===0?a.patch++:a.prerelease.push(0),a.raw=a.format();case"":case">=":(!s||dY(a,s))&&(s=a);break;case"<":case"<=":break;default:throw new Error(`Unexpected operation: ${o.operator}`)}}),s&&(!t||dY(t,s))&&(t=s)}return t&&r.test(t)?t:null};CY.exports=tEe});var IY=w((V$e,EY)=>{var rEe=us(),iEe=(r,e)=>{try{return new rEe(r,e).range||"*"}catch{return null}};EY.exports=iEe});var VI=w((X$e,bY)=>{var nEe=Li(),BY=Ed(),{ANY:sEe}=BY,oEe=us(),aEe=yd(),yY=dd(),wY=GI(),AEe=jI(),lEe=YI(),cEe=(r,e,t,i)=>{r=new nEe(r,i),e=new oEe(e,i);let n,s,o,a,l;switch(t){case">":n=yY,s=AEe,o=wY,a=">",l=">=";break;case"<":n=wY,s=lEe,o=yY,a="<",l="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(aEe(r,e,i))return!1;for(let c=0;c{h.semver===sEe&&(h=new BY(">=0.0.0")),g=g||h,f=f||h,n(h.semver,g.semver,i)?g=h:o(h.semver,f.semver,i)&&(f=h)}),g.operator===a||g.operator===l||(!f.operator||f.operator===a)&&s(r,f.semver))return!1;if(f.operator===l&&o(r,f.semver))return!1}return!0};bY.exports=cEe});var SY=w((Z$e,QY)=>{var uEe=VI(),gEe=(r,e,t)=>uEe(r,e,">",t);QY.exports=gEe});var xY=w((_$e,vY)=>{var fEe=VI(),hEe=(r,e,t)=>fEe(r,e,"<",t);vY.exports=hEe});var kY=w(($$e,DY)=>{var PY=us(),pEe=(r,e,t)=>(r=new PY(r,t),e=new PY(e,t),r.intersects(e));DY.exports=pEe});var FY=w((eet,RY)=>{var dEe=yd(),CEe=cs();RY.exports=(r,e,t)=>{let i=[],n=null,s=null,o=r.sort((u,g)=>CEe(u,g,t));for(let u of o)dEe(u,e,t)?(s=u,n||(n=u)):(s&&i.push([n,s]),s=null,n=null);n&&i.push([n,null]);let a=[];for(let[u,g]of i)u===g?a.push(u):!g&&u===o[0]?a.push("*"):g?u===o[0]?a.push(`<=${g}`):a.push(`${u} - ${g}`):a.push(`>=${u}`);let l=a.join(" || "),c=typeof e.raw=="string"?e.raw:String(e);return l.length{var NY=us(),XI=Ed(),{ANY:vv}=XI,wd=yd(),xv=cs(),mEe=(r,e,t={})=>{if(r===e)return!0;r=new NY(r,t),e=new NY(e,t);let i=!1;e:for(let n of r.set){for(let s of e.set){let o=EEe(n,s,t);if(i=i||o!==null,o)continue e}if(i)return!1}return!0},EEe=(r,e,t)=>{if(r===e)return!0;if(r.length===1&&r[0].semver===vv){if(e.length===1&&e[0].semver===vv)return!0;t.includePrerelease?r=[new XI(">=0.0.0-0")]:r=[new XI(">=0.0.0")]}if(e.length===1&&e[0].semver===vv){if(t.includePrerelease)return!0;e=[new XI(">=0.0.0")]}let i=new Set,n,s;for(let h of r)h.operator===">"||h.operator===">="?n=TY(n,h,t):h.operator==="<"||h.operator==="<="?s=LY(s,h,t):i.add(h.semver);if(i.size>1)return null;let o;if(n&&s){if(o=xv(n.semver,s.semver,t),o>0)return null;if(o===0&&(n.operator!==">="||s.operator!=="<="))return null}for(let h of i){if(n&&!wd(h,String(n),t)||s&&!wd(h,String(s),t))return null;for(let p of e)if(!wd(h,String(p),t))return!1;return!0}let a,l,c,u,g=s&&!t.includePrerelease&&s.semver.prerelease.length?s.semver:!1,f=n&&!t.includePrerelease&&n.semver.prerelease.length?n.semver:!1;g&&g.prerelease.length===1&&s.operator==="<"&&g.prerelease[0]===0&&(g=!1);for(let h of e){if(u=u||h.operator===">"||h.operator===">=",c=c||h.operator==="<"||h.operator==="<=",n){if(f&&h.semver.prerelease&&h.semver.prerelease.length&&h.semver.major===f.major&&h.semver.minor===f.minor&&h.semver.patch===f.patch&&(f=!1),h.operator===">"||h.operator===">="){if(a=TY(n,h,t),a===h&&a!==n)return!1}else if(n.operator===">="&&!wd(n.semver,String(h),t))return!1}if(s){if(g&&h.semver.prerelease&&h.semver.prerelease.length&&h.semver.major===g.major&&h.semver.minor===g.minor&&h.semver.patch===g.patch&&(g=!1),h.operator==="<"||h.operator==="<="){if(l=LY(s,h,t),l===h&&l!==s)return!1}else if(s.operator==="<="&&!wd(s.semver,String(h),t))return!1}if(!h.operator&&(s||n)&&o!==0)return!1}return!(n&&c&&!s&&o!==0||s&&u&&!n&&o!==0||f||g)},TY=(r,e,t)=>{if(!r)return e;let i=xv(r.semver,e.semver,t);return i>0?r:i<0||e.operator===">"&&r.operator===">="?e:r},LY=(r,e,t)=>{if(!r)return e;let i=xv(r.semver,e.semver,t);return i<0?r:i>0||e.operator==="<"&&r.operator==="<="?e:r};OY.exports=mEe});var Xr=w((ret,KY)=>{var Pv=uc();KY.exports={re:Pv.re,src:Pv.src,tokens:Pv.t,SEMVER_SPEC_VERSION:gd().SEMVER_SPEC_VERSION,SemVer:Li(),compareIdentifiers:OI().compareIdentifiers,rcompareIdentifiers:OI().rcompareIdentifiers,parse:gc(),valid:lG(),clean:uG(),inc:fG(),diff:EG(),major:yG(),minor:BG(),patch:QG(),prerelease:vG(),compare:cs(),rcompare:PG(),compareLoose:kG(),compareBuild:HI(),sort:TG(),rsort:OG(),gt:dd(),lt:GI(),eq:UI(),neq:Cv(),gte:YI(),lte:jI(),cmp:mv(),coerce:qG(),Comparator:Ed(),Range:us(),satisfies:yd(),toComparators:uY(),maxSatisfying:fY(),minSatisfying:pY(),minVersion:mY(),validRange:IY(),outside:VI(),gtr:SY(),ltr:xY(),intersects:kY(),simplifyRange:FY(),subset:MY()}});var Dv=w(ZI=>{"use strict";Object.defineProperty(ZI,"__esModule",{value:!0});ZI.VERSION=void 0;ZI.VERSION="9.1.0"});var Gt=w((exports,module)=>{"use strict";var __spreadArray=exports&&exports.__spreadArray||function(r,e,t){if(t||arguments.length===2)for(var i=0,n=e.length,s;i{(function(r,e){typeof define=="function"&&define.amd?define([],e):typeof _I=="object"&&_I.exports?_I.exports=e():r.regexpToAst=e()})(typeof self<"u"?self:UY,function(){function r(){}r.prototype.saveState=function(){return{idx:this.idx,input:this.input,groupIdx:this.groupIdx}},r.prototype.restoreState=function(p){this.idx=p.idx,this.input=p.input,this.groupIdx=p.groupIdx},r.prototype.pattern=function(p){this.idx=0,this.input=p,this.groupIdx=0,this.consumeChar("/");var C=this.disjunction();this.consumeChar("/");for(var y={type:"Flags",loc:{begin:this.idx,end:p.length},global:!1,ignoreCase:!1,multiLine:!1,unicode:!1,sticky:!1};this.isRegExpFlag();)switch(this.popChar()){case"g":o(y,"global");break;case"i":o(y,"ignoreCase");break;case"m":o(y,"multiLine");break;case"u":o(y,"unicode");break;case"y":o(y,"sticky");break}if(this.idx!==this.input.length)throw Error("Redundant input: "+this.input.substring(this.idx));return{type:"Pattern",flags:y,value:C,loc:this.loc(0)}},r.prototype.disjunction=function(){var p=[],C=this.idx;for(p.push(this.alternative());this.peekChar()==="|";)this.consumeChar("|"),p.push(this.alternative());return{type:"Disjunction",value:p,loc:this.loc(C)}},r.prototype.alternative=function(){for(var p=[],C=this.idx;this.isTerm();)p.push(this.term());return{type:"Alternative",value:p,loc:this.loc(C)}},r.prototype.term=function(){return this.isAssertion()?this.assertion():this.atom()},r.prototype.assertion=function(){var p=this.idx;switch(this.popChar()){case"^":return{type:"StartAnchor",loc:this.loc(p)};case"$":return{type:"EndAnchor",loc:this.loc(p)};case"\\":switch(this.popChar()){case"b":return{type:"WordBoundary",loc:this.loc(p)};case"B":return{type:"NonWordBoundary",loc:this.loc(p)}}throw Error("Invalid Assertion Escape");case"(":this.consumeChar("?");var C;switch(this.popChar()){case"=":C="Lookahead";break;case"!":C="NegativeLookahead";break}a(C);var y=this.disjunction();return this.consumeChar(")"),{type:C,value:y,loc:this.loc(p)}}l()},r.prototype.quantifier=function(p){var C,y=this.idx;switch(this.popChar()){case"*":C={atLeast:0,atMost:1/0};break;case"+":C={atLeast:1,atMost:1/0};break;case"?":C={atLeast:0,atMost:1};break;case"{":var B=this.integerIncludingZero();switch(this.popChar()){case"}":C={atLeast:B,atMost:B};break;case",":var v;this.isDigit()?(v=this.integerIncludingZero(),C={atLeast:B,atMost:v}):C={atLeast:B,atMost:1/0},this.consumeChar("}");break}if(p===!0&&C===void 0)return;a(C);break}if(!(p===!0&&C===void 0))return a(C),this.peekChar(0)==="?"?(this.consumeChar("?"),C.greedy=!1):C.greedy=!0,C.type="Quantifier",C.loc=this.loc(y),C},r.prototype.atom=function(){var p,C=this.idx;switch(this.peekChar()){case".":p=this.dotAll();break;case"\\":p=this.atomEscape();break;case"[":p=this.characterClass();break;case"(":p=this.group();break}return p===void 0&&this.isPatternCharacter()&&(p=this.patternCharacter()),a(p),p.loc=this.loc(C),this.isQuantifier()&&(p.quantifier=this.quantifier()),p},r.prototype.dotAll=function(){return this.consumeChar("."),{type:"Set",complement:!0,value:[n(` -`),n("\r"),n("\u2028"),n("\u2029")]}},r.prototype.atomEscape=function(){switch(this.consumeChar("\\"),this.peekChar()){case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":return this.decimalEscapeAtom();case"d":case"D":case"s":case"S":case"w":case"W":return this.characterClassEscape();case"f":case"n":case"r":case"t":case"v":return this.controlEscapeAtom();case"c":return this.controlLetterEscapeAtom();case"0":return this.nulCharacterAtom();case"x":return this.hexEscapeSequenceAtom();case"u":return this.regExpUnicodeEscapeSequenceAtom();default:return this.identityEscapeAtom()}},r.prototype.decimalEscapeAtom=function(){var p=this.positiveInteger();return{type:"GroupBackReference",value:p}},r.prototype.characterClassEscape=function(){var p,C=!1;switch(this.popChar()){case"d":p=u;break;case"D":p=u,C=!0;break;case"s":p=f;break;case"S":p=f,C=!0;break;case"w":p=g;break;case"W":p=g,C=!0;break}return a(p),{type:"Set",value:p,complement:C}},r.prototype.controlEscapeAtom=function(){var p;switch(this.popChar()){case"f":p=n("\f");break;case"n":p=n(` -`);break;case"r":p=n("\r");break;case"t":p=n(" ");break;case"v":p=n("\v");break}return a(p),{type:"Character",value:p}},r.prototype.controlLetterEscapeAtom=function(){this.consumeChar("c");var p=this.popChar();if(/[a-zA-Z]/.test(p)===!1)throw Error("Invalid ");var C=p.toUpperCase().charCodeAt(0)-64;return{type:"Character",value:C}},r.prototype.nulCharacterAtom=function(){return this.consumeChar("0"),{type:"Character",value:n("\0")}},r.prototype.hexEscapeSequenceAtom=function(){return this.consumeChar("x"),this.parseHexDigits(2)},r.prototype.regExpUnicodeEscapeSequenceAtom=function(){return this.consumeChar("u"),this.parseHexDigits(4)},r.prototype.identityEscapeAtom=function(){var p=this.popChar();return{type:"Character",value:n(p)}},r.prototype.classPatternCharacterAtom=function(){switch(this.peekChar()){case` -`:case"\r":case"\u2028":case"\u2029":case"\\":case"]":throw Error("TBD");default:var p=this.popChar();return{type:"Character",value:n(p)}}},r.prototype.characterClass=function(){var p=[],C=!1;for(this.consumeChar("["),this.peekChar(0)==="^"&&(this.consumeChar("^"),C=!0);this.isClassAtom();){var y=this.classAtom(),B=y.type==="Character";if(B&&this.isRangeDash()){this.consumeChar("-");var v=this.classAtom(),D=v.type==="Character";if(D){if(v.value=this.input.length)throw Error("Unexpected end of input");this.idx++},r.prototype.loc=function(p){return{begin:p,end:this.idx}};var e=/[0-9a-fA-F]/,t=/[0-9]/,i=/[1-9]/;function n(p){return p.charCodeAt(0)}function s(p,C){p.length!==void 0?p.forEach(function(y){C.push(y)}):C.push(p)}function o(p,C){if(p[C]===!0)throw"duplicate flag "+C;p[C]=!0}function a(p){if(p===void 0)throw Error("Internal Error - Should never get here!")}function l(){throw Error("Internal Error - Should never get here!")}var c,u=[];for(c=n("0");c<=n("9");c++)u.push(c);var g=[n("_")].concat(u);for(c=n("a");c<=n("z");c++)g.push(c);for(c=n("A");c<=n("Z");c++)g.push(c);var f=[n(" "),n("\f"),n(` -`),n("\r"),n(" "),n("\v"),n(" "),n("\xA0"),n("\u1680"),n("\u2000"),n("\u2001"),n("\u2002"),n("\u2003"),n("\u2004"),n("\u2005"),n("\u2006"),n("\u2007"),n("\u2008"),n("\u2009"),n("\u200A"),n("\u2028"),n("\u2029"),n("\u202F"),n("\u205F"),n("\u3000"),n("\uFEFF")];function h(){}return h.prototype.visitChildren=function(p){for(var C in p){var y=p[C];p.hasOwnProperty(C)&&(y.type!==void 0?this.visit(y):Array.isArray(y)&&y.forEach(function(B){this.visit(B)},this))}},h.prototype.visit=function(p){switch(p.type){case"Pattern":this.visitPattern(p);break;case"Flags":this.visitFlags(p);break;case"Disjunction":this.visitDisjunction(p);break;case"Alternative":this.visitAlternative(p);break;case"StartAnchor":this.visitStartAnchor(p);break;case"EndAnchor":this.visitEndAnchor(p);break;case"WordBoundary":this.visitWordBoundary(p);break;case"NonWordBoundary":this.visitNonWordBoundary(p);break;case"Lookahead":this.visitLookahead(p);break;case"NegativeLookahead":this.visitNegativeLookahead(p);break;case"Character":this.visitCharacter(p);break;case"Set":this.visitSet(p);break;case"Group":this.visitGroup(p);break;case"GroupBackReference":this.visitGroupBackReference(p);break;case"Quantifier":this.visitQuantifier(p);break}this.visitChildren(p)},h.prototype.visitPattern=function(p){},h.prototype.visitFlags=function(p){},h.prototype.visitDisjunction=function(p){},h.prototype.visitAlternative=function(p){},h.prototype.visitStartAnchor=function(p){},h.prototype.visitEndAnchor=function(p){},h.prototype.visitWordBoundary=function(p){},h.prototype.visitNonWordBoundary=function(p){},h.prototype.visitLookahead=function(p){},h.prototype.visitNegativeLookahead=function(p){},h.prototype.visitCharacter=function(p){},h.prototype.visitSet=function(p){},h.prototype.visitGroup=function(p){},h.prototype.visitGroupBackReference=function(p){},h.prototype.visitQuantifier=function(p){},{RegExpParser:r,BaseRegExpVisitor:h,VERSION:"0.5.0"}})});var ty=w(Xg=>{"use strict";Object.defineProperty(Xg,"__esModule",{value:!0});Xg.clearRegExpParserCache=Xg.getRegExpAst=void 0;var IEe=$I(),ey={},yEe=new IEe.RegExpParser;function wEe(r){var e=r.toString();if(ey.hasOwnProperty(e))return ey[e];var t=yEe.pattern(e);return ey[e]=t,t}Xg.getRegExpAst=wEe;function BEe(){ey={}}Xg.clearRegExpParserCache=BEe});var qY=w(Cn=>{"use strict";var bEe=Cn&&Cn.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Cn,"__esModule",{value:!0});Cn.canMatchCharCode=Cn.firstCharOptimizedIndices=Cn.getOptimizedStartCodesIndices=Cn.failedOptimizationPrefixMsg=void 0;var GY=$I(),gs=Gt(),YY=ty(),xa=Rv(),jY="Complement Sets are not supported for first char optimization";Cn.failedOptimizationPrefixMsg=`Unable to use "first char" lexer optimizations: -`;function QEe(r,e){e===void 0&&(e=!1);try{var t=(0,YY.getRegExpAst)(r),i=iy(t.value,{},t.flags.ignoreCase);return i}catch(s){if(s.message===jY)e&&(0,gs.PRINT_WARNING)(""+Cn.failedOptimizationPrefixMsg+(" Unable to optimize: < "+r.toString()+` > -`)+` Complement Sets cannot be automatically optimized. - This will disable the lexer's first char optimizations. - See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#COMPLEMENT for details.`);else{var n="";e&&(n=` - This will disable the lexer's first char optimizations. - See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#REGEXP_PARSING for details.`),(0,gs.PRINT_ERROR)(Cn.failedOptimizationPrefixMsg+` -`+(" Failed parsing: < "+r.toString()+` > -`)+(" Using the regexp-to-ast library version: "+GY.VERSION+` -`)+" Please open an issue at: https://github.com/bd82/regexp-to-ast/issues"+n)}}return[]}Cn.getOptimizedStartCodesIndices=QEe;function iy(r,e,t){switch(r.type){case"Disjunction":for(var i=0;i=xa.minOptimizationVal)for(var f=u.from>=xa.minOptimizationVal?u.from:xa.minOptimizationVal,h=u.to,p=(0,xa.charCodeToOptimizedIndex)(f),C=(0,xa.charCodeToOptimizedIndex)(h),y=p;y<=C;y++)e[y]=y}}});break;case"Group":iy(o.value,e,t);break;default:throw Error("Non Exhaustive Match")}var a=o.quantifier!==void 0&&o.quantifier.atLeast===0;if(o.type==="Group"&&kv(o)===!1||o.type!=="Group"&&a===!1)break}break;default:throw Error("non exhaustive match!")}return(0,gs.values)(e)}Cn.firstCharOptimizedIndices=iy;function ry(r,e,t){var i=(0,xa.charCodeToOptimizedIndex)(r);e[i]=i,t===!0&&SEe(r,e)}function SEe(r,e){var t=String.fromCharCode(r),i=t.toUpperCase();if(i!==t){var n=(0,xa.charCodeToOptimizedIndex)(i.charCodeAt(0));e[n]=n}else{var s=t.toLowerCase();if(s!==t){var n=(0,xa.charCodeToOptimizedIndex)(s.charCodeAt(0));e[n]=n}}}function HY(r,e){return(0,gs.find)(r.value,function(t){if(typeof t=="number")return(0,gs.contains)(e,t);var i=t;return(0,gs.find)(e,function(n){return i.from<=n&&n<=i.to})!==void 0})}function kv(r){return r.quantifier&&r.quantifier.atLeast===0?!0:r.value?(0,gs.isArray)(r.value)?(0,gs.every)(r.value,kv):kv(r.value):!1}var vEe=function(r){bEe(e,r);function e(t){var i=r.call(this)||this;return i.targetCharCodes=t,i.found=!1,i}return e.prototype.visitChildren=function(t){if(this.found!==!0){switch(t.type){case"Lookahead":this.visitLookahead(t);return;case"NegativeLookahead":this.visitNegativeLookahead(t);return}r.prototype.visitChildren.call(this,t)}},e.prototype.visitCharacter=function(t){(0,gs.contains)(this.targetCharCodes,t.value)&&(this.found=!0)},e.prototype.visitSet=function(t){t.complement?HY(t,this.targetCharCodes)===void 0&&(this.found=!0):HY(t,this.targetCharCodes)!==void 0&&(this.found=!0)},e}(GY.BaseRegExpVisitor);function xEe(r,e){if(e instanceof RegExp){var t=(0,YY.getRegExpAst)(e),i=new vEe(r);return i.visit(t),i.found}else return(0,gs.find)(e,function(n){return(0,gs.contains)(r,n.charCodeAt(0))})!==void 0}Cn.canMatchCharCode=xEe});var Rv=w(Ve=>{"use strict";var JY=Ve&&Ve.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Ve,"__esModule",{value:!0});Ve.charCodeToOptimizedIndex=Ve.minOptimizationVal=Ve.buildLineBreakIssueMessage=Ve.LineTerminatorOptimizedTester=Ve.isShortPattern=Ve.isCustomPattern=Ve.cloneEmptyGroups=Ve.performWarningRuntimeChecks=Ve.performRuntimeChecks=Ve.addStickyFlag=Ve.addStartOfInput=Ve.findUnreachablePatterns=Ve.findModesThatDoNotExist=Ve.findInvalidGroupType=Ve.findDuplicatePatterns=Ve.findUnsupportedFlags=Ve.findStartOfInputAnchor=Ve.findEmptyMatchRegExps=Ve.findEndOfInputAnchor=Ve.findInvalidPatterns=Ve.findMissingPatterns=Ve.validatePatterns=Ve.analyzeTokenTypes=Ve.enableSticky=Ve.disableSticky=Ve.SUPPORT_STICKY=Ve.MODES=Ve.DEFAULT_MODE=void 0;var WY=$I(),ir=Bd(),xe=Gt(),Zg=qY(),zY=ty(),ko="PATTERN";Ve.DEFAULT_MODE="defaultMode";Ve.MODES="modes";Ve.SUPPORT_STICKY=typeof new RegExp("(?:)").sticky=="boolean";function PEe(){Ve.SUPPORT_STICKY=!1}Ve.disableSticky=PEe;function DEe(){Ve.SUPPORT_STICKY=!0}Ve.enableSticky=DEe;function kEe(r,e){e=(0,xe.defaults)(e,{useSticky:Ve.SUPPORT_STICKY,debug:!1,safeMode:!1,positionTracking:"full",lineTerminatorCharacters:["\r",` -`],tracer:function(v,D){return D()}});var t=e.tracer;t("initCharCodeToOptimizedIndexMap",function(){HEe()});var i;t("Reject Lexer.NA",function(){i=(0,xe.reject)(r,function(v){return v[ko]===ir.Lexer.NA})});var n=!1,s;t("Transform Patterns",function(){n=!1,s=(0,xe.map)(i,function(v){var D=v[ko];if((0,xe.isRegExp)(D)){var T=D.source;return T.length===1&&T!=="^"&&T!=="$"&&T!=="."&&!D.ignoreCase?T:T.length===2&&T[0]==="\\"&&!(0,xe.contains)(["d","D","s","S","t","r","n","t","0","c","b","B","f","v","w","W"],T[1])?T[1]:e.useSticky?Tv(D):Nv(D)}else{if((0,xe.isFunction)(D))return n=!0,{exec:D};if((0,xe.has)(D,"exec"))return n=!0,D;if(typeof D=="string"){if(D.length===1)return D;var H=D.replace(/[\\^$.*+?()[\]{}|]/g,"\\$&"),j=new RegExp(H);return e.useSticky?Tv(j):Nv(j)}else throw Error("non exhaustive match")}})});var o,a,l,c,u;t("misc mapping",function(){o=(0,xe.map)(i,function(v){return v.tokenTypeIdx}),a=(0,xe.map)(i,function(v){var D=v.GROUP;if(D!==ir.Lexer.SKIPPED){if((0,xe.isString)(D))return D;if((0,xe.isUndefined)(D))return!1;throw Error("non exhaustive match")}}),l=(0,xe.map)(i,function(v){var D=v.LONGER_ALT;if(D){var T=(0,xe.isArray)(D)?(0,xe.map)(D,function(H){return(0,xe.indexOf)(i,H)}):[(0,xe.indexOf)(i,D)];return T}}),c=(0,xe.map)(i,function(v){return v.PUSH_MODE}),u=(0,xe.map)(i,function(v){return(0,xe.has)(v,"POP_MODE")})});var g;t("Line Terminator Handling",function(){var v=Aj(e.lineTerminatorCharacters);g=(0,xe.map)(i,function(D){return!1}),e.positionTracking!=="onlyOffset"&&(g=(0,xe.map)(i,function(D){if((0,xe.has)(D,"LINE_BREAKS"))return D.LINE_BREAKS;if(oj(D,v)===!1)return(0,Zg.canMatchCharCode)(v,D.PATTERN)}))});var f,h,p,C;t("Misc Mapping #2",function(){f=(0,xe.map)(i,Ov),h=(0,xe.map)(s,sj),p=(0,xe.reduce)(i,function(v,D){var T=D.GROUP;return(0,xe.isString)(T)&&T!==ir.Lexer.SKIPPED&&(v[T]=[]),v},{}),C=(0,xe.map)(s,function(v,D){return{pattern:s[D],longerAlt:l[D],canLineTerminator:g[D],isCustom:f[D],short:h[D],group:a[D],push:c[D],pop:u[D],tokenTypeIdx:o[D],tokenType:i[D]}})});var y=!0,B=[];return e.safeMode||t("First Char Optimization",function(){B=(0,xe.reduce)(i,function(v,D,T){if(typeof D.PATTERN=="string"){var H=D.PATTERN.charCodeAt(0),j=Lv(H);Fv(v,j,C[T])}else if((0,xe.isArray)(D.START_CHARS_HINT)){var $;(0,xe.forEach)(D.START_CHARS_HINT,function(W){var _=typeof W=="string"?W.charCodeAt(0):W,A=Lv(_);$!==A&&($=A,Fv(v,A,C[T]))})}else if((0,xe.isRegExp)(D.PATTERN))if(D.PATTERN.unicode)y=!1,e.ensureOptimizations&&(0,xe.PRINT_ERROR)(""+Zg.failedOptimizationPrefixMsg+(" Unable to analyze < "+D.PATTERN.toString()+` > pattern. -`)+` The regexp unicode flag is not currently supported by the regexp-to-ast library. - This will disable the lexer's first char optimizations. - For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNICODE_OPTIMIZE`);else{var V=(0,Zg.getOptimizedStartCodesIndices)(D.PATTERN,e.ensureOptimizations);(0,xe.isEmpty)(V)&&(y=!1),(0,xe.forEach)(V,function(W){Fv(v,W,C[T])})}else e.ensureOptimizations&&(0,xe.PRINT_ERROR)(""+Zg.failedOptimizationPrefixMsg+(" TokenType: <"+D.name+`> is using a custom token pattern without providing parameter. -`)+` This will disable the lexer's first char optimizations. - For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_OPTIMIZE`),y=!1;return v},[])}),t("ArrayPacking",function(){B=(0,xe.packArray)(B)}),{emptyGroups:p,patternIdxToConfig:C,charCodeToPatternIdxToConfig:B,hasCustom:n,canBeOptimized:y}}Ve.analyzeTokenTypes=kEe;function REe(r,e){var t=[],i=VY(r);t=t.concat(i.errors);var n=XY(i.valid),s=n.valid;return t=t.concat(n.errors),t=t.concat(FEe(s)),t=t.concat(rj(s)),t=t.concat(ij(s,e)),t=t.concat(nj(s)),t}Ve.validatePatterns=REe;function FEe(r){var e=[],t=(0,xe.filter)(r,function(i){return(0,xe.isRegExp)(i[ko])});return e=e.concat(ZY(t)),e=e.concat($Y(t)),e=e.concat(ej(t)),e=e.concat(tj(t)),e=e.concat(_Y(t)),e}function VY(r){var e=(0,xe.filter)(r,function(n){return!(0,xe.has)(n,ko)}),t=(0,xe.map)(e,function(n){return{message:"Token Type: ->"+n.name+"<- missing static 'PATTERN' property",type:ir.LexerDefinitionErrorType.MISSING_PATTERN,tokenTypes:[n]}}),i=(0,xe.difference)(r,e);return{errors:t,valid:i}}Ve.findMissingPatterns=VY;function XY(r){var e=(0,xe.filter)(r,function(n){var s=n[ko];return!(0,xe.isRegExp)(s)&&!(0,xe.isFunction)(s)&&!(0,xe.has)(s,"exec")&&!(0,xe.isString)(s)}),t=(0,xe.map)(e,function(n){return{message:"Token Type: ->"+n.name+"<- static 'PATTERN' can only be a RegExp, a Function matching the {CustomPatternMatcherFunc} type or an Object matching the {ICustomPattern} interface.",type:ir.LexerDefinitionErrorType.INVALID_PATTERN,tokenTypes:[n]}}),i=(0,xe.difference)(r,e);return{errors:t,valid:i}}Ve.findInvalidPatterns=XY;var NEe=/[^\\][\$]/;function ZY(r){var e=function(n){JY(s,n);function s(){var o=n!==null&&n.apply(this,arguments)||this;return o.found=!1,o}return s.prototype.visitEndAnchor=function(o){this.found=!0},s}(WY.BaseRegExpVisitor),t=(0,xe.filter)(r,function(n){var s=n[ko];try{var o=(0,zY.getRegExpAst)(s),a=new e;return a.visit(o),a.found}catch{return NEe.test(s.source)}}),i=(0,xe.map)(t,function(n){return{message:`Unexpected RegExp Anchor Error: - Token Type: ->`+n.name+`<- static 'PATTERN' cannot contain end of input anchor '$' - See chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS for details.`,type:ir.LexerDefinitionErrorType.EOI_ANCHOR_FOUND,tokenTypes:[n]}});return i}Ve.findEndOfInputAnchor=ZY;function _Y(r){var e=(0,xe.filter)(r,function(i){var n=i[ko];return n.test("")}),t=(0,xe.map)(e,function(i){return{message:"Token Type: ->"+i.name+"<- static 'PATTERN' must not match an empty string",type:ir.LexerDefinitionErrorType.EMPTY_MATCH_PATTERN,tokenTypes:[i]}});return t}Ve.findEmptyMatchRegExps=_Y;var TEe=/[^\\[][\^]|^\^/;function $Y(r){var e=function(n){JY(s,n);function s(){var o=n!==null&&n.apply(this,arguments)||this;return o.found=!1,o}return s.prototype.visitStartAnchor=function(o){this.found=!0},s}(WY.BaseRegExpVisitor),t=(0,xe.filter)(r,function(n){var s=n[ko];try{var o=(0,zY.getRegExpAst)(s),a=new e;return a.visit(o),a.found}catch{return TEe.test(s.source)}}),i=(0,xe.map)(t,function(n){return{message:`Unexpected RegExp Anchor Error: - Token Type: ->`+n.name+`<- static 'PATTERN' cannot contain start of input anchor '^' - See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS for details.`,type:ir.LexerDefinitionErrorType.SOI_ANCHOR_FOUND,tokenTypes:[n]}});return i}Ve.findStartOfInputAnchor=$Y;function ej(r){var e=(0,xe.filter)(r,function(i){var n=i[ko];return n instanceof RegExp&&(n.multiline||n.global)}),t=(0,xe.map)(e,function(i){return{message:"Token Type: ->"+i.name+"<- static 'PATTERN' may NOT contain global('g') or multiline('m')",type:ir.LexerDefinitionErrorType.UNSUPPORTED_FLAGS_FOUND,tokenTypes:[i]}});return t}Ve.findUnsupportedFlags=ej;function tj(r){var e=[],t=(0,xe.map)(r,function(s){return(0,xe.reduce)(r,function(o,a){return s.PATTERN.source===a.PATTERN.source&&!(0,xe.contains)(e,a)&&a.PATTERN!==ir.Lexer.NA&&(e.push(a),o.push(a)),o},[])});t=(0,xe.compact)(t);var i=(0,xe.filter)(t,function(s){return s.length>1}),n=(0,xe.map)(i,function(s){var o=(0,xe.map)(s,function(l){return l.name}),a=(0,xe.first)(s).PATTERN;return{message:"The same RegExp pattern ->"+a+"<-"+("has been used in all of the following Token Types: "+o.join(", ")+" <-"),type:ir.LexerDefinitionErrorType.DUPLICATE_PATTERNS_FOUND,tokenTypes:s}});return n}Ve.findDuplicatePatterns=tj;function rj(r){var e=(0,xe.filter)(r,function(i){if(!(0,xe.has)(i,"GROUP"))return!1;var n=i.GROUP;return n!==ir.Lexer.SKIPPED&&n!==ir.Lexer.NA&&!(0,xe.isString)(n)}),t=(0,xe.map)(e,function(i){return{message:"Token Type: ->"+i.name+"<- static 'GROUP' can only be Lexer.SKIPPED/Lexer.NA/A String",type:ir.LexerDefinitionErrorType.INVALID_GROUP_TYPE_FOUND,tokenTypes:[i]}});return t}Ve.findInvalidGroupType=rj;function ij(r,e){var t=(0,xe.filter)(r,function(n){return n.PUSH_MODE!==void 0&&!(0,xe.contains)(e,n.PUSH_MODE)}),i=(0,xe.map)(t,function(n){var s="Token Type: ->"+n.name+"<- static 'PUSH_MODE' value cannot refer to a Lexer Mode ->"+n.PUSH_MODE+"<-which does not exist";return{message:s,type:ir.LexerDefinitionErrorType.PUSH_MODE_DOES_NOT_EXIST,tokenTypes:[n]}});return i}Ve.findModesThatDoNotExist=ij;function nj(r){var e=[],t=(0,xe.reduce)(r,function(i,n,s){var o=n.PATTERN;return o===ir.Lexer.NA||((0,xe.isString)(o)?i.push({str:o,idx:s,tokenType:n}):(0,xe.isRegExp)(o)&&OEe(o)&&i.push({str:o.source,idx:s,tokenType:n})),i},[]);return(0,xe.forEach)(r,function(i,n){(0,xe.forEach)(t,function(s){var o=s.str,a=s.idx,l=s.tokenType;if(n"+i.name+"<-")+`in the lexer's definition. -See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNREACHABLE`;e.push({message:c,type:ir.LexerDefinitionErrorType.UNREACHABLE_PATTERN,tokenTypes:[i,l]})}})}),e}Ve.findUnreachablePatterns=nj;function LEe(r,e){if((0,xe.isRegExp)(e)){var t=e.exec(r);return t!==null&&t.index===0}else{if((0,xe.isFunction)(e))return e(r,0,[],{});if((0,xe.has)(e,"exec"))return e.exec(r,0,[],{});if(typeof e=="string")return e===r;throw Error("non exhaustive match")}}function OEe(r){var e=[".","\\","[","]","|","^","$","(",")","?","*","+","{"];return(0,xe.find)(e,function(t){return r.source.indexOf(t)!==-1})===void 0}function Nv(r){var e=r.ignoreCase?"i":"";return new RegExp("^(?:"+r.source+")",e)}Ve.addStartOfInput=Nv;function Tv(r){var e=r.ignoreCase?"iy":"y";return new RegExp(""+r.source,e)}Ve.addStickyFlag=Tv;function MEe(r,e,t){var i=[];return(0,xe.has)(r,Ve.DEFAULT_MODE)||i.push({message:"A MultiMode Lexer cannot be initialized without a <"+Ve.DEFAULT_MODE+`> property in its definition -`,type:ir.LexerDefinitionErrorType.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE}),(0,xe.has)(r,Ve.MODES)||i.push({message:"A MultiMode Lexer cannot be initialized without a <"+Ve.MODES+`> property in its definition -`,type:ir.LexerDefinitionErrorType.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY}),(0,xe.has)(r,Ve.MODES)&&(0,xe.has)(r,Ve.DEFAULT_MODE)&&!(0,xe.has)(r.modes,r.defaultMode)&&i.push({message:"A MultiMode Lexer cannot be initialized with a "+Ve.DEFAULT_MODE+": <"+r.defaultMode+`>which does not exist -`,type:ir.LexerDefinitionErrorType.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST}),(0,xe.has)(r,Ve.MODES)&&(0,xe.forEach)(r.modes,function(n,s){(0,xe.forEach)(n,function(o,a){(0,xe.isUndefined)(o)&&i.push({message:"A Lexer cannot be initialized using an undefined Token Type. Mode:"+("<"+s+"> at index: <"+a+`> -`),type:ir.LexerDefinitionErrorType.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED})})}),i}Ve.performRuntimeChecks=MEe;function KEe(r,e,t){var i=[],n=!1,s=(0,xe.compact)((0,xe.flatten)((0,xe.mapValues)(r.modes,function(l){return l}))),o=(0,xe.reject)(s,function(l){return l[ko]===ir.Lexer.NA}),a=Aj(t);return e&&(0,xe.forEach)(o,function(l){var c=oj(l,a);if(c!==!1){var u=aj(l,c),g={message:u,type:c.issue,tokenType:l};i.push(g)}else(0,xe.has)(l,"LINE_BREAKS")?l.LINE_BREAKS===!0&&(n=!0):(0,Zg.canMatchCharCode)(a,l.PATTERN)&&(n=!0)}),e&&!n&&i.push({message:`Warning: No LINE_BREAKS Found. - This Lexer has been defined to track line and column information, - But none of the Token Types can be identified as matching a line terminator. - See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#LINE_BREAKS - for details.`,type:ir.LexerDefinitionErrorType.NO_LINE_BREAKS_FLAGS}),i}Ve.performWarningRuntimeChecks=KEe;function UEe(r){var e={},t=(0,xe.keys)(r);return(0,xe.forEach)(t,function(i){var n=r[i];if((0,xe.isArray)(n))e[i]=[];else throw Error("non exhaustive match")}),e}Ve.cloneEmptyGroups=UEe;function Ov(r){var e=r.PATTERN;if((0,xe.isRegExp)(e))return!1;if((0,xe.isFunction)(e))return!0;if((0,xe.has)(e,"exec"))return!0;if((0,xe.isString)(e))return!1;throw Error("non exhaustive match")}Ve.isCustomPattern=Ov;function sj(r){return(0,xe.isString)(r)&&r.length===1?r.charCodeAt(0):!1}Ve.isShortPattern=sj;Ve.LineTerminatorOptimizedTester={test:function(r){for(var e=r.length,t=this.lastIndex;t Token Type -`)+(" Root cause: "+e.errMsg+`. -`)+" For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#IDENTIFY_TERMINATOR";if(e.issue===ir.LexerDefinitionErrorType.CUSTOM_LINE_BREAK)return`Warning: A Custom Token Pattern should specify the option. -`+(" The problem is in the <"+r.name+`> Token Type -`)+" For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_LINE_BREAK";throw Error("non exhaustive match")}Ve.buildLineBreakIssueMessage=aj;function Aj(r){var e=(0,xe.map)(r,function(t){return(0,xe.isString)(t)&&t.length>0?t.charCodeAt(0):t});return e}function Fv(r,e,t){r[e]===void 0?r[e]=[t]:r[e].push(t)}Ve.minOptimizationVal=256;var ny=[];function Lv(r){return r255?255+~~(r/255):r}}});var _g=w(Nt=>{"use strict";Object.defineProperty(Nt,"__esModule",{value:!0});Nt.isTokenType=Nt.hasExtendingTokensTypesMapProperty=Nt.hasExtendingTokensTypesProperty=Nt.hasCategoriesProperty=Nt.hasShortKeyProperty=Nt.singleAssignCategoriesToksMap=Nt.assignCategoriesMapProp=Nt.assignCategoriesTokensProp=Nt.assignTokenDefaultProps=Nt.expandCategories=Nt.augmentTokenTypes=Nt.tokenIdxToClass=Nt.tokenShortNameIdx=Nt.tokenStructuredMatcherNoCategories=Nt.tokenStructuredMatcher=void 0;var Zr=Gt();function GEe(r,e){var t=r.tokenTypeIdx;return t===e.tokenTypeIdx?!0:e.isParent===!0&&e.categoryMatchesMap[t]===!0}Nt.tokenStructuredMatcher=GEe;function YEe(r,e){return r.tokenTypeIdx===e.tokenTypeIdx}Nt.tokenStructuredMatcherNoCategories=YEe;Nt.tokenShortNameIdx=1;Nt.tokenIdxToClass={};function jEe(r){var e=lj(r);cj(e),gj(e),uj(e),(0,Zr.forEach)(e,function(t){t.isParent=t.categoryMatches.length>0})}Nt.augmentTokenTypes=jEe;function lj(r){for(var e=(0,Zr.cloneArr)(r),t=r,i=!0;i;){t=(0,Zr.compact)((0,Zr.flatten)((0,Zr.map)(t,function(s){return s.CATEGORIES})));var n=(0,Zr.difference)(t,e);e=e.concat(n),(0,Zr.isEmpty)(n)?i=!1:t=n}return e}Nt.expandCategories=lj;function cj(r){(0,Zr.forEach)(r,function(e){fj(e)||(Nt.tokenIdxToClass[Nt.tokenShortNameIdx]=e,e.tokenTypeIdx=Nt.tokenShortNameIdx++),Mv(e)&&!(0,Zr.isArray)(e.CATEGORIES)&&(e.CATEGORIES=[e.CATEGORIES]),Mv(e)||(e.CATEGORIES=[]),hj(e)||(e.categoryMatches=[]),pj(e)||(e.categoryMatchesMap={})})}Nt.assignTokenDefaultProps=cj;function uj(r){(0,Zr.forEach)(r,function(e){e.categoryMatches=[],(0,Zr.forEach)(e.categoryMatchesMap,function(t,i){e.categoryMatches.push(Nt.tokenIdxToClass[i].tokenTypeIdx)})})}Nt.assignCategoriesTokensProp=uj;function gj(r){(0,Zr.forEach)(r,function(e){Kv([],e)})}Nt.assignCategoriesMapProp=gj;function Kv(r,e){(0,Zr.forEach)(r,function(t){e.categoryMatchesMap[t.tokenTypeIdx]=!0}),(0,Zr.forEach)(e.CATEGORIES,function(t){var i=r.concat(e);(0,Zr.contains)(i,t)||Kv(i,t)})}Nt.singleAssignCategoriesToksMap=Kv;function fj(r){return(0,Zr.has)(r,"tokenTypeIdx")}Nt.hasShortKeyProperty=fj;function Mv(r){return(0,Zr.has)(r,"CATEGORIES")}Nt.hasCategoriesProperty=Mv;function hj(r){return(0,Zr.has)(r,"categoryMatches")}Nt.hasExtendingTokensTypesProperty=hj;function pj(r){return(0,Zr.has)(r,"categoryMatchesMap")}Nt.hasExtendingTokensTypesMapProperty=pj;function qEe(r){return(0,Zr.has)(r,"tokenTypeIdx")}Nt.isTokenType=qEe});var Uv=w(sy=>{"use strict";Object.defineProperty(sy,"__esModule",{value:!0});sy.defaultLexerErrorProvider=void 0;sy.defaultLexerErrorProvider={buildUnableToPopLexerModeMessage:function(r){return"Unable to pop Lexer Mode after encountering Token ->"+r.image+"<- The Mode Stack is empty"},buildUnexpectedCharactersMessage:function(r,e,t,i,n){return"unexpected character: ->"+r.charAt(e)+"<- at offset: "+e+","+(" skipped "+t+" characters.")}}});var Bd=w(Cc=>{"use strict";Object.defineProperty(Cc,"__esModule",{value:!0});Cc.Lexer=Cc.LexerDefinitionErrorType=void 0;var _s=Rv(),nr=Gt(),JEe=_g(),WEe=Uv(),zEe=ty(),VEe;(function(r){r[r.MISSING_PATTERN=0]="MISSING_PATTERN",r[r.INVALID_PATTERN=1]="INVALID_PATTERN",r[r.EOI_ANCHOR_FOUND=2]="EOI_ANCHOR_FOUND",r[r.UNSUPPORTED_FLAGS_FOUND=3]="UNSUPPORTED_FLAGS_FOUND",r[r.DUPLICATE_PATTERNS_FOUND=4]="DUPLICATE_PATTERNS_FOUND",r[r.INVALID_GROUP_TYPE_FOUND=5]="INVALID_GROUP_TYPE_FOUND",r[r.PUSH_MODE_DOES_NOT_EXIST=6]="PUSH_MODE_DOES_NOT_EXIST",r[r.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE=7]="MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE",r[r.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY=8]="MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY",r[r.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST=9]="MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST",r[r.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED=10]="LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED",r[r.SOI_ANCHOR_FOUND=11]="SOI_ANCHOR_FOUND",r[r.EMPTY_MATCH_PATTERN=12]="EMPTY_MATCH_PATTERN",r[r.NO_LINE_BREAKS_FLAGS=13]="NO_LINE_BREAKS_FLAGS",r[r.UNREACHABLE_PATTERN=14]="UNREACHABLE_PATTERN",r[r.IDENTIFY_TERMINATOR=15]="IDENTIFY_TERMINATOR",r[r.CUSTOM_LINE_BREAK=16]="CUSTOM_LINE_BREAK"})(VEe=Cc.LexerDefinitionErrorType||(Cc.LexerDefinitionErrorType={}));var bd={deferDefinitionErrorsHandling:!1,positionTracking:"full",lineTerminatorsPattern:/\n|\r\n?/g,lineTerminatorCharacters:[` -`,"\r"],ensureOptimizations:!1,safeMode:!1,errorMessageProvider:WEe.defaultLexerErrorProvider,traceInitPerf:!1,skipValidations:!1};Object.freeze(bd);var XEe=function(){function r(e,t){var i=this;if(t===void 0&&(t=bd),this.lexerDefinition=e,this.lexerDefinitionErrors=[],this.lexerDefinitionWarning=[],this.patternIdxToConfig={},this.charCodeToPatternIdxToConfig={},this.modes=[],this.emptyGroups={},this.config=void 0,this.trackStartLines=!0,this.trackEndLines=!0,this.hasCustom=!1,this.canModeBeOptimized={},typeof t=="boolean")throw Error(`The second argument to the Lexer constructor is now an ILexerConfig Object. -a boolean 2nd argument is no longer supported`);this.config=(0,nr.merge)(bd,t);var n=this.config.traceInitPerf;n===!0?(this.traceInitMaxIdent=1/0,this.traceInitPerf=!0):typeof n=="number"&&(this.traceInitMaxIdent=n,this.traceInitPerf=!0),this.traceInitIndent=-1,this.TRACE_INIT("Lexer Constructor",function(){var s,o=!0;i.TRACE_INIT("Lexer Config handling",function(){if(i.config.lineTerminatorsPattern===bd.lineTerminatorsPattern)i.config.lineTerminatorsPattern=_s.LineTerminatorOptimizedTester;else if(i.config.lineTerminatorCharacters===bd.lineTerminatorCharacters)throw Error(`Error: Missing property on the Lexer config. - For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#MISSING_LINE_TERM_CHARS`);if(t.safeMode&&t.ensureOptimizations)throw Error('"safeMode" and "ensureOptimizations" flags are mutually exclusive.');i.trackStartLines=/full|onlyStart/i.test(i.config.positionTracking),i.trackEndLines=/full/i.test(i.config.positionTracking),(0,nr.isArray)(e)?(s={modes:{}},s.modes[_s.DEFAULT_MODE]=(0,nr.cloneArr)(e),s[_s.DEFAULT_MODE]=_s.DEFAULT_MODE):(o=!1,s=(0,nr.cloneObj)(e))}),i.config.skipValidations===!1&&(i.TRACE_INIT("performRuntimeChecks",function(){i.lexerDefinitionErrors=i.lexerDefinitionErrors.concat((0,_s.performRuntimeChecks)(s,i.trackStartLines,i.config.lineTerminatorCharacters))}),i.TRACE_INIT("performWarningRuntimeChecks",function(){i.lexerDefinitionWarning=i.lexerDefinitionWarning.concat((0,_s.performWarningRuntimeChecks)(s,i.trackStartLines,i.config.lineTerminatorCharacters))})),s.modes=s.modes?s.modes:{},(0,nr.forEach)(s.modes,function(u,g){s.modes[g]=(0,nr.reject)(u,function(f){return(0,nr.isUndefined)(f)})});var a=(0,nr.keys)(s.modes);if((0,nr.forEach)(s.modes,function(u,g){i.TRACE_INIT("Mode: <"+g+"> processing",function(){if(i.modes.push(g),i.config.skipValidations===!1&&i.TRACE_INIT("validatePatterns",function(){i.lexerDefinitionErrors=i.lexerDefinitionErrors.concat((0,_s.validatePatterns)(u,a))}),(0,nr.isEmpty)(i.lexerDefinitionErrors)){(0,JEe.augmentTokenTypes)(u);var f;i.TRACE_INIT("analyzeTokenTypes",function(){f=(0,_s.analyzeTokenTypes)(u,{lineTerminatorCharacters:i.config.lineTerminatorCharacters,positionTracking:t.positionTracking,ensureOptimizations:t.ensureOptimizations,safeMode:t.safeMode,tracer:i.TRACE_INIT.bind(i)})}),i.patternIdxToConfig[g]=f.patternIdxToConfig,i.charCodeToPatternIdxToConfig[g]=f.charCodeToPatternIdxToConfig,i.emptyGroups=(0,nr.merge)(i.emptyGroups,f.emptyGroups),i.hasCustom=f.hasCustom||i.hasCustom,i.canModeBeOptimized[g]=f.canBeOptimized}})}),i.defaultMode=s.defaultMode,!(0,nr.isEmpty)(i.lexerDefinitionErrors)&&!i.config.deferDefinitionErrorsHandling){var l=(0,nr.map)(i.lexerDefinitionErrors,function(u){return u.message}),c=l.join(`----------------------- -`);throw new Error(`Errors detected in definition of Lexer: -`+c)}(0,nr.forEach)(i.lexerDefinitionWarning,function(u){(0,nr.PRINT_WARNING)(u.message)}),i.TRACE_INIT("Choosing sub-methods implementations",function(){if(_s.SUPPORT_STICKY?(i.chopInput=nr.IDENTITY,i.match=i.matchWithTest):(i.updateLastIndex=nr.NOOP,i.match=i.matchWithExec),o&&(i.handleModes=nr.NOOP),i.trackStartLines===!1&&(i.computeNewColumn=nr.IDENTITY),i.trackEndLines===!1&&(i.updateTokenEndLineColumnLocation=nr.NOOP),/full/i.test(i.config.positionTracking))i.createTokenInstance=i.createFullToken;else if(/onlyStart/i.test(i.config.positionTracking))i.createTokenInstance=i.createStartOnlyToken;else if(/onlyOffset/i.test(i.config.positionTracking))i.createTokenInstance=i.createOffsetOnlyToken;else throw Error('Invalid config option: "'+i.config.positionTracking+'"');i.hasCustom?(i.addToken=i.addTokenUsingPush,i.handlePayload=i.handlePayloadWithCustom):(i.addToken=i.addTokenUsingMemberAccess,i.handlePayload=i.handlePayloadNoCustom)}),i.TRACE_INIT("Failed Optimization Warnings",function(){var u=(0,nr.reduce)(i.canModeBeOptimized,function(g,f,h){return f===!1&&g.push(h),g},[]);if(t.ensureOptimizations&&!(0,nr.isEmpty)(u))throw Error("Lexer Modes: < "+u.join(", ")+` > cannot be optimized. - Disable the "ensureOptimizations" lexer config flag to silently ignore this and run the lexer in an un-optimized mode. - Or inspect the console log for details on how to resolve these issues.`)}),i.TRACE_INIT("clearRegExpParserCache",function(){(0,zEe.clearRegExpParserCache)()}),i.TRACE_INIT("toFastProperties",function(){(0,nr.toFastProperties)(i)})})}return r.prototype.tokenize=function(e,t){if(t===void 0&&(t=this.defaultMode),!(0,nr.isEmpty)(this.lexerDefinitionErrors)){var i=(0,nr.map)(this.lexerDefinitionErrors,function(o){return o.message}),n=i.join(`----------------------- -`);throw new Error(`Unable to Tokenize because Errors detected in definition of Lexer: -`+n)}var s=this.tokenizeInternal(e,t);return s},r.prototype.tokenizeInternal=function(e,t){var i=this,n,s,o,a,l,c,u,g,f,h,p,C,y,B,v,D,T=e,H=T.length,j=0,$=0,V=this.hasCustom?0:Math.floor(e.length/10),W=new Array(V),_=[],A=this.trackStartLines?1:void 0,Ae=this.trackStartLines?1:void 0,ge=(0,_s.cloneEmptyGroups)(this.emptyGroups),re=this.trackStartLines,O=this.config.lineTerminatorsPattern,F=0,ue=[],pe=[],ke=[],Fe=[];Object.freeze(Fe);var Ne=void 0;function oe(){return ue}function le(pr){var Ii=(0,_s.charCodeToOptimizedIndex)(pr),rs=pe[Ii];return rs===void 0?Fe:rs}var Be=function(pr){if(ke.length===1&&pr.tokenType.PUSH_MODE===void 0){var Ii=i.config.errorMessageProvider.buildUnableToPopLexerModeMessage(pr);_.push({offset:pr.startOffset,line:pr.startLine!==void 0?pr.startLine:void 0,column:pr.startColumn!==void 0?pr.startColumn:void 0,length:pr.image.length,message:Ii})}else{ke.pop();var rs=(0,nr.last)(ke);ue=i.patternIdxToConfig[rs],pe=i.charCodeToPatternIdxToConfig[rs],F=ue.length;var fa=i.canModeBeOptimized[rs]&&i.config.safeMode===!1;pe&&fa?Ne=le:Ne=oe}};function fe(pr){ke.push(pr),pe=this.charCodeToPatternIdxToConfig[pr],ue=this.patternIdxToConfig[pr],F=ue.length,F=ue.length;var Ii=this.canModeBeOptimized[pr]&&this.config.safeMode===!1;pe&&Ii?Ne=le:Ne=oe}fe.call(this,t);for(var ae;jc.length){c=a,u=g,ae=_e;break}}}break}}if(c!==null){if(f=c.length,h=ae.group,h!==void 0&&(p=ae.tokenTypeIdx,C=this.createTokenInstance(c,j,p,ae.tokenType,A,Ae,f),this.handlePayload(C,u),h===!1?$=this.addToken(W,$,C):ge[h].push(C)),e=this.chopInput(e,f),j=j+f,Ae=this.computeNewColumn(Ae,f),re===!0&&ae.canLineTerminator===!0){var It=0,Or=void 0,ii=void 0;O.lastIndex=0;do Or=O.test(c),Or===!0&&(ii=O.lastIndex-1,It++);while(Or===!0);It!==0&&(A=A+It,Ae=f-ii,this.updateTokenEndLineColumnLocation(C,h,ii,It,A,Ae,f))}this.handleModes(ae,Be,fe,C)}else{for(var gi=j,hr=A,fi=Ae,ni=!1;!ni&&j <"+e+">");var n=(0,nr.timer)(t),s=n.time,o=n.value,a=s>10?console.warn:console.log;return this.traceInitIndent time: "+s+"ms"),this.traceInitIndent--,o}else return t()},r.SKIPPED="This marks a skipped Token pattern, this means each token identified by it willbe consumed and then thrown into oblivion, this can be used to for example to completely ignore whitespace.",r.NA=/NOT_APPLICABLE/,r}();Cc.Lexer=XEe});var TA=w(Qi=>{"use strict";Object.defineProperty(Qi,"__esModule",{value:!0});Qi.tokenMatcher=Qi.createTokenInstance=Qi.EOF=Qi.createToken=Qi.hasTokenLabel=Qi.tokenName=Qi.tokenLabel=void 0;var $s=Gt(),ZEe=Bd(),Hv=_g();function _Ee(r){return bj(r)?r.LABEL:r.name}Qi.tokenLabel=_Ee;function $Ee(r){return r.name}Qi.tokenName=$Ee;function bj(r){return(0,$s.isString)(r.LABEL)&&r.LABEL!==""}Qi.hasTokenLabel=bj;var eIe="parent",dj="categories",Cj="label",mj="group",Ej="push_mode",Ij="pop_mode",yj="longer_alt",wj="line_breaks",Bj="start_chars_hint";function Qj(r){return tIe(r)}Qi.createToken=Qj;function tIe(r){var e=r.pattern,t={};if(t.name=r.name,(0,$s.isUndefined)(e)||(t.PATTERN=e),(0,$s.has)(r,eIe))throw`The parent property is no longer supported. -See: https://github.com/chevrotain/chevrotain/issues/564#issuecomment-349062346 for details.`;return(0,$s.has)(r,dj)&&(t.CATEGORIES=r[dj]),(0,Hv.augmentTokenTypes)([t]),(0,$s.has)(r,Cj)&&(t.LABEL=r[Cj]),(0,$s.has)(r,mj)&&(t.GROUP=r[mj]),(0,$s.has)(r,Ij)&&(t.POP_MODE=r[Ij]),(0,$s.has)(r,Ej)&&(t.PUSH_MODE=r[Ej]),(0,$s.has)(r,yj)&&(t.LONGER_ALT=r[yj]),(0,$s.has)(r,wj)&&(t.LINE_BREAKS=r[wj]),(0,$s.has)(r,Bj)&&(t.START_CHARS_HINT=r[Bj]),t}Qi.EOF=Qj({name:"EOF",pattern:ZEe.Lexer.NA});(0,Hv.augmentTokenTypes)([Qi.EOF]);function rIe(r,e,t,i,n,s,o,a){return{image:e,startOffset:t,endOffset:i,startLine:n,endLine:s,startColumn:o,endColumn:a,tokenTypeIdx:r.tokenTypeIdx,tokenType:r}}Qi.createTokenInstance=rIe;function iIe(r,e){return(0,Hv.tokenStructuredMatcher)(r,e)}Qi.tokenMatcher=iIe});var mn=w(zt=>{"use strict";var Pa=zt&&zt.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(zt,"__esModule",{value:!0});zt.serializeProduction=zt.serializeGrammar=zt.Terminal=zt.Alternation=zt.RepetitionWithSeparator=zt.Repetition=zt.RepetitionMandatoryWithSeparator=zt.RepetitionMandatory=zt.Option=zt.Alternative=zt.Rule=zt.NonTerminal=zt.AbstractProduction=void 0;var Ar=Gt(),nIe=TA(),Ro=function(){function r(e){this._definition=e}return Object.defineProperty(r.prototype,"definition",{get:function(){return this._definition},set:function(e){this._definition=e},enumerable:!1,configurable:!0}),r.prototype.accept=function(e){e.visit(this),(0,Ar.forEach)(this.definition,function(t){t.accept(e)})},r}();zt.AbstractProduction=Ro;var Sj=function(r){Pa(e,r);function e(t){var i=r.call(this,[])||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return Object.defineProperty(e.prototype,"definition",{get:function(){return this.referencedRule!==void 0?this.referencedRule.definition:[]},set:function(t){},enumerable:!1,configurable:!0}),e.prototype.accept=function(t){t.visit(this)},e}(Ro);zt.NonTerminal=Sj;var vj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.orgText="",(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(Ro);zt.Rule=vj;var xj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.ignoreAmbiguities=!1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(Ro);zt.Alternative=xj;var Pj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(Ro);zt.Option=Pj;var Dj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(Ro);zt.RepetitionMandatory=Dj;var kj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(Ro);zt.RepetitionMandatoryWithSeparator=kj;var Rj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(Ro);zt.Repetition=Rj;var Fj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(Ro);zt.RepetitionWithSeparator=Fj;var Nj=function(r){Pa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,i.ignoreAmbiguities=!1,i.hasPredicates=!1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return Object.defineProperty(e.prototype,"definition",{get:function(){return this._definition},set:function(t){this._definition=t},enumerable:!1,configurable:!0}),e}(Ro);zt.Alternation=Nj;var oy=function(){function r(e){this.idx=1,(0,Ar.assign)(this,(0,Ar.pick)(e,function(t){return t!==void 0}))}return r.prototype.accept=function(e){e.visit(this)},r}();zt.Terminal=oy;function sIe(r){return(0,Ar.map)(r,Qd)}zt.serializeGrammar=sIe;function Qd(r){function e(s){return(0,Ar.map)(s,Qd)}if(r instanceof Sj){var t={type:"NonTerminal",name:r.nonTerminalName,idx:r.idx};return(0,Ar.isString)(r.label)&&(t.label=r.label),t}else{if(r instanceof xj)return{type:"Alternative",definition:e(r.definition)};if(r instanceof Pj)return{type:"Option",idx:r.idx,definition:e(r.definition)};if(r instanceof Dj)return{type:"RepetitionMandatory",idx:r.idx,definition:e(r.definition)};if(r instanceof kj)return{type:"RepetitionMandatoryWithSeparator",idx:r.idx,separator:Qd(new oy({terminalType:r.separator})),definition:e(r.definition)};if(r instanceof Fj)return{type:"RepetitionWithSeparator",idx:r.idx,separator:Qd(new oy({terminalType:r.separator})),definition:e(r.definition)};if(r instanceof Rj)return{type:"Repetition",idx:r.idx,definition:e(r.definition)};if(r instanceof Nj)return{type:"Alternation",idx:r.idx,definition:e(r.definition)};if(r instanceof oy){var i={type:"Terminal",name:r.terminalType.name,label:(0,nIe.tokenLabel)(r.terminalType),idx:r.idx};(0,Ar.isString)(r.label)&&(i.terminalLabel=r.label);var n=r.terminalType.PATTERN;return r.terminalType.PATTERN&&(i.pattern=(0,Ar.isRegExp)(n)?n.source:n),i}else{if(r instanceof vj)return{type:"Rule",name:r.name,orgText:r.orgText,definition:e(r.definition)};throw Error("non exhaustive match")}}}zt.serializeProduction=Qd});var Ay=w(ay=>{"use strict";Object.defineProperty(ay,"__esModule",{value:!0});ay.RestWalker=void 0;var Gv=Gt(),En=mn(),oIe=function(){function r(){}return r.prototype.walk=function(e,t){var i=this;t===void 0&&(t=[]),(0,Gv.forEach)(e.definition,function(n,s){var o=(0,Gv.drop)(e.definition,s+1);if(n instanceof En.NonTerminal)i.walkProdRef(n,o,t);else if(n instanceof En.Terminal)i.walkTerminal(n,o,t);else if(n instanceof En.Alternative)i.walkFlat(n,o,t);else if(n instanceof En.Option)i.walkOption(n,o,t);else if(n instanceof En.RepetitionMandatory)i.walkAtLeastOne(n,o,t);else if(n instanceof En.RepetitionMandatoryWithSeparator)i.walkAtLeastOneSep(n,o,t);else if(n instanceof En.RepetitionWithSeparator)i.walkManySep(n,o,t);else if(n instanceof En.Repetition)i.walkMany(n,o,t);else if(n instanceof En.Alternation)i.walkOr(n,o,t);else throw Error("non exhaustive match")})},r.prototype.walkTerminal=function(e,t,i){},r.prototype.walkProdRef=function(e,t,i){},r.prototype.walkFlat=function(e,t,i){var n=t.concat(i);this.walk(e,n)},r.prototype.walkOption=function(e,t,i){var n=t.concat(i);this.walk(e,n)},r.prototype.walkAtLeastOne=function(e,t,i){var n=[new En.Option({definition:e.definition})].concat(t,i);this.walk(e,n)},r.prototype.walkAtLeastOneSep=function(e,t,i){var n=Tj(e,t,i);this.walk(e,n)},r.prototype.walkMany=function(e,t,i){var n=[new En.Option({definition:e.definition})].concat(t,i);this.walk(e,n)},r.prototype.walkManySep=function(e,t,i){var n=Tj(e,t,i);this.walk(e,n)},r.prototype.walkOr=function(e,t,i){var n=this,s=t.concat(i);(0,Gv.forEach)(e.definition,function(o){var a=new En.Alternative({definition:[o]});n.walk(a,s)})},r}();ay.RestWalker=oIe;function Tj(r,e,t){var i=[new En.Option({definition:[new En.Terminal({terminalType:r.separator})].concat(r.definition)})],n=i.concat(e,t);return n}});var $g=w(ly=>{"use strict";Object.defineProperty(ly,"__esModule",{value:!0});ly.GAstVisitor=void 0;var Fo=mn(),aIe=function(){function r(){}return r.prototype.visit=function(e){var t=e;switch(t.constructor){case Fo.NonTerminal:return this.visitNonTerminal(t);case Fo.Alternative:return this.visitAlternative(t);case Fo.Option:return this.visitOption(t);case Fo.RepetitionMandatory:return this.visitRepetitionMandatory(t);case Fo.RepetitionMandatoryWithSeparator:return this.visitRepetitionMandatoryWithSeparator(t);case Fo.RepetitionWithSeparator:return this.visitRepetitionWithSeparator(t);case Fo.Repetition:return this.visitRepetition(t);case Fo.Alternation:return this.visitAlternation(t);case Fo.Terminal:return this.visitTerminal(t);case Fo.Rule:return this.visitRule(t);default:throw Error("non exhaustive match")}},r.prototype.visitNonTerminal=function(e){},r.prototype.visitAlternative=function(e){},r.prototype.visitOption=function(e){},r.prototype.visitRepetition=function(e){},r.prototype.visitRepetitionMandatory=function(e){},r.prototype.visitRepetitionMandatoryWithSeparator=function(e){},r.prototype.visitRepetitionWithSeparator=function(e){},r.prototype.visitAlternation=function(e){},r.prototype.visitTerminal=function(e){},r.prototype.visitRule=function(e){},r}();ly.GAstVisitor=aIe});var vd=w(Mi=>{"use strict";var AIe=Mi&&Mi.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Mi,"__esModule",{value:!0});Mi.collectMethods=Mi.DslMethodsCollectorVisitor=Mi.getProductionDslName=Mi.isBranchingProd=Mi.isOptionalProd=Mi.isSequenceProd=void 0;var Sd=Gt(),br=mn(),lIe=$g();function cIe(r){return r instanceof br.Alternative||r instanceof br.Option||r instanceof br.Repetition||r instanceof br.RepetitionMandatory||r instanceof br.RepetitionMandatoryWithSeparator||r instanceof br.RepetitionWithSeparator||r instanceof br.Terminal||r instanceof br.Rule}Mi.isSequenceProd=cIe;function Yv(r,e){e===void 0&&(e=[]);var t=r instanceof br.Option||r instanceof br.Repetition||r instanceof br.RepetitionWithSeparator;return t?!0:r instanceof br.Alternation?(0,Sd.some)(r.definition,function(i){return Yv(i,e)}):r instanceof br.NonTerminal&&(0,Sd.contains)(e,r)?!1:r instanceof br.AbstractProduction?(r instanceof br.NonTerminal&&e.push(r),(0,Sd.every)(r.definition,function(i){return Yv(i,e)})):!1}Mi.isOptionalProd=Yv;function uIe(r){return r instanceof br.Alternation}Mi.isBranchingProd=uIe;function gIe(r){if(r instanceof br.NonTerminal)return"SUBRULE";if(r instanceof br.Option)return"OPTION";if(r instanceof br.Alternation)return"OR";if(r instanceof br.RepetitionMandatory)return"AT_LEAST_ONE";if(r instanceof br.RepetitionMandatoryWithSeparator)return"AT_LEAST_ONE_SEP";if(r instanceof br.RepetitionWithSeparator)return"MANY_SEP";if(r instanceof br.Repetition)return"MANY";if(r instanceof br.Terminal)return"CONSUME";throw Error("non exhaustive match")}Mi.getProductionDslName=gIe;var Lj=function(r){AIe(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.separator="-",t.dslMethods={option:[],alternation:[],repetition:[],repetitionWithSeparator:[],repetitionMandatory:[],repetitionMandatoryWithSeparator:[]},t}return e.prototype.reset=function(){this.dslMethods={option:[],alternation:[],repetition:[],repetitionWithSeparator:[],repetitionMandatory:[],repetitionMandatoryWithSeparator:[]}},e.prototype.visitTerminal=function(t){var i=t.terminalType.name+this.separator+"Terminal";(0,Sd.has)(this.dslMethods,i)||(this.dslMethods[i]=[]),this.dslMethods[i].push(t)},e.prototype.visitNonTerminal=function(t){var i=t.nonTerminalName+this.separator+"Terminal";(0,Sd.has)(this.dslMethods,i)||(this.dslMethods[i]=[]),this.dslMethods[i].push(t)},e.prototype.visitOption=function(t){this.dslMethods.option.push(t)},e.prototype.visitRepetitionWithSeparator=function(t){this.dslMethods.repetitionWithSeparator.push(t)},e.prototype.visitRepetitionMandatory=function(t){this.dslMethods.repetitionMandatory.push(t)},e.prototype.visitRepetitionMandatoryWithSeparator=function(t){this.dslMethods.repetitionMandatoryWithSeparator.push(t)},e.prototype.visitRepetition=function(t){this.dslMethods.repetition.push(t)},e.prototype.visitAlternation=function(t){this.dslMethods.alternation.push(t)},e}(lIe.GAstVisitor);Mi.DslMethodsCollectorVisitor=Lj;var cy=new Lj;function fIe(r){cy.reset(),r.accept(cy);var e=cy.dslMethods;return cy.reset(),e}Mi.collectMethods=fIe});var qv=w(No=>{"use strict";Object.defineProperty(No,"__esModule",{value:!0});No.firstForTerminal=No.firstForBranching=No.firstForSequence=No.first=void 0;var uy=Gt(),Oj=mn(),jv=vd();function gy(r){if(r instanceof Oj.NonTerminal)return gy(r.referencedRule);if(r instanceof Oj.Terminal)return Uj(r);if((0,jv.isSequenceProd)(r))return Mj(r);if((0,jv.isBranchingProd)(r))return Kj(r);throw Error("non exhaustive match")}No.first=gy;function Mj(r){for(var e=[],t=r.definition,i=0,n=t.length>i,s,o=!0;n&&o;)s=t[i],o=(0,jv.isOptionalProd)(s),e=e.concat(gy(s)),i=i+1,n=t.length>i;return(0,uy.uniq)(e)}No.firstForSequence=Mj;function Kj(r){var e=(0,uy.map)(r.definition,function(t){return gy(t)});return(0,uy.uniq)((0,uy.flatten)(e))}No.firstForBranching=Kj;function Uj(r){return[r.terminalType]}No.firstForTerminal=Uj});var Jv=w(fy=>{"use strict";Object.defineProperty(fy,"__esModule",{value:!0});fy.IN=void 0;fy.IN="_~IN~_"});var qj=w(fs=>{"use strict";var hIe=fs&&fs.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(fs,"__esModule",{value:!0});fs.buildInProdFollowPrefix=fs.buildBetweenProdsFollowPrefix=fs.computeAllProdsFollows=fs.ResyncFollowsWalker=void 0;var pIe=Ay(),dIe=qv(),Hj=Gt(),Gj=Jv(),CIe=mn(),Yj=function(r){hIe(e,r);function e(t){var i=r.call(this)||this;return i.topProd=t,i.follows={},i}return e.prototype.startWalking=function(){return this.walk(this.topProd),this.follows},e.prototype.walkTerminal=function(t,i,n){},e.prototype.walkProdRef=function(t,i,n){var s=jj(t.referencedRule,t.idx)+this.topProd.name,o=i.concat(n),a=new CIe.Alternative({definition:o}),l=(0,dIe.first)(a);this.follows[s]=l},e}(pIe.RestWalker);fs.ResyncFollowsWalker=Yj;function mIe(r){var e={};return(0,Hj.forEach)(r,function(t){var i=new Yj(t).startWalking();(0,Hj.assign)(e,i)}),e}fs.computeAllProdsFollows=mIe;function jj(r,e){return r.name+e+Gj.IN}fs.buildBetweenProdsFollowPrefix=jj;function EIe(r){var e=r.terminalType.name;return e+r.idx+Gj.IN}fs.buildInProdFollowPrefix=EIe});var xd=w(Da=>{"use strict";Object.defineProperty(Da,"__esModule",{value:!0});Da.defaultGrammarValidatorErrorProvider=Da.defaultGrammarResolverErrorProvider=Da.defaultParserErrorProvider=void 0;var ef=TA(),IIe=Gt(),eo=Gt(),Wv=mn(),Jj=vd();Da.defaultParserErrorProvider={buildMismatchTokenMessage:function(r){var e=r.expected,t=r.actual,i=r.previous,n=r.ruleName,s=(0,ef.hasTokenLabel)(e),o=s?"--> "+(0,ef.tokenLabel)(e)+" <--":"token of type --> "+e.name+" <--",a="Expecting "+o+" but found --> '"+t.image+"' <--";return a},buildNotAllInputParsedMessage:function(r){var e=r.firstRedundant,t=r.ruleName;return"Redundant input, expecting EOF but found: "+e.image},buildNoViableAltMessage:function(r){var e=r.expectedPathsPerAlt,t=r.actual,i=r.previous,n=r.customUserDescription,s=r.ruleName,o="Expecting: ",a=(0,eo.first)(t).image,l=` -but found: '`+a+"'";if(n)return o+n+l;var c=(0,eo.reduce)(e,function(h,p){return h.concat(p)},[]),u=(0,eo.map)(c,function(h){return"["+(0,eo.map)(h,function(p){return(0,ef.tokenLabel)(p)}).join(", ")+"]"}),g=(0,eo.map)(u,function(h,p){return" "+(p+1)+". "+h}),f=`one of these possible Token sequences: -`+g.join(` -`);return o+f+l},buildEarlyExitMessage:function(r){var e=r.expectedIterationPaths,t=r.actual,i=r.customUserDescription,n=r.ruleName,s="Expecting: ",o=(0,eo.first)(t).image,a=` -but found: '`+o+"'";if(i)return s+i+a;var l=(0,eo.map)(e,function(u){return"["+(0,eo.map)(u,function(g){return(0,ef.tokenLabel)(g)}).join(",")+"]"}),c=`expecting at least one iteration which starts with one of these possible Token sequences:: - `+("<"+l.join(" ,")+">");return s+c+a}};Object.freeze(Da.defaultParserErrorProvider);Da.defaultGrammarResolverErrorProvider={buildRuleNotFoundError:function(r,e){var t="Invalid grammar, reference to a rule which is not defined: ->"+e.nonTerminalName+`<- -inside top level rule: ->`+r.name+"<-";return t}};Da.defaultGrammarValidatorErrorProvider={buildDuplicateFoundError:function(r,e){function t(u){return u instanceof Wv.Terminal?u.terminalType.name:u instanceof Wv.NonTerminal?u.nonTerminalName:""}var i=r.name,n=(0,eo.first)(e),s=n.idx,o=(0,Jj.getProductionDslName)(n),a=t(n),l=s>0,c="->"+o+(l?s:"")+"<- "+(a?"with argument: ->"+a+"<-":"")+` - appears more than once (`+e.length+" times) in the top level rule: ->"+i+`<-. - For further details see: https://chevrotain.io/docs/FAQ.html#NUMERICAL_SUFFIXES - `;return c=c.replace(/[ \t]+/g," "),c=c.replace(/\s\s+/g,` -`),c},buildNamespaceConflictError:function(r){var e=`Namespace conflict found in grammar. -`+("The grammar has both a Terminal(Token) and a Non-Terminal(Rule) named: <"+r.name+`>. -`)+`To resolve this make sure each Terminal and Non-Terminal names are unique -This is easy to accomplish by using the convention that Terminal names start with an uppercase letter -and Non-Terminal names start with a lower case letter.`;return e},buildAlternationPrefixAmbiguityError:function(r){var e=(0,eo.map)(r.prefixPath,function(n){return(0,ef.tokenLabel)(n)}).join(", "),t=r.alternation.idx===0?"":r.alternation.idx,i="Ambiguous alternatives: <"+r.ambiguityIndices.join(" ,")+`> due to common lookahead prefix -`+("in inside <"+r.topLevelRule.name+`> Rule, -`)+("<"+e+`> may appears as a prefix path in all these alternatives. -`)+`See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#COMMON_PREFIX -For Further details.`;return i},buildAlternationAmbiguityError:function(r){var e=(0,eo.map)(r.prefixPath,function(n){return(0,ef.tokenLabel)(n)}).join(", "),t=r.alternation.idx===0?"":r.alternation.idx,i="Ambiguous Alternatives Detected: <"+r.ambiguityIndices.join(" ,")+"> in "+(" inside <"+r.topLevelRule.name+`> Rule, -`)+("<"+e+`> may appears as a prefix path in all these alternatives. -`);return i=i+`See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#AMBIGUOUS_ALTERNATIVES -For Further details.`,i},buildEmptyRepetitionError:function(r){var e=(0,Jj.getProductionDslName)(r.repetition);r.repetition.idx!==0&&(e+=r.repetition.idx);var t="The repetition <"+e+"> within Rule <"+r.topLevelRule.name+`> can never consume any tokens. -This could lead to an infinite loop.`;return t},buildTokenNameError:function(r){return"deprecated"},buildEmptyAlternationError:function(r){var e="Ambiguous empty alternative: <"+(r.emptyChoiceIdx+1)+">"+(" in inside <"+r.topLevelRule.name+`> Rule. -`)+"Only the last alternative may be an empty alternative.";return e},buildTooManyAlternativesError:function(r){var e=`An Alternation cannot have more than 256 alternatives: -`+(" inside <"+r.topLevelRule.name+`> Rule. - has `+(r.alternation.definition.length+1)+" alternatives.");return e},buildLeftRecursionError:function(r){var e=r.topLevelRule.name,t=IIe.map(r.leftRecursionPath,function(s){return s.name}),i=e+" --> "+t.concat([e]).join(" --> "),n=`Left Recursion found in grammar. -`+("rule: <"+e+`> can be invoked from itself (directly or indirectly) -`)+(`without consuming any Tokens. The grammar path that causes this is: - `+i+` -`)+` To fix this refactor your grammar to remove the left recursion. -see: https://en.wikipedia.org/wiki/LL_parser#Left_Factoring.`;return n},buildInvalidRuleNameError:function(r){return"deprecated"},buildDuplicateRuleNameError:function(r){var e;r.topLevelRule instanceof Wv.Rule?e=r.topLevelRule.name:e=r.topLevelRule;var t="Duplicate definition, rule: ->"+e+"<- is already defined in the grammar: ->"+r.grammarName+"<-";return t}}});var Vj=w(LA=>{"use strict";var yIe=LA&&LA.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(LA,"__esModule",{value:!0});LA.GastRefResolverVisitor=LA.resolveGrammar=void 0;var wIe=jn(),Wj=Gt(),BIe=$g();function bIe(r,e){var t=new zj(r,e);return t.resolveRefs(),t.errors}LA.resolveGrammar=bIe;var zj=function(r){yIe(e,r);function e(t,i){var n=r.call(this)||this;return n.nameToTopRule=t,n.errMsgProvider=i,n.errors=[],n}return e.prototype.resolveRefs=function(){var t=this;(0,Wj.forEach)((0,Wj.values)(this.nameToTopRule),function(i){t.currTopLevel=i,i.accept(t)})},e.prototype.visitNonTerminal=function(t){var i=this.nameToTopRule[t.nonTerminalName];if(i)t.referencedRule=i;else{var n=this.errMsgProvider.buildRuleNotFoundError(this.currTopLevel,t);this.errors.push({message:n,type:wIe.ParserDefinitionErrorType.UNRESOLVED_SUBRULE_REF,ruleName:this.currTopLevel.name,unresolvedRefName:t.nonTerminalName})}},e}(BIe.GAstVisitor);LA.GastRefResolverVisitor=zj});var Dd=w(Nr=>{"use strict";var mc=Nr&&Nr.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Nr,"__esModule",{value:!0});Nr.nextPossibleTokensAfter=Nr.possiblePathsFrom=Nr.NextTerminalAfterAtLeastOneSepWalker=Nr.NextTerminalAfterAtLeastOneWalker=Nr.NextTerminalAfterManySepWalker=Nr.NextTerminalAfterManyWalker=Nr.AbstractNextTerminalAfterProductionWalker=Nr.NextAfterTokenWalker=Nr.AbstractNextPossibleTokensWalker=void 0;var Xj=Ay(),Kt=Gt(),QIe=qv(),kt=mn(),Zj=function(r){mc(e,r);function e(t,i){var n=r.call(this)||this;return n.topProd=t,n.path=i,n.possibleTokTypes=[],n.nextProductionName="",n.nextProductionOccurrence=0,n.found=!1,n.isAtEndOfPath=!1,n}return e.prototype.startWalking=function(){if(this.found=!1,this.path.ruleStack[0]!==this.topProd.name)throw Error("The path does not start with the walker's top Rule!");return this.ruleStack=(0,Kt.cloneArr)(this.path.ruleStack).reverse(),this.occurrenceStack=(0,Kt.cloneArr)(this.path.occurrenceStack).reverse(),this.ruleStack.pop(),this.occurrenceStack.pop(),this.updateExpectedNext(),this.walk(this.topProd),this.possibleTokTypes},e.prototype.walk=function(t,i){i===void 0&&(i=[]),this.found||r.prototype.walk.call(this,t,i)},e.prototype.walkProdRef=function(t,i,n){if(t.referencedRule.name===this.nextProductionName&&t.idx===this.nextProductionOccurrence){var s=i.concat(n);this.updateExpectedNext(),this.walk(t.referencedRule,s)}},e.prototype.updateExpectedNext=function(){(0,Kt.isEmpty)(this.ruleStack)?(this.nextProductionName="",this.nextProductionOccurrence=0,this.isAtEndOfPath=!0):(this.nextProductionName=this.ruleStack.pop(),this.nextProductionOccurrence=this.occurrenceStack.pop())},e}(Xj.RestWalker);Nr.AbstractNextPossibleTokensWalker=Zj;var SIe=function(r){mc(e,r);function e(t,i){var n=r.call(this,t,i)||this;return n.path=i,n.nextTerminalName="",n.nextTerminalOccurrence=0,n.nextTerminalName=n.path.lastTok.name,n.nextTerminalOccurrence=n.path.lastTokOccurrence,n}return e.prototype.walkTerminal=function(t,i,n){if(this.isAtEndOfPath&&t.terminalType.name===this.nextTerminalName&&t.idx===this.nextTerminalOccurrence&&!this.found){var s=i.concat(n),o=new kt.Alternative({definition:s});this.possibleTokTypes=(0,QIe.first)(o),this.found=!0}},e}(Zj);Nr.NextAfterTokenWalker=SIe;var Pd=function(r){mc(e,r);function e(t,i){var n=r.call(this)||this;return n.topRule=t,n.occurrence=i,n.result={token:void 0,occurrence:void 0,isEndOfRule:void 0},n}return e.prototype.startWalking=function(){return this.walk(this.topRule),this.result},e}(Xj.RestWalker);Nr.AbstractNextTerminalAfterProductionWalker=Pd;var vIe=function(r){mc(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.walkMany=function(t,i,n){if(t.idx===this.occurrence){var s=(0,Kt.first)(i.concat(n));this.result.isEndOfRule=s===void 0,s instanceof kt.Terminal&&(this.result.token=s.terminalType,this.result.occurrence=s.idx)}else r.prototype.walkMany.call(this,t,i,n)},e}(Pd);Nr.NextTerminalAfterManyWalker=vIe;var xIe=function(r){mc(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.walkManySep=function(t,i,n){if(t.idx===this.occurrence){var s=(0,Kt.first)(i.concat(n));this.result.isEndOfRule=s===void 0,s instanceof kt.Terminal&&(this.result.token=s.terminalType,this.result.occurrence=s.idx)}else r.prototype.walkManySep.call(this,t,i,n)},e}(Pd);Nr.NextTerminalAfterManySepWalker=xIe;var PIe=function(r){mc(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.walkAtLeastOne=function(t,i,n){if(t.idx===this.occurrence){var s=(0,Kt.first)(i.concat(n));this.result.isEndOfRule=s===void 0,s instanceof kt.Terminal&&(this.result.token=s.terminalType,this.result.occurrence=s.idx)}else r.prototype.walkAtLeastOne.call(this,t,i,n)},e}(Pd);Nr.NextTerminalAfterAtLeastOneWalker=PIe;var DIe=function(r){mc(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.walkAtLeastOneSep=function(t,i,n){if(t.idx===this.occurrence){var s=(0,Kt.first)(i.concat(n));this.result.isEndOfRule=s===void 0,s instanceof kt.Terminal&&(this.result.token=s.terminalType,this.result.occurrence=s.idx)}else r.prototype.walkAtLeastOneSep.call(this,t,i,n)},e}(Pd);Nr.NextTerminalAfterAtLeastOneSepWalker=DIe;function _j(r,e,t){t===void 0&&(t=[]),t=(0,Kt.cloneArr)(t);var i=[],n=0;function s(c){return c.concat((0,Kt.drop)(r,n+1))}function o(c){var u=_j(s(c),e,t);return i.concat(u)}for(;t.length=0;ge--){var re=B.definition[ge],O={idx:p,def:re.definition.concat((0,Kt.drop)(h)),ruleStack:C,occurrenceStack:y};g.push(O),g.push(o)}else if(B instanceof kt.Alternative)g.push({idx:p,def:B.definition.concat((0,Kt.drop)(h)),ruleStack:C,occurrenceStack:y});else if(B instanceof kt.Rule)g.push(RIe(B,p,C,y));else throw Error("non exhaustive match")}}return u}Nr.nextPossibleTokensAfter=kIe;function RIe(r,e,t,i){var n=(0,Kt.cloneArr)(t);n.push(r.name);var s=(0,Kt.cloneArr)(i);return s.push(1),{idx:e,def:r.definition,ruleStack:n,occurrenceStack:s}}});var kd=w(Zt=>{"use strict";var tq=Zt&&Zt.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Zt,"__esModule",{value:!0});Zt.areTokenCategoriesNotUsed=Zt.isStrictPrefixOfPath=Zt.containsPath=Zt.getLookaheadPathsForOptionalProd=Zt.getLookaheadPathsForOr=Zt.lookAheadSequenceFromAlternatives=Zt.buildSingleAlternativeLookaheadFunction=Zt.buildAlternativesLookAheadFunc=Zt.buildLookaheadFuncForOptionalProd=Zt.buildLookaheadFuncForOr=Zt.getProdType=Zt.PROD_TYPE=void 0;var sr=Gt(),$j=Dd(),FIe=Ay(),hy=_g(),OA=mn(),NIe=$g(),oi;(function(r){r[r.OPTION=0]="OPTION",r[r.REPETITION=1]="REPETITION",r[r.REPETITION_MANDATORY=2]="REPETITION_MANDATORY",r[r.REPETITION_MANDATORY_WITH_SEPARATOR=3]="REPETITION_MANDATORY_WITH_SEPARATOR",r[r.REPETITION_WITH_SEPARATOR=4]="REPETITION_WITH_SEPARATOR",r[r.ALTERNATION=5]="ALTERNATION"})(oi=Zt.PROD_TYPE||(Zt.PROD_TYPE={}));function TIe(r){if(r instanceof OA.Option)return oi.OPTION;if(r instanceof OA.Repetition)return oi.REPETITION;if(r instanceof OA.RepetitionMandatory)return oi.REPETITION_MANDATORY;if(r instanceof OA.RepetitionMandatoryWithSeparator)return oi.REPETITION_MANDATORY_WITH_SEPARATOR;if(r instanceof OA.RepetitionWithSeparator)return oi.REPETITION_WITH_SEPARATOR;if(r instanceof OA.Alternation)return oi.ALTERNATION;throw Error("non exhaustive match")}Zt.getProdType=TIe;function LIe(r,e,t,i,n,s){var o=iq(r,e,t),a=Xv(o)?hy.tokenStructuredMatcherNoCategories:hy.tokenStructuredMatcher;return s(o,i,a,n)}Zt.buildLookaheadFuncForOr=LIe;function OIe(r,e,t,i,n,s){var o=nq(r,e,n,t),a=Xv(o)?hy.tokenStructuredMatcherNoCategories:hy.tokenStructuredMatcher;return s(o[0],a,i)}Zt.buildLookaheadFuncForOptionalProd=OIe;function MIe(r,e,t,i){var n=r.length,s=(0,sr.every)(r,function(l){return(0,sr.every)(l,function(c){return c.length===1})});if(e)return function(l){for(var c=(0,sr.map)(l,function(D){return D.GATE}),u=0;u{"use strict";var Zv=Vt&&Vt.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Vt,"__esModule",{value:!0});Vt.checkPrefixAlternativesAmbiguities=Vt.validateSomeNonEmptyLookaheadPath=Vt.validateTooManyAlts=Vt.RepetionCollector=Vt.validateAmbiguousAlternationAlternatives=Vt.validateEmptyOrAlternative=Vt.getFirstNoneTerminal=Vt.validateNoLeftRecursion=Vt.validateRuleIsOverridden=Vt.validateRuleDoesNotAlreadyExist=Vt.OccurrenceValidationCollector=Vt.identifyProductionForDuplicates=Vt.validateGrammar=void 0;var er=Gt(),Qr=Gt(),To=jn(),_v=vd(),tf=kd(),YIe=Dd(),to=mn(),$v=$g();function jIe(r,e,t,i,n){var s=er.map(r,function(h){return qIe(h,i)}),o=er.map(r,function(h){return ex(h,h,i)}),a=[],l=[],c=[];(0,Qr.every)(o,Qr.isEmpty)&&(a=(0,Qr.map)(r,function(h){return cq(h,i)}),l=(0,Qr.map)(r,function(h){return uq(h,e,i)}),c=hq(r,e,i));var u=zIe(r,t,i),g=(0,Qr.map)(r,function(h){return fq(h,i)}),f=(0,Qr.map)(r,function(h){return lq(h,r,n,i)});return er.flatten(s.concat(c,o,a,l,u,g,f))}Vt.validateGrammar=jIe;function qIe(r,e){var t=new Aq;r.accept(t);var i=t.allProductions,n=er.groupBy(i,oq),s=er.pick(n,function(a){return a.length>1}),o=er.map(er.values(s),function(a){var l=er.first(a),c=e.buildDuplicateFoundError(r,a),u=(0,_v.getProductionDslName)(l),g={message:c,type:To.ParserDefinitionErrorType.DUPLICATE_PRODUCTIONS,ruleName:r.name,dslName:u,occurrence:l.idx},f=aq(l);return f&&(g.parameter=f),g});return o}function oq(r){return(0,_v.getProductionDslName)(r)+"_#_"+r.idx+"_#_"+aq(r)}Vt.identifyProductionForDuplicates=oq;function aq(r){return r instanceof to.Terminal?r.terminalType.name:r instanceof to.NonTerminal?r.nonTerminalName:""}var Aq=function(r){Zv(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.allProductions=[],t}return e.prototype.visitNonTerminal=function(t){this.allProductions.push(t)},e.prototype.visitOption=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionWithSeparator=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionMandatory=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionMandatoryWithSeparator=function(t){this.allProductions.push(t)},e.prototype.visitRepetition=function(t){this.allProductions.push(t)},e.prototype.visitAlternation=function(t){this.allProductions.push(t)},e.prototype.visitTerminal=function(t){this.allProductions.push(t)},e}($v.GAstVisitor);Vt.OccurrenceValidationCollector=Aq;function lq(r,e,t,i){var n=[],s=(0,Qr.reduce)(e,function(a,l){return l.name===r.name?a+1:a},0);if(s>1){var o=i.buildDuplicateRuleNameError({topLevelRule:r,grammarName:t});n.push({message:o,type:To.ParserDefinitionErrorType.DUPLICATE_RULE_NAME,ruleName:r.name})}return n}Vt.validateRuleDoesNotAlreadyExist=lq;function JIe(r,e,t){var i=[],n;return er.contains(e,r)||(n="Invalid rule override, rule: ->"+r+"<- cannot be overridden in the grammar: ->"+t+"<-as it is not defined in any of the super grammars ",i.push({message:n,type:To.ParserDefinitionErrorType.INVALID_RULE_OVERRIDE,ruleName:r})),i}Vt.validateRuleIsOverridden=JIe;function ex(r,e,t,i){i===void 0&&(i=[]);var n=[],s=Rd(e.definition);if(er.isEmpty(s))return[];var o=r.name,a=er.contains(s,r);a&&n.push({message:t.buildLeftRecursionError({topLevelRule:r,leftRecursionPath:i}),type:To.ParserDefinitionErrorType.LEFT_RECURSION,ruleName:o});var l=er.difference(s,i.concat([r])),c=er.map(l,function(u){var g=er.cloneArr(i);return g.push(u),ex(r,u,t,g)});return n.concat(er.flatten(c))}Vt.validateNoLeftRecursion=ex;function Rd(r){var e=[];if(er.isEmpty(r))return e;var t=er.first(r);if(t instanceof to.NonTerminal)e.push(t.referencedRule);else if(t instanceof to.Alternative||t instanceof to.Option||t instanceof to.RepetitionMandatory||t instanceof to.RepetitionMandatoryWithSeparator||t instanceof to.RepetitionWithSeparator||t instanceof to.Repetition)e=e.concat(Rd(t.definition));else if(t instanceof to.Alternation)e=er.flatten(er.map(t.definition,function(o){return Rd(o.definition)}));else if(!(t instanceof to.Terminal))throw Error("non exhaustive match");var i=(0,_v.isOptionalProd)(t),n=r.length>1;if(i&&n){var s=er.drop(r);return e.concat(Rd(s))}else return e}Vt.getFirstNoneTerminal=Rd;var tx=function(r){Zv(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.alternations=[],t}return e.prototype.visitAlternation=function(t){this.alternations.push(t)},e}($v.GAstVisitor);function cq(r,e){var t=new tx;r.accept(t);var i=t.alternations,n=er.reduce(i,function(s,o){var a=er.dropRight(o.definition),l=er.map(a,function(c,u){var g=(0,YIe.nextPossibleTokensAfter)([c],[],null,1);return er.isEmpty(g)?{message:e.buildEmptyAlternationError({topLevelRule:r,alternation:o,emptyChoiceIdx:u}),type:To.ParserDefinitionErrorType.NONE_LAST_EMPTY_ALT,ruleName:r.name,occurrence:o.idx,alternative:u+1}:null});return s.concat(er.compact(l))},[]);return n}Vt.validateEmptyOrAlternative=cq;function uq(r,e,t){var i=new tx;r.accept(i);var n=i.alternations;n=(0,Qr.reject)(n,function(o){return o.ignoreAmbiguities===!0});var s=er.reduce(n,function(o,a){var l=a.idx,c=a.maxLookahead||e,u=(0,tf.getLookaheadPathsForOr)(l,r,c,a),g=WIe(u,a,r,t),f=pq(u,a,r,t);return o.concat(g,f)},[]);return s}Vt.validateAmbiguousAlternationAlternatives=uq;var gq=function(r){Zv(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.allProductions=[],t}return e.prototype.visitRepetitionWithSeparator=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionMandatory=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionMandatoryWithSeparator=function(t){this.allProductions.push(t)},e.prototype.visitRepetition=function(t){this.allProductions.push(t)},e}($v.GAstVisitor);Vt.RepetionCollector=gq;function fq(r,e){var t=new tx;r.accept(t);var i=t.alternations,n=er.reduce(i,function(s,o){return o.definition.length>255&&s.push({message:e.buildTooManyAlternativesError({topLevelRule:r,alternation:o}),type:To.ParserDefinitionErrorType.TOO_MANY_ALTS,ruleName:r.name,occurrence:o.idx}),s},[]);return n}Vt.validateTooManyAlts=fq;function hq(r,e,t){var i=[];return(0,Qr.forEach)(r,function(n){var s=new gq;n.accept(s);var o=s.allProductions;(0,Qr.forEach)(o,function(a){var l=(0,tf.getProdType)(a),c=a.maxLookahead||e,u=a.idx,g=(0,tf.getLookaheadPathsForOptionalProd)(u,n,l,c),f=g[0];if((0,Qr.isEmpty)((0,Qr.flatten)(f))){var h=t.buildEmptyRepetitionError({topLevelRule:n,repetition:a});i.push({message:h,type:To.ParserDefinitionErrorType.NO_NON_EMPTY_LOOKAHEAD,ruleName:n.name})}})}),i}Vt.validateSomeNonEmptyLookaheadPath=hq;function WIe(r,e,t,i){var n=[],s=(0,Qr.reduce)(r,function(a,l,c){return e.definition[c].ignoreAmbiguities===!0||(0,Qr.forEach)(l,function(u){var g=[c];(0,Qr.forEach)(r,function(f,h){c!==h&&(0,tf.containsPath)(f,u)&&e.definition[h].ignoreAmbiguities!==!0&&g.push(h)}),g.length>1&&!(0,tf.containsPath)(n,u)&&(n.push(u),a.push({alts:g,path:u}))}),a},[]),o=er.map(s,function(a){var l=(0,Qr.map)(a.alts,function(u){return u+1}),c=i.buildAlternationAmbiguityError({topLevelRule:t,alternation:e,ambiguityIndices:l,prefixPath:a.path});return{message:c,type:To.ParserDefinitionErrorType.AMBIGUOUS_ALTS,ruleName:t.name,occurrence:e.idx,alternatives:[a.alts]}});return o}function pq(r,e,t,i){var n=[],s=(0,Qr.reduce)(r,function(o,a,l){var c=(0,Qr.map)(a,function(u){return{idx:l,path:u}});return o.concat(c)},[]);return(0,Qr.forEach)(s,function(o){var a=e.definition[o.idx];if(a.ignoreAmbiguities!==!0){var l=o.idx,c=o.path,u=(0,Qr.findAll)(s,function(f){return e.definition[f.idx].ignoreAmbiguities!==!0&&f.idx{"use strict";Object.defineProperty(rf,"__esModule",{value:!0});rf.validateGrammar=rf.resolveGrammar=void 0;var ix=Gt(),VIe=Vj(),XIe=rx(),dq=xd();function ZIe(r){r=(0,ix.defaults)(r,{errMsgProvider:dq.defaultGrammarResolverErrorProvider});var e={};return(0,ix.forEach)(r.rules,function(t){e[t.name]=t}),(0,VIe.resolveGrammar)(e,r.errMsgProvider)}rf.resolveGrammar=ZIe;function _Ie(r){return r=(0,ix.defaults)(r,{errMsgProvider:dq.defaultGrammarValidatorErrorProvider}),(0,XIe.validateGrammar)(r.rules,r.maxLookahead,r.tokenTypes,r.errMsgProvider,r.grammarName)}rf.validateGrammar=_Ie});var nf=w(In=>{"use strict";var Fd=In&&In.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(In,"__esModule",{value:!0});In.EarlyExitException=In.NotAllInputParsedException=In.NoViableAltException=In.MismatchedTokenException=In.isRecognitionException=void 0;var $Ie=Gt(),mq="MismatchedTokenException",Eq="NoViableAltException",Iq="EarlyExitException",yq="NotAllInputParsedException",wq=[mq,Eq,Iq,yq];Object.freeze(wq);function eye(r){return(0,$Ie.contains)(wq,r.name)}In.isRecognitionException=eye;var py=function(r){Fd(e,r);function e(t,i){var n=this.constructor,s=r.call(this,t)||this;return s.token=i,s.resyncedTokens=[],Object.setPrototypeOf(s,n.prototype),Error.captureStackTrace&&Error.captureStackTrace(s,s.constructor),s}return e}(Error),tye=function(r){Fd(e,r);function e(t,i,n){var s=r.call(this,t,i)||this;return s.previousToken=n,s.name=mq,s}return e}(py);In.MismatchedTokenException=tye;var rye=function(r){Fd(e,r);function e(t,i,n){var s=r.call(this,t,i)||this;return s.previousToken=n,s.name=Eq,s}return e}(py);In.NoViableAltException=rye;var iye=function(r){Fd(e,r);function e(t,i){var n=r.call(this,t,i)||this;return n.name=yq,n}return e}(py);In.NotAllInputParsedException=iye;var nye=function(r){Fd(e,r);function e(t,i,n){var s=r.call(this,t,i)||this;return s.previousToken=n,s.name=Iq,s}return e}(py);In.EarlyExitException=nye});var sx=w(Ki=>{"use strict";Object.defineProperty(Ki,"__esModule",{value:!0});Ki.attemptInRepetitionRecovery=Ki.Recoverable=Ki.InRuleRecoveryException=Ki.IN_RULE_RECOVERY_EXCEPTION=Ki.EOF_FOLLOW_KEY=void 0;var dy=TA(),hs=Gt(),sye=nf(),oye=Jv(),aye=jn();Ki.EOF_FOLLOW_KEY={};Ki.IN_RULE_RECOVERY_EXCEPTION="InRuleRecoveryException";function nx(r){this.name=Ki.IN_RULE_RECOVERY_EXCEPTION,this.message=r}Ki.InRuleRecoveryException=nx;nx.prototype=Error.prototype;var Aye=function(){function r(){}return r.prototype.initRecoverable=function(e){this.firstAfterRepMap={},this.resyncFollows={},this.recoveryEnabled=(0,hs.has)(e,"recoveryEnabled")?e.recoveryEnabled:aye.DEFAULT_PARSER_CONFIG.recoveryEnabled,this.recoveryEnabled&&(this.attemptInRepetitionRecovery=Bq)},r.prototype.getTokenToInsert=function(e){var t=(0,dy.createTokenInstance)(e,"",NaN,NaN,NaN,NaN,NaN,NaN);return t.isInsertedInRecovery=!0,t},r.prototype.canTokenTypeBeInsertedInRecovery=function(e){return!0},r.prototype.tryInRepetitionRecovery=function(e,t,i,n){for(var s=this,o=this.findReSyncTokenType(),a=this.exportLexerState(),l=[],c=!1,u=this.LA(1),g=this.LA(1),f=function(){var h=s.LA(0),p=s.errorMessageProvider.buildMismatchTokenMessage({expected:n,actual:u,previous:h,ruleName:s.getCurrRuleFullName()}),C=new sye.MismatchedTokenException(p,u,s.LA(0));C.resyncedTokens=(0,hs.dropRight)(l),s.SAVE_ERROR(C)};!c;)if(this.tokenMatcher(g,n)){f();return}else if(i.call(this)){f(),e.apply(this,t);return}else this.tokenMatcher(g,o)?c=!0:(g=this.SKIP_TOKEN(),this.addToResyncTokens(g,l));this.importLexerState(a)},r.prototype.shouldInRepetitionRecoveryBeTried=function(e,t,i){return!(i===!1||e===void 0||t===void 0||this.tokenMatcher(this.LA(1),e)||this.isBackTracking()||this.canPerformInRuleRecovery(e,this.getFollowsForInRuleRecovery(e,t)))},r.prototype.getFollowsForInRuleRecovery=function(e,t){var i=this.getCurrentGrammarPath(e,t),n=this.getNextPossibleTokenTypes(i);return n},r.prototype.tryInRuleRecovery=function(e,t){if(this.canRecoverWithSingleTokenInsertion(e,t)){var i=this.getTokenToInsert(e);return i}if(this.canRecoverWithSingleTokenDeletion(e)){var n=this.SKIP_TOKEN();return this.consumeToken(),n}throw new nx("sad sad panda")},r.prototype.canPerformInRuleRecovery=function(e,t){return this.canRecoverWithSingleTokenInsertion(e,t)||this.canRecoverWithSingleTokenDeletion(e)},r.prototype.canRecoverWithSingleTokenInsertion=function(e,t){var i=this;if(!this.canTokenTypeBeInsertedInRecovery(e)||(0,hs.isEmpty)(t))return!1;var n=this.LA(1),s=(0,hs.find)(t,function(o){return i.tokenMatcher(n,o)})!==void 0;return s},r.prototype.canRecoverWithSingleTokenDeletion=function(e){var t=this.tokenMatcher(this.LA(2),e);return t},r.prototype.isInCurrentRuleReSyncSet=function(e){var t=this.getCurrFollowKey(),i=this.getFollowSetFromFollowKey(t);return(0,hs.contains)(i,e)},r.prototype.findReSyncTokenType=function(){for(var e=this.flattenFollowSet(),t=this.LA(1),i=2;;){var n=t.tokenType;if((0,hs.contains)(e,n))return n;t=this.LA(i),i++}},r.prototype.getCurrFollowKey=function(){if(this.RULE_STACK.length===1)return Ki.EOF_FOLLOW_KEY;var e=this.getLastExplicitRuleShortName(),t=this.getLastExplicitRuleOccurrenceIndex(),i=this.getPreviousExplicitRuleShortName();return{ruleName:this.shortRuleNameToFullName(e),idxInCallingRule:t,inRule:this.shortRuleNameToFullName(i)}},r.prototype.buildFullFollowKeyStack=function(){var e=this,t=this.RULE_STACK,i=this.RULE_OCCURRENCE_STACK;return(0,hs.map)(t,function(n,s){return s===0?Ki.EOF_FOLLOW_KEY:{ruleName:e.shortRuleNameToFullName(n),idxInCallingRule:i[s],inRule:e.shortRuleNameToFullName(t[s-1])}})},r.prototype.flattenFollowSet=function(){var e=this,t=(0,hs.map)(this.buildFullFollowKeyStack(),function(i){return e.getFollowSetFromFollowKey(i)});return(0,hs.flatten)(t)},r.prototype.getFollowSetFromFollowKey=function(e){if(e===Ki.EOF_FOLLOW_KEY)return[dy.EOF];var t=e.ruleName+e.idxInCallingRule+oye.IN+e.inRule;return this.resyncFollows[t]},r.prototype.addToResyncTokens=function(e,t){return this.tokenMatcher(e,dy.EOF)||t.push(e),t},r.prototype.reSyncTo=function(e){for(var t=[],i=this.LA(1);this.tokenMatcher(i,e)===!1;)i=this.SKIP_TOKEN(),this.addToResyncTokens(i,t);return(0,hs.dropRight)(t)},r.prototype.attemptInRepetitionRecovery=function(e,t,i,n,s,o,a){},r.prototype.getCurrentGrammarPath=function(e,t){var i=this.getHumanReadableRuleStack(),n=(0,hs.cloneArr)(this.RULE_OCCURRENCE_STACK),s={ruleStack:i,occurrenceStack:n,lastTok:e,lastTokOccurrence:t};return s},r.prototype.getHumanReadableRuleStack=function(){var e=this;return(0,hs.map)(this.RULE_STACK,function(t){return e.shortRuleNameToFullName(t)})},r}();Ki.Recoverable=Aye;function Bq(r,e,t,i,n,s,o){var a=this.getKeyForAutomaticLookahead(i,n),l=this.firstAfterRepMap[a];if(l===void 0){var c=this.getCurrRuleFullName(),u=this.getGAstProductions()[c],g=new s(u,n);l=g.startWalking(),this.firstAfterRepMap[a]=l}var f=l.token,h=l.occurrence,p=l.isEndOfRule;this.RULE_STACK.length===1&&p&&f===void 0&&(f=dy.EOF,h=1),this.shouldInRepetitionRecoveryBeTried(f,h,o)&&this.tryInRepetitionRecovery(r,e,t,f)}Ki.attemptInRepetitionRecovery=Bq});var Cy=w(Jt=>{"use strict";Object.defineProperty(Jt,"__esModule",{value:!0});Jt.getKeyForAutomaticLookahead=Jt.AT_LEAST_ONE_SEP_IDX=Jt.MANY_SEP_IDX=Jt.AT_LEAST_ONE_IDX=Jt.MANY_IDX=Jt.OPTION_IDX=Jt.OR_IDX=Jt.BITS_FOR_ALT_IDX=Jt.BITS_FOR_RULE_IDX=Jt.BITS_FOR_OCCURRENCE_IDX=Jt.BITS_FOR_METHOD_TYPE=void 0;Jt.BITS_FOR_METHOD_TYPE=4;Jt.BITS_FOR_OCCURRENCE_IDX=8;Jt.BITS_FOR_RULE_IDX=12;Jt.BITS_FOR_ALT_IDX=8;Jt.OR_IDX=1<{"use strict";Object.defineProperty(my,"__esModule",{value:!0});my.LooksAhead=void 0;var ka=kd(),ro=Gt(),bq=jn(),Ra=Cy(),Ec=vd(),cye=function(){function r(){}return r.prototype.initLooksAhead=function(e){this.dynamicTokensEnabled=(0,ro.has)(e,"dynamicTokensEnabled")?e.dynamicTokensEnabled:bq.DEFAULT_PARSER_CONFIG.dynamicTokensEnabled,this.maxLookahead=(0,ro.has)(e,"maxLookahead")?e.maxLookahead:bq.DEFAULT_PARSER_CONFIG.maxLookahead,this.lookAheadFuncsCache=(0,ro.isES2015MapSupported)()?new Map:[],(0,ro.isES2015MapSupported)()?(this.getLaFuncFromCache=this.getLaFuncFromMap,this.setLaFuncCache=this.setLaFuncCacheUsingMap):(this.getLaFuncFromCache=this.getLaFuncFromObj,this.setLaFuncCache=this.setLaFuncUsingObj)},r.prototype.preComputeLookaheadFunctions=function(e){var t=this;(0,ro.forEach)(e,function(i){t.TRACE_INIT(i.name+" Rule Lookahead",function(){var n=(0,Ec.collectMethods)(i),s=n.alternation,o=n.repetition,a=n.option,l=n.repetitionMandatory,c=n.repetitionMandatoryWithSeparator,u=n.repetitionWithSeparator;(0,ro.forEach)(s,function(g){var f=g.idx===0?"":g.idx;t.TRACE_INIT(""+(0,Ec.getProductionDslName)(g)+f,function(){var h=(0,ka.buildLookaheadFuncForOr)(g.idx,i,g.maxLookahead||t.maxLookahead,g.hasPredicates,t.dynamicTokensEnabled,t.lookAheadBuilderForAlternatives),p=(0,Ra.getKeyForAutomaticLookahead)(t.fullRuleNameToShort[i.name],Ra.OR_IDX,g.idx);t.setLaFuncCache(p,h)})}),(0,ro.forEach)(o,function(g){t.computeLookaheadFunc(i,g.idx,Ra.MANY_IDX,ka.PROD_TYPE.REPETITION,g.maxLookahead,(0,Ec.getProductionDslName)(g))}),(0,ro.forEach)(a,function(g){t.computeLookaheadFunc(i,g.idx,Ra.OPTION_IDX,ka.PROD_TYPE.OPTION,g.maxLookahead,(0,Ec.getProductionDslName)(g))}),(0,ro.forEach)(l,function(g){t.computeLookaheadFunc(i,g.idx,Ra.AT_LEAST_ONE_IDX,ka.PROD_TYPE.REPETITION_MANDATORY,g.maxLookahead,(0,Ec.getProductionDslName)(g))}),(0,ro.forEach)(c,function(g){t.computeLookaheadFunc(i,g.idx,Ra.AT_LEAST_ONE_SEP_IDX,ka.PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR,g.maxLookahead,(0,Ec.getProductionDslName)(g))}),(0,ro.forEach)(u,function(g){t.computeLookaheadFunc(i,g.idx,Ra.MANY_SEP_IDX,ka.PROD_TYPE.REPETITION_WITH_SEPARATOR,g.maxLookahead,(0,Ec.getProductionDslName)(g))})})})},r.prototype.computeLookaheadFunc=function(e,t,i,n,s,o){var a=this;this.TRACE_INIT(""+o+(t===0?"":t),function(){var l=(0,ka.buildLookaheadFuncForOptionalProd)(t,e,s||a.maxLookahead,a.dynamicTokensEnabled,n,a.lookAheadBuilderForOptional),c=(0,Ra.getKeyForAutomaticLookahead)(a.fullRuleNameToShort[e.name],i,t);a.setLaFuncCache(c,l)})},r.prototype.lookAheadBuilderForOptional=function(e,t,i){return(0,ka.buildSingleAlternativeLookaheadFunction)(e,t,i)},r.prototype.lookAheadBuilderForAlternatives=function(e,t,i,n){return(0,ka.buildAlternativesLookAheadFunc)(e,t,i,n)},r.prototype.getKeyForAutomaticLookahead=function(e,t){var i=this.getLastExplicitRuleShortName();return(0,Ra.getKeyForAutomaticLookahead)(i,e,t)},r.prototype.getLaFuncFromCache=function(e){},r.prototype.getLaFuncFromMap=function(e){return this.lookAheadFuncsCache.get(e)},r.prototype.getLaFuncFromObj=function(e){return this.lookAheadFuncsCache[e]},r.prototype.setLaFuncCache=function(e,t){},r.prototype.setLaFuncCacheUsingMap=function(e,t){this.lookAheadFuncsCache.set(e,t)},r.prototype.setLaFuncUsingObj=function(e,t){this.lookAheadFuncsCache[e]=t},r}();my.LooksAhead=cye});var Sq=w(Lo=>{"use strict";Object.defineProperty(Lo,"__esModule",{value:!0});Lo.addNoneTerminalToCst=Lo.addTerminalToCst=Lo.setNodeLocationFull=Lo.setNodeLocationOnlyOffset=void 0;function uye(r,e){isNaN(r.startOffset)===!0?(r.startOffset=e.startOffset,r.endOffset=e.endOffset):r.endOffset{"use strict";Object.defineProperty(MA,"__esModule",{value:!0});MA.defineNameProp=MA.functionName=MA.classNameFromInstance=void 0;var pye=Gt();function dye(r){return xq(r.constructor)}MA.classNameFromInstance=dye;var vq="name";function xq(r){var e=r.name;return e||"anonymous"}MA.functionName=xq;function Cye(r,e){var t=Object.getOwnPropertyDescriptor(r,vq);return(0,pye.isUndefined)(t)||t.configurable?(Object.defineProperty(r,vq,{enumerable:!1,configurable:!0,writable:!1,value:e}),!0):!1}MA.defineNameProp=Cye});var Fq=w(Si=>{"use strict";Object.defineProperty(Si,"__esModule",{value:!0});Si.validateRedundantMethods=Si.validateMissingCstMethods=Si.validateVisitor=Si.CstVisitorDefinitionError=Si.createBaseVisitorConstructorWithDefaults=Si.createBaseSemanticVisitorConstructor=Si.defaultVisit=void 0;var ps=Gt(),Nd=ox();function Pq(r,e){for(var t=(0,ps.keys)(r),i=t.length,n=0;n: - `+(""+s.join(` - -`).replace(/\n/g,` - `)))}}};return t.prototype=i,t.prototype.constructor=t,t._RULE_NAMES=e,t}Si.createBaseSemanticVisitorConstructor=mye;function Eye(r,e,t){var i=function(){};(0,Nd.defineNameProp)(i,r+"BaseSemanticsWithDefaults");var n=Object.create(t.prototype);return(0,ps.forEach)(e,function(s){n[s]=Pq}),i.prototype=n,i.prototype.constructor=i,i}Si.createBaseVisitorConstructorWithDefaults=Eye;var ax;(function(r){r[r.REDUNDANT_METHOD=0]="REDUNDANT_METHOD",r[r.MISSING_METHOD=1]="MISSING_METHOD"})(ax=Si.CstVisitorDefinitionError||(Si.CstVisitorDefinitionError={}));function Dq(r,e){var t=kq(r,e),i=Rq(r,e);return t.concat(i)}Si.validateVisitor=Dq;function kq(r,e){var t=(0,ps.map)(e,function(i){if(!(0,ps.isFunction)(r[i]))return{msg:"Missing visitor method: <"+i+"> on "+(0,Nd.functionName)(r.constructor)+" CST Visitor.",type:ax.MISSING_METHOD,methodName:i}});return(0,ps.compact)(t)}Si.validateMissingCstMethods=kq;var Iye=["constructor","visit","validateVisitor"];function Rq(r,e){var t=[];for(var i in r)(0,ps.isFunction)(r[i])&&!(0,ps.contains)(Iye,i)&&!(0,ps.contains)(e,i)&&t.push({msg:"Redundant visitor method: <"+i+"> on "+(0,Nd.functionName)(r.constructor)+` CST Visitor -There is no Grammar Rule corresponding to this method's name. -`,type:ax.REDUNDANT_METHOD,methodName:i});return t}Si.validateRedundantMethods=Rq});var Tq=w(Ey=>{"use strict";Object.defineProperty(Ey,"__esModule",{value:!0});Ey.TreeBuilder=void 0;var sf=Sq(),_r=Gt(),Nq=Fq(),yye=jn(),wye=function(){function r(){}return r.prototype.initTreeBuilder=function(e){if(this.CST_STACK=[],this.outputCst=e.outputCst,this.nodeLocationTracking=(0,_r.has)(e,"nodeLocationTracking")?e.nodeLocationTracking:yye.DEFAULT_PARSER_CONFIG.nodeLocationTracking,!this.outputCst)this.cstInvocationStateUpdate=_r.NOOP,this.cstFinallyStateUpdate=_r.NOOP,this.cstPostTerminal=_r.NOOP,this.cstPostNonTerminal=_r.NOOP,this.cstPostRule=_r.NOOP;else if(/full/i.test(this.nodeLocationTracking))this.recoveryEnabled?(this.setNodeLocationFromToken=sf.setNodeLocationFull,this.setNodeLocationFromNode=sf.setNodeLocationFull,this.cstPostRule=_r.NOOP,this.setInitialNodeLocation=this.setInitialNodeLocationFullRecovery):(this.setNodeLocationFromToken=_r.NOOP,this.setNodeLocationFromNode=_r.NOOP,this.cstPostRule=this.cstPostRuleFull,this.setInitialNodeLocation=this.setInitialNodeLocationFullRegular);else if(/onlyOffset/i.test(this.nodeLocationTracking))this.recoveryEnabled?(this.setNodeLocationFromToken=sf.setNodeLocationOnlyOffset,this.setNodeLocationFromNode=sf.setNodeLocationOnlyOffset,this.cstPostRule=_r.NOOP,this.setInitialNodeLocation=this.setInitialNodeLocationOnlyOffsetRecovery):(this.setNodeLocationFromToken=_r.NOOP,this.setNodeLocationFromNode=_r.NOOP,this.cstPostRule=this.cstPostRuleOnlyOffset,this.setInitialNodeLocation=this.setInitialNodeLocationOnlyOffsetRegular);else if(/none/i.test(this.nodeLocationTracking))this.setNodeLocationFromToken=_r.NOOP,this.setNodeLocationFromNode=_r.NOOP,this.cstPostRule=_r.NOOP,this.setInitialNodeLocation=_r.NOOP;else throw Error('Invalid config option: "'+e.nodeLocationTracking+'"')},r.prototype.setInitialNodeLocationOnlyOffsetRecovery=function(e){e.location={startOffset:NaN,endOffset:NaN}},r.prototype.setInitialNodeLocationOnlyOffsetRegular=function(e){e.location={startOffset:this.LA(1).startOffset,endOffset:NaN}},r.prototype.setInitialNodeLocationFullRecovery=function(e){e.location={startOffset:NaN,startLine:NaN,startColumn:NaN,endOffset:NaN,endLine:NaN,endColumn:NaN}},r.prototype.setInitialNodeLocationFullRegular=function(e){var t=this.LA(1);e.location={startOffset:t.startOffset,startLine:t.startLine,startColumn:t.startColumn,endOffset:NaN,endLine:NaN,endColumn:NaN}},r.prototype.cstInvocationStateUpdate=function(e,t){var i={name:e,children:{}};this.setInitialNodeLocation(i),this.CST_STACK.push(i)},r.prototype.cstFinallyStateUpdate=function(){this.CST_STACK.pop()},r.prototype.cstPostRuleFull=function(e){var t=this.LA(0),i=e.location;i.startOffset<=t.startOffset?(i.endOffset=t.endOffset,i.endLine=t.endLine,i.endColumn=t.endColumn):(i.startOffset=NaN,i.startLine=NaN,i.startColumn=NaN)},r.prototype.cstPostRuleOnlyOffset=function(e){var t=this.LA(0),i=e.location;i.startOffset<=t.startOffset?i.endOffset=t.endOffset:i.startOffset=NaN},r.prototype.cstPostTerminal=function(e,t){var i=this.CST_STACK[this.CST_STACK.length-1];(0,sf.addTerminalToCst)(i,t,e),this.setNodeLocationFromToken(i.location,t)},r.prototype.cstPostNonTerminal=function(e,t){var i=this.CST_STACK[this.CST_STACK.length-1];(0,sf.addNoneTerminalToCst)(i,t,e),this.setNodeLocationFromNode(i.location,e.location)},r.prototype.getBaseCstVisitorConstructor=function(){if((0,_r.isUndefined)(this.baseCstVisitorConstructor)){var e=(0,Nq.createBaseSemanticVisitorConstructor)(this.className,(0,_r.keys)(this.gastProductionsCache));return this.baseCstVisitorConstructor=e,e}return this.baseCstVisitorConstructor},r.prototype.getBaseCstVisitorConstructorWithDefaults=function(){if((0,_r.isUndefined)(this.baseCstVisitorWithDefaultsConstructor)){var e=(0,Nq.createBaseVisitorConstructorWithDefaults)(this.className,(0,_r.keys)(this.gastProductionsCache),this.getBaseCstVisitorConstructor());return this.baseCstVisitorWithDefaultsConstructor=e,e}return this.baseCstVisitorWithDefaultsConstructor},r.prototype.getLastExplicitRuleShortName=function(){var e=this.RULE_STACK;return e[e.length-1]},r.prototype.getPreviousExplicitRuleShortName=function(){var e=this.RULE_STACK;return e[e.length-2]},r.prototype.getLastExplicitRuleOccurrenceIndex=function(){var e=this.RULE_OCCURRENCE_STACK;return e[e.length-1]},r}();Ey.TreeBuilder=wye});var Oq=w(Iy=>{"use strict";Object.defineProperty(Iy,"__esModule",{value:!0});Iy.LexerAdapter=void 0;var Lq=jn(),Bye=function(){function r(){}return r.prototype.initLexerAdapter=function(){this.tokVector=[],this.tokVectorLength=0,this.currIdx=-1},Object.defineProperty(r.prototype,"input",{get:function(){return this.tokVector},set:function(e){if(this.selfAnalysisDone!==!0)throw Error("Missing invocation at the end of the Parser's constructor.");this.reset(),this.tokVector=e,this.tokVectorLength=e.length},enumerable:!1,configurable:!0}),r.prototype.SKIP_TOKEN=function(){return this.currIdx<=this.tokVector.length-2?(this.consumeToken(),this.LA(1)):Lq.END_OF_FILE},r.prototype.LA=function(e){var t=this.currIdx+e;return t<0||this.tokVectorLength<=t?Lq.END_OF_FILE:this.tokVector[t]},r.prototype.consumeToken=function(){this.currIdx++},r.prototype.exportLexerState=function(){return this.currIdx},r.prototype.importLexerState=function(e){this.currIdx=e},r.prototype.resetLexerState=function(){this.currIdx=-1},r.prototype.moveToTerminatedState=function(){this.currIdx=this.tokVector.length-1},r.prototype.getLexerPosition=function(){return this.exportLexerState()},r}();Iy.LexerAdapter=Bye});var Kq=w(yy=>{"use strict";Object.defineProperty(yy,"__esModule",{value:!0});yy.RecognizerApi=void 0;var Mq=Gt(),bye=nf(),Ax=jn(),Qye=xd(),Sye=rx(),vye=mn(),xye=function(){function r(){}return r.prototype.ACTION=function(e){return e.call(this)},r.prototype.consume=function(e,t,i){return this.consumeInternal(t,e,i)},r.prototype.subrule=function(e,t,i){return this.subruleInternal(t,e,i)},r.prototype.option=function(e,t){return this.optionInternal(t,e)},r.prototype.or=function(e,t){return this.orInternal(t,e)},r.prototype.many=function(e,t){return this.manyInternal(e,t)},r.prototype.atLeastOne=function(e,t){return this.atLeastOneInternal(e,t)},r.prototype.CONSUME=function(e,t){return this.consumeInternal(e,0,t)},r.prototype.CONSUME1=function(e,t){return this.consumeInternal(e,1,t)},r.prototype.CONSUME2=function(e,t){return this.consumeInternal(e,2,t)},r.prototype.CONSUME3=function(e,t){return this.consumeInternal(e,3,t)},r.prototype.CONSUME4=function(e,t){return this.consumeInternal(e,4,t)},r.prototype.CONSUME5=function(e,t){return this.consumeInternal(e,5,t)},r.prototype.CONSUME6=function(e,t){return this.consumeInternal(e,6,t)},r.prototype.CONSUME7=function(e,t){return this.consumeInternal(e,7,t)},r.prototype.CONSUME8=function(e,t){return this.consumeInternal(e,8,t)},r.prototype.CONSUME9=function(e,t){return this.consumeInternal(e,9,t)},r.prototype.SUBRULE=function(e,t){return this.subruleInternal(e,0,t)},r.prototype.SUBRULE1=function(e,t){return this.subruleInternal(e,1,t)},r.prototype.SUBRULE2=function(e,t){return this.subruleInternal(e,2,t)},r.prototype.SUBRULE3=function(e,t){return this.subruleInternal(e,3,t)},r.prototype.SUBRULE4=function(e,t){return this.subruleInternal(e,4,t)},r.prototype.SUBRULE5=function(e,t){return this.subruleInternal(e,5,t)},r.prototype.SUBRULE6=function(e,t){return this.subruleInternal(e,6,t)},r.prototype.SUBRULE7=function(e,t){return this.subruleInternal(e,7,t)},r.prototype.SUBRULE8=function(e,t){return this.subruleInternal(e,8,t)},r.prototype.SUBRULE9=function(e,t){return this.subruleInternal(e,9,t)},r.prototype.OPTION=function(e){return this.optionInternal(e,0)},r.prototype.OPTION1=function(e){return this.optionInternal(e,1)},r.prototype.OPTION2=function(e){return this.optionInternal(e,2)},r.prototype.OPTION3=function(e){return this.optionInternal(e,3)},r.prototype.OPTION4=function(e){return this.optionInternal(e,4)},r.prototype.OPTION5=function(e){return this.optionInternal(e,5)},r.prototype.OPTION6=function(e){return this.optionInternal(e,6)},r.prototype.OPTION7=function(e){return this.optionInternal(e,7)},r.prototype.OPTION8=function(e){return this.optionInternal(e,8)},r.prototype.OPTION9=function(e){return this.optionInternal(e,9)},r.prototype.OR=function(e){return this.orInternal(e,0)},r.prototype.OR1=function(e){return this.orInternal(e,1)},r.prototype.OR2=function(e){return this.orInternal(e,2)},r.prototype.OR3=function(e){return this.orInternal(e,3)},r.prototype.OR4=function(e){return this.orInternal(e,4)},r.prototype.OR5=function(e){return this.orInternal(e,5)},r.prototype.OR6=function(e){return this.orInternal(e,6)},r.prototype.OR7=function(e){return this.orInternal(e,7)},r.prototype.OR8=function(e){return this.orInternal(e,8)},r.prototype.OR9=function(e){return this.orInternal(e,9)},r.prototype.MANY=function(e){this.manyInternal(0,e)},r.prototype.MANY1=function(e){this.manyInternal(1,e)},r.prototype.MANY2=function(e){this.manyInternal(2,e)},r.prototype.MANY3=function(e){this.manyInternal(3,e)},r.prototype.MANY4=function(e){this.manyInternal(4,e)},r.prototype.MANY5=function(e){this.manyInternal(5,e)},r.prototype.MANY6=function(e){this.manyInternal(6,e)},r.prototype.MANY7=function(e){this.manyInternal(7,e)},r.prototype.MANY8=function(e){this.manyInternal(8,e)},r.prototype.MANY9=function(e){this.manyInternal(9,e)},r.prototype.MANY_SEP=function(e){this.manySepFirstInternal(0,e)},r.prototype.MANY_SEP1=function(e){this.manySepFirstInternal(1,e)},r.prototype.MANY_SEP2=function(e){this.manySepFirstInternal(2,e)},r.prototype.MANY_SEP3=function(e){this.manySepFirstInternal(3,e)},r.prototype.MANY_SEP4=function(e){this.manySepFirstInternal(4,e)},r.prototype.MANY_SEP5=function(e){this.manySepFirstInternal(5,e)},r.prototype.MANY_SEP6=function(e){this.manySepFirstInternal(6,e)},r.prototype.MANY_SEP7=function(e){this.manySepFirstInternal(7,e)},r.prototype.MANY_SEP8=function(e){this.manySepFirstInternal(8,e)},r.prototype.MANY_SEP9=function(e){this.manySepFirstInternal(9,e)},r.prototype.AT_LEAST_ONE=function(e){this.atLeastOneInternal(0,e)},r.prototype.AT_LEAST_ONE1=function(e){return this.atLeastOneInternal(1,e)},r.prototype.AT_LEAST_ONE2=function(e){this.atLeastOneInternal(2,e)},r.prototype.AT_LEAST_ONE3=function(e){this.atLeastOneInternal(3,e)},r.prototype.AT_LEAST_ONE4=function(e){this.atLeastOneInternal(4,e)},r.prototype.AT_LEAST_ONE5=function(e){this.atLeastOneInternal(5,e)},r.prototype.AT_LEAST_ONE6=function(e){this.atLeastOneInternal(6,e)},r.prototype.AT_LEAST_ONE7=function(e){this.atLeastOneInternal(7,e)},r.prototype.AT_LEAST_ONE8=function(e){this.atLeastOneInternal(8,e)},r.prototype.AT_LEAST_ONE9=function(e){this.atLeastOneInternal(9,e)},r.prototype.AT_LEAST_ONE_SEP=function(e){this.atLeastOneSepFirstInternal(0,e)},r.prototype.AT_LEAST_ONE_SEP1=function(e){this.atLeastOneSepFirstInternal(1,e)},r.prototype.AT_LEAST_ONE_SEP2=function(e){this.atLeastOneSepFirstInternal(2,e)},r.prototype.AT_LEAST_ONE_SEP3=function(e){this.atLeastOneSepFirstInternal(3,e)},r.prototype.AT_LEAST_ONE_SEP4=function(e){this.atLeastOneSepFirstInternal(4,e)},r.prototype.AT_LEAST_ONE_SEP5=function(e){this.atLeastOneSepFirstInternal(5,e)},r.prototype.AT_LEAST_ONE_SEP6=function(e){this.atLeastOneSepFirstInternal(6,e)},r.prototype.AT_LEAST_ONE_SEP7=function(e){this.atLeastOneSepFirstInternal(7,e)},r.prototype.AT_LEAST_ONE_SEP8=function(e){this.atLeastOneSepFirstInternal(8,e)},r.prototype.AT_LEAST_ONE_SEP9=function(e){this.atLeastOneSepFirstInternal(9,e)},r.prototype.RULE=function(e,t,i){if(i===void 0&&(i=Ax.DEFAULT_RULE_CONFIG),(0,Mq.contains)(this.definedRulesNames,e)){var n=Qye.defaultGrammarValidatorErrorProvider.buildDuplicateRuleNameError({topLevelRule:e,grammarName:this.className}),s={message:n,type:Ax.ParserDefinitionErrorType.DUPLICATE_RULE_NAME,ruleName:e};this.definitionErrors.push(s)}this.definedRulesNames.push(e);var o=this.defineRule(e,t,i);return this[e]=o,o},r.prototype.OVERRIDE_RULE=function(e,t,i){i===void 0&&(i=Ax.DEFAULT_RULE_CONFIG);var n=[];n=n.concat((0,Sye.validateRuleIsOverridden)(e,this.definedRulesNames,this.className)),this.definitionErrors=this.definitionErrors.concat(n);var s=this.defineRule(e,t,i);return this[e]=s,s},r.prototype.BACKTRACK=function(e,t){return function(){this.isBackTrackingStack.push(1);var i=this.saveRecogState();try{return e.apply(this,t),!0}catch(n){if((0,bye.isRecognitionException)(n))return!1;throw n}finally{this.reloadRecogState(i),this.isBackTrackingStack.pop()}}},r.prototype.getGAstProductions=function(){return this.gastProductionsCache},r.prototype.getSerializedGastProductions=function(){return(0,vye.serializeGrammar)((0,Mq.values)(this.gastProductionsCache))},r}();yy.RecognizerApi=xye});var Yq=w(By=>{"use strict";Object.defineProperty(By,"__esModule",{value:!0});By.RecognizerEngine=void 0;var Pr=Gt(),qn=Cy(),wy=nf(),Uq=kd(),of=Dd(),Hq=jn(),Pye=sx(),Gq=TA(),Td=_g(),Dye=ox(),kye=function(){function r(){}return r.prototype.initRecognizerEngine=function(e,t){if(this.className=(0,Dye.classNameFromInstance)(this),this.shortRuleNameToFull={},this.fullRuleNameToShort={},this.ruleShortNameIdx=256,this.tokenMatcher=Td.tokenStructuredMatcherNoCategories,this.definedRulesNames=[],this.tokensMap={},this.isBackTrackingStack=[],this.RULE_STACK=[],this.RULE_OCCURRENCE_STACK=[],this.gastProductionsCache={},(0,Pr.has)(t,"serializedGrammar"))throw Error(`The Parser's configuration can no longer contain a property. - See: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_6-0-0 - For Further details.`);if((0,Pr.isArray)(e)){if((0,Pr.isEmpty)(e))throw Error(`A Token Vocabulary cannot be empty. - Note that the first argument for the parser constructor - is no longer a Token vector (since v4.0).`);if(typeof e[0].startOffset=="number")throw Error(`The Parser constructor no longer accepts a token vector as the first argument. - See: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_4-0-0 - For Further details.`)}if((0,Pr.isArray)(e))this.tokensMap=(0,Pr.reduce)(e,function(o,a){return o[a.name]=a,o},{});else if((0,Pr.has)(e,"modes")&&(0,Pr.every)((0,Pr.flatten)((0,Pr.values)(e.modes)),Td.isTokenType)){var i=(0,Pr.flatten)((0,Pr.values)(e.modes)),n=(0,Pr.uniq)(i);this.tokensMap=(0,Pr.reduce)(n,function(o,a){return o[a.name]=a,o},{})}else if((0,Pr.isObject)(e))this.tokensMap=(0,Pr.cloneObj)(e);else throw new Error(" argument must be An Array of Token constructors, A dictionary of Token constructors or an IMultiModeLexerDefinition");this.tokensMap.EOF=Gq.EOF;var s=(0,Pr.every)((0,Pr.values)(e),function(o){return(0,Pr.isEmpty)(o.categoryMatches)});this.tokenMatcher=s?Td.tokenStructuredMatcherNoCategories:Td.tokenStructuredMatcher,(0,Td.augmentTokenTypes)((0,Pr.values)(this.tokensMap))},r.prototype.defineRule=function(e,t,i){if(this.selfAnalysisDone)throw Error("Grammar rule <"+e+`> may not be defined after the 'performSelfAnalysis' method has been called' -Make sure that all grammar rule definitions are done before 'performSelfAnalysis' is called.`);var n=(0,Pr.has)(i,"resyncEnabled")?i.resyncEnabled:Hq.DEFAULT_RULE_CONFIG.resyncEnabled,s=(0,Pr.has)(i,"recoveryValueFunc")?i.recoveryValueFunc:Hq.DEFAULT_RULE_CONFIG.recoveryValueFunc,o=this.ruleShortNameIdx<t},r.prototype.orInternal=function(e,t){var i=this.getKeyForAutomaticLookahead(qn.OR_IDX,t),n=(0,Pr.isArray)(e)?e:e.DEF,s=this.getLaFuncFromCache(i),o=s.call(this,n);if(o!==void 0){var a=n[o];return a.ALT.call(this)}this.raiseNoAltException(t,e.ERR_MSG)},r.prototype.ruleFinallyStateUpdate=function(){if(this.RULE_STACK.pop(),this.RULE_OCCURRENCE_STACK.pop(),this.cstFinallyStateUpdate(),this.RULE_STACK.length===0&&this.isAtEndOfInput()===!1){var e=this.LA(1),t=this.errorMessageProvider.buildNotAllInputParsedMessage({firstRedundant:e,ruleName:this.getCurrRuleFullName()});this.SAVE_ERROR(new wy.NotAllInputParsedException(t,e))}},r.prototype.subruleInternal=function(e,t,i){var n;try{var s=i!==void 0?i.ARGS:void 0;return n=e.call(this,t,s),this.cstPostNonTerminal(n,i!==void 0&&i.LABEL!==void 0?i.LABEL:e.ruleName),n}catch(o){this.subruleInternalError(o,i,e.ruleName)}},r.prototype.subruleInternalError=function(e,t,i){throw(0,wy.isRecognitionException)(e)&&e.partialCstResult!==void 0&&(this.cstPostNonTerminal(e.partialCstResult,t!==void 0&&t.LABEL!==void 0?t.LABEL:i),delete e.partialCstResult),e},r.prototype.consumeInternal=function(e,t,i){var n;try{var s=this.LA(1);this.tokenMatcher(s,e)===!0?(this.consumeToken(),n=s):this.consumeInternalError(e,s,i)}catch(o){n=this.consumeInternalRecovery(e,t,o)}return this.cstPostTerminal(i!==void 0&&i.LABEL!==void 0?i.LABEL:e.name,n),n},r.prototype.consumeInternalError=function(e,t,i){var n,s=this.LA(0);throw i!==void 0&&i.ERR_MSG?n=i.ERR_MSG:n=this.errorMessageProvider.buildMismatchTokenMessage({expected:e,actual:t,previous:s,ruleName:this.getCurrRuleFullName()}),this.SAVE_ERROR(new wy.MismatchedTokenException(n,t,s))},r.prototype.consumeInternalRecovery=function(e,t,i){if(this.recoveryEnabled&&i.name==="MismatchedTokenException"&&!this.isBackTracking()){var n=this.getFollowsForInRuleRecovery(e,t);try{return this.tryInRuleRecovery(e,n)}catch(s){throw s.name===Pye.IN_RULE_RECOVERY_EXCEPTION?i:s}}else throw i},r.prototype.saveRecogState=function(){var e=this.errors,t=(0,Pr.cloneArr)(this.RULE_STACK);return{errors:e,lexerState:this.exportLexerState(),RULE_STACK:t,CST_STACK:this.CST_STACK}},r.prototype.reloadRecogState=function(e){this.errors=e.errors,this.importLexerState(e.lexerState),this.RULE_STACK=e.RULE_STACK},r.prototype.ruleInvocationStateUpdate=function(e,t,i){this.RULE_OCCURRENCE_STACK.push(i),this.RULE_STACK.push(e),this.cstInvocationStateUpdate(t,e)},r.prototype.isBackTracking=function(){return this.isBackTrackingStack.length!==0},r.prototype.getCurrRuleFullName=function(){var e=this.getLastExplicitRuleShortName();return this.shortRuleNameToFull[e]},r.prototype.shortRuleNameToFullName=function(e){return this.shortRuleNameToFull[e]},r.prototype.isAtEndOfInput=function(){return this.tokenMatcher(this.LA(1),Gq.EOF)},r.prototype.reset=function(){this.resetLexerState(),this.isBackTrackingStack=[],this.errors=[],this.RULE_STACK=[],this.CST_STACK=[],this.RULE_OCCURRENCE_STACK=[]},r}();By.RecognizerEngine=kye});var qq=w(by=>{"use strict";Object.defineProperty(by,"__esModule",{value:!0});by.ErrorHandler=void 0;var lx=nf(),cx=Gt(),jq=kd(),Rye=jn(),Fye=function(){function r(){}return r.prototype.initErrorHandler=function(e){this._errors=[],this.errorMessageProvider=(0,cx.has)(e,"errorMessageProvider")?e.errorMessageProvider:Rye.DEFAULT_PARSER_CONFIG.errorMessageProvider},r.prototype.SAVE_ERROR=function(e){if((0,lx.isRecognitionException)(e))return e.context={ruleStack:this.getHumanReadableRuleStack(),ruleOccurrenceStack:(0,cx.cloneArr)(this.RULE_OCCURRENCE_STACK)},this._errors.push(e),e;throw Error("Trying to save an Error which is not a RecognitionException")},Object.defineProperty(r.prototype,"errors",{get:function(){return(0,cx.cloneArr)(this._errors)},set:function(e){this._errors=e},enumerable:!1,configurable:!0}),r.prototype.raiseEarlyExitException=function(e,t,i){for(var n=this.getCurrRuleFullName(),s=this.getGAstProductions()[n],o=(0,jq.getLookaheadPathsForOptionalProd)(e,s,t,this.maxLookahead),a=o[0],l=[],c=1;c<=this.maxLookahead;c++)l.push(this.LA(c));var u=this.errorMessageProvider.buildEarlyExitMessage({expectedIterationPaths:a,actual:l,previous:this.LA(0),customUserDescription:i,ruleName:n});throw this.SAVE_ERROR(new lx.EarlyExitException(u,this.LA(1),this.LA(0)))},r.prototype.raiseNoAltException=function(e,t){for(var i=this.getCurrRuleFullName(),n=this.getGAstProductions()[i],s=(0,jq.getLookaheadPathsForOr)(e,n,this.maxLookahead),o=[],a=1;a<=this.maxLookahead;a++)o.push(this.LA(a));var l=this.LA(0),c=this.errorMessageProvider.buildNoViableAltMessage({expectedPathsPerAlt:s,actual:o,previous:l,customUserDescription:t,ruleName:this.getCurrRuleFullName()});throw this.SAVE_ERROR(new lx.NoViableAltException(c,this.LA(1),l))},r}();by.ErrorHandler=Fye});var zq=w(Qy=>{"use strict";Object.defineProperty(Qy,"__esModule",{value:!0});Qy.ContentAssist=void 0;var Jq=Dd(),Wq=Gt(),Nye=function(){function r(){}return r.prototype.initContentAssist=function(){},r.prototype.computeContentAssist=function(e,t){var i=this.gastProductionsCache[e];if((0,Wq.isUndefined)(i))throw Error("Rule ->"+e+"<- does not exist in this grammar.");return(0,Jq.nextPossibleTokensAfter)([i],t,this.tokenMatcher,this.maxLookahead)},r.prototype.getNextPossibleTokenTypes=function(e){var t=(0,Wq.first)(e.ruleStack),i=this.getGAstProductions(),n=i[t],s=new Jq.NextAfterTokenWalker(n,e).startWalking();return s},r}();Qy.ContentAssist=Nye});var rJ=w(xy=>{"use strict";Object.defineProperty(xy,"__esModule",{value:!0});xy.GastRecorder=void 0;var yn=Gt(),Oo=mn(),Tye=Bd(),_q=_g(),$q=TA(),Lye=jn(),Oye=Cy(),vy={description:"This Object indicates the Parser is during Recording Phase"};Object.freeze(vy);var Vq=!0,Xq=Math.pow(2,Oye.BITS_FOR_OCCURRENCE_IDX)-1,eJ=(0,$q.createToken)({name:"RECORDING_PHASE_TOKEN",pattern:Tye.Lexer.NA});(0,_q.augmentTokenTypes)([eJ]);var tJ=(0,$q.createTokenInstance)(eJ,`This IToken indicates the Parser is in Recording Phase - See: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details`,-1,-1,-1,-1,-1,-1);Object.freeze(tJ);var Mye={name:`This CSTNode indicates the Parser is in Recording Phase - See: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details`,children:{}},Kye=function(){function r(){}return r.prototype.initGastRecorder=function(e){this.recordingProdStack=[],this.RECORDING_PHASE=!1},r.prototype.enableRecording=function(){var e=this;this.RECORDING_PHASE=!0,this.TRACE_INIT("Enable Recording",function(){for(var t=function(n){var s=n>0?n:"";e["CONSUME"+s]=function(o,a){return this.consumeInternalRecord(o,n,a)},e["SUBRULE"+s]=function(o,a){return this.subruleInternalRecord(o,n,a)},e["OPTION"+s]=function(o){return this.optionInternalRecord(o,n)},e["OR"+s]=function(o){return this.orInternalRecord(o,n)},e["MANY"+s]=function(o){this.manyInternalRecord(n,o)},e["MANY_SEP"+s]=function(o){this.manySepFirstInternalRecord(n,o)},e["AT_LEAST_ONE"+s]=function(o){this.atLeastOneInternalRecord(n,o)},e["AT_LEAST_ONE_SEP"+s]=function(o){this.atLeastOneSepFirstInternalRecord(n,o)}},i=0;i<10;i++)t(i);e.consume=function(n,s,o){return this.consumeInternalRecord(s,n,o)},e.subrule=function(n,s,o){return this.subruleInternalRecord(s,n,o)},e.option=function(n,s){return this.optionInternalRecord(s,n)},e.or=function(n,s){return this.orInternalRecord(s,n)},e.many=function(n,s){this.manyInternalRecord(n,s)},e.atLeastOne=function(n,s){this.atLeastOneInternalRecord(n,s)},e.ACTION=e.ACTION_RECORD,e.BACKTRACK=e.BACKTRACK_RECORD,e.LA=e.LA_RECORD})},r.prototype.disableRecording=function(){var e=this;this.RECORDING_PHASE=!1,this.TRACE_INIT("Deleting Recording methods",function(){for(var t=0;t<10;t++){var i=t>0?t:"";delete e["CONSUME"+i],delete e["SUBRULE"+i],delete e["OPTION"+i],delete e["OR"+i],delete e["MANY"+i],delete e["MANY_SEP"+i],delete e["AT_LEAST_ONE"+i],delete e["AT_LEAST_ONE_SEP"+i]}delete e.consume,delete e.subrule,delete e.option,delete e.or,delete e.many,delete e.atLeastOne,delete e.ACTION,delete e.BACKTRACK,delete e.LA})},r.prototype.ACTION_RECORD=function(e){},r.prototype.BACKTRACK_RECORD=function(e,t){return function(){return!0}},r.prototype.LA_RECORD=function(e){return Lye.END_OF_FILE},r.prototype.topLevelRuleRecord=function(e,t){try{var i=new Oo.Rule({definition:[],name:e});return i.name=e,this.recordingProdStack.push(i),t.call(this),this.recordingProdStack.pop(),i}catch(n){if(n.KNOWN_RECORDER_ERROR!==!0)try{n.message=n.message+` - This error was thrown during the "grammar recording phase" For more info see: - https://chevrotain.io/docs/guide/internals.html#grammar-recording`}catch{throw n}throw n}},r.prototype.optionInternalRecord=function(e,t){return Ld.call(this,Oo.Option,e,t)},r.prototype.atLeastOneInternalRecord=function(e,t){Ld.call(this,Oo.RepetitionMandatory,t,e)},r.prototype.atLeastOneSepFirstInternalRecord=function(e,t){Ld.call(this,Oo.RepetitionMandatoryWithSeparator,t,e,Vq)},r.prototype.manyInternalRecord=function(e,t){Ld.call(this,Oo.Repetition,t,e)},r.prototype.manySepFirstInternalRecord=function(e,t){Ld.call(this,Oo.RepetitionWithSeparator,t,e,Vq)},r.prototype.orInternalRecord=function(e,t){return Uye.call(this,e,t)},r.prototype.subruleInternalRecord=function(e,t,i){if(Sy(t),!e||(0,yn.has)(e,"ruleName")===!1){var n=new Error(" argument is invalid"+(" expecting a Parser method reference but got: <"+JSON.stringify(e)+">")+(` - inside top level rule: <`+this.recordingProdStack[0].name+">"));throw n.KNOWN_RECORDER_ERROR=!0,n}var s=(0,yn.peek)(this.recordingProdStack),o=e.ruleName,a=new Oo.NonTerminal({idx:t,nonTerminalName:o,label:i==null?void 0:i.LABEL,referencedRule:void 0});return s.definition.push(a),this.outputCst?Mye:vy},r.prototype.consumeInternalRecord=function(e,t,i){if(Sy(t),!(0,_q.hasShortKeyProperty)(e)){var n=new Error(" argument is invalid"+(" expecting a TokenType reference but got: <"+JSON.stringify(e)+">")+(` - inside top level rule: <`+this.recordingProdStack[0].name+">"));throw n.KNOWN_RECORDER_ERROR=!0,n}var s=(0,yn.peek)(this.recordingProdStack),o=new Oo.Terminal({idx:t,terminalType:e,label:i==null?void 0:i.LABEL});return s.definition.push(o),tJ},r}();xy.GastRecorder=Kye;function Ld(r,e,t,i){i===void 0&&(i=!1),Sy(t);var n=(0,yn.peek)(this.recordingProdStack),s=(0,yn.isFunction)(e)?e:e.DEF,o=new r({definition:[],idx:t});return i&&(o.separator=e.SEP),(0,yn.has)(e,"MAX_LOOKAHEAD")&&(o.maxLookahead=e.MAX_LOOKAHEAD),this.recordingProdStack.push(o),s.call(this),n.definition.push(o),this.recordingProdStack.pop(),vy}function Uye(r,e){var t=this;Sy(e);var i=(0,yn.peek)(this.recordingProdStack),n=(0,yn.isArray)(r)===!1,s=n===!1?r:r.DEF,o=new Oo.Alternation({definition:[],idx:e,ignoreAmbiguities:n&&r.IGNORE_AMBIGUITIES===!0});(0,yn.has)(r,"MAX_LOOKAHEAD")&&(o.maxLookahead=r.MAX_LOOKAHEAD);var a=(0,yn.some)(s,function(l){return(0,yn.isFunction)(l.GATE)});return o.hasPredicates=a,i.definition.push(o),(0,yn.forEach)(s,function(l){var c=new Oo.Alternative({definition:[]});o.definition.push(c),(0,yn.has)(l,"IGNORE_AMBIGUITIES")?c.ignoreAmbiguities=l.IGNORE_AMBIGUITIES:(0,yn.has)(l,"GATE")&&(c.ignoreAmbiguities=!0),t.recordingProdStack.push(c),l.ALT.call(t),t.recordingProdStack.pop()}),vy}function Zq(r){return r===0?"":""+r}function Sy(r){if(r<0||r>Xq){var e=new Error("Invalid DSL Method idx value: <"+r+`> - `+("Idx value must be a none negative value smaller than "+(Xq+1)));throw e.KNOWN_RECORDER_ERROR=!0,e}}});var nJ=w(Py=>{"use strict";Object.defineProperty(Py,"__esModule",{value:!0});Py.PerformanceTracer=void 0;var iJ=Gt(),Hye=jn(),Gye=function(){function r(){}return r.prototype.initPerformanceTracer=function(e){if((0,iJ.has)(e,"traceInitPerf")){var t=e.traceInitPerf,i=typeof t=="number";this.traceInitMaxIdent=i?t:1/0,this.traceInitPerf=i?t>0:t}else this.traceInitMaxIdent=0,this.traceInitPerf=Hye.DEFAULT_PARSER_CONFIG.traceInitPerf;this.traceInitIndent=-1},r.prototype.TRACE_INIT=function(e,t){if(this.traceInitPerf===!0){this.traceInitIndent++;var i=new Array(this.traceInitIndent+1).join(" ");this.traceInitIndent <"+e+">");var n=(0,iJ.timer)(t),s=n.time,o=n.value,a=s>10?console.warn:console.log;return this.traceInitIndent time: "+s+"ms"),this.traceInitIndent--,o}else return t()},r}();Py.PerformanceTracer=Gye});var sJ=w(Dy=>{"use strict";Object.defineProperty(Dy,"__esModule",{value:!0});Dy.applyMixins=void 0;function Yye(r,e){e.forEach(function(t){var i=t.prototype;Object.getOwnPropertyNames(i).forEach(function(n){if(n!=="constructor"){var s=Object.getOwnPropertyDescriptor(i,n);s&&(s.get||s.set)?Object.defineProperty(r.prototype,n,s):r.prototype[n]=t.prototype[n]}})})}Dy.applyMixins=Yye});var jn=w(dr=>{"use strict";var AJ=dr&&dr.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(dr,"__esModule",{value:!0});dr.EmbeddedActionsParser=dr.CstParser=dr.Parser=dr.EMPTY_ALT=dr.ParserDefinitionErrorType=dr.DEFAULT_RULE_CONFIG=dr.DEFAULT_PARSER_CONFIG=dr.END_OF_FILE=void 0;var en=Gt(),jye=qj(),oJ=TA(),lJ=xd(),aJ=Cq(),qye=sx(),Jye=Qq(),Wye=Tq(),zye=Oq(),Vye=Kq(),Xye=Yq(),Zye=qq(),_ye=zq(),$ye=rJ(),ewe=nJ(),twe=sJ();dr.END_OF_FILE=(0,oJ.createTokenInstance)(oJ.EOF,"",NaN,NaN,NaN,NaN,NaN,NaN);Object.freeze(dr.END_OF_FILE);dr.DEFAULT_PARSER_CONFIG=Object.freeze({recoveryEnabled:!1,maxLookahead:3,dynamicTokensEnabled:!1,outputCst:!0,errorMessageProvider:lJ.defaultParserErrorProvider,nodeLocationTracking:"none",traceInitPerf:!1,skipValidations:!1});dr.DEFAULT_RULE_CONFIG=Object.freeze({recoveryValueFunc:function(){},resyncEnabled:!0});var rwe;(function(r){r[r.INVALID_RULE_NAME=0]="INVALID_RULE_NAME",r[r.DUPLICATE_RULE_NAME=1]="DUPLICATE_RULE_NAME",r[r.INVALID_RULE_OVERRIDE=2]="INVALID_RULE_OVERRIDE",r[r.DUPLICATE_PRODUCTIONS=3]="DUPLICATE_PRODUCTIONS",r[r.UNRESOLVED_SUBRULE_REF=4]="UNRESOLVED_SUBRULE_REF",r[r.LEFT_RECURSION=5]="LEFT_RECURSION",r[r.NONE_LAST_EMPTY_ALT=6]="NONE_LAST_EMPTY_ALT",r[r.AMBIGUOUS_ALTS=7]="AMBIGUOUS_ALTS",r[r.CONFLICT_TOKENS_RULES_NAMESPACE=8]="CONFLICT_TOKENS_RULES_NAMESPACE",r[r.INVALID_TOKEN_NAME=9]="INVALID_TOKEN_NAME",r[r.NO_NON_EMPTY_LOOKAHEAD=10]="NO_NON_EMPTY_LOOKAHEAD",r[r.AMBIGUOUS_PREFIX_ALTS=11]="AMBIGUOUS_PREFIX_ALTS",r[r.TOO_MANY_ALTS=12]="TOO_MANY_ALTS"})(rwe=dr.ParserDefinitionErrorType||(dr.ParserDefinitionErrorType={}));function iwe(r){return r===void 0&&(r=void 0),function(){return r}}dr.EMPTY_ALT=iwe;var ky=function(){function r(e,t){this.definitionErrors=[],this.selfAnalysisDone=!1;var i=this;if(i.initErrorHandler(t),i.initLexerAdapter(),i.initLooksAhead(t),i.initRecognizerEngine(e,t),i.initRecoverable(t),i.initTreeBuilder(t),i.initContentAssist(),i.initGastRecorder(t),i.initPerformanceTracer(t),(0,en.has)(t,"ignoredIssues"))throw new Error(`The IParserConfig property has been deprecated. - Please use the flag on the relevant DSL method instead. - See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#IGNORING_AMBIGUITIES - For further details.`);this.skipValidations=(0,en.has)(t,"skipValidations")?t.skipValidations:dr.DEFAULT_PARSER_CONFIG.skipValidations}return r.performSelfAnalysis=function(e){throw Error("The **static** `performSelfAnalysis` method has been deprecated. \nUse the **instance** method with the same name instead.")},r.prototype.performSelfAnalysis=function(){var e=this;this.TRACE_INIT("performSelfAnalysis",function(){var t;e.selfAnalysisDone=!0;var i=e.className;e.TRACE_INIT("toFastProps",function(){(0,en.toFastProperties)(e)}),e.TRACE_INIT("Grammar Recording",function(){try{e.enableRecording(),(0,en.forEach)(e.definedRulesNames,function(s){var o=e[s],a=o.originalGrammarAction,l=void 0;e.TRACE_INIT(s+" Rule",function(){l=e.topLevelRuleRecord(s,a)}),e.gastProductionsCache[s]=l})}finally{e.disableRecording()}});var n=[];if(e.TRACE_INIT("Grammar Resolving",function(){n=(0,aJ.resolveGrammar)({rules:(0,en.values)(e.gastProductionsCache)}),e.definitionErrors=e.definitionErrors.concat(n)}),e.TRACE_INIT("Grammar Validations",function(){if((0,en.isEmpty)(n)&&e.skipValidations===!1){var s=(0,aJ.validateGrammar)({rules:(0,en.values)(e.gastProductionsCache),maxLookahead:e.maxLookahead,tokenTypes:(0,en.values)(e.tokensMap),errMsgProvider:lJ.defaultGrammarValidatorErrorProvider,grammarName:i});e.definitionErrors=e.definitionErrors.concat(s)}}),(0,en.isEmpty)(e.definitionErrors)&&(e.recoveryEnabled&&e.TRACE_INIT("computeAllProdsFollows",function(){var s=(0,jye.computeAllProdsFollows)((0,en.values)(e.gastProductionsCache));e.resyncFollows=s}),e.TRACE_INIT("ComputeLookaheadFunctions",function(){e.preComputeLookaheadFunctions((0,en.values)(e.gastProductionsCache))})),!r.DEFER_DEFINITION_ERRORS_HANDLING&&!(0,en.isEmpty)(e.definitionErrors))throw t=(0,en.map)(e.definitionErrors,function(s){return s.message}),new Error(`Parser Definition Errors detected: - `+t.join(` -------------------------------- -`))})},r.DEFER_DEFINITION_ERRORS_HANDLING=!1,r}();dr.Parser=ky;(0,twe.applyMixins)(ky,[qye.Recoverable,Jye.LooksAhead,Wye.TreeBuilder,zye.LexerAdapter,Xye.RecognizerEngine,Vye.RecognizerApi,Zye.ErrorHandler,_ye.ContentAssist,$ye.GastRecorder,ewe.PerformanceTracer]);var nwe=function(r){AJ(e,r);function e(t,i){i===void 0&&(i=dr.DEFAULT_PARSER_CONFIG);var n=this,s=(0,en.cloneObj)(i);return s.outputCst=!0,n=r.call(this,t,s)||this,n}return e}(ky);dr.CstParser=nwe;var swe=function(r){AJ(e,r);function e(t,i){i===void 0&&(i=dr.DEFAULT_PARSER_CONFIG);var n=this,s=(0,en.cloneObj)(i);return s.outputCst=!1,n=r.call(this,t,s)||this,n}return e}(ky);dr.EmbeddedActionsParser=swe});var uJ=w(Ry=>{"use strict";Object.defineProperty(Ry,"__esModule",{value:!0});Ry.createSyntaxDiagramsCode=void 0;var cJ=Dv();function owe(r,e){var t=e===void 0?{}:e,i=t.resourceBase,n=i===void 0?"https://unpkg.com/chevrotain@"+cJ.VERSION+"/diagrams/":i,s=t.css,o=s===void 0?"https://unpkg.com/chevrotain@"+cJ.VERSION+"/diagrams/diagrams.css":s,a=` - - - - - -`,l=` - -`,c=` -'; + const { getByText } = render(Table - {{ name }}); + + expect(getByText('Table - ')).toBeInTheDocument(); + }); + + it('should escape dangerous characters when shouldUnescape is false', () => { + const name = ''; + const { getByText } = render( + + Table - {{ name }} + + ); + + expect(getByText('Table - <script></script>')).toBeInTheDocument(); + }); + }); +}); diff --git a/public/app/core/internationalization/index.tsx b/public/app/core/internationalization/index.tsx index 05eca138eb742..1b9d850c6d00e 100644 --- a/public/app/core/internationalization/index.tsx +++ b/public/app/core/internationalization/index.tsx @@ -3,7 +3,7 @@ import LanguageDetector, { DetectorOptions } from 'i18next-browser-languagedetec import React from 'react'; import { Trans as I18NextTrans, initReactI18next } from 'react-i18next'; // eslint-disable-line no-restricted-imports -import { LANGUAGES, VALID_LANGUAGES } from './constants'; +import { DEFAULT_LANGUAGE, LANGUAGES, VALID_LANGUAGES } from './constants'; const getLanguagePartFromCode = (code: string) => code.split('-')[0].toLowerCase(); @@ -23,7 +23,7 @@ const loadTranslations: BackendModule = { }, }; -export function initializeI18n(language: string) { +export function initializeI18n(language: string): Promise<{ language: string | undefined }> { // This is a placeholder so we can put a 'comment' in the message json files. // Starts with an underscore so it's sorted to the top of the file. Even though it is in a comment the following line is still extracted // t('_comment', 'This file is the source of truth for English strings. Edit this to change plurals and other phrases for the UI.'); @@ -35,19 +35,30 @@ export function initializeI18n(language: string) { // If translations are empty strings (no translation), fall back to the default value in source code returnEmptyString: false, + + // Required to ensure that `resolvedLanguage` is set property when an invalid language is passed (such as through 'detect') + supportedLngs: VALID_LANGUAGES, + fallbackLng: DEFAULT_LANGUAGE, }; - let init = i18n; + let i18nInstance = i18n; if (language === 'detect') { - init = init.use(LanguageDetector); + i18nInstance = i18nInstance.use(LanguageDetector); const detection: DetectorOptions = { order: ['navigator'], caches: [] }; options.detection = detection; } else { options.lng = VALID_LANGUAGES.includes(language) ? language : undefined; } - return init + + const loadPromise = i18nInstance .use(loadTranslations) .use(initReactI18next) // passes i18n down to react-i18next .init(options); + + return loadPromise.then(() => { + return { + language: i18nInstance.resolvedLanguage, + }; + }); } export function changeLanguage(locale: string) { @@ -56,7 +67,7 @@ export function changeLanguage(locale: string) { } export const Trans: typeof I18NextTrans = (props) => { - return ; + return ; }; // Reassign t() so i18next-parser doesn't warn on dynamic key, and we can have 'failOnWarnings' enabled diff --git a/public/app/core/monacoEnv.ts b/public/app/core/monacoEnv.ts new file mode 100644 index 0000000000000..db63c867a1e07 --- /dev/null +++ b/public/app/core/monacoEnv.ts @@ -0,0 +1,32 @@ +import { monacoLanguageRegistry } from '@grafana/data'; +import { CorsWorker as Worker } from 'app/core/utils/CorsWorker'; + +export function setMonacoEnv() { + self.MonacoEnvironment = { + getWorker(_moduleId, label) { + const language = monacoLanguageRegistry.getIfExists(label); + + if (language) { + return language.init(); + } + + if (label === 'json') { + return new Worker(new URL('monaco-editor/esm/vs/language/json/json.worker', import.meta.url)); + } + + if (label === 'css' || label === 'scss' || label === 'less') { + return new Worker(new URL('monaco-editor/esm/vs/language/css/css.worker', import.meta.url)); + } + + if (label === 'html' || label === 'handlebars' || label === 'razor') { + return new Worker(new URL('monaco-editor/esm/vs/language/html/html.worker', import.meta.url)); + } + + if (label === 'typescript' || label === 'javascript') { + return new Worker(new URL('monaco-editor/esm/vs/language/typescript/ts.worker', import.meta.url)); + } + + return new Worker(new URL('monaco-editor/esm/vs/editor/editor.worker', import.meta.url)); + }, + }; +} diff --git a/public/app/core/navigation/GrafanaRoute.test.tsx b/public/app/core/navigation/GrafanaRoute.test.tsx index 46c99b2413974..d599a8479f256 100644 --- a/public/app/core/navigation/GrafanaRoute.test.tsx +++ b/public/app/core/navigation/GrafanaRoute.test.tsx @@ -53,7 +53,7 @@ describe('GrafanaRoute', () => { setup({ route: { component: PageComponent, path: '' } }); - expect(await screen.findByText('Loading...')).toBeInTheDocument(); + expect(await screen.findByLabelText('Loading')).toBeInTheDocument(); }); it('Shows error on page error', async () => { diff --git a/public/app/core/navigation/GrafanaRouteError.tsx b/public/app/core/navigation/GrafanaRouteError.tsx index 6540312028a3e..33c55654fb04b 100644 --- a/public/app/core/navigation/GrafanaRouteError.tsx +++ b/public/app/core/navigation/GrafanaRouteError.tsx @@ -2,8 +2,8 @@ import { css } from '@emotion/css'; import React, { ErrorInfo, useEffect } from 'react'; import { useLocation } from 'react-router-dom'; -import { locationUtil, PageLayoutType } from '@grafana/data'; -import { Button, ErrorWithStack, stylesFactory } from '@grafana/ui'; +import { GrafanaTheme2, locationUtil, PageLayoutType } from '@grafana/data'; +import { Button, ErrorWithStack, useStyles2 } from '@grafana/ui'; import { Page } from '../components/Page/Page'; @@ -15,6 +15,7 @@ interface Props { export function GrafanaRouteError({ error, errorInfo }: Props) { const location = useLocation(); const isChunkLoadingError = error?.name === 'ChunkLoadError'; + const styles = useStyles2(getStyles); useEffect(() => { // Auto reload page 1 time if we have a chunk load error @@ -27,18 +28,16 @@ export function GrafanaRouteError({ error, errorInfo }: Props) { return ( -
+
{isChunkLoadingError && (

Unable to find application file


Grafana has likely been updated. Please try reloading the page.


-
- -
+
)} @@ -50,9 +49,9 @@ export function GrafanaRouteError({ error, errorInfo }: Props) { ); } -const getStyles = stylesFactory(() => { - return css` - width: 500px; - margin: 64px auto; - `; +const getStyles = (theme: GrafanaTheme2) => ({ + container: css({ + width: '500px', + margin: theme.spacing(8, 'auto'), + }), }); diff --git a/public/app/core/navigation/GrafanaRouteLoading.tsx b/public/app/core/navigation/GrafanaRouteLoading.tsx index 558c264b0ede9..01830aa745938 100644 --- a/public/app/core/navigation/GrafanaRouteLoading.tsx +++ b/public/app/core/navigation/GrafanaRouteLoading.tsx @@ -1,20 +1,24 @@ import { css } from '@emotion/css'; import React from 'react'; -import { LoadingPlaceholder, useStyles2 } from '@grafana/ui'; +import { GrafanaTheme2 } from '@grafana/data'; +import { useStyles2 } from '@grafana/ui'; + +import { BouncingLoader } from '../components/BouncingLoader/BouncingLoader'; export function GrafanaRouteLoading() { const styles = useStyles2(getStyles); return (
- +
); } -const getStyles = () => ({ +const getStyles = (theme: GrafanaTheme2) => ({ loadingPage: css({ + backgroundColor: theme.colors.background.primary, height: '100%', flexDrection: 'column', display: 'flex', diff --git a/public/app/core/navigation/types.ts b/public/app/core/navigation/types.ts index 5a06963cd0e71..9469221cb6dee 100644 --- a/public/app/core/navigation/types.ts +++ b/public/app/core/navigation/types.ts @@ -1,5 +1,5 @@ import React from 'react'; -import { RouteComponentProps } from 'react-router-dom'; +import { RouteComponentProps } from 'react-router'; import { UrlQueryMap } from '@grafana/data'; diff --git a/public/app/core/reducers/appNotification.ts b/public/app/core/reducers/appNotification.ts index 5f88fd41e9930..d9f563d364e31 100644 --- a/public/app/core/reducers/appNotification.ts +++ b/public/app/core/reducers/appNotification.ts @@ -1,4 +1,4 @@ -import { createSlice, PayloadAction } from '@reduxjs/toolkit'; +import { createSelector, createSlice, PayloadAction } from '@reduxjs/toolkit'; import { AppNotification, AppNotificationSeverity, AppNotificationsState } from 'app/types/'; @@ -60,10 +60,12 @@ export const appNotificationsReducer = appNotificationsSlice.reducer; // Selectors export const selectLastReadTimestamp = (state: AppNotificationsState) => state.lastRead; -export const selectAll = (state: AppNotificationsState) => - Object.values(state.byId).sort((a, b) => b.timestamp - a.timestamp); -export const selectWarningsAndErrors = (state: AppNotificationsState) => selectAll(state).filter(isAtLeastWarning); -export const selectVisible = (state: AppNotificationsState) => Object.values(state.byId).filter((n) => n.showing); +export const selectById = (state: AppNotificationsState) => state.byId; +export const selectAll = createSelector(selectById, (byId) => + Object.values(byId).sort((a, b) => b.timestamp - a.timestamp) +); +export const selectWarningsAndErrors = createSelector(selectAll, (all) => all.filter(isAtLeastWarning)); +export const selectVisible = createSelector(selectById, (byId) => Object.values(byId).filter((n) => n.showing)); // Helper functions diff --git a/public/app/core/reducers/root.test.ts b/public/app/core/reducers/root.test.ts index 6bb8712b23148..3396fc0d18c8c 100644 --- a/public/app/core/reducers/root.test.ts +++ b/public/app/core/reducers/root.test.ts @@ -9,6 +9,7 @@ import { createRootReducer } from './root'; jest.mock('@grafana/runtime', () => ({ ...jest.requireActual('@grafana/runtime'), config: { + ...jest.requireActual('@grafana/runtime').config, bootData: { navTree: [], user: {}, diff --git a/public/app/core/reducers/root.ts b/public/app/core/reducers/root.ts index 9ab94dbdf07e0..c776ce8c49cc6 100644 --- a/public/app/core/reducers/root.ts +++ b/public/app/core/reducers/root.ts @@ -2,7 +2,6 @@ import { ReducersMapObject } from '@reduxjs/toolkit'; import { AnyAction, combineReducers } from 'redux'; import sharedReducers from 'app/core/reducers'; -import { togglesApi } from 'app/features/admin/AdminFeatureTogglesAPI'; import ldapReducers from 'app/features/admin/state/reducers'; import alertingReducers from 'app/features/alerting/state/reducers'; import apiKeysReducers from 'app/features/api-keys/state/reducers'; @@ -17,6 +16,7 @@ import exploreReducers from 'app/features/explore/state/main'; import foldersReducers from 'app/features/folders/state/reducers'; import invitesReducers from 'app/features/invites/state/reducers'; import importDashboardReducers from 'app/features/manage-dashboards/state/reducers'; +import { migrateToCloudAPI } from 'app/features/migrate-to-cloud/api'; import organizationReducers from 'app/features/org/state/reducers'; import panelsReducers from 'app/features/panel/state/reducers'; import { reducer as pluginsReducer } from 'app/features/plugins/admin/state/reducer'; @@ -56,7 +56,7 @@ const rootReducers = { [alertingApi.reducerPath]: alertingApi.reducer, [publicDashboardApi.reducerPath]: publicDashboardApi.reducer, [browseDashboardsAPI.reducerPath]: browseDashboardsAPI.reducer, - [togglesApi.reducerPath]: togglesApi.reducer, + [migrateToCloudAPI.reducerPath]: migrateToCloudAPI.reducer, }; const addedReducers = {}; diff --git a/public/app/core/selectors/navModel.ts b/public/app/core/selectors/navModel.ts index c7c15a4fc74b9..fc758061db555 100644 --- a/public/app/core/selectors/navModel.ts +++ b/public/app/core/selectors/navModel.ts @@ -1,5 +1,6 @@ +import memoizeOne from 'memoize-one'; + import { NavModel, NavModelItem, NavIndex } from '@grafana/data'; -import { newBrowseDashboardsEnabled } from 'app/features/browse-dashboards/featureFlag'; import { FOLDER_ID } from 'app/features/folders/state/navModel'; import { HOME_NAV_ID } from '../reducers/navModel'; @@ -19,28 +20,30 @@ const getNotFoundModel = (): NavModel => { }; }; -export const getNavModel = (navIndex: NavIndex, id: string, fallback?: NavModel, onlyChild = false): NavModel => { - if (navIndex[id]) { - const node = navIndex[id]; - const main = onlyChild ? node : getRootSectionForNode(node); - const mainWithActive = enrichNodeWithActiveState(main, id); +export const getNavModel = memoizeOne( + (navIndex: NavIndex, id: string, fallback?: NavModel, onlyChild = false): NavModel => { + if (navIndex[id]) { + const node = navIndex[id]; + const main = onlyChild ? node : getRootSectionForNode(node); + const mainWithActive = enrichNodeWithActiveState(main, id); - return { - node: node, - main: mainWithActive, - }; - } + return { + node: node, + main: mainWithActive, + }; + } - if (fallback) { - return fallback; - } + if (fallback) { + return fallback; + } - return getNotFoundModel(); -}; + return getNotFoundModel(); + } +); export function getRootSectionForNode(node: NavModelItem): NavModelItem { // Don't recurse fully up the folder tree when nested folders is enabled - if (newBrowseDashboardsEnabled() && node.id === FOLDER_ID) { + if (node.id === FOLDER_ID) { return node; } else { return node.parentItem && node.parentItem.id !== HOME_NAV_ID ? getRootSectionForNode(node.parentItem) : node; diff --git a/public/app/core/services/ModalManager.ts b/public/app/core/services/ModalManager.ts deleted file mode 100644 index 1c04169bcda58..0000000000000 --- a/public/app/core/services/ModalManager.ts +++ /dev/null @@ -1,102 +0,0 @@ -import React from 'react'; -import { createRoot } from 'react-dom/client'; - -import { textUtil } from '@grafana/data'; -import { config, CopyPanelEvent } from '@grafana/runtime'; -import { ConfirmModal, ConfirmModalProps } from '@grafana/ui'; -import appEvents from 'app/core/app_events'; -import { copyPanel } from 'app/features/dashboard/utils/panel'; - -import { - ShowConfirmModalEvent, - ShowConfirmModalPayload, - ShowModalReactEvent, - ShowModalReactPayload, -} from '../../types/events'; -import { AngularModalProxy } from '../components/modals/AngularModalProxy'; -import { provideTheme } from '../utils/ConfigProvider'; - -export class ModalManager { - reactModalRoot = document.body; - reactModalNode = document.createElement('div'); - root = createRoot(this.reactModalNode); - - init() { - appEvents.subscribe(ShowConfirmModalEvent, (e) => this.showConfirmModal(e.payload)); - appEvents.subscribe(ShowModalReactEvent, (e) => this.showModalReact(e.payload)); - appEvents.subscribe(CopyPanelEvent, (e) => copyPanel(e.payload)); - } - - showModalReact(options: ShowModalReactPayload) { - const { component, props } = options; - const modalProps = { - component, - props: { - ...props, - isOpen: true, - onDismiss: this.onReactModalDismiss, - }, - }; - - const elem = React.createElement(provideTheme(AngularModalProxy, config.theme2), modalProps); - this.reactModalRoot.appendChild(this.reactModalNode); - this.root.render(elem); - } - - onReactModalDismiss = () => { - this.root.render(null); - this.reactModalRoot.removeChild(this.reactModalNode); - }; - - showConfirmModal(payload: ShowConfirmModalPayload) { - const { - confirmText, - onConfirm = () => undefined, - onDismiss, - text2, - altActionText, - onAltAction, - noText, - text, - text2htmlBind, - yesText = 'Yes', - icon, - title = 'Confirm', - yesButtonVariant, - } = payload; - const props: ConfirmModalProps = { - confirmText: yesText, - confirmButtonVariant: yesButtonVariant, - confirmationText: confirmText, - icon, - title, - body: text, - description: text2 && text2htmlBind ? textUtil.sanitize(text2) : text2, - isOpen: true, - dismissText: noText, - onConfirm: () => { - onConfirm(); - this.onReactModalDismiss(); - }, - onDismiss: () => { - onDismiss?.(); - this.onReactModalDismiss(); - }, - onAlternative: onAltAction - ? () => { - onAltAction(); - this.onReactModalDismiss(); - } - : undefined, - alternativeText: altActionText, - }; - const modalProps = { - component: ConfirmModal, - props, - }; - - const elem = React.createElement(provideTheme(AngularModalProxy, config.theme2), modalProps); - this.reactModalRoot.appendChild(this.reactModalNode); - this.root.render(elem); - } -} diff --git a/public/app/core/services/NewFrontendAssetsChecker.test.ts b/public/app/core/services/NewFrontendAssetsChecker.test.ts new file mode 100644 index 0000000000000..33a45ec06401b --- /dev/null +++ b/public/app/core/services/NewFrontendAssetsChecker.test.ts @@ -0,0 +1,49 @@ +import { locationService, setBackendSrv, BackendSrv } from '@grafana/runtime'; + +import { NewFrontendAssetsChecker } from './NewFrontendAssetsChecker'; + +describe('NewFrontendAssetsChecker', () => { + const backendApiGet = jest.fn().mockReturnValue(Promise.resolve({})); + const locationReload = jest.fn(); + + const originalLocation = window.location; + + beforeAll(() => { + Object.defineProperty(window, 'location', { + configurable: true, + value: { reload: locationReload }, + }); + }); + + afterAll(() => { + Object.defineProperty(window, 'location', { configurable: true, value: originalLocation }); + }); + + setBackendSrv({ + get: backendApiGet, + } as unknown as BackendSrv); + + it('Should skip update checks if below interval', () => { + const checker = new NewFrontendAssetsChecker(); + checker.start(); + + locationService.push('/d/123'); + + expect(backendApiGet).toHaveBeenCalledTimes(0); + }); + + it('Should do update check when changing dashboard or going home', async () => { + const checker = new NewFrontendAssetsChecker(0); + checker.start(); + + locationService.push('/d/asd'); + locationService.push('/d/other'); + locationService.push('/d/other?viewPanel=2'); + locationService.push('/ignored'); + locationService.push('/ignored?asd'); + locationService.push('/ignored/sub'); + locationService.push('/home'); + + expect(backendApiGet).toHaveBeenCalledTimes(2); + }); +}); diff --git a/public/app/core/services/NewFrontendAssetsChecker.ts b/public/app/core/services/NewFrontendAssetsChecker.ts new file mode 100644 index 0000000000000..6a375add6fc2f --- /dev/null +++ b/public/app/core/services/NewFrontendAssetsChecker.ts @@ -0,0 +1,112 @@ +import { Location } from 'history'; +import { isEqual } from 'lodash'; + +import { getBackendSrv, getGrafanaLiveSrv, locationService, reportInteraction } from '@grafana/runtime'; + +export class NewFrontendAssetsChecker { + private hasUpdates = false; + private previous?: FrontendAssetsAPIDTO; + private interval: number; + private checked = Date.now(); + private prevLocationPath = ''; + + public constructor(interval?: number) { + // Default to never check for updates if last check was 5 minutes ago + this.interval = interval ?? 1000 * 60 * 5; + } + + public start() { + // Subscribe to live connection state changes and check for new assets when re-connected + const live = getGrafanaLiveSrv(); + + if (live) { + live.getConnectionState().subscribe((connected) => { + if (connected) { + this._checkForUpdates(); + } + }); + } + + // Subscribe to location changes + locationService.getHistory().listen(this.locationUpdated.bind(this)); + this.prevLocationPath = locationService.getLocation().pathname; + } + + /** + * Tries to detect some navigation events where it's safe to trigger a reload + */ + private locationUpdated(location: Location) { + if (this.prevLocationPath === location.pathname) { + return; + } + + const newLocationSegments = location.pathname.split('/'); + + // We are going to home + if (newLocationSegments[1] === '/' && this.prevLocationPath !== '/') { + this.reloadIfUpdateDetected(); + } + // Moving to dashboard (or changing dashboards) + else if (newLocationSegments[1] === 'd') { + this.reloadIfUpdateDetected(); + } + // Track potential page change + else if (this.hasUpdates) { + reportInteraction('new_frontend_assets_reload_ignored', { + newLocation: location.pathname, + prevLocation: this.prevLocationPath, + }); + } + + this.prevLocationPath = location.pathname; + } + + private async _checkForUpdates() { + if (this.hasUpdates) { + return; + } + + // Don't check too often + if (Date.now() - this.checked < this.interval) { + return; + } + + this.checked = Date.now(); + + const previous = this.previous; + const result: FrontendAssetsAPIDTO = await getBackendSrv().get('/api/frontend/assets'); + + if (previous && !isEqual(previous, result)) { + this.hasUpdates = true; + + // Report that we detected new assets + reportInteraction('new_frontend_assets_detected', { + assets: previous.assets !== result.assets, + plugins: previous.plugins !== result.plugins, + version: previous.version !== result.version, + flags: previous.flags !== result.flags, + }); + } + + this.previous = result; + } + + /** This is called on page navigation events */ + public reloadIfUpdateDetected() { + if (this.hasUpdates) { + // Report that we detected new assets + reportInteraction('new_frontend_assets_reload', {}); + window.location.reload(); + } + + // Async check if the assets have changed + this._checkForUpdates(); + } +} + +interface FrontendAssetsAPIDTO { + assets: string; + flags: string; + plugins: string; + version: string; +} diff --git a/public/app/core/services/backend_srv.ts b/public/app/core/services/backend_srv.ts index ba4951b8d85df..559fbff18ff30 100644 --- a/public/app/core/services/backend_srv.ts +++ b/public/app/core/services/backend_srv.ts @@ -16,11 +16,10 @@ import { import { v4 as uuidv4 } from 'uuid'; import { AppEvents, DataQueryErrorType } from '@grafana/data'; -import { GrafanaEdition } from '@grafana/data/src/types/config'; import { BackendSrv as BackendService, BackendSrvRequest, config, FetchError, FetchResponse } from '@grafana/runtime'; import appEvents from 'app/core/app_events'; import { getConfig } from 'app/core/config'; -import { getSessionExpiry } from 'app/core/utils/auth'; +import { getSessionExpiry, hasSessionExpiry } from 'app/core/utils/auth'; import { loadUrlToken } from 'app/core/utils/urlToken'; import { DashboardModel } from 'app/features/dashboard/state'; import { DashboardSearchItem } from 'app/features/search/types'; @@ -56,11 +55,16 @@ export interface FolderRequestOptions { const GRAFANA_TRACEID_HEADER = 'grafana-trace-id'; +export interface InspectorStream { + response: FetchResponse | FetchError; + requestId?: string; +} + export class BackendSrv implements BackendService { private inFlightRequests: Subject = new Subject(); private HTTP_REQUEST_CANCELED = -1; private noBackendCache: boolean; - private inspectorStream: Subject = new Subject(); + private inspectorStream: Subject = new Subject(); private readonly fetchQueue: FetchQueue; private readonly responseQueue: ResponseQueue; private _tokenRotationInProgress?: Observable | null = null; @@ -94,10 +98,6 @@ export class BackendSrv implements BackendService { } private async initGrafanaDeviceID() { - if (config.buildInfo?.edition === GrafanaEdition.OpenSource) { - return; - } - try { const fp = await FingerprintJS.load(); const result = await fp.get(); @@ -161,8 +161,7 @@ export class BackendSrv implements BackendService { } } - // Add device id header if not OSS build - if (config.buildInfo?.edition !== GrafanaEdition.OpenSource && this.deviceID) { + if (!!this.deviceID) { options.headers = options.headers ?? {}; options.headers['X-Grafana-Device-Id'] = `${this.deviceID}`; } @@ -339,7 +338,7 @@ export class BackendSrv implements BackendService { }, 50); } - this.inspectorStream.next(err); + this.inspectorStream.next({ response: err, requestId: options.requestId }); return err; } @@ -362,7 +361,7 @@ export class BackendSrv implements BackendService { }), tap((response) => { this.showSuccessAlert(response); - this.inspectorStream.next(response); + this.inspectorStream.next({ response: response, requestId: options.requestId }); }) ); } @@ -391,10 +390,11 @@ export class BackendSrv implements BackendService { } let authChecker = this.loginPing(); - - const expired = getSessionExpiry() * 1000 < Date.now(); - if (config.featureToggles.clientTokenRotation && expired) { - authChecker = this.rotateToken(); + if (hasSessionExpiry()) { + const expired = getSessionExpiry() * 1000 < Date.now(); + if (expired) { + authChecker = this.rotateToken(); + } } return from(authChecker).pipe( @@ -452,7 +452,7 @@ export class BackendSrv implements BackendService { ); } - getInspectorStream(): Observable { + getInspectorStream(): Observable { return this.inspectorStream; } @@ -516,16 +516,13 @@ export class BackendSrv implements BackendService { return this.get(`/api/dashboards/uid/${uid}`); } - validateDashboard(dashboard: DashboardModel) { - // We want to send the dashboard as a JSON string (in the JSON body payload) so we can get accurate error line numbers back - const dashboardJson = JSON.stringify(dashboard, replaceJsonNulls, 2); - - return this.request({ - method: 'POST', - url: `/api/dashboards/validate`, - data: { dashboard: dashboardJson }, - showSuccessAlert: false, - showErrorAlert: false, + validateDashboard(dashboard: DashboardModel): Promise { + // support for this function will be implemented in the k8s flavored api-server + // hidden by experimental feature flag: + // config.featureToggles.showDashboardValidationWarnings + return Promise.resolve({ + isValid: false, + message: 'dashboard validation is supported', }); } @@ -553,10 +550,3 @@ interface ValidateDashboardResponse { isValid: boolean; message?: string; } - -function replaceJsonNulls(key: string, value: T): T | undefined { - if (typeof value === 'number' && !Number.isFinite(value)) { - return undefined; - } - return value; -} diff --git a/public/app/core/services/context_srv.ts b/public/app/core/services/context_srv.ts index 6b49da8f97e25..ab1016fd71a30 100644 --- a/public/app/core/services/context_srv.ts +++ b/public/app/core/services/context_srv.ts @@ -15,6 +15,7 @@ export const AutoRefreshInterval = 'auto'; export class User implements Omit { isSignedIn: boolean; id: number; + uid: string; login: string; email: string; name: string; @@ -39,6 +40,7 @@ export class User implements Omit { constructor() { this.id = 0; + this.uid = ''; this.isGrafanaAdmin = false; this.isSignedIn = false; this.orgRole = ''; @@ -209,11 +211,6 @@ export class ContextSrv { return false; } - // skip if feature toggle is not enabled - if (!config.featureToggles.clientTokenRotation) { - return false; - } - // skip if there is no session to rotate // if a user has a session but not yet a session expiry cookie, can happen during upgrade // from an older version of grafana, we never schedule the job and the fallback logic @@ -227,7 +224,7 @@ export class ContextSrv { } private cancelTokenRotationJob() { - if (config.featureToggles.clientTokenRotation && this.tokenRotationJobId > 0) { + if (this.tokenRotationJobId > 0) { clearTimeout(this.tokenRotationJobId); } } diff --git a/public/app/core/services/echo/backends/grafana-javascript-agent/GrafanaJavascriptAgentBackend.test.ts b/public/app/core/services/echo/backends/grafana-javascript-agent/GrafanaJavascriptAgentBackend.test.ts index 0127f44ae3d64..fd3631eec7881 100644 --- a/public/app/core/services/echo/backends/grafana-javascript-agent/GrafanaJavascriptAgentBackend.test.ts +++ b/public/app/core/services/echo/backends/grafana-javascript-agent/GrafanaJavascriptAgentBackend.test.ts @@ -1,25 +1,50 @@ import { BuildInfo } from '@grafana/data'; import { GrafanaEdition } from '@grafana/data/src/types/config'; -import { BaseTransport, Instrumentation, InternalLoggerLevel } from '@grafana/faro-core'; -import { FetchTransport, initializeFaro } from '@grafana/faro-web-sdk'; -import { EchoEventType, EchoMeta } from '@grafana/runtime'; +import { Faro, Instrumentation } from '@grafana/faro-core'; +import * as faroWebSdkModule from '@grafana/faro-web-sdk'; +import { BrowserConfig, FetchTransport } from '@grafana/faro-web-sdk'; +import { EchoSrvTransport } from './EchoSrvTransport'; import { GrafanaJavascriptAgentBackend, GrafanaJavascriptAgentBackendOptions } from './GrafanaJavascriptAgentBackend'; -import { GrafanaJavascriptAgentEchoEvent } from './types'; - -jest.mock('@grafana/faro-web-sdk', () => { - const originalModule = jest.requireActual('@grafana/faro-web-sdk'); - return { - __esModule: true, - ...originalModule, - initializeFaro: jest.fn(), - }; -}); describe('GrafanaJavascriptAgentEchoBackend', () => { + let mockedSetUser: jest.Mock; + let initializeFaroMock: jest.SpyInstance; + beforeEach(() => { + // arrange + mockedSetUser = jest.fn(); + const mockedInstrumentationsForConfig: Instrumentation[] = []; + const mockedInstrumentations = { + add: jest.fn(), + instrumentations: mockedInstrumentationsForConfig, + remove: jest.fn(), + }; + const mockedInternalLogger = { + prefix: 'Faro', + debug: jest.fn(), + info: jest.fn(), + warn: jest.fn(), + error: jest.fn(), + }; + + initializeFaroMock = jest.spyOn(faroWebSdkModule, 'initializeFaro').mockReturnValueOnce({ + ...faroWebSdkModule.faro, + api: { + ...faroWebSdkModule.faro.api, + setUser: mockedSetUser, + }, + config: { + ...faroWebSdkModule.faro.config, + instrumentations: mockedInstrumentationsForConfig, + }, + instrumentations: mockedInstrumentations, + internalLogger: mockedInternalLogger, + }); + }); + + afterEach(() => { jest.resetAllMocks(); - window.fetch = jest.fn(); jest.resetModules(); jest.clearAllMocks(); }); @@ -28,6 +53,7 @@ describe('GrafanaJavascriptAgentEchoBackend', () => { version: '1.0', commit: 'abcd123', env: 'production', + versionString: 'Grafana v1.0 (abcd123)', edition: GrafanaEdition.OpenSource, latestVersion: 'ba', hasUpdate: false, @@ -50,106 +76,27 @@ describe('GrafanaJavascriptAgentEchoBackend', () => { }, }; - it('will set up FetchTransport if customEndpoint is provided', async () => { + it('will set up FetchTransport if customEndpoint is provided', () => { // arrange - const originalModule = jest.requireActual('@grafana/faro-web-sdk'); - jest.mocked(initializeFaro).mockImplementation(originalModule.initializeFaro); + const constructorSpy = jest.spyOn(faroWebSdkModule, 'FetchTransport'); //act - const backend = new GrafanaJavascriptAgentBackend(options); + new GrafanaJavascriptAgentBackend(options); //assert - expect(backend.transports.length).toEqual(1); - expect(backend.transports[0]).toBeInstanceOf(FetchTransport); + expect(constructorSpy).toHaveBeenCalledTimes(1); + expect(initializeFaroMock).toHaveBeenCalledTimes(1); + expect(initializeFaroMock.mock.calls[0][0].transports?.length).toEqual(2); + expect(initializeFaroMock.mock.calls[0][0].transports?.[0]).toBeInstanceOf(EchoSrvTransport); + expect(initializeFaroMock.mock.calls[0][0].transports?.[1]).toBeInstanceOf(FetchTransport); }); it('will initialize GrafanaJavascriptAgent and set user', async () => { - // arrange - const mockedSetUser = jest.fn(); - const mockedInstrumentationsForConfig: Instrumentation[] = []; - const mockedInstrumentations = { - add: jest.fn(), - instrumentations: mockedInstrumentationsForConfig, - remove: jest.fn(), - }; - const mockedInternalLogger = { - prefix: 'Faro', - debug: jest.fn(), - info: jest.fn(), - warn: jest.fn(), - error: jest.fn(), - }; - const mockedAgent = () => { - return { - api: { - setUser: mockedSetUser, - pushLog: jest.fn(), - callOriginalConsoleMethod: jest.fn(), - pushError: jest.fn(), - pushMeasurement: jest.fn(), - pushTraces: jest.fn(), - pushEvent: jest.fn(), - initOTEL: jest.fn(), - getOTEL: jest.fn(), - getTraceContext: jest.fn(), - changeStacktraceParser: jest.fn(), - getStacktraceParser: jest.fn(), - isOTELInitialized: jest.fn(), - setSession: jest.fn(), - getSession: jest.fn(), - resetUser: jest.fn(), - resetSession: jest.fn(), - setView: jest.fn(), - getView: jest.fn(), - }, - config: { - globalObjectKey: '', - preventGlobalExposure: false, - transports: [], - instrumentations: mockedInstrumentationsForConfig, - metas: [], - parseStacktrace: jest.fn(), - app: jest.fn(), - paused: false, - dedupe: true, - isolate: false, - internalLoggerLevel: InternalLoggerLevel.ERROR, - unpatchedConsole: { ...console }, - }, - metas: { - add: jest.fn(), - remove: jest.fn(), - value: {}, - addListener: jest.fn(), - removeListener: jest.fn(), - }, - transports: { - add: jest.fn(), - execute: jest.fn(), - transports: [], - pause: jest.fn(), - unpause: jest.fn(), - addBeforeSendHooks: jest.fn(), - addIgnoreErrorsPatterns: jest.fn(), - getBeforeSendHooks: jest.fn(), - isPaused: jest.fn(), - remove: jest.fn(), - removeBeforeSendHooks: jest.fn(), - }, - pause: jest.fn(), - unpause: jest.fn(), - instrumentations: mockedInstrumentations, - internalLogger: mockedInternalLogger, - unpatchedConsole: { ...console }, - }; - }; - jest.mocked(initializeFaro).mockImplementation(mockedAgent); - //act new GrafanaJavascriptAgentBackend(options); //assert - expect(initializeFaro).toHaveBeenCalledTimes(1); + expect(initializeFaroMock).toHaveBeenCalledTimes(1); expect(mockedSetUser).toHaveBeenCalledTimes(1); expect(mockedSetUser).toHaveBeenCalledWith({ id: '504', @@ -159,111 +106,6 @@ describe('GrafanaJavascriptAgentEchoBackend', () => { }); }); - it('will forward events to transports', async () => { - //arrange - const mockedSetUser = jest.fn(); - const mockedInstrumentationsForConfig: Instrumentation[] = []; - const mockedInstrumentations = { - add: jest.fn(), - instrumentations: mockedInstrumentationsForConfig, - remove: jest.fn(), - }; - const mockedInternalLogger = { - prefix: 'Faro', - debug: jest.fn(), - info: jest.fn(), - warn: jest.fn(), - error: jest.fn(), - }; - const mockedAgent = () => { - return { - api: { - setUser: mockedSetUser, - pushLog: jest.fn(), - callOriginalConsoleMethod: jest.fn(), - pushError: jest.fn(), - pushMeasurement: jest.fn(), - pushTraces: jest.fn(), - pushEvent: jest.fn(), - initOTEL: jest.fn(), - getOTEL: jest.fn(), - getTraceContext: jest.fn(), - changeStacktraceParser: jest.fn(), - getStacktraceParser: jest.fn(), - isOTELInitialized: jest.fn(), - setSession: jest.fn(), - getSession: jest.fn(), - resetUser: jest.fn(), - resetSession: jest.fn(), - setView: jest.fn(), - getView: jest.fn(), - }, - config: { - globalObjectKey: '', - preventGlobalExposure: false, - transports: [], - instrumentations: mockedInstrumentationsForConfig, - metas: [], - parseStacktrace: jest.fn(), - app: jest.fn(), - paused: false, - dedupe: true, - isolate: false, - internalLoggerLevel: InternalLoggerLevel.ERROR, - unpatchedConsole: { ...console }, - }, - metas: { - add: jest.fn(), - remove: jest.fn(), - value: {}, - addListener: jest.fn(), - removeListener: jest.fn(), - }, - transports: { - add: jest.fn(), - execute: jest.fn(), - transports: [], - pause: jest.fn(), - unpause: jest.fn(), - addBeforeSendHooks: jest.fn(), - addIgnoreErrorsPatterns: jest.fn(), - getBeforeSendHooks: jest.fn(), - isPaused: jest.fn(), - remove: jest.fn(), - removeBeforeSendHooks: jest.fn(), - }, - pause: jest.fn(), - unpause: jest.fn(), - instrumentations: mockedInstrumentations, - internalLogger: mockedInternalLogger, - unpatchedConsole: { ...console }, - }; - }; - - jest.mocked(initializeFaro).mockImplementation(mockedAgent); - const backend = new GrafanaJavascriptAgentBackend({ - ...options, - preventGlobalExposure: true, - }); - - backend.transports = [ - /* eslint-disable */ - { send: jest.fn() } as unknown as BaseTransport, - { send: jest.fn() } as unknown as BaseTransport, - ]; - const event: GrafanaJavascriptAgentEchoEvent = { - type: EchoEventType.GrafanaJavascriptAgent, - payload: { foo: 'bar' } as unknown as GrafanaJavascriptAgentEchoEvent, - meta: {} as unknown as EchoMeta, - }; - /* eslint-enable */ - backend.addEvent(event); - backend.transports.forEach((transport) => { - expect(transport.send).toHaveBeenCalledTimes(1); - expect(transport.send).toHaveBeenCalledWith(event.payload); - }); - }); - //@FIXME - make integration test work // it('integration test with EchoSrv and GrafanaJavascriptAgent', async () => { diff --git a/public/app/core/services/echo/backends/grafana-javascript-agent/GrafanaJavascriptAgentBackend.ts b/public/app/core/services/echo/backends/grafana-javascript-agent/GrafanaJavascriptAgentBackend.ts index ddb78077f4eb3..c20b8ec34f1d2 100644 --- a/public/app/core/services/echo/backends/grafana-javascript-agent/GrafanaJavascriptAgentBackend.ts +++ b/public/app/core/services/echo/backends/grafana-javascript-agent/GrafanaJavascriptAgentBackend.ts @@ -1,13 +1,14 @@ import { BuildInfo } from '@grafana/data'; -import { BaseTransport } from '@grafana/faro-core'; +import { BaseTransport, defaultInternalLoggerLevel } from '@grafana/faro-core'; import { initializeFaro, - defaultMetas, BrowserConfig, ErrorsInstrumentation, ConsoleInstrumentation, WebVitalsInstrumentation, + SessionInstrumentation, FetchTransport, + type Instrumentation, } from '@grafana/faro-web-sdk'; import { EchoBackend, EchoEvent, EchoEventType } from '@grafana/runtime'; @@ -28,15 +29,15 @@ export class GrafanaJavascriptAgentBackend { supportedEvents = [EchoEventType.GrafanaJavascriptAgent]; private faroInstance; - transports: BaseTransport[]; constructor(public options: GrafanaJavascriptAgentBackendOptions) { - // configure instrumentalizations - const instrumentations = []; - this.transports = []; + // configure instrumentations. + const instrumentations: Instrumentation[] = []; + + const transports: BaseTransport[] = [new EchoSrvTransport()]; if (options.customEndpoint) { - this.transports.push(new FetchTransport({ url: options.customEndpoint, apiKey: options.apiKey })); + transports.push(new FetchTransport({ url: options.customEndpoint, apiKey: options.apiKey })); } if (options.errorInstrumentalizationEnabled) { @@ -49,6 +50,9 @@ export class GrafanaJavascriptAgentBackend instrumentations.push(new WebVitalsInstrumentation()); } + // session instrumentation must be added! + instrumentations.push(new SessionInstrumentation()); + // initialize GrafanaJavascriptAgent so it can set up its hooks and start collecting errors const grafanaJavaScriptAgentOptions: BrowserConfig = { globalObjectKey: options.globalObjectKey || 'faro', @@ -58,21 +62,19 @@ export class GrafanaJavascriptAgentBackend environment: options.buildInfo.env, }, instrumentations, - transports: [new EchoSrvTransport()], + transports, ignoreErrors: [ 'ResizeObserver loop limit exceeded', 'ResizeObserver loop completed', 'Non-Error exception captured with keys', ], - metas: [ - ...defaultMetas, - { - session: { - // new session id for every page load - id: (Math.random() + 1).toString(36).substring(2), - }, - }, - ], + sessionTracking: { + persistent: true, + }, + batching: { + sendTimeout: 1000, + }, + internalLoggerLevel: options.internalLoggerLevel || defaultInternalLoggerLevel, }; this.faroInstance = initializeFaro(grafanaJavaScriptAgentOptions); @@ -86,9 +88,8 @@ export class GrafanaJavascriptAgentBackend } } - addEvent = (e: EchoEvent) => { - this.transports.forEach((t) => t.send(e.payload)); - }; + // noop because the EchoSrvTransport registered in Faro will already broadcast all signals emitted by the Faro API + addEvent = (e: EchoEvent) => {}; // backend will log events to stdout, and at least in case of hosted grafana they will be // ingested into Loki. Due to Loki limitations logs cannot be backdated, diff --git a/public/app/core/services/keybindingSrv.ts b/public/app/core/services/keybindingSrv.ts index 2f126c22145ed..2d48dee13c67a 100644 --- a/public/app/core/services/keybindingSrv.ts +++ b/public/app/core/services/keybindingSrv.ts @@ -18,6 +18,8 @@ import { ShowModalReactEvent, ZoomOutEvent, AbsoluteTimeEvent, + CopyTimeEvent, + PasteTimeEvent, } from '../../types/events'; import { AppChromeService } from '../components/AppChrome/AppChromeService'; import { HelpModal } from '../components/help/HelpModal'; @@ -38,7 +40,7 @@ export class KeybindingSrv { // Chromeless pages like login and signup page don't get any global bindings if (!route.chromeless) { - this.bind(['?', 'h'], this.showHelpModal); + this.bind(['?', 'mod+h'], this.showHelpModal); this.bind('g h', this.goToHome); this.bind('g d', this.goToDashboards); this.bind('g e', this.goToExplore); @@ -203,6 +205,14 @@ export class KeybindingSrv { this.bind('t right', () => { appEvents.publish(new ShiftTimeEvent({ direction: ShiftTimeEventDirection.Right, updateUrl })); }); + + this.bind('t c', () => { + appEvents.publish(new CopyTimeEvent()); + }); + + this.bind('t v', () => { + appEvents.publish(new PasteTimeEvent({ updateUrl })); + }); } setupDashboardBindings(dashboard: DashboardModel) { diff --git a/public/app/core/services/theme.ts b/public/app/core/services/theme.ts index b19b04f324298..6368aa07f7697 100644 --- a/public/app/core/services/theme.ts +++ b/public/app/core/services/theme.ts @@ -18,7 +18,7 @@ export async function changeTheme(themeId: string, runtimeOnly?: boolean) { if (oldTheme.colors.mode !== newTheme.colors.mode) { const newCssLink = document.createElement('link'); newCssLink.rel = 'stylesheet'; - newCssLink.href = config.bootData.themePaths[newTheme.colors.mode]; + newCssLink.href = config.bootData.assets[newTheme.colors.mode]; newCssLink.onload = () => { // Remove old css file const bodyLinks = document.getElementsByTagName('link'); diff --git a/public/app/core/specs/backend_srv.test.ts b/public/app/core/specs/backend_srv.test.ts index fad3b7e8665e5..075ec6f0095d4 100644 --- a/public/app/core/specs/backend_srv.test.ts +++ b/public/app/core/specs/backend_srv.test.ts @@ -4,7 +4,7 @@ import { fromFetch } from 'rxjs/fetch'; import { delay } from 'rxjs/operators'; import { AppEvents, DataQueryErrorType, EventBusExtended } from '@grafana/data'; -import { BackendSrvRequest, FetchError, config, FetchResponse } from '@grafana/runtime'; +import { BackendSrvRequest, FetchError, FetchResponse } from '@grafana/runtime'; import { TokenRevokedModal } from '../../features/users/TokenRevokedModal'; import { ShowModalReactEvent } from '../../types/events'; @@ -86,6 +86,11 @@ const getTestContext = (overides?: object, mockFromFetch = true) => { }; }; +jest.mock('app/core/utils/auth', () => ({ + getSessionExpiry: () => 1, + hasSessionExpiry: () => true, +})); + describe('backendSrv', () => { describe('parseRequestOptions', () => { it.each` @@ -158,27 +163,19 @@ describe('backendSrv', () => { }); }); - describe('when making an unsuccessful call and conditions for retry are favorable and loginPing does not throw', () => { + describe('when making an unsuccessful call and conditions for retry are favorable and rotateToken does not throw', () => { const url = '/api/dashboard/'; const okResponse = { ok: true, status: 200, statusText: 'OK', data: { message: 'Ok' } }; - let fetchMock: jest.SpyInstance; + let fetchMock: jest.SpyInstance; afterEach(() => { fetchMock.mockClear(); }); - afterAll(() => { fetchMock.mockRestore(); - config.featureToggles.clientTokenRotation = false; }); - it.each` - clientTokenRotation - ${true} - ${false} - `('then it should retry (clientTokenRotation = %s)', async ({ clientTokenRotation }) => { - config.featureToggles.clientTokenRotation = clientTokenRotation; - + it('then it should retry', async () => { fetchMock = jest .spyOn(global, 'fetch') .mockRejectedValueOnce({ @@ -210,19 +207,13 @@ describe('backendSrv', () => { false ); - backendSrv.loginPing = jest.fn().mockResolvedValue(okResponse); - backendSrv.rotateToken = jest.fn().mockResolvedValue(okResponse); await backendSrv.request({ url, method: 'GET', retry: 0 }).finally(() => { expect(appEventsMock.emit).not.toHaveBeenCalled(); expect(logoutMock).not.toHaveBeenCalled(); - if (config.featureToggles.clientTokenRotation) { - expect(backendSrv.rotateToken).toHaveBeenCalledTimes(1); - } else { - expect(backendSrv.loginPing).toHaveBeenCalledTimes(1); - } - expect(fetchMock).toHaveBeenCalledTimes(2); // expecting 2 calls because of retry and because the loginPing/tokenRotation is mocked + expect(backendSrv.rotateToken).toHaveBeenCalledTimes(1); + expect(fetchMock).toHaveBeenCalledTimes(2); // expecting 2 calls because of retry and because the tokenRotation is mocked }); }); }); @@ -238,7 +229,7 @@ describe('backendSrv', () => { url, }); - backendSrv.loginPing = jest.fn(); + backendSrv.rotateToken = jest.fn(); await backendSrv.request({ url, method: 'GET', retry: 0 }).catch(() => { expect(appEventsMock.publish).toHaveBeenCalledTimes(1); @@ -250,7 +241,7 @@ describe('backendSrv', () => { }, }) ); - expect(backendSrv.loginPing).not.toHaveBeenCalled(); + expect(backendSrv.rotateToken).not.toHaveBeenCalled(); expect(logoutMock).not.toHaveBeenCalled(); expectRequestCallChain({ url, method: 'GET', retry: 0 }); }); @@ -267,7 +258,7 @@ describe('backendSrv', () => { data: { message: errorMessage }, }); - backendSrv.loginPing = jest + backendSrv.rotateToken = jest .fn() .mockRejectedValue({ status: 403, statusText: 'Forbidden', data: { message: 'Forbidden' } }); const url = '/api/dashboard/'; @@ -279,7 +270,7 @@ describe('backendSrv', () => { expect(error.statusText).toBe('Forbidden'); expect(error.data).toEqual({ message: 'Forbidden' }); expect(appEventsMock.emit).not.toHaveBeenCalled(); - expect(backendSrv.loginPing).toHaveBeenCalledTimes(1); + expect(backendSrv.rotateToken).toHaveBeenCalledTimes(1); expect(logoutMock).not.toHaveBeenCalled(); expectRequestCallChain({ url, method: 'GET', retry: 0 }); jest.advanceTimersByTime(50); @@ -519,27 +510,19 @@ describe('backendSrv', () => { }); }); - describe('when making an unsuccessful call and conditions for retry are favorable and loginPing does not throw', () => { + describe('when making an unsuccessful call and conditions for retry are favorable and rotateToken does not throw', () => { const url = '/api/dashboard/'; const okResponse = { ok: true, status: 200, statusText: 'OK', data: { message: 'Ok' } }; - let fetchMock: jest.SpyInstance; + let fetchMock: jest.SpyInstance; afterEach(() => { fetchMock.mockClear(); }); - afterAll(() => { fetchMock.mockRestore(); - config.featureToggles.clientTokenRotation = false; }); - it.each` - clientTokenRotation - ${true} - ${false} - `('then it should retry (clientTokenRotation = %s)', async ({ clientTokenRotation }) => { - config.featureToggles.clientTokenRotation = clientTokenRotation; - + it('then it should retry', async () => { fetchMock = jest .spyOn(global, 'fetch') .mockRejectedValueOnce({ @@ -570,18 +553,12 @@ describe('backendSrv', () => { false ); - backendSrv.loginPing = jest.fn().mockResolvedValue(okResponse); - backendSrv.rotateToken = jest.fn().mockResolvedValue(okResponse); await backendSrv.datasourceRequest({ url, method: 'GET', retry: 0 }).finally(() => { expect(logoutMock).not.toHaveBeenCalled(); - if (config.featureToggles.clientTokenRotation) { - expect(backendSrv.rotateToken).toHaveBeenCalledTimes(1); - } else { - expect(backendSrv.loginPing).toHaveBeenCalledTimes(1); - } - expect(fetchMock).toHaveBeenCalledTimes(2); // expecting 2 calls because of retry and because the loginPing/tokenRotation is mocked + expect(backendSrv.rotateToken).toHaveBeenCalledTimes(1); + expect(fetchMock).toHaveBeenCalledTimes(2); // expecting 2 calls because of retry and because the tokenRotation is mocked }); }); }); @@ -595,7 +572,7 @@ describe('backendSrv', () => { data: { message: 'Token revoked', error: { id: 'ERR_TOKEN_REVOKED', maxConcurrentSessions: 3 } }, }); - backendSrv.loginPing = jest.fn(); + backendSrv.rotateToken = jest.fn(); const url = '/api/dashboard/'; @@ -609,7 +586,7 @@ describe('backendSrv', () => { }, }) ); - expect(backendSrv.loginPing).not.toHaveBeenCalled(); + expect(backendSrv.rotateToken).not.toHaveBeenCalled(); expect(logoutMock).not.toHaveBeenCalled(); expectRequestCallChain({ url, method: 'GET', retry: 0 }); }); @@ -631,7 +608,7 @@ describe('backendSrv', () => { retry: 0, }; - backendSrv.loginPing = jest + backendSrv.rotateToken = jest .fn() .mockRejectedValue({ status: 403, statusText: 'Forbidden', data: { message: 'Forbidden' } }); @@ -639,7 +616,7 @@ describe('backendSrv', () => { expect(error.status).toBe(403); expect(error.statusText).toBe('Forbidden'); expect(error.data).toEqual({ message: 'Forbidden' }); - expect(backendSrv.loginPing).toHaveBeenCalledTimes(1); + expect(backendSrv.rotateToken).toHaveBeenCalledTimes(1); expect(logoutMock).not.toHaveBeenCalled(); expectRequestCallChain(options); }); @@ -692,7 +669,7 @@ describe('backendSrv', () => { let inspectorPacket: FetchResponse | FetchError; backendSrv.getInspectorStream().subscribe({ - next: (rsp) => (inspectorPacket = rsp), + next: (rsp) => (inspectorPacket = rsp.response), }); await backendSrv.datasourceRequest(options).catch((error) => { diff --git a/public/app/core/specs/ticks.test.ts b/public/app/core/specs/ticks.test.ts index 81ea8601e4fdb..727be9f7a8fb3 100644 --- a/public/app/core/specs/ticks.test.ts +++ b/public/app/core/specs/ticks.test.ts @@ -1,27 +1,6 @@ import * as ticks from '../utils/ticks'; describe('ticks', () => { - describe('getFlotTickDecimals()', () => { - const axis = { - min: null, - max: null, - }; - - it('should calculate decimals precision based on graph height', () => { - let dec = ticks.getFlotTickDecimals(0, 10, axis, 200); - expect(dec.tickDecimals).toBe(1); - expect(dec.scaledDecimals).toBe(1); - - dec = ticks.getFlotTickDecimals(0, 100, axis, 200); - expect(dec.tickDecimals).toBe(0); - expect(dec.scaledDecimals).toBe(-1); - - dec = ticks.getFlotTickDecimals(0, 1, axis, 200); - expect(dec.tickDecimals).toBe(2); - expect(dec.scaledDecimals).toBe(3); - }); - }); - describe('getStringPrecision()', () => { it('"3.12" should return 2', () => { expect(ticks.getStringPrecision('3.12')).toBe(2); diff --git a/public/app/core/specs/time_series.test.ts b/public/app/core/specs/time_series.test.ts index df77e6731284f..87a4a1d885c06 100644 --- a/public/app/core/specs/time_series.test.ts +++ b/public/app/core/specs/time_series.test.ts @@ -406,7 +406,10 @@ describe('TimeSeries', () => { describe('legend decimals', () => { let series: TimeSeries; - let panel: any; + let panel: { + decimals: number | null; + yaxes: Array<{ decimals: number | null }>; + }; const height = 200; beforeEach(() => { testData = { diff --git a/public/app/core/utils/ConfigProvider.tsx b/public/app/core/utils/ConfigProvider.tsx index 3a8e5c4f99e14..9febaaff0542c 100644 --- a/public/app/core/utils/ConfigProvider.tsx +++ b/public/app/core/utils/ConfigProvider.tsx @@ -23,8 +23,8 @@ export const ThemeProvider = ({ children, value }: { children: React.ReactNode; return ( {children} diff --git a/public/app/core/utils/acl.ts b/public/app/core/utils/acl.ts deleted file mode 100644 index eadce788d2e9e..0000000000000 --- a/public/app/core/utils/acl.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { DashboardAcl, DashboardAclDTO } from 'app/types/acl'; - -export function processAclItems(items: DashboardAclDTO[]): DashboardAcl[] { - return items.map(processAclItem).sort((a, b) => b.sortRank! - a.sortRank! || a.name!.localeCompare(b.name!)); -} - -function processAclItem(dto: DashboardAclDTO): DashboardAcl { - const item: DashboardAcl = dto; - - item.sortRank = 0; - - if (item.userId! > 0) { - item.name = item.userLogin; - item.sortRank = 10; - } else if (item.teamId! > 0) { - item.name = item.team; - item.sortRank = 20; - } else if (item.role) { - item.icon = 'fa fa-fw fa-street-view'; - item.name = item.role; - item.sortRank = 30; - if (item.role === 'Editor') { - item.sortRank += 1; - } - } - - if (item.inherited) { - item.sortRank += 100; - } - - return item; -} diff --git a/public/app/core/utils/auth.ts b/public/app/core/utils/auth.ts index 42d99cd59c97a..8c6b69cc028bb 100644 --- a/public/app/core/utils/auth.ts +++ b/public/app/core/utils/auth.ts @@ -11,3 +11,7 @@ export function getSessionExpiry() { return parseInt(expiresStr, 10); } + +export function hasSessionExpiry() { + return document.cookie.split('; ').findIndex((row) => row.startsWith('grafana_session_expiry=')) > -1; +} diff --git a/public/app/core/utils/browser.ts b/public/app/core/utils/browser.ts index d47b8745e4b26..ec37aa3793a10 100644 --- a/public/app/core/utils/browser.ts +++ b/public/app/core/utils/browser.ts @@ -1,6 +1,6 @@ /** * Check to see if browser is not supported by Grafana - * This function is copied to index-template.html but is here so we can write tests + * This function is copied to index.html but is here so we can write tests * */ export function checkBrowserCompatibility() { const isIE = navigator.userAgent.indexOf('MSIE') > -1; @@ -39,5 +39,5 @@ export function userAgentIsApple() { } export function getModKey() { - return userAgentIsApple() ? 'cmd' : 'ctrl'; + return userAgentIsApple() ? '⌘' : 'ctrl'; } diff --git a/public/app/core/utils/colors.ts b/public/app/core/utils/colors.ts index 6d73ab9fbd892..da47ce322d018 100644 --- a/public/app/core/utils/colors.ts +++ b/public/app/core/utils/colors.ts @@ -1,5 +1,5 @@ import config from 'app/core/config'; export function getThemeColor(dark: string, light: string): string { - return config.bootData.user.lightTheme ? light : dark; + return config.bootData?.user?.lightTheme ? light : dark; } diff --git a/public/app/core/utils/explore.test.ts b/public/app/core/utils/explore.test.ts index f08d940f55972..658f3eefd0f88 100644 --- a/public/app/core/utils/explore.test.ts +++ b/public/app/core/utils/explore.test.ts @@ -2,7 +2,6 @@ import { DataSourceApi, dateTime, ExploreUrlState, LogsSortOrder } from '@grafan import { serializeStateToUrlParam } from '@grafana/data/src/utils/url'; import { DataQuery } from '@grafana/schema'; import { RefreshPicker } from '@grafana/ui'; -import store from 'app/core/store'; import { DEFAULT_RANGE } from 'app/features/explore/state/utils'; import { DatasourceSrvMock, MockDataSourceApi } from '../../../test/mocks/datasource_srv'; @@ -11,7 +10,6 @@ import { buildQueryTransaction, hasNonEmptyQuery, refreshIntervalToSortOrder, - updateHistory, getExploreUrl, GetExploreUrlArguments, getTimeRange, @@ -151,27 +149,6 @@ describe('getExploreUrl', () => { }); }); -describe('updateHistory()', () => { - const datasourceId = 'myDatasource'; - const key = `grafana.explore.history.${datasourceId}`; - - beforeEach(() => { - store.delete(key); - expect(store.exists(key)).toBeFalsy(); - }); - - test('should save history item to localStorage', () => { - const expected = [ - { - query: { refId: '1', expr: 'metric' }, - }, - ]; - expect(updateHistory([], datasourceId, [{ refId: '1', expr: 'metric' }])).toMatchObject(expected); - expect(store.exists(key)).toBeTruthy(); - expect(store.getObject(key)).toMatchObject(expected); - }); -}); - describe('hasNonEmptyQuery', () => { test('should return true if one query is non-empty', () => { expect(hasNonEmptyQuery([{ refId: '1', key: '2', context: 'explore', expr: 'foo' }])).toBeTruthy(); @@ -187,7 +164,7 @@ describe('hasNonEmptyQuery', () => { }); describe('getTimeRange', () => { - describe('should flip from and to when from is after to', () => { + describe('should not flip from and to when from is after to', () => { const rawRange = { from: 'now', to: 'now-6h', @@ -195,7 +172,7 @@ describe('getTimeRange', () => { const range = getTimeRange('utc', rawRange, 0); - expect(range.from.isBefore(range.to)).toBe(true); + expect(range.from.isBefore(range.to)).toBe(false); }); }); diff --git a/public/app/core/utils/explore.ts b/public/app/core/utils/explore.ts index 281f6fd997ef4..501a03d57d467 100644 --- a/public/app/core/utils/explore.ts +++ b/public/app/core/utils/explore.ts @@ -1,15 +1,15 @@ -import { nanoid } from '@reduxjs/toolkit'; +import { customAlphabet } from 'nanoid'; import { Unsubscribable } from 'rxjs'; import { v4 as uuidv4 } from 'uuid'; import { + AdHocVariableFilter, CoreApp, DataQuery, DataQueryRequest, DataSourceApi, DataSourceRef, DefaultTimeZone, - HistoryItem, IntervalValues, LogsDedupStrategy, LogsSortOrder, @@ -27,15 +27,14 @@ import store from 'app/core/store'; import { ExpressionDatasourceUID } from 'app/features/expressions/types'; import { QueryOptions, QueryTransaction } from 'app/types/explore'; -import { config } from '../config'; - import { getNextRefIdChar } from './query'; export const DEFAULT_UI_STATE = { dedupStrategy: LogsDedupStrategy.none, }; -const MAX_HISTORY_ITEMS = 100; +export const ID_ALPHABET = '0123456789abcdefghijklmnopqrstuvwxyz'; +const nanoid = customAlphabet(ID_ALPHABET, 3); const LAST_USED_DATASOURCE_KEY = 'grafana.explore.datasource'; const lastUsedDatasourceKeyForOrgId = (orgId: number) => `${LAST_USED_DATASOURCE_KEY}.${orgId}`; @@ -49,17 +48,24 @@ export interface GetExploreUrlArguments { dsRef: DataSourceRef | null | undefined; timeRange: TimeRange; scopedVars: ScopedVars | undefined; + adhocFilters?: AdHocVariableFilter[]; } export function generateExploreId() { - return nanoid(3); + while (true) { + const id = nanoid(3); + + if (!/^\d+$/.test(id)) { + return id; + } + } } /** * Returns an Explore-URL that contains a panel's queries and the dashboard time range. */ export async function getExploreUrl(args: GetExploreUrlArguments): Promise { - const { queries, dsRef, timeRange, scopedVars } = args; + const { queries, dsRef, timeRange, scopedVars, adhocFilters } = args; const interpolatedQueries = ( await Promise.allSettled( queries @@ -72,7 +78,7 @@ export async function getExploreUrl(args: GetExploreUrlArguments): Promise { - combinedKey += query.key; - return combinedKey; - }, ''); - + const panelId = Number.parseInt(exploreId, 36); const { interval, intervalMs } = getIntervals(range, queryOptions.minInterval, queryOptions.maxDataPoints); - // Most datasource is using `panelId + query.refId` for cancellation logic. - // Using `format` here because it relates to the view panel that the request is for. - // However, some datasources don't use `panelId + query.refId`, but only `panelId`. - // Therefore panel id has to be unique. - const panelId = `${key}`; - const request: DataQueryRequest = { app: CoreApp.Explore, // TODO probably should be taken from preferences but does not seem to be used anyway. @@ -121,12 +121,10 @@ export function buildQueryTransaction( startTime: Date.now(), interval, intervalMs, - // TODO: the query request expects number and we are using string here. Seems like it works so far but can create - // issues down the road. - panelId: panelId as any, + panelId, targets: queries, // Datasources rely on DataQueries being passed under the targets key. range, - requestId: 'explore_' + exploreId, + requestId: requestIdGenerator(exploreId), rangeRaw: range.raw, scopedVars: { __interval: { text: interval, value: interval }, @@ -148,18 +146,6 @@ export function buildQueryTransaction( export const clearQueryKeys: (query: DataQuery) => DataQuery = ({ key, ...rest }) => rest; -export const safeParseJson = (text?: string): any | undefined => { - if (!text) { - return; - } - - try { - return JSON.parse(text); - } catch (error) { - console.error(error); - } -}; - export const safeStringifyValue = (value: unknown, space?: number) => { if (value === undefined || value === null) { return ''; @@ -278,45 +264,15 @@ const validKeys = ['refId', 'key', 'context', 'datasource']; export function hasNonEmptyQuery(queries: TQuery[]): boolean { return ( queries && - queries.some((query: any) => { - const keys = Object.keys(query) - .filter((key) => validKeys.indexOf(key) === -1) - .map((k) => query[k]) - .filter((v) => v); - return keys.length > 0; + queries.some((query) => { + const entries = Object.entries(query) + .filter(([key, _]) => validKeys.indexOf(key) === -1) + .filter(([_, value]) => value); + return entries.length > 0; }) ); } -/** - * Update the query history. Side-effect: store history in local storage - */ -export function updateHistory( - history: Array>, - datasourceId: string, - queries: T[] -): Array> { - const ts = Date.now(); - let updatedHistory = history; - queries.forEach((query) => { - updatedHistory = [{ query, ts }, ...updatedHistory]; - }); - - if (updatedHistory.length > MAX_HISTORY_ITEMS) { - updatedHistory = updatedHistory.slice(0, MAX_HISTORY_ITEMS); - } - - // Combine all queries of a datasource type into one history - const historyKey = `grafana.explore.history.${datasourceId}`; - try { - store.setObject(historyKey, updatedHistory); - return updatedHistory; - } catch (error) { - console.error(error); - return history; - } -} - export const getQueryKeys = (queries: DataQuery[]): string[] => { const queryKeys = queries.reduce((newQueryKeys, query, index) => { const primaryKey = query.datasource?.uid || query.key; @@ -329,25 +285,12 @@ export const getQueryKeys = (queries: DataQuery[]): string[] => { export const getTimeRange = (timeZone: TimeZone, rawRange: RawTimeRange, fiscalYearStartMonth: number): TimeRange => { let range = rangeUtil.convertRawToRange(rawRange, timeZone, fiscalYearStartMonth); - if (range.to.isBefore(range.from)) { - range = rangeUtil.convertRawToRange({ from: range.raw.to, to: range.raw.from }, timeZone, fiscalYearStartMonth); - } - return range; }; export const refreshIntervalToSortOrder = (refreshInterval?: string) => RefreshPicker.isLive(refreshInterval) ? LogsSortOrder.Ascending : LogsSortOrder.Descending; -export const convertToWebSocketUrl = (url: string) => { - const protocol = window.location.protocol === 'https:' ? 'wss://' : 'ws://'; - let backend = `${protocol}${window.location.host}${config.appSubUrl}`; - if (backend.endsWith('/')) { - backend = backend.slice(0, -1); - } - return `${backend}${url}`; -}; - export const stopQueryState = (querySubscription: Unsubscribable | undefined) => { if (querySubscription) { querySubscription.unsubscribe(); @@ -363,10 +306,14 @@ export function getIntervals(range: TimeRange, lowLimit?: string, resolution?: n } export const copyStringToClipboard = (string: string) => { - const el = document.createElement('textarea'); - el.value = string; - document.body.appendChild(el); - el.select(); - document.execCommand('copy'); - document.body.removeChild(el); + if (navigator.clipboard && window.isSecureContext) { + navigator.clipboard.writeText(string); + } else { + const el = document.createElement('textarea'); + el.value = string; + document.body.appendChild(el); + el.select(); + document.execCommand('copy'); + document.body.removeChild(el); + } }; diff --git a/public/app/core/utils/fetch.ts b/public/app/core/utils/fetch.ts index 03b5031d7771d..49253f74a31ee 100644 --- a/public/app/core/utils/fetch.ts +++ b/public/app/core/utils/fetch.ts @@ -103,23 +103,29 @@ export async function parseResponseBody( if (responseType) { switch (responseType) { case 'arraybuffer': - return response.arrayBuffer() as any; + // this specifically returns a Promise + // TODO refactor this function to remove the type assertions + return response.arrayBuffer() as Promise; case 'blob': - return response.blob() as any; + // this specifically returns a Promise + // TODO refactor this function to remove the type assertions + return response.blob() as Promise; case 'json': // An empty string is not a valid JSON. // Sometimes (unfortunately) our APIs declare their Content-Type as JSON, however they return an empty body. if (response.headers.get('Content-Length') === '0') { console.warn(`${response.url} returned an invalid JSON`); - return {} as unknown as T; + return {} as T; } return await response.json(); case 'text': - return response.text() as any; + // this specifically returns a Promise + // TODO refactor this function to remove the type assertions + return response.text() as Promise; } } @@ -127,10 +133,10 @@ export async function parseResponseBody( try { return JSON.parse(textData); // majority of the requests this will be something that can be parsed } catch {} - return textData as any; + return textData as T; } -export function serializeParams(data: Record): string { +function serializeParams(data: Record): string { return Object.keys(data) .map((key) => { const value = data[key]; diff --git a/public/app/core/utils/kbn.test.ts b/public/app/core/utils/kbn.test.ts index 6e291f3d1b275..bb0130fe5f9c8 100644 --- a/public/app/core/utils/kbn.test.ts +++ b/public/app/core/utils/kbn.test.ts @@ -27,7 +27,7 @@ const formatTests: ValueFormatTest[] = [ { id: 'ms', decimals: 4, value: 0.0024, result: '0.0024 ms' }, { id: 'ms', decimals: 0, value: 100, result: '100 ms' }, { id: 'ms', decimals: 2, value: 1250, result: '1.25 s' }, - { id: 'ms', decimals: 1, value: 10000086.123, result: '2.8 hour' }, + { id: 'ms', decimals: 1, value: 10000086.123, result: '2.8 hours' }, { id: 'ms', decimals: 0, value: 1200, result: '1 s' }, { id: 'short', decimals: 0, value: 98765, result: '99 K' }, { id: 'short', decimals: 0, value: 9876543, result: '10 Mil' }, diff --git a/public/app/core/utils/metrics.ts b/public/app/core/utils/metrics.ts index 97551a721ccd7..e244851aa74d3 100644 --- a/public/app/core/utils/metrics.ts +++ b/public/app/core/utils/metrics.ts @@ -1,7 +1,7 @@ import { reportPerformance } from '../services/echo/EchoSrv'; export function startMeasure(eventName: string) { - if (!performance) { + if (!performance || !performance.mark) { return; } @@ -13,7 +13,7 @@ export function startMeasure(eventName: string) { } export function stopMeasure(eventName: string) { - if (!performance) { + if (!performance || !performance.mark) { return; } @@ -29,7 +29,9 @@ export function stopMeasure(eventName: string) { performance.clearMarks(started); performance.clearMarks(completed); performance.clearMeasures(measured); + return measure; } catch (error) { console.error(`[Metrics] Failed to stopMeasure ${eventName}`, error); + return; } } diff --git a/public/app/core/utils/navBarItem-translations.ts b/public/app/core/utils/navBarItem-translations.ts index 2c08370ad4f19..61969eb5d0327 100644 --- a/public/app/core/utils/navBarItem-translations.ts +++ b/public/app/core/utils/navBarItem-translations.ts @@ -21,7 +21,7 @@ export function getNavTitle(navId: string | undefined) { case 'import': return t('nav.create-import.title', 'Import dashboard'); case 'alert': - return t('nav.create-alert.title', 'Create alert rule'); + return t('nav.create-alert.title', 'New alert rule'); case 'starred': return t('nav.starred.title', 'Starred'); case 'starred-empty': @@ -56,10 +56,14 @@ export function getNavTitle(navId: string | undefined) { return t('nav.oncall.title', 'OnCall'); case 'alerting-legacy': return t('nav.alerting-legacy.title', 'Alerting (legacy)'); + case 'alerting-upgrade': + return t('nav.alerting-upgrade.title', 'Alerting upgrade'); case 'alert-home': return t('nav.alerting-home.title', 'Home'); case 'alert-list': return t('nav.alerting-list.title', 'Alert rules'); + case 'alert-list-legacy': + return t('nav.alert-list-legacy.title', 'Alert rules'); case 'receivers': return t('nav.alerting-receivers.title', 'Contact points'); case 'am-routes': @@ -114,14 +118,22 @@ export function getNavTitle(navId: string | undefined) { return t('nav.server-settings.title', 'Settings'); case 'storage': return t('nav.storage.title', 'Storage'); + case 'migrate-to-cloud': + return t('nav.migrate-to-cloud.title', 'Migrate to Grafana Cloud'); case 'upgrading': return t('nav.upgrading.title', 'Stats and license'); case 'monitoring': return t('nav.monitoring.title', 'Observability'); + case 'infrastructure': + return t('nav.infrastructure.title', 'Infrastructure'); + case 'frontend': + return t('nav.frontend.title', 'Frontend'); case 'apps': return t('nav.apps.title', 'Apps'); case 'alerts-and-incidents': return t('nav.alerts-and-incidents.title', 'Alerts & IRM'); + case 'testing-and-synthetics': + return t('nav.testing-and-synthetics.title', 'Testing & synthetics'); case 'plugin-page-grafana-incident-app': return t('nav.incidents.title', 'Incidents'); case 'plugin-page-grafana-ml-app': @@ -129,17 +141,17 @@ export function getNavTitle(navId: string | undefined) { case 'plugin-page-grafana-slo-app': return t('nav.slo.title', 'SLO'); case 'plugin-page-k6-app': - return t('nav.performance-testing.title', 'Performance testing'); + return t('nav.k6.title', 'Performance'); case 'monitoring': return t('nav.observability.title', 'Observability'); case 'plugin-page-grafana-k8s-app': return t('nav.kubernetes.title', 'Kubernetes'); case 'plugin-page-grafana-app-observability-app': - return t('nav.application.title', 'Application (preview)'); + return t('nav.application.title', 'Application'); case 'plugin-page-grafana-pyroscope-app': return t('nav.profiles.title', 'Profiles'); case 'plugin-page-grafana-kowalski-app': - return t('nav.frontend.title', 'Frontend'); + return t('nav.frontend-app.title', 'Frontend'); case 'plugin-page-grafana-synthetic-monitoring-app': return t('nav.synthetics.title', 'Synthetics'); case 'help': @@ -158,12 +170,16 @@ export function getNavTitle(navId: string | undefined) { return t('nav.connections.title', 'Connections'); case 'connections-add-new-connection': return t('nav.add-new-connections.title', 'Add new connection'); + case 'standalone-plugin-page-/connections/collector': + return t('nav.collector.title', 'Collector'); case 'connections-datasources': return t('nav.data-sources.title', 'Data sources'); case 'standalone-plugin-page-/connections/infrastructure': - return t('nav.infrastructure.title', 'Integrations'); + return t('nav.integrations.title', 'Integrations'); case 'standalone-plugin-page-/connections/connect-data': return t('nav.connect-data.title', 'Connect data'); + case 'standalone-plugin-page-/connections/private-data-source-connections': + return t('nav.private-data-source-connections.title', 'Private data source connect'); case 'plugin-page-grafana-detect-app': return t('nav.detect.title', 'Detect'); case 'plugin-page-grafana-quaderno-app': @@ -192,6 +208,11 @@ export function getNavSubTitle(navId: string | undefined) { return t('nav.library-panels.subtitle', 'Reusable panels that can be added to multiple dashboards'); case 'alerting': return t('nav.alerting.subtitle', 'Learn about problems in your systems moments after they occur'); + case 'alerting-upgrade': + return t( + 'nav.alerting-upgrade.subtitle', + 'Upgrade your existing legacy alerts and notification channels to the new Grafana Alerting' + ); case 'alert-list': return t('nav.alerting-list.subtitle', 'Rules that determine whether an alert will fire'); case 'receivers': @@ -229,6 +250,11 @@ export function getNavSubTitle(navId: string | undefined) { return t('nav.server-settings.subtitle', 'View the settings defined in your Grafana config'); case 'storage': return t('nav.storage.subtitle', 'Manage file storage'); + case 'migrate-to-cloud': + return t( + 'nav.migrate-to-cloud.subtitle', + 'Copy configuration from your self-managed installation to a cloud stack' + ); case 'support-bundles': return t('nav.support-bundles.subtitle', 'Download support bundles'); case 'admin': @@ -245,13 +271,24 @@ export function getNavSubTitle(navId: string | undefined) { case 'apps': return t('nav.apps.subtitle', 'App plugins that extend the Grafana experience'); case 'monitoring': - return t('nav.monitoring.subtitle', 'Monitoring and infrastructure apps'); + return t('nav.monitoring.subtitle', 'Out-of-the-box observability solutions'); + case 'infrastructure': + return t('nav.infrastructure.subtitle', "Understand your infrastructure's health"); + case 'frontend': + return t('nav.frontend.subtitle', 'Gain real user monitoring insights'); case 'alerts-and-incidents': return t('nav.alerts-and-incidents.subtitle', 'Alerting and incident management apps'); + case 'testing-and-synthetics': + return t('nav.testing-and-synthetics.subtitle', 'Optimize performance with k6 and Synthetic Monitoring insights'); case 'connections-add-new-connection': return t('nav.connections.subtitle', 'Browse and create new connections'); case 'connections-datasources': return t('nav.data-sources.subtitle', 'View and manage your connected data source connections'); + case 'connections-private-data-source-connections': + return t( + 'nav.private-data-source-connections.subtitle', + 'Query data that lives within a secured network without opening the network to inbound traffic from Grafana Cloud. Learn more in our docs.' + ); default: return undefined; } diff --git a/public/app/core/utils/query.ts b/public/app/core/utils/query.ts index bd5cdefe808c2..ef75c918ce168 100644 --- a/public/app/core/utils/query.ts +++ b/public/app/core/utils/query.ts @@ -1,5 +1,6 @@ import { DataQuery, DataSourceRef } from '@grafana/data'; +// @deprecated use the `getNextRefId` function from grafana/data instead export const getNextRefIdChar = (queries: DataQuery[]): string => { for (let num = 0; ; num++) { const refId = getRefId(num); diff --git a/public/app/core/utils/richHistory.test.ts b/public/app/core/utils/richHistory.test.ts index 4e87f38e7487c..0c6a95b981df7 100644 --- a/public/app/core/utils/richHistory.test.ts +++ b/public/app/core/utils/richHistory.test.ts @@ -109,15 +109,13 @@ describe('richHistory', () => { it('should append query to query history', async () => { Date.now = jest.fn(() => 2); - const { limitExceeded, richHistoryStorageFull } = await addToRichHistory( - mock.testDatasourceUid, - mock.testDatasourceName, - mock.testQueries, - mock.testStarred, - mock.testComment, - true, - true - ); + const { limitExceeded, richHistoryStorageFull } = await addToRichHistory({ + localOverride: false, + datasource: { uid: mock.testDatasourceUid, name: mock.testDatasourceName }, + queries: mock.testQueries, + starred: mock.testStarred, + comment: mock.testComment, + }); expect(limitExceeded).toBeFalsy(); expect(richHistoryStorageFull).toBeFalsy(); expect(richHistoryStorageMock.addToRichHistory).toBeCalledWith({ @@ -142,15 +140,13 @@ describe('richHistory', () => { }); }); - const { richHistoryStorageFull, limitExceeded } = await addToRichHistory( - mock.testDatasourceUid, - mock.testDatasourceName, - mock.testQueries, - mock.testStarred, - mock.testComment, - true, - true - ); + const { richHistoryStorageFull, limitExceeded } = await addToRichHistory({ + localOverride: false, + datasource: { uid: mock.testDatasourceUid, name: mock.testDatasourceName }, + queries: mock.testQueries, + starred: mock.testStarred, + comment: mock.testComment, + }); expect(richHistoryStorageFull).toBeFalsy(); expect(limitExceeded).toBeTruthy(); }); diff --git a/public/app/core/utils/richHistory.ts b/public/app/core/utils/richHistory.ts index 9a4b64b1454ef..ad95f6256967d 100644 --- a/public/app/core/utils/richHistory.ts +++ b/public/app/core/utils/richHistory.ts @@ -5,6 +5,7 @@ import { serializeStateToUrlParam } from '@grafana/data/src/utils/url'; import { getDataSourceSrv } from '@grafana/runtime'; import { notifyApp } from 'app/core/actions'; import { createErrorNotification, createWarningNotification } from 'app/core/copy/appNotification'; +import { t } from 'app/core/internationalization'; import { dispatch } from 'app/store/store'; import { RichHistoryQuery } from 'app/types/explore'; @@ -14,7 +15,7 @@ import { RichHistoryStorageWarning, RichHistoryStorageWarningDetails, } from '../history/RichHistoryStorage'; -import { getRichHistoryStorage } from '../history/richHistoryStorageProvider'; +import { getLocalRichHistoryStorage, getRichHistoryStorage } from '../history/richHistoryStorageProvider'; import { RichHistorySearchFilters, RichHistorySettings, SortOrder } from './richHistoryTypes'; @@ -25,15 +26,27 @@ export { RichHistorySearchFilters, RichHistorySettings, SortOrder }; * Side-effect: store history in local storage */ +type addToRichHistoryParams = { + localOverride: boolean; + datasource: { uid: string; name?: string }; + queries: DataQuery[]; + starred: boolean; + comment?: string; + showNotif?: { + quotaExceededError?: boolean; + limitExceededWarning?: boolean; + otherErrors?: boolean; + }; +}; + export async function addToRichHistory( - datasourceUid: string, - datasourceName: string | null, - queries: DataQuery[], - starred: boolean, - comment: string | null, - showQuotaExceededError: boolean, - showLimitExceededWarning: boolean + params: addToRichHistoryParams ): Promise<{ richHistoryStorageFull?: boolean; limitExceeded?: boolean }> { + const { queries, localOverride, datasource, starred, comment, showNotif } = params; + // default showing of errors to true + const showQuotaExceededError = showNotif?.quotaExceededError ?? true; + const showLimitExceededWarning = showNotif?.limitExceededWarning ?? true; + const showOtherErrors = showNotif?.otherErrors ?? true; /* Save only queries, that are not falsy (e.g. empty object, null, ...) */ const newQueriesToSave: DataQuery[] = queries && queries.filter((query) => notEmptyQuery(query)); @@ -43,9 +56,11 @@ export async function addToRichHistory( let warning: RichHistoryStorageWarningDetails | undefined; try { - const result = await getRichHistoryStorage().addToRichHistory({ - datasourceUid: datasourceUid, - datasourceName: datasourceName ?? '', + // for autocomplete we want to ensure writing to local storage + const storage = localOverride ? getLocalRichHistoryStorage() : getRichHistoryStorage(); + const result = await storage.addToRichHistory({ + datasourceUid: datasource.uid, + datasourceName: datasource.name ?? '', queries: newQueriesToSave, starred, comment: comment ?? '', @@ -56,8 +71,15 @@ export async function addToRichHistory( if (error.name === RichHistoryServiceError.StorageFull) { richHistoryStorageFull = true; showQuotaExceededError && dispatch(notifyApp(createErrorNotification(error.message))); - } else if (error.name !== RichHistoryServiceError.DuplicatedEntry) { - dispatch(notifyApp(createErrorNotification('Rich History update failed', error.message))); + } else if (showOtherErrors && error.name !== RichHistoryServiceError.DuplicatedEntry) { + dispatch( + notifyApp( + createErrorNotification( + t('explore.rich-history-utils-notification.update-failed', 'Rich History update failed'), + error.message + ) + ) + ); } } // Saving failed. Do not add new entry. @@ -98,7 +120,14 @@ export async function updateStarredInRichHistory(id: string, starred: boolean) { return await getRichHistoryStorage().updateStarred(id, starred); } catch (error) { if (error instanceof Error) { - dispatch(notifyApp(createErrorNotification('Saving rich history failed', error.message))); + dispatch( + notifyApp( + createErrorNotification( + t('explore.rich-history-utils-notification.saving-failed', 'Saving rich history failed'), + error.message + ) + ) + ); } return undefined; } @@ -109,7 +138,14 @@ export async function updateCommentInRichHistory(id: string, newComment: string return await getRichHistoryStorage().updateComment(id, newComment); } catch (error) { if (error instanceof Error) { - dispatch(notifyApp(createErrorNotification('Saving rich history failed', error.message))); + dispatch( + notifyApp( + createErrorNotification( + t('explore.rich-history-utils-notification.saving-failed', 'Saving rich history failed'), + error.message + ) + ) + ); } return undefined; } @@ -121,7 +157,14 @@ export async function deleteQueryInRichHistory(id: string) { return id; } catch (error) { if (error instanceof Error) { - dispatch(notifyApp(createErrorNotification('Saving rich history failed', error.message))); + dispatch( + notifyApp( + createErrorNotification( + t('explore.rich-history-utils-notification.saving-failed', 'Saving rich history failed'), + error.message + ) + ) + ); } return undefined; } @@ -130,7 +173,10 @@ export async function deleteQueryInRichHistory(id: string) { export const createUrlFromRichHistory = (query: RichHistoryQuery) => { const exploreState: ExploreUrlState = { /* Default range, as we are not saving timerange in rich history */ - range: { from: 'now-1h', to: 'now' }, + range: { + from: t('explore.rich-history-utils.default-from', 'now-1h'), + to: t('explore.rich-history-utils.default-to', 'now'), + }, datasource: query.datasourceName, queries: query.queries, }; @@ -146,19 +192,19 @@ export const mapNumbertoTimeInSlider = (num: number) => { let str; switch (num) { case 0: - str = 'today'; + str = t('explore.rich-history-utils.today', 'today'); break; case 1: - str = 'yesterday'; + str = t('explore.rich-history-utils.yesterday', 'yesterday'); break; case 7: - str = 'a week ago'; + str = t('explore.rich-history-utils.a-week-ago', 'a week ago'); break; case 14: - str = 'two weeks ago'; + str = t('explore.rich-history-utils.two-weeks-ago', 'two weeks ago'); break; default: - str = `${num} days ago`; + str = t('explore.rich-history-utils.days-ago', '{{num}} days ago', { num: `${num}` }); } return str; diff --git a/public/app/core/utils/richHistoryTypes.ts b/public/app/core/utils/richHistoryTypes.ts index b311b82752980..c49029c035ba2 100644 --- a/public/app/core/utils/richHistoryTypes.ts +++ b/public/app/core/utils/richHistoryTypes.ts @@ -23,8 +23,8 @@ export type RichHistorySearchFilters = { sortOrder: SortOrder; /** Names of data sources (not uids) - used by local and remote storage **/ datasourceFilters: string[]; - from: number; - to: number; + from?: number; + to?: number; starred: boolean; page?: number; }; diff --git a/public/app/core/utils/ticks.ts b/public/app/core/utils/ticks.ts index 5f2239a4d9db3..5b65bb22a0f0e 100644 --- a/public/app/core/utils/ticks.ts +++ b/public/app/core/utils/ticks.ts @@ -30,127 +30,6 @@ export function getScaledDecimals(decimals: number, tickSize: number) { return decimals - Math.floor(Math.log(tickSize) / Math.LN10); } -/** - * Calculate tick size based on min and max values, number of ticks and precision. - * Implementation from Flot. - * @param min Axis minimum - * @param max Axis maximum - * @param noTicks Number of ticks - * @param tickDecimals Tick decimal precision - */ -export function getFlotTickSize(min: number, max: number, noTicks: number, tickDecimals: number) { - const delta = (max - min) / noTicks; - let dec = -Math.floor(Math.log(delta) / Math.LN10); - const maxDec = tickDecimals; - - const magn = Math.pow(10, -dec); - const norm = delta / magn; // norm is between 1.0 and 10.0 - let size; - - if (norm < 1.5) { - size = 1; - } else if (norm < 3) { - size = 2; - // special case for 2.5, requires an extra decimal - if (norm > 2.25 && (maxDec == null || dec + 1 <= maxDec)) { - size = 2.5; - ++dec; - } - } else if (norm < 7.5) { - size = 5; - } else { - size = 10; - } - - size *= magn; - - return size; -} - -/** - * Calculate axis range (min and max). - * Implementation from Flot. - */ -export function getFlotRange(panelMin: any, panelMax: any, datamin: number, datamax: number) { - const autoscaleMargin = 0.02; - - let min = +(panelMin != null ? panelMin : datamin); - let max = +(panelMax != null ? panelMax : datamax); - const delta = max - min; - - if (delta === 0.0) { - // Grafana fix: wide Y min and max using increased wideFactor - // when all series values are the same - const wideFactor = 0.25; - const widen = Math.abs(max === 0 ? 1 : max * wideFactor); - - if (panelMin === null) { - min -= widen; - } - // always widen max if we couldn't widen min to ensure we - // don't fall into min == max which doesn't work - if (panelMax == null || panelMin != null) { - max += widen; - } - } else { - // consider autoscaling - const margin = autoscaleMargin; - if (margin != null) { - if (panelMin == null) { - min -= delta * margin; - // make sure we don't go below zero if all values - // are positive - if (min < 0 && datamin != null && datamin >= 0) { - min = 0; - } - } - if (panelMax == null) { - max += delta * margin; - if (max > 0 && datamax != null && datamax <= 0) { - max = 0; - } - } - } - } - return { min, max }; -} - -/** - * Calculate tick decimals. - * Implementation from Flot. - */ -export function getFlotTickDecimals(datamin: number, datamax: number, axis: { min: any; max: any }, height: number) { - const { min, max } = getFlotRange(axis.min, axis.max, datamin, datamax); - const noTicks = 0.3 * Math.sqrt(height); - const delta = (max - min) / noTicks; - const dec = -Math.floor(Math.log(delta) / Math.LN10); - - const magn = Math.pow(10, -dec); - // norm is between 1.0 and 10.0 - const norm = delta / magn; - let size; - - if (norm < 1.5) { - size = 1; - } else if (norm < 3) { - size = 2; - // special case for 2.5, requires an extra decimal - if (norm > 2.25) { - size = 2.5; - } - } else if (norm < 7.5) { - size = 5; - } else { - size = 10; - } - size *= magn; - - const tickDecimals = Math.max(0, -Math.floor(Math.log(delta) / Math.LN10) + 1); - // grafana addition - const scaledDecimals = tickDecimals - Math.floor(Math.log(size) / Math.LN10); - return { tickDecimals, scaledDecimals }; -} - /** * Format timestamp similar to Grafana graph panel. * @param ticks Number of ticks diff --git a/public/app/core/utils/timePicker.ts b/public/app/core/utils/timePicker.ts index 08dd76c2531ee..ba862fb185809 100644 --- a/public/app/core/utils/timePicker.ts +++ b/public/app/core/utils/timePicker.ts @@ -1,4 +1,6 @@ -import { TimeRange, toUtc, AbsoluteTimeRange } from '@grafana/data'; +import { TimeRange, toUtc, AbsoluteTimeRange, RawTimeRange } from '@grafana/data'; + +type CopiedTimeRangeResult = { range: RawTimeRange; isError: false } | { range: string; isError: true }; export const getShiftedTimeRange = (direction: number, origRange: TimeRange): AbsoluteTimeRange => { const range = { @@ -38,3 +40,20 @@ export const getZoomedTimeRange = (range: TimeRange, factor: number): AbsoluteTi return { from, to }; }; + +export async function getCopiedTimeRange(): Promise { + const raw = await navigator.clipboard.readText(); + let range; + + try { + range = JSON.parse(raw); + + if (!range.from || !range.to) { + return { range: raw, isError: true }; + } + + return { range, isError: false }; + } catch (e) { + return { range: raw, isError: true }; + } +} diff --git a/public/app/core/utils/tracing.ts b/public/app/core/utils/tracing.ts deleted file mode 100644 index c0e947876280a..0000000000000 --- a/public/app/core/utils/tracing.ts +++ /dev/null @@ -1,118 +0,0 @@ -/** - * Get non overlapping duration of the ranges as they can overlap or have gaps. - */ -import { FieldType, MutableDataFrame, NodeGraphDataFrameFieldNames as Fields } from '@grafana/data'; - -export function getNonOverlappingDuration(ranges: Array<[number, number]>): number { - ranges.sort((a, b) => a[0] - b[0]); - const mergedRanges = ranges.reduce>((acc, range) => { - if (!acc.length) { - return [range]; - } - const tail = acc.slice(-1)[0]; - const [prevStart, prevEnd] = tail; - const [start, end] = range; - if (end < prevEnd) { - // In this case the range is completely inside the prev range so we can just ignore it. - return acc; - } - - if (start > prevEnd) { - // There is no overlap so we can just add it to stack - return [...acc, range]; - } - - // We know there is overlap and current range ends later than previous so we can just extend the range - return [...acc.slice(0, -1), [prevStart, end]]; - }, []); - - return mergedRanges.reduce((acc, range) => { - return acc + (range[1] - range[0]); - }, 0); -} - -/** - * Returns a map of the spans with children array for easier processing. It will also contain empty spans in case - * span is missing but other spans are its children. This is more generic because it needs to allow iterating over - * both arrays and dataframe views. - */ -export function makeSpanMap(getSpan: (index: number) => { span: T; id: string; parentIds: string[] } | undefined): { - [id: string]: { span: T; children: string[] }; -} { - const spanMap: { [id: string]: { span?: T; children: string[] } } = {}; - - let span; - for (let index = 0; (span = getSpan(index)), !!span; index++) { - if (!spanMap[span.id]) { - spanMap[span.id] = { - span: span.span, - children: [], - }; - } else { - spanMap[span.id].span = span.span; - } - - for (const parentId of span.parentIds) { - if (parentId) { - if (!spanMap[parentId]) { - spanMap[parentId] = { - span: undefined, - children: [span.id], - }; - } else { - spanMap[parentId].children.push(span.id); - } - } - } - } - return spanMap as { [id: string]: { span: T; children: string[] } }; -} - -export function getStats(duration: number, traceDuration: number, selfDuration: number) { - return { - main: `${toFixedNoTrailingZeros(duration)}ms (${toFixedNoTrailingZeros((duration / traceDuration) * 100)}%)`, - secondary: `${toFixedNoTrailingZeros(selfDuration)}ms (${toFixedNoTrailingZeros( - (selfDuration / duration) * 100 - )}%)`, - }; -} - -function toFixedNoTrailingZeros(n: number) { - return parseFloat(n.toFixed(2)); -} - -/** - * Create default frames used when returning data for node graph. - */ -export function makeFrames() { - const nodesFrame = new MutableDataFrame({ - fields: [ - { name: Fields.id, type: FieldType.string }, - { name: Fields.title, type: FieldType.string }, - { name: Fields.subTitle, type: FieldType.string }, - { name: Fields.mainStat, type: FieldType.string, config: { displayName: 'Total time (% of trace)' } }, - { name: Fields.secondaryStat, type: FieldType.string, config: { displayName: 'Self time (% of total)' } }, - { - name: Fields.color, - type: FieldType.number, - config: { color: { mode: 'continuous-GrYlRd' }, displayName: 'Self time / Trace duration' }, - }, - ], - meta: { - preferredVisualisationType: 'nodeGraph', - }, - }); - - const edgesFrame = new MutableDataFrame({ - fields: [ - { name: Fields.id, type: FieldType.string }, - { name: Fields.target, type: FieldType.string }, - { name: Fields.source, type: FieldType.string }, - ], - meta: { - preferredVisualisationType: 'nodeGraph', - }, - }); - - return [nodesFrame, edgesFrame]; -} diff --git a/public/app/features/admin/AdminEditOrgPage.tsx b/public/app/features/admin/AdminEditOrgPage.tsx index 7c4400acc66a6..910bc8552510b 100644 --- a/public/app/features/admin/AdminEditOrgPage.tsx +++ b/public/app/features/admin/AdminEditOrgPage.tsx @@ -1,42 +1,21 @@ import React, { useState, useEffect } from 'react'; +import { useForm } from 'react-hook-form'; import { useAsyncFn } from 'react-use'; -import { NavModelItem, UrlQueryValue } from '@grafana/data'; -import { getBackendSrv } from '@grafana/runtime'; -import { Form, Field, Input, Button, Legend, Alert } from '@grafana/ui'; +import { NavModelItem } from '@grafana/data'; +import { Field, Input, Button, Legend, Alert } from '@grafana/ui'; import { Page } from 'app/core/components/Page/Page'; import { contextSrv } from 'app/core/core'; import { GrafanaRouteComponentProps } from 'app/core/navigation/types'; -import { accessControlQueryParam } from 'app/core/utils/accessControl'; import { OrgUser, AccessControlAction, OrgRole } from 'app/types'; import { OrgUsersTable } from './Users/OrgUsersTable'; - -const perPage = 30; +import { getOrg, getOrgUsers, getUsersRoles, removeOrgUser, updateOrgName, updateOrgUserRole } from './api'; interface OrgNameDTO { orgName: string; } -const getOrg = async (orgId: UrlQueryValue) => { - return await getBackendSrv().get(`/api/orgs/${orgId}`); -}; - -const getOrgUsers = async (orgId: UrlQueryValue, page: number) => { - if (contextSrv.hasPermission(AccessControlAction.OrgUsersRead)) { - return getBackendSrv().get(`/api/orgs/${orgId}/users/search`, accessControlQueryParam({ perpage: perPage, page })); - } - return { orgUsers: [] }; -}; - -const updateOrgUserRole = (orgUser: OrgUser, orgId: UrlQueryValue) => { - return getBackendSrv().patch(`/api/orgs/${orgId}/users/${orgUser.userId}`, orgUser); -}; - -const removeOrgUser = (orgUser: OrgUser, orgId: UrlQueryValue) => { - return getBackendSrv().delete(`/api/orgs/${orgId}/users/${orgUser.userId}`); -}; - interface Props extends GrafanaRouteComponentProps<{ id: string }> {} const AdminEditOrgPage = ({ match }: Props) => { @@ -49,8 +28,18 @@ const AdminEditOrgPage = ({ match }: Props) => { const [totalPages, setTotalPages] = useState(1); const [orgState, fetchOrg] = useAsyncFn(() => getOrg(orgId), []); + const { + handleSubmit, + register, + formState: { errors }, + } = useForm(); const [, fetchOrgUsers] = useAsyncFn(async (page) => { const result = await getOrgUsers(orgId, page); + + if (contextSrv.licensedAccessControlEnabled()) { + await getUsersRoles(orgId, result.orgUsers); + } + const totalPages = result?.perPage !== 0 ? Math.ceil(result.totalCount / result.perPage) : 0; setTotalPages(totalPages); setUsers(result.orgUsers); @@ -62,8 +51,8 @@ const AdminEditOrgPage = ({ match }: Props) => { fetchOrgUsers(page); }, [fetchOrg, fetchOrgUsers, page]); - const updateOrgName = async (name: string) => { - return await getBackendSrv().put(`/api/orgs/${orgId}`, { ...orgState.value, name }); + const onUpdateOrgName = async ({ orgName }: OrgNameDTO) => { + await updateOrgName(orgName, orgId); }; const renderMissingPermissionMessage = () => ( @@ -99,21 +88,18 @@ const AdminEditOrgPage = ({ match }: Props) => { <> Edit organization {orgState.value && ( -
updateOrgName(values.orgName)} - > - {({ register, errors }) => ( - <> - - - - - - )} -
+
+ + + + +
)}
diff --git a/public/app/features/admin/AdminFeatureTogglesAPI.test.ts b/public/app/features/admin/AdminFeatureTogglesAPI.test.ts new file mode 100644 index 0000000000000..ca6c25be5251b --- /dev/null +++ b/public/app/features/admin/AdminFeatureTogglesAPI.test.ts @@ -0,0 +1,102 @@ +import { BackendSrvRequest, config } from '@grafana/runtime'; + +import { getTogglesAPI } from './AdminFeatureTogglesAPI'; + +// implements @grafana/runtime/BackendSrv +class MockSrv { + constructor() { + this.apiCalls = []; + } + + apiCalls: Array<{ + url: string; + method: string; + }>; + + async get( + url: string, + params?: BackendSrvRequest['params'], + requestId?: BackendSrvRequest['requestId'], + options?: Partial + ) { + this.apiCalls.push({ + url: url, + method: 'get', + }); + if (config.featureToggles.kubernetesFeatureToggles && url.indexOf('current') > -1) { + return await { toggles: [] }; + } + + return await {}; + } + + async post(url: string, data?: unknown, options?: Partial) { + this.apiCalls.push({ + url: url, + method: 'post', + }); + return await {}; + } + + async patch(url: string, data: unknown, options?: Partial) { + this.apiCalls.push({ + url: url, + method: 'patch', + }); + return await {}; + } + + // these aren't needed for this test + async put(url: string, data: unknown, options?: Partial) { + return await {}; + } + async delete(url: string, data?: unknown, options?: Partial) { + return await {}; + } +} + +const testBackendSrv = new MockSrv(); + +jest.mock('@grafana/runtime', () => ({ + ...jest.requireActual('@grafana/runtime'), + getBackendSrv: () => testBackendSrv, + config: { + featureToggles: { + kubernetesFeatureToggles: false, + grafanaAPIServerWithExperimentalAPIs: false, + }, + }, +})); + +describe('AdminFeatureTogglesApi', () => { + beforeEach(() => { + jest.clearAllMocks(); + testBackendSrv.apiCalls.length = 0; + }); + + const originalToggles = { ...config.featureToggles }; + + afterAll(() => { + config.featureToggles = originalToggles; + }); + + it('uses the k8s api when the k8s toggles are on', async () => { + config.featureToggles.kubernetesFeatureToggles = true; + config.featureToggles.grafanaAPIServerWithExperimentalAPIs = true; + + const togglesApi = getTogglesAPI(); + await togglesApi.getFeatureToggles(); + await togglesApi.updateFeatureToggles([]); + const expected = [ + { + method: 'get', + url: '/apis/featuretoggle.grafana.app/v0alpha1/current', + }, + { + method: 'patch', + url: '/apis/featuretoggle.grafana.app/v0alpha1/current', + }, + ]; + expect(testBackendSrv.apiCalls).toEqual(expect.arrayContaining(expected)); + }); +}); diff --git a/public/app/features/admin/AdminFeatureTogglesAPI.ts b/public/app/features/admin/AdminFeatureTogglesAPI.ts index 889f6f0759e03..6ecba0c8b7d6a 100644 --- a/public/app/features/admin/AdminFeatureTogglesAPI.ts +++ b/public/app/features/admin/AdminFeatureTogglesAPI.ts @@ -1,62 +1,77 @@ -import { createApi, BaseQueryFn } from '@reduxjs/toolkit/query/react'; -import { lastValueFrom } from 'rxjs'; - import { getBackendSrv } from '@grafana/runtime'; -type QueryArgs = { - url: string; - method?: string; - body?: { featureToggles: FeatureToggle[] }; -}; - -const backendSrvBaseQuery = - ({ baseUrl }: { baseUrl: string }): BaseQueryFn => - async ({ url, method = 'GET', body }) => { - try { - const { data } = await lastValueFrom( - getBackendSrv().fetch({ - url: baseUrl + url, - method, - data: body, - }) - ); - return { data }; - } catch (error) { - return { error }; - } - }; - -export const togglesApi = createApi({ - reducerPath: 'togglesApi', - baseQuery: backendSrvBaseQuery({ baseUrl: '/api' }), - endpoints: (builder) => ({ - getManagerState: builder.query({ - query: () => ({ url: '/featuremgmt/state' }), - }), - getFeatureToggles: builder.query({ - query: () => ({ url: '/featuremgmt' }), - }), - updateFeatureToggles: builder.mutation({ - query: (updatedToggles) => ({ - url: '/featuremgmt', - method: 'POST', - body: { featureToggles: updatedToggles }, - }), - }), - }), -}); - -type FeatureToggle = { +export type FeatureToggle = { name: string; description?: string; enabled: boolean; + stage: string; readOnly?: boolean; + hidden?: boolean; }; -type FeatureMgmtState = { +export type CurrentTogglesState = { restartRequired: boolean; allowEditing: boolean; + toggles: FeatureToggle[]; }; -export const { useGetManagerStateQuery, useGetFeatureTogglesQuery, useUpdateFeatureTogglesMutation } = togglesApi; -export type { FeatureToggle, FeatureMgmtState }; +interface ResolvedToggleState { + kind: 'ResolvedToggleState'; + restartRequired?: boolean; + allowEditing?: boolean; + toggles?: K8sToggleSpec[]; // not used in patch + enabled: { [key: string]: boolean }; +} + +interface K8sToggleSpec { + name: string; + description: string; + enabled: boolean; + writeable: boolean; + source: K8sToggleSource; + stage: string; +} + +interface K8sToggleSource { + namespace: string; + name: string; +} + +interface FeatureTogglesAPI { + getFeatureToggles(): Promise; + updateFeatureToggles(toggles: FeatureToggle[]): Promise; +} + +class K8sAPI implements FeatureTogglesAPI { + baseURL = '/apis/featuretoggle.grafana.app/v0alpha1'; + + async getFeatureToggles(): Promise { + const current = await getBackendSrv().get(this.baseURL + '/current'); + return { + restartRequired: Boolean(current.restartRequired), + allowEditing: Boolean(current.allowEditing), + toggles: current.toggles!.map((t) => ({ + name: t.name, + description: t.description!, + enabled: t.enabled, + readOnly: !Boolean(t.writeable), + stage: t.stage, + hidden: false, // only return visible things + })), + }; + } + updateFeatureToggles(toggles: FeatureToggle[]): Promise { + const patchBody: ResolvedToggleState = { + kind: 'ResolvedToggleState', + enabled: {}, + }; + toggles.forEach((t) => { + patchBody.enabled[t.name] = t.enabled; + }); + return getBackendSrv().patch(this.baseURL + '/current', patchBody); + } +} + +export const getTogglesAPI = (): FeatureTogglesAPI => { + return new K8sAPI(); +}; diff --git a/public/app/features/admin/AdminFeatureTogglesPage.tsx b/public/app/features/admin/AdminFeatureTogglesPage.tsx index 4d962d8b67eeb..0684405b3eec4 100644 --- a/public/app/features/admin/AdminFeatureTogglesPage.tsx +++ b/public/app/features/admin/AdminFeatureTogglesPage.tsx @@ -1,26 +1,22 @@ import { css } from '@emotion/css'; import React, { useState } from 'react'; +import { useAsync } from 'react-use'; import { GrafanaTheme2 } from '@grafana/data'; import { useStyles2, Icon } from '@grafana/ui'; import { Page } from 'app/core/components/Page/Page'; -import { useGetFeatureTogglesQuery, useGetManagerStateQuery } from './AdminFeatureTogglesAPI'; +import { getTogglesAPI } from './AdminFeatureTogglesAPI'; import { AdminFeatureTogglesTable } from './AdminFeatureTogglesTable'; export default function AdminFeatureTogglesPage() { - const { data: featureToggles, isLoading, isError } = useGetFeatureTogglesQuery(); - const { data: featureMgmtState } = useGetManagerStateQuery(); - const [updateSuccessful, setUpdateSuccessful] = useState(false); - + const [reload, setReload] = useState(1); + const togglesApi = getTogglesAPI(); + const featureState = useAsync(() => togglesApi.getFeatureToggles(), [reload]); const styles = useStyles2(getStyles); - const getErrorMessage = () => { - return 'Error fetching feature toggles'; - }; - const handleUpdateSuccess = () => { - setUpdateSuccessful(true); + setReload(reload + 1); }; const EditingAlert = () => { @@ -30,7 +26,7 @@ export default function AdminFeatureTogglesPage() {
- {featureMgmtState?.restartRequired || updateSuccessful + {featureState.value?.restartRequired ? 'A restart is pending for your Grafana instance to apply the latest feature toggle changes' : 'Saving feature toggle changes will prompt a restart of the instance, which may take a few minutes'} @@ -38,17 +34,32 @@ export default function AdminFeatureTogglesPage() { ); }; + const subTitle = ( +
+ View and edit feature toggles. Read more about feature toggles at{' '} + + grafana.com + + . +
+ ); + return ( - - + + <> - {isError && getErrorMessage()} - {isLoading && 'Fetching feature toggles'} - {featureMgmtState?.allowEditing && } - {featureToggles && ( + {featureState.error} + {featureState.loading && 'Fetching feature toggles'} + + + {featureState.value && ( )} diff --git a/public/app/features/admin/AdminFeatureTogglesTable.tsx b/public/app/features/admin/AdminFeatureTogglesTable.tsx index d67a60c71eb1d..3be88a6fe7574 100644 --- a/public/app/features/admin/AdminFeatureTogglesTable.tsx +++ b/public/app/features/admin/AdminFeatureTogglesTable.tsx @@ -1,8 +1,8 @@ import React, { useState, useRef } from 'react'; -import { Switch, InteractiveTable, Tooltip, type CellProps, Button, type SortByFn } from '@grafana/ui'; +import { Switch, InteractiveTable, Tooltip, type CellProps, Button, ConfirmModal, type SortByFn } from '@grafana/ui'; -import { type FeatureToggle, useUpdateFeatureTogglesMutation } from './AdminFeatureTogglesAPI'; +import { FeatureToggle, getTogglesAPI } from './AdminFeatureTogglesAPI'; interface Props { featureToggles: FeatureToggle[]; @@ -30,10 +30,13 @@ const sortByEnabled: SortByFn = (a, b) => { }; export function AdminFeatureTogglesTable({ featureToggles, allowEditing, onUpdateSuccess }: Props) { + // sort manually, doesn't look like it can be automatically done in the table + featureToggles.sort((a, b) => a.name.localeCompare(b.name)); const serverToggles = useRef(featureToggles); const [localToggles, setLocalToggles] = useState(featureToggles); - const [updateFeatureToggles] = useUpdateFeatureTogglesMutation(); const [isSaving, setIsSaving] = useState(false); + const [showSaveModel, setShowSaveModal] = useState(false); + const togglesApi = getTogglesAPI(); const handleToggleChange = (toggle: FeatureToggle, newValue: boolean) => { const updatedToggle = { ...toggle, enabled: newValue }; @@ -47,17 +50,23 @@ export function AdminFeatureTogglesTable({ featureToggles, allowEditing, onUpdat setIsSaving(true); try { const modifiedToggles = getModifiedToggles(); - const resp = await updateFeatureToggles(modifiedToggles); - if (!('error' in resp)) { - // server toggles successfully updated - serverToggles.current = [...localToggles]; - onUpdateSuccess(); - } + await togglesApi.updateFeatureToggles(modifiedToggles); + // Pretend the values came from a new request + serverToggles.current = [...localToggles]; + onUpdateSuccess(); // should trigger a new get } finally { setIsSaving(false); } }; + const saveButtonRef = useRef(null); + const showSaveChangesModal = (show: boolean) => () => { + setShowSaveModal(show); + if (!show && saveButtonRef.current) { + saveButtonRef.current.focus(); + } + }; + const getModifiedToggles = (): FeatureToggle[] => { return localToggles.filter((toggle, index) => toggle.enabled !== serverToggles.current[index].enabled); }; @@ -72,11 +81,30 @@ export function AdminFeatureTogglesTable({ featureToggles, allowEditing, onUpdat return 'Feature management is not configured for editing'; } if (readOnlyToggle) { - return 'Preview features are not editable'; + return 'This is a non-editable feature'; } return ''; }; + const getStageCell = (stage: string) => { + switch (stage) { + case 'GA': + return ( + +
GA
+
+ ); + case 'privatePreview': + case 'preview': + case 'experimental': + return 'Beta'; + case 'deprecated': + return 'Deprecated'; + default: + return stage; + } + }; + const columns = [ { id: 'name', @@ -90,11 +118,16 @@ export function AdminFeatureTogglesTable({ featureToggles, allowEditing, onUpdat cell: ({ cell: { value } }: CellProps) =>
{value}
, sortType: sortByDescription, }, + { + id: 'stage', + header: 'Stage', + cell: ({ cell: { value } }: CellProps) =>
{getStageCell(value)}
, + }, { id: 'enabled', header: 'State', - cell: ({ row }: CellProps) => ( - + cell: ({ row }: CellProps) => { + const renderStateSwitch = (
handleToggleChange(row.original, e.currentTarget.checked)} />
-
- ), + ); + + return row.original.readOnly ? ( + {renderStateSwitch} + ) : ( + renderStateSwitch + ); + }, sortType: sortByEnabled, }, ]; @@ -112,9 +151,28 @@ export function AdminFeatureTogglesTable({ featureToggles, allowEditing, onUpdat <> {allowEditing && (
- + +

+ Some features are stable (GA) and enabled by default, whereas some are currently in their preliminary + Beta phase, available for early adoption. +

+

We advise understanding the implications of each feature change before making modifications.

+
+ } + confirmText="Save changes" + onConfirm={async () => { + showSaveChangesModal(false)(); + handleSaveChanges(); + }} + onDismiss={showSaveChangesModal(false)} + />
)} featureToggle.name} /> diff --git a/public/app/features/admin/AdminListOrgsPage.tsx b/public/app/features/admin/AdminListOrgsPage.tsx index 486c6a37d1f9c..6423924c004f6 100644 --- a/public/app/features/admin/AdminListOrgsPage.tsx +++ b/public/app/features/admin/AdminListOrgsPage.tsx @@ -5,7 +5,7 @@ import { getBackendSrv, isFetchError } from '@grafana/runtime'; import { LinkButton } from '@grafana/ui'; import { Page } from 'app/core/components/Page/Page'; import { contextSrv } from 'app/core/services/context_srv'; -import { AccessControlAction } from 'app/types'; +import { AccessControlAction, Organization } from 'app/types'; import { AdminOrgsTable } from './AdminOrgsTable'; @@ -14,7 +14,7 @@ const deleteOrg = async (orgId: number) => { }; const getOrgs = async () => { - return await getBackendSrv().get('/api/orgs'); + return await getBackendSrv().get('/api/orgs'); }; const getErrorMessage = (error: Error) => { @@ -30,26 +30,25 @@ export default function AdminListOrgsPages() { }, [fetchOrgs]); return ( - + + New org + + } + > - <> -
-
- - New org - -
- {state.error && getErrorMessage(state.error)} - {state.loading && 'Fetching organizations'} - {state.value && ( - { - deleteOrg(orgId).then(() => fetchOrgs()); - }} - /> - )} - + {state.error && getErrorMessage(state.error)} + {state.loading && } + {state.value && ( + { + deleteOrg(orgId).then(() => fetchOrgs()); + }} + /> + )} ); diff --git a/public/app/features/admin/AdminOrgsTable.tsx b/public/app/features/admin/AdminOrgsTable.tsx index 6a042ca6af253..8f6cd87a5717b 100644 --- a/public/app/features/admin/AdminOrgsTable.tsx +++ b/public/app/features/admin/AdminOrgsTable.tsx @@ -1,6 +1,10 @@ +import { css } from '@emotion/css'; import React, { useState } from 'react'; +import Skeleton from 'react-loading-skeleton'; -import { Button, ConfirmModal } from '@grafana/ui'; +import { GrafanaTheme2 } from '@grafana/data'; +import { Button, ConfirmModal, useStyles2 } from '@grafana/ui'; +import { SkeletonComponent, attachSkeleton } from '@grafana/ui/src/unstable'; import { contextSrv } from 'app/core/core'; import { AccessControlAction, Organization } from 'app/types'; @@ -9,19 +13,23 @@ interface Props { onDelete: (orgId: number) => void; } -export function AdminOrgsTable({ orgs, onDelete }: Props) { +const getTableHeader = () => ( + + + ID + Name + + + +); + +function AdminOrgsTableComponent({ orgs, onDelete }: Props) { const canDeleteOrgs = contextSrv.hasPermission(AccessControlAction.OrgsDelete); const [deleteOrg, setDeleteOrg] = useState(); return ( - - - - - - - + {getTableHeader()} {orgs.map((org) => ( @@ -66,3 +74,38 @@ export function AdminOrgsTable({ orgs, onDelete }: Props) {
IDName
); } + +const AdminOrgsTableSkeleton: SkeletonComponent = ({ rootProps }) => { + const styles = useStyles2(getSkeletonStyles); + return ( + + {getTableHeader()} + + {new Array(3).fill(null).map((_, index) => ( + + + + + + ))} + +
+ + + + + +
+ ); +}; + +export const AdminOrgsTable = attachSkeleton(AdminOrgsTableComponent, AdminOrgsTableSkeleton); + +const getSkeletonStyles = (theme: GrafanaTheme2) => ({ + deleteButton: css({ + alignItems: 'center', + display: 'flex', + height: 30, + lineHeight: 1, + }), +}); diff --git a/public/app/features/admin/AdminSettings.tsx b/public/app/features/admin/AdminSettings.tsx index 656709772bed7..4bd16ba2309bd 100644 --- a/public/app/features/admin/AdminSettings.tsx +++ b/public/app/features/admin/AdminSettings.tsx @@ -4,39 +4,24 @@ import { useAsync } from 'react-use'; import { getBackendSrv } from '@grafana/runtime'; import { Page } from 'app/core/components/Page/Page'; -type Settings = { [key: string]: { [key: string]: string } }; +import { AdminSettingsTable } from './AdminSettingsTable'; + +export type Settings = { [key: string]: { [key: string]: string } }; function AdminSettings() { const { loading, value: settings } = useAsync(() => getBackendSrv().get('/api/admin/settings'), []); return ( - +
These system settings are defined in grafana.ini or custom.ini (or overridden in ENV variables). To change these you currently need to restart Grafana.
- {settings && ( - - - {Object.entries(settings).map(([sectionName, sectionSettings], i) => ( - - - - - {Object.entries(sectionSettings).map(([settingName, settingValue], j) => ( - - - - - ))} - - ))} - -
{sectionName} -
{settingName}{settingValue}
- )} + {loading && } + + {settings && }
); diff --git a/public/app/features/admin/AdminSettingsTable.tsx b/public/app/features/admin/AdminSettingsTable.tsx new file mode 100644 index 0000000000000..a026998aa1b53 --- /dev/null +++ b/public/app/features/admin/AdminSettingsTable.tsx @@ -0,0 +1,75 @@ +import React from 'react'; +import Skeleton from 'react-loading-skeleton'; + +import { SkeletonComponent, attachSkeleton } from '@grafana/ui/src/unstable'; + +import { Settings } from './AdminSettings'; + +interface Props { + settings: Settings; +} + +const AdminSettingsTableComponent = ({ settings }: Props) => { + return ( + + + {Object.entries(settings).map(([sectionName, sectionSettings], i) => ( + + + + + {Object.entries(sectionSettings).map(([settingName, settingValue], j) => ( + + + + + ))} + + ))} + +
{sectionName} +
{settingName}{settingValue}
+ ); +}; + +// note: don't want to put this in render function else it will get regenerated +const randomValues = new Array(50).fill(null).map(() => Math.random()); + +const AdminSettingsTableSkeleton: SkeletonComponent = ({ rootProps }) => { + return ( + + + {randomValues.map((randomValue, index) => { + const isSection = index === 0 || randomValue > 0.9; + + return ( + + {isSection && ( + + + + )} + + + + + + ); + })} + +
+ + +
+ + + +
+ ); +}; + +function getRandomInRange(min: number, max: number, randomSeed: number) { + return randomSeed * (max - min) + min; +} + +export const AdminSettingsTable = attachSkeleton(AdminSettingsTableComponent, AdminSettingsTableSkeleton); diff --git a/public/app/features/admin/ServerStats.test.tsx b/public/app/features/admin/ServerStats.test.tsx index 3bae8e74e0b88..2a88bcb7fe58e 100644 --- a/public/app/features/admin/ServerStats.test.tsx +++ b/public/app/features/admin/ServerStats.test.tsx @@ -1,6 +1,8 @@ import { render, screen } from '@testing-library/react'; import React from 'react'; +import config from 'app/core/config'; + import { ServerStats } from './ServerStats'; import { ServerStat } from './state/apis'; @@ -10,6 +12,7 @@ const stats: ServerStat = { activeSessions: 1, activeUsers: 1, activeViewers: 0, + activeDevices: 1, admins: 1, alerts: 5, dashboards: 1599, @@ -43,7 +46,15 @@ describe('ServerStats', () => { expect(screen.getByText('Snapshots')).toBeInTheDocument(); expect(screen.getByRole('link', { name: 'Manage dashboards' })).toBeInTheDocument(); expect(screen.getByRole('link', { name: 'Manage data sources' })).toBeInTheDocument(); - expect(screen.getByRole('link', { name: 'Alerts' })).toBeInTheDocument(); + expect(screen.getByRole('link', { name: 'Manage alerts' })).toBeInTheDocument(); expect(screen.getByRole('link', { name: 'Manage users' })).toBeInTheDocument(); }); + + it('Should render page with anonymous stats', async () => { + config.anonymousEnabled = true; + config.anonymousDeviceLimit = 10; + render(); + expect(await screen.findByRole('heading', { name: /instance statistics/i })).toBeInTheDocument(); + expect(screen.getByText('Active anonymous devices')).toBeInTheDocument(); + }); }); diff --git a/public/app/features/admin/ServerStats.tsx b/public/app/features/admin/ServerStats.tsx index 116fc8e2f3227..8d3664954575e 100644 --- a/public/app/features/admin/ServerStats.tsx +++ b/public/app/features/admin/ServerStats.tsx @@ -2,17 +2,18 @@ import { css } from '@emotion/css'; import React, { useEffect, useState } from 'react'; import { GrafanaTheme2 } from '@grafana/data'; -import { CardContainer, LinkButton, useStyles2 } from '@grafana/ui'; +import { config, GrafanaBootConfig } from '@grafana/runtime'; +import { LinkButton, useStyles2 } from '@grafana/ui'; import { AccessControlAction } from 'app/types'; import { contextSrv } from '../../core/services/context_srv'; -import { Loader } from '../plugins/admin/components/Loader'; +import { ServerStatsCard } from './ServerStatsCard'; import { getServerStats, ServerStat } from './state/apis'; export const ServerStats = () => { const [stats, setStats] = useState(null); - const [isLoading, setIsLoading] = useState(false); + const [isLoading, setIsLoading] = useState(true); const styles = useStyles2(getStyles); const hasAccessToDataSources = contextSrv.hasPermission(AccessControlAction.DataSourcesRead); @@ -20,7 +21,6 @@ export const ServerStats = () => { useEffect(() => { if (contextSrv.hasPermission(AccessControlAction.ActionServerStatsRead)) { - setIsLoading(true); getServerStats().then((stats) => { setStats(stats); setIsLoading(false); @@ -35,18 +35,17 @@ export const ServerStats = () => { return ( <>

Instance statistics

- {isLoading ? ( -
- -
- ) : stats ? ( + {!isLoading && !stats ? ( +

No stats found.

+ ) : (
- @@ -56,8 +55,9 @@ export const ServerStats = () => { />
- @@ -66,21 +66,24 @@ export const ServerStats = () => { ) } /> - - Alerts + Manage alerts } />
- { } />
- ) : ( -

No stats found.

)} ); }; -const getStyles = (theme: GrafanaTheme2) => { - return { - title: css` - margin-bottom: ${theme.spacing(4)}; - `, - row: css` - display: flex; - justify-content: space-between; - width: 100%; - - & > div:not(:last-of-type) { - margin-right: ${theme.spacing(2)}; - } - - & > div { - width: 33.3%; - } - `, - doubleRow: css` - display: flex; - flex-direction: column; - - & > div:first-of-type { - margin-bottom: ${theme.spacing(2)}; - } - `, - - loader: css` - height: 290px; - `, - - notFound: css` - font-size: ${theme.typography.h6.fontSize}; - text-align: center; - height: 290px; - `, - }; -}; - -type StatCardProps = { - content: Array>; - footer?: JSX.Element | boolean; -}; - -const StatCard = ({ content, footer }: StatCardProps) => { - const styles = useStyles2(getCardStyles); - return ( - -
-
- {content.map((item) => { - return ( -
- {item.name} - {item.value} -
- ); - })} -
- {footer &&
{footer}
} -
-
- ); +const getAnonymousStatsContent = (stats: ServerStat | null, config: GrafanaBootConfig) => { + if (!config.anonymousEnabled || !stats?.activeDevices) { + return []; + } + if (!config.anonymousDeviceLimit) { + return [ + { + name: 'Active anonymous devices', + value: `${stats.activeDevices}`, + tooltip: 'Detected devices that are not logged in, in last 30 days.', + }, + ]; + } else { + return [ + { + name: 'Active anonymous devices', + value: `${stats.activeDevices} / ${config.anonymousDeviceLimit}`, + tooltip: 'Detected devices that are not logged in, in last 30 days.', + highlight: stats.activeDevices > config.anonymousDeviceLimit, + }, + ]; + } }; -const getCardStyles = (theme: GrafanaTheme2) => { +const getStyles = (theme: GrafanaTheme2) => { return { - container: css` - padding: ${theme.spacing(2)}; - `, - inner: css` - display: flex; - flex-direction: column; - width: 100%; - `, - content: css` - flex: 1 0 auto; - `, - row: css` - display: flex; - justify-content: space-between; - width: 100%; - margin-bottom: ${theme.spacing(2)}; - align-items: center; - `, + title: css({ + marginBottom: theme.spacing(4), + }), + row: css({ + display: 'flex', + justifyContent: 'space-between', + width: '100%', + + '& > div:not(:last-of-type)': { + marginRight: theme.spacing(2), + }, + + '& > div': { + width: '33.3%', + }, + }), + doubleRow: css({ + display: 'flex', + flexDirection: 'column', + + '& > div:first-of-type': { + marginBottom: theme.spacing(2), + }, + }), + notFound: css({ + fontSize: theme.typography.h6.fontSize, + textAlign: 'center', + height: '290px', + }), }; }; diff --git a/public/app/features/admin/ServerStatsCard.tsx b/public/app/features/admin/ServerStatsCard.tsx new file mode 100644 index 0000000000000..66fdabde6d8de --- /dev/null +++ b/public/app/features/admin/ServerStatsCard.tsx @@ -0,0 +1,68 @@ +import { css, cx } from '@emotion/css'; +import React from 'react'; +import Skeleton from 'react-loading-skeleton'; + +import { GrafanaTheme2 } from '@grafana/data'; +import { Card, Stack, useStyles2, Tooltip, Icon } from '@grafana/ui'; + +interface StatItem { + name: string; + value: string | number | undefined; + tooltip?: string; + highlight?: boolean; + indent?: boolean; +} + +export interface Props { + content: StatItem[]; + isLoading?: boolean; + footer?: JSX.Element | boolean; +} + +export const ServerStatsCard = ({ content, footer, isLoading }: Props) => { + const styles = useStyles2(getStyles); + return ( + + {content.map((item, index) => ( + + + {item.name} + {item.tooltip && ( + + + + )} + + {isLoading ? ( + + ) : ( + {item.value} + )} + + ))} + {footer &&
{footer}
} +
+ ); +}; + +const getStyles = (theme: GrafanaTheme2) => { + return { + container: css({ + display: 'flex', + flexDirection: 'column', + gap: theme.spacing(2), + padding: theme.spacing(2), + }), + indent: css({ + marginLeft: theme.spacing(2), + }), + tooltip: css({ + color: theme.colors.secondary.text, + }), + highlight: css({ + color: theme.colors.warning.text, + padding: `${theme.spacing(0.5)} ${theme.spacing(1)}`, + marginRight: `-${theme.spacing(1)}`, + }), + }; +}; diff --git a/public/app/features/admin/UserAdminPage.tsx b/public/app/features/admin/UserAdminPage.tsx index f1409bc1c7b4c..0d0109c520a56 100644 --- a/public/app/features/admin/UserAdminPage.tsx +++ b/public/app/features/admin/UserAdminPage.tsx @@ -3,6 +3,7 @@ import { connect, ConnectedProps } from 'react-redux'; import { NavModelItem } from '@grafana/data'; import { featureEnabled } from '@grafana/runtime'; +import { Stack } from '@grafana/ui'; import { Page } from 'app/core/components/Page/Page'; import { contextSrv } from 'app/core/core'; import { GrafanaRouteComponentProps } from 'app/core/navigation/types'; @@ -117,50 +118,52 @@ export class UserAdminPage extends PureComponent { return ( - {user && ( - <> - + {user && ( + <> + + {isLDAPUser && + user?.isExternallySynced && + featureEnabled('ldapsync') && + ldapSyncInfo && + canReadLDAPStatus && ( + + )} + + + )} + + {orgs && ( + - {isLDAPUser && - user?.isExternallySynced && - featureEnabled('ldapsync') && - ldapSyncInfo && - canReadLDAPStatus && ( - - )} - - - )} - - {orgs && ( - - )} - - {sessions && canReadSessions && ( - - )} + )} + ); diff --git a/public/app/features/admin/UserCreatePage.tsx b/public/app/features/admin/UserCreatePage.tsx index da72bd30d90a3..34bdee39089d0 100644 --- a/public/app/features/admin/UserCreatePage.tsx +++ b/public/app/features/admin/UserCreatePage.tsx @@ -1,9 +1,10 @@ import React, { useCallback } from 'react'; +import { useForm } from 'react-hook-form'; import { useHistory } from 'react-router-dom'; import { NavModelItem } from '@grafana/data'; import { getBackendSrv } from '@grafana/runtime'; -import { Form, Button, Input, Field } from '@grafana/ui'; +import { Button, Input, Field } from '@grafana/ui'; import { Page } from 'app/core/components/Page/Page'; interface UserDTO { @@ -24,6 +25,11 @@ const pageNav: NavModelItem = { const UserCreatePage = () => { const history = useHistory(); + const { + handleSubmit, + register, + formState: { errors }, + } = useForm({ mode: 'onBlur' }); const onSubmit = useCallback( async (data: UserDTO) => { @@ -37,45 +43,34 @@ const UserCreatePage = () => { return ( -
- {({ register, errors }) => { - return ( - <> - - - + + + + - - - + + + - - - - - value.trim() !== '' && value.length >= 4, - })} - type="password" - /> - - - - ); - }} -
+ + + + + value.trim() !== '' && value.length >= 4, + })} + type="password" + /> + + +
); diff --git a/public/app/features/admin/UserListAdminPage.tsx b/public/app/features/admin/UserListAdminPage.tsx index a675cef2c2b2b..6fbbc543a5680 100644 --- a/public/app/features/admin/UserListAdminPage.tsx +++ b/public/app/features/admin/UserListAdminPage.tsx @@ -4,9 +4,10 @@ import { connect, ConnectedProps } from 'react-redux'; import { GrafanaTheme2 } from '@grafana/data'; import { selectors as e2eSelectors } from '@grafana/e2e-selectors/src'; -import { LinkButton, RadioButtonGroup, useStyles2, FilterInput } from '@grafana/ui'; +import { LinkButton, RadioButtonGroup, useStyles2, FilterInput, EmptyState } from '@grafana/ui'; import { Page } from 'app/core/components/Page/Page'; import { contextSrv } from 'app/core/core'; +import { t } from 'app/core/internationalization'; import { AccessControlAction, StoreState, UserFilter } from '../../types'; @@ -40,6 +41,7 @@ const mapStateToProps = (state: StoreState) => ({ totalPages: state.userListAdmin.totalPages, page: state.userListAdmin.page, filters: state.userListAdmin.filters, + isLoading: state.userListAdmin.isLoading, }); const connector = connect(mapStateToProps, mapDispatchToProps); @@ -60,6 +62,7 @@ const UserListAdminPageUnConnected = ({ page, changePage, changeSort, + isLoading, }: Props) => { const styles = useStyles2(getStyles); @@ -96,14 +99,18 @@ const UserListAdminPageUnConnected = ({ )}
- + {!isLoading && users.length === 0 ? ( + + ) : ( + + )} ); }; diff --git a/public/app/features/admin/UserListAnonymousPage.tsx b/public/app/features/admin/UserListAnonymousPage.tsx new file mode 100644 index 0000000000000..3d4355653a9db --- /dev/null +++ b/public/app/features/admin/UserListAnonymousPage.tsx @@ -0,0 +1,130 @@ +import { css } from '@emotion/css'; +import React, { useEffect } from 'react'; +import { connect, ConnectedProps } from 'react-redux'; + +import { GrafanaTheme2 } from '@grafana/data'; +import { selectors as e2eSelectors } from '@grafana/e2e-selectors/src'; +import { RadioButtonGroup, useStyles2, FilterInput } from '@grafana/ui'; +import { Page } from 'app/core/components/Page/Page'; + +import { StoreState } from '../../types'; + +import { AnonUsersDevicesTable } from './Users/AnonUsersTable'; +import { fetchUsersAnonymousDevices, changeAnonUserSort, changeAnonPage, changeAnonQuery } from './state/actions'; + +const mapDispatchToProps = { + fetchUsersAnonymousDevices, + changeAnonUserSort, + changeAnonPage, + changeAnonQuery, +}; + +const mapStateToProps = (state: StoreState) => ({ + devices: state.userListAnonymousDevices.devices, + query: state.userListAnonymousDevices.query, + showPaging: state.userListAnonymousDevices.showPaging, + totalPages: state.userListAnonymousDevices.totalPages, + page: state.userListAnonymousDevices.page, + filters: state.userListAnonymousDevices.filters, +}); + +const selectors = e2eSelectors.pages.UserListPage.UserListAdminPage; + +const connector = connect(mapStateToProps, mapDispatchToProps); + +interface OwnProps {} + +type Props = OwnProps & ConnectedProps; + +const UserListAnonymousDevicesPageUnConnected = ({ + devices, + fetchUsersAnonymousDevices, + query, + changeAnonQuery, + filters, + showPaging, + totalPages, + page, + changeAnonPage, + changeAnonUserSort, +}: Props) => { + const styles = useStyles2(getStyles); + + useEffect(() => { + fetchUsersAnonymousDevices(); + }, [fetchUsersAnonymousDevices]); + + return ( + +
+
+ + changeFilter({ name: 'activeLast30Days', value })} + value={filters.find((f) => f.name === 'activeLast30Days')?.value} + className={styles.filter} + /> +
+
+ +
+ ); +}; + +export const UserListAnonymousDevicesPageContent = connector(UserListAnonymousDevicesPageUnConnected); + +export function UserListAnonymousDevicesPage() { + return ( + + + + ); +} + +const getStyles = (theme: GrafanaTheme2) => { + return { + filter: css({ + margin: theme.spacing(0, 1), + [theme.breakpoints.down('sm')]: { + margin: 0, + }, + }), + actionBar: css({ + marginBottom: theme.spacing(2), + display: 'flex', + alignItems: 'flex-start', + gap: theme.spacing(2), + [theme.breakpoints.down('sm')]: { + flexWrap: 'wrap', + }, + }), + row: css({ + display: 'flex', + alignItems: 'flex-start', + textAlign: 'left', + marginBottom: theme.spacing(0.5), + flexGrow: 1, + + [theme.breakpoints.down('sm')]: { + flexWrap: 'wrap', + gap: theme.spacing(2), + width: '100%', + }, + }), + }; +}; + +export default UserListAnonymousDevicesPage; diff --git a/public/app/features/admin/UserListPage.tsx b/public/app/features/admin/UserListPage.tsx index 17bf9ab28bfc7..378740f95a6f8 100644 --- a/public/app/features/admin/UserListPage.tsx +++ b/public/app/features/admin/UserListPage.tsx @@ -5,26 +5,30 @@ import { GrafanaTheme2 } from '@grafana/data'; import { selectors as e2eSelectors } from '@grafana/e2e-selectors'; import { config, featureEnabled } from '@grafana/runtime'; import { useStyles2, TabsBar, Tab } from '@grafana/ui'; +import { t } from 'app/core/internationalization'; import { contextSrv } from 'app/core/services/context_srv'; +import { isPublicDashboardsEnabled } from 'app/features/dashboard/components/ShareModal/SharePublicDashboard/SharePublicDashboardUtils'; import { Page } from '../../core/components/Page/Page'; import { AccessControlAction } from '../../types'; import { UsersListPageContent } from '../users/UsersListPage'; import { UserListAdminPageContent } from './UserListAdminPage'; +import { UserListAnonymousDevicesPageContent } from './UserListAnonymousPage'; import { UserListPublicDashboardPage } from './UserListPublicDashboardPage/UserListPublicDashboardPage'; enum TabView { ADMIN = 'admin', ORG = 'org', PUBLIC_DASHBOARDS = 'public-dashboards', + ANON = 'anon', } const selectors = e2eSelectors.pages.UserListPage; const PublicDashboardsTab = ({ view, setView }: { view: TabView | null; setView: (v: TabView | null) => void }) => ( setView(TabView.PUBLIC_DASHBOARDS)} data-testid={selectors.tabs.publicDashboardsUsers} @@ -35,6 +39,7 @@ const TAB_PAGE_MAP: Record = { [TabView.ADMIN]: , [TabView.ORG]: , [TabView.PUBLIC_DASHBOARDS]: , + [TabView.ANON]: , }; export default function UserListPage() { @@ -43,7 +48,7 @@ export default function UserListPage() { const hasAccessToAdminUsers = contextSrv.hasPermission(AccessControlAction.UsersRead); const hasAccessToOrgUsers = contextSrv.hasPermission(AccessControlAction.OrgUsersRead); const hasEmailSharingEnabled = - Boolean(config.featureToggles.publicDashboards) && + isPublicDashboardsEnabled() && Boolean(config.featureToggles.publicDashboardsEmailSharing) && featureEnabled('publicDashboardsEmailSharing'); @@ -74,6 +79,14 @@ export default function UserListPage() { onChangeTab={() => setView(TabView.ORG)} data-testid={selectors.tabs.orgUsers} /> + {config.anonymousEnabled && ( + setView(TabView.ANON)} + data-testid={selectors.tabs.anonUserDevices} + /> + )} {hasEmailSharingEnabled && } ) : ( diff --git a/public/app/features/admin/UserListPublicDashboardPage/DashboardsListModalButton.tsx b/public/app/features/admin/UserListPublicDashboardPage/DashboardsListModalButton.tsx index ae1c4ada56968..625b4075679ea 100644 --- a/public/app/features/admin/UserListPublicDashboardPage/DashboardsListModalButton.tsx +++ b/public/app/features/admin/UserListPublicDashboardPage/DashboardsListModalButton.tsx @@ -4,6 +4,7 @@ import React from 'react'; import { GrafanaTheme2 } from '@grafana/data/src'; import { selectors as e2eSelectors } from '@grafana/e2e-selectors/src'; import { Button, LoadingPlaceholder, Modal, ModalsController, useStyles2 } from '@grafana/ui/src'; +import { Trans, t } from 'app/core/internationalization'; import { generatePublicDashboardConfigUrl, generatePublicDashboardUrl, @@ -18,10 +19,17 @@ export const DashboardsListModal = ({ email, onDismiss }: { email: string; onDis const { data: dashboards, isLoading } = useGetActiveUserDashboardsQuery(email); return ( - + {isLoading ? (
- +
) : ( dashboards?.map((dash) => ( @@ -35,15 +43,19 @@ export const DashboardsListModal = ({ email, onDismiss }: { email: string; onDis href={generatePublicDashboardUrl(dash.publicDashboardAccessToken)} onClick={onDismiss} > - Public dashboard URL + + Public dashboard URL + - Public dashboard settings + + Public dashboard settings +
@@ -54,20 +66,26 @@ export const DashboardsListModal = ({ email, onDismiss }: { email: string; onDis ); }; -export const DashboardsListModalButton = ({ email }: { email: string }) => ( - - {({ showModal, hideModal }) => ( - +
); }; -export const DeleteUserModalButton = ({ user }: { user: SessionUser }) => ( - - {({ showModal, hideModal }) => ( - - - )} - - {userError && userError.title && ( - - {userError.body} - - )} - {ldapUser && } - - )} - - -
- ); - } -} + } + /> + + + {userError && userError.title && ( + + {userError.body} + + )} + {ldapUser && } + + )} + + + + ); +}; const mapStateToProps = (state: StoreState) => ({ ldapConnectionInfo: state.ldap.connectionInfo, diff --git a/public/app/features/admin/ldap/LdapSyncInfo.tsx b/public/app/features/admin/ldap/LdapSyncInfo.tsx index aabcd79358b3a..6dc3dbcf56e7c 100644 --- a/public/app/features/admin/ldap/LdapSyncInfo.tsx +++ b/public/app/features/admin/ldap/LdapSyncInfo.tsx @@ -1,63 +1,38 @@ -import React, { PureComponent } from 'react'; +import React from 'react'; import { dateTimeFormat } from '@grafana/data'; -import { Button, Spinner } from '@grafana/ui'; +import { InteractiveTable, Text } from '@grafana/ui'; import { SyncInfo } from 'app/types'; interface Props { ldapSyncInfo: SyncInfo; } -interface State { - isSyncing: boolean; -} - const format = 'dddd YYYY-MM-DD HH:mm zz'; -export class LdapSyncInfo extends PureComponent { - state = { - isSyncing: false, - }; - - handleSyncClick = () => { - this.setState({ isSyncing: !this.state.isSyncing }); - }; - - render() { - const { ldapSyncInfo } = this.props; - const { isSyncing } = this.state; - const nextSyncTime = dateTimeFormat(ldapSyncInfo.nextSync, { format }); - - return ( - <> -

- LDAP Synchronisation - -

-
-
- - - - - - - - - - - - - - - -
Active synchronisation{ldapSyncInfo.enabled ? 'Enabled' : 'Disabled'}
Scheduled{ldapSyncInfo.schedule}
Next scheduled synchronisation{nextSyncTime}
-
-
- - ); - } -} +export const LdapSyncInfo = ({ ldapSyncInfo }: Props) => { + const nextSyncTime = dateTimeFormat(ldapSyncInfo.nextSync, { format }); + + const columns = [{ id: 'syncAttribute' }, { id: 'syncValue' }]; + const data = [ + { + syncAttribute: 'Active synchronization', + syncValue: ldapSyncInfo.enabled ? 'Enabled' : 'Disabled', + }, + { + syncAttribute: 'Scheduled', + syncValue: ldapSyncInfo.schedule, + }, + { + syncAttribute: 'Next synchronization', + syncValue: nextSyncTime, + }, + ]; + + return ( +
+ LDAP Synchronization + sync.syncAttribute} /> +
+ ); +}; diff --git a/public/app/features/admin/ldap/LdapUserGroups.tsx b/public/app/features/admin/ldap/LdapUserGroups.tsx index 0c8c1a4f83e58..ced2acdab68af 100644 --- a/public/app/features/admin/ldap/LdapUserGroups.tsx +++ b/public/app/features/admin/ldap/LdapUserGroups.tsx @@ -1,54 +1,52 @@ -import React from 'react'; +import React, { useMemo } from 'react'; -import { Tooltip, Icon } from '@grafana/ui'; +import { Tooltip, Icon, InteractiveTable, type CellProps, Column } from '@grafana/ui'; import { LdapRole } from 'app/types'; interface Props { groups: LdapRole[]; - showAttributeMapping?: boolean; } -export const LdapUserGroups = ({ groups, showAttributeMapping }: Props) => { - const items = showAttributeMapping ? groups : groups.filter((item) => item.orgRole); +export const LdapUserGroups = ({ groups }: Props) => { + const items = useMemo(() => groups, [groups]); + + const columns = useMemo>>( + () => [ + { + id: 'groupDN', + header: 'LDAP Group', + }, + { + id: 'orgName', + header: 'Organization', + cell: (props: CellProps) => + props.value && props.row.original.orgRole ? props.value : '', + }, + { + id: 'orgRole', + header: 'Role', + cell: (props: CellProps) => + props.value || ( + <> + No match{' '} + + + + + ), + }, + ], + [] + ); return ( -
-
- - - - {showAttributeMapping && } - - - - - - {items.map((group, index) => { - return ( - - {showAttributeMapping && } - {group.orgName && group.orgRole ? : - ) : ( - - )} - - ); - })} - -
LDAP Group - Organization - - - - Role
{group.groupDN}{group.orgName}} - {group.orgRole ? ( - {group.orgRole} - No match - - - -
-
-
+ row.orgId + row.orgRole + row.groupDN} + /> ); }; diff --git a/public/app/features/admin/ldap/LdapUserInfo.tsx b/public/app/features/admin/ldap/LdapUserInfo.tsx index 441df16acdbd8..9f14a99f02f15 100644 --- a/public/app/features/admin/ldap/LdapUserInfo.tsx +++ b/public/app/features/admin/ldap/LdapUserInfo.tsx @@ -1,5 +1,6 @@ import React from 'react'; +import { Box, Stack, Text } from '@grafana/ui'; import { LdapUser } from 'app/types'; import { LdapUserGroups } from './LdapUserGroups'; @@ -9,33 +10,22 @@ import { LdapUserTeams } from './LdapUserTeams'; interface Props { ldapUser: LdapUser; - showAttributeMapping?: boolean; } -export const LdapUserInfo = ({ ldapUser, showAttributeMapping }: Props) => { +export const LdapUserInfo = ({ ldapUser }: Props) => { return ( - <> - + + - {ldapUser.roles && ldapUser.roles.length > 0 && ( - - )} + {ldapUser.roles && ldapUser.roles.length > 0 && } {ldapUser.teams && ldapUser.teams.length > 0 ? ( - + ) : ( -
-
- - - - - - -
No teams found via LDAP
-
-
+ + No teams found via LDAP + )} - +
); }; diff --git a/public/app/features/admin/ldap/LdapUserMappingInfo.tsx b/public/app/features/admin/ldap/LdapUserMappingInfo.tsx index f762aefd44459..c4989e4bf4dcf 100644 --- a/public/app/features/admin/ldap/LdapUserMappingInfo.tsx +++ b/public/app/features/admin/ldap/LdapUserMappingInfo.tsx @@ -1,47 +1,56 @@ -import React from 'react'; +import React, { useMemo } from 'react'; +import { InteractiveTable } from '@grafana/ui'; import { LdapUserInfo } from 'app/types'; interface Props { info: LdapUserInfo; - showAttributeMapping?: boolean; } -export const LdapUserMappingInfo = ({ info, showAttributeMapping }: Props) => { - return ( -
-
- - - - - {showAttributeMapping && } - - - - - - - {showAttributeMapping && } - - - - - {showAttributeMapping && } - - - - - {showAttributeMapping && } - - - - - {showAttributeMapping && } - - -
User informationLDAP attribute
First name{info.name.ldapValue}{info.name.cfgAttrValue}
Surname{info.surname.ldapValue}{info.surname.cfgAttrValue}
Username{info.login.ldapValue}{info.login.cfgAttrValue}
Email{info.email.ldapValue}{info.email.cfgAttrValue}
-
-
+export const LdapUserMappingInfo = ({ info }: Props) => { + const columns = useMemo( + () => [ + { + id: 'userInfo', + header: 'User Information', + disableGrow: true, + }, + { + id: 'ldapValue', + }, + { + id: 'cfgAttrValue', + header: 'LDAP attribute', + }, + ], + [] ); + + const rows = useMemo( + () => [ + { + userInfo: 'First name', + ldapValue: info.name.ldapValue, + cfgAttrValue: info.name.cfgAttrValue, + }, + { + userInfo: 'Surname', + ldapValue: info.surname.ldapValue, + cfgAttrValue: info.surname.cfgAttrValue, + }, + { + userInfo: 'Username', + ldapValue: info.login.ldapValue, + cfgAttrValue: info.login.cfgAttrValue, + }, + { + userInfo: 'Email', + ldapValue: info.email.ldapValue, + cfgAttrValue: info.email.cfgAttrValue, + }, + ], + [info] + ); + + return row.userInfo} />; }; diff --git a/public/app/features/admin/ldap/LdapUserPermissions.tsx b/public/app/features/admin/ldap/LdapUserPermissions.tsx index f31d0410da8b4..d206ce2d03cf1 100644 --- a/public/app/features/admin/ldap/LdapUserPermissions.tsx +++ b/public/app/features/admin/ldap/LdapUserPermissions.tsx @@ -1,52 +1,59 @@ -import React from 'react'; +import React, { useMemo } from 'react'; -import { Icon } from '@grafana/ui'; +import { Column, Icon, InteractiveTable } from '@grafana/ui'; import { LdapPermissions } from 'app/types'; interface Props { permissions: LdapPermissions; } +interface TableRow { + permission: string; + value: React.ReactNode; +} + export const LdapUserPermissions = ({ permissions }: Props) => { - return ( -
-
- - - - - - - - - - - - - - - - -
Permissions
Grafana admin - {permissions.isGrafanaAdmin ? ( - <> - Yes - - ) : ( - 'No' - )} -
Status - {permissions.isDisabled ? ( - <> - Inactive - - ) : ( - <> - Active - - )} -
-
-
+ const columns = useMemo>>( + () => [ + { + id: 'permission', + header: 'Permissions', + disableGrow: true, + }, + { + id: 'value', + }, + ], + [] ); + + const data = useMemo( + () => [ + { + permission: 'Grafana admin', + value: permissions.isGrafanaAdmin ? ( + <> + Yes + + ) : ( + 'No' + ), + }, + { + permission: 'Status', + value: permissions.isDisabled ? ( + <> + Inactive + + ) : ( + <> + Active + + ), + }, + ], + [permissions] + ); + + return row.permission} />; }; diff --git a/public/app/features/admin/ldap/LdapUserTeams.tsx b/public/app/features/admin/ldap/LdapUserTeams.tsx index b6edc7089dc6d..0df5926099cc7 100644 --- a/public/app/features/admin/ldap/LdapUserTeams.tsx +++ b/public/app/features/admin/ldap/LdapUserTeams.tsx @@ -1,59 +1,40 @@ -import React from 'react'; +import React, { useMemo } from 'react'; -import { Tooltip, Icon } from '@grafana/ui'; +import { Column, InteractiveTable, CellProps } from '@grafana/ui'; import { LdapTeam } from 'app/types'; interface Props { teams: LdapTeam[]; - showAttributeMapping?: boolean; } -export const LdapUserTeams = ({ teams, showAttributeMapping }: Props) => { - const items = showAttributeMapping ? teams : teams.filter((item) => item.teamName); - - return ( -
-
- - - - {showAttributeMapping && } - - - - - - {items.map((team, index) => { - return ( - - {showAttributeMapping && ( - <> - - {!team.orgName && ( - <> - - - )} - - )} - {team.orgName && ( - <> - - - - )} - - ); - })} - -
LDAP GroupOrganisationTeam
{team.groupDN} - - No match - - - - {team.orgName}{team.teamName}
-
-
+export const LdapUserTeams = ({ teams }: Props) => { + const columns = useMemo>>( + () => [ + { + id: 'groupDN', + header: 'LDAP Group', + }, + { + id: 'orgName', + header: 'Organization', + cell: ({ + row: { + original: { orgName }, + }, + }: CellProps) => <>{orgName || 'No matching teams found'}, + }, + { + id: 'teamName', + header: 'Team', + cell: ({ + row: { + original: { teamName, orgName }, + }, + }: CellProps) => (teamName && orgName ? teamName : ''), + }, + ], + [] ); + + return row.teamName} />; }; diff --git a/public/app/features/admin/state/actions.ts b/public/app/features/admin/state/actions.ts index f1daa23c7234e..e83e9f188fe56 100644 --- a/public/app/features/admin/state/actions.ts +++ b/public/app/features/admin/state/actions.ts @@ -6,7 +6,15 @@ import { FetchDataArgs } from '@grafana/ui'; import config from 'app/core/config'; import { contextSrv } from 'app/core/core'; import { accessControlQueryParam } from 'app/core/utils/accessControl'; -import { ThunkResult, LdapUser, UserSession, UserDTO, AccessControlAction, UserFilter } from 'app/types'; +import { + ThunkResult, + LdapUser, + UserSession, + UserDTO, + AccessControlAction, + UserFilter, + AnonUserFilter, +} from 'app/types'; import { userAdminPageLoadedAction, @@ -28,6 +36,10 @@ import { usersFetchBegin, usersFetchEnd, sortChanged, + usersAnonymousDevicesFetched, + anonUserSortChanged, + anonPageChanged, + anonQueryChanged, } from './reducers'; // UserAdminPage @@ -334,3 +346,74 @@ export function changeSort({ sortBy }: FetchDataArgs): ThunkResult { + return filters + .map((filter) => { + if (Array.isArray(filter.value)) { + return filter.value.map((v) => `${filter.name}=${v.value}`).join('&'); + } + return `${filter.name}=${filter.value}`; + }) + .join('&'); +}; + +export function fetchUsersAnonymousDevices(): ThunkResult { + return async (dispatch, getState) => { + try { + const { perPage, page, query, filters, sort } = getState().userListAnonymousDevices; + let url = `/api/anonymous/search?perpage=${perPage}&page=${page}&query=${query}&${getAnonFilters(filters)}`; + if (sort) { + url += `&sort=${sort}`; + } + const result = await getBackendSrv().get(url); + dispatch(usersAnonymousDevicesFetched(result)); + } catch (error) { + console.error(error); + } + }; +} + +const fetchAnonUsersWithDebounce = debounce((dispatch) => dispatch(fetchUsersAnonymousDevices()), 500); + +export function changeAnonUserSort({ sortBy }: FetchDataArgs): ThunkResult { + const sort = sortBy.length ? `${sortBy[0].id}-${sortBy[0].desc ? 'desc' : 'asc'}` : undefined; + return async (dispatch, getState) => { + const currentSort = getState().userListAnonymousDevices.sort; + if (currentSort !== sort) { + // dispatch(usersFetchBegin()); + dispatch(anonUserSortChanged(sort)); + dispatch(fetchUsersAnonymousDevices()); + } + }; +} + +export function changeAnonQuery(query: string): ThunkResult { + return async (dispatch) => { + // dispatch(usersFetchBegin()); + dispatch(anonQueryChanged(query)); + fetchAnonUsersWithDebounce(dispatch); + }; +} + +export function changeAnonPage(page: number): ThunkResult { + return async (dispatch) => { + // dispatch(usersFetchBegin()); + dispatch(anonPageChanged(page)); + dispatch(fetchUsersAnonymousDevices()); + }; +} + +// export function fetchUsersAnonymousDevices(): ThunkResult { +// return async (dispatch, getState) => { +// try { +// let url = `/api/anonymous/devices`; +// const result = await getBackendSrv().get(url); +// dispatch(usersAnonymousDevicesFetched({ devices: result })); +// } catch (error) { +// usersFetchEnd(); +// console.error(error); +// } +// }; +// } diff --git a/public/app/features/admin/state/apis.tsx b/public/app/features/admin/state/apis.tsx index 79c2061e4f534..a573d827ed6ea 100644 --- a/public/app/features/admin/state/apis.tsx +++ b/public/app/features/admin/state/apis.tsx @@ -1,6 +1,10 @@ import { getBackendSrv } from '@grafana/runtime'; -export interface ServerStat { +interface AnonServerStat { + activeDevices?: number; +} + +export interface ServerStat extends AnonServerStat { activeAdmins: number; activeEditors: number; activeSessions: number; diff --git a/public/app/features/admin/state/reducers.ts b/public/app/features/admin/state/reducers.ts index f525c7612baa4..550e3de57b64c 100644 --- a/public/app/features/admin/state/reducers.ts +++ b/public/app/features/admin/state/reducers.ts @@ -13,6 +13,9 @@ import { UserSession, UserListAdminState, UserFilter, + UserListAnonymousDevicesState, + UserAnonymousDeviceDTO, + AnonUserFilter, } from 'app/types'; const initialLdapState: LdapState = { @@ -201,8 +204,81 @@ export const { usersFetched, usersFetchBegin, usersFetchEnd, queryChanged, pageC userListAdminSlice.actions; export const userListAdminReducer = userListAdminSlice.reducer; +// UserListAnonymousPage + +const initialUserListAnonymousDevicesState: UserListAnonymousDevicesState = { + devices: [], + query: '', + page: 0, + perPage: 50, + totalPages: 1, + showPaging: false, + filters: [{ name: 'activeLast30Days', value: true }], +}; + +interface UsersAnonymousDevicesFetched { + devices: UserAnonymousDeviceDTO[]; + perPage: number; + page: number; + totalCount: number; +} + +export const userListAnonymousDevicesSlice = createSlice({ + name: 'userListAnonymousDevices', + initialState: initialUserListAnonymousDevicesState, + reducers: { + usersAnonymousDevicesFetched: (state, action: PayloadAction) => { + const { totalCount, perPage, ...rest } = action.payload; + const totalPages = Math.ceil(totalCount / perPage); + + return { + ...state, + ...rest, + totalPages, + perPage, + showPaging: totalPages > 1, + }; + }, + anonQueryChanged: (state, action: PayloadAction) => ({ + ...state, + query: action.payload, + page: 0, + }), + anonPageChanged: (state, action: PayloadAction) => ({ + ...state, + page: action.payload, + }), + anonUserSortChanged: (state, action: PayloadAction) => ({ + ...state, + page: 0, + sort: action.payload, + }), + filterChanged: (state, action: PayloadAction) => { + const { name, value } = action.payload; + + if (state.filters.some((filter) => filter.name === name)) { + return { + ...state, + page: 0, + filters: state.filters.map((filter) => (filter.name === name ? { ...filter, value } : filter)), + }; + } + return { + ...state, + page: 0, + filters: [...state.filters, action.payload], + }; + }, + }, +}); + +export const { usersAnonymousDevicesFetched, anonUserSortChanged, anonPageChanged, anonQueryChanged } = + userListAnonymousDevicesSlice.actions; +export const userListAnonymousDevicesReducer = userListAnonymousDevicesSlice.reducer; + export default { ldap: ldapReducer, userAdmin: userAdminReducer, userListAdmin: userListAdminReducer, + userListAnonymousDevices: userListAnonymousDevicesReducer, }; diff --git a/public/app/features/alerting/AlertHowToModal.tsx b/public/app/features/alerting/AlertHowToModal.tsx deleted file mode 100644 index 9de9bcf7eda2c..0000000000000 --- a/public/app/features/alerting/AlertHowToModal.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import React from 'react'; - -import { Modal, VerticalGroup } from '@grafana/ui'; - -export interface AlertHowToModalProps { - onDismiss: () => void; -} - -export function AlertHowToModal({ onDismiss }: AlertHowToModalProps): JSX.Element { - return ( - - - -

- Alerts are added and configured in the Alert tab of any dashboard graph panel, letting you build and visualize - an alert using existing queries. -

-

Remember to save the dashboard to persist your alert rule changes.

-
-
- ); -} diff --git a/public/app/features/alerting/AlertRuleItem.test.tsx b/public/app/features/alerting/AlertRuleItem.test.tsx deleted file mode 100644 index 9236a78442736..0000000000000 --- a/public/app/features/alerting/AlertRuleItem.test.tsx +++ /dev/null @@ -1,42 +0,0 @@ -import { render, screen, fireEvent } from '@testing-library/react'; -import React from 'react'; - -import AlertRuleItem, { Props } from './AlertRuleItem'; - -const setup = (propOverrides?: object) => { - const props: Props = { - rule: { - id: 1, - dashboardId: 1, - panelId: 1, - name: 'Some rule', - state: 'Open', - stateText: 'state text', - stateIcon: 'anchor', - stateClass: 'state class', - stateAge: 'age', - url: 'https://something.something.darkside', - }, - search: '', - onTogglePause: jest.fn(), - }; - - Object.assign(props, propOverrides); - - return render(); -}; - -describe('AlertRuleItem', () => { - it('should render component', () => { - const mockToggle = jest.fn(); - setup({ onTogglePause: mockToggle }); - - expect(screen.getByText('Some rule')).toBeInTheDocument(); - expect(screen.getByText('state text')).toBeInTheDocument(); - expect(screen.getByText('Pause')).toBeInTheDocument(); - expect(screen.getByText('Edit alert')).toBeInTheDocument(); - - fireEvent.click(screen.getByText('Pause')); - expect(mockToggle).toHaveBeenCalled(); - }); -}); diff --git a/public/app/features/alerting/AlertRuleItem.tsx b/public/app/features/alerting/AlertRuleItem.tsx deleted file mode 100644 index 16949dcb034ca..0000000000000 --- a/public/app/features/alerting/AlertRuleItem.tsx +++ /dev/null @@ -1,60 +0,0 @@ -import React, { useCallback } from 'react'; -import Highlighter from 'react-highlight-words'; - -import { Icon, Button, LinkButton, Card } from '@grafana/ui'; - -import { AlertRule } from '../../types'; - -export interface Props { - rule: AlertRule; - search: string; - onTogglePause: () => void; -} - -const AlertRuleItem = ({ rule, search, onTogglePause }: Props) => { - const ruleUrl = `${rule.url}?editPanel=${rule.panelId}&tab=alert`; - const renderText = useCallback( - (text: string) => ( - - ), - [search] - ); - - return ( - - {renderText(rule.name)} - - - - - - - {renderText(rule.stateText)}{' '} - - for {rule.stateAge} - - {rule.info ? renderText(rule.info) : null} - - - - - Edit alert - - - - ); -}; - -export default AlertRuleItem; diff --git a/public/app/features/alerting/AlertRuleList.test.tsx b/public/app/features/alerting/AlertRuleList.test.tsx deleted file mode 100644 index df8f7c795de70..0000000000000 --- a/public/app/features/alerting/AlertRuleList.test.tsx +++ /dev/null @@ -1,115 +0,0 @@ -import { render, screen } from '@testing-library/react'; -import userEvent from '@testing-library/user-event'; -import React from 'react'; -import { openMenu } from 'react-select-event'; -import { mockToolkitActionCreator } from 'test/core/redux/mocks'; -import { TestProvider } from 'test/helpers/TestProvider'; - -import { locationService } from '@grafana/runtime'; -import { getRouteComponentProps } from 'app/core/navigation/__mocks__/routeProps'; - -import appEvents from '../../core/app_events'; -import { ShowModalReactEvent } from '../../types/events'; - -import { AlertHowToModal } from './AlertHowToModal'; -import { AlertRuleListUnconnected, Props } from './AlertRuleList'; -import { setSearchQuery } from './state/reducers'; - -jest.mock('../../core/app_events', () => ({ - publish: jest.fn(), -})); - -const defaultProps: Props = { - ...getRouteComponentProps({}), - search: '', - isLoading: false, - alertRules: [], - getAlertRulesAsync: jest.fn().mockResolvedValue([]), - setSearchQuery: mockToolkitActionCreator(setSearchQuery), - togglePauseAlertRule: jest.fn(), -}; - -const setup = (propOverrides?: object) => { - const props: Props = { - ...defaultProps, - ...propOverrides, - }; - - const { rerender } = render( - - - - ); - - return { - rerender: (element: JSX.Element) => rerender({element}), - }; -}; - -afterEach(() => { - jest.clearAllMocks(); -}); - -describe('AlertRuleList', () => { - it('should call fetchrules when mounting', () => { - jest.spyOn(AlertRuleListUnconnected.prototype, 'fetchRules'); - - expect(AlertRuleListUnconnected.prototype.fetchRules).not.toHaveBeenCalled(); - setup(); - expect(AlertRuleListUnconnected.prototype.fetchRules).toHaveBeenCalled(); - }); - - it('should call fetchrules when props change', () => { - const fetchRulesSpy = jest.spyOn(AlertRuleListUnconnected.prototype, 'fetchRules'); - expect(AlertRuleListUnconnected.prototype.fetchRules).not.toHaveBeenCalled(); - const { rerender } = setup(); - expect(AlertRuleListUnconnected.prototype.fetchRules).toHaveBeenCalled(); - - fetchRulesSpy.mockReset(); - rerender(); - expect(AlertRuleListUnconnected.prototype.fetchRules).toHaveBeenCalled(); - }); - - describe('Get state filter', () => { - it('should be all if prop is not set', () => { - setup(); - expect(screen.getByText('All')).toBeInTheDocument(); - }); - - it('should return state filter if set', () => { - setup({ - queryParams: { state: 'not_ok' }, - }); - expect(screen.getByText('Not OK')).toBeInTheDocument(); - }); - }); - - describe('State filter changed', () => { - it('should update location', async () => { - setup(); - const stateFilterSelect = screen.getByLabelText('States'); - openMenu(stateFilterSelect); - await userEvent.click(screen.getByText('Not OK')); - expect(locationService.getSearchObject().state).toBe('not_ok'); - }); - }); - - describe('Open how to', () => { - it('should emit show-modal event', async () => { - setup(); - - await userEvent.click(screen.getByRole('button', { name: 'How to add an alert' })); - expect(appEvents.publish).toHaveBeenCalledWith(new ShowModalReactEvent({ component: AlertHowToModal })); - }); - }); - - describe('Search query change', () => { - it('should set search query', async () => { - setup(); - - await userEvent.click(screen.getByPlaceholderText('Search alerts')); - await userEvent.paste('dashboard'); - expect(defaultProps.setSearchQuery).toHaveBeenCalledWith('dashboard'); - }); - }); -}); diff --git a/public/app/features/alerting/AlertRuleList.tsx b/public/app/features/alerting/AlertRuleList.tsx deleted file mode 100644 index 55dc35d0ca21a..0000000000000 --- a/public/app/features/alerting/AlertRuleList.tsx +++ /dev/null @@ -1,147 +0,0 @@ -import React, { PureComponent } from 'react'; -import { connect, ConnectedProps } from 'react-redux'; - -import { SelectableValue } from '@grafana/data'; -import { config, locationService } from '@grafana/runtime'; -import { Button, FilterInput, LinkButton, Select, VerticalGroup } from '@grafana/ui'; -import appEvents from 'app/core/app_events'; -import { Page } from 'app/core/components/Page/Page'; -import { GrafanaRouteComponentProps } from 'app/core/navigation/types'; -import { AlertRule, StoreState } from 'app/types'; - -import { ShowModalReactEvent } from '../../types/events'; - -import { AlertHowToModal } from './AlertHowToModal'; -import AlertRuleItem from './AlertRuleItem'; -import { DeprecationNotice } from './components/DeprecationNotice'; -import { getAlertRulesAsync, togglePauseAlertRule } from './state/actions'; -import { setSearchQuery } from './state/reducers'; -import { getAlertRuleItems, getSearchQuery } from './state/selectors'; - -function mapStateToProps(state: StoreState) { - return { - alertRules: getAlertRuleItems(state), - search: getSearchQuery(state.alertRules), - isLoading: state.alertRules.isLoading, - }; -} - -const mapDispatchToProps = { - getAlertRulesAsync, - setSearchQuery, - togglePauseAlertRule, -}; - -const connector = connect(mapStateToProps, mapDispatchToProps); - -interface OwnProps extends GrafanaRouteComponentProps<{}, { state: string }> {} - -export type Props = OwnProps & ConnectedProps; - -export class AlertRuleListUnconnected extends PureComponent { - stateFilters = [ - { label: 'All', value: 'all' }, - { label: 'OK', value: 'ok' }, - { label: 'Not OK', value: 'not_ok' }, - { label: 'Alerting', value: 'alerting' }, - { label: 'No data', value: 'no_data' }, - { label: 'Paused', value: 'paused' }, - { label: 'Pending', value: 'pending' }, - ]; - - componentDidMount() { - this.fetchRules(); - } - - componentDidUpdate(prevProps: Props) { - if (prevProps.queryParams.state !== this.props.queryParams.state) { - this.fetchRules(); - } - } - - async fetchRules() { - await this.props.getAlertRulesAsync({ state: this.getStateFilter() }); - } - - getStateFilter(): string { - return this.props.queryParams.state ?? 'all'; - } - - onStateFilterChanged = (option: SelectableValue) => { - locationService.partial({ state: option.value }); - }; - - onOpenHowTo = () => { - appEvents.publish(new ShowModalReactEvent({ component: AlertHowToModal })); - }; - - onSearchQueryChange = (value: string) => { - this.props.setSearchQuery(value); - }; - - onTogglePause = (rule: AlertRule) => { - this.props.togglePauseAlertRule(rule.id, { paused: rule.state !== 'paused' }); - }; - - alertStateFilterOption = ({ text, value }: { text: string; value: string }) => { - return ( - - ); - }; - - render() { - const { alertRules, search, isLoading } = this.props; - - return ( - - -
-
- -
-
- - -
- - - - onResetSecureField(option.propertyName)} fill="text" type="button" size="sm"> - Clear - - } - /> - ) : ( - - )} - - ); - })} - - ); -}; diff --git a/public/app/features/alerting/components/NotificationSettings.tsx b/public/app/features/alerting/components/NotificationSettings.tsx deleted file mode 100644 index c88191d65fe2a..0000000000000 --- a/public/app/features/alerting/components/NotificationSettings.tsx +++ /dev/null @@ -1,58 +0,0 @@ -import React from 'react'; - -import { Checkbox, CollapsableSection, Field, InfoBox, Input } from '@grafana/ui'; - -import { NotificationSettingsProps } from './NotificationChannelForm'; - -interface Props extends NotificationSettingsProps { - imageRendererAvailable: boolean; -} - -export const NotificationSettings = ({ currentFormValues, imageRendererAvailable, register }: Props) => { - return ( - - - - - - - - {currentFormValues.uploadImage && !imageRendererAvailable && ( - - Grafana cannot find an image renderer to capture an image for the notification. Please make sure the Grafana - Image Renderer plugin is installed. Please contact your Grafana administrator to install the plugin. - - )} - - - - - - - {currentFormValues.sendReminder && ( - <> - - - - - )} - - ); -}; diff --git a/public/app/features/alerting/components/OptionElement.tsx b/public/app/features/alerting/components/OptionElement.tsx deleted file mode 100644 index bc43c8dee8512..0000000000000 --- a/public/app/features/alerting/components/OptionElement.tsx +++ /dev/null @@ -1,58 +0,0 @@ -import React from 'react'; - -import { FormAPI, Input, InputControl, Select, TextArea } from '@grafana/ui'; - -import { NotificationChannelOption } from '../../../types'; - -interface Props extends Pick, 'register' | 'control'> { - option: NotificationChannelOption; - invalid?: boolean; -} - -export const OptionElement = ({ control, option, register, invalid }: Props) => { - const modelValue = option.secure ? `secureSettings.${option.propertyName}` : `settings.${option.propertyName}`; - switch (option.element) { - case 'input': - return ( - (option.validationRule !== '' ? validateOption(v, option.validationRule) : true), - })} - invalid={invalid} - type={option.inputType} - placeholder={option.placeholder} - /> - ); - - case 'select': - return ( - ( - - - If you want to apply templating to the alert rule name, use the following syntax - ${Label} - -
-
- Tags -
-
- - - -
-
-
- - -
-
- -
-
-
diff --git a/public/app/features/alerting/routes.tsx b/public/app/features/alerting/routes.tsx index 4ae31262daa88..ddc9d11277358 100644 --- a/public/app/features/alerting/routes.tsx +++ b/public/app/features/alerting/routes.tsx @@ -1,308 +1,223 @@ -import { uniq } from 'lodash'; -import React from 'react'; - import { SafeDynamicImport } from 'app/core/components/DynamicImports/SafeDynamicImport'; -import { NavLandingPage } from 'app/core/components/NavLandingPage/NavLandingPage'; import { config } from 'app/core/config'; -import { RouteDescriptor } from 'app/core/navigation/types'; +import { GrafanaRouteComponent, RouteDescriptor } from 'app/core/navigation/types'; import { AccessControlAction } from 'app/types'; import { evaluateAccess } from './unified/utils/access-control'; -const commonRoutes: RouteDescriptor[] = []; - -const legacyRoutes: RouteDescriptor[] = [ - ...commonRoutes, - { - path: '/alerting', - component: () => , - }, - { - path: '/alerting/list', - component: SafeDynamicImport( - () => import(/* webpackChunkName: "AlertRuleListIndex" */ 'app/features/alerting/AlertRuleList') - ), - }, - { - path: '/alerting/ng/list', - component: SafeDynamicImport( - () => import(/* webpackChunkName: "AlertRuleList" */ 'app/features/alerting/AlertRuleList') - ), - }, - { - path: '/alerting/notifications', - roles: config.unifiedAlertingEnabled ? () => ['Editor', 'Admin'] : undefined, - component: SafeDynamicImport( - () => import(/* webpackChunkName: "NotificationsListPage" */ 'app/features/alerting/NotificationsListPage') - ), - }, - { - path: '/alerting/notifications/templates/new', - roles: () => ['Editor', 'Admin'], - component: SafeDynamicImport( - () => import(/* webpackChunkName: "NotificationsListPage" */ 'app/features/alerting/NotificationsListPage') - ), - }, - { - path: '/alerting/notifications/templates/:id/edit', - roles: () => ['Editor', 'Admin'], - component: SafeDynamicImport( - () => import(/* webpackChunkName: "NotificationsListPage" */ 'app/features/alerting/NotificationsListPage') - ), - }, - { - path: '/alerting/notifications/receivers/new', - roles: () => ['Editor', 'Admin'], - component: SafeDynamicImport( - () => import(/* webpackChunkName: "NotificationsListPage" */ 'app/features/alerting/NotificationsListPage') - ), - }, - { - path: '/alerting/notifications/receivers/:id/edit', - roles: () => ['Editor', 'Admin'], - component: SafeDynamicImport( - () => import(/* webpackChunkName: "NotificationsListPage" */ 'app/features/alerting/NotificationsListPage') - ), - }, - { - path: '/alerting/notifications/global-config', - roles: () => ['Admin', 'Editor'], - component: SafeDynamicImport( - () => import(/* webpackChunkName: "NotificationsListPage" */ 'app/features/alerting/NotificationsListPage') - ), - }, - { - path: '/alerting/notification/new', - component: SafeDynamicImport( - () => import(/* webpackChunkName: "NewNotificationChannel" */ 'app/features/alerting/NewNotificationChannelPage') - ), - }, - { - path: '/alerting/notification/:id/edit', - component: SafeDynamicImport( - () => import(/* webpackChunkName: "EditNotificationChannel"*/ 'app/features/alerting/EditNotificationChannelPage') - ), - }, -]; - -const unifiedRoutes: RouteDescriptor[] = [ - ...commonRoutes, - { - path: '/alerting', - component: SafeDynamicImport( - () => import(/* webpackChunkName: "AlertingHome" */ 'app/features/alerting/unified/home/Home') - ), - }, - { - path: '/alerting/home', - exact: false, - component: SafeDynamicImport( - () => import(/* webpackChunkName: "AlertingHome" */ 'app/features/alerting/unified/home/Home') - ), - }, - { - path: '/alerting/list', - roles: evaluateAccess([AccessControlAction.AlertingRuleRead, AccessControlAction.AlertingRuleExternalRead]), - component: SafeDynamicImport( - () => import(/* webpackChunkName: "AlertRuleListIndex" */ 'app/features/alerting/unified/RuleList') - ), - }, - { - path: '/alerting/routes', - roles: evaluateAccess([ - AccessControlAction.AlertingNotificationsRead, - AccessControlAction.AlertingNotificationsExternalRead, - ]), - component: SafeDynamicImport( - () => import(/* webpackChunkName: "AlertAmRoutes" */ 'app/features/alerting/unified/NotificationPolicies') - ), - }, - { - path: '/alerting/routes/mute-timing/new', - roles: evaluateAccess([ - AccessControlAction.AlertingNotificationsWrite, - AccessControlAction.AlertingNotificationsExternalWrite, - ]), - component: SafeDynamicImport( - () => import(/* webpackChunkName: "MuteTimings" */ 'app/features/alerting/unified/MuteTimings') - ), - }, - { - path: '/alerting/routes/mute-timing/edit', - roles: evaluateAccess([ - AccessControlAction.AlertingNotificationsWrite, - AccessControlAction.AlertingNotificationsExternalWrite, - ]), - component: SafeDynamicImport( - () => import(/* webpackChunkName: "MuteTimings" */ 'app/features/alerting/unified/MuteTimings') - ), - }, - { - path: '/alerting/silences', - roles: evaluateAccess([ - AccessControlAction.AlertingInstanceRead, - AccessControlAction.AlertingInstancesExternalRead, - ]), - component: SafeDynamicImport( - () => import(/* webpackChunkName: "AlertSilences" */ 'app/features/alerting/unified/Silences') - ), - }, - { - path: '/alerting/silence/new', - roles: evaluateAccess([ - AccessControlAction.AlertingInstanceCreate, - AccessControlAction.AlertingInstancesExternalWrite, - ]), - component: SafeDynamicImport( - () => import(/* webpackChunkName: "AlertSilences" */ 'app/features/alerting/unified/Silences') - ), - }, - { - path: '/alerting/silence/:id/edit', - roles: evaluateAccess([ - AccessControlAction.AlertingInstanceUpdate, - AccessControlAction.AlertingInstancesExternalWrite, - ]), - component: SafeDynamicImport( - () => import(/* webpackChunkName: "AlertSilences" */ 'app/features/alerting/unified/Silences') - ), - }, - { - path: '/alerting/notifications', - roles: evaluateAccess([ - AccessControlAction.AlertingNotificationsRead, - AccessControlAction.AlertingNotificationsExternalRead, - ]), - component: SafeDynamicImport( - () => import(/* webpackChunkName: "NotificationsListPage" */ 'app/features/alerting/unified/Receivers') - ), - }, - { - path: '/alerting/notifications/:type/new', - roles: evaluateAccess([ - AccessControlAction.AlertingNotificationsWrite, - AccessControlAction.AlertingNotificationsExternalWrite, - ]), - component: SafeDynamicImport( - () => import(/* webpackChunkName: "NotificationsListPage" */ 'app/features/alerting/unified/Receivers') - ), - }, - { - path: '/alerting/notifications/receivers/:id/edit', - roles: evaluateAccess([ - AccessControlAction.AlertingNotificationsWrite, - AccessControlAction.AlertingNotificationsExternalWrite, - AccessControlAction.AlertingNotificationsRead, - AccessControlAction.AlertingNotificationsExternalRead, - ]), - component: SafeDynamicImport( - () => import(/* webpackChunkName: "NotificationsListPage" */ 'app/features/alerting/unified/Receivers') - ), - }, - { - path: '/alerting/notifications/:type/:id/edit', - roles: evaluateAccess([ - AccessControlAction.AlertingNotificationsWrite, - AccessControlAction.AlertingNotificationsExternalWrite, - ]), - component: SafeDynamicImport( - () => import(/* webpackChunkName: "NotificationsListPage" */ 'app/features/alerting/unified/Receivers') - ), - }, - { - path: '/alerting/notifications/:type/:id/duplicate', - roles: evaluateAccess([ - AccessControlAction.AlertingNotificationsWrite, - AccessControlAction.AlertingNotificationsExternalWrite, - ]), - component: SafeDynamicImport( - () => import(/* webpackChunkName: "NotificationsListPage" */ 'app/features/alerting/unified/Receivers') - ), - }, - { - path: '/alerting/notifications/:type', - roles: evaluateAccess([ - AccessControlAction.AlertingNotificationsWrite, - AccessControlAction.AlertingNotificationsExternalWrite, - ]), - component: SafeDynamicImport( - () => import(/* webpackChunkName: "NotificationsListPage" */ 'app/features/alerting/unified/Receivers') - ), - }, - { - path: '/alerting/groups/', - roles: evaluateAccess([ - AccessControlAction.AlertingInstanceRead, - AccessControlAction.AlertingInstancesExternalRead, - ]), - component: SafeDynamicImport( - () => import(/* webpackChunkName: "AlertGroups" */ 'app/features/alerting/unified/AlertGroups') - ), - }, - { - path: '/alerting/new/:type?', - pageClass: 'page-alerting', - roles: evaluateAccess([AccessControlAction.AlertingRuleCreate, AccessControlAction.AlertingRuleExternalWrite]), - component: SafeDynamicImport( - () => import(/* webpackChunkName: "AlertingRuleForm"*/ 'app/features/alerting/unified/RuleEditor') - ), - }, - { - path: '/alerting/:id/edit', - pageClass: 'page-alerting', - roles: evaluateAccess([AccessControlAction.AlertingRuleUpdate, AccessControlAction.AlertingRuleExternalWrite]), - component: SafeDynamicImport( - () => import(/* webpackChunkName: "AlertingRuleForm"*/ 'app/features/alerting/unified/RuleEditor') - ), - }, - { - path: '/alerting/:id/modify-export', - pageClass: 'page-alerting', - roles: evaluateAccess([AccessControlAction.AlertingRuleRead]), - component: SafeDynamicImport( - () => - import( - /* webpackChunkName: "AlertingRuleForm"*/ 'app/features/alerting/unified/components/export/GrafanaModifyExport' - ) - ), - }, - { - path: '/alerting/:sourceName/:id/view', - pageClass: 'page-alerting', - roles: evaluateAccess([AccessControlAction.AlertingRuleRead, AccessControlAction.AlertingRuleExternalRead]), - component: SafeDynamicImport( - () => import(/* webpackChunkName: "AlertingRule"*/ 'app/features/alerting/unified/RuleViewer') - ), - }, - { - path: '/alerting/:sourceName/:name/find', - pageClass: 'page-alerting', - roles: evaluateAccess([AccessControlAction.AlertingRuleRead, AccessControlAction.AlertingRuleExternalRead]), - component: SafeDynamicImport( - () => import(/* webpackChunkName: "AlertingRedirectToRule"*/ 'app/features/alerting/unified/RedirectToRuleViewer') - ), - }, - { - path: '/alerting/admin', - roles: () => ['Admin'], - component: SafeDynamicImport( - () => import(/* webpackChunkName: "AlertingAdmin" */ 'app/features/alerting/unified/Admin') - ), - }, -]; - export function getAlertingRoutes(cfg = config): RouteDescriptor[] { - if (cfg.unifiedAlertingEnabled) { - return unifiedRoutes; - } else if (cfg.alertingEnabled) { - return legacyRoutes; - } + const routes = [ + { + path: '/alerting', + component: importAlertingComponent( + () => import(/* webpackChunkName: "AlertingHome" */ 'app/features/alerting/unified/home/Home') + ), + }, + { + path: '/alerting/home', + exact: false, + component: importAlertingComponent( + () => import(/* webpackChunkName: "AlertingHome" */ 'app/features/alerting/unified/home/Home') + ), + }, + { + path: '/alerting/list', + roles: evaluateAccess([AccessControlAction.AlertingRuleRead, AccessControlAction.AlertingRuleExternalRead]), + component: importAlertingComponent( + () => import(/* webpackChunkName: "AlertRuleListIndex" */ 'app/features/alerting/unified/RuleList') + ), + }, + { + path: '/alerting/routes', + roles: evaluateAccess([ + AccessControlAction.AlertingNotificationsRead, + AccessControlAction.AlertingNotificationsExternalRead, + ]), + component: importAlertingComponent( + () => import(/* webpackChunkName: "AlertAmRoutes" */ 'app/features/alerting/unified/NotificationPolicies') + ), + }, + { + path: '/alerting/routes/mute-timing/new', + roles: evaluateAccess([ + AccessControlAction.AlertingNotificationsWrite, + AccessControlAction.AlertingNotificationsExternalWrite, + ]), + component: importAlertingComponent( + () => import(/* webpackChunkName: "MuteTimings" */ 'app/features/alerting/unified/MuteTimings') + ), + }, + { + path: '/alerting/routes/mute-timing/edit', + roles: evaluateAccess([ + AccessControlAction.AlertingNotificationsWrite, + AccessControlAction.AlertingNotificationsExternalWrite, + ]), + component: importAlertingComponent( + () => import(/* webpackChunkName: "MuteTimings" */ 'app/features/alerting/unified/MuteTimings') + ), + }, + { + path: '/alerting/silences', + roles: evaluateAccess([ + AccessControlAction.AlertingInstanceRead, + AccessControlAction.AlertingInstancesExternalRead, + ]), + component: importAlertingComponent( + () => import(/* webpackChunkName: "AlertSilences" */ 'app/features/alerting/unified/Silences') + ), + }, + { + path: '/alerting/silence/new', + roles: evaluateAccess([ + AccessControlAction.AlertingInstanceCreate, + AccessControlAction.AlertingInstancesExternalWrite, + ]), + component: importAlertingComponent( + () => import(/* webpackChunkName: "AlertSilences" */ 'app/features/alerting/unified/Silences') + ), + }, + { + path: '/alerting/silence/:id/edit', + roles: evaluateAccess([ + AccessControlAction.AlertingInstanceUpdate, + AccessControlAction.AlertingInstancesExternalWrite, + ]), + component: importAlertingComponent( + () => import(/* webpackChunkName: "AlertSilences" */ 'app/features/alerting/unified/Silences') + ), + }, + { + path: '/alerting/notifications', + roles: evaluateAccess([ + AccessControlAction.AlertingNotificationsRead, + AccessControlAction.AlertingNotificationsExternalRead, + ]), + component: importAlertingComponent( + () => import(/* webpackChunkName: "NotificationsListPage" */ 'app/features/alerting/unified/Receivers') + ), + }, + { + path: '/alerting/notifications/:type/new', + roles: evaluateAccess([ + AccessControlAction.AlertingNotificationsWrite, + AccessControlAction.AlertingNotificationsExternalWrite, + ]), + component: importAlertingComponent( + () => import(/* webpackChunkName: "NotificationsListPage" */ 'app/features/alerting/unified/Receivers') + ), + }, + { + path: '/alerting/notifications/receivers/:id/edit', + roles: evaluateAccess([ + AccessControlAction.AlertingNotificationsWrite, + AccessControlAction.AlertingNotificationsExternalWrite, + AccessControlAction.AlertingNotificationsRead, + AccessControlAction.AlertingNotificationsExternalRead, + ]), + component: importAlertingComponent( + () => import(/* webpackChunkName: "NotificationsListPage" */ 'app/features/alerting/unified/Receivers') + ), + }, + { + path: '/alerting/notifications/:type/:id/edit', + roles: evaluateAccess([ + AccessControlAction.AlertingNotificationsWrite, + AccessControlAction.AlertingNotificationsExternalWrite, + ]), + component: importAlertingComponent( + () => import(/* webpackChunkName: "NotificationsListPage" */ 'app/features/alerting/unified/Receivers') + ), + }, + { + path: '/alerting/notifications/:type/:id/duplicate', + roles: evaluateAccess([ + AccessControlAction.AlertingNotificationsWrite, + AccessControlAction.AlertingNotificationsExternalWrite, + ]), + component: importAlertingComponent( + () => import(/* webpackChunkName: "NotificationsListPage" */ 'app/features/alerting/unified/Receivers') + ), + }, + { + path: '/alerting/notifications/:type', + roles: evaluateAccess([ + AccessControlAction.AlertingNotificationsWrite, + AccessControlAction.AlertingNotificationsExternalWrite, + ]), + component: importAlertingComponent( + () => import(/* webpackChunkName: "NotificationsListPage" */ 'app/features/alerting/unified/Receivers') + ), + }, + { + path: '/alerting/groups/', + roles: evaluateAccess([ + AccessControlAction.AlertingInstanceRead, + AccessControlAction.AlertingInstancesExternalRead, + ]), + component: importAlertingComponent( + () => import(/* webpackChunkName: "AlertGroups" */ 'app/features/alerting/unified/AlertGroups') + ), + }, + { + path: '/alerting/new/:type?', + pageClass: 'page-alerting', + roles: evaluateAccess([AccessControlAction.AlertingRuleCreate, AccessControlAction.AlertingRuleExternalWrite]), + component: importAlertingComponent( + () => import(/* webpackChunkName: "AlertingRuleForm"*/ 'app/features/alerting/unified/RuleEditor') + ), + }, + { + path: '/alerting/:id/edit', + pageClass: 'page-alerting', + roles: evaluateAccess([AccessControlAction.AlertingRuleUpdate, AccessControlAction.AlertingRuleExternalWrite]), + component: importAlertingComponent( + () => import(/* webpackChunkName: "AlertingRuleForm"*/ 'app/features/alerting/unified/RuleEditor') + ), + }, + { + path: '/alerting/:id/modify-export', + pageClass: 'page-alerting', + roles: evaluateAccess([AccessControlAction.AlertingRuleRead]), + component: importAlertingComponent( + () => + import( + /* webpackChunkName: "AlertingRuleForm"*/ 'app/features/alerting/unified/components/export/GrafanaModifyExport' + ) + ), + }, + { + path: '/alerting/:sourceName/:id/view', + pageClass: 'page-alerting', + roles: evaluateAccess([AccessControlAction.AlertingRuleRead, AccessControlAction.AlertingRuleExternalRead]), + component: importAlertingComponent( + () => import(/* webpackChunkName: "AlertingRule"*/ 'app/features/alerting/unified/RuleViewer') + ), + }, + { + path: '/alerting/:sourceName/:name/find', + pageClass: 'page-alerting', + roles: evaluateAccess([AccessControlAction.AlertingRuleRead, AccessControlAction.AlertingRuleExternalRead]), + component: importAlertingComponent( + () => + import(/* webpackChunkName: "AlertingRedirectToRule"*/ 'app/features/alerting/unified/RedirectToRuleViewer') + ), + }, + { + path: '/alerting/admin', + roles: () => ['Admin'], + component: importAlertingComponent( + () => import(/* webpackChunkName: "AlertingAdmin" */ 'app/features/alerting/unified/Admin') + ), + }, + ]; + + return routes; +} - const uniquePaths = uniq([...legacyRoutes, ...unifiedRoutes].map((route) => route.path)); - return uniquePaths.map((path) => ({ - path, - component: SafeDynamicImport( - () => import(/* webpackChunkName: "AlertingFeatureTogglePage"*/ 'app/features/alerting/FeatureTogglePage') - ), - })); +// this function will always load the "feature disabled" component for all alerting routes +function importAlertingComponent(loader: () => any): GrafanaRouteComponent { + const featureDisabledPageLoader = () => + import(/* webpackChunkName: "AlertingDisabled" */ 'app/features/alerting/unified/AlertingNotEnabled'); + return SafeDynamicImport(config.unifiedAlertingEnabled ? loader : featureDisabledPageLoader); } diff --git a/public/app/features/alerting/state/actions.ts b/public/app/features/alerting/state/actions.ts deleted file mode 100644 index 84f5ac3c86e81..0000000000000 --- a/public/app/features/alerting/state/actions.ts +++ /dev/null @@ -1,79 +0,0 @@ -import { getBackendSrv, isFetchError, locationService } from '@grafana/runtime'; -import { notifyApp } from 'app/core/actions'; -import { createErrorNotification, createSuccessNotification } from 'app/core/copy/appNotification'; -import { AlertRuleDTO, NotifierDTO, ThunkResult } from 'app/types'; - -import { loadAlertRules, loadedAlertRules, notificationChannelLoaded, setNotificationChannels } from './reducers'; - -export function getAlertRulesAsync(options: { state: string }): ThunkResult { - return async (dispatch) => { - dispatch(loadAlertRules()); - const rules: AlertRuleDTO[] = await getBackendSrv().get('/api/alerts', options); - dispatch(loadedAlertRules(rules)); - }; -} - -export function togglePauseAlertRule(id: number, options: { paused: boolean }): ThunkResult { - return async (dispatch) => { - await getBackendSrv().post(`/api/alerts/${id}/pause`, options); - const stateFilter = locationService.getSearchObject().state || 'all'; - dispatch(getAlertRulesAsync({ state: stateFilter.toString() })); - }; -} - -export function createNotificationChannel(data: any): ThunkResult> { - return async (dispatch) => { - try { - await getBackendSrv().post(`/api/alert-notifications`, data); - dispatch(notifyApp(createSuccessNotification('Notification created'))); - locationService.push('/alerting/notifications'); - } catch (error) { - if (isFetchError(error)) { - dispatch(notifyApp(createErrorNotification(error.data.error))); - } - } - }; -} - -export function updateNotificationChannel(data: any): ThunkResult { - return async (dispatch) => { - try { - await getBackendSrv().put(`/api/alert-notifications/${data.id}`, data); - dispatch(notifyApp(createSuccessNotification('Notification updated'))); - } catch (error) { - if (isFetchError(error)) { - dispatch(notifyApp(createErrorNotification(error.data.error))); - } - } - }; -} - -export function testNotificationChannel(data: any): ThunkResult { - return async (dispatch, getState) => { - const channel = getState().notificationChannel.notificationChannel; - await getBackendSrv().post('/api/alert-notifications/test', { id: channel.id, ...data }); - }; -} - -export function loadNotificationTypes(): ThunkResult { - return async (dispatch) => { - const alertNotifiers: NotifierDTO[] = await getBackendSrv().get(`/api/alert-notifiers`); - - const notificationTypes = alertNotifiers.sort((o1, o2) => { - if (o1.name > o2.name) { - return 1; - } - return -1; - }); - - dispatch(setNotificationChannels(notificationTypes)); - }; -} - -export function loadNotificationChannel(id: number): ThunkResult { - return async (dispatch) => { - await dispatch(loadNotificationTypes()); - const notificationChannel = await getBackendSrv().get(`/api/alert-notifications/${id}`); - dispatch(notificationChannelLoaded(notificationChannel)); - }; -} diff --git a/public/app/features/alerting/state/alertDef.ts b/public/app/features/alerting/state/alertDef.ts index 7ce82133ac5dc..348d89f91bc08 100644 --- a/public/app/features/alerting/state/alertDef.ts +++ b/public/app/features/alerting/state/alertDef.ts @@ -207,6 +207,25 @@ function getAlertAnnotationInfo(ah: any) { return ''; } +// Copy of getAlertAnnotationInfo, used in annotation tooltip +function getAlertAnnotationText(annotationData: any) { + // backward compatibility, can be removed in grafana 5.x + // old way stored evalMatches in data property directly, + // new way stores it in evalMatches property on new data object + + if (isArray(annotationData)) { + return joinEvalMatches(annotationData, ', '); + } else if (isArray(annotationData.evalMatches)) { + return joinEvalMatches(annotationData.evalMatches, ', '); + } + + if (annotationData.error) { + return 'Error: ' + annotationData.error; + } + + return ''; +} + export default { alertQueryDef: alertQueryDef, getStateDisplayModel: getStateDisplayModel, @@ -218,5 +237,6 @@ export default { reducerTypes: reducerTypes, createReducerPart: createReducerPart, getAlertAnnotationInfo: getAlertAnnotationInfo, + getAlertAnnotationText: getAlertAnnotationText, alertStateSortScore: alertStateSortScore, }; diff --git a/public/app/features/alerting/unified/Admin.tsx b/public/app/features/alerting/unified/Admin.tsx index 87754cb6c179c..d086bfabc1378 100644 --- a/public/app/features/alerting/unified/Admin.tsx +++ b/public/app/features/alerting/unified/Admin.tsx @@ -8,7 +8,7 @@ import { GRAFANA_RULES_SOURCE_NAME } from './utils/datasource'; export default function Admin(): JSX.Element { return ( - + ); diff --git a/public/app/features/alerting/unified/AlertGroups.test.tsx b/public/app/features/alerting/unified/AlertGroups.test.tsx index 9144f619db44d..5771a29678539 100644 --- a/public/app/features/alerting/unified/AlertGroups.test.tsx +++ b/public/app/features/alerting/unified/AlertGroups.test.tsx @@ -1,9 +1,10 @@ -import { render, waitFor } from '@testing-library/react'; +import { render, waitFor, waitForElementToBeRemoved } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import React from 'react'; import { TestProvider } from 'test/helpers/TestProvider'; import { byRole, byTestId, byText } from 'testing-library-selector'; +import { selectors } from '@grafana/e2e-selectors'; import { setDataSourceSrv } from '@grafana/runtime'; import { AccessControlAction } from 'app/types'; @@ -48,13 +49,14 @@ const ui = { groupCollapseToggle: byTestId('alert-group-collapse-toggle'), groupTable: byTestId('alert-group-table'), row: byTestId('row'), - collapseToggle: byTestId('collapse-toggle'), + collapseToggle: byTestId(selectors.components.AlertRules.toggle), silenceButton: byText('Silence'), sourceButton: byText('See source'), matcherInput: byTestId('search-query-input'), groupByContainer: byTestId('group-by-container'), groupByInput: byRole('combobox', { name: /group by label keys/i }), clearButton: byRole('button', { name: 'Clear filters' }), + loadingIndicator: byText('Loading notifications'), }; describe('AlertGroups', () => { @@ -65,20 +67,24 @@ describe('AlertGroups', () => { AccessControlAction.AlertingInstancesExternalRead, AccessControlAction.AlertingRuleRead, ]); + }); + + beforeEach(() => { + setDataSourceSrv(new MockDataSourceSrv(dataSources)); + }); + + afterEach(() => { + mocks.api.fetchAlertGroups.mockClear(); + }); + it('loads and shows groups', async () => { mocks.api.fetchAlertGroups.mockImplementation(() => { return Promise.resolve([ mockAlertGroup({ labels: {}, alerts: [mockAlertmanagerAlert({ labels: { foo: 'bar' } })] }), mockAlertGroup(), ]); }); - }); - - beforeEach(() => { - setDataSourceSrv(new MockDataSourceSrv(dataSources)); - }); - it('loads and shows groups', async () => { renderAmNotifications(); await waitFor(() => expect(mocks.api.fetchAlertGroups).toHaveBeenCalled()); @@ -104,9 +110,12 @@ describe('AlertGroups', () => { mockAlertGroup({ labels: { region }, alerts: [ - mockAlertmanagerAlert({ labels: { region, appName: 'billing', env: 'production' } }), - mockAlertmanagerAlert({ labels: { region, appName: 'auth', env: 'staging', uniqueLabel: 'true' } }), - mockAlertmanagerAlert({ labels: { region, appName: 'frontend', env: 'production' } }), + mockAlertmanagerAlert({ fingerprint: '1', labels: { region, appName: 'billing', env: 'production' } }), + mockAlertmanagerAlert({ + fingerprint: '2', + labels: { region, appName: 'auth', env: 'staging', uniqueLabel: 'true' }, + }), + mockAlertmanagerAlert({ fingerprint: '3', labels: { region, appName: 'frontend', env: 'production' } }), ], }) ); @@ -160,6 +169,33 @@ describe('AlertGroups', () => { expect(groups[1]).toHaveTextContent('uniqueLabeltrue'); }); + it('should split custom grouping groups with the same label by receiver', async () => { + // The same alert is repeated in two groups with different receivers + const alert = mockAlertmanagerAlert({ + fingerprint: '1', + labels: { region: 'NASA', appName: 'billing' }, + receivers: [{ name: 'slack' }, { name: 'email' }], + }); + const amGroups = [ + mockAlertGroup({ receiver: { name: 'slack' }, labels: { region: 'NASA' }, alerts: [alert] }), + mockAlertGroup({ receiver: { name: 'email' }, labels: { region: 'NASA' }, alerts: [alert] }), + ]; + mocks.api.fetchAlertGroups.mockResolvedValue(amGroups); + + const user = userEvent.setup(); + + renderAmNotifications(); + await waitForElementToBeRemoved(ui.loadingIndicator.query()); + + await user.type(ui.groupByInput.get(), 'appName{enter}'); + + const groups = await ui.group.findAll(); + + expect(groups).toHaveLength(2); + expect(groups[0]).toHaveTextContent('appNamebillingDelivered to slack'); + expect(groups[1]).toHaveTextContent('appNamebillingDelivered to email'); + }); + it('should combine multiple ungrouped groups', async () => { mocks.api.fetchAlertGroups.mockImplementation(() => { const groups = [ diff --git a/public/app/features/alerting/unified/AlertGroups.tsx b/public/app/features/alerting/unified/AlertGroups.tsx index addf2cbd29a97..1f1d720616c26 100644 --- a/public/app/features/alerting/unified/AlertGroups.tsx +++ b/public/app/features/alerting/unified/AlertGroups.tsx @@ -91,7 +91,7 @@ const AlertGroups = () => { }; const AlertGroupsPage = () => ( - + ); diff --git a/public/app/features/alerting/unified/AlertingNotEnabled.tsx b/public/app/features/alerting/unified/AlertingNotEnabled.tsx new file mode 100644 index 0000000000000..7d2b89ae9e5df --- /dev/null +++ b/public/app/features/alerting/unified/AlertingNotEnabled.tsx @@ -0,0 +1,29 @@ +import React from 'react'; + +import { NavModel } from '@grafana/data'; +import { Page } from 'app/core/components/Page/Page'; + +export default function FeatureTogglePage() { + const navModel: NavModel = { + node: { + text: 'Alerting is not enabled', + hideFromBreadcrumbs: true, + subTitle: 'To enable alerting, enable it in the Grafana config', + }, + main: { + text: 'Alerting is not enabled', + }, + }; + + return ( + + +
+          {`[unified_alerting]
+enabled = true
+`}
+        
+
+
+ ); +} diff --git a/public/app/features/alerting/unified/AlertsFolderView.test.tsx b/public/app/features/alerting/unified/AlertsFolderView.test.tsx index f7de4aedb8def..4ae40d245b4a6 100644 --- a/public/app/features/alerting/unified/AlertsFolderView.test.tsx +++ b/public/app/features/alerting/unified/AlertsFolderView.test.tsx @@ -8,6 +8,7 @@ import { FolderState } from 'app/types'; import { CombinedRuleNamespace } from 'app/types/unified-alerting'; import { AlertsFolderView } from './AlertsFolderView'; +import { useCombinedRuleNamespaces } from './hooks/useCombinedRuleNamespaces'; import { mockCombinedRule } from './mocks'; import { GRAFANA_RULES_SOURCE_NAME } from './utils/datasource'; @@ -21,7 +22,7 @@ const ui = { }, }; -const combinedNamespaceMock = jest.fn(); +const combinedNamespaceMock = jest.fn(useCombinedRuleNamespaces); jest.mock('./hooks/useCombinedRuleNamespaces', () => ({ useCombinedRuleNamespaces: () => combinedNamespaceMock(), })); @@ -35,21 +36,20 @@ const mockFolder = (folderOverride: Partial = {}): FolderState => { canSave: false, url: '/folder-1', version: 1, - permissions: [], - canViewFolderPermissions: false, canDelete: false, ...folderOverride, }; }; describe('AlertsFolderView tests', () => { - it('Should display grafana alert rules when the namespace name matches the folder name', () => { + it('Should display grafana alert rules when the folder uid matches the name space uid', () => { // Arrange const folder = mockFolder(); const grafanaNamespace: CombinedRuleNamespace = { name: folder.title, rulesSource: GRAFANA_RULES_SOURCE_NAME, + uid: 'folder-1', groups: [ { name: 'group1', @@ -92,13 +92,14 @@ describe('AlertsFolderView tests', () => { expect(alertRows[5]).toHaveTextContent('Test Alert 6'); }); - it('Should not display alert rules when the namespace name does not match the folder name', () => { + it('Should not display alert rules when the namespace uid does not match the folder uid', () => { // Arrange const folder = mockFolder(); const grafanaNamespace: CombinedRuleNamespace = { name: 'Folder without alerts', rulesSource: GRAFANA_RULES_SOURCE_NAME, + uid: 'folder-2', groups: [ { name: 'default', @@ -131,6 +132,7 @@ describe('AlertsFolderView tests', () => { const grafanaNamespace: CombinedRuleNamespace = { name: folder.title, rulesSource: GRAFANA_RULES_SOURCE_NAME, + uid: 'folder-1', groups: [ { name: 'default', @@ -163,6 +165,7 @@ describe('AlertsFolderView tests', () => { const grafanaNamespace: CombinedRuleNamespace = { name: folder.title, rulesSource: GRAFANA_RULES_SOURCE_NAME, + uid: 'folder-1', groups: [ { name: 'default', diff --git a/public/app/features/alerting/unified/AlertsFolderView.tsx b/public/app/features/alerting/unified/AlertsFolderView.tsx index 060ed9b370810..ff71c426a72a2 100644 --- a/public/app/features/alerting/unified/AlertsFolderView.tsx +++ b/public/app/features/alerting/unified/AlertsFolderView.tsx @@ -4,8 +4,7 @@ import React, { useEffect, useState } from 'react'; import { useDebounce } from 'react-use'; import { GrafanaTheme2, SelectableValue } from '@grafana/data'; -import { Stack } from '@grafana/experimental'; -import { Card, FilterInput, Icon, Pagination, Select, TagList, useStyles2 } from '@grafana/ui'; +import { Card, FilterInput, Icon, Pagination, Select, TagList, useStyles2, Stack } from '@grafana/ui'; import { DEFAULT_PER_PAGE_PAGINATION } from 'app/core/constants'; import { getQueryParamValue } from 'app/core/utils/query'; import { FolderState, useDispatch } from 'app/types'; @@ -51,7 +50,8 @@ export const AlertsFolderView = ({ folder }: Props) => { const { nameFilter, labelFilter, sortOrder, setNameFilter, setLabelFilter, setSortOrder } = useAlertsFolderViewParams(); - const matchingNamespace = combinedNamespaces.find((namespace) => namespace.name === folder.title); + const matchingNamespace = combinedNamespaces.find((namespace) => namespace.uid === folder.uid); + const alertRules = matchingNamespace?.groups.flatMap((group) => group.rules) ?? []; const filteredRules = filterAndSortRules(alertRules, nameFilter, labelFilter, sortOrder ?? SortOrder.Ascending); @@ -87,7 +87,7 @@ export const AlertsFolderView = ({ folder }: Props) => { /> - + {pageItems.map((currentRule) => ( = {}) { - if (config.grafanaJavascriptAgent.enabled) { - faro.api.pushLog([message], { - level: GrafanaLogLevel.INFO, - context: { ...context, module: 'Alerting' }, - }); - } -} +const { logInfo, logError, logMeasurement } = createMonitoringLogger('features.alerting', { module: 'Alerting' }); -export function logAlertingError(error: Error, context: Record = {}) { - logError(error, { ...context, module: 'Alerting' }); -} +export { logInfo, logError, logMeasurement }; // eslint-disable-next-line @typescript-eslint/no-explicit-any export function withPerformanceLogging Promise>( + type: string, func: TFunc, - message: string, context: Record ): (...args: Parameters) => Promise>> { return async function (...args) { const startLoadingTs = performance.now(); + const response = await func(...args); - logInfo(message, { - loadTimeMs: (performance.now() - startLoadingTs).toFixed(0), - ...context, - }); + const loadTimesMs = performance.now() - startLoadingTs; + + logMeasurement( + type, + { + loadTimesMs, + }, + context + ); return response; }; @@ -56,8 +56,8 @@ export function withPerformanceLogging Promise // eslint-disable-next-line @typescript-eslint/no-explicit-any export function withPromRulesMetadataLogging Promise>( + type: string, func: TFunc, - message: string, context: Record ) { return async (...args: Parameters) => { @@ -66,13 +66,16 @@ export function withPromRulesMetadataLogging P const { namespacesCount, groupsCount, rulesCount } = getPromRulesMetadata(response); - logInfo(message, { - loadTimeMs: (performance.now() - startLoadingTs).toFixed(0), - namespacesCount, - groupsCount, - rulesCount, - ...context, - }); + logMeasurement( + type, + { + loadTimeMs: performance.now() - startLoadingTs, + namespacesCount, + groupsCount, + rulesCount, + }, + context + ); return response; }; } @@ -83,9 +86,9 @@ function getPromRulesMetadata(promRules: RuleNamespace[]) { const rulesCount = promRules.flatMap((ns) => ns.groups).flatMap((g) => g.rules).length; const metadata = { - namespacesCount: namespacesCount.toFixed(0), - groupsCount: groupsCount.toFixed(0), - rulesCount: rulesCount.toFixed(0), + namespacesCount: namespacesCount, + groupsCount: groupsCount, + rulesCount: rulesCount, }; return metadata; @@ -93,8 +96,8 @@ function getPromRulesMetadata(promRules: RuleNamespace[]) { // eslint-disable-next-line @typescript-eslint/no-explicit-any export function withRulerRulesMetadataLogging Promise>( + type: string, func: TFunc, - message: string, context: Record ) { return async (...args: Parameters) => { @@ -103,26 +106,29 @@ export function withRulerRulesMetadataLogging const { namespacesCount, groupsCount, rulesCount } = getRulerRulesMetadata(response); - logInfo(message, { - loadTimeMs: (performance.now() - startLoadingTs).toFixed(0), - namespacesCount, - groupsCount, - rulesCount, - ...context, - }); + logMeasurement( + type, + { + namespacesCount, + groupsCount, + rulesCount, + loadTimeMs: performance.now() - startLoadingTs, + }, + context + ); return response; }; } function getRulerRulesMetadata(rulerRules: RulerRulesConfigDTO) { - const namespacesCount = Object.keys(rulerRules).length; + const namespaces = Object.keys(rulerRules); const groups = Object.values(rulerRules).flatMap((groups) => groups); const rules = groups.flatMap((group) => group.rules); return { - namespacesCount: namespacesCount.toFixed(0), - groupsCount: groups.length.toFixed(0), - rulesCount: rules.length.toFixed(0), + namespacesCount: namespaces.length, + groupsCount: groups.length, + rulesCount: rules.length, }; } @@ -155,27 +161,17 @@ export const trackRuleListNavigation = async ( reportInteraction('grafana_alerting_navigation', props); }; -export const trackNewAlerRuleFormSaved = async (props: AlertRuleTrackingProps) => { - const isNew = await isNewUser(); - if (isNew) { - return; - } +export const trackAlertRuleFormSaved = (props: { formAction: 'create' | 'update'; ruleType?: RuleFormType }) => { reportInteraction('grafana_alerting_rule_creation', props); }; -export const trackNewAlerRuleFormCancelled = async (props: AlertRuleTrackingProps) => { - const isNew = await isNewUser(); - if (isNew) { - return; - } +export const trackAlertRuleFormCancelled = (props: { formAction: 'create' | 'update' }) => { reportInteraction('grafana_alerting_rule_aborted', props); }; -export const trackNewAlerRuleFormError = async (props: AlertRuleTrackingProps & { error: string }) => { - const isNew = await isNewUser(); - if (isNew) { - return; - } +export const trackAlertRuleFormError = ( + props: AlertRuleTrackingProps & { error: string; formAction: 'create' | 'update' } +) => { reportInteraction('grafana_alerting_rule_form_error', props); }; @@ -188,6 +184,55 @@ export const trackInsightsFeedback = async (props: { useful: boolean; panel: str reportInteraction('grafana_alerting_insights', { ...defaults, ...props }); }; +interface RulesSearchInteractionPayload { + filter: string; + triggeredBy: 'typing' | 'component'; +} + +function trackRulesSearchInteraction(payload: RulesSearchInteractionPayload) { + reportInteraction('grafana_alerting_rules_search', { ...payload }); +} + +export function trackRulesSearchInputInteraction({ oldQuery, newQuery }: { oldQuery: string; newQuery: string }) { + try { + const oldFilter = getSearchFilterFromQuery(oldQuery); + const newFilter = getSearchFilterFromQuery(newQuery); + + const oldFilterTerms = extractFilterKeys(oldFilter); + const newFilterTerms = extractFilterKeys(newFilter); + + const newTerms = newFilterTerms.filter((term) => !oldFilterTerms.includes(term)); + newTerms.forEach((term) => { + trackRulesSearchInteraction({ filter: term, triggeredBy: 'typing' }); + }); + } catch (e: unknown) { + if (e instanceof Error) { + logError(e); + } + } +} + +function extractFilterKeys(filter: RulesFilter) { + return Object.entries(filter) + .filter(([_, value]) => !isEmpty(value)) + .map(([key]) => key); +} + +export function trackRulesSearchComponentInteraction(filter: keyof RulesFilter) { + trackRulesSearchInteraction({ filter, triggeredBy: 'component' }); +} + +export function trackRulesListViewChange(payload: { view: string }) { + reportInteraction('grafana_alerting_rules_list_mode', { ...payload }); +} +export function trackSwitchToSimplifiedRouting() { + reportInteraction('grafana_alerting_switch_to_simplified_routing'); +} + +export function trackSwitchToPoliciesRouting() { + reportInteraction('grafana_alerting_switch_to_policies_routing'); +} + export type AlertRuleTrackingProps = { user_id: number; grafana_version?: string; diff --git a/public/app/features/alerting/unified/CloneRuleEditor.test.tsx b/public/app/features/alerting/unified/CloneRuleEditor.test.tsx index 9978d9b31f2e9..747f66b4eb1e4 100644 --- a/public/app/features/alerting/unified/CloneRuleEditor.test.tsx +++ b/public/app/features/alerting/unified/CloneRuleEditor.test.tsx @@ -1,3 +1,4 @@ +import 'whatwg-fetch'; import { render, waitFor, waitForElementToBeRemoved, within } from '@testing-library/react'; import { setupServer } from 'msw/node'; import React from 'react'; @@ -8,8 +9,8 @@ import { byRole, byTestId, byText } from 'testing-library-selector'; import { selectors } from '@grafana/e2e-selectors/src'; import { config, setBackendSrv, setDataSourceSrv } from '@grafana/runtime'; import { backendSrv } from 'app/core/services/backend_srv'; +import { DashboardSearchItem, DashboardSearchItemType } from 'app/features/search/types'; import { AlertManagerCortexConfig } from 'app/plugins/datasource/alertmanager/types'; -import 'whatwg-fetch'; import { RuleWithLocation } from 'app/types/unified-alerting'; import { @@ -21,6 +22,7 @@ import { import { cloneRuleDefinition, CloneRuleEditor } from './CloneRuleEditor'; import { ExpressionEditorProps } from './components/rule-editor/ExpressionEditor'; +import { mockSearchApi } from './mockApi'; import { mockDataSource, MockDataSourceSrv, @@ -30,7 +32,6 @@ import { mockStore, } from './mocks'; import { mockAlertmanagerConfigResponse } from './mocks/alertmanagerApi'; -import { mockSearchApiResponse } from './mocks/grafanaApi'; import { mockRulerRulesApiResponse, mockRulerRulesGroupApiResponse } from './mocks/rulerApi'; import { AlertingQueryRunner } from './state/AlertingQueryRunner'; import { RuleFormValues } from './types/rule-form'; @@ -156,7 +157,9 @@ describe('CloneRuleEditor', function () { 'folder-one': [{ name: 'group1', interval: '20s', rules: [originRule] }], }); - mockSearchApiResponse(server, []); + mockSearchApi(server).search([ + mockDashboardSearchItem({ title: 'folder-one', uid: '123', type: DashboardSearchItemType.DashDB }), + ]); mockAlertmanagerConfigResponse(server, GRAFANA_RULES_SOURCE_NAME, amConfig); render(, { @@ -209,13 +212,20 @@ describe('CloneRuleEditor', function () { rules: [originRule], }); - mockSearchApiResponse(server, []); + mockSearchApi(server).search([ + mockDashboardSearchItem({ + title: 'folder-one', + uid: '123', + type: DashboardSearchItemType.DashDB, + folderTitle: 'folder-one', + folderUid: '123', + }), + ]); mockAlertmanagerConfigResponse(server, GRAFANA_RULES_SOURCE_NAME, amConfig); render( ) { + return { + title: '', + uid: '', + type: DashboardSearchItemType.DashDB, + url: '', + uri: '', + items: [], + tags: [], + slug: '', + isStarred: false, + ...searchItem, + }; +} diff --git a/public/app/features/alerting/unified/GrafanaRuleQueryViewer.test.tsx b/public/app/features/alerting/unified/GrafanaRuleQueryViewer.test.tsx new file mode 100644 index 0000000000000..b77aba3e2e3b0 --- /dev/null +++ b/public/app/features/alerting/unified/GrafanaRuleQueryViewer.test.tsx @@ -0,0 +1,85 @@ +import { render, waitFor } from '@testing-library/react'; +import React from 'react'; +import { TestProvider } from 'test/helpers/TestProvider'; + +import { DataSourceRef } from '@grafana/schema'; +import { AlertQuery } from 'app/types/unified-alerting-dto'; + +import { GrafanaRuleQueryViewer } from './GrafanaRuleQueryViewer'; +import { mockCombinedRule } from './mocks'; + +describe('GrafanaRuleQueryViewer', () => { + it('renders without crashing', async () => { + const rule = mockCombinedRule(); + + const getDataSourceQuery = (refId: string) => { + const query: AlertQuery = { + refId: refId, + datasourceUid: 'abc123', + queryType: '', + relativeTimeRange: { + from: 600, + to: 0, + }, + model: { + refId: 'A', + }, + }; + return query; + }; + const queries = [ + getDataSourceQuery('A'), + getDataSourceQuery('B'), + getDataSourceQuery('C'), + getDataSourceQuery('D'), + getDataSourceQuery('E'), + ]; + + const getExpression = (refId: string, dsRef: DataSourceRef) => { + const expr = { + refId: refId, + datasourceUid: '__expr__', + queryType: '', + model: { + refId: refId, + type: 'classic_conditions', + datasource: dsRef, + conditions: [ + { + type: 'query', + evaluator: { + params: [3], + type: 'gt', + }, + operator: { + type: 'and', + }, + query: { + params: ['A'], + }, + reducer: { + params: [], + type: 'last', + }, + }, + ], + }, + }; + return expr; + }; + + const expressions = [ + getExpression('A', { type: '' }), + getExpression('B', { type: '' }), + getExpression('C', { type: '' }), + getExpression('D', { type: '' }), + ]; + const { getByTestId } = render( + , + { wrapper: TestProvider } + ); + + await waitFor(() => expect(getByTestId('queries-container')).toHaveStyle('flex-wrap: wrap')); + expect(getByTestId('expressions-container')).toHaveStyle('flex-wrap: wrap'); + }); +}); diff --git a/public/app/features/alerting/unified/GrafanaRuleQueryViewer.tsx b/public/app/features/alerting/unified/GrafanaRuleQueryViewer.tsx index 6fdab6e5aefd0..83cf88bfe3724 100644 --- a/public/app/features/alerting/unified/GrafanaRuleQueryViewer.tsx +++ b/public/app/features/alerting/unified/GrafanaRuleQueryViewer.tsx @@ -1,80 +1,76 @@ import { css, cx } from '@emotion/css'; -import { dump } from 'js-yaml'; import { keyBy, startCase } from 'lodash'; import React from 'react'; -import { DataSourceInstanceSettings, GrafanaTheme2, PanelData, RelativeTimeRange } from '@grafana/data'; -import { Stack } from '@grafana/experimental'; +import { DataSourceInstanceSettings, DataSourceRef, GrafanaTheme2, PanelData, urlUtil } from '@grafana/data'; +import { secondsToHms } from '@grafana/data/src/datetime/rangeutil'; import { config } from '@grafana/runtime'; -import { Badge, useStyles2 } from '@grafana/ui'; -import { mapRelativeTimeRangeToOption } from '@grafana/ui/src/components/DateTimePickers/RelativeTimeRangePicker/utils'; +import { Preview } from '@grafana/sql/src/components/visual-query-builder/Preview'; +import { Badge, ErrorBoundaryAlert, LinkButton, Stack, Text, useStyles2 } from '@grafana/ui'; +import { CombinedRule } from 'app/types/unified-alerting'; -import { AlertQuery } from '../../../types/unified-alerting-dto'; +import { AlertDataQuery, AlertQuery } from '../../../types/unified-alerting-dto'; import { isExpressionQuery } from '../../expressions/guards'; import { downsamplingTypes, ExpressionQuery, ExpressionQueryType, - reducerModes, ReducerMode, + reducerModes, reducerTypes, thresholdFunctions, upsamplingTypes, } from '../../expressions/types'; import alertDef, { EvalFunction } from '../state/alertDef'; +import { Spacer } from './components/Spacer'; +import { WithReturnButton } from './components/WithReturnButton'; import { ExpressionResult } from './components/expressions/Expression'; import { getThresholdsForQueries, ThresholdDefinition } from './components/rule-editor/util'; import { RuleViewerVisualization } from './components/rule-viewer/RuleViewerVisualization'; +import { DatasourceModelPreview } from './components/rule-viewer/tabs/Query/DataSourceModelPreview'; +import { AlertRuleAction, useAlertRuleAbility } from './hooks/useAbilities'; interface GrafanaRuleViewerProps { + rule: CombinedRule; queries: AlertQuery[]; condition: string; evalDataByQuery?: Record; - evalTimeRanges?: Record; - onTimeRangeChange: (queryRef: string, timeRange: RelativeTimeRange) => void; } -export function GrafanaRuleQueryViewer({ - queries, - condition, - evalDataByQuery = {}, - evalTimeRanges = {}, - onTimeRangeChange, -}: GrafanaRuleViewerProps) { +export function GrafanaRuleQueryViewer({ rule, queries, condition, evalDataByQuery = {} }: GrafanaRuleViewerProps) { const dsByUid = keyBy(Object.values(config.datasources), (ds) => ds.uid); const dataQueries = queries.filter((q) => !isExpressionQuery(q.model)); const expressions = queries.filter((q) => isExpressionQuery(q.model)); const styles = useStyles2(getExpressionViewerStyles); - const thresholds = getThresholdsForQueries(queries); + const thresholds = getThresholdsForQueries(queries, condition); return ( - +
- + {dataQueries.map(({ model, relativeTimeRange, refId, datasourceUid }, index) => { const dataSource = dsByUid[datasourceUid]; return ( onTimeRangeChange(refId, timeRange)} /> ); })}
- + {expressions.map(({ model, refId, datasourceUid }, index) => { const dataSource = dsByUid[datasourceUid]; @@ -98,56 +94,100 @@ export function GrafanaRuleQueryViewer({ } interface QueryPreviewProps extends Pick { + rule: CombinedRule; isAlertCondition: boolean; dataSource?: DataSourceInstanceSettings; queryData?: PanelData; thresholds?: ThresholdDefinition; - evalTimeRange?: RelativeTimeRange; - onEvalTimeRangeChange: (timeRange: RelativeTimeRange) => void; } export function QueryPreview({ refId, - relativeTimeRange, + rule, thresholds, model, dataSource, queryData, - evalTimeRange, - onEvalTimeRangeChange, + relativeTimeRange, }: QueryPreviewProps) { const styles = useStyles2(getQueryPreviewStyles); + const isExpression = isExpressionQuery(model); + const [exploreSupported, exploreAllowed] = useAlertRuleAbility(rule, AlertRuleAction.Explore); + const canExplore = exploreSupported && exploreAllowed; + + const headerItems: React.ReactNode[] = []; + + if (dataSource) { + const dataSourceName = dataSource.name ?? '[[Data source not found]]'; + const dataSourceImgUrl = dataSource.meta.info.logos.small; + + headerItems.push(); + } - // relativeTimeRange is what is defined for a query - // evalTimeRange is temporary value which the user can change - const headerItems = [dataSource?.name ?? '[[Data source not found]]']; if (relativeTimeRange) { - headerItems.push(mapRelativeTimeRangeToOption(relativeTimeRange).display); + headerItems.push( + + {secondsToHms(relativeTimeRange.from)} to now + + ); + } + + let exploreLink: string | undefined = undefined; + if (!isExpression && canExplore) { + exploreLink = dataSource && createExploreLink(dataSource, model); } return ( - -
-        {dump(model)}
-      
- {dataSource && ( - - )} -
+ <> + +
+ + {model && dataSource && } + +
+
+ {dataSource && } + + ); +} + +function createExploreLink(settings: DataSourceRef, model: AlertDataQuery): string { + const { uid, type } = settings; + const { refId, ...rest } = model; + + /* + In my testing I've found some alerts that don't have a data source embedded inside the model. + At this moment in time it is unclear to me why some alert definitions not have a data source embedded in the model. + + I don't think that should happen here, the fact that the datasource ref is sometimes missing here is a symptom of another cause. (Gilles) + */ + return urlUtil.renderUrl(`${config.appSubUrl}/explore`, { + left: JSON.stringify({ + datasource: settings.uid, + queries: [{ refId: 'A', ...rest, datasource: { type, uid } }], + range: { from: 'now-1h', to: 'now' }, + }), + }); +} + +interface DataSourceBadgeProps { + name: string; + imgUrl: string; +} + +function DataSourceBadge({ name, imgUrl }: DataSourceBadgeProps) { + const styles = useStyles2(getQueryPreviewStyles); + + return ( +
+ {name} + {name} +
); } const getQueryPreviewStyles = (theme: GrafanaTheme2) => ({ - code: css` + queryPreviewWrapper: css` margin: ${theme.spacing(1)}; `, contentBox: css` @@ -156,6 +196,14 @@ const getQueryPreviewStyles = (theme: GrafanaTheme2) => ({ visualization: css` padding: ${theme.spacing(1)}; `, + dataSource: css({ + border: `1px solid ${theme.colors.border.weak}`, + borderRadius: theme.shape.radius.default, + padding: theme.spacing(0.5, 1), + display: 'flex', + alignItems: 'center', + gap: theme.spacing(1), + }), }); interface ExpressionPreviewProps extends Pick { @@ -183,14 +231,26 @@ function ExpressionPreview({ refId, model, evalData, isAlertCondition }: Express case ExpressionQueryType.threshold: return ; + case ExpressionQueryType.sql: + return ; + default: return <>Expression not supported: {model.type}; } } return ( - + + {startCase(model.type)} + , + ]} + isAlertCondition={isAlertCondition} + > {renderPreview()} + {evalData && } ); @@ -198,27 +258,29 @@ function ExpressionPreview({ refId, model, evalData, isAlertCondition }: Express interface QueryBoxProps extends React.PropsWithChildren { refId: string; - headerItems?: string[]; + headerItems?: React.ReactNode; isAlertCondition?: boolean; - className?: string; + exploreLink?: string; } -function QueryBox({ refId, headerItems = [], children, isAlertCondition, className }: QueryBoxProps) { +function QueryBox({ refId, headerItems = [], children, isAlertCondition, exploreLink }: QueryBoxProps) { const styles = useStyles2(getQueryBoxStyles); return ( -
+
{refId} - {headerItems.map((item, index) => ( - - {item} - - ))} - {isAlertCondition && ( -
- -
+ {headerItems} + + {isAlertCondition && } + {exploreLink && ( + + View in Explore + + } + /> )}
{children} @@ -227,11 +289,14 @@ function QueryBox({ refId, headerItems = [], children, isAlertCondition, classNa } const getQueryBoxStyles = (theme: GrafanaTheme2) => ({ - container: css` - flex: 1 0 25%; - border: 1px solid ${theme.colors.border.strong}; - max-width: 100%; - `, + container: css({ + flex: '1 0 25%', + border: `1px solid ${theme.colors.border.weak}`, + maxWidth: '100%', + borderRadius: theme.shape.radius.default, + display: 'flex', + flexDirection: 'column', + }), header: css` display: flex; align-items: center; @@ -239,19 +304,18 @@ const getQueryBoxStyles = (theme: GrafanaTheme2) => ({ padding: ${theme.spacing(1)}; background-color: ${theme.colors.background.secondary}; `, - textBlock: css` - border: 1px solid ${theme.colors.border.weak}; - padding: ${theme.spacing(0.5, 1)}; - background-color: ${theme.colors.background.primary}; - `, - refId: css` - color: ${theme.colors.text.link}; - padding: ${theme.spacing(0.5, 1)}; - border: 1px solid ${theme.colors.border.weak}; - `, - conditionIndicator: css` - margin-left: auto; - `, + textBlock: css({ + border: `1px solid ${theme.colors.border.weak}`, + padding: theme.spacing(0.5, 1), + backgroundColor: theme.colors.background.primary, + borderRadius: theme.shape.radius.default, + }), + refId: css({ + color: theme.colors.text.link, + padding: theme.spacing(0.5, 1), + border: `1px solid ${theme.colors.border.weak}`, + borderRadius: theme.shape.radius.default, + }), }); function ClassicConditionViewer({ model }: { model: ExpressionQuery }) { @@ -322,7 +386,7 @@ const getReduceConditionViewerStyles = (theme: GrafanaTheme2) => ({ container: css` padding: ${theme.spacing(1)}; display: grid; - gap: ${theme.spacing(1)}; + gap: ${theme.spacing(0.5)}; grid-template-rows: 1fr 1fr; grid-template-columns: 1fr 1fr 1fr 1fr; @@ -361,7 +425,7 @@ const getResampleExpressionViewerStyles = (theme: GrafanaTheme2) => ({ container: css` padding: ${theme.spacing(1)}; display: grid; - gap: ${theme.spacing(1)}; + gap: ${theme.spacing(0.5)}; grid-template-columns: 1fr 1fr 1fr 1fr; grid-template-rows: 1fr 1fr; `, @@ -378,20 +442,44 @@ function ThresholdExpressionViewer({ model }: { model: ExpressionQuery }) { const isRange = evaluator ? isRangeEvaluator(evaluator) : false; - return ( -
-
Input
-
{expression}
+ const unloadEvaluator = conditions && conditions[0]?.unloadEvaluator; + const unloadThresholdFunction = thresholdFunctions.find((tf) => tf.value === unloadEvaluator?.type); - {evaluator && ( - <> -
{thresholdFunction?.label}
-
- {isRange ? `(${evaluator.params[0]}; ${evaluator.params[1]})` : evaluator.params[0]} -
- - )} -
+ const unloadIsRange = unloadEvaluator ? isRangeEvaluator(unloadEvaluator) : false; + + return ( + <> +
+
Input
+
{expression}
+ + {evaluator && ( + <> +
{thresholdFunction?.label}
+
+ {isRange ? `(${evaluator.params[0]}; ${evaluator.params[1]})` : evaluator.params[0]} +
+ + )} +
+
+ {unloadEvaluator && ( + <> +
Stop alerting when
+
{expression}
+ + <> +
{unloadThresholdFunction?.label}
+
+ {unloadIsRange + ? `(${unloadEvaluator.params[0]}; ${unloadEvaluator.params[1]})` + : unloadEvaluator.params[0]} +
+ + + )} +
+ ); } @@ -406,7 +494,7 @@ const getExpressionViewerStyles = (theme: GrafanaTheme2) => { container: css` padding: ${theme.spacing(1)}; display: flex; - gap: ${theme.spacing(1)}; + gap: ${theme.spacing(0.5)}; `, blue: css` ${blue}; @@ -447,10 +535,12 @@ const getCommonQueryStyles = (theme: GrafanaTheme2) => ({ font-size: ${theme.typography.bodySmall.fontSize}; line-height: ${theme.typography.bodySmall.lineHeight}; font-weight: ${theme.typography.fontWeightBold}; + border-radius: ${theme.shape.radius.default}; `, value: css` padding: ${theme.spacing(0.5, 1)}; border: 1px solid ${theme.colors.border.weak}; + border-radius: ${theme.shape.radius.default}; `, }); diff --git a/public/app/features/alerting/unified/MoreActionsRuleButtons.tsx b/public/app/features/alerting/unified/MoreActionsRuleButtons.tsx deleted file mode 100644 index fcf0f5e6b48d1..0000000000000 --- a/public/app/features/alerting/unified/MoreActionsRuleButtons.tsx +++ /dev/null @@ -1,61 +0,0 @@ -import React from 'react'; -import { useLocation } from 'react-router-dom'; -import { useToggle } from 'react-use'; - -import { urlUtil } from '@grafana/data'; -import { Button, Dropdown, Icon, LinkButton, Menu, MenuItem } from '@grafana/ui'; - -import { logInfo, LogMessages } from './Analytics'; -import { GrafanaRulesExporter } from './components/export/GrafanaRulesExporter'; -import { AlertSourceAction, useAlertSourceAbility } from './hooks/useAbilities'; - -interface Props {} - -export function MoreActionsRuleButtons({}: Props) { - const [_, viewRuleAllowed] = useAlertSourceAbility(AlertSourceAction.ViewAlertRule); - const [createRuleSupported, createRuleAllowed] = useAlertSourceAbility(AlertSourceAction.CreateAlertRule); - const [createCloudRuleSupported, createCloudRuleAllowed] = useAlertSourceAbility( - AlertSourceAction.CreateExternalAlertRule - ); - - const canCreateGrafanaRules = createRuleSupported && createRuleAllowed; - const canCreateCloudRules = createCloudRuleSupported && createCloudRuleAllowed; - - const location = useLocation(); - const [showExportDrawer, toggleShowExportDrawer] = useToggle(false); - const newMenu = ( - - {(canCreateGrafanaRules || canCreateCloudRules) && ( - - )} - {viewRuleAllowed && } - - ); - - return ( - <> - {(canCreateGrafanaRules || canCreateCloudRules) && ( - logInfo(LogMessages.alertRuleFromScratch)} - > - New alert rule - - )} - - - - - {showExportDrawer && } - - ); -} diff --git a/public/app/features/alerting/unified/MuteTimings.test.tsx b/public/app/features/alerting/unified/MuteTimings.test.tsx index e87db13b33cba..d52434ca228de 100644 --- a/public/app/features/alerting/unified/MuteTimings.test.tsx +++ b/public/app/features/alerting/unified/MuteTimings.test.tsx @@ -1,4 +1,4 @@ -import { render, waitFor, fireEvent, within } from '@testing-library/react'; +import { fireEvent, render, waitFor, within } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import React from 'react'; import { TestProvider } from 'test/helpers/TestProvider'; @@ -10,7 +10,7 @@ import { AccessControlAction } from 'app/types'; import MuteTimings from './MuteTimings'; import { fetchAlertManagerConfig, updateAlertManagerConfig } from './api/alertmanager'; -import { grantUserPermissions, mockDataSource, MockDataSourceSrv } from './mocks'; +import { MockDataSourceSrv, grantUserPermissions, mockDataSource } from './mocks'; import { DataSourceType } from './utils/datasource'; jest.mock('./api/alertmanager'); @@ -71,6 +71,21 @@ const muteTimeInterval: MuteTimeInterval = { }, ], }; +const muteTimeInterval2: MuteTimeInterval = { + name: 'default-mute2', + time_intervals: [ + { + times: [ + { + start_time: '12:00', + end_time: '24:00', + }, + ], + days_of_month: ['15', '-1'], + months: ['august:december', 'march'], + }, + ], +}; const defaultConfig: AlertManagerCortexConfig = { alertmanager_config: { @@ -90,6 +105,44 @@ const defaultConfig: AlertManagerCortexConfig = { }, template_files: {}, }; +const defaultConfigWithNewTimeIntervalsField: AlertManagerCortexConfig = { + alertmanager_config: { + receivers: [{ name: 'default' }, { name: 'critical' }], + route: { + receiver: 'default', + group_by: ['alertname'], + routes: [ + { + matchers: ['env=prod', 'region!=EU'], + mute_time_intervals: [muteTimeInterval.name], + }, + ], + }, + templates: [], + time_intervals: [muteTimeInterval], + }, + template_files: {}, +}; + +const defaultConfigWithBothTimeIntervalsField: AlertManagerCortexConfig = { + alertmanager_config: { + receivers: [{ name: 'default' }, { name: 'critical' }], + route: { + receiver: 'default', + group_by: ['alertname'], + routes: [ + { + matchers: ['env=prod', 'region!=EU'], + mute_time_intervals: [muteTimeInterval.name], + }, + ], + }, + templates: [], + time_intervals: [muteTimeInterval], + mute_time_intervals: [muteTimeInterval2], + }, + template_files: {}, +}; const resetMocks = () => { jest.resetAllMocks(); @@ -110,7 +163,102 @@ describe('Mute timings', () => { grantUserPermissions(Object.values(AccessControlAction)); }); - it('creates a new mute timing', async () => { + it('creates a new mute timing, with mute_time_intervals in config', async () => { + renderMuteTimings(); + + await waitFor(() => expect(mocks.api.fetchAlertManagerConfig).toHaveBeenCalled()); + expect(ui.nameField.get()).toBeInTheDocument(); + + await userEvent.type(ui.nameField.get(), 'maintenance period'); + await userEvent.type(ui.startsAt.get(), '22:00'); + await userEvent.type(ui.endsAt.get(), '24:00'); + await userEvent.type(ui.days.get(), '-1'); + await userEvent.type(ui.months.get(), 'january, july'); + + fireEvent.submit(ui.form.get()); + + await waitFor(() => expect(mocks.api.updateAlertManagerConfig).toHaveBeenCalled()); + + const { mute_time_intervals: _, ...configWithoutMuteTimings } = defaultConfig.alertmanager_config; + expect(mocks.api.updateAlertManagerConfig).toHaveBeenCalledWith('grafana', { + ...defaultConfig, + alertmanager_config: { + ...configWithoutMuteTimings, + mute_time_intervals: [ + muteTimeInterval, + { + name: 'maintenance period', + time_intervals: [ + { + days_of_month: ['-1'], + months: ['january', 'july'], + times: [ + { + start_time: '22:00', + end_time: '24:00', + }, + ], + }, + ], + }, + ], + }, + }); + }); + + it('creates a new mute timing, with time_intervals in config', async () => { + mocks.api.fetchAlertManagerConfig.mockImplementation(() => { + return Promise.resolve({ + ...defaultConfigWithNewTimeIntervalsField, + }); + }); + renderMuteTimings(); + + await waitFor(() => expect(mocks.api.fetchAlertManagerConfig).toHaveBeenCalled()); + expect(ui.nameField.get()).toBeInTheDocument(); + + await userEvent.type(ui.nameField.get(), 'maintenance period'); + await userEvent.type(ui.startsAt.get(), '22:00'); + await userEvent.type(ui.endsAt.get(), '24:00'); + await userEvent.type(ui.days.get(), '-1'); + await userEvent.type(ui.months.get(), 'january, july'); + + fireEvent.submit(ui.form.get()); + + await waitFor(() => expect(mocks.api.updateAlertManagerConfig).toHaveBeenCalled()); + + const { mute_time_intervals: _, ...configWithoutMuteTimings } = defaultConfig.alertmanager_config; + expect(mocks.api.updateAlertManagerConfig).toHaveBeenCalledWith('grafana', { + ...defaultConfig, + alertmanager_config: { + ...configWithoutMuteTimings, + mute_time_intervals: [ + muteTimeInterval, + { + name: 'maintenance period', + time_intervals: [ + { + days_of_month: ['-1'], + months: ['january', 'july'], + times: [ + { + start_time: '22:00', + end_time: '24:00', + }, + ], + }, + ], + }, + ], + }, + }); + }); + it('creates a new mute timing, with time_intervals and mute_time_intervals in config', async () => { + mocks.api.fetchAlertManagerConfig.mockImplementation(() => { + return Promise.resolve({ + ...defaultConfigWithBothTimeIntervalsField, + }); + }); renderMuteTimings(); await waitFor(() => expect(mocks.api.fetchAlertManagerConfig).toHaveBeenCalled()); @@ -125,12 +273,15 @@ describe('Mute timings', () => { fireEvent.submit(ui.form.get()); await waitFor(() => expect(mocks.api.updateAlertManagerConfig).toHaveBeenCalled()); + + const { mute_time_intervals, time_intervals, ...configWithoutMuteTimings } = defaultConfig.alertmanager_config; expect(mocks.api.updateAlertManagerConfig).toHaveBeenCalledWith('grafana', { ...defaultConfig, alertmanager_config: { - ...defaultConfig.alertmanager_config, + ...configWithoutMuteTimings, mute_time_intervals: [ muteTimeInterval, + muteTimeInterval2, { name: 'maintenance period', time_intervals: [ @@ -200,7 +351,6 @@ describe('Mute timings', () => { name: 'default-mute', time_intervals: [ { - times: [], weekdays: ['monday'], days_of_month: ['-7:-1'], months: ['3', '6', '9', '12'], diff --git a/public/app/features/alerting/unified/MuteTimings.tsx b/public/app/features/alerting/unified/MuteTimings.tsx index 3900a8ccf5ed6..a49205c477457 100644 --- a/public/app/features/alerting/unified/MuteTimings.tsx +++ b/public/app/features/alerting/unified/MuteTimings.tsx @@ -1,5 +1,5 @@ import React, { useCallback, useEffect, useState } from 'react'; -import { Route, Redirect, Switch, useRouteMatch } from 'react-router-dom'; +import { Redirect, Route, Switch, useRouteMatch } from 'react-router-dom'; import { NavModelItem } from '@grafana/data'; import { Alert } from '@grafana/ui'; @@ -21,8 +21,9 @@ const MuteTimings = () => { const config = currentData?.alertmanager_config; const getMuteTimingByName = useCallback( - (id: string): MuteTimeInterval | undefined => { - const timing = config?.mute_time_intervals?.find(({ name }: MuteTimeInterval) => name === id); + (id: string, fromTimeIntervals: boolean): MuteTimeInterval | undefined => { + const time_intervals = fromTimeIntervals ? config?.time_intervals ?? [] : config?.mute_time_intervals ?? []; + const timing = time_intervals.find(({ name }: MuteTimeInterval) => name === id); if (timing) { const provenance = config?.muteTimeProvenances?.[timing.name]; @@ -53,13 +54,17 @@ const MuteTimings = () => { {() => { if (queryParams['muteName']) { - const muteTiming = getMuteTimingByName(String(queryParams['muteName'])); + const muteTimingInMuteTimings = getMuteTimingByName(String(queryParams['muteName']), false); + const muteTimingInTimeIntervals = getMuteTimingByName(String(queryParams['muteName']), true); + const inTimeIntervals = Boolean(muteTimingInTimeIntervals); + const muteTiming = inTimeIntervals ? muteTimingInTimeIntervals : muteTimingInMuteTimings; const provenance = muteTiming?.provenance; return ( @@ -78,7 +83,7 @@ const MuteTimingsPage = () => { const pageNav = useMuteTimingNavData(); return ( - + ); diff --git a/public/app/features/alerting/unified/NotificationPolicies.test.tsx b/public/app/features/alerting/unified/NotificationPolicies.test.tsx index 459ea8e4e67fa..258cab99483c0 100644 --- a/public/app/features/alerting/unified/NotificationPolicies.test.tsx +++ b/public/app/features/alerting/unified/NotificationPolicies.test.tsx @@ -23,7 +23,7 @@ import { fetchAlertManagerConfig, fetchStatus, updateAlertManagerConfig } from ' import { alertmanagerApi } from './api/alertmanagerApi'; import { discoverAlertmanagerFeatures } from './api/buildInfo'; import * as grafanaApp from './components/receivers/grafanaAppReceivers/grafanaApp'; -import { mockDataSource, MockDataSourceSrv, someCloudAlertManagerConfig, someCloudAlertManagerStatus } from './mocks'; +import { MockDataSourceSrv, mockDataSource, someCloudAlertManagerConfig, someCloudAlertManagerStatus } from './mocks'; import { defaultGroupBy } from './utils/amroutes'; import { getAllDataSources } from './utils/config'; import { ALERTMANAGER_NAME_QUERY_KEY } from './utils/constants'; @@ -759,18 +759,22 @@ describe('findRoutesMatchingFilters', () => { ], }; + it('should not filter when we do not have any valid filters', () => { + expect(findRoutesMatchingFilters(simpleRouteTree, {})).toHaveProperty('filtersApplied', false); + }); + it('should not match non-existing', () => { expect( findRoutesMatchingFilters(simpleRouteTree, { labelMatchersFilter: [['foo', MatcherOperator.equal, 'bar']], - }) - ).toHaveLength(0); + }).matchedRoutesWithPath.size + ).toBe(0); - expect( - findRoutesMatchingFilters(simpleRouteTree, { - contactPointFilter: 'does-not-exist', - }) - ).toHaveLength(0); + const matchingRoutes = findRoutesMatchingFilters(simpleRouteTree, { + contactPointFilter: 'does-not-exist', + }); + + expect(matchingRoutes).toMatchSnapshot(); }); it('should work with only label matchers', () => { @@ -778,8 +782,7 @@ describe('findRoutesMatchingFilters', () => { labelMatchersFilter: [['hello', MatcherOperator.equal, 'world']], }); - expect(matchingRoutes).toHaveLength(1); - expect(matchingRoutes[0]).toHaveProperty('id', '1'); + expect(matchingRoutes).toMatchSnapshot(); }); it('should work with only contact point and inheritance', () => { @@ -787,9 +790,7 @@ describe('findRoutesMatchingFilters', () => { contactPointFilter: 'simple-receiver', }); - expect(matchingRoutes).toHaveLength(2); - expect(matchingRoutes[0]).toHaveProperty('id', '1'); - expect(matchingRoutes[1]).toHaveProperty('id', '2'); + expect(matchingRoutes).toMatchSnapshot(); }); it('should work with non-intersecting filters', () => { @@ -798,7 +799,7 @@ describe('findRoutesMatchingFilters', () => { contactPointFilter: 'does-not-exist', }); - expect(matchingRoutes).toHaveLength(0); + expect(matchingRoutes).toMatchSnapshot(); }); it('should work with all filters', () => { @@ -807,8 +808,7 @@ describe('findRoutesMatchingFilters', () => { contactPointFilter: 'simple-receiver', }); - expect(matchingRoutes).toHaveLength(1); - expect(matchingRoutes[0]).toHaveProperty('id', '1'); + expect(matchingRoutes).toMatchSnapshot(); }); }); diff --git a/public/app/features/alerting/unified/NotificationPolicies.tsx b/public/app/features/alerting/unified/NotificationPolicies.tsx index 861c5658d9ec2..234d7b0feaaf3 100644 --- a/public/app/features/alerting/unified/NotificationPolicies.tsx +++ b/public/app/features/alerting/unified/NotificationPolicies.tsx @@ -1,11 +1,9 @@ import { css } from '@emotion/css'; -import { intersectionBy, isEqual } from 'lodash'; import React, { useEffect, useMemo, useState } from 'react'; import { useAsyncFn } from 'react-use'; import { GrafanaTheme2, UrlQueryMap } from '@grafana/data'; -import { Stack } from '@grafana/experimental'; -import { Alert, LoadingPlaceholder, Tab, TabContent, TabsBar, useStyles2, withErrorBoundary } from '@grafana/ui'; +import { Alert, LoadingPlaceholder, Stack, Tab, TabContent, TabsBar, useStyles2, withErrorBoundary } from '@grafana/ui'; import { useQueryParams } from 'app/core/hooks/useQueryParams'; import { ObjectMatcher, Route, RouteWithID } from 'app/plugins/datasource/alertmanager/types'; import { useDispatch } from 'app/types'; @@ -17,12 +15,17 @@ import { useGetContactPointsState } from './api/receiversApi'; import { AlertmanagerPageWrapper } from './components/AlertingPageWrapper'; import { GrafanaAlertmanagerDeliveryWarning } from './components/GrafanaAlertmanagerDeliveryWarning'; import { MuteTimingsTable } from './components/mute-timings/MuteTimingsTable'; -import { findRoutesMatchingPredicate, NotificationPoliciesFilter } from './components/notification-policies/Filters'; +import { mergeTimeIntervals } from './components/mute-timings/util'; +import { + NotificationPoliciesFilter, + findRoutesByMatchers, + findRoutesMatchingPredicate, +} from './components/notification-policies/Filters'; import { useAddPolicyModal, - useEditPolicyModal, - useDeletePolicyModal, useAlertGroupsModal, + useDeletePolicyModal, + useEditPolicyModal, } from './components/notification-policies/Modals'; import { Policy } from './components/notification-policies/Policy'; import { useAlertmanagerConfig } from './hooks/useAlertmanagerConfig'; @@ -31,10 +34,15 @@ import { updateAlertManagerConfigAction } from './state/actions'; import { FormAmRoute } from './types/amroutes'; import { useRouteGroupsMatcher } from './useRouteGroupsMatcher'; import { addUniqueIdentifierToRoute } from './utils/amroutes'; -import { normalizeMatchers } from './utils/matchers'; import { computeInheritedTree } from './utils/notification-policies'; import { initialAsyncRequestState } from './utils/redux'; -import { addRouteToParentRoute, mergePartialAmRouteWithRouteTree, omitRouteFromRouteTree } from './utils/routeTree'; +import { + InsertPosition, + addRouteToReferenceRoute, + cleanRouteIDs, + mergePartialAmRouteWithRouteTree, + omitRouteFromRouteTree, +} from './utils/routeTree'; enum ActiveTab { NotificationPolicies = 'notification_policies', @@ -55,8 +63,8 @@ const AmRoutes = () => { const [contactPointFilter, setContactPointFilter] = useState(); const [labelMatchersFilter, setLabelMatchersFilter] = useState([]); + const { selectedAlertmanager, hasConfigurationAPI, isGrafanaAlertmanager } = useAlertmanager(); const { getRouteGroupsMap } = useRouteGroupsMatcher(); - const { selectedAlertmanager, hasConfigurationAPI } = useAlertmanager(); const contactPointsState = useGetContactPointsState(selectedAlertmanager ?? ''); @@ -94,15 +102,21 @@ const AmRoutes = () => { useEffect(() => { if (rootRoute && alertGroups) { - triggerGetRouteGroupsMap(rootRoute, alertGroups); + triggerGetRouteGroupsMap(rootRoute, alertGroups, { unquoteMatchers: !isGrafanaAlertmanager }); } - }, [rootRoute, alertGroups, triggerGetRouteGroupsMap]); + }, [rootRoute, alertGroups, triggerGetRouteGroupsMap, isGrafanaAlertmanager]); // these are computed from the contactPoint and labels matchers filter const routesMatchingFilters = useMemo(() => { if (!rootRoute) { - return []; + const emptyResult: RoutesMatchingFilters = { + filtersApplied: false, + matchedRoutesWithPath: new Map(), + }; + + return emptyResult; } + return findRoutesMatchingFilters(rootRoute, { contactPointFilter, labelMatchersFilter }); }, [contactPointFilter, labelMatchersFilter, rootRoute]); @@ -124,20 +138,29 @@ const AmRoutes = () => { updateRouteTree(newRouteTree); } - function handleAdd(partialRoute: Partial, parentRoute: RouteWithID) { + function handleAdd(partialRoute: Partial, referenceRoute: RouteWithID, insertPosition: InsertPosition) { if (!rootRoute) { return; } - const newRouteTree = addRouteToParentRoute(selectedAlertmanager ?? '', partialRoute, parentRoute, rootRoute); + const newRouteTree = addRouteToReferenceRoute( + selectedAlertmanager ?? '', + partialRoute, + referenceRoute, + rootRoute, + insertPosition + ); updateRouteTree(newRouteTree); } - function updateRouteTree(routeTree: Route) { + function updateRouteTree(routeTree: Route | RouteWithID) { if (!result) { return; } + // make sure we omit all IDs from our routes + const newRouteTree = cleanRouteIDs(routeTree); + setUpdatingTree(true); dispatch( @@ -146,7 +169,7 @@ const AmRoutes = () => { ...result, alertmanager_config: { ...result.alertmanager_config, - route: routeTree, + route: newRouteTree, }, }, oldConfig: result, @@ -184,8 +207,9 @@ const AmRoutes = () => { if (!selectedAlertmanager) { return null; } + const time_intervals = result?.alertmanager_config ? mergeTimeIntervals(result?.alertmanager_config) : []; - const numberOfMuteTimings = result?.alertmanager_config.mute_time_intervals?.length ?? 0; + const numberOfMuteTimings = time_intervals.length; const haveData = result && !resultError && !resultLoading; const isFetching = !result && resultLoading; const haveError = resultError && !resultLoading; @@ -232,6 +256,7 @@ const AmRoutes = () => { receivers={receivers} onChangeMatchers={setLabelMatchersFilter} onChangeReceiver={setContactPointFilter} + matchingCount={routesMatchingFilters.matchedRoutesWithPath.size} /> )} {rootRoute && ( @@ -250,6 +275,7 @@ const AmRoutes = () => { onShowAlertInstances={showAlertGroupsModal} routesMatchingFilters={routesMatchingFilters} matchingInstancesPreview={{ groupsMap: routeAlertGroupsMap, enabled: !instancesPreviewError }} + isAutoGenerated={false} /> )} @@ -274,35 +300,85 @@ type RouteFilters = { labelMatchersFilter?: ObjectMatcher[]; }; -export const findRoutesMatchingFilters = (rootRoute: RouteWithID, filters: RouteFilters): RouteWithID[] => { +type FilterResult = Map; + +export interface RoutesMatchingFilters { + filtersApplied: boolean; + matchedRoutesWithPath: FilterResult; +} + +export const findRoutesMatchingFilters = (rootRoute: RouteWithID, filters: RouteFilters): RoutesMatchingFilters => { const { contactPointFilter, labelMatchersFilter = [] } = filters; + const hasFilter = contactPointFilter || labelMatchersFilter.length > 0; + const havebothFilters = Boolean(contactPointFilter) && labelMatchersFilter.length > 0; + // if filters are empty we short-circuit this function + if (!hasFilter) { + return { filtersApplied: false, matchedRoutesWithPath: new Map() }; + } + + // we'll collect all of the routes matching the filters + // we track an array of matching routes, each item in the array is for 1 type of filter + // + // [contactPointMatches, labelMatcherMatches] -> [[{ a: [], b: [] }], [{ a: [], c: [] }]] + // later we'll use intersection to find results in all sets of filter matchers let matchedRoutes: RouteWithID[][] = []; + // compute fully inherited tree so all policies have their inherited receiver const fullRoute = computeInheritedTree(rootRoute); - const routesMatchingContactPoint = contactPointFilter + // find all routes for our contact point filter + const matchingRoutesForContactPoint = contactPointFilter ? findRoutesMatchingPredicate(fullRoute, (route) => route.receiver === contactPointFilter) - : undefined; + : new Map(); + const routesMatchingContactPoint = Array.from(matchingRoutesForContactPoint.keys()); if (routesMatchingContactPoint) { matchedRoutes.push(routesMatchingContactPoint); } - const routesMatchingLabelMatchers = labelMatchersFilter.length - ? findRoutesMatchingPredicate(fullRoute, (route) => { - const routeMatchers = normalizeMatchers(route); - return labelMatchersFilter.every((filter) => routeMatchers.some((matcher) => isEqual(filter, matcher))); - }) - : undefined; + // find all routes matching our label matchers + const matchingRoutesForLabelMatchers = labelMatchersFilter.length + ? findRoutesMatchingPredicate(fullRoute, (route) => findRoutesByMatchers(route, labelMatchersFilter)) + : new Map(); - if (routesMatchingLabelMatchers) { - matchedRoutes.push(routesMatchingLabelMatchers); + const routesMatchingLabelFilters = Array.from(matchingRoutesForLabelMatchers.keys()); + if (matchingRoutesForLabelMatchers.size > 0) { + matchedRoutes.push(routesMatchingLabelFilters); } - return intersectionBy(...matchedRoutes, 'id'); + // now that we have our maps for all filters, we just need to find the intersection of all maps by route if we have both filters + const routesForAllFilterResults = havebothFilters + ? findMapIntersection(matchingRoutesForLabelMatchers, matchingRoutesForContactPoint) + : new Map([...matchingRoutesForLabelMatchers, ...matchingRoutesForContactPoint]); + + return { + filtersApplied: true, + matchedRoutesWithPath: routesForAllFilterResults, + }; }; +// this function takes multiple maps and creates a new map with routes that exist in all maps +// +// map 1: { a: [], b: [] } +// map 2: { a: [], c: [] } +// return: { a: [] } +function findMapIntersection(...matchingRoutes: FilterResult[]): FilterResult { + const result = new Map(); + + // Iterate through the keys of the first map' + for (const key of matchingRoutes[0].keys()) { + // Check if the key exists in all other maps + if (matchingRoutes.every((map) => map.has(key))) { + // If yes, add the key to the result map + // @ts-ignore + result.set(key, matchingRoutes[0].get(key)); + } + } + + return result; +} + const getStyles = (theme: GrafanaTheme2) => ({ tabContent: css` margin-top: ${theme.spacing(2)}; @@ -330,7 +406,7 @@ function getActiveTabFromUrl(queryParams: UrlQueryMap): QueryParamValues { } const NotificationPoliciesPage = () => ( - + ); diff --git a/public/app/features/alerting/unified/PanelAlertTab.tsx b/public/app/features/alerting/unified/PanelAlertTab.tsx index 88e6a763f2c8e..697fe405efcb0 100644 --- a/public/app/features/alerting/unified/PanelAlertTab.tsx +++ b/public/app/features/alerting/unified/PanelAlertTab.tsx @@ -1,6 +1,6 @@ import React from 'react'; -import { Tab, TabProps } from '@grafana/ui/src/components/Tabs/Tab'; +import { Tab, TabProps } from '@grafana/ui'; import { DashboardModel, PanelModel } from 'app/features/dashboard/state'; import { usePanelCombinedRules } from './hooks/usePanelCombinedRules'; @@ -12,6 +12,6 @@ interface Props extends Omit { // it will load rule count from backend export const PanelAlertTab = ({ panel, dashboard, ...otherProps }: Props) => { - const { rules, loading } = usePanelCombinedRules({ panel, dashboard }); + const { rules, loading } = usePanelCombinedRules({ panelId: panel.id, dashboardUID: dashboard.uid }); return ; }; diff --git a/public/app/features/alerting/unified/PanelAlertTabContent.test.tsx b/public/app/features/alerting/unified/PanelAlertTabContent.test.tsx index add93de4b6990..a1df6a1be3ee8 100644 --- a/public/app/features/alerting/unified/PanelAlertTabContent.test.tsx +++ b/public/app/features/alerting/unified/PanelAlertTabContent.test.tsx @@ -153,7 +153,7 @@ const dashboard = { }, meta: { canSave: true, - folderId: 1, + folderUid: 'abc', folderTitle: 'super folder', }, } as DashboardModel; diff --git a/public/app/features/alerting/unified/PanelAlertTabContent.tsx b/public/app/features/alerting/unified/PanelAlertTabContent.tsx index da91c08802f9d..40ad74a557da3 100644 --- a/public/app/features/alerting/unified/PanelAlertTabContent.tsx +++ b/public/app/features/alerting/unified/PanelAlertTabContent.tsx @@ -20,8 +20,8 @@ interface Props { export const PanelAlertTabContent = ({ dashboard, panel }: Props) => { const styles = useStyles2(getStyles); const { errors, loading, rules } = usePanelCombinedRules({ - dashboard, - panel, + dashboardUID: dashboard.uid, + panelId: panel.id, poll: true, }); const permissions = getRulesPermissions('grafana'); @@ -59,7 +59,7 @@ export const PanelAlertTabContent = ({ dashboard, panel }: Props) => { } return ( -
+
{alert} {!!dashboard.uid && ( <> diff --git a/public/app/features/alerting/unified/Receivers.tsx b/public/app/features/alerting/unified/Receivers.tsx index ccaa9128c9623..49d696933658b 100644 --- a/public/app/features/alerting/unified/Receivers.tsx +++ b/public/app/features/alerting/unified/Receivers.tsx @@ -1,15 +1,13 @@ import React from 'react'; import { Route, Switch } from 'react-router-dom'; -import { config } from '@grafana/runtime'; import { withErrorBoundary } from '@grafana/ui'; -const ContactPointsV1 = SafeDynamicImport(() => import('./components/contact-points/ContactPoints.v1')); -const ContactPointsV2 = SafeDynamicImport(() => import('./components/contact-points/ContactPoints.v2')); +const ContactPointsV2 = SafeDynamicImport(() => import('./components/contact-points/ContactPoints')); const EditContactPoint = SafeDynamicImport(() => import('./components/contact-points/EditContactPoint')); const NewContactPoint = SafeDynamicImport(() => import('./components/contact-points/NewContactPoint')); const EditMessageTemplate = SafeDynamicImport(() => import('./components/contact-points/EditMessageTemplate')); const NewMessageTemplate = SafeDynamicImport(() => import('./components/contact-points/NewMessageTemplate')); -const GlobalConfig = SafeDynamicImport(() => import('./components/contact-points/GlobalConfig')); +const GlobalConfig = SafeDynamicImport(() => import('./components/contact-points/components/GlobalConfig')); const DuplicateMessageTemplate = SafeDynamicImport( () => import('./components/contact-points/DuplicateMessageTemplate') ); @@ -18,29 +16,21 @@ import { GrafanaRouteComponentProps } from 'app/core/navigation/types'; import { AlertmanagerPageWrapper } from './components/AlertingPageWrapper'; -const newContactPointsListView = config.featureToggles.alertingContactPointsV2 ?? false; - -// TODO add pagenav back in – that way we have correct breadcrumbs and page title -const ContactPoints = (props: GrafanaRouteComponentProps): JSX.Element => ( - - {/* TODO do we want a "routes" component for each Alerting entity? */} - {newContactPointsListView ? ( - - - - - - - - - - ) : ( - - )} +const ContactPoints = (_props: GrafanaRouteComponentProps): JSX.Element => ( + + + + + + + + + + ); diff --git a/public/app/features/alerting/unified/RedirectToRuleViewer.test.tsx b/public/app/features/alerting/unified/RedirectToRuleViewer.test.tsx index 9726a8e7cea0b..5be4926cf1222 100644 --- a/public/app/features/alerting/unified/RedirectToRuleViewer.test.tsx +++ b/public/app/features/alerting/unified/RedirectToRuleViewer.test.tsx @@ -20,7 +20,10 @@ jest.mock('react-router-dom', () => ({ Redirect: jest.fn(({}) => `Redirected`), })); -jest.mock('react-use'); +jest.mock('react-use', () => ({ + ...jest.requireActual('react-use'), + useLocation: jest.fn(), +})); const renderRedirectToRuleViewer = (pathname: string, search?: string) => { jest.mocked(useLocation).mockReturnValue({ pathname, trigger: '', search }); diff --git a/public/app/features/alerting/unified/RuleEditor.tsx b/public/app/features/alerting/unified/RuleEditor.tsx index 1bc056c0b5e3d..f2c82cf9187b9 100644 --- a/public/app/features/alerting/unified/RuleEditor.tsx +++ b/public/app/features/alerting/unified/RuleEditor.tsx @@ -90,7 +90,7 @@ const RuleEditor = ({ match }: RuleEditorProps) => { }, [canCreateCloudRules, canCreateGrafanaRules, canEditRules, copyFromIdentifier, id, identifier, loading]); return ( - + {getContent()} ); diff --git a/public/app/features/alerting/unified/RuleEditorCloudOnlyAllowed.test.tsx b/public/app/features/alerting/unified/RuleEditorCloudOnlyAllowed.test.tsx index 8c335a5a0076c..ea2a169d9988f 100644 --- a/public/app/features/alerting/unified/RuleEditorCloudOnlyAllowed.test.tsx +++ b/public/app/features/alerting/unified/RuleEditorCloudOnlyAllowed.test.tsx @@ -2,7 +2,7 @@ import { screen, waitForElementToBeRemoved } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import React from 'react'; import { renderRuleEditor, ui } from 'test/helpers/alertingRuleEditor'; -import { byRole, byText } from 'testing-library-selector'; +import { byText } from 'testing-library-selector'; import { setDataSourceSrv } from '@grafana/runtime'; import { contextSrv } from 'app/core/services/context_srv'; @@ -104,6 +104,7 @@ jest.mock('@grafana/runtime', () => ({ getDataSourceSrv: jest.fn(() => ({ getInstanceSettings: () => dataSources.prom, get: () => dataSources.prom, + getList: () => Object.values(dataSources), })), })); @@ -197,7 +198,7 @@ describe('RuleEditor cloud: checking editable data sources', () => { // check that only rules sources that have ruler available are there const dataSourceSelect = ui.inputs.dataSource.get(); - await userEvent.click(byRole('combobox').get(dataSourceSelect)); + await userEvent.click(dataSourceSelect); expect(byText('cortex with ruler').query()).toBeInTheDocument(); expect(byText('loki with ruler').query()).toBeInTheDocument(); diff --git a/public/app/features/alerting/unified/RuleEditorCloudRules.test.tsx b/public/app/features/alerting/unified/RuleEditorCloudRules.test.tsx index e89c9c033c102..061b5dcbdb41e 100644 --- a/public/app/features/alerting/unified/RuleEditorCloudRules.test.tsx +++ b/public/app/features/alerting/unified/RuleEditorCloudRules.test.tsx @@ -3,8 +3,8 @@ import userEvent from '@testing-library/user-event'; import React from 'react'; import { renderRuleEditor, ui } from 'test/helpers/alertingRuleEditor'; import { clickSelectOption } from 'test/helpers/selectOptionInTest'; -import { byRole } from 'testing-library-selector'; +import { selectors } from '@grafana/e2e-selectors'; import { contextSrv } from 'app/core/services/context_srv'; import { AccessControlAction } from 'app/types'; @@ -139,11 +139,11 @@ describe('RuleEditor cloud', () => { //expressions are removed after switching to data-source managed expect(screen.queryAllByLabelText('Remove expression')).toHaveLength(0); - expect(screen.getByTestId('datasource-picker')).toBeInTheDocument(); + expect(screen.getByTestId(selectors.components.DataSourcePicker.inputV2)).toBeInTheDocument(); - const dataSourceSelect = ui.inputs.dataSource.get(); - await user.click(byRole('combobox').get(dataSourceSelect)); - await clickSelectOption(dataSourceSelect, 'Prom (default)'); + const dataSourceSelect = await ui.inputs.dataSource.find(); + await user.click(dataSourceSelect); + await user.click(screen.getByText('Prom')); await waitFor(() => expect(mocks.api.fetchRulerRules).toHaveBeenCalled()); await user.type(await ui.inputs.expr.find(), 'up == 1'); diff --git a/public/app/features/alerting/unified/RuleEditorExisting.test.tsx b/public/app/features/alerting/unified/RuleEditorExisting.test.tsx index a3ecbbfcb6ff8..87143007b6600 100644 --- a/public/app/features/alerting/unified/RuleEditorExisting.test.tsx +++ b/public/app/features/alerting/unified/RuleEditorExisting.test.tsx @@ -1,4 +1,4 @@ -import { render, waitFor, screen, within } from '@testing-library/react'; +import { render, screen, waitFor, within } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import React from 'react'; import { Route } from 'react-router-dom'; @@ -7,7 +7,7 @@ import { ui } from 'test/helpers/alertingRuleEditor'; import { locationService, setDataSourceSrv } from '@grafana/runtime'; import { contextSrv } from 'app/core/services/context_srv'; -import { DashboardSearchHit } from 'app/features/search/types'; +import { DashboardSearchHit, DashboardSearchItemType } from 'app/features/search/types'; import { GrafanaAlertStateDecision } from 'app/types/unified-alerting-dto'; import { searchFolders } from '../../../../app/features/manage-dashboards/state/actions'; @@ -101,6 +101,7 @@ describe('RuleEditor grafana managed rules', () => { title: 'Folder A', uid: 'abcd', id: 1, + type: DashboardSearchItemType.DashDB, }; const slashedFolder = { @@ -136,7 +137,7 @@ describe('RuleEditor grafana managed rules', () => { [folder.title]: [ { interval: '1m', - name: 'my great new rule', + name: 'group1', rules: [ { annotations: { description: 'some description', summary: 'some summary' }, @@ -145,7 +146,6 @@ describe('RuleEditor grafana managed rules', () => { grafana_alert: { uid, namespace_uid: 'abcd', - namespace_id: 1, condition: 'B', data: getDefaultQueries(), exec_err_state: GrafanaAlertStateDecision.Error, @@ -200,10 +200,10 @@ describe('RuleEditor grafana managed rules', () => { expect(mocks.api.setRulerRuleGroup).toHaveBeenCalledWith( { dataSourceName: GRAFANA_RULES_SOURCE_NAME, apiVersion: 'legacy' }, - 'Folder A', + 'abcd', { interval: '1m', - name: 'my great new rule', + name: 'group1', rules: [ { annotations: { description: 'some description', summary: 'some summary', custom: 'value' }, diff --git a/public/app/features/alerting/unified/RuleEditorGrafanaRules.test.tsx b/public/app/features/alerting/unified/RuleEditorGrafanaRules.test.tsx index cc15a0c61d1d6..d4f6f031e6fa4 100644 --- a/public/app/features/alerting/unified/RuleEditorGrafanaRules.test.tsx +++ b/public/app/features/alerting/unified/RuleEditorGrafanaRules.test.tsx @@ -7,7 +7,7 @@ import { byRole } from 'testing-library-selector'; import { setDataSourceSrv } from '@grafana/runtime'; import { contextSrv } from 'app/core/services/context_srv'; -import { DashboardSearchHit } from 'app/features/search/types'; +import { DashboardSearchHit, DashboardSearchItemType } from 'app/features/search/types'; import { AccessControlAction } from 'app/types'; import { GrafanaAlertStateDecision, PromApplication } from 'app/types/unified-alerting-dto'; @@ -16,7 +16,7 @@ import { searchFolders } from '../../../../app/features/manage-dashboards/state/ import { discoverFeatures } from './api/buildInfo'; import { fetchRulerRules, fetchRulerRulesGroup, fetchRulerRulesNamespace, setRulerRuleGroup } from './api/ruler'; import { ExpressionEditorProps } from './components/rule-editor/ExpressionEditor'; -import { grantUserPermissions, mockDataSource, MockDataSourceSrv } from './mocks'; +import { MockDataSourceSrv, grantUserPermissions, mockDataSource } from './mocks'; import { fetchRulerRulesIfNotFetchedYet } from './state/actions'; import * as config from './utils/config'; import { GRAFANA_RULES_SOURCE_NAME } from './utils/datasource'; @@ -105,29 +105,67 @@ describe('RuleEditor grafana managed rules', () => { mocks.api.fetchRulerRules.mockResolvedValue({ 'Folder A': [ { + interval: '1m', name: 'group1', - rules: [], + rules: [ + { + annotations: { description: 'some description', summary: 'some summary' }, + labels: { severity: 'warn', team: 'the a-team' }, + for: '5m', + grafana_alert: { + uid: '23', + namespace_uid: 'abcd', + condition: 'B', + data: getDefaultQueries(), + exec_err_state: GrafanaAlertStateDecision.Error, + no_data_state: GrafanaAlertStateDecision.NoData, + title: 'my great new rule', + }, + }, + ], }, ], namespace2: [ { - name: 'group2', - rules: [], + interval: '1m', + name: 'group1', + rules: [ + { + annotations: { description: 'some description', summary: 'some summary' }, + labels: { severity: 'warn', team: 'the a-team' }, + for: '5m', + grafana_alert: { + uid: '23', + namespace_uid: 'b', + condition: 'B', + data: getDefaultQueries(), + exec_err_state: GrafanaAlertStateDecision.Error, + no_data_state: GrafanaAlertStateDecision.NoData, + title: 'my great new rule', + }, + }, + ], }, ], }); mocks.searchFolders.mockResolvedValue([ { title: 'Folder A', + uid: 'abcd', id: 1, + type: DashboardSearchItemType.DashDB, }, { title: 'Folder B', id: 2, + uid: 'b', + type: DashboardSearchItemType.DashDB, }, { title: 'Folder / with slash', + uid: 'c', id: 2, + type: DashboardSearchItemType.DashDB, }, ] as DashboardSearchHit[]); @@ -163,7 +201,7 @@ describe('RuleEditor grafana managed rules', () => { // 9seg expect(mocks.api.setRulerRuleGroup).toHaveBeenCalledWith( { dataSourceName: GRAFANA_RULES_SOURCE_NAME, apiVersion: 'legacy' }, - 'Folder A', + 'abcd', { interval: '1m', name: 'group1', diff --git a/public/app/features/alerting/unified/RuleEditorRecordingRule.test.tsx b/public/app/features/alerting/unified/RuleEditorRecordingRule.test.tsx index 681a84611b1ee..8b9455201f4b0 100644 --- a/public/app/features/alerting/unified/RuleEditorRecordingRule.test.tsx +++ b/public/app/features/alerting/unified/RuleEditorRecordingRule.test.tsx @@ -3,7 +3,7 @@ import userEvent, { PointerEventsCheckLevel } from '@testing-library/user-event' import React from 'react'; import { renderRuleEditor, ui } from 'test/helpers/alertingRuleEditor'; import { clickSelectOption } from 'test/helpers/selectOptionInTest'; -import { byRole, byText } from 'testing-library-selector'; +import { byText } from 'testing-library-selector'; import { setDataSourceSrv } from '@grafana/runtime'; import { contextSrv } from 'app/core/services/context_srv'; @@ -72,6 +72,7 @@ jest.mock('@grafana/runtime', () => ({ getDataSourceSrv: jest.fn(() => ({ getInstanceSettings: () => dataSources.default, get: () => dataSources.default, + getList: () => Object.values(dataSources), })), })); @@ -149,9 +150,9 @@ describe('RuleEditor recording rules', () => { await userEvent.type(await ui.inputs.name.find(), 'my great new recording rule'); const dataSourceSelect = ui.inputs.dataSource.get(); - await userEvent.click(byRole('combobox').get(dataSourceSelect)); + await userEvent.click(dataSourceSelect); - await clickSelectOption(dataSourceSelect, 'Prom (default)'); + await userEvent.click(screen.getByText('Prom')); await clickSelectOption(ui.inputs.namespace.get(), 'namespace2'); await clickSelectOption(ui.inputs.group.get(), 'group2'); diff --git a/public/app/features/alerting/unified/RuleList.test.tsx b/public/app/features/alerting/unified/RuleList.test.tsx index 2f072caf3d062..b9bbe3ea32a31 100644 --- a/public/app/features/alerting/unified/RuleList.test.tsx +++ b/public/app/features/alerting/unified/RuleList.test.tsx @@ -5,7 +5,15 @@ import React from 'react'; import { TestProvider } from 'test/helpers/TestProvider'; import { byRole, byTestId, byText } from 'testing-library-selector'; -import { DataSourceSrv, locationService, setBackendSrv, setDataSourceSrv } from '@grafana/runtime'; +import { PluginExtensionTypes } from '@grafana/data'; +import { selectors } from '@grafana/e2e-selectors'; +import { + DataSourceSrv, + getPluginLinkExtensions, + locationService, + setBackendSrv, + setDataSourceSrv, +} from '@grafana/runtime'; import { backendSrv } from 'app/core/services/backend_srv'; import * as ruleActionButtons from 'app/features/alerting/unified/components/rules/RuleActionsButtons'; import * as actions from 'app/features/alerting/unified/state/actions'; @@ -18,9 +26,9 @@ import { discoverFeatures } from './api/buildInfo'; import { fetchRules } from './api/prometheus'; import { deleteNamespace, deleteRulerRulesGroup, fetchRulerRules, setRulerRuleGroup } from './api/ruler'; import { + MockDataSourceSrv, grantUserPermissions, mockDataSource, - MockDataSourceSrv, mockPromAlert, mockPromAlertingRule, mockPromRecordingRule, @@ -32,6 +40,11 @@ import { import * as config from './utils/config'; import { DataSourceType, GRAFANA_RULES_SOURCE_NAME } from './utils/datasource'; +jest.mock('@grafana/runtime', () => ({ + ...jest.requireActual('@grafana/runtime'), + getPluginLinkExtensions: jest.fn(), + useReturnToPrevious: jest.fn(), +})); jest.mock('./api/buildInfo'); jest.mock('./api/prometheus'); jest.mock('./api/ruler'); @@ -53,6 +66,7 @@ jest.spyOn(actions, 'rulesInSameGroupHaveInvalidFor').mockReturnValue([]); const mocks = { getAllDataSourcesMock: jest.mocked(config.getAllDataSources), + getPluginLinkExtensionsMock: jest.mocked(getPluginLinkExtensions), rulesInSameGroupHaveInvalidForMock: jest.mocked(actions.rulesInSameGroupHaveInvalidFor), api: { @@ -100,19 +114,16 @@ const dataSources = { const ui = { ruleGroup: byTestId('rule-group'), cloudRulesSourceErrors: byTestId('cloud-rulessource-errors'), - groupCollapseToggle: byTestId('group-collapse-toggle'), - ruleCollapseToggle: byTestId('collapse-toggle'), + groupCollapseToggle: byTestId(selectors.components.AlertRules.groupToggle), + ruleCollapseToggle: byTestId(selectors.components.AlertRules.toggle), rulesTable: byTestId('rules-table'), ruleRow: byTestId('row'), - expandedContent: byTestId('expanded-content'), + expandedContent: byTestId(selectors.components.AlertRules.expandedContent), rulesFilterInput: byTestId('search-query-input'), moreErrorsButton: byRole('button', { name: /more errors/ }), editCloudGroupIcon: byTestId('edit-group'), - newRuleButton: byRole('link', { name: 'New alert rule' }), - moreButton: byRole('button', { name: 'More' }), - exportButton: byRole('menuitem', { - name: /export all grafana\-managed rules/i, - }), + newRuleButton: byText(/new alert rule/i), + exportButton: byText(/export rules/i), editGroupModal: { dialog: byRole('dialog'), namespaceInput: byRole('textbox', { name: /^Namespace/ }), @@ -137,6 +148,19 @@ describe('RuleList', () => { AccessControlAction.AlertingRuleExternalWrite, ]); mocks.rulesInSameGroupHaveInvalidForMock.mockReturnValue([]); + mocks.getPluginLinkExtensionsMock.mockReturnValue({ + extensions: [ + { + pluginId: 'grafana-ml-app', + id: '1', + type: PluginExtensionTypes.link, + title: 'Run investigation', + category: 'Sift', + description: 'Run a Sift investigation for this alert', + onClick: jest.fn(), + }, + ], + }); }); afterEach(() => { @@ -376,13 +400,13 @@ describe('RuleList', () => { // expand details of an instance await userEvent.click(ui.ruleCollapseToggle.get(instanceRows![0])); - const alertDetails = byTestId('expanded-content').get(instanceRows[0]); + const alertDetails = byTestId(selectors.components.AlertRules.expandedContent).get(instanceRows[0]); expect(alertDetails).toHaveTextContent('Value2e+10'); expect(alertDetails).toHaveTextContent('messagefirst alert message'); // collapse everything again await userEvent.click(ui.ruleCollapseToggle.get(instanceRows![0])); - expect(byTestId('expanded-content').query(instanceRows[0])).not.toBeInTheDocument(); + expect(byTestId(selectors.components.AlertRules.expandedContent).query(instanceRows[0])).not.toBeInTheDocument(); await userEvent.click(ui.ruleCollapseToggle.getAll(ruleRows[1])[0]); await userEvent.click(ui.groupCollapseToggle.get(groups[1])); expect(ui.rulesTable.query()).not.toBeInTheDocument(); @@ -679,7 +703,7 @@ describe('RuleList', () => { describe('RBAC Enabled', () => { describe('Export button', () => { it('Export button should be visible when the user has alert read permissions', async () => { - grantUserPermissions([AccessControlAction.AlertingRuleRead, AccessControlAction.FoldersRead]); + grantUserPermissions([AccessControlAction.AlertingRuleRead]); mocks.getAllDataSourcesMock.mockReturnValue([]); setDataSourceSrv(new MockDataSourceSrv({})); @@ -703,7 +727,8 @@ describe('RuleList', () => { renderRuleList(); - await userEvent.click(ui.moreButton.get()); + await waitFor(() => expect(mocks.api.fetchRules).toHaveBeenCalledTimes(1)); + expect(ui.exportButton.get()).toBeInTheDocument(); }); }); diff --git a/public/app/features/alerting/unified/RuleList.tsx b/public/app/features/alerting/unified/RuleList.tsx index a36a7eccff3d0..7bb7f40830249 100644 --- a/public/app/features/alerting/unified/RuleList.tsx +++ b/public/app/features/alerting/unified/RuleList.tsx @@ -1,17 +1,16 @@ import { css } from '@emotion/css'; import React, { useCallback, useEffect, useMemo, useState } from 'react'; +import { useLocation } from 'react-router-dom'; import { useAsyncFn, useInterval } from 'react-use'; -import { GrafanaTheme2 } from '@grafana/data'; -import { Stack } from '@grafana/experimental'; -import { Button, useStyles2, withErrorBoundary } from '@grafana/ui'; +import { GrafanaTheme2, urlUtil } from '@grafana/data'; +import { Button, LinkButton, useStyles2, withErrorBoundary } from '@grafana/ui'; import { useQueryParams } from 'app/core/hooks/useQueryParams'; import { useDispatch } from 'app/types'; import { CombinedRuleNamespace } from '../../../types/unified-alerting'; -import { trackRuleListNavigation } from './Analytics'; -import { MoreActionsRuleButtons } from './MoreActionsRuleButtons'; +import { LogMessages, logInfo, trackRuleListNavigation } from './Analytics'; import { AlertingPageWrapper } from './components/AlertingPageWrapper'; import { NoRulesSplash } from './components/rules/NoRulesCTA'; import { INSTANCES_DISPLAY_LIMIT } from './components/rules/RuleDetails'; @@ -20,6 +19,7 @@ import { RuleListGroupView } from './components/rules/RuleListGroupView'; import { RuleListStateView } from './components/rules/RuleListStateView'; import { RuleStats } from './components/rules/RuleStats'; import RulesFilter from './components/rules/RulesFilter'; +import { AlertingAction, useAlertingAbility } from './hooks/useAbilities'; import { useCombinedRuleNamespaces } from './hooks/useCombinedRuleNamespaces'; import { useFilteredRules, useRulesFilter } from './hooks/useFilteredRules'; import { useUnifiedAlertingSelector } from './hooks/useUnifiedAlertingSelector'; @@ -99,6 +99,7 @@ const RuleList = withErrorBoundary( // Show splash only when we loaded all of the data sources and none of them has alerts const hasNoAlertRulesCreatedYet = allPromLoaded && allPromEmpty && promRequests.length > 0 && allRulerEmpty && allRulerLoaded; + const hasAlertRulesCreated = !hasNoAlertRulesCreatedYet; const combinedNamespaces: CombinedRuleNamespace[] = useCombinedRuleNamespaces(); const filteredNamespaces = useFilteredRules(combinedNamespaces, filterState); @@ -106,10 +107,10 @@ const RuleList = withErrorBoundary( return ( // We don't want to show the Loading... indicator for the whole page. // We show separate indicators for Grafana-managed and Cloud rules - + }> - {!hasNoAlertRulesCreatedYet && ( + {hasAlertRulesCreated && ( <>
@@ -126,14 +127,11 @@ const RuleList = withErrorBoundary( )}
- - -
)} {hasNoAlertRulesCreatedYet && } - {!hasNoAlertRulesCreatedYet && } + {hasAlertRulesCreated && }
); }, @@ -163,3 +161,27 @@ const getStyles = (theme: GrafanaTheme2) => ({ }); export default RuleList; + +export function CreateAlertButton() { + const [createRuleSupported, createRuleAllowed] = useAlertingAbility(AlertingAction.CreateAlertRule); + const [createCloudRuleSupported, createCloudRuleAllowed] = useAlertingAbility(AlertingAction.CreateExternalAlertRule); + + const location = useLocation(); + + const canCreateCloudRules = createCloudRuleSupported && createCloudRuleAllowed; + + const canCreateGrafanaRules = createRuleSupported && createRuleAllowed; + + if (canCreateGrafanaRules || canCreateCloudRules) { + return ( + logInfo(LogMessages.alertRuleFromScratch)} + > + New alert rule + + ); + } + return null; +} diff --git a/public/app/features/alerting/unified/RuleViewer.tsx b/public/app/features/alerting/unified/RuleViewer.tsx index 864d68d104e32..32064616fa992 100644 --- a/public/app/features/alerting/unified/RuleViewer.tsx +++ b/public/app/features/alerting/unified/RuleViewer.tsx @@ -1,15 +1,17 @@ import React from 'react'; -import { Disable, Enable } from 'react-enable'; -import { withErrorBoundary } from '@grafana/ui'; -import { SafeDynamicImport } from 'app/core/components/DynamicImports/SafeDynamicImport'; +import { NavModelItem } from '@grafana/data'; +import { isFetchError } from '@grafana/runtime'; +import { Alert, withErrorBoundary } from '@grafana/ui'; +import { EntityNotFound } from 'app/core/components/PageNotFound/EntityNotFound'; import { GrafanaRouteComponentProps } from 'app/core/navigation/types'; import { AlertingPageWrapper } from './components/AlertingPageWrapper'; -import { AlertingFeature } from './features'; - -const DetailViewV1 = SafeDynamicImport(() => import('./components/rule-viewer/RuleViewer.v1')); -const DetailViewV2 = SafeDynamicImport(() => import('./components/rule-viewer/v2/RuleViewer.v2')); +import { AlertRuleProvider } from './components/rule-viewer/RuleContext'; +import DetailView from './components/rule-viewer/RuleViewer'; +import { useCombinedRule } from './hooks/useCombinedRule'; +import { stringifyErrorLike } from './utils/misc'; +import { getRuleIdFromPathname, parse as parseRuleId } from './utils/rule-id'; type RuleViewerProps = GrafanaRouteComponentProps<{ id: string; @@ -17,16 +19,68 @@ type RuleViewerProps = GrafanaRouteComponentProps<{ }>; const RuleViewer = (props: RuleViewerProps): JSX.Element => { + const id = getRuleIdFromPathname(props.match.params); + + // we convert the stringified ID to a rule identifier object which contains additional + // type and source information + const identifier = React.useMemo(() => { + if (!id) { + throw new Error('Rule ID is required'); + } + + return parseRuleId(id, true); + }, [id]); + + // we then fetch the rule from the correct API endpoint(s) + const { loading, error, result: rule } = useCombinedRule({ ruleIdentifier: identifier }); + + if (error) { + return ( + + + + ); + } + + if (loading) { + return ( + + <> + + ); + } + + if (rule) { + return ( + + + + ); + } + + // if we get here assume we can't find the rule return ( - - - - - - - + + ); }; +export const defaultPageNav: NavModelItem = { + id: 'alert-rule-view', + text: '', +}; + +interface ErrorMessageProps { + error: unknown; +} + +function ErrorMessage({ error }: ErrorMessageProps) { + if (isFetchError(error) && error.status === 404) { + return ; + } + + return {stringifyErrorLike(error)}; +} + export default withErrorBoundary(RuleViewer, { style: 'page' }); diff --git a/public/app/features/alerting/unified/Silences.test.tsx b/public/app/features/alerting/unified/Silences.test.tsx index e478cb8baea31..905ed88d476c1 100644 --- a/public/app/features/alerting/unified/Silences.test.tsx +++ b/public/app/features/alerting/unified/Silences.test.tsx @@ -5,6 +5,7 @@ import { TestProvider } from 'test/helpers/TestProvider'; import { byLabelText, byPlaceholderText, byRole, byTestId, byText } from 'testing-library-selector'; import { dateTime } from '@grafana/data'; +import { selectors } from '@grafana/e2e-selectors'; import { config, locationService, setDataSourceSrv } from '@grafana/runtime'; import { contextSrv } from 'app/core/services/context_srv'; import { AlertState, MatcherOperator } from 'app/plugins/datasource/alertmanager/types'; @@ -15,6 +16,8 @@ import { SilenceState } from '../../../plugins/datasource/alertmanager/types'; import Silences from './Silences'; import { createOrUpdateSilence, fetchAlerts, fetchSilences } from './api/alertmanager'; import { grantUserPermissions, mockAlertmanagerAlert, mockDataSource, MockDataSourceSrv, mockSilence } from './mocks'; +import { AlertmanagerProvider } from './state/AlertmanagerContext'; +import { setupDataSources } from './testSetup/datasources'; import { parseMatchers } from './utils/alertmanager'; import { DataSourceType } from './utils/datasource'; @@ -37,7 +40,9 @@ const renderSilences = (location = '/alerting/silences/') => { return render( - + + + ); }; @@ -58,7 +63,7 @@ const ui = { addSilenceButton: byRole('link', { name: /add silence/i }), queryBar: byPlaceholderText('Search'), editor: { - timeRange: byLabelText('Timepicker', { exact: false }), + timeRange: byTestId(selectors.components.TimePicker.openButton), durationField: byLabelText('Duration'), durationInput: byRole('textbox', { name: /duration/i }), matchersField: byTestId('matcher'), @@ -218,7 +223,7 @@ describe('Silence edit', () => { beforeEach(() => { setUserLogged(true); - setDataSourceSrv(new MockDataSourceSrv(dataSources)); + setupDataSources(dataSources.am); }); it('Should not render createdBy if user is logged in and has a name', async () => { @@ -325,4 +330,32 @@ describe('Silence edit', () => { }, TEST_TIMEOUT ); + + it( + 'silences page should contain alertmanager parameter after creating a silence', + async () => { + const user = userEvent.setup(); + + renderSilences(`${baseUrlPath}?alertmanager=Alertmanager`); + await waitFor(() => expect(ui.editor.durationField.query()).not.toBeNull()); + + await user.type(ui.editor.matcherName.getAll()[0], 'foo'); + await user.type(ui.editor.matcherOperatorSelect.getAll()[0], '='); + await user.type(ui.editor.matcherValue.getAll()[0], 'bar'); + + await user.click(ui.editor.submit.get()); + + await waitFor(() => + expect(mocks.api.createOrUpdateSilence).toHaveBeenCalledWith( + 'Alertmanager', + expect.objectContaining({ + matchers: [{ isEqual: true, isRegex: false, name: 'foo', value: 'bar' }], + }) + ) + ); + + expect(locationService.getSearch().get('alertmanager')).toBe('Alertmanager'); + }, + TEST_TIMEOUT + ); }); diff --git a/public/app/features/alerting/unified/Silences.tsx b/public/app/features/alerting/unified/Silences.tsx index 1d4dfaf8e25c3..ec4addf133e3c 100644 --- a/public/app/features/alerting/unified/Silences.tsx +++ b/public/app/features/alerting/unified/Silences.tsx @@ -112,7 +112,7 @@ function SilencesPage() { const pageNav = useSilenceNavData(); return ( - + ); diff --git a/public/app/features/alerting/unified/TODO.md b/public/app/features/alerting/unified/TODO.md index 180125b1701f0..86e6081154802 100644 --- a/public/app/features/alerting/unified/TODO.md +++ b/public/app/features/alerting/unified/TODO.md @@ -17,7 +17,7 @@ If the item needs more rationale and you feel like a single sentence is inedequa ## Refactoring - Get rid of "+ Add new" in drop-downs : Let's see if is there a way we can make it work with ` -
+ ); }; const getStyles = (theme: GrafanaTheme2) => ({ - icon: css` - margin-right: ${theme.spacing(0.5)}; - `, - inputWidth: css` - width: 340px; - flex-grow: 0; - `, + fixMargin: css({ + marginBottom: 0, + }), + inputWidth: css({ + width: 340, + flexGrow: 0, + }), }); diff --git a/public/app/features/alerting/unified/components/bridges/DeclareIncidentButton.tsx b/public/app/features/alerting/unified/components/bridges/DeclareIncidentButton.tsx index 05bb7fe83df78..fab8db3c9d562 100644 --- a/public/app/features/alerting/unified/components/bridges/DeclareIncidentButton.tsx +++ b/public/app/features/alerting/unified/components/bridges/DeclareIncidentButton.tsx @@ -1,6 +1,6 @@ -import React, { FC } from 'react'; +import React from 'react'; -import { Button, LinkButton, Tooltip } from '@grafana/ui'; +import { Button, LinkButton, Menu, Tooltip } from '@grafana/ui'; import { usePluginBridge } from '../../hooks/usePluginBridge'; import { SupportedPlugin } from '../../types/pluginBridges'; @@ -8,11 +8,11 @@ import { createBridgeURL } from '../PluginBridge'; interface Props { title?: string; - severity?: 'minor' | 'major' | 'critical'; + severity?: 'minor' | 'major' | 'critical' | ''; url?: string; } -export const DeclareIncident: FC = ({ title = '', severity = '', url = '' }) => { +export const DeclareIncidentButton = ({ title = '', severity = '', url = '' }: Props) => { const bridgeURL = createBridgeURL(SupportedPlugin.Incident, '/incidents/declare', { title, severity, url }); const { loading, installed, settings } = usePluginBridge(SupportedPlugin.Incident); @@ -39,3 +39,21 @@ export const DeclareIncident: FC = ({ title = '', severity = '', url = '' ); }; + +export const DeclareIncidentMenuItem = ({ title = '', severity = '', url = '' }: Props) => { + const bridgeURL = createBridgeURL(SupportedPlugin.Incident, '/incidents/declare', { title, severity, url }); + + const { loading, installed, settings } = usePluginBridge(SupportedPlugin.Incident); + + return ( + <> + {loading === true && } + {installed === false && ( + + + + )} + {settings && } + + ); +}; diff --git a/public/app/features/alerting/unified/components/contact-points/ContactPoints.test.tsx b/public/app/features/alerting/unified/components/contact-points/ContactPoints.test.tsx new file mode 100644 index 0000000000000..2b6ddc72922c9 --- /dev/null +++ b/public/app/features/alerting/unified/components/contact-points/ContactPoints.test.tsx @@ -0,0 +1,377 @@ +import { render, screen, waitFor, waitForElementToBeRemoved } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; +import { noop } from 'lodash'; +import React, { PropsWithChildren } from 'react'; +import { TestProvider } from 'test/helpers/TestProvider'; + +import { selectors } from '@grafana/e2e-selectors'; +import { AlertManagerDataSourceJsonData, AlertManagerImplementation } from 'app/plugins/datasource/alertmanager/types'; +import { AccessControlAction } from 'app/types'; + +import { setupMswServer } from '../../mockApi'; +import { grantUserPermissions, mockDataSource } from '../../mocks'; +import { AlertmanagerProvider } from '../../state/AlertmanagerContext'; +import { setupDataSources } from '../../testSetup/datasources'; +import { DataSourceType } from '../../utils/datasource'; + +import ContactPoints, { ContactPoint } from './ContactPoints'; +import setupGrafanaManagedServer from './__mocks__/grafanaManagedServer'; +import setupMimirFlavoredServer, { MIMIR_DATASOURCE_UID } from './__mocks__/mimirFlavoredServer'; +import setupVanillaAlertmanagerFlavoredServer, { + VANILLA_ALERTMANAGER_DATASOURCE_UID, +} from './__mocks__/vanillaAlertmanagerServer'; +import { RouteReference } from './utils'; + +/** + * There are lots of ways in which we test our pages and components. Here's my opinionated approach to testing them. + * + * Use MSW to mock API responses, you can copy the JSON results from the network panel and use them in a __mocks__ folder. + * + * 1. Make sure we have "presentation" components we can test without mocking data, + * test these if they have some logic in them (hiding / showing things) and sad paths. + * + * 2. For testing the "container" components, check if data fetching is working as intended (you can use loading state) + * and check if we're not in an error state (although you can test for that too for sad path). + * + * 3. Write tests for the hooks we call in the "container" components + * if those have any logic or data structure transformations in them. + * + * ⚠️ Always set up the MSW server only once – MWS does not support multiple calls to setupServer(); and causes all sorts of weird issues + */ +const server = setupMswServer(); + +describe('contact points', () => { + describe('Contact points with Grafana managed alertmanager', () => { + beforeEach(() => { + grantUserPermissions([ + AccessControlAction.AlertingNotificationsRead, + AccessControlAction.AlertingNotificationsWrite, + ]); + + setupGrafanaManagedServer(server); + }); + + it('should show / hide loading states, have all actions enabled', async () => { + render( + + + , + { wrapper: TestProvider } + ); + + await waitFor(async () => { + expect(screen.getByText('Loading...')).toBeInTheDocument(); + await waitForElementToBeRemoved(screen.getByText('Loading...')); + expect(screen.queryByTestId(selectors.components.Alert.alertV2('error'))).not.toBeInTheDocument(); + }); + + expect(screen.getByText('grafana-default-email')).toBeInTheDocument(); + expect(screen.getAllByTestId('contact-point')).toHaveLength(4); + + // check for available actions – our mock 4 contact points, 1 of them is provisioned + expect(screen.getByRole('link', { name: 'add contact point' })).toBeInTheDocument(); + expect(screen.getByRole('button', { name: 'export all' })).toBeInTheDocument(); + + // 2 of them are unused by routes in the mock response + const unusedBadge = screen.getAllByLabelText('unused'); + expect(unusedBadge).toHaveLength(2); + + const viewProvisioned = screen.getByRole('link', { name: 'view-action' }); + expect(viewProvisioned).toBeInTheDocument(); + expect(viewProvisioned).not.toBeDisabled(); + + const editButtons = screen.getAllByRole('link', { name: 'edit-action' }); + expect(editButtons).toHaveLength(3); + editButtons.forEach((button) => { + expect(button).not.toBeDisabled(); + }); + + const moreActionsButtons = screen.getAllByRole('button', { name: 'more-actions' }); + expect(moreActionsButtons).toHaveLength(4); + moreActionsButtons.forEach((button) => { + expect(button).not.toBeDisabled(); + }); + }); + + it('should disable certain actions if the user has no write permissions', async () => { + grantUserPermissions([AccessControlAction.AlertingNotificationsRead]); + + render( + + + , + { wrapper: TestProvider } + ); + + // wait for loading to be done + await waitFor(async () => { + expect(screen.queryByText('Loading...')).not.toBeInTheDocument(); + }); + + // should disable create contact point + expect(screen.getByRole('link', { name: 'add contact point' })).toHaveAttribute('aria-disabled', 'true'); + + // there should be no edit buttons + expect(screen.queryAllByRole('link', { name: 'edit-action' })).toHaveLength(0); + + // there should be view buttons though + const viewButtons = screen.getAllByRole('link', { name: 'view-action' }); + expect(viewButtons).toHaveLength(4); + + // delete should be disabled in the "more" actions + const moreButtons = screen.queryAllByRole('button', { name: 'more-actions' }); + expect(moreButtons).toHaveLength(4); + + // check if all of the delete buttons are disabled + for await (const button of moreButtons) { + await userEvent.click(button); + const deleteButton = await screen.queryByRole('menuitem', { name: 'delete' }); + expect(deleteButton).toBeDisabled(); + // click outside the menu to close it otherwise we can't interact with the rest of the page + await userEvent.click(document.body); + } + + // check buttons in Notification Templates + const notificationTemplatesTab = screen.getByRole('tab', { name: 'Tab Notification Templates' }); + await userEvent.click(notificationTemplatesTab); + expect(screen.getByRole('link', { name: 'Add notification template' })).toHaveAttribute('aria-disabled', 'true'); + }); + + it('should call delete when clicked and not disabled', async () => { + const onDelete = jest.fn(); + + render(, { + wrapper, + }); + + const moreActions = screen.getByRole('button', { name: 'more-actions' }); + await userEvent.click(moreActions); + + const deleteButton = screen.getByRole('menuitem', { name: /delete/i }); + await userEvent.click(deleteButton); + + expect(onDelete).toHaveBeenCalledWith('my-contact-point'); + }); + + it('should disable edit button', async () => { + render(, { + wrapper, + }); + + const moreActions = screen.getByRole('button', { name: 'more-actions' }); + expect(moreActions).not.toBeDisabled(); + + const editAction = screen.getByTestId('edit-action'); + expect(editAction).toHaveAttribute('aria-disabled', 'true'); + }); + + it('should disable buttons when provisioned', async () => { + render(, { + wrapper, + }); + + expect(screen.getByText(/provisioned/i)).toBeInTheDocument(); + + const editAction = screen.queryByTestId('edit-action'); + expect(editAction).not.toBeInTheDocument(); + + const viewAction = screen.getByRole('link', { name: /view/i }); + expect(viewAction).toBeInTheDocument(); + + const moreActions = screen.getByRole('button', { name: 'more-actions' }); + expect(moreActions).not.toBeDisabled(); + await userEvent.click(moreActions); + + const deleteButton = screen.getByRole('menuitem', { name: /delete/i }); + expect(deleteButton).toBeDisabled(); + }); + + it('should disable delete when contact point is linked to at least one normal notification policy', async () => { + const policies: RouteReference[] = [ + { + receiver: 'my-contact-point', + route: { + type: 'normal', + }, + }, + ]; + + render(, { + wrapper, + }); + + expect(screen.getByRole('link', { name: 'is used by 1 notification policy' })).toBeInTheDocument(); + + const moreActions = screen.getByRole('button', { name: 'more-actions' }); + await userEvent.click(moreActions); + + const deleteButton = screen.getByRole('menuitem', { name: /delete/i }); + expect(deleteButton).toBeDisabled(); + }); + + it('should not disable delete when contact point is linked only to auto-generated notification policy', async () => { + const policies: RouteReference[] = [ + { + receiver: 'my-contact-point', + route: { + type: 'auto-generated', + }, + }, + ]; + + render(, { + wrapper, + }); + + const moreActions = screen.getByRole('button', { name: 'more-actions' }); + await userEvent.click(moreActions); + + const deleteButton = screen.getByRole('menuitem', { name: /delete/i }); + expect(deleteButton).not.toBeDisabled(); + }); + + it('should be able to search', async () => { + render( + + + , + { wrapper: TestProvider } + ); + + const searchInput = screen.getByRole('textbox', { name: 'search contact points' }); + await userEvent.type(searchInput, 'slack'); + expect(searchInput).toHaveValue('slack'); + + await waitFor(() => { + expect(screen.getByText('Slack with multiple channels')).toBeInTheDocument(); + expect(screen.getAllByTestId('contact-point')).toHaveLength(1); + }); + + // ⚠️ for some reason, the query params are preserved for all tests so don't forget to clear the input + const clearButton = screen.getByRole('button', { name: 'clear' }); + await userEvent.click(clearButton); + expect(searchInput).toHaveValue(''); + }); + }); + + describe('Contact points with Mimir-flavored alertmanager', () => { + beforeEach(() => { + setupMimirFlavoredServer(server); + }); + + beforeAll(() => { + grantUserPermissions([ + AccessControlAction.AlertingNotificationsExternalRead, + AccessControlAction.AlertingNotificationsExternalWrite, + ]); + setupDataSources( + mockDataSource({ + type: DataSourceType.Alertmanager, + name: MIMIR_DATASOURCE_UID, + uid: MIMIR_DATASOURCE_UID, + }) + ); + }); + + it('should show / hide loading states, have the right actions enabled', async () => { + render( + + + + + + ); + + await waitFor(async () => { + expect(screen.getByText('Loading...')).toBeInTheDocument(); + await waitForElementToBeRemoved(screen.getByText('Loading...')); + expect(screen.queryByTestId(selectors.components.Alert.alertV2('error'))).not.toBeInTheDocument(); + }); + + expect(screen.getByText('mixed')).toBeInTheDocument(); + expect(screen.getByText('some webhook')).toBeInTheDocument(); + expect(screen.getAllByTestId('contact-point')).toHaveLength(2); + + // check for available actions – export should be disabled + expect(screen.getByRole('link', { name: 'add contact point' })).toBeInTheDocument(); + expect(screen.queryByRole('button', { name: 'export all' })).not.toBeInTheDocument(); + + // 1 of them is used by a route in the mock response + const unusedBadge = screen.getAllByLabelText('unused'); + expect(unusedBadge).toHaveLength(1); + + const editButtons = screen.getAllByRole('link', { name: 'edit-action' }); + expect(editButtons).toHaveLength(2); + editButtons.forEach((button) => { + expect(button).not.toBeDisabled(); + }); + + const moreActionsButtons = screen.getAllByRole('button', { name: 'more-actions' }); + expect(moreActionsButtons).toHaveLength(2); + moreActionsButtons.forEach((button) => { + expect(button).not.toBeDisabled(); + }); + }); + }); + + describe('Vanilla Alertmanager ', () => { + beforeEach(() => { + setupVanillaAlertmanagerFlavoredServer(server); + }); + + beforeAll(() => { + grantUserPermissions([ + AccessControlAction.AlertingNotificationsExternalRead, + AccessControlAction.AlertingNotificationsExternalWrite, + ]); + + const alertManager = mockDataSource({ + name: VANILLA_ALERTMANAGER_DATASOURCE_UID, + uid: VANILLA_ALERTMANAGER_DATASOURCE_UID, + type: DataSourceType.Alertmanager, + jsonData: { + implementation: AlertManagerImplementation.prometheus, + handleGrafanaManagedAlerts: true, + }, + }); + + setupDataSources(alertManager); + }); + + it("should not allow any editing because it's not supported", async () => { + render( + + + + + + ); + + await waitFor(async () => { + expect(screen.getByText('Loading...')).toBeInTheDocument(); + await waitForElementToBeRemoved(screen.getByText('Loading...')); + expect(screen.queryByTestId(selectors.components.Alert.alertV2('error'))).not.toBeInTheDocument(); + }); + + expect(screen.queryByRole('link', { name: 'add contact point' })).not.toBeInTheDocument(); + + const viewProvisioned = screen.getByRole('link', { name: 'view-action' }); + expect(viewProvisioned).toBeInTheDocument(); + expect(viewProvisioned).not.toBeDisabled(); + + // check buttons in Notification Templates + const notificationTemplatesTab = screen.getByRole('tab', { name: 'Tab Notification Templates' }); + await userEvent.click(notificationTemplatesTab); + expect(screen.queryByRole('link', { name: 'Add notification template' })).not.toBeInTheDocument(); + }); + }); +}); + +const wrapper = ({ children }: PropsWithChildren) => ( + + {children} + +); diff --git a/public/app/features/alerting/unified/components/contact-points/ContactPoints.tsx b/public/app/features/alerting/unified/components/contact-points/ContactPoints.tsx new file mode 100644 index 0000000000000..41fc2e4c76cdf --- /dev/null +++ b/public/app/features/alerting/unified/components/contact-points/ContactPoints.tsx @@ -0,0 +1,692 @@ +import { css } from '@emotion/css'; +import uFuzzy from '@leeoniya/ufuzzy'; +import { SerializedError } from '@reduxjs/toolkit'; +import { groupBy, size, uniq, upperFirst } from 'lodash'; +import pluralize from 'pluralize'; +import React, { Fragment, ReactNode, useCallback, useMemo, useState } from 'react'; +import { Link } from 'react-router-dom'; +import { useToggle } from 'react-use'; + +import { dateTime, GrafanaTheme2 } from '@grafana/data'; +import { + Alert, + Button, + Dropdown, + Icon, + LinkButton, + LoadingPlaceholder, + Menu, + Pagination, + Stack, + Tab, + TabContent, + TabsBar, + Text, + Tooltip, + useStyles2, +} from '@grafana/ui'; +import ConditionalWrap from 'app/features/alerting/unified/components/ConditionalWrap'; +import { receiverTypeNames } from 'app/plugins/datasource/alertmanager/consts'; +import { GrafanaManagedReceiverConfig } from 'app/plugins/datasource/alertmanager/types'; +import { GrafanaNotifierType, NotifierStatus } from 'app/types/alerting'; + +import { AlertmanagerAction, useAlertmanagerAbility } from '../../hooks/useAbilities'; +import { usePagination } from '../../hooks/usePagination'; +import { useURLSearchParams } from '../../hooks/useURLSearchParams'; +import { useAlertmanager } from '../../state/AlertmanagerContext'; +import { INTEGRATION_ICONS } from '../../types/contact-points'; +import { GRAFANA_RULES_SOURCE_NAME } from '../../utils/datasource'; +import { createUrl } from '../../utils/url'; +import { GrafanaAlertmanagerDeliveryWarning } from '../GrafanaAlertmanagerDeliveryWarning'; +import { MetaText } from '../MetaText'; +import MoreButton from '../MoreButton'; +import { ProvisioningBadge } from '../Provisioning'; +import { Spacer } from '../Spacer'; +import { Strong } from '../Strong'; +import { GrafanaReceiverExporter } from '../export/GrafanaReceiverExporter'; +import { GrafanaReceiversExporter } from '../export/GrafanaReceiversExporter'; +import { ReceiverMetadataBadge } from '../receivers/grafanaAppReceivers/ReceiverMetadataBadge'; +import { ReceiverPluginMetadata } from '../receivers/grafanaAppReceivers/useReceiversMetadata'; + +import { NotificationTemplates } from './NotificationTemplates'; +import { ContactPointsFilter } from './components/ContactPointsFilter'; +import { GlobalConfigAlert } from './components/GlobalConfigAlert'; +import { useDeleteContactPointModal } from './components/Modals'; +import { UnusedContactPointBadge } from './components/UnusedBadge'; +import { + RECEIVER_META_KEY, + RECEIVER_PLUGIN_META_KEY, + RECEIVER_STATUS_KEY, + useContactPointsWithStatus, + useDeleteContactPoint, +} from './useContactPoints'; +import { + ContactPointWithMetadata, + getReceiverDescription, + isProvisioned, + ReceiverConfigWithMetadata, + RouteReference, +} from './utils'; + +enum ActiveTab { + ContactPoints, + NotificationTemplates, +} + +const DEFAULT_PAGE_SIZE = 10; + +const ContactPoints = () => { + const { selectedAlertmanager } = useAlertmanager(); + // TODO hook up to query params + const [activeTab, setActiveTab] = useState(ActiveTab.ContactPoints); + let { isLoading, error, contactPoints } = useContactPointsWithStatus(); + const { deleteTrigger, updateAlertmanagerState } = useDeleteContactPoint(selectedAlertmanager!); + const [addContactPointSupported, addContactPointAllowed] = useAlertmanagerAbility( + AlertmanagerAction.CreateContactPoint + ); + const [exportContactPointsSupported, exportContactPointsAllowed] = useAlertmanagerAbility( + AlertmanagerAction.ExportContactPoint + ); + const [createTemplateSupported, createTemplateAllowed] = useAlertmanagerAbility( + AlertmanagerAction.CreateNotificationTemplate + ); + + const [DeleteModal, showDeleteModal] = useDeleteContactPointModal(deleteTrigger, updateAlertmanagerState.isLoading); + const [ExportDrawer, showExportDrawer] = useExportContactPoint(); + + const [searchParams] = useURLSearchParams(); + const { search } = getContactPointsFilters(searchParams); + + const showingContactPoints = activeTab === ActiveTab.ContactPoints; + const showNotificationTemplates = activeTab === ActiveTab.NotificationTemplates; + + if (error) { + // TODO fix this type casting, when error comes from "getContactPointsStatus" it probably won't be a SerializedError + return {(error as SerializedError).message}; + } + + const isGrafanaManagedAlertmanager = selectedAlertmanager === GRAFANA_RULES_SOURCE_NAME; + + return ( + <> + + + + + setActiveTab(ActiveTab.ContactPoints)} + /> + setActiveTab(ActiveTab.NotificationTemplates)} + /> + + + + <> + {isLoading && } + {/* Contact Points tab */} + {showingContactPoints && ( + <> + {error ? ( + {String(error)} + ) : ( + <> + {/* TODO we can add some additional info here with a ToggleTip */} + + + + + {addContactPointSupported && ( + + Add contact point + + )} + {exportContactPointsSupported && ( + + )} + + + showDeleteModal(name)} + disabled={updateAlertmanagerState.isLoading} + /> + {/* Grafana manager Alertmanager does not support global config, Mimir and Cortex do */} + {!isGrafanaManagedAlertmanager && } + + )} + + )} + {/* Notification Templates tab */} + {showNotificationTemplates && ( + <> + + + Create notification templates to customize your notifications. + + + {createTemplateSupported && ( + + Add notification template + + )} + + + + )} + + + + + {DeleteModal} + {ExportDrawer} + + ); +}; + +interface ContactPointsListProps { + contactPoints: ContactPointWithMetadata[]; + search?: string; + disabled?: boolean; + onDelete: (name: string) => void; + pageSize?: number; +} + +const ContactPointsList = ({ + contactPoints, + disabled = false, + search, + pageSize = DEFAULT_PAGE_SIZE, + onDelete, +}: ContactPointsListProps) => { + const searchResults = useContactPointsSearch(contactPoints, search); + const { page, pageItems, numberOfPages, onPageChange } = usePagination(searchResults, 1, pageSize); + + return ( + <> + {pageItems.map((contactPoint, index) => { + const provisioned = isProvisioned(contactPoint); + const policies = contactPoint.policies ?? []; + const key = `${contactPoint.name}-${index}`; + + return ( + + ); + })} + + + ); +}; + +const fuzzyFinder = new uFuzzy({ + intraMode: 1, + intraIns: 1, + intraSub: 1, + intraDel: 1, + intraTrn: 1, +}); + +// let's search in two different haystacks, the name of the contact point and the type of the receiver(s) +function useContactPointsSearch( + contactPoints: ContactPointWithMetadata[], + search?: string +): ContactPointWithMetadata[] { + const nameHaystack = useMemo(() => { + return contactPoints.map((contactPoint) => contactPoint.name); + }, [contactPoints]); + + const typeHaystack = useMemo(() => { + return contactPoints.map((contactPoint) => + // we're using the resolved metadata key here instead of the "type" property – ex. we alias "teams" to "microsoft teams" + contactPoint.grafana_managed_receiver_configs.map((receiver) => receiver[RECEIVER_META_KEY].name).join(' ') + ); + }, [contactPoints]); + + if (!search) { + return contactPoints; + } + + const nameHits = fuzzyFinder.filter(nameHaystack, search) ?? []; + const typeHits = fuzzyFinder.filter(typeHaystack, search) ?? []; + + const hits = [...nameHits, ...typeHits]; + + return uniq(hits).map((id) => contactPoints[id]) ?? []; +} + +interface ContactPointProps { + name: string; + disabled?: boolean; + provisioned?: boolean; + receivers: ReceiverConfigWithMetadata[]; + policies?: RouteReference[]; + onDelete: (name: string) => void; +} + +export const ContactPoint = ({ + name, + disabled = false, + provisioned = false, + receivers, + policies = [], + onDelete, +}: ContactPointProps) => { + const styles = useStyles2(getStyles); + + // TODO probably not the best way to figure out if we want to show either only the summary or full metadata for the receivers? + const showFullMetadata = receivers.some((receiver) => Boolean(receiver[RECEIVER_STATUS_KEY])); + + return ( +
+ + + {showFullMetadata ? ( +
+ {receivers.map((receiver, index) => { + const diagnostics = receiver[RECEIVER_STATUS_KEY]; + const metadata = receiver[RECEIVER_META_KEY]; + const sendingResolved = !Boolean(receiver.disableResolveMessage); + const pluginMetadata = receiver[RECEIVER_PLUGIN_META_KEY]; + const key = metadata.name + index; + + return ( + + ); + })} +
+ ) : ( +
+ +
+ )} +
+
+ ); +}; + +interface ContactPointHeaderProps { + name: string; + disabled?: boolean; + provisioned?: boolean; + policies?: RouteReference[]; + onDelete: (name: string) => void; +} + +const ContactPointHeader = (props: ContactPointHeaderProps) => { + const { name, disabled = false, provisioned = false, policies = [], onDelete } = props; + const styles = useStyles2(getStyles); + + const [exportSupported, exportAllowed] = useAlertmanagerAbility(AlertmanagerAction.ExportContactPoint); + const [editSupported, editAllowed] = useAlertmanagerAbility(AlertmanagerAction.UpdateContactPoint); + const [deleteSupported, deleteAllowed] = useAlertmanagerAbility(AlertmanagerAction.UpdateContactPoint); + + const [ExportDrawer, openExportDrawer] = useExportContactPoint(); + + const numberOfPolicies = policies.length; + const isReferencedByAnyPolicy = numberOfPolicies > 0; + const isReferencedByRegularPolicies = policies.some((ref) => ref.route.type !== 'auto-generated'); + + const canEdit = editSupported && editAllowed && !provisioned; + const canDelete = deleteSupported && deleteAllowed && !provisioned && !isReferencedByRegularPolicies; + + const menuActions: JSX.Element[] = []; + + if (exportSupported) { + menuActions.push( + + openExportDrawer(name)} + /> + + + ); + } + + if (deleteSupported) { + menuActions.push( + ( + + {children} + + )} + > + onDelete(name)} + /> + + ); + } + + return ( +
+ + + + {name} + + + {isReferencedByAnyPolicy && ( + + + is used by {numberOfPolicies} {pluralize('notification policy', numberOfPolicies)} + + + )} + {provisioned && } + {!isReferencedByAnyPolicy && } + + + {canEdit ? 'Edit' : 'View'} + + {menuActions.length > 0 && ( + {menuActions}}> + + + )} + + {ExportDrawer} +
+ ); +}; + +interface ContactPointReceiverProps { + name: string; + type: GrafanaNotifierType | string; + description?: ReactNode; + sendingResolved?: boolean; + diagnostics?: NotifierStatus; + pluginMetadata?: ReceiverPluginMetadata; +} + +const ContactPointReceiver = (props: ContactPointReceiverProps) => { + const { name, type, description, diagnostics, pluginMetadata, sendingResolved = true } = props; + const styles = useStyles2(getStyles); + + const hasMetadata = diagnostics !== undefined; + + return ( +
+ + + {hasMetadata && } + +
+ ); +}; + +export interface ContactPointReceiverTitleRowProps { + name: string; + type: GrafanaNotifierType | string; + description?: ReactNode; + pluginMetadata?: ReceiverPluginMetadata; +} + +export function ContactPointReceiverTitleRow(props: ContactPointReceiverTitleRowProps) { + const { name, type, description, pluginMetadata } = props; + + const iconName = INTEGRATION_ICONS[type]; + + return ( + + + {iconName && } + {pluginMetadata ? ( + + ) : ( + + {name} + + )} + + {description && ( + + {description} + + )} + + ); +} + +interface ContactPointReceiverMetadata { + sendingResolved: boolean; + diagnostics: NotifierStatus; +} + +type ContactPointReceiverSummaryProps = { + receivers: GrafanaManagedReceiverConfig[]; +}; + +/** + * This summary is used when we're dealing with non-Grafana managed alertmanager since they + * don't have any metadata worth showing other than a summary of what types are configured for the contact point + */ +export const ContactPointReceiverSummary = ({ receivers }: ContactPointReceiverSummaryProps) => { + const countByType = groupBy(receivers, (receiver) => receiver.type); + + return ( + + + {Object.entries(countByType).map(([type, receivers], index) => { + const iconName = INTEGRATION_ICONS[type]; + const receiverName = receiverTypeNames[type] ?? upperFirst(type); + const isLastItem = size(countByType) - 1 === index; + + return ( + + + {iconName && } + + {receiverName} + {receivers.length > 1 && <> ({receivers.length})} + + + {!isLastItem && '⋅'} + + ); + })} + + + ); +}; + +const ContactPointReceiverMetadataRow = ({ diagnostics, sendingResolved }: ContactPointReceiverMetadata) => { + const styles = useStyles2(getStyles); + + const failedToSend = Boolean(diagnostics.lastNotifyAttemptError); + const lastDeliveryAttempt = dateTime(diagnostics.lastNotifyAttempt); + const lastDeliveryAttemptDuration = diagnostics.lastNotifyAttemptDuration; + const hasDeliveryAttempt = lastDeliveryAttempt.isValid(); + + return ( +
+ + {/* this is shown when the last delivery failed – we don't show any additional metadata */} + {failedToSend ? ( + <> + + + Last delivery attempt failed + + + + ) : ( + <> + {/* this is shown when we have a last delivery attempt */} + {hasDeliveryAttempt && ( + <> + + Last delivery attempt{' '} + + + {lastDeliveryAttempt.locale('en').fromNow()} + + + + + took {lastDeliveryAttemptDuration} + + + )} + {/* when we have no last delivery attempt */} + {!hasDeliveryAttempt && No delivery attempts} + {/* this is only shown for contact points that only want "firing" updates */} + {!sendingResolved && ( + + Delivering only firing notifications + + )} + + )} + +
+ ); +}; + +const ALL_CONTACT_POINTS = Symbol('all contact points'); + +type ExportProps = [JSX.Element | null, (receiver: string | typeof ALL_CONTACT_POINTS) => void]; + +const useExportContactPoint = (): ExportProps => { + const [receiverName, setReceiverName] = useState(null); + const [isExportDrawerOpen, toggleShowExportDrawer] = useToggle(false); + const [decryptSecretsSupported, decryptSecretsAllowed] = useAlertmanagerAbility(AlertmanagerAction.DecryptSecrets); + + const canReadSecrets = decryptSecretsSupported && decryptSecretsAllowed; + + const handleClose = useCallback(() => { + setReceiverName(null); + toggleShowExportDrawer(false); + }, [toggleShowExportDrawer]); + + const handleOpen = (receiverName: string | typeof ALL_CONTACT_POINTS) => { + setReceiverName(receiverName); + toggleShowExportDrawer(true); + }; + + const drawer = useMemo(() => { + if (!receiverName || !isExportDrawerOpen) { + return null; + } + + if (receiverName === ALL_CONTACT_POINTS) { + // use this drawer when we want to export all contact points + return ; + } else { + // use this one for exporting a single contact point + return ; + } + }, [canReadSecrets, isExportDrawerOpen, handleClose, receiverName]); + + return [drawer, handleOpen]; +}; + +const getContactPointsFilters = (searchParams: URLSearchParams) => ({ + search: searchParams.get('search') ?? undefined, +}); + +const getStyles = (theme: GrafanaTheme2) => ({ + contactPointWrapper: css({ + borderRadius: `${theme.shape.radius.default}`, + border: `solid 1px ${theme.colors.border.weak}`, + borderBottom: 'none', + }), + integrationWrapper: css({ + position: 'relative', + + background: `${theme.colors.background.primary}`, + padding: `${theme.spacing(1)} ${theme.spacing(1.5)}`, + + borderBottom: `solid 1px ${theme.colors.border.weak}`, + }), + headerWrapper: css({ + background: `${theme.colors.background.secondary}`, + padding: `${theme.spacing(1)} ${theme.spacing(1.5)}`, + + borderBottom: `solid 1px ${theme.colors.border.weak}`, + borderTopLeftRadius: `${theme.shape.radius.default}`, + borderTopRightRadius: `${theme.shape.radius.default}`, + }), + metadataRow: css({ + borderBottomLeftRadius: `${theme.shape.radius.default}`, + borderBottomRightRadius: `${theme.shape.radius.default}`, + }), +}); + +export default ContactPoints; diff --git a/public/app/features/alerting/unified/components/contact-points/ContactPoints.v1.test.tsx b/public/app/features/alerting/unified/components/contact-points/ContactPoints.v1.test.tsx deleted file mode 100644 index c16a2be72d6b6..0000000000000 --- a/public/app/features/alerting/unified/components/contact-points/ContactPoints.v1.test.tsx +++ /dev/null @@ -1,699 +0,0 @@ -import { render, waitFor, within, screen } from '@testing-library/react'; -import userEvent from '@testing-library/user-event'; -import React from 'react'; -import { TestProvider } from 'test/helpers/TestProvider'; -import { selectOptionInTest } from 'test/helpers/selectOptionInTest'; -import { byLabelText, byPlaceholderText, byRole, byTestId, byText } from 'testing-library-selector'; - -import { locationService, setDataSourceSrv } from '@grafana/runtime'; -import { interceptLinkClicks } from 'app/core/navigation/patch/interceptLinkClicks'; -import { contextSrv } from 'app/core/services/context_srv'; -import store from 'app/core/store'; -import { - AlertmanagerChoice, - AlertManagerDataSourceJsonData, - AlertManagerImplementation, -} from 'app/plugins/datasource/alertmanager/types'; -import { AccessControlAction, ContactPointsState } from 'app/types'; - -import 'whatwg-fetch'; -import 'core-js/stable/structured-clone'; - -import { fetchAlertManagerConfig, fetchStatus, testReceivers, updateAlertManagerConfig } from '../../api/alertmanager'; -import { AlertmanagersChoiceResponse } from '../../api/alertmanagerApi'; -import { discoverAlertmanagerFeatures } from '../../api/buildInfo'; -import { fetchNotifiers } from '../../api/grafana'; -import * as receiversApi from '../../api/receiversApi'; -import * as grafanaApp from '../../components/receivers/grafanaAppReceivers/grafanaApp'; -import { mockApi, setupMswServer } from '../../mockApi'; -import { - grantUserPermissions, - mockDataSource, - MockDataSourceSrv, - onCallPluginMetaMock, - someCloudAlertManagerConfig, - someCloudAlertManagerStatus, - someGrafanaAlertManagerConfig, -} from '../../mocks'; -import { mockAlertmanagerChoiceResponse } from '../../mocks/alertmanagerApi'; -import { grafanaNotifiersMock } from '../../mocks/grafana-notifiers'; -import { AlertmanagerProvider } from '../../state/AlertmanagerContext'; -import { getAllDataSources } from '../../utils/config'; -import { ALERTMANAGER_NAME_LOCAL_STORAGE_KEY, ALERTMANAGER_NAME_QUERY_KEY } from '../../utils/constants'; -import { DataSourceType, GRAFANA_RULES_SOURCE_NAME } from '../../utils/datasource'; - -import Receivers from './ContactPoints.v1'; - -jest.mock('../../api/alertmanager'); -jest.mock('../../api/grafana'); -jest.mock('../../utils/config'); -jest.mock('app/core/services/context_srv'); -jest.mock('../../api/buildInfo'); - -const mocks = { - getAllDataSources: jest.mocked(getAllDataSources), - - api: { - fetchConfig: jest.mocked(fetchAlertManagerConfig), - fetchStatus: jest.mocked(fetchStatus), - updateConfig: jest.mocked(updateAlertManagerConfig), - fetchNotifiers: jest.mocked(fetchNotifiers), - testReceivers: jest.mocked(testReceivers), - discoverAlertmanagerFeatures: jest.mocked(discoverAlertmanagerFeatures), - }, - hooks: { - useGetContactPointsState: jest.spyOn(receiversApi, 'useGetContactPointsState'), - }, - contextSrv: jest.mocked(contextSrv), -}; - -const alertmanagerChoiceMockedResponse: AlertmanagersChoiceResponse = { - alertmanagersChoice: AlertmanagerChoice.Internal, - numExternalAlertmanagers: 0, -}; - -const dataSources = { - alertManager: mockDataSource({ - name: 'CloudManager', - type: DataSourceType.Alertmanager, - }), - promAlertManager: mockDataSource({ - name: 'PromManager', - type: DataSourceType.Alertmanager, - jsonData: { - implementation: AlertManagerImplementation.prometheus, - }, - }), -}; - -const renderReceivers = (alertManagerSourceName?: string) => { - locationService.push('/alerting/notifications'); - - return render( - - - - - - ); -}; - -const ui = { - newContactPointButton: byRole('link', { name: /add contact point/i }), - saveContactButton: byRole('button', { name: /save contact point/i }), - newContactPointIntegrationButton: byRole('button', { name: /add contact point integration/i }), - testContactPointButton: byRole('button', { name: /Test/ }), - testContactPointModal: byRole('heading', { name: /test contact point/i }), - customContactPointOption: byRole('radio', { name: /custom/i }), - contactPointAnnotationSelect: (idx: number) => byTestId(`annotation-key-${idx}`), - contactPointAnnotationValue: (idx: number) => byTestId(`annotation-value-${idx}`), - contactPointLabelKey: (idx: number) => byTestId(`label-key-${idx}`), - contactPointLabelValue: (idx: number) => byTestId(`label-value-${idx}`), - testContactPoint: byRole('button', { name: /send test notification/i }), - cancelButton: byTestId('cancel-button'), - - receiversTable: byTestId('dynamic-table'), - templatesTable: byTestId('templates-table'), - alertManagerPicker: byTestId('alertmanager-picker'), - - channelFormContainer: byTestId('item-container'), - - contactPointsCollapseToggle: byTestId('collapse-toggle'), - - inputs: { - name: byPlaceholderText('Name'), - email: { - addresses: byLabelText(/Addresses/), - toEmails: byLabelText(/To/), - }, - hipchat: { - url: byLabelText('Hip Chat Url'), - apiKey: byLabelText('API Key'), - }, - slack: { - webhookURL: byLabelText(/Webhook URL/i), - }, - webhook: { - URL: byLabelText(/The endpoint to send HTTP POST requests to/i), - }, - }, -}; - -const clickSelectOption = async (selectElement: HTMLElement, optionText: string): Promise => { - await userEvent.click(byRole('combobox').get(selectElement)); - await selectOptionInTest(selectElement, optionText); -}; - -document.addEventListener('click', interceptLinkClicks); -const emptyContactPointsState: ContactPointsState = { receivers: {}, errorCount: 0 }; - -const useGetGrafanaReceiverTypeCheckerMock = jest.spyOn(grafanaApp, 'useGetGrafanaReceiverTypeChecker'); - -const server = setupMswServer(); - -describe('Receivers', () => { - beforeEach(() => { - server.resetHandlers(); - jest.resetAllMocks(); - - mockApi(server).grafanaNotifiers(grafanaNotifiersMock); - mockApi(server).plugins.getPluginSettings(onCallPluginMetaMock); - - useGetGrafanaReceiverTypeCheckerMock.mockReturnValue(() => undefined); - mocks.getAllDataSources.mockReturnValue(Object.values(dataSources)); - mocks.api.fetchNotifiers.mockResolvedValue(grafanaNotifiersMock); - mocks.api.discoverAlertmanagerFeatures.mockResolvedValue({ lazyConfigInit: false }); - mocks.hooks.useGetContactPointsState.mockReturnValue(emptyContactPointsState); - setDataSourceSrv(new MockDataSourceSrv(dataSources)); - - store.delete(ALERTMANAGER_NAME_LOCAL_STORAGE_KEY); - - grantUserPermissions([ - AccessControlAction.AlertingNotificationsRead, - AccessControlAction.AlertingNotificationsWrite, - AccessControlAction.AlertingNotificationsExternalRead, - AccessControlAction.AlertingNotificationsExternalWrite, - ]); - }); - - it('Template and receiver tables are rendered, alertmanager can be selected, no notification errors', async () => { - mockAlertmanagerChoiceResponse(server, alertmanagerChoiceMockedResponse); - mocks.api.fetchConfig.mockImplementation((name) => - Promise.resolve(name === GRAFANA_RULES_SOURCE_NAME ? someGrafanaAlertManagerConfig : someCloudAlertManagerConfig) - ); - renderReceivers(); - - // check that by default grafana templates & receivers are fetched rendered in appropriate tables - await ui.receiversTable.find(); - let templatesTable = await ui.templatesTable.find(); - let templateRows = templatesTable.querySelectorAll('tbody tr'); - expect(templateRows).toHaveLength(3); - expect(templateRows[0]).toHaveTextContent('first template'); - expect(templateRows[1]).toHaveTextContent('second template'); - expect(templateRows[2]).toHaveTextContent('third template'); - let receiverRows = within(screen.getByTestId('dynamic-table')).getAllByTestId('row'); - expect(receiverRows[0]).toHaveTextContent('default'); - expect(receiverRows[1]).toHaveTextContent('critical'); - expect(receiverRows).toHaveLength(2); - - expect(mocks.api.fetchConfig).toHaveBeenCalledTimes(1); - expect(mocks.api.fetchConfig).toHaveBeenCalledWith(GRAFANA_RULES_SOURCE_NAME); - expect(mocks.api.fetchNotifiers).toHaveBeenCalledTimes(1); - expect(locationService.getSearchObject()[ALERTMANAGER_NAME_QUERY_KEY]).toEqual(undefined); - }); - - it('Grafana receiver can be tested', async () => { - mockAlertmanagerChoiceResponse(server, alertmanagerChoiceMockedResponse); - - mocks.api.fetchConfig.mockResolvedValue(someGrafanaAlertManagerConfig); - - renderReceivers(); - - // go to new contact point page - await userEvent.click(await ui.newContactPointButton.find()); - - await byRole('heading', { name: /create contact point/i }).find(); - - expect(locationService.getLocation().pathname).toEqual('/alerting/notifications/receivers/new'); - - // type in a name for the new receiver - await userEvent.type(ui.inputs.name.get(), 'my new receiver'); - - // enter some email - const email = ui.inputs.email.addresses.get(); - await userEvent.clear(email); - await userEvent.type(email, 'tester@grafana.com'); - - // try to test the contact point - await userEvent.click(await ui.testContactPointButton.find()); - - await waitFor(() => expect(ui.testContactPointModal.get()).toBeInTheDocument(), { timeout: 1000 }); - await userEvent.click(ui.customContactPointOption.get()); - - // enter custom annotations and labels - await userEvent.type(screen.getByPlaceholderText('Enter a description...'), 'Test contact point'); - await userEvent.type(ui.contactPointLabelKey(0).get(), 'foo'); - await userEvent.type(ui.contactPointLabelValue(0).get(), 'bar'); - await userEvent.click(ui.testContactPoint.get()); - - await waitFor(() => expect(mocks.api.testReceivers).toHaveBeenCalled()); - - expect(mocks.api.testReceivers).toHaveBeenCalledWith( - 'grafana', - [ - { - grafana_managed_receiver_configs: [ - { - disableResolveMessage: false, - name: 'test', - secureSettings: {}, - settings: { addresses: 'tester@grafana.com', singleEmail: false }, - type: 'email', - }, - ], - name: 'test', - }, - ], - { annotations: { description: 'Test contact point' }, labels: { foo: 'bar' } } - ); - }); - - it('Grafana receiver can be created', async () => { - mockAlertmanagerChoiceResponse(server, alertmanagerChoiceMockedResponse); - - mocks.api.fetchConfig.mockResolvedValue(someGrafanaAlertManagerConfig); - mocks.api.updateConfig.mockResolvedValue(); - renderReceivers(); - - // go to new contact point page - await userEvent.click(await ui.newContactPointButton.find()); - - await byRole('heading', { name: /create contact point/i }).find(); - expect(locationService.getLocation().pathname).toEqual('/alerting/notifications/receivers/new'); - - // type in a name for the new receiver - await userEvent.type(byPlaceholderText('Name').get(), 'my new receiver'); - - // check that default email form is rendered - await ui.inputs.email.addresses.find(); - - // select hipchat - await clickSelectOption(byTestId('items.0.type').get(), 'HipChat'); - - // check that email options are gone and hipchat options appear - expect(ui.inputs.email.addresses.query()).not.toBeInTheDocument(); - - const urlInput = ui.inputs.hipchat.url.get(); - const apiKeyInput = ui.inputs.hipchat.apiKey.get(); - - await userEvent.type(urlInput, 'http://hipchat'); - await userEvent.type(apiKeyInput, 'foobarbaz'); - - await userEvent.click(await ui.saveContactButton.find()); - - // see that we're back to main page and proper api calls have been made - await ui.receiversTable.find(); - expect(mocks.api.updateConfig).toHaveBeenCalledTimes(1); - expect(mocks.api.fetchConfig).toHaveBeenCalledTimes(2); - expect(locationService.getLocation().pathname).toEqual('/alerting/notifications'); - expect(mocks.api.updateConfig).toHaveBeenLastCalledWith(GRAFANA_RULES_SOURCE_NAME, { - ...someGrafanaAlertManagerConfig, - alertmanager_config: { - ...someGrafanaAlertManagerConfig.alertmanager_config, - receivers: [ - ...(someGrafanaAlertManagerConfig.alertmanager_config.receivers ?? []), - { - name: 'my new receiver', - grafana_managed_receiver_configs: [ - { - disableResolveMessage: false, - name: 'my new receiver', - secureSettings: {}, - settings: { - apiKey: 'foobarbaz', - url: 'http://hipchat', - }, - type: 'hipchat', - }, - ], - }, - ], - }, - }); - }); - - it('Hides create contact point button for users without permission', async () => { - mockAlertmanagerChoiceResponse(server, alertmanagerChoiceMockedResponse); - - mocks.api.fetchConfig.mockResolvedValue(someGrafanaAlertManagerConfig); - mocks.api.updateConfig.mockResolvedValue(); - grantUserPermissions([ - AccessControlAction.AlertingNotificationsRead, - AccessControlAction.AlertingNotificationsExternalRead, - ]); - mocks.hooks.useGetContactPointsState.mockReturnValue(emptyContactPointsState); - renderReceivers(); - await ui.receiversTable.find(); - - expect(ui.newContactPointButton.query()).not.toBeInTheDocument(); - }); - - it('Cloud alertmanager receiver can be edited', async () => { - mockAlertmanagerChoiceResponse(server, alertmanagerChoiceMockedResponse); - - mocks.api.fetchConfig.mockResolvedValue(someCloudAlertManagerConfig); - mocks.api.updateConfig.mockResolvedValue(); - renderReceivers('CloudManager'); - - // click edit button for the receiver - await ui.receiversTable.find(); - const receiverRows = within(screen.getByTestId('dynamic-table')).getAllByTestId('row'); - expect(receiverRows[0]).toHaveTextContent('cloud-receiver'); - await userEvent.click(byTestId('edit').get(receiverRows[0])); - - // check that form is open - await byRole('heading', { name: /update contact point/i }).find(); - expect(locationService.getLocation().pathname).toEqual('/alerting/notifications/receivers/cloud-receiver/edit'); - expect(ui.channelFormContainer.queryAll()).toHaveLength(2); - - // delete the email channel - expect(ui.channelFormContainer.queryAll()).toHaveLength(2); - await userEvent.click(byTestId('items.0.delete-button').get()); - expect(ui.channelFormContainer.queryAll()).toHaveLength(1); - - // modify webhook url - const slackContainer = ui.channelFormContainer.get(); - await userEvent.click(byText('Optional Slack settings').get(slackContainer)); - await userEvent.type(ui.inputs.slack.webhookURL.get(slackContainer), 'http://newgreaturl'); - - // add confirm button to action - await userEvent.click(byText(/Actions \(1\)/i).get(slackContainer)); - await userEvent.click(await byTestId('items.1.settings.actions.0.confirm.add-button').find()); - const confirmSubform = byTestId('items.1.settings.actions.0.confirm.container').get(); - await userEvent.type(byLabelText('Text').get(confirmSubform), 'confirm this'); - - // delete a field - await userEvent.click(byText(/Fields \(2\)/i).get(slackContainer)); - await userEvent.click(byTestId('items.1.settings.fields.0.delete-button').get()); - byText(/Fields \(1\)/i).get(slackContainer); - - // add another channel - await userEvent.click(ui.newContactPointIntegrationButton.get()); - await clickSelectOption(await byTestId('items.2.type').find(), 'Webhook'); - await userEvent.type(await ui.inputs.webhook.URL.find(), 'http://webhookurl'); - - await userEvent.click(ui.saveContactButton.get()); - - // see that we're back to main page and proper api calls have been made - await ui.receiversTable.find(); - expect(mocks.api.updateConfig).toHaveBeenCalledTimes(1); - expect(mocks.api.fetchConfig).toHaveBeenCalledTimes(2); - - expect(locationService.getLocation().pathname).toEqual('/alerting/notifications'); - expect(mocks.api.updateConfig).toHaveBeenLastCalledWith('CloudManager', { - ...someCloudAlertManagerConfig, - alertmanager_config: { - ...someCloudAlertManagerConfig.alertmanager_config, - receivers: [ - { - name: 'cloud-receiver', - slack_configs: [ - { - actions: [ - { - confirm: { - text: 'confirm this', - }, - text: 'action1text', - type: 'action1type', - url: 'http://action1', - }, - ], - api_url: 'http://slack1http://newgreaturl', - channel: '#mychannel', - fields: [ - { - short: false, - title: 'field2', - value: 'text2', - }, - ], - link_names: false, - send_resolved: false, - short_fields: false, - }, - ], - webhook_configs: [ - { - send_resolved: true, - url: 'http://webhookurl', - }, - ], - }, - ], - }, - }); - }); - - it('Prometheus Alertmanager receiver cannot be edited', async () => { - mockAlertmanagerChoiceResponse(server, alertmanagerChoiceMockedResponse); - - mocks.api.fetchStatus.mockResolvedValue({ - ...someCloudAlertManagerStatus, - config: someCloudAlertManagerConfig.alertmanager_config, - }); - renderReceivers(dataSources.promAlertManager.name); - - await ui.receiversTable.find(); - // there's no templates table for vanilla prom, API does not return templates - expect(ui.templatesTable.query()).not.toBeInTheDocument(); - - // click view button on the receiver - const receiverRows = within(screen.getByTestId('dynamic-table')).getAllByTestId('row'); - expect(receiverRows[0]).toHaveTextContent('cloud-receiver'); - expect(byTestId('edit').query(receiverRows[0])).not.toBeInTheDocument(); - await userEvent.click(byTestId('view').get(receiverRows[0])); - - // check that form is open - await byRole('heading', { name: /contact point/i }).find(); - expect(locationService.getLocation().pathname).toEqual('/alerting/notifications/receivers/cloud-receiver/edit'); - - const channelForms = ui.channelFormContainer.queryAll(); - expect(channelForms).toHaveLength(2); - - // check that inputs are disabled and there is no save button - expect(ui.inputs.name.queryAll()[0]).toHaveAttribute('readonly'); - expect(ui.inputs.email.toEmails.get(channelForms[0])).toHaveAttribute('readonly'); - expect(ui.inputs.slack.webhookURL.get(channelForms[1])).toHaveAttribute('readonly'); - expect(ui.newContactPointButton.query()).not.toBeInTheDocument(); - expect(ui.testContactPointButton.query()).not.toBeInTheDocument(); - expect(ui.saveContactButton.query()).not.toBeInTheDocument(); - expect(ui.cancelButton.query()).toBeInTheDocument(); - - expect(mocks.api.fetchConfig).not.toHaveBeenCalled(); - expect(mocks.api.fetchStatus).toHaveBeenCalledTimes(1); - }); - - it('Loads config from status endpoint if there is no user config', async () => { - mockAlertmanagerChoiceResponse(server, alertmanagerChoiceMockedResponse); - // loading an empty config with make it fetch config from status endpoint - mocks.api.fetchConfig.mockResolvedValue({ - template_files: {}, - alertmanager_config: {}, - }); - mocks.api.fetchStatus.mockResolvedValue(someCloudAlertManagerStatus); - renderReceivers('CloudManager'); - - // check that receiver from the default config is represented - await ui.receiversTable.find(); - const receiverRows = within(screen.getByTestId('dynamic-table')).getAllByTestId('row'); - expect(receiverRows[0]).toHaveTextContent('default-email'); - - // check that both config and status endpoints were called - expect(mocks.api.fetchConfig).toHaveBeenCalledTimes(1); - expect(mocks.api.fetchConfig).toHaveBeenLastCalledWith('CloudManager'); - expect(mocks.api.fetchStatus).toHaveBeenCalledTimes(1); - expect(mocks.api.fetchStatus).toHaveBeenLastCalledWith('CloudManager'); - }); - - it('Shows an empty config when config returns an error and the AM supports lazy config initialization', async () => { - mockAlertmanagerChoiceResponse(server, alertmanagerChoiceMockedResponse); - - mocks.api.discoverAlertmanagerFeatures.mockResolvedValue({ lazyConfigInit: true }); - mocks.api.fetchConfig.mockRejectedValue({ message: 'alertmanager storage object not found' }); - - renderReceivers('CloudManager'); - - const templatesTable = await ui.templatesTable.find(); - const receiversTable = await ui.receiversTable.find(); - - expect(templatesTable).toBeInTheDocument(); - expect(receiversTable).toBeInTheDocument(); - }); - - describe('Contact points health', () => { - it('Should render error notifications when there are some points state ', async () => { - mockAlertmanagerChoiceResponse(server, alertmanagerChoiceMockedResponse); - mocks.api.fetchConfig.mockResolvedValue(someGrafanaAlertManagerConfig); - mocks.api.updateConfig.mockResolvedValue(); - - const receiversMock: ContactPointsState = { - receivers: { - default: { - active: true, - notifiers: { - email: [ - { - lastNotifyAttemptError: - 'establish connection to server: dial tcp: lookup smtp.example.org on 8.8.8.8:53: no such host', - lastNotifyAttempt: '2022-09-19T15:34:40.696Z', - lastNotifyAttemptDuration: '117.2455ms', - name: 'email[0]', - }, - ], - }, - errorCount: 1, - }, - critical: { - active: true, - notifiers: { - slack: [ - { - lastNotifyAttempt: '2022-09-19T15:34:40.696Z', - lastNotifyAttemptDuration: '117.2455ms', - name: 'slack[0]', - }, - ], - pagerduty: [ - { - lastNotifyAttempt: '2022-09-19T15:34:40.696Z', - lastNotifyAttemptDuration: '117.2455ms', - name: 'pagerduty', - }, - ], - }, - errorCount: 0, - }, - }, - errorCount: 1, - }; - - mocks.hooks.useGetContactPointsState.mockReturnValue(receiversMock); - renderReceivers(); - - // - await ui.receiversTable.find(); - - const receiverRows = within(screen.getByTestId('dynamic-table')).getAllByTestId('row'); - expect(receiverRows[0]).toHaveTextContent('1 error'); - expect(receiverRows[1]).not.toHaveTextContent('error'); - expect(receiverRows[1]).toHaveTextContent('OK'); - - //should show error in contact points when expanding - // expand contact point detail for default 2 emails - 2 errors - await userEvent.click(ui.contactPointsCollapseToggle.get(receiverRows[0])); - const defaultDetailTable = screen.getAllByTestId('dynamic-table')[1]; - expect(byText('Error').getAll(defaultDetailTable)).toHaveLength(1); - - // expand contact point detail for slack and pagerduty - 0 errors - await userEvent.click(ui.contactPointsCollapseToggle.get(receiverRows[1])); - const criticalDetailTable = screen.getAllByTestId('dynamic-table')[2]; - expect(byText('Error').query(criticalDetailTable)).toBeNull(); - expect(byText('OK').getAll(criticalDetailTable)).toHaveLength(2); - }); - it('Should render no attempt message when there are some points state with null lastNotifyAttempt, and "-" in null values', async () => { - mockAlertmanagerChoiceResponse(server, alertmanagerChoiceMockedResponse); - mocks.api.fetchConfig.mockResolvedValue(someGrafanaAlertManagerConfig); - mocks.api.updateConfig.mockResolvedValue(); - - const receiversMock: ContactPointsState = { - receivers: { - default: { - active: true, - notifiers: { - email: [ - { - lastNotifyAttemptError: - 'establish connection to server: dial tcp: lookup smtp.example.org on 8.8.8.8:53: no such host', - lastNotifyAttempt: '2022-09-19T15:34:40.696Z', - lastNotifyAttemptDuration: '117.2455ms', - name: 'email[0]', - }, - ], - }, - errorCount: 1, - }, - critical: { - active: true, - notifiers: { - slack: [ - { - lastNotifyAttempt: '0001-01-01T00:00:00.000Z', - lastNotifyAttemptDuration: '0s', - name: 'slack[0]', - }, - ], - pagerduty: [ - { - lastNotifyAttempt: '2022-09-19T15:34:40.696Z', - lastNotifyAttemptDuration: '117.2455ms', - name: 'pagerduty', - }, - ], - }, - errorCount: 0, - }, - }, - errorCount: 1, - }; - - mocks.hooks.useGetContactPointsState.mockReturnValue(receiversMock); - renderReceivers(); - - // - await ui.receiversTable.find(); - - const receiverRows = within(screen.getByTestId('dynamic-table')).getAllByTestId('row'); - expect(receiverRows[0]).toHaveTextContent('1 error'); - expect(receiverRows[1]).not.toHaveTextContent('error'); - expect(receiverRows[1]).toHaveTextContent('No attempts'); - - //should show error in contact points when expanding - // expand contact point detail for default 2 emails - 2 errors - await userEvent.click(ui.contactPointsCollapseToggle.get(receiverRows[0])); - const defaultDetailTable = screen.getAllByTestId('dynamic-table')[1]; - expect(byText('Error').getAll(defaultDetailTable)).toHaveLength(1); - - // expand contact point detail for slack and pagerduty - 0 errors - await userEvent.click(ui.contactPointsCollapseToggle.get(receiverRows[1])); - const criticalDetailTableRows = within(screen.getAllByTestId('dynamic-table')[2]).getAllByTestId('row'); - // should render slack item with no attempt - expect(criticalDetailTableRows[0]).toHaveTextContent('No attempt'); - expect(criticalDetailTableRows[0]).toHaveTextContent('--'); - //should render pagerduty with no attempt - expect(criticalDetailTableRows[1]).toHaveTextContent('OK'); - expect(criticalDetailTableRows[1]).toHaveTextContent('117.2455ms'); - }); - - it('Should not render error notifications when fetching contact points state raises 404 error ', async () => { - mockAlertmanagerChoiceResponse(server, alertmanagerChoiceMockedResponse); - mocks.api.fetchConfig.mockResolvedValue(someGrafanaAlertManagerConfig); - mocks.api.updateConfig.mockResolvedValue(); - - mocks.hooks.useGetContactPointsState.mockReturnValue(emptyContactPointsState); - renderReceivers(); - - await ui.receiversTable.find(); - //contact points are not expandable - expect(ui.contactPointsCollapseToggle.query()).not.toBeInTheDocument(); - //should render receivers, only one dynamic table - let receiverRows = within(screen.getByTestId('dynamic-table')).getAllByTestId('row'); - expect(receiverRows[0]).toHaveTextContent('default'); - expect(receiverRows[1]).toHaveTextContent('critical'); - expect(receiverRows).toHaveLength(2); - }); - - it('Should render "Unused" warning if a contact point is not used in route configuration', async () => { - mockAlertmanagerChoiceResponse(server, alertmanagerChoiceMockedResponse); - mocks.api.updateConfig.mockResolvedValue(); - mocks.api.fetchConfig.mockResolvedValue({ - ...someGrafanaAlertManagerConfig, - alertmanager_config: { ...someGrafanaAlertManagerConfig.alertmanager_config, route: { receiver: 'default' } }, - }); - - mocks.hooks.useGetContactPointsState.mockReturnValue(emptyContactPointsState); - renderReceivers(); - - await ui.receiversTable.find(); - //contact points are not expandable - expect(ui.contactPointsCollapseToggle.query()).not.toBeInTheDocument(); - //should render receivers, only one dynamic table - let receiverRows = within(screen.getByTestId('dynamic-table')).getAllByTestId('row'); - - expect(receiverRows).toHaveLength(2); - expect(receiverRows[0]).toHaveTextContent('default'); - expect(receiverRows[1]).toHaveTextContent('critical'); - expect(receiverRows[1]).toHaveTextContent('Unused'); - }); - }); -}); diff --git a/public/app/features/alerting/unified/components/contact-points/ContactPoints.v1.tsx b/public/app/features/alerting/unified/components/contact-points/ContactPoints.v1.tsx deleted file mode 100644 index 72b8b78fef8b4..0000000000000 --- a/public/app/features/alerting/unified/components/contact-points/ContactPoints.v1.tsx +++ /dev/null @@ -1,107 +0,0 @@ -import React, { useEffect } from 'react'; -import { Route, RouteChildrenProps, Switch } from 'react-router-dom'; - -import { Alert, LoadingPlaceholder } from '@grafana/ui'; -import { useDispatch } from 'app/types'; - -import { useAlertmanagerConfig } from '../../hooks/useAlertmanagerConfig'; -import { useUnifiedAlertingSelector } from '../../hooks/useUnifiedAlertingSelector'; -import { useAlertmanager } from '../../state/AlertmanagerContext'; -import { fetchGrafanaNotifiersAction } from '../../state/actions'; -import { GRAFANA_RULES_SOURCE_NAME } from '../../utils/datasource'; -import { GrafanaAlertmanagerDeliveryWarning } from '../GrafanaAlertmanagerDeliveryWarning'; -import { DuplicateTemplateView } from '../receivers/DuplicateTemplateView'; -import { EditReceiverView } from '../receivers/EditReceiverView'; -import { EditTemplateView } from '../receivers/EditTemplateView'; -import { GlobalConfigForm } from '../receivers/GlobalConfigForm'; -import { NewReceiverView } from '../receivers/NewReceiverView'; -import { NewTemplateView } from '../receivers/NewTemplateView'; -import { ReceiversAndTemplatesView } from '../receivers/ReceiversAndTemplatesView'; - -export interface NotificationErrorProps { - errorCount: number; -} - -const Receivers = () => { - const { selectedAlertmanager: alertManagerSourceName } = useAlertmanager(); - const dispatch = useDispatch(); - const { currentData: config, isLoading: loading, error } = useAlertmanagerConfig(alertManagerSourceName); - - const receiverTypes = useUnifiedAlertingSelector((state) => state.grafanaNotifiers); - - useEffect(() => { - if ( - alertManagerSourceName === GRAFANA_RULES_SOURCE_NAME && - !(receiverTypes.result || receiverTypes.loading || receiverTypes.error) - ) { - dispatch(fetchGrafanaNotifiersAction()); - } - }, [alertManagerSourceName, dispatch, receiverTypes]); - - if (!alertManagerSourceName) { - return null; - } - - return ( - <> - {error && !loading && ( - - {error.message || 'Unknown error.'} - - )} - - {loading && !config && } - {config && !error && ( - - - - - - - - - {({ match }: RouteChildrenProps<{ name: string }>) => - match?.params.name && ( - - ) - } - - - {({ match }: RouteChildrenProps<{ name: string }>) => - match?.params.name && ( - - ) - } - - - - - - {({ match }: RouteChildrenProps<{ name: string }>) => - match?.params.name && ( - - ) - } - - - - - - )} - - ); -}; - -export default Receivers; diff --git a/public/app/features/alerting/unified/components/contact-points/ContactPoints.v2.test.tsx b/public/app/features/alerting/unified/components/contact-points/ContactPoints.v2.test.tsx deleted file mode 100644 index 87ba1ca634ce8..0000000000000 --- a/public/app/features/alerting/unified/components/contact-points/ContactPoints.v2.test.tsx +++ /dev/null @@ -1,171 +0,0 @@ -import { render, screen, waitFor, waitForElementToBeRemoved } from '@testing-library/react'; -import userEvent from '@testing-library/user-event'; -import { noop } from 'lodash'; -import React, { PropsWithChildren } from 'react'; -import { TestProvider } from 'test/helpers/TestProvider'; - -import { selectors } from '@grafana/e2e-selectors'; -import { AccessControlAction } from 'app/types'; - -import { grantUserPermissions, mockDataSource } from '../../mocks'; -import { AlertmanagerProvider } from '../../state/AlertmanagerContext'; -import { setupDataSources } from '../../testSetup/datasources'; -import { DataSourceType } from '../../utils/datasource'; - -import ContactPoints, { ContactPoint } from './ContactPoints.v2'; -import setupGrafanaManagedServer from './__mocks__/grafanaManagedServer'; -import setupMimirFlavoredServer, { MIMIR_DATASOURCE_UID } from './__mocks__/mimirFlavoredServer'; - -/** - * There are lots of ways in which we test our pages and components. Here's my opinionated approach to testing them. - * - * Use MSW to mock API responses, you can copy the JSON results from the network panel and use them in a __mocks__ folder. - * - * 1. Make sure we have "presentation" components we can test without mocking data, - * test these if they have some logic in them (hiding / showing things) and sad paths. - * - * 2. For testing the "container" components, check if data fetching is working as intended (you can use loading state) - * and check if we're not in an error state (although you can test for that too for sad path). - * - * 3. Write tests for the hooks we call in the "container" components - * if those have any logic or data structure transformations in them. - */ -describe('ContactPoints', () => { - describe('Grafana managed alertmanager', () => { - setupGrafanaManagedServer(); - - beforeAll(() => { - grantUserPermissions([ - AccessControlAction.AlertingNotificationsRead, - AccessControlAction.AlertingNotificationsWrite, - ]); - }); - - it('should show / hide loading states', async () => { - render( - - - , - { wrapper: TestProvider } - ); - - await waitFor(async () => { - expect(screen.getByText('Loading...')).toBeInTheDocument(); - await waitForElementToBeRemoved(screen.getByText('Loading...')); - expect(screen.queryByTestId(selectors.components.Alert.alertV2('error'))).not.toBeInTheDocument(); - }); - - expect(screen.getByText('grafana-default-email')).toBeInTheDocument(); - expect(screen.getAllByTestId('contact-point')).toHaveLength(4); - }); - - it('should call delete when clicked and not disabled', async () => { - const onDelete = jest.fn(); - - render(, { - wrapper, - }); - - const moreActions = screen.getByRole('button', { name: 'more-actions' }); - await userEvent.click(moreActions); - - const deleteButton = screen.getByRole('menuitem', { name: /delete/i }); - await userEvent.click(deleteButton); - - expect(onDelete).toHaveBeenCalledWith('my-contact-point'); - }); - - it('should disable edit button', async () => { - render(, { - wrapper, - }); - - const moreActions = screen.getByRole('button', { name: 'more-actions' }); - expect(moreActions).not.toBeDisabled(); - - const editAction = screen.getByTestId('edit-action'); - expect(editAction).toHaveAttribute('aria-disabled', 'true'); - }); - - it('should disable buttons when provisioned', async () => { - render(, { - wrapper, - }); - - expect(screen.getByText(/provisioned/i)).toBeInTheDocument(); - - const editAction = screen.queryByTestId('edit-action'); - expect(editAction).not.toBeInTheDocument(); - - const viewAction = screen.getByRole('link', { name: /view/i }); - expect(viewAction).toBeInTheDocument(); - - const moreActions = screen.getByRole('button', { name: 'more-actions' }); - expect(moreActions).not.toBeDisabled(); - await userEvent.click(moreActions); - - const deleteButton = screen.getByRole('menuitem', { name: /delete/i }); - expect(deleteButton).toBeDisabled(); - }); - - it('should disable delete when contact point is linked to at least one notification policy', async () => { - render( - , - { - wrapper, - } - ); - - expect(screen.getByRole('link', { name: 'is used by 1 notification policy' })).toBeInTheDocument(); - - const moreActions = screen.getByRole('button', { name: 'more-actions' }); - await userEvent.click(moreActions); - - const deleteButton = screen.getByRole('menuitem', { name: /delete/i }); - expect(deleteButton).toBeDisabled(); - }); - }); - - describe('Mimir-flavored alertmanager', () => { - setupMimirFlavoredServer(); - - beforeAll(() => { - grantUserPermissions([ - AccessControlAction.AlertingNotificationsExternalRead, - AccessControlAction.AlertingNotificationsExternalWrite, - ]); - setupDataSources( - mockDataSource({ - type: DataSourceType.Alertmanager, - name: MIMIR_DATASOURCE_UID, - uid: MIMIR_DATASOURCE_UID, - }) - ); - }); - - it('should show / hide loading states', async () => { - render( - - - , - { wrapper: TestProvider } - ); - - await waitFor(async () => { - expect(screen.getByText('Loading...')).toBeInTheDocument(); - await waitForElementToBeRemoved(screen.getByText('Loading...')); - expect(screen.queryByTestId(selectors.components.Alert.alertV2('error'))).not.toBeInTheDocument(); - }); - - expect(screen.getByText('mixed')).toBeInTheDocument(); - expect(screen.getByText('some webhook')).toBeInTheDocument(); - expect(screen.getAllByTestId('contact-point')).toHaveLength(2); - }); - }); -}); - -const wrapper = ({ children }: PropsWithChildren) => ( - - {children} - -); diff --git a/public/app/features/alerting/unified/components/contact-points/ContactPoints.v2.tsx b/public/app/features/alerting/unified/components/contact-points/ContactPoints.v2.tsx deleted file mode 100644 index 0881c8222a4d7..0000000000000 --- a/public/app/features/alerting/unified/components/contact-points/ContactPoints.v2.tsx +++ /dev/null @@ -1,602 +0,0 @@ -import { css } from '@emotion/css'; -import { SerializedError } from '@reduxjs/toolkit'; -import { groupBy, size, upperFirst } from 'lodash'; -import pluralize from 'pluralize'; -import React, { Fragment, ReactNode, useCallback, useMemo, useState } from 'react'; -import { Link } from 'react-router-dom'; -import { useToggle } from 'react-use'; - -import { dateTime, GrafanaTheme2 } from '@grafana/data'; -import { Stack } from '@grafana/experimental'; -import { - Alert, - Dropdown, - Icon, - LoadingPlaceholder, - Menu, - Tooltip, - useStyles2, - Text, - LinkButton, - TabsBar, - TabContent, - Tab, - Pagination, - Button, -} from '@grafana/ui'; -import ConditionalWrap from 'app/features/alerting/components/ConditionalWrap'; -import { receiverTypeNames } from 'app/plugins/datasource/alertmanager/consts'; -import { GrafanaManagedReceiverConfig } from 'app/plugins/datasource/alertmanager/types'; -import { GrafanaNotifierType, NotifierStatus } from 'app/types/alerting'; - -import { AlertmanagerAction, useAlertmanagerAbility } from '../../hooks/useAbilities'; -import { usePagination } from '../../hooks/usePagination'; -import { useAlertmanager } from '../../state/AlertmanagerContext'; -import { INTEGRATION_ICONS } from '../../types/contact-points'; -import { GRAFANA_RULES_SOURCE_NAME } from '../../utils/datasource'; -import { createUrl } from '../../utils/url'; -import { GrafanaAlertmanagerDeliveryWarning } from '../GrafanaAlertmanagerDeliveryWarning'; -import { MetaText } from '../MetaText'; -import MoreButton from '../MoreButton'; -import { ProvisioningBadge } from '../Provisioning'; -import { Spacer } from '../Spacer'; -import { Strong } from '../Strong'; -import { GrafanaReceiverExporter } from '../export/GrafanaReceiverExporter'; -import { GrafanaReceiversExporter } from '../export/GrafanaReceiversExporter'; -import { GlobalConfigAlert } from '../receivers/ReceiversAndTemplatesView'; -import { UnusedContactPointBadge } from '../receivers/ReceiversTable'; -import { ReceiverMetadataBadge } from '../receivers/grafanaAppReceivers/ReceiverMetadataBadge'; -import { ReceiverPluginMetadata } from '../receivers/grafanaAppReceivers/useReceiversMetadata'; - -import { MessageTemplates } from './MessageTemplates'; -import { useDeleteContactPointModal } from './Modals'; -import { - RECEIVER_META_KEY, - RECEIVER_PLUGIN_META_KEY, - RECEIVER_STATUS_KEY, - useContactPointsWithStatus, - useDeleteContactPoint, -} from './useContactPoints'; -import { ContactPointWithMetadata, getReceiverDescription, isProvisioned, ReceiverConfigWithMetadata } from './utils'; - -enum ActiveTab { - ContactPoints, - MessageTemplates, -} - -const DEFAULT_PAGE_SIZE = 10; - -const ContactPoints = () => { - const { selectedAlertmanager } = useAlertmanager(); - // TODO hook up to query params - const [activeTab, setActiveTab] = useState(ActiveTab.ContactPoints); - let { isLoading, error, contactPoints } = useContactPointsWithStatus(); - const { deleteTrigger, updateAlertmanagerState } = useDeleteContactPoint(selectedAlertmanager!); - const [addContactPointSupported, addContactPointAllowed] = useAlertmanagerAbility( - AlertmanagerAction.CreateContactPoint - ); - const [exportContactPointsSupported, exportContactPointsAllowed] = useAlertmanagerAbility( - AlertmanagerAction.ExportContactPoint - ); - - const [DeleteModal, showDeleteModal] = useDeleteContactPointModal(deleteTrigger, updateAlertmanagerState.isLoading); - const [ExportDrawer, showExportDrawer] = useExportContactPoint(); - - const showingContactPoints = activeTab === ActiveTab.ContactPoints; - const showingMessageTemplates = activeTab === ActiveTab.MessageTemplates; - - if (error) { - // TODO fix this type casting, when error comes from "getContactPointsStatus" it probably won't be a SerializedError - return {(error as SerializedError).message}; - } - - const isGrafanaManagedAlertmanager = selectedAlertmanager === GRAFANA_RULES_SOURCE_NAME; - - return ( - <> - - - - - setActiveTab(ActiveTab.ContactPoints)} - /> - setActiveTab(ActiveTab.MessageTemplates)} - /> - - - - <> - {isLoading && } - {/* Contact Points tab */} - {showingContactPoints && ( - <> - {error ? ( - {String(error)} - ) : ( - <> - {/* TODO we can add some additional info here with a ToggleTip */} - - - Define where notifications are sent, a contact point can contain multiple integrations. - - - - {addContactPointSupported && ( - - Add contact point - - )} - {exportContactPointsSupported && ( - - )} - - - showDeleteModal(name)} - disabled={updateAlertmanagerState.isLoading} - /> - {/* Grafana manager Alertmanager does not support global config, Mimir and Cortex do */} - {!isGrafanaManagedAlertmanager && } - - )} - - )} - {/* Message Templates tab */} - {showingMessageTemplates && ( - <> - - - Create message templates to customize your notifications. - - - - Add message template - - - - - )} - - - - - {DeleteModal} - {ExportDrawer} - - ); -}; - -interface ContactPointsListProps { - contactPoints: ContactPointWithMetadata[]; - disabled?: boolean; - onDelete: (name: string) => void; - pageSize?: number; -} - -const ContactPointsList = ({ - contactPoints, - disabled = false, - pageSize = DEFAULT_PAGE_SIZE, - onDelete, -}: ContactPointsListProps) => { - const { page, pageItems, numberOfPages, onPageChange } = usePagination(contactPoints, 1, pageSize); - - return ( - <> - {pageItems.map((contactPoint, index) => { - const provisioned = isProvisioned(contactPoint); - const policies = contactPoint.numberOfPolicies; - - return ( - - ); - })} - - - ); -}; - -interface ContactPointProps { - name: string; - disabled?: boolean; - provisioned?: boolean; - receivers: ReceiverConfigWithMetadata[]; - policies?: number; - onDelete: (name: string) => void; -} - -export const ContactPoint = ({ - name, - disabled = false, - provisioned = false, - receivers, - policies = 0, - onDelete, -}: ContactPointProps) => { - const styles = useStyles2(getStyles); - - // TODO probably not the best way to figure out if we want to show either only the summary or full metadata for the receivers? - const showFullMetadata = receivers.some((receiver) => Boolean(receiver[RECEIVER_STATUS_KEY])); - - return ( -
- - - {showFullMetadata ? ( -
- {receivers.map((receiver, index) => { - const diagnostics = receiver[RECEIVER_STATUS_KEY]; - const metadata = receiver[RECEIVER_META_KEY]; - const sendingResolved = !Boolean(receiver.disableResolveMessage); - const pluginMetadata = receiver[RECEIVER_PLUGIN_META_KEY]; - const key = metadata.name + index; - - return ( - - ); - })} -
- ) : ( -
- -
- )} -
-
- ); -}; - -interface ContactPointHeaderProps { - name: string; - disabled?: boolean; - provisioned?: boolean; - policies?: number; - onDelete: (name: string) => void; -} - -const ContactPointHeader = (props: ContactPointHeaderProps) => { - const { name, disabled = false, provisioned = false, policies = 0, onDelete } = props; - const styles = useStyles2(getStyles); - - const [exportSupported, exportAllowed] = useAlertmanagerAbility(AlertmanagerAction.ExportContactPoint); - const [editSupported, editAllowed] = useAlertmanagerAbility(AlertmanagerAction.UpdateContactPoint); - const [deleteSupported, deleteAllowed] = useAlertmanagerAbility(AlertmanagerAction.UpdateContactPoint); - - const [ExportDrawer, openExportDrawer] = useExportContactPoint(); - - const isReferencedByPolicies = policies > 0; - const canEdit = editSupported && editAllowed && !provisioned; - const canDelete = deleteSupported && deleteAllowed && !provisioned && policies === 0; - - const menuActions: JSX.Element[] = []; - - if (exportSupported) { - menuActions.push( - - openExportDrawer(name)} - /> - - - ); - } - - if (deleteSupported) { - menuActions.push( - ( - - {children} - - )} - > - onDelete(name)} - /> - - ); - } - - return ( -
- - - - {name} - - - {isReferencedByPolicies && ( - - - is used by {policies} {pluralize('notification policy', policies)} - - - )} - {provisioned && } - {!isReferencedByPolicies && } - - - {canEdit ? 'Edit' : 'View'} - - {menuActions.length > 0 && ( - {menuActions}}> - - - )} - - {ExportDrawer} -
- ); -}; - -interface ContactPointReceiverProps { - name: string; - type: GrafanaNotifierType | string; - description?: ReactNode; - sendingResolved?: boolean; - diagnostics?: NotifierStatus; - pluginMetadata?: ReceiverPluginMetadata; -} - -const ContactPointReceiver = (props: ContactPointReceiverProps) => { - const { name, type, description, diagnostics, pluginMetadata, sendingResolved = true } = props; - const styles = useStyles2(getStyles); - - const iconName = INTEGRATION_ICONS[type]; - const hasMetadata = diagnostics !== undefined; - - return ( -
- - - - {iconName && } - {pluginMetadata ? ( - - ) : ( - - {name} - - )} - - {description && ( - - {description} - - )} - - {hasMetadata && } - -
- ); -}; - -interface ContactPointReceiverMetadata { - sendingResolved: boolean; - diagnostics: NotifierStatus; -} - -type ContactPointReceiverSummaryProps = { - receivers: GrafanaManagedReceiverConfig[]; -}; - -/** - * This summary is used when we're dealing with non-Grafana managed alertmanager since they - * don't have any metadata worth showing other than a summary of what types are configured for the contact point - */ -const ContactPointReceiverSummary = ({ receivers }: ContactPointReceiverSummaryProps) => { - const styles = useStyles2(getStyles); - const countByType = groupBy(receivers, (receiver) => receiver.type); - - return ( -
- - - {Object.entries(countByType).map(([type, receivers], index) => { - const iconName = INTEGRATION_ICONS[type]; - const receiverName = receiverTypeNames[type] ?? upperFirst(type); - const isLastItem = size(countByType) - 1 === index; - - return ( - - - {iconName && } - - {receiverName} - {receivers.length > 1 && <> ({receivers.length})} - - - {!isLastItem && '⋅'} - - ); - })} - - -
- ); -}; - -const ContactPointReceiverMetadataRow = ({ diagnostics, sendingResolved }: ContactPointReceiverMetadata) => { - const styles = useStyles2(getStyles); - - const failedToSend = Boolean(diagnostics.lastNotifyAttemptError); - const lastDeliveryAttempt = dateTime(diagnostics.lastNotifyAttempt); - const lastDeliveryAttemptDuration = diagnostics.lastNotifyAttemptDuration; - const hasDeliveryAttempt = lastDeliveryAttempt.isValid(); - - return ( -
- - {/* this is shown when the last delivery failed – we don't show any additional metadata */} - {failedToSend ? ( - <> - - - Last delivery attempt failed - - - - ) : ( - <> - {/* this is shown when we have a last delivery attempt */} - {hasDeliveryAttempt && ( - <> - - Last delivery attempt{' '} - - - {lastDeliveryAttempt.locale('en').fromNow()} - - - - - took {lastDeliveryAttemptDuration} - - - )} - {/* when we have no last delivery attempt */} - {!hasDeliveryAttempt && No delivery attempts} - {/* this is only shown for contact points that only want "firing" updates */} - {!sendingResolved && ( - - Delivering only firing notifications - - )} - - )} - -
- ); -}; - -const ALL_CONTACT_POINTS = Symbol('all contact points'); - -type ExportProps = [JSX.Element | null, (receiver: string | typeof ALL_CONTACT_POINTS) => void]; - -const useExportContactPoint = (): ExportProps => { - const [receiverName, setReceiverName] = useState(null); - const [isExportDrawerOpen, toggleShowExportDrawer] = useToggle(false); - const [decryptSecretsSupported, decryptSecretsAllowed] = useAlertmanagerAbility(AlertmanagerAction.DecryptSecrets); - - const canReadSecrets = decryptSecretsSupported && decryptSecretsAllowed; - - const handleClose = useCallback(() => { - setReceiverName(null); - toggleShowExportDrawer(false); - }, [toggleShowExportDrawer]); - - const handleOpen = (receiverName: string | typeof ALL_CONTACT_POINTS) => { - setReceiverName(receiverName); - toggleShowExportDrawer(true); - }; - - const drawer = useMemo(() => { - if (!receiverName || !isExportDrawerOpen) { - return null; - } - - if (receiverName === ALL_CONTACT_POINTS) { - // use this drawer when we want to export all contact points - return ; - } else { - // use this one for exporting a single contact point - return ; - } - }, [canReadSecrets, isExportDrawerOpen, handleClose, receiverName]); - - return [drawer, handleOpen]; -}; - -const getStyles = (theme: GrafanaTheme2) => ({ - contactPointWrapper: css({ - borderRadius: `${theme.shape.radius.default}`, - border: `solid 1px ${theme.colors.border.weak}`, - borderBottom: 'none', - }), - integrationWrapper: css({ - position: 'relative', - - background: `${theme.colors.background.primary}`, - padding: `${theme.spacing(1)} ${theme.spacing(1.5)}`, - - borderBottom: `solid 1px ${theme.colors.border.weak}`, - }), - headerWrapper: css({ - background: `${theme.colors.background.secondary}`, - padding: `${theme.spacing(1)} ${theme.spacing(1.5)}`, - - borderBottom: `solid 1px ${theme.colors.border.weak}`, - borderTopLeftRadius: `${theme.shape.radius.default}`, - borderTopRightRadius: `${theme.shape.radius.default}`, - }), - metadataRow: css({ - borderBottomLeftRadius: `${theme.shape.radius.default}`, - borderBottomRightRadius: `${theme.shape.radius.default}`, - }), -}); - -export default ContactPoints; diff --git a/public/app/features/alerting/unified/components/contact-points/DuplicateMessageTemplate.tsx b/public/app/features/alerting/unified/components/contact-points/DuplicateMessageTemplate.tsx index b59d348aac612..4f24ff072b22c 100644 --- a/public/app/features/alerting/unified/components/contact-points/DuplicateMessageTemplate.tsx +++ b/public/app/features/alerting/unified/components/contact-points/DuplicateMessageTemplate.tsx @@ -15,7 +15,7 @@ const NewMessageTemplate = ({ match }: Props) => { const name = match?.params.name; if (!name) { - return ; + return ; } if (isLoading && !data) { diff --git a/public/app/features/alerting/unified/components/contact-points/EditMessageTemplate.tsx b/public/app/features/alerting/unified/components/contact-points/EditMessageTemplate.tsx index b8227ff1bca3c..51b10f92c9823 100644 --- a/public/app/features/alerting/unified/components/contact-points/EditMessageTemplate.tsx +++ b/public/app/features/alerting/unified/components/contact-points/EditMessageTemplate.tsx @@ -16,7 +16,7 @@ const EditMessageTemplate = ({ match }: Props) => { const name = match?.params.name; if (!name) { - return ; + return ; } if (isLoading && !data) { @@ -25,7 +25,7 @@ const EditMessageTemplate = ({ match }: Props) => { if (error) { return ( - + {String(error)} ); diff --git a/public/app/features/alerting/unified/components/contact-points/GlobalConfig.tsx b/public/app/features/alerting/unified/components/contact-points/GlobalConfig.tsx deleted file mode 100644 index c5a453c6ef6b3..0000000000000 --- a/public/app/features/alerting/unified/components/contact-points/GlobalConfig.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import React from 'react'; - -import { Alert } from '@grafana/ui'; - -import { useAlertmanagerConfig } from '../../hooks/useAlertmanagerConfig'; -import { useAlertmanager } from '../../state/AlertmanagerContext'; -import { GlobalConfigForm } from '../receivers/GlobalConfigForm'; - -const NewMessageTemplate = () => { - const { selectedAlertmanager } = useAlertmanager(); - const { data, isLoading, error } = useAlertmanagerConfig(selectedAlertmanager); - - if (isLoading && !data) { - return 'loading...'; - } - - if (error) { - return ( - - {String(error)} - - ); - } - - if (!data) { - return null; - } - - return ; -}; - -export default NewMessageTemplate; diff --git a/public/app/features/alerting/unified/components/contact-points/MessageTemplates.tsx b/public/app/features/alerting/unified/components/contact-points/MessageTemplates.tsx deleted file mode 100644 index 415188bc1d6d2..0000000000000 --- a/public/app/features/alerting/unified/components/contact-points/MessageTemplates.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import React from 'react'; - -import { Alert } from '@grafana/ui'; - -import { useAlertmanagerConfig } from '../../hooks/useAlertmanagerConfig'; -import { useAlertmanager } from '../../state/AlertmanagerContext'; -import { TemplatesTable } from '../receivers/TemplatesTable'; - -export const MessageTemplates = () => { - const { selectedAlertmanager } = useAlertmanager(); - const { data, error } = useAlertmanagerConfig(selectedAlertmanager); - - if (error) { - return {String(error)}; - } - - if (data) { - return ; - } - - return null; -}; diff --git a/public/app/features/alerting/unified/components/contact-points/NewContactPoint.test.tsx b/public/app/features/alerting/unified/components/contact-points/NewContactPoint.test.tsx new file mode 100644 index 0000000000000..2269eede098d5 --- /dev/null +++ b/public/app/features/alerting/unified/components/contact-points/NewContactPoint.test.tsx @@ -0,0 +1,116 @@ +import { render, screen, waitFor } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; +import React from 'react'; +import { TestProvider } from 'test/helpers/TestProvider'; +import { byLabelText, byPlaceholderText, byRole, byTestId } from 'testing-library-selector'; + +import { AccessControlAction } from 'app/types'; + +import { setupMswServer } from '../../mockApi'; +import { grantUserPermissions } from '../../mocks'; +import { AlertmanagerProvider } from '../../state/AlertmanagerContext'; + +import NewContactPoint from './NewContactPoint'; +import setupGrafanaManagedServer, { + setupSaveEndpointMock, + setupTestEndpointMock, +} from './__mocks__/grafanaManagedServer'; + +import 'core-js/stable/structured-clone'; + +const server = setupMswServer(); +const user = userEvent.setup(); + +beforeEach(() => { + grantUserPermissions([AccessControlAction.AlertingNotificationsRead, AccessControlAction.AlertingNotificationsWrite]); + setupGrafanaManagedServer(server); +}); + +it('should be able to test and save a receiver', async () => { + const testMock = setupTestEndpointMock(server); + const saveMock = setupSaveEndpointMock(server); + + render( + + + , + { wrapper: TestProvider } + ); + + // wait for loading to be done + // type in a name for the new receiver + await waitFor(() => { + user.type(ui.inputs.name.get(), 'my new receiver'); + }); + + // enter some email + const email = ui.inputs.email.addresses.get(); + await user.clear(email); + await user.type(email, 'tester@grafana.com'); + + // try to test the contact point + await user.click(await ui.testContactPointButton.find()); + + await waitFor( + () => { + expect(ui.testContactPointModal.get()).toBeInTheDocument(); + }, + { timeout: 1000 } + ); + await user.click(ui.customContactPointOption.get()); + + // enter custom annotations and labels + await user.type(screen.getByPlaceholderText('Enter a description...'), 'Test contact point'); + await user.type(ui.contactPointLabelKey(0).get(), 'foo'); + await user.type(ui.contactPointLabelValue(0).get(), 'bar'); + + // click test + await user.click(ui.testContactPoint.get()); + + // we shouldn't be testing implementation details but when the request is successful + // it can't seem to assert on the success toast + await waitFor(() => { + expect(testMock).toHaveBeenCalled(); + expect(testMock.mock.lastCall).toMatchSnapshot(); + }); + + await user.click(ui.saveContactButton.get()); + await waitFor(() => { + expect(saveMock).toHaveBeenCalled(); + expect(saveMock.mock.lastCall).toMatchSnapshot(); + }); +}); + +const ui = { + saveContactButton: byRole('button', { name: /save contact point/i }), + newContactPointIntegrationButton: byRole('button', { name: /add contact point integration/i }), + testContactPointButton: byRole('button', { name: /Test/ }), + testContactPointModal: byRole('heading', { name: /test contact point/i }), + customContactPointOption: byRole('radio', { name: /custom/i }), + contactPointAnnotationSelect: (idx: number) => byTestId(`annotation-key-${idx}`), + contactPointAnnotationValue: (idx: number) => byTestId(`annotation-value-${idx}`), + contactPointLabelKey: (idx: number) => byTestId(`label-key-${idx}`), + contactPointLabelValue: (idx: number) => byTestId(`label-value-${idx}`), + testContactPoint: byRole('button', { name: /send test notification/i }), + cancelButton: byTestId('cancel-button'), + + channelFormContainer: byTestId('item-container'), + + inputs: { + name: byPlaceholderText('Name'), + email: { + addresses: byLabelText(/Addresses/), + toEmails: byLabelText(/To/), + }, + hipchat: { + url: byLabelText('Hip Chat Url'), + apiKey: byLabelText('API Key'), + }, + slack: { + webhookURL: byLabelText(/Webhook URL/i), + }, + webhook: { + URL: byLabelText(/The endpoint to send HTTP POST requests to/i), + }, + }, +}; diff --git a/public/app/features/alerting/unified/components/contact-points/NewContactPoint.tsx b/public/app/features/alerting/unified/components/contact-points/NewContactPoint.tsx index e1ca42cbd90bc..0151e2627683b 100644 --- a/public/app/features/alerting/unified/components/contact-points/NewContactPoint.tsx +++ b/public/app/features/alerting/unified/components/contact-points/NewContactPoint.tsx @@ -1,5 +1,4 @@ import React from 'react'; -import { RouteChildrenProps } from 'react-router-dom'; import { Alert } from '@grafana/ui'; @@ -7,7 +6,7 @@ import { useAlertmanagerConfig } from '../../hooks/useAlertmanagerConfig'; import { useAlertmanager } from '../../state/AlertmanagerContext'; import { NewReceiverView } from '../receivers/NewReceiverView'; -const NewContactPoint = (_props: RouteChildrenProps) => { +const NewContactPoint = () => { const { selectedAlertmanager } = useAlertmanager(); const { data, isLoading, error } = useAlertmanagerConfig(selectedAlertmanager); diff --git a/public/app/features/alerting/unified/components/contact-points/NewMessageTemplate.tsx b/public/app/features/alerting/unified/components/contact-points/NewMessageTemplate.tsx index 5a0e658d8327f..fce6ff9505721 100644 --- a/public/app/features/alerting/unified/components/contact-points/NewMessageTemplate.tsx +++ b/public/app/features/alerting/unified/components/contact-points/NewMessageTemplate.tsx @@ -16,7 +16,7 @@ const NewMessageTemplate = () => { if (error) { return ( - + {String(error)} ); diff --git a/public/app/features/alerting/unified/components/contact-points/NotificationTemplates.tsx b/public/app/features/alerting/unified/components/contact-points/NotificationTemplates.tsx new file mode 100644 index 0000000000000..67077810fa905 --- /dev/null +++ b/public/app/features/alerting/unified/components/contact-points/NotificationTemplates.tsx @@ -0,0 +1,22 @@ +import React from 'react'; + +import { Alert } from '@grafana/ui'; + +import { useAlertmanagerConfig } from '../../hooks/useAlertmanagerConfig'; +import { useAlertmanager } from '../../state/AlertmanagerContext'; +import { TemplatesTable } from '../receivers/TemplatesTable'; + +export const NotificationTemplates = () => { + const { selectedAlertmanager } = useAlertmanager(); + const { data, error } = useAlertmanagerConfig(selectedAlertmanager); + + if (error) { + return {String(error)}; + } + + if (data) { + return ; + } + + return null; +}; diff --git a/public/app/features/alerting/unified/components/contact-points/__mocks__/alertmanager.config.mock.json b/public/app/features/alerting/unified/components/contact-points/__mocks__/alertmanager.config.mock.json index b5d9f3f2c82d1..5bfacc2cdcceb 100644 --- a/public/app/features/alerting/unified/components/contact-points/__mocks__/alertmanager.config.mock.json +++ b/public/app/features/alerting/unified/components/contact-points/__mocks__/alertmanager.config.mock.json @@ -1,6 +1,14 @@ { "template_files": {}, "alertmanager_config": { + "route": { + "receiver": "grafana-default-email", + "routes": [ + { + "receiver": "provisioned-contact-point" + } + ] + }, "receivers": [ { "name": "grafana-default-email", diff --git a/public/app/features/alerting/unified/components/contact-points/__mocks__/alertmanager.mimir.config.mock.json b/public/app/features/alerting/unified/components/contact-points/__mocks__/alertmanager.mimir.config.mock.json index 9bcdc5ce78efb..46501c9a0d507 100644 --- a/public/app/features/alerting/unified/components/contact-points/__mocks__/alertmanager.mimir.config.mock.json +++ b/public/app/features/alerting/unified/components/contact-points/__mocks__/alertmanager.mimir.config.mock.json @@ -21,13 +21,9 @@ "group_wait": "30s", "matchers": [], "mute_time_intervals": [], - "receiver": "email", + "receiver": "some webhook", "repeat_interval": "5h", - "routes": [ - { - "receiver": "mixed" - } - ] + "routes": [] }, "templates": [] } diff --git a/public/app/features/alerting/unified/components/contact-points/__mocks__/alertmanager.vanilla.mock.json b/public/app/features/alerting/unified/components/contact-points/__mocks__/alertmanager.vanilla.mock.json new file mode 100644 index 0000000000000..af6b05fd87bf1 --- /dev/null +++ b/public/app/features/alerting/unified/components/contact-points/__mocks__/alertmanager.vanilla.mock.json @@ -0,0 +1,70 @@ +{ + "cluster": { + "name": "01HGAVE6N6RG55BZW8N5ZJ12T3", + "peers": [{ "address": "172.19.0.6:9094", "name": "01HGAVE6N6RG55BZW8N5ZJ12T3" }], + "status": "settling" + }, + "config": { + "global": { + "resolve_timeout": "5m", + "http_config": { + "tls_config": { "insecure_skip_verify": false }, + "follow_redirects": true, + "enable_http2": true, + "proxy_url": null + }, + "smtp_hello": "localhost", + "smtp_smarthost": "", + "smtp_require_tls": true, + "pagerduty_url": "https://events.pagerduty.com/v2/enqueue", + "opsgenie_api_url": "https://api.opsgenie.com/", + "wechat_api_url": "https://qyapi.weixin.qq.com/cgi-bin/", + "victorops_api_url": "https://alert.victorops.com/integrations/generic/20131114/alert/", + "telegram_api_url": "https://api.telegram.org", + "webex_api_url": "https://webexapis.com/v1/messages" + }, + "route": { + "receiver": "web.hook", + "group_by": ["alertname"], + "group_wait": "30s", + "group_interval": "5m", + "repeat_interval": "1h" + }, + "inhibit_rules": [ + { + "source_match": { "severity": "critical" }, + "target_match": { "severity": "warning" }, + "equal": ["alertname", "dev", "instance"] + } + ], + "templates": [], + "receivers": [ + { + "name": "web.hook", + "webhook_configs": [ + { + "send_resolved": true, + "http_config": { + "tls_config": { "insecure_skip_verify": false }, + "follow_redirects": true, + "enable_http2": true, + "proxy_url": null + }, + "url": "\u003csecret\u003e", + "url_file": "", + "max_alerts": 0 + } + ] + } + ] + }, + "uptime": "2023-11-28T11:36:10.663Z", + "versionInfo": { + "branch": "HEAD", + "buildDate": "20230824-11:09:02", + "buildUser": "root@520df6c16a84", + "goVersion": "go1.20.7", + "revision": "d7b4f0c7322e7151d6e3b1e31cbc15361e295d8d", + "version": "0.26.0" + } +} diff --git a/public/app/features/alerting/unified/components/contact-points/__mocks__/grafanaManagedServer.ts b/public/app/features/alerting/unified/components/contact-points/__mocks__/grafanaManagedServer.ts index 72116c2598f5d..54666de1aa539 100644 --- a/public/app/features/alerting/unified/components/contact-points/__mocks__/grafanaManagedServer.ts +++ b/public/app/features/alerting/unified/components/contact-points/__mocks__/grafanaManagedServer.ts @@ -1,29 +1,29 @@ -import { rest } from 'msw'; +import 'whatwg-fetch'; +import { http, HttpResponse } from 'msw'; +import { SetupServer } from 'msw/node'; import { AlertmanagerChoice, AlertManagerCortexConfig } from 'app/plugins/datasource/alertmanager/types'; import { ReceiversStateDTO } from 'app/types'; -import { mockApi, setupMswServer } from '../../../mockApi'; +import { mockApi } from '../../../mockApi'; import { mockAlertmanagerChoiceResponse } from '../../../mocks/alertmanagerApi'; import { grafanaNotifiersMock } from '../../../mocks/grafana-notifiers'; import alertmanagerMock from './alertmanager.config.mock.json'; import receiversMock from './receivers.mock.json'; -export default () => { - const server = setupMswServer(); - +export default (server: SetupServer) => { server.use( // this endpoint is a grafana built-in alertmanager - rest.get('/api/alertmanager/grafana/config/api/v1/alerts', (_req, res, ctx) => - res(ctx.json(alertmanagerMock)) + http.get('/api/alertmanager/grafana/config/api/v1/alerts', () => + HttpResponse.json(alertmanagerMock) ), // this endpoint is only available for the built-in alertmanager - rest.get('/api/alertmanager/grafana/config/api/v1/receivers', (_req, res, ctx) => - res(ctx.json(receiversMock)) + http.get('/api/alertmanager/grafana/config/api/v1/receivers', () => + HttpResponse.json(receiversMock) ), // this endpoint will respond if the OnCall plugin is installed - rest.get('/api/plugins/grafana-oncall-app/settings', (_req, res, ctx) => res(ctx.status(404))) + http.get('/api/plugins/grafana-oncall-app/settings', () => HttpResponse.json({}, { status: 404 })) ); // this endpoint is for rendering the "additional AMs to configure" warning @@ -37,3 +37,45 @@ export default () => { return server; }; + +export const setupTestEndpointMock = (server: SetupServer) => { + const mock = jest.fn(); + + server.use( + http.post( + '/api/alertmanager/grafana/config/api/v1/receivers/test', + async ({ request }) => { + const requestBody = await request.json(); + mock(requestBody); + + return HttpResponse.json({}); + }, + { + once: true, + } + ) + ); + + return mock; +}; + +export const setupSaveEndpointMock = (server: SetupServer) => { + const mock = jest.fn(); + + server.use( + http.post( + '/api/alertmanager/grafana/config/api/v1/alerts', + async ({ request }) => { + const requestBody = await request.json(); + mock(requestBody); + + return HttpResponse.json({}); + }, + { + once: true, + } + ) + ); + + return mock; +}; diff --git a/public/app/features/alerting/unified/components/contact-points/__mocks__/mimirFlavoredServer.ts b/public/app/features/alerting/unified/components/contact-points/__mocks__/mimirFlavoredServer.ts index f27d795cf6cac..adbed73cb486a 100644 --- a/public/app/features/alerting/unified/components/contact-points/__mocks__/mimirFlavoredServer.ts +++ b/public/app/features/alerting/unified/components/contact-points/__mocks__/mimirFlavoredServer.ts @@ -1,25 +1,31 @@ -import { rest } from 'msw'; +import 'whatwg-fetch'; +import { http, HttpResponse } from 'msw'; +import { SetupServer } from 'msw/lib/node'; import { AlertManagerCortexConfig } from 'app/plugins/datasource/alertmanager/types'; -import { setupMswServer } from '../../../mockApi'; - import mimirAlertmanagerMock from './alertmanager.mimir.config.mock.json'; // this one emulates a mimir server setup export const MIMIR_DATASOURCE_UID = 'mimir'; -export default () => { - const server = setupMswServer(); - +export default (server: SetupServer) => { server.use( - rest.get(`/api/alertmanager/${MIMIR_DATASOURCE_UID}/config/api/v1/alerts`, (_req, res, ctx) => - res(ctx.json(mimirAlertmanagerMock)) + http.get(`/api/alertmanager/${MIMIR_DATASOURCE_UID}/config/api/v1/alerts`, () => + HttpResponse.json(mimirAlertmanagerMock) ), - rest.get(`/api/datasources/proxy/uid/${MIMIR_DATASOURCE_UID}/api/v1/status/buildinfo`, (_req, res, ctx) => - res(ctx.status(404)) + http.get(`/api/datasources/proxy/uid/${MIMIR_DATASOURCE_UID}/api/v1/status/buildinfo`, () => + HttpResponse.json( + { + template_files: {}, + alertmanager_config: {}, + }, + { status: 404 } + ) ), // this endpoint will respond if the OnCall plugin is installed - rest.get('/api/plugins/grafana-oncall-app/settings', (_req, res, ctx) => res(ctx.status(404))) + http.get('/api/plugins/grafana-oncall-app/settings', () => HttpResponse.json({}, { status: 404 })) ); + + return server; }; diff --git a/public/app/features/alerting/unified/components/contact-points/__mocks__/server.ts b/public/app/features/alerting/unified/components/contact-points/__mocks__/server.ts deleted file mode 100644 index 951a7bc1eff3c..0000000000000 --- a/public/app/features/alerting/unified/components/contact-points/__mocks__/server.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { rest } from 'msw'; - -import { AlertManagerCortexConfig } from 'app/plugins/datasource/alertmanager/types'; -import { ReceiversStateDTO } from 'app/types'; - -import { setupMswServer } from '../../../mockApi'; - -import alertmanagerMock from './alertmanager.config.mock.json'; -import receiversMock from './receivers.mock.json'; - -const server = setupMswServer(); - -server.use( - // this endpoint is a grafana built-in alertmanager - rest.get('/api/alertmanager/grafana/config/api/v1/alerts', (_req, res, ctx) => - res(ctx.json(alertmanagerMock)) - ), - // this endpoint is only available for the built-in alertmanager - rest.get('/api/alertmanager/grafana/config/api/v1/receivers', (_req, res, ctx) => - res(ctx.json(receiversMock)) - ) -); - -export default server; diff --git a/public/app/features/alerting/unified/components/contact-points/__mocks__/vanillaAlertmanagerServer.ts b/public/app/features/alerting/unified/components/contact-points/__mocks__/vanillaAlertmanagerServer.ts new file mode 100644 index 0000000000000..6c4943e28a2c0 --- /dev/null +++ b/public/app/features/alerting/unified/components/contact-points/__mocks__/vanillaAlertmanagerServer.ts @@ -0,0 +1,22 @@ +import 'whatwg-fetch'; +import { http, HttpResponse } from 'msw'; +import { SetupServer } from 'msw/lib/node'; + +import { AlertmanagerStatus } from 'app/plugins/datasource/alertmanager/types'; + +import vanillaAlertManagerConfig from './alertmanager.vanilla.mock.json'; + +// this one emulates a mimir server setup +export const VANILLA_ALERTMANAGER_DATASOURCE_UID = 'alertmanager'; + +export default (server: SetupServer) => { + server.use( + http.get(`/api/alertmanager/${VANILLA_ALERTMANAGER_DATASOURCE_UID}/api/v2/status`, () => + HttpResponse.json(vanillaAlertManagerConfig) + ), + // this endpoint will respond if the OnCall plugin is installed + http.get('/api/plugins/grafana-oncall-app/settings', () => HttpResponse.json({}, { status: 404 })) + ); + + return server; +}; diff --git a/public/app/features/alerting/unified/components/contact-points/__snapshots__/NewContactPoint.test.tsx.snap b/public/app/features/alerting/unified/components/contact-points/__snapshots__/NewContactPoint.test.tsx.snap new file mode 100644 index 0000000000000..028e88fcac99e --- /dev/null +++ b/public/app/features/alerting/unified/components/contact-points/__snapshots__/NewContactPoint.test.tsx.snap @@ -0,0 +1,147 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`should be able to test and save a receiver 1`] = ` +[ + { + "alert": { + "annotations": { + "description": "Test contact point", + }, + "labels": { + "foo": "bar", + }, + }, + "receivers": [ + { + "grafana_managed_receiver_configs": [ + { + "disableResolveMessage": false, + "name": "test", + "secureSettings": {}, + "settings": { + "addresses": "nteews treerc@egirvaefrana.com", + "singleEmail": false, + }, + "type": "email", + }, + ], + "name": "test", + }, + ], + }, +] +`; + +exports[`should be able to test and save a receiver 2`] = ` +[ + { + "alertmanager_config": { + "receivers": [ + { + "grafana_managed_receiver_configs": [ + { + "disableResolveMessage": false, + "name": "grafana-default-email", + "secureFields": {}, + "settings": { + "addresses": "gilles.demey@grafana.com", + "singleEmail": false, + }, + "type": "email", + "uid": "xeKQrBrnk", + }, + ], + "name": "grafana-default-email", + }, + { + "grafana_managed_receiver_configs": [ + { + "disableResolveMessage": false, + "name": "provisioned-contact-point", + "provenance": "api", + "secureFields": {}, + "settings": { + "addresses": "gilles.demey@grafana.com", + "singleEmail": false, + }, + "type": "email", + "uid": "s8SdCVjnk", + }, + ], + "name": "provisioned-contact-point", + }, + { + "grafana_managed_receiver_configs": [ + { + "disableResolveMessage": false, + "name": "lotsa-emails", + "secureFields": {}, + "settings": { + "addresses": "gilles.demey+1@grafana.com, gilles.demey+2@grafana.com, gilles.demey+3@grafana.com, gilles.demey+4@grafana.com", + "singleEmail": false, + }, + "type": "email", + "uid": "af306c96-35a2-4d6e-908a-4993e245dbb2", + }, + ], + "name": "lotsa-emails", + }, + { + "grafana_managed_receiver_configs": [ + { + "disableResolveMessage": false, + "name": "Slack with multiple channels", + "secureFields": { + "token": true, + }, + "settings": { + "recipient": "test-alerts", + }, + "type": "slack", + "uid": "c02ad56a-31da-46b9-becb-4348ec0890fd", + }, + { + "disableResolveMessage": false, + "name": "Slack with multiple channels", + "secureFields": { + "token": true, + }, + "settings": { + "recipient": "test-alerts2", + }, + "type": "slack", + "uid": "b286a3be-f690-49e2-8605-b075cbace2df", + }, + ], + "name": "Slack with multiple channels", + }, + { + "grafana_managed_receiver_configs": [ + { + "disableResolveMessage": false, + "name": "my ", + "secureSettings": {}, + "settings": { + "addresses": "nteews treerc@egirvaefrana.com", + "singleEmail": false, + }, + "type": "email", + }, + ], + "name": "my ", + }, + ], + "route": { + "receiver": "grafana-default-email", + "routes": [ + { + "receiver": "provisioned-contact-point", + }, + ], + }, + }, + "template_file_provenances": {}, + "template_files": {}, + }, +] +`; diff --git a/public/app/features/alerting/unified/components/contact-points/__snapshots__/useContactPoints.test.tsx.snap b/public/app/features/alerting/unified/components/contact-points/__snapshots__/useContactPoints.test.tsx.snap index 5d26e30334e5b..71e66a38f7caf 100644 --- a/public/app/features/alerting/unified/components/contact-points/__snapshots__/useContactPoints.test.tsx.snap +++ b/public/app/features/alerting/unified/components/contact-points/__snapshots__/useContactPoints.test.tsx.snap @@ -30,21 +30,27 @@ exports[`useContactPoints should return contact points with status 1`] = ` }, ], "name": "grafana-default-email", - "numberOfPolicies": 0, + "policies": [ + { + "receiver": "grafana-default-email", + "route": { + "type": "normal", + }, + }, + ], }, { "grafana_managed_receiver_configs": [ { "disableResolveMessage": false, - "name": "provisioned-contact-point", - "provenance": "api", + "name": "lotsa-emails", "secureFields": {}, "settings": { - "addresses": "gilles.demey@grafana.com", + "addresses": "gilles.demey+1@grafana.com, gilles.demey+2@grafana.com, gilles.demey+3@grafana.com, gilles.demey+4@grafana.com", "singleEmail": false, }, "type": "email", - "uid": "s8SdCVjnk", + "uid": "af306c96-35a2-4d6e-908a-4993e245dbb2", Symbol(receiver_status): { "lastNotifyAttempt": "", "lastNotifyAttemptDuration": "", @@ -58,21 +64,22 @@ exports[`useContactPoints should return contact points with status 1`] = ` Symbol(receiver_plugin_metadata): undefined, }, ], - "name": "provisioned-contact-point", - "numberOfPolicies": 0, + "name": "lotsa-emails", + "policies": [], }, { "grafana_managed_receiver_configs": [ { "disableResolveMessage": false, - "name": "lotsa-emails", + "name": "provisioned-contact-point", + "provenance": "api", "secureFields": {}, "settings": { - "addresses": "gilles.demey+1@grafana.com, gilles.demey+2@grafana.com, gilles.demey+3@grafana.com, gilles.demey+4@grafana.com", + "addresses": "gilles.demey@grafana.com", "singleEmail": false, }, "type": "email", - "uid": "af306c96-35a2-4d6e-908a-4993e245dbb2", + "uid": "s8SdCVjnk", Symbol(receiver_status): { "lastNotifyAttempt": "", "lastNotifyAttemptDuration": "", @@ -86,8 +93,15 @@ exports[`useContactPoints should return contact points with status 1`] = ` Symbol(receiver_plugin_metadata): undefined, }, ], - "name": "lotsa-emails", - "numberOfPolicies": 0, + "name": "provisioned-contact-point", + "policies": [ + { + "receiver": "provisioned-contact-point", + "route": { + "type": "normal", + }, + }, + ], }, { "grafana_managed_receiver_configs": [ @@ -139,10 +153,11 @@ exports[`useContactPoints should return contact points with status 1`] = ` }, ], "name": "Slack with multiple channels", - "numberOfPolicies": 0, + "policies": [], }, ], "error": undefined, "isLoading": false, + "refetchReceivers": [Function], } `; diff --git a/public/app/features/alerting/unified/components/contact-points/components/ContactPointsFilter.tsx b/public/app/features/alerting/unified/components/contact-points/components/ContactPointsFilter.tsx new file mode 100644 index 0000000000000..f1d6ee5c31a2d --- /dev/null +++ b/public/app/features/alerting/unified/components/contact-points/components/ContactPointsFilter.tsx @@ -0,0 +1,61 @@ +import { css } from '@emotion/css'; +import React, { useCallback, useState } from 'react'; +import { useDebounce } from 'react-use'; + +import { Stack } from '@grafana/experimental'; +import { Button, Field, Icon, Input, useStyles2 } from '@grafana/ui'; + +import { useURLSearchParams } from '../../../hooks/useURLSearchParams'; + +const ContactPointsFilter = () => { + const styles = useStyles2(getStyles); + + const [searchParams, setSearchParams] = useURLSearchParams(); + + const defaultValue = searchParams.get('search') ?? ''; + const [searchValue, setSearchValue] = useState(defaultValue); + + const [_, cancel] = useDebounce( + () => { + setSearchParams({ search: searchValue }, true); + }, + 300, + [setSearchParams, searchValue] + ); + + const clear = useCallback(() => { + cancel(); + setSearchValue(''); + setSearchParams({ search: '' }, true); + }, [cancel, setSearchParams]); + + const hasInput = Boolean(defaultValue); + + return ( + + + } + onChange={(event) => { + setSearchValue(event.currentTarget.value); + }} + value={searchValue} + /> + + + + ); +}; + +const getStyles = () => ({ + noBottom: css({ + marginBottom: 0, + }), +}); + +export { ContactPointsFilter }; diff --git a/public/app/features/alerting/unified/components/contact-points/components/GlobalConfig.tsx b/public/app/features/alerting/unified/components/contact-points/components/GlobalConfig.tsx new file mode 100644 index 0000000000000..1d493119eb654 --- /dev/null +++ b/public/app/features/alerting/unified/components/contact-points/components/GlobalConfig.tsx @@ -0,0 +1,32 @@ +import React from 'react'; + +import { Alert } from '@grafana/ui'; + +import { useAlertmanagerConfig } from '../../../hooks/useAlertmanagerConfig'; +import { useAlertmanager } from '../../../state/AlertmanagerContext'; +import { GlobalConfigForm } from '../../receivers/GlobalConfigForm'; + +const NewMessageTemplate = () => { + const { selectedAlertmanager } = useAlertmanager(); + const { data, isLoading, error } = useAlertmanagerConfig(selectedAlertmanager); + + if (isLoading && !data) { + return 'loading...'; + } + + if (error) { + return ( + + {String(error)} + + ); + } + + if (!data) { + return null; + } + + return ; +}; + +export default NewMessageTemplate; diff --git a/public/app/features/alerting/unified/components/contact-points/components/GlobalConfigAlert.tsx b/public/app/features/alerting/unified/components/contact-points/components/GlobalConfigAlert.tsx new file mode 100644 index 0000000000000..e277b007ac676 --- /dev/null +++ b/public/app/features/alerting/unified/components/contact-points/components/GlobalConfigAlert.tsx @@ -0,0 +1,30 @@ +import React from 'react'; + +import { Alert, LinkButton } from '@grafana/ui'; + +import { AlertmanagerAction } from '../../../hooks/useAbilities'; +import { isVanillaPrometheusAlertManagerDataSource } from '../../../utils/datasource'; +import { makeAMLink } from '../../../utils/misc'; +import { Authorize } from '../../Authorize'; + +interface GlobalConfigAlertProps { + alertManagerName: string; +} + +export const GlobalConfigAlert = ({ alertManagerName }: GlobalConfigAlertProps) => { + const isVanillaAM = isVanillaPrometheusAlertManagerDataSource(alertManagerName); + + return ( + + +

+ For each external Alertmanager you can define global settings, like server addresses, usernames and password, + for all the supported contact points. +

+ + {isVanillaAM ? 'View global config' : 'Edit global config'} + +
+
+ ); +}; diff --git a/public/app/features/alerting/unified/components/contact-points/Modals.tsx b/public/app/features/alerting/unified/components/contact-points/components/Modals.tsx similarity index 95% rename from public/app/features/alerting/unified/components/contact-points/Modals.tsx rename to public/app/features/alerting/unified/components/contact-points/components/Modals.tsx index 6c4fe8ec7df4e..371f4c860d464 100644 --- a/public/app/features/alerting/unified/components/contact-points/Modals.tsx +++ b/public/app/features/alerting/unified/components/contact-points/components/Modals.tsx @@ -2,6 +2,8 @@ import React, { useCallback, useMemo, useState } from 'react'; import { Button, Modal, ModalProps } from '@grafana/ui'; +import { stringifyErrorLike } from '../../../utils/misc'; + type ModalHook = [JSX.Element, (item: T) => void, () => void]; /** @@ -83,7 +85,9 @@ const ErrorModal = ({ isOpen, onDismiss, error }: ErrorModalProps) => ( >

Failed to update your configuration:

- {String(error)} +

+        {stringifyErrorLike(error)}
+      

); diff --git a/public/app/features/alerting/unified/components/contact-points/components/UnusedBadge.tsx b/public/app/features/alerting/unified/components/contact-points/components/UnusedBadge.tsx new file mode 100644 index 0000000000000..8d459985ee433 --- /dev/null +++ b/public/app/features/alerting/unified/components/contact-points/components/UnusedBadge.tsx @@ -0,0 +1,14 @@ +import React from 'react'; + +import { Badge } from '@grafana/ui'; + +export const UnusedContactPointBadge = () => ( + +); diff --git a/public/app/features/alerting/unified/components/contact-points/useContactPoints.test.tsx b/public/app/features/alerting/unified/components/contact-points/useContactPoints.test.tsx index b5c12d7988fc2..50f4fdbd03d40 100644 --- a/public/app/features/alerting/unified/components/contact-points/useContactPoints.test.tsx +++ b/public/app/features/alerting/unified/components/contact-points/useContactPoints.test.tsx @@ -4,14 +4,19 @@ import { TestProvider } from 'test/helpers/TestProvider'; import { AccessControlAction } from 'app/types'; +import { setupMswServer } from '../../mockApi'; import { grantUserPermissions } from '../../mocks'; import { AlertmanagerProvider } from '../../state/AlertmanagerContext'; import setupGrafanaManagedServer from './__mocks__/grafanaManagedServer'; import { useContactPointsWithStatus } from './useContactPoints'; +const server = setupMswServer(); + describe('useContactPoints', () => { - setupGrafanaManagedServer(); + beforeEach(() => { + setupGrafanaManagedServer(server); + }); beforeAll(() => { grantUserPermissions([AccessControlAction.AlertingNotificationsRead]); diff --git a/public/app/features/alerting/unified/components/contact-points/useContactPoints.tsx b/public/app/features/alerting/unified/components/contact-points/useContactPoints.tsx index 555341a9f7675..8d6ca99a720b5 100644 --- a/public/app/features/alerting/unified/components/contact-points/useContactPoints.tsx +++ b/public/app/features/alerting/unified/components/contact-points/useContactPoints.tsx @@ -7,7 +7,7 @@ import { produce } from 'immer'; import { remove } from 'lodash'; import { alertmanagerApi } from '../../api/alertmanagerApi'; -import { onCallApi } from '../../api/onCallApi'; +import { onCallApi, OnCallIntegrationDTO } from '../../api/onCallApi'; import { usePluginBridge } from '../../hooks/usePluginBridge'; import { useAlertmanager } from '../../state/AlertmanagerContext'; import { SupportedPlugin } from '../../types/pluginBridges'; @@ -27,9 +27,22 @@ const RECEIVER_STATUS_POLLING_INTERVAL = 10 * 1000; // 10 seconds * 3. (if available) additional metadata about Grafana Managed contact points * 4. (if available) the OnCall plugin metadata */ -export function useContactPointsWithStatus() { +interface UseContactPointsWithStatusOptions { + includePoliciesCount: boolean; + receiverStatusPollingInterval?: number; +} + +const defaultHookOptions = { + includePoliciesCount: true, + receiverStatusPollingInterval: RECEIVER_STATUS_POLLING_INTERVAL, +}; + +export function useContactPointsWithStatus({ + includePoliciesCount, + receiverStatusPollingInterval, +}: UseContactPointsWithStatusOptions = defaultHookOptions) { const { selectedAlertmanager, isGrafanaAlertmanager } = useAlertmanager(); - const { installed: onCallPluginInstalled = false, loading: onCallPluginStatusLoading } = usePluginBridge( + const { installed: onCallPluginInstalled, loading: onCallPluginStatusLoading } = usePluginBridge( SupportedPlugin.OnCall ); @@ -37,8 +50,8 @@ export function useContactPointsWithStatus() { const fetchContactPointsStatus = alertmanagerApi.endpoints.getContactPointsStatus.useQuery(undefined, { refetchOnFocus: true, refetchOnReconnect: true, - // re-fetch status every so often for up-to-date information - pollingInterval: RECEIVER_STATUS_POLLING_INTERVAL, + // re-fetch status every so often for up-to-date information, allow disabling by passing "receiverStatusPollingInterval: 0" + pollingInterval: receiverStatusPollingInterval, // skip fetching receiver statuses if not Grafana AM skip: !isGrafanaAlertmanager, }); @@ -55,7 +68,16 @@ export function useContactPointsWithStatus() { skip: !onCallPluginInstalled || !isGrafanaAlertmanager, }); + // null = no installed, undefined = loading, [n] is installed with integrations + let onCallMetadata: null | undefined | OnCallIntegrationDTO[] = undefined; + if (onCallPluginInstalled) { + onCallMetadata = onCallIntegrations ?? []; + } else if (onCallPluginInstalled === false) { + onCallMetadata = null; + } + // fetch the latest config from the Alertmanager + // we use this endpoint only when we need to get the number of policies const fetchAlertmanagerConfiguration = alertmanagerApi.endpoints.getAlertmanagerConfiguration.useQuery( selectedAlertmanager!, { @@ -65,30 +87,56 @@ export function useContactPointsWithStatus() { ...result, contactPoints: result.data ? enhanceContactPointsWithMetadata( - result.data, fetchContactPointsStatus.data, fetchReceiverMetadata.data, - onCallPluginInstalled ? onCallIntegrations ?? [] : null + onCallMetadata, + result.data.alertmanager_config.receivers ?? [], + result.data ) : [], }), + skip: !includePoliciesCount, } ); + // for Grafana Managed Alertmanager, we use the new read-only endpoint for getting the list of contact points + const fetchGrafanaContactPoints = alertmanagerApi.endpoints.getContactPointsList.useQuery(undefined, { + refetchOnFocus: true, + refetchOnReconnect: true, + selectFromResult: (result) => ({ + ...result, + contactPoints: result.data + ? enhanceContactPointsWithMetadata( + fetchContactPointsStatus.data, + fetchReceiverMetadata.data, + onCallMetadata, + result.data, // contact points from the new readonly endpoint + undefined //no config data + ) + : [], + }), + skip: includePoliciesCount || !isGrafanaAlertmanager, + }); + // we will fail silently for fetching OnCall plugin status and integrations - const error = fetchAlertmanagerConfiguration.error ?? fetchContactPointsStatus.error; + const error = + fetchAlertmanagerConfiguration.error || fetchGrafanaContactPoints.error || fetchContactPointsStatus.error; const isLoading = fetchAlertmanagerConfiguration.isLoading || + fetchGrafanaContactPoints.isLoading || fetchContactPointsStatus.isLoading || onCallPluginStatusLoading || onCallPluginIntegrationsLoading; - const contactPoints = fetchAlertmanagerConfiguration.contactPoints; - + const unsortedContactPoints = includePoliciesCount + ? fetchAlertmanagerConfiguration.contactPoints + : fetchGrafanaContactPoints.contactPoints; + const contactPoints = unsortedContactPoints.sort((a, b) => a.name.localeCompare(b.name)); return { error, isLoading, contactPoints, + refetchReceivers: fetchGrafanaContactPoints.refetch, }; } diff --git a/public/app/features/alerting/unified/components/contact-points/utils.test.ts b/public/app/features/alerting/unified/components/contact-points/utils.test.ts new file mode 100644 index 0000000000000..4e340e33577e2 --- /dev/null +++ b/public/app/features/alerting/unified/components/contact-points/utils.test.ts @@ -0,0 +1,157 @@ +import { GrafanaManagedContactPoint } from 'app/plugins/datasource/alertmanager/types'; + +import { ReceiverTypes } from '../receivers/grafanaAppReceivers/onCall/onCall'; + +import { RECEIVER_META_KEY, RECEIVER_PLUGIN_META_KEY } from './useContactPoints'; +import { + ReceiverConfigWithMetadata, + getReceiverDescription, + isAutoGeneratedPolicy, + isProvisioned, + summarizeEmailAddresses, +} from './utils'; + +describe('isProvisioned', () => { + it('should return true when at least one receiver is provisioned', () => { + const contactPoint: GrafanaManagedContactPoint = { + name: 'my-contact-point', + grafana_managed_receiver_configs: [ + { name: 'email', provenance: 'api', type: 'email', disableResolveMessage: false, settings: {} }, + ], + }; + + expect(isProvisioned(contactPoint)).toBe(true); + }); + + it('should return false when no receiver was provisioned', () => { + const contactPoint: GrafanaManagedContactPoint = { + name: 'my-contact-point', + grafana_managed_receiver_configs: [ + { name: 'email', provenance: undefined, type: 'email', disableResolveMessage: false, settings: {} }, + ], + }; + + expect(isProvisioned(contactPoint)).toBe(false); + }); +}); + +describe('isAutoGeneratedPolicy', () => { + it('should return false when not enabled', () => { + expect(isAutoGeneratedPolicy({})).toBe(false); + }); +}); + +describe('getReceiverDescription', () => { + it('should show multiple email addresses', () => { + const receiver: ReceiverConfigWithMetadata = { + name: 'email', + provenance: undefined, + type: 'email', + disableResolveMessage: false, + settings: { addresses: 'test1@test.com,test2@test.com,test3@test.com,test4@test.com' }, + [RECEIVER_META_KEY]: { + name: 'Email', + description: 'The email receiver', + }, + }; + + expect(getReceiverDescription(receiver)).toBe('test1@test.com, test2@test.com, test3@test.com, +1 more'); + }); + + it('should work for Slack', () => { + const output = '#channel'; + const receiver1: ReceiverConfigWithMetadata = { + name: 'slack', + provenance: undefined, + type: 'slack', + disableResolveMessage: false, + settings: { recipient: '#channel' }, + [RECEIVER_META_KEY]: { + name: 'Slack', + description: 'The Slack receiver', + }, + }; + + const receiver2: ReceiverConfigWithMetadata = { + name: 'slack', + provenance: undefined, + type: 'slack', + disableResolveMessage: false, + settings: { recipient: 'channel' }, + [RECEIVER_META_KEY]: { + name: 'Slack', + description: 'The Slack receiver', + }, + }; + + expect(getReceiverDescription(receiver1)).toBe(output); + expect(getReceiverDescription(receiver2)).toBe(output); + }); + + it('should work for OnCall', () => { + const output = 'The OnCall receiver'; + const input: ReceiverConfigWithMetadata = { + name: 'my oncall', + provenance: undefined, + type: ReceiverTypes.OnCall, + disableResolveMessage: false, + settings: {}, + [RECEIVER_PLUGIN_META_KEY]: { + description: output, + icon: '', + title: '', + }, + [RECEIVER_META_KEY]: { + name: '', + }, + }; + + expect(getReceiverDescription(input)).toBe(output); + }); + + it('should work for any type', () => { + const output = 'Some description of the receiver'; + const input: ReceiverConfigWithMetadata = { + name: 'some receiver', + provenance: undefined, + type: 'some', + disableResolveMessage: false, + settings: {}, + [RECEIVER_META_KEY]: { + name: 'Some Receiver', + description: output, + }, + }; + + expect(getReceiverDescription(input)).toBe(output); + }); + + it('should work for any type with no description', () => { + const input: ReceiverConfigWithMetadata = { + name: 'some receiver', + provenance: undefined, + type: 'some', + disableResolveMessage: false, + settings: {}, + [RECEIVER_META_KEY]: { + name: 'Some Receiver', + }, + }; + + expect(getReceiverDescription(input)).toBe(undefined); + }); +}); + +describe('summarizeEmailAddresses', () => { + it('should work with one email address', () => { + expect(summarizeEmailAddresses('test@test.com')).toBe('test@test.com'); + }); + + it('should work with multiple types of separators', () => { + const output = 'foo@foo.com, bar@bar.com'; + + expect(summarizeEmailAddresses('foo@foo.com, bar@bar.com')).toBe(output); + expect(summarizeEmailAddresses(' foo@foo.com; bar@bar.com')).toBe(output); + expect(summarizeEmailAddresses('foo@foo.com\n bar@bar.com ')).toBe(output); + }); +}); diff --git a/public/app/features/alerting/unified/components/contact-points/utils.ts b/public/app/features/alerting/unified/components/contact-points/utils.ts index 414d7bbc00cf6..0895a2e564693 100644 --- a/public/app/features/alerting/unified/components/contact-points/utils.ts +++ b/public/app/features/alerting/unified/components/contact-points/utils.ts @@ -1,10 +1,13 @@ -import { countBy, split, trim, upperFirst } from 'lodash'; +import { difference, groupBy, take, trim, upperFirst } from 'lodash'; import { ReactNode } from 'react'; +import { config } from '@grafana/runtime'; import { AlertManagerCortexConfig, GrafanaManagedContactPoint, GrafanaManagedReceiverConfig, + MatcherOperator, + Receiver, Route, } from 'app/plugins/datasource/alertmanager/types'; import { NotifierDTO, NotifierStatus, ReceiversStateDTO } from 'app/types'; @@ -17,6 +20,8 @@ import { getOnCallMetadata, ReceiverPluginMetadata } from '../receivers/grafanaA import { RECEIVER_META_KEY, RECEIVER_PLUGIN_META_KEY, RECEIVER_STATUS_KEY } from './useContactPoints'; +const AUTOGENERATED_RECEIVER_POLICY_MATCHER_KEY = '__grafana_receiver__'; + export function isProvisioned(contactPoint: GrafanaManagedContactPoint) { // for some reason the provenance is on the receiver and not the entire contact point const provenance = contactPoint.grafana_managed_receiver_configs?.find((receiver) => receiver.provenance)?.provenance; @@ -26,21 +31,30 @@ export function isProvisioned(contactPoint: GrafanaManagedContactPoint) { // TODO we should really add some type information to these receiver settings... export function getReceiverDescription(receiver: ReceiverConfigWithMetadata): ReactNode | undefined { + if (!receiver.settings) { + return undefined; + } switch (receiver.type) { case 'email': { const hasEmailAddresses = 'addresses' in receiver.settings; // when dealing with alertmanager email_configs we don't normalize the settings return hasEmailAddresses ? summarizeEmailAddresses(receiver.settings['addresses']) : undefined; } case 'slack': { - const channelName = receiver.settings['recipient']; - return channelName ? `#${channelName}` : undefined; + const recipient: string | undefined = receiver.settings['recipient']; + if (!recipient) { + return; + } + + // Slack channel name might have a "#" in the recipient already + const channelName = recipient.replace(/^#/, ''); + return `#${channelName}`; } case 'kafka': { - const topicName = receiver.settings['kafkaTopic']; + const topicName: string | undefined = receiver.settings['kafkaTopic']; return topicName; } case 'webhook': { - const url = receiver.settings['url']; + const url: string | undefined = receiver.settings['url']; return url; } case ReceiverTypes.OnCall: { @@ -53,20 +67,22 @@ export function getReceiverDescription(receiver: ReceiverConfigWithMetadata): Re // input: foo+1@bar.com, foo+2@bar.com, foo+3@bar.com, foo+4@bar.com // output: foo+1@bar.com, foo+2@bar.com, +2 more -function summarizeEmailAddresses(addresses: string): string { +export function summarizeEmailAddresses(addresses: string): string { const MAX_ADDRESSES_SHOWN = 3; const SUPPORTED_SEPARATORS = /,|;|\n+/g; + // split all email addresses const emails = addresses.trim().split(SUPPORTED_SEPARATORS).map(trim); - const notShown = emails.length - MAX_ADDRESSES_SHOWN; + // grab the first 3 and the rest + const summary = take(emails, MAX_ADDRESSES_SHOWN); + const rest = difference(emails, summary); - const truncatedAddresses = split(addresses, SUPPORTED_SEPARATORS, MAX_ADDRESSES_SHOWN); - if (notShown > 0) { - truncatedAddresses.push(`+${notShown} more`); + if (rest.length) { + summary.push(`+${rest.length} more`); } - return truncatedAddresses.join(', '); + return summary.join(', '); } // Grafana Managed contact points have receivers with additional diagnostics @@ -83,7 +99,7 @@ export interface ReceiverConfigWithMetadata extends GrafanaManagedReceiverConfig } export interface ContactPointWithMetadata extends GrafanaManagedContactPoint { - numberOfPolicies: number; + policies?: RouteReference[]; // now is optional as we don't have the data from the read-only endpoint grafana_managed_receiver_configs: ReceiverConfigWithMetadata[]; } @@ -91,30 +107,36 @@ export interface ContactPointWithMetadata extends GrafanaManagedContactPoint { * This function adds the status information for each of the integrations (contact point types) in a contact point * 1. we iterate over all contact points * 2. for each contact point we "enhance" it with the status or "undefined" for vanilla Alertmanager + * contactPoints: list of contact points + * alertmanagerConfiguration: optional as is passed when we need to get number of policies for each contact point + * and we prefer using the data from the read-only endpoint. */ export function enhanceContactPointsWithMetadata( - result: AlertManagerCortexConfig, status: ReceiversStateDTO[] = [], notifiers: NotifierDTO[] = [], - onCallIntegrations: OnCallIntegrationDTO[] | null + onCallIntegrations: OnCallIntegrationDTO[] | undefined | null, + contactPoints: Receiver[], + alertmanagerConfiguration?: AlertManagerCortexConfig ): ContactPointWithMetadata[] { - const contactPoints = result.alertmanager_config.receivers ?? []; - // compute the entire inherited tree before finding what notification policies are using a particular contact point - const fullyInheritedTree = computeInheritedTree(result?.alertmanager_config?.route ?? {}); + const fullyInheritedTree = computeInheritedTree(alertmanagerConfiguration?.alertmanager_config?.route ?? {}); const usedContactPoints = getUsedContactPoints(fullyInheritedTree); - const usedContactPointsByName = countBy(usedContactPoints); + const usedContactPointsByName = groupBy(usedContactPoints, 'receiver'); + + const contactPointsList = alertmanagerConfiguration + ? alertmanagerConfiguration?.alertmanager_config.receivers ?? [] + : contactPoints ?? []; - return contactPoints.map((contactPoint) => { + return contactPointsList.map((contactPoint) => { const receivers = extractReceivers(contactPoint); const statusForReceiver = status.find((status) => status.name === contactPoint.name); return { ...contactPoint, - numberOfPolicies: usedContactPointsByName[contactPoint.name] ?? 0, + policies: + alertmanagerConfiguration && usedContactPointsByName && (usedContactPointsByName[contactPoint.name] ?? []), grafana_managed_receiver_configs: receivers.map((receiver, index) => { const isOnCallReceiver = receiver.type === ReceiverTypes.OnCall; - return { ...receiver, [RECEIVER_STATUS_KEY]: statusForReceiver?.integrations[index], @@ -127,10 +149,43 @@ export function enhanceContactPointsWithMetadata( }); } -export function getUsedContactPoints(route: Route): string[] { +export function isAutoGeneratedPolicy(route: Route) { + const simplifiedRoutingToggleEnabled = config.featureToggles.alertingSimplifiedRouting ?? false; + if (!simplifiedRoutingToggleEnabled) { + return false; + } + if (!route.object_matchers) { + return false; + } + return ( + route.object_matchers.some((objectMatcher) => { + return ( + objectMatcher[0] === AUTOGENERATED_RECEIVER_POLICY_MATCHER_KEY && objectMatcher[1] === MatcherOperator.equal + ); + }) ?? false + ); +} + +export interface RouteReference { + receiver: string; + route: { + type: 'auto-generated' | 'normal'; + }; +} + +export function getUsedContactPoints(route: Route): RouteReference[] { const childrenContactPoints = route.routes?.flatMap((route) => getUsedContactPoints(route)) ?? []; + if (route.receiver) { - return [route.receiver, ...childrenContactPoints]; + return [ + { + receiver: route.receiver, + route: { + type: isAutoGeneratedPolicy(route) ? 'auto-generated' : 'normal', + }, + }, + ...childrenContactPoints, + ]; } return childrenContactPoints; diff --git a/public/app/features/alerting/unified/components/export/FileExportPreview.tsx b/public/app/features/alerting/unified/components/export/FileExportPreview.tsx index 2a7f5c06ee6d2..df5fcfd949535 100644 --- a/public/app/features/alerting/unified/components/export/FileExportPreview.tsx +++ b/public/app/features/alerting/unified/components/export/FileExportPreview.tsx @@ -4,9 +4,9 @@ import React, { useCallback, useMemo } from 'react'; import AutoSizer from 'react-virtualized-auto-sizer'; import { GrafanaTheme2 } from '@grafana/data'; -import { Button, ClipboardButton, CodeEditor, useStyles2 } from '@grafana/ui'; +import { Alert, Button, ClipboardButton, CodeEditor, TextLink, useStyles2 } from '@grafana/ui'; -import { allGrafanaExportProviders, ExportFormats } from './providers'; +import { allGrafanaExportProviders, ExportFormats, ExportProvider, ProvisioningType } from './providers'; interface FileExportPreviewProps { format: ExportFormats; @@ -19,6 +19,7 @@ interface FileExportPreviewProps { export function FileExportPreview({ format, textDefinition, downloadFileName, onClose }: FileExportPreviewProps) { const styles = useStyles2(fileExportPreviewStyles); + const provider = allGrafanaExportProviders[format]; const onDownload = useCallback(() => { const blob = new Blob([textDefinition], { @@ -28,13 +29,13 @@ export function FileExportPreview({ format, textDefinition, downloadFileName, on }, [textDefinition, downloadFileName, format]); const formattedTextDefinition = useMemo(() => { - const provider = allGrafanaExportProviders[format]; return provider.formatter ? provider.formatter(textDefinition) : textDefinition; - }, [format, textDefinition]); + }, [provider, textDefinition]); return ( // TODO Handle empty content
+
{({ height }) => ( @@ -87,3 +88,60 @@ const fileExportPreviewStyles = (theme: GrafanaTheme2) => ({ gap: ${theme.spacing(1)}; `, }); + +function FileExportInlineDocumentation({ exportProvider }: { exportProvider: ExportProvider }) { + const { name, type } = exportProvider; + + const exportInlineDoc: Record = { + file: { + title: 'File-provisioning format', + component: ( + <> + {name} format is only valid for File Provisioning.{' '} + + Read more in the docs. + + + ), + }, + api: { + title: 'API-provisioning format', + component: ( + <> + {name} format is only valid for API Provisioning.{' '} + + Read more in the docs. + + + ), + }, + terraform: { + title: 'Terraform-provisioning format', + component: ( + <> + {name} format is only valid for Terraform Provisioning.{' '} + + Read more in the docs. + + + ), + }, + }; + + const { title, component } = exportInlineDoc[type]; + + return ( + + {component} + + ); +} diff --git a/public/app/features/alerting/unified/components/export/GrafanaModifyExport.test.tsx b/public/app/features/alerting/unified/components/export/GrafanaModifyExport.test.tsx index 0f44e23c14fdf..48175f94ccfc0 100644 --- a/public/app/features/alerting/unified/components/export/GrafanaModifyExport.test.tsx +++ b/public/app/features/alerting/unified/components/export/GrafanaModifyExport.test.tsx @@ -2,17 +2,16 @@ import { render, waitFor, waitForElementToBeRemoved } from '@testing-library/rea import userEvent from '@testing-library/user-event'; import React from 'react'; import { Route } from 'react-router-dom'; -import { AutoSizerProps } from 'react-virtualized-auto-sizer'; +import { Props } from 'react-virtualized-auto-sizer'; import { byRole, byTestId, byText } from 'testing-library-selector'; -import { selectors } from '@grafana/e2e-selectors'; import { locationService } from '@grafana/runtime'; import { TestProvider } from '../../../../../../test/helpers/TestProvider'; import { AlertmanagerChoice } from '../../../../../plugins/datasource/alertmanager/types'; import { DashboardSearchItemType } from '../../../../search/types'; import { mockAlertRuleApi, mockApi, mockExportApi, mockSearchApi, setupMswServer } from '../../mockApi'; -import { getGrafanaRule, mockDataSource } from '../../mocks'; +import { getGrafanaRule, mockDashboardSearchItem, mockDataSource } from '../../mocks'; import { mockAlertmanagerChoiceResponse } from '../../mocks/alertmanagerApi'; import { setupDataSources } from '../../testSetup/datasources'; import { GRAFANA_RULES_SOURCE_NAME } from '../../utils/datasource'; @@ -24,7 +23,13 @@ jest.mock('app/core/components/AppChrome/AppChromeUpdate', () => ({ })); jest.mock('react-virtualized-auto-sizer', () => { - return ({ children }: AutoSizerProps) => children({ height: 600, width: 1 }); + return ({ children }: Props) => + children({ + height: 600, + scaledHeight: 600, + scaledWidth: 1, + width: 1, + }); }); jest.mock('@grafana/ui', () => ({ ...jest.requireActual('@grafana/ui'), @@ -36,7 +41,6 @@ const ui = { form: { nameInput: byRole('textbox', { name: 'name' }), folder: byTestId('folder-picker'), - folderContainer: byTestId(selectors.components.FolderPicker.containerV2), group: byTestId('group-picker'), annotationKey: (idx: number) => byTestId(`annotation-key-${idx}`), annotationValue: (idx: number) => byTestId(`annotation-value-${idx}`), @@ -75,8 +79,7 @@ describe('GrafanaModifyExport', () => { const grafanaRule = getGrafanaRule(undefined, { uid: 'test-rule-uid', title: 'cpu-usage', - namespace_uid: 'folder-test-uid', - namespace_id: 1, + namespace_uid: 'folderUID1', data: [ { refId: 'A', @@ -96,26 +99,25 @@ describe('GrafanaModifyExport', () => { it('Should render edit form for the specified rule', async () => { mockApi(server).eval({ results: { A: { frames: [] } } }); mockSearchApi(server).search([ - { + mockDashboardSearchItem({ title: grafanaRule.namespace.name, - uid: 'folder-test-uid', - id: 1, + uid: 'folderUID1', url: '', tags: [], type: DashboardSearchItemType.DashFolder, - }, + }), ]); mockAlertRuleApi(server).rulerRules(GRAFANA_RULES_SOURCE_NAME, { [grafanaRule.namespace.name]: [{ name: grafanaRule.group.name, interval: '1m', rules: [grafanaRule.rulerRule!] }], }); - mockAlertRuleApi(server).rulerRuleGroup( - GRAFANA_RULES_SOURCE_NAME, - grafanaRule.namespace.name, - grafanaRule.group.name, - { name: grafanaRule.group.name, interval: '1m', rules: [grafanaRule.rulerRule!] } - ); - mockExportApi(server).modifiedExport(grafanaRule.namespace.name, { + mockAlertRuleApi(server).rulerRuleGroup(GRAFANA_RULES_SOURCE_NAME, 'folderUID1', grafanaRule.group.name, { + name: grafanaRule.group.name, + interval: '1m', + rules: [grafanaRule.rulerRule!], + }); + mockExportApi(server).modifiedExport('folderUID1', { yaml: 'Yaml Export Content', + json: 'Json Export Content', }); const user = userEvent.setup(); @@ -131,6 +133,7 @@ describe('GrafanaModifyExport', () => { expect(drawer).toBeInTheDocument(); expect(ui.exportDrawer.yamlTab.get(drawer)).toHaveAttribute('aria-selected', 'true'); + await waitFor(() => { expect(ui.exportDrawer.editor.get(drawer)).toHaveTextContent('Yaml Export Content'); }); diff --git a/public/app/features/alerting/unified/components/export/GrafanaModifyExport.tsx b/public/app/features/alerting/unified/components/export/GrafanaModifyExport.tsx index 02a671b35eace..3e6a3b62c7633 100644 --- a/public/app/features/alerting/unified/components/export/GrafanaModifyExport.tsx +++ b/public/app/features/alerting/unified/components/export/GrafanaModifyExport.tsx @@ -66,7 +66,7 @@ export default function GrafanaModifyExport({ match }: GrafanaModifyExportProps) if (!alertRule && !loading && !loadingBuildInfo) { // alert rule does not exist return ( - + + void; +} + +const GrafanaMuteTimingsExporterPreview = ({ exportFormat, onClose }: MuteTimingsExporterPreviewProps) => { + const { currentData: muteTimingsDefinition = '', isFetching } = alertRuleApi.useExportMuteTimingsQuery({ + format: exportFormat, + }); + const downloadFileName = `mute-timings-${new Date().getTime()}`; + + if (isFetching) { + return ; + } + return ( + + ); +}; + +interface GrafanaMuteTimingExporterPreviewProps extends MuteTimingsExporterPreviewProps { + muteTimingName: string; +} +const GrafanaMuteTimingExporterPreview = ({ + exportFormat, + onClose, + muteTimingName, +}: GrafanaMuteTimingExporterPreviewProps) => { + const { currentData: muteTimingsDefinition = '', isFetching } = alertRuleApi.useExportMuteTimingQuery({ + format: exportFormat, + muteTiming: muteTimingName, + }); + const downloadFileName = `mute-timing-${muteTimingName}-${new Date().getTime()}`; + + if (isFetching) { + return ; + } + return ( + + ); +}; +interface GrafanaMuteTimingsExporterProps { + onClose: () => void; + muteTimingName?: string; +} + +export const GrafanaMuteTimingsExporter = ({ onClose, muteTimingName }: GrafanaMuteTimingsExporterProps) => { + const [activeTab, setActiveTab] = useState('yaml'); + return ( + + {muteTimingName ? ( + + ) : ( + + )} + + ); +}; diff --git a/public/app/features/alerting/unified/components/export/providers.ts b/public/app/features/alerting/unified/components/export/providers.ts index 356909609bb08..518ced9e5f2c7 100644 --- a/public/app/features/alerting/unified/components/export/providers.ts +++ b/public/app/features/alerting/unified/components/export/providers.ts @@ -1,12 +1,16 @@ +export type ProvisioningType = 'file' | 'api' | 'terraform'; + export interface ExportProvider { name: string; exportFormat: TFormat; + type: ProvisioningType; formatter?: (raw: string) => string; } export const JsonExportProvider: ExportProvider<'json'> = { name: 'JSON', exportFormat: 'json', + type: 'file', formatter: (raw: string) => { try { return JSON.stringify(JSON.parse(raw), null, 4); @@ -19,11 +23,13 @@ export const JsonExportProvider: ExportProvider<'json'> = { export const YamlExportProvider: ExportProvider<'yaml'> = { name: 'YAML', exportFormat: 'yaml', + type: 'file', }; export const HclExportProvider: ExportProvider<'hcl'> = { name: 'Terraform (HCL)', exportFormat: 'hcl', + type: 'terraform', }; export const allGrafanaExportProviders = { diff --git a/public/app/features/alerting/unified/components/expressions/Expression.tsx b/public/app/features/alerting/unified/components/expressions/Expression.tsx index efc5bbd6b8bd5..73db0a2f5bfaf 100644 --- a/public/app/features/alerting/unified/components/expressions/Expression.tsx +++ b/public/app/features/alerting/unified/components/expressions/Expression.tsx @@ -1,14 +1,15 @@ import { css, cx } from '@emotion/css'; import { uniqueId } from 'lodash'; import React, { FC, useCallback, useState } from 'react'; +import { useFormContext } from 'react-hook-form'; import { DataFrame, dateTimeFormat, GrafanaTheme2, isTimeSeriesFrames, LoadingState, PanelData } from '@grafana/data'; -import { Stack } from '@grafana/experimental'; -import { AutoSizeInput, Button, clearButtonStyles, IconButton, useStyles2 } from '@grafana/ui'; +import { Alert, AutoSizeInput, Button, clearButtonStyles, IconButton, Stack, useStyles2 } from '@grafana/ui'; import { ClassicConditions } from 'app/features/expressions/components/ClassicConditions'; import { Math } from 'app/features/expressions/components/Math'; import { Reduce } from 'app/features/expressions/components/Reduce'; import { Resample } from 'app/features/expressions/components/Resample'; +import { SqlExpr } from 'app/features/expressions/components/SqlExpr'; import { Threshold } from 'app/features/expressions/components/Threshold'; import { ExpressionQuery, @@ -57,6 +58,19 @@ export const Expression: FC = ({ const queryType = query?.type; + const { setError, clearErrors } = useFormContext(); + + const onQueriesValidationError = useCallback( + (errorMsg: string | undefined) => { + if (errorMsg) { + setError('queries', { type: 'custom', message: errorMsg }); + } else { + clearErrors('queries'); + } + }, + [setError, clearErrors] + ); + const isLoading = data && Object.values(data).some((d) => Boolean(d) && d.state === LoadingState.Loading); const hasResults = Array.isArray(data?.series) && !isLoading; const series = data?.series ?? []; @@ -86,13 +100,25 @@ export const Expression: FC = ({ return ; case ExpressionQueryType.threshold: - return ; + return ( + + ); + + case ExpressionQueryType.sql: + return ; default: return <>Expression not supported: {query.type}; } }, - [onChangeQuery, queries] + [onChangeQuery, queries, onQueriesValidationError] ); const selectedExpressionType = expressionTypes.find((o) => o.value === queryType); const selectedExpressionDescription = selectedExpressionType?.description ?? ''; @@ -114,12 +140,20 @@ export const Expression: FC = ({ onUpdateRefId={(newRefId) => onUpdateRefId(query.refId, newRefId)} onUpdateExpressionType={(type) => onUpdateExpressionType(query.refId, type)} onSetCondition={onSetCondition} - warning={warning} - error={error} query={query} alertCondition={alertCondition} />
+ {error && ( + + {error.message} + + )} + {warning && ( + + {warning.message} + + )}
{selectedExpressionDescription}
{renderExpressionType(query)}
@@ -253,8 +287,6 @@ interface HeaderProps { onUpdateRefId: (refId: string) => void; onRemoveExpression: () => void; onUpdateExpressionType: (type: ExpressionQueryType) => void; - warning?: Error; - error?: Error; onSetCondition: (refId: string) => void; query: ExpressionQuery; alertCondition: boolean; @@ -265,11 +297,9 @@ const Header: FC = ({ queryType, onUpdateRefId, onRemoveExpression, - warning, onSetCondition, alertCondition, query, - error, }) => { const styles = useStyles2(getStyles); const clearButton = useStyles2(clearButtonStyles); @@ -288,7 +318,7 @@ const Header: FC = ({ return (
- + {!editingRefId && ( + + + {/* + This switch is only available for Grafana Alertmanager, as for now, Grafana alert manager doesn't support this feature + It hanldes empty list as undefined making impossible the use of an empty list for disabling time interval + */} + {!isGrafanaAlertmanager && ( + + )} +
); })} diff --git a/public/app/features/alerting/unified/components/mute-timings/MuteTimingTimeRange.tsx b/public/app/features/alerting/unified/components/mute-timings/MuteTimingTimeRange.tsx index 1e5517b63cc3e..b057a01e95af1 100644 --- a/public/app/features/alerting/unified/components/mute-timings/MuteTimingTimeRange.tsx +++ b/public/app/features/alerting/unified/components/mute-timings/MuteTimingTimeRange.tsx @@ -3,9 +3,10 @@ import React from 'react'; import { useFieldArray, useFormContext } from 'react-hook-form'; import { GrafanaTheme2 } from '@grafana/data'; -import { Button, Field, Icon, IconButton, InlineField, InlineFieldRow, Input, useStyles2 } from '@grafana/ui'; +import { Button, Field, Icon, IconButton, InlineField, InlineFieldRow, Input, Tooltip, useStyles2 } from '@grafana/ui'; import { MuteTimingFields } from '../../types/mute-timing-form'; +import ConditionalWrap from '../ConditionalWrap'; import { isValidStartAndEndTime, isvalidTimeFormat } from './util'; @@ -17,7 +18,8 @@ const INVALID_FORMAT_MESSAGE = 'Times must be between 00:00 and 24:00 UTC'; export const MuteTimingTimeRange = ({ intervalIndex }: Props) => { const styles = useStyles2(getStyles); - const { register, formState, getValues } = useFormContext(); + const { register, formState, getValues, watch } = useFormContext(); + const isDisabled = watch(`time_intervals.${intervalIndex}.disable`); const { fields: timeRanges, @@ -28,14 +30,14 @@ export const MuteTimingTimeRange = ({ intervalIndex }: Props) => { }); const formErrors = formState.errors.time_intervals?.[intervalIndex]; - const timeRangeInvalid = formErrors?.times?.some((value) => value?.start_time || value?.end_time) ?? false; + const timeRangeInvalid = formErrors?.times?.some?.((value) => value?.start_time || value?.end_time) ?? false; return (
<> @@ -81,6 +83,7 @@ export const MuteTimingTimeRange = ({ intervalIndex }: Props) => { })} className={styles.timeRangeInput} maxLength={5} + readOnly={isDisabled} suffix={} // @ts-ignore react-hook-form doesn't handle nested field arrays well defaultValue={timeRange.start_time} @@ -112,6 +115,7 @@ export const MuteTimingTimeRange = ({ intervalIndex }: Props) => { })} className={styles.timeRangeInput} maxLength={5} + readOnly={isDisabled} suffix={} // @ts-ignore react-hook-form doesn't handle nested field arrays well defaultValue={timeRange.end_time} @@ -135,15 +139,25 @@ export const MuteTimingTimeRange = ({ intervalIndex }: Props) => { })} - + +
); }; diff --git a/public/app/features/alerting/unified/components/mute-timings/MuteTimingsTable.test.tsx b/public/app/features/alerting/unified/components/mute-timings/MuteTimingsTable.test.tsx new file mode 100644 index 0000000000000..17976633b01a1 --- /dev/null +++ b/public/app/features/alerting/unified/components/mute-timings/MuteTimingsTable.test.tsx @@ -0,0 +1,62 @@ +import { render, waitFor } from '@testing-library/react'; +import React from 'react'; +import { Provider } from 'react-redux'; +import { Router } from 'react-router-dom'; + +import { locationService } from '@grafana/runtime'; +import { configureStore } from 'app/store/configureStore'; +import { AccessControlAction } from 'app/types'; + +import { grantUserPermissions } from '../../mocks'; +import { AlertmanagerProvider } from '../../state/AlertmanagerContext'; +import { GRAFANA_DATASOURCE_NAME } from '../../utils/datasource'; + +import { MuteTimingsTable } from './MuteTimingsTable'; + +jest.mock('app/types', () => ({ + ...jest.requireActual('app/types'), + useDispatch: () => jest.fn(), +})); +const renderWithProvider = (alertManagerSource?: string) => { + const store = configureStore(); + + return render( + + + + + + + + ); +}; + +describe('MuteTimingsTable', () => { + it(' shows export button when allowed and supported', async () => { + grantUserPermissions([ + AccessControlAction.AlertingNotificationsRead, + AccessControlAction.AlertingNotificationsWrite, + ]); + const { findByRole } = renderWithProvider(); + expect(await findByRole('button', { name: /export all/i })).toBeInTheDocument(); + }); + it('It does not show export button when not allowed ', async () => { + // when not allowed + grantUserPermissions([]); + const { queryByRole } = renderWithProvider(); + await waitFor(() => { + expect(queryByRole('button', { name: /export all/i })).not.toBeInTheDocument(); + }); + }); + it('It does not show export button when not supported ', async () => { + // when not supported + grantUserPermissions([ + AccessControlAction.AlertingNotificationsRead, + AccessControlAction.AlertingNotificationsWrite, + ]); + const { queryByRole } = renderWithProvider('potato'); + await waitFor(() => { + expect(queryByRole('button', { name: /export all/i })).not.toBeInTheDocument(); + }); + }); +}); diff --git a/public/app/features/alerting/unified/components/mute-timings/MuteTimingsTable.tsx b/public/app/features/alerting/unified/components/mute-timings/MuteTimingsTable.tsx index 8c8017e0a6e6d..69dec20bbc41b 100644 --- a/public/app/features/alerting/unified/components/mute-timings/MuteTimingsTable.tsx +++ b/public/app/features/alerting/unified/components/mute-timings/MuteTimingsTable.tsx @@ -1,9 +1,9 @@ import { css } from '@emotion/css'; -import React, { useMemo, useState } from 'react'; +import React, { useCallback, useMemo, useState } from 'react'; +import { useToggle } from 'react-use'; import { GrafanaTheme2 } from '@grafana/data'; -import { Stack } from '@grafana/experimental'; -import { IconButton, LinkButton, Link, useStyles2, ConfirmModal } from '@grafana/ui'; +import { Badge, Button, ConfirmModal, IconButton, Link, LinkButton, Menu, Stack, useStyles2 } from '@grafana/ui'; import { MuteTimeInterval } from 'app/plugins/datasource/alertmanager/types'; import { useDispatch } from 'app/types/store'; @@ -11,21 +11,59 @@ import { Authorize } from '../../components/Authorize'; import { AlertmanagerAction, useAlertmanagerAbilities, useAlertmanagerAbility } from '../../hooks/useAbilities'; import { useAlertmanagerConfig } from '../../hooks/useAlertmanagerConfig'; import { deleteMuteTimingAction } from '../../state/actions'; +import { GRAFANA_RULES_SOURCE_NAME } from '../../utils/datasource'; import { makeAMLink } from '../../utils/misc'; -import { DynamicTable, DynamicTableItemProps, DynamicTableColumnProps } from '../DynamicTable'; +import { isDisabled } from '../../utils/mute-timings'; +import { DynamicTable, DynamicTableColumnProps, DynamicTableItemProps } from '../DynamicTable'; import { EmptyAreaWithCTA } from '../EmptyAreaWithCTA'; import { ProvisioningBadge } from '../Provisioning'; import { Spacer } from '../Spacer'; +import { GrafanaMuteTimingsExporter } from '../export/GrafanaMuteTimingsExporter'; -import { renderTimeIntervals } from './util'; +import { mergeTimeIntervals, renderTimeIntervals } from './util'; -interface Props { +const ALL_MUTE_TIMINGS = Symbol('all mute timings'); + +type ExportProps = [JSX.Element | null, (muteTiming: string | typeof ALL_MUTE_TIMINGS) => void]; + +const useExportMuteTiming = (): ExportProps => { + const [muteTimingName, setMuteTimingName] = useState(null); + const [isExportDrawerOpen, toggleShowExportDrawer] = useToggle(false); + + const handleClose = useCallback(() => { + setMuteTimingName(null); + toggleShowExportDrawer(false); + }, [toggleShowExportDrawer]); + + const handleOpen = (receiverName: string | typeof ALL_MUTE_TIMINGS) => { + setMuteTimingName(receiverName); + toggleShowExportDrawer(true); + }; + + const drawer = useMemo(() => { + if (!muteTimingName || !isExportDrawerOpen) { + return null; + } + + if (muteTimingName === ALL_MUTE_TIMINGS) { + // use this drawer when we want to export all mute timings + return ; + } else { + // use this one for exporting a single mute timing + return ; + } + }, [isExportDrawerOpen, handleClose, muteTimingName]); + + return [drawer, handleOpen]; +}; + +interface MuteTimingsTableProps { alertManagerSourceName: string; muteTimingNames?: string[]; hideActions?: boolean; } -export const MuteTimingsTable = ({ alertManagerSourceName, muteTimingNames, hideActions }: Props) => { +export const MuteTimingsTable = ({ alertManagerSourceName, muteTimingNames, hideActions }: MuteTimingsTableProps) => { const styles = useStyles2(getStyles); const dispatch = useDispatch(); @@ -36,9 +74,9 @@ export const MuteTimingsTable = ({ alertManagerSourceName, muteTimingNames, hide const config = currentData?.alertmanager_config; const [muteTimingName, setMuteTimingName] = useState(''); - const items = useMemo((): Array> => { - const muteTimings = config?.mute_time_intervals ?? []; + // merge both fields mute_time_intervals and time_intervals to support both old and new config + const muteTimings = config ? mergeTimeIntervals(config) : []; const muteTimingsProvenances = config?.muteTimeProvenances ?? {}; return muteTimings @@ -52,11 +90,16 @@ export const MuteTimingsTable = ({ alertManagerSourceName, muteTimingNames, hide }, }; }); - }, [config?.mute_time_intervals, config?.muteTimeProvenances, muteTimingNames]); + }, [muteTimingNames, config]); - const columns = useColumns(alertManagerSourceName, hideActions, setMuteTimingName); const [_, allowedToCreateMuteTiming] = useAlertmanagerAbility(AlertmanagerAction.CreateMuteTiming); + const [ExportDrawer, showExportDrawer] = useExportMuteTiming(); + const [exportMuteTimingsSupported, exportMuteTimingsAllowed] = useAlertmanagerAbility( + AlertmanagerAction.ExportMuteTimings + ); + const columns = useColumns(alertManagerSourceName, hideActions, setMuteTimingName, showExportDrawer); + return (
@@ -68,7 +111,7 @@ export const MuteTimingsTable = ({ alertManagerSourceName, muteTimingNames, hide {!hideActions && items.length > 0 && ( )} + {exportMuteTimingsSupported && ( + + )} {items.length > 0 ? ( @@ -105,17 +160,26 @@ export const MuteTimingsTable = ({ alertManagerSourceName, muteTimingNames, hide onDismiss={() => setMuteTimingName('')} /> )} + {ExportDrawer}
); }; -function useColumns(alertManagerSourceName: string, hideActions = false, setMuteTimingName: (name: string) => void) { +function useColumns( + alertManagerSourceName: string, + hideActions = false, + setMuteTimingName: (name: string) => void, + openExportDrawer: (muteTiming: string | typeof ALL_MUTE_TIMINGS) => void +) { const [[_editSupported, allowedToEdit], [_deleteSupported, allowedToDelete]] = useAlertmanagerAbilities([ AlertmanagerAction.UpdateMuteTiming, AlertmanagerAction.DeleteMuteTiming, ]); const showActions = !hideActions && (allowedToEdit || allowedToDelete); + const [exportSupported, exportAllowed] = useAlertmanagerAbility(AlertmanagerAction.ExportMuteTimings); + const styles = useStyles2(getStyles); + return useMemo((): Array> => { const columns: Array> = [ { @@ -141,39 +205,35 @@ function useColumns(alertManagerSourceName: string, hideActions = false, setMute if (showActions) { columns.push({ id: 'actions', - label: 'Actions', + label: '', + renderCell: function renderActions({ data }) { + return ( + + ); + }, + size: '150px', + className: styles.actionsColumn, + }); + } + if (exportSupported) { + columns.push({ + id: 'actions', + label: '', renderCell: function renderActions({ data }) { - if (data.provenance) { - return ( -
- - - -
- ); - } return (
- - - - - - - setMuteTimingName(data.name)} - /> - + openExportDrawer(data.name)} + />
); }, @@ -181,7 +241,62 @@ function useColumns(alertManagerSourceName: string, hideActions = false, setMute }); } return columns; - }, [alertManagerSourceName, setMuteTimingName, showActions]); + }, [ + alertManagerSourceName, + setMuteTimingName, + showActions, + exportSupported, + exportAllowed, + openExportDrawer, + styles.actionsColumn, + ]); +} + +interface ActionsAndBadgeProps { + muteTiming: MuteTimeInterval; + alertManagerSourceName: string; + setMuteTimingName: (name: string) => void; +} + +function ActionsAndBadge({ muteTiming, alertManagerSourceName, setMuteTimingName }: ActionsAndBadgeProps) { + const styles = useStyles2(getStyles); + const isGrafanaDataSource = alertManagerSourceName === GRAFANA_RULES_SOURCE_NAME; + + if (muteTiming.provenance) { + return ( + + {isDisabled(muteTiming) && !isGrafanaDataSource && ( + + )} + + + + + ); + } + return ( + + {isDisabled(muteTiming) && !isGrafanaDataSource && ( + + )} + + + + + + + setMuteTimingName(muteTiming.name)} /> + + + ); } const getStyles = (theme: GrafanaTheme2) => ({ @@ -189,8 +304,17 @@ const getStyles = (theme: GrafanaTheme2) => ({ display: flex; flex-flow: column nowrap; `, - addMuteButton: css` + muteTimingsButtons: css` margin-bottom: ${theme.spacing(2)}; align-self: flex-end; `, + disabledBadge: css({ + height: 'fit-content', + }), + editButton: css({ + display: 'flex', + }), + actionsColumn: css({ + justifyContent: 'flex-end', + }), }); diff --git a/public/app/features/alerting/unified/components/mute-timings/util.tsx b/public/app/features/alerting/unified/components/mute-timings/util.tsx index dda90ae1b39ed..00a52f5e8ff1e 100644 --- a/public/app/features/alerting/unified/components/mute-timings/util.tsx +++ b/public/app/features/alerting/unified/components/mute-timings/util.tsx @@ -1,7 +1,7 @@ import moment from 'moment'; import React from 'react'; -import { MuteTimeInterval } from 'app/plugins/datasource/alertmanager/types'; +import { AlertmanagerConfig, MuteTimeInterval } from 'app/plugins/datasource/alertmanager/types'; import { getDaysOfMonthString, @@ -18,6 +18,12 @@ const isvalidTimeFormat = (timeString: string): boolean => { return timeString ? TIME_RANGE_REGEX.test(timeString) : true; }; +// merge both fields mute_time_intervals and time_intervals to support both old and new config +export const mergeTimeIntervals = (alertManagerConfig: AlertmanagerConfig) => { + return [...(alertManagerConfig.mute_time_intervals ?? []), ...(alertManagerConfig.time_intervals ?? [])]; +}; + +// Usage const isValidStartAndEndTime = (startTime?: string, endTime?: string): boolean => { // empty time range is perfactly valid for a mute timing if (!startTime && !endTime) { @@ -67,4 +73,4 @@ function renderTimeIntervals(muteTiming: MuteTimeInterval) { }); } -export { isvalidTimeFormat, isValidStartAndEndTime, renderTimeIntervals }; +export { isValidStartAndEndTime, isvalidTimeFormat, renderTimeIntervals }; diff --git a/public/app/features/alerting/unified/components/notification-policies/AlertGroupsSummary.tsx b/public/app/features/alerting/unified/components/notification-policies/AlertGroupsSummary.tsx index db731352eecc2..29daa987f2281 100644 --- a/public/app/features/alerting/unified/components/notification-policies/AlertGroupsSummary.tsx +++ b/public/app/features/alerting/unified/components/notification-policies/AlertGroupsSummary.tsx @@ -1,8 +1,7 @@ import pluralize from 'pluralize'; import React, { Fragment } from 'react'; -import { Stack } from '@grafana/experimental'; -import { Badge } from '@grafana/ui'; +import { Badge, Stack } from '@grafana/ui'; interface Props { active?: number; diff --git a/public/app/features/alerting/unified/components/notification-policies/ContactPointSelector.tsx b/public/app/features/alerting/unified/components/notification-policies/ContactPointSelector.tsx index 0a543be22b371..a5d9677287689 100644 --- a/public/app/features/alerting/unified/components/notification-policies/ContactPointSelector.tsx +++ b/public/app/features/alerting/unified/components/notification-policies/ContactPointSelector.tsx @@ -1,8 +1,7 @@ import React from 'react'; import { SelectableValue } from '@grafana/data'; -import { Stack } from '@grafana/experimental'; -import { Select, SelectCommonProps, Text } from '@grafana/ui'; +import { Select, SelectCommonProps, Text, Stack } from '@grafana/ui'; import { RECEIVER_META_KEY, @@ -36,7 +35,7 @@ interface ReceiversProps { const ReceiversSummary = ({ receivers }: ReceiversProps) => { return ( - + {receivers.map((receiver, index) => ( {receiver[RECEIVER_PLUGIN_META_KEY]?.icon && ( diff --git a/public/app/features/alerting/unified/components/notification-policies/EditDefaultPolicyForm.tsx b/public/app/features/alerting/unified/components/notification-policies/EditDefaultPolicyForm.tsx index fbfab072ad502..2ae8f5f58d7ea 100644 --- a/public/app/features/alerting/unified/components/notification-policies/EditDefaultPolicyForm.tsx +++ b/public/app/features/alerting/unified/components/notification-policies/EditDefaultPolicyForm.tsx @@ -1,6 +1,7 @@ import React, { ReactNode, useState } from 'react'; +import { useForm, Controller } from 'react-hook-form'; -import { Collapse, Field, Form, InputControl, Link, MultiSelect, Select, useStyles2 } from '@grafana/ui'; +import { Collapse, Field, Link, MultiSelect, Select, useStyles2 } from '@grafana/ui'; import { RouteWithID } from 'app/plugins/datasource/alertmanager/types'; import { FormAmRoute } from '../../types/amroutes'; @@ -41,125 +42,131 @@ export const AmRootRouteForm = ({ const [groupByOptions, setGroupByOptions] = useState(stringsToSelectableValues(route.group_by)); const defaultValues = amRouteToFormAmRoute(route); - + const { + handleSubmit, + register, + control, + formState: { errors }, + setValue, + getValues, + } = useForm({ + defaultValues: { + ...defaultValues, + overrideTimings: true, + overrideGrouping: true, + }, + }); return ( -
- {({ register, control, errors, setValue, getValues }) => ( + + <> - - <> -
- ( - - {/* @ts-ignore-check: react-hook-form made me do this */} - - {({ fields, append, remove }) => ( - <> - -
Matching labels
- {fields.length === 0 && ( - + + +
Matching labels
+ {fields.length === 0 && ( + + )} + {fields.length > 0 && ( +
+ {fields.map((field, index) => { + return ( + + + + + + ( + - - - ( - - - remove(index)}> - Remove - - - ); - })} -
- )} - + + + remove(index)}> + Remove +
- - )} -
- - ( - onChange(mapSelectValueToString(value))} + options={receiversWithOnCallOnTop} + isClearable + /> + )} + control={control} + name="receiver" + /> + + + + + + + + {watch().overrideGrouping && ( + + { + if (!value || value.length === 0) { + return 'At least one group by option is required.'; + } + return true; + }, + }} + render={({ field: { onChange, ref, ...field }, fieldState: { error } }) => ( + <> + onChange(mapSelectValueToString(value))} - options={receiversWithOnCallOnTop} - isClearable + onCreateOption={(opt: string) => { + setGroupByOptions((opts) => [...opts, stringToSelectableValue(opt)]); + setValue('groupBy', [...(field.value || []), opt]); + }} + onChange={(value) => onChange(mapMultiSelectValueToStrings(value))} + options={[...commonGroupByOptions, ...groupByOptions]} /> - )} - control={control} - name="receiver" + {error && {error.message}} + + )} + control={control} + name="groupBy" + /> + + )} + + + + {watch().overrideTimings && ( + <> + + - - - - - - - {watch().overrideGrouping && ( - - { - if (!value || value.length === 0) { - return 'At least one group by option is required.'; - } - return true; - }, - }} - render={({ field: { onChange, ref, ...field }, fieldState: { error } }) => ( - <> - { - setGroupByOptions((opts) => [...opts, stringToSelectableValue(opt)]); - - // @ts-ignore-check: react-hook-form made me do this - setValue('groupBy', [...field.value, opt]); - }} - onChange={(value) => onChange(mapMultiSelectValueToStrings(value))} - options={[...commonGroupByOptions, ...groupByOptions]} - /> - {error && {error.message}} - - )} - control={control} - name="groupBy" - /> - - )} - - + + - {watch().overrideTimings && ( - <> - - - - - - - - { - const groupInterval = getValues('groupIntervalValue'); - return repeatIntervalValidator(value, groupInterval); - }, - })} - aria-label="Repeat interval value" - className={formStyles.promDurationInput} - /> - - - )} - ( - onChange(mapMultiSelectValueToStrings(value))} - options={muteTimingOptions} - /> - )} - control={control} - name="muteTimeIntervals" + { + const groupInterval = getValues('groupIntervalValue'); + return repeatIntervalValidator(value, groupInterval); + }, + })} + aria-label={routeTimingsFields.repeatInterval.ariaLabel} + className={formStyles.promDurationInput} /> - {actionButtons} )} - + + ( + onChange(mapMultiSelectValueToStrings(value))} + options={muteTimingOptions} + /> + )} + control={control} + name="muteTimeIntervals" + /> + + {actionButtons} + ); }; @@ -321,6 +324,7 @@ const getStyles = (theme: GrafanaTheme2) => { `, noMatchersWarning: css` padding: ${theme.spacing(1)} ${theme.spacing(2)}; + margin-bottom: ${theme.spacing(1)}; `, }; }; diff --git a/public/app/features/alerting/unified/components/notification-policies/Filters.tsx b/public/app/features/alerting/unified/components/notification-policies/Filters.tsx index 5457aa8f5cd26..66b2ee0cd3041 100644 --- a/public/app/features/alerting/unified/components/notification-policies/Filters.tsx +++ b/public/app/features/alerting/unified/components/notification-policies/Filters.tsx @@ -1,25 +1,27 @@ import { css } from '@emotion/css'; -import { debounce } from 'lodash'; +import { debounce, isEqual } from 'lodash'; import React, { useCallback, useEffect, useRef } from 'react'; import { SelectableValue } from '@grafana/data'; -import { Stack } from '@grafana/experimental'; -import { Button, Field, Icon, Input, Label as LabelElement, Select, Tooltip, useStyles2 } from '@grafana/ui'; +import { Button, Field, Icon, Input, Label, Select, Stack, Text, Tooltip, useStyles2 } from '@grafana/ui'; import { ObjectMatcher, Receiver, RouteWithID } from 'app/plugins/datasource/alertmanager/types'; import { useURLSearchParams } from '../../hooks/useURLSearchParams'; import { matcherToObjectMatcher, parseMatchers } from '../../utils/alertmanager'; +import { normalizeMatchers } from '../../utils/matchers'; interface NotificationPoliciesFilterProps { receivers: Receiver[]; onChangeMatchers: (labels: ObjectMatcher[]) => void; onChangeReceiver: (receiver: string | undefined) => void; + matchingCount: number; } const NotificationPoliciesFilter = ({ receivers, onChangeReceiver, onChangeMatchers, + matchingCount, }: NotificationPoliciesFilterProps) => { const [searchParams, setSearchParams] = useURLSearchParams(); const searchInputRef = useRef(null); @@ -51,11 +53,11 @@ const NotificationPoliciesFilter = ({ const inputInvalid = queryString && queryString.length > 3 ? parseMatchers(queryString).length === 0 : false; return ( - + + } invalid={inputInvalid} error={inputInvalid ? 'Query must use valid matcher syntax' : null} @@ -100,9 +102,16 @@ const NotificationPoliciesFilter = ({ /> {hasFilters && ( - + + + + {matchingCount === 0 && 'No policies matching filters.'} + {matchingCount === 1 && `${matchingCount} policy matches the filters.`} + {matchingCount > 1 && `${matchingCount} policies match the filters.`} + + )} ); @@ -113,19 +122,46 @@ const NotificationPoliciesFilter = ({ */ type FilterPredicate = (route: RouteWithID) => boolean; -export function findRoutesMatchingPredicate(routeTree: RouteWithID, predicateFn: FilterPredicate): RouteWithID[] { - const matches: RouteWithID[] = []; +/** + * Find routes int the tree that match the given predicate function + * @param routeTree the route tree to search + * @param predicateFn the predicate function to match routes + * @returns + * - matches: list of routes that match the predicate + * - matchingRouteIdsWithPath: map with routeids that are part of the path of a matching route + * key is the route id, value is an array of route ids that are part of its path + */ +export function findRoutesMatchingPredicate( + routeTree: RouteWithID, + predicateFn: FilterPredicate +): Map { + // map with routids that are part of the path of a matching route + // key is the route id, value is an array of route ids that are part of the path + const matchingRouteIdsWithPath = new Map(); + + function findMatch(route: RouteWithID, path: RouteWithID[]) { + const newPath = [...path, route]; - function findMatch(route: RouteWithID) { if (predicateFn(route)) { - matches.push(route); + // if the route matches the predicate, we need to add the path to the map of matching routes + const previousPath = matchingRouteIdsWithPath.get(route) ?? []; + // add the current route id to the map with its path + matchingRouteIdsWithPath.set(route, [...previousPath, ...newPath]); } - route.routes?.forEach(findMatch); + // if the route has subroutes, call findMatch recursively + route.routes?.forEach((route) => findMatch(route, newPath)); } - findMatch(routeTree); - return matches; + findMatch(routeTree, []); + + return matchingRouteIdsWithPath; +} + +export function findRoutesByMatchers(route: RouteWithID, labelMatchersFilter: ObjectMatcher[]): boolean { + const routeMatchers = normalizeMatchers(route); + + return labelMatchersFilter.every((filter) => routeMatchers.some((matcher) => isEqual(filter, matcher))); } const toOption = (receiver: Receiver) => ({ @@ -139,9 +175,9 @@ const getNotificationPoliciesFilters = (searchParams: URLSearchParams) => ({ }); const getStyles = () => ({ - noBottom: css` - margin-bottom: 0; - `, + noBottom: css({ + marginBottom: 0, + }), }); export { NotificationPoliciesFilter }; diff --git a/public/app/features/alerting/unified/components/notification-policies/Matchers.tsx b/public/app/features/alerting/unified/components/notification-policies/Matchers.tsx index cd320ad193e6b..458dc4a0258f0 100644 --- a/public/app/features/alerting/unified/components/notification-policies/Matchers.tsx +++ b/public/app/features/alerting/unified/components/notification-policies/Matchers.tsx @@ -3,16 +3,16 @@ import { take, takeRight, uniqueId } from 'lodash'; import React, { FC } from 'react'; import { GrafanaTheme2 } from '@grafana/data'; -import { Stack } from '@grafana/experimental'; -import { getTagColorsFromName, useStyles2 } from '@grafana/ui'; +import { getTagColorsFromName, useStyles2, Stack } from '@grafana/ui'; import { ObjectMatcher } from 'app/plugins/datasource/alertmanager/types'; +import { MatcherFormatter, matcherFormatter } from '../../utils/matchers'; import { HoverCard } from '../HoverCard'; -type MatchersProps = { matchers: ObjectMatcher[] }; +type MatchersProps = { matchers: ObjectMatcher[]; formatter?: MatcherFormatter }; // renders the first N number of matchers -const Matchers: FC = ({ matchers }) => { +const Matchers: FC = ({ matchers, formatter = 'default' }) => { const styles = useStyles2(getStyles); const NUM_MATCHERS = 5; @@ -23,9 +23,9 @@ const Matchers: FC = ({ matchers }) => { return ( - + {firstFew.map((matcher) => ( - + ))} {/* TODO hover state to show all matchers we're not showing */} {hasMoreMatchers && ( @@ -52,15 +52,16 @@ const Matchers: FC = ({ matchers }) => { interface MatcherBadgeProps { matcher: ObjectMatcher; + formatter?: MatcherFormatter; } -const MatcherBadge: FC = ({ matcher: [label, operator, value] }) => { +const MatcherBadge: FC = ({ matcher, formatter = 'default' }) => { const styles = useStyles2(getStyles); return ( -
+
- {label} {operator} {value} + {matcherFormatter[formatter](matcher)}
); diff --git a/public/app/features/alerting/unified/components/notification-policies/Modals.tsx b/public/app/features/alerting/unified/components/notification-policies/Modals.tsx index 7719426d6ad57..43338fdbdcf43 100644 --- a/public/app/features/alerting/unified/components/notification-policies/Modals.tsx +++ b/public/app/features/alerting/unified/components/notification-policies/Modals.tsx @@ -1,8 +1,7 @@ import { groupBy } from 'lodash'; import React, { FC, useCallback, useMemo, useState } from 'react'; -import { Stack } from '@grafana/experimental'; -import { Button, Icon, Modal, ModalProps, Spinner } from '@grafana/ui'; +import { Button, Icon, Modal, ModalProps, Spinner, Stack } from '@grafana/ui'; import { AlertmanagerGroup, AlertState, @@ -12,6 +11,8 @@ import { } from 'app/plugins/datasource/alertmanager/types'; import { FormAmRoute } from '../../types/amroutes'; +import { MatcherFormatter } from '../../utils/matchers'; +import { InsertPosition } from '../../utils/routeTree'; import { AlertGroup } from '../alert-groups/AlertGroup'; import { useGetAmRouteReceiverWithGrafanaAppTypes } from '../receivers/grafanaAppReceivers/grafanaApp'; @@ -21,24 +22,28 @@ import { AmRoutesExpandedForm } from './EditNotificationPolicyForm'; import { Matchers } from './Matchers'; type ModalHook = [JSX.Element, (item: T) => void, () => void]; +type AddModalHook = [JSX.Element, (item: T, position: InsertPosition) => void, () => void]; type EditModalHook = [JSX.Element, (item: RouteWithID, isDefaultRoute?: boolean) => void, () => void]; const useAddPolicyModal = ( receivers: Receiver[] = [], - handleAdd: (route: Partial, parentRoute: RouteWithID) => void, + handleAdd: (route: Partial, referenceRoute: RouteWithID, position: InsertPosition) => void, loading: boolean -): ModalHook => { +): AddModalHook => { const [showModal, setShowModal] = useState(false); - const [parentRoute, setParentRoute] = useState(); + const [insertPosition, setInsertPosition] = useState(undefined); + const [referenceRoute, setReferenceRoute] = useState(); const AmRouteReceivers = useGetAmRouteReceiverWithGrafanaAppTypes(receivers); const handleDismiss = useCallback(() => { - setParentRoute(undefined); + setReferenceRoute(undefined); + setInsertPosition(undefined); setShowModal(false); }, []); - const handleShow = useCallback((parentRoute: RouteWithID) => { - setParentRoute(parentRoute); + const handleShow = useCallback((referenceRoute: RouteWithID, position: InsertPosition) => { + setReferenceRoute(referenceRoute); + setInsertPosition(position); setShowModal(true); }, []); @@ -57,9 +62,13 @@ const useAddPolicyModal = ( { + if (referenceRoute && insertPosition) { + handleAdd(newRoute, referenceRoute, insertPosition); + } }} - onSubmit={(newRoute) => parentRoute && handleAdd(newRoute, parentRoute)} actionButtons={ + ) : ( + + onAddPolicy(currentRoute, 'above')} + /> + onAddPolicy(currentRoute, 'below')} + /> + + onAddPolicy(currentRoute, 'child')} + /> + + } + > + + + )} + + + )} + {dropdownMenuActions.length > 0 && ( + {dropdownMenuActions}}> +
+ + {/* Metadata row */} + +
+
+
+
+ {showPolicyChildren && ( + <> + {pageOfChildren.map((child) => { + const childInheritedProperties = getInheritedProperties(currentRoute, child, inheritedProperties); + // This child is autogenerated if it's the autogenerated root or if it's a child of an autogenerated policy. + const isThisChildAutoGenerated = isAutoGeneratedRootAndSimplifiedEnabled(child) || isAutoGenerated; + /* pass the "readOnly" prop from the parent, because for any child policy , if its parent it's not editable, + then the child policy should not be editable either */ + const isThisChildReadOnly = readOnly || provisioned || isAutoGenerated; + + return ( + + ); + })} + {showMore && ( + + )} + + )} +
+ {showExportDrawer && } + + + ); +}; + +interface MetadataRowProps { + matchingInstancesPreview: { groupsMap?: Map; enabled: boolean }; + numberOfAlertInstances?: number; + contactPoint?: string; + groupBy?: string[]; + muteTimings?: string[]; + timingOptions?: TimingOptions; + inheritedProperties?: Partial; + alertManagerSourceName: string; + receivers: Receiver[]; + matchingAlertGroups?: AlertmanagerGroup[]; + matchers?: ObjectMatcher[]; + isDefaultPolicy: boolean; + onShowAlertInstances: ( + alertGroups: AlertmanagerGroup[], + matchers?: ObjectMatcher[], + formatter?: MatcherFormatter + ) => void; +} + +function MetadataRow({ + numberOfAlertInstances, + isDefaultPolicy, + timingOptions, + groupBy, + muteTimings = [], + matchingInstancesPreview, + inheritedProperties, + matchingAlertGroups, + onShowAlertInstances, + matchers, + contactPoint, + alertManagerSourceName, + receivers, +}: MetadataRowProps) { + const styles = useStyles2(getStyles); + + const inheritedGrouping = inheritedProperties && inheritedProperties.group_by; + const hasInheritedProperties = inheritedProperties && Object.keys(inheritedProperties).length > 0; - const inheritedGrouping = hasInheritedProperties && inheritedProperties.group_by; const noGrouping = isArray(groupBy) && groupBy[0] === '...'; const customGrouping = !noGrouping && isArray(groupBy) && groupBy.length > 0; const singleGroup = isDefaultPolicy && isArray(groupBy) && groupBy.length === 0; - const matchingAlertGroups = matchingInstancesPreview?.groupsMap?.get(currentRoute.id); + const hasMuteTimings = Boolean(muteTimings.length); - // sum all alert instances for all groups we're handling - const numberOfAlertInstances = matchingAlertGroups - ? sumBy(matchingAlertGroups, (group) => group.alerts.length) - : undefined; + return ( +
+ + {matchingInstancesPreview.enabled && ( + { + matchingAlertGroups && + onShowAlertInstances(matchingAlertGroups, matchers, getAmMatcherFormatter(alertManagerSourceName)); + }} + data-testid="matching-instances" + > + {numberOfAlertInstances ?? '-'} + {pluralize('instance', numberOfAlertInstances)} + + )} + {contactPoint && ( + + Delivered to + + + )} + {!inheritedGrouping && ( + <> + {customGrouping && ( + + Grouped by + {groupBy.join(', ')} + + )} + {singleGroup && ( + + Single group + + )} + {noGrouping && ( + + Not grouping + + )} + + )} + {hasMuteTimings && ( + + Muted when + + + )} + {timingOptions && ( + // for the default policy we will also merge the default timings, that way a user can observe what the timing options would be + + )} + {hasInheritedProperties && ( + <> + + Inherited + + + + )} + +
+ ); +} - const [showExportDrawer, toggleShowExportDrawer] = useToggle(false); - const showExportAction = exportPoliciesAllowed && exportPoliciesSupported && isDefaultPolicy; +export const useCreateDropdownMenuActions = ( + isAutoGenerated: boolean, + isDefaultPolicy: boolean, + provisioned: boolean, + onEditPolicy: (route: RouteWithID, isDefault?: boolean, readOnly?: boolean) => void, + currentRoute: RouteWithID, + toggleShowExportDrawer: (nextValue?: any) => void, + onDeletePolicy: (route: RouteWithID) => void +) => { + const [ + [updatePoliciesSupported, updatePoliciesAllowed], + [deletePolicySupported, deletePolicyAllowed], + [exportPoliciesSupported, exportPoliciesAllowed], + ] = useAlertmanagerAbilities([ + AlertmanagerAction.UpdateNotificationPolicyTree, + AlertmanagerAction.DeleteNotificationPolicy, + AlertmanagerAction.ExportNotificationPolicies, + ]); + const dropdownMenuActions = []; + const showExportAction = exportPoliciesAllowed && exportPoliciesSupported && isDefaultPolicy && !isAutoGenerated; const showEditAction = updatePoliciesSupported && updatePoliciesAllowed; - const showDeleteAction = deletePolicySupported && deletePolicyAllowed && !isDefaultPolicy; - - // build the menu actions for our policy - const dropdownMenuActions: JSX.Element[] = []; + const showDeleteAction = deletePolicySupported && deletePolicyAllowed && !isDefaultPolicy && !isAutoGenerated; if (showEditAction) { dropdownMenuActions.push( @@ -140,7 +535,7 @@ const Policy: FC = ({ onEditPolicy(currentRoute, isDefaultPolicy)} /> @@ -163,7 +558,7 @@ const Policy: FC = ({ onDeletePolicy(currentRoute)} /> @@ -171,166 +566,30 @@ const Policy: FC = ({ ); } + return dropdownMenuActions; +}; - // TODO dead branch detection, warnings for all sort of configs that won't work or will never be activated - return ( - -
- {/* continueMatching and showMatchesAllLabelsWarning are mutually exclusive so the icons can't overlap */} - {continueMatching && } - {showMatchesAllLabelsWarning && } -
- - {/* Matchers and actions */} -
- - {isDefaultPolicy ? ( - - ) : hasMatchers ? ( - - ) : ( - No matchers - )} - - {/* TODO maybe we should move errors to the gutter instead? */} - {errors.length > 0 && } - {provisioned && } - {!readOnly && ( - - - - - - - {dropdownMenuActions.length > 0 && ( - {dropdownMenuActions}}> -
- - {/* Metadata row */} -
- - {matchingInstancesPreview.enabled && ( - { - matchingAlertGroups && onShowAlertInstances(matchingAlertGroups, matchers); - }} - data-testid="matching-instances" - > - {numberOfAlertInstances ?? '-'} - {pluralize('instance', numberOfAlertInstances)} - - )} - {contactPoint && ( - - Delivered to - - - )} - {!inheritedGrouping && ( - <> - {customGrouping && ( - - Grouped by - {groupBy.join(', ')} - - )} - {singleGroup && ( - - Single group - - )} - {noGrouping && ( - - Not grouping - - )} - - )} - {hasMuteTimings && ( - - Muted when - - - )} - {timingOptions && ( - // for the default policy we will also merge the default timings, that way a user can observe what the timing options would be - - )} - {hasInheritedProperties && ( - <> - - Inherited - - - - )} - -
-
-
-
-
- {/* pass the "readOnly" prop from the parent, because if you can't edit the parent you can't edit children */} - {childPolicies.map((child) => { - const childInheritedProperties = getInheritedProperties(currentRoute, child, inheritedProperties); +export const AUTOGENERATED_ROOT_LABEL_NAME = '__grafana_autogenerated__'; - return ( - - ); - })} -
- {showExportDrawer && } -
+export function isAutoGeneratedRootAndSimplifiedEnabled(route: RouteWithID) { + const simplifiedRoutingToggleEnabled = config.featureToggles.alertingSimplifiedRouting ?? false; + if (!simplifiedRoutingToggleEnabled) { + return false; + } + if (!route.object_matchers) { + return false; + } + return ( + route.object_matchers.some((objectMatcher) => { + return ( + objectMatcher[0] === AUTOGENERATED_ROOT_LABEL_NAME && + objectMatcher[1] === MatcherOperator.equal && + objectMatcher[2] === 'true' + ); + }) ?? false ); -}; + // return simplifiedRoutingToggleEnabled && route.receiver === 'contact_point_5'; +} const ProvisionedTooltip = (children: ReactNode) => ( @@ -378,7 +637,7 @@ const AllMatchesIndicator: FC = () => { ); }; -const DefaultPolicyIndicator: FC = () => { +function DefaultPolicyIndicator() { const styles = useStyles2(getStyles); return ( <> @@ -388,21 +647,31 @@ const DefaultPolicyIndicator: FC = () => { ); -}; +} -const InheritedProperties: FC<{ properties: InhertitableProperties }> = ({ properties }) => ( +function AutogeneratedRootIndicator() { + return Auto-generated policies; +} + +const InheritedProperties: FC<{ properties: InheritableProperties }> = ({ properties }) => ( - {Object.entries(properties).map(([key, value]) => ( -