Skip to content

Instantly share code, notes, and snippets.

@ikouchiha47
Last active December 22, 2025 09:16
Show Gist options
  • Select an option

  • Save ikouchiha47/1ac41e238ba61738f788420f3903c003 to your computer and use it in GitHub Desktop.

Select an option

Save ikouchiha47/1ac41e238ba61738f788420f3903c003 to your computer and use it in GitHub Desktop.
Ride Hailer

DAW Problem Statement – Multi-Region Ride-Hailing Platform

Context

You are tasked with designing a multi-tenant, multi-region ride-hailing system (think Uber/Ola).

The platform must handle driver–rider matching, dynamic surge pricing, trip lifecycle management, and payments at scale with strict latency requirements.

Functional Requirements:

  • Real-time driver location ingestion: each online driver sends 1–2 updates per second
  • Ride request flow: pickup, destination, tier, payment method
  • Dispatch/Matching: assign drivers within <1s p95; reassign on decline/timeout
  • Dynamic surge pricing: per geo-cell, based on supply–demand
  • Trip lifecycle: start, pause, end, fare calculation, receipts
  • Payments orchestration: integrate with external PSPs, retries, reconciliation
  • Notifications: push/SMS for key ride states
  • Admin/ops tooling: feature flags, kill-switches, observability

Non-Functional Requirements:

  • Latency SLOs:
    • Dispatch decision: p95 ≤ 1s
    • End-to-end request→acceptance: p95 ≤ 3s
    • Availability: 99.95% for dispatch APIs
  • Scale assumptions:
    • 300k concurrent drivers globally
    • 60k ride requests/minute peak
    • 500k location updates/second globally
  • Multi-region: region-local writes, failover handling, no cross-region sync on hot path
  • Compliance: PCI, PII encryption, GDPR/DPDP

Constraints:

  • Use Kafka/Pulsar for events, Redis for hot KV, Postgres/CockroachDB for transactions
  • Clients are mobile with flaky networks; all APIs must be idempotent
  • Payments through external PSPs; their latency is outside your control

Deliverables

HLD: components, data flow, scaling, storage, trade-offs LLD: deep dive into either Dispatch/Matching, Surge Pricing, or Trip Service APIs & Events: request/response schemas and event topics Data Model: ERD for chosen component Resilience plan: retries, backpressure, circuit breakers, failure modes

Multi-Region Ride-Hailing Platform

Designing a multi-tenant, multi-region ride-hailing system.

The platform must handle driver–rider matching, dynamic surge pricing, trip lifecycle management, and payments at scale with strict latency requirements.

Actors

  • Customer
  • Driver

Workflows

Customers

1. Customer Opens the App

  • Trigger: Customer opens the app
  • Actions:
    • Check and Wait for location permissions
    • Check if service is available in region
    • Check if payment pending.
    • Get a list of nearby locations upto 5km, from user
    • Show a list of available vehicles, maybe events, or poi nearby
  • Pre-condition:
    • Authenticated
    • Location permissions enabled
    • Trips never cross regions at runtime
  • Success:
  • Failure:

2. Customer Intends to Book Ride

  • Trigger: Searches and selects a location to ride to
  • Action:
    • Check if the target location is within geo-boundaries
    • Check for Vehicle types that can reach.
    • System fetches current surge multiplier for pickup geo-cell
    • An estimated price can be calculated (base + distance + surge) (the first part can be cached as well)
  • Success:
    • Customer sees rides available in the area
    • Customer sees estimated prices of rides, and approximate duration (can be from google or internal tracking)
    • Additional metadata like toll-paid or paid separately etc can be shown.
  • Failure:
    • Customer sees appropriate message, ride not available
    • Price estimation failed, but booking can still proceed.

3. Customer Sends a Booking Request

  • Trigger: User selects a ride type and clicks "Book"
  • Action:
    • Create a Booking Request, status = pending, radius = 5km
    • Publish to Q
    • Set a TTL of 15s
  • Success:
    • Driver accepts the booking, status = 'assigned'
    • Driver can also cancel booking after accepting status = 'cancelled' (in which case, new booking request)
  • Failure:
    • Retry 2x with increasing radius.
    • REQUEST_EXPIRED, REQUEST_ABORTED, REQUEST_RETRY

4. Real Time ETAs

  • Trigger: App polls every 5s the driver's Location, and Booking status (via booking handshake)
  • Pre-condition:
    • Driver - Booking - User relationship should exsists amd status = assigned
  • Action:
    • System tracks driver location in context of the Booking

5. Customer Payments

  • Trigger: Trip ends (triggered by driver), Booking status = completed
  • Action:
    • Booking status changes to completed
    • Calculate actual amount for ride
    • Create Payment Request for the Booking (Payment.status = pending)
    • Redirect to appropriate PSP page, wait for completion
    • En-Q a recon process as a delayed job (TTL 5 minute)
    • On PSP Callback, Enqueue to update the Payment status and timestamps
  • Success:
    • Update Booking.status = paid
  • Failure:

Driver

1. Driver toggles duty status

  • Trigger: Driver taps Go Online / Go Offline
  • Pre-condition:
    • Driver has registered and KYC verified
  • Actions:
    • Update Driver.status = online/offline
    • If online: start sending location pings (batch them on the client side to reduce ping rate)
    • If offline: stop location stream, clear from matching pool

2. Driver receives & accepts ride

  • Trigger: New BookingRequest assigned to driver
  • Actiond:
    • Push notification sent (booking details)
    • Driver has 10s to accept
      On accept:
      • Booking.status = accepted
      • Driver.status = on_trip
      • Start navigation
      • Clear other offers
    • On decline/timeout:
      • Put the driver id in offered set (to select new driver)

3. Driver views hotspot map

  • Trigger: Driver opens "Hotspots" tab
  • Data: Aggregated DemandHeatMap (geo-cells with high booking rate)
  • Source: Stream processor (Kafka -> Flink -> Redis Hash)
  • Update freq: Every 2 min
    Consistency: Eventual

Toolings

  • Observability via metric collection, and alerting policies
  • Logs and Request Tracing to debug problems better
    • Some logging libraries come with PII handling mechanisms, masking emails/cards/phone etc.
  • Feature flags:
    • Toggle entire modules, like chat (ui + apis)
    • Toggle business level features, like on-off surge pricing
    • Toggle to A/B test exsisting flows
  • Localisation:
    • Because its multi-region english may not always be the prefered choice.
    • Currencies can be shown better
    • Cultural context can be helpful in desiging surge pricing
  • Policy Engines:
    • Different Regions can be different pricing policies, per-km, surge caps, minimum wage etc.
    • Specific regions can benefit from static surge prices
    • Systems need periodic maintainance, like certificate renewal, domain renewal, key rotation etc.
    • Logging library can use PII poilices per region.
    • Data Archival policies for different kinds of data.
    • KYC Archival policies
    • Data Replication policies
    • Rate Limiting

Security

  • Databases, Access Keys must be encrypted
  • Keys must be rotated
  • APIs should be protected via WAF
  • Rate Limits should be present on most apis.
  • TLS certificates should never expire, All communications over TLS/WSS

Failure Points

  • Driver device connection issues
  • Redis/Database/Store Crashes
  • PSP / External Providers outage
  • Service Failure Cascade
  • Internet outage
  • Flaky Networks (tuning tcp params, reduce data transfer)
  • Bad Deployments

Entities

  • Customer
  • Driver
  • Vehicle
  • Pin
  • Location
  • Offer
  • Fare
  • Booking
  • Pricing
  • Payment
  • History
  • DemandHeatMap
  • Session
  • UserProfile
  • Device
  • Wallet
  • Policy

Relationships

Trip

belongs_to :booking
belongs_to :rider (User)
belongs_to :driver (User)
belongs_to :fare
belongs_to :payment

has_many :state_transitions
has_many :locations
has_many :events

Booking

belongs_to :rider (User)

has_one :trip
has_many :offers

User (Customer/Driver)

has_many :trips_as_rider (Trip)
has_many :trips_as_driver (Trip)
has_many :bookings

Offer

belongs_to :booking
belongs_to :driver (User)

TripStateTransition

belongs_to :trip
belongs_to :actor (User)

TripLocation

belongs_to :trip

TripEvent

belongs_to :trip

Fare

has_one :trip
belongs_to :booking

Payment

has_one :trip
belongs_to :booking
belongs_to :rider (User)

Vehicle

belongs_to :driver (User)

has_many :trips
erDiagram
    Trip ||--|| Booking : "belongs_to"
    Trip ||--|| User : "belongs_to (rider)"
    Trip ||--|| User : "belongs_to (driver)"
    Trip ||--o| Fare : "belongs_to"
    Trip ||--o| Payment : "belongs_to"
    Trip ||--o| Vehicle : "belongs_to"
    Trip ||--o{ TripStateTransition : "has_many"
    Trip ||--o{ TripLocation : "has_many"
    Trip ||--o{ TripEvent : "has_many"
    
    Booking ||--|| User : "belongs_to (rider)"
    Booking ||--o| Trip : "has_one"
    Booking ||--o{ Offer : "has_many"
    
    Offer ||--|| Booking : "belongs_to"
    Offer ||--|| User : "belongs_to (driver)"
    
    User ||--o{ Trip : "has_many (as rider)"
    User ||--o{ Trip : "has_many (as driver)"
    User ||--o{ Booking : "has_many"
    User ||--o{ Offer : "has_many"
    User ||--o{ Vehicle : "has_many"
    
    TripStateTransition ||--|| Trip : "belongs_to"
    TripStateTransition ||--o| User : "belongs_to (actor)"
    
    TripLocation ||--|| Trip : "belongs_to"
    
    TripEvent ||--|| Trip : "belongs_to"
    
    Fare ||--|| Booking : "belongs_to"
    Fare ||--o| Trip : "has_one"
    
    Payment ||--|| Booking : "belongs_to"
    Payment ||--|| User : "belongs_to (rider)"
    Payment ||--o| Trip : "has_one"
    
    Vehicle ||--|| User : "belongs_to (driver)"
    Vehicle ||--o{ Trip : "has_many"

    Trip {
        uuid trip_id PK
        varchar booking_id UK "FK to Booking"
        varchar rider_id "FK to User"
        varchar driver_id "FK to User"
        varchar vehicle_id "FK to Vehicle"
        decimal pickup_lat
        decimal pickup_lng
        text pickup_address
        decimal dropoff_lat
        decimal dropoff_lng
        text dropoff_address
        varchar vehicle_type
        varchar city_id
        varchar status "enum"
        timestamptz assigned_at
        timestamptz started_at
        timestamptz paused_at
        timestamptz resumed_at
        timestamptz ended_at
        decimal distance_km
        int duration_sec
        varchar fare_id "FK to Fare"
        varchar payment_id "FK to Payment"
        varchar cancelled_by "enum"
        text cancellation_reason
        decimal cancellation_fee
        varchar otp
        timestamptz created_at
        timestamptz updated_at
    }

    Booking {
        varchar booking_id PK
        varchar rider_id "FK to User"
        decimal pickup_lat
        decimal pickup_lng
        text pickup_address
        decimal destination_lat
        decimal destination_lng
        text destination_address
        varchar vehicle_type "enum"
        varchar city_id
        varchar status "enum"
        decimal estimated_fare
        decimal surge_multiplier
        varchar payment_method
        timestamptz created_at
        timestamptz updated_at
    }

    User {
        varchar user_id PK
        varchar name
        varchar email
        varchar phone
        varchar type "RIDER, DRIVER"
        decimal rating
        int total_trips
        varchar city_id
        varchar status "enum"
        timestamptz created_at
    }

    Offer {
        varchar offer_id PK
        varchar booking_id "FK to Booking"
        varchar driver_id "FK to User"
        varchar status "enum"
        int distance_m
        int eta_sec
        int rank
        decimal score
        timestamptz created_at
        timestamptz expires_at
    }

    TripStateTransition {
        bigint id PK
        uuid trip_id "FK to Trip"
        varchar from_status
        varchar to_status
        varchar changed_by "enum"
        varchar actor_id "FK to User"
        text reason
        jsonb metadata
        timestamptz created_at
    }

    TripLocation {
        bigint id PK
        uuid trip_id "FK to Trip"
        decimal lat
        decimal lng
        int accuracy_m
        decimal speed_kmh
        int bearing
        timestamptz recorded_at
        timestamptz received_at
    }

    TripEvent {
        bigint id PK
        uuid trip_id "FK to Trip"
        varchar booking_id
        varchar event_type
        jsonb event_data
        int sequence_number
        timestamptz created_at
    }

    Fare {
        varchar fare_id PK
        varchar booking_id "FK to Booking"
        decimal base_fare
        decimal distance_fare
        decimal time_fare
        decimal surge_multiplier
        decimal subtotal
        decimal tax
        decimal total
        varchar currency
        timestamptz created_at
    }

    Payment {
        varchar payment_id PK
        varchar booking_id "FK to Booking"
        varchar rider_id "FK to User"
        decimal amount
        varchar currency
        varchar status "enum"
        varchar payment_method
        varchar psp_transaction_id
        timestamptz created_at
        timestamptz completed_at
    }

    Vehicle {
        varchar vehicle_id PK
        varchar driver_id "FK to User"
        varchar vehicle_type "enum"
        varchar make
        varchar model
        varchar plate_number
        varchar color
        int year
        varchar status "enum"
        timestamptz created_at
    }
Loading

P.S. This is a generated diagram, from the blobs of text below

Scaling, Consistency and Availability

  • Scale assumptions:
    • Each online driver sends 1–2 updates per second
    • 300k concurrent drivers globally
    • 60k ride requests/minute peak
    • 500k location updates/second globally
    • Dispatch decision: p95 ≤ 1s
    • End-to-end request->acceptance: p95 ≤ 3s

End-to-end request->acceptance: p95 ≤ 3s (hmmm, not sure about this, depends on the driver, human involved, incremental search and retry upto 1 minute) Average: 20s

Ride Requests:

  • 60k rpm => 1k rps * 20s = 20k Concurrent Users Booking

Location Updates: Assuming most of this is driver pings, user pings are not that useful right now.

  • 300K Concurrent Drivers * 1.5 UPS = 450K UPS
  • Ping Data: (id, lat, long, speed, sig, acc, unix_ts) 100B (with tcp headers)
  • 500K UPS * 100B = 500MBps (Bandwith req)

Dispatch Decision:

  • Disptach involves sending req
  • Writing a booking request to db
  • Enqueing to Q
  • Consume from Q
  • Driver Matching
  • Offer Creation
  • Push Notification

Timings:

  • Kafka tail worst case 200ms p95 (from blogs) (i3gen,large 16Gb ram, 2vcpu, 25Gbps, acks=all, replication >= 3)
    • Redpanda can reduce this by factor of 3.
  • Redis (single instance, 8G RAM) 10ms. 100000 requests completed in 0.50 seconds 50 parallel clients 3 bytes payload
  • Single instance supported 400k ops/s, 2-4 redis instances per city, with replicas.
  • Redis read and write, 10ms (combined)
  • API Roundtrip: 100ms
  • Database Write: 50ms-100ms, Dynamodb Ensures 20ms p95.

200 + 50 + 100 + 100 = 450ms (can be lower because of multi-region)

Push Request, can affect the tail latency, 1s I am assuming as worst case.

Consistency, Availability and Storage

  • Authentication and Sessions: HA and Strong Consistency
  • Booking: Strong Consistency
  • Locations: HA, EC
  • Payment: HA, SC
  • Surge Pricing: EC

Query Patterns:

  • CanBook(user)
  • RidePossible(srcLoc, dstLoc)
  • GetRides(srcLoc, dstLoc)
  • GetFareEstimates(srcLoc, dstLoc)
  • SurgeApplied(srcLoc, dstLoc)
  • InitBooking(user, srcLoc, dstLoc, vehicleTypes, radius, shownEstimate, timeWithZone)
  • GetMatchingDrivers(loc, radius)
  • AcceptBooking(booking, driver)
  • Decline/CancelBooking(booking, driver)
  • UpdateBookingStatus(bookingID, status)
  • CheckBookingStatus(bookingID)
  • InitiatePayment(bookingID)
  • UpdatePaymentStatus(bookingID, pricingID?, status)
  • GetBookings(driverID/userID, cursor)
  • GetActiveBookings(userID/driverID)
  • UpdateOfferStatus(driverID, offerID/bookingID)
  • BroadCastOffers(bookingID)
  • GetOffers(driverID, srcLoc)
  • UnsubcribeBroadCast(bookingID)
  • CanAcceptBookings(driverID)
  • UserProfile(userID/driverID)
  • UpdateLocation(driverID, bookingID, []coorD)

Services

  • Identity Service (Sessions + User) Initially can be a shared service. (User = Customer + Driver)
    • Responsibilities:
      • Authn & Authz
      • Banned or Blocked
      • KYC status
      • Assigned PIN
      • User Profile (Gender, Talkativity and stuff)
    • Traffic:
      • AuthN+Z: Read heavy, C > A
      • User Status: Ready heavy, A > C
    • Verdict:
      • Centralize and Cache across A-Z

Identity and UserProfile can be deployed separately, because CAP requirements are Different

  • Policy Service:

    • Responsibilities:
      • Surge Rules
      • City Rules
      • Cross city Rules
      • Cancellation penalities (Fairness meter)
      • Matchmaking feature flags
      • PII policies, App update policies
      • Vehicle Eligibility
      • Scaling Policies
    • Traffic:
      • Mostly ready heavy, C > A
      • Changes has to nearly Strong Consistency depending on what database fields it touches
  • Pricing Service

    • Responsibilities:
      • Fare Estimation
      • Surge Pricing
      • Final Fare computation
    • Traffic Patterns:
      • Fare Estimation: A > C
      • Final Fare: C > A
  • Booking Service:

    • Responsibilities:
      • CreateBooking Record 🤯
      • Idempotency Handling
      • Booking State Machine
      • SMS based bookings
    • Traffic Patterns:
      • CreateBooking, Complete, Accept, Cancel, Decline WriteHeavy
      • GetBooking, Low Read
      • GetActiveBookings, Should be lowest, might indicate production issues
      • BookingHistory: Consitent, Read Skewed
      • Overall both C and A are needed, but C > A
      • Allow service degradation with proper cutoffs
  • Payments Service

    • Responsibilities:
      • Payment intents
      • PSP integration
      • Idempotency Handling
      • Payments History (internal)
    • Traffic Patterns:
      • Proportional to Successfull Bookings, (assuming 90% Successfull bookings)
      • Fairly Write heavy
      • Payment Intent, C > A (Strong)
      • Durable + Replayability (+Idempotent)
      • Confirmation: Eventual Consistent (with Reconciliation) + High Correctness
  • Match Making Service

    • Responsibilities:
      • Nearby Driver Search
      • Ranking
      • Offer Broadcast
      • Offer listing
      • Maps (Mapping can be moved to a different service)
      • Timeouts and Retry
    • Traffic Patterns:
      • Search drivers, Offer listing (read heavy)
      • Broadcasting (write heavy, blazing fast)
      • Ranking (compute cpu heavy)
      • Timeouts and Retries, write skeweed
      • A > C
      • Allow service degradation
  • Driver Supply Service:

    • Responsibilities:
      • Driver online/offline
      • Location ingestion
      • Supply snapshots
      • Hotspot generation
    • Traffic Patterns:
      • Locatoin ingestion (i/o) write heavy
      • Hotspot Generation (eventually consistency, compute heavy, ready heavy)
      • Supply snapshots (analytical)
  • Trip Service (Co-ordinator):

    • Responsibilities:
      • Accept/Decline offers
      • Driver Customer binding
      • Cancel semantics (emit events to stop broadcasting)
      • Final trip state
      • Central co-ordinator to avoid race-conditions
      • HA (Critical)
  • Notification Service

    • Responsibilities:
      • SMS
      • Push Notifications
      • Emails for invoices (if needed)
      • Most of the system is event driven
      • Idempotency Handling
    • Traffic Patterns:
      • Endpoint is both ready and write heavy, because of the Transactional Outbox
      • Should be HA, but shouldn't affect core booking and payment.
      • At most 1 gurranttee
  • Reconciliation Jobs

    • Responsibilities:
      • It would be nice to keep the ActiveBookings, ActivePayments tables separate and small, to reduce the data size. For databases, it would also mean reduce the index size as well. Recon jobs can cleanup/move these data across partitions.
      • Cleanup notifications from Outbox
      • Rebuild Locks in Memory when system Crashes
      • Payment recon workers to validate transaction status and see missed or double charges
  • Experiment Service (control plane)

    • Responsibilities:
      • Flags
      • Experiments
      • Kill switches
      • Audits
    • Reads HA - Shouldn't block, Eventually C
    • Writes: Strong C
  • Localisation Engine

Flow Diagrams

Workflows

Ride Discovery:

sequenceDiagram
    participant Rider
    participant Gateway
    participant Identity
    participant Policy
    participant Pricing
    participant Supply
    participant Maps

    Rider->>Gateway: App Launch (lat, lng)
    Gateway->>Identity: Validate session
    Identity-->>Gateway: OK

    par Parallel Reads
        Gateway->>Policy: Serviceable? city rules
        Gateway->>Supply: Nearby vehicle supply snapshot
        Gateway->>Pricing: Fare estimate request
    end

    Pricing->>Maps: Distance + ETA (approx)
    Maps-->>Pricing: distance, duration

    Pricing->>Policy: Surge multiplier
    Policy-->>Pricing: surge

    Pricing-->>Gateway: Fare ranges per vehicle type
    Supply-->>Gateway: Vehicle availability
    Policy-->>Gateway: Service flags

    Gateway-->>Rider: Launch screen payload
Loading

MatchMaking:

sequenceDiagram
    Kafka->>Matchmaking: booking.created

    Matchmaking->>Redis: drivers:cell + neighbors
    Matchmaking->>Matchmaking: rank & filter

    loop Candidates
        Matchmaking->>Redis: SET lock:driver:{id} TTL
        Matchmaking->>Redis: SET offer:{offer_id} TTL
    end

    Matchmaking->>Kafka: offers.created
Loading

Ride Booking, Customer:

sequenceDiagram
    Rider->>Gateway: POST /bookings
    Gateway->>BookingService: create booking
    BookingService->>DB: insert booking
    BookingService->>Kafka: booking.created

    Kafka->>Matchmaking: booking.created
    Matchmaking->>MatchMaking: create matches

    Kafka->>NotificationService: offers.created
    NotificationService->>Workers: enqueue push
    Workers->>DriverApp: push offer
  
Loading

Ride Booking, Driver:

sequenceDiagram
    participant Driver
    participant Gateway
    participant TripService
    participant Redis
    participant DB
    participant Kafka
    participant Matchmaking
    participant NotifService
    participant OtherDrivers

    Note over Driver,OtherDrivers: Multiple drivers have pending offers

    Driver->>Gateway: POST /trips/accept<br/>{offer_id, idempotency_key}
    Gateway->>TripService: accept(offer_id, driver_id)
    
    TripService->>Redis: HGETALL offer:{offer_id}
    Redis-->>TripService: {booking_id, status:PENDING, expires_at}
    
    alt Offer Expired
        TripService-->>Gateway: 409 OFFER_EXPIRED
        Gateway-->>Driver: Offer expired
    else Offer Valid
        TripService->>Redis: EVAL Lua Script<br/>CHECK lock:driver:{id}<br/>CHECK offer status<br/>SET offer ACCEPTED<br/>SET lock:driver:{id}
        
        alt Race Condition: Driver Already Locked
            Redis-->>TripService: {false, DRIVER_BUSY}
            TripService-->>Gateway: 409 DRIVER_BUSY
            Gateway-->>Driver: Already on another trip
        else Race Condition: Offer Already Taken
            Redis-->>TripService: {false, OFFER_TAKEN}
            TripService-->>Gateway: 410 OFFER_TAKEN
            Gateway-->>Driver: Another driver accepted
        else Success
            Redis-->>TripService: {true, OK}
            
            TripService->>DB: INSERT INTO trips<br/>(booking_id, driver_id, status:ASSIGNED)<br/>ON CONFLICT DO NOTHING
            DB-->>TripService: trip_id (or existing if duplicate)
            
            TripService->>Kafka: publish trip.created<br/>{trip_id, booking_id, driver_id}
            TripService-->>Gateway: 201 Created<br/>{trip_id, rider_info, pickup}
            Gateway-->>Driver: Trip assigned!
            
            Note over Kafka,Matchmaking: Async cleanup begins
            
            Kafka->>Matchmaking: trip.created event
            Matchmaking->>Redis: SMEMBERS offers:booking:{booking_id}
            Redis-->>Matchmaking: [off_1, off_2, off_3, off_4, off_5]
            
            loop For each other offer
                Matchmaking->>Redis: HSET offer:{other_id} status CANCELLED
                Matchmaking->>Redis: HGETALL offer:{other_id}
                Redis-->>Matchmaking: {driver_id: drv_X}
                Matchmaking->>Redis: DEL lock:driver:{drv_X}
            end
            
            Matchmaking->>Redis: DEL offers:booking:{booking_id}
            Matchmaking->>Kafka: publish offers.cancelled<br/>{booking_id, cancelled_offer_ids[]}
            
            Kafka->>NotifService: offers.cancelled event
            NotifService->>OtherDrivers: Push: "Ride filled by another driver"
            
            Note over OtherDrivers: If they try to accept now
            OtherDrivers->>Gateway: POST /trips/accept
            Gateway->>TripService: accept(offer_id)
            TripService->>Redis: HGETALL offer:{offer_id}
            Redis-->>TripService: {status: CANCELLED}
            TripService-->>Gateway: 410 OFFER_TAKEN
            Gateway-->>OtherDrivers: Already assigned
        end
    end
Loading

LLD

Dispatch/MatchMaking

Responsibilities:

  • Consume booking.created
  • Fetch candidate drivers
  • Rank & filter
  • Create offers (Fan Out)
  • Expire stale offers- Retry / backoff / radius expansion
  • Ephemeral state only

Data Store

Matchmaking is mostly stateless but stores minimal metadata for debugging and analytics.

CREATE TABLE dispatch_attempts (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  booking_id VARCHAR(64) NOT NULL,
  attempt_number INT NOT NULL,
  search_radius_m INT NOT NULL,
  candidates_found INT NOT NULL,
  offers_created INT NOT NULL,
  status VARCHAR(32) NOT NULL, 
    -- SEARCHING, OFFERS_SENT, EXPIRED, CANCELLED, ASSIGNED
  started_at TIMESTAMPTZ NOT NULL,
  completed_at TIMESTAMPTZ,
  error_code VARCHAR(64),
  
  INDEX idx_booking_id (booking_id),
  INDEX idx_started_at (started_at)
);
-- Partitoned Postgres. TimeScale would be better

CREATE TABLE hotspot_snapshots (
  id BIGSERIAL PRIMARY KEY,
  city_id VARCHAR(16) NOT NULL,
  h3_cell VARCHAR(32) NOT NULL,
  vehicle_type VARCHAR(16) NOT NULL,
  snapshot_time TIMESTAMPTZ NOT NULL,
  
  -- Metrics
  booking_count_5m INT NOT NULL,
  active_drivers INT NOT NULL,
  avg_surge DECIMAL(4,2),
  demand_score DECIMAL(4,2), -- 0.0 to 1.0
  
  INDEX idx_city_time (city_id, snapshot_time DESC),
  INDEX idx_h3_time (h3_cell, snapshot_time DESC)
);
  • Redis clusters are multi regions
  • Hot Keys are possible, City wise paritioning to reduce changes

Events

Topic: booking.created Partition Key: booking_id

Schema:

{
  "event_id": "evt_123",
  "event_type": "booking.created",
  "timestamp": "2025-12-20T10:00:00Z",
  "booking_id": "bkg_123",
  "rider_id": "usr_456",
  "city_id": "blr",
  "pickup": {
    "lat": 12.934523,
    "lng": 77.610234,
    "h3_cell": "89283082837ffff",
    "address": "Koramangala, Bangalore"
  },
  "destination": {
    "lat": 12.956789,
    "lng": 77.634567,
    "address": "Indiranagar, Bangalore"
  },
  "vehicle_type": "AUTO",
  "estimated_fare": 150,
  "surge_multiplier": 1.2,
  "payment_method": "WALLET",
  "rider_preferences": {
    "female_driver_only": false,
    "pet_friendly": false,
    "ac_required": false
  }
}

Topic: trip.created Partition Key: booking_id


Topic: booking.cancelled Partition Key: booking_id Schema:

{
  "event_id": "evt_126",
  "event_type": "booking.cancelled",
  "timestamp": "2025-12-20T10:00:15Z",
  "booking_id": "bkg_123",
  "city_id": "blr",
  "cancelled_by": "RIDER",
  "reason": "CHANGED_MIND",
  "cancellation_fee": 0
}

Topic: offer.declined Partition Key: booking_id


Topic: offers.created Partition Key: booking_id Schema:

{
  "event_id": "evt_124",
  "event_type": "offers.created",
  "timestamp": "2025-12-20T10:00:01Z",
  "booking_id": "bkg_123",
  "city_id": "blr",
  "attempt": 1,
  "search_radius_m": 1000,
  "candidates_evaluated": 23,
  "offers": [
    {
      "offer_id": "off_789",
      "driver_id": "drv_001",
      "distance_m": 500,
      "eta_sec": 120,
      "rank": 1,
      "score": 0.92,
      "expires_at": "2025-12-20T10:00:16Z"
    },
    {
      "offer_id": "off_790",
      "driver_id": "drv_002",
      "distance_m": 800,
      "eta_sec": 180,
      "rank": 2,
      "score": 0.87,
      "expires_at": "2025-12-20T10:00:16Z"
    }
  ]
}

Topic: offers.cancelled Partition Key: booking_id Schema:

{
  "event_id": "evt_128",
  "event_type": "offers.cancelled",
  "timestamp": "2025-12-20T10:00:12Z",
  "booking_id": "bkg_123",
  "city_id": "blr",
  "reason": "TRIP_ASSIGNED | BOOKING_CANCELLED | EXPIRED",
  "assigned_driver_id": "drv_001", // if reason = TRIP_ASSIGNED
  "cancelled_offers": [
    {
      "offer_id": "off_790",
      "driver_id": "drv_002",
      "status_before": "PENDING"
    },
    {
      "offer_id": "off_791",
      "driver_id": "drv_003",
      "status_before": "PENDING"
    }
  ]
}

Topic: dispatch.retry_scheduled Partition Key: booking_id Schema:

{
  "event_id": "evt_130",
  "event_type": "dispatch.retry_scheduled",
  "timestamp": "2025-12-20T10:00:20Z",
  "booking_id": "bkg_123",
  "city_id": "blr",
  "attempt": 2,
  "new_radius_m": 3000,
  "retry_after_ms": 5000,
  "reason": "ALL_OFFERS_EXPIRED | ALL_OFFERS_DECLINED"
}

Partition Key, booking_id will be hashed, to choose one of the partitions.

  • Having a booking_id as partition allows ordered events for a booking
  • Having a city_id allows to prevent hotspots
  • For reconstruction the Postgres outbox snapshots table dispatch_attempts can be used, for the ordering
  • Given the traffic we need to benchmark to see, if pgpool would handle the traffic, or given kafka as a durable store Make database writes Async.
  • Another options is to only use the Append only Log, or an LSM tree backed database, like rocksdb which are better at handling writes at the cost of compaction.

Caches

Geo-spatial index using H3 cells, Updatd by Driver Supply Service

Key: drivers:h3:{city_id}:{h3_cell}

Type: ZSET
Members: driver_id
Score: last_seen_timestamp_ms
TTL: None (members auto-prune based on score in queries)

Example:
ZADD drivers:h3:blr:89283082837ffff 1703001234000 drv_001
ZADD drivers:h3:blr:89283082837ffff 1703001235000 drv_002

Query:
ZRANGEBYSCORE drivers:h3:blr:89283082837ffff 
  (now_ms - 30000) now_ms  # Only fresh entries

Driver Metadata

Key: driver:meta:{city_id}:{driver_id}

Type: HASH
Fields:
  - status: online | on_trip | offline
  - vehicle_type: AUTO | SEDAN | SUV | BIKE
  - lat: 12.934523
  - lng: 77.610234
  - rating: 4.7
  - acceptance_rate: 0.85
  - trip_count_today: 12
  - last_updated: 1703001234000
  - current_booking_id: bkg_123 (if on_trip)
TTL: 60 seconds

HSET driver:meta:blr:drv_001 status online vehicle_type AUTO lat 12.934523 lng 77.610234 rating 4.7 acceptance_rate 0.85

Offers

Key: offer:{city_id}:{offer_id}

Type: HASH
Fields:
  - offer_id: off_789
  - booking_id: bkg_123
  - driver_id: drv_001
  - created_at: 1703001234
  - expires_at: 1703001249
  - status: PENDING | ACCEPTED | DECLINED | EXPIRED | CANCELLED
  - attempt: 1
  - distance_m: 500
  - eta_sec: 120
  - rank: 2
TTL: 20 seconds (slightly > acceptance window)

---

Key: offers:booking:{city_id}:{booking_id}

Type: SET
Members: offer_id_1, offer_id_2, ...
TTL: 300 seconds (5 minutes)

Dispatcher State

Key: dispatch:state:{city_id}:{booking_id}

Type: HASH
Fields:
  - booking_id: bkg_123
  - attempt: 2
  - current_radius_m: 3000
  - max_radius_m: 5000
  - status: SEARCHING | OFFERS_SENT | EXPIRED | CANCELLED
  - started_at: 1703001234
  - last_retry_at: 1703001250
  - offers_pending: 5
  - offers_declined: 2
TTL: 300 seconds

HMSET dispatch:state:blr:bkg_123 
  attempt 2 
  current_radius_m 3000 
  status OFFERS_SENT
EXPIRE dispatch:state:blr:bkg_123 300

This can be re-constructed by replaying in the Kafka events

Locking

Intermediate Lock to Prevent multiple ride assignements to driver

Key: lock:driver:{city_id}:{driver_id}

Type: STRING
Value: booking_id (which booking locked this driver)
TTL: 15 seconds (offer acceptance window)

SET lock:driver:blr:drv_001 bkg_123 EX 15

Lock to prevent multiple Matchmaking consumers from processing same booking. Similar to caching for Transactional Outbox

SET lock:dispatch:{booking_id} {worker_id} NX EX 60

If lock acquired:
  - Process dispatch
  - Release lock after completion
Else:
  - Skip (another worker handling it)

This can be re-constructed based on database and events

Hotspot Cache

Key: hotspot:{city_id}:{vehicle_type}

Type: SORTED SET
Members: h3_cell_id
Score: demand_score (0.0 to 1.0)
TTL: 120 seconds (refreshed by stream processor)

Example:
ZADD hotspot:blr:AUTO 0.85 89283082837ffff 0.72 89283082838ffff
EXPIRE hotspot:blr:AUTO 120

# Top 10 hotspots
ZREVRANGE hotspot:blr:AUTO 0 9 WITHSCORES
sequenceDiagram
    participant Kafka as Kafka<br/>(Event Log)
    participant Worker as Matchmaking<br/>Worker
    participant Postgres as Postgres<br/>(Snapshots)
    participant Redis as Redis<br/>(Ephemeral)

    Note over Kafka,Redis: Normal Flow - Events + Snapshots

    Kafka->>Worker: booking.created<br/>(bkg_123, 10:00:00)
    Worker->>Worker: state = {status: SEARCHING}
    Worker->>Postgres: INSERT dispatch_attempts<br/>{booking_id: bkg_123,<br/>status: SEARCHING,<br/>attempt: 1,<br/>started_at: 10:00:00}
    Worker->>Redis: SET dispatch:state:blr:bkg_123<br/>(TTL 300s)

    Note over Worker: Snapshot #1 saved to Postgres

    Kafka->>Worker: offers.created<br/>(5 drivers, 10:00:01)
    Worker->>Worker: state = {status: OFFERS_SENT,<br/>offers_pending: 5}
    Worker->>Postgres: UPDATE dispatch_attempts<br/>SET status=OFFERS_SENT,<br/>offers_pending=5,<br/>last_updated=10:00:01
    Worker->>Redis: HSET dispatch:state:blr:bkg_123<br/>status OFFERS_SENT

    Note over Worker: Snapshot #2 updated in Postgres

    Kafka->>Worker: offer.declined<br/>(drv_001, 10:00:08)
    Worker->>Worker: state.offers_pending--
    Worker->>Postgres: UPDATE dispatch_attempts<br/>SET offers_pending=4,<br/>offers_declined=1,<br/>last_updated=10:00:08
    Worker->>Redis: HSET offers_pending 4

    Note over Worker: Snapshot #3 updated in Postgres

    rect rgb(255, 200, 200)
        Note over Worker: WORKER CRASHES at 10:00:09
    end

    Note over Kafka,Redis: Worker Recovery - Using Snapshots

    Worker->>Worker: New worker starts (10:00:15)
    
    Worker->>Postgres: SELECT * FROM dispatch_attempts<br/>WHERE booking_id='bkg_123'
    Postgres-->>Worker: Latest snapshot:<br/>{status: OFFERS_SENT,<br/>offers_pending: 4,<br/>offers_declined: 1,<br/>last_updated: 10:00:08}
    
    Note over Worker: State restored instantly<br/>from snapshot!

    Worker->>Kafka: Fetch events AFTER 10:00:08<br/>(optional - for freshness)
    Kafka-->>Worker: [offer.declined at 10:00:09,<br/>trip.created at 10:00:11]
    
    Worker->>Worker: Apply recent events:<br/>state.offers_pending = 3<br/>state.status = ASSIGNED

    Worker->>Redis: Rebuild cache:<br/>SET dispatch:state:blr:bkg_123

    Note over Worker: Resume processing from<br/>current state

    rect rgb(200, 255, 200)
        Note over Worker: Recovery complete<br/>Total time: <1 second
    end

    Note over Kafka,Redis: Without Snapshots (Pure Event Sourcing)

    Worker->>Kafka: Must replay ALL events<br/>from topic beginning
    Kafka-->>Worker: Event 1: booking.created<br/>Event 2: offers.created<br/>Event 3-100: offer.declined...<br/>(replay 100s of events)
    
    Note over Worker: ❌ Slow reconstruction<br/>Total time: 10-30 seconds
Loading

Trip Service

Database Tables:

trips (
  trip_id UUID,
  booking_id VARCHAR(64) NOT NULL UNIQUE,
  
  -- Participants
  rider_id NOT NULL,
  driver_id NOT NULL,
  
  -- Location
  pickup_lat DECIMAL(10, 8) NOT NULL,
  pickup_lng DECIMAL(11, 8) NOT NULL,
  dropoff_lat <same>,
  dropoff_lng <same>,
  pickup_address TEXT,
  dropoff_address TEXT,
  
  vehicle_type ENUM/VARCHAR,
  city_id VARCHAR NOT NULL,
  
  status VARCHAR NOT NULL,
  -- DRIVER_ASSIGNED, IN_PROGRESS, PAUSED, COMPLETED, CANCELLED, PAID
  
  -- Timestamps
  assigned_at TIMESTAMPTZ NOT NULL,
  started_at TIMESTAMPTZ,
  paused_at TIMESTAMPTZ,
  resumed_at TIMESTAMPTZ,
  ended_at TIMESTAMPTZ,
  
  -- Trip metrics (filled on completion)
  distance_km DECIMAL(6, 2),
  duration_sec INT,
  
  -- References
  fare_id VARCHAR(64),  -- FK to pricing service
  payment_id VARCHAR(64),  -- FK to payment service
  
  -- Cancellation
  cancelled_by VARCHAR(16),  -- DRIVER, RIDER, SYSTEM
  cancellation_reason TEXT,
  cancellation_fee DECIMAL(10, 2),
  
  -- Audit
  created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
  updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
  
  -- Indexes
  INDEX idx_booking_id (booking_id),
  INDEX idx_rider_id (rider_id, created_at DESC),
  INDEX idx_driver_id (driver_id, created_at DESC),
  INDEX idx_status (status, created_at DESC),
  INDEX idx_city_created (city_id, created_at DESC)
);

-- Composite index for active trips query
CREATE INDEX idx_active_trips 
ON trips(status, rider_id) 
WHERE status IN ('DRIVER_ASSIGNED', 'IN_PROGRESS', 'PAUSED');

-- Partition by created_at (monthly) for scalability
CREATE TABLE trips_2025_12 PARTITION OF trips
FOR VALUES FROM ('2025-12-01') TO ('2026-01-01');
trip_state_transitions (
  id BIGSERIAL PRIMARY KEY,
  trip_id UUID NOT NULL REFERENCES trips(trip_id),
  
  from_status VARCHAR(32),
  to_status VARCHAR(32) NOT NULL,
  
  changed_by VARCHAR(16) NOT NULL,
  actor_id VARCHAR(64),
  
  reason TEXT,
  metadata JSONB,
  
  created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
  
  INDEX idx_trip_id (trip_id, created_at DESC)
);

-- Partition by created_at (monthly)
-- Retention: 90 days
  • trip.locations
  • trip.events (although present in Kafka, could be async write to database)

Trip Event Types:

  -- OFFER_ACCEPTED, TRIP_STARTED, LOCATION_UPDATE, 
  -- TRIP_PAUSED, TRIP_RESUMED, TRIP_ENDED, TRIP_CANCELLED

Caches:

Key: trip:active:{city_id}:{trip_id}

Type: HASH
Fields:
  - trip_id: trp_001
  - booking_id: bkg_123
  - rider_id: usr_456
  - driver_id: drv_001
  - status: IN_PROGRESS
  - started_at: 1703001234
  - pickup_lat: 12.934523
  - pickup_lng: 77.610234
  - dropoff_lat: 12.956789
  - dropoff_lng: 77.634567
TTL: (ex. 4 hours) [max trip duration + buffer]
Inverse Indexes
Driver-Trip Binding

Key: trip:by-driver:{city_id}:{driver_id}
Type: STRING

Rider Trip Binding
Key: trip:by-rider:{city_id}:{rider_id}
Type: STRING
Key: trip:location:{trip_id}

Type: GEOHASH
Members: timestamped location points
TTL: 1 hour after trip ends

Purpose: Fast location queries for ETA

Example:
GEOADD trip:location:trp_001 77.610234 12.934523 "loc_1703001234"
Key: lock:trip:{trip_id}
Type: STRING

Value: {operation}:{worker_id}
TTL: 30 seconds

Purpose: Prevent concurrent state transitions
induced by driver, rider modifying the same trip record

Example:
SET lock:trip:trp_001 "start:worker-3" NX EX 30
Key: trip:location:{trip_id}
Type: GEOHASH

Members: timestamped location points
TTL: 1 hour after trip ends

Purpose: Fast location queries for ETA

Example:
GEOADD trip:location:trp_001 77.610234 12.934523 "loc_1703001234"

States

SEARCHING -> ASSIGNED -> IN_PROGRESS -> COMPLETED

Events

  • trip.created

    • Consumed by:
      • Matchmaking Service (cancel other offers)
      • Notification Service (notify rider "Driver assigned")
      • Analytics Service
  • trip.started

    • Consumers:
      • Push Notification/SMS Service (notify rider "Trip started")
      • Analytics Service (start tracking metrics)
      • Driver Supply Service (mark driver as on_trip)
  • trip.location_updated

    • Consumers:
      • Rider App (via WebSocket server that subscribes to this, or http poll)
      • Analytics Service (tracking, heatmaps)
      • Trip Service itself (async write to trip_locations table)
  • trip.completed

    • Consumers:
      • Payment Service (initiate payment)
      • Notification Service (send receipt, rating prompt)
      • Driver Supply Service (mark driver available)
      • Analytics Service
  • trip.cancelled:

    • Consumers:
      • Payment Service (charge cancellation fee if applicable)
      • Driver Supply Service (mark driver available)
      • Notification Service (notify both parties)
      • Policy Service (update fairness metrics)

APIs

1. Accept Offer (POST /trips/accept)

POST /trips/accept
Headers:
  X-Driver-ID: drv_001
  X-Idempotency-Key: idmp_abc123
  Authorization: Bearer <driver_token>

Body:
{
  "offer_id": "off_789"
}

Response: 201 Created
{
  "trip_id": "trp_001",
  "booking_id": "bkg_123",
  "status": "DRIVER_ASSIGNED",
  "assigned_at": "2025-12-20T10:00:10Z",
  
  "rider": {
    "rider_id": "usr_456",
    "name": "John Doe",
    "phone": "+91XXXXXXXXXX",
    "rating": 4.8,
    "profile_pic_url": "https://..."
  },
  
  "pickup": {
    "lat": 12.934523,
    "lng": 77.610234,
    "address": "123 Main St, Koramangala"
  },
  
  "destination": {
    "lat": 12.956789,
    "lng": 77.634567,
    "address": "456 Park Ave, Indiranagar"
  },
  
  "estimated_fare": 150,
  "estimated_distance_km": 8.2,
  "estimated_duration_min": 20,
  
  "otp": "1234"
}

Errors:
409 Conflict - OFFER_EXPIRED
409 Conflict - OFFER_ALREADY_ACCEPTED
409 Conflict - DRIVER_BUSY
410 Gone - OFFER_TAKEN
500 Internal Server Error

2. Start Trip (POST /trips/{trip_id}/start)

POST /trips/trp_001/start
Headers:
  X-Driver-ID: drv_001
  Authorization: Bearer <driver_token>

Body:
{
  "otp": "1234",  // Rider's OTP
  "location": {
    "lat": 12.934523,
    "lng": 77.610234,
    "accuracy_m": 10
  }
}

Response: 200 OK
{
  "trip_id": "trp_001",
  "status": "IN_PROGRESS",
  "started_at": "2025-12-20T10:05:00Z",
  "otp_verified": true
}

Errors:
400 Bad Request - INVALID_OTP
403 Forbidden - UNAUTHORIZED_DRIVER
404 Not Found - TRIP_NOT_FOUND
409 Conflict - TRIP_ALREADY_STARTED
422 Unprocessable - TRIP_CANCELLED

3. Update Location (POST /trips/{trip_id}/location)

POST /trips/trp_001/location
Headers:
  X-Driver-ID: drv_001

Body:
{
  "locations": [
    {
      "lat": 12.935000,
      "lng": 77.611000,
      "accuracy_m": 10,
      "speed_kmh": 35.5,
      "bearing": 45,
      "recorded_at": "2025-12-20T10:05:10Z"
    },
    {
      "lat": 12.935500,
      "lng": 77.611500,
      "accuracy_m": 8,
      "speed_kmh": 40.0,
      "bearing": 50,
      "recorded_at": "2025-12-20T10:05:15Z"
    }
  ]
}

Response: 202 Accepted
{
  "processed": 2,
  "trip_status": "IN_PROGRESS"
}

Note: Batched updates to reduce API calls

4. End Trip (POST /trips/{trip_id}/end)

POST /trips/trp_001/end
Headers:
  X-Driver-ID: drv_001

Body:
{
  "dropoff": {
    "lat": 12.956789,
    "lng": 77.634567,
    "accuracy_m": 10
  },
  "odometer_km": 8.5,
  "actual_duration_sec": 1200
}

Response: 200 OK
{
  "trip_id": "trp_001",
  "status": "COMPLETED",
  "ended_at": "2025-12-20T10:25:00Z",
  
  "trip_summary": {
    "distance_km": 8.5,
    "duration_sec": 1200,
    "avg_speed_kmh": 42.5
  },
  
  "fare": {
    "base": 50,
    "distance": 85,
    "time": 20,
    "surge_multiplier": 1.2,
    "subtotal": 155,
    "tax": 31,
    "total": 186,
    "currency": "INR"
  },
  
  "payment_status": "PENDING"
}

Errors:
403 Forbidden - UNAUTHORIZED_DRIVER
404 Not Found - TRIP_NOT_FOUND
409 Conflict - TRIP_NOT_STARTED
409 Conflict - TRIP_ALREADY_ENDED

Cancel Trip (POST /trips/{trip_id}/cancel)

POST /trips/trp_001/cancel
Headers:
  X-User-ID: usr_456 OR X-Driver-ID: drv_001

Body:
{
  "cancelled_by": "RIDER",  // or DRIVER
  "reason": "CHANGED_MIND",
  "location": {
    "lat": 12.934523,
    "lng": 77.610234
  }
}

Response: 200 OK
{
  "trip_id": "trp_001",
  "status": "CANCELLED",
  "cancelled_at": "2025-12-20T10:03:00Z",
  "cancelled_by": "RIDER",
  
  "cancellation_fee": 20,
  "reason": "Cancellation within 2 minutes of assignment"
}

Errors:
403 Forbidden - UNAUTHORIZED
404 Not Found - TRIP_NOT_FOUND
409 Conflict - TRIP_ALREADY_COMPLETED
422 Unprocessable - CANNOT_CANCEL_IN_PROGRESS

Get Trip Details (GET /trips/{trip_id})

GET /trips/trp_001
Headers:
  X-User-ID: usr_456 OR X-Driver-ID: drv_001

Response: 200 OK
{
  "trip_id": "trp_001",
  "booking_id": "bkg_123",
  "status": "IN_PROGRESS",
  
  "rider": {
    "rider_id": "usr_456",
    "name": "John Doe",
    "rating": 4.8
  },
  
  "driver": {
    "driver_id": "drv_001",
    "name": "Jane Smith",
    "rating": 4.9,
    "vehicle": {
      "make": "Maruti",
      "model": "Swift",
      "plate": "KA01AB1234",
      "color": "White"
    }
  },
  
  "pickup": {...},
  "destination": {...},
  
  "started_at": "2025-12-20T10:05:00Z",
  "estimated_arrival": "2025-12-20T10:25:00Z",
  
  "current_location": {
    "lat": 12.945000,
    "lng": 77.620000,
    "updated_at": "2025-12-20T10:15:30Z"
  }
}

Get Active Trip (GET /trips/active)

GET /trips/active
Headers:
  X-User-ID: usr_456

Response: 200 OK
{
  "trip": {
    "trip_id": "trp_001",
    "status": "IN_PROGRESS",
    ...
  }
}

Response: 404 Not Found (if no active trip)
{
  "error": "NO_ACTIVE_TRIP"
}

Accept Offer & Create Trip

Driver clicks "Accept" in app
  |
POST /trips/accept {offer_id}
  |
Trip Service:
  1. Validate offer exists in Redis
  2. Check offer not expired
  3. Atomic Redis operation (Lua):
     - Check driver not locked
     - Check offer status = PENDING
     - Set offer = ACCEPTED
     - Lock driver
  4. Insert trip record in Postgres (idempotent)
  5. Write to Redis caches (active trip bindings)
  6. Publish trip.created event to Kafka
  7. Return 201 with trip details
  ↓
Matchmaking Service consumes trip.created:
  - Cancel other pending offers
  - Release other driver locks
  |
Notification Service:
  - Send push to rider "Driver assigned"
  - Send SMS with driver details

Start Trip

Driver arrives at pickup
  |
Rider shares OTP: "1234"
  |
Driver enters OTP in app
  |
POST /trips/{trip_id}/start {otp, location}
  |
Trip Service:
  1. Validate trip exists, status = DRIVER_ASSIGNED
  2. Verify OTP matches Redis cache
  3. Acquire trip lock in Redis
  4. Update Postgres:
     - trips.status = IN_PROGRESS
     - trips.started_at = NOW()
  5. Update Redis cache
  6. Write to trip_state_transitions (audit)
  7. Publish trip.started event
  8. Release lock
  |
Driver Supply Service:
  - Mark driver.status = on_trip
  |
Notification Service:
  - Notify rider "Trip started"
  |
Driver app starts sending location updates every 5s

Near Real-time Location Updates

Driver app (every 5 seconds):
  |
Batch 6 location points
  |
PATCH /trips/{trip_id}/location {locations[]}
  |
Trip Service:
  1. Validate trip IN_PROGRESS
  2. Write to Redis GEOHASH (fast cache)
  3. Publish trip.location_updated event (async)
  4. Return 202 Accepted
  |
Async Worker consumes event:
  - Batch insert to trip_locations table
  - 1000 locations per batch
  |
SSE/WebSocket Server consumes event:
  - Push to rider's active WebSocket connection
  - Rider sees driver moving on map

End Trip & Payment

Driver arrives at destination
  |
Driver clicks "End Trip"
  |
POST /trips/{trip_id}/end {dropoff, odometer}
  |
Trip Service:
  1. Validate trip IN_PROGRESS
  2. Acquire trip lock
  3. Calculate metrics:
     - distance_km (from GPS breadcrumbs)
     - duration_sec (started_at - now)
  4. Call Pricing Service:
     GET /pricing/calculate-fare
     {distance_km, duration_sec, surge, vehicle_type}
  5. Update Postgres:
     - trips.status = COMPLETED
     - trips.ended_at = NOW()
     - trips.distance_km = 8.5
     - trips.duration_sec = 1200
     - trips.fare_id = fare_123
  6. Publish trip.completed event
  7. Return fare breakdown
  |
Payment Service consumes trip.completed:
  - Create payment intent
  - Redirect rider to payment
  |
Driver Supply Service:
  - Mark driver.status = online (available)
  |
Notification Service:
  - Send receipt to rider
  - Prompt for rating

Cancel Trip

Rider clicks "Cancel" (or Driver cancels)
  |
POST /trips/{trip_id}/cancel {cancelled_by, reason}
  |
Trip Service:
  1. Validate trip not COMPLETED
  2. Acquire trip lock
  3. Call Policy Service:
     GET /policies/cancellation-fee
     {status, cancelled_by, time_since_assigned}
     -> Returns: {fee: 20, reason: "..."}
  4. Update Postgres:
     - trips.status = CANCELLED
     - trips.cancelled_by = RIDER
     - trips.cancellation_fee = 20
  5. Publish trip.cancelled event
  6. Return cancellation details
  |
Payment Service:
  - Charge cancellation fee if applicable
  |
Driver Supply Service:
  - Mark driver available
  |
Matchmaking Service:
  - Release offer locks (if not started yet)
  |
Notification Service:
  - Notify both parties

Cache Strategy

Request: GET /trips/{trip_id}

Layer 1: Redis (Hot Cache)
  ├─ Check: trip:active:{city}:{trip_id}
  ├─ Hit: Return immediately (5ms)
  └─ Miss: Go to Layer 2

Layer 2: Postgres (Source of Truth)
  ├─ Query: SELECT * FROM trips WHERE trip_id = ?
  ├─ Hit: Return + Write to Redis (50ms)
  └─ Miss: 404 Not Found

Cache Invalidation:
  ├─ On state change: Update Redis + Postgres
  ├─ On trip end: TTL expires in 1 hour
  └─ On trip cancel: Delete from Redis
State Change (e.g., trip started):
  1. Acquire lock
  2. Write to Postgres (source of truth)
  3. Write to Redis (invalidate + update)
  4. Publish event to Kafka
  5. Release lock
  6. Return to client

If Redis write fails:
  - Log error
  - Continue (Postgres is source of truth)
  - Next read will cache
The platform must handle driver–rider matching, dynamic surge pricing, trip
lifecycle management, and payments at scale with strict latency requirements.

Actors

  • Customer
  • Driver

Workflows

Customers

1. Customer Opens the App

  • Trigger: Customer opens the app
  • Actions:
    • Check and Wait for location permissions
    • Check if service is available in region
    • Check if payment pending.
    • Get a list of nearby locations upto 5km, from user
    • Show a list of available vehicles, maybe events, or poi nearby
  • Pre-condition:
    • Authenticated
    • Location permissions enabled
    • Trips never cross regions at runtime
  • Success:
  • Failure:

2. Customer Intends to Book Ride

  • Trigger: Searches and selects a location to ride to
  • Action:
    • Check if the target location is within geo-boundaries
    • Check for Vehicle types that can reach.
    • System fetches current surge multiplier for pickup geo-cell
    • An estimated price can be calculated (base + distance + surge) (the first part can be cached as well)
  • Success:
    • Customer sees rides available in the area
    • Customer sees estimated prices of rides, and approximate duration (can be from google or internal tracking)
    • Additional metadata like toll-paid or paid separately etc can be shown.
  • Failure:
    • Customer sees appropriate message, ride not available
    • Price estimation failed, but booking can still proceed.

3. Customer Sends a Booking Request

  • Trigger: User selects a ride type and clicks "Book"
  • Action:
    • Create a Booking Request, status = pending, radius = 5km
    • Publish to Q
    • Set a TTL of 15s
  • Success:
    • Driver accepts the booking, status = 'assigned'
    • Driver can also cancel booking after accepting status = 'cancelled' (in which case, new booking request)
  • Failure:
    • Retry 2x with increasing radius.
    • REQUEST_EXPIRED, REQUEST_ABORTED, REQUEST_RETRY

4. Real Time ETAs

  • Trigger: App polls every 5s the driver's Location, and Booking status (via booking handshake)
  • Pre-condition:
    • Driver - Booking - User relationship should exsists amd status = assigned
  • Action:
    • System tracks driver location in context of the Booking

5. Customer Payments

  • Trigger: Trip ends (triggered by driver), Booking status = completed
  • Action:
    • Booking status changes to completed
    • Calculate actual amount for ride
    • Create Payment Request for the Booking (Payment.status = pending)
    • Redirect to appropriate PSP page, wait for completion
    • En-Q a recon process as a delayed job (TTL 5 minute)
    • On PSP Callback, Enqueue to update the Payment status and timestamps
  • Success:
    • Update Booking.status = paid
  • Failure:

Driver

1. Driver toggles duty status

  • Trigger: Driver taps Go Online / Go Offline
  • Pre-condition:
    • Driver has registered and KYC verified
  • Actions:
    • Update Driver.status = online/offline
    • If online: start sending location pings (batch them on the client side to reduce ping rate)
    • If offline: stop location stream, clear from matching pool

2. Driver receives & accepts ride

  • Trigger: New BookingRequest assigned to driver
  • Actiond:
    • Push notification sent (booking details)
    • Driver has 10s to accept
      On accept:
      • Booking.status = accepted
      • Driver.status = on_trip
      • Start navigation
      • Clear other offers
    • On decline/timeout:
      • Put the driver id in offered set (to select new driver)

3. Driver views hotspot map

  • Trigger: Driver opens "Hotspots" tab
  • Data: Aggregated DemandHeatMap (geo-cells with high booking rate)
  • Source: Stream processor (Kafka -> Flink -> Redis Hash)
  • Update freq: Every 2 min
    Consistency: Eventual

Toolings

  • Observability via metric collection, and alerting policies
  • Logs and Request Tracing to debug problems better
    • Some logging libraries come with PII handling mechanisms, masking emails/cards/phone etc.
  • Feature flags:
    • Toggle entire modules, like chat (ui + apis)
    • Toggle business level features, like on-off surge pricing
    • Toggle to A/B test exsisting flows
  • Localisation:
    • Because its multi-region english may not always be the prefered choice.
    • Currencies can be shown better
    • Cultural context can be helpful in desiging surge pricing
  • Policy Engines:
    • Different Regions can be different pricing policies, per-km, surge caps, minimum wage etc.
    • Specific regions can benefit from static surge prices
    • Systems need periodic maintainance, like certificate renewal, domain renewal, key rotation etc.
    • Logging library can use PII poilices per region.
    • Data Archival policies for different kinds of data.
    • KYC Archival policies
    • Data Replication policies
    • Rate Limiting

Security

  • Databases, Access Keys must be encrypted
  • Keys must be rotated
  • APIs should be protected via WAF
  • Rate Limits should be present on most apis.
  • TLS certificates should never expire, All communications over TLS/WSS

Failure Points

  • Driver device connection issues
  • Redis/Database/Store Crashes
  • PSP / External Providers outage
  • Service Failure Cascade
  • Internet outage
  • Flaky Networks (tuning tcp params, reduce data transfer)
  • Bad Deployments

Entities

  • Customer
  • Driver
  • Vehicle
  • Pin
  • Location
  • Offer
  • Fare
  • Booking
  • Pricing
  • Payment
  • History
  • DemandHeatMap
  • Session
  • UserProfile
  • Device
  • Wallet
  • Policy

Relationships

Trip

belongs_to :booking
belongs_to :rider (User)
belongs_to :driver (User)
belongs_to :fare
belongs_to :payment

has_many :state_transitions
has_many :locations
has_many :events

Booking

belongs_to :rider (User)

has_one :trip
has_many :offers

User (Customer/Driver)

has_many :trips_as_rider (Trip)
has_many :trips_as_driver (Trip)
has_many :bookings

Offer

belongs_to :booking
belongs_to :driver (User)

TripStateTransition

belongs_to :trip
belongs_to :actor (User)

TripLocation

belongs_to :trip

TripEvent

belongs_to :trip

Fare

has_one :trip
belongs_to :booking

Payment

has_one :trip
belongs_to :booking
belongs_to :rider (User)

Vehicle

belongs_to :driver (User)

has_many :trips
erDiagram
    Trip ||--|| Booking : "belongs_to"
    Trip ||--|| User : "belongs_to (rider)"
    Trip ||--|| User : "belongs_to (driver)"
    Trip ||--o| Fare : "belongs_to"
    Trip ||--o| Payment : "belongs_to"
    Trip ||--o| Vehicle : "belongs_to"
    Trip ||--o{ TripStateTransition : "has_many"
    Trip ||--o{ TripLocation : "has_many"
    Trip ||--o{ TripEvent : "has_many"
    
    Booking ||--|| User : "belongs_to (rider)"
    Booking ||--o| Trip : "has_one"
    Booking ||--o{ Offer : "has_many"
    
    Offer ||--|| Booking : "belongs_to"
    Offer ||--|| User : "belongs_to (driver)"
    
    User ||--o{ Trip : "has_many (as rider)"
    User ||--o{ Trip : "has_many (as driver)"
    User ||--o{ Booking : "has_many"
    User ||--o{ Offer : "has_many"
    User ||--o{ Vehicle : "has_many"
    
    TripStateTransition ||--|| Trip : "belongs_to"
    TripStateTransition ||--o| User : "belongs_to (actor)"
    
    TripLocation ||--|| Trip : "belongs_to"
    
    TripEvent ||--|| Trip : "belongs_to"
    
    Fare ||--|| Booking : "belongs_to"
    Fare ||--o| Trip : "has_one"
    
    Payment ||--|| Booking : "belongs_to"
    Payment ||--|| User : "belongs_to (rider)"
    Payment ||--o| Trip : "has_one"
    
    Vehicle ||--|| User : "belongs_to (driver)"
    Vehicle ||--o{ Trip : "has_many"

    Trip {
        uuid trip_id PK
        varchar booking_id UK "FK to Booking"
        varchar rider_id "FK to User"
        varchar driver_id "FK to User"
        varchar vehicle_id "FK to Vehicle"
        decimal pickup_lat
        decimal pickup_lng
        text pickup_address
        decimal dropoff_lat
        decimal dropoff_lng
        text dropoff_address
        varchar vehicle_type
        varchar city_id
        varchar status "enum"
        timestamptz assigned_at
        timestamptz started_at
        timestamptz paused_at
        timestamptz resumed_at
        timestamptz ended_at
        decimal distance_km
        int duration_sec
        varchar fare_id "FK to Fare"
        varchar payment_id "FK to Payment"
        varchar cancelled_by "enum"
        text cancellation_reason
        decimal cancellation_fee
        varchar otp
        timestamptz created_at
        timestamptz updated_at
    }

    Booking {
        varchar booking_id PK
        varchar rider_id "FK to User"
        decimal pickup_lat
        decimal pickup_lng
        text pickup_address
        decimal destination_lat
        decimal destination_lng
        text destination_address
        varchar vehicle_type "enum"
        varchar city_id
        varchar status "enum"
        decimal estimated_fare
        decimal surge_multiplier
        varchar payment_method
        timestamptz created_at
        timestamptz updated_at
    }

    User {
        varchar user_id PK
        varchar name
        varchar email
        varchar phone
        varchar type "RIDER, DRIVER"
        decimal rating
        int total_trips
        varchar city_id
        varchar status "enum"
        timestamptz created_at
    }

    Offer {
        varchar offer_id PK
        varchar booking_id "FK to Booking"
        varchar driver_id "FK to User"
        varchar status "enum"
        int distance_m
        int eta_sec
        int rank
        decimal score
        timestamptz created_at
        timestamptz expires_at
    }

    TripStateTransition {
        bigint id PK
        uuid trip_id "FK to Trip"
        varchar from_status
        varchar to_status
        varchar changed_by "enum"
        varchar actor_id "FK to User"
        text reason
        jsonb metadata
        timestamptz created_at
    }

    TripLocation {
        bigint id PK
        uuid trip_id "FK to Trip"
        decimal lat
        decimal lng
        int accuracy_m
        decimal speed_kmh
        int bearing
        timestamptz recorded_at
        timestamptz received_at
    }

    TripEvent {
        bigint id PK
        uuid trip_id "FK to Trip"
        varchar booking_id
        varchar event_type
        jsonb event_data
        int sequence_number
        timestamptz created_at
    }

    Fare {
        varchar fare_id PK
        varchar booking_id "FK to Booking"
        decimal base_fare
        decimal distance_fare
        decimal time_fare
        decimal surge_multiplier
        decimal subtotal
        decimal tax
        decimal total
        varchar currency
        timestamptz created_at
    }

    Payment {
        varchar payment_id PK
        varchar booking_id "FK to Booking"
        varchar rider_id "FK to User"
        decimal amount
        varchar currency
        varchar status "enum"
        varchar payment_method
        varchar psp_transaction_id
        timestamptz created_at
        timestamptz completed_at
    }

    Vehicle {
        varchar vehicle_id PK
        varchar driver_id "FK to User"
        varchar vehicle_type "enum"
        varchar make
        varchar model
        varchar plate_number
        varchar color
        int year
        varchar status "enum"
        timestamptz created_at
    }
Loading

P.S. This is a generated diagram, from the blobs of text below

Scaling, Consistency and Availability

  • Scale assumptions:
    • Each online driver sends 1–2 updates per second
    • 300k concurrent drivers globally
    • 60k ride requests/minute peak
    • 500k location updates/second globally
    • Dispatch decision: p95 ≤ 1s
    • End-to-end request->acceptance: p95 ≤ 3s

End-to-end request->acceptance: p95 ≤ 3s (hmmm, not sure about this, depends on the driver, human involved, incremental search and retry upto 1 minute) Average: 20s

Ride Requests:

  • 60k rpm => 1k rps * 20s = 20k Concurrent Users Booking

Location Updates: Assuming most of this is driver pings, user pings are not that useful right now.

  • 300K Concurrent Drivers * 1.5 UPS = 450K UPS
  • Ping Data: (id, lat, long, speed, sig, acc, unix_ts) 100B (with tcp headers)
  • 500K UPS * 100B = 500MBps (Bandwith req)

Dispatch Decision:

  • Disptach involves sending req
  • Writing a booking request to db
  • Enqueing to Q
  • Consume from Q
  • Driver Matching
  • Offer Creation
  • Push Notification

Timings:

  • Kafka tail worst case 200ms p95 (from blogs) (i3gen,large 16Gb ram, 2vcpu, 25Gbps, acks=all, replication >= 3)
    • Redpanda can reduce this by factor of 3.
  • Redis (single instance, 8G RAM) 10ms. 100000 requests completed in 0.50 seconds 50 parallel clients 3 bytes payload
  • Single instance supported 400k ops/s, 2-4 redis instances per city, with replicas.
  • Redis read and write, 10ms (combined)
  • API Roundtrip: 100ms
  • Database Write: 50ms-100ms, Dynamodb Ensures 20ms p95.

200 + 50 + 100 + 100 = 450ms (can be lower because of multi-region)

Push Request, can affect the tail latency, 1s I am assuming as worst case.

Consistency, Availability and Storage

  • Authentication and Sessions: HA and Strong Consistency
  • Booking: Strong Consistency
  • Locations: HA, EC
  • Payment: HA, SC
  • Surge Pricing: EC

Query Patterns:

  • CanBook(user)
  • RidePossible(srcLoc, dstLoc)
  • GetRides(srcLoc, dstLoc)
  • GetFareEstimates(srcLoc, dstLoc)
  • SurgeApplied(srcLoc, dstLoc)
  • InitBooking(user, srcLoc, dstLoc, vehicleTypes, radius, shownEstimate, timeWithZone)
  • GetMatchingDrivers(loc, radius)
  • AcceptBooking(booking, driver)
  • Decline/CancelBooking(booking, driver)
  • UpdateBookingStatus(bookingID, status)
  • CheckBookingStatus(bookingID)
  • InitiatePayment(bookingID)
  • UpdatePaymentStatus(bookingID, pricingID?, status)
  • GetBookings(driverID/userID, cursor)
  • GetActiveBookings(userID/driverID)
  • UpdateOfferStatus(driverID, offerID/bookingID)
  • BroadCastOffers(bookingID)
  • GetOffers(driverID, srcLoc)
  • UnsubcribeBroadCast(bookingID)
  • CanAcceptBookings(driverID)
  • UserProfile(userID/driverID)
  • UpdateLocation(driverID, bookingID, []coorD)

Services

  • Identity Service (Sessions + User) Initially can be a shared service. (User = Customer + Driver)
    • Responsibilities:
      • Authn & Authz
      • Banned or Blocked
      • KYC status
      • Assigned PIN
      • User Profile (Gender, Talkativity and stuff)
    • Traffic:
      • AuthN+Z: Read heavy, C > A
      • User Status: Ready heavy, A > C
    • Verdict:
      • Centralize and Cache across A-Z

Identity and UserProfile can be deployed separately, because CAP requirements are Different

  • Policy Service:

    • Responsibilities:
      • Surge Rules
      • City Rules
      • Cross city Rules
      • Cancellation penalities (Fairness meter)
      • Matchmaking feature flags
      • PII policies, App update policies
      • Vehicle Eligibility
      • Scaling Policies
    • Traffic:
      • Mostly ready heavy, C > A
      • Changes has to nearly Strong Consistency depending on what database fields it touches
  • Pricing Service

    • Responsibilities:
      • Fare Estimation
      • Surge Pricing
      • Final Fare computation
    • Traffic Patterns:
      • Fare Estimation: A > C
      • Final Fare: C > A
  • Booking Service:

    • Responsibilities:
      • CreateBooking Record 🤯
      • Idempotency Handling
      • Booking State Machine
      • SMS based bookings
    • Traffic Patterns:
      • CreateBooking, Complete, Accept, Cancel, Decline WriteHeavy
      • GetBooking, Low Read
      • GetActiveBookings, Should be lowest, might indicate production issues
      • BookingHistory: Consitent, Read Skewed
      • Overall both C and A are needed, but C > A
      • Allow service degradation with proper cutoffs
  • Payments Service

    • Responsibilities:
      • Payment intents
      • PSP integration
      • Idempotency Handling
      • Payments History (internal)
    • Traffic Patterns:
      • Proportional to Successfull Bookings, (assuming 90% Successfull bookings)
      • Fairly Write heavy
      • Payment Intent, C > A (Strong)
      • Durable + Replayability (+Idempotent)
      • Confirmation: Eventual Consistent (with Reconciliation) + High Correctness
  • Match Making Service

    • Responsibilities:
      • Nearby Driver Search
      • Ranking
      • Offer Broadcast
      • Offer listing
      • Maps (Mapping can be moved to a different service)
      • Timeouts and Retry
    • Traffic Patterns:
      • Search drivers, Offer listing (read heavy)
      • Broadcasting (write heavy, blazing fast)
      • Ranking (compute cpu heavy)
      • Timeouts and Retries, write skeweed
      • A > C
      • Allow service degradation
  • Driver Supply Service:

    • Responsibilities:
      • Driver online/offline
      • Location ingestion
      • Supply snapshots
      • Hotspot generation
    • Traffic Patterns:
      • Locatoin ingestion (i/o) write heavy
      • Hotspot Generation (eventually consistency, compute heavy, ready heavy)
      • Supply snapshots (analytical)
  • Trip Service (Co-ordinator):

    • Responsibilities:
      • Accept/Decline offers
      • Driver Customer binding
      • Cancel semantics (emit events to stop broadcasting)
      • Final trip state
      • Central co-ordinator to avoid race-conditions
      • HA (Critical)
  • Notification Service

    • Responsibilities:
      • SMS
      • Push Notifications
      • Emails for invoices (if needed)
      • Most of the system is event driven
      • Idempotency Handling
    • Traffic Patterns:
      • Endpoint is both ready and write heavy, because of the Transactional Outbox
      • Should be HA, but shouldn't affect core booking and payment.
      • At most 1 gurranttee
  • Reconciliation Jobs

    • Responsibilities:
      • It would be nice to keep the ActiveBookings, ActivePayments tables separate and small, to reduce the data size. For databases, it would also mean reduce the index size as well. Recon jobs can cleanup/move these data across partitions.
      • Cleanup notifications from Outbox
      • Rebuild Locks in Memory when system Crashes
      • Payment recon workers to validate transaction status and see missed or double charges
  • Experiment Service (control plane)

    • Responsibilities:
      • Flags
      • Experiments
      • Kill switches
      • Audits
    • Reads HA - Shouldn't block, Eventually C
    • Writes: Strong C
  • Localisation Engine

Flow Diagrams

Workflows

Ride Discovery:

sequenceDiagram
    participant Rider
    participant Gateway
    participant Identity
    participant Policy
    participant Pricing
    participant Supply
    participant Maps

    Rider->>Gateway: App Launch (lat, lng)
    Gateway->>Identity: Validate session
    Identity-->>Gateway: OK

    par Parallel Reads
        Gateway->>Policy: Serviceable? city rules
        Gateway->>Supply: Nearby vehicle supply snapshot
        Gateway->>Pricing: Fare estimate request
    end

    Pricing->>Maps: Distance + ETA (approx)
    Maps-->>Pricing: distance, duration

    Pricing->>Policy: Surge multiplier
    Policy-->>Pricing: surge

    Pricing-->>Gateway: Fare ranges per vehicle type
    Supply-->>Gateway: Vehicle availability
    Policy-->>Gateway: Service flags

    Gateway-->>Rider: Launch screen payload
Loading

MatchMaking:

sequenceDiagram
    Kafka->>Matchmaking: booking.created

    Matchmaking->>Redis: drivers:cell + neighbors
    Matchmaking->>Matchmaking: rank & filter

    loop Candidates
        Matchmaking->>Redis: SET lock:driver:{id} TTL
        Matchmaking->>Redis: SET offer:{offer_id} TTL
    end

    Matchmaking->>Kafka: offers.created
Loading

Ride Booking, Customer:

sequenceDiagram
    Rider->>Gateway: POST /bookings
    Gateway->>BookingService: create booking
    BookingService->>DB: insert booking
    BookingService->>Kafka: booking.created

    Kafka->>Matchmaking: booking.created
    Matchmaking->>MatchMaking: create matches

    Kafka->>NotificationService: offers.created
    NotificationService->>Workers: enqueue push
    Workers->>DriverApp: push offer
  
Loading

Ride Booking, Driver:

sequenceDiagram
    participant Driver
    participant Gateway
    participant TripService
    participant Redis
    participant DB
    participant Kafka
    participant Matchmaking
    participant NotifService
    participant OtherDrivers

    Note over Driver,OtherDrivers: Multiple drivers have pending offers

    Driver->>Gateway: POST /trips/accept<br/>{offer_id, idempotency_key}
    Gateway->>TripService: accept(offer_id, driver_id)
    
    TripService->>Redis: HGETALL offer:{offer_id}
    Redis-->>TripService: {booking_id, status:PENDING, expires_at}
    
    alt Offer Expired
        TripService-->>Gateway: 409 OFFER_EXPIRED
        Gateway-->>Driver: Offer expired
    else Offer Valid
        TripService->>Redis: EVAL Lua Script<br/>CHECK lock:driver:{id}<br/>CHECK offer status<br/>SET offer ACCEPTED<br/>SET lock:driver:{id}
        
        alt Race Condition: Driver Already Locked
            Redis-->>TripService: {false, DRIVER_BUSY}
            TripService-->>Gateway: 409 DRIVER_BUSY
            Gateway-->>Driver: Already on another trip
        else Race Condition: Offer Already Taken
            Redis-->>TripService: {false, OFFER_TAKEN}
            TripService-->>Gateway: 410 OFFER_TAKEN
            Gateway-->>Driver: Another driver accepted
        else Success
            Redis-->>TripService: {true, OK}
            
            TripService->>DB: INSERT INTO trips<br/>(booking_id, driver_id, status:ASSIGNED)<br/>ON CONFLICT DO NOTHING
            DB-->>TripService: trip_id (or existing if duplicate)
            
            TripService->>Kafka: publish trip.created<br/>{trip_id, booking_id, driver_id}
            TripService-->>Gateway: 201 Created<br/>{trip_id, rider_info, pickup}
            Gateway-->>Driver: Trip assigned!
            
            Note over Kafka,Matchmaking: Async cleanup begins
            
            Kafka->>Matchmaking: trip.created event
            Matchmaking->>Redis: SMEMBERS offers:booking:{booking_id}
            Redis-->>Matchmaking: [off_1, off_2, off_3, off_4, off_5]
            
            loop For each other offer
                Matchmaking->>Redis: HSET offer:{other_id} status CANCELLED
                Matchmaking->>Redis: HGETALL offer:{other_id}
                Redis-->>Matchmaking: {driver_id: drv_X}
                Matchmaking->>Redis: DEL lock:driver:{drv_X}
            end
            
            Matchmaking->>Redis: DEL offers:booking:{booking_id}
            Matchmaking->>Kafka: publish offers.cancelled<br/>{booking_id, cancelled_offer_ids[]}
            
            Kafka->>NotifService: offers.cancelled event
            NotifService->>OtherDrivers: Push: "Ride filled by another driver"
            
            Note over OtherDrivers: If they try to accept now
            OtherDrivers->>Gateway: POST /trips/accept
            Gateway->>TripService: accept(offer_id)
            TripService->>Redis: HGETALL offer:{offer_id}
            Redis-->>TripService: {status: CANCELLED}
            TripService-->>Gateway: 410 OFFER_TAKEN
            Gateway-->>OtherDrivers: Already assigned
        end
    end
Loading

LLD

Dispatch/MatchMaking

Responsibilities:

  • Consume booking.created
  • Fetch candidate drivers
  • Rank & filter
  • Create offers (Fan Out)
  • Expire stale offers- Retry / backoff / radius expansion
  • Ephemeral state only

Data Store

Matchmaking is mostly stateless but stores minimal metadata for debugging and analytics.

CREATE TABLE dispatch_attempts (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  booking_id VARCHAR(64) NOT NULL,
  attempt_number INT NOT NULL,
  search_radius_m INT NOT NULL,
  candidates_found INT NOT NULL,
  offers_created INT NOT NULL,
  status VARCHAR(32) NOT NULL, 
    -- SEARCHING, OFFERS_SENT, EXPIRED, CANCELLED, ASSIGNED
  started_at TIMESTAMPTZ NOT NULL,
  completed_at TIMESTAMPTZ,
  error_code VARCHAR(64),
  
  INDEX idx_booking_id (booking_id),
  INDEX idx_started_at (started_at)
);
-- Partitoned Postgres. TimeScale would be better

CREATE TABLE hotspot_snapshots (
  id BIGSERIAL PRIMARY KEY,
  city_id VARCHAR(16) NOT NULL,
  h3_cell VARCHAR(32) NOT NULL,
  vehicle_type VARCHAR(16) NOT NULL,
  snapshot_time TIMESTAMPTZ NOT NULL,
  
  -- Metrics
  booking_count_5m INT NOT NULL,
  active_drivers INT NOT NULL,
  avg_surge DECIMAL(4,2),
  demand_score DECIMAL(4,2), -- 0.0 to 1.0
  
  INDEX idx_city_time (city_id, snapshot_time DESC),
  INDEX idx_h3_time (h3_cell, snapshot_time DESC)
);
  • Redis clusters are multi regions
  • Hot Keys are possible, City wise paritioning to reduce changes

Events

Topic: booking.created Partition Key: booking_id

Schema:

{
  "event_id": "evt_123",
  "event_type": "booking.created",
  "timestamp": "2025-12-20T10:00:00Z",
  "booking_id": "bkg_123",
  "rider_id": "usr_456",
  "city_id": "blr",
  "pickup": {
    "lat": 12.934523,
    "lng": 77.610234,
    "h3_cell": "89283082837ffff",
    "address": "Koramangala, Bangalore"
  },
  "destination": {
    "lat": 12.956789,
    "lng": 77.634567,
    "address": "Indiranagar, Bangalore"
  },
  "vehicle_type": "AUTO",
  "estimated_fare": 150,
  "surge_multiplier": 1.2,
  "payment_method": "WALLET",
  "rider_preferences": {
    "female_driver_only": false,
    "pet_friendly": false,
    "ac_required": false
  }
}

Topic: trip.created Partition Key: booking_id


Topic: booking.cancelled Partition Key: booking_id Schema:

{
  "event_id": "evt_126",
  "event_type": "booking.cancelled",
  "timestamp": "2025-12-20T10:00:15Z",
  "booking_id": "bkg_123",
  "city_id": "blr",
  "cancelled_by": "RIDER",
  "reason": "CHANGED_MIND",
  "cancellation_fee": 0
}

Topic: offer.declined Partition Key: booking_id


Topic: offers.created Partition Key: booking_id Schema:

{
  "event_id": "evt_124",
  "event_type": "offers.created",
  "timestamp": "2025-12-20T10:00:01Z",
  "booking_id": "bkg_123",
  "city_id": "blr",
  "attempt": 1,
  "search_radius_m": 1000,
  "candidates_evaluated": 23,
  "offers": [
    {
      "offer_id": "off_789",
      "driver_id": "drv_001",
      "distance_m": 500,
      "eta_sec": 120,
      "rank": 1,
      "score": 0.92,
      "expires_at": "2025-12-20T10:00:16Z"
    },
    {
      "offer_id": "off_790",
      "driver_id": "drv_002",
      "distance_m": 800,
      "eta_sec": 180,
      "rank": 2,
      "score": 0.87,
      "expires_at": "2025-12-20T10:00:16Z"
    }
  ]
}

Topic: offers.cancelled Partition Key: booking_id Schema:

{
  "event_id": "evt_128",
  "event_type": "offers.cancelled",
  "timestamp": "2025-12-20T10:00:12Z",
  "booking_id": "bkg_123",
  "city_id": "blr",
  "reason": "TRIP_ASSIGNED | BOOKING_CANCELLED | EXPIRED",
  "assigned_driver_id": "drv_001", // if reason = TRIP_ASSIGNED
  "cancelled_offers": [
    {
      "offer_id": "off_790",
      "driver_id": "drv_002",
      "status_before": "PENDING"
    },
    {
      "offer_id": "off_791",
      "driver_id": "drv_003",
      "status_before": "PENDING"
    }
  ]
}

Topic: dispatch.retry_scheduled Partition Key: booking_id Schema:

{
  "event_id": "evt_130",
  "event_type": "dispatch.retry_scheduled",
  "timestamp": "2025-12-20T10:00:20Z",
  "booking_id": "bkg_123",
  "city_id": "blr",
  "attempt": 2,
  "new_radius_m": 3000,
  "retry_after_ms": 5000,
  "reason": "ALL_OFFERS_EXPIRED | ALL_OFFERS_DECLINED"
}

Partition Key, booking_id will be hashed, to choose one of the partitions.

  • Having a booking_id as partition allows ordered events for a booking
  • Having a city_id allows to prevent hotspots
  • For reconstruction the Postgres outbox snapshots table dispatch_attempts can be used, for the ordering
  • Given the traffic we need to benchmark to see, if pgpool would handle the traffic, or given kafka as a durable store Make database writes Async.
  • Another options is to only use the Append only Log, or an LSM tree backed database, like rocksdb which are better at handling writes at the cost of compaction.

Caches

Geo-spatial index using H3 cells, Updatd by Driver Supply Service

Key: drivers:h3:{city_id}:{h3_cell}

Type: ZSET
Members: driver_id
Score: last_seen_timestamp_ms
TTL: None (members auto-prune based on score in queries)

Example:
ZADD drivers:h3:blr:89283082837ffff 1703001234000 drv_001
ZADD drivers:h3:blr:89283082837ffff 1703001235000 drv_002

Query:
ZRANGEBYSCORE drivers:h3:blr:89283082837ffff 
  (now_ms - 30000) now_ms  # Only fresh entries

Driver Metadata

Key: driver:meta:{city_id}:{driver_id}

Type: HASH
Fields:
  - status: online | on_trip | offline
  - vehicle_type: AUTO | SEDAN | SUV | BIKE
  - lat: 12.934523
  - lng: 77.610234
  - rating: 4.7
  - acceptance_rate: 0.85
  - trip_count_today: 12
  - last_updated: 1703001234000
  - current_booking_id: bkg_123 (if on_trip)
TTL: 60 seconds

HSET driver:meta:blr:drv_001 status online vehicle_type AUTO lat 12.934523 lng 77.610234 rating 4.7 acceptance_rate 0.85

Offers

Key: offer:{city_id}:{offer_id}

Type: HASH
Fields:
  - offer_id: off_789
  - booking_id: bkg_123
  - driver_id: drv_001
  - created_at: 1703001234
  - expires_at: 1703001249
  - status: PENDING | ACCEPTED | DECLINED | EXPIRED | CANCELLED
  - attempt: 1
  - distance_m: 500
  - eta_sec: 120
  - rank: 2
TTL: 20 seconds (slightly > acceptance window)

---

Key: offers:booking:{city_id}:{booking_id}

Type: SET
Members: offer_id_1, offer_id_2, ...
TTL: 300 seconds (5 minutes)

Dispatcher State

Key: dispatch:state:{city_id}:{booking_id}

Type: HASH
Fields:
  - booking_id: bkg_123
  - attempt: 2
  - current_radius_m: 3000
  - max_radius_m: 5000
  - status: SEARCHING | OFFERS_SENT | EXPIRED | CANCELLED
  - started_at: 1703001234
  - last_retry_at: 1703001250
  - offers_pending: 5
  - offers_declined: 2
TTL: 300 seconds

HMSET dispatch:state:blr:bkg_123 
  attempt 2 
  current_radius_m 3000 
  status OFFERS_SENT
EXPIRE dispatch:state:blr:bkg_123 300

This can be re-constructed by replaying in the Kafka events

Locking

Intermediate Lock to Prevent multiple ride assignements to driver

Key: lock:driver:{city_id}:{driver_id}

Type: STRING
Value: booking_id (which booking locked this driver)
TTL: 15 seconds (offer acceptance window)

SET lock:driver:blr:drv_001 bkg_123 EX 15

Lock to prevent multiple Matchmaking consumers from processing same booking. Similar to caching for Transactional Outbox

SET lock:dispatch:{booking_id} {worker_id} NX EX 60

If lock acquired:
  - Process dispatch
  - Release lock after completion
Else:
  - Skip (another worker handling it)

This can be re-constructed based on database and events

Hotspot Cache

Key: hotspot:{city_id}:{vehicle_type}

Type: SORTED SET
Members: h3_cell_id
Score: demand_score (0.0 to 1.0)
TTL: 120 seconds (refreshed by stream processor)

Example:
ZADD hotspot:blr:AUTO 0.85 89283082837ffff 0.72 89283082838ffff
EXPIRE hotspot:blr:AUTO 120

# Top 10 hotspots
ZREVRANGE hotspot:blr:AUTO 0 9 WITHSCORES
sequenceDiagram
    participant Kafka as Kafka<br/>(Event Log)
    participant Worker as Matchmaking<br/>Worker
    participant Postgres as Postgres<br/>(Snapshots)
    participant Redis as Redis<br/>(Ephemeral)

    Note over Kafka,Redis: Normal Flow - Events + Snapshots

    Kafka->>Worker: booking.created<br/>(bkg_123, 10:00:00)
    Worker->>Worker: state = {status: SEARCHING}
    Worker->>Postgres: INSERT dispatch_attempts<br/>{booking_id: bkg_123,<br/>status: SEARCHING,<br/>attempt: 1,<br/>started_at: 10:00:00}
    Worker->>Redis: SET dispatch:state:blr:bkg_123<br/>(TTL 300s)

    Note over Worker: Snapshot #1 saved to Postgres

    Kafka->>Worker: offers.created<br/>(5 drivers, 10:00:01)
    Worker->>Worker: state = {status: OFFERS_SENT,<br/>offers_pending: 5}
    Worker->>Postgres: UPDATE dispatch_attempts<br/>SET status=OFFERS_SENT,<br/>offers_pending=5,<br/>last_updated=10:00:01
    Worker->>Redis: HSET dispatch:state:blr:bkg_123<br/>status OFFERS_SENT

    Note over Worker: Snapshot #2 updated in Postgres

    Kafka->>Worker: offer.declined<br/>(drv_001, 10:00:08)
    Worker->>Worker: state.offers_pending--
    Worker->>Postgres: UPDATE dispatch_attempts<br/>SET offers_pending=4,<br/>offers_declined=1,<br/>last_updated=10:00:08
    Worker->>Redis: HSET offers_pending 4

    Note over Worker: Snapshot #3 updated in Postgres

    rect rgb(255, 200, 200)
        Note over Worker: WORKER CRASHES at 10:00:09
    end

    Note over Kafka,Redis: Worker Recovery - Using Snapshots

    Worker->>Worker: New worker starts (10:00:15)
    
    Worker->>Postgres: SELECT * FROM dispatch_attempts<br/>WHERE booking_id='bkg_123'
    Postgres-->>Worker: Latest snapshot:<br/>{status: OFFERS_SENT,<br/>offers_pending: 4,<br/>offers_declined: 1,<br/>last_updated: 10:00:08}
    
    Note over Worker: State restored instantly<br/>from snapshot!

    Worker->>Kafka: Fetch events AFTER 10:00:08<br/>(optional - for freshness)
    Kafka-->>Worker: [offer.declined at 10:00:09,<br/>trip.created at 10:00:11]
    
    Worker->>Worker: Apply recent events:<br/>state.offers_pending = 3<br/>state.status = ASSIGNED

    Worker->>Redis: Rebuild cache:<br/>SET dispatch:state:blr:bkg_123

    Note over Worker: Resume processing from<br/>current state

    rect rgb(200, 255, 200)
        Note over Worker: Recovery complete<br/>Total time: <1 second
    end

    Note over Kafka,Redis: Without Snapshots (Pure Event Sourcing)

    Worker->>Kafka: Must replay ALL events<br/>from topic beginning
    Kafka-->>Worker: Event 1: booking.created<br/>Event 2: offers.created<br/>Event 3-100: offer.declined...<br/>(replay 100s of events)
    
    Note over Worker: ❌ Slow reconstruction<br/>Total time: 10-30 seconds
Loading

Trip Service

Database Tables:

trips (
  trip_id UUID,
  booking_id VARCHAR(64) NOT NULL UNIQUE,
  
  -- Participants
  rider_id NOT NULL,
  driver_id NOT NULL,
  
  -- Location
  pickup_lat DECIMAL(10, 8) NOT NULL,
  pickup_lng DECIMAL(11, 8) NOT NULL,
  dropoff_lat <same>,
  dropoff_lng <same>,
  pickup_address TEXT,
  dropoff_address TEXT,
  
  vehicle_type ENUM/VARCHAR,
  city_id VARCHAR NOT NULL,
  
  status VARCHAR NOT NULL,
  -- DRIVER_ASSIGNED, IN_PROGRESS, PAUSED, COMPLETED, CANCELLED, PAID
  
  -- Timestamps
  assigned_at TIMESTAMPTZ NOT NULL,
  started_at TIMESTAMPTZ,
  paused_at TIMESTAMPTZ,
  resumed_at TIMESTAMPTZ,
  ended_at TIMESTAMPTZ,
  
  -- Trip metrics (filled on completion)
  distance_km DECIMAL(6, 2),
  duration_sec INT,
  
  -- References
  fare_id VARCHAR(64),  -- FK to pricing service
  payment_id VARCHAR(64),  -- FK to payment service
  
  -- Cancellation
  cancelled_by VARCHAR(16),  -- DRIVER, RIDER, SYSTEM
  cancellation_reason TEXT,
  cancellation_fee DECIMAL(10, 2),
  
  -- Audit
  created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
  updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
  
  -- Indexes
  INDEX idx_booking_id (booking_id),
  INDEX idx_rider_id (rider_id, created_at DESC),
  INDEX idx_driver_id (driver_id, created_at DESC),
  INDEX idx_status (status, created_at DESC),
  INDEX idx_city_created (city_id, created_at DESC)
);

-- Composite index for active trips query
CREATE INDEX idx_active_trips 
ON trips(status, rider_id) 
WHERE status IN ('DRIVER_ASSIGNED', 'IN_PROGRESS', 'PAUSED');

-- Partition by created_at (monthly) for scalability
CREATE TABLE trips_2025_12 PARTITION OF trips
FOR VALUES FROM ('2025-12-01') TO ('2026-01-01');
trip_state_transitions (
  id BIGSERIAL PRIMARY KEY,
  trip_id UUID NOT NULL REFERENCES trips(trip_id),
  
  from_status VARCHAR(32),
  to_status VARCHAR(32) NOT NULL,
  
  changed_by VARCHAR(16) NOT NULL,
  actor_id VARCHAR(64),
  
  reason TEXT,
  metadata JSONB,
  
  created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
  
  INDEX idx_trip_id (trip_id, created_at DESC)
);

-- Partition by created_at (monthly)
-- Retention: 90 days
  • trip.locations
  • trip.events (although present in Kafka, could be async write to database)

Trip Event Types:

  -- OFFER_ACCEPTED, TRIP_STARTED, LOCATION_UPDATE, 
  -- TRIP_PAUSED, TRIP_RESUMED, TRIP_ENDED, TRIP_CANCELLED

Caches:

Key: trip:active:{city_id}:{trip_id}

Type: HASH
Fields:
  - trip_id: trp_001
  - booking_id: bkg_123
  - rider_id: usr_456
  - driver_id: drv_001
  - status: IN_PROGRESS
  - started_at: 1703001234
  - pickup_lat: 12.934523
  - pickup_lng: 77.610234
  - dropoff_lat: 12.956789
  - dropoff_lng: 77.634567
TTL: (ex. 4 hours) [max trip duration + buffer]
Inverse Indexes
Driver-Trip Binding

Key: trip:by-driver:{city_id}:{driver_id}
Type: STRING

Rider Trip Binding
Key: trip:by-rider:{city_id}:{rider_id}
Type: STRING
Key: trip:location:{trip_id}

Type: GEOHASH
Members: timestamped location points
TTL: 1 hour after trip ends

Purpose: Fast location queries for ETA

Example:
GEOADD trip:location:trp_001 77.610234 12.934523 "loc_1703001234"
Key: lock:trip:{trip_id}
Type: STRING

Value: {operation}:{worker_id}
TTL: 30 seconds

Purpose: Prevent concurrent state transitions
induced by driver, rider modifying the same trip record

Example:
SET lock:trip:trp_001 "start:worker-3" NX EX 30
Key: trip:location:{trip_id}
Type: GEOHASH

Members: timestamped location points
TTL: 1 hour after trip ends

Purpose: Fast location queries for ETA

Example:
GEOADD trip:location:trp_001 77.610234 12.934523 "loc_1703001234"

States

SEARCHING -> ASSIGNED -> IN_PROGRESS -> COMPLETED

Events

  • trip.created

    • Consumed by:
      • Matchmaking Service (cancel other offers)
      • Notification Service (notify rider "Driver assigned")
      • Analytics Service
  • trip.started

    • Consumers:
      • Push Notification/SMS Service (notify rider "Trip started")
      • Analytics Service (start tracking metrics)
      • Driver Supply Service (mark driver as on_trip)
  • trip.location_updated

    • Consumers:
      • Rider App (via WebSocket server that subscribes to this, or http poll)
      • Analytics Service (tracking, heatmaps)
      • Trip Service itself (async write to trip_locations table)
  • trip.completed

    • Consumers:
      • Payment Service (initiate payment)
      • Notification Service (send receipt, rating prompt)
      • Driver Supply Service (mark driver available)
      • Analytics Service
  • trip.cancelled:

    • Consumers:
      • Payment Service (charge cancellation fee if applicable)
      • Driver Supply Service (mark driver available)
      • Notification Service (notify both parties)
      • Policy Service (update fairness metrics)

APIs

1. Accept Offer (POST /trips/accept)

POST /trips/accept
Headers:
  X-Driver-ID: drv_001
  X-Idempotency-Key: idmp_abc123
  Authorization: Bearer <driver_token>

Body:
{
  "offer_id": "off_789"
}

Response: 201 Created
{
  "trip_id": "trp_001",
  "booking_id": "bkg_123",
  "status": "DRIVER_ASSIGNED",
  "assigned_at": "2025-12-20T10:00:10Z",
  
  "rider": {
    "rider_id": "usr_456",
    "name": "John Doe",
    "phone": "+91XXXXXXXXXX",
    "rating": 4.8,
    "profile_pic_url": "https://..."
  },
  
  "pickup": {
    "lat": 12.934523,
    "lng": 77.610234,
    "address": "123 Main St, Koramangala"
  },
  
  "destination": {
    "lat": 12.956789,
    "lng": 77.634567,
    "address": "456 Park Ave, Indiranagar"
  },
  
  "estimated_fare": 150,
  "estimated_distance_km": 8.2,
  "estimated_duration_min": 20,
  
  "otp": "1234"
}

Errors:
409 Conflict - OFFER_EXPIRED
409 Conflict - OFFER_ALREADY_ACCEPTED
409 Conflict - DRIVER_BUSY
410 Gone - OFFER_TAKEN
500 Internal Server Error

2. Start Trip (POST /trips/{trip_id}/start)

POST /trips/trp_001/start
Headers:
  X-Driver-ID: drv_001
  Authorization: Bearer <driver_token>

Body:
{
  "otp": "1234",  // Rider's OTP
  "location": {
    "lat": 12.934523,
    "lng": 77.610234,
    "accuracy_m": 10
  }
}

Response: 200 OK
{
  "trip_id": "trp_001",
  "status": "IN_PROGRESS",
  "started_at": "2025-12-20T10:05:00Z",
  "otp_verified": true
}

Errors:
400 Bad Request - INVALID_OTP
403 Forbidden - UNAUTHORIZED_DRIVER
404 Not Found - TRIP_NOT_FOUND
409 Conflict - TRIP_ALREADY_STARTED
422 Unprocessable - TRIP_CANCELLED

3. Update Location (POST /trips/{trip_id}/location)

POST /trips/trp_001/location
Headers:
  X-Driver-ID: drv_001

Body:
{
  "locations": [
    {
      "lat": 12.935000,
      "lng": 77.611000,
      "accuracy_m": 10,
      "speed_kmh": 35.5,
      "bearing": 45,
      "recorded_at": "2025-12-20T10:05:10Z"
    },
    {
      "lat": 12.935500,
      "lng": 77.611500,
      "accuracy_m": 8,
      "speed_kmh": 40.0,
      "bearing": 50,
      "recorded_at": "2025-12-20T10:05:15Z"
    }
  ]
}

Response: 202 Accepted
{
  "processed": 2,
  "trip_status": "IN_PROGRESS"
}

Note: Batched updates to reduce API calls

4. End Trip (POST /trips/{trip_id}/end)

POST /trips/trp_001/end
Headers:
  X-Driver-ID: drv_001

Body:
{
  "dropoff": {
    "lat": 12.956789,
    "lng": 77.634567,
    "accuracy_m": 10
  },
  "odometer_km": 8.5,
  "actual_duration_sec": 1200
}

Response: 200 OK
{
  "trip_id": "trp_001",
  "status": "COMPLETED",
  "ended_at": "2025-12-20T10:25:00Z",
  
  "trip_summary": {
    "distance_km": 8.5,
    "duration_sec": 1200,
    "avg_speed_kmh": 42.5
  },
  
  "fare": {
    "base": 50,
    "distance": 85,
    "time": 20,
    "surge_multiplier": 1.2,
    "subtotal": 155,
    "tax": 31,
    "total": 186,
    "currency": "INR"
  },
  
  "payment_status": "PENDING"
}

Errors:
403 Forbidden - UNAUTHORIZED_DRIVER
404 Not Found - TRIP_NOT_FOUND
409 Conflict - TRIP_NOT_STARTED
409 Conflict - TRIP_ALREADY_ENDED

Cancel Trip (POST /trips/{trip_id}/cancel)

POST /trips/trp_001/cancel
Headers:
  X-User-ID: usr_456 OR X-Driver-ID: drv_001

Body:
{
  "cancelled_by": "RIDER",  // or DRIVER
  "reason": "CHANGED_MIND",
  "location": {
    "lat": 12.934523,
    "lng": 77.610234
  }
}

Response: 200 OK
{
  "trip_id": "trp_001",
  "status": "CANCELLED",
  "cancelled_at": "2025-12-20T10:03:00Z",
  "cancelled_by": "RIDER",
  
  "cancellation_fee": 20,
  "reason": "Cancellation within 2 minutes of assignment"
}

Errors:
403 Forbidden - UNAUTHORIZED
404 Not Found - TRIP_NOT_FOUND
409 Conflict - TRIP_ALREADY_COMPLETED
422 Unprocessable - CANNOT_CANCEL_IN_PROGRESS

Get Trip Details (GET /trips/{trip_id})

GET /trips/trp_001
Headers:
  X-User-ID: usr_456 OR X-Driver-ID: drv_001

Response: 200 OK
{
  "trip_id": "trp_001",
  "booking_id": "bkg_123",
  "status": "IN_PROGRESS",
  
  "rider": {
    "rider_id": "usr_456",
    "name": "John Doe",
    "rating": 4.8
  },
  
  "driver": {
    "driver_id": "drv_001",
    "name": "Jane Smith",
    "rating": 4.9,
    "vehicle": {
      "make": "Maruti",
      "model": "Swift",
      "plate": "KA01AB1234",
      "color": "White"
    }
  },
  
  "pickup": {...},
  "destination": {...},
  
  "started_at": "2025-12-20T10:05:00Z",
  "estimated_arrival": "2025-12-20T10:25:00Z",
  
  "current_location": {
    "lat": 12.945000,
    "lng": 77.620000,
    "updated_at": "2025-12-20T10:15:30Z"
  }
}

Get Active Trip (GET /trips/active)

GET /trips/active
Headers:
  X-User-ID: usr_456

Response: 200 OK
{
  "trip": {
    "trip_id": "trp_001",
    "status": "IN_PROGRESS",
    ...
  }
}

Response: 404 Not Found (if no active trip)
{
  "error": "NO_ACTIVE_TRIP"
}

Accept Offer & Create Trip

Driver clicks "Accept" in app
  |
POST /trips/accept {offer_id}
  |
Trip Service:
  1. Validate offer exists in Redis
  2. Check offer not expired
  3. Atomic Redis operation (Lua):
     - Check driver not locked
     - Check offer status = PENDING
     - Set offer = ACCEPTED
     - Lock driver
  4. Insert trip record in Postgres (idempotent)
  5. Write to Redis caches (active trip bindings)
  6. Publish trip.created event to Kafka
  7. Return 201 with trip details
  ↓
Matchmaking Service consumes trip.created:
  - Cancel other pending offers
  - Release other driver locks
  |
Notification Service:
  - Send push to rider "Driver assigned"
  - Send SMS with driver details

Start Trip

Driver arrives at pickup
  |
Rider shares OTP: "1234"
  |
Driver enters OTP in app
  |
POST /trips/{trip_id}/start {otp, location}
  |
Trip Service:
  1. Validate trip exists, status = DRIVER_ASSIGNED
  2. Verify OTP matches Redis cache
  3. Acquire trip lock in Redis
  4. Update Postgres:
     - trips.status = IN_PROGRESS
     - trips.started_at = NOW()
  5. Update Redis cache
  6. Write to trip_state_transitions (audit)
  7. Publish trip.started event
  8. Release lock
  |
Driver Supply Service:
  - Mark driver.status = on_trip
  |
Notification Service:
  - Notify rider "Trip started"
  |
Driver app starts sending location updates every 5s

Near Real-time Location Updates

Driver app (every 5 seconds):
  |
Batch 6 location points
  |
PATCH /trips/{trip_id}/location {locations[]}
  |
Trip Service:
  1. Validate trip IN_PROGRESS
  2. Write to Redis GEOHASH (fast cache)
  3. Publish trip.location_updated event (async)
  4. Return 202 Accepted
  |
Async Worker consumes event:
  - Batch insert to trip_locations table
  - 1000 locations per batch
  |
SSE/WebSocket Server consumes event:
  - Push to rider's active WebSocket connection
  - Rider sees driver moving on map

End Trip & Payment

Driver arrives at destination
  |
Driver clicks "End Trip"
  |
POST /trips/{trip_id}/end {dropoff, odometer}
  |
Trip Service:
  1. Validate trip IN_PROGRESS
  2. Acquire trip lock
  3. Calculate metrics:
     - distance_km (from GPS breadcrumbs)
     - duration_sec (started_at - now)
  4. Call Pricing Service:
     GET /pricing/calculate-fare
     {distance_km, duration_sec, surge, vehicle_type}
  5. Update Postgres:
     - trips.status = COMPLETED
     - trips.ended_at = NOW()
     - trips.distance_km = 8.5
     - trips.duration_sec = 1200
     - trips.fare_id = fare_123
  6. Publish trip.completed event
  7. Return fare breakdown
  |
Payment Service consumes trip.completed:
  - Create payment intent
  - Redirect rider to payment
  |
Driver Supply Service:
  - Mark driver.status = online (available)
  |
Notification Service:
  - Send receipt to rider
  - Prompt for rating

Cancel Trip

Rider clicks "Cancel" (or Driver cancels)
  |
POST /trips/{trip_id}/cancel {cancelled_by, reason}
  |
Trip Service:
  1. Validate trip not COMPLETED
  2. Acquire trip lock
  3. Call Policy Service:
     GET /policies/cancellation-fee
     {status, cancelled_by, time_since_assigned}
     -> Returns: {fee: 20, reason: "..."}
  4. Update Postgres:
     - trips.status = CANCELLED
     - trips.cancelled_by = RIDER
     - trips.cancellation_fee = 20
  5. Publish trip.cancelled event
  6. Return cancellation details
  |
Payment Service:
  - Charge cancellation fee if applicable
  |
Driver Supply Service:
  - Mark driver available
  |
Matchmaking Service:
  - Release offer locks (if not started yet)
  |
Notification Service:
  - Notify both parties

Cache Strategy

Request: GET /trips/{trip_id}

Layer 1: Redis (Hot Cache)
  ├─ Check: trip:active:{city}:{trip_id}
  ├─ Hit: Return immediately (5ms)
  └─ Miss: Go to Layer 2

Layer 2: Postgres (Source of Truth)
  ├─ Query: SELECT * FROM trips WHERE trip_id = ?
  ├─ Hit: Return + Write to Redis (50ms)
  └─ Miss: 404 Not Found

Cache Invalidation:
  ├─ On state change: Update Redis + Postgres
  ├─ On trip end: TTL expires in 1 hour
  └─ On trip cancel: Delete from Redis
State Change (e.g., trip started):
  1. Acquire lock
  2. Write to Postgres (source of truth)
  3. Write to Redis (invalidate + update)
  4. Publish event to Kafka
  5. Release lock
  6. Return to client

If Redis write fails:
  - Log error
  - Continue (Postgres is source of truth)
  - Next read will cache miss -> rebuild from Postgres

Race cases

10:00:00 - Driver clicks "Cancel" (poor network, slow request) 10:00:01 - Rider clicks "Cancel" (request arrives first)

Expected Behaviour:

  • Request 1 (Rider): Acquire lock -> Process -> Update -> Release
  • Request 2 (Driver): Try lock -> LOCKED -> Wait/Retry
  • Request 2: Acquire lock -> Read status = CANCELLED -> Abort
  • Result: Only one cancellation processed

10:05:00 - Driver clicks "Start Trip" (at pickup location) 10:05:00 - Rider clicks "Cancel" (changed mind)

Expected:

  • Request 1 (Start): Acquire lock -> Update to IN_PROGRESS -> Release
  • Request 2 (Cancel): Try lock -> LOCKED -> Wait
  • Request 2: Acquire lock -> Read status = IN_PROGRESS
  • Request 2: Validation fails: "Cannot cancel in-progress trip"
  • Result: Trip correctly started, cancel rejected

10:25:00 - Driver clicks "End Trip" 10:25:00 - Driver clicks "End Trip" again (double-click / network retry)

Expected:

  • Request 1: Acquire lock -> Process -> Update -> Publish -> Release
  • Request 2: Try lock -> LOCKED -> Wait
  • Request 2: Acquire lock -> Read status = COMPLETED -> Abort (idempotent)
  • Result: Only one payment miss -> rebuild from Postgres


#### Race cases

10:00:00 - Driver clicks "Cancel" (poor network, slow request)
10:00:01 - Rider clicks "Cancel" (request arrives first)

Expected Behaviour:
- Request 1 (Rider): Acquire lock -> Process -> Update -> Release
- Request 2 (Driver): Try lock -> LOCKED -> Wait/Retry
- Request 2: Acquire lock -> Read status = CANCELLED -> Abort
- Result: Only one cancellation processed

---

10:05:00 - Driver clicks "Start Trip" (at pickup location)
10:05:00 - Rider clicks "Cancel" (changed mind)

Expected:
- Request 1 (Start): Acquire lock -> Update to IN_PROGRESS -> Release
- Request 2 (Cancel): Try lock -> LOCKED -> Wait
- Request 2: Acquire lock -> Read status = IN_PROGRESS
- Request 2: Validation fails: "Cannot cancel in-progress trip"
- Result: Trip correctly started, cancel rejected

---

10:25:00 - Driver clicks "End Trip"
10:25:00 - Driver clicks "End Trip" again (double-click / network retry)

Expected:
- Request 1: Acquire lock -> Process -> Update -> Publish -> Release
- Request 2: Try lock -> LOCKED -> Wait
- Request 2: Acquire lock -> Read status = COMPLETED -> Abort (idempotent)
- Result: Only one payment

Matchmaking

(MVP)

We start off with 3 stage pipeline:

  • Candidate List Generation (which drivers are nearby)
  • Filtering (eligibility check)
  • Ranking

Candidate Generation

Inputs:

  • pickup location (lat/lng)
  • vehicle_type _ city_id

Mechanism:

  • H3 cell lookup (2-3 resolutions)
  • kRing expansion
cells = h3.kRing(pickup_cell, ring=0..N)
drivers = UNION(ZRANGEBYSCORE drivers:h3:{cell})

The Sorted SET works, because it automatically would filter drivers whose location pings aren't new, much like LRU.

Filtering

Inputs:

  • driver metadata

Filtering Criteria:

  • driver.status == online
  • vehicle_type matches
  • last_seen < 10s
  • in_trip
  • has_offer

For each of these we can have feature flags

  • enable_fairness Turn fairness on/off
  • enable_multi_offer Fan-out vs sequential
  • max_offers_per_attempt Control blast radius
  • max_radius_per_attempt Retry aggressiveness
  • enable_maps_eta Future upgrade

Ranking

score =
  w_distance * distance_score +
  w_recency  * recency_score +
  w_fairness * fairness_score +
  w_quality  * quality_score

Reward Control

This allows the system to control how the system rewards good customers and drivers

There could be multiple ways to control this:

  • Tiered Queues with differing consumption Rate
  • Better feature controls to improve the search

In this, I am using the second option, its easier and probably cheaper if tuned.

Feature Controls:

  • Search Radius deltas
  • More Results in Candidates

Matchmaking must never scan the world. It must only touch pre-shaped memory that already reflects reality.

Driver Supply maintains:

  1. Spatial locality
  2. Temporal freshness
  3. Driver eligibility
  4. Pre-aggregation
  5. Shard alignment

Matchmaking consumes only the already curated view + some real time data


Partitioning for location data

Region -> City -> Vehicle Type -> H3 Cell -> Drivers
Level Why
Region Legal + latency + isolation
City Surge, policy, ops ownership
Vehicle Matching correctness
H3 cell Spatial pruning
Driver Unit of supply

GEO strategy

Using H3, because its easier and cheaper with a bit of accuracy trade-off

two resolutions, minimum.

Purpose H3 Resolution
Matching r8 (~460m)
Pre-aggregation r7 (~1.2km)
  • r8 is small enough to avoid false positives
  • r7 is stable enough to compute trends and load

There are other granual ways to calculate more precise Locations, to determine things like, which side of the road, more granular locations at airports etc.

OpenStreetMap xml can be converted to Nodes and Edges, and we can triangulate based on, location data, OSM node values.

Driver Supply in-memory layout

Hot path: matching index

drivers:h3:{city}:{vehicle}:{h3_r8}
  - ZSET(driver_id -> last_seen_ts)

This is what Matchmaking hits. There can be 2 instances of Driver Supply Service - following a CQRS pattern.

A cluster of instances can read the data from cache. This way, the ownership of the data doesn't change, and we don't hit the write path.

Incoming Request -> Nginx -> (API Based Route Splitting) -> [Write Cluster + Read Cluster]

Guarantees provided:

  • Only online drivers
  • Only correct vehicle
  • Time-filterable
  • O(log N)

Metadata side-channel

driver:meta:{city}:{driver_id}
  - HASH

Pre-computation:

Cell-level supply snapshot (updated continuously)

For each (city, vehicle, h3_r7):

{
  "active_drivers": 42,
  "avg_last_seen_sec": 3.1,
  "busy_ratio": 0.28,
  "acceptance_rate": 0.81
}

Stored as:

supply:snapshot:{city}:{vehicle}:{h3_r7}

Updated incrementally, not recomputed.

Demand vs supply signal (for surge + throttling)

Driver Supply emits:

{
  "h3_r7": "89283082",
  "vehicle": "AUTO",
  "drivers": 42,
  "bookings_5m": 71,
  "pressure": 1.69
}
  • Kafka
  • Pricing
  • Matchmaking (for radius / offer limits)

Partitioning strategy (Redis, Kafka, CPU)

Redis

Shard by city first. Always.

Redis Cluster
 ├── blr-shard-1
 ├── blr-shard-2
 ├── del-shard-1
 ├── mum-shard-1

Key pattern ensures co-location:

drivers:h3:blr:AUTO:89283082837ffff

No cross-shard fan-out for matching.

Kafka

Topics

Topic Partition key
driver.location driver_id
booking.created booking_id
supply.snapshot city + h3_r7
offers.created booking_id

Why not city-only?

  • booking lifecycle must be ordered
  • driver updates must be independent

Pre-Aggreators and Ownership

Task Ownership
Spatial bucketing Driver Supply
Driver freshness Driver Supply
Busy/idle Driver Supply
Hotspots Stream processor
Candidate ranking Matchmaking
Offer lifecycle Matchmaking
Trip binding Trip Service

Handling Spikes

This assumes generic scenarios which can lead to spike, ignoring region specific be market behaviour

  • Rains
  • Large Events
  • Traffic or Road Closures

Application Metrics to Track:

  • N(=10)x booking.created events
  • Same cells hit repeatedly
  • Offer fanout increases
  • Drivers get spammed
  • Acceptance drops further
  1. Control fanout
fanout = min(
  MAX_FANOUT,
  available_drivers * acceptance_rate_estimate
)
  1. Hard Cap on retries
  • Max Retry Attempts
  • Max Radius
  • Max Time
  1. Driver Supply Tanks
  • Define SLA for Demand Supply Ratio of time buckets like 1m, 5m.
  • Bail early if thresholds exceed
  • Or Degrade Experience by Queueing
  1. Punishment Rewards (Rate Limitter)
  • Driver location updates have stopped without logging off
  • Driver rejects too many bookings, Temporarily ban
  • Customer books and cancels multiple times in time interval
  • Historic behavior analysis which can be used based on Tiered Queues if needed.
    • Such people get lesser priority

Driver Movement Tracking

Depending on Supply Demand, we can adaptively increase the resolution of the H3.

  1. Driver app sends a location ping

Example payload (batched, every ~1s or 2s):

{ "driver_id": "drv_001", "lat": 12.93491, "lng": 77.61088, "speed": 32.4, "accuracy": 8, "ts": 1703001234567 }

This hits:

PUT /drivers/location

Handled only by Driver Supply Service.

  1. Driver Supply computes the H3 cell (pure function)

Inside Driver Supply:

new_cell = h3.geo_to_h3(lat, lng, RESOLUTION_R8)
  1. Driver Supply loads the last known cell

From Redis (or in-memory cache):

driver:last_cell:{driver_id} -> old_cell

driver:last_cell:drv_001 -> 89283082837ffff
  1. Cell comparison (this is the gate) if new_cell == old_cell:

    driver still in same cell

    return 204 # do nothing

Failure semantics

Driver Supply down?

  • Matching uses last-known state
  • Time filters naturally decay supply
  • Graceful degradation

Redis shard down?

  • City-level isolation
  • Surge throttles bookings
  • No cross-city blast radius

Kafka lag?

  • Supply snapshots lag -> pricing increases
  • Matching still works locally

Service Casade Failure

  • Circuit Breakers for internal apis
  • CB for external endpoings

SET NX PX

Although set nx can be used, along with Redilock to implement an expirable key, it might become slow, because of locking.

This can be avoided with using Atomic Sorted Set acting as a list/queue, with BLPUSH, or ZSET with a Counter (incr)

tchPad

Requirements

Functional Requirements:

  • Real-time driver location ingestion: each online driver sends 1–2 updates per second
  • Ride request flow: pickup, destination, tier, payment method
  • Dispatch/Matching: assign drivers within <1s p95; reassign on decline/timeout
  • Dynamic surge pricing: per geo-cell, based on supply–demand
  • Trip lifecycle: start, pause, end, fare calculation, receipts
  • Payments orchestration: integrate with external PSPs, retries, reconciliation
  • Notifications: push/SMS for key ride states
  • Admin/ops tooling: feature flags, kill-switches, observability

Non-Functional Requirements:

  • Latency SLOs:
    • Dispatch decision: p95 ≤ 1s
    • End-to-end request→acceptance: p95 ≤ 3s
    • Availability: 99.95% for dispatch APIs
  • Scale assumptions:
    • 300k concurrent drivers globally
    • 60k ride requests/minute peak
    • 500k location updates/second globally
  • Multi-region: region-local writes, failover handling, no cross-region sync on hot path
  • Compliance: PCI, PII encryption, GDPR/DPDP

Assumptions:

  • Most rides will be within a 60-80km radius.
  • Instead of OTP, we use static PINs
  • Drivers are charged platform fees per ride
  • Fleet management is not considered, how a driver gets a cab is out of scope.
  • Discount codes are not considered
  • Chat can be considered (but real-time is out of scope)
  • Assign drivers within <1s p95, wut!! (from the scaling req. assuiming) the time to dispatch the "Book" request from the user to the drivers.
    • We can't really assign a driver within <1s, unless they are self driving cars, in which case, maybe 3s.
    • The search radius to broadcast the ride booking can also be extended
  • Assuming 1 minute TTL for a ride request, every 5-15-30s it expands the broadcast radius by 5km.
  1. Build the workflows, think about points of entry, from the UI
  2. Identify entities (stateful nouns)
  3. Data modelling based on Access patterns
  4. Consistency Evaluation and Concurrency support
  5. Scale and Durability
  6. Tech decisions
  7. Observability

All users of the platform has to be logged in from their devices. All endpoints are authenticated requiring some form of tokens.

Ridees:

  • Users can search for destination locations (within the max radius, and intercity/interstate travel policies and boundaries)
  • User sees a list of ride types, with estimated prices or price-ranges
    • Ride types can be sorted by most availble or cheapest or user preferences. (this can be controlled based on country/cultures)
    • Pricing can vary based on surge (supply demand, peak hours in specific regions)
  • Ride requests are sent to drivers in the area nearby
  • Ride request gets accepted or times-out or user cancels it.
  • User can look at ETA of the ride to the location
  • User can also look at ETA to destination while in transit
  • Users are charged when the ride ends. All bookings are blocked if payment is pending from a previous trip.
  • User will have payment options, similar to order payment flow, cards, upi and other PSP integrations with callback mechanisms and retries
  • User can share their trip location updates with Friends/Point of Contacts.

Drivers:

  • Drivers can go on/off duty
  • Drivers get booking notifications containing (to-from-estimated fare)
  • Drivers can look at hotspots within X km radius
  • Drivers can see ride history and amount received - platform fees
  • Drivers can be banned based on policies and behaviours.

Others:

  • Notifications for login's
  • Send notifications to users on ride booking (Booked, Retry, Ended)
  • Send notifications for payment completions, payment status
  • Send notifications to Point of Contacts, periodically sending user location and trip details.
  • Send notifications to drivers for ride bookings, nearby hotspots, different POS at certain times like movie theaters, stations etc.
  • Send notifications to users based on travel history.
  • Alert drivers or users to confirm for safety based on certain factors: (booking in progress too long, route and destination not aligning, other patterns drivers use to game system)
  • Fair scoring policies, based on identified factors, for drivers.

Ridees, Drivers, Vehicles, Booking, Location, Pricing

Idempotency Keys for:

  • BookingRequest
  • Payments
  • ChatSession

Critical points:

  • Storing geo cordinates
  • Driver location tracking, moving between geo regions
  • Area specific geo resolution selection
  • Matching scores (pre-computed + on the fly)
  • Pricing policies attached to users, locations, (pre-computed and dynamic on the fly)
  • Re-hydration of in-memory data in case of crashes
  • Total Re-conciliation of orders, money transactions
  • Handling hotspots

System Numbers and Estimates

  • Kafka numbers with group commit
  • Benchmark numbers from RedPanda
  • 32G RAM, 1Gbps NIC, 100B messages, assuming a 20% drop from 130K msg/s = 50K msg/s per partition across 6 partitions
  • Ride Request: 1K RPS, Assuming 3 events per booking, 3K msgs/sec , with 12 partitions , its 250 msgs/sec
  • Kafka Tail Latency is around 200ms at p95 (on i3en.large 16Gb RAM, 25Gbps, 2v CPU), given leader-relection or broker crashes on High Throughput systems.
  • API requests Round Trip - 100ms
  • 2 DB Writes - 200ms

Since the application is global and requires no cross-region syncs, per region these numbers will be less, because of region specific deployments.

Matching Engine:

Caching Opts: Per driver location update (worst case)

Typical pipeline:

  • HGET driver:state:{id} last_cell
  • ZREM driver:geo:{old_cell} (only if cell changed)
  • ZADD driver:geo:{new_cell}
  • HSET driver:state:{id}
  • (Optional) EXPIRE driver:state:{id}

500,000 pings/sec × 4 ops = 2M Ops (Globally)

When split across region this number would come down, depending on partitioning. Assuming 10 major regions and 10 hotspots: 200K Ops

Redis benchmarks:

$> redis-benchmark -t get -n 100000 -c 50
====== GET ======
  100000 requests completed in 0.90 seconds
  50 parallel clients
  3 bytes payload
  keep alive: 1
  host configuration "save": 3600 1 300 100 60 10000
  host configuration "appendonly": no
  multi-thread: no

Latency by percentile distribution:
0.000% <= 0.087 milliseconds (cumulative count 1)
50.000% <= 0.223 milliseconds (cumulative count 59475)
75.000% <= 0.239 milliseconds (cumulative count 75730)
87.500% <= 0.263 milliseconds (cumulative count 89721)
93.750% <= 0.295 milliseconds (cumulative count 94374)
96.875% <= 0.343 milliseconds (cumulative count 97031)
98.438% <= 0.383 milliseconds (cumulative count 98599)
99.219% <= 0.423 milliseconds (cumulative count 99280)
99.609% <= 0.559 milliseconds (cumulative count 99617)
99.805% <= 1.015 milliseconds (cumulative count 99809)
99.902% <= 1.455 milliseconds (cumulative count 99903)
99.951% <= 1.951 milliseconds (cumulative count 99952)
99.976% <= 2.279 milliseconds (cumulative count 99976)
99.988% <= 2.455 milliseconds (cumulative count 99988)
99.994% <= 2.527 milliseconds (cumulative count 99995)
99.997% <= 2.823 milliseconds (cumulative count 99997)
99.998% <= 3.391 milliseconds (cumulative count 99999)
99.999% <= 3.543 milliseconds (cumulative count 100000)
100.000% <= 3.543 milliseconds (cumulative count 100000)

Cumulative distribution of latencies:
0.003% <= 0.103 milliseconds (cumulative count 3)
20.062% <= 0.207 milliseconds (cumulative count 20062)
94.939% <= 0.303 milliseconds (cumulative count 94939)
99.104% <= 0.407 milliseconds (cumulative count 99104)
99.542% <= 0.503 milliseconds (cumulative count 99542)
99.658% <= 0.607 milliseconds (cumulative count 99658)
99.697% <= 0.703 milliseconds (cumulative count 99697)
99.733% <= 0.807 milliseconds (cumulative count 99733)
99.780% <= 0.903 milliseconds (cumulative count 99780)
99.804% <= 1.007 milliseconds (cumulative count 99804)
99.835% <= 1.103 milliseconds (cumulative count 99835)
99.853% <= 1.207 milliseconds (cumulative count 99853)
99.873% <= 1.303 milliseconds (cumulative count 99873)
99.896% <= 1.407 milliseconds (cumulative count 99896)
99.913% <= 1.503 milliseconds (cumulative count 99913)
99.926% <= 1.607 milliseconds (cumulative count 99926)
99.934% <= 1.703 milliseconds (cumulative count 99934)
99.942% <= 1.807 milliseconds (cumulative count 99942)
99.948% <= 1.903 milliseconds (cumulative count 99948)
99.956% <= 2.007 milliseconds (cumulative count 99956)
99.963% <= 2.103 milliseconds (cumulative count 99963)
99.997% <= 3.103 milliseconds (cumulative count 99997)
100.000% <= 4.103 milliseconds (cumulative count 100000)

Summary:
  throughput summary: 110987.79 requests per second
  latency summary (msec):
          avg       min       p50       p95       p99       max
        0.233     0.080     0.223     0.311     0.407     3.543




$> redis-benchmark -t get -n 100000 -c 50 -P 8
====== GET ======
  100000 requests completed in 0.14 seconds
  50 parallel clients
  3 bytes payload
  keep alive: 1
  host configuration "save": 3600 1 300 100 60 10000
  host configuration "appendonly": no
  multi-thread: no

Latency by percentile distribution:
0.000% <= 0.111 milliseconds (cumulative count 16)
50.000% <= 0.263 milliseconds (cumulative count 54552)
96.875% <= 0.647 milliseconds (cumulative count 96912)
99.994% <= 2.607 milliseconds (cumulative count 100000)
100.000% <= 2.607 milliseconds (cumulative count 100000)

Cumulative distribution of latencies:
0.000% <= 0.103 milliseconds (cumulative count 0)
70.888% <= 0.303 milliseconds (cumulative count 70888)
83.032% <= 0.407 milliseconds (cumulative count 83032)
100.000% <= 3.103 milliseconds (cumulative count 100000)

Summary:
  throughput summary: 724637.69 requests per second
  latency summary (msec):
          avg       min       p50       p95       p99       max
        0.314     0.104     0.263     0.543     1.063     2.607
      
$> redis-benchmark -t get -n 100000 -c 50 --threads 4
====== GET ======
  100000 requests completed in 0.50 seconds
  50 parallel clients
  3 bytes payload
  keep alive: 1
  host configuration "save": 3600 1 300 100 60 10000
  host configuration "appendonly": no
  multi-thread: yes
  threads: 4

Latency by percentile distribution:
0.000% <= 0.023 milliseconds (cumulative count 9)
50.000% <= 0.111 milliseconds (cumulative count 51821)
99.999% <= 22.911 milliseconds (cumulative count 100000)
100.000% <= 22.911 milliseconds (cumulative count 100000)

Cumulative distribution of latencies:
32.283% <= 0.103 milliseconds (cumulative count 32283)
9.531% <= 1.807 milliseconds (cumulative count 99531)
9.992% <= 10.103 milliseconds (cumulative count 99992)
100.000% <= 23.103 milliseconds (cumulative count 100000)

Summary:
  throughput summary: 198807.16 requests per second
  latency summary (msec):
          avg       min       p50       p95       p99       max
        0.141     0.016     0.111     0.199     0.791    22.911
      

$> redis-benchmark -t get -n 100000 -c 50 --threads 4 -P 4

Summary:
  throughput summary: 396825.38 requests per second
  latency summary (msec):
          avg       min       p50       p95       p99       max
        0.245     0.024     0.207     0.399     1.463     4.535
$>  redis-benchmark -t set -n 100000 -c 50 --threads 4 -P 4
====== SET ======
  100000 requests completed in 0.25 seconds
  50 parallel clients
  3 bytes payload
  keep alive: 1
  host configuration "save": 3600 1 300 100 60 10000
  host configuration "appendonly": no
  multi-thread: yes
  threads: 4

Latency by percentile distribution:
0.000% <= 0.031 milliseconds (cumulative count 24)
50.000% <= 0.391 milliseconds (cumulative count 50984)
75.000% <= 0.431 milliseconds (cumulative count 75104)
87.500% <= 0.455 milliseconds (cumulative count 89184)
93.750% <= 0.479 milliseconds (cumulative count 94160)
96.875% <= 0.551 milliseconds (cumulative count 96888)
98.438% <= 0.751 milliseconds (cumulative count 98452)
99.219% <= 1.135 milliseconds (cumulative count 99220)
99.609% <= 1.399 milliseconds (cumulative count 99620)
99.805% <= 1.543 milliseconds (cumulative count 99812)
99.902% <= 2.031 milliseconds (cumulative count 99912)
99.951% <= 2.199 milliseconds (cumulative count 99956)
99.976% <= 2.447 milliseconds (cumulative count 99976)
99.988% <= 2.487 milliseconds (cumulative count 99988)
99.994% <= 2.503 milliseconds (cumulative count 99996)
99.997% <= 2.511 milliseconds (cumulative count 100000)
100.000% <= 2.511 milliseconds (cumulative count 100000)

Cumulative distribution of latencies:
2.216% <= 0.103 milliseconds (cumulative count 2216)
10.160% <= 0.207 milliseconds (cumulative count 10160)
17.368% <= 0.303 milliseconds (cumulative count 17368)
59.720% <= 0.407 milliseconds (cumulative count 59720)
95.780% <= 0.503 milliseconds (cumulative count 95780)
97.556% <= 0.607 milliseconds (cumulative count 97556)
98.128% <= 0.703 milliseconds (cumulative count 98128)
98.764% <= 0.807 milliseconds (cumulative count 98764)
98.964% <= 0.903 milliseconds (cumulative count 98964)
99.064% <= 1.007 milliseconds (cumulative count 99064)
99.180% <= 1.103 milliseconds (cumulative count 99180)
99.376% <= 1.207 milliseconds (cumulative count 99376)
99.488% <= 1.303 milliseconds (cumulative count 99488)
99.628% <= 1.407 milliseconds (cumulative count 99628)
99.752% <= 1.503 milliseconds (cumulative count 99752)
99.864% <= 1.607 milliseconds (cumulative count 99864)
99.872% <= 1.703 milliseconds (cumulative count 99872)
99.884% <= 2.007 milliseconds (cumulative count 99884)
99.920% <= 2.103 milliseconds (cumulative count 99920)
100.000% <= 3.103 milliseconds (cumulative count 100000)

Summary:
  throughput summary: 398406.41 requests per second
  latency summary (msec):
          avg       min       p50       p95       p99       max
        0.382     0.024     0.391     0.495     0.975     2.511

From the above, $> redis-benchmark -t get -n 100000 -c 50 --threads 4 -P 4

seems like a good tradeoff, at 0.4ms p95, with pipeline, 3-4 ops/s batched

Cockroach DB Bench Blog: Blog

Next, we examined an apples to apples comparison of latency under the same 850 warehouse workload between CockroachDB 2.0 and CockroachDB 1.1 with a three node (16 vcpus/node) setup:

Metric, CRDB 1.1, CRDB 2.0, % Improvement
Average Latency (p50), 201,67, 67%
95% Latency (p95), 671, 151, 77%
99% Latency (p99), 1,140, 210, 82%

These results were achieved at the same isolation level (i.e., serializable), number of nodes (i.e. 3), number of warehouses (i.e., 850).

For the same load, CockroachDB 2.0 reduces latency by as much as 82% when compared to CockroachDB 1.1. Viewed another way, CockroachDB 2.0 improves response time by 544% (CockroachDB 1.1 p99/CockroachDB 2.0 p99) when compared to 1.1.

Isolation Levels

Most databases present a choice of several transaction isolation levels, offering a tradeoff between correctness and performance. CockroachDB provides strong (“SERIALIZABLE”) isolation by default to ensure that your application always sees the data it expects.

With years of improvement in DB, if SERIALIZABLE is the default, Thank you for your service, RoachDb

Display the source blob
Display the rendered blob
Raw
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 8170.660740162621 8478.46935467386" width="16341.321480325241" height="16956.93870934772"><!-- svg-source:excalidraw --><metadata></metadata><defs><style class="style-fonts">
@font-face { font-family: Excalifont; src: url(data:font/woff2;base64,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); }
@font-face { font-family: Virgil; src: url(data:font/woff2;base64,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); }
@font-face { font-family: Cascadia; src: url(data:font/woff2;base64,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); }</style></defs><rect x="0" y="0" width="8170.660740162621" height="8478.46935467386" fill="#ffffff"></rect><g stroke-linecap="round" transform="translate(242.36799212770484 6391.951168348) rotate(0 98 252)"><path d="M32 0 C61.78 0.23, 91.67 1.75, 164 0 M32 0 C75.09 1.27, 119.35 1.29, 164 0 M164 0 C186.71 -1.1, 197.21 11.13, 196 32 M164 0 C186.07 1.29, 195.57 12.53, 196 32 M196 32 C193.87 186.28, 195.11 343.47, 196 472 M196 32 C196.01 138.56, 195.88 245.19, 196 472 M196 472 C197.69 491.8, 187 503.07, 164 504 M196 472 C195.77 495.44, 185.63 505.86, 164 504 M164 504 C131.01 502.17, 100.1 503.09, 32 504 M164 504 C132.81 504.12, 100.97 503.73, 32 504 M32 504 C11.79 503.47, -0.27 493.63, 0 472 M32 504 C10.89 506.25, 2.15 495.08, 0 472 M0 472 C1.4 369.22, 2.02 268.97, 0 32 M0 472 C-0.14 327.1, 0.11 181.26, 0 32 M0 32 C-0.62 11.12, 10.06 -0.03, 32 0 M0 32 C0.53 12.19, 8.37 2.08, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(247.36799212770484 6581.451168348) rotate(0 76.2750015258789 62.5)"><text x="0" y="17.619999999999997" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Gateway:</text><text x="0" y="42.62" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">- TLS</text><text x="0" y="67.62" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">- WAF</text><text x="0" y="92.62" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">- Rate limits</text><text x="0" y="117.62" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">- RequestID inj</text></g><g stroke-linecap="round" transform="translate(239.8095184345243 7708.909465740269) rotate(0 57.5 252)"><path d="M28.75 0 C46.36 1.63, 60.28 0.49, 86.25 0 M28.75 0 C43.15 -0.77, 55.31 0.05, 86.25 0 M86.25 0 C106.84 1.67, 115.82 11.5, 115 28.75 M86.25 0 C104.85 -0.66, 115.59 9.98, 115 28.75 M115 28.75 C114.04 176.96, 112.93 324.19, 115 475.25 M115 28.75 C115.02 147.1, 114.79 265.04, 115 475.25 M115 475.25 C115.35 493.76, 103.65 505.55, 86.25 504 M115 475.25 C113.53 493.37, 104.77 502.6, 86.25 504 M86.25 504 C65.47 502.86, 46.44 504.86, 28.75 504 M86.25 504 C66.32 503.46, 44.7 504.6, 28.75 504 M28.75 504 C11.46 504.44, 0.11 495.27, 0 475.25 M28.75 504 C8.61 503.51, -0.37 493.93, 0 475.25 M0 475.25 C-0.95 360.37, -0.2 245.7, 0 28.75 M0 475.25 C-0.33 306.55, -0.54 137.77, 0 28.75 M0 28.75 C-1.57 7.8, 11.45 -0.6, 28.75 0 M0 28.75 C0.74 11, 8.46 -1.86, 28.75 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(255.1595169086454 7948.409465740269) rotate(0 42.150001525878906 12.5)"><text x="42.150001525878906" y="17.619999999999997" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Gateway</text></g><g stroke-linecap="round" transform="translate(3903.9696719170556 7270.135918888482) rotate(0 57.5 252)"><path d="M28.75 0 C42.57 -2.08, 51.81 -0.08, 86.25 0 M28.75 0 C43.94 -0.85, 57.95 0.36, 86.25 0 M86.25 0 C105.27 1.19, 116.26 8.53, 115 28.75 M86.25 0 C105.85 0.97, 113.16 7.73, 115 28.75 M115 28.75 C114.47 120.49, 115.02 214.12, 115 475.25 M115 28.75 C114.62 157.95, 114.72 287.54, 115 475.25 M115 475.25 C114.26 494.39, 106.92 505.1, 86.25 504 M115 475.25 C115.03 495.98, 107.58 504.44, 86.25 504 M86.25 504 C68.63 502.68, 52.71 505.17, 28.75 504 M86.25 504 C64.94 503.48, 43.45 504.98, 28.75 504 M28.75 504 C7.95 505.21, 0.81 495.94, 0 475.25 M28.75 504 C8.09 505.57, 1.16 494.94, 0 475.25 M0 475.25 C1.79 379.22, 1.31 282.06, 0 28.75 M0 475.25 C-1.52 313.46, -1.45 152.19, 0 28.75 M0 28.75 C0.47 8.25, 10.9 1.15, 28.75 0 M0 28.75 C1.67 10.6, 9.23 2.01, 28.75 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(3919.3196703911767 7509.635918888482) rotate(0 42.150001525878906 12.5)"><text x="42.150001525878906" y="17.619999999999997" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Gateway</text></g><g stroke-linecap="round" transform="translate(2253.464592891413 7756.4796294968855) rotate(0 57.5 252)"><path d="M28.75 0 C47.15 -0.71, 65.16 1.5, 86.25 0 M28.75 0 C41.09 -0.48, 52.84 -0.31, 86.25 0 M86.25 0 C104.68 1.56, 116.87 9.03, 115 28.75 M86.25 0 C104.65 1.97, 115.11 10.26, 115 28.75 M115 28.75 C115.27 122.96, 116.19 217.13, 115 475.25 M115 28.75 C113.82 165.12, 114.06 301.98, 115 475.25 M115 475.25 C114.27 492.44, 103.51 503.02, 86.25 504 M115 475.25 C112.8 494, 107.23 504.28, 86.25 504 M86.25 504 C68.25 504.76, 48.01 505.97, 28.75 504 M86.25 504 C71.6 504.14, 58.31 505.22, 28.75 504 M28.75 504 C8.02 503.85, -1.92 492.96, 0 475.25 M28.75 504 C11.7 505.69, 2.2 495.72, 0 475.25 M0 475.25 C1.02 337.85, 1.28 201.16, 0 28.75 M0 475.25 C0.58 297.49, 0.66 118.98, 0 28.75 M0 28.75 C1.8 8.66, 11.33 1.16, 28.75 0 M0 28.75 C1.59 11.29, 8.16 0.76, 28.75 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(2268.814591365534 7970.9796294968855) rotate(0 42.150001525878906 37.5)"><text x="42.150001525878906" y="17.619999999999997" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Gateway</text><text x="42.150001525878906" y="42.62" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">+</text><text x="42.150001525878906" y="67.62" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Auth</text></g><g transform="translate(45.335567573583376 6643.123155245918) rotate(0 34.724998474121094 12.5)"><text x="0" y="17.619999999999997" font-family="Virgil, sans-serif, Segoe UI Emoji" font-size="20px" fill="#000000" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Drivers</text></g><g stroke-linecap="round"><g transform="translate(42.54834692507575 6633.470229235938) rotate(0 25.81964520262909 -21.795699329336458)" fill-rule="evenodd"><path d="M13.47 -38.64 C13.47 -38.64, 13.47 -38.64, 13.47 -38.64 M13.47 -38.64 C13.47 -38.64, 13.47 -38.64, 13.47 -38.64 M3.11 -14.53 C10.38 -22.9, 17.66 -31.27, 28.04 -43.2 M3.11 -14.53 C9.53 -21.92, 15.96 -29.31, 28.04 -43.2 M0.61 0.53 C9.85 -10.09, 19.08 -20.71, 35.39 -39.47 M0.61 0.53 C8.16 -8.14, 15.7 -16.81, 35.39 -39.47 M11.24 0.5 C20.22 -9.82, 29.19 -20.14, 40.77 -33.46 M11.24 0.5 C20.48 -10.12, 29.71 -20.74, 40.77 -33.46 M21.87 0.47 C26.92 -5.34, 31.96 -11.14, 44.84 -25.95 M21.87 0.47 C31.01 -10.04, 40.15 -20.55, 44.84 -25.95 M32.5 0.43 C38.27 -6.2, 44.04 -12.83, 48.91 -18.44 M32.5 0.43 C38.84 -6.86, 45.18 -14.15, 48.91 -18.44 M44.45 -1.11 C47.25 -4.34, 50.06 -7.57, 51.66 -9.41 M44.45 -1.11 C46.1 -3.02, 47.76 -4.93, 51.66 -9.41 M0 0 C0 0, 0 0, 0 0 M0 0 C0 0, 0 0, 0 0 M12.04 -0.13 C9.51 -2.34, 6.97 -4.54, 1.47 -9.32 M12.04 -0.13 C8.7 -3.04, 5.35 -5.95, 1.47 -9.32 M24.84 0.39 C20.21 -3.63, 15.59 -7.65, 2.95 -18.64 M24.84 0.39 C20 -3.82, 15.16 -8.02, 2.95 -18.64 M36.12 -0.4 C28.29 -7.2, 20.47 -14.01, 5.18 -27.3 M36.12 -0.4 C28.36 -7.15, 20.59 -13.9, 5.18 -27.3 M46.65 -1.84 C32.49 -14.16, 18.32 -26.48, 9.67 -33.99 M46.65 -1.84 C33.13 -13.6, 19.6 -25.36, 9.67 -33.99 M51.9 -7.88 C40.05 -18.19, 28.19 -28.5, 14.92 -40.03 M51.9 -7.88 C44.06 -14.7, 36.23 -21.51, 14.92 -40.03 M47.34 -22.45 C39.61 -29.17, 31.88 -35.88, 22.43 -44.1 M47.34 -22.45 C39.93 -28.89, 32.53 -35.32, 22.43 -44.1" stroke="#ced4da" stroke-width="1" fill="none"></path><path d="M0 0 C0.92 -4.85, 1.58 -21.76, 5.52 -29.07 C9.46 -36.38, 17.61 -43.34, 23.65 -43.87 C29.69 -44.4, 37.51 -39.05, 41.78 -32.24 C46.05 -25.43, 56.23 -8.39, 49.27 -3.02 C42.31 2.36, 8.21 -0.5, 0 0 M0 0 C0.92 -4.85, 1.58 -21.76, 5.52 -29.07 C9.46 -36.38, 17.61 -43.34, 23.65 -43.87 C29.69 -44.4, 37.51 -39.05, 41.78 -32.24 C46.05 -25.43, 56.23 -8.39, 49.27 -3.02 C42.31 2.36, 8.21 -0.5, 0 0" stroke="#000000" stroke-width="2" fill="none"></path></g></g><mask></mask><g stroke-linecap="round" transform="translate(55.00221776139142 6566.7791814500815) rotate(0 12.612971703843186 11.036350240862703)"><path d="M2.98 3.91 C2.98 3.91, 2.98 3.91, 2.98 3.91 M2.98 3.91 C2.98 3.91, 2.98 3.91, 2.98 3.91 M2.45 16.71 C7.79 10.57, 13.12 4.43, 16.23 0.86 M2.45 16.71 C5.3 13.43, 8.15 10.16, 16.23 0.86 M8.49 21.96 C13.28 16.45, 18.07 10.94, 22.92 5.35 M8.49 21.96 C13.17 16.58, 17.85 11.2, 22.92 5.35 M4.36 19.37 C4.36 19.37, 4.36 19.37, 4.36 19.37 M4.36 19.37 C4.36 19.37, 4.36 19.37, 4.36 19.37 M17.91 20.55 C11.29 14.79, 4.67 9.03, 1.31 6.11 M17.91 20.55 C11.36 14.85, 4.81 9.16, 1.31 6.11 M23.92 15.17 C18.64 10.58, 13.36 5.99, 7.31 0.73 M23.92 15.17 C18.2 10.2, 12.49 5.23, 7.31 0.73" stroke="#ced4da" stroke-width="1" fill="none"></path><path d="M25.23 11.04 C25.23 11.68, 25.16 12.32, 25.03 12.95 C24.91 13.58, 24.71 14.21, 24.47 14.81 C24.22 15.41, 23.9 16, 23.54 16.55 C23.17 17.11, 22.74 17.64, 22.28 18.13 C21.81 18.62, 21.28 19.08, 20.72 19.49 C20.16 19.9, 19.55 20.27, 18.92 20.59 C18.29 20.91, 17.61 21.19, 16.93 21.41 C16.24 21.63, 15.52 21.79, 14.8 21.91 C14.08 22.02, 13.34 22.07, 12.61 22.07 C11.88 22.07, 11.14 22.02, 10.42 21.91 C9.7 21.79, 8.99 21.63, 8.3 21.41 C7.61 21.19, 6.94 20.91, 6.31 20.59 C5.67 20.27, 5.06 19.9, 4.51 19.49 C3.95 19.08, 3.42 18.62, 2.95 18.13 C2.48 17.64, 2.05 17.11, 1.69 16.55 C1.32 16, 1.01 15.41, 0.76 14.81 C0.51 14.21, 0.32 13.58, 0.19 12.95 C0.06 12.32, 0 11.68, 0 11.04 C0 10.4, 0.06 9.75, 0.19 9.12 C0.32 8.49, 0.51 7.86, 0.76 7.26 C1.01 6.66, 1.32 6.07, 1.69 5.52 C2.05 4.96, 2.48 4.43, 2.95 3.94 C3.42 3.45, 3.95 2.99, 4.51 2.58 C5.06 2.17, 5.67 1.8, 6.31 1.48 C6.94 1.16, 7.61 0.88, 8.3 0.67 C8.99 0.45, 9.7 0.28, 10.42 0.17 C11.14 0.06, 11.88 0, 12.61 0 C13.34 0, 14.08 0.06, 14.8 0.17 C15.52 0.28, 16.24 0.45, 16.93 0.67 C17.61 0.88, 18.29 1.16, 18.92 1.48 C19.55 1.8, 20.16 2.17, 20.72 2.58 C21.28 2.99, 21.81 3.45, 22.28 3.94 C22.74 4.43, 23.17 4.96, 23.54 5.52 C23.9 6.07, 24.22 6.66, 24.47 7.26 C24.71 7.86, 24.91 8.49, 25.03 9.12 C25.16 9.75, 25.19 10.72, 25.23 11.04 C25.26 11.36, 25.26 10.72, 25.23 11.04" stroke="#000000" stroke-width="2" fill="none"></path></g><g transform="translate(2432.8774528769604 7996.419355862097) rotate(0 34.724998474121094 12.5)"><text x="0" y="17.619999999999997" font-family="Virgil, sans-serif, Segoe UI Emoji" font-size="20px" fill="#000000" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Drivers</text></g><g stroke-linecap="round"><g transform="translate(2430.0902322284533 7986.7664298521195) rotate(0 25.81964520262909 -21.795699329336458)" fill-rule="evenodd"><path d="M13.47 -38.64 C13.47 -38.64, 13.47 -38.64, 13.47 -38.64 M13.47 -38.64 C13.47 -38.64, 13.47 -38.64, 13.47 -38.64 M3.11 -14.53 C11.57 -24.26, 20.03 -34, 28.04 -43.2 M3.11 -14.53 C8.59 -20.84, 14.08 -27.15, 28.04 -43.2 M0.61 0.53 C10.43 -10.76, 20.25 -22.06, 35.39 -39.47 M0.61 0.53 C10.86 -11.25, 21.1 -23.03, 35.39 -39.47 M11.24 0.5 C17.15 -6.3, 23.06 -13.1, 40.77 -33.46 M11.24 0.5 C17.4 -6.58, 23.56 -13.67, 40.77 -33.46 M21.87 0.47 C27.83 -6.38, 33.78 -13.23, 44.84 -25.95 M21.87 0.47 C28.3 -6.93, 34.73 -14.32, 44.84 -25.95 M32.5 0.43 C37.55 -5.37, 42.6 -11.18, 48.91 -18.44 M32.5 0.43 C36.53 -4.2, 40.55 -8.82, 48.91 -18.44 M44.45 -1.11 C46.43 -3.39, 48.41 -5.67, 51.66 -9.41 M44.45 -1.11 C46.32 -3.27, 48.19 -5.42, 51.66 -9.41 M0 0 C0 0, 0 0, 0 0 M0 0 C0 0, 0 0, 0 0 M12.04 -0.13 C9.02 -2.75, 6.01 -5.38, 1.47 -9.32 M12.04 -0.13 C8.34 -3.35, 4.63 -6.57, 1.47 -9.32 M24.84 0.39 C16.21 -7.11, 7.58 -14.61, 2.95 -18.64 M24.84 0.39 C19.77 -4.02, 14.7 -8.42, 2.95 -18.64 M36.12 -0.4 C25.28 -9.82, 14.44 -19.25, 5.18 -27.3 M36.12 -0.4 C24.67 -10.36, 13.21 -20.32, 5.18 -27.3 M46.65 -1.84 C35.96 -11.14, 25.28 -20.43, 9.67 -33.99 M46.65 -1.84 C38.68 -8.78, 30.7 -15.71, 9.67 -33.99 M51.9 -7.88 C43.51 -15.18, 35.12 -22.47, 14.92 -40.03 M51.9 -7.88 C43.19 -15.46, 34.48 -23.03, 14.92 -40.03 M47.34 -22.45 C40.82 -28.12, 34.3 -33.79, 22.43 -44.1 M47.34 -22.45 C39.45 -29.3, 31.57 -36.16, 22.43 -44.1" stroke="#ced4da" stroke-width="1" fill="none"></path><path d="M0 0 C0.92 -4.85, 1.58 -21.76, 5.52 -29.07 C9.46 -36.38, 17.61 -43.34, 23.65 -43.87 C29.69 -44.4, 37.51 -39.05, 41.78 -32.24 C46.05 -25.43, 56.23 -8.39, 49.27 -3.02 C42.31 2.36, 8.21 -0.5, 0 0 M0 0 C0.92 -4.85, 1.58 -21.76, 5.52 -29.07 C9.46 -36.38, 17.61 -43.34, 23.65 -43.87 C29.69 -44.4, 37.51 -39.05, 41.78 -32.24 C46.05 -25.43, 56.23 -8.39, 49.27 -3.02 C42.31 2.36, 8.21 -0.5, 0 0" stroke="#000000" stroke-width="2" fill="none"></path></g></g><mask></mask><g stroke-linecap="round" transform="translate(2442.5441030647685 7920.075382066261) rotate(0 12.612971703843414 11.036350240862703)"><path d="M2.98 3.91 C2.98 3.91, 2.98 3.91, 2.98 3.91 M2.98 3.91 C2.98 3.91, 2.98 3.91, 2.98 3.91 M2.45 16.71 C5.34 13.38, 8.24 10.06, 16.23 0.86 M2.45 16.71 C7.55 10.84, 12.65 4.97, 16.23 0.86 M8.49 21.96 C13.65 16.03, 18.8 10.09, 22.92 5.35 M8.49 21.96 C12.26 17.62, 16.03 13.28, 22.92 5.35 M4.36 19.37 C4.36 19.37, 4.36 19.37, 4.36 19.37 M4.36 19.37 C4.36 19.37, 4.36 19.37, 4.36 19.37 M17.91 20.55 C13.92 17.08, 9.93 13.61, 1.31 6.11 M17.91 20.55 C13.38 16.61, 8.85 12.67, 1.31 6.11 M23.92 15.17 C18.88 10.79, 13.85 6.41, 7.31 0.73 M23.92 15.17 C18.35 10.33, 12.78 5.49, 7.31 0.73" stroke="#ced4da" stroke-width="1" fill="none"></path><path d="M25.23 11.04 C25.23 11.68, 25.16 12.32, 25.03 12.95 C24.91 13.58, 24.71 14.21, 24.47 14.81 C24.22 15.41, 23.9 16, 23.54 16.55 C23.17 17.11, 22.74 17.64, 22.28 18.13 C21.81 18.62, 21.28 19.08, 20.72 19.49 C20.16 19.9, 19.55 20.27, 18.92 20.59 C18.29 20.91, 17.61 21.19, 16.93 21.41 C16.24 21.63, 15.52 21.79, 14.8 21.91 C14.08 22.02, 13.34 22.07, 12.61 22.07 C11.88 22.07, 11.14 22.02, 10.42 21.91 C9.7 21.79, 8.99 21.63, 8.3 21.41 C7.61 21.19, 6.94 20.91, 6.31 20.59 C5.67 20.27, 5.06 19.9, 4.51 19.49 C3.95 19.08, 3.42 18.62, 2.95 18.13 C2.48 17.64, 2.05 17.11, 1.69 16.55 C1.32 16, 1.01 15.41, 0.76 14.81 C0.51 14.21, 0.32 13.58, 0.19 12.95 C0.06 12.32, 0 11.68, 0 11.04 C0 10.4, 0.06 9.75, 0.19 9.12 C0.32 8.49, 0.51 7.86, 0.76 7.26 C1.01 6.66, 1.32 6.07, 1.69 5.52 C2.05 4.96, 2.48 4.43, 2.95 3.94 C3.42 3.45, 3.95 2.99, 4.51 2.58 C5.06 2.17, 5.67 1.8, 6.31 1.48 C6.94 1.16, 7.61 0.88, 8.3 0.67 C8.99 0.45, 9.7 0.28, 10.42 0.17 C11.14 0.06, 11.88 0, 12.61 0 C13.34 0, 14.08 0.06, 14.8 0.17 C15.52 0.28, 16.24 0.45, 16.93 0.67 C17.61 0.88, 18.29 1.16, 18.92 1.48 C19.55 1.8, 20.16 2.17, 20.72 2.58 C21.28 2.99, 21.81 3.45, 22.28 3.94 C22.74 4.43, 23.17 4.96, 23.54 5.52 C23.9 6.07, 24.22 6.66, 24.47 7.26 C24.71 7.86, 24.91 8.49, 25.03 9.12 C25.16 9.75, 25.19 10.72, 25.23 11.04 C25.26 11.36, 25.26 10.72, 25.23 11.04" stroke="#000000" stroke-width="2" fill="none"></path></g><g transform="translate(118.58974410425981 7984.560609289929) rotate(0 29.866666793823242 12.5)"><text x="0" y="17.619999999999997" font-family="Virgil, sans-serif, Segoe UI Emoji" font-size="20px" fill="#000000" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Riders</text></g><g stroke-linecap="round"><g transform="translate(115.80252345575263 7974.907683279951) rotate(0 25.81964520262909 -21.795699329336458)" fill-rule="evenodd"><path d="M13.47 -38.64 C13.47 -38.64, 13.47 -38.64, 13.47 -38.64 M13.47 -38.64 C13.47 -38.64, 13.47 -38.64, 13.47 -38.64 M3.11 -14.53 C8.13 -20.3, 13.15 -26.08, 28.04 -43.2 M3.11 -14.53 C11.5 -24.19, 19.9 -33.85, 28.04 -43.2 M0.61 0.53 C7.84 -7.78, 15.07 -16.1, 35.39 -39.47 M0.61 0.53 C10.72 -11.09, 20.83 -22.72, 35.39 -39.47 M11.24 0.5 C18.31 -7.62, 25.37 -15.75, 40.77 -33.46 M11.24 0.5 C22.87 -12.87, 34.49 -26.24, 40.77 -33.46 M21.87 0.47 C28.93 -7.65, 35.98 -15.76, 44.84 -25.95 M21.87 0.47 C29.03 -7.76, 36.18 -15.99, 44.84 -25.95 M32.5 0.43 C37.83 -5.69, 43.15 -11.81, 48.91 -18.44 M32.5 0.43 C39.01 -7.05, 45.52 -14.54, 48.91 -18.44 M44.45 -1.11 C46.83 -3.85, 49.2 -6.59, 51.66 -9.41 M44.45 -1.11 C46.35 -3.3, 48.25 -5.49, 51.66 -9.41 M0 0 C0 0, 0 0, 0 0 M0 0 C0 0, 0 0, 0 0 M12.04 -0.13 C9.54 -2.31, 7.04 -4.48, 1.47 -9.32 M12.04 -0.13 C8.26 -3.42, 4.48 -6.7, 1.47 -9.32 M24.84 0.39 C18.95 -4.73, 13.06 -9.85, 2.95 -18.64 M24.84 0.39 C18.33 -5.26, 11.83 -10.92, 2.95 -18.64 M36.12 -0.4 C29.89 -5.82, 23.66 -11.24, 5.18 -27.3 M36.12 -0.4 C23.99 -10.95, 11.85 -21.5, 5.18 -27.3 M46.65 -1.84 C36.45 -10.71, 26.25 -19.58, 9.67 -33.99 M46.65 -1.84 C32.2 -14.41, 17.74 -26.98, 9.67 -33.99 M51.9 -7.88 C44.12 -14.65, 36.33 -21.42, 14.92 -40.03 M51.9 -7.88 C38.85 -19.22, 25.81 -30.57, 14.92 -40.03 M47.34 -22.45 C41.75 -27.31, 36.15 -32.17, 22.43 -44.1 M47.34 -22.45 C41.76 -27.3, 36.18 -32.15, 22.43 -44.1" stroke="#ced4da" stroke-width="1" fill="none"></path><path d="M0 0 C0.92 -4.85, 1.58 -21.76, 5.52 -29.07 C9.46 -36.38, 17.61 -43.34, 23.65 -43.87 C29.69 -44.4, 37.51 -39.05, 41.78 -32.24 C46.05 -25.43, 56.23 -8.39, 49.27 -3.02 C42.31 2.36, 8.21 -0.5, 0 0 M0 0 C0.92 -4.85, 1.58 -21.76, 5.52 -29.07 C9.46 -36.38, 17.61 -43.34, 23.65 -43.87 C29.69 -44.4, 37.51 -39.05, 41.78 -32.24 C46.05 -25.43, 56.23 -8.39, 49.27 -3.02 C42.31 2.36, 8.21 -0.5, 0 0" stroke="#000000" stroke-width="2" fill="none"></path></g></g><mask></mask><g stroke-linecap="round" transform="translate(128.2563942920683 7908.216635494095) rotate(0 12.612971703843186 11.036350240862703)"><path d="M2.98 3.91 C2.98 3.91, 2.98 3.91, 2.98 3.91 M2.98 3.91 C2.98 3.91, 2.98 3.91, 2.98 3.91 M2.45 16.71 C7.03 11.45, 11.6 6.18, 16.23 0.86 M2.45 16.71 C7.13 11.32, 11.81 5.94, 16.23 0.86 M8.49 21.96 C13.91 15.72, 19.33 9.49, 22.92 5.35 M8.49 21.96 C11.92 18.01, 15.36 14.06, 22.92 5.35 M4.36 19.37 C4.36 19.37, 4.36 19.37, 4.36 19.37 M4.36 19.37 C4.36 19.37, 4.36 19.37, 4.36 19.37 M17.91 20.55 C13.12 16.38, 8.32 12.21, 1.31 6.11 M17.91 20.55 C13.96 17.11, 10.01 13.67, 1.31 6.11 M23.92 15.17 C19.29 11.14, 14.66 7.12, 7.31 0.73 M23.92 15.17 C19.96 11.72, 16 8.28, 7.31 0.73" stroke="#ced4da" stroke-width="1" fill="none"></path><path d="M25.23 11.04 C25.23 11.68, 25.16 12.32, 25.03 12.95 C24.91 13.58, 24.71 14.21, 24.47 14.81 C24.22 15.41, 23.9 16, 23.54 16.55 C23.17 17.11, 22.74 17.64, 22.28 18.13 C21.81 18.62, 21.28 19.08, 20.72 19.49 C20.16 19.9, 19.55 20.27, 18.92 20.59 C18.29 20.91, 17.61 21.19, 16.93 21.41 C16.24 21.63, 15.52 21.79, 14.8 21.91 C14.08 22.02, 13.34 22.07, 12.61 22.07 C11.88 22.07, 11.14 22.02, 10.42 21.91 C9.7 21.79, 8.99 21.63, 8.3 21.41 C7.61 21.19, 6.94 20.91, 6.31 20.59 C5.67 20.27, 5.06 19.9, 4.51 19.49 C3.95 19.08, 3.42 18.62, 2.95 18.13 C2.48 17.64, 2.05 17.11, 1.69 16.55 C1.32 16, 1.01 15.41, 0.76 14.81 C0.51 14.21, 0.32 13.58, 0.19 12.95 C0.06 12.32, 0 11.68, 0 11.04 C0 10.4, 0.06 9.75, 0.19 9.12 C0.32 8.49, 0.51 7.86, 0.76 7.26 C1.01 6.66, 1.32 6.07, 1.69 5.52 C2.05 4.96, 2.48 4.43, 2.95 3.94 C3.42 3.45, 3.95 2.99, 4.51 2.58 C5.06 2.17, 5.67 1.8, 6.31 1.48 C6.94 1.16, 7.61 0.88, 8.3 0.67 C8.99 0.45, 9.7 0.28, 10.42 0.17 C11.14 0.06, 11.88 0, 12.61 0 C13.34 0, 14.08 0.06, 14.8 0.17 C15.52 0.28, 16.24 0.45, 16.93 0.67 C17.61 0.88, 18.29 1.16, 18.92 1.48 C19.55 1.8, 20.16 2.17, 20.72 2.58 C21.28 2.99, 21.81 3.45, 22.28 3.94 C22.74 4.43, 23.17 4.96, 23.54 5.52 C23.9 6.07, 24.22 6.66, 24.47 7.26 C24.71 7.86, 24.91 8.49, 25.03 9.12 C25.16 9.75, 25.19 10.72, 25.23 11.04 C25.26 11.36, 25.26 10.72, 25.23 11.04" stroke="#000000" stroke-width="2" fill="none"></path></g><g transform="translate(3790.114738938902 7558.675534804337) rotate(0 29.866666793823242 12.5)"><text x="0" y="17.619999999999997" font-family="Virgil, sans-serif, Segoe UI Emoji" font-size="20px" fill="#000000" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Riders</text></g><g stroke-linecap="round"><g transform="translate(3787.327518290394 7549.022608794359) rotate(0 25.81964520262909 -21.795699329336458)" fill-rule="evenodd"><path d="M13.47 -38.64 C13.47 -38.64, 13.47 -38.64, 13.47 -38.64 M13.47 -38.64 C13.47 -38.64, 13.47 -38.64, 13.47 -38.64 M3.11 -14.53 C10.08 -22.55, 17.06 -30.58, 28.04 -43.2 M3.11 -14.53 C11.76 -24.48, 20.41 -34.44, 28.04 -43.2 M0.61 0.53 C14.4 -15.33, 28.19 -31.19, 35.39 -39.47 M0.61 0.53 C10.81 -11.19, 21 -22.92, 35.39 -39.47 M11.24 0.5 C19.29 -8.75, 27.33 -18, 40.77 -33.46 M11.24 0.5 C21.41 -11.2, 31.58 -22.9, 40.77 -33.46 M21.87 0.47 C30.46 -9.41, 39.05 -19.29, 44.84 -25.95 M21.87 0.47 C29.19 -7.95, 36.51 -16.37, 44.84 -25.95 M32.5 0.43 C36.59 -4.27, 40.68 -8.97, 48.91 -18.44 M32.5 0.43 C36.64 -4.33, 40.78 -9.09, 48.91 -18.44 M44.45 -1.11 C46.81 -3.83, 49.17 -6.54, 51.66 -9.41 M44.45 -1.11 C45.9 -2.78, 47.35 -4.45, 51.66 -9.41 M0 0 C0 0, 0 0, 0 0 M0 0 C0 0, 0 0, 0 0 M12.04 -0.13 C9.78 -2.1, 7.52 -4.06, 1.47 -9.32 M12.04 -0.13 C9.33 -2.49, 6.61 -4.85, 1.47 -9.32 M24.84 0.39 C18.56 -5.07, 12.27 -10.53, 2.95 -18.64 M24.84 0.39 C16.77 -6.63, 8.69 -13.64, 2.95 -18.64 M36.12 -0.4 C27.09 -8.25, 18.06 -16.1, 5.18 -27.3 M36.12 -0.4 C26.72 -8.58, 17.31 -16.75, 5.18 -27.3 M46.65 -1.84 C36.91 -10.32, 27.16 -18.79, 9.67 -33.99 M46.65 -1.84 C38.83 -8.65, 31 -15.45, 9.67 -33.99 M51.9 -7.88 C40.11 -18.14, 28.31 -28.39, 14.92 -40.03 M51.9 -7.88 C42.31 -16.22, 32.71 -24.56, 14.92 -40.03 M47.34 -22.45 C40.97 -27.99, 34.6 -33.52, 22.43 -44.1 M47.34 -22.45 C41.51 -27.51, 35.69 -32.58, 22.43 -44.1" stroke="#ced4da" stroke-width="1" fill="none"></path><path d="M0 0 C0.92 -4.85, 1.58 -21.76, 5.52 -29.07 C9.46 -36.38, 17.61 -43.34, 23.65 -43.87 C29.69 -44.4, 37.51 -39.05, 41.78 -32.24 C46.05 -25.43, 56.23 -8.39, 49.27 -3.02 C42.31 2.36, 8.21 -0.5, 0 0 M0 0 C0.92 -4.85, 1.58 -21.76, 5.52 -29.07 C9.46 -36.38, 17.61 -43.34, 23.65 -43.87 C29.69 -44.4, 37.51 -39.05, 41.78 -32.24 C46.05 -25.43, 56.23 -8.39, 49.27 -3.02 C42.31 2.36, 8.21 -0.5, 0 0" stroke="#000000" stroke-width="2" fill="none"></path></g></g><mask></mask><g stroke-linecap="round" transform="translate(3799.78138912671 7482.331561008503) rotate(0 12.612971703843414 11.036350240862703)"><path d="M2.98 3.91 C2.98 3.91, 2.98 3.91, 2.98 3.91 M2.98 3.91 C2.98 3.91, 2.98 3.91, 2.98 3.91 M2.45 16.71 C7.18 11.27, 11.91 5.83, 16.23 0.86 M2.45 16.71 C7.19 11.27, 11.92 5.82, 16.23 0.86 M8.49 21.96 C13.7 15.96, 18.91 9.97, 22.92 5.35 M8.49 21.96 C12.23 17.65, 15.97 13.35, 22.92 5.35 M4.36 19.37 C4.36 19.37, 4.36 19.37, 4.36 19.37 M4.36 19.37 C4.36 19.37, 4.36 19.37, 4.36 19.37 M17.91 20.55 C12.29 15.66, 6.67 10.77, 1.31 6.11 M17.91 20.55 C12.65 15.97, 7.38 11.39, 1.31 6.11 M23.92 15.17 C20.18 11.92, 16.44 8.67, 7.31 0.73 M23.92 15.17 C20.58 12.26, 17.24 9.36, 7.31 0.73" stroke="#ced4da" stroke-width="1" fill="none"></path><path d="M25.23 11.04 C25.23 11.68, 25.16 12.32, 25.03 12.95 C24.91 13.58, 24.71 14.21, 24.47 14.81 C24.22 15.41, 23.9 16, 23.54 16.55 C23.17 17.11, 22.74 17.64, 22.28 18.13 C21.81 18.62, 21.28 19.08, 20.72 19.49 C20.16 19.9, 19.55 20.27, 18.92 20.59 C18.29 20.91, 17.61 21.19, 16.93 21.41 C16.24 21.63, 15.52 21.79, 14.8 21.91 C14.08 22.02, 13.34 22.07, 12.61 22.07 C11.88 22.07, 11.14 22.02, 10.42 21.91 C9.7 21.79, 8.99 21.63, 8.3 21.41 C7.61 21.19, 6.94 20.91, 6.31 20.59 C5.67 20.27, 5.06 19.9, 4.51 19.49 C3.95 19.08, 3.42 18.62, 2.95 18.13 C2.48 17.64, 2.05 17.11, 1.69 16.55 C1.32 16, 1.01 15.41, 0.76 14.81 C0.51 14.21, 0.32 13.58, 0.19 12.95 C0.06 12.32, 0 11.68, 0 11.04 C0 10.4, 0.06 9.75, 0.19 9.12 C0.32 8.49, 0.51 7.86, 0.76 7.26 C1.01 6.66, 1.32 6.07, 1.69 5.52 C2.05 4.96, 2.48 4.43, 2.95 3.94 C3.42 3.45, 3.95 2.99, 4.51 2.58 C5.06 2.17, 5.67 1.8, 6.31 1.48 C6.94 1.16, 7.61 0.88, 8.3 0.67 C8.99 0.45, 9.7 0.28, 10.42 0.17 C11.14 0.06, 11.88 0, 12.61 0 C13.34 0, 14.08 0.06, 14.8 0.17 C15.52 0.28, 16.24 0.45, 16.93 0.67 C17.61 0.88, 18.29 1.16, 18.92 1.48 C19.55 1.8, 20.16 2.17, 20.72 2.58 C21.28 2.99, 21.81 3.45, 22.28 3.94 C22.74 4.43, 23.17 4.96, 23.54 5.52 C23.9 6.07, 24.22 6.66, 24.47 7.26 C24.71 7.86, 24.91 8.49, 25.03 9.12 C25.16 9.75, 25.19 10.72, 25.23 11.04 C25.26 11.36, 25.26 10.72, 25.23 11.04" stroke="#000000" stroke-width="2" fill="none"></path></g><g stroke-linecap="round"><g transform="translate(87.36799212770484 6607.951168348) rotate(0 71.6288419336081 -0.014354195252053614)"><path d="M-1.04 0.2 C22.89 0.19, 119.99 -0.65, 144.3 -0.54 M0.62 -0.74 C24.34 -0.55, 119.52 0.76, 143.5 0.71" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(87.36799212770484 6607.951168348) rotate(0 71.6288419336081 -0.014354195252053614)"><path d="M119.95 9.1 C128.87 6.75, 136.19 4.58, 143.5 0.71 M119.95 9.1 C128.38 6.69, 137.72 3.53, 143.5 0.71" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(87.36799212770484 6607.951168348) rotate(0 71.6288419336081 -0.014354195252053614)"><path d="M120.07 -8 C128.87 -4.14, 136.15 -0.1, 143.5 0.71 M120.07 -8 C128.57 -4.03, 137.87 -0.81, 143.5 0.71" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask></mask><g stroke-linecap="round" transform="translate(918.6669871442286 6488.951168348) rotate(0 113 103.5)"><path d="M32 0 C80.99 2.51, 130.42 3.21, 194 0 M32 0 C87.09 -1.32, 143.9 -1.93, 194 0 M194 0 C215.73 -0.1, 224.96 9.44, 226 32 M194 0 C214.86 -2.26, 223.96 12.33, 226 32 M226 32 C227.53 71.54, 225.52 111.71, 226 175 M226 32 C225.87 78.74, 225.83 125.41, 226 175 M226 175 C224.76 196.3, 214.6 206.97, 194 207 M226 175 C226.17 195.14, 216.37 207.44, 194 207 M194 207 C152.21 205.16, 107.03 204.89, 32 207 M194 207 C152.16 207.94, 108.49 209.17, 32 207 M32 207 C8.83 205.54, -1.84 195.11, 0 175 M32 207 C9.14 205.27, -0.79 196.68, 0 175 M0 175 C-2.45 137.36, -1.17 98.08, 0 32 M0 175 C0.61 129.49, 0.12 84.08, 0 32 M0 32 C0.27 9.86, 11.91 0.05, 32 0 M0 32 C-2.02 12.13, 10.04 0.17, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(925.1586558454005 6579.951168348) rotate(0 106.50833129882812 12.5)"><text x="106.50833129882812" y="17.619999999999997" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Driver Supply Services</text></g><g stroke-linecap="round" transform="translate(5984.867790905049 7372.769206133671) rotate(0 113 103.5)"><path d="M32 0 C85.32 -0.74, 141.73 1.59, 194 0 M32 0 C82.27 -0.92, 131.28 -1.49, 194 0 M194 0 C215.43 1.9, 226.29 11.04, 226 32 M194 0 C213.75 -2.22, 224.81 10.03, 226 32 M226 32 C224.15 86.12, 223.5 138.49, 226 175 M226 32 C225.37 71.46, 226.38 111.6, 226 175 M226 175 C227.01 197.36, 214.4 206.84, 194 207 M226 175 C224.15 196.56, 214.13 207.49, 194 207 M194 207 C138.13 209.99, 78.38 206.92, 32 207 M194 207 C149.91 206.92, 106.49 205.37, 32 207 M32 207 C9.37 207.69, -0.16 196.78, 0 175 M32 207 C9.2 207.8, -0.6 198.21, 0 175 M0 175 C-2.29 141.89, -1.86 109.93, 0 32 M0 175 C-0.65 125.15, -0.4 74.45, 0 32 M0 32 C-1.91 12.59, 9.29 -1.89, 32 0 M0 32 C-1.4 8.78, 9.3 0.83, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(5991.359459606221 7463.769206133671) rotate(0 106.50833129882812 12.5)"><text x="106.50833129882812" y="17.619999999999997" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Driver Supply Services</text></g><g stroke-linecap="round" transform="translate(4957.946993710384 7095.97748148557) rotate(0 113 103.5)"><path d="M32 0 C93.73 -1.13, 160.16 -2.5, 194 0 M32 0 C93.06 0.84, 153.69 1.07, 194 0 M194 0 C213.86 1.84, 225.13 9.85, 226 32 M194 0 C215.17 1.38, 226.82 8.6, 226 32 M226 32 C223.3 62.43, 223.48 88.08, 226 175 M226 32 C225.93 70.51, 226.37 111.79, 226 175 M226 175 C224.24 197.52, 216.87 208.85, 194 207 M226 175 C227.67 194.18, 213.17 204.94, 194 207 M194 207 C144.02 206.33, 96.26 206.6, 32 207 M194 207 C132.78 206.74, 72.17 207.16, 32 207 M32 207 C10.18 207.22, 1.83 196.02, 0 175 M32 207 C9.12 205.08, -2.06 194.3, 0 175 M0 175 C-1.14 125.41, -0.79 74.9, 0 32 M0 175 C1.07 127.57, -0.48 79.36, 0 32 M0 32 C1.62 10.28, 9.09 0.24, 32 0 M0 32 C1.12 10.93, 12.55 -0.52, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(5025.080328823909 7186.97748148557) rotate(0 45.86666488647461 12.5)"><text x="45.86666488647461" y="17.619999999999997" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Payments</text></g><g stroke-linecap="round" transform="translate(4298.79369269643 7408.983238950297) rotate(0 113 103.5)"><path d="M32 0 C74.44 -1.13, 114.86 -0.93, 194 0 M32 0 C80.7 -1.37, 129.68 -2.03, 194 0 M194 0 C216.42 -1.95, 224.48 12.62, 226 32 M194 0 C215.19 -0.48, 226.84 10.86, 226 32 M226 32 C227.98 60.34, 228.61 91.46, 226 175 M226 32 C225.74 88.12, 224.81 146.79, 226 175 M226 175 C224.23 195.98, 216.89 207.44, 194 207 M226 175 C226.23 197.72, 214.76 206.19, 194 207 M194 207 C157.17 207.1, 123.55 206.74, 32 207 M194 207 C134.5 206.38, 75.79 206.91, 32 207 M32 207 C11.11 206.2, 1.3 196.8, 0 175 M32 207 C12.32 208.52, 0.04 195.48, 0 175 M0 175 C-1.92 117.37, -0.08 61.71, 0 32 M0 175 C-0.15 127.69, 0.82 79.7, 0 32 M0 32 C1.75 10.4, 9.3 0.18, 32 0 M0 32 C-0.74 12.07, 11.79 0.51, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(4346.943694222309 7499.983238950297) rotate(0 64.8499984741211 12.5)"><text x="64.8499984741211" y="17.619999999999997" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Policy Checks</text></g><g stroke-linecap="round"><g transform="translate(748.6251703718249 6520.517930340147) rotate(269.83845249062614 15.245106665108551 65.67903616895273)" fill-rule="evenodd"><path d="M-1.03 -1.52 L31.41 -1.42 L28.16 117.88 L12.95 131.72 L-0.92 116.24 L-0.08 1.65" stroke="none" stroke-width="0" fill="#eeeeee" fill-rule="evenodd"></path><path d="M0 0 C9.87 0.23, 18.83 0.38, 30.29 -0.12 M0 0 C9.07 -0.83, 17.48 -0.55, 30.29 -0.12 M30.29 -0.12 C31.98 27.61, 31.13 57.36, 30.03 118.71 M30.29 -0.12 C31.69 41.03, 32.07 82.83, 30.03 118.71 M30.03 118.71 C23.74 123.07, 18.87 126.31, 14.56 131.89 M30.03 118.71 C25.52 122.68, 19.4 126.54, 14.56 131.89 M14.56 131.89 C12.13 128.46, 7.07 127.09, 0.47 117.98 M14.56 131.89 C10.79 127.83, 6.6 123.61, 0.47 117.98 M0.47 117.98 C-1.81 86.29, -0.89 53.26, 0 0 M0.47 117.98 C-0.21 75.25, 1 32.23, 0 0 M0 0 C0 0, 0 0, 0 0 M0 0 C0 0, 0 0, 0 0" stroke="#000000" stroke-width="1" fill="none"></path></g></g><mask></mask><g stroke-linecap="round"><g transform="translate(754.4863567151292 6589.749386255444) rotate(0 15.480608900274774 -0.2867851502196572)"><path d="M0 0 C8.19 -0.02, 14.46 -0.14, 30.96 -0.57" stroke="#000000" stroke-width="1.5" fill="none" stroke-dasharray="1.5 7"></path></g></g><mask></mask><g stroke-linecap="round" transform="translate(702.2822669096954 6580.316748317731) rotate(0 12.320244053771376 8.188904730351169)"><path d="M0.43 -0.29 L24.83 0.63 L24.47 15.73 L-0.71 16.47" stroke="none" stroke-width="0" fill="#868e96"></path><path d="M0 0 C7.24 0.12, 15.03 0.73, 24.64 0 M0 0 C5.18 0.11, 10.84 0.47, 24.64 0 M24.64 0 C25.05 4.62, 24.08 8.26, 24.64 16.38 M24.64 0 C24.96 4.92, 24.71 9.7, 24.64 16.38 M24.64 16.38 C17.99 17.09, 11.32 16.7, 0 16.38 M24.64 16.38 C17.92 16.09, 11.96 16.47, 0 16.38 M0 16.38 C-0.1 11.12, -0.65 7.03, 0 0 M0 16.38 C-0.09 11.65, 0.33 6.22, 0 0" stroke="#000000" stroke-width="1" fill="none"></path></g><g stroke-linecap="round"><g transform="translate(715.2541861034019 6588.343580453195) rotate(0 -0.3055958865820685 -3.8940281322984447)" fill-rule="evenodd"><path d="M0.19 0.63 L11.52 -8.39 L-13.01 -7.55 L0.67 -0.09" stroke="none" stroke-width="0" fill="#ced4da" fill-rule="evenodd"></path><path d="M0 0 C3.7 -1.9, 6.77 -4.27, 11.69 -7.74 M0 0 C2.92 -1.68, 5.73 -3.77, 11.69 -7.74 M11.69 -7.74 C4.23 -7.11, -1.76 -6.62, -12.3 -7.64 M11.69 -7.74 C2.9 -7.88, -5.94 -7.67, -12.3 -7.64 M-12.3 -7.64 C-9.38 -5.8, -7.53 -5, 0 0 M-12.3 -7.64 C-9.65 -5.84, -7.11 -4.54, 0 0 M0 0 C0 0, 0 0, 0 0 M0 0 C0 0, 0 0, 0 0" stroke="#000000" stroke-width="1" fill="none"></path></g></g><mask></mask><g stroke-linecap="round" transform="translate(731.7364738761057 6580.45858238017) rotate(0 12.320244053771376 8.188904730351169)"><path d="M-0.17 -0.65 L23.93 0.1 L25.31 16.28 L0.3 17.01" stroke="none" stroke-width="0" fill="#868e96"></path><path d="M0 0 C6.94 0.73, 14.98 -0.66, 24.64 0 M0 0 C7.33 0.11, 15.16 0.13, 24.64 0 M24.64 0 C24.59 7.08, 25.12 13.07, 24.64 16.38 M24.64 0 C24.56 4.91, 24.25 9.94, 24.64 16.38 M24.64 16.38 C14.78 15.8, 4.89 15.75, 0 16.38 M24.64 16.38 C18.07 16.17, 12.02 16.34, 0 16.38 M0 16.38 C0.07 12.46, -0.17 8.47, 0 0 M0 16.38 C0.11 10.62, 0.01 5.36, 0 0" stroke="#000000" stroke-width="1" fill="none"></path></g><g stroke-linecap="round"><g transform="translate(744.7281109428177 6587.912359986649) rotate(0 -0.3055958865820685 -3.8684876998722757)" fill-rule="evenodd"><path d="M-0.71 0.1 L12.36 -7.83 L-12 -7.01 L0.66 0.93" stroke="none" stroke-width="0" fill="#ced4da" fill-rule="evenodd"></path><path d="M0 0 C4.08 -3.34, 8.85 -5.97, 11.69 -7.74 M0 0 C4.42 -2.82, 9.25 -6.19, 11.69 -7.74 M11.69 -7.74 C3.95 -6.99, -5.09 -7.59, -12.3 -7.64 M11.69 -7.74 C4.88 -7.58, -0.56 -7.43, -12.3 -7.64 M-12.3 -7.64 C-8.71 -5.47, -4.11 -2.25, 0 0 M-12.3 -7.64 C-7.84 -5.08, -4.19 -2.73, 0 0 M0 0 C0 0, 0 0, 0 0 M0 0 C0 0, 0 0, 0 0" stroke="#000000" stroke-width="1" fill="none"></path></g></g><mask></mask><g stroke-linecap="round" transform="translate(784.593301144871 6579.891246130415) rotate(0 12.320244053771376 8.188904730351169)"><path d="M0.67 -0.09 L24.94 0.63 L25.3 17.3 L0.43 16.65" stroke="none" stroke-width="0" fill="#868e96"></path><path d="M0 0 C9.52 -0.12, 19.68 -0.53, 24.64 0 M0 0 C8.87 -0.42, 17.15 -0.05, 24.64 0 M24.64 0 C24.69 6.46, 24.4 12.82, 24.64 16.38 M24.64 0 C24.9 5.11, 24.74 9.62, 24.64 16.38 M24.64 16.38 C18.44 16.43, 13.34 16.18, 0 16.38 M24.64 16.38 C18.2 15.94, 12.46 16.36, 0 16.38 M0 16.38 C0.39 12.24, -0.65 7.14, 0 0 M0 16.38 C-0.08 11.67, -0.31 7.54, 0 0" stroke="#000000" stroke-width="1" fill="none"></path></g><g stroke-linecap="round"><g transform="translate(798.082415066679 6586.992132652662) rotate(0 -0.3055958865820685 -4.0712665059973006)" fill-rule="evenodd"><path d="M0.3 0.63 L12.34 -6.81 L-11.87 -7.37 L0.49 0.96" stroke="none" stroke-width="0" fill="#ced4da" fill-rule="evenodd"></path><path d="M0 0 C3.42 -2.29, 5.99 -3.89, 11.69 -7.74 M0 0 C4.19 -2.63, 8.4 -5.09, 11.69 -7.74 M11.69 -7.74 C2.7 -7.9, -5.59 -8.61, -12.3 -7.64 M11.69 -7.74 C4.07 -7.85, -4.3 -8.04, -12.3 -7.64 M-12.3 -7.64 C-9.18 -5.97, -6.99 -3.52, 0 0 M-12.3 -7.64 C-8.8 -5.43, -5.39 -3.37, 0 0 M0 0 C0 0, 0 0, 0 0 M0 0 C0 0, 0 0, 0 0" stroke="#000000" stroke-width="1" fill="none"></path></g></g><mask></mask><g transform="translate(714.1971793896387 6601.5134262585325) rotate(0 49.03785867614101 12.490775323168236)"><text x="49.0378586761411" y="17.228017519806563" font-family="Virgil, sans-serif, Segoe UI Emoji" font-size="18.504852330619276px" fill="#000000" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Message Q</text></g><g stroke-linecap="round"><g transform="translate(829.6669871442286 6585.951168348) rotate(0 38.63977868556981 0.13754621328826033)"><path d="M-0.59 1.11 C12.43 1.29, 64.61 1.08, 77.87 0.8 M1.3 0.65 C14.17 0.51, 63.95 -0.86, 76.85 -0.9" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(829.6669871442286 6585.951168348) rotate(0 38.63977868556981 0.13754621328826033)"><path d="M53.51 8.04 C61.95 5.42, 67.99 4.75, 76.85 -0.9 M53.51 8.04 C59.02 5.2, 64.65 3.96, 76.85 -0.9" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(829.6669871442286 6585.951168348) rotate(0 38.63977868556981 0.13754621328826033)"><path d="M53.22 -9.06 C61.71 -6.87, 67.83 -2.73, 76.85 -0.9 M53.22 -9.06 C58.97 -7.6, 64.67 -4.54, 76.85 -0.9" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask></mask><g stroke-linecap="round"><g transform="translate(1025.5766032160877 7861.765211131677) rotate(269.83845249062614 15.085954166984493 65.62141590095962)" fill-rule="evenodd"><path d="M1.15 0.93 L28.62 -0.76 L29.97 119.61 L15.04 133.28 L-0.74 116.26 L-1.88 -1.36" stroke="none" stroke-width="0" fill="#eeeeee" fill-rule="evenodd"></path><path d="M0 0 C5.29 -0.47, 12.56 -1.13, 30.29 -0.12 M0 0 C5.72 0.97, 11.84 -0.84, 30.29 -0.12 M30.29 -0.12 C28.16 42.91, 29.23 87.47, 30.03 118.71 M30.29 -0.12 C31.05 41.51, 29.63 83.04, 30.03 118.71 M30.03 118.71 C25.1 122.85, 22.67 125.44, 14.56 131.89 M30.03 118.71 C24.43 124.03, 18.58 129.12, 14.56 131.89 M14.56 131.89 C9.34 124.72, 4.48 122.38, 0.47 117.98 M14.56 131.89 C9.26 127.26, 3.46 121.45, 0.47 117.98 M0.47 117.98 C-1.09 76.35, 1.2 37.68, 0 0 M0.47 117.98 C-0.23 75.53, -0.7 31.69, 0 0 M0 0 C0 0, 0 0, 0 0 M0 0 C0 0, 0 0, 0 0" stroke="#000000" stroke-width="1" fill="none"></path></g></g><mask></mask><g stroke-linecap="round"><g transform="translate(1031.437789559392 7930.996667046975) rotate(0 15.480608900274774 -0.36661289680341724)"><path d="M0 0 C11.9 -0.62, 23.05 -0.95, 30.96 -0.57" stroke="#000000" stroke-width="1.5" fill="none" stroke-dasharray="1.5 7"></path></g></g><mask></mask><g stroke-linecap="round" transform="translate(979.2336997539583 7921.564029109262) rotate(0 12.320244053771376 8.188904730351169)"><path d="M-0.67 0.77 L24.77 0.64 L25.49 16.88 L0.47 16.89" stroke="none" stroke-width="0" fill="#868e96"></path><path d="M0 0 C6.28 -0.47, 13.96 -0.65, 24.64 0 M0 0 C9.93 -0.23, 19.5 -0.2, 24.64 0 M24.64 0 C25.08 4.4, 24.13 8.51, 24.64 16.38 M24.64 0 C24.49 4.5, 24.67 8.36, 24.64 16.38 M24.64 16.38 C17.4 17.1, 8.57 16.27, 0 16.38 M24.64 16.38 C16.28 16.97, 7.2 16.57, 0 16.38 M0 16.38 C0.51 13.24, 0.37 9.54, 0 0 M0 16.38 C0.23 10.98, -0.09 5.05, 0 0" stroke="#000000" stroke-width="1" fill="none"></path></g><g stroke-linecap="round"><g transform="translate(992.2056189476648 7929.590861244724) rotate(0 -0.3055958865820685 -3.992168707147357)" fill-rule="evenodd"><path d="M0.13 0.64 L12.53 -7.23 L-11.83 -7.13 L0.17 -0.34" stroke="none" stroke-width="0" fill="#ced4da" fill-rule="evenodd"></path><path d="M0 0 C2.81 -2.46, 6.71 -4.68, 11.69 -7.74 M0 0 C2.68 -1.8, 4.71 -3.23, 11.69 -7.74 M11.69 -7.74 C4.43 -7.26, -1.99 -8.57, -12.3 -7.64 M11.69 -7.74 C6.78 -7.81, 1.73 -7.31, -12.3 -7.64 M-12.3 -7.64 C-9.25 -5.72, -5.37 -3.86, 0 0 M-12.3 -7.64 C-7.43 -4.69, -3.12 -1.65, 0 0 M0 0 C0 0, 0 0, 0 0 M0 0 C0 0, 0 0, 0 0" stroke="#000000" stroke-width="1" fill="none"></path></g></g><mask></mask><g stroke-linecap="round" transform="translate(1008.6879067203686 7921.705863171699) rotate(0 12.320244053771376 8.188904730351169)"><path d="M0.85 0.5 L25.11 0.52 L24.81 16.04 L-0.67 16.09" stroke="none" stroke-width="0" fill="#868e96"></path><path d="M0 0 C6.99 -0.91, 11.31 0.79, 24.64 0 M0 0 C5.47 0.06, 11.32 0.34, 24.64 0 M24.64 0 C24.26 4.78, 23.85 10.93, 24.64 16.38 M24.64 0 C24.74 6.17, 24.51 12.08, 24.64 16.38 M24.64 16.38 C15.93 16.09, 6.94 17.21, 0 16.38 M24.64 16.38 C14.36 16.62, 5.3 16.73, 0 16.38 M0 16.38 C0.29 10.37, -0.3 5.92, 0 0 M0 16.38 C-0.24 11.09, 0.08 5.43, 0 0" stroke="#000000" stroke-width="1" fill="none"></path></g><g stroke-linecap="round"><g transform="translate(1021.6795437870801 7929.15964077818) rotate(0 -0.3055958865820685 -3.9101964240653615)" fill-rule="evenodd"><path d="M0.47 0.52 L11.86 -8.08 L-12.97 -7.93 L-0.5 -0.71" stroke="none" stroke-width="0" fill="#ced4da" fill-rule="evenodd"></path><path d="M0 0 C2.03 -1.23, 4.88 -3.01, 11.69 -7.74 M0 0 C2.73 -1.66, 5.74 -3.91, 11.69 -7.74 M11.69 -7.74 C2.62 -8.01, -4.03 -7.53, -12.3 -7.64 M11.69 -7.74 C5.11 -7.32, -0.73 -7.76, -12.3 -7.64 M-12.3 -7.64 C-8.04 -4.77, -4.34 -2.95, 0 0 M-12.3 -7.64 C-8.23 -5.01, -4.44 -2.65, 0 0 M0 0 C0 0, 0 0, 0 0 M0 0 C0 0, 0 0, 0 0" stroke="#000000" stroke-width="1" fill="none"></path></g></g><mask></mask><g stroke-linecap="round" transform="translate(1061.5447339891339 7921.1385269219445) rotate(0 12.320244053771376 8.188904730351169)"><path d="M0.17 -0.34 L23.97 -0.29 L24.14 15.66 L0.43 16.16" stroke="none" stroke-width="0" fill="#868e96"></path><path d="M0 0 C4.27 0.62, 9.28 -0.59, 24.64 0 M0 0 C7.51 -0.38, 14.83 -0.27, 24.64 0 M24.64 0 C25.07 3.59, 24.3 6.94, 24.64 16.38 M24.64 0 C24.92 5.81, 24.59 12.11, 24.64 16.38 M24.64 16.38 C18.93 16.73, 11.43 15.54, 0 16.38 M24.64 16.38 C16.31 16.71, 7.62 16.66, 0 16.38 M0 16.38 C0.37 12.39, -0.35 8.45, 0 0 M0 16.38 C0.34 10.4, 0.18 4.23, 0 0" stroke="#000000" stroke-width="1" fill="none"></path></g><g stroke-linecap="round"><g transform="translate(1075.0338479109419 7928.239413444193) rotate(0 -0.3055958865820685 -3.8891079995164546)" fill-rule="evenodd"><path d="M-0.67 -0.29 L11.19 -8.45 L-11.87 -7.86 L0.04 -0.57" stroke="none" stroke-width="0" fill="#ced4da" fill-rule="evenodd"></path><path d="M0 0 C3.93 -3.26, 8.67 -5.94, 11.69 -7.74 M0 0 C4.26 -2.84, 7.93 -5.75, 11.69 -7.74 M11.69 -7.74 C4.61 -7.48, -1.17 -8.01, -12.3 -7.64 M11.69 -7.74 C2.92 -7.46, -5.93 -7.28, -12.3 -7.64 M-12.3 -7.64 C-7.41 -5.4, -2.49 -1.36, 0 0 M-12.3 -7.64 C-7.82 -4.73, -3.54 -2.19, 0 0 M0 0 C0 0, 0 0, 0 0 M0 0 C0 0, 0 0, 0 0" stroke="#000000" stroke-width="1" fill="none"></path></g></g><mask></mask><g transform="translate(991.1486122339015 7942.760707050062) rotate(0 49.03785867614101 12.490775323168236)"><text x="49.0378586761411" y="17.228017519806563" font-family="Virgil, sans-serif, Segoe UI Emoji" font-size="18.504852330619276px" fill="#000000" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Message Q</text></g><g stroke-linecap="round"><g transform="translate(899.6184199884915 7925.31044925523) rotate(0 33.64839866540092 0.7956045709361206)"><path d="M-0.28 0.64 C11.08 0.74, 56.26 0.49, 67.58 0.51 M1.78 -0.06 C13.07 0.17, 55.98 1.34, 66.87 1.65" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(899.6184199884915 7925.31044925523) rotate(0 33.64839866540092 0.7956045709361206)"><path d="M43.15 9.55 C50.15 8.4, 53.76 6.47, 66.87 1.65 M43.15 9.55 C49.19 8.32, 55.79 5.33, 66.87 1.65" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(899.6184199884915 7925.31044925523) rotate(0 33.64839866540092 0.7956045709361206)"><path d="M43.62 -7.55 C50.5 -4.43, 53.99 -2.09, 66.87 1.65 M43.62 -7.55 C49.38 -4.34, 55.85 -2.89, 66.87 1.65" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask></mask><g stroke-linecap="round"><g transform="translate(1106.6184199884915 7927.198449139531) rotate(0 38.862968986449005 0.3452592793319127)"><path d="M0.46 -0.75 C13.59 -0.93, 65.75 -0.43, 78.48 -0.49 M-0.76 1.48 C12.28 1.4, 64.46 1.1, 77.79 0.8" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(1106.6184199884915 7927.198449139531) rotate(0 38.862968986449005 0.3452592793319127)"><path d="M54.41 9.65 C59.59 7.92, 66.49 2.8, 77.79 0.8 M54.41 9.65 C59.58 7.32, 64.43 6.42, 77.79 0.8" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(1106.6184199884915 7927.198449139531) rotate(0 38.862968986449005 0.3452592793319127)"><path d="M54.19 -7.45 C59.52 -4.45, 66.48 -4.84, 77.79 0.8 M54.19 -7.45 C59.37 -6.19, 64.27 -3.51, 77.79 0.8" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask></mask><g stroke-linecap="round" transform="translate(1208.6669871442286 6419.951168348) rotate(0 89.5 61.5)"><path d="M30.75 0 C62.4 -1.37, 93.58 -2.32, 148.25 0 M30.75 0 C63.68 0.22, 94.49 0.59, 148.25 0 M148.25 0 C170 1.5, 178.31 10.14, 179 30.75 M148.25 0 C170.61 -1.63, 179.75 9.57, 179 30.75 M179 30.75 C178.46 53.79, 180.89 74.52, 179 92.25 M179 30.75 C178.83 53.67, 177.49 76.2, 179 92.25 M179 92.25 C180.59 110.79, 167.8 123.3, 148.25 123 M179 92.25 C177.57 113.1, 170.25 125.02, 148.25 123 M148.25 123 C114.73 124.41, 81.53 124, 30.75 123 M148.25 123 C106.45 122.28, 67.19 122.12, 30.75 123 M30.75 123 C11.98 124.8, -0.58 111.65, 0 92.25 M30.75 123 C8.78 122.8, 0.43 110.61, 0 92.25 M0 92.25 C1.04 69.66, 1.23 44.57, 0 30.75 M0 92.25 C0.11 67.74, -0.76 44.46, 0 30.75 M0 30.75 C-1.56 10.17, 10.57 1.73, 30.75 0 M0 30.75 C0.64 8.01, 10.26 0.37, 30.75 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(1264.9419886701075 6456.451168348) rotate(0 33.224998474121094 25)"><text x="33.224998474121094" y="17.619999999999997" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Redis</text><text x="33.224998474121094" y="42.62" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">cluster</text></g><g stroke-linecap="round" transform="translate(1218.6669871442286 6429.951168348) rotate(0 89.5 61.5)"><path d="M30.75 0 C76.92 0.44, 120.51 -2.55, 148.25 0 M30.75 0 C69.22 0.46, 109.16 1.31, 148.25 0 M148.25 0 C169.75 1.38, 179.45 10.21, 179 30.75 M148.25 0 C167.42 -1.23, 179.42 12.33, 179 30.75 M179 30.75 C181.18 54.9, 180.42 81.54, 179 92.25 M179 30.75 C180.26 48.21, 179.07 63.95, 179 92.25 M179 92.25 C177.15 114.11, 167.59 122.4, 148.25 123 M179 92.25 C178.44 114.7, 168.69 122.33, 148.25 123 M148.25 123 C122.85 120.34, 98.22 121.71, 30.75 123 M148.25 123 C110.35 122.96, 71.36 122.37, 30.75 123 M30.75 123 C10.02 121.3, 1.49 113.4, 0 92.25 M30.75 123 C8.06 124.16, 1.65 114.71, 0 92.25 M0 92.25 C-0.64 77.99, 0.8 61.3, 0 30.75 M0 92.25 C0.28 77.01, -0.2 61.63, 0 30.75 M0 30.75 C0.27 9.25, 9.01 -0.19, 30.75 0 M0 30.75 C-1.85 11.12, 9.79 -1.31, 30.75 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g stroke-linecap="round" transform="translate(1228.6669871442286 6439.951168348) rotate(0 89.5 61.5)"><path d="M30.75 0 C59.49 1.51, 88.19 1.67, 148.25 0 M30.75 0 C68.11 0.86, 107.45 1.66, 148.25 0 M148.25 0 C169.85 1.76, 180.84 9.95, 179 30.75 M148.25 0 C169.99 2.18, 178.27 11.65, 179 30.75 M179 30.75 C178.94 50.5, 177.69 70.77, 179 92.25 M179 30.75 C179.66 45.61, 178.53 59.59, 179 92.25 M179 92.25 C178.26 111.59, 167.66 121.02, 148.25 123 M179 92.25 C177.39 112.05, 169.39 121.75, 148.25 123 M148.25 123 C110.19 120.7, 71.26 120.88, 30.75 123 M148.25 123 C104.76 122.6, 61.11 121.43, 30.75 123 M30.75 123 C9.36 121.91, -0.92 114.16, 0 92.25 M30.75 123 C10.86 123.47, -1.33 112.08, 0 92.25 M0 92.25 C-0.82 67.65, 0.21 45.41, 0 30.75 M0 92.25 C0.44 77.43, -0.51 63.03, 0 30.75 M0 30.75 C-0.36 9.39, 10.89 -1.49, 30.75 0 M0 30.75 C-1.22 8.55, 8.65 -1.41, 30.75 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g stroke-linecap="round" transform="translate(1187.2661105652246 7642.700865010043) rotate(0 89.5 61.5)"><path d="M30.75 0 C66.42 -0.95, 98.77 1.71, 148.25 0 M30.75 0 C76.03 0.31, 120.42 -0.89, 148.25 0 M148.25 0 C168.65 0.35, 178.79 12.09, 179 30.75 M148.25 0 C167.29 -1.06, 177.89 10.74, 179 30.75 M179 30.75 C177.35 51.01, 176.96 73.01, 179 92.25 M179 30.75 C179.32 46.27, 179.06 62.48, 179 92.25 M179 92.25 C180.92 111.26, 168.01 122.06, 148.25 123 M179 92.25 C177.38 112.74, 168.86 125.04, 148.25 123 M148.25 123 C103.21 122.29, 57.47 123.03, 30.75 123 M148.25 123 C110.43 122.84, 74.58 123.32, 30.75 123 M30.75 123 C9.27 124.18, 1.28 111.26, 0 92.25 M30.75 123 C11.52 120.94, 0.63 113.76, 0 92.25 M0 92.25 C-0.37 77.65, -1.33 60.47, 0 30.75 M0 92.25 C-0.4 78.21, 1.31 63.75, 0 30.75 M0 30.75 C-0.16 9.03, 11.64 1.71, 30.75 0 M0 30.75 C0.79 8.4, 12.18 1.76, 30.75 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(1243.5411120911035 7679.200865010043) rotate(0 33.224998474121094 25)"><text x="33.224998474121094" y="17.619999999999997" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Redis</text><text x="33.224998474121094" y="42.62" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">cluster</text></g><g stroke-linecap="round" transform="translate(1197.2661105652246 7652.700865010043) rotate(0 89.5 61.5)"><path d="M30.75 0 C58.89 -1.06, 83.97 -0.61, 148.25 0 M30.75 0 C71.96 0.99, 113.17 1.73, 148.25 0 M148.25 0 C167.48 -0.92, 178.03 10.67, 179 30.75 M148.25 0 C169.51 -1.59, 180.35 8.85, 179 30.75 M179 30.75 C177.81 48.74, 178.28 66.85, 179 92.25 M179 30.75 C179.96 43.57, 178.63 57.42, 179 92.25 M179 92.25 C177.59 112.74, 168.85 124.77, 148.25 123 M179 92.25 C180.86 114.21, 167.14 122.69, 148.25 123 M148.25 123 C112.69 124.66, 75.29 122.47, 30.75 123 M148.25 123 C106.46 124.75, 66.29 123.42, 30.75 123 M30.75 123 C11.35 121.21, 0.55 113.63, 0 92.25 M30.75 123 C9.47 122.45, -1.44 112.16, 0 92.25 M0 92.25 C-0.81 66.89, -0.93 42.77, 0 30.75 M0 92.25 C-0.61 70.03, 0.17 49.89, 0 30.75 M0 30.75 C0.69 8.64, 11.93 1.53, 30.75 0 M0 30.75 C2.22 10.55, 11 0.08, 30.75 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g stroke-linecap="round" transform="translate(1207.2661105652246 7662.700865010043) rotate(0 89.5 61.5)"><path d="M30.75 0 C73.15 0.3, 115.9 -1.43, 148.25 0 M30.75 0 C57.74 0.72, 84.31 -0.66, 148.25 0 M148.25 0 C167.78 0.42, 179.66 8.87, 179 30.75 M148.25 0 C170.1 -1.4, 178.75 8.39, 179 30.75 M179 30.75 C178.56 53.75, 177.2 75.69, 179 92.25 M179 30.75 C179.22 43.2, 178.88 56.58, 179 92.25 M179 92.25 C179.1 114.52, 170.37 124.27, 148.25 123 M179 92.25 C177.39 112.44, 168.88 121.57, 148.25 123 M148.25 123 C106.82 122.64, 68.71 125.53, 30.75 123 M148.25 123 C102.04 122.95, 55.1 122.8, 30.75 123 M30.75 123 C10.8 123.88, -0.68 112.27, 0 92.25 M30.75 123 C8.81 122.41, 2.03 111.05, 0 92.25 M0 92.25 C-1 69.13, 1.42 51.13, 0 30.75 M0 92.25 C0.75 70.93, 0.39 47.1, 0 30.75 M0 30.75 C1.68 11.78, 12.18 0.26, 30.75 0 M0 30.75 C0.75 10.33, 8.71 -1.36, 30.75 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g stroke-linecap="round"><g transform="translate(1143.6669871442286 6514.951168348) rotate(0 39.43285139389786 -0.9430329828055619)"><path d="M0.26 -0.89 C13.73 -0.92, 66.91 -1.25, 79.92 -1.36 M-1.06 1.26 C12.41 0.98, 66.41 -2.33, 79.46 -3.14" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(1143.6669871442286 6514.951168348) rotate(0 39.43285139389786 -0.9430329828055619)"><path d="M56.53 6.82 C60.34 6.05, 68.09 1.2, 79.46 -3.14 M56.53 6.82 C63.44 3.36, 72.04 -0.28, 79.46 -3.14" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(1143.6669871442286 6514.951168348) rotate(0 39.43285139389786 -0.9430329828055619)"><path d="M55.49 -10.25 C59.37 -7.15, 67.36 -8.14, 79.46 -3.14 M55.49 -10.25 C62.7 -7.92, 71.65 -5.76, 79.46 -3.14" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask></mask><g stroke-linecap="round" transform="translate(10 6305.444220565247) rotate(0 738.3334935721143 342)"><path d="M32 0 C556.57 0.24, 1081.98 -0.39, 1444.67 0 M32 0 C539.64 -0.02, 1047.4 0.28, 1444.67 0 M1444.67 0 C1466.19 -0.61, 1477.86 9.3, 1476.67 32 M1444.67 0 C1466.96 -1.04, 1478.57 12.04, 1476.67 32 M1476.67 32 C1478.17 230.54, 1477.45 428.31, 1476.67 652 M1476.67 32 C1476.86 185.29, 1476.53 338.96, 1476.67 652 M1476.67 652 C1478.13 674.01, 1466.05 683.55, 1444.67 684 M1476.67 652 C1474.86 672.35, 1465.09 682.9, 1444.67 684 M1444.67 684 C969.43 688.78, 494.32 688.22, 32 684 M1444.67 684 C910.01 689.67, 374.86 689.86, 32 684 M32 684 C10.14 682.5, 0.12 671.74, 0 652 M32 684 C11.92 682.75, 1.77 671.35, 0 652 M0 652 C1.18 407.49, 1.26 161.87, 0 32 M0 652 C-2.72 428.66, -2.59 205.27, 0 32 M0 32 C-1.15 9.85, 9.18 -1.69, 32 0 M0 32 C-0.16 11.59, 9.69 -1.02, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(1069.6669871442286 6932.951168348) rotate(0 111.42500305175781 17.5)"><text x="0" y="24.668" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="28px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Driver Ingestion</text></g><g stroke-linecap="round" transform="translate(1197.9094205744918 7833.576338160412) rotate(0 126 102)"><path d="M32 0 C103.1 0.62, 178.08 2.08, 220 0 M32 0 C102.94 1.07, 173.9 1.88, 220 0 M220 0 C240.85 0.74, 251.74 9.33, 252 32 M220 0 C239.1 1.32, 250.91 8.73, 252 32 M252 32 C251.47 80.59, 253.1 126.92, 252 172 M252 32 C252.4 81.78, 252.54 133.26, 252 172 M252 172 C252.39 194.8, 240.74 203.73, 220 204 M252 172 C252.25 191.52, 242.79 203.77, 220 204 M220 204 C177.88 200.85, 132.94 203.85, 32 204 M220 204 C144.56 203.85, 69.77 202.99, 32 204 M32 204 C11.12 203.47, 2 192.86, 0 172 M32 204 C12.57 205.46, -0.3 192.25, 0 172 M0 172 C-1.64 142.76, 2.22 112.88, 0 32 M0 172 C-0.71 135.68, -0.36 100.08, 0 32 M0 32 C-0.89 9.07, 12.46 0.84, 32 0 M0 32 C-0.55 10.18, 8.94 1.28, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(1262.2510877497848 7923.076338160412) rotate(0 61.65833282470703 12.5)"><text x="61.65833282470703" y="17.619999999999997" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">MatchMaking</text></g><g transform="translate(1234.7994833327534 8058.137043179964) rotate(0 102.93333435058594 50)"><text x="0" y="17.619999999999997" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Ranking:</text><text x="0" y="42.62" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">- Redis GeoCell Data</text><text x="0" y="67.62" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">- Candidate Set</text><text x="0" y="92.62" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">- Rank and Filter</text></g><g transform="translate(1253.4196185781943 8175.291405596072) rotate(0 201.61666870117188 50)"><text x="0" y="17.619999999999997" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">BroadCasting:</text><text x="0" y="42.62" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">- Create Offers (candidates)</text><text x="0" y="67.62" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">- Stores in Redis ZSET with TTL</text><text x="0" y="92.62" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">- Track retries, backoff, radius expansion</text></g><g stroke-linecap="round"><g transform="translate(730.7766361302502 7712.2664084259995) rotate(0 38.528368365228516 41.80419221117063)" fill-rule="evenodd"><path d="M-1.97 1.99 C-1.84 14.37, 1.32 61.52, 1.33 74.88 C1.33 88.24, -2.76 80.07, -1.94 82.14 C-1.13 84.21, 3.26 86.22, 6.22 87.31 C9.18 88.4, 10.06 88.16, 15.81 88.67 C21.57 89.18, 32.46 90.15, 40.75 90.37 C49.04 90.59, 59.62 90.41, 65.56 89.99 C71.5 89.57, 74.92 88.89, 76.4 87.84 C77.88 86.78, 74.73 85.47, 74.45 83.69 C74.16 81.9, 74.58 90.24, 74.68 77.12 C74.78 63.99, 74.49 17.55, 75.05 4.94 C75.61 -7.67, 78.49 2.85, 78.02 1.45 C77.55 0.04, 75.24 -2.54, 72.23 -3.49 C69.22 -4.44, 65.82 -3.54, 59.94 -4.26 C54.07 -4.97, 43.53 -7.58, 36.96 -7.79 C30.4 -7.99, 25.9 -6.07, 20.55 -5.49 C15.19 -4.92, 8.67 -4.88, 4.84 -4.32 C1 -3.77, -1.78 -2.98, -2.46 -2.17 C-3.13 -1.36, -0.02 -0.04, 0.8 0.54" stroke="none" stroke-width="0" fill="#ced4da" fill-rule="evenodd"></path><path d="M-0.51 -0.1 C-0.39 12.78, -0.47 62.06, -0.34 76.15 C-0.21 90.23, -0.29 82.36, 0.26 84.42 C0.81 86.47, 0.05 87.41, 2.98 88.47 C5.91 89.53, 11.35 90.31, 17.86 90.78 C24.37 91.26, 34.57 91.47, 42.03 91.31 C49.49 91.14, 57.07 90.79, 62.61 89.78 C68.16 88.78, 73.05 86.47, 75.3 85.27 C77.54 84.08, 75.82 84.2, 76.08 82.6 C76.33 81, 76.65 88.3, 76.82 75.66 C77 63.03, 77.27 19.37, 77.12 6.79 C76.97 -5.8, 77.06 1.87, 75.94 0.16 C74.83 -1.55, 72.86 -2.49, 70.41 -3.47 C67.96 -4.46, 66.7 -5.13, 61.23 -5.73 C55.76 -6.34, 44.93 -7.1, 37.6 -7.11 C30.27 -7.11, 22.82 -6.26, 17.27 -5.77 C11.72 -5.28, 7.31 -5.25, 4.3 -4.16 C1.29 -3.08, 0.11 0.23, -0.79 0.73 C-1.68 1.23, -1.31 -0.83, -1.08 -1.14 M1.42 -1.2 C2.04 11.45, 2.36 60.59, 2.06 74.52 C1.76 88.46, -0.48 80.43, -0.37 82.42 C-0.27 84.4, -0.1 84.97, 2.71 86.45 C5.51 87.92, 10.18 90.66, 16.44 91.27 C22.71 91.89, 32.56 90.62, 40.3 90.13 C48.04 89.63, 57.21 88.66, 62.88 88.32 C68.56 87.97, 71.88 88.68, 74.35 88.06 C76.81 87.44, 77.16 86.78, 77.68 84.58 C78.2 82.39, 77.49 87.66, 77.47 74.9 C77.45 62.14, 77.5 20.51, 77.57 8.02 C77.65 -4.46, 79.17 1.99, 77.92 -0.02 C76.67 -2.03, 72.96 -3.08, 70.07 -4.03 C67.18 -4.97, 65.93 -5.18, 60.6 -5.71 C55.27 -6.25, 45.21 -6.91, 38.08 -7.23 C30.94 -7.55, 23.52 -8.16, 17.77 -7.61 C12.02 -7.06, 6.33 -5.43, 3.57 -3.91 C0.81 -2.39, 1.69 1.1, 1.19 1.5 C0.7 1.91, 0.59 -1.26, 0.62 -1.48" stroke="#000000" stroke-width="1" fill="none"></path></g></g><mask></mask><g stroke-linecap="round"><g transform="translate(731.3005655685251 7769.392692083729) rotate(0 39.04292201568819 3.967595814348897)"><path d="M-0.59 0.95 C-0.13 1.64, 0.55 3.01, 2.28 4.07 C4.02 5.12, 6.43 6.6, 9.81 7.29 C13.19 7.98, 17.25 8.1, 22.57 8.2 C27.89 8.31, 35.26 8.13, 41.72 7.91 C48.19 7.68, 55.88 7.81, 61.37 6.84 C66.86 5.86, 72.17 3.33, 74.68 2.03 C77.19 0.74, 76.06 -0.44, 76.43 -0.95 M1.3 0.4 C1.67 0.75, -0.35 1.44, 1.47 2.29 C3.28 3.13, 8.62 4.29, 12.18 5.48 C15.75 6.66, 18.11 8.96, 22.87 9.41 C27.64 9.85, 34.17 8.78, 40.76 8.16 C47.35 7.54, 56.64 6.4, 62.41 5.67 C68.18 4.95, 72.69 5.02, 75.4 3.81 C78.12 2.6, 78.11 -1.1, 78.68 -1.58" stroke="#000000" stroke-width="1" fill="none"></path></g></g><mask></mask><g stroke-linecap="round"><g transform="translate(730.2687082460211 7740.428636748507) rotate(0 37.93316700731839 3.5392312452268015)"><path d="M0.25 0.65 C0.52 1.23, -0.73 3.45, 1.04 4.42 C2.82 5.39, 7.17 5.91, 10.9 6.47 C14.64 7.02, 18.59 7.5, 23.44 7.75 C28.3 7.99, 33.58 8.22, 40.04 7.94 C46.5 7.66, 56.6 6.96, 62.23 6.05 C67.85 5.14, 71.34 3.67, 73.8 2.5 C76.25 1.32, 76.34 -0.59, 76.94 -0.99 M-1.08 -0.05 C-0.39 0.13, 1.36 1.51, 3.23 2.83 C5.11 4.15, 6.7 6.91, 10.19 7.89 C13.69 8.87, 18.93 8.66, 24.2 8.71 C29.48 8.77, 35.27 8.31, 41.86 8.21 C48.44 8.11, 58.35 8.75, 63.72 8.14 C69.08 7.52, 72.04 6.15, 74.05 4.52 C76.06 2.89, 75.49 -0.71, 75.8 -1.64" stroke="#000000" stroke-width="1" fill="none"></path></g></g><mask></mask><g stroke-linecap="round" transform="translate(729.210759263939 7705.134139800319) rotate(0 38.29876800932743 7.745637696423728)"><path d="M44.5 -0.13 C52.28 -0.02, 62.3 1.24, 67.66 2.61 C73.01 3.98, 76.52 6.37, 76.62 8.1 C76.73 9.82, 73.5 11.82, 68.27 12.95 C63.05 14.08, 53.45 14.57, 45.27 14.86 C37.1 15.15, 26.31 15.32, 19.2 14.67 C12.09 14.03, 5.42 12.61, 2.62 11 C-0.19 9.39, -0.34 6.75, 2.39 5.03 C5.12 3.3, 11.85 1.43, 18.98 0.64 C26.11 -0.15, 40.65 0.29, 45.17 0.28 C49.69 0.27, 46.29 0.37, 46.11 0.55 M35.99 0.52 C43.96 0.49, 55.57 1.04, 62.21 1.89 C68.85 2.74, 74.21 4.11, 75.85 5.63 C77.48 7.16, 75.88 9.54, 72 11.05 C68.12 12.56, 60.06 14.11, 52.58 14.68 C45.09 15.24, 34.95 14.9, 27.09 14.44 C19.23 13.98, 10 13.26, 5.43 11.93 C0.86 10.6, -1.43 8.14, -0.35 6.47 C0.73 4.8, 5.82 3.08, 11.91 1.92 C17.99 0.76, 32.17 -0.16, 36.16 -0.48 C40.14 -0.81, 35.77 -0.16, 35.83 -0.03" stroke="none" stroke-width="0" fill="#fff"></path><path d="M39.02 -0.29 C46.79 -0.42, 57.33 0.89, 63.45 1.98 C69.57 3.07, 74.5 4.64, 75.73 6.26 C76.95 7.87, 75.04 10.18, 70.82 11.67 C66.59 13.16, 58.07 14.67, 50.37 15.18 C42.67 15.7, 32.2 15.45, 24.63 14.75 C17.05 14.06, 8.86 12.43, 4.92 11.02 C0.97 9.61, -0.64 7.83, 0.95 6.3 C2.55 4.77, 7.83 2.94, 14.49 1.82 C21.15 0.7, 36.26 -0.21, 40.91 -0.41 C45.56 -0.61, 42.55 0.46, 42.39 0.61 M44.82 -0.57 C52.74 -0.27, 62.29 1.41, 67.49 2.88 C72.68 4.35, 75.86 6.64, 75.99 8.26 C76.12 9.87, 73.48 11.45, 68.28 12.55 C63.09 13.65, 52.84 14.54, 44.84 14.86 C36.84 15.18, 27.43 15.28, 20.27 14.46 C13.11 13.63, 4.93 11.5, 1.89 9.9 C-1.15 8.29, -0.87 6.29, 2.05 4.82 C4.97 3.35, 12.27 1.79, 19.41 1.08 C26.54 0.37, 40.81 0.69, 44.84 0.57 C48.87 0.46, 43.9 0.33, 43.61 0.42" stroke="#000000" stroke-width="1" fill="none"></path></g><g stroke-linecap="round" transform="translate(765.7027463691616 7729.610807480221) rotate(0 5.613051577080796 6.09187924222806)"><path d="M6.41 -0.06 C7.55 0.07, 8.72 1.22, 9.56 2.19 C10.4 3.17, 11.4 4.66, 11.48 5.8 C11.55 6.94, 10.82 7.97, 10.03 9.03 C9.23 10.08, 7.8 11.6, 6.7 12.12 C5.6 12.64, 4.4 12.74, 3.42 12.15 C2.44 11.55, 1.32 9.9, 0.83 8.56 C0.34 7.23, 0.25 5.35, 0.48 4.13 C0.72 2.92, 1.23 1.94, 2.25 1.3 C3.26 0.66, 5.89 0.39, 6.57 0.3 C7.24 0.21, 6.35 0.74, 6.29 0.75 M5.27 0.43 C6.48 -0.04, 7.64 -0.18, 8.51 0.35 C9.38 0.89, 10.18 2.4, 10.49 3.65 C10.8 4.9, 10.68 6.69, 10.37 7.84 C10.07 9, 9.7 9.89, 8.65 10.6 C7.6 11.31, 5.4 12.24, 4.09 12.1 C2.77 11.97, 1.49 10.81, 0.74 9.81 C0 8.8, -0.41 7.42, -0.38 6.08 C-0.34 4.74, 0.25 2.81, 0.96 1.79 C1.66 0.76, 3.3 0.26, 3.87 -0.08 C4.45 -0.42, 4.33 -0.3, 4.43 -0.26" stroke="none" stroke-width="0" fill="#868e96"></path><path d="M6.65 0.19 C7.73 0.36, 8.87 1.01, 9.59 2 C10.32 3, 11 4.8, 10.99 6.17 C10.99 7.55, 10.29 9.29, 9.56 10.24 C8.83 11.2, 7.74 11.81, 6.63 11.91 C5.51 12, 3.88 11.46, 2.86 10.82 C1.84 10.18, 0.88 9.22, 0.5 8.07 C0.12 6.93, 0.1 5.25, 0.56 3.96 C1.03 2.67, 2.15 0.87, 3.29 0.31 C4.44 -0.25, 6.86 0.64, 7.44 0.6 C8.02 0.56, 6.84 0.11, 6.8 0.06 M4.47 0.36 C5.4 0.21, 6.41 0.72, 7.51 1.25 C8.61 1.78, 10.61 2.55, 11.09 3.56 C11.57 4.57, 10.68 6.06, 10.4 7.32 C10.12 8.58, 10.41 10.42, 9.4 11.12 C8.4 11.83, 5.71 11.76, 4.39 11.55 C3.06 11.35, 2.07 10.77, 1.45 9.92 C0.84 9.07, 0.69 7.63, 0.7 6.46 C0.7 5.3, 1 3.97, 1.48 2.95 C1.96 1.93, 3.22 0.73, 3.57 0.33 C3.92 -0.07, 3.55 0.55, 3.6 0.55" stroke="#000000" stroke-width="1" fill="none"></path></g><g stroke-linecap="round" transform="translate(766.0538881530952 7755.827421767288) rotate(0 5.613051577080796 6.09187924222806)"><path d="M4.99 0.5 C6.1 0.35, 8.02 0.76, 8.98 1.32 C9.94 1.88, 10.54 2.63, 10.77 3.85 C10.99 5.08, 10.75 7.31, 10.33 8.67 C9.91 10.03, 9.2 11.51, 8.24 12.04 C7.28 12.57, 5.72 12.3, 4.59 11.84 C3.45 11.38, 2.2 10.26, 1.42 9.27 C0.64 8.28, -0.12 7.07, -0.08 5.89 C-0.03 4.7, 0.88 3.04, 1.68 2.15 C2.49 1.25, 4.13 0.9, 4.75 0.51 C5.37 0.12, 5.39 -0.16, 5.41 -0.19 M6.76 -0.31 C7.71 -0.27, 8.88 0.89, 9.54 1.92 C10.19 2.94, 10.59 4.63, 10.67 5.85 C10.76 7.08, 10.84 8.24, 10.06 9.28 C9.27 10.32, 7.26 11.78, 5.94 12.08 C4.63 12.38, 3.18 11.75, 2.18 11.08 C1.19 10.41, 0.33 9.32, -0.03 8.06 C-0.38 6.81, -0.31 4.78, 0.05 3.55 C0.41 2.31, 1.07 1.29, 2.14 0.64 C3.2 -0.02, 5.74 -0.25, 6.44 -0.41 C7.14 -0.56, 6.21 -0.44, 6.34 -0.3" stroke="none" stroke-width="0" fill="#868e96"></path><path d="M4.37 -0.24 C5.46 -0.53, 7.27 0.05, 8.32 0.81 C9.37 1.56, 10.24 3.05, 10.69 4.27 C11.14 5.49, 11.4 7, 11.03 8.12 C10.66 9.24, 9.53 10.33, 8.48 10.99 C7.42 11.66, 5.89 12.29, 4.7 12.12 C3.52 11.96, 2.11 11.1, 1.38 9.99 C0.66 8.89, 0.27 6.76, 0.35 5.5 C0.43 4.25, 1.15 3.43, 1.87 2.47 C2.58 1.5, 4.01 0.19, 4.63 -0.28 C5.26 -0.74, 5.6 -0.51, 5.6 -0.32 M3.76 0.76 C4.88 0.36, 7.43 0.16, 8.5 0.57 C9.57 0.98, 9.66 2.01, 10.18 3.22 C10.71 4.43, 12.02 6.6, 11.67 7.84 C11.31 9.07, 9.21 9.96, 8.07 10.62 C6.93 11.27, 5.81 11.83, 4.83 11.77 C3.85 11.71, 2.93 11.05, 2.19 10.23 C1.45 9.42, 0.69 8.15, 0.39 6.87 C0.09 5.6, -0.13 3.66, 0.41 2.58 C0.95 1.5, 3.06 0.87, 3.63 0.42 C4.2 -0.04, 3.61 -0.29, 3.83 -0.15" stroke="#000000" stroke-width="1" fill="none"></path></g><g stroke-linecap="round" transform="translate(766.7027463691616 7784.596148338593) rotate(357.5021844865888 5.613051577080796 6.09187924222806)"><path d="M5.69 0.32 C6.78 0.04, 8 0.01, 8.84 0.79 C9.67 1.57, 10.36 3.54, 10.67 4.98 C10.98 6.42, 11.13 8.34, 10.68 9.44 C10.24 10.54, 9.08 11.23, 8 11.56 C6.91 11.89, 5.4 11.78, 4.2 11.43 C3 11.09, 1.44 10.47, 0.77 9.48 C0.1 8.49, 0.11 6.73, 0.2 5.49 C0.3 4.26, 0.47 3.03, 1.37 2.07 C2.26 1.1, 4.87 0.06, 5.56 -0.31 C6.26 -0.68, 5.45 -0.4, 5.52 -0.17 M5.84 -0.2 C6.86 -0.12, 8.18 0.79, 9.1 1.65 C10.01 2.51, 11.27 3.62, 11.34 4.96 C11.4 6.3, 10.32 8.54, 9.49 9.66 C8.65 10.78, 7.44 11.41, 6.32 11.7 C5.21 12, 3.8 12.03, 2.78 11.43 C1.76 10.82, 0.74 9.28, 0.21 8.08 C-0.33 6.88, -0.79 5.47, -0.43 4.22 C-0.07 2.96, 1.28 1.33, 2.35 0.55 C3.43 -0.23, 5.24 -0.37, 6 -0.48 C6.76 -0.59, 6.91 -0.19, 6.93 -0.12" stroke="none" stroke-width="0" fill="#868e96"></path><path d="M5.56 -0.09 C6.73 -0.06, 8.14 0.8, 9.1 1.65 C10.07 2.5, 11.12 3.81, 11.37 5.01 C11.61 6.21, 11.21 7.69, 10.58 8.85 C9.95 10, 8.73 11.44, 7.58 11.94 C6.44 12.44, 4.79 12.43, 3.7 11.86 C2.6 11.3, 1.53 9.65, 1.01 8.55 C0.49 7.45, 0.45 6.52, 0.57 5.27 C0.69 4.01, 0.8 1.95, 1.75 1 C2.7 0.04, 5.63 -0.34, 6.27 -0.44 C6.92 -0.54, 5.76 0.19, 5.63 0.39 M6.3 -0.09 C7.45 -0.27, 7.96 0.28, 8.89 1.19 C9.82 2.1, 11.75 4.09, 11.88 5.37 C12.01 6.66, 10.49 7.85, 9.69 8.88 C8.89 9.91, 8.04 11.11, 7.1 11.57 C6.16 12.03, 5.07 12.05, 4.05 11.66 C3.02 11.28, 1.73 10.41, 0.97 9.27 C0.2 8.13, -0.67 6.12, -0.57 4.82 C-0.47 3.51, 0.57 2.32, 1.56 1.45 C2.56 0.58, 4.6 -0.28, 5.42 -0.41 C6.23 -0.54, 6.32 0.47, 6.45 0.67" stroke="#000000" stroke-width="1" fill="none"></path></g><g transform="translate(708.627394817132 7806.1862899374355) rotate(0 60.29874496153457 11.797580535952875)"><text x="60.29874496153468" y="16.271922191069216" font-family="Virgil, sans-serif, Segoe UI Emoji" font-size="17.4778970902999px" fill="#000000" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Relational DB</text></g><g stroke-linecap="round"><g transform="translate(792.5860020445639 7682.647481550348) rotate(0 38.83431153801962 41.78969162648718)" fill-rule="evenodd"><path d="M-1.98 0.82 C-2.03 14.04, 0.7 63.36, 0.68 77.33 C0.66 91.3, -2.93 82.73, -2.11 84.63 C-1.29 86.54, 2.22 88.05, 5.61 88.77 C9.01 89.5, 12.36 88.15, 18.24 88.98 C24.12 89.81, 33.01 93.78, 40.91 93.74 C48.8 93.71, 60.29 90.15, 65.59 88.76 C70.9 87.37, 70.52 86.33, 72.75 85.39 C74.98 84.46, 78.26 84.9, 78.96 83.17 C79.66 81.43, 77.08 88.15, 76.97 74.97 C76.86 61.79, 78.45 16.59, 78.29 4.09 C78.13 -8.41, 77.31 1.34, 76.01 -0.03 C74.72 -1.39, 72.74 -3.18, 70.51 -4.1 C68.28 -5.02, 67.97 -5.21, 62.62 -5.52 C57.28 -5.84, 46.08 -5.59, 38.46 -5.98 C30.84 -6.37, 22.48 -8.65, 16.92 -7.86 C11.36 -7.07, 7.8 -2.87, 5.1 -1.22 C2.4 0.42, 1.18 1.72, 0.72 2.01 C0.26 2.3, 2.35 1, 2.34 0.54" stroke="none" stroke-width="0" fill="#ced4da" fill-rule="evenodd"></path><path d="M-1.17 -0.15 C-1.18 12.16, 0.1 60.31, 0.32 74.37 C0.55 88.44, -0.58 81.86, 0.21 84.22 C0.99 86.58, 1.99 87.3, 5.02 88.53 C8.06 89.76, 12.34 91.01, 18.42 91.59 C24.49 92.18, 33.94 92.32, 41.47 92.04 C49 91.77, 58.19 90.9, 63.61 89.95 C69.02 89, 71.71 87.58, 73.97 86.34 C76.22 85.09, 76.55 84.33, 77.15 82.45 C77.75 80.58, 77.47 87.78, 77.57 75.08 C77.66 62.38, 78.07 18.91, 77.71 6.25 C77.35 -6.4, 76.33 1, 75.41 -0.86 C74.49 -2.71, 74.44 -4.17, 72.19 -4.89 C69.94 -5.61, 67.72 -4.67, 61.89 -5.18 C56.07 -5.68, 44.59 -7.42, 37.24 -7.9 C29.89 -8.38, 23.5 -8.83, 17.81 -8.05 C12.12 -7.28, 6.17 -4.46, 3.09 -3.25 C0.01 -2.05, -0.22 -1.31, -0.67 -0.81 C-1.13 -0.31, 0.08 -0.4, 0.35 -0.25 M0.42 -1.27 C0.22 11.12, -0.44 61.58, -0.59 75.48 C-0.73 89.38, -0.91 80.27, -0.46 82.11 C0 83.96, -0.8 85.41, 2.16 86.53 C5.12 87.66, 11.08 88.06, 17.29 88.85 C23.51 89.64, 31.59 91.3, 39.44 91.25 C47.3 91.21, 58.31 89.44, 64.4 88.57 C70.49 87.7, 74.11 86.72, 75.98 86.02 C77.85 85.32, 75.21 85.76, 75.65 84.36 C76.08 82.97, 78.13 90.53, 78.6 77.67 C79.08 64.81, 78.72 20.42, 78.47 7.21 C78.23 -6, 78.07 0.05, 77.12 -1.57 C76.17 -3.19, 75.36 -1.97, 72.78 -2.52 C70.2 -3.07, 67.49 -3.88, 61.62 -4.87 C55.74 -5.85, 44.69 -8.01, 37.53 -8.44 C30.36 -8.87, 24.57 -8.42, 18.6 -7.43 C12.63 -6.44, 4.59 -3.62, 1.72 -2.52 C-1.15 -1.43, 1.8 -1.25, 1.37 -0.85 C0.95 -0.45, -0.34 0.01, -0.85 -0.13" stroke="#000000" stroke-width="1" fill="none"></path></g></g><mask></mask><g stroke-linecap="round"><g transform="translate(793.1099314828384 7739.773765208078) rotate(0 38.07480216478416 3.75053359870617)"><path d="M0.07 -0.83 C0.64 -0.16, 0.26 2.51, 2.23 3.87 C4.19 5.23, 8.37 6.49, 11.85 7.34 C15.34 8.2, 18.24 8.8, 23.13 9.01 C28.01 9.23, 34.62 8.98, 41.16 8.65 C47.7 8.31, 57 7.93, 62.36 7 C67.73 6.08, 70.83 4.44, 73.35 3.1 C75.88 1.75, 76.78 -0.31, 77.5 -1.09 M-1.35 1.35 C-0.82 1.67, -0.78 1.28, 1.38 1.99 C3.55 2.69, 7.92 4.73, 11.64 5.56 C15.36 6.39, 19.01 6.36, 23.72 6.98 C28.44 7.6, 33.82 9.46, 39.91 9.29 C46 9.11, 54.69 7.18, 60.27 5.93 C65.85 4.68, 70.65 3.06, 73.38 1.77 C76.11 0.49, 76.16 -1.52, 76.65 -1.8" stroke="#000000" stroke-width="1" fill="none"></path></g></g><mask></mask><g stroke-linecap="round"><g transform="translate(792.0780741603344 7710.809709872856) rotate(0 38.262801098576574 3.475566284632805)"><path d="M0.2 0.46 C0.7 1.34, 1.21 3.34, 3.09 4.48 C4.96 5.62, 8.16 6.61, 11.46 7.28 C14.76 7.95, 17.96 8.35, 22.88 8.49 C27.81 8.63, 34.7 8.33, 41.03 8.11 C47.37 7.88, 55.26 8.07, 60.9 7.11 C66.53 6.15, 72.07 3.8, 74.86 2.35 C77.66 0.9, 77.16 -1.11, 77.69 -1.57 M-1.16 -0.35 C-0.73 0.29, 0.66 1.95, 2.69 2.92 C4.72 3.89, 7.6 4.92, 11.04 5.46 C14.49 6.01, 18.57 5.68, 23.35 6.18 C28.13 6.68, 33.32 8.48, 39.71 8.46 C46.1 8.45, 55.69 6.79, 61.69 6.1 C67.68 5.4, 73.14 5.13, 75.68 4.3 C78.22 3.47, 76.75 2.15, 76.93 1.13" stroke="#000000" stroke-width="1" fill="none"></path></g></g><mask></mask><g stroke-linecap="round" transform="translate(791.0201251782523 7675.515212924667) rotate(0 38.29876800932743 7.745637696423728)"><path d="M36.56 0.32 C44.34 0.23, 55.12 0.92, 61.7 1.83 C68.29 2.74, 74.35 4.14, 76.08 5.78 C77.81 7.43, 75.87 10.14, 72.09 11.68 C68.31 13.23, 60.88 14.4, 53.41 15.05 C45.93 15.71, 35.12 16.11, 27.25 15.61 C19.37 15.11, 10.64 13.47, 6.13 12.05 C1.62 10.63, -0.89 8.8, 0.17 7.08 C1.23 5.36, 6.23 2.87, 12.5 1.73 C18.77 0.59, 33.44 0.42, 37.79 0.22 C42.15 0.01, 38.68 0.42, 38.63 0.49 M35.47 0.56 C43.07 0.41, 53.67 0.97, 60.4 1.75 C67.13 2.54, 73.95 3.73, 75.87 5.28 C77.79 6.82, 75.67 9.55, 71.92 11.03 C68.17 12.51, 60.83 13.46, 53.37 14.16 C45.9 14.85, 34.85 15.58, 27.13 15.2 C19.41 14.82, 11.46 13.3, 7.06 11.89 C2.67 10.49, -0.14 8.42, 0.74 6.75 C1.62 5.07, 6.58 2.85, 12.34 1.84 C18.11 0.83, 31.4 1.02, 35.33 0.7 C39.27 0.37, 35.93 -0.11, 35.96 -0.11" stroke="none" stroke-width="0" fill="#fff"></path><path d="M43.76 0.19 C51.47 0.2, 61.21 0.83, 66.69 2.06 C72.16 3.29, 76.33 5.82, 76.59 7.6 C76.85 9.37, 73.36 11.37, 68.23 12.72 C63.11 14.06, 53.82 15.43, 45.84 15.67 C37.86 15.91, 27.57 14.95, 20.36 14.16 C13.15 13.37, 5.73 12.36, 2.58 10.95 C-0.56 9.54, -1.15 7.34, 1.48 5.71 C4.11 4.07, 10.82 2.1, 18.34 1.15 C25.86 0.2, 41.52 0.11, 46.6 -0.01 C51.68 -0.14, 48.98 0.29, 48.84 0.4 M32.82 0.15 C40.45 -0.27, 51.39 -0.4, 58.23 0.49 C65.07 1.37, 71.2 3.68, 73.87 5.45 C76.53 7.23, 77.15 9.6, 74.22 11.15 C71.29 12.71, 63.41 14.01, 56.31 14.78 C49.2 15.54, 39.52 16.19, 31.6 15.75 C23.67 15.32, 14.02 13.38, 8.75 12.14 C3.48 10.9, -0.25 9.94, -0.04 8.3 C0.17 6.66, 4.77 3.71, 10.02 2.3 C15.27 0.88, 27.64 0.16, 31.47 -0.18 C35.3 -0.52, 32.76 0.15, 32.98 0.26" stroke="#000000" stroke-width="1" fill="none"></path></g><g stroke-linecap="round" transform="translate(827.5121122834748 7699.99188060457) rotate(0 5.613051577080796 6.09187924222806)"><path d="M5.17 0.26 C6.37 -0.04, 8.23 0.02, 9.17 0.78 C10.11 1.53, 10.48 3.47, 10.81 4.8 C11.14 6.13, 11.53 7.54, 11.14 8.75 C10.75 9.95, 9.61 11.49, 8.48 12.05 C7.34 12.62, 5.61 12.48, 4.34 12.13 C3.08 11.79, 1.61 11.12, 0.91 9.99 C0.21 8.86, -0.07 6.65, 0.12 5.33 C0.31 4.01, 1.09 2.89, 2.03 2.06 C2.97 1.23, 5.18 0.69, 5.76 0.35 C6.34 0.01, 5.61 -0.05, 5.52 0.01 M4.83 0.22 C6.12 -0.07, 8.55 -0.04, 9.5 0.72 C10.45 1.48, 10.37 3.52, 10.51 4.8 C10.65 6.08, 10.88 7.23, 10.36 8.4 C9.83 9.57, 8.33 11.28, 7.35 11.83 C6.37 12.38, 5.49 12.18, 4.47 11.72 C3.46 11.26, 1.93 10.23, 1.26 9.07 C0.59 7.92, 0.43 5.96, 0.44 4.81 C0.44 3.65, 0.44 2.99, 1.28 2.14 C2.11 1.29, 4.86 0.07, 5.45 -0.28 C6.04 -0.63, 4.86 -0.11, 4.83 0.05" stroke="none" stroke-width="0" fill="#868e96"></path><path d="M6.07 -0.47 C7.19 -0.44, 8.79 0.88, 9.6 1.92 C10.41 2.96, 10.89 4.44, 10.91 5.77 C10.93 7.11, 10.37 8.97, 9.72 9.94 C9.08 10.9, 8.16 11.22, 7.05 11.54 C5.93 11.87, 4.16 12.32, 3.01 11.9 C1.86 11.48, 0.56 10.25, 0.16 9.01 C-0.25 7.77, 0.21 5.83, 0.59 4.48 C0.96 3.13, 1.5 1.66, 2.4 0.91 C3.31 0.16, 5.26 0.14, 6 -0.01 C6.73 -0.16, 6.83 -0.13, 6.84 0.01 M5.62 -0.6 C6.55 -0.71, 7.45 0.48, 8.38 1.48 C9.32 2.47, 10.95 4.1, 11.21 5.37 C11.48 6.65, 10.45 8, 9.96 9.13 C9.48 10.25, 9.28 11.72, 8.31 12.1 C7.33 12.48, 5.36 11.76, 4.12 11.42 C2.88 11.09, 1.42 11.15, 0.86 10.08 C0.3 9, 0.71 6.42, 0.74 4.97 C0.77 3.51, 0.18 2.19, 1.05 1.36 C1.92 0.54, 5.27 0.28, 5.98 0.01 C6.68 -0.26, 5.33 -0.25, 5.3 -0.26" stroke="#000000" stroke-width="1" fill="none"></path></g><g stroke-linecap="round" transform="translate(827.8632540674084 7726.208494891636) rotate(0 5.613051577080796 6.09187924222806)"><path d="M6.89 -0.2 C7.98 -0.06, 8.86 1.41, 9.65 2.47 C10.44 3.52, 11.51 4.82, 11.63 6.15 C11.76 7.47, 11.2 9.4, 10.39 10.41 C9.59 11.42, 8.07 11.98, 6.79 12.21 C5.51 12.43, 3.79 12.46, 2.74 11.75 C1.69 11.04, 0.81 9.2, 0.48 7.96 C0.14 6.72, 0.29 5.44, 0.74 4.32 C1.2 3.19, 2.23 1.92, 3.22 1.2 C4.22 0.48, 6.13 0.14, 6.71 0 C7.29 -0.14, 6.74 0.32, 6.72 0.37 M6.95 -0.57 C8.1 -0.49, 8.63 1.03, 9.32 2.03 C10.01 3.03, 11.03 4.1, 11.09 5.45 C11.14 6.79, 10.29 8.99, 9.66 10.08 C9.02 11.17, 8.35 11.79, 7.28 11.98 C6.21 12.18, 4.35 11.92, 3.25 11.23 C2.15 10.55, 1.28 8.95, 0.68 7.85 C0.08 6.75, -0.68 5.87, -0.34 4.64 C0 3.42, 1.69 1.28, 2.73 0.51 C3.77 -0.26, 5.3 0.07, 5.9 0.03 C6.5 -0.02, 6.29 0.07, 6.33 0.25" stroke="none" stroke-width="0" fill="#868e96"></path><path d="M5.97 0.15 C7.07 0.26, 8.39 0.95, 9.18 1.88 C9.97 2.82, 10.52 4.56, 10.7 5.75 C10.88 6.94, 10.89 7.94, 10.27 9.02 C9.66 10.09, 8.19 11.72, 6.98 12.22 C5.77 12.72, 4.01 12.59, 3.01 12.02 C2.01 11.45, 1.47 10.04, 0.99 8.78 C0.52 7.53, 0.04 5.76, 0.17 4.48 C0.3 3.2, 0.76 1.89, 1.77 1.11 C2.78 0.33, 5.5 -0.1, 6.24 -0.22 C6.98 -0.35, 6.24 0.14, 6.22 0.35 M5.1 0.25 C6.22 0.4, 8.52 1.29, 9.42 2.15 C10.33 3.01, 10.26 4.16, 10.51 5.41 C10.76 6.65, 11.41 8.64, 10.93 9.63 C10.44 10.62, 8.82 10.89, 7.59 11.36 C6.36 11.83, 4.59 12.9, 3.56 12.45 C2.52 12, 2.1 9.96, 1.4 8.66 C0.7 7.36, -0.85 5.87, -0.63 4.66 C-0.41 3.44, 1.68 2.2, 2.74 1.36 C3.79 0.52, 5.12 -0.07, 5.68 -0.39 C6.25 -0.71, 6.16 -0.74, 6.14 -0.56" stroke="#000000" stroke-width="1" fill="none"></path></g><g stroke-linecap="round" transform="translate(828.5121122834748 7754.977221462941) rotate(357.5021844865888 5.613051577080796 6.09187924222806)"><path d="M6.06 0.41 C7.2 0.55, 9.17 1.1, 10.1 2.07 C11.03 3.03, 11.62 4.91, 11.64 6.21 C11.66 7.51, 11.04 8.84, 10.23 9.86 C9.41 10.89, 7.93 12.13, 6.76 12.35 C5.59 12.58, 4.18 11.83, 3.2 11.22 C2.22 10.62, 1.31 9.81, 0.89 8.72 C0.48 7.63, 0.45 5.99, 0.73 4.68 C1.01 3.38, 1.6 1.64, 2.56 0.89 C3.51 0.14, 5.74 0.36, 6.45 0.19 C7.16 0.03, 6.77 -0.1, 6.83 -0.1 M5.41 -0.17 C6.48 -0.16, 8.46 0.09, 9.39 1.03 C10.32 1.98, 10.71 4.12, 10.97 5.51 C11.24 6.91, 11.55 8.35, 10.99 9.41 C10.43 10.46, 8.84 11.52, 7.62 11.85 C6.4 12.18, 4.96 11.77, 3.67 11.37 C2.37 10.96, 0.46 10.59, -0.14 9.42 C-0.74 8.24, -0.23 5.7, 0.06 4.31 C0.35 2.92, 0.65 1.78, 1.6 1.07 C2.55 0.36, 5.07 0.13, 5.75 0.04 C6.43 -0.04, 5.71 0.43, 5.67 0.54" stroke="none" stroke-width="0" fill="#868e96"></path><path d="M3.95 0.4 C4.96 0.06, 6.45 0.5, 7.57 0.96 C8.7 1.43, 10.18 1.99, 10.71 3.17 C11.25 4.35, 11.17 6.66, 10.78 8.05 C10.39 9.43, 9.28 10.8, 8.39 11.48 C7.5 12.15, 6.57 12.34, 5.43 12.12 C4.3 11.89, 2.58 11.08, 1.6 10.14 C0.61 9.19, -0.39 7.75, -0.48 6.44 C-0.57 5.13, 0.28 3.29, 1.05 2.26 C1.82 1.23, 3.56 0.55, 4.15 0.28 C4.74 0, 4.53 0.5, 4.61 0.61 M4.61 0.78 C5.71 0.45, 6.51 0.42, 7.63 1 C8.75 1.58, 10.76 3.16, 11.34 4.25 C11.91 5.34, 11.56 6.24, 11.09 7.52 C10.62 8.8, 9.44 11.24, 8.51 11.95 C7.58 12.65, 6.8 12.08, 5.49 11.74 C4.19 11.39, 1.49 10.77, 0.68 9.86 C-0.12 8.95, 0.57 7.59, 0.66 6.27 C0.74 4.94, 0.48 3.05, 1.19 1.91 C1.9 0.78, 4.39 -0.29, 4.92 -0.55 C5.45 -0.82, 4.48 0.12, 4.37 0.33" stroke="#000000" stroke-width="1" fill="none"></path></g><g stroke-linecap="round"><g transform="translate(1844.6776705264042 8066.8704350364405) rotate(0 38.16859306542665 41.98245332694478)" fill-rule="evenodd"><path d="M0.26 -1.31 C0.17 10.74, 1.69 59.48, 1.58 73.6 C1.47 87.73, -0.99 80.76, -0.41 83.43 C0.18 86.09, 2.17 88.24, 5.07 89.62 C7.97 91, 11.14 91.04, 16.99 91.71 C22.84 92.38, 32.77 93.71, 40.18 93.61 C47.58 93.51, 55.53 92.37, 61.42 91.11 C67.32 89.86, 72.58 87.39, 75.55 86.09 C78.52 84.78, 79.38 84.97, 79.25 83.26 C79.12 81.55, 74.94 88.48, 74.77 75.83 C74.59 63.19, 77.75 20.39, 78.19 7.4 C78.63 -5.59, 78.36 -0.13, 77.42 -2.09 C76.47 -4.05, 75.56 -3.65, 72.51 -4.35 C69.46 -5.04, 64.9 -5.45, 59.1 -6.26 C53.3 -7.07, 44.7 -9.35, 37.69 -9.21 C30.69 -9.08, 22.69 -6.28, 17.08 -5.48 C11.47 -4.68, 6.75 -5.66, 4.05 -4.42 C1.36 -3.17, 1.42 1.56, 0.92 1.96 C0.42 2.36, 1.25 -1.48, 1.05 -2.04" stroke="none" stroke-width="0" fill="#ced4da" fill-rule="evenodd"></path><path d="M-0.1 0.34 C-0.39 12.8, -1.04 62.08, -0.87 75.9 C-0.69 89.72, 0.05 81.48, 0.96 83.25 C1.87 85.02, 1.69 85.36, 4.58 86.49 C7.46 87.62, 12.27 89.02, 18.27 90.05 C24.28 91.09, 33.1 92.75, 40.59 92.72 C48.08 92.7, 57.44 91.17, 63.19 89.92 C68.93 88.67, 72.95 86.47, 75.07 85.22 C77.18 83.97, 75.53 83.94, 75.87 82.41 C76.2 80.88, 77.01 88.8, 77.07 76.04 C77.12 63.29, 76.42 18.55, 76.19 5.89 C75.97 -6.77, 76.39 1.83, 75.73 0.07 C75.08 -1.7, 74.57 -3.82, 72.25 -4.7 C69.94 -5.58, 67.71 -4.74, 61.85 -5.21 C56 -5.67, 44.51 -7.29, 37.1 -7.48 C29.7 -7.67, 23.25 -6.92, 17.43 -6.36 C11.61 -5.8, 5.1 -5.06, 2.16 -4.12 C-0.77 -3.18, 0.31 -1.35, -0.18 -0.71 C-0.66 -0.08, -0.76 -0.25, -0.73 -0.32 M-1.61 -0.53 C-1.63 12.1, 0.87 60, 1.26 74.14 C1.64 88.28, 0.05 82.14, 0.69 84.3 C1.34 86.46, 2.41 86.11, 5.14 87.08 C7.87 88.06, 10.97 89.29, 17.08 90.16 C23.18 91.03, 33.98 92.57, 41.76 92.29 C49.54 92.02, 58.39 89.24, 63.76 88.52 C69.13 87.8, 71.73 88.67, 74 87.97 C76.26 87.27, 76.72 86.39, 77.36 84.3 C78 82.22, 78.04 88.42, 77.84 75.47 C77.64 62.53, 76.2 19.26, 76.16 6.65 C76.12 -5.96, 78.15 1.32, 77.61 -0.16 C77.06 -1.64, 75.55 -1.44, 72.88 -2.23 C70.2 -3.03, 67.48 -3.99, 61.56 -4.91 C55.63 -5.84, 44.57 -7.2, 37.31 -7.8 C30.06 -8.4, 23.57 -9.17, 18.02 -8.51 C12.46 -7.85, 7.23 -5.14, 3.97 -3.84 C0.72 -2.54, -1.06 -1.3, -1.53 -0.69 C-2 -0.09, 0.83 -0.37, 1.16 -0.23" stroke="#000000" stroke-width="1" fill="none"></path></g></g><mask></mask><g stroke-linecap="round"><g transform="translate(1845.2015999646796 8123.99671869417) rotate(0 38.6195934032412 3.7361585743301475)"><path d="M-1.12 0.7 C-0.61 1.12, 0.89 2.13, 2.98 2.9 C5.07 3.67, 8.07 4.54, 11.41 5.3 C14.74 6.07, 18.18 6.8, 22.99 7.47 C27.8 8.14, 33.79 9.41, 40.28 9.33 C46.77 9.24, 56.25 8.2, 61.95 6.97 C67.64 5.75, 72.07 3.33, 74.45 1.98 C76.83 0.63, 75.77 -0.7, 76.22 -1.13 M0.49 0.02 C0.94 0.57, 0.79 3.15, 2.53 4.17 C4.28 5.18, 7.46 5.42, 10.96 6.11 C14.45 6.8, 18.3 8.2, 23.51 8.29 C28.72 8.39, 35.59 7.07, 42.22 6.66 C48.85 6.26, 57.82 6.37, 63.29 5.88 C68.76 5.39, 72.54 5.02, 75.05 3.73 C77.56 2.44, 78.28 -0.88, 78.36 -1.86" stroke="#000000" stroke-width="1" fill="none"></path></g></g><mask></mask><g stroke-linecap="round"><g transform="translate(1844.1697426421756 8095.032663358947) rotate(0 38.58745653604592 3.715664297668809)"><path d="M0.95 -0.51 C1.58 -0.22, 0.91 1.4, 2.64 2.44 C4.37 3.48, 8.09 4.62, 11.32 5.74 C14.55 6.86, 17.12 8.78, 22 9.17 C26.88 9.56, 33.95 8.6, 40.62 8.07 C47.28 7.55, 56.5 6.95, 62 5.99 C67.49 5.03, 71.05 3.41, 73.59 2.31 C76.12 1.21, 76.7 -0.09, 77.19 -0.61 M-0.01 -1.83 C0.61 -1.48, 0.2 2.03, 2.01 3.47 C3.81 4.9, 7.49 6.15, 10.83 6.77 C14.16 7.4, 17.3 6.95, 22 7.22 C26.71 7.49, 32.18 8.28, 39.07 8.42 C45.97 8.55, 57.59 8.75, 63.36 8.05 C69.14 7.35, 71.6 5.76, 73.73 4.24 C75.87 2.72, 75.44 -0.57, 76.17 -1.07" stroke="#000000" stroke-width="1" fill="none"></path></g></g><mask></mask><g stroke-linecap="round" transform="translate(1843.1117936600936 8059.738166410758) rotate(0 38.29876800932743 7.745637696423728)"><path d="M41.99 -0.37 C49.85 -0.33, 59.95 1.19, 65.66 2.41 C71.36 3.62, 75.55 5.24, 76.22 6.91 C76.9 8.58, 74.48 10.99, 69.7 12.41 C64.93 13.84, 55.48 15.02, 47.55 15.45 C39.62 15.87, 29.56 15.7, 22.13 14.94 C14.71 14.18, 6.49 12.51, 2.99 10.89 C-0.51 9.26, -1.21 6.86, 1.13 5.19 C3.46 3.52, 9.8 1.74, 17 0.87 C24.21 0, 39.53 0.07, 44.35 -0.03 C49.17 -0.13, 46.1 0.22, 45.95 0.29 M46.89 -0.55 C54.66 -0.18, 63.57 1.86, 68.59 3.27 C73.62 4.68, 77.35 6.29, 77.04 7.93 C76.73 9.57, 72.47 11.82, 66.73 13.12 C61 14.43, 50.75 15.6, 42.64 15.75 C34.52 15.9, 24.83 15.07, 18.04 14.01 C11.26 12.96, 4.55 10.91, 1.95 9.42 C-0.64 7.92, -0.59 6.59, 2.48 5.05 C5.54 3.5, 13.07 1.08, 20.35 0.14 C27.64 -0.79, 41.82 -0.64, 46.17 -0.56 C50.52 -0.49, 46.58 0.44, 46.46 0.61" stroke="none" stroke-width="0" fill="#fff"></path><path d="M42.91 -0.01 C50.75 0.09, 60.37 1.21, 65.9 2.35 C71.42 3.49, 75.57 5.17, 76.07 6.84 C76.57 8.5, 73.69 10.97, 68.9 12.33 C64.11 13.68, 55.3 14.64, 47.35 14.99 C39.4 15.33, 28.54 15.03, 21.22 14.4 C13.9 13.76, 6.74 12.6, 3.41 11.19 C0.08 9.77, -1.1 7.57, 1.23 5.91 C3.55 4.25, 10.33 2.25, 17.37 1.22 C24.42 0.18, 39.01 -0.05, 43.49 -0.29 C47.97 -0.53, 44.43 -0.41, 44.26 -0.23 M32.98 -0.63 C40.82 -0.85, 52.3 0.65, 59.27 1.58 C66.24 2.51, 72.32 3.53, 74.81 4.96 C77.3 6.39, 77.32 8.57, 74.2 10.16 C71.09 11.75, 63.39 13.51, 56.13 14.48 C48.87 15.45, 38.69 16.25, 30.65 15.98 C22.6 15.71, 13.01 14.17, 7.87 12.85 C2.72 11.54, -0.48 9.76, -0.24 8.1 C-0.01 6.44, 3.71 4.24, 9.28 2.9 C14.84 1.55, 29.02 0.45, 33.12 0.01 C37.22 -0.43, 33.9 0.14, 33.85 0.26" stroke="#000000" stroke-width="1" fill="none"></path></g><g stroke-linecap="round" transform="translate(1879.603780765316 8084.214834090662) rotate(0 5.613051577081023 6.09187924222806)"><path d="M6.16 0.11 C7.27 0.18, 8.49 0.66, 9.38 1.61 C10.27 2.56, 11.4 4.43, 11.49 5.81 C11.58 7.18, 10.6 8.79, 9.92 9.86 C9.23 10.93, 8.59 11.94, 7.39 12.21 C6.2 12.49, 3.94 12.2, 2.74 11.52 C1.55 10.83, 0.57 9.37, 0.2 8.11 C-0.17 6.85, 0.15 5.14, 0.53 3.95 C0.92 2.75, 1.61 1.58, 2.5 0.92 C3.39 0.27, 5.28 0.2, 5.9 0 C6.51 -0.2, 6.05 -0.35, 6.18 -0.29 M4.62 0.34 C5.75 0.15, 7.85 0.05, 8.92 0.69 C10 1.33, 10.84 2.88, 11.05 4.19 C11.25 5.5, 10.55 7.38, 10.15 8.53 C9.75 9.69, 9.56 10.63, 8.66 11.11 C7.76 11.59, 6.06 11.56, 4.77 11.42 C3.47 11.27, 1.71 11.25, 0.88 10.24 C0.05 9.22, -0.22 6.79, -0.2 5.32 C-0.18 3.85, 0.15 2.23, 0.98 1.41 C1.81 0.58, 4.2 0.65, 4.77 0.37 C5.35 0.08, 4.3 -0.38, 4.43 -0.28" stroke="none" stroke-width="0" fill="#868e96"></path><path d="M5.03 -0.01 C6 -0.26, 7.39 -0.07, 8.34 0.67 C9.29 1.42, 10.33 3.19, 10.71 4.46 C11.1 5.74, 11.11 7.19, 10.63 8.33 C10.16 9.47, 8.9 10.63, 7.86 11.29 C6.82 11.95, 5.55 12.53, 4.37 12.3 C3.18 12.08, 1.41 11.09, 0.75 9.96 C0.09 8.83, 0.23 6.94, 0.4 5.53 C0.58 4.11, 0.95 2.47, 1.79 1.47 C2.64 0.48, 4.91 -0.23, 5.46 -0.46 C6 -0.69, 5.14 -0.06, 5.06 0.07 M5.9 0.41 C7.05 0.3, 8.08 0.15, 9.01 0.78 C9.94 1.4, 11.22 2.83, 11.47 4.15 C11.72 5.47, 11.06 7.32, 10.52 8.68 C9.98 10.04, 9.33 11.73, 8.21 12.33 C7.09 12.93, 5.07 12.65, 3.81 12.28 C2.55 11.91, 1.4 11.19, 0.68 10.11 C-0.05 9.02, -0.74 7.18, -0.55 5.77 C-0.35 4.36, 0.76 2.58, 1.85 1.63 C2.94 0.68, 5.54 0.32, 5.99 0.05 C6.44 -0.22, 4.6 -0.15, 4.55 0.01" stroke="#000000" stroke-width="1" fill="none"></path></g><g stroke-linecap="round" transform="translate(1879.9549225492497 8110.431448377727) rotate(0 5.613051577081023 6.09187924222806)"><path d="M4.23 -0.12 C5.38 -0.43, 7.51 0.19, 8.57 0.89 C9.63 1.58, 10.13 2.83, 10.59 4.05 C11.05 5.27, 11.76 7.04, 11.35 8.23 C10.94 9.43, 9.28 10.66, 8.13 11.23 C6.99 11.8, 5.57 11.91, 4.5 11.65 C3.43 11.39, 2.48 10.58, 1.73 9.66 C0.99 8.74, 0.19 7.37, 0.04 6.13 C-0.12 4.9, 0.05 3.35, 0.79 2.26 C1.52 1.17, 3.68 -0.01, 4.45 -0.4 C5.21 -0.79, 5.38 -0.29, 5.39 -0.07 M4.73 0.04 C5.86 -0.35, 7.34 0.12, 8.22 0.77 C9.1 1.42, 9.5 2.82, 10.01 3.94 C10.52 5.06, 11.46 6.41, 11.27 7.5 C11.09 8.59, 10.02 9.65, 8.91 10.47 C7.8 11.29, 5.87 12.55, 4.62 12.4 C3.36 12.26, 2.2 10.69, 1.38 9.59 C0.55 8.48, -0.3 6.91, -0.34 5.77 C-0.37 4.64, 0.46 3.8, 1.18 2.79 C1.9 1.78, 3.35 0.06, 3.99 -0.31 C4.63 -0.67, 4.97 0.39, 5.02 0.58" stroke="none" stroke-width="0" fill="#868e96"></path><path d="M5.01 -0.39 C6.11 -0.5, 7.79 0.5, 8.79 1.33 C9.8 2.16, 10.76 3.36, 11.02 4.59 C11.28 5.82, 10.91 7.45, 10.37 8.69 C9.84 9.94, 8.97 11.49, 7.83 12.07 C6.69 12.65, 4.65 12.67, 3.54 12.19 C2.44 11.71, 1.77 10.41, 1.22 9.19 C0.67 7.96, 0.1 6.2, 0.25 4.85 C0.4 3.49, 1.24 1.88, 2.1 1.06 C2.95 0.24, 4.76 0.15, 5.37 -0.06 C5.97 -0.26, 5.7 -0.28, 5.74 -0.17 M4.39 -0.23 C5.44 -0.75, 7.48 -0.48, 8.53 0.15 C9.57 0.78, 10.17 2.17, 10.63 3.56 C11.1 4.95, 11.69 7.16, 11.33 8.48 C10.97 9.81, 9.58 10.8, 8.47 11.52 C7.37 12.23, 5.96 12.92, 4.71 12.77 C3.45 12.62, 1.72 11.68, 0.96 10.62 C0.2 9.56, -0.01 7.75, 0.13 6.4 C0.28 5.04, 1.27 3.56, 1.85 2.5 C2.43 1.44, 3.12 0.35, 3.61 0.04 C4.09 -0.28, 4.55 0.59, 4.74 0.62" stroke="#000000" stroke-width="1" fill="none"></path></g><g stroke-linecap="round" transform="translate(1880.603780765316 8139.200174949034) rotate(357.5021844865888 5.613051577081023 6.09187924222806)"><path d="M6.11 0.16 C7.25 0.2, 8.22 0.89, 9.14 1.77 C10.05 2.66, 11.45 4.23, 11.58 5.48 C11.72 6.73, 10.7 8.29, 9.95 9.28 C9.19 10.27, 8.06 11.09, 7.04 11.42 C6.02 11.75, 4.88 11.69, 3.82 11.26 C2.76 10.82, 1.37 9.89, 0.68 8.81 C0 7.73, -0.51 6.1, -0.3 4.76 C-0.1 3.43, 0.78 1.64, 1.9 0.8 C3.02 -0.03, 5.77 -0.16, 6.42 -0.23 C7.06 -0.29, 5.95 0.26, 5.79 0.4 M6.23 0.17 C7.17 0.28, 7.96 1.25, 8.84 2.1 C9.71 2.95, 11.21 4.13, 11.47 5.27 C11.73 6.4, 11.18 7.74, 10.38 8.9 C9.58 10.06, 7.9 11.89, 6.68 12.22 C5.46 12.55, 4.14 11.6, 3.06 10.88 C1.98 10.17, 0.65 8.96, 0.19 7.94 C-0.28 6.93, -0.03 6.04, 0.29 4.82 C0.61 3.6, 1.03 1.38, 2.12 0.63 C3.2 -0.12, 6.18 0.38, 6.82 0.3 C7.46 0.23, 5.99 0.24, 5.96 0.19" stroke="none" stroke-width="0" fill="#868e96"></path><path d="M5.21 0.01 C6.41 -0.07, 8.1 0.31, 9.06 1.08 C10.01 1.85, 10.68 3.25, 10.95 4.63 C11.22 6.01, 11.28 8.11, 10.67 9.36 C10.07 10.61, 8.41 11.7, 7.33 12.1 C6.24 12.5, 5.23 12.3, 4.17 11.76 C3.11 11.22, 1.64 10.06, 0.99 8.87 C0.34 7.69, 0.18 5.9, 0.28 4.66 C0.37 3.42, 0.7 2.26, 1.56 1.44 C2.42 0.61, 4.74 -0.08, 5.44 -0.3 C6.15 -0.52, 5.82 -0.11, 5.79 0.12 M6.76 -0.44 C7.87 -0.3, 8.83 0.73, 9.63 1.88 C10.43 3.04, 11.53 5.12, 11.56 6.5 C11.59 7.88, 10.66 9.13, 9.82 10.15 C8.99 11.18, 7.78 12.39, 6.55 12.67 C5.31 12.95, 3.43 12.55, 2.43 11.83 C1.43 11.11, 0.78 9.6, 0.55 8.35 C0.31 7.09, 0.78 5.53, 1.01 4.28 C1.24 3.02, 0.95 1.46, 1.91 0.82 C2.87 0.17, 5.98 0.59, 6.77 0.39 C7.55 0.19, 6.67 -0.4, 6.64 -0.37" stroke="#000000" stroke-width="1" fill="none"></path></g><g stroke-linecap="round"><g transform="translate(1854.6776705264042 8076.8704350364405) rotate(0 38.191585346525244 41.59642899479877)" fill-rule="evenodd"><path d="M1.86 2.05 C2.07 15.22, -0.25 63.97, -0.52 77.53 C-0.78 91.08, -0.58 81.54, 0.28 83.37 C1.13 85.2, 1.47 87.12, 4.63 88.5 C7.79 89.87, 13.27 90.96, 19.24 91.63 C25.2 92.29, 32.86 92.91, 40.4 92.49 C47.93 92.07, 58.73 90, 64.43 89.11 C70.13 88.23, 72.17 88.35, 74.58 87.16 C77 85.97, 78.88 83.42, 78.92 81.97 C78.96 80.53, 75.16 91.45, 74.82 78.48 C74.49 65.52, 76.89 17.47, 76.92 4.17 C76.95 -9.13, 76.23 -0.17, 74.98 -1.32 C73.72 -2.48, 71.98 -2.34, 69.41 -2.76 C66.85 -3.19, 64.76 -3.29, 59.59 -3.87 C54.42 -4.45, 44.96 -5.93, 38.39 -6.23 C31.82 -6.53, 26.4 -6.09, 20.18 -5.69 C13.96 -5.29, 4.35 -5.1, 1.08 -3.83 C-2.18 -2.57, 1.04 0.97, 0.59 1.9 C0.13 2.83, -1.37 2.3, -1.66 1.75" stroke="none" stroke-width="0" fill="#ced4da" fill-rule="evenodd"></path><path d="M1.15 1.2 C1.22 13.87, 1.34 62.17, 1.21 75.79 C1.09 89.4, -0.03 81.11, 0.39 82.91 C0.82 84.71, 0.9 85.48, 3.76 86.57 C6.62 87.65, 11.13 88.58, 17.54 89.44 C23.95 90.3, 34.56 91.47, 42.22 91.73 C49.89 91.98, 57.94 91.85, 63.51 90.98 C69.09 90.11, 73.65 87.77, 75.67 86.49 C77.7 85.21, 75.56 85.13, 75.68 83.31 C75.79 81.48, 76.33 88.48, 76.37 75.56 C76.4 62.63, 75.86 18.24, 75.9 5.78 C75.94 -6.68, 77.31 2.3, 76.63 0.8 C75.96 -0.71, 74.48 -2.22, 71.85 -3.23 C69.22 -4.24, 66.78 -4.48, 60.84 -5.28 C54.89 -6.08, 43.15 -7.74, 36.17 -8.03 C29.2 -8.33, 24.62 -8.02, 18.97 -7.03 C13.33 -6.04, 5.52 -3.34, 2.29 -2.09 C-0.94 -0.85, 0.11 0.03, -0.4 0.43 C-0.92 0.83, -0.74 0.5, -0.8 0.31 M0.3 0.78 C0.22 13.12, 0.85 60.14, 0.77 73.97 C0.69 87.8, -0.69 81.57, -0.17 83.78 C0.35 85.98, 1.21 86.29, 3.9 87.2 C6.59 88.11, 9.84 88.64, 15.95 89.23 C22.06 89.83, 32.54 90.62, 40.59 90.77 C48.64 90.92, 58.53 90.9, 64.26 90.14 C69.98 89.39, 72.79 87.62, 74.93 86.26 C77.06 84.9, 76.76 83.93, 77.07 82.01 C77.38 80.09, 77 87.32, 76.78 74.73 C76.55 62.15, 75.96 18.78, 75.71 6.49 C75.47 -5.81, 75.89 2.64, 75.31 0.95 C74.74 -0.74, 74.81 -2.66, 72.26 -3.65 C69.71 -4.65, 66.06 -4.19, 60 -5.02 C53.94 -5.86, 43.11 -8.5, 35.9 -8.64 C28.68 -8.78, 22 -6.58, 16.71 -5.87 C11.42 -5.17, 6.65 -5.57, 4.16 -4.41 C1.67 -3.26, 2.3 0.19, 1.78 1.04 C1.26 1.9, 1.46 0.77, 1.05 0.72" stroke="#000000" stroke-width="1" fill="none"></path></g></g><mask></mask><g stroke-linecap="round"><g transform="translate(1855.2015999646796 8133.99671869417) rotate(0 39.03569988563822 4.154308463581401)"><path d="M0.96 0.58 C1.17 0.81, 0.81 1.76, 2.41 2.56 C4.02 3.36, 7.29 4.66, 10.59 5.38 C13.9 6.1, 17.03 6.37, 22.25 6.86 C27.47 7.35, 35.24 8.13, 41.91 8.33 C48.58 8.52, 56.75 8.88, 62.27 8.03 C67.79 7.19, 72.77 4.63, 75.06 3.25 C77.36 1.87, 75.8 0.49, 76.03 -0.24 M0 -0.15 C-0.01 0.71, 0.05 2.59, 1.67 3.65 C3.29 4.71, 6.27 5.61, 9.72 6.23 C13.17 6.85, 17.16 6.93, 22.38 7.36 C27.6 7.79, 34.15 8.78, 41.06 8.8 C47.96 8.82, 57.96 8.63, 63.78 7.5 C69.6 6.37, 73.6 3.35, 75.98 2.01 C78.36 0.68, 77.72 -0.29, 78.07 -0.49" stroke="#000000" stroke-width="1" fill="none"></path></g></g><mask></mask><g stroke-linecap="round"><g transform="translate(1854.1697426421756 8105.032663358947) rotate(0 38.92204056990113 3.7767518722484965)"><path d="M0.38 -0.85 C0.53 -0.53, 0.12 1.52, 1.82 2.52 C3.52 3.51, 6.95 4.19, 10.58 5.13 C14.22 6.07, 18.58 7.5, 23.64 8.17 C28.7 8.84, 34.45 9.29, 40.94 9.14 C47.43 8.99, 57.19 8.26, 62.6 7.27 C68.01 6.28, 71.08 4.6, 73.4 3.21 C75.71 1.81, 76.02 -0.41, 76.49 -1.1 M-0.88 1.31 C-0.99 1.71, -1 2.83, 0.77 3.58 C2.53 4.34, 6.36 4.88, 9.7 5.84 C13.05 6.8, 15.86 9.27, 20.83 9.36 C25.81 9.45, 32.94 6.88, 39.57 6.38 C46.2 5.88, 54.99 7.08, 60.63 6.34 C66.28 5.6, 70.42 3.3, 73.44 1.94 C76.46 0.59, 78.06 -1.66, 78.76 -1.81" stroke="#000000" stroke-width="1" fill="none"></path></g></g><mask></mask><g stroke-linecap="round" transform="translate(1853.1117936600936 8069.738166410758) rotate(0 38.29876800932743 7.745637696423728)"><path d="M32.8 -0.22 C40.54 -0.44, 51.67 0.37, 58.69 1.35 C65.71 2.33, 72.35 4.2, 74.94 5.66 C77.52 7.12, 77.27 8.61, 74.21 10.11 C71.14 11.62, 63.71 13.86, 56.53 14.67 C49.36 15.49, 39.12 15.39, 31.15 15 C23.19 14.61, 13.98 13.56, 8.74 12.35 C3.5 11.14, -0.38 9.4, -0.28 7.72 C-0.18 6.05, 3.7 3.54, 9.37 2.28 C15.04 1.03, 29.66 0.62, 33.76 0.22 C37.86 -0.19, 33.87 -0.29, 33.95 -0.15 M42.62 -0.23 C50.35 0.05, 60.8 1.84, 66.35 3.22 C71.9 4.6, 75.48 6.58, 75.92 8.03 C76.36 9.49, 74.03 10.83, 69.01 11.94 C64 13.06, 53.85 14.25, 45.82 14.73 C37.78 15.2, 27.96 15.36, 20.8 14.8 C13.64 14.23, 6.05 12.87, 2.87 11.34 C-0.31 9.82, -0.8 7.25, 1.7 5.66 C4.2 4.07, 10.79 2.84, 17.84 1.8 C24.89 0.76, 39.69 -0.21, 44 -0.59 C48.31 -0.98, 43.91 -0.62, 43.71 -0.49" stroke="none" stroke-width="0" fill="#fff"></path><path d="M36.61 0.09 C44.53 -0.13, 55.43 0.9, 61.95 1.81 C68.48 2.73, 74.02 4.04, 75.76 5.58 C77.49 7.11, 76.21 9.54, 72.37 11.02 C68.54 12.51, 60.36 13.79, 52.74 14.49 C45.11 15.19, 34.34 15.62, 26.64 15.21 C18.93 14.81, 10.83 13.49, 6.5 12.07 C2.16 10.64, -0.4 8.4, 0.64 6.65 C1.67 4.9, 6.6 2.63, 12.72 1.57 C18.84 0.51, 33.12 0.6, 37.36 0.29 C41.61 -0.01, 38.09 -0.32, 38.19 -0.27 M41.58 -0.43 C49.38 -0.48, 59.22 0.52, 65.13 1.89 C71.05 3.26, 76.38 5.94, 77.06 7.79 C77.73 9.63, 74.05 11.75, 69.19 12.97 C64.33 14.19, 55.76 14.78, 47.88 15.13 C40 15.48, 29.27 15.69, 21.93 15.05 C14.6 14.4, 7.32 12.78, 3.86 11.26 C0.41 9.74, -0.98 7.64, 1.21 5.94 C3.41 4.24, 10.24 2.02, 17.02 1.08 C23.8 0.14, 37.62 0.51, 41.89 0.3 C46.15 0.1, 42.78 -0.37, 42.63 -0.17" stroke="#000000" stroke-width="1" fill="none"></path></g><g stroke-linecap="round" transform="translate(1889.603780765316 8094.214834090662) rotate(0 5.613051577081023 6.09187924222806)"><path d="M4.89 0.36 C6 0.13, 7.55 0.59, 8.58 1.09 C9.6 1.59, 10.67 2.17, 11.05 3.34 C11.42 4.5, 11.17 6.82, 10.83 8.08 C10.49 9.34, 9.94 10.27, 9 10.91 C8.07 11.54, 6.52 11.99, 5.21 11.9 C3.9 11.8, 2.06 11.33, 1.17 10.35 C0.27 9.36, -0.26 7.29, -0.18 5.98 C-0.1 4.68, 0.87 3.55, 1.63 2.51 C2.38 1.47, 3.76 0.1, 4.34 -0.24 C4.93 -0.59, 5.01 0.26, 5.11 0.43 M4.82 0.73 C5.97 0.68, 7.04 1.14, 8.14 1.67 C9.23 2.21, 11.08 2.86, 11.39 3.92 C11.71 4.98, 10.54 6.71, 10.02 8.02 C9.51 9.33, 9.26 11, 8.29 11.77 C7.32 12.54, 5.42 12.95, 4.2 12.64 C2.98 12.33, 1.65 10.97, 0.96 9.9 C0.27 8.83, -0.13 7.68, 0.08 6.22 C0.29 4.77, 1.33 2.32, 2.23 1.17 C3.14 0.02, 5.04 -0.4, 5.51 -0.68 C5.97 -0.96, 5.13 -0.81, 5.03 -0.51" stroke="none" stroke-width="0" fill="#868e96"></path><path d="M7.37 0.4 C8.5 0.53, 9.58 1.06, 10.24 2.03 C10.89 3, 11.42 4.91, 11.28 6.22 C11.13 7.54, 10.25 8.91, 9.36 9.91 C8.48 10.91, 7.06 11.99, 5.99 12.22 C4.92 12.45, 3.84 12.05, 2.94 11.29 C2.03 10.53, 0.89 9.04, 0.54 7.68 C0.19 6.32, 0.41 4.27, 0.84 3.14 C1.27 2.01, 2.08 1.47, 3.1 0.91 C4.13 0.35, 6.24 -0.1, 6.99 -0.22 C7.74 -0.33, 7.58 0.09, 7.6 0.2 M5.43 -0.43 C6.75 -0.25, 9.14 1.22, 10.06 2.31 C10.98 3.41, 10.9 4.96, 10.96 6.13 C11.01 7.3, 10.96 8.33, 10.37 9.35 C9.77 10.37, 8.49 11.81, 7.4 12.25 C6.3 12.69, 4.98 12.52, 3.82 11.99 C2.65 11.46, 0.93 10.35, 0.38 9.08 C-0.17 7.81, 0.21 5.65, 0.5 4.38 C0.79 3.11, 1.09 2.24, 2.11 1.45 C3.13 0.66, 6.09 -0.24, 6.61 -0.35 C7.14 -0.45, 5.39 0.76, 5.28 0.82" stroke="#000000" stroke-width="1" fill="none"></path></g><g stroke-linecap="round" transform="translate(1889.9549225492497 8120.431448377727) rotate(0 5.613051577081023 6.09187924222806)"><path d="M5.11 0.46 C6.19 0.08, 7.82 -0.2, 8.77 0.43 C9.72 1.07, 10.39 3.01, 10.8 4.27 C11.22 5.52, 11.6 6.81, 11.24 7.96 C10.88 9.12, 9.84 10.49, 8.67 11.2 C7.5 11.91, 5.49 12.5, 4.22 12.23 C2.95 11.96, 1.68 10.58, 1.05 9.56 C0.42 8.54, 0.43 7.42, 0.45 6.11 C0.47 4.8, 0.36 2.69, 1.17 1.72 C1.99 0.75, 4.63 0.52, 5.34 0.28 C6.04 0.03, 5.5 0.26, 5.41 0.24 M4.41 0.64 C5.64 0.24, 8.16 -0.01, 9.15 0.53 C10.13 1.07, 10.01 2.48, 10.31 3.86 C10.62 5.23, 11.36 7.39, 10.97 8.79 C10.59 10.18, 9.17 11.65, 8.03 12.23 C6.89 12.81, 5.29 12.58, 4.13 12.25 C2.98 11.92, 1.7 11.45, 1.12 10.24 C0.54 9.03, 0.5 6.49, 0.65 4.97 C0.8 3.45, 1.31 2.06, 2.04 1.12 C2.77 0.19, 4.55 -0.55, 5.01 -0.63 C5.48 -0.71, 4.72 0.47, 4.84 0.66" stroke="none" stroke-width="0" fill="#868e96"></path><path d="M5.92 -0.47 C7.01 -0.58, 8.63 0.41, 9.46 1.3 C10.28 2.19, 10.77 3.52, 10.88 4.87 C11 6.23, 10.65 8.23, 10.14 9.42 C9.62 10.62, 8.83 11.67, 7.78 12.04 C6.72 12.41, 4.93 12.23, 3.8 11.63 C2.67 11.03, 1.62 9.54, 1 8.44 C0.38 7.35, -0.1 6.35, 0.09 5.08 C0.27 3.82, 1.02 1.72, 2.11 0.85 C3.2 -0.02, 5.87 0.04, 6.62 -0.12 C7.38 -0.29, 6.72 -0.22, 6.65 -0.14 M5.31 0.7 C6.47 0.63, 7.32 1.04, 8.27 1.58 C9.22 2.13, 10.54 2.82, 11 3.99 C11.47 5.16, 11.42 7.3, 11.06 8.59 C10.69 9.88, 9.91 11.11, 8.79 11.74 C7.67 12.36, 5.54 12.7, 4.34 12.35 C3.14 12.01, 2.34 10.67, 1.59 9.65 C0.84 8.63, -0.24 7.57, -0.17 6.25 C-0.1 4.93, 1.32 2.65, 2.02 1.73 C2.73 0.82, 3.6 1.12, 4.05 0.76 C4.51 0.39, 4.72 -0.39, 4.77 -0.46" stroke="#000000" stroke-width="1" fill="none"></path></g><g stroke-linecap="round" transform="translate(1890.603780765316 8149.200174949034) rotate(357.5021844865888 5.613051577081023 6.09187924222806)"><path d="M6.46 -0.42 C7.53 -0.4, 8.68 1.05, 9.54 2.01 C10.4 2.97, 11.45 4.11, 11.61 5.36 C11.77 6.6, 11.32 8.33, 10.5 9.46 C9.67 10.6, 7.91 11.88, 6.66 12.17 C5.4 12.46, 3.9 11.79, 2.95 11.21 C1.99 10.63, 1.41 9.89, 0.92 8.7 C0.43 7.5, -0.32 5.27, 0 4.04 C0.33 2.8, 1.76 1.9, 2.88 1.26 C4.01 0.61, 6.13 0.42, 6.74 0.16 C7.34 -0.09, 6.59 -0.32, 6.49 -0.26 M7.28 -0.36 C8.4 -0.35, 8.71 0.7, 9.41 1.87 C10.11 3.03, 11.42 5.12, 11.46 6.63 C11.51 8.14, 10.56 9.96, 9.68 10.92 C8.8 11.88, 7.35 12.26, 6.17 12.4 C4.99 12.54, 3.48 12.65, 2.59 11.77 C1.71 10.9, 1.15 8.65, 0.87 7.18 C0.59 5.71, 0.54 4.16, 0.9 2.97 C1.27 1.77, 2.09 0.37, 3.05 -0.01 C4.01 -0.39, 5.94 0.64, 6.68 0.68 C7.43 0.71, 7.44 0.23, 7.53 0.21" stroke="none" stroke-width="0" fill="#868e96"></path><path d="M6.29 -0.25 C7.37 -0.18, 8.59 0.48, 9.38 1.48 C10.16 2.48, 10.79 4.38, 10.99 5.77 C11.2 7.17, 11.22 8.82, 10.59 9.84 C9.97 10.87, 8.45 11.7, 7.26 11.91 C6.08 12.11, 4.62 11.59, 3.48 11.07 C2.34 10.56, 0.99 10.02, 0.43 8.83 C-0.12 7.65, -0.27 5.29, 0.15 3.96 C0.58 2.63, 1.87 1.57, 2.97 0.87 C4.07 0.17, 6.09 -0.09, 6.76 -0.25 C7.43 -0.4, 7.1 -0.14, 7 -0.04 M4.55 0.78 C5.59 0.39, 7.53 0.16, 8.63 0.78 C9.73 1.4, 10.7 3.17, 11.14 4.48 C11.58 5.79, 11.8 7.44, 11.29 8.65 C10.78 9.85, 9.16 11.21, 8.09 11.73 C7.01 12.25, 6 12.05, 4.83 11.79 C3.66 11.52, 1.74 11.18, 1.05 10.15 C0.35 9.11, 0.7 6.8, 0.65 5.57 C0.59 4.33, 0.04 3.76, 0.73 2.73 C1.42 1.71, 4.2 -0.11, 4.8 -0.59 C5.41 -1.07, 4.45 -0.4, 4.35 -0.13" stroke="#000000" stroke-width="1" fill="none"></path></g><g transform="translate(1832.528429213286 8170.7903165478765) rotate(0 60.298744961534794 11.797580535952875)"><text x="60.29874496153468" y="16.271922191069216" font-family="Virgil, sans-serif, Segoe UI Emoji" font-size="17.4778970902999px" fill="#000000" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Relational DB</text></g><g stroke-linecap="round"><g transform="translate(2462.5843666786627 6648.259757511229) rotate(0 38.3186057877856 40.968851018335045)" fill-rule="evenodd"><path d="M0 1.76 C-0.13 14.09, 0.31 60.35, 0.31 74.12 C0.32 87.89, -0.44 82.45, 0.01 84.38 C0.46 86.31, -0.24 84.69, 3.01 85.7 C6.27 86.7, 13.43 89.31, 19.52 90.4 C25.61 91.5, 32.32 92.63, 39.57 92.26 C46.81 91.9, 56.82 88.98, 62.99 88.24 C69.15 87.5, 74.19 88.31, 76.55 87.81 C78.91 87.31, 77.32 87.45, 77.14 85.25 C76.96 83.05, 75.83 87.7, 75.47 74.63 C75.11 61.56, 74.43 19.13, 74.98 6.84 C75.53 -5.46, 79.4 2.71, 78.76 0.86 C78.12 -0.98, 74.29 -2.7, 71.16 -4.24 C68.02 -5.78, 65.7 -7.53, 59.95 -8.37 C54.2 -9.21, 43.45 -9.21, 36.65 -9.28 C29.85 -9.34, 24.88 -9.55, 19.13 -8.78 C13.38 -8, 5.51 -6.06, 2.14 -4.64 C-1.23 -3.22, -1.13 -0.77, -1.09 -0.26 C-1.05 0.25, 2.03 -1.31, 2.38 -1.58" stroke="none" stroke-width="0" fill="#ced4da" fill-rule="evenodd"></path><path d="M0.52 1.2 C0.66 13.76, 0.33 60.97, 0.1 74.66 C-0.13 88.36, -1.58 81.09, -0.87 83.38 C-0.15 85.68, 1.48 87.4, 4.39 88.43 C7.31 89.46, 10.62 89.09, 16.63 89.56 C22.64 90.03, 32.69 91.08, 40.48 91.24 C48.26 91.39, 57.75 91.35, 63.35 90.5 C68.94 89.65, 71.92 87.43, 74.04 86.12 C76.15 84.8, 75.59 84.29, 76.04 82.6 C76.49 80.91, 76.73 88.76, 76.72 75.96 C76.71 63.16, 76.18 18.33, 75.97 5.81 C75.76 -6.71, 76.02 2.36, 75.46 0.84 C74.91 -0.67, 74.99 -2.13, 72.62 -3.3 C70.24 -4.46, 67 -5.27, 61.23 -6.12 C55.46 -6.98, 45.12 -8.4, 38.02 -8.43 C30.92 -8.46, 24.52 -7.29, 18.62 -6.3 C12.71 -5.3, 5.64 -3.68, 2.6 -2.46 C-0.45 -1.24, 0.88 0.44, 0.37 1 C-0.14 1.57, -0.39 0.95, -0.45 0.94 M-0.67 0.78 C-0.64 13.56, -1.3 61.97, -0.93 75.92 C-0.55 89.87, 0.6 82.76, 1.56 84.5 C2.53 86.24, 2.08 85.56, 4.86 86.38 C7.64 87.19, 12.11 88.8, 18.23 89.41 C24.35 90.01, 33.96 90.02, 41.59 90.02 C49.22 90.02, 58.26 90.14, 64.01 89.41 C69.76 88.69, 73.82 86.49, 76.09 85.68 C78.36 84.88, 77.42 86.31, 77.62 84.59 C77.83 82.86, 77.62 88.36, 77.32 75.35 C77.02 62.34, 75.84 18.92, 75.82 6.53 C75.8 -5.86, 78.2 2.73, 77.19 1.02 C76.18 -0.7, 72.53 -2.53, 69.77 -3.75 C67.01 -4.97, 65.78 -5.39, 60.61 -6.31 C55.43 -7.22, 45.51 -8.9, 38.71 -9.25 C31.92 -9.6, 25.51 -9.13, 19.83 -8.41 C14.15 -7.7, 8.05 -6.08, 4.63 -4.97 C1.21 -3.86, -0.19 -2.85, -0.7 -1.74 C-1.21 -0.63, 1.39 1.46, 1.59 1.69" stroke="#000000" stroke-width="1" fill="none"></path></g></g><mask></mask><g stroke-linecap="round"><g transform="translate(2463.108296116938 6705.386041168958) rotate(0 38.465478533226815 3.2584773102089457)"><path d="M-0.15 -0.54 C-0.05 -0.23, -0.74 1.74, 1.15 3.03 C3.05 4.33, 7.86 6.58, 11.22 7.24 C14.59 7.9, 16.52 6.88, 21.34 6.98 C26.17 7.08, 33.37 7.74, 40.17 7.84 C46.96 7.93, 56.56 8.38, 62.11 7.56 C67.65 6.73, 71.04 4.29, 73.42 2.88 C75.81 1.46, 75.83 -0.35, 76.4 -0.94 M-1.69 1.8 C-1.26 2.78, 1.34 3.77, 3.4 4.37 C5.46 4.97, 7.74 4.88, 10.68 5.41 C13.61 5.93, 15.77 7.1, 21 7.54 C26.23 7.98, 34.96 8.18, 42.05 8.05 C49.14 7.93, 58.29 7.87, 63.53 6.77 C68.77 5.67, 70.97 2.83, 73.48 1.44 C76 0.05, 77.76 -1.57, 78.62 -1.57" stroke="#000000" stroke-width="1" fill="none"></path></g></g><mask></mask><g stroke-linecap="round"><g transform="translate(2462.076438794435 6676.421985833735) rotate(0 37.98147204869383 3.9256025622562447)"><path d="M-0.88 -0.38 C-0.45 0.44, 0.69 3.44, 2.45 4.38 C4.21 5.32, 6.44 4.69, 9.68 5.24 C12.91 5.79, 16.71 7.11, 21.89 7.68 C27.07 8.25, 34.26 8.79, 40.78 8.66 C47.29 8.53, 55.47 7.92, 60.97 6.89 C66.46 5.87, 71.11 3.76, 73.76 2.5 C76.4 1.23, 76.42 -0.13, 76.84 -0.69 M0.86 -1.62 C1.18 -1.08, -0.13 1.49, 1.73 2.76 C3.58 4.04, 8.63 5.04, 11.98 6.02 C15.33 6.99, 17.28 8.06, 21.83 8.61 C26.39 9.16, 32.66 9.78, 39.32 9.31 C45.98 8.83, 56.02 6.56, 61.8 5.76 C67.58 4.96, 71.69 5.68, 73.99 4.52 C76.3 3.36, 75.01 -0.62, 75.65 -1.19" stroke="#000000" stroke-width="1" fill="none"></path></g></g><mask></mask><g stroke-linecap="round" transform="translate(2461.018489812352 6641.127488885546) rotate(0 38.29876800932743 7.745637696423728)"><path d="M47.19 -0.02 C54.77 0.24, 63.79 1.6, 68.63 3 C73.47 4.4, 76.74 6.75, 76.25 8.39 C75.76 10.03, 71.34 11.7, 65.69 12.84 C60.04 13.98, 50.44 14.92, 42.34 15.23 C34.25 15.54, 23.96 15.54, 17.12 14.69 C10.27 13.84, 3.64 11.76, 1.25 10.15 C-1.13 8.54, -0.52 6.67, 2.79 5.04 C6.1 3.4, 13.49 1.09, 21.11 0.35 C28.73 -0.39, 43.78 0.49, 48.51 0.57 C53.25 0.66, 49.62 0.87, 49.51 0.87 M32.84 0.59 C40.39 0.28, 50.58 0.67, 57.6 1.53 C64.62 2.4, 72.1 4.18, 74.95 5.76 C77.79 7.35, 77.8 9.46, 74.67 11.03 C71.54 12.6, 63.4 14.39, 56.16 15.18 C48.92 15.96, 39.21 16.21, 31.24 15.76 C23.28 15.3, 13.51 13.87, 8.39 12.43 C3.26 11, 0.31 8.88, 0.51 7.14 C0.72 5.4, 4.3 3.23, 9.63 1.98 C14.96 0.72, 28.65 -0.02, 32.49 -0.39 C36.33 -0.76, 32.5 -0.35, 32.66 -0.23" stroke="none" stroke-width="0" fill="#fff"></path><path d="M29.26 0.22 C36.84 -0.28, 48.28 -0.33, 55.63 0.36 C62.98 1.04, 70.18 2.76, 73.37 4.34 C76.56 5.92, 77.13 8.24, 74.78 9.82 C72.43 11.4, 66.12 12.97, 59.28 13.84 C52.43 14.7, 41.76 15.08, 33.71 15.03 C25.66 14.98, 16.52 14.66, 10.96 13.54 C5.41 12.41, 0.93 9.96, 0.36 8.27 C-0.21 6.59, 2.33 4.76, 7.54 3.42 C12.75 2.08, 27.12 0.84, 31.63 0.25 C36.15 -0.33, 34.43 -0.23, 34.63 -0.1 M46.61 0.77 C54.43 0.92, 64.02 1.78, 69.01 3.09 C74.01 4.4, 76.97 7.03, 76.56 8.63 C76.15 10.22, 72.09 11.48, 66.55 12.65 C61 13.81, 51.47 15.43, 43.29 15.62 C35.1 15.8, 24.25 14.67, 17.42 13.74 C10.59 12.8, 4.8 11.47, 2.31 10.01 C-0.18 8.56, -0.57 6.61, 2.46 4.99 C5.5 3.38, 13.1 1.05, 20.52 0.33 C27.95 -0.39, 42.69 0.54, 47.03 0.65 C51.36 0.76, 46.82 1.01, 46.53 0.98" stroke="#000000" stroke-width="1" fill="none"></path></g><g stroke-linecap="round" transform="translate(2497.5104769175746 6665.6041565654505) rotate(0 5.613051577081023 6.09187924222806)"><path d="M4.96 -0.13 C6.06 -0.19, 7.84 0.68, 8.79 1.47 C9.75 2.25, 10.46 3.38, 10.71 4.59 C10.96 5.8, 10.79 7.46, 10.28 8.74 C9.77 10.01, 8.79 11.67, 7.67 12.23 C6.55 12.79, 4.76 12.51, 3.56 12.09 C2.35 11.67, 1.06 10.92, 0.46 9.7 C-0.14 8.48, -0.29 6.09, -0.05 4.78 C0.2 3.48, 0.95 2.6, 1.95 1.86 C2.95 1.13, 5.17 0.74, 5.95 0.38 C6.72 0.03, 6.68 -0.27, 6.6 -0.26 M5.28 0.4 C6.45 0.41, 8.73 1.27, 9.84 2.19 C10.95 3.11, 11.94 4.59, 11.94 5.92 C11.95 7.24, 10.57 9.06, 9.87 10.13 C9.17 11.21, 8.83 12.14, 7.75 12.37 C6.67 12.6, 4.51 12.19, 3.39 11.52 C2.28 10.85, 1.6 9.61, 1.06 8.35 C0.52 7.09, -0.02 5.25, 0.16 3.97 C0.35 2.69, 1.19 1.41, 2.15 0.68 C3.11 -0.06, 5.22 -0.27, 5.91 -0.45 C6.59 -0.63, 6.31 -0.57, 6.24 -0.39" stroke="none" stroke-width="0" fill="#868e96"></path><path d="M5.14 -0.42 C6.28 -0.7, 7.67 -0.1, 8.61 0.66 C9.54 1.43, 10.41 2.94, 10.75 4.18 C11.1 5.42, 11.12 6.95, 10.65 8.11 C10.18 9.26, 8.92 10.38, 7.95 11.11 C6.97 11.84, 5.91 12.71, 4.82 12.49 C3.73 12.27, 2.22 10.89, 1.42 9.81 C0.62 8.74, 0.03 7.34, 0.01 6.05 C-0.01 4.76, 0.43 3.12, 1.31 2.07 C2.18 1.02, 4.58 0.03, 5.28 -0.26 C5.97 -0.55, 5.43 0.19, 5.47 0.31 M7.03 0.17 C8.16 0.33, 9.29 1.86, 9.99 2.82 C10.69 3.77, 11.27 4.64, 11.24 5.89 C11.22 7.14, 10.68 9.35, 9.84 10.3 C8.99 11.24, 7.28 11.41, 6.18 11.57 C5.08 11.73, 4.3 11.79, 3.24 11.24 C2.19 10.69, 0.34 9.58, -0.16 8.27 C-0.65 6.95, -0.3 4.52, 0.28 3.34 C0.86 2.17, 2.25 1.65, 3.34 1.22 C4.43 0.79, 6.33 1.01, 6.81 0.76 C7.28 0.51, 6.33 -0.28, 6.2 -0.26" stroke="#000000" stroke-width="1" fill="none"></path></g><g stroke-linecap="round" transform="translate(2497.861618701509 6691.820770852515) rotate(0 5.613051577081023 6.09187924222806)"><path d="M4.69 0.21 C5.83 -0.02, 7.31 0.12, 8.31 0.77 C9.31 1.42, 10.3 2.77, 10.7 4.14 C11.1 5.51, 11.2 7.73, 10.72 9 C10.24 10.27, 8.94 11.18, 7.8 11.75 C6.67 12.31, 5.06 12.81, 3.92 12.4 C2.79 11.98, 1.64 10.32, 1.01 9.26 C0.37 8.2, -0.01 7.19, 0.1 6.03 C0.22 4.87, 0.77 3.36, 1.69 2.29 C2.6 1.22, 5.03 0, 5.6 -0.39 C6.16 -0.78, 5.11 -0.22, 5.07 -0.03 M6.86 0.55 C8.25 0.69, 9.97 1.57, 10.63 2.59 C11.3 3.61, 10.85 5.37, 10.84 6.67 C10.82 7.97, 11.24 9.51, 10.55 10.39 C9.86 11.27, 7.91 11.85, 6.71 11.95 C5.51 12.05, 4.4 11.72, 3.34 10.99 C2.28 10.26, 0.88 8.82, 0.35 7.59 C-0.19 6.35, -0.24 4.78, 0.15 3.57 C0.53 2.37, 1.55 1.04, 2.66 0.37 C3.76 -0.3, 6.21 -0.42, 6.78 -0.44 C7.34 -0.47, 6.18 0.13, 6.06 0.23" stroke="none" stroke-width="0" fill="#868e96"></path><path d="M5.57 -0.32 C6.65 -0.34, 8.11 0.48, 9.02 1.31 C9.92 2.15, 10.82 3.46, 11.02 4.7 C11.23 5.94, 10.76 7.49, 10.25 8.76 C9.74 10.02, 9.03 11.77, 7.98 12.29 C6.93 12.81, 5.16 12.35, 3.95 11.87 C2.75 11.38, 1.42 10.52, 0.74 9.4 C0.06 8.28, -0.37 6.52, -0.12 5.14 C0.14 3.76, 1.22 1.94, 2.26 1.11 C3.3 0.28, 5.44 0.37, 6.12 0.18 C6.81 -0.02, 6.39 -0.13, 6.4 -0.05 M6.69 0.65 C7.78 0.75, 9.25 0.98, 10 1.94 C10.76 2.89, 11.3 5.13, 11.23 6.4 C11.15 7.67, 10.25 8.62, 9.55 9.56 C8.85 10.5, 8.24 11.73, 7.02 12.05 C5.8 12.38, 3.39 12.28, 2.26 11.52 C1.12 10.77, 0.44 8.71, 0.2 7.52 C-0.04 6.33, 0.34 5.38, 0.81 4.36 C1.27 3.34, 2.1 2.19, 3 1.4 C3.9 0.61, 5.7 -0.22, 6.21 -0.38 C6.73 -0.55, 5.92 0.15, 6.1 0.4" stroke="#000000" stroke-width="1" fill="none"></path></g><g stroke-linecap="round" transform="translate(2498.5104769175746 6720.589497423822) rotate(357.5021844865888 5.613051577081023 6.09187924222806)"><path d="M4.84 -0.22 C5.97 -0.45, 7.6 0.06, 8.63 0.95 C9.66 1.84, 10.73 3.77, 11.02 5.11 C11.3 6.45, 10.92 7.82, 10.33 8.97 C9.75 10.13, 8.56 11.62, 7.5 12.04 C6.44 12.46, 5.04 11.86, 3.96 11.48 C2.88 11.11, 1.68 10.73, 1.05 9.79 C0.42 8.85, 0 7.25, 0.18 5.83 C0.37 4.41, 1.34 2.3, 2.15 1.3 C2.96 0.3, 4.46 0.02, 5.04 -0.15 C5.61 -0.33, 5.48 0.19, 5.59 0.24 M7.09 0.5 C8.11 0.6, 8.57 1.63, 9.36 2.59 C10.15 3.55, 11.7 5.06, 11.83 6.24 C11.96 7.42, 10.9 8.76, 10.15 9.66 C9.4 10.56, 8.52 11.44, 7.33 11.64 C6.15 11.84, 4.2 11.48, 3.02 10.87 C1.84 10.25, 0.73 9.13, 0.25 7.96 C-0.23 6.78, -0.28 5.06, 0.14 3.8 C0.57 2.55, 1.87 1.05, 2.82 0.43 C3.77 -0.19, 5.35 0.2, 5.87 0.07 C6.39 -0.05, 5.97 -0.4, 5.95 -0.35" stroke="none" stroke-width="0" fill="#868e96"></path><path d="M4.1 0.03 C5.18 -0.34, 6.94 -0.26, 8.01 0.28 C9.09 0.82, 9.99 1.94, 10.56 3.28 C11.14 4.61, 11.73 6.98, 11.46 8.31 C11.2 9.64, 10.07 10.56, 8.98 11.25 C7.9 11.94, 6.24 12.57, 4.96 12.43 C3.68 12.29, 2.1 11.45, 1.32 10.41 C0.53 9.36, 0.22 7.44, 0.24 6.14 C0.26 4.85, 0.64 3.66, 1.43 2.62 C2.23 1.58, 4.39 0.32, 5.03 -0.08 C5.67 -0.49, 5.26 0.02, 5.27 0.18 M5.74 -0.33 C6.88 -0.44, 8.45 0.87, 9.3 1.69 C10.16 2.51, 10.59 3.36, 10.87 4.61 C11.14 5.86, 11.61 7.94, 10.96 9.18 C10.31 10.42, 8.22 11.73, 6.98 12.07 C5.73 12.41, 4.47 11.66, 3.49 11.23 C2.52 10.8, 1.68 10.45, 1.13 9.5 C0.58 8.56, 0.13 7.01, 0.2 5.56 C0.28 4.12, 0.78 1.75, 1.6 0.85 C2.43 -0.05, 4.34 0.23, 5.14 0.16 C5.95 0.1, 6.35 0.42, 6.42 0.48" stroke="#000000" stroke-width="1" fill="none"></path></g><g transform="translate(2440.4351253655445 6742.179639022665) rotate(0 60.298744961534794 11.797580535952875)"><text x="60.29874496153468" y="16.271922191069216" font-family="Virgil, sans-serif, Segoe UI Emoji" font-size="17.4778970902999px" fill="#000000" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Relational DB</text></g><g stroke-linecap="round" transform="translate(1511.179891651736 7594.479991347851) rotate(0 120 88)"><path d="M32 0 C99.35 1.22, 165.35 0.74, 208 0 M32 0 C68.6 -0.14, 104.66 -0.83, 208 0 M208 0 C230.95 -1.47, 238.71 10.73, 240 32 M208 0 C228.51 1.13, 240.23 11.5, 240 32 M240 32 C238.87 57.62, 240.06 86.38, 240 144 M240 32 C239.38 76.67, 238.88 121.36, 240 144 M240 144 C239.29 164.22, 229.36 175.48, 208 176 M240 144 C238.12 163.92, 228.52 173.8, 208 176 M208 176 C151.83 176.04, 101.03 176.72, 32 176 M208 176 C165.2 175.97, 120.59 174.5, 32 176 M32 176 C9 176.69, 0.93 165.28, 0 144 M32 176 C11.37 178.12, -1.71 167.16, 0 144 M0 144 C-0.48 108.01, 0.23 75.15, 0 32 M0 144 C1.87 110.69, 1.89 79.43, 0 32 M0 32 C-1.34 12.63, 11.1 -1.63, 32 0 M0 32 C0.21 12.94, 9.67 2.16, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(1542.429891651736 7657.479991347851) rotate(0 88.75 25)"><text x="88.75" y="17.619999999999997" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Notification </text><text x="88.75" y="42.62" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">via Queuer Service</text></g><g stroke-linecap="round" transform="translate(648.192070160299 7840.330673708839) rotate(0 120 88)"><path d="M32 0 C82.27 1.56, 136.9 2.93, 208 0 M32 0 C98.39 -0.08, 166.07 0.07, 208 0 M208 0 C230.66 0.4, 238.27 10.64, 240 32 M208 0 C231.57 -0.95, 240.64 8.92, 240 32 M240 32 C240.54 65.58, 238.84 99.63, 240 144 M240 32 C239.98 63.22, 238.6 95.49, 240 144 M240 144 C239.29 164.41, 230.74 175.18, 208 176 M240 144 C242.1 166.37, 227.75 176.98, 208 176 M208 176 C159.35 177.96, 113 177.51, 32 176 M208 176 C152.72 177.94, 96.34 178.04, 32 176 M32 176 C10.4 177.93, 1.38 164.73, 0 144 M32 176 C12.42 178.12, 0.14 163.04, 0 144 M0 144 C-0.22 115.95, 1.29 89.85, 0 32 M0 144 C-0.51 111.39, -1.13 79.08, 0 32 M0 32 C-1.06 12.4, 12.02 0.51, 32 0 M0 32 C-1.06 11.83, 12.9 0.13, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(692.2004014591271 7915.830673708839) rotate(0 75.99166870117188 12.5)"><text x="75.99166870117188" y="17.619999999999997" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Booking Service</text></g><g stroke-linecap="round" transform="translate(1744.6885176577584 7879.588573641844) rotate(0 120 88)"><path d="M32 0 C67.32 0.2, 102.65 1.76, 208 0 M32 0 C73.91 -1.97, 116.58 -0.25, 208 0 M208 0 C228.94 -0.08, 241.56 11.88, 240 32 M208 0 C227.71 -1.47, 240.02 12.74, 240 32 M240 32 C240.15 70.41, 239.9 109.26, 240 144 M240 32 C240.67 56.68, 241.57 80.73, 240 144 M240 144 C241.02 163.97, 231.1 175.15, 208 176 M240 144 C241.76 164.76, 228.77 177.35, 208 176 M208 176 C150.85 174.27, 91.7 173.61, 32 176 M208 176 C156.05 176.6, 102.97 176.66, 32 176 M32 176 C9.96 176.59, 1.31 164.37, 0 144 M32 176 C9.42 174.06, 1.35 165.37, 0 144 M0 144 C0.15 116.2, 2.64 89.53, 0 32 M0 144 C-0.22 105.79, -1.5 67.68, 0 32 M0 32 C0.08 9.85, 11.39 1.39, 32 0 M0 32 C-2.14 9.28, 9.84 1.32, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(1801.5635176577584 7955.088573641844) rotate(0 63.125 12.5)"><text x="63.125" y="17.619999999999997" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Trips Service</text></g><g stroke-linecap="round" transform="translate(2112.6017831187714 6461.037779448889) rotate(0 129.95679301679365 79.58028336421648)"><path d="M32 0 C102.19 0.98, 173.61 0.7, 227.91 0 M32 0 C101.82 0.91, 172.66 1.36, 227.91 0 M227.91 0 C247.31 0.27, 258.24 9.87, 259.91 32 M227.91 0 C251.41 -0.84, 259.32 10.72, 259.91 32 M259.91 32 C257.43 53.61, 258.01 70.34, 259.91 127.16 M259.91 32 C260.16 53.81, 260.16 74.57, 259.91 127.16 M259.91 127.16 C261.79 149.25, 248.14 159.99, 227.91 159.16 M259.91 127.16 C262.15 147.04, 251.45 159.06, 227.91 159.16 M227.91 159.16 C190.51 162.51, 151.04 162.24, 32 159.16 M227.91 159.16 C177.42 159.26, 125.76 157.84, 32 159.16 M32 159.16 C12.27 160.37, 0.45 149.66, 0 127.16 M32 159.16 C12.35 159.45, -0.43 150.57, 0 127.16 M0 127.16 C2.31 107.21, -0.56 86.88, 0 32 M0 127.16 C0.38 99.45, 1.08 69.06, 0 32 M0 32 C0.77 8.71, 12.33 -0.52, 32 0 M0 32 C-2.06 12.95, 12.42 -1.41, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(2174.6252417849787 6528.118062813106) rotate(0 67.93333435058594 12.5)"><text x="67.93333435058594" y="17.619999999999997" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Queuer Server</text></g><g stroke-linecap="round"><g transform="translate(2494.917987329711 6450.819683976935) rotate(269.83845249062614 15.11265423528448 65.88741862166898)" fill-rule="evenodd"><path d="M0.63 -0.84 L30.44 -0.63 L31.91 119.81 L14 130.59 L-0.72 118.58 L-1.67 0.76" stroke="none" stroke-width="0" fill="#eeeeee" fill-rule="evenodd"></path><path d="M0 0 C8.57 -0.32, 20.37 0.76, 30.29 -0.12 M0 0 C8.97 0.54, 15.62 0.28, 30.29 -0.12 M30.29 -0.12 C32.19 44.74, 28.35 85.84, 30.03 118.71 M30.29 -0.12 C29.97 28.52, 29.64 57.35, 30.03 118.71 M30.03 118.71 C26.9 123.85, 22.82 127.43, 14.56 131.89 M30.03 118.71 C25.36 122.6, 20.12 128.02, 14.56 131.89 M14.56 131.89 C8.79 126.29, 7.43 123.35, 0.47 117.98 M14.56 131.89 C10.32 127.06, 4.16 122.58, 0.47 117.98 M0.47 117.98 C0.59 81, -1.64 47.23, 0 0 M0.47 117.98 C0.2 89.95, -0.72 60.53, 0 0 M0 0 C0 0, 0 0, 0 0 M0 0 C0 0, 0 0, 0 0" stroke="#000000" stroke-width="1" fill="none"></path></g></g><mask></mask><g stroke-linecap="round"><g transform="translate(2500.7791736730146 6520.051139892232) rotate(0 15.480608900274547 -0.26345808588303044)"><path d="M0 0 C12.13 0.33, 23.91 -0.74, 30.96 -0.57" stroke="#000000" stroke-width="1.5" fill="none" stroke-dasharray="1.5 7"></path></g></g><mask></mask><g stroke-linecap="round" transform="translate(2448.5750838675817 6510.618501954519) rotate(0 12.320244053771148 8.188904730351169)"><path d="M-0.42 -0.57 L25.4 -0.59 L24.64 15.6 L-0.16 16.83" stroke="none" stroke-width="0" fill="#868e96"></path><path d="M0 0 C7.1 -0.36, 15.09 0.68, 24.64 0 M0 0 C9.36 0, 17.61 0.42, 24.64 0 M24.64 0 C24.06 5.49, 24.25 11.85, 24.64 16.38 M24.64 0 C24.56 5.11, 25.01 11.1, 24.64 16.38 M24.64 16.38 C15.87 16.94, 7.06 16.71, 0 16.38 M24.64 16.38 C18.34 16.33, 12.42 16.09, 0 16.38 M0 16.38 C0.38 12.69, -0.32 9.57, 0 0 M0 16.38 C0.06 11.49, 0.07 6.32, 0 0" stroke="#000000" stroke-width="1" fill="none"></path></g><g stroke-linecap="round"><g transform="translate(2461.5470030612873 6518.645334089981) rotate(0 -0.3055958865820685 -3.8684876998722757)" fill-rule="evenodd"><path d="M0.76 -0.59 L11.69 -8.51 L-12.46 -7.19 L-0.97 -0.48" stroke="none" stroke-width="0" fill="#ced4da" fill-rule="evenodd"></path><path d="M0 0 C4.39 -2.21, 8.79 -6.06, 11.69 -7.74 M0 0 C3.68 -2.33, 8.19 -5.64, 11.69 -7.74 M11.69 -7.74 C5.94 -7.54, 1.26 -7.77, -12.3 -7.64 M11.69 -7.74 C3.03 -7.46, -6.21 -7.37, -12.3 -7.64 M-12.3 -7.64 C-7.56 -4.74, -3.74 -2.16, 0 0 M-12.3 -7.64 C-7.37 -5.05, -3.39 -1.65, 0 0 M0 0 C0 0, 0 0, 0 0 M0 0 C0 0, 0 0, 0 0" stroke="#000000" stroke-width="1" fill="none"></path></g></g><mask></mask><g stroke-linecap="round" transform="translate(2478.029290833991 6510.760336016956) rotate(0 12.320244053771148 8.188904730351169)"><path d="M0 -0.78 L24.48 0.45 L23.67 15.89 L0.5 16.01" stroke="none" stroke-width="0" fill="#868e96"></path><path d="M0 0 C7.33 -0.91, 13.77 0.59, 24.64 0 M0 0 C7.91 -0.58, 14.88 -0.42, 24.64 0 M24.64 0 C24.86 4.21, 25.26 8.32, 24.64 16.38 M24.64 0 C24.98 4.01, 24.96 7.48, 24.64 16.38 M24.64 16.38 C15.61 16.42, 8.17 16.49, 0 16.38 M24.64 16.38 C17.54 16.66, 11.14 16.55, 0 16.38 M0 16.38 C0.13 11.06, 0.5 6.52, 0 0 M0 16.38 C-0.18 10.28, 0.31 4.42, 0 0" stroke="#000000" stroke-width="1" fill="none"></path></g><g stroke-linecap="round"><g transform="translate(2491.0209279007036 6518.214113623437) rotate(0 -0.3055958865820685 -3.8776087544629263)" fill-rule="evenodd"><path d="M-0.16 0.45 L10.72 -8.22 L-11.8 -8.01 L-0.63 0.85" stroke="none" stroke-width="0" fill="#ced4da" fill-rule="evenodd"></path><path d="M0 0 C4.66 -2.37, 8.8 -6.37, 11.69 -7.74 M0 0 C4.32 -3.21, 9.05 -6.18, 11.69 -7.74 M11.69 -7.74 C4.74 -7.91, -4.55 -6.77, -12.3 -7.64 M11.69 -7.74 C3.23 -7.49, -5.59 -7.36, -12.3 -7.64 M-12.3 -7.64 C-7.78 -5.1, -4.5 -1.99, 0 0 M-12.3 -7.64 C-9.58 -5.77, -6.78 -4.36, 0 0 M0 0 C0 0, 0 0, 0 0 M0 0 C0 0, 0 0, 0 0" stroke="#000000" stroke-width="1" fill="none"></path></g></g><mask></mask><g stroke-linecap="round" transform="translate(2530.8861181027573 6510.192999767201) rotate(0 12.320244053771148 8.188904730351169)"><path d="M-0.97 -0.48 L25.14 -0.36 L24.01 17.23 L0.95 16.39" stroke="none" stroke-width="0" fill="#868e96"></path><path d="M0 0 C5.47 -0.96, 11.68 0.48, 24.64 0 M0 0 C4.89 -0.11, 10.3 0.23, 24.64 0 M24.64 0 C24.1 5.6, 25.24 10.26, 24.64 16.38 M24.64 0 C24.89 6.36, 24.79 12.2, 24.64 16.38 M24.64 16.38 C16.94 17.32, 9.03 15.65, 0 16.38 M24.64 16.38 C15.39 16.29, 6.5 16.51, 0 16.38 M0 16.38 C0.43 12.24, 0.34 7.65, 0 0 M0 16.38 C-0.06 12.09, -0.13 8.62, 0 0" stroke="#000000" stroke-width="1" fill="none"></path></g><g stroke-linecap="round"><g transform="translate(2544.3752320245653 6517.29388628945) rotate(0 -0.3055958865820685 -3.8780887527964296)" fill-rule="evenodd"><path d="M0.5 -0.36 L11.06 -6.89 L-11.35 -7.63 L0.73 0.78" stroke="none" stroke-width="0" fill="#ced4da" fill-rule="evenodd"></path><path d="M0 0 C4.96 -2.4, 7.95 -6.18, 11.69 -7.74 M0 0 C2.88 -1.72, 5.58 -3.39, 11.69 -7.74 M11.69 -7.74 C5.62 -6.95, -0.97 -6.98, -12.3 -7.64 M11.69 -7.74 C4.07 -7.87, -3.79 -7.26, -12.3 -7.64 M-12.3 -7.64 C-9.07 -5.88, -4.19 -3.04, 0 0 M-12.3 -7.64 C-7.67 -4.87, -3.76 -2.01, 0 0 M0 0 C0 0, 0 0, 0 0 M0 0 C0 0, 0 0, 0 0" stroke="#000000" stroke-width="1" fill="none"></path></g></g><mask></mask><g transform="translate(2460.489996347524 6531.815179895319) rotate(0 49.03785867614124 12.490775323168236)"><text x="49.0378586761411" y="17.228017519806563" font-family="Virgil, sans-serif, Segoe UI Emoji" font-size="18.504852330619276px" fill="#000000" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Message Q</text></g><g stroke-linecap="round" transform="translate(2749.8134725116147 6442.67866992044) rotate(0 114.62481181818339 83.9608494209624)"><path d="M32 0 C79.88 -1.58, 126.86 -0.13, 197.25 0 M32 0 C97.26 -0.09, 163.92 -0.15, 197.25 0 M197.25 0 C217.21 0.21, 228.44 9.86, 229.25 32 M197.25 0 C216.45 1.32, 228.5 8.98, 229.25 32 M229.25 32 C231.5 58.92, 230.12 85.45, 229.25 135.92 M229.25 32 C230.26 64.67, 228.58 96.2, 229.25 135.92 M229.25 135.92 C230.58 156.43, 217.09 167.67, 197.25 167.92 M229.25 135.92 C230.63 159.11, 220.17 166.89, 197.25 167.92 M197.25 167.92 C150.76 168.4, 108.47 169.95, 32 167.92 M197.25 167.92 C143.03 167.31, 87.48 167.51, 32 167.92 M32 167.92 C9.74 168.34, -1.93 156.45, 0 135.92 M32 167.92 C9.6 165.85, -2.08 159.14, 0 135.92 M0 135.92 C-0.91 104.17, 1.29 73.63, 0 32 M0 135.92 C-0.39 101.21, -0.08 67.1, 0 32 M0 32 C0.74 11.66, 12.56 1.44, 32 0 M0 32 C-1.24 12.61, 10.74 -0.21, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g stroke-linecap="round" transform="translate(2759.8134725116147 6452.67866992044) rotate(0 114.62481181818339 83.9608494209624)"><path d="M32 0 C66.37 0.13, 97.98 -0.06, 197.25 0 M32 0 C66.81 -0.84, 102.26 0.5, 197.25 0 M197.25 0 C220.19 1.82, 230.47 12.29, 229.25 32 M197.25 0 C216.37 2.13, 229.74 11.34, 229.25 32 M229.25 32 C232.01 68.15, 230.95 102.07, 229.25 135.92 M229.25 32 C229 56.62, 230.47 83.43, 229.25 135.92 M229.25 135.92 C230.4 158.91, 220.07 168.29, 197.25 167.92 M229.25 135.92 C227.33 156.91, 218.62 167.46, 197.25 167.92 M197.25 167.92 C154.24 168.57, 107.76 168.85, 32 167.92 M197.25 167.92 C141.6 167.98, 86.7 167.46, 32 167.92 M32 167.92 C10.59 169.31, -0.42 157.49, 0 135.92 M32 167.92 C11.08 168.52, -1.44 157.33, 0 135.92 M0 135.92 C1.23 104.87, 1.75 76.97, 0 32 M0 135.92 C1.67 104.07, 1.07 70.84, 0 32 M0 32 C1.97 11.58, 9.32 0.01, 32 0 M0 32 C-1.78 12.94, 12.94 -1.69, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g stroke-linecap="round" transform="translate(2769.8134725116147 6462.67866992044) rotate(0 114.62481181818339 83.9608494209624)"><path d="M32 0 C69.6 2.04, 103.2 0.75, 197.25 0 M32 0 C77.43 -0.72, 121.86 -2.29, 197.25 0 M197.25 0 C220.44 0.43, 229.83 11.54, 229.25 32 M197.25 0 C220.33 0.48, 231.52 11.14, 229.25 32 M229.25 32 C229.61 66.02, 226.89 102.21, 229.25 135.92 M229.25 32 C230.72 70.74, 230.08 107.15, 229.25 135.92 M229.25 135.92 C228.95 157.29, 218.18 167.25, 197.25 167.92 M229.25 135.92 C231.13 158.79, 219.75 167.4, 197.25 167.92 M197.25 167.92 C159.92 168.1, 121.68 169.34, 32 167.92 M197.25 167.92 C137.89 167.65, 77.26 168.04, 32 167.92 M32 167.92 C11.19 166.67, 0.06 156.85, 0 135.92 M32 167.92 C8.73 168.1, 0.41 155, 0 135.92 M0 135.92 C-1.51 100.49, 1.76 65.19, 0 32 M0 135.92 C1.17 103.24, 0.72 71.14, 0 32 M0 32 C1.98 12.64, 9.19 -1.79, 32 0 M0 32 C-1.18 11.28, 8.68 -1.54, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(2831.3466171545056 6529.139519341403) rotate(0 53.09166717529297 17.5)"><text x="53.09166717529297" y="24.668" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="28px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Workers</text></g><g stroke-linecap="round" transform="translate(1793.2158809463485 6311.483009017138) rotate(0 643.2131159988494 339.4938693978038)"><path d="M32 0 C505.07 -1.97, 979.9 -1.37, 1254.43 0 M32 0 C406.62 1.84, 781.81 1.61, 1254.43 0 M1254.43 0 C1275.92 -0.61, 1286.5 10.55, 1286.43 32 M1254.43 0 C1276.81 1.58, 1287.29 11.2, 1286.43 32 M1286.43 32 C1284.06 194.61, 1283.79 357.9, 1286.43 646.99 M1286.43 32 C1285.55 162.01, 1285.44 292.96, 1286.43 646.99 M1286.43 646.99 C1287.13 668.53, 1276.78 678.17, 1254.43 678.99 M1286.43 646.99 C1284.66 666.63, 1276.87 677.8, 1254.43 678.99 M1254.43 678.99 C1002.74 681.2, 751.03 682.31, 32 678.99 M1254.43 678.99 C912.84 683.44, 571.4 683.5, 32 678.99 M32 678.99 C12.3 677.33, -0.41 668.08, 0 646.99 M32 678.99 C10.08 677.02, -0.99 666.92, 0 646.99 M0 646.99 C1.47 523.63, 1.2 401.14, 0 32 M0 646.99 C0.52 498.02, 0.83 349.71, 0 32 M0 32 C-1.13 11.63, 9.24 -0.1, 32 0 M0 32 C1.9 8.44, 10.44 0.51, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g stroke-linecap="round"><g transform="translate(2371.2171121836077 6515.814626607033) rotate(0 33.342234118697434 -0.9959063907490417)"><path d="M-0.89 -0.15 C10.24 -0.12, 56.15 0, 67.58 -0.27 M0.84 -1.28 C11.8 -1.52, 55.92 -1.97, 67.01 -1.88" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(2371.2171121836077 6515.814626607033) rotate(0 33.342234118697434 -0.9959063907490417)"><path d="M43.54 6.73 C51.92 4.95, 62.4 1.97, 67.01 -1.88 M43.54 6.73 C49.58 3.69, 55.74 2.76, 67.01 -1.88" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(2371.2171121836077 6515.814626607033) rotate(0 33.342234118697434 -0.9959063907490417)"><path d="M43.49 -10.37 C51.82 -5.89, 62.31 -2.59, 67.01 -1.88 M43.49 -10.37 C49.5 -9.05, 55.67 -5.62, 67.01 -1.88" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask></mask><g stroke-linecap="round"><g transform="translate(2566.0266062102987 6518.333346201556) rotate(0 87.16002409944304 -0.8464545666911363)"><path d="M1.05 -0.2 C29.79 -0.32, 143.48 -1.28, 171.92 -1.49 M0.14 -1.35 C29.3 -1.24, 145.2 -0.39, 174.18 -0.24" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(2566.0266062102987 6518.333346201556) rotate(0 87.16002409944304 -0.8464545666911363)"><path d="M150.64 8.16 C156.43 4.35, 161.93 1.8, 174.18 -0.24 M150.64 8.16 C156.78 5.77, 162.61 4.67, 174.18 -0.24" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(2566.0266062102987 6518.333346201556) rotate(0 87.16002409944304 -0.8464545666911363)"><path d="M150.74 -8.94 C156.4 -8.34, 161.87 -6.49, 174.18 -0.24 M150.74 -8.94 C156.75 -6.99, 162.56 -3.74, 174.18 -0.24" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask></mask><g transform="translate(2289.7554739785924 6915.031748553169) rotate(0 99.83333587646484 17.5)"><text x="0" y="24.668" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="28px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Queuer Service</text></g><g stroke-linecap="round"><g transform="translate(2377.674614410031 6562.805495322702) rotate(0 40.50513199794477 67.73478401621742)"><path d="M0.25 0.74 C13.83 23.31, 68.55 113.05, 82.09 135.38 M-1.08 0.09 C12.38 22.31, 68.04 110.92, 81.72 133.58" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(2377.674614410031 6562.805495322702) rotate(0 40.50513199794477 67.73478401621742)"><path d="M62.11 118.08 C70.21 125.3, 76.85 129.79, 81.72 133.58 M62.11 118.08 C68.17 121.76, 74.69 126.8, 81.72 133.58" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(2377.674614410031 6562.805495322702) rotate(0 40.50513199794477 67.73478401621742)"><path d="M76.66 109.09 C79.66 119.5, 81.2 127.13, 81.72 133.58 M76.66 109.09 C78.47 115.47, 80.67 123.18, 81.72 133.58" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask></mask><g stroke-linecap="round"><g transform="translate(2738.8134725116156 6574.00586852899) rotate(0 -100.11733809133239 59.968465809368354)"><path d="M-1.18 0.48 C-34.33 20.5, -166.51 100.48, -199.74 120.25 M0.41 -0.32 C-32.82 19.38, -167.56 98.55, -200.64 118.67" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(2738.8134725116156 6574.00586852899) rotate(0 -100.11733809133239 59.968465809368354)"><path d="M-184.84 99.29 C-187.66 103.76, -190.37 106.84, -200.64 118.67 M-184.84 99.29 C-188.84 105.58, -193.79 110.62, -200.64 118.67" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(2738.8134725116156 6574.00586852899) rotate(0 -100.11733809133239 59.968465809368354)"><path d="M-176.08 113.98 C-180.93 114.98, -185.66 114.69, -200.64 118.67 M-176.08 113.98 C-182.75 115.98, -190.27 116.72, -200.64 118.67" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask></mask><g stroke-linecap="round"><g transform="translate(1421.3879701698884 7822.660355799564) rotate(0 39.23595839011659 -45.811570940457386)"><path d="M-1.03 0.69 C12.23 -14.37, 66.23 -75.48, 79.5 -90.8 M0.64 0.01 C13.8 -15.31, 66.07 -76.78, 78.92 -92.32" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(1421.3879701698884 7822.660355799564) rotate(0 39.23595839011659 -45.811570940457386)"><path d="M70.35 -68.83 C74.13 -74.55, 77.45 -83.03, 78.92 -92.32 M70.35 -68.83 C73.53 -77.44, 76.61 -85.8, 78.92 -92.32" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(1421.3879701698884 7822.660355799564) rotate(0 39.23595839011659 -45.811570940457386)"><path d="M57.26 -79.84 C64.88 -82.18, 72.08 -87.4, 78.92 -92.32 M57.26 -79.84 C65.08 -84.41, 72.87 -88.8, 78.92 -92.32" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask></mask><g transform="translate(648.6084826445472 8063.394106789927) rotate(0 176.0500030517578 37.5)"><text x="0" y="17.619999999999997" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">- Create the Booking Entry, returns</text><text x="0" y="42.62" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic"> Idempotency Key</text><text x="0" y="67.62" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic"></text></g><g stroke-linecap="round"><g transform="translate(1762.179891651736 7682.882789463765) rotate(0 239.7057484326815 85.48845871778303)"><path d="M-0.97 -0.6 C79.16 27.77, 400.26 142.06, 480.39 170.59 M0.72 1.71 C80.74 30.15, 399.82 143.31, 479.49 171.57" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(1762.179891651736 7682.882789463765) rotate(0 239.7057484326815 85.48845871778303)"><path d="M454.49 171.78 C460.08 172.1, 465.9 171, 479.49 171.57 M454.49 171.78 C459.91 171.49, 465.71 172.06, 479.49 171.57" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(1762.179891651736 7682.882789463765) rotate(0 239.7057484326815 85.48845871778303)"><path d="M460.21 155.66 C464.34 160.17, 468.66 163.32, 479.49 171.57 M460.21 155.66 C464.28 158.75, 468.89 162.69, 479.49 171.57" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask></mask><g stroke-linecap="round" transform="translate(87.86124175230816 7550.010671442813) rotate(0 1265.703782386827 459.2293416155235)"><path d="M32 0 C1004.54 8.01, 1977.32 7.56, 2499.41 0 M32 0 C843.9 4.49, 1655.64 4.06, 2499.41 0 M2499.41 0 C2522.66 0.18, 2533.06 10.29, 2531.41 32 M2499.41 0 C2519.03 -0.82, 2531.85 10.25, 2531.41 32 M2531.41 32 C2529.37 266.63, 2529.9 501.16, 2531.41 886.46 M2531.41 32 C2528.35 359.75, 2528.46 686.76, 2531.41 886.46 M2531.41 886.46 C2530.09 908.75, 2522.01 918.21, 2499.41 918.46 M2531.41 886.46 C2531.55 909.03, 2519.85 917.62, 2499.41 918.46 M2499.41 918.46 C1891.17 918.18, 1282.66 917.97, 32 918.46 M2499.41 918.46 C1746.05 910.83, 992.37 910.4, 32 918.46 M32 918.46 C9.89 917.74, 1.88 905.81, 0 886.46 M32 918.46 C12.16 916.43, 1.83 907.95, 0 886.46 M0 886.46 C-1.88 662.4, -3.31 439.14, 0 32 M0 886.46 C2.82 567.76, 3.03 249.24, 0 32 M0 32 C0.45 10.84, 10.18 -1.67, 32 0 M0 32 C1.39 12.44, 12.69 -0.13, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g stroke-linecap="round"><g transform="translate(1243.8201829640147 7822.576338160412) rotate(0 -2.274602484902516 -22.96765993100871)"><path d="M-0.25 0.15 C-1.09 -7.47, -4.05 -37.78, -4.93 -45.37 M0.62 -0.25 C-0.27 -8.03, -4.07 -38.42, -5.17 -46.08" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(1243.8201829640147 7822.576338160412) rotate(0 -2.274602484902516 -22.96765993100871)"><path d="M5.52 -25.61 C2.27 -31.6, -0.54 -39.32, -5.17 -46.08 M5.52 -25.61 C1.83 -33.94, -2.18 -40.88, -5.17 -46.08" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(1243.8201829640147 7822.576338160412) rotate(0 -2.274602484902516 -22.96765993100871)"><path d="M-10.14 -23.53 C-8.33 -30.16, -6.07 -38.55, -5.17 -46.08 M-10.14 -23.53 C-7.77 -32.72, -5.74 -40.45, -5.17 -46.08" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask></mask><g mask="url(#mask-vkhvropVAEIAkWi9B0hAL)" stroke-linecap="round"><g transform="translate(2245.460503016983 7964.704258148087) rotate(0 -124.19213677697508 -1.6351595153973904)"><path d="M-0.25 -0.71 C-41.87 -1.29, -207.67 -2.67, -249.43 -3.2 M1.82 1.53 C-39.96 0.6, -208.48 -3.54, -250.2 -4.8" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(2245.460503016983 7964.704258148087) rotate(0 -124.19213677697508 -1.6351595153973904)"><path d="M-226.49 -12.71 C-235.4 -9.62, -240.3 -9.39, -250.2 -4.8 M-226.49 -12.71 C-234.15 -9.49, -242.04 -6.47, -250.2 -4.8" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(2245.460503016983 7964.704258148087) rotate(0 -124.19213677697508 -1.6351595153973904)"><path d="M-226.95 4.38 C-235.75 1.9, -240.5 -3.46, -250.2 -4.8 M-226.95 4.38 C-234.42 1.99, -242.16 -0.6, -250.2 -4.8" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask id="mask-vkhvropVAEIAkWi9B0hAL"><rect x="0" y="0" fill="#fff" width="2595.2324883762058" height="8068.891129504499"></rect><rect x="2051.582841636199" y="7950.110822469884" fill="#000" width="137.98333740234375" height="25" opacity="1"></rect></mask><g transform="translate(2051.5828416362 7950.110822469883) rotate(0 69.68552460380806 12.958276162808033)"><text x="68.99166870117188" y="17.619999999999997" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">accept/decline</text></g><g mask="url(#mask-Z8NkKYqjRjUEx_udV0vli)" stroke-linecap="round"><g transform="translate(1794.1495184384253 6541.905408263885) rotate(0 153.508820754711 1.3142771068787624)"><path d="M-0.03 0.41 C50.96 0.94, 255.02 1.69, 306.37 2.09 M-1.5 -0.42 C49.8 0.31, 257 2.31, 308.52 3.04" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(1794.1495184384253 6541.905408263885) rotate(0 153.508820754711 1.3142771068787624)"><path d="M284.93 11.32 C293.7 6.72, 299.17 6.73, 308.52 3.04 M284.93 11.32 C291.47 9.56, 298.44 6.24, 308.52 3.04" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(1794.1495184384253 6541.905408263885) rotate(0 153.508820754711 1.3142771068787624)"><path d="M285.13 -5.78 C293.68 -4.58, 299.08 1.24, 308.52 3.04 M285.13 -5.78 C291.47 -2.93, 298.39 -1.64, 308.52 3.04" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask id="mask-Z8NkKYqjRjUEx_udV0vli"><rect x="0" y="0" fill="#fff" width="2201.601783118771" height="6645.109046123095"></rect><rect x="1897.1339858921237" y="6518.50722719349" fill="#000" width="101.48332977294922" height="50" opacity="1"></rect></mask><g transform="translate(1897.1339858921233 6518.50722719349) rotate(0 50.52435330101298 24.71245817727413)"><text x="50.74166488647461" y="17.619999999999997" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">save req</text><text x="50.74166488647461" y="42.62" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">and return</text></g><g transform="translate(1705.5495199643042 6528.406980418022) rotate(0 38.79999923706055 17.5)"><text x="0" y="24.668" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="28px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">/send</text></g><g stroke-linecap="round" transform="translate(1661.1597656143445 6516.14030430059) rotate(0 66.2192393736018 33.109619686801125)"><path d="M16.55 0 C49.09 1.25, 82.33 0.96, 115.88 0 M16.55 0 C52.71 0.52, 87.16 1.09, 115.88 0 M115.88 0 C126.37 -0.14, 133.73 7.16, 132.44 16.55 M115.88 0 C128.27 0.83, 133.94 5.06, 132.44 16.55 M132.44 16.55 C133.19 30.56, 134.13 42.62, 132.44 49.66 M132.44 16.55 C132.12 25.95, 132.09 37.08, 132.44 49.66 M132.44 49.66 C131.9 62.23, 127.83 66.61, 115.88 66.22 M132.44 49.66 C134.72 61.34, 125.47 66.96, 115.88 66.22 M115.88 66.22 C82.57 66.36, 47.63 67.11, 16.55 66.22 M115.88 66.22 C79.47 67.41, 40.8 67.49, 16.55 66.22 M16.55 66.22 C4.28 65.77, 0.19 59.04, 0 49.66 M16.55 66.22 C4.85 65.98, -1.84 59.16, 0 49.66 M0 49.66 C1.77 40.3, 1.05 27.18, 0 16.55 M0 49.66 C0.61 38.57, 0.78 28.9, 0 16.55 M0 16.55 C-0.35 6.23, 5.79 1.37, 16.55 0 M0 16.55 C1.75 4.88, 4.62 2.07, 16.55 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g stroke-linecap="round" transform="translate(486.71382363725706 6548.272839054707) rotate(0 79.8682324858762 44.45495959119489)"><path d="M22.23 0 C50.71 2.37, 80.13 -0.38, 137.51 0 M22.23 0 C56.13 -1.96, 90.23 -1.7, 137.51 0 M137.51 0 C152.57 -1.04, 160.75 7.13, 159.74 22.23 M137.51 0 C152.6 -0.19, 159.61 6.98, 159.74 22.23 M159.74 22.23 C159.66 30.84, 160.7 41.27, 159.74 66.68 M159.74 22.23 C160.61 32.63, 159.54 45.3, 159.74 66.68 M159.74 66.68 C158.83 83.19, 150.33 90.24, 137.51 88.91 M159.74 66.68 C161.86 82.97, 153.19 88.58, 137.51 88.91 M137.51 88.91 C97 86.35, 54.86 86.1, 22.23 88.91 M137.51 88.91 C106.89 88.32, 75.78 89.32, 22.23 88.91 M22.23 88.91 C6.73 90.21, -1.31 82.81, 0 66.68 M22.23 88.91 C6.12 87.97, -2.17 80.34, 0 66.68 M0 66.68 C1.2 53.68, -0.47 43.86, 0 22.23 M0 66.68 C-1.04 53.11, 0.34 39.76, 0 22.23 M0 22.23 C-1.81 7.87, 6.9 1.19, 22.23 0 M0 22.23 C-1.33 9.68, 5.82 0.88, 22.23 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(525.6487217725476 6555.227798645903) rotate(0 40.93333435058594 37.5)"><text x="40.93333435058594" y="17.619999999999997" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Identity</text><text x="40.93333435058594" y="42.62" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">&amp;</text><text x="40.93333435058594" y="67.62" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">AuthZ</text></g><g stroke-linecap="round" transform="translate(429.5900796257033 7884.945715822641) rotate(0 79.8682324858762 44.45495959119489)"><path d="M22.23 0 C67.22 -0.02, 111.47 1.16, 137.51 0 M22.23 0 C62.38 0.29, 102.73 0.45, 137.51 0 M137.51 0 C152.97 1.64, 160.89 6.79, 159.74 22.23 M137.51 0 C152.21 2.02, 161.72 7.66, 159.74 22.23 M159.74 22.23 C159.01 35.38, 158.66 46.82, 159.74 66.68 M159.74 22.23 C160.78 36.55, 160.36 51.62, 159.74 66.68 M159.74 66.68 C158.86 82.56, 153.85 88.52, 137.51 88.91 M159.74 66.68 C160.06 79.34, 152.76 91.09, 137.51 88.91 M137.51 88.91 C106.38 88.21, 76.35 87.05, 22.23 88.91 M137.51 88.91 C96.32 88.04, 55.6 89.18, 22.23 88.91 M22.23 88.91 C7.14 90.09, -1.77 81.65, 0 66.68 M22.23 88.91 C8.08 87.77, -0.12 82.61, 0 66.68 M0 66.68 C-0.68 50.02, 1.99 30.78, 0 22.23 M0 66.68 C0.76 52.89, -0.88 37.18, 0 22.23 M0 22.23 C-1.64 7.44, 5.71 1.89, 22.23 0 M0 22.23 C-1.2 7.66, 9.22 0.08, 22.23 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(468.5249777609938 7891.900675413835) rotate(0 40.93333435058594 37.5)"><text x="40.93333435058594" y="17.619999999999997" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Identity</text><text x="40.93333435058594" y="42.62" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">&amp;</text><text x="40.93333435058594" y="67.62" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">AuthZ</text></g><g stroke-linecap="round" transform="translate(4106.638705474428 7459.060641337048) rotate(0 79.86823248587598 44.45495959119489)"><path d="M22.23 0 C54.09 1.21, 85.57 1.35, 137.51 0 M22.23 0 C48.78 -1.17, 76.63 -0.83, 137.51 0 M137.51 0 C150.84 0.12, 158.9 6.81, 159.74 22.23 M137.51 0 C152.93 -0.84, 159.62 8.66, 159.74 22.23 M159.74 22.23 C161.35 35.94, 160.96 51.06, 159.74 66.68 M159.74 22.23 C160.38 36.55, 159.95 51.14, 159.74 66.68 M159.74 66.68 C158.73 82.83, 152.64 88.87, 137.51 88.91 M159.74 66.68 C157.76 80.12, 152.42 88.14, 137.51 88.91 M137.51 88.91 C112.6 89.9, 84.67 87.56, 22.23 88.91 M137.51 88.91 C94.78 90.4, 51.71 89.2, 22.23 88.91 M22.23 88.91 C8.37 88.07, 1.43 81.34, 0 66.68 M22.23 88.91 C6.38 90.89, -1.08 79.7, 0 66.68 M0 66.68 C0.65 53.09, -0.75 40.09, 0 22.23 M0 66.68 C-0.27 55.62, -1.01 45.36, 0 22.23 M0 22.23 C-1.94 6.4, 6.44 -0.44, 22.23 0 M0 22.23 C-1.84 7.07, 6.39 1.35, 22.23 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(4145.573603609719 7466.015600928244) rotate(0 40.93333435058594 37.5)"><text x="40.93333435058594" y="17.619999999999997" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Identity</text><text x="40.93333435058594" y="42.62" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">&amp;</text><text x="40.93333435058594" y="67.62" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">AuthZ</text></g><g stroke-linecap="round"><g transform="translate(433.6716675885441 6593.346415760636) rotate(0 27.41844238826502 0.7020312930408181)"><path d="M-0.49 -0.64 C8.85 -0.59, 45.74 -0.04, 55.33 0.18 M1.45 1.64 C10.65 1.92, 44.85 2.3, 54.09 1.81" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(433.6716675885441 6593.346415760636) rotate(0 27.41844238826502 0.7020312930408181)"><path d="M30.75 10.76 C35.27 7.81, 42.21 8.54, 54.09 1.81 M30.75 10.76 C38.26 7.66, 46.91 3.67, 54.09 1.81" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(433.6716675885441 6593.346415760636) rotate(0 27.41844238826502 0.7020312930408181)"><path d="M30.46 -6.34 C35.03 -5.21, 42.04 -0.39, 54.09 1.81 M30.46 -6.34 C38.15 -3.35, 46.9 -1.27, 54.09 1.81" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask></mask><g stroke-linecap="round"><g transform="translate(645.9884808452402 6585.219456401528) rotate(0 22.531538968120685 -0.16479910875114)"><path d="M-0.54 0.49 C7.06 0.44, 37.94 0.14, 45.61 0.09 M0.18 0.27 C7.7 0.01, 37.62 -0.65, 45.08 -0.82" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(645.9884808452402 6585.219456401528) rotate(0 22.531538968120685 -0.16479910875114)"><path d="M23.75 7.49 C30.87 4.82, 36.4 2.14, 45.08 -0.82 M23.75 7.49 C31.18 4.63, 38.62 1.69, 45.08 -0.82" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(645.9884808452402 6585.219456401528) rotate(0 22.531538968120685 -0.16479910875114)"><path d="M23.39 -8.17 C30.68 -6.25, 36.31 -4.33, 45.08 -0.82 M23.39 -8.17 C31 -5.73, 38.55 -3.37, 45.08 -0.82" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask></mask><g stroke-linecap="round"><g transform="translate(355.642655987986 7924.988070273226) rotate(0 39.3938375578864 0.5632582208108943)"><path d="M0.53 1.18 C13.8 1.17, 66.24 -0.04, 79.43 -0.05 M-0.64 0.75 C12.52 0.86, 65.43 0.72, 78.75 1.02" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(355.642655987986 7924.988070273226) rotate(0 39.3938375578864 0.5632582208108943)"><path d="M55.19 9.38 C63.94 7.72, 67.3 5.72, 78.75 1.02 M55.19 9.38 C62.67 6.33, 69.88 4.85, 78.75 1.02" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(355.642655987986 7924.988070273226) rotate(0 39.3938375578864 0.5632582208108943)"><path d="M55.33 -7.72 C64.05 -4.46, 67.36 -1.53, 78.75 1.02 M55.33 -7.72 C62.78 -5.25, 69.94 -1.2, 78.75 1.02" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask></mask><g stroke-linecap="round"><g transform="translate(4027.1676508226287 7499.102995787633) rotate(0 38.589172981236516 0.883340370546648)"><path d="M-0.12 0.57 C13.13 0.83, 65.8 1.84, 78.83 1.94 M-1.65 -0.17 C11.49 -0.25, 64.15 0.54, 77.83 0.41" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(4027.1676508226287 7499.102995787633) rotate(0 38.589172981236516 0.883340370546648)"><path d="M54.3 8.87 C60.97 6.67, 67.62 3.24, 77.83 0.41 M54.3 8.87 C62.75 5.42, 70.19 4.34, 77.83 0.41" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(4027.1676508226287 7499.102995787633) rotate(0 38.589172981236516 0.883340370546648)"><path d="M54.37 -8.23 C61.08 -6.26, 67.71 -5.52, 77.83 0.41 M54.37 -8.23 C62.86 -6.03, 70.28 -1.46, 77.83 0.41" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask></mask><g stroke-linecap="round"><g transform="translate(600.3265445974557 7923.345117797309) rotate(0 25.3568549971244 -0.6237084375225095)"><path d="M0.61 0.84 C9.28 0.32, 42.73 -1.82, 51.25 -2.08 M-0.53 0.23 C8.06 0.35, 41.74 -1.15, 50.36 -1.07" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(600.3265445974557 7923.345117797309) rotate(0 25.3568549971244 -0.6237084375225095)"><path d="M27.05 7.96 C33.81 5.93, 36.19 4.56, 50.36 -1.07 M27.05 7.96 C35.57 4.21, 42.09 2.07, 50.36 -1.07" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(600.3265445974557 7923.345117797309) rotate(0 25.3568549971244 -0.6237084375225095)"><path d="M26.7 -9.14 C33.69 -7.17, 36.15 -4.56, 50.36 -1.07 M26.7 -9.14 C35.47 -7.3, 42.1 -3.86, 50.36 -1.07" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask></mask><g mask="url(#mask-mpF_6RF4MjZfGUsBWBgWi)" stroke-linecap="round"><g transform="translate(5599.673353338127 7452.039990859483) rotate(0 187.25696974851598 -5.255479154412569)"><path d="M0.41 0.3 C63.02 -1.05, 313.21 -7.39, 375.35 -8.8 M-0.83 -0.58 C61.75 -2.26, 312.26 -9.23, 375.01 -10.81" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(5599.673353338127 7452.039990859483) rotate(0 187.25696974851598 -5.255479154412569)"><path d="M351.75 -1.64 C358.67 -2.3, 364.87 -8.3, 375.01 -10.81 M351.75 -1.64 C360.31 -5.28, 369.65 -8.97, 375.01 -10.81" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(5599.673353338127 7452.039990859483) rotate(0 187.25696974851598 -5.255479154412569)"><path d="M351.29 -18.73 C358.24 -14.72, 364.56 -16.05, 375.01 -10.81 M351.29 -18.73 C360.18 -16.06, 369.69 -13.43, 375.01 -10.81" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask id="mask-mpF_6RF4MjZfGUsBWBgWi"><rect x="0" y="0" fill="#fff" width="6073.8677909050475" height="7561.039105546196"></rect><rect x="5677.245570595707" y="7410.040433516126" fill="#000" width="219.0500030517578" height="75" opacity="1"></rect></mask><g transform="translate(5677.245570595706 7410.0404335161265) rotate(0 109.68475249093535 36.744078188942694)"><text x="109.5250015258789" y="17.619999999999997" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">/nearby?entity=drivers</text><text x="109.5250015258789" y="42.62" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">wss::</text><text x="109.5250015258789" y="67.62" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">(async)</text></g><g stroke-linecap="round" transform="translate(5989.8373315308345 7667.461600408737) rotate(0 120.59927714082187 127.96411849293236)"><path d="M32 0 C82.47 -0.65, 136.43 -2.23, 209.2 0 M32 0 C81.36 0.82, 129.79 0.97, 209.2 0 M209.2 0 C229.39 -1.51, 243.01 11.56, 241.2 32 M209.2 0 C231.79 -1.37, 243.39 10.37, 241.2 32 M241.2 32 C239.25 82.6, 241.9 130.73, 241.2 223.93 M241.2 32 C241.21 93.87, 242 155.74, 241.2 223.93 M241.2 223.93 C240.81 247.25, 230.81 256.81, 209.2 255.93 M241.2 223.93 C241.01 243.29, 232.1 258.04, 209.2 255.93 M209.2 255.93 C141.8 255.73, 74.12 256.38, 32 255.93 M209.2 255.93 C167.74 256.9, 124.82 256.47, 32 255.93 M32 255.93 C12.36 256.24, -0.57 244.79, 0 223.93 M32 255.93 C9.79 257.81, -2.19 243.38, 0 223.93 M0 223.93 C-1.22 178.94, -2.42 136.21, 0 32 M0 223.93 C-0.4 170.56, -0.81 119.55, 0 32 M0 32 C0.39 9.91, 12.08 1.73, 32 0 M0 32 C0.39 11.66, 10.66 0.58, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(6078.4032758469475 7782.92571890167) rotate(0 32.03333282470703 12.5)"><text x="32.03333282470703" y="17.619999999999997" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Pricing</text></g><g stroke-linecap="round" transform="translate(5997.996121192806 8008.879461253742) rotate(0 120.59927714082187 127.96411849293236)"><path d="M32 0 C73.44 -0.07, 112.74 1.58, 209.2 0 M32 0 C76.89 -1.46, 119.95 -1.43, 209.2 0 M209.2 0 C232.29 1.01, 241.25 10.94, 241.2 32 M209.2 0 C230.04 -0.59, 242.97 10.36, 241.2 32 M241.2 32 C240.66 85.85, 242.7 139.16, 241.2 223.93 M241.2 32 C243.78 102.97, 242.46 175.07, 241.2 223.93 M241.2 223.93 C239.35 245.31, 230.37 253.98, 209.2 255.93 M241.2 223.93 C242.34 246.65, 229.35 256.46, 209.2 255.93 M209.2 255.93 C159.5 257.74, 112.1 256.17, 32 255.93 M209.2 255.93 C170.65 255.22, 132.9 254.74, 32 255.93 M32 255.93 C10.66 256.17, 0.66 246.5, 0 223.93 M32 255.93 C11.13 257.3, 0.84 246.34, 0 223.93 M0 223.93 C0.26 172.92, 0.57 117.28, 0 32 M0 223.93 C-0.58 175.08, -1.83 124.19, 0 32 M0 32 C-1.67 9.2, 11.34 1.61, 32 0 M0 32 C-1.04 8.47, 9.76 -1.51, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(6094.378731158336 8124.3435797466755) rotate(0 24.21666717529297 12.5)"><text x="24.21666717529297" y="17.619999999999997" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Maps</text></g><g stroke-linecap="round" transform="translate(4069.1355720828237 7371.463824070497) rotate(0 251.32521114079555 160.18529940841927)"><path d="M32 0 C154.58 0.21, 276.97 0.69, 470.65 0 M32 0 C143.82 -1.46, 255.87 -0.77, 470.65 0 M470.65 0 C490.84 0.3, 501.49 10.85, 502.65 32 M470.65 0 C490.49 -0.8, 501.27 12.53, 502.65 32 M502.65 32 C503.18 108.57, 503.05 183.86, 502.65 288.37 M502.65 32 C504.42 92.08, 504.18 151.87, 502.65 288.37 M502.65 288.37 C502 310.96, 491.76 318.51, 470.65 320.37 M502.65 288.37 C503.45 308.67, 490.37 322.6, 470.65 320.37 M470.65 320.37 C375.65 322.02, 280.14 321.12, 32 320.37 M470.65 320.37 C306.72 322.92, 141.98 322.82, 32 320.37 M32 320.37 C10.15 320, -1.94 311.34, 0 288.37 M32 320.37 C9.66 321.7, -0.81 311.85, 0 288.37 M0 288.37 C0.32 215.73, -0.67 146.35, 0 32 M0 288.37 C1.29 216.38, 2.32 145.16, 0 32 M0 32 C1.66 9.64, 9.88 1.08, 32 0 M0 32 C-1.57 9.24, 11.41 1.82, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g mask="url(#mask-h1iwT1ODaLhR7MasmSn26)" stroke-linecap="round"><g transform="translate(5604.977108854855 7500.7668646937655) rotate(0 196.6808116748789 146.62067460141589)"><path d="M0.75 0.19 C66.31 49.01, 327.98 245.17, 393.67 293.99 M-0.31 -0.75 C65.02 48.22, 326.71 242.99, 392.51 292.15" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(5604.977108854855 7500.7668646937655) rotate(0 196.6808116748789 146.62067460141589)"><path d="M368.57 284.96 C376.87 286.53, 385.36 290.9, 392.51 292.15 M368.57 284.96 C375.45 287.62, 382.16 289.35, 392.51 292.15" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(5604.977108854855 7500.7668646937655) rotate(0 196.6808116748789 146.62067460141589)"><path d="M378.79 271.25 C383.84 277.41, 388.95 286.31, 392.51 292.15 M378.79 271.25 C382.77 277.69, 386.71 283.14, 392.51 292.15" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask id="mask-h1iwT1ODaLhR7MasmSn26"><rect x="0" y="0" fill="#fff" width="6099.043383220973" height="7894.217424617339"></rect><rect x="5729.21858191438" y="7622.492144655549" fill="#000" width="145.5833282470703" height="50" opacity="1"></rect></mask><g transform="translate(5729.218581914379 7622.49214465555) rotate(0 72.43933861535425 24.895394639630467)"><text x="72.79166412353516" y="17.619999999999997" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">/fare/estimate</text><text x="72.79166412353516" y="42.62" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">(async)</text></g><g mask="url(#mask-pDciWsXzOzwn0n65e1DqP)" stroke-linecap="round"><g transform="translate(5592.3948187206115 7569.589763377946) rotate(0 203.63680555483825 300.47529656136066)"><path d="M-1.14 -0.47 C66.38 99.87, 338.14 500.98, 406.12 601.49 M0.46 -1.76 C68.28 98.77, 340.85 502.33, 408.42 602.71" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(5592.3948187206115 7569.589763377946) rotate(0 203.63680555483825 300.47529656136066)"><path d="M388.19 588.02 C395.04 592.49, 402.53 599.1, 408.42 602.71 M388.19 588.02 C395.31 592.13, 402.51 598.14, 408.42 602.71" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(5592.3948187206115 7569.589763377946) rotate(0 203.63680555483825 300.47529656136066)"><path d="M402.37 578.46 C403.78 586.43, 405.88 596.68, 408.42 602.71 M402.37 578.46 C404.58 585.82, 406.91 595.11, 408.42 602.71" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask id="mask-pDciWsXzOzwn0n65e1DqP"><rect x="0" y="0" fill="#fff" width="6099.302303424756" height="8271.665543913039"></rect><rect x="5760.631893897389" y="7845.627653645492" fill="#000" width="70.43333435058594" height="50" opacity="1"></rect></mask><g transform="translate(5760.631893897389 7845.627653645491) rotate(0 35.39973037806067 24.437406293815002)"><text x="35.21666717529297" y="17.619999999999997" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">ETAs</text><text x="35.21666717529297" y="42.62" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">(async)</text></g><g mask="url(#mask-vFvMieqTctkGujou8ZqM0)" stroke-linecap="round"><g transform="translate(4574.128110079633 7374.560994489853) rotate(0 191.69214187379794 -84.06355041825736)"><path d="M0.05 -0.8 C64.36 -28.77, 320.74 -139.84, 384.77 -167.98 M-1.38 1.39 C62.88 -26.86, 319.81 -141.18, 383.92 -169.52" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(4574.128110079633 7374.560994489853) rotate(0 191.69214187379794 -84.06355041825736)"><path d="M365.91 -152.17 C368.4 -155.51, 375.39 -160.07, 383.92 -169.52 M365.91 -152.17 C369.63 -157.26, 375.36 -160.43, 383.92 -169.52" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(4574.128110079633 7374.560994489853) rotate(0 191.69214187379794 -84.06355041825736)"><path d="M358.98 -167.81 C362.9 -167.85, 371.35 -169.12, 383.92 -169.52 M358.98 -167.81 C364.31 -168.99, 371.8 -168.2, 383.92 -169.52" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask id="mask-vFvMieqTctkGujou8ZqM0"><rect x="0" y="0" fill="#fff" width="5058.699085554039" height="7643.65478444703"></rect><rect x="4713.505264992128" y="7265.014099511265" fill="#000" width="105.81666564941406" height="50" opacity="1"></rect></mask><g transform="translate(4713.505264992129 7265.014099511265) rotate(0 52.31498696130302 25.483344560330806)"><text x="52.90833282470703" y="17.619999999999997" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">isPending()</text><text x="52.90833282470703" y="42.62" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">sync</text></g><g stroke-linecap="round" transform="translate(3745.3414727937156 6916.569794931502) rotate(0 1306.077983308669 755.8168437604145)"><path d="M32 0 C554 -2.02, 1074.72 -1.27, 2580.16 0 M32 0 C738.62 8.83, 1446.3 8.48, 2580.16 0 M2580.16 0 C2601.25 -0.31, 2612.67 10.09, 2612.16 32 M2580.16 0 C2602.97 -1.66, 2613.49 11.47, 2612.16 32 M2612.16 32 C2616.81 525.21, 2617.05 1020.44, 2612.16 1479.63 M2612.16 32 C2612.64 519.15, 2612.66 1006.61, 2612.16 1479.63 M2612.16 1479.63 C2612.86 1500.43, 2600.39 1512.78, 2580.16 1511.63 M2612.16 1479.63 C2612.51 1499.36, 2603.64 1511.13, 2580.16 1511.63 M2580.16 1511.63 C2048.64 1519.4, 1515.86 1519.48, 32 1511.63 M2580.16 1511.63 C2029.79 1521.71, 1478.86 1522.05, 32 1511.63 M32 1511.63 C9.05 1513.35, 0.25 1501.27, 0 1479.63 M32 1511.63 C11.98 1512.11, -0.13 1503.14, 0 1479.63 M0 1479.63 C-3.53 977.76, -3.32 475.5, 0 32 M0 1479.63 C5.41 1048.2, 6.07 616.68, 0 32 M0 32 C-0.29 9.26, 9.02 0.17, 32 0 M0 32 C0.53 8.81, 9.21 1.41, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(5269.863632680737 8332.984175888969) rotate(0 88.20833587646484 17.5)"><text x="0" y="24.668" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="28px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Landing Page</text></g><g stroke-linecap="round" transform="translate(4893.937746166588 7379.523158498994) rotate(0 190.5068825856565 156.93738785690675)"><path d="M32 0 C154.29 1.85, 279.38 2.24, 349.01 0 M32 0 C151.65 2.08, 269.52 1.39, 349.01 0 M349.01 0 C372.25 -1.03, 382.76 10.28, 381.01 32 M349.01 0 C372.26 0.03, 379.7 10.32, 381.01 32 M381.01 32 C380.02 107.7, 378.51 186.92, 381.01 281.87 M381.01 32 C381.08 131.19, 381.17 229.91, 381.01 281.87 M381.01 281.87 C379.64 304.09, 371.77 314.64, 349.01 313.87 M381.01 281.87 C379.71 302.54, 368.08 314.39, 349.01 313.87 M349.01 313.87 C261.5 316.71, 170.89 314.8, 32 313.87 M349.01 313.87 C224.49 311.14, 101.29 311.98, 32 313.87 M32 313.87 C9.09 313.74, -0.47 302.03, 0 281.87 M32 313.87 C8.92 314.93, 0.25 305.39, 0 281.87 M0 281.87 C-0.83 215.54, -1 148.28, 0 32 M0 281.87 C-2.08 226.14, -1.95 168.96, 0 32 M0 32 C0.57 12.38, 8.9 -1.3, 32 0 M0 32 C1.77 11.32, 12.19 -0.92, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(4984.6112928757775 7518.9605463559) rotate(0 99.83333587646484 17.5)"><text x="99.83333587646484" y="24.668" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="28px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Queuer Service</text></g><g stroke-linecap="round"><g transform="translate(4576.072095418664 7500.248045289596) rotate(0 155.87767261168983 -4.242700087206686)"><path d="M-0.87 -0.42 C51.05 -1.45, 260.26 -5.23, 312.62 -6.17 M0.88 -1.68 C52.52 -3.08, 259.59 -7, 311.57 -8.07" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(4576.072095418664 7500.248045289596) rotate(0 155.87767261168983 -4.242700087206686)"><path d="M288.25 0.95 C296.7 -2.77, 307.25 -5.19, 311.57 -8.07 M288.25 0.95 C295.88 -1.66, 305.2 -4.25, 311.57 -8.07" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(4576.072095418664 7500.248045289596) rotate(0 155.87767261168983 -4.242700087206686)"><path d="M287.91 -16.15 C296.49 -13.15, 307.18 -8.87, 311.57 -8.07 M287.91 -16.15 C295.81 -12.85, 305.26 -9.55, 311.57 -8.07" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask></mask><g mask="url(#mask-rpeYUWBKpG6estRq-jOgb)" stroke-linecap="round"><g transform="translate(4882.937746166588 7609.346168344686) rotate(0 -157.3880963542606 1.8955781016602486)"><path d="M0.97 0.41 C-51.79 1.04, -263.17 2.35, -315.75 2.95 M0.02 -0.42 C-52.45 0.44, -261.09 3.81, -313.63 4.21" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(4882.937746166588 7609.346168344686) rotate(0 -157.3880963542606 1.8955781016602486)"><path d="M-290.24 -4.63 C-298.19 -3.08, -308.33 2.25, -313.63 4.21 M-290.24 -4.63 C-298.01 -2.54, -306.7 1.4, -313.63 4.21" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(4882.937746166588 7609.346168344686) rotate(0 -157.3880963542606 1.8955781016602486)"><path d="M-290.03 12.47 C-297.94 7.76, -308.16 6.82, -313.63 4.21 M-290.03 12.47 C-298.01 8.67, -306.77 6.71, -313.63 4.21" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask id="mask-rpeYUWBKpG6estRq-jOgb"><rect x="0" y="0" fill="#fff" width="5297.561845035464" height="7712.831146863807"></rect><rect x="4667.834028793918" y="7558.588657604243" fill="#000" width="115.58333587646484" height="105" opacity="1"></rect></mask><g transform="translate(4667.834028793919 7558.588657604245) rotate(0 57.715621018409365 52.65308884210117)"><text x="57.79166793823242" y="24.668" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="28px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">return</text><text x="57.79166793823242" y="59.668" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="28px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">polling</text><text x="57.79166793823242" y="94.668" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="28px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">endpoint</text></g><g transform="translate(4658.951283065335 7434.912824801431) rotate(0 71.05000305175781 17.5)"><text x="0" y="24.668" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="28px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">emit event</text></g><g stroke-linecap="round" transform="translate(5345.447450268277 7382.880107971869) rotate(0 122.52865575993792 108.26162050021867)"><path d="M32 0 C78.61 1.87, 121.82 2.98, 213.06 0 M32 0 C88.79 -0.12, 144.64 0.32, 213.06 0 M213.06 0 C235.6 -0.13, 246.54 9.14, 245.06 32 M213.06 0 C234.55 2.13, 245.91 11.98, 245.06 32 M245.06 32 C246.65 80.05, 244.06 130.36, 245.06 184.52 M245.06 32 C244.2 82.92, 245.64 134.31, 245.06 184.52 M245.06 184.52 C246.2 206.97, 234.7 217.99, 213.06 216.52 M245.06 184.52 C243.38 207.54, 235.89 216.94, 213.06 216.52 M213.06 216.52 C163.5 214.57, 111.04 214.4, 32 216.52 M213.06 216.52 C169 217.78, 125.33 218.45, 32 216.52 M32 216.52 C10.96 216.63, 1.08 206.51, 0 184.52 M32 216.52 C8.66 217.8, -0.98 206.81, 0 184.52 M0 184.52 C1.73 135.14, -0.82 81.53, 0 32 M0 184.52 C-0.38 132.69, -0.15 81.32, 0 32 M0 32 C-0.93 10.16, 9.76 1.83, 32 0 M0 32 C1.65 12.61, 9.88 -1.66, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g stroke-linecap="round" transform="translate(5355.447450268277 7392.880107971869) rotate(0 122.52865575993792 108.26162050021867)"><path d="M32 0 C84.9 1.11, 134.89 0.94, 213.06 0 M32 0 C74.77 -2.12, 117.92 -1.45, 213.06 0 M213.06 0 C234.68 0.11, 246.14 11.32, 245.06 32 M213.06 0 C232.39 1.28, 244.08 11.62, 245.06 32 M245.06 32 C246.11 84.8, 243.55 133.38, 245.06 184.52 M245.06 32 C246.79 83.15, 247.02 134.77, 245.06 184.52 M245.06 184.52 C244.13 205.35, 233.48 218.35, 213.06 216.52 M245.06 184.52 C246.71 207.8, 233.6 214.87, 213.06 216.52 M213.06 216.52 C162.05 213.71, 112.46 214.2, 32 216.52 M213.06 216.52 C167.6 214.92, 122.17 215.49, 32 216.52 M32 216.52 C12.19 216.83, 1.24 206.99, 0 184.52 M32 216.52 C12.81 214.77, -1.77 205.81, 0 184.52 M0 184.52 C-1.54 140.06, -2.23 96.14, 0 32 M0 184.52 C0.43 134.78, 1.91 83.97, 0 32 M0 32 C-0.71 12.61, 8.75 1.09, 32 0 M0 32 C1.1 11.97, 11.67 2.08, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g stroke-linecap="round" transform="translate(5365.447450268277 7402.880107971869) rotate(0 122.52865575993792 108.26162050021867)"><path d="M32 0 C101.41 1.25, 174.74 0.89, 213.06 0 M32 0 C96.66 1.15, 160.63 1.93, 213.06 0 M213.06 0 C233.94 1.49, 246.45 12.38, 245.06 32 M213.06 0 C233.05 -0.93, 245.92 12.26, 245.06 32 M245.06 32 C247.9 80.19, 245.16 128.73, 245.06 184.52 M245.06 32 C247.3 70.48, 245.73 109.41, 245.06 184.52 M245.06 184.52 C245.36 204.43, 233.56 215.01, 213.06 216.52 M245.06 184.52 C244.77 204.67, 233.3 218.08, 213.06 216.52 M213.06 216.52 C174.15 216.95, 134.29 216.49, 32 216.52 M213.06 216.52 C146.71 217.44, 81.86 218.07, 32 216.52 M32 216.52 C12.23 216.5, -0.35 205.03, 0 184.52 M32 216.52 C9.47 215.25, 0.69 203.93, 0 184.52 M0 184.52 C2.56 153.77, 0.59 124.33, 0 32 M0 184.52 C-0.27 153.85, 0.07 122.5, 0 32 M0 32 C-0.78 10.4, 12.53 0.7, 32 0 M0 32 C-1.6 9.24, 9.15 -1.18, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(5398.517770151748 7493.641728472088) rotate(0 89.4583358764653 17.5)"><text x="89.45833587646484" y="24.668" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="28px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Aggr Workers</text></g><g stroke-linecap="round"><g transform="translate(5273.273036601464 7486.945541630994) rotate(0 37.55445060023294 -0.5310763717816371)"><path d="M0.52 1.08 C13.06 0.61, 63.3 -1.87, 75.77 -2.15 M-0.66 0.61 C11.68 0.24, 62.42 -0.37, 74.95 -0.85" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(5273.273036601464 7486.945541630994) rotate(0 37.55445060023294 -0.5310763717816371)"><path d="M51.66 8.25 C61.52 5.38, 67.03 1.55, 74.95 -0.85 M51.66 8.25 C60.17 4.17, 69.43 1.1, 74.95 -0.85" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(5273.273036601464 7486.945541630994) rotate(0 37.55445060023294 -0.5310763717816371)"><path d="M51.26 -8.85 C61.35 -5.77, 67.01 -3.66, 74.95 -0.85 M51.26 -8.85 C59.98 -6.2, 69.41 -2.55, 74.95 -0.85" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask></mask><g stroke-linecap="round" transform="translate(2212.601129730541 664.9823149813433) rotate(0 352.619816240378 148.9942885522721)"><path d="M32 0 C251.49 -0.58, 472.64 -0.6, 673.24 0 M32 0 C257.9 1.6, 483.97 1.39, 673.24 0 M673.24 0 C693.39 1.61, 706.01 11.11, 705.24 32 M673.24 0 C692.4 2.08, 703.6 11, 705.24 32 M705.24 32 C704.48 83.68, 705.75 132.07, 705.24 265.99 M705.24 32 C706.05 121.53, 705.44 210.82, 705.24 265.99 M705.24 265.99 C704.57 288.59, 692.63 299.7, 673.24 297.99 M705.24 265.99 C707.45 285.46, 693.18 297.68, 673.24 297.99 M673.24 297.99 C451.5 298.94, 231.33 298.54, 32 297.99 M673.24 297.99 C424.67 295.55, 175.88 295.38, 32 297.99 M32 297.99 C11.75 299.05, -1.32 288.16, 0 265.99 M32 297.99 C11.28 297.03, -1.58 285.44, 0 265.99 M0 265.99 C2.26 180.09, 2.26 92.98, 0 32 M0 265.99 C0.9 204.57, 2.16 144.91, 0 32 M0 32 C-1.37 9.04, 10.96 -1.89, 32 0 M0 32 C-1.48 9.89, 12.96 -2.04, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(2540.720945970919 796.4766035336152) rotate(0 24.5 17.5)"><text x="24.5" y="24.668" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="28px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">App</text></g><g stroke-linecap="round" transform="translate(1735.8194063632704 1125.2091173983617) rotate(0 859.2003973181036 87.74108103633785)"><path d="M32 0 C382.32 -2.91, 731.36 -2.35, 1686.4 0 M32 0 C462.11 -5.16, 892.5 -5.15, 1686.4 0 M1686.4 0 C1707.45 0.85, 1716.67 9.59, 1718.4 32 M1686.4 0 C1709.38 -0.45, 1720.29 9.71, 1718.4 32 M1718.4 32 C1719.09 72.34, 1716.42 108.64, 1718.4 143.48 M1718.4 32 C1717.83 65.58, 1718.16 97.44, 1718.4 143.48 M1718.4 143.48 C1717.77 163.86, 1709.13 176.45, 1686.4 175.48 M1718.4 143.48 C1716.48 165.7, 1708.33 174.1, 1686.4 175.48 M1686.4 175.48 C1198.9 168.27, 710.52 169.43, 32 175.48 M1686.4 175.48 C1052.22 180.56, 418.4 180.43, 32 175.48 M32 175.48 C12.6 174.33, 0.03 164.03, 0 143.48 M32 175.48 C10.65 173.27, -2.3 164.72, 0 143.48 M0 143.48 C-0.53 109.36, 0.94 77.22, 0 32 M0 143.48 C0.8 110.25, 0.05 76.88, 0 32 M0 32 C0.45 10.96, 8.76 0.81, 32 0 M0 32 C1.35 12.75, 10.37 -0.09, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(2519.153134980202 1167.9501984346994) rotate(0 75.86666870117188 45)"><text x="75.86666870117188" y="31.716" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="36px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic"></text><text x="75.86666870117188" y="76.71600000000001" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="36px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Gateway</text></g><g stroke-linecap="round" transform="translate(1358.2430327203006 3139.177755833187) rotate(0 256.6012747289137 170.51568578760043)"><path d="M32 0 C156.57 1.59, 283.32 2.26, 481.2 0 M32 0 C123.52 -1.21, 215.43 -1.73, 481.2 0 M481.2 0 C500.83 1.19, 514.42 9.79, 513.2 32 M481.2 0 C504.23 -0.49, 513.49 8.41, 513.2 32 M513.2 32 C512.12 120.61, 509.94 210.18, 513.2 309.03 M513.2 32 C513.77 100.66, 513.21 167.8, 513.2 309.03 M513.2 309.03 C514.91 330.9, 503.88 340.99, 481.2 341.03 M513.2 309.03 C514.2 331.4, 501.81 339.85, 481.2 341.03 M481.2 341.03 C311.36 342.79, 143.47 343.57, 32 341.03 M481.2 341.03 C347.04 340.2, 211.97 339.88, 32 341.03 M32 341.03 C10.11 342.73, -0.86 328.81, 0 309.03 M32 341.03 C12.89 342.28, 0.86 331.92, 0 309.03 M0 309.03 C0.38 250.56, -0.14 193.38, 0 32 M0 309.03 C1.87 246.04, 1.16 182.32, 0 32 M0 32 C-1.2 9.14, 11.46 -0.5, 32 0 M0 32 C1.94 10.85, 11.02 0.38, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(1475.2443013456982 3219.693441620788) rotate(0 139.60000610351562 90)"><text x="139.60000610351562" y="31.716" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="36px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Redis Cluster</text><text x="139.60000610351562" y="76.71600000000001" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="36px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic"></text><text x="139.60000610351562" y="121.71600000000001" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="36px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">driver:cell:cellID</text><text x="139.60000610351562" y="166.716" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="36px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">supply:cell:cellID</text></g><g stroke-linecap="round" transform="translate(3561.022833612026 3124.8200900715237) rotate(0 256.6012747289137 170.51568578760043)"><path d="M32 0 C176.99 0.87, 320.95 -0.12, 481.2 0 M32 0 C190.88 1.88, 348.71 2, 481.2 0 M481.2 0 C501.83 1.82, 512.66 11.62, 513.2 32 M481.2 0 C502.75 1.3, 512.26 12.19, 513.2 32 M513.2 32 C513.9 111.15, 515.41 192.17, 513.2 309.03 M513.2 32 C514.84 105.88, 514.42 178.94, 513.2 309.03 M513.2 309.03 C513.97 328.62, 503.26 340.08, 481.2 341.03 M513.2 309.03 C514.7 328.5, 500.34 340.3, 481.2 341.03 M481.2 341.03 C340.35 340.49, 199.38 339.45, 32 341.03 M481.2 341.03 C365.35 341.61, 249.2 341.41, 32 341.03 M32 341.03 C11.59 340.93, 0.52 332.06, 0 309.03 M32 341.03 C12.32 342.05, 1.3 331.21, 0 309.03 M0 309.03 C0.02 244.23, -2.33 181.03, 0 32 M0 309.03 C-1.97 220.49, -1.9 130.64, 0 32 M0 32 C0.55 9.71, 9.19 0.28, 32 0 M0 32 C-1 9.73, 12.62 -1.04, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(3650.0157709385953 3205.3357758591237) rotate(0 167.60833740234375 90)"><text x="167.60833740234375" y="31.716" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="36px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Redis Cluster</text><text x="167.60833740234375" y="76.71600000000001" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="36px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic"></text><text x="167.60833740234375" y="121.71600000000001" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="36px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic"></text><text x="167.60833740234375" y="166.716" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="36px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">cellindexes: polygon</text></g><g stroke-linecap="round" transform="translate(4235.188554130278 3100.2915969558953) rotate(0 256.60127472891327 170.51568578760043)"><path d="M32 0 C168.82 -1.74, 304.69 -1.96, 481.2 0 M32 0 C126.3 1.09, 220.8 0.88, 481.2 0 M481.2 0 C502.84 1.49, 513.44 9.3, 513.2 32 M481.2 0 C501.84 1.4, 511.31 9.93, 513.2 32 M513.2 32 C513.19 105.6, 514.15 179.4, 513.2 309.03 M513.2 32 C513.46 99.4, 512.74 165.74, 513.2 309.03 M513.2 309.03 C513.11 332.16, 501.56 341.93, 481.2 341.03 M513.2 309.03 C514.4 331.88, 503.03 342.52, 481.2 341.03 M481.2 341.03 C317.52 342.2, 154.37 343.09, 32 341.03 M481.2 341.03 C378.19 340.02, 275.82 339.78, 32 341.03 M32 341.03 C9.5 342.28, 0.85 330.14, 0 309.03 M32 341.03 C8.47 342.03, -1.27 329.07, 0 309.03 M0 309.03 C0.18 207.97, -0.82 110.39, 0 32 M0 309.03 C-0.93 219.32, -1.22 128.16, 0 32 M0 32 C0.48 10.17, 10.67 -1.96, 32 0 M0 32 C-0.35 12.68, 12.7 1.3, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(4374.056499086242 3180.8072827434953) rotate(0 117.73332977294922 90)"><text x="117.73332977294922" y="31.716" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="36px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Redis Cluster</text><text x="117.73332977294922" y="76.71600000000001" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="36px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic"></text><text x="117.73332977294922" y="121.71600000000001" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="36px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic"></text><text x="117.73332977294922" y="166.716" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="36px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">surge pricings</text></g><g stroke-linecap="round" transform="translate(2806.302205269873 2672.9787135648858) rotate(0 256.6012747289137 170.51568578760043)"><path d="M32 0 C165.49 -1.48, 300.34 -1.87, 481.2 0 M32 0 C205.36 0.56, 377.86 0.64, 481.2 0 M481.2 0 C501.59 1.65, 514.01 10.18, 513.2 32 M481.2 0 C501.94 -0.63, 515.16 9.68, 513.2 32 M513.2 32 C515.84 94.66, 513.86 154.74, 513.2 309.03 M513.2 32 C512.36 93.38, 512.23 153.94, 513.2 309.03 M513.2 309.03 C513.41 330.72, 504.29 339.54, 481.2 341.03 M513.2 309.03 C515.04 328.98, 500.78 341.94, 481.2 341.03 M481.2 341.03 C357.83 341.37, 234.7 341.32, 32 341.03 M481.2 341.03 C387.28 340.47, 293.89 340.11, 32 341.03 M32 341.03 C9.79 340.28, -1.59 331.91, 0 309.03 M32 341.03 C9.23 339.5, -1.15 330.43, 0 309.03 M0 309.03 C0.37 249.36, -0.29 188.58, 0 32 M0 309.03 C-2.11 250.92, -0.85 192.94, 0 32 M0 32 C0.94 9.78, 9.74 0.28, 32 0 M0 32 C-1.88 12.5, 12.74 -1.88, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(3017.3118128234933 2820.9943993524857) rotate(0 45.59166717529297 22.5)"><text x="45.59166717529297" y="31.716" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="36px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Trips</text></g><g stroke-linecap="round" transform="translate(3544.722747033465 2679.471606367505) rotate(0 256.60127472891327 170.51568578760043)"><path d="M32 0 C148.53 -1.1, 264.34 -1.88, 481.2 0 M32 0 C166.33 1.32, 299.72 1.21, 481.2 0 M481.2 0 C502.33 -1.66, 514.91 9.35, 513.2 32 M481.2 0 C501.93 2.13, 515.11 12.91, 513.2 32 M513.2 32 C514.19 94.61, 513.66 155.09, 513.2 309.03 M513.2 32 C514.28 101.44, 513.41 171.51, 513.2 309.03 M513.2 309.03 C512.77 331.91, 502.06 340.01, 481.2 341.03 M513.2 309.03 C512.09 329.34, 503.14 341.22, 481.2 341.03 M481.2 341.03 C344.48 341.27, 208.3 340.51, 32 341.03 M481.2 341.03 C357.37 340.57, 233.38 340.99, 32 341.03 M32 341.03 C8.94 339.3, 0.02 328.62, 0 309.03 M32 341.03 C12.52 338.94, -0.69 330.82, 0 309.03 M0 309.03 C-0.36 236.61, -1.1 161.73, 0 32 M0 309.03 C0.18 217.81, 0.42 125.99, 0 32 M0 32 C-0.67 10.85, 12.12 -0.71, 32 0 M0 32 C0.44 11.78, 8.72 -0.37, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(3695.9823545870854 2827.487292155105) rotate(0 105.34166717529297 22.5)"><text x="105.34166717529297" y="31.716" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="36px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Maps + ETA</text></g><g stroke-linecap="round" transform="translate(669.958198611339 3118.5555781007724) rotate(0 256.6012747289135 170.51568578760043)"><path d="M32 0 C194.32 0.23, 357.05 -0.05, 481.2 0 M32 0 C208.72 1.53, 386.3 1.97, 481.2 0 M481.2 0 C503.57 -1.36, 514.41 11.78, 513.2 32 M481.2 0 C503.39 -2.05, 513.5 12.56, 513.2 32 M513.2 32 C512.75 124.2, 513.41 218.43, 513.2 309.03 M513.2 32 C513.91 135.23, 513.92 238.78, 513.2 309.03 M513.2 309.03 C514.11 331.33, 504.22 340.95, 481.2 341.03 M513.2 309.03 C514.59 329.86, 502.76 342.72, 481.2 341.03 M481.2 341.03 C350.9 342.1, 222.49 341.98, 32 341.03 M481.2 341.03 C342.99 343.44, 204.73 343.04, 32 341.03 M32 341.03 C12.15 340.57, -1.18 331.19, 0 309.03 M32 341.03 C10.26 342.74, 0.94 331.5, 0 309.03 M0 309.03 C-1.65 232.38, -0.92 154.2, 0 32 M0 309.03 C-0.83 209.36, 0.42 110.09, 0 32 M0 32 C1.9 11.81, 9.56 1.49, 32 0 M0 32 C1.7 11.28, 9.13 -0.46, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(826.2928031132019 3266.5712638883724) rotate(0 100.26667022705078 22.5)"><text x="100.26667022705078" y="31.716" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="36px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Recon Jobs</text></g><g stroke-linecap="round" transform="translate(4214.826291891055 2675.253991555188) rotate(0 256.6012747289137 170.51568578760043)"><path d="M32 0 C156.09 0.28, 279.21 -0.45, 481.2 0 M32 0 C131.28 1.1, 229.48 0.99, 481.2 0 M481.2 0 C503.88 0.71, 512.44 10.48, 513.2 32 M481.2 0 C501.36 0.34, 514.38 8.82, 513.2 32 M513.2 32 C510.48 108.92, 510.57 181.52, 513.2 309.03 M513.2 32 C512.25 126.69, 511.96 220.67, 513.2 309.03 M513.2 309.03 C511.65 331.95, 504.09 339.83, 481.2 341.03 M513.2 309.03 C514.16 331.09, 500.93 340.4, 481.2 341.03 M481.2 341.03 C372.71 339.27, 264.38 340.96, 32 341.03 M481.2 341.03 C324.67 340.42, 168.22 340.27, 32 341.03 M32 341.03 C12.37 341.85, -1.36 329.09, 0 309.03 M32 341.03 C9.15 343.18, -2.27 328.93, 0 309.03 M0 309.03 C3.08 245.18, 0.57 185, 0 32 M0 309.03 C-1.41 246.76, -1.18 185.72, 0 32 M0 32 C0.16 9.11, 9.06 -1.26, 32 0 M0 32 C-0.8 8.7, 11.78 1.94, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(4413.769233795261 2823.269677342789) rotate(0 57.65833282470703 22.5)"><text x="57.65833282470703" y="31.716" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="36px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Pricing</text></g><g stroke-linecap="round" transform="translate(3273.89557695768 1504.0735638246215) rotate(0 256.60127472891327 170.51568578760043)"><path d="M32 0 C150.98 -2.45, 270.46 -0.78, 481.2 0 M32 0 C211.15 0.41, 389.98 0.34, 481.2 0 M481.2 0 C503.84 0.78, 514.92 10.37, 513.2 32 M481.2 0 C500.83 -1.68, 512.09 11.39, 513.2 32 M513.2 32 C516.55 118.4, 516.41 205.3, 513.2 309.03 M513.2 32 C512.17 88.67, 512.2 144.28, 513.2 309.03 M513.2 309.03 C513.16 328.66, 502.14 340.04, 481.2 341.03 M513.2 309.03 C515.01 331.79, 501.47 341.59, 481.2 341.03 M481.2 341.03 C371.38 343.3, 260.17 343.35, 32 341.03 M481.2 341.03 C380.12 341.24, 279.57 341.12, 32 341.03 M32 341.03 C8.95 342.26, 1.63 330.8, 0 309.03 M32 341.03 C12.83 341.21, -2.19 330.38, 0 309.03 M0 309.03 C0.36 241.3, -1.43 171.77, 0 32 M0 309.03 C-0.21 251.31, -0.76 194.34, 0 32 M0 32 C-0.07 11.66, 9.01 -1.48, 32 0 M0 32 C0.97 11.74, 11.11 -0.02, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(3402.1218516865933 1652.0892496122224) rotate(0 128.375 22.5)"><text x="128.375" y="31.716" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="36px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Queuer Service</text></g><g stroke-linecap="round" transform="translate(5120.6536988725 1472.618953434183) rotate(0 256.60127472891327 170.51568578760043)"><path d="M32 0 C138.89 -1.41, 247.48 -0.42, 481.2 0 M32 0 C139.62 0.23, 247.55 -0.35, 481.2 0 M481.2 0 C503.45 -1.58, 511.79 12.22, 513.2 32 M481.2 0 C503.34 1.7, 514.78 11.13, 513.2 32 M513.2 32 C511.35 103.56, 512.4 173.63, 513.2 309.03 M513.2 32 C512.66 100.63, 513.14 168.17, 513.2 309.03 M513.2 309.03 C513.26 330.23, 503.23 341.89, 481.2 341.03 M513.2 309.03 C515.1 330.61, 503.86 338.74, 481.2 341.03 M481.2 341.03 C306.26 339.05, 129.61 338.85, 32 341.03 M481.2 341.03 C347.69 341.18, 213.98 340.56, 32 341.03 M32 341.03 C12.02 342.38, -1.58 330.93, 0 309.03 M32 341.03 C11.86 341.41, -0.49 328.76, 0 309.03 M0 309.03 C0.03 215.13, 1.37 122.28, 0 32 M0 309.03 C0.21 216.85, 0.09 126.26, 0 32 M0 32 C0.45 11.83, 9.19 1.83, 32 0 M0 32 C0.88 12.81, 12.59 1.26, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(5221.096633147312 1620.634639221783) rotate(0 156.15834045410156 22.5)"><text x="156.15834045410156" y="31.716" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="36px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Logging &amp; Metrics</text></g><g stroke-linecap="round" transform="translate(5121.087250320861 2142.7039034973213) rotate(0 256.60127472891327 170.51568578760043)"><path d="M32 0 C151.94 0.85, 269.69 1.77, 481.2 0 M32 0 C174.5 1.49, 316.42 0.89, 481.2 0 M481.2 0 C500.58 1.03, 512.16 11.06, 513.2 32 M481.2 0 C502.84 1.49, 515.16 8.72, 513.2 32 M513.2 32 C512.09 107.97, 512.89 181.66, 513.2 309.03 M513.2 32 C513.75 112.38, 513.18 193.82, 513.2 309.03 M513.2 309.03 C511.4 329.9, 501.44 342.54, 481.2 341.03 M513.2 309.03 C515.2 328.88, 500.89 340.56, 481.2 341.03 M481.2 341.03 C308.63 341.22, 138.27 340.72, 32 341.03 M481.2 341.03 C307.65 341.7, 133.45 341.63, 32 341.03 M32 341.03 C11.28 342.2, -0.82 329.84, 0 309.03 M32 341.03 C9.52 340.27, 0.08 329.29, 0 309.03 M0 309.03 C1.14 243.53, 2.32 178.95, 0 32 M0 309.03 C-2.36 226.12, -1.99 142.75, 0 32 M0 32 C-0.18 10, 12.11 -1.41, 32 0 M0 32 C0.96 8.76, 8.47 -1.41, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(5247.771853296845 2290.7195892849213) rotate(0 129.9166717529297 22.5)"><text x="129.9166717529297" y="31.716" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="36px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Scaling Policies</text></g><g stroke-linecap="round" transform="translate(2127.7515885990683 2693.0457609947343) rotate(0 256.60127472891327 170.51568578760043)"><path d="M32 0 C203.47 0.26, 376.25 0.11, 481.2 0 M32 0 C132.09 -0.85, 231.38 -1.34, 481.2 0 M481.2 0 C500.96 -0.4, 512.5 9.6, 513.2 32 M481.2 0 C502.84 -1.61, 511.34 10.91, 513.2 32 M513.2 32 C516.31 119.08, 513.9 208.63, 513.2 309.03 M513.2 32 C515.12 108.3, 515.43 184.44, 513.2 309.03 M513.2 309.03 C511.36 330.85, 501.7 339.11, 481.2 341.03 M513.2 309.03 C514.86 328.5, 502.47 340.02, 481.2 341.03 M481.2 341.03 C362.76 342.07, 245.04 342.74, 32 341.03 M481.2 341.03 C383.03 341.96, 284.27 341.96, 32 341.03 M32 341.03 C8.86 342.32, -0.44 328.47, 0 309.03 M32 341.03 C10.68 342.6, 0.43 331.45, 0 309.03 M0 309.03 C-0.27 239.49, 2.39 166.24, 0 32 M0 309.03 C0.37 215.53, 0.13 120.82, 0 32 M0 32 C-0.56 10.83, 10.93 0.27, 32 0 M0 32 C-1.59 10.62, 12.05 1.38, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(2266.1611976785675 2841.061446782335) rotate(0 118.19166564941406 22.5)"><text x="118.19166564941406" y="31.716" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="36px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Match Making</text></g><g stroke-linecap="round" transform="translate(1860.3563107772338 1517.1428598732691) rotate(0 256.6012747289137 170.51568578760043)"><path d="M32 0 C200.73 -1.94, 371.43 -1.16, 481.2 0 M32 0 C166.96 1.22, 301 0.9, 481.2 0 M481.2 0 C501.98 1.7, 512.35 9.12, 513.2 32 M481.2 0 C504.75 1.25, 514.07 12.22, 513.2 32 M513.2 32 C512.21 89.39, 511.69 148.06, 513.2 309.03 M513.2 32 C511.61 96.34, 510.9 159.94, 513.2 309.03 M513.2 309.03 C512 328.84, 503.32 340.53, 481.2 341.03 M513.2 309.03 C515.14 330.55, 502.89 341.41, 481.2 341.03 M481.2 341.03 C321.78 338.63, 160.95 339.73, 32 341.03 M481.2 341.03 C382.68 339.69, 284.89 339.77, 32 341.03 M32 341.03 C9.33 340.03, 0.06 328.75, 0 309.03 M32 341.03 C11.58 341.65, 1.81 332.01, 0 309.03 M0 309.03 C-0.54 215.51, -3 122.67, 0 32 M0 309.03 C-0.75 206.65, -0.29 104.36, 0 32 M0 32 C1.59 12.47, 9.03 0.77, 32 0 M0 32 C-0.52 9.49, 10.34 0.65, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(1996.4909183308541 1665.15854566087) rotate(0 120.46666717529297 22.5)"><text x="120.46666717529297" y="31.716" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="36px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Policy / Flags</text></g><g stroke-linecap="round" transform="translate(1026.0638837352972 1528.3250525511476) rotate(0 256.6012747289135 170.51568578760043)"><path d="M32 0 C206.95 -0.45, 380.99 0.4, 481.2 0 M32 0 C156.27 0.39, 279.34 1.07, 481.2 0 M481.2 0 C503.62 0.75, 514.55 8.85, 513.2 32 M481.2 0 C501.8 -1.81, 512.74 9.86, 513.2 32 M513.2 32 C512.23 100.46, 513.75 169.95, 513.2 309.03 M513.2 32 C514.32 94.78, 514.71 157.6, 513.2 309.03 M513.2 309.03 C513.37 330.67, 502.86 342.14, 481.2 341.03 M513.2 309.03 C513.47 328.25, 503.09 340.07, 481.2 341.03 M481.2 341.03 C389.54 338.84, 297.56 338.5, 32 341.03 M481.2 341.03 C311.49 339.59, 141.87 339.77, 32 341.03 M32 341.03 C11.2 342.61, 1.43 331.09, 0 309.03 M32 341.03 C12.32 338.96, 1.48 329.85, 0 309.03 M0 309.03 C0.28 252.94, -0.7 194.68, 0 32 M0 309.03 C2.45 221.41, 2.05 134.87, 0 32 M0 32 C-1.02 10.38, 11.23 -0.93, 32 0 M0 32 C-2.3 10.02, 10.85 0.3, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(1208.9984943406757 1676.3407383387475) rotate(0 73.66666412353516 22.5)"><text x="73.66666412353516" y="31.716" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="36px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Identity</text></g><g stroke-linecap="round" transform="translate(2694.648737819171 1498.0606410481141) rotate(0 256.6012747289137 170.51568578760043)"><path d="M32 0 C205.95 2.21, 378.39 2.34, 481.2 0 M32 0 C125.83 1.55, 219.6 1.78, 481.2 0 M481.2 0 C501.13 -1.62, 513.41 11.02, 513.2 32 M481.2 0 C504.55 -1.71, 515.04 9.28, 513.2 32 M513.2 32 C515.34 94.08, 514.28 156.16, 513.2 309.03 M513.2 32 C513.64 130.14, 512.71 229.49, 513.2 309.03 M513.2 309.03 C511.58 330.31, 501.65 340.28, 481.2 341.03 M513.2 309.03 C511.38 332.14, 501.1 339.5, 481.2 341.03 M481.2 341.03 C369.34 339.54, 257.46 339.97, 32 341.03 M481.2 341.03 C330.42 338.96, 178.56 339.07, 32 341.03 M32 341.03 C12.03 341.41, 0.94 329.47, 0 309.03 M32 341.03 C9.6 341.35, -1.88 332.19, 0 309.03 M0 309.03 C1.4 200.13, 1.53 93.23, 0 32 M0 309.03 C2.2 238.86, 2.24 167.96, 0 32 M0 32 C-0.04 11.87, 11.87 0.35, 32 0 M0 32 C-1.87 8.37, 8.59 1.99, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(2868.708348424549 1646.076326835715) rotate(0 82.54166412353516 22.5)"><text x="82.54166412353516" y="31.716" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="36px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Payments</text></g><g stroke-linecap="round" transform="translate(1363.048335557101 2706.4237926146343) rotate(0 256.60127472891327 170.51568578760043)"><path d="M32 0 C183.3 1.22, 335.02 1.64, 481.2 0 M32 0 C142.35 1.58, 253.57 1.95, 481.2 0 M481.2 0 C501.05 1.59, 512 9.14, 513.2 32 M481.2 0 C503.44 -0.58, 515.14 10.85, 513.2 32 M513.2 32 C513.73 117.95, 513.93 206.1, 513.2 309.03 M513.2 32 C514.72 88.17, 514.45 144.42, 513.2 309.03 M513.2 309.03 C514.75 329.12, 501.2 340.03, 481.2 341.03 M513.2 309.03 C513.27 328.51, 503.45 341.65, 481.2 341.03 M481.2 341.03 C311.72 340.95, 141.48 341.61, 32 341.03 M481.2 341.03 C389.16 342.75, 296.73 342.29, 32 341.03 M32 341.03 C10.95 339.39, 1.59 332.17, 0 309.03 M32 341.03 C8.78 341.91, -0.52 329.19, 0 309.03 M0 309.03 C-2.14 229.4, -0.48 150.84, 0 32 M0 309.03 C1.94 222.6, 1.61 134.61, 0 32 M0 32 C-2 8.86, 12.4 -0.2, 32 0 M0 32 C0.85 9.13, 12.8 -1.55, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(1505.7162759354283 2854.4394784022343) rotate(0 113.93333435058594 22.5)"><text x="113.93333435058594" y="31.716" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="36px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Driver Supply</text></g><g stroke-linecap="round" transform="translate(697.2434950712754 2708.3464439235686) rotate(0 256.6012747289135 170.51568578760043)"><path d="M32 0 C188.9 -0.76, 343.94 -1.52, 481.2 0 M32 0 C123.61 1.6, 215.27 1.72, 481.2 0 M481.2 0 C501.48 -0.85, 512.69 11.47, 513.2 32 M481.2 0 C500.74 0.96, 511.07 10.21, 513.2 32 M513.2 32 C515.69 95.88, 516.38 157.51, 513.2 309.03 M513.2 32 C511.6 93.5, 512.56 154.37, 513.2 309.03 M513.2 309.03 C514.89 329.89, 503.33 342.16, 481.2 341.03 M513.2 309.03 C514.66 332.35, 501.73 343.1, 481.2 341.03 M481.2 341.03 C330.52 342.62, 180.32 342.02, 32 341.03 M481.2 341.03 C351.05 343.38, 220.62 342.8, 32 341.03 M32 341.03 C10.54 339.08, 1.03 331.67, 0 309.03 M32 341.03 C9.66 342.8, 0.25 329.65, 0 309.03 M0 309.03 C0.35 224.76, -1.13 143.36, 0 32 M0 309.03 C-1.62 224.44, -1.35 138.32, 0 32 M0 32 C-1.84 11.79, 10.4 -1.15, 32 0 M0 32 C-1.82 11.75, 8.57 0.15, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(809.1197636966731 2833.8621297111695) rotate(0 144.72500610351562 45)"><text x="144.72500610351562" y="31.716" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="36px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">History/Invoices</text><text x="144.72500610351562" y="76.71600000000001" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="36px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">CMS</text></g><g stroke-linecap="round" transform="translate(2814.8779486069466 3120.8385924800396) rotate(0 256.60127472891327 170.51568578760043)"><path d="M32 0 C157.85 0.48, 282.66 1.26, 481.2 0 M32 0 C175.1 1.33, 317.05 1.81, 481.2 0 M481.2 0 C502.04 1.68, 513.37 10.97, 513.2 32 M481.2 0 C502.91 1.27, 513.47 8.55, 513.2 32 M513.2 32 C513.42 120.58, 512.27 210.98, 513.2 309.03 M513.2 32 C511.03 104.16, 511.12 177.37, 513.2 309.03 M513.2 309.03 C511.59 331.16, 503.07 342.61, 481.2 341.03 M513.2 309.03 C514.85 331.2, 504.19 338.96, 481.2 341.03 M481.2 341.03 C317.52 339.63, 154 339.42, 32 341.03 M481.2 341.03 C366.06 341.72, 252.15 340.94, 32 341.03 M32 341.03 C11.43 340.58, -1.02 330.08, 0 309.03 M32 341.03 C11.31 339.97, -2.3 329.72, 0 309.03 M0 309.03 C-1.35 223.69, 0.65 139.34, 0 32 M0 309.03 C1.05 221.74, 1.66 133.39, 0 32 M0 32 C-1.34 12.52, 9.32 1.52, 32 0 M0 32 C0 12.74, 9.9 -1.81, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g stroke-linecap="round" transform="translate(2103.750854920449 3143.025119462024) rotate(0 256.6012747289137 170.51568578760043)"><path d="M32 0 C131.2 -1.11, 229.47 -0.97, 481.2 0 M32 0 C132.87 0.58, 232.99 0.62, 481.2 0 M481.2 0 C503.64 0.23, 511.36 11.15, 513.2 32 M481.2 0 C501.58 -2.21, 514.86 8.8, 513.2 32 M513.2 32 C511.04 115.55, 511.3 195.68, 513.2 309.03 M513.2 32 C513.57 101.43, 513.87 171.01, 513.2 309.03 M513.2 309.03 C513.93 331.8, 500.73 342.32, 481.2 341.03 M513.2 309.03 C512.69 328.18, 502.55 342.6, 481.2 341.03 M481.2 341.03 C337.54 340.2, 193.99 340.83, 32 341.03 M481.2 341.03 C305.78 341.62, 130.51 342, 32 341.03 M32 341.03 C9.74 339.03, -0.56 330.52, 0 309.03 M32 341.03 C10.97 341.35, -1.59 330.32, 0 309.03 M0 309.03 C-2.54 207.68, -2.68 110.74, 0 32 M0 309.03 C-0.08 228.2, -0.21 148.41, 0 32 M0 32 C1.81 10, 9.09 1.62, 32 0 M0 32 C0.79 10.95, 10.16 1.08, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(2228.3104578964326 3201.040805249624) rotate(0 132.0416717529297 112.5)"><text x="132.0416717529297" y="31.716" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="36px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Redis Cluster</text><text x="132.0416717529297" y="76.71600000000001" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="36px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">(Offers, Locks)</text><text x="132.0416717529297" y="121.71600000000001" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="36px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic"></text><text x="132.0416717529297" y="166.716" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="36px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">offerr:{id}</text><text x="132.0416717529297" y="211.716" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="36px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">lock:driver:{id}</text></g><g stroke-linecap="round" transform="translate(1277.1470294981505 2084.4107950142925) rotate(0 1397.6716551855939 191.95133908910384)"><path d="M32 0 C829.14 6.65, 1627.35 6.21, 2763.34 0 M32 0 C732.77 0.96, 1433.78 0.9, 2763.34 0 M2763.34 0 C2786.15 1.71, 2796.88 10.02, 2795.34 32 M2763.34 0 C2782.53 1.15, 2793.14 8.98, 2795.34 32 M2795.34 32 C2794.51 156.35, 2794.57 283.11, 2795.34 351.9 M2795.34 32 C2795.83 156.76, 2795.48 281.4, 2795.34 351.9 M2795.34 351.9 C2796.88 374.84, 2783.55 385.64, 2763.34 383.9 M2795.34 351.9 C2796.71 374.38, 2786.02 383.19, 2763.34 383.9 M2763.34 383.9 C1787.6 389.09, 811.9 389.95, 32 383.9 M2763.34 383.9 C1804.92 384.04, 846.44 383.92, 32 383.9 M32 383.9 C11.94 385.06, -0.13 374.22, 0 351.9 M32 383.9 C11.25 384.41, 2.01 372.81, 0 351.9 M0 351.9 C0.76 258.54, -0.04 167.04, 0 32 M0 351.9 C-1.47 235.86, -0.73 120.2, 0 32 M0 32 C-1.14 11.94, 12.23 1.13, 32 0 M0 32 C0 8.92, 9.07 1.8, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(2078.318684683745 2186.362134103396) rotate(0 596.5 90)"><text x="596.5" y="31.716" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="36px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Kafka/Quueue</text><text x="596.5" y="76.71600000000001" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="36px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">booking.created, driver.location.updated, trip.created, trip.completed</text><text x="596.5" y="121.71600000000001" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="36px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">offers.created, payment.intent, payment.result, payment.success</text><text x="596.5" y="166.716" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="36px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">policy.updates, pricings.update</text></g><g transform="translate(3262.276642911422 1250.3586386862257) rotate(0 353.3999938964844 112.50000000000023)"><text x="0" y="31.716" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="36px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">This gives a centralized place</text><text x="0" y="76.71600000000001" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="36px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">to enquue and poll for jobs.</text><text x="0" y="121.71600000000001" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="36px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic"></text><text x="0" y="166.716" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="36px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Eventually acting as a Point of Contact</text><text x="0" y="211.716" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="36px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Service, if we need SSE or WSS</text></g><g stroke-linecap="round"><g transform="translate(3025.0750306748973 3218.0608362045705) rotate(0 38.27260378662686 42.31249438152827)" fill-rule="evenodd"><path d="M0.76 0.93 C0.83 13.81, 1.63 62.57, 1.59 76.64 C1.55 90.72, 0.49 83.95, 0.55 85.39 C0.61 86.82, -0.94 84.15, 1.96 85.25 C4.87 86.35, 11.29 90.95, 17.98 91.98 C24.67 93.01, 34.35 91.65, 42.1 91.44 C49.85 91.23, 59.24 91.24, 64.48 90.73 C69.71 90.21, 71.08 90.01, 73.51 88.36 C75.94 86.71, 78.48 82.62, 79.05 80.8 C79.62 78.99, 77.29 90.29, 76.91 77.47 C76.53 64.66, 77.12 16.62, 76.76 3.9 C76.4 -8.81, 75.98 2.72, 74.76 1.17 C73.53 -0.38, 71.93 -4.13, 69.43 -5.4 C66.94 -6.68, 65.52 -6.24, 59.79 -6.47 C54.05 -6.71, 42.12 -6.72, 35 -6.79 C27.87 -6.87, 22.63 -7.23, 17.02 -6.91 C11.4 -6.58, 4.41 -5.84, 1.32 -4.83 C-1.78 -3.83, -1.37 -1.78, -1.54 -0.87 C-1.71 0.05, -0.05 0.24, 0.3 0.63" stroke="none" stroke-width="0" fill="#ced4da" fill-rule="evenodd"></path><path d="M-0.48 -0.41 C-0.36 12.1, 0 62, 0.2 76.18 C0.4 90.37, 0.03 82.8, 0.72 84.7 C1.41 86.6, 1.35 86.69, 4.33 87.58 C7.3 88.46, 12.42 89.35, 18.57 90.01 C24.71 90.67, 33.78 91.41, 41.22 91.52 C48.66 91.63, 57.55 91.43, 63.21 90.68 C68.86 89.93, 73.04 88.36, 75.17 87.03 C77.3 85.7, 75.8 84.64, 76.01 82.7 C76.22 80.76, 76.1 88.23, 76.44 75.38 C76.78 62.53, 78.23 18.19, 78.05 5.6 C77.87 -6.99, 76.47 1.51, 75.37 -0.17 C74.26 -1.85, 73.72 -3.53, 71.41 -4.46 C69.11 -5.38, 67.18 -5.32, 61.54 -5.71 C55.9 -6.1, 44.79 -6.65, 37.56 -6.8 C30.33 -6.95, 23.71 -7.04, 18.17 -6.62 C12.62 -6.21, 7.52 -5.56, 4.32 -4.29 C1.13 -3.03, -0.27 0.1, -1 0.97 C-1.73 1.85, -0.42 1.02, -0.09 0.96 M1.47 -1.68 C1.47 11.03, -0.59 60.49, -0.78 74.58 C-0.97 88.66, -0.6 80.49, 0.32 82.85 C1.25 85.21, 1.89 87.53, 4.76 88.74 C7.63 89.95, 11.19 89.81, 17.52 90.09 C23.85 90.38, 35.01 90.52, 42.72 90.46 C50.43 90.39, 58.55 90.25, 63.79 89.69 C69.03 89.13, 71.86 87.9, 74.16 87.08 C76.45 86.25, 77.12 86.84, 77.57 84.74 C78.02 82.64, 77.26 87.55, 76.88 74.46 C76.51 61.37, 75.3 18.71, 75.33 6.21 C75.35 -6.29, 77.67 1.43, 77.05 -0.53 C76.42 -2.48, 74.26 -4.67, 71.6 -5.53 C68.94 -6.39, 66.68 -5.48, 61.08 -5.68 C55.48 -5.89, 45.01 -6.83, 38.02 -6.76 C31.03 -6.69, 24.88 -5.69, 19.14 -5.25 C13.4 -4.8, 6.65 -4.69, 3.6 -4.11 C0.56 -3.53, 1.73 -2.76, 0.87 -1.79 C0.02 -0.82, -1.09 1.56, -1.52 1.71" stroke="#000000" stroke-width="1" fill="none"></path></g></g><mask></mask><g stroke-linecap="round"><g transform="translate(3025.598960113173 3275.187119862301) rotate(0 38.51308235378883 3.563524259506721)"><path d="M-0.06 0.98 C0.48 1.78, 0.87 3.45, 2.74 4.35 C4.61 5.25, 7.73 5.88, 11.16 6.39 C14.58 6.91, 18.32 7.14, 23.28 7.43 C28.24 7.72, 34.46 8.07, 40.91 8.12 C47.36 8.17, 56.36 8.46, 61.96 7.74 C67.57 7.02, 72.16 5.22, 74.56 3.79 C76.96 2.36, 76.03 0, 76.36 -0.84 M-1.55 0.45 C-1.06 0.96, 0.14 1.5, 2.16 2.72 C4.18 3.94, 6.95 6.85, 10.58 7.77 C14.21 8.69, 19.13 8.1, 23.95 8.22 C28.78 8.34, 32.96 8.69, 39.53 8.49 C46.09 8.29, 57.37 7.99, 63.32 7.05 C69.26 6.11, 72.67 4.24, 75.21 2.83 C77.75 1.42, 78.07 -1.04, 78.57 -1.42" stroke="#000000" stroke-width="1" fill="none"></path></g></g><mask></mask><g stroke-linecap="round"><g transform="translate(3024.5671027906687 3246.2230645270774) rotate(0 39.24524919720352 3.810894885657035)"><path d="M0.71 0.94 C1.11 1.36, 0.57 2.74, 2.39 3.53 C4.21 4.32, 8.24 4.95, 11.61 5.69 C14.99 6.43, 17.8 7.44, 22.63 7.97 C27.47 8.49, 34.06 8.87, 40.63 8.84 C47.21 8.82, 56.58 8.85, 62.1 7.8 C67.61 6.76, 71.32 4.11, 73.73 2.6 C76.14 1.08, 75.79 -0.66, 76.56 -1.28 M-0.38 0.38 C-0.1 0.93, -0.31 4.07, 1.63 5.13 C3.57 6.18, 7.72 6.05, 11.27 6.7 C14.83 7.36, 18.33 8.56, 22.97 9.04 C27.6 9.53, 32.34 9.9, 39.1 9.59 C45.86 9.27, 57.72 7.97, 63.52 7.15 C69.33 6.34, 71.39 6.21, 73.94 4.67 C76.5 3.14, 78.31 -1.43, 78.87 -2.08" stroke="#000000" stroke-width="1" fill="none"></path></g></g><mask></mask><g stroke-linecap="round" transform="translate(3023.5091538085867 3210.9285675788888) rotate(0 38.29876800932743 7.745637696424183)"><path d="M31.41 -0.15 C38.94 -0.53, 50.23 -0.27, 57.42 0.57 C64.61 1.4, 71.73 3.28, 74.54 4.85 C77.34 6.42, 77.17 8.45, 74.26 10 C71.35 11.55, 64.21 13.25, 57.07 14.15 C49.94 15.06, 39.43 15.65, 31.43 15.43 C23.43 15.21, 14.24 14.17, 9.06 12.83 C3.87 11.5, 0.28 9.11, 0.31 7.43 C0.33 5.76, 3.9 4.05, 9.2 2.79 C14.51 1.53, 28.15 0.3, 32.14 -0.13 C36.13 -0.56, 33.02 0.02, 33.16 0.2 M40.75 -0.44 C48.69 -0.3, 59.7 0.98, 65.62 2.28 C71.54 3.58, 75.6 5.72, 76.24 7.35 C76.89 8.97, 73.91 10.75, 69.47 12.05 C65.03 13.36, 57.43 14.67, 49.6 15.17 C41.77 15.66, 30.02 15.6, 22.5 15.04 C14.98 14.47, 7.96 13.34, 4.46 11.78 C0.95 10.23, -0.39 7.51, 1.46 5.71 C3.32 3.92, 8.93 1.96, 15.58 1.03 C22.22 0.1, 37.19 0.2, 41.33 0.15 C45.48 0.11, 40.58 0.66, 40.46 0.78" stroke="none" stroke-width="0" fill="#fff"></path><path d="M44.71 0.06 C52.57 0.22, 62.41 1.53, 67.78 2.74 C73.14 3.96, 76.94 5.75, 76.91 7.36 C76.87 8.98, 72.94 11.02, 67.59 12.43 C62.24 13.85, 52.89 15.59, 44.8 15.86 C36.71 16.12, 26.1 14.93, 19.04 14.02 C11.98 13.11, 5.27 11.85, 2.44 10.4 C-0.39 8.95, -0.74 6.87, 2.04 5.33 C4.82 3.79, 11.66 2.03, 19.14 1.16 C26.62 0.29, 42.1 0.18, 46.92 0.13 C51.74 0.08, 48.34 0.77, 48.05 0.84 M46.97 0.55 C54.77 0.65, 63.93 1.49, 68.9 2.79 C73.87 4.08, 77.1 6.55, 76.8 8.32 C76.51 10.09, 72.62 12.12, 67.1 13.39 C61.59 14.65, 52 15.88, 43.7 15.92 C35.4 15.96, 24.27 14.52, 17.31 13.63 C10.34 12.73, 4.27 12.02, 1.91 10.55 C-0.45 9.07, 0 6.36, 3.14 4.79 C6.29 3.22, 13.64 1.78, 20.76 1.12 C27.88 0.45, 41.5 1.06, 45.85 0.81 C50.21 0.56, 46.94 -0.48, 46.88 -0.39" stroke="#000000" stroke-width="1" fill="none"></path></g><g stroke-linecap="round" transform="translate(3060.001140913809 3235.4052352587933) rotate(0 5.613051577081023 6.091879242227606)"><path d="M4.36 -0.34 C5.55 -0.68, 7.4 -0.17, 8.47 0.45 C9.54 1.07, 10.44 2.19, 10.8 3.39 C11.16 4.59, 11.02 6.34, 10.63 7.66 C10.23 8.98, 9.37 10.55, 8.43 11.31 C7.49 12.08, 6.08 12.48, 4.97 12.24 C3.86 12, 2.55 10.86, 1.76 9.87 C0.96 8.89, 0.35 7.64, 0.21 6.35 C0.08 5.06, 0.21 3.18, 0.95 2.13 C1.69 1.08, 3.99 0.37, 4.65 0.06 C5.32 -0.25, 4.89 0.15, 4.93 0.25 M5.08 0.26 C6.19 0.05, 7.17 0.5, 8.02 1.08 C8.87 1.65, 9.58 2.56, 10.2 3.69 C10.81 4.82, 12.01 6.57, 11.71 7.85 C11.42 9.14, 9.47 10.6, 8.44 11.42 C7.4 12.24, 6.6 13, 5.5 12.78 C4.4 12.55, 2.78 11.22, 1.83 10.08 C0.88 8.95, -0.14 7.21, -0.2 5.96 C-0.25 4.7, 0.82 3.42, 1.5 2.56 C2.19 1.69, 3.44 1.13, 3.9 0.77 C4.37 0.41, 4.18 0.49, 4.32 0.4" stroke="none" stroke-width="0" fill="#868e96"></path><path d="M6.08 0.01 C7.28 -0.07, 8.86 0.4, 9.67 1.22 C10.49 2.05, 10.93 3.55, 10.98 4.98 C11.04 6.41, 10.66 8.73, 10.01 9.81 C9.35 10.88, 8.13 11.12, 7.06 11.43 C5.98 11.75, 4.67 12.09, 3.57 11.71 C2.47 11.32, 1.01 10.28, 0.47 9.15 C-0.08 8.02, -0.06 6.25, 0.3 4.93 C0.66 3.61, 1.66 2, 2.63 1.25 C3.59 0.5, 5.57 0.69, 6.09 0.44 C6.6 0.19, 5.67 -0.27, 5.72 -0.25 M7.08 -0.09 C8.15 0.07, 9.48 1.45, 10.23 2.58 C10.99 3.7, 11.67 5.34, 11.63 6.68 C11.59 8.02, 10.95 9.83, 9.99 10.62 C9.02 11.41, 7.04 11.25, 5.84 11.44 C4.63 11.62, 3.63 12.29, 2.76 11.72 C1.88 11.14, 0.95 9.27, 0.61 7.99 C0.28 6.72, 0.44 5.19, 0.74 4.09 C1.04 2.98, 1.31 2.16, 2.43 1.38 C3.54 0.6, 6.7 -0.47, 7.41 -0.6 C8.11 -0.73, 6.8 0.52, 6.66 0.61" stroke="#000000" stroke-width="1" fill="none"></path></g><g stroke-linecap="round" transform="translate(3060.352282697743 3261.621849545858) rotate(0 5.613051577081023 6.091879242227606)"><path d="M5.11 -0.21 C6.24 -0.43, 7.69 -0.15, 8.61 0.55 C9.54 1.24, 10.3 2.63, 10.64 3.95 C10.97 5.27, 11.02 7.2, 10.63 8.48 C10.25 9.76, 9.33 11.07, 8.34 11.61 C7.35 12.15, 5.87 12.03, 4.71 11.74 C3.55 11.44, 2.2 10.86, 1.37 9.84 C0.55 8.82, -0.25 6.92, -0.23 5.61 C-0.21 4.29, 0.6 2.87, 1.48 1.95 C2.36 1.03, 4.43 0.42, 5.06 0.11 C5.69 -0.2, 5.34 0.02, 5.27 0.09 M4.61 0.48 C5.51 0.19, 6.76 0.26, 7.93 0.86 C9.11 1.46, 11.21 2.83, 11.66 4.11 C12.11 5.38, 11.08 7.18, 10.62 8.51 C10.16 9.84, 9.86 11.5, 8.9 12.07 C7.93 12.64, 6.16 12.34, 4.85 11.91 C3.54 11.47, 1.78 10.43, 1.04 9.46 C0.29 8.49, 0.39 7.23, 0.37 6.1 C0.36 4.97, 0.22 3.67, 0.94 2.69 C1.66 1.71, 4.01 0.7, 4.69 0.2 C5.37 -0.31, 5.03 -0.34, 5.02 -0.33" stroke="none" stroke-width="0" fill="#868e96"></path><path d="M5.79 -0.34 C6.85 -0.49, 8.1 0.13, 8.93 1.08 C9.76 2.03, 10.53 4.14, 10.75 5.38 C10.97 6.63, 10.75 7.5, 10.24 8.56 C9.74 9.62, 8.81 11.15, 7.71 11.73 C6.61 12.31, 4.74 12.45, 3.63 12.06 C2.51 11.66, 1.51 10.52, 1 9.36 C0.48 8.21, 0.37 6.37, 0.54 5.13 C0.7 3.89, 1.22 2.87, 2 1.95 C2.79 1.02, 4.53 -0.09, 5.26 -0.4 C5.98 -0.71, 6.21 -0.14, 6.35 0.1 M6.56 0.33 C7.71 0.52, 9.34 1.41, 10.15 2.4 C10.95 3.39, 11.5 5.18, 11.38 6.3 C11.27 7.42, 10.21 8.08, 9.46 9.1 C8.72 10.13, 7.94 12.07, 6.92 12.46 C5.9 12.85, 4.38 12.1, 3.36 11.47 C2.34 10.84, 1.39 9.76, 0.79 8.67 C0.19 7.57, -0.66 6.32, -0.25 4.92 C0.16 3.52, 2.17 1, 3.26 0.25 C4.35 -0.5, 5.78 0.56, 6.28 0.42 C6.78 0.29, 6.37 -0.68, 6.28 -0.57" stroke="#000000" stroke-width="1" fill="none"></path></g><g stroke-linecap="round" transform="translate(3061.001140913809 3290.3905761171645) rotate(357.5021844865888 5.613051577081023 6.091879242227606)"><path d="M4.28 -0.23 C5.28 -0.61, 6.73 -0.33, 7.78 0.33 C8.83 0.99, 10.03 2.45, 10.59 3.71 C11.15 4.98, 11.39 6.74, 11.13 7.93 C10.87 9.12, 10.02 10.15, 9.03 10.86 C8.04 11.57, 6.48 12.31, 5.2 12.18 C3.91 12.05, 2.18 11.03, 1.32 10.07 C0.45 9.11, 0.05 7.7, 0.02 6.45 C0 5.19, 0.4 3.61, 1.16 2.55 C1.92 1.49, 4.09 0.49, 4.6 0.07 C5.1 -0.34, 4.25 -0.12, 4.19 0.07 M5.23 -0.02 C6.52 -0.12, 9.15 0.63, 10.11 1.54 C11.06 2.46, 10.8 4.06, 10.94 5.46 C11.08 6.87, 11.49 8.92, 10.95 9.96 C10.4 11.01, 8.95 11.51, 7.67 11.73 C6.4 11.95, 4.41 11.73, 3.3 11.29 C2.2 10.85, 1.63 10.06, 1.03 9.08 C0.42 8.11, -0.5 6.71, -0.33 5.43 C-0.15 4.15, 1.03 2.41, 2.1 1.42 C3.16 0.42, 5.48 -0.24, 6.06 -0.52 C6.65 -0.8, 5.66 -0.48, 5.62 -0.28" stroke="none" stroke-width="0" fill="#868e96"></path><path d="M5.45 -0.26 C6.48 -0.19, 7.97 1.12, 8.87 1.94 C9.77 2.75, 10.58 3.41, 10.85 4.61 C11.12 5.81, 11.1 7.89, 10.52 9.13 C9.93 10.36, 8.43 11.56, 7.32 12.02 C6.2 12.48, 4.86 12.4, 3.85 11.91 C2.83 11.41, 1.82 10.15, 1.21 9.07 C0.6 7.99, 0.13 6.78, 0.19 5.43 C0.25 4.09, 0.55 1.92, 1.58 1.01 C2.6 0.1, 5.51 0.05, 6.34 -0.03 C7.17 -0.1, 6.61 0.42, 6.58 0.56 M5.64 0.46 C6.76 0.33, 8.28 1.08, 9.08 1.66 C9.88 2.25, 10.17 2.69, 10.44 3.95 C10.72 5.2, 11.1 7.91, 10.72 9.19 C10.35 10.47, 9.26 11.12, 8.21 11.62 C7.16 12.12, 5.71 12.41, 4.42 12.17 C3.12 11.92, 1.07 11.37, 0.46 10.13 C-0.16 8.89, 0.51 6.07, 0.72 4.73 C0.92 3.39, 0.93 2.99, 1.67 2.08 C2.42 1.17, 4.69 -0.47, 5.19 -0.72 C5.7 -0.97, 4.81 0.43, 4.71 0.59" stroke="#000000" stroke-width="1" fill="none"></path></g><g transform="translate(3002.925789361779 3311.9807177160073) rotate(0 60.298744961534794 11.79758053595242)"><text x="60.29874496153468" y="16.271922191069216" font-family="Virgil, sans-serif, Segoe UI Emoji" font-size="17.4778970902999px" fill="#000000" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Relational DB</text></g><g stroke-linecap="round"><g transform="translate(899.3449075718236 1689.4417307913536) rotate(0 38.731827742692985 41.928393387237975)" fill-rule="evenodd"><path d="M-1.41 -2.33 C-1.21 10.22, -0.09 62.26, -0.25 76.33 C-0.41 90.41, -2.99 80.62, -2.38 82.11 C-1.76 83.61, -0.29 83.83, 3.46 85.29 C7.21 86.75, 14.02 90.06, 20.13 90.87 C26.24 91.68, 32.51 89.91, 40.11 90.16 C47.7 90.41, 59.65 93.24, 65.68 92.36 C71.7 91.49, 74.52 86.29, 76.26 84.93 C78 83.56, 75.75 85.52, 76.1 84.16 C76.44 82.8, 77.84 89.75, 78.33 76.78 C78.83 63.81, 79.79 19.28, 79.08 6.35 C78.37 -6.59, 75.63 0.77, 74.06 -0.82 C72.5 -2.42, 71.78 -2.01, 69.68 -3.22 C67.58 -4.43, 66.67 -7.65, 61.47 -8.08 C56.27 -8.51, 46.03 -6.23, 38.48 -5.82 C30.93 -5.41, 22.32 -6.11, 16.15 -5.6 C9.98 -5.08, 4.1 -3.97, 1.46 -2.73 C-1.18 -1.49, 0.83 1.43, 0.3 1.84 C-0.23 2.24, -1.84 0.01, -1.73 -0.29" stroke="none" stroke-width="0" fill="#ced4da" fill-rule="evenodd"></path><path d="M1.1 0.48 C1.19 12.77, 1.19 60.22, 1.07 74.08 C0.94 87.94, -0.22 81.54, 0.36 83.64 C0.95 85.73, 1.63 85.37, 4.58 86.63 C7.52 87.9, 11.85 90.49, 18.06 91.23 C24.26 91.97, 34.09 91.42, 41.83 91.08 C49.57 90.75, 58.8 90.15, 64.52 89.24 C70.23 88.34, 74.11 86.59, 76.11 85.66 C78.11 84.73, 76.41 85.33, 76.5 83.66 C76.6 81.99, 76.47 88.38, 76.67 75.64 C76.86 62.91, 77.52 20.06, 77.68 7.23 C77.84 -5.59, 78.85 0.5, 77.63 -1.28 C76.4 -3.06, 73.2 -2.46, 70.32 -3.45 C67.44 -4.44, 65.67 -6.56, 60.36 -7.2 C55.05 -7.85, 45.35 -7.54, 38.47 -7.32 C31.59 -7.1, 24.99 -6.77, 19.07 -5.88 C13.15 -5, 6.23 -3.17, 2.94 -2.03 C-0.36 -0.89, -0.11 0.43, -0.71 0.96 C-1.31 1.49, -0.67 1.15, -0.66 1.14 M0.22 -0.31 C0.17 12.05, 0.62 60.83, 0.54 75.03 C0.47 89.22, -0.99 82.84, -0.22 84.89 C0.54 86.93, 2.31 86.12, 5.14 87.3 C7.97 88.48, 10.93 91.54, 16.74 91.96 C22.55 92.37, 32.43 89.93, 39.99 89.79 C47.55 89.66, 56.2 91.95, 62.13 91.15 C68.06 90.35, 72.89 86.42, 75.59 84.99 C78.29 83.55, 78.05 84.23, 78.33 82.54 C78.6 80.85, 77.21 87.78, 77.23 74.87 C77.25 61.95, 78.49 17.28, 78.43 5.05 C78.36 -7.19, 78.25 2.95, 76.83 1.44 C75.41 -0.06, 72.85 -2.43, 69.93 -3.99 C67 -5.56, 64.98 -7.36, 59.28 -7.95 C53.58 -8.55, 42.81 -7.59, 35.74 -7.56 C28.67 -7.53, 22.56 -8.32, 16.86 -7.78 C11.15 -7.24, 4.08 -5.31, 1.49 -4.31 C-1.1 -3.32, 1.35 -2.24, 1.31 -1.8 C1.28 -1.36, 1.57 -1.9, 1.27 -1.67" stroke="#000000" stroke-width="1" fill="none"></path></g></g><mask></mask><g stroke-linecap="round"><g transform="translate(899.868837010099 1746.5680144490843) rotate(0 38.363675215787225 3.805486568511242)"><path d="M0.81 -1.12 C1.03 -0.66, 0.62 2.19, 2.38 3.29 C4.15 4.38, 8.01 4.55, 11.41 5.45 C14.8 6.34, 17.75 8.28, 22.77 8.65 C27.79 9.02, 34.77 8.08, 41.52 7.69 C48.27 7.29, 57.61 7.17, 63.28 6.29 C68.94 5.42, 73.23 3.45, 75.5 2.42 C77.76 1.39, 76.64 0.68, 76.86 0.11 M-0.22 0.9 C-0.23 1.52, -0.25 3.85, 1.62 4.76 C3.48 5.66, 7.37 6.05, 10.96 6.33 C14.55 6.61, 18.26 6.18, 23.17 6.43 C28.09 6.68, 34.04 7.48, 40.46 7.82 C46.87 8.17, 56.23 9.08, 61.66 8.51 C67.08 7.94, 70.65 5.81, 72.99 4.4 C75.32 2.99, 74.74 0.61, 75.67 0.04" stroke="#000000" stroke-width="1" fill="none"></path></g></g><mask></mask><g stroke-linecap="round"><g transform="translate(898.836979687595 1717.6039591138606) rotate(0 37.929844444146966 3.621170352959325)"><path d="M0.35 -0.13 C0.65 0.49, 0.85 1.41, 2.64 2.58 C4.43 3.76, 7.67 6.09, 11.1 6.91 C14.53 7.74, 18.1 7.45, 23.24 7.53 C28.38 7.61, 35.31 7.58, 41.94 7.4 C48.58 7.22, 57.66 7.08, 63.04 6.43 C68.42 5.79, 71.93 4.8, 74.22 3.56 C76.51 2.32, 76.16 -0.5, 76.79 -1.01 M-0.93 -1.24 C-0.8 -0.39, 0.1 2.66, 2.01 3.69 C3.91 4.71, 6.84 4.12, 10.49 4.91 C14.14 5.69, 18.79 7.97, 23.9 8.38 C29 8.79, 34.87 7.33, 41.1 7.39 C47.34 7.44, 55.7 9.54, 61.3 8.72 C66.9 7.91, 72.32 4.21, 74.7 2.48 C77.08 0.74, 75.22 -1.2, 75.56 -1.67" stroke="#000000" stroke-width="1" fill="none"></path></g></g><mask></mask><g stroke-linecap="round" transform="translate(897.7790307055129 1682.309462165672) rotate(0 38.29876800932743 7.745637696424183)"><path d="M29.21 0.31 C36.61 -0.07, 47.29 0.38, 54.71 1.02 C62.13 1.66, 70.28 2.75, 73.73 4.16 C77.17 5.58, 77.69 7.83, 75.37 9.51 C73.05 11.19, 66.58 13.31, 59.8 14.24 C53.02 15.17, 42.85 15.25, 34.66 15.1 C26.47 14.94, 16.44 14.51, 10.68 13.32 C4.91 12.13, 0.62 9.62, 0.1 7.94 C-0.43 6.25, 2.46 4.45, 7.55 3.24 C12.63 2.02, 26.42 1.1, 30.62 0.64 C34.82 0.17, 32.52 0.49, 32.76 0.45 M32.13 0.02 C39.93 -0.1, 51.97 0.92, 59.07 1.74 C66.17 2.56, 72.22 3.37, 74.74 4.93 C77.26 6.49, 77.31 9.53, 74.21 11.1 C71.1 12.67, 63.48 13.53, 56.13 14.33 C48.78 15.14, 38.07 16.36, 30.11 15.94 C22.15 15.53, 13.37 13.21, 8.36 11.85 C3.34 10.48, -0.13 9.38, 0.04 7.73 C0.21 6.08, 4 3.34, 9.39 1.95 C14.78 0.56, 28.39 -0.36, 32.39 -0.59 C36.39 -0.81, 33.2 0.31, 33.37 0.59" stroke="none" stroke-width="0" fill="#fff"></path><path d="M40.48 0.51 C48.2 0.53, 58.44 1.5, 64.38 2.54 C70.31 3.57, 75.09 5.19, 76.09 6.75 C77.1 8.3, 74.96 10.41, 70.42 11.87 C65.88 13.33, 56.72 14.94, 48.87 15.51 C41.03 16.09, 30.91 16.14, 23.37 15.33 C15.82 14.53, 7.27 12.32, 3.59 10.7 C-0.08 9.08, -0.62 7.08, 1.3 5.63 C3.22 4.18, 8.34 2.87, 15.11 1.99 C21.89 1.11, 37.29 0.68, 41.94 0.36 C46.59 0.04, 43.02 0.03, 43.01 0.05 M45.87 0.72 C53.59 0.89, 63 2.2, 68.04 3.29 C73.09 4.39, 76.38 5.64, 76.14 7.3 C75.9 8.97, 72.14 12.01, 66.6 13.28 C61.06 14.54, 51.02 14.85, 42.89 14.91 C34.76 14.97, 24.56 14.43, 17.84 13.65 C11.13 12.87, 5.16 11.76, 2.6 10.22 C0.04 8.68, -0.57 5.85, 2.5 4.41 C5.57 2.98, 13.69 2.4, 21.05 1.63 C28.4 0.85, 42.47 -0.08, 46.61 -0.25 C50.75 -0.41, 46.01 0.41, 45.89 0.63" stroke="#000000" stroke-width="1" fill="none"></path></g><g stroke-linecap="round" transform="translate(934.2710178107354 1706.7861298455764) rotate(0 5.613051577080796 6.091879242227606)"><path d="M4.18 0.34 C5.33 -0.05, 7.64 -0.19, 8.8 0.35 C9.95 0.89, 10.76 2.26, 11.12 3.57 C11.49 4.88, 11.39 6.95, 11.01 8.18 C10.63 9.42, 9.92 10.29, 8.86 10.98 C7.8 11.67, 5.89 12.51, 4.64 12.3 C3.39 12.09, 2.09 10.73, 1.36 9.71 C0.62 8.7, 0.3 7.37, 0.22 6.21 C0.15 5.04, 0.21 3.71, 0.92 2.72 C1.62 1.74, 3.72 0.8, 4.43 0.3 C5.14 -0.2, 5.17 -0.33, 5.18 -0.3 M5.07 0.73 C6.28 0.33, 7.28 -0.28, 8.29 0.31 C9.3 0.89, 10.72 3.02, 11.11 4.25 C11.49 5.48, 11.1 6.42, 10.61 7.69 C10.12 8.95, 9.11 11.21, 8.18 11.84 C7.24 12.46, 6.09 11.66, 4.98 11.43 C3.87 11.19, 2.38 11.37, 1.5 10.42 C0.62 9.47, -0.17 7.17, -0.29 5.72 C-0.4 4.27, -0.06 2.59, 0.81 1.72 C1.68 0.85, 4.29 0.7, 4.91 0.5 C5.53 0.3, 4.69 0.41, 4.51 0.52" stroke="none" stroke-width="0" fill="#868e96"></path><path d="M6.19 0.48 C7.32 0.5, 8.73 1.09, 9.6 1.98 C10.48 2.88, 11.42 4.47, 11.44 5.85 C11.45 7.23, 10.44 9.17, 9.7 10.28 C8.97 11.4, 8.25 12.46, 7.05 12.57 C5.84 12.67, 3.54 11.68, 2.46 10.91 C1.39 10.15, 1.02 9.01, 0.59 7.95 C0.16 6.89, -0.53 5.69, -0.13 4.56 C0.27 3.43, 1.77 1.95, 3 1.19 C4.22 0.42, 6.46 0.18, 7.23 -0.01 C7.99 -0.19, 7.61 -0.01, 7.59 0.06 M6.49 0.49 C7.62 0.49, 8.94 0.71, 9.7 1.76 C10.46 2.82, 11.19 5.48, 11.06 6.82 C10.94 8.16, 9.78 9.01, 8.95 9.79 C8.12 10.56, 7.04 11.24, 6.09 11.48 C5.13 11.73, 4.26 11.94, 3.24 11.25 C2.21 10.57, 0.28 8.53, -0.06 7.38 C-0.4 6.24, 0.6 5.57, 1.19 4.38 C1.78 3.18, 2.54 0.87, 3.46 0.22 C4.38 -0.43, 6.07 0.44, 6.71 0.48 C7.35 0.52, 7.17 0.4, 7.3 0.45" stroke="#000000" stroke-width="1" fill="none"></path></g><g stroke-linecap="round" transform="translate(934.622159594669 1733.002744132641) rotate(0 5.613051577080796 6.091879242227606)"><path d="M6.27 -0.43 C7.52 -0.56, 8.81 0.25, 9.65 1.21 C10.48 2.17, 11.09 4.05, 11.28 5.34 C11.46 6.64, 11.41 7.87, 10.74 8.99 C10.07 10.12, 8.47 11.69, 7.26 12.09 C6.05 12.49, 4.56 11.9, 3.49 11.38 C2.42 10.86, 1.49 9.99, 0.87 8.97 C0.25 7.96, -0.4 6.54, -0.23 5.29 C-0.06 4.05, 0.8 2.45, 1.9 1.49 C2.99 0.54, 5.67 -0.2, 6.34 -0.46 C7.01 -0.71, 6.04 -0.14, 5.91 -0.02 M5.59 -0.38 C6.67 -0.49, 8.58 1, 9.44 1.85 C10.31 2.69, 10.66 3.39, 10.76 4.68 C10.87 5.98, 10.58 8.58, 10.07 9.64 C9.57 10.71, 8.77 10.66, 7.73 11.07 C6.69 11.47, 5.02 12.48, 3.82 12.07 C2.62 11.65, 1.2 9.86, 0.52 8.59 C-0.17 7.33, -0.6 5.61, -0.28 4.48 C0.04 3.36, 1.46 2.57, 2.44 1.86 C3.42 1.16, 5.2 0.47, 5.59 0.26 C5.99 0.05, 4.7 0.53, 4.81 0.59" stroke="none" stroke-width="0" fill="#868e96"></path><path d="M6.74 0.06 C7.95 0.2, 9.68 1.24, 10.38 2.38 C11.09 3.51, 11.02 5.48, 10.95 6.89 C10.89 8.3, 10.88 10.04, 10.02 10.84 C9.15 11.63, 6.99 11.66, 5.76 11.66 C4.54 11.66, 3.68 11.4, 2.68 10.83 C1.68 10.25, 0.09 9.37, -0.24 8.22 C-0.56 7.07, 0.12 5.21, 0.75 3.91 C1.39 2.62, 2.43 1.11, 3.58 0.45 C4.74 -0.21, 6.99 0.02, 7.69 -0.03 C8.39 -0.08, 7.8 0.05, 7.77 0.15 M6.21 -0.61 C7.39 -0.46, 9.08 1.52, 9.79 2.57 C10.51 3.61, 10.51 4.51, 10.49 5.64 C10.48 6.78, 10.26 8.3, 9.72 9.39 C9.19 10.48, 8.47 11.93, 7.26 12.19 C6.06 12.44, 3.51 11.47, 2.47 10.91 C1.43 10.35, 1.34 10.07, 1.04 8.84 C0.75 7.62, 0.43 4.83, 0.7 3.54 C0.96 2.25, 1.57 1.64, 2.63 1.1 C3.69 0.55, 6.25 0.41, 7.03 0.26 C7.81 0.12, 7.5 0.19, 7.3 0.23" stroke="#000000" stroke-width="1" fill="none"></path></g><g stroke-linecap="round" transform="translate(935.2710178107354 1761.7714707039477) rotate(357.5021844865888 5.613051577080796 6.091879242227606)"><path d="M6.53 -0.33 C7.62 -0.18, 8.96 1.03, 9.8 1.99 C10.65 2.94, 11.56 4.07, 11.6 5.39 C11.64 6.72, 10.83 8.89, 10.05 9.93 C9.27 10.98, 8.03 11.4, 6.9 11.68 C5.78 11.95, 4.44 12.02, 3.31 11.58 C2.17 11.13, 0.66 10.16, 0.1 8.99 C-0.46 7.82, -0.5 5.97, -0.04 4.56 C0.42 3.14, 1.83 1.3, 2.86 0.52 C3.88 -0.25, 5.57 0, 6.11 -0.12 C6.64 -0.24, 6.04 -0.41, 6.07 -0.2 M7.01 0.61 C8.07 0.8, 9.01 1.01, 9.63 2.05 C10.26 3.08, 10.72 5.6, 10.77 6.83 C10.82 8.06, 10.64 8.48, 9.93 9.4 C9.22 10.31, 7.75 12.11, 6.49 12.32 C5.24 12.53, 3.5 11.48, 2.41 10.65 C1.32 9.83, 0.21 8.45, -0.05 7.38 C-0.3 6.32, 0.39 5.31, 0.9 4.25 C1.41 3.18, 2.15 1.62, 3 1.01 C3.85 0.4, 5.27 0.71, 6.01 0.58 C6.74 0.46, 7.38 0.23, 7.41 0.26" stroke="none" stroke-width="0" fill="#868e96"></path><path d="M6.94 -0.04 C8.08 0.21, 8.97 1.51, 9.75 2.64 C10.53 3.77, 11.67 5.57, 11.61 6.74 C11.55 7.91, 10.23 8.79, 9.41 9.64 C8.59 10.48, 7.86 11.46, 6.67 11.82 C5.47 12.17, 3.26 12.34, 2.24 11.76 C1.22 11.19, 0.78 9.7, 0.55 8.35 C0.31 7.01, 0.32 5.02, 0.8 3.71 C1.28 2.39, 2.34 1.1, 3.43 0.46 C4.52 -0.18, 6.64 -0.05, 7.32 -0.11 C7.99 -0.18, 7.53 -0.04, 7.5 0.06 M6.05 0.38 C7.14 0.47, 8.09 0.59, 8.92 1.36 C9.76 2.13, 10.73 3.61, 11.06 5.01 C11.38 6.41, 11.61 8.67, 10.88 9.76 C10.15 10.86, 7.84 11.15, 6.67 11.57 C5.51 11.99, 4.85 12.86, 3.87 12.29 C2.89 11.71, 1.47 9.41, 0.82 8.15 C0.18 6.89, -0.34 5.87, 0 4.72 C0.34 3.56, 1.72 1.98, 2.87 1.2 C4.02 0.42, 6.45 0.25, 6.88 0.04 C7.31 -0.16, 5.68 -0.14, 5.46 -0.01" stroke="#000000" stroke-width="1" fill="none"></path></g><g transform="translate(877.1956662587054 1783.3616123027905) rotate(0 60.29874496153457 11.79758053595242)"><text x="60.29874496153468" y="16.271922191069216" font-family="Virgil, sans-serif, Segoe UI Emoji" font-size="17.4778970902999px" fill="#000000" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Relational DB</text></g><g stroke-linecap="round"><g transform="translate(603.8378919655006 2898.7909811972495) rotate(0 38.54433689445136 41.979384872398896)" fill-rule="evenodd"><path d="M1.62 0.31 C1.18 12.71, -0.32 61.35, -0.22 75.14 C-0.12 88.92, 1.84 81.23, 2.23 83.02 C2.62 84.81, -0.84 84.95, 2.13 85.89 C5.1 86.82, 13.2 87.82, 20.04 88.62 C26.89 89.41, 35.66 90.73, 43.2 90.68 C50.74 90.63, 60.25 89.46, 65.26 88.33 C70.28 87.2, 71.53 84.86, 73.26 83.9 C75 82.94, 75.1 83.55, 75.67 82.57 C76.25 81.59, 76.84 91.02, 76.71 78 C76.58 64.98, 75.22 17.14, 74.9 4.46 C74.57 -8.22, 75.01 3.56, 74.78 1.93 C74.56 0.3, 76.17 -4.31, 73.53 -5.32 C70.9 -6.33, 64.82 -3.33, 58.98 -4.12 C53.14 -4.92, 45.34 -9.91, 38.51 -10.1 C31.68 -10.29, 24.2 -6.39, 18 -5.28 C11.81 -4.17, 4.73 -4.14, 1.35 -3.44 C-2.03 -2.74, -1.64 -1.85, -2.26 -1.05 C-2.88 -0.25, -2.46 1.23, -2.36 1.35" stroke="none" stroke-width="0" fill="#ced4da" fill-rule="evenodd"></path><path d="M0.72 -1.19 C0.7 11.51, -0.79 61.61, -0.88 75.75 C-0.98 89.89, -0.66 81.81, 0.16 83.65 C0.97 85.5, 1.11 85.79, 4.01 86.84 C6.9 87.89, 11.49 89.09, 17.53 89.96 C23.57 90.83, 32.77 91.84, 40.25 92.03 C47.72 92.22, 56.37 92.08, 62.38 91.1 C68.4 90.12, 73.74 87.4, 76.32 86.16 C78.91 84.92, 77.75 85.35, 77.88 83.64 C78.01 81.93, 77.2 88.94, 77.11 75.89 C77.01 62.84, 77.3 17.93, 77.3 5.33 C77.31 -7.27, 78.06 1.96, 77.13 0.29 C76.21 -1.37, 74.49 -3.6, 71.73 -4.67 C68.98 -5.74, 66.34 -5.66, 60.59 -6.13 C54.84 -6.6, 44.45 -7.55, 37.23 -7.49 C30.02 -7.43, 22.91 -6.51, 17.28 -5.76 C11.65 -5.01, 6.25 -4.13, 3.43 -2.99 C0.61 -1.85, 0.88 0.56, 0.37 1.08 C-0.15 1.6, 0.57 0.14, 0.34 0.11 M-0.37 0.81 C0.04 13.19, 1.26 59.9, 1.23 73.92 C1.21 87.94, -1.04 82.63, -0.53 84.92 C-0.02 87.2, 1.53 86.76, 4.27 87.61 C7.02 88.46, 9.79 89.42, 15.95 90.02 C22.11 90.62, 33.47 91.19, 41.23 91.24 C49 91.29, 56.76 91.23, 62.54 90.32 C68.32 89.41, 73.54 87.05, 75.92 85.75 C78.29 84.45, 76.44 84.26, 76.77 82.51 C77.1 80.76, 77.72 88.03, 77.9 75.24 C78.08 62.46, 78.16 18.31, 77.85 5.8 C77.55 -6.71, 77.04 1.51, 76.08 0.18 C75.12 -1.15, 74.83 -1.11, 72.09 -2.19 C69.34 -3.27, 65.39 -5.39, 59.63 -6.32 C53.87 -7.26, 44.49 -7.6, 37.52 -7.81 C30.54 -8.02, 23.67 -8.54, 17.79 -7.6 C11.91 -6.65, 5.32 -3.12, 2.24 -2.13 C-0.84 -1.13, -0.19 -2.05, -0.7 -1.62 C-1.22 -1.2, -0.81 0.21, -0.87 0.42" stroke="#000000" stroke-width="1" fill="none"></path></g></g><mask></mask><g stroke-linecap="round"><g transform="translate(604.361821403776 2955.91726485498) rotate(0 38.550825486117674 4.536397268367182)"><path d="M-1.14 0.55 C-0.89 1.3, 0.18 2.46, 2.18 3.31 C4.18 4.15, 7.49 4.97, 10.84 5.65 C14.18 6.33, 17.4 6.88, 22.25 7.38 C27.1 7.88, 33.45 8.51, 39.94 8.63 C46.42 8.76, 55.18 9.1, 61.14 8.15 C67.11 7.2, 72.86 4.26, 75.71 2.92 C78.56 1.58, 77.99 0.71, 78.24 0.09 M0.47 -0.2 C0.5 0.84, -0.3 3.65, 1.31 4.79 C2.91 5.93, 6.58 6.08, 10.09 6.64 C13.6 7.2, 17.11 7.71, 22.38 8.15 C27.64 8.59, 35.08 9.35, 41.7 9.27 C48.31 9.19, 56.8 8.97, 62.06 7.68 C67.33 6.39, 70.69 2.78, 73.31 1.5 C75.93 0.23, 77.39 0.04, 77.77 0.01" stroke="#000000" stroke-width="1" fill="none"></path></g></g><mask></mask><g stroke-linecap="round"><g transform="translate(603.329964081272 2926.9532095197565) rotate(0 37.99587386583403 4.264127669961908)"><path d="M0.15 -0.11 C0.68 0.26, 0.33 1.83, 2.07 2.79 C3.81 3.75, 7.31 4.7, 10.58 5.64 C13.84 6.59, 16.79 7.87, 21.66 8.48 C26.53 9.08, 32.88 9.51, 39.81 9.25 C46.75 9, 57.29 7.89, 63.25 6.93 C69.22 5.98, 73.27 4.82, 75.6 3.54 C77.93 2.25, 76.89 0.06, 77.23 -0.76 M-1.24 -1.21 C-0.76 -0.74, -0.68 2.69, 1.14 4 C2.96 5.3, 6.31 5.66, 9.7 6.63 C13.09 7.6, 16.18 9.84, 21.48 9.82 C26.78 9.81, 34.82 7.22, 41.51 6.55 C48.2 5.89, 56.35 6.51, 61.62 5.83 C66.9 5.14, 70.71 3.63, 73.14 2.45 C75.58 1.26, 75.73 -0.95, 76.23 -1.3" stroke="#000000" stroke-width="1" fill="none"></path></g></g><mask></mask><g stroke-linecap="round" transform="translate(602.27201509919 2891.658712571568) rotate(0 38.29876800932743 7.745637696424183)"><path d="M31.53 -0.32 C39.12 -0.71, 50.93 0.4, 57.99 1.3 C65.05 2.19, 71.14 3.61, 73.9 5.07 C76.66 6.52, 77.33 8.53, 74.56 10.03 C71.79 11.52, 64.48 13.21, 57.27 14.02 C50.06 14.83, 39.31 15.16, 31.29 14.89 C23.27 14.61, 14.36 13.63, 9.14 12.36 C3.91 11.08, -0.12 8.82, -0.07 7.23 C-0.02 5.63, 3.94 4.04, 9.43 2.79 C14.92 1.53, 28.95 0.13, 32.88 -0.3 C36.82 -0.73, 32.96 -0.04, 33.02 0.2 M33.76 0.51 C41.42 0.19, 52.85 -0.15, 59.8 0.7 C66.76 1.55, 73.13 3.9, 75.48 5.61 C77.82 7.32, 77.24 9.37, 73.86 10.95 C70.48 12.53, 62.59 14.29, 55.19 15.07 C47.8 15.86, 37.35 16.17, 29.49 15.68 C21.64 15.19, 13.1 13.56, 8.09 12.12 C3.07 10.68, -0.95 8.61, -0.6 7.04 C-0.25 5.47, 4.52 3.9, 10.2 2.72 C15.88 1.54, 29.45 0.35, 33.5 -0.03 C37.55 -0.41, 34.33 0.28, 34.51 0.45" stroke="none" stroke-width="0" fill="#fff"></path><path d="M36.72 -0.38 C44.6 -0.41, 55.5 0.93, 61.98 2.08 C68.47 3.22, 73.86 4.95, 75.61 6.49 C77.37 8.03, 76.31 9.9, 72.52 11.33 C68.73 12.76, 60.57 14.39, 52.9 15.08 C45.22 15.76, 34.24 15.93, 26.47 15.42 C18.71 14.91, 10.71 13.5, 6.3 12.02 C1.89 10.54, -0.98 8.22, 0.03 6.55 C1.04 4.88, 6.06 3.17, 12.35 2.01 C18.64 0.85, 33.32 -0.11, 37.79 -0.41 C42.25 -0.72, 39.13 -0.02, 39.13 0.21 M46.55 0.79 C54.34 1.09, 64.72 2.09, 69.8 3.34 C74.88 4.6, 77.66 6.68, 77.03 8.3 C76.39 9.92, 71.58 11.9, 65.97 13.05 C60.36 14.2, 51.59 15.1, 43.37 15.21 C35.15 15.33, 23.49 14.7, 16.64 13.73 C9.8 12.75, 4.43 10.91, 2.29 9.35 C0.16 7.8, 0.57 5.9, 3.81 4.4 C7.05 2.89, 14.62 1.12, 21.76 0.3 C28.89 -0.52, 42.46 -0.5, 46.61 -0.52 C50.76 -0.54, 46.73 -0.15, 46.66 0.18" stroke="#000000" stroke-width="1" fill="none"></path></g><g stroke-linecap="round" transform="translate(638.7640022044125 2916.1353802514723) rotate(0 5.613051577080796 6.091879242227606)"><path d="M7.18 0.37 C8.28 0.61, 8.86 1.36, 9.59 2.28 C10.31 3.2, 11.52 4.66, 11.55 5.89 C11.57 7.13, 10.64 8.75, 9.75 9.71 C8.86 10.66, 7.34 11.44, 6.2 11.64 C5.06 11.84, 3.92 11.61, 2.92 10.92 C1.92 10.23, 0.56 8.67, 0.2 7.5 C-0.15 6.32, 0.26 5.06, 0.77 3.86 C1.29 2.67, 2.32 0.95, 3.29 0.33 C4.26 -0.28, 5.92 0.11, 6.59 0.17 C7.25 0.24, 7.26 0.57, 7.27 0.71 M5.23 -0.58 C6.5 -0.86, 8.12 0.23, 9.17 1.08 C10.22 1.93, 11.29 3.2, 11.55 4.52 C11.81 5.83, 11.26 7.73, 10.74 8.97 C10.22 10.22, 9.37 11.52, 8.41 12 C7.44 12.47, 6.28 12.22, 4.94 11.8 C3.6 11.38, 1.27 10.43, 0.37 9.46 C-0.53 8.49, -0.55 7.26, -0.46 5.97 C-0.37 4.69, -0.05 2.71, 0.9 1.76 C1.86 0.81, 4.6 0.52, 5.3 0.28 C5.99 0.03, 5.12 0.22, 5.07 0.29" stroke="none" stroke-width="0" fill="#868e96"></path><path d="M5.12 0.58 C6.19 0.43, 7.4 0.7, 8.39 1.28 C9.39 1.86, 10.71 2.88, 11.1 4.06 C11.49 5.25, 11.24 7.12, 10.72 8.39 C10.2 9.66, 8.96 11.04, 7.98 11.67 C7.01 12.3, 6.02 12.5, 4.86 12.18 C3.69 11.87, 1.82 10.8, 1.01 9.78 C0.2 8.75, -0.08 7.36, 0 6.02 C0.09 4.68, 0.64 2.72, 1.52 1.73 C2.4 0.75, 4.68 0.35, 5.27 0.11 C5.87 -0.12, 5.06 0.22, 5.07 0.33 M6.49 0.22 C7.82 0.09, 9.06 0.79, 9.82 1.61 C10.57 2.43, 10.8 3.92, 11.02 5.15 C11.23 6.39, 11.78 7.99, 11.09 9.03 C10.39 10.07, 7.98 11.02, 6.85 11.38 C5.71 11.73, 5.19 11.6, 4.27 11.16 C3.36 10.72, 1.94 9.87, 1.34 8.74 C0.75 7.61, 0.67 5.74, 0.71 4.38 C0.74 3.02, 0.75 1.36, 1.53 0.6 C2.31 -0.16, 4.71 -0.19, 5.39 -0.18 C6.08 -0.17, 5.68 0.62, 5.64 0.66" stroke="#000000" stroke-width="1" fill="none"></path></g><g stroke-linecap="round" transform="translate(639.1151439883461 2942.351994538537) rotate(0 5.613051577080796 6.091879242227606)"><path d="M3.98 0.08 C5.06 -0.36, 7.42 -0.24, 8.55 0.3 C9.68 0.84, 10.4 2.14, 10.76 3.33 C11.13 4.53, 11.07 6.2, 10.75 7.47 C10.44 8.73, 9.88 10.2, 8.88 10.9 C7.89 11.6, 5.96 11.75, 4.78 11.64 C3.61 11.53, 2.57 11.18, 1.83 10.23 C1.09 9.28, 0.5 7.26, 0.32 5.94 C0.15 4.63, 0.04 3.27, 0.76 2.35 C1.49 1.43, 4.04 0.76, 4.68 0.44 C5.31 0.12, 4.61 0.44, 4.58 0.44 M6.87 0.09 C8.07 0.32, 9.65 1.12, 10.37 2.16 C11.1 3.2, 11.24 4.99, 11.24 6.35 C11.23 7.71, 10.98 9.41, 10.34 10.33 C9.7 11.25, 8.76 11.72, 7.41 11.88 C6.05 12.03, 3.47 11.78, 2.22 11.24 C0.97 10.7, 0.34 9.82, -0.1 8.63 C-0.53 7.43, -0.9 5.29, -0.39 4.04 C0.12 2.79, 1.81 1.76, 2.95 1.13 C4.1 0.49, 5.92 0.36, 6.48 0.22 C7.05 0.07, 6.32 0.08, 6.35 0.26" stroke="none" stroke-width="0" fill="#868e96"></path><path d="M4.47 0.56 C5.54 0.17, 7.49 0.19, 8.52 0.78 C9.56 1.36, 10.36 2.81, 10.69 4.08 C11.03 5.34, 10.84 7.12, 10.52 8.34 C10.19 9.56, 9.77 10.81, 8.76 11.4 C7.76 12, 5.7 12.13, 4.47 11.91 C3.24 11.68, 2.1 11.08, 1.39 10.06 C0.67 9.05, 0.13 7.09, 0.19 5.8 C0.24 4.51, 0.93 3.25, 1.7 2.32 C2.47 1.4, 4.2 0.58, 4.82 0.25 C5.43 -0.09, 5.4 0.31, 5.4 0.31 M7.19 0.21 C8.17 0.33, 9.05 1.28, 9.83 2.24 C10.62 3.21, 12 4.75, 11.9 5.98 C11.81 7.21, 10.07 8.69, 9.28 9.61 C8.49 10.53, 8.17 11.27, 7.19 11.5 C6.2 11.74, 4.42 11.7, 3.37 11.04 C2.32 10.38, 1.49 8.86, 0.9 7.55 C0.3 6.24, -0.48 4.33, -0.2 3.17 C0.07 2.01, 1.42 1, 2.55 0.58 C3.68 0.16, 6 0.8, 6.59 0.65 C7.17 0.5, 6.15 -0.46, 6.07 -0.33" stroke="#000000" stroke-width="1" fill="none"></path></g><g stroke-linecap="round" transform="translate(639.7640022044125 2971.1207211098435) rotate(357.5021844865888 5.613051577080796 6.091879242227606)"><path d="M6.61 -0.35 C7.82 -0.35, 8.94 0.54, 9.67 1.48 C10.4 2.42, 10.89 3.96, 11.01 5.28 C11.13 6.6, 11.08 8.37, 10.38 9.41 C9.67 10.45, 7.96 11.18, 6.81 11.54 C5.65 11.9, 4.45 12.14, 3.44 11.57 C2.43 10.99, 1.37 9.3, 0.77 8.09 C0.17 6.88, -0.48 5.43, -0.17 4.3 C0.14 3.17, 1.55 1.99, 2.63 1.32 C3.7 0.66, 5.64 0.56, 6.28 0.33 C6.92 0.1, 6.4 -0.13, 6.48 -0.05 M5 0.2 C6.04 -0.07, 7.25 0.43, 8.28 1.1 C9.31 1.78, 10.62 3.13, 11.19 4.25 C11.75 5.37, 12.2 6.67, 11.65 7.81 C11.1 8.95, 9.1 10.31, 7.88 11.09 C6.66 11.86, 5.52 12.63, 4.33 12.46 C3.14 12.29, 1.42 11.06, 0.73 10.07 C0.05 9.08, 0.16 7.79, 0.24 6.52 C0.32 5.26, 0.52 3.52, 1.21 2.46 C1.9 1.41, 3.77 0.46, 4.36 0.19 C4.96 -0.07, 4.89 0.86, 4.8 0.87" stroke="none" stroke-width="0" fill="#868e96"></path><path d="M7.18 0.2 C8.29 0.39, 9.4 1.6, 10 2.7 C10.61 3.8, 10.82 5.52, 10.8 6.81 C10.79 8.09, 10.71 9.57, 9.9 10.42 C9.08 11.28, 7.15 11.83, 5.91 11.95 C4.68 12.06, 3.39 11.87, 2.47 11.1 C1.55 10.34, 0.66 8.59, 0.4 7.35 C0.15 6.11, 0.47 4.76, 0.94 3.66 C1.42 2.57, 2.13 1.33, 3.25 0.78 C4.37 0.24, 6.96 0.51, 7.66 0.39 C8.35 0.26, 7.45 -0.15, 7.41 0.01 M5.87 0 C7.04 -0.05, 9.4 0.66, 10.2 1.49 C10.99 2.32, 10.51 3.75, 10.63 4.98 C10.76 6.22, 11.43 7.79, 10.96 8.9 C10.49 10.02, 8.98 11.31, 7.81 11.68 C6.63 12.05, 5.22 11.75, 3.92 11.14 C2.61 10.53, 0.67 9.14, -0.01 8.02 C-0.7 6.9, -0.55 5.48, -0.18 4.43 C0.19 3.37, 1.29 2.52, 2.22 1.69 C3.15 0.86, 4.86 -0.41, 5.41 -0.55 C5.96 -0.7, 5.3 0.69, 5.49 0.82" stroke="#000000" stroke-width="1" fill="none"></path></g><g transform="translate(581.6886506523824 2992.7108627086864) rotate(0 60.29874496153457 11.79758053595242)"><text x="60.29874496153468" y="16.271922191069216" font-family="Virgil, sans-serif, Segoe UI Emoji" font-size="17.4778970902999px" fill="#000000" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Relational DB</text></g><g stroke-linecap="round"><g transform="translate(2570.1044056674405 1691.8609164930258) rotate(0 38.35890919634494 42.45056133363005)" fill-rule="evenodd"><path d="M2.39 0.44 C2.64 13, -0.55 61.12, -0.84 74.93 C-1.14 88.75, 0.07 81.64, 0.6 83.33 C1.13 85.02, -0.5 83.57, 2.33 85.09 C5.15 86.62, 11.13 91.2, 17.55 92.47 C23.97 93.73, 33.2 93.2, 40.84 92.67 C48.49 92.14, 57.78 90.22, 63.43 89.3 C69.09 88.37, 72.69 88.01, 74.79 87.13 C76.89 86.25, 75.37 85.86, 76.03 84.02 C76.7 82.17, 78.26 89.25, 78.75 76.06 C79.24 62.87, 78.97 17.84, 78.98 4.86 C79 -8.12, 79.84 -0.58, 78.86 -1.82 C77.88 -3.07, 75.94 -1.85, 73.09 -2.6 C70.23 -3.34, 68.07 -5.66, 61.73 -6.32 C55.4 -6.99, 42.66 -6.4, 35.05 -6.59 C27.44 -6.78, 21.69 -7.63, 16.06 -7.46 C10.44 -7.28, 4.4 -6.84, 1.31 -5.57 C-1.78 -4.3, -1.85 -1.07, -2.46 0.16 C-3.07 1.4, -2.99 2.24, -2.35 1.85" stroke="none" stroke-width="0" fill="#ced4da" fill-rule="evenodd"></path><path d="M-0.1 0.39 C-0.08 12.87, -0.51 60.63, -0.32 74.5 C-0.12 88.37, 0.53 81.28, 1.1 83.59 C1.66 85.9, 0.19 87.32, 3.1 88.37 C6.01 89.42, 12.25 89.5, 18.57 89.91 C24.89 90.31, 33.4 90.74, 41.01 90.8 C48.63 90.87, 58.66 91.07, 64.27 90.3 C69.89 89.54, 72.67 87.31, 74.72 86.22 C76.77 85.12, 76.31 85.38, 76.57 83.76 C76.83 82.13, 76.38 89.51, 76.28 76.48 C76.17 63.46, 76.08 18.24, 75.94 5.61 C75.8 -7.03, 76.24 2.44, 75.43 0.67 C74.62 -1.09, 73.45 -3.75, 71.08 -4.98 C68.7 -6.21, 66.67 -6.42, 61.16 -6.71 C55.65 -7.01, 45.14 -6.51, 38.03 -6.73 C30.91 -6.96, 24.15 -8.46, 18.48 -8.06 C12.81 -7.66, 7.01 -5.86, 4.02 -4.33 C1.03 -2.8, 1.36 0.27, 0.54 1.12 C-0.28 1.96, -0.64 0.9, -0.92 0.74 M-1.61 -0.46 C-1.77 12.21, -1.98 61.46, -1.56 75.67 C-1.14 89.88, 0.16 83.04, 0.9 84.81 C1.64 86.58, 0.12 85.44, 2.89 86.29 C5.66 87.14, 10.94 88.81, 17.53 89.94 C24.11 91.06, 35.03 93.16, 42.4 93.02 C49.78 92.88, 56.58 90.31, 61.76 89.11 C66.93 87.91, 70.69 86.91, 73.47 85.84 C76.25 84.77, 77.9 84.31, 78.43 82.69 C78.96 81.08, 77.08 88.89, 76.64 76.15 C76.2 63.4, 75.69 18.79, 75.78 6.23 C75.86 -6.34, 77.92 2.24, 77.14 0.76 C76.36 -0.72, 73.85 -1.33, 71.08 -2.66 C68.31 -3.99, 65.89 -6.55, 60.5 -7.21 C55.11 -7.88, 45.54 -6.62, 38.72 -6.66 C31.91 -6.7, 25.55 -7.85, 19.62 -7.44 C13.69 -7.02, 6.49 -5.14, 3.14 -4.16 C-0.2 -3.18, -0.06 -2.49, -0.44 -1.56 C-0.82 -0.64, 1 1.38, 0.87 1.38" stroke="#000000" stroke-width="1" fill="none"></path></g></g><mask></mask><g stroke-linecap="round"><g transform="translate(2570.628335105716 1748.9872001507565) rotate(0 38.17893827908665 3.7279943957864816)"><path d="M-0.57 -0.7 C-0.03 -0.23, 1.37 1.92, 3.12 3.24 C4.87 4.55, 6.57 6.5, 9.93 7.18 C13.29 7.87, 18.15 7.29, 23.28 7.32 C28.41 7.36, 34.08 7.4, 40.71 7.4 C47.33 7.41, 57.46 8.1, 63.03 7.36 C68.6 6.62, 71.79 4.17, 74.11 2.97 C76.42 1.78, 76.55 0.74, 76.93 0.21 M1.33 1.55 C1.81 2.18, 0.9 4.06, 2.74 4.68 C4.58 5.31, 8.83 4.75, 12.37 5.32 C15.91 5.88, 19.48 7.72, 23.96 8.07 C28.43 8.41, 32.99 7.66, 39.21 7.39 C45.43 7.13, 55.4 7.44, 61.28 6.47 C67.17 5.5, 72.11 2.64, 74.52 1.59 C76.94 0.54, 75.2 0.69, 75.77 0.19" stroke="#000000" stroke-width="1" fill="none"></path></g></g><mask></mask><g stroke-linecap="round"><g transform="translate(2569.596477783212 1720.0231448155328) rotate(0 39.40902450771955 3.881830859474576)"><path d="M1.08 -0.17 C1.37 0.66, -0.59 3.36, 1.16 4.32 C2.92 5.28, 8.07 5.1, 11.62 5.59 C15.16 6.08, 17.41 6.77, 22.43 7.25 C27.44 7.72, 35.16 8.5, 41.7 8.46 C48.24 8.42, 56.22 7.79, 61.65 6.99 C67.08 6.19, 71.83 4.85, 74.29 3.65 C76.75 2.46, 76.07 0.62, 76.4 -0.17 M0.19 -1.31 C0.91 -0.74, 1.57 1.36, 3.42 2.67 C5.27 3.98, 8.07 5.67, 11.28 6.55 C14.48 7.43, 17.74 7.54, 22.65 7.95 C27.56 8.36, 34.03 9.34, 40.73 9.01 C47.43 8.67, 57.16 6.98, 62.84 5.91 C68.51 4.85, 72.17 3.68, 74.8 2.63 C77.44 1.58, 78.13 -0.09, 78.63 -0.39" stroke="#000000" stroke-width="1" fill="none"></path></g></g><mask></mask><g stroke-linecap="round" transform="translate(2568.53852880113 1684.728647867344) rotate(0 38.29876800932743 7.745637696424183)"><path d="M47.9 0.37 C55.63 0.52, 64.47 1.49, 69.28 2.74 C74.09 3.98, 77.37 6.18, 76.77 7.84 C76.18 9.51, 71.52 11.54, 65.69 12.73 C59.85 13.91, 49.9 14.8, 41.77 14.96 C33.63 15.11, 23.53 14.48, 16.88 13.68 C10.22 12.88, 4.18 11.69, 1.85 10.15 C-0.49 8.61, -0.35 6.04, 2.89 4.42 C6.12 2.8, 13.61 1.19, 21.25 0.43 C28.9 -0.33, 44.07 -0.13, 48.78 -0.13 C53.49 -0.14, 49.75 0.16, 49.49 0.39 M30.89 0.79 C38.4 0.37, 49.04 -0.33, 56.24 0.4 C63.44 1.13, 71.05 3.53, 74.09 5.15 C77.13 6.77, 77.27 8.57, 74.49 10.11 C71.71 11.66, 64.35 13.62, 57.41 14.4 C50.48 15.19, 40.81 15.1, 32.87 14.82 C24.94 14.55, 15.38 13.84, 9.8 12.78 C4.21 11.72, -0.42 10.05, -0.61 8.48 C-0.81 6.92, 3.4 4.71, 8.62 3.41 C13.84 2.11, 26.85 1.2, 30.7 0.69 C34.54 0.17, 31.59 0.28, 31.7 0.34" stroke="none" stroke-width="0" fill="#fff"></path><path d="M44.45 0.51 C52.29 0.65, 62.29 1.38, 67.64 2.56 C72.99 3.74, 76.51 5.97, 76.57 7.61 C76.63 9.24, 73.23 11.14, 68.01 12.37 C62.78 13.6, 53.39 14.7, 45.22 14.98 C37.06 15.26, 26.09 14.83, 19.02 14.05 C11.94 13.26, 5.64 11.73, 2.78 10.25 C-0.08 8.77, -0.82 6.65, 1.84 5.17 C4.5 3.68, 11.27 2.17, 18.75 1.35 C26.23 0.53, 42.03 0.36, 46.74 0.25 C51.45 0.14, 47.3 0.53, 47.01 0.69 M46.8 0.32 C54.46 0.51, 63.45 1.7, 68.52 3.05 C73.59 4.39, 77.73 6.74, 77.24 8.41 C76.75 10.07, 71.34 11.88, 65.56 13.03 C59.78 14.19, 50.74 15.25, 42.55 15.31 C34.36 15.38, 23.29 14.26, 16.43 13.45 C9.58 12.64, 3.64 11.88, 1.44 10.47 C-0.76 9.05, -0.12 6.59, 3.22 4.95 C6.56 3.3, 14.12 1.31, 21.48 0.57 C28.85 -0.17, 43.12 0.47, 47.39 0.49 C51.65 0.5, 47.12 0.57, 47.08 0.64" stroke="#000000" stroke-width="1" fill="none"></path></g><g stroke-linecap="round" transform="translate(2605.0305159063523 1709.2053155472486) rotate(0 5.613051577081023 6.091879242227606)"><path d="M6.48 -0.38 C7.61 -0.36, 9.37 0.67, 10.14 1.66 C10.91 2.66, 11.21 4.31, 11.1 5.61 C10.99 6.91, 10.21 8.45, 9.48 9.45 C8.75 10.45, 7.74 11.23, 6.7 11.6 C5.66 11.97, 4.38 12.27, 3.25 11.69 C2.12 11.1, 0.46 9.41, -0.08 8.09 C-0.62 6.76, -0.46 5.01, 0.01 3.73 C0.48 2.46, 1.68 1.05, 2.76 0.43 C3.84 -0.19, 5.91 -0.02, 6.51 -0.01 C7.11 0.01, 6.41 0.44, 6.36 0.52 M4.06 -0.51 C5.21 -0.86, 7.38 0.3, 8.53 1.05 C9.68 1.79, 10.64 2.75, 10.93 3.96 C11.23 5.17, 10.63 7.16, 10.3 8.31 C9.97 9.46, 9.85 10.24, 8.96 10.86 C8.07 11.48, 6.37 12.09, 4.98 12.03 C3.58 11.98, 1.44 11.45, 0.62 10.53 C-0.2 9.61, -0.03 7.83, 0.04 6.51 C0.1 5.2, 0.15 3.69, 1.02 2.63 C1.88 1.56, 4.69 0.5, 5.24 0.12 C5.79 -0.27, 4.32 0.14, 4.31 0.31" stroke="none" stroke-width="0" fill="#868e96"></path><path d="M5.69 -0.18 C6.88 -0.35, 8.2 0.48, 9.15 1.29 C10.1 2.1, 11.14 3.42, 11.38 4.66 C11.62 5.9, 11.28 7.59, 10.59 8.71 C9.91 9.83, 8.36 10.88, 7.29 11.37 C6.21 11.86, 5.3 12.02, 4.15 11.66 C2.99 11.3, 1.09 10.26, 0.37 9.22 C-0.35 8.17, -0.52 6.66, -0.17 5.38 C0.18 4.1, 1.57 2.39, 2.47 1.54 C3.37 0.7, 4.74 0.5, 5.24 0.3 C5.73 0.11, 5.28 0.38, 5.44 0.37 M5.75 -0.06 C7.13 0.06, 9.71 1.22, 10.57 2.21 C11.42 3.21, 10.96 4.62, 10.89 5.88 C10.82 7.14, 10.95 8.87, 10.17 9.78 C9.39 10.69, 7.42 10.97, 6.2 11.34 C4.98 11.71, 3.83 12.46, 2.84 12 C1.86 11.55, 0.73 9.98, 0.31 8.63 C-0.1 7.28, -0.05 5.16, 0.33 3.91 C0.71 2.66, 1.61 1.73, 2.6 1.14 C3.58 0.54, 5.5 0.51, 6.23 0.34 C6.96 0.17, 6.84 0.15, 6.98 0.13" stroke="#000000" stroke-width="1" fill="none"></path></g><g stroke-linecap="round" transform="translate(2605.381657690286 1735.4219298343132) rotate(0 5.613051577081023 6.091879242227606)"><path d="M6.26 -0.44 C7.39 -0.42, 8.64 0.39, 9.38 1.29 C10.12 2.19, 10.56 3.66, 10.71 4.94 C10.87 6.23, 10.84 7.79, 10.32 9 C9.79 10.22, 8.79 11.81, 7.55 12.23 C6.32 12.64, 4.11 12.14, 2.9 11.5 C1.68 10.87, 0.72 9.64, 0.27 8.43 C-0.18 7.21, -0.13 5.44, 0.18 4.21 C0.49 2.98, 1.18 1.71, 2.13 1.06 C3.08 0.4, 5.18 0.48, 5.88 0.3 C6.58 0.12, 6.3 -0.05, 6.31 -0.01 M6.82 0.31 C8.07 0.56, 9.42 1.19, 10.06 2.2 C10.7 3.21, 10.62 5.12, 10.68 6.35 C10.74 7.59, 11.05 8.67, 10.4 9.63 C9.76 10.58, 8.22 11.72, 6.81 12.09 C5.41 12.46, 3.08 12.46, 1.99 11.86 C0.9 11.26, 0.62 9.74, 0.3 8.49 C-0.03 7.23, -0.48 5.61, 0.05 4.32 C0.58 3.03, 2.44 1.42, 3.49 0.74 C4.54 0.06, 5.75 0.26, 6.35 0.26 C6.96 0.26, 7.15 0.75, 7.13 0.74" stroke="none" stroke-width="0" fill="#868e96"></path><path d="M6.69 0.02 C7.85 0.16, 9.48 0.99, 10.25 1.97 C11.02 2.94, 11.44 4.57, 11.32 5.85 C11.2 7.14, 10.28 8.68, 9.53 9.69 C8.79 10.71, 8.07 11.66, 6.86 11.94 C5.65 12.21, 3.41 11.93, 2.28 11.33 C1.15 10.73, 0.28 9.56, 0.05 8.33 C-0.18 7.1, 0.49 5.17, 0.89 3.95 C1.28 2.74, 1.51 1.64, 2.42 1.04 C3.34 0.45, 5.56 0.58, 6.4 0.39 C7.24 0.21, 7.35 -0.06, 7.45 -0.08 M6.52 0.14 C7.73 0.11, 8.22 0.65, 9.02 1.47 C9.83 2.3, 11.21 3.91, 11.35 5.1 C11.49 6.28, 10.55 7.35, 9.88 8.58 C9.2 9.81, 8.37 11.87, 7.3 12.45 C6.23 13.04, 4.56 12.7, 3.46 12.08 C2.36 11.47, 1.27 9.91, 0.7 8.75 C0.12 7.58, -0.19 6.3, 0.01 5.1 C0.21 3.9, 0.86 2.43, 1.91 1.57 C2.96 0.71, 5.56 0.26, 6.31 -0.06 C7.07 -0.37, 6.41 -0.35, 6.44 -0.32" stroke="#000000" stroke-width="1" fill="none"></path></g><g stroke-linecap="round" transform="translate(2606.0305159063523 1764.1906564056198) rotate(357.5021844865888 5.613051577081023 6.091879242227606)"><path d="M4.2 -0.24 C5.17 -0.61, 6.55 -0.42, 7.66 0.16 C8.76 0.73, 10.19 1.88, 10.81 3.2 C11.43 4.53, 11.79 6.82, 11.37 8.13 C10.94 9.43, 9.37 10.41, 8.25 11.02 C7.13 11.63, 5.77 11.99, 4.65 11.79 C3.53 11.59, 2.35 10.75, 1.54 9.84 C0.74 8.93, -0.02 7.51, -0.17 6.32 C-0.32 5.13, -0.08 3.78, 0.64 2.7 C1.36 1.62, 3.53 0.3, 4.17 -0.14 C4.81 -0.57, 4.33 0.01, 4.48 0.07 M4.54 -0.05 C5.55 -0.39, 6.62 0.21, 7.78 0.77 C8.94 1.33, 10.89 2.12, 11.49 3.33 C12.09 4.54, 11.98 6.6, 11.38 8.03 C10.78 9.46, 8.99 11.16, 7.89 11.93 C6.79 12.7, 5.93 12.87, 4.78 12.66 C3.63 12.45, 1.73 11.71, 1.01 10.64 C0.29 9.58, 0.52 7.63, 0.49 6.25 C0.45 4.88, 0.05 3.33, 0.79 2.38 C1.52 1.44, 4.32 1.04, 4.87 0.59 C5.42 0.15, 4.06 -0.32, 4.09 -0.28" stroke="none" stroke-width="0" fill="#868e96"></path><path d="M5.36 -0.3 C6.52 -0.53, 8.02 -0.02, 8.92 0.71 C9.81 1.44, 10.37 2.78, 10.74 4.08 C11.11 5.37, 11.64 7.22, 11.11 8.48 C10.59 9.74, 8.78 11.01, 7.59 11.64 C6.39 12.27, 4.94 12.6, 3.93 12.27 C2.92 11.94, 2.26 10.75, 1.52 9.68 C0.79 8.61, -0.42 7.15, -0.48 5.87 C-0.54 4.6, 0.11 3.08, 1.17 2.04 C2.24 0.99, 5.1 0.02, 5.92 -0.38 C6.73 -0.78, 6.13 -0.43, 6.06 -0.34 M5.02 -0.08 C6.07 -0.25, 8.28 0.43, 9.2 1.12 C10.13 1.81, 10.37 2.65, 10.59 4.04 C10.81 5.43, 11.01 8.13, 10.53 9.47 C10.05 10.81, 8.8 11.68, 7.7 12.05 C6.61 12.42, 5.12 12.09, 3.97 11.69 C2.81 11.28, 1.47 10.65, 0.77 9.63 C0.08 8.61, -0.45 6.92, -0.19 5.57 C0.07 4.23, 1.3 2.55, 2.33 1.55 C3.37 0.54, 5.38 -0.12, 6.01 -0.44 C6.64 -0.75, 6.12 -0.59, 6.1 -0.34" stroke="#000000" stroke-width="1" fill="none"></path></g><g transform="translate(2547.9551643543223 1785.7807980044627) rotate(0 60.298744961534794 11.79758053595242)"><text x="60.29874496153468" y="16.271922191069216" font-family="Virgil, sans-serif, Segoe UI Emoji" font-size="17.4778970902999px" fill="#000000" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Relational DB</text></g><g stroke-linecap="round"><g transform="translate(3842.22817938252 1699.270310996213) rotate(0 38.62911344153008 41.651689188571254)" fill-rule="evenodd"><path d="M2.04 1.62 C2.64 13.8, 1.71 61.91, 1.59 75.2 C1.47 88.5, 0.99 79.31, 1.32 81.37 C1.65 83.42, 0.71 86.19, 3.57 87.53 C6.43 88.88, 12 88.67, 18.49 89.42 C24.98 90.16, 34.96 91.55, 42.5 92 C50.05 92.45, 58.58 92.81, 63.76 92.13 C68.94 91.44, 71.71 89.05, 73.57 87.86 C75.43 86.67, 74.45 86.67, 74.9 85 C75.35 83.32, 76.15 90.97, 76.26 77.81 C76.37 64.65, 75.47 18.93, 75.55 6.06 C75.62 -6.82, 77.4 2.24, 76.71 0.56 C76.02 -1.12, 73.93 -2.49, 71.4 -4.01 C68.87 -5.54, 66.9 -7.82, 61.53 -8.58 C56.16 -9.34, 46.2 -9.16, 39.18 -8.56 C32.16 -7.95, 25.02 -6.18, 19.41 -4.94 C13.8 -3.7, 8.55 -2.3, 5.51 -1.12 C2.46 0.07, 1.89 1.96, 1.15 2.16 C0.41 2.36, 0.94 0.62, 1.08 0.08" stroke="none" stroke-width="0" fill="#ced4da" fill-rule="evenodd"></path><path d="M-0.5 0.46 C-0.45 12.83, 0.15 60.22, 0.41 74.21 C0.66 88.2, 0.5 82.02, 1.04 84.39 C1.59 86.75, 0.97 87.27, 3.67 88.41 C6.37 89.55, 11.03 90.61, 17.26 91.24 C23.48 91.87, 33.48 92.46, 41.02 92.19 C48.56 91.91, 56.63 90.76, 62.49 89.59 C68.34 88.42, 73.64 86.22, 76.14 85.15 C78.65 84.09, 77.48 84.66, 77.5 83.2 C77.53 81.74, 76.23 89.02, 76.31 76.39 C76.39 63.76, 78.02 20.14, 77.98 7.43 C77.94 -5.27, 76.96 1.96, 76.06 0.16 C75.17 -1.64, 74.95 -2.24, 72.6 -3.37 C70.25 -4.5, 67.84 -5.87, 61.98 -6.63 C56.12 -7.39, 44.58 -7.97, 37.43 -7.92 C30.28 -7.88, 24.56 -7.07, 19.07 -6.37 C13.58 -5.67, 7.59 -4.87, 4.49 -3.71 C1.39 -2.54, 1.4 -0.09, 0.49 0.63 C-0.43 1.34, -0.94 0.54, -1 0.58 M1.43 -0.35 C1.34 12.15, -0.36 61.44, -0.46 75.23 C-0.56 89.01, 0.11 80.52, 0.82 82.37 C1.52 84.22, 0.7 84.75, 3.76 86.35 C6.82 87.95, 12.74 91.12, 19.19 91.97 C25.63 92.83, 35.16 91.52, 42.41 91.47 C49.66 91.42, 57.16 92.28, 62.7 91.68 C68.24 91.08, 73.39 89.52, 75.64 87.88 C77.89 86.24, 76.02 83.83, 76.19 81.85 C76.37 79.87, 76.85 88.76, 76.69 76.01 C76.53 63.26, 74.99 18.02, 75.22 5.34 C75.46 -7.33, 79.02 1.52, 78.1 -0.02 C77.19 -1.55, 72.47 -2.69, 69.75 -3.86 C67.02 -5.04, 67.07 -6.32, 61.75 -7.09 C56.42 -7.86, 45.3 -8.24, 37.82 -8.48 C30.33 -8.72, 22.51 -9.4, 16.86 -8.52 C11.2 -7.65, 6.76 -4.86, 3.86 -3.21 C0.96 -1.57, 0 0.62, -0.52 1.35 C-1.04 2.07, 0.54 1.44, 0.75 1.15" stroke="#000000" stroke-width="1" fill="none"></path></g></g><mask></mask><g stroke-linecap="round"><g transform="translate(3842.7521088207955 1756.3965946539438) rotate(0 38.31654066537976 4.260122793871233)"><path d="M0.15 -0.99 C0.75 -0.4, 1.34 2.67, 3.06 4.04 C4.79 5.41, 7.35 6.45, 10.5 7.22 C13.65 7.99, 16.94 8.4, 21.97 8.66 C27.01 8.92, 34.16 9.12, 40.71 8.79 C47.25 8.45, 55.44 7.79, 61.25 6.64 C67.05 5.5, 72.76 3.08, 75.53 1.91 C78.3 0.75, 77.71 0.02, 77.86 -0.34 M-1.23 1.1 C-0.66 1.31, 0.86 1.53, 2.66 2.24 C4.46 2.95, 6.36 4.68, 9.58 5.38 C12.79 6.08, 17.02 5.76, 21.96 6.44 C26.9 7.13, 32.51 9.68, 39.22 9.5 C45.93 9.33, 56.59 6.36, 62.22 5.38 C67.86 4.4, 70.54 4.64, 73.04 3.63 C75.53 2.63, 76.36 0.22, 77.19 -0.65" stroke="#000000" stroke-width="1" fill="none"></path></g></g><mask></mask><g stroke-linecap="round"><g transform="translate(3841.7202514982914 1727.43253931872) rotate(0 39.24103411587521 4.059219947733709)"><path d="M1.03 0.62 C1.29 1.52, 0.19 3.31, 1.73 4.36 C3.28 5.41, 6.85 6.21, 10.3 6.92 C13.75 7.64, 17.49 8.49, 22.43 8.63 C27.37 8.77, 33.14 8.2, 39.92 7.75 C46.69 7.3, 57.19 6.7, 63.07 5.93 C68.96 5.16, 73 4.13, 75.22 3.1 C77.45 2.07, 75.92 0.13, 76.43 -0.26 M0.11 -0.09 C0.18 0.56, -0.9 1.9, 0.63 2.74 C2.15 3.57, 5.61 4.31, 9.28 4.92 C12.95 5.53, 17.26 5.9, 22.66 6.4 C28.06 6.9, 35.22 7.66, 41.67 7.91 C48.12 8.17, 55.59 8.98, 61.35 7.96 C67.11 6.93, 73.34 3.2, 76.23 1.78 C79.11 0.37, 78.52 -0.22, 78.68 -0.53" stroke="#000000" stroke-width="1" fill="none"></path></g></g><mask></mask><g stroke-linecap="round" transform="translate(3840.6623025162094 1692.1380423705314) rotate(0 38.29876800932743 7.745637696424183)"><path d="M39.31 0.1 C47 0.1, 57.06 1.2, 63.18 2.32 C69.31 3.45, 74.69 5.18, 76.05 6.83 C77.41 8.49, 75.54 10.83, 71.34 12.25 C67.14 13.66, 58.64 14.85, 50.87 15.33 C43.1 15.82, 32.41 15.75, 24.7 15.17 C17 14.59, 8.68 13.3, 4.65 11.84 C0.63 10.38, -1.17 8.02, 0.55 6.41 C2.27 4.8, 8.3 3.15, 14.95 2.16 C21.61 1.17, 35.99 0.83, 40.47 0.46 C44.94 0.08, 41.79 -0.2, 41.79 -0.07 M38.39 0.33 C46.31 0.32, 57.06 1.33, 63.41 2.27 C69.76 3.21, 75.13 4.4, 76.48 5.95 C77.83 7.51, 75.72 10.14, 71.52 11.62 C67.33 13.1, 59.06 14.25, 51.31 14.85 C43.57 15.45, 32.69 15.85, 25.03 15.21 C17.38 14.57, 9.58 12.4, 5.39 10.99 C1.2 9.57, -1.53 8.23, -0.11 6.71 C1.3 5.2, 7.6 2.96, 13.9 1.92 C20.19 0.88, 33.65 0.71, 37.65 0.48 C41.64 0.25, 37.78 0.43, 37.85 0.52" stroke="none" stroke-width="0" fill="#fff"></path><path d="M34.6 -0.3 C42.23 -0.49, 52.9 0.71, 59.58 1.74 C66.25 2.78, 72.37 4.43, 74.65 5.91 C76.94 7.38, 76.55 9.05, 73.29 10.6 C70.03 12.14, 62.41 14.42, 55.1 15.17 C47.8 15.92, 37.39 15.5, 29.46 15.1 C21.52 14.69, 12.33 14, 7.48 12.75 C2.63 11.5, -0.16 9.3, 0.36 7.57 C0.87 5.85, 4.59 3.61, 10.57 2.4 C16.56 1.2, 31.63 0.63, 36.28 0.34 C40.92 0.05, 38.42 0.54, 38.42 0.65 M43.75 0.63 C51.54 0.81, 60.57 2.01, 66.15 3.23 C71.72 4.45, 76.74 6.43, 77.2 7.98 C77.66 9.52, 73.97 11.41, 68.88 12.52 C63.79 13.62, 54.77 14.24, 46.65 14.59 C38.54 14.94, 27.46 15.32, 20.19 14.61 C12.91 13.89, 5.99 11.81, 3.01 10.29 C0.03 8.76, -0.2 6.89, 2.32 5.48 C4.84 4.07, 11.34 2.64, 18.15 1.82 C24.95 1, 39.02 0.73, 43.16 0.56 C47.29 0.39, 42.99 0.67, 42.95 0.8" stroke="#000000" stroke-width="1" fill="none"></path></g><g stroke-linecap="round" transform="translate(3877.154289621432 1716.6147100504359) rotate(0 5.613051577081023 6.091879242227606)"><path d="M5.06 0.38 C6.18 0.31, 7.97 0.78, 9.05 1.62 C10.13 2.46, 11.21 4.14, 11.52 5.42 C11.84 6.71, 11.51 8.23, 10.93 9.33 C10.35 10.43, 9.23 11.53, 8.04 12.02 C6.84 12.5, 5.01 12.67, 3.76 12.24 C2.52 11.8, 1.09 10.51, 0.56 9.4 C0.03 8.29, 0.33 6.82, 0.56 5.57 C0.79 4.32, 1.03 2.88, 1.94 1.91 C2.85 0.94, 5.31 -0.03, 6.02 -0.25 C6.74 -0.47, 6.29 0.45, 6.25 0.59 M6.04 0.5 C7.2 0.24, 8.69 0.13, 9.52 0.85 C10.35 1.56, 10.89 3.48, 11.01 4.79 C11.14 6.11, 10.88 7.55, 10.28 8.73 C9.67 9.91, 8.41 11.46, 7.38 11.88 C6.34 12.3, 5.27 11.61, 4.08 11.23 C2.89 10.86, 0.84 10.62, 0.24 9.65 C-0.36 8.68, 0.26 6.65, 0.46 5.39 C0.65 4.14, 0.62 2.94, 1.41 2.1 C2.19 1.26, 4.49 0.66, 5.15 0.37 C5.81 0.08, 5.36 0.19, 5.37 0.35" stroke="none" stroke-width="0" fill="#868e96"></path><path d="M5.39 0.42 C6.41 0.43, 7.75 0.97, 8.71 1.68 C9.67 2.39, 10.85 3.37, 11.16 4.68 C11.46 5.99, 11.07 8.4, 10.55 9.56 C10.03 10.72, 9.15 11.18, 8.04 11.64 C6.94 12.09, 5.1 12.64, 3.93 12.29 C2.76 11.94, 1.71 10.75, 1.04 9.56 C0.36 8.36, -0.29 6.42, -0.13 5.13 C0.03 3.83, 0.95 2.56, 1.97 1.79 C3 1.01, 5.37 0.74, 6.01 0.5 C6.66 0.26, 5.83 0.41, 5.84 0.36 M5.67 0.71 C6.9 0.77, 9.35 1.59, 10.34 2.43 C11.33 3.28, 11.6 4.67, 11.63 5.77 C11.65 6.87, 11.31 7.98, 10.5 9.02 C9.69 10.07, 7.96 11.69, 6.76 12.05 C5.55 12.41, 4.27 11.74, 3.29 11.16 C2.31 10.59, 1.38 9.64, 0.89 8.61 C0.4 7.57, 0.18 6.15, 0.38 4.96 C0.58 3.77, 1.18 2.19, 2.07 1.47 C2.96 0.74, 5.05 0.75, 5.71 0.61 C6.37 0.47, 6.02 0.65, 6.04 0.64" stroke="#000000" stroke-width="1" fill="none"></path></g><g stroke-linecap="round" transform="translate(3877.5054314053655 1742.8313243375005) rotate(0 5.613051577081023 6.091879242227606)"><path d="M5.75 0.24 C7.04 0.23, 8.83 1.18, 9.81 2.06 C10.78 2.95, 11.45 4.3, 11.61 5.56 C11.77 6.81, 11.51 8.47, 10.79 9.6 C10.07 10.72, 8.56 11.92, 7.3 12.31 C6.04 12.69, 4.26 12.41, 3.23 11.92 C2.2 11.43, 1.63 10.49, 1.12 9.37 C0.6 8.25, -0.1 6.6, 0.12 5.2 C0.33 3.81, 1.38 1.79, 2.4 1 C3.42 0.21, 5.6 0.61, 6.24 0.47 C6.89 0.32, 6.33 0.09, 6.28 0.15 M6.73 -0.36 C7.75 -0.38, 8.9 0.94, 9.59 1.92 C10.29 2.9, 10.86 4.21, 10.89 5.53 C10.91 6.86, 10.37 8.89, 9.73 9.86 C9.1 10.83, 8.29 11.01, 7.08 11.33 C5.87 11.66, 3.51 12.27, 2.48 11.82 C1.45 11.37, 1.33 9.78, 0.89 8.62 C0.45 7.46, -0.41 6.08, -0.17 4.87 C0.06 3.67, 1.23 2.16, 2.3 1.39 C3.37 0.62, 5.61 0.34, 6.24 0.26 C6.87 0.17, 6.15 0.87, 6.06 0.88" stroke="none" stroke-width="0" fill="#868e96"></path><path d="M4.17 0.38 C5.32 -0.03, 7.32 -0.17, 8.45 0.51 C9.58 1.2, 10.46 3.23, 10.95 4.48 C11.43 5.73, 11.74 6.8, 11.35 8.02 C10.96 9.25, 9.68 11.09, 8.6 11.83 C7.53 12.57, 6.14 12.76, 4.89 12.46 C3.64 12.17, 1.91 11.05, 1.1 10.04 C0.28 9.04, -0.07 7.64, 0 6.41 C0.07 5.18, 0.74 3.69, 1.52 2.66 C2.31 1.64, 4.06 0.76, 4.72 0.27 C5.38 -0.22, 5.4 -0.35, 5.49 -0.28 M7.28 0.6 C8.58 0.64, 9.64 1.43, 10.36 2.23 C11.09 3.04, 11.73 4.12, 11.63 5.43 C11.52 6.74, 10.56 9.03, 9.75 10.08 C8.94 11.14, 7.84 11.51, 6.75 11.74 C5.66 11.97, 4.24 11.96, 3.19 11.46 C2.14 10.97, 1 9.93, 0.45 8.76 C-0.1 7.58, -0.43 5.66, -0.12 4.42 C0.18 3.19, 1.19 1.99, 2.28 1.35 C3.36 0.71, 5.75 0.78, 6.41 0.58 C7.07 0.38, 6.19 0.08, 6.23 0.15" stroke="#000000" stroke-width="1" fill="none"></path></g><g stroke-linecap="round" transform="translate(3878.154289621432 1771.6000509088071) rotate(357.5021844865888 5.613051577081023 6.091879242227606)"><path d="M7.06 0.56 C8.29 0.72, 9.63 1.51, 10.39 2.49 C11.16 3.46, 11.76 5.07, 11.68 6.4 C11.59 7.73, 10.77 9.49, 9.88 10.48 C8.98 11.46, 7.4 12.1, 6.29 12.32 C5.18 12.54, 4.22 12.43, 3.22 11.8 C2.22 11.17, 0.74 9.89, 0.29 8.53 C-0.15 7.18, 0.1 4.89, 0.56 3.67 C1.02 2.45, 2 1.81, 3.03 1.22 C4.07 0.62, 6.13 0.23, 6.75 0.11 C7.37 0, 6.72 0.33, 6.74 0.51 M6.46 0.13 C7.46 0.29, 8.82 0.96, 9.55 1.97 C10.28 2.99, 10.73 4.98, 10.82 6.2 C10.91 7.42, 10.88 8.26, 10.08 9.28 C9.28 10.31, 7.13 11.98, 5.99 12.34 C4.86 12.71, 4.27 12.07, 3.27 11.47 C2.26 10.86, 0.49 9.89, -0.04 8.71 C-0.56 7.54, -0.34 5.7, 0.13 4.43 C0.59 3.15, 1.73 1.67, 2.78 1.07 C3.82 0.47, 5.84 1.01, 6.38 0.8 C6.92 0.6, 6.04 -0.04, 6.02 -0.15" stroke="none" stroke-width="0" fill="#868e96"></path><path d="M6.79 -0.18 C8.01 0.03, 9.27 1.74, 10.09 2.8 C10.9 3.85, 11.71 4.83, 11.69 6.13 C11.67 7.44, 10.82 9.56, 9.98 10.62 C9.15 11.68, 7.92 12.38, 6.66 12.5 C5.41 12.61, 3.5 12.01, 2.44 11.31 C1.37 10.61, 0.59 9.48, 0.28 8.31 C-0.02 7.15, 0.19 5.54, 0.61 4.32 C1.02 3.09, 1.67 1.7, 2.77 0.94 C3.86 0.18, 6.44 -0.16, 7.19 -0.25 C7.94 -0.34, 7.27 0.3, 7.27 0.4 M7.26 0.15 C8.35 0.14, 9.84 0.63, 10.48 1.67 C11.12 2.71, 11.18 5.04, 11.1 6.4 C11.01 7.77, 10.68 8.89, 9.96 9.87 C9.24 10.84, 7.97 11.93, 6.77 12.27 C5.56 12.6, 3.88 12.51, 2.71 11.86 C1.55 11.22, 0.25 9.64, -0.23 8.38 C-0.71 7.12, -0.66 5.51, -0.15 4.3 C0.35 3.1, 1.7 1.86, 2.8 1.15 C3.9 0.45, 5.76 0.18, 6.45 0.07 C7.13 -0.03, 6.86 0.42, 6.9 0.53" stroke="#000000" stroke-width="1" fill="none"></path></g><g transform="translate(3820.078938069402 1793.19019250765) rotate(0 60.298744961534794 11.79758053595242)"><text x="60.29874496153468" y="16.271922191069216" font-family="Virgil, sans-serif, Segoe UI Emoji" font-size="17.4778970902999px" fill="#000000" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Relational DB</text></g><g stroke-linecap="round" transform="translate(908.7132443471055 1600.6262038749082) rotate(0 28.222539535441456 3.981083812338966)"><path d="M56.45 3.98 C56.45 4.21, 56.3 4.45, 56.02 4.67 C55.73 4.9, 55.3 5.13, 54.74 5.34 C54.18 5.56, 53.48 5.77, 52.66 5.97 C51.85 6.17, 50.89 6.36, 49.84 6.54 C48.79 6.72, 47.62 6.88, 46.36 7.03 C45.11 7.18, 43.75 7.31, 42.33 7.43 C40.92 7.54, 39.41 7.64, 37.88 7.72 C36.34 7.8, 34.73 7.86, 33.12 7.9 C31.51 7.94, 29.86 7.96, 28.22 7.96 C26.59 7.96, 24.93 7.94, 23.32 7.9 C21.71 7.86, 20.1 7.8, 18.57 7.72 C17.03 7.64, 15.53 7.54, 14.11 7.43 C12.7 7.31, 11.33 7.18, 10.08 7.03 C8.83 6.88, 7.65 6.72, 6.6 6.54 C5.55 6.36, 4.6 6.17, 3.78 5.97 C2.96 5.77, 2.26 5.56, 1.7 5.34 C1.14 5.13, 0.71 4.9, 0.43 4.67 C0.15 4.45, 0 4.21, 0 3.98 C0 3.75, 0.15 3.52, 0.43 3.29 C0.71 3.06, 1.14 2.84, 1.7 2.62 C2.26 2.4, 2.96 2.19, 3.78 1.99 C4.6 1.79, 5.55 1.6, 6.6 1.42 C7.65 1.25, 8.83 1.08, 10.08 0.93 C11.33 0.78, 12.7 0.65, 14.11 0.53 C15.53 0.42, 17.03 0.32, 18.57 0.24 C20.1 0.16, 21.71 0.1, 23.32 0.06 C24.93 0.02, 26.59 0, 28.22 0 C29.86 0, 31.51 0.02, 33.12 0.06 C34.73 0.1, 36.34 0.16, 37.88 0.24 C39.41 0.32, 40.92 0.42, 42.33 0.53 C43.75 0.65, 45.11 0.78, 46.36 0.93 C47.62 1.08, 48.79 1.25, 49.84 1.42 C50.89 1.6, 51.85 1.79, 52.66 1.99 C53.48 2.19, 54.18 2.4, 54.74 2.62 C55.3 2.84, 55.73 3.06, 56.02 3.29 C56.3 3.52, 56.37 3.87, 56.45 3.98 C56.52 4.1, 56.52 3.87, 56.45 3.98" stroke="#000000" stroke-width="1" fill="none"></path></g><g stroke-linecap="round" transform="translate(908.6607985650235 1631.761652551124) rotate(0 28.27220487479758 5.355234727136576)"><path d="M56.54 5.36 C56.54 5.67, 56.4 5.98, 56.11 6.29 C55.83 6.59, 55.4 6.9, 54.84 7.19 C54.28 7.48, 53.57 7.76, 52.76 8.03 C51.94 8.3, 50.98 8.56, 49.93 8.8 C48.88 9.03, 47.7 9.26, 46.45 9.46 C45.19 9.66, 43.83 9.84, 42.41 9.99 C40.99 10.15, 39.48 10.28, 37.94 10.39 C36.4 10.49, 34.79 10.58, 33.18 10.63 C31.57 10.68, 29.91 10.71, 28.27 10.71 C26.64 10.71, 24.97 10.68, 23.36 10.63 C21.75 10.58, 20.14 10.49, 18.6 10.39 C17.06 10.28, 15.55 10.15, 14.14 9.99 C12.72 9.84, 11.35 9.66, 10.1 9.46 C8.85 9.26, 7.67 9.03, 6.61 8.8 C5.56 8.56, 4.61 8.3, 3.79 8.03 C2.97 7.76, 2.26 7.48, 1.71 7.19 C1.15 6.9, 0.71 6.59, 0.43 6.29 C0.15 5.98, 0 5.67, 0 5.36 C0 5.05, 0.15 4.73, 0.43 4.43 C0.71 4.12, 1.15 3.81, 1.71 3.52 C2.26 3.23, 2.97 2.95, 3.79 2.68 C4.61 2.41, 5.56 2.15, 6.61 1.91 C7.67 1.68, 8.85 1.45, 10.1 1.25 C11.35 1.05, 12.72 0.87, 14.14 0.72 C15.55 0.56, 17.06 0.43, 18.6 0.32 C20.14 0.22, 21.75 0.14, 23.36 0.08 C24.97 0.03, 26.64 0, 28.27 0 C29.91 0, 31.57 0.03, 33.18 0.08 C34.79 0.14, 36.4 0.22, 37.94 0.32 C39.48 0.43, 40.99 0.56, 42.41 0.72 C43.83 0.87, 45.19 1.05, 46.45 1.25 C47.7 1.45, 48.88 1.68, 49.93 1.91 C50.98 2.15, 51.94 2.41, 52.76 2.68 C53.57 2.95, 54.28 3.23, 54.84 3.52 C55.4 3.81, 55.83 4.12, 56.11 4.43 C56.4 4.73, 56.47 5.2, 56.54 5.36 C56.62 5.51, 56.62 5.2, 56.54 5.36" stroke="#000000" stroke-width="1" fill="none"></path></g><g stroke-linecap="round" transform="translate(909.4306207695954 1628.0934946565121) rotate(0 27.541892257558402 3.5506253626040234)"><path d="M0 0 L55.08 0 L55.08 7.1 L0 7.1" stroke="none" stroke-width="0" fill="#fff"></path><path d="M0 0 C18.42 0, 36.84 0, 55.08 0 M0 0 C17.45 0, 34.9 0, 55.08 0 M55.08 0 C55.08 2.41, 55.08 4.82, 55.08 7.1 M55.08 0 C55.08 2.04, 55.08 4.09, 55.08 7.1 M55.08 7.1 C38.6 7.1, 22.13 7.1, 0 7.1 M55.08 7.1 C33.35 7.1, 11.62 7.1, 0 7.1 M0 7.1 C0 4.53, 0 1.95, 0 0 M0 7.1 C0 4.59, 0 2.08, 0 0" stroke="#ffff" stroke-width="4" fill="none"></path></g><g stroke-linecap="round"><g transform="translate(965.1159535522115 1604.5326493806442) rotate(0 0.09082359643457494 16.279229815313556)"><path d="M0 0 C0.03 5.43, 0.15 27.13, 0.18 32.56 M0 0 C0.03 5.43, 0.15 27.13, 0.18 32.56" stroke="#000000" stroke-width="1" fill="none"></path></g></g><mask></mask><g stroke-linecap="round"><g transform="translate(908.7777812287563 1604.767226915681) rotate(0 -0.05050712476895569 16.412570788787434)"><path d="M0 0 C-0.02 5.47, -0.08 27.35, -0.1 32.83 M0 0 C-0.02 5.47, -0.08 27.35, -0.1 32.83" stroke="#000000" stroke-width="1" fill="none"></path></g></g><mask></mask><g transform="translate(910.0780238754569 1644.3129365759632) rotate(0 28.125 12.5)"><text x="0" y="17.619999999999997" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Cache</text></g><g stroke-linecap="round" transform="translate(603.7997159312945 2809.975454280804) rotate(0 28.222539535441456 3.981083812338966)"><path d="M56.45 3.98 C56.45 4.21, 56.3 4.45, 56.02 4.67 C55.73 4.9, 55.3 5.13, 54.74 5.34 C54.18 5.56, 53.48 5.77, 52.66 5.97 C51.85 6.17, 50.89 6.36, 49.84 6.54 C48.79 6.72, 47.62 6.88, 46.36 7.03 C45.11 7.18, 43.75 7.31, 42.33 7.43 C40.92 7.54, 39.41 7.64, 37.88 7.72 C36.34 7.8, 34.73 7.86, 33.12 7.9 C31.51 7.94, 29.86 7.96, 28.22 7.96 C26.59 7.96, 24.93 7.94, 23.32 7.9 C21.71 7.86, 20.1 7.8, 18.57 7.72 C17.03 7.64, 15.53 7.54, 14.11 7.43 C12.7 7.31, 11.33 7.18, 10.08 7.03 C8.83 6.88, 7.65 6.72, 6.6 6.54 C5.55 6.36, 4.6 6.17, 3.78 5.97 C2.96 5.77, 2.26 5.56, 1.7 5.34 C1.14 5.13, 0.71 4.9, 0.43 4.67 C0.15 4.45, 0 4.21, 0 3.98 C0 3.75, 0.15 3.52, 0.43 3.29 C0.71 3.06, 1.14 2.84, 1.7 2.62 C2.26 2.4, 2.96 2.19, 3.78 1.99 C4.6 1.79, 5.55 1.6, 6.6 1.42 C7.65 1.25, 8.83 1.08, 10.08 0.93 C11.33 0.78, 12.7 0.65, 14.11 0.53 C15.53 0.42, 17.03 0.32, 18.57 0.24 C20.1 0.16, 21.71 0.1, 23.32 0.06 C24.93 0.02, 26.59 0, 28.22 0 C29.86 0, 31.51 0.02, 33.12 0.06 C34.73 0.1, 36.34 0.16, 37.88 0.24 C39.41 0.32, 40.92 0.42, 42.33 0.53 C43.75 0.65, 45.11 0.78, 46.36 0.93 C47.62 1.08, 48.79 1.25, 49.84 1.42 C50.89 1.6, 51.85 1.79, 52.66 1.99 C53.48 2.19, 54.18 2.4, 54.74 2.62 C55.3 2.84, 55.73 3.06, 56.02 3.29 C56.3 3.52, 56.37 3.87, 56.45 3.98 C56.52 4.1, 56.52 3.87, 56.45 3.98" stroke="#000000" stroke-width="1" fill="none"></path></g><g stroke-linecap="round" transform="translate(603.7472701492125 2841.11090295702) rotate(0 28.27220487479758 5.355234727136576)"><path d="M56.54 5.36 C56.54 5.67, 56.4 5.98, 56.11 6.29 C55.83 6.59, 55.4 6.9, 54.84 7.19 C54.28 7.48, 53.57 7.76, 52.76 8.03 C51.94 8.3, 50.98 8.56, 49.93 8.8 C48.88 9.03, 47.7 9.26, 46.45 9.46 C45.19 9.66, 43.83 9.84, 42.41 9.99 C40.99 10.15, 39.48 10.28, 37.94 10.39 C36.4 10.49, 34.79 10.58, 33.18 10.63 C31.57 10.68, 29.91 10.71, 28.27 10.71 C26.64 10.71, 24.97 10.68, 23.36 10.63 C21.75 10.58, 20.14 10.49, 18.6 10.39 C17.06 10.28, 15.55 10.15, 14.14 9.99 C12.72 9.84, 11.35 9.66, 10.1 9.46 C8.85 9.26, 7.67 9.03, 6.61 8.8 C5.56 8.56, 4.61 8.3, 3.79 8.03 C2.97 7.76, 2.26 7.48, 1.71 7.19 C1.15 6.9, 0.71 6.59, 0.43 6.29 C0.15 5.98, 0 5.67, 0 5.36 C0 5.05, 0.15 4.73, 0.43 4.43 C0.71 4.12, 1.15 3.81, 1.71 3.52 C2.26 3.23, 2.97 2.95, 3.79 2.68 C4.61 2.41, 5.56 2.15, 6.61 1.91 C7.67 1.68, 8.85 1.45, 10.1 1.25 C11.35 1.05, 12.72 0.87, 14.14 0.72 C15.55 0.56, 17.06 0.43, 18.6 0.32 C20.14 0.22, 21.75 0.14, 23.36 0.08 C24.97 0.03, 26.64 0, 28.27 0 C29.91 0, 31.57 0.03, 33.18 0.08 C34.79 0.14, 36.4 0.22, 37.94 0.32 C39.48 0.43, 40.99 0.56, 42.41 0.72 C43.83 0.87, 45.19 1.05, 46.45 1.25 C47.7 1.45, 48.88 1.68, 49.93 1.91 C50.98 2.15, 51.94 2.41, 52.76 2.68 C53.57 2.95, 54.28 3.23, 54.84 3.52 C55.4 3.81, 55.83 4.12, 56.11 4.43 C56.4 4.73, 56.47 5.2, 56.54 5.36 C56.62 5.51, 56.62 5.2, 56.54 5.36" stroke="#000000" stroke-width="1" fill="none"></path></g><g stroke-linecap="round" transform="translate(604.5170923537844 2837.442745062408) rotate(0 27.541892257558402 3.5506253626040234)"><path d="M0 0 L55.08 0 L55.08 7.1 L0 7.1" stroke="none" stroke-width="0" fill="#fff"></path><path d="M0 0 C16.78 0, 33.56 0, 55.08 0 M0 0 C13.42 0, 26.84 0, 55.08 0 M55.08 0 C55.08 2.21, 55.08 4.41, 55.08 7.1 M55.08 0 C55.08 2.68, 55.08 5.36, 55.08 7.1 M55.08 7.1 C33.57 7.1, 12.05 7.1, 0 7.1 M55.08 7.1 C40.55 7.1, 26.02 7.1, 0 7.1 M0 7.1 C0 5.07, 0 3.04, 0 0 M0 7.1 C0 5.35, 0 3.61, 0 0" stroke="#ffff" stroke-width="4" fill="none"></path></g><g stroke-linecap="round"><g transform="translate(660.2024251364005 2813.88189978654) rotate(0 0.09082359643457494 16.279229815313556)"><path d="M0 0 C0.03 5.43, 0.15 27.13, 0.18 32.56 M0 0 C0.03 5.43, 0.15 27.13, 0.18 32.56" stroke="#000000" stroke-width="1" fill="none"></path></g></g><mask></mask><g stroke-linecap="round"><g transform="translate(603.8642528129453 2814.116477321577) rotate(0 -0.05050712476895569 16.412570788787434)"><path d="M0 0 C-0.02 5.47, -0.08 27.35, -0.1 32.83 M0 0 C-0.02 5.47, -0.08 27.35, -0.1 32.83" stroke="#000000" stroke-width="1" fill="none"></path></g></g><mask></mask><g transform="translate(605.1644954596459 2853.662186981859) rotate(0 28.125 12.5)"><text x="0" y="17.619999999999997" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Cache</text></g><g stroke-linecap="round" transform="translate(2570.0662296332343 1603.0453895765804) rotate(0 28.22253953544123 3.981083812338966)"><path d="M56.45 3.98 C56.45 4.21, 56.3 4.45, 56.02 4.67 C55.73 4.9, 55.3 5.13, 54.74 5.34 C54.18 5.56, 53.48 5.77, 52.66 5.97 C51.85 6.17, 50.89 6.36, 49.84 6.54 C48.79 6.72, 47.62 6.88, 46.36 7.03 C45.11 7.18, 43.75 7.31, 42.33 7.43 C40.92 7.54, 39.41 7.64, 37.88 7.72 C36.34 7.8, 34.73 7.86, 33.12 7.9 C31.51 7.94, 29.86 7.96, 28.22 7.96 C26.59 7.96, 24.93 7.94, 23.32 7.9 C21.71 7.86, 20.1 7.8, 18.57 7.72 C17.03 7.64, 15.53 7.54, 14.11 7.43 C12.7 7.31, 11.33 7.18, 10.08 7.03 C8.83 6.88, 7.65 6.72, 6.6 6.54 C5.55 6.36, 4.6 6.17, 3.78 5.97 C2.96 5.77, 2.26 5.56, 1.7 5.34 C1.14 5.13, 0.71 4.9, 0.43 4.67 C0.15 4.45, 0 4.21, 0 3.98 C0 3.75, 0.15 3.52, 0.43 3.29 C0.71 3.06, 1.14 2.84, 1.7 2.62 C2.26 2.4, 2.96 2.19, 3.78 1.99 C4.6 1.79, 5.55 1.6, 6.6 1.42 C7.65 1.25, 8.83 1.08, 10.08 0.93 C11.33 0.78, 12.7 0.65, 14.11 0.53 C15.53 0.42, 17.03 0.32, 18.57 0.24 C20.1 0.16, 21.71 0.1, 23.32 0.06 C24.93 0.02, 26.59 0, 28.22 0 C29.86 0, 31.51 0.02, 33.12 0.06 C34.73 0.1, 36.34 0.16, 37.88 0.24 C39.41 0.32, 40.92 0.42, 42.33 0.53 C43.75 0.65, 45.11 0.78, 46.36 0.93 C47.62 1.08, 48.79 1.25, 49.84 1.42 C50.89 1.6, 51.85 1.79, 52.66 1.99 C53.48 2.19, 54.18 2.4, 54.74 2.62 C55.3 2.84, 55.73 3.06, 56.02 3.29 C56.3 3.52, 56.37 3.87, 56.45 3.98 C56.52 4.1, 56.52 3.87, 56.45 3.98" stroke="#000000" stroke-width="1" fill="none"></path></g><g stroke-linecap="round" transform="translate(2570.0137838511523 1634.180838252796) rotate(0 28.272204874797353 5.355234727136576)"><path d="M56.54 5.36 C56.54 5.67, 56.4 5.98, 56.11 6.29 C55.83 6.59, 55.4 6.9, 54.84 7.19 C54.28 7.48, 53.57 7.76, 52.76 8.03 C51.94 8.3, 50.98 8.56, 49.93 8.8 C48.88 9.03, 47.7 9.26, 46.45 9.46 C45.19 9.66, 43.83 9.84, 42.41 9.99 C40.99 10.15, 39.48 10.28, 37.94 10.39 C36.4 10.49, 34.79 10.58, 33.18 10.63 C31.57 10.68, 29.91 10.71, 28.27 10.71 C26.64 10.71, 24.97 10.68, 23.36 10.63 C21.75 10.58, 20.14 10.49, 18.6 10.39 C17.06 10.28, 15.55 10.15, 14.14 9.99 C12.72 9.84, 11.35 9.66, 10.1 9.46 C8.85 9.26, 7.67 9.03, 6.61 8.8 C5.56 8.56, 4.61 8.3, 3.79 8.03 C2.97 7.76, 2.26 7.48, 1.71 7.19 C1.15 6.9, 0.71 6.59, 0.43 6.29 C0.15 5.98, 0 5.67, 0 5.36 C0 5.05, 0.15 4.73, 0.43 4.43 C0.71 4.12, 1.15 3.81, 1.71 3.52 C2.26 3.23, 2.97 2.95, 3.79 2.68 C4.61 2.41, 5.56 2.15, 6.61 1.91 C7.67 1.68, 8.85 1.45, 10.1 1.25 C11.35 1.05, 12.72 0.87, 14.14 0.72 C15.55 0.56, 17.06 0.43, 18.6 0.32 C20.14 0.22, 21.75 0.14, 23.36 0.08 C24.97 0.03, 26.64 0, 28.27 0 C29.91 0, 31.57 0.03, 33.18 0.08 C34.79 0.14, 36.4 0.22, 37.94 0.32 C39.48 0.43, 40.99 0.56, 42.41 0.72 C43.83 0.87, 45.19 1.05, 46.45 1.25 C47.7 1.45, 48.88 1.68, 49.93 1.91 C50.98 2.15, 51.94 2.41, 52.76 2.68 C53.57 2.95, 54.28 3.23, 54.84 3.52 C55.4 3.81, 55.83 4.12, 56.11 4.43 C56.4 4.73, 56.47 5.2, 56.54 5.36 C56.62 5.51, 56.62 5.2, 56.54 5.36" stroke="#000000" stroke-width="1" fill="none"></path></g><g stroke-linecap="round" transform="translate(2570.7836060557242 1630.5126803581843) rotate(0 27.54189225755863 3.5506253626040234)"><path d="M0 0 L55.08 0 L55.08 7.1 L0 7.1" stroke="none" stroke-width="0" fill="#fff"></path><path d="M0 0 C12.97 0, 25.94 0, 55.08 0 M0 0 C12.01 0, 24.01 0, 55.08 0 M55.08 0 C55.08 2.56, 55.08 5.11, 55.08 7.1 M55.08 0 C55.08 2.22, 55.08 4.44, 55.08 7.1 M55.08 7.1 C37.23 7.1, 19.39 7.1, 0 7.1 M55.08 7.1 C36.08 7.1, 17.08 7.1, 0 7.1 M0 7.1 C0 4.48, 0 1.86, 0 0 M0 7.1 C0 4.57, 0 2.03, 0 0" stroke="#ffff" stroke-width="4" fill="none"></path></g><g stroke-linecap="round"><g transform="translate(2626.468938838341 1606.9518350823164) rotate(0 0.09082359643480231 16.279229815313556)"><path d="M0 0 C0.03 5.43, 0.15 27.13, 0.18 32.56 M0 0 C0.03 5.43, 0.15 27.13, 0.18 32.56" stroke="#000000" stroke-width="1" fill="none"></path></g></g><mask></mask><g stroke-linecap="round"><g transform="translate(2570.1307665148847 1607.1864126173532) rotate(0 -0.05050712476895569 16.412570788787434)"><path d="M0 0 C-0.02 5.47, -0.08 27.35, -0.1 32.83 M0 0 C-0.02 5.47, -0.08 27.35, -0.1 32.83" stroke="#000000" stroke-width="1" fill="none"></path></g></g><mask></mask><g transform="translate(2571.4310091615857 1646.7321222776354) rotate(0 28.125 12.5)"><text x="0" y="17.619999999999997" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Cache</text></g><g stroke-linecap="round" transform="translate(1755.5242107087483 1606.6631439057455) rotate(0 28.22253953544123 3.981083812338966)"><path d="M56.45 3.98 C56.45 4.21, 56.3 4.45, 56.02 4.67 C55.73 4.9, 55.3 5.13, 54.74 5.34 C54.18 5.56, 53.48 5.77, 52.66 5.97 C51.85 6.17, 50.89 6.36, 49.84 6.54 C48.79 6.72, 47.62 6.88, 46.36 7.03 C45.11 7.18, 43.75 7.31, 42.33 7.43 C40.92 7.54, 39.41 7.64, 37.88 7.72 C36.34 7.8, 34.73 7.86, 33.12 7.9 C31.51 7.94, 29.86 7.96, 28.22 7.96 C26.59 7.96, 24.93 7.94, 23.32 7.9 C21.71 7.86, 20.1 7.8, 18.57 7.72 C17.03 7.64, 15.53 7.54, 14.11 7.43 C12.7 7.31, 11.33 7.18, 10.08 7.03 C8.83 6.88, 7.65 6.72, 6.6 6.54 C5.55 6.36, 4.6 6.17, 3.78 5.97 C2.96 5.77, 2.26 5.56, 1.7 5.34 C1.14 5.13, 0.71 4.9, 0.43 4.67 C0.15 4.45, 0 4.21, 0 3.98 C0 3.75, 0.15 3.52, 0.43 3.29 C0.71 3.06, 1.14 2.84, 1.7 2.62 C2.26 2.4, 2.96 2.19, 3.78 1.99 C4.6 1.79, 5.55 1.6, 6.6 1.42 C7.65 1.25, 8.83 1.08, 10.08 0.93 C11.33 0.78, 12.7 0.65, 14.11 0.53 C15.53 0.42, 17.03 0.32, 18.57 0.24 C20.1 0.16, 21.71 0.1, 23.32 0.06 C24.93 0.02, 26.59 0, 28.22 0 C29.86 0, 31.51 0.02, 33.12 0.06 C34.73 0.1, 36.34 0.16, 37.88 0.24 C39.41 0.32, 40.92 0.42, 42.33 0.53 C43.75 0.65, 45.11 0.78, 46.36 0.93 C47.62 1.08, 48.79 1.25, 49.84 1.42 C50.89 1.6, 51.85 1.79, 52.66 1.99 C53.48 2.19, 54.18 2.4, 54.74 2.62 C55.3 2.84, 55.73 3.06, 56.02 3.29 C56.3 3.52, 56.37 3.87, 56.45 3.98 C56.52 4.1, 56.52 3.87, 56.45 3.98" stroke="#000000" stroke-width="1" fill="none"></path></g><g stroke-linecap="round" transform="translate(1755.4717649266663 1637.7985925819612) rotate(0 28.272204874797353 5.355234727136576)"><path d="M56.54 5.36 C56.54 5.67, 56.4 5.98, 56.11 6.29 C55.83 6.59, 55.4 6.9, 54.84 7.19 C54.28 7.48, 53.57 7.76, 52.76 8.03 C51.94 8.3, 50.98 8.56, 49.93 8.8 C48.88 9.03, 47.7 9.26, 46.45 9.46 C45.19 9.66, 43.83 9.84, 42.41 9.99 C40.99 10.15, 39.48 10.28, 37.94 10.39 C36.4 10.49, 34.79 10.58, 33.18 10.63 C31.57 10.68, 29.91 10.71, 28.27 10.71 C26.64 10.71, 24.97 10.68, 23.36 10.63 C21.75 10.58, 20.14 10.49, 18.6 10.39 C17.06 10.28, 15.55 10.15, 14.14 9.99 C12.72 9.84, 11.35 9.66, 10.1 9.46 C8.85 9.26, 7.67 9.03, 6.61 8.8 C5.56 8.56, 4.61 8.3, 3.79 8.03 C2.97 7.76, 2.26 7.48, 1.71 7.19 C1.15 6.9, 0.71 6.59, 0.43 6.29 C0.15 5.98, 0 5.67, 0 5.36 C0 5.05, 0.15 4.73, 0.43 4.43 C0.71 4.12, 1.15 3.81, 1.71 3.52 C2.26 3.23, 2.97 2.95, 3.79 2.68 C4.61 2.41, 5.56 2.15, 6.61 1.91 C7.67 1.68, 8.85 1.45, 10.1 1.25 C11.35 1.05, 12.72 0.87, 14.14 0.72 C15.55 0.56, 17.06 0.43, 18.6 0.32 C20.14 0.22, 21.75 0.14, 23.36 0.08 C24.97 0.03, 26.64 0, 28.27 0 C29.91 0, 31.57 0.03, 33.18 0.08 C34.79 0.14, 36.4 0.22, 37.94 0.32 C39.48 0.43, 40.99 0.56, 42.41 0.72 C43.83 0.87, 45.19 1.05, 46.45 1.25 C47.7 1.45, 48.88 1.68, 49.93 1.91 C50.98 2.15, 51.94 2.41, 52.76 2.68 C53.57 2.95, 54.28 3.23, 54.84 3.52 C55.4 3.81, 55.83 4.12, 56.11 4.43 C56.4 4.73, 56.47 5.2, 56.54 5.36 C56.62 5.51, 56.62 5.2, 56.54 5.36" stroke="#000000" stroke-width="1" fill="none"></path></g><g stroke-linecap="round" transform="translate(1756.2415871312382 1634.1304346873494) rotate(0 27.54189225755863 3.5506253626040234)"><path d="M0 0 L55.08 0 L55.08 7.1 L0 7.1" stroke="none" stroke-width="0" fill="#fff"></path><path d="M0 0 C17.68 0, 35.37 0, 55.08 0 M0 0 C12.59 0, 25.18 0, 55.08 0 M55.08 0 C55.08 1.69, 55.08 3.38, 55.08 7.1 M55.08 0 C55.08 1.46, 55.08 2.93, 55.08 7.1 M55.08 7.1 C42.66 7.1, 30.23 7.1, 0 7.1 M55.08 7.1 C41.46 7.1, 27.84 7.1, 0 7.1 M0 7.1 C0 5.36, 0 3.62, 0 0 M0 7.1 C0 5.28, 0 3.47, 0 0" stroke="#ffff" stroke-width="4" fill="none"></path></g><g stroke-linecap="round"><g transform="translate(1811.9269199138548 1610.5695894114815) rotate(0 0.09082359643480231 16.279229815313556)"><path d="M0 0 C0.03 5.43, 0.15 27.13, 0.18 32.56 M0 0 C0.03 5.43, 0.15 27.13, 0.18 32.56" stroke="#000000" stroke-width="1" fill="none"></path></g></g><mask></mask><g stroke-linecap="round"><g transform="translate(1755.5887475903987 1610.8041669465183) rotate(0 -0.05050712476895569 16.412570788787434)"><path d="M0 0 C-0.02 5.47, -0.08 27.35, -0.1 32.83 M0 0 C-0.02 5.47, -0.08 27.35, -0.1 32.83" stroke="#000000" stroke-width="1" fill="none"></path></g></g><mask></mask><g transform="translate(1756.8889902370997 1650.3498766068005) rotate(0 28.125 12.5)"><text x="0" y="17.619999999999997" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Cache</text></g><g stroke-linecap="round" transform="translate(3848.627288796755 1607.7166471062455) rotate(0 28.22253953544123 3.981083812338966)"><path d="M56.45 3.98 C56.45 4.21, 56.3 4.45, 56.02 4.67 C55.73 4.9, 55.3 5.13, 54.74 5.34 C54.18 5.56, 53.48 5.77, 52.66 5.97 C51.85 6.17, 50.89 6.36, 49.84 6.54 C48.79 6.72, 47.62 6.88, 46.36 7.03 C45.11 7.18, 43.75 7.31, 42.33 7.43 C40.92 7.54, 39.41 7.64, 37.88 7.72 C36.34 7.8, 34.73 7.86, 33.12 7.9 C31.51 7.94, 29.86 7.96, 28.22 7.96 C26.59 7.96, 24.93 7.94, 23.32 7.9 C21.71 7.86, 20.1 7.8, 18.57 7.72 C17.03 7.64, 15.53 7.54, 14.11 7.43 C12.7 7.31, 11.33 7.18, 10.08 7.03 C8.83 6.88, 7.65 6.72, 6.6 6.54 C5.55 6.36, 4.6 6.17, 3.78 5.97 C2.96 5.77, 2.26 5.56, 1.7 5.34 C1.14 5.13, 0.71 4.9, 0.43 4.67 C0.15 4.45, 0 4.21, 0 3.98 C0 3.75, 0.15 3.52, 0.43 3.29 C0.71 3.06, 1.14 2.84, 1.7 2.62 C2.26 2.4, 2.96 2.19, 3.78 1.99 C4.6 1.79, 5.55 1.6, 6.6 1.42 C7.65 1.25, 8.83 1.08, 10.08 0.93 C11.33 0.78, 12.7 0.65, 14.11 0.53 C15.53 0.42, 17.03 0.32, 18.57 0.24 C20.1 0.16, 21.71 0.1, 23.32 0.06 C24.93 0.02, 26.59 0, 28.22 0 C29.86 0, 31.51 0.02, 33.12 0.06 C34.73 0.1, 36.34 0.16, 37.88 0.24 C39.41 0.32, 40.92 0.42, 42.33 0.53 C43.75 0.65, 45.11 0.78, 46.36 0.93 C47.62 1.08, 48.79 1.25, 49.84 1.42 C50.89 1.6, 51.85 1.79, 52.66 1.99 C53.48 2.19, 54.18 2.4, 54.74 2.62 C55.3 2.84, 55.73 3.06, 56.02 3.29 C56.3 3.52, 56.37 3.87, 56.45 3.98 C56.52 4.1, 56.52 3.87, 56.45 3.98" stroke="#000000" stroke-width="1" fill="none"></path></g><g stroke-linecap="round" transform="translate(3848.5748430146728 1638.8520957824612) rotate(0 28.272204874797353 5.355234727136576)"><path d="M56.54 5.36 C56.54 5.67, 56.4 5.98, 56.11 6.29 C55.83 6.59, 55.4 6.9, 54.84 7.19 C54.28 7.48, 53.57 7.76, 52.76 8.03 C51.94 8.3, 50.98 8.56, 49.93 8.8 C48.88 9.03, 47.7 9.26, 46.45 9.46 C45.19 9.66, 43.83 9.84, 42.41 9.99 C40.99 10.15, 39.48 10.28, 37.94 10.39 C36.4 10.49, 34.79 10.58, 33.18 10.63 C31.57 10.68, 29.91 10.71, 28.27 10.71 C26.64 10.71, 24.97 10.68, 23.36 10.63 C21.75 10.58, 20.14 10.49, 18.6 10.39 C17.06 10.28, 15.55 10.15, 14.14 9.99 C12.72 9.84, 11.35 9.66, 10.1 9.46 C8.85 9.26, 7.67 9.03, 6.61 8.8 C5.56 8.56, 4.61 8.3, 3.79 8.03 C2.97 7.76, 2.26 7.48, 1.71 7.19 C1.15 6.9, 0.71 6.59, 0.43 6.29 C0.15 5.98, 0 5.67, 0 5.36 C0 5.05, 0.15 4.73, 0.43 4.43 C0.71 4.12, 1.15 3.81, 1.71 3.52 C2.26 3.23, 2.97 2.95, 3.79 2.68 C4.61 2.41, 5.56 2.15, 6.61 1.91 C7.67 1.68, 8.85 1.45, 10.1 1.25 C11.35 1.05, 12.72 0.87, 14.14 0.72 C15.55 0.56, 17.06 0.43, 18.6 0.32 C20.14 0.22, 21.75 0.14, 23.36 0.08 C24.97 0.03, 26.64 0, 28.27 0 C29.91 0, 31.57 0.03, 33.18 0.08 C34.79 0.14, 36.4 0.22, 37.94 0.32 C39.48 0.43, 40.99 0.56, 42.41 0.72 C43.83 0.87, 45.19 1.05, 46.45 1.25 C47.7 1.45, 48.88 1.68, 49.93 1.91 C50.98 2.15, 51.94 2.41, 52.76 2.68 C53.57 2.95, 54.28 3.23, 54.84 3.52 C55.4 3.81, 55.83 4.12, 56.11 4.43 C56.4 4.73, 56.47 5.2, 56.54 5.36 C56.62 5.51, 56.62 5.2, 56.54 5.36" stroke="#000000" stroke-width="1" fill="none"></path></g><g stroke-linecap="round" transform="translate(3849.3446652192447 1635.1839378878494) rotate(0 27.54189225755863 3.5506253626040234)"><path d="M0 0 L55.08 0 L55.08 7.1 L0 7.1" stroke="none" stroke-width="0" fill="#fff"></path><path d="M0 0 C16.47 0, 32.94 0, 55.08 0 M0 0 C12.8 0, 25.59 0, 55.08 0 M55.08 0 C55.08 1.68, 55.08 3.36, 55.08 7.1 M55.08 0 C55.08 1.83, 55.08 3.65, 55.08 7.1 M55.08 7.1 C38.94 7.1, 22.79 7.1, 0 7.1 M55.08 7.1 C35.36 7.1, 15.64 7.1, 0 7.1 M0 7.1 C0 4.45, 0 1.79, 0 0 M0 7.1 C0 4.86, 0 2.63, 0 0" stroke="#ffff" stroke-width="4" fill="none"></path></g><g stroke-linecap="round"><g transform="translate(3905.0299980018613 1611.6230926119815) rotate(0 0.09082359643480231 16.279229815313556)"><path d="M0 0 C0.03 5.43, 0.15 27.13, 0.18 32.56 M0 0 C0.03 5.43, 0.15 27.13, 0.18 32.56" stroke="#000000" stroke-width="1" fill="none"></path></g></g><mask></mask><g stroke-linecap="round"><g transform="translate(3848.691825678405 1611.8576701470183) rotate(0 -0.05050712476895569 16.412570788787434)"><path d="M0 0 C-0.02 5.47, -0.08 27.35, -0.1 32.83 M0 0 C-0.02 5.47, -0.08 27.35, -0.1 32.83" stroke="#000000" stroke-width="1" fill="none"></path></g></g><mask></mask><g transform="translate(3849.992068325106 1651.4033798073006) rotate(0 28.125 12.5)"><text x="0" y="17.619999999999997" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Cache</text></g><g stroke-linecap="round" transform="translate(853.8233477472818 1533.629839948866) rotate(0 105.5113771958836 169.96923671918694)"><path d="M32 0 C89.59 1.74, 147.08 1.64, 179.02 0 M32 0 C88.22 1.72, 144.2 1.99, 179.02 0 M179.02 0 C198.65 0.4, 211.94 8.82, 211.02 32 M179.02 0 C198.42 -0.01, 212.95 9.99, 211.02 32 M211.02 32 C208.24 112.41, 208.87 192.66, 211.02 307.94 M211.02 32 C212.48 110.62, 212.17 189.27, 211.02 307.94 M211.02 307.94 C210.55 331.04, 201.03 340.14, 179.02 339.94 M211.02 307.94 C212.36 328.95, 198.11 342.16, 179.02 339.94 M179.02 339.94 C148.03 339.31, 118 341.08, 32 339.94 M179.02 339.94 C141.75 340.75, 103.21 339.63, 32 339.94 M32 339.94 C11.69 337.96, -1.95 328.24, 0 307.94 M32 339.94 C10.2 339.21, 0.72 330.37, 0 307.94 M0 307.94 C-1.56 200.49, -2.06 94.97, 0 32 M0 307.94 C1.87 237.14, 0.49 165.57, 0 32 M0 32 C0.06 11.61, 11.86 1.36, 32 0 M0 32 C0.77 11.78, 9.88 1.9, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g stroke-linecap="round" transform="translate(508.47770617469087 2708.607624171129) rotate(0 105.5113771958836 169.96923671918694)"><path d="M32 0 C70.86 -1.56, 110.07 0.32, 179.02 0 M32 0 C79.15 -1.29, 124.89 -0.6, 179.02 0 M179.02 0 C202.35 0.57, 212.35 10.92, 211.02 32 M179.02 0 C199.91 -0.06, 213.11 9.97, 211.02 32 M211.02 32 C208.4 95.42, 209.09 157.35, 211.02 307.94 M211.02 32 C209.02 95.63, 209.27 160.19, 211.02 307.94 M211.02 307.94 C209.41 327.76, 198.99 341.76, 179.02 339.94 M211.02 307.94 C212.93 328.03, 198.39 341.83, 179.02 339.94 M179.02 339.94 C129.09 338.18, 76.4 337.96, 32 339.94 M179.02 339.94 C140.28 340.6, 101.93 341.49, 32 339.94 M32 339.94 C10.84 341.22, -1.55 327.63, 0 307.94 M32 339.94 C10.6 340.3, 1.55 328.28, 0 307.94 M0 307.94 C1.81 211.66, -0.42 115.47, 0 32 M0 307.94 C-1.5 224.73, -1.14 141.18, 0 32 M0 32 C1.9 10.15, 8.84 -0.5, 32 0 M0 32 C-1.46 11.7, 8.55 -0.24, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g stroke-linecap="round" transform="translate(2474.7442198766307 1501.6775594669052) rotate(0 105.5113771958836 169.96923671918694)"><path d="M32 0 C79.13 -0.53, 120.26 0.34, 179.02 0 M32 0 C61.75 -0.81, 92.11 -1.3, 179.02 0 M179.02 0 C198.43 -0.36, 212.97 11.02, 211.02 32 M179.02 0 C199.32 -0.25, 211.58 10.26, 211.02 32 M211.02 32 C210.14 96.12, 209.66 160.57, 211.02 307.94 M211.02 32 C210.46 106.99, 211.24 181.37, 211.02 307.94 M211.02 307.94 C212.75 328.09, 202.32 338.69, 179.02 339.94 M211.02 307.94 C212.51 330.59, 200.97 339.76, 179.02 339.94 M179.02 339.94 C148.07 336.98, 116.18 336.63, 32 339.94 M179.02 339.94 C134.24 340.15, 88.01 340.44, 32 339.94 M32 339.94 C9.26 340, -1.7 328.57, 0 307.94 M32 339.94 C10.12 337.77, 1.14 327.52, 0 307.94 M0 307.94 C2.64 237.37, 0.11 169.7, 0 32 M0 307.94 C-0.57 219.12, 0.65 129.69, 0 32 M0 32 C1.21 10.57, 9.02 1.65, 32 0 M0 32 C0.1 12.35, 9.52 1.68, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g stroke-linecap="round" transform="translate(1692.8550938265957 1517.325326960342) rotate(0 105.5113771958836 169.96923671918694)"><path d="M32 0 C71.8 -1.37, 110.61 -2.46, 179.02 0 M32 0 C78.23 -1.53, 123.43 -2.33, 179.02 0 M179.02 0 C200.33 -0.98, 211.57 8.67, 211.02 32 M179.02 0 C199.09 0.3, 209.31 11.38, 211.02 32 M211.02 32 C209.82 105.55, 209.72 177.26, 211.02 307.94 M211.02 32 C211.36 121.89, 210.44 210.54, 211.02 307.94 M211.02 307.94 C210.22 327.66, 201.37 340.83, 179.02 339.94 M211.02 307.94 C210.57 328.26, 198.72 341.97, 179.02 339.94 M179.02 339.94 C120.03 340.96, 62.15 341.1, 32 339.94 M179.02 339.94 C138.36 338.75, 99.83 339.58, 32 339.94 M32 339.94 C12.16 338.12, 0.39 329.47, 0 307.94 M32 339.94 C11.15 338.78, 1.54 330.6, 0 307.94 M0 307.94 C2.73 235.86, 2.68 164.52, 0 32 M0 307.94 C0.53 229.16, 0.23 149.09, 0 32 M0 32 C0.65 11.24, 10.24 0.94, 32 0 M0 32 C1.59 10.43, 12.91 1.81, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g stroke-linecap="round" transform="translate(3753.305279040151 1506.3488169965703) rotate(0 105.5113771958836 169.96923671918694)"><path d="M32 0 C69.79 1.33, 105.59 -1.87, 179.02 0 M32 0 C82 -0.12, 130.62 -0.23, 179.02 0 M179.02 0 C198.44 -1.08, 210.05 9.6, 211.02 32 M179.02 0 C200.03 -0.24, 210.87 8.94, 211.02 32 M211.02 32 C210.88 124.31, 212.35 220.55, 211.02 307.94 M211.02 32 C210.99 123.16, 211.13 213.86, 211.02 307.94 M211.02 307.94 C212.42 330, 199.55 338.28, 179.02 339.94 M211.02 307.94 C209.64 329.62, 202.43 339.62, 179.02 339.94 M179.02 339.94 C140.65 339.51, 99.23 340.32, 32 339.94 M179.02 339.94 C139.16 340.19, 98.98 340.35, 32 339.94 M32 339.94 C11.75 341, 1.58 330.88, 0 307.94 M32 339.94 C9.04 339.22, -0.51 328.81, 0 307.94 M0 307.94 C-1.24 204.59, 0.91 100.25, 0 32 M0 307.94 C1.26 239.96, 1.94 171.38, 0 32 M0 32 C-0.07 8.87, 10.53 -1.86, 32 0 M0 32 C-0.44 12.44, 11.27 2.04, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g stroke-linecap="round"><g transform="translate(1747.3639607518476 1697.0206468798751) rotate(0 38.31844984909685 41.7098175061692)" fill-rule="evenodd"><path d="M-1.12 -2.01 C-1.32 10.89, 0.52 61.67, 0.58 75.8 C0.64 89.93, -1.14 81.25, -0.76 82.78 C-0.37 84.31, 0.1 84.09, 2.91 85 C5.72 85.9, 9.46 87.48, 16.11 88.21 C22.76 88.94, 35.08 89.31, 42.81 89.4 C50.55 89.48, 56.99 89.59, 62.51 88.73 C68.02 87.87, 73.13 85.15, 75.9 84.22 C78.67 83.29, 78.9 84.2, 79.12 83.14 C79.33 82.09, 77.43 90.42, 77.19 77.89 C76.95 65.35, 77.55 20.88, 77.69 7.93 C77.83 -5.01, 79.05 2.04, 78.04 0.23 C77.03 -1.57, 74.55 -1.52, 71.64 -2.87 C68.73 -4.22, 66.58 -6.79, 60.59 -7.86 C54.59 -8.93, 42.61 -9.63, 35.64 -9.27 C28.68 -8.91, 24.07 -7, 18.8 -5.7 C13.53 -4.41, 7.35 -2.16, 4.03 -1.51 C0.72 -0.85, -0.51 -2.11, -1.1 -1.76 C-1.69 -1.41, 0.07 0.17, 0.49 0.6" stroke="none" stroke-width="0" fill="#ced4da" fill-rule="evenodd"></path><path d="M0.93 -1.15 C0.77 11.54, -0.22 61.68, -0.47 75.98 C-0.72 90.28, -1.41 82.74, -0.55 84.64 C0.32 86.54, 1.61 86.45, 4.72 87.41 C7.82 88.37, 11.97 89.57, 18.08 90.41 C24.2 91.26, 33.73 92.59, 41.4 92.49 C49.08 92.4, 58.59 91.07, 64.14 89.87 C69.69 88.66, 72.7 86.51, 74.72 85.27 C76.74 84.02, 75.69 83.86, 76.26 82.39 C76.83 80.91, 77.94 89.11, 78.14 76.41 C78.35 63.72, 77.91 19.03, 77.48 6.21 C77.05 -6.61, 76.51 1.2, 75.57 -0.52 C74.64 -2.23, 74.1 -2.96, 71.87 -4.07 C69.64 -5.18, 67.82 -6.34, 62.2 -7.18 C56.57 -8.01, 45.6 -9.16, 38.1 -9.07 C30.6 -8.99, 22.98 -7.59, 17.22 -6.65 C11.46 -5.72, 6.43 -4.58, 3.55 -3.48 C0.67 -2.38, 0.38 -0.58, -0.08 -0.06 C-0.54 0.46, 0.64 -0.5, 0.79 -0.36 M-0.03 0.87 C0.14 13.24, 2.12 60.66, 1.86 74.31 C1.6 87.97, -2.19 80.44, -1.61 82.81 C-1.02 85.18, 2.29 87.21, 5.36 88.54 C8.42 89.87, 11.12 90.19, 16.79 90.77 C22.46 91.35, 31.9 92.38, 39.37 92 C46.83 91.62, 55.9 89.76, 61.59 88.5 C67.29 87.25, 70.78 85.14, 73.52 84.45 C76.25 83.75, 77.61 85.71, 78 84.32 C78.4 82.92, 75.85 88.95, 75.88 76.09 C75.9 63.23, 77.92 20, 78.17 7.14 C78.43 -5.71, 78.38 0.96, 77.41 -1.05 C76.44 -3.07, 74.89 -3.79, 72.34 -4.93 C69.79 -6.07, 67.7 -7.65, 62.12 -7.92 C56.54 -8.2, 46.26 -7.01, 38.86 -6.58 C31.46 -6.14, 23.78 -5.92, 17.71 -5.3 C11.63 -4.68, 5.61 -3.8, 2.43 -2.87 C-0.76 -1.94, -0.95 -0.13, -1.38 0.3 C-1.82 0.73, -0.71 -0.14, -0.18 -0.29" stroke="#000000" stroke-width="1" fill="none"></path></g></g><mask></mask><g stroke-linecap="round" transform="translate(1746.8702930099075 1688.2497202562408) rotate(0 38.25211272446222 7.73620201606218)"><path d="M39.49 0.35 C47.24 0.26, 57.5 0.95, 63.63 1.97 C69.77 3, 75.14 4.91, 76.3 6.49 C77.45 8.06, 74.91 9.98, 70.56 11.43 C66.22 12.88, 57.87 14.57, 50.21 15.18 C42.54 15.79, 32.09 15.75, 24.56 15.09 C17.03 14.43, 9.06 12.69, 5.03 11.23 C1 9.77, -1.18 7.85, 0.4 6.31 C1.97 4.77, 7.66 3.09, 14.49 1.98 C21.31 0.87, 36.66 -0.15, 41.36 -0.36 C46.06 -0.58, 42.85 0.44, 42.7 0.69 M33.19 0.2 C40.85 -0.26, 51.16 -0.31, 58.08 0.46 C65 1.24, 72.07 3.12, 74.72 4.85 C77.36 6.59, 77.02 9.25, 73.92 10.88 C70.83 12.51, 63.51 13.96, 56.14 14.65 C48.77 15.34, 37.63 15.29, 29.71 15 C21.78 14.7, 13.42 14.2, 8.57 12.86 C3.71 11.52, 0.32 8.74, 0.59 6.96 C0.86 5.17, 4.95 3.41, 10.2 2.14 C15.45 0.87, 28.4 -0.22, 32.09 -0.66 C35.79 -1.1, 32.07 -0.64, 32.36 -0.48" stroke="none" stroke-width="0" fill="#fff"></path><path d="M33.82 0.2 C41.43 -0.11, 52.32 0.49, 59.24 1.44 C66.15 2.39, 72.97 4.35, 75.33 5.89 C77.68 7.43, 76.75 9.23, 73.37 10.66 C69.99 12.09, 62.41 13.61, 55.05 14.46 C47.68 15.31, 37.06 16.06, 29.16 15.76 C21.27 15.46, 12.54 14.12, 7.68 12.65 C2.82 11.19, -0.42 8.63, 0.02 6.96 C0.47 5.29, 4.44 3.69, 10.33 2.62 C16.22 1.54, 30.98 0.87, 35.35 0.52 C39.72 0.17, 36.58 0.53, 36.55 0.5 M39.79 0 C47.65 -0.05, 58.36 0.6, 64.51 1.79 C70.66 2.99, 75.59 5.59, 76.69 7.19 C77.79 8.79, 75.65 10.17, 71.12 11.39 C66.59 12.61, 57.4 13.87, 49.51 14.49 C41.63 15.11, 31.38 15.68, 23.81 15.1 C16.25 14.53, 8.01 12.68, 4.14 11.06 C0.26 9.43, -1.15 7.05, 0.56 5.36 C2.27 3.67, 7.75 1.91, 14.38 0.92 C21.02 -0.08, 36.17 -0.44, 40.37 -0.62 C44.56 -0.81, 39.63 -0.33, 39.56 -0.2" stroke="#000000" stroke-width="1" fill="none"></path></g><g transform="translate(1765.872871371546 1722.9366764310917) rotate(0 8.5 18)"><text x="0" y="28.129784375097728" font-family="Cascadia, monospace, Segoe UI Emoji" font-size="29.219434366479078px" fill="#495057" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">{</text></g><g transform="translate(1787.8837447172914 1723.413386403011) rotate(0 8.472599895867006 17.97218159729391)"><text x="0" y="28.159196392589983" font-family="Cascadia, monospace, Segoe UI Emoji" font-size="29.384515916572173px" fill="#495057" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">}</text></g><g transform="translate(1725.896314464199 1789.0387319188176) rotate(0 59.69121013267977 12.933095528747344)"><text x="59.69121013267966" y="17.58297925904312" font-family="Virgil, sans-serif, Segoe UI Emoji" font-size="18.16360832146819px" fill="#000000" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Document DB</text></g><g stroke-linecap="round" transform="translate(2093.5884902472776 3860.8557241796643) rotate(0 593.0776464566657 158.4248507658217)"><path d="M32 0 C475.25 0.59, 917.02 0.52, 1154.16 0 M32 0 C287.37 1.67, 543.42 1.93, 1154.16 0 M1154.16 0 C1173.53 1.7, 1187.6 12.58, 1186.16 32 M1154.16 0 C1173.57 -0.55, 1187.96 12.92, 1186.16 32 M1186.16 32 C1183.81 112.33, 1185.33 193.6, 1186.16 284.85 M1186.16 32 C1188.26 131.86, 1187.98 232.28, 1186.16 284.85 M1186.16 284.85 C1185.31 307.8, 1175.69 315.75, 1154.16 316.85 M1186.16 284.85 C1187.14 307.19, 1173.3 317.86, 1154.16 316.85 M1154.16 316.85 C744.96 317.61, 334.93 318.01, 32 316.85 M1154.16 316.85 C788.97 315.12, 423.79 315.08, 32 316.85 M32 316.85 C10.3 317.83, 0.54 305.11, 0 284.85 M32 316.85 C11.29 318.59, 0.87 306.11, 0 284.85 M0 284.85 C2 225.39, -0.11 166.16, 0 32 M0 284.85 C1.87 196.9, 2.02 109.08, 0 32 M0 32 C-0.6 12.48, 12.16 -1.09, 32 0 M0 32 C-0.52 12.05, 9.3 2.06, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(2477.182799301599 4001.7805749454865) rotate(0 209.48333740234375 17.5)"><text x="209.48333740234375" y="24.668" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="28px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Pushers / Consumers/ Workers</text></g><g stroke-linecap="round" transform="translate(2291.58489956089 4361.370958821486) rotate(0 352.619816240378 148.99428855227234)"><path d="M32 0 C208.47 1.12, 386.48 1.13, 673.24 0 M32 0 C273.37 -1.44, 515.56 -1.55, 673.24 0 M673.24 0 C695.14 -1.15, 706.79 11.46, 705.24 32 M673.24 0 C692.74 0.39, 704.18 8.64, 705.24 32 M705.24 32 C706.46 115.47, 704.03 198.99, 705.24 265.99 M705.24 32 C705.43 116.14, 704.78 199.84, 705.24 265.99 M705.24 265.99 C705.3 285.63, 695.5 298.43, 673.24 297.99 M705.24 265.99 C703.5 288.38, 692.91 298.71, 673.24 297.99 M673.24 297.99 C461.78 300.27, 251.64 300.61, 32 297.99 M673.24 297.99 C543.91 297.47, 415.12 297.85, 32 297.99 M32 297.99 C11.26 299.48, 1.46 286.21, 0 265.99 M32 297.99 C11.19 298.87, 1.47 287.45, 0 265.99 M0 265.99 C2.55 181.27, 0.38 97.86, 0 32 M0 265.99 C0.2 184.56, -0.78 101.14, 0 32 M0 32 C1.72 12.59, 12.23 0.8, 32 0 M0 32 C1.84 10.27, 9.97 -0.48, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(2573.088047100096 4492.865247373758) rotate(0 71.11666870117188 17.5)"><text x="71.11666870117188" y="24.668" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="28px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Driver App</text></g><g stroke-linecap="round" transform="translate(1814.8031761936195 4821.597761238505) rotate(0 859.2003973181036 87.74108103633807)"><path d="M32 0 C628.6 -3.32, 1224.33 -4.59, 1686.4 0 M32 0 C422.15 5.88, 812.38 6.27, 1686.4 0 M1686.4 0 C1706.14 0.34, 1717.48 8.91, 1718.4 32 M1686.4 0 C1709.05 -0.46, 1718.17 12.86, 1718.4 32 M1718.4 32 C1719.07 64.4, 1716.91 98.63, 1718.4 143.48 M1718.4 32 C1718.24 62.03, 1718.68 93.96, 1718.4 143.48 M1718.4 143.48 C1716.89 165.74, 1706.29 176.11, 1686.4 175.48 M1718.4 143.48 C1719.07 165.72, 1709.62 174.36, 1686.4 175.48 M1686.4 175.48 C1153.4 178.98, 621.95 179.15, 32 175.48 M1686.4 175.48 C1351.79 175.64, 1017.24 175.12, 32 175.48 M32 175.48 C11.12 176.25, 1.28 164.92, 0 143.48 M32 175.48 C12.1 173.5, -0.79 165.98, 0 143.48 M0 143.48 C1.89 109.7, 0.51 76.4, 0 32 M0 143.48 C1.91 102.55, 1.83 60.08, 0 32 M0 32 C1.6 10.32, 10.06 -0.41, 32 0 M0 32 C-2.11 8.48, 9.2 1.2, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(2598.136904810551 4864.338842274843) rotate(0 75.86666870117188 45)"><text x="75.86666870117188" y="31.716" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="36px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic"></text><text x="75.86666870117188" y="76.71600000000001" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="36px" fill="#1e1e1e" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Gateway</text></g><g stroke-linecap="round" transform="translate(1322.776357491246 2655.766877256633) rotate(0 311.7644992447392 448.9847894052764)"><path d="M32 0 C144.84 -0.2, 258.92 0.64, 591.53 0 M32 0 C157.14 0.53, 283.03 0.94, 591.53 0 M591.53 0 C614.16 -0.56, 625.35 9.27, 623.53 32 M591.53 0 C615.01 -0.82, 624.6 11.05, 623.53 32 M623.53 32 C620.04 235.01, 619.76 436.75, 623.53 865.97 M623.53 32 C626.66 340.2, 626.12 648.04, 623.53 865.97 M623.53 865.97 C623.7 887.83, 614.05 897.94, 591.53 897.97 M623.53 865.97 C624.36 888.88, 611.01 899.63, 591.53 897.97 M591.53 897.97 C474.79 899.26, 358.04 898.39, 32 897.97 M591.53 897.97 C443.01 898.44, 294.99 898.21, 32 897.97 M32 897.97 C12.54 896.27, -0.79 889.3, 0 865.97 M32 897.97 C10.02 898.8, -1.95 888.52, 0 865.97 M0 865.97 C1.72 620.51, 2.06 373.69, 0 32 M0 865.97 C-2.03 662.77, -1.74 458.45, 0 32 M0 32 C0.17 9.58, 11.46 1.72, 32 0 M0 32 C-2.24 12.1, 10.45 2.25, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g stroke-linecap="round" transform="translate(2070.4726373942917 2654.7892540437897) rotate(0 311.76449924473945 448.9847894052764)"><path d="M32 0 C221.17 -1.89, 408.41 -1.41, 591.53 0 M32 0 C165.39 -2.44, 298.54 -2.26, 591.53 0 M591.53 0 C613.66 1.72, 621.58 11.91, 623.53 32 M591.53 0 C612.64 2.25, 621.58 12.87, 623.53 32 M623.53 32 C624.91 204.51, 624.27 379.06, 623.53 865.97 M623.53 32 C624.57 308.01, 624.14 584.5, 623.53 865.97 M623.53 865.97 C624.74 887.1, 611.82 896.46, 591.53 897.97 M623.53 865.97 C624.04 885.63, 610.61 897.87, 591.53 897.97 M591.53 897.97 C409.43 899.27, 228.42 899.74, 32 897.97 M591.53 897.97 C467.19 896.68, 342.55 896.21, 32 897.97 M32 897.97 C8.79 898.49, -1.07 886.9, 0 865.97 M32 897.97 C10.79 898.96, -2.14 885.15, 0 865.97 M0 865.97 C1.95 536.91, 2.15 208.64, 0 32 M0 865.97 C-1.02 588.19, -0.78 310.41, 0 32 M0 32 C-0.45 10.46, 11.8 -0.64, 32 0 M0 32 C1.24 9.01, 10.67 1.24, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g stroke-linecap="round" transform="translate(2752.3031780202796 2629.660859762693) rotate(0 311.76449924473945 448.9847894052764)"><path d="M32 0 C217.25 -1.46, 401.69 -0.4, 591.53 0 M32 0 C202.39 0.73, 372.73 0.72, 591.53 0 M591.53 0 C611.42 0, 624.61 9.55, 623.53 32 M591.53 0 C613.16 -1.03, 622.41 8.81, 623.53 32 M623.53 32 C621.2 363.97, 622.27 697.68, 623.53 865.97 M623.53 32 C623.51 201.86, 623.32 372.09, 623.53 865.97 M623.53 865.97 C624.46 886.7, 613.8 896.35, 591.53 897.97 M623.53 865.97 C622.85 885.51, 614.21 899.62, 591.53 897.97 M591.53 897.97 C405.42 899.73, 218.19 899.59, 32 897.97 M591.53 897.97 C390.65 898.04, 189.89 897.88, 32 897.97 M32 897.97 C11.56 896.46, 1.48 888.95, 0 865.97 M32 897.97 C9.5 896.82, 0.11 887.93, 0 865.97 M0 865.97 C-0.25 568.79, -1.14 271.04, 0 32 M0 865.97 C-0.25 556.55, 0.23 246.69, 0 32 M0 32 C-1.03 12.47, 8.79 0.35, 32 0 M0 32 C1.45 10.18, 11.75 1.86, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g stroke-linecap="round" transform="translate(3504.390507208463 2622.0966626221443) rotate(0 311.76449924473945 448.9847894052764)"><path d="M32 0 C212.09 -0.42, 390.87 -1.47, 591.53 0 M32 0 C221.05 0.32, 409.85 0.2, 591.53 0 M591.53 0 C613.94 0.18, 623.93 11.3, 623.53 32 M591.53 0 C612.88 -1.18, 622.54 8.69, 623.53 32 M623.53 32 C622.39 340.59, 622.76 649.75, 623.53 865.97 M623.53 32 C622.23 264.94, 621.82 498.14, 623.53 865.97 M623.53 865.97 C622.76 888.16, 614.5 897.34, 591.53 897.97 M623.53 865.97 C624.18 886.11, 612.16 898.66, 591.53 897.97 M591.53 897.97 C372.83 897.4, 152.44 898.81, 32 897.97 M591.53 897.97 C441.89 895.87, 291.87 895.67, 32 897.97 M32 897.97 C12.07 899.12, 0.47 887.25, 0 865.97 M32 897.97 C12.6 897.58, 0.61 886.26, 0 865.97 M0 865.97 C2.38 578.68, 2.31 291.53, 0 32 M0 865.97 C0.25 637.64, 0.14 408.56, 0 32 M0 32 C0.62 10.62, 11.72 0.16, 32 0 M0 32 C-1.57 12.63, 11.78 1.5, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g stroke-linecap="round" transform="translate(4179.634473906746 2640.878761192419) rotate(0 311.76449924473945 448.9847894052764)"><path d="M32 0 C200.82 2.51, 369.71 1.65, 591.53 0 M32 0 C152.32 0.64, 272.37 1.26, 591.53 0 M591.53 0 C613.33 -0.05, 625.21 10.33, 623.53 32 M591.53 0 C613.47 -1.04, 624.55 9.18, 623.53 32 M623.53 32 C624.64 239.11, 624.28 446.73, 623.53 865.97 M623.53 32 C620.83 314.95, 621.34 598.69, 623.53 865.97 M623.53 865.97 C624.58 887.46, 611.49 899.68, 591.53 897.97 M623.53 865.97 C624.64 888.8, 612.92 899.42, 591.53 897.97 M591.53 897.97 C416.78 895.76, 241.85 896.34, 32 897.97 M591.53 897.97 C419.27 899.82, 246.74 899.84, 32 897.97 M32 897.97 C12.59 899.37, 1.07 888.7, 0 865.97 M32 897.97 C12.36 896.11, -0.87 887.93, 0 865.97 M0 865.97 C-2.33 662.68, -2.67 459.53, 0 32 M0 865.97 C2 534.95, 1.6 204.38, 0 32 M0 32 C-0.02 11.38, 11.7 -1.36, 32 0 M0 32 C1.39 11.95, 11.52 -2.05, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g stroke-linecap="round" transform="translate(308.60512978306724 248.81457166821338) rotate(0 2397.514855238349 2483.4755473176892)"><path d="M32 0 C1602.72 11.61, 3171.54 11.15, 4763.03 0 M32 0 C1705.92 -18.17, 3380.21 -18.9, 4763.03 0 M4763.03 0 C4782.92 -1.82, 4796.44 9.45, 4795.03 32 M4763.03 0 C4786.59 -1.88, 4793.19 11.84, 4795.03 32 M4795.03 32 C4799.27 1845.18, 4799.48 3659.45, 4795.03 4934.95 M4795.03 32 C4796.81 1656.55, 4796.44 3281.99, 4795.03 4934.95 M4795.03 4934.95 C4794.79 4957.98, 4782.51 4966.35, 4763.03 4966.95 M4795.03 4934.95 C4794.43 4954.29, 4782.18 4967.27, 4763.03 4966.95 M4763.03 4966.95 C3164.37 4953.02, 1564.81 4954.19, 32 4966.95 M4763.03 4966.95 C3471.33 4959.68, 2178.97 4959.48, 32 4966.95 M32 4966.95 C11.8 4966.12, -0.34 4957.48, 0 4934.95 M32 4966.95 C10.36 4966.04, -0.17 4957.49, 0 4934.95 M0 4934.95 C-1.73 3738.31, -1.53 2542.34, 0 32 M0 4934.95 C15.29 3467.36, 15.61 1999.95, 0 32 M0 32 C0.72 11.18, 9.74 0.96, 32 0 M0 32 C-1.17 11.65, 9.58 2.16, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g stroke-linecap="round" transform="translate(50.660740162620186 10) rotate(0 4055 2825)"><path d="M32 0 C2231.38 1.14, 4431.54 0.88, 8078 0 M32 0 C1860.08 25.37, 3688.01 24.97, 8078 0 M8078 0 C8100.46 1.18, 8111.81 10.91, 8110 32 M8078 0 C8098.7 2.15, 8108.72 10.6, 8110 32 M8110 32 C8117.25 1305.78, 8118.17 2579.07, 8110 5618 M8110 32 C8126.91 1429.96, 8126.82 2827.85, 8110 5618 M8110 5618 C8111.98 5638.96, 8098.08 5649.37, 8078 5650 M8110 5618 C8108.75 5637.95, 8100.71 5649.9, 8078 5650 M8078 5650 C4897.46 5633.9, 1715.64 5633.18, 32 5650 M8078 5650 C6425.78 5627.44, 4773.98 5627.45, 32 5650 M32 5650 C10.11 5649.8, -1.72 5638.76, 0 5618 M32 5650 C10.19 5651.42, -0.07 5638.59, 0 5618 M0 5618 C-3.36 3511.61, -3.57 1404.17, 0 32 M0 5618 C-14.65 4430.2, -14.2 3242.17, 0 32 M0 32 C1.69 11.27, 10.11 -1.57, 32 0 M0 32 C-0.73 8.75, 10.56 -1.69, 32 0" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(5095.102221071706 5330.130523652543) rotate(0 1455.1096292832672 77.02766577968305)"><text x="0" y="108.57819768304125" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="123.2442652474929px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Multiple of Same Setup replicated across regions</text></g></svg>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment