Compare commits

...
Author SHA1 Message Date
Alex van Andel da67be475f chore: release v5.8.2
Post release / release (push) Canceled after 0s
2025-10-22 14:20:43 +01:00
e639237088 feat: SMS workflow action for form triggers #3 (#23673)
* allow routing forms for activeOn

* use repository function to get routing forms

* remove unnecessary code

* adjust logic in update handler

* add triggers to api v2

* remvoe unused file

* rename to getAcitveOnOptions handler

* remove routingFormOptions handler

* clean up getActiveOnOptions

* refactor WorkflowService

* remove logs

* remove unused

* fix: type check

* fix: missed before after events for recurring

* fix: calendarEvent handleMarkNoShow

* fix error message

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

* don't query disabled routing forms

* create tasker function

* add tasker code

* move isFormTrigger function

* small adjustments + todo comments

* remove email to host action for form triggers

* throw trpc error if email to host is added as step

* fix dialog on how to use form responses as variables

* remove add variable dropdown for form triggers

* remove form workfows in event workflows tab

* improvements for workflow logic on form submission

* review fixes

* base setup for seperate schedule functions (evt and form)

* add missing BOOKING_PAID workflow trigger

* fix pathname

* fix: test for BOOKING_REQUESTED

* fix activeOn ids

* pass hideBranding and smsReminderNumber

* adjustments to reminderScheduler

* create empty scheduelForForm functions

* pass locale and timezone with form user

* pass formData instead of responses

* pass timeFormat and locale

* reusable function for email sending and reminder creation

* implement scheduleEmailReminderForForm

* remove added editor field from merge conflict

* don't support cal.ai action with form triggers

* throw bad request if form trigger and cal.ai is combined

* add tests for scheduleFormWorkflows

* add form submission tests

* remove form response varibe info

* clean up workflow actions

* fixes for getting template options

* pass triggerType to getAllWorkflows

* move reusable logic to scheduleSMSReminder

* add formdata to param type

* type fixes for text reminder managers

* implement scheduleSMSReminderForForm

* fix import

* fix isAuthorizedToAddActiveOnIds

* disble whatsapp action

* implement triggerFormSubmittedNoEventWorkflow

* code clean up

* Merge branch 'devin/1755107037-add-workflow-triggers' into feat/routing-form-workflow-triggers

* fix type errors

* remove async from getSubmitterEmail

* fix type errors

* revert cal.ai changes

* fix type error

* add sublogger

* code clean up

* fix type errors

* remove label for attendee whatsapp action

* code clean up

* fixes saving teams on org workflows

* fix type error

* code improvements for activeOn ids

* Revert "code improvements for activeOn ids"

This reverts commit 0a3590a4e2ce541b17d63483ad86ed458795a6a3.

* improve variable name

* fix unit tests

* small fixes

* type fixes

* remove unused translation keys

* fix merge conflict issues

* code clean up

* remove SMS action support

* remove more SMS code

* add missing imports

* set custom template for form action

* type fixes

* fix tasker endpoint

* fix duplicate check

* fix workfows.test.ts

* use repository funciton to getHideBranding

* add  back SMS action

* add back changes to smsReminderManager

* code clean up

* fix hasDuplicateSubmission

* code clean up

* select only needed properties

* remove repository functions

* Revert "remove repository functions"

This reverts commit 7aa47b1c59c9abd7f964ebf26f746934c53a44f4.

* add scheduleWorkflows function

* Revert "add scheduleWorkflows function"

This reverts commit fe5db4fe3b65e2743c95475d585300cab98beed7.

* move type to /types

* Revert "move type to /types"

This reverts commit 91e0152154594b3772a801a426260068a8ccea54.

* revert changes causing type errors

* remove import

* remove unused import

* Revert "remove unused import"

This reverts commit 1916768c875ea5d0ac5598ccb8f9c796c5622dc9.

* revert changed from attempt to fix type errors

* pass object to gt all workflows

* fix isAuthorized check

* trigger filtering

* remove form submitted no event booked code

* remove form submitted no event from schema

* remove more code

* remove test

* fixes

* add getSubmitterEmail function

* add trigger

* small fixes

* add missing workflow DTOs

* small fixes

* use activeOnWithChildren

* fix active on when switching trigger type

* remove add variable dropdown

* add getAllWorkflowsFromRoutingForm to WorkflowService

* fix error caused by undefined evt

* fix type error

* fix type error

* fix tests

* code clean up

* final fixes and clean up

* remove console.log

* remove template text form from triggers

* add routing form repoditory function

* fix bug with key

* add comments

* fix test

* add missing await

* use predefined FormSubmissionData type

* add .trim() to sms message

* pass contextData instead

* add missing trigger in update-workflow.input.ts

* ForEvt and ForForm function for aiPhoneCallManager

* chore: add support for form workflows on api v2

* fixup! chore: add support for form workflows on api v2

* use only repository functions in update handler

* move all prisma queries from list.handler

* review suggestions

* chore: handle workflows api v2

* chore: handle workflows api v2, split in 2 endpoints

* fix workflow step creation

* remove connect agent and fixes types

* add type to workflow

* chore: use workflow type in apiv2 WorkflowsOutputService

* update worklfow type on update

* chore: use workflow type in apiv2 WorkflowsOutputService

* fix template body for torm trigger

* some UI fixes for email subject/body

* resetting email body when changing form triggers

* use type field to query workflows

* clean up all old active on values

* remove responseId from all funciton calls

* remove undefined from updateTemplate

* refactor: split routing form and event-type workflows code

* refactor: split routing form and event-type workflows code

* fix template  text when adding action

* chore: don't rename WorkflowActivationDto to avoid ci blocking

* refine update schedule to use only allowed actions

* fix type error

* don't allow whatsapp action with form trigger

* fix type error

* return early if activeOn array is empty

* fix: from step type in BaseFormWorkflowStepDto

* fixup! fix: from step type in BaseFormWorkflowStepDto

* api v2 updates

* move all prisma calls to repository (service/workflows.ts)

* use FORM_TRIGGER_WORKFLOW_EVENTS for form queries

* use userRepository

* use FORM_TRIGGER_WORKFLOW_EVENTS in isFormTrigger

* code clean up

* code clean up

* use repository functions in formSubmissionValidation.ts

* remove action check in update handler

* add back trpc  import

* fix agent repository functions

* add SMS actions to allowed form action constants

* remove unsued import

* fixes for offset api v2

* add missing responseId

* fix failing test

* fix failing test

* remove unused imports

* chore: handle sms step action for form worklfow in dtos

---------

Co-authored-by: CarinaWolli <wollencarina@gmail.com>
Co-authored-by: Amit Sharma <74371312+Amit91848@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com>
Co-authored-by: Benny Joo <sldisek783@gmail.com>
Co-authored-by: cal.com <morgan@cal.com>
Co-authored-by: Morgan <33722304+ThyMinimalDev@users.noreply.github.com>
2025-10-21 15:28:10 +00:00
Dhairyashil Shinde 5bc1fbb8c2 fix: Allow booking details view for round robin with no hosts (#24250)
* Fix: Allow booking details view for round robin with no hosts

* Fix: Allow booking details view for round robin with no hosts

* fix: include the missing fields with defaults

* fix: include the missing fields with defaults
2025-10-21 14:04:42 +00:00
Volnei MunhozandDevin AI e310931417 fix: remove circular dependency in packages/prisma (#24596)
- Replaced DeploymentRepository import with inline implementation
- Created InlineDeploymentRepository class implementing IDeploymentRepository
- Breaks circular dependency: deployment.ts -> prisma/index.ts -> usage-tracking.ts -> deployment.ts
- Verified with madge: no circular dependencies found

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2025-10-21 13:14:15 +00:00
Alex van Andel 17944311c3 chore: Remove inMaintenanceMode from APIv1 for increased robustness (#24576) 2025-10-21 12:58:31 +00:00
Volnei MunhozandDevin AI d82f87aa2a perf: Remove circular dependencies - wip (#24586)
* wip

* refactor(emails): remove circular dependencies from packages/emails

- Extract renderEmail imports to use direct path (../src/renderEmail) instead of index
- Create utility files for shared types and functions:
  - lib/utils/team-invite-utils.ts: TeamInvite type and utility functions
  - lib/utils/booking-redirect-types.ts: IBookingRedirect type
  - lib/utils/email-types.ts: OrganizationCreation and EmailVerifyCode types
  - lib/utils/date-formatting.ts: getFormattedDate utility function
- Update all template files to import renderEmail directly from ../src/renderEmail
- Update React template components to import from utility files instead of class templates
- This eliminates all circular dependencies within packages/emails (reduced from 234 to 0 internal circular deps)

Co-Authored-By: Volnei Munhoz <volnei.munhoz@gmail.com>

* refactor(trpc): remove circular dependency in routing-forms

- Extract ZFormByResponseIdInputSchema to separate schema file
- Create getResponseWithFormFields.schema.ts to break circular dependency
- Update imports in _router.ts and getResponseWithFormFields.handler.ts
- Fix eslint warnings by updating deprecated rule names
- This eliminates the circular dependency within packages/trpc (reduced from 1 to 0 internal circular deps)

Co-Authored-By: Volnei Munhoz <volnei.munhoz@gmail.com>

* fix(emails): correct TeamInvite type definition

- Make isExistingUserMovedToOrg required (not optional)
- Make prevLink and newLink non-optional (string | null)
- Add back JSDoc comment for isAutoJoin field
- This fixes type check errors in CI

Co-Authored-By: Volnei Munhoz <volnei.munhoz@gmail.com>

* wip

* Fixes types folder

---------

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2025-10-21 12:24:47 +00:00
Volnei MunhozandDevin AI 6aa21aceb8 refactor: remove unused packages from transpiledPackages (#24595)
Remove @calcom/embed-react and @calcom/embed-snippet from the
transpiledPackages configuration in apps/web/next.config.js as they
are not imported from source in apps/web.

Only @calcom/embed-core is actually used and requires transpilation
since it's imported from source paths like @calcom/embed-core/src/embed-iframe.

The other two packages have pre-built dist files and are not directly
imported in the web app, so Next.js doesn't need to transpile them.

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2025-10-21 12:07:33 +00:00
Hariom Balhara 870ad57a7e Rename handleNewBooking to BookingCreateService (#23682) 2025-10-21 14:52:16 +03:00
fddee71829 refactor: extract bookings list and calendar views (#24486)
* refactor: extract bookings list and calendar views with nuqs state management

- Extract list-related code into BookingsListView component
- Create empty BookingsCalendarView component for future implementation
- Add nuqs query param state management for view toggle (defaults to list)
- Update bookings-listing-view to conditionally render views
- No visible changes to users (list view remains default)

Co-Authored-By: eunjae@cal.com <hey@eunjae.dev>

* refactor: move data fetching logic to parent component

- Keep useFilterValue calls, trpc query, columns, flatData, bookingsToday, finalData, and table setup in parent component
- BookingsListView now receives data as props instead of fetching it
- This allows both list and calendar views to share the same data source

Co-Authored-By: eunjae@cal.com <hey@eunjae.dev>

* fix: add customView column back to render booking items

The customView column was inadvertently removed during refactoring. This column is crucial as it renders the actual BookingListItem components, the "today" header, and the "next" header for the bookings list.

Co-Authored-By: eunjae@cal.com <hey@eunjae.dev>

* refactor: rename files for better clarity

- Renamed bookings-listing-view.tsx → bookings-view.tsx (parent view)
- Renamed bookings-list-view.tsx → BookingsList.tsx (list component)
- Renamed bookings-calendar-view.tsx → BookingsCalendar.tsx (calendar component)
- Moved list and calendar components from views/ to components/ directory
- Updated all imports to reflect new structure

This creates a clearer hierarchy where -view is the orchestrator and components are the renderers.

Co-Authored-By: eunjae@cal.com <hey@eunjae.dev>

* clean up implementation

* clean up types

* revert unnecessary changes

* Update packages/features/data-table/GUIDE.md

Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com>

---------

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com>
2025-10-21 11:09:47 +00:00
David Johnson 6f15a5ab0f Add turbo package to dependencies (#24572)
This is needed due to Docker build errors indicating that turbo was not an available command.
2025-10-21 09:05:55 +00:00
Dhairyashil Shinde 1fd64c5d7b chore: improve text for booker active booking limit (#24526)
* chore: improve text for booker active booking limit

* update keys to new one for lingo .dev future recognition
2025-10-21 08:54:16 +00:00
Parship Chowdhury f8614f11ff fix: Description field duplicating content when editing Event Types (#24233)
* fix: description field duplicating content when editing Event Types

Signed-off-by: Parship Chowdhury <i.am.parship@gmail.com>

* optimal approach

Signed-off-by: Parship Chowdhury <i.am.parship@gmail.com>

* rm dead code

Signed-off-by: Parship Chowdhury <i.am.parship@gmail.com>

---------

Signed-off-by: Parship Chowdhury <i.am.parship@gmail.com>
2025-10-21 04:35:37 -03:00
Hariom Balhara 5e5e77236a chore: Add skeleton for BookingCancelService (#24038) 2025-10-21 12:29:17 +05:30
Daniel Adeboye 4cee53b07c feat: support northflank deployment (#24571) 2025-10-20 19:47:06 +00:00
Eunjae LeeandDevin AI c289fac008 refactor: make timezone a required prop in Calendar component (#24567)
* refactor: make timezone a required prop in Calendar component

- Remove useBookerTime hook from Calendar.tsx
- Add timezone as required prop in CalendarState type
- Update all parent components to pass timezone prop:
  - packages/features/bookings/Booker/components/LargeCalendar.tsx
  - packages/features/calendar-view/LargeCalendar.tsx
  - packages/features/troubleshooter/components/LargeCalendar.tsx
- All parent components now use useTimePreferences hook to get timezone

Co-Authored-By: eunjae@cal.com <hey@eunjae.dev>

* use right implementation

* remove a line

* use user's timezone instead of booker timezone

* get timezone from calendar store

---------

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2025-10-20 13:59:59 +00:00
Keith WilliamsandDevin AI 68f9e86cdd fix: remove circular dependency by moving useLastUsed hook to auth features (#24552)
- Move useLastUsed hook from packages/lib/hooks to packages/features/auth/lib/hooks
- Update imports in SAMLLogin.tsx and login-view.tsx
- Remove cross-package tsconfig include of ../trpc/types/router.d.ts from packages/lib/tsconfig.json

This fixes the issue where the IDE was unnecessarily initializing packages/ui/tsconfig.json
when navigating to definitions in packages/lib. The hook was importing from @calcom/ui/classNames,
creating a circular dependency since packages/ui depends on packages/lib.

By moving the hook to packages/features/auth where it's actually used, we eliminate the
circular dependency without adding tailwind dependencies to packages/lib.

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2025-10-19 10:14:45 -03:00
Keith Williams 5da754db65 perf: Remove tRPC types from @calcom/lib (#24551) 2025-10-19 13:14:25 +00:00
135 changed files with 1154 additions and 666 deletions

No files matched your search

+1 -1
View File
@@ -111,7 +111,7 @@ The event types page UI components are located in `apps/web/modules/event-types/
Changes to shared UI patterns (like tab layouts and button alignments) need to be checked across multiple views to maintain consistency:
- Event types page layout: `apps/web/modules/event-types/views/event-types-listing-view.tsx`
- Bookings page layout: `apps/web/modules/bookings/views/bookings-listing-view.tsx`
- Bookings page layout: `apps/web/modules/bookings/views/bookings-view.tsx`
- Common elements like tabs, search bars, and filter buttons should maintain consistent alignment across views
## When working on workflow triggers or similar enum-based features in the Cal.com codebase
View File
Whitespace-only changes.
+8 -1
View File
@@ -234,9 +234,10 @@ for Logger level to be set at info, for example.
</details>
If you don't want to create a local DB. Then you can also consider using services like railway.app or render.
If you don't want to create a local DB. Then you can also consider using services like railway.app, Northflank or render.
- [Setup postgres DB with railway.app](https://docs.railway.app/guides/postgresql)
- [Setup postgres DB with Northflank](https://northflank.com/guides/deploy-postgres-database-on-northflank)
- [Setup postgres DB with render](https://render.com/docs/databases)
1. Copy and paste your `DATABASE_URL` from `.env` to `.env.appStore`.
@@ -390,6 +391,12 @@ Cal.com, Inc. does not provide official support for Docker, but we will accept f
You can deploy Cal.com on [Railway](https://railway.app) using the button above. The team at Railway also have a [detailed blog post](https://blog.railway.app/p/calendso) on deploying Cal.com on their platform.
### Northflank
[![Deploy on Northflank](https://assets.northflank.com/deploy_to_northflank_smm_36700fb050.svg)](https://northflank.com/stacks/deploy-calcom)
You can deploy Cal.com on [Northflank](https://northflank.com) using the button above. The team at Northflank also have a [detailed blog post](https://northflank.com/guides/deploy-calcom-with-northflank) on deploying Cal.com on their platform.
### Vercel
Currently Vercel Pro Plan is required to be able to Deploy this application with Vercel, due to limitations on the number of serverless functions on the free plan.
@@ -1,23 +0,0 @@
import { get } from "@vercel/edge-config";
import type { NextMiddleware } from "next-api-middleware";
const safeGet = async <T = unknown>(key: string): Promise<T | undefined> => {
try {
return get<T>(key);
} catch (error) {
// Don't crash if EDGE_CONFIG env var is missing
}
};
export const config = { matcher: "/:path*" };
export const checkIsInMaintenanceMode: NextMiddleware = async (req, res, next) => {
const isInMaintenanceMode = await safeGet<boolean>("isInMaintenanceMode");
if (isInMaintenanceMode) {
return res
.status(503)
.json({ message: "API is currently under maintenance. Please try again at a later time." });
}
await next();
};
+2 -6
View File
@@ -3,7 +3,6 @@ import { label } from "next-api-middleware";
import { addRequestId } from "./addRequestid";
import { captureErrors } from "./captureErrors";
import { captureUserId } from "./captureUserId";
import { checkIsInMaintenanceMode } from "./checkIsInMaintenanceMode";
import { extendRequest } from "./extendRequest";
import {
HTTP_DELETE,
@@ -26,7 +25,6 @@ const middleware = {
HTTP_POST,
HTTP_DELETE,
addRequestId,
checkIsInMaintenanceMode,
verifyApiKey,
rateLimitApiKey,
extendRequest,
@@ -38,16 +36,14 @@ const middleware = {
type Middleware = keyof typeof middleware;
const middlewareOrder = [
// The order here, determines the order of execution
"checkIsInMaintenanceMode",
const middlewareOrder: Middleware[] = [
"extendRequest",
"captureErrors",
"verifyApiKey",
"rateLimitApiKey",
"addRequestId",
"captureUserId",
] as Middleware[]; // <-- Provide a list of middleware to call automatically
];
const withMiddleware = label(middleware, middlewareOrder);
@@ -0,0 +1,10 @@
import { BookingCancelService } from "@/lib/services/booking-cancel.service";
import { PrismaModule } from "@/modules/prisma/prisma.module";
import { Module } from "@nestjs/common";
@Module({
imports: [PrismaModule],
providers: [BookingCancelService],
exports: [BookingCancelService],
})
export class BookingCancelModule {}
@@ -0,0 +1,15 @@
import { PrismaWriteService } from "@/modules/prisma/prisma-write.service";
import { Injectable } from "@nestjs/common";
import { BookingCancelService as BaseBookingCancelService } from "@calcom/features/bookings/lib/handleCancelBooking";
@Injectable()
export class BookingCancelService extends BaseBookingCancelService {
constructor(
prismaWriteService: PrismaWriteService,
) {
super({
prismaClient: prismaWriteService.prisma,
});
}
}
@@ -1,12 +1,7 @@
import { PrismaAttributeRepository } from "@/lib/repositories/prisma-attribute.repository";
import { PrismaBookingRepository } from "@/lib/repositories/prisma-booking.repository";
import { PrismaFeaturesRepository } from "@/lib/repositories/prisma-features.repository";
import { PrismaHostRepository } from "@/lib/repositories/prisma-host.repository";
import { PrismaOOORepository } from "@/lib/repositories/prisma-ooo.repository";
import { PrismaUserRepository } from "@/lib/repositories/prisma-user.repository";
import { CacheService } from "@/lib/services/cache.service";
import { CheckBookingAndDurationLimitsService } from "@/lib/services/check-booking-and-duration-limits.service";
import { CheckBookingLimitsService } from "@/lib/services/check-booking-limits.service";
import { LuckyUserService } from "@/lib/services/lucky-user.service";
import { PrismaWriteService } from "@/modules/prisma/prisma-write.service";
import { Injectable } from "@nestjs/common";
@@ -21,26 +16,16 @@ export class RegularBookingService extends BaseRegularBookingService {
checkBookingAndDurationLimitsService: CheckBookingAndDurationLimitsService,
prismaWriteService: PrismaWriteService,
bookingRepository: PrismaBookingRepository,
featuresRepository: PrismaFeaturesRepository,
checkBookingLimitsService: CheckBookingLimitsService,
luckyUserService: LuckyUserService,
hostRepository: PrismaHostRepository,
oooRepository: PrismaOOORepository,
userRepository: PrismaUserRepository,
attributeRepository: PrismaAttributeRepository
userRepository: PrismaUserRepository
) {
super({
cacheService,
checkBookingAndDurationLimitsService,
prismaClient: prismaWriteService.prisma as unknown as PrismaClient,
bookingRepository,
featuresRepository,
checkBookingLimitsService,
luckyUserService,
hostRepository,
oooRepository,
userRepository,
attributeRepository,
});
}
}
@@ -404,7 +404,7 @@ describe("OrganizationsTeamsWorkflowsController (E2E)", () => {
invalidWorkflow.steps = [
{
stepNumber: 1,
action: "sms_number",
action: "cal_ai_phone_call",
recipient: PHONE_NUMBER,
template: REMINDER,
verifiedPhoneId: verifiedPhoneId,
@@ -439,6 +439,18 @@ describe("OrganizationsTeamsWorkflowsController (E2E)", () => {
html: "<p>Reminder for your event {EVENT_NAME}.</p>",
},
},
{
stepNumber: 2,
action: "sms_attendee",
recipient: EMAIL,
template: REMINDER,
phoneRequired: false,
sender: "updatedSender",
message: {
subject: "Update Upcoming: {EVENT_NAME}",
text: "Update Reminder for your event {EVENT_NAME}.</p>",
},
},
];
return request(app.getHttpServer())
.post(`${basePath}/routing-form`)
@@ -459,12 +471,15 @@ describe("OrganizationsTeamsWorkflowsController (E2E)", () => {
}
expect(responseBody.data.trigger.type).toEqual(sampleCreateWorkflowRoutingFormDto.trigger.type);
expect(responseBody.data.steps).toHaveLength(sampleCreateWorkflowRoutingFormDto.steps.length);
expect(responseBody.data.steps).toHaveLength(validWorkflow.steps.length);
expect(responseBody.data.steps.find((step) => step.stepNumber === 1)?.id).toBeDefined();
expect(responseBody.data.steps.find((step) => step.stepNumber === 1)?.sender).toEqual(
"CalcomE2EStep1"
);
expect(responseBody.data.steps.find((step) => step.stepNumber === 2)?.id).toBeDefined();
expect(responseBody.data.steps.find((step) => step.action === "sms_attendee")).toBeDefined();
const trigger = sampleCreateWorkflowRoutingFormDto.trigger as OnFormSubmittedTriggerDto;
expect(responseBody.data.trigger?.type).toEqual(trigger.type);
@@ -7,8 +7,12 @@ import {
EMAIL_ADDRESS,
EMAIL_ATTENDEE,
FORM_ALLOWED_STEP_ACTIONS,
SMS_NUMBER,
WorkflowEmailAddressStepDto,
WorkflowEmailAttendeeStepDto,
WorkflowPhoneNumberStepDto,
WorkflowPhoneAttendeeStepDto,
SMS_ATTENDEE,
} from "./workflow-step.input";
import {
RoutingFormWorkflowTriggerDto,
@@ -85,6 +89,8 @@ export class CreateFormWorkflowDto {
oneOf: [
{ $ref: getSchemaPath(WorkflowEmailAddressStepDto) },
{ $ref: getSchemaPath(WorkflowEmailAttendeeStepDto) },
{ $ref: getSchemaPath(WorkflowPhoneAttendeeStepDto) },
{ $ref: getSchemaPath(WorkflowPhoneNumberStepDto) },
],
type: "array",
})
@@ -99,8 +105,15 @@ export class CreateFormWorkflowDto {
subTypes: [
{ value: WorkflowEmailAddressStepDto, name: EMAIL_ADDRESS },
{ value: WorkflowEmailAttendeeStepDto, name: EMAIL_ATTENDEE },
{ value: WorkflowPhoneAttendeeStepDto, name: SMS_ATTENDEE },
{ value: WorkflowPhoneNumberStepDto, name: SMS_NUMBER },
],
},
})
steps!: (WorkflowEmailAddressStepDto | WorkflowEmailAttendeeStepDto)[];
steps!: (
| WorkflowEmailAddressStepDto
| WorkflowEmailAttendeeStepDto
| WorkflowPhoneAttendeeStepDto
| WorkflowPhoneNumberStepDto
)[];
}
@@ -8,6 +8,8 @@ import {
EMAIL_ADDRESS,
EMAIL_ATTENDEE,
FORM_ALLOWED_STEP_ACTIONS,
SMS_ATTENDEE,
SMS_NUMBER,
UpdateEmailAddressWorkflowStepDto,
UpdateEmailAttendeeWorkflowStepDto,
UpdateEmailHostWorkflowStepDto,
@@ -75,6 +77,8 @@ export class UpdateFormWorkflowDto {
oneOf: [
{ $ref: getSchemaPath(UpdateEmailAddressWorkflowStepDto) },
{ $ref: getSchemaPath(UpdateEmailAttendeeWorkflowStepDto) },
{ $ref: getSchemaPath(UpdatePhoneAttendeeWorkflowStepDto) },
{ $ref: getSchemaPath(UpdatePhoneNumberWorkflowStepDto) },
],
type: "array",
})
@@ -90,8 +94,15 @@ export class UpdateFormWorkflowDto {
subTypes: [
{ value: UpdateEmailAddressWorkflowStepDto, name: EMAIL_ADDRESS },
{ value: UpdateEmailAttendeeWorkflowStepDto, name: EMAIL_ATTENDEE },
{ value: UpdatePhoneAttendeeWorkflowStepDto, name: SMS_ATTENDEE },
{ value: UpdatePhoneNumberWorkflowStepDto, name: SMS_NUMBER },
],
},
})
steps?: (UpdateEmailAddressWorkflowStepDto | UpdateEmailAttendeeWorkflowStepDto)[];
steps?: (
| UpdateEmailAddressWorkflowStepDto
| UpdateEmailAttendeeWorkflowStepDto
| UpdatePhoneNumberWorkflowStepDto
| UpdatePhoneAttendeeWorkflowStepDto
)[];
}
@@ -24,7 +24,7 @@ export const STEP_ACTIONS = [
CAL_AI_PHONE_CALL,
] as const;
export const FORM_ALLOWED_STEP_ACTIONS = [EMAIL_ATTENDEE, EMAIL_ADDRESS] as const;
export const FORM_ALLOWED_STEP_ACTIONS = [EMAIL_ATTENDEE, EMAIL_ADDRESS, SMS_ATTENDEE, SMS_NUMBER] as const;
export const STEP_ACTIONS_TO_ENUM = {
[EMAIL_HOST]: WorkflowActions.EMAIL_HOST,
@@ -12,7 +12,7 @@ import { MembershipRole } from "@calcom/prisma/enums";
import { buildLegacyRequest } from "@lib/buildLegacyCtx";
import { validStatuses } from "~/bookings/lib/validStatuses";
import BookingsList from "~/bookings/views/bookings-listing-view";
import BookingsList from "~/bookings/views/bookings-view";
const querySchema = z.object({
status: z.enum(validStatuses),
+9
View File
@@ -26,11 +26,20 @@ async function handler(req: NextRequest) {
cookieStore.delete("calcom.csrf_token");
const session = await getServerSession({ req: buildLegacyRequest(await headers(), await cookies()) });
const result = await handleCancelBooking({
bookingData,
userId: session?.user?.id || -1,
});
// const bookingCancelService = getBookingCancelService();
// const result = await bookingCancelService.cancelBooking({
// bookingData: bookingData,
// bookingMeta: {
// userId: session?.user?.id || -1,
// },
// });
const statusCode = result.success ? 200 : 400;
return NextResponse.json(result, { status: statusCode });
-3
View File
@@ -1,3 +0,0 @@
import type { RegularBookingCreateResult } from "@calcom/features/bookings/lib/dto/types";
export type BookingResponse = RegularBookingCreateResult;
+2 -2
View File
@@ -11,11 +11,11 @@ import { z } from "zod";
import { SAMLLogin } from "@calcom/features/auth/SAMLLogin";
import { ErrorCode } from "@calcom/features/auth/lib/ErrorCode";
import { LastUsed, useLastUsed } from "@calcom/features/auth/lib/hooks/useLastUsed";
import { HOSTED_CAL_FEATURES, WEBAPP_URL, WEBSITE_URL } from "@calcom/lib/constants";
import { emailRegex } from "@calcom/lib/emailSchema";
import { getSafeRedirectUrl } from "@calcom/lib/getSafeRedirectUrl";
import { useCompatSearchParams } from "@calcom/lib/hooks/useCompatSearchParams";
import { LastUsed, useLastUsed } from "@calcom/lib/hooks/useLastUsed";
import { useLocale } from "@calcom/lib/hooks/useLocale";
import { useTelemetry } from "@calcom/lib/hooks/useTelemetry";
import { collectPageParameters, telemetryEventTypes } from "@calcom/lib/telemetry";
@@ -62,7 +62,7 @@ export default function Login({
.string()
.min(1, `${t("error_required_field")}`)
.regex(emailRegex, `${t("enter_valid_email")}`),
...(!!totpEmail ? {} : { password: z.string().min(1, `${t("error_required_field")}`) }),
...(totpEmail ? {} : { password: z.string().min(1, `${t("error_required_field")}`) }),
})
// Passthrough other fields like totpCode
.passthrough();
@@ -0,0 +1,34 @@
"use client";
import type { Table as ReactTable } from "@tanstack/react-table";
import { DataTableFilters, DataTableSegment } from "@calcom/features/data-table";
import { EmptyScreen } from "@calcom/ui/components/empty-screen";
import type { RowData, BookingListingStatus } from "../types";
type BookingsCalendarViewProps = {
status: BookingListingStatus;
table: ReactTable<RowData>;
};
export function BookingsCalendar({ table }: BookingsCalendarViewProps) {
return (
<>
<div className="mb-4 flex items-center justify-between">
<div className="flex items-center gap-2">
<DataTableFilters.FilterBar table={table} />
</div>
<div className="flex items-center gap-2">
<DataTableFilters.ClearFiltersButton />
<DataTableSegment.SaveButton />
<DataTableSegment.Select />
</div>
</div>
<div className="flex items-center justify-center pt-2 xl:pt-0">
<EmptyScreen Icon="calendar" headline="Calendar view" description="Calendar view is coming soon." />
</div>
</>
);
}
@@ -0,0 +1,69 @@
"use client";
import type { Table as ReactTable } from "@tanstack/react-table";
import { DataTableWrapper, DataTableFilters, DataTableSegment } from "@calcom/features/data-table";
import { useLocale } from "@calcom/lib/hooks/useLocale";
import { EmptyScreen } from "@calcom/ui/components/empty-screen";
import SkeletonLoader from "@components/booking/SkeletonLoader";
import type { RowData, BookingListingStatus } from "../types";
const descriptionByStatus: Record<BookingListingStatus, string> = {
upcoming: "upcoming_bookings",
recurring: "recurring_bookings",
past: "past_bookings",
cancelled: "cancelled_bookings",
unconfirmed: "unconfirmed_bookings",
};
type BookingsListViewProps = {
status: BookingListingStatus;
table: ReactTable<RowData>;
isPending: boolean;
totalRowCount?: number;
};
export function BookingsList({ status, table, isPending, totalRowCount }: BookingsListViewProps) {
const { t } = useLocale();
return (
<DataTableWrapper
className="mb-6"
table={table}
testId={`${status}-bookings`}
bodyTestId="bookings"
headerClassName="hidden"
isPending={isPending}
totalRowCount={totalRowCount}
variant="compact"
paginationMode="standard"
ToolbarLeft={
<>
<DataTableFilters.FilterBar table={table} />
</>
}
ToolbarRight={
<>
<DataTableFilters.ClearFiltersButton />
<DataTableSegment.SaveButton />
<DataTableSegment.Select />
</>
}
LoaderView={<SkeletonLoader />}
EmptyView={
<div className="flex items-center justify-center pt-2 xl:pt-0">
<EmptyScreen
Icon="calendar"
headline={t("no_status_bookings_yet", { status: t(status).toLowerCase() })}
description={t("no_status_bookings_yet_description", {
status: t(status).toLowerCase(),
description: t(descriptionByStatus[status]),
})}
/>
</div>
}
/>
);
}
+25
View File
@@ -0,0 +1,25 @@
import type { RouterOutputs } from "@calcom/trpc/react";
import type { validStatuses } from "~/bookings/lib/validStatuses";
export type BookingOutput = RouterOutputs["viewer"]["bookings"]["get"]["bookings"][0];
export type RecurringInfo = {
recurringEventId: string | null;
count: number;
firstDate: Date | null;
bookings: { [key: string]: Date[] };
};
export type RowData =
| {
type: "data";
booking: BookingOutput;
isToday: boolean;
recurringInfo?: RecurringInfo;
}
| {
type: "today" | "next";
};
export type BookingListingStatus = (typeof validStatuses)[number];
@@ -121,13 +121,22 @@ export async function getServerSideProps(context: GetServerSidePropsContext) {
: eventTypeRaw.users;
if (!eventTypeRaw.users.length) {
if (!eventTypeRaw.owner)
return {
notFound: true,
} as const;
eventTypeRaw.users.push({
...eventTypeRaw.owner,
});
if (!eventTypeRaw.owner) {
if (bookingInfoRaw.user) {
eventTypeRaw.users.push({
...bookingInfoRaw.user,
hideBranding: false,
theme: null,
brandColor: null,
darkBrandColor: null,
isPlatformManaged: false,
});
} else {
return { notFound: true } as const;
}
} else {
eventTypeRaw.users.push({ ...eventTypeRaw.owner });
}
}
const eventType = {
@@ -2,57 +2,38 @@
import { useReactTable, getCoreRowModel, getSortedRowModel, createColumnHelper } from "@tanstack/react-table";
import { useSearchParams, usePathname } from "next/navigation";
import { useMemo, useRef } from "react";
import { createParser, useQueryState } from "nuqs";
import { useMemo } from "react";
import dayjs from "@calcom/dayjs";
import {
useDataTable,
DataTableProvider,
DataTableWrapper,
DataTableFilters,
DataTableSegment,
type SystemFilterSegment,
useDataTable,
ColumnFilterType,
useFilterValue,
ZMultiSelectFilterValue,
ZDateRangeFilterValue,
ZTextFilterValue,
type SystemFilterSegment,
} from "@calcom/features/data-table";
import { useSegments } from "@calcom/features/data-table/hooks/useSegments";
import { useLocale } from "@calcom/lib/hooks/useLocale";
import type { RouterOutputs } from "@calcom/trpc/react";
import { trpc } from "@calcom/trpc/react";
import useMeQuery from "@calcom/trpc/react/hooks/useMeQuery";
import { Alert } from "@calcom/ui/components/alert";
import { EmptyScreen } from "@calcom/ui/components/empty-screen";
import type { HorizontalTabItemProps } from "@calcom/ui/components/navigation";
import { HorizontalTabs } from "@calcom/ui/components/navigation";
import type { VerticalTabItemProps } from "@calcom/ui/components/navigation";
import { WipeMyCalActionButton } from "@calcom/web/components/apps/wipemycalother/wipeMyCalActionButton";
import BookingListItem from "@components/booking/BookingListItem";
import SkeletonLoader from "@components/booking/SkeletonLoader";
import { useFacetedUniqueValues } from "~/bookings/hooks/useFacetedUniqueValues";
import type { validStatuses } from "~/bookings/lib/validStatuses";
type BookingListingStatus = (typeof validStatuses)[number];
type BookingOutput = RouterOutputs["viewer"]["bookings"]["get"]["bookings"][0];
type RecurringInfo = {
recurringEventId: string | null;
count: number;
firstDate: Date | null;
bookings: { [key: string]: Date[] };
};
const descriptionByStatus: Record<BookingListingStatus, string> = {
upcoming: "upcoming_bookings",
recurring: "recurring_bookings",
past: "past_bookings",
cancelled: "cancelled_bookings",
unconfirmed: "unconfirmed_bookings",
};
import { BookingsCalendar } from "../components/BookingsCalendar";
import { BookingsList } from "../components/BookingsList";
import type { RowData, BookingOutput } from "../types";
type BookingsProps = {
status: (typeof validStatuses)[number];
@@ -103,21 +84,18 @@ export default function Bookings(props: BookingsProps) {
);
}
type RowData =
| {
type: "data";
booking: BookingOutput;
isToday: boolean;
recurringInfo?: RecurringInfo;
}
| {
type: "today" | "next";
};
const viewParser = createParser({
parse: (value: string) => {
if (value === "calendar") return "calendar";
return "list";
},
serialize: (value: "list" | "calendar") => value,
});
function BookingsContent({ status, permissions }: BookingsProps) {
const [view] = useQueryState("view", viewParser.withDefault("list"));
const { t } = useLocale();
const user = useMeQuery().data;
const tableContainerRef = useRef<HTMLDivElement>(null);
const searchParams = useSearchParams();
// Generate dynamic tabs that preserve query parameters
@@ -411,6 +389,9 @@ function BookingsContent({ status, permissions }: BookingsProps) {
getFacetedUniqueValues,
});
const isPending = query.isPending;
const totalRowCount = query.data?.totalCount;
return (
<div className="flex flex-col">
<div className="flex flex-row flex-wrap justify-between">
@@ -431,43 +412,16 @@ function BookingsContent({ status, permissions }: BookingsProps) {
{!!bookingsToday.length && status === "upcoming" && (
<WipeMyCalActionButton bookingStatus={status} bookingsEmpty={isEmpty} />
)}
<DataTableWrapper
className="mb-6"
tableContainerRef={tableContainerRef}
table={table}
testId={`${status}-bookings`}
bodyTestId="bookings"
headerClassName="hidden"
isPending={query.isPending}
totalRowCount={query.data?.totalCount}
variant="compact"
paginationMode="standard"
ToolbarLeft={
<>
<DataTableFilters.FilterBar table={table} />
</>
}
ToolbarRight={
<>
<DataTableFilters.ClearFiltersButton />
<DataTableSegment.SaveButton />
<DataTableSegment.Select />
</>
}
LoaderView={<SkeletonLoader />}
EmptyView={
<div className="flex items-center justify-center pt-2 xl:pt-0">
<EmptyScreen
Icon="calendar"
headline={t("no_status_bookings_yet", { status: t(status).toLowerCase() })}
description={t("no_status_bookings_yet_description", {
status: t(status).toLowerCase(),
description: t(descriptionByStatus[status]),
})}
/>
</div>
}
/>
{view === "list" ? (
<BookingsList
status={status}
table={table}
isPending={isPending}
totalRowCount={totalRowCount}
/>
) : (
<BookingsCalendar status={status} table={table} />
)}
</>
)}
</div>
+1 -2
View File
@@ -1,3 +1,4 @@
/* eslint-disable */
require("dotenv").config({ path: "../../.env" });
const englishTranslation = require("./public/static/locales/en/common.json");
const { withAxiom } = require("next-axiom");
@@ -223,8 +224,6 @@ const nextConfig = (phase) => {
"@calcom/dayjs",
"@calcom/emails",
"@calcom/embed-core",
"@calcom/embed-react",
"@calcom/embed-snippet",
"@calcom/features",
"@calcom/lib",
"@calcom/prisma",
+1
View File
@@ -201,6 +201,7 @@
"tailwindcss": "^3.3.3",
"tailwindcss-animate": "^1.0.6",
"ts-node": "^10.9.1",
"turbo": "^2.5.5",
"typescript": "^5.9.0-beta"
},
"nextBundleAnalysis": {
@@ -1460,6 +1460,7 @@
"email_host_action": "send email to host",
"email_attendee_action": "send email to attendees",
"email_attendee_action_form": "Send email to submitted email address",
"sms_attendee_action_form": "Send SMS to submitted phone number",
"sms_attendee_action": "Send SMS to attendee",
"sms_number_action": "send SMS to a specific number",
"send_reminder_sms": "Easily send meeting reminders via SMS to your attendees",
@@ -1893,7 +1894,7 @@
"only_show_first_available_slot_description": "This will limit your availability for this event type to one slot per day, scheduled at the earliest available time.",
"limit_total_booking_duration": "Limit total booking duration",
"limit_total_booking_duration_description": "Limit total amount of time that this event can be booked",
"booker_booking_limit": "Booker active booking limit",
"booker_upcoming_limit": "Limit number of upcoming bookings per booker",
"booker_booking_limit_description": "Limit the number of active bookings a booker can make for this event type",
"recurring_event_doesnt_support_booker_booking_limit": "Recurring events don't support booker booking limit",
"add_limit": "Add Limit",
@@ -3636,8 +3637,8 @@
"error_downloading_expense_log": "Error downloading expense log",
"require_booker_email_verification": "Prevent Impersonation on Bookings",
"require_booker_email_verification_description": "When enabled, anyone trying to book events using your email address must verify they own it via a one time code or be logged in to prevent impersonation",
"offer_to_reschedule_last_booking": "Offer to reschedule last active booking to chosen time slot",
"booker_limit_exceeded_error": "Booker maximum active booking limit exceeded",
"reschedule_last_booking_offer": "Offer to reschedule the last booking to the new time slot",
"booker_upcoming_limit_reached": "You've reached the limit of {{count}} upcoming bookings for this event type",
"booker_limit_exceeded_error_reschedule": "You already have a booking for this event on {{date}}. Would you like to reschedule to the new selected time?",
"duration_min_error": "Duration must be at least {{min}} minute(s)",
"duration_max_error": "Duration cannot exceed {{max}} minutes (24 hours)",
@@ -1,9 +1,6 @@
import { createMocks } from "node-mocks-http";
import type {
CustomNextApiRequest,
CustomNextApiResponse,
} from "@calcom/features/bookings/lib/handleNewBooking/test/fresh-booking.test";
import type { CustomNextApiRequest, CustomNextApiResponse } from "./types";
export function createMockNextJsRequest(...args: Parameters<typeof createMocks>) {
return createMocks<CustomNextApiRequest, CustomNextApiResponse>(...args);
+6
View File
@@ -0,0 +1,6 @@
import type { Request, Response } from "express";
import type { NextApiRequest, NextApiResponse } from "next";
export type CustomNextApiRequest = NextApiRequest & Request;
export type CustomNextApiResponse = NextApiResponse & Response;
+79
View File
@@ -0,0 +1,79 @@
<svg width="229" height="43" viewBox="0 0 229 43" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_3331_3738)">
<rect width="228.293" height="43" rx="2" fill="#060915"/>
<path d="M73.0788 -122.102C71.852 -125.325 68.2656 -129.524 64.029 -130.964C61.6694 -131.782 59.3139 -131.344 57.2365 -130.964H57.1792C55.4658 -130.669 53.695 -130.363 51.908 -130.624C51.4622 -130.686 51.0124 -130.768 50.5298 -130.866L50.4685 -130.563C50.9551 -130.465 51.4132 -130.383 51.863 -130.322C53.695 -130.052 55.4944 -130.363 57.2324 -130.661H57.2896C59.3343 -131.033 61.6448 -131.45 63.9308 -130.661C68.0775 -129.25 71.5944 -125.136 72.7926 -121.983C73.8476 -119.207 73.3896 -116.14 72.9439 -113.134C72.5676 -110.611 72.1751 -108.006 72.7108 -105.52V-105.47L72.7517 -105.438C76.4853 -102.121 80.9305 -100.8 85.2407 -99.5245L85.3511 -99.4918C88.8803 -98.4449 92.5239 -97.3612 95.6074 -95.1447C99.3369 -92.4703 101.93 -89.9839 103.541 -87.5466C105.087 -85.2075 105.63 -79.8258 103.987 -76.6565C102.993 -74.7386 101.966 -74.2029 100.67 -73.5445H100.637C99.1556 -72.8601 97.8059 -71.9202 96.6501 -70.7678C94.5646 -68.7231 93.1578 -65.243 91.7838 -61.8324C91.4362 -60.9532 91.1049 -60.1476 90.7778 -59.3788C90.1153 -57.8167 89.3465 -56.2341 88.6676 -54.8396V-54.8028C87.3876 -52.1406 86.1813 -49.6256 85.6169 -47.4418C84.521 -43.0989 85.4943 -40.1545 86.353 -37.5537C86.6856 -36.6274 86.9588 -35.6808 87.1709 -34.7197C87.9111 -30.8102 87.1423 -27.3833 86.4675 -24.3571L86.4307 -24.2017C85.8541 -21.6663 85.3552 -19.4744 85.805 -17.4093C86.2549 -15.3441 87.2322 -13.3935 88.1933 -11.5328C89.6941 -8.63748 91.1131 -5.90166 89.7391 -3.03908C87.8579 0.845856 83.1142 1.81913 78.53 2.7556H78.4359C75.1644 3.44262 71.7825 4.15418 69.5333 5.93716C66.0778 8.67706 64.9859 11.6623 63.8081 14.8398C63.0884 16.8354 62.2664 19.0968 60.6716 21.1865L60.6307 21.2152C56.8562 22.8509 53.4211 21.9553 50.5585 20.8839L50.4521 21.1702C52.3229 21.9283 54.3148 22.3439 56.3327 22.397C57.8459 22.4005 59.3436 22.0928 60.7329 21.4932L60.8433 21.4646L60.9169 21.3624C62.5527 19.2359 63.3706 16.954 64.1067 14.9175C65.2476 11.8014 66.3313 8.8529 69.7132 6.17026C71.9052 4.43226 75.2544 3.71661 78.4891 3.05004H78.5832C83.241 2.09721 88.0583 1.10758 90.0049 -2.91231C91.4484 -5.91393 90.0049 -8.71517 88.4386 -11.7168C87.5062 -13.5243 86.5411 -15.3973 86.0954 -17.4829C85.6619 -19.4826 86.1526 -21.6418 86.7211 -24.1404L86.7579 -24.2999C87.4408 -27.3547 88.2178 -30.8143 87.4613 -34.7851C87.2516 -35.7562 86.9784 -36.7125 86.6434 -37.6477C85.7969 -40.2036 84.8399 -43.103 85.9114 -47.36C86.4716 -49.5356 87.6739 -52.0342 88.9457 -54.6801V-54.7169C89.6246 -56.1155 90.3934 -57.7021 91.0599 -59.2725C91.3912 -60.0536 91.7183 -60.8633 92.0823 -61.7752C93.4318 -65.1244 94.8263 -68.5841 96.8628 -70.5715C97.9953 -71.7044 99.3205 -72.6267 100.776 -73.295L100.809 -73.3155C102.159 -74.0066 103.222 -74.5423 104.261 -76.5584C105.949 -79.8299 105.389 -85.3465 103.798 -87.7552C102.163 -90.2088 99.5454 -92.7361 95.7873 -95.4351C92.663 -97.6842 88.9907 -98.772 85.4411 -99.8271L85.3307 -99.8598C81.0818 -101.095 76.6775 -102.403 73.0011 -105.646C72.494 -108.059 72.8744 -110.623 73.2506 -113.138C73.7004 -116.144 74.1625 -119.252 73.0788 -122.102Z" stroke="#364152" stroke-width="0.147239" stroke-miterlimit="10"/>
<path d="M57.7472 28.8133L58.242 29.165L58.2788 29.1936C60.3235 30.6822 62.4213 32.2239 64.4129 32.4079C64.6051 32.4079 64.7973 32.4324 64.9813 32.4324C67.3286 32.4324 68.8867 31.0911 70.7065 29.5412C72.2932 28.1672 74.0884 26.6091 76.7179 26.0284C79.4087 25.4396 82.0096 26.0284 84.2997 26.5233C87.8615 27.3411 90.9368 28.0159 92.7034 23.6607L92.732 23.5911L92.6952 23.5257C90.8591 20.3278 87.8902 18.463 83.8662 17.9805C82.7089 17.8333 81.6579 18.1277 80.5947 18.4222C79.735 18.7127 78.8356 18.8686 77.9284 18.8843C75.8264 18.7902 73.9862 18.0009 73.0211 16.77C72.6914 16.3555 72.4564 15.8738 72.3328 15.3587C72.2092 14.8437 72.1998 14.3079 72.3054 13.7889V13.7438C73.6263 11.3924 75.8019 10.6318 78.1328 9.80984C79.7441 9.23733 81.4044 8.64436 82.8643 7.48297C85.6655 5.25834 90.9122 2.98463 93.8648 5.84721L93.9057 5.90037C94.9566 8.7098 96.4247 11.3311 97.8397 13.8625L97.901 13.9647C98.6903 15.3755 99.4591 16.7578 100.162 18.1441V18.1809V18.2136C98.8293 21.0353 100.048 23.5298 101.639 24.9243C103.405 26.4864 106.546 27.3984 109.237 25.7095L109.29 25.6563C111.249 22.3112 109.748 20.6059 108.018 18.6266L107.9 18.7289L107.99 18.598C106.943 17.3916 105.859 16.1443 105.495 14.4145C105.315 13.5148 105.213 12.8524 105.147 12.3698C105.123 12.2349 105.107 12.1122 105.09 11.9977L105.041 11.6746C104.501 8.59938 102.857 7.24988 101.119 5.82267C99.9416 4.85349 98.723 3.85158 97.9378 2.26898C97.1527 0.686381 97.3489 -0.634497 97.5575 -2.00036V-2.11894C97.6534 -2.68281 97.7108 -3.25255 97.7293 -3.82422C97.762 -5.41091 97.6638 -6.97306 97.5657 -8.48205L97.5411 -8.84602C97.4471 -10.1505 97.3367 -11.6309 97.3285 -13.1154L97.353 -13.1644C99.2955 -15.1764 98.4531 -20.3291 97.9501 -23.3879C97.8642 -23.8991 97.7906 -24.3776 97.7374 -24.762C97.6002 -26.0187 97.592 -27.2862 97.7129 -28.5447V-28.6551C97.8063 -29.5383 97.7912 -30.4296 97.6679 -31.3091C97.1813 -33.82 95.6232 -36.1387 93.9629 -38.5964C91.7342 -41.8925 89.4319 -45.3031 90.0289 -49.1103C90.4338 -51.2858 94.3719 -59.4647 96.3961 -63.2474C98.3672 -66.9278 101.017 -68.0524 103.573 -68.7313H103.602C103.884 -68.7313 104.162 -68.7313 104.444 -68.7313H104.509C105.704 -68.7313 106.939 -68.6944 107.896 -69.5041L107.928 -69.541C109.376 -71.8924 109.278 -74.3583 109.18 -76.7547C109.106 -77.862 109.114 -78.9732 109.204 -80.0794C109.372 -81.3208 109.619 -82.5501 109.944 -83.7598V-83.8171C110.455 -85.9067 110.942 -87.8819 110.46 -90.0861C109.494 -94.4904 106.779 -95.6027 102.984 -97.1403L102.547 -97.3244C101.986 -97.5534 101.414 -97.7906 100.817 -98.0523C99.6595 -98.5675 98.4572 -99.0828 97.2385 -99.6103L96.8296 -99.7862C91.3416 -102.134 85.6655 -104.563 81.6988 -107.666C78.3823 -110.276 79.2738 -112.737 80.1326 -115.117C80.7051 -116.704 81.2939 -118.34 80.8359 -120.156C79.7441 -124.417 68.9031 -133.925 63.7831 -135.119C61.9797 -135.528 59.2848 -135.483 56.688 -135.434H56.5285C54.2221 -135.393 52.0302 -135.356 50.4966 -135.609L50.4476 -135.307C52.0261 -135.049 54.2139 -135.09 56.5326 -135.127H56.6962C59.2766 -135.176 61.947 -135.229 63.7136 -134.82C68.7681 -133.642 79.4619 -124.274 80.5415 -120.098C80.975 -118.373 80.3984 -116.778 79.8463 -115.24C78.9834 -112.729 78.0429 -110.173 81.5352 -107.417C85.5224 -104.289 91.2148 -101.851 96.7233 -99.4958L97.1322 -99.32C98.359 -98.7925 99.5531 -98.2772 100.71 -97.766C101.307 -97.5002 101.884 -97.263 102.444 -97.0299L102.882 -96.85C106.562 -95.3451 109.245 -94.2614 110.177 -90.0125C110.644 -87.8778 110.177 -85.9231 109.662 -83.8784V-83.8212C109.334 -82.6007 109.086 -81.3604 108.918 -80.108C108.822 -78.9817 108.813 -77.8497 108.889 -76.722C108.983 -74.391 109.081 -71.9782 107.695 -69.7168C106.828 -68.9971 105.65 -69.0134 104.53 -69.0298H104.469C104.186 -69.0298 103.9 -69.0298 103.589 -69.0298H103.528C100.89 -68.3305 98.1709 -67.165 96.1426 -63.3905C94.1142 -59.616 90.1352 -51.384 89.7835 -49.1553C89.166 -45.2294 91.5052 -41.7698 93.7625 -38.4247C95.3983 -35.9956 96.9482 -33.7014 97.443 -31.2478C97.5593 -30.3936 97.5716 -29.5286 97.4798 -28.6714V-28.561C97.3583 -27.2834 97.3679 -25.9967 97.5084 -24.7211C97.5575 -24.3367 97.6352 -23.8541 97.7211 -23.3389C98.2159 -20.3168 99.042 -15.2623 97.2099 -13.3648L97.0954 -13.2503V-13.099C97.0954 -11.6023 97.214 -10.1178 97.308 -8.8092L97.3326 -8.44524C97.4307 -6.94034 97.5289 -5.39047 97.4962 -3.81196C97.4786 -3.25397 97.4226 -2.69785 97.3285 -2.14757V-2.02896C97.1118 -0.618118 96.9196 0.715005 97.7374 2.42029C98.5553 4.12557 99.7821 5.08658 101.009 6.07622C102.702 7.46661 104.305 8.78342 104.824 11.7441L104.873 12.0549C104.873 12.1735 104.906 12.3003 104.927 12.4312C104.996 12.9137 105.098 13.5844 105.278 14.4759C105.663 16.2834 106.771 17.5634 107.846 18.7984L107.871 18.8311C109.589 20.7899 110.946 22.3398 109.131 25.4682C106.571 27.0467 103.606 26.1797 101.925 24.6953C100.42 23.3744 99.2669 21.0148 100.522 18.3526L100.612 18.1809L100.526 18.005C99.8189 16.6105 99.0501 15.2283 98.2568 13.8134L98.1995 13.7112C96.7887 11.188 95.337 8.58304 94.2655 5.76135L94.1878 5.65093C91.0717 2.62477 85.6492 4.93527 82.7661 7Line truncated
<path d="M270.776 44.2307C273.312 39.487 275.557 30.4412 270.776 26.36C269.983 25.677 268.286 25.2108 266.646 24.7569C264.446 24.1394 261.951 23.436 260.442 22.1152C259.064 20.8883 258.398 19.5347 257.768 18.3079C257.459 17.6124 257.08 16.9505 256.635 16.3327C254.182 13.1553 248.232 8.69783 242.641 10.2682C238.421 11.4582 236.409 14.4148 233.865 18.1566L233.816 18.2302C232.998 19.457 232.042 20.872 230.888 22.3483L230.823 22.4301L230.757 22.3196C226.5 14.9587 220.064 3.80281 208.523 7.13567C208.114 7.3565 207.591 7.58142 206.929 7.85132C204.884 8.71827 202.79 9.61794 202.054 11.7894V11.8262V11.8712C202.937 16.0097 204.033 18.0912 206.397 20.1073C207.816 21.3341 209.533 21.743 211.378 22.152C212.834 22.4791 214.49 22.8513 215.913 23.7877C218.076 25.2272 219.696 28.053 220.489 30.2163C220.801 31.1948 220.961 32.2154 220.963 33.2424V33.3651C221.049 34.8005 221.139 36.285 222.035 37.7653C223.298 39.8632 225.871 40.6279 228.361 41.3681H228.41C229.546 41.6767 230.656 42.0775 231.727 42.5663C234.704 44.0753 236.499 46.6271 238.102 48.9049C239.329 50.6592 240.49 52.3154 242.024 53.2355C243.955 54.32 246.14 54.8691 248.354 54.8263C249.905 54.841 251.447 54.585 252.91 54.0698C254.456 53.4809 255.772 52.3768 257.191 51.2072L257.249 51.1622C258.379 50.1489 259.613 49.2567 260.929 48.5C262.26 47.8414 263.648 47.3062 265.076 46.901L265.342 46.8193C267.239 46.2386 269.202 45.6374 270.723 44.2552L270.776 44.2307ZM265.268 46.5412L265.006 46.627C263.56 47.0414 262.156 47.589 260.811 48.2628C259.475 49.0243 258.223 49.9249 257.077 50.9496L257.02 50.9986C255.633 52.1477 254.325 53.2314 252.828 53.7999C249.986 54.8672 245.426 54.9326 242.196 52.982C240.715 52.0946 239.574 50.4629 238.343 48.7127C236.74 46.4308 234.925 43.8422 231.878 42.3005C230.792 41.7987 229.666 41.3883 228.512 41.0736H228.459C226.03 40.3498 223.515 39.6015 222.325 37.6017C221.47 36.1868 221.385 34.7392 221.299 33.3447V33.2302C221.296 32.1721 221.129 31.1209 220.804 30.114C219.986 27.9058 218.35 25.0145 216.113 23.5383C214.641 22.5691 212.956 22.1888 211.443 21.8494C209.668 21.4404 207.988 21.0315 206.626 19.8742C204.328 17.9154 203.256 15.8829 202.393 11.8467C203.097 9.83469 205.121 8.98408 207.08 8.13349C207.746 7.86359 208.262 7.63049 208.671 7.41784C219.953 4.14632 226.312 15.1877 230.528 22.4791L230.819 22.9699L231.162 22.5364C232.324 21.0519 233.268 19.6452 234.103 18.402L234.152 18.3284C236.663 14.6479 238.65 11.724 242.76 10.5585C248.203 9.02908 254.03 13.3965 256.427 16.5127C256.862 17.1208 257.235 17.7716 257.539 18.4551C258.152 19.682 258.848 21.0928 260.275 22.336C261.833 23.706 264.364 24.4175 266.597 25.0432C268.204 25.4889 269.869 25.9469 270.609 26.5849C275.238 30.5434 273.026 39.3888 270.543 44.0548C269.067 45.3839 267.231 45.9482 265.284 46.5412H265.268Z" stroke="#364152" stroke-width="0.147239" stroke-miterlimit="10"/>
<path d="M265.514 47.2686C267.476 46.6675 269.505 46.0418 271.1 44.5696L271.149 44.5205L271.177 44.4837C273.795 39.6051 276.085 30.273 271.096 26.0037C270.278 25.2962 268.74 24.8587 266.969 24.3679L266.793 24.3189C264.634 23.7177 262.193 23.0348 260.766 21.7793C259.453 20.6343 258.795 19.3257 258.206 18.1193C257.881 17.3993 257.483 16.7142 257.02 16.0746C254.493 12.8031 248.326 8.23115 242.539 9.85873C238.147 11.0856 236.082 14.1403 233.465 17.9966C232.61 19.2644 231.829 20.4176 230.901 21.6362C226.881 14.6842 220.191 3.31569 208.409 6.73034H208.376C207.816 7.00024 207.293 7.22925 206.777 7.43781C204.626 8.35384 202.406 9.29849 201.633 11.7194L201.604 11.8053V11.9116C202.508 16.1891 203.649 18.3483 206.103 20.4748C207.62 21.7671 209.481 22.1924 211.28 22.6095C212.777 22.9448 214.326 23.2924 215.664 24.1758C217.729 25.5498 219.287 28.2652 220.056 30.3835C220.357 31.3164 220.511 32.2903 220.514 33.2706V33.3646C220.6 34.8573 220.69 36.4031 221.646 37.9857C223.004 40.2266 225.658 41.02 228.226 41.7888L228.472 41.8624C229.52 42.1522 230.544 42.5241 231.535 42.9747C234.397 44.4306 236.168 46.9374 237.726 49.1579C238.981 50.9572 240.18 52.6543 241.815 53.6276C243.809 54.7567 246.068 55.3314 248.358 55.292C249.974 55.3063 251.58 55.0363 253.102 54.4946C254.701 53.8934 256.047 52.7729 257.47 51.5911L257.629 51.4562C258.724 50.4883 259.917 49.6359 261.187 48.9126C262.533 48.2477 263.938 47.7083 265.383 47.3013L265.514 47.2686ZM261.04 48.6508C259.752 49.3825 258.543 50.2459 257.433 51.2271L257.269 51.3621C255.867 52.5276 254.538 53.6317 252.988 54.2247C250.15 55.292 245.496 55.4842 241.975 53.3782C240.4 52.4417 239.235 50.7691 237.992 48.9862C236.421 46.7493 234.643 44.2056 231.694 42.7171C230.688 42.2595 229.648 41.882 228.582 41.5884L228.337 41.5107C225.822 40.7583 223.225 39.9813 221.929 37.8303C221.013 36.3131 220.927 34.8082 220.841 33.3319V33.2174C220.838 32.2065 220.678 31.2022 220.366 30.2403C219.577 28.0975 217.982 25.3003 215.868 23.8854C214.486 22.9694 212.838 22.5972 211.37 22.2742C209.607 21.8652 207.787 21.4563 206.328 20.2049C203.923 18.1275 202.811 16.0133 201.923 11.8176V11.7767C202.655 9.4866 204.81 8.57057 206.892 7.68726C207.415 7.4787 207.943 7.24561 208.528 6.97571C220.17 3.60604 226.803 15.085 230.762 21.947L230.876 22.1474L231.015 21.9634C232.009 20.6711 232.831 19.4606 233.735 18.1234C236.311 14.3244 238.352 11.3187 242.637 10.1123C248.281 8.52968 254.313 13.0199 256.791 16.2219C257.247 16.8526 257.635 17.5297 257.948 18.242C258.545 19.4402 259.22 20.7979 260.578 21.9838C262.054 23.2883 264.536 23.9794 266.732 24.5929L266.896 24.6378C268.634 25.1326 270.135 25.562 270.912 26.2245C275.762 30.3712 273.5 39.5069 270.912 44.3079L270.883 44.3365C269.345 45.7637 267.44 46.3444 265.419 46.9619L265.28 47.0028C263.819 47.4221 262.4 47.9751 261.04 48.6549V48.6508Z" stroke="#364152" stroke-width="0.147239" stroke-miterlimit="10"/>
<path d="M264.16 54.4338C265.771 53.6995 267.436 53.0911 269.141 52.614C272.556 51.5753 275.504 50.6797 277.295 47.1587C277.897 45.9769 278.064 44.382 278.248 42.6604L278.285 42.3373C278.367 41.638 278.449 40.9183 278.579 40.2149C278.731 39.3398 278.927 38.5015 279.127 37.6549C279.5 36.0928 279.888 34.4816 279.753 33.0912C279.651 31.9707 279.017 30.4535 278.35 28.8505L278.322 28.785C277.88 27.7136 277.422 26.6054 277.075 25.5135C276.854 24.7897 276.666 24.025 276.424 23.0353C275.696 19.9724 275.071 17.3102 271.309 15.8134C269.861 15.2327 268.577 15.3554 267.219 15.4863C265.861 15.6171 264.491 15.7398 262.811 15.245C260.443 14.0182 258.406 12.2761 256.439 10.5831L256.329 10.489C253.16 7.74913 250.166 5.17281 246.13 4.64119C243.717 4.32631 241.595 4.98469 239.346 5.67989C237.166 6.35464 234.917 7.04576 232.312 6.874H232.263C224.121 3.50024 214.85 3.5166 207.681 3.91328L207.612 3.93372C206.328 4.73933 204.165 5.14827 202.075 5.49996H202.014C197.924 6.2565 193.262 7.11528 192.162 10.6731C191.385 13.1635 193.798 15.7235 196.342 18.4429C198.885 21.1624 201.511 23.9595 201.543 27.1288C201.543 28.8627 200.766 30.1795 199.908 31.5944C199.021 32.9646 198.325 34.4491 197.838 36.0069C196.714 39.8632 197.184 47.126 200.496 50.1849C202.856 52.3564 207.526 52.8839 209.922 51.2522C211.076 50.4752 211.558 49.4161 212.147 48.1524C212.693 46.792 213.486 45.5442 214.486 44.472L214.527 44.4434C216.453 43.5069 218.567 44.1816 220.612 44.8523L220.829 44.9218C221.463 45.1222 222.117 45.3308 222.751 45.4698C223.94 45.7297 225.143 45.9195 226.354 46.0382H226.435C228.795 46.2999 231.024 46.5453 233.064 48.1197C234.074 48.8926 234.913 50.2462 235.723 51.5548L235.747 51.5957C236.575 53.0706 237.588 54.4338 238.761 55.6524C241.264 58.0774 248.24 61.9337 251.438 62.3181C251.781 62.3625 252.127 62.3857 252.473 62.3877C255.221 62.3877 256.689 60.8337 258.513 58.9076C259.944 57.4027 261.563 55.6974 264.16 54.4338ZM258.271 58.7195C256.313 60.7887 254.763 62.3999 251.479 62.0155C248.33 61.6352 241.448 57.828 238.978 55.4316C237.824 54.2308 236.828 52.8882 236.013 51.4362L235.984 51.3954C235.166 50.0622 234.308 48.6841 233.257 47.8744C231.146 46.2386 228.877 46.0014 226.472 45.7315H226.39C225.192 45.6159 224.001 45.4288 222.825 45.1713C222.199 45.0363 221.553 44.8278 220.927 44.6274L220.706 44.5579C219.365 44.1285 217.995 43.6909 216.645 43.6909C215.862 43.6822 215.086 43.8543 214.38 44.1939L214.294 44.2552C213.249 45.3642 212.417 46.6562 211.84 48.0666C211.292 49.2525 210.822 50.2749 209.738 51.0069C207.444 52.569 202.962 52.0537 200.693 49.9681C197.466 46.987 197.012 39.8796 198.12 36.101C198.6 34.5615 199.288 33.0949 200.165 31.7417C201.032 30.3104 201.85 28.9568 201.83 27.1329C201.793 23.8614 199.122 20.9988 196.513 18.2426C194.035 15.5967 191.696 13.0981 192.424 10.7794C193.467 7.39744 198.018 6.55912 202.038 5.81894H202.095C204.197 5.44681 206.373 5.0583 207.722 4.26087C214.85 3.85193 224.06 3.85194 232.157 7.20934L232.255 7.22978C234.933 7.40971 237.215 6.70633 239.419 6.02749C241.624 5.34865 243.725 4.69435 246.073 4.99697C250.019 5.50814 252.976 8.06402 256.112 10.7712L256.223 10.8693C258.202 12.5746 260.255 14.3372 262.68 15.5803C264.442 16.1038 265.861 15.9893 267.231 15.8421C268.601 15.6948 269.8 15.5967 271.178 16.1488C274.793 17.6005 275.402 20.1768 276.109 23.1621C276.338 24.1517 276.543 24.9246 276.764 25.6607C277.115 26.7485 277.582 27.8608 278.023 28.9322L278.048 28.9977C278.71 30.5762 279.332 32.0729 279.43 33.1484C279.561 34.4897 279.181 36.0764 278.813 37.61C278.608 38.4647 278.404 39.3071 278.26 40.1904C278.13 40.9019 278.048 41.6298 277.966 42.3332L277.925 42.6686C277.749 44.3289 277.578 45.8951 277.005 47.0279C275.271 50.4343 272.384 51.3095 269.035 52.3441C267.311 52.8268 265.627 53.4407 263.997 54.1802C261.371 55.448 259.735 57.1737 258.271 58.7195Z" stroke="#364152" stroke-width="0.147239" stroke-miterlimit="10"/>
<path d="M277.729 47.3552C278.354 46.1284 278.547 44.4926 278.718 42.8037L278.739 42.6237C278.829 41.859 278.919 41.0698 279.05 40.3255C279.205 39.4299 279.405 38.5752 279.594 37.786C279.978 36.1829 280.371 34.5144 280.231 33.0627C280.121 31.8972 279.495 30.3882 278.833 28.7934L278.792 28.6993C278.346 27.632 277.884 26.4992 277.532 25.4278C277.291 24.6467 277.124 23.882 276.895 22.9741C276.167 19.9194 275.484 17.0363 271.497 15.4333C269.934 14.8117 268.544 14.9507 267.182 15.0816C265.886 15.2002 264.549 15.3229 262.995 14.873C260.684 13.6707 258.639 11.9082 256.652 10.1947C253.421 7.40986 250.371 4.78037 246.204 4.23648C243.721 3.9175 241.558 4.57999 239.252 5.29155L239.157 5.32426C237.06 5.9663 234.892 6.62879 232.418 6.4693C224.215 3.09145 214.862 3.10781 207.612 3.50039L207.452 3.55764C206.246 4.31009 204.099 4.69449 202.018 5.06663C197.765 5.83952 192.947 6.70239 191.749 10.5546C191.635 10.9185 191.577 11.2978 191.577 11.6792C191.577 14.0347 193.728 16.3248 196.002 18.7457L196.035 18.7825C198.517 21.4243 201.081 24.1519 201.114 27.1494C201.114 28.7443 200.406 29.9507 199.564 31.3492C198.647 32.7595 197.926 34.288 197.421 35.8926C196.272 39.8675 196.779 47.3633 200.214 50.5326C202.75 52.8718 207.608 53.3952 210.209 51.6409C211.435 50.7944 212 49.633 212.576 48.4021L212.597 48.3611C213.115 47.0652 213.868 45.8758 214.817 44.8525C216.559 44.0346 218.473 44.6398 220.506 45.3023L220.956 45.4372C221.52 45.6131 222.101 45.7889 222.677 45.9198C223.882 46.1853 225.101 46.3764 226.329 46.4923H226.411C228.799 46.754 230.864 46.9789 232.823 48.4757C233.735 49.1831 234.516 50.4427 235.358 51.7963L235.428 51.9107C236.274 53.3921 237.297 54.7653 238.475 56.0002C241.026 58.4538 248.146 62.3919 251.405 62.7845C251.762 62.8287 252.121 62.8519 252.481 62.854C255.433 62.854 257.032 61.1733 258.852 59.2594L258.75 59.1449L258.631 59.0509C256.656 61.1242 254.951 62.9113 251.446 62.4819C248.232 62.0934 241.223 58.2125 238.687 55.7793C237.53 54.5648 236.524 53.2151 235.69 51.7594L235.608 51.6286C234.765 50.2709 233.972 48.9868 233.007 48.2467C230.983 46.6927 228.779 46.4555 226.464 46.202H226.378C225.162 46.0834 223.953 45.8936 222.759 45.6335C222.195 45.5068 221.618 45.3268 221.062 45.1592L220.612 45.0201C219.308 44.6112 217.97 44.1613 216.686 44.1613C215.992 44.1501 215.304 44.3013 214.678 44.603L214.633 44.6316C213.647 45.6819 212.868 46.9082 212.335 48.2467L212.315 48.2835C211.754 49.4735 211.227 50.6021 210.053 51.3996C207.555 53.1008 202.88 52.5733 200.439 50.32C197.09 47.2284 196.603 39.892 197.732 36.0071C198.23 34.4281 198.942 32.9243 199.846 31.5374C200.709 30.0979 201.457 28.8547 201.437 27.1739C201.4 24.0578 198.795 21.2852 196.276 18.5862L196.243 18.5494C194.01 16.1735 191.9 13.9284 191.9 11.6915C191.9 11.3421 191.952 10.9947 192.056 10.6609C193.201 7.00092 197.924 6.13806 202.087 5.38152C204.197 5.0012 206.377 4.61271 207.62 3.83572H207.661C214.871 3.42678 224.19 3.42678 232.345 6.78827H232.39C234.925 6.96003 237.129 6.28527 239.264 5.63097L239.386 5.59416C241.644 4.89896 243.774 4.24875 246.191 4.55545C250.281 5.09116 253.286 7.69203 256.492 10.4524C258.48 12.1699 260.537 13.9447 262.913 15.1756C264.549 15.65 265.914 15.5273 267.26 15.4006C268.605 15.2738 269.918 15.1429 271.411 15.7359C275.251 17.2776 275.909 20.087 276.625 23.06C276.833 23.976 277.034 24.7448 277.271 25.5136C277.622 26.6137 278.089 27.7506 278.538 28.8261L278.575 28.9201C279.23 30.4945 279.847 31.9831 279.953 33.0995C280.092 34.5103 279.7 36.142 279.328 37.7205C279.131 38.5384 278.919 39.3563 278.776 40.2805C278.645 41.037 278.551 41.8304 278.461 42.5951L278.44 42.7791C278.26 44.4558 278.085 46.0507 277.483 47.2284C275.655 50.823 272.682 51.7267 269.243 52.7654C267.528 53.2367 265.853 53.8424 264.234 54.577C261.678 55.8039 260.079 57.4969 258.668 58.9854L258.627 59.0263L258.738 59.1326L258.848 59.239L258.889 59.1981C260.283 57.7259 261.862 56.0574 264.369 54.851C265.964 54.1246 267.613 53.5217 269.301 53.0476C272.797 51.9885 275.827 51.0724 277.729 47.3552Z" stroke="#364152" stroke-width="0.147239" stroke-miterlimit="10"/>
<path d="M134.89 -1.44795V-1.08808C134.89 0.298229 134.918 1.72952 135.033 3.09129C135.082 3.69244 135.119 4.29358 135.156 4.89472L135.201 5.61446C135.421 8.83691 135.65 12.1575 136.464 15.1223C136.782 16.1968 137.157 17.2534 137.589 18.2875C138.081 19.4403 138.505 20.6216 138.856 21.8249C139.102 22.7082 139.265 23.5956 139.413 24.4543L139.449 24.6629C139.748 26.2986 140.026 27.824 140.832 28.9118C142.721 31.4595 147.837 33.4101 151.681 33.4101C152.552 33.4289 153.419 33.2975 154.245 33.0216C156.339 32.2528 157.676 31.1323 158.334 29.607C159.712 26.4213 157.872 22.0866 156.249 18.2671L156.196 18.1403C155.787 17.1916 155.423 16.3001 155.096 15.4495C153.325 10.6853 151.824 6.04385 153.051 1.934C153.467 0.749163 154.045 -0.37243 154.768 -1.39888L154.867 -1.55428C155.398 -2.3425 155.881 -3.16185 156.314 -4.00792C156.632 -4.71928 156.906 -5.45 157.132 -6.19574C157.368 -7.02444 157.698 -7.8231 158.118 -8.57578C160.162 -11.8228 164.354 -15.8835 168.341 -18.4476C170.656 -19.9321 173.068 -20.8317 175.632 -21.7845C179.113 -23.0768 182.707 -24.41 186.236 -27.4198C188.232 -29.1291 190.326 -31.1002 192.518 -33.2144L193.217 -33.8769C194.955 -35.5577 197.233 -37.7373 199.449 -39.7166C200.566 -40.6747 201.733 -41.573 202.946 -42.4074L203.216 -42.5955C206.299 -44.7588 208.965 -46.6318 209.542 -50.21V-50.255C209.006 -53.9886 204.904 -55.7102 200.921 -57.3787C199.263 -58.031 197.653 -58.8004 196.104 -59.6811C195.147 -60.2658 194.26 -60.9324 193.397 -61.5785L193.278 -61.6644C190.661 -63.6355 188.191 -65.4962 184.363 -64.7437C180.438 -64.666 179.583 -61.1123 178.679 -57.3542L178.659 -57.2683C178.188 -55.3381 177.706 -53.3425 176.737 -51.9521C175.767 -50.5617 173.805 -49.3799 171.895 -48.2348L171.748 -48.1449C169.752 -46.918 167.49 -45.5399 165.834 -43.7038C164.715 -42.3744 163.74 -40.9295 162.927 -39.3935L162.763 -39.1114C162.088 -37.8314 161.284 -36.6242 160.363 -35.5086C159.719 -34.8514 159.023 -34.2482 158.281 -33.7052C157.054 -32.7442 155.529 -31.5501 154.458 -30.0247C153.3 -28.3889 152.507 -26.4751 151.738 -24.6267C150.691 -22.0872 149.693 -19.6867 147.984 -18.6848C145.833 -17.4252 142.517 -17.3803 138.116 -18.5539C137.242 -18.8112 136.394 -19.1479 135.581 -19.5599L135.45 -19.6213C133.634 -20.4596 131.921 -21.257 129.987 -20.7009L129.921 -20.6804L129.888 -20.6191C128.514 -17.6788 129.995 -15.7118 131.561 -13.6057L131.614 -13.5403C132.543 -12.3845 133.316 -11.1113 133.912 -9.75353C134.824 -7.47982 134.857 -4.54772 134.89 -1.44795ZM131.843 -13.7816C130.277 -15.8713 128.923 -17.6829 130.171 -20.4146C131.97 -20.8972 133.614 -20.1365 135.38 -19.3186L135.483 -19.2737C136.312 -18.8541 137.179 -18.5118 138.071 -18.2513C142.549 -17.0531 145.948 -17.1104 148.172 -18.4108C149.976 -19.4659 150.986 -21.9154 152.057 -24.504C152.818 -26.3361 153.603 -28.2294 154.74 -29.8407C155.783 -31.3129 157.292 -32.4906 158.502 -33.4393C159.259 -33.9931 159.969 -34.6086 160.624 -35.2796C161.567 -36.408 162.39 -37.6319 163.078 -38.9314L163.242 -39.2177C164.042 -40.7341 165.002 -42.1611 166.104 -43.4747C167.74 -45.2782 169.973 -46.6481 171.948 -47.8586L172.095 -47.9486C174.029 -49.1099 176.033 -50.3122 177.031 -51.7558C178.029 -53.1994 178.524 -55.2154 178.998 -57.1702L179.019 -57.256C179.894 -60.8997 180.72 -64.3389 184.408 -64.4125H184.47C188.15 -65.1404 190.575 -63.3206 193.152 -61.3782L193.254 -61.3046C194.121 -60.6543 195.016 -59.9837 195.985 -59.3907C197.548 -58.5006 199.173 -57.7243 200.848 -57.0679C204.729 -55.4322 208.736 -53.7555 209.264 -50.21C208.704 -46.7749 206.09 -44.9428 203.064 -42.8204L202.798 -42.6323C201.575 -41.7927 200.399 -40.8876 199.273 -39.9211C197.053 -37.9377 194.775 -35.754 193.033 -34.0732L192.338 -33.4107C190.134 -31.3129 188.056 -29.3213 186.065 -27.6283C182.58 -24.6553 179.006 -23.3303 175.543 -22.0422C172.97 -21.0853 170.545 -20.1856 168.202 -18.6807C164.178 -16.0962 159.933 -11.9945 157.884 -8.71073C157.448 -7.93667 157.106 -7.11287 156.866 -6.25709C156.641 -5.52299 156.368 -4.80444 156.048 -4.10606C155.622 -3.27386 155.145 -2.46815 154.621 -1.69332L154.519 -1.53382C153.782 -0.482639 153.193 0.664979 152.769 1.87674C151.542 6.097 153.034 10.7712 154.813 15.5885C155.14 16.4391 155.517 17.3388 155.917 18.2875L155.971 18.4143C157.57 22.1806 159.381 26.45 158.056 29.5129C157.426 30.9606 156.146 32.0238 154.134 32.7845C150.577 34.0808 143.375 31.8643 141.073 28.7605C140.312 27.7299 140.038 26.2291 139.748 24.6384L139.711 24.4339C139.556 23.5669 139.396 22.6754 139.147 21.7799C138.797 20.5629 138.371 19.3692 137.871 18.2057C137.443 17.1837 137.07 16.1394 136.755 15.0773C135.937 12.1534 135.724 8.83282 135.503 5.62263L135.458 4.90699C135.421 4.30585 135.385 3.70062 135.336 3.09539C135.221 1.74588 135.205 0.322769 135.192 -1.05945V-1.41932C135.16 -4.54771 135.127 -7.50435 134.227 -9.82304C133.624 -11.2075 132.837 -12.5045 131.888 -13.6794L131.843 -13.7816Z" stroke="#364152" stroke-width="0.147239" stroke-miterlimit="10"/>
<path d="M140.734 10.8441C141.552 12.4142 142.223 14.057 142.738 15.7514C143.095 17.1912 143.339 18.6571 143.465 20.1352C143.744 22.5071 144.005 24.744 145.032 26.0158C145.524 26.667 146.155 27.1999 146.88 27.5756C147.604 27.9513 148.404 28.1603 149.219 28.1873C149.835 28.1875 150.443 28.0593 151.006 27.811C152.789 27.03 154.507 24.834 153.983 21.0185C153.791 19.6854 152.879 17.9515 151.722 15.7555L151.657 15.6328C150.507 13.5265 149.49 11.3508 148.61 9.11837C148.176 7.95698 147.833 6.69744 147.518 5.49925C146.774 2.70209 146.074 0.0562501 144.181 -0.941565C143.093 -1.51408 141.756 -1.5018 140.092 -0.904749L139.973 -0.863865L139.904 -0.749362C139.015 0.603724 138.532 2.18327 138.513 3.80215C138.513 6.20263 139.572 8.40682 140.693 10.7541L140.734 10.8441ZM140.153 -0.60623V-0.630766C141.74 -1.19919 143.016 -1.21555 144.005 -0.68393C145.78 0.248454 146.459 2.82887 147.191 5.56877C147.496 6.79976 147.863 8.01451 148.291 9.20834C149.179 11.4606 150.206 13.6555 151.366 15.78L151.428 15.9027C152.573 18.0701 153.472 19.7835 153.66 21.0676C154.159 24.7113 152.544 26.7928 150.863 27.5371C148.974 28.3549 146.774 27.6884 145.248 25.8277C144.279 24.6254 144.022 22.4294 143.752 20.1025C143.54 16.8087 142.596 13.6036 140.987 10.7214L140.938 10.6151C139.83 8.31276 138.787 6.1372 138.787 3.80624C138.808 2.24534 139.278 0.723513 140.141 -0.577602L140.153 -0.60623Z" stroke="#364152" stroke-width="0.147239" stroke-miterlimit="10"/>
<path d="M142.369 65.6715L142.275 65.422C142.025 64.7473 141.764 64.048 141.437 63.3242C140.678 61.6612 139.791 60.0601 138.783 58.5355L138.734 58.4578C137.769 57.0411 136.958 55.5264 136.313 53.939C135.847 52.4811 135.572 50.9691 135.495 49.4406L135.47 49.1994C135.398 48.2709 135.261 47.3485 135.061 46.439C134.904 45.8315 134.698 45.2379 134.444 44.6642C133.969 43.511 133.52 42.4191 133.982 41.1473L134.002 41.1105C135.527 38.8777 138.214 40.1454 141.06 41.4867L141.183 41.544C142.203 42.047 143.252 42.4894 144.324 42.869C145.943 43.3723 147.607 43.7214 149.292 43.9118C152.224 44.3411 154.76 44.7296 156.567 47.3469C157.012 48.0554 157.302 48.8497 157.418 49.6778V49.7269C157.655 50.876 157.88 51.9638 159.324 52.7326C160.702 53.0802 162.027 52.5322 163.556 51.9147C164.324 51.5749 165.112 51.2826 165.916 51.0396C166.807 50.8191 167.711 50.6525 168.623 50.5407L168.787 50.5162C170.238 50.3117 171.735 50.1072 172.917 49.4652C177.338 47.0811 179.754 40.3131 177.894 35.5367C177.337 34.1422 176.307 33.173 175.215 32.1507L175.072 32.0157C174.515 31.5062 173.993 30.9597 173.51 30.3799C172.726 29.3386 172.012 28.2456 171.375 27.1084L171.195 26.8058C170.338 25.2628 169.361 23.7901 168.271 22.4015C167.464 21.4519 166.599 20.5519 165.683 19.7066L165.601 19.6289C162.632 16.7663 159.565 13.8506 160.473 7.89639C160.943 4.80071 163.568 -2.89964 165.135 -5.18971C167.498 -8.6657 171.788 -10.9517 176.753 -13.6016L176.875 -13.667C179.026 -14.8162 181.251 -16.0021 183.504 -17.3925C187.467 -19.8093 190.489 -23.1177 193.409 -26.3074L193.462 -26.3646C197.584 -30.863 201.473 -35.1323 207.681 -36.9971C214.04 -38.915 215.622 -36.6577 218.775 -32.1552L219.413 -31.2597C219.634 -30.9489 219.863 -30.6299 220.1 -30.2905C221.137 -28.9639 222.267 -27.7134 223.482 -26.5487L223.687 -26.3401C224.366 -25.6572 225.004 -25.011 225.552 -24.369C226.1 -23.727 226.648 -23.0318 227.187 -22.3243C228.525 -20.5291 229.58 -19.11 232.025 -18.1981C239.21 -15.5114 247.503 -21.2161 250.117 -28.1149C250.755 -29.7916 250.571 -31.4191 250.382 -33.1408C250.258 -34.134 250.19 -35.1334 250.178 -36.1342C250.178 -36.6045 250.178 -37.1034 250.178 -37.5941V-37.6759C250.178 -41.3809 250.178 -45.9897 250.808 -49.3675C251.348 -52.1279 252.403 -54.2748 253.421 -56.3645L253.49 -56.5117C254.319 -58.1283 255.023 -59.8057 255.596 -61.5294V-61.5785V-61.6276C253.818 -66.6698 249.798 -66.1259 245.541 -65.5411H245.471C242.829 -65.1894 240.098 -64.8255 238.069 -66.0278C236.658 -66.8456 235.501 -68.5591 234.27 -70.3666C231.882 -73.8876 229.412 -77.5272 224.517 -76.0918C221.953 -75.2412 217.07 -72.9021 213.643 -70.6038C212.619 -69.8487 211.661 -69.0073 210.781 -68.0888C208.425 -65.7783 205.759 -63.1611 201.759 -64.3102C200.062 -64.7887 198.639 -66.0196 197.261 -67.2096C196.246 -68.1681 195.112 -68.9927 193.887 -69.6633C189.961 -71.5648 182.846 -72.4318 177.992 -71.5894C177.482 -71.479 176.985 -71.3188 176.507 -71.1109L176.438 -71.0864C175.95 -70.867 175.442 -70.6944 174.921 -70.5711C173.704 -70.3617 172.474 -70.2374 171.24 -70.199H171.101C169.617 -70.1131 168.21 -70.0354 166.938 -69.5569C165.452 -68.9351 164.039 -68.1536 162.722 -67.226C161.986 -66.7434 161.127 -66.1873 160.268 -65.7006C159.692 -65.3776 159.062 -65.1036 158.457 -64.8378L158.404 -64.8173C156.903 -64.1712 155.353 -63.5005 154.281 -62.0774L154.249 -62.0406V-61.9874C154.191 -58.9981 155.32 -56.5158 156.412 -54.1113L156.477 -53.964C157.847 -50.9747 159.14 -48.1448 158.142 -44.6606C157.283 -41.5854 154.461 -39.3444 151.734 -37.2097L151.325 -36.8826C150.339 -36.0933 149.415 -35.3532 148.614 -34.568C147.944 -33.8932 147.309 -33.1848 146.712 -32.4456C145.485 -30.957 144.307 -29.5462 142.815 -28.941C137.723 -26.8758 129.152 -31.2147 125.987 -34.1181C124.899 -35.1758 123.877 -36.2998 122.928 -37.4837L122.863 -37.5614C120.589 -40.2686 118.233 -43.078 115.8 -42.9799C114.537 -42.9349 113.346 -42.1211 112.177 -40.4976C111.748 -39.9087 111.134 -36.5023 111.478 -34.5271C111.972 -31.6236 113.911 -29.1045 115.976 -26.4342L116.058 -26.3278C117.739 -24.1277 119.481 -21.8295 120.352 -19.3063C121.415 -16.2556 121.194 -12.9923 120.994 -10.0766V-9.99476C120.851 -7.81919 120.712 -5.76631 121.165 -4.151C121.75 -2.10629 123.153 -0.356035 124.4 1.21021C125.304 2.35933 126.159 3.44302 126.617 4.48173C127.249 5.93749 127.652 7.48258 127.811 9.06187C127.882 10.3587 127.832 11.6594 127.659 12.9468L127.639 13.1349C127.455 14.8279 127.23 16.7458 127.639 18.5084C127.992 19.8716 128.47 21.1995 129.066 22.4751C129.606 23.7019 130.023 24.6875 130.072 25.4645C130.207 27.5092 128.436 35.3322 127.21 37.3565C126.445 38.5833 125.218 39.4012 124.016 40.219C123.21 40.719 122.458 41.2999 121.771 41.9529C120.776 43.0488 119.914 44.258 119.203 45.5557C117.612 48.1688 115.972 50.8719 112.578 51.2155H112.549L112.508 51.1786C110.418 49.3916 106.922 46.3981 104.223 46.8561C103.201 47.0238 102.387 47.674 101.733 48.7741C101.025 49.9763 100.825 51.0273 101.119 51.9924C101.7 53.8735 104.104 55.0104 106.239 56.0246C107.466 56.6094 108.631 57.1655 109.265 57.7871C110.84 59.382Line truncated
<path d="M131.005 15.6539C131.238 17.2897 131.88 18.7087 132.641 20.2709V20.3077C133.146 21.2635 133.556 22.266 133.868 23.3011C134.179 24.5279 134.093 26.0369 134.023 27.2842C133.917 29.2798 133.819 31.1609 134.776 32.5636C136.563 35.1604 145.817 37.9494 150.238 39.2907L150.647 39.4093C152.201 39.8714 153.8 40.2271 155.174 40.5134L155.345 40.5543C157.662 41.0134 159.939 41.6561 162.154 42.4763C162.616 42.644 163.168 42.8853 163.757 43.1674C165.679 44.0466 168.084 45.1467 170.268 45.1467C171.282 45.1734 172.278 44.8738 173.11 44.292C174.414 43.3637 176.169 39.9573 175.122 37.1765C174.606 35.8188 173.281 34.6942 171.997 33.6064L171.756 33.402C171.022 32.8305 170.353 32.1805 169.76 31.4636C169.156 30.5465 168.657 29.5643 168.272 28.5355C167.779 27.2385 167.137 26.0033 166.358 24.8551C165.455 23.6929 164.458 22.6069 163.377 21.6081L163.295 21.5263C162.263 20.5936 161.334 19.5515 160.527 18.4184C157.828 14.329 156.793 10.8489 157.255 7.50783C157.464 6.01928 158.261 4.34264 159.046 2.69869C159.484 1.76631 159.946 0.780764 160.306 -0.163889C160.58 -0.899982 160.813 -1.65652 161.042 -2.38853L161.148 -2.74022C161.696 -4.5232 162.211 -6.21212 163.213 -7.68431C164.849 -10.0725 168.914 -13.7407 171.331 -15.2988C172.774 -16.223 174.635 -16.9754 176.602 -17.777L176.79 -17.8506C179.072 -18.7707 181.661 -19.8094 184.012 -21.302C187.913 -23.7884 191.328 -27.199 194.645 -30.4991C198.059 -33.9178 201.286 -37.1444 204.843 -39.1768C205.882 -39.7377 206.957 -40.2282 208.062 -40.6449H208.103C210.221 -41.4955 212.413 -42.3747 213.926 -43.9164C215.108 -45.1105 215.721 -46.5541 216.265 -47.83C216.605 -48.7337 217.036 -49.6009 217.549 -50.4186C218.09 -51.1575 218.691 -51.8509 219.345 -52.4919C220.804 -54.0009 222.313 -55.5631 222.784 -58.3193L222.816 -58.397L222.788 -58.4747C222.052 -62.0979 220.334 -63.1939 219.107 -63.7051C216.621 -64.7519 214.045 -63.3207 211.558 -61.9384L211.481 -61.918C209.767 -60.9692 208.148 -60.0696 206.635 -59.9551C202.697 -59.677 199.429 -61.918 195.953 -64.2939C191.819 -67.1238 187.541 -70.0436 182.07 -68.3833C180.385 -68.2279 178.925 -67.3651 177.379 -66.449L177.285 -66.3959C176.199 -65.7071 175.047 -65.1276 173.846 -64.6661C172.767 -64.3175 171.666 -64.0442 170.55 -63.8482L170.214 -63.7787C167.123 -63.1653 164.448 -62.6377 162.853 -58.8387C162.036 -56.9126 162.445 -54.9742 162.853 -53.1135L162.894 -52.9172C163.198 -51.7886 163.336 -50.6218 163.303 -49.4535C163.115 -46.9998 160.85 -42.5792 158.952 -40.1337C158.061 -38.9969 156.756 -37.9132 155.374 -36.7722L155.214 -36.6373C153.726 -35.435 151.878 -33.9342 150.516 -32.1717C149.96 -31.4082 149.463 -30.6029 149.031 -29.763L148.892 -29.5176C148.033 -27.9309 147.146 -26.2911 145.968 -25.4855C144.177 -24.2587 141.744 -23.9274 138.734 -24.5081C136.256 -24.9907 133.463 -26.1889 130.997 -27.2439C127.317 -28.8061 123.522 -30.4255 120.074 -30.3723H119.665L119.718 -29.9634C119.972 -27.657 120.868 -25.5918 121.73 -23.5962C122.168 -22.5902 122.618 -21.5515 122.994 -20.4719C123.587 -18.5932 124.071 -16.6816 124.442 -14.7467L124.462 -14.6322C124.844 -12.629 125.349 -10.6514 125.975 -8.71075C126.525 -7.28202 127.217 -5.91203 128.04 -4.62135C128.826 -3.38893 129.496 -2.08714 130.044 -0.732322C130.904 1.80938 131.377 4.46579 131.447 7.14797C131.457 8.36441 131.374 9.57985 131.197 10.7834C130.923 12.3918 130.858 14.029 131.005 15.6539V15.6539ZM131.455 10.8898C131.632 9.67113 131.716 8.4407 131.704 7.20931C131.634 4.49474 131.154 1.80636 130.281 -0.765032C129.721 -2.13855 129.037 -3.45809 128.237 -4.70722C127.422 -5.97529 126.737 -7.32202 126.192 -8.7271C125.569 -10.6566 125.068 -12.6234 124.691 -14.6158L124.667 -14.7263C124.294 -16.6764 123.808 -18.603 123.211 -20.4964C122.83 -21.5842 122.393 -22.6311 121.939 -23.6453C121.084 -25.6204 120.197 -27.6651 119.952 -29.9266V-30.0084H120.033C123.436 -30.0697 127.194 -28.4544 130.833 -26.9045C133.316 -25.8413 136.125 -24.639 138.636 -24.1483C141.728 -23.5553 144.239 -23.8988 146.099 -25.1747C147.326 -26.0253 148.246 -27.6978 149.121 -29.3132L149.256 -29.5585C149.684 -30.3828 150.172 -31.1742 150.716 -31.9263C152.057 -33.6602 153.894 -35.1487 155.366 -36.3429L155.525 -36.4778C156.924 -37.631 158.245 -38.7229 159.153 -39.8884C161.087 -42.3666 163.377 -46.8731 163.569 -49.3717C163.605 -50.5684 163.467 -51.764 163.16 -52.9213L163.115 -53.1176C162.727 -54.9456 162.326 -56.8349 163.115 -58.6751C164.653 -62.3228 167.25 -62.8381 170.288 -63.4393L170.591 -63.5006C171.721 -63.7042 172.836 -63.9871 173.928 -64.3471C175.148 -64.8151 176.319 -65.4028 177.424 -66.1015L177.522 -66.1587C179.035 -67.0543 180.467 -67.9008 182.11 -68.0562C187.476 -69.692 191.688 -66.8294 195.777 -64.0159C199.286 -61.6154 202.598 -59.3458 206.639 -59.632C208.225 -59.7547 209.869 -60.6666 211.632 -61.644L211.685 -61.6726C214.11 -63.018 216.621 -64.4084 218.968 -63.4188C220.134 -62.9403 221.765 -61.8975 222.481 -58.4093C222.027 -55.7307 220.551 -54.2013 219.103 -52.7046C218.443 -52.0565 217.837 -51.3548 217.292 -50.6067C216.768 -49.7718 216.328 -48.8869 215.979 -47.964Line truncated
<path d="M134.436 -1.44835V-0.986243C134.436 0.383708 134.469 1.79864 134.579 3.13996C134.636 3.88424 134.681 4.61624 134.73 5.3646V5.67131C134.951 8.9142 135.176 12.2675 135.998 15.2691C136.32 16.3355 136.696 17.3851 137.123 18.4139L137.143 18.4671C137.628 19.6068 138.044 20.7743 138.39 21.9635C138.628 22.8512 138.819 23.7508 138.963 24.6584C139.27 26.3801 139.564 28.0035 140.443 29.1895C142.406 31.8394 147.718 33.8841 151.71 33.8841C152.615 33.901 153.517 33.7627 154.376 33.4752C156.551 32.6859 158.02 31.455 158.739 29.7947C160.203 26.4414 158.33 22.0248 156.654 18.0908L156.56 17.87C156.179 16.9703 155.819 16.1156 155.513 15.3059C153.775 10.599 152.315 6.04344 153.468 2.06854C153.893 0.885773 154.48 -0.231888 155.214 -1.25205L155.247 -1.30112C155.779 -2.10078 156.264 -2.931 156.699 -3.78749C157.043 -4.51703 157.331 -5.27164 157.561 -6.04483L157.586 -6.11436C157.81 -6.88157 158.12 -7.62099 158.51 -8.31854C160.51 -11.5287 164.644 -15.5282 168.591 -18.0391C170.815 -19.4744 173.15 -20.3496 175.62 -21.2779L175.817 -21.3515C179.338 -22.6601 182.977 -24.0178 186.539 -27.0766C188.645 -28.8637 190.841 -30.9697 193.168 -33.2107L193.536 -33.5624C195.536 -35.4845 197.662 -37.521 199.752 -39.3857C200.946 -40.4107 202.198 -41.3664 203.502 -42.2483C206.573 -44.3339 209.436 -46.3786 210.037 -50.1491V-50.2104V-50.2554C209.489 -54.2548 205.277 -56.0296 201.204 -57.7513L201.134 -57.7799C199.498 -58.4225 197.907 -59.1767 196.374 -60.0372C195.438 -60.6179 194.558 -61.2641 193.704 -61.9184L193.577 -62.0165C190.882 -64.0408 188.338 -65.9505 184.368 -65.1735C180.102 -65.0754 179.17 -61.1904 178.266 -57.4323V-57.3669C177.808 -55.4776 177.33 -53.5228 176.418 -52.1938C175.506 -50.8647 173.584 -49.7401 171.711 -48.5951C169.752 -47.4133 167.311 -45.9411 165.54 -43.9863C164.37 -42.602 163.355 -41.0935 162.514 -39.488L162.448 -39.3776C161.784 -38.108 160.991 -36.9103 160.081 -35.8034C159.447 -35.1665 158.763 -34.5812 158.036 -34.0532L158.003 -34.0286C156.695 -32.9981 155.206 -31.8326 154.126 -30.295C152.94 -28.6347 152.135 -26.6881 151.358 -24.8029C150.34 -22.3493 149.375 -20.0224 147.788 -19.0778C145.743 -17.8755 142.553 -17.8509 138.276 -18.9919C137.39 -19.2599 136.529 -19.6061 135.704 -20.0265H135.659C133.827 -20.8689 131.929 -21.7441 129.786 -21.0898L129.623 -21.0489L129.549 -20.8894C129.148 -20.0972 128.93 -19.2252 128.911 -18.3376C128.911 -16.4033 130.089 -14.833 131.226 -13.3117C132.161 -12.1713 132.933 -10.9065 133.52 -9.55355C134.37 -7.38208 134.403 -4.49904 134.436 -1.44835ZM129.214 -18.3498C129.233 -19.1923 129.441 -20.0198 129.823 -20.7708V-20.7994H129.852C131.896 -21.421 133.728 -20.5704 135.507 -19.7525L135.552 -19.7321C136.395 -19.3048 137.274 -18.9518 138.178 -18.677C142.537 -17.5115 145.817 -17.5524 147.927 -18.7997C149.599 -19.7893 150.581 -22.1571 151.607 -24.668C152.38 -26.5328 153.178 -28.4629 154.343 -30.0987C155.398 -31.5954 156.866 -32.7486 158.163 -33.7792L158.191 -33.8037C158.929 -34.3431 159.622 -34.9407 160.265 -35.5908C161.188 -36.7128 161.994 -37.927 162.669 -39.214L162.735 -39.3285C163.565 -40.9194 164.567 -42.4142 165.724 -43.7859C167.462 -45.708 169.883 -47.1638 171.825 -48.3375C173.768 -49.5111 175.69 -50.6643 176.626 -52.0179C177.563 -53.3715 178.054 -55.3794 178.52 -57.2932V-57.3628C179.395 -61.0064 180.303 -64.7728 184.355 -64.8709C188.22 -65.6234 190.71 -63.7504 193.372 -61.7507L193.475 -61.673C194.333 -61.031 195.221 -60.3644 196.17 -59.7796C197.716 -58.9069 199.322 -58.1431 200.975 -57.4936L201.04 -57.4691C205.035 -55.7802 209.162 -54.0381 209.685 -50.2145C209.1 -46.5627 206.287 -44.5752 203.289 -42.4446C201.984 -41.5609 200.73 -40.6052 199.531 -39.582C197.437 -37.7132 195.307 -35.6767 193.307 -33.7505L192.939 -33.3989C190.616 -31.1701 188.441 -29.0682 186.322 -27.2852C182.805 -24.2754 179.19 -22.93 175.69 -21.6214L175.518 -21.5559C173.032 -20.6236 170.68 -19.7443 168.427 -18.2844C164.46 -15.749 160.277 -11.7127 158.257 -8.46985C157.852 -7.75242 157.531 -6.9909 157.3 -6.20023L157.275 -6.12663C157.046 -5.36693 156.761 -4.62482 156.425 -3.90608C155.998 -3.05881 155.519 -2.2393 154.989 -1.45244L154.961 -1.40336C154.21 -0.35811 153.61 0.787151 153.178 1.99902C151.992 6.06389 153.472 10.6686 155.222 15.4286C155.529 16.2465 155.893 17.1012 156.273 18.009L156.367 18.2299C158.003 22.0862 159.864 26.4577 158.453 29.6802C157.77 31.2423 156.359 32.4201 154.27 33.1766C150.565 34.5302 143.077 32.2197 140.685 28.9891C139.867 27.8604 139.564 26.2696 139.261 24.5889C139.115 23.6719 138.923 22.7629 138.685 21.8654C138.332 20.666 137.912 19.4877 137.425 18.3362V18.283C136.999 17.2663 136.628 16.2274 136.313 15.171C135.495 12.198 135.27 8.86104 135.053 5.6345V5.33189C135.004 4.57944 134.955 3.84334 134.902 3.09907C134.792 1.76592 134.775 0.359167 134.759 -0.990336V-1.43608C134.726 -4.5154 134.694 -7.42706 133.818 -9.66396C133.221 -11.0418 132.435 -12.3299 131.483 -13.4916C130.359 -14.9884 129.214 -16.526 129.214 -18.3498V-18.3498Z" stroke="#364152" stroke-width="0.147239" stroke-miterlimit="10"/>
<path d="M133.041 20.074C133.561 21.0689 133.982 22.1126 134.297 23.1901C134.628 24.4496 134.546 25.8891 134.472 27.2795V27.3736C134.378 29.2588 134.293 31.054 135.159 32.3054C136.848 34.7795 146.373 37.6461 150.437 38.873L150.769 38.9629C152.229 39.4046 153.701 39.7277 155.124 40.0426L155.398 40.1039C157.755 40.5667 160.071 41.2163 162.325 42.0463C162.8 42.2222 163.352 42.4798 163.961 42.7661C165.83 43.6167 168.177 44.684 170.259 44.684C171.177 44.7128 172.08 44.4462 172.835 43.9234C174.009 43.081 175.649 39.8626 174.692 37.3354C174.217 36.0799 172.925 34.988 171.657 33.9207C170.823 33.2831 170.065 32.5503 169.4 31.737C168.797 30.8216 168.294 29.8441 167.899 28.8212L167.854 28.7149C167.373 27.4489 166.747 26.2427 165.99 25.1203C165.108 23.9691 164.128 22.8964 163.061 21.9142L162.992 21.8447C161.93 20.8891 160.978 19.8178 160.154 18.6509C157.394 14.4511 156.334 10.881 156.825 7.42137C157.042 5.87558 157.839 4.18665 158.612 2.55089L158.641 2.48546C159.087 1.56534 159.545 0.587975 159.896 -0.33623C160.215 -1.19501 160.481 -2.06605 160.714 -2.8185C161.254 -4.57695 161.81 -6.39264 162.873 -7.95479C164.538 -10.4084 168.672 -14.1298 171.118 -15.6919C172.639 -16.6693 174.577 -17.4545 176.626 -18.2846L176.569 -18.4237L176.675 -18.301C179.059 -19.262 181.525 -20.2516 183.795 -21.6993C187.672 -24.1529 191.058 -27.5553 194.341 -30.8391C197.776 -34.2742 201.019 -37.5171 204.622 -39.5904C205.688 -40.1579 206.789 -40.6564 207.918 -41.083H207.963C210.036 -41.9255 212.183 -42.7924 213.611 -44.2319C214.723 -45.3565 215.291 -46.6855 215.848 -48.0105L215.888 -48.1005C216.24 -48.9959 216.674 -49.857 217.185 -50.6727C217.675 -51.3609 218.222 -52.0066 218.821 -52.6029L218.996 -52.7869C220.411 -54.2428 221.859 -55.7517 222.329 -58.373V-58.4303C221.638 -61.7591 220.145 -62.7732 218.919 -63.2803C216.625 -64.2413 214.13 -62.8714 211.701 -61.5055L211.664 -61.4851C209.996 -60.5609 208.266 -59.604 206.655 -59.4813C202.565 -59.1868 199.081 -61.571 195.683 -63.8897C191.634 -66.6664 187.443 -69.5412 182.147 -67.9055C180.511 -67.7623 179.055 -66.879 177.628 -66.0284L177.587 -66.0039C176.455 -65.2905 175.255 -64.6905 174.005 -64.2127C172.803 -63.8136 171.573 -63.5074 170.324 -63.2967H170.283C167.2 -62.6833 164.763 -62.1966 163.258 -58.6307C162.497 -56.8273 162.894 -54.9707 163.258 -53.1754L163.286 -53.0568C163.549 -52.0192 163.703 -50.957 163.744 -49.8875C163.744 -49.7199 163.744 -49.5359 163.744 -49.3723C163.532 -46.8 161.262 -42.3508 159.279 -39.8031C158.334 -38.5763 156.956 -37.4639 155.5 -36.2698L155.467 -36.2412C153.918 -34.9817 152.159 -33.5504 150.842 -31.841C150.245 -31.0154 149.716 -30.1429 149.26 -29.232C148.376 -27.5962 147.46 -25.9277 146.201 -25.069C144.303 -23.7685 141.752 -23.4087 138.611 -24.0057C136.137 -24.5005 133.426 -25.6415 130.788 -26.7661L130.747 -26.7865C127.23 -28.2873 123.595 -29.8372 120.303 -29.874H120.127L120.151 -29.6981C120.45 -27.5267 121.288 -25.5842 122.102 -23.7113C122.535 -22.7175 122.989 -21.6666 123.37 -20.5502C123.978 -18.6523 124.467 -16.7183 124.834 -14.7596C125.218 -12.7411 125.728 -10.7485 126.359 -8.79312C126.897 -7.39011 127.583 -6.0481 128.404 -4.78959L128.481 -4.65464C129.25 -3.44008 129.906 -2.15743 130.44 -0.822871C131.313 1.762 131.788 4.46471 131.847 7.19236C131.862 8.43323 131.78 9.67337 131.602 10.9015V10.9015C131.352 12.4495 131.303 14.0234 131.459 15.5838C131.696 17.2605 132.411 18.7572 133.041 20.074ZM131.904 10.9383C132.083 9.69791 132.164 8.4454 132.146 7.19236C132.076 4.43328 131.589 1.70061 130.702 -0.912838C130.161 -2.26458 129.497 -3.56367 128.719 -4.79368L128.637 -4.92864C127.838 -6.17207 127.169 -7.49446 126.641 -8.87491C126.015 -10.8185 125.51 -12.7988 125.128 -14.8045C124.758 -16.7759 124.265 -18.7221 123.652 -20.6319C123.267 -21.7524 122.809 -22.8198 122.372 -23.8176C121.591 -25.621 120.785 -27.498 120.47 -29.5427C123.656 -29.4569 127.193 -27.9438 130.62 -26.4839L130.677 -26.4553C133.311 -25.3388 136.039 -24.1856 138.546 -23.6867C141.768 -23.0733 144.402 -23.4455 146.369 -24.795C147.685 -25.6946 148.618 -27.4081 149.53 -29.0807C149.976 -29.9718 150.495 -30.8252 151.08 -31.6324C152.372 -33.3173 154.114 -34.7322 155.651 -35.9836L155.688 -36.0122C157.156 -37.2145 158.551 -38.3513 159.512 -39.5945C161.524 -42.1749 163.822 -46.7019 164.039 -49.3314C164.039 -49.5031 164.059 -49.6953 164.059 -49.8671C164.018 -50.9587 163.862 -52.043 163.593 -53.1018L163.569 -53.2204C163.196 -54.9666 162.812 -56.7782 163.532 -58.4916C164.975 -61.9104 167.343 -62.3807 170.373 -62.99C171.632 -63.2046 172.871 -63.515 174.082 -63.9183C175.351 -64.4026 176.569 -65.0107 177.718 -65.734L177.759 -65.7585C179.157 -66.5764 180.601 -67.4597 182.167 -67.5988H182.22C187.389 -69.1895 191.516 -66.3719 195.527 -63.6116C198.946 -61.2765 202.479 -58.8597 206.675 -59.1623C208.352 -59.2932 210.11 -60.2665 211.807 -61.207L211.86 -61.2356C214.208 -62.5402 216.641 -63.8897 218.812 -62.99C219.961 -62.5115 221.364 -61.5546 222.031 -58.3853C221.585 -55.8785 220.162 -54.4104 218.784 -52.9914L218.608 -52.8074C217.251 -51.539Line truncated
<path d="M307.242 19.8453C305.84 19.7144 304.56 19.6735 303.37 19.6408C298.928 19.4977 295.424 19.3832 292.328 15.0729C291.132 13.4545 290.282 11.6073 289.83 9.64628C289.63 8.5363 289.665 7.39688 289.932 6.30115L289.964 6.15393C290.116 5.52699 290.195 4.88495 290.202 4.24009C290.169 0.2611 289.461 -1.46463 287.785 -4.05731C287.183 -4.88497 286.491 -5.6422 285.72 -6.31466L285.683 -6.34737C284.613 -7.31969 283.636 -8.38886 282.763 -9.54121C278.674 -15.1723 282.252 -20.8525 285.417 -25.862C286.321 -27.2851 287.118 -28.561 287.752 -29.7919C288.979 -30.4381 289.977 -30.6303 290.823 -30.3726C292.369 -29.8901 293.379 -27.8658 294.451 -25.7189C294.618 -25.4081 294.786 -25.085 294.962 -24.7497L295.125 -24.4307C297.17 -20.5417 297.346 -19.2495 297.28 -14.931C297.28 -14.5753 297.28 -14.2154 297.252 -13.8596V-13.4507C297.137 -10.355 297.015 -7.15708 300.008 -4.92017C301.349 -3.94867 302.907 -3.32034 304.547 -3.09009C306.186 -2.85983 307.857 -3.03466 309.414 -3.5993C312.154 -4.55622 314.166 -6.5314 314.791 -8.88281C315.899 -13.0622 313.315 -21.4373 311.929 -23.2203C310.624 -24.8969 309.332 -25.2854 307.365 -25.8784L306.985 -25.9929C306.801 -26.046 306.612 -26.1033 306.416 -26.1687C302.903 -27.2647 300.364 -28.4792 297.796 -31.4481C297.326 -32.0104 296.89 -32.6004 296.491 -33.2148L296.291 -33.5051C295.526 -34.6052 294.733 -35.7461 293.837 -36.3145C288.411 -39.8846 284.935 -36.0651 281.569 -32.356C280.459 -31.0571 279.239 -29.8571 277.921 -28.7696C276.583 -27.8232 275.126 -27.0586 273.586 -26.4959L273.521 -26.4672C271.456 -25.6003 269.321 -24.7006 267.579 -22.5741C266.908 -21.6777 266.376 -20.6851 266.001 -19.6298L265.972 -19.5562C265.745 -18.9177 265.435 -18.3115 265.052 -17.7527C262.942 -14.8656 256.378 -8.98095 251.966 -8.0363C249.312 -7.46787 246.989 -8.33891 244.298 -9.35309C242.412 -10.1164 240.462 -10.7116 238.471 -11.132C237.614 -11.2731 236.75 -11.3578 235.882 -11.3855H235.637C234.946 -11.4223 234.165 -11.4632 233.441 -11.5695C228.37 -12.3261 224.959 -13.9905 221.663 -17.2947C220.799 -18.2142 219.993 -19.1867 219.25 -20.2064L219.12 -20.3781C218.447 -21.3111 217.706 -22.1927 216.903 -23.0158L216.494 -23.4247C212.438 -27.4364 207.387 -32.4214 201.065 -26.2178C199.902 -24.9684 198.827 -23.6403 197.847 -22.2429L197.384 -21.6213C196.204 -19.9238 195.18 -18.1225 194.326 -16.2396L194.305 -16.1947C193.05 -13.6388 191.851 -11.2219 189.946 -9.58618C187.517 -7.50877 184.36 -6.41281 181.305 -5.34957L181.084 -5.27595C177.26 -3.95098 173.314 -2.58104 170.517 0.694571C168.711 2.73824 167.703 5.36509 167.679 8.09231C167.685 8.71281 167.737 9.33202 167.834 9.94481C168.542 14.2469 171.674 18.4671 176.226 21.252C176.794 22.4788 177.968 23.8038 179.088 25.092L179.15 25.1615C180.237 26.337 181.229 27.5978 182.115 28.9319C183.853 31.7372 183.603 35.7326 183.317 40.3822C183.133 43.2448 182.908 46.4795 183.247 49.8492C183.587 53.3007 184.29 60.4817 181.722 62.8862C181.15 63.426 180.123 63.9372 179.031 64.477L178.933 64.5261C177.334 65.3113 175.527 66.1987 174.3 67.5154L174.226 67.6013H174.206L174.148 67.7035L174.058 67.8099C173.883 68.0634 173.351 68.7832 172.856 69.4456L172.795 69.4211L172.729 69.5397C172.701 69.5929 172.668 69.6379 172.635 69.691C172.404 70.0365 172.194 70.3957 172.006 70.7665L172.28 70.9056C172.464 70.5439 172.669 70.193 172.893 69.8546L172.926 69.8055H172.958L173.028 69.7115C173.326 69.3025 174.296 68.0103 174.382 67.8549L174.512 67.6995C175.694 66.4277 177.477 65.5525 179.052 64.7796L179.15 64.7306C180.262 64.1826 181.313 63.6591 181.918 63.0948C184.593 60.5839 183.881 53.3048 183.554 49.8042C183.231 46.4591 183.44 43.2326 183.624 40.3986C183.914 35.7162 184.163 31.6718 182.397 28.7888C181.502 27.4395 180.501 26.1636 179.403 24.9734L179.342 24.9039C178.205 23.6198 177.036 22.2907 176.479 21.0966L176.459 21.0557L176.422 21.0312C171.924 18.2913 168.828 14.1364 168.133 9.91209C168.036 9.3157 167.986 8.71279 167.982 8.10866C168.006 5.45415 168.989 2.89798 170.75 0.911322C173.482 -2.30295 177.395 -3.65654 181.182 -4.96924L181.399 -5.04286C184.482 -6.11429 187.668 -7.22251 190.138 -9.33674C192.101 -11.0134 193.303 -13.4589 194.575 -16.0434V-16.0883C195.424 -17.9476 196.438 -19.7268 197.605 -21.4046L198.071 -22.0343C199.041 -23.418 200.105 -24.7325 201.257 -25.9683C207.363 -31.9675 212.299 -27.0929 216.277 -23.1507L216.646 -22.7704C217.453 -21.9715 218.2 -21.1146 218.882 -20.2064L219.009 -20.0387C219.765 -19.0121 220.584 -18.0342 221.463 -17.1107C224.808 -13.7369 228.272 -12.048 233.412 -11.2792C234.148 -11.1729 234.942 -11.1279 235.637 -11.0911H235.882C236.736 -11.0631 237.587 -10.9798 238.43 -10.8416C240.4 -10.4198 242.329 -9.8259 244.196 -9.06683C246.928 -8.04039 249.291 -7.1489 252.035 -7.73778C256.509 -8.70288 263.163 -14.653 265.293 -17.5728C265.686 -18.147 266.002 -18.7697 266.234 -19.4253L266.262 -19.4989C266.622 -20.5269 267.139 -21.4926 267.796 -22.3615C269.485 -24.4307 271.583 -25.314 273.615 -26.1687L273.68 -26.1973C275.244 -26.7692 276.725 -27.5461 278.085 -28.5079C279.422 -29.6124 280.66 -30.8316 281.786 -3Line truncated
<path d="M176.091 54.6299L176.136 54.6054C177.195 53.8856 178.18 53.2027 178.839 52.1027C179.497 51.0026 179.657 49.7349 179.82 48.5531V48.4958C179.882 47.9846 179.943 47.5307 180.025 47.1095L180.241 46.0994C181.018 42.3453 181.82 38.4645 181.292 34.1952L181.256 34.0766C178.557 29.3737 174.995 25.2803 171.551 21.3258L171.478 21.2399C170.59 20.2217 169.707 19.2157 168.848 18.2097C165.986 14.8359 164.137 12.2964 164.55 7.87576C164.894 4.09306 166.149 -1.08413 170.157 -4.25342C172.496 -6.11001 174.602 -7.05466 176.851 -8.06474L176.913 -8.08928C179.403 -9.22204 181.979 -10.3916 185.198 -12.9107C189.43 -16.2272 192.477 -19.9813 195.188 -23.3182C198.95 -27.976 202.201 -31.9959 207.297 -32.7607C211.55 -33.4068 212.744 -31.9837 214.404 -30.0167C214.584 -29.8122 214.772 -29.5873 214.969 -29.3583C215.921 -28.2582 216.882 -27.0478 217.901 -25.7678L218.093 -25.5265C221.802 -20.8114 226.006 -15.4707 231.461 -14.0435C232.688 -13.7286 234.393 -13.7327 236.041 -13.7408C237.42 -13.7698 238.799 -13.7166 240.172 -13.5813C241.433 -13.3827 242.675 -13.0776 243.885 -12.6694C245.897 -12.0601 247.794 -11.4794 249.863 -11.8515C254.848 -12.788 260.112 -18.0224 261.13 -23.0565C262.148 -28.0906 260.676 -32.2577 259.245 -36.2407L259.22 -36.3021C257.854 -40.1502 256.562 -43.7857 257.478 -48.1123C258.034 -50.6968 259.384 -52.5207 260.692 -54.2832C262.582 -56.8309 264.373 -59.2396 263.305 -63.329C261.67 -69.6348 255.323 -71.8226 249.201 -73.9369C246.461 -74.8815 243.885 -75.773 241.754 -77.0366C241.137 -78.3104 240.826 -79.7108 240.846 -81.126V-81.2487C240.837 -82.1237 240.729 -82.9948 240.523 -83.8455C239.791 -86.5813 238.593 -88.3029 236.843 -89.1086C233.69 -90.5807 229.547 -88.626 225.896 -86.9044C224.215 -86.111 222.473 -85.2931 221.135 -85.011C218.829 -84.5243 214.813 -84.553 211.996 -85.0682C210.36 -85.3371 208.801 -85.9537 207.424 -86.8764C206.047 -87.7992 204.884 -89.0066 204.013 -90.4172C201.216 -94.8051 200.95 -100.612 201.887 -104.149C203.383 -109.875 205.363 -109.875 209.697 -109.805H209.845C212.255 -109.742 214.666 -109.903 217.046 -110.288C223.618 -111.404 228.059 -116.831 229.232 -125.161C230.799 -136.227 230.758 -145.326 229.102 -152.241C228.554 -153.468 228.476 -154.47 228.868 -155.291C229.633 -156.903 232.099 -157.553 234.279 -158.121L234.659 -158.224C234.917 -158.289 235.166 -158.354 235.399 -158.424L235.518 -158.461L235.591 -158.551C236.651 -159.863 236.692 -161.749 235.698 -163.458C234.814 -164.979 233.023 -166.366 230.991 -166.038L230.885 -166.002C229.122 -165 228.639 -162.922 228.214 -161.094C228.181 -160.963 228.153 -160.837 228.124 -160.71C228.067 -160.469 228.014 -160.231 227.952 -160.011C225.675 -157.766 222.248 -158.244 219.491 -158.628L219.295 -158.657C218.629 -158.751 217.999 -158.845 217.426 -158.886C216.658 -158.947 215.885 -159.005 215.12 -159.054L214.674 -159.091C210.02 -159.45 205.203 -159.827 201.997 -160.694C198.586 -161.626 197.004 -163.965 195.454 -166.28C193.732 -168.823 192.109 -171.228 188.257 -171.637C185.627 -171.919 181.885 -171.592 179.26 -169.817L179.178 -169.76L179.121 -169.649C176.954 -164.775 178.683 -161.152 180.205 -157.958C181.174 -155.913 182.172 -153.827 181.885 -151.652C181.615 -149.607 179.076 -147.391 177.039 -145.604L176.831 -145.42C176.048 -144.769 175.311 -144.067 174.623 -143.318C173.768 -142.284 173.005 -141.179 172.341 -140.013C171.482 -138.623 170.672 -137.306 169.437 -136.333C167.601 -134.873 165.151 -134.362 162.518 -133.818L162.391 -133.789C159.807 -133.25 157.136 -132.689 155.083 -131.09L154.997 -131.017L154.973 -130.915C152.928 -125.455 150.687 -121.329 147.874 -117.931L147.743 -117.783L147.796 -117.583C148.367 -115.551 149.25 -113.619 150.413 -111.858L150.458 -111.784C151.485 -110.169 152.159 -109.106 151.812 -106.558C151.497 -104.198 149.452 -101.467 147.473 -98.825C144.492 -94.8296 141.412 -90.6952 142.827 -86.7858C144.132 -83.1789 149.959 -80.8316 153.562 -80.1323C153.971 -80.0628 154.482 -80.0015 155.271 -79.9278C157.271 -79.7356 160.003 -79.4698 161.05 -78.0304C161.508 -77.3883 161.614 -76.6236 161.385 -75.6135C160.53 -71.7777 154.515 -70.8616 151.382 -71.426C150.307 -71.6596 149.269 -72.0379 148.295 -72.5506L148.242 -72.5751C146.704 -73.2948 145.248 -73.9778 143.429 -73.5606C143.07 -73.4308 142.746 -73.219 142.483 -72.9422C142.221 -72.6653 142.026 -72.331 141.915 -71.9658C141.827 -71.3176 141.82 -70.6609 141.895 -70.011V-69.9538L141.973 -69.8066C143.719 -67.7619 145.559 -64.3758 147.338 -61.1002C148.606 -58.7611 149.845 -56.4956 151.121 -54.4999C152.941 -51.6128 153.873 -49.4291 154.131 -47.4089C154.805 -42.1663 144.459 -35.1407 139.58 -34.47C133.107 -33.5663 129.737 -37.2835 126.167 -41.2175C123.48 -44.1865 120.704 -47.2576 116.479 -48.1327C116.267 -48.1777 116.03 -48.2268 115.772 -48.2881C114.312 -48.6194 112.5 -49.0324 111.081 -48.513C108.018 -47.3517 106.17 -42.6775 106.383 -39.0174C106.689 -33.8403 109.552 -27.8288 112.214 -24.5737C112.5 -24.2138 112.787 -23.8744 113.077 -23.5268C115.203 -20.9627 117.04 -18.7504 116.757 -15.3725C116.595 -14.0171 116.307 -12Line truncated
<path d="M284.582 30.3267C283.61 29.1102 282.767 27.7959 282.067 26.4049C281.451 24.9216 281.038 23.3617 280.84 21.7675V21.6735C280.671 20.4319 280.361 19.2136 279.916 18.0421C279.131 16.1937 277.512 14.5293 275.798 12.7709L275.463 12.4233C274.858 11.7976 274.236 11.1514 273.635 10.489C273.021 9.77611 272.448 9.0293 271.917 8.25206L271.823 8.12529C271.226 7.22025 270.526 6.38729 269.738 5.64302C269.648 5.56532 269.554 5.49989 269.464 5.42628C266.331 2.80497 262.896 2.27743 258.332 3.71282H258.287C256.673 3.43711 255.085 3.02673 253.54 2.48599L253.376 2.43283C251.605 1.79847 249.777 1.33828 247.917 1.0588C246.678 0.923396 245.43 0.896025 244.187 0.977003H243.95C242.249 1.02608 240.486 1.07515 238.814 0.568063C237.693 0.183195 236.62 -0.328572 235.616 -0.957277C233.383 -2.24135 231.269 -3.45182 228.431 -2.25362L228.378 -2.2209C228.32 -2.15956 228.255 -2.10641 228.198 -2.04915H228.173L228.087 -1.97963C227.936 -1.82423 227.785 -1.6811 227.629 -1.54206C224.595 0.981103 220.845 0.772539 216.551 0.523085H216.51C213.883 0.29751 211.241 0.29751 208.613 0.523085C204.786 0.932026 199.87 2.45737 196.018 3.74144C193.536 4.55933 190.003 5.73708 188.248 7.26243C187.754 7.61866 187.337 8.07065 187.021 8.59148C186.522 9.44725 186.252 10.4181 186.24 11.4091C186.24 14.2717 188.551 16.7253 190.78 19.1462L190.849 19.2198C193.368 21.9352 195.977 24.7405 195.605 28.0366C195.499 28.4455 195.384 28.8545 195.266 29.2839L195.065 30.0077C193.838 34.3588 192.28 39.7773 192.898 47.2322C193.618 55.6932 195.646 57.7584 203.743 58.2736C207.489 58.519 210.028 58.4536 211.734 58.0651C213.271 57.7011 215.238 56.8833 217.32 56.0204L217.459 55.9631C222.092 54.0125 227.347 51.8042 230.479 53.2927C231.976 54.0084 232.806 55.4438 233.612 56.8301L233.632 56.871C234.023 57.623 234.486 58.3352 235.015 58.9975C236.492 60.6694 238.055 62.2637 239.697 63.7739C241.66 65.6264 243.279 67.2008 244.801 68.857C245.361 69.4704 246.027 70.182 246.719 70.9017L246.939 70.6891C246.244 69.9612 245.586 69.2496 245.03 68.6444C243.5 66.9759 241.877 65.4015 239.91 63.5408C238.275 62.0474 236.722 60.468 235.256 58.8094C234.735 58.1646 234.282 57.4685 233.902 56.732L233.882 56.691C233.064 55.2638 232.197 53.7876 230.61 53.0106C227.339 51.4648 222.023 53.7017 217.34 55.6769L217.201 55.7341C215.132 56.597 213.173 57.4149 211.664 57.7788C209.987 58.1592 207.477 58.2246 203.759 57.9792C195.879 57.4762 193.904 55.4642 193.205 47.2159C192.812 42.2973 193.306 37.3482 194.664 32.6045C193.415 37.164 192.971 41.9066 193.352 46.6188C194.055 54.8549 195.904 56.7401 203.776 57.2513C207.456 57.4926 210.004 57.4271 211.623 57.0509C213.104 56.7033 214.981 55.9304 217.279 54.9571C222.006 52.9738 227.359 50.7246 230.668 52.3072C232.303 53.0801 233.154 54.5768 233.992 56.0245L234.095 56.2003C234.458 56.8783 234.881 57.5228 235.358 58.1264C236.833 59.7788 238.39 61.3552 240.024 62.8497C241.881 64.6245 243.549 66.2357 245.144 67.9614C245.757 68.628 246.518 69.4582 247.361 70.3251L247.581 70.1125C246.763 69.2496 245.982 68.4195 245.369 67.7529C243.77 66.019 242.097 64.4078 240.237 62.6289C238.616 61.1438 237.071 59.5783 235.608 57.9383C235.145 57.3463 234.735 56.7155 234.381 56.0531L234.283 55.8773C233.42 54.3887 232.532 52.8511 230.823 52.0373C227.392 50.4015 221.969 52.6753 217.185 54.6832C214.899 55.6523 213.034 56.4171 211.578 56.7606C209.992 57.1286 207.452 57.1695 203.808 56.9528C196.153 56.4661 194.354 54.63 193.671 46.6066C193.061 39.2906 194.587 33.9294 195.809 29.656C195.932 29.2471 196.047 28.8136 196.157 28.4046L196.378 27.5868C196.787 23.8572 194.043 20.921 191.389 18.083C188.461 14.9546 185.696 11.9939 187.708 8.37475C187.923 8.01842 188.2 7.70389 188.526 7.44644C190.162 6.21962 192.984 5.19318 195.977 4.17492C200.124 2.80497 204.872 1.34914 208.609 0.952468C211.203 0.735674 213.81 0.735674 216.404 0.952468H216.526C221.127 1.23464 224.807 1.45137 227.825 -1.2967C228.014 -1.45619 228.202 -1.62385 228.386 -1.80379C231.293 -3.03061 233.53 -1.74653 235.71 -0.499266C236.698 0.122896 237.756 0.625335 238.863 0.997458C240.527 1.49228 242.208 1.4432 243.987 1.4064H244.204C245.451 1.33169 246.702 1.35493 247.945 1.47591C249.814 1.7667 251.651 2.23222 253.433 2.86632C255.001 3.40613 256.607 3.82716 258.238 4.12585H258.275H258.308C262.72 2.75181 266.209 3.23845 269.259 5.65938C269.952 6.31441 270.567 7.0456 271.095 7.83902L271.284 8.09258C271.832 8.89315 272.426 9.66183 273.062 10.3949C273.696 11.1065 274.351 11.7812 274.984 12.4396L275.226 12.6891C276.898 14.4025 278.477 16.0219 279.205 17.7558C279.636 18.8894 279.933 20.0698 280.088 21.2727V21.3095C280.307 22.9653 280.743 24.585 281.384 26.1268C282.099 27.5696 282.967 28.9311 283.973 30.1876C285.016 31.5944 286.099 33.0502 286.251 34.1993C286.472 35.8596 285.584 37.8798 284.799 39.6955L284.709 39.9122C284.339 40.7343 284.019 41.5783 283.752 42.4395C283.159 44.5292 282.701 46.7702 282.255 48.9335L282.141 49.4896C281.393 53.1701 280.685 56.6338 279.45 59.2183C278.301 59.4503 277.129 59.5464 275.958 59.5046H275.884C273.475 59.5414 270.977 Line truncated
<path d="M60.1721 37.0005C62.9897 37.6343 65.9831 38.1864 68.6208 38.1864C70.6164 38.1864 72.4117 37.8674 73.7693 37.025C75.0446 36.2553 76.1317 35.2102 76.9509 33.9661C77.2524 33.4739 77.6419 33.0414 78.1 32.6902C80.3328 31.1894 83.1504 31.5861 86.1562 32.0114H86.2298C88.3031 32.2977 90.4459 32.6003 92.6542 32.3345C93.7829 32.2159 94.9402 31.9869 96.0607 31.7661L96.351 31.7088C98.9519 31.1976 101.643 30.6701 104.391 31.079C105.703 31.3513 106.988 31.7456 108.227 32.2568C110.619 33.1564 113.334 34.1706 115.465 33.7003C116.218 33.5583 116.934 33.262 117.568 32.8298C118.201 32.3977 118.738 31.8392 119.145 31.1894C120.515 29.022 120.744 25.5542 119.787 21.4321C118.798 17.0728 116.757 13.2901 114.782 9.63419C112.218 4.87412 109.793 0.379865 109.875 -4.90774C109.906 -6.72193 110.058 -8.53205 110.329 -10.3262C110.437 -10.9802 110.583 -11.6274 110.766 -12.2646L110.811 -12.4363C111.322 -14.4074 111.96 -16.857 111.58 -18.6563C111.384 -19.6378 110.762 -20.7256 110.124 -21.7765L110.096 -21.8297C110.018 -21.9687 109.936 -22.1037 109.858 -22.2386C109.715 -22.484 109.572 -22.7294 109.449 -22.9706C108.223 -25.2852 106.996 -28.4014 105.928 -31.1494C105.569 -32.1064 105.168 -33.1369 104.73 -34.2124C104.137 -35.6969 103.483 -37.075 102.849 -38.4449L102.653 -38.8539C101.63 -41.0376 100.661 -43.0946 100.199 -45.082C99.2422 -49.2001 99.5121 -54.8271 101.876 -57.6161C105.241 -61.5869 111.633 -59.0228 115.179 -57.1172C116.156 -54.7903 118.258 -53.9765 120.29 -53.1954L120.397 -53.1545C121.484 -52.7865 122.516 -52.2748 123.468 -51.6333C124.695 -50.7295 125.541 -49.3841 126.371 -48.0837L126.404 -48.0305C126.939 -47.1571 127.529 -46.3185 128.171 -45.5196C132.403 -40.4692 137.883 -38.2773 142.831 -39.6595C146.225 -40.6001 148.908 -42.6897 150.008 -45.2415C150.875 -47.2617 150.716 -49.4822 149.55 -51.666C148.111 -54.139 146.414 -56.4529 144.487 -58.5689C143.13 -60.0615 141.375 -60.9121 139.825 -61.6646L139.613 -61.7709C138.649 -62.1889 137.741 -62.7246 136.91 -63.3658C134.35 -65.6231 133.974 -70.007 133.638 -73.896C133.543 -75.5451 133.329 -77.1852 132.996 -78.8033C132.726 -79.9892 132.424 -81.0525 132.15 -82.0135C131.144 -85.5549 130.416 -88.1108 132.068 -92.237L132.121 -92.3965L132.047 -92.56C131.947 -92.7269 131.856 -92.8989 131.773 -93.0753L131.749 -93.1285L131.671 -93.2184C131.021 -93.7419 130.207 -93.6887 129.422 -93.5947H129.32L129.254 -93.5374C128.952 -93.3207 128.653 -93.0957 128.363 -92.8749L127.884 -92.5191C125.337 -90.5971 123.325 -89.0799 120.932 -90.7443C119.706 -91.5868 118.557 -94.1385 117.334 -96.8457C115.314 -101.344 113.028 -106.407 109.314 -106.407H109.192L109.085 -106.382C104.178 -104.612 100.027 -104.873 96.7804 -107.151C92.691 -110.014 92.7278 -113.592 94.2532 -119.162L94.3145 -119.317L94.2286 -119.464C93.1286 -121.509 91.182 -122.736 89.121 -124.04L89.0555 -124.081C87.9495 -124.746 86.8843 -125.477 85.8658 -126.269C81.8909 -129.508 77.9814 -132.219 74.0065 -134.943C69.5082 -138.026 65.4474 -138.541 61.5216 -139.032L61.0186 -139.102C59.7468 -139.273 58.4341 -139.449 57.1255 -139.723C55.8906 -139.965 54.6816 -140.324 53.5145 -140.795L53.3959 -140.512C54.5852 -140.032 55.8176 -139.666 57.0764 -139.421C58.3973 -139.151 59.7182 -138.971 60.994 -138.799L61.5011 -138.729C65.3861 -138.235 69.41 -137.728 73.8511 -134.685C77.8301 -131.966 81.7355 -129.258 85.7104 -126.028C86.7372 -125.227 87.812 -124.489 88.9288 -123.819L88.9942 -123.779C91.0185 -122.499 92.9323 -121.288 93.9996 -119.309V-119.284V-119.256C92.4334 -113.53 92.3884 -109.85 96.6414 -106.893C99.9742 -104.554 104.207 -104.284 109.216 -106.076H109.257H109.351C112.864 -106.076 115.109 -101.095 117.092 -96.6944C118.319 -93.9504 119.501 -91.3577 120.773 -90.4663C123.341 -88.6751 125.435 -90.2536 128.105 -92.2656L128.559 -92.605C128.85 -92.8258 129.144 -93.0467 129.455 -93.2716H129.475C130.219 -93.3656 130.935 -93.4106 131.479 -92.969L131.508 -92.9322C131.59 -92.7502 131.684 -92.574 131.79 -92.4046V-92.3637V-92.3269C130.097 -88.1026 130.837 -85.5017 131.872 -81.8785C132.137 -80.9461 132.436 -79.887 132.689 -78.7051C133.018 -77.0975 133.231 -75.4685 133.327 -73.8306C133.663 -69.9047 134.043 -65.4514 136.697 -63.1163C137.548 -62.4574 138.478 -61.9079 139.466 -61.4806L139.682 -61.3783C141.204 -60.6381 142.929 -59.7957 144.246 -58.3481C146.159 -56.2526 147.842 -53.9591 149.268 -51.5065C150.388 -49.4086 150.54 -47.2821 149.714 -45.3519C148.65 -42.8983 146.033 -40.8536 142.737 -39.9417C137.908 -38.5922 132.546 -40.7595 128.392 -45.7036C127.758 -46.4929 127.176 -47.322 126.649 -48.1859L126.617 -48.235C125.77 -49.5599 124.895 -50.9299 123.64 -51.8664C122.666 -52.5256 121.608 -53.051 120.495 -53.4285L120.389 -53.4694C118.401 -54.2341 116.344 -55.0275 115.428 -57.2726V-57.3216L115.379 -57.3462C111.764 -59.3009 105.156 -61.9549 101.651 -57.8001C99.2218 -54.9375 98.9355 -49.1919 99.9088 -45.0003C100.387 -42.9842 101.361 -40.9109 102.391 -38.7108L102.587 -38.3018C103.217 -36.9564 103.871 -35.566 104.464 -34.0856C104.898 -33.0101 105.282 -31.9837 105.659 -31.0268C106.734 -28.270Line truncated
<path d="M314.914 22.9408C313.159 23.0635 311.299 23.0758 309.475 23.0921C307.066 23.1167 304.567 23.1453 302.142 23.3906C295.563 24.049 293.317 23.542 290.054 18.7246C287.478 14.8929 285.875 11.5273 285.286 8.71787C285.09 7.83456 284.963 7.02894 284.844 6.26422L284.795 5.95343C284.313 2.66146 283.977 0.285511 280.203 -2.55663C276.931 -5.0348 269.444 -9.53724 266.201 -9.68445C263.256 -9.81531 261.097 -8.55169 258.979 -7.3126C257.646 -6.45084 256.209 -5.76366 254.701 -5.2679C249.479 -3.77936 245.889 -5.18203 242.089 -6.66648H242.036C240.435 -7.31892 238.796 -7.87605 237.129 -8.33496C234.79 -8.92792 232.463 -9.30824 229.883 -9.70491C226.202 -10.2815 222.428 -10.8745 218.052 -12.318C216.339 -16.432 213.476 -23.2245 207.649 -21.6991L207.44 -21.6419L207.383 -21.4415C206.994 -19.9655 206.72 -18.4615 206.565 -16.9431C206.27 -14.7349 205.988 -12.6534 204.954 -11.3161C203.919 -9.9789 200.57 -7.28807 198.652 -5.92221C195.724 -3.80963 192.305 -2.48075 188.719 -2.06181C188.023 -1.99229 187.332 -1.94322 186.674 -1.89414H186.47C182.221 -1.57108 178.205 -1.26438 174.676 2.5265C172.66 4.66935 171.69 6.86945 171.813 9.06955C171.936 11.2696 173.04 13.2775 175.17 15.175C176.168 16.0366 177.221 16.8317 178.323 17.5551L178.507 17.6818C180.143 18.8228 181.718 19.9024 183.116 21.7099L183.349 22.0166C184.359 23.3007 185.889 25.235 186.519 27.1692C187.312 29.5615 186.846 32.4855 186.351 35.5648V35.6098C186.025 37.4439 185.807 39.2955 185.697 41.155C185.59 44.083 186.081 46.7125 186.514 49.0353L186.637 49.7223C186.756 50.3684 186.874 51.0391 186.977 51.7016C187.095 52.5195 187.181 53.3987 187.267 54.3188V54.466C187.594 57.9543 187.962 61.9087 190.665 64.3583C191.892 65.4788 193.528 65.7896 195.164 66.0963C197.159 66.4807 199.044 66.8406 200.185 68.6522C200.31 69.3942 200.148 70.1559 199.731 70.7827L199.993 70.9422C200.455 70.2408 200.629 69.3886 200.48 68.5622V68.5131C199.253 66.5707 197.306 66.1944 195.221 65.7937C193.667 65.4992 192.064 65.1925 190.898 64.1293C188.281 61.7615 187.917 57.8684 187.594 54.4333V54.2902C187.504 53.366 187.422 52.4908 187.3 51.6566C187.197 50.9859 187.079 50.3153 186.96 49.6692L186.838 48.978C186.408 46.6716 185.926 44.0708 186.02 41.1673C186.131 39.3202 186.348 37.4811 186.67 35.6588V35.6139C187.169 32.4896 187.639 29.537 186.825 27.0711C186.175 25.0877 184.625 23.1248 183.603 21.8285L183.374 21.5218C181.943 19.6775 180.364 18.5856 178.696 17.4324L178.512 17.3056C177.421 16.587 176.377 15.7988 175.387 14.946C173.322 13.1058 172.226 11.1265 172.116 9.05319C172.005 6.97986 172.934 4.82884 174.913 2.74733C178.36 -0.953578 182.319 -1.2562 186.527 -1.57926H186.711C187.377 -1.62834 188.073 -1.6774 188.755 -1.74692C192.389 -2.19992 195.846 -3.5707 198.803 -5.73001C200.733 -7.10405 204.095 -9.79487 205.17 -11.1853C206.246 -12.5757 206.54 -14.7103 206.839 -16.9636C206.998 -18.464 207.271 -19.9501 207.657 -21.4088V-21.4456H207.698C213.296 -22.9096 216.093 -16.1907 217.766 -12.1749L217.79 -12.1095L217.86 -12.089C222.285 -10.6209 226.108 -10.0239 229.805 -9.44318C232.377 -9.03424 234.712 -8.67028 237.019 -8.07732C238.674 -7.62293 240.3 -7.06988 241.889 -6.42112L241.942 -6.56425V-6.40066C245.79 -4.89576 249.43 -3.47674 254.746 -4.99391C256.289 -5.49569 257.761 -6.1939 259.126 -7.07133C261.171 -8.26544 263.301 -9.50452 266.152 -9.38184C269.329 -9.23871 276.731 -4.77718 279.982 -2.31945C283.642 0.449082 283.981 2.77595 284.456 6.01067L284.505 6.30511C284.623 7.09027 284.75 7.90408 284.946 8.79557C285.544 11.6581 287.167 15.0442 289.764 18.9087C293.117 23.8609 295.411 24.3803 302.134 23.7096C304.559 23.4643 307.041 23.4356 309.467 23.4111C311.27 23.4111 313.147 23.3825 314.901 23.2598C316.223 23.1532 317.552 23.1642 318.872 23.2925V23.4479C317.556 23.3202 316.232 23.3052 314.914 23.4029C313.278 23.5174 311.573 23.5379 309.769 23.5624H309.36C306.988 23.591 304.535 23.6156 302.155 23.8527C295.456 24.5193 293.003 23.9632 289.637 18.9904C287.032 15.1382 285.404 11.7195 284.791 8.83237C284.574 7.78548 284.435 6.84901 284.309 6.00659C283.838 2.82912 283.491 0.534967 279.876 -2.20902C276.739 -4.58088 269.243 -9.09149 266.143 -9.23871C263.334 -9.36548 261.314 -8.18365 259.191 -6.9282L259.13 -6.8914C257.78 -6.02916 256.327 -5.34208 254.803 -4.84669C249.418 -3.32544 245.758 -4.75264 241.873 -6.26981L241.783 -6.30661C240.22 -6.95217 238.618 -7.49851 236.986 -7.94238C234.581 -8.55988 232.152 -8.94019 229.801 -9.30414C226.055 -9.89302 222.182 -10.5023 217.725 -11.9868H217.684L217.647 -12.0849C215.913 -16.2848 213.288 -22.6356 207.861 -21.327H207.775L207.751 -21.2411C207.401 -19.8251 207.153 -18.3861 207.006 -16.935C206.7 -14.6613 206.414 -12.5143 205.301 -11.0749C204.189 -9.63539 200.926 -7.03861 198.914 -5.59505C195.914 -3.43561 192.414 -2.07733 188.743 -1.64878C188.06 -1.57926 187.377 -1.53019 186.699 -1.4852H186.47C182.131 -1.14987 178.385 -0.859528 174.962 2.79231C173.044 4.86155 172.099 6.94716 172.214 9.00004C172.328 11.0529 173.396 12.9831 175.416 14.7784C176.426 15.6544 177.494 16.4606 178.614 17.1911C180.331 18.373 181.9Line truncated
<path d="M317.649 25.3909C315.783 25.4292 313.922 25.5986 312.08 25.898L311.671 25.9511C310.914 26.0534 310.129 26.1597 309.417 26.2292L309.066 26.266C308.837 26.2906 308.612 26.3151 308.383 26.3315H308.289C307.426 26.3951 306.569 26.5125 305.721 26.6831C304.062 27.13 302.467 27.7854 300.973 28.6338C298.973 29.6684 297.243 30.5599 295.391 30.2205C293.894 29.9465 292.316 28.7728 291.162 27.9141L290.897 27.726C287.318 25.1169 285.638 21.2688 283.855 17.1917V17.1589C283.067 15.2923 282.184 13.4674 281.209 11.6914C280.551 10.4211 279.963 9.11601 279.446 7.78193L279.422 7.7165C278.706 5.96214 278.027 4.30593 277.087 2.98915C273.815 -1.53782 267.064 -4.58853 262.005 -3.81563C260.772 -3.60698 259.562 -3.27685 258.394 -2.83008L258.279 -2.78918C257.415 -2.4483 256.523 -2.18152 255.613 -1.99174C248.952 -0.813996 243.799 -2.44158 238.814 -4.01191L238.757 -4.03237C234.667 -5.30417 230.835 -6.50645 226.488 -6.09751H226.382L226.309 -6.03617C222.395 -3.37397 219.25 -2.42932 214.682 -2.56018C213.615 -2.58471 212.499 -2.7074 211.599 -2.80554H211.542C209.71 -2.99775 207.816 -3.21448 205.956 -2.89142C202.966 -2.40887 199.932 -1.33744 196.996 -0.302819L196.926 -0.278283C193.516 0.928091 189.974 2.17536 186.384 2.5843C184.159 2.82557 181.64 3.09957 180.155 4.31003C178.929 5.33647 178.258 6.49377 178.184 7.76149V7.9864C178.184 10.7059 180.843 13.4376 182.981 15.6336L183.026 15.6827C183.689 16.3533 184.22 16.9095 184.662 17.4125C185.046 17.8214 185.398 18.2304 185.701 18.5984C189.054 22.3893 191.7 25.3868 191.017 30.6744C190.877 31.5677 190.688 32.4524 190.449 33.3244L190.395 33.5411C190.074 34.6933 189.822 35.8636 189.639 37.0457C188.936 42.5491 189.131 48.13 190.215 53.571C190.604 55.4071 191.193 58.1879 192.894 59.7501C194.595 61.3122 197.462 61.4717 200.03 61.6516C201.256 61.7112 202.477 61.8478 203.686 62.0606C208.184 62.9562 215.799 66.608 217.692 70.8651L217.974 70.7383C216.036 66.3872 208.331 62.6658 203.743 61.7416C202.526 61.5276 201.297 61.391 200.063 61.3327C197.548 61.1568 194.697 60.9605 193.111 59.5129C191.524 58.0652 190.907 55.2926 190.522 53.4892C189.446 48.0746 189.256 42.521 189.962 37.0457C190.142 35.8745 190.392 34.7151 190.71 33.5738L190.763 33.353C191.005 32.469 191.196 31.572 191.336 30.6662C192.019 25.2437 189.332 22.2012 185.926 18.3449C185.631 17.9973 185.275 17.5842 184.891 17.163C184.445 16.6518 183.91 16.0998 183.255 15.4209L183.21 15.376C181.116 13.2208 178.503 10.5341 178.503 7.94141V7.72467C178.569 6.5551 179.194 5.47142 180.364 4.50223C181.775 3.34902 184.245 3.0832 186.429 2.84602C190.068 2.43707 193.614 1.21025 197.061 -0.016568L197.131 -0.0411034C200.055 -1.07163 203.077 -2.13896 206.037 -2.61742C207.857 -2.92004 209.718 -2.71966 211.542 -2.52746H211.599C212.503 -2.42522 213.644 -2.30254 214.707 -2.27801C219.344 -2.14715 222.542 -3.09589 226.525 -5.81534C230.823 -6.22428 234.643 -5.02609 238.687 -3.77064H238.744C243.762 -2.18804 248.968 -0.548188 255.687 -1.72594C256.614 -1.92072 257.522 -2.19434 258.402 -2.54382L258.513 -2.58471C259.664 -3.02351 260.856 -3.34813 262.07 -3.5539C267.027 -4.31453 273.66 -1.32109 276.862 3.12409C277.778 4.40816 278.448 6.05211 279.156 7.78602L279.197 7.88416C279.714 9.21788 280.302 10.5229 280.959 11.7936C281.918 13.5723 282.786 15.3985 283.56 17.2653V17.3061C285.36 21.416 287.061 25.3009 290.708 27.9631L290.97 28.1472C292.144 29.0223 293.755 30.2246 295.325 30.5108C297.28 30.8666 299.051 29.9547 301.128 28.8751C302.592 28.0472 304.154 27.4056 305.778 26.9653C306.612 26.7972 307.456 26.6811 308.305 26.6177H308.395C308.624 26.6177 308.853 26.5768 309.086 26.5523L309.434 26.5155C310.154 26.4419 310.939 26.3396 311.699 26.2374L312.108 26.1802C313.92 25.9389 316.173 25.6322 317.641 25.6772C318.05 25.6772 318.439 25.7099 318.909 25.7508V25.9021C318.467 25.8571 318.05 25.8326 317.641 25.8244C315.797 25.8674 313.958 26.0368 312.137 26.3315C311.295 26.4419 310.313 26.5686 309.45 26.6627L308.416 26.7649L308.15 26.7936C307.363 26.8513 306.581 26.9565 305.807 27.1085C304.22 27.5498 302.692 28.18 301.255 28.9855L301.169 29.0305C299.182 30.061 297.305 31.0302 295.297 30.6662C293.698 30.3759 292.066 29.1695 290.872 28.2862L290.61 28.1022C286.93 25.395 285.212 21.4814 283.401 17.3389C282.558 15.3841 281.765 13.6257 280.816 11.8713C280.142 10.5893 279.544 9.26887 279.025 7.91687C278.305 6.15843 277.626 4.50223 276.715 3.23451C273.95 -0.621795 267.407 -4.20412 262.062 -3.39442C260.862 -3.19327 259.685 -2.8713 258.549 -2.43341L258.435 -2.3966C257.542 -2.04645 256.622 -1.77283 255.683 -1.57872C248.919 -0.384617 243.713 -2.02856 238.646 -3.62343C234.63 -4.87887 230.835 -6.07707 226.578 -5.66813H226.538L226.505 -5.64767C222.538 -2.94867 219.328 -1.98765 214.674 -2.11852C213.607 -2.15123 212.515 -2.26983 211.55 -2.37207C209.652 -2.57654 207.869 -2.78101 206.029 -2.4743C203.195 -2.02038 200.439 -1.05528 197.523 -0.0206614L197.151 0.110203C193.695 1.33702 190.125 2.60883 186.433 3.00959C184.274 3.24268 181.828 3.50441 180.446 4.64535C179.289 5.60227 178.7 6.62463 178.646 7.77375C178.4Line truncated
<path d="M168.73 63.0789C169.278 62.3264 169.76 61.5004 170.271 60.6252L170.406 60.3962C171.306 58.8341 172.234 57.2147 173.523 56.0042C174.233 55.3585 174.999 54.7769 175.813 54.2662L175.845 54.2417C176.925 53.5219 177.857 52.8963 178.454 51.8698C179.088 50.778 179.231 49.6002 179.37 48.4593V48.3448C179.424 47.9031 179.481 47.4451 179.567 47.028L179.771 46.0874C180.544 42.3701 181.341 38.5261 180.843 34.3386V34.2813C178.18 29.648 174.676 25.5954 171.261 21.6941L171.138 21.5551C170.836 21.2034 170.529 20.8558 170.226 20.5082C169.65 19.8416 169.073 19.1832 168.509 18.5167C165.565 15.057 163.671 12.4439 164.092 7.85149C164.448 3.97882 165.728 -1.32104 169.879 -4.58847C172.271 -6.47778 174.377 -7.45106 176.659 -8.46523C179.612 -9.68925 182.39 -11.2995 184.92 -13.2539C189.095 -16.5254 192.113 -20.2386 194.775 -23.5142L194.832 -23.5838C198.668 -28.3193 201.981 -32.4087 207.24 -33.1939C211.738 -33.8768 213.071 -32.2983 214.756 -30.3027C214.92 -30.0982 215.104 -29.8937 215.279 -29.6851L215.312 -29.6483C216.355 -28.4542 217.39 -27.1415 218.445 -25.792C222.125 -21.1342 226.276 -15.8548 231.588 -14.4644C232.692 -14.1781 234.254 -14.174 235.898 -14.1781H236.045C237.442 -14.2075 238.839 -14.1529 240.229 -14.0145C241.44 -13.8312 242.633 -13.5453 243.795 -13.1599L244.069 -13.0781C246.011 -12.4851 247.843 -11.929 249.774 -12.2929C254.591 -13.1803 259.694 -18.2512 260.688 -23.138C261.682 -28.0249 260.23 -32.1347 258.811 -36.0932C257.392 -40.0518 256.092 -43.7323 257.04 -48.202C257.597 -50.8274 258.967 -52.7003 260.291 -54.4792L260.353 -54.5569C262.238 -57.1251 263.866 -59.3415 262.864 -63.1937C261.281 -69.2583 255.065 -71.4134 249.058 -73.499C246.015 -74.5377 243.525 -75.4292 241.443 -76.6724L241.394 -76.7133C240.714 -78.088 240.367 -79.6041 240.384 -81.138C240.389 -81.9965 240.287 -82.8522 240.082 -83.6857C239.382 -86.2825 238.266 -87.906 236.671 -88.6503C233.71 -90.0284 229.666 -88.1268 226.1 -86.4502L226.018 -86.4134C224.256 -85.5955 222.591 -84.8062 221.234 -84.5241C218.874 -84.0292 214.789 -84.0497 211.93 -84.5772C210.23 -84.8549 208.609 -85.4962 207.179 -86.4575C205.75 -87.4187 204.544 -88.6772 203.645 -90.147C200.782 -94.6453 200.5 -100.591 201.461 -104.223C203.044 -110.283 205.408 -110.267 209.71 -110.234C212.141 -110.152 214.575 -110.308 216.977 -110.7C225.973 -112.226 228.243 -121.333 228.795 -125.169C230.345 -136.181 230.308 -145.207 228.68 -152.052C228.087 -153.373 228.014 -154.506 228.468 -155.447C229.318 -157.23 231.882 -157.9 234.168 -158.526L234.557 -158.628C234.782 -158.685 235.003 -158.739 235.215 -158.8H235.264L235.293 -158.841C236.36 -160.239 236 -162.006 235.293 -163.192C234.508 -164.558 232.917 -165.817 231.122 -165.556H231.065C229.515 -164.644 229.081 -162.779 228.66 -160.98V-160.939C228.566 -160.53 228.472 -160.121 228.374 -159.753V-159.712C225.92 -157.213 222.285 -157.729 219.377 -158.142L219.226 -158.166C218.58 -158.26 217.966 -158.35 217.41 -158.391C216.645 -158.452 215.868 -158.51 215.099 -158.563L214.691 -158.595C210 -158.955 205.15 -159.332 201.928 -160.231C198.341 -161.2 196.709 -163.63 195.11 -166.001C193.475 -168.455 191.896 -170.774 188.265 -171.166C185.733 -171.432 182.131 -171.121 179.616 -169.441L179.579 -169.416V-169.375C177.534 -164.754 179.125 -161.401 180.675 -158.121C181.718 -155.929 182.72 -153.856 182.405 -151.578C182.106 -149.37 179.493 -147.08 177.395 -145.239L177.309 -145.166C176.503 -144.497 175.741 -143.777 175.027 -143.011C174.2 -141.992 173.454 -140.911 172.795 -139.776L172.75 -139.706C171.883 -138.3 171.069 -136.971 169.785 -135.944C167.863 -134.411 165.225 -133.867 162.669 -133.343H162.62C160.089 -132.816 157.472 -132.268 155.484 -130.755L155.447 -130.726V-130.685C153.444 -125.271 151.198 -121.149 148.389 -117.714L148.336 -117.648L148.36 -117.571C148.919 -115.597 149.788 -113.724 150.933 -112.021C151.967 -110.385 152.716 -109.195 152.356 -106.484C152.016 -104.006 150.021 -101.352 147.89 -98.5098C145.003 -94.6208 142.014 -90.6009 143.339 -86.9327C144.565 -83.5263 150.36 -81.2076 153.726 -80.5614C154.135 -80.4878 154.674 -80.4347 155.361 -80.3733C157.459 -80.1689 160.326 -79.8908 161.496 -78.2714C162.023 -77.5598 162.162 -76.6356 161.905 -75.4987C160.997 -71.4093 154.666 -70.3747 151.378 -70.9513C150.304 -71.186 149.265 -71.5599 148.287 -72.0636L148.172 -72.1168C146.761 -72.7875 145.31 -73.4827 143.637 -73.1228C143.354 -73.0117 143.099 -72.8388 142.891 -72.6167C142.683 -72.3945 142.527 -72.1288 142.435 -71.8387C142.363 -71.2699 142.363 -70.6941 142.435 -70.1253V-70.0762L142.468 -70.0435C144.14 -68.056 145.841 -64.9522 147.641 -61.6643L147.833 -61.3085C148.986 -59.1943 150.287 -56.8102 151.591 -54.7368C153.444 -51.8088 154.396 -49.5637 154.679 -47.4495C155.394 -41.8757 144.893 -34.7069 139.744 -33.9954C133.001 -33.0712 129.406 -37.0543 125.926 -40.9065C123.28 -43.8181 120.544 -46.832 116.483 -47.6704C116.242 -47.7153 116.021 -47.7644 115.788 -47.8298H115.747C114.345 -48.1365 112.599 -48.5209 111.331 -48.067C108.423 -47.012 106.685 -42.5627 106.886 -39.0703C107.196 -33.9995Line truncated
<path d="M76.4115 -1.44435C74.33 -1.38301 72.179 -1.32167 70.3633 -0.438358C66.6828 1.37734 64.5236 5.16822 62.4176 8.83233L62.3808 8.89776C60.103 12.8686 57.9478 16.6226 54.1365 17.4651C52.937 17.7055 51.6943 17.6092 50.546 17.187L50.4479 17.4773C51.2369 17.7533 52.0657 17.8984 52.9015 17.9067C53.3443 17.9067 53.7858 17.8587 54.2183 17.7636C58.1605 16.8925 60.3524 13.0853 62.667 9.04088L62.6997 8.98363C64.7853 5.36042 66.9364 1.6227 70.5146 -0.160282C72.2689 -1.01906 74.3873 -1.0763 76.4483 -1.13764C79.4377 -1.22352 82.5333 -1.3135 84.3368 -3.91845C87.0399 -7.77884 83.4821 -11.5943 80.6031 -14.6858C79.18 -16.203 77.7078 -17.7733 77.5852 -18.8857C77.4175 -20.4315 78.5462 -22.4557 79.6299 -24.4227C80.9058 -26.7128 82.2226 -29.0805 82.2716 -31.5137C82.3166 -33.3213 81.8627 -35.366 81.3924 -37.3411L81.3515 -37.5293C80.8035 -39.8888 80.2883 -42.1135 80.6113 -43.8147C80.8322 -44.9229 81.6705 -46.8122 82.656 -49C83.803 -51.4475 84.7986 -53.9632 85.6372 -56.5327C85.8662 -57.2893 86.0461 -58.0417 86.2097 -58.7042L86.3242 -59.1745C86.5205 -59.9924 86.6882 -60.7203 86.8722 -61.2642C87.0562 -61.8081 87.3875 -62.491 87.6901 -63.1698C88.9169 -65.8361 90.5527 -69.4839 89.2195 -70.9929C88.557 -71.7576 87.3179 -71.8598 85.4286 -71.2996L85.3428 -71.2668L85.2978 -71.2423C81.7155 -68.3184 79.225 -67.9054 75.749 -67.3328C73.9466 -67.0658 72.1597 -66.7027 70.396 -66.2451C68.939 -65.8406 67.509 -65.3448 66.1144 -64.7606C63.1864 -63.5992 60.655 -62.5973 57.0972 -63.2884C55.0525 -63.6974 52.7379 -64.6993 50.5542 -65.7421L50.4233 -65.464C52.6112 -64.4171 54.9217 -63.3948 57.0277 -63.0103C60.6714 -62.3029 63.2395 -63.317 66.2166 -64.4989C67.6007 -65.077 69.0198 -65.5674 70.4655 -65.967C72.2247 -66.4264 74.0076 -66.7895 75.8063 -67.0548C79.2986 -67.6314 81.8218 -68.0485 85.4573 -71.0092L85.5104 -71.0297C87.2607 -71.549 88.3976 -71.4795 88.9742 -70.8129C90.1683 -69.4512 88.4998 -65.7625 87.3956 -63.3171C87.0808 -62.6219 86.7577 -61.9021 86.5778 -61.3909C86.3978 -60.8798 86.2138 -60.1028 86.0175 -59.2644L85.903 -58.7983C85.7353 -58.1071 85.5636 -57.3915 85.3346 -56.639C84.5012 -54.0832 83.511 -51.5812 82.3698 -49.1473C81.3924 -46.9431 80.5541 -45.0374 80.3251 -43.8924C79.9856 -42.1298 80.5091 -39.8725 81.0652 -37.4843L81.1061 -37.2962C81.556 -35.3373 82.0181 -33.3131 81.9772 -31.5424C81.9281 -29.1828 80.6318 -26.8518 79.3681 -24.5904C78.2476 -22.5907 77.0944 -20.5255 77.2703 -18.8652C77.4052 -17.6384 78.8488 -16.113 80.3946 -14.465C83.1754 -11.4797 86.635 -7.76657 84.075 -4.10655C82.3534 -1.61611 79.3354 -1.53023 76.4115 -1.44435Z" stroke="#364152" stroke-width="0.147239" stroke-miterlimit="10"/>
<path d="M56.2708 22.0171C57.7285 22.0179 59.1712 21.723 60.5115 21.1501H60.5483L60.5811 21.097C62.1023 19.1177 62.8793 17.0076 63.6358 14.9301L63.689 14.787C64.8054 11.7568 65.9545 8.62019 69.4346 5.86802C71.7124 4.0605 75.1189 3.34895 78.4313 2.65784H78.509C83.0564 1.72136 87.7592 0.748084 89.6036 -3.06733C90.9531 -5.84404 89.6036 -8.41218 88.0864 -11.3893V-11.4342C87.1254 -13.2786 86.1357 -15.1802 85.6818 -17.323C85.2279 -19.4658 85.7636 -21.7968 86.3361 -24.275C87.015 -27.3011 87.7797 -30.7281 87.0395 -34.6253C86.8392 -35.5805 86.5728 -36.5206 86.2421 -37.4388V-37.4838C85.3833 -40.0969 84.4059 -43.0617 85.5264 -47.421C86.0867 -49.6497 87.3094 -52.1729 88.6017 -54.8433L88.7325 -55.1132C89.4073 -56.5118 90.1025 -57.9553 90.7077 -59.3825C91.0389 -60.1759 91.3702 -60.9815 91.7137 -61.8362C93.01 -65.0709 94.474 -68.7391 96.621 -70.8329C97.7897 -71.9942 99.1495 -72.9459 100.641 -73.6464C101.929 -74.2925 102.947 -74.8037 103.912 -76.7011C105.548 -79.8336 105.004 -85.1376 103.479 -87.444C101.88 -89.8649 99.2995 -92.3513 95.5864 -95.0053C92.4866 -97.2259 88.9779 -98.2768 85.2565 -99.3646C80.8563 -100.681 76.3702 -101.994 72.6121 -105.388L72.5835 -105.425C72.015 -108.001 72.4362 -110.77 72.8084 -113.215C73.2623 -116.291 73.6958 -119.194 72.653 -121.938C71.467 -125.067 67.987 -129.14 63.8771 -130.526C61.6688 -131.287 59.5505 -130.91 57.3054 -130.526C55.6451 -130.227 53.764 -129.892 51.8338 -130.166C51.3963 -130.227 50.9587 -130.305 50.5293 -130.391L50.468 -130.088C50.9055 -130.002 51.3472 -129.925 51.7888 -129.863C53.7722 -129.581 55.6779 -129.921 57.3586 -130.223C59.5628 -130.612 61.6443 -130.98 63.779 -130.244C67.7989 -128.878 71.2053 -124.891 72.3667 -121.832C73.3809 -119.161 72.9556 -116.295 72.5017 -113.244C72.1295 -110.79 71.7042 -107.973 72.2849 -105.339L72.3136 -105.225L72.4076 -105.143C76.2148 -101.72 80.7377 -100.383 85.1216 -99.0825C88.802 -97.9947 92.2903 -96.9641 95.3451 -94.7722C99.0255 -92.1264 101.586 -89.6768 103.16 -87.2927C104.644 -85.0517 105.16 -79.8991 103.569 -76.8606C102.641 -75.049 101.708 -74.5828 100.42 -73.9326C98.9023 -73.2209 97.5188 -72.2525 96.3306 -71.07C94.1469 -68.9476 92.6502 -65.2467 91.3661 -61.9834C91.0185 -61.1164 90.6913 -60.3067 90.3601 -59.5297C89.759 -58.1107 89.0638 -56.6672 88.389 -55.2768L88.2581 -55.0069C86.9577 -52.3201 85.7309 -49.7806 85.1625 -47.5273C84.0215 -43.0781 85.0112 -40.0724 85.8863 -37.4183V-37.3693C86.2127 -36.4643 86.4764 -35.5379 86.6755 -34.5966C87.4035 -30.7649 86.6428 -27.3666 85.9681 -24.3527C85.3915 -21.8418 84.8476 -19.4699 85.3179 -17.2698C85.7881 -15.0697 86.7778 -13.16 87.747 -11.2993L87.8819 -11.3729L87.7715 -11.2543C89.2682 -8.35493 90.5646 -5.84812 89.2846 -3.20637C87.5057 0.474096 82.8765 1.42693 78.4027 2.35113H78.3209C74.988 3.04633 71.5447 3.76606 69.2097 5.62265C65.6642 8.43208 64.4987 11.6054 63.3659 14.6766L63.3169 14.8197C62.5726 16.844 61.8038 18.9378 60.3275 20.872C56.647 22.4097 53.3183 21.5223 50.5129 20.4631L50.4025 20.7494C52.2629 21.5327 54.253 21.9626 56.2708 22.0171V22.0171Z" stroke="#364152" stroke-width="0.147239" stroke-miterlimit="10"/>
<path d="M63.305 -59.5629L63.5095 -59.6488C64.0902 -59.8982 64.6545 -60.1395 65.1943 -60.3562L66.552 -60.9287C70.895 -62.7812 76.2971 -65.0836 79.3437 -61.0923C81.9363 -57.6695 79.8794 -53.6455 78.0637 -50.1L78.031 -50.0346C77.2376 -48.4642 76.4893 -46.9798 76.2234 -45.6875C75.745 -43.3975 76.3502 -40.5308 76.9309 -37.7623C77.5443 -34.8711 78.2395 -31.5954 77.4339 -29.2359C76.751 -27.3016 75.107 -25.8212 73.5163 -24.394C71.8151 -22.8646 70.0566 -21.2861 69.8358 -19.27C69.5659 -16.7918 71.1853 -14.9679 72.7638 -13.189L72.8088 -13.1359C73.9416 -11.86 75.1111 -10.5432 75.5119 -9.00967V-8.9606L75.4874 -8.93197C74.4691 -7.65608 73.0337 -7.15308 71.5206 -6.61737C69.8849 -6.02849 68.1591 -5.42326 66.5602 -3.77932C65.4438 -2.63838 64.6709 -1.05579 63.9225 0.47774L63.898 0.52273C63.41 1.60408 62.8484 2.65069 62.2172 3.65521C60.4629 6.22336 57.5267 10.5213 53.8503 11.7604C52.7824 12.1071 51.6491 12.2037 50.5379 12.0426L50.497 12.3452C50.8671 12.3949 51.24 12.4209 51.6134 12.4229C52.4067 12.4251 53.1952 12.2994 53.9485 12.0508C57.723 10.779 60.6919 6.42783 62.4708 3.83106C63.1173 2.81079 63.6939 1.74783 64.1965 0.6495V0.604523C64.9326 -0.904468 65.6973 -2.46662 66.781 -3.57485C68.3309 -5.16972 70.0035 -5.76269 71.6433 -6.34338C73.1891 -6.88727 74.6531 -7.40254 75.7327 -8.74796L75.8472 -8.89107L75.8022 -9.08737C75.3933 -10.7027 74.1665 -12.0481 73.0337 -13.3485L72.9724 -13.414C71.4511 -15.1315 69.8767 -16.9022 70.1343 -19.2454C70.3347 -21.1429 71.9705 -22.6151 73.7044 -24.1732C75.3401 -25.629 77.0004 -27.1339 77.7079 -29.1459C78.5258 -31.5995 77.8347 -34.9038 77.2172 -37.8318C76.6406 -40.5717 76.0435 -43.4057 76.5056 -45.6303C76.7633 -46.8857 77.5034 -48.3497 78.2886 -49.9037L78.3213 -49.9691C80.1779 -53.5964 82.2799 -57.7063 79.5727 -61.2845C76.3788 -65.468 70.8541 -63.1125 66.4171 -61.2191L65.0798 -60.6425C64.5441 -60.4258 63.9757 -60.1845 63.3909 -59.9309L63.1864 -59.8451C59.1502 -58.1234 54.1243 -55.9806 51.3476 -57.0111C51.0794 -57.1126 50.823 -57.2429 50.5829 -57.3996L50.4193 -57.142C50.6754 -56.9748 50.9498 -56.8376 51.2372 -56.733C54.1284 -55.6493 59.2156 -57.829 63.305 -59.5629Z" stroke="#364152" stroke-width="0.147239" stroke-miterlimit="10"/>
<path d="M65.3658 -7.74183C64.0122 -7.70503 62.6095 -7.66823 61.4113 -7.07118C59.0109 -5.89343 57.6123 -3.43978 56.2464 -1.07201C54.856 1.38163 53.5392 3.67578 51.2737 4.16651C50.5551 4.30215 49.8129 4.23416 49.1309 3.97022L49.0286 4.26056C49.5293 4.44456 50.0574 4.54273 50.5908 4.55092C50.8495 4.55133 51.1074 4.52251 51.3596 4.46503C53.7601 3.94568 55.1055 1.582 56.545 -0.937069C57.874 -3.25576 59.2521 -5.65215 61.5708 -6.79718C62.7077 -7.36152 64.0735 -7.39832 65.3944 -7.43513C67.3042 -7.49238 69.1076 -7.54554 70.1872 -9.07089C71.7821 -11.361 69.7047 -13.5897 67.8562 -15.569C66.8911 -16.5995 65.9792 -17.5687 65.8933 -18.3375C65.7788 -19.3844 66.4781 -20.6316 67.2142 -21.9566L67.2387 -22.0016C68.0198 -23.4084 68.8254 -24.8642 68.8745 -26.3241C68.8398 -27.5459 68.6543 -28.7587 68.3224 -29.935L68.2897 -30.0945C67.9503 -31.5872 67.6272 -33.0021 67.8399 -34.1062C68.1492 -35.1709 68.5473 -36.2078 69.0299 -37.206L69.124 -37.4186C69.8434 -38.9503 70.4676 -40.525 70.9928 -42.1337C71.1523 -42.6572 71.275 -43.1683 71.4018 -43.6182L71.4427 -43.7818C71.5378 -44.2379 71.6579 -44.6884 71.8025 -45.1313C71.8966 -45.3971 72.052 -45.7488 72.236 -46.1536L72.3341 -46.3785C73.058 -47.9857 74.0476 -50.1899 73.3238 -51.02C72.9762 -51.4289 72.2851 -51.4698 71.2055 -51.159L71.1523 -51.1304C68.85 -49.2656 67.2592 -49.0039 65.055 -48.64C63.9266 -48.4793 62.8084 -48.254 61.7058 -47.9652C60.796 -47.7095 59.9029 -47.3981 59.0313 -47.0328C57.2361 -46.3213 55.543 -45.6506 53.2284 -46.0964C51.8075 -46.4347 50.4319 -46.9413 49.1309 -47.6054L49 -47.3273C50.3057 -46.66 51.685 -46.1481 53.1099 -45.8019C55.5144 -45.3398 57.2483 -46.0268 59.0886 -46.7588C59.9496 -47.118 60.8318 -47.4239 61.7303 -47.6749C62.8222 -47.9611 63.9295 -48.185 65.0468 -48.3455C67.2878 -48.7136 68.9113 -48.9835 71.2627 -50.881C72.1706 -51.1386 72.784 -51.1222 73.0334 -50.8278C73.6305 -50.1449 72.6245 -47.8712 71.9825 -46.4767L71.8966 -46.2886C71.7126 -45.8796 71.5572 -45.5198 71.4549 -45.2417C71.3048 -44.7887 71.1819 -44.3271 71.0869 -43.8595L71.046 -43.7C70.9397 -43.2542 70.8211 -42.7471 70.6616 -42.2319C70.1408 -40.6339 69.5207 -39.0701 68.805 -37.5495L68.7109 -37.3369C68.214 -36.3181 67.8036 -35.2592 67.4841 -34.1717C67.2633 -33.0021 67.5904 -31.5585 67.938 -30.0332L67.9707 -29.8737C68.2982 -28.7227 68.4849 -27.5363 68.5269 -26.3404C68.5024 -24.9541 67.709 -23.531 66.9484 -22.157L66.9239 -22.112C66.1632 -20.7461 65.4435 -19.4539 65.5703 -18.3129C65.6684 -17.4419 66.5681 -16.4809 67.615 -15.3522C69.3693 -13.4711 71.3568 -11.3446 69.905 -9.25492C68.9236 -7.84407 67.1978 -7.79499 65.3658 -7.74183Z" stroke="#364152" stroke-width="0.147239" stroke-miterlimit="10"/>
<path d="M2 0.5H48.793V42.5H2C1.17157 42.5 0.5 41.8284 0.5 41V2C0.500001 1.17157 1.17157 0.5 2 0.5Z" stroke="#334670"/>
<path d="M30.5458 20.9262L28.1825 21.5047L26.8355 19.1625L26.0024 17.7198L25.0636 16.1084L22.8811 12.3351H19.3538L10.5251 27.599L12.2923 30.6438H13.6323V32.986H11.6094C11.4044 32.9854 11.2032 32.9312 11.0257 32.8289C10.8483 32.7266 10.7008 32.5797 10.5979 32.4028L8.15721 28.1869C8.05422 28.0089 8 27.8069 8 27.6013C8 27.3958 8.05422 27.1938 8.15721 27.0158L17.6641 10.5832C17.767 10.4063 17.9145 10.2594 18.092 10.1571C18.2695 10.0547 18.4707 10.0006 18.6756 10H23.557C23.7619 10.0006 23.9631 10.0547 24.1406 10.1571C24.3181 10.2594 24.4656 10.4063 24.5685 10.5832L27.7648 16.1037L28.1825 16.8438L29.1213 18.4529L29.539 19.1742L30.5458 20.9262Z" fill="url(#paint0_linear_3331_3738)"/>
<path d="M20.7057 26.8917L17.5117 32.4122C17.4091 32.5895 17.2617 32.7369 17.0842 32.8396C16.9068 32.9424 16.7054 32.9969 16.5002 32.9977H13.6324L10.5182 27.6107L12.2853 30.6555H15.8056L19.3398 24.5472L20.7057 26.8917Z" fill="url(#paint1_linear_3331_3738)"/>
<path d="M30.5458 22.0903L28.1051 26.3061C28.0026 26.4835 27.8552 26.6309 27.6777 26.7336C27.5002 26.8364 27.2988 26.8909 27.0937 26.8917H24.2399L23.3012 25.2803L22.8835 24.5589H26.4037L28.1685 21.5141L27.8329 20.9332H30.5294C30.6323 21.1082 30.6879 21.3068 30.6908 21.5096C30.6937 21.7124 30.6437 21.9125 30.5458 22.0903Z" fill="url(#paint2_linear_3331_3738)"/>
<path d="M37.0182 12.3468H33.4839L29.9637 18.4528L28.6166 16.1106L31.813 10.5902C31.9159 10.4133 32.0634 10.2663 32.2408 10.164C32.4183 10.0617 32.6195 10.0075 32.8245 10.007H35.6688L37.0182 12.3468Z" fill="url(#paint3_linear_3331_3738)"/>
<path d="M41.144 15.9842L31.6394 32.4145C31.5368 32.5918 31.3895 32.7392 31.212 32.8419C31.0345 32.9447 30.8331 32.9992 30.6279 33H25.7466C25.5414 32.9992 25.34 32.9447 25.1626 32.8419C24.9851 32.7392 24.8377 32.5918 24.7351 32.4145L21.9565 27.613L21.1234 26.1703L20.1846 24.5589L19.7669 23.8375L18.7554 22.0879L21.1163 21.5023L22.4657 23.8445L22.8835 24.5659L23.3012 25.2873L24.2399 26.8987L24.6553 27.6177L26.0047 29.9599L26.4225 30.6813H29.9427L38.7737 15.4151L37.0089 12.3702H35.7018L35.6595 10.0281H37.6825C37.8874 10.0287 38.0886 10.0828 38.2661 10.1851C38.4435 10.2875 38.5911 10.4344 38.6939 10.6113L41.1346 14.8272C41.2365 15.0027 41.2909 15.2016 41.2925 15.4044C41.2941 15.6073 41.243 15.807 41.144 15.9842Z" fill="url(#paint4_linear_3331_3738)"/>
<path d="M22.8881 18.4529L21.1233 21.4977L21.4613 22.0833H18.7624C18.6594 21.9053 18.6052 21.7033 18.6052 21.4977C18.6052 21.2922 18.6594 21.0902 18.7624 20.9122L21.2031 16.6963C21.3059 16.5186 21.4537 16.371 21.6316 16.2683C21.8095 16.1655 22.0114 16.1112 22.2169 16.1108H25.073L26.0117 17.7222L26.4295 18.4436L22.8881 18.4529Z" fill="url(#paint5_linear_3331_3738)"/>
<mask id="path-32-inside-1_3331_3738" fill="white">
<path d="M49.2926 0H226.293C227.397 0 228.293 0.895431 228.293 2V41C228.293 42.1046 227.397 43 226.293 43H49.2926V0Z"/>
</mask>
<path d="M49.2926 -1H226.293C227.949 -1 229.293 0.343146 229.293 2H227.293C227.293 1.44772 226.845 1 226.293 1H49.2926V-1ZM229.293 41C229.293 42.6569 227.949 44 226.293 44H49.2926V42H226.293C226.845 42 227.293 41.5523 227.293 41H229.293ZM49.2926 43V0V43ZM226.293 -1C227.949 -1 229.293 0.343146 229.293 2V41C229.293 42.6569 227.949 44 226.293 44V42C226.845 42 227.293 41.5523 227.293 41V2C227.293 1.44772 226.845 1 226.293 1V-1Z" fill="#334670" mask="url(#path-32-inside-1_3331_3738)"/>
<path d="M64.3381 27H60.571V15.3636H64.4574C65.5975 15.3636 66.5767 15.5966 67.3949 16.0625C68.2131 16.5246 68.84 17.1894 69.2756 18.0568C69.715 18.9205 69.9346 19.9564 69.9346 21.1648C69.9346 22.3769 69.7131 23.4186 69.2699 24.2898C68.8305 25.161 68.1941 25.8314 67.3608 26.3011C66.5275 26.767 65.5199 27 64.3381 27ZM62.3267 25.4659H64.2415C65.1278 25.4659 65.8646 25.2992 66.4517 24.9659C67.0388 24.6288 67.4782 24.142 67.7699 23.5057C68.0615 22.8655 68.2074 22.0852 68.2074 21.1648C68.2074 20.2519 68.0615 19.4773 67.7699 18.8409C67.482 18.2045 67.0521 17.7216 66.4801 17.392C65.9081 17.0625 65.1979 16.8977 64.3494 16.8977H62.3267V25.4659ZM75.7429 27.1761C74.883 27.1761 74.1425 26.9924 73.5213 26.625C72.9039 26.2538 72.4266 25.733 72.0895 25.0625C71.7561 24.3883 71.5895 23.5985 71.5895 22.6932C71.5895 21.7992 71.7561 21.0114 72.0895 20.3295C72.4266 19.6477 72.8963 19.1155 73.4986 18.733C74.1046 18.3504 74.813 18.1591 75.6236 18.1591C76.116 18.1591 76.5933 18.2405 77.0554 18.4034C77.5175 18.5663 77.9323 18.822 78.2997 19.1705C78.6671 19.5189 78.9569 19.9716 79.169 20.5284C79.3811 21.0814 79.4872 21.7538 79.4872 22.5455V23.1477H72.5497V21.875H77.8224C77.8224 21.428 77.7315 21.0322 77.5497 20.6875C77.3679 20.339 77.1122 20.0644 76.7827 19.8636C76.4569 19.6629 76.0743 19.5625 75.6349 19.5625C75.1577 19.5625 74.741 19.6799 74.3849 19.9148C74.0327 20.1458 73.7599 20.4489 73.5668 20.8239C73.3774 21.1951 73.2827 21.5985 73.2827 22.0341V23.0284C73.2827 23.6117 73.3849 24.108 73.5895 24.517C73.7978 24.9261 74.0876 25.2386 74.4588 25.4545C74.83 25.6667 75.2637 25.7727 75.7599 25.7727C76.0819 25.7727 76.3755 25.7273 76.6406 25.6364C76.9058 25.5417 77.1349 25.4015 77.3281 25.2159C77.5213 25.0303 77.669 24.8011 77.7713 24.5284L79.3793 24.8182C79.2505 25.2917 79.0194 25.7064 78.6861 26.0625C78.3565 26.4148 77.9418 26.6894 77.4418 26.8864C76.9455 27.0795 76.3793 27.1761 75.7429 27.1761ZM81.3721 30.2727V18.2727H83.0312V19.6875H83.1733C83.2718 19.5057 83.4138 19.2955 83.5994 19.0568C83.785 18.8182 84.0426 18.6098 84.3721 18.4318C84.7017 18.25 85.1373 18.1591 85.679 18.1591C86.3835 18.1591 87.0123 18.3371 87.5653 18.6932C88.1184 19.0492 88.5521 19.5625 88.8665 20.233C89.1846 20.9034 89.3437 21.7102 89.3437 22.6534C89.3437 23.5966 89.1865 24.4053 88.8721 25.0795C88.5578 25.75 88.1259 26.267 87.5767 26.6307C87.0275 26.9905 86.4006 27.1705 85.696 27.1705C85.1657 27.1705 84.732 27.0814 84.3949 26.9034C84.0615 26.7254 83.8002 26.517 83.6108 26.2784C83.4214 26.0398 83.2756 25.8277 83.1733 25.642H83.071V30.2727H81.3721ZM83.0369 22.6364C83.0369 23.25 83.1259 23.7879 83.304 24.25C83.482 24.7121 83.7396 25.0739 84.0767 25.3352C84.4138 25.5928 84.8267 25.7216 85.3153 25.7216C85.8229 25.7216 86.2471 25.5871 86.5881 25.3182C86.929 25.0455 87.1865 24.6761 87.3608 24.2102C87.5388 23.7443 87.6278 23.2197 87.6278 22.6364C87.6278 22.0606 87.5407 21.5436 87.3665 21.0852C87.196 20.6269 86.9384 20.2652 86.5937 20C86.2528 19.7348 85.8267 19.6023 85.3153 19.6023C84.8229 19.6023 84.4062 19.7292 84.0653 19.983C83.7282 20.2367 83.4725 20.5909 83.2983 21.0455C83.124 21.5 83.0369 22.0303 83.0369 22.6364ZM92.946 15.3636V27H91.2471V15.3636H92.946ZM98.9077 27.1761C98.0895 27.1761 97.3755 26.9886 96.7656 26.6136C96.1558 26.2386 95.6823 25.714 95.3452 25.0398C95.008 24.3655 94.8395 23.5777 94.8395 22.6761C94.8395 21.7708 95.008 20.9792 95.3452 20.3011C95.6823 19.6231 96.1558 19.0966 96.7656 18.7216C97.3755 18.3466 98.0895 18.1591 98.9077 18.1591C99.7258 18.1591 100.44 18.3466 101.05 18.7216C101.66 19.0966 102.133 19.6231 102.47 20.3011C102.807 20.9792 102.976 21.7708 102.976 22.6761C102.976 23.5777 102.807 24.3655 102.47 25.0398C102.133 25.714 101.66 26.2386 101.05 26.6136C100.44 26.9886 99.7258 27.1761 98.9077 27.1761ZM98.9133 25.75C99.4436 25.75 99.883 25.6098 100.232 25.3295C100.58 25.0492 100.838 24.6761 101.004 24.2102C101.175 23.7443 101.26 23.2311 101.26 22.6705C101.26 22.1136 101.175 21.6023 101.004 21.1364C100.838 20.6667 100.58 20.2898 100.232 20.0057C99.883 19.7216 99.4436 19.5795 98.9133 19.5795C98.3793 19.5795 97.9361 19.7216 97.5838 20.0057C97.2353 20.2898 96.9758 20.6667 96.8054 21.1364C96.6387 21.6023 96.5554 22.1136 96.5554 22.6705C96.5554 23.2311 96.6387 23.7443 96.8054 24.2102C96.9758 24.6761 97.2353 25.0492 97.5838 25.3295C97.9361 25.6098 98.3793 25.75 98.9133 25.75ZM105.649 30.2727C105.395 30.2727 105.164 30.2519 104.956 30.2102C104.748 30.1723 104.592 30.1307 104.49 30.0852L104.899 28.6932C105.21 28.7765 105.486 28.8125 105.729 28.8011C105.971 28.7898 106.185 28.6989 106.371 28.5284C106.56 28.358 106.727 28.0795 106.871 27.6932L107.081 27.1136L103.888 18.2727H105.706L107.916 25.0455H108.007L110.217 18.2727H112.041L108.445 28.1648C108.278 28.6193 108.066 29.0038 107.808 29.3182C107.551 29.6364 107.244 29.875 106.888 30.0341C106.532 30.1932 106.119 30.2727 105.649 30.2727ZM121.946 18.2727V19.6364H117.179V18.2727H121.946ZM118.457 16.1818H120.156V24.4375C120.156 24.767 120.205 25.0152 120.304 25.1818C120.402 25.3447 120.529 25.4564 120.685 25.Line truncated
<path d="M49 45L49 -1" stroke="url(#paint6_linear_3331_3738)"/>
</g>
<defs>
<linearGradient id="paint0_linear_3331_3738" x1="7.22083" y1="26.5685" x2="27.1466" y2="15.0412" gradientUnits="userSpaceOnUse">
<stop offset="0.2" stop-color="#668CFF"/>
<stop offset="0.49" stop-color="#00AAFF"/>
<stop offset="0.8" stop-color="#00BFB5"/>
</linearGradient>
<linearGradient id="paint1_linear_3331_3738" x1="12.4778" y1="30.9905" x2="20.4185" y2="26.3956" gradientUnits="userSpaceOnUse">
<stop offset="0.5" stop-color="#668CFF"/>
<stop offset="1" stop-color="#00AAFF" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint2_linear_3331_3738" x1="23.7917" y1="26.1211" x2="31.1041" y2="21.8903" gradientUnits="userSpaceOnUse">
<stop stop-color="#00AAFF" stop-opacity="0"/>
<stop offset="0.4" stop-color="#00BFB5"/>
</linearGradient>
<linearGradient id="paint3_linear_3331_3738" x1="28.4383" y1="15.8389" x2="36.379" y2="11.2464" gradientUnits="userSpaceOnUse">
<stop stop-color="#00BFB5" stop-opacity="0"/>
<stop offset="0.5" stop-color="#00CC7C"/>
</linearGradient>
<linearGradient id="paint4_linear_3331_3738" x1="22.1442" y1="27.9386" x2="42.0676" y2="16.4137" gradientUnits="userSpaceOnUse">
<stop offset="0.2" stop-color="#00AAFF"/>
<stop offset="0.51" stop-color="#00BFB5"/>
<stop offset="0.8" stop-color="#00CC7C"/>
</linearGradient>
<linearGradient id="paint5_linear_3331_3738" x1="18.1968" y1="21.1136" x2="25.5116" y2="16.8805" gradientUnits="userSpaceOnUse">
<stop offset="0.6" stop-color="#00AAFF"/>
<stop offset="1" stop-color="#00BFB5" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint6_linear_3331_3738" x1="48.5" y1="45" x2="48.5" y2="-1" gradientUnits="userSpaceOnUse">
<stop stop-color="#425AA3"/>
<stop offset="0.283654" stop-color="#425AA3"/>
<stop offset="0.504808" stop-color="#01B2E1"/>
<stop offset="0.725962" stop-color="#01C987"/>
<stop offset="1" stop-color="#01C987" stop-opacity="0.75"/>
</linearGradient>
<clipPath id="clip0_3331_3738">
<rect width="228.293" height="43" rx="2" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 161 KiB

+1
View File
@@ -140,6 +140,7 @@
"self-hosting/deployments/azure",
"self-hosting/deployments/elestio",
"self-hosting/deployments/gcp",
"self-hosting/deployments/northflank",
"self-hosting/deployments/railway",
"self-hosting/deployments/render",
"self-hosting/deployments/vercel"
@@ -0,0 +1,13 @@
---
title: "Northflank"
icon: "square-n"
---
You can deploy Cal.com on Northflank using the button below.
The team at Northflank also have a [detailed blog post](https://northflank.com/guides/deploy-calcom-with-northflank) on deploying Cal.com on their platform.
## One Click Deployment
<a href="https://northflank.com/stacks/deploy-calcom" target="_blank">
<img src="/images/deploy-northflank.svg" noZoom alt="Deploy on Northflank" />
</a>
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "calcom-monorepo",
"version": "0.0.0",
"version": "5.8.2",
"private": true,
"workspaces": [
"apps/*",
@@ -0,0 +1,12 @@
import type { TFunction } from "i18next";
export interface IBookingRedirect {
language: TFunction;
fromEmail: string;
eventOwner: string;
toEmail: string;
toName: string;
oldDates?: string;
dates: string;
action: "add" | "update" | "cancel";
}
+23
View File
@@ -0,0 +1,23 @@
import type { TFunction } from "i18next";
export type OrganizationCreation = {
language: TFunction;
from: string;
to: string;
ownerNewUsername: string;
ownerOldUsername: string | null;
orgDomain: string;
orgName: string;
prevLink: string | null;
newLink: string;
};
export type EmailVerifyCode = {
language: TFunction;
user: {
name?: string | null;
email: string;
};
verificationEmailCode: string;
isVerifyingEmail?: boolean;
};
@@ -0,0 +1,26 @@
import dayjs from "@calcom/dayjs";
import { TimeFormat } from "@calcom/lib/timeFormat";
import type { CalendarEvent, Person } from "@calcom/types/Calendar";
export function getFormattedDate(calEvent: CalendarEvent, attendee: Person): string {
const inviteeTimeFormat = calEvent.organizer.timeFormat || TimeFormat.TWELVE_HOUR;
const timezone = attendee.timeZone;
const locale = attendee.language.locale;
const t = attendee.language.translate;
const getFormattedRecipientTime = (time: string, format: string) => {
return dayjs(time).tz(timezone).locale(locale).format(format);
};
const getInviteeStart = (format: string) => {
return getFormattedRecipientTime(calEvent.startTime, format);
};
const getInviteeEnd = (format: string) => {
return getFormattedRecipientTime(calEvent.endTime, format);
};
return `${getInviteeStart(inviteeTimeFormat)} - ${getInviteeEnd(inviteeTimeFormat)}, ${t(
getInviteeStart("dddd").toLowerCase()
)}, ${t(getInviteeStart("MMMM").toLowerCase())} ${getInviteeStart("D, YYYY")}`;
}
@@ -0,0 +1,59 @@
import type { TFunction } from "i18next";
import { APP_NAME } from "@calcom/lib/constants";
export type TeamInvite = {
language: TFunction;
from: string;
to: string;
teamName: string;
joinLink: string;
isCalcomMember: boolean;
/**
* We ideally should have a separate email for auto-join(when a user is automatically accepted into a team/org), but we don't have one yet.
*/
isAutoJoin: boolean;
isOrg: boolean;
parentTeamName: string | undefined;
isExistingUserMovedToOrg: boolean;
prevLink: string | null;
newLink: string | null;
};
export function getTypeOfInvite(teamInviteEvent: TeamInvite) {
if (teamInviteEvent.isOrg) {
return "TO_ORG";
}
if (teamInviteEvent.parentTeamName) {
return "TO_SUBTEAM";
}
if (teamInviteEvent.isAutoJoin) {
throw new Error("Auto-join is not supported for regular teams");
}
return "TO_REGULAR_TEAM";
}
export const getSubject = (teamInviteEvent: TeamInvite) => {
const typeOfInvite = getTypeOfInvite(teamInviteEvent);
const type = teamInviteEvent.isAutoJoin ? "added" : "invited";
const variables = {
user: teamInviteEvent.from,
team: teamInviteEvent.teamName,
appName: APP_NAME,
parentTeamName: teamInviteEvent.parentTeamName,
entity: teamInviteEvent.language(teamInviteEvent.isOrg ? "organization" : "team").toLowerCase(),
};
if (typeOfInvite === "TO_ORG") {
return teamInviteEvent.language(`email_team_invite|subject|${type}_to_org`, variables);
}
if (typeOfInvite === "TO_SUBTEAM") {
return teamInviteEvent.language(`email_team_invite|subject|${type}_to_subteam`, variables);
}
return teamInviteEvent.language(`email_team_invite|subject|${type}_to_regular_team`, variables);
};
@@ -1,8 +1,8 @@
import AttendeeScheduledEmailClass from "../../templates/attendee-rescheduled-email";
import { getFormattedDate } from "../../lib/utils/date-formatting";
import { AttendeeScheduledEmail } from "./AttendeeScheduledEmail";
export const AttendeeRequestEmail = (props: React.ComponentProps<typeof AttendeeScheduledEmail>) => {
const date = new AttendeeScheduledEmailClass(props.calEvent, props.attendee).getFormattedDate();
const date = getFormattedDate(props.calEvent, props.attendee);
return (
<AttendeeScheduledEmail
@@ -1,4 +1,4 @@
import type { IBookingRedirect } from "../../templates/booking-redirect-notification";
import type { IBookingRedirect } from "../../lib/types/booking-redirect-types";
import { BaseEmailHtml } from "../components";
export const BookingRedirectEmailNotification = (
@@ -1,7 +1,7 @@
import ServerTrans from "@calcom/lib/components/ServerTrans";
import { APP_NAME, WEBAPP_URL } from "@calcom/lib/constants";
import type { OrganizationCreation } from "../../templates/organization-creation-email";
import type { OrganizationCreation } from "../../lib/types/email-types";
import { V2BaseEmailHtml } from "../components";
export const OrganizationCreationEmail = (
@@ -3,7 +3,7 @@ import type { TFunction } from "i18next";
import ServerTrans from "@calcom/lib/components/ServerTrans";
import { APP_NAME, WEBAPP_URL, IS_PRODUCTION } from "@calcom/lib/constants";
import { getSubject, getTypeOfInvite } from "../../templates/team-invite-email";
import { getSubject, getTypeOfInvite } from "../../lib/utils/team-invite-utils";
import { V2BaseEmailHtml, CallToAction } from "../components";
type TeamInvite = {
@@ -1,6 +1,6 @@
import { APP_NAME, SENDER_NAME, SUPPORT_MAIL_ADDRESS } from "@calcom/lib/constants";
import type { EmailVerifyCode } from "../../templates/attendee-verify-email";
import type { EmailVerifyCode } from "../../lib/types/email-types";
import { BaseEmailHtml } from "../components";
export const VerifyEmailByCode = (
@@ -2,7 +2,7 @@ import type { TFunction } from "i18next";
import { APP_NAME, COMPANY_NAME, EMAIL_FROM_NAME } from "@calcom/lib/constants";
import { renderEmail } from "../";
import renderEmail from "../src/renderEmail";
import BaseEmail from "./_base-email";
export type EmailVerifyLink = {
@@ -2,7 +2,7 @@ import type { TFunction } from "i18next";
import { EMAIL_FROM_NAME } from "@calcom/lib/constants";
import { renderEmail } from "../";
import renderEmail from "../src/renderEmail";
import BaseEmail from "./_base-email";
export type OrganizationNotification = {
@@ -1,7 +1,7 @@
import { getReplyToHeader } from "@calcom/lib/getReplyToHeader";
import { renderEmail } from "../";
import generateIcsFile, { GenerateIcsRole } from "../lib/generateIcsFile";
import renderEmail from "../src/renderEmail";
import AttendeeScheduledEmail from "./attendee-scheduled-email";
export default class AttendeeAddGuestsEmail extends AttendeeScheduledEmail {
@@ -1,6 +1,6 @@
import { getReplyToHeader } from "@calcom/lib/getReplyToHeader";
import { renderEmail } from "../";
import renderEmail from "../src/renderEmail";
import AttendeeScheduledEmail from "./attendee-scheduled-email";
export default class AttendeeAwaitingPaymentEmail extends AttendeeScheduledEmail {
@@ -1,8 +1,8 @@
import { getReplyToHeader } from "@calcom/lib/getReplyToHeader";
import type { CalendarEvent, Person } from "@calcom/types/Calendar";
import { renderEmail } from "../";
import generateIcsFile, { GenerateIcsRole } from "../lib/generateIcsFile";
import renderEmail from "../src/renderEmail";
import AttendeeScheduledEmail from "./attendee-scheduled-email";
export default class AttendeeCancelledEmail extends AttendeeScheduledEmail {
@@ -1,6 +1,6 @@
import { getReplyToHeader } from "@calcom/lib/getReplyToHeader";
import { renderEmail } from "../";
import renderEmail from "../src/renderEmail";
import AttendeeScheduledEmail from "./attendee-scheduled-email";
export default class AttendeeCancelledSeatEmail extends AttendeeScheduledEmail {
@@ -5,7 +5,7 @@ import { getReplyToHeader } from "@calcom/lib/getReplyToHeader";
import { TimeFormat } from "@calcom/lib/timeFormat";
import type { CalendarEvent, Person } from "@calcom/types/Calendar";
import { renderEmail } from "../";
import renderEmail from "../src/renderEmail";
import BaseEmail from "./_base-email";
export default class AttendeeDailyVideoDownloadRecordingEmail extends BaseEmail {
@@ -4,7 +4,7 @@ import { getReplyToHeader } from "@calcom/lib/getReplyToHeader";
import { TimeFormat } from "@calcom/lib/timeFormat";
import type { CalendarEvent, Person } from "@calcom/types/Calendar";
import { renderEmail } from "../";
import renderEmail from "../src/renderEmail";
import BaseEmail from "./_base-email";
export default class AttendeeDailyVideoDownloadTranscriptEmail extends BaseEmail {
@@ -1,7 +1,7 @@
import { getReplyToHeader } from "@calcom/lib/getReplyToHeader";
import type { CalendarEvent, Person } from "@calcom/types/Calendar";
import { renderEmail } from "../";
import renderEmail from "../src/renderEmail";
import AttendeeScheduledEmail from "./attendee-scheduled-email";
export default class AttendeeDeclinedEmail extends AttendeeScheduledEmail {
@@ -1,7 +1,7 @@
import { getReplyToHeader } from "@calcom/lib/getReplyToHeader";
import { renderEmail } from "../";
import generateIcsFile, { GenerateIcsRole } from "../lib/generateIcsFile";
import renderEmail from "../src/renderEmail";
import AttendeeScheduledEmail from "./attendee-scheduled-email";
export default class AttendeeLocationChangeEmail extends AttendeeScheduledEmail {
@@ -2,7 +2,7 @@ import { EMAIL_FROM_NAME } from "@calcom/lib/constants";
import { getReplyToHeader } from "@calcom/lib/getReplyToHeader";
import type { CalendarEvent, Person } from "@calcom/types/Calendar";
import { renderEmail } from "../";
import renderEmail from "../src/renderEmail";
import AttendeeScheduledEmail from "./attendee-scheduled-email";
export default class AttendeeRequestEmail extends AttendeeScheduledEmail {
@@ -1,8 +1,8 @@
import { getReplyToHeader } from "@calcom/lib/getReplyToHeader";
import type { CalendarEvent, Person } from "@calcom/types/Calendar";
import { renderEmail } from "../";
import generateIcsFile, { GenerateIcsRole } from "../lib/generateIcsFile";
import renderEmail from "../src/renderEmail";
import AttendeeScheduledEmail from "./attendee-scheduled-email";
export default class AttendeeRescheduledEmail extends AttendeeScheduledEmail {
@@ -6,8 +6,8 @@ import { getReplyToHeader } from "@calcom/lib/getReplyToHeader";
import { TimeFormat } from "@calcom/lib/timeFormat";
import type { CalendarEvent, Person } from "@calcom/types/Calendar";
import { renderEmail } from "../";
import generateIcsFile, { GenerateIcsRole } from "../lib/generateIcsFile";
import renderEmail from "../src/renderEmail";
import BaseEmail from "./_base-email";
export default class AttendeeScheduledEmail extends BaseEmail {
@@ -1,8 +1,8 @@
import { getReplyToHeader } from "@calcom/lib/getReplyToHeader";
import type { CalendarEvent, Person } from "@calcom/types/Calendar";
import { renderEmail } from "../";
import generateIcsFile, { GenerateIcsRole } from "../lib/generateIcsFile";
import renderEmail from "../src/renderEmail";
import AttendeeScheduledEmail from "./attendee-scheduled-email";
export default class AttendeeUpdatedEmail extends AttendeeScheduledEmail {
@@ -1,19 +1,10 @@
import type { TFunction } from "i18next";
import { APP_NAME, COMPANY_NAME, EMAIL_FROM_NAME } from "@calcom/lib/constants";
import { renderEmail } from "../";
import type { EmailVerifyCode } from "../lib/types/email-types";
import renderEmail from "../src/renderEmail";
import BaseEmail from "./_base-email";
export type EmailVerifyCode = {
language: TFunction;
user: {
name?: string | null;
email: string;
};
verificationEmailCode: string;
isVerifyingEmail?: boolean;
};
export type { EmailVerifyCode } from "../lib/types/email-types";
export default class AttendeeVerifyEmail extends BaseEmail {
verifyAccountInput: EmailVerifyCode;
@@ -2,8 +2,8 @@ import { getManageLink } from "@calcom/lib/CalEventParser";
import { EMAIL_FROM_NAME } from "@calcom/lib/constants";
import type { CalendarEvent } from "@calcom/types/Calendar";
import { renderEmail } from "..";
import generateIcsFile, { GenerateIcsRole } from "../lib/generateIcsFile";
import renderEmail from "../src/renderEmail";
import OrganizerScheduledEmail from "./organizer-scheduled-email";
export default class AttendeeWasRequestedToRescheduleEmail extends OrganizerScheduledEmail {
@@ -1,20 +1,10 @@
import type { TFunction } from "i18next";
import { EMAIL_FROM_NAME } from "@calcom/lib/constants";
import { renderEmail } from "..";
import type { IBookingRedirect } from "../lib/types/booking-redirect-types";
import renderEmail from "../src/renderEmail";
import BaseEmail from "./_base-email";
export interface IBookingRedirect {
language: TFunction;
fromEmail: string;
eventOwner: string;
toEmail: string;
toName: string;
oldDates?: string;
dates: string;
action: "add" | "update" | "cancel";
}
export type { IBookingRedirect } from "../lib/types/booking-redirect-types";
export default class BookingRedirectNotification extends BaseEmail {
bookingRedirect: IBookingRedirect;
@@ -5,7 +5,7 @@ import { EMAIL_FROM_NAME } from "@calcom/lib/constants";
import { TimeFormat } from "@calcom/lib/timeFormat";
import type { CalendarEvent } from "@calcom/types/Calendar";
import { renderEmail } from "..";
import renderEmail from "../src/renderEmail";
import BaseEmail from "./_base-email";
export default class BrokenIntegrationEmail extends BaseEmail {
@@ -2,7 +2,7 @@ import type { TFunction } from "i18next";
import { APP_NAME, COMPANY_NAME, EMAIL_FROM_NAME } from "@calcom/lib/constants";
import { renderEmail } from "../";
import renderEmail from "../src/renderEmail";
import BaseEmail from "./_base-email";
export type ChangeOfEmailVerifyLink = {
@@ -2,7 +2,7 @@ import type { TFunction } from "i18next";
import { EMAIL_FROM_NAME } from "@calcom/lib/constants";
import { renderEmail } from "..";
import renderEmail from "../src/renderEmail";
import BaseEmail from "./_base-email";
export default class CreditBalanceLimitReachedEmail extends BaseEmail {
@@ -2,7 +2,7 @@ import type { TFunction } from "i18next";
import { EMAIL_FROM_NAME } from "@calcom/lib/constants";
import { renderEmail } from "..";
import renderEmail from "../src/renderEmail";
import BaseEmail from "./_base-email";
export default class CreditBalanceLowWarningEmail extends BaseEmail {
@@ -2,7 +2,7 @@ import type { TFunction } from "i18next";
import { EMAIL_FROM_NAME } from "@calcom/lib/constants";
import { renderEmail } from "..";
import renderEmail from "../src/renderEmail";
import BaseEmail from "./_base-email";
export default class DisabledAppEmail extends BaseEmail {
+1 -1
View File
@@ -1,6 +1,6 @@
import { EMAIL_FROM_NAME } from "@calcom/lib/constants";
import { renderEmail } from "../";
import renderEmail from "../src/renderEmail";
import BaseEmail from "./_base-email";
export interface Feedback {
@@ -2,7 +2,7 @@ import type { TFunction } from "i18next";
import { APP_NAME, EMAIL_FROM_NAME } from "@calcom/lib/constants";
import { renderEmail } from "../";
import renderEmail from "../src/renderEmail";
import BaseEmail from "./_base-email";
export type PasswordReset = {
@@ -1,6 +1,6 @@
import { APP_NAME, EMAIL_FROM_NAME } from "@calcom/lib/constants";
import { renderEmail } from "../";
import renderEmail from "../src/renderEmail";
import type { MonthlyDigestEmailData } from "../src/templates/MonthlyDigestEmail";
import BaseEmail from "./_base-email";
@@ -1,6 +1,6 @@
import { getReplyToHeader } from "@calcom/lib/getReplyToHeader";
import { renderEmail } from "../";
import renderEmail from "../src/renderEmail";
import AttendeeScheduledEmail from "./attendee-scheduled-email";
export default class NoShowFeeChargedEmail extends AttendeeScheduledEmail {
@@ -2,7 +2,7 @@ import type { TFunction } from "i18next";
import { APP_NAME, EMAIL_FROM_NAME } from "@calcom/lib/constants";
import { renderEmail } from "..";
import renderEmail from "../src/renderEmail";
import BaseEmail from "./_base-email";
export type OrgAutoInvite = {
@@ -1,21 +1,10 @@
import type { TFunction } from "i18next";
import { EMAIL_FROM_NAME } from "@calcom/lib/constants";
import { renderEmail } from "../";
import type { OrganizationCreation } from "../lib/types/email-types";
import renderEmail from "../src/renderEmail";
import BaseEmail from "./_base-email";
export type OrganizationCreation = {
language: TFunction;
from: string;
to: string;
ownerNewUsername: string;
ownerOldUsername: string | null;
orgDomain: string;
orgName: string;
prevLink: string | null;
newLink: string;
};
export type { OrganizationCreation } from "../lib/types/email-types";
export default class OrganizationCreationEmail extends BaseEmail {
organizationCreationEvent: OrganizationCreation;
@@ -1,8 +1,8 @@
import { APP_NAME } from "@calcom/lib/constants";
import { getReplyToHeader } from "@calcom/lib/getReplyToHeader";
import { renderEmail } from "../";
import generateIcsFile, { GenerateIcsRole } from "../lib/generateIcsFile";
import renderEmail from "../src/renderEmail";
import OrganizerScheduledEmail from "./organizer-scheduled-email";
export default class OrganizerAddGuestsEmail extends OrganizerScheduledEmail {
@@ -1,6 +1,6 @@
import { EMAIL_FROM_NAME } from "@calcom/lib/constants";
import { renderEmail } from "../";
import renderEmail from "../src/renderEmail";
import OrganizerScheduledEmail from "./organizer-scheduled-email";
export default class OrganizerCancelledEmail extends OrganizerScheduledEmail {
@@ -1,8 +1,8 @@
import { EMAIL_FROM_NAME } from "@calcom/lib/constants";
import type { CalendarEvent, Person } from "@calcom/types/Calendar";
import { renderEmail } from "../";
import generateIcsFile, { GenerateIcsRole } from "../lib/generateIcsFile";
import renderEmail from "../src/renderEmail";
import OrganizerScheduledEmail from "./organizer-scheduled-email";
import type { Reassigned } from "./organizer-scheduled-email";
@@ -5,7 +5,7 @@ import { getReplyToHeader } from "@calcom/lib/getReplyToHeader";
import { TimeFormat } from "@calcom/lib/timeFormat";
import type { CalendarEvent } from "@calcom/types/Calendar";
import { renderEmail } from "../";
import renderEmail from "../src/renderEmail";
import BaseEmail from "./_base-email";
export default class OrganizerDailyVideoDownloadRecordingEmail extends BaseEmail {
@@ -5,7 +5,7 @@ import { getReplyToHeader } from "@calcom/lib/getReplyToHeader";
import { TimeFormat } from "@calcom/lib/timeFormat";
import type { CalendarEvent } from "@calcom/types/Calendar";
import { renderEmail } from "..";
import renderEmail from "../src/renderEmail";
import BaseEmail from "./_base-email";
export default class OrganizerDailyVideoDownloadTranscriptEmail extends BaseEmail {
@@ -1,8 +1,8 @@
import { EMAIL_FROM_NAME } from "@calcom/lib/constants";
import { getReplyToHeader } from "@calcom/lib/getReplyToHeader";
import { renderEmail } from "../";
import generateIcsFile, { GenerateIcsRole } from "../lib/generateIcsFile";
import renderEmail from "../src/renderEmail";
import OrganizerScheduledEmail from "./organizer-scheduled-email";
export default class OrganizerLocationChangeEmail extends OrganizerScheduledEmail {
@@ -1,6 +1,6 @@
import { EMAIL_FROM_NAME } from "@calcom/lib/constants";
import { renderEmail } from "../";
import renderEmail from "../src/renderEmail";
import OrganizerScheduledEmail from "./organizer-scheduled-email";
export default class OrganizerPaymentRefundFailedEmail extends OrganizerScheduledEmail {
@@ -1,8 +1,8 @@
import { EMAIL_FROM_NAME } from "@calcom/lib/constants";
import type { CalendarEvent, Person } from "@calcom/types/Calendar";
import { renderEmail } from "../";
import generateIcsFile, { GenerateIcsRole } from "../lib/generateIcsFile";
import renderEmail from "../src/renderEmail";
import OrganizerScheduledEmail from "./organizer-scheduled-email";
import type { Reassigned } from "./organizer-scheduled-email";
@@ -3,7 +3,7 @@ import { EMAIL_FROM_NAME } from "@calcom/lib/constants";
import { getReplyToHeader } from "@calcom/lib/getReplyToHeader";
import type { CalendarEvent, Person } from "@calcom/types/Calendar";
import { renderEmail } from "../";
import renderEmail from "../src/renderEmail";
import OrganizerScheduledEmail from "./organizer-scheduled-email";
/**
@@ -1,7 +1,7 @@
import { EMAIL_FROM_NAME } from "@calcom/lib/constants";
import { getReplyToHeader } from "@calcom/lib/getReplyToHeader";
import { renderEmail } from "../";
import renderEmail from "../src/renderEmail";
import OrganizerRequestEmail from "./organizer-request-email";
export default class OrganizerRequestReminderEmail extends OrganizerRequestEmail {
@@ -1,8 +1,8 @@
import { EMAIL_FROM_NAME } from "@calcom/lib/constants";
import type { CalendarEvent } from "@calcom/types/Calendar";
import { renderEmail } from "..";
import generateIcsFile, { GenerateIcsRole } from "../lib/generateIcsFile";
import renderEmail from "../src/renderEmail";
import OrganizerScheduledEmail from "./organizer-scheduled-email";
export default class OrganizerRequestedToRescheduleEmail extends OrganizerScheduledEmail {
@@ -2,8 +2,8 @@ import { EMAIL_FROM_NAME } from "@calcom/lib/constants";
import { getReplyToHeader } from "@calcom/lib/getReplyToHeader";
import type { CalendarEvent, Person } from "@calcom/types/Calendar";
import { renderEmail } from "../";
import generateIcsFile, { GenerateIcsRole } from "../lib/generateIcsFile";
import renderEmail from "../src/renderEmail";
import OrganizerScheduledEmail from "./organizer-scheduled-email";
export default class OrganizerRescheduledEmail extends OrganizerScheduledEmail {
@@ -7,9 +7,9 @@ import { getReplyToHeader } from "@calcom/lib/getReplyToHeader";
import { TimeFormat } from "@calcom/lib/timeFormat";
import type { CalendarEvent, Person } from "@calcom/types/Calendar";
import { renderEmail } from "../";
import generateIcsFile from "../lib/generateIcsFile";
import { GenerateIcsRole } from "../lib/generateIcsFile";
import renderEmail from "../src/renderEmail";
import BaseEmail from "./_base-email";
export type Reassigned = { name: string | null; email: string; reason?: string; byUser?: string };
@@ -2,7 +2,7 @@ import type { TFunction } from "i18next";
import { EMAIL_FROM_NAME } from "@calcom/lib/constants";
import { renderEmail } from "..";
import renderEmail from "../src/renderEmail";
import BaseEmail from "./_base-email";
export default class SlugReplacementEmail extends BaseEmail {
+4 -59
View File
@@ -1,65 +1,10 @@
import type { TFunction } from "i18next";
import { EMAIL_FROM_NAME } from "@calcom/lib/constants";
import { APP_NAME, EMAIL_FROM_NAME } from "@calcom/lib/constants";
import { renderEmail } from "../";
import { getSubject, type TeamInvite } from "../lib/utils/team-invite-utils";
import renderEmail from "../src/renderEmail";
import BaseEmail from "./_base-email";
export type TeamInvite = {
language: TFunction;
from: string;
to: string;
teamName: string;
joinLink: string;
isCalcomMember: boolean;
/**
* We ideally should have a separate email for auto-join(when a user is automatically accepted into a team/org), but we don't have one yet.
*/
isAutoJoin: boolean;
isOrg: boolean;
parentTeamName: string | undefined;
isExistingUserMovedToOrg: boolean;
prevLink: string | null;
newLink: string | null;
};
export function getTypeOfInvite(teamInviteEvent: TeamInvite) {
if (teamInviteEvent.isOrg) {
return "TO_ORG";
}
if (teamInviteEvent.parentTeamName) {
return "TO_SUBTEAM";
}
if (teamInviteEvent.isAutoJoin) {
throw new Error("Auto-join is not supported for regular teams");
}
return "TO_REGULAR_TEAM";
}
export const getSubject = (teamInviteEvent: TeamInvite) => {
const typeOfInvite = getTypeOfInvite(teamInviteEvent);
const type = teamInviteEvent.isAutoJoin ? "added" : "invited";
const variables = {
user: teamInviteEvent.from,
team: teamInviteEvent.teamName,
appName: APP_NAME,
parentTeamName: teamInviteEvent.parentTeamName,
entity: teamInviteEvent.language(teamInviteEvent.isOrg ? "organization" : "team").toLowerCase(),
};
if (typeOfInvite === "TO_ORG") {
return teamInviteEvent.language(`email_team_invite|subject|${type}_to_org`, variables);
}
if (typeOfInvite === "TO_SUBTEAM") {
return teamInviteEvent.language(`email_team_invite|subject|${type}_to_subteam`, variables);
}
return teamInviteEvent.language(`email_team_invite|subject|${type}_to_regular_team`, variables);
};
export { getSubject, getTypeOfInvite, type TeamInvite } from "../lib/utils/team-invite-utils";
export default class TeamInviteEmail extends BaseEmail {
teamInviteEvent: TeamInvite;
+1 -1
View File
@@ -3,9 +3,9 @@ import type { Dispatch, SetStateAction } from "react";
import { useFormContext } from "react-hook-form";
import z from "zod";
import { LastUsed, useLastUsed } from "@calcom/features/auth/lib/hooks/useLastUsed";
import { HOSTED_CAL_FEATURES } from "@calcom/lib/constants";
import { emailRegex } from "@calcom/lib/emailSchema";
import { LastUsed, useLastUsed } from "@calcom/lib/hooks/useLastUsed";
import { useLocale } from "@calcom/lib/hooks/useLocale";
import { trpc } from "@calcom/trpc/react";
import type { ButtonProps } from "@calcom/ui/components/button";
@@ -301,6 +301,7 @@ const getError = ({
const error = dataError;
let date = "";
let count = 0;
if (error.message === ErrorCode.BookerLimitExceededReschedule) {
const formattedDate = formatEventFromTime({
@@ -312,9 +313,16 @@ const getError = ({
date = `${formattedDate.date} ${formattedDate.time}`;
}
if (error.message === ErrorCode.BookerLimitExceeded && error.data?.count) {
count = error.data.count;
}
const messageKey =
error.message === ErrorCode.BookerLimitExceeded ? "booker_upcoming_limit_reached" : error.message;
return error?.message ? (
<>
{responseVercelIdHeader ?? ""} {t(error.message, { date })}
{responseVercelIdHeader ?? ""} {t(messageKey, { date, count })}
</>
) : (
<>{t("can_you_try_again")}</>
@@ -3,6 +3,7 @@ import { useMemo, useEffect } from "react";
import dayjs from "@calcom/dayjs";
import { useBookerStoreContext } from "@calcom/features/bookings/Booker/BookerStoreProvider";
import { useAvailableTimeSlots } from "@calcom/features/bookings/Booker/components/hooks/useAvailableTimeSlots";
import { useBookerTime } from "@calcom/features/bookings/Booker/components/hooks/useBookerTime";
import type { BookerEvent } from "@calcom/features/bookings/types";
import { Calendar } from "@calcom/features/calendars/weeklyview";
import type { CalendarEvent } from "@calcom/features/calendars/weeklyview/types/events";
@@ -31,6 +32,7 @@ export const LargeCalendar = ({
const overlayEvents = useOverlayCalendarStore((state) => state.overlayBusyDates);
const displayOverlay =
getQueryParam("overlayCalendar") === "true" || localStorage?.getItem("overlayCalendarSwitchDefault");
const { timezone } = useBookerTime();
const eventDuration = selectedEventDuration || event?.data?.length || 30;
@@ -43,7 +45,6 @@ export const LargeCalendar = ({
// HACK: force rerender when overlay events change
// Sine we dont use react router here we need to force rerender (ATOM SUPPORT)
// eslint-disable-next-line @typescript-eslint/no-empty-function
useEffect(() => {}, [displayOverlay]);
const overlayEventsForDate = useMemo(() => {
@@ -75,6 +76,7 @@ export const LargeCalendar = ({
gridCellsPerHour={60 / eventDuration}
hoverEventDuration={eventDuration}
hideHeader
timezone={timezone}
/>
</div>
);
@@ -0,0 +1,14 @@
import { createContainer } from "@calcom/lib/di/di";
import {
type BookingCancelService,
moduleLoader as bookingCancelServiceModule,
} from "../modules/BookingCancelService.module";
const bookingCancelServiceContainer = createContainer();
export function getBookingCancelService(): BookingCancelService {
bookingCancelServiceModule.loadModule(bookingCancelServiceContainer);
return bookingCancelServiceContainer.get<BookingCancelService>(bookingCancelServiceModule.token);
}
@@ -0,0 +1,24 @@
import { BookingCancelService } from "@calcom/features/bookings/lib/handleCancelBooking";
import { bindModuleToClassOnToken, createModule } from "@calcom/lib/di/di";
import { DI_TOKENS } from "@calcom/lib/di/tokens";
import { moduleLoader as prismaModuleLoader } from "@calcom/prisma/prisma.module";
const thisModule = createModule();
const token = DI_TOKENS.BOOKING_CANCEL_SERVICE;
const moduleToken = DI_TOKENS.BOOKING_CANCEL_SERVICE_MODULE;
const loadModule = bindModuleToClassOnToken({
module: thisModule,
moduleToken,
token,
classs: BookingCancelService,
depsMap: {
prismaClient: prismaModuleLoader,
},
});
export const moduleLoader = {
token,
loadModule,
};
export type { BookingCancelService };
@@ -1,6 +1,7 @@
import { InstantBookingCreateService } from "@calcom/features/bookings/lib/service/InstantBookingCreateService";
import { createModule, bindModuleToClassOnToken } from "@calcom/features/di/di";
import { DI_TOKENS } from "@calcom/features/di/tokens";
import { InstantBookingCreateService } from "@calcom/features/instant-meeting/handleInstantMeeting";
import { moduleLoader as prismaModuleLoader } from "@calcom/prisma/prisma.module";
export const instantBookingCreateServiceModule = createModule();
const token = DI_TOKENS.INSTANT_BOOKING_CREATE_SERVICE;
@@ -10,7 +11,10 @@ const loadModule = bindModuleToClassOnToken({
moduleToken,
token,
classs: InstantBookingCreateService,
depsMap: {},
depsMap: {
// TODO: In a followup PR, we aim to remove prisma dependency and instead inject the repositories as dependencies.
prismaClient: prismaModuleLoader,
},
});
export type { InstantBookingCreateService };
@@ -1,4 +1,5 @@
import { RecurringBookingService } from "@calcom/features/bookings/lib/handleNewRecurringBooking";
import { RecurringBookingService } from "@calcom/features/bookings/lib/service/RecurringBookingService";
import { createModule, bindModuleToClassOnToken } from "@calcom/features/di/di";
import { DI_TOKENS } from "@calcom/features/di/tokens";
@@ -1,14 +1,11 @@
import { RegularBookingService } from "@calcom/features/bookings/lib/handleNewBooking";
import { RegularBookingService } from "@calcom/features/bookings/lib/service/RegularBookingService";
import { bindModuleToClassOnToken, createModule } from "@calcom/features/di/di";
import { moduleLoader as attributeRepositoryModuleLoader } from "@calcom/features/di/modules/Attribute";
import { moduleLoader as bookingRepositoryModuleLoader } from "@calcom/features/di/modules/Booking";
import { moduleLoader as cacheModuleLoader } from "@calcom/features/di/modules/Cache";
import { moduleLoader as checkBookingAndDurationLimitsModuleLoader } from "@calcom/features/di/modules/CheckBookingAndDurationLimits";
import { moduleLoader as checkBookingLimitsModuleLoader } from "@calcom/features/di/modules/CheckBookingLimits";
import { moduleLoader as featuresRepositoryModuleLoader } from "@calcom/features/di/modules/Features";
import { moduleLoader as hostRepositoryModuleLoader } from "@calcom/features/di/modules/Host";
import { moduleLoader as luckyUserServiceModuleLoader } from "@calcom/features/di/modules/LuckyUser";
import { moduleLoader as oooRepositoryModuleLoader } from "@calcom/features/di/modules/Ooo";
import { moduleLoader as userRepositoryModuleLoader } from "@calcom/features/di/modules/User";
import { DI_TOKENS } from "@calcom/features/di/tokens";
import { moduleLoader as prismaModuleLoader } from "@calcom/prisma/prisma.module";
@@ -22,17 +19,13 @@ const loadModule = bindModuleToClassOnToken({
token,
classs: RegularBookingService,
depsMap: {
// TODO: In a followup PR, we aim to remove prisma dependency and instead inject the repositories as dependencies.
prismaClient: prismaModuleLoader,
cacheService: cacheModuleLoader,
checkBookingAndDurationLimitsService: checkBookingAndDurationLimitsModuleLoader,
prismaClient: prismaModuleLoader,
bookingRepository: bookingRepositoryModuleLoader,
featuresRepository: featuresRepositoryModuleLoader,
checkBookingLimitsService: checkBookingLimitsModuleLoader,
luckyUserService: luckyUserServiceModuleLoader,
hostRepository: hostRepositoryModuleLoader,
oooRepository: oooRepositoryModuleLoader,
userRepository: userRepositoryModuleLoader,
attributeRepository: attributeRepositoryModuleLoader,
},
});
+2
View File
@@ -5,4 +5,6 @@ export const BOOKING_DI_TOKENS = {
RECURRING_BOOKING_SERVICE_MODULE: Symbol("RecurringBookingServiceModule"),
INSTANT_BOOKING_CREATE_SERVICE: Symbol("InstantBookingCreateService"),
INSTANT_BOOKING_CREATE_SERVICE_MODULE: Symbol("InstantBookingCreateServiceModule"),
BOOKING_CANCEL_SERVICE: Symbol("BookingCancelService"),
BOOKING_CANCEL_SERVICE_MODULE: Symbol("BookingCancelServiceModule"),
};
@@ -6,8 +6,8 @@ import { getRoutedTeamMemberIdsFromSearchParams } from "@calcom/lib/bookings/get
import { parseRecurringDates } from "@calcom/lib/parse-dates";
import type { RoutingFormSearchParams } from "@calcom/platform-types";
import type { BookerEvent, BookingCreateBody, RecurringBookingCreateBody } from "../../types";
import type { Tracking } from "../handleNewBooking/types";
import type { BookerEvent, BookingCreateBody, RecurringBookingCreateBody } from "../../../types";
import type { Tracking } from "../../handleNewBooking/types";
export type BookingOptions = {
values: Record<string, unknown>;
+35
View File
@@ -0,0 +1,35 @@
/**
* Domain types for Booking Cancellation Service
* These types are framework-agnostic and contain only the data required for booking cancellation operations
*/
import type { z } from "zod";
import type { bookingCancelInput } from "@calcom/prisma/zod-utils";
/**
* The booking data required for cancellation
*/
export type CancelRegularBookingData = z.infer<typeof bookingCancelInput>;
/**
* Additional metadata for booking cancellation, typically used for platform integrations
*/
export type CancelBookingMeta = {
userId?: number;
platformClientId?: string;
platformRescheduleUrl?: string;
platformCancelUrl?: string;
platformBookingUrl?: string;
arePlatformEmailsEnabled?: boolean;
};
/**
* The response returned after attempting to cancel a booking
*/
export type HandleCancelBookingResponse = {
success: boolean;
message: string;
onlyRemovedAttendee: boolean;
bookingId: number;
bookingUid: string;
};
@@ -0,0 +1,10 @@
import { z } from "zod";
export const instantMeetingSubscriptionSchema = z.object({
endpoint: z.string(),
expirationTime: z.any().optional(),
keys: z.object({
auth: z.string(),
p256dh: z.string(),
}),
});
+5 -6
View File
@@ -7,9 +7,8 @@ import type getBookingDataSchemaForApi from "@calcom/features/bookings/lib/getBo
import type { SchedulingType } from "@calcom/prisma/enums";
import type { ExtendedBookingCreateBody } from "../bookingCreateBodySchema";
import type { RegularBookingService } from "../handleNewBooking";
import type { RegularBookingService } from "../service/RegularBookingService";
export type { BookingCreateBody } from "../bookingCreateBodySchema";
export type BookingDataSchemaGetter = typeof getBookingDataSchema | typeof getBookingDataSchemaForApi;
export type CreateRegularBookingData = ExtendedBookingCreateBody;
@@ -44,14 +43,14 @@ export type BookingHandlerInput = {
bookingData: CreateRegularBookingData;
} & CreateBookingMeta;
// TODO: In a followup PR, we working on defining the type here itself instead of inferring it.
export type RegularBookingCreateResult = Awaited<ReturnType<RegularBookingService["createBooking"]>>;
export type InstantBookingCreateResult = {
message: string;
message: "Success";
meetingTokenId: number;
bookingId: number;
bookingUid: string;
expires: Date;
userId: number | null;
};
// TODO: In a followup PR, we working on defining the type here itself instead of inferring it.
export type RegularBookingCreateResult = Awaited<ReturnType<RegularBookingService["createBooking"]>>;
@@ -5,10 +5,13 @@ import { FAKE_DAILY_CREDENTIAL } from "@calcom/app-store/dailyvideo/lib/VideoApi
import { eventTypeMetaDataSchemaWithTypedApps } from "@calcom/app-store/zod-utils";
import dayjs from "@calcom/dayjs";
import { sendCancelledEmailsAndSMS } from "@calcom/emails";
import EventManager from "@calcom/features/bookings/lib/EventManager";
import { getCalEventResponses } from "@calcom/features/bookings/lib/getCalEventResponses";
import { processNoShowFeeOnCancellation } from "@calcom/features/bookings/lib/payment/processNoShowFeeOnCancellation";
import { processPaymentRefund } from "@calcom/features/bookings/lib/payment/processPaymentRefund";
import { getBookerBaseUrl } from "@calcom/features/ee/organizations/lib/getBookerUrlServer";
import { sendCancelledReminders } from "@calcom/features/ee/workflows/lib/reminders/reminderScheduler";
import { WorkflowRepository } from "@calcom/features/ee/workflows/repositories/WorkflowRepository";
import type { GetSubscriberOptions } from "@calcom/features/webhooks/lib/getWebhooks";
import getWebhooks from "@calcom/features/webhooks/lib/getWebhooks";
import {
@@ -17,8 +20,6 @@ import {
} from "@calcom/features/webhooks/lib/scheduleTrigger";
import sendPayload from "@calcom/features/webhooks/lib/sendOrSchedulePayload";
import type { EventTypeInfo } from "@calcom/features/webhooks/lib/sendPayload";
import EventManager from "@calcom/features/bookings/lib/EventManager";
import { getBookerBaseUrl } from "@calcom/features/ee/organizations/lib/getBookerUrlServer";
import getOrgIdFromMemberOrTeamId from "@calcom/lib/getOrgIdFromMemberOrTeamId";
import { getTeamIdFromEventType } from "@calcom/lib/getTeamIdFromEventType";
import { HttpError } from "@calcom/lib/http-error";
@@ -27,10 +28,10 @@ import { parseRecurringEvent } from "@calcom/lib/isRecurringEvent";
import logger from "@calcom/lib/logger";
import { safeStringify } from "@calcom/lib/safeStringify";
import { getTranslation } from "@calcom/lib/server/i18n";
import { WorkflowRepository } from "@calcom/features/ee/workflows/repositories/WorkflowRepository";
import { getTimeFormatStringFromUserTimeFormat } from "@calcom/lib/timeFormat";
// TODO: Prisma import would be used from DI in a followup PR when we remove `handler` export
import prisma from "@calcom/prisma";
import type { Prisma, WorkflowReminder } from "@calcom/prisma/client";
import type { Prisma, PrismaClient, WorkflowReminder } from "@calcom/prisma/client";
import type { WebhookTriggerEvents } from "@calcom/prisma/enums";
import { BookingStatus } from "@calcom/prisma/enums";
import { bookingMetadataSchema, bookingCancelInput } from "@calcom/prisma/zod-utils";
@@ -38,10 +39,16 @@ import type { EventTypeMetadata } from "@calcom/prisma/zod-utils";
import { getAllWorkflowsFromEventType } from "@calcom/trpc/server/routers/viewer/workflows/util";
import type { CalendarEvent } from "@calcom/types/Calendar";
import type {
CancelRegularBookingData,
CancelBookingMeta,
HandleCancelBookingResponse,
} from "./dto/BookingCancel";
import { getAllCredentialsIncludeServiceAccountKey } from "./getAllCredentialsForUsersOnEvent/getAllCredentials";
import { getBookingToDelete } from "./getBookingToDelete";
import { handleInternalNote } from "./handleInternalNote";
import cancelAttendeeSeat from "./handleSeats/cancel/cancelAttendeeSeat";
import type { IBookingCancelService } from "./interfaces/IBookingCancelService";
const log = logger.getSubLogger({ prefix: ["handleCancelBooking"] });
@@ -60,14 +67,6 @@ export type CancelBookingInput = {
bookingData: z.infer<typeof bookingCancelInput>;
} & PlatformParams;
export type HandleCancelBookingResponse = {
success: boolean;
message: string;
onlyRemovedAttendee: boolean;
bookingId: number;
bookingUid: string;
};
async function handler(input: CancelBookingInput) {
const body = input.bookingData;
const {
@@ -118,7 +117,12 @@ async function handler(input: CancelBookingInput) {
const isCancellationUserHost =
bookingToDelete.userId == userId || bookingToDelete.user.email === cancelledBy;
if (!platformClientId && !cancellationReason?.trim() && isCancellationUserHost && !skipCancellationReasonValidation) {
if (
!platformClientId &&
!cancellationReason?.trim() &&
isCancellationUserHost &&
!skipCancellationReasonValidation
) {
throw new HttpError({
statusCode: 400,
message: "Cancellation reason is required when you are the host",
@@ -588,4 +592,24 @@ async function handler(input: CancelBookingInput) {
} satisfies HandleCancelBookingResponse;
}
type BookingCancelServiceDependencies = {
prismaClient: PrismaClient;
};
/**
* Takes care of cancelling bookings. This includes regular bookings, recurring bookings, seated bookings, etc.
* Handles both individual booking cancellations and bulk cancellations for recurring events.
*/
export class BookingCancelService implements IBookingCancelService {
constructor(private readonly deps: BookingCancelServiceDependencies) {}
async cancelBooking(input: { bookingData: CancelRegularBookingData; bookingMeta?: CancelBookingMeta }) {
const cancelBookingInput: CancelBookingInput = {
bookingData: input.bookingData,
...(input.bookingMeta || {}),
};
// TODO: Deps to be passed to it later when we stop exporting handler
return handler(cancelBookingInput);
}
}
export default handler;
@@ -61,7 +61,9 @@ const checkActiveBookingsLimit = async ({
if (bookingsCount >= maxActiveBookingsPerBooker) {
log.warn(`Maximum booking limit reached for ${bookerEmail} for event type ${eventTypeId}`);
throw new ErrorWithCode(ErrorCode.BookerLimitExceeded, ErrorCode.BookerLimitExceeded);
throw new ErrorWithCode(ErrorCode.BookerLimitExceeded, ErrorCode.BookerLimitExceeded, {
count: maxActiveBookingsPerBooker,
});
}
};
@@ -2,7 +2,7 @@ import { describe, it, expect, vi } from "vitest";
import { BookingStatus, CreationSource } from "@calcom/prisma/enums";
import { buildDryRunBooking } from "../../handleNewBooking";
import { buildDryRunBooking } from "../../service/RegularBookingService";
vi.mock("@calcom/prisma", () => ({
default: {}, // empty object as default export
@@ -3,7 +3,7 @@ import { vi, describe, it, expect, beforeEach } from "vitest";
import { SchedulingType } from "@calcom/prisma/enums";
import { buildEventForTeamEventType } from "../../handleNewBooking";
import { buildEventForTeamEventType } from "../../service/RegularBookingService";
vi.mock("@calcom/lib/server/i18n", () => ({
getTranslation: vi.fn().mockResolvedValue("translated"),
@@ -22,12 +22,12 @@ const withDestinationCalendarSpy = vi.fn().mockReturnThis();
vi.mock("@calcom/features/CalendarEventBuilder", () => {
return {
CalendarEventBuilder: {
fromEvent: vi.fn().mockImplementation((evt) => ({
fromEvent: vi.fn().mockImplementation((_evt) => ({
withDestinationCalendar: withDestinationCalendarSpy,
withTeam: withTeamSpy,
build: vi.fn().mockImplementation(() => ({
destinationCalendar: [],
team: {}, // <- you won’t use this result anyway
team: {}, // <- you won't use this result anyway
})),
})),
},
@@ -72,7 +72,7 @@ describe("buildEventForTeamEventType", () => {
});
it("filters out the organizer", async () => {
const result = await buildEventForTeamEventType({
await buildEventForTeamEventType({
existingEvent: {},
users: [baseUser({ email: "organizer@example.com" })],
organizerUser: { email: "organizer@example.com" },
@@ -80,7 +80,7 @@ describe("buildEventForTeamEventType", () => {
});
const teamArgs = withTeamSpy.mock.calls[0][0];
const memberEmails = teamArgs.members.map((m: any) => m.email);
const memberEmails = teamArgs.members.map((m: { email: string }) => m.email);
expect(memberEmails).not.toContain("organizer@example.com");
});
@@ -123,7 +123,7 @@ describe("buildEventForTeamEventType", () => {
});
const teamArgs = withTeamSpy.mock.calls[0][0];
const memberEmails = teamArgs.members.map((m: any) => m.email);
const memberEmails = teamArgs.members.map((m: { email: string }) => m.email);
expect(memberEmails).toContain("fixed@example.com");
expect(memberEmails).toContain("nonfixed@example.com");
@@ -142,7 +142,7 @@ describe("buildEventForTeamEventType", () => {
});
const teamArgs = withTeamSpy.mock.calls[0][0];
const memberEmails = teamArgs.members.map((m: any) => m.email);
const memberEmails = teamArgs.members.map((m: { email: string }) => m.email);
expect(memberEmails).toContain("fixed@example.com");
expect(memberEmails).toContain("nonfixed1@example.com");
Loaded 100 of 135 files, more files were not shown because too many files have changed in this diff. Show more