@anhlp/alp-protocol 0.0.1-beta.3 → 0.0.1-beta.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3914,6 +3914,3253 @@
3914
3914
  "type": "session.ready"
3915
3915
  }
3916
3916
  }
3917
+ },
3918
+ {
3919
+ "name": "schedule.create params",
3920
+ "check": "params",
3921
+ "method": "schedule.create",
3922
+ "valid": true,
3923
+ "value": {
3924
+ "projectRoot": "/work/project",
3925
+ "sessionId": "ses_0123456789abcdef",
3926
+ "dueAt": "2026-10-20T10:00:00.000Z",
3927
+ "prompt": "Check the provider quota and continue."
3928
+ }
3929
+ },
3930
+ {
3931
+ "name": "schedule.create without a prompt",
3932
+ "check": "params",
3933
+ "method": "schedule.create",
3934
+ "valid": false,
3935
+ "value": {
3936
+ "projectRoot": "/work/project",
3937
+ "sessionId": "ses_0123456789abcdef",
3938
+ "dueAt": "2026-10-20T10:00:00.000Z"
3939
+ }
3940
+ },
3941
+ {
3942
+ "name": "schedule.create with a dueAt that is not a time",
3943
+ "check": "params",
3944
+ "method": "schedule.create",
3945
+ "valid": false,
3946
+ "value": {
3947
+ "projectRoot": "/work/project",
3948
+ "sessionId": "ses_0123456789abcdef",
3949
+ "dueAt": "tomorrow",
3950
+ "prompt": "Check the provider quota and continue."
3951
+ }
3952
+ },
3953
+ {
3954
+ "name": "schedule.create result",
3955
+ "check": "result",
3956
+ "method": "schedule.create",
3957
+ "valid": true,
3958
+ "value": {
3959
+ "job": {
3960
+ "id": "sch_0123456789abcdef",
3961
+ "projectRoot": "/work/project",
3962
+ "sessionId": "ses_0123456789abcdef",
3963
+ "prompt": "Check the provider quota and continue.",
3964
+ "dueAt": "2026-10-20T10:00:00.000Z",
3965
+ "status": "pending",
3966
+ "attempts": 0,
3967
+ "createdAt": "2026-10-20T09:59:00.000Z",
3968
+ "updatedAt": "2026-10-20T09:59:00.000Z"
3969
+ }
3970
+ }
3971
+ },
3972
+ {
3973
+ "name": "schedule.list params",
3974
+ "check": "params",
3975
+ "method": "schedule.list",
3976
+ "valid": true,
3977
+ "value": {
3978
+ "projectRoot": "/work/project"
3979
+ }
3980
+ },
3981
+ {
3982
+ "name": "schedule.list with a status",
3983
+ "check": "params",
3984
+ "method": "schedule.list",
3985
+ "valid": true,
3986
+ "value": {
3987
+ "projectRoot": "/work/project",
3988
+ "status": "pending"
3989
+ }
3990
+ },
3991
+ {
3992
+ "name": "schedule.list with an unknown status",
3993
+ "check": "params",
3994
+ "method": "schedule.list",
3995
+ "valid": false,
3996
+ "value": {
3997
+ "projectRoot": "/work/project",
3998
+ "status": "unknown"
3999
+ }
4000
+ },
4001
+ {
4002
+ "name": "schedule.list without a project",
4003
+ "check": "params",
4004
+ "method": "schedule.list",
4005
+ "valid": false,
4006
+ "value": {
4007
+ "status": "pending"
4008
+ }
4009
+ },
4010
+ {
4011
+ "name": "schedule.list result",
4012
+ "check": "result",
4013
+ "method": "schedule.list",
4014
+ "valid": true,
4015
+ "value": {
4016
+ "jobs": [
4017
+ {
4018
+ "id": "sch_0123456789abcdef",
4019
+ "projectRoot": "/work/project",
4020
+ "sessionId": "ses_0123456789abcdef",
4021
+ "prompt": "Check the provider quota and continue.",
4022
+ "dueAt": "2026-10-20T10:00:00.000Z",
4023
+ "status": "pending",
4024
+ "attempts": 0,
4025
+ "createdAt": "2026-10-20T09:59:00.000Z",
4026
+ "updatedAt": "2026-10-20T09:59:00.000Z"
4027
+ }
4028
+ ]
4029
+ }
4030
+ },
4031
+ {
4032
+ "name": "schedule.get params",
4033
+ "check": "params",
4034
+ "method": "schedule.get",
4035
+ "valid": true,
4036
+ "value": {
4037
+ "id": "sch_0123456789abcdef",
4038
+ "projectRoot": "/work/project"
4039
+ }
4040
+ },
4041
+ {
4042
+ "name": "schedule.get with an id that is not a job",
4043
+ "check": "params",
4044
+ "method": "schedule.get",
4045
+ "valid": false,
4046
+ "value": {
4047
+ "id": "nope",
4048
+ "projectRoot": "/work/project"
4049
+ }
4050
+ },
4051
+ {
4052
+ "name": "schedule.get without a project",
4053
+ "check": "params",
4054
+ "method": "schedule.get",
4055
+ "valid": false,
4056
+ "value": {
4057
+ "id": "sch_0123456789abcdef"
4058
+ }
4059
+ },
4060
+ {
4061
+ "name": "schedule.get result",
4062
+ "check": "result",
4063
+ "method": "schedule.get",
4064
+ "valid": true,
4065
+ "value": {
4066
+ "job": {
4067
+ "id": "sch_0123456789abcdef",
4068
+ "projectRoot": "/work/project",
4069
+ "sessionId": "ses_0123456789abcdef",
4070
+ "prompt": "Check the provider quota and continue.",
4071
+ "dueAt": "2026-10-20T10:00:00.000Z",
4072
+ "status": "delivered",
4073
+ "attempts": 1,
4074
+ "createdAt": "2026-10-20T09:59:00.000Z",
4075
+ "updatedAt": "2026-10-20T10:00:03.000Z",
4076
+ "attemptedAt": "2026-10-20T10:00:03.000Z",
4077
+ "deliveredAt": "2026-10-20T10:00:03.000Z",
4078
+ "lateByMs": 3000
4079
+ }
4080
+ }
4081
+ },
4082
+ {
4083
+ "name": "schedule.cancel params",
4084
+ "check": "params",
4085
+ "method": "schedule.cancel",
4086
+ "valid": true,
4087
+ "value": {
4088
+ "id": "sch_0123456789abcdef",
4089
+ "projectRoot": "/work/project"
4090
+ }
4091
+ },
4092
+ {
4093
+ "name": "schedule.cancel without a project",
4094
+ "check": "params",
4095
+ "method": "schedule.cancel",
4096
+ "valid": false,
4097
+ "value": {
4098
+ "id": "sch_0123456789abcdef"
4099
+ }
4100
+ },
4101
+ {
4102
+ "name": "schedule.cancel result",
4103
+ "check": "result",
4104
+ "method": "schedule.cancel",
4105
+ "valid": true,
4106
+ "value": {
4107
+ "job": {
4108
+ "id": "sch_0123456789abcdef",
4109
+ "projectRoot": "/work/project",
4110
+ "sessionId": "ses_0123456789abcdef",
4111
+ "prompt": "Check the provider quota and continue.",
4112
+ "dueAt": "2026-10-20T10:00:00.000Z",
4113
+ "status": "cancelled",
4114
+ "attempts": 0,
4115
+ "createdAt": "2026-10-20T09:59:00.000Z",
4116
+ "updatedAt": "2026-10-20T09:59:30.000Z",
4117
+ "cancelledAt": "2026-10-20T09:59:30.000Z"
4118
+ }
4119
+ }
4120
+ },
4121
+ {
4122
+ "name": "event attention",
4123
+ "check": "envelope",
4124
+ "valid": true,
4125
+ "value": {
4126
+ "sessionId": "ses_fixture",
4127
+ "epoch": "attention-1",
4128
+ "seq": 0,
4129
+ "ts": "2026-10-15T00:00:00.000Z",
4130
+ "event": {
4131
+ "type": "attention",
4132
+ "attention": {
4133
+ "reason": "error",
4134
+ "at": "2026-10-15T00:00:00.000Z",
4135
+ "turnId": "turn-2",
4136
+ "message": "Hết hạn mức"
4137
+ }
4138
+ }
4139
+ }
4140
+ },
4141
+ {
4142
+ "name": "event attention cleared",
4143
+ "check": "envelope",
4144
+ "valid": true,
4145
+ "value": {
4146
+ "sessionId": "ses_fixture",
4147
+ "epoch": "attention-1",
4148
+ "seq": 0,
4149
+ "ts": "2026-10-15T00:00:00.000Z",
4150
+ "event": {
4151
+ "type": "attention"
4152
+ }
4153
+ }
4154
+ },
4155
+ {
4156
+ "name": "event attention with an unknown reason",
4157
+ "check": "envelope",
4158
+ "valid": false,
4159
+ "value": {
4160
+ "sessionId": "ses_fixture",
4161
+ "epoch": "attention-1",
4162
+ "seq": 0,
4163
+ "ts": "2026-10-15T00:00:00.000Z",
4164
+ "event": {
4165
+ "type": "attention",
4166
+ "attention": {
4167
+ "reason": "done",
4168
+ "at": "2026-10-15T00:00:00.000Z"
4169
+ }
4170
+ }
4171
+ }
4172
+ },
4173
+ {
4174
+ "name": "item user_message with origin",
4175
+ "check": "envelope",
4176
+ "valid": true,
4177
+ "value": {
4178
+ "sessionId": "ses_fixture",
4179
+ "epoch": "epoch-1",
4180
+ "seq": 3,
4181
+ "cursor": 12,
4182
+ "ts": "2026-10-15T00:00:00.000Z",
4183
+ "event": {
4184
+ "type": "item",
4185
+ "item": {
4186
+ "kind": "user_message",
4187
+ "id": "user:alp-wake-1",
4188
+ "text": "ALP mail from other agents.",
4189
+ "clientMessageId": "alp-wake-1",
4190
+ "origin": "wake"
4191
+ }
4192
+ }
4193
+ }
4194
+ },
4195
+ {
4196
+ "name": "item user_message with an unknown origin",
4197
+ "check": "envelope",
4198
+ "valid": false,
4199
+ "value": {
4200
+ "sessionId": "ses_fixture",
4201
+ "epoch": "epoch-1",
4202
+ "seq": 3,
4203
+ "cursor": 12,
4204
+ "ts": "2026-10-15T00:00:00.000Z",
4205
+ "event": {
4206
+ "type": "item",
4207
+ "item": {
4208
+ "kind": "user_message",
4209
+ "id": "user:m-3",
4210
+ "text": "x",
4211
+ "origin": "robot"
4212
+ }
4213
+ }
4214
+ }
4215
+ },
4216
+ {
4217
+ "name": "question.watch with attention",
4218
+ "check": "params",
4219
+ "method": "question.watch",
4220
+ "valid": true,
4221
+ "value": {
4222
+ "projectRoot": "/work/project",
4223
+ "turns": true,
4224
+ "attention": true
4225
+ }
4226
+ },
4227
+ {
4228
+ "name": "question.watch with a numeric attention",
4229
+ "check": "params",
4230
+ "method": "question.watch",
4231
+ "valid": false,
4232
+ "value": {
4233
+ "attention": 1
4234
+ }
4235
+ },
4236
+ {
4237
+ "name": "question.watch with attention",
4238
+ "check": "result",
4239
+ "method": "question.watch",
4240
+ "valid": true,
4241
+ "value": {
4242
+ "questions": [],
4243
+ "attention": [
4244
+ {
4245
+ "sessionId": "ses_fixture",
4246
+ "attention": {
4247
+ "reason": "finished",
4248
+ "at": "2026-10-15T00:00:00.000Z",
4249
+ "turnId": "turn-1"
4250
+ }
4251
+ }
4252
+ ]
4253
+ }
4254
+ },
4255
+ {
4256
+ "name": "question.watch with an unknown attention reason",
4257
+ "check": "result",
4258
+ "method": "question.watch",
4259
+ "valid": false,
4260
+ "value": {
4261
+ "questions": [],
4262
+ "attention": [
4263
+ {
4264
+ "sessionId": "ses_fixture",
4265
+ "attention": {
4266
+ "reason": "done",
4267
+ "at": "2026-10-15T00:00:00.000Z"
4268
+ }
4269
+ }
4270
+ ]
4271
+ }
4272
+ },
4273
+ {
4274
+ "name": "session.attention.clear params",
4275
+ "check": "params",
4276
+ "method": "session.attention.clear",
4277
+ "valid": true,
4278
+ "value": {
4279
+ "sessionId": "ses_fixture"
4280
+ }
4281
+ },
4282
+ {
4283
+ "name": "session.attention.clear with at",
4284
+ "check": "params",
4285
+ "method": "session.attention.clear",
4286
+ "valid": true,
4287
+ "value": {
4288
+ "sessionId": "ses_fixture",
4289
+ "at": "2026-10-15T00:00:00.000Z"
4290
+ }
4291
+ },
4292
+ {
4293
+ "name": "session.attention.clear without sessionId",
4294
+ "check": "params",
4295
+ "method": "session.attention.clear",
4296
+ "valid": false,
4297
+ "value": {}
4298
+ },
4299
+ {
4300
+ "name": "session.attention.clear result",
4301
+ "check": "result",
4302
+ "method": "session.attention.clear",
4303
+ "valid": true,
4304
+ "value": {
4305
+ "cleared": true
4306
+ }
4307
+ },
4308
+ {
4309
+ "name": "session.attention.clear without cleared",
4310
+ "check": "result",
4311
+ "method": "session.attention.clear",
4312
+ "valid": false,
4313
+ "value": {}
4314
+ },
4315
+ {
4316
+ "name": "history params",
4317
+ "check": "params",
4318
+ "method": "session.history",
4319
+ "valid": true,
4320
+ "value": {
4321
+ "sessionId": "r",
4322
+ "limit": 200
4323
+ }
4324
+ },
4325
+ {
4326
+ "name": "history oversized result",
4327
+ "check": "result",
4328
+ "method": "session.history",
4329
+ "valid": true,
4330
+ "value": {
4331
+ "generation": "g",
4332
+ "items": [
4333
+ {
4334
+ "cursor": 2,
4335
+ "oversized": {
4336
+ "bytes": 800000
4337
+ }
4338
+ }
4339
+ ],
4340
+ "hasOlder": false,
4341
+ "tipCursor": 2
4342
+ }
4343
+ },
4344
+ {
4345
+ "name": "history limit refuses unbounded page",
4346
+ "check": "params",
4347
+ "method": "session.history",
4348
+ "valid": false,
4349
+ "value": {
4350
+ "sessionId": "r",
4351
+ "limit": 501
4352
+ }
4353
+ },
4354
+ {
4355
+ "name": "generation-bound attach",
4356
+ "check": "params",
4357
+ "method": "session.attach",
4358
+ "valid": true,
4359
+ "value": {
4360
+ "sessionId": "r",
4361
+ "after": 0,
4362
+ "generation": "g"
4363
+ }
4364
+ },
4365
+ {
4366
+ "name": "project.list params",
4367
+ "check": "params",
4368
+ "method": "project.list",
4369
+ "valid": true,
4370
+ "value": {}
4371
+ },
4372
+ {
4373
+ "name": "project.list result",
4374
+ "check": "result",
4375
+ "method": "project.list",
4376
+ "valid": true,
4377
+ "value": {
4378
+ "projects": [
4379
+ {
4380
+ "id": "prj_0000000000000001",
4381
+ "root": "/workspace",
4382
+ "addedAt": "2026-10-20T00:00:00Z"
4383
+ }
4384
+ ],
4385
+ "total": 1,
4386
+ "revision": 1,
4387
+ "nextCursor": null
4388
+ }
4389
+ },
4390
+ {
4391
+ "name": "workspace.list params",
4392
+ "check": "params",
4393
+ "method": "workspace.list",
4394
+ "valid": true,
4395
+ "value": {}
4396
+ },
4397
+ {
4398
+ "name": "workspace.list result",
4399
+ "check": "result",
4400
+ "method": "workspace.list",
4401
+ "valid": true,
4402
+ "value": {
4403
+ "workspaces": [
4404
+ {
4405
+ "id": "wks_0000000000000001",
4406
+ "projectId": "prj_0000000000000001",
4407
+ "directory": "/workspace",
4408
+ "labels": [],
4409
+ "createdAt": "2026-10-20T00:00:00Z"
4410
+ }
4411
+ ],
4412
+ "total": 1,
4413
+ "revision": 1,
4414
+ "nextCursor": null
4415
+ }
4416
+ },
4417
+ {
4418
+ "name": "workspace.get params",
4419
+ "check": "params",
4420
+ "method": "workspace.get",
4421
+ "valid": true,
4422
+ "value": {
4423
+ "workspaceId": "wks_0000000000000001"
4424
+ }
4425
+ },
4426
+ {
4427
+ "name": "workspace.get result",
4428
+ "check": "result",
4429
+ "method": "workspace.get",
4430
+ "valid": true,
4431
+ "value": {
4432
+ "workspace": {
4433
+ "id": "wks_0000000000000001",
4434
+ "projectId": "prj_0000000000000001",
4435
+ "directory": "/workspace",
4436
+ "labels": [],
4437
+ "createdAt": "2026-10-20T00:00:00Z"
4438
+ },
4439
+ "revision": 1
4440
+ }
4441
+ },
4442
+ {
4443
+ "name": "project.register params",
4444
+ "check": "params",
4445
+ "method": "project.register",
4446
+ "valid": true,
4447
+ "value": {
4448
+ "directory": "/workspace",
4449
+ "requestId": "add",
4450
+ "ifRevision": 0
4451
+ }
4452
+ },
4453
+ {
4454
+ "name": "project.register result",
4455
+ "check": "result",
4456
+ "method": "project.register",
4457
+ "valid": true,
4458
+ "value": {
4459
+ "project": {
4460
+ "id": "prj_0000000000000001",
4461
+ "root": "/workspace",
4462
+ "addedAt": "2026-10-20T00:00:00Z"
4463
+ },
4464
+ "revision": 1
4465
+ }
4466
+ },
4467
+ {
4468
+ "name": "project.remove params",
4469
+ "check": "params",
4470
+ "method": "project.remove",
4471
+ "valid": true,
4472
+ "value": {
4473
+ "projectId": "prj_0000000000000001",
4474
+ "requestId": "remove",
4475
+ "ifRevision": 1
4476
+ }
4477
+ },
4478
+ {
4479
+ "name": "project.remove result",
4480
+ "check": "result",
4481
+ "method": "project.remove",
4482
+ "valid": true,
4483
+ "value": {
4484
+ "project": {
4485
+ "id": "prj_0000000000000001",
4486
+ "root": "/workspace",
4487
+ "addedAt": "2026-10-20T00:00:00Z"
4488
+ },
4489
+ "revision": 2
4490
+ }
4491
+ },
4492
+ {
4493
+ "name": "workspace.update params",
4494
+ "check": "params",
4495
+ "method": "workspace.update",
4496
+ "valid": true,
4497
+ "value": {
4498
+ "workspaceId": "wks_0000000000000001",
4499
+ "pinned": true,
4500
+ "requestId": "pin",
4501
+ "ifRevision": 1
4502
+ }
4503
+ },
4504
+ {
4505
+ "name": "workspace.update result",
4506
+ "check": "result",
4507
+ "method": "workspace.update",
4508
+ "valid": true,
4509
+ "value": {
4510
+ "workspace": {
4511
+ "id": "wks_0000000000000001",
4512
+ "projectId": "prj_0000000000000001",
4513
+ "directory": "/workspace",
4514
+ "labels": [],
4515
+ "createdAt": "2026-10-20T00:00:00Z",
4516
+ "pinnedAt": "2026-10-20T00:00:00Z"
4517
+ },
4518
+ "revision": 2
4519
+ }
4520
+ },
4521
+ {
4522
+ "name": "registry.owner params",
4523
+ "check": "params",
4524
+ "method": "registry.owner",
4525
+ "valid": true,
4526
+ "value": {}
4527
+ },
4528
+ {
4529
+ "name": "registry.owner result",
4530
+ "check": "result",
4531
+ "method": "registry.owner",
4532
+ "valid": true,
4533
+ "value": {
4534
+ "registry": {}
4535
+ }
4536
+ },
4537
+ {
4538
+ "name": "workspaceId resolves host cwd",
4539
+ "check": "params",
4540
+ "method": "session.create",
4541
+ "valid": true,
4542
+ "value": {
4543
+ "workspaceId": "wks_0000000000000001",
4544
+ "spec": {
4545
+ "persist": true
4546
+ }
4547
+ }
4548
+ },
4549
+ {
4550
+ "name": "registry.worktree params",
4551
+ "check": "params",
4552
+ "method": "registry.worktree",
4553
+ "valid": true,
4554
+ "value": {}
4555
+ },
4556
+ {
4557
+ "name": "registry.worktree result",
4558
+ "check": "result",
4559
+ "method": "registry.worktree",
4560
+ "valid": true,
4561
+ "value": {
4562
+ "mappings": [],
4563
+ "workspaces": []
4564
+ }
4565
+ },
4566
+ {
4567
+ "name": "workspace.worktree.options params",
4568
+ "check": "params",
4569
+ "method": "workspace.worktree.options",
4570
+ "valid": true,
4571
+ "value": {
4572
+ "workspaceId": "wks_0000000000000001"
4573
+ }
4574
+ },
4575
+ {
4576
+ "name": "workspace.worktree.options result",
4577
+ "check": "result",
4578
+ "method": "workspace.worktree.options",
4579
+ "valid": true,
4580
+ "value": {
4581
+ "mappingIds": [
4582
+ "approved"
4583
+ ]
4584
+ }
4585
+ },
4586
+ {
4587
+ "name": "workspace.worktree.create params",
4588
+ "check": "params",
4589
+ "method": "workspace.worktree.create",
4590
+ "valid": true,
4591
+ "value": {
4592
+ "workspaceId": "wks_0000000000000001",
4593
+ "mappingId": "approved",
4594
+ "requestId": "create",
4595
+ "ifRevision": 1
4596
+ }
4597
+ },
4598
+ {
4599
+ "name": "workspace.worktree.create result",
4600
+ "check": "result",
4601
+ "method": "workspace.worktree.create",
4602
+ "valid": true,
4603
+ "value": {
4604
+ "workspace": {
4605
+ "id": "wks_0000000000000002",
4606
+ "projectId": "prj_0000000000000001",
4607
+ "directory": "/managed/wks_0000000000000002",
4608
+ "labels": [],
4609
+ "createdAt": "2026-10-21T00:00:00Z",
4610
+ "managedWorktree": true,
4611
+ "branch": "alp/workspace/wks_0000000000000002"
4612
+ },
4613
+ "revision": 2
4614
+ }
4615
+ },
4616
+ {
4617
+ "name": "workspace.worktree.remove params",
4618
+ "check": "params",
4619
+ "method": "workspace.worktree.remove",
4620
+ "valid": true,
4621
+ "value": {
4622
+ "workspaceId": "wks_0000000000000002",
4623
+ "requestId": "remove",
4624
+ "ifRevision": 2
4625
+ }
4626
+ },
4627
+ {
4628
+ "name": "workspace.worktree.remove result",
4629
+ "check": "result",
4630
+ "method": "workspace.worktree.remove",
4631
+ "valid": true,
4632
+ "value": {
4633
+ "workspace": {
4634
+ "id": "wks_0000000000000002",
4635
+ "projectId": "prj_0000000000000001",
4636
+ "directory": "/managed/wks_0000000000000002",
4637
+ "labels": [],
4638
+ "createdAt": "2026-10-21T00:00:00Z",
4639
+ "managedWorktree": true,
4640
+ "branch": "alp/workspace/wks_0000000000000002"
4641
+ },
4642
+ "revision": 3,
4643
+ "filesRemoved": true,
4644
+ "branchRetained": true
4645
+ }
4646
+ },
4647
+ {
4648
+ "name": "worktree create rejects arbitrary destination",
4649
+ "check": "params",
4650
+ "method": "workspace.worktree.create",
4651
+ "valid": false,
4652
+ "value": {
4653
+ "workspaceId": "wks_0000000000000001",
4654
+ "mappingId": "approved",
4655
+ "requestId": "create",
4656
+ "ifRevision": 1,
4657
+ "directory": "/outside"
4658
+ }
4659
+ },
4660
+ {
4661
+ "name": "workspace.git.status params",
4662
+ "check": "params",
4663
+ "method": "workspace.git.status",
4664
+ "valid": true,
4665
+ "value": {
4666
+ "workspaceId": "wks_0123456789abcdef"
4667
+ }
4668
+ },
4669
+ {
4670
+ "name": "workspace.git.status without workspaceId",
4671
+ "check": "params",
4672
+ "method": "workspace.git.status",
4673
+ "valid": false,
4674
+ "value": {}
4675
+ },
4676
+ {
4677
+ "name": "workspace.git.status with a host path",
4678
+ "check": "params",
4679
+ "method": "workspace.git.status",
4680
+ "valid": false,
4681
+ "value": {
4682
+ "workspaceId": "wks_0123456789abcdef",
4683
+ "projectRoot": "/work/project"
4684
+ }
4685
+ },
4686
+ {
4687
+ "name": "workspace.git.status result",
4688
+ "check": "result",
4689
+ "method": "workspace.git.status",
4690
+ "valid": true,
4691
+ "value": {
4692
+ "state": "repository",
4693
+ "branch": "feature/x",
4694
+ "detached": false,
4695
+ "head": "0123456789abcdef0123456789abcdef01234567",
4696
+ "upstream": {
4697
+ "ref": "origin/feature/x",
4698
+ "ahead": 1,
4699
+ "behind": 0
4700
+ },
4701
+ "baseRef": "main",
4702
+ "aheadBehind": {
4703
+ "ahead": 2,
4704
+ "behind": 1
4705
+ },
4706
+ "hasRemote": true,
4707
+ "remoteUrl": "https://github.com/example/project.git",
4708
+ "dirty": true,
4709
+ "files": [
4710
+ {
4711
+ "path": "src/a.ts",
4712
+ "change": "modified",
4713
+ "staged": false,
4714
+ "unstaged": true
4715
+ },
4716
+ {
4717
+ "path": "src/b.ts",
4718
+ "oldPath": "src/old-b.ts",
4719
+ "change": "renamed",
4720
+ "staged": true,
4721
+ "unstaged": false
4722
+ },
4723
+ {
4724
+ "path": "notes.txt",
4725
+ "change": "untracked",
4726
+ "staged": false,
4727
+ "unstaged": true
4728
+ }
4729
+ ],
4730
+ "hiddenCount": 1,
4731
+ "truncated": false,
4732
+ "snapshot": "s1.abc"
4733
+ }
4734
+ },
4735
+ {
4736
+ "name": "workspace.git.status detached HEAD",
4737
+ "check": "result",
4738
+ "method": "workspace.git.status",
4739
+ "valid": true,
4740
+ "value": {
4741
+ "state": "repository",
4742
+ "branch": null,
4743
+ "detached": true,
4744
+ "head": "0123456789abcdef0123456789abcdef01234567",
4745
+ "upstream": null,
4746
+ "baseRef": "main",
4747
+ "aheadBehind": null,
4748
+ "hasRemote": false,
4749
+ "remoteUrl": null,
4750
+ "dirty": false,
4751
+ "files": [],
4752
+ "hiddenCount": 0,
4753
+ "truncated": false,
4754
+ "snapshot": "s1.def"
4755
+ }
4756
+ },
4757
+ {
4758
+ "name": "workspace.git.status not a repository",
4759
+ "check": "result",
4760
+ "method": "workspace.git.status",
4761
+ "valid": true,
4762
+ "value": {
4763
+ "state": "not_repository",
4764
+ "branch": null,
4765
+ "detached": false,
4766
+ "head": null,
4767
+ "upstream": null,
4768
+ "baseRef": null,
4769
+ "aheadBehind": null,
4770
+ "hasRemote": false,
4771
+ "remoteUrl": null,
4772
+ "dirty": false,
4773
+ "files": [],
4774
+ "hiddenCount": 0,
4775
+ "truncated": false,
4776
+ "snapshot": ""
4777
+ }
4778
+ },
4779
+ {
4780
+ "name": "workspace.git.status with a repository root",
4781
+ "check": "result",
4782
+ "method": "workspace.git.status",
4783
+ "valid": false,
4784
+ "value": {
4785
+ "state": "repository",
4786
+ "repoRoot": "/work/project",
4787
+ "branch": "main",
4788
+ "detached": false,
4789
+ "head": null,
4790
+ "upstream": null,
4791
+ "baseRef": null,
4792
+ "aheadBehind": null,
4793
+ "hasRemote": false,
4794
+ "remoteUrl": null,
4795
+ "dirty": false,
4796
+ "files": [],
4797
+ "hiddenCount": 0,
4798
+ "truncated": false,
4799
+ "snapshot": ""
4800
+ }
4801
+ },
4802
+ {
4803
+ "name": "workspace.git.diff params",
4804
+ "check": "params",
4805
+ "method": "workspace.git.diff",
4806
+ "valid": true,
4807
+ "value": {
4808
+ "workspaceId": "wks_0123456789abcdef",
4809
+ "compare": {
4810
+ "mode": "uncommitted"
4811
+ }
4812
+ }
4813
+ },
4814
+ {
4815
+ "name": "workspace.git.diff one file against a base, next page",
4816
+ "check": "params",
4817
+ "method": "workspace.git.diff",
4818
+ "valid": true,
4819
+ "value": {
4820
+ "workspaceId": "wks_0123456789abcdef",
4821
+ "compare": {
4822
+ "mode": "base",
4823
+ "baseRef": "main",
4824
+ "ignoreWhitespace": true
4825
+ },
4826
+ "path": "src/a.ts",
4827
+ "cursor": "c1.abc"
4828
+ }
4829
+ },
4830
+ {
4831
+ "name": "workspace.git.diff with an arbitrary revision range",
4832
+ "check": "params",
4833
+ "method": "workspace.git.diff",
4834
+ "valid": false,
4835
+ "value": {
4836
+ "workspaceId": "wks_0123456789abcdef",
4837
+ "compare": {
4838
+ "mode": "range",
4839
+ "from": "HEAD~3"
4840
+ }
4841
+ }
4842
+ },
4843
+ {
4844
+ "name": "workspace.git.diff with extra git arguments",
4845
+ "check": "params",
4846
+ "method": "workspace.git.diff",
4847
+ "valid": false,
4848
+ "value": {
4849
+ "workspaceId": "wks_0123456789abcdef",
4850
+ "compare": {
4851
+ "mode": "uncommitted",
4852
+ "args": [
4853
+ "--ext-diff"
4854
+ ]
4855
+ }
4856
+ }
4857
+ },
4858
+ {
4859
+ "name": "workspace.git.diff without compare",
4860
+ "check": "params",
4861
+ "method": "workspace.git.diff",
4862
+ "valid": false,
4863
+ "value": {
4864
+ "workspaceId": "wks_0123456789abcdef"
4865
+ }
4866
+ },
4867
+ {
4868
+ "name": "workspace.git.diff result",
4869
+ "check": "result",
4870
+ "method": "workspace.git.diff",
4871
+ "valid": true,
4872
+ "value": {
4873
+ "compare": {
4874
+ "mode": "uncommitted",
4875
+ "ignoreWhitespace": false
4876
+ },
4877
+ "snapshot": "s1.abc",
4878
+ "files": [
4879
+ {
4880
+ "path": "src/a.ts",
4881
+ "change": "modified",
4882
+ "kind": "text",
4883
+ "additions": 1,
4884
+ "deletions": 1,
4885
+ "hunks": [
4886
+ {
4887
+ "oldStart": 1,
4888
+ "oldCount": 2,
4889
+ "newStart": 1,
4890
+ "newCount": 2,
4891
+ "context": "function main()",
4892
+ "lines": [
4893
+ {
4894
+ "type": "context",
4895
+ "content": "const a = 1;"
4896
+ },
4897
+ {
4898
+ "type": "remove",
4899
+ "content": "const b = 2;"
4900
+ },
4901
+ {
4902
+ "type": "add",
4903
+ "content": "const b = 3;",
4904
+ "noNewline": true
4905
+ }
4906
+ ]
4907
+ }
4908
+ ]
4909
+ },
4910
+ {
4911
+ "path": "logo.png",
4912
+ "change": "added",
4913
+ "kind": "binary",
4914
+ "additions": 0,
4915
+ "deletions": 0,
4916
+ "hunks": []
4917
+ },
4918
+ {
4919
+ "path": "src/new.ts",
4920
+ "oldPath": "src/old.ts",
4921
+ "change": "renamed",
4922
+ "kind": "too_large",
4923
+ "additions": 0,
4924
+ "deletions": 0,
4925
+ "hunks": []
4926
+ }
4927
+ ],
4928
+ "hiddenCount": 1,
4929
+ "truncated": true,
4930
+ "nextCursor": "c1.def"
4931
+ }
4932
+ },
4933
+ {
4934
+ "name": "workspace.git.diff empty result",
4935
+ "check": "result",
4936
+ "method": "workspace.git.diff",
4937
+ "valid": true,
4938
+ "value": {
4939
+ "compare": {
4940
+ "mode": "base",
4941
+ "baseRef": "main",
4942
+ "ignoreWhitespace": true
4943
+ },
4944
+ "snapshot": "s1.abc",
4945
+ "files": [],
4946
+ "hiddenCount": 0,
4947
+ "truncated": false
4948
+ }
4949
+ },
4950
+ {
4951
+ "name": "workspace.git.diff result with a raw patch",
4952
+ "check": "result",
4953
+ "method": "workspace.git.diff",
4954
+ "valid": false,
4955
+ "value": {
4956
+ "compare": {
4957
+ "mode": "uncommitted",
4958
+ "ignoreWhitespace": false
4959
+ },
4960
+ "snapshot": "s1.abc",
4961
+ "files": [
4962
+ {
4963
+ "path": "src/a.ts",
4964
+ "change": "modified",
4965
+ "kind": "text",
4966
+ "additions": 0,
4967
+ "deletions": 0,
4968
+ "hunks": [],
4969
+ "patch": "diff --git a/src/a.ts b/src/a.ts"
4970
+ }
4971
+ ],
4972
+ "hiddenCount": 0,
4973
+ "truncated": false
4974
+ }
4975
+ },
4976
+ {
4977
+ "name": "attachment.begin params",
4978
+ "check": "params",
4979
+ "method": "attachment.begin",
4980
+ "valid": true,
4981
+ "value": {
4982
+ "sessionId": "ses_1",
4983
+ "name": "report.pdf",
4984
+ "size": 1024,
4985
+ "mimeType": "application/pdf",
4986
+ "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
4987
+ "requestId": "req-1"
4988
+ }
4989
+ },
4990
+ {
4991
+ "name": "attachment.begin params from a gateway with principal context",
4992
+ "check": "params",
4993
+ "method": "attachment.begin",
4994
+ "valid": true,
4995
+ "value": {
4996
+ "sessionId": "ses_1",
4997
+ "name": "empty.txt",
4998
+ "size": 0,
4999
+ "mimeType": "text/plain",
5000
+ "requestId": "req-2",
5001
+ "principalId": "abcdef0123456789",
5002
+ "principalEpoch": "0123456789abcdef0123456789abcdef",
5003
+ "authorizedRoots": [
5004
+ "/work/project"
5005
+ ]
5006
+ }
5007
+ },
5008
+ {
5009
+ "name": "attachment.begin params naming a host path",
5010
+ "check": "params",
5011
+ "method": "attachment.begin",
5012
+ "valid": false,
5013
+ "value": {
5014
+ "sessionId": "ses_1",
5015
+ "name": "report.pdf",
5016
+ "size": 1024,
5017
+ "mimeType": "application/pdf",
5018
+ "requestId": "req-1",
5019
+ "path": "/etc/passwd"
5020
+ }
5021
+ },
5022
+ {
5023
+ "name": "attachment.begin params with a URL instead of bytes",
5024
+ "check": "params",
5025
+ "method": "attachment.begin",
5026
+ "valid": false,
5027
+ "value": {
5028
+ "sessionId": "ses_1",
5029
+ "name": "report.pdf",
5030
+ "size": 1024,
5031
+ "mimeType": "application/pdf",
5032
+ "requestId": "req-1",
5033
+ "url": "https://example.com/report.pdf"
5034
+ }
5035
+ },
5036
+ {
5037
+ "name": "attachment.begin params with a negative size",
5038
+ "check": "params",
5039
+ "method": "attachment.begin",
5040
+ "valid": false,
5041
+ "value": {
5042
+ "sessionId": "ses_1",
5043
+ "name": "report.pdf",
5044
+ "size": -1,
5045
+ "mimeType": "application/pdf",
5046
+ "requestId": "req-1"
5047
+ }
5048
+ },
5049
+ {
5050
+ "name": "attachment.begin params with a MIME type that is not type/subtype",
5051
+ "check": "params",
5052
+ "method": "attachment.begin",
5053
+ "valid": false,
5054
+ "value": {
5055
+ "sessionId": "ses_1",
5056
+ "name": "report.pdf",
5057
+ "size": 1,
5058
+ "mimeType": "pdf; charset=x",
5059
+ "requestId": "req-1"
5060
+ }
5061
+ },
5062
+ {
5063
+ "name": "attachment.begin result",
5064
+ "check": "result",
5065
+ "method": "attachment.begin",
5066
+ "valid": true,
5067
+ "value": {
5068
+ "uploadId": "upl_0123456789abcdef0123456789abcdef",
5069
+ "state": "uploading",
5070
+ "received": 0,
5071
+ "size": 1024,
5072
+ "maxChunkBytes": 262144,
5073
+ "expiresAt": "2026-10-22T01:00:00.000Z"
5074
+ }
5075
+ },
5076
+ {
5077
+ "name": "attachment.begin result of a repeated request already committed",
5078
+ "check": "result",
5079
+ "method": "attachment.begin",
5080
+ "valid": true,
5081
+ "value": {
5082
+ "uploadId": "upl_0123456789abcdef0123456789abcdef",
5083
+ "state": "committed",
5084
+ "received": 1024,
5085
+ "size": 1024,
5086
+ "maxChunkBytes": 262144,
5087
+ "attachmentId": "att_0123456789abcdef0123456789abcdef"
5088
+ }
5089
+ },
5090
+ {
5091
+ "name": "attachment.begin result with a host path",
5092
+ "check": "result",
5093
+ "method": "attachment.begin",
5094
+ "valid": false,
5095
+ "value": {
5096
+ "uploadId": "upl_0123456789abcdef0123456789abcdef",
5097
+ "state": "uploading",
5098
+ "received": 0,
5099
+ "size": 1024,
5100
+ "maxChunkBytes": 262144,
5101
+ "path": "/home/u/.alp/state/attachments/x/payload"
5102
+ }
5103
+ },
5104
+ {
5105
+ "name": "attachment.chunk params",
5106
+ "check": "params",
5107
+ "method": "attachment.chunk",
5108
+ "valid": true,
5109
+ "value": {
5110
+ "uploadId": "upl_0123456789abcdef0123456789abcdef",
5111
+ "offset": 0,
5112
+ "data": "JVBERi0xLjQK"
5113
+ }
5114
+ },
5115
+ {
5116
+ "name": "attachment.chunk params with invalid base64",
5117
+ "check": "params",
5118
+ "method": "attachment.chunk",
5119
+ "valid": false,
5120
+ "value": {
5121
+ "uploadId": "upl_0123456789abcdef0123456789abcdef",
5122
+ "offset": 0,
5123
+ "data": "not base64!"
5124
+ }
5125
+ },
5126
+ {
5127
+ "name": "attachment.chunk params with empty data",
5128
+ "check": "params",
5129
+ "method": "attachment.chunk",
5130
+ "valid": false,
5131
+ "value": {
5132
+ "uploadId": "upl_0123456789abcdef0123456789abcdef",
5133
+ "offset": 0,
5134
+ "data": ""
5135
+ }
5136
+ },
5137
+ {
5138
+ "name": "attachment.chunk params with an id that is not an upload id",
5139
+ "check": "params",
5140
+ "method": "attachment.chunk",
5141
+ "valid": false,
5142
+ "value": {
5143
+ "uploadId": "../x",
5144
+ "offset": 0,
5145
+ "data": "AAAA"
5146
+ }
5147
+ },
5148
+ {
5149
+ "name": "attachment.chunk result",
5150
+ "check": "result",
5151
+ "method": "attachment.chunk",
5152
+ "valid": true,
5153
+ "value": {
5154
+ "received": 9,
5155
+ "size": 1024
5156
+ }
5157
+ },
5158
+ {
5159
+ "name": "attachment.commit params",
5160
+ "check": "params",
5161
+ "method": "attachment.commit",
5162
+ "valid": true,
5163
+ "value": {
5164
+ "uploadId": "upl_0123456789abcdef0123456789abcdef",
5165
+ "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
5166
+ }
5167
+ },
5168
+ {
5169
+ "name": "attachment.commit params with an uppercase digest",
5170
+ "check": "params",
5171
+ "method": "attachment.commit",
5172
+ "valid": false,
5173
+ "value": {
5174
+ "uploadId": "upl_0123456789abcdef0123456789abcdef",
5175
+ "sha256": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855"
5176
+ }
5177
+ },
5178
+ {
5179
+ "name": "attachment.commit result",
5180
+ "check": "result",
5181
+ "method": "attachment.commit",
5182
+ "valid": true,
5183
+ "value": {
5184
+ "attachment": {
5185
+ "attachmentId": "att_0123456789abcdef0123456789abcdef",
5186
+ "sessionId": "ses_1",
5187
+ "name": "report.pdf",
5188
+ "mimeType": "application/pdf",
5189
+ "detectedMimeType": "application/pdf",
5190
+ "size": 1024,
5191
+ "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
5192
+ "createdAt": "2026-10-22T00:00:00.000Z",
5193
+ "committedAt": "2026-10-22T00:01:00.000Z",
5194
+ "referenced": false
5195
+ }
5196
+ }
5197
+ },
5198
+ {
5199
+ "name": "attachment.commit result with a storage path",
5200
+ "check": "result",
5201
+ "method": "attachment.commit",
5202
+ "valid": false,
5203
+ "value": {
5204
+ "attachment": {
5205
+ "attachmentId": "att_0123456789abcdef0123456789abcdef",
5206
+ "sessionId": "ses_1",
5207
+ "name": "report.pdf",
5208
+ "mimeType": "application/pdf",
5209
+ "detectedMimeType": "application/pdf",
5210
+ "size": 1024,
5211
+ "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
5212
+ "createdAt": "2026-10-22T00:00:00.000Z",
5213
+ "committedAt": "2026-10-22T00:01:00.000Z",
5214
+ "referenced": false,
5215
+ "path": "/home/u/.alp/state/attachments/x/payload"
5216
+ }
5217
+ }
5218
+ },
5219
+ {
5220
+ "name": "attachment.abort params",
5221
+ "check": "params",
5222
+ "method": "attachment.abort",
5223
+ "valid": true,
5224
+ "value": {
5225
+ "uploadId": "upl_0123456789abcdef0123456789abcdef"
5226
+ }
5227
+ },
5228
+ {
5229
+ "name": "attachment.abort result",
5230
+ "check": "result",
5231
+ "method": "attachment.abort",
5232
+ "valid": true,
5233
+ "value": {
5234
+ "aborted": true
5235
+ }
5236
+ },
5237
+ {
5238
+ "name": "attachment.get params",
5239
+ "check": "params",
5240
+ "method": "attachment.get",
5241
+ "valid": true,
5242
+ "value": {
5243
+ "attachmentId": "att_0123456789abcdef0123456789abcdef"
5244
+ }
5245
+ },
5246
+ {
5247
+ "name": "attachment.get params with an upload id",
5248
+ "check": "params",
5249
+ "method": "attachment.get",
5250
+ "valid": false,
5251
+ "value": {
5252
+ "attachmentId": "upl_0123456789abcdef0123456789abcdef"
5253
+ }
5254
+ },
5255
+ {
5256
+ "name": "attachment.get result of a referenced attachment",
5257
+ "check": "result",
5258
+ "method": "attachment.get",
5259
+ "valid": true,
5260
+ "value": {
5261
+ "attachment": {
5262
+ "attachmentId": "att_0123456789abcdef0123456789abcdef",
5263
+ "sessionId": "ses_1",
5264
+ "name": "report.pdf",
5265
+ "mimeType": "application/pdf",
5266
+ "detectedMimeType": "application/pdf",
5267
+ "size": 1024,
5268
+ "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
5269
+ "createdAt": "2026-10-22T00:00:00.000Z",
5270
+ "committedAt": "2026-10-22T00:01:00.000Z",
5271
+ "referenced": true
5272
+ }
5273
+ }
5274
+ },
5275
+ {
5276
+ "name": "attachment.delete params",
5277
+ "check": "params",
5278
+ "method": "attachment.delete",
5279
+ "valid": true,
5280
+ "value": {
5281
+ "attachmentId": "att_0123456789abcdef0123456789abcdef"
5282
+ }
5283
+ },
5284
+ {
5285
+ "name": "attachment.delete result",
5286
+ "check": "result",
5287
+ "method": "attachment.delete",
5288
+ "valid": true,
5289
+ "value": {
5290
+ "deleted": true
5291
+ }
5292
+ },
5293
+ {
5294
+ "name": "session.prompt params with an attachment part",
5295
+ "check": "params",
5296
+ "method": "session.prompt",
5297
+ "valid": true,
5298
+ "value": {
5299
+ "sessionId": "ses_1",
5300
+ "clientMessageId": "m-1",
5301
+ "content": [
5302
+ {
5303
+ "type": "text",
5304
+ "text": "Summarise this report"
5305
+ },
5306
+ {
5307
+ "type": "attachment",
5308
+ "attachmentId": "att_0123456789abcdef0123456789abcdef"
5309
+ }
5310
+ ]
5311
+ }
5312
+ },
5313
+ {
5314
+ "name": "session.prompt params with an attachment part naming a path",
5315
+ "check": "params",
5316
+ "method": "session.prompt",
5317
+ "valid": false,
5318
+ "value": {
5319
+ "sessionId": "ses_1",
5320
+ "clientMessageId": "m-1",
5321
+ "content": [
5322
+ {
5323
+ "type": "attachment",
5324
+ "attachmentId": "att_0123456789abcdef0123456789abcdef",
5325
+ "path": "/etc/passwd"
5326
+ }
5327
+ ]
5328
+ }
5329
+ },
5330
+ {
5331
+ "name": "session.prompt params with an attachment part without its id",
5332
+ "check": "params",
5333
+ "method": "session.prompt",
5334
+ "valid": false,
5335
+ "value": {
5336
+ "sessionId": "ses_1",
5337
+ "clientMessageId": "m-1",
5338
+ "content": [
5339
+ {
5340
+ "type": "attachment",
5341
+ "url": "https://example.com/x.pdf"
5342
+ }
5343
+ ]
5344
+ }
5345
+ },
5346
+ {
5347
+ "name": "daemon.hello result with attachment limits",
5348
+ "check": "result",
5349
+ "method": "daemon.hello",
5350
+ "valid": true,
5351
+ "value": {
5352
+ "protocolVersion": 1,
5353
+ "capabilities": [
5354
+ "attachments"
5355
+ ],
5356
+ "attachmentLimits": {
5357
+ "maxObjectBytes": 20971520,
5358
+ "maxPerPrompt": 8,
5359
+ "maxPromptBytes": 41943040,
5360
+ "maxChunkBytes": 262144,
5361
+ "maxActiveUploads": 2,
5362
+ "maxPrincipalBytes": 209715200,
5363
+ "maxDaemonBytes": 1073741824,
5364
+ "uploadTimeoutMs": 3600000,
5365
+ "unreferencedRetentionMs": 86400000,
5366
+ "releasedGraceMs": 604800000
5367
+ }
5368
+ }
5369
+ },
5370
+ {
5371
+ "name": "daemon.hello result with partial attachment limits",
5372
+ "check": "result",
5373
+ "method": "daemon.hello",
5374
+ "valid": false,
5375
+ "value": {
5376
+ "protocolVersion": 1,
5377
+ "attachmentLimits": {
5378
+ "maxObjectBytes": 20971520
5379
+ }
5380
+ }
5381
+ },
5382
+ {
5383
+ "name": "session.fork params through a turn",
5384
+ "check": "params",
5385
+ "method": "session.fork",
5386
+ "valid": true,
5387
+ "value": {
5388
+ "sessionId": "ses_1",
5389
+ "requestId": "fork-1",
5390
+ "ifGeneration": "0123456789abcdef0123456789abcdef",
5391
+ "boundary": {
5392
+ "throughTurnId": "turn-1"
5393
+ }
5394
+ }
5395
+ },
5396
+ {
5397
+ "name": "session.fork params before a turn into a workspace, with a chosen id and title",
5398
+ "check": "params",
5399
+ "method": "session.fork",
5400
+ "valid": true,
5401
+ "value": {
5402
+ "sessionId": "ses_1",
5403
+ "requestId": "fork-2",
5404
+ "ifGeneration": "0123456789abcdef0123456789abcdef",
5405
+ "boundary": {
5406
+ "beforeTurnId": "turn-2"
5407
+ },
5408
+ "workspaceId": "wks_1",
5409
+ "newSessionId": "ses_f1",
5410
+ "title": "Try another way"
5411
+ }
5412
+ },
5413
+ {
5414
+ "name": "session.fork params restoring a rewound branch whole",
5415
+ "check": "params",
5416
+ "method": "session.fork",
5417
+ "valid": true,
5418
+ "value": {
5419
+ "sessionId": "ses_1",
5420
+ "requestId": "fork-3",
5421
+ "ifGeneration": "0123456789abcdef0123456789abcdef",
5422
+ "branchId": "br_0123456789abcdef"
5423
+ }
5424
+ },
5425
+ {
5426
+ "name": "session.fork params with both cutoffs in one boundary",
5427
+ "check": "params",
5428
+ "method": "session.fork",
5429
+ "valid": false,
5430
+ "value": {
5431
+ "sessionId": "ses_1",
5432
+ "requestId": "fork-4",
5433
+ "ifGeneration": "0123456789abcdef0123456789abcdef",
5434
+ "boundary": {
5435
+ "throughTurnId": "turn-1",
5436
+ "beforeTurnId": "turn-2"
5437
+ }
5438
+ }
5439
+ },
5440
+ {
5441
+ "name": "session.fork params without a requestId",
5442
+ "check": "params",
5443
+ "method": "session.fork",
5444
+ "valid": false,
5445
+ "value": {
5446
+ "sessionId": "ses_1",
5447
+ "ifGeneration": "0123456789abcdef0123456789abcdef",
5448
+ "boundary": {
5449
+ "throughTurnId": "turn-1"
5450
+ }
5451
+ }
5452
+ },
5453
+ {
5454
+ "name": "session.fork params without the generation precondition",
5455
+ "check": "params",
5456
+ "method": "session.fork",
5457
+ "valid": false,
5458
+ "value": {
5459
+ "sessionId": "ses_1",
5460
+ "requestId": "fork-5",
5461
+ "boundary": {
5462
+ "throughTurnId": "turn-1"
5463
+ }
5464
+ }
5465
+ },
5466
+ {
5467
+ "name": "session.fork params naming a host path as destination",
5468
+ "check": "params",
5469
+ "method": "session.fork",
5470
+ "valid": false,
5471
+ "value": {
5472
+ "sessionId": "ses_1",
5473
+ "requestId": "fork-6",
5474
+ "ifGeneration": "0123456789abcdef0123456789abcdef",
5475
+ "cwd": "/etc"
5476
+ }
5477
+ },
5478
+ {
5479
+ "name": "session.fork params with an invalid new session id",
5480
+ "check": "params",
5481
+ "method": "session.fork",
5482
+ "valid": false,
5483
+ "value": {
5484
+ "sessionId": "ses_1",
5485
+ "requestId": "fork-7",
5486
+ "ifGeneration": "0123456789abcdef0123456789abcdef",
5487
+ "newSessionId": "a b"
5488
+ }
5489
+ },
5490
+ {
5491
+ "name": "session.fork result",
5492
+ "check": "result",
5493
+ "method": "session.fork",
5494
+ "valid": true,
5495
+ "value": {
5496
+ "session": {
5497
+ "id": "ses_f1",
5498
+ "projectRoot": "/work/app",
5499
+ "agent": "main",
5500
+ "runtime": "codex",
5501
+ "model": "gpt-5.5",
5502
+ "mode": "workspace-write",
5503
+ "thinking": "medium",
5504
+ "workflow": {
5505
+ "mode": "pho",
5506
+ "maxPeers": 2,
5507
+ "supervisor": false
5508
+ },
5509
+ "threadId": "thread-2",
5510
+ "persistent": true,
5511
+ "busy": false,
5512
+ "status": "closed",
5513
+ "conversation": {
5514
+ "fork": true,
5515
+ "rewind": true
5516
+ },
5517
+ "title": "Plan (fork)",
5518
+ "forkedFrom": {
5519
+ "sessionId": "ses_1",
5520
+ "turnId": "turn-1",
5521
+ "boundary": "through",
5522
+ "at": "2026-10-23T00:00:00.000Z"
5523
+ }
5524
+ },
5525
+ "forkedFrom": {
5526
+ "sessionId": "ses_1",
5527
+ "turnId": "turn-1",
5528
+ "boundary": "through",
5529
+ "at": "2026-10-23T00:00:00.000Z"
5530
+ }
5531
+ }
5532
+ },
5533
+ {
5534
+ "name": "session.fork result of a repeated request",
5535
+ "check": "result",
5536
+ "method": "session.fork",
5537
+ "valid": true,
5538
+ "value": {
5539
+ "session": {
5540
+ "id": "ses_f1",
5541
+ "projectRoot": "/work/app",
5542
+ "agent": "main",
5543
+ "runtime": "codex",
5544
+ "model": "gpt-5.5",
5545
+ "mode": "workspace-write",
5546
+ "thinking": "medium",
5547
+ "workflow": {
5548
+ "mode": "pho",
5549
+ "maxPeers": 2,
5550
+ "supervisor": false
5551
+ },
5552
+ "threadId": "thread-2",
5553
+ "persistent": true,
5554
+ "busy": false,
5555
+ "status": "closed",
5556
+ "conversation": {
5557
+ "fork": true,
5558
+ "rewind": true
5559
+ },
5560
+ "forkedFrom": {
5561
+ "sessionId": "ses_1",
5562
+ "boundary": "whole",
5563
+ "at": "2026-10-23T00:00:00.000Z",
5564
+ "branchId": "br_0123456789abcdef"
5565
+ }
5566
+ },
5567
+ "forkedFrom": {
5568
+ "sessionId": "ses_1",
5569
+ "boundary": "whole",
5570
+ "branchId": "br_0123456789abcdef",
5571
+ "at": "2026-10-23T00:00:00.000Z"
5572
+ },
5573
+ "duplicate": true
5574
+ }
5575
+ },
5576
+ {
5577
+ "name": "session.fork result with an unknown boundary kind",
5578
+ "check": "result",
5579
+ "method": "session.fork",
5580
+ "valid": false,
5581
+ "value": {
5582
+ "session": {
5583
+ "id": "ses_f1",
5584
+ "projectRoot": "/work/app",
5585
+ "agent": "main",
5586
+ "runtime": "codex",
5587
+ "model": "gpt-5.5",
5588
+ "mode": "workspace-write",
5589
+ "thinking": "medium",
5590
+ "workflow": {
5591
+ "mode": "pho",
5592
+ "maxPeers": 2,
5593
+ "supervisor": false
5594
+ },
5595
+ "threadId": "thread-2",
5596
+ "persistent": true,
5597
+ "busy": false,
5598
+ "status": "closed",
5599
+ "conversation": {
5600
+ "fork": true,
5601
+ "rewind": true
5602
+ }
5603
+ },
5604
+ "forkedFrom": {
5605
+ "sessionId": "ses_1",
5606
+ "turnId": "turn-1",
5607
+ "boundary": "after",
5608
+ "at": "2026-10-23T00:00:00.000Z"
5609
+ }
5610
+ }
5611
+ },
5612
+ {
5613
+ "name": "session.rewind params",
5614
+ "check": "params",
5615
+ "method": "session.rewind",
5616
+ "valid": true,
5617
+ "value": {
5618
+ "sessionId": "ses_1",
5619
+ "requestId": "rewind-1",
5620
+ "ifGeneration": "0123456789abcdef0123456789abcdef",
5621
+ "beforeTurnId": "turn-2"
5622
+ }
5623
+ },
5624
+ {
5625
+ "name": "session.rewind params without a turn",
5626
+ "check": "params",
5627
+ "method": "session.rewind",
5628
+ "valid": false,
5629
+ "value": {
5630
+ "sessionId": "ses_1",
5631
+ "requestId": "rewind-2",
5632
+ "ifGeneration": "0123456789abcdef0123456789abcdef"
5633
+ }
5634
+ },
5635
+ {
5636
+ "name": "session.rewind params asking to restore files",
5637
+ "check": "params",
5638
+ "method": "session.rewind",
5639
+ "valid": false,
5640
+ "value": {
5641
+ "sessionId": "ses_1",
5642
+ "requestId": "rewind-3",
5643
+ "ifGeneration": "0123456789abcdef0123456789abcdef",
5644
+ "beforeTurnId": "turn-2",
5645
+ "mode": "both"
5646
+ }
5647
+ },
5648
+ {
5649
+ "name": "session.rewind params with a malformed generation",
5650
+ "check": "params",
5651
+ "method": "session.rewind",
5652
+ "valid": false,
5653
+ "value": {
5654
+ "sessionId": "ses_1",
5655
+ "requestId": "rewind-4",
5656
+ "ifGeneration": "g1",
5657
+ "beforeTurnId": "turn-2"
5658
+ }
5659
+ },
5660
+ {
5661
+ "name": "session.rewind result",
5662
+ "check": "result",
5663
+ "method": "session.rewind",
5664
+ "valid": true,
5665
+ "value": {
5666
+ "session": {
5667
+ "id": "ses_1",
5668
+ "projectRoot": "/work/app",
5669
+ "agent": "main",
5670
+ "runtime": "codex",
5671
+ "model": "gpt-5.5",
5672
+ "mode": "workspace-write",
5673
+ "thinking": "medium",
5674
+ "workflow": {
5675
+ "mode": "pho",
5676
+ "maxPeers": 2,
5677
+ "supervisor": false
5678
+ },
5679
+ "threadId": "thread-2",
5680
+ "persistent": true,
5681
+ "busy": false,
5682
+ "status": "idle",
5683
+ "conversation": {
5684
+ "fork": true,
5685
+ "rewind": true
5686
+ },
5687
+ "branches": [
5688
+ {
5689
+ "branchId": "br_0123456789abcdef",
5690
+ "beforeTurnId": "turn-2",
5691
+ "turns": 2,
5692
+ "at": "2026-10-23T00:00:00.000Z"
5693
+ }
5694
+ ]
5695
+ },
5696
+ "generation": "fedcba9876543210fedcba9876543210",
5697
+ "branch": {
5698
+ "branchId": "br_0123456789abcdef",
5699
+ "beforeTurnId": "turn-2",
5700
+ "turns": 2,
5701
+ "at": "2026-10-23T00:00:00.000Z"
5702
+ }
5703
+ }
5704
+ },
5705
+ {
5706
+ "name": "session.rewind result without its branch",
5707
+ "check": "result",
5708
+ "method": "session.rewind",
5709
+ "valid": false,
5710
+ "value": {
5711
+ "session": {
5712
+ "id": "ses_1",
5713
+ "projectRoot": "/work/app",
5714
+ "agent": "main",
5715
+ "runtime": "codex",
5716
+ "model": "gpt-5.5",
5717
+ "mode": "workspace-write",
5718
+ "thinking": "medium",
5719
+ "workflow": {
5720
+ "mode": "pho",
5721
+ "maxPeers": 2,
5722
+ "supervisor": false
5723
+ },
5724
+ "threadId": "thread-2",
5725
+ "persistent": true,
5726
+ "busy": false,
5727
+ "status": "closed",
5728
+ "conversation": {
5729
+ "fork": true,
5730
+ "rewind": true
5731
+ }
5732
+ },
5733
+ "generation": "fedcba9876543210fedcba9876543210"
5734
+ }
5735
+ },
5736
+ {
5737
+ "name": "history.reset envelope after a rewind",
5738
+ "check": "envelope",
5739
+ "valid": true,
5740
+ "value": {
5741
+ "sessionId": "ses_1",
5742
+ "epoch": "e1",
5743
+ "seq": 9,
5744
+ "ts": "2026-10-23T00:00:00.000Z",
5745
+ "event": {
5746
+ "type": "history.reset",
5747
+ "generation": "fedcba9876543210fedcba9876543210",
5748
+ "reason": "rewind",
5749
+ "branchId": "br_0123456789abcdef"
5750
+ }
5751
+ }
5752
+ },
5753
+ {
5754
+ "name": "history.reset envelope without a generation",
5755
+ "check": "envelope",
5756
+ "valid": false,
5757
+ "value": {
5758
+ "sessionId": "ses_1",
5759
+ "epoch": "e1",
5760
+ "seq": 9,
5761
+ "ts": "2026-10-23T00:00:00.000Z",
5762
+ "event": {
5763
+ "type": "history.reset",
5764
+ "reason": "rewind",
5765
+ "branchId": "br_0123456789abcdef"
5766
+ }
5767
+ }
5768
+ },
5769
+ {
5770
+ "name": "session.reload params",
5771
+ "check": "params",
5772
+ "method": "session.reload",
5773
+ "valid": true,
5774
+ "value": {
5775
+ "sessionId": "ses_1",
5776
+ "requestId": "reload-1",
5777
+ "ifGeneration": "0123456789abcdef0123456789abcdef"
5778
+ }
5779
+ },
5780
+ {
5781
+ "name": "session.reload params without a generation",
5782
+ "check": "params",
5783
+ "method": "session.reload",
5784
+ "valid": false,
5785
+ "value": {
5786
+ "sessionId": "ses_1",
5787
+ "requestId": "reload-2"
5788
+ }
5789
+ },
5790
+ {
5791
+ "name": "session.reload params naming another binding",
5792
+ "check": "params",
5793
+ "method": "session.reload",
5794
+ "valid": false,
5795
+ "value": {
5796
+ "sessionId": "ses_1",
5797
+ "requestId": "reload-3",
5798
+ "ifGeneration": "0123456789abcdef0123456789abcdef",
5799
+ "threadId": "thread-9"
5800
+ }
5801
+ },
5802
+ {
5803
+ "name": "session.reload result",
5804
+ "check": "result",
5805
+ "method": "session.reload",
5806
+ "valid": true,
5807
+ "value": {
5808
+ "session": {
5809
+ "id": "ses_1",
5810
+ "projectRoot": "/work/app",
5811
+ "agent": "main",
5812
+ "runtime": "codex",
5813
+ "model": "gpt-5.5",
5814
+ "mode": "workspace-write",
5815
+ "thinking": "medium",
5816
+ "workflow": {
5817
+ "mode": "pho",
5818
+ "maxPeers": 2,
5819
+ "supervisor": false
5820
+ },
5821
+ "threadId": "thread-2",
5822
+ "persistent": true,
5823
+ "busy": false,
5824
+ "status": "idle",
5825
+ "conversation": {
5826
+ "fork": true,
5827
+ "rewind": true,
5828
+ "reload": true
5829
+ },
5830
+ "branches": [
5831
+ {
5832
+ "branchId": "br_0123456789abcdef",
5833
+ "beforeTurnId": "turn-2",
5834
+ "turns": 2,
5835
+ "at": "2026-10-23T00:00:00.000Z"
5836
+ }
5837
+ ]
5838
+ }
5839
+ }
5840
+ },
5841
+ {
5842
+ "name": "session.reload result of a repeat",
5843
+ "check": "result",
5844
+ "method": "session.reload",
5845
+ "valid": true,
5846
+ "value": {
5847
+ "session": {
5848
+ "id": "ses_1",
5849
+ "projectRoot": "/work/app",
5850
+ "agent": "main",
5851
+ "runtime": "codex",
5852
+ "model": "gpt-5.5",
5853
+ "mode": "workspace-write",
5854
+ "thinking": "medium",
5855
+ "workflow": {
5856
+ "mode": "pho",
5857
+ "maxPeers": 2,
5858
+ "supervisor": false
5859
+ },
5860
+ "threadId": "thread-2",
5861
+ "persistent": true,
5862
+ "busy": false,
5863
+ "status": "idle",
5864
+ "conversation": {
5865
+ "fork": true,
5866
+ "rewind": true,
5867
+ "reload": true
5868
+ },
5869
+ "branches": [
5870
+ {
5871
+ "branchId": "br_0123456789abcdef",
5872
+ "beforeTurnId": "turn-2",
5873
+ "turns": 2,
5874
+ "at": "2026-10-23T00:00:00.000Z"
5875
+ }
5876
+ ]
5877
+ },
5878
+ "duplicate": true
5879
+ }
5880
+ },
5881
+ {
5882
+ "name": "session.reload result without its session",
5883
+ "check": "result",
5884
+ "method": "session.reload",
5885
+ "valid": false,
5886
+ "value": {
5887
+ "duplicate": true
5888
+ }
5889
+ },
5890
+ {
5891
+ "name": "session.resumeCommand params",
5892
+ "check": "params",
5893
+ "method": "session.resumeCommand",
5894
+ "valid": true,
5895
+ "value": {
5896
+ "sessionId": "ses_1"
5897
+ }
5898
+ },
5899
+ {
5900
+ "name": "session.resumeCommand params asking for a native runtime",
5901
+ "check": "params",
5902
+ "method": "session.resumeCommand",
5903
+ "valid": false,
5904
+ "value": {
5905
+ "sessionId": "ses_1",
5906
+ "runtime": "claude"
5907
+ }
5908
+ },
5909
+ {
5910
+ "name": "session.resumeCommand result",
5911
+ "check": "result",
5912
+ "method": "session.resumeCommand",
5913
+ "valid": true,
5914
+ "value": {
5915
+ "argv": [
5916
+ "alp",
5917
+ "attach",
5918
+ "ses_1"
5919
+ ],
5920
+ "posix": "alp attach ses_1",
5921
+ "windows": "alp attach ses_1",
5922
+ "display": "alp attach ses_1",
5923
+ "platform": "posix"
5924
+ }
5925
+ },
5926
+ {
5927
+ "name": "session.resumeCommand result with an env field",
5928
+ "check": "result",
5929
+ "method": "session.resumeCommand",
5930
+ "valid": false,
5931
+ "value": {
5932
+ "argv": [
5933
+ "alp",
5934
+ "attach",
5935
+ "ses_1"
5936
+ ],
5937
+ "posix": "alp attach ses_1",
5938
+ "windows": "alp attach ses_1",
5939
+ "display": "alp attach ses_1",
5940
+ "platform": "posix",
5941
+ "env": {
5942
+ "ALP_HOME": "/x"
5943
+ }
5944
+ }
5945
+ },
5946
+ {
5947
+ "name": "session.resumeCommand result with a line break in an argument",
5948
+ "check": "result",
5949
+ "method": "session.resumeCommand",
5950
+ "valid": false,
5951
+ "value": {
5952
+ "argv": [
5953
+ "alp",
5954
+ "attach",
5955
+ "ses_1\nrm -rf ~"
5956
+ ],
5957
+ "posix": "alp attach 'ses_1'",
5958
+ "windows": "alp attach ses_1",
5959
+ "display": "alp attach ses_1",
5960
+ "platform": "posix"
5961
+ }
5962
+ },
5963
+ {
5964
+ "name": "session.resumeCommand result without its Windows line",
5965
+ "check": "result",
5966
+ "method": "session.resumeCommand",
5967
+ "valid": false,
5968
+ "value": {
5969
+ "argv": [
5970
+ "alp",
5971
+ "attach",
5972
+ "ses_1"
5973
+ ],
5974
+ "posix": "alp attach ses_1",
5975
+ "display": "alp attach ses_1",
5976
+ "platform": "posix"
5977
+ }
5978
+ },
5979
+ {
5980
+ "name": "session.configure params changing model and thinking",
5981
+ "check": "params",
5982
+ "method": "session.configure",
5983
+ "valid": true,
5984
+ "value": {
5985
+ "sessionId": "ses_1",
5986
+ "model": "codex:gpt-6.1-sol",
5987
+ "thinking": "high",
5988
+ "requestId": "configure-1",
5989
+ "ifGeneration": "0123456789abcdef0123456789abcdef"
5990
+ }
5991
+ },
5992
+ {
5993
+ "name": "session.configure params changing team",
5994
+ "check": "params",
5995
+ "method": "session.configure",
5996
+ "valid": true,
5997
+ "value": {
5998
+ "sessionId": "ses_1",
5999
+ "team": "cafe",
6000
+ "requestId": "configure-2",
6001
+ "ifGeneration": "0123456789abcdef0123456789abcdef"
6002
+ }
6003
+ },
6004
+ {
6005
+ "name": "session.configure params changing model without requestId",
6006
+ "check": "params",
6007
+ "method": "session.configure",
6008
+ "valid": false,
6009
+ "value": {
6010
+ "sessionId": "ses_1",
6011
+ "model": "codex:gpt-6.1-sol",
6012
+ "ifGeneration": "0123456789abcdef0123456789abcdef"
6013
+ }
6014
+ },
6015
+ {
6016
+ "name": "session.configure params changing team without a generation",
6017
+ "check": "params",
6018
+ "method": "session.configure",
6019
+ "valid": false,
6020
+ "value": {
6021
+ "sessionId": "ses_1",
6022
+ "team": "cafe",
6023
+ "requestId": "configure-3"
6024
+ }
6025
+ },
6026
+ {
6027
+ "name": "session.configure params with a malformed generation",
6028
+ "check": "params",
6029
+ "method": "session.configure",
6030
+ "valid": false,
6031
+ "value": {
6032
+ "sessionId": "ses_1",
6033
+ "thinking": "low",
6034
+ "requestId": "configure-4",
6035
+ "ifGeneration": "gen-1"
6036
+ }
6037
+ },
6038
+ {
6039
+ "name": "session.configure result of a live change",
6040
+ "check": "result",
6041
+ "method": "session.configure",
6042
+ "valid": true,
6043
+ "value": {
6044
+ "session": {
6045
+ "id": "ses_1",
6046
+ "projectRoot": "/work/app",
6047
+ "agent": "main",
6048
+ "runtime": "codex",
6049
+ "model": "gpt-6.1-sol",
6050
+ "mode": "workspace-write",
6051
+ "thinking": "high",
6052
+ "workflow": {
6053
+ "mode": "cafe",
6054
+ "maxPeers": 2,
6055
+ "supervisor": true
6056
+ },
6057
+ "teamLabel": "Cafe",
6058
+ "threadId": "thread-2",
6059
+ "persistent": true,
6060
+ "busy": false,
6061
+ "status": "idle",
6062
+ "conversation": {
6063
+ "fork": true,
6064
+ "rewind": true,
6065
+ "reload": true,
6066
+ "configure": true
6067
+ }
6068
+ },
6069
+ "configured": {
6070
+ "status": "applied",
6071
+ "requested": {
6072
+ "model": "codex:gpt-6.1-sol",
6073
+ "thinking": "high",
6074
+ "team": "cafe"
6075
+ },
6076
+ "effective": {
6077
+ "team": "cafe",
6078
+ "teamLabel": "Cafe",
6079
+ "agent": "main",
6080
+ "runtime": "codex",
6081
+ "model": "gpt-6.1-sol",
6082
+ "thinking": "high",
6083
+ "mode": "workspace-write",
6084
+ "supervisor": true,
6085
+ "maxPeers": 2,
6086
+ "delegates": [
6087
+ "lead"
6088
+ ],
6089
+ "tools": [
6090
+ "alp_delegate",
6091
+ "alp_wait",
6092
+ "alp_send",
6093
+ "alp_board",
6094
+ "alp_task"
6095
+ ],
6096
+ "mcpServers": [],
6097
+ "hooks": 0,
6098
+ "instructionsSha": "0123456789ab"
6099
+ },
6100
+ "restarted": true
6101
+ }
6102
+ }
6103
+ },
6104
+ {
6105
+ "name": "session.configure result of a repeat",
6106
+ "check": "result",
6107
+ "method": "session.configure",
6108
+ "valid": true,
6109
+ "value": {
6110
+ "session": {
6111
+ "id": "ses_1",
6112
+ "projectRoot": "/work/app",
6113
+ "agent": "main",
6114
+ "runtime": "codex",
6115
+ "model": "gpt-6.1-sol",
6116
+ "mode": "workspace-write",
6117
+ "thinking": "high",
6118
+ "workflow": {
6119
+ "mode": "cafe",
6120
+ "maxPeers": 2,
6121
+ "supervisor": true
6122
+ },
6123
+ "teamLabel": "Cafe",
6124
+ "threadId": "thread-2",
6125
+ "persistent": true,
6126
+ "busy": false,
6127
+ "status": "idle",
6128
+ "conversation": {
6129
+ "fork": true,
6130
+ "rewind": true,
6131
+ "reload": true,
6132
+ "configure": true
6133
+ }
6134
+ },
6135
+ "configured": {
6136
+ "status": "unchanged",
6137
+ "requested": {
6138
+ "thinking": "high"
6139
+ },
6140
+ "effective": {
6141
+ "team": "pho",
6142
+ "teamLabel": "Phở",
6143
+ "agent": "main",
6144
+ "runtime": "codex",
6145
+ "model": "gpt-6.1-sol",
6146
+ "thinking": "high",
6147
+ "mode": "workspace-write",
6148
+ "supervisor": true,
6149
+ "maxPeers": 2,
6150
+ "delegates": [
6151
+ "peer",
6152
+ "oracle",
6153
+ "reviewer"
6154
+ ],
6155
+ "tools": [
6156
+ "alp_delegate",
6157
+ "alp_wait",
6158
+ "alp_send",
6159
+ "alp_board",
6160
+ "alp_task"
6161
+ ],
6162
+ "mcpServers": [],
6163
+ "hooks": 0,
6164
+ "instructionsSha": "0123456789ab"
6165
+ },
6166
+ "restarted": false
6167
+ },
6168
+ "duplicate": true
6169
+ }
6170
+ },
6171
+ {
6172
+ "name": "session.configure result with an unknown outcome status",
6173
+ "check": "result",
6174
+ "method": "session.configure",
6175
+ "valid": false,
6176
+ "value": {
6177
+ "session": {
6178
+ "id": "ses_1",
6179
+ "projectRoot": "/work/app",
6180
+ "agent": "main",
6181
+ "runtime": "codex",
6182
+ "model": "gpt-6.1-sol",
6183
+ "mode": "workspace-write",
6184
+ "thinking": "high",
6185
+ "workflow": {
6186
+ "mode": "cafe",
6187
+ "maxPeers": 2,
6188
+ "supervisor": true
6189
+ },
6190
+ "teamLabel": "Cafe",
6191
+ "threadId": "thread-2",
6192
+ "persistent": true,
6193
+ "busy": false,
6194
+ "status": "idle",
6195
+ "conversation": {
6196
+ "fork": true,
6197
+ "rewind": true,
6198
+ "reload": true,
6199
+ "configure": true
6200
+ }
6201
+ },
6202
+ "configured": {
6203
+ "status": "maybe",
6204
+ "requested": {},
6205
+ "effective": {
6206
+ "team": "pho",
6207
+ "teamLabel": "Phở",
6208
+ "agent": "main",
6209
+ "runtime": "codex",
6210
+ "model": "gpt-5.5",
6211
+ "thinking": "medium",
6212
+ "mode": "workspace-write",
6213
+ "supervisor": true,
6214
+ "maxPeers": 2,
6215
+ "delegates": [
6216
+ "peer",
6217
+ "oracle",
6218
+ "reviewer"
6219
+ ],
6220
+ "tools": [
6221
+ "alp_delegate",
6222
+ "alp_wait",
6223
+ "alp_send",
6224
+ "alp_board",
6225
+ "alp_task"
6226
+ ],
6227
+ "mcpServers": [],
6228
+ "hooks": 0,
6229
+ "instructionsSha": "0123456789ab"
6230
+ },
6231
+ "restarted": false
6232
+ }
6233
+ }
6234
+ },
6235
+ {
6236
+ "name": "session.configure.preview params",
6237
+ "check": "params",
6238
+ "method": "session.configure.preview",
6239
+ "valid": true,
6240
+ "value": {
6241
+ "sessionId": "ses_1",
6242
+ "model": "claude:opus",
6243
+ "team": "cafe"
6244
+ }
6245
+ },
6246
+ {
6247
+ "name": "session.configure.preview params naming a path",
6248
+ "check": "params",
6249
+ "method": "session.configure.preview",
6250
+ "valid": false,
6251
+ "value": {
6252
+ "sessionId": "ses_1",
6253
+ "team": "cafe",
6254
+ "teamPath": "/etc/teams/cafe"
6255
+ }
6256
+ },
6257
+ {
6258
+ "name": "session.configure.preview result",
6259
+ "check": "result",
6260
+ "method": "session.configure.preview",
6261
+ "valid": true,
6262
+ "value": {
6263
+ "preview": {
6264
+ "current": {
6265
+ "team": "pho",
6266
+ "teamLabel": "Phở",
6267
+ "agent": "main",
6268
+ "runtime": "codex",
6269
+ "model": "gpt-5.5",
6270
+ "thinking": "medium",
6271
+ "mode": "workspace-write",
6272
+ "supervisor": true,
6273
+ "maxPeers": 2,
6274
+ "delegates": [
6275
+ "peer",
6276
+ "oracle",
6277
+ "reviewer"
6278
+ ],
6279
+ "tools": [
6280
+ "alp_delegate",
6281
+ "alp_wait",
6282
+ "alp_send",
6283
+ "alp_board",
6284
+ "alp_task"
6285
+ ],
6286
+ "mcpServers": [],
6287
+ "hooks": 0,
6288
+ "instructionsSha": "0123456789ab"
6289
+ },
6290
+ "proposed": {
6291
+ "team": "cafe",
6292
+ "teamLabel": "Cafe",
6293
+ "agent": "main",
6294
+ "runtime": "codex",
6295
+ "model": "gpt-5.5",
6296
+ "thinking": "medium",
6297
+ "mode": "workspace-write",
6298
+ "supervisor": true,
6299
+ "maxPeers": 2,
6300
+ "delegates": [
6301
+ "lead"
6302
+ ],
6303
+ "tools": [
6304
+ "alp_delegate",
6305
+ "alp_wait",
6306
+ "alp_send",
6307
+ "alp_board",
6308
+ "alp_task"
6309
+ ],
6310
+ "mcpServers": [],
6311
+ "hooks": 0,
6312
+ "instructionsSha": "0123456789ab"
6313
+ },
6314
+ "changes": [
6315
+ "team"
6316
+ ],
6317
+ "restart": true,
6318
+ "allowed": true,
6319
+ "teams": [
6320
+ {
6321
+ "id": "pho",
6322
+ "label": "Phở"
6323
+ },
6324
+ {
6325
+ "id": "cafe",
6326
+ "label": "Cafe"
6327
+ }
6328
+ ]
6329
+ }
6330
+ }
6331
+ },
6332
+ {
6333
+ "name": "session.configure.preview result refused",
6334
+ "check": "result",
6335
+ "method": "session.configure.preview",
6336
+ "valid": true,
6337
+ "value": {
6338
+ "preview": {
6339
+ "current": {
6340
+ "team": "pho",
6341
+ "teamLabel": "Phở",
6342
+ "agent": "main",
6343
+ "runtime": "codex",
6344
+ "model": "gpt-5.5",
6345
+ "thinking": "medium",
6346
+ "mode": "workspace-write",
6347
+ "supervisor": true,
6348
+ "maxPeers": 2,
6349
+ "delegates": [
6350
+ "peer",
6351
+ "oracle",
6352
+ "reviewer"
6353
+ ],
6354
+ "tools": [
6355
+ "alp_delegate",
6356
+ "alp_wait",
6357
+ "alp_send",
6358
+ "alp_board",
6359
+ "alp_task"
6360
+ ],
6361
+ "mcpServers": [],
6362
+ "hooks": 0,
6363
+ "instructionsSha": "0123456789ab"
6364
+ },
6365
+ "proposed": {
6366
+ "team": "pho",
6367
+ "teamLabel": "Phở",
6368
+ "agent": "main",
6369
+ "runtime": "claude",
6370
+ "model": "opus",
6371
+ "thinking": "medium",
6372
+ "mode": "workspace-write",
6373
+ "supervisor": true,
6374
+ "maxPeers": 2,
6375
+ "delegates": [
6376
+ "peer",
6377
+ "oracle",
6378
+ "reviewer"
6379
+ ],
6380
+ "tools": [
6381
+ "alp_delegate",
6382
+ "alp_wait",
6383
+ "alp_send",
6384
+ "alp_board",
6385
+ "alp_task"
6386
+ ],
6387
+ "mcpServers": [],
6388
+ "hooks": 0,
6389
+ "instructionsSha": "0123456789ab"
6390
+ },
6391
+ "changes": [
6392
+ "model"
6393
+ ],
6394
+ "restart": true,
6395
+ "allowed": false,
6396
+ "reason": "runtime_mismatch",
6397
+ "message": "A session keeps its runtime; start a new session to use claude",
6398
+ "teams": [
6399
+ {
6400
+ "id": "pho",
6401
+ "label": "Phở"
6402
+ }
6403
+ ]
6404
+ }
6405
+ }
6406
+ },
6407
+ {
6408
+ "name": "session.configure.preview result without the proposed configuration",
6409
+ "check": "result",
6410
+ "method": "session.configure.preview",
6411
+ "valid": false,
6412
+ "value": {
6413
+ "preview": {
6414
+ "current": {
6415
+ "team": "pho",
6416
+ "teamLabel": "Phở",
6417
+ "agent": "main",
6418
+ "runtime": "codex",
6419
+ "model": "gpt-5.5",
6420
+ "thinking": "medium",
6421
+ "mode": "workspace-write",
6422
+ "supervisor": true,
6423
+ "maxPeers": 2,
6424
+ "delegates": [
6425
+ "peer",
6426
+ "oracle",
6427
+ "reviewer"
6428
+ ],
6429
+ "tools": [
6430
+ "alp_delegate",
6431
+ "alp_wait",
6432
+ "alp_send",
6433
+ "alp_board",
6434
+ "alp_task"
6435
+ ],
6436
+ "mcpServers": [],
6437
+ "hooks": 0,
6438
+ "instructionsSha": "0123456789ab"
6439
+ },
6440
+ "changes": [],
6441
+ "restart": false,
6442
+ "allowed": true,
6443
+ "teams": []
6444
+ }
6445
+ }
6446
+ },
6447
+ {
6448
+ "name": "session.get result of a session whose runtime reads attached files by path",
6449
+ "check": "result",
6450
+ "method": "session.get",
6451
+ "valid": true,
6452
+ "value": {
6453
+ "session": {
6454
+ "id": "ses_fixture",
6455
+ "projectRoot": "/work/project",
6456
+ "agent": "main",
6457
+ "runtime": "codex",
6458
+ "model": "gpt-6.1-sol",
6459
+ "mode": "workspace-write",
6460
+ "thinking": "low",
6461
+ "workflow": {
6462
+ "mode": "pho",
6463
+ "maxPeers": 2,
6464
+ "supervisor": false
6465
+ },
6466
+ "teamLabel": "Phở",
6467
+ "threadId": "thread-1",
6468
+ "persistent": true,
6469
+ "busy": false,
6470
+ "status": "idle",
6471
+ "title": "Sửa lỗi 😀",
6472
+ "createdAt": "2026-10-15T00:00:00.000Z",
6473
+ "updatedAt": "2026-10-15T00:00:00.000Z",
6474
+ "promptImages": true,
6475
+ "promptAttachments": [
6476
+ "file.path"
6477
+ ]
6478
+ }
6479
+ }
6480
+ },
6481
+ {
6482
+ "name": "session.get result with an unknown attachment route",
6483
+ "check": "result",
6484
+ "method": "session.get",
6485
+ "valid": false,
6486
+ "value": {
6487
+ "session": {
6488
+ "id": "ses_fixture",
6489
+ "projectRoot": "/work/project",
6490
+ "agent": "main",
6491
+ "runtime": "codex",
6492
+ "model": "gpt-6.1-sol",
6493
+ "mode": "workspace-write",
6494
+ "thinking": "low",
6495
+ "workflow": {
6496
+ "mode": "pho",
6497
+ "maxPeers": 2,
6498
+ "supervisor": false
6499
+ },
6500
+ "teamLabel": "Phở",
6501
+ "threadId": "thread-1",
6502
+ "persistent": true,
6503
+ "busy": false,
6504
+ "status": "idle",
6505
+ "title": "Sửa lỗi 😀",
6506
+ "createdAt": "2026-10-15T00:00:00.000Z",
6507
+ "updatedAt": "2026-10-15T00:00:00.000Z",
6508
+ "promptImages": true,
6509
+ "promptAttachments": [
6510
+ "host.path"
6511
+ ]
6512
+ }
6513
+ }
6514
+ },
6515
+ {
6516
+ "name": "item user_message with attachments by id and display name",
6517
+ "check": "envelope",
6518
+ "valid": true,
6519
+ "value": {
6520
+ "sessionId": "ses_fixture",
6521
+ "epoch": "epoch-1",
6522
+ "seq": 4,
6523
+ "cursor": 13,
6524
+ "ts": "2026-10-23T00:00:00.000Z",
6525
+ "event": {
6526
+ "type": "item",
6527
+ "item": {
6528
+ "kind": "user_message",
6529
+ "id": "user:m-3",
6530
+ "text": "Đọc tệp này",
6531
+ "clientMessageId": "m-3",
6532
+ "origin": "user",
6533
+ "attachments": [
6534
+ {
6535
+ "attachmentId": "att_0123456789abcdef0123456789abcdef",
6536
+ "name": "report.pdf",
6537
+ "mimeType": "application/pdf",
6538
+ "size": 2048
6539
+ }
6540
+ ]
6541
+ }
6542
+ }
6543
+ }
6544
+ },
6545
+ {
6546
+ "name": "item user_message whose attachment names a host path",
6547
+ "check": "envelope",
6548
+ "valid": false,
6549
+ "value": {
6550
+ "sessionId": "ses_fixture",
6551
+ "epoch": "epoch-1",
6552
+ "seq": 4,
6553
+ "cursor": 13,
6554
+ "ts": "2026-10-23T00:00:00.000Z",
6555
+ "event": {
6556
+ "type": "item",
6557
+ "item": {
6558
+ "kind": "user_message",
6559
+ "id": "user:m-4",
6560
+ "text": "x",
6561
+ "clientMessageId": "m-4",
6562
+ "attachments": [
6563
+ {
6564
+ "attachmentId": "att_0123456789abcdef0123456789abcdef",
6565
+ "name": "report.pdf",
6566
+ "mimeType": "application/pdf",
6567
+ "size": 2048,
6568
+ "path": "/home/u/.alp/state/staged/att_0123456789abcdef0123456789abcdef.pdf"
6569
+ }
6570
+ ]
6571
+ }
6572
+ }
6573
+ }
6574
+ },
6575
+ {
6576
+ "name": "item user_message with an attachment id that is not one",
6577
+ "check": "envelope",
6578
+ "valid": false,
6579
+ "value": {
6580
+ "sessionId": "ses_fixture",
6581
+ "epoch": "epoch-1",
6582
+ "seq": 4,
6583
+ "cursor": 13,
6584
+ "ts": "2026-10-23T00:00:00.000Z",
6585
+ "event": {
6586
+ "type": "item",
6587
+ "item": {
6588
+ "kind": "user_message",
6589
+ "id": "user:m-5",
6590
+ "text": "x",
6591
+ "clientMessageId": "m-5",
6592
+ "attachments": [
6593
+ {
6594
+ "attachmentId": "../payload",
6595
+ "name": "report.pdf",
6596
+ "mimeType": "application/pdf",
6597
+ "size": 2048
6598
+ }
6599
+ ]
6600
+ }
6601
+ }
6602
+ }
6603
+ },
6604
+ {
6605
+ "name": "terminal.create params",
6606
+ "check": "params",
6607
+ "method": "terminal.create",
6608
+ "valid": true,
6609
+ "value": {
6610
+ "workspaceId": "ws_1",
6611
+ "cols": 80,
6612
+ "rows": 24,
6613
+ "requestId": "req-1"
6614
+ }
6615
+ },
6616
+ {
6617
+ "name": "terminal.create params from a gateway with principal context",
6618
+ "check": "params",
6619
+ "method": "terminal.create",
6620
+ "valid": true,
6621
+ "value": {
6622
+ "workspaceId": "ws_1",
6623
+ "cols": 120,
6624
+ "rows": 40,
6625
+ "requestId": "req-2",
6626
+ "principalId": "abcdef0123456789",
6627
+ "principalEpoch": "0123456789abcdef0123456789abcdef",
6628
+ "authorizedRoots": [
6629
+ "/work/project"
6630
+ ]
6631
+ }
6632
+ },
6633
+ {
6634
+ "name": "terminal.create never takes a shell path",
6635
+ "check": "params",
6636
+ "method": "terminal.create",
6637
+ "valid": false,
6638
+ "value": {
6639
+ "workspaceId": "ws_1",
6640
+ "cols": 80,
6641
+ "rows": 24,
6642
+ "requestId": "req-3",
6643
+ "shell": "/bin/bash"
6644
+ }
6645
+ },
6646
+ {
6647
+ "name": "terminal.create never takes a command, args or env",
6648
+ "check": "params",
6649
+ "method": "terminal.create",
6650
+ "valid": false,
6651
+ "value": {
6652
+ "workspaceId": "ws_1",
6653
+ "cols": 80,
6654
+ "rows": 24,
6655
+ "requestId": "req-4",
6656
+ "command": "rm",
6657
+ "args": [
6658
+ "-rf",
6659
+ "/"
6660
+ ],
6661
+ "env": {
6662
+ "PATH": "/tmp"
6663
+ }
6664
+ }
6665
+ },
6666
+ {
6667
+ "name": "terminal.create never takes a cwd",
6668
+ "check": "params",
6669
+ "method": "terminal.create",
6670
+ "valid": false,
6671
+ "value": {
6672
+ "workspaceId": "ws_1",
6673
+ "cols": 80,
6674
+ "rows": 24,
6675
+ "requestId": "req-5",
6676
+ "cwd": "/etc"
6677
+ }
6678
+ },
6679
+ {
6680
+ "name": "terminal.create with a size out of bounds",
6681
+ "check": "params",
6682
+ "method": "terminal.create",
6683
+ "valid": false,
6684
+ "value": {
6685
+ "workspaceId": "ws_1",
6686
+ "cols": 1,
6687
+ "rows": 24,
6688
+ "requestId": "req-6"
6689
+ }
6690
+ },
6691
+ {
6692
+ "name": "terminal.create without a requestId",
6693
+ "check": "params",
6694
+ "method": "terminal.create",
6695
+ "valid": false,
6696
+ "value": {
6697
+ "workspaceId": "ws_1",
6698
+ "cols": 80,
6699
+ "rows": 24
6700
+ }
6701
+ },
6702
+ {
6703
+ "name": "terminal.create result",
6704
+ "check": "result",
6705
+ "method": "terminal.create",
6706
+ "valid": true,
6707
+ "value": {
6708
+ "terminal": {
6709
+ "terminalId": "term_0123456789abcdef0123456789abcdef",
6710
+ "workspaceId": "ws_1",
6711
+ "title": "zsh",
6712
+ "cols": 80,
6713
+ "rows": 24,
6714
+ "state": "running",
6715
+ "attached": false,
6716
+ "createdAt": "2026-10-23T00:00:00.000Z",
6717
+ "lastActivityAt": "2026-10-23T00:00:00.000Z",
6718
+ "expiresAt": "2026-10-23T08:00:00.000Z"
6719
+ }
6720
+ }
6721
+ },
6722
+ {
6723
+ "name": "terminal.create result never carries a pid",
6724
+ "check": "result",
6725
+ "method": "terminal.create",
6726
+ "valid": false,
6727
+ "value": {
6728
+ "terminal": {
6729
+ "terminalId": "term_0123456789abcdef0123456789abcdef",
6730
+ "workspaceId": "ws_1",
6731
+ "title": "zsh",
6732
+ "cols": 80,
6733
+ "rows": 24,
6734
+ "state": "running",
6735
+ "attached": false,
6736
+ "createdAt": "2026-10-23T00:00:00.000Z",
6737
+ "lastActivityAt": "2026-10-23T00:00:00.000Z",
6738
+ "expiresAt": "2026-10-23T08:00:00.000Z",
6739
+ "pid": 4242
6740
+ }
6741
+ }
6742
+ },
6743
+ {
6744
+ "name": "terminal.list params",
6745
+ "check": "params",
6746
+ "method": "terminal.list",
6747
+ "valid": true,
6748
+ "value": {}
6749
+ },
6750
+ {
6751
+ "name": "terminal.list params for one workspace",
6752
+ "check": "params",
6753
+ "method": "terminal.list",
6754
+ "valid": true,
6755
+ "value": {
6756
+ "workspaceId": "ws_1"
6757
+ }
6758
+ },
6759
+ {
6760
+ "name": "terminal.list result with a running and an exited terminal",
6761
+ "check": "result",
6762
+ "method": "terminal.list",
6763
+ "valid": true,
6764
+ "value": {
6765
+ "terminals": [
6766
+ {
6767
+ "terminalId": "term_0123456789abcdef0123456789abcdef",
6768
+ "workspaceId": "ws_1",
6769
+ "title": "zsh",
6770
+ "cols": 80,
6771
+ "rows": 24,
6772
+ "state": "running",
6773
+ "attached": false,
6774
+ "createdAt": "2026-10-23T00:00:00.000Z",
6775
+ "lastActivityAt": "2026-10-23T00:00:00.000Z",
6776
+ "expiresAt": "2026-10-23T08:00:00.000Z"
6777
+ },
6778
+ {
6779
+ "terminalId": "term_0123456789abcdef0123456789abcdef",
6780
+ "workspaceId": "ws_1",
6781
+ "title": "zsh",
6782
+ "cols": 80,
6783
+ "rows": 24,
6784
+ "state": "exited",
6785
+ "attached": true,
6786
+ "createdAt": "2026-10-23T00:00:00.000Z",
6787
+ "lastActivityAt": "2026-10-23T00:00:00.000Z",
6788
+ "expiresAt": "2026-10-23T08:00:00.000Z",
6789
+ "exitCode": 0,
6790
+ "signal": null,
6791
+ "endReason": "exited"
6792
+ }
6793
+ ]
6794
+ }
6795
+ },
6796
+ {
6797
+ "name": "terminal.attach params",
6798
+ "check": "params",
6799
+ "method": "terminal.attach",
6800
+ "valid": true,
6801
+ "value": {
6802
+ "terminalId": "term_0123456789abcdef0123456789abcdef"
6803
+ }
6804
+ },
6805
+ {
6806
+ "name": "terminal.attach params after a seq",
6807
+ "check": "params",
6808
+ "method": "terminal.attach",
6809
+ "valid": true,
6810
+ "value": {
6811
+ "terminalId": "term_0123456789abcdef0123456789abcdef",
6812
+ "after": 12
6813
+ }
6814
+ },
6815
+ {
6816
+ "name": "terminal.attach with an id that is not one",
6817
+ "check": "params",
6818
+ "method": "terminal.attach",
6819
+ "valid": false,
6820
+ "value": {
6821
+ "terminalId": "../term"
6822
+ }
6823
+ },
6824
+ {
6825
+ "name": "terminal.attach result",
6826
+ "check": "result",
6827
+ "method": "terminal.attach",
6828
+ "valid": true,
6829
+ "value": {
6830
+ "terminal": {
6831
+ "terminalId": "term_0123456789abcdef0123456789abcdef",
6832
+ "workspaceId": "ws_1",
6833
+ "title": "zsh",
6834
+ "cols": 80,
6835
+ "rows": 24,
6836
+ "state": "running",
6837
+ "attached": true,
6838
+ "createdAt": "2026-10-23T00:00:00.000Z",
6839
+ "lastActivityAt": "2026-10-23T00:00:00.000Z",
6840
+ "expiresAt": "2026-10-23T08:00:00.000Z"
6841
+ },
6842
+ "nextSeq": 13
6843
+ }
6844
+ },
6845
+ {
6846
+ "name": "terminal.attach result with a gap",
6847
+ "check": "result",
6848
+ "method": "terminal.attach",
6849
+ "valid": true,
6850
+ "value": {
6851
+ "terminal": {
6852
+ "terminalId": "term_0123456789abcdef0123456789abcdef",
6853
+ "workspaceId": "ws_1",
6854
+ "title": "zsh",
6855
+ "cols": 80,
6856
+ "rows": 24,
6857
+ "state": "running",
6858
+ "attached": true,
6859
+ "createdAt": "2026-10-23T00:00:00.000Z",
6860
+ "lastActivityAt": "2026-10-23T00:00:00.000Z",
6861
+ "expiresAt": "2026-10-23T08:00:00.000Z"
6862
+ },
6863
+ "nextSeq": 900,
6864
+ "gap": {
6865
+ "fromSeq": 13,
6866
+ "toSeq": 340
6867
+ }
6868
+ }
6869
+ },
6870
+ {
6871
+ "name": "terminal.input params",
6872
+ "check": "params",
6873
+ "method": "terminal.input",
6874
+ "valid": true,
6875
+ "value": {
6876
+ "terminalId": "term_0123456789abcdef0123456789abcdef",
6877
+ "data": "ls -la\r"
6878
+ }
6879
+ },
6880
+ {
6881
+ "name": "terminal.input params Ctrl-C",
6882
+ "check": "params",
6883
+ "method": "terminal.input",
6884
+ "valid": true,
6885
+ "value": {
6886
+ "terminalId": "term_0123456789abcdef0123456789abcdef",
6887
+ "data": "\u0003"
6888
+ }
6889
+ },
6890
+ {
6891
+ "name": "terminal.input with empty data",
6892
+ "check": "params",
6893
+ "method": "terminal.input",
6894
+ "valid": false,
6895
+ "value": {
6896
+ "terminalId": "term_0123456789abcdef0123456789abcdef",
6897
+ "data": ""
6898
+ }
6899
+ },
6900
+ {
6901
+ "name": "terminal.input over 64 KiB",
6902
+ "check": "params",
6903
+ "method": "terminal.input",
6904
+ "valid": false,
6905
+ "value": {
6906
+ "terminalId": "term_0123456789abcdef0123456789abcdef",
6907
+ "data": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
6908
+ }
6909
+ },
6910
+ {
6911
+ "name": "terminal.input result",
6912
+ "check": "result",
6913
+ "method": "terminal.input",
6914
+ "valid": true,
6915
+ "value": {
6916
+ "bytes": 7
6917
+ }
6918
+ },
6919
+ {
6920
+ "name": "terminal.resize params",
6921
+ "check": "params",
6922
+ "method": "terminal.resize",
6923
+ "valid": true,
6924
+ "value": {
6925
+ "terminalId": "term_0123456789abcdef0123456789abcdef",
6926
+ "cols": 132,
6927
+ "rows": 40
6928
+ }
6929
+ },
6930
+ {
6931
+ "name": "terminal.resize too many rows",
6932
+ "check": "params",
6933
+ "method": "terminal.resize",
6934
+ "valid": false,
6935
+ "value": {
6936
+ "terminalId": "term_0123456789abcdef0123456789abcdef",
6937
+ "cols": 132,
6938
+ "rows": 201
6939
+ }
6940
+ },
6941
+ {
6942
+ "name": "terminal.resize result",
6943
+ "check": "result",
6944
+ "method": "terminal.resize",
6945
+ "valid": true,
6946
+ "value": {
6947
+ "cols": 132,
6948
+ "rows": 40
6949
+ }
6950
+ },
6951
+ {
6952
+ "name": "terminal.close params",
6953
+ "check": "params",
6954
+ "method": "terminal.close",
6955
+ "valid": true,
6956
+ "value": {
6957
+ "terminalId": "term_0123456789abcdef0123456789abcdef"
6958
+ }
6959
+ },
6960
+ {
6961
+ "name": "terminal.close result",
6962
+ "check": "result",
6963
+ "method": "terminal.close",
6964
+ "valid": true,
6965
+ "value": {
6966
+ "closed": true
6967
+ }
6968
+ },
6969
+ {
6970
+ "name": "terminal.revoke params",
6971
+ "check": "params",
6972
+ "method": "terminal.revoke",
6973
+ "valid": true,
6974
+ "value": {
6975
+ "principalId": "abcdef0123456789"
6976
+ }
6977
+ },
6978
+ {
6979
+ "name": "terminal.revoke needs a principal",
6980
+ "check": "params",
6981
+ "method": "terminal.revoke",
6982
+ "valid": false,
6983
+ "value": {}
6984
+ },
6985
+ {
6986
+ "name": "terminal.revoke result",
6987
+ "check": "result",
6988
+ "method": "terminal.revoke",
6989
+ "valid": true,
6990
+ "value": {
6991
+ "closed": 2
6992
+ }
6993
+ },
6994
+ {
6995
+ "name": "daemon.hello result with terminal limits",
6996
+ "check": "result",
6997
+ "method": "daemon.hello",
6998
+ "valid": true,
6999
+ "value": {
7000
+ "protocolVersion": 1,
7001
+ "capabilities": [
7002
+ "terminal"
7003
+ ],
7004
+ "terminalLimits": {
7005
+ "maxPerPrincipal": 4,
7006
+ "maxPerDaemon": 16,
7007
+ "maxInputBytes": 65536,
7008
+ "maxOutputFrameBytes": 65536,
7009
+ "replayBytes": 1048576,
7010
+ "idleMs": 1800000,
7011
+ "maxLifetimeMs": 28800000,
7012
+ "reconnectMs": 60000
7013
+ }
7014
+ }
7015
+ },
7016
+ {
7017
+ "name": "daemon.hello result with incomplete terminal limits",
7018
+ "check": "result",
7019
+ "method": "daemon.hello",
7020
+ "valid": false,
7021
+ "value": {
7022
+ "protocolVersion": 1,
7023
+ "capabilities": [
7024
+ "terminal"
7025
+ ],
7026
+ "terminalLimits": {
7027
+ "maxPerPrincipal": 4
7028
+ }
7029
+ }
7030
+ },
7031
+ {
7032
+ "name": "terminal.event output notification",
7033
+ "check": "message",
7034
+ "valid": true,
7035
+ "value": {
7036
+ "jsonrpc": "2.0",
7037
+ "method": "terminal.event",
7038
+ "params": {
7039
+ "terminalId": "term_0123456789abcdef0123456789abcdef",
7040
+ "type": "output",
7041
+ "seq": 1,
7042
+ "data": "\u001b[1mPROMPT$\u001b[0m "
7043
+ }
7044
+ }
7045
+ },
7046
+ {
7047
+ "name": "terminal.event exit notification",
7048
+ "check": "message",
7049
+ "valid": true,
7050
+ "value": {
7051
+ "jsonrpc": "2.0",
7052
+ "method": "terminal.event",
7053
+ "params": {
7054
+ "terminalId": "term_0123456789abcdef0123456789abcdef",
7055
+ "type": "exit",
7056
+ "seq": 2,
7057
+ "exitCode": null,
7058
+ "signal": 1,
7059
+ "reason": "revoked"
7060
+ }
7061
+ }
7062
+ },
7063
+ {
7064
+ "name": "terminal.event detached notification",
7065
+ "check": "message",
7066
+ "valid": true,
7067
+ "value": {
7068
+ "jsonrpc": "2.0",
7069
+ "method": "terminal.event",
7070
+ "params": {
7071
+ "terminalId": "term_0123456789abcdef0123456789abcdef",
7072
+ "type": "detached",
7073
+ "reason": "slow_consumer"
7074
+ }
7075
+ }
7076
+ },
7077
+ {
7078
+ "name": "terminal.event output without a seq",
7079
+ "check": "message",
7080
+ "valid": false,
7081
+ "value": {
7082
+ "jsonrpc": "2.0",
7083
+ "method": "terminal.event",
7084
+ "params": {
7085
+ "terminalId": "term_0123456789abcdef0123456789abcdef",
7086
+ "type": "output",
7087
+ "data": "x"
7088
+ }
7089
+ }
7090
+ },
7091
+ {
7092
+ "name": "terminal.event exit with an unknown reason",
7093
+ "check": "message",
7094
+ "valid": false,
7095
+ "value": {
7096
+ "jsonrpc": "2.0",
7097
+ "method": "terminal.event",
7098
+ "params": {
7099
+ "terminalId": "term_0123456789abcdef0123456789abcdef",
7100
+ "type": "exit",
7101
+ "seq": 2,
7102
+ "exitCode": 0,
7103
+ "signal": null,
7104
+ "reason": "crashed"
7105
+ }
7106
+ }
7107
+ },
7108
+ {
7109
+ "name": "conditional interrupt params",
7110
+ "check": "params",
7111
+ "method": "session.interrupt",
7112
+ "valid": true,
7113
+ "value": {
7114
+ "sessionId": "ses_fixture",
7115
+ "turnId": "turn-1"
7116
+ }
7117
+ },
7118
+ {
7119
+ "name": "conditional interrupt with an empty turn",
7120
+ "check": "params",
7121
+ "method": "session.interrupt",
7122
+ "valid": false,
7123
+ "value": {
7124
+ "sessionId": "ses_fixture",
7125
+ "turnId": ""
7126
+ }
7127
+ },
7128
+ {
7129
+ "name": "conditional interrupt with a non-string turn",
7130
+ "check": "params",
7131
+ "method": "session.interrupt",
7132
+ "valid": false,
7133
+ "value": {
7134
+ "sessionId": "ses_fixture",
7135
+ "turnId": 42
7136
+ }
7137
+ },
7138
+ {
7139
+ "name": "conditional interrupt canceled the target",
7140
+ "check": "result",
7141
+ "method": "session.interrupt",
7142
+ "valid": true,
7143
+ "value": {
7144
+ "interrupted": true
7145
+ }
7146
+ },
7147
+ {
7148
+ "name": "conditional interrupt left another turn untouched",
7149
+ "check": "result",
7150
+ "method": "session.interrupt",
7151
+ "valid": true,
7152
+ "value": {
7153
+ "interrupted": false
7154
+ }
7155
+ },
7156
+ {
7157
+ "name": "conditional interrupt with a non-boolean answer",
7158
+ "check": "result",
7159
+ "method": "session.interrupt",
7160
+ "valid": false,
7161
+ "value": {
7162
+ "interrupted": "yes"
7163
+ }
3917
7164
  }
3918
7165
  ]
3919
7166
  }