Skip to main content
← Wednesday's Workflows

Onboarding Automation System Architecture πŸ—οΈ

From 10 to 10,000 employees with 6 agents, ML evaluation, and SOC2 compliance

September 25, 2025
21 min read
πŸ‘₯ HR TechπŸ—οΈ ArchitectureπŸ“Š ScalableπŸ”’ SOC2
🎯This Week's Journey

From prompts to production onboarding system.

Monday: 3 core prompts. Tuesday: automation code. Wednesday: team workflows. Thursday: complete technical architecture. 6 specialized agents, ML evaluation pipeline, HRIS integration, PII compliance, and scaling from 10 to 10,000 employees per year.

πŸ“‹

Key Assumptions

1
Onboard 10-10,000 employees per year (27-400 per day at peak)
2
Integrate with 1-3 HRIS systems (BambooHR, Workday, Rippling)
3
SOC2 Type II compliance required (audit trail, access control, encryption)
4
PII handling: SSN, DOB, salary, health info (redact before LLM processing)
5
Multi-tenant (enterprise) or single-tenant (startup) deployment options
6
Survey response time: 48 hours target, 7 days max

System Requirements

Functional

  • Extract employee data from HRIS APIs (name, email, role, start date, manager)
  • Generate personalized onboarding plans (30/60/90 day milestones)
  • Schedule automated tasks (IT setup, benefits enrollment, training)
  • Send surveys at day 7, 30, 60 (Slack, email, or SMS)
  • Validate completeness (all required fields, no missing tasks)
  • Integrate with Slack (welcome messages, reminders, survey delivery)
  • Analytics dashboard (completion rates, survey scores, bottlenecks)

Non-Functional (SLOs)

latency p95 ms2000
freshness min60
availability percent99.5
survey response rate target85
plan generation time sec5
hris sync interval min15

πŸ’° Cost Targets: {"per_employee_onboarded_usd":2.5,"llm_cost_per_plan_usd":0.15,"storage_per_employee_year_usd":0.05,"monthly_infra_startup_usd":150,"monthly_infra_enterprise_usd":2500}

Agent Layer

planner

L3

Decompose onboarding into 30/60/90 day milestones with role-specific tasks

πŸ”§ LLM API (Claude/GPT for plan generation), Template DB (retrieve role-specific templates), Calendar API (find available training slots)

⚑ Recovery: If LLM fails: fall back to default template, If template missing: use generic onboarding plan, Retry with backoff (3 attempts, 2s delay)

executor

L2

Execute onboarding plan: send messages, create tasks, schedule meetings

πŸ”§ Slack API (send welcome message), Email API (SendGrid for notifications), Calendar API (schedule 1:1s), Task DB (create task records)

⚑ Recovery: If Slack fails: fall back to email, If calendar unavailable: queue for retry, Log all failures to audit trail

evaluator

L3

Validate plan quality, completeness, and compliance before execution

πŸ”§ Rule engine (check required fields), LLM API (semantic validation), Policy DB (compliance checks)

⚑ Recovery: If score < 0.7: flag for human review, If critical fields missing: block execution, Log evaluation results to audit trail

guardrail

L4

PII redaction, policy enforcement, safety filters before LLM calls

πŸ”§ PII detection service (AWS Comprehend/custom), Redaction engine (mask sensitive fields), Policy validator (check data retention rules)

⚑ Recovery: If PII detection fails: block processing (fail-safe), If redaction incomplete: flag for manual review, Never send unredacted PII to external LLMs

survey

L3

Generate, send, and analyze onboarding surveys at day 7, 30, 60

πŸ”§ LLM API (generate contextual questions), Survey platform API (Typeform/Google Forms), Slack API (send survey link), Sentiment analysis model

⚑ Recovery: If LLM fails: use default survey template, If delivery fails: retry after 1 hour, If no response after 48h: send reminder

integration

L2

Sync employee data from HRIS, handle webhooks, manage API credentials

πŸ”§ HRIS APIs (BambooHR, Workday, Rippling), Secrets Manager (fetch credentials), Database (upsert employee records), Webhook handler (process events)

⚑ Recovery: If API rate limited: exponential backoff, If auth fails: refresh OAuth token, If data malformed: log and skip record, Queue failed syncs for manual review

ML Layer

Feature Store

Update: Real-time (on task completion) + Daily batch (aggregates)

  • β€’ employee_tenure_days
  • β€’ role_seniority_level
  • β€’ department_onboarding_history
  • β€’ manager_team_size
  • β€’ previous_survey_sentiment
  • β€’ task_completion_velocity

Model Registry

Strategy: Blue-green deployment with 10% traffic to new version for 48h

  • β€’ plan_generator
  • β€’ survey_sentiment
  • β€’ task_priority_ranker

Observability Stack

Real-time monitoring, tracing & alerting

0 active
SOURCES
Apps, Services, Infra
COLLECTION
8 Metrics
PROCESSING
Aggregate & Transform
DASHBOARDS
4 Views
ALERTS
Enabled
πŸ“ŠMetrics(8)
πŸ“Logs(Structured)
πŸ”—Traces(Distributed)
plan_generation_latency_p95_ms
βœ“
plan_acceptance_rate
βœ“
task_completion_rate
βœ“
survey_response_rate
βœ“
llm_tokens_used_per_plan
βœ“
api_call_success_rate
βœ“

Deployment Variants

πŸš€

Startup Architecture

Fast to deploy, cost-efficient, scales to 100 competitors

Infrastructure

βœ“
Serverless (AWS Lambda or Google Cloud Run)
βœ“
Managed PostgreSQL (RDS or Cloud SQL)
βœ“
Managed Redis (ElastiCache or Memorystore)
βœ“
S3 or Cloud Storage for audit logs
βœ“
CloudWatch or Stackdriver for logs/metrics
βœ“
Single region (us-east-1 or us-central1)
β†’Fast to deploy (1-2 weeks)
β†’Low ops overhead (fully managed services)
β†’Cost: $150-500/month for 10-1K employees/year
β†’Single-tenant (one database per customer)
β†’Good for early-stage startups (< 500 employees)

Risks & Mitigations

⚠️ LLM hallucinations create fake tasks or incorrect policies

Medium (0.8% of plans)

βœ“ Mitigation: 4-layer detection: confidence scores, DB validation, logical checks, human review. 100% catch rate on test set.

⚠️ PII leak to external LLM (SSN, salary, health info)

Low (with Guardrail Agent)

βœ“ Mitigation: Guardrail Agent blocks all processing if PII detection fails. Fail-safe design: better to delay onboarding than leak PII.

⚠️ HRIS API changes break integration

Medium (quarterly API updates)

βœ“ Mitigation: Adapter pattern isolates API changes. Automated tests run daily against HRIS sandbox. Alerts if tests fail.

⚠️ Survey fatigue (low response rates)

Medium (if over-surveyed)

βœ“ Mitigation: Limit to 3 surveys (day 7/30/60). Personalize questions based on role. Incentivize with gift cards ($10 for completion).

⚠️ Multi-tenant data leakage (Tenant A sees Tenant B's data)

Low (with proper RBAC)

βœ“ Mitigation: Tenant ID in every DB query (row-level security). Automated tests verify isolation. Annual penetration testing.

⚠️ Cost overrun (LLM usage spikes unexpectedly)

Medium (during peak hiring)

βœ“ Mitigation: Cost guardrails: alert if daily spend > $100. Auto-switch to cheaper model (GPT-3.5) if budget hit. Monthly cost reviews.

⚠️ Agent orchestration bugs (infinite loops, stuck workflows)

Low (with testing)

βœ“ Mitigation: Max retry limit (3 attempts). Timeout on all agent calls (30s). Dead-letter queue for stuck jobs. On-call alerts.

🧬

Evolution Roadmap

Progressive transformation from MVP to scale

🌱
Phase 1Weeks 1-12

Phase 1: MVP (0-3 months)

1
Launch with 1 HRIS (BambooHR)
2
Support 10-100 employees/year
3
3 agents (Planner, Executor, Guardrail)
4
Basic surveys (day 7 only)
5
Single-tenant deployment
Complexity Level
β–Ό
🌿
Phase 2Weeks 13-24

Phase 2: Scale (3-6 months)

1
Add 2 more HRIS (Workday, Rippling)
2
Support 100-1,000 employees/year
3
Add Evaluator + Survey agents
4
Full survey cycle (day 7/30/60)
5
Queue-based processing
Complexity Level
β–Ό
🌳
Phase 3Weeks 25-52

Phase 3: Enterprise (6-12 months)

1
Support 1,000-10,000+ employees/year
2
Multi-tenant architecture
3
Multi-region deployment (US + EU + APAC)
4
Advanced ML (RAG, evaluation pipeline)
5
Custom SLAs per tenant
Complexity Level
πŸš€Production Ready
πŸ—οΈ

Complete Systems Architecture

9-layer architecture from presentation to security

1
🌐

Presentation

3 components

Admin Dashboard (React)
Employee Portal (Mobile-friendly)
Slack App (Survey delivery)
2
βš™οΈ

API Gateway

3 components

Load Balancer (ALB/nginx)
Rate Limiter (Redis)
Auth Middleware (JWT/OIDC)
3
πŸ’Ύ

Agent Layer

6 components

Planner Agent
Executor Agent
Evaluator Agent
Guardrail Agent
Survey Agent
Integration Agent
4
πŸ”Œ

ML Layer

4 components

Feature Store (employee metadata)
Model Registry (LLMs, classifiers)
Evaluation Pipeline (quality, cost, drift)
Prompt Store (versioned templates)
5
πŸ“Š

Integration

4 components

HRIS Adapter (BambooHR, Workday, Rippling)
Slack Adapter
Email Service (SendGrid)
Calendar Sync (Google/Outlook)
6
🌐

Data

3 components

PostgreSQL (employee records, plans)
Redis (cache, queue)
S3 (audit logs, exports)
7
βš™οΈ

External

4 components

HRIS APIs
LLM APIs (Claude, GPT, Gemini)
Slack API
Survey Tools (Typeform)
8
πŸ’Ύ

Observability

4 components

Metrics (Prometheus/Datadog)
Logs (CloudWatch/Loki)
Traces (Jaeger/Tempo)
Dashboards (Grafana)
9
πŸ”Œ

Security

4 components

IAM/RBAC
Secrets Manager (Vault/KMS)
PII Redaction Service
Audit Logger
πŸ”„

Sequence Diagram - New Hire Flow

Automated data flow every hour

Step 0 of 8
HRISIntegration AgentPlanner AgentGuardrail AgentExecutor AgentSlackEvaluator AgentWebhook: new_hire_createdEmployee JSON (with PII)Redacted JSON (no SSN/DOB)30/60/90 day plan + task listPOST welcome messagePlan + metadata for validationQuality score: 0.92 (pass)Update status: onboarding_active

Data Flow - New Hire Onboarding

From HRIS webhook to first survey in 7 days

1
HRIS (BambooHR)0s
Webhook: new_hire_created β†’ Employee JSON (with PII)
2
Integration Agent0.5s
Fetch full employee record via API β†’ Complete profile (role, dept, manager, start date)
3
Guardrail Agent0.2s
Detect and redact PII (SSN, DOB, salary) β†’ Redacted JSON (safe for LLM)
4
Planner Agent4s
Generate 30/60/90 day plan with LLM β†’ Structured plan JSON (milestones, tasks)
5
Evaluator Agent1.5s
Validate plan (completeness, quality score) β†’ Quality score: 0.89 (pass)
6
Orchestrator0.05s
Route to Executor (score > 0.7) β†’ Approved plan
7
Executor Agent2s
Create tasks in DB, send Slack welcome, schedule 1:1 β†’ 12 tasks created, 1 message sent, 3 calendar invites
8
Survey Agent0.1s
Schedule day-7 survey (cron job triggers in 7 days) β†’ Survey job queued
9
Survey Agent (Day 7)4s
Generate personalized survey questions β†’ 5 questions (Slack + email delivery)
10
Employee5 min (user time)
Completes survey via Slack β†’ Responses + sentiment analysis
1
Volume
10-100 employees/year
Pattern
Serverless Monolith
πŸ—οΈ
Architecture
API Gateway (AWS API Gateway or Cloud Run)
Single Lambda/Cloud Function per agent
PostgreSQL (managed: RDS/Cloud SQL)
Redis (ElastiCache/Memorystore)
S3 for audit logs
Cost & Performance
$150/month
per month
3-6 sec (plan generation)
2
Volume
100-1,000 employees/year
Pattern
Queue-Based Processing
πŸ—οΈ
Architecture
API server (ECS/Cloud Run)
Message queue (SQS/Pub/Sub)
Worker pool (3-5 workers)
PostgreSQL (read replica)
Redis (cache + queue)
CloudWatch/Stackdriver logs
Cost & Performance
$500/month
per month
2-4 sec
3
Volume
1,000-5,000 employees/year
Pattern
Multi-Agent Orchestration
πŸ—οΈ
Architecture
Load balancer (ALB/Cloud Load Balancing)
Agent framework (LangGraph on ECS)
Event bus (EventBridge/Pub/Sub)
PostgreSQL (multi-AZ, autoscaling)
Redis Cluster (3 nodes)
Distributed tracing (Jaeger/Cloud Trace)
Cost & Performance
$1,500/month
per month
1-3 sec
Recommended
4
Volume
5,000-10,000+ employees/year
Pattern
Enterprise Multi-Tenant
πŸ—οΈ
Architecture
Kubernetes (EKS/GKE) with autoscaling
Kafka for event streaming
Multi-LLM failover (Claude β†’ GPT β†’ Gemini)
PostgreSQL sharded by tenant
Redis Cluster (6+ nodes)
Full observability stack (Prometheus + Grafana + Jaeger)
Cost & Performance
$5,000+/month
per month
500ms-2sec

Key Integrations

HRIS (BambooHR, Workday, Rippling)

Protocol: REST APIs + OAuth 2.0
Webhook: new_hire_created β†’ Integration Agent
Fetch full profile via GET /employees/{id}
Normalize to internal schema
Store in PostgreSQL with hris_id mapping

Slack

Protocol: Slack Web API + Bolt SDK
Send welcome message via chat.postMessage
Deliver surveys via interactive blocks
Receive responses via webhook (interactions endpoint)
Parse and store in Survey table

Calendar (Google/Outlook)

Protocol: Google Calendar API / Microsoft Graph API
Create calendar event via POST /calendars/{id}/events
Add attendees (new hire + manager)
Set reminders (15 min before)
Handle conflicts (retry with alternate times)

Survey Tools (Typeform)

Protocol: Typeform API
Create form via POST /forms
Generate unique response link per employee
Send via Slack or email
Webhook: form_response β†’ parse and analyze sentiment

Security & Compliance

Failure Modes & Fallbacks

FailureFallbackImpactSLA
LLM API down (Claude/GPT unavailable)Fall back to secondary LLM (Gemini) β†’ If all fail: use default templateDegraded quality, not broken99.5% (multi-LLM failover)
HRIS API timeout or rate limitQueue sync job for retry (15 min delay) β†’ Alert if fails 3xDelayed onboarding (up to 1 hour)99.0% (eventual consistency)
PII detection service failsBlock processing (fail-safe) β†’ Route to manual review queueSafety first (no PII leak)100% (zero PII leaks)
Slack API downFall back to email (SendGrid) β†’ If email fails: queue for retryDelivery method changes, message still sent99.9% (multi-channel delivery)
Database unavailable (primary down)Switch to read replica (read-only mode) β†’ Queue writes for laterRead-only system (can view plans, can't create new)99.9% (automatic failover)
Evaluator Agent scores plan too low (<0.7)Route to human review queue β†’ HR manager approves manuallyDelayed onboarding (up to 4 hours)95% auto-approval rate
Survey delivery fails (no response after 7 days)Send reminder via alternate channel (email if Slack failed) β†’ Escalate to managerLower response rate (target: 85%, acceptable: 70%)85% response rate
System Architecture
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚         Agent Orchestrator (LangGraph)       β”‚
β”‚  (Routes requests, manages state, retries)   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                β”‚
    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
    β”‚           β”‚           β”‚          β”‚           β”‚          β”‚
β”Œβ”€β”€β”€β–Όβ”€β”€β”€β”€β”  β”Œβ”€β”€β–Όβ”€β”€β”  β”Œβ”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”  β”Œβ”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”  β”Œβ”€β–Όβ”€β”€β”€β”€β”€β”€β”  β”Œβ–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚Guardrailβ”‚  β”‚Plan β”‚  β”‚Executor β”‚  β”‚Evaluatorβ”‚  β”‚Survey  β”‚  β”‚Integr.  β”‚
β”‚ Agent   β”‚  β”‚Agentβ”‚  β”‚ Agent   β”‚  β”‚ Agent   β”‚  β”‚Agent   β”‚  β”‚Agent    β”‚
β”‚(PII)    β”‚  β”‚(LLM)β”‚  β”‚(Tasks)  β”‚  β”‚(Quality)β”‚  β”‚(Surveys)β”‚  β”‚(HRIS)   β”‚
β””β”€β”€β”€β”¬β”€β”€β”€β”€β”˜  β””β”€β”€β”¬β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”˜  β””β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”¬β”€β”€β”€β”€β”€β”€β”˜  β””β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜
    β”‚          β”‚           β”‚          β”‚           β”‚          β”‚
    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                            β”‚
                    β”Œβ”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”
                    β”‚  Data Layer    β”‚
                    β”‚ (PostgreSQL +  β”‚
                    β”‚  Redis + S3)   β”‚
                    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ”„Agent Collaboration Flow

1
Integration Agent
Receives HRIS webhook (new_hire_created) β†’ Fetches full employee record
2
Guardrail Agent
Scans for PII (SSN, DOB, salary) β†’ Redacts before passing to LLM
3
Planner Agent
Generates 30/60/90 day plan using LLM + templates β†’ Returns structured JSON
4
Evaluator Agent
Validates plan completeness + quality β†’ Scores 0-1 (pass if > 0.7)
5
Orchestrator
Decision: Pass? β†’ Route to Executor : Route to human review queue
6
Executor Agent
Creates tasks in DB β†’ Sends Slack welcome β†’ Schedules calendar invites
7
Survey Agent
Schedules day-7 survey β†’ Waits for trigger β†’ Sends personalized questions
8
Orchestrator
Monitors task completion β†’ Triggers next milestone when 80% complete

🎭Agent Types

Reactive Agent

Low

Integration Agent - Responds to webhooks, no planning

Stateless

Reflexive Agent

Medium

Guardrail Agent - Uses rules + context for PII detection

Reads context

Deliberative Agent

High

Planner Agent - Plans multi-step onboarding based on role

Stateful

Orchestrator Agent

Highest

Central Coordinator - Routes between agents, handles retries

Full state management

πŸ“ˆLevels of Autonomy

L1
Tool
Human calls, agent responds
β†’ Monday's prompts
L2
Chained Tools
Sequential execution
β†’ Executor Agent (task creation pipeline)
L3
Agent
Makes decisions, can loop
β†’ Planner Agent (iterates on plan quality)
L4
Multi-Agent
Agents collaborate autonomously
β†’ This system (6 agents coordinated)

RAG vs Fine-Tuning

Company policies and role-specific templates change frequently. RAG allows daily updates without retraining. Fine-tuning would require monthly retraining at $5K+ per run.
βœ… RAG (Chosen)
Cost: $100/month (vector DB hosting)
Update: Daily (add new templates to Pinecone)
How:
❌ Fine-Tuning
Cost: $5K/month (retraining + hosting)
Update: Monthly (full retrain on new data)
How:
Implementation: Vector DB (Pinecone or Weaviate) with 500+ onboarding templates, role descriptions, and company policies. Retrieved during plan generation. Top-3 most relevant templates injected into LLM context.

Hallucination Detection

LLMs hallucinate tasks (fake training courses, non-existent tools, wrong policies)
L1
Confidence scores from LLM (flag if <0.7)
L2
Cross-reference task DB (validate tool names, training IDs)
L3
Logical consistency checks (e.g., 'complete security training' before 'access prod DB')
L4
Human review queue (Evaluator Agent flags suspicious tasks)
0.8% hallucination rate (8 per 1000 plans), 100% caught by L2-L4

Evaluation Framework

Plan Quality Score
0.89target: 0.85+
Task Completion Rate
92%target: 90%+
Survey Response Rate
87%target: 85%+
Employee Satisfaction (NPS)
54target: 50+
Testing: Shadow mode: Run new model on 10% of traffic for 1 week, compare quality scores with production model. Promote if quality improves by 5%+ and no regressions.

Dataset Curation

1
Collect: 2,000 historical onboarding plans - Export from legacy system (anonymized)
2
Clean: 1,800 usable plans - Remove duplicates, incomplete plans, test data
3
Label: 1,800 labeled with quality scores - ($$9K (HR managers rate 0-10))
4
Augment: +500 synthetic plans - Generate edge cases (remote roles, executive onboarding, interns)
β†’ 2,300 high-quality examples for evaluation. Used to benchmark new models and detect quality regressions.

Agentic RAG

Planner Agent iteratively retrieves context based on reasoning, not one-shot retrieval.
Employee is 'Senior Engineer' β†’ RAG retrieves engineering onboarding template β†’ Agent reasons 'need tech stack info' β†’ RAG retrieves company tech stack doc β†’ Agent reasons 'need team structure' β†’ RAG retrieves org chart β†’ Final plan includes all context.
πŸ’‘ Multi-hop reasoning. Agent decides what else it needs to know, not just initial query. Reduces hallucinations by 40% vs. single-shot RAG.

Cost Optimization

Tech Stack Summary

LLMs
Claude 3.5 Sonnet (primary), GPT-4o (secondary), Gemini 1.5 Pro (fallback)
Orchestration
LangGraph (Python) or custom state machine (Node.js)
Database
PostgreSQL (RDS or Cloud SQL) with read replicas
Cache/Queue
Redis (ElastiCache or Memorystore) + SQS or Pub/Sub
Compute
Serverless (Lambda/Cloud Run) for startup, Kubernetes (EKS/GKE) for enterprise
Vector DB
Pinecone or Weaviate
Monitoring
Prometheus + Grafana (metrics), Jaeger (traces), CloudWatch/Loki (logs)
Security
AWS Secrets Manager or HashiCorp Vault, AWS Comprehend (PII detection)
Integrations
BambooHR SDK, Workday API, Rippling API, Slack Bolt SDK, SendGrid API
πŸ—οΈ

Need Architecture Review?

We'll audit your onboarding system, identify bottlenecks, and show you how to scale from 100 to 10,000 employees per year.

Β©

2026 Randeep Bhatia. All Rights Reserved.

No part of this content may be reproduced, distributed, or transmitted in any form without prior written permission.