airbyte-source-github 1.5.7__py3-none-any.whl

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.
Files changed (88) hide show
  1. airbyte_source_github-1.5.7.dist-info/METADATA +144 -0
  2. airbyte_source_github-1.5.7.dist-info/RECORD +88 -0
  3. airbyte_source_github-1.5.7.dist-info/WHEEL +5 -0
  4. airbyte_source_github-1.5.7.dist-info/entry_points.txt +2 -0
  5. airbyte_source_github-1.5.7.dist-info/top_level.txt +3 -0
  6. integration_tests/__init__.py +0 -0
  7. integration_tests/abnormal_state.json +237 -0
  8. integration_tests/acceptance.py +16 -0
  9. integration_tests/configured_catalog.json +435 -0
  10. integration_tests/configured_catalog_full_refresh_test.json +415 -0
  11. integration_tests/invalid_config.json +5 -0
  12. integration_tests/sample_config.json +5 -0
  13. integration_tests/sample_state.json +137 -0
  14. source_github/__init__.py +27 -0
  15. source_github/config_migrations.py +106 -0
  16. source_github/constants.py +9 -0
  17. source_github/github_schema.py +41034 -0
  18. source_github/graphql.py +327 -0
  19. source_github/run.py +17 -0
  20. source_github/schemas/assignees.json +63 -0
  21. source_github/schemas/branches.json +48 -0
  22. source_github/schemas/collaborators.json +80 -0
  23. source_github/schemas/comments.json +104 -0
  24. source_github/schemas/commit_comment_reactions.json +4 -0
  25. source_github/schemas/commit_comments.json +53 -0
  26. source_github/schemas/commits.json +126 -0
  27. source_github/schemas/contributor_activity.json +109 -0
  28. source_github/schemas/deployments.json +77 -0
  29. source_github/schemas/events.json +63 -0
  30. source_github/schemas/issue_comment_reactions.json +4 -0
  31. source_github/schemas/issue_events.json +335 -0
  32. source_github/schemas/issue_labels.json +30 -0
  33. source_github/schemas/issue_milestones.json +61 -0
  34. source_github/schemas/issue_reactions.json +28 -0
  35. source_github/schemas/issue_timeline_events.json +1056 -0
  36. source_github/schemas/issues.json +281 -0
  37. source_github/schemas/organizations.json +197 -0
  38. source_github/schemas/project_cards.json +50 -0
  39. source_github/schemas/project_columns.json +38 -0
  40. source_github/schemas/projects.json +50 -0
  41. source_github/schemas/projects_v2.json +80 -0
  42. source_github/schemas/pull_request_comment_reactions.json +28 -0
  43. source_github/schemas/pull_request_commits.json +122 -0
  44. source_github/schemas/pull_request_stats.json +84 -0
  45. source_github/schemas/pull_requests.json +363 -0
  46. source_github/schemas/releases.json +126 -0
  47. source_github/schemas/repositories.json +313 -0
  48. source_github/schemas/review_comments.json +118 -0
  49. source_github/schemas/reviews.json +69 -0
  50. source_github/schemas/shared/events/comment.json +188 -0
  51. source_github/schemas/shared/events/commented.json +118 -0
  52. source_github/schemas/shared/events/committed.json +56 -0
  53. source_github/schemas/shared/events/cross_referenced.json +784 -0
  54. source_github/schemas/shared/events/reviewed.json +139 -0
  55. source_github/schemas/shared/reaction.json +27 -0
  56. source_github/schemas/shared/reactions.json +35 -0
  57. source_github/schemas/shared/user.json +59 -0
  58. source_github/schemas/shared/user_graphql.json +26 -0
  59. source_github/schemas/stargazers.json +19 -0
  60. source_github/schemas/tags.json +32 -0
  61. source_github/schemas/team_members.json +66 -0
  62. source_github/schemas/team_memberships.json +24 -0
  63. source_github/schemas/teams.json +50 -0
  64. source_github/schemas/users.json +63 -0
  65. source_github/schemas/workflow_jobs.json +109 -0
  66. source_github/schemas/workflow_runs.json +449 -0
  67. source_github/schemas/workflows.json +41 -0
  68. source_github/source.py +339 -0
  69. source_github/spec.json +179 -0
  70. source_github/streams.py +1678 -0
  71. source_github/utils.py +152 -0
  72. unit_tests/__init__.py +3 -0
  73. unit_tests/conftest.py +29 -0
  74. unit_tests/projects_v2_pull_requests_query.json +3 -0
  75. unit_tests/pull_request_stats_query.json +3 -0
  76. unit_tests/responses/contributor_activity_response.json +33 -0
  77. unit_tests/responses/graphql_reviews_responses.json +405 -0
  78. unit_tests/responses/issue_timeline_events.json +166 -0
  79. unit_tests/responses/issue_timeline_events_response.json +170 -0
  80. unit_tests/responses/projects_v2_response.json +45 -0
  81. unit_tests/responses/pull_request_comment_reactions.json +744 -0
  82. unit_tests/responses/pull_request_stats_response.json +317 -0
  83. unit_tests/test_migrations/test_config.json +8 -0
  84. unit_tests/test_migrations/test_new_config.json +8 -0
  85. unit_tests/test_multiple_token_authenticator.py +160 -0
  86. unit_tests/test_source.py +326 -0
  87. unit_tests/test_stream.py +1471 -0
  88. unit_tests/utils.py +78 -0
@@ -0,0 +1,744 @@
1
+ [
2
+ {
3
+ "data": {
4
+ "repository": {
5
+ "name": "airbyte",
6
+ "owner": {
7
+ "login": "airbytehq"
8
+ },
9
+ "pullRequests": {
10
+ "pageInfo": {
11
+ "hasNextPage": true,
12
+ "endCursor": "endCursor"
13
+ },
14
+ "totalCount": 4,
15
+ "nodes": [
16
+ {
17
+ "node_id": "pull_request1",
18
+ "reviews": {
19
+ "pageInfo": {
20
+ "hasNextPage": false,
21
+ "endCursor": "endCursor"
22
+ },
23
+ "totalCount": 2,
24
+ "nodes": [
25
+ {
26
+ "node_id": "review1",
27
+ "comments": {
28
+ "pageInfo": {
29
+ "hasNextPage": false,
30
+ "endCursor": "endCursor"
31
+ },
32
+ "totalCount": 2,
33
+ "nodes": [
34
+ {
35
+ "node_id": "comment1",
36
+ "id": "comment1",
37
+ "reactions": {
38
+ "pageInfo": {
39
+ "hasNextPage": false,
40
+ "endCursor": "endCursor"
41
+ },
42
+ "totalCount": 2,
43
+ "nodes": [
44
+ {
45
+ "node_id": "reaction1",
46
+ "user": {},
47
+ "created_at": "2022-01-01T00:00:01Z"
48
+ },
49
+ {
50
+ "node_id": "reaction2",
51
+ "user": {},
52
+ "created_at": "2022-01-01T00:00:01Z"
53
+ }
54
+ ]
55
+ }
56
+ },
57
+ {
58
+ "node_id": "comment2",
59
+ "id": "comment2",
60
+ "reactions": {
61
+ "pageInfo": {
62
+ "hasNextPage": true,
63
+ "endCursor": "endCursor"
64
+ },
65
+ "totalCount": 3,
66
+ "nodes": [
67
+ {
68
+ "node_id": "reaction3",
69
+ "user": {},
70
+ "created_at": "2022-01-01T00:00:01Z"
71
+ },
72
+ {
73
+ "node_id": "reaction4",
74
+ "user": {},
75
+ "created_at": "2022-01-01T00:00:01Z"
76
+ }
77
+ ]
78
+ }
79
+ }
80
+ ]
81
+ }
82
+ },
83
+ {
84
+ "node_id": "review2",
85
+ "comments": {
86
+ "pageInfo": {
87
+ "hasNextPage": true,
88
+ "endCursor": "endCursor"
89
+ },
90
+ "totalCount": 3,
91
+ "nodes": [
92
+ {
93
+ "node_id": "comment3",
94
+ "id": "comment3",
95
+ "reactions": {
96
+ "pageInfo": {
97
+ "hasNextPage": false,
98
+ "endCursor": "endCursor"
99
+ },
100
+ "totalCount": 0,
101
+ "nodes": []
102
+ }
103
+ },
104
+ {
105
+ "node_id": "comment4",
106
+ "id": "comment4",
107
+ "reactions": {
108
+ "pageInfo": {
109
+ "hasNextPage": false,
110
+ "endCursor": "endCursor"
111
+ },
112
+ "totalCount": 0,
113
+ "nodes": []
114
+ }
115
+ }
116
+ ]
117
+ }
118
+ }
119
+ ]
120
+ }
121
+ },
122
+ {
123
+ "node_id": "pull_request2",
124
+ "reviews": {
125
+ "pageInfo": {
126
+ "hasNextPage": true,
127
+ "endCursor": "endCursor"
128
+ },
129
+ "totalCount": 3,
130
+ "nodes": [
131
+ {
132
+ "node_id": "review3",
133
+ "comments": {
134
+ "pageInfo": {
135
+ "hasNextPage": false,
136
+ "endCursor": "endCursor"
137
+ },
138
+ "totalCount": 0,
139
+ "nodes": []
140
+ }
141
+ },
142
+ {
143
+ "node_id": "review4",
144
+ "comments": {
145
+ "pageInfo": {
146
+ "hasNextPage": false,
147
+ "endCursor": "endCursor"
148
+ },
149
+ "totalCount": 0,
150
+ "nodes": []
151
+ }
152
+ }
153
+ ]
154
+ }
155
+ }
156
+ ]
157
+ }
158
+ }
159
+ }
160
+ },
161
+ {
162
+ "data": {
163
+ "node": {
164
+ "__typename": "PullRequestReviewComment",
165
+ "node_id": "comment2",
166
+ "id": "comment2",
167
+ "repository": {
168
+ "name": "airbyte",
169
+ "owner": {
170
+ "login": "airbytehq"
171
+ }
172
+ },
173
+ "reactions": {
174
+ "pageInfo": {
175
+ "hasNextPage": false,
176
+ "endCursor": "endCursor"
177
+ },
178
+ "totalCount": 3,
179
+ "nodes": [
180
+ {
181
+ "node_id": "reaction5",
182
+ "user": {},
183
+ "created_at": "2022-01-01T00:00:01Z"
184
+ }
185
+ ]
186
+ }
187
+ }
188
+ }
189
+ },
190
+ {
191
+ "data": {
192
+ "node": {
193
+ "__typename": "PullRequestReview",
194
+ "node_id": "review2",
195
+ "repository": {
196
+ "name": "airbyte",
197
+ "owner": {
198
+ "login": "airbytehq"
199
+ }
200
+ },
201
+ "comments": {
202
+ "pageInfo": {
203
+ "hasNextPage": false,
204
+ "endCursor": "endCursor"
205
+ },
206
+ "totalCount": 3,
207
+ "nodes": [
208
+ {
209
+ "node_id": "comment5",
210
+ "id": "comment5",
211
+ "reactions": {
212
+ "pageInfo": {
213
+ "hasNextPage": false,
214
+ "endCursor": "endCursor"
215
+ },
216
+ "totalCount": 1,
217
+ "nodes": [
218
+ {
219
+ "node_id": "reaction6",
220
+ "user": {},
221
+ "created_at": "2022-01-01T00:00:01Z"
222
+ }
223
+ ]
224
+ }
225
+ }
226
+ ]
227
+ }
228
+ }
229
+ }
230
+ },
231
+ {
232
+ "data": {
233
+ "node": {
234
+ "__typename": "PullRequest",
235
+ "node_id": "pull_request2",
236
+ "repository": {
237
+ "name": "airbyte",
238
+ "owner": {
239
+ "login": "airbytehq"
240
+ }
241
+ },
242
+ "reviews": {
243
+ "pageInfo": {
244
+ "hasNextPage": false,
245
+ "endCursor": "endCursor"
246
+ },
247
+ "totalCount": 3,
248
+ "nodes": [
249
+ {
250
+ "node_id": "review5",
251
+ "comments": {
252
+ "pageInfo": {
253
+ "hasNextPage": false,
254
+ "endCursor": "endCursor"
255
+ },
256
+ "totalCount": 2,
257
+ "nodes": [
258
+ {
259
+ "node_id": "comment6",
260
+ "id": "comment6",
261
+ "reactions": {
262
+ "pageInfo": {
263
+ "hasNextPage": false,
264
+ "endCursor": "endCursor"
265
+ },
266
+ "totalCount": 0,
267
+ "nodes": []
268
+ }
269
+ },
270
+ {
271
+ "node_id": "comment7",
272
+ "id": "comment7",
273
+ "reactions": {
274
+ "pageInfo": {
275
+ "hasNextPage": false,
276
+ "endCursor": "endCursor"
277
+ },
278
+ "totalCount": 1,
279
+ "nodes": [
280
+ {
281
+ "node_id": "reaction7",
282
+ "user": {},
283
+ "created_at": "2022-01-01T00:00:01Z"
284
+ }
285
+ ]
286
+ }
287
+ }
288
+ ]
289
+ }
290
+ }
291
+ ]
292
+ }
293
+ }
294
+ }
295
+ },
296
+ {
297
+ "data": {
298
+ "repository": {
299
+ "name": "airbyte",
300
+ "owner": {
301
+ "login": "airbytehq"
302
+ },
303
+ "pullRequests": {
304
+ "pageInfo": {
305
+ "hasNextPage": false,
306
+ "endCursor": "endCursor"
307
+ },
308
+ "totalCount": 4,
309
+ "nodes": [
310
+ {
311
+ "node_id": "pull_request3",
312
+ "reviews": {
313
+ "pageInfo": {
314
+ "hasNextPage": false,
315
+ "endCursor": "endCursor"
316
+ },
317
+ "totalCount": 0,
318
+ "nodes": []
319
+ }
320
+ },
321
+ {
322
+ "node_id": "pull_request4",
323
+ "reviews": {
324
+ "pageInfo": {
325
+ "hasNextPage": false,
326
+ "endCursor": "endCursor"
327
+ },
328
+ "totalCount": 1,
329
+ "nodes": [
330
+ {
331
+ "node_id": "review6",
332
+ "comments": {
333
+ "pageInfo": {
334
+ "hasNextPage": false,
335
+ "endCursor": "endCursor"
336
+ },
337
+ "totalCount": 1,
338
+ "nodes": [
339
+ {
340
+ "node_id": "comment8",
341
+ "id": "comment8",
342
+ "reactions": {
343
+ "pageInfo": {
344
+ "hasNextPage": false,
345
+ "endCursor": "endCursor"
346
+ },
347
+ "totalCount": 1,
348
+ "nodes": [
349
+ {
350
+ "node_id": "reaction8",
351
+ "user": {},
352
+ "created_at": "2022-01-01T00:00:01Z"
353
+ }
354
+ ]
355
+ }
356
+ }
357
+ ]
358
+ }
359
+ }
360
+ ]
361
+ }
362
+ }
363
+ ]
364
+ }
365
+ }
366
+ }
367
+ },
368
+ {
369
+ "data": {
370
+ "repository": {
371
+ "name": "airbyte",
372
+ "owner": {
373
+ "login": "airbytehq"
374
+ },
375
+ "pullRequests": {
376
+ "pageInfo": {
377
+ "hasNextPage": true,
378
+ "endCursor": "endCursor"
379
+ },
380
+ "totalCount": 4,
381
+ "nodes": [
382
+ {
383
+ "node_id": "pull_request1",
384
+ "reviews": {
385
+ "pageInfo": {
386
+ "hasNextPage": false,
387
+ "endCursor": "endCursor"
388
+ },
389
+ "totalCount": 2,
390
+ "nodes": [
391
+ {
392
+ "node_id": "review1",
393
+ "comments": {
394
+ "pageInfo": {
395
+ "hasNextPage": false,
396
+ "endCursor": "endCursor"
397
+ },
398
+ "totalCount": 2,
399
+ "nodes": [
400
+ {
401
+ "node_id": "comment1",
402
+ "id": "comment1",
403
+ "reactions": {
404
+ "pageInfo": {
405
+ "hasNextPage": false,
406
+ "endCursor": "endCursor"
407
+ },
408
+ "totalCount": 2,
409
+ "nodes": [
410
+ {
411
+ "node_id": "reaction1",
412
+ "user": {},
413
+ "created_at": "2022-01-01T00:00:01Z"
414
+ },
415
+ {
416
+ "node_id": "reaction2",
417
+ "user": {},
418
+ "created_at": "2022-01-01T00:00:01Z"
419
+ }
420
+ ]
421
+ }
422
+ },
423
+ {
424
+ "node_id": "comment2",
425
+ "id": "comment2",
426
+ "reactions": {
427
+ "pageInfo": {
428
+ "hasNextPage": true,
429
+ "endCursor": "endCursor"
430
+ },
431
+ "totalCount": 4,
432
+ "nodes": [
433
+ {
434
+ "node_id": "reaction3",
435
+ "user": {},
436
+ "created_at": "2022-01-01T00:00:01Z"
437
+ },
438
+ {
439
+ "node_id": "reaction4",
440
+ "user": {},
441
+ "created_at": "2022-01-01T00:00:01Z"
442
+ }
443
+ ]
444
+ }
445
+ }
446
+ ]
447
+ }
448
+ },
449
+ {
450
+ "node_id": "review2",
451
+ "comments": {
452
+ "pageInfo": {
453
+ "hasNextPage": true,
454
+ "endCursor": "endCursor"
455
+ },
456
+ "totalCount": 3,
457
+ "nodes": [
458
+ {
459
+ "node_id": "comment3",
460
+ "id": "comment3",
461
+ "reactions": {
462
+ "pageInfo": {
463
+ "hasNextPage": false,
464
+ "endCursor": "endCursor"
465
+ },
466
+ "totalCount": 0,
467
+ "nodes": []
468
+ }
469
+ },
470
+ {
471
+ "node_id": "comment4",
472
+ "id": "comment4",
473
+ "reactions": {
474
+ "pageInfo": {
475
+ "hasNextPage": false,
476
+ "endCursor": "endCursor"
477
+ },
478
+ "totalCount": 0,
479
+ "nodes": []
480
+ }
481
+ }
482
+ ]
483
+ }
484
+ }
485
+ ]
486
+ }
487
+ },
488
+ {
489
+ "node_id": "pull_request2",
490
+ "reviews": {
491
+ "pageInfo": {
492
+ "hasNextPage": true,
493
+ "endCursor": "endCursor"
494
+ },
495
+ "totalCount": 3,
496
+ "nodes": [
497
+ {
498
+ "node_id": "review3",
499
+ "comments": {
500
+ "pageInfo": {
501
+ "hasNextPage": false,
502
+ "endCursor": "endCursor"
503
+ },
504
+ "totalCount": 0,
505
+ "nodes": []
506
+ }
507
+ },
508
+ {
509
+ "node_id": "review4",
510
+ "comments": {
511
+ "pageInfo": {
512
+ "hasNextPage": false,
513
+ "endCursor": "endCursor"
514
+ },
515
+ "totalCount": 0,
516
+ "nodes": []
517
+ }
518
+ }
519
+ ]
520
+ }
521
+ }
522
+ ]
523
+ }
524
+ }
525
+ }
526
+ },
527
+ {
528
+ "data": {
529
+ "node": {
530
+ "__typename": "PullRequestReviewComment",
531
+ "node_id": "comment2",
532
+ "id": "comment2",
533
+ "repository": {
534
+ "name": "airbyte",
535
+ "owner": {
536
+ "login": "airbytehq"
537
+ }
538
+ },
539
+ "reactions": {
540
+ "pageInfo": {
541
+ "hasNextPage": false,
542
+ "endCursor": "endCursor"
543
+ },
544
+ "totalCount": 4,
545
+ "nodes": [
546
+ {
547
+ "node_id": "reaction5",
548
+ "user": {},
549
+ "created_at": "2022-01-01T00:00:01Z"
550
+ },
551
+ {
552
+ "node_id": "reaction9",
553
+ "user": {},
554
+ "created_at": "2022-01-02T00:00:01Z"
555
+ }
556
+ ]
557
+ }
558
+ }
559
+ }
560
+ },
561
+ {
562
+ "data": {
563
+ "node": {
564
+ "__typename": "PullRequestReview",
565
+ "node_id": "review2",
566
+ "repository": {
567
+ "name": "airbyte",
568
+ "owner": {
569
+ "login": "airbytehq"
570
+ }
571
+ },
572
+ "comments": {
573
+ "pageInfo": {
574
+ "hasNextPage": false,
575
+ "endCursor": "endCursor"
576
+ },
577
+ "totalCount": 3,
578
+ "nodes": [
579
+ {
580
+ "node_id": "comment5",
581
+ "id": "comment5",
582
+ "reactions": {
583
+ "pageInfo": {
584
+ "hasNextPage": false,
585
+ "endCursor": "endCursor"
586
+ },
587
+ "totalCount": 1,
588
+ "nodes": [
589
+ {
590
+ "node_id": "reaction6",
591
+ "user": {},
592
+ "created_at": "2022-01-01T00:00:01Z"
593
+ }
594
+ ]
595
+ }
596
+ }
597
+ ]
598
+ }
599
+ }
600
+ }
601
+ },
602
+ {
603
+ "data": {
604
+ "node": {
605
+ "__typename": "PullRequest",
606
+ "node_id": "pull_request2",
607
+ "repository": {
608
+ "name": "airbyte",
609
+ "owner": {
610
+ "login": "airbytehq"
611
+ }
612
+ },
613
+ "reviews": {
614
+ "pageInfo": {
615
+ "hasNextPage": false,
616
+ "endCursor": "endCursor"
617
+ },
618
+ "totalCount": 3,
619
+ "nodes": [
620
+ {
621
+ "node_id": "review5",
622
+ "comments": {
623
+ "pageInfo": {
624
+ "hasNextPage": false,
625
+ "endCursor": "endCursor"
626
+ },
627
+ "totalCount": 2,
628
+ "nodes": [
629
+ {
630
+ "node_id": "comment6",
631
+ "id": "comment6",
632
+ "reactions": {
633
+ "pageInfo": {
634
+ "hasNextPage": false,
635
+ "endCursor": "endCursor"
636
+ },
637
+ "totalCount": 0,
638
+ "nodes": []
639
+ }
640
+ },
641
+ {
642
+ "node_id": "comment7",
643
+ "id": "comment7",
644
+ "reactions": {
645
+ "pageInfo": {
646
+ "hasNextPage": false,
647
+ "endCursor": "endCursor"
648
+ },
649
+ "totalCount": 1,
650
+ "nodes": [
651
+ {
652
+ "node_id": "reaction7",
653
+ "user": {},
654
+ "created_at": "2022-01-01T00:00:01Z"
655
+ }
656
+ ]
657
+ }
658
+ }
659
+ ]
660
+ }
661
+ }
662
+ ]
663
+ }
664
+ }
665
+ }
666
+ },
667
+ {
668
+ "data": {
669
+ "repository": {
670
+ "name": "airbyte",
671
+ "owner": {
672
+ "login": "airbytehq"
673
+ },
674
+ "pullRequests": {
675
+ "pageInfo": {
676
+ "hasNextPage": false,
677
+ "endCursor": "endCursor"
678
+ },
679
+ "totalCount": 4,
680
+ "nodes": [
681
+ {
682
+ "node_id": "pull_request3",
683
+ "reviews": {
684
+ "pageInfo": {
685
+ "hasNextPage": false,
686
+ "endCursor": "endCursor"
687
+ },
688
+ "totalCount": 0,
689
+ "nodes": []
690
+ }
691
+ },
692
+ {
693
+ "node_id": "pull_request4",
694
+ "reviews": {
695
+ "pageInfo": {
696
+ "hasNextPage": false,
697
+ "endCursor": "endCursor"
698
+ },
699
+ "totalCount": 1,
700
+ "nodes": [
701
+ {
702
+ "node_id": "review6",
703
+ "comments": {
704
+ "pageInfo": {
705
+ "hasNextPage": false,
706
+ "endCursor": "endCursor"
707
+ },
708
+ "totalCount": 1,
709
+ "nodes": [
710
+ {
711
+ "node_id": "comment8",
712
+ "id": "comment8",
713
+ "reactions": {
714
+ "pageInfo": {
715
+ "hasNextPage": false,
716
+ "endCursor": "endCursor"
717
+ },
718
+ "totalCount": 2,
719
+ "nodes": [
720
+ {
721
+ "node_id": "reaction8",
722
+ "user": {},
723
+ "created_at": "2022-01-01T00:00:01Z"
724
+ },
725
+ {
726
+ "node_id": "reaction10",
727
+ "user": {},
728
+ "created_at": "2022-01-02T00:00:01Z"
729
+ }
730
+ ]
731
+ }
732
+ }
733
+ ]
734
+ }
735
+ }
736
+ ]
737
+ }
738
+ }
739
+ ]
740
+ }
741
+ }
742
+ }
743
+ }
744
+ ]