@dcl/asset-packs 1.2.8 → 1.2.9-20231121170204.commit-bed83dd
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.
- package/bin/index.js +151 -20
- package/catalog.json +310 -0
- package/dist/actions.js +69 -2
- package/dist/bin/index.js +151 -20
- package/dist/definitions.d.ts +14 -1
- package/dist/definitions.js +45 -2
- package/dist/enums.d.ts +5 -1
- package/dist/enums.js +5 -1
- package/package.json +2 -2
package/catalog.json
CHANGED
|
@@ -39043,6 +39043,140 @@
|
|
|
39043
39043
|
"name": "Smart Items",
|
|
39044
39044
|
"thumbnail": "bafkreiblyoo32bfze67uvsf6znsxmlq5vxxfqrwrpbr4cxiw54vpqymgoq",
|
|
39045
39045
|
"assets": [
|
|
39046
|
+
{
|
|
39047
|
+
"id": "1b0ea1b1-9672-4853-8aa1-5405473747d9",
|
|
39048
|
+
"name": "Audio Stream",
|
|
39049
|
+
"category": "utils",
|
|
39050
|
+
"tags": [
|
|
39051
|
+
"audio",
|
|
39052
|
+
"stream"
|
|
39053
|
+
],
|
|
39054
|
+
"components": {
|
|
39055
|
+
"core::GltfContainer": {
|
|
39056
|
+
"src": "{assetPath}/radio.glb",
|
|
39057
|
+
"invisibleMeshesCollisionMask": 0
|
|
39058
|
+
},
|
|
39059
|
+
"core::VisibilityComponent": {
|
|
39060
|
+
"visible": false
|
|
39061
|
+
},
|
|
39062
|
+
"core::MeshCollider": {
|
|
39063
|
+
"collisionMask": 1,
|
|
39064
|
+
"mesh": {
|
|
39065
|
+
"$case": "box",
|
|
39066
|
+
"box": {}
|
|
39067
|
+
}
|
|
39068
|
+
},
|
|
39069
|
+
"core::AudioStream": {
|
|
39070
|
+
"url": "",
|
|
39071
|
+
"playing": true
|
|
39072
|
+
},
|
|
39073
|
+
"asset-packs::Actions": {
|
|
39074
|
+
"id": "{self}",
|
|
39075
|
+
"value": [
|
|
39076
|
+
{
|
|
39077
|
+
"name": "Play",
|
|
39078
|
+
"type": "set_state",
|
|
39079
|
+
"jsonPayload": "{ \"state\": \"Playing\" }"
|
|
39080
|
+
},
|
|
39081
|
+
{
|
|
39082
|
+
"name": "Stop",
|
|
39083
|
+
"type": "set_state",
|
|
39084
|
+
"jsonPayload": "{ \"state\": \"Stopped\" }"
|
|
39085
|
+
},
|
|
39086
|
+
{
|
|
39087
|
+
"name": "Play Audio Stream",
|
|
39088
|
+
"type": "play_audio_stream",
|
|
39089
|
+
"jsonPayload": "{ \"url\": \"\", \"volume\": \"1.0\" }"
|
|
39090
|
+
},
|
|
39091
|
+
{
|
|
39092
|
+
"name": "Stop Audio Stream",
|
|
39093
|
+
"type": "stop_audio_stream",
|
|
39094
|
+
"jsonPayload": "{}"
|
|
39095
|
+
}
|
|
39096
|
+
]
|
|
39097
|
+
},
|
|
39098
|
+
"asset-packs::Triggers": {
|
|
39099
|
+
"value": [
|
|
39100
|
+
{
|
|
39101
|
+
"type": "on_click",
|
|
39102
|
+
"conditions": [
|
|
39103
|
+
{
|
|
39104
|
+
"id": "{self:asset-packs::States}",
|
|
39105
|
+
"type": "when_state_is",
|
|
39106
|
+
"value": "Playing"
|
|
39107
|
+
}
|
|
39108
|
+
],
|
|
39109
|
+
"actions": [
|
|
39110
|
+
{
|
|
39111
|
+
"id": "{self:asset-packs::Actions}",
|
|
39112
|
+
"name": "Stop"
|
|
39113
|
+
}
|
|
39114
|
+
]
|
|
39115
|
+
},
|
|
39116
|
+
{
|
|
39117
|
+
"type": "on_click",
|
|
39118
|
+
"conditions": [
|
|
39119
|
+
{
|
|
39120
|
+
"id": "{self:asset-packs::States}",
|
|
39121
|
+
"type": "when_state_is",
|
|
39122
|
+
"value": "Stopped"
|
|
39123
|
+
}
|
|
39124
|
+
],
|
|
39125
|
+
"actions": [
|
|
39126
|
+
{
|
|
39127
|
+
"id": "{self:asset-packs::Actions}",
|
|
39128
|
+
"name": "Play"
|
|
39129
|
+
}
|
|
39130
|
+
]
|
|
39131
|
+
},
|
|
39132
|
+
{
|
|
39133
|
+
"type": "on_state_change",
|
|
39134
|
+
"conditions": [
|
|
39135
|
+
{
|
|
39136
|
+
"id": "{self:asset-packs::States}",
|
|
39137
|
+
"type": "when_state_is",
|
|
39138
|
+
"value": "Playing"
|
|
39139
|
+
}
|
|
39140
|
+
],
|
|
39141
|
+
"actions": [
|
|
39142
|
+
{
|
|
39143
|
+
"id": "{self:asset-packs::Actions}",
|
|
39144
|
+
"name": "Play Audio Stream"
|
|
39145
|
+
}
|
|
39146
|
+
]
|
|
39147
|
+
},
|
|
39148
|
+
{
|
|
39149
|
+
"type": "on_state_change",
|
|
39150
|
+
"conditions": [
|
|
39151
|
+
{
|
|
39152
|
+
"id": "{self:asset-packs::States}",
|
|
39153
|
+
"type": "when_state_is",
|
|
39154
|
+
"value": "Stopped"
|
|
39155
|
+
}
|
|
39156
|
+
],
|
|
39157
|
+
"actions": [
|
|
39158
|
+
{
|
|
39159
|
+
"id": "{self:asset-packs::Actions}",
|
|
39160
|
+
"name": "Stop Audio Stream"
|
|
39161
|
+
}
|
|
39162
|
+
]
|
|
39163
|
+
}
|
|
39164
|
+
]
|
|
39165
|
+
},
|
|
39166
|
+
"asset-packs::States": {
|
|
39167
|
+
"id": "{self}",
|
|
39168
|
+
"value": [
|
|
39169
|
+
"Playing",
|
|
39170
|
+
"Stopped"
|
|
39171
|
+
],
|
|
39172
|
+
"defaultValue": "Stopped"
|
|
39173
|
+
}
|
|
39174
|
+
},
|
|
39175
|
+
"contents": {
|
|
39176
|
+
"radio.glb": "bafkreibivlqfdaoezxqnb4e2wjt7ijyzlkdslcbusy4mec6gijgun7hgoe",
|
|
39177
|
+
"thumbnail.png": "bafkreif3issfo6ci2wg2lxzursvq4qdvaevusau4oho3xeypee75h75mdu"
|
|
39178
|
+
}
|
|
39179
|
+
},
|
|
39046
39180
|
{
|
|
39047
39181
|
"id": "2e1c4446-c99a-4698-9e13-819d232ca849",
|
|
39048
39182
|
"name": "Black Button",
|
|
@@ -41808,6 +41942,29 @@
|
|
|
41808
41942
|
"thumbnail.png": "bafkreigown6dlphnqfelkuzdyngjik2qmf5rzuskgnah34rytnrpwwwvv4"
|
|
41809
41943
|
}
|
|
41810
41944
|
},
|
|
41945
|
+
{
|
|
41946
|
+
"id": "dbffd66a-8c1f-4b34-bed4-c71ab5cb4024",
|
|
41947
|
+
"name": "NFT",
|
|
41948
|
+
"category": "utils",
|
|
41949
|
+
"tags": [
|
|
41950
|
+
"nft"
|
|
41951
|
+
],
|
|
41952
|
+
"components": {
|
|
41953
|
+
"core::GltfContainer": {
|
|
41954
|
+
"src": "{assetPath}/nft.glb"
|
|
41955
|
+
},
|
|
41956
|
+
"core::NftShape": {
|
|
41957
|
+
"urn": ""
|
|
41958
|
+
},
|
|
41959
|
+
"core::VisibilityComponent": {
|
|
41960
|
+
"visible": false
|
|
41961
|
+
}
|
|
41962
|
+
},
|
|
41963
|
+
"contents": {
|
|
41964
|
+
"nft.glb": "bafkreiapycsxofqqqdec5mffx5u5tgkh2np2sosapibhxc2ivbc4usla3u",
|
|
41965
|
+
"thumbnail.png": "bafkreiecz33hpwlfr4zttrvdetklfmhgzpm6xnxn4wg4aubbhtzy4kh4we"
|
|
41966
|
+
}
|
|
41967
|
+
},
|
|
41811
41968
|
{
|
|
41812
41969
|
"id": "ce058a68-1635-472c-b4b5-4bc9f4b4277f",
|
|
41813
41970
|
"name": "Old Wooden Door",
|
|
@@ -46242,6 +46399,159 @@
|
|
|
46242
46399
|
"vertical_yellow_pad.glb": "bafkreib4jm6adbye2ymd3tlwlzsl7o5rsm37jxfelifzve3ztnvg6ufzhe"
|
|
46243
46400
|
}
|
|
46244
46401
|
},
|
|
46402
|
+
{
|
|
46403
|
+
"id": "dc5ec17b-aa1a-4bd0-bace-7d615d9bdc70",
|
|
46404
|
+
"name": "Video Player",
|
|
46405
|
+
"category": "utils",
|
|
46406
|
+
"tags": [
|
|
46407
|
+
"video"
|
|
46408
|
+
],
|
|
46409
|
+
"components": {
|
|
46410
|
+
"core::VideoPlayer": {
|
|
46411
|
+
"src": "",
|
|
46412
|
+
"playing": true
|
|
46413
|
+
},
|
|
46414
|
+
"core::MeshRenderer": {
|
|
46415
|
+
"mesh": {
|
|
46416
|
+
"$case": "plane",
|
|
46417
|
+
"plane": {
|
|
46418
|
+
"uvs": []
|
|
46419
|
+
}
|
|
46420
|
+
}
|
|
46421
|
+
},
|
|
46422
|
+
"core::MeshCollider": {
|
|
46423
|
+
"collisionMask": 1,
|
|
46424
|
+
"mesh": {
|
|
46425
|
+
"$case": "plane",
|
|
46426
|
+
"plane": {
|
|
46427
|
+
"uvs": []
|
|
46428
|
+
}
|
|
46429
|
+
}
|
|
46430
|
+
},
|
|
46431
|
+
"core::Material": {
|
|
46432
|
+
"material": {
|
|
46433
|
+
"$case": "pbr",
|
|
46434
|
+
"pbr": {
|
|
46435
|
+
"texture": {
|
|
46436
|
+
"tex": {
|
|
46437
|
+
"$case": "videoTexture",
|
|
46438
|
+
"videoTexture": {
|
|
46439
|
+
"videoPlayerEntity": 0
|
|
46440
|
+
}
|
|
46441
|
+
}
|
|
46442
|
+
},
|
|
46443
|
+
"roughness": 1,
|
|
46444
|
+
"specularIntensity": 0,
|
|
46445
|
+
"metallic": 0
|
|
46446
|
+
}
|
|
46447
|
+
}
|
|
46448
|
+
},
|
|
46449
|
+
"asset-packs::Actions": {
|
|
46450
|
+
"id": "{self}",
|
|
46451
|
+
"value": [
|
|
46452
|
+
{
|
|
46453
|
+
"name": "Play",
|
|
46454
|
+
"type": "set_state",
|
|
46455
|
+
"jsonPayload": "{ \"state\": \"Playing\" }"
|
|
46456
|
+
},
|
|
46457
|
+
{
|
|
46458
|
+
"name": "Stop",
|
|
46459
|
+
"type": "set_state",
|
|
46460
|
+
"jsonPayload": "{ \"state\": \"Stopped\" }"
|
|
46461
|
+
},
|
|
46462
|
+
{
|
|
46463
|
+
"name": "Play Video Stream",
|
|
46464
|
+
"type": "play_video_stream",
|
|
46465
|
+
"jsonPayload": "{ \"src\": \"\", \"loop\": \"false\", \"volume\": \"1.0\", \"dclCast\": false }"
|
|
46466
|
+
},
|
|
46467
|
+
{
|
|
46468
|
+
"name": "Stop Video Stream",
|
|
46469
|
+
"type": "stop_video_stream",
|
|
46470
|
+
"jsonPayload": "{}"
|
|
46471
|
+
}
|
|
46472
|
+
]
|
|
46473
|
+
},
|
|
46474
|
+
"asset-packs::Triggers": {
|
|
46475
|
+
"value": [
|
|
46476
|
+
{
|
|
46477
|
+
"type": "on_click",
|
|
46478
|
+
"conditions": [
|
|
46479
|
+
{
|
|
46480
|
+
"id": "{self:asset-packs::States}",
|
|
46481
|
+
"type": "when_state_is",
|
|
46482
|
+
"value": "Playing"
|
|
46483
|
+
}
|
|
46484
|
+
],
|
|
46485
|
+
"actions": [
|
|
46486
|
+
{
|
|
46487
|
+
"id": "{self:asset-packs::Actions}",
|
|
46488
|
+
"name": "Stop"
|
|
46489
|
+
}
|
|
46490
|
+
]
|
|
46491
|
+
},
|
|
46492
|
+
{
|
|
46493
|
+
"type": "on_click",
|
|
46494
|
+
"conditions": [
|
|
46495
|
+
{
|
|
46496
|
+
"id": "{self:asset-packs::States}",
|
|
46497
|
+
"type": "when_state_is",
|
|
46498
|
+
"value": "Stopped"
|
|
46499
|
+
}
|
|
46500
|
+
],
|
|
46501
|
+
"actions": [
|
|
46502
|
+
{
|
|
46503
|
+
"id": "{self:asset-packs::Actions}",
|
|
46504
|
+
"name": "Play"
|
|
46505
|
+
}
|
|
46506
|
+
]
|
|
46507
|
+
},
|
|
46508
|
+
{
|
|
46509
|
+
"type": "on_state_change",
|
|
46510
|
+
"conditions": [
|
|
46511
|
+
{
|
|
46512
|
+
"id": "{self:asset-packs::States}",
|
|
46513
|
+
"type": "when_state_is",
|
|
46514
|
+
"value": "Playing"
|
|
46515
|
+
}
|
|
46516
|
+
],
|
|
46517
|
+
"actions": [
|
|
46518
|
+
{
|
|
46519
|
+
"id": "{self:asset-packs::Actions}",
|
|
46520
|
+
"name": "Play Video Stream"
|
|
46521
|
+
}
|
|
46522
|
+
]
|
|
46523
|
+
},
|
|
46524
|
+
{
|
|
46525
|
+
"type": "on_state_change",
|
|
46526
|
+
"conditions": [
|
|
46527
|
+
{
|
|
46528
|
+
"id": "{self:asset-packs::States}",
|
|
46529
|
+
"type": "when_state_is",
|
|
46530
|
+
"value": "Stopped"
|
|
46531
|
+
}
|
|
46532
|
+
],
|
|
46533
|
+
"actions": [
|
|
46534
|
+
{
|
|
46535
|
+
"id": "{self:asset-packs::Actions}",
|
|
46536
|
+
"name": "Stop Video Stream"
|
|
46537
|
+
}
|
|
46538
|
+
]
|
|
46539
|
+
}
|
|
46540
|
+
]
|
|
46541
|
+
},
|
|
46542
|
+
"asset-packs::States": {
|
|
46543
|
+
"id": "{self}",
|
|
46544
|
+
"value": [
|
|
46545
|
+
"Playing",
|
|
46546
|
+
"Stopped"
|
|
46547
|
+
],
|
|
46548
|
+
"defaultValue": "Stopped"
|
|
46549
|
+
}
|
|
46550
|
+
},
|
|
46551
|
+
"contents": {
|
|
46552
|
+
"thumbnail.png": "bafkreia2y4mxdubakbafwsm5mdpa3ehtuvemumjdeqkfjmj6sskjay2or4"
|
|
46553
|
+
}
|
|
46554
|
+
},
|
|
46245
46555
|
{
|
|
46246
46556
|
"id": "ed36149f-76c5-45c4-a678-d4b31c4ed9ca",
|
|
46247
46557
|
"name": "Wooden Door",
|
package/dist/actions.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
import { VideoPlayer, Material, AudioStream, } from '@dcl/sdk/ecs';
|
|
1
2
|
import { Quaternion, Vector3 } from '@dcl/sdk/math';
|
|
2
3
|
import { tweens } from '@dcl-sdk/utils/dist/tween';
|
|
3
|
-
import {
|
|
4
|
+
import { getActiveVideoStreams } from '~system/CommsApi';
|
|
5
|
+
import { ActionType, TriggerType, TweenType, getComponents, initVideoPlayerComponentMaterial, } from './definitions';
|
|
4
6
|
import { getDefaultValue, isValidState } from './states';
|
|
5
7
|
import { getActionEvents, getTriggerEvents } from './events';
|
|
6
8
|
import { getPayload } from './action-types';
|
|
@@ -77,6 +79,22 @@ export function createActionsSystem(engine, components) {
|
|
|
77
79
|
handleDetachFromPlayer(entity, getPayload(action));
|
|
78
80
|
break;
|
|
79
81
|
}
|
|
82
|
+
case ActionType.PLAY_VIDEO_STREAM: {
|
|
83
|
+
handlePlayVideo(entity, getPayload(action));
|
|
84
|
+
break;
|
|
85
|
+
}
|
|
86
|
+
case ActionType.STOP_VIDEO_STREAM: {
|
|
87
|
+
handleStopVideo(entity, getPayload(action));
|
|
88
|
+
break;
|
|
89
|
+
}
|
|
90
|
+
case ActionType.PLAY_AUDIO_STREAM: {
|
|
91
|
+
handlePlayAudioStream(entity, getPayload(action));
|
|
92
|
+
break;
|
|
93
|
+
}
|
|
94
|
+
case ActionType.STOP_AUDIO_STREAM: {
|
|
95
|
+
handleStopAudioStream(entity, getPayload(action));
|
|
96
|
+
break;
|
|
97
|
+
}
|
|
80
98
|
default:
|
|
81
99
|
break;
|
|
82
100
|
}
|
|
@@ -227,4 +245,53 @@ export function createActionsSystem(engine, components) {
|
|
|
227
245
|
}
|
|
228
246
|
}
|
|
229
247
|
}
|
|
230
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9hY3Rpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVdBLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQ25ELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQTtBQUNsRCxPQUFPLEVBRUwsVUFBVSxFQUNWLFdBQVcsRUFDWCxTQUFTLEVBQ1QsYUFBYSxHQUNkLE1BQU0sZUFBZSxDQUFBO0FBQ3RCLE9BQU8sRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLE1BQU0sVUFBVSxDQUFBO0FBQ3hELE9BQU8sRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFDNUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBRTNDLE1BQU0sY0FBYyxHQUFHLElBQUksR0FBRyxFQUFVLENBQUE7QUFFeEMsTUFBTSxVQUFVLG1CQUFtQixDQUNqQyxNQUFlLEVBQ2YsVUFPQztJQUVELE1BQU0sRUFDSixRQUFRLEVBQ1IsU0FBUyxFQUNULFdBQVcsRUFDWCxZQUFZLEVBQ1osbUJBQW1CLEVBQ25CLGFBQWEsR0FDZCxHQUFHLFVBQVUsQ0FBQTtJQUNkLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUUxRCxPQUFPLFNBQVMsYUFBYSxDQUFDLEdBQVc7UUFDdkMsTUFBTSxtQkFBbUIsR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBRTNELEtBQUssTUFBTSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsSUFBSSxtQkFBbUIsRUFBRTtZQUNuRCxJQUFJLGNBQWMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQzlCLFNBQVE7YUFDVDtZQUdELE1BQU0sS0FBSyxHQUFHLE9B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RSxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUE7SUFDekQsQ0FBQztJQUdELFNBQVMsc0JBQXNCLENBQzdCLE1BQWMsRUFDZCxRQUFzRDtRQUV0RCxJQUFJLFlBQVksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDNUIsWUFBWSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQTtTQUNoQztJQUNILENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgSUVuZ2luZSxcbiAgRW50aXR5LFxuICBBbmltYXRvckNvbXBvbmVudERlZmluaXRpb25FeHRlbmRlZCxcbiAgVHJhbnNmb3JtQ29tcG9uZW50RXh0ZW5kZWQsXG4gIExhc3RXcml0ZVdpbkVsZW1lbnRTZXRDb21wb25lbnREZWZpbml0aW9uLFxuICBQQkF1ZGlvU291cmNlLFxuICBQQkF2YXRhckF0dGFjaCxcbiAgUEJWaXNpYmlsaXR5Q29tcG9uZW50LFxuICBQQkdsdGZDb250YWluZXIsXG59IGZyb20gJ0BkY2wvc2RrL2VjcydcbmltcG9ydCB7IFF1YXRlcm5pb24sIFZlY3RvcjMgfSBmcm9tICdAZGNsL3Nkay9tYXRoJ1xuaW1wb3J0IHsgdHdlZW5zIH0gZnJvbSAnQGRjbC1zZGsvdXRpbHMvZGlzdC90d2VlbidcbmltcG9ydCB7XG4gIEFjdGlvblBheWxvYWQsXG4gIEFjdGlvblR5cGUsXG4gIFRyaWdnZXJUeXBlLFxuICBUd2VlblR5cGUsXG4gIGdldENvbXBvbmVudHMsXG59IGZyb20gJy4vZGVmaW5pdGlvbnMnXG5pbXBvcnQgeyBnZXREZWZhdWx0VmFsdWUsIGlzVmFsaWRTdGF0ZSB9IGZyb20gJy4vc3RhdGVzJ1xuaW1wb3J0IHsgZ2V0QWN0aW9uRXZlbnRzLCBnZXRUcmlnZ2VyRXZlbnRzIH0gZnJvbSAnLi9ldmVudHMnXG5pbXBvcnQgeyBnZXRQYXlsb2FkIH0gZnJvbSAnLi9hY3Rpb24tdHlwZXMnXG5cbmNvbnN0IGluaXRlZEVudGl0aWVzID0gbmV3IFNldDxFbnRpdHk+KClcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFjdGlvbnNTeXN0ZW0oXG4gIGVuZ2luZTogSUVuZ2luZSxcbiAgY29tcG9uZW50czoge1xuICAgIEFuaW1hdG9yOiBBbmltYXRvckNvbXBvbmVudERlZmluaXRpb25FeHRlbmRlZFxuICAgIFRyYW5zZm9ybTogVHJhbnNmb3JtQ29tcG9uZW50RXh0ZW5kZWRcbiAgICBBdWRpb1NvdXJjZTogTGFzdFdyaXRlV2luRWxlbWVudFNldENvbXBvbmVudERlZmluaXRpb248UEJBdWRpb1NvdXJjZT5cbiAgICBBdmF0YXJBdHRhY2g6IExhc3RXcml0ZVdpbkVsZW1lbnRTZXRDb21wb25lbnREZWZpbml0aW9uPFBCQXZhdGFyQXR0YWNoPlxuICAgIFZpc2liaWxpdHlDb21wb25lbnQ6IExhc3RXcml0ZVdpbkVsZW1lbnRTZXRDb21wb25lbnREZWZpbml0aW9uPFBCVmlzaWJpbGl0eUNvbXBvbmVudD5cbiAgICBHbHRmQ29udGFpbmVyOiBMYXN0V3JpdGVXaW5FbGVtZW50U2V0Q29tcG9uZW50RGVmaW5pdGlvbjxQQkdsdGZDb250YWluZXI+XG4gIH0sXG4pIHtcbiAgY29uc3Qge1xuICAgIEFuaW1hdG9yLFxuICAgIFRyYW5zZm9ybSxcbiAgICBBdWRpb1NvdXJjZSxcbiAgICBBdmF0YXJBdHRhY2gsXG4gICAgVmlzaWJpbGl0eUNvbXBvbmVudCxcbiAgICBHbHRmQ29udGFpbmVyLFxuICB9ID0gY29tcG9uZW50c1xuICBjb25zdCB7IEFjdGlvbnMsIFN0YXRlcywgQ291bnRlciB9ID0gZ2V0Q29tcG9uZW50cyhlbmdpbmUpXG5cbiAgcmV0dXJuIGZ1bmN0aW9uIGFjdGlvbnNTeXN0ZW0oX2R0OiBudW1iZXIpIHtcbiAgICBjb25zdCBlbnRpdGllc1dpdGhBY3Rpb25zID0gZW5naW5lLmdldEVudGl0aWVzV2l0aChBY3Rpb25zKVxuXG4gICAgZm9yIChjb25zdCBbZW50aXR5LCBhY3Rpb25zXSBvZiBlbnRpdGllc1dpdGhBY3Rpb25zKSB7XG4gICAgICBpZiAoaW5pdGVkRW50aXRpZXMuaGFzKGVudGl0eSkpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgLy8gaW5pdGlhbGl6ZSBhY3Rpb25zIGZvciBnaXZlbiBlbnRpdHlcbiAgICAgIGNvbnN0IHR5cGVzID0gYWN0aW9ucy52YWx1ZS5yZWR1Y2UoXG4gICAgICAgICh0eXBlcywgYWN0aW9uKSA9PiB0eXBlcy5hZGQoYWN0aW9uLnR5cGUpLFxuICAgICAgICBuZXcgU2V0PFN0cmluZz4oKSxcbiAgICAgIClcblxuICAgICAgZm9yIChjb25zdCB0eXBlIG9mIHR5cGVzKSB7XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5QTEFZX0FOSU1BVElPTjoge1xuICAgICAgICAgICAgaW5pdFBsYXlBbmltYXRpb24oZW50aXR5KVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gYmluZCBhY3Rpb25zXG4gICAgICBjb25zdCBhY3Rpb25FdmVudHMgPSBnZXRBY3Rpb25FdmVudHMoZW50aXR5KVxuICAgICAgZm9yIChjb25zdCBhY3Rpb24gb2YgYWN0aW9ucy52YWx1ZSkge1xuICAgICAgICBhY3Rpb25FdmVudHMub24oYWN0aW9uLm5hbWUsICgpID0+IHtcbiAgICAgICAgICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuUExBWV9BTklNQVRJT046IHtcbiAgICAgICAgICAgICAgaGFuZGxlUGxheUFuaW1hdGlvbihcbiAgICAgICAgICAgICAgICBlbnRpdHksXG4gICAgICAgICAgICAgICAgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlBMQVlfQU5JTUFUSU9OPihhY3Rpb24pLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuU1RPUF9BTklNQVRJT046IHtcbiAgICAgICAgICAgICAgaGFuZGxlU3RvcEFuaW1hdGlvbihcbiAgICAgICAgICAgICAgICBlbnRpdHksXG4gICAgICAgICAgICAgICAgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlNUT1BfQU5JTUFUSU9OPihhY3Rpb24pLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuU0VUX1NUQVRFOiB7XG4gICAgICAgICAgICAgIGhhbmRsZVNldFN0YXRlKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlNFVF9TVEFURT4oYWN0aW9uKSlcbiAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5TVEFSVF9UV0VFTjoge1xuICAgICAgICAgICAgICBoYW5kbGVTdGFydFR3ZWVuKFxuICAgICAgICAgICAgICAgIGVudGl0eSxcbiAgICAgICAgICAgICAgICBnZXRQYXlsb2FkPEFjdGlvblR5cGUuU1RBUlRfVFdFRU4+KGFjdGlvbiksXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5TRVRfQ09VTlRFUjoge1xuICAgICAgICAgICAgICBoYW5kbGVTZXRDb3VudGVyKFxuICAgICAgICAgICAgICAgIGVudGl0eSxcbiAgICAgICAgICAgICAgICBnZXRQYXlsb2FkPEFjdGlvblR5cGUuU0VUX0NPVU5URVI+KGFjdGlvbiksXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5JTkNSRU1FTlRfQ09VTlRFUjoge1xuICAgICAgICAgICAgICBoYW5kbGVJbmNyZW1lbnRDb3VudGVyKFxuICAgICAgICAgICAgICAgIGVudGl0eSxcbiAgICAgICAgICAgICAgICBnZXRQYXlsb2FkPEFjdGlvblR5cGUuSU5DUkVNRU5UX0NPVU5URVI+KGFjdGlvbiksXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5ERUNSRUFTRV9DT1VOVEVSOiB7XG4gICAgICAgICAgICAgIGhhbmRsZURlY3JlYXNlQ291bnRlcihcbiAgICAgICAgICAgICAgICBlbnRpdHksXG4gICAgICAgICAgICAgICAgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLkRFQ1JFQVNFX0NPVU5URVI+KGFjdGlvbiksXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5QTEFZX1NPVU5EOiB7XG4gICAgICAgICAgICAgIGhhbmRsZVBsYXlTb3VuZChlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5QTEFZX1NPVU5EPihhY3Rpb24pKVxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlNUT1BfU09VTkQ6IHtcbiAgICAgICAgICAgICAgaGFuZGxlU3RvcFNvdW5kKGVudGl0eSwgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlNUT1BfU09VTkQ+KGFjdGlvbikpXG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuU0VUX1ZJU0lCSUxJVFk6IHtcbiAgICAgICAgICAgICAgaGFuZGxlU2V0VmlzaWJpbGl0eShcbiAgICAgICAgICAgICAgICBlbnRpdHksXG4gICAgICAgICAgICAgICAgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlNFVF9WSVNJQklMSVRZPihhY3Rpb24pLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuQVRUQUNIX1RPX1BMQVlFUjoge1xuICAgICAgICAgICAgICBoYW5kbGVBdHRhY2hUb1BsYXllcihcbiAgICAgICAgICAgICAgICBlbnRpdHksXG4gICAgICAgICAgICAgICAgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLkFUVEFDSF9UT19QTEFZRVI+KGFjdGlvbiksXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5ERVRBQ0hfRlJPTV9QTEFZRVI6IHtcbiAgICAgICAgICAgICAgaGFuZGxlRGV0YWNoRnJvbVBsYXllcihcbiAgICAgICAgICAgICAgICBlbnRpdHksXG4gICAgICAgICAgICAgICAgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLkRFVEFDSF9GUk9NX1BMQVlFUj4oYWN0aW9uKSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGluaXRlZEVudGl0aWVzLmFkZChlbnRpdHkpXG4gICAgfVxuICB9XG5cbiAgLy8gUExBWV9BTklNQVRJT05cbiAgZnVuY3Rpb24gaW5pdFBsYXlBbmltYXRpb24oZW50aXR5OiBFbnRpdHkpIHtcbiAgICBBbmltYXRvci5jcmVhdGUoZW50aXR5LCB7XG4gICAgICBzdGF0ZXM6IFtdLFxuICAgIH0pXG4gICAgQW5pbWF0b3Iuc3RvcEFsbEFuaW1hdGlvbnMoZW50aXR5KVxuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlUGxheUFuaW1hdGlvbihcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuUExBWV9BTklNQVRJT04+LFxuICApIHtcbiAgICBjb25zdCB7IGFuaW1hdGlvbiwgbG9vcCB9ID0gcGF5bG9hZFxuXG4gICAgY29uc3QgYW5pbWF0b3IgPSBBbmltYXRvci5nZXRNdXRhYmxlKGVudGl0eSlcbiAgICBpZiAoIWFuaW1hdG9yLnN0YXRlcy5zb21lKCgkKSA9PiAkLmNsaXAgPT09IGFuaW1hdGlvbikpIHtcbiAgICAgIGFuaW1hdG9yLnN0YXRlcyA9IFtcbiAgICAgICAgLi4uYW5pbWF0b3Iuc3RhdGVzLFxuICAgICAgICB7XG4gICAgICAgICAgY2xpcDogYW5pbWF0aW9uLFxuICAgICAgICB9LFxuICAgICAgXVxuICAgIH1cblxuICAgIEFuaW1hdG9yLnN0b3BBbGxBbmltYXRpb25zKGVudGl0eSlcbiAgICBjb25zdCBjbGlwID0gQW5pbWF0b3IuZ2V0Q2xpcChlbnRpdHksIGFuaW1hdGlvbilcbiAgICBjbGlwLnBsYXlpbmcgPSB0cnVlXG4gICAgY2xpcC5sb29wID0gbG9vcCA/PyBmYWxzZVxuICB9XG5cbiAgLy8gU1RPUF9BTklNQVRJT05cbiAgZnVuY3Rpb24gaGFuZGxlU3RvcEFuaW1hdGlvbihcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBfcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlNUT1BfQU5JTUFUSU9OPixcbiAgKSB7XG4gICAgaWYgKEFuaW1hdG9yLmhhcyhlbnRpdHkpKSB7XG4gICAgICBBbmltYXRvci5zdG9wQWxsQW5pbWF0aW9ucyhlbnRpdHkpXG4gICAgfVxuICB9XG5cbiAgLy8gU0VUX1NUQVRFXG4gIGZ1bmN0aW9uIGhhbmRsZVNldFN0YXRlKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5TRVRfU1RBVEU+LFxuICApIHtcbiAgICBjb25zdCBzdGF0ZXMgPSBTdGF0ZXMuZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHkpXG5cbiAgICBpZiAoc3RhdGVzKSB7XG4gICAgICBsZXQgbmV4dFN0YXRlOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBwYXlsb2FkLnN0YXRlXG4gICAgICBuZXh0U3RhdGUgPSBpc1ZhbGlkU3RhdGUoc3RhdGVzLCBuZXh0U3RhdGUpXG4gICAgICAgID8gbmV4dFN0YXRlXG4gICAgICAgIDogZ2V0RGVmYXVsdFZhbHVlKHN0YXRlcylcbiAgICAgIHN0YXRlcy5jdXJyZW50VmFsdWUgPSBuZXh0U3RhdGVcblxuICAgICAgY29uc3QgdHJpZ2dlckV2ZW50cyA9IGdldFRyaWdnZXJFdmVudHMoZW50aXR5KVxuICAgICAgdHJpZ2dlckV2ZW50cy5lbWl0KFRyaWdnZXJUeXBlLk9OX1NUQVRFX0NIQU5HRSlcbiAgICB9XG4gIH1cblxuICAvLyBTVEFSVF9UV0VFTlxuICBmdW5jdGlvbiBoYW5kbGVTdGFydFR3ZWVuKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5TVEFSVF9UV0VFTj4sXG4gICkge1xuICAgIGlmIChwYXlsb2FkKSB7XG4gICAgICBjb25zdCB0cmlnZ2VyRXZlbnRzID0gZ2V0VHJpZ2dlckV2ZW50cyhlbnRpdHkpXG4gICAgICBjb25zdCBvblR3ZWVuRW5kID0gKCkgPT4gdHJpZ2dlckV2ZW50cy5lbWl0KFRyaWdnZXJUeXBlLk9OX1RXRUVOX0VORClcblxuICAgICAgc3dpdGNoIChwYXlsb2FkLnR5cGUpIHtcbiAgICAgICAgY2FzZSBUd2VlblR5cGUuTU9WRV9JVEVNOiB7XG4gICAgICAgICAgaGFuZGxlTW92ZUl0ZW0oZW50aXR5LCBwYXlsb2FkLCBvblR3ZWVuRW5kKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBUd2VlblR5cGUuUk9UQVRFX0lURU06IHtcbiAgICAgICAgICBoYW5kbGVSb3RhdGVJdGVtKGVudGl0eSwgcGF5bG9hZCwgb25Ud2VlbkVuZClcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgVHdlZW5UeXBlLlNDQUxFX0lURU06IHtcbiAgICAgICAgICBoYW5kbGVTY2FsZUl0ZW0oZW50aXR5LCBwYXlsb2FkLCBvblR3ZWVuRW5kKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biB0d2VlbiB0eXBlOiAke3BheWxvYWQudHlwZX1gKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gTU9WRV9JVEVNXG4gIGZ1bmN0aW9uIGhhbmRsZU1vdmVJdGVtKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIHR3ZWVuOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU1RBUlRfVFdFRU4+LFxuICAgIG9uVHdlZW5FbmQ6ICgpID0+IHZvaWQsXG4gICkge1xuICAgIGNvbnN0IHRyYW5zZm9ybSA9IFRyYW5zZm9ybS5nZXQoZW50aXR5KVxuICAgIGNvbnN0IHsgZHVyYXRpb24sIGludGVycG9sYXRpb25UeXBlLCByZWxhdGl2ZSB9ID0gdHdlZW5cbiAgICBjb25zdCBlbmQgPSBWZWN0b3IzLmNyZWF0ZSh0d2Vlbi5lbmQueCwgdHdlZW4uZW5kLnksIHR3ZWVuLmVuZC56KVxuICAgIGNvbnN0IGVuZFBvc2l0aW9uID0gcmVsYXRpdmUgPyBWZWN0b3IzLmFkZCh0cmFuc2Zvcm0ucG9zaXRpb24sIGVuZCkgOiBlbmRcblxuICAgIHR3ZWVucy5zdGFydFRyYW5zbGF0aW9uKFxuICAgICAgZW50aXR5LFxuICAgICAgdHJhbnNmb3JtLnBvc2l0aW9uLFxuICAgICAgZW5kUG9zaXRpb24sXG4gICAgICBkdXJhdGlvbixcbiAgICAgIGludGVycG9sYXRpb25UeXBlLFxuICAgICAgb25Ud2VlbkVuZCxcbiAgICApXG4gIH1cblxuICAvLyBST1RBVEVfSVRFTVxuICBmdW5jdGlvbiBoYW5kbGVSb3RhdGVJdGVtKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIHR3ZWVuOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU1RBUlRfVFdFRU4+LFxuICAgIG9uVHdlZW5FbmQ6ICgpID0+IHZvaWQsXG4gICkge1xuICAgIGNvbnN0IHRyYW5zZm9ybSA9IFRyYW5zZm9ybS5nZXQoZW50aXR5KVxuICAgIGNvbnN0IHsgZHVyYXRpb24sIGludGVycG9sYXRpb25UeXBlLCByZWxhdGl2ZSB9ID0gdHdlZW5cbiAgICBjb25zdCBlbmQgPSBRdWF0ZXJuaW9uLmZyb21FdWxlckRlZ3JlZXMoXG4gICAgICB0d2Vlbi5lbmQueCxcbiAgICAgIHR3ZWVuLmVuZC55LFxuICAgICAgdHdlZW4uZW5kLnosXG4gICAgKVxuICAgIGNvbnN0IGVuZFJvdGF0aW9uID0gcmVsYXRpdmVcbiAgICAgID8gUXVhdGVybmlvbi5tdWx0aXBseSh0cmFuc2Zvcm0ucm90YXRpb24sIGVuZClcbiAgICAgIDogZW5kXG5cbiAgICB0d2VlbnMuc3RhcnRSb3RhdGlvbihcbiAgICAgIGVudGl0eSxcbiAgICAgIHRyYW5zZm9ybS5yb3RhdGlvbixcbiAgICAgIGVuZFJvdGF0aW9uLFxuICAgICAgZHVyYXRpb24sXG4gICAgICBpbnRlcnBvbGF0aW9uVHlwZSxcbiAgICAgIG9uVHdlZW5FbmQsXG4gICAgKVxuICB9XG5cbiAgLy8gU0NBTEVfSVRFTVxuICBmdW5jdGlvbiBoYW5kbGVTY2FsZUl0ZW0oXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgdHdlZW46IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5TVEFSVF9UV0VFTj4sXG4gICAgb25Ud2VlbkVuZDogKCkgPT4gdm9pZCxcbiAgKSB7XG4gICAgY29uc3QgdHJhbnNmb3JtID0gVHJhbnNmb3JtLmdldChlbnRpdHkpXG4gICAgY29uc3QgeyBkdXJhdGlvbiwgaW50ZXJwb2xhdGlvblR5cGUsIHJlbGF0aXZlIH0gPSB0d2VlblxuICAgIGNvbnN0IGVuZCA9IFZlY3RvcjMuY3JlYXRlKHR3ZWVuLmVuZC54LCB0d2Vlbi5lbmQueSwgdHdlZW4uZW5kLnopXG4gICAgY29uc3QgZW5kU2NhbGUgPSByZWxhdGl2ZSA/IFZlY3RvcjMuYWRkKHRyYW5zZm9ybS5zY2FsZSwgZW5kKSA6IGVuZFxuXG4gICAgdHdlZW5zLnN0YXJ0U2NhbGluZyhcbiAgICAgIGVudGl0eSxcbiAgICAgIHRyYW5zZm9ybS5zY2FsZSxcbiAgICAgIGVuZFNjYWxlLFxuICAgICAgZHVyYXRpb24sXG4gICAgICBpbnRlcnBvbGF0aW9uVHlwZSxcbiAgICAgIG9uVHdlZW5FbmQsXG4gICAgKVxuICB9XG5cbiAgLy8gU0VUX0NPVU5URVJcbiAgZnVuY3Rpb24gaGFuZGxlU2V0Q291bnRlcihcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU0VUX0NPVU5URVI+LFxuICApIHtcbiAgICBjb25zdCBjb3VudGVyID0gQ291bnRlci5nZXRNdXRhYmxlT3JOdWxsKGVudGl0eSlcblxuICAgIGlmIChjb3VudGVyKSB7XG4gICAgICBjb3VudGVyLnZhbHVlID0gcGF5bG9hZC5jb3VudGVyXG5cbiAgICAgIGNvbnN0IHRyaWdnZXJFdmVudHMgPSBnZXRUcmlnZ2VyRXZlbnRzKGVudGl0eSlcbiAgICAgIHRyaWdnZXJFdmVudHMuZW1pdChUcmlnZ2VyVHlwZS5PTl9DT1VOVEVSX0NIQU5HRSlcbiAgICB9XG4gIH1cblxuICAvLyBJTkNSRU1FTlRfQ09VTlRFUlxuICBmdW5jdGlvbiBoYW5kbGVJbmNyZW1lbnRDb3VudGVyKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIF9wYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuSU5DUkVNRU5UX0NPVU5URVI+LFxuICApIHtcbiAgICBjb25zdCBjb3VudGVyID0gQ291bnRlci5nZXRNdXRhYmxlT3JOdWxsKGVudGl0eSlcblxuICAgIGlmIChjb3VudGVyKSB7XG4gICAgICBjb3VudGVyLnZhbHVlICs9IDFcblxuICAgICAgY29uc3QgdHJpZ2dlckV2ZW50cyA9IGdldFRyaWdnZXJFdmVudHMoZW50aXR5KVxuICAgICAgdHJpZ2dlckV2ZW50cy5lbWl0KFRyaWdnZXJUeXBlLk9OX0NPVU5URVJfQ0hBTkdFKVxuICAgIH1cbiAgfVxuXG4gIC8vIERFQ1JFQVNFX0NPVU5URVJcbiAgZnVuY3Rpb24gaGFuZGxlRGVjcmVhc2VDb3VudGVyKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIF9wYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuSU5DUkVNRU5UX0NPVU5URVI+LFxuICApIHtcbiAgICBjb25zdCBjb3VudGVyID0gQ291bnRlci5nZXRNdXRhYmxlT3JOdWxsKGVudGl0eSlcblxuICAgIGlmIChjb3VudGVyKSB7XG4gICAgICBjb3VudGVyLnZhbHVlIC09IDFcblxuICAgICAgY29uc3QgdHJpZ2dlckV2ZW50cyA9IGdldFRyaWdnZXJFdmVudHMoZW50aXR5KVxuICAgICAgdHJpZ2dlckV2ZW50cy5lbWl0KFRyaWdnZXJUeXBlLk9OX0NPVU5URVJfQ0hBTkdFKVxuICAgIH1cbiAgfVxuXG4gIC8vIFBMQVlfU09VTkRcbiAgZnVuY3Rpb24gaGFuZGxlUGxheVNvdW5kKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5QTEFZX1NPVU5EPixcbiAgKSB7XG4gICAgY29uc3QgeyBzcmMsIGxvb3AsIHZvbHVtZSB9ID0gcGF5bG9hZFxuICAgIEF1ZGlvU291cmNlLmNyZWF0ZU9yUmVwbGFjZShlbnRpdHksIHtcbiAgICAgIGF1ZGlvQ2xpcFVybDogc3JjLFxuICAgICAgbG9vcCxcbiAgICAgIHBsYXlpbmc6IHRydWUsXG4gICAgICB2b2x1bWU6IHZvbHVtZSA/PyAxLFxuICAgIH0pXG4gIH1cblxuICAvLyBTVE9QX1NPVU5EXG4gIGZ1bmN0aW9uIGhhbmRsZVN0b3BTb3VuZChcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBfcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlNUT1BfU09VTkQ+LFxuICApIHtcbiAgICBjb25zdCBhdWRpb1NvdXJjZSA9IEF1ZGlvU291cmNlLmdldE11dGFibGVPck51bGwoZW50aXR5KVxuICAgIGlmIChhdWRpb1NvdXJjZSkge1xuICAgICAgYXVkaW9Tb3VyY2UucGxheWluZyA9IGZhbHNlXG4gICAgfVxuICB9XG5cbiAgLy8gU0VUX1ZJU0lCSUxJVFlcbiAgZnVuY3Rpb24gaGFuZGxlU2V0VmlzaWJpbGl0eShcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU0VUX1ZJU0lCSUxJVFk+LFxuICApIHtcbiAgICBjb25zdCB7IHZpc2libGUsIHBoeXNpY3NDb2xsaWRlciB9ID0gcGF5bG9hZFxuICAgIFZpc2liaWxpdHlDb21wb25lbnQuY3JlYXRlT3JSZXBsYWNlKGVudGl0eSwgeyB2aXNpYmxlIH0pXG4gICAgY29uc3QgZ2x0ZiA9IEdsdGZDb250YWluZXIuZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHkpXG5cbiAgICBpZiAoZ2x0ZiAmJiBwaHlzaWNzQ29sbGlkZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZ2x0Zi5pbnZpc2libGVNZXNoZXNDb2xsaXNpb25NYXNrID0gcGh5c2ljc0NvbGxpZGVyID8gMiA6IDBcbiAgICB9XG4gIH1cblxuICAvLyBBVFRBQ0hfVE9fUExBWUVSXG4gIGZ1bmN0aW9uIGhhbmRsZUF0dGFjaFRvUGxheWVyKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5BVFRBQ0hfVE9fUExBWUVSPixcbiAgKSB7XG4gICAgY29uc3QgeyBhbmNob3JQb2ludElkIH0gPSBwYXlsb2FkXG4gICAgQXZhdGFyQXR0YWNoLmNyZWF0ZU9yUmVwbGFjZShlbnRpdHksIHsgYW5jaG9yUG9pbnRJZCB9KVxuICB9XG5cbiAgLy8gREVUQUNIX0ZST01fUExBWUVSXG4gIGZ1bmN0aW9uIGhhbmRsZURldGFjaEZyb21QbGF5ZXIoXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgX3BheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5ERVRBQ0hfRlJPTV9QTEFZRVI+LFxuICApIHtcbiAgICBpZiAoQXZhdGFyQXR0YWNoLmhhcyhlbnRpdHkpKSB7XG4gICAgICBBdmF0YXJBdHRhY2guZGVsZXRlRnJvbShlbnRpdHkpXG4gICAgfVxuICB9XG59XG4iXX0=
|
|
248
|
+
async function getVideoSrc({ src, dclCast, }) {
|
|
249
|
+
if (dclCast) {
|
|
250
|
+
const { streams } = await getActiveVideoStreams({});
|
|
251
|
+
return streams.length > 0 ? streams[0].trackSid : '';
|
|
252
|
+
}
|
|
253
|
+
return src ?? '';
|
|
254
|
+
}
|
|
255
|
+
function handlePlayVideo(entity, payload) {
|
|
256
|
+
getVideoSrc(payload).then((src) => {
|
|
257
|
+
if (!src)
|
|
258
|
+
return;
|
|
259
|
+
const videoSource = VideoPlayer.getMutableOrNull(entity);
|
|
260
|
+
if (videoSource) {
|
|
261
|
+
videoSource.src = src;
|
|
262
|
+
videoSource.volume = payload.volume ?? 1;
|
|
263
|
+
videoSource.loop = payload.loop ?? false;
|
|
264
|
+
videoSource.playing = true;
|
|
265
|
+
}
|
|
266
|
+
else {
|
|
267
|
+
VideoPlayer.createOrReplace(entity, {
|
|
268
|
+
src,
|
|
269
|
+
volume: payload.volume ?? 1,
|
|
270
|
+
loop: payload.loop ?? false,
|
|
271
|
+
playing: true,
|
|
272
|
+
});
|
|
273
|
+
initVideoPlayerComponentMaterial(entity, Material.getOrNull(entity));
|
|
274
|
+
}
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
function handleStopVideo(entity, _payload) {
|
|
278
|
+
const videoSource = VideoPlayer.getMutableOrNull(entity);
|
|
279
|
+
if (videoSource) {
|
|
280
|
+
videoSource.playing = false;
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
function handlePlayAudioStream(entity, payload) {
|
|
284
|
+
const { url, volume } = payload;
|
|
285
|
+
AudioStream.createOrReplace(entity, {
|
|
286
|
+
url,
|
|
287
|
+
playing: true,
|
|
288
|
+
volume: volume ?? 1,
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
function handleStopAudioStream(entity, _payload) {
|
|
292
|
+
const audioSource = AudioStream.getMutableOrNull(entity);
|
|
293
|
+
if (audioSource) {
|
|
294
|
+
audioSource.playing = false;
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9hY3Rpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFVTCxXQUFXLEVBQ1gsUUFBUSxFQUNSLFdBQVcsR0FDWixNQUFNLGNBQWMsQ0FBQTtBQUNyQixPQUFPLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUNuRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sMkJBQTJCLENBQUE7QUFDbEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFDeEQsT0FBTyxFQUVMLFVBQVUsRUFDVixXQUFXLEVBQ1gsU0FBUyxFQUNULGFBQWEsRUFDYixnQ0FBZ0MsR0FDakMsTUFBTSxlQUFlLENBQUE7QUFDdEIsT0FBTyxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFDeEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFVBQVUsQ0FBQTtBQUM1RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFFM0MsTUFBTSxjQUFjLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQTtBQUV4QyxNQUFNLFVBQVUsbUJBQW1CLENBQ2pDLE1BQWUsRUFDZixVQU9DO0lBRUQsTUFBTSxFQUNKLFFBQVEsRUFDUixTQUFTLEVBQ1QsV0FBVyxFQUNYLFlBQVksRUFDWixtQkFBbUIsRUFDbkIsYUFBYSxHQUNkLEdBQUcsVUFBVSxDQUFBO0lBQ2QsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBRTFELE9BQU8sU0FBUyxhQUFhLENBQUMsR0FBVztRQUN2QyxNQUFNLG1CQUFtQixHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUE7UUFFM0QsS0FBSyxNQUFNLENBQUMsTUFB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QkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUN4RCxJQUFJLFdBQVcsRUFBRTtRQUNmLFdBQVcsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFBO0tBQzVCO0FBQ0gsQ0FBQztBQUdELFNBQVMscUJBQXFCLENBQzVCLE1BQWMsRUFDZCxPQUFvRDtJQUVwRCxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQTtJQUMvQixXQUFXLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRTtRQUNsQyxHQUFHO1FBQ0gsT0FBTyxFQUFFLElBQUk7UUFDYixNQUFNLEVBQUUsTUFBTSxJQUFJLENBQUM7S0FDcEIsQ0FBQyxDQUFBO0FBQ0osQ0FBQztBQUdELFNBQVMscUJBQXFCLENBQzVCLE1BQWMsRUFDZCxRQUFxRDtJQUVyRCxNQUFNLFdBQVcsR0FBRyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDeEQsSUFBSSxXQUFXLEVBQUU7UUFDZixXQUFXLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQTtLQUM1QjtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBJRW5naW5lLFxuICBFbnRpdHksXG4gIEFuaW1hdG9yQ29tcG9uZW50RGVmaW5pdGlvbkV4dGVuZGVkLFxuICBUcmFuc2Zvcm1Db21wb25lbnRFeHRlbmRlZCxcbiAgTGFzdFdyaXRlV2luRWxlbWVudFNldENvbXBvbmVudERlZmluaXRpb24sXG4gIFBCQXVkaW9Tb3VyY2UsXG4gIFBCQXZhdGFyQXR0YWNoLFxuICBQQlZpc2liaWxpdHlDb21wb25lbnQsXG4gIFBCR2x0ZkNvbnRhaW5lcixcbiAgVmlkZW9QbGF5ZXIsXG4gIE1hdGVyaWFsLFxuICBBdWRpb1N0cmVhbSxcbn0gZnJvbSAnQGRjbC9zZGsvZWNzJ1xuaW1wb3J0IHsgUXVhdGVybmlvbiwgVmVjdG9yMyB9IGZyb20gJ0BkY2wvc2RrL21hdGgnXG5pbXBvcnQgeyB0d2VlbnMgfSBmcm9tICdAZGNsLXNkay91dGlscy9kaXN0L3R3ZWVuJ1xuaW1wb3J0IHsgZ2V0QWN0aXZlVmlkZW9TdHJlYW1zIH0gZnJvbSAnfnN5c3RlbS9Db21tc0FwaSdcbmltcG9ydCB7XG4gIEFjdGlvblBheWxvYWQsXG4gIEFjdGlvblR5cGUsXG4gIFRyaWdnZXJUeXBlLFxuICBUd2VlblR5cGUsXG4gIGdldENvbXBvbmVudHMsXG4gIGluaXRWaWRlb1BsYXllckNvbXBvbmVudE1hdGVyaWFsLFxufSBmcm9tICcuL2RlZmluaXRpb25zJ1xuaW1wb3J0IHsgZ2V0RGVmYXVsdFZhbHVlLCBpc1ZhbGlkU3RhdGUgfSBmcm9tICcuL3N0YXRlcydcbmltcG9ydCB7IGdldEFjdGlvbkV2ZW50cywgZ2V0VHJpZ2dlckV2ZW50cyB9IGZyb20gJy4vZXZlbnRzJ1xuaW1wb3J0IHsgZ2V0UGF5bG9hZCB9IGZyb20gJy4vYWN0aW9uLXR5cGVzJ1xuXG5jb25zdCBpbml0ZWRFbnRpdGllcyA9IG5ldyBTZXQ8RW50aXR5PigpXG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBY3Rpb25zU3lzdGVtKFxuICBlbmdpbmU6IElFbmdpbmUsXG4gIGNvbXBvbmVudHM6IHtcbiAgICBBbmltYXRvcjogQW5pbWF0b3JDb21wb25lbnREZWZpbml0aW9uRXh0ZW5kZWRcbiAgICBUcmFuc2Zvcm06IFRyYW5zZm9ybUNvbXBvbmVudEV4dGVuZGVkXG4gICAgQXVkaW9Tb3VyY2U6IExhc3RXcml0ZVdpbkVsZW1lbnRTZXRDb21wb25lbnREZWZpbml0aW9uPFBCQXVkaW9Tb3VyY2U+XG4gICAgQXZhdGFyQXR0YWNoOiBMYXN0V3JpdGVXaW5FbGVtZW50U2V0Q29tcG9uZW50RGVmaW5pdGlvbjxQQkF2YXRhckF0dGFjaD5cbiAgICBWaXNpYmlsaXR5Q29tcG9uZW50OiBMYXN0V3JpdGVXaW5FbGVtZW50U2V0Q29tcG9uZW50RGVmaW5pdGlvbjxQQlZpc2liaWxpdHlDb21wb25lbnQ+XG4gICAgR2x0ZkNvbnRhaW5lcjogTGFzdFdyaXRlV2luRWxlbWVudFNldENvbXBvbmVudERlZmluaXRpb248UEJHbHRmQ29udGFpbmVyPlxuICB9LFxuKSB7XG4gIGNvbnN0IHtcbiAgICBBbmltYXRvcixcbiAgICBUcmFuc2Zvcm0sXG4gICAgQXVkaW9Tb3VyY2UsXG4gICAgQXZhdGFyQXR0YWNoLFxuICAgIFZpc2liaWxpdHlDb21wb25lbnQsXG4gICAgR2x0ZkNvbnRhaW5lcixcbiAgfSA9IGNvbXBvbmVudHNcbiAgY29uc3QgeyBBY3Rpb25zLCBTdGF0ZXMsIENvdW50ZXIgfSA9IGdldENvbXBvbmVudHMoZW5naW5lKVxuXG4gIHJldHVybiBmdW5jdGlvbiBhY3Rpb25zU3lzdGVtKF9kdDogbnVtYmVyKSB7XG4gICAgY29uc3QgZW50aXRpZXNXaXRoQWN0aW9ucyA9IGVuZ2luZS5nZXRFbnRpdGllc1dpdGgoQWN0aW9ucylcblxuICAgIGZvciAoY29uc3QgW2VudGl0eSwgYWN0aW9uc10gb2YgZW50aXRpZXNXaXRoQWN0aW9ucykge1xuICAgICAgaWYgKGluaXRlZEVudGl0aWVzLmhhcyhlbnRpdHkpKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIC8vIGluaXRpYWxpemUgYWN0aW9ucyBmb3IgZ2l2ZW4gZW50aXR5XG4gICAgICBjb25zdCB0eXBlcyA9IGFjdGlvbnMudmFsdWUucmVkdWNlKFxuICAgICAgICAodHlwZXMsIGFjdGlvbikgPT4gdHlwZXMuYWRkKGFjdGlvbi50eXBlKSxcbiAgICAgICAgbmV3IFNldDxTdHJpbmc+KCksXG4gICAgICApXG5cbiAgICAgIGZvciAoY29uc3QgdHlwZSBvZiB0eXBlcykge1xuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuUExBWV9BTklNQVRJT046IHtcbiAgICAgICAgICAgIGluaXRQbGF5QW5pbWF0aW9uKGVudGl0eSlcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIGJpbmQgYWN0aW9uc1xuICAgICAgY29uc3QgYWN0aW9uRXZlbnRzID0gZ2V0QWN0aW9uRXZlbnRzKGVudGl0eSlcbiAgICAgIGZvciAoY29uc3QgYWN0aW9uIG9mIGFjdGlvbnMudmFsdWUpIHtcbiAgICAgICAgYWN0aW9uRXZlbnRzLm9uKGFjdGlvbi5uYW1lLCAoKSA9PiB7XG4gICAgICAgICAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICAgICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlBMQVlfQU5JTUFUSU9OOiB7XG4gICAgICAgICAgICAgIGhhbmRsZVBsYXlBbmltYXRpb24oXG4gICAgICAgICAgICAgICAgZW50aXR5LFxuICAgICAgICAgICAgICAgIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5QTEFZX0FOSU1BVElPTj4oYWN0aW9uKSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlNUT1BfQU5JTUFUSU9OOiB7XG4gICAgICAgICAgICAgIGhhbmRsZVN0b3BBbmltYXRpb24oXG4gICAgICAgICAgICAgICAgZW50aXR5LFxuICAgICAgICAgICAgICAgIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5TVE9QX0FOSU1BVElPTj4oYWN0aW9uKSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlNFVF9TVEFURToge1xuICAgICAgICAgICAgICBoYW5kbGVTZXRTdGF0ZShlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5TRVRfU1RBVEU+KGFjdGlvbikpXG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuU1RBUlRfVFdFRU46IHtcbiAgICAgICAgICAgICAgaGFuZGxlU3RhcnRUd2VlbihcbiAgICAgICAgICAgICAgICBlbnRpdHksXG4gICAgICAgICAgICAgICAgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlNUQVJUX1RXRUVOPihhY3Rpb24pLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuU0VUX0NPVU5URVI6IHtcbiAgICAgICAgICAgICAgaGFuZGxlU2V0Q291bnRlcihcbiAgICAgICAgICAgICAgICBlbnRpdHksXG4gICAgICAgICAgICAgICAgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlNFVF9DT1VOVEVSPihhY3Rpb24pLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuSU5DUkVNRU5UX0NPVU5URVI6IHtcbiAgICAgICAgICAgICAgaGFuZGxlSW5jcmVtZW50Q291bnRlcihcbiAgICAgICAgICAgICAgICBlbnRpdHksXG4gICAgICAgICAgICAgICAgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLklOQ1JFTUVOVF9DT1VOVEVSPihhY3Rpb24pLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuREVDUkVBU0VfQ09VTlRFUjoge1xuICAgICAgICAgICAgICBoYW5kbGVEZWNyZWFzZUNvdW50ZXIoXG4gICAgICAgICAgICAgICAgZW50aXR5LFxuICAgICAgICAgICAgICAgIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5ERUNSRUFTRV9DT1VOVEVSPihhY3Rpb24pLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuUExBWV9TT1VORDoge1xuICAgICAgICAgICAgICBoYW5kbGVQbGF5U291bmQoZW50aXR5LCBnZXRQYXlsb2FkPEFjdGlvblR5cGUuUExBWV9TT1VORD4oYWN0aW9uKSlcbiAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5TVE9QX1NPVU5EOiB7XG4gICAgICAgICAgICAgIGhhbmRsZVN0b3BTb3VuZChlbnRpdHksIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5TVE9QX1NPVU5EPihhY3Rpb24pKVxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlNFVF9WSVNJQklMSVRZOiB7XG4gICAgICAgICAgICAgIGhhbmRsZVNldFZpc2liaWxpdHkoXG4gICAgICAgICAgICAgICAgZW50aXR5LFxuICAgICAgICAgICAgICAgIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5TRVRfVklTSUJJTElUWT4oYWN0aW9uKSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLkFUVEFDSF9UT19QTEFZRVI6IHtcbiAgICAgICAgICAgICAgaGFuZGxlQXR0YWNoVG9QbGF5ZXIoXG4gICAgICAgICAgICAgICAgZW50aXR5LFxuICAgICAgICAgICAgICAgIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5BVFRBQ0hfVE9fUExBWUVSPihhY3Rpb24pLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuREVUQUNIX0ZST01fUExBWUVSOiB7XG4gICAgICAgICAgICAgIGhhbmRsZURldGFjaEZyb21QbGF5ZXIoXG4gICAgICAgICAgICAgICAgZW50aXR5LFxuICAgICAgICAgICAgICAgIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5ERVRBQ0hfRlJPTV9QTEFZRVI+KGFjdGlvbiksXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5QTEFZX1ZJREVPX1NUUkVBTToge1xuICAgICAgICAgICAgICBoYW5kbGVQbGF5VmlkZW8oXG4gICAgICAgICAgICAgICAgZW50aXR5LFxuICAgICAgICAgICAgICAgIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5QTEFZX1ZJREVPX1NUUkVBTT4oYWN0aW9uKSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBBY3Rpb25UeXBlLlNUT1BfVklERU9fU1RSRUFNOiB7XG4gICAgICAgICAgICAgIGhhbmRsZVN0b3BWaWRlbyhcbiAgICAgICAgICAgICAgICBlbnRpdHksXG4gICAgICAgICAgICAgICAgZ2V0UGF5bG9hZDxBY3Rpb25UeXBlLlNUT1BfVklERU9fU1RSRUFNPihhY3Rpb24pLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEFjdGlvblR5cGUuUExBWV9BVURJT19TVFJFQU06IHtcbiAgICAgICAgICAgICAgaGFuZGxlUGxheUF1ZGlvU3RyZWFtKFxuICAgICAgICAgICAgICAgIGVudGl0eSxcbiAgICAgICAgICAgICAgICBnZXRQYXlsb2FkPEFjdGlvblR5cGUuUExBWV9BVURJT19TVFJFQU0+KGFjdGlvbiksXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgQWN0aW9uVHlwZS5TVE9QX0FVRElPX1NUUkVBTToge1xuICAgICAgICAgICAgICBoYW5kbGVTdG9wQXVkaW9TdHJlYW0oXG4gICAgICAgICAgICAgICAgZW50aXR5LFxuICAgICAgICAgICAgICAgIGdldFBheWxvYWQ8QWN0aW9uVHlwZS5TVE9QX0FVRElPX1NUUkVBTT4oYWN0aW9uKSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGluaXRlZEVudGl0aWVzLmFkZChlbnRpdHkpXG4gICAgfVxuICB9XG5cbiAgLy8gUExBWV9BTklNQVRJT05cbiAgZnVuY3Rpb24gaW5pdFBsYXlBbmltYXRpb24oZW50aXR5OiBFbnRpdHkpIHtcbiAgICBBbmltYXRvci5jcmVhdGUoZW50aXR5LCB7XG4gICAgICBzdGF0ZXM6IFtdLFxuICAgIH0pXG4gICAgQW5pbWF0b3Iuc3RvcEFsbEFuaW1hdGlvbnMoZW50aXR5KVxuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlUGxheUFuaW1hdGlvbihcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuUExBWV9BTklNQVRJT04+LFxuICApIHtcbiAgICBjb25zdCB7IGFuaW1hdGlvbiwgbG9vcCB9ID0gcGF5bG9hZFxuXG4gICAgY29uc3QgYW5pbWF0b3IgPSBBbmltYXRvci5nZXRNdXRhYmxlKGVudGl0eSlcbiAgICBpZiAoIWFuaW1hdG9yLnN0YXRlcy5zb21lKCgkKSA9PiAkLmNsaXAgPT09IGFuaW1hdGlvbikpIHtcbiAgICAgIGFuaW1hdG9yLnN0YXRlcyA9IFtcbiAgICAgICAgLi4uYW5pbWF0b3Iuc3RhdGVzLFxuICAgICAgICB7XG4gICAgICAgICAgY2xpcDogYW5pbWF0aW9uLFxuICAgICAgICB9LFxuICAgICAgXVxuICAgIH1cblxuICAgIEFuaW1hdG9yLnN0b3BBbGxBbmltYXRpb25zKGVudGl0eSlcbiAgICBjb25zdCBjbGlwID0gQW5pbWF0b3IuZ2V0Q2xpcChlbnRpdHksIGFuaW1hdGlvbilcbiAgICBjbGlwLnBsYXlpbmcgPSB0cnVlXG4gICAgY2xpcC5sb29wID0gbG9vcCA/PyBmYWxzZVxuICB9XG5cbiAgLy8gU1RPUF9BTklNQVRJT05cbiAgZnVuY3Rpb24gaGFuZGxlU3RvcEFuaW1hdGlvbihcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBfcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlNUT1BfQU5JTUFUSU9OPixcbiAgKSB7XG4gICAgaWYgKEFuaW1hdG9yLmhhcyhlbnRpdHkpKSB7XG4gICAgICBBbmltYXRvci5zdG9wQWxsQW5pbWF0aW9ucyhlbnRpdHkpXG4gICAgfVxuICB9XG5cbiAgLy8gU0VUX1NUQVRFXG4gIGZ1bmN0aW9uIGhhbmRsZVNldFN0YXRlKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5TRVRfU1RBVEU+LFxuICApIHtcbiAgICBjb25zdCBzdGF0ZXMgPSBTdGF0ZXMuZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHkpXG5cbiAgICBpZiAoc3RhdGVzKSB7XG4gICAgICBsZXQgbmV4dFN0YXRlOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBwYXlsb2FkLnN0YXRlXG4gICAgICBuZXh0U3RhdGUgPSBpc1ZhbGlkU3RhdGUoc3RhdGVzLCBuZXh0U3RhdGUpXG4gICAgICAgID8gbmV4dFN0YXRlXG4gICAgICAgIDogZ2V0RGVmYXVsdFZhbHVlKHN0YXRlcylcbiAgICAgIHN0YXRlcy5jdXJyZW50VmFsdWUgPSBuZXh0U3RhdGVcblxuICAgICAgY29uc3QgdHJpZ2dlckV2ZW50cyA9IGdldFRyaWdnZXJFdmVudHMoZW50aXR5KVxuICAgICAgdHJpZ2dlckV2ZW50cy5lbWl0KFRyaWdnZXJUeXBlLk9OX1NUQVRFX0NIQU5HRSlcbiAgICB9XG4gIH1cblxuICAvLyBTVEFSVF9UV0VFTlxuICBmdW5jdGlvbiBoYW5kbGVTdGFydFR3ZWVuKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5TVEFSVF9UV0VFTj4sXG4gICkge1xuICAgIGlmIChwYXlsb2FkKSB7XG4gICAgICBjb25zdCB0cmlnZ2VyRXZlbnRzID0gZ2V0VHJpZ2dlckV2ZW50cyhlbnRpdHkpXG4gICAgICBjb25zdCBvblR3ZWVuRW5kID0gKCkgPT4gdHJpZ2dlckV2ZW50cy5lbWl0KFRyaWdnZXJUeXBlLk9OX1RXRUVOX0VORClcblxuICAgICAgc3dpdGNoIChwYXlsb2FkLnR5cGUpIHtcbiAgICAgICAgY2FzZSBUd2VlblR5cGUuTU9WRV9JVEVNOiB7XG4gICAgICAgICAgaGFuZGxlTW92ZUl0ZW0oZW50aXR5LCBwYXlsb2FkLCBvblR3ZWVuRW5kKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBUd2VlblR5cGUuUk9UQVRFX0lURU06IHtcbiAgICAgICAgICBoYW5kbGVSb3RhdGVJdGVtKGVudGl0eSwgcGF5bG9hZCwgb25Ud2VlbkVuZClcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgVHdlZW5UeXBlLlNDQUxFX0lURU06IHtcbiAgICAgICAgICBoYW5kbGVTY2FsZUl0ZW0oZW50aXR5LCBwYXlsb2FkLCBvblR3ZWVuRW5kKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biB0d2VlbiB0eXBlOiAke3BheWxvYWQudHlwZX1gKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gTU9WRV9JVEVNXG4gIGZ1bmN0aW9uIGhhbmRsZU1vdmVJdGVtKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIHR3ZWVuOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU1RBUlRfVFdFRU4+LFxuICAgIG9uVHdlZW5FbmQ6ICgpID0+IHZvaWQsXG4gICkge1xuICAgIGNvbnN0IHRyYW5zZm9ybSA9IFRyYW5zZm9ybS5nZXQoZW50aXR5KVxuICAgIGNvbnN0IHsgZHVyYXRpb24sIGludGVycG9sYXRpb25UeXBlLCByZWxhdGl2ZSB9ID0gdHdlZW5cbiAgICBjb25zdCBlbmQgPSBWZWN0b3IzLmNyZWF0ZSh0d2Vlbi5lbmQueCwgdHdlZW4uZW5kLnksIHR3ZWVuLmVuZC56KVxuICAgIGNvbnN0IGVuZFBvc2l0aW9uID0gcmVsYXRpdmUgPyBWZWN0b3IzLmFkZCh0cmFuc2Zvcm0ucG9zaXRpb24sIGVuZCkgOiBlbmRcblxuICAgIHR3ZWVucy5zdGFydFRyYW5zbGF0aW9uKFxuICAgICAgZW50aXR5LFxuICAgICAgdHJhbnNmb3JtLnBvc2l0aW9uLFxuICAgICAgZW5kUG9zaXRpb24sXG4gICAgICBkdXJhdGlvbixcbiAgICAgIGludGVycG9sYXRpb25UeXBlLFxuICAgICAgb25Ud2VlbkVuZCxcbiAgICApXG4gIH1cblxuICAvLyBST1RBVEVfSVRFTVxuICBmdW5jdGlvbiBoYW5kbGVSb3RhdGVJdGVtKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIHR3ZWVuOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU1RBUlRfVFdFRU4+LFxuICAgIG9uVHdlZW5FbmQ6ICgpID0+IHZvaWQsXG4gICkge1xuICAgIGNvbnN0IHRyYW5zZm9ybSA9IFRyYW5zZm9ybS5nZXQoZW50aXR5KVxuICAgIGNvbnN0IHsgZHVyYXRpb24sIGludGVycG9sYXRpb25UeXBlLCByZWxhdGl2ZSB9ID0gdHdlZW5cbiAgICBjb25zdCBlbmQgPSBRdWF0ZXJuaW9uLmZyb21FdWxlckRlZ3JlZXMoXG4gICAgICB0d2Vlbi5lbmQueCxcbiAgICAgIHR3ZWVuLmVuZC55LFxuICAgICAgdHdlZW4uZW5kLnosXG4gICAgKVxuICAgIGNvbnN0IGVuZFJvdGF0aW9uID0gcmVsYXRpdmVcbiAgICAgID8gUXVhdGVybmlvbi5tdWx0aXBseSh0cmFuc2Zvcm0ucm90YXRpb24sIGVuZClcbiAgICAgIDogZW5kXG5cbiAgICB0d2VlbnMuc3RhcnRSb3RhdGlvbihcbiAgICAgIGVudGl0eSxcbiAgICAgIHRyYW5zZm9ybS5yb3RhdGlvbixcbiAgICAgIGVuZFJvdGF0aW9uLFxuICAgICAgZHVyYXRpb24sXG4gICAgICBpbnRlcnBvbGF0aW9uVHlwZSxcbiAgICAgIG9uVHdlZW5FbmQsXG4gICAgKVxuICB9XG5cbiAgLy8gU0NBTEVfSVRFTVxuICBmdW5jdGlvbiBoYW5kbGVTY2FsZUl0ZW0oXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgdHdlZW46IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5TVEFSVF9UV0VFTj4sXG4gICAgb25Ud2VlbkVuZDogKCkgPT4gdm9pZCxcbiAgKSB7XG4gICAgY29uc3QgdHJhbnNmb3JtID0gVHJhbnNmb3JtLmdldChlbnRpdHkpXG4gICAgY29uc3QgeyBkdXJhdGlvbiwgaW50ZXJwb2xhdGlvblR5cGUsIHJlbGF0aXZlIH0gPSB0d2VlblxuICAgIGNvbnN0IGVuZCA9IFZlY3RvcjMuY3JlYXRlKHR3ZWVuLmVuZC54LCB0d2Vlbi5lbmQueSwgdHdlZW4uZW5kLnopXG4gICAgY29uc3QgZW5kU2NhbGUgPSByZWxhdGl2ZSA/IFZlY3RvcjMuYWRkKHRyYW5zZm9ybS5zY2FsZSwgZW5kKSA6IGVuZFxuXG4gICAgdHdlZW5zLnN0YXJ0U2NhbGluZyhcbiAgICAgIGVudGl0eSxcbiAgICAgIHRyYW5zZm9ybS5zY2FsZSxcbiAgICAgIGVuZFNjYWxlLFxuICAgICAgZHVyYXRpb24sXG4gICAgICBpbnRlcnBvbGF0aW9uVHlwZSxcbiAgICAgIG9uVHdlZW5FbmQsXG4gICAgKVxuICB9XG5cbiAgLy8gU0VUX0NPVU5URVJcbiAgZnVuY3Rpb24gaGFuZGxlU2V0Q291bnRlcihcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU0VUX0NPVU5URVI+LFxuICApIHtcbiAgICBjb25zdCBjb3VudGVyID0gQ291bnRlci5nZXRNdXRhYmxlT3JOdWxsKGVudGl0eSlcblxuICAgIGlmIChjb3VudGVyKSB7XG4gICAgICBjb3VudGVyLnZhbHVlID0gcGF5bG9hZC5jb3VudGVyXG5cbiAgICAgIGNvbnN0IHRyaWdnZXJFdmVudHMgPSBnZXRUcmlnZ2VyRXZlbnRzKGVudGl0eSlcbiAgICAgIHRyaWdnZXJFdmVudHMuZW1pdChUcmlnZ2VyVHlwZS5PTl9DT1VOVEVSX0NIQU5HRSlcbiAgICB9XG4gIH1cblxuICAvLyBJTkNSRU1FTlRfQ09VTlRFUlxuICBmdW5jdGlvbiBoYW5kbGVJbmNyZW1lbnRDb3VudGVyKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIF9wYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuSU5DUkVNRU5UX0NPVU5URVI+LFxuICApIHtcbiAgICBjb25zdCBjb3VudGVyID0gQ291bnRlci5nZXRNdXRhYmxlT3JOdWxsKGVudGl0eSlcblxuICAgIGlmIChjb3VudGVyKSB7XG4gICAgICBjb3VudGVyLnZhbHVlICs9IDFcblxuICAgICAgY29uc3QgdHJpZ2dlckV2ZW50cyA9IGdldFRyaWdnZXJFdmVudHMoZW50aXR5KVxuICAgICAgdHJpZ2dlckV2ZW50cy5lbWl0KFRyaWdnZXJUeXBlLk9OX0NPVU5URVJfQ0hBTkdFKVxuICAgIH1cbiAgfVxuXG4gIC8vIERFQ1JFQVNFX0NPVU5URVJcbiAgZnVuY3Rpb24gaGFuZGxlRGVjcmVhc2VDb3VudGVyKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIF9wYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuSU5DUkVNRU5UX0NPVU5URVI+LFxuICApIHtcbiAgICBjb25zdCBjb3VudGVyID0gQ291bnRlci5nZXRNdXRhYmxlT3JOdWxsKGVudGl0eSlcblxuICAgIGlmIChjb3VudGVyKSB7XG4gICAgICBjb3VudGVyLnZhbHVlIC09IDFcblxuICAgICAgY29uc3QgdHJpZ2dlckV2ZW50cyA9IGdldFRyaWdnZXJFdmVudHMoZW50aXR5KVxuICAgICAgdHJpZ2dlckV2ZW50cy5lbWl0KFRyaWdnZXJUeXBlLk9OX0NPVU5URVJfQ0hBTkdFKVxuICAgIH1cbiAgfVxuXG4gIC8vIFBMQVlfU09VTkRcbiAgZnVuY3Rpb24gaGFuZGxlUGxheVNvdW5kKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5QTEFZX1NPVU5EPixcbiAgKSB7XG4gICAgY29uc3QgeyBzcmMsIGxvb3AsIHZvbHVtZSB9ID0gcGF5bG9hZFxuICAgIEF1ZGlvU291cmNlLmNyZWF0ZU9yUmVwbGFjZShlbnRpdHksIHtcbiAgICAgIGF1ZGlvQ2xpcFVybDogc3JjLFxuICAgICAgbG9vcCxcbiAgICAgIHBsYXlpbmc6IHRydWUsXG4gICAgICB2b2x1bWU6IHZvbHVtZSA/PyAxLFxuICAgIH0pXG4gIH1cblxuICAvLyBTVE9QX1NPVU5EXG4gIGZ1bmN0aW9uIGhhbmRsZVN0b3BTb3VuZChcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBfcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlNUT1BfU09VTkQ+LFxuICApIHtcbiAgICBjb25zdCBhdWRpb1NvdXJjZSA9IEF1ZGlvU291cmNlLmdldE11dGFibGVPck51bGwoZW50aXR5KVxuICAgIGlmIChhdWRpb1NvdXJjZSkge1xuICAgICAgYXVkaW9Tb3VyY2UucGxheWluZyA9IGZhbHNlXG4gICAgfVxuICB9XG5cbiAgLy8gU0VUX1ZJU0lCSUxJVFlcbiAgZnVuY3Rpb24gaGFuZGxlU2V0VmlzaWJpbGl0eShcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU0VUX1ZJU0lCSUxJVFk+LFxuICApIHtcbiAgICBjb25zdCB7IHZpc2libGUsIHBoeXNpY3NDb2xsaWRlciB9ID0gcGF5bG9hZFxuICAgIFZpc2liaWxpdHlDb21wb25lbnQuY3JlYXRlT3JSZXBsYWNlKGVudGl0eSwgeyB2aXNpYmxlIH0pXG4gICAgY29uc3QgZ2x0ZiA9IEdsdGZDb250YWluZXIuZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHkpXG5cbiAgICBpZiAoZ2x0ZiAmJiBwaHlzaWNzQ29sbGlkZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZ2x0Zi5pbnZpc2libGVNZXNoZXNDb2xsaXNpb25NYXNrID0gcGh5c2ljc0NvbGxpZGVyID8gMiA6IDBcbiAgICB9XG4gIH1cblxuICAvLyBBVFRBQ0hfVE9fUExBWUVSXG4gIGZ1bmN0aW9uIGhhbmRsZUF0dGFjaFRvUGxheWVyKFxuICAgIGVudGl0eTogRW50aXR5LFxuICAgIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5BVFRBQ0hfVE9fUExBWUVSPixcbiAgKSB7XG4gICAgY29uc3QgeyBhbmNob3JQb2ludElkIH0gPSBwYXlsb2FkXG4gICAgQXZhdGFyQXR0YWNoLmNyZWF0ZU9yUmVwbGFjZShlbnRpdHksIHsgYW5jaG9yUG9pbnRJZCB9KVxuICB9XG5cbiAgLy8gREVUQUNIX0ZST01fUExBWUVSXG4gIGZ1bmN0aW9uIGhhbmRsZURldGFjaEZyb21QbGF5ZXIoXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgX3BheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5ERVRBQ0hfRlJPTV9QTEFZRVI+LFxuICApIHtcbiAgICBpZiAoQXZhdGFyQXR0YWNoLmhhcyhlbnRpdHkpKSB7XG4gICAgICBBdmF0YXJBdHRhY2guZGVsZXRlRnJvbShlbnRpdHkpXG4gICAgfVxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFZpZGVvU3JjKHtcbiAgc3JjLFxuICBkY2xDYXN0LFxufTogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlBMQVlfVklERU9fU1RSRUFNPikge1xuICBpZiAoZGNsQ2FzdCkge1xuICAgIGNvbnN0IHsgc3RyZWFtcyB9ID0gYXdhaXQgZ2V0QWN0aXZlVmlkZW9TdHJlYW1zKHt9KVxuICAgIHJldHVybiBzdHJlYW1zLmxlbmd0aCA+IDAgPyBzdHJlYW1zWzBdLnRyYWNrU2lkIDogJydcbiAgfVxuICByZXR1cm4gc3JjID8/ICcnXG59XG5cbi8vIFBMQVlfVklERU9cbmZ1bmN0aW9uIGhhbmRsZVBsYXlWaWRlbyhcbiAgZW50aXR5OiBFbnRpdHksXG4gIHBheWxvYWQ6IEFjdGlvblBheWxvYWQ8QWN0aW9uVHlwZS5QTEFZX1ZJREVPX1NUUkVBTT4sXG4pIHtcbiAgLy8gR2V0IHRoZSB2aWRlbyBzcmMgZnJvbSBhIHByb21pc2UgKFZpZGVvIEZpbGUvVmlkZW8gU3RyZWFtL0RDTCBDYXN0KVxuICBnZXRWaWRlb1NyYyhwYXlsb2FkKS50aGVuKChzcmMpID0+IHtcbiAgICBpZiAoIXNyYykgcmV0dXJuXG5cbiAgICBjb25zdCB2aWRlb1NvdXJjZSA9IFZpZGVvUGxheWVyLmdldE11dGFibGVPck51bGwoZW50aXR5KVxuXG4gICAgaWYgKHZpZGVvU291cmNlKSB7XG4gICAgICB2aWRlb1NvdXJjZS5zcmMgPSBzcmNcbiAgICAgIHZpZGVvU291cmNlLnZvbHVtZSA9IHBheWxvYWQudm9sdW1lID8/IDFcbiAgICAgIHZpZGVvU291cmNlLmxvb3AgPSBwYXlsb2FkLmxvb3AgPz8gZmFsc2VcbiAgICAgIHZpZGVvU291cmNlLnBsYXlpbmcgPSB0cnVlXG4gICAgfSBlbHNlIHtcbiAgICAgIFZpZGVvUGxheWVyLmNyZWF0ZU9yUmVwbGFjZShlbnRpdHksIHtcbiAgICAgICAgc3JjLFxuICAgICAgICB2b2x1bWU6IHBheWxvYWQudm9sdW1lID8/IDEsXG4gICAgICAgIGxvb3A6IHBheWxvYWQubG9vcCA/PyBmYWxzZSxcbiAgICAgICAgcGxheWluZzogdHJ1ZSxcbiAgICAgIH0pXG5cbiAgICAgIC8vIEluaXQgdmlkZW8gcGxheWVyIG1hdGVyaWFsIHdoZW4gdGhlIGVudGl0eSBkb2Vzbid0IGhhdmUgYSBWaWRlb1BsYXllciBjb21wb25lbnQgZGVmaW5lZFxuICAgICAgaW5pdFZpZGVvUGxheWVyQ29tcG9uZW50TWF0ZXJpYWwoZW50aXR5LCBNYXRlcmlhbC5nZXRPck51bGwoZW50aXR5KSlcbiAgICB9XG4gIH0pXG59XG5cbi8vIFNUT1BfVklERU9cbmZ1bmN0aW9uIGhhbmRsZVN0b3BWaWRlbyhcbiAgZW50aXR5OiBFbnRpdHksXG4gIF9wYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuU1RPUF9WSURFT19TVFJFQU0+LFxuKSB7XG4gIGNvbnN0IHZpZGVvU291cmNlID0gVmlkZW9QbGF5ZXIuZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHkpXG4gIGlmICh2aWRlb1NvdXJjZSkge1xuICAgIHZpZGVvU291cmNlLnBsYXlpbmcgPSBmYWxzZVxuICB9XG59XG5cbi8vIFBMQVlfQVVESU9fU1RSRUFNXG5mdW5jdGlvbiBoYW5kbGVQbGF5QXVkaW9TdHJlYW0oXG4gIGVudGl0eTogRW50aXR5LFxuICBwYXlsb2FkOiBBY3Rpb25QYXlsb2FkPEFjdGlvblR5cGUuUExBWV9BVURJT19TVFJFQU0+LFxuKSB7XG4gIGNvbnN0IHsgdXJsLCB2b2x1bWUgfSA9IHBheWxvYWRcbiAgQXVkaW9TdHJlYW0uY3JlYXRlT3JSZXBsYWNlKGVudGl0eSwge1xuICAgIHVybCxcbiAgICBwbGF5aW5nOiB0cnVlLFxuICAgIHZvbHVtZTogdm9sdW1lID8/IDEsXG4gIH0pXG59XG5cbi8vIFNUT1BfQVVESU9fU1RSRUFNXG5mdW5jdGlvbiBoYW5kbGVTdG9wQXVkaW9TdHJlYW0oXG4gIGVudGl0eTogRW50aXR5LFxuICBfcGF5bG9hZDogQWN0aW9uUGF5bG9hZDxBY3Rpb25UeXBlLlNUT1BfQVVESU9fU1RSRUFNPixcbikge1xuICBjb25zdCBhdWRpb1NvdXJjZSA9IEF1ZGlvU3RyZWFtLmdldE11dGFibGVPck51bGwoZW50aXR5KVxuICBpZiAoYXVkaW9Tb3VyY2UpIHtcbiAgICBhdWRpb1NvdXJjZS5wbGF5aW5nID0gZmFsc2VcbiAgfVxufVxuIl19
|