From bb9aa61e7d3600c856a3043c859595187022ea52 Mon Sep 17 00:00:00 2001 From: ted kaemming <65315+tkaemming@users.noreply.github.com> Date: Thu, 25 Jul 2024 21:04:00 -0700 Subject: [PATCH 01/24] fix(cdp): Don't crash on produce failure (#24006) --- plugin-server/src/cdp/cdp-consumers.ts | 2 ++ plugin-server/tests/cdp/cdp-processed-events-consumer.test.ts | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/plugin-server/src/cdp/cdp-consumers.ts b/plugin-server/src/cdp/cdp-consumers.ts index 93f0c8797bb0f..0385ab18bfd31 100644 --- a/plugin-server/src/cdp/cdp-consumers.ts +++ b/plugin-server/src/cdp/cdp-consumers.ts @@ -145,6 +145,8 @@ abstract class CdpConsumerBase { value: Buffer.from(JSON.stringify(x.value)), key: x.key, waitForAck: true, + }).catch((reason) => { + status.error('⚠️', `failed to produce message: ${reason}`) }) ) ) diff --git a/plugin-server/tests/cdp/cdp-processed-events-consumer.test.ts b/plugin-server/tests/cdp/cdp-processed-events-consumer.test.ts index 78ba1f78dc2b7..5cce84f63ca38 100644 --- a/plugin-server/tests/cdp/cdp-processed-events-consumer.test.ts +++ b/plugin-server/tests/cdp/cdp-processed-events-consumer.test.ts @@ -49,7 +49,7 @@ jest.mock('../../src/utils/db/kafka-producer-wrapper', () => { connect: jest.fn(), }, disconnect: jest.fn(), - produce: jest.fn(), + produce: jest.fn(() => Promise.resolve()), } return { KafkaProducerWrapper: jest.fn(() => mockKafkaProducer), From 977f44b544b013dc401036b4226ffd6f89a00d12 Mon Sep 17 00:00:00 2001 From: Ben White Date: Fri, 26 Jul 2024 09:27:29 +0200 Subject: [PATCH 02/24] feat: Show connected destinations in actions ui (#23982) --- frontend/src/lib/api.ts | 4 +- .../src/scenes/actions/Action.stories.tsx | 1 - frontend/src/scenes/actions/Action.tsx | 2 + frontend/src/scenes/actions/ActionEdit.tsx | 135 ++++++++++-------- .../src/scenes/actions/ActionHogFunctions.tsx | 59 ++++++++ frontend/src/scenes/actions/actionLogic.ts | 10 +- .../pipeline/destinations/Destinations.tsx | 70 ++++----- .../pipeline/destinations/NewDestinations.tsx | 6 +- .../destinations/destinationsLogic.tsx | 19 ++- .../scenes/pipeline/pipelineAccessLogic.tsx | 14 ++ frontend/src/scenes/pipeline/types.ts | 14 ++ .../settings/project/WebhookIntegration.tsx | 17 +++ posthog/api/action.py | 16 --- posthog/api/hog_function.py | 16 ++- posthog/api/test/test_hog_function.py | 61 +++++++- 15 files changed, 314 insertions(+), 130 deletions(-) create mode 100644 frontend/src/scenes/actions/ActionHogFunctions.tsx diff --git a/frontend/src/lib/api.ts b/frontend/src/lib/api.ts index a099b5b044dd6..6b0c6061310a4 100644 --- a/frontend/src/lib/api.ts +++ b/frontend/src/lib/api.ts @@ -1630,8 +1630,8 @@ const api = { }, hogFunctions: { - async list(): Promise> { - return await new ApiRequest().hogFunctions().get() + async list(params?: { filters?: any }): Promise> { + return await new ApiRequest().hogFunctions().withQueryString(params).get() }, async get(id: HogFunctionType['id']): Promise { return await new ApiRequest().hogFunction(id).get() diff --git a/frontend/src/scenes/actions/Action.stories.tsx b/frontend/src/scenes/actions/Action.stories.tsx index 9f1e4d9f2bf26..f3586f06350a7 100644 --- a/frontend/src/scenes/actions/Action.stories.tsx +++ b/frontend/src/scenes/actions/Action.stories.tsx @@ -75,7 +75,6 @@ const meta: Meta = { get: { '/api/projects/:team_id/actions/': toPaginatedResponse([MOCK_ACTION]), '/api/projects/:team_id/actions/1/': MOCK_ACTION, - '/api/projects/:team_id/actions/1/plugin_configs': toPaginatedResponse([]), }, }), ], diff --git a/frontend/src/scenes/actions/Action.tsx b/frontend/src/scenes/actions/Action.tsx index 5ff2bdc067eb0..a76ac93078850 100644 --- a/frontend/src/scenes/actions/Action.tsx +++ b/frontend/src/scenes/actions/Action.tsx @@ -11,6 +11,7 @@ import { NodeKind } from '~/queries/schema' import { ActionType } from '~/types' import { ActionEdit } from './ActionEdit' +import { ActionHogFunctions } from './ActionHogFunctions' export const scene: SceneExport = { logic: actionLogic, @@ -44,6 +45,7 @@ export function Action({ id }: { id?: ActionType['id'] } = {}): JSX.Element { return ( <> + {id && ( <> {isComplete ? ( diff --git a/frontend/src/scenes/actions/ActionEdit.tsx b/frontend/src/scenes/actions/ActionEdit.tsx index e254cd34be4b0..eeb4512f8a627 100644 --- a/frontend/src/scenes/actions/ActionEdit.tsx +++ b/frontend/src/scenes/actions/ActionEdit.tsx @@ -1,11 +1,12 @@ import { IconInfo, IconPlus, IconWarning } from '@posthog/icons' -import { LemonCheckbox, LemonTextArea } from '@posthog/lemon-ui' +import { LemonBanner, LemonCheckbox, LemonTextArea } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import { Form } from 'kea-forms' import { router } from 'kea-router' import { EditableField } from 'lib/components/EditableField/EditableField' import { ObjectTags } from 'lib/components/ObjectTags/ObjectTags' import { PageHeader } from 'lib/components/PageHeader' +import { useFeatureFlag } from 'lib/hooks/useFeatureFlag' import { IconPlayCircle } from 'lib/lemon-ui/icons' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonField } from 'lib/lemon-ui/LemonField' @@ -33,6 +34,8 @@ export function ActionEdit({ action: loadedAction, id }: ActionEditLogicProps): const slackEnabled = currentTeam?.slack_incoming_webhook + const hogFunctionsEnabled = useFeatureFlag('HOG_FUNCTIONS') + const deleteButton = (): JSX.Element => ( -
-

Webhook delivery

- - {({ value, onChange }) => ( -
- - Post to webhook when this action is triggered. - {action.bytecode_error ? ( - - ) : null} - - } - /> - - {slackEnabled ? 'Configure' : 'Enable'} webhooks in project settings. - -
+ {!hogFunctionsEnabled || action.post_to_slack ? ( +
+

Webhook delivery

+ + {hogFunctionsEnabled && ( + + The Webhook integration has been replaced with our new Pipeline Destinations + allowing for much greater customization and visibility into their execution. + )} - - {action.post_to_slack && ( - <> - {!action.bytecode_error && action.post_to_slack && ( - <> - - {({ value, onChange }) => ( + + + {({ value, onChange }) => ( +
+ - Slack message format - - - - See documentation on how to format webhook messages. - - + Post to webhook when this action is triggered. + {action.bytecode_error ? ( + + ) : null} - )} - - + } + /> + + {slackEnabled ? 'Configure' : 'Enable'} webhooks in project settings. + +
)} - - )} -
+
+ {action.post_to_slack && ( + <> + {!action.bytecode_error && action.post_to_slack && ( + <> + + {({ value, onChange }) => ( + <> + Slack message format + + + + See documentation on how to format webhook messages. + + + + )} + + + )} + + )} +
+ ) : undefined} ) diff --git a/frontend/src/scenes/actions/ActionHogFunctions.tsx b/frontend/src/scenes/actions/ActionHogFunctions.tsx new file mode 100644 index 0000000000000..781669d066d1b --- /dev/null +++ b/frontend/src/scenes/actions/ActionHogFunctions.tsx @@ -0,0 +1,59 @@ +import { LemonButton } from '@posthog/lemon-ui' +import { useValues } from 'kea' +import { useFeatureFlag } from 'lib/hooks/useFeatureFlag' +import { actionLogic } from 'scenes/actions/actionLogic' +import { DestinationsTable } from 'scenes/pipeline/destinations/Destinations' +import { PipelineBackend } from 'scenes/pipeline/types' +import { urls } from 'scenes/urls' + +import { PipelineStage } from '~/types' + +export function ActionHogFunctions(): JSX.Element | null { + const { action } = useValues(actionLogic) + + const hogFunctionsEnabled = useFeatureFlag('HOG_FUNCTIONS') + + if (!action || !hogFunctionsEnabled) { + return null + } + + return ( +
+
+

Connected destinations

+ + + New destination + +
+

Actions can be used a filters for destinations such as Slack or Webhook delivery

+ + +
+ ) +} diff --git a/frontend/src/scenes/actions/actionLogic.ts b/frontend/src/scenes/actions/actionLogic.ts index c640029bca9c5..0273bae1af70a 100644 --- a/frontend/src/scenes/actions/actionLogic.ts +++ b/frontend/src/scenes/actions/actionLogic.ts @@ -5,7 +5,7 @@ import { DataManagementTab } from 'scenes/data-management/DataManagementScene' import { Scene } from 'scenes/sceneTypes' import { urls } from 'scenes/urls' -import { ActionType, Breadcrumb, PluginConfigWithPluginInfoNew } from '~/types' +import { ActionType, Breadcrumb, HogFunctionType } from '~/types' import { actionEditLogic } from './actionEditLogic' import type { actionLogicType } from './actionLogicType' @@ -35,11 +35,11 @@ export const actionLogic = kea([ }, }, ], - matchingPluginConfigs: [ - null as PluginConfigWithPluginInfoNew[] | null, + matchingHogFunctions: [ + null as HogFunctionType[] | null, { - loadMatchingPluginConfigs: async () => { - const res = await api.actions.listMatchingPluginConfigs(props.id!) + loadMatchingHogFunctions: async () => { + const res = await api.hogFunctions.list({ filters: { actions: [{ id: `${props.id}` }] } }) return res.results }, diff --git a/frontend/src/scenes/pipeline/destinations/Destinations.tsx b/frontend/src/scenes/pipeline/destinations/Destinations.tsx index 0dc46d76e3d2c..6d2ea2b019c72 100644 --- a/frontend/src/scenes/pipeline/destinations/Destinations.tsx +++ b/frontend/src/scenes/pipeline/destinations/Destinations.tsx @@ -54,7 +54,7 @@ export function Destinations(): JSX.Element { ) } -export function DestinationsTable(props: PipelineDestinationsLogicProps): JSX.Element { +export function DestinationsTable({ ...props }: PipelineDestinationsLogicProps): JSX.Element { const { loading, filteredDestinations, filters, destinations } = useValues(pipelineDestinationsLogic(props)) const { setFilters, resetFilters } = useActions(pipelineDestinationsLogic(props)) @@ -63,36 +63,42 @@ export function DestinationsTable(props: PipelineDestinationsLogicProps): JSX.El return ( <>
- setFilters({ search: e })} - /> + {!props.forceFilters?.search && ( + setFilters({ search: e })} + /> + )}
- setFilters({ onlyActive: e ?? undefined })} - /> - setFilters({ kind: e ?? undefined })} - /> + {typeof props.forceFilters?.onlyActive !== 'boolean' && ( + setFilters({ onlyActive: e ?? undefined })} + /> + )} + {!props.forceFilters?.kind && ( + setFilters({ kind: e ?? undefined })} + /> + )}
@@ -216,7 +222,7 @@ export function DestinationsTable(props: PipelineDestinationsLogicProps): JSX.El } const DestinationMoreOverlay = ({ destination }: { destination: Destination }): JSX.Element => { - const { canConfigurePlugins, canEnableNewDestinations } = useValues(pipelineAccessLogic) + const { canConfigurePlugins, canEnableDestination } = useValues(pipelineAccessLogic) const { toggleNode, deleteNode } = useActions(pipelineDestinationsLogic) return ( @@ -227,7 +233,7 @@ const DestinationMoreOverlay = ({ destination }: { destination: Destination }): onClick: () => toggleNode(destination, !destination.enabled), disabledReason: !canConfigurePlugins ? 'You do not have permission to toggle destinations.' - : !canEnableNewDestinations && !destination.enabled + : !canEnableDestination(destination) && !destination.enabled ? 'Data pipelines add-on is required for enabling new destinations' : undefined, }, diff --git a/frontend/src/scenes/pipeline/destinations/NewDestinations.tsx b/frontend/src/scenes/pipeline/destinations/NewDestinations.tsx index ad91ad46e5c95..c862242200a5c 100644 --- a/frontend/src/scenes/pipeline/destinations/NewDestinations.tsx +++ b/frontend/src/scenes/pipeline/destinations/NewDestinations.tsx @@ -17,7 +17,7 @@ export function DestinationOptionsTable(): JSX.Element { const hogFunctionsEnabled = !!useFeatureFlag('HOG_FUNCTIONS') const { loading, filteredDestinations, filters } = useValues(newDestinationsLogic) const { setFilters, openFeedbackDialog } = useActions(newDestinationsLogic) - const { canEnableNewDestinations } = useValues(pipelineAccessLogic) + const { canEnableDestination } = useValues(pipelineAccessLogic) return (
@@ -71,7 +71,7 @@ export function DestinationOptionsTable(): JSX.Element { render: function RenderName(_, target) { return ( {target.name} @@ -98,7 +98,7 @@ export function DestinationOptionsTable(): JSX.Element { width: 100, align: 'right', render: function RenderActions(_, target) { - return canEnableNewDestinations || target.status === 'free' ? ( + return canEnableDestination(target) ? ( } export type PipelineDestinationsLogicProps = { defaultFilters?: DestinationFilters + forceFilters?: DestinationFilters syncFiltersWithUrl?: boolean } @@ -55,7 +57,7 @@ export const pipelineDestinationsLogic = kea([ userLogic, ['user', 'hasAvailableFeature'], pipelineAccessLogic, - ['canEnableNewDestinations'], + ['canEnableDestination'], ], }), actions({ @@ -73,13 +75,16 @@ export const pipelineDestinationsLogic = kea([ }), reducers(({ props }) => ({ filters: [ - props.defaultFilters as DestinationFilters, + { ...(props.defaultFilters || {}), ...(props.forceFilters || {}) } as DestinationFilters, { setFilters: (state, { filters }) => ({ ...state, ...filters, + ...(props.forceFilters || {}), + }), + resetFilters: () => ({ + ...(props.forceFilters || {}), }), - resetFilters: () => ({}), }, ], })), @@ -188,7 +193,11 @@ export const pipelineDestinationsLogic = kea([ { loadHogFunctions: async () => { // TODO: Support pagination? - return (await api.hogFunctions.list()).results + return ( + await api.hogFunctions.list({ + filters: values.filters?.filters, + }) + ).results }, deleteNodeHogFunction: async ({ destination }) => { @@ -286,7 +295,7 @@ export const pipelineDestinationsLogic = kea([ }), listeners(({ values, actions }) => ({ toggleNode: ({ destination, enabled }) => { - if (enabled && !values.canEnableNewDestinations) { + if (enabled && !values.canEnableDestination(destination)) { lemonToast.error('Data pipelines add-on is required for enabling new destinations.') return } diff --git a/frontend/src/scenes/pipeline/pipelineAccessLogic.tsx b/frontend/src/scenes/pipeline/pipelineAccessLogic.tsx index d738434e8aed4..5a997a8a33bac 100644 --- a/frontend/src/scenes/pipeline/pipelineAccessLogic.tsx +++ b/frontend/src/scenes/pipeline/pipelineAccessLogic.tsx @@ -5,6 +5,7 @@ import { userLogic } from 'scenes/userLogic' import { AvailableFeature } from '~/types' import type { pipelineAccessLogicType } from './pipelineAccessLogicType' +import { Destination, NewDestinationItemType, PipelineBackend } from './types' export const pipelineAccessLogic = kea([ path(['scenes', 'pipeline', 'pipelineAccessLogic']), @@ -22,5 +23,18 @@ export const pipelineAccessLogic = kea([ user?.is_impersonated || (canConfigurePlugins(user?.organization) && hasAvailableFeature(AvailableFeature.DATA_PIPELINES)), ], + + canEnableDestination: [ + (s) => [s.canEnableNewDestinations], + (canEnableNewDestinations): ((destination: Destination | NewDestinationItemType) => boolean) => { + return (destination: Destination | NewDestinationItemType) => { + return destination.backend === PipelineBackend.HogFunction + ? ('hog_function' in destination + ? destination.hog_function.template?.status === 'free' + : destination.status === 'free') || canEnableNewDestinations + : canEnableNewDestinations + } + }, + ], }), ]) diff --git a/frontend/src/scenes/pipeline/types.ts b/frontend/src/scenes/pipeline/types.ts index e10801808ae24..a025de5f0331b 100644 --- a/frontend/src/scenes/pipeline/types.ts +++ b/frontend/src/scenes/pipeline/types.ts @@ -69,6 +69,20 @@ export interface FunctionDestination extends HogFunctionBasedNode { } export type Destination = BatchExportDestination | WebhookDestination | FunctionDestination +export type NewDestinationItemType = { + icon: JSX.Element + url: string + name: string + description: string + backend: PipelineBackend + status?: 'stable' | 'beta' | 'alpha' | 'free' +} + +export type NewDestinationFilters = { + search?: string + kind?: PipelineBackend +} + export interface DataImportApp extends PluginBasedNode { stage: PipelineStage.DataImport } diff --git a/frontend/src/scenes/settings/project/WebhookIntegration.tsx b/frontend/src/scenes/settings/project/WebhookIntegration.tsx index 6a01dd2e113ce..a14ee599902b0 100644 --- a/frontend/src/scenes/settings/project/WebhookIntegration.tsx +++ b/frontend/src/scenes/settings/project/WebhookIntegration.tsx @@ -5,6 +5,9 @@ import { FEATURE_FLAGS } from 'lib/constants' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { useEffect, useState } from 'react' import { teamLogic } from 'scenes/teamLogic' +import { urls } from 'scenes/urls' + +import { PipelineTab } from '~/types' import { webhookIntegrationLogic } from './webhookIntegrationLogic' @@ -22,6 +25,8 @@ export function WebhookIntegration(): JSX.Element { } }, [currentTeam]) + const hogFunctionsEnabled = featureFlags[FEATURE_FLAGS.HOG_FUNCTIONS] + const webhooks_disallowed = featureFlags[FEATURE_FLAGS.WEBHOOKS_DENYLIST] if (webhooks_disallowed) { return ( @@ -36,6 +41,18 @@ export function WebhookIntegration(): JSX.Element { ) } + if (hogFunctionsEnabled && !currentTeam?.slack_incoming_webhook) { + return ( + <> +

+ The Webhook integration has been replaced with our new{' '} + Pipeline Destinations allowing you to + create multiple, highly customizable webhook triggers based off of Actions or Events. +

+ + ) + } + return (

diff --git a/posthog/api/action.py b/posthog/api/action.py index 816c34d2f4247..c43bf893ca7a4 100644 --- a/posthog/api/action.py +++ b/posthog/api/action.py @@ -3,13 +3,10 @@ from rest_framework import serializers, viewsets from django.db.models import Count from rest_framework import request -from rest_framework.decorators import action -from rest_framework.request import Request from rest_framework.response import Response from rest_framework.settings import api_settings from rest_framework_csv import renderers as csvrenderers -from posthog.api.plugin import PluginConfigSerializer from posthog.api.routing import TeamAndOrgViewSetMixin from posthog.api.shared import UserBasicSerializer from posthog.auth import ( @@ -19,7 +16,6 @@ from posthog.event_usage import report_user_action from posthog.models import Action from posthog.models.action.action import ACTION_STEP_MATCHING_OPTIONS -from posthog.models.plugin import PluginConfig from .forbid_destroy_model import ForbidDestroyModel from .tagged_item import TaggedItemSerializerMixin, TaggedItemViewSetMixin @@ -149,15 +145,3 @@ def list(self, request: request.Request, *args: Any, **kwargs: Any) -> Response: actions, many=True, context={"request": request} ).data # type: ignore return Response({"results": actions_list}) - - @action(methods=["GET"], detail=True) - def plugin_configs(self, request: Request, *args: Any, **kwargs: Any) -> Response: - queryset = ( - PluginConfig.objects.all() - .filter(team=self.team_id, enabled=True) - .filter(filters__contains={"actions": [{"id": str(self.get_object().id)}]}) - ) - - page = self.paginate_queryset(queryset) - serializer = PluginConfigSerializer(page, many=True, context=self.get_serializer_context()) - return self.get_paginated_response(serializer.data) diff --git a/posthog/api/hog_function.py b/posthog/api/hog_function.py index 972178a875401..a9eddc7b1fae0 100644 --- a/posthog/api/hog_function.py +++ b/posthog/api/hog_function.py @@ -1,9 +1,10 @@ +import json from typing import Optional, cast import structlog from django_filters.rest_framework import DjangoFilterBackend from django.db.models import QuerySet -from rest_framework import serializers, viewsets +from rest_framework import serializers, viewsets, exceptions from rest_framework.serializers import BaseSerializer from rest_framework.decorators import action from rest_framework.request import Request @@ -50,6 +51,7 @@ class Meta: "hog", "filters", "icon_url", + "template", ] read_only_fields = fields @@ -100,9 +102,10 @@ def validate(self, attrs): attrs["team"] = team has_addon = team.organization.is_feature_available(AvailableFeature.DATA_PIPELINES) + instance = cast(Optional[HogFunction], self.context.get("instance", self.instance)) if not has_addon: - template_id = attrs.get("template_id") + template_id = attrs.get("template_id", instance.template_id if instance else None) template = HOG_FUNCTION_TEMPLATES_BY_ID.get(template_id, None) # In this case they are only allowed to create or update the function with free templates @@ -130,8 +133,6 @@ def validate(self, attrs): attrs["inputs_schema"] = template.inputs_schema attrs["hog"] = template.hog - instance = cast(Optional[HogFunction], self.context.get("instance", self.instance)) - if "inputs_schema" in attrs: attrs["inputs_schema"] = validate_inputs_schema(attrs["inputs_schema"]) @@ -213,6 +214,13 @@ def safely_get_queryset(self, queryset: QuerySet) -> QuerySet: if self.action == "list": queryset = queryset.filter(deleted=False) + if self.request.GET.get("filters"): + try: + filters = json.loads(self.request.GET["filters"]) + queryset = queryset.filter(filters__contains=filters) + except Exception: + raise exceptions.ValidationError({"filter": f"Invalid filter"}) + return queryset @action(detail=False, methods=["GET"]) diff --git a/posthog/api/test/test_hog_function.py b/posthog/api/test/test_hog_function.py index 23b33ff5f91a4..57f7290cd5fc5 100644 --- a/posthog/api/test/test_hog_function.py +++ b/posthog/api/test/test_hog_function.py @@ -1,5 +1,5 @@ import json -from typing import Optional +from typing import Any, Optional from unittest.mock import ANY, patch from rest_framework import status @@ -552,3 +552,62 @@ def test_patches_status_on_enabled_update(self, *args): f"http://localhost:6738/api/projects/{self.team.id}/hog_functions/{response.json()['id']}/status", json={"state": 2}, ) + + @patch("posthog.permissions.posthoganalytics.feature_enabled", return_value=True) + def test_list_with_filters_filter(self, *args): + action1 = Action.objects.create( + team=self.team, + name="test action", + steps_json=[{"event": "$pageview", "url": "docs", "url_matching": "contains"}], + ) + + action2 = Action.objects.create( + team=self.team, + name="test action", + steps_json=[{"event": "$pageview", "url": "docs", "url_matching": "contains"}], + ) + + self.team.test_account_filters = [ + { + "key": "email", + "value": "@posthog.com", + "operator": "not_icontains", + "type": "person", + } + ] + self.team.save() + response = self.client.post( + f"/api/projects/{self.team.id}/hog_functions/", + data={ + **EXAMPLE_FULL, + "filters": { + "events": [{"id": "$pageview", "name": "$pageview", "type": "events", "order": 0}], + "actions": [ + {"id": f"{action1.id}", "name": "Test Action", "type": "actions", "order": 1}, + {"id": f"{action2.id}", "name": "Test Action 2", "type": "actions", "order": 1}, + ], + "filter_test_accounts": True, + }, + }, + ) + assert response.status_code == status.HTTP_201_CREATED, response.json() + + filters: Any = {"filter_test_accounts": True} + response = self.client.get(f"/api/projects/{self.team.id}/hog_functions/?filters={json.dumps(filters)}") + assert len(response.json()["results"]) == 1 + + filters = {"filter_test_accounts": False} + response = self.client.get(f"/api/projects/{self.team.id}/hog_functions/?filters={json.dumps(filters)}") + assert len(response.json()["results"]) == 0 + + filters = {"actions": [{"id": f"other"}]} + response = self.client.get(f"/api/projects/{self.team.id}/hog_functions/?filters={json.dumps(filters)}") + assert len(response.json()["results"]) == 0 + + filters = {"actions": [{"id": f"{action1.id}"}]} + response = self.client.get(f"/api/projects/{self.team.id}/hog_functions/?filters={json.dumps(filters)}") + assert len(response.json()["results"]) == 1 + + filters = {"actions": [{"id": f"{action2.id}"}]} + response = self.client.get(f"/api/projects/{self.team.id}/hog_functions/?filters={json.dumps(filters)}") + assert len(response.json()["results"]) == 1 From 703f7668a47ac5e60466f85ee3909d1310fd8464 Mon Sep 17 00:00:00 2001 From: Marius Andra Date: Fri, 26 Jul 2024 09:31:25 +0200 Subject: [PATCH 03/24] feat(cdp): more metadata in function logs (#23986) --- .../hogfunctions/HogFunctionConfiguration.tsx | 4 +- hogvm/typescript/package.json | 2 +- .../typescript/src/__tests__/execute.test.ts | 41 ++++++++++++++++++- hogvm/typescript/src/execute.ts | 23 +++++++++-- plugin-server/package.json | 2 +- plugin-server/pnpm-lock.yaml | 8 ++-- plugin-server/src/cdp/hog-executor.ts | 22 +++++++--- .../cdp-function-callbacks-consumer.test.ts | 8 ++-- .../cdp/cdp-processed-events-consumer.test.ts | 2 +- plugin-server/tests/cdp/hog-executor.test.ts | 8 ++-- .../aws_kinesis/template_aws_kinesis.py | 20 ++++----- 11 files changed, 102 insertions(+), 38 deletions(-) diff --git a/frontend/src/scenes/pipeline/hogfunctions/HogFunctionConfiguration.tsx b/frontend/src/scenes/pipeline/hogfunctions/HogFunctionConfiguration.tsx index f9f4e71e48926..a6d23e590ac03 100644 --- a/frontend/src/scenes/pipeline/hogfunctions/HogFunctionConfiguration.tsx +++ b/frontend/src/scenes/pipeline/hogfunctions/HogFunctionConfiguration.tsx @@ -306,12 +306,12 @@ export function HogFunctionConfiguration({ templateId, id }: { templateId?: stri <> {sparkline.count > EVENT_THRESHOLD_ALERT_LEVEL ? ( - Warning: This destionation would have triggered{' '} + Warning: This destination would have triggered{' '} {sparkline.count ?? 0} time{sparkline.count !== 1 ? 's' : ''} {' '} in the last 7 days. Consider the impact of this function on your - infrastructure. + destination. ) : (

diff --git a/hogvm/typescript/package.json b/hogvm/typescript/package.json index 6d2c5a3af3155..9c1c69e31b280 100644 --- a/hogvm/typescript/package.json +++ b/hogvm/typescript/package.json @@ -1,6 +1,6 @@ { "name": "@posthog/hogvm", - "version": "1.0.28", + "version": "1.0.30", "description": "PostHog Hog Virtual Machine", "types": "dist/index.d.ts", "main": "dist/index.js", diff --git a/hogvm/typescript/src/__tests__/execute.test.ts b/hogvm/typescript/src/__tests__/execute.test.ts index 19365668f514d..435b7d873abfe 100644 --- a/hogvm/typescript/src/__tests__/execute.test.ts +++ b/hogvm/typescript/src/__tests__/execute.test.ts @@ -531,7 +531,7 @@ describe('hogvm execute', () => { maxMemUsed: 16, ops: 3, stack: [4.2], - syncDuration: 0, + syncDuration: expect.any(Number), }, }) }) @@ -547,6 +547,45 @@ describe('hogvm execute', () => { expect(exec(bytecode)).toEqual({ finished: true, result: '0.002', + state: { + asyncSteps: 0, + bytecode: [], + callStack: [], + declaredFunctions: {}, + ip: -1, + maxMemUsed: 13, + ops: 2, + stack: [], + throwStack: [], + syncDuration: expect.any(Number), + }, + }) + }) + test('exec runs at sync return', () => { + const bytecode = [ + '_h', + 33, + 0.002, // seconds to sleep + 2, + 'toString', + 1, + op.RETURN, + ] + expect(exec(bytecode)).toEqual({ + finished: true, + result: '0.002', + state: { + asyncSteps: 0, + bytecode: [], + callStack: [], + declaredFunctions: {}, + ip: -1, + maxMemUsed: 13, + ops: 3, + stack: [], + throwStack: [], + syncDuration: expect.any(Number), + }, }) }) test('test bytecode dicts', () => { diff --git a/hogvm/typescript/src/execute.ts b/hogvm/typescript/src/execute.ts index cf502e94ed194..389e1ded547f2 100644 --- a/hogvm/typescript/src/execute.ts +++ b/hogvm/typescript/src/execute.ts @@ -175,6 +175,20 @@ export function exec(code: any[] | VMState, options?: ExecOptions): ExecResult { throw new HogVMException(`Execution timed out after ${timeout / 1000} seconds. Performed ${ops} ops.`) } } + function getFinishedState(): VMState { + return { + bytecode: [], + stack: [], + callStack: [], + throwStack: [], + declaredFunctions: {}, + ip: -1, + ops, + asyncSteps, + syncDuration: syncDuration + (Date.now() - startTime), + maxMemUsed, + } + } for (; ip < bytecode.length; ip++) { ops += 1 @@ -314,6 +328,7 @@ export function exec(code: any[] | VMState, options?: ExecOptions): ExecResult { return { result: popStack(), finished: true, + state: getFinishedState(), } satisfies ExecResult } case Operation.GET_LOCAL: @@ -477,9 +492,11 @@ export function exec(code: any[] | VMState, options?: ExecOptions): ExecResult { if (stack.length > 1) { throw new HogVMException('Invalid bytecode. More than one value left on stack') - } else if (stack.length === 0) { - return { result: null, finished: true } satisfies ExecResult } - return { result: popStack() ?? null, finished: true } satisfies ExecResult + if (stack.length === 0) { + return { result: null, finished: true, state: getFinishedState() } satisfies ExecResult + } + + return { result: popStack() ?? null, finished: true, state: getFinishedState() } satisfies ExecResult } diff --git a/plugin-server/package.json b/plugin-server/package.json index ca4a1b7503ffe..6c9c92846efb2 100644 --- a/plugin-server/package.json +++ b/plugin-server/package.json @@ -50,7 +50,7 @@ "@google-cloud/storage": "^5.8.5", "@maxmind/geoip2-node": "^3.4.0", "@posthog/clickhouse": "^1.7.0", - "@posthog/hogvm": "^1.0.28", + "@posthog/hogvm": "^1.0.29", "@posthog/plugin-scaffold": "1.4.4", "@sentry/node": "^7.49.0", "@sentry/profiling-node": "^0.3.0", diff --git a/plugin-server/pnpm-lock.yaml b/plugin-server/pnpm-lock.yaml index 3c287c8cd565b..5d610dc56c30b 100644 --- a/plugin-server/pnpm-lock.yaml +++ b/plugin-server/pnpm-lock.yaml @@ -44,8 +44,8 @@ dependencies: specifier: ^1.7.0 version: 1.7.0 '@posthog/hogvm': - specifier: ^1.0.28 - version: 1.0.28(luxon@3.4.4)(re2@1.20.3) + specifier: ^1.0.29 + version: 1.0.29(luxon@3.4.4)(re2@1.20.3) '@posthog/plugin-scaffold': specifier: 1.4.4 version: 1.4.4 @@ -3110,8 +3110,8 @@ packages: engines: {node: '>=12'} dev: false - /@posthog/hogvm@1.0.28(luxon@3.4.4)(re2@1.20.3): - resolution: {integrity: sha512-xkPcBj8kHCdeIA1dAoPDqFzk1pcuI+abbxSJyjfLqwglZtWSu1pASCLA+U0/CTKNe0yMcqVAC9kNc3yt9pujBQ==} + /@posthog/hogvm@1.0.29(luxon@3.4.4)(re2@1.20.3): + resolution: {integrity: sha512-mj9ppJTskp1G+rPsvaNwmgGy1EjcmNz7h9i7U/zRwYaXErz7omqVTIZujA2OUoR9NXuR8L5QaqQuhXiTEuRruA==} peerDependencies: luxon: ^3.4.4 re2: ^1.21.3 diff --git a/plugin-server/src/cdp/hog-executor.ts b/plugin-server/src/cdp/hog-executor.ts index debab8c702561..bd4e8aa27783d 100644 --- a/plugin-server/src/cdp/hog-executor.ts +++ b/plugin-server/src/cdp/hog-executor.ts @@ -1,4 +1,4 @@ -import { convertHogToJS, convertJSToHog, exec, ExecResult, VMState } from '@posthog/hogvm' +import { calculateCost, convertHogToJS, convertJSToHog, exec, ExecResult, VMState } from '@posthog/hogvm' import { DateTime } from 'luxon' import { Histogram } from 'prom-client' @@ -342,14 +342,19 @@ export class HogExecutor { }) if (!execRes.finished) { - addLog(result, 'debug', `Suspending function due to async function call '${execRes.asyncFunctionName}'`) - const args = (execRes.asyncFunctionArgs ?? []).map((arg) => convertHogToJS(arg)) - if (!execRes.state) { // NOTE: This shouldn't be possible so is more of a type sanity check throw new Error('State should be provided for async function') } + addLog( + result, + 'debug', + `Suspending function due to async function call '${execRes.asyncFunctionName}'. Payload: ${ + calculateCost(execRes.state) + calculateCost(args) + } bytes` + ) + if (execRes.asyncFunctionName) { result.asyncFunctionRequest = { name: execRes.asyncFunctionName, @@ -361,8 +366,13 @@ export class HogExecutor { } } else { const totalDuration = result.timings.reduce((acc, timing) => acc + timing.duration_ms, 0) - - addLog(result, 'debug', `Function completed. Processing time ${totalDuration}ms`) + const messages = [`Function completed in ${totalDuration}ms.`] + if (execRes.state) { + messages.push(`Sync: ${execRes.state.syncDuration}ms.`) + messages.push(`Mem: ${execRes.state.maxMemUsed} bytes.`) + messages.push(`Ops: ${execRes.state.ops}.`) + } + addLog(result, 'debug', messages.join(' ')) } } catch (err) { result.error = err.message diff --git a/plugin-server/tests/cdp/cdp-function-callbacks-consumer.test.ts b/plugin-server/tests/cdp/cdp-function-callbacks-consumer.test.ts index 24b8d9a337322..137c75d6594ac 100644 --- a/plugin-server/tests/cdp/cdp-function-callbacks-consumer.test.ts +++ b/plugin-server/tests/cdp/cdp-function-callbacks-consumer.test.ts @@ -163,7 +163,7 @@ describe('CDP Processed Events Consuner', () => { { log_source: 'hog_function', level: 'debug', - message: "Suspending function due to async function call 'fetch'", + message: "Suspending function due to async function call 'fetch'. Payload: 1140 bytes", }, { log_source: 'hog_function', @@ -188,7 +188,7 @@ describe('CDP Processed Events Consuner', () => { { log_source: 'hog_function', level: 'debug', - message: expect.stringContaining('Function completed. Processing time'), + message: expect.stringContaining('Function completed in '), }, ], }) @@ -218,7 +218,7 @@ describe('CDP Processed Events Consuner', () => { { log_source: 'hog_function', level: 'debug', - message: "Suspending function due to async function call 'fetch'", + message: "Suspending function due to async function call 'fetch'. Payload: 1140 bytes", }, { log_source: 'hog_function', @@ -233,7 +233,7 @@ describe('CDP Processed Events Consuner', () => { { log_source: 'hog_function', level: 'debug', - message: expect.stringContaining('Function completed. Processing time'), + message: expect.stringContaining('Function completed in'), }, ], }) diff --git a/plugin-server/tests/cdp/cdp-processed-events-consumer.test.ts b/plugin-server/tests/cdp/cdp-processed-events-consumer.test.ts index 5cce84f63ca38..2013d21d48b6c 100644 --- a/plugin-server/tests/cdp/cdp-processed-events-consumer.test.ts +++ b/plugin-server/tests/cdp/cdp-processed-events-consumer.test.ts @@ -211,7 +211,7 @@ describe('CDP Processed Events Consuner', () => { topic: 'log_entries_test', value: { log_source: 'hog_function', - message: "Suspending function due to async function call 'fetch'", + message: "Suspending function due to async function call 'fetch'. Payload: 1497 bytes", team_id: 2, }, }) diff --git a/plugin-server/tests/cdp/hog-executor.test.ts b/plugin-server/tests/cdp/hog-executor.test.ts index 9ca43af1b56ab..123541cc12238 100644 --- a/plugin-server/tests/cdp/hog-executor.test.ts +++ b/plugin-server/tests/cdp/hog-executor.test.ts @@ -95,7 +95,7 @@ describe('Hog Executor', () => { instance_id: results[0].id, timestamp: expect.any(DateTime), level: 'debug', - message: "Suspending function due to async function call 'fetch'", + message: "Suspending function due to async function call 'fetch'. Payload: 1299 bytes", }, ]) @@ -125,7 +125,7 @@ describe('Hog Executor', () => { "{\\"foo\\":\\"***REDACTED***\\"}", "substring: ***REDACTED***", "{\\"input_1\\":\\"test\\",\\"secret_input_2\\":{\\"foo\\":\\"***REDACTED***\\"},\\"secret_input_3\\":\\"***REDACTED***\\"}", - "Function completed. Processing time 0ms", + "Function completed in 0ms. Sync: 0ms. Mem: 129 bytes. Ops: 28.", ] `) }) @@ -204,10 +204,10 @@ describe('Hog Executor', () => { expect(asyncExecResult.finished).toBe(true) expect(logs.map((log) => log.message)).toEqual([ 'Executing function', - "Suspending function due to async function call 'fetch'", + "Suspending function due to async function call 'fetch'. Payload: 1299 bytes", 'Resuming function', 'Fetch response:, {"status":200,"body":"success"}', - 'Function completed. Processing time 100ms', + 'Function completed in 100ms. Sync: 0ms. Mem: 589 bytes. Ops: 22.', ]) }) }) diff --git a/posthog/cdp/templates/aws_kinesis/template_aws_kinesis.py b/posthog/cdp/templates/aws_kinesis/template_aws_kinesis.py index 4e0ef38d793b1..df41fa266ecec 100644 --- a/posthog/cdp/templates/aws_kinesis/template_aws_kinesis.py +++ b/posthog/cdp/templates/aws_kinesis/template_aws_kinesis.py @@ -8,9 +8,8 @@ description="Put data to an AWS Kinesis stream", icon_url="/static/services/aws-kinesis.png", hog=""" -fn uploadToKinesis(data) { +fn getPayload() { let region := inputs.aws_region - let endpoint := f'https://kinesis.{region}.amazonaws.com' let service := 'kinesis' let amzDate := formatDateTime(now(), '%Y%m%dT%H%i%sZ') let date := formatDateTime(now(), '%Y%m%d') @@ -18,7 +17,7 @@ let payload := jsonStringify({ 'StreamName': inputs.aws_kinesis_stream_arn, 'PartitionKey': inputs.aws_kinesis_partition_key, - 'Data': base64Encode(data), + 'Data': base64Encode(jsonStringify(inputs.payload)), }) let requestHeaders := { @@ -69,21 +68,20 @@ requestHeaders['Authorization'] := authorizationHeader - let res := fetch(endpoint, { + return { 'headers': requestHeaders, 'body': payload, 'method': 'POST' - }) - - if (res.status >= 200 and res.status < 300) { - print('Event sent successfully!') - return } +} +let res := fetch(f'https://kinesis.{inputs.aws_region}.amazonaws.com', getPayload()) + +if (res.status >= 200 and res.status < 300) { + print('Event sent successfully!') +} else { print('Error sending event:', res.status, res.body) } - -uploadToKinesis(jsonStringify(inputs.payload)) """.strip(), inputs_schema=[ { From 7ebd594140c6a750b2bd0b9ae093323f2e4c4ea7 Mon Sep 17 00:00:00 2001 From: Marius Andra Date: Fri, 26 Jul 2024 09:56:39 +0200 Subject: [PATCH 04/24] feat(hog): bump hogvm (#24007) --- plugin-server/package.json | 2 +- plugin-server/pnpm-lock.yaml | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/plugin-server/package.json b/plugin-server/package.json index 6c9c92846efb2..e7fe6138781a9 100644 --- a/plugin-server/package.json +++ b/plugin-server/package.json @@ -50,7 +50,7 @@ "@google-cloud/storage": "^5.8.5", "@maxmind/geoip2-node": "^3.4.0", "@posthog/clickhouse": "^1.7.0", - "@posthog/hogvm": "^1.0.29", + "@posthog/hogvm": "^1.0.30", "@posthog/plugin-scaffold": "1.4.4", "@sentry/node": "^7.49.0", "@sentry/profiling-node": "^0.3.0", diff --git a/plugin-server/pnpm-lock.yaml b/plugin-server/pnpm-lock.yaml index 5d610dc56c30b..323664424efff 100644 --- a/plugin-server/pnpm-lock.yaml +++ b/plugin-server/pnpm-lock.yaml @@ -44,8 +44,8 @@ dependencies: specifier: ^1.7.0 version: 1.7.0 '@posthog/hogvm': - specifier: ^1.0.29 - version: 1.0.29(luxon@3.4.4)(re2@1.20.3) + specifier: ^1.0.30 + version: 1.0.30(luxon@3.4.4)(re2@1.20.3) '@posthog/plugin-scaffold': specifier: 1.4.4 version: 1.4.4 @@ -3110,8 +3110,8 @@ packages: engines: {node: '>=12'} dev: false - /@posthog/hogvm@1.0.29(luxon@3.4.4)(re2@1.20.3): - resolution: {integrity: sha512-mj9ppJTskp1G+rPsvaNwmgGy1EjcmNz7h9i7U/zRwYaXErz7omqVTIZujA2OUoR9NXuR8L5QaqQuhXiTEuRruA==} + /@posthog/hogvm@1.0.30(luxon@3.4.4)(re2@1.20.3): + resolution: {integrity: sha512-u501rsyskUUnFgMUZjYDfU3pBKp17CKq7aHPAgFpQVFLt1fE9KOQT/hakBjhM9OFUHpjod3SJX3NpbXhOgjz3Q==} peerDependencies: luxon: ^3.4.4 re2: ^1.21.3 From 8d40c28221191caad29943e19c6471f129ea8b8f Mon Sep 17 00:00:00 2001 From: David Newell Date: Fri, 26 Jul 2024 09:27:03 +0100 Subject: [PATCH 05/24] fix: faster canvas playback (at the expense of quality) (#23985) --- .../session-recordings/player/rrweb/canvas/canvas-plugin.ts | 2 +- posthog/api/decide.py | 4 ++-- posthog/api/test/test_decide.py | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/frontend/src/scenes/session-recordings/player/rrweb/canvas/canvas-plugin.ts b/frontend/src/scenes/session-recordings/player/rrweb/canvas/canvas-plugin.ts index 6b6d58a1e2f4b..b11d928f51c22 100644 --- a/frontend/src/scenes/session-recordings/player/rrweb/canvas/canvas-plugin.ts +++ b/frontend/src/scenes/session-recordings/player/rrweb/canvas/canvas-plugin.ts @@ -165,7 +165,7 @@ export const CanvasReplayerPlugin = (events: eventWithTime[]): ReplayPlugin => { }, // ensures transparency is possible 'image/webp', - 0.5 + 0.4 ) } } diff --git a/posthog/api/decide.py b/posthog/api/decide.py index 7a3d45480b1bf..747ba4d463f4e 100644 --- a/posthog/api/decide.py +++ b/posthog/api/decide.py @@ -318,8 +318,8 @@ def _session_recording_config_response(request: HttpRequest, team: Team) -> bool { "recordCanvas": record_canvas, # hard coded during beta while we decide on sensible values - "canvasFps": 4 if record_canvas else None, - "canvasQuality": "0.6" if record_canvas else None, + "canvasFps": 3 if record_canvas else None, + "canvasQuality": "0.4" if record_canvas else None, } ) except Exception as e: diff --git a/posthog/api/test/test_decide.py b/posthog/api/test/test_decide.py index 352ab961c1297..bf781da00e635 100644 --- a/posthog/api/test/test_decide.py +++ b/posthog/api/test/test_decide.py @@ -356,8 +356,8 @@ def test_session_replay_config(self, *args): response = self._post_decide().json() self.assertEqual(response["sessionRecording"]["recordCanvas"], True) - self.assertEqual(response["sessionRecording"]["canvasFps"], 4) - self.assertEqual(response["sessionRecording"]["canvasQuality"], "0.6") + self.assertEqual(response["sessionRecording"]["canvasFps"], 3) + self.assertEqual(response["sessionRecording"]["canvasQuality"], "0.4") def test_exception_autocapture_opt_in(self, *args): # :TRICKY: Test for regression around caching From c909bc9b88d167c04f3b829c0abf6dbb4519d604 Mon Sep 17 00:00:00 2001 From: Marius Andra Date: Fri, 26 Jul 2024 10:33:15 +0200 Subject: [PATCH 06/24] fix(hog): c++ parser feedback (#24008) Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com> --- hogql_parser/parser.cpp | 10 ++-------- hogql_parser/setup.py | 2 +- requirements.in | 2 +- requirements.txt | 2 +- 4 files changed, 5 insertions(+), 11 deletions(-) diff --git a/hogql_parser/parser.cpp b/hogql_parser/parser.cpp index 759e11ce8405b..895da372b49bf 100644 --- a/hogql_parser/parser.cpp +++ b/hogql_parser/parser.cpp @@ -469,12 +469,7 @@ class HogQLParseTreeConverter : public HogQLParserBaseVisitor { } catch (...) { throw; } - PyObject* ret = build_ast_node("ThrowStatement", "{s:N}", "expr", expr); - if (!ret) { - Py_DECREF(expr); - throw PyInternalError(); - } - return ret; + RETURN_NEW_AST_NODE("ThrowStatement", "{s:N}", "expr", expr); } VISIT(CatchBlock) { @@ -484,8 +479,7 @@ class HogQLParseTreeConverter : public HogQLParserBaseVisitor { catch_var = visitAsString(ctx->catchVar); catch_var_py = PyUnicode_FromStringAndSize(catch_var.data(), catch_var.size()); } else { - catch_var_py = Py_None; - Py_INCREF(catch_var_py); + catch_var_py = Py_NewRef(Py_None); } PyObject* catch_type_py; diff --git a/hogql_parser/setup.py b/hogql_parser/setup.py index deb55e9dea40d..a8c0ca1b7acf9 100644 --- a/hogql_parser/setup.py +++ b/hogql_parser/setup.py @@ -32,7 +32,7 @@ setup( name="hogql_parser", - version="1.0.30", + version="1.0.31", url="https://github.com/PostHog/posthog/tree/master/hogql_parser", author="PostHog Inc.", author_email="hey@posthog.com", diff --git a/requirements.in b/requirements.in index 9125c854e218b..b6433de6366a8 100644 --- a/requirements.in +++ b/requirements.in @@ -95,7 +95,7 @@ phonenumberslite==8.13.6 openai==1.10.0 tiktoken==0.6.0 nh3==0.2.14 -hogql-parser==1.0.30 +hogql-parser==1.0.31 zxcvbn==4.4.28 zstd==1.5.5.1 xmlsec==1.3.13 # Do not change this version - it will break SAML diff --git a/requirements.txt b/requirements.txt index a77665a2c80d2..50039323b0e50 100644 --- a/requirements.txt +++ b/requirements.txt @@ -271,7 +271,7 @@ h11==0.13.0 # wsproto hexbytes==1.0.0 # via dlt -hogql-parser==1.0.30 +hogql-parser==1.0.31 # via -r requirements.in httpcore==1.0.2 # via httpx From 8f557d53004427e8482bf4d2709d314bfe6ba2fc Mon Sep 17 00:00:00 2001 From: Marius Andra Date: Fri, 26 Jul 2024 10:41:47 +0200 Subject: [PATCH 07/24] revert: use elements chain materialization (#24010) --- ee/clickhouse/materialized_columns/columns.py | 1 - mypy-baseline.txt | 3 + posthog/api/test/test_action.py | 4 + .../test/__snapshots__/test_schema.ambr | 20 +- posthog/hogql/database/schema/events.py | 5 - .../test/__snapshots__/test_database.ambr | 84 +-- posthog/hogql/property.py | 516 ++++++-------- .../test/__snapshots__/test_resolver.ambr | 652 ------------------ posthog/hogql/test/test_property.py | 126 ++-- .../test/__snapshots__/test_funnel.ambr | 4 +- posthog/models/event/sql.py | 12 +- posthog/models/event/util.py | 8 +- posthog/test/base.py | 5 - 13 files changed, 288 insertions(+), 1152 deletions(-) diff --git a/ee/clickhouse/materialized_columns/columns.py b/ee/clickhouse/materialized_columns/columns.py index 135f27b392190..3dc21ccde59f6 100644 --- a/ee/clickhouse/materialized_columns/columns.py +++ b/ee/clickhouse/materialized_columns/columns.py @@ -44,7 +44,6 @@ def get_materialized_columns( WHERE database = %(database)s AND table = %(table)s AND comment LIKE '%%column_materializer::%%' - AND comment not LIKE '%%column_materializer::elements_chain::%%' """, {"database": CLICKHOUSE_DATABASE, "table": table}, ) diff --git a/mypy-baseline.txt b/mypy-baseline.txt index 7ca3fda0ce461..76b7e1490f5ed 100644 --- a/mypy-baseline.txt +++ b/mypy-baseline.txt @@ -256,6 +256,9 @@ posthog/models/property/util.py:0: error: Argument 1 to "append" of "list" has i posthog/models/property/util.py:0: error: Argument 1 to "append" of "list" has incompatible type "str | int"; expected "str" [arg-type] posthog/models/property/util.py:0: error: Argument 1 to "append" of "list" has incompatible type "str | int"; expected "str" [arg-type] posthog/queries/trends/util.py:0: error: Argument 1 to "translate_hogql" has incompatible type "str | None"; expected "str" [arg-type] +posthog/hogql/property.py:0: error: Argument "chain" to "Field" has incompatible type "list[str]"; expected "list[str | int]" [arg-type] +posthog/hogql/property.py:0: note: "List" is invariant -- see https://mypy.readthedocs.io/en/stable/common_issues.html#variance +posthog/hogql/property.py:0: note: Consider using "Sequence" instead, which is covariant posthog/hogql/property.py:0: error: Incompatible type for lookup 'id': (got "str | int | list[str]", expected "str | int") [misc] posthog/hogql/property.py:0: error: Incompatible type for lookup 'pk': (got "str | float", expected "str | int") [misc] posthog/hogql/filters.py:0: error: Incompatible default for argument "team" (default has type "None", argument has type "Team") [assignment] diff --git a/posthog/api/test/test_action.py b/posthog/api/test/test_action.py index 3e4a0c4f56d87..2d162ff872ae1 100644 --- a/posthog/api/test/test_action.py +++ b/posthog/api/test/test_action.py @@ -136,7 +136,9 @@ def test_update_action(self, patch_capture, *args): action = Action.objects.create( name="user signed up", team=self.team, steps_json=[{"event": "$autocapture", "text": "sign me up!"}] ) + action.refresh_bytecode() action.save() + previous_bytecode = action.bytecode response = self.client.patch( f"/api/projects/{self.team.id}/actions/{action.pk}/", @@ -196,6 +198,8 @@ def test_update_action(self, patch_capture, *args): action.refresh_from_db() assert action.name == "user signed up 2" + assert previous_bytecode != action.bytecode + # Assert analytics are sent patch_capture.assert_called_with( user, diff --git a/posthog/clickhouse/test/__snapshots__/test_schema.ambr b/posthog/clickhouse/test/__snapshots__/test_schema.ambr index 69407e9000939..344ac139affa4 100644 --- a/posthog/clickhouse/test/__snapshots__/test_schema.ambr +++ b/posthog/clickhouse/test/__snapshots__/test_schema.ambr @@ -595,10 +595,6 @@ , $group_4 VARCHAR COMMENT 'column_materializer::$group_4' , $window_id VARCHAR COMMENT 'column_materializer::$window_id' , $session_id VARCHAR COMMENT 'column_materializer::$session_id' - , elements_chain_href String COMMENT 'column_materializer::elements_chain::href' - , elements_chain_texts Array(String) COMMENT 'column_materializer::elements_chain::texts' - , elements_chain_ids Array(String) COMMENT 'column_materializer::elements_chain::ids' - , elements_chain_elements Array(Enum('a', 'button', 'form', 'input', 'select', 'textarea', 'label')) COMMENT 'column_materializer::elements_chain::elements' , _timestamp DateTime @@ -2177,10 +2173,6 @@ , $group_4 VARCHAR MATERIALIZED replaceRegexpAll(JSONExtractRaw(properties, '$group_4'), '^"|"$', '') COMMENT 'column_materializer::$group_4' , $window_id VARCHAR MATERIALIZED replaceRegexpAll(JSONExtractRaw(properties, '$window_id'), '^"|"$', '') COMMENT 'column_materializer::$window_id' , $session_id VARCHAR MATERIALIZED replaceRegexpAll(JSONExtractRaw(properties, '$session_id'), '^"|"$', '') COMMENT 'column_materializer::$session_id' - , elements_chain_href String MATERIALIZED extract(elements_chain, '(?::|")href="(.*?)"') - , elements_chain_texts Array(String) MATERIALIZED arrayDistinct(extractAll(elements_chain, '(?::|")text="(.*?)"')) - , elements_chain_ids Array(String) MATERIALIZED arrayDistinct(extractAll(elements_chain, '(?::|")attr_id="(.*?)"')) - , elements_chain_elements Array(Enum('a', 'button', 'form', 'input', 'select', 'textarea', 'label')) MATERIALIZED arrayDistinct(extractAll(elements_chain, '(?:^|;)(a|button|form|input|select|textarea|label)(?:\.|$|:)')) , INDEX `minmax_$group_0` `$group_0` TYPE minmax GRANULARITY 1 , INDEX `minmax_$group_1` `$group_1` TYPE minmax GRANULARITY 1 , INDEX `minmax_$group_2` `$group_2` TYPE minmax GRANULARITY 1 @@ -2188,6 +2180,10 @@ , INDEX `minmax_$group_4` `$group_4` TYPE minmax GRANULARITY 1 , INDEX `minmax_$window_id` `$window_id` TYPE minmax GRANULARITY 1 , INDEX `minmax_$session_id` `$session_id` TYPE minmax GRANULARITY 1 + , elements_chain_href String MATERIALIZED extract(elements_chain, '(?::|")href="(.*?)"') + , elements_chain_texts Array(String) MATERIALIZED arrayDistinct(extractAll(elements_chain, '(?::|")text="(.*?)"')) + , elements_chain_ids Array(String) MATERIALIZED arrayDistinct(extractAll(elements_chain, '(?::|")attr_id="(.*?)"')) + , elements_chain_elements Array(Enum('a', 'button', 'form', 'input', 'select', 'textarea', 'label')) MATERIALIZED arrayDistinct(extractAll(elements_chain, '(?:^|;)(a|button|form|input|select|textarea|label)(?:\.|$|:)')) , _timestamp DateTime @@ -3271,10 +3267,6 @@ , $group_4 VARCHAR MATERIALIZED replaceRegexpAll(JSONExtractRaw(properties, '$group_4'), '^"|"$', '') COMMENT 'column_materializer::$group_4' , $window_id VARCHAR MATERIALIZED replaceRegexpAll(JSONExtractRaw(properties, '$window_id'), '^"|"$', '') COMMENT 'column_materializer::$window_id' , $session_id VARCHAR MATERIALIZED replaceRegexpAll(JSONExtractRaw(properties, '$session_id'), '^"|"$', '') COMMENT 'column_materializer::$session_id' - , elements_chain_href String MATERIALIZED extract(elements_chain, '(?::|")href="(.*?)"') - , elements_chain_texts Array(String) MATERIALIZED arrayDistinct(extractAll(elements_chain, '(?::|")text="(.*?)"')) - , elements_chain_ids Array(String) MATERIALIZED arrayDistinct(extractAll(elements_chain, '(?::|")attr_id="(.*?)"')) - , elements_chain_elements Array(Enum('a', 'button', 'form', 'input', 'select', 'textarea', 'label')) MATERIALIZED arrayDistinct(extractAll(elements_chain, '(?:^|;)(a|button|form|input|select|textarea|label)(?:\.|$|:)')) , INDEX `minmax_$group_0` `$group_0` TYPE minmax GRANULARITY 1 , INDEX `minmax_$group_1` `$group_1` TYPE minmax GRANULARITY 1 , INDEX `minmax_$group_2` `$group_2` TYPE minmax GRANULARITY 1 @@ -3282,6 +3274,10 @@ , INDEX `minmax_$group_4` `$group_4` TYPE minmax GRANULARITY 1 , INDEX `minmax_$window_id` `$window_id` TYPE minmax GRANULARITY 1 , INDEX `minmax_$session_id` `$session_id` TYPE minmax GRANULARITY 1 + , elements_chain_href String MATERIALIZED extract(elements_chain, '(?::|")href="(.*?)"') + , elements_chain_texts Array(String) MATERIALIZED arrayDistinct(extractAll(elements_chain, '(?::|")text="(.*?)"')) + , elements_chain_ids Array(String) MATERIALIZED arrayDistinct(extractAll(elements_chain, '(?::|")attr_id="(.*?)"')) + , elements_chain_elements Array(Enum('a', 'button', 'form', 'input', 'select', 'textarea', 'label')) MATERIALIZED arrayDistinct(extractAll(elements_chain, '(?:^|;)(a|button|form|input|select|textarea|label)(?:\.|$|:)')) , _timestamp DateTime diff --git a/posthog/hogql/database/schema/events.py b/posthog/hogql/database/schema/events.py index a0225bd334b2d..1a489e5a9d90f 100644 --- a/posthog/hogql/database/schema/events.py +++ b/posthog/hogql/database/schema/events.py @@ -3,7 +3,6 @@ StringDatabaseField, DateTimeDatabaseField, StringJSONDatabaseField, - StringArrayDatabaseField, IntegerDatabaseField, Table, LazyJoin, @@ -115,10 +114,6 @@ class EventsTable(Table): join_table=SessionsTableV1(), join_function=join_events_table_to_sessions_table, ), - "elements_chain_href": StringDatabaseField(name="elements_chain_href"), - "elements_chain_texts": StringArrayDatabaseField(name="elements_chain_texts"), - "elements_chain_ids": StringArrayDatabaseField(name="elements_chain_ids"), - "elements_chain_elements": StringArrayDatabaseField(name="elements_chain_elements"), } def to_printed_clickhouse(self, context): diff --git a/posthog/hogql/database/test/__snapshots__/test_database.ambr b/posthog/hogql/database/test/__snapshots__/test_database.ambr index 77a2452922e7e..ce03813aa1004 100644 --- a/posthog/hogql/database/test/__snapshots__/test_database.ambr +++ b/posthog/hogql/database/test/__snapshots__/test_database.ambr @@ -377,42 +377,6 @@ "schema_valid": true, "table": "sessions", "type": "lazy_table" - }, - "elements_chain_href": { - "chain": null, - "fields": null, - "hogql_value": "elements_chain_href", - "name": "elements_chain_href", - "schema_valid": true, - "table": null, - "type": "string" - }, - "elements_chain_texts": { - "chain": null, - "fields": null, - "hogql_value": "elements_chain_texts", - "name": "elements_chain_texts", - "schema_valid": true, - "table": null, - "type": "array" - }, - "elements_chain_ids": { - "chain": null, - "fields": null, - "hogql_value": "elements_chain_ids", - "name": "elements_chain_ids", - "schema_valid": true, - "table": null, - "type": "array" - }, - "elements_chain_elements": { - "chain": null, - "fields": null, - "hogql_value": "elements_chain_elements", - "name": "elements_chain_elements", - "schema_valid": true, - "table": null, - "type": "array" } }, "id": "events", @@ -748,11 +712,7 @@ "group_3", "$group_4", "group_4", - "session", - "elements_chain_href", - "elements_chain_texts", - "elements_chain_ids", - "elements_chain_elements" + "session" ], "hogql_value": "events", "name": "events", @@ -1734,42 +1694,6 @@ "schema_valid": true, "table": "sessions", "type": "lazy_table" - }, - "elements_chain_href": { - "chain": null, - "fields": null, - "hogql_value": "elements_chain_href", - "name": "elements_chain_href", - "schema_valid": true, - "table": null, - "type": "string" - }, - "elements_chain_texts": { - "chain": null, - "fields": null, - "hogql_value": "elements_chain_texts", - "name": "elements_chain_texts", - "schema_valid": true, - "table": null, - "type": "array" - }, - "elements_chain_ids": { - "chain": null, - "fields": null, - "hogql_value": "elements_chain_ids", - "name": "elements_chain_ids", - "schema_valid": true, - "table": null, - "type": "array" - }, - "elements_chain_elements": { - "chain": null, - "fields": null, - "hogql_value": "elements_chain_elements", - "name": "elements_chain_elements", - "schema_valid": true, - "table": null, - "type": "array" } }, "id": "events", @@ -2105,11 +2029,7 @@ "group_3", "$group_4", "group_4", - "session", - "elements_chain_href", - "elements_chain_texts", - "elements_chain_ids", - "elements_chain_elements" + "session" ], "hogql_value": "events", "name": "events", diff --git a/posthog/hogql/property.py b/posthog/hogql/property.py index 0cb47431844de..52236b64fb6dd 100644 --- a/posthog/hogql/property.py +++ b/posthog/hogql/property.py @@ -1,4 +1,5 @@ -from typing import Literal, Optional, cast +import re +from typing import Literal, Optional, Union, cast from pydantic import BaseModel @@ -21,28 +22,16 @@ Team, ) from posthog.models.event import Selector -from posthog.models.element import Element -from posthog.models.property import PropertyGroup, ValueT +from posthog.models.property import PropertyGroup from posthog.models.property.util import build_selector_regex from posthog.models.property_definition import PropertyType from posthog.schema import ( + EmptyPropertyFilter, FilterLogicalOperator, PropertyGroupFilter, PropertyGroupFilterValue, PropertyOperator, RetentionEntity, - EventPropertyFilter, - PersonPropertyFilter, - ElementPropertyFilter, - SessionPropertyFilter, - CohortPropertyFilter, - RecordingPropertyFilter, - GroupPropertyFilter, - FeaturePropertyFilter, - HogQLPropertyFilter, - EmptyPropertyFilter, - DataWarehousePropertyFilter, - DataWarehousePersonPropertyFilter, ) from posthog.warehouse.models import DataWarehouseJoin, DataWarehouseSavedQuery, DataWarehouseTable from posthog.utils import get_from_dict_or_attr @@ -78,194 +67,8 @@ def visit_call(self, node: ast.Call): self.visit(arg) -def _handle_bool_values(value: ValueT, field: ast.Field, property: Property, team: Team) -> ValueT | bool: - if value != "true" and value != "false": - return value - if property.type == "person": - property_types = PropertyDefinition.objects.filter( - team=team, - name=property.key, - type=PropertyDefinition.Type.PERSON, - ) - elif property.type == "group": - property_types = PropertyDefinition.objects.filter( - team=team, - name=property.key, - type=PropertyDefinition.Type.GROUP, - group_type_index=property.group_type_index, - ) - elif property.type == "data_warehouse_person_property": - key = field.chain[-2] - - # TODO: pass id of table item being filtered on instead of searching through joins - current_join: DataWarehouseJoin | None = ( - DataWarehouseJoin.objects.filter(Q(deleted__isnull=True) | Q(deleted=False)) - .filter(team=team, source_table_name="persons", field_name=key) - .first() - ) - - if not current_join: - raise Exception(f"Could not find join for key {key}") - - prop_type = None - - maybe_view = ( - DataWarehouseSavedQuery.objects.filter(Q(deleted__isnull=True) | Q(deleted=False)) - .filter(team=team, name=current_join.joining_table_name) - .first() - ) - - if maybe_view: - prop_type_dict = maybe_view.columns.get(property.key, None) - prop_type = prop_type_dict.get("hogql") - - maybe_table = ( - DataWarehouseTable.objects.filter(Q(deleted__isnull=True) | Q(deleted=False)) - .filter(team=team, name=current_join.joining_table_name) - .first() - ) - - if maybe_table: - prop_type_dict = maybe_table.columns.get(property.key, None) - prop_type = prop_type_dict.get("hogql") - - if not maybe_view and not maybe_table: - raise Exception(f"Could not find table or view for key {key}") - - if prop_type == "BooleanDatabaseField": - if value == "true": - value = True - if value == "false": - value = False - - return value - - else: - property_types = PropertyDefinition.objects.filter( - team=team, - name=property.key, - type=PropertyDefinition.Type.EVENT, - ) - property_type = property_types[0].property_type if len(property_types) > 0 else None - - if property_type == PropertyType.Boolean: - if value == "true": - return True - if value == "false": - return False - return value - - -def _field_to_compare_op( - field: ast.Field, value: ValueT, operator: PropertyOperator, property: Property, is_json_field: bool, team: Team -) -> ast.Expr: - if operator == PropertyOperator.IS_SET: - return ast.CompareOperation( - op=ast.CompareOperationOp.NotEq, - left=field, - right=ast.Constant(value=None), - ) - elif operator == PropertyOperator.IS_NOT_SET: - return ast.Or( - exprs=[ - ast.CompareOperation( - op=ast.CompareOperationOp.Eq, - left=field, - right=ast.Constant(value=None), - ) - ] - + ( - [ - ast.Not( - expr=ast.Call( - name="JSONHas", - args=[ast.Field(chain=field.chain[:-1]), ast.Constant(value=property.key)], - ) - ) - ] - if is_json_field - else [] - ) - ) - elif operator == PropertyOperator.ICONTAINS: - return ast.CompareOperation( - op=ast.CompareOperationOp.ILike, - left=field, - right=ast.Constant(value=f"%{value}%"), - ) - elif operator == PropertyOperator.NOT_ICONTAINS: - return ast.CompareOperation( - op=ast.CompareOperationOp.NotILike, - left=field, - right=ast.Constant(value=f"%{value}%"), - ) - elif operator == PropertyOperator.REGEX: - return ast.Call( - name="ifNull", - args=[ - ast.Call(name="match", args=[ast.Call(name="toString", args=[field]), ast.Constant(value=value)]), - ast.Constant(value=0), - ], - ) - elif operator == PropertyOperator.NOT_REGEX: - return ast.Call( - name="ifNull", - args=[ - ast.Call( - name="not", - args=[ - ast.Call( - name="match", args=[ast.Call(name="toString", args=[field]), ast.Constant(value=value)] - ) - ], - ), - ast.Constant(value=1), - ], - ) - elif operator == PropertyOperator.EXACT or operator == PropertyOperator.IS_DATE_EXACT: - return ast.CompareOperation( - op=ast.CompareOperationOp.Eq, - left=field, - right=ast.Constant(value=_handle_bool_values(value, field, property, team)), - ) - elif operator == PropertyOperator.IS_NOT: - return ast.CompareOperation( - op=ast.CompareOperationOp.NotEq, - left=field, - right=ast.Constant(value=_handle_bool_values(value, field, property, team)), - ) - elif operator == PropertyOperator.LT or operator == PropertyOperator.IS_DATE_BEFORE: - return ast.CompareOperation(op=ast.CompareOperationOp.Lt, left=field, right=ast.Constant(value=value)) - elif operator == PropertyOperator.GT or operator == PropertyOperator.IS_DATE_AFTER: - return ast.CompareOperation(op=ast.CompareOperationOp.Gt, left=field, right=ast.Constant(value=value)) - elif operator == PropertyOperator.LTE: - return ast.CompareOperation(op=ast.CompareOperationOp.LtEq, left=field, right=ast.Constant(value=value)) - elif operator == PropertyOperator.GTE: - return ast.CompareOperation(op=ast.CompareOperationOp.GtEq, left=field, right=ast.Constant(value=value)) - else: - raise NotImplementedError(f"PropertyOperator {operator} not implemented") - - def property_to_expr( - property: list - | dict - | PropertyGroup - | PropertyGroupFilter - | PropertyGroupFilterValue - | Property - | ast.Expr - | EventPropertyFilter - | PersonPropertyFilter - | ElementPropertyFilter - | SessionPropertyFilter - | CohortPropertyFilter - | RecordingPropertyFilter - | GroupPropertyFilter - | FeaturePropertyFilter - | HogQLPropertyFilter - | EmptyPropertyFilter - | DataWarehousePropertyFilter - | DataWarehousePersonPropertyFilter, + property: Union[BaseModel, PropertyGroup, Property, dict, list, ast.Expr], team: Team, scope: Literal["event", "person", "session", "replay", "replay_entity", "replay_pdi"] = "event", ) -> ast.Expr: @@ -367,11 +170,16 @@ def property_to_expr( else: chain = ["properties"] + if property.type == "session": + properties_field = None + else: + properties_field = ast.Field(chain=chain) + field = ast.Field(chain=[*chain, property.key]) if isinstance(value, list): if len(value) == 0: - return ast.Constant(value=1) + return ast.Constant(value=True) elif len(value) == 1: value = value[0] else: @@ -398,14 +206,164 @@ def property_to_expr( return ast.And(exprs=exprs) return ast.Or(exprs=exprs) - return _field_to_compare_op( - field=field, - value=value, - operator=operator, - team=team, - property=property, - is_json_field=property.type != "session", - ) + if operator == PropertyOperator.IS_SET: + return ast.CompareOperation( + op=ast.CompareOperationOp.NotEq, + left=field, + right=ast.Constant(value=None), + ) + elif operator == PropertyOperator.IS_NOT_SET: + return ast.Or( + exprs=[ + ast.CompareOperation( + op=ast.CompareOperationOp.Eq, + left=field, + right=ast.Constant(value=None), + ) + ] + + ( + [] + if not properties_field or properties_field == field + else [ + ast.Not( + expr=ast.Call( + name="JSONHas", + args=[properties_field, ast.Constant(value=property.key)], + ) + ) + ] + ) + ) + elif operator == PropertyOperator.ICONTAINS: + return ast.CompareOperation( + op=ast.CompareOperationOp.ILike, + left=field, + right=ast.Constant(value=f"%{value}%"), + ) + elif operator == PropertyOperator.NOT_ICONTAINS: + return ast.CompareOperation( + op=ast.CompareOperationOp.NotILike, + left=field, + right=ast.Constant(value=f"%{value}%"), + ) + elif operator == PropertyOperator.REGEX: + return ast.Call( + name="ifNull", + args=[ + ast.Call(name="match", args=[ast.Call(name="toString", args=[field]), ast.Constant(value=value)]), + ast.Constant(value=0), + ], + ) + elif operator == PropertyOperator.NOT_REGEX: + return ast.Call( + name="ifNull", + args=[ + ast.Call( + name="not", + args=[ + ast.Call( + name="match", args=[ast.Call(name="toString", args=[field]), ast.Constant(value=value)] + ) + ], + ), + ast.Constant(value=1), + ], + ) + elif operator == PropertyOperator.EXACT or operator == PropertyOperator.IS_DATE_EXACT: + op = ast.CompareOperationOp.Eq + elif operator == PropertyOperator.IS_NOT: + op = ast.CompareOperationOp.NotEq + elif operator == PropertyOperator.LT or operator == PropertyOperator.IS_DATE_BEFORE: + op = ast.CompareOperationOp.Lt + elif operator == PropertyOperator.GT or operator == PropertyOperator.IS_DATE_AFTER: + op = ast.CompareOperationOp.Gt + elif operator == PropertyOperator.LTE: + op = ast.CompareOperationOp.LtEq + elif operator == PropertyOperator.GTE: + op = ast.CompareOperationOp.GtEq + else: + raise NotImplementedError(f"PropertyOperator {operator} not implemented") + + # For Boolean and untyped properties, treat "true" and "false" as boolean values + if ( + (op == ast.CompareOperationOp.Eq or op == ast.CompareOperationOp.NotEq) + and team is not None + and (value == "true" or value == "false") + ): + if property.type == "person": + property_types = PropertyDefinition.objects.filter( + team=team, + name=property.key, + type=PropertyDefinition.Type.PERSON, + ) + elif property.type == "group": + property_types = PropertyDefinition.objects.filter( + team=team, + name=property.key, + type=PropertyDefinition.Type.GROUP, + group_type_index=property.group_type_index, + ) + elif property.type == "data_warehouse_person_property": + key = chain[-1] + + # TODO: pass id of table item being filtered on instead of searching through joins + current_join: DataWarehouseJoin | None = ( + DataWarehouseJoin.objects.filter(Q(deleted__isnull=True) | Q(deleted=False)) + .filter(team=team, source_table_name="persons", field_name=key) + .first() + ) + + if not current_join: + raise Exception(f"Could not find join for key {key}") + + prop_type = None + + maybe_view = ( + DataWarehouseSavedQuery.objects.filter(Q(deleted__isnull=True) | Q(deleted=False)) + .filter(team=team, name=current_join.joining_table_name) + .first() + ) + + if maybe_view: + prop_type_dict = maybe_view.columns.get(property.key, None) + prop_type = prop_type_dict.get("hogql") + + maybe_table = ( + DataWarehouseTable.objects.filter(Q(deleted__isnull=True) | Q(deleted=False)) + .filter(team=team, name=current_join.joining_table_name) + .first() + ) + + if maybe_table: + prop_type_dict = maybe_table.columns.get(property.key, None) + prop_type = prop_type_dict.get("hogql") + + if not maybe_view and not maybe_table: + raise Exception(f"Could not find table or view for key {key}") + + if prop_type == "BooleanDatabaseField": + if value == "true": + value = True + if value == "false": + value = False + + return ast.CompareOperation(op=op, left=field, right=ast.Constant(value=value)) + + else: + property_types = PropertyDefinition.objects.filter( + team=team, + name=property.key, + type=PropertyDefinition.Type.EVENT, + ) + property_type = property_types[0].property_type if len(property_types) > 0 else None + + if property_type == PropertyType.Boolean: + if value == "true": + value = True + if value == "false": + value = False + + return ast.CompareOperation(op=op, left=field, right=ast.Constant(value=value)) elif property.type == "element": if scope == "person": @@ -449,34 +407,10 @@ def property_to_expr( return expr if property.key == "href": - return parse_expr( - "arrayExists(href -> {compare}, elements_chain_hrefs)", - { - "compare": _field_to_compare_op( - field=ast.Field(chain=["href"]), - value=value, - operator=operator, - team=team, - property=property, - is_json_field=False, - ) - }, - ) + return element_chain_key_filter("href", str(value), operator) if property.key == "text": - return parse_expr( - "arrayExists(text -> {compare}, elements_chain_texts)", - { - "compare": _field_to_compare_op( - field=ast.Field(chain=["text"]), - value=value, - operator=operator, - team=team, - property=property, - is_json_field=False, - ) - }, - ) + return element_chain_key_filter("text", str(value), operator) raise NotImplementedError(f"property_to_expr for type element not implemented for key {property.key}") elif property.type == "cohort" or property.type == "static-cohort" or property.type == "precalculated-cohort": @@ -515,49 +449,21 @@ def action_to_expr(action: Action) -> ast.Expr: exprs.append(tag_name_to_expr(step.tag_name)) if step.href is not None: if step.href_matching == "regex": - exprs.append( - ast.CompareOperation( - op=ast.CompareOperationOp.Regex, - left=ast.Field(chain=["elements_chain_href"]), - right=ast.Constant(value=step.href), - ) - ) + operator = PropertyOperator.REGEX elif step.href_matching == "contains": - exprs.append( - ast.CompareOperation( - op=ast.CompareOperationOp.ILike, - left=ast.Field(chain=["elements_chain_href"]), - right=ast.Constant(value=f"%{step.href}%"), - ) - ) + operator = PropertyOperator.ICONTAINS else: - exprs.append( - ast.CompareOperation( - op=ast.CompareOperationOp.Eq, - left=ast.Field(chain=["elements_chain_href"]), - right=ast.Constant(value=step.href), - ) - ) + operator = PropertyOperator.EXACT + exprs.append(element_chain_key_filter("href", step.href, operator)) if step.text is not None: - value = step.text if step.text_matching == "regex": - match = ast.CompareOperationOp.Regex + operator = PropertyOperator.REGEX elif step.text_matching == "contains": - match = ast.CompareOperationOp.ILike - value = f"%{value}%" + operator = PropertyOperator.ICONTAINS else: - match = ast.CompareOperationOp.Eq - - exprs.append( - parse_expr( - "arrayExists(x -> {match}, elements_chain_texts)", - { - "match": ast.CompareOperation( - op=match, left=ast.Field(chain=["x"]), right=ast.Constant(value=value) - ) - }, - ) - ) + operator = PropertyOperator.EXACT + exprs.append(element_chain_key_filter("text", step.text, operator)) + if step.url: if step.url_matching == "exact": expr = parse_expr( @@ -606,41 +512,45 @@ def entity_to_expr(entity: RetentionEntity) -> ast.Expr: ) +def element_chain_key_filter(key: str, text: str, operator: PropertyOperator): + escaped = text.replace('"', r"\"") + if operator == PropertyOperator.IS_SET or operator == PropertyOperator.IS_NOT_SET: + value = r'[^"]+' + elif operator == PropertyOperator.ICONTAINS or operator == PropertyOperator.NOT_ICONTAINS: + value = rf'[^"]*{re.escape(escaped)}[^"]*' + elif operator == PropertyOperator.REGEX or operator == PropertyOperator.NOT_REGEX: + value = escaped + elif operator == PropertyOperator.EXACT or operator == PropertyOperator.IS_NOT: + value = re.escape(escaped) + else: + raise NotImplementedError(f"element_href_to_expr not implemented for operator {operator}") + + regex = f'({key}="{value}")' + if operator == PropertyOperator.ICONTAINS or operator == PropertyOperator.NOT_ICONTAINS: + expr = parse_expr("elements_chain =~* {regex}", {"regex": ast.Constant(value=str(regex))}) + else: + expr = parse_expr("elements_chain =~ {regex}", {"regex": ast.Constant(value=str(regex))}) + + if ( + operator == PropertyOperator.IS_NOT_SET + or operator == PropertyOperator.NOT_ICONTAINS + or operator == PropertyOperator.IS_NOT + or operator == PropertyOperator.NOT_REGEX + ): + expr = ast.Call(name="not", args=[expr]) + return expr + + def tag_name_to_expr(tag_name: str): regex = rf"(^|;){tag_name}(\.|$|;|:)" expr = parse_expr("elements_chain =~ {regex}", {"regex": ast.Constant(value=str(regex))}) return expr -def selector_to_expr(selector_string: str): - selector = Selector(selector_string, escape_slashes=False) - exprs = [] - regex = build_selector_regex(selector) - exprs.append(parse_expr("elements_chain =~ {regex}", {"regex": ast.Constant(value=regex)})) - - useful_elements: list[ast.Expr] = [] - for part in selector.parts: - if "tag_name" in part.data: - if part.data["tag_name"] in Element.USEFUL_ELEMENTS: - useful_elements.append(ast.Constant(value=part.data["tag_name"])) - - if "attr_id" in part.data: - exprs.append( - parse_expr( - "indexOf(elements_chain_ids, {value}) > 0", {"value": ast.Constant(value=part.data["attr_id"])} - ) - ) - if len(useful_elements) > 0: - exprs.append( - parse_expr( - "arrayCount(x -> x IN {value}, elements_chain_elements) > 0", - {"value": ast.Array(exprs=useful_elements)}, - ) - ) - - if len(exprs) == 1: - return exprs[0] - return ast.And(exprs=exprs) +def selector_to_expr(selector: str): + regex = build_selector_regex(Selector(selector, escape_slashes=False)) + expr = parse_expr("elements_chain =~ {regex}", {"regex": ast.Constant(value=regex)}) + return expr def get_property_type(property): diff --git a/posthog/hogql/test/__snapshots__/test_resolver.ambr b/posthog/hogql/test/__snapshots__/test_resolver.ambr index 9907d46ee7f89..d7d042252c55d 100644 --- a/posthog/hogql/test/__snapshots__/test_resolver.ambr +++ b/posthog/hogql/test/__snapshots__/test_resolver.ambr @@ -32,10 +32,6 @@ created_at: {}, distinct_id: {}, elements_chain: {}, - elements_chain_elements: {}, - elements_chain_href: {}, - elements_chain_ids: {}, - elements_chain_texts: {}, event: {}, goe_0: {}, goe_1: {}, @@ -124,34 +120,6 @@ table_type: } }, - elements_chain_elements: { - alias: "elements_chain_elements" - type: { - name: "elements_chain_elements" - table_type: - } - }, - elements_chain_href: { - alias: "elements_chain_href" - type: { - name: "elements_chain_href" - table_type: - } - }, - elements_chain_ids: { - alias: "elements_chain_ids" - type: { - name: "elements_chain_ids" - table_type: - } - }, - elements_chain_texts: { - alias: "elements_chain_texts" - type: { - name: "elements_chain_texts" - table_type: - } - }, event: { alias: "event" type: { @@ -414,74 +382,6 @@ alias: "$group_4" type: } - }, - { - alias: "elements_chain_href" - expr: { - chain: [ - "elements_chain_href" - ] - type: { - name: "elements_chain_href" - table_type: - } - } - hidden: True - type: { - alias: "elements_chain_href" - type: - } - }, - { - alias: "elements_chain_texts" - expr: { - chain: [ - "elements_chain_texts" - ] - type: { - name: "elements_chain_texts" - table_type: - } - } - hidden: True - type: { - alias: "elements_chain_texts" - type: - } - }, - { - alias: "elements_chain_ids" - expr: { - chain: [ - "elements_chain_ids" - ] - type: { - name: "elements_chain_ids" - table_type: - } - } - hidden: True - type: { - alias: "elements_chain_ids" - type: - } - }, - { - alias: "elements_chain_elements" - expr: { - chain: [ - "elements_chain_elements" - ] - type: { - name: "elements_chain_elements" - table_type: - } - } - hidden: True - type: { - alias: "elements_chain_elements" - type: - } } ] select_from: { @@ -640,50 +540,6 @@ } hidden: True type: - }, - { - alias: "elements_chain_href" - expr: { - chain: [ - "elements_chain_href" - ] - type: - } - hidden: True - type: - }, - { - alias: "elements_chain_texts" - expr: { - chain: [ - "elements_chain_texts" - ] - type: - } - hidden: True - type: - }, - { - alias: "elements_chain_ids" - expr: { - chain: [ - "elements_chain_ids" - ] - type: - } - hidden: True - type: - }, - { - alias: "elements_chain_elements" - expr: { - chain: [ - "elements_chain_elements" - ] - type: - } - hidden: True - type: } ] select_from: { @@ -715,10 +571,6 @@ created_at: , distinct_id: , elements_chain: , - elements_chain_elements: , - elements_chain_href: , - elements_chain_ids: , - elements_chain_texts: , event: , properties: , timestamp: , @@ -755,10 +607,6 @@ created_at: {}, distinct_id: {}, elements_chain: {}, - elements_chain_elements: {}, - elements_chain_href: {}, - elements_chain_ids: {}, - elements_chain_texts: {}, event: {}, goe_0: {}, goe_1: {}, @@ -1011,74 +859,6 @@ alias: "$group_4" type: } - }, - { - alias: "elements_chain_href" - expr: { - chain: [ - "elements_chain_href" - ] - type: { - name: "elements_chain_href" - table_type: - } - } - hidden: True - type: { - alias: "elements_chain_href" - type: - } - }, - { - alias: "elements_chain_texts" - expr: { - chain: [ - "elements_chain_texts" - ] - type: { - name: "elements_chain_texts" - table_type: - } - } - hidden: True - type: { - alias: "elements_chain_texts" - type: - } - }, - { - alias: "elements_chain_ids" - expr: { - chain: [ - "elements_chain_ids" - ] - type: { - name: "elements_chain_ids" - table_type: - } - } - hidden: True - type: { - alias: "elements_chain_ids" - type: - } - }, - { - alias: "elements_chain_elements" - expr: { - chain: [ - "elements_chain_elements" - ] - type: { - name: "elements_chain_elements" - table_type: - } - } - hidden: True - type: { - alias: "elements_chain_elements" - type: - } } ] select_from: { @@ -1104,10 +884,6 @@ created_at: , distinct_id: , elements_chain: , - elements_chain_elements: , - elements_chain_href: , - elements_chain_ids: , - elements_chain_texts: , event: , properties: , timestamp: , @@ -1154,10 +930,6 @@ created_at: {}, distinct_id: {}, elements_chain: {}, - elements_chain_elements: {}, - elements_chain_href: {}, - elements_chain_ids: {}, - elements_chain_texts: {}, event: {}, goe_0: {}, goe_1: {}, @@ -1246,34 +1018,6 @@ table_type: } }, - elements_chain_elements: { - alias: "elements_chain_elements" - type: { - name: "elements_chain_elements" - table_type: - } - }, - elements_chain_href: { - alias: "elements_chain_href" - type: { - name: "elements_chain_href" - table_type: - } - }, - elements_chain_ids: { - alias: "elements_chain_ids" - type: { - name: "elements_chain_ids" - table_type: - } - }, - elements_chain_texts: { - alias: "elements_chain_texts" - type: { - name: "elements_chain_texts" - table_type: - } - }, event: { alias: "event" type: { @@ -1536,74 +1280,6 @@ alias: "$group_4" type: } - }, - { - alias: "elements_chain_href" - expr: { - chain: [ - "elements_chain_href" - ] - type: { - name: "elements_chain_href" - table_type: - } - } - hidden: True - type: { - alias: "elements_chain_href" - type: - } - }, - { - alias: "elements_chain_texts" - expr: { - chain: [ - "elements_chain_texts" - ] - type: { - name: "elements_chain_texts" - table_type: - } - } - hidden: True - type: { - alias: "elements_chain_texts" - type: - } - }, - { - alias: "elements_chain_ids" - expr: { - chain: [ - "elements_chain_ids" - ] - type: { - name: "elements_chain_ids" - table_type: - } - } - hidden: True - type: { - alias: "elements_chain_ids" - type: - } - }, - { - alias: "elements_chain_elements" - expr: { - chain: [ - "elements_chain_elements" - ] - type: { - name: "elements_chain_elements" - table_type: - } - } - hidden: True - type: { - alias: "elements_chain_elements" - type: - } } ] select_from: { @@ -1764,50 +1440,6 @@ } hidden: True type: - }, - { - alias: "elements_chain_href" - expr: { - chain: [ - "elements_chain_href" - ] - type: - } - hidden: True - type: - }, - { - alias: "elements_chain_texts" - expr: { - chain: [ - "elements_chain_texts" - ] - type: - } - hidden: True - type: - }, - { - alias: "elements_chain_ids" - expr: { - chain: [ - "elements_chain_ids" - ] - type: - } - hidden: True - type: - }, - { - alias: "elements_chain_elements" - expr: { - chain: [ - "elements_chain_elements" - ] - type: - } - hidden: True - type: } ] select_from: { @@ -1844,10 +1476,6 @@ created_at: {}, distinct_id: {}, elements_chain: {}, - elements_chain_elements: {}, - elements_chain_href: {}, - elements_chain_ids: {}, - elements_chain_texts: {}, event: {}, goe_0: {}, goe_1: {}, @@ -2099,74 +1727,6 @@ alias: "$group_4" type: } - }, - { - alias: "elements_chain_href" - expr: { - chain: [ - "elements_chain_href" - ] - type: { - name: "elements_chain_href" - table_type: - } - } - hidden: True - type: { - alias: "elements_chain_href" - type: - } - }, - { - alias: "elements_chain_texts" - expr: { - chain: [ - "elements_chain_texts" - ] - type: { - name: "elements_chain_texts" - table_type: - } - } - hidden: True - type: { - alias: "elements_chain_texts" - type: - } - }, - { - alias: "elements_chain_ids" - expr: { - chain: [ - "elements_chain_ids" - ] - type: { - name: "elements_chain_ids" - table_type: - } - } - hidden: True - type: { - alias: "elements_chain_ids" - type: - } - }, - { - alias: "elements_chain_elements" - expr: { - chain: [ - "elements_chain_elements" - ] - type: { - name: "elements_chain_elements" - table_type: - } - } - hidden: True - type: { - alias: "elements_chain_elements" - type: - } } ] select_from: { @@ -2192,10 +1752,6 @@ created_at: , distinct_id: , elements_chain: , - elements_chain_elements: , - elements_chain_href: , - elements_chain_ids: , - elements_chain_texts: , event: , properties: , timestamp: , @@ -2233,10 +1789,6 @@ created_at: , distinct_id: , elements_chain: , - elements_chain_elements: , - elements_chain_href: , - elements_chain_ids: , - elements_chain_texts: , event: , properties: , timestamp: , @@ -2485,10 +2037,6 @@ created_at: {}, distinct_id: {}, elements_chain: {}, - elements_chain_elements: {}, - elements_chain_href: {}, - elements_chain_ids: {}, - elements_chain_texts: {}, event: {}, goe_0: {}, goe_1: {}, @@ -2740,74 +2288,6 @@ alias: "$group_4" type: } - }, - { - alias: "elements_chain_href" - expr: { - chain: [ - "elements_chain_href" - ] - type: { - name: "elements_chain_href" - table_type: - } - } - hidden: True - type: { - alias: "elements_chain_href" - type: - } - }, - { - alias: "elements_chain_texts" - expr: { - chain: [ - "elements_chain_texts" - ] - type: { - name: "elements_chain_texts" - table_type: - } - } - hidden: True - type: { - alias: "elements_chain_texts" - type: - } - }, - { - alias: "elements_chain_ids" - expr: { - chain: [ - "elements_chain_ids" - ] - type: { - name: "elements_chain_ids" - table_type: - } - } - hidden: True - type: { - alias: "elements_chain_ids" - type: - } - }, - { - alias: "elements_chain_elements" - expr: { - chain: [ - "elements_chain_elements" - ] - type: { - name: "elements_chain_elements" - table_type: - } - } - hidden: True - type: { - alias: "elements_chain_elements" - type: - } } ] select_from: { @@ -2833,10 +2313,6 @@ created_at: , distinct_id: , elements_chain: , - elements_chain_elements: , - elements_chain_href: , - elements_chain_ids: , - elements_chain_texts: , event: , properties: , timestamp: , @@ -2877,10 +2353,6 @@ created_at: {}, distinct_id: {}, elements_chain: {}, - elements_chain_elements: {}, - elements_chain_href: {}, - elements_chain_ids: {}, - elements_chain_texts: {}, event: {}, goe_0: {}, goe_1: {}, @@ -3133,74 +2605,6 @@ alias: "$group_4" type: } - }, - { - alias: "elements_chain_href" - expr: { - chain: [ - "elements_chain_href" - ] - type: { - name: "elements_chain_href" - table_type: - } - } - hidden: True - type: { - alias: "elements_chain_href" - type: - } - }, - { - alias: "elements_chain_texts" - expr: { - chain: [ - "elements_chain_texts" - ] - type: { - name: "elements_chain_texts" - table_type: - } - } - hidden: True - type: { - alias: "elements_chain_texts" - type: - } - }, - { - alias: "elements_chain_ids" - expr: { - chain: [ - "elements_chain_ids" - ] - type: { - name: "elements_chain_ids" - table_type: - } - } - hidden: True - type: { - alias: "elements_chain_ids" - type: - } - }, - { - alias: "elements_chain_elements" - expr: { - chain: [ - "elements_chain_elements" - ] - type: { - name: "elements_chain_elements" - table_type: - } - } - hidden: True - type: { - alias: "elements_chain_elements" - type: - } } ] select_from: { @@ -3227,10 +2631,6 @@ created_at: , distinct_id: , elements_chain: , - elements_chain_elements: , - elements_chain_href: , - elements_chain_ids: , - elements_chain_texts: , event: , properties: , timestamp: , @@ -3271,10 +2671,6 @@ created_at: {}, distinct_id: {}, elements_chain: {}, - elements_chain_elements: {}, - elements_chain_href: {}, - elements_chain_ids: {}, - elements_chain_texts: {}, event: {}, goe_0: {}, goe_1: {}, @@ -3374,10 +2770,6 @@ created_at: {}, distinct_id: {}, elements_chain: {}, - elements_chain_elements: {}, - elements_chain_href: {}, - elements_chain_ids: {}, - elements_chain_texts: {}, event: {}, goe_0: {}, goe_1: {}, @@ -3757,10 +3149,6 @@ created_at: {}, distinct_id: {}, elements_chain: {}, - elements_chain_elements: {}, - elements_chain_href: {}, - elements_chain_ids: {}, - elements_chain_texts: {}, event: {}, goe_0: {}, goe_1: {}, @@ -3894,10 +3282,6 @@ created_at: {}, distinct_id: {}, elements_chain: {}, - elements_chain_elements: {}, - elements_chain_href: {}, - elements_chain_ids: {}, - elements_chain_texts: {}, event: {}, goe_0: {}, goe_1: {}, @@ -4035,10 +3419,6 @@ created_at: {}, distinct_id: {}, elements_chain: {}, - elements_chain_elements: {}, - elements_chain_href: {}, - elements_chain_ids: {}, - elements_chain_texts: {}, event: {}, goe_0: {}, goe_1: {}, @@ -4212,10 +3592,6 @@ created_at: {}, distinct_id: {}, elements_chain: {}, - elements_chain_elements: {}, - elements_chain_href: {}, - elements_chain_ids: {}, - elements_chain_texts: {}, event: {}, goe_0: {}, goe_1: {}, @@ -4394,10 +3770,6 @@ created_at: {}, distinct_id: {}, elements_chain: {}, - elements_chain_elements: {}, - elements_chain_href: {}, - elements_chain_ids: {}, - elements_chain_texts: {}, event: {}, goe_0: {}, goe_1: {}, @@ -4529,10 +3901,6 @@ created_at: {}, distinct_id: {}, elements_chain: {}, - elements_chain_elements: {}, - elements_chain_href: {}, - elements_chain_ids: {}, - elements_chain_texts: {}, event: {}, goe_0: {}, goe_1: {}, @@ -4665,10 +4033,6 @@ created_at: {}, distinct_id: {}, elements_chain: {}, - elements_chain_elements: {}, - elements_chain_href: {}, - elements_chain_ids: {}, - elements_chain_texts: {}, event: {}, goe_0: {}, goe_1: {}, @@ -4788,10 +4152,6 @@ created_at: {}, distinct_id: {}, elements_chain: {}, - elements_chain_elements: {}, - elements_chain_href: {}, - elements_chain_ids: {}, - elements_chain_texts: {}, event: {}, goe_0: {}, goe_1: {}, @@ -4998,10 +4358,6 @@ created_at: {}, distinct_id: {}, elements_chain: {}, - elements_chain_elements: {}, - elements_chain_href: {}, - elements_chain_ids: {}, - elements_chain_texts: {}, event: {}, goe_0: {}, goe_1: {}, @@ -5096,10 +4452,6 @@ created_at: {}, distinct_id: {}, elements_chain: {}, - elements_chain_elements: {}, - elements_chain_href: {}, - elements_chain_ids: {}, - elements_chain_texts: {}, event: {}, goe_0: {}, goe_1: {}, @@ -5206,10 +4558,6 @@ created_at: {}, distinct_id: {}, elements_chain: {}, - elements_chain_elements: {}, - elements_chain_href: {}, - elements_chain_ids: {}, - elements_chain_texts: {}, event: {}, goe_0: {}, goe_1: {}, diff --git a/posthog/hogql/test/test_property.py b/posthog/hogql/test/test_property.py index 5d51025fbe4e8..19b48e652808b 100644 --- a/posthog/hogql/test/test_property.py +++ b/posthog/hogql/test/test_property.py @@ -1,6 +1,4 @@ from typing import Union, cast, Optional, Any, Literal -from posthog.hogql.parser import parse_select -from posthog.hogql.query import execute_hogql_query from unittest.mock import MagicMock, patch from posthog.constants import PropertyOperatorType, TREND_FILTER_TYPE_ACTIONS, TREND_FILTER_TYPE_EVENTS @@ -8,6 +6,7 @@ from posthog.hogql.parser import parse_expr from posthog.hogql.property import ( action_to_expr, + element_chain_key_filter, has_aggregation, property_to_expr, selector_to_expr, @@ -24,8 +23,8 @@ ) from posthog.models.property import PropertyGroup from posthog.models.property_definition import PropertyType -from posthog.schema import HogQLPropertyFilter, RetentionEntity, EmptyPropertyFilter -from posthog.test.base import BaseTest, _create_event +from posthog.schema import HogQLPropertyFilter, PropertyOperator, RetentionEntity, EmptyPropertyFilter +from posthog.test.base import BaseTest from posthog.warehouse.models import DataWarehouseTable, DataWarehouseJoin, DataWarehouseCredential elements_chain_match = lambda x: parse_expr("elements_chain =~ {regex}", {"regex": ast.Constant(value=str(x))}) @@ -342,7 +341,7 @@ def test_property_to_expr_element(self): "operator": "exact", } ), - self._parse_expr("arrayExists(href -> href = 'href-text.', elements_chain_hrefs)"), + clear_locations(element_chain_key_filter("href", "href-text.", PropertyOperator.EXACT)), ) self.assertEqual( self._property_to_expr( @@ -353,9 +352,7 @@ def test_property_to_expr_element(self): "operator": "regex", } ), - self._parse_expr( - "arrayExists(text -> ifNull(match(toString(text), 'text-text.'), false), elements_chain_texts)" - ), + clear_locations(element_chain_key_filter("text", "text-text.", PropertyOperator.REGEX)), ) def test_property_groups(self): @@ -473,14 +470,7 @@ def test_selector_to_expr(self): self.assertEqual( self._selector_to_expr("a[href='boo']"), clear_locations( - parse_expr( - "{regex} and arrayCount(x -> x IN ['a'], elements_chain_elements) > 0", - { - "regex": elements_chain_match( - '(^|;)a.*?href="boo".*?([-_a-zA-Z0-9\\.:"= ]*?)?($|;|:([^;^\\s]*(;|$|\\s)))' - ) - }, - ) + elements_chain_match('(^|;)a.*?href="boo".*?([-_a-zA-Z0-9\\.:"= ]*?)?($|;|:([^;^\\s]*(;|$|\\s)))') ), ) self.assertEqual( @@ -492,26 +482,14 @@ def test_selector_to_expr(self): self.assertEqual( self._selector_to_expr("#withid"), clear_locations( - parse_expr( - """{regex} and indexOf(elements_chain_ids, 'withid') > 0""", - { - "regex": elements_chain_match( - '(^|;).*?attr_id="withid".*?([-_a-zA-Z0-9\\.:"= ]*?)?($|;|:([^;^\\s]*(;|$|\\s)))' - ) - }, - ) + elements_chain_match('(^|;).*?attr_id="withid".*?([-_a-zA-Z0-9\\.:"= ]*?)?($|;|:([^;^\\s]*(;|$|\\s)))') ), ) self.assertEqual( self._selector_to_expr("#with-dashed-id"), clear_locations( - parse_expr( - """{regex} and indexOf(elements_chain_ids, 'with-dashed-id') > 0""", - { - "regex": elements_chain_match( - '(^|;).*?attr_id="with\\-dashed\\-id".*?([-_a-zA-Z0-9\\.:"= ]*?)?($|;|:([^;^\\s]*(;|$|\\s)))' - ) - }, + elements_chain_match( + '(^|;).*?attr_id="with\\-dashed\\-id".*?([-_a-zA-Z0-9\\.:"= ]*?)?($|;|:([^;^\\s]*(;|$|\\s)))' ) ), ) @@ -522,55 +500,69 @@ def test_selector_to_expr(self): self.assertEqual( self._selector_to_expr("#with\\slashed\\id"), clear_locations( - parse_expr( - "{regex} and indexOf(elements_chain_ids, 'with\\\\slashed\\\\id') > 0", - { - "regex": elements_chain_match( - '(^|;).*?attr_id="with\\\\slashed\\\\id".*?([-_a-zA-Z0-9\\.:"= ]*?)?($|;|:([^;^\\s]*(;|$|\\s)))' - ) - }, + elements_chain_match( + '(^|;).*?attr_id="with\\\\slashed\\\\id".*?([-_a-zA-Z0-9\\.:"= ]*?)?($|;|:([^;^\\s]*(;|$|\\s)))' ) ), ) - def test_action_to_expr(self): - _create_event( - event="$autocapture", team=self.team, distinct_id="some_id", elements_chain="a.active.nav-link:text='text'" + def test_elements_chain_key_filter(self): + self.assertEqual( + clear_locations(element_chain_key_filter("href", "boo..", PropertyOperator.IS_SET)), + clear_locations(elements_chain_match('(href="[^"]+")')), + ) + self.assertEqual( + clear_locations(element_chain_key_filter("href", "boo..", PropertyOperator.IS_NOT_SET)), + clear_locations(not_call(elements_chain_match('(href="[^"]+")'))), + ) + self.assertEqual( + clear_locations(element_chain_key_filter("href", "boo..", PropertyOperator.ICONTAINS)), + clear_locations(elements_chain_imatch('(href="[^"]*boo\\.\\.[^"]*")')), + ) + self.assertEqual( + clear_locations(element_chain_key_filter("href", "boo..", PropertyOperator.NOT_ICONTAINS)), + clear_locations(not_call(elements_chain_imatch('(href="[^"]*boo\\.\\.[^"]*")'))), + ) + self.assertEqual( + clear_locations(element_chain_key_filter("href", "boo..", PropertyOperator.REGEX)), + clear_locations(elements_chain_match('(href="boo..")')), + ) + self.assertEqual( + clear_locations(element_chain_key_filter("href", "boo..", PropertyOperator.NOT_REGEX)), + clear_locations(not_call(elements_chain_match('(href="boo..")'))), ) + self.assertEqual( + clear_locations(element_chain_key_filter("href", "boo..", PropertyOperator.EXACT)), + clear_locations(elements_chain_match('(href="boo\\.\\.")')), + ) + self.assertEqual( + clear_locations(element_chain_key_filter("href", "boo..", PropertyOperator.IS_NOT)), + clear_locations(not_call(elements_chain_match('(href="boo\\.\\.")'))), + ) + + def test_action_to_expr(self): action1 = Action.objects.create( team=self.team, steps_json=[ { "event": "$autocapture", "selector": "a.nav-link.active", + "tag_name": "a", } ], ) self.assertEqual( clear_locations(action_to_expr(action1)), self._parse_expr( - "event = '$autocapture' and {regex1}", + "event = '$autocapture' and elements_chain =~ {regex1} and elements_chain =~ {regex2}", { - "regex1": ast.And( - exprs=[ - self._parse_expr( - "elements_chain =~ {regex}", - { - "regex": ast.Constant( - value='(^|;)a.*?\\.active\\..*?nav\\-link([-_a-zA-Z0-9\\.:"= ]*?)?($|;|:([^;^\\s]*(;|$|\\s)))' - ) - }, - ), - self._parse_expr("arrayCount(x -> x IN ['a'], elements_chain_elements) > 0"), - ] + "regex1": ast.Constant( + value='(^|;)a.*?\\.active\\..*?nav\\-link([-_a-zA-Z0-9\\.:"= ]*?)?($|;|:([^;^\\s]*(;|$|\\s)))' ), + "regex2": ast.Constant(value="(^|;)a(\\.|$|;|:)"), }, ), ) - resp = execute_hogql_query( - parse_select("select count() from events where {prop}", {"prop": action_to_expr(action1)}), self.team - ) - self.assertEqual(resp.results[0][0], 1) action2 = Action.objects.create( team=self.team, @@ -619,24 +611,6 @@ def test_action_to_expr(self): self._parse_expr("event = '$pageview' OR true"), # All events just resolve to "true" ) - action5 = Action.objects.create( - team=self.team, - steps_json=[{"event": "$autocapture", "href": "https://example4.com", "href_matching": "regex"}], - ) - self.assertEqual( - clear_locations(action_to_expr(action5)), - self._parse_expr("event = '$autocapture' and elements_chain_href =~ 'https://example4.com'"), - ) - - action6 = Action.objects.create( - team=self.team, - steps_json=[{"event": "$autocapture", "text": "blabla", "text_matching": "regex"}], - ) - self.assertEqual( - clear_locations(action_to_expr(action6)), - self._parse_expr("event = '$autocapture' and arrayExists(x -> x =~ 'blabla', elements_chain_texts)"), - ) - def test_cohort_filter_static(self): cohort = Cohort.objects.create( team=self.team, diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel.ambr index d733159ba5ee0..9822999809a62 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel.ambr @@ -317,9 +317,9 @@ if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id) AS aggregation_target, if(equals(e.event, 'user signed up'), 1, 0) AS step_0, if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, - if(and(equals(e.event, '$autocapture'), match(e.elements_chain, '(^|;)button(\\.|$|;|:)'), arrayExists(x -> ifNull(equals(x, 'Pay $10'), 0), e.elements_chain_texts)), 1, 0) AS step_1, + if(and(equals(e.event, '$autocapture'), match(e.elements_chain, '(^|;)button(\\.|$|;|:)'), match(e.elements_chain, '(text="Pay\\ \\$10")')), 1, 0) AS step_1, if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1, - if(and(equals(e.event, '$autocapture'), match(e.elements_chain, '(^|;)a(\\.|$|;|:)'), equals(e.elements_chain_href, '/movie')), 1, 0) AS step_2, + if(and(equals(e.event, '$autocapture'), match(e.elements_chain, '(^|;)a(\\.|$|;|:)'), match(e.elements_chain, '(href="/movie")')), 1, 0) AS step_2, if(ifNull(equals(step_2, 1), 0), timestamp, NULL) AS latest_2 FROM events AS e LEFT OUTER JOIN diff --git a/posthog/models/event/sql.py b/posthog/models/event/sql.py index 8219bece6572b..33e7d2a2c3062 100644 --- a/posthog/models/event/sql.py +++ b/posthog/models/event/sql.py @@ -65,10 +65,6 @@ , $group_4 VARCHAR MATERIALIZED {trim_quotes_expr("JSONExtractRaw(properties, '$group_4')")} COMMENT 'column_materializer::$group_4' , $window_id VARCHAR MATERIALIZED {trim_quotes_expr("JSONExtractRaw(properties, '$window_id')")} COMMENT 'column_materializer::$window_id' , $session_id VARCHAR MATERIALIZED {trim_quotes_expr("JSONExtractRaw(properties, '$session_id')")} COMMENT 'column_materializer::$session_id' - , elements_chain_href String MATERIALIZED extract(elements_chain, '(?::|\")href="(.*?)"') - , elements_chain_texts Array(String) MATERIALIZED arrayDistinct(extractAll(elements_chain, '(?::|\")text="(.*?)"')) - , elements_chain_ids Array(String) MATERIALIZED arrayDistinct(extractAll(elements_chain, '(?::|\")attr_id="(.*?)"')) - , elements_chain_elements Array(Enum('a', 'button', 'form', 'input', 'select', 'textarea', 'label')) MATERIALIZED arrayDistinct(extractAll(elements_chain, '(?:^|;)(a|button|form|input|select|textarea|label)(?:\\.|$|:)')) , INDEX `minmax_$group_0` `$group_0` TYPE minmax GRANULARITY 1 , INDEX `minmax_$group_1` `$group_1` TYPE minmax GRANULARITY 1 , INDEX `minmax_$group_2` `$group_2` TYPE minmax GRANULARITY 1 @@ -76,6 +72,10 @@ , INDEX `minmax_$group_4` `$group_4` TYPE minmax GRANULARITY 1 , INDEX `minmax_$window_id` `$window_id` TYPE minmax GRANULARITY 1 , INDEX `minmax_$session_id` `$session_id` TYPE minmax GRANULARITY 1 + , elements_chain_href String MATERIALIZED extract(elements_chain, '(?::|\")href="(.*?)"') + , elements_chain_texts Array(String) MATERIALIZED arrayDistinct(extractAll(elements_chain, '(?::|\")text="(.*?)"')) + , elements_chain_ids Array(String) MATERIALIZED arrayDistinct(extractAll(elements_chain, '(?::|\")attr_id="(.*?)"')) + , elements_chain_elements Array(Enum('a', 'button', 'form', 'input', 'select', 'textarea', 'label')) MATERIALIZED arrayDistinct(extractAll(elements_chain, '(?:^|;)(a|button|form|input|select|textarea|label)(?:\\.|$|:)')) """ EVENTS_TABLE_PROXY_MATERIALIZED_COLUMNS = """ @@ -86,10 +86,6 @@ , $group_4 VARCHAR COMMENT 'column_materializer::$group_4' , $window_id VARCHAR COMMENT 'column_materializer::$window_id' , $session_id VARCHAR COMMENT 'column_materializer::$session_id' - , elements_chain_href String COMMENT 'column_materializer::elements_chain::href' - , elements_chain_texts Array(String) COMMENT 'column_materializer::elements_chain::texts' - , elements_chain_ids Array(String) COMMENT 'column_materializer::elements_chain::ids' - , elements_chain_elements Array(Enum('a', 'button', 'form', 'input', 'select', 'textarea', 'label')) COMMENT 'column_materializer::elements_chain::elements' """ EVENTS_DATA_TABLE_ENGINE = lambda: ReplacingMergeTree( diff --git a/posthog/models/event/util.py b/posthog/models/event/util.py index 609d7974f7cdd..8aa798cc12916 100644 --- a/posthog/models/event/util.py +++ b/posthog/models/event/util.py @@ -136,12 +136,8 @@ def bulk_create_events( timestamp = timestamp.astimezone(ZoneInfo("UTC")).strftime("%Y-%m-%d %H:%M:%S.%f") elements_chain = "" - if tentative_elements_chain := event.get("elements_chain"): - assert isinstance(tentative_elements_chain, str) - elements_chain = tentative_elements_chain - elif tentative_elements := event.get("elements"): - assert isinstance(tentative_elements, list) - elements_chain = elements_to_string(elements=tentative_elements) + if event.get("elements") and len(event["elements"]) > 0: + elements_chain = elements_to_string(elements=event.get("elements")) # type: ignore inserts.append( """( diff --git a/posthog/test/base.py b/posthog/test/base.py index 6f23e9d8fbc05..6d1d608da930a 100644 --- a/posthog/test/base.py +++ b/posthog/test/base.py @@ -5,7 +5,6 @@ import threading import time import uuid -import unittest from collections.abc import Callable, Generator from contextlib import contextmanager from functools import wraps @@ -101,10 +100,6 @@ persons_ordering_int: int = 1 -# Expand string diffs -unittest.util._MAX_LENGTH = 2000 # type: ignore - - def _setup_test_data(klass): klass.organization = Organization.objects.create(name=klass.CONFIG_ORGANIZATION_NAME) klass.project, klass.team = Project.objects.create_with_team( From 0f64b40083d63da6c0b29c88250a943d3d66a5b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Far=C3=ADas=20Santana?= Date: Fri, 26 Jul 2024 11:13:47 +0200 Subject: [PATCH 08/24] fix(batch-exports): Remove duplicate configuration field (#24009) --- .../src/scenes/batch_exports/BatchExportEditForm.tsx | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/frontend/src/scenes/batch_exports/BatchExportEditForm.tsx b/frontend/src/scenes/batch_exports/BatchExportEditForm.tsx index 12906569aea9f..6951a7dbec90c 100644 --- a/frontend/src/scenes/batch_exports/BatchExportEditForm.tsx +++ b/frontend/src/scenes/batch_exports/BatchExportEditForm.tsx @@ -107,16 +107,6 @@ export function BatchExportGeneralEditFields({ )} - {featureFlags[FEATURE_FLAGS.PERSON_BATCH_EXPORTS] && ( - - - - )}

Date: Fri, 26 Jul 2024 11:55:52 +0200 Subject: [PATCH 09/24] refactor(dashboards): remove last_refresh from dashboard_tile (#24004) --- ...nel-top-to-bottom-breakdown-edit--dark.png | Bin 163496 -> 163954 bytes .../Cards/TextCard/TextCard.stories.tsx | 2 - frontend/src/models/dashboardsModel.tsx | 20 +----- .../scenes/dashboard/dashboardLogic.test.ts | 24 ++++--- .../src/scenes/dashboard/dashboardLogic.tsx | 61 ++++-------------- frontend/src/types.ts | 2 +- 6 files changed, 28 insertions(+), 81 deletions(-) diff --git a/frontend/__snapshots__/scenes-app-insights--funnel-top-to-bottom-breakdown-edit--dark.png b/frontend/__snapshots__/scenes-app-insights--funnel-top-to-bottom-breakdown-edit--dark.png index 4d2ff3308afa8d1b2eb842fc0997432e3abd2b5f..207875a3704f89ec908195219a4f50ed0f3c1912 100644 GIT binary patch delta 125399 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

AClSBB>~TgmMKdSbJCyzWE_ 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 T+z?f{I443u{b7;Z)3^T(r8^0f delta 124922 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 z zu8tQW8#WU-E2?9d*h_uDfYurFv!UokGJz;?n}Xw^kPs^syZtU5%EQ^^Xg@dSkihf! zOLvNr??3O)KsFo~_ldw&D%0i+VrQ)PH5ZEY+hC9jy#Sd1L~M2%u?+!GAw*5PF>e2^ zWombETqQpKiEy3Inb{YP^ywuP3PmCCr+D-YYEj?{MnqJ%Ijg-VD6~i3en}YAla{r~ zWkrR5*_{Vzj!&Df$WXOu?J_%qk`bGRY;JC>92Hd(WI+MJ3moQ81(BO7baOraG~wcbuy;fBIc{_cmu#_<0nkDSAVr*-1%TZ*1`|N^aO> zGOaCFii~H{!`j`E{dGM^^9>8S<~tfY&zoj9BPOK9#bq)0`s>2|qqD`&DOvG?2&;2D zHt_8rnwpU?fPlNT)Y-Z|uMuqCfY84(ko%QGe^oVs{OAg^>sf#o3dN+?Q{kAEGfuX< zyXd}upKj{g&3{M7F6C8l16Z`5E^n^tewFVB+^#*elsB zqc23r|nYJ*$?qooF&a6v6`fqHCM#7j(GyXhYXgcDa5nDK7;XnB@oaq5sh z7GzgqjQpaQ{J5`FP7c~@bMpz+Tuqd1AMhg&9`HzGE=|u&L>x+XP`oi$cy8x`?zfI0`usgH_X}gyJ`Do zXhUa3aZ-hEPet*iN!*7kEDiMnwTS1ATNu9aJ(6$BOhiM$-(h1-`&wL3pvq`FQbM3& zW2_NCZ{C~#%Sms8Hstq=f$r!{tnqxWVxO0735H53Y-sOtp~~S;FTNZ}4gBCJ<^p<{ zf;0ZR?cdpMj(IqiHL0Fix?^AJra-YZJ?bhf+SnAie5?<+Us%n7Hl#g(ZVtRdodwlHvDC zvf0#ehS%k_T4`>aT(Pq58S z5C+D;-paFH)m|j$2)?Lxb0qS6ao5kN3`Dd4Eciqyja}!q)ogkF6gnm-42EkR8LV1) zoc&&G?~q*wH)~(qwI!(d`-}r*(-e4HmpRGyR|Q2d?VMwt4ta`3&_`s1)*x~d<(3n$ z)NdCj9Z%gCaBzTH)+Mv^XyxAJH=MrZ35Mf!W6J-cbt*cn{DL zQSi9zc1{`QGE-SuWkV0+Xh#8Fm|XyX`S?!kMG0kHNyYFE{jsss+Y^zTTpELLpGd#m zSsYK&JD@nDDR;FRUsVd+6`=`F@swkUc^!};3pb!KT(siKt!p2m2Fs!bdFTbxHH!Wc zZs1sPoh%oV1?TYd_S*Irsx-XI8W^%FIY`|*iht&~K5F;3)pdXG>+pc(F*F2^=V02+ zm8}OB!mvsXVNABR^p3-Xyb*a_K(-h;Yd@JCx6w;mfLWoPD}j@ zeOYus`UG{t*=V9B5Mmr)y7=xhcmeY`|6<{po%abimrD>DS+4%&-c#X=`#^8E^8UU1 zZtEZP#Kcld40~^fN$d(88Jd`wG-1$2G)ai5_Mgm#ysSCS*8i8slzy0O&}v4+jKU{M zcxt>XjVy;WBnTtX%d8B{LhtKXNd=o<7Hq>qb9sn@=<@fi))uzAl5}8$g6H%idk@|l zO7GEfcVuY05BL^Iu~>n#0E_}*%E3OtsjCAZ8ow8h@??a1EeRZ#2Qyt(Ey&x!#THn0 z8Od%({s<-|j7)N^EtS+~GR4!8syT!EOZ5RjhJ%c|mWd*Z{%pVUa)1f84=z}1-xn7@ zrkvdj!`D+(x=DHS=BxGaG`T1q+JHuQHYJ-HNTp(Wk`}oOK13zk1gH%VO#L@Ok6h2e51+P5BRU$Vj)8rDu>0&W} z$acKT3t=a@arYR6Jr2u$ig___jFw;B3l25Vf78e$`j5{`nPtx?4>tB98z|IoR=@P* zV9glLFyyz0Zkfw`%eYK&dvCx~(!l|{_~Ayq@@LG5Qtd#hpa40SGrq54Nqg&kAL*BR zDlsT$=X3IRcOQi0>mp(`G~O<5vUXNS{G5FIz%8)7_UYcBr9=({1Xd)Dh8SNPG1BJ%KXYo1SM zsj`<|Ox>uZo~Ij&=!}dbeE>jmP>VFV-&g1$qzgc0^LV`Juni)M6SNmVO>Lo5BIjoZ zCSY=Y>IxWkGR^bD!>#b?cU4E3U6?_5imR@qbIuhLSZ=RAHoZRA9<0^dum(!Y?k*7g zp_iedp%HZ3ogM5ts~>dFcp$qZre5WA%B-XN6me>atX0d=tZ&V(C@xk}RoxHziRbDA z{7ZN^_ckUf-3NdS!o4<#6nHiSubH}l^l4mYD<#Z8`3B6YF13sP8_RuUW0j6eeMKjk zeJl3%_B%PS9@V_9H=qcC6+kLO`FKmoUuTTZ$#G@0iX>G%M|N!3J2d3_S&AM3ycGq- z#nHSgwifr9R9fTM0TQ@oMM5t7L<~`1bpm#}u*+t;OpGctQ%Snz zHEwI4L^ct8>V?_aSRv2gWkqAP()M9Qm4~lHz1qV30{yyl{=biJPR}2AOlVicScde% zFFmT#dQv{KCH&z7;uQGDMScCssB!9CqXO>?g|HU~${YKBr(8kjpJWT*wPD5Hyfhrpe}=hrfE!wSlw;)O;6_>d zvt{v({~djeAJ3}?x?p8me(a5P5d=FnC@t)qNV!Z)(oUCTv^}nHI%UEYIvQ5Ug3UI# z^Tnr!0JOQesH3Bi)_3;cze4<@(DP?OqBGy2Cn?B0xV~a-tA+xdA1lA(@|*eHJC+PB zySol~GFlnUzQOlfnwsq1<0yTdF^iM!Uuo( z(t+es(Kh;KyIu&nLaBY_{cDj6A;=jI_Bz|$O3DXS8s@d%L-vF11n!(I8ic#lD zn8fH9O_j&_)8oA!e*It8BPG*YE|36B_a+vEo49vH-S$`ar-wc+4#?$c3mt5Bg(qae za8XW%1@G*5sjMJrJBKN$PJ!Wfp(QOs#m>&LOBkUCtdeXO(w?54%S?$j2BN*?SG`%Z zQ~J+fqyU5^BtBK=a#7(E#V7e7PZxQIWUmxV0&t!_efp)@Nc7t$8o4ruB}o`B?633R z!zZH+lW-9j4Ds7ok*NPVkb8aq!QsG=J&~~2X>wY_;qDV;?$k%>Dg@p? zp45DG1$-b{J8QMC=IUO2{@QHBrlcs8An06Rdm&6A;G+EcY=&00Bf9b_AD=2?q|w5x z)!tCSo38DItQ?(%V$X(nxKSXS#0vN-tVRbXDEOPrdg1d0fyGpnC=pfjcr`{tpkpPu z(}JZYX?T;Q?70gN>dSRKZwPxHuP!+CW@4iyVwpwu-?p%RZDW%^a#MGQ`54@L&hguol0D zmS|4u`Cgs+uKx>BnRP($MVNB5_~Qk@|)Nw{R4Dn1Y!_OR@jNLEn>~l-gUoh zi~381=`AW4g2Z~97=ae^iu$wd zL^sfOv)3S`6kvak=bz;714d)S24)!pt*wmjMNX7Tmsg4cgUVt3oO&BHJ%e9N{;xpb zi{YYiG8ca(pFshSkPsy&rwmayAV4AyLF*R~5P*_QfxM!AC!Wg>mJgkMiR`{|QAq zc&!cxi$=qN1)~3JTu}dsJEHG-QkTQ**vH?P*RJRg>)uQh)i2ru)fM3D+x7sf@4{2PTKv)ZFDkV}G`4kj`1mH=uYPX`0f&yp$H%%#LklO$I}eD<|w#DYk< z>8z|(O-e52&~UuF%IuzlLJde{wB9dZ{(QKJY=I34&T6Um;4!19gsg0E$)$x6od|qY zz=~=!**Wqk=IYH-9#YQ1fuSgKNLoM5r%#`ThH4wR)1x)^So9S8#+Juo%pmUJ1b2rC z6*hhSCPC=?_wPF*gS2lqK!i|h_HoCByTiuz`q&BXgU>A-fiMOgI4jzI`?Ht;VHmh^ zO?%-@;OH2wx6cIAQCz8JZJz&DjDO4A_B9W`7mC@7a7&uOc$b(oJ%(~|o!uKcP#;l+ z7FBXc)UEA$Igq2Xw93)y9*_rJboa2rlakaE$ZM*yJ0m3{%K~6|f2Y#pEOUZuA`X?O z-Lsh?KWe*mkI=eFE0-q|QDN^hU18Cxp`l_g`gv=mKlewDwSC?X{9!oAG}-7suTKxp zl!{Dn_~OP(WU@-EH5DF9)7aM?_az9W$Ugv4^v3=e^ifjWfu9WviN8ySl_bIO(tVL& z%>DB^vod1c1oJYo`KTfE{R!^b;9R8%{2E#Ng>(%;ilX}@tEfC@XJZXfA zg7(B_!V$Ph)11W?bKOxO{M!;5V&IAz_&hkLatWb{kGq8%b+8J{_bHm$X6%s1& z#vzm&T2s>!R}SXk8MGcQi#+9~Tc55+kcBMByPa8OD_I?{Y-?*1JliOjj0nt9%k!H4 zQ!8oFUs8N_dej1J#RvszIMhw{IEofEO^#UjSaq?u zENX%B89IVZB7vEq((++>UD*CpLnU|D-@n4T)9au<*vs;=V`Z_Ks9Im;K%~bpA$PON zTxWMBE#!eu5E*~wAi7)vmn-C|0kz#tIw3AJbg|m?Y@;oPATPtXMU~sK->B=iD?pO6 zX)Itip;1Hwg*2m+)xYBbg*4-@4YTlwuJjh9oIi!%Enf50C+=swV1;h=TS~5D4YN%Z zcn7zSH^yJEXd_P-CX~eQ&QQt7$Ye8Gk`LChLluGQcyM@ZMgKHIX>2z_obK zeG10wN|RHk9uD}l!DF+wmJDD!{q7 z(%6N6lk(1;4hUt83J;gUTpBH}TaUXmRHNuI1!bg8sgrR>{8+k}cC0VRP^|Z35g)&s zuUb${%B`<@-!5)$z5nQYNfABXO9ZReF0&u1IhyzKGFUP)>=&2|v$RaNzPq+WGH2_I zn5>V!)Kiq&J>LS(41rurL&y`KKE};!POF1n8}Vy)TU(&rg;9z|wZ+n*o$F9c`a@)o&qib}t}M zJmNtteHb=rFVffi*m-?CVV)PBwh(f5MZ277JI9q_*UG$uEH#B5frS_1^;QRamxJOk zUop(+Rjy}`!dxKv;Nn*j($DySBfXYhD}tOfj)pJ*OG_%}I|?~#)f*amX^N?RdjUnV z09QG&s&h$K%%I>9CLg)XvXCD$x8(wuL^OEsuel`}#6kZyQAMy1D2S+phlgmM?wD4w z#TMW@Ia>PO|4P-ai#7s_7*y*5sU0-l+O-s4BI0z)-vW;qrZsALLn4@dF8inFW1XtO z2orQh8iDVi&{R=s9vT`6FyesnFjj}9P_r&Yi^rsc}J#H#a4!fbIwb*`s$Y3$4)X^ z7icf;2n4x!!4q3qVy#>4k0?@v&(C#K3iI+pVP#q6wm;Z#+?>GSuFKh#Bi`p{ZVCJw+=#>CB(%mpzc0vmU+l$f z!wJNKz3RCgD2cb{7NgW*%+w&~jYmaQH~q5GZLWK&&Np7rc?w#75IY>6#3|@g8P_DI z!a4yBv%jFZ)04N*{8Lgd_u;$xNqjjdl8})8%(5|p3_?Vy`$+}lhupedb2MxIA}ok# zLmZKxRn2?>nNnv%MXp3*FaGR^;q1&~$P45G`zems{rz$r3yi)d+z%Tbd{p*hpB}P5 z+Mc16yCCIz@oMg^XHQ-vRB*BiBv%^1xa(i7EQizpyLWOjH|_%=3L%fhgN-GVzO0MW z-`|(H=YZQG%TT7KVqP7_Yt;BtDGljh)Tr>sGqAQ+p|{TD_p%-elS~Pr5FEaj9r!$8wkK%LhT^toWooP%_4x=hqh(r&qH z$88m)P98zZU}DXC|f;gVAQx()1D57Az|c&3bE zj)SSsQ;)-hky2~s%5SeZ#I~*p1-XbNbx{aeNOg5ivCGf3lBf7@7Lb!{9C;YOaDFDigVab z-ySs=6SNQwODD9EE=?!9D8(b6x67qa!O$sT-@5(Sdv&m2Ve-9> zkQVn1?dq-+d-1e8h)fhuio^4`r*_MP8<5_TeFP%5zGcTsXKRMBea_W1{IY|e=W#H0 zVmZ<)C@lhd$lPwNDL4{*wPlEwE^+Ot06(hL;o^|Gsom8f880%OimiLE>Lr2`c&bg1 zJ+{1{3+>uFy%~n?T3Rc=NnrxD@&1fI2T+RndPW=!Po~UX!eSsMuQ|Cg9V&6Cv>W-$*zd z28<58YggVUOc=ixnRG6AhvG+QrDGvppu(<>^xzdfaOLp*wkrZ$+G877*@nvvEsHIH zdN~;yvmP$E!pj4jqRl{V+wYexfUAA6Nw=M-A=~y1kE^omUXm(&QwGz2;g6}wLq&RKemOFqO4yw8ceN44w>A9hT?M1jRhp>@K`au#SeuuLimnl#%- z_yk0XzYs{^cJ4Pi@Ut9nd!p;x%es$+$WjyiF`oyt!-^V0i*6RH@hT>PP80TF-pc>rA1wb!=X9*6Q5E$G9yGp!y!t|4JF`&m(ZUG8Ut5u0ndK-=gcSbQ*$Y{GCR z*>n~uzijxLN!hLyvl6=**nO)TGb8`_J|V;H_5)shGqc@=2Ulq;5}d<&WQLB0($Ht|8umCO}&8$Pge_O^Yt4a71Dy40_y4CA?^sun7`h^{-?(5%w0C9>dMknKQfiitlQ~S@X%in}1Z&end+yR3+Y@DDM zAEX6uRJw8EM+(I>^`7(I^ZO%;E=^ym&TF>wr1&r_DpduoOh=7RFDJ_klAl+R8(j`dOLJ37u>F(}s5D`$iJCyG3{O0y|&bi)m z-uL5r{@~dg_g;JLweEY)F~%H&jYfR%Eb__M-qZMt2j9kizLu-5S_~PhzFVC;EBcXI zdAx^o=(Tp$Y*MAt%(aZg|9lIrM6pt1hePR?B$@GU(PzDuLMm%nSkCKTRDI$$$a@%* zw1sx*e>pvLUnLh6>}Y+BgJy$)8r4CgQa`}K%(%uCJI}V-_s4)hdaCf~g8bTjML;}i zvlU-C@HfcR{eIWdu7Bm({&jad)SwEQdlB1GLDLKwd#OZn&)^-&OhbkUo1cPlWc?X* zoJ;%X$WM<}!$*W|<<`c*OvNHuc2BNn4F3Z!1V&7Z+je*q<(Wi>H7{&S}yB1Zt@KJ63m!Qv>SZzfr4>Me~h6 zYshqF3PNbSaSrrK?*)4%qyBBa({bX~80&q-#c?jZC4rg>%mh*ts*a!~nEigszkVLA zdaJCO%sDRS=ulGY+aI=7dAuuyEn78|HwG$uXW%7jC> zb!D1?n|f_kCJ4o1^U~K;TFEmNzD2i5iypPlY?Tm0n&V zqOtJ?1#@PXZmMA#C2~wQd#jXKs`969F^v`NK$d>P!p>y9^go0r!M7$)8CTRuzS=FB zudHD1q{=16sr^UGk=_aykK;G!w;n!fp>x6e=Ba;$e*>w~Pa5w3#ZI7m!`xiJmY(>g zfR~JwGl8nQI@98A#i3_Eqw(uIUnGCwgB5IZQxl6SCW!dWKV1PN&uFJ0kVDIgU9+ot z$kMoNYWdV^)F*2DcYnsZu=jEAMWOwajwG2Y(Ra#g7@A813@Uf$$ zaU1X6swN^`sLQ!m!+rAMqkC`R)Oc`IdZi0_#-riYRV$E&J zw#2^BkQpcrr*^T+wyYXZN3RiD+ zMs6KlUe*%sx5Xe4H^QH`J+I3bpNpA2wVH~MxUJ|mv5Wr4`M{$S+fUMu&+S-cNY=%Y z&-K*E%&)Hwin9-SRe$aTavW%7IcpwqiM}(Dt)#b?rJ=GWS=zXb2j_YIs*%>!mp9K&UVt8Ec{!dBf6(^cRCJfuD>_>xO%xEh z7jj?xopoz;25Uzsew~)d_(av)wxAqi%8ul|3l>qTneMcBc7CEfN)7$~Qpe2HN6I-r zUJ!ptnSrS6_pN;OSTjSQ}6Wpt$|=U$6mtI=htK!;iRK_ zWU7uWsx6_@?t8i2_vm}>v4^`Y)|b;K&E8`=@Os#9?T)rda@YiNZTPAC0eW*(Ht>Ib z`(MAjz$!M7ie-CmvbUmIV>G!EPJIi%{p&ZwzaKgCwbOo;{%%fl-Sp4Sr1tSZzeDDE zRkNP?ojYM^X6roa1<NPi{DK5Y~Br^|*!Fm-;x*NA<16vlEkIA8ZImQ?P9zZ4b* z3cO460gjWpE+QrI0QK(@m?KE3)WOmq>3HR=roTs;Xs7FAYP|7>oao1JfNp0vV`B*lEh^Da4G*=#(PbLW0| zXkkkrA$=P~Yqqjwvt)!A28i+=a_B5q+mD2n#zjX{Mip07cw+a~I+s8Fgh-1c((&bQ zj9(i?ba|J`Qv~AQk9@9U*4roo;>3)luc&u*KgN)j2sRjO&rHI9#A-U~iCyH_=cLmL zUgKCqJWrgx?%$tZ8!OeUZH~saW+7`IGK}@|IvOjF^bDd7ZsvChsd>9ZBlucI26Y8$n|kkD=MDz@O;CzM!0#tImr@05y7-jQ^^v~=UQeR8ZPko^XJd(Y;45b2K|si zn~~elkXT1p{(Djcbwr10e~CWI$x_}10Q@1l**pI8OQb(1a!E>mk5=isxO{wOC@A=C zvou7K?Z;$i8PJ&0BrWMYjzQbA4P73`942o`$B%htUUjg;J`UI49ziGR>!)^Z?p)3V zx^rq?v?&Zc6?Yv}Bc|8at!Ec+EVIF#4u#Q0WR2*Ef-6jyPu3phj@b>Em7Re(B&uU`JY?ML z;ra5Rza6r1eq|XlYdguCng%RUcMw|LD;50|9t(>zBi2za#`ugymF0R{Ek2m-9LQxP zovpaYgxTTM@xqaT(vAJxI;fI=e3WCSrrQ!KTLXNU8W= ztiYjg4;`U;o8tGMKc6%5Yv(-yPq>khjXBI5yHd-k{hs8O?XW1g%aJBuT!9eXE4O6C zXOHXT{zSL_{8>@wS_#MbS@uspUY=0UmHF%c&htbgBxs?24sWvjD;oc&UzR_`l43lN z@WvbwzyjMXjAgEWC22++iLLkJgv{dp6|T=4{#?G~2|8a;uZ3)ypU4_wcrGq3!fHQ7 zIB}he^-^vg3d2ToH#ve;7$OdBV2F6QAn(eN+k@x_xPoGBt;<|cJ7j2c*_9BmcGu=5 zA6|cxkZ^wZB0gfjvLHxaslB(G3A&imrT50F1mSJDD+zU?P=CfY^%^HME^LW?;R_Ad zdvFQuEdm*KT*lMGk0xRvO8463?Ni6*J;H|ci|5KJDhfl1cLjgJ66hHO_Jb`=6S-2n zB3K(7%&Z{GnLFCSXT#Sd&dzMOyQhhD&m|d_U_m!GpdPe1PjEecGe7G!%q)ta;a`+d zz%7qaZ>FZDK5d^VR9%kZbUd;ZiatL`ZR-qHbi0*(u&cZ@tOT9j~Y0tt( z@`iBtY7AYX$(T-jZ!Ah3*g{LIH)LzHM|}O}av;fWK}6e}_47H*s+;jG497q7@aqR$ zW)?9^dyA|sIP>#>NIAT|yEL(La8?b&2m*inC#n%7ED8#V<=J7|y=8rRbykFbr=_rt z!DF(%D|6+UX)_?Gdk@*$+g+50KJ?o^pvvHP>t4aeAiZ{tB!Y$xPm!J>aMR(m3Tr{V zX=baECn+iIm0^Ypa0GdcsJAmRF|n8|i4#taJ=xiaEWXbpE(zZDBQXW)e;d66U3VZq zO4)vC8a};&|L=B}11jXmN>gO(_IH67XIma|LJ4p6Yn2rhdj?QHvdS$T(s&RxbiCBJ zFh1_0@c}mXBo_cs}!@WIcQ# zp+>NQjTq(zZBu&M{d*?nU7uxf&D>1*bxw^~So#|3k$~3{E-I>AidjOR;tjfD1`C7z z^8ze{n|%=m4X$-0swI0DmB$yuYPFhQe?Fe%$ig0dM#py6pUDF7yqr2dLqzer2BPIX zkV8N5Tpg`Nz=H*Ei1_z#EL=0uQ4hM}cx$bmw&moQUEm^z@z3d9%~D0EoI4Z;pJo-C zBk8{Qoj8J32R5$IV?Ued>G|7LOnHNJBIcydZ6^%7H_tpek|o{Fs-Ul@2hs)sET1So zaNkV%Ff1V2g(;KmwurK}YNQ6mLt95j_KE<+H;DAq*VB@cQ9VzosHm78WHIa#5o!67 z242i32Y{^5-iNGv;5xi-pV=ba0tc`sL&Wjt`4}Fnm~7LjZIqXkWO7eR`USH?cPDW) z%wY&Tep5V>tFE5ErO`7nVmv)dfJ1o$^ZJbEMdEs=RKK<~&hK>fZty>io0xbT zpUdHJfzB103po4Y;^gChr1sYj!~B)Rz05iJ3UbN1zKNq;M=E3pNqNyudSJRb4J1d{NAskh*Sd{1w$%k1YwUgzf* zr)`_7s|UKat)T=7&1V(ar~#|xm#{R#NW#_)oN^c;H_SBdlIzRB#V{~P1L#V>P-V#S z>X<#Uq%%>K94mD2edPt+ebb=;dU!rb-+6zv?#*B3Y$f6xHCyaBs-TF;U%k33VYgwZ zYNNZSY>ivJborUd?$6WHk8n)sP7>c941fMBRK?9*I1=Ny6JAzw{=3Sy1q8;}g5WEa zo0cYwvBhoEpQeXTv$Oei#+=J;i<``i6=77i2P02r$5sh=v(?q=7XH_$q>aA~Z=TT* z4%0jhDKr>axeK|@QSZba&o1|dV_R?aDlV_VS!Ec6 z#BS-mWH}+`azecUrn|u7pl^ISKU6@YeD7Y7Ro^}U`VcNFG0w$EBKXU5E16t)+w%LK z6>geTJk!B;s3~yDH8n0L0k!@5cp#<Wr@!zyPzaPe$|A z_8a0kDY{Nwah;w)ZOZ3(l9;z|QF_AQb|exNrI0hbv+!ec^A{{q{pzl+wXhdt42_PC z7VW;8T$ia|hZxs5Sw_$7h%DU1-6*_8W3}TQN@+P5Ws5fDr-5C8gml)gWdP+w)V^eY>)LwS49LsjE|%!4)R2Q3oqUFhsg}=)x7-xiI7Q0xf~Zh6~Yby%vsU z3qtmCpc7$}E_%z(!9wntlA7+DDo;IcV36c97s_*1tXmbCd4qKJ&xZ+|9m0nX!G}~? z!g3_(C_}b!ZOuGatt^3oEa9`(j*Q2|T~}tb=#E6KZdz@9GG|Z4!5jf;M$NjxG|6mO zJSnBlNj0oq#;PYc`|8jA^BjJB5H|9}jtp#X zx)Ept!bg=YC~w4?o?Jn%xQ4E|7r_hzrLzXVazU8nN6hgGDI7Gd;btRD)ZNplJZ6mV zDlaY`=rbLzDz%+y_J`b)kCxsySRgtYWJGV4wg+CkAccZpqS}6}z^x;<`#Tn~Tb4?+ zM&u=v7-p>TwpKA!IyS6N$)07+Q<4^=dMx^8F`;U&F$|r z9)T~NW)b8@Yg9Psk63rXV!134TeCJOXK(UM&}-#)ryH`+S(~RxtZ}@T$WU45_B5j7 zyz9z0kbwZmEF>wszDgwJsEL00@ryrue-1b~!Q9uBC*0TEq&uM@gc=uvbm+WRYNBm%KNn1LH+AZL z9;Ngy?fw-)$UVo8FVq|zU%hI=5p;XRD!?kMt=%=zk^0Kl0LK@ueO$pj&09zcR#avS zwSp3VEW?qF0KKiq2Mp8XN6S@M_8j=jPdvph>V5B${`@Y0>}LFh@pk;UT2XOCYJ$5I z&Xn%nFIaHdsg}g%zJ0^F9-Nq*oST-FHSGBaEkO)MW)&3`MMR<-Qo=(*25q0CeZ#}Y z&sQl7zbIoDL8SH~7qKok|7cHf zL3}b`r`cj!r|LAvV#hcX+r#3uVM*wjP}Qw2?I*5$l2hx1T)yG~4P+c|Y;JBY6hS^d zwNJ-?&TWIXo5gay9bE3@?--lEHD)qjerxjLs|v5R{`HL8t<^jUa236Jr6?pW@70jP z@=O%XJqpZ1DtRnajg9q(OfUE2ChC+gw5!+XjitS~GJ$^E#;|yVhK8n}(Fp2r-n7p9 zlST6#(MY?Oukz|xacrxqoLo|3;tNgfYKPxh9F~AjK4znL?HJu7bgeaz06%DRF=JzD zMRQ~0rD<|n@=3#`&AS(pgteL)$2<}>@=8iDEV;FCgha97)}Jh-whi&5Nkniq>iszE z0TVI4bwtd@6u#a(4AcBL>39g>#amw<4M(czUf4W9op{HUPOvrYidct_I@{YTXJY;Spu z<@G9w({j9mb8|tbFJ01ZbvYqFKRz^+n9%+Jhjdo~WF! zrJN&zT9T0fgOOpiyvr06&CGnW*UL%nfZumFDPHJUojfTzUJXkWR?(!ZXj6=c| zjGD8DU^`&~maCAF(-qH8ok%KE*X8AP+s1Z<3-}KB^h~W0q|YAs{Xmj*$yu+qLbC;# zCd>cjNjS4u=tGZO;-3>?txJH30@@~T!_Gev0__j&zsd$G-T(ee_A$56=3>}F4}JcB zx=6Ic!u~0OkNS<)ZQgSO`G$W_ISGt^?<{nD`(}7vgQ&v)Seq9eWorJZ$B*Z!y4Xp8 z>4ER2_{Y`Na?x34|MYzclUemFo>9|q!(dO(kLDX>Pm~*i3{tzm$Wg(D4x|YmQ+3LJ zkk9}0{MX>ukxm_9!r&hTEOMuW?>d4=PP|?z6 zHyr=_SIa-``GnrtueJOQvD}=1l((N!PhkP$nO5rVn?2OzF3TuZVYYbUSz=)>nadr; zV(KKUW(|-TEw?P_Q-$YZ`0bU1)r!CbBXklbD3Scro!OqVpaj!ok=yw5U9ZKp3e9>d zS>vK*)kn#eSx4=B2Xq30QAEho&29H{i=;i@ z>(s~WPw7YWwmr?&UE(QPL?*HB`~UkQ-Kh4Ay#MsjcR9<1ZPrsz3kwS^vvEz1@_ZK0c=Wvk)q3{z&RU3m3N37F4j>?JLnu%{7KK!t6o#mT%X6#k z-JG1&R<*9SHvA4)5d|@J*L=uN1pMniVuD%%oHFCKfG>(5{hj|E90J~$^0KAXy~5hk(iMs& z{kz8Ua&f5)nq^U43!gkEO(sU2j!US^EkqPJH6ksiay3c=vg$)i_rSh1U+Y$gP6XR0W#xoG^n3Y5=l8iZ<)jd&4LQ005zYuKnz75?Kj^Mb)v0QXc zjv9|c5LJ6*(4owsT5H-vouNv35U&Q}Y*0{6h)Y#*ymPOH%;R^auq5D!tE#IuQIcUy zQJizo^vJ=fsB%8wi|?WY*NvJAZu_wk3v%%{KBC$yH5ZQ?TC-APc(0&w+H6d&?X`tK z=V*%%f4<7aH9B;Kfm)_}G;0pPmL$lOP8E0%8j6>uoQ~s2&0~Sr7C^u|ZK2_y(Vly~ zs_N!Y<^!ER8z){aL2O0&lWZ|vp~RT4vT7U4Vz%dz{Um!A@uGXK<;2Nh5AF(H&eQr_ zPl)HR_VJmQprOkecdRfjJ(a%v-qz76^aaQr5>BbZsR*m!EV@_eeGVFNoAiM#*>sft z!nhb$b*YQ4QjD5jk7ZE0f!3e%;mUYxTN^s&yI|6MW~_%VqYqCj-*x}dDIJZWGa>Uc zQF=1;OF5msr|9_Dsg7@D(DCSed+b+WJm0`!T~IG|PguMzTM~f4J~LQOSD0 zs~#-8ifxOf>+5Pc9P*9jj$+mC5c3UYh3*Y@5JC+;Qq|OwrSA)vgnab$`uLgtW&*(C zcZj#!@`%-cQXq95QS2jCBQ5aC#AEDbCimsx)l-;!J2YLV@j9U^QoBCo>$1<lB!;VCJf zCLN7KNF26Lw**iSppvQm@;v~YPu1g7^8_1PSnMx1K|d0$(7rU@!E`$44{y5A70b%P zf=7I*RUy!)=WF6pX5jhpP6%WNET(RQSh?7JdTjiW#NDaG-~O7 z9#1VdQaEUM-D&JangYN4L~8sARmFT>B4NC=`(MLo$z<`yzPWC+J@>=W3qI7r_9oln z)@Y^F_^YGv5q5NkofmT*=y+bf)s=hB;h|@oTdFY@-bf_q8hto z#`5S@eL8TOimRRIys*_dDf2H1SFFIHZcIu|b(}s-1X!!0;BE;jTY2avNWn+DLu|+|_=dyR~zx#T2w0PT_Ot^%8W&Toh%Lc_GN&Zn$5mYsdWb9*(nb z2yRvH5#R}7083DAR=JR+C@vkx^>pSBRW~=a|Cd1}RWvhp_2UEKra-ZOAF2R0XPE!J za#F2Xw{02v^;ex?_9;#9cGpW4j{nQo(O*Mekq!xDn^EP zC2acz-lJhrlJ?fut5F&xmR`OQk&zDx9zNoqZ<%rB#FI|%%N%%)Fk}7aj#4qhxdNnk zcpW!czyeH;m04`5R(H1a_ouj?l*y-cej~>rI4}#1$5!R5{ZaOIJk(%P6DuMU zlLw}E3^1m=`;eHv{_exQ@E0s;($rLk@8(zI$Lz(W|D=%Fc2dX`utVP~(pkD!1 zLp>7;S`kJ}iY8qAfG;|msYnZ(2iPJ>Z+h5lpCq09VxRG$VAI&qZ$)W`mmyJ6CWd2D z?Cfj0GwbuS^R1(q7kbYYbr0Uj|2ZdRlk=epG%hA4T0P!ha@;(az-QFlnyAR#AI-{i zB{lT@W|~Kb6REKMB9u8|;7)~sFUD;m))c>v^J7HoamM-|s?iLpqstk~&QG5_QS-{w z9jXlWmplR9$kFkrNJQ|fa~F*h$*W4cRKEsg4)(7bo2|`>W!{ApZ@f3n|5#VTV9hA< zM}~fY(e(o^TK_$+*!B5Q%d!254?`XqA<$1zNI$F}?W?Xx@vI8ea&x<6yMv}f-BW$1 z-Wds3l-X?P?A&kmk5&+~H%u4#E&UeM(Wzb@9-8SWYULP=y~ND~saRN6W?BL#Vya}a z^%rf90l&1kI?*qqoSzf-r9#6(;7zytB?~w|=chX)s?+y^L-)>i76j4Jt2Z}a(=<)i z64~6I`cH*_H|zK~PZM88 zFS`7G#N3&KIOCI7N=kOXZu(^Uyt`nx7=Qgr@zs8VY=XVqLp()Qv@fofQ1QFF6JEJq zF*01j@4U}g`6Sc2OKBlH=Ly_>ehswu)%B;ZXc{;o0?s`w-$oRM! zFtt{C!ZhhPK8=DCX0xNA^^oAy1GJC;G6W`H0}kJHO-!_3FNH+3n!x4e#s6Q=-nICy zsq!hy6Q!y1^*m6!!uJ@r%g^eF^g4{7i+q?AHCCXD{)u+)e6qr2ZZv4>dbxR@+F_t_ z^Xshf;(;TY?AOh;j3>`%u>Z?Rq*@}n?9q_%iR09J87%amD*s;o_B&en=g*6P-{}Bc zXzcKE_xp!+sJbENVYJ9msC$nVBEdK;C#?><`DmnHG$5Y_;wIJ04`03%W>l$I1!hWv zVQ6fu@8>X(LPt3xw=zvnvJ}+Rxa?wD<~vsK>0?d~xB6U9PVLslH3~rk6o}!wI<^7O zCoC8}LqpO|hep4;nG`ld2cGu86$Yk9pp5zP<4IGqIS`{nScYwBd*E9FVOA?Ou7M;7 zZ-%GXPhqWy^G(^JuIAimcBhr4rKT3j_DD*%x2jJs`DT7~C51gC#YK(A_hsQ7lTZ)p zxgBb~@1eG;Vt1DUPU2~(sZ}f9Nd-6i7Znu&&rx=9AOv+nO>OXGMn>ypnN{Z*a1V{= z$LAFbz?~#{wU0WbH<3_9vXjYhgvp^vH~5fPYvg%<|Fc1yD1ANC%9}tzEzB*n1#M*y z=H_VEJIZTl?7eUJ6P=uyIr6J_+PJkCglq{_n7ezKrY`!1y1I0hUrChSIuyVs0EXh` z(D%2@UI#|&qXT~nrY858B}ydo5?U0ydGFMO z*YCI9US6~szem|<$H0~t@K}IC(j*D<_cSuUzfBgV$^2w~38HBAV}y)Gk{o4aWjTQ- zqg<)g`y2hn=ncGONl8g>Z~PE|e*<3cF-pl8=I=*$Xw|$OI6FkYshpIYT>GwJ-0jRM z`T^m>+}yRRmD~I~-qsOgTDUZsop*@bhjO2ze2^EwS9PTnHYYK%6r{m$>4=o(g zmEQ5PyyemGrch;cR1KiOoD`Yz59iV4k+#J51Z;J@0d1H{b*gGzghgtZPSS2k#QRHC zoR$!qB3s(c^`hh3GuD+vSk)PeEcrElsflOcxLXBN%P9Ssi63)7|1IAytgL=Un2LPm zIh*pTi8xVLQ{Oxrz(~ZuPwns?2mTB#<5S2kk0)>-Sy>OW=*%C*H!sj0e&@-cJcJ>8 zX?cBP76lbfPHX;0c&NW#W|_;~cZ?4P!ZUSDKwHz_OHp`=l_6XmCZoZ+?MVzT>aUQ) zb*jDBwFL#Q|F+Db9zb))p)!W>Yt)Ym?lY8z7aq(1&o94W-2tIkR)mH5!1i9-y^$T| zK3Is?o4s0^#*_L?&ni-j@-Cgq{I9>}Ll}ry9Ukndg$Wti%v^ZsFK`JUTQf`4DEdLq`p>ll zRNshn#yw+V%6lLHAQ1bp(?mV~(W>!B==*NndS8h7zZ=0kc%X3Sfg(F4uOFmGdwX3? zOC$64zUoKBRC53NgFotCDDmOpYL}>6A%*K6(l0Ah8@8|N;5;Uvr`JtQ7=xR z|Eu*8Czpz1MJyVU<~$JM2Hipz_8h!y4Mjy;h-C&7bi&gWjN7)h@q5z*7^Kd2=EWu> zx?fu8@XH&Tn#iL$a`D?X5BS49*E+Qe6vVV?O!JC%!J0l73>n(WVr!3grz)(*AhrT< zz^513mtErjeJ6)6fKuQWa~q!+@d4Y1RR?5t(Wf((J2N9A1MY3xvRZOxp+E0h!Q2Cb zw6fCihX|qhcnLiz=@LM4=419_W48CRV}8FqKD4-Nu-MyFr;7$ky@=MzWF(qbh^-vNR&@Qp1T zS>=}^2`>M#eD&G8?jUCNlNIL=30$R@T%`YVYOTmA_)_|ofbjA0^CR^HnJ1$vv$nj@ z`?kSYUCwK4u4og#dVe%DWymiaFX8iN+^5OPez|7+3$^l}#486ZrY_6Y!2CnQ9%)GVW`J zZBCbS=f9K)rYTD?<2BRM(>g*38wbZqZDb}Fl&FBtc%oen6-j#$zSQX3aj;(gY21^Sb!LpD{t-JMz=PHt?lX5Y(SfT z><;Bm)wrF_gK)9ddG7(6$zlA$1=Ni1Z(sYz(C|M=)ygCy#>IbV7u_;*U~hlsI>n&R zekLg|s{<9WyB|KI$48-;>F9#+YS6Jy);R6}(_@2hVa+! z#~Hp;nm@~4B0l!z=39!0y!=y7v)!#$c+ZJ~fYxUg?HPV0vk;o7OgC0ly4N_{LWCv4 z$^>JPY-^Q9H$OExp3WLWbaU3|ziS08RBj*h!|%6J4>-KBzlELi)F%ko^g$+`ynNq3 zvSgLZp38Onvw1oeb(b6%tFW5P7U+rGksEP))Q=R&0Wboxw(0YB$OXZW)s4;pJ-7#5V96dY;Uekd@EL-un!f%km z#bEI40U?Ja3A34m_RtF}h>fu;TN^I*<=wmL9$UTdAOGC8KSI>B)&+wU#vkwHrq@Te ztw#3Uymc#GDqd(}%3 zh{Q0gtXF#*<|)nTb47l`z`G-@lFau7@Gt-Sg|5}Z^Cw)3@_{e0o94DLNHH~XP;-H3 zU*wi|um>Ga1b8^7xiLFUI(aJnt>l}~0Jv4=%-W9{)I$y)zb%Fcn z?yHXbaCbyt7nwCh!PSgpJi7!6#mI6h>ZPx7T8*}*N^;bU+I3GnWzY|JtL$+*P7i;} z3x0mjAtLy?>k%mKYHChnV!*9iVwG6%S42Uk!1>YH*%d z22Bvm7Il^pdxbBHmDpc2$WsQ;X*^4p-iUL#RIi5~{Uhm#@(6fm-hKYqH zeP(!{^enO+i+wGV^PjzsyDsX}{w@@UvWa+=dtnZrh|}(4Ri{c4;8eKj?G8afM*0Ik zvh>@={(gNb9FU$j7|Zlt>(t}w?c29CiDSvz$fuq!s+vSiB_?|Y0i6w~@ToKs!)M)J z5BfTw0pd)D!b4qM7l(7l?!KR=7enGu+^?J4`SmG!k-+#AcD(y|dN%vt93RpG8qq)4njECQI{eb>3?m!htzoZV+=Z?ysv5k2|M9jDQEALOE;GAVI9Oz zun#M_gnw8s( zY5y)W8OaFJegboIbLZ+#6O$~s&6M)?vzQT(B&;5A0z^!-x&{*u&tefIQNKf9@>o!{|f3h>hHrT0{!hK?Ksta)F}{P zf`ZB!puG9&oT~r$R@F&695SGuLv#7pVYwHf2uK)W(w+8Q2wWkH;4&_679~;?{2b6N zl1=l!wFCkCd+y>zLo5cnpR29@S}~O`+7MAR+__2O3a=C-t=}@;N-0hThzQn0gh!(J z=HA|(i|b(S&i2_{`PVO+^UBC|bOD`;e>G&?dkqHV=9ptACmXIapfJ<|FcP#HQF>ltW6z~Ee=Wc&Z^ zICULh>dW%FHt-T|kwtnZ6f{=bDO*6Y_QjE3yRNa?SDpS-%ICa@p{nF}PY>y|os5at z^a#s&v#{`h-_Ocuy~A8WB4BpnfTU{{neHZ*&X&+)ju zp>Aj2oX{&3__XTkHcy|vNqzmhf0O zDz1RS1L}d2$uW7AMp!h$7$WO!Dh;i-gF!0>ARV-*vEU!WS{Bq@(4$8Y%R6IfI+P12 zk+|0*+%QJ%;IO#KQq%A&^&3&F`oa?J#HvnN{~_$?)$O5c?~3G|7#eERTc&Gz!o}q>%5-fAp#xi5V&C#D=a!m2Pmr6l|Ow zvw3SV5~+!9Fp+x(`A3(frW;}lmYGkj*}t<4HTOYufvmz4yCXEcDTXQfq$ieK54jX_ z{hzA*n2KRNZW9dPS9h1>F-Rf71jM&cbtFZ5vRoDX#r+k1{@wE!K3Atvs4PlKjK<1< z^?Io20h=O_L^@@|6^x&@VVnTAu9m=~EeCC-wLZv3mOOo?<_FC={2A<~>$l`BK8XMl zBGqhR@c+;{b>R5_W4EfwU^gsR`z? zBq}Y*^t1Jgi-~zzzPf`=U~~O01{5dPW3hkCYs}E3U7@$GEqo6Po(+@@5447en1r9)6DE8vPAj_` z8l)>ku%Rd%y>)f01A#k|)Z%?b^@K-=0rgx6i%htyiS3o>WOhAyE zmBwZC=0X&=C4h)mHo|bOm0aTyILb8s&TNA&Kh2>%X?@gj{Gxx}f09-yS6mvIL<$?F zXPW&&hF?lqXn{{vL1H~>{MFdFP`61}rw{!!;P5zymYPA-F>LwGl;bZ;53lI`e;|c@ zY`7&1ib_Va?vE6(Q|xzU4QT0x0&Kl=bP8JciCX&$7;CtK9%!ag@BMFU;^wl8WO8kN z8yKnkYO<~ahP=ur5$BG8SZ8%s%c{4(U1&h4ILD7%FzL;o?(QyJIj*jAITHK(I*Z5- z&efD;s26*-(BLPnw4#N$BmWnogLm8CC~KQd z;jrTQLJKK&(6qJFjZXo4VKU`FH53<5wJCz1p~~bFw4#DC6GxUqwPcE1nl=>K5Qw(& zf5-+gOl-6|@|&lnS&R$VMxGhj+iZ$Q&y6>e6MH^~(P#^KX}70^hxIW@LNS0?tVM-_ zS>I%htsxM6eQEwfPI;I&Z)O7j4eCKg0}RZngb!SSKG|u=8=Hqc23rG)MVJ?I&uIlDs=yzq-hdugRiUc3K^f3vFP_>i5?d)QL%N`8fI`DAB zBloMzG?%Z(9#r}T;EBM~XkuW5$GOOwl-=35i33mA*nIG&Nke~(PS5t? zA#OY>bPA1Jb{X@7@Y5<4*2~*{vI~FRDo~HMCia890nH=d>t7OZlRlIRqaGAXthr*x zhhQ5o_7yX2O&TZ!YcHp`cka_G z%gSaB2xse^rWmJR)F4m77N^-ag;j_=8e}Te=;_yj7Z?<|tBwOy+elDdqB{wZ{0;M8 z4usCG9>PbC`9AJb4erqq`B^`(S-YQ9#=ouo?kG@i;fW0fl^L?ZU;&)7z-)KF!&FB%pO2wj(8GbJ$#N0IGtV8z3m$$!3eSJY!@0W0lA*IG@Ysx|ece^tQMgfc2U@5eKmesP6)BkZw)ZT=IJo1ytm$@p_7W9du= zYcq2$A(;*@+#c;cVdOCE3g}p2H_I#sr_M;rcs|kfk(RkYT#?LsZ1=N$gLl3iv1F;T z1h(b+pslbWsB-3BfzG?Hk#*jgANa)mQ-9>tr;n`ETU$69t7gX8xwSMmndTdz23Sf3 z39|hniY6MhLK^}W9u2Uq3C!G7%C0Z$Sy(g;)?`_{T{>&=wQI%-vZ*i0sqA`O;=j26 zj>TlcJGX!EZ*ud+`@Q+K;S^j$MlQ~S6dZKS<2_{D3vIcytW0Y6j8d;zI&m@}cCqlH zTU79KZfxU}@<)pnvh}?kj%Tbm><2rHLS32|HN?RV>w@3A>M>Js$l2-d;oKXp&X3;A zO_mS*Ha+cm=v*|U#1vuBp)Ne(OqV0C%aQ3sRAqN^BGwIW?dnE}>F+o9Xo|~ACRnz67xfS@-U%Vds4}1V=GrdDqFEkj3&VFlnY<|fl<`M$U)o3 zQ-tzQ<;Ab~C&r4wIJ$e3a$ufNg?ve7^xyp&oP&V)$(9wu;hSH)pZ7^k&R+EUg&jXB zj!eA~Oua@kS+IzXx?>X4kTg3=_STEV2FBdJr7?EL`mW9-tw6X2n(Q?t6rPjLPSN5^ zNOVw0MBYUjg8HKN>22P z57&+y)j6Dcj93LR{Dq@=%)=JGygFF_i7i-EJZY}6!D-mgi*&}{MNHM&PgZkgMIgBA z;AE#=6b}zC-GUdtBbvh5oFdHt&*O;ePpEw`_K!Er2Wz9-+pn&Z&US+-sKpfR)cR?C zvt*QHJX<`rV0w?x$19mHqp@Ns9AWUv<$RZ#=`UaCaIVP4*W?ylLFTEtyS2N5OqddI zx6kTKg&3x!D-X#cF7cRz?5qD@ZC?QuWf!hHCLoF^0silVh{VH6L#_pc#z!{ z(uB!p{v=07B3-;NdsfzcdkaiuJpBu!q82tL`xCT=ni`a*q5XAF!{{RH-gQ1EbZULp zGD|gTiNlGHX|49!1l+id)Tpsv8b9gN!5eWUooOinrw}&gw>8z1ah^tvQ!>Qlb$?2p5Kv0Hhwiu{6+Q7@qBHJc>Cv!b?XX}&#~GW+1Usbs)~lj z8avsjWcmk^kW`?G=KeBP5RssaPpsB<*1uj_2;uqJyt+TbLBQU?uiMXW^mB<>+1q4A zFoT1b1!0eIPHy4LtQ8ZvrZzWRl}TChrw2~;KAQ`#rq^iWO6TT6Bj~P>*#?Ypu(CF} z$Hd0ODIYsO5C?E00yc2B_a=GT6`QME1}^l%6G~ii^{qo ztGvUH!k(pvQX%GSbgsf@*Af=mNpx3e<1;WqAnU13TZ2)gv;@Kz?^vo|J+XcaXTW;x zLIKw=J*#K3ov2JZq4#avWAU#XjSrB%ez5JZ++RhBk&)URX1GjmC}7#yLfIjiP7wLc z*R^Z$9G_qr8O_c?Ul6rN z)JyNtYkxnwJ@NZ{a`fevUlJ2Z$@0b#PLQbA1@ICVr;iIM2CH-Ehe}4)nTgi@BJ=Ou2$>_N|haT7uGzK^WOHwQCo z?o{mX@Rlr$4eYcntE>1ihaBW;VMnqYbtW}WpA$&Q@R_-O zX@9Cj9Hi*$8Wb0$hXVUi$rh1oSA+GcUDwJy;ZDa~j6$2mL5E^XcaUywZc4u{PzQf+ zX(oiTqQdd3Vw@DJO+V-3}-+NC1dd?pkw3~Y$C?I|F!>#q^? z8E*d~e8OgMmZft8HaCJ;@{wbYD-W5jh>8q{9$|Ir0NW-;eU_Os^E{|7#n70rm+%Sv z^IdR(@DO6$;aKA>xs8fXLv~Zg&9c4GM>lTs$K^g2q=esp6P^r=Cj>~U?wq@WaN#ee64Qi~rJr7t zR30Vgi{WVN=Erc9w07@WJ!nyKC~0%wvc_8%6e{t`*)@5!kPBSAb!SvTV)xu-f6Z}( z4ely88wm?<(nQD146nnQrZ=V6_Q{$cRu5*=V{%lzae?MrJhzs|J!Y|V_v!Y|T3zuK zDQL)f>M)qn{)#Nlnv!%nf8P^oE4#2Y+>-lj_evl_*OdqJvMo~0>Bo|!HaEw(-2>49 zmHfPh2rndVnUn?p-L=8bR^Xc{RjW&J7TF3OLLH1dGGK%Fu=2Vb)u|!#1;X!ILbUlS zu?GV^>6ErY;VD~6!DY+Q@UeGu;+E5e)%(jwv900X#X=vrjCJQ*zafRDE3RQrF`FxC zRMtnHD%c{~0~EsEl>PL2qS<}lJ;%8rx)Pm1A@*VM)z-uKH#A{Ec_lgguV&Y{^MVUh z3=qVy(k?trPt+Cj-Szj*!A?cd@tReqXy%xlaWo$u&r1u^My~~ZAGWHoI;;`>RAbd) zW|!UJK~J+>8L6KyjEAN+i(HEHcs*PtQeK9-c*~1s2sDbeYT2iGkxdNM(TntU+X{0H z$Kjs0dd(qNgT<>%p4|18B0e3Gl|TK#cw9KeIqC@SR2OwJOVRcbG2s@Cax7LLEZ8wy ziz8O1U-syrrT~H{c<@UJc$$ij&_ZQaRg=aKxxmgE--r3Qa zi=uGziz?xNm_B?K0}4g+sfxGaPH@MP&m#I{XG-suM3$)7; zyj$=_v@(409S@w!~cN#RFaRkl2ycKI-#{8fvcO3leoX1;BF$I zsTW;Q{u;C~TVm-yO9CEI-y&PVu9nJybjWNgtdu;(Afm+L8)ittv9wsuHxIlr!mlfY z=HRMMeV@uBS}82!tM3(_AWVBxWAl+W(Ya43?@m)qQipzu!AcGBF{X6hn#@KG$BEcsISG`AnNN}?TpweXov`%~_wxd7GW+_B z@#H3KP&${)nCoNH=C2XV-9b{j2d3A3+GU+Q#L=Qn{_=88$oIuJh7BU-_5=-I@IJga zx-z=H()jKsBc`ZF`;`RD@75og@jw=K2`C%X{=&DkbjXLDt0a-0bzZ z?uMQ0^plC`cOD}IFFg19y;v{Va`kHG7JsUurTOIXV;e1ef7-}@qs{L?zr^(83a!vo zEe{rzB_(@0R98pVeygfX0qt09w!6N5m-Bd4s)8R+hIIU}O^)1i&4O%f7gE9`8b%sP zUl&FEqJE~9_0-JlxrtgoUr1J%1g-5>lr#0YLZzTaR;7Y!!n_-|Ny8GoYXd)!Bqzh8 ztk0K@A0-Rs#$l>=y@x+e2o&QuXAb&mR=TXj&2`5R+z&ouW>r?Ib5zr8bWbxIf-p}On6c?AxH8Vnk223P^!2^ z)O2RWvZ#}b=)g0O-doBm9yUkGF5AkVn=bk1LrPrY5Yv?pQH&-hAkqda4L;<(2$u-d zWaCuXch?a4{Gv24>T~Lm0VB6ODDZ!sPyGpgROC{ok;zf8@2VlH${!flC~z%K?sl7! zV&E@>85Aun4*^Ms%e19hL=BI<9eo3Sx*5Y!dZRD$>Qj>f>HR-4KBUx9ZQ{l|3PW7@ z^G>6LIsA$S(K4-9A~X$#VX&-F2I+c(6fIf**T+;r!A69o@V*>yC>ii*R3c1P8-64c zr}RqsITAi}>q_kfB}@7sIgQ+377<_tEs$XfQfbzPwqQRQbJUjiTdnjtZO>JlbQcxo zsAX5A!18Loe1=D=Hm5ScU<3DRG}t)!QjO!Y=~|2Y^U{A1W4Y#IwA{)s+eq+<0%Q*x zn6?Tj{H~I#Nd83zMX1?zhUokcQjJY{!1N{HAO?o2ub{_E|E9chW{i86a3W$hLQYZE_CNi&lU!I{8ted_WG~KZ+J-@QkV7Ii9XyvF0TkarVTNLjca^@kZa5l^ zOS}E{3p>xfd!on4zF~J)cXu~83l$5$a7hpjhXjhWa+n;5cR0u0+$!m2bPHwr59a_e%EEDLtZhT=As{6Hzcx~3J-^K=l)GDq7@u#Wzuo}R@x`9la zLL&PTLpLLu93R08+_p^QPtP=do?|hQ%MaD$j=; z^$y|r)8!OULA??x3;`AN$NQ^+hR;Gdv|qL7mxczsM@xQZ2CbB^@hw z{zP2iw0z(9y>3-|*T{-_Y^-KD!!@d-Fws4d)e)|vlVxY?l!y>opj$z6urPUP!qa=P z>>>eyo2zTQXq;Le4_j7jKtP(#+>aj)PD^_p9v-SkTcCYEp|&PTs&|#Y%??8nOp4sV zSL5^>ttMN8rh1VG#Bpm72ya)PHB5@G1KQqDl#M>I8&dSv*aISRhD=qws)QSpJ{O{7 zj4z$F&1!V;0rEZS^!U&B8>nj0eO>tP9#n8NnvN|F-*nXAADqZz7f$+Bd*Jg2;Zu)+ z#GDmq<@@)`CF9g-Dr~|oYb<9C>>oFp3Jvl<%UaBBGWLNM|6n6!=5hq-L`3#Bz}N$U zxOA@yeqA9K4$7?1(9k{$&XT6Wr^kS3D1L79{ak-Uh}NW z7C4QNz<)>Q3TIW4PvL4@)L*NtLC{vTHIgtvjpoiR$7}E)3dOdT9je>6N$;#IZ2hbi zN4_^~Q1&HNuVS>tXbt3!-1A+a?hynY83}403?~b*yrwOeYK)h63u_x37a4qA4|9nQ zX7|V%LLJw76$!fvB~{AWt<|y_q`?hYy&8S%!;DJcitBD{H3=d`Hd*$b)t|f;%yW%a zeEIT?C-dQP8SeyISeeVp$s-7KbYjYfY<*FwznIq>)$3yP$VP}&$=lgfl1BfOv|3B?ykv(K_83}j92hdrpXBB& z%MvbkAxCbPro@qcO-kaKnU;i0yn6MC^sA%_FI?iq3#`2y+wD0sHP z{76A3rJ|xt2u;_)ZX#1Yb0xTscU6tvr1x0g#O+SvSB98<_aN&HoFUrHZiScoWOF&3 zQ@bRljlu{7MV}cKL^v?PYilL_BsGVI+R2urnO$>V zRCt;x^}Qi_U)QNJJK~yCllmX5o2-u!hOf=R?b0I<6aBfi2v3IU(fa8JDN>wAKq8)Z z9Gp?R8cA}ZzlA8#%AL{o_8tnCl%+iVF}d6^{&`&nR7I7&1(m@{-31E^YIDVUpW8q= zvQDu?s*+?$wXQtCmasRnsviE6tE+u{X+@A%LX}lZ@#?072u6#p%xGF$`6gMYUw}aQ z@h*irTUnO0Z4C{nf;!`yyrbi`9vW@>_o*}6h6QD#H5Ug{9~c{RzFtXlX1?s zTKupWR3rD8wja+UCe)WkxmR_(zjmd{e)J{fHEFwcji`9YN*2<8V!4Z`#T|LzGa%-M zKeUfsN37*+EQcMzSO^snnl8-u8mr)L?-)=|T>f6vF*rCjRFPg1imyHXt8(68^ z^MAi=4o{cWN=o?V>mR1KnN*~x>mTxJ=MQAZ(BJ<>FzSM`w{He|Ss$MnmZboA0Mh5p zx*4YN#_Y{<`Y?zTc@Y@k@gHA?O`6PnNN5i8+TX7kmMEb>=ICt=MCmQQ=G;E$9UR1X z;nv6~C@3gh?$OT}9Qa+0lA*dyN_z9=XtDJVhHt>~EgTSLu%z=wgj`>H7KNP6a8t>F zx>dVv(#qN9k+YFxi{9_oEksd1)b{$C*#coX)2jm5zD zCx~JvASNQ&+}ToPiwtKdv)6$M5XH5b6liR2Za(BPDHjImc^2#g#)LPffAd%yPf-(~y*2gtZ-O* zUwnOQtF5EMp;ip`GRBr??{L5D>q;@MPEWCRQ``P}IMS(5qFNz#)Ag6lA zAk9SPaUE6~*<>_bU=D++oWq^L^#2Sb0+iu!Gdmaoi zpC05~k+QtSjH;nXIE#o|M16K*J%9OqDx6YzL;`AB zLcF2Hfod0g;IV^wcUNifvLT(9QCO8uN|)#Qc`ynQk_RkzVmvu9CVyS{%E8Yelv+dgaV zFmcMll(yBI837bEV>MHrg_0xhh`74;E)+;gN*c%M@0x)r_sQ|BPYO{Wcg^NArS1(B zVm}EWoIGmlP~mbfen`*0IS|aV!0j#p0Jf@ZlikLE_ulqd_8%XND7i=xzFOcs+KDS$DceM2gw{DT+P>Lbi z`yp_-9bkR|03T3&wip+&U+F>F3|C^N&CpcBOstE0vNOzt@cv^=a#B*~#02We4^v$A zki(O({NWN?-H8J6L-BwaKT>nkj;j6sTV>uwjg5-*{<(X+P_fdv$i@B6-Q490=f(K2 zFqPW<^O#;reJ+LUzUzpiH<>?F;H-DO|2E5OWA405!zI|yYkBp?gh4SJ+Lf~|`wpMF zT!)0fz~1dR-QNwMOr#t5VLk(%q4j7f%#Y{_Uh6LK6l-d3eV|enoibl zEgo_Avh8$A5fH=sZ3iWQ1@Rl=-qNd6qx)NjyL7LsPbyLK`I>ljT%xFulhtYK;DghB zo2gb!oa!qb>2NT6mEAPeV$D-%vnbLl)=74Ra#obsZtXrzxIQT(dO_fu8@d(sLZ)!& z_ZJLQb~f?ZT;a2!L#BdV)9zXyJ+}aE0uAv^2c|=M+aoFBm!oo%!q|jr3#EYm6u4l% z0*f!HOlqNW0|`-}^k(wc`-W!EzaN!JN4zf-1@#sf+kyHMr)gjH%h%n%Pk$aMh60Nr zn*sgzyw(&%rG7I+j`>K!KG%ZWZ9NjWQwnonijAc^)w%`m#R6ks2$L6hiu!oognL#k&+H;xi}HNUAMCNyfKfvrH~j9 ze&ZPxcn1QTwR%E|4CnwREd=TRd@GMV)BMNH^vvL1bM+T?!~VO z$MFS4;(1i=yoq3Yq7SCApH!H`Xa{NOri?DbV99#?e5>nn+raK>sK->Q`l^(^+p1h{ zXh#j=n1zRDvb%UL#AdK`-!De5;&?au^kDBen)9ok>muKw(=H?&kxnP#xVJN)cNf1M z;V^O7XvIGwJXC7l;=uhe^rO{5QzhQ8+|k=(^T!Sizv`W>P{e6gm)SU4IK?nv*A|ty zi*42@t9%EGR{^Fe;NIH9{vC^_mipz9Ek*2S$DHuDW1n4DA56+b9W*fivl-?C-qMg5 zr$PnxFL9xx|1Ug-1zvtmi}|a$tV;kmA56vfAN5HRu4d9mnN-Wm=V4T*D`0Kn18<0k zit6x^!WzN%FFsRyQ7n zK`Y}4+q3%b_}LFvlS@m#eZQxkso?AHZ|3Ex!ge?5Vv-h1lnfmmy0ep18ct3z3&dk9 zgaP;g>z+;yc7ER7?I7~DLzG2+xzn<%nTU!-_(j+NddP~4m6esFwIq_l!+jZKqK*Qc zeHbQ`J+JrLrAy=Ewc$#Je3UesAFgrTzWK9F4$9mlMZRKTdF^uV3{!9oXL`cv#Zxx= zU6(l2nk+D7CJHbCnxHR-aRHxd5fkAisgw$q|!o4}Sp4_$HotvOmVUq@k1nhQ+;e|yGfMeYGAeE~IctJpR z1V2krVoR_!D~2?HEkj_F3MiS-(sHkw250}dbKj5eV~&bXXJ=SzPL4%TI=@?SgQWDU zLwwrg7eRynBdK+yWe~>DG@y>n?vw7uIMQ43zv7w2&eP;&QcfNaT_t>us+nA40kcX? z9AJ60OFj#ooIp_C$Ew}D157IoXvGd;v!*4PC-$14L*Lcfjt+da2d-=Jhn*b(el4it zHC#OW+vH>txUWRf3Mr`)EsRAlSa7bK%jnDcS?<(lfl*uLb?p>aRBVfTWX|FHTw3r` zSXilR6AqMp%R4hl{~8z==;`5QXO3wCwBwsEbxx22ApqpA7Ofc+ii$F+_XX#Eha!#( zjTY%t7t*i%1u_57T@}t&n|M5~J6By^evQvLZruji8=0|uYsQJ@QIgFV+=s3^J#n<$ zI-tvp!=<;SB^#8`0pIe&xdF!g{rxCvt?+N1VJ|T9gchgY3V%!>-Qd z``EpGYva-lN?58 ze<0S9s*LLDIq3rs{dv~g<6d_1yE$EEj#{~D*$I2~mgEDT$2%LSk9RG3R1AFH=F3}h zaPh}x;oTI#eZTe(nkPMf;k+;Dj!l{5N%?w%ByGiZsmss0-7BF_9xmkbv4@A;9W1l1 z>t&7b^sEH-srFFi6TxcB7ucwl7>0VBezB3_O#KbiN9tl`!?VGrZv-*%pV&DldQUd|(G+Hb0FN6jeNqfMdSNabg{UZ- zyZe@{%SHJz+!5oPVpmVf?DkJcZ*yT_YPZAQt;M|_mMf@WYGWsx${YKaoTKA($xI0U zib(YQY8BXIB=jY0u+ohe>(OuS#UQ;jfXjRHrks2LaM24RC8*S2(G1edGs>Av;8A2S zfwjSTbr|gK!NPc|Rb;RjO5W^#0epY};E4 z+pz7ipJLGZS{62A2fK9Dhf71IiQUU6i$`C)y>RY3QIyU7@w^^dCMMuw;+GNI^ECNF zWFtUh6_CTgzu`rUJWf8AfszC|>asILZ*Ob}x~v_6KeIU%%J{AC6vwxAt7Jv#o~pUU zg)H*Z_CRAJZ23ype0+RFL`2#X<=EA4llQgOrFim~n`4)HH}Jc=_Js}@8BX8#A1u~h z7&B)dL#I)$MrRSAtk9r`z5>j0LtxaAeg!1ujXFAQKz!72YZ}$OLMJ3_bycFIKDt{h z%%EN*0`F=&Q(U5P9JDvZ9D1GZc)BH@2oBj0UGp+pXasCZc@+{D{HDW?7aS4cyWp+rC0c$7QuS zHZ%%VGGqk=nrXhtq=uoBmd+X*m8v%37}^IG_Ka8^N6qNiC_anr!T0aig*|pki(EQF zXh%wH`t0i~BGAYQvkeayw+F)-331F}6OG@2#T6Jrs^OGz5HxRj-%Xjz6BAxDC z>gs*DS#~SW7LSOS&Bu>H ziC9m61qBTjX(chSu^>v`d@Vs17KLyItiJwBHqIR-Hf1Gw$Cb{LtSIn<4yHZzSiSg6 zNg>N8NR3KV*rv6CuFZP<2<^hnax0wl{waj(@!Cs1^dlu>s^02q*m5Xz$TLm?^daU{ zPeI|c-G)KmfuO^D4(V6R7nE=b2ydgyHZrPgT~#4D-qhM+6_xi!%e*SPY-$Mo>uZ{X zq+B31-f(b?bCZuPJEEz`7nG3B6i3;Eu*Mw^AMt-T4993D>>q2!^3ovC1I-4-!G zz%O-H>&7kgBi|dhsB3UURUdO}14keB8GTnkK?}L84gQce#L_fp2j=kKK+p5NGC#JT zL%#2Q(dL5|D6<+_le=;&Tu#q`!FSLNX;~m6`i0^sYN2=e{J+tG(hVUoqIQ4|%uAC= z{b1vD*yRgJU^}wEX8_q=-2#KYpXcxv7;-twTeoiIXcRQ>C(bnz2gN6}f#)rTu~+n8 zult3*=Kl_ibITijI>})-Z$@|@ZN%tPaz}-Rc+CHawvhggJ}3XO`Es#tM|6E{3>G7v%{oF zu;XPIgZbL%^>h?k>1i9-{${KMnLBK4Wq*$ZMwqa^r&la*Yi3>sk^9~B$bOcCSywnD zfv&zV>(x5Ia{qp%TTx?;%W8XjI}x$vcjFmqxI{y{Xmg^+uL>e^odflVY!d1lH=ayZ zdxS?Q^IMNQFIG$e+z(c!u5Z%6aV=_*9$Z9(ou19m~ zGghiE^-md@xzucmYB6SaRKmmUq8ctPg27i{c{o1C%)!CIwI=qg{?9fs60T^WrEgu$)gvL&uXTo3@e~WVnHR!haKSl=1HX@eV+SsDNgP{D50wKKUG1B}wi9@mWKoDo2QF?8J%aQT+U5tJ zDe>{gHFERJ&dupVvS&pWrE50vs?YK$zp)>?HV)CU4r7R_`$Qu;A7^~CRq-BRy2O3j zKl%0Pssu3{_nd@?EE}s67h*GO)XngR8-_IthS%VI69jI{V{qN`+~{P zPMQ_Rgv5*ZYw;ysPVuPgFqJE3!}lTB z5|Ey41qaI(f&p^~wp^F~<1XQU66iiV&wsdH{GJPV({zJ5J8Eu(Sa4Dn~& zU`v2U-ipz%R9n=900GlTC^EA2%-Yz(H)}%)$wBv2uY|bzbdR%U|=_oSvm6{Fkf%i~k?{zY}74dKoXHJv-O4YfDSYOXMM6 GzWZN1ptwr_ diff --git a/frontend/src/lib/components/Cards/TextCard/TextCard.stories.tsx b/frontend/src/lib/components/Cards/TextCard/TextCard.stories.tsx index 426f978577e43..ec3dd435687aa 100644 --- a/frontend/src/lib/components/Cards/TextCard/TextCard.stories.tsx +++ b/frontend/src/lib/components/Cards/TextCard/TextCard.stories.tsx @@ -27,8 +27,6 @@ const makeTextTile = (body: string, color: InsightColor | null = null): Dashboar layouts: {}, color, - last_refresh: null, - next_allowed_client_refresh: null, } } diff --git a/frontend/src/models/dashboardsModel.tsx b/frontend/src/models/dashboardsModel.tsx index 96155776d941a..cf6b9b92c472c 100644 --- a/frontend/src/models/dashboardsModel.tsx +++ b/frontend/src/models/dashboardsModel.tsx @@ -31,26 +31,10 @@ export const dashboardsModel = kea([ // can provide extra dashboard ids if not all listeners will choose to respond to this action // not providing a dashboard id is a signal that only listeners in the item.dashboards array should respond // specifying `number` not `Pick because kea typegen couldn't figure out the import in `savedInsightsLogic` - // if an update is made against an insight it will hold last_refresh, color, and filters_hash in dashboard context - updateDashboardInsight: ( - insight: InsightModel, - extraDashboardIds?: number[], - updateTileOnDashboards?: [number] - ) => ({ + // if an update is made against an insight it will hold color in dashboard context + updateDashboardInsight: (insight: InsightModel, extraDashboardIds?: number[]) => ({ insight, extraDashboardIds, - updateTileOnDashboards, - }), - // a side effect on this action exists in dashboardLogic so that individual refresh statuses can be bubbled up - // to dashboard items in dashboards - updateDashboardRefreshStatus: ( - shortId: string | undefined | null, - refreshing: boolean | null, - last_refresh: string | null - ) => ({ - shortId, - refreshing, - last_refresh, }), pinDashboard: (id: number, source: DashboardEventSource) => ({ id, source }), unpinDashboard: (id: number, source: DashboardEventSource) => ({ id, source }), diff --git a/frontend/src/scenes/dashboard/dashboardLogic.test.ts b/frontend/src/scenes/dashboard/dashboardLogic.test.ts index d8c37d8f7b205..4533c1b69dbcf 100644 --- a/frontend/src/scenes/dashboard/dashboardLogic.test.ts +++ b/frontend/src/scenes/dashboard/dashboardLogic.test.ts @@ -40,7 +40,12 @@ export function insightOnDashboard( if (!tile.insight) { throw new Error('tile has no insight') } - return { ...tile.insight, dashboards: dashboardsRelation, filters: { ...tile.insight.filters, ...insight.filters } } + return { + ...tile.insight, + dashboards: dashboardsRelation, + dashboard_tiles: dashboardsRelation.map((dashboardId) => ({ id: insight.id!, dashboard_id: dashboardId })), + filters: { ...tile.insight.filters, ...insight.filters }, + } } const TEXT_TILE: DashboardTile = { @@ -48,7 +53,6 @@ const TEXT_TILE: DashboardTile = { text: { body: 'I AM A TEXT', last_modified_at: '2021-01-01T00:00:00Z' }, layouts: {}, color: InsightColor.Blue, - last_refresh: '2021-01-01T00:00:00Z', } let tileId = 0 @@ -57,7 +61,6 @@ export const tileFromInsight = (insight: InsightModel, id: number = tileId++): D layouts: {}, color: null, insight: insight, - last_refresh: insight.last_refresh, }) export const dashboardResult = ( @@ -590,22 +593,17 @@ describe('dashboardLogic', () => { it('can respond to external update of an insight on the dashboard', async () => { const copiedInsight = insight800() - dashboardsModel.actions.updateDashboardInsight( - { - ...copiedInsight, - filters: { ...copiedInsight.filters, date_from: '-1d', interval: 'hour' }, - last_refresh: '2012-04-01T00:00:00Z', - }, - [], - [9] - ) + dashboardsModel.actions.updateDashboardInsight({ + ...copiedInsight, + filters: { ...copiedInsight.filters, date_from: '-1d', interval: 'hour' }, + last_refresh: '2012-04-01T00:00:00Z', + }) await expectLogic(logic).toFinishAllListeners() expect(logic.values.dashboard?.tiles).toHaveLength(2) expect(logic.values.insightTiles[0].insight!.filters.date_from).toEqual('-1d') expect(logic.values.insightTiles[0].insight!.filters.interval).toEqual('hour') expect(logic.values.textTiles[0].text!.body).toEqual('I AM A TEXT') - expect(logic.values.insightTiles[0].last_refresh).toEqual('2012-04-01T00:00:00Z') }) it('can respond to external insight rename', async () => { diff --git a/frontend/src/scenes/dashboard/dashboardLogic.tsx b/frontend/src/scenes/dashboard/dashboardLogic.tsx index bb6e815dc0a8c..3ef98a5315506 100644 --- a/frontend/src/scenes/dashboard/dashboardLogic.tsx +++ b/frontend/src/scenes/dashboard/dashboardLogic.tsx @@ -409,11 +409,10 @@ export const dashboardLogic = kea([ } return state }, - [dashboardsModel.actionTypes.updateDashboardInsight]: ( - state, - { insight, extraDashboardIds, updateTileOnDashboards } - ) => { - const targetDashboards = (insight.dashboards || []).concat(extraDashboardIds || []) + [dashboardsModel.actionTypes.updateDashboardInsight]: (state, { insight, extraDashboardIds }) => { + const targetDashboards = (insight.dashboard_tiles || []) + .map((tile) => tile.dashboard_id) + .concat(extraDashboardIds || []) if (!targetDashboards.includes(props.id)) { // this update is not for this dashboard return state @@ -427,11 +426,10 @@ export const dashboardLogic = kea([ const newTiles = state.tiles.slice() if (tileIndex >= 0) { - if (insight.dashboards?.includes(props.id) && updateTileOnDashboards?.includes(props.id)) { + if (insight.dashboards?.includes(props.id)) { newTiles[tileIndex] = { ...newTiles[tileIndex], insight: insight, - last_refresh: insight.last_refresh, } } else if (!insight.dashboards?.includes(props.id)) { newTiles.splice(tileIndex, 1) @@ -452,27 +450,6 @@ export const dashboardLogic = kea([ [dashboardsModel.actionTypes.updateDashboardSuccess]: (state, { dashboard }) => { return state && dashboard && state.id === dashboard.id ? dashboard : state }, - [dashboardsModel.actionTypes.updateDashboardRefreshStatus]: ( - state, - { shortId, refreshing, last_refresh } - ) => { - // If not a dashboard item, don't do anything. - if (!shortId) { - return state - } - return { - ...state, - items: state?.tiles.map((t) => - !t.insight || t.insight.short_id === shortId - ? { - ...t, - ...(refreshing != null ? { refreshing } : {}), - ...(last_refresh != null ? { last_refresh } : {}), - } - : t - ), - } as DashboardType - }, [insightsModel.actionTypes.renameInsightSuccess]: (state, { item }): DashboardType | null => { const tileIndex = state?.tiles.findIndex((t) => !!t.insight && t.insight.short_id === item.short_id) const tiles = state?.tiles.slice(0) @@ -686,7 +663,9 @@ export const dashboardLogic = kea([ return [] } - const validDates = insightTiles.map((i) => dayjs(i.last_refresh)).filter((date) => date.isValid()) + const validDates = insightTiles + .map((i) => dayjs(i.insight?.last_refresh)) + .filter((date) => date.isValid()) return sortDayJsDates(validDates) }, ], @@ -701,16 +680,6 @@ export const dashboardLogic = kea([ return sortedDates[sortedDates.length - 1] }, ], - oldestRefreshed: [ - (s) => [s.sortedDates], - (sortedDates): Dayjs | null => { - if (!sortedDates.length) { - return null - } - - return sortedDates[0] - }, - ], sortedClientRefreshAllowed: [ (s) => [s.insightTiles], (insightTiles): Dayjs[] => { @@ -914,7 +883,9 @@ export const dashboardLogic = kea([ } }, [dashboardsModel.actionTypes.updateDashboardInsight]: ({ insight, extraDashboardIds }) => { - const targetDashboards = (insight.dashboards || []).concat(extraDashboardIds || []) + const targetDashboards = (insight.dashboard_tiles || []) + .map((tile) => tile.dashboard_id) + .concat(extraDashboardIds || []) if (!targetDashboards.includes(props.id)) { // this update is not for this dashboard return @@ -1000,7 +971,7 @@ export const dashboardLogic = kea([ uuid(), 'force_async' ) - dashboardsModel.actions.updateDashboardInsight(refreshedInsight, [], props.id ? [props.id] : undefined) + dashboardsModel.actions.updateDashboardInsight(refreshedInsight) // Start polling for results tile.insight = refreshedInsight actions.refreshAllDashboardItems({ tiles: [tile], action: 'refresh' }) @@ -1063,11 +1034,7 @@ export const dashboardLogic = kea([ 'async', methodOptions ) - dashboardsModel.actions.updateDashboardInsight( - polledInsight, - [], - props.id ? [props.id] : undefined - ) + dashboardsModel.actions.updateDashboardInsight(polledInsight) actions.setRefreshStatus(insight.short_id) } } catch (e: any) { @@ -1165,7 +1132,7 @@ export const dashboardLogic = kea([ const dashboard = values.dashboard const { action, dashboardQueryId, startTime, responseBytes } = values.dashboardLoadTimerData - const lastRefresh = sortDates(dashboard.tiles.map((tile) => tile.last_refresh)) + const lastRefresh = sortDates(dashboard.tiles.map((tile) => tile.insight?.last_refresh || null)) const initialLoad = action === 'initial_load' const allLoaded = false // TODO: Check this diff --git a/frontend/src/types.ts b/frontend/src/types.ts index 48b61d2556218..620ea900d7b25 100644 --- a/frontend/src/types.ts +++ b/frontend/src/types.ts @@ -1658,7 +1658,7 @@ export interface Tileable { color: InsightColor | null } -export interface DashboardTile extends Tileable, Cacheable { +export interface DashboardTile extends Tileable { id: number insight?: InsightModel text?: TextModel From e41dafccf08eb4373c800dbe8ba8b8d0b135d08f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Oberm=C3=BCller?= Date: Fri, 26 Jul 2024 11:56:02 +0200 Subject: [PATCH 10/24] refactor(insights): use query based insight for adding to/removing from dashboard (#24001) --- .../addToDashboardModalLogic.ts | 11 ++--- .../src/scenes/insights/insightLogic.test.ts | 42 ++----------------- frontend/src/scenes/insights/insightLogic.ts | 40 +++++------------- 3 files changed, 21 insertions(+), 72 deletions(-) diff --git a/frontend/src/lib/components/AddToDashboard/addToDashboardModalLogic.ts b/frontend/src/lib/components/AddToDashboard/addToDashboardModalLogic.ts index 73c95b095ff80..1291b68844af2 100644 --- a/frontend/src/lib/components/AddToDashboard/addToDashboardModalLogic.ts +++ b/frontend/src/lib/components/AddToDashboard/addToDashboardModalLogic.ts @@ -21,7 +21,7 @@ export const addToDashboardModalLogic = kea([ key(keyForInsightLogicProps('new')), path((key) => ['lib', 'components', 'AddToDashboard', 'saveToDashboardModalLogic', key]), connect((props: InsightLogicProps) => ({ - values: [insightLogic(props), ['queryBasedInsight', 'legacyInsight']], + values: [insightLogic(props), ['queryBasedInsight']], actions: [ insightLogic(props), ['updateInsight', 'updateInsightSuccess', 'updateInsightFailure'], @@ -101,7 +101,9 @@ export const addToDashboardModalLogic = kea([ // TODO be able to update not by patching `dashboards` against insight // either patch dashboard_tiles on the insight or add a dashboard_tiles API actions.updateInsight( - { ...values.legacyInsight, dashboards: [...(values.legacyInsight.dashboards || []), dashboardId] }, + { + dashboards: [...(values.queryBasedInsight.dashboards || []), dashboardId], + }, () => { actions.reportSavedInsightToDashboard() dashboardsModel.actions.tileAddedToDashboard(dashboardId) @@ -117,9 +119,8 @@ export const addToDashboardModalLogic = kea([ removeFromDashboard: async ({ dashboardId }): Promise => { actions.updateInsight( { - ...values.legacyInsight, - dashboards: (values.legacyInsight.dashboards || []).filter((d) => d !== dashboardId), - dashboard_tiles: (values.legacyInsight.dashboard_tiles || []).filter( + dashboards: (values.queryBasedInsight.dashboards || []).filter((d) => d !== dashboardId), + dashboard_tiles: (values.queryBasedInsight.dashboard_tiles || []).filter( (dt) => dt.dashboard_id !== dashboardId ), }, diff --git a/frontend/src/scenes/insights/insightLogic.test.ts b/frontend/src/scenes/insights/insightLogic.test.ts index c94ea390e505f..1c8595b2d264c 100644 --- a/frontend/src/scenes/insights/insightLogic.test.ts +++ b/frontend/src/scenes/insights/insightLogic.test.ts @@ -9,7 +9,6 @@ import { savedInsightsLogic } from 'scenes/saved-insights/savedInsightsLogic' import { teamLogic } from 'scenes/teamLogic' import { urls } from 'scenes/urls' -import { resumeKeaLoadersErrors, silenceKeaLoadersErrors } from '~/initKea' import { useMocks } from '~/mocks/jest' import { dashboardsModel } from '~/models/dashboardsModel' import { insightsModel } from '~/models/insightsModel' @@ -528,7 +527,7 @@ describe('insightLogic', () => { logic.actions.saveInsight() await expectLogic(logic).toDispatchActions([savedInsightsLogic.actionTypes.addInsight]) - logic.actions.updateInsight({ filters: { insight: InsightType.FUNNELS } }) + logic.actions.updateInsight({ name: 'my new name' }) await expectLogic(logic).toDispatchActions([savedInsightsLogic.actionTypes.setInsight]) }) @@ -552,6 +551,9 @@ describe('insightLogic', () => { savedInsightsLogic.mount() logic = insightLogic({ dashboardItemId: Insight43, + cachedInsight: { + id: 3, + }, }) logic.mount() @@ -591,42 +593,6 @@ describe('insightLogic', () => { }) }) - describe('emptyFilters', () => { - let theEmptyFiltersLogic: ReturnType - beforeEach(() => { - const insight = { - result: ['result from api'], - } - theEmptyFiltersLogic = insightLogic({ - dashboardItemId: undefined, - cachedInsight: insight, - }) - theEmptyFiltersLogic.mount() - silenceKeaLoadersErrors() - }) - afterEach(resumeKeaLoadersErrors) - - it('does not call the api on update when empty filters and no query', async () => { - await expectLogic(theEmptyFiltersLogic, () => { - theEmptyFiltersLogic.actions.updateInsight({ - name: 'name', - filters: {}, - query: undefined, - }) - }).toNotHaveDispatchedActions(['updateInsightSuccess']) - }) - - it('does call the api on update when empty filters but query is present', async () => { - await expectLogic(theEmptyFiltersLogic, () => { - theEmptyFiltersLogic.actions.updateInsight({ - name: 'name', - filters: {}, - query: { kind: NodeKind.DataTableNode } as DataTableNode, - }) - }).toDispatchActions(['updateInsightSuccess']) - }) - }) - describe('reacts to external changes', () => { beforeEach(async () => { logic = insightLogic({ diff --git a/frontend/src/scenes/insights/insightLogic.ts b/frontend/src/scenes/insights/insightLogic.ts index 036b501f42f91..457e10f261c3c 100644 --- a/frontend/src/scenes/insights/insightLogic.ts +++ b/frontend/src/scenes/insights/insightLogic.ts @@ -39,16 +39,10 @@ import { import { teamLogic } from '../teamLogic' import type { insightLogicType } from './insightLogicType' import { getInsightId } from './utils' +import { insightsApi } from './utils/api' export const UNSAVED_INSIGHT_MIN_REFRESH_INTERVAL_MINUTES = 3 -function emptyFilters(filters: Partial | undefined): boolean { - return ( - !filters || - (Object.keys(filters).length < 2 && JSON.stringify(cleanFilters(filters)) === JSON.stringify(cleanFilters({}))) - ) -} - export const createEmptyInsight = ( insightId: InsightShortId | `new-${string}` | 'new', filterTestAccounts: boolean @@ -102,8 +96,8 @@ export const insightLogic = kea([ loadInsight: (shortId: InsightShortId) => ({ shortId, }), - updateInsight: (insight: Partial, callback?: (insight: Partial) => void) => ({ - insight, + updateInsight: (insightUpdate: Partial, callback?: () => void) => ({ + insightUpdate, callback, }), setInsightMetadata: (metadata: Partial) => ({ metadata }), @@ -126,35 +120,23 @@ export const insightLogic = kea([ } throw new Error(`Insight "${shortId}" not found`) }, - updateInsight: async ({ insight, callback }, breakpoint) => { - if (!Object.entries(insight).length) { + updateInsight: async ({ insightUpdate, callback }, breakpoint) => { + if (!Object.entries(insightUpdate).length) { return values.legacyInsight } - if ('filters' in insight && !insight.query && emptyFilters(insight.filters)) { - const error = new Error('Will not override empty filters in updateInsight.') - captureException(error, { - extra: { - filters: JSON.stringify(insight.filters), - insight: JSON.stringify(insight), - valuesInsight: JSON.stringify(values.legacyInsight), - }, - }) - throw error - } - - const response = await api.update( - `api/projects/${teamLogic.values.currentTeamId}/insights/${values.legacyInsight.id}`, - insight - ) + const response = await insightsApi.update(values.queryBasedInsight.id, insightUpdate, { + writeAsQuery: values.queryBasedInsightSaving, + readAsQuery: false, + }) breakpoint() const updatedInsight: InsightModel = { ...response, result: response.result || values.legacyInsight.result, } - callback?.(updatedInsight) + callback?.() - const removedDashboards = (values.legacyInsight.dashboards || []).filter( + const removedDashboards = (values.queryBasedInsight.dashboards || []).filter( (d) => !updatedInsight.dashboards?.includes(d) ) dashboardsModel.actions.updateDashboardInsight(updatedInsight, removedDashboards) From 645614b6f82d73d53576cd910f559f5488c62bb3 Mon Sep 17 00:00:00 2001 From: Georgiy Tarasov Date: Fri, 26 Jul 2024 11:58:14 +0200 Subject: [PATCH 11/24] revert(insights): "revert(insights): flatten multiple breakdowns when navigating from trends to funnels (#23981)" (#24015) --- .../InsightNav/insightNavLogic.test.ts | 140 +++++++++++++++++- .../insights/InsightNav/insightNavLogic.tsx | 22 +++ 2 files changed, 161 insertions(+), 1 deletion(-) diff --git a/frontend/src/scenes/insights/InsightNav/insightNavLogic.test.ts b/frontend/src/scenes/insights/InsightNav/insightNavLogic.test.ts index 04203684479ba..cefd6499bf052 100644 --- a/frontend/src/scenes/insights/InsightNav/insightNavLogic.test.ts +++ b/frontend/src/scenes/insights/InsightNav/insightNavLogic.test.ts @@ -5,7 +5,7 @@ import { insightNavLogic } from 'scenes/insights/InsightNav/insightNavLogic' import { useMocks } from '~/mocks/jest' import { nodeKindToDefaultQuery } from '~/queries/nodes/InsightQuery/defaults' -import { InsightVizNode, Node, NodeKind, TrendsQuery } from '~/queries/schema' +import { FunnelsQuery, InsightVizNode, Node, NodeKind, TrendsQuery } from '~/queries/schema' import { initKeaTests } from '~/test/init' import { FunnelVizType, InsightLogicProps, InsightShortId, InsightType, StepOrderValue } from '~/types' @@ -286,6 +286,144 @@ describe('insightNavLogic', () => { } as Node), ]) }) + + it('gets rid of multiple breakdowns when switching from trends to funnels', async () => { + trendsQuery.source = { + ...trendsQuery.source, + breakdownFilter: { + breakdowns: [ + { property: 'num', type: 'person', histogram_bin_count: 10 }, + { property: '$device_type', type: 'event' }, + ], + }, + } as TrendsQuery + + await expectLogic(logic, () => { + builtInsightDataLogic.actions.setQuery(trendsQuery) + }) + + await expectLogic(builtInsightDataLogic, () => { + logic.actions.setActiveView(InsightType.FUNNELS) + }).toDispatchActions([ + builtInsightDataLogic.actionCreators.setQuery({ + kind: 'InsightVizNode', + source: { + kind: 'FunnelsQuery', + series: [{ kind: 'EventsNode', name: '$pageview', event: '$pageview' }], + funnelsFilter: { funnelVizType: 'steps' }, + filterTestAccounts: true, + interval: 'hour', + breakdownFilter: { + breakdowns: undefined, + breakdown: 'num', + breakdown_type: 'person', + breakdown_histogram_bin_count: 10, + breakdown_group_type_index: undefined, + breakdown_normalize_url: undefined, + }, + }, + } as Node), + ]) + }) + + it('keeps multiple breakdowns when switching from funnels to trends', async () => { + funnelsQuery.source = { + ...funnelsQuery.source, + breakdownFilter: { + breakdowns: [ + { property: 'num', type: 'person' }, + { property: '$device_type', type: 'event' }, + ], + }, + } as FunnelsQuery + + await expectLogic(logic, () => { + builtInsightDataLogic.actions.setQuery(funnelsQuery) + }) + + await expectLogic(builtInsightDataLogic, () => { + logic.actions.setActiveView(InsightType.TRENDS) + }).toDispatchActions([ + builtInsightDataLogic.actionCreators.setQuery({ + kind: 'InsightVizNode', + source: { + kind: 'TrendsQuery', + series: [ + { kind: 'EventsNode', name: '$pageview', event: '$pageview', math: 'total' }, + { kind: 'EventsNode', name: '$pageleave', event: '$pageleave', math: 'total' }, + ], + trendsFilter: {}, + filterTestAccounts: true, + breakdownFilter: { + breakdowns: [ + { property: 'num', type: 'person' }, + { property: '$device_type', type: 'event' }, + ], + }, + }, + } as Node), + ]) + }) + + it('keeps breakdowns when switching between trends and funnels', async () => { + trendsQuery.source = { + ...trendsQuery.source, + breakdownFilter: { + breakdowns: [ + { property: '$pathname', type: 'group', normalize_url: true, group_type_index: 0 }, + { property: '$device_type', type: 'event' }, + ], + }, + } as TrendsQuery + + await expectLogic(logic, () => { + builtInsightDataLogic.actions.setQuery(trendsQuery) + }) + + await expectLogic(builtInsightDataLogic, () => { + logic.actions.setActiveView(InsightType.FUNNELS) + }).toDispatchActions([ + builtInsightDataLogic.actionCreators.setQuery({ + kind: 'InsightVizNode', + source: { + kind: 'FunnelsQuery', + series: [{ kind: 'EventsNode', name: '$pageview', event: '$pageview' }], + funnelsFilter: { funnelVizType: 'steps' }, + filterTestAccounts: true, + interval: 'hour', + breakdownFilter: { + breakdowns: undefined, + breakdown: '$pathname', + breakdown_type: 'group', + breakdown_group_type_index: 0, + breakdown_normalize_url: true, + }, + }, + } as Node), + ]) + + await expectLogic(builtInsightDataLogic, () => { + logic.actions.setActiveView(InsightType.TRENDS) + }).toDispatchActions([ + builtInsightDataLogic.actionCreators.setQuery({ + kind: 'InsightVizNode', + source: { + kind: 'TrendsQuery', + series: [{ kind: 'EventsNode', name: '$pageview', event: '$pageview', math: 'total' }], + trendsFilter: { showValuesOnSeries: true }, + filterTestAccounts: true, + interval: 'hour', + breakdownFilter: { + breakdowns: undefined, + breakdown: '$pathname', + breakdown_type: 'group', + breakdown_group_type_index: 0, + breakdown_normalize_url: true, + }, + }, + } as Node), + ]) + }) }) }) }) diff --git a/frontend/src/scenes/insights/InsightNav/insightNavLogic.tsx b/frontend/src/scenes/insights/InsightNav/insightNavLogic.tsx index d3df8da9f7c8c..c4ac869a1ec34 100644 --- a/frontend/src/scenes/insights/InsightNav/insightNavLogic.tsx +++ b/frontend/src/scenes/insights/InsightNav/insightNavLogic.tsx @@ -36,6 +36,7 @@ import { getDisplay, getShowPercentStackView, getShowValuesOnSeries, + isFunnelsQuery, isHogQuery, isInsightQueryWithBreakdown, isInsightQueryWithSeries, @@ -375,6 +376,27 @@ const mergeCachedProperties = (query: InsightQueryNode, cache: QueryPropertyCach // breakdown filter if (isInsightQueryWithBreakdown(mergedQuery) && cache.breakdownFilter) { mergedQuery.breakdownFilter = cache.breakdownFilter + + // If we've changed the query kind, convert multiple breakdowns to a single breakdown + if (isTrendsQuery(cache) && isFunnelsQuery(query)) { + if (cache.breakdownFilter.breakdowns?.length) { + const firstBreakdown = cache.breakdownFilter?.breakdowns?.[0] + mergedQuery.breakdownFilter = { + ...cache.breakdownFilter, + breakdowns: undefined, + breakdown: firstBreakdown?.property, + breakdown_type: firstBreakdown?.type, + breakdown_histogram_bin_count: firstBreakdown?.histogram_bin_count, + breakdown_group_type_index: firstBreakdown?.group_type_index, + breakdown_normalize_url: firstBreakdown?.normalize_url, + } + } else { + mergedQuery.breakdownFilter = { + ...cache.breakdownFilter, + breakdowns: undefined, + } + } + } } // funnel paths filter From 2783d14d6492366eafc642035919fdafbfab3508 Mon Sep 17 00:00:00 2001 From: David Newell Date: Fri, 26 Jul 2024 10:59:29 +0100 Subject: [PATCH 12/24] fix: redirect to persons in notebooks (#23994) --- frontend/src/scenes/persons/PersonDisplay.tsx | 17 +---------------- 1 file changed, 1 insertion(+), 16 deletions(-) diff --git a/frontend/src/scenes/persons/PersonDisplay.tsx b/frontend/src/scenes/persons/PersonDisplay.tsx index 5271d7c7899c7..30faf9300ac64 100644 --- a/frontend/src/scenes/persons/PersonDisplay.tsx +++ b/frontend/src/scenes/persons/PersonDisplay.tsx @@ -8,8 +8,6 @@ import { ProfilePicture, ProfilePictureProps } from 'lib/lemon-ui/ProfilePicture import { useMemo, useState } from 'react' import { useNotebookNode } from 'scenes/notebooks/Nodes/NotebookNodeContext' -import { NotebookNodeType } from '~/types' - import { asDisplay, asLink } from './person-utils' import { PersonPreview } from './PersonPreview' @@ -83,19 +81,6 @@ export function PersonDisplay({ router.actions.push(href) } else { setVisible(true) - - if (notebookNode && person) { - notebookNode.actions.updateAttributes({ - children: [ - { - type: NotebookNodeType.Person, - attrs: { - id: person.distinct_id || person.distinct_ids?.[0], - }, - }, - ], - }) - } } } : undefined @@ -107,7 +92,7 @@ export function PersonDisplay({ { - if (!noPopover) { + if (!noPopover && !notebookNode) { e.preventDefault() return } From ea69145b054c474cae17ad4ebbf7a5159b2bbc6f Mon Sep 17 00:00:00 2001 From: Ben White Date: Fri, 26 Jul 2024 13:03:15 +0200 Subject: [PATCH 13/24] feat(cdp): Async request compression (#24011) --- .../src/cdp/async-function-executor.ts | 14 +-- plugin-server/src/cdp/cdp-api.ts | 31 ++++--- plugin-server/src/cdp/cdp-consumers.ts | 73 ++++++++++----- plugin-server/src/cdp/hog-executor.ts | 64 ++++++------- .../src/cdp/hog-watcher/hog-watcher.ts | 6 +- plugin-server/src/cdp/types.ts | 51 ++++++---- plugin-server/src/cdp/utils.ts | 22 +++++ .../cdp/cdp-processed-events-consumer.test.ts | 47 +--------- plugin-server/tests/cdp/hog-executor.test.ts | 92 ++++++++++--------- .../tests/cdp/hog-watcher/hog-watcher.test.ts | 21 ++++- plugin-server/tests/cdp/utils.test.ts | 14 +++ 11 files changed, 247 insertions(+), 188 deletions(-) create mode 100644 plugin-server/tests/cdp/utils.test.ts diff --git a/plugin-server/src/cdp/async-function-executor.ts b/plugin-server/src/cdp/async-function-executor.ts index 89d72005213a4..93dd7e285cb78 100644 --- a/plugin-server/src/cdp/async-function-executor.ts +++ b/plugin-server/src/cdp/async-function-executor.ts @@ -5,7 +5,7 @@ import { PluginsServerConfig, ValueMatcher } from '../types' import { trackedFetch } from '../utils/fetch' import { status } from '../utils/status' import { RustyHook } from '../worker/rusty-hook' -import { HogFunctionInvocationAsyncResponse, HogFunctionInvocationResult } from './types' +import { HogFunctionInvocationAsyncRequest, HogFunctionInvocationAsyncResponse } from './types' export const BUCKETS_KB_WRITTEN = [0, 128, 512, 1024, 2024, 4096, 10240, Infinity] @@ -33,7 +33,7 @@ export class AsyncFunctionExecutor { } async execute( - request: HogFunctionInvocationResult, + request: HogFunctionInvocationAsyncRequest, options: AsyncFunctionExecutorOptions = { sync: false } ): Promise { if (!request.asyncFunctionRequest) { @@ -42,7 +42,6 @@ export class AsyncFunctionExecutor { const loggingContext = { hogFunctionId: request.hogFunctionId, - invocationId: request.id, asyncFunctionName: request.asyncFunctionRequest.name, } status.info('🦔', `[AsyncFunctionExecutor] Executing async function`, loggingContext) @@ -61,7 +60,7 @@ export class AsyncFunctionExecutor { } private async asyncFunctionFetch( - request: HogFunctionInvocationResult, + request: HogFunctionInvocationAsyncRequest, options?: AsyncFunctionExecutorOptions ): Promise { if (!request.asyncFunctionRequest) { @@ -69,6 +68,7 @@ export class AsyncFunctionExecutor { } const asyncFunctionResponse: HogFunctionInvocationAsyncResponse['asyncFunctionResponse'] = { + response: null, timings: [], } @@ -130,7 +130,7 @@ export class AsyncFunctionExecutor { const duration = performance.now() - start - asyncFunctionResponse.timings.push({ + asyncFunctionResponse.timings!.push({ kind: 'async_function', duration_ms: duration, }) @@ -145,7 +145,9 @@ export class AsyncFunctionExecutor { } const response: HogFunctionInvocationAsyncResponse = { - ...request, + state: request.state, + teamId: request.teamId, + hogFunctionId: request.hogFunctionId, asyncFunctionResponse, } diff --git a/plugin-server/src/cdp/cdp-api.ts b/plugin-server/src/cdp/cdp-api.ts index 642061adef622..b0e3e2242c0aa 100644 --- a/plugin-server/src/cdp/cdp-api.ts +++ b/plugin-server/src/cdp/cdp-api.ts @@ -9,7 +9,7 @@ import { addLog, HogExecutor } from './hog-executor' import { HogFunctionManager } from './hog-function-manager' import { HogWatcher } from './hog-watcher/hog-watcher' import { HogWatcherState } from './hog-watcher/types' -import { HogFunctionInvocation, HogFunctionType } from './types' +import { HogFunctionInvocation, HogFunctionInvocationAsyncRequest, HogFunctionLogEntry, HogFunctionType } from './types' export class CdpApi { private hogExecutor: HogExecutor @@ -110,7 +110,6 @@ export class CdpApi { globals: globals, teamId: team.id, hogFunctionId: id, - logs: [], timings: [], } @@ -125,8 +124,11 @@ export class CdpApi { await this.hogFunctionManager.enrichWithIntegrations([compoundConfiguration]) let response = this.hogExecutor.execute(compoundConfiguration, invocation) + const logs: HogFunctionLogEntry[] = [] while (response.asyncFunctionRequest) { + invocation.vmState = response.invocation.vmState + const asyncFunctionRequest = response.asyncFunctionRequest if (mock_async_functions || asyncFunctionRequest.name !== 'fetch') { @@ -140,31 +142,34 @@ export class CdpApi { ) // Add the state, simulating what executeAsyncResponse would do - asyncFunctionRequest.vmState.stack.push(convertJSToHog({ status: 200, body: {} })) + invocation.vmState!.stack.push(convertJSToHog({ status: 200, body: {} })) } else { - const asyncRes = await this.asyncFunctionExecutor!.execute(response, { + const asyncInvocationRequest: HogFunctionInvocationAsyncRequest = { + state: '', // WE don't care about the state for this level of testing + teamId: team.id, + hogFunctionId: hogFunction.id, + asyncFunctionRequest, + } + const asyncRes = await this.asyncFunctionExecutor!.execute(asyncInvocationRequest, { sync: true, }) if (!asyncRes || asyncRes.asyncFunctionResponse.error) { addLog(response, 'error', 'Failed to execute async function') } - asyncFunctionRequest.vmState.stack.push( - convertJSToHog(asyncRes?.asyncFunctionResponse.response ?? null) - ) - response.timings.push(...(asyncRes?.asyncFunctionResponse.timings ?? [])) + invocation.vmState!.stack.push(convertJSToHog(asyncRes?.asyncFunctionResponse.response ?? null)) } - // Clear it so we can't ever end up in a loop - delete response.asyncFunctionRequest - - response = this.hogExecutor.execute(compoundConfiguration, response, asyncFunctionRequest.vmState) + logs.push(...response.logs) + response = this.hogExecutor.execute(compoundConfiguration, invocation) } + logs.push(...response.logs) + res.json({ status: response.finished ? 'success' : 'error', error: String(response.error), - logs: response.logs, + logs: logs, }) } catch (e) { console.error(e) diff --git a/plugin-server/src/cdp/cdp-consumers.ts b/plugin-server/src/cdp/cdp-consumers.ts index 0385ab18bfd31..d9f453d4b90cb 100644 --- a/plugin-server/src/cdp/cdp-consumers.ts +++ b/plugin-server/src/cdp/cdp-consumers.ts @@ -1,3 +1,4 @@ +import { captureException } from '@sentry/node' import { features, librdkafkaVersion, Message } from 'node-rdkafka' import { Counter, Histogram } from 'prom-client' @@ -27,14 +28,18 @@ import { HogWatcher } from './hog-watcher/hog-watcher' import { HogWatcherState } from './hog-watcher/types' import { CdpOverflowMessage, + HogFunctionAsyncFunctionResponse, + HogFunctionInvocation, + HogFunctionInvocationAsyncRequest, HogFunctionInvocationAsyncResponse, HogFunctionInvocationGlobals, HogFunctionInvocationResult, + HogFunctionLogEntry, HogFunctionMessageToProduce, HogFunctionOverflowedGlobals, HogFunctionType, } from './types' -import { convertToCaptureEvent, convertToHogFunctionInvocationGlobals } from './utils' +import { convertToCaptureEvent, convertToHogFunctionInvocationGlobals, gzipObject, unGzipObject } from './utils' // Must require as `tsc` strips unused `import` statements and just requiring this seems to init some globals require('@sentry/tracing') @@ -170,6 +175,19 @@ abstract class CdpConsumerBase { counterFunctionInvocation.inc({ outcome: appMetric.metric_name }, appMetric.count) } + protected logLogEntry(logEntry: HogFunctionLogEntry) { + const sanitized = { + ...logEntry, + timestamp: castTimestampOrNow(logEntry.timestamp, TimestampFormat.ClickHouse), + } + // Convert timestamps to ISO strings + this.messagesToProduce.push({ + topic: KAFKA_LOG_ENTRIES, + value: sanitized, + key: sanitized.instance_id, + }) + } + protected async processInvocationResults(results: HogFunctionInvocationResult[]): Promise { await runInstrumentedFunction({ statsKey: `cdpConsumer.handleEachBatch.produceResults`, @@ -181,25 +199,14 @@ abstract class CdpConsumerBase { result.logs = [] this.logAppMetrics({ - team_id: result.teamId, - app_source_id: result.hogFunctionId, + team_id: result.invocation.teamId, + app_source_id: result.invocation.hogFunctionId, metric_kind: result.error ? 'failure' : 'success', metric_name: result.error ? 'failed' : 'succeeded', count: 1, }) - logs.forEach((x) => { - const sanitized = { - ...x, - timestamp: castTimestampOrNow(x.timestamp, TimestampFormat.ClickHouse), - } - // Convert timestamps to ISO strings - this.messagesToProduce.push({ - topic: KAFKA_LOG_ENTRIES, - value: sanitized, - key: sanitized.instance_id, - }) - }) + logs.forEach((x) => this.logLogEntry(x)) // PostHog capture events const capturedEvents = result.capturedPostHogEvents @@ -218,7 +225,13 @@ abstract class CdpConsumerBase { } if (result.asyncFunctionRequest) { - const res = await this.runWithHeartbeat(() => this.asyncFunctionExecutor.execute(result)) + const request: HogFunctionInvocationAsyncRequest = { + state: await gzipObject(result.invocation), + teamId: result.invocation.teamId, + hogFunctionId: result.invocation.hogFunctionId, + asyncFunctionRequest: result.asyncFunctionRequest, + } + const res = await this.runWithHeartbeat(() => this.asyncFunctionExecutor.execute(request)) // NOTE: This is very temporary as it is producing the response. the response will actually be produced by the 3rd party service // Later this will actually be the _request_ which we will push to the async function topic if we make one @@ -226,7 +239,7 @@ abstract class CdpConsumerBase { this.messagesToProduce.push({ topic: KAFKA_CDP_FUNCTION_CALLBACKS, value: res, - key: res.id, + key: res.hogFunctionId, }) } } @@ -263,7 +276,7 @@ abstract class CdpConsumerBase { source: 'hog_function_callback', payload: item, }, - key: item.id, + key: item.hogFunctionId, }) // We don't report overflowed metric to appmetrics as it is sort of a meta-metric counterFunctionInvocation.inc({ outcome: 'overflowed' }) @@ -284,8 +297,25 @@ abstract class CdpConsumerBase { } } - const results = await this.runManyWithHeartbeat(asyncResponsesToRun, (item) => - this.hogExecutor.executeAsyncResponse(item) + const invocationsWithResponses: [HogFunctionInvocation, HogFunctionAsyncFunctionResponse][] = [] + + // Deserialize the compressed data + await Promise.all( + asyncResponses.map(async (item) => { + try { + const invocation = await unGzipObject(item.state) + invocationsWithResponses.push([invocation, item.asyncFunctionResponse]) + } catch (e) { + status.error('Error unzipping message', e, item.state) + captureException(e, { + extra: { hogFunctionId: item.hogFunctionId, teamId: item.teamId }, + }) + } + }) + ) + + const results = await this.runManyWithHeartbeat(invocationsWithResponses, (item) => + this.hogExecutor.executeAsyncResponse(...item) ) this.hogWatcher.currentObservations.observeResults(results) @@ -549,8 +579,7 @@ export class CdpFunctionCallbackConsumer extends CdpConsumerBase { const events: HogFunctionInvocationAsyncResponse[] = [] messages.map((message) => { try { - const event = JSON.parse(message.value!.toString()) as unknown - + const event = JSON.parse(message.value!.toString()) events.push(event as HogFunctionInvocationAsyncResponse) } catch (e) { status.error('Error parsing message', e) diff --git a/plugin-server/src/cdp/hog-executor.ts b/plugin-server/src/cdp/hog-executor.ts index bd4e8aa27783d..db04a0f76e334 100644 --- a/plugin-server/src/cdp/hog-executor.ts +++ b/plugin-server/src/cdp/hog-executor.ts @@ -1,4 +1,4 @@ -import { calculateCost, convertHogToJS, convertJSToHog, exec, ExecResult, VMState } from '@posthog/hogvm' +import { calculateCost, convertHogToJS, convertJSToHog, exec, ExecResult } from '@posthog/hogvm' import { DateTime } from 'luxon' import { Histogram } from 'prom-client' @@ -67,10 +67,10 @@ export const addLog = (result: HogFunctionInvocationResult, level: HogFunctionLo } result.logs.push({ - team_id: result.teamId, + team_id: result.invocation.teamId, log_source: 'hog_function', - log_source_id: result.hogFunctionId, - instance_id: result.id, + log_source_id: result.invocation.hogFunctionId, + instance_id: result.invocation.id, timestamp: now, level, message, @@ -121,6 +121,7 @@ export class HogExecutor { } } } catch (error) { + // TODO: This should be reported as a log or metric status.error('🦔', `[HogExecutor] Error filtering function`, { hogFunctionId: hogFunction.id, hogFunctionName: hogFunction.name, @@ -174,7 +175,6 @@ export class HogExecutor { globals: modifiedGlobals, teamId: hogFunction.team_id, hogFunctionId: hogFunction.id, - logs: [], timings: [], }) } @@ -182,25 +182,19 @@ export class HogExecutor { /** * Intended to be invoked as a continuation from an async function */ - executeAsyncResponse(invocation: HogFunctionInvocationAsyncResponse): HogFunctionInvocationResult { + executeAsyncResponse( + invocation: HogFunctionInvocation, + asyncFunctionResponse: HogFunctionInvocationAsyncResponse['asyncFunctionResponse'] + ): HogFunctionInvocationResult { if (!invocation.hogFunctionId) { throw new Error('No hog function id provided') } - const baseInvocation: HogFunctionInvocation = { - id: invocation.id, - globals: invocation.globals, - teamId: invocation.teamId, - hogFunctionId: invocation.hogFunctionId, - timings: invocation.asyncFunctionResponse.timings, - // Logs we always reset as we don't want to carry over logs between calls - logs: [], - } - const errorRes = (error = 'Something went wrong'): HogFunctionInvocationResult => ({ - ...baseInvocation, + invocation, finished: false, error, + logs: [], }) const hogFunction = this.hogFunctionManager.getTeamHogFunction( @@ -212,24 +206,23 @@ export class HogExecutor { return errorRes(`Hog Function with ID ${invocation.hogFunctionId} not found`) } - const { vmState } = invocation.asyncFunctionRequest ?? {} - const { asyncFunctionResponse } = invocation - - if (!vmState || !asyncFunctionResponse.response || asyncFunctionResponse.error) { - return errorRes(invocation.error ?? 'No VM state provided for async response') + if (!invocation.vmState || !asyncFunctionResponse.response || asyncFunctionResponse.error) { + return errorRes(asyncFunctionResponse.error ?? 'No VM state provided for async response') } // Add the response to the stack to continue execution - vmState.stack.push(convertJSToHog(asyncFunctionResponse.response ?? null)) + invocation.vmState.stack.push(convertJSToHog(asyncFunctionResponse.response ?? null)) + invocation.timings.push(...(asyncFunctionResponse.timings ?? [])) + + const res = this.execute(hogFunction, invocation) - return this.execute(hogFunction, baseInvocation, vmState) + // Add any timings and logs from the async function + res.logs = [...(asyncFunctionResponse.logs ?? []), ...res.logs] + + return res } - execute( - hogFunction: HogFunctionType, - invocation: HogFunctionInvocation, - state?: VMState - ): HogFunctionInvocationResult { + execute(hogFunction: HogFunctionType, invocation: HogFunctionInvocation): HogFunctionInvocationResult { const loggingContext = { hogFunctionId: hogFunction.id, hogFunctionName: hogFunction.name, @@ -239,13 +232,14 @@ export class HogExecutor { status.debug('🦔', `[HogExecutor] Executing function`, loggingContext) const result: HogFunctionInvocationResult = { - ...invocation, + invocation, asyncFunctionRequest: undefined, finished: false, capturedPostHogEvents: [], + logs: [], } - if (!state) { + if (!invocation.vmState) { addLog(result, 'debug', `Executing function`) } else { addLog(result, 'debug', `Resuming function`) @@ -267,7 +261,7 @@ export class HogExecutor { try { let hogLogs = 0 - execRes = exec(state ?? hogFunction.bytecode, { + execRes = exec(invocation.vmState ?? hogFunction.bytecode, { globals, timeout: DEFAULT_TIMEOUT_MS, // TODO: Swap this to milliseconds when the package is updated maxAsyncSteps: MAX_ASYNC_STEPS, // NOTE: This will likely be configurable in the future @@ -336,7 +330,7 @@ export class HogExecutor { hogExecutionDuration.observe(duration) result.finished = execRes.finished - result.timings.push({ + invocation.timings.push({ kind: 'hog', duration_ms: duration, }) @@ -356,16 +350,16 @@ export class HogExecutor { ) if (execRes.asyncFunctionName) { + result.invocation.vmState = execRes.state result.asyncFunctionRequest = { name: execRes.asyncFunctionName, args: args, - vmState: execRes.state, } } else { addLog(result, 'warn', `Function was not finished but also had no async function to execute.`) } } else { - const totalDuration = result.timings.reduce((acc, timing) => acc + timing.duration_ms, 0) + const totalDuration = invocation.timings.reduce((acc, timing) => acc + timing.duration_ms, 0) const messages = [`Function completed in ${totalDuration}ms.`] if (execRes.state) { messages.push(`Sync: ${execRes.state.syncDuration}ms.`) diff --git a/plugin-server/src/cdp/hog-watcher/hog-watcher.ts b/plugin-server/src/cdp/hog-watcher/hog-watcher.ts index 8d531d8b36410..d8fd248d7bc44 100644 --- a/plugin-server/src/cdp/hog-watcher/hog-watcher.ts +++ b/plugin-server/src/cdp/hog-watcher/hog-watcher.ts @@ -64,7 +64,7 @@ export class HogWatcherActiveObservations { observeResults(results: HogFunctionInvocationResult[]) { results.forEach((result) => - this.addObservations(result.hogFunctionId, { + this.addObservations(result.invocation.hogFunctionId, { successes: result.finished ? 1 : 0, failures: result.error ? 1 : 0, }) @@ -75,8 +75,8 @@ export class HogWatcherActiveObservations { // NOTE: This probably wants to be done using the response status instead :thinking: responses.forEach((response) => this.addObservations(response.hogFunctionId, { - asyncFunctionSuccesses: response.error ? 0 : 1, - asyncFunctionFailures: response.error ? 1 : 0, + asyncFunctionSuccesses: response.asyncFunctionResponse.error ? 0 : 1, + asyncFunctionFailures: response.asyncFunctionResponse.error ? 1 : 0, }) ) } diff --git a/plugin-server/src/cdp/types.ts b/plugin-server/src/cdp/types.ts index 7201f2b730c9e..9273f5a7210c3 100644 --- a/plugin-server/src/cdp/types.ts +++ b/plugin-server/src/cdp/types.ts @@ -149,36 +149,55 @@ export interface HogFunctionTiming { duration_ms: number } +// This is the "persistent" state of a hog function invocation export type HogFunctionInvocation = { id: string globals: HogFunctionInvocationGlobals teamId: number hogFunctionId: HogFunctionType['id'] - // Logs and timings _could_ be passed in from the async function service - logs: HogFunctionLogEntry[] + // The current vmstate (set if the invocation is paused) + vmState?: VMState timings: HogFunctionTiming[] } -export type HogFunctionInvocationResult = HogFunctionInvocation & { +export type HogFunctionAsyncFunctionRequest = { + name: string + args: any[] +} + +export type HogFunctionAsyncFunctionResponse = { + /** An error message to indicate something went wrong and the invocation should be stopped */ + error?: any + /** The data to be passed to the Hog function from the response */ + response: any + timings?: HogFunctionTiming[] + logs?: HogFunctionLogEntry[] +} + +// The result of an execution +export type HogFunctionInvocationResult = { + invocation: HogFunctionInvocation finished: boolean error?: any - asyncFunctionRequest?: { - name: string - args: any[] - vmState: VMState - } + asyncFunctionRequest?: HogFunctionAsyncFunctionRequest + logs: HogFunctionLogEntry[] capturedPostHogEvents?: HogFunctionCapturedEvent[] } -export type HogFunctionInvocationAsyncResponse = HogFunctionInvocationResult & { +export type HogFunctionInvocationAsyncRequest = { + state: string // Serialized HogFunctionInvocation without the asyncFunctionRequest + teamId: number + hogFunctionId: HogFunctionType['id'] + asyncFunctionRequest?: HogFunctionAsyncFunctionRequest +} + +export type HogFunctionInvocationAsyncResponse = { + state: string // Serialized HogFunctionInvocation + teamId: number + hogFunctionId: HogFunctionType['id'] + // FOLLOWUP: do we want to type this more strictly? - asyncFunctionResponse: { - /** An error message to indicate something went wrong and the invocation should be stopped */ - error?: any - /** The data to be passed to the Hog function from the response */ - response?: any - timings: HogFunctionTiming[] - } + asyncFunctionResponse: HogFunctionAsyncFunctionResponse } // Mostly copied from frontend types diff --git a/plugin-server/src/cdp/utils.ts b/plugin-server/src/cdp/utils.ts index f95494c9906e3..636213c27c10f 100644 --- a/plugin-server/src/cdp/utils.ts +++ b/plugin-server/src/cdp/utils.ts @@ -1,6 +1,7 @@ // NOTE: PostIngestionEvent is our context event - it should never be sent directly to an output, but rather transformed into a lightweight schema import { DateTime } from 'luxon' +import { gunzip, gzip } from 'zlib' import { RawClickHouseEvent, Team } from '../types' import { safeClickhouseString } from '../utils/db/utils' @@ -136,3 +137,24 @@ export const convertToCaptureEvent = (event: HogFunctionCapturedEvent, team: Tea token: team.api_token, } } + +export const gzipObject = async (object: T): Promise => { + const payload = JSON.stringify(object) + const buffer = await new Promise((res, rej) => + gzip(payload, (err, result) => (err ? rej(err) : res(result))) + ) + const res = buffer.toString('base64') + + // NOTE: Base64 encoding isn't as efficient but we would need to change the kafka producer/consumers to use ucs2 or something + // as well in order to support binary data better + + return res +} + +export const unGzipObject = async (data: string): Promise => { + const res = await new Promise((res, rej) => + gunzip(Buffer.from(data, 'base64'), (err, result) => (err ? rej(err) : res(result))) + ) + + return JSON.parse(res.toString()) +} diff --git a/plugin-server/tests/cdp/cdp-processed-events-consumer.test.ts b/plugin-server/tests/cdp/cdp-processed-events-consumer.test.ts index 2013d21d48b6c..4de26bd05fca0 100644 --- a/plugin-server/tests/cdp/cdp-processed-events-consumer.test.ts +++ b/plugin-server/tests/cdp/cdp-processed-events-consumer.test.ts @@ -217,55 +217,14 @@ describe('CDP Processed Events Consuner', () => { }) const msg = decodeKafkaMessage(mockProducer.produce.mock.calls[3][0]) - // Parse body so it can match by object equality rather than exact string equality - msg.value.asyncFunctionRequest.args[1].body = JSON.parse(msg.value.asyncFunctionRequest.args[1].body) + expect(msg).toEqual({ key: expect.any(String), topic: 'cdp_function_callbacks_test', value: { - id: expect.any(String), - globals: expect.objectContaining({ - project: { id: 2, name: 'TEST PROJECT', url: 'http://localhost:8000/project/2' }, - // We assume the rest is correct - }), + state: expect.any(String), + hogFunctionId: hogFunction.id, teamId: 2, - hogFunctionId: expect.any(String), - finished: false, - logs: [], - timings: [ - { - kind: 'hog', - duration_ms: expect.any(Number), - }, - ], - asyncFunctionRequest: { - name: 'fetch', - args: [ - 'https://example.com/posthog-webhook', - { - headers: { version: 'v=1.0.0' }, - body: { - event: { - uuid: 'b3a1fe86-b10c-43cc-acaf-d208977608d0', - name: '$pageview', - distinct_id: 'distinct_id_1', - properties: { $lib_version: '1.0.0', $elements_chain: '[]' }, - timestamp: null, - url: 'http://localhost:8000/project/2/events/b3a1fe86-b10c-43cc-acaf-d208977608d0/null', - }, - groups: {}, - nested: { - foo: 'http://localhost:8000/project/2/events/b3a1fe86-b10c-43cc-acaf-d208977608d0/null', - }, - person: null, - event_url: - 'http://localhost:8000/project/2/events/b3a1fe86-b10c-43cc-acaf-d208977608d0/null-test', - }, - method: 'POST', - }, - ], - vmState: expect.any(Object), - }, asyncFunctionResponse: { response: { status: 200, diff --git a/plugin-server/tests/cdp/hog-executor.test.ts b/plugin-server/tests/cdp/hog-executor.test.ts index 123541cc12238..ba336799b87e4 100644 --- a/plugin-server/tests/cdp/hog-executor.test.ts +++ b/plugin-server/tests/cdp/hog-executor.test.ts @@ -3,7 +3,7 @@ import { DateTime } from 'luxon' import { HogExecutor } from '../../src/cdp/hog-executor' import { HogFunctionManager } from '../../src/cdp/hog-function-manager' import { - HogFunctionInvocationAsyncResponse, + HogFunctionAsyncFunctionResponse, HogFunctionInvocationResult, HogFunctionLogEntry, HogFunctionType, @@ -13,20 +13,17 @@ import { castTimestampOrNow } from '../../src/utils/utils' import { HOG_EXAMPLES, HOG_FILTERS_EXAMPLES, HOG_INPUTS_EXAMPLES } from './examples' import { createHogExecutionGlobals, createHogFunction, insertHogFunction as _insertHogFunction } from './fixtures' -const simulateMockFetchAsyncResponse = (result: HogFunctionInvocationResult): HogFunctionInvocationAsyncResponse => { +const createAsyncFunctionResponse = (): HogFunctionAsyncFunctionResponse => { return { - ...result, - asyncFunctionResponse: { - timings: [ - { - kind: 'async_function', - duration_ms: 100, - }, - ], - response: { - status: 200, - body: 'success', + timings: [ + { + kind: 'async_function', + duration_ms: 100, }, + ], + response: { + status: 200, + body: 'success', }, } } @@ -61,15 +58,19 @@ describe('Hog Executor', () => { mockFunctionManager.getTeamHogFunction.mockReturnValue(hogFunction) }) - it('can parse incoming messages correctly', () => { + it('can execute messages', () => { const globals = createHogExecutionGlobals() const results = executor .findMatchingFunctions(createHogExecutionGlobals()) .matchingFunctions.map((x) => executor.executeFunction(globals, x) as HogFunctionInvocationResult) expect(results).toHaveLength(1) expect(results[0]).toMatchObject({ - id: expect.any(String), - hogFunctionId: hogFunction.id, + invocation: { + id: expect.any(String), + hogFunctionId: hogFunction.id, + }, + finished: false, + asyncFunctionRequest: {}, }) }) @@ -83,7 +84,7 @@ describe('Hog Executor', () => { team_id: 1, log_source: 'hog_function', log_source_id: hogFunction.id, - instance_id: results[0].id, + instance_id: results[0].invocation.id, timestamp: expect.any(DateTime), level: 'debug', message: 'Executing function', @@ -92,7 +93,7 @@ describe('Hog Executor', () => { team_id: 1, log_source: 'hog_function', log_source_id: hogFunction.id, - instance_id: results[0].id, + instance_id: results[0].invocation.id, timestamp: expect.any(DateTime), level: 'debug', message: "Suspending function due to async function call 'fetch'. Payload: 1299 bytes", @@ -136,24 +137,34 @@ describe('Hog Executor', () => { .findMatchingFunctions(createHogExecutionGlobals()) .matchingFunctions.map((x) => executor.executeFunction(globals, x) as HogFunctionInvocationResult) expect(results[0]).toMatchObject({ - id: results[0].id, - globals: { - project: { id: 1, name: 'test', url: 'http://localhost:8000/projects/1' }, - event: { - uuid: 'uuid', - name: 'test', - distinct_id: 'distinct_id', - url: 'http://localhost:8000/events/1', - properties: { $lib_version: '1.2.3' }, - timestamp: '2024-06-07T12:00:00.000Z', - }, - source: { - name: 'Test hog function', - url: `http://localhost:8000/projects/1/pipeline/destinations/hog-${hogFunction.id}/configuration/`, + invocation: { + id: results[0].invocation.id, + teamId: 1, + hogFunctionId: hogFunction.id, + vmState: expect.any(Object), + globals: { + project: { id: 1, name: 'test', url: 'http://localhost:8000/projects/1' }, + event: { + uuid: 'uuid', + name: 'test', + distinct_id: 'distinct_id', + url: 'http://localhost:8000/events/1', + properties: { $lib_version: '1.2.3' }, + timestamp: '2024-06-07T12:00:00.000Z', + }, + source: { + name: 'Test hog function', + url: `http://localhost:8000/projects/1/pipeline/destinations/hog-${hogFunction.id}/configuration/`, + }, }, + timings: [ + { + kind: 'hog', + duration_ms: 0, + }, + ], }, - teamId: 1, - hogFunctionId: hogFunction.id, + asyncFunctionRequest: { name: 'fetch', args: [ @@ -177,14 +188,7 @@ describe('Hog Executor', () => { method: 'POST', }, ], - vmState: expect.any(Object), }, - timings: [ - { - kind: 'hog', - duration_ms: 0, - }, - ], }) }) @@ -197,7 +201,7 @@ describe('Hog Executor', () => { const splicedLogs = results[0].logs.splice(0, 100) logs.push(...splicedLogs) - const asyncExecResult = executor.executeAsyncResponse(simulateMockFetchAsyncResponse(results[0])) + const asyncExecResult = executor.executeAsyncResponse(results[0].invocation, createAsyncFunctionResponse()) logs.push(...asyncExecResult.logs) expect(asyncExecResult.error).toBeUndefined() @@ -259,13 +263,13 @@ describe('Hog Executor', () => { expect(results).toHaveLength(1) // Run the result one time simulating a successful fetch - const asyncResult1 = executor.executeAsyncResponse(simulateMockFetchAsyncResponse(results[0])) + const asyncResult1 = executor.executeAsyncResponse(results[0].invocation, createAsyncFunctionResponse()) expect(asyncResult1.finished).toBe(false) expect(asyncResult1.error).toBe(undefined) expect(asyncResult1.asyncFunctionRequest).toBeDefined() // Run the result one more time simulating a second successful fetch - const asyncResult2 = executor.executeAsyncResponse(simulateMockFetchAsyncResponse(asyncResult1)) + const asyncResult2 = executor.executeAsyncResponse(asyncResult1.invocation, createAsyncFunctionResponse()) // This time we should see an error for hitting the loop limit expect(asyncResult2.finished).toBe(false) expect(asyncResult2.error).toEqual('Exceeded maximum number of async steps: 2') diff --git a/plugin-server/tests/cdp/hog-watcher/hog-watcher.test.ts b/plugin-server/tests/cdp/hog-watcher/hog-watcher.test.ts index 52577df97bede..a36d72794ce99 100644 --- a/plugin-server/tests/cdp/hog-watcher/hog-watcher.test.ts +++ b/plugin-server/tests/cdp/hog-watcher/hog-watcher.test.ts @@ -17,17 +17,29 @@ const mockNow: jest.Mock = require('../../../src/utils/now').now as any const createResult = (id: string, finished = true, error?: string): HogFunctionInvocationResult => { return { - hogFunctionId: id, + invocation: { + id: 'invocation-id', + teamId: 2, + hogFunctionId: id, + globals: {} as any, + timings: [], + }, finished, error, - } as HogFunctionInvocationResult + logs: [], + } } const createAsyncResponse = (id: string, success = true): HogFunctionInvocationAsyncResponse => { return { + state: '', + teamId: 2, hogFunctionId: id, - error: success ? null : 'error', - } as HogFunctionInvocationAsyncResponse + asyncFunctionResponse: { + error: !success ? 'error' : null, + response: {}, + }, + } } const config = defaultConfig @@ -104,7 +116,6 @@ describe('HogWatcher', () => { const advanceTime = (ms: number) => { now += ms - console.log(`[TEST] Advancing time by ${ms}ms to ${now}`) mockNow.mockReturnValue(now) } diff --git a/plugin-server/tests/cdp/utils.test.ts b/plugin-server/tests/cdp/utils.test.ts new file mode 100644 index 0000000000000..a33cc79cf52d5 --- /dev/null +++ b/plugin-server/tests/cdp/utils.test.ts @@ -0,0 +1,14 @@ +import { gzipObject, unGzipObject } from '../../src/cdp/utils' +import { insertHogFunction as _insertHogFunction } from './fixtures' + +describe('Utils', () => { + describe('gzip compressions', () => { + it("should compress and decompress a string using gzip's sync functions", async () => { + const input = { foo: 'bar', foo2: 'bar' } + const compressed = await gzipObject(input) + expect(compressed).toHaveLength(52) + const decompressed = await unGzipObject(compressed) + expect(decompressed).toEqual(input) + }) + }) +}) From 389033e9ced42f5330937d17d773db29fd0448ce Mon Sep 17 00:00:00 2001 From: Georgiy Tarasov Date: Fri, 26 Jul 2024 13:11:00 +0200 Subject: [PATCH 14/24] revert(insights): "revert(insights): convert multiple breakdowns filter to a query (#23980)" (#24014) Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com> --- .../utils/filtersToQueryNode.test.ts | 106 ++++++++++++++++++ .../InsightQuery/utils/filtersToQueryNode.ts | 36 ++++-- .../views/InsightsTable/InsightsTable.tsx | 4 +- 3 files changed, 131 insertions(+), 15 deletions(-) diff --git a/frontend/src/queries/nodes/InsightQuery/utils/filtersToQueryNode.test.ts b/frontend/src/queries/nodes/InsightQuery/utils/filtersToQueryNode.test.ts index 9cb7ce95e339c..4922cc0b66a7b 100644 --- a/frontend/src/queries/nodes/InsightQuery/utils/filtersToQueryNode.test.ts +++ b/frontend/src/queries/nodes/InsightQuery/utils/filtersToQueryNode.test.ts @@ -409,6 +409,112 @@ describe('filtersToQueryNode', () => { } expect(result).toEqual(query) }) + + it('converts multiple breakdowns', () => { + const filters: Partial = { + insight: InsightType.TRENDS, + breakdowns: [ + { + type: 'event', + property: '$pathname', + normalize_url: true, + }, + { + type: 'group', + property: '$num', + group_type_index: 0, + histogram_bin_count: 10, + }, + ], + } + + const result = filtersToQueryNode(filters) + + const query: TrendsQuery = { + kind: NodeKind.TrendsQuery, + breakdownFilter: { + breakdowns: [ + { + type: 'event', + property: '$pathname', + normalize_url: true, + }, + { + type: 'group', + property: '$num', + group_type_index: 0, + histogram_bin_count: 10, + }, + ], + }, + series: [], + } + expect(result).toEqual(query) + }) + + it('converts legacy funnel breakdowns', () => { + const filters: Partial = { + insight: InsightType.TRENDS, + breakdowns: [ + { + type: 'event', + property: '$current_url', + }, + { + property: '$pathname', + } as any, + ], + } + + const result = filtersToQueryNode(filters) + + const query: TrendsQuery = { + kind: NodeKind.TrendsQuery, + breakdownFilter: { + breakdowns: [ + { + type: 'event', + property: '$current_url', + }, + { + type: 'event', + property: '$pathname', + }, + ], + }, + series: [], + } + expect(result).toEqual(query) + }) + + it('does not add breakdown_type for multiple breakdowns', () => { + const filters: Partial = { + insight: InsightType.TRENDS, + breakdowns: [ + { + type: 'person', + property: '$browser', + }, + ], + } + + const result = filtersToQueryNode(filters) + + const query: TrendsQuery = { + kind: NodeKind.TrendsQuery, + breakdownFilter: { + breakdowns: [ + { + type: 'person', + property: '$browser', + }, + ], + breakdown_type: undefined, + }, + series: [], + } + expect(result).toEqual(query) + }) }) describe('funnels filter', () => { diff --git a/frontend/src/queries/nodes/InsightQuery/utils/filtersToQueryNode.ts b/frontend/src/queries/nodes/InsightQuery/utils/filtersToQueryNode.ts index ea838920cc452..90c0c007c06b8 100644 --- a/frontend/src/queries/nodes/InsightQuery/utils/filtersToQueryNode.ts +++ b/frontend/src/queries/nodes/InsightQuery/utils/filtersToQueryNode.ts @@ -296,22 +296,34 @@ export const filtersToQueryNode = (filters: Partial): InsightQueryNo // breakdown if (isInsightQueryWithBreakdown(query)) { - /* handle multi-breakdowns */ // not undefined or null if (filters.breakdowns != null) { - if (filters.breakdowns.length === 1) { - filters.breakdown_type = filters.breakdowns[0].type - filters.breakdown = filters.breakdowns[0].property as string - } else { - captureException( - 'Could not convert multi-breakdown property `breakdowns` - found more than one breakdown' - ) + /* handle multi-breakdowns for funnels */ + if (isFunnelsFilter(filters)) { + if (filters.breakdowns.length === 1) { + filters.breakdown_type = filters.breakdowns[0].type || 'event' + filters.breakdown = filters.breakdowns[0].property as string + } else { + captureException( + 'Could not convert multi-breakdown property `breakdowns` - found more than one breakdown' + ) + } } - } - /* handle missing breakdown_type */ - // check for undefined and null values - if (filters.breakdown != null && filters.breakdown_type == null) { + /* handle multi-breakdowns for trends */ + if (isTrendsFilter(filters)) { + filters.breakdowns = filters.breakdowns.map((b) => ({ + ...b, + // Compatibility with legacy funnel breakdowns when someone switches a view from funnels to trends + type: b.type || filters.breakdown_type || 'event', + })) + } + } else if ( + /* handle missing breakdown_type */ + // check for undefined and null values + filters.breakdown != null && + filters.breakdown_type == null + ) { filters.breakdown_type = 'event' } diff --git a/frontend/src/scenes/insights/views/InsightsTable/InsightsTable.tsx b/frontend/src/scenes/insights/views/InsightsTable/InsightsTable.tsx index 7217c0074f27b..730ad17b66cda 100644 --- a/frontend/src/scenes/insights/views/InsightsTable/InsightsTable.tsx +++ b/frontend/src/scenes/insights/views/InsightsTable/InsightsTable.tsx @@ -167,9 +167,7 @@ export function InsightsTable({ }, }) } - } - - if (breakdownFilter?.breakdowns) { + } else if (breakdownFilter?.breakdowns) { breakdownFilter.breakdowns.forEach((breakdown, index) => { const formatItemBreakdownLabel = (item: IndexedTrendResult): string => formatBreakdownLabel( From 1a62d968a2d07e8382f4904b3a1be2a86ca543bf Mon Sep 17 00:00:00 2001 From: Oliver Browne Date: Fri, 26 Jul 2024 14:19:59 +0300 Subject: [PATCH 15/24] chore: Add management command to run plugins to inline versions (#24012) Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com> --- .../change_plugin_config_referenced_plugin.py | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 posthog/management/commands/change_plugin_config_referenced_plugin.py diff --git a/posthog/management/commands/change_plugin_config_referenced_plugin.py b/posthog/management/commands/change_plugin_config_referenced_plugin.py new file mode 100644 index 0000000000000..79b4704faf19f --- /dev/null +++ b/posthog/management/commands/change_plugin_config_referenced_plugin.py @@ -0,0 +1,38 @@ +import time +from django.core.management.base import BaseCommand +from posthog.models import PluginConfig, Plugin + + +class Command(BaseCommand): + help = "Set the plugin_id of a given config or set of configs to something else" + + def add_arguments(self, parser): + parser.add_argument("config_ids", type=str, help="Plugin config ID or list of ID's, separated by commas") + parser.add_argument("new_plugin_id", type=int, help="New Plugin ID") + parser.add_argument("--dry-run", type=bool, help="Print information instead of storing it") + + def handle(self, *args, **options): + dry_run = options["dry_run"] + config_ids = options["config_ids"] + new_plugin_id = options["new_plugin_id"] + + if "," in config_ids: + config_ids = {int(x) for x in config_ids.split(",")} + else: + config_ids = {int(config_ids)} + + new_plugin = Plugin.objects.get(id=new_plugin_id) + found_configs = PluginConfig.objects.filter(id__in=config_ids) + + existing_plugins = [(config.id, Plugin.objects.get(id=config.plugin_id).name) for config in found_configs] + + print(f"Going to update {len(found_configs)} rows, setting plugin_id to {new_plugin_id} ({new_plugin.name})") # noqa T201 + print(f"Current plugins (config_id, plugin_name) - MAKE SURE THESE MAKE SENSE: {existing_plugins}") # noqa T201 + print("Sleeping for 10 seconds, now is your chance to cancel") # noqa T201 + time.sleep(10) + print("Starting") # noqa T201 + if not dry_run: + updated = found_configs.update(plugin=new_plugin) + print(f"Updated {updated} rows") # noqa T201 + else: + print(f"Would update {len(config_ids)} rows") # noqa T201 From 40079f5958c79951bcad8644d9656f6ae2314669 Mon Sep 17 00:00:00 2001 From: Ben White Date: Fri, 26 Jul 2024 13:32:23 +0200 Subject: [PATCH 16/24] feat(cdp): Icon loader improvements (#24017) --- .../hogfunctions/HogFunctionConfiguration.tsx | 1 - .../pipeline/hogfunctions/HogFunctionIcon.tsx | 39 +++++++++------- .../hogfunctions/hogFunctionIconLogic.ts | 29 ++---------- posthog/cdp/services/icons.py | 46 +++++++++++-------- .../cdp/templates/webhook/template_webhook.py | 2 +- 5 files changed, 54 insertions(+), 63 deletions(-) diff --git a/frontend/src/scenes/pipeline/hogfunctions/HogFunctionConfiguration.tsx b/frontend/src/scenes/pipeline/hogfunctions/HogFunctionConfiguration.tsx index a6d23e590ac03..15674256224b8 100644 --- a/frontend/src/scenes/pipeline/hogfunctions/HogFunctionConfiguration.tsx +++ b/frontend/src/scenes/pipeline/hogfunctions/HogFunctionConfiguration.tsx @@ -170,7 +170,6 @@ export function HogFunctionConfiguration({ templateId, id }: { templateId?: stri {({ value, onChange }) => ( onChange(val)} /> diff --git a/frontend/src/scenes/pipeline/hogfunctions/HogFunctionIcon.tsx b/frontend/src/scenes/pipeline/hogfunctions/HogFunctionIcon.tsx index f99ee30ef52bb..49b0e094862bb 100644 --- a/frontend/src/scenes/pipeline/hogfunctions/HogFunctionIcon.tsx +++ b/frontend/src/scenes/pipeline/hogfunctions/HogFunctionIcon.tsx @@ -2,6 +2,7 @@ import { LemonButton, LemonFileInput, LemonInput, LemonSkeleton, lemonToast, Pop import clsx from 'clsx' import { useActions, useValues } from 'kea' import { IconUploadFile } from 'lib/lemon-ui/icons' +import { useState } from 'react' import { hogFunctionIconLogic, HogFunctionIconLogicProps } from './hogFunctionIconLogic' @@ -47,15 +48,7 @@ export function HogFunctionIconEditable({ const { setShowPopover, setSearchTerm } = useActions(hogFunctionIconLogic(props)) const content = ( - setShowPopover(!showPopover)} - > - {possibleIconsLoading ? : null} + setShowPopover(!showPopover)}> ) @@ -105,18 +98,14 @@ export function HogFunctionIconEditable({ {possibleIcons?.map((icon) => ( { const nonTempUrl = icon.url.replace('&temp=true', '') props.onChange?.(nonTempUrl) setShowPopover(false) }} > - + )) ?? (possibleIconsLoading ? ( @@ -142,15 +131,31 @@ export function HogFunctionIcon({ src?: string size?: 'small' | 'medium' | 'large' }): JSX.Element { + const [loaded, setLoaded] = useState(false) + return ( - {src ? : 🦔} + {src ? ( + <> + setLoaded(true)} + /> + {!loaded && } + + ) : ( + 🦔 + )} ) } diff --git a/frontend/src/scenes/pipeline/hogfunctions/hogFunctionIconLogic.ts b/frontend/src/scenes/pipeline/hogfunctions/hogFunctionIconLogic.ts index 2f92423b57a00..28c3076c3cbed 100644 --- a/frontend/src/scenes/pipeline/hogfunctions/hogFunctionIconLogic.ts +++ b/frontend/src/scenes/pipeline/hogfunctions/hogFunctionIconLogic.ts @@ -1,4 +1,4 @@ -import { actions, kea, key, listeners, path, props, propsChanged, reducers } from 'kea' +import { actions, kea, key, listeners, path, props, reducers } from 'kea' import { loaders } from 'kea-loaders' import api from 'lib/api' @@ -8,7 +8,6 @@ import type { hogFunctionIconLogicType } from './hogFunctionIconLogicType' export interface HogFunctionIconLogicProps { logicKey: string - search: string src?: string onChange?: (src: string) => void } @@ -41,12 +40,12 @@ export const hogFunctionIconLogic = kea([ ], }), - loaders(({ props, values }) => ({ + loaders(({ values }) => ({ possibleIcons: [ null as HogFunctionIconResponse[] | null, { loadPossibleIcons: async (_, breakpoint) => { - const search = values.searchTerm ?? props.search + const search = values.searchTerm if (!search) { return [] @@ -63,18 +62,7 @@ export const hogFunctionIconLogic = kea([ ], })), - listeners(({ actions, values, props }) => ({ - loadPossibleIconsSuccess: async () => { - const autoChange = props.onChange && (!props.src || props.src.includes('temp=true')) - if (!autoChange) { - return - } - const firstValue = values.possibleIcons?.[0] - if (firstValue) { - props.onChange?.(firstValue.url) - } - }, - + listeners(({ actions }) => ({ setShowPopover: ({ show }) => { if (show) { actions.loadPossibleIcons() @@ -85,13 +73,4 @@ export const hogFunctionIconLogic = kea([ actions.loadPossibleIcons() }, })), - - propsChanged(({ props, actions }, oldProps) => { - if (!props.onChange) { - return - } - if (!props.src || (props.search !== oldProps.search && props.src.includes('temp=true'))) { - actions.loadPossibleIcons() - } - }), ]) diff --git a/posthog/cdp/services/icons.py b/posthog/cdp/services/icons.py index f4cd744d5acb9..462783a7ba594 100644 --- a/posthog/cdp/services/icons.py +++ b/posthog/cdp/services/icons.py @@ -1,4 +1,6 @@ +from base64 import b64encode from django.conf import settings +from django.core.cache import cache from django.http import HttpResponse import requests @@ -14,25 +16,31 @@ def list_icons(self, query: str, icon_url_base: str): if not self.supported: return [] - res = requests.get( - f"https://search.logo.dev/api/icons", - params={ - "token": settings.LOGO_DEV_TOKEN, - "query": query, - }, - ) - data = res.json() - - parsed = [ - { - "id": item["domain"], - "name": item["name"], - "url": f"{icon_url_base}{item['domain']}", - } - for item in data - ] - - return parsed + cache_key = f"@cdp/list_icons/{b64encode(query.encode()).decode()}" + data = cache.get(cache_key) + + if data is None: + res = requests.get( + f"https://search.logo.dev/api/icons", + params={ + "token": settings.LOGO_DEV_TOKEN, + "query": query, + }, + ) + data = res.json() or [] + + data = [ + { + "id": item["domain"], + "name": item["name"], + "url": f"{icon_url_base}{item['domain']}", + } + for item in res.json() or [] + ] + + cache.set(cache_key, data, 60 * 60 * 24) + + return data def get_icon_http_response(self, id: str): if not self.supported: diff --git a/posthog/cdp/templates/webhook/template_webhook.py b/posthog/cdp/templates/webhook/template_webhook.py index fb7ed6e63650c..b99e7f9f31f79 100644 --- a/posthog/cdp/templates/webhook/template_webhook.py +++ b/posthog/cdp/templates/webhook/template_webhook.py @@ -6,7 +6,7 @@ id="template-webhook", name="HTTP Webhook", description="Sends a webhook templated by the incoming event data", - icon_url="/static/posthog-icon.svg?temp=true", + icon_url="/static/posthog-icon.svg", hog=""" let res := fetch(inputs.url, { 'headers': inputs.headers, From 935a8d852c8b91348044bf7b7cbd0e32434b834b Mon Sep 17 00:00:00 2001 From: Michael Matloka Date: Fri, 26 Jul 2024 12:50:32 +0100 Subject: [PATCH 17/24] chore(insights): Add `pickup_time` to QueryStatus (#23992) --- frontend/src/queries/schema.json | 7 +++++ frontend/src/queries/schema.ts | 6 ++-- posthog/api/test/test_query.py | 1 + posthog/clickhouse/client/execute_async.py | 29 ++++++++++--------- .../client/test/test_execute_async.py | 11 ++++++- posthog/schema.py | 9 ++++-- 6 files changed, 45 insertions(+), 18 deletions(-) diff --git a/frontend/src/queries/schema.json b/frontend/src/queries/schema.json index 1b30aa0bcc48b..457413fac79ed 100644 --- a/frontend/src/queries/schema.json +++ b/frontend/src/queries/schema.json @@ -7669,6 +7669,7 @@ "type": "integer" }, "end_time": { + "description": "When did the query execution task finish (whether successfully or not).", "format": "date-time", "type": "string" }, @@ -7697,6 +7698,11 @@ }, "type": "array" }, + "pickup_time": { + "description": "When was the query execution task picked up by a worker.", + "format": "date-time", + "type": "string" + }, "query_async": { "const": true, "default": true, @@ -7708,6 +7714,7 @@ }, "results": {}, "start_time": { + "description": "When was query execution task enqueued.", "format": "date-time", "type": "string" }, diff --git a/frontend/src/queries/schema.ts b/frontend/src/queries/schema.ts index 924bc2bc0ee7e..e24bebda2ba5c 100644 --- a/frontend/src/queries/schema.ts +++ b/frontend/src/queries/schema.ts @@ -1079,9 +1079,11 @@ export type QueryStatus = { /** @default null */ error_message: string | null results?: any - /** @format date-time */ + /** When was the query execution task picked up by a worker. @format date-time */ + pickup_time?: string + /** When was query execution task enqueued. @format date-time */ start_time?: string - /** @format date-time */ + /** When did the query execution task finish (whether successfully or not). @format date-time */ end_time?: string /** @format date-time */ expiration_time?: string diff --git a/posthog/api/test/test_query.py b/posthog/api/test/test_query.py index 5ef38ac548c2d..78339bd3f30c2 100644 --- a/posthog/api/test/test_query.py +++ b/posthog/api/test/test_query.py @@ -840,6 +840,7 @@ def test_full_hogql_query_async(self): { "query_status": { "complete": False, + "pickup_time": None, "end_time": None, "error": False, "error_message": None, diff --git a/posthog/clickhouse/client/execute_async.py b/posthog/clickhouse/client/execute_async.py index e3e30d52884de..14e8cb4fae06d 100644 --- a/posthog/clickhouse/client/execute_async.py +++ b/posthog/clickhouse/client/execute_async.py @@ -150,8 +150,10 @@ def execute_process_query( team = Team.objects.get(pk=team_id) sentry_sdk.set_tag("team_id", team_id) + is_staff_user = False if user_id: - user = User.objects.get(pk=user_id) + user = User.objects.only("email", "is_staff").get(pk=user_id) + is_staff_user = user.is_staff sentry_sdk.set_user({"email": user.email, "id": user_id, "username": user.email}) query_status = manager.get_query_status() @@ -159,6 +161,9 @@ def execute_process_query( if query_status.complete: return + query_status.pickup_time = datetime.datetime.now(datetime.UTC) + manager.store_query_status(query_status) + query_status.error = True # Assume error in case nothing below ends up working query_status.complete = True @@ -166,9 +171,8 @@ def execute_process_query( if trigger == "chained": tag_queries(trigger="chaining") - pickup_time = datetime.datetime.now(datetime.UTC) if query_status.start_time: - wait_duration = (pickup_time - query_status.start_time) / datetime.timedelta(seconds=1) + wait_duration = (query_status.pickup_time - query_status.start_time) / datetime.timedelta(seconds=1) QUERY_WAIT_TIME.labels(team=team_id, mode=trigger).observe(wait_duration) try: @@ -186,23 +190,22 @@ def execute_process_query( logger.info("Got results for team %s query %s", team_id, query_id) query_status.error = False query_status.results = results - query_status.end_time = datetime.datetime.now(datetime.UTC) - process_duration = (query_status.end_time - pickup_time) / datetime.timedelta(seconds=1) + process_duration = (datetime.datetime.now(datetime.UTC) - query_status.pickup_time) / datetime.timedelta( + seconds=1 + ) QUERY_PROCESS_TIME.labels(team=team_id).observe(process_duration) except CHQueryErrorTooManySimultaneousQueries: raise - except (ExposedHogQLError, ExposedCHQueryError) as err: # We can expose the error to the user + except Exception as err: query_status.results = None # Clear results in case they are faulty - query_status.error_message = str(err) - logger.exception("Error processing query for team %s query %s", team_id, query_id) - sentry_sdk.capture_exception(err) - # Do not raise here, the task itself did its job and we cannot recover - except Exception as err: # We cannot reveal anything about the error - query_status.results = None # Clear results in case they are faulty - logger.exception("Error processing query for team %s query %s", team_id, query_id) + if isinstance(err, ExposedHogQLError | ExposedCHQueryError) or is_staff_user: + # We can only expose the error message if it's a known safe error OR if the user is PostHog staff + query_status.error_message = str(err) + logger.exception("Error processing query async", team_id=team_id, query_id=query_id, exc_info=True) sentry_sdk.capture_exception(err) # Do not raise here, the task itself did its job and we cannot recover finally: + query_status.end_time = datetime.datetime.now(datetime.UTC) manager.store_query_status(query_status) diff --git a/posthog/clickhouse/client/test/test_execute_async.py b/posthog/clickhouse/client/test/test_execute_async.py index 13ebfe90964b1..14199a488f712 100644 --- a/posthog/clickhouse/client/test/test_execute_async.py +++ b/posthog/clickhouse/client/test/test_execute_async.py @@ -128,7 +128,7 @@ def test_execute_process_query(self, mock_process_query_dict, mock_redis_client) mock_process_query_dict.assert_called_once() # Assert that Redis set method was called with the correct arguments - mock_redis.set.assert_called_once() + self.assertEqual(mock_redis.set.call_count, 2) # Once on pickup, once on completion args, kwargs = mock_redis.set.call_args args_loaded = json.loads(args[1]) self.assertEqual(args_loaded["results"], [None, None, None, 1.0, "👍"]) @@ -149,6 +149,9 @@ def test_async_query_client(self): result = client.get_query_status(self.team.id, query_id) self.assertFalse(result.error, result.error_message or "") self.assertTrue(result.complete) + self.assertIsNotNone(result.start_time) + self.assertIsNotNone(result.pickup_time) + self.assertIsNotNone(result.end_time) assert result.results is not None self.assertEqual(result.results["results"], [[2]]) @@ -165,6 +168,9 @@ def test_async_query_client_errors(self): result = client.get_query_status(self.team.id, query_id) self.assertTrue(result.error) self.assertTrue(result.complete) + self.assertIsNotNone(result.start_time) + self.assertIsNotNone(result.pickup_time) + self.assertIsNotNone(result.end_time) assert result.error_message self.assertRegex(result.error_message, "no viable alternative at input") @@ -191,6 +197,9 @@ def test_async_query_server_errors(self): result = client.get_query_status(self.team.id, query_id) self.assertTrue(result.error) assert result.error_message is None + self.assertIsNotNone(result.start_time) + self.assertIsNotNone(result.pickup_time) + self.assertIsNotNone(result.end_time) def test_async_query_client_uuid(self): query = build_query("SELECT toUUID('00000000-0000-0000-0000-000000000000')") diff --git a/posthog/schema.py b/posthog/schema.py index 1c0e8a2a30670..bdd488c5306e5 100644 --- a/posthog/schema.py +++ b/posthog/schema.py @@ -844,7 +844,9 @@ class QueryStatus(BaseModel): ), ) dashboard_id: Optional[int] = None - end_time: Optional[AwareDatetime] = None + end_time: Optional[AwareDatetime] = Field( + default=None, description="When did the query execution task finish (whether successfully or not)." + ) error: Optional[bool] = Field( default=False, description=( @@ -856,10 +858,13 @@ class QueryStatus(BaseModel): id: str insight_id: Optional[int] = None labels: Optional[list[str]] = None + pickup_time: Optional[AwareDatetime] = Field( + default=None, description="When was the query execution task picked up by a worker." + ) query_async: Literal[True] = Field(default=True, description="ONLY async queries use QueryStatus.") query_progress: Optional[ClickhouseQueryProgress] = None results: Optional[Any] = None - start_time: Optional[AwareDatetime] = None + start_time: Optional[AwareDatetime] = Field(default=None, description="When was query execution task enqueued.") task_id: Optional[str] = None team_id: int From ac4122ccb9ba44672d35c504bbf6e86f9d7ae7f3 Mon Sep 17 00:00:00 2001 From: Michael Matloka Date: Fri, 26 Jul 2024 12:50:45 +0100 Subject: [PATCH 18/24] chore: Remove unused `start-https` scripts (#23995) --- bin/start-frontend-https | 8 -------- bin/start-https | 12 ------------ 2 files changed, 20 deletions(-) delete mode 100755 bin/start-frontend-https delete mode 100755 bin/start-https diff --git a/bin/start-frontend-https b/bin/start-frontend-https deleted file mode 100755 index 771b2940c67a5..0000000000000 --- a/bin/start-frontend-https +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/bash -set -e - -# pass first argument to WEBPACK_HOT_RELOAD_HOST -[ $# -ge 1 ] && export WEBPACK_HOT_RELOAD_HOST=$1 - -pnpm install -pnpm start-https diff --git a/bin/start-https b/bin/start-https deleted file mode 100755 index 5ebaa291f6dca..0000000000000 --- a/bin/start-https +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/bash -set -e - -trap "trap - SIGTERM && kill -- -$$" SIGINT SIGTERM EXIT - -export IS_BEHIND_PROXY=1 -export DISABLE_SECURE_SSL_REDIRECT=1 -./bin/start-worker & -./bin/start-backend & -./bin/start-frontend-https & - -wait From af9a03e6bf651c862abdff34d9ffb03e7d6da637 Mon Sep 17 00:00:00 2001 From: David Newell Date: Fri, 26 Jul 2024 13:52:36 +0100 Subject: [PATCH 19/24] fix: error tracking fixes & improvements (#24016) --- ...es-app-errortracking--group-page--dark.png | Bin 97862 -> 94077 bytes ...s-app-errortracking--group-page--light.png | Bin 99794 -> 94349 bytes .../error-tracking/ErrorTrackingActions.tsx | 82 ------------------ .../error-tracking/ErrorTrackingFilters.tsx | 66 +++++++++++++- .../ErrorTrackingGroupScene.tsx | 13 ++- .../error-tracking/ErrorTrackingScene.tsx | 47 +++++++--- .../__mocks__/error_tracking_query.ts | 2 +- ...gic.tsx => errorTrackingDataNodeLogic.tsx} | 12 +-- .../errorTrackingGroupSceneLogic.ts | 2 +- .../error-tracking/groups/OverviewTab.tsx | 4 +- .../src/scenes/web-analytics/WebDashboard.tsx | 10 +-- 11 files changed, 120 insertions(+), 118 deletions(-) delete mode 100644 frontend/src/scenes/error-tracking/ErrorTrackingActions.tsx rename frontend/src/scenes/error-tracking/{errorTrackingDataLogic.tsx => errorTrackingDataNodeLogic.tsx} (86%) diff --git a/frontend/__snapshots__/scenes-app-errortracking--group-page--dark.png b/frontend/__snapshots__/scenes-app-errortracking--group-page--dark.png index 14648057b8da0ad10986a56b7771b6eb527bb501..7d78d779f063e2f0718e4b795e898c7219bd38f4 100644 GIT binary patch literal 94077 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 |}Kk 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±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 MXNBKgh}{?WCn}GP5dZ)H literal 97862 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 diff --git a/frontend/__snapshots__/scenes-app-errortracking--group-page--light.png b/frontend/__snapshots__/scenes-app-errortracking--group-page--light.png index 8ef16bb7ccb838623563eabad3d6f4d1556e49d2..904f485ef38ed3d5ba2733993b74fdda85c5d891 100644 GIT binary patch literal 94349 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 DF0`lO literal 99794 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%0D(UVi;bJ3z>aQvy=ZnARrAQbVzs{K4`Dm21} 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 { - const { dateRange } = useValues(errorTrackingLogic) - const { setDateRange } = useActions(errorTrackingLogic) - const { order, selectedRows } = useValues(errorTrackingSceneLogic) - const { setOrder, setSelectedRows } = useActions(errorTrackingSceneLogic) - const { mergeGroups } = useActions(errorTrackingDataLogic) - - return selectedRows.length === 0 ? ( -

- ) : ( -
- setSelectedRows([])}> - Unselect all - - {selectedRows.length > 1 && ( - { - mergeGroups(selectedRows) - setSelectedRows([]) - }} - > - Merge - - )} -
- ) -} diff --git a/frontend/src/scenes/error-tracking/ErrorTrackingFilters.tsx b/frontend/src/scenes/error-tracking/ErrorTrackingFilters.tsx index 37d5007133f28..2ea376d39cea6 100644 --- a/frontend/src/scenes/error-tracking/ErrorTrackingFilters.tsx +++ b/frontend/src/scenes/error-tracking/ErrorTrackingFilters.tsx @@ -1,4 +1,6 @@ +import { LemonSelect } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' +import { DateFilter } from 'lib/components/DateFilter/DateFilter' import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import UniversalFilters from 'lib/components/UniversalFilters/UniversalFilters' import { universalFiltersLogic } from 'lib/components/UniversalFilters/universalFiltersLogic' @@ -7,8 +9,9 @@ import { useEffect, useState } from 'react' import { TestAccountFilter } from 'scenes/insights/filters/TestAccountFilter' import { errorTrackingLogic } from './errorTrackingLogic' +import { errorTrackingSceneLogic } from './errorTrackingSceneLogic' -export const ErrorTrackingFilters = (): JSX.Element => { +export const FilterGroup = (): JSX.Element => { const { filterGroup, filterTestAccounts } = useValues(errorTrackingLogic) const { setFilterGroup, setFilterTestAccounts } = useActions(errorTrackingLogic) @@ -66,3 +69,64 @@ const RecordingsUniversalFilterGroup = (): JSX.Element => { ) } + +export const Options = ({ showOrder = true }: { showOrder?: boolean }): JSX.Element => { + const { dateRange } = useValues(errorTrackingLogic) + const { setDateRange } = useActions(errorTrackingLogic) + const { order } = useValues(errorTrackingSceneLogic) + const { setOrder } = useActions(errorTrackingSceneLogic) + + return ( +
+
+ Date range: + { + setDateRange({ date_from: changedDateFrom, date_to: changedDateTo }) + }} + size="small" + /> +
+ {showOrder && ( +
+ Sort by: + +
+ )} +
+ ) +} + +export default { + FilterGroup, + Options, +} diff --git a/frontend/src/scenes/error-tracking/ErrorTrackingGroupScene.tsx b/frontend/src/scenes/error-tracking/ErrorTrackingGroupScene.tsx index 6009b8f03961e..917668336ece8 100644 --- a/frontend/src/scenes/error-tracking/ErrorTrackingGroupScene.tsx +++ b/frontend/src/scenes/error-tracking/ErrorTrackingGroupScene.tsx @@ -4,8 +4,7 @@ import { LemonDivider, LemonTabs } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import { SceneExport } from 'scenes/sceneTypes' -import { ErrorTrackingActions } from './ErrorTrackingActions' -import { ErrorTrackingFilters } from './ErrorTrackingFilters' +import ErrorTrackingFilters from './ErrorTrackingFilters' import { ErrorGroupTab, errorTrackingGroupSceneLogic } from './errorTrackingGroupSceneLogic' import { BreakdownsTab } from './groups/BreakdownsTab' import { OverviewTab } from './groups/OverviewTab' @@ -23,10 +22,10 @@ export function ErrorTrackingGroupScene(): JSX.Element { const { setErrorGroupTab } = useActions(errorTrackingGroupSceneLogic) return ( -
- - - + <> + + + -
+ ) } diff --git a/frontend/src/scenes/error-tracking/ErrorTrackingScene.tsx b/frontend/src/scenes/error-tracking/ErrorTrackingScene.tsx index d1e794ea7ff67..de779b65fba99 100644 --- a/frontend/src/scenes/error-tracking/ErrorTrackingScene.tsx +++ b/frontend/src/scenes/error-tracking/ErrorTrackingScene.tsx @@ -14,9 +14,8 @@ import { ErrorTrackingGroup } from '~/queries/schema' import { QueryContext, QueryContextColumnComponent, QueryContextColumnTitleComponent } from '~/queries/types' import { InsightLogicProps } from '~/types' -import { ErrorTrackingActions } from './ErrorTrackingActions' -import { errorTrackingDataLogic } from './errorTrackingDataLogic' -import { ErrorTrackingFilters } from './ErrorTrackingFilters' +import { errorTrackingDataNodeLogic } from './errorTrackingDataNodeLogic' +import ErrorTrackingFilters from './ErrorTrackingFilters' import { errorTrackingLogic } from './errorTrackingLogic' import { errorTrackingSceneLogic } from './errorTrackingSceneLogic' @@ -26,7 +25,7 @@ export const scene: SceneExport = { } export function ErrorTrackingScene(): JSX.Element { - const { query } = useValues(errorTrackingSceneLogic) + const { query, selectedRows } = useValues(errorTrackingSceneLogic) const insightProps: InsightLogicProps = { dashboardItemId: 'new-ErrorTrackingQuery', @@ -48,17 +47,41 @@ export function ErrorTrackingScene(): JSX.Element { } return ( - -
- - - - -
+ + + + {selectedRows.length === 0 ? : } + ) } +const ErrorTrackingActions = (): JSX.Element => { + const { selectedRows } = useValues(errorTrackingSceneLogic) + const { setSelectedRows } = useActions(errorTrackingSceneLogic) + const { mergeGroups } = useActions(errorTrackingDataNodeLogic) + + return ( +
+ setSelectedRows([])}> + Unselect all + + {selectedRows.length > 1 && ( + { + mergeGroups(selectedRows) + setSelectedRows([]) + }} + > + Merge + + )} +
+ ) +} + const CustomVolumeColumnHeader: QueryContextColumnTitleComponent = ({ columnName }) => { const { sparklineSelectedPeriod, sparklineOptions: options } = useValues(errorTrackingLogic) const { setSparklineSelectedPeriod } = useActions(errorTrackingLogic) @@ -121,7 +144,7 @@ const CustomGroupTitleColumn: QueryContextColumnComponent = (props) => { } const AssigneeColumn: QueryContextColumnComponent = (props) => { - const { assignGroup } = useActions(errorTrackingDataLogic) + const { assignGroup } = useActions(errorTrackingDataNodeLogic) const record = props.record as ErrorTrackingGroup diff --git a/frontend/src/scenes/error-tracking/__mocks__/error_tracking_query.ts b/frontend/src/scenes/error-tracking/__mocks__/error_tracking_query.ts index 1247854bf8251..b69d479cf1acb 100644 --- a/frontend/src/scenes/error-tracking/__mocks__/error_tracking_query.ts +++ b/frontend/src/scenes/error-tracking/__mocks__/error_tracking_query.ts @@ -147,7 +147,7 @@ const errorTrackingGroupQueryResponse = { person: { created_at: '2024-04-05T21:14:16.048000Z', distinct_id: 'BTQiT390vxwlLeDSwZAZpXC7r7bkNc3TQuhobit0oj7', - properties: JSON.stringify({ email: 'test@example.com' }), + properties: { email: 'test@example.com' }, uuid: 'person_uuid', }, })), diff --git a/frontend/src/scenes/error-tracking/errorTrackingDataLogic.tsx b/frontend/src/scenes/error-tracking/errorTrackingDataNodeLogic.tsx similarity index 86% rename from frontend/src/scenes/error-tracking/errorTrackingDataLogic.tsx rename to frontend/src/scenes/error-tracking/errorTrackingDataNodeLogic.tsx index 540590d01ffe8..586b5bcf64e39 100644 --- a/frontend/src/scenes/error-tracking/errorTrackingDataLogic.tsx +++ b/frontend/src/scenes/error-tracking/errorTrackingDataNodeLogic.tsx @@ -4,19 +4,19 @@ import api from 'lib/api' import { dataNodeLogic, DataNodeLogicProps } from '~/queries/nodes/DataNode/dataNodeLogic' import { ErrorTrackingGroup } from '~/queries/schema' -import type { errorTrackingDataLogicType } from './errorTrackingDataLogicType' +import type { errorTrackingDataNodeLogicType } from './errorTrackingDataNodeLogicType' import { mergeGroups } from './utils' -export interface ErrorTrackingDataLogicProps { +export interface ErrorTrackingDataNodeLogicProps { query: DataNodeLogicProps['query'] key: DataNodeLogicProps['key'] } -export const errorTrackingDataLogic = kea([ - path(['scenes', 'error-tracking', 'errorTrackingDataLogic']), - props({} as ErrorTrackingDataLogicProps), +export const errorTrackingDataNodeLogic = kea([ + path(['scenes', 'error-tracking', 'errorTrackingDataNodeLogic']), + props({} as ErrorTrackingDataNodeLogicProps), - connect(({ key, query }: ErrorTrackingDataLogicProps) => ({ + connect(({ key, query }: ErrorTrackingDataNodeLogicProps) => ({ values: [dataNodeLogic({ key, query }), ['response']], actions: [dataNodeLogic({ key, query }), ['setResponse']], })), diff --git a/frontend/src/scenes/error-tracking/errorTrackingGroupSceneLogic.ts b/frontend/src/scenes/error-tracking/errorTrackingGroupSceneLogic.ts index 8289707d37d1e..f070c24177e69 100644 --- a/frontend/src/scenes/error-tracking/errorTrackingGroupSceneLogic.ts +++ b/frontend/src/scenes/error-tracking/errorTrackingGroupSceneLogic.ts @@ -29,7 +29,7 @@ export type ErrorTrackingGroupEvent = { distinct_id: string uuid?: string created_at?: string - properties?: string + properties?: Record } } diff --git a/frontend/src/scenes/error-tracking/groups/OverviewTab.tsx b/frontend/src/scenes/error-tracking/groups/OverviewTab.tsx index a640f17ee14c8..62d04251edc55 100644 --- a/frontend/src/scenes/error-tracking/groups/OverviewTab.tsx +++ b/frontend/src/scenes/error-tracking/groups/OverviewTab.tsx @@ -71,13 +71,13 @@ const ListItemException = ({ }) .filter((property) => !!property.value) - const person = { ...event.person, properties: event.person.properties ? JSON.parse(event.person.properties) : {} } + // const person = { ...event.person, properties: event.person.properties ? JSON.parse(event.person.properties) : {} } return (
- +
diff --git a/frontend/src/scenes/web-analytics/WebDashboard.tsx b/frontend/src/scenes/web-analytics/WebDashboard.tsx index d2bd1958c810c..1ad977cfa7193 100644 --- a/frontend/src/scenes/web-analytics/WebDashboard.tsx +++ b/frontend/src/scenes/web-analytics/WebDashboard.tsx @@ -40,12 +40,10 @@ const Filters = (): JSX.Element => { return (
From f27b7b3904cd810f08b8868b530dfe104cdddaf0 Mon Sep 17 00:00:00 2001 From: Tom Owers Date: Fri, 26 Jul 2024 14:03:37 +0100 Subject: [PATCH 20/24] feat(bi): Implemented a naive version of links for BI (#24013) Co-authored-by: Marius Andra Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com> --- frontend/src/queries/nodes/HogQLX/render.tsx | 24 + hogql_parser/HogQLParser.cpp | 1098 +++++++++--------- hogql_parser/HogQLParser.h | 3 + hogql_parser/HogQLParser.interp | 2 +- hogql_parser/parser.cpp | 16 +- hogql_parser/setup.py | 2 +- posthog/hogql/grammar/HogQLParser.g4 | 2 +- posthog/hogql/grammar/HogQLParser.interp | 2 +- posthog/hogql/grammar/HogQLParser.py | 708 +++++------ posthog/hogql/hogqlx.py | 2 +- posthog/hogql/parser.py | 6 + posthog/hogql/test/_test_parser.py | 13 + requirements.in | 2 +- requirements.txt | 2 +- 14 files changed, 991 insertions(+), 891 deletions(-) diff --git a/frontend/src/queries/nodes/HogQLX/render.tsx b/frontend/src/queries/nodes/HogQLX/render.tsx index 7e4e53a59e530..cf559762e7b9b 100644 --- a/frontend/src/queries/nodes/HogQLX/render.tsx +++ b/frontend/src/queries/nodes/HogQLX/render.tsx @@ -1,3 +1,4 @@ +import { Link } from '@posthog/lemon-ui' import { JSONViewer } from 'lib/components/JSONViewer' import { Sparkline } from 'lib/components/Sparkline' @@ -37,6 +38,29 @@ export function renderHogQLX(value: any): JSX.Element { ) + } else if (tag === 'a') { + const { href, source, target } = rest + return ( + + + {source ? renderHogQLX(source) : href} + + + ) + } else if (tag === 'strong') { + const { source } = rest + return ( + + {renderHogQLX(source)} + + ) + } else if (tag === 'em') { + const { source } = rest + return ( + + {renderHogQLX(source)} + + ) } return
Unknown tag: {String(tag)}
} diff --git a/hogql_parser/HogQLParser.cpp b/hogql_parser/HogQLParser.cpp index 987d4a53df495..00d7c0e7b68de 100644 --- a/hogql_parser/HogQLParser.cpp +++ b/hogql_parser/HogQLParser.cpp @@ -114,7 +114,7 @@ void hogqlparserParserInitialize() { } ); static const int32_t serializedATNSegment[] = { - 4,1,159,1307,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6,7,6, + 4,1,159,1311,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6,7,6, 2,7,7,7,2,8,7,8,2,9,7,9,2,10,7,10,2,11,7,11,2,12,7,12,2,13,7,13,2,14, 7,14,2,15,7,15,2,16,7,16,2,17,7,17,2,18,7,18,2,19,7,19,2,20,7,20,2,21, 7,21,2,22,7,22,2,23,7,23,2,24,7,24,2,25,7,25,2,26,7,26,2,27,7,27,2,28, @@ -201,407 +201,409 @@ void hogqlparserParserInitialize() { 12,61,1067,9,61,1,61,3,61,1070,8,61,1,61,1,61,1,61,1,61,1,61,5,61,1077, 8,61,10,61,12,61,1080,9,61,1,61,3,61,1083,8,61,3,61,1085,8,61,1,61,1, 61,1,61,1,62,1,62,1,62,5,62,1093,8,62,10,62,12,62,1096,9,62,1,62,1,62, - 1,62,1,62,1,62,1,62,5,62,1104,8,62,10,62,12,62,1107,9,62,1,62,1,62,3, - 62,1111,8,62,1,62,1,62,1,62,1,62,1,62,3,62,1118,8,62,1,63,1,63,1,63,1, - 63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,3,63,1131,8,63,1,64,1,64,1,64,5, - 64,1136,8,64,10,64,12,64,1139,9,64,1,64,3,64,1142,8,64,1,65,1,65,1,65, - 1,65,1,65,1,65,1,65,1,65,1,65,1,65,3,65,1154,8,65,1,66,1,66,1,66,1,66, - 3,66,1160,8,66,1,66,3,66,1163,8,66,1,67,1,67,1,67,5,67,1168,8,67,10,67, - 12,67,1171,9,67,1,68,1,68,1,68,1,68,1,68,1,68,1,68,1,68,1,68,3,68,1182, - 8,68,1,68,1,68,1,68,1,68,3,68,1188,8,68,5,68,1190,8,68,10,68,12,68,1193, - 9,68,1,69,1,69,1,69,3,69,1198,8,69,1,69,1,69,1,70,1,70,1,70,3,70,1205, - 8,70,1,70,1,70,1,71,1,71,1,71,5,71,1212,8,71,10,71,12,71,1215,9,71,1, - 71,3,71,1218,8,71,1,72,1,72,1,73,1,73,1,73,1,73,1,73,1,73,3,73,1228,8, - 73,3,73,1230,8,73,1,74,3,74,1233,8,74,1,74,1,74,1,74,1,74,1,74,1,74,3, - 74,1241,8,74,1,75,1,75,1,75,3,75,1246,8,75,1,76,1,76,1,77,1,77,1,78,1, - 78,1,79,1,79,3,79,1256,8,79,1,80,1,80,1,80,3,80,1261,8,80,1,81,1,81,1, - 81,1,81,1,82,1,82,1,82,1,82,1,83,1,83,3,83,1273,8,83,1,84,1,84,5,84,1277, - 8,84,10,84,12,84,1280,9,84,1,84,1,84,1,85,1,85,1,85,1,85,1,85,3,85,1289, - 8,85,1,86,1,86,5,86,1293,8,86,10,86,12,86,1296,9,86,1,86,1,86,1,87,1, - 87,1,87,1,87,1,87,3,87,1305,8,87,1,87,0,3,78,116,136,88,0,2,4,6,8,10, - 12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56, - 58,60,62,64,66,68,70,72,74,76,78,80,82,84,86,88,90,92,94,96,98,100,102, - 104,106,108,110,112,114,116,118,120,122,124,126,128,130,132,134,136,138, - 140,142,144,146,148,150,152,154,156,158,160,162,164,166,168,170,172,174, - 0,16,2,0,18,18,74,74,2,0,44,44,51,51,3,0,1,1,4,4,8,8,4,0,1,1,3,4,8,8, - 80,80,2,0,51,51,73,73,2,0,1,1,4,4,2,0,7,7,22,23,2,0,30,30,49,49,2,0,71, - 71,76,76,3,0,10,10,50,50,90,90,2,0,41,41,53,53,1,0,107,108,2,0,118,118, - 139,139,7,0,21,21,38,38,55,56,70,70,78,78,97,97,103,103,16,0,1,13,15, - 20,22,28,30,30,32,37,39,42,44,51,53,54,58,58,60,69,71,77,79,83,85,92, - 94,96,98,99,101,102,4,0,20,20,30,30,39,39,48,48,1474,0,179,1,0,0,0,2, - 186,1,0,0,0,4,188,1,0,0,0,6,190,1,0,0,0,8,197,1,0,0,0,10,220,1,0,0,0, - 12,222,1,0,0,0,14,229,1,0,0,0,16,236,1,0,0,0,18,249,1,0,0,0,20,261,1, - 0,0,0,22,270,1,0,0,0,24,278,1,0,0,0,26,300,1,0,0,0,28,315,1,0,0,0,30, - 324,1,0,0,0,32,329,1,0,0,0,34,333,1,0,0,0,36,335,1,0,0,0,38,344,1,0,0, - 0,40,348,1,0,0,0,42,362,1,0,0,0,44,366,1,0,0,0,46,381,1,0,0,0,48,384, - 1,0,0,0,50,433,1,0,0,0,52,436,1,0,0,0,54,442,1,0,0,0,56,446,1,0,0,0,58, - 452,1,0,0,0,60,470,1,0,0,0,62,473,1,0,0,0,64,476,1,0,0,0,66,486,1,0,0, - 0,68,489,1,0,0,0,70,493,1,0,0,0,72,526,1,0,0,0,74,528,1,0,0,0,76,531, - 1,0,0,0,78,546,1,0,0,0,80,608,1,0,0,0,82,613,1,0,0,0,84,624,1,0,0,0,86, - 626,1,0,0,0,88,632,1,0,0,0,90,640,1,0,0,0,92,658,1,0,0,0,94,660,1,0,0, - 0,96,668,1,0,0,0,98,673,1,0,0,0,100,681,1,0,0,0,102,685,1,0,0,0,104,689, - 1,0,0,0,106,698,1,0,0,0,108,712,1,0,0,0,110,714,1,0,0,0,112,773,1,0,0, - 0,114,775,1,0,0,0,116,935,1,0,0,0,118,1044,1,0,0,0,120,1057,1,0,0,0,122, - 1084,1,0,0,0,124,1117,1,0,0,0,126,1130,1,0,0,0,128,1132,1,0,0,0,130,1153, - 1,0,0,0,132,1162,1,0,0,0,134,1164,1,0,0,0,136,1181,1,0,0,0,138,1194,1, - 0,0,0,140,1204,1,0,0,0,142,1208,1,0,0,0,144,1219,1,0,0,0,146,1229,1,0, - 0,0,148,1232,1,0,0,0,150,1245,1,0,0,0,152,1247,1,0,0,0,154,1249,1,0,0, - 0,156,1251,1,0,0,0,158,1255,1,0,0,0,160,1260,1,0,0,0,162,1262,1,0,0,0, - 164,1266,1,0,0,0,166,1272,1,0,0,0,168,1274,1,0,0,0,170,1288,1,0,0,0,172, - 1290,1,0,0,0,174,1304,1,0,0,0,176,178,3,2,1,0,177,176,1,0,0,0,178,181, - 1,0,0,0,179,177,1,0,0,0,179,180,1,0,0,0,180,182,1,0,0,0,181,179,1,0,0, - 0,182,183,5,0,0,1,183,1,1,0,0,0,184,187,3,6,3,0,185,187,3,10,5,0,186, - 184,1,0,0,0,186,185,1,0,0,0,187,3,1,0,0,0,188,189,3,116,58,0,189,5,1, - 0,0,0,190,191,5,52,0,0,191,195,3,160,80,0,192,193,5,115,0,0,193,194,5, - 122,0,0,194,196,3,4,2,0,195,192,1,0,0,0,195,196,1,0,0,0,196,7,1,0,0,0, - 197,202,3,160,80,0,198,199,5,116,0,0,199,201,3,160,80,0,200,198,1,0,0, - 0,201,204,1,0,0,0,202,200,1,0,0,0,202,203,1,0,0,0,203,206,1,0,0,0,204, - 202,1,0,0,0,205,207,5,116,0,0,206,205,1,0,0,0,206,207,1,0,0,0,207,9,1, - 0,0,0,208,221,3,12,6,0,209,221,3,14,7,0,210,221,3,18,9,0,211,221,3,20, - 10,0,212,221,3,22,11,0,213,221,3,26,13,0,214,221,3,24,12,0,215,221,3, - 28,14,0,216,221,3,30,15,0,217,221,3,36,18,0,218,221,3,32,16,0,219,221, - 3,34,17,0,220,208,1,0,0,0,220,209,1,0,0,0,220,210,1,0,0,0,220,211,1,0, - 0,0,220,212,1,0,0,0,220,213,1,0,0,0,220,214,1,0,0,0,220,215,1,0,0,0,220, - 216,1,0,0,0,220,217,1,0,0,0,220,218,1,0,0,0,220,219,1,0,0,0,221,11,1, - 0,0,0,222,224,5,72,0,0,223,225,3,4,2,0,224,223,1,0,0,0,224,225,1,0,0, - 0,225,227,1,0,0,0,226,228,5,150,0,0,227,226,1,0,0,0,227,228,1,0,0,0,228, - 13,1,0,0,0,229,231,5,84,0,0,230,232,3,4,2,0,231,230,1,0,0,0,231,232,1, - 0,0,0,232,234,1,0,0,0,233,235,5,150,0,0,234,233,1,0,0,0,234,235,1,0,0, - 0,235,15,1,0,0,0,236,245,5,14,0,0,237,238,5,130,0,0,238,241,3,160,80, - 0,239,240,5,115,0,0,240,242,3,160,80,0,241,239,1,0,0,0,241,242,1,0,0, - 0,242,243,1,0,0,0,243,244,5,149,0,0,244,246,1,0,0,0,245,237,1,0,0,0,245, - 246,1,0,0,0,246,247,1,0,0,0,247,248,3,36,18,0,248,17,1,0,0,0,249,250, - 5,93,0,0,250,254,3,36,18,0,251,253,3,16,8,0,252,251,1,0,0,0,253,256,1, - 0,0,0,254,252,1,0,0,0,254,255,1,0,0,0,255,259,1,0,0,0,256,254,1,0,0,0, - 257,258,5,29,0,0,258,260,3,36,18,0,259,257,1,0,0,0,259,260,1,0,0,0,260, - 19,1,0,0,0,261,262,5,40,0,0,262,263,5,130,0,0,263,264,3,4,2,0,264,265, - 5,149,0,0,265,268,3,10,5,0,266,267,5,25,0,0,267,269,3,10,5,0,268,266, - 1,0,0,0,268,269,1,0,0,0,269,21,1,0,0,0,270,271,5,100,0,0,271,272,5,130, - 0,0,272,273,3,4,2,0,273,274,5,149,0,0,274,276,3,10,5,0,275,277,5,150, - 0,0,276,275,1,0,0,0,276,277,1,0,0,0,277,23,1,0,0,0,278,279,5,33,0,0,279, - 283,5,130,0,0,280,284,3,6,3,0,281,284,3,30,15,0,282,284,3,4,2,0,283,280, - 1,0,0,0,283,281,1,0,0,0,283,282,1,0,0,0,283,284,1,0,0,0,284,285,1,0,0, - 0,285,287,5,150,0,0,286,288,3,4,2,0,287,286,1,0,0,0,287,288,1,0,0,0,288, - 289,1,0,0,0,289,293,5,150,0,0,290,294,3,6,3,0,291,294,3,30,15,0,292,294, - 3,4,2,0,293,290,1,0,0,0,293,291,1,0,0,0,293,292,1,0,0,0,293,294,1,0,0, - 0,294,295,1,0,0,0,295,296,5,149,0,0,296,298,3,10,5,0,297,299,5,150,0, - 0,298,297,1,0,0,0,298,299,1,0,0,0,299,25,1,0,0,0,300,301,5,33,0,0,301, - 302,5,130,0,0,302,303,5,52,0,0,303,306,3,160,80,0,304,305,5,116,0,0,305, - 307,3,160,80,0,306,304,1,0,0,0,306,307,1,0,0,0,307,308,1,0,0,0,308,309, - 5,42,0,0,309,310,3,4,2,0,310,311,5,149,0,0,311,313,3,10,5,0,312,314,5, - 150,0,0,313,312,1,0,0,0,313,314,1,0,0,0,314,27,1,0,0,0,315,316,5,31,0, - 0,316,317,3,160,80,0,317,319,5,130,0,0,318,320,3,8,4,0,319,318,1,0,0, - 0,319,320,1,0,0,0,320,321,1,0,0,0,321,322,5,149,0,0,322,323,3,36,18,0, - 323,29,1,0,0,0,324,325,3,4,2,0,325,326,5,115,0,0,326,327,5,122,0,0,327, - 328,3,4,2,0,328,31,1,0,0,0,329,331,3,4,2,0,330,332,5,150,0,0,331,330, - 1,0,0,0,331,332,1,0,0,0,332,33,1,0,0,0,333,334,5,150,0,0,334,35,1,0,0, - 0,335,339,5,128,0,0,336,338,3,2,1,0,337,336,1,0,0,0,338,341,1,0,0,0,339, - 337,1,0,0,0,339,340,1,0,0,0,340,342,1,0,0,0,341,339,1,0,0,0,342,343,5, - 147,0,0,343,37,1,0,0,0,344,345,3,4,2,0,345,346,5,115,0,0,346,347,3,4, - 2,0,347,39,1,0,0,0,348,353,3,38,19,0,349,350,5,116,0,0,350,352,3,38,19, - 0,351,349,1,0,0,0,352,355,1,0,0,0,353,351,1,0,0,0,353,354,1,0,0,0,354, - 357,1,0,0,0,355,353,1,0,0,0,356,358,5,116,0,0,357,356,1,0,0,0,357,358, - 1,0,0,0,358,41,1,0,0,0,359,363,3,44,22,0,360,363,3,48,24,0,361,363,3, - 124,62,0,362,359,1,0,0,0,362,360,1,0,0,0,362,361,1,0,0,0,363,364,1,0, - 0,0,364,365,5,0,0,1,365,43,1,0,0,0,366,372,3,46,23,0,367,368,5,95,0,0, - 368,369,5,1,0,0,369,371,3,46,23,0,370,367,1,0,0,0,371,374,1,0,0,0,372, - 370,1,0,0,0,372,373,1,0,0,0,373,45,1,0,0,0,374,372,1,0,0,0,375,382,3, - 48,24,0,376,377,5,130,0,0,377,378,3,44,22,0,378,379,5,149,0,0,379,382, - 1,0,0,0,380,382,3,164,82,0,381,375,1,0,0,0,381,376,1,0,0,0,381,380,1, - 0,0,0,382,47,1,0,0,0,383,385,3,50,25,0,384,383,1,0,0,0,384,385,1,0,0, - 0,385,386,1,0,0,0,386,388,5,79,0,0,387,389,5,24,0,0,388,387,1,0,0,0,388, - 389,1,0,0,0,389,391,1,0,0,0,390,392,3,52,26,0,391,390,1,0,0,0,391,392, - 1,0,0,0,392,393,1,0,0,0,393,395,3,114,57,0,394,396,3,54,27,0,395,394, - 1,0,0,0,395,396,1,0,0,0,396,398,1,0,0,0,397,399,3,56,28,0,398,397,1,0, - 0,0,398,399,1,0,0,0,399,401,1,0,0,0,400,402,3,60,30,0,401,400,1,0,0,0, - 401,402,1,0,0,0,402,404,1,0,0,0,403,405,3,62,31,0,404,403,1,0,0,0,404, - 405,1,0,0,0,405,407,1,0,0,0,406,408,3,64,32,0,407,406,1,0,0,0,407,408, - 1,0,0,0,408,411,1,0,0,0,409,410,5,102,0,0,410,412,7,0,0,0,411,409,1,0, - 0,0,411,412,1,0,0,0,412,415,1,0,0,0,413,414,5,102,0,0,414,416,5,89,0, - 0,415,413,1,0,0,0,415,416,1,0,0,0,416,418,1,0,0,0,417,419,3,66,33,0,418, - 417,1,0,0,0,418,419,1,0,0,0,419,421,1,0,0,0,420,422,3,58,29,0,421,420, - 1,0,0,0,421,422,1,0,0,0,422,424,1,0,0,0,423,425,3,68,34,0,424,423,1,0, - 0,0,424,425,1,0,0,0,425,428,1,0,0,0,426,429,3,72,36,0,427,429,3,74,37, - 0,428,426,1,0,0,0,428,427,1,0,0,0,428,429,1,0,0,0,429,431,1,0,0,0,430, - 432,3,76,38,0,431,430,1,0,0,0,431,432,1,0,0,0,432,49,1,0,0,0,433,434, - 5,102,0,0,434,435,3,128,64,0,435,51,1,0,0,0,436,437,5,88,0,0,437,440, - 5,108,0,0,438,439,5,102,0,0,439,441,5,85,0,0,440,438,1,0,0,0,440,441, - 1,0,0,0,441,53,1,0,0,0,442,443,5,34,0,0,443,444,3,78,39,0,444,55,1,0, - 0,0,445,447,7,1,0,0,446,445,1,0,0,0,446,447,1,0,0,0,447,448,1,0,0,0,448, - 449,5,5,0,0,449,450,5,47,0,0,450,451,3,114,57,0,451,57,1,0,0,0,452,453, - 5,101,0,0,453,454,3,160,80,0,454,455,5,6,0,0,455,456,5,130,0,0,456,457, - 3,98,49,0,457,467,5,149,0,0,458,459,5,116,0,0,459,460,3,160,80,0,460, - 461,5,6,0,0,461,462,5,130,0,0,462,463,3,98,49,0,463,464,5,149,0,0,464, - 466,1,0,0,0,465,458,1,0,0,0,466,469,1,0,0,0,467,465,1,0,0,0,467,468,1, - 0,0,0,468,59,1,0,0,0,469,467,1,0,0,0,470,471,5,69,0,0,471,472,3,116,58, - 0,472,61,1,0,0,0,473,474,5,99,0,0,474,475,3,116,58,0,475,63,1,0,0,0,476, - 477,5,36,0,0,477,484,5,11,0,0,478,479,7,0,0,0,479,480,5,130,0,0,480,481, - 3,114,57,0,481,482,5,149,0,0,482,485,1,0,0,0,483,485,3,114,57,0,484,478, - 1,0,0,0,484,483,1,0,0,0,485,65,1,0,0,0,486,487,5,37,0,0,487,488,3,116, - 58,0,488,67,1,0,0,0,489,490,5,64,0,0,490,491,5,11,0,0,491,492,3,88,44, - 0,492,69,1,0,0,0,493,494,5,64,0,0,494,495,5,11,0,0,495,496,3,114,57,0, - 496,71,1,0,0,0,497,498,5,54,0,0,498,501,3,116,58,0,499,500,5,116,0,0, - 500,502,3,116,58,0,501,499,1,0,0,0,501,502,1,0,0,0,502,507,1,0,0,0,503, - 504,5,102,0,0,504,508,5,85,0,0,505,506,5,11,0,0,506,508,3,114,57,0,507, - 503,1,0,0,0,507,505,1,0,0,0,507,508,1,0,0,0,508,527,1,0,0,0,509,510,5, - 54,0,0,510,513,3,116,58,0,511,512,5,102,0,0,512,514,5,85,0,0,513,511, - 1,0,0,0,513,514,1,0,0,0,514,515,1,0,0,0,515,516,5,61,0,0,516,517,3,116, - 58,0,517,527,1,0,0,0,518,519,5,54,0,0,519,520,3,116,58,0,520,521,5,61, - 0,0,521,524,3,116,58,0,522,523,5,11,0,0,523,525,3,114,57,0,524,522,1, - 0,0,0,524,525,1,0,0,0,525,527,1,0,0,0,526,497,1,0,0,0,526,509,1,0,0,0, - 526,518,1,0,0,0,527,73,1,0,0,0,528,529,5,61,0,0,529,530,3,116,58,0,530, - 75,1,0,0,0,531,532,5,81,0,0,532,533,3,94,47,0,533,77,1,0,0,0,534,535, - 6,39,-1,0,535,537,3,136,68,0,536,538,5,28,0,0,537,536,1,0,0,0,537,538, - 1,0,0,0,538,540,1,0,0,0,539,541,3,86,43,0,540,539,1,0,0,0,540,541,1,0, - 0,0,541,547,1,0,0,0,542,543,5,130,0,0,543,544,3,78,39,0,544,545,5,149, - 0,0,545,547,1,0,0,0,546,534,1,0,0,0,546,542,1,0,0,0,547,562,1,0,0,0,548, - 549,10,3,0,0,549,550,3,82,41,0,550,551,3,78,39,4,551,561,1,0,0,0,552, - 554,10,4,0,0,553,555,3,80,40,0,554,553,1,0,0,0,554,555,1,0,0,0,555,556, - 1,0,0,0,556,557,5,47,0,0,557,558,3,78,39,0,558,559,3,84,42,0,559,561, - 1,0,0,0,560,548,1,0,0,0,560,552,1,0,0,0,561,564,1,0,0,0,562,560,1,0,0, - 0,562,563,1,0,0,0,563,79,1,0,0,0,564,562,1,0,0,0,565,567,7,2,0,0,566, - 565,1,0,0,0,566,567,1,0,0,0,567,568,1,0,0,0,568,575,5,44,0,0,569,571, - 5,44,0,0,570,572,7,2,0,0,571,570,1,0,0,0,571,572,1,0,0,0,572,575,1,0, - 0,0,573,575,7,2,0,0,574,566,1,0,0,0,574,569,1,0,0,0,574,573,1,0,0,0,575, - 609,1,0,0,0,576,578,7,3,0,0,577,576,1,0,0,0,577,578,1,0,0,0,578,579,1, - 0,0,0,579,581,7,4,0,0,580,582,5,65,0,0,581,580,1,0,0,0,581,582,1,0,0, - 0,582,591,1,0,0,0,583,585,7,4,0,0,584,586,5,65,0,0,585,584,1,0,0,0,585, - 586,1,0,0,0,586,588,1,0,0,0,587,589,7,3,0,0,588,587,1,0,0,0,588,589,1, - 0,0,0,589,591,1,0,0,0,590,577,1,0,0,0,590,583,1,0,0,0,591,609,1,0,0,0, - 592,594,7,5,0,0,593,592,1,0,0,0,593,594,1,0,0,0,594,595,1,0,0,0,595,597, - 5,35,0,0,596,598,5,65,0,0,597,596,1,0,0,0,597,598,1,0,0,0,598,607,1,0, - 0,0,599,601,5,35,0,0,600,602,5,65,0,0,601,600,1,0,0,0,601,602,1,0,0,0, - 602,604,1,0,0,0,603,605,7,5,0,0,604,603,1,0,0,0,604,605,1,0,0,0,605,607, - 1,0,0,0,606,593,1,0,0,0,606,599,1,0,0,0,607,609,1,0,0,0,608,574,1,0,0, - 0,608,590,1,0,0,0,608,606,1,0,0,0,609,81,1,0,0,0,610,611,5,17,0,0,611, - 614,5,47,0,0,612,614,5,116,0,0,613,610,1,0,0,0,613,612,1,0,0,0,614,83, - 1,0,0,0,615,616,5,62,0,0,616,625,3,114,57,0,617,618,5,96,0,0,618,619, - 5,130,0,0,619,620,3,114,57,0,620,621,5,149,0,0,621,625,1,0,0,0,622,623, - 5,96,0,0,623,625,3,114,57,0,624,615,1,0,0,0,624,617,1,0,0,0,624,622,1, - 0,0,0,625,85,1,0,0,0,626,627,5,77,0,0,627,630,3,92,46,0,628,629,5,61, - 0,0,629,631,3,92,46,0,630,628,1,0,0,0,630,631,1,0,0,0,631,87,1,0,0,0, - 632,637,3,90,45,0,633,634,5,116,0,0,634,636,3,90,45,0,635,633,1,0,0,0, - 636,639,1,0,0,0,637,635,1,0,0,0,637,638,1,0,0,0,638,89,1,0,0,0,639,637, - 1,0,0,0,640,642,3,116,58,0,641,643,7,6,0,0,642,641,1,0,0,0,642,643,1, - 0,0,0,643,646,1,0,0,0,644,645,5,60,0,0,645,647,7,7,0,0,646,644,1,0,0, - 0,646,647,1,0,0,0,647,650,1,0,0,0,648,649,5,16,0,0,649,651,5,110,0,0, - 650,648,1,0,0,0,650,651,1,0,0,0,651,91,1,0,0,0,652,659,3,164,82,0,653, - 656,3,148,74,0,654,655,5,151,0,0,655,657,3,148,74,0,656,654,1,0,0,0,656, - 657,1,0,0,0,657,659,1,0,0,0,658,652,1,0,0,0,658,653,1,0,0,0,659,93,1, - 0,0,0,660,665,3,96,48,0,661,662,5,116,0,0,662,664,3,96,48,0,663,661,1, - 0,0,0,664,667,1,0,0,0,665,663,1,0,0,0,665,666,1,0,0,0,666,95,1,0,0,0, - 667,665,1,0,0,0,668,669,3,160,80,0,669,670,5,122,0,0,670,671,3,150,75, - 0,671,97,1,0,0,0,672,674,3,100,50,0,673,672,1,0,0,0,673,674,1,0,0,0,674, - 676,1,0,0,0,675,677,3,102,51,0,676,675,1,0,0,0,676,677,1,0,0,0,677,679, - 1,0,0,0,678,680,3,104,52,0,679,678,1,0,0,0,679,680,1,0,0,0,680,99,1,0, - 0,0,681,682,5,67,0,0,682,683,5,11,0,0,683,684,3,114,57,0,684,101,1,0, - 0,0,685,686,5,64,0,0,686,687,5,11,0,0,687,688,3,88,44,0,688,103,1,0,0, - 0,689,690,7,8,0,0,690,691,3,106,53,0,691,105,1,0,0,0,692,699,3,108,54, - 0,693,694,5,9,0,0,694,695,3,108,54,0,695,696,5,2,0,0,696,697,3,108,54, - 0,697,699,1,0,0,0,698,692,1,0,0,0,698,693,1,0,0,0,699,107,1,0,0,0,700, - 701,5,19,0,0,701,713,5,75,0,0,702,703,5,94,0,0,703,713,5,68,0,0,704,705, - 5,94,0,0,705,713,5,32,0,0,706,707,3,148,74,0,707,708,5,68,0,0,708,713, - 1,0,0,0,709,710,3,148,74,0,710,711,5,32,0,0,711,713,1,0,0,0,712,700,1, - 0,0,0,712,702,1,0,0,0,712,704,1,0,0,0,712,706,1,0,0,0,712,709,1,0,0,0, - 713,109,1,0,0,0,714,715,3,116,58,0,715,716,5,0,0,1,716,111,1,0,0,0,717, - 774,3,160,80,0,718,719,3,160,80,0,719,720,5,130,0,0,720,721,3,160,80, - 0,721,728,3,112,56,0,722,723,5,116,0,0,723,724,3,160,80,0,724,725,3,112, - 56,0,725,727,1,0,0,0,726,722,1,0,0,0,727,730,1,0,0,0,728,726,1,0,0,0, - 728,729,1,0,0,0,729,732,1,0,0,0,730,728,1,0,0,0,731,733,5,116,0,0,732, - 731,1,0,0,0,732,733,1,0,0,0,733,734,1,0,0,0,734,735,5,149,0,0,735,774, - 1,0,0,0,736,737,3,160,80,0,737,738,5,130,0,0,738,743,3,162,81,0,739,740, - 5,116,0,0,740,742,3,162,81,0,741,739,1,0,0,0,742,745,1,0,0,0,743,741, - 1,0,0,0,743,744,1,0,0,0,744,747,1,0,0,0,745,743,1,0,0,0,746,748,5,116, - 0,0,747,746,1,0,0,0,747,748,1,0,0,0,748,749,1,0,0,0,749,750,5,149,0,0, - 750,774,1,0,0,0,751,752,3,160,80,0,752,753,5,130,0,0,753,758,3,112,56, - 0,754,755,5,116,0,0,755,757,3,112,56,0,756,754,1,0,0,0,757,760,1,0,0, - 0,758,756,1,0,0,0,758,759,1,0,0,0,759,762,1,0,0,0,760,758,1,0,0,0,761, - 763,5,116,0,0,762,761,1,0,0,0,762,763,1,0,0,0,763,764,1,0,0,0,764,765, - 5,149,0,0,765,774,1,0,0,0,766,767,3,160,80,0,767,769,5,130,0,0,768,770, - 3,114,57,0,769,768,1,0,0,0,769,770,1,0,0,0,770,771,1,0,0,0,771,772,5, - 149,0,0,772,774,1,0,0,0,773,717,1,0,0,0,773,718,1,0,0,0,773,736,1,0,0, - 0,773,751,1,0,0,0,773,766,1,0,0,0,774,113,1,0,0,0,775,780,3,116,58,0, - 776,777,5,116,0,0,777,779,3,116,58,0,778,776,1,0,0,0,779,782,1,0,0,0, - 780,778,1,0,0,0,780,781,1,0,0,0,781,784,1,0,0,0,782,780,1,0,0,0,783,785, - 5,116,0,0,784,783,1,0,0,0,784,785,1,0,0,0,785,115,1,0,0,0,786,787,6,58, - -1,0,787,789,5,12,0,0,788,790,3,116,58,0,789,788,1,0,0,0,789,790,1,0, - 0,0,790,796,1,0,0,0,791,792,5,98,0,0,792,793,3,116,58,0,793,794,5,83, - 0,0,794,795,3,116,58,0,795,797,1,0,0,0,796,791,1,0,0,0,797,798,1,0,0, - 0,798,796,1,0,0,0,798,799,1,0,0,0,799,802,1,0,0,0,800,801,5,25,0,0,801, - 803,3,116,58,0,802,800,1,0,0,0,802,803,1,0,0,0,803,804,1,0,0,0,804,805, - 5,26,0,0,805,936,1,0,0,0,806,807,5,13,0,0,807,808,5,130,0,0,808,809,3, - 116,58,0,809,810,5,6,0,0,810,811,3,112,56,0,811,812,5,149,0,0,812,936, - 1,0,0,0,813,814,5,20,0,0,814,936,5,110,0,0,815,816,5,45,0,0,816,817,3, - 116,58,0,817,818,3,152,76,0,818,936,1,0,0,0,819,820,5,82,0,0,820,821, - 5,130,0,0,821,822,3,116,58,0,822,823,5,34,0,0,823,826,3,116,58,0,824, - 825,5,33,0,0,825,827,3,116,58,0,826,824,1,0,0,0,826,827,1,0,0,0,827,828, - 1,0,0,0,828,829,5,149,0,0,829,936,1,0,0,0,830,831,5,86,0,0,831,936,5, - 110,0,0,832,833,5,91,0,0,833,834,5,130,0,0,834,835,7,9,0,0,835,836,3, - 166,83,0,836,837,5,34,0,0,837,838,3,116,58,0,838,839,5,149,0,0,839,936, - 1,0,0,0,840,841,3,160,80,0,841,843,5,130,0,0,842,844,3,114,57,0,843,842, - 1,0,0,0,843,844,1,0,0,0,844,845,1,0,0,0,845,846,5,149,0,0,846,855,1,0, - 0,0,847,849,5,130,0,0,848,850,5,24,0,0,849,848,1,0,0,0,849,850,1,0,0, - 0,850,852,1,0,0,0,851,853,3,118,59,0,852,851,1,0,0,0,852,853,1,0,0,0, - 853,854,1,0,0,0,854,856,5,149,0,0,855,847,1,0,0,0,855,856,1,0,0,0,856, - 857,1,0,0,0,857,858,5,66,0,0,858,859,5,130,0,0,859,860,3,98,49,0,860, - 861,5,149,0,0,861,936,1,0,0,0,862,863,3,160,80,0,863,865,5,130,0,0,864, - 866,3,114,57,0,865,864,1,0,0,0,865,866,1,0,0,0,866,867,1,0,0,0,867,868, - 5,149,0,0,868,877,1,0,0,0,869,871,5,130,0,0,870,872,5,24,0,0,871,870, - 1,0,0,0,871,872,1,0,0,0,872,874,1,0,0,0,873,875,3,118,59,0,874,873,1, - 0,0,0,874,875,1,0,0,0,875,876,1,0,0,0,876,878,5,149,0,0,877,869,1,0,0, - 0,877,878,1,0,0,0,878,879,1,0,0,0,879,880,5,66,0,0,880,881,3,160,80,0, - 881,936,1,0,0,0,882,888,3,160,80,0,883,885,5,130,0,0,884,886,3,114,57, - 0,885,884,1,0,0,0,885,886,1,0,0,0,886,887,1,0,0,0,887,889,5,149,0,0,888, - 883,1,0,0,0,888,889,1,0,0,0,889,890,1,0,0,0,890,892,5,130,0,0,891,893, - 5,24,0,0,892,891,1,0,0,0,892,893,1,0,0,0,893,895,1,0,0,0,894,896,3,118, - 59,0,895,894,1,0,0,0,895,896,1,0,0,0,896,897,1,0,0,0,897,898,5,149,0, - 0,898,936,1,0,0,0,899,936,3,124,62,0,900,936,3,168,84,0,901,936,3,150, - 75,0,902,903,5,118,0,0,903,936,3,116,58,19,904,905,5,58,0,0,905,936,3, - 116,58,13,906,907,3,140,70,0,907,908,5,120,0,0,908,910,1,0,0,0,909,906, - 1,0,0,0,909,910,1,0,0,0,910,911,1,0,0,0,911,936,5,112,0,0,912,913,5,130, - 0,0,913,914,3,44,22,0,914,915,5,149,0,0,915,936,1,0,0,0,916,917,5,130, - 0,0,917,918,3,116,58,0,918,919,5,149,0,0,919,936,1,0,0,0,920,921,5,130, - 0,0,921,922,3,114,57,0,922,923,5,149,0,0,923,936,1,0,0,0,924,926,5,129, - 0,0,925,927,3,114,57,0,926,925,1,0,0,0,926,927,1,0,0,0,927,928,1,0,0, - 0,928,936,5,148,0,0,929,931,5,128,0,0,930,932,3,40,20,0,931,930,1,0,0, - 0,931,932,1,0,0,0,932,933,1,0,0,0,933,936,5,147,0,0,934,936,3,132,66, - 0,935,786,1,0,0,0,935,806,1,0,0,0,935,813,1,0,0,0,935,815,1,0,0,0,935, - 819,1,0,0,0,935,830,1,0,0,0,935,832,1,0,0,0,935,840,1,0,0,0,935,862,1, - 0,0,0,935,882,1,0,0,0,935,899,1,0,0,0,935,900,1,0,0,0,935,901,1,0,0,0, - 935,902,1,0,0,0,935,904,1,0,0,0,935,909,1,0,0,0,935,912,1,0,0,0,935,916, - 1,0,0,0,935,920,1,0,0,0,935,924,1,0,0,0,935,929,1,0,0,0,935,934,1,0,0, - 0,936,1041,1,0,0,0,937,941,10,18,0,0,938,942,5,112,0,0,939,942,5,151, - 0,0,940,942,5,138,0,0,941,938,1,0,0,0,941,939,1,0,0,0,941,940,1,0,0,0, - 942,943,1,0,0,0,943,1040,3,116,58,19,944,948,10,17,0,0,945,949,5,139, - 0,0,946,949,5,118,0,0,947,949,5,117,0,0,948,945,1,0,0,0,948,946,1,0,0, - 0,948,947,1,0,0,0,949,950,1,0,0,0,950,1040,3,116,58,18,951,976,10,16, - 0,0,952,977,5,121,0,0,953,977,5,122,0,0,954,977,5,133,0,0,955,977,5,131, - 0,0,956,977,5,132,0,0,957,977,5,123,0,0,958,977,5,124,0,0,959,961,5,58, - 0,0,960,959,1,0,0,0,960,961,1,0,0,0,961,962,1,0,0,0,962,964,5,42,0,0, - 963,965,5,15,0,0,964,963,1,0,0,0,964,965,1,0,0,0,965,977,1,0,0,0,966, - 968,5,58,0,0,967,966,1,0,0,0,967,968,1,0,0,0,968,969,1,0,0,0,969,977, - 7,10,0,0,970,977,5,145,0,0,971,977,5,146,0,0,972,977,5,135,0,0,973,977, - 5,126,0,0,974,977,5,127,0,0,975,977,5,134,0,0,976,952,1,0,0,0,976,953, - 1,0,0,0,976,954,1,0,0,0,976,955,1,0,0,0,976,956,1,0,0,0,976,957,1,0,0, - 0,976,958,1,0,0,0,976,960,1,0,0,0,976,967,1,0,0,0,976,970,1,0,0,0,976, - 971,1,0,0,0,976,972,1,0,0,0,976,973,1,0,0,0,976,974,1,0,0,0,976,975,1, - 0,0,0,977,978,1,0,0,0,978,1040,3,116,58,17,979,980,10,14,0,0,980,981, - 5,137,0,0,981,1040,3,116,58,15,982,983,10,12,0,0,983,984,5,2,0,0,984, - 1040,3,116,58,13,985,986,10,11,0,0,986,987,5,63,0,0,987,1040,3,116,58, - 12,988,990,10,10,0,0,989,991,5,58,0,0,990,989,1,0,0,0,990,991,1,0,0,0, - 991,992,1,0,0,0,992,993,5,9,0,0,993,994,3,116,58,0,994,995,5,2,0,0,995, - 996,3,116,58,11,996,1040,1,0,0,0,997,998,10,9,0,0,998,999,5,140,0,0,999, - 1000,3,116,58,0,1000,1001,5,115,0,0,1001,1002,3,116,58,9,1002,1040,1, - 0,0,0,1003,1004,10,25,0,0,1004,1005,5,129,0,0,1005,1006,3,116,58,0,1006, - 1007,5,148,0,0,1007,1040,1,0,0,0,1008,1009,10,24,0,0,1009,1010,5,120, - 0,0,1010,1040,5,108,0,0,1011,1012,10,23,0,0,1012,1013,5,120,0,0,1013, - 1040,3,160,80,0,1014,1015,10,22,0,0,1015,1016,5,136,0,0,1016,1017,5,129, - 0,0,1017,1018,3,116,58,0,1018,1019,5,148,0,0,1019,1040,1,0,0,0,1020,1021, - 10,21,0,0,1021,1022,5,136,0,0,1022,1040,5,108,0,0,1023,1024,10,20,0,0, - 1024,1025,5,136,0,0,1025,1040,3,160,80,0,1026,1027,10,15,0,0,1027,1029, - 5,46,0,0,1028,1030,5,58,0,0,1029,1028,1,0,0,0,1029,1030,1,0,0,0,1030, - 1031,1,0,0,0,1031,1040,5,59,0,0,1032,1037,10,8,0,0,1033,1034,5,6,0,0, - 1034,1038,3,160,80,0,1035,1036,5,6,0,0,1036,1038,5,110,0,0,1037,1033, - 1,0,0,0,1037,1035,1,0,0,0,1038,1040,1,0,0,0,1039,937,1,0,0,0,1039,944, - 1,0,0,0,1039,951,1,0,0,0,1039,979,1,0,0,0,1039,982,1,0,0,0,1039,985,1, - 0,0,0,1039,988,1,0,0,0,1039,997,1,0,0,0,1039,1003,1,0,0,0,1039,1008,1, - 0,0,0,1039,1011,1,0,0,0,1039,1014,1,0,0,0,1039,1020,1,0,0,0,1039,1023, - 1,0,0,0,1039,1026,1,0,0,0,1039,1032,1,0,0,0,1040,1043,1,0,0,0,1041,1039, - 1,0,0,0,1041,1042,1,0,0,0,1042,117,1,0,0,0,1043,1041,1,0,0,0,1044,1049, - 3,120,60,0,1045,1046,5,116,0,0,1046,1048,3,120,60,0,1047,1045,1,0,0,0, - 1048,1051,1,0,0,0,1049,1047,1,0,0,0,1049,1050,1,0,0,0,1050,1053,1,0,0, - 0,1051,1049,1,0,0,0,1052,1054,5,116,0,0,1053,1052,1,0,0,0,1053,1054,1, - 0,0,0,1054,119,1,0,0,0,1055,1058,3,122,61,0,1056,1058,3,116,58,0,1057, - 1055,1,0,0,0,1057,1056,1,0,0,0,1058,121,1,0,0,0,1059,1060,5,130,0,0,1060, - 1065,3,160,80,0,1061,1062,5,116,0,0,1062,1064,3,160,80,0,1063,1061,1, - 0,0,0,1064,1067,1,0,0,0,1065,1063,1,0,0,0,1065,1066,1,0,0,0,1066,1069, - 1,0,0,0,1067,1065,1,0,0,0,1068,1070,5,116,0,0,1069,1068,1,0,0,0,1069, - 1070,1,0,0,0,1070,1071,1,0,0,0,1071,1072,5,149,0,0,1072,1085,1,0,0,0, - 1073,1078,3,160,80,0,1074,1075,5,116,0,0,1075,1077,3,160,80,0,1076,1074, - 1,0,0,0,1077,1080,1,0,0,0,1078,1076,1,0,0,0,1078,1079,1,0,0,0,1079,1082, - 1,0,0,0,1080,1078,1,0,0,0,1081,1083,5,116,0,0,1082,1081,1,0,0,0,1082, - 1083,1,0,0,0,1083,1085,1,0,0,0,1084,1059,1,0,0,0,1084,1073,1,0,0,0,1085, - 1086,1,0,0,0,1086,1087,5,111,0,0,1087,1088,3,116,58,0,1088,123,1,0,0, - 0,1089,1090,5,132,0,0,1090,1094,3,160,80,0,1091,1093,3,126,63,0,1092, - 1091,1,0,0,0,1093,1096,1,0,0,0,1094,1092,1,0,0,0,1094,1095,1,0,0,0,1095, - 1097,1,0,0,0,1096,1094,1,0,0,0,1097,1098,5,151,0,0,1098,1099,5,124,0, - 0,1099,1118,1,0,0,0,1100,1101,5,132,0,0,1101,1105,3,160,80,0,1102,1104, - 3,126,63,0,1103,1102,1,0,0,0,1104,1107,1,0,0,0,1105,1103,1,0,0,0,1105, - 1106,1,0,0,0,1106,1108,1,0,0,0,1107,1105,1,0,0,0,1108,1110,5,124,0,0, - 1109,1111,3,124,62,0,1110,1109,1,0,0,0,1110,1111,1,0,0,0,1111,1112,1, - 0,0,0,1112,1113,5,132,0,0,1113,1114,5,151,0,0,1114,1115,3,160,80,0,1115, - 1116,5,124,0,0,1116,1118,1,0,0,0,1117,1089,1,0,0,0,1117,1100,1,0,0,0, - 1118,125,1,0,0,0,1119,1120,3,160,80,0,1120,1121,5,122,0,0,1121,1122,3, - 166,83,0,1122,1131,1,0,0,0,1123,1124,3,160,80,0,1124,1125,5,122,0,0,1125, - 1126,5,128,0,0,1126,1127,3,116,58,0,1127,1128,5,147,0,0,1128,1131,1,0, - 0,0,1129,1131,3,160,80,0,1130,1119,1,0,0,0,1130,1123,1,0,0,0,1130,1129, - 1,0,0,0,1131,127,1,0,0,0,1132,1137,3,130,65,0,1133,1134,5,116,0,0,1134, - 1136,3,130,65,0,1135,1133,1,0,0,0,1136,1139,1,0,0,0,1137,1135,1,0,0,0, - 1137,1138,1,0,0,0,1138,1141,1,0,0,0,1139,1137,1,0,0,0,1140,1142,5,116, - 0,0,1141,1140,1,0,0,0,1141,1142,1,0,0,0,1142,129,1,0,0,0,1143,1144,3, - 160,80,0,1144,1145,5,6,0,0,1145,1146,5,130,0,0,1146,1147,3,44,22,0,1147, - 1148,5,149,0,0,1148,1154,1,0,0,0,1149,1150,3,116,58,0,1150,1151,5,6,0, - 0,1151,1152,3,160,80,0,1152,1154,1,0,0,0,1153,1143,1,0,0,0,1153,1149, - 1,0,0,0,1154,131,1,0,0,0,1155,1163,3,164,82,0,1156,1157,3,140,70,0,1157, - 1158,5,120,0,0,1158,1160,1,0,0,0,1159,1156,1,0,0,0,1159,1160,1,0,0,0, - 1160,1161,1,0,0,0,1161,1163,3,134,67,0,1162,1155,1,0,0,0,1162,1159,1, - 0,0,0,1163,133,1,0,0,0,1164,1169,3,160,80,0,1165,1166,5,120,0,0,1166, - 1168,3,160,80,0,1167,1165,1,0,0,0,1168,1171,1,0,0,0,1169,1167,1,0,0,0, - 1169,1170,1,0,0,0,1170,135,1,0,0,0,1171,1169,1,0,0,0,1172,1173,6,68,-1, - 0,1173,1182,3,140,70,0,1174,1182,3,138,69,0,1175,1176,5,130,0,0,1176, - 1177,3,44,22,0,1177,1178,5,149,0,0,1178,1182,1,0,0,0,1179,1182,3,124, - 62,0,1180,1182,3,164,82,0,1181,1172,1,0,0,0,1181,1174,1,0,0,0,1181,1175, - 1,0,0,0,1181,1179,1,0,0,0,1181,1180,1,0,0,0,1182,1191,1,0,0,0,1183,1187, - 10,3,0,0,1184,1188,3,158,79,0,1185,1186,5,6,0,0,1186,1188,3,160,80,0, - 1187,1184,1,0,0,0,1187,1185,1,0,0,0,1188,1190,1,0,0,0,1189,1183,1,0,0, - 0,1190,1193,1,0,0,0,1191,1189,1,0,0,0,1191,1192,1,0,0,0,1192,137,1,0, - 0,0,1193,1191,1,0,0,0,1194,1195,3,160,80,0,1195,1197,5,130,0,0,1196,1198, - 3,142,71,0,1197,1196,1,0,0,0,1197,1198,1,0,0,0,1198,1199,1,0,0,0,1199, - 1200,5,149,0,0,1200,139,1,0,0,0,1201,1202,3,144,72,0,1202,1203,5,120, - 0,0,1203,1205,1,0,0,0,1204,1201,1,0,0,0,1204,1205,1,0,0,0,1205,1206,1, - 0,0,0,1206,1207,3,160,80,0,1207,141,1,0,0,0,1208,1213,3,116,58,0,1209, - 1210,5,116,0,0,1210,1212,3,116,58,0,1211,1209,1,0,0,0,1212,1215,1,0,0, - 0,1213,1211,1,0,0,0,1213,1214,1,0,0,0,1214,1217,1,0,0,0,1215,1213,1,0, - 0,0,1216,1218,5,116,0,0,1217,1216,1,0,0,0,1217,1218,1,0,0,0,1218,143, - 1,0,0,0,1219,1220,3,160,80,0,1220,145,1,0,0,0,1221,1230,5,106,0,0,1222, - 1223,5,120,0,0,1223,1230,7,11,0,0,1224,1225,5,108,0,0,1225,1227,5,120, - 0,0,1226,1228,7,11,0,0,1227,1226,1,0,0,0,1227,1228,1,0,0,0,1228,1230, - 1,0,0,0,1229,1221,1,0,0,0,1229,1222,1,0,0,0,1229,1224,1,0,0,0,1230,147, - 1,0,0,0,1231,1233,7,12,0,0,1232,1231,1,0,0,0,1232,1233,1,0,0,0,1233,1240, - 1,0,0,0,1234,1241,3,146,73,0,1235,1241,5,107,0,0,1236,1241,5,108,0,0, - 1237,1241,5,109,0,0,1238,1241,5,43,0,0,1239,1241,5,57,0,0,1240,1234,1, - 0,0,0,1240,1235,1,0,0,0,1240,1236,1,0,0,0,1240,1237,1,0,0,0,1240,1238, - 1,0,0,0,1240,1239,1,0,0,0,1241,149,1,0,0,0,1242,1246,3,148,74,0,1243, - 1246,5,110,0,0,1244,1246,5,59,0,0,1245,1242,1,0,0,0,1245,1243,1,0,0,0, - 1245,1244,1,0,0,0,1246,151,1,0,0,0,1247,1248,7,13,0,0,1248,153,1,0,0, - 0,1249,1250,7,14,0,0,1250,155,1,0,0,0,1251,1252,7,15,0,0,1252,157,1,0, - 0,0,1253,1256,5,105,0,0,1254,1256,3,156,78,0,1255,1253,1,0,0,0,1255,1254, - 1,0,0,0,1256,159,1,0,0,0,1257,1261,5,105,0,0,1258,1261,3,152,76,0,1259, - 1261,3,154,77,0,1260,1257,1,0,0,0,1260,1258,1,0,0,0,1260,1259,1,0,0,0, - 1261,161,1,0,0,0,1262,1263,3,166,83,0,1263,1264,5,122,0,0,1264,1265,3, - 148,74,0,1265,163,1,0,0,0,1266,1267,5,128,0,0,1267,1268,3,160,80,0,1268, - 1269,5,147,0,0,1269,165,1,0,0,0,1270,1273,5,110,0,0,1271,1273,3,168,84, - 0,1272,1270,1,0,0,0,1272,1271,1,0,0,0,1273,167,1,0,0,0,1274,1278,5,142, - 0,0,1275,1277,3,170,85,0,1276,1275,1,0,0,0,1277,1280,1,0,0,0,1278,1276, - 1,0,0,0,1278,1279,1,0,0,0,1279,1281,1,0,0,0,1280,1278,1,0,0,0,1281,1282, - 5,144,0,0,1282,169,1,0,0,0,1283,1284,5,157,0,0,1284,1285,3,116,58,0,1285, - 1286,5,147,0,0,1286,1289,1,0,0,0,1287,1289,5,156,0,0,1288,1283,1,0,0, - 0,1288,1287,1,0,0,0,1289,171,1,0,0,0,1290,1294,5,143,0,0,1291,1293,3, - 174,87,0,1292,1291,1,0,0,0,1293,1296,1,0,0,0,1294,1292,1,0,0,0,1294,1295, - 1,0,0,0,1295,1297,1,0,0,0,1296,1294,1,0,0,0,1297,1298,5,0,0,1,1298,173, - 1,0,0,0,1299,1300,5,159,0,0,1300,1301,3,116,58,0,1301,1302,5,147,0,0, - 1302,1305,1,0,0,0,1303,1305,5,158,0,0,1304,1299,1,0,0,0,1304,1303,1,0, - 0,0,1305,175,1,0,0,0,168,179,186,195,202,206,220,224,227,231,234,241, - 245,254,259,268,276,283,287,293,298,306,313,319,331,339,353,357,362,372, - 381,384,388,391,395,398,401,404,407,411,415,418,421,424,428,431,440,446, - 467,484,501,507,513,524,526,537,540,546,554,560,562,566,571,574,577,581, - 585,588,590,593,597,601,604,606,608,613,624,630,637,642,646,650,656,658, - 665,673,676,679,698,712,728,732,743,747,758,762,769,773,780,784,789,798, - 802,826,843,849,852,855,865,871,874,877,885,888,892,895,909,926,931,935, - 941,948,960,964,967,976,990,1029,1037,1039,1041,1049,1053,1057,1065,1069, - 1078,1082,1084,1094,1105,1110,1117,1130,1137,1141,1153,1159,1162,1169, - 1181,1187,1191,1197,1204,1213,1217,1227,1229,1232,1240,1245,1255,1260, - 1272,1278,1288,1294,1304 + 1,62,1,62,1,62,1,62,5,62,1104,8,62,10,62,12,62,1107,9,62,1,62,1,62,1, + 62,1,62,1,62,1,62,3,62,1115,8,62,1,62,1,62,1,62,1,62,1,62,3,62,1122,8, + 62,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,3,63,1135,8, + 63,1,64,1,64,1,64,5,64,1140,8,64,10,64,12,64,1143,9,64,1,64,3,64,1146, + 8,64,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,3,65,1158,8,65, + 1,66,1,66,1,66,1,66,3,66,1164,8,66,1,66,3,66,1167,8,66,1,67,1,67,1,67, + 5,67,1172,8,67,10,67,12,67,1175,9,67,1,68,1,68,1,68,1,68,1,68,1,68,1, + 68,1,68,1,68,3,68,1186,8,68,1,68,1,68,1,68,1,68,3,68,1192,8,68,5,68,1194, + 8,68,10,68,12,68,1197,9,68,1,69,1,69,1,69,3,69,1202,8,69,1,69,1,69,1, + 70,1,70,1,70,3,70,1209,8,70,1,70,1,70,1,71,1,71,1,71,5,71,1216,8,71,10, + 71,12,71,1219,9,71,1,71,3,71,1222,8,71,1,72,1,72,1,73,1,73,1,73,1,73, + 1,73,1,73,3,73,1232,8,73,3,73,1234,8,73,1,74,3,74,1237,8,74,1,74,1,74, + 1,74,1,74,1,74,1,74,3,74,1245,8,74,1,75,1,75,1,75,3,75,1250,8,75,1,76, + 1,76,1,77,1,77,1,78,1,78,1,79,1,79,3,79,1260,8,79,1,80,1,80,1,80,3,80, + 1265,8,80,1,81,1,81,1,81,1,81,1,82,1,82,1,82,1,82,1,83,1,83,3,83,1277, + 8,83,1,84,1,84,5,84,1281,8,84,10,84,12,84,1284,9,84,1,84,1,84,1,85,1, + 85,1,85,1,85,1,85,3,85,1293,8,85,1,86,1,86,5,86,1297,8,86,10,86,12,86, + 1300,9,86,1,86,1,86,1,87,1,87,1,87,1,87,1,87,3,87,1309,8,87,1,87,0,3, + 78,116,136,88,0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38, + 40,42,44,46,48,50,52,54,56,58,60,62,64,66,68,70,72,74,76,78,80,82,84, + 86,88,90,92,94,96,98,100,102,104,106,108,110,112,114,116,118,120,122, + 124,126,128,130,132,134,136,138,140,142,144,146,148,150,152,154,156,158, + 160,162,164,166,168,170,172,174,0,16,2,0,18,18,74,74,2,0,44,44,51,51, + 3,0,1,1,4,4,8,8,4,0,1,1,3,4,8,8,80,80,2,0,51,51,73,73,2,0,1,1,4,4,2,0, + 7,7,22,23,2,0,30,30,49,49,2,0,71,71,76,76,3,0,10,10,50,50,90,90,2,0,41, + 41,53,53,1,0,107,108,2,0,118,118,139,139,7,0,21,21,38,38,55,56,70,70, + 78,78,97,97,103,103,16,0,1,13,15,20,22,28,30,30,32,37,39,42,44,51,53, + 54,58,58,60,69,71,77,79,83,85,92,94,96,98,99,101,102,4,0,20,20,30,30, + 39,39,48,48,1479,0,179,1,0,0,0,2,186,1,0,0,0,4,188,1,0,0,0,6,190,1,0, + 0,0,8,197,1,0,0,0,10,220,1,0,0,0,12,222,1,0,0,0,14,229,1,0,0,0,16,236, + 1,0,0,0,18,249,1,0,0,0,20,261,1,0,0,0,22,270,1,0,0,0,24,278,1,0,0,0,26, + 300,1,0,0,0,28,315,1,0,0,0,30,324,1,0,0,0,32,329,1,0,0,0,34,333,1,0,0, + 0,36,335,1,0,0,0,38,344,1,0,0,0,40,348,1,0,0,0,42,362,1,0,0,0,44,366, + 1,0,0,0,46,381,1,0,0,0,48,384,1,0,0,0,50,433,1,0,0,0,52,436,1,0,0,0,54, + 442,1,0,0,0,56,446,1,0,0,0,58,452,1,0,0,0,60,470,1,0,0,0,62,473,1,0,0, + 0,64,476,1,0,0,0,66,486,1,0,0,0,68,489,1,0,0,0,70,493,1,0,0,0,72,526, + 1,0,0,0,74,528,1,0,0,0,76,531,1,0,0,0,78,546,1,0,0,0,80,608,1,0,0,0,82, + 613,1,0,0,0,84,624,1,0,0,0,86,626,1,0,0,0,88,632,1,0,0,0,90,640,1,0,0, + 0,92,658,1,0,0,0,94,660,1,0,0,0,96,668,1,0,0,0,98,673,1,0,0,0,100,681, + 1,0,0,0,102,685,1,0,0,0,104,689,1,0,0,0,106,698,1,0,0,0,108,712,1,0,0, + 0,110,714,1,0,0,0,112,773,1,0,0,0,114,775,1,0,0,0,116,935,1,0,0,0,118, + 1044,1,0,0,0,120,1057,1,0,0,0,122,1084,1,0,0,0,124,1121,1,0,0,0,126,1134, + 1,0,0,0,128,1136,1,0,0,0,130,1157,1,0,0,0,132,1166,1,0,0,0,134,1168,1, + 0,0,0,136,1185,1,0,0,0,138,1198,1,0,0,0,140,1208,1,0,0,0,142,1212,1,0, + 0,0,144,1223,1,0,0,0,146,1233,1,0,0,0,148,1236,1,0,0,0,150,1249,1,0,0, + 0,152,1251,1,0,0,0,154,1253,1,0,0,0,156,1255,1,0,0,0,158,1259,1,0,0,0, + 160,1264,1,0,0,0,162,1266,1,0,0,0,164,1270,1,0,0,0,166,1276,1,0,0,0,168, + 1278,1,0,0,0,170,1292,1,0,0,0,172,1294,1,0,0,0,174,1308,1,0,0,0,176,178, + 3,2,1,0,177,176,1,0,0,0,178,181,1,0,0,0,179,177,1,0,0,0,179,180,1,0,0, + 0,180,182,1,0,0,0,181,179,1,0,0,0,182,183,5,0,0,1,183,1,1,0,0,0,184,187, + 3,6,3,0,185,187,3,10,5,0,186,184,1,0,0,0,186,185,1,0,0,0,187,3,1,0,0, + 0,188,189,3,116,58,0,189,5,1,0,0,0,190,191,5,52,0,0,191,195,3,160,80, + 0,192,193,5,115,0,0,193,194,5,122,0,0,194,196,3,4,2,0,195,192,1,0,0,0, + 195,196,1,0,0,0,196,7,1,0,0,0,197,202,3,160,80,0,198,199,5,116,0,0,199, + 201,3,160,80,0,200,198,1,0,0,0,201,204,1,0,0,0,202,200,1,0,0,0,202,203, + 1,0,0,0,203,206,1,0,0,0,204,202,1,0,0,0,205,207,5,116,0,0,206,205,1,0, + 0,0,206,207,1,0,0,0,207,9,1,0,0,0,208,221,3,12,6,0,209,221,3,14,7,0,210, + 221,3,18,9,0,211,221,3,20,10,0,212,221,3,22,11,0,213,221,3,26,13,0,214, + 221,3,24,12,0,215,221,3,28,14,0,216,221,3,30,15,0,217,221,3,36,18,0,218, + 221,3,32,16,0,219,221,3,34,17,0,220,208,1,0,0,0,220,209,1,0,0,0,220,210, + 1,0,0,0,220,211,1,0,0,0,220,212,1,0,0,0,220,213,1,0,0,0,220,214,1,0,0, + 0,220,215,1,0,0,0,220,216,1,0,0,0,220,217,1,0,0,0,220,218,1,0,0,0,220, + 219,1,0,0,0,221,11,1,0,0,0,222,224,5,72,0,0,223,225,3,4,2,0,224,223,1, + 0,0,0,224,225,1,0,0,0,225,227,1,0,0,0,226,228,5,150,0,0,227,226,1,0,0, + 0,227,228,1,0,0,0,228,13,1,0,0,0,229,231,5,84,0,0,230,232,3,4,2,0,231, + 230,1,0,0,0,231,232,1,0,0,0,232,234,1,0,0,0,233,235,5,150,0,0,234,233, + 1,0,0,0,234,235,1,0,0,0,235,15,1,0,0,0,236,245,5,14,0,0,237,238,5,130, + 0,0,238,241,3,160,80,0,239,240,5,115,0,0,240,242,3,160,80,0,241,239,1, + 0,0,0,241,242,1,0,0,0,242,243,1,0,0,0,243,244,5,149,0,0,244,246,1,0,0, + 0,245,237,1,0,0,0,245,246,1,0,0,0,246,247,1,0,0,0,247,248,3,36,18,0,248, + 17,1,0,0,0,249,250,5,93,0,0,250,254,3,36,18,0,251,253,3,16,8,0,252,251, + 1,0,0,0,253,256,1,0,0,0,254,252,1,0,0,0,254,255,1,0,0,0,255,259,1,0,0, + 0,256,254,1,0,0,0,257,258,5,29,0,0,258,260,3,36,18,0,259,257,1,0,0,0, + 259,260,1,0,0,0,260,19,1,0,0,0,261,262,5,40,0,0,262,263,5,130,0,0,263, + 264,3,4,2,0,264,265,5,149,0,0,265,268,3,10,5,0,266,267,5,25,0,0,267,269, + 3,10,5,0,268,266,1,0,0,0,268,269,1,0,0,0,269,21,1,0,0,0,270,271,5,100, + 0,0,271,272,5,130,0,0,272,273,3,4,2,0,273,274,5,149,0,0,274,276,3,10, + 5,0,275,277,5,150,0,0,276,275,1,0,0,0,276,277,1,0,0,0,277,23,1,0,0,0, + 278,279,5,33,0,0,279,283,5,130,0,0,280,284,3,6,3,0,281,284,3,30,15,0, + 282,284,3,4,2,0,283,280,1,0,0,0,283,281,1,0,0,0,283,282,1,0,0,0,283,284, + 1,0,0,0,284,285,1,0,0,0,285,287,5,150,0,0,286,288,3,4,2,0,287,286,1,0, + 0,0,287,288,1,0,0,0,288,289,1,0,0,0,289,293,5,150,0,0,290,294,3,6,3,0, + 291,294,3,30,15,0,292,294,3,4,2,0,293,290,1,0,0,0,293,291,1,0,0,0,293, + 292,1,0,0,0,293,294,1,0,0,0,294,295,1,0,0,0,295,296,5,149,0,0,296,298, + 3,10,5,0,297,299,5,150,0,0,298,297,1,0,0,0,298,299,1,0,0,0,299,25,1,0, + 0,0,300,301,5,33,0,0,301,302,5,130,0,0,302,303,5,52,0,0,303,306,3,160, + 80,0,304,305,5,116,0,0,305,307,3,160,80,0,306,304,1,0,0,0,306,307,1,0, + 0,0,307,308,1,0,0,0,308,309,5,42,0,0,309,310,3,4,2,0,310,311,5,149,0, + 0,311,313,3,10,5,0,312,314,5,150,0,0,313,312,1,0,0,0,313,314,1,0,0,0, + 314,27,1,0,0,0,315,316,5,31,0,0,316,317,3,160,80,0,317,319,5,130,0,0, + 318,320,3,8,4,0,319,318,1,0,0,0,319,320,1,0,0,0,320,321,1,0,0,0,321,322, + 5,149,0,0,322,323,3,36,18,0,323,29,1,0,0,0,324,325,3,4,2,0,325,326,5, + 115,0,0,326,327,5,122,0,0,327,328,3,4,2,0,328,31,1,0,0,0,329,331,3,4, + 2,0,330,332,5,150,0,0,331,330,1,0,0,0,331,332,1,0,0,0,332,33,1,0,0,0, + 333,334,5,150,0,0,334,35,1,0,0,0,335,339,5,128,0,0,336,338,3,2,1,0,337, + 336,1,0,0,0,338,341,1,0,0,0,339,337,1,0,0,0,339,340,1,0,0,0,340,342,1, + 0,0,0,341,339,1,0,0,0,342,343,5,147,0,0,343,37,1,0,0,0,344,345,3,4,2, + 0,345,346,5,115,0,0,346,347,3,4,2,0,347,39,1,0,0,0,348,353,3,38,19,0, + 349,350,5,116,0,0,350,352,3,38,19,0,351,349,1,0,0,0,352,355,1,0,0,0,353, + 351,1,0,0,0,353,354,1,0,0,0,354,357,1,0,0,0,355,353,1,0,0,0,356,358,5, + 116,0,0,357,356,1,0,0,0,357,358,1,0,0,0,358,41,1,0,0,0,359,363,3,44,22, + 0,360,363,3,48,24,0,361,363,3,124,62,0,362,359,1,0,0,0,362,360,1,0,0, + 0,362,361,1,0,0,0,363,364,1,0,0,0,364,365,5,0,0,1,365,43,1,0,0,0,366, + 372,3,46,23,0,367,368,5,95,0,0,368,369,5,1,0,0,369,371,3,46,23,0,370, + 367,1,0,0,0,371,374,1,0,0,0,372,370,1,0,0,0,372,373,1,0,0,0,373,45,1, + 0,0,0,374,372,1,0,0,0,375,382,3,48,24,0,376,377,5,130,0,0,377,378,3,44, + 22,0,378,379,5,149,0,0,379,382,1,0,0,0,380,382,3,164,82,0,381,375,1,0, + 0,0,381,376,1,0,0,0,381,380,1,0,0,0,382,47,1,0,0,0,383,385,3,50,25,0, + 384,383,1,0,0,0,384,385,1,0,0,0,385,386,1,0,0,0,386,388,5,79,0,0,387, + 389,5,24,0,0,388,387,1,0,0,0,388,389,1,0,0,0,389,391,1,0,0,0,390,392, + 3,52,26,0,391,390,1,0,0,0,391,392,1,0,0,0,392,393,1,0,0,0,393,395,3,114, + 57,0,394,396,3,54,27,0,395,394,1,0,0,0,395,396,1,0,0,0,396,398,1,0,0, + 0,397,399,3,56,28,0,398,397,1,0,0,0,398,399,1,0,0,0,399,401,1,0,0,0,400, + 402,3,60,30,0,401,400,1,0,0,0,401,402,1,0,0,0,402,404,1,0,0,0,403,405, + 3,62,31,0,404,403,1,0,0,0,404,405,1,0,0,0,405,407,1,0,0,0,406,408,3,64, + 32,0,407,406,1,0,0,0,407,408,1,0,0,0,408,411,1,0,0,0,409,410,5,102,0, + 0,410,412,7,0,0,0,411,409,1,0,0,0,411,412,1,0,0,0,412,415,1,0,0,0,413, + 414,5,102,0,0,414,416,5,89,0,0,415,413,1,0,0,0,415,416,1,0,0,0,416,418, + 1,0,0,0,417,419,3,66,33,0,418,417,1,0,0,0,418,419,1,0,0,0,419,421,1,0, + 0,0,420,422,3,58,29,0,421,420,1,0,0,0,421,422,1,0,0,0,422,424,1,0,0,0, + 423,425,3,68,34,0,424,423,1,0,0,0,424,425,1,0,0,0,425,428,1,0,0,0,426, + 429,3,72,36,0,427,429,3,74,37,0,428,426,1,0,0,0,428,427,1,0,0,0,428,429, + 1,0,0,0,429,431,1,0,0,0,430,432,3,76,38,0,431,430,1,0,0,0,431,432,1,0, + 0,0,432,49,1,0,0,0,433,434,5,102,0,0,434,435,3,128,64,0,435,51,1,0,0, + 0,436,437,5,88,0,0,437,440,5,108,0,0,438,439,5,102,0,0,439,441,5,85,0, + 0,440,438,1,0,0,0,440,441,1,0,0,0,441,53,1,0,0,0,442,443,5,34,0,0,443, + 444,3,78,39,0,444,55,1,0,0,0,445,447,7,1,0,0,446,445,1,0,0,0,446,447, + 1,0,0,0,447,448,1,0,0,0,448,449,5,5,0,0,449,450,5,47,0,0,450,451,3,114, + 57,0,451,57,1,0,0,0,452,453,5,101,0,0,453,454,3,160,80,0,454,455,5,6, + 0,0,455,456,5,130,0,0,456,457,3,98,49,0,457,467,5,149,0,0,458,459,5,116, + 0,0,459,460,3,160,80,0,460,461,5,6,0,0,461,462,5,130,0,0,462,463,3,98, + 49,0,463,464,5,149,0,0,464,466,1,0,0,0,465,458,1,0,0,0,466,469,1,0,0, + 0,467,465,1,0,0,0,467,468,1,0,0,0,468,59,1,0,0,0,469,467,1,0,0,0,470, + 471,5,69,0,0,471,472,3,116,58,0,472,61,1,0,0,0,473,474,5,99,0,0,474,475, + 3,116,58,0,475,63,1,0,0,0,476,477,5,36,0,0,477,484,5,11,0,0,478,479,7, + 0,0,0,479,480,5,130,0,0,480,481,3,114,57,0,481,482,5,149,0,0,482,485, + 1,0,0,0,483,485,3,114,57,0,484,478,1,0,0,0,484,483,1,0,0,0,485,65,1,0, + 0,0,486,487,5,37,0,0,487,488,3,116,58,0,488,67,1,0,0,0,489,490,5,64,0, + 0,490,491,5,11,0,0,491,492,3,88,44,0,492,69,1,0,0,0,493,494,5,64,0,0, + 494,495,5,11,0,0,495,496,3,114,57,0,496,71,1,0,0,0,497,498,5,54,0,0,498, + 501,3,116,58,0,499,500,5,116,0,0,500,502,3,116,58,0,501,499,1,0,0,0,501, + 502,1,0,0,0,502,507,1,0,0,0,503,504,5,102,0,0,504,508,5,85,0,0,505,506, + 5,11,0,0,506,508,3,114,57,0,507,503,1,0,0,0,507,505,1,0,0,0,507,508,1, + 0,0,0,508,527,1,0,0,0,509,510,5,54,0,0,510,513,3,116,58,0,511,512,5,102, + 0,0,512,514,5,85,0,0,513,511,1,0,0,0,513,514,1,0,0,0,514,515,1,0,0,0, + 515,516,5,61,0,0,516,517,3,116,58,0,517,527,1,0,0,0,518,519,5,54,0,0, + 519,520,3,116,58,0,520,521,5,61,0,0,521,524,3,116,58,0,522,523,5,11,0, + 0,523,525,3,114,57,0,524,522,1,0,0,0,524,525,1,0,0,0,525,527,1,0,0,0, + 526,497,1,0,0,0,526,509,1,0,0,0,526,518,1,0,0,0,527,73,1,0,0,0,528,529, + 5,61,0,0,529,530,3,116,58,0,530,75,1,0,0,0,531,532,5,81,0,0,532,533,3, + 94,47,0,533,77,1,0,0,0,534,535,6,39,-1,0,535,537,3,136,68,0,536,538,5, + 28,0,0,537,536,1,0,0,0,537,538,1,0,0,0,538,540,1,0,0,0,539,541,3,86,43, + 0,540,539,1,0,0,0,540,541,1,0,0,0,541,547,1,0,0,0,542,543,5,130,0,0,543, + 544,3,78,39,0,544,545,5,149,0,0,545,547,1,0,0,0,546,534,1,0,0,0,546,542, + 1,0,0,0,547,562,1,0,0,0,548,549,10,3,0,0,549,550,3,82,41,0,550,551,3, + 78,39,4,551,561,1,0,0,0,552,554,10,4,0,0,553,555,3,80,40,0,554,553,1, + 0,0,0,554,555,1,0,0,0,555,556,1,0,0,0,556,557,5,47,0,0,557,558,3,78,39, + 0,558,559,3,84,42,0,559,561,1,0,0,0,560,548,1,0,0,0,560,552,1,0,0,0,561, + 564,1,0,0,0,562,560,1,0,0,0,562,563,1,0,0,0,563,79,1,0,0,0,564,562,1, + 0,0,0,565,567,7,2,0,0,566,565,1,0,0,0,566,567,1,0,0,0,567,568,1,0,0,0, + 568,575,5,44,0,0,569,571,5,44,0,0,570,572,7,2,0,0,571,570,1,0,0,0,571, + 572,1,0,0,0,572,575,1,0,0,0,573,575,7,2,0,0,574,566,1,0,0,0,574,569,1, + 0,0,0,574,573,1,0,0,0,575,609,1,0,0,0,576,578,7,3,0,0,577,576,1,0,0,0, + 577,578,1,0,0,0,578,579,1,0,0,0,579,581,7,4,0,0,580,582,5,65,0,0,581, + 580,1,0,0,0,581,582,1,0,0,0,582,591,1,0,0,0,583,585,7,4,0,0,584,586,5, + 65,0,0,585,584,1,0,0,0,585,586,1,0,0,0,586,588,1,0,0,0,587,589,7,3,0, + 0,588,587,1,0,0,0,588,589,1,0,0,0,589,591,1,0,0,0,590,577,1,0,0,0,590, + 583,1,0,0,0,591,609,1,0,0,0,592,594,7,5,0,0,593,592,1,0,0,0,593,594,1, + 0,0,0,594,595,1,0,0,0,595,597,5,35,0,0,596,598,5,65,0,0,597,596,1,0,0, + 0,597,598,1,0,0,0,598,607,1,0,0,0,599,601,5,35,0,0,600,602,5,65,0,0,601, + 600,1,0,0,0,601,602,1,0,0,0,602,604,1,0,0,0,603,605,7,5,0,0,604,603,1, + 0,0,0,604,605,1,0,0,0,605,607,1,0,0,0,606,593,1,0,0,0,606,599,1,0,0,0, + 607,609,1,0,0,0,608,574,1,0,0,0,608,590,1,0,0,0,608,606,1,0,0,0,609,81, + 1,0,0,0,610,611,5,17,0,0,611,614,5,47,0,0,612,614,5,116,0,0,613,610,1, + 0,0,0,613,612,1,0,0,0,614,83,1,0,0,0,615,616,5,62,0,0,616,625,3,114,57, + 0,617,618,5,96,0,0,618,619,5,130,0,0,619,620,3,114,57,0,620,621,5,149, + 0,0,621,625,1,0,0,0,622,623,5,96,0,0,623,625,3,114,57,0,624,615,1,0,0, + 0,624,617,1,0,0,0,624,622,1,0,0,0,625,85,1,0,0,0,626,627,5,77,0,0,627, + 630,3,92,46,0,628,629,5,61,0,0,629,631,3,92,46,0,630,628,1,0,0,0,630, + 631,1,0,0,0,631,87,1,0,0,0,632,637,3,90,45,0,633,634,5,116,0,0,634,636, + 3,90,45,0,635,633,1,0,0,0,636,639,1,0,0,0,637,635,1,0,0,0,637,638,1,0, + 0,0,638,89,1,0,0,0,639,637,1,0,0,0,640,642,3,116,58,0,641,643,7,6,0,0, + 642,641,1,0,0,0,642,643,1,0,0,0,643,646,1,0,0,0,644,645,5,60,0,0,645, + 647,7,7,0,0,646,644,1,0,0,0,646,647,1,0,0,0,647,650,1,0,0,0,648,649,5, + 16,0,0,649,651,5,110,0,0,650,648,1,0,0,0,650,651,1,0,0,0,651,91,1,0,0, + 0,652,659,3,164,82,0,653,656,3,148,74,0,654,655,5,151,0,0,655,657,3,148, + 74,0,656,654,1,0,0,0,656,657,1,0,0,0,657,659,1,0,0,0,658,652,1,0,0,0, + 658,653,1,0,0,0,659,93,1,0,0,0,660,665,3,96,48,0,661,662,5,116,0,0,662, + 664,3,96,48,0,663,661,1,0,0,0,664,667,1,0,0,0,665,663,1,0,0,0,665,666, + 1,0,0,0,666,95,1,0,0,0,667,665,1,0,0,0,668,669,3,160,80,0,669,670,5,122, + 0,0,670,671,3,150,75,0,671,97,1,0,0,0,672,674,3,100,50,0,673,672,1,0, + 0,0,673,674,1,0,0,0,674,676,1,0,0,0,675,677,3,102,51,0,676,675,1,0,0, + 0,676,677,1,0,0,0,677,679,1,0,0,0,678,680,3,104,52,0,679,678,1,0,0,0, + 679,680,1,0,0,0,680,99,1,0,0,0,681,682,5,67,0,0,682,683,5,11,0,0,683, + 684,3,114,57,0,684,101,1,0,0,0,685,686,5,64,0,0,686,687,5,11,0,0,687, + 688,3,88,44,0,688,103,1,0,0,0,689,690,7,8,0,0,690,691,3,106,53,0,691, + 105,1,0,0,0,692,699,3,108,54,0,693,694,5,9,0,0,694,695,3,108,54,0,695, + 696,5,2,0,0,696,697,3,108,54,0,697,699,1,0,0,0,698,692,1,0,0,0,698,693, + 1,0,0,0,699,107,1,0,0,0,700,701,5,19,0,0,701,713,5,75,0,0,702,703,5,94, + 0,0,703,713,5,68,0,0,704,705,5,94,0,0,705,713,5,32,0,0,706,707,3,148, + 74,0,707,708,5,68,0,0,708,713,1,0,0,0,709,710,3,148,74,0,710,711,5,32, + 0,0,711,713,1,0,0,0,712,700,1,0,0,0,712,702,1,0,0,0,712,704,1,0,0,0,712, + 706,1,0,0,0,712,709,1,0,0,0,713,109,1,0,0,0,714,715,3,116,58,0,715,716, + 5,0,0,1,716,111,1,0,0,0,717,774,3,160,80,0,718,719,3,160,80,0,719,720, + 5,130,0,0,720,721,3,160,80,0,721,728,3,112,56,0,722,723,5,116,0,0,723, + 724,3,160,80,0,724,725,3,112,56,0,725,727,1,0,0,0,726,722,1,0,0,0,727, + 730,1,0,0,0,728,726,1,0,0,0,728,729,1,0,0,0,729,732,1,0,0,0,730,728,1, + 0,0,0,731,733,5,116,0,0,732,731,1,0,0,0,732,733,1,0,0,0,733,734,1,0,0, + 0,734,735,5,149,0,0,735,774,1,0,0,0,736,737,3,160,80,0,737,738,5,130, + 0,0,738,743,3,162,81,0,739,740,5,116,0,0,740,742,3,162,81,0,741,739,1, + 0,0,0,742,745,1,0,0,0,743,741,1,0,0,0,743,744,1,0,0,0,744,747,1,0,0,0, + 745,743,1,0,0,0,746,748,5,116,0,0,747,746,1,0,0,0,747,748,1,0,0,0,748, + 749,1,0,0,0,749,750,5,149,0,0,750,774,1,0,0,0,751,752,3,160,80,0,752, + 753,5,130,0,0,753,758,3,112,56,0,754,755,5,116,0,0,755,757,3,112,56,0, + 756,754,1,0,0,0,757,760,1,0,0,0,758,756,1,0,0,0,758,759,1,0,0,0,759,762, + 1,0,0,0,760,758,1,0,0,0,761,763,5,116,0,0,762,761,1,0,0,0,762,763,1,0, + 0,0,763,764,1,0,0,0,764,765,5,149,0,0,765,774,1,0,0,0,766,767,3,160,80, + 0,767,769,5,130,0,0,768,770,3,114,57,0,769,768,1,0,0,0,769,770,1,0,0, + 0,770,771,1,0,0,0,771,772,5,149,0,0,772,774,1,0,0,0,773,717,1,0,0,0,773, + 718,1,0,0,0,773,736,1,0,0,0,773,751,1,0,0,0,773,766,1,0,0,0,774,113,1, + 0,0,0,775,780,3,116,58,0,776,777,5,116,0,0,777,779,3,116,58,0,778,776, + 1,0,0,0,779,782,1,0,0,0,780,778,1,0,0,0,780,781,1,0,0,0,781,784,1,0,0, + 0,782,780,1,0,0,0,783,785,5,116,0,0,784,783,1,0,0,0,784,785,1,0,0,0,785, + 115,1,0,0,0,786,787,6,58,-1,0,787,789,5,12,0,0,788,790,3,116,58,0,789, + 788,1,0,0,0,789,790,1,0,0,0,790,796,1,0,0,0,791,792,5,98,0,0,792,793, + 3,116,58,0,793,794,5,83,0,0,794,795,3,116,58,0,795,797,1,0,0,0,796,791, + 1,0,0,0,797,798,1,0,0,0,798,796,1,0,0,0,798,799,1,0,0,0,799,802,1,0,0, + 0,800,801,5,25,0,0,801,803,3,116,58,0,802,800,1,0,0,0,802,803,1,0,0,0, + 803,804,1,0,0,0,804,805,5,26,0,0,805,936,1,0,0,0,806,807,5,13,0,0,807, + 808,5,130,0,0,808,809,3,116,58,0,809,810,5,6,0,0,810,811,3,112,56,0,811, + 812,5,149,0,0,812,936,1,0,0,0,813,814,5,20,0,0,814,936,5,110,0,0,815, + 816,5,45,0,0,816,817,3,116,58,0,817,818,3,152,76,0,818,936,1,0,0,0,819, + 820,5,82,0,0,820,821,5,130,0,0,821,822,3,116,58,0,822,823,5,34,0,0,823, + 826,3,116,58,0,824,825,5,33,0,0,825,827,3,116,58,0,826,824,1,0,0,0,826, + 827,1,0,0,0,827,828,1,0,0,0,828,829,5,149,0,0,829,936,1,0,0,0,830,831, + 5,86,0,0,831,936,5,110,0,0,832,833,5,91,0,0,833,834,5,130,0,0,834,835, + 7,9,0,0,835,836,3,166,83,0,836,837,5,34,0,0,837,838,3,116,58,0,838,839, + 5,149,0,0,839,936,1,0,0,0,840,841,3,160,80,0,841,843,5,130,0,0,842,844, + 3,114,57,0,843,842,1,0,0,0,843,844,1,0,0,0,844,845,1,0,0,0,845,846,5, + 149,0,0,846,855,1,0,0,0,847,849,5,130,0,0,848,850,5,24,0,0,849,848,1, + 0,0,0,849,850,1,0,0,0,850,852,1,0,0,0,851,853,3,118,59,0,852,851,1,0, + 0,0,852,853,1,0,0,0,853,854,1,0,0,0,854,856,5,149,0,0,855,847,1,0,0,0, + 855,856,1,0,0,0,856,857,1,0,0,0,857,858,5,66,0,0,858,859,5,130,0,0,859, + 860,3,98,49,0,860,861,5,149,0,0,861,936,1,0,0,0,862,863,3,160,80,0,863, + 865,5,130,0,0,864,866,3,114,57,0,865,864,1,0,0,0,865,866,1,0,0,0,866, + 867,1,0,0,0,867,868,5,149,0,0,868,877,1,0,0,0,869,871,5,130,0,0,870,872, + 5,24,0,0,871,870,1,0,0,0,871,872,1,0,0,0,872,874,1,0,0,0,873,875,3,118, + 59,0,874,873,1,0,0,0,874,875,1,0,0,0,875,876,1,0,0,0,876,878,5,149,0, + 0,877,869,1,0,0,0,877,878,1,0,0,0,878,879,1,0,0,0,879,880,5,66,0,0,880, + 881,3,160,80,0,881,936,1,0,0,0,882,888,3,160,80,0,883,885,5,130,0,0,884, + 886,3,114,57,0,885,884,1,0,0,0,885,886,1,0,0,0,886,887,1,0,0,0,887,889, + 5,149,0,0,888,883,1,0,0,0,888,889,1,0,0,0,889,890,1,0,0,0,890,892,5,130, + 0,0,891,893,5,24,0,0,892,891,1,0,0,0,892,893,1,0,0,0,893,895,1,0,0,0, + 894,896,3,118,59,0,895,894,1,0,0,0,895,896,1,0,0,0,896,897,1,0,0,0,897, + 898,5,149,0,0,898,936,1,0,0,0,899,936,3,124,62,0,900,936,3,168,84,0,901, + 936,3,150,75,0,902,903,5,118,0,0,903,936,3,116,58,19,904,905,5,58,0,0, + 905,936,3,116,58,13,906,907,3,140,70,0,907,908,5,120,0,0,908,910,1,0, + 0,0,909,906,1,0,0,0,909,910,1,0,0,0,910,911,1,0,0,0,911,936,5,112,0,0, + 912,913,5,130,0,0,913,914,3,44,22,0,914,915,5,149,0,0,915,936,1,0,0,0, + 916,917,5,130,0,0,917,918,3,116,58,0,918,919,5,149,0,0,919,936,1,0,0, + 0,920,921,5,130,0,0,921,922,3,114,57,0,922,923,5,149,0,0,923,936,1,0, + 0,0,924,926,5,129,0,0,925,927,3,114,57,0,926,925,1,0,0,0,926,927,1,0, + 0,0,927,928,1,0,0,0,928,936,5,148,0,0,929,931,5,128,0,0,930,932,3,40, + 20,0,931,930,1,0,0,0,931,932,1,0,0,0,932,933,1,0,0,0,933,936,5,147,0, + 0,934,936,3,132,66,0,935,786,1,0,0,0,935,806,1,0,0,0,935,813,1,0,0,0, + 935,815,1,0,0,0,935,819,1,0,0,0,935,830,1,0,0,0,935,832,1,0,0,0,935,840, + 1,0,0,0,935,862,1,0,0,0,935,882,1,0,0,0,935,899,1,0,0,0,935,900,1,0,0, + 0,935,901,1,0,0,0,935,902,1,0,0,0,935,904,1,0,0,0,935,909,1,0,0,0,935, + 912,1,0,0,0,935,916,1,0,0,0,935,920,1,0,0,0,935,924,1,0,0,0,935,929,1, + 0,0,0,935,934,1,0,0,0,936,1041,1,0,0,0,937,941,10,18,0,0,938,942,5,112, + 0,0,939,942,5,151,0,0,940,942,5,138,0,0,941,938,1,0,0,0,941,939,1,0,0, + 0,941,940,1,0,0,0,942,943,1,0,0,0,943,1040,3,116,58,19,944,948,10,17, + 0,0,945,949,5,139,0,0,946,949,5,118,0,0,947,949,5,117,0,0,948,945,1,0, + 0,0,948,946,1,0,0,0,948,947,1,0,0,0,949,950,1,0,0,0,950,1040,3,116,58, + 18,951,976,10,16,0,0,952,977,5,121,0,0,953,977,5,122,0,0,954,977,5,133, + 0,0,955,977,5,131,0,0,956,977,5,132,0,0,957,977,5,123,0,0,958,977,5,124, + 0,0,959,961,5,58,0,0,960,959,1,0,0,0,960,961,1,0,0,0,961,962,1,0,0,0, + 962,964,5,42,0,0,963,965,5,15,0,0,964,963,1,0,0,0,964,965,1,0,0,0,965, + 977,1,0,0,0,966,968,5,58,0,0,967,966,1,0,0,0,967,968,1,0,0,0,968,969, + 1,0,0,0,969,977,7,10,0,0,970,977,5,145,0,0,971,977,5,146,0,0,972,977, + 5,135,0,0,973,977,5,126,0,0,974,977,5,127,0,0,975,977,5,134,0,0,976,952, + 1,0,0,0,976,953,1,0,0,0,976,954,1,0,0,0,976,955,1,0,0,0,976,956,1,0,0, + 0,976,957,1,0,0,0,976,958,1,0,0,0,976,960,1,0,0,0,976,967,1,0,0,0,976, + 970,1,0,0,0,976,971,1,0,0,0,976,972,1,0,0,0,976,973,1,0,0,0,976,974,1, + 0,0,0,976,975,1,0,0,0,977,978,1,0,0,0,978,1040,3,116,58,17,979,980,10, + 14,0,0,980,981,5,137,0,0,981,1040,3,116,58,15,982,983,10,12,0,0,983,984, + 5,2,0,0,984,1040,3,116,58,13,985,986,10,11,0,0,986,987,5,63,0,0,987,1040, + 3,116,58,12,988,990,10,10,0,0,989,991,5,58,0,0,990,989,1,0,0,0,990,991, + 1,0,0,0,991,992,1,0,0,0,992,993,5,9,0,0,993,994,3,116,58,0,994,995,5, + 2,0,0,995,996,3,116,58,11,996,1040,1,0,0,0,997,998,10,9,0,0,998,999,5, + 140,0,0,999,1000,3,116,58,0,1000,1001,5,115,0,0,1001,1002,3,116,58,9, + 1002,1040,1,0,0,0,1003,1004,10,25,0,0,1004,1005,5,129,0,0,1005,1006,3, + 116,58,0,1006,1007,5,148,0,0,1007,1040,1,0,0,0,1008,1009,10,24,0,0,1009, + 1010,5,120,0,0,1010,1040,5,108,0,0,1011,1012,10,23,0,0,1012,1013,5,120, + 0,0,1013,1040,3,160,80,0,1014,1015,10,22,0,0,1015,1016,5,136,0,0,1016, + 1017,5,129,0,0,1017,1018,3,116,58,0,1018,1019,5,148,0,0,1019,1040,1,0, + 0,0,1020,1021,10,21,0,0,1021,1022,5,136,0,0,1022,1040,5,108,0,0,1023, + 1024,10,20,0,0,1024,1025,5,136,0,0,1025,1040,3,160,80,0,1026,1027,10, + 15,0,0,1027,1029,5,46,0,0,1028,1030,5,58,0,0,1029,1028,1,0,0,0,1029,1030, + 1,0,0,0,1030,1031,1,0,0,0,1031,1040,5,59,0,0,1032,1037,10,8,0,0,1033, + 1034,5,6,0,0,1034,1038,3,160,80,0,1035,1036,5,6,0,0,1036,1038,5,110,0, + 0,1037,1033,1,0,0,0,1037,1035,1,0,0,0,1038,1040,1,0,0,0,1039,937,1,0, + 0,0,1039,944,1,0,0,0,1039,951,1,0,0,0,1039,979,1,0,0,0,1039,982,1,0,0, + 0,1039,985,1,0,0,0,1039,988,1,0,0,0,1039,997,1,0,0,0,1039,1003,1,0,0, + 0,1039,1008,1,0,0,0,1039,1011,1,0,0,0,1039,1014,1,0,0,0,1039,1020,1,0, + 0,0,1039,1023,1,0,0,0,1039,1026,1,0,0,0,1039,1032,1,0,0,0,1040,1043,1, + 0,0,0,1041,1039,1,0,0,0,1041,1042,1,0,0,0,1042,117,1,0,0,0,1043,1041, + 1,0,0,0,1044,1049,3,120,60,0,1045,1046,5,116,0,0,1046,1048,3,120,60,0, + 1047,1045,1,0,0,0,1048,1051,1,0,0,0,1049,1047,1,0,0,0,1049,1050,1,0,0, + 0,1050,1053,1,0,0,0,1051,1049,1,0,0,0,1052,1054,5,116,0,0,1053,1052,1, + 0,0,0,1053,1054,1,0,0,0,1054,119,1,0,0,0,1055,1058,3,122,61,0,1056,1058, + 3,116,58,0,1057,1055,1,0,0,0,1057,1056,1,0,0,0,1058,121,1,0,0,0,1059, + 1060,5,130,0,0,1060,1065,3,160,80,0,1061,1062,5,116,0,0,1062,1064,3,160, + 80,0,1063,1061,1,0,0,0,1064,1067,1,0,0,0,1065,1063,1,0,0,0,1065,1066, + 1,0,0,0,1066,1069,1,0,0,0,1067,1065,1,0,0,0,1068,1070,5,116,0,0,1069, + 1068,1,0,0,0,1069,1070,1,0,0,0,1070,1071,1,0,0,0,1071,1072,5,149,0,0, + 1072,1085,1,0,0,0,1073,1078,3,160,80,0,1074,1075,5,116,0,0,1075,1077, + 3,160,80,0,1076,1074,1,0,0,0,1077,1080,1,0,0,0,1078,1076,1,0,0,0,1078, + 1079,1,0,0,0,1079,1082,1,0,0,0,1080,1078,1,0,0,0,1081,1083,5,116,0,0, + 1082,1081,1,0,0,0,1082,1083,1,0,0,0,1083,1085,1,0,0,0,1084,1059,1,0,0, + 0,1084,1073,1,0,0,0,1085,1086,1,0,0,0,1086,1087,5,111,0,0,1087,1088,3, + 116,58,0,1088,123,1,0,0,0,1089,1090,5,132,0,0,1090,1094,3,160,80,0,1091, + 1093,3,126,63,0,1092,1091,1,0,0,0,1093,1096,1,0,0,0,1094,1092,1,0,0,0, + 1094,1095,1,0,0,0,1095,1097,1,0,0,0,1096,1094,1,0,0,0,1097,1098,5,151, + 0,0,1098,1099,5,124,0,0,1099,1122,1,0,0,0,1100,1101,5,132,0,0,1101,1105, + 3,160,80,0,1102,1104,3,126,63,0,1103,1102,1,0,0,0,1104,1107,1,0,0,0,1105, + 1103,1,0,0,0,1105,1106,1,0,0,0,1106,1108,1,0,0,0,1107,1105,1,0,0,0,1108, + 1114,5,124,0,0,1109,1115,3,124,62,0,1110,1111,5,128,0,0,1111,1112,3,116, + 58,0,1112,1113,5,147,0,0,1113,1115,1,0,0,0,1114,1109,1,0,0,0,1114,1110, + 1,0,0,0,1114,1115,1,0,0,0,1115,1116,1,0,0,0,1116,1117,5,132,0,0,1117, + 1118,5,151,0,0,1118,1119,3,160,80,0,1119,1120,5,124,0,0,1120,1122,1,0, + 0,0,1121,1089,1,0,0,0,1121,1100,1,0,0,0,1122,125,1,0,0,0,1123,1124,3, + 160,80,0,1124,1125,5,122,0,0,1125,1126,3,166,83,0,1126,1135,1,0,0,0,1127, + 1128,3,160,80,0,1128,1129,5,122,0,0,1129,1130,5,128,0,0,1130,1131,3,116, + 58,0,1131,1132,5,147,0,0,1132,1135,1,0,0,0,1133,1135,3,160,80,0,1134, + 1123,1,0,0,0,1134,1127,1,0,0,0,1134,1133,1,0,0,0,1135,127,1,0,0,0,1136, + 1141,3,130,65,0,1137,1138,5,116,0,0,1138,1140,3,130,65,0,1139,1137,1, + 0,0,0,1140,1143,1,0,0,0,1141,1139,1,0,0,0,1141,1142,1,0,0,0,1142,1145, + 1,0,0,0,1143,1141,1,0,0,0,1144,1146,5,116,0,0,1145,1144,1,0,0,0,1145, + 1146,1,0,0,0,1146,129,1,0,0,0,1147,1148,3,160,80,0,1148,1149,5,6,0,0, + 1149,1150,5,130,0,0,1150,1151,3,44,22,0,1151,1152,5,149,0,0,1152,1158, + 1,0,0,0,1153,1154,3,116,58,0,1154,1155,5,6,0,0,1155,1156,3,160,80,0,1156, + 1158,1,0,0,0,1157,1147,1,0,0,0,1157,1153,1,0,0,0,1158,131,1,0,0,0,1159, + 1167,3,164,82,0,1160,1161,3,140,70,0,1161,1162,5,120,0,0,1162,1164,1, + 0,0,0,1163,1160,1,0,0,0,1163,1164,1,0,0,0,1164,1165,1,0,0,0,1165,1167, + 3,134,67,0,1166,1159,1,0,0,0,1166,1163,1,0,0,0,1167,133,1,0,0,0,1168, + 1173,3,160,80,0,1169,1170,5,120,0,0,1170,1172,3,160,80,0,1171,1169,1, + 0,0,0,1172,1175,1,0,0,0,1173,1171,1,0,0,0,1173,1174,1,0,0,0,1174,135, + 1,0,0,0,1175,1173,1,0,0,0,1176,1177,6,68,-1,0,1177,1186,3,140,70,0,1178, + 1186,3,138,69,0,1179,1180,5,130,0,0,1180,1181,3,44,22,0,1181,1182,5,149, + 0,0,1182,1186,1,0,0,0,1183,1186,3,124,62,0,1184,1186,3,164,82,0,1185, + 1176,1,0,0,0,1185,1178,1,0,0,0,1185,1179,1,0,0,0,1185,1183,1,0,0,0,1185, + 1184,1,0,0,0,1186,1195,1,0,0,0,1187,1191,10,3,0,0,1188,1192,3,158,79, + 0,1189,1190,5,6,0,0,1190,1192,3,160,80,0,1191,1188,1,0,0,0,1191,1189, + 1,0,0,0,1192,1194,1,0,0,0,1193,1187,1,0,0,0,1194,1197,1,0,0,0,1195,1193, + 1,0,0,0,1195,1196,1,0,0,0,1196,137,1,0,0,0,1197,1195,1,0,0,0,1198,1199, + 3,160,80,0,1199,1201,5,130,0,0,1200,1202,3,142,71,0,1201,1200,1,0,0,0, + 1201,1202,1,0,0,0,1202,1203,1,0,0,0,1203,1204,5,149,0,0,1204,139,1,0, + 0,0,1205,1206,3,144,72,0,1206,1207,5,120,0,0,1207,1209,1,0,0,0,1208,1205, + 1,0,0,0,1208,1209,1,0,0,0,1209,1210,1,0,0,0,1210,1211,3,160,80,0,1211, + 141,1,0,0,0,1212,1217,3,116,58,0,1213,1214,5,116,0,0,1214,1216,3,116, + 58,0,1215,1213,1,0,0,0,1216,1219,1,0,0,0,1217,1215,1,0,0,0,1217,1218, + 1,0,0,0,1218,1221,1,0,0,0,1219,1217,1,0,0,0,1220,1222,5,116,0,0,1221, + 1220,1,0,0,0,1221,1222,1,0,0,0,1222,143,1,0,0,0,1223,1224,3,160,80,0, + 1224,145,1,0,0,0,1225,1234,5,106,0,0,1226,1227,5,120,0,0,1227,1234,7, + 11,0,0,1228,1229,5,108,0,0,1229,1231,5,120,0,0,1230,1232,7,11,0,0,1231, + 1230,1,0,0,0,1231,1232,1,0,0,0,1232,1234,1,0,0,0,1233,1225,1,0,0,0,1233, + 1226,1,0,0,0,1233,1228,1,0,0,0,1234,147,1,0,0,0,1235,1237,7,12,0,0,1236, + 1235,1,0,0,0,1236,1237,1,0,0,0,1237,1244,1,0,0,0,1238,1245,3,146,73,0, + 1239,1245,5,107,0,0,1240,1245,5,108,0,0,1241,1245,5,109,0,0,1242,1245, + 5,43,0,0,1243,1245,5,57,0,0,1244,1238,1,0,0,0,1244,1239,1,0,0,0,1244, + 1240,1,0,0,0,1244,1241,1,0,0,0,1244,1242,1,0,0,0,1244,1243,1,0,0,0,1245, + 149,1,0,0,0,1246,1250,3,148,74,0,1247,1250,5,110,0,0,1248,1250,5,59,0, + 0,1249,1246,1,0,0,0,1249,1247,1,0,0,0,1249,1248,1,0,0,0,1250,151,1,0, + 0,0,1251,1252,7,13,0,0,1252,153,1,0,0,0,1253,1254,7,14,0,0,1254,155,1, + 0,0,0,1255,1256,7,15,0,0,1256,157,1,0,0,0,1257,1260,5,105,0,0,1258,1260, + 3,156,78,0,1259,1257,1,0,0,0,1259,1258,1,0,0,0,1260,159,1,0,0,0,1261, + 1265,5,105,0,0,1262,1265,3,152,76,0,1263,1265,3,154,77,0,1264,1261,1, + 0,0,0,1264,1262,1,0,0,0,1264,1263,1,0,0,0,1265,161,1,0,0,0,1266,1267, + 3,166,83,0,1267,1268,5,122,0,0,1268,1269,3,148,74,0,1269,163,1,0,0,0, + 1270,1271,5,128,0,0,1271,1272,3,160,80,0,1272,1273,5,147,0,0,1273,165, + 1,0,0,0,1274,1277,5,110,0,0,1275,1277,3,168,84,0,1276,1274,1,0,0,0,1276, + 1275,1,0,0,0,1277,167,1,0,0,0,1278,1282,5,142,0,0,1279,1281,3,170,85, + 0,1280,1279,1,0,0,0,1281,1284,1,0,0,0,1282,1280,1,0,0,0,1282,1283,1,0, + 0,0,1283,1285,1,0,0,0,1284,1282,1,0,0,0,1285,1286,5,144,0,0,1286,169, + 1,0,0,0,1287,1288,5,157,0,0,1288,1289,3,116,58,0,1289,1290,5,147,0,0, + 1290,1293,1,0,0,0,1291,1293,5,156,0,0,1292,1287,1,0,0,0,1292,1291,1,0, + 0,0,1293,171,1,0,0,0,1294,1298,5,143,0,0,1295,1297,3,174,87,0,1296,1295, + 1,0,0,0,1297,1300,1,0,0,0,1298,1296,1,0,0,0,1298,1299,1,0,0,0,1299,1301, + 1,0,0,0,1300,1298,1,0,0,0,1301,1302,5,0,0,1,1302,173,1,0,0,0,1303,1304, + 5,159,0,0,1304,1305,3,116,58,0,1305,1306,5,147,0,0,1306,1309,1,0,0,0, + 1307,1309,5,158,0,0,1308,1303,1,0,0,0,1308,1307,1,0,0,0,1309,175,1,0, + 0,0,168,179,186,195,202,206,220,224,227,231,234,241,245,254,259,268,276, + 283,287,293,298,306,313,319,331,339,353,357,362,372,381,384,388,391,395, + 398,401,404,407,411,415,418,421,424,428,431,440,446,467,484,501,507,513, + 524,526,537,540,546,554,560,562,566,571,574,577,581,585,588,590,593,597, + 601,604,606,608,613,624,630,637,642,646,650,656,658,665,673,676,679,698, + 712,728,732,743,747,758,762,769,773,780,784,789,798,802,826,843,849,852, + 855,865,871,874,877,885,888,892,895,909,926,931,935,941,948,960,964,967, + 976,990,1029,1037,1039,1041,1049,1053,1057,1065,1069,1078,1082,1084,1094, + 1105,1114,1121,1134,1141,1145,1157,1163,1166,1173,1185,1191,1195,1201, + 1208,1217,1221,1231,1233,1236,1244,1249,1259,1264,1276,1282,1292,1298, + 1308 }; staticData->serializedATN = antlr4::atn::SerializedATNView(serializedATNSegment, sizeof(serializedATNSegment) / sizeof(serializedATNSegment[0])); @@ -9259,6 +9261,18 @@ HogQLParser::HogqlxTagElementContext* HogQLParser::HogqlxTagElementNestedContext return getRuleContext(0); } +tree::TerminalNode* HogQLParser::HogqlxTagElementNestedContext::LBRACE() { + return getToken(HogQLParser::LBRACE, 0); +} + +HogQLParser::ColumnExprContext* HogQLParser::HogqlxTagElementNestedContext::columnExpr() { + return getRuleContext(0); +} + +tree::TerminalNode* HogQLParser::HogqlxTagElementNestedContext::RBRACE() { + return getToken(HogQLParser::RBRACE, 0); +} + HogQLParser::HogqlxTagElementNestedContext::HogqlxTagElementNestedContext(HogqlxTagElementContext *ctx) { copyFrom(ctx); } @@ -9281,7 +9295,7 @@ HogQLParser::HogqlxTagElementContext* HogQLParser::hogqlxTagElement() { exitRule(); }); try { - setState(1117); + setState(1121); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 141, _ctx)) { case 1: { @@ -9331,7 +9345,7 @@ HogQLParser::HogqlxTagElementContext* HogQLParser::hogqlxTagElement() { } setState(1108); match(HogQLParser::GT); - setState(1110); + setState(1114); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 140, _ctx)) { @@ -9341,16 +9355,26 @@ HogQLParser::HogqlxTagElementContext* HogQLParser::hogqlxTagElement() { break; } + case 2: { + setState(1110); + match(HogQLParser::LBRACE); + setState(1111); + columnExpr(0); + setState(1112); + match(HogQLParser::RBRACE); + break; + } + default: break; } - setState(1112); + setState(1116); match(HogQLParser::LT); - setState(1113); + setState(1117); match(HogQLParser::SLASH); - setState(1114); + setState(1118); identifier(); - setState(1115); + setState(1119); match(HogQLParser::GT); break; } @@ -9424,38 +9448,38 @@ HogQLParser::HogqlxTagAttributeContext* HogQLParser::hogqlxTagAttribute() { exitRule(); }); try { - setState(1130); + setState(1134); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 142, _ctx)) { case 1: { enterOuterAlt(_localctx, 1); - setState(1119); + setState(1123); identifier(); - setState(1120); + setState(1124); match(HogQLParser::EQ_SINGLE); - setState(1121); + setState(1125); string(); break; } case 2: { enterOuterAlt(_localctx, 2); - setState(1123); + setState(1127); identifier(); - setState(1124); + setState(1128); match(HogQLParser::EQ_SINGLE); - setState(1125); + setState(1129); match(HogQLParser::LBRACE); - setState(1126); + setState(1130); columnExpr(0); - setState(1127); + setState(1131); match(HogQLParser::RBRACE); break; } case 3: { enterOuterAlt(_localctx, 3); - setState(1129); + setState(1133); identifier(); break; } @@ -9524,28 +9548,28 @@ HogQLParser::WithExprListContext* HogQLParser::withExprList() { try { size_t alt; enterOuterAlt(_localctx, 1); - setState(1132); + setState(1136); withExpr(); - setState(1137); + setState(1141); _errHandler->sync(this); alt = getInterpreter()->adaptivePredict(_input, 143, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(1133); + setState(1137); match(HogQLParser::COMMA); - setState(1134); + setState(1138); withExpr(); } - setState(1139); + setState(1143); _errHandler->sync(this); alt = getInterpreter()->adaptivePredict(_input, 143, _ctx); } - setState(1141); + setState(1145); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::COMMA) { - setState(1140); + setState(1144); match(HogQLParser::COMMA); } @@ -9640,21 +9664,21 @@ HogQLParser::WithExprContext* HogQLParser::withExpr() { exitRule(); }); try { - setState(1153); + setState(1157); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 145, _ctx)) { case 1: { _localctx = _tracker.createInstance(_localctx); enterOuterAlt(_localctx, 1); - setState(1143); + setState(1147); identifier(); - setState(1144); + setState(1148); match(HogQLParser::AS); - setState(1145); + setState(1149); match(HogQLParser::LPAREN); - setState(1146); + setState(1150); selectUnionStmt(); - setState(1147); + setState(1151); match(HogQLParser::RPAREN); break; } @@ -9662,11 +9686,11 @@ HogQLParser::WithExprContext* HogQLParser::withExpr() { case 2: { _localctx = _tracker.createInstance(_localctx); enterOuterAlt(_localctx, 2); - setState(1149); + setState(1153); columnExpr(0); - setState(1150); + setState(1154); match(HogQLParser::AS); - setState(1151); + setState(1155); identifier(); break; } @@ -9732,12 +9756,12 @@ HogQLParser::ColumnIdentifierContext* HogQLParser::columnIdentifier() { exitRule(); }); try { - setState(1162); + setState(1166); _errHandler->sync(this); switch (_input->LA(1)) { case HogQLParser::LBRACE: { enterOuterAlt(_localctx, 1); - setState(1155); + setState(1159); placeholder(); break; } @@ -9837,14 +9861,14 @@ HogQLParser::ColumnIdentifierContext* HogQLParser::columnIdentifier() { case HogQLParser::YEAR: case HogQLParser::IDENTIFIER: { enterOuterAlt(_localctx, 2); - setState(1159); + setState(1163); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 146, _ctx)) { case 1: { - setState(1156); + setState(1160); tableIdentifier(); - setState(1157); + setState(1161); match(HogQLParser::DOT); break; } @@ -9852,7 +9876,7 @@ HogQLParser::ColumnIdentifierContext* HogQLParser::columnIdentifier() { default: break; } - setState(1161); + setState(1165); nestedIdentifier(); break; } @@ -9920,19 +9944,19 @@ HogQLParser::NestedIdentifierContext* HogQLParser::nestedIdentifier() { try { size_t alt; enterOuterAlt(_localctx, 1); - setState(1164); + setState(1168); identifier(); - setState(1169); + setState(1173); _errHandler->sync(this); alt = getInterpreter()->adaptivePredict(_input, 148, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(1165); + setState(1169); match(HogQLParser::DOT); - setState(1166); + setState(1170); identifier(); } - setState(1171); + setState(1175); _errHandler->sync(this); alt = getInterpreter()->adaptivePredict(_input, 148, _ctx); } @@ -10098,7 +10122,7 @@ HogQLParser::TableExprContext* HogQLParser::tableExpr(int precedence) { try { size_t alt; enterOuterAlt(_localctx, 1); - setState(1181); + setState(1185); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 149, _ctx)) { case 1: { @@ -10106,7 +10130,7 @@ HogQLParser::TableExprContext* HogQLParser::tableExpr(int precedence) { _ctx = _localctx; previousContext = _localctx; - setState(1173); + setState(1177); tableIdentifier(); break; } @@ -10115,7 +10139,7 @@ HogQLParser::TableExprContext* HogQLParser::tableExpr(int precedence) { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(1174); + setState(1178); tableFunctionExpr(); break; } @@ -10124,11 +10148,11 @@ HogQLParser::TableExprContext* HogQLParser::tableExpr(int precedence) { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(1175); + setState(1179); match(HogQLParser::LPAREN); - setState(1176); + setState(1180); selectUnionStmt(); - setState(1177); + setState(1181); match(HogQLParser::RPAREN); break; } @@ -10137,7 +10161,7 @@ HogQLParser::TableExprContext* HogQLParser::tableExpr(int precedence) { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(1179); + setState(1183); hogqlxTagElement(); break; } @@ -10146,7 +10170,7 @@ HogQLParser::TableExprContext* HogQLParser::tableExpr(int precedence) { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(1180); + setState(1184); placeholder(); break; } @@ -10155,7 +10179,7 @@ HogQLParser::TableExprContext* HogQLParser::tableExpr(int precedence) { break; } _ctx->stop = _input->LT(-1); - setState(1191); + setState(1195); _errHandler->sync(this); alt = getInterpreter()->adaptivePredict(_input, 151, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { @@ -10166,10 +10190,10 @@ HogQLParser::TableExprContext* HogQLParser::tableExpr(int precedence) { auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); _localctx = newContext; pushNewRecursionContext(newContext, startState, RuleTableExpr); - setState(1183); + setState(1187); if (!(precpred(_ctx, 3))) throw FailedPredicateException(this, "precpred(_ctx, 3)"); - setState(1187); + setState(1191); _errHandler->sync(this); switch (_input->LA(1)) { case HogQLParser::DATE: @@ -10177,15 +10201,15 @@ HogQLParser::TableExprContext* HogQLParser::tableExpr(int precedence) { case HogQLParser::ID: case HogQLParser::KEY: case HogQLParser::IDENTIFIER: { - setState(1184); + setState(1188); alias(); break; } case HogQLParser::AS: { - setState(1185); + setState(1189); match(HogQLParser::AS); - setState(1186); + setState(1190); identifier(); break; } @@ -10194,7 +10218,7 @@ HogQLParser::TableExprContext* HogQLParser::tableExpr(int precedence) { throw NoViableAltException(this); } } - setState(1193); + setState(1197); _errHandler->sync(this); alt = getInterpreter()->adaptivePredict(_input, 151, _ctx); } @@ -10256,11 +10280,11 @@ HogQLParser::TableFunctionExprContext* HogQLParser::tableFunctionExpr() { }); try { enterOuterAlt(_localctx, 1); - setState(1194); + setState(1198); identifier(); - setState(1195); + setState(1199); match(HogQLParser::LPAREN); - setState(1197); + setState(1201); _errHandler->sync(this); _la = _input->LA(1); @@ -10268,10 +10292,10 @@ HogQLParser::TableFunctionExprContext* HogQLParser::tableFunctionExpr() { ((1ULL << _la) & -4503602311741442) != 0) || ((((_la - 64) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 64)) & 90493036243451903) != 0) || ((((_la - 128) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 128)) & 18455) != 0)) { - setState(1196); + setState(1200); tableArgList(); } - setState(1199); + setState(1203); match(HogQLParser::RPAREN); } @@ -10328,14 +10352,14 @@ HogQLParser::TableIdentifierContext* HogQLParser::tableIdentifier() { }); try { enterOuterAlt(_localctx, 1); - setState(1204); + setState(1208); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 153, _ctx)) { case 1: { - setState(1201); + setState(1205); databaseIdentifier(); - setState(1202); + setState(1206); match(HogQLParser::DOT); break; } @@ -10343,7 +10367,7 @@ HogQLParser::TableIdentifierContext* HogQLParser::tableIdentifier() { default: break; } - setState(1206); + setState(1210); identifier(); } @@ -10406,28 +10430,28 @@ HogQLParser::TableArgListContext* HogQLParser::tableArgList() { try { size_t alt; enterOuterAlt(_localctx, 1); - setState(1208); + setState(1212); columnExpr(0); - setState(1213); + setState(1217); _errHandler->sync(this); alt = getInterpreter()->adaptivePredict(_input, 154, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(1209); + setState(1213); match(HogQLParser::COMMA); - setState(1210); + setState(1214); columnExpr(0); } - setState(1215); + setState(1219); _errHandler->sync(this); alt = getInterpreter()->adaptivePredict(_input, 154, _ctx); } - setState(1217); + setState(1221); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::COMMA) { - setState(1216); + setState(1220); match(HogQLParser::COMMA); } @@ -10477,7 +10501,7 @@ HogQLParser::DatabaseIdentifierContext* HogQLParser::databaseIdentifier() { }); try { enterOuterAlt(_localctx, 1); - setState(1219); + setState(1223); identifier(); } @@ -10542,21 +10566,21 @@ HogQLParser::FloatingLiteralContext* HogQLParser::floatingLiteral() { exitRule(); }); try { - setState(1229); + setState(1233); _errHandler->sync(this); switch (_input->LA(1)) { case HogQLParser::FLOATING_LITERAL: { enterOuterAlt(_localctx, 1); - setState(1221); + setState(1225); match(HogQLParser::FLOATING_LITERAL); break; } case HogQLParser::DOT: { enterOuterAlt(_localctx, 2); - setState(1222); + setState(1226); match(HogQLParser::DOT); - setState(1223); + setState(1227); _la = _input->LA(1); if (!(_la == HogQLParser::OCTAL_LITERAL @@ -10572,16 +10596,16 @@ HogQLParser::FloatingLiteralContext* HogQLParser::floatingLiteral() { case HogQLParser::DECIMAL_LITERAL: { enterOuterAlt(_localctx, 3); - setState(1224); + setState(1228); match(HogQLParser::DECIMAL_LITERAL); - setState(1225); + setState(1229); match(HogQLParser::DOT); - setState(1227); + setState(1231); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 156, _ctx)) { case 1: { - setState(1226); + setState(1230); _la = _input->LA(1); if (!(_la == HogQLParser::OCTAL_LITERAL @@ -10680,14 +10704,14 @@ HogQLParser::NumberLiteralContext* HogQLParser::numberLiteral() { }); try { enterOuterAlt(_localctx, 1); - setState(1232); + setState(1236); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::DASH || _la == HogQLParser::PLUS) { - setState(1231); + setState(1235); _la = _input->LA(1); if (!(_la == HogQLParser::DASH @@ -10699,41 +10723,41 @@ HogQLParser::NumberLiteralContext* HogQLParser::numberLiteral() { consume(); } } - setState(1240); + setState(1244); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 159, _ctx)) { case 1: { - setState(1234); + setState(1238); floatingLiteral(); break; } case 2: { - setState(1235); + setState(1239); match(HogQLParser::OCTAL_LITERAL); break; } case 3: { - setState(1236); + setState(1240); match(HogQLParser::DECIMAL_LITERAL); break; } case 4: { - setState(1237); + setState(1241); match(HogQLParser::HEXADECIMAL_LITERAL); break; } case 5: { - setState(1238); + setState(1242); match(HogQLParser::INF); break; } case 6: { - setState(1239); + setState(1243); match(HogQLParser::NAN_SQL); break; } @@ -10795,7 +10819,7 @@ HogQLParser::LiteralContext* HogQLParser::literal() { exitRule(); }); try { - setState(1245); + setState(1249); _errHandler->sync(this); switch (_input->LA(1)) { case HogQLParser::INF: @@ -10808,21 +10832,21 @@ HogQLParser::LiteralContext* HogQLParser::literal() { case HogQLParser::DOT: case HogQLParser::PLUS: { enterOuterAlt(_localctx, 1); - setState(1242); + setState(1246); numberLiteral(); break; } case HogQLParser::STRING_LITERAL: { enterOuterAlt(_localctx, 2); - setState(1243); + setState(1247); match(HogQLParser::STRING_LITERAL); break; } case HogQLParser::NULL_SQL: { enterOuterAlt(_localctx, 3); - setState(1244); + setState(1248); match(HogQLParser::NULL_SQL); break; } @@ -10906,7 +10930,7 @@ HogQLParser::IntervalContext* HogQLParser::interval() { }); try { enterOuterAlt(_localctx, 1); - setState(1247); + setState(1251); _la = _input->LA(1); if (!((((_la & ~ 0x3fULL) == 0) && ((1ULL << _la) & 108086665936896000) != 0) || ((((_la - 70) & ~ 0x3fULL) == 0) && @@ -11301,7 +11325,7 @@ HogQLParser::KeywordContext* HogQLParser::keyword() { }); try { enterOuterAlt(_localctx, 1); - setState(1249); + setState(1253); _la = _input->LA(1); if (!((((_la & ~ 0x3fULL) == 0) && ((1ULL << _la) & -833175004720939010) != 0) || ((((_la - 64) & ~ 0x3fULL) == 0) && @@ -11372,7 +11396,7 @@ HogQLParser::KeywordForAliasContext* HogQLParser::keywordForAlias() { }); try { enterOuterAlt(_localctx, 1); - setState(1251); + setState(1255); _la = _input->LA(1); if (!((((_la & ~ 0x3fULL) == 0) && ((1ULL << _la) & 282025807314944) != 0))) { @@ -11432,12 +11456,12 @@ HogQLParser::AliasContext* HogQLParser::alias() { exitRule(); }); try { - setState(1255); + setState(1259); _errHandler->sync(this); switch (_input->LA(1)) { case HogQLParser::IDENTIFIER: { enterOuterAlt(_localctx, 1); - setState(1253); + setState(1257); match(HogQLParser::IDENTIFIER); break; } @@ -11447,7 +11471,7 @@ HogQLParser::AliasContext* HogQLParser::alias() { case HogQLParser::ID: case HogQLParser::KEY: { enterOuterAlt(_localctx, 2); - setState(1254); + setState(1258); keywordForAlias(); break; } @@ -11509,12 +11533,12 @@ HogQLParser::IdentifierContext* HogQLParser::identifier() { exitRule(); }); try { - setState(1260); + setState(1264); _errHandler->sync(this); switch (_input->LA(1)) { case HogQLParser::IDENTIFIER: { enterOuterAlt(_localctx, 1); - setState(1257); + setState(1261); match(HogQLParser::IDENTIFIER); break; } @@ -11528,7 +11552,7 @@ HogQLParser::IdentifierContext* HogQLParser::identifier() { case HogQLParser::WEEK: case HogQLParser::YEAR: { enterOuterAlt(_localctx, 2); - setState(1258); + setState(1262); interval(); break; } @@ -11619,7 +11643,7 @@ HogQLParser::IdentifierContext* HogQLParser::identifier() { case HogQLParser::WINDOW: case HogQLParser::WITH: { enterOuterAlt(_localctx, 3); - setState(1259); + setState(1263); keyword(); break; } @@ -11682,11 +11706,11 @@ HogQLParser::EnumValueContext* HogQLParser::enumValue() { }); try { enterOuterAlt(_localctx, 1); - setState(1262); + setState(1266); string(); - setState(1263); + setState(1267); match(HogQLParser::EQ_SINGLE); - setState(1264); + setState(1268); numberLiteral(); } @@ -11743,11 +11767,11 @@ HogQLParser::PlaceholderContext* HogQLParser::placeholder() { }); try { enterOuterAlt(_localctx, 1); - setState(1266); + setState(1270); match(HogQLParser::LBRACE); - setState(1267); + setState(1271); identifier(); - setState(1268); + setState(1272); match(HogQLParser::RBRACE); } @@ -11799,19 +11823,19 @@ HogQLParser::StringContext* HogQLParser::string() { exitRule(); }); try { - setState(1272); + setState(1276); _errHandler->sync(this); switch (_input->LA(1)) { case HogQLParser::STRING_LITERAL: { enterOuterAlt(_localctx, 1); - setState(1270); + setState(1274); match(HogQLParser::STRING_LITERAL); break; } case HogQLParser::QUOTE_SINGLE_TEMPLATE: { enterOuterAlt(_localctx, 2); - setState(1271); + setState(1275); templateString(); break; } @@ -11879,21 +11903,21 @@ HogQLParser::TemplateStringContext* HogQLParser::templateString() { }); try { enterOuterAlt(_localctx, 1); - setState(1274); - match(HogQLParser::QUOTE_SINGLE_TEMPLATE); setState(1278); + match(HogQLParser::QUOTE_SINGLE_TEMPLATE); + setState(1282); _errHandler->sync(this); _la = _input->LA(1); while (_la == HogQLParser::STRING_TEXT || _la == HogQLParser::STRING_ESCAPE_TRIGGER) { - setState(1275); + setState(1279); stringContents(); - setState(1280); + setState(1284); _errHandler->sync(this); _la = _input->LA(1); } - setState(1281); + setState(1285); match(HogQLParser::QUOTE_SINGLE); } @@ -11953,23 +11977,23 @@ HogQLParser::StringContentsContext* HogQLParser::stringContents() { exitRule(); }); try { - setState(1288); + setState(1292); _errHandler->sync(this); switch (_input->LA(1)) { case HogQLParser::STRING_ESCAPE_TRIGGER: { enterOuterAlt(_localctx, 1); - setState(1283); + setState(1287); match(HogQLParser::STRING_ESCAPE_TRIGGER); - setState(1284); + setState(1288); columnExpr(0); - setState(1285); + setState(1289); match(HogQLParser::RBRACE); break; } case HogQLParser::STRING_TEXT: { enterOuterAlt(_localctx, 2); - setState(1287); + setState(1291); match(HogQLParser::STRING_TEXT); break; } @@ -12037,21 +12061,21 @@ HogQLParser::FullTemplateStringContext* HogQLParser::fullTemplateString() { }); try { enterOuterAlt(_localctx, 1); - setState(1290); - match(HogQLParser::QUOTE_SINGLE_TEMPLATE_FULL); setState(1294); + match(HogQLParser::QUOTE_SINGLE_TEMPLATE_FULL); + setState(1298); _errHandler->sync(this); _la = _input->LA(1); while (_la == HogQLParser::FULL_STRING_TEXT || _la == HogQLParser::FULL_STRING_ESCAPE_TRIGGER) { - setState(1291); + setState(1295); stringContentsFull(); - setState(1296); + setState(1300); _errHandler->sync(this); _la = _input->LA(1); } - setState(1297); + setState(1301); match(HogQLParser::EOF); } @@ -12111,23 +12135,23 @@ HogQLParser::StringContentsFullContext* HogQLParser::stringContentsFull() { exitRule(); }); try { - setState(1304); + setState(1308); _errHandler->sync(this); switch (_input->LA(1)) { case HogQLParser::FULL_STRING_ESCAPE_TRIGGER: { enterOuterAlt(_localctx, 1); - setState(1299); + setState(1303); match(HogQLParser::FULL_STRING_ESCAPE_TRIGGER); - setState(1300); + setState(1304); columnExpr(0); - setState(1301); + setState(1305); match(HogQLParser::RBRACE); break; } case HogQLParser::FULL_STRING_TEXT: { enterOuterAlt(_localctx, 2); - setState(1303); + setState(1307); match(HogQLParser::FULL_STRING_TEXT); break; } diff --git a/hogql_parser/HogQLParser.h b/hogql_parser/HogQLParser.h index a5ee0acf8c2ef..d5a5253ad25f0 100644 --- a/hogql_parser/HogQLParser.h +++ b/hogql_parser/HogQLParser.h @@ -1929,6 +1929,9 @@ class HogQLParser : public antlr4::Parser { std::vector hogqlxTagAttribute(); HogqlxTagAttributeContext* hogqlxTagAttribute(size_t i); HogqlxTagElementContext *hogqlxTagElement(); + antlr4::tree::TerminalNode *LBRACE(); + ColumnExprContext *columnExpr(); + antlr4::tree::TerminalNode *RBRACE(); virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; diff --git a/hogql_parser/HogQLParser.interp b/hogql_parser/HogQLParser.interp index 20c37a5916320..e31bf92fee7e9 100644 --- a/hogql_parser/HogQLParser.interp +++ b/hogql_parser/HogQLParser.interp @@ -414,4 +414,4 @@ stringContentsFull atn: -[4, 1, 159, 1307, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 1, 0, 5, 0, 178, 8, 0, 10, 0, 12, 0, 181, 9, 0, 1, 0, 1, 0, 1, 1, 1, 1, 3, 1, 187, 8, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 196, 8, 3, 1, 4, 1, 4, 1, 4, 5, 4, 201, 8, 4, 10, 4, 12, 4, 204, 9, 4, 1, 4, 3, 4, 207, 8, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 221, 8, 5, 1, 6, 1, 6, 3, 6, 225, 8, 6, 1, 6, 3, 6, 228, 8, 6, 1, 7, 1, 7, 3, 7, 232, 8, 7, 1, 7, 3, 7, 235, 8, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 242, 8, 8, 1, 8, 1, 8, 3, 8, 246, 8, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 5, 9, 253, 8, 9, 10, 9, 12, 9, 256, 9, 9, 1, 9, 1, 9, 3, 9, 260, 8, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 3, 10, 269, 8, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 3, 11, 277, 8, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 3, 12, 284, 8, 12, 1, 12, 1, 12, 3, 12, 288, 8, 12, 1, 12, 1, 12, 1, 12, 1, 12, 3, 12, 294, 8, 12, 1, 12, 1, 12, 1, 12, 3, 12, 299, 8, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 307, 8, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 314, 8, 13, 1, 14, 1, 14, 1, 14, 1, 14, 3, 14, 320, 8, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 3, 16, 332, 8, 16, 1, 17, 1, 17, 1, 18, 1, 18, 5, 18, 338, 8, 18, 10, 18, 12, 18, 341, 9, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 5, 20, 352, 8, 20, 10, 20, 12, 20, 355, 9, 20, 1, 20, 3, 20, 358, 8, 20, 1, 21, 1, 21, 1, 21, 3, 21, 363, 8, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 5, 22, 371, 8, 22, 10, 22, 12, 22, 374, 9, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 3, 23, 382, 8, 23, 1, 24, 3, 24, 385, 8, 24, 1, 24, 1, 24, 3, 24, 389, 8, 24, 1, 24, 3, 24, 392, 8, 24, 1, 24, 1, 24, 3, 24, 396, 8, 24, 1, 24, 3, 24, 399, 8, 24, 1, 24, 3, 24, 402, 8, 24, 1, 24, 3, 24, 405, 8, 24, 1, 24, 3, 24, 408, 8, 24, 1, 24, 1, 24, 3, 24, 412, 8, 24, 1, 24, 1, 24, 3, 24, 416, 8, 24, 1, 24, 3, 24, 419, 8, 24, 1, 24, 3, 24, 422, 8, 24, 1, 24, 3, 24, 425, 8, 24, 1, 24, 1, 24, 3, 24, 429, 8, 24, 1, 24, 3, 24, 432, 8, 24, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 26, 3, 26, 441, 8, 26, 1, 27, 1, 27, 1, 27, 1, 28, 3, 28, 447, 8, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 5, 29, 466, 8, 29, 10, 29, 12, 29, 469, 9, 29, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 3, 32, 485, 8, 32, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 36, 3, 36, 502, 8, 36, 1, 36, 1, 36, 1, 36, 1, 36, 3, 36, 508, 8, 36, 1, 36, 1, 36, 1, 36, 1, 36, 3, 36, 514, 8, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 3, 36, 525, 8, 36, 3, 36, 527, 8, 36, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 3, 39, 538, 8, 39, 1, 39, 3, 39, 541, 8, 39, 1, 39, 1, 39, 1, 39, 1, 39, 3, 39, 547, 8, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 3, 39, 555, 8, 39, 1, 39, 1, 39, 1, 39, 1, 39, 5, 39, 561, 8, 39, 10, 39, 12, 39, 564, 9, 39, 1, 40, 3, 40, 567, 8, 40, 1, 40, 1, 40, 1, 40, 3, 40, 572, 8, 40, 1, 40, 3, 40, 575, 8, 40, 1, 40, 3, 40, 578, 8, 40, 1, 40, 1, 40, 3, 40, 582, 8, 40, 1, 40, 1, 40, 3, 40, 586, 8, 40, 1, 40, 3, 40, 589, 8, 40, 3, 40, 591, 8, 40, 1, 40, 3, 40, 594, 8, 40, 1, 40, 1, 40, 3, 40, 598, 8, 40, 1, 40, 1, 40, 3, 40, 602, 8, 40, 1, 40, 3, 40, 605, 8, 40, 3, 40, 607, 8, 40, 3, 40, 609, 8, 40, 1, 41, 1, 41, 1, 41, 3, 41, 614, 8, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 3, 42, 625, 8, 42, 1, 43, 1, 43, 1, 43, 1, 43, 3, 43, 631, 8, 43, 1, 44, 1, 44, 1, 44, 5, 44, 636, 8, 44, 10, 44, 12, 44, 639, 9, 44, 1, 45, 1, 45, 3, 45, 643, 8, 45, 1, 45, 1, 45, 3, 45, 647, 8, 45, 1, 45, 1, 45, 3, 45, 651, 8, 45, 1, 46, 1, 46, 1, 46, 1, 46, 3, 46, 657, 8, 46, 3, 46, 659, 8, 46, 1, 47, 1, 47, 1, 47, 5, 47, 664, 8, 47, 10, 47, 12, 47, 667, 9, 47, 1, 48, 1, 48, 1, 48, 1, 48, 1, 49, 3, 49, 674, 8, 49, 1, 49, 3, 49, 677, 8, 49, 1, 49, 3, 49, 680, 8, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 3, 53, 699, 8, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 3, 54, 713, 8, 54, 1, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 5, 56, 727, 8, 56, 10, 56, 12, 56, 730, 9, 56, 1, 56, 3, 56, 733, 8, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 5, 56, 742, 8, 56, 10, 56, 12, 56, 745, 9, 56, 1, 56, 3, 56, 748, 8, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 5, 56, 757, 8, 56, 10, 56, 12, 56, 760, 9, 56, 1, 56, 3, 56, 763, 8, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 3, 56, 770, 8, 56, 1, 56, 1, 56, 3, 56, 774, 8, 56, 1, 57, 1, 57, 1, 57, 5, 57, 779, 8, 57, 10, 57, 12, 57, 782, 9, 57, 1, 57, 3, 57, 785, 8, 57, 1, 58, 1, 58, 1, 58, 3, 58, 790, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 4, 58, 797, 8, 58, 11, 58, 12, 58, 798, 1, 58, 1, 58, 3, 58, 803, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 827, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 844, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 850, 8, 58, 1, 58, 3, 58, 853, 8, 58, 1, 58, 3, 58, 856, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 866, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 872, 8, 58, 1, 58, 3, 58, 875, 8, 58, 1, 58, 3, 58, 878, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 886, 8, 58, 1, 58, 3, 58, 889, 8, 58, 1, 58, 1, 58, 3, 58, 893, 8, 58, 1, 58, 3, 58, 896, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 910, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 927, 8, 58, 1, 58, 1, 58, 1, 58, 3, 58, 932, 8, 58, 1, 58, 1, 58, 3, 58, 936, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 942, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 949, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 961, 8, 58, 1, 58, 1, 58, 3, 58, 965, 8, 58, 1, 58, 3, 58, 968, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 977, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 991, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 1030, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 1038, 8, 58, 5, 58, 1040, 8, 58, 10, 58, 12, 58, 1043, 9, 58, 1, 59, 1, 59, 1, 59, 5, 59, 1048, 8, 59, 10, 59, 12, 59, 1051, 9, 59, 1, 59, 3, 59, 1054, 8, 59, 1, 60, 1, 60, 3, 60, 1058, 8, 60, 1, 61, 1, 61, 1, 61, 1, 61, 5, 61, 1064, 8, 61, 10, 61, 12, 61, 1067, 9, 61, 1, 61, 3, 61, 1070, 8, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 5, 61, 1077, 8, 61, 10, 61, 12, 61, 1080, 9, 61, 1, 61, 3, 61, 1083, 8, 61, 3, 61, 1085, 8, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 5, 62, 1093, 8, 62, 10, 62, 12, 62, 1096, 9, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 5, 62, 1104, 8, 62, 10, 62, 12, 62, 1107, 9, 62, 1, 62, 1, 62, 3, 62, 1111, 8, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 3, 62, 1118, 8, 62, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 3, 63, 1131, 8, 63, 1, 64, 1, 64, 1, 64, 5, 64, 1136, 8, 64, 10, 64, 12, 64, 1139, 9, 64, 1, 64, 3, 64, 1142, 8, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 3, 65, 1154, 8, 65, 1, 66, 1, 66, 1, 66, 1, 66, 3, 66, 1160, 8, 66, 1, 66, 3, 66, 1163, 8, 66, 1, 67, 1, 67, 1, 67, 5, 67, 1168, 8, 67, 10, 67, 12, 67, 1171, 9, 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 3, 68, 1182, 8, 68, 1, 68, 1, 68, 1, 68, 1, 68, 3, 68, 1188, 8, 68, 5, 68, 1190, 8, 68, 10, 68, 12, 68, 1193, 9, 68, 1, 69, 1, 69, 1, 69, 3, 69, 1198, 8, 69, 1, 69, 1, 69, 1, 70, 1, 70, 1, 70, 3, 70, 1205, 8, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 71, 5, 71, 1212, 8, 71, 10, 71, 12, 71, 1215, 9, 71, 1, 71, 3, 71, 1218, 8, 71, 1, 72, 1, 72, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 3, 73, 1228, 8, 73, 3, 73, 1230, 8, 73, 1, 74, 3, 74, 1233, 8, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 3, 74, 1241, 8, 74, 1, 75, 1, 75, 1, 75, 3, 75, 1246, 8, 75, 1, 76, 1, 76, 1, 77, 1, 77, 1, 78, 1, 78, 1, 79, 1, 79, 3, 79, 1256, 8, 79, 1, 80, 1, 80, 1, 80, 3, 80, 1261, 8, 80, 1, 81, 1, 81, 1, 81, 1, 81, 1, 82, 1, 82, 1, 82, 1, 82, 1, 83, 1, 83, 3, 83, 1273, 8, 83, 1, 84, 1, 84, 5, 84, 1277, 8, 84, 10, 84, 12, 84, 1280, 9, 84, 1, 84, 1, 84, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 3, 85, 1289, 8, 85, 1, 86, 1, 86, 5, 86, 1293, 8, 86, 10, 86, 12, 86, 1296, 9, 86, 1, 86, 1, 86, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 3, 87, 1305, 8, 87, 1, 87, 0, 3, 78, 116, 136, 88, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 0, 16, 2, 0, 18, 18, 74, 74, 2, 0, 44, 44, 51, 51, 3, 0, 1, 1, 4, 4, 8, 8, 4, 0, 1, 1, 3, 4, 8, 8, 80, 80, 2, 0, 51, 51, 73, 73, 2, 0, 1, 1, 4, 4, 2, 0, 7, 7, 22, 23, 2, 0, 30, 30, 49, 49, 2, 0, 71, 71, 76, 76, 3, 0, 10, 10, 50, 50, 90, 90, 2, 0, 41, 41, 53, 53, 1, 0, 107, 108, 2, 0, 118, 118, 139, 139, 7, 0, 21, 21, 38, 38, 55, 56, 70, 70, 78, 78, 97, 97, 103, 103, 16, 0, 1, 13, 15, 20, 22, 28, 30, 30, 32, 37, 39, 42, 44, 51, 53, 54, 58, 58, 60, 69, 71, 77, 79, 83, 85, 92, 94, 96, 98, 99, 101, 102, 4, 0, 20, 20, 30, 30, 39, 39, 48, 48, 1474, 0, 179, 1, 0, 0, 0, 2, 186, 1, 0, 0, 0, 4, 188, 1, 0, 0, 0, 6, 190, 1, 0, 0, 0, 8, 197, 1, 0, 0, 0, 10, 220, 1, 0, 0, 0, 12, 222, 1, 0, 0, 0, 14, 229, 1, 0, 0, 0, 16, 236, 1, 0, 0, 0, 18, 249, 1, 0, 0, 0, 20, 261, 1, 0, 0, 0, 22, 270, 1, 0, 0, 0, 24, 278, 1, 0, 0, 0, 26, 300, 1, 0, 0, 0, 28, 315, 1, 0, 0, 0, 30, 324, 1, 0, 0, 0, 32, 329, 1, 0, 0, 0, 34, 333, 1, 0, 0, 0, 36, 335, 1, 0, 0, 0, 38, 344, 1, 0, 0, 0, 40, 348, 1, 0, 0, 0, 42, 362, 1, 0, 0, 0, 44, 366, 1, 0, 0, 0, 46, 381, 1, 0, 0, 0, 48, 384, 1, 0, 0, 0, 50, 433, 1, 0, 0, 0, 52, 436, 1, 0, 0, 0, 54, 442, 1, 0, 0, 0, 56, 446, 1, 0, 0, 0, 58, 452, 1, 0, 0, 0, 60, 470, 1, 0, 0, 0, 62, 473, 1, 0, 0, 0, 64, 476, 1, 0, 0, 0, 66, 486, 1, 0, 0, 0, 68, 489, 1, 0, 0, 0, 70, 493, 1, 0, 0, 0, 72, 526, 1, 0, 0, 0, 74, 528, 1, 0, 0, 0, 76, 531, 1, 0, 0, 0, 78, 546, 1, 0, 0, 0, 80, 608, 1, 0, 0, 0, 82, 613, 1, 0, 0, 0, 84, 624, 1, 0, 0, 0, 86, 626, 1, 0, 0, 0, 88, 632, 1, 0, 0, 0, 90, 640, 1, 0, 0, 0, 92, 658, 1, 0, 0, 0, 94, 660, 1, 0, 0, 0, 96, 668, 1, 0, 0, 0, 98, 673, 1, 0, 0, 0, 100, 681, 1, 0, 0, 0, 102, 685, 1, 0, 0, 0, 104, 689, 1, 0, 0, 0, 106, 698, 1, 0, 0, 0, 108, 712, 1, 0, 0, 0, 110, 714, 1, 0, 0, 0, 112, 773, 1, 0, 0, 0, 114, 775, 1, 0, 0, 0, 116, 935, 1, 0, 0, 0, 118, 1044, 1, 0, 0, 0, 120, 1057, 1, 0, 0, 0, 122, 1084, 1, 0, 0, 0, 124, 1117, 1, 0, 0, 0, 126, 1130, 1, 0, 0, 0, 128, 1132, 1, 0, 0, 0, 130, 1153, 1, 0, 0, 0, 132, 1162, 1, 0, 0, 0, 134, 1164, 1, 0, 0, 0, 136, 1181, 1, 0, 0, 0, 138, 1194, 1, 0, 0, 0, 140, 1204, 1, 0, 0, 0, 142, 1208, 1, 0, 0, 0, 144, 1219, 1, 0, 0, 0, 146, 1229, 1, 0, 0, 0, 148, 1232, 1, 0, 0, 0, 150, 1245, 1, 0, 0, 0, 152, 1247, 1, 0, 0, 0, 154, 1249, 1, 0, 0, 0, 156, 1251, 1, 0, 0, 0, 158, 1255, 1, 0, 0, 0, 160, 1260, 1, 0, 0, 0, 162, 1262, 1, 0, 0, 0, 164, 1266, 1, 0, 0, 0, 166, 1272, 1, 0, 0, 0, 168, 1274, 1, 0, 0, 0, 170, 1288, 1, 0, 0, 0, 172, 1290, 1, 0, 0, 0, 174, 1304, 1, 0, 0, 0, 176, 178, 3, 2, 1, 0, 177, 176, 1, 0, 0, 0, 178, 181, 1, 0, 0, 0, 179, 177, 1, 0, 0, 0, 179, 180, 1, 0, 0, 0, 180, 182, 1, 0, 0, 0, 181, 179, 1, 0, 0, 0, 182, 183, 5, 0, 0, 1, 183, 1, 1, 0, 0, 0, 184, 187, 3, 6, 3, 0, 185, 187, 3, 10, 5, 0, 186, 184, 1, 0, 0, 0, 186, 185, 1, 0, 0, 0, 187, 3, 1, 0, 0, 0, 188, 189, 3, 116, 58, 0, 189, 5, 1, 0, 0, 0, 190, 191, 5, 52, 0, 0, 191, 195, 3, 160, 80, 0, 192, 193, 5, 115, 0, 0, 193, 194, 5, 122, 0, 0, 194, 196, 3, 4, 2, 0, 195, 192, 1, 0, 0, 0, 195, 196, 1, 0, 0, 0, 196, 7, 1, 0, 0, 0, 197, 202, 3, 160, 80, 0, 198, 199, 5, 116, 0, 0, 199, 201, 3, 160, 80, 0, 200, 198, 1, 0, 0, 0, 201, 204, 1, 0, 0, 0, 202, 200, 1, 0, 0, 0, 202, 203, 1, 0, 0, 0, 203, 206, 1, 0, 0, 0, 204, 202, 1, 0, 0, 0, 205, 207, 5, 116, 0, 0, 206, 205, 1, 0, 0, 0, 206, 207, 1, 0, 0, 0, 207, 9, 1, 0, 0, 0, 208, 221, 3, 12, 6, 0, 209, 221, 3, 14, 7, 0, 210, 221, 3, 18, 9, 0, 211, 221, 3, 20, 10, 0, 212, 221, 3, 22, 11, 0, 213, 221, 3, 26, 13, 0, 214, 221, 3, 24, 12, 0, 215, 221, 3, 28, 14, 0, 216, 221, 3, 30, 15, 0, 217, 221, 3, 36, 18, 0, 218, 221, 3, 32, 16, 0, 219, 221, 3, 34, 17, 0, 220, 208, 1, 0, 0, 0, 220, 209, 1, 0, 0, 0, 220, 210, 1, 0, 0, 0, 220, 211, 1, 0, 0, 0, 220, 212, 1, 0, 0, 0, 220, 213, 1, 0, 0, 0, 220, 214, 1, 0, 0, 0, 220, 215, 1, 0, 0, 0, 220, 216, 1, 0, 0, 0, 220, 217, 1, 0, 0, 0, 220, 218, 1, 0, 0, 0, 220, 219, 1, 0, 0, 0, 221, 11, 1, 0, 0, 0, 222, 224, 5, 72, 0, 0, 223, 225, 3, 4, 2, 0, 224, 223, 1, 0, 0, 0, 224, 225, 1, 0, 0, 0, 225, 227, 1, 0, 0, 0, 226, 228, 5, 150, 0, 0, 227, 226, 1, 0, 0, 0, 227, 228, 1, 0, 0, 0, 228, 13, 1, 0, 0, 0, 229, 231, 5, 84, 0, 0, 230, 232, 3, 4, 2, 0, 231, 230, 1, 0, 0, 0, 231, 232, 1, 0, 0, 0, 232, 234, 1, 0, 0, 0, 233, 235, 5, 150, 0, 0, 234, 233, 1, 0, 0, 0, 234, 235, 1, 0, 0, 0, 235, 15, 1, 0, 0, 0, 236, 245, 5, 14, 0, 0, 237, 238, 5, 130, 0, 0, 238, 241, 3, 160, 80, 0, 239, 240, 5, 115, 0, 0, 240, 242, 3, 160, 80, 0, 241, 239, 1, 0, 0, 0, 241, 242, 1, 0, 0, 0, 242, 243, 1, 0, 0, 0, 243, 244, 5, 149, 0, 0, 244, 246, 1, 0, 0, 0, 245, 237, 1, 0, 0, 0, 245, 246, 1, 0, 0, 0, 246, 247, 1, 0, 0, 0, 247, 248, 3, 36, 18, 0, 248, 17, 1, 0, 0, 0, 249, 250, 5, 93, 0, 0, 250, 254, 3, 36, 18, 0, 251, 253, 3, 16, 8, 0, 252, 251, 1, 0, 0, 0, 253, 256, 1, 0, 0, 0, 254, 252, 1, 0, 0, 0, 254, 255, 1, 0, 0, 0, 255, 259, 1, 0, 0, 0, 256, 254, 1, 0, 0, 0, 257, 258, 5, 29, 0, 0, 258, 260, 3, 36, 18, 0, 259, 257, 1, 0, 0, 0, 259, 260, 1, 0, 0, 0, 260, 19, 1, 0, 0, 0, 261, 262, 5, 40, 0, 0, 262, 263, 5, 130, 0, 0, 263, 264, 3, 4, 2, 0, 264, 265, 5, 149, 0, 0, 265, 268, 3, 10, 5, 0, 266, 267, 5, 25, 0, 0, 267, 269, 3, 10, 5, 0, 268, 266, 1, 0, 0, 0, 268, 269, 1, 0, 0, 0, 269, 21, 1, 0, 0, 0, 270, 271, 5, 100, 0, 0, 271, 272, 5, 130, 0, 0, 272, 273, 3, 4, 2, 0, 273, 274, 5, 149, 0, 0, 274, 276, 3, 10, 5, 0, 275, 277, 5, 150, 0, 0, 276, 275, 1, 0, 0, 0, 276, 277, 1, 0, 0, 0, 277, 23, 1, 0, 0, 0, 278, 279, 5, 33, 0, 0, 279, 283, 5, 130, 0, 0, 280, 284, 3, 6, 3, 0, 281, 284, 3, 30, 15, 0, 282, 284, 3, 4, 2, 0, 283, 280, 1, 0, 0, 0, 283, 281, 1, 0, 0, 0, 283, 282, 1, 0, 0, 0, 283, 284, 1, 0, 0, 0, 284, 285, 1, 0, 0, 0, 285, 287, 5, 150, 0, 0, 286, 288, 3, 4, 2, 0, 287, 286, 1, 0, 0, 0, 287, 288, 1, 0, 0, 0, 288, 289, 1, 0, 0, 0, 289, 293, 5, 150, 0, 0, 290, 294, 3, 6, 3, 0, 291, 294, 3, 30, 15, 0, 292, 294, 3, 4, 2, 0, 293, 290, 1, 0, 0, 0, 293, 291, 1, 0, 0, 0, 293, 292, 1, 0, 0, 0, 293, 294, 1, 0, 0, 0, 294, 295, 1, 0, 0, 0, 295, 296, 5, 149, 0, 0, 296, 298, 3, 10, 5, 0, 297, 299, 5, 150, 0, 0, 298, 297, 1, 0, 0, 0, 298, 299, 1, 0, 0, 0, 299, 25, 1, 0, 0, 0, 300, 301, 5, 33, 0, 0, 301, 302, 5, 130, 0, 0, 302, 303, 5, 52, 0, 0, 303, 306, 3, 160, 80, 0, 304, 305, 5, 116, 0, 0, 305, 307, 3, 160, 80, 0, 306, 304, 1, 0, 0, 0, 306, 307, 1, 0, 0, 0, 307, 308, 1, 0, 0, 0, 308, 309, 5, 42, 0, 0, 309, 310, 3, 4, 2, 0, 310, 311, 5, 149, 0, 0, 311, 313, 3, 10, 5, 0, 312, 314, 5, 150, 0, 0, 313, 312, 1, 0, 0, 0, 313, 314, 1, 0, 0, 0, 314, 27, 1, 0, 0, 0, 315, 316, 5, 31, 0, 0, 316, 317, 3, 160, 80, 0, 317, 319, 5, 130, 0, 0, 318, 320, 3, 8, 4, 0, 319, 318, 1, 0, 0, 0, 319, 320, 1, 0, 0, 0, 320, 321, 1, 0, 0, 0, 321, 322, 5, 149, 0, 0, 322, 323, 3, 36, 18, 0, 323, 29, 1, 0, 0, 0, 324, 325, 3, 4, 2, 0, 325, 326, 5, 115, 0, 0, 326, 327, 5, 122, 0, 0, 327, 328, 3, 4, 2, 0, 328, 31, 1, 0, 0, 0, 329, 331, 3, 4, 2, 0, 330, 332, 5, 150, 0, 0, 331, 330, 1, 0, 0, 0, 331, 332, 1, 0, 0, 0, 332, 33, 1, 0, 0, 0, 333, 334, 5, 150, 0, 0, 334, 35, 1, 0, 0, 0, 335, 339, 5, 128, 0, 0, 336, 338, 3, 2, 1, 0, 337, 336, 1, 0, 0, 0, 338, 341, 1, 0, 0, 0, 339, 337, 1, 0, 0, 0, 339, 340, 1, 0, 0, 0, 340, 342, 1, 0, 0, 0, 341, 339, 1, 0, 0, 0, 342, 343, 5, 147, 0, 0, 343, 37, 1, 0, 0, 0, 344, 345, 3, 4, 2, 0, 345, 346, 5, 115, 0, 0, 346, 347, 3, 4, 2, 0, 347, 39, 1, 0, 0, 0, 348, 353, 3, 38, 19, 0, 349, 350, 5, 116, 0, 0, 350, 352, 3, 38, 19, 0, 351, 349, 1, 0, 0, 0, 352, 355, 1, 0, 0, 0, 353, 351, 1, 0, 0, 0, 353, 354, 1, 0, 0, 0, 354, 357, 1, 0, 0, 0, 355, 353, 1, 0, 0, 0, 356, 358, 5, 116, 0, 0, 357, 356, 1, 0, 0, 0, 357, 358, 1, 0, 0, 0, 358, 41, 1, 0, 0, 0, 359, 363, 3, 44, 22, 0, 360, 363, 3, 48, 24, 0, 361, 363, 3, 124, 62, 0, 362, 359, 1, 0, 0, 0, 362, 360, 1, 0, 0, 0, 362, 361, 1, 0, 0, 0, 363, 364, 1, 0, 0, 0, 364, 365, 5, 0, 0, 1, 365, 43, 1, 0, 0, 0, 366, 372, 3, 46, 23, 0, 367, 368, 5, 95, 0, 0, 368, 369, 5, 1, 0, 0, 369, 371, 3, 46, 23, 0, 370, 367, 1, 0, 0, 0, 371, 374, 1, 0, 0, 0, 372, 370, 1, 0, 0, 0, 372, 373, 1, 0, 0, 0, 373, 45, 1, 0, 0, 0, 374, 372, 1, 0, 0, 0, 375, 382, 3, 48, 24, 0, 376, 377, 5, 130, 0, 0, 377, 378, 3, 44, 22, 0, 378, 379, 5, 149, 0, 0, 379, 382, 1, 0, 0, 0, 380, 382, 3, 164, 82, 0, 381, 375, 1, 0, 0, 0, 381, 376, 1, 0, 0, 0, 381, 380, 1, 0, 0, 0, 382, 47, 1, 0, 0, 0, 383, 385, 3, 50, 25, 0, 384, 383, 1, 0, 0, 0, 384, 385, 1, 0, 0, 0, 385, 386, 1, 0, 0, 0, 386, 388, 5, 79, 0, 0, 387, 389, 5, 24, 0, 0, 388, 387, 1, 0, 0, 0, 388, 389, 1, 0, 0, 0, 389, 391, 1, 0, 0, 0, 390, 392, 3, 52, 26, 0, 391, 390, 1, 0, 0, 0, 391, 392, 1, 0, 0, 0, 392, 393, 1, 0, 0, 0, 393, 395, 3, 114, 57, 0, 394, 396, 3, 54, 27, 0, 395, 394, 1, 0, 0, 0, 395, 396, 1, 0, 0, 0, 396, 398, 1, 0, 0, 0, 397, 399, 3, 56, 28, 0, 398, 397, 1, 0, 0, 0, 398, 399, 1, 0, 0, 0, 399, 401, 1, 0, 0, 0, 400, 402, 3, 60, 30, 0, 401, 400, 1, 0, 0, 0, 401, 402, 1, 0, 0, 0, 402, 404, 1, 0, 0, 0, 403, 405, 3, 62, 31, 0, 404, 403, 1, 0, 0, 0, 404, 405, 1, 0, 0, 0, 405, 407, 1, 0, 0, 0, 406, 408, 3, 64, 32, 0, 407, 406, 1, 0, 0, 0, 407, 408, 1, 0, 0, 0, 408, 411, 1, 0, 0, 0, 409, 410, 5, 102, 0, 0, 410, 412, 7, 0, 0, 0, 411, 409, 1, 0, 0, 0, 411, 412, 1, 0, 0, 0, 412, 415, 1, 0, 0, 0, 413, 414, 5, 102, 0, 0, 414, 416, 5, 89, 0, 0, 415, 413, 1, 0, 0, 0, 415, 416, 1, 0, 0, 0, 416, 418, 1, 0, 0, 0, 417, 419, 3, 66, 33, 0, 418, 417, 1, 0, 0, 0, 418, 419, 1, 0, 0, 0, 419, 421, 1, 0, 0, 0, 420, 422, 3, 58, 29, 0, 421, 420, 1, 0, 0, 0, 421, 422, 1, 0, 0, 0, 422, 424, 1, 0, 0, 0, 423, 425, 3, 68, 34, 0, 424, 423, 1, 0, 0, 0, 424, 425, 1, 0, 0, 0, 425, 428, 1, 0, 0, 0, 426, 429, 3, 72, 36, 0, 427, 429, 3, 74, 37, 0, 428, 426, 1, 0, 0, 0, 428, 427, 1, 0, 0, 0, 428, 429, 1, 0, 0, 0, 429, 431, 1, 0, 0, 0, 430, 432, 3, 76, 38, 0, 431, 430, 1, 0, 0, 0, 431, 432, 1, 0, 0, 0, 432, 49, 1, 0, 0, 0, 433, 434, 5, 102, 0, 0, 434, 435, 3, 128, 64, 0, 435, 51, 1, 0, 0, 0, 436, 437, 5, 88, 0, 0, 437, 440, 5, 108, 0, 0, 438, 439, 5, 102, 0, 0, 439, 441, 5, 85, 0, 0, 440, 438, 1, 0, 0, 0, 440, 441, 1, 0, 0, 0, 441, 53, 1, 0, 0, 0, 442, 443, 5, 34, 0, 0, 443, 444, 3, 78, 39, 0, 444, 55, 1, 0, 0, 0, 445, 447, 7, 1, 0, 0, 446, 445, 1, 0, 0, 0, 446, 447, 1, 0, 0, 0, 447, 448, 1, 0, 0, 0, 448, 449, 5, 5, 0, 0, 449, 450, 5, 47, 0, 0, 450, 451, 3, 114, 57, 0, 451, 57, 1, 0, 0, 0, 452, 453, 5, 101, 0, 0, 453, 454, 3, 160, 80, 0, 454, 455, 5, 6, 0, 0, 455, 456, 5, 130, 0, 0, 456, 457, 3, 98, 49, 0, 457, 467, 5, 149, 0, 0, 458, 459, 5, 116, 0, 0, 459, 460, 3, 160, 80, 0, 460, 461, 5, 6, 0, 0, 461, 462, 5, 130, 0, 0, 462, 463, 3, 98, 49, 0, 463, 464, 5, 149, 0, 0, 464, 466, 1, 0, 0, 0, 465, 458, 1, 0, 0, 0, 466, 469, 1, 0, 0, 0, 467, 465, 1, 0, 0, 0, 467, 468, 1, 0, 0, 0, 468, 59, 1, 0, 0, 0, 469, 467, 1, 0, 0, 0, 470, 471, 5, 69, 0, 0, 471, 472, 3, 116, 58, 0, 472, 61, 1, 0, 0, 0, 473, 474, 5, 99, 0, 0, 474, 475, 3, 116, 58, 0, 475, 63, 1, 0, 0, 0, 476, 477, 5, 36, 0, 0, 477, 484, 5, 11, 0, 0, 478, 479, 7, 0, 0, 0, 479, 480, 5, 130, 0, 0, 480, 481, 3, 114, 57, 0, 481, 482, 5, 149, 0, 0, 482, 485, 1, 0, 0, 0, 483, 485, 3, 114, 57, 0, 484, 478, 1, 0, 0, 0, 484, 483, 1, 0, 0, 0, 485, 65, 1, 0, 0, 0, 486, 487, 5, 37, 0, 0, 487, 488, 3, 116, 58, 0, 488, 67, 1, 0, 0, 0, 489, 490, 5, 64, 0, 0, 490, 491, 5, 11, 0, 0, 491, 492, 3, 88, 44, 0, 492, 69, 1, 0, 0, 0, 493, 494, 5, 64, 0, 0, 494, 495, 5, 11, 0, 0, 495, 496, 3, 114, 57, 0, 496, 71, 1, 0, 0, 0, 497, 498, 5, 54, 0, 0, 498, 501, 3, 116, 58, 0, 499, 500, 5, 116, 0, 0, 500, 502, 3, 116, 58, 0, 501, 499, 1, 0, 0, 0, 501, 502, 1, 0, 0, 0, 502, 507, 1, 0, 0, 0, 503, 504, 5, 102, 0, 0, 504, 508, 5, 85, 0, 0, 505, 506, 5, 11, 0, 0, 506, 508, 3, 114, 57, 0, 507, 503, 1, 0, 0, 0, 507, 505, 1, 0, 0, 0, 507, 508, 1, 0, 0, 0, 508, 527, 1, 0, 0, 0, 509, 510, 5, 54, 0, 0, 510, 513, 3, 116, 58, 0, 511, 512, 5, 102, 0, 0, 512, 514, 5, 85, 0, 0, 513, 511, 1, 0, 0, 0, 513, 514, 1, 0, 0, 0, 514, 515, 1, 0, 0, 0, 515, 516, 5, 61, 0, 0, 516, 517, 3, 116, 58, 0, 517, 527, 1, 0, 0, 0, 518, 519, 5, 54, 0, 0, 519, 520, 3, 116, 58, 0, 520, 521, 5, 61, 0, 0, 521, 524, 3, 116, 58, 0, 522, 523, 5, 11, 0, 0, 523, 525, 3, 114, 57, 0, 524, 522, 1, 0, 0, 0, 524, 525, 1, 0, 0, 0, 525, 527, 1, 0, 0, 0, 526, 497, 1, 0, 0, 0, 526, 509, 1, 0, 0, 0, 526, 518, 1, 0, 0, 0, 527, 73, 1, 0, 0, 0, 528, 529, 5, 61, 0, 0, 529, 530, 3, 116, 58, 0, 530, 75, 1, 0, 0, 0, 531, 532, 5, 81, 0, 0, 532, 533, 3, 94, 47, 0, 533, 77, 1, 0, 0, 0, 534, 535, 6, 39, -1, 0, 535, 537, 3, 136, 68, 0, 536, 538, 5, 28, 0, 0, 537, 536, 1, 0, 0, 0, 537, 538, 1, 0, 0, 0, 538, 540, 1, 0, 0, 0, 539, 541, 3, 86, 43, 0, 540, 539, 1, 0, 0, 0, 540, 541, 1, 0, 0, 0, 541, 547, 1, 0, 0, 0, 542, 543, 5, 130, 0, 0, 543, 544, 3, 78, 39, 0, 544, 545, 5, 149, 0, 0, 545, 547, 1, 0, 0, 0, 546, 534, 1, 0, 0, 0, 546, 542, 1, 0, 0, 0, 547, 562, 1, 0, 0, 0, 548, 549, 10, 3, 0, 0, 549, 550, 3, 82, 41, 0, 550, 551, 3, 78, 39, 4, 551, 561, 1, 0, 0, 0, 552, 554, 10, 4, 0, 0, 553, 555, 3, 80, 40, 0, 554, 553, 1, 0, 0, 0, 554, 555, 1, 0, 0, 0, 555, 556, 1, 0, 0, 0, 556, 557, 5, 47, 0, 0, 557, 558, 3, 78, 39, 0, 558, 559, 3, 84, 42, 0, 559, 561, 1, 0, 0, 0, 560, 548, 1, 0, 0, 0, 560, 552, 1, 0, 0, 0, 561, 564, 1, 0, 0, 0, 562, 560, 1, 0, 0, 0, 562, 563, 1, 0, 0, 0, 563, 79, 1, 0, 0, 0, 564, 562, 1, 0, 0, 0, 565, 567, 7, 2, 0, 0, 566, 565, 1, 0, 0, 0, 566, 567, 1, 0, 0, 0, 567, 568, 1, 0, 0, 0, 568, 575, 5, 44, 0, 0, 569, 571, 5, 44, 0, 0, 570, 572, 7, 2, 0, 0, 571, 570, 1, 0, 0, 0, 571, 572, 1, 0, 0, 0, 572, 575, 1, 0, 0, 0, 573, 575, 7, 2, 0, 0, 574, 566, 1, 0, 0, 0, 574, 569, 1, 0, 0, 0, 574, 573, 1, 0, 0, 0, 575, 609, 1, 0, 0, 0, 576, 578, 7, 3, 0, 0, 577, 576, 1, 0, 0, 0, 577, 578, 1, 0, 0, 0, 578, 579, 1, 0, 0, 0, 579, 581, 7, 4, 0, 0, 580, 582, 5, 65, 0, 0, 581, 580, 1, 0, 0, 0, 581, 582, 1, 0, 0, 0, 582, 591, 1, 0, 0, 0, 583, 585, 7, 4, 0, 0, 584, 586, 5, 65, 0, 0, 585, 584, 1, 0, 0, 0, 585, 586, 1, 0, 0, 0, 586, 588, 1, 0, 0, 0, 587, 589, 7, 3, 0, 0, 588, 587, 1, 0, 0, 0, 588, 589, 1, 0, 0, 0, 589, 591, 1, 0, 0, 0, 590, 577, 1, 0, 0, 0, 590, 583, 1, 0, 0, 0, 591, 609, 1, 0, 0, 0, 592, 594, 7, 5, 0, 0, 593, 592, 1, 0, 0, 0, 593, 594, 1, 0, 0, 0, 594, 595, 1, 0, 0, 0, 595, 597, 5, 35, 0, 0, 596, 598, 5, 65, 0, 0, 597, 596, 1, 0, 0, 0, 597, 598, 1, 0, 0, 0, 598, 607, 1, 0, 0, 0, 599, 601, 5, 35, 0, 0, 600, 602, 5, 65, 0, 0, 601, 600, 1, 0, 0, 0, 601, 602, 1, 0, 0, 0, 602, 604, 1, 0, 0, 0, 603, 605, 7, 5, 0, 0, 604, 603, 1, 0, 0, 0, 604, 605, 1, 0, 0, 0, 605, 607, 1, 0, 0, 0, 606, 593, 1, 0, 0, 0, 606, 599, 1, 0, 0, 0, 607, 609, 1, 0, 0, 0, 608, 574, 1, 0, 0, 0, 608, 590, 1, 0, 0, 0, 608, 606, 1, 0, 0, 0, 609, 81, 1, 0, 0, 0, 610, 611, 5, 17, 0, 0, 611, 614, 5, 47, 0, 0, 612, 614, 5, 116, 0, 0, 613, 610, 1, 0, 0, 0, 613, 612, 1, 0, 0, 0, 614, 83, 1, 0, 0, 0, 615, 616, 5, 62, 0, 0, 616, 625, 3, 114, 57, 0, 617, 618, 5, 96, 0, 0, 618, 619, 5, 130, 0, 0, 619, 620, 3, 114, 57, 0, 620, 621, 5, 149, 0, 0, 621, 625, 1, 0, 0, 0, 622, 623, 5, 96, 0, 0, 623, 625, 3, 114, 57, 0, 624, 615, 1, 0, 0, 0, 624, 617, 1, 0, 0, 0, 624, 622, 1, 0, 0, 0, 625, 85, 1, 0, 0, 0, 626, 627, 5, 77, 0, 0, 627, 630, 3, 92, 46, 0, 628, 629, 5, 61, 0, 0, 629, 631, 3, 92, 46, 0, 630, 628, 1, 0, 0, 0, 630, 631, 1, 0, 0, 0, 631, 87, 1, 0, 0, 0, 632, 637, 3, 90, 45, 0, 633, 634, 5, 116, 0, 0, 634, 636, 3, 90, 45, 0, 635, 633, 1, 0, 0, 0, 636, 639, 1, 0, 0, 0, 637, 635, 1, 0, 0, 0, 637, 638, 1, 0, 0, 0, 638, 89, 1, 0, 0, 0, 639, 637, 1, 0, 0, 0, 640, 642, 3, 116, 58, 0, 641, 643, 7, 6, 0, 0, 642, 641, 1, 0, 0, 0, 642, 643, 1, 0, 0, 0, 643, 646, 1, 0, 0, 0, 644, 645, 5, 60, 0, 0, 645, 647, 7, 7, 0, 0, 646, 644, 1, 0, 0, 0, 646, 647, 1, 0, 0, 0, 647, 650, 1, 0, 0, 0, 648, 649, 5, 16, 0, 0, 649, 651, 5, 110, 0, 0, 650, 648, 1, 0, 0, 0, 650, 651, 1, 0, 0, 0, 651, 91, 1, 0, 0, 0, 652, 659, 3, 164, 82, 0, 653, 656, 3, 148, 74, 0, 654, 655, 5, 151, 0, 0, 655, 657, 3, 148, 74, 0, 656, 654, 1, 0, 0, 0, 656, 657, 1, 0, 0, 0, 657, 659, 1, 0, 0, 0, 658, 652, 1, 0, 0, 0, 658, 653, 1, 0, 0, 0, 659, 93, 1, 0, 0, 0, 660, 665, 3, 96, 48, 0, 661, 662, 5, 116, 0, 0, 662, 664, 3, 96, 48, 0, 663, 661, 1, 0, 0, 0, 664, 667, 1, 0, 0, 0, 665, 663, 1, 0, 0, 0, 665, 666, 1, 0, 0, 0, 666, 95, 1, 0, 0, 0, 667, 665, 1, 0, 0, 0, 668, 669, 3, 160, 80, 0, 669, 670, 5, 122, 0, 0, 670, 671, 3, 150, 75, 0, 671, 97, 1, 0, 0, 0, 672, 674, 3, 100, 50, 0, 673, 672, 1, 0, 0, 0, 673, 674, 1, 0, 0, 0, 674, 676, 1, 0, 0, 0, 675, 677, 3, 102, 51, 0, 676, 675, 1, 0, 0, 0, 676, 677, 1, 0, 0, 0, 677, 679, 1, 0, 0, 0, 678, 680, 3, 104, 52, 0, 679, 678, 1, 0, 0, 0, 679, 680, 1, 0, 0, 0, 680, 99, 1, 0, 0, 0, 681, 682, 5, 67, 0, 0, 682, 683, 5, 11, 0, 0, 683, 684, 3, 114, 57, 0, 684, 101, 1, 0, 0, 0, 685, 686, 5, 64, 0, 0, 686, 687, 5, 11, 0, 0, 687, 688, 3, 88, 44, 0, 688, 103, 1, 0, 0, 0, 689, 690, 7, 8, 0, 0, 690, 691, 3, 106, 53, 0, 691, 105, 1, 0, 0, 0, 692, 699, 3, 108, 54, 0, 693, 694, 5, 9, 0, 0, 694, 695, 3, 108, 54, 0, 695, 696, 5, 2, 0, 0, 696, 697, 3, 108, 54, 0, 697, 699, 1, 0, 0, 0, 698, 692, 1, 0, 0, 0, 698, 693, 1, 0, 0, 0, 699, 107, 1, 0, 0, 0, 700, 701, 5, 19, 0, 0, 701, 713, 5, 75, 0, 0, 702, 703, 5, 94, 0, 0, 703, 713, 5, 68, 0, 0, 704, 705, 5, 94, 0, 0, 705, 713, 5, 32, 0, 0, 706, 707, 3, 148, 74, 0, 707, 708, 5, 68, 0, 0, 708, 713, 1, 0, 0, 0, 709, 710, 3, 148, 74, 0, 710, 711, 5, 32, 0, 0, 711, 713, 1, 0, 0, 0, 712, 700, 1, 0, 0, 0, 712, 702, 1, 0, 0, 0, 712, 704, 1, 0, 0, 0, 712, 706, 1, 0, 0, 0, 712, 709, 1, 0, 0, 0, 713, 109, 1, 0, 0, 0, 714, 715, 3, 116, 58, 0, 715, 716, 5, 0, 0, 1, 716, 111, 1, 0, 0, 0, 717, 774, 3, 160, 80, 0, 718, 719, 3, 160, 80, 0, 719, 720, 5, 130, 0, 0, 720, 721, 3, 160, 80, 0, 721, 728, 3, 112, 56, 0, 722, 723, 5, 116, 0, 0, 723, 724, 3, 160, 80, 0, 724, 725, 3, 112, 56, 0, 725, 727, 1, 0, 0, 0, 726, 722, 1, 0, 0, 0, 727, 730, 1, 0, 0, 0, 728, 726, 1, 0, 0, 0, 728, 729, 1, 0, 0, 0, 729, 732, 1, 0, 0, 0, 730, 728, 1, 0, 0, 0, 731, 733, 5, 116, 0, 0, 732, 731, 1, 0, 0, 0, 732, 733, 1, 0, 0, 0, 733, 734, 1, 0, 0, 0, 734, 735, 5, 149, 0, 0, 735, 774, 1, 0, 0, 0, 736, 737, 3, 160, 80, 0, 737, 738, 5, 130, 0, 0, 738, 743, 3, 162, 81, 0, 739, 740, 5, 116, 0, 0, 740, 742, 3, 162, 81, 0, 741, 739, 1, 0, 0, 0, 742, 745, 1, 0, 0, 0, 743, 741, 1, 0, 0, 0, 743, 744, 1, 0, 0, 0, 744, 747, 1, 0, 0, 0, 745, 743, 1, 0, 0, 0, 746, 748, 5, 116, 0, 0, 747, 746, 1, 0, 0, 0, 747, 748, 1, 0, 0, 0, 748, 749, 1, 0, 0, 0, 749, 750, 5, 149, 0, 0, 750, 774, 1, 0, 0, 0, 751, 752, 3, 160, 80, 0, 752, 753, 5, 130, 0, 0, 753, 758, 3, 112, 56, 0, 754, 755, 5, 116, 0, 0, 755, 757, 3, 112, 56, 0, 756, 754, 1, 0, 0, 0, 757, 760, 1, 0, 0, 0, 758, 756, 1, 0, 0, 0, 758, 759, 1, 0, 0, 0, 759, 762, 1, 0, 0, 0, 760, 758, 1, 0, 0, 0, 761, 763, 5, 116, 0, 0, 762, 761, 1, 0, 0, 0, 762, 763, 1, 0, 0, 0, 763, 764, 1, 0, 0, 0, 764, 765, 5, 149, 0, 0, 765, 774, 1, 0, 0, 0, 766, 767, 3, 160, 80, 0, 767, 769, 5, 130, 0, 0, 768, 770, 3, 114, 57, 0, 769, 768, 1, 0, 0, 0, 769, 770, 1, 0, 0, 0, 770, 771, 1, 0, 0, 0, 771, 772, 5, 149, 0, 0, 772, 774, 1, 0, 0, 0, 773, 717, 1, 0, 0, 0, 773, 718, 1, 0, 0, 0, 773, 736, 1, 0, 0, 0, 773, 751, 1, 0, 0, 0, 773, 766, 1, 0, 0, 0, 774, 113, 1, 0, 0, 0, 775, 780, 3, 116, 58, 0, 776, 777, 5, 116, 0, 0, 777, 779, 3, 116, 58, 0, 778, 776, 1, 0, 0, 0, 779, 782, 1, 0, 0, 0, 780, 778, 1, 0, 0, 0, 780, 781, 1, 0, 0, 0, 781, 784, 1, 0, 0, 0, 782, 780, 1, 0, 0, 0, 783, 785, 5, 116, 0, 0, 784, 783, 1, 0, 0, 0, 784, 785, 1, 0, 0, 0, 785, 115, 1, 0, 0, 0, 786, 787, 6, 58, -1, 0, 787, 789, 5, 12, 0, 0, 788, 790, 3, 116, 58, 0, 789, 788, 1, 0, 0, 0, 789, 790, 1, 0, 0, 0, 790, 796, 1, 0, 0, 0, 791, 792, 5, 98, 0, 0, 792, 793, 3, 116, 58, 0, 793, 794, 5, 83, 0, 0, 794, 795, 3, 116, 58, 0, 795, 797, 1, 0, 0, 0, 796, 791, 1, 0, 0, 0, 797, 798, 1, 0, 0, 0, 798, 796, 1, 0, 0, 0, 798, 799, 1, 0, 0, 0, 799, 802, 1, 0, 0, 0, 800, 801, 5, 25, 0, 0, 801, 803, 3, 116, 58, 0, 802, 800, 1, 0, 0, 0, 802, 803, 1, 0, 0, 0, 803, 804, 1, 0, 0, 0, 804, 805, 5, 26, 0, 0, 805, 936, 1, 0, 0, 0, 806, 807, 5, 13, 0, 0, 807, 808, 5, 130, 0, 0, 808, 809, 3, 116, 58, 0, 809, 810, 5, 6, 0, 0, 810, 811, 3, 112, 56, 0, 811, 812, 5, 149, 0, 0, 812, 936, 1, 0, 0, 0, 813, 814, 5, 20, 0, 0, 814, 936, 5, 110, 0, 0, 815, 816, 5, 45, 0, 0, 816, 817, 3, 116, 58, 0, 817, 818, 3, 152, 76, 0, 818, 936, 1, 0, 0, 0, 819, 820, 5, 82, 0, 0, 820, 821, 5, 130, 0, 0, 821, 822, 3, 116, 58, 0, 822, 823, 5, 34, 0, 0, 823, 826, 3, 116, 58, 0, 824, 825, 5, 33, 0, 0, 825, 827, 3, 116, 58, 0, 826, 824, 1, 0, 0, 0, 826, 827, 1, 0, 0, 0, 827, 828, 1, 0, 0, 0, 828, 829, 5, 149, 0, 0, 829, 936, 1, 0, 0, 0, 830, 831, 5, 86, 0, 0, 831, 936, 5, 110, 0, 0, 832, 833, 5, 91, 0, 0, 833, 834, 5, 130, 0, 0, 834, 835, 7, 9, 0, 0, 835, 836, 3, 166, 83, 0, 836, 837, 5, 34, 0, 0, 837, 838, 3, 116, 58, 0, 838, 839, 5, 149, 0, 0, 839, 936, 1, 0, 0, 0, 840, 841, 3, 160, 80, 0, 841, 843, 5, 130, 0, 0, 842, 844, 3, 114, 57, 0, 843, 842, 1, 0, 0, 0, 843, 844, 1, 0, 0, 0, 844, 845, 1, 0, 0, 0, 845, 846, 5, 149, 0, 0, 846, 855, 1, 0, 0, 0, 847, 849, 5, 130, 0, 0, 848, 850, 5, 24, 0, 0, 849, 848, 1, 0, 0, 0, 849, 850, 1, 0, 0, 0, 850, 852, 1, 0, 0, 0, 851, 853, 3, 118, 59, 0, 852, 851, 1, 0, 0, 0, 852, 853, 1, 0, 0, 0, 853, 854, 1, 0, 0, 0, 854, 856, 5, 149, 0, 0, 855, 847, 1, 0, 0, 0, 855, 856, 1, 0, 0, 0, 856, 857, 1, 0, 0, 0, 857, 858, 5, 66, 0, 0, 858, 859, 5, 130, 0, 0, 859, 860, 3, 98, 49, 0, 860, 861, 5, 149, 0, 0, 861, 936, 1, 0, 0, 0, 862, 863, 3, 160, 80, 0, 863, 865, 5, 130, 0, 0, 864, 866, 3, 114, 57, 0, 865, 864, 1, 0, 0, 0, 865, 866, 1, 0, 0, 0, 866, 867, 1, 0, 0, 0, 867, 868, 5, 149, 0, 0, 868, 877, 1, 0, 0, 0, 869, 871, 5, 130, 0, 0, 870, 872, 5, 24, 0, 0, 871, 870, 1, 0, 0, 0, 871, 872, 1, 0, 0, 0, 872, 874, 1, 0, 0, 0, 873, 875, 3, 118, 59, 0, 874, 873, 1, 0, 0, 0, 874, 875, 1, 0, 0, 0, 875, 876, 1, 0, 0, 0, 876, 878, 5, 149, 0, 0, 877, 869, 1, 0, 0, 0, 877, 878, 1, 0, 0, 0, 878, 879, 1, 0, 0, 0, 879, 880, 5, 66, 0, 0, 880, 881, 3, 160, 80, 0, 881, 936, 1, 0, 0, 0, 882, 888, 3, 160, 80, 0, 883, 885, 5, 130, 0, 0, 884, 886, 3, 114, 57, 0, 885, 884, 1, 0, 0, 0, 885, 886, 1, 0, 0, 0, 886, 887, 1, 0, 0, 0, 887, 889, 5, 149, 0, 0, 888, 883, 1, 0, 0, 0, 888, 889, 1, 0, 0, 0, 889, 890, 1, 0, 0, 0, 890, 892, 5, 130, 0, 0, 891, 893, 5, 24, 0, 0, 892, 891, 1, 0, 0, 0, 892, 893, 1, 0, 0, 0, 893, 895, 1, 0, 0, 0, 894, 896, 3, 118, 59, 0, 895, 894, 1, 0, 0, 0, 895, 896, 1, 0, 0, 0, 896, 897, 1, 0, 0, 0, 897, 898, 5, 149, 0, 0, 898, 936, 1, 0, 0, 0, 899, 936, 3, 124, 62, 0, 900, 936, 3, 168, 84, 0, 901, 936, 3, 150, 75, 0, 902, 903, 5, 118, 0, 0, 903, 936, 3, 116, 58, 19, 904, 905, 5, 58, 0, 0, 905, 936, 3, 116, 58, 13, 906, 907, 3, 140, 70, 0, 907, 908, 5, 120, 0, 0, 908, 910, 1, 0, 0, 0, 909, 906, 1, 0, 0, 0, 909, 910, 1, 0, 0, 0, 910, 911, 1, 0, 0, 0, 911, 936, 5, 112, 0, 0, 912, 913, 5, 130, 0, 0, 913, 914, 3, 44, 22, 0, 914, 915, 5, 149, 0, 0, 915, 936, 1, 0, 0, 0, 916, 917, 5, 130, 0, 0, 917, 918, 3, 116, 58, 0, 918, 919, 5, 149, 0, 0, 919, 936, 1, 0, 0, 0, 920, 921, 5, 130, 0, 0, 921, 922, 3, 114, 57, 0, 922, 923, 5, 149, 0, 0, 923, 936, 1, 0, 0, 0, 924, 926, 5, 129, 0, 0, 925, 927, 3, 114, 57, 0, 926, 925, 1, 0, 0, 0, 926, 927, 1, 0, 0, 0, 927, 928, 1, 0, 0, 0, 928, 936, 5, 148, 0, 0, 929, 931, 5, 128, 0, 0, 930, 932, 3, 40, 20, 0, 931, 930, 1, 0, 0, 0, 931, 932, 1, 0, 0, 0, 932, 933, 1, 0, 0, 0, 933, 936, 5, 147, 0, 0, 934, 936, 3, 132, 66, 0, 935, 786, 1, 0, 0, 0, 935, 806, 1, 0, 0, 0, 935, 813, 1, 0, 0, 0, 935, 815, 1, 0, 0, 0, 935, 819, 1, 0, 0, 0, 935, 830, 1, 0, 0, 0, 935, 832, 1, 0, 0, 0, 935, 840, 1, 0, 0, 0, 935, 862, 1, 0, 0, 0, 935, 882, 1, 0, 0, 0, 935, 899, 1, 0, 0, 0, 935, 900, 1, 0, 0, 0, 935, 901, 1, 0, 0, 0, 935, 902, 1, 0, 0, 0, 935, 904, 1, 0, 0, 0, 935, 909, 1, 0, 0, 0, 935, 912, 1, 0, 0, 0, 935, 916, 1, 0, 0, 0, 935, 920, 1, 0, 0, 0, 935, 924, 1, 0, 0, 0, 935, 929, 1, 0, 0, 0, 935, 934, 1, 0, 0, 0, 936, 1041, 1, 0, 0, 0, 937, 941, 10, 18, 0, 0, 938, 942, 5, 112, 0, 0, 939, 942, 5, 151, 0, 0, 940, 942, 5, 138, 0, 0, 941, 938, 1, 0, 0, 0, 941, 939, 1, 0, 0, 0, 941, 940, 1, 0, 0, 0, 942, 943, 1, 0, 0, 0, 943, 1040, 3, 116, 58, 19, 944, 948, 10, 17, 0, 0, 945, 949, 5, 139, 0, 0, 946, 949, 5, 118, 0, 0, 947, 949, 5, 117, 0, 0, 948, 945, 1, 0, 0, 0, 948, 946, 1, 0, 0, 0, 948, 947, 1, 0, 0, 0, 949, 950, 1, 0, 0, 0, 950, 1040, 3, 116, 58, 18, 951, 976, 10, 16, 0, 0, 952, 977, 5, 121, 0, 0, 953, 977, 5, 122, 0, 0, 954, 977, 5, 133, 0, 0, 955, 977, 5, 131, 0, 0, 956, 977, 5, 132, 0, 0, 957, 977, 5, 123, 0, 0, 958, 977, 5, 124, 0, 0, 959, 961, 5, 58, 0, 0, 960, 959, 1, 0, 0, 0, 960, 961, 1, 0, 0, 0, 961, 962, 1, 0, 0, 0, 962, 964, 5, 42, 0, 0, 963, 965, 5, 15, 0, 0, 964, 963, 1, 0, 0, 0, 964, 965, 1, 0, 0, 0, 965, 977, 1, 0, 0, 0, 966, 968, 5, 58, 0, 0, 967, 966, 1, 0, 0, 0, 967, 968, 1, 0, 0, 0, 968, 969, 1, 0, 0, 0, 969, 977, 7, 10, 0, 0, 970, 977, 5, 145, 0, 0, 971, 977, 5, 146, 0, 0, 972, 977, 5, 135, 0, 0, 973, 977, 5, 126, 0, 0, 974, 977, 5, 127, 0, 0, 975, 977, 5, 134, 0, 0, 976, 952, 1, 0, 0, 0, 976, 953, 1, 0, 0, 0, 976, 954, 1, 0, 0, 0, 976, 955, 1, 0, 0, 0, 976, 956, 1, 0, 0, 0, 976, 957, 1, 0, 0, 0, 976, 958, 1, 0, 0, 0, 976, 960, 1, 0, 0, 0, 976, 967, 1, 0, 0, 0, 976, 970, 1, 0, 0, 0, 976, 971, 1, 0, 0, 0, 976, 972, 1, 0, 0, 0, 976, 973, 1, 0, 0, 0, 976, 974, 1, 0, 0, 0, 976, 975, 1, 0, 0, 0, 977, 978, 1, 0, 0, 0, 978, 1040, 3, 116, 58, 17, 979, 980, 10, 14, 0, 0, 980, 981, 5, 137, 0, 0, 981, 1040, 3, 116, 58, 15, 982, 983, 10, 12, 0, 0, 983, 984, 5, 2, 0, 0, 984, 1040, 3, 116, 58, 13, 985, 986, 10, 11, 0, 0, 986, 987, 5, 63, 0, 0, 987, 1040, 3, 116, 58, 12, 988, 990, 10, 10, 0, 0, 989, 991, 5, 58, 0, 0, 990, 989, 1, 0, 0, 0, 990, 991, 1, 0, 0, 0, 991, 992, 1, 0, 0, 0, 992, 993, 5, 9, 0, 0, 993, 994, 3, 116, 58, 0, 994, 995, 5, 2, 0, 0, 995, 996, 3, 116, 58, 11, 996, 1040, 1, 0, 0, 0, 997, 998, 10, 9, 0, 0, 998, 999, 5, 140, 0, 0, 999, 1000, 3, 116, 58, 0, 1000, 1001, 5, 115, 0, 0, 1001, 1002, 3, 116, 58, 9, 1002, 1040, 1, 0, 0, 0, 1003, 1004, 10, 25, 0, 0, 1004, 1005, 5, 129, 0, 0, 1005, 1006, 3, 116, 58, 0, 1006, 1007, 5, 148, 0, 0, 1007, 1040, 1, 0, 0, 0, 1008, 1009, 10, 24, 0, 0, 1009, 1010, 5, 120, 0, 0, 1010, 1040, 5, 108, 0, 0, 1011, 1012, 10, 23, 0, 0, 1012, 1013, 5, 120, 0, 0, 1013, 1040, 3, 160, 80, 0, 1014, 1015, 10, 22, 0, 0, 1015, 1016, 5, 136, 0, 0, 1016, 1017, 5, 129, 0, 0, 1017, 1018, 3, 116, 58, 0, 1018, 1019, 5, 148, 0, 0, 1019, 1040, 1, 0, 0, 0, 1020, 1021, 10, 21, 0, 0, 1021, 1022, 5, 136, 0, 0, 1022, 1040, 5, 108, 0, 0, 1023, 1024, 10, 20, 0, 0, 1024, 1025, 5, 136, 0, 0, 1025, 1040, 3, 160, 80, 0, 1026, 1027, 10, 15, 0, 0, 1027, 1029, 5, 46, 0, 0, 1028, 1030, 5, 58, 0, 0, 1029, 1028, 1, 0, 0, 0, 1029, 1030, 1, 0, 0, 0, 1030, 1031, 1, 0, 0, 0, 1031, 1040, 5, 59, 0, 0, 1032, 1037, 10, 8, 0, 0, 1033, 1034, 5, 6, 0, 0, 1034, 1038, 3, 160, 80, 0, 1035, 1036, 5, 6, 0, 0, 1036, 1038, 5, 110, 0, 0, 1037, 1033, 1, 0, 0, 0, 1037, 1035, 1, 0, 0, 0, 1038, 1040, 1, 0, 0, 0, 1039, 937, 1, 0, 0, 0, 1039, 944, 1, 0, 0, 0, 1039, 951, 1, 0, 0, 0, 1039, 979, 1, 0, 0, 0, 1039, 982, 1, 0, 0, 0, 1039, 985, 1, 0, 0, 0, 1039, 988, 1, 0, 0, 0, 1039, 997, 1, 0, 0, 0, 1039, 1003, 1, 0, 0, 0, 1039, 1008, 1, 0, 0, 0, 1039, 1011, 1, 0, 0, 0, 1039, 1014, 1, 0, 0, 0, 1039, 1020, 1, 0, 0, 0, 1039, 1023, 1, 0, 0, 0, 1039, 1026, 1, 0, 0, 0, 1039, 1032, 1, 0, 0, 0, 1040, 1043, 1, 0, 0, 0, 1041, 1039, 1, 0, 0, 0, 1041, 1042, 1, 0, 0, 0, 1042, 117, 1, 0, 0, 0, 1043, 1041, 1, 0, 0, 0, 1044, 1049, 3, 120, 60, 0, 1045, 1046, 5, 116, 0, 0, 1046, 1048, 3, 120, 60, 0, 1047, 1045, 1, 0, 0, 0, 1048, 1051, 1, 0, 0, 0, 1049, 1047, 1, 0, 0, 0, 1049, 1050, 1, 0, 0, 0, 1050, 1053, 1, 0, 0, 0, 1051, 1049, 1, 0, 0, 0, 1052, 1054, 5, 116, 0, 0, 1053, 1052, 1, 0, 0, 0, 1053, 1054, 1, 0, 0, 0, 1054, 119, 1, 0, 0, 0, 1055, 1058, 3, 122, 61, 0, 1056, 1058, 3, 116, 58, 0, 1057, 1055, 1, 0, 0, 0, 1057, 1056, 1, 0, 0, 0, 1058, 121, 1, 0, 0, 0, 1059, 1060, 5, 130, 0, 0, 1060, 1065, 3, 160, 80, 0, 1061, 1062, 5, 116, 0, 0, 1062, 1064, 3, 160, 80, 0, 1063, 1061, 1, 0, 0, 0, 1064, 1067, 1, 0, 0, 0, 1065, 1063, 1, 0, 0, 0, 1065, 1066, 1, 0, 0, 0, 1066, 1069, 1, 0, 0, 0, 1067, 1065, 1, 0, 0, 0, 1068, 1070, 5, 116, 0, 0, 1069, 1068, 1, 0, 0, 0, 1069, 1070, 1, 0, 0, 0, 1070, 1071, 1, 0, 0, 0, 1071, 1072, 5, 149, 0, 0, 1072, 1085, 1, 0, 0, 0, 1073, 1078, 3, 160, 80, 0, 1074, 1075, 5, 116, 0, 0, 1075, 1077, 3, 160, 80, 0, 1076, 1074, 1, 0, 0, 0, 1077, 1080, 1, 0, 0, 0, 1078, 1076, 1, 0, 0, 0, 1078, 1079, 1, 0, 0, 0, 1079, 1082, 1, 0, 0, 0, 1080, 1078, 1, 0, 0, 0, 1081, 1083, 5, 116, 0, 0, 1082, 1081, 1, 0, 0, 0, 1082, 1083, 1, 0, 0, 0, 1083, 1085, 1, 0, 0, 0, 1084, 1059, 1, 0, 0, 0, 1084, 1073, 1, 0, 0, 0, 1085, 1086, 1, 0, 0, 0, 1086, 1087, 5, 111, 0, 0, 1087, 1088, 3, 116, 58, 0, 1088, 123, 1, 0, 0, 0, 1089, 1090, 5, 132, 0, 0, 1090, 1094, 3, 160, 80, 0, 1091, 1093, 3, 126, 63, 0, 1092, 1091, 1, 0, 0, 0, 1093, 1096, 1, 0, 0, 0, 1094, 1092, 1, 0, 0, 0, 1094, 1095, 1, 0, 0, 0, 1095, 1097, 1, 0, 0, 0, 1096, 1094, 1, 0, 0, 0, 1097, 1098, 5, 151, 0, 0, 1098, 1099, 5, 124, 0, 0, 1099, 1118, 1, 0, 0, 0, 1100, 1101, 5, 132, 0, 0, 1101, 1105, 3, 160, 80, 0, 1102, 1104, 3, 126, 63, 0, 1103, 1102, 1, 0, 0, 0, 1104, 1107, 1, 0, 0, 0, 1105, 1103, 1, 0, 0, 0, 1105, 1106, 1, 0, 0, 0, 1106, 1108, 1, 0, 0, 0, 1107, 1105, 1, 0, 0, 0, 1108, 1110, 5, 124, 0, 0, 1109, 1111, 3, 124, 62, 0, 1110, 1109, 1, 0, 0, 0, 1110, 1111, 1, 0, 0, 0, 1111, 1112, 1, 0, 0, 0, 1112, 1113, 5, 132, 0, 0, 1113, 1114, 5, 151, 0, 0, 1114, 1115, 3, 160, 80, 0, 1115, 1116, 5, 124, 0, 0, 1116, 1118, 1, 0, 0, 0, 1117, 1089, 1, 0, 0, 0, 1117, 1100, 1, 0, 0, 0, 1118, 125, 1, 0, 0, 0, 1119, 1120, 3, 160, 80, 0, 1120, 1121, 5, 122, 0, 0, 1121, 1122, 3, 166, 83, 0, 1122, 1131, 1, 0, 0, 0, 1123, 1124, 3, 160, 80, 0, 1124, 1125, 5, 122, 0, 0, 1125, 1126, 5, 128, 0, 0, 1126, 1127, 3, 116, 58, 0, 1127, 1128, 5, 147, 0, 0, 1128, 1131, 1, 0, 0, 0, 1129, 1131, 3, 160, 80, 0, 1130, 1119, 1, 0, 0, 0, 1130, 1123, 1, 0, 0, 0, 1130, 1129, 1, 0, 0, 0, 1131, 127, 1, 0, 0, 0, 1132, 1137, 3, 130, 65, 0, 1133, 1134, 5, 116, 0, 0, 1134, 1136, 3, 130, 65, 0, 1135, 1133, 1, 0, 0, 0, 1136, 1139, 1, 0, 0, 0, 1137, 1135, 1, 0, 0, 0, 1137, 1138, 1, 0, 0, 0, 1138, 1141, 1, 0, 0, 0, 1139, 1137, 1, 0, 0, 0, 1140, 1142, 5, 116, 0, 0, 1141, 1140, 1, 0, 0, 0, 1141, 1142, 1, 0, 0, 0, 1142, 129, 1, 0, 0, 0, 1143, 1144, 3, 160, 80, 0, 1144, 1145, 5, 6, 0, 0, 1145, 1146, 5, 130, 0, 0, 1146, 1147, 3, 44, 22, 0, 1147, 1148, 5, 149, 0, 0, 1148, 1154, 1, 0, 0, 0, 1149, 1150, 3, 116, 58, 0, 1150, 1151, 5, 6, 0, 0, 1151, 1152, 3, 160, 80, 0, 1152, 1154, 1, 0, 0, 0, 1153, 1143, 1, 0, 0, 0, 1153, 1149, 1, 0, 0, 0, 1154, 131, 1, 0, 0, 0, 1155, 1163, 3, 164, 82, 0, 1156, 1157, 3, 140, 70, 0, 1157, 1158, 5, 120, 0, 0, 1158, 1160, 1, 0, 0, 0, 1159, 1156, 1, 0, 0, 0, 1159, 1160, 1, 0, 0, 0, 1160, 1161, 1, 0, 0, 0, 1161, 1163, 3, 134, 67, 0, 1162, 1155, 1, 0, 0, 0, 1162, 1159, 1, 0, 0, 0, 1163, 133, 1, 0, 0, 0, 1164, 1169, 3, 160, 80, 0, 1165, 1166, 5, 120, 0, 0, 1166, 1168, 3, 160, 80, 0, 1167, 1165, 1, 0, 0, 0, 1168, 1171, 1, 0, 0, 0, 1169, 1167, 1, 0, 0, 0, 1169, 1170, 1, 0, 0, 0, 1170, 135, 1, 0, 0, 0, 1171, 1169, 1, 0, 0, 0, 1172, 1173, 6, 68, -1, 0, 1173, 1182, 3, 140, 70, 0, 1174, 1182, 3, 138, 69, 0, 1175, 1176, 5, 130, 0, 0, 1176, 1177, 3, 44, 22, 0, 1177, 1178, 5, 149, 0, 0, 1178, 1182, 1, 0, 0, 0, 1179, 1182, 3, 124, 62, 0, 1180, 1182, 3, 164, 82, 0, 1181, 1172, 1, 0, 0, 0, 1181, 1174, 1, 0, 0, 0, 1181, 1175, 1, 0, 0, 0, 1181, 1179, 1, 0, 0, 0, 1181, 1180, 1, 0, 0, 0, 1182, 1191, 1, 0, 0, 0, 1183, 1187, 10, 3, 0, 0, 1184, 1188, 3, 158, 79, 0, 1185, 1186, 5, 6, 0, 0, 1186, 1188, 3, 160, 80, 0, 1187, 1184, 1, 0, 0, 0, 1187, 1185, 1, 0, 0, 0, 1188, 1190, 1, 0, 0, 0, 1189, 1183, 1, 0, 0, 0, 1190, 1193, 1, 0, 0, 0, 1191, 1189, 1, 0, 0, 0, 1191, 1192, 1, 0, 0, 0, 1192, 137, 1, 0, 0, 0, 1193, 1191, 1, 0, 0, 0, 1194, 1195, 3, 160, 80, 0, 1195, 1197, 5, 130, 0, 0, 1196, 1198, 3, 142, 71, 0, 1197, 1196, 1, 0, 0, 0, 1197, 1198, 1, 0, 0, 0, 1198, 1199, 1, 0, 0, 0, 1199, 1200, 5, 149, 0, 0, 1200, 139, 1, 0, 0, 0, 1201, 1202, 3, 144, 72, 0, 1202, 1203, 5, 120, 0, 0, 1203, 1205, 1, 0, 0, 0, 1204, 1201, 1, 0, 0, 0, 1204, 1205, 1, 0, 0, 0, 1205, 1206, 1, 0, 0, 0, 1206, 1207, 3, 160, 80, 0, 1207, 141, 1, 0, 0, 0, 1208, 1213, 3, 116, 58, 0, 1209, 1210, 5, 116, 0, 0, 1210, 1212, 3, 116, 58, 0, 1211, 1209, 1, 0, 0, 0, 1212, 1215, 1, 0, 0, 0, 1213, 1211, 1, 0, 0, 0, 1213, 1214, 1, 0, 0, 0, 1214, 1217, 1, 0, 0, 0, 1215, 1213, 1, 0, 0, 0, 1216, 1218, 5, 116, 0, 0, 1217, 1216, 1, 0, 0, 0, 1217, 1218, 1, 0, 0, 0, 1218, 143, 1, 0, 0, 0, 1219, 1220, 3, 160, 80, 0, 1220, 145, 1, 0, 0, 0, 1221, 1230, 5, 106, 0, 0, 1222, 1223, 5, 120, 0, 0, 1223, 1230, 7, 11, 0, 0, 1224, 1225, 5, 108, 0, 0, 1225, 1227, 5, 120, 0, 0, 1226, 1228, 7, 11, 0, 0, 1227, 1226, 1, 0, 0, 0, 1227, 1228, 1, 0, 0, 0, 1228, 1230, 1, 0, 0, 0, 1229, 1221, 1, 0, 0, 0, 1229, 1222, 1, 0, 0, 0, 1229, 1224, 1, 0, 0, 0, 1230, 147, 1, 0, 0, 0, 1231, 1233, 7, 12, 0, 0, 1232, 1231, 1, 0, 0, 0, 1232, 1233, 1, 0, 0, 0, 1233, 1240, 1, 0, 0, 0, 1234, 1241, 3, 146, 73, 0, 1235, 1241, 5, 107, 0, 0, 1236, 1241, 5, 108, 0, 0, 1237, 1241, 5, 109, 0, 0, 1238, 1241, 5, 43, 0, 0, 1239, 1241, 5, 57, 0, 0, 1240, 1234, 1, 0, 0, 0, 1240, 1235, 1, 0, 0, 0, 1240, 1236, 1, 0, 0, 0, 1240, 1237, 1, 0, 0, 0, 1240, 1238, 1, 0, 0, 0, 1240, 1239, 1, 0, 0, 0, 1241, 149, 1, 0, 0, 0, 1242, 1246, 3, 148, 74, 0, 1243, 1246, 5, 110, 0, 0, 1244, 1246, 5, 59, 0, 0, 1245, 1242, 1, 0, 0, 0, 1245, 1243, 1, 0, 0, 0, 1245, 1244, 1, 0, 0, 0, 1246, 151, 1, 0, 0, 0, 1247, 1248, 7, 13, 0, 0, 1248, 153, 1, 0, 0, 0, 1249, 1250, 7, 14, 0, 0, 1250, 155, 1, 0, 0, 0, 1251, 1252, 7, 15, 0, 0, 1252, 157, 1, 0, 0, 0, 1253, 1256, 5, 105, 0, 0, 1254, 1256, 3, 156, 78, 0, 1255, 1253, 1, 0, 0, 0, 1255, 1254, 1, 0, 0, 0, 1256, 159, 1, 0, 0, 0, 1257, 1261, 5, 105, 0, 0, 1258, 1261, 3, 152, 76, 0, 1259, 1261, 3, 154, 77, 0, 1260, 1257, 1, 0, 0, 0, 1260, 1258, 1, 0, 0, 0, 1260, 1259, 1, 0, 0, 0, 1261, 161, 1, 0, 0, 0, 1262, 1263, 3, 166, 83, 0, 1263, 1264, 5, 122, 0, 0, 1264, 1265, 3, 148, 74, 0, 1265, 163, 1, 0, 0, 0, 1266, 1267, 5, 128, 0, 0, 1267, 1268, 3, 160, 80, 0, 1268, 1269, 5, 147, 0, 0, 1269, 165, 1, 0, 0, 0, 1270, 1273, 5, 110, 0, 0, 1271, 1273, 3, 168, 84, 0, 1272, 1270, 1, 0, 0, 0, 1272, 1271, 1, 0, 0, 0, 1273, 167, 1, 0, 0, 0, 1274, 1278, 5, 142, 0, 0, 1275, 1277, 3, 170, 85, 0, 1276, 1275, 1, 0, 0, 0, 1277, 1280, 1, 0, 0, 0, 1278, 1276, 1, 0, 0, 0, 1278, 1279, 1, 0, 0, 0, 1279, 1281, 1, 0, 0, 0, 1280, 1278, 1, 0, 0, 0, 1281, 1282, 5, 144, 0, 0, 1282, 169, 1, 0, 0, 0, 1283, 1284, 5, 157, 0, 0, 1284, 1285, 3, 116, 58, 0, 1285, 1286, 5, 147, 0, 0, 1286, 1289, 1, 0, 0, 0, 1287, 1289, 5, 156, 0, 0, 1288, 1283, 1, 0, 0, 0, 1288, 1287, 1, 0, 0, 0, 1289, 171, 1, 0, 0, 0, 1290, 1294, 5, 143, 0, 0, 1291, 1293, 3, 174, 87, 0, 1292, 1291, 1, 0, 0, 0, 1293, 1296, 1, 0, 0, 0, 1294, 1292, 1, 0, 0, 0, 1294, 1295, 1, 0, 0, 0, 1295, 1297, 1, 0, 0, 0, 1296, 1294, 1, 0, 0, 0, 1297, 1298, 5, 0, 0, 1, 1298, 173, 1, 0, 0, 0, 1299, 1300, 5, 159, 0, 0, 1300, 1301, 3, 116, 58, 0, 1301, 1302, 5, 147, 0, 0, 1302, 1305, 1, 0, 0, 0, 1303, 1305, 5, 158, 0, 0, 1304, 1299, 1, 0, 0, 0, 1304, 1303, 1, 0, 0, 0, 1305, 175, 1, 0, 0, 0, 168, 179, 186, 195, 202, 206, 220, 224, 227, 231, 234, 241, 245, 254, 259, 268, 276, 283, 287, 293, 298, 306, 313, 319, 331, 339, 353, 357, 362, 372, 381, 384, 388, 391, 395, 398, 401, 404, 407, 411, 415, 418, 421, 424, 428, 431, 440, 446, 467, 484, 501, 507, 513, 524, 526, 537, 540, 546, 554, 560, 562, 566, 571, 574, 577, 581, 585, 588, 590, 593, 597, 601, 604, 606, 608, 613, 624, 630, 637, 642, 646, 650, 656, 658, 665, 673, 676, 679, 698, 712, 728, 732, 743, 747, 758, 762, 769, 773, 780, 784, 789, 798, 802, 826, 843, 849, 852, 855, 865, 871, 874, 877, 885, 888, 892, 895, 909, 926, 931, 935, 941, 948, 960, 964, 967, 976, 990, 1029, 1037, 1039, 1041, 1049, 1053, 1057, 1065, 1069, 1078, 1082, 1084, 1094, 1105, 1110, 1117, 1130, 1137, 1141, 1153, 1159, 1162, 1169, 1181, 1187, 1191, 1197, 1204, 1213, 1217, 1227, 1229, 1232, 1240, 1245, 1255, 1260, 1272, 1278, 1288, 1294, 1304] \ No newline at end of file +[4, 1, 159, 1311, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 1, 0, 5, 0, 178, 8, 0, 10, 0, 12, 0, 181, 9, 0, 1, 0, 1, 0, 1, 1, 1, 1, 3, 1, 187, 8, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 196, 8, 3, 1, 4, 1, 4, 1, 4, 5, 4, 201, 8, 4, 10, 4, 12, 4, 204, 9, 4, 1, 4, 3, 4, 207, 8, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 221, 8, 5, 1, 6, 1, 6, 3, 6, 225, 8, 6, 1, 6, 3, 6, 228, 8, 6, 1, 7, 1, 7, 3, 7, 232, 8, 7, 1, 7, 3, 7, 235, 8, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 242, 8, 8, 1, 8, 1, 8, 3, 8, 246, 8, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 5, 9, 253, 8, 9, 10, 9, 12, 9, 256, 9, 9, 1, 9, 1, 9, 3, 9, 260, 8, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 3, 10, 269, 8, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 3, 11, 277, 8, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 3, 12, 284, 8, 12, 1, 12, 1, 12, 3, 12, 288, 8, 12, 1, 12, 1, 12, 1, 12, 1, 12, 3, 12, 294, 8, 12, 1, 12, 1, 12, 1, 12, 3, 12, 299, 8, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 307, 8, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 314, 8, 13, 1, 14, 1, 14, 1, 14, 1, 14, 3, 14, 320, 8, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 3, 16, 332, 8, 16, 1, 17, 1, 17, 1, 18, 1, 18, 5, 18, 338, 8, 18, 10, 18, 12, 18, 341, 9, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 5, 20, 352, 8, 20, 10, 20, 12, 20, 355, 9, 20, 1, 20, 3, 20, 358, 8, 20, 1, 21, 1, 21, 1, 21, 3, 21, 363, 8, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 5, 22, 371, 8, 22, 10, 22, 12, 22, 374, 9, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 3, 23, 382, 8, 23, 1, 24, 3, 24, 385, 8, 24, 1, 24, 1, 24, 3, 24, 389, 8, 24, 1, 24, 3, 24, 392, 8, 24, 1, 24, 1, 24, 3, 24, 396, 8, 24, 1, 24, 3, 24, 399, 8, 24, 1, 24, 3, 24, 402, 8, 24, 1, 24, 3, 24, 405, 8, 24, 1, 24, 3, 24, 408, 8, 24, 1, 24, 1, 24, 3, 24, 412, 8, 24, 1, 24, 1, 24, 3, 24, 416, 8, 24, 1, 24, 3, 24, 419, 8, 24, 1, 24, 3, 24, 422, 8, 24, 1, 24, 3, 24, 425, 8, 24, 1, 24, 1, 24, 3, 24, 429, 8, 24, 1, 24, 3, 24, 432, 8, 24, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 26, 3, 26, 441, 8, 26, 1, 27, 1, 27, 1, 27, 1, 28, 3, 28, 447, 8, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 5, 29, 466, 8, 29, 10, 29, 12, 29, 469, 9, 29, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 3, 32, 485, 8, 32, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 36, 3, 36, 502, 8, 36, 1, 36, 1, 36, 1, 36, 1, 36, 3, 36, 508, 8, 36, 1, 36, 1, 36, 1, 36, 1, 36, 3, 36, 514, 8, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 3, 36, 525, 8, 36, 3, 36, 527, 8, 36, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 3, 39, 538, 8, 39, 1, 39, 3, 39, 541, 8, 39, 1, 39, 1, 39, 1, 39, 1, 39, 3, 39, 547, 8, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 3, 39, 555, 8, 39, 1, 39, 1, 39, 1, 39, 1, 39, 5, 39, 561, 8, 39, 10, 39, 12, 39, 564, 9, 39, 1, 40, 3, 40, 567, 8, 40, 1, 40, 1, 40, 1, 40, 3, 40, 572, 8, 40, 1, 40, 3, 40, 575, 8, 40, 1, 40, 3, 40, 578, 8, 40, 1, 40, 1, 40, 3, 40, 582, 8, 40, 1, 40, 1, 40, 3, 40, 586, 8, 40, 1, 40, 3, 40, 589, 8, 40, 3, 40, 591, 8, 40, 1, 40, 3, 40, 594, 8, 40, 1, 40, 1, 40, 3, 40, 598, 8, 40, 1, 40, 1, 40, 3, 40, 602, 8, 40, 1, 40, 3, 40, 605, 8, 40, 3, 40, 607, 8, 40, 3, 40, 609, 8, 40, 1, 41, 1, 41, 1, 41, 3, 41, 614, 8, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 3, 42, 625, 8, 42, 1, 43, 1, 43, 1, 43, 1, 43, 3, 43, 631, 8, 43, 1, 44, 1, 44, 1, 44, 5, 44, 636, 8, 44, 10, 44, 12, 44, 639, 9, 44, 1, 45, 1, 45, 3, 45, 643, 8, 45, 1, 45, 1, 45, 3, 45, 647, 8, 45, 1, 45, 1, 45, 3, 45, 651, 8, 45, 1, 46, 1, 46, 1, 46, 1, 46, 3, 46, 657, 8, 46, 3, 46, 659, 8, 46, 1, 47, 1, 47, 1, 47, 5, 47, 664, 8, 47, 10, 47, 12, 47, 667, 9, 47, 1, 48, 1, 48, 1, 48, 1, 48, 1, 49, 3, 49, 674, 8, 49, 1, 49, 3, 49, 677, 8, 49, 1, 49, 3, 49, 680, 8, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 3, 53, 699, 8, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 3, 54, 713, 8, 54, 1, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 5, 56, 727, 8, 56, 10, 56, 12, 56, 730, 9, 56, 1, 56, 3, 56, 733, 8, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 5, 56, 742, 8, 56, 10, 56, 12, 56, 745, 9, 56, 1, 56, 3, 56, 748, 8, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 5, 56, 757, 8, 56, 10, 56, 12, 56, 760, 9, 56, 1, 56, 3, 56, 763, 8, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 3, 56, 770, 8, 56, 1, 56, 1, 56, 3, 56, 774, 8, 56, 1, 57, 1, 57, 1, 57, 5, 57, 779, 8, 57, 10, 57, 12, 57, 782, 9, 57, 1, 57, 3, 57, 785, 8, 57, 1, 58, 1, 58, 1, 58, 3, 58, 790, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 4, 58, 797, 8, 58, 11, 58, 12, 58, 798, 1, 58, 1, 58, 3, 58, 803, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 827, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 844, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 850, 8, 58, 1, 58, 3, 58, 853, 8, 58, 1, 58, 3, 58, 856, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 866, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 872, 8, 58, 1, 58, 3, 58, 875, 8, 58, 1, 58, 3, 58, 878, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 886, 8, 58, 1, 58, 3, 58, 889, 8, 58, 1, 58, 1, 58, 3, 58, 893, 8, 58, 1, 58, 3, 58, 896, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 910, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 927, 8, 58, 1, 58, 1, 58, 1, 58, 3, 58, 932, 8, 58, 1, 58, 1, 58, 3, 58, 936, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 942, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 949, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 961, 8, 58, 1, 58, 1, 58, 3, 58, 965, 8, 58, 1, 58, 3, 58, 968, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 977, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 991, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 1030, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 1038, 8, 58, 5, 58, 1040, 8, 58, 10, 58, 12, 58, 1043, 9, 58, 1, 59, 1, 59, 1, 59, 5, 59, 1048, 8, 59, 10, 59, 12, 59, 1051, 9, 59, 1, 59, 3, 59, 1054, 8, 59, 1, 60, 1, 60, 3, 60, 1058, 8, 60, 1, 61, 1, 61, 1, 61, 1, 61, 5, 61, 1064, 8, 61, 10, 61, 12, 61, 1067, 9, 61, 1, 61, 3, 61, 1070, 8, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 5, 61, 1077, 8, 61, 10, 61, 12, 61, 1080, 9, 61, 1, 61, 3, 61, 1083, 8, 61, 3, 61, 1085, 8, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 5, 62, 1093, 8, 62, 10, 62, 12, 62, 1096, 9, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 5, 62, 1104, 8, 62, 10, 62, 12, 62, 1107, 9, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 3, 62, 1115, 8, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 3, 62, 1122, 8, 62, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 3, 63, 1135, 8, 63, 1, 64, 1, 64, 1, 64, 5, 64, 1140, 8, 64, 10, 64, 12, 64, 1143, 9, 64, 1, 64, 3, 64, 1146, 8, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 3, 65, 1158, 8, 65, 1, 66, 1, 66, 1, 66, 1, 66, 3, 66, 1164, 8, 66, 1, 66, 3, 66, 1167, 8, 66, 1, 67, 1, 67, 1, 67, 5, 67, 1172, 8, 67, 10, 67, 12, 67, 1175, 9, 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 3, 68, 1186, 8, 68, 1, 68, 1, 68, 1, 68, 1, 68, 3, 68, 1192, 8, 68, 5, 68, 1194, 8, 68, 10, 68, 12, 68, 1197, 9, 68, 1, 69, 1, 69, 1, 69, 3, 69, 1202, 8, 69, 1, 69, 1, 69, 1, 70, 1, 70, 1, 70, 3, 70, 1209, 8, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 71, 5, 71, 1216, 8, 71, 10, 71, 12, 71, 1219, 9, 71, 1, 71, 3, 71, 1222, 8, 71, 1, 72, 1, 72, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 3, 73, 1232, 8, 73, 3, 73, 1234, 8, 73, 1, 74, 3, 74, 1237, 8, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 3, 74, 1245, 8, 74, 1, 75, 1, 75, 1, 75, 3, 75, 1250, 8, 75, 1, 76, 1, 76, 1, 77, 1, 77, 1, 78, 1, 78, 1, 79, 1, 79, 3, 79, 1260, 8, 79, 1, 80, 1, 80, 1, 80, 3, 80, 1265, 8, 80, 1, 81, 1, 81, 1, 81, 1, 81, 1, 82, 1, 82, 1, 82, 1, 82, 1, 83, 1, 83, 3, 83, 1277, 8, 83, 1, 84, 1, 84, 5, 84, 1281, 8, 84, 10, 84, 12, 84, 1284, 9, 84, 1, 84, 1, 84, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 3, 85, 1293, 8, 85, 1, 86, 1, 86, 5, 86, 1297, 8, 86, 10, 86, 12, 86, 1300, 9, 86, 1, 86, 1, 86, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 3, 87, 1309, 8, 87, 1, 87, 0, 3, 78, 116, 136, 88, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 0, 16, 2, 0, 18, 18, 74, 74, 2, 0, 44, 44, 51, 51, 3, 0, 1, 1, 4, 4, 8, 8, 4, 0, 1, 1, 3, 4, 8, 8, 80, 80, 2, 0, 51, 51, 73, 73, 2, 0, 1, 1, 4, 4, 2, 0, 7, 7, 22, 23, 2, 0, 30, 30, 49, 49, 2, 0, 71, 71, 76, 76, 3, 0, 10, 10, 50, 50, 90, 90, 2, 0, 41, 41, 53, 53, 1, 0, 107, 108, 2, 0, 118, 118, 139, 139, 7, 0, 21, 21, 38, 38, 55, 56, 70, 70, 78, 78, 97, 97, 103, 103, 16, 0, 1, 13, 15, 20, 22, 28, 30, 30, 32, 37, 39, 42, 44, 51, 53, 54, 58, 58, 60, 69, 71, 77, 79, 83, 85, 92, 94, 96, 98, 99, 101, 102, 4, 0, 20, 20, 30, 30, 39, 39, 48, 48, 1479, 0, 179, 1, 0, 0, 0, 2, 186, 1, 0, 0, 0, 4, 188, 1, 0, 0, 0, 6, 190, 1, 0, 0, 0, 8, 197, 1, 0, 0, 0, 10, 220, 1, 0, 0, 0, 12, 222, 1, 0, 0, 0, 14, 229, 1, 0, 0, 0, 16, 236, 1, 0, 0, 0, 18, 249, 1, 0, 0, 0, 20, 261, 1, 0, 0, 0, 22, 270, 1, 0, 0, 0, 24, 278, 1, 0, 0, 0, 26, 300, 1, 0, 0, 0, 28, 315, 1, 0, 0, 0, 30, 324, 1, 0, 0, 0, 32, 329, 1, 0, 0, 0, 34, 333, 1, 0, 0, 0, 36, 335, 1, 0, 0, 0, 38, 344, 1, 0, 0, 0, 40, 348, 1, 0, 0, 0, 42, 362, 1, 0, 0, 0, 44, 366, 1, 0, 0, 0, 46, 381, 1, 0, 0, 0, 48, 384, 1, 0, 0, 0, 50, 433, 1, 0, 0, 0, 52, 436, 1, 0, 0, 0, 54, 442, 1, 0, 0, 0, 56, 446, 1, 0, 0, 0, 58, 452, 1, 0, 0, 0, 60, 470, 1, 0, 0, 0, 62, 473, 1, 0, 0, 0, 64, 476, 1, 0, 0, 0, 66, 486, 1, 0, 0, 0, 68, 489, 1, 0, 0, 0, 70, 493, 1, 0, 0, 0, 72, 526, 1, 0, 0, 0, 74, 528, 1, 0, 0, 0, 76, 531, 1, 0, 0, 0, 78, 546, 1, 0, 0, 0, 80, 608, 1, 0, 0, 0, 82, 613, 1, 0, 0, 0, 84, 624, 1, 0, 0, 0, 86, 626, 1, 0, 0, 0, 88, 632, 1, 0, 0, 0, 90, 640, 1, 0, 0, 0, 92, 658, 1, 0, 0, 0, 94, 660, 1, 0, 0, 0, 96, 668, 1, 0, 0, 0, 98, 673, 1, 0, 0, 0, 100, 681, 1, 0, 0, 0, 102, 685, 1, 0, 0, 0, 104, 689, 1, 0, 0, 0, 106, 698, 1, 0, 0, 0, 108, 712, 1, 0, 0, 0, 110, 714, 1, 0, 0, 0, 112, 773, 1, 0, 0, 0, 114, 775, 1, 0, 0, 0, 116, 935, 1, 0, 0, 0, 118, 1044, 1, 0, 0, 0, 120, 1057, 1, 0, 0, 0, 122, 1084, 1, 0, 0, 0, 124, 1121, 1, 0, 0, 0, 126, 1134, 1, 0, 0, 0, 128, 1136, 1, 0, 0, 0, 130, 1157, 1, 0, 0, 0, 132, 1166, 1, 0, 0, 0, 134, 1168, 1, 0, 0, 0, 136, 1185, 1, 0, 0, 0, 138, 1198, 1, 0, 0, 0, 140, 1208, 1, 0, 0, 0, 142, 1212, 1, 0, 0, 0, 144, 1223, 1, 0, 0, 0, 146, 1233, 1, 0, 0, 0, 148, 1236, 1, 0, 0, 0, 150, 1249, 1, 0, 0, 0, 152, 1251, 1, 0, 0, 0, 154, 1253, 1, 0, 0, 0, 156, 1255, 1, 0, 0, 0, 158, 1259, 1, 0, 0, 0, 160, 1264, 1, 0, 0, 0, 162, 1266, 1, 0, 0, 0, 164, 1270, 1, 0, 0, 0, 166, 1276, 1, 0, 0, 0, 168, 1278, 1, 0, 0, 0, 170, 1292, 1, 0, 0, 0, 172, 1294, 1, 0, 0, 0, 174, 1308, 1, 0, 0, 0, 176, 178, 3, 2, 1, 0, 177, 176, 1, 0, 0, 0, 178, 181, 1, 0, 0, 0, 179, 177, 1, 0, 0, 0, 179, 180, 1, 0, 0, 0, 180, 182, 1, 0, 0, 0, 181, 179, 1, 0, 0, 0, 182, 183, 5, 0, 0, 1, 183, 1, 1, 0, 0, 0, 184, 187, 3, 6, 3, 0, 185, 187, 3, 10, 5, 0, 186, 184, 1, 0, 0, 0, 186, 185, 1, 0, 0, 0, 187, 3, 1, 0, 0, 0, 188, 189, 3, 116, 58, 0, 189, 5, 1, 0, 0, 0, 190, 191, 5, 52, 0, 0, 191, 195, 3, 160, 80, 0, 192, 193, 5, 115, 0, 0, 193, 194, 5, 122, 0, 0, 194, 196, 3, 4, 2, 0, 195, 192, 1, 0, 0, 0, 195, 196, 1, 0, 0, 0, 196, 7, 1, 0, 0, 0, 197, 202, 3, 160, 80, 0, 198, 199, 5, 116, 0, 0, 199, 201, 3, 160, 80, 0, 200, 198, 1, 0, 0, 0, 201, 204, 1, 0, 0, 0, 202, 200, 1, 0, 0, 0, 202, 203, 1, 0, 0, 0, 203, 206, 1, 0, 0, 0, 204, 202, 1, 0, 0, 0, 205, 207, 5, 116, 0, 0, 206, 205, 1, 0, 0, 0, 206, 207, 1, 0, 0, 0, 207, 9, 1, 0, 0, 0, 208, 221, 3, 12, 6, 0, 209, 221, 3, 14, 7, 0, 210, 221, 3, 18, 9, 0, 211, 221, 3, 20, 10, 0, 212, 221, 3, 22, 11, 0, 213, 221, 3, 26, 13, 0, 214, 221, 3, 24, 12, 0, 215, 221, 3, 28, 14, 0, 216, 221, 3, 30, 15, 0, 217, 221, 3, 36, 18, 0, 218, 221, 3, 32, 16, 0, 219, 221, 3, 34, 17, 0, 220, 208, 1, 0, 0, 0, 220, 209, 1, 0, 0, 0, 220, 210, 1, 0, 0, 0, 220, 211, 1, 0, 0, 0, 220, 212, 1, 0, 0, 0, 220, 213, 1, 0, 0, 0, 220, 214, 1, 0, 0, 0, 220, 215, 1, 0, 0, 0, 220, 216, 1, 0, 0, 0, 220, 217, 1, 0, 0, 0, 220, 218, 1, 0, 0, 0, 220, 219, 1, 0, 0, 0, 221, 11, 1, 0, 0, 0, 222, 224, 5, 72, 0, 0, 223, 225, 3, 4, 2, 0, 224, 223, 1, 0, 0, 0, 224, 225, 1, 0, 0, 0, 225, 227, 1, 0, 0, 0, 226, 228, 5, 150, 0, 0, 227, 226, 1, 0, 0, 0, 227, 228, 1, 0, 0, 0, 228, 13, 1, 0, 0, 0, 229, 231, 5, 84, 0, 0, 230, 232, 3, 4, 2, 0, 231, 230, 1, 0, 0, 0, 231, 232, 1, 0, 0, 0, 232, 234, 1, 0, 0, 0, 233, 235, 5, 150, 0, 0, 234, 233, 1, 0, 0, 0, 234, 235, 1, 0, 0, 0, 235, 15, 1, 0, 0, 0, 236, 245, 5, 14, 0, 0, 237, 238, 5, 130, 0, 0, 238, 241, 3, 160, 80, 0, 239, 240, 5, 115, 0, 0, 240, 242, 3, 160, 80, 0, 241, 239, 1, 0, 0, 0, 241, 242, 1, 0, 0, 0, 242, 243, 1, 0, 0, 0, 243, 244, 5, 149, 0, 0, 244, 246, 1, 0, 0, 0, 245, 237, 1, 0, 0, 0, 245, 246, 1, 0, 0, 0, 246, 247, 1, 0, 0, 0, 247, 248, 3, 36, 18, 0, 248, 17, 1, 0, 0, 0, 249, 250, 5, 93, 0, 0, 250, 254, 3, 36, 18, 0, 251, 253, 3, 16, 8, 0, 252, 251, 1, 0, 0, 0, 253, 256, 1, 0, 0, 0, 254, 252, 1, 0, 0, 0, 254, 255, 1, 0, 0, 0, 255, 259, 1, 0, 0, 0, 256, 254, 1, 0, 0, 0, 257, 258, 5, 29, 0, 0, 258, 260, 3, 36, 18, 0, 259, 257, 1, 0, 0, 0, 259, 260, 1, 0, 0, 0, 260, 19, 1, 0, 0, 0, 261, 262, 5, 40, 0, 0, 262, 263, 5, 130, 0, 0, 263, 264, 3, 4, 2, 0, 264, 265, 5, 149, 0, 0, 265, 268, 3, 10, 5, 0, 266, 267, 5, 25, 0, 0, 267, 269, 3, 10, 5, 0, 268, 266, 1, 0, 0, 0, 268, 269, 1, 0, 0, 0, 269, 21, 1, 0, 0, 0, 270, 271, 5, 100, 0, 0, 271, 272, 5, 130, 0, 0, 272, 273, 3, 4, 2, 0, 273, 274, 5, 149, 0, 0, 274, 276, 3, 10, 5, 0, 275, 277, 5, 150, 0, 0, 276, 275, 1, 0, 0, 0, 276, 277, 1, 0, 0, 0, 277, 23, 1, 0, 0, 0, 278, 279, 5, 33, 0, 0, 279, 283, 5, 130, 0, 0, 280, 284, 3, 6, 3, 0, 281, 284, 3, 30, 15, 0, 282, 284, 3, 4, 2, 0, 283, 280, 1, 0, 0, 0, 283, 281, 1, 0, 0, 0, 283, 282, 1, 0, 0, 0, 283, 284, 1, 0, 0, 0, 284, 285, 1, 0, 0, 0, 285, 287, 5, 150, 0, 0, 286, 288, 3, 4, 2, 0, 287, 286, 1, 0, 0, 0, 287, 288, 1, 0, 0, 0, 288, 289, 1, 0, 0, 0, 289, 293, 5, 150, 0, 0, 290, 294, 3, 6, 3, 0, 291, 294, 3, 30, 15, 0, 292, 294, 3, 4, 2, 0, 293, 290, 1, 0, 0, 0, 293, 291, 1, 0, 0, 0, 293, 292, 1, 0, 0, 0, 293, 294, 1, 0, 0, 0, 294, 295, 1, 0, 0, 0, 295, 296, 5, 149, 0, 0, 296, 298, 3, 10, 5, 0, 297, 299, 5, 150, 0, 0, 298, 297, 1, 0, 0, 0, 298, 299, 1, 0, 0, 0, 299, 25, 1, 0, 0, 0, 300, 301, 5, 33, 0, 0, 301, 302, 5, 130, 0, 0, 302, 303, 5, 52, 0, 0, 303, 306, 3, 160, 80, 0, 304, 305, 5, 116, 0, 0, 305, 307, 3, 160, 80, 0, 306, 304, 1, 0, 0, 0, 306, 307, 1, 0, 0, 0, 307, 308, 1, 0, 0, 0, 308, 309, 5, 42, 0, 0, 309, 310, 3, 4, 2, 0, 310, 311, 5, 149, 0, 0, 311, 313, 3, 10, 5, 0, 312, 314, 5, 150, 0, 0, 313, 312, 1, 0, 0, 0, 313, 314, 1, 0, 0, 0, 314, 27, 1, 0, 0, 0, 315, 316, 5, 31, 0, 0, 316, 317, 3, 160, 80, 0, 317, 319, 5, 130, 0, 0, 318, 320, 3, 8, 4, 0, 319, 318, 1, 0, 0, 0, 319, 320, 1, 0, 0, 0, 320, 321, 1, 0, 0, 0, 321, 322, 5, 149, 0, 0, 322, 323, 3, 36, 18, 0, 323, 29, 1, 0, 0, 0, 324, 325, 3, 4, 2, 0, 325, 326, 5, 115, 0, 0, 326, 327, 5, 122, 0, 0, 327, 328, 3, 4, 2, 0, 328, 31, 1, 0, 0, 0, 329, 331, 3, 4, 2, 0, 330, 332, 5, 150, 0, 0, 331, 330, 1, 0, 0, 0, 331, 332, 1, 0, 0, 0, 332, 33, 1, 0, 0, 0, 333, 334, 5, 150, 0, 0, 334, 35, 1, 0, 0, 0, 335, 339, 5, 128, 0, 0, 336, 338, 3, 2, 1, 0, 337, 336, 1, 0, 0, 0, 338, 341, 1, 0, 0, 0, 339, 337, 1, 0, 0, 0, 339, 340, 1, 0, 0, 0, 340, 342, 1, 0, 0, 0, 341, 339, 1, 0, 0, 0, 342, 343, 5, 147, 0, 0, 343, 37, 1, 0, 0, 0, 344, 345, 3, 4, 2, 0, 345, 346, 5, 115, 0, 0, 346, 347, 3, 4, 2, 0, 347, 39, 1, 0, 0, 0, 348, 353, 3, 38, 19, 0, 349, 350, 5, 116, 0, 0, 350, 352, 3, 38, 19, 0, 351, 349, 1, 0, 0, 0, 352, 355, 1, 0, 0, 0, 353, 351, 1, 0, 0, 0, 353, 354, 1, 0, 0, 0, 354, 357, 1, 0, 0, 0, 355, 353, 1, 0, 0, 0, 356, 358, 5, 116, 0, 0, 357, 356, 1, 0, 0, 0, 357, 358, 1, 0, 0, 0, 358, 41, 1, 0, 0, 0, 359, 363, 3, 44, 22, 0, 360, 363, 3, 48, 24, 0, 361, 363, 3, 124, 62, 0, 362, 359, 1, 0, 0, 0, 362, 360, 1, 0, 0, 0, 362, 361, 1, 0, 0, 0, 363, 364, 1, 0, 0, 0, 364, 365, 5, 0, 0, 1, 365, 43, 1, 0, 0, 0, 366, 372, 3, 46, 23, 0, 367, 368, 5, 95, 0, 0, 368, 369, 5, 1, 0, 0, 369, 371, 3, 46, 23, 0, 370, 367, 1, 0, 0, 0, 371, 374, 1, 0, 0, 0, 372, 370, 1, 0, 0, 0, 372, 373, 1, 0, 0, 0, 373, 45, 1, 0, 0, 0, 374, 372, 1, 0, 0, 0, 375, 382, 3, 48, 24, 0, 376, 377, 5, 130, 0, 0, 377, 378, 3, 44, 22, 0, 378, 379, 5, 149, 0, 0, 379, 382, 1, 0, 0, 0, 380, 382, 3, 164, 82, 0, 381, 375, 1, 0, 0, 0, 381, 376, 1, 0, 0, 0, 381, 380, 1, 0, 0, 0, 382, 47, 1, 0, 0, 0, 383, 385, 3, 50, 25, 0, 384, 383, 1, 0, 0, 0, 384, 385, 1, 0, 0, 0, 385, 386, 1, 0, 0, 0, 386, 388, 5, 79, 0, 0, 387, 389, 5, 24, 0, 0, 388, 387, 1, 0, 0, 0, 388, 389, 1, 0, 0, 0, 389, 391, 1, 0, 0, 0, 390, 392, 3, 52, 26, 0, 391, 390, 1, 0, 0, 0, 391, 392, 1, 0, 0, 0, 392, 393, 1, 0, 0, 0, 393, 395, 3, 114, 57, 0, 394, 396, 3, 54, 27, 0, 395, 394, 1, 0, 0, 0, 395, 396, 1, 0, 0, 0, 396, 398, 1, 0, 0, 0, 397, 399, 3, 56, 28, 0, 398, 397, 1, 0, 0, 0, 398, 399, 1, 0, 0, 0, 399, 401, 1, 0, 0, 0, 400, 402, 3, 60, 30, 0, 401, 400, 1, 0, 0, 0, 401, 402, 1, 0, 0, 0, 402, 404, 1, 0, 0, 0, 403, 405, 3, 62, 31, 0, 404, 403, 1, 0, 0, 0, 404, 405, 1, 0, 0, 0, 405, 407, 1, 0, 0, 0, 406, 408, 3, 64, 32, 0, 407, 406, 1, 0, 0, 0, 407, 408, 1, 0, 0, 0, 408, 411, 1, 0, 0, 0, 409, 410, 5, 102, 0, 0, 410, 412, 7, 0, 0, 0, 411, 409, 1, 0, 0, 0, 411, 412, 1, 0, 0, 0, 412, 415, 1, 0, 0, 0, 413, 414, 5, 102, 0, 0, 414, 416, 5, 89, 0, 0, 415, 413, 1, 0, 0, 0, 415, 416, 1, 0, 0, 0, 416, 418, 1, 0, 0, 0, 417, 419, 3, 66, 33, 0, 418, 417, 1, 0, 0, 0, 418, 419, 1, 0, 0, 0, 419, 421, 1, 0, 0, 0, 420, 422, 3, 58, 29, 0, 421, 420, 1, 0, 0, 0, 421, 422, 1, 0, 0, 0, 422, 424, 1, 0, 0, 0, 423, 425, 3, 68, 34, 0, 424, 423, 1, 0, 0, 0, 424, 425, 1, 0, 0, 0, 425, 428, 1, 0, 0, 0, 426, 429, 3, 72, 36, 0, 427, 429, 3, 74, 37, 0, 428, 426, 1, 0, 0, 0, 428, 427, 1, 0, 0, 0, 428, 429, 1, 0, 0, 0, 429, 431, 1, 0, 0, 0, 430, 432, 3, 76, 38, 0, 431, 430, 1, 0, 0, 0, 431, 432, 1, 0, 0, 0, 432, 49, 1, 0, 0, 0, 433, 434, 5, 102, 0, 0, 434, 435, 3, 128, 64, 0, 435, 51, 1, 0, 0, 0, 436, 437, 5, 88, 0, 0, 437, 440, 5, 108, 0, 0, 438, 439, 5, 102, 0, 0, 439, 441, 5, 85, 0, 0, 440, 438, 1, 0, 0, 0, 440, 441, 1, 0, 0, 0, 441, 53, 1, 0, 0, 0, 442, 443, 5, 34, 0, 0, 443, 444, 3, 78, 39, 0, 444, 55, 1, 0, 0, 0, 445, 447, 7, 1, 0, 0, 446, 445, 1, 0, 0, 0, 446, 447, 1, 0, 0, 0, 447, 448, 1, 0, 0, 0, 448, 449, 5, 5, 0, 0, 449, 450, 5, 47, 0, 0, 450, 451, 3, 114, 57, 0, 451, 57, 1, 0, 0, 0, 452, 453, 5, 101, 0, 0, 453, 454, 3, 160, 80, 0, 454, 455, 5, 6, 0, 0, 455, 456, 5, 130, 0, 0, 456, 457, 3, 98, 49, 0, 457, 467, 5, 149, 0, 0, 458, 459, 5, 116, 0, 0, 459, 460, 3, 160, 80, 0, 460, 461, 5, 6, 0, 0, 461, 462, 5, 130, 0, 0, 462, 463, 3, 98, 49, 0, 463, 464, 5, 149, 0, 0, 464, 466, 1, 0, 0, 0, 465, 458, 1, 0, 0, 0, 466, 469, 1, 0, 0, 0, 467, 465, 1, 0, 0, 0, 467, 468, 1, 0, 0, 0, 468, 59, 1, 0, 0, 0, 469, 467, 1, 0, 0, 0, 470, 471, 5, 69, 0, 0, 471, 472, 3, 116, 58, 0, 472, 61, 1, 0, 0, 0, 473, 474, 5, 99, 0, 0, 474, 475, 3, 116, 58, 0, 475, 63, 1, 0, 0, 0, 476, 477, 5, 36, 0, 0, 477, 484, 5, 11, 0, 0, 478, 479, 7, 0, 0, 0, 479, 480, 5, 130, 0, 0, 480, 481, 3, 114, 57, 0, 481, 482, 5, 149, 0, 0, 482, 485, 1, 0, 0, 0, 483, 485, 3, 114, 57, 0, 484, 478, 1, 0, 0, 0, 484, 483, 1, 0, 0, 0, 485, 65, 1, 0, 0, 0, 486, 487, 5, 37, 0, 0, 487, 488, 3, 116, 58, 0, 488, 67, 1, 0, 0, 0, 489, 490, 5, 64, 0, 0, 490, 491, 5, 11, 0, 0, 491, 492, 3, 88, 44, 0, 492, 69, 1, 0, 0, 0, 493, 494, 5, 64, 0, 0, 494, 495, 5, 11, 0, 0, 495, 496, 3, 114, 57, 0, 496, 71, 1, 0, 0, 0, 497, 498, 5, 54, 0, 0, 498, 501, 3, 116, 58, 0, 499, 500, 5, 116, 0, 0, 500, 502, 3, 116, 58, 0, 501, 499, 1, 0, 0, 0, 501, 502, 1, 0, 0, 0, 502, 507, 1, 0, 0, 0, 503, 504, 5, 102, 0, 0, 504, 508, 5, 85, 0, 0, 505, 506, 5, 11, 0, 0, 506, 508, 3, 114, 57, 0, 507, 503, 1, 0, 0, 0, 507, 505, 1, 0, 0, 0, 507, 508, 1, 0, 0, 0, 508, 527, 1, 0, 0, 0, 509, 510, 5, 54, 0, 0, 510, 513, 3, 116, 58, 0, 511, 512, 5, 102, 0, 0, 512, 514, 5, 85, 0, 0, 513, 511, 1, 0, 0, 0, 513, 514, 1, 0, 0, 0, 514, 515, 1, 0, 0, 0, 515, 516, 5, 61, 0, 0, 516, 517, 3, 116, 58, 0, 517, 527, 1, 0, 0, 0, 518, 519, 5, 54, 0, 0, 519, 520, 3, 116, 58, 0, 520, 521, 5, 61, 0, 0, 521, 524, 3, 116, 58, 0, 522, 523, 5, 11, 0, 0, 523, 525, 3, 114, 57, 0, 524, 522, 1, 0, 0, 0, 524, 525, 1, 0, 0, 0, 525, 527, 1, 0, 0, 0, 526, 497, 1, 0, 0, 0, 526, 509, 1, 0, 0, 0, 526, 518, 1, 0, 0, 0, 527, 73, 1, 0, 0, 0, 528, 529, 5, 61, 0, 0, 529, 530, 3, 116, 58, 0, 530, 75, 1, 0, 0, 0, 531, 532, 5, 81, 0, 0, 532, 533, 3, 94, 47, 0, 533, 77, 1, 0, 0, 0, 534, 535, 6, 39, -1, 0, 535, 537, 3, 136, 68, 0, 536, 538, 5, 28, 0, 0, 537, 536, 1, 0, 0, 0, 537, 538, 1, 0, 0, 0, 538, 540, 1, 0, 0, 0, 539, 541, 3, 86, 43, 0, 540, 539, 1, 0, 0, 0, 540, 541, 1, 0, 0, 0, 541, 547, 1, 0, 0, 0, 542, 543, 5, 130, 0, 0, 543, 544, 3, 78, 39, 0, 544, 545, 5, 149, 0, 0, 545, 547, 1, 0, 0, 0, 546, 534, 1, 0, 0, 0, 546, 542, 1, 0, 0, 0, 547, 562, 1, 0, 0, 0, 548, 549, 10, 3, 0, 0, 549, 550, 3, 82, 41, 0, 550, 551, 3, 78, 39, 4, 551, 561, 1, 0, 0, 0, 552, 554, 10, 4, 0, 0, 553, 555, 3, 80, 40, 0, 554, 553, 1, 0, 0, 0, 554, 555, 1, 0, 0, 0, 555, 556, 1, 0, 0, 0, 556, 557, 5, 47, 0, 0, 557, 558, 3, 78, 39, 0, 558, 559, 3, 84, 42, 0, 559, 561, 1, 0, 0, 0, 560, 548, 1, 0, 0, 0, 560, 552, 1, 0, 0, 0, 561, 564, 1, 0, 0, 0, 562, 560, 1, 0, 0, 0, 562, 563, 1, 0, 0, 0, 563, 79, 1, 0, 0, 0, 564, 562, 1, 0, 0, 0, 565, 567, 7, 2, 0, 0, 566, 565, 1, 0, 0, 0, 566, 567, 1, 0, 0, 0, 567, 568, 1, 0, 0, 0, 568, 575, 5, 44, 0, 0, 569, 571, 5, 44, 0, 0, 570, 572, 7, 2, 0, 0, 571, 570, 1, 0, 0, 0, 571, 572, 1, 0, 0, 0, 572, 575, 1, 0, 0, 0, 573, 575, 7, 2, 0, 0, 574, 566, 1, 0, 0, 0, 574, 569, 1, 0, 0, 0, 574, 573, 1, 0, 0, 0, 575, 609, 1, 0, 0, 0, 576, 578, 7, 3, 0, 0, 577, 576, 1, 0, 0, 0, 577, 578, 1, 0, 0, 0, 578, 579, 1, 0, 0, 0, 579, 581, 7, 4, 0, 0, 580, 582, 5, 65, 0, 0, 581, 580, 1, 0, 0, 0, 581, 582, 1, 0, 0, 0, 582, 591, 1, 0, 0, 0, 583, 585, 7, 4, 0, 0, 584, 586, 5, 65, 0, 0, 585, 584, 1, 0, 0, 0, 585, 586, 1, 0, 0, 0, 586, 588, 1, 0, 0, 0, 587, 589, 7, 3, 0, 0, 588, 587, 1, 0, 0, 0, 588, 589, 1, 0, 0, 0, 589, 591, 1, 0, 0, 0, 590, 577, 1, 0, 0, 0, 590, 583, 1, 0, 0, 0, 591, 609, 1, 0, 0, 0, 592, 594, 7, 5, 0, 0, 593, 592, 1, 0, 0, 0, 593, 594, 1, 0, 0, 0, 594, 595, 1, 0, 0, 0, 595, 597, 5, 35, 0, 0, 596, 598, 5, 65, 0, 0, 597, 596, 1, 0, 0, 0, 597, 598, 1, 0, 0, 0, 598, 607, 1, 0, 0, 0, 599, 601, 5, 35, 0, 0, 600, 602, 5, 65, 0, 0, 601, 600, 1, 0, 0, 0, 601, 602, 1, 0, 0, 0, 602, 604, 1, 0, 0, 0, 603, 605, 7, 5, 0, 0, 604, 603, 1, 0, 0, 0, 604, 605, 1, 0, 0, 0, 605, 607, 1, 0, 0, 0, 606, 593, 1, 0, 0, 0, 606, 599, 1, 0, 0, 0, 607, 609, 1, 0, 0, 0, 608, 574, 1, 0, 0, 0, 608, 590, 1, 0, 0, 0, 608, 606, 1, 0, 0, 0, 609, 81, 1, 0, 0, 0, 610, 611, 5, 17, 0, 0, 611, 614, 5, 47, 0, 0, 612, 614, 5, 116, 0, 0, 613, 610, 1, 0, 0, 0, 613, 612, 1, 0, 0, 0, 614, 83, 1, 0, 0, 0, 615, 616, 5, 62, 0, 0, 616, 625, 3, 114, 57, 0, 617, 618, 5, 96, 0, 0, 618, 619, 5, 130, 0, 0, 619, 620, 3, 114, 57, 0, 620, 621, 5, 149, 0, 0, 621, 625, 1, 0, 0, 0, 622, 623, 5, 96, 0, 0, 623, 625, 3, 114, 57, 0, 624, 615, 1, 0, 0, 0, 624, 617, 1, 0, 0, 0, 624, 622, 1, 0, 0, 0, 625, 85, 1, 0, 0, 0, 626, 627, 5, 77, 0, 0, 627, 630, 3, 92, 46, 0, 628, 629, 5, 61, 0, 0, 629, 631, 3, 92, 46, 0, 630, 628, 1, 0, 0, 0, 630, 631, 1, 0, 0, 0, 631, 87, 1, 0, 0, 0, 632, 637, 3, 90, 45, 0, 633, 634, 5, 116, 0, 0, 634, 636, 3, 90, 45, 0, 635, 633, 1, 0, 0, 0, 636, 639, 1, 0, 0, 0, 637, 635, 1, 0, 0, 0, 637, 638, 1, 0, 0, 0, 638, 89, 1, 0, 0, 0, 639, 637, 1, 0, 0, 0, 640, 642, 3, 116, 58, 0, 641, 643, 7, 6, 0, 0, 642, 641, 1, 0, 0, 0, 642, 643, 1, 0, 0, 0, 643, 646, 1, 0, 0, 0, 644, 645, 5, 60, 0, 0, 645, 647, 7, 7, 0, 0, 646, 644, 1, 0, 0, 0, 646, 647, 1, 0, 0, 0, 647, 650, 1, 0, 0, 0, 648, 649, 5, 16, 0, 0, 649, 651, 5, 110, 0, 0, 650, 648, 1, 0, 0, 0, 650, 651, 1, 0, 0, 0, 651, 91, 1, 0, 0, 0, 652, 659, 3, 164, 82, 0, 653, 656, 3, 148, 74, 0, 654, 655, 5, 151, 0, 0, 655, 657, 3, 148, 74, 0, 656, 654, 1, 0, 0, 0, 656, 657, 1, 0, 0, 0, 657, 659, 1, 0, 0, 0, 658, 652, 1, 0, 0, 0, 658, 653, 1, 0, 0, 0, 659, 93, 1, 0, 0, 0, 660, 665, 3, 96, 48, 0, 661, 662, 5, 116, 0, 0, 662, 664, 3, 96, 48, 0, 663, 661, 1, 0, 0, 0, 664, 667, 1, 0, 0, 0, 665, 663, 1, 0, 0, 0, 665, 666, 1, 0, 0, 0, 666, 95, 1, 0, 0, 0, 667, 665, 1, 0, 0, 0, 668, 669, 3, 160, 80, 0, 669, 670, 5, 122, 0, 0, 670, 671, 3, 150, 75, 0, 671, 97, 1, 0, 0, 0, 672, 674, 3, 100, 50, 0, 673, 672, 1, 0, 0, 0, 673, 674, 1, 0, 0, 0, 674, 676, 1, 0, 0, 0, 675, 677, 3, 102, 51, 0, 676, 675, 1, 0, 0, 0, 676, 677, 1, 0, 0, 0, 677, 679, 1, 0, 0, 0, 678, 680, 3, 104, 52, 0, 679, 678, 1, 0, 0, 0, 679, 680, 1, 0, 0, 0, 680, 99, 1, 0, 0, 0, 681, 682, 5, 67, 0, 0, 682, 683, 5, 11, 0, 0, 683, 684, 3, 114, 57, 0, 684, 101, 1, 0, 0, 0, 685, 686, 5, 64, 0, 0, 686, 687, 5, 11, 0, 0, 687, 688, 3, 88, 44, 0, 688, 103, 1, 0, 0, 0, 689, 690, 7, 8, 0, 0, 690, 691, 3, 106, 53, 0, 691, 105, 1, 0, 0, 0, 692, 699, 3, 108, 54, 0, 693, 694, 5, 9, 0, 0, 694, 695, 3, 108, 54, 0, 695, 696, 5, 2, 0, 0, 696, 697, 3, 108, 54, 0, 697, 699, 1, 0, 0, 0, 698, 692, 1, 0, 0, 0, 698, 693, 1, 0, 0, 0, 699, 107, 1, 0, 0, 0, 700, 701, 5, 19, 0, 0, 701, 713, 5, 75, 0, 0, 702, 703, 5, 94, 0, 0, 703, 713, 5, 68, 0, 0, 704, 705, 5, 94, 0, 0, 705, 713, 5, 32, 0, 0, 706, 707, 3, 148, 74, 0, 707, 708, 5, 68, 0, 0, 708, 713, 1, 0, 0, 0, 709, 710, 3, 148, 74, 0, 710, 711, 5, 32, 0, 0, 711, 713, 1, 0, 0, 0, 712, 700, 1, 0, 0, 0, 712, 702, 1, 0, 0, 0, 712, 704, 1, 0, 0, 0, 712, 706, 1, 0, 0, 0, 712, 709, 1, 0, 0, 0, 713, 109, 1, 0, 0, 0, 714, 715, 3, 116, 58, 0, 715, 716, 5, 0, 0, 1, 716, 111, 1, 0, 0, 0, 717, 774, 3, 160, 80, 0, 718, 719, 3, 160, 80, 0, 719, 720, 5, 130, 0, 0, 720, 721, 3, 160, 80, 0, 721, 728, 3, 112, 56, 0, 722, 723, 5, 116, 0, 0, 723, 724, 3, 160, 80, 0, 724, 725, 3, 112, 56, 0, 725, 727, 1, 0, 0, 0, 726, 722, 1, 0, 0, 0, 727, 730, 1, 0, 0, 0, 728, 726, 1, 0, 0, 0, 728, 729, 1, 0, 0, 0, 729, 732, 1, 0, 0, 0, 730, 728, 1, 0, 0, 0, 731, 733, 5, 116, 0, 0, 732, 731, 1, 0, 0, 0, 732, 733, 1, 0, 0, 0, 733, 734, 1, 0, 0, 0, 734, 735, 5, 149, 0, 0, 735, 774, 1, 0, 0, 0, 736, 737, 3, 160, 80, 0, 737, 738, 5, 130, 0, 0, 738, 743, 3, 162, 81, 0, 739, 740, 5, 116, 0, 0, 740, 742, 3, 162, 81, 0, 741, 739, 1, 0, 0, 0, 742, 745, 1, 0, 0, 0, 743, 741, 1, 0, 0, 0, 743, 744, 1, 0, 0, 0, 744, 747, 1, 0, 0, 0, 745, 743, 1, 0, 0, 0, 746, 748, 5, 116, 0, 0, 747, 746, 1, 0, 0, 0, 747, 748, 1, 0, 0, 0, 748, 749, 1, 0, 0, 0, 749, 750, 5, 149, 0, 0, 750, 774, 1, 0, 0, 0, 751, 752, 3, 160, 80, 0, 752, 753, 5, 130, 0, 0, 753, 758, 3, 112, 56, 0, 754, 755, 5, 116, 0, 0, 755, 757, 3, 112, 56, 0, 756, 754, 1, 0, 0, 0, 757, 760, 1, 0, 0, 0, 758, 756, 1, 0, 0, 0, 758, 759, 1, 0, 0, 0, 759, 762, 1, 0, 0, 0, 760, 758, 1, 0, 0, 0, 761, 763, 5, 116, 0, 0, 762, 761, 1, 0, 0, 0, 762, 763, 1, 0, 0, 0, 763, 764, 1, 0, 0, 0, 764, 765, 5, 149, 0, 0, 765, 774, 1, 0, 0, 0, 766, 767, 3, 160, 80, 0, 767, 769, 5, 130, 0, 0, 768, 770, 3, 114, 57, 0, 769, 768, 1, 0, 0, 0, 769, 770, 1, 0, 0, 0, 770, 771, 1, 0, 0, 0, 771, 772, 5, 149, 0, 0, 772, 774, 1, 0, 0, 0, 773, 717, 1, 0, 0, 0, 773, 718, 1, 0, 0, 0, 773, 736, 1, 0, 0, 0, 773, 751, 1, 0, 0, 0, 773, 766, 1, 0, 0, 0, 774, 113, 1, 0, 0, 0, 775, 780, 3, 116, 58, 0, 776, 777, 5, 116, 0, 0, 777, 779, 3, 116, 58, 0, 778, 776, 1, 0, 0, 0, 779, 782, 1, 0, 0, 0, 780, 778, 1, 0, 0, 0, 780, 781, 1, 0, 0, 0, 781, 784, 1, 0, 0, 0, 782, 780, 1, 0, 0, 0, 783, 785, 5, 116, 0, 0, 784, 783, 1, 0, 0, 0, 784, 785, 1, 0, 0, 0, 785, 115, 1, 0, 0, 0, 786, 787, 6, 58, -1, 0, 787, 789, 5, 12, 0, 0, 788, 790, 3, 116, 58, 0, 789, 788, 1, 0, 0, 0, 789, 790, 1, 0, 0, 0, 790, 796, 1, 0, 0, 0, 791, 792, 5, 98, 0, 0, 792, 793, 3, 116, 58, 0, 793, 794, 5, 83, 0, 0, 794, 795, 3, 116, 58, 0, 795, 797, 1, 0, 0, 0, 796, 791, 1, 0, 0, 0, 797, 798, 1, 0, 0, 0, 798, 796, 1, 0, 0, 0, 798, 799, 1, 0, 0, 0, 799, 802, 1, 0, 0, 0, 800, 801, 5, 25, 0, 0, 801, 803, 3, 116, 58, 0, 802, 800, 1, 0, 0, 0, 802, 803, 1, 0, 0, 0, 803, 804, 1, 0, 0, 0, 804, 805, 5, 26, 0, 0, 805, 936, 1, 0, 0, 0, 806, 807, 5, 13, 0, 0, 807, 808, 5, 130, 0, 0, 808, 809, 3, 116, 58, 0, 809, 810, 5, 6, 0, 0, 810, 811, 3, 112, 56, 0, 811, 812, 5, 149, 0, 0, 812, 936, 1, 0, 0, 0, 813, 814, 5, 20, 0, 0, 814, 936, 5, 110, 0, 0, 815, 816, 5, 45, 0, 0, 816, 817, 3, 116, 58, 0, 817, 818, 3, 152, 76, 0, 818, 936, 1, 0, 0, 0, 819, 820, 5, 82, 0, 0, 820, 821, 5, 130, 0, 0, 821, 822, 3, 116, 58, 0, 822, 823, 5, 34, 0, 0, 823, 826, 3, 116, 58, 0, 824, 825, 5, 33, 0, 0, 825, 827, 3, 116, 58, 0, 826, 824, 1, 0, 0, 0, 826, 827, 1, 0, 0, 0, 827, 828, 1, 0, 0, 0, 828, 829, 5, 149, 0, 0, 829, 936, 1, 0, 0, 0, 830, 831, 5, 86, 0, 0, 831, 936, 5, 110, 0, 0, 832, 833, 5, 91, 0, 0, 833, 834, 5, 130, 0, 0, 834, 835, 7, 9, 0, 0, 835, 836, 3, 166, 83, 0, 836, 837, 5, 34, 0, 0, 837, 838, 3, 116, 58, 0, 838, 839, 5, 149, 0, 0, 839, 936, 1, 0, 0, 0, 840, 841, 3, 160, 80, 0, 841, 843, 5, 130, 0, 0, 842, 844, 3, 114, 57, 0, 843, 842, 1, 0, 0, 0, 843, 844, 1, 0, 0, 0, 844, 845, 1, 0, 0, 0, 845, 846, 5, 149, 0, 0, 846, 855, 1, 0, 0, 0, 847, 849, 5, 130, 0, 0, 848, 850, 5, 24, 0, 0, 849, 848, 1, 0, 0, 0, 849, 850, 1, 0, 0, 0, 850, 852, 1, 0, 0, 0, 851, 853, 3, 118, 59, 0, 852, 851, 1, 0, 0, 0, 852, 853, 1, 0, 0, 0, 853, 854, 1, 0, 0, 0, 854, 856, 5, 149, 0, 0, 855, 847, 1, 0, 0, 0, 855, 856, 1, 0, 0, 0, 856, 857, 1, 0, 0, 0, 857, 858, 5, 66, 0, 0, 858, 859, 5, 130, 0, 0, 859, 860, 3, 98, 49, 0, 860, 861, 5, 149, 0, 0, 861, 936, 1, 0, 0, 0, 862, 863, 3, 160, 80, 0, 863, 865, 5, 130, 0, 0, 864, 866, 3, 114, 57, 0, 865, 864, 1, 0, 0, 0, 865, 866, 1, 0, 0, 0, 866, 867, 1, 0, 0, 0, 867, 868, 5, 149, 0, 0, 868, 877, 1, 0, 0, 0, 869, 871, 5, 130, 0, 0, 870, 872, 5, 24, 0, 0, 871, 870, 1, 0, 0, 0, 871, 872, 1, 0, 0, 0, 872, 874, 1, 0, 0, 0, 873, 875, 3, 118, 59, 0, 874, 873, 1, 0, 0, 0, 874, 875, 1, 0, 0, 0, 875, 876, 1, 0, 0, 0, 876, 878, 5, 149, 0, 0, 877, 869, 1, 0, 0, 0, 877, 878, 1, 0, 0, 0, 878, 879, 1, 0, 0, 0, 879, 880, 5, 66, 0, 0, 880, 881, 3, 160, 80, 0, 881, 936, 1, 0, 0, 0, 882, 888, 3, 160, 80, 0, 883, 885, 5, 130, 0, 0, 884, 886, 3, 114, 57, 0, 885, 884, 1, 0, 0, 0, 885, 886, 1, 0, 0, 0, 886, 887, 1, 0, 0, 0, 887, 889, 5, 149, 0, 0, 888, 883, 1, 0, 0, 0, 888, 889, 1, 0, 0, 0, 889, 890, 1, 0, 0, 0, 890, 892, 5, 130, 0, 0, 891, 893, 5, 24, 0, 0, 892, 891, 1, 0, 0, 0, 892, 893, 1, 0, 0, 0, 893, 895, 1, 0, 0, 0, 894, 896, 3, 118, 59, 0, 895, 894, 1, 0, 0, 0, 895, 896, 1, 0, 0, 0, 896, 897, 1, 0, 0, 0, 897, 898, 5, 149, 0, 0, 898, 936, 1, 0, 0, 0, 899, 936, 3, 124, 62, 0, 900, 936, 3, 168, 84, 0, 901, 936, 3, 150, 75, 0, 902, 903, 5, 118, 0, 0, 903, 936, 3, 116, 58, 19, 904, 905, 5, 58, 0, 0, 905, 936, 3, 116, 58, 13, 906, 907, 3, 140, 70, 0, 907, 908, 5, 120, 0, 0, 908, 910, 1, 0, 0, 0, 909, 906, 1, 0, 0, 0, 909, 910, 1, 0, 0, 0, 910, 911, 1, 0, 0, 0, 911, 936, 5, 112, 0, 0, 912, 913, 5, 130, 0, 0, 913, 914, 3, 44, 22, 0, 914, 915, 5, 149, 0, 0, 915, 936, 1, 0, 0, 0, 916, 917, 5, 130, 0, 0, 917, 918, 3, 116, 58, 0, 918, 919, 5, 149, 0, 0, 919, 936, 1, 0, 0, 0, 920, 921, 5, 130, 0, 0, 921, 922, 3, 114, 57, 0, 922, 923, 5, 149, 0, 0, 923, 936, 1, 0, 0, 0, 924, 926, 5, 129, 0, 0, 925, 927, 3, 114, 57, 0, 926, 925, 1, 0, 0, 0, 926, 927, 1, 0, 0, 0, 927, 928, 1, 0, 0, 0, 928, 936, 5, 148, 0, 0, 929, 931, 5, 128, 0, 0, 930, 932, 3, 40, 20, 0, 931, 930, 1, 0, 0, 0, 931, 932, 1, 0, 0, 0, 932, 933, 1, 0, 0, 0, 933, 936, 5, 147, 0, 0, 934, 936, 3, 132, 66, 0, 935, 786, 1, 0, 0, 0, 935, 806, 1, 0, 0, 0, 935, 813, 1, 0, 0, 0, 935, 815, 1, 0, 0, 0, 935, 819, 1, 0, 0, 0, 935, 830, 1, 0, 0, 0, 935, 832, 1, 0, 0, 0, 935, 840, 1, 0, 0, 0, 935, 862, 1, 0, 0, 0, 935, 882, 1, 0, 0, 0, 935, 899, 1, 0, 0, 0, 935, 900, 1, 0, 0, 0, 935, 901, 1, 0, 0, 0, 935, 902, 1, 0, 0, 0, 935, 904, 1, 0, 0, 0, 935, 909, 1, 0, 0, 0, 935, 912, 1, 0, 0, 0, 935, 916, 1, 0, 0, 0, 935, 920, 1, 0, 0, 0, 935, 924, 1, 0, 0, 0, 935, 929, 1, 0, 0, 0, 935, 934, 1, 0, 0, 0, 936, 1041, 1, 0, 0, 0, 937, 941, 10, 18, 0, 0, 938, 942, 5, 112, 0, 0, 939, 942, 5, 151, 0, 0, 940, 942, 5, 138, 0, 0, 941, 938, 1, 0, 0, 0, 941, 939, 1, 0, 0, 0, 941, 940, 1, 0, 0, 0, 942, 943, 1, 0, 0, 0, 943, 1040, 3, 116, 58, 19, 944, 948, 10, 17, 0, 0, 945, 949, 5, 139, 0, 0, 946, 949, 5, 118, 0, 0, 947, 949, 5, 117, 0, 0, 948, 945, 1, 0, 0, 0, 948, 946, 1, 0, 0, 0, 948, 947, 1, 0, 0, 0, 949, 950, 1, 0, 0, 0, 950, 1040, 3, 116, 58, 18, 951, 976, 10, 16, 0, 0, 952, 977, 5, 121, 0, 0, 953, 977, 5, 122, 0, 0, 954, 977, 5, 133, 0, 0, 955, 977, 5, 131, 0, 0, 956, 977, 5, 132, 0, 0, 957, 977, 5, 123, 0, 0, 958, 977, 5, 124, 0, 0, 959, 961, 5, 58, 0, 0, 960, 959, 1, 0, 0, 0, 960, 961, 1, 0, 0, 0, 961, 962, 1, 0, 0, 0, 962, 964, 5, 42, 0, 0, 963, 965, 5, 15, 0, 0, 964, 963, 1, 0, 0, 0, 964, 965, 1, 0, 0, 0, 965, 977, 1, 0, 0, 0, 966, 968, 5, 58, 0, 0, 967, 966, 1, 0, 0, 0, 967, 968, 1, 0, 0, 0, 968, 969, 1, 0, 0, 0, 969, 977, 7, 10, 0, 0, 970, 977, 5, 145, 0, 0, 971, 977, 5, 146, 0, 0, 972, 977, 5, 135, 0, 0, 973, 977, 5, 126, 0, 0, 974, 977, 5, 127, 0, 0, 975, 977, 5, 134, 0, 0, 976, 952, 1, 0, 0, 0, 976, 953, 1, 0, 0, 0, 976, 954, 1, 0, 0, 0, 976, 955, 1, 0, 0, 0, 976, 956, 1, 0, 0, 0, 976, 957, 1, 0, 0, 0, 976, 958, 1, 0, 0, 0, 976, 960, 1, 0, 0, 0, 976, 967, 1, 0, 0, 0, 976, 970, 1, 0, 0, 0, 976, 971, 1, 0, 0, 0, 976, 972, 1, 0, 0, 0, 976, 973, 1, 0, 0, 0, 976, 974, 1, 0, 0, 0, 976, 975, 1, 0, 0, 0, 977, 978, 1, 0, 0, 0, 978, 1040, 3, 116, 58, 17, 979, 980, 10, 14, 0, 0, 980, 981, 5, 137, 0, 0, 981, 1040, 3, 116, 58, 15, 982, 983, 10, 12, 0, 0, 983, 984, 5, 2, 0, 0, 984, 1040, 3, 116, 58, 13, 985, 986, 10, 11, 0, 0, 986, 987, 5, 63, 0, 0, 987, 1040, 3, 116, 58, 12, 988, 990, 10, 10, 0, 0, 989, 991, 5, 58, 0, 0, 990, 989, 1, 0, 0, 0, 990, 991, 1, 0, 0, 0, 991, 992, 1, 0, 0, 0, 992, 993, 5, 9, 0, 0, 993, 994, 3, 116, 58, 0, 994, 995, 5, 2, 0, 0, 995, 996, 3, 116, 58, 11, 996, 1040, 1, 0, 0, 0, 997, 998, 10, 9, 0, 0, 998, 999, 5, 140, 0, 0, 999, 1000, 3, 116, 58, 0, 1000, 1001, 5, 115, 0, 0, 1001, 1002, 3, 116, 58, 9, 1002, 1040, 1, 0, 0, 0, 1003, 1004, 10, 25, 0, 0, 1004, 1005, 5, 129, 0, 0, 1005, 1006, 3, 116, 58, 0, 1006, 1007, 5, 148, 0, 0, 1007, 1040, 1, 0, 0, 0, 1008, 1009, 10, 24, 0, 0, 1009, 1010, 5, 120, 0, 0, 1010, 1040, 5, 108, 0, 0, 1011, 1012, 10, 23, 0, 0, 1012, 1013, 5, 120, 0, 0, 1013, 1040, 3, 160, 80, 0, 1014, 1015, 10, 22, 0, 0, 1015, 1016, 5, 136, 0, 0, 1016, 1017, 5, 129, 0, 0, 1017, 1018, 3, 116, 58, 0, 1018, 1019, 5, 148, 0, 0, 1019, 1040, 1, 0, 0, 0, 1020, 1021, 10, 21, 0, 0, 1021, 1022, 5, 136, 0, 0, 1022, 1040, 5, 108, 0, 0, 1023, 1024, 10, 20, 0, 0, 1024, 1025, 5, 136, 0, 0, 1025, 1040, 3, 160, 80, 0, 1026, 1027, 10, 15, 0, 0, 1027, 1029, 5, 46, 0, 0, 1028, 1030, 5, 58, 0, 0, 1029, 1028, 1, 0, 0, 0, 1029, 1030, 1, 0, 0, 0, 1030, 1031, 1, 0, 0, 0, 1031, 1040, 5, 59, 0, 0, 1032, 1037, 10, 8, 0, 0, 1033, 1034, 5, 6, 0, 0, 1034, 1038, 3, 160, 80, 0, 1035, 1036, 5, 6, 0, 0, 1036, 1038, 5, 110, 0, 0, 1037, 1033, 1, 0, 0, 0, 1037, 1035, 1, 0, 0, 0, 1038, 1040, 1, 0, 0, 0, 1039, 937, 1, 0, 0, 0, 1039, 944, 1, 0, 0, 0, 1039, 951, 1, 0, 0, 0, 1039, 979, 1, 0, 0, 0, 1039, 982, 1, 0, 0, 0, 1039, 985, 1, 0, 0, 0, 1039, 988, 1, 0, 0, 0, 1039, 997, 1, 0, 0, 0, 1039, 1003, 1, 0, 0, 0, 1039, 1008, 1, 0, 0, 0, 1039, 1011, 1, 0, 0, 0, 1039, 1014, 1, 0, 0, 0, 1039, 1020, 1, 0, 0, 0, 1039, 1023, 1, 0, 0, 0, 1039, 1026, 1, 0, 0, 0, 1039, 1032, 1, 0, 0, 0, 1040, 1043, 1, 0, 0, 0, 1041, 1039, 1, 0, 0, 0, 1041, 1042, 1, 0, 0, 0, 1042, 117, 1, 0, 0, 0, 1043, 1041, 1, 0, 0, 0, 1044, 1049, 3, 120, 60, 0, 1045, 1046, 5, 116, 0, 0, 1046, 1048, 3, 120, 60, 0, 1047, 1045, 1, 0, 0, 0, 1048, 1051, 1, 0, 0, 0, 1049, 1047, 1, 0, 0, 0, 1049, 1050, 1, 0, 0, 0, 1050, 1053, 1, 0, 0, 0, 1051, 1049, 1, 0, 0, 0, 1052, 1054, 5, 116, 0, 0, 1053, 1052, 1, 0, 0, 0, 1053, 1054, 1, 0, 0, 0, 1054, 119, 1, 0, 0, 0, 1055, 1058, 3, 122, 61, 0, 1056, 1058, 3, 116, 58, 0, 1057, 1055, 1, 0, 0, 0, 1057, 1056, 1, 0, 0, 0, 1058, 121, 1, 0, 0, 0, 1059, 1060, 5, 130, 0, 0, 1060, 1065, 3, 160, 80, 0, 1061, 1062, 5, 116, 0, 0, 1062, 1064, 3, 160, 80, 0, 1063, 1061, 1, 0, 0, 0, 1064, 1067, 1, 0, 0, 0, 1065, 1063, 1, 0, 0, 0, 1065, 1066, 1, 0, 0, 0, 1066, 1069, 1, 0, 0, 0, 1067, 1065, 1, 0, 0, 0, 1068, 1070, 5, 116, 0, 0, 1069, 1068, 1, 0, 0, 0, 1069, 1070, 1, 0, 0, 0, 1070, 1071, 1, 0, 0, 0, 1071, 1072, 5, 149, 0, 0, 1072, 1085, 1, 0, 0, 0, 1073, 1078, 3, 160, 80, 0, 1074, 1075, 5, 116, 0, 0, 1075, 1077, 3, 160, 80, 0, 1076, 1074, 1, 0, 0, 0, 1077, 1080, 1, 0, 0, 0, 1078, 1076, 1, 0, 0, 0, 1078, 1079, 1, 0, 0, 0, 1079, 1082, 1, 0, 0, 0, 1080, 1078, 1, 0, 0, 0, 1081, 1083, 5, 116, 0, 0, 1082, 1081, 1, 0, 0, 0, 1082, 1083, 1, 0, 0, 0, 1083, 1085, 1, 0, 0, 0, 1084, 1059, 1, 0, 0, 0, 1084, 1073, 1, 0, 0, 0, 1085, 1086, 1, 0, 0, 0, 1086, 1087, 5, 111, 0, 0, 1087, 1088, 3, 116, 58, 0, 1088, 123, 1, 0, 0, 0, 1089, 1090, 5, 132, 0, 0, 1090, 1094, 3, 160, 80, 0, 1091, 1093, 3, 126, 63, 0, 1092, 1091, 1, 0, 0, 0, 1093, 1096, 1, 0, 0, 0, 1094, 1092, 1, 0, 0, 0, 1094, 1095, 1, 0, 0, 0, 1095, 1097, 1, 0, 0, 0, 1096, 1094, 1, 0, 0, 0, 1097, 1098, 5, 151, 0, 0, 1098, 1099, 5, 124, 0, 0, 1099, 1122, 1, 0, 0, 0, 1100, 1101, 5, 132, 0, 0, 1101, 1105, 3, 160, 80, 0, 1102, 1104, 3, 126, 63, 0, 1103, 1102, 1, 0, 0, 0, 1104, 1107, 1, 0, 0, 0, 1105, 1103, 1, 0, 0, 0, 1105, 1106, 1, 0, 0, 0, 1106, 1108, 1, 0, 0, 0, 1107, 1105, 1, 0, 0, 0, 1108, 1114, 5, 124, 0, 0, 1109, 1115, 3, 124, 62, 0, 1110, 1111, 5, 128, 0, 0, 1111, 1112, 3, 116, 58, 0, 1112, 1113, 5, 147, 0, 0, 1113, 1115, 1, 0, 0, 0, 1114, 1109, 1, 0, 0, 0, 1114, 1110, 1, 0, 0, 0, 1114, 1115, 1, 0, 0, 0, 1115, 1116, 1, 0, 0, 0, 1116, 1117, 5, 132, 0, 0, 1117, 1118, 5, 151, 0, 0, 1118, 1119, 3, 160, 80, 0, 1119, 1120, 5, 124, 0, 0, 1120, 1122, 1, 0, 0, 0, 1121, 1089, 1, 0, 0, 0, 1121, 1100, 1, 0, 0, 0, 1122, 125, 1, 0, 0, 0, 1123, 1124, 3, 160, 80, 0, 1124, 1125, 5, 122, 0, 0, 1125, 1126, 3, 166, 83, 0, 1126, 1135, 1, 0, 0, 0, 1127, 1128, 3, 160, 80, 0, 1128, 1129, 5, 122, 0, 0, 1129, 1130, 5, 128, 0, 0, 1130, 1131, 3, 116, 58, 0, 1131, 1132, 5, 147, 0, 0, 1132, 1135, 1, 0, 0, 0, 1133, 1135, 3, 160, 80, 0, 1134, 1123, 1, 0, 0, 0, 1134, 1127, 1, 0, 0, 0, 1134, 1133, 1, 0, 0, 0, 1135, 127, 1, 0, 0, 0, 1136, 1141, 3, 130, 65, 0, 1137, 1138, 5, 116, 0, 0, 1138, 1140, 3, 130, 65, 0, 1139, 1137, 1, 0, 0, 0, 1140, 1143, 1, 0, 0, 0, 1141, 1139, 1, 0, 0, 0, 1141, 1142, 1, 0, 0, 0, 1142, 1145, 1, 0, 0, 0, 1143, 1141, 1, 0, 0, 0, 1144, 1146, 5, 116, 0, 0, 1145, 1144, 1, 0, 0, 0, 1145, 1146, 1, 0, 0, 0, 1146, 129, 1, 0, 0, 0, 1147, 1148, 3, 160, 80, 0, 1148, 1149, 5, 6, 0, 0, 1149, 1150, 5, 130, 0, 0, 1150, 1151, 3, 44, 22, 0, 1151, 1152, 5, 149, 0, 0, 1152, 1158, 1, 0, 0, 0, 1153, 1154, 3, 116, 58, 0, 1154, 1155, 5, 6, 0, 0, 1155, 1156, 3, 160, 80, 0, 1156, 1158, 1, 0, 0, 0, 1157, 1147, 1, 0, 0, 0, 1157, 1153, 1, 0, 0, 0, 1158, 131, 1, 0, 0, 0, 1159, 1167, 3, 164, 82, 0, 1160, 1161, 3, 140, 70, 0, 1161, 1162, 5, 120, 0, 0, 1162, 1164, 1, 0, 0, 0, 1163, 1160, 1, 0, 0, 0, 1163, 1164, 1, 0, 0, 0, 1164, 1165, 1, 0, 0, 0, 1165, 1167, 3, 134, 67, 0, 1166, 1159, 1, 0, 0, 0, 1166, 1163, 1, 0, 0, 0, 1167, 133, 1, 0, 0, 0, 1168, 1173, 3, 160, 80, 0, 1169, 1170, 5, 120, 0, 0, 1170, 1172, 3, 160, 80, 0, 1171, 1169, 1, 0, 0, 0, 1172, 1175, 1, 0, 0, 0, 1173, 1171, 1, 0, 0, 0, 1173, 1174, 1, 0, 0, 0, 1174, 135, 1, 0, 0, 0, 1175, 1173, 1, 0, 0, 0, 1176, 1177, 6, 68, -1, 0, 1177, 1186, 3, 140, 70, 0, 1178, 1186, 3, 138, 69, 0, 1179, 1180, 5, 130, 0, 0, 1180, 1181, 3, 44, 22, 0, 1181, 1182, 5, 149, 0, 0, 1182, 1186, 1, 0, 0, 0, 1183, 1186, 3, 124, 62, 0, 1184, 1186, 3, 164, 82, 0, 1185, 1176, 1, 0, 0, 0, 1185, 1178, 1, 0, 0, 0, 1185, 1179, 1, 0, 0, 0, 1185, 1183, 1, 0, 0, 0, 1185, 1184, 1, 0, 0, 0, 1186, 1195, 1, 0, 0, 0, 1187, 1191, 10, 3, 0, 0, 1188, 1192, 3, 158, 79, 0, 1189, 1190, 5, 6, 0, 0, 1190, 1192, 3, 160, 80, 0, 1191, 1188, 1, 0, 0, 0, 1191, 1189, 1, 0, 0, 0, 1192, 1194, 1, 0, 0, 0, 1193, 1187, 1, 0, 0, 0, 1194, 1197, 1, 0, 0, 0, 1195, 1193, 1, 0, 0, 0, 1195, 1196, 1, 0, 0, 0, 1196, 137, 1, 0, 0, 0, 1197, 1195, 1, 0, 0, 0, 1198, 1199, 3, 160, 80, 0, 1199, 1201, 5, 130, 0, 0, 1200, 1202, 3, 142, 71, 0, 1201, 1200, 1, 0, 0, 0, 1201, 1202, 1, 0, 0, 0, 1202, 1203, 1, 0, 0, 0, 1203, 1204, 5, 149, 0, 0, 1204, 139, 1, 0, 0, 0, 1205, 1206, 3, 144, 72, 0, 1206, 1207, 5, 120, 0, 0, 1207, 1209, 1, 0, 0, 0, 1208, 1205, 1, 0, 0, 0, 1208, 1209, 1, 0, 0, 0, 1209, 1210, 1, 0, 0, 0, 1210, 1211, 3, 160, 80, 0, 1211, 141, 1, 0, 0, 0, 1212, 1217, 3, 116, 58, 0, 1213, 1214, 5, 116, 0, 0, 1214, 1216, 3, 116, 58, 0, 1215, 1213, 1, 0, 0, 0, 1216, 1219, 1, 0, 0, 0, 1217, 1215, 1, 0, 0, 0, 1217, 1218, 1, 0, 0, 0, 1218, 1221, 1, 0, 0, 0, 1219, 1217, 1, 0, 0, 0, 1220, 1222, 5, 116, 0, 0, 1221, 1220, 1, 0, 0, 0, 1221, 1222, 1, 0, 0, 0, 1222, 143, 1, 0, 0, 0, 1223, 1224, 3, 160, 80, 0, 1224, 145, 1, 0, 0, 0, 1225, 1234, 5, 106, 0, 0, 1226, 1227, 5, 120, 0, 0, 1227, 1234, 7, 11, 0, 0, 1228, 1229, 5, 108, 0, 0, 1229, 1231, 5, 120, 0, 0, 1230, 1232, 7, 11, 0, 0, 1231, 1230, 1, 0, 0, 0, 1231, 1232, 1, 0, 0, 0, 1232, 1234, 1, 0, 0, 0, 1233, 1225, 1, 0, 0, 0, 1233, 1226, 1, 0, 0, 0, 1233, 1228, 1, 0, 0, 0, 1234, 147, 1, 0, 0, 0, 1235, 1237, 7, 12, 0, 0, 1236, 1235, 1, 0, 0, 0, 1236, 1237, 1, 0, 0, 0, 1237, 1244, 1, 0, 0, 0, 1238, 1245, 3, 146, 73, 0, 1239, 1245, 5, 107, 0, 0, 1240, 1245, 5, 108, 0, 0, 1241, 1245, 5, 109, 0, 0, 1242, 1245, 5, 43, 0, 0, 1243, 1245, 5, 57, 0, 0, 1244, 1238, 1, 0, 0, 0, 1244, 1239, 1, 0, 0, 0, 1244, 1240, 1, 0, 0, 0, 1244, 1241, 1, 0, 0, 0, 1244, 1242, 1, 0, 0, 0, 1244, 1243, 1, 0, 0, 0, 1245, 149, 1, 0, 0, 0, 1246, 1250, 3, 148, 74, 0, 1247, 1250, 5, 110, 0, 0, 1248, 1250, 5, 59, 0, 0, 1249, 1246, 1, 0, 0, 0, 1249, 1247, 1, 0, 0, 0, 1249, 1248, 1, 0, 0, 0, 1250, 151, 1, 0, 0, 0, 1251, 1252, 7, 13, 0, 0, 1252, 153, 1, 0, 0, 0, 1253, 1254, 7, 14, 0, 0, 1254, 155, 1, 0, 0, 0, 1255, 1256, 7, 15, 0, 0, 1256, 157, 1, 0, 0, 0, 1257, 1260, 5, 105, 0, 0, 1258, 1260, 3, 156, 78, 0, 1259, 1257, 1, 0, 0, 0, 1259, 1258, 1, 0, 0, 0, 1260, 159, 1, 0, 0, 0, 1261, 1265, 5, 105, 0, 0, 1262, 1265, 3, 152, 76, 0, 1263, 1265, 3, 154, 77, 0, 1264, 1261, 1, 0, 0, 0, 1264, 1262, 1, 0, 0, 0, 1264, 1263, 1, 0, 0, 0, 1265, 161, 1, 0, 0, 0, 1266, 1267, 3, 166, 83, 0, 1267, 1268, 5, 122, 0, 0, 1268, 1269, 3, 148, 74, 0, 1269, 163, 1, 0, 0, 0, 1270, 1271, 5, 128, 0, 0, 1271, 1272, 3, 160, 80, 0, 1272, 1273, 5, 147, 0, 0, 1273, 165, 1, 0, 0, 0, 1274, 1277, 5, 110, 0, 0, 1275, 1277, 3, 168, 84, 0, 1276, 1274, 1, 0, 0, 0, 1276, 1275, 1, 0, 0, 0, 1277, 167, 1, 0, 0, 0, 1278, 1282, 5, 142, 0, 0, 1279, 1281, 3, 170, 85, 0, 1280, 1279, 1, 0, 0, 0, 1281, 1284, 1, 0, 0, 0, 1282, 1280, 1, 0, 0, 0, 1282, 1283, 1, 0, 0, 0, 1283, 1285, 1, 0, 0, 0, 1284, 1282, 1, 0, 0, 0, 1285, 1286, 5, 144, 0, 0, 1286, 169, 1, 0, 0, 0, 1287, 1288, 5, 157, 0, 0, 1288, 1289, 3, 116, 58, 0, 1289, 1290, 5, 147, 0, 0, 1290, 1293, 1, 0, 0, 0, 1291, 1293, 5, 156, 0, 0, 1292, 1287, 1, 0, 0, 0, 1292, 1291, 1, 0, 0, 0, 1293, 171, 1, 0, 0, 0, 1294, 1298, 5, 143, 0, 0, 1295, 1297, 3, 174, 87, 0, 1296, 1295, 1, 0, 0, 0, 1297, 1300, 1, 0, 0, 0, 1298, 1296, 1, 0, 0, 0, 1298, 1299, 1, 0, 0, 0, 1299, 1301, 1, 0, 0, 0, 1300, 1298, 1, 0, 0, 0, 1301, 1302, 5, 0, 0, 1, 1302, 173, 1, 0, 0, 0, 1303, 1304, 5, 159, 0, 0, 1304, 1305, 3, 116, 58, 0, 1305, 1306, 5, 147, 0, 0, 1306, 1309, 1, 0, 0, 0, 1307, 1309, 5, 158, 0, 0, 1308, 1303, 1, 0, 0, 0, 1308, 1307, 1, 0, 0, 0, 1309, 175, 1, 0, 0, 0, 168, 179, 186, 195, 202, 206, 220, 224, 227, 231, 234, 241, 245, 254, 259, 268, 276, 283, 287, 293, 298, 306, 313, 319, 331, 339, 353, 357, 362, 372, 381, 384, 388, 391, 395, 398, 401, 404, 407, 411, 415, 418, 421, 424, 428, 431, 440, 446, 467, 484, 501, 507, 513, 524, 526, 537, 540, 546, 554, 560, 562, 566, 571, 574, 577, 581, 585, 588, 590, 593, 597, 601, 604, 606, 608, 613, 624, 630, 637, 642, 646, 650, 656, 658, 665, 673, 676, 679, 698, 712, 728, 732, 743, 747, 758, 762, 769, 773, 780, 784, 789, 798, 802, 826, 843, 849, 852, 855, 865, 871, 874, 877, 885, 888, 892, 895, 909, 926, 931, 935, 941, 948, 960, 964, 967, 976, 990, 1029, 1037, 1039, 1041, 1049, 1053, 1057, 1065, 1069, 1078, 1082, 1084, 1094, 1105, 1114, 1121, 1134, 1141, 1145, 1157, 1163, 1166, 1173, 1185, 1191, 1195, 1201, 1208, 1217, 1221, 1231, 1233, 1236, 1244, 1249, 1259, 1264, 1276, 1282, 1292, 1298, 1308] \ No newline at end of file diff --git a/hogql_parser/parser.cpp b/hogql_parser/parser.cpp index 895da372b49bf..f82dcd2bf476c 100644 --- a/hogql_parser/parser.cpp +++ b/hogql_parser/parser.cpp @@ -2484,8 +2484,9 @@ class HogQLParseTreeConverter : public HogQLParserBaseVisitor { } auto tag_element_ctx = ctx->hogqlxTagElement(); + auto column_expr_ctx = ctx->columnExpr(); auto tag_attribute_ctx = ctx->hogqlxTagAttribute(); - PyObject* attributes = PyList_New(tag_attribute_ctx.size() + (tag_element_ctx ? 1 : 0)); + PyObject* attributes = PyList_New(tag_attribute_ctx.size() + (tag_element_ctx || column_expr_ctx ? 1 : 0)); if (!attributes) throw PyInternalError(); bool found_source = false; for (size_t i = 0; i < tag_attribute_ctx.size(); i++) { @@ -2534,6 +2535,19 @@ class HogQLParseTreeConverter : public HogQLParserBaseVisitor { throw PyInternalError(); } PyList_SET_ITEM(attributes, tag_attribute_ctx.size(), source_attribute); + } else if (column_expr_ctx) { + if (found_source) { + Py_DECREF(attributes); + throw SyntaxError("Nested HogQLX tags cannot have a source attribute"); + } + PyObject* source_attribute = build_ast_node( + "HogQLXAttribute", "{s:s#,s:N}", "name", "source", 6, "value", visitAsPyObject(ctx->columnExpr()) + ); + if (!source_attribute) { + Py_DECREF(attributes); + throw PyInternalError(); + } + PyList_SET_ITEM(attributes, tag_attribute_ctx.size(), source_attribute); } RETURN_NEW_AST_NODE("HogQLXTag", "{s:s#,s:N}", "kind", opening.data(), opening.size(), "attributes", attributes); diff --git a/hogql_parser/setup.py b/hogql_parser/setup.py index a8c0ca1b7acf9..3c7bc51026aa6 100644 --- a/hogql_parser/setup.py +++ b/hogql_parser/setup.py @@ -32,7 +32,7 @@ setup( name="hogql_parser", - version="1.0.31", + version="1.0.32", url="https://github.com/PostHog/posthog/tree/master/hogql_parser", author="PostHog Inc.", author_email="hey@posthog.com", diff --git a/posthog/hogql/grammar/HogQLParser.g4 b/posthog/hogql/grammar/HogQLParser.g4 index fa689fbacfd9b..871f549f41f02 100644 --- a/posthog/hogql/grammar/HogQLParser.g4 +++ b/posthog/hogql/grammar/HogQLParser.g4 @@ -221,7 +221,7 @@ columnLambdaExpr: hogqlxTagElement : LT identifier hogqlxTagAttribute* SLASH GT # HogqlxTagElementClosed - | LT identifier hogqlxTagAttribute* GT hogqlxTagElement? LT SLASH identifier GT # HogqlxTagElementNested + | LT identifier hogqlxTagAttribute* GT (hogqlxTagElement | (LBRACE columnExpr RBRACE))? LT SLASH identifier GT # HogqlxTagElementNested ; hogqlxTagAttribute : identifier '=' string diff --git a/posthog/hogql/grammar/HogQLParser.interp b/posthog/hogql/grammar/HogQLParser.interp index 20c37a5916320..e31bf92fee7e9 100644 --- a/posthog/hogql/grammar/HogQLParser.interp +++ b/posthog/hogql/grammar/HogQLParser.interp @@ -414,4 +414,4 @@ stringContentsFull atn: -[4, 1, 159, 1307, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 1, 0, 5, 0, 178, 8, 0, 10, 0, 12, 0, 181, 9, 0, 1, 0, 1, 0, 1, 1, 1, 1, 3, 1, 187, 8, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 196, 8, 3, 1, 4, 1, 4, 1, 4, 5, 4, 201, 8, 4, 10, 4, 12, 4, 204, 9, 4, 1, 4, 3, 4, 207, 8, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 221, 8, 5, 1, 6, 1, 6, 3, 6, 225, 8, 6, 1, 6, 3, 6, 228, 8, 6, 1, 7, 1, 7, 3, 7, 232, 8, 7, 1, 7, 3, 7, 235, 8, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 242, 8, 8, 1, 8, 1, 8, 3, 8, 246, 8, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 5, 9, 253, 8, 9, 10, 9, 12, 9, 256, 9, 9, 1, 9, 1, 9, 3, 9, 260, 8, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 3, 10, 269, 8, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 3, 11, 277, 8, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 3, 12, 284, 8, 12, 1, 12, 1, 12, 3, 12, 288, 8, 12, 1, 12, 1, 12, 1, 12, 1, 12, 3, 12, 294, 8, 12, 1, 12, 1, 12, 1, 12, 3, 12, 299, 8, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 307, 8, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 314, 8, 13, 1, 14, 1, 14, 1, 14, 1, 14, 3, 14, 320, 8, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 3, 16, 332, 8, 16, 1, 17, 1, 17, 1, 18, 1, 18, 5, 18, 338, 8, 18, 10, 18, 12, 18, 341, 9, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 5, 20, 352, 8, 20, 10, 20, 12, 20, 355, 9, 20, 1, 20, 3, 20, 358, 8, 20, 1, 21, 1, 21, 1, 21, 3, 21, 363, 8, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 5, 22, 371, 8, 22, 10, 22, 12, 22, 374, 9, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 3, 23, 382, 8, 23, 1, 24, 3, 24, 385, 8, 24, 1, 24, 1, 24, 3, 24, 389, 8, 24, 1, 24, 3, 24, 392, 8, 24, 1, 24, 1, 24, 3, 24, 396, 8, 24, 1, 24, 3, 24, 399, 8, 24, 1, 24, 3, 24, 402, 8, 24, 1, 24, 3, 24, 405, 8, 24, 1, 24, 3, 24, 408, 8, 24, 1, 24, 1, 24, 3, 24, 412, 8, 24, 1, 24, 1, 24, 3, 24, 416, 8, 24, 1, 24, 3, 24, 419, 8, 24, 1, 24, 3, 24, 422, 8, 24, 1, 24, 3, 24, 425, 8, 24, 1, 24, 1, 24, 3, 24, 429, 8, 24, 1, 24, 3, 24, 432, 8, 24, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 26, 3, 26, 441, 8, 26, 1, 27, 1, 27, 1, 27, 1, 28, 3, 28, 447, 8, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 5, 29, 466, 8, 29, 10, 29, 12, 29, 469, 9, 29, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 3, 32, 485, 8, 32, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 36, 3, 36, 502, 8, 36, 1, 36, 1, 36, 1, 36, 1, 36, 3, 36, 508, 8, 36, 1, 36, 1, 36, 1, 36, 1, 36, 3, 36, 514, 8, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 3, 36, 525, 8, 36, 3, 36, 527, 8, 36, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 3, 39, 538, 8, 39, 1, 39, 3, 39, 541, 8, 39, 1, 39, 1, 39, 1, 39, 1, 39, 3, 39, 547, 8, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 3, 39, 555, 8, 39, 1, 39, 1, 39, 1, 39, 1, 39, 5, 39, 561, 8, 39, 10, 39, 12, 39, 564, 9, 39, 1, 40, 3, 40, 567, 8, 40, 1, 40, 1, 40, 1, 40, 3, 40, 572, 8, 40, 1, 40, 3, 40, 575, 8, 40, 1, 40, 3, 40, 578, 8, 40, 1, 40, 1, 40, 3, 40, 582, 8, 40, 1, 40, 1, 40, 3, 40, 586, 8, 40, 1, 40, 3, 40, 589, 8, 40, 3, 40, 591, 8, 40, 1, 40, 3, 40, 594, 8, 40, 1, 40, 1, 40, 3, 40, 598, 8, 40, 1, 40, 1, 40, 3, 40, 602, 8, 40, 1, 40, 3, 40, 605, 8, 40, 3, 40, 607, 8, 40, 3, 40, 609, 8, 40, 1, 41, 1, 41, 1, 41, 3, 41, 614, 8, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 3, 42, 625, 8, 42, 1, 43, 1, 43, 1, 43, 1, 43, 3, 43, 631, 8, 43, 1, 44, 1, 44, 1, 44, 5, 44, 636, 8, 44, 10, 44, 12, 44, 639, 9, 44, 1, 45, 1, 45, 3, 45, 643, 8, 45, 1, 45, 1, 45, 3, 45, 647, 8, 45, 1, 45, 1, 45, 3, 45, 651, 8, 45, 1, 46, 1, 46, 1, 46, 1, 46, 3, 46, 657, 8, 46, 3, 46, 659, 8, 46, 1, 47, 1, 47, 1, 47, 5, 47, 664, 8, 47, 10, 47, 12, 47, 667, 9, 47, 1, 48, 1, 48, 1, 48, 1, 48, 1, 49, 3, 49, 674, 8, 49, 1, 49, 3, 49, 677, 8, 49, 1, 49, 3, 49, 680, 8, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 3, 53, 699, 8, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 3, 54, 713, 8, 54, 1, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 5, 56, 727, 8, 56, 10, 56, 12, 56, 730, 9, 56, 1, 56, 3, 56, 733, 8, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 5, 56, 742, 8, 56, 10, 56, 12, 56, 745, 9, 56, 1, 56, 3, 56, 748, 8, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 5, 56, 757, 8, 56, 10, 56, 12, 56, 760, 9, 56, 1, 56, 3, 56, 763, 8, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 3, 56, 770, 8, 56, 1, 56, 1, 56, 3, 56, 774, 8, 56, 1, 57, 1, 57, 1, 57, 5, 57, 779, 8, 57, 10, 57, 12, 57, 782, 9, 57, 1, 57, 3, 57, 785, 8, 57, 1, 58, 1, 58, 1, 58, 3, 58, 790, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 4, 58, 797, 8, 58, 11, 58, 12, 58, 798, 1, 58, 1, 58, 3, 58, 803, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 827, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 844, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 850, 8, 58, 1, 58, 3, 58, 853, 8, 58, 1, 58, 3, 58, 856, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 866, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 872, 8, 58, 1, 58, 3, 58, 875, 8, 58, 1, 58, 3, 58, 878, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 886, 8, 58, 1, 58, 3, 58, 889, 8, 58, 1, 58, 1, 58, 3, 58, 893, 8, 58, 1, 58, 3, 58, 896, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 910, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 927, 8, 58, 1, 58, 1, 58, 1, 58, 3, 58, 932, 8, 58, 1, 58, 1, 58, 3, 58, 936, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 942, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 949, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 961, 8, 58, 1, 58, 1, 58, 3, 58, 965, 8, 58, 1, 58, 3, 58, 968, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 977, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 991, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 1030, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 1038, 8, 58, 5, 58, 1040, 8, 58, 10, 58, 12, 58, 1043, 9, 58, 1, 59, 1, 59, 1, 59, 5, 59, 1048, 8, 59, 10, 59, 12, 59, 1051, 9, 59, 1, 59, 3, 59, 1054, 8, 59, 1, 60, 1, 60, 3, 60, 1058, 8, 60, 1, 61, 1, 61, 1, 61, 1, 61, 5, 61, 1064, 8, 61, 10, 61, 12, 61, 1067, 9, 61, 1, 61, 3, 61, 1070, 8, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 5, 61, 1077, 8, 61, 10, 61, 12, 61, 1080, 9, 61, 1, 61, 3, 61, 1083, 8, 61, 3, 61, 1085, 8, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 5, 62, 1093, 8, 62, 10, 62, 12, 62, 1096, 9, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 5, 62, 1104, 8, 62, 10, 62, 12, 62, 1107, 9, 62, 1, 62, 1, 62, 3, 62, 1111, 8, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 3, 62, 1118, 8, 62, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 3, 63, 1131, 8, 63, 1, 64, 1, 64, 1, 64, 5, 64, 1136, 8, 64, 10, 64, 12, 64, 1139, 9, 64, 1, 64, 3, 64, 1142, 8, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 3, 65, 1154, 8, 65, 1, 66, 1, 66, 1, 66, 1, 66, 3, 66, 1160, 8, 66, 1, 66, 3, 66, 1163, 8, 66, 1, 67, 1, 67, 1, 67, 5, 67, 1168, 8, 67, 10, 67, 12, 67, 1171, 9, 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 3, 68, 1182, 8, 68, 1, 68, 1, 68, 1, 68, 1, 68, 3, 68, 1188, 8, 68, 5, 68, 1190, 8, 68, 10, 68, 12, 68, 1193, 9, 68, 1, 69, 1, 69, 1, 69, 3, 69, 1198, 8, 69, 1, 69, 1, 69, 1, 70, 1, 70, 1, 70, 3, 70, 1205, 8, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 71, 5, 71, 1212, 8, 71, 10, 71, 12, 71, 1215, 9, 71, 1, 71, 3, 71, 1218, 8, 71, 1, 72, 1, 72, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 3, 73, 1228, 8, 73, 3, 73, 1230, 8, 73, 1, 74, 3, 74, 1233, 8, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 3, 74, 1241, 8, 74, 1, 75, 1, 75, 1, 75, 3, 75, 1246, 8, 75, 1, 76, 1, 76, 1, 77, 1, 77, 1, 78, 1, 78, 1, 79, 1, 79, 3, 79, 1256, 8, 79, 1, 80, 1, 80, 1, 80, 3, 80, 1261, 8, 80, 1, 81, 1, 81, 1, 81, 1, 81, 1, 82, 1, 82, 1, 82, 1, 82, 1, 83, 1, 83, 3, 83, 1273, 8, 83, 1, 84, 1, 84, 5, 84, 1277, 8, 84, 10, 84, 12, 84, 1280, 9, 84, 1, 84, 1, 84, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 3, 85, 1289, 8, 85, 1, 86, 1, 86, 5, 86, 1293, 8, 86, 10, 86, 12, 86, 1296, 9, 86, 1, 86, 1, 86, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 3, 87, 1305, 8, 87, 1, 87, 0, 3, 78, 116, 136, 88, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 0, 16, 2, 0, 18, 18, 74, 74, 2, 0, 44, 44, 51, 51, 3, 0, 1, 1, 4, 4, 8, 8, 4, 0, 1, 1, 3, 4, 8, 8, 80, 80, 2, 0, 51, 51, 73, 73, 2, 0, 1, 1, 4, 4, 2, 0, 7, 7, 22, 23, 2, 0, 30, 30, 49, 49, 2, 0, 71, 71, 76, 76, 3, 0, 10, 10, 50, 50, 90, 90, 2, 0, 41, 41, 53, 53, 1, 0, 107, 108, 2, 0, 118, 118, 139, 139, 7, 0, 21, 21, 38, 38, 55, 56, 70, 70, 78, 78, 97, 97, 103, 103, 16, 0, 1, 13, 15, 20, 22, 28, 30, 30, 32, 37, 39, 42, 44, 51, 53, 54, 58, 58, 60, 69, 71, 77, 79, 83, 85, 92, 94, 96, 98, 99, 101, 102, 4, 0, 20, 20, 30, 30, 39, 39, 48, 48, 1474, 0, 179, 1, 0, 0, 0, 2, 186, 1, 0, 0, 0, 4, 188, 1, 0, 0, 0, 6, 190, 1, 0, 0, 0, 8, 197, 1, 0, 0, 0, 10, 220, 1, 0, 0, 0, 12, 222, 1, 0, 0, 0, 14, 229, 1, 0, 0, 0, 16, 236, 1, 0, 0, 0, 18, 249, 1, 0, 0, 0, 20, 261, 1, 0, 0, 0, 22, 270, 1, 0, 0, 0, 24, 278, 1, 0, 0, 0, 26, 300, 1, 0, 0, 0, 28, 315, 1, 0, 0, 0, 30, 324, 1, 0, 0, 0, 32, 329, 1, 0, 0, 0, 34, 333, 1, 0, 0, 0, 36, 335, 1, 0, 0, 0, 38, 344, 1, 0, 0, 0, 40, 348, 1, 0, 0, 0, 42, 362, 1, 0, 0, 0, 44, 366, 1, 0, 0, 0, 46, 381, 1, 0, 0, 0, 48, 384, 1, 0, 0, 0, 50, 433, 1, 0, 0, 0, 52, 436, 1, 0, 0, 0, 54, 442, 1, 0, 0, 0, 56, 446, 1, 0, 0, 0, 58, 452, 1, 0, 0, 0, 60, 470, 1, 0, 0, 0, 62, 473, 1, 0, 0, 0, 64, 476, 1, 0, 0, 0, 66, 486, 1, 0, 0, 0, 68, 489, 1, 0, 0, 0, 70, 493, 1, 0, 0, 0, 72, 526, 1, 0, 0, 0, 74, 528, 1, 0, 0, 0, 76, 531, 1, 0, 0, 0, 78, 546, 1, 0, 0, 0, 80, 608, 1, 0, 0, 0, 82, 613, 1, 0, 0, 0, 84, 624, 1, 0, 0, 0, 86, 626, 1, 0, 0, 0, 88, 632, 1, 0, 0, 0, 90, 640, 1, 0, 0, 0, 92, 658, 1, 0, 0, 0, 94, 660, 1, 0, 0, 0, 96, 668, 1, 0, 0, 0, 98, 673, 1, 0, 0, 0, 100, 681, 1, 0, 0, 0, 102, 685, 1, 0, 0, 0, 104, 689, 1, 0, 0, 0, 106, 698, 1, 0, 0, 0, 108, 712, 1, 0, 0, 0, 110, 714, 1, 0, 0, 0, 112, 773, 1, 0, 0, 0, 114, 775, 1, 0, 0, 0, 116, 935, 1, 0, 0, 0, 118, 1044, 1, 0, 0, 0, 120, 1057, 1, 0, 0, 0, 122, 1084, 1, 0, 0, 0, 124, 1117, 1, 0, 0, 0, 126, 1130, 1, 0, 0, 0, 128, 1132, 1, 0, 0, 0, 130, 1153, 1, 0, 0, 0, 132, 1162, 1, 0, 0, 0, 134, 1164, 1, 0, 0, 0, 136, 1181, 1, 0, 0, 0, 138, 1194, 1, 0, 0, 0, 140, 1204, 1, 0, 0, 0, 142, 1208, 1, 0, 0, 0, 144, 1219, 1, 0, 0, 0, 146, 1229, 1, 0, 0, 0, 148, 1232, 1, 0, 0, 0, 150, 1245, 1, 0, 0, 0, 152, 1247, 1, 0, 0, 0, 154, 1249, 1, 0, 0, 0, 156, 1251, 1, 0, 0, 0, 158, 1255, 1, 0, 0, 0, 160, 1260, 1, 0, 0, 0, 162, 1262, 1, 0, 0, 0, 164, 1266, 1, 0, 0, 0, 166, 1272, 1, 0, 0, 0, 168, 1274, 1, 0, 0, 0, 170, 1288, 1, 0, 0, 0, 172, 1290, 1, 0, 0, 0, 174, 1304, 1, 0, 0, 0, 176, 178, 3, 2, 1, 0, 177, 176, 1, 0, 0, 0, 178, 181, 1, 0, 0, 0, 179, 177, 1, 0, 0, 0, 179, 180, 1, 0, 0, 0, 180, 182, 1, 0, 0, 0, 181, 179, 1, 0, 0, 0, 182, 183, 5, 0, 0, 1, 183, 1, 1, 0, 0, 0, 184, 187, 3, 6, 3, 0, 185, 187, 3, 10, 5, 0, 186, 184, 1, 0, 0, 0, 186, 185, 1, 0, 0, 0, 187, 3, 1, 0, 0, 0, 188, 189, 3, 116, 58, 0, 189, 5, 1, 0, 0, 0, 190, 191, 5, 52, 0, 0, 191, 195, 3, 160, 80, 0, 192, 193, 5, 115, 0, 0, 193, 194, 5, 122, 0, 0, 194, 196, 3, 4, 2, 0, 195, 192, 1, 0, 0, 0, 195, 196, 1, 0, 0, 0, 196, 7, 1, 0, 0, 0, 197, 202, 3, 160, 80, 0, 198, 199, 5, 116, 0, 0, 199, 201, 3, 160, 80, 0, 200, 198, 1, 0, 0, 0, 201, 204, 1, 0, 0, 0, 202, 200, 1, 0, 0, 0, 202, 203, 1, 0, 0, 0, 203, 206, 1, 0, 0, 0, 204, 202, 1, 0, 0, 0, 205, 207, 5, 116, 0, 0, 206, 205, 1, 0, 0, 0, 206, 207, 1, 0, 0, 0, 207, 9, 1, 0, 0, 0, 208, 221, 3, 12, 6, 0, 209, 221, 3, 14, 7, 0, 210, 221, 3, 18, 9, 0, 211, 221, 3, 20, 10, 0, 212, 221, 3, 22, 11, 0, 213, 221, 3, 26, 13, 0, 214, 221, 3, 24, 12, 0, 215, 221, 3, 28, 14, 0, 216, 221, 3, 30, 15, 0, 217, 221, 3, 36, 18, 0, 218, 221, 3, 32, 16, 0, 219, 221, 3, 34, 17, 0, 220, 208, 1, 0, 0, 0, 220, 209, 1, 0, 0, 0, 220, 210, 1, 0, 0, 0, 220, 211, 1, 0, 0, 0, 220, 212, 1, 0, 0, 0, 220, 213, 1, 0, 0, 0, 220, 214, 1, 0, 0, 0, 220, 215, 1, 0, 0, 0, 220, 216, 1, 0, 0, 0, 220, 217, 1, 0, 0, 0, 220, 218, 1, 0, 0, 0, 220, 219, 1, 0, 0, 0, 221, 11, 1, 0, 0, 0, 222, 224, 5, 72, 0, 0, 223, 225, 3, 4, 2, 0, 224, 223, 1, 0, 0, 0, 224, 225, 1, 0, 0, 0, 225, 227, 1, 0, 0, 0, 226, 228, 5, 150, 0, 0, 227, 226, 1, 0, 0, 0, 227, 228, 1, 0, 0, 0, 228, 13, 1, 0, 0, 0, 229, 231, 5, 84, 0, 0, 230, 232, 3, 4, 2, 0, 231, 230, 1, 0, 0, 0, 231, 232, 1, 0, 0, 0, 232, 234, 1, 0, 0, 0, 233, 235, 5, 150, 0, 0, 234, 233, 1, 0, 0, 0, 234, 235, 1, 0, 0, 0, 235, 15, 1, 0, 0, 0, 236, 245, 5, 14, 0, 0, 237, 238, 5, 130, 0, 0, 238, 241, 3, 160, 80, 0, 239, 240, 5, 115, 0, 0, 240, 242, 3, 160, 80, 0, 241, 239, 1, 0, 0, 0, 241, 242, 1, 0, 0, 0, 242, 243, 1, 0, 0, 0, 243, 244, 5, 149, 0, 0, 244, 246, 1, 0, 0, 0, 245, 237, 1, 0, 0, 0, 245, 246, 1, 0, 0, 0, 246, 247, 1, 0, 0, 0, 247, 248, 3, 36, 18, 0, 248, 17, 1, 0, 0, 0, 249, 250, 5, 93, 0, 0, 250, 254, 3, 36, 18, 0, 251, 253, 3, 16, 8, 0, 252, 251, 1, 0, 0, 0, 253, 256, 1, 0, 0, 0, 254, 252, 1, 0, 0, 0, 254, 255, 1, 0, 0, 0, 255, 259, 1, 0, 0, 0, 256, 254, 1, 0, 0, 0, 257, 258, 5, 29, 0, 0, 258, 260, 3, 36, 18, 0, 259, 257, 1, 0, 0, 0, 259, 260, 1, 0, 0, 0, 260, 19, 1, 0, 0, 0, 261, 262, 5, 40, 0, 0, 262, 263, 5, 130, 0, 0, 263, 264, 3, 4, 2, 0, 264, 265, 5, 149, 0, 0, 265, 268, 3, 10, 5, 0, 266, 267, 5, 25, 0, 0, 267, 269, 3, 10, 5, 0, 268, 266, 1, 0, 0, 0, 268, 269, 1, 0, 0, 0, 269, 21, 1, 0, 0, 0, 270, 271, 5, 100, 0, 0, 271, 272, 5, 130, 0, 0, 272, 273, 3, 4, 2, 0, 273, 274, 5, 149, 0, 0, 274, 276, 3, 10, 5, 0, 275, 277, 5, 150, 0, 0, 276, 275, 1, 0, 0, 0, 276, 277, 1, 0, 0, 0, 277, 23, 1, 0, 0, 0, 278, 279, 5, 33, 0, 0, 279, 283, 5, 130, 0, 0, 280, 284, 3, 6, 3, 0, 281, 284, 3, 30, 15, 0, 282, 284, 3, 4, 2, 0, 283, 280, 1, 0, 0, 0, 283, 281, 1, 0, 0, 0, 283, 282, 1, 0, 0, 0, 283, 284, 1, 0, 0, 0, 284, 285, 1, 0, 0, 0, 285, 287, 5, 150, 0, 0, 286, 288, 3, 4, 2, 0, 287, 286, 1, 0, 0, 0, 287, 288, 1, 0, 0, 0, 288, 289, 1, 0, 0, 0, 289, 293, 5, 150, 0, 0, 290, 294, 3, 6, 3, 0, 291, 294, 3, 30, 15, 0, 292, 294, 3, 4, 2, 0, 293, 290, 1, 0, 0, 0, 293, 291, 1, 0, 0, 0, 293, 292, 1, 0, 0, 0, 293, 294, 1, 0, 0, 0, 294, 295, 1, 0, 0, 0, 295, 296, 5, 149, 0, 0, 296, 298, 3, 10, 5, 0, 297, 299, 5, 150, 0, 0, 298, 297, 1, 0, 0, 0, 298, 299, 1, 0, 0, 0, 299, 25, 1, 0, 0, 0, 300, 301, 5, 33, 0, 0, 301, 302, 5, 130, 0, 0, 302, 303, 5, 52, 0, 0, 303, 306, 3, 160, 80, 0, 304, 305, 5, 116, 0, 0, 305, 307, 3, 160, 80, 0, 306, 304, 1, 0, 0, 0, 306, 307, 1, 0, 0, 0, 307, 308, 1, 0, 0, 0, 308, 309, 5, 42, 0, 0, 309, 310, 3, 4, 2, 0, 310, 311, 5, 149, 0, 0, 311, 313, 3, 10, 5, 0, 312, 314, 5, 150, 0, 0, 313, 312, 1, 0, 0, 0, 313, 314, 1, 0, 0, 0, 314, 27, 1, 0, 0, 0, 315, 316, 5, 31, 0, 0, 316, 317, 3, 160, 80, 0, 317, 319, 5, 130, 0, 0, 318, 320, 3, 8, 4, 0, 319, 318, 1, 0, 0, 0, 319, 320, 1, 0, 0, 0, 320, 321, 1, 0, 0, 0, 321, 322, 5, 149, 0, 0, 322, 323, 3, 36, 18, 0, 323, 29, 1, 0, 0, 0, 324, 325, 3, 4, 2, 0, 325, 326, 5, 115, 0, 0, 326, 327, 5, 122, 0, 0, 327, 328, 3, 4, 2, 0, 328, 31, 1, 0, 0, 0, 329, 331, 3, 4, 2, 0, 330, 332, 5, 150, 0, 0, 331, 330, 1, 0, 0, 0, 331, 332, 1, 0, 0, 0, 332, 33, 1, 0, 0, 0, 333, 334, 5, 150, 0, 0, 334, 35, 1, 0, 0, 0, 335, 339, 5, 128, 0, 0, 336, 338, 3, 2, 1, 0, 337, 336, 1, 0, 0, 0, 338, 341, 1, 0, 0, 0, 339, 337, 1, 0, 0, 0, 339, 340, 1, 0, 0, 0, 340, 342, 1, 0, 0, 0, 341, 339, 1, 0, 0, 0, 342, 343, 5, 147, 0, 0, 343, 37, 1, 0, 0, 0, 344, 345, 3, 4, 2, 0, 345, 346, 5, 115, 0, 0, 346, 347, 3, 4, 2, 0, 347, 39, 1, 0, 0, 0, 348, 353, 3, 38, 19, 0, 349, 350, 5, 116, 0, 0, 350, 352, 3, 38, 19, 0, 351, 349, 1, 0, 0, 0, 352, 355, 1, 0, 0, 0, 353, 351, 1, 0, 0, 0, 353, 354, 1, 0, 0, 0, 354, 357, 1, 0, 0, 0, 355, 353, 1, 0, 0, 0, 356, 358, 5, 116, 0, 0, 357, 356, 1, 0, 0, 0, 357, 358, 1, 0, 0, 0, 358, 41, 1, 0, 0, 0, 359, 363, 3, 44, 22, 0, 360, 363, 3, 48, 24, 0, 361, 363, 3, 124, 62, 0, 362, 359, 1, 0, 0, 0, 362, 360, 1, 0, 0, 0, 362, 361, 1, 0, 0, 0, 363, 364, 1, 0, 0, 0, 364, 365, 5, 0, 0, 1, 365, 43, 1, 0, 0, 0, 366, 372, 3, 46, 23, 0, 367, 368, 5, 95, 0, 0, 368, 369, 5, 1, 0, 0, 369, 371, 3, 46, 23, 0, 370, 367, 1, 0, 0, 0, 371, 374, 1, 0, 0, 0, 372, 370, 1, 0, 0, 0, 372, 373, 1, 0, 0, 0, 373, 45, 1, 0, 0, 0, 374, 372, 1, 0, 0, 0, 375, 382, 3, 48, 24, 0, 376, 377, 5, 130, 0, 0, 377, 378, 3, 44, 22, 0, 378, 379, 5, 149, 0, 0, 379, 382, 1, 0, 0, 0, 380, 382, 3, 164, 82, 0, 381, 375, 1, 0, 0, 0, 381, 376, 1, 0, 0, 0, 381, 380, 1, 0, 0, 0, 382, 47, 1, 0, 0, 0, 383, 385, 3, 50, 25, 0, 384, 383, 1, 0, 0, 0, 384, 385, 1, 0, 0, 0, 385, 386, 1, 0, 0, 0, 386, 388, 5, 79, 0, 0, 387, 389, 5, 24, 0, 0, 388, 387, 1, 0, 0, 0, 388, 389, 1, 0, 0, 0, 389, 391, 1, 0, 0, 0, 390, 392, 3, 52, 26, 0, 391, 390, 1, 0, 0, 0, 391, 392, 1, 0, 0, 0, 392, 393, 1, 0, 0, 0, 393, 395, 3, 114, 57, 0, 394, 396, 3, 54, 27, 0, 395, 394, 1, 0, 0, 0, 395, 396, 1, 0, 0, 0, 396, 398, 1, 0, 0, 0, 397, 399, 3, 56, 28, 0, 398, 397, 1, 0, 0, 0, 398, 399, 1, 0, 0, 0, 399, 401, 1, 0, 0, 0, 400, 402, 3, 60, 30, 0, 401, 400, 1, 0, 0, 0, 401, 402, 1, 0, 0, 0, 402, 404, 1, 0, 0, 0, 403, 405, 3, 62, 31, 0, 404, 403, 1, 0, 0, 0, 404, 405, 1, 0, 0, 0, 405, 407, 1, 0, 0, 0, 406, 408, 3, 64, 32, 0, 407, 406, 1, 0, 0, 0, 407, 408, 1, 0, 0, 0, 408, 411, 1, 0, 0, 0, 409, 410, 5, 102, 0, 0, 410, 412, 7, 0, 0, 0, 411, 409, 1, 0, 0, 0, 411, 412, 1, 0, 0, 0, 412, 415, 1, 0, 0, 0, 413, 414, 5, 102, 0, 0, 414, 416, 5, 89, 0, 0, 415, 413, 1, 0, 0, 0, 415, 416, 1, 0, 0, 0, 416, 418, 1, 0, 0, 0, 417, 419, 3, 66, 33, 0, 418, 417, 1, 0, 0, 0, 418, 419, 1, 0, 0, 0, 419, 421, 1, 0, 0, 0, 420, 422, 3, 58, 29, 0, 421, 420, 1, 0, 0, 0, 421, 422, 1, 0, 0, 0, 422, 424, 1, 0, 0, 0, 423, 425, 3, 68, 34, 0, 424, 423, 1, 0, 0, 0, 424, 425, 1, 0, 0, 0, 425, 428, 1, 0, 0, 0, 426, 429, 3, 72, 36, 0, 427, 429, 3, 74, 37, 0, 428, 426, 1, 0, 0, 0, 428, 427, 1, 0, 0, 0, 428, 429, 1, 0, 0, 0, 429, 431, 1, 0, 0, 0, 430, 432, 3, 76, 38, 0, 431, 430, 1, 0, 0, 0, 431, 432, 1, 0, 0, 0, 432, 49, 1, 0, 0, 0, 433, 434, 5, 102, 0, 0, 434, 435, 3, 128, 64, 0, 435, 51, 1, 0, 0, 0, 436, 437, 5, 88, 0, 0, 437, 440, 5, 108, 0, 0, 438, 439, 5, 102, 0, 0, 439, 441, 5, 85, 0, 0, 440, 438, 1, 0, 0, 0, 440, 441, 1, 0, 0, 0, 441, 53, 1, 0, 0, 0, 442, 443, 5, 34, 0, 0, 443, 444, 3, 78, 39, 0, 444, 55, 1, 0, 0, 0, 445, 447, 7, 1, 0, 0, 446, 445, 1, 0, 0, 0, 446, 447, 1, 0, 0, 0, 447, 448, 1, 0, 0, 0, 448, 449, 5, 5, 0, 0, 449, 450, 5, 47, 0, 0, 450, 451, 3, 114, 57, 0, 451, 57, 1, 0, 0, 0, 452, 453, 5, 101, 0, 0, 453, 454, 3, 160, 80, 0, 454, 455, 5, 6, 0, 0, 455, 456, 5, 130, 0, 0, 456, 457, 3, 98, 49, 0, 457, 467, 5, 149, 0, 0, 458, 459, 5, 116, 0, 0, 459, 460, 3, 160, 80, 0, 460, 461, 5, 6, 0, 0, 461, 462, 5, 130, 0, 0, 462, 463, 3, 98, 49, 0, 463, 464, 5, 149, 0, 0, 464, 466, 1, 0, 0, 0, 465, 458, 1, 0, 0, 0, 466, 469, 1, 0, 0, 0, 467, 465, 1, 0, 0, 0, 467, 468, 1, 0, 0, 0, 468, 59, 1, 0, 0, 0, 469, 467, 1, 0, 0, 0, 470, 471, 5, 69, 0, 0, 471, 472, 3, 116, 58, 0, 472, 61, 1, 0, 0, 0, 473, 474, 5, 99, 0, 0, 474, 475, 3, 116, 58, 0, 475, 63, 1, 0, 0, 0, 476, 477, 5, 36, 0, 0, 477, 484, 5, 11, 0, 0, 478, 479, 7, 0, 0, 0, 479, 480, 5, 130, 0, 0, 480, 481, 3, 114, 57, 0, 481, 482, 5, 149, 0, 0, 482, 485, 1, 0, 0, 0, 483, 485, 3, 114, 57, 0, 484, 478, 1, 0, 0, 0, 484, 483, 1, 0, 0, 0, 485, 65, 1, 0, 0, 0, 486, 487, 5, 37, 0, 0, 487, 488, 3, 116, 58, 0, 488, 67, 1, 0, 0, 0, 489, 490, 5, 64, 0, 0, 490, 491, 5, 11, 0, 0, 491, 492, 3, 88, 44, 0, 492, 69, 1, 0, 0, 0, 493, 494, 5, 64, 0, 0, 494, 495, 5, 11, 0, 0, 495, 496, 3, 114, 57, 0, 496, 71, 1, 0, 0, 0, 497, 498, 5, 54, 0, 0, 498, 501, 3, 116, 58, 0, 499, 500, 5, 116, 0, 0, 500, 502, 3, 116, 58, 0, 501, 499, 1, 0, 0, 0, 501, 502, 1, 0, 0, 0, 502, 507, 1, 0, 0, 0, 503, 504, 5, 102, 0, 0, 504, 508, 5, 85, 0, 0, 505, 506, 5, 11, 0, 0, 506, 508, 3, 114, 57, 0, 507, 503, 1, 0, 0, 0, 507, 505, 1, 0, 0, 0, 507, 508, 1, 0, 0, 0, 508, 527, 1, 0, 0, 0, 509, 510, 5, 54, 0, 0, 510, 513, 3, 116, 58, 0, 511, 512, 5, 102, 0, 0, 512, 514, 5, 85, 0, 0, 513, 511, 1, 0, 0, 0, 513, 514, 1, 0, 0, 0, 514, 515, 1, 0, 0, 0, 515, 516, 5, 61, 0, 0, 516, 517, 3, 116, 58, 0, 517, 527, 1, 0, 0, 0, 518, 519, 5, 54, 0, 0, 519, 520, 3, 116, 58, 0, 520, 521, 5, 61, 0, 0, 521, 524, 3, 116, 58, 0, 522, 523, 5, 11, 0, 0, 523, 525, 3, 114, 57, 0, 524, 522, 1, 0, 0, 0, 524, 525, 1, 0, 0, 0, 525, 527, 1, 0, 0, 0, 526, 497, 1, 0, 0, 0, 526, 509, 1, 0, 0, 0, 526, 518, 1, 0, 0, 0, 527, 73, 1, 0, 0, 0, 528, 529, 5, 61, 0, 0, 529, 530, 3, 116, 58, 0, 530, 75, 1, 0, 0, 0, 531, 532, 5, 81, 0, 0, 532, 533, 3, 94, 47, 0, 533, 77, 1, 0, 0, 0, 534, 535, 6, 39, -1, 0, 535, 537, 3, 136, 68, 0, 536, 538, 5, 28, 0, 0, 537, 536, 1, 0, 0, 0, 537, 538, 1, 0, 0, 0, 538, 540, 1, 0, 0, 0, 539, 541, 3, 86, 43, 0, 540, 539, 1, 0, 0, 0, 540, 541, 1, 0, 0, 0, 541, 547, 1, 0, 0, 0, 542, 543, 5, 130, 0, 0, 543, 544, 3, 78, 39, 0, 544, 545, 5, 149, 0, 0, 545, 547, 1, 0, 0, 0, 546, 534, 1, 0, 0, 0, 546, 542, 1, 0, 0, 0, 547, 562, 1, 0, 0, 0, 548, 549, 10, 3, 0, 0, 549, 550, 3, 82, 41, 0, 550, 551, 3, 78, 39, 4, 551, 561, 1, 0, 0, 0, 552, 554, 10, 4, 0, 0, 553, 555, 3, 80, 40, 0, 554, 553, 1, 0, 0, 0, 554, 555, 1, 0, 0, 0, 555, 556, 1, 0, 0, 0, 556, 557, 5, 47, 0, 0, 557, 558, 3, 78, 39, 0, 558, 559, 3, 84, 42, 0, 559, 561, 1, 0, 0, 0, 560, 548, 1, 0, 0, 0, 560, 552, 1, 0, 0, 0, 561, 564, 1, 0, 0, 0, 562, 560, 1, 0, 0, 0, 562, 563, 1, 0, 0, 0, 563, 79, 1, 0, 0, 0, 564, 562, 1, 0, 0, 0, 565, 567, 7, 2, 0, 0, 566, 565, 1, 0, 0, 0, 566, 567, 1, 0, 0, 0, 567, 568, 1, 0, 0, 0, 568, 575, 5, 44, 0, 0, 569, 571, 5, 44, 0, 0, 570, 572, 7, 2, 0, 0, 571, 570, 1, 0, 0, 0, 571, 572, 1, 0, 0, 0, 572, 575, 1, 0, 0, 0, 573, 575, 7, 2, 0, 0, 574, 566, 1, 0, 0, 0, 574, 569, 1, 0, 0, 0, 574, 573, 1, 0, 0, 0, 575, 609, 1, 0, 0, 0, 576, 578, 7, 3, 0, 0, 577, 576, 1, 0, 0, 0, 577, 578, 1, 0, 0, 0, 578, 579, 1, 0, 0, 0, 579, 581, 7, 4, 0, 0, 580, 582, 5, 65, 0, 0, 581, 580, 1, 0, 0, 0, 581, 582, 1, 0, 0, 0, 582, 591, 1, 0, 0, 0, 583, 585, 7, 4, 0, 0, 584, 586, 5, 65, 0, 0, 585, 584, 1, 0, 0, 0, 585, 586, 1, 0, 0, 0, 586, 588, 1, 0, 0, 0, 587, 589, 7, 3, 0, 0, 588, 587, 1, 0, 0, 0, 588, 589, 1, 0, 0, 0, 589, 591, 1, 0, 0, 0, 590, 577, 1, 0, 0, 0, 590, 583, 1, 0, 0, 0, 591, 609, 1, 0, 0, 0, 592, 594, 7, 5, 0, 0, 593, 592, 1, 0, 0, 0, 593, 594, 1, 0, 0, 0, 594, 595, 1, 0, 0, 0, 595, 597, 5, 35, 0, 0, 596, 598, 5, 65, 0, 0, 597, 596, 1, 0, 0, 0, 597, 598, 1, 0, 0, 0, 598, 607, 1, 0, 0, 0, 599, 601, 5, 35, 0, 0, 600, 602, 5, 65, 0, 0, 601, 600, 1, 0, 0, 0, 601, 602, 1, 0, 0, 0, 602, 604, 1, 0, 0, 0, 603, 605, 7, 5, 0, 0, 604, 603, 1, 0, 0, 0, 604, 605, 1, 0, 0, 0, 605, 607, 1, 0, 0, 0, 606, 593, 1, 0, 0, 0, 606, 599, 1, 0, 0, 0, 607, 609, 1, 0, 0, 0, 608, 574, 1, 0, 0, 0, 608, 590, 1, 0, 0, 0, 608, 606, 1, 0, 0, 0, 609, 81, 1, 0, 0, 0, 610, 611, 5, 17, 0, 0, 611, 614, 5, 47, 0, 0, 612, 614, 5, 116, 0, 0, 613, 610, 1, 0, 0, 0, 613, 612, 1, 0, 0, 0, 614, 83, 1, 0, 0, 0, 615, 616, 5, 62, 0, 0, 616, 625, 3, 114, 57, 0, 617, 618, 5, 96, 0, 0, 618, 619, 5, 130, 0, 0, 619, 620, 3, 114, 57, 0, 620, 621, 5, 149, 0, 0, 621, 625, 1, 0, 0, 0, 622, 623, 5, 96, 0, 0, 623, 625, 3, 114, 57, 0, 624, 615, 1, 0, 0, 0, 624, 617, 1, 0, 0, 0, 624, 622, 1, 0, 0, 0, 625, 85, 1, 0, 0, 0, 626, 627, 5, 77, 0, 0, 627, 630, 3, 92, 46, 0, 628, 629, 5, 61, 0, 0, 629, 631, 3, 92, 46, 0, 630, 628, 1, 0, 0, 0, 630, 631, 1, 0, 0, 0, 631, 87, 1, 0, 0, 0, 632, 637, 3, 90, 45, 0, 633, 634, 5, 116, 0, 0, 634, 636, 3, 90, 45, 0, 635, 633, 1, 0, 0, 0, 636, 639, 1, 0, 0, 0, 637, 635, 1, 0, 0, 0, 637, 638, 1, 0, 0, 0, 638, 89, 1, 0, 0, 0, 639, 637, 1, 0, 0, 0, 640, 642, 3, 116, 58, 0, 641, 643, 7, 6, 0, 0, 642, 641, 1, 0, 0, 0, 642, 643, 1, 0, 0, 0, 643, 646, 1, 0, 0, 0, 644, 645, 5, 60, 0, 0, 645, 647, 7, 7, 0, 0, 646, 644, 1, 0, 0, 0, 646, 647, 1, 0, 0, 0, 647, 650, 1, 0, 0, 0, 648, 649, 5, 16, 0, 0, 649, 651, 5, 110, 0, 0, 650, 648, 1, 0, 0, 0, 650, 651, 1, 0, 0, 0, 651, 91, 1, 0, 0, 0, 652, 659, 3, 164, 82, 0, 653, 656, 3, 148, 74, 0, 654, 655, 5, 151, 0, 0, 655, 657, 3, 148, 74, 0, 656, 654, 1, 0, 0, 0, 656, 657, 1, 0, 0, 0, 657, 659, 1, 0, 0, 0, 658, 652, 1, 0, 0, 0, 658, 653, 1, 0, 0, 0, 659, 93, 1, 0, 0, 0, 660, 665, 3, 96, 48, 0, 661, 662, 5, 116, 0, 0, 662, 664, 3, 96, 48, 0, 663, 661, 1, 0, 0, 0, 664, 667, 1, 0, 0, 0, 665, 663, 1, 0, 0, 0, 665, 666, 1, 0, 0, 0, 666, 95, 1, 0, 0, 0, 667, 665, 1, 0, 0, 0, 668, 669, 3, 160, 80, 0, 669, 670, 5, 122, 0, 0, 670, 671, 3, 150, 75, 0, 671, 97, 1, 0, 0, 0, 672, 674, 3, 100, 50, 0, 673, 672, 1, 0, 0, 0, 673, 674, 1, 0, 0, 0, 674, 676, 1, 0, 0, 0, 675, 677, 3, 102, 51, 0, 676, 675, 1, 0, 0, 0, 676, 677, 1, 0, 0, 0, 677, 679, 1, 0, 0, 0, 678, 680, 3, 104, 52, 0, 679, 678, 1, 0, 0, 0, 679, 680, 1, 0, 0, 0, 680, 99, 1, 0, 0, 0, 681, 682, 5, 67, 0, 0, 682, 683, 5, 11, 0, 0, 683, 684, 3, 114, 57, 0, 684, 101, 1, 0, 0, 0, 685, 686, 5, 64, 0, 0, 686, 687, 5, 11, 0, 0, 687, 688, 3, 88, 44, 0, 688, 103, 1, 0, 0, 0, 689, 690, 7, 8, 0, 0, 690, 691, 3, 106, 53, 0, 691, 105, 1, 0, 0, 0, 692, 699, 3, 108, 54, 0, 693, 694, 5, 9, 0, 0, 694, 695, 3, 108, 54, 0, 695, 696, 5, 2, 0, 0, 696, 697, 3, 108, 54, 0, 697, 699, 1, 0, 0, 0, 698, 692, 1, 0, 0, 0, 698, 693, 1, 0, 0, 0, 699, 107, 1, 0, 0, 0, 700, 701, 5, 19, 0, 0, 701, 713, 5, 75, 0, 0, 702, 703, 5, 94, 0, 0, 703, 713, 5, 68, 0, 0, 704, 705, 5, 94, 0, 0, 705, 713, 5, 32, 0, 0, 706, 707, 3, 148, 74, 0, 707, 708, 5, 68, 0, 0, 708, 713, 1, 0, 0, 0, 709, 710, 3, 148, 74, 0, 710, 711, 5, 32, 0, 0, 711, 713, 1, 0, 0, 0, 712, 700, 1, 0, 0, 0, 712, 702, 1, 0, 0, 0, 712, 704, 1, 0, 0, 0, 712, 706, 1, 0, 0, 0, 712, 709, 1, 0, 0, 0, 713, 109, 1, 0, 0, 0, 714, 715, 3, 116, 58, 0, 715, 716, 5, 0, 0, 1, 716, 111, 1, 0, 0, 0, 717, 774, 3, 160, 80, 0, 718, 719, 3, 160, 80, 0, 719, 720, 5, 130, 0, 0, 720, 721, 3, 160, 80, 0, 721, 728, 3, 112, 56, 0, 722, 723, 5, 116, 0, 0, 723, 724, 3, 160, 80, 0, 724, 725, 3, 112, 56, 0, 725, 727, 1, 0, 0, 0, 726, 722, 1, 0, 0, 0, 727, 730, 1, 0, 0, 0, 728, 726, 1, 0, 0, 0, 728, 729, 1, 0, 0, 0, 729, 732, 1, 0, 0, 0, 730, 728, 1, 0, 0, 0, 731, 733, 5, 116, 0, 0, 732, 731, 1, 0, 0, 0, 732, 733, 1, 0, 0, 0, 733, 734, 1, 0, 0, 0, 734, 735, 5, 149, 0, 0, 735, 774, 1, 0, 0, 0, 736, 737, 3, 160, 80, 0, 737, 738, 5, 130, 0, 0, 738, 743, 3, 162, 81, 0, 739, 740, 5, 116, 0, 0, 740, 742, 3, 162, 81, 0, 741, 739, 1, 0, 0, 0, 742, 745, 1, 0, 0, 0, 743, 741, 1, 0, 0, 0, 743, 744, 1, 0, 0, 0, 744, 747, 1, 0, 0, 0, 745, 743, 1, 0, 0, 0, 746, 748, 5, 116, 0, 0, 747, 746, 1, 0, 0, 0, 747, 748, 1, 0, 0, 0, 748, 749, 1, 0, 0, 0, 749, 750, 5, 149, 0, 0, 750, 774, 1, 0, 0, 0, 751, 752, 3, 160, 80, 0, 752, 753, 5, 130, 0, 0, 753, 758, 3, 112, 56, 0, 754, 755, 5, 116, 0, 0, 755, 757, 3, 112, 56, 0, 756, 754, 1, 0, 0, 0, 757, 760, 1, 0, 0, 0, 758, 756, 1, 0, 0, 0, 758, 759, 1, 0, 0, 0, 759, 762, 1, 0, 0, 0, 760, 758, 1, 0, 0, 0, 761, 763, 5, 116, 0, 0, 762, 761, 1, 0, 0, 0, 762, 763, 1, 0, 0, 0, 763, 764, 1, 0, 0, 0, 764, 765, 5, 149, 0, 0, 765, 774, 1, 0, 0, 0, 766, 767, 3, 160, 80, 0, 767, 769, 5, 130, 0, 0, 768, 770, 3, 114, 57, 0, 769, 768, 1, 0, 0, 0, 769, 770, 1, 0, 0, 0, 770, 771, 1, 0, 0, 0, 771, 772, 5, 149, 0, 0, 772, 774, 1, 0, 0, 0, 773, 717, 1, 0, 0, 0, 773, 718, 1, 0, 0, 0, 773, 736, 1, 0, 0, 0, 773, 751, 1, 0, 0, 0, 773, 766, 1, 0, 0, 0, 774, 113, 1, 0, 0, 0, 775, 780, 3, 116, 58, 0, 776, 777, 5, 116, 0, 0, 777, 779, 3, 116, 58, 0, 778, 776, 1, 0, 0, 0, 779, 782, 1, 0, 0, 0, 780, 778, 1, 0, 0, 0, 780, 781, 1, 0, 0, 0, 781, 784, 1, 0, 0, 0, 782, 780, 1, 0, 0, 0, 783, 785, 5, 116, 0, 0, 784, 783, 1, 0, 0, 0, 784, 785, 1, 0, 0, 0, 785, 115, 1, 0, 0, 0, 786, 787, 6, 58, -1, 0, 787, 789, 5, 12, 0, 0, 788, 790, 3, 116, 58, 0, 789, 788, 1, 0, 0, 0, 789, 790, 1, 0, 0, 0, 790, 796, 1, 0, 0, 0, 791, 792, 5, 98, 0, 0, 792, 793, 3, 116, 58, 0, 793, 794, 5, 83, 0, 0, 794, 795, 3, 116, 58, 0, 795, 797, 1, 0, 0, 0, 796, 791, 1, 0, 0, 0, 797, 798, 1, 0, 0, 0, 798, 796, 1, 0, 0, 0, 798, 799, 1, 0, 0, 0, 799, 802, 1, 0, 0, 0, 800, 801, 5, 25, 0, 0, 801, 803, 3, 116, 58, 0, 802, 800, 1, 0, 0, 0, 802, 803, 1, 0, 0, 0, 803, 804, 1, 0, 0, 0, 804, 805, 5, 26, 0, 0, 805, 936, 1, 0, 0, 0, 806, 807, 5, 13, 0, 0, 807, 808, 5, 130, 0, 0, 808, 809, 3, 116, 58, 0, 809, 810, 5, 6, 0, 0, 810, 811, 3, 112, 56, 0, 811, 812, 5, 149, 0, 0, 812, 936, 1, 0, 0, 0, 813, 814, 5, 20, 0, 0, 814, 936, 5, 110, 0, 0, 815, 816, 5, 45, 0, 0, 816, 817, 3, 116, 58, 0, 817, 818, 3, 152, 76, 0, 818, 936, 1, 0, 0, 0, 819, 820, 5, 82, 0, 0, 820, 821, 5, 130, 0, 0, 821, 822, 3, 116, 58, 0, 822, 823, 5, 34, 0, 0, 823, 826, 3, 116, 58, 0, 824, 825, 5, 33, 0, 0, 825, 827, 3, 116, 58, 0, 826, 824, 1, 0, 0, 0, 826, 827, 1, 0, 0, 0, 827, 828, 1, 0, 0, 0, 828, 829, 5, 149, 0, 0, 829, 936, 1, 0, 0, 0, 830, 831, 5, 86, 0, 0, 831, 936, 5, 110, 0, 0, 832, 833, 5, 91, 0, 0, 833, 834, 5, 130, 0, 0, 834, 835, 7, 9, 0, 0, 835, 836, 3, 166, 83, 0, 836, 837, 5, 34, 0, 0, 837, 838, 3, 116, 58, 0, 838, 839, 5, 149, 0, 0, 839, 936, 1, 0, 0, 0, 840, 841, 3, 160, 80, 0, 841, 843, 5, 130, 0, 0, 842, 844, 3, 114, 57, 0, 843, 842, 1, 0, 0, 0, 843, 844, 1, 0, 0, 0, 844, 845, 1, 0, 0, 0, 845, 846, 5, 149, 0, 0, 846, 855, 1, 0, 0, 0, 847, 849, 5, 130, 0, 0, 848, 850, 5, 24, 0, 0, 849, 848, 1, 0, 0, 0, 849, 850, 1, 0, 0, 0, 850, 852, 1, 0, 0, 0, 851, 853, 3, 118, 59, 0, 852, 851, 1, 0, 0, 0, 852, 853, 1, 0, 0, 0, 853, 854, 1, 0, 0, 0, 854, 856, 5, 149, 0, 0, 855, 847, 1, 0, 0, 0, 855, 856, 1, 0, 0, 0, 856, 857, 1, 0, 0, 0, 857, 858, 5, 66, 0, 0, 858, 859, 5, 130, 0, 0, 859, 860, 3, 98, 49, 0, 860, 861, 5, 149, 0, 0, 861, 936, 1, 0, 0, 0, 862, 863, 3, 160, 80, 0, 863, 865, 5, 130, 0, 0, 864, 866, 3, 114, 57, 0, 865, 864, 1, 0, 0, 0, 865, 866, 1, 0, 0, 0, 866, 867, 1, 0, 0, 0, 867, 868, 5, 149, 0, 0, 868, 877, 1, 0, 0, 0, 869, 871, 5, 130, 0, 0, 870, 872, 5, 24, 0, 0, 871, 870, 1, 0, 0, 0, 871, 872, 1, 0, 0, 0, 872, 874, 1, 0, 0, 0, 873, 875, 3, 118, 59, 0, 874, 873, 1, 0, 0, 0, 874, 875, 1, 0, 0, 0, 875, 876, 1, 0, 0, 0, 876, 878, 5, 149, 0, 0, 877, 869, 1, 0, 0, 0, 877, 878, 1, 0, 0, 0, 878, 879, 1, 0, 0, 0, 879, 880, 5, 66, 0, 0, 880, 881, 3, 160, 80, 0, 881, 936, 1, 0, 0, 0, 882, 888, 3, 160, 80, 0, 883, 885, 5, 130, 0, 0, 884, 886, 3, 114, 57, 0, 885, 884, 1, 0, 0, 0, 885, 886, 1, 0, 0, 0, 886, 887, 1, 0, 0, 0, 887, 889, 5, 149, 0, 0, 888, 883, 1, 0, 0, 0, 888, 889, 1, 0, 0, 0, 889, 890, 1, 0, 0, 0, 890, 892, 5, 130, 0, 0, 891, 893, 5, 24, 0, 0, 892, 891, 1, 0, 0, 0, 892, 893, 1, 0, 0, 0, 893, 895, 1, 0, 0, 0, 894, 896, 3, 118, 59, 0, 895, 894, 1, 0, 0, 0, 895, 896, 1, 0, 0, 0, 896, 897, 1, 0, 0, 0, 897, 898, 5, 149, 0, 0, 898, 936, 1, 0, 0, 0, 899, 936, 3, 124, 62, 0, 900, 936, 3, 168, 84, 0, 901, 936, 3, 150, 75, 0, 902, 903, 5, 118, 0, 0, 903, 936, 3, 116, 58, 19, 904, 905, 5, 58, 0, 0, 905, 936, 3, 116, 58, 13, 906, 907, 3, 140, 70, 0, 907, 908, 5, 120, 0, 0, 908, 910, 1, 0, 0, 0, 909, 906, 1, 0, 0, 0, 909, 910, 1, 0, 0, 0, 910, 911, 1, 0, 0, 0, 911, 936, 5, 112, 0, 0, 912, 913, 5, 130, 0, 0, 913, 914, 3, 44, 22, 0, 914, 915, 5, 149, 0, 0, 915, 936, 1, 0, 0, 0, 916, 917, 5, 130, 0, 0, 917, 918, 3, 116, 58, 0, 918, 919, 5, 149, 0, 0, 919, 936, 1, 0, 0, 0, 920, 921, 5, 130, 0, 0, 921, 922, 3, 114, 57, 0, 922, 923, 5, 149, 0, 0, 923, 936, 1, 0, 0, 0, 924, 926, 5, 129, 0, 0, 925, 927, 3, 114, 57, 0, 926, 925, 1, 0, 0, 0, 926, 927, 1, 0, 0, 0, 927, 928, 1, 0, 0, 0, 928, 936, 5, 148, 0, 0, 929, 931, 5, 128, 0, 0, 930, 932, 3, 40, 20, 0, 931, 930, 1, 0, 0, 0, 931, 932, 1, 0, 0, 0, 932, 933, 1, 0, 0, 0, 933, 936, 5, 147, 0, 0, 934, 936, 3, 132, 66, 0, 935, 786, 1, 0, 0, 0, 935, 806, 1, 0, 0, 0, 935, 813, 1, 0, 0, 0, 935, 815, 1, 0, 0, 0, 935, 819, 1, 0, 0, 0, 935, 830, 1, 0, 0, 0, 935, 832, 1, 0, 0, 0, 935, 840, 1, 0, 0, 0, 935, 862, 1, 0, 0, 0, 935, 882, 1, 0, 0, 0, 935, 899, 1, 0, 0, 0, 935, 900, 1, 0, 0, 0, 935, 901, 1, 0, 0, 0, 935, 902, 1, 0, 0, 0, 935, 904, 1, 0, 0, 0, 935, 909, 1, 0, 0, 0, 935, 912, 1, 0, 0, 0, 935, 916, 1, 0, 0, 0, 935, 920, 1, 0, 0, 0, 935, 924, 1, 0, 0, 0, 935, 929, 1, 0, 0, 0, 935, 934, 1, 0, 0, 0, 936, 1041, 1, 0, 0, 0, 937, 941, 10, 18, 0, 0, 938, 942, 5, 112, 0, 0, 939, 942, 5, 151, 0, 0, 940, 942, 5, 138, 0, 0, 941, 938, 1, 0, 0, 0, 941, 939, 1, 0, 0, 0, 941, 940, 1, 0, 0, 0, 942, 943, 1, 0, 0, 0, 943, 1040, 3, 116, 58, 19, 944, 948, 10, 17, 0, 0, 945, 949, 5, 139, 0, 0, 946, 949, 5, 118, 0, 0, 947, 949, 5, 117, 0, 0, 948, 945, 1, 0, 0, 0, 948, 946, 1, 0, 0, 0, 948, 947, 1, 0, 0, 0, 949, 950, 1, 0, 0, 0, 950, 1040, 3, 116, 58, 18, 951, 976, 10, 16, 0, 0, 952, 977, 5, 121, 0, 0, 953, 977, 5, 122, 0, 0, 954, 977, 5, 133, 0, 0, 955, 977, 5, 131, 0, 0, 956, 977, 5, 132, 0, 0, 957, 977, 5, 123, 0, 0, 958, 977, 5, 124, 0, 0, 959, 961, 5, 58, 0, 0, 960, 959, 1, 0, 0, 0, 960, 961, 1, 0, 0, 0, 961, 962, 1, 0, 0, 0, 962, 964, 5, 42, 0, 0, 963, 965, 5, 15, 0, 0, 964, 963, 1, 0, 0, 0, 964, 965, 1, 0, 0, 0, 965, 977, 1, 0, 0, 0, 966, 968, 5, 58, 0, 0, 967, 966, 1, 0, 0, 0, 967, 968, 1, 0, 0, 0, 968, 969, 1, 0, 0, 0, 969, 977, 7, 10, 0, 0, 970, 977, 5, 145, 0, 0, 971, 977, 5, 146, 0, 0, 972, 977, 5, 135, 0, 0, 973, 977, 5, 126, 0, 0, 974, 977, 5, 127, 0, 0, 975, 977, 5, 134, 0, 0, 976, 952, 1, 0, 0, 0, 976, 953, 1, 0, 0, 0, 976, 954, 1, 0, 0, 0, 976, 955, 1, 0, 0, 0, 976, 956, 1, 0, 0, 0, 976, 957, 1, 0, 0, 0, 976, 958, 1, 0, 0, 0, 976, 960, 1, 0, 0, 0, 976, 967, 1, 0, 0, 0, 976, 970, 1, 0, 0, 0, 976, 971, 1, 0, 0, 0, 976, 972, 1, 0, 0, 0, 976, 973, 1, 0, 0, 0, 976, 974, 1, 0, 0, 0, 976, 975, 1, 0, 0, 0, 977, 978, 1, 0, 0, 0, 978, 1040, 3, 116, 58, 17, 979, 980, 10, 14, 0, 0, 980, 981, 5, 137, 0, 0, 981, 1040, 3, 116, 58, 15, 982, 983, 10, 12, 0, 0, 983, 984, 5, 2, 0, 0, 984, 1040, 3, 116, 58, 13, 985, 986, 10, 11, 0, 0, 986, 987, 5, 63, 0, 0, 987, 1040, 3, 116, 58, 12, 988, 990, 10, 10, 0, 0, 989, 991, 5, 58, 0, 0, 990, 989, 1, 0, 0, 0, 990, 991, 1, 0, 0, 0, 991, 992, 1, 0, 0, 0, 992, 993, 5, 9, 0, 0, 993, 994, 3, 116, 58, 0, 994, 995, 5, 2, 0, 0, 995, 996, 3, 116, 58, 11, 996, 1040, 1, 0, 0, 0, 997, 998, 10, 9, 0, 0, 998, 999, 5, 140, 0, 0, 999, 1000, 3, 116, 58, 0, 1000, 1001, 5, 115, 0, 0, 1001, 1002, 3, 116, 58, 9, 1002, 1040, 1, 0, 0, 0, 1003, 1004, 10, 25, 0, 0, 1004, 1005, 5, 129, 0, 0, 1005, 1006, 3, 116, 58, 0, 1006, 1007, 5, 148, 0, 0, 1007, 1040, 1, 0, 0, 0, 1008, 1009, 10, 24, 0, 0, 1009, 1010, 5, 120, 0, 0, 1010, 1040, 5, 108, 0, 0, 1011, 1012, 10, 23, 0, 0, 1012, 1013, 5, 120, 0, 0, 1013, 1040, 3, 160, 80, 0, 1014, 1015, 10, 22, 0, 0, 1015, 1016, 5, 136, 0, 0, 1016, 1017, 5, 129, 0, 0, 1017, 1018, 3, 116, 58, 0, 1018, 1019, 5, 148, 0, 0, 1019, 1040, 1, 0, 0, 0, 1020, 1021, 10, 21, 0, 0, 1021, 1022, 5, 136, 0, 0, 1022, 1040, 5, 108, 0, 0, 1023, 1024, 10, 20, 0, 0, 1024, 1025, 5, 136, 0, 0, 1025, 1040, 3, 160, 80, 0, 1026, 1027, 10, 15, 0, 0, 1027, 1029, 5, 46, 0, 0, 1028, 1030, 5, 58, 0, 0, 1029, 1028, 1, 0, 0, 0, 1029, 1030, 1, 0, 0, 0, 1030, 1031, 1, 0, 0, 0, 1031, 1040, 5, 59, 0, 0, 1032, 1037, 10, 8, 0, 0, 1033, 1034, 5, 6, 0, 0, 1034, 1038, 3, 160, 80, 0, 1035, 1036, 5, 6, 0, 0, 1036, 1038, 5, 110, 0, 0, 1037, 1033, 1, 0, 0, 0, 1037, 1035, 1, 0, 0, 0, 1038, 1040, 1, 0, 0, 0, 1039, 937, 1, 0, 0, 0, 1039, 944, 1, 0, 0, 0, 1039, 951, 1, 0, 0, 0, 1039, 979, 1, 0, 0, 0, 1039, 982, 1, 0, 0, 0, 1039, 985, 1, 0, 0, 0, 1039, 988, 1, 0, 0, 0, 1039, 997, 1, 0, 0, 0, 1039, 1003, 1, 0, 0, 0, 1039, 1008, 1, 0, 0, 0, 1039, 1011, 1, 0, 0, 0, 1039, 1014, 1, 0, 0, 0, 1039, 1020, 1, 0, 0, 0, 1039, 1023, 1, 0, 0, 0, 1039, 1026, 1, 0, 0, 0, 1039, 1032, 1, 0, 0, 0, 1040, 1043, 1, 0, 0, 0, 1041, 1039, 1, 0, 0, 0, 1041, 1042, 1, 0, 0, 0, 1042, 117, 1, 0, 0, 0, 1043, 1041, 1, 0, 0, 0, 1044, 1049, 3, 120, 60, 0, 1045, 1046, 5, 116, 0, 0, 1046, 1048, 3, 120, 60, 0, 1047, 1045, 1, 0, 0, 0, 1048, 1051, 1, 0, 0, 0, 1049, 1047, 1, 0, 0, 0, 1049, 1050, 1, 0, 0, 0, 1050, 1053, 1, 0, 0, 0, 1051, 1049, 1, 0, 0, 0, 1052, 1054, 5, 116, 0, 0, 1053, 1052, 1, 0, 0, 0, 1053, 1054, 1, 0, 0, 0, 1054, 119, 1, 0, 0, 0, 1055, 1058, 3, 122, 61, 0, 1056, 1058, 3, 116, 58, 0, 1057, 1055, 1, 0, 0, 0, 1057, 1056, 1, 0, 0, 0, 1058, 121, 1, 0, 0, 0, 1059, 1060, 5, 130, 0, 0, 1060, 1065, 3, 160, 80, 0, 1061, 1062, 5, 116, 0, 0, 1062, 1064, 3, 160, 80, 0, 1063, 1061, 1, 0, 0, 0, 1064, 1067, 1, 0, 0, 0, 1065, 1063, 1, 0, 0, 0, 1065, 1066, 1, 0, 0, 0, 1066, 1069, 1, 0, 0, 0, 1067, 1065, 1, 0, 0, 0, 1068, 1070, 5, 116, 0, 0, 1069, 1068, 1, 0, 0, 0, 1069, 1070, 1, 0, 0, 0, 1070, 1071, 1, 0, 0, 0, 1071, 1072, 5, 149, 0, 0, 1072, 1085, 1, 0, 0, 0, 1073, 1078, 3, 160, 80, 0, 1074, 1075, 5, 116, 0, 0, 1075, 1077, 3, 160, 80, 0, 1076, 1074, 1, 0, 0, 0, 1077, 1080, 1, 0, 0, 0, 1078, 1076, 1, 0, 0, 0, 1078, 1079, 1, 0, 0, 0, 1079, 1082, 1, 0, 0, 0, 1080, 1078, 1, 0, 0, 0, 1081, 1083, 5, 116, 0, 0, 1082, 1081, 1, 0, 0, 0, 1082, 1083, 1, 0, 0, 0, 1083, 1085, 1, 0, 0, 0, 1084, 1059, 1, 0, 0, 0, 1084, 1073, 1, 0, 0, 0, 1085, 1086, 1, 0, 0, 0, 1086, 1087, 5, 111, 0, 0, 1087, 1088, 3, 116, 58, 0, 1088, 123, 1, 0, 0, 0, 1089, 1090, 5, 132, 0, 0, 1090, 1094, 3, 160, 80, 0, 1091, 1093, 3, 126, 63, 0, 1092, 1091, 1, 0, 0, 0, 1093, 1096, 1, 0, 0, 0, 1094, 1092, 1, 0, 0, 0, 1094, 1095, 1, 0, 0, 0, 1095, 1097, 1, 0, 0, 0, 1096, 1094, 1, 0, 0, 0, 1097, 1098, 5, 151, 0, 0, 1098, 1099, 5, 124, 0, 0, 1099, 1118, 1, 0, 0, 0, 1100, 1101, 5, 132, 0, 0, 1101, 1105, 3, 160, 80, 0, 1102, 1104, 3, 126, 63, 0, 1103, 1102, 1, 0, 0, 0, 1104, 1107, 1, 0, 0, 0, 1105, 1103, 1, 0, 0, 0, 1105, 1106, 1, 0, 0, 0, 1106, 1108, 1, 0, 0, 0, 1107, 1105, 1, 0, 0, 0, 1108, 1110, 5, 124, 0, 0, 1109, 1111, 3, 124, 62, 0, 1110, 1109, 1, 0, 0, 0, 1110, 1111, 1, 0, 0, 0, 1111, 1112, 1, 0, 0, 0, 1112, 1113, 5, 132, 0, 0, 1113, 1114, 5, 151, 0, 0, 1114, 1115, 3, 160, 80, 0, 1115, 1116, 5, 124, 0, 0, 1116, 1118, 1, 0, 0, 0, 1117, 1089, 1, 0, 0, 0, 1117, 1100, 1, 0, 0, 0, 1118, 125, 1, 0, 0, 0, 1119, 1120, 3, 160, 80, 0, 1120, 1121, 5, 122, 0, 0, 1121, 1122, 3, 166, 83, 0, 1122, 1131, 1, 0, 0, 0, 1123, 1124, 3, 160, 80, 0, 1124, 1125, 5, 122, 0, 0, 1125, 1126, 5, 128, 0, 0, 1126, 1127, 3, 116, 58, 0, 1127, 1128, 5, 147, 0, 0, 1128, 1131, 1, 0, 0, 0, 1129, 1131, 3, 160, 80, 0, 1130, 1119, 1, 0, 0, 0, 1130, 1123, 1, 0, 0, 0, 1130, 1129, 1, 0, 0, 0, 1131, 127, 1, 0, 0, 0, 1132, 1137, 3, 130, 65, 0, 1133, 1134, 5, 116, 0, 0, 1134, 1136, 3, 130, 65, 0, 1135, 1133, 1, 0, 0, 0, 1136, 1139, 1, 0, 0, 0, 1137, 1135, 1, 0, 0, 0, 1137, 1138, 1, 0, 0, 0, 1138, 1141, 1, 0, 0, 0, 1139, 1137, 1, 0, 0, 0, 1140, 1142, 5, 116, 0, 0, 1141, 1140, 1, 0, 0, 0, 1141, 1142, 1, 0, 0, 0, 1142, 129, 1, 0, 0, 0, 1143, 1144, 3, 160, 80, 0, 1144, 1145, 5, 6, 0, 0, 1145, 1146, 5, 130, 0, 0, 1146, 1147, 3, 44, 22, 0, 1147, 1148, 5, 149, 0, 0, 1148, 1154, 1, 0, 0, 0, 1149, 1150, 3, 116, 58, 0, 1150, 1151, 5, 6, 0, 0, 1151, 1152, 3, 160, 80, 0, 1152, 1154, 1, 0, 0, 0, 1153, 1143, 1, 0, 0, 0, 1153, 1149, 1, 0, 0, 0, 1154, 131, 1, 0, 0, 0, 1155, 1163, 3, 164, 82, 0, 1156, 1157, 3, 140, 70, 0, 1157, 1158, 5, 120, 0, 0, 1158, 1160, 1, 0, 0, 0, 1159, 1156, 1, 0, 0, 0, 1159, 1160, 1, 0, 0, 0, 1160, 1161, 1, 0, 0, 0, 1161, 1163, 3, 134, 67, 0, 1162, 1155, 1, 0, 0, 0, 1162, 1159, 1, 0, 0, 0, 1163, 133, 1, 0, 0, 0, 1164, 1169, 3, 160, 80, 0, 1165, 1166, 5, 120, 0, 0, 1166, 1168, 3, 160, 80, 0, 1167, 1165, 1, 0, 0, 0, 1168, 1171, 1, 0, 0, 0, 1169, 1167, 1, 0, 0, 0, 1169, 1170, 1, 0, 0, 0, 1170, 135, 1, 0, 0, 0, 1171, 1169, 1, 0, 0, 0, 1172, 1173, 6, 68, -1, 0, 1173, 1182, 3, 140, 70, 0, 1174, 1182, 3, 138, 69, 0, 1175, 1176, 5, 130, 0, 0, 1176, 1177, 3, 44, 22, 0, 1177, 1178, 5, 149, 0, 0, 1178, 1182, 1, 0, 0, 0, 1179, 1182, 3, 124, 62, 0, 1180, 1182, 3, 164, 82, 0, 1181, 1172, 1, 0, 0, 0, 1181, 1174, 1, 0, 0, 0, 1181, 1175, 1, 0, 0, 0, 1181, 1179, 1, 0, 0, 0, 1181, 1180, 1, 0, 0, 0, 1182, 1191, 1, 0, 0, 0, 1183, 1187, 10, 3, 0, 0, 1184, 1188, 3, 158, 79, 0, 1185, 1186, 5, 6, 0, 0, 1186, 1188, 3, 160, 80, 0, 1187, 1184, 1, 0, 0, 0, 1187, 1185, 1, 0, 0, 0, 1188, 1190, 1, 0, 0, 0, 1189, 1183, 1, 0, 0, 0, 1190, 1193, 1, 0, 0, 0, 1191, 1189, 1, 0, 0, 0, 1191, 1192, 1, 0, 0, 0, 1192, 137, 1, 0, 0, 0, 1193, 1191, 1, 0, 0, 0, 1194, 1195, 3, 160, 80, 0, 1195, 1197, 5, 130, 0, 0, 1196, 1198, 3, 142, 71, 0, 1197, 1196, 1, 0, 0, 0, 1197, 1198, 1, 0, 0, 0, 1198, 1199, 1, 0, 0, 0, 1199, 1200, 5, 149, 0, 0, 1200, 139, 1, 0, 0, 0, 1201, 1202, 3, 144, 72, 0, 1202, 1203, 5, 120, 0, 0, 1203, 1205, 1, 0, 0, 0, 1204, 1201, 1, 0, 0, 0, 1204, 1205, 1, 0, 0, 0, 1205, 1206, 1, 0, 0, 0, 1206, 1207, 3, 160, 80, 0, 1207, 141, 1, 0, 0, 0, 1208, 1213, 3, 116, 58, 0, 1209, 1210, 5, 116, 0, 0, 1210, 1212, 3, 116, 58, 0, 1211, 1209, 1, 0, 0, 0, 1212, 1215, 1, 0, 0, 0, 1213, 1211, 1, 0, 0, 0, 1213, 1214, 1, 0, 0, 0, 1214, 1217, 1, 0, 0, 0, 1215, 1213, 1, 0, 0, 0, 1216, 1218, 5, 116, 0, 0, 1217, 1216, 1, 0, 0, 0, 1217, 1218, 1, 0, 0, 0, 1218, 143, 1, 0, 0, 0, 1219, 1220, 3, 160, 80, 0, 1220, 145, 1, 0, 0, 0, 1221, 1230, 5, 106, 0, 0, 1222, 1223, 5, 120, 0, 0, 1223, 1230, 7, 11, 0, 0, 1224, 1225, 5, 108, 0, 0, 1225, 1227, 5, 120, 0, 0, 1226, 1228, 7, 11, 0, 0, 1227, 1226, 1, 0, 0, 0, 1227, 1228, 1, 0, 0, 0, 1228, 1230, 1, 0, 0, 0, 1229, 1221, 1, 0, 0, 0, 1229, 1222, 1, 0, 0, 0, 1229, 1224, 1, 0, 0, 0, 1230, 147, 1, 0, 0, 0, 1231, 1233, 7, 12, 0, 0, 1232, 1231, 1, 0, 0, 0, 1232, 1233, 1, 0, 0, 0, 1233, 1240, 1, 0, 0, 0, 1234, 1241, 3, 146, 73, 0, 1235, 1241, 5, 107, 0, 0, 1236, 1241, 5, 108, 0, 0, 1237, 1241, 5, 109, 0, 0, 1238, 1241, 5, 43, 0, 0, 1239, 1241, 5, 57, 0, 0, 1240, 1234, 1, 0, 0, 0, 1240, 1235, 1, 0, 0, 0, 1240, 1236, 1, 0, 0, 0, 1240, 1237, 1, 0, 0, 0, 1240, 1238, 1, 0, 0, 0, 1240, 1239, 1, 0, 0, 0, 1241, 149, 1, 0, 0, 0, 1242, 1246, 3, 148, 74, 0, 1243, 1246, 5, 110, 0, 0, 1244, 1246, 5, 59, 0, 0, 1245, 1242, 1, 0, 0, 0, 1245, 1243, 1, 0, 0, 0, 1245, 1244, 1, 0, 0, 0, 1246, 151, 1, 0, 0, 0, 1247, 1248, 7, 13, 0, 0, 1248, 153, 1, 0, 0, 0, 1249, 1250, 7, 14, 0, 0, 1250, 155, 1, 0, 0, 0, 1251, 1252, 7, 15, 0, 0, 1252, 157, 1, 0, 0, 0, 1253, 1256, 5, 105, 0, 0, 1254, 1256, 3, 156, 78, 0, 1255, 1253, 1, 0, 0, 0, 1255, 1254, 1, 0, 0, 0, 1256, 159, 1, 0, 0, 0, 1257, 1261, 5, 105, 0, 0, 1258, 1261, 3, 152, 76, 0, 1259, 1261, 3, 154, 77, 0, 1260, 1257, 1, 0, 0, 0, 1260, 1258, 1, 0, 0, 0, 1260, 1259, 1, 0, 0, 0, 1261, 161, 1, 0, 0, 0, 1262, 1263, 3, 166, 83, 0, 1263, 1264, 5, 122, 0, 0, 1264, 1265, 3, 148, 74, 0, 1265, 163, 1, 0, 0, 0, 1266, 1267, 5, 128, 0, 0, 1267, 1268, 3, 160, 80, 0, 1268, 1269, 5, 147, 0, 0, 1269, 165, 1, 0, 0, 0, 1270, 1273, 5, 110, 0, 0, 1271, 1273, 3, 168, 84, 0, 1272, 1270, 1, 0, 0, 0, 1272, 1271, 1, 0, 0, 0, 1273, 167, 1, 0, 0, 0, 1274, 1278, 5, 142, 0, 0, 1275, 1277, 3, 170, 85, 0, 1276, 1275, 1, 0, 0, 0, 1277, 1280, 1, 0, 0, 0, 1278, 1276, 1, 0, 0, 0, 1278, 1279, 1, 0, 0, 0, 1279, 1281, 1, 0, 0, 0, 1280, 1278, 1, 0, 0, 0, 1281, 1282, 5, 144, 0, 0, 1282, 169, 1, 0, 0, 0, 1283, 1284, 5, 157, 0, 0, 1284, 1285, 3, 116, 58, 0, 1285, 1286, 5, 147, 0, 0, 1286, 1289, 1, 0, 0, 0, 1287, 1289, 5, 156, 0, 0, 1288, 1283, 1, 0, 0, 0, 1288, 1287, 1, 0, 0, 0, 1289, 171, 1, 0, 0, 0, 1290, 1294, 5, 143, 0, 0, 1291, 1293, 3, 174, 87, 0, 1292, 1291, 1, 0, 0, 0, 1293, 1296, 1, 0, 0, 0, 1294, 1292, 1, 0, 0, 0, 1294, 1295, 1, 0, 0, 0, 1295, 1297, 1, 0, 0, 0, 1296, 1294, 1, 0, 0, 0, 1297, 1298, 5, 0, 0, 1, 1298, 173, 1, 0, 0, 0, 1299, 1300, 5, 159, 0, 0, 1300, 1301, 3, 116, 58, 0, 1301, 1302, 5, 147, 0, 0, 1302, 1305, 1, 0, 0, 0, 1303, 1305, 5, 158, 0, 0, 1304, 1299, 1, 0, 0, 0, 1304, 1303, 1, 0, 0, 0, 1305, 175, 1, 0, 0, 0, 168, 179, 186, 195, 202, 206, 220, 224, 227, 231, 234, 241, 245, 254, 259, 268, 276, 283, 287, 293, 298, 306, 313, 319, 331, 339, 353, 357, 362, 372, 381, 384, 388, 391, 395, 398, 401, 404, 407, 411, 415, 418, 421, 424, 428, 431, 440, 446, 467, 484, 501, 507, 513, 524, 526, 537, 540, 546, 554, 560, 562, 566, 571, 574, 577, 581, 585, 588, 590, 593, 597, 601, 604, 606, 608, 613, 624, 630, 637, 642, 646, 650, 656, 658, 665, 673, 676, 679, 698, 712, 728, 732, 743, 747, 758, 762, 769, 773, 780, 784, 789, 798, 802, 826, 843, 849, 852, 855, 865, 871, 874, 877, 885, 888, 892, 895, 909, 926, 931, 935, 941, 948, 960, 964, 967, 976, 990, 1029, 1037, 1039, 1041, 1049, 1053, 1057, 1065, 1069, 1078, 1082, 1084, 1094, 1105, 1110, 1117, 1130, 1137, 1141, 1153, 1159, 1162, 1169, 1181, 1187, 1191, 1197, 1204, 1213, 1217, 1227, 1229, 1232, 1240, 1245, 1255, 1260, 1272, 1278, 1288, 1294, 1304] \ No newline at end of file +[4, 1, 159, 1311, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 1, 0, 5, 0, 178, 8, 0, 10, 0, 12, 0, 181, 9, 0, 1, 0, 1, 0, 1, 1, 1, 1, 3, 1, 187, 8, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 196, 8, 3, 1, 4, 1, 4, 1, 4, 5, 4, 201, 8, 4, 10, 4, 12, 4, 204, 9, 4, 1, 4, 3, 4, 207, 8, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 221, 8, 5, 1, 6, 1, 6, 3, 6, 225, 8, 6, 1, 6, 3, 6, 228, 8, 6, 1, 7, 1, 7, 3, 7, 232, 8, 7, 1, 7, 3, 7, 235, 8, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 242, 8, 8, 1, 8, 1, 8, 3, 8, 246, 8, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 5, 9, 253, 8, 9, 10, 9, 12, 9, 256, 9, 9, 1, 9, 1, 9, 3, 9, 260, 8, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 3, 10, 269, 8, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 3, 11, 277, 8, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 3, 12, 284, 8, 12, 1, 12, 1, 12, 3, 12, 288, 8, 12, 1, 12, 1, 12, 1, 12, 1, 12, 3, 12, 294, 8, 12, 1, 12, 1, 12, 1, 12, 3, 12, 299, 8, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 307, 8, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 314, 8, 13, 1, 14, 1, 14, 1, 14, 1, 14, 3, 14, 320, 8, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 3, 16, 332, 8, 16, 1, 17, 1, 17, 1, 18, 1, 18, 5, 18, 338, 8, 18, 10, 18, 12, 18, 341, 9, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 5, 20, 352, 8, 20, 10, 20, 12, 20, 355, 9, 20, 1, 20, 3, 20, 358, 8, 20, 1, 21, 1, 21, 1, 21, 3, 21, 363, 8, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 5, 22, 371, 8, 22, 10, 22, 12, 22, 374, 9, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 3, 23, 382, 8, 23, 1, 24, 3, 24, 385, 8, 24, 1, 24, 1, 24, 3, 24, 389, 8, 24, 1, 24, 3, 24, 392, 8, 24, 1, 24, 1, 24, 3, 24, 396, 8, 24, 1, 24, 3, 24, 399, 8, 24, 1, 24, 3, 24, 402, 8, 24, 1, 24, 3, 24, 405, 8, 24, 1, 24, 3, 24, 408, 8, 24, 1, 24, 1, 24, 3, 24, 412, 8, 24, 1, 24, 1, 24, 3, 24, 416, 8, 24, 1, 24, 3, 24, 419, 8, 24, 1, 24, 3, 24, 422, 8, 24, 1, 24, 3, 24, 425, 8, 24, 1, 24, 1, 24, 3, 24, 429, 8, 24, 1, 24, 3, 24, 432, 8, 24, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 26, 3, 26, 441, 8, 26, 1, 27, 1, 27, 1, 27, 1, 28, 3, 28, 447, 8, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 5, 29, 466, 8, 29, 10, 29, 12, 29, 469, 9, 29, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 3, 32, 485, 8, 32, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 36, 3, 36, 502, 8, 36, 1, 36, 1, 36, 1, 36, 1, 36, 3, 36, 508, 8, 36, 1, 36, 1, 36, 1, 36, 1, 36, 3, 36, 514, 8, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 3, 36, 525, 8, 36, 3, 36, 527, 8, 36, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 3, 39, 538, 8, 39, 1, 39, 3, 39, 541, 8, 39, 1, 39, 1, 39, 1, 39, 1, 39, 3, 39, 547, 8, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 3, 39, 555, 8, 39, 1, 39, 1, 39, 1, 39, 1, 39, 5, 39, 561, 8, 39, 10, 39, 12, 39, 564, 9, 39, 1, 40, 3, 40, 567, 8, 40, 1, 40, 1, 40, 1, 40, 3, 40, 572, 8, 40, 1, 40, 3, 40, 575, 8, 40, 1, 40, 3, 40, 578, 8, 40, 1, 40, 1, 40, 3, 40, 582, 8, 40, 1, 40, 1, 40, 3, 40, 586, 8, 40, 1, 40, 3, 40, 589, 8, 40, 3, 40, 591, 8, 40, 1, 40, 3, 40, 594, 8, 40, 1, 40, 1, 40, 3, 40, 598, 8, 40, 1, 40, 1, 40, 3, 40, 602, 8, 40, 1, 40, 3, 40, 605, 8, 40, 3, 40, 607, 8, 40, 3, 40, 609, 8, 40, 1, 41, 1, 41, 1, 41, 3, 41, 614, 8, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 3, 42, 625, 8, 42, 1, 43, 1, 43, 1, 43, 1, 43, 3, 43, 631, 8, 43, 1, 44, 1, 44, 1, 44, 5, 44, 636, 8, 44, 10, 44, 12, 44, 639, 9, 44, 1, 45, 1, 45, 3, 45, 643, 8, 45, 1, 45, 1, 45, 3, 45, 647, 8, 45, 1, 45, 1, 45, 3, 45, 651, 8, 45, 1, 46, 1, 46, 1, 46, 1, 46, 3, 46, 657, 8, 46, 3, 46, 659, 8, 46, 1, 47, 1, 47, 1, 47, 5, 47, 664, 8, 47, 10, 47, 12, 47, 667, 9, 47, 1, 48, 1, 48, 1, 48, 1, 48, 1, 49, 3, 49, 674, 8, 49, 1, 49, 3, 49, 677, 8, 49, 1, 49, 3, 49, 680, 8, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 3, 53, 699, 8, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 3, 54, 713, 8, 54, 1, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 5, 56, 727, 8, 56, 10, 56, 12, 56, 730, 9, 56, 1, 56, 3, 56, 733, 8, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 5, 56, 742, 8, 56, 10, 56, 12, 56, 745, 9, 56, 1, 56, 3, 56, 748, 8, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 5, 56, 757, 8, 56, 10, 56, 12, 56, 760, 9, 56, 1, 56, 3, 56, 763, 8, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 3, 56, 770, 8, 56, 1, 56, 1, 56, 3, 56, 774, 8, 56, 1, 57, 1, 57, 1, 57, 5, 57, 779, 8, 57, 10, 57, 12, 57, 782, 9, 57, 1, 57, 3, 57, 785, 8, 57, 1, 58, 1, 58, 1, 58, 3, 58, 790, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 4, 58, 797, 8, 58, 11, 58, 12, 58, 798, 1, 58, 1, 58, 3, 58, 803, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 827, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 844, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 850, 8, 58, 1, 58, 3, 58, 853, 8, 58, 1, 58, 3, 58, 856, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 866, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 872, 8, 58, 1, 58, 3, 58, 875, 8, 58, 1, 58, 3, 58, 878, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 886, 8, 58, 1, 58, 3, 58, 889, 8, 58, 1, 58, 1, 58, 3, 58, 893, 8, 58, 1, 58, 3, 58, 896, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 910, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 927, 8, 58, 1, 58, 1, 58, 1, 58, 3, 58, 932, 8, 58, 1, 58, 1, 58, 3, 58, 936, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 942, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 949, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 961, 8, 58, 1, 58, 1, 58, 3, 58, 965, 8, 58, 1, 58, 3, 58, 968, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 977, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 991, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 1030, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 1038, 8, 58, 5, 58, 1040, 8, 58, 10, 58, 12, 58, 1043, 9, 58, 1, 59, 1, 59, 1, 59, 5, 59, 1048, 8, 59, 10, 59, 12, 59, 1051, 9, 59, 1, 59, 3, 59, 1054, 8, 59, 1, 60, 1, 60, 3, 60, 1058, 8, 60, 1, 61, 1, 61, 1, 61, 1, 61, 5, 61, 1064, 8, 61, 10, 61, 12, 61, 1067, 9, 61, 1, 61, 3, 61, 1070, 8, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 5, 61, 1077, 8, 61, 10, 61, 12, 61, 1080, 9, 61, 1, 61, 3, 61, 1083, 8, 61, 3, 61, 1085, 8, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 5, 62, 1093, 8, 62, 10, 62, 12, 62, 1096, 9, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 5, 62, 1104, 8, 62, 10, 62, 12, 62, 1107, 9, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 3, 62, 1115, 8, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 3, 62, 1122, 8, 62, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 3, 63, 1135, 8, 63, 1, 64, 1, 64, 1, 64, 5, 64, 1140, 8, 64, 10, 64, 12, 64, 1143, 9, 64, 1, 64, 3, 64, 1146, 8, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 3, 65, 1158, 8, 65, 1, 66, 1, 66, 1, 66, 1, 66, 3, 66, 1164, 8, 66, 1, 66, 3, 66, 1167, 8, 66, 1, 67, 1, 67, 1, 67, 5, 67, 1172, 8, 67, 10, 67, 12, 67, 1175, 9, 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 3, 68, 1186, 8, 68, 1, 68, 1, 68, 1, 68, 1, 68, 3, 68, 1192, 8, 68, 5, 68, 1194, 8, 68, 10, 68, 12, 68, 1197, 9, 68, 1, 69, 1, 69, 1, 69, 3, 69, 1202, 8, 69, 1, 69, 1, 69, 1, 70, 1, 70, 1, 70, 3, 70, 1209, 8, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 71, 5, 71, 1216, 8, 71, 10, 71, 12, 71, 1219, 9, 71, 1, 71, 3, 71, 1222, 8, 71, 1, 72, 1, 72, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 3, 73, 1232, 8, 73, 3, 73, 1234, 8, 73, 1, 74, 3, 74, 1237, 8, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 3, 74, 1245, 8, 74, 1, 75, 1, 75, 1, 75, 3, 75, 1250, 8, 75, 1, 76, 1, 76, 1, 77, 1, 77, 1, 78, 1, 78, 1, 79, 1, 79, 3, 79, 1260, 8, 79, 1, 80, 1, 80, 1, 80, 3, 80, 1265, 8, 80, 1, 81, 1, 81, 1, 81, 1, 81, 1, 82, 1, 82, 1, 82, 1, 82, 1, 83, 1, 83, 3, 83, 1277, 8, 83, 1, 84, 1, 84, 5, 84, 1281, 8, 84, 10, 84, 12, 84, 1284, 9, 84, 1, 84, 1, 84, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 3, 85, 1293, 8, 85, 1, 86, 1, 86, 5, 86, 1297, 8, 86, 10, 86, 12, 86, 1300, 9, 86, 1, 86, 1, 86, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 3, 87, 1309, 8, 87, 1, 87, 0, 3, 78, 116, 136, 88, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 0, 16, 2, 0, 18, 18, 74, 74, 2, 0, 44, 44, 51, 51, 3, 0, 1, 1, 4, 4, 8, 8, 4, 0, 1, 1, 3, 4, 8, 8, 80, 80, 2, 0, 51, 51, 73, 73, 2, 0, 1, 1, 4, 4, 2, 0, 7, 7, 22, 23, 2, 0, 30, 30, 49, 49, 2, 0, 71, 71, 76, 76, 3, 0, 10, 10, 50, 50, 90, 90, 2, 0, 41, 41, 53, 53, 1, 0, 107, 108, 2, 0, 118, 118, 139, 139, 7, 0, 21, 21, 38, 38, 55, 56, 70, 70, 78, 78, 97, 97, 103, 103, 16, 0, 1, 13, 15, 20, 22, 28, 30, 30, 32, 37, 39, 42, 44, 51, 53, 54, 58, 58, 60, 69, 71, 77, 79, 83, 85, 92, 94, 96, 98, 99, 101, 102, 4, 0, 20, 20, 30, 30, 39, 39, 48, 48, 1479, 0, 179, 1, 0, 0, 0, 2, 186, 1, 0, 0, 0, 4, 188, 1, 0, 0, 0, 6, 190, 1, 0, 0, 0, 8, 197, 1, 0, 0, 0, 10, 220, 1, 0, 0, 0, 12, 222, 1, 0, 0, 0, 14, 229, 1, 0, 0, 0, 16, 236, 1, 0, 0, 0, 18, 249, 1, 0, 0, 0, 20, 261, 1, 0, 0, 0, 22, 270, 1, 0, 0, 0, 24, 278, 1, 0, 0, 0, 26, 300, 1, 0, 0, 0, 28, 315, 1, 0, 0, 0, 30, 324, 1, 0, 0, 0, 32, 329, 1, 0, 0, 0, 34, 333, 1, 0, 0, 0, 36, 335, 1, 0, 0, 0, 38, 344, 1, 0, 0, 0, 40, 348, 1, 0, 0, 0, 42, 362, 1, 0, 0, 0, 44, 366, 1, 0, 0, 0, 46, 381, 1, 0, 0, 0, 48, 384, 1, 0, 0, 0, 50, 433, 1, 0, 0, 0, 52, 436, 1, 0, 0, 0, 54, 442, 1, 0, 0, 0, 56, 446, 1, 0, 0, 0, 58, 452, 1, 0, 0, 0, 60, 470, 1, 0, 0, 0, 62, 473, 1, 0, 0, 0, 64, 476, 1, 0, 0, 0, 66, 486, 1, 0, 0, 0, 68, 489, 1, 0, 0, 0, 70, 493, 1, 0, 0, 0, 72, 526, 1, 0, 0, 0, 74, 528, 1, 0, 0, 0, 76, 531, 1, 0, 0, 0, 78, 546, 1, 0, 0, 0, 80, 608, 1, 0, 0, 0, 82, 613, 1, 0, 0, 0, 84, 624, 1, 0, 0, 0, 86, 626, 1, 0, 0, 0, 88, 632, 1, 0, 0, 0, 90, 640, 1, 0, 0, 0, 92, 658, 1, 0, 0, 0, 94, 660, 1, 0, 0, 0, 96, 668, 1, 0, 0, 0, 98, 673, 1, 0, 0, 0, 100, 681, 1, 0, 0, 0, 102, 685, 1, 0, 0, 0, 104, 689, 1, 0, 0, 0, 106, 698, 1, 0, 0, 0, 108, 712, 1, 0, 0, 0, 110, 714, 1, 0, 0, 0, 112, 773, 1, 0, 0, 0, 114, 775, 1, 0, 0, 0, 116, 935, 1, 0, 0, 0, 118, 1044, 1, 0, 0, 0, 120, 1057, 1, 0, 0, 0, 122, 1084, 1, 0, 0, 0, 124, 1121, 1, 0, 0, 0, 126, 1134, 1, 0, 0, 0, 128, 1136, 1, 0, 0, 0, 130, 1157, 1, 0, 0, 0, 132, 1166, 1, 0, 0, 0, 134, 1168, 1, 0, 0, 0, 136, 1185, 1, 0, 0, 0, 138, 1198, 1, 0, 0, 0, 140, 1208, 1, 0, 0, 0, 142, 1212, 1, 0, 0, 0, 144, 1223, 1, 0, 0, 0, 146, 1233, 1, 0, 0, 0, 148, 1236, 1, 0, 0, 0, 150, 1249, 1, 0, 0, 0, 152, 1251, 1, 0, 0, 0, 154, 1253, 1, 0, 0, 0, 156, 1255, 1, 0, 0, 0, 158, 1259, 1, 0, 0, 0, 160, 1264, 1, 0, 0, 0, 162, 1266, 1, 0, 0, 0, 164, 1270, 1, 0, 0, 0, 166, 1276, 1, 0, 0, 0, 168, 1278, 1, 0, 0, 0, 170, 1292, 1, 0, 0, 0, 172, 1294, 1, 0, 0, 0, 174, 1308, 1, 0, 0, 0, 176, 178, 3, 2, 1, 0, 177, 176, 1, 0, 0, 0, 178, 181, 1, 0, 0, 0, 179, 177, 1, 0, 0, 0, 179, 180, 1, 0, 0, 0, 180, 182, 1, 0, 0, 0, 181, 179, 1, 0, 0, 0, 182, 183, 5, 0, 0, 1, 183, 1, 1, 0, 0, 0, 184, 187, 3, 6, 3, 0, 185, 187, 3, 10, 5, 0, 186, 184, 1, 0, 0, 0, 186, 185, 1, 0, 0, 0, 187, 3, 1, 0, 0, 0, 188, 189, 3, 116, 58, 0, 189, 5, 1, 0, 0, 0, 190, 191, 5, 52, 0, 0, 191, 195, 3, 160, 80, 0, 192, 193, 5, 115, 0, 0, 193, 194, 5, 122, 0, 0, 194, 196, 3, 4, 2, 0, 195, 192, 1, 0, 0, 0, 195, 196, 1, 0, 0, 0, 196, 7, 1, 0, 0, 0, 197, 202, 3, 160, 80, 0, 198, 199, 5, 116, 0, 0, 199, 201, 3, 160, 80, 0, 200, 198, 1, 0, 0, 0, 201, 204, 1, 0, 0, 0, 202, 200, 1, 0, 0, 0, 202, 203, 1, 0, 0, 0, 203, 206, 1, 0, 0, 0, 204, 202, 1, 0, 0, 0, 205, 207, 5, 116, 0, 0, 206, 205, 1, 0, 0, 0, 206, 207, 1, 0, 0, 0, 207, 9, 1, 0, 0, 0, 208, 221, 3, 12, 6, 0, 209, 221, 3, 14, 7, 0, 210, 221, 3, 18, 9, 0, 211, 221, 3, 20, 10, 0, 212, 221, 3, 22, 11, 0, 213, 221, 3, 26, 13, 0, 214, 221, 3, 24, 12, 0, 215, 221, 3, 28, 14, 0, 216, 221, 3, 30, 15, 0, 217, 221, 3, 36, 18, 0, 218, 221, 3, 32, 16, 0, 219, 221, 3, 34, 17, 0, 220, 208, 1, 0, 0, 0, 220, 209, 1, 0, 0, 0, 220, 210, 1, 0, 0, 0, 220, 211, 1, 0, 0, 0, 220, 212, 1, 0, 0, 0, 220, 213, 1, 0, 0, 0, 220, 214, 1, 0, 0, 0, 220, 215, 1, 0, 0, 0, 220, 216, 1, 0, 0, 0, 220, 217, 1, 0, 0, 0, 220, 218, 1, 0, 0, 0, 220, 219, 1, 0, 0, 0, 221, 11, 1, 0, 0, 0, 222, 224, 5, 72, 0, 0, 223, 225, 3, 4, 2, 0, 224, 223, 1, 0, 0, 0, 224, 225, 1, 0, 0, 0, 225, 227, 1, 0, 0, 0, 226, 228, 5, 150, 0, 0, 227, 226, 1, 0, 0, 0, 227, 228, 1, 0, 0, 0, 228, 13, 1, 0, 0, 0, 229, 231, 5, 84, 0, 0, 230, 232, 3, 4, 2, 0, 231, 230, 1, 0, 0, 0, 231, 232, 1, 0, 0, 0, 232, 234, 1, 0, 0, 0, 233, 235, 5, 150, 0, 0, 234, 233, 1, 0, 0, 0, 234, 235, 1, 0, 0, 0, 235, 15, 1, 0, 0, 0, 236, 245, 5, 14, 0, 0, 237, 238, 5, 130, 0, 0, 238, 241, 3, 160, 80, 0, 239, 240, 5, 115, 0, 0, 240, 242, 3, 160, 80, 0, 241, 239, 1, 0, 0, 0, 241, 242, 1, 0, 0, 0, 242, 243, 1, 0, 0, 0, 243, 244, 5, 149, 0, 0, 244, 246, 1, 0, 0, 0, 245, 237, 1, 0, 0, 0, 245, 246, 1, 0, 0, 0, 246, 247, 1, 0, 0, 0, 247, 248, 3, 36, 18, 0, 248, 17, 1, 0, 0, 0, 249, 250, 5, 93, 0, 0, 250, 254, 3, 36, 18, 0, 251, 253, 3, 16, 8, 0, 252, 251, 1, 0, 0, 0, 253, 256, 1, 0, 0, 0, 254, 252, 1, 0, 0, 0, 254, 255, 1, 0, 0, 0, 255, 259, 1, 0, 0, 0, 256, 254, 1, 0, 0, 0, 257, 258, 5, 29, 0, 0, 258, 260, 3, 36, 18, 0, 259, 257, 1, 0, 0, 0, 259, 260, 1, 0, 0, 0, 260, 19, 1, 0, 0, 0, 261, 262, 5, 40, 0, 0, 262, 263, 5, 130, 0, 0, 263, 264, 3, 4, 2, 0, 264, 265, 5, 149, 0, 0, 265, 268, 3, 10, 5, 0, 266, 267, 5, 25, 0, 0, 267, 269, 3, 10, 5, 0, 268, 266, 1, 0, 0, 0, 268, 269, 1, 0, 0, 0, 269, 21, 1, 0, 0, 0, 270, 271, 5, 100, 0, 0, 271, 272, 5, 130, 0, 0, 272, 273, 3, 4, 2, 0, 273, 274, 5, 149, 0, 0, 274, 276, 3, 10, 5, 0, 275, 277, 5, 150, 0, 0, 276, 275, 1, 0, 0, 0, 276, 277, 1, 0, 0, 0, 277, 23, 1, 0, 0, 0, 278, 279, 5, 33, 0, 0, 279, 283, 5, 130, 0, 0, 280, 284, 3, 6, 3, 0, 281, 284, 3, 30, 15, 0, 282, 284, 3, 4, 2, 0, 283, 280, 1, 0, 0, 0, 283, 281, 1, 0, 0, 0, 283, 282, 1, 0, 0, 0, 283, 284, 1, 0, 0, 0, 284, 285, 1, 0, 0, 0, 285, 287, 5, 150, 0, 0, 286, 288, 3, 4, 2, 0, 287, 286, 1, 0, 0, 0, 287, 288, 1, 0, 0, 0, 288, 289, 1, 0, 0, 0, 289, 293, 5, 150, 0, 0, 290, 294, 3, 6, 3, 0, 291, 294, 3, 30, 15, 0, 292, 294, 3, 4, 2, 0, 293, 290, 1, 0, 0, 0, 293, 291, 1, 0, 0, 0, 293, 292, 1, 0, 0, 0, 293, 294, 1, 0, 0, 0, 294, 295, 1, 0, 0, 0, 295, 296, 5, 149, 0, 0, 296, 298, 3, 10, 5, 0, 297, 299, 5, 150, 0, 0, 298, 297, 1, 0, 0, 0, 298, 299, 1, 0, 0, 0, 299, 25, 1, 0, 0, 0, 300, 301, 5, 33, 0, 0, 301, 302, 5, 130, 0, 0, 302, 303, 5, 52, 0, 0, 303, 306, 3, 160, 80, 0, 304, 305, 5, 116, 0, 0, 305, 307, 3, 160, 80, 0, 306, 304, 1, 0, 0, 0, 306, 307, 1, 0, 0, 0, 307, 308, 1, 0, 0, 0, 308, 309, 5, 42, 0, 0, 309, 310, 3, 4, 2, 0, 310, 311, 5, 149, 0, 0, 311, 313, 3, 10, 5, 0, 312, 314, 5, 150, 0, 0, 313, 312, 1, 0, 0, 0, 313, 314, 1, 0, 0, 0, 314, 27, 1, 0, 0, 0, 315, 316, 5, 31, 0, 0, 316, 317, 3, 160, 80, 0, 317, 319, 5, 130, 0, 0, 318, 320, 3, 8, 4, 0, 319, 318, 1, 0, 0, 0, 319, 320, 1, 0, 0, 0, 320, 321, 1, 0, 0, 0, 321, 322, 5, 149, 0, 0, 322, 323, 3, 36, 18, 0, 323, 29, 1, 0, 0, 0, 324, 325, 3, 4, 2, 0, 325, 326, 5, 115, 0, 0, 326, 327, 5, 122, 0, 0, 327, 328, 3, 4, 2, 0, 328, 31, 1, 0, 0, 0, 329, 331, 3, 4, 2, 0, 330, 332, 5, 150, 0, 0, 331, 330, 1, 0, 0, 0, 331, 332, 1, 0, 0, 0, 332, 33, 1, 0, 0, 0, 333, 334, 5, 150, 0, 0, 334, 35, 1, 0, 0, 0, 335, 339, 5, 128, 0, 0, 336, 338, 3, 2, 1, 0, 337, 336, 1, 0, 0, 0, 338, 341, 1, 0, 0, 0, 339, 337, 1, 0, 0, 0, 339, 340, 1, 0, 0, 0, 340, 342, 1, 0, 0, 0, 341, 339, 1, 0, 0, 0, 342, 343, 5, 147, 0, 0, 343, 37, 1, 0, 0, 0, 344, 345, 3, 4, 2, 0, 345, 346, 5, 115, 0, 0, 346, 347, 3, 4, 2, 0, 347, 39, 1, 0, 0, 0, 348, 353, 3, 38, 19, 0, 349, 350, 5, 116, 0, 0, 350, 352, 3, 38, 19, 0, 351, 349, 1, 0, 0, 0, 352, 355, 1, 0, 0, 0, 353, 351, 1, 0, 0, 0, 353, 354, 1, 0, 0, 0, 354, 357, 1, 0, 0, 0, 355, 353, 1, 0, 0, 0, 356, 358, 5, 116, 0, 0, 357, 356, 1, 0, 0, 0, 357, 358, 1, 0, 0, 0, 358, 41, 1, 0, 0, 0, 359, 363, 3, 44, 22, 0, 360, 363, 3, 48, 24, 0, 361, 363, 3, 124, 62, 0, 362, 359, 1, 0, 0, 0, 362, 360, 1, 0, 0, 0, 362, 361, 1, 0, 0, 0, 363, 364, 1, 0, 0, 0, 364, 365, 5, 0, 0, 1, 365, 43, 1, 0, 0, 0, 366, 372, 3, 46, 23, 0, 367, 368, 5, 95, 0, 0, 368, 369, 5, 1, 0, 0, 369, 371, 3, 46, 23, 0, 370, 367, 1, 0, 0, 0, 371, 374, 1, 0, 0, 0, 372, 370, 1, 0, 0, 0, 372, 373, 1, 0, 0, 0, 373, 45, 1, 0, 0, 0, 374, 372, 1, 0, 0, 0, 375, 382, 3, 48, 24, 0, 376, 377, 5, 130, 0, 0, 377, 378, 3, 44, 22, 0, 378, 379, 5, 149, 0, 0, 379, 382, 1, 0, 0, 0, 380, 382, 3, 164, 82, 0, 381, 375, 1, 0, 0, 0, 381, 376, 1, 0, 0, 0, 381, 380, 1, 0, 0, 0, 382, 47, 1, 0, 0, 0, 383, 385, 3, 50, 25, 0, 384, 383, 1, 0, 0, 0, 384, 385, 1, 0, 0, 0, 385, 386, 1, 0, 0, 0, 386, 388, 5, 79, 0, 0, 387, 389, 5, 24, 0, 0, 388, 387, 1, 0, 0, 0, 388, 389, 1, 0, 0, 0, 389, 391, 1, 0, 0, 0, 390, 392, 3, 52, 26, 0, 391, 390, 1, 0, 0, 0, 391, 392, 1, 0, 0, 0, 392, 393, 1, 0, 0, 0, 393, 395, 3, 114, 57, 0, 394, 396, 3, 54, 27, 0, 395, 394, 1, 0, 0, 0, 395, 396, 1, 0, 0, 0, 396, 398, 1, 0, 0, 0, 397, 399, 3, 56, 28, 0, 398, 397, 1, 0, 0, 0, 398, 399, 1, 0, 0, 0, 399, 401, 1, 0, 0, 0, 400, 402, 3, 60, 30, 0, 401, 400, 1, 0, 0, 0, 401, 402, 1, 0, 0, 0, 402, 404, 1, 0, 0, 0, 403, 405, 3, 62, 31, 0, 404, 403, 1, 0, 0, 0, 404, 405, 1, 0, 0, 0, 405, 407, 1, 0, 0, 0, 406, 408, 3, 64, 32, 0, 407, 406, 1, 0, 0, 0, 407, 408, 1, 0, 0, 0, 408, 411, 1, 0, 0, 0, 409, 410, 5, 102, 0, 0, 410, 412, 7, 0, 0, 0, 411, 409, 1, 0, 0, 0, 411, 412, 1, 0, 0, 0, 412, 415, 1, 0, 0, 0, 413, 414, 5, 102, 0, 0, 414, 416, 5, 89, 0, 0, 415, 413, 1, 0, 0, 0, 415, 416, 1, 0, 0, 0, 416, 418, 1, 0, 0, 0, 417, 419, 3, 66, 33, 0, 418, 417, 1, 0, 0, 0, 418, 419, 1, 0, 0, 0, 419, 421, 1, 0, 0, 0, 420, 422, 3, 58, 29, 0, 421, 420, 1, 0, 0, 0, 421, 422, 1, 0, 0, 0, 422, 424, 1, 0, 0, 0, 423, 425, 3, 68, 34, 0, 424, 423, 1, 0, 0, 0, 424, 425, 1, 0, 0, 0, 425, 428, 1, 0, 0, 0, 426, 429, 3, 72, 36, 0, 427, 429, 3, 74, 37, 0, 428, 426, 1, 0, 0, 0, 428, 427, 1, 0, 0, 0, 428, 429, 1, 0, 0, 0, 429, 431, 1, 0, 0, 0, 430, 432, 3, 76, 38, 0, 431, 430, 1, 0, 0, 0, 431, 432, 1, 0, 0, 0, 432, 49, 1, 0, 0, 0, 433, 434, 5, 102, 0, 0, 434, 435, 3, 128, 64, 0, 435, 51, 1, 0, 0, 0, 436, 437, 5, 88, 0, 0, 437, 440, 5, 108, 0, 0, 438, 439, 5, 102, 0, 0, 439, 441, 5, 85, 0, 0, 440, 438, 1, 0, 0, 0, 440, 441, 1, 0, 0, 0, 441, 53, 1, 0, 0, 0, 442, 443, 5, 34, 0, 0, 443, 444, 3, 78, 39, 0, 444, 55, 1, 0, 0, 0, 445, 447, 7, 1, 0, 0, 446, 445, 1, 0, 0, 0, 446, 447, 1, 0, 0, 0, 447, 448, 1, 0, 0, 0, 448, 449, 5, 5, 0, 0, 449, 450, 5, 47, 0, 0, 450, 451, 3, 114, 57, 0, 451, 57, 1, 0, 0, 0, 452, 453, 5, 101, 0, 0, 453, 454, 3, 160, 80, 0, 454, 455, 5, 6, 0, 0, 455, 456, 5, 130, 0, 0, 456, 457, 3, 98, 49, 0, 457, 467, 5, 149, 0, 0, 458, 459, 5, 116, 0, 0, 459, 460, 3, 160, 80, 0, 460, 461, 5, 6, 0, 0, 461, 462, 5, 130, 0, 0, 462, 463, 3, 98, 49, 0, 463, 464, 5, 149, 0, 0, 464, 466, 1, 0, 0, 0, 465, 458, 1, 0, 0, 0, 466, 469, 1, 0, 0, 0, 467, 465, 1, 0, 0, 0, 467, 468, 1, 0, 0, 0, 468, 59, 1, 0, 0, 0, 469, 467, 1, 0, 0, 0, 470, 471, 5, 69, 0, 0, 471, 472, 3, 116, 58, 0, 472, 61, 1, 0, 0, 0, 473, 474, 5, 99, 0, 0, 474, 475, 3, 116, 58, 0, 475, 63, 1, 0, 0, 0, 476, 477, 5, 36, 0, 0, 477, 484, 5, 11, 0, 0, 478, 479, 7, 0, 0, 0, 479, 480, 5, 130, 0, 0, 480, 481, 3, 114, 57, 0, 481, 482, 5, 149, 0, 0, 482, 485, 1, 0, 0, 0, 483, 485, 3, 114, 57, 0, 484, 478, 1, 0, 0, 0, 484, 483, 1, 0, 0, 0, 485, 65, 1, 0, 0, 0, 486, 487, 5, 37, 0, 0, 487, 488, 3, 116, 58, 0, 488, 67, 1, 0, 0, 0, 489, 490, 5, 64, 0, 0, 490, 491, 5, 11, 0, 0, 491, 492, 3, 88, 44, 0, 492, 69, 1, 0, 0, 0, 493, 494, 5, 64, 0, 0, 494, 495, 5, 11, 0, 0, 495, 496, 3, 114, 57, 0, 496, 71, 1, 0, 0, 0, 497, 498, 5, 54, 0, 0, 498, 501, 3, 116, 58, 0, 499, 500, 5, 116, 0, 0, 500, 502, 3, 116, 58, 0, 501, 499, 1, 0, 0, 0, 501, 502, 1, 0, 0, 0, 502, 507, 1, 0, 0, 0, 503, 504, 5, 102, 0, 0, 504, 508, 5, 85, 0, 0, 505, 506, 5, 11, 0, 0, 506, 508, 3, 114, 57, 0, 507, 503, 1, 0, 0, 0, 507, 505, 1, 0, 0, 0, 507, 508, 1, 0, 0, 0, 508, 527, 1, 0, 0, 0, 509, 510, 5, 54, 0, 0, 510, 513, 3, 116, 58, 0, 511, 512, 5, 102, 0, 0, 512, 514, 5, 85, 0, 0, 513, 511, 1, 0, 0, 0, 513, 514, 1, 0, 0, 0, 514, 515, 1, 0, 0, 0, 515, 516, 5, 61, 0, 0, 516, 517, 3, 116, 58, 0, 517, 527, 1, 0, 0, 0, 518, 519, 5, 54, 0, 0, 519, 520, 3, 116, 58, 0, 520, 521, 5, 61, 0, 0, 521, 524, 3, 116, 58, 0, 522, 523, 5, 11, 0, 0, 523, 525, 3, 114, 57, 0, 524, 522, 1, 0, 0, 0, 524, 525, 1, 0, 0, 0, 525, 527, 1, 0, 0, 0, 526, 497, 1, 0, 0, 0, 526, 509, 1, 0, 0, 0, 526, 518, 1, 0, 0, 0, 527, 73, 1, 0, 0, 0, 528, 529, 5, 61, 0, 0, 529, 530, 3, 116, 58, 0, 530, 75, 1, 0, 0, 0, 531, 532, 5, 81, 0, 0, 532, 533, 3, 94, 47, 0, 533, 77, 1, 0, 0, 0, 534, 535, 6, 39, -1, 0, 535, 537, 3, 136, 68, 0, 536, 538, 5, 28, 0, 0, 537, 536, 1, 0, 0, 0, 537, 538, 1, 0, 0, 0, 538, 540, 1, 0, 0, 0, 539, 541, 3, 86, 43, 0, 540, 539, 1, 0, 0, 0, 540, 541, 1, 0, 0, 0, 541, 547, 1, 0, 0, 0, 542, 543, 5, 130, 0, 0, 543, 544, 3, 78, 39, 0, 544, 545, 5, 149, 0, 0, 545, 547, 1, 0, 0, 0, 546, 534, 1, 0, 0, 0, 546, 542, 1, 0, 0, 0, 547, 562, 1, 0, 0, 0, 548, 549, 10, 3, 0, 0, 549, 550, 3, 82, 41, 0, 550, 551, 3, 78, 39, 4, 551, 561, 1, 0, 0, 0, 552, 554, 10, 4, 0, 0, 553, 555, 3, 80, 40, 0, 554, 553, 1, 0, 0, 0, 554, 555, 1, 0, 0, 0, 555, 556, 1, 0, 0, 0, 556, 557, 5, 47, 0, 0, 557, 558, 3, 78, 39, 0, 558, 559, 3, 84, 42, 0, 559, 561, 1, 0, 0, 0, 560, 548, 1, 0, 0, 0, 560, 552, 1, 0, 0, 0, 561, 564, 1, 0, 0, 0, 562, 560, 1, 0, 0, 0, 562, 563, 1, 0, 0, 0, 563, 79, 1, 0, 0, 0, 564, 562, 1, 0, 0, 0, 565, 567, 7, 2, 0, 0, 566, 565, 1, 0, 0, 0, 566, 567, 1, 0, 0, 0, 567, 568, 1, 0, 0, 0, 568, 575, 5, 44, 0, 0, 569, 571, 5, 44, 0, 0, 570, 572, 7, 2, 0, 0, 571, 570, 1, 0, 0, 0, 571, 572, 1, 0, 0, 0, 572, 575, 1, 0, 0, 0, 573, 575, 7, 2, 0, 0, 574, 566, 1, 0, 0, 0, 574, 569, 1, 0, 0, 0, 574, 573, 1, 0, 0, 0, 575, 609, 1, 0, 0, 0, 576, 578, 7, 3, 0, 0, 577, 576, 1, 0, 0, 0, 577, 578, 1, 0, 0, 0, 578, 579, 1, 0, 0, 0, 579, 581, 7, 4, 0, 0, 580, 582, 5, 65, 0, 0, 581, 580, 1, 0, 0, 0, 581, 582, 1, 0, 0, 0, 582, 591, 1, 0, 0, 0, 583, 585, 7, 4, 0, 0, 584, 586, 5, 65, 0, 0, 585, 584, 1, 0, 0, 0, 585, 586, 1, 0, 0, 0, 586, 588, 1, 0, 0, 0, 587, 589, 7, 3, 0, 0, 588, 587, 1, 0, 0, 0, 588, 589, 1, 0, 0, 0, 589, 591, 1, 0, 0, 0, 590, 577, 1, 0, 0, 0, 590, 583, 1, 0, 0, 0, 591, 609, 1, 0, 0, 0, 592, 594, 7, 5, 0, 0, 593, 592, 1, 0, 0, 0, 593, 594, 1, 0, 0, 0, 594, 595, 1, 0, 0, 0, 595, 597, 5, 35, 0, 0, 596, 598, 5, 65, 0, 0, 597, 596, 1, 0, 0, 0, 597, 598, 1, 0, 0, 0, 598, 607, 1, 0, 0, 0, 599, 601, 5, 35, 0, 0, 600, 602, 5, 65, 0, 0, 601, 600, 1, 0, 0, 0, 601, 602, 1, 0, 0, 0, 602, 604, 1, 0, 0, 0, 603, 605, 7, 5, 0, 0, 604, 603, 1, 0, 0, 0, 604, 605, 1, 0, 0, 0, 605, 607, 1, 0, 0, 0, 606, 593, 1, 0, 0, 0, 606, 599, 1, 0, 0, 0, 607, 609, 1, 0, 0, 0, 608, 574, 1, 0, 0, 0, 608, 590, 1, 0, 0, 0, 608, 606, 1, 0, 0, 0, 609, 81, 1, 0, 0, 0, 610, 611, 5, 17, 0, 0, 611, 614, 5, 47, 0, 0, 612, 614, 5, 116, 0, 0, 613, 610, 1, 0, 0, 0, 613, 612, 1, 0, 0, 0, 614, 83, 1, 0, 0, 0, 615, 616, 5, 62, 0, 0, 616, 625, 3, 114, 57, 0, 617, 618, 5, 96, 0, 0, 618, 619, 5, 130, 0, 0, 619, 620, 3, 114, 57, 0, 620, 621, 5, 149, 0, 0, 621, 625, 1, 0, 0, 0, 622, 623, 5, 96, 0, 0, 623, 625, 3, 114, 57, 0, 624, 615, 1, 0, 0, 0, 624, 617, 1, 0, 0, 0, 624, 622, 1, 0, 0, 0, 625, 85, 1, 0, 0, 0, 626, 627, 5, 77, 0, 0, 627, 630, 3, 92, 46, 0, 628, 629, 5, 61, 0, 0, 629, 631, 3, 92, 46, 0, 630, 628, 1, 0, 0, 0, 630, 631, 1, 0, 0, 0, 631, 87, 1, 0, 0, 0, 632, 637, 3, 90, 45, 0, 633, 634, 5, 116, 0, 0, 634, 636, 3, 90, 45, 0, 635, 633, 1, 0, 0, 0, 636, 639, 1, 0, 0, 0, 637, 635, 1, 0, 0, 0, 637, 638, 1, 0, 0, 0, 638, 89, 1, 0, 0, 0, 639, 637, 1, 0, 0, 0, 640, 642, 3, 116, 58, 0, 641, 643, 7, 6, 0, 0, 642, 641, 1, 0, 0, 0, 642, 643, 1, 0, 0, 0, 643, 646, 1, 0, 0, 0, 644, 645, 5, 60, 0, 0, 645, 647, 7, 7, 0, 0, 646, 644, 1, 0, 0, 0, 646, 647, 1, 0, 0, 0, 647, 650, 1, 0, 0, 0, 648, 649, 5, 16, 0, 0, 649, 651, 5, 110, 0, 0, 650, 648, 1, 0, 0, 0, 650, 651, 1, 0, 0, 0, 651, 91, 1, 0, 0, 0, 652, 659, 3, 164, 82, 0, 653, 656, 3, 148, 74, 0, 654, 655, 5, 151, 0, 0, 655, 657, 3, 148, 74, 0, 656, 654, 1, 0, 0, 0, 656, 657, 1, 0, 0, 0, 657, 659, 1, 0, 0, 0, 658, 652, 1, 0, 0, 0, 658, 653, 1, 0, 0, 0, 659, 93, 1, 0, 0, 0, 660, 665, 3, 96, 48, 0, 661, 662, 5, 116, 0, 0, 662, 664, 3, 96, 48, 0, 663, 661, 1, 0, 0, 0, 664, 667, 1, 0, 0, 0, 665, 663, 1, 0, 0, 0, 665, 666, 1, 0, 0, 0, 666, 95, 1, 0, 0, 0, 667, 665, 1, 0, 0, 0, 668, 669, 3, 160, 80, 0, 669, 670, 5, 122, 0, 0, 670, 671, 3, 150, 75, 0, 671, 97, 1, 0, 0, 0, 672, 674, 3, 100, 50, 0, 673, 672, 1, 0, 0, 0, 673, 674, 1, 0, 0, 0, 674, 676, 1, 0, 0, 0, 675, 677, 3, 102, 51, 0, 676, 675, 1, 0, 0, 0, 676, 677, 1, 0, 0, 0, 677, 679, 1, 0, 0, 0, 678, 680, 3, 104, 52, 0, 679, 678, 1, 0, 0, 0, 679, 680, 1, 0, 0, 0, 680, 99, 1, 0, 0, 0, 681, 682, 5, 67, 0, 0, 682, 683, 5, 11, 0, 0, 683, 684, 3, 114, 57, 0, 684, 101, 1, 0, 0, 0, 685, 686, 5, 64, 0, 0, 686, 687, 5, 11, 0, 0, 687, 688, 3, 88, 44, 0, 688, 103, 1, 0, 0, 0, 689, 690, 7, 8, 0, 0, 690, 691, 3, 106, 53, 0, 691, 105, 1, 0, 0, 0, 692, 699, 3, 108, 54, 0, 693, 694, 5, 9, 0, 0, 694, 695, 3, 108, 54, 0, 695, 696, 5, 2, 0, 0, 696, 697, 3, 108, 54, 0, 697, 699, 1, 0, 0, 0, 698, 692, 1, 0, 0, 0, 698, 693, 1, 0, 0, 0, 699, 107, 1, 0, 0, 0, 700, 701, 5, 19, 0, 0, 701, 713, 5, 75, 0, 0, 702, 703, 5, 94, 0, 0, 703, 713, 5, 68, 0, 0, 704, 705, 5, 94, 0, 0, 705, 713, 5, 32, 0, 0, 706, 707, 3, 148, 74, 0, 707, 708, 5, 68, 0, 0, 708, 713, 1, 0, 0, 0, 709, 710, 3, 148, 74, 0, 710, 711, 5, 32, 0, 0, 711, 713, 1, 0, 0, 0, 712, 700, 1, 0, 0, 0, 712, 702, 1, 0, 0, 0, 712, 704, 1, 0, 0, 0, 712, 706, 1, 0, 0, 0, 712, 709, 1, 0, 0, 0, 713, 109, 1, 0, 0, 0, 714, 715, 3, 116, 58, 0, 715, 716, 5, 0, 0, 1, 716, 111, 1, 0, 0, 0, 717, 774, 3, 160, 80, 0, 718, 719, 3, 160, 80, 0, 719, 720, 5, 130, 0, 0, 720, 721, 3, 160, 80, 0, 721, 728, 3, 112, 56, 0, 722, 723, 5, 116, 0, 0, 723, 724, 3, 160, 80, 0, 724, 725, 3, 112, 56, 0, 725, 727, 1, 0, 0, 0, 726, 722, 1, 0, 0, 0, 727, 730, 1, 0, 0, 0, 728, 726, 1, 0, 0, 0, 728, 729, 1, 0, 0, 0, 729, 732, 1, 0, 0, 0, 730, 728, 1, 0, 0, 0, 731, 733, 5, 116, 0, 0, 732, 731, 1, 0, 0, 0, 732, 733, 1, 0, 0, 0, 733, 734, 1, 0, 0, 0, 734, 735, 5, 149, 0, 0, 735, 774, 1, 0, 0, 0, 736, 737, 3, 160, 80, 0, 737, 738, 5, 130, 0, 0, 738, 743, 3, 162, 81, 0, 739, 740, 5, 116, 0, 0, 740, 742, 3, 162, 81, 0, 741, 739, 1, 0, 0, 0, 742, 745, 1, 0, 0, 0, 743, 741, 1, 0, 0, 0, 743, 744, 1, 0, 0, 0, 744, 747, 1, 0, 0, 0, 745, 743, 1, 0, 0, 0, 746, 748, 5, 116, 0, 0, 747, 746, 1, 0, 0, 0, 747, 748, 1, 0, 0, 0, 748, 749, 1, 0, 0, 0, 749, 750, 5, 149, 0, 0, 750, 774, 1, 0, 0, 0, 751, 752, 3, 160, 80, 0, 752, 753, 5, 130, 0, 0, 753, 758, 3, 112, 56, 0, 754, 755, 5, 116, 0, 0, 755, 757, 3, 112, 56, 0, 756, 754, 1, 0, 0, 0, 757, 760, 1, 0, 0, 0, 758, 756, 1, 0, 0, 0, 758, 759, 1, 0, 0, 0, 759, 762, 1, 0, 0, 0, 760, 758, 1, 0, 0, 0, 761, 763, 5, 116, 0, 0, 762, 761, 1, 0, 0, 0, 762, 763, 1, 0, 0, 0, 763, 764, 1, 0, 0, 0, 764, 765, 5, 149, 0, 0, 765, 774, 1, 0, 0, 0, 766, 767, 3, 160, 80, 0, 767, 769, 5, 130, 0, 0, 768, 770, 3, 114, 57, 0, 769, 768, 1, 0, 0, 0, 769, 770, 1, 0, 0, 0, 770, 771, 1, 0, 0, 0, 771, 772, 5, 149, 0, 0, 772, 774, 1, 0, 0, 0, 773, 717, 1, 0, 0, 0, 773, 718, 1, 0, 0, 0, 773, 736, 1, 0, 0, 0, 773, 751, 1, 0, 0, 0, 773, 766, 1, 0, 0, 0, 774, 113, 1, 0, 0, 0, 775, 780, 3, 116, 58, 0, 776, 777, 5, 116, 0, 0, 777, 779, 3, 116, 58, 0, 778, 776, 1, 0, 0, 0, 779, 782, 1, 0, 0, 0, 780, 778, 1, 0, 0, 0, 780, 781, 1, 0, 0, 0, 781, 784, 1, 0, 0, 0, 782, 780, 1, 0, 0, 0, 783, 785, 5, 116, 0, 0, 784, 783, 1, 0, 0, 0, 784, 785, 1, 0, 0, 0, 785, 115, 1, 0, 0, 0, 786, 787, 6, 58, -1, 0, 787, 789, 5, 12, 0, 0, 788, 790, 3, 116, 58, 0, 789, 788, 1, 0, 0, 0, 789, 790, 1, 0, 0, 0, 790, 796, 1, 0, 0, 0, 791, 792, 5, 98, 0, 0, 792, 793, 3, 116, 58, 0, 793, 794, 5, 83, 0, 0, 794, 795, 3, 116, 58, 0, 795, 797, 1, 0, 0, 0, 796, 791, 1, 0, 0, 0, 797, 798, 1, 0, 0, 0, 798, 796, 1, 0, 0, 0, 798, 799, 1, 0, 0, 0, 799, 802, 1, 0, 0, 0, 800, 801, 5, 25, 0, 0, 801, 803, 3, 116, 58, 0, 802, 800, 1, 0, 0, 0, 802, 803, 1, 0, 0, 0, 803, 804, 1, 0, 0, 0, 804, 805, 5, 26, 0, 0, 805, 936, 1, 0, 0, 0, 806, 807, 5, 13, 0, 0, 807, 808, 5, 130, 0, 0, 808, 809, 3, 116, 58, 0, 809, 810, 5, 6, 0, 0, 810, 811, 3, 112, 56, 0, 811, 812, 5, 149, 0, 0, 812, 936, 1, 0, 0, 0, 813, 814, 5, 20, 0, 0, 814, 936, 5, 110, 0, 0, 815, 816, 5, 45, 0, 0, 816, 817, 3, 116, 58, 0, 817, 818, 3, 152, 76, 0, 818, 936, 1, 0, 0, 0, 819, 820, 5, 82, 0, 0, 820, 821, 5, 130, 0, 0, 821, 822, 3, 116, 58, 0, 822, 823, 5, 34, 0, 0, 823, 826, 3, 116, 58, 0, 824, 825, 5, 33, 0, 0, 825, 827, 3, 116, 58, 0, 826, 824, 1, 0, 0, 0, 826, 827, 1, 0, 0, 0, 827, 828, 1, 0, 0, 0, 828, 829, 5, 149, 0, 0, 829, 936, 1, 0, 0, 0, 830, 831, 5, 86, 0, 0, 831, 936, 5, 110, 0, 0, 832, 833, 5, 91, 0, 0, 833, 834, 5, 130, 0, 0, 834, 835, 7, 9, 0, 0, 835, 836, 3, 166, 83, 0, 836, 837, 5, 34, 0, 0, 837, 838, 3, 116, 58, 0, 838, 839, 5, 149, 0, 0, 839, 936, 1, 0, 0, 0, 840, 841, 3, 160, 80, 0, 841, 843, 5, 130, 0, 0, 842, 844, 3, 114, 57, 0, 843, 842, 1, 0, 0, 0, 843, 844, 1, 0, 0, 0, 844, 845, 1, 0, 0, 0, 845, 846, 5, 149, 0, 0, 846, 855, 1, 0, 0, 0, 847, 849, 5, 130, 0, 0, 848, 850, 5, 24, 0, 0, 849, 848, 1, 0, 0, 0, 849, 850, 1, 0, 0, 0, 850, 852, 1, 0, 0, 0, 851, 853, 3, 118, 59, 0, 852, 851, 1, 0, 0, 0, 852, 853, 1, 0, 0, 0, 853, 854, 1, 0, 0, 0, 854, 856, 5, 149, 0, 0, 855, 847, 1, 0, 0, 0, 855, 856, 1, 0, 0, 0, 856, 857, 1, 0, 0, 0, 857, 858, 5, 66, 0, 0, 858, 859, 5, 130, 0, 0, 859, 860, 3, 98, 49, 0, 860, 861, 5, 149, 0, 0, 861, 936, 1, 0, 0, 0, 862, 863, 3, 160, 80, 0, 863, 865, 5, 130, 0, 0, 864, 866, 3, 114, 57, 0, 865, 864, 1, 0, 0, 0, 865, 866, 1, 0, 0, 0, 866, 867, 1, 0, 0, 0, 867, 868, 5, 149, 0, 0, 868, 877, 1, 0, 0, 0, 869, 871, 5, 130, 0, 0, 870, 872, 5, 24, 0, 0, 871, 870, 1, 0, 0, 0, 871, 872, 1, 0, 0, 0, 872, 874, 1, 0, 0, 0, 873, 875, 3, 118, 59, 0, 874, 873, 1, 0, 0, 0, 874, 875, 1, 0, 0, 0, 875, 876, 1, 0, 0, 0, 876, 878, 5, 149, 0, 0, 877, 869, 1, 0, 0, 0, 877, 878, 1, 0, 0, 0, 878, 879, 1, 0, 0, 0, 879, 880, 5, 66, 0, 0, 880, 881, 3, 160, 80, 0, 881, 936, 1, 0, 0, 0, 882, 888, 3, 160, 80, 0, 883, 885, 5, 130, 0, 0, 884, 886, 3, 114, 57, 0, 885, 884, 1, 0, 0, 0, 885, 886, 1, 0, 0, 0, 886, 887, 1, 0, 0, 0, 887, 889, 5, 149, 0, 0, 888, 883, 1, 0, 0, 0, 888, 889, 1, 0, 0, 0, 889, 890, 1, 0, 0, 0, 890, 892, 5, 130, 0, 0, 891, 893, 5, 24, 0, 0, 892, 891, 1, 0, 0, 0, 892, 893, 1, 0, 0, 0, 893, 895, 1, 0, 0, 0, 894, 896, 3, 118, 59, 0, 895, 894, 1, 0, 0, 0, 895, 896, 1, 0, 0, 0, 896, 897, 1, 0, 0, 0, 897, 898, 5, 149, 0, 0, 898, 936, 1, 0, 0, 0, 899, 936, 3, 124, 62, 0, 900, 936, 3, 168, 84, 0, 901, 936, 3, 150, 75, 0, 902, 903, 5, 118, 0, 0, 903, 936, 3, 116, 58, 19, 904, 905, 5, 58, 0, 0, 905, 936, 3, 116, 58, 13, 906, 907, 3, 140, 70, 0, 907, 908, 5, 120, 0, 0, 908, 910, 1, 0, 0, 0, 909, 906, 1, 0, 0, 0, 909, 910, 1, 0, 0, 0, 910, 911, 1, 0, 0, 0, 911, 936, 5, 112, 0, 0, 912, 913, 5, 130, 0, 0, 913, 914, 3, 44, 22, 0, 914, 915, 5, 149, 0, 0, 915, 936, 1, 0, 0, 0, 916, 917, 5, 130, 0, 0, 917, 918, 3, 116, 58, 0, 918, 919, 5, 149, 0, 0, 919, 936, 1, 0, 0, 0, 920, 921, 5, 130, 0, 0, 921, 922, 3, 114, 57, 0, 922, 923, 5, 149, 0, 0, 923, 936, 1, 0, 0, 0, 924, 926, 5, 129, 0, 0, 925, 927, 3, 114, 57, 0, 926, 925, 1, 0, 0, 0, 926, 927, 1, 0, 0, 0, 927, 928, 1, 0, 0, 0, 928, 936, 5, 148, 0, 0, 929, 931, 5, 128, 0, 0, 930, 932, 3, 40, 20, 0, 931, 930, 1, 0, 0, 0, 931, 932, 1, 0, 0, 0, 932, 933, 1, 0, 0, 0, 933, 936, 5, 147, 0, 0, 934, 936, 3, 132, 66, 0, 935, 786, 1, 0, 0, 0, 935, 806, 1, 0, 0, 0, 935, 813, 1, 0, 0, 0, 935, 815, 1, 0, 0, 0, 935, 819, 1, 0, 0, 0, 935, 830, 1, 0, 0, 0, 935, 832, 1, 0, 0, 0, 935, 840, 1, 0, 0, 0, 935, 862, 1, 0, 0, 0, 935, 882, 1, 0, 0, 0, 935, 899, 1, 0, 0, 0, 935, 900, 1, 0, 0, 0, 935, 901, 1, 0, 0, 0, 935, 902, 1, 0, 0, 0, 935, 904, 1, 0, 0, 0, 935, 909, 1, 0, 0, 0, 935, 912, 1, 0, 0, 0, 935, 916, 1, 0, 0, 0, 935, 920, 1, 0, 0, 0, 935, 924, 1, 0, 0, 0, 935, 929, 1, 0, 0, 0, 935, 934, 1, 0, 0, 0, 936, 1041, 1, 0, 0, 0, 937, 941, 10, 18, 0, 0, 938, 942, 5, 112, 0, 0, 939, 942, 5, 151, 0, 0, 940, 942, 5, 138, 0, 0, 941, 938, 1, 0, 0, 0, 941, 939, 1, 0, 0, 0, 941, 940, 1, 0, 0, 0, 942, 943, 1, 0, 0, 0, 943, 1040, 3, 116, 58, 19, 944, 948, 10, 17, 0, 0, 945, 949, 5, 139, 0, 0, 946, 949, 5, 118, 0, 0, 947, 949, 5, 117, 0, 0, 948, 945, 1, 0, 0, 0, 948, 946, 1, 0, 0, 0, 948, 947, 1, 0, 0, 0, 949, 950, 1, 0, 0, 0, 950, 1040, 3, 116, 58, 18, 951, 976, 10, 16, 0, 0, 952, 977, 5, 121, 0, 0, 953, 977, 5, 122, 0, 0, 954, 977, 5, 133, 0, 0, 955, 977, 5, 131, 0, 0, 956, 977, 5, 132, 0, 0, 957, 977, 5, 123, 0, 0, 958, 977, 5, 124, 0, 0, 959, 961, 5, 58, 0, 0, 960, 959, 1, 0, 0, 0, 960, 961, 1, 0, 0, 0, 961, 962, 1, 0, 0, 0, 962, 964, 5, 42, 0, 0, 963, 965, 5, 15, 0, 0, 964, 963, 1, 0, 0, 0, 964, 965, 1, 0, 0, 0, 965, 977, 1, 0, 0, 0, 966, 968, 5, 58, 0, 0, 967, 966, 1, 0, 0, 0, 967, 968, 1, 0, 0, 0, 968, 969, 1, 0, 0, 0, 969, 977, 7, 10, 0, 0, 970, 977, 5, 145, 0, 0, 971, 977, 5, 146, 0, 0, 972, 977, 5, 135, 0, 0, 973, 977, 5, 126, 0, 0, 974, 977, 5, 127, 0, 0, 975, 977, 5, 134, 0, 0, 976, 952, 1, 0, 0, 0, 976, 953, 1, 0, 0, 0, 976, 954, 1, 0, 0, 0, 976, 955, 1, 0, 0, 0, 976, 956, 1, 0, 0, 0, 976, 957, 1, 0, 0, 0, 976, 958, 1, 0, 0, 0, 976, 960, 1, 0, 0, 0, 976, 967, 1, 0, 0, 0, 976, 970, 1, 0, 0, 0, 976, 971, 1, 0, 0, 0, 976, 972, 1, 0, 0, 0, 976, 973, 1, 0, 0, 0, 976, 974, 1, 0, 0, 0, 976, 975, 1, 0, 0, 0, 977, 978, 1, 0, 0, 0, 978, 1040, 3, 116, 58, 17, 979, 980, 10, 14, 0, 0, 980, 981, 5, 137, 0, 0, 981, 1040, 3, 116, 58, 15, 982, 983, 10, 12, 0, 0, 983, 984, 5, 2, 0, 0, 984, 1040, 3, 116, 58, 13, 985, 986, 10, 11, 0, 0, 986, 987, 5, 63, 0, 0, 987, 1040, 3, 116, 58, 12, 988, 990, 10, 10, 0, 0, 989, 991, 5, 58, 0, 0, 990, 989, 1, 0, 0, 0, 990, 991, 1, 0, 0, 0, 991, 992, 1, 0, 0, 0, 992, 993, 5, 9, 0, 0, 993, 994, 3, 116, 58, 0, 994, 995, 5, 2, 0, 0, 995, 996, 3, 116, 58, 11, 996, 1040, 1, 0, 0, 0, 997, 998, 10, 9, 0, 0, 998, 999, 5, 140, 0, 0, 999, 1000, 3, 116, 58, 0, 1000, 1001, 5, 115, 0, 0, 1001, 1002, 3, 116, 58, 9, 1002, 1040, 1, 0, 0, 0, 1003, 1004, 10, 25, 0, 0, 1004, 1005, 5, 129, 0, 0, 1005, 1006, 3, 116, 58, 0, 1006, 1007, 5, 148, 0, 0, 1007, 1040, 1, 0, 0, 0, 1008, 1009, 10, 24, 0, 0, 1009, 1010, 5, 120, 0, 0, 1010, 1040, 5, 108, 0, 0, 1011, 1012, 10, 23, 0, 0, 1012, 1013, 5, 120, 0, 0, 1013, 1040, 3, 160, 80, 0, 1014, 1015, 10, 22, 0, 0, 1015, 1016, 5, 136, 0, 0, 1016, 1017, 5, 129, 0, 0, 1017, 1018, 3, 116, 58, 0, 1018, 1019, 5, 148, 0, 0, 1019, 1040, 1, 0, 0, 0, 1020, 1021, 10, 21, 0, 0, 1021, 1022, 5, 136, 0, 0, 1022, 1040, 5, 108, 0, 0, 1023, 1024, 10, 20, 0, 0, 1024, 1025, 5, 136, 0, 0, 1025, 1040, 3, 160, 80, 0, 1026, 1027, 10, 15, 0, 0, 1027, 1029, 5, 46, 0, 0, 1028, 1030, 5, 58, 0, 0, 1029, 1028, 1, 0, 0, 0, 1029, 1030, 1, 0, 0, 0, 1030, 1031, 1, 0, 0, 0, 1031, 1040, 5, 59, 0, 0, 1032, 1037, 10, 8, 0, 0, 1033, 1034, 5, 6, 0, 0, 1034, 1038, 3, 160, 80, 0, 1035, 1036, 5, 6, 0, 0, 1036, 1038, 5, 110, 0, 0, 1037, 1033, 1, 0, 0, 0, 1037, 1035, 1, 0, 0, 0, 1038, 1040, 1, 0, 0, 0, 1039, 937, 1, 0, 0, 0, 1039, 944, 1, 0, 0, 0, 1039, 951, 1, 0, 0, 0, 1039, 979, 1, 0, 0, 0, 1039, 982, 1, 0, 0, 0, 1039, 985, 1, 0, 0, 0, 1039, 988, 1, 0, 0, 0, 1039, 997, 1, 0, 0, 0, 1039, 1003, 1, 0, 0, 0, 1039, 1008, 1, 0, 0, 0, 1039, 1011, 1, 0, 0, 0, 1039, 1014, 1, 0, 0, 0, 1039, 1020, 1, 0, 0, 0, 1039, 1023, 1, 0, 0, 0, 1039, 1026, 1, 0, 0, 0, 1039, 1032, 1, 0, 0, 0, 1040, 1043, 1, 0, 0, 0, 1041, 1039, 1, 0, 0, 0, 1041, 1042, 1, 0, 0, 0, 1042, 117, 1, 0, 0, 0, 1043, 1041, 1, 0, 0, 0, 1044, 1049, 3, 120, 60, 0, 1045, 1046, 5, 116, 0, 0, 1046, 1048, 3, 120, 60, 0, 1047, 1045, 1, 0, 0, 0, 1048, 1051, 1, 0, 0, 0, 1049, 1047, 1, 0, 0, 0, 1049, 1050, 1, 0, 0, 0, 1050, 1053, 1, 0, 0, 0, 1051, 1049, 1, 0, 0, 0, 1052, 1054, 5, 116, 0, 0, 1053, 1052, 1, 0, 0, 0, 1053, 1054, 1, 0, 0, 0, 1054, 119, 1, 0, 0, 0, 1055, 1058, 3, 122, 61, 0, 1056, 1058, 3, 116, 58, 0, 1057, 1055, 1, 0, 0, 0, 1057, 1056, 1, 0, 0, 0, 1058, 121, 1, 0, 0, 0, 1059, 1060, 5, 130, 0, 0, 1060, 1065, 3, 160, 80, 0, 1061, 1062, 5, 116, 0, 0, 1062, 1064, 3, 160, 80, 0, 1063, 1061, 1, 0, 0, 0, 1064, 1067, 1, 0, 0, 0, 1065, 1063, 1, 0, 0, 0, 1065, 1066, 1, 0, 0, 0, 1066, 1069, 1, 0, 0, 0, 1067, 1065, 1, 0, 0, 0, 1068, 1070, 5, 116, 0, 0, 1069, 1068, 1, 0, 0, 0, 1069, 1070, 1, 0, 0, 0, 1070, 1071, 1, 0, 0, 0, 1071, 1072, 5, 149, 0, 0, 1072, 1085, 1, 0, 0, 0, 1073, 1078, 3, 160, 80, 0, 1074, 1075, 5, 116, 0, 0, 1075, 1077, 3, 160, 80, 0, 1076, 1074, 1, 0, 0, 0, 1077, 1080, 1, 0, 0, 0, 1078, 1076, 1, 0, 0, 0, 1078, 1079, 1, 0, 0, 0, 1079, 1082, 1, 0, 0, 0, 1080, 1078, 1, 0, 0, 0, 1081, 1083, 5, 116, 0, 0, 1082, 1081, 1, 0, 0, 0, 1082, 1083, 1, 0, 0, 0, 1083, 1085, 1, 0, 0, 0, 1084, 1059, 1, 0, 0, 0, 1084, 1073, 1, 0, 0, 0, 1085, 1086, 1, 0, 0, 0, 1086, 1087, 5, 111, 0, 0, 1087, 1088, 3, 116, 58, 0, 1088, 123, 1, 0, 0, 0, 1089, 1090, 5, 132, 0, 0, 1090, 1094, 3, 160, 80, 0, 1091, 1093, 3, 126, 63, 0, 1092, 1091, 1, 0, 0, 0, 1093, 1096, 1, 0, 0, 0, 1094, 1092, 1, 0, 0, 0, 1094, 1095, 1, 0, 0, 0, 1095, 1097, 1, 0, 0, 0, 1096, 1094, 1, 0, 0, 0, 1097, 1098, 5, 151, 0, 0, 1098, 1099, 5, 124, 0, 0, 1099, 1122, 1, 0, 0, 0, 1100, 1101, 5, 132, 0, 0, 1101, 1105, 3, 160, 80, 0, 1102, 1104, 3, 126, 63, 0, 1103, 1102, 1, 0, 0, 0, 1104, 1107, 1, 0, 0, 0, 1105, 1103, 1, 0, 0, 0, 1105, 1106, 1, 0, 0, 0, 1106, 1108, 1, 0, 0, 0, 1107, 1105, 1, 0, 0, 0, 1108, 1114, 5, 124, 0, 0, 1109, 1115, 3, 124, 62, 0, 1110, 1111, 5, 128, 0, 0, 1111, 1112, 3, 116, 58, 0, 1112, 1113, 5, 147, 0, 0, 1113, 1115, 1, 0, 0, 0, 1114, 1109, 1, 0, 0, 0, 1114, 1110, 1, 0, 0, 0, 1114, 1115, 1, 0, 0, 0, 1115, 1116, 1, 0, 0, 0, 1116, 1117, 5, 132, 0, 0, 1117, 1118, 5, 151, 0, 0, 1118, 1119, 3, 160, 80, 0, 1119, 1120, 5, 124, 0, 0, 1120, 1122, 1, 0, 0, 0, 1121, 1089, 1, 0, 0, 0, 1121, 1100, 1, 0, 0, 0, 1122, 125, 1, 0, 0, 0, 1123, 1124, 3, 160, 80, 0, 1124, 1125, 5, 122, 0, 0, 1125, 1126, 3, 166, 83, 0, 1126, 1135, 1, 0, 0, 0, 1127, 1128, 3, 160, 80, 0, 1128, 1129, 5, 122, 0, 0, 1129, 1130, 5, 128, 0, 0, 1130, 1131, 3, 116, 58, 0, 1131, 1132, 5, 147, 0, 0, 1132, 1135, 1, 0, 0, 0, 1133, 1135, 3, 160, 80, 0, 1134, 1123, 1, 0, 0, 0, 1134, 1127, 1, 0, 0, 0, 1134, 1133, 1, 0, 0, 0, 1135, 127, 1, 0, 0, 0, 1136, 1141, 3, 130, 65, 0, 1137, 1138, 5, 116, 0, 0, 1138, 1140, 3, 130, 65, 0, 1139, 1137, 1, 0, 0, 0, 1140, 1143, 1, 0, 0, 0, 1141, 1139, 1, 0, 0, 0, 1141, 1142, 1, 0, 0, 0, 1142, 1145, 1, 0, 0, 0, 1143, 1141, 1, 0, 0, 0, 1144, 1146, 5, 116, 0, 0, 1145, 1144, 1, 0, 0, 0, 1145, 1146, 1, 0, 0, 0, 1146, 129, 1, 0, 0, 0, 1147, 1148, 3, 160, 80, 0, 1148, 1149, 5, 6, 0, 0, 1149, 1150, 5, 130, 0, 0, 1150, 1151, 3, 44, 22, 0, 1151, 1152, 5, 149, 0, 0, 1152, 1158, 1, 0, 0, 0, 1153, 1154, 3, 116, 58, 0, 1154, 1155, 5, 6, 0, 0, 1155, 1156, 3, 160, 80, 0, 1156, 1158, 1, 0, 0, 0, 1157, 1147, 1, 0, 0, 0, 1157, 1153, 1, 0, 0, 0, 1158, 131, 1, 0, 0, 0, 1159, 1167, 3, 164, 82, 0, 1160, 1161, 3, 140, 70, 0, 1161, 1162, 5, 120, 0, 0, 1162, 1164, 1, 0, 0, 0, 1163, 1160, 1, 0, 0, 0, 1163, 1164, 1, 0, 0, 0, 1164, 1165, 1, 0, 0, 0, 1165, 1167, 3, 134, 67, 0, 1166, 1159, 1, 0, 0, 0, 1166, 1163, 1, 0, 0, 0, 1167, 133, 1, 0, 0, 0, 1168, 1173, 3, 160, 80, 0, 1169, 1170, 5, 120, 0, 0, 1170, 1172, 3, 160, 80, 0, 1171, 1169, 1, 0, 0, 0, 1172, 1175, 1, 0, 0, 0, 1173, 1171, 1, 0, 0, 0, 1173, 1174, 1, 0, 0, 0, 1174, 135, 1, 0, 0, 0, 1175, 1173, 1, 0, 0, 0, 1176, 1177, 6, 68, -1, 0, 1177, 1186, 3, 140, 70, 0, 1178, 1186, 3, 138, 69, 0, 1179, 1180, 5, 130, 0, 0, 1180, 1181, 3, 44, 22, 0, 1181, 1182, 5, 149, 0, 0, 1182, 1186, 1, 0, 0, 0, 1183, 1186, 3, 124, 62, 0, 1184, 1186, 3, 164, 82, 0, 1185, 1176, 1, 0, 0, 0, 1185, 1178, 1, 0, 0, 0, 1185, 1179, 1, 0, 0, 0, 1185, 1183, 1, 0, 0, 0, 1185, 1184, 1, 0, 0, 0, 1186, 1195, 1, 0, 0, 0, 1187, 1191, 10, 3, 0, 0, 1188, 1192, 3, 158, 79, 0, 1189, 1190, 5, 6, 0, 0, 1190, 1192, 3, 160, 80, 0, 1191, 1188, 1, 0, 0, 0, 1191, 1189, 1, 0, 0, 0, 1192, 1194, 1, 0, 0, 0, 1193, 1187, 1, 0, 0, 0, 1194, 1197, 1, 0, 0, 0, 1195, 1193, 1, 0, 0, 0, 1195, 1196, 1, 0, 0, 0, 1196, 137, 1, 0, 0, 0, 1197, 1195, 1, 0, 0, 0, 1198, 1199, 3, 160, 80, 0, 1199, 1201, 5, 130, 0, 0, 1200, 1202, 3, 142, 71, 0, 1201, 1200, 1, 0, 0, 0, 1201, 1202, 1, 0, 0, 0, 1202, 1203, 1, 0, 0, 0, 1203, 1204, 5, 149, 0, 0, 1204, 139, 1, 0, 0, 0, 1205, 1206, 3, 144, 72, 0, 1206, 1207, 5, 120, 0, 0, 1207, 1209, 1, 0, 0, 0, 1208, 1205, 1, 0, 0, 0, 1208, 1209, 1, 0, 0, 0, 1209, 1210, 1, 0, 0, 0, 1210, 1211, 3, 160, 80, 0, 1211, 141, 1, 0, 0, 0, 1212, 1217, 3, 116, 58, 0, 1213, 1214, 5, 116, 0, 0, 1214, 1216, 3, 116, 58, 0, 1215, 1213, 1, 0, 0, 0, 1216, 1219, 1, 0, 0, 0, 1217, 1215, 1, 0, 0, 0, 1217, 1218, 1, 0, 0, 0, 1218, 1221, 1, 0, 0, 0, 1219, 1217, 1, 0, 0, 0, 1220, 1222, 5, 116, 0, 0, 1221, 1220, 1, 0, 0, 0, 1221, 1222, 1, 0, 0, 0, 1222, 143, 1, 0, 0, 0, 1223, 1224, 3, 160, 80, 0, 1224, 145, 1, 0, 0, 0, 1225, 1234, 5, 106, 0, 0, 1226, 1227, 5, 120, 0, 0, 1227, 1234, 7, 11, 0, 0, 1228, 1229, 5, 108, 0, 0, 1229, 1231, 5, 120, 0, 0, 1230, 1232, 7, 11, 0, 0, 1231, 1230, 1, 0, 0, 0, 1231, 1232, 1, 0, 0, 0, 1232, 1234, 1, 0, 0, 0, 1233, 1225, 1, 0, 0, 0, 1233, 1226, 1, 0, 0, 0, 1233, 1228, 1, 0, 0, 0, 1234, 147, 1, 0, 0, 0, 1235, 1237, 7, 12, 0, 0, 1236, 1235, 1, 0, 0, 0, 1236, 1237, 1, 0, 0, 0, 1237, 1244, 1, 0, 0, 0, 1238, 1245, 3, 146, 73, 0, 1239, 1245, 5, 107, 0, 0, 1240, 1245, 5, 108, 0, 0, 1241, 1245, 5, 109, 0, 0, 1242, 1245, 5, 43, 0, 0, 1243, 1245, 5, 57, 0, 0, 1244, 1238, 1, 0, 0, 0, 1244, 1239, 1, 0, 0, 0, 1244, 1240, 1, 0, 0, 0, 1244, 1241, 1, 0, 0, 0, 1244, 1242, 1, 0, 0, 0, 1244, 1243, 1, 0, 0, 0, 1245, 149, 1, 0, 0, 0, 1246, 1250, 3, 148, 74, 0, 1247, 1250, 5, 110, 0, 0, 1248, 1250, 5, 59, 0, 0, 1249, 1246, 1, 0, 0, 0, 1249, 1247, 1, 0, 0, 0, 1249, 1248, 1, 0, 0, 0, 1250, 151, 1, 0, 0, 0, 1251, 1252, 7, 13, 0, 0, 1252, 153, 1, 0, 0, 0, 1253, 1254, 7, 14, 0, 0, 1254, 155, 1, 0, 0, 0, 1255, 1256, 7, 15, 0, 0, 1256, 157, 1, 0, 0, 0, 1257, 1260, 5, 105, 0, 0, 1258, 1260, 3, 156, 78, 0, 1259, 1257, 1, 0, 0, 0, 1259, 1258, 1, 0, 0, 0, 1260, 159, 1, 0, 0, 0, 1261, 1265, 5, 105, 0, 0, 1262, 1265, 3, 152, 76, 0, 1263, 1265, 3, 154, 77, 0, 1264, 1261, 1, 0, 0, 0, 1264, 1262, 1, 0, 0, 0, 1264, 1263, 1, 0, 0, 0, 1265, 161, 1, 0, 0, 0, 1266, 1267, 3, 166, 83, 0, 1267, 1268, 5, 122, 0, 0, 1268, 1269, 3, 148, 74, 0, 1269, 163, 1, 0, 0, 0, 1270, 1271, 5, 128, 0, 0, 1271, 1272, 3, 160, 80, 0, 1272, 1273, 5, 147, 0, 0, 1273, 165, 1, 0, 0, 0, 1274, 1277, 5, 110, 0, 0, 1275, 1277, 3, 168, 84, 0, 1276, 1274, 1, 0, 0, 0, 1276, 1275, 1, 0, 0, 0, 1277, 167, 1, 0, 0, 0, 1278, 1282, 5, 142, 0, 0, 1279, 1281, 3, 170, 85, 0, 1280, 1279, 1, 0, 0, 0, 1281, 1284, 1, 0, 0, 0, 1282, 1280, 1, 0, 0, 0, 1282, 1283, 1, 0, 0, 0, 1283, 1285, 1, 0, 0, 0, 1284, 1282, 1, 0, 0, 0, 1285, 1286, 5, 144, 0, 0, 1286, 169, 1, 0, 0, 0, 1287, 1288, 5, 157, 0, 0, 1288, 1289, 3, 116, 58, 0, 1289, 1290, 5, 147, 0, 0, 1290, 1293, 1, 0, 0, 0, 1291, 1293, 5, 156, 0, 0, 1292, 1287, 1, 0, 0, 0, 1292, 1291, 1, 0, 0, 0, 1293, 171, 1, 0, 0, 0, 1294, 1298, 5, 143, 0, 0, 1295, 1297, 3, 174, 87, 0, 1296, 1295, 1, 0, 0, 0, 1297, 1300, 1, 0, 0, 0, 1298, 1296, 1, 0, 0, 0, 1298, 1299, 1, 0, 0, 0, 1299, 1301, 1, 0, 0, 0, 1300, 1298, 1, 0, 0, 0, 1301, 1302, 5, 0, 0, 1, 1302, 173, 1, 0, 0, 0, 1303, 1304, 5, 159, 0, 0, 1304, 1305, 3, 116, 58, 0, 1305, 1306, 5, 147, 0, 0, 1306, 1309, 1, 0, 0, 0, 1307, 1309, 5, 158, 0, 0, 1308, 1303, 1, 0, 0, 0, 1308, 1307, 1, 0, 0, 0, 1309, 175, 1, 0, 0, 0, 168, 179, 186, 195, 202, 206, 220, 224, 227, 231, 234, 241, 245, 254, 259, 268, 276, 283, 287, 293, 298, 306, 313, 319, 331, 339, 353, 357, 362, 372, 381, 384, 388, 391, 395, 398, 401, 404, 407, 411, 415, 418, 421, 424, 428, 431, 440, 446, 467, 484, 501, 507, 513, 524, 526, 537, 540, 546, 554, 560, 562, 566, 571, 574, 577, 581, 585, 588, 590, 593, 597, 601, 604, 606, 608, 613, 624, 630, 637, 642, 646, 650, 656, 658, 665, 673, 676, 679, 698, 712, 728, 732, 743, 747, 758, 762, 769, 773, 780, 784, 789, 798, 802, 826, 843, 849, 852, 855, 865, 871, 874, 877, 885, 888, 892, 895, 909, 926, 931, 935, 941, 948, 960, 964, 967, 976, 990, 1029, 1037, 1039, 1041, 1049, 1053, 1057, 1065, 1069, 1078, 1082, 1084, 1094, 1105, 1114, 1121, 1134, 1141, 1145, 1157, 1163, 1166, 1173, 1185, 1191, 1195, 1201, 1208, 1217, 1221, 1231, 1233, 1236, 1244, 1249, 1259, 1264, 1276, 1282, 1292, 1298, 1308] \ No newline at end of file diff --git a/posthog/hogql/grammar/HogQLParser.py b/posthog/hogql/grammar/HogQLParser.py index 719ab286bcf6d..6865c4c553220 100644 --- a/posthog/hogql/grammar/HogQLParser.py +++ b/posthog/hogql/grammar/HogQLParser.py @@ -10,7 +10,7 @@ def serializedATN(): return [ - 4,1,159,1307,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6, + 4,1,159,1311,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6, 7,6,2,7,7,7,2,8,7,8,2,9,7,9,2,10,7,10,2,11,7,11,2,12,7,12,2,13,7, 13,2,14,7,14,2,15,7,15,2,16,7,16,2,17,7,17,2,18,7,18,2,19,7,19,2, 20,7,20,2,21,7,21,2,22,7,22,2,23,7,23,2,24,7,24,2,25,7,25,2,26,7, @@ -105,143 +105,143 @@ def serializedATN(): 12,61,1080,9,61,1,61,3,61,1083,8,61,3,61,1085,8,61,1,61,1,61,1,61, 1,62,1,62,1,62,5,62,1093,8,62,10,62,12,62,1096,9,62,1,62,1,62,1, 62,1,62,1,62,1,62,5,62,1104,8,62,10,62,12,62,1107,9,62,1,62,1,62, - 3,62,1111,8,62,1,62,1,62,1,62,1,62,1,62,3,62,1118,8,62,1,63,1,63, - 1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,3,63,1131,8,63,1,64, - 1,64,1,64,5,64,1136,8,64,10,64,12,64,1139,9,64,1,64,3,64,1142,8, - 64,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,3,65,1154,8, - 65,1,66,1,66,1,66,1,66,3,66,1160,8,66,1,66,3,66,1163,8,66,1,67,1, - 67,1,67,5,67,1168,8,67,10,67,12,67,1171,9,67,1,68,1,68,1,68,1,68, - 1,68,1,68,1,68,1,68,1,68,3,68,1182,8,68,1,68,1,68,1,68,1,68,3,68, - 1188,8,68,5,68,1190,8,68,10,68,12,68,1193,9,68,1,69,1,69,1,69,3, - 69,1198,8,69,1,69,1,69,1,70,1,70,1,70,3,70,1205,8,70,1,70,1,70,1, - 71,1,71,1,71,5,71,1212,8,71,10,71,12,71,1215,9,71,1,71,3,71,1218, - 8,71,1,72,1,72,1,73,1,73,1,73,1,73,1,73,1,73,3,73,1228,8,73,3,73, - 1230,8,73,1,74,3,74,1233,8,74,1,74,1,74,1,74,1,74,1,74,1,74,3,74, - 1241,8,74,1,75,1,75,1,75,3,75,1246,8,75,1,76,1,76,1,77,1,77,1,78, - 1,78,1,79,1,79,3,79,1256,8,79,1,80,1,80,1,80,3,80,1261,8,80,1,81, - 1,81,1,81,1,81,1,82,1,82,1,82,1,82,1,83,1,83,3,83,1273,8,83,1,84, - 1,84,5,84,1277,8,84,10,84,12,84,1280,9,84,1,84,1,84,1,85,1,85,1, - 85,1,85,1,85,3,85,1289,8,85,1,86,1,86,5,86,1293,8,86,10,86,12,86, - 1296,9,86,1,86,1,86,1,87,1,87,1,87,1,87,1,87,3,87,1305,8,87,1,87, - 0,3,78,116,136,88,0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32, - 34,36,38,40,42,44,46,48,50,52,54,56,58,60,62,64,66,68,70,72,74,76, - 78,80,82,84,86,88,90,92,94,96,98,100,102,104,106,108,110,112,114, - 116,118,120,122,124,126,128,130,132,134,136,138,140,142,144,146, - 148,150,152,154,156,158,160,162,164,166,168,170,172,174,0,16,2,0, - 18,18,74,74,2,0,44,44,51,51,3,0,1,1,4,4,8,8,4,0,1,1,3,4,8,8,80,80, - 2,0,51,51,73,73,2,0,1,1,4,4,2,0,7,7,22,23,2,0,30,30,49,49,2,0,71, - 71,76,76,3,0,10,10,50,50,90,90,2,0,41,41,53,53,1,0,107,108,2,0,118, - 118,139,139,7,0,21,21,38,38,55,56,70,70,78,78,97,97,103,103,16,0, - 1,13,15,20,22,28,30,30,32,37,39,42,44,51,53,54,58,58,60,69,71,77, - 79,83,85,92,94,96,98,99,101,102,4,0,20,20,30,30,39,39,48,48,1474, - 0,179,1,0,0,0,2,186,1,0,0,0,4,188,1,0,0,0,6,190,1,0,0,0,8,197,1, - 0,0,0,10,220,1,0,0,0,12,222,1,0,0,0,14,229,1,0,0,0,16,236,1,0,0, - 0,18,249,1,0,0,0,20,261,1,0,0,0,22,270,1,0,0,0,24,278,1,0,0,0,26, - 300,1,0,0,0,28,315,1,0,0,0,30,324,1,0,0,0,32,329,1,0,0,0,34,333, - 1,0,0,0,36,335,1,0,0,0,38,344,1,0,0,0,40,348,1,0,0,0,42,362,1,0, - 0,0,44,366,1,0,0,0,46,381,1,0,0,0,48,384,1,0,0,0,50,433,1,0,0,0, - 52,436,1,0,0,0,54,442,1,0,0,0,56,446,1,0,0,0,58,452,1,0,0,0,60,470, - 1,0,0,0,62,473,1,0,0,0,64,476,1,0,0,0,66,486,1,0,0,0,68,489,1,0, - 0,0,70,493,1,0,0,0,72,526,1,0,0,0,74,528,1,0,0,0,76,531,1,0,0,0, - 78,546,1,0,0,0,80,608,1,0,0,0,82,613,1,0,0,0,84,624,1,0,0,0,86,626, - 1,0,0,0,88,632,1,0,0,0,90,640,1,0,0,0,92,658,1,0,0,0,94,660,1,0, - 0,0,96,668,1,0,0,0,98,673,1,0,0,0,100,681,1,0,0,0,102,685,1,0,0, - 0,104,689,1,0,0,0,106,698,1,0,0,0,108,712,1,0,0,0,110,714,1,0,0, - 0,112,773,1,0,0,0,114,775,1,0,0,0,116,935,1,0,0,0,118,1044,1,0,0, - 0,120,1057,1,0,0,0,122,1084,1,0,0,0,124,1117,1,0,0,0,126,1130,1, - 0,0,0,128,1132,1,0,0,0,130,1153,1,0,0,0,132,1162,1,0,0,0,134,1164, - 1,0,0,0,136,1181,1,0,0,0,138,1194,1,0,0,0,140,1204,1,0,0,0,142,1208, - 1,0,0,0,144,1219,1,0,0,0,146,1229,1,0,0,0,148,1232,1,0,0,0,150,1245, - 1,0,0,0,152,1247,1,0,0,0,154,1249,1,0,0,0,156,1251,1,0,0,0,158,1255, - 1,0,0,0,160,1260,1,0,0,0,162,1262,1,0,0,0,164,1266,1,0,0,0,166,1272, - 1,0,0,0,168,1274,1,0,0,0,170,1288,1,0,0,0,172,1290,1,0,0,0,174,1304, - 1,0,0,0,176,178,3,2,1,0,177,176,1,0,0,0,178,181,1,0,0,0,179,177, - 1,0,0,0,179,180,1,0,0,0,180,182,1,0,0,0,181,179,1,0,0,0,182,183, - 5,0,0,1,183,1,1,0,0,0,184,187,3,6,3,0,185,187,3,10,5,0,186,184,1, - 0,0,0,186,185,1,0,0,0,187,3,1,0,0,0,188,189,3,116,58,0,189,5,1,0, - 0,0,190,191,5,52,0,0,191,195,3,160,80,0,192,193,5,115,0,0,193,194, - 5,122,0,0,194,196,3,4,2,0,195,192,1,0,0,0,195,196,1,0,0,0,196,7, - 1,0,0,0,197,202,3,160,80,0,198,199,5,116,0,0,199,201,3,160,80,0, - 200,198,1,0,0,0,201,204,1,0,0,0,202,200,1,0,0,0,202,203,1,0,0,0, - 203,206,1,0,0,0,204,202,1,0,0,0,205,207,5,116,0,0,206,205,1,0,0, - 0,206,207,1,0,0,0,207,9,1,0,0,0,208,221,3,12,6,0,209,221,3,14,7, - 0,210,221,3,18,9,0,211,221,3,20,10,0,212,221,3,22,11,0,213,221,3, - 26,13,0,214,221,3,24,12,0,215,221,3,28,14,0,216,221,3,30,15,0,217, - 221,3,36,18,0,218,221,3,32,16,0,219,221,3,34,17,0,220,208,1,0,0, - 0,220,209,1,0,0,0,220,210,1,0,0,0,220,211,1,0,0,0,220,212,1,0,0, - 0,220,213,1,0,0,0,220,214,1,0,0,0,220,215,1,0,0,0,220,216,1,0,0, - 0,220,217,1,0,0,0,220,218,1,0,0,0,220,219,1,0,0,0,221,11,1,0,0,0, - 222,224,5,72,0,0,223,225,3,4,2,0,224,223,1,0,0,0,224,225,1,0,0,0, - 225,227,1,0,0,0,226,228,5,150,0,0,227,226,1,0,0,0,227,228,1,0,0, - 0,228,13,1,0,0,0,229,231,5,84,0,0,230,232,3,4,2,0,231,230,1,0,0, - 0,231,232,1,0,0,0,232,234,1,0,0,0,233,235,5,150,0,0,234,233,1,0, - 0,0,234,235,1,0,0,0,235,15,1,0,0,0,236,245,5,14,0,0,237,238,5,130, - 0,0,238,241,3,160,80,0,239,240,5,115,0,0,240,242,3,160,80,0,241, - 239,1,0,0,0,241,242,1,0,0,0,242,243,1,0,0,0,243,244,5,149,0,0,244, - 246,1,0,0,0,245,237,1,0,0,0,245,246,1,0,0,0,246,247,1,0,0,0,247, - 248,3,36,18,0,248,17,1,0,0,0,249,250,5,93,0,0,250,254,3,36,18,0, - 251,253,3,16,8,0,252,251,1,0,0,0,253,256,1,0,0,0,254,252,1,0,0,0, - 254,255,1,0,0,0,255,259,1,0,0,0,256,254,1,0,0,0,257,258,5,29,0,0, - 258,260,3,36,18,0,259,257,1,0,0,0,259,260,1,0,0,0,260,19,1,0,0,0, - 261,262,5,40,0,0,262,263,5,130,0,0,263,264,3,4,2,0,264,265,5,149, - 0,0,265,268,3,10,5,0,266,267,5,25,0,0,267,269,3,10,5,0,268,266,1, - 0,0,0,268,269,1,0,0,0,269,21,1,0,0,0,270,271,5,100,0,0,271,272,5, - 130,0,0,272,273,3,4,2,0,273,274,5,149,0,0,274,276,3,10,5,0,275,277, - 5,150,0,0,276,275,1,0,0,0,276,277,1,0,0,0,277,23,1,0,0,0,278,279, - 5,33,0,0,279,283,5,130,0,0,280,284,3,6,3,0,281,284,3,30,15,0,282, - 284,3,4,2,0,283,280,1,0,0,0,283,281,1,0,0,0,283,282,1,0,0,0,283, - 284,1,0,0,0,284,285,1,0,0,0,285,287,5,150,0,0,286,288,3,4,2,0,287, - 286,1,0,0,0,287,288,1,0,0,0,288,289,1,0,0,0,289,293,5,150,0,0,290, - 294,3,6,3,0,291,294,3,30,15,0,292,294,3,4,2,0,293,290,1,0,0,0,293, - 291,1,0,0,0,293,292,1,0,0,0,293,294,1,0,0,0,294,295,1,0,0,0,295, - 296,5,149,0,0,296,298,3,10,5,0,297,299,5,150,0,0,298,297,1,0,0,0, - 298,299,1,0,0,0,299,25,1,0,0,0,300,301,5,33,0,0,301,302,5,130,0, - 0,302,303,5,52,0,0,303,306,3,160,80,0,304,305,5,116,0,0,305,307, - 3,160,80,0,306,304,1,0,0,0,306,307,1,0,0,0,307,308,1,0,0,0,308,309, - 5,42,0,0,309,310,3,4,2,0,310,311,5,149,0,0,311,313,3,10,5,0,312, - 314,5,150,0,0,313,312,1,0,0,0,313,314,1,0,0,0,314,27,1,0,0,0,315, - 316,5,31,0,0,316,317,3,160,80,0,317,319,5,130,0,0,318,320,3,8,4, - 0,319,318,1,0,0,0,319,320,1,0,0,0,320,321,1,0,0,0,321,322,5,149, - 0,0,322,323,3,36,18,0,323,29,1,0,0,0,324,325,3,4,2,0,325,326,5,115, - 0,0,326,327,5,122,0,0,327,328,3,4,2,0,328,31,1,0,0,0,329,331,3,4, - 2,0,330,332,5,150,0,0,331,330,1,0,0,0,331,332,1,0,0,0,332,33,1,0, - 0,0,333,334,5,150,0,0,334,35,1,0,0,0,335,339,5,128,0,0,336,338,3, - 2,1,0,337,336,1,0,0,0,338,341,1,0,0,0,339,337,1,0,0,0,339,340,1, - 0,0,0,340,342,1,0,0,0,341,339,1,0,0,0,342,343,5,147,0,0,343,37,1, - 0,0,0,344,345,3,4,2,0,345,346,5,115,0,0,346,347,3,4,2,0,347,39,1, - 0,0,0,348,353,3,38,19,0,349,350,5,116,0,0,350,352,3,38,19,0,351, - 349,1,0,0,0,352,355,1,0,0,0,353,351,1,0,0,0,353,354,1,0,0,0,354, - 357,1,0,0,0,355,353,1,0,0,0,356,358,5,116,0,0,357,356,1,0,0,0,357, - 358,1,0,0,0,358,41,1,0,0,0,359,363,3,44,22,0,360,363,3,48,24,0,361, - 363,3,124,62,0,362,359,1,0,0,0,362,360,1,0,0,0,362,361,1,0,0,0,363, - 364,1,0,0,0,364,365,5,0,0,1,365,43,1,0,0,0,366,372,3,46,23,0,367, - 368,5,95,0,0,368,369,5,1,0,0,369,371,3,46,23,0,370,367,1,0,0,0,371, - 374,1,0,0,0,372,370,1,0,0,0,372,373,1,0,0,0,373,45,1,0,0,0,374,372, - 1,0,0,0,375,382,3,48,24,0,376,377,5,130,0,0,377,378,3,44,22,0,378, - 379,5,149,0,0,379,382,1,0,0,0,380,382,3,164,82,0,381,375,1,0,0,0, - 381,376,1,0,0,0,381,380,1,0,0,0,382,47,1,0,0,0,383,385,3,50,25,0, - 384,383,1,0,0,0,384,385,1,0,0,0,385,386,1,0,0,0,386,388,5,79,0,0, - 387,389,5,24,0,0,388,387,1,0,0,0,388,389,1,0,0,0,389,391,1,0,0,0, - 390,392,3,52,26,0,391,390,1,0,0,0,391,392,1,0,0,0,392,393,1,0,0, - 0,393,395,3,114,57,0,394,396,3,54,27,0,395,394,1,0,0,0,395,396,1, - 0,0,0,396,398,1,0,0,0,397,399,3,56,28,0,398,397,1,0,0,0,398,399, - 1,0,0,0,399,401,1,0,0,0,400,402,3,60,30,0,401,400,1,0,0,0,401,402, - 1,0,0,0,402,404,1,0,0,0,403,405,3,62,31,0,404,403,1,0,0,0,404,405, - 1,0,0,0,405,407,1,0,0,0,406,408,3,64,32,0,407,406,1,0,0,0,407,408, - 1,0,0,0,408,411,1,0,0,0,409,410,5,102,0,0,410,412,7,0,0,0,411,409, - 1,0,0,0,411,412,1,0,0,0,412,415,1,0,0,0,413,414,5,102,0,0,414,416, - 5,89,0,0,415,413,1,0,0,0,415,416,1,0,0,0,416,418,1,0,0,0,417,419, - 3,66,33,0,418,417,1,0,0,0,418,419,1,0,0,0,419,421,1,0,0,0,420,422, - 3,58,29,0,421,420,1,0,0,0,421,422,1,0,0,0,422,424,1,0,0,0,423,425, - 3,68,34,0,424,423,1,0,0,0,424,425,1,0,0,0,425,428,1,0,0,0,426,429, - 3,72,36,0,427,429,3,74,37,0,428,426,1,0,0,0,428,427,1,0,0,0,428, - 429,1,0,0,0,429,431,1,0,0,0,430,432,3,76,38,0,431,430,1,0,0,0,431, - 432,1,0,0,0,432,49,1,0,0,0,433,434,5,102,0,0,434,435,3,128,64,0, - 435,51,1,0,0,0,436,437,5,88,0,0,437,440,5,108,0,0,438,439,5,102, - 0,0,439,441,5,85,0,0,440,438,1,0,0,0,440,441,1,0,0,0,441,53,1,0, - 0,0,442,443,5,34,0,0,443,444,3,78,39,0,444,55,1,0,0,0,445,447,7, - 1,0,0,446,445,1,0,0,0,446,447,1,0,0,0,447,448,1,0,0,0,448,449,5, - 5,0,0,449,450,5,47,0,0,450,451,3,114,57,0,451,57,1,0,0,0,452,453, + 1,62,1,62,1,62,1,62,3,62,1115,8,62,1,62,1,62,1,62,1,62,1,62,3,62, + 1122,8,62,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63,1,63, + 3,63,1135,8,63,1,64,1,64,1,64,5,64,1140,8,64,10,64,12,64,1143,9, + 64,1,64,3,64,1146,8,64,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1, + 65,1,65,3,65,1158,8,65,1,66,1,66,1,66,1,66,3,66,1164,8,66,1,66,3, + 66,1167,8,66,1,67,1,67,1,67,5,67,1172,8,67,10,67,12,67,1175,9,67, + 1,68,1,68,1,68,1,68,1,68,1,68,1,68,1,68,1,68,3,68,1186,8,68,1,68, + 1,68,1,68,1,68,3,68,1192,8,68,5,68,1194,8,68,10,68,12,68,1197,9, + 68,1,69,1,69,1,69,3,69,1202,8,69,1,69,1,69,1,70,1,70,1,70,3,70,1209, + 8,70,1,70,1,70,1,71,1,71,1,71,5,71,1216,8,71,10,71,12,71,1219,9, + 71,1,71,3,71,1222,8,71,1,72,1,72,1,73,1,73,1,73,1,73,1,73,1,73,3, + 73,1232,8,73,3,73,1234,8,73,1,74,3,74,1237,8,74,1,74,1,74,1,74,1, + 74,1,74,1,74,3,74,1245,8,74,1,75,1,75,1,75,3,75,1250,8,75,1,76,1, + 76,1,77,1,77,1,78,1,78,1,79,1,79,3,79,1260,8,79,1,80,1,80,1,80,3, + 80,1265,8,80,1,81,1,81,1,81,1,81,1,82,1,82,1,82,1,82,1,83,1,83,3, + 83,1277,8,83,1,84,1,84,5,84,1281,8,84,10,84,12,84,1284,9,84,1,84, + 1,84,1,85,1,85,1,85,1,85,1,85,3,85,1293,8,85,1,86,1,86,5,86,1297, + 8,86,10,86,12,86,1300,9,86,1,86,1,86,1,87,1,87,1,87,1,87,1,87,3, + 87,1309,8,87,1,87,0,3,78,116,136,88,0,2,4,6,8,10,12,14,16,18,20, + 22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58,60,62,64, + 66,68,70,72,74,76,78,80,82,84,86,88,90,92,94,96,98,100,102,104,106, + 108,110,112,114,116,118,120,122,124,126,128,130,132,134,136,138, + 140,142,144,146,148,150,152,154,156,158,160,162,164,166,168,170, + 172,174,0,16,2,0,18,18,74,74,2,0,44,44,51,51,3,0,1,1,4,4,8,8,4,0, + 1,1,3,4,8,8,80,80,2,0,51,51,73,73,2,0,1,1,4,4,2,0,7,7,22,23,2,0, + 30,30,49,49,2,0,71,71,76,76,3,0,10,10,50,50,90,90,2,0,41,41,53,53, + 1,0,107,108,2,0,118,118,139,139,7,0,21,21,38,38,55,56,70,70,78,78, + 97,97,103,103,16,0,1,13,15,20,22,28,30,30,32,37,39,42,44,51,53,54, + 58,58,60,69,71,77,79,83,85,92,94,96,98,99,101,102,4,0,20,20,30,30, + 39,39,48,48,1479,0,179,1,0,0,0,2,186,1,0,0,0,4,188,1,0,0,0,6,190, + 1,0,0,0,8,197,1,0,0,0,10,220,1,0,0,0,12,222,1,0,0,0,14,229,1,0,0, + 0,16,236,1,0,0,0,18,249,1,0,0,0,20,261,1,0,0,0,22,270,1,0,0,0,24, + 278,1,0,0,0,26,300,1,0,0,0,28,315,1,0,0,0,30,324,1,0,0,0,32,329, + 1,0,0,0,34,333,1,0,0,0,36,335,1,0,0,0,38,344,1,0,0,0,40,348,1,0, + 0,0,42,362,1,0,0,0,44,366,1,0,0,0,46,381,1,0,0,0,48,384,1,0,0,0, + 50,433,1,0,0,0,52,436,1,0,0,0,54,442,1,0,0,0,56,446,1,0,0,0,58,452, + 1,0,0,0,60,470,1,0,0,0,62,473,1,0,0,0,64,476,1,0,0,0,66,486,1,0, + 0,0,68,489,1,0,0,0,70,493,1,0,0,0,72,526,1,0,0,0,74,528,1,0,0,0, + 76,531,1,0,0,0,78,546,1,0,0,0,80,608,1,0,0,0,82,613,1,0,0,0,84,624, + 1,0,0,0,86,626,1,0,0,0,88,632,1,0,0,0,90,640,1,0,0,0,92,658,1,0, + 0,0,94,660,1,0,0,0,96,668,1,0,0,0,98,673,1,0,0,0,100,681,1,0,0,0, + 102,685,1,0,0,0,104,689,1,0,0,0,106,698,1,0,0,0,108,712,1,0,0,0, + 110,714,1,0,0,0,112,773,1,0,0,0,114,775,1,0,0,0,116,935,1,0,0,0, + 118,1044,1,0,0,0,120,1057,1,0,0,0,122,1084,1,0,0,0,124,1121,1,0, + 0,0,126,1134,1,0,0,0,128,1136,1,0,0,0,130,1157,1,0,0,0,132,1166, + 1,0,0,0,134,1168,1,0,0,0,136,1185,1,0,0,0,138,1198,1,0,0,0,140,1208, + 1,0,0,0,142,1212,1,0,0,0,144,1223,1,0,0,0,146,1233,1,0,0,0,148,1236, + 1,0,0,0,150,1249,1,0,0,0,152,1251,1,0,0,0,154,1253,1,0,0,0,156,1255, + 1,0,0,0,158,1259,1,0,0,0,160,1264,1,0,0,0,162,1266,1,0,0,0,164,1270, + 1,0,0,0,166,1276,1,0,0,0,168,1278,1,0,0,0,170,1292,1,0,0,0,172,1294, + 1,0,0,0,174,1308,1,0,0,0,176,178,3,2,1,0,177,176,1,0,0,0,178,181, + 1,0,0,0,179,177,1,0,0,0,179,180,1,0,0,0,180,182,1,0,0,0,181,179, + 1,0,0,0,182,183,5,0,0,1,183,1,1,0,0,0,184,187,3,6,3,0,185,187,3, + 10,5,0,186,184,1,0,0,0,186,185,1,0,0,0,187,3,1,0,0,0,188,189,3,116, + 58,0,189,5,1,0,0,0,190,191,5,52,0,0,191,195,3,160,80,0,192,193,5, + 115,0,0,193,194,5,122,0,0,194,196,3,4,2,0,195,192,1,0,0,0,195,196, + 1,0,0,0,196,7,1,0,0,0,197,202,3,160,80,0,198,199,5,116,0,0,199,201, + 3,160,80,0,200,198,1,0,0,0,201,204,1,0,0,0,202,200,1,0,0,0,202,203, + 1,0,0,0,203,206,1,0,0,0,204,202,1,0,0,0,205,207,5,116,0,0,206,205, + 1,0,0,0,206,207,1,0,0,0,207,9,1,0,0,0,208,221,3,12,6,0,209,221,3, + 14,7,0,210,221,3,18,9,0,211,221,3,20,10,0,212,221,3,22,11,0,213, + 221,3,26,13,0,214,221,3,24,12,0,215,221,3,28,14,0,216,221,3,30,15, + 0,217,221,3,36,18,0,218,221,3,32,16,0,219,221,3,34,17,0,220,208, + 1,0,0,0,220,209,1,0,0,0,220,210,1,0,0,0,220,211,1,0,0,0,220,212, + 1,0,0,0,220,213,1,0,0,0,220,214,1,0,0,0,220,215,1,0,0,0,220,216, + 1,0,0,0,220,217,1,0,0,0,220,218,1,0,0,0,220,219,1,0,0,0,221,11,1, + 0,0,0,222,224,5,72,0,0,223,225,3,4,2,0,224,223,1,0,0,0,224,225,1, + 0,0,0,225,227,1,0,0,0,226,228,5,150,0,0,227,226,1,0,0,0,227,228, + 1,0,0,0,228,13,1,0,0,0,229,231,5,84,0,0,230,232,3,4,2,0,231,230, + 1,0,0,0,231,232,1,0,0,0,232,234,1,0,0,0,233,235,5,150,0,0,234,233, + 1,0,0,0,234,235,1,0,0,0,235,15,1,0,0,0,236,245,5,14,0,0,237,238, + 5,130,0,0,238,241,3,160,80,0,239,240,5,115,0,0,240,242,3,160,80, + 0,241,239,1,0,0,0,241,242,1,0,0,0,242,243,1,0,0,0,243,244,5,149, + 0,0,244,246,1,0,0,0,245,237,1,0,0,0,245,246,1,0,0,0,246,247,1,0, + 0,0,247,248,3,36,18,0,248,17,1,0,0,0,249,250,5,93,0,0,250,254,3, + 36,18,0,251,253,3,16,8,0,252,251,1,0,0,0,253,256,1,0,0,0,254,252, + 1,0,0,0,254,255,1,0,0,0,255,259,1,0,0,0,256,254,1,0,0,0,257,258, + 5,29,0,0,258,260,3,36,18,0,259,257,1,0,0,0,259,260,1,0,0,0,260,19, + 1,0,0,0,261,262,5,40,0,0,262,263,5,130,0,0,263,264,3,4,2,0,264,265, + 5,149,0,0,265,268,3,10,5,0,266,267,5,25,0,0,267,269,3,10,5,0,268, + 266,1,0,0,0,268,269,1,0,0,0,269,21,1,0,0,0,270,271,5,100,0,0,271, + 272,5,130,0,0,272,273,3,4,2,0,273,274,5,149,0,0,274,276,3,10,5,0, + 275,277,5,150,0,0,276,275,1,0,0,0,276,277,1,0,0,0,277,23,1,0,0,0, + 278,279,5,33,0,0,279,283,5,130,0,0,280,284,3,6,3,0,281,284,3,30, + 15,0,282,284,3,4,2,0,283,280,1,0,0,0,283,281,1,0,0,0,283,282,1,0, + 0,0,283,284,1,0,0,0,284,285,1,0,0,0,285,287,5,150,0,0,286,288,3, + 4,2,0,287,286,1,0,0,0,287,288,1,0,0,0,288,289,1,0,0,0,289,293,5, + 150,0,0,290,294,3,6,3,0,291,294,3,30,15,0,292,294,3,4,2,0,293,290, + 1,0,0,0,293,291,1,0,0,0,293,292,1,0,0,0,293,294,1,0,0,0,294,295, + 1,0,0,0,295,296,5,149,0,0,296,298,3,10,5,0,297,299,5,150,0,0,298, + 297,1,0,0,0,298,299,1,0,0,0,299,25,1,0,0,0,300,301,5,33,0,0,301, + 302,5,130,0,0,302,303,5,52,0,0,303,306,3,160,80,0,304,305,5,116, + 0,0,305,307,3,160,80,0,306,304,1,0,0,0,306,307,1,0,0,0,307,308,1, + 0,0,0,308,309,5,42,0,0,309,310,3,4,2,0,310,311,5,149,0,0,311,313, + 3,10,5,0,312,314,5,150,0,0,313,312,1,0,0,0,313,314,1,0,0,0,314,27, + 1,0,0,0,315,316,5,31,0,0,316,317,3,160,80,0,317,319,5,130,0,0,318, + 320,3,8,4,0,319,318,1,0,0,0,319,320,1,0,0,0,320,321,1,0,0,0,321, + 322,5,149,0,0,322,323,3,36,18,0,323,29,1,0,0,0,324,325,3,4,2,0,325, + 326,5,115,0,0,326,327,5,122,0,0,327,328,3,4,2,0,328,31,1,0,0,0,329, + 331,3,4,2,0,330,332,5,150,0,0,331,330,1,0,0,0,331,332,1,0,0,0,332, + 33,1,0,0,0,333,334,5,150,0,0,334,35,1,0,0,0,335,339,5,128,0,0,336, + 338,3,2,1,0,337,336,1,0,0,0,338,341,1,0,0,0,339,337,1,0,0,0,339, + 340,1,0,0,0,340,342,1,0,0,0,341,339,1,0,0,0,342,343,5,147,0,0,343, + 37,1,0,0,0,344,345,3,4,2,0,345,346,5,115,0,0,346,347,3,4,2,0,347, + 39,1,0,0,0,348,353,3,38,19,0,349,350,5,116,0,0,350,352,3,38,19,0, + 351,349,1,0,0,0,352,355,1,0,0,0,353,351,1,0,0,0,353,354,1,0,0,0, + 354,357,1,0,0,0,355,353,1,0,0,0,356,358,5,116,0,0,357,356,1,0,0, + 0,357,358,1,0,0,0,358,41,1,0,0,0,359,363,3,44,22,0,360,363,3,48, + 24,0,361,363,3,124,62,0,362,359,1,0,0,0,362,360,1,0,0,0,362,361, + 1,0,0,0,363,364,1,0,0,0,364,365,5,0,0,1,365,43,1,0,0,0,366,372,3, + 46,23,0,367,368,5,95,0,0,368,369,5,1,0,0,369,371,3,46,23,0,370,367, + 1,0,0,0,371,374,1,0,0,0,372,370,1,0,0,0,372,373,1,0,0,0,373,45,1, + 0,0,0,374,372,1,0,0,0,375,382,3,48,24,0,376,377,5,130,0,0,377,378, + 3,44,22,0,378,379,5,149,0,0,379,382,1,0,0,0,380,382,3,164,82,0,381, + 375,1,0,0,0,381,376,1,0,0,0,381,380,1,0,0,0,382,47,1,0,0,0,383,385, + 3,50,25,0,384,383,1,0,0,0,384,385,1,0,0,0,385,386,1,0,0,0,386,388, + 5,79,0,0,387,389,5,24,0,0,388,387,1,0,0,0,388,389,1,0,0,0,389,391, + 1,0,0,0,390,392,3,52,26,0,391,390,1,0,0,0,391,392,1,0,0,0,392,393, + 1,0,0,0,393,395,3,114,57,0,394,396,3,54,27,0,395,394,1,0,0,0,395, + 396,1,0,0,0,396,398,1,0,0,0,397,399,3,56,28,0,398,397,1,0,0,0,398, + 399,1,0,0,0,399,401,1,0,0,0,400,402,3,60,30,0,401,400,1,0,0,0,401, + 402,1,0,0,0,402,404,1,0,0,0,403,405,3,62,31,0,404,403,1,0,0,0,404, + 405,1,0,0,0,405,407,1,0,0,0,406,408,3,64,32,0,407,406,1,0,0,0,407, + 408,1,0,0,0,408,411,1,0,0,0,409,410,5,102,0,0,410,412,7,0,0,0,411, + 409,1,0,0,0,411,412,1,0,0,0,412,415,1,0,0,0,413,414,5,102,0,0,414, + 416,5,89,0,0,415,413,1,0,0,0,415,416,1,0,0,0,416,418,1,0,0,0,417, + 419,3,66,33,0,418,417,1,0,0,0,418,419,1,0,0,0,419,421,1,0,0,0,420, + 422,3,58,29,0,421,420,1,0,0,0,421,422,1,0,0,0,422,424,1,0,0,0,423, + 425,3,68,34,0,424,423,1,0,0,0,424,425,1,0,0,0,425,428,1,0,0,0,426, + 429,3,72,36,0,427,429,3,74,37,0,428,426,1,0,0,0,428,427,1,0,0,0, + 428,429,1,0,0,0,429,431,1,0,0,0,430,432,3,76,38,0,431,430,1,0,0, + 0,431,432,1,0,0,0,432,49,1,0,0,0,433,434,5,102,0,0,434,435,3,128, + 64,0,435,51,1,0,0,0,436,437,5,88,0,0,437,440,5,108,0,0,438,439,5, + 102,0,0,439,441,5,85,0,0,440,438,1,0,0,0,440,441,1,0,0,0,441,53, + 1,0,0,0,442,443,5,34,0,0,443,444,3,78,39,0,444,55,1,0,0,0,445,447, + 7,1,0,0,446,445,1,0,0,0,446,447,1,0,0,0,447,448,1,0,0,0,448,449, + 5,5,0,0,449,450,5,47,0,0,450,451,3,114,57,0,451,57,1,0,0,0,452,453, 5,101,0,0,453,454,3,160,80,0,454,455,5,6,0,0,455,456,5,130,0,0,456, 457,3,98,49,0,457,467,5,149,0,0,458,459,5,116,0,0,459,460,3,160, 80,0,460,461,5,6,0,0,461,462,5,130,0,0,462,463,3,98,49,0,463,464, @@ -453,78 +453,79 @@ def serializedATN(): 0,0,1090,1094,3,160,80,0,1091,1093,3,126,63,0,1092,1091,1,0,0,0, 1093,1096,1,0,0,0,1094,1092,1,0,0,0,1094,1095,1,0,0,0,1095,1097, 1,0,0,0,1096,1094,1,0,0,0,1097,1098,5,151,0,0,1098,1099,5,124,0, - 0,1099,1118,1,0,0,0,1100,1101,5,132,0,0,1101,1105,3,160,80,0,1102, + 0,1099,1122,1,0,0,0,1100,1101,5,132,0,0,1101,1105,3,160,80,0,1102, 1104,3,126,63,0,1103,1102,1,0,0,0,1104,1107,1,0,0,0,1105,1103,1, 0,0,0,1105,1106,1,0,0,0,1106,1108,1,0,0,0,1107,1105,1,0,0,0,1108, - 1110,5,124,0,0,1109,1111,3,124,62,0,1110,1109,1,0,0,0,1110,1111, - 1,0,0,0,1111,1112,1,0,0,0,1112,1113,5,132,0,0,1113,1114,5,151,0, - 0,1114,1115,3,160,80,0,1115,1116,5,124,0,0,1116,1118,1,0,0,0,1117, - 1089,1,0,0,0,1117,1100,1,0,0,0,1118,125,1,0,0,0,1119,1120,3,160, - 80,0,1120,1121,5,122,0,0,1121,1122,3,166,83,0,1122,1131,1,0,0,0, - 1123,1124,3,160,80,0,1124,1125,5,122,0,0,1125,1126,5,128,0,0,1126, - 1127,3,116,58,0,1127,1128,5,147,0,0,1128,1131,1,0,0,0,1129,1131, - 3,160,80,0,1130,1119,1,0,0,0,1130,1123,1,0,0,0,1130,1129,1,0,0,0, - 1131,127,1,0,0,0,1132,1137,3,130,65,0,1133,1134,5,116,0,0,1134,1136, - 3,130,65,0,1135,1133,1,0,0,0,1136,1139,1,0,0,0,1137,1135,1,0,0,0, - 1137,1138,1,0,0,0,1138,1141,1,0,0,0,1139,1137,1,0,0,0,1140,1142, - 5,116,0,0,1141,1140,1,0,0,0,1141,1142,1,0,0,0,1142,129,1,0,0,0,1143, - 1144,3,160,80,0,1144,1145,5,6,0,0,1145,1146,5,130,0,0,1146,1147, - 3,44,22,0,1147,1148,5,149,0,0,1148,1154,1,0,0,0,1149,1150,3,116, - 58,0,1150,1151,5,6,0,0,1151,1152,3,160,80,0,1152,1154,1,0,0,0,1153, - 1143,1,0,0,0,1153,1149,1,0,0,0,1154,131,1,0,0,0,1155,1163,3,164, - 82,0,1156,1157,3,140,70,0,1157,1158,5,120,0,0,1158,1160,1,0,0,0, - 1159,1156,1,0,0,0,1159,1160,1,0,0,0,1160,1161,1,0,0,0,1161,1163, - 3,134,67,0,1162,1155,1,0,0,0,1162,1159,1,0,0,0,1163,133,1,0,0,0, - 1164,1169,3,160,80,0,1165,1166,5,120,0,0,1166,1168,3,160,80,0,1167, - 1165,1,0,0,0,1168,1171,1,0,0,0,1169,1167,1,0,0,0,1169,1170,1,0,0, - 0,1170,135,1,0,0,0,1171,1169,1,0,0,0,1172,1173,6,68,-1,0,1173,1182, - 3,140,70,0,1174,1182,3,138,69,0,1175,1176,5,130,0,0,1176,1177,3, - 44,22,0,1177,1178,5,149,0,0,1178,1182,1,0,0,0,1179,1182,3,124,62, - 0,1180,1182,3,164,82,0,1181,1172,1,0,0,0,1181,1174,1,0,0,0,1181, - 1175,1,0,0,0,1181,1179,1,0,0,0,1181,1180,1,0,0,0,1182,1191,1,0,0, - 0,1183,1187,10,3,0,0,1184,1188,3,158,79,0,1185,1186,5,6,0,0,1186, - 1188,3,160,80,0,1187,1184,1,0,0,0,1187,1185,1,0,0,0,1188,1190,1, - 0,0,0,1189,1183,1,0,0,0,1190,1193,1,0,0,0,1191,1189,1,0,0,0,1191, - 1192,1,0,0,0,1192,137,1,0,0,0,1193,1191,1,0,0,0,1194,1195,3,160, - 80,0,1195,1197,5,130,0,0,1196,1198,3,142,71,0,1197,1196,1,0,0,0, - 1197,1198,1,0,0,0,1198,1199,1,0,0,0,1199,1200,5,149,0,0,1200,139, - 1,0,0,0,1201,1202,3,144,72,0,1202,1203,5,120,0,0,1203,1205,1,0,0, - 0,1204,1201,1,0,0,0,1204,1205,1,0,0,0,1205,1206,1,0,0,0,1206,1207, - 3,160,80,0,1207,141,1,0,0,0,1208,1213,3,116,58,0,1209,1210,5,116, - 0,0,1210,1212,3,116,58,0,1211,1209,1,0,0,0,1212,1215,1,0,0,0,1213, - 1211,1,0,0,0,1213,1214,1,0,0,0,1214,1217,1,0,0,0,1215,1213,1,0,0, - 0,1216,1218,5,116,0,0,1217,1216,1,0,0,0,1217,1218,1,0,0,0,1218,143, - 1,0,0,0,1219,1220,3,160,80,0,1220,145,1,0,0,0,1221,1230,5,106,0, - 0,1222,1223,5,120,0,0,1223,1230,7,11,0,0,1224,1225,5,108,0,0,1225, - 1227,5,120,0,0,1226,1228,7,11,0,0,1227,1226,1,0,0,0,1227,1228,1, - 0,0,0,1228,1230,1,0,0,0,1229,1221,1,0,0,0,1229,1222,1,0,0,0,1229, - 1224,1,0,0,0,1230,147,1,0,0,0,1231,1233,7,12,0,0,1232,1231,1,0,0, - 0,1232,1233,1,0,0,0,1233,1240,1,0,0,0,1234,1241,3,146,73,0,1235, - 1241,5,107,0,0,1236,1241,5,108,0,0,1237,1241,5,109,0,0,1238,1241, - 5,43,0,0,1239,1241,5,57,0,0,1240,1234,1,0,0,0,1240,1235,1,0,0,0, - 1240,1236,1,0,0,0,1240,1237,1,0,0,0,1240,1238,1,0,0,0,1240,1239, - 1,0,0,0,1241,149,1,0,0,0,1242,1246,3,148,74,0,1243,1246,5,110,0, - 0,1244,1246,5,59,0,0,1245,1242,1,0,0,0,1245,1243,1,0,0,0,1245,1244, - 1,0,0,0,1246,151,1,0,0,0,1247,1248,7,13,0,0,1248,153,1,0,0,0,1249, - 1250,7,14,0,0,1250,155,1,0,0,0,1251,1252,7,15,0,0,1252,157,1,0,0, - 0,1253,1256,5,105,0,0,1254,1256,3,156,78,0,1255,1253,1,0,0,0,1255, - 1254,1,0,0,0,1256,159,1,0,0,0,1257,1261,5,105,0,0,1258,1261,3,152, - 76,0,1259,1261,3,154,77,0,1260,1257,1,0,0,0,1260,1258,1,0,0,0,1260, - 1259,1,0,0,0,1261,161,1,0,0,0,1262,1263,3,166,83,0,1263,1264,5,122, - 0,0,1264,1265,3,148,74,0,1265,163,1,0,0,0,1266,1267,5,128,0,0,1267, - 1268,3,160,80,0,1268,1269,5,147,0,0,1269,165,1,0,0,0,1270,1273,5, - 110,0,0,1271,1273,3,168,84,0,1272,1270,1,0,0,0,1272,1271,1,0,0,0, - 1273,167,1,0,0,0,1274,1278,5,142,0,0,1275,1277,3,170,85,0,1276,1275, - 1,0,0,0,1277,1280,1,0,0,0,1278,1276,1,0,0,0,1278,1279,1,0,0,0,1279, - 1281,1,0,0,0,1280,1278,1,0,0,0,1281,1282,5,144,0,0,1282,169,1,0, - 0,0,1283,1284,5,157,0,0,1284,1285,3,116,58,0,1285,1286,5,147,0,0, - 1286,1289,1,0,0,0,1287,1289,5,156,0,0,1288,1283,1,0,0,0,1288,1287, - 1,0,0,0,1289,171,1,0,0,0,1290,1294,5,143,0,0,1291,1293,3,174,87, - 0,1292,1291,1,0,0,0,1293,1296,1,0,0,0,1294,1292,1,0,0,0,1294,1295, - 1,0,0,0,1295,1297,1,0,0,0,1296,1294,1,0,0,0,1297,1298,5,0,0,1,1298, - 173,1,0,0,0,1299,1300,5,159,0,0,1300,1301,3,116,58,0,1301,1302,5, - 147,0,0,1302,1305,1,0,0,0,1303,1305,5,158,0,0,1304,1299,1,0,0,0, - 1304,1303,1,0,0,0,1305,175,1,0,0,0,168,179,186,195,202,206,220,224, + 1114,5,124,0,0,1109,1115,3,124,62,0,1110,1111,5,128,0,0,1111,1112, + 3,116,58,0,1112,1113,5,147,0,0,1113,1115,1,0,0,0,1114,1109,1,0,0, + 0,1114,1110,1,0,0,0,1114,1115,1,0,0,0,1115,1116,1,0,0,0,1116,1117, + 5,132,0,0,1117,1118,5,151,0,0,1118,1119,3,160,80,0,1119,1120,5,124, + 0,0,1120,1122,1,0,0,0,1121,1089,1,0,0,0,1121,1100,1,0,0,0,1122,125, + 1,0,0,0,1123,1124,3,160,80,0,1124,1125,5,122,0,0,1125,1126,3,166, + 83,0,1126,1135,1,0,0,0,1127,1128,3,160,80,0,1128,1129,5,122,0,0, + 1129,1130,5,128,0,0,1130,1131,3,116,58,0,1131,1132,5,147,0,0,1132, + 1135,1,0,0,0,1133,1135,3,160,80,0,1134,1123,1,0,0,0,1134,1127,1, + 0,0,0,1134,1133,1,0,0,0,1135,127,1,0,0,0,1136,1141,3,130,65,0,1137, + 1138,5,116,0,0,1138,1140,3,130,65,0,1139,1137,1,0,0,0,1140,1143, + 1,0,0,0,1141,1139,1,0,0,0,1141,1142,1,0,0,0,1142,1145,1,0,0,0,1143, + 1141,1,0,0,0,1144,1146,5,116,0,0,1145,1144,1,0,0,0,1145,1146,1,0, + 0,0,1146,129,1,0,0,0,1147,1148,3,160,80,0,1148,1149,5,6,0,0,1149, + 1150,5,130,0,0,1150,1151,3,44,22,0,1151,1152,5,149,0,0,1152,1158, + 1,0,0,0,1153,1154,3,116,58,0,1154,1155,5,6,0,0,1155,1156,3,160,80, + 0,1156,1158,1,0,0,0,1157,1147,1,0,0,0,1157,1153,1,0,0,0,1158,131, + 1,0,0,0,1159,1167,3,164,82,0,1160,1161,3,140,70,0,1161,1162,5,120, + 0,0,1162,1164,1,0,0,0,1163,1160,1,0,0,0,1163,1164,1,0,0,0,1164,1165, + 1,0,0,0,1165,1167,3,134,67,0,1166,1159,1,0,0,0,1166,1163,1,0,0,0, + 1167,133,1,0,0,0,1168,1173,3,160,80,0,1169,1170,5,120,0,0,1170,1172, + 3,160,80,0,1171,1169,1,0,0,0,1172,1175,1,0,0,0,1173,1171,1,0,0,0, + 1173,1174,1,0,0,0,1174,135,1,0,0,0,1175,1173,1,0,0,0,1176,1177,6, + 68,-1,0,1177,1186,3,140,70,0,1178,1186,3,138,69,0,1179,1180,5,130, + 0,0,1180,1181,3,44,22,0,1181,1182,5,149,0,0,1182,1186,1,0,0,0,1183, + 1186,3,124,62,0,1184,1186,3,164,82,0,1185,1176,1,0,0,0,1185,1178, + 1,0,0,0,1185,1179,1,0,0,0,1185,1183,1,0,0,0,1185,1184,1,0,0,0,1186, + 1195,1,0,0,0,1187,1191,10,3,0,0,1188,1192,3,158,79,0,1189,1190,5, + 6,0,0,1190,1192,3,160,80,0,1191,1188,1,0,0,0,1191,1189,1,0,0,0,1192, + 1194,1,0,0,0,1193,1187,1,0,0,0,1194,1197,1,0,0,0,1195,1193,1,0,0, + 0,1195,1196,1,0,0,0,1196,137,1,0,0,0,1197,1195,1,0,0,0,1198,1199, + 3,160,80,0,1199,1201,5,130,0,0,1200,1202,3,142,71,0,1201,1200,1, + 0,0,0,1201,1202,1,0,0,0,1202,1203,1,0,0,0,1203,1204,5,149,0,0,1204, + 139,1,0,0,0,1205,1206,3,144,72,0,1206,1207,5,120,0,0,1207,1209,1, + 0,0,0,1208,1205,1,0,0,0,1208,1209,1,0,0,0,1209,1210,1,0,0,0,1210, + 1211,3,160,80,0,1211,141,1,0,0,0,1212,1217,3,116,58,0,1213,1214, + 5,116,0,0,1214,1216,3,116,58,0,1215,1213,1,0,0,0,1216,1219,1,0,0, + 0,1217,1215,1,0,0,0,1217,1218,1,0,0,0,1218,1221,1,0,0,0,1219,1217, + 1,0,0,0,1220,1222,5,116,0,0,1221,1220,1,0,0,0,1221,1222,1,0,0,0, + 1222,143,1,0,0,0,1223,1224,3,160,80,0,1224,145,1,0,0,0,1225,1234, + 5,106,0,0,1226,1227,5,120,0,0,1227,1234,7,11,0,0,1228,1229,5,108, + 0,0,1229,1231,5,120,0,0,1230,1232,7,11,0,0,1231,1230,1,0,0,0,1231, + 1232,1,0,0,0,1232,1234,1,0,0,0,1233,1225,1,0,0,0,1233,1226,1,0,0, + 0,1233,1228,1,0,0,0,1234,147,1,0,0,0,1235,1237,7,12,0,0,1236,1235, + 1,0,0,0,1236,1237,1,0,0,0,1237,1244,1,0,0,0,1238,1245,3,146,73,0, + 1239,1245,5,107,0,0,1240,1245,5,108,0,0,1241,1245,5,109,0,0,1242, + 1245,5,43,0,0,1243,1245,5,57,0,0,1244,1238,1,0,0,0,1244,1239,1,0, + 0,0,1244,1240,1,0,0,0,1244,1241,1,0,0,0,1244,1242,1,0,0,0,1244,1243, + 1,0,0,0,1245,149,1,0,0,0,1246,1250,3,148,74,0,1247,1250,5,110,0, + 0,1248,1250,5,59,0,0,1249,1246,1,0,0,0,1249,1247,1,0,0,0,1249,1248, + 1,0,0,0,1250,151,1,0,0,0,1251,1252,7,13,0,0,1252,153,1,0,0,0,1253, + 1254,7,14,0,0,1254,155,1,0,0,0,1255,1256,7,15,0,0,1256,157,1,0,0, + 0,1257,1260,5,105,0,0,1258,1260,3,156,78,0,1259,1257,1,0,0,0,1259, + 1258,1,0,0,0,1260,159,1,0,0,0,1261,1265,5,105,0,0,1262,1265,3,152, + 76,0,1263,1265,3,154,77,0,1264,1261,1,0,0,0,1264,1262,1,0,0,0,1264, + 1263,1,0,0,0,1265,161,1,0,0,0,1266,1267,3,166,83,0,1267,1268,5,122, + 0,0,1268,1269,3,148,74,0,1269,163,1,0,0,0,1270,1271,5,128,0,0,1271, + 1272,3,160,80,0,1272,1273,5,147,0,0,1273,165,1,0,0,0,1274,1277,5, + 110,0,0,1275,1277,3,168,84,0,1276,1274,1,0,0,0,1276,1275,1,0,0,0, + 1277,167,1,0,0,0,1278,1282,5,142,0,0,1279,1281,3,170,85,0,1280,1279, + 1,0,0,0,1281,1284,1,0,0,0,1282,1280,1,0,0,0,1282,1283,1,0,0,0,1283, + 1285,1,0,0,0,1284,1282,1,0,0,0,1285,1286,5,144,0,0,1286,169,1,0, + 0,0,1287,1288,5,157,0,0,1288,1289,3,116,58,0,1289,1290,5,147,0,0, + 1290,1293,1,0,0,0,1291,1293,5,156,0,0,1292,1287,1,0,0,0,1292,1291, + 1,0,0,0,1293,171,1,0,0,0,1294,1298,5,143,0,0,1295,1297,3,174,87, + 0,1296,1295,1,0,0,0,1297,1300,1,0,0,0,1298,1296,1,0,0,0,1298,1299, + 1,0,0,0,1299,1301,1,0,0,0,1300,1298,1,0,0,0,1301,1302,5,0,0,1,1302, + 173,1,0,0,0,1303,1304,5,159,0,0,1304,1305,3,116,58,0,1305,1306,5, + 147,0,0,1306,1309,1,0,0,0,1307,1309,5,158,0,0,1308,1303,1,0,0,0, + 1308,1307,1,0,0,0,1309,175,1,0,0,0,168,179,186,195,202,206,220,224, 227,231,234,241,245,254,259,268,276,283,287,293,298,306,313,319, 331,339,353,357,362,372,381,384,388,391,395,398,401,404,407,411, 415,418,421,424,428,431,440,446,467,484,501,507,513,524,526,537, @@ -533,9 +534,9 @@ def serializedATN(): 698,712,728,732,743,747,758,762,769,773,780,784,789,798,802,826, 843,849,852,855,865,871,874,877,885,888,892,895,909,926,931,935, 941,948,960,964,967,976,990,1029,1037,1039,1041,1049,1053,1057,1065, - 1069,1078,1082,1084,1094,1105,1110,1117,1130,1137,1141,1153,1159, - 1162,1169,1181,1187,1191,1197,1204,1213,1217,1227,1229,1232,1240, - 1245,1255,1260,1272,1278,1288,1294,1304 + 1069,1078,1082,1084,1094,1105,1114,1121,1134,1141,1145,1157,1163, + 1166,1173,1185,1191,1195,1201,1208,1217,1221,1231,1233,1236,1244, + 1249,1259,1264,1276,1282,1292,1298,1308 ] class HogQLParser ( Parser ): @@ -7890,6 +7891,13 @@ def hogqlxTagAttribute(self, i:int=None): def hogqlxTagElement(self): return self.getTypedRuleContext(HogQLParser.HogqlxTagElementContext,0) + def LBRACE(self): + return self.getToken(HogQLParser.LBRACE, 0) + def columnExpr(self): + return self.getTypedRuleContext(HogQLParser.ColumnExprContext,0) + + def RBRACE(self): + return self.getToken(HogQLParser.RBRACE, 0) def accept(self, visitor:ParseTreeVisitor): if hasattr( visitor, "visitHogqlxTagElementNested" ): @@ -7905,7 +7913,7 @@ def hogqlxTagElement(self): self.enterRule(localctx, 124, self.RULE_hogqlxTagElement) self._la = 0 # Token type try: - self.state = 1117 + self.state = 1121 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,141,self._ctx) if la_ == 1: @@ -7950,21 +7958,29 @@ def hogqlxTagElement(self): self.state = 1108 self.match(HogQLParser.GT) - self.state = 1110 + self.state = 1114 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,140,self._ctx) if la_ == 1: self.state = 1109 self.hogqlxTagElement() + elif la_ == 2: + self.state = 1110 + self.match(HogQLParser.LBRACE) + self.state = 1111 + self.columnExpr(0) + self.state = 1112 + self.match(HogQLParser.RBRACE) + - self.state = 1112 + self.state = 1116 self.match(HogQLParser.LT) - self.state = 1113 + self.state = 1117 self.match(HogQLParser.SLASH) - self.state = 1114 + self.state = 1118 self.identifier() - self.state = 1115 + self.state = 1119 self.match(HogQLParser.GT) pass @@ -8023,36 +8039,36 @@ def hogqlxTagAttribute(self): localctx = HogQLParser.HogqlxTagAttributeContext(self, self._ctx, self.state) self.enterRule(localctx, 126, self.RULE_hogqlxTagAttribute) try: - self.state = 1130 + self.state = 1134 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,142,self._ctx) if la_ == 1: self.enterOuterAlt(localctx, 1) - self.state = 1119 + self.state = 1123 self.identifier() - self.state = 1120 + self.state = 1124 self.match(HogQLParser.EQ_SINGLE) - self.state = 1121 + self.state = 1125 self.string() pass elif la_ == 2: self.enterOuterAlt(localctx, 2) - self.state = 1123 + self.state = 1127 self.identifier() - self.state = 1124 + self.state = 1128 self.match(HogQLParser.EQ_SINGLE) - self.state = 1125 + self.state = 1129 self.match(HogQLParser.LBRACE) - self.state = 1126 + self.state = 1130 self.columnExpr(0) - self.state = 1127 + self.state = 1131 self.match(HogQLParser.RBRACE) pass elif la_ == 3: self.enterOuterAlt(localctx, 3) - self.state = 1129 + self.state = 1133 self.identifier() pass @@ -8105,26 +8121,26 @@ def withExprList(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 1132 + self.state = 1136 self.withExpr() - self.state = 1137 + self.state = 1141 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,143,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 1133 + self.state = 1137 self.match(HogQLParser.COMMA) - self.state = 1134 + self.state = 1138 self.withExpr() - self.state = 1139 + self.state = 1143 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,143,self._ctx) - self.state = 1141 + self.state = 1145 self._errHandler.sync(self) _la = self._input.LA(1) if _la==116: - self.state = 1140 + self.state = 1144 self.match(HogQLParser.COMMA) @@ -8208,32 +8224,32 @@ def withExpr(self): localctx = HogQLParser.WithExprContext(self, self._ctx, self.state) self.enterRule(localctx, 130, self.RULE_withExpr) try: - self.state = 1153 + self.state = 1157 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,145,self._ctx) if la_ == 1: localctx = HogQLParser.WithExprSubqueryContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 1143 + self.state = 1147 self.identifier() - self.state = 1144 + self.state = 1148 self.match(HogQLParser.AS) - self.state = 1145 + self.state = 1149 self.match(HogQLParser.LPAREN) - self.state = 1146 + self.state = 1150 self.selectUnionStmt() - self.state = 1147 + self.state = 1151 self.match(HogQLParser.RPAREN) pass elif la_ == 2: localctx = HogQLParser.WithExprColumnContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 1149 + self.state = 1153 self.columnExpr(0) - self.state = 1150 + self.state = 1154 self.match(HogQLParser.AS) - self.state = 1151 + self.state = 1155 self.identifier() pass @@ -8286,27 +8302,27 @@ def columnIdentifier(self): localctx = HogQLParser.ColumnIdentifierContext(self, self._ctx, self.state) self.enterRule(localctx, 132, self.RULE_columnIdentifier) try: - self.state = 1162 + self.state = 1166 self._errHandler.sync(self) token = self._input.LA(1) if token in [128]: self.enterOuterAlt(localctx, 1) - self.state = 1155 + self.state = 1159 self.placeholder() pass elif token in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 30, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 44, 45, 46, 47, 48, 49, 50, 51, 53, 54, 55, 56, 58, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 85, 86, 87, 88, 89, 90, 91, 92, 94, 95, 96, 97, 98, 99, 101, 102, 103, 105]: self.enterOuterAlt(localctx, 2) - self.state = 1159 + self.state = 1163 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,146,self._ctx) if la_ == 1: - self.state = 1156 + self.state = 1160 self.tableIdentifier() - self.state = 1157 + self.state = 1161 self.match(HogQLParser.DOT) - self.state = 1161 + self.state = 1165 self.nestedIdentifier() pass else: @@ -8359,18 +8375,18 @@ def nestedIdentifier(self): self.enterRule(localctx, 134, self.RULE_nestedIdentifier) try: self.enterOuterAlt(localctx, 1) - self.state = 1164 + self.state = 1168 self.identifier() - self.state = 1169 + self.state = 1173 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,148,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 1165 + self.state = 1169 self.match(HogQLParser.DOT) - self.state = 1166 + self.state = 1170 self.identifier() - self.state = 1171 + self.state = 1175 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,148,self._ctx) @@ -8523,7 +8539,7 @@ def tableExpr(self, _p:int=0): self.enterRecursionRule(localctx, 136, self.RULE_tableExpr, _p) try: self.enterOuterAlt(localctx, 1) - self.state = 1181 + self.state = 1185 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,149,self._ctx) if la_ == 1: @@ -8531,7 +8547,7 @@ def tableExpr(self, _p:int=0): self._ctx = localctx _prevctx = localctx - self.state = 1173 + self.state = 1177 self.tableIdentifier() pass @@ -8539,7 +8555,7 @@ def tableExpr(self, _p:int=0): localctx = HogQLParser.TableExprFunctionContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 1174 + self.state = 1178 self.tableFunctionExpr() pass @@ -8547,11 +8563,11 @@ def tableExpr(self, _p:int=0): localctx = HogQLParser.TableExprSubqueryContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 1175 + self.state = 1179 self.match(HogQLParser.LPAREN) - self.state = 1176 + self.state = 1180 self.selectUnionStmt() - self.state = 1177 + self.state = 1181 self.match(HogQLParser.RPAREN) pass @@ -8559,7 +8575,7 @@ def tableExpr(self, _p:int=0): localctx = HogQLParser.TableExprTagContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 1179 + self.state = 1183 self.hogqlxTagElement() pass @@ -8567,13 +8583,13 @@ def tableExpr(self, _p:int=0): localctx = HogQLParser.TableExprPlaceholderContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 1180 + self.state = 1184 self.placeholder() pass self._ctx.stop = self._input.LT(-1) - self.state = 1191 + self.state = 1195 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,151,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: @@ -8583,27 +8599,27 @@ def tableExpr(self, _p:int=0): _prevctx = localctx localctx = HogQLParser.TableExprAliasContext(self, HogQLParser.TableExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_tableExpr) - self.state = 1183 + self.state = 1187 if not self.precpred(self._ctx, 3): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") - self.state = 1187 + self.state = 1191 self._errHandler.sync(self) token = self._input.LA(1) if token in [20, 30, 39, 48, 105]: - self.state = 1184 + self.state = 1188 self.alias() pass elif token in [6]: - self.state = 1185 + self.state = 1189 self.match(HogQLParser.AS) - self.state = 1186 + self.state = 1190 self.identifier() pass else: raise NoViableAltException(self) - self.state = 1193 + self.state = 1197 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,151,self._ctx) @@ -8656,19 +8672,19 @@ def tableFunctionExpr(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 1194 + self.state = 1198 self.identifier() - self.state = 1195 + self.state = 1199 self.match(HogQLParser.LPAREN) - self.state = 1197 + self.state = 1201 self._errHandler.sync(self) _la = self._input.LA(1) if (((_la) & ~0x3f) == 0 and ((1 << _la) & -4503602311741442) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & 90493036243451903) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & 18455) != 0): - self.state = 1196 + self.state = 1200 self.tableArgList() - self.state = 1199 + self.state = 1203 self.match(HogQLParser.RPAREN) except RecognitionException as re: localctx.exception = re @@ -8715,17 +8731,17 @@ def tableIdentifier(self): self.enterRule(localctx, 140, self.RULE_tableIdentifier) try: self.enterOuterAlt(localctx, 1) - self.state = 1204 + self.state = 1208 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,153,self._ctx) if la_ == 1: - self.state = 1201 + self.state = 1205 self.databaseIdentifier() - self.state = 1202 + self.state = 1206 self.match(HogQLParser.DOT) - self.state = 1206 + self.state = 1210 self.identifier() except RecognitionException as re: localctx.exception = re @@ -8775,26 +8791,26 @@ def tableArgList(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 1208 + self.state = 1212 self.columnExpr(0) - self.state = 1213 + self.state = 1217 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,154,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 1209 + self.state = 1213 self.match(HogQLParser.COMMA) - self.state = 1210 + self.state = 1214 self.columnExpr(0) - self.state = 1215 + self.state = 1219 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,154,self._ctx) - self.state = 1217 + self.state = 1221 self._errHandler.sync(self) _la = self._input.LA(1) if _la==116: - self.state = 1216 + self.state = 1220 self.match(HogQLParser.COMMA) @@ -8836,7 +8852,7 @@ def databaseIdentifier(self): self.enterRule(localctx, 144, self.RULE_databaseIdentifier) try: self.enterOuterAlt(localctx, 1) - self.state = 1219 + self.state = 1223 self.identifier() except RecognitionException as re: localctx.exception = re @@ -8887,19 +8903,19 @@ def floatingLiteral(self): self.enterRule(localctx, 146, self.RULE_floatingLiteral) self._la = 0 # Token type try: - self.state = 1229 + self.state = 1233 self._errHandler.sync(self) token = self._input.LA(1) if token in [106]: self.enterOuterAlt(localctx, 1) - self.state = 1221 + self.state = 1225 self.match(HogQLParser.FLOATING_LITERAL) pass elif token in [120]: self.enterOuterAlt(localctx, 2) - self.state = 1222 + self.state = 1226 self.match(HogQLParser.DOT) - self.state = 1223 + self.state = 1227 _la = self._input.LA(1) if not(_la==107 or _la==108): self._errHandler.recoverInline(self) @@ -8909,15 +8925,15 @@ def floatingLiteral(self): pass elif token in [108]: self.enterOuterAlt(localctx, 3) - self.state = 1224 + self.state = 1228 self.match(HogQLParser.DECIMAL_LITERAL) - self.state = 1225 + self.state = 1229 self.match(HogQLParser.DOT) - self.state = 1227 + self.state = 1231 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,156,self._ctx) if la_ == 1: - self.state = 1226 + self.state = 1230 _la = self._input.LA(1) if not(_la==107 or _la==108): self._errHandler.recoverInline(self) @@ -8990,11 +9006,11 @@ def numberLiteral(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 1232 + self.state = 1236 self._errHandler.sync(self) _la = self._input.LA(1) if _la==118 or _la==139: - self.state = 1231 + self.state = 1235 _la = self._input.LA(1) if not(_la==118 or _la==139): self._errHandler.recoverInline(self) @@ -9003,36 +9019,36 @@ def numberLiteral(self): self.consume() - self.state = 1240 + self.state = 1244 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,159,self._ctx) if la_ == 1: - self.state = 1234 + self.state = 1238 self.floatingLiteral() pass elif la_ == 2: - self.state = 1235 + self.state = 1239 self.match(HogQLParser.OCTAL_LITERAL) pass elif la_ == 3: - self.state = 1236 + self.state = 1240 self.match(HogQLParser.DECIMAL_LITERAL) pass elif la_ == 4: - self.state = 1237 + self.state = 1241 self.match(HogQLParser.HEXADECIMAL_LITERAL) pass elif la_ == 5: - self.state = 1238 + self.state = 1242 self.match(HogQLParser.INF) pass elif la_ == 6: - self.state = 1239 + self.state = 1243 self.match(HogQLParser.NAN_SQL) pass @@ -9080,22 +9096,22 @@ def literal(self): localctx = HogQLParser.LiteralContext(self, self._ctx, self.state) self.enterRule(localctx, 150, self.RULE_literal) try: - self.state = 1245 + self.state = 1249 self._errHandler.sync(self) token = self._input.LA(1) if token in [43, 57, 106, 107, 108, 109, 118, 120, 139]: self.enterOuterAlt(localctx, 1) - self.state = 1242 + self.state = 1246 self.numberLiteral() pass elif token in [110]: self.enterOuterAlt(localctx, 2) - self.state = 1243 + self.state = 1247 self.match(HogQLParser.STRING_LITERAL) pass elif token in [59]: self.enterOuterAlt(localctx, 3) - self.state = 1244 + self.state = 1248 self.match(HogQLParser.NULL_SQL) pass else: @@ -9160,7 +9176,7 @@ def interval(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 1247 + self.state = 1251 _la = self._input.LA(1) if not((((_la) & ~0x3f) == 0 and ((1 << _la) & 108086665936896000) != 0) or ((((_la - 70)) & ~0x3f) == 0 and ((1 << (_la - 70)) & 8724152577) != 0)): self._errHandler.recoverInline(self) @@ -9457,7 +9473,7 @@ def keyword(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 1249 + self.state = 1253 _la = self._input.LA(1) if not((((_la) & ~0x3f) == 0 and ((1 << _la) & -833175004720939010) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & 471908466623) != 0)): self._errHandler.recoverInline(self) @@ -9511,7 +9527,7 @@ def keywordForAlias(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 1251 + self.state = 1255 _la = self._input.LA(1) if not((((_la) & ~0x3f) == 0 and ((1 << _la) & 282025807314944) != 0)): self._errHandler.recoverInline(self) @@ -9558,17 +9574,17 @@ def alias(self): localctx = HogQLParser.AliasContext(self, self._ctx, self.state) self.enterRule(localctx, 158, self.RULE_alias) try: - self.state = 1255 + self.state = 1259 self._errHandler.sync(self) token = self._input.LA(1) if token in [105]: self.enterOuterAlt(localctx, 1) - self.state = 1253 + self.state = 1257 self.match(HogQLParser.IDENTIFIER) pass elif token in [20, 30, 39, 48]: self.enterOuterAlt(localctx, 2) - self.state = 1254 + self.state = 1258 self.keywordForAlias() pass else: @@ -9618,22 +9634,22 @@ def identifier(self): localctx = HogQLParser.IdentifierContext(self, self._ctx, self.state) self.enterRule(localctx, 160, self.RULE_identifier) try: - self.state = 1260 + self.state = 1264 self._errHandler.sync(self) token = self._input.LA(1) if token in [105]: self.enterOuterAlt(localctx, 1) - self.state = 1257 + self.state = 1261 self.match(HogQLParser.IDENTIFIER) pass elif token in [21, 38, 55, 56, 70, 78, 97, 103]: self.enterOuterAlt(localctx, 2) - self.state = 1258 + self.state = 1262 self.interval() pass elif token in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25, 26, 27, 28, 30, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 44, 45, 46, 47, 48, 49, 50, 51, 53, 54, 58, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 71, 72, 73, 74, 75, 76, 77, 79, 80, 81, 82, 83, 85, 86, 87, 88, 89, 90, 91, 92, 94, 95, 96, 98, 99, 101, 102]: self.enterOuterAlt(localctx, 3) - self.state = 1259 + self.state = 1263 self.keyword() pass else: @@ -9684,11 +9700,11 @@ def enumValue(self): self.enterRule(localctx, 162, self.RULE_enumValue) try: self.enterOuterAlt(localctx, 1) - self.state = 1262 + self.state = 1266 self.string() - self.state = 1263 + self.state = 1267 self.match(HogQLParser.EQ_SINGLE) - self.state = 1264 + self.state = 1268 self.numberLiteral() except RecognitionException as re: localctx.exception = re @@ -9734,11 +9750,11 @@ def placeholder(self): self.enterRule(localctx, 164, self.RULE_placeholder) try: self.enterOuterAlt(localctx, 1) - self.state = 1266 + self.state = 1270 self.match(HogQLParser.LBRACE) - self.state = 1267 + self.state = 1271 self.identifier() - self.state = 1268 + self.state = 1272 self.match(HogQLParser.RBRACE) except RecognitionException as re: localctx.exception = re @@ -9780,17 +9796,17 @@ def string(self): localctx = HogQLParser.StringContext(self, self._ctx, self.state) self.enterRule(localctx, 166, self.RULE_string) try: - self.state = 1272 + self.state = 1276 self._errHandler.sync(self) token = self._input.LA(1) if token in [110]: self.enterOuterAlt(localctx, 1) - self.state = 1270 + self.state = 1274 self.match(HogQLParser.STRING_LITERAL) pass elif token in [142]: self.enterOuterAlt(localctx, 2) - self.state = 1271 + self.state = 1275 self.templateString() pass else: @@ -9844,19 +9860,19 @@ def templateString(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 1274 - self.match(HogQLParser.QUOTE_SINGLE_TEMPLATE) self.state = 1278 + self.match(HogQLParser.QUOTE_SINGLE_TEMPLATE) + self.state = 1282 self._errHandler.sync(self) _la = self._input.LA(1) while _la==156 or _la==157: - self.state = 1275 + self.state = 1279 self.stringContents() - self.state = 1280 + self.state = 1284 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 1281 + self.state = 1285 self.match(HogQLParser.QUOTE_SINGLE) except RecognitionException as re: localctx.exception = re @@ -9904,21 +9920,21 @@ def stringContents(self): localctx = HogQLParser.StringContentsContext(self, self._ctx, self.state) self.enterRule(localctx, 170, self.RULE_stringContents) try: - self.state = 1288 + self.state = 1292 self._errHandler.sync(self) token = self._input.LA(1) if token in [157]: self.enterOuterAlt(localctx, 1) - self.state = 1283 + self.state = 1287 self.match(HogQLParser.STRING_ESCAPE_TRIGGER) - self.state = 1284 + self.state = 1288 self.columnExpr(0) - self.state = 1285 + self.state = 1289 self.match(HogQLParser.RBRACE) pass elif token in [156]: self.enterOuterAlt(localctx, 2) - self.state = 1287 + self.state = 1291 self.match(HogQLParser.STRING_TEXT) pass else: @@ -9972,19 +9988,19 @@ def fullTemplateString(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 1290 - self.match(HogQLParser.QUOTE_SINGLE_TEMPLATE_FULL) self.state = 1294 + self.match(HogQLParser.QUOTE_SINGLE_TEMPLATE_FULL) + self.state = 1298 self._errHandler.sync(self) _la = self._input.LA(1) while _la==158 or _la==159: - self.state = 1291 + self.state = 1295 self.stringContentsFull() - self.state = 1296 + self.state = 1300 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 1297 + self.state = 1301 self.match(HogQLParser.EOF) except RecognitionException as re: localctx.exception = re @@ -10032,21 +10048,21 @@ def stringContentsFull(self): localctx = HogQLParser.StringContentsFullContext(self, self._ctx, self.state) self.enterRule(localctx, 174, self.RULE_stringContentsFull) try: - self.state = 1304 + self.state = 1308 self._errHandler.sync(self) token = self._input.LA(1) if token in [159]: self.enterOuterAlt(localctx, 1) - self.state = 1299 + self.state = 1303 self.match(HogQLParser.FULL_STRING_ESCAPE_TRIGGER) - self.state = 1300 + self.state = 1304 self.columnExpr(0) - self.state = 1301 + self.state = 1305 self.match(HogQLParser.RBRACE) pass elif token in [158]: self.enterOuterAlt(localctx, 2) - self.state = 1303 + self.state = 1307 self.match(HogQLParser.FULL_STRING_TEXT) pass else: diff --git a/posthog/hogql/hogqlx.py b/posthog/hogql/hogqlx.py index 3971c19f74cfb..81fb926eff1d4 100644 --- a/posthog/hogql/hogqlx.py +++ b/posthog/hogql/hogqlx.py @@ -2,7 +2,7 @@ from posthog.hogql import ast -HOGQLX_COMPONENTS = ["Sparkline"] +HOGQLX_COMPONENTS = ["Sparkline", "a", "em", "strong"] def convert_tag_to_hx(node: ast.HogQLXTag) -> ast.Tuple: diff --git a/posthog/hogql/parser.py b/posthog/hogql/parser.py index abcee4afb811f..a056d9fc682f6 100644 --- a/posthog/hogql/parser.py +++ b/posthog/hogql/parser.py @@ -1102,6 +1102,12 @@ def visitHogqlxTagElementNested(self, ctx: HogQLParser.HogqlxTagElementNestedCon if a.name == "source": raise SyntaxError(f"Nested HogQLX tags cannot have a source attribute") attributes.append(ast.HogQLXAttribute(name="source", value=source)) + if ctx.columnExpr(): + source = self.visit(ctx.columnExpr()) + for a in attributes: + if a.name == "source": + raise SyntaxError(f"Nested HogQLX tags cannot have a source attribute") + attributes.append(ast.HogQLXAttribute(name="source", value=source)) return ast.HogQLXTag(kind=opening, attributes=attributes) def visitHogqlxTagAttribute(self, ctx: HogQLParser.HogqlxTagAttributeContext): diff --git a/posthog/hogql/test/_test_parser.py b/posthog/hogql/test/_test_parser.py index 7de193fa458ff..e612a156762e6 100644 --- a/posthog/hogql/test/_test_parser.py +++ b/posthog/hogql/test/_test_parser.py @@ -1704,6 +1704,19 @@ def test_visit_hogqlx_tag_source(self): ], ) + def test_visit_hogqlx_tag_column_source(self): + query = """ + select
{event} from events + """ + node = self._select(query) + assert isinstance(node, ast.SelectQuery) and cast(ast.HogQLXTag, node.select[0]) == ast.HogQLXTag( + kind="a", + attributes=[ + ast.HogQLXAttribute(name="href", value=Constant(value="https://google.com")), + ast.HogQLXAttribute(name="source", value=ast.Field(chain=["event"])), + ], + ) + def test_select_extract_as_function(self): node = self._select("select extract('string', 'other string') from events") diff --git a/requirements.in b/requirements.in index b6433de6366a8..c4c1e2358af9c 100644 --- a/requirements.in +++ b/requirements.in @@ -95,7 +95,7 @@ phonenumberslite==8.13.6 openai==1.10.0 tiktoken==0.6.0 nh3==0.2.14 -hogql-parser==1.0.31 +hogql-parser==1.0.32 zxcvbn==4.4.28 zstd==1.5.5.1 xmlsec==1.3.13 # Do not change this version - it will break SAML diff --git a/requirements.txt b/requirements.txt index 50039323b0e50..70023bd9d8a9a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -271,7 +271,7 @@ h11==0.13.0 # wsproto hexbytes==1.0.0 # via dlt -hogql-parser==1.0.31 +hogql-parser==1.0.32 # via -r requirements.in httpcore==1.0.2 # via httpx From 37589d6fc0105403a0a02f511621eadfd6349dfa Mon Sep 17 00:00:00 2001 From: Ben White Date: Fri, 26 Jul 2024 15:06:27 +0200 Subject: [PATCH 21/24] feat: Add inline plugin icons (#24023) --- .../public/transformations/semver-flattener.png | Bin 0 -> 11204 bytes frontend/src/scenes/pipeline/utils.tsx | 2 +- .../src/scenes/plugins/plugin/PluginImage.tsx | 10 +++++++++- 3 files changed, 10 insertions(+), 2 deletions(-) create mode 100644 frontend/public/transformations/semver-flattener.png diff --git a/frontend/public/transformations/semver-flattener.png b/frontend/public/transformations/semver-flattener.png new file mode 100644 index 0000000000000000000000000000000000000000..fe9f1eb7acc574066bc6653df23eea72ed0fc533 GIT binary patch literal 11204 zcma)iWl$YW)aG3D;ty@?rY(T@PY94;p*rr`=Y znUMlP0c@b^*bvXfgL2ybU4%Z=&OW%l|*oboSIzaV2!;wb4+1+>*mE z%{5k2R&nf>VR$>8&|C#IVbP56Aw{ssoY-HpX*8(J?)urfCXc(rSM_g>-pCWcVU2$U^b1+`vlT%Jz|5LzPz~bwM%;C zn!IUa%&n%I%}Usk7f&*@s-OhJV?y67abGG#M2H%b6LuUpF9ygK{rj|4%?H#sHZDM+ zHZJRFURS0nZKt?6ZVrcJ86PZ!C}^*n2{|k~h+DkYza`rVQTQnP3JdN6kx`dGR zt!qI@&rN!4@{&>DEQS5Wtg44f?b3xN%pE4Wu#&kWYaWlz4N=TV7jjJGpN*>#Ba)B? z`F!#4h(2T7*lckO zb`Eou1A`shCOkS4e5(Gr*)&?c%OtQ78pI+>wwWxzSW~!gO#R4+Tukrx;oMWC^>8c) zPXV*vvv6jsJMh}v{+H!s;stTvH~Yqwsqo-2Ur8F9M$*%ccVDM5!IO_0mb0W!u4hnq zRh^_LG?YCCe!21#9%PlA(m8puNeMD%AquRliL#^I$18XOsb;4y} z9WNCUYJgLfU{yj~v{{QS$vxmd0=TX!PXRK_rGgheWSS%xfp_PSMi;0fC4u@l2^o9g z7(aLIl*x>yF6J$YUz?iY$NF=q(7W8GZ{MS4NujCe=*WXui0}MCN+S#YR2h4^dh_^ohm;3+zMG^;Io?(XKF-N>N-(=P3 zJs>Resa-NZZG562r^+$o(sA~n%+)T}EGk#3r?QQ&`<w}$eHI@cAD6$UsR(KQ*Te5T z^#C7X+{4b!{#l2JyWV@x!N(`MM}BhY=GPDiKc$0=N_XynQi?1N+pAxERE}8CkoSPh zs96u`C5<9ve&Qr9bEVqjD|JR@CgM*VFBwc|0Ps6t2Apsgc3!6$V8Xb4cqk{&bAT<| ze6hC|)X78BC-ly$2K%=i=WEHw@79+q1j7Y7dWjk}?Dqp=8*6L%2utEPhnufoaMq=8 zUa|sd+GdX-8P1OguJAvh51!*RBVVa>>MnP8cb}eGwdE7YWg<5bbSoFj29+O4%130H z57qF#dM(bVUW=wE-v4O6LEcGe&B%$4#^Ud{=J|CwB`D?T?LFKa8qRi^w2LSo&-N|p z7uGCjbb*n&oZIbja*Fd2+lp*VXO$kN)K0rG z9ZFO({6qe8*Tl80t!?ysXlQ?VygjsJ3=H`iEn#{e43$vZNVBWPhVvAWYHHnDT+tuc zv45mO`woI}ul&2k;~+`s@gY${m1~4nAnI!*ej#h6RJD*atf4%Hc2!nZZc)OWlF71Z z1j4HM3GrX8McGzrWVe1&n3nQk1jZs9PdvG@Jt zmLS0Xxs@T*NBm~c#a_P9v+22siLQ3g@b(mXRm%1R=UT}bxcR#In(SMg0zx3dk<7}A zr=kkY^G3;X!4~TsEltJ>5C7I*S%22Nz^RXL4NLbp)iyh8zg_k~3si3tID_LZ@1r}? z;M(6ltklJF;q2UCQ53@FbqWYl&ry{&LUSLc9a&qVtt5NFxYFvV32_@{R?uSjW5dCZ z1*~V^K2vu}SNM3zOJk<64b%lt7d!?&1e6V@;VK^Be;6{ zM4f3ki`xb;{tUXc6e?8*piB7lH;0ASa2$K)dR~lTIPly#k+>!qGvLL>>x@GXbPV?b z?VqVIV#;vrc7UEVUz|TErqO}+Q&Kw;wLU6ukQH_g4TvzPtHm%|q-OfJnIOzG7nf7rpfHPFS03gn=l(QYnoUC=}3ezjw1kP)d&_*TOQYXic2oCev2zfJ7K zTmCuSo%=oJ*J$V!^V+V1v6bILaSuG|<4!KAA>f`SD_fm%@8<-Z!0BKtN=zhRNjr15 z;cO5j?CbLF%Vk;^@^s#ydfenNyg=D_XL@c7D6O3~Y;XCd{qOw~2UXyoer9qMK=<|W z=6L!HJ^y_(%y3Nm3^CNuO>Eba*wCwhLxCOynTJ@}?es^kcRQx1Xx1H<;>-ob9)HLG zsyzL50O;BO=VEbt12-L#3(k?h^$75Ke?32*^e1Py8~Bx?7S713_Ezt|YtSG~H-l6D>q^<1^RN zYL9e-C3)q7eTV?pf3QFj7wjlP07@1Z%D(WsBD5$X156Te=9ukX*FKh-v@S#d2Ua_x9pzPSd`!g!0fmq&w!JxV{na=j=of&>gb1g=Rw& z5WrOHpo!6&lh^liDHtArkgmdau?x@NngW3j+rxh;q2gnu5=xF)$2IO6idjD z-tJU%I`*Y9VlydSdoApUz<(er02{;(55%=9_tAfi7kb``&PzyRa9F5$CFI7bZ2$m9 zt$Z(p(@1qPtBgz#UHXzp+EEA zM@^Hl;B&%5w_z(;mEc%GB;f9Jt=5kMSdB9o2#hABDaxdX!LfnOj8up4j<{k8IN!4S&=rCu#&ekH*g)c)qPh_sOnVac8*muP7Bxtr%NKyqfGwQv~{;x zL!h>v{)E=$EztVnUVB2fcbF9g0*+_kyX2;O%$BmJHi9yUBWHF9?i`Q+*}x#+hU*b? zeQ@60IdbbLH0wTx$yXDeDgj`ke)?6nm=r?hf&i2djsrlt4$B83hLLoW_^Vp0zogfl zCh+PMct64^+K~akFj1PYy z9~{Z}8@ae{1?{Zo_uk?Eoq>$*+|-$sBfKaX_`V2Pn% z3ZR9W8~`c`^WRn&4H+@o4Xr*C2A<(=Z_$Cthf-ufMq|f^G0+6a;-6D$JJG1ZP!$G% zJ(p;w4gy&OV1xogLWTu;b{7l+KKsQpNojgJM}~!FRh{4`5kWrBg8(YTdV65<%NJJ7 z1pX#k0Lc3VY`(>>Ffi+e+Mfu5aP$YjK_&FypzM!m05Z^Z_8beu6d;&^x*k}ec|)@3 z5Wf}V?qhwb&Mv>#vld9F9u*wAPX{va_0Kn8Qs@N?H5B7u<{|4$>bWkT%#mVS2;a(ZbbGd0x9taS~ma~Wa7>znu4>a>QFI4l@EzMD9spkM&Ne8i0wHU8q+XSX!<*&Y(ZAv67D9-|(I+{9&5t)*7J$gV|@R&73sB2F1*KHa89jEV{WnzXr2MFwq{O zEtJ~O0VkQ?6^aAW!hXi(Ridpwy>qm?-oglau43ajSo-OHhV1GhajG_8ZP>(GJT zcyLz@)d%K*; zPTRpn7o!mLUQ1mZ4z$N{UdYIVZR@wcy$^%?))@U^iZSW^>_pRJV4QQIV_J0v{T{DHs z>!oLnE%Uf(bflS#FaUFkr}>a3c2CiHziI(3(h0HPZi!Ds;|e~**!SYVa9v)muM*JQiV zAv_AlK;_^QT_bD9+gXZad8c(31(xY-=c|Q z>Ec6WR14s4DPr+}HqQsOMU7LBVd!2fgA1#4FI`mS7b_V$*!R8=y1R5BOO&T5gQz-S&B||Qp@=Q$~?r1+UW<16%t8iHj9CTSD0-lY{OPfqqT!1XNZuJ z_<$AOJY6PA?!7cS+EZf~o!0VC#S$T(>3kCebn#CvA#Lg)h<7eM-89VtP^nKiYH^rE zGV#zCPKZ2#;;d`UnEdJYg0)v+&dD>?x+(3*2uYhgwG$R_`>W2>NaZ&3g{88MxqEju zN-^xNrj9fiMCFsvSyZy-_c$9j!hKoeIc2}CJrBoVJi@)1eT5DMy67%E#@)c8@^jh~v8Qt_}C#k-DY38U$UIsY*Ng z?Bn_3VoE*c8QvFaEu~Oe-t-O8D*lTEdoQsMCh`4*0f1ca@P!J|=g*pBHq6hV_UOzq zl;-vncP*7_m(+9uUV+`MYG}Otz5jm4YjZqS!vVSOEGPwMf@Jti@La!PB(ql5hezvj zv|CI}11>&JtIC1Wwg^JS57(>(f1KV2=u#BqDN0VCFTopGt38~(zCM+AuD3iS&DWXO z+)`o4FrCaFrjMIriNSs^_)z51NCPoCx=Oc+=M+=f5vy^<{?uXzAdY=R*p*@4Updam zMMLt@Cn}cHB^Srv!=vGzGby0W#4$A)jxLfkKXte+gT5!_)ErT2Dg@bLco7Omb=!_n?Q`#DbVtoagS zMWAU=50A6iTEd zipQ?uWmQ(OKsb(yqK z%$@$X(Os6=Ft>8u7mJKEY4}bgsU7zs!)yJn_5919G{DRZz?1mpeZn_QDUwZZa3I=g zXI!m?=1=jcF`~q6#eXdBh@vWD;I!GKFuo2(cff_EwFt_^(xB}C8T8nC2jY_08o$l@ zh;f4RH{~Z=7f*#HkL_1m?bTIg#U7D;9>rW{tP0oK4H`siv35LtKrW+ z@d7~2=jH+^(xNFv*W28#E_X-X%BfcO8%vS5WClB36J$?LN;UasD)4GL;O~?<8#C9y z@yad^1YmOshG^>h7?8&|ImtIw|-9q^2*lqwjdfzCLfqY@_2{ zMRsNixjF2-Zgu-3v-G^BT>J-#z2W<`PntnD1T+B?(jg&|i%!(jt%!#XY^n=zfL512 z@(Y?g0~dgH;RW2$JuzmaMYv$1kUCuc9g>Nr(C_s23J30)cQ%6;Dh&mF^2`ww7frql z=LCT96F*3n#K@D?##8YsRF=eZOI#jg*n_5NflhB&i8*;{^6CB-*XahP@#e`=t-C&- ze%}X%Mw^~s35k~1w7ZRBpf0%Q<7$v1I0CJ>nQx%PA*?h2y<`94Y!HTm;u!}DY#aJP z*gSlT6Xxi2I>E@KgF)hd!v^%P_e%WGbd@w$Ppum_X8X(M^>}?aTda=a<`VpLcg9I_ znb)T;M*+pz6pm&C;w`RFS_z>2%*7~mdy!jI;Y_0)iV730bj8VUC$WBu6QjJB%Q(nw3W>v^!t@%FJMfj#=cE-2FH)O2;c_e0JU;luO3%Em)ZH?y~bmf~$e8w9yeqy8dnN)VQq@E|Dgt!_BvfC{xgdEoID0 z%p!s|?-LL##m?|F6F#PTEPw`3OXKCzlfWZf(g&U;*0#xEe?=MMUayZWOokh5;S+tmw| zhk5dz<4c9!7Wh9$-)Rco1_qS(Er3K?8!yzYd?3(#m6cV|5Z|I1SSDR-G_WyP*FH& zLx+xP_&P(MT7OxlN@S=1>KPY}vB)mvHwxS)(}MWIJ9_(~s4Z`TN=or6*`dy*lepj$ zRp7|Tx-W*C_<;I@(x6p8-ksHb%GBPY=#rdoXkoq>w^HkTN+Q~S)M=|!ncp%fbQ*N@ zY@mEaBW4?LDtwc}r=JxHYAUaqfUOzh<9P0jiFcm;9&T5AV-HvRcai>H8_CH92Z`|M zNvLi@Ka|4CJVgWe`X3=tckq|`b3mC78n)3qKA(usO9a|NbP*cKJb(VzT@g-iF3oYo#+@_+1Mec!GBAs*V@Yj z`er=cOT5B~>|ll+o`-1^YAPL{sFUHSgLVE3N=c+em|xf`n`=`F8Ar&1dVSv%%Bl46 z#3$>SWkCS9z$gt8RicZz^Hsh)&$!1~T-Ql=x?cDZJvZJ&ZY%HYzs2a5w{p`b{3hMR zPKBNoxPE@QD87KAE3ecQJ5i1E`-iTd;@9*5;>pfCdD&gVC|P&R1?hKwt^d9+{D27Z z(0MBF_VDQ}=Xa0vem?##)Hp&9d)(?lX35||COhMVa6D%`x}0Rk&sO7#BiCOo^GSh0 z;vq&q4aM($KZ}9eg)upK7ES(SD}{I?W>o}4%>6=G8e+NKOctl4L+b3droz4$Jm5mi zy@^Fu|YiT?OYE!{-I)18R`I+DXcSzsivs$bjX;jHm)8=ix;6 zg{|5fn8J%ZxC4q->Mjto^tAG0HZRz3PvK;~0^qEJjCMlHN@#1V^yERyv2hlKcHyNV z!rcSk_14zb%gf8SazpGtlT{PZY{OU?dkg2Sn{gidHfp-)a}1o*6aat&zyK8h{XYt{ z2>IMJ{Lg;Us|ykYuswQ}Sv{VU;OS@f=Z(H|r3UtSTAP~Qn2_2f>ykGT&Q*wFDaew8 z==!tr8($e^=~1UKGp};v-d?~|qQ{n`QLV*-hx*_tQdlGJoIbJN!j(-FA%bOSkI~g! zOhHL$Qh?FJ7yfRf#>Un*S4eSvBioiI?QQnP8SOb)9MCbyHHP(u`%3sSguwGbMZ^%r z@$^7!o2Ty>sG(VBxY%H@*UZyLI-Y+mf{nFqK4q&WXZkR+_0hKUSE^N4q4_1_EP7X* zd(VJM!z}m4Xw?`o<;ZT_ z(Qcccw#TFch4?T(?TdcF>1dT#2FQvXo#r_y3uI!Q_T~Y;dYx6a%cGNNc ziTCcN2{QoF2XI|RO4E|Mn8Ig?r3b_OUa++r?eW}B33b{8%`)pF>&ePAl;lb(9H-;}s3O ztDjbD_!(zw{+OFPn_%R5Q{%}=AiG1Y`&)HY!*V2=bL-l1Oz8<=8|h04cjsXjT(Ni} zC2_lx@-^Z#$dgsT8|7U$85`vjV|(a;rB^3!0Q%z_0hi`P+6TDWWMI+!bJW{J^X`PN zxtyo^ruqmDklp;JvNTtmn8`(leQVpOo8M1L`?_&ax}_3&bmKm){W?`f?5Xl=C?ErG ztXO>5h7=kSII(WcV~m2b?N#f7oS{~)OVlNXT2g{~M2FJt@*1j=7gwT2Bd!M!CO}cM zi&SE0Vo?!P<*9Cv@xtB|vCZxEjT>VhN5OPq4_?Q;V@|8DqbcqCYiDE=I%hgo!e{QG zysU09fD4j$s>G=h<%I(Uud$kh@!8T`?s7>$3sfB^d$)c}?Sr^-SZPfnQ zg~6{2H(8?ex3gTedyLriH?jIr-!jK*N(yn?GU!Xm-?K^}*C{sm1jF$sWVU=Lg40PU3?r zPwRo~{3Fee&w1?ExKEF~+y5AKk{;L*?`>Y9DTIg5Y-L1wX&WdXfARZ{qe!;!e_j9~ zqUeq}##>S$-jDmST_?d|n>%0n^|}oT{quh9k0gEjc+!4Ss1opa`$OQ!>8VIV6z;u28+E5K}vP`0SDi+4P!h)&v&u z+oHy`RRa<#;gK<&zP|LLml7!SCChmxOtq8$9mAp&F=xu=`&amY&jULjNVW51`Bp^c z`jXH;_QXt9LPcHfMn(( zJgZWyHEn9Dwp_b{NQF+lWls>s9?I!Mi-mI57b(nc@B8zw*`0WAlyAQ=4zO$JSSi-L zWt3)cJ0pq2?)FP#@1W_d!#toip0(34?nR;G9ZL)T2NL6JyI&Bu-lvQHnoxp>)qEnw z4HiLxE{g!Z!ec`<)R^46-LHJZ7bE`58!~XPfKB=D45h2(Y`V_R19dm7Zzgma24Ae* zD8YaFHo5`2>opEw7}^g1s5r-t?|Pqy__$P&b;3P&z>Wwc@$u97G*rSjfKOK%qdPOw zJEULGvTgZ4Vc2TH{E@NbwHWp8Q!Eiz)3O78+*uU}&uK9uLW$t!r#~%S&E*SxP;dUR z!h=fXn|wiUeJME5ld5yGJHK=6cW!$^l zw^)ylk59d(CO*Pcg%?Dq5fmvE^ILZN)837{`KR&jc2A-zrN=8i5tCWx%JUg{S(x(i z`yT-dW%fq}(DnqGsJEUCa(FTphVJyabzxaZsl*yJoZB_>$!xjCFa)nc<`rmmgM)qC=fKeA z%9BEtt*Ggq$N0@Z89yGZ!Md!@Wged$duyOS1_KFySvNP$#|bBgQHXv2Zxk0d5?i#F zOK%si-YUJ+;=yO99|JG<)2n(r+~7W#%on}QyNR;`Zh)jMiQ077B2d^OYn-De0ruD5TC)v z!%`~hTaexfL0)w5{QyRC)E`C+W%GOw*W}6CUdMtd3GL4D__2PEy()|-z<>RqiN^>p z?X6|E3K=LOV6~L-p+P<tf0NU%>gMt*;QVIFkq@ONIqGK={9XRO#JPkO^W zhY)d&A%5r=+%g$XpTGP6AXB z6z0qLd{a(?6;{c6*^{5`KS^MNWjKyXa92zYvlb;UfM1qY{2xCd(Iqmu4~)peGaDRz zev1F?w}2w+6torW9VA-)G)YOb&heGYy4sdRUAZ1E9xg_;>31UBMQIr(8+J692A9Z{ zbK@ZTsduN)+ceJjRpq*;ok-d`T|X-DMGcxfsyb4wV)8Mz0;lZ*hq)T$d*kCO>*N<> zl_bFAD9PP1Ndm>yy=1o1uoLqd4VDk=#HzgGn|DZ3i(xRIg-DJlO(-p2Cv-P08OR%R zpNe2M)Q2NHN=#whX}u6l@h?|r8KO?g0Ro$+MMzl$?tU7K`vEQ#(mK<(kfEvemGkZ>YMjIVR3=G>>`-Sw`NznO(XqA-y^Bb8M+%bdzTkb1%#((>9Ejg5@KQ)4cPT&;- zs)!y7LRk>0m{l}+V{H7SxQ(>GF#F#paKc|OBF3l?9ia4D95 zkCgEQZ)@AUcK0$_5G*yQERjQnxSipoObunEWlDL>mz`b;vyTb!a8;=%Trz!f4*pGB;s^FkF*IM#5&#VYSUoeRcF*a7GN-xR6|f zygY%Nliy3N*~H#Soq-za`CIs&g@5xuagY>LIAju#mX;%U z@0gl?^TE2k29(9B$!L*>2VgJl5nN{qdpNTQ$M8$ls zrSco^B9l>1HU0SLD2sNDrOKax6Wa#li z<-p%BmYsN6nL<75BS$uyYv(x2_;>C1i@O?fY0Zo>Iw0;-ps_Ex8GwH$GR8ZVJxBS#Z;{|*C zoc(VsjrRzJ-LS*So8qEBQ^ZLQ(S;)|1qbymALs;k|Mlabc@RHT3bYEPcs^Zg4dw2! z;G+J-l^F8eNZ!f=r3!#!aD^>MD60P5?>H6t6?+wP*7my1^(+>r7WOd++d$W+JLx)q z{wE7~^H`9Don;FEc~0n`Szwa9^^6E_o#WfxTF6`Ti2Z**a(wuIN1>!KnQ2)~L?cRX Qw{rnGDJ97YaU;L~1u_6#<^TWy literal 0 HcmV?d00001 diff --git a/frontend/src/scenes/pipeline/utils.tsx b/frontend/src/scenes/pipeline/utils.tsx index 42883b20d4595..33b1ae784e8be 100644 --- a/frontend/src/scenes/pipeline/utils.tsx +++ b/frontend/src/scenes/pipeline/utils.tsx @@ -138,7 +138,7 @@ export function RenderApp({ plugin, imageSize = 'small' }: RenderAppProps): JSX. } > - {plugin.url ? ( + {plugin.url && plugin.plugin_type !== 'inline' ? ( diff --git a/frontend/src/scenes/plugins/plugin/PluginImage.tsx b/frontend/src/scenes/plugins/plugin/PluginImage.tsx index 610a9d64a46b7..dc6fc298377bd 100644 --- a/frontend/src/scenes/plugins/plugin/PluginImage.tsx +++ b/frontend/src/scenes/plugins/plugin/PluginImage.tsx @@ -1,10 +1,15 @@ import { IconTerminal } from '@posthog/icons' import { parseGithubRepoURL } from 'lib/utils' import imgPluginDefault from 'public/plugin-default.svg' +import IconTransformationSemverFlattener from 'public/transformations/semver-flattener.png' import { useEffect, useState } from 'react' import { PluginType } from '~/types' +const pluginImageOverrides: Record = { + 'inline://semver-flattener': IconTransformationSemverFlattener, +} + export type PluginImageSize = 'small' | 'medium' | 'large' export function PluginImage({ @@ -23,7 +28,10 @@ export function PluginImage({ }[size] useEffect(() => { - if (icon) { + const imageOverride = pluginImageOverrides[url ?? ''] + if (imageOverride) { + setState((state) => ({ ...state, image: imageOverride })) + } else if (icon) { setState((state) => ({ ...state, image: icon })) } else if (url?.includes('github.com')) { const { user, repo, path } = parseGithubRepoURL(url) From cdca1a9cc00982f328f170dcca15a02efdaaae2f Mon Sep 17 00:00:00 2001 From: Eric Duong Date: Fri, 26 Jul 2024 09:13:39 -0400 Subject: [PATCH 22/24] fix(data-warehouse): only enable checkbox if sync method is set (#24003) --- .../forms/{PostgresSchemaForm.tsx => SchemaForm.tsx} | 7 ++++++- frontend/src/scenes/data-warehouse/new/NewSourceWizard.tsx | 4 ++-- 2 files changed, 8 insertions(+), 3 deletions(-) rename frontend/src/scenes/data-warehouse/external/forms/{PostgresSchemaForm.tsx => SchemaForm.tsx} (93%) diff --git a/frontend/src/scenes/data-warehouse/external/forms/PostgresSchemaForm.tsx b/frontend/src/scenes/data-warehouse/external/forms/SchemaForm.tsx similarity index 93% rename from frontend/src/scenes/data-warehouse/external/forms/PostgresSchemaForm.tsx rename to frontend/src/scenes/data-warehouse/external/forms/SchemaForm.tsx index 98125b15466d3..fd23f4a2674fc 100644 --- a/frontend/src/scenes/data-warehouse/external/forms/PostgresSchemaForm.tsx +++ b/frontend/src/scenes/data-warehouse/external/forms/SchemaForm.tsx @@ -4,7 +4,7 @@ import { useActions, useValues } from 'kea' import { sourceWizardLogic } from '../../new/sourceWizardLogic' import { SyncMethodForm } from './SyncMethodForm' -export default function PostgresSchemaForm(): JSX.Element { +export default function SchemaForm(): JSX.Element { const { toggleSchemaShouldSync, openSyncMethodModal } = useActions(sourceWizardLogic) const { databaseSchema } = useValues(sourceWizardLogic) @@ -26,6 +26,11 @@ export default function PostgresSchemaForm(): JSX.Element { onChange={(checked) => { toggleSchemaShouldSync(schema, checked) }} + disabledReason={ + schema.sync_type === null + ? 'Please set up a sync method first' + : undefined + } /> ) }, diff --git a/frontend/src/scenes/data-warehouse/new/NewSourceWizard.tsx b/frontend/src/scenes/data-warehouse/new/NewSourceWizard.tsx index 81c44222314dd..4f402724ff9b3 100644 --- a/frontend/src/scenes/data-warehouse/new/NewSourceWizard.tsx +++ b/frontend/src/scenes/data-warehouse/new/NewSourceWizard.tsx @@ -7,7 +7,7 @@ import { SceneExport } from 'scenes/sceneTypes' import { ManualLinkSourceType, SourceConfig } from '~/types' import { DataWarehouseInitialBillingLimitNotice } from '../DataWarehouseInitialBillingLimitNotice' -import PostgresSchemaForm from '../external/forms/PostgresSchemaForm' +import SchemaForm from '../external/forms/SchemaForm' import SourceForm from '../external/forms/SourceForm' import { SyncProgressStep } from '../external/forms/SyncProgressStep' import { DatawarehouseTableForm } from '../new/DataWarehouseTableForm' @@ -241,7 +241,7 @@ function SecondStep(): JSX.Element { function ThirdStep(): JSX.Element { return ( - + ) } From a422e7ea4b0feed8ab1d40eb240d1c59899bacf0 Mon Sep 17 00:00:00 2001 From: Brett Hoerner Date: Fri, 26 Jul 2024 07:40:53 -0600 Subject: [PATCH 23/24] fix(hoghooks): drop payloads that are too large for kafka (#24000) --- rust/hook-worker/src/worker.rs | 99 +++++++++++++++++++++++++++++++++- 1 file changed, 98 insertions(+), 1 deletion(-) diff --git a/rust/hook-worker/src/worker.rs b/rust/hook-worker/src/worker.rs index 422030d2a48b5..678e866ad087c 100644 --- a/rust/hook-worker/src/worker.rs +++ b/rust/hook-worker/src/worker.rs @@ -7,7 +7,7 @@ use futures::channel::oneshot::Canceled; use futures::future::join_all; use health::HealthHandle; use http::StatusCode; -use rdkafka::error::KafkaError; +use rdkafka::error::{KafkaError, RDKafkaErrorCode}; use rdkafka::producer::{FutureProducer, FutureRecord}; use reqwest::{header, Client}; use serde_json::{json, Value}; @@ -278,6 +278,30 @@ async fn process_batch<'a>( headers: None, }) { Ok(future) => kafka_ack_futures.push(future), + Err(( + KafkaError::MessageProduction( + RDKafkaErrorCode::MessageSizeTooLarge, + ), + _, + )) => { + // HACK: While under development, we are dropping messages that + // are too large. This is temporary, as we expect the webhook + // handler for Hog to change soon. In the meantime, nobody needs + // to be alerted about this. + let team_id = metadata + .get("teamId") + .and_then(|t| t.as_number()) + .map(|t| t.to_string()) + .unwrap_or_else(|| "?".to_string()); + + let hog_function_id = metadata + .get("hogFunctionId") + .and_then(|h| h.as_str()) + .map(|h| h.to_string()) + .unwrap_or_else(|| "?".to_string()); + + error!("dropping message due to size limit, team_id: {}, hog_function_id: {}", team_id, hog_function_id); + } Err((error, _)) => { // Return early to avoid committing the batch. return log_kafka_error_and_sleep("send", Some(error)).await; @@ -928,6 +952,79 @@ mod tests { ); } + #[sqlx::test(migrations = "../migrations")] + async fn test_hoghook_drops_large_payloads(db: PgPool) { + use httpmock::prelude::*; + + let worker_id = worker_id(); + let queue_name = "test_hoghook_drops_large_payloads".to_string(); + let queue = PgQueue::new_from_pool(&queue_name, db).await; + let topic = "cdp_function_callbacks"; + + let server = MockServer::start(); + + server.mock(|when, then| { + when.method(POST).path("/"); + then.status(200) + .header("content-type", "application/json; charset=UTF-8") + .body(r#"{"message": "hello, world"}"#); + }); + + let mock_url = server.url("/"); + + let webhook_job_parameters = WebhookJobParameters { + body: "".to_owned(), + headers: collections::HashMap::new(), + method: HttpMethod::POST, + url: mock_url, + }; + + let webhook_job_metadata = json!({"hugeField": "a".repeat(2 * 1024 * 1024)}); + + enqueue_job( + &queue, + 1, + webhook_job_parameters.clone(), + serde_json::to_value(webhook_job_metadata).unwrap(), + ) + .await + .expect("failed to enqueue job"); + + let registry = HealthRegistry::new("liveness"); + let liveness = registry + .register("worker".to_string(), ::time::Duration::seconds(30)) + .await; + + let (_, mock_producer) = create_mock_kafka().await; + let hog_mode = true; + let worker = WebhookWorker::new( + &worker_id, + &queue, + 1, + time::Duration::from_millis(100), + time::Duration::from_millis(5000), + 10, + RetryPolicy::default(), + false, + mock_producer, + topic.to_string(), + hog_mode, + liveness, + ); + + let batch = worker.wait_for_jobs_tx().await; + + process_batch( + batch, + worker.http_client, + worker.retry_policy, + worker.kafka_producer, + worker.cdp_function_callbacks_topic, + hog_mode, + ) + .await; + } + #[tokio::test] async fn test_send_webhook() { let method = HttpMethod::POST; From c261e154ab5202404130a8f25acccaccfe0b6e1f Mon Sep 17 00:00:00 2001 From: Marcus Hof <13001502+MarconLP@users.noreply.github.com> Date: Fri, 26 Jul 2024 17:13:37 +0200 Subject: [PATCH 24/24] =?UTF-8?q?fix:=20prevent=20api=20from=20returning?= =?UTF-8?q?=20secret=20fields=20&=20allow=20updating=20the=20configu?= =?UTF-8?q?=E2=80=A6=20(#23963)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com> --- .../batch_exports/BatchExportEditForm.tsx | 12 +++++----- .../pipelineBatchExportConfigurationLogic.tsx | 24 +++++++++---------- posthog/batch_exports/models.py | 6 ++--- 3 files changed, 21 insertions(+), 21 deletions(-) diff --git a/frontend/src/scenes/batch_exports/BatchExportEditForm.tsx b/frontend/src/scenes/batch_exports/BatchExportEditForm.tsx index 6951a7dbec90c..3ecec1e636dcf 100644 --- a/frontend/src/scenes/batch_exports/BatchExportEditForm.tsx +++ b/frontend/src/scenes/batch_exports/BatchExportEditForm.tsx @@ -327,11 +327,11 @@ export function BatchExportsEditFields({ ) : batchExportConfigForm.destination === 'Snowflake' ? ( <> - + - + @@ -378,11 +378,11 @@ export function BatchExportsEditFields({ ) : batchExportConfigForm.destination === 'Postgres' ? ( <> - + - + @@ -443,11 +443,11 @@ export function BatchExportsEditFields({ ) : batchExportConfigForm.destination === 'Redshift' ? ( <> - + - + diff --git a/frontend/src/scenes/pipeline/pipelineBatchExportConfigurationLogic.tsx b/frontend/src/scenes/pipeline/pipelineBatchExportConfigurationLogic.tsx index e66534326f964..f596d8c158d42 100644 --- a/frontend/src/scenes/pipeline/pipelineBatchExportConfigurationLogic.tsx +++ b/frontend/src/scenes/pipeline/pipelineBatchExportConfigurationLogic.tsx @@ -332,14 +332,14 @@ export const pipelineBatchExportConfigurationLogic = kea [p.id], (id): boolean => !id], requiredFields: [ - (s) => [s.service], - (service): string[] => { + (s) => [s.service, s.isNew], + (service, isNew): string[] => { const generalRequiredFields = ['interval', 'name', 'model'] if (service === 'Postgres') { return [ ...generalRequiredFields, - 'user', - 'password', + ...(isNew ? ['user'] : []), + ...(isNew ? ['password'] : []), 'host', 'port', 'database', @@ -349,8 +349,8 @@ export const pipelineBatchExportConfigurationLogic = kea