angular-three-soba 1.13.0 → 1.14.1
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/abstractions/lib/billboard/billboard.d.ts +1 -1
- package/abstractions/lib/catmull-rom-line/catmull-rom-line.d.ts +1 -1
- package/abstractions/lib/cubic-bezier-line/cubic-bezier-line.d.ts +1 -1
- package/abstractions/lib/edges/edges.d.ts +2 -2
- package/abstractions/lib/gizmo-helper/gizmo-helper.d.ts +1 -1
- package/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.d.ts +1 -1
- package/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.d.ts +2 -2
- package/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube-inputs.d.ts +1 -1
- package/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube.d.ts +1 -1
- package/abstractions/lib/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.d.ts +2 -2
- package/abstractions/lib/gizmo-helper/gizmo-viewport/gizmo-viewport.d.ts +1 -1
- package/abstractions/lib/line/line-input.d.ts +1 -1
- package/abstractions/lib/line/line.d.ts +1 -1
- package/abstractions/lib/quadratic-bezier-line/quadratic-bezier-line.d.ts +1 -1
- package/abstractions/lib/text/text.d.ts +1 -1
- package/abstractions/lib/text-3d/text-3d.d.ts +1 -1
- package/cameras/lib/camera/camera-content.d.ts +1 -1
- package/cameras/lib/camera/camera.d.ts +1 -1
- package/cameras/lib/cube-camera/cube-camera.d.ts +1 -1
- package/cameras/lib/orthographic-camera/orthographic-camera.d.ts +1 -1
- package/controls/lib/orbit-controls/orbit-controls.d.ts +1 -1
- package/esm2022/abstractions/lib/billboard/billboard.mjs +74 -0
- package/esm2022/abstractions/lib/catmull-rom-line/catmull-rom-line.mjs +120 -0
- package/esm2022/abstractions/lib/cubic-bezier-line/cubic-bezier-line.mjs +99 -0
- package/esm2022/abstractions/lib/edges/edges.mjs +96 -0
- package/esm2022/abstractions/lib/gizmo-helper/gizmo-helper.mjs +213 -0
- package/esm2022/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.mjs +92 -0
- package/esm2022/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.mjs +184 -0
- package/esm2022/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube-inputs.mjs +46 -0
- package/{esm2020 → esm2022}/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube.mjs +8 -7
- package/esm2022/abstractions/lib/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.mjs +195 -0
- package/{esm2020 → esm2022}/abstractions/lib/gizmo-helper/gizmo-viewport/gizmo-viewport.mjs +8 -7
- package/esm2022/abstractions/lib/line/line-input.mjs +76 -0
- package/esm2022/abstractions/lib/line/line.mjs +133 -0
- package/esm2022/abstractions/lib/quadratic-bezier-line/quadratic-bezier-line.mjs +128 -0
- package/esm2022/abstractions/lib/text/text.mjs +115 -0
- package/esm2022/abstractions/lib/text-3d/text-3d.mjs +145 -0
- package/esm2022/cameras/lib/camera/camera-content.mjs +21 -0
- package/esm2022/cameras/lib/camera/camera.mjs +75 -0
- package/esm2022/cameras/lib/cube-camera/cube-camera.mjs +131 -0
- package/esm2022/cameras/lib/orthographic-camera/orthographic-camera.mjs +93 -0
- package/{esm2020 → esm2022}/cameras/lib/perspective-camera/perspective-camera.mjs +8 -7
- package/esm2022/controls/lib/orbit-controls/orbit-controls.mjs +147 -0
- package/{esm2020 → esm2022}/loaders/lib/cube-texture-loader/cube-texture-loader.mjs +3 -3
- package/esm2022/loaders/lib/loader/loader.mjs +134 -0
- package/esm2022/materials/lib/mesh-distort-material/mesh-distort-material.mjs +75 -0
- package/esm2022/materials/lib/mesh-reflector-material/mesh-reflector-material.mjs +328 -0
- package/esm2022/materials/lib/mesh-refraction-material/mesh-refraction-material.mjs +158 -0
- package/esm2022/materials/lib/mesh-transmission-material/mesh-transmission-material.mjs +238 -0
- package/esm2022/materials/lib/mesh-wobble-material/mesh-wobble-material.mjs +68 -0
- package/esm2022/misc/lib/bake-shadows/bake-shadows.mjs +26 -0
- package/esm2022/performance/lib/adaptive/adaptive-dpr.mjs +47 -0
- package/esm2022/performance/lib/adaptive/adaptive-events.mjs +37 -0
- package/esm2022/performance/lib/detailed/detailed.mjs +54 -0
- package/esm2022/performance/lib/stats/stats.mjs +80 -0
- package/esm2022/shaders/lib/blur-pass/blur-pass.mjs +61 -0
- package/esm2022/staging/lib/accumulative-shadows/accumulative-shadows.mjs +249 -0
- package/esm2022/staging/lib/accumulative-shadows/randomized-lights.mjs +201 -0
- package/{esm2020 → esm2022}/staging/lib/bounds/bounds.mjs +8 -7
- package/esm2022/staging/lib/camera-shake/camera-shake.mjs +122 -0
- package/esm2022/staging/lib/caustics/caustics.mjs +364 -0
- package/esm2022/staging/lib/center/center.mjs +143 -0
- package/esm2022/staging/lib/cloud/cloud.mjs +160 -0
- package/esm2022/staging/lib/contact-shadows/contact-shadows.mjs +228 -0
- package/esm2022/staging/lib/environment/environment-cube.mjs +41 -0
- package/esm2022/staging/lib/environment/environment-ground.mjs +67 -0
- package/esm2022/staging/lib/environment/environment-inputs.mjs +87 -0
- package/esm2022/staging/lib/environment/environment-map.mjs +39 -0
- package/esm2022/staging/lib/environment/environment-portal.mjs +111 -0
- package/{esm2020 → esm2022}/staging/lib/environment/environment.mjs +13 -11
- package/esm2022/staging/lib/float/float.mjs +77 -0
- package/esm2022/staging/lib/sky/sky.mjs +109 -0
- package/esm2022/staging/lib/sparkles/sparkles.mjs +210 -0
- package/esm2022/staging/lib/spot-light/shadow-mesh-input.mjs +51 -0
- package/esm2022/staging/lib/spot-light/spot-light-input.mjs +62 -0
- package/esm2022/staging/lib/spot-light/spot-light-shadow-no-shader.mjs +74 -0
- package/esm2022/staging/lib/spot-light/spot-light-shadow-shader.mjs +126 -0
- package/{esm2020 → esm2022}/staging/lib/spot-light/spot-light-shadow.mjs +8 -7
- package/esm2022/staging/lib/spot-light/spot-light.mjs +117 -0
- package/esm2022/staging/lib/spot-light/volumetric-mesh.mjs +86 -0
- package/{esm2020 → esm2022}/staging/lib/stage/stage.mjs +13 -11
- package/esm2022/staging/lib/stars/stars.mjs +140 -0
- package/{fesm2020 → fesm2022}/angular-three-soba-abstractions.mjs +89 -89
- package/{fesm2015 → fesm2022}/angular-three-soba-abstractions.mjs.map +1 -1
- package/{fesm2015 → fesm2022}/angular-three-soba-cameras.mjs +21 -21
- package/{fesm2015 → fesm2022}/angular-three-soba-cameras.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/angular-three-soba-controls.mjs +5 -5
- package/fesm2022/angular-three-soba-controls.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/angular-three-soba-loaders.mjs +7 -7
- package/{fesm2020 → fesm2022}/angular-three-soba-loaders.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/angular-three-soba-materials.mjs +25 -25
- package/{fesm2020 → fesm2022}/angular-three-soba-materials.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/angular-three-soba-misc.mjs +3 -3
- package/{fesm2020 → fesm2022}/angular-three-soba-misc.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/angular-three-soba-performance.mjs +14 -14
- package/{fesm2020 → fesm2022}/angular-three-soba-performance.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/angular-three-soba-shaders.mjs +2 -2
- package/fesm2022/angular-three-soba-shaders.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/angular-three-soba-staging.mjs +139 -139
- package/{fesm2020 → fesm2022}/angular-three-soba-staging.mjs.map +1 -1
- package/loaders/lib/loader/loader.d.ts +1 -1
- package/materials/lib/mesh-distort-material/mesh-distort-material.d.ts +1 -1
- package/materials/lib/mesh-reflector-material/mesh-reflector-material.d.ts +1 -1
- package/materials/lib/mesh-refraction-material/mesh-refraction-material.d.ts +1 -1
- package/materials/lib/mesh-transmission-material/mesh-transmission-material.d.ts +1 -1
- package/materials/lib/mesh-wobble-material/mesh-wobble-material.d.ts +1 -1
- package/package.json +45 -70
- package/performance/lib/adaptive/adaptive-dpr.d.ts +1 -1
- package/performance/lib/detailed/detailed.d.ts +1 -1
- package/performance/lib/stats/stats.d.ts +1 -1
- package/plugin/package.json +1 -1
- package/plugin/src/generators/init/compat.js +1 -1
- package/plugin/src/generators/init/compat.js.map +1 -1
- package/plugin/src/generators/init/init.d.ts +1 -1
- package/plugin/src/generators/init/init.js +1 -1
- package/plugin/src/generators/init/init.js.map +1 -1
- package/staging/lib/accumulative-shadows/accumulative-shadows.d.ts +2 -2
- package/staging/lib/accumulative-shadows/randomized-lights.d.ts +1 -1
- package/staging/lib/bounds/bounds.d.ts +1 -1
- package/staging/lib/camera-shake/camera-shake.d.ts +1 -1
- package/staging/lib/caustics/caustics.d.ts +2 -2
- package/staging/lib/center/center.d.ts +1 -1
- package/staging/lib/cloud/cloud.d.ts +1 -1
- package/staging/lib/contact-shadows/contact-shadows.d.ts +1 -1
- package/staging/lib/environment/environment-inputs.d.ts +1 -1
- package/staging/lib/float/float.d.ts +1 -1
- package/staging/lib/sky/sky.d.ts +1 -1
- package/staging/lib/sparkles/sparkles.d.ts +2 -2
- package/staging/lib/spot-light/shadow-mesh-input.d.ts +1 -1
- package/staging/lib/spot-light/spot-light-input.d.ts +1 -1
- package/staging/lib/spot-light/spot-light-shadow-no-shader.d.ts +1 -1
- package/staging/lib/spot-light/spot-light-shadow-shader.d.ts +1 -1
- package/staging/lib/spot-light/spot-light.d.ts +1 -1
- package/staging/lib/spot-light/volumetric-mesh.d.ts +1 -1
- package/staging/lib/stage/stage.d.ts +2 -2
- package/staging/lib/stars/stars.d.ts +2 -2
- package/esm2020/abstractions/lib/billboard/billboard.mjs +0 -73
- package/esm2020/abstractions/lib/catmull-rom-line/catmull-rom-line.mjs +0 -119
- package/esm2020/abstractions/lib/cubic-bezier-line/cubic-bezier-line.mjs +0 -98
- package/esm2020/abstractions/lib/edges/edges.mjs +0 -95
- package/esm2020/abstractions/lib/gizmo-helper/gizmo-helper.mjs +0 -211
- package/esm2020/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.mjs +0 -91
- package/esm2020/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.mjs +0 -182
- package/esm2020/abstractions/lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube-inputs.mjs +0 -45
- package/esm2020/abstractions/lib/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.mjs +0 -193
- package/esm2020/abstractions/lib/line/line-input.mjs +0 -75
- package/esm2020/abstractions/lib/line/line.mjs +0 -132
- package/esm2020/abstractions/lib/quadratic-bezier-line/quadratic-bezier-line.mjs +0 -127
- package/esm2020/abstractions/lib/text/text.mjs +0 -114
- package/esm2020/abstractions/lib/text-3d/text-3d.mjs +0 -144
- package/esm2020/cameras/lib/camera/camera-content.mjs +0 -20
- package/esm2020/cameras/lib/camera/camera.mjs +0 -74
- package/esm2020/cameras/lib/cube-camera/cube-camera.mjs +0 -130
- package/esm2020/cameras/lib/orthographic-camera/orthographic-camera.mjs +0 -92
- package/esm2020/controls/lib/orbit-controls/orbit-controls.mjs +0 -146
- package/esm2020/loaders/lib/loader/loader.mjs +0 -133
- package/esm2020/materials/lib/mesh-distort-material/mesh-distort-material.mjs +0 -74
- package/esm2020/materials/lib/mesh-reflector-material/mesh-reflector-material.mjs +0 -327
- package/esm2020/materials/lib/mesh-refraction-material/mesh-refraction-material.mjs +0 -157
- package/esm2020/materials/lib/mesh-transmission-material/mesh-transmission-material.mjs +0 -237
- package/esm2020/materials/lib/mesh-wobble-material/mesh-wobble-material.mjs +0 -67
- package/esm2020/misc/lib/bake-shadows/bake-shadows.mjs +0 -25
- package/esm2020/performance/lib/adaptive/adaptive-dpr.mjs +0 -46
- package/esm2020/performance/lib/adaptive/adaptive-events.mjs +0 -36
- package/esm2020/performance/lib/detailed/detailed.mjs +0 -53
- package/esm2020/performance/lib/stats/stats.mjs +0 -79
- package/esm2020/shaders/lib/blur-pass/blur-pass.mjs +0 -61
- package/esm2020/staging/lib/accumulative-shadows/accumulative-shadows.mjs +0 -247
- package/esm2020/staging/lib/accumulative-shadows/randomized-lights.mjs +0 -199
- package/esm2020/staging/lib/camera-shake/camera-shake.mjs +0 -121
- package/esm2020/staging/lib/caustics/caustics.mjs +0 -363
- package/esm2020/staging/lib/center/center.mjs +0 -142
- package/esm2020/staging/lib/cloud/cloud.mjs +0 -159
- package/esm2020/staging/lib/contact-shadows/contact-shadows.mjs +0 -227
- package/esm2020/staging/lib/environment/environment-cube.mjs +0 -40
- package/esm2020/staging/lib/environment/environment-ground.mjs +0 -66
- package/esm2020/staging/lib/environment/environment-inputs.mjs +0 -86
- package/esm2020/staging/lib/environment/environment-map.mjs +0 -38
- package/esm2020/staging/lib/environment/environment-portal.mjs +0 -110
- package/esm2020/staging/lib/float/float.mjs +0 -76
- package/esm2020/staging/lib/sky/sky.mjs +0 -108
- package/esm2020/staging/lib/sparkles/sparkles.mjs +0 -209
- package/esm2020/staging/lib/spot-light/shadow-mesh-input.mjs +0 -50
- package/esm2020/staging/lib/spot-light/spot-light-input.mjs +0 -61
- package/esm2020/staging/lib/spot-light/spot-light-shadow-no-shader.mjs +0 -73
- package/esm2020/staging/lib/spot-light/spot-light-shadow-shader.mjs +0 -125
- package/esm2020/staging/lib/spot-light/spot-light.mjs +0 -116
- package/esm2020/staging/lib/spot-light/volumetric-mesh.mjs +0 -85
- package/esm2020/staging/lib/stars/stars.mjs +0 -139
- package/fesm2015/angular-three-soba-abstractions.mjs +0 -2048
- package/fesm2015/angular-three-soba-controls.mjs +0 -153
- package/fesm2015/angular-three-soba-controls.mjs.map +0 -1
- package/fesm2015/angular-three-soba-loaders.mjs +0 -229
- package/fesm2015/angular-three-soba-loaders.mjs.map +0 -1
- package/fesm2015/angular-three-soba-materials.mjs +0 -851
- package/fesm2015/angular-three-soba-materials.mjs.map +0 -1
- package/fesm2015/angular-three-soba-misc.mjs +0 -148
- package/fesm2015/angular-three-soba-misc.mjs.map +0 -1
- package/fesm2015/angular-three-soba-performance.mjs +0 -210
- package/fesm2015/angular-three-soba-performance.mjs.map +0 -1
- package/fesm2015/angular-three-soba-shaders.mjs +0 -1239
- package/fesm2015/angular-three-soba-shaders.mjs.map +0 -1
- package/fesm2015/angular-three-soba-staging.mjs +0 -3772
- package/fesm2015/angular-three-soba-staging.mjs.map +0 -1
- package/fesm2020/angular-three-soba-abstractions.mjs.map +0 -1
- package/fesm2020/angular-three-soba-cameras.mjs +0 -347
- package/fesm2020/angular-three-soba-cameras.mjs.map +0 -1
- package/fesm2020/angular-three-soba-controls.mjs.map +0 -1
- package/fesm2020/angular-three-soba-shaders.mjs.map +0 -1
- package/fesm2020/angular-three-soba.mjs +0 -6
- package/fesm2020/angular-three-soba.mjs.map +0 -1
- /package/{esm2020 → esm2022}/abstractions/angular-three-soba-abstractions.mjs +0 -0
- /package/{esm2020 → esm2022}/abstractions/index.mjs +0 -0
- /package/{esm2020 → esm2022}/abstractions/lib/gizmo-helper/gizmo-viewcube/constants.mjs +0 -0
- /package/{esm2020 → esm2022}/angular-three-soba.mjs +0 -0
- /package/{esm2020 → esm2022}/cameras/angular-three-soba-cameras.mjs +0 -0
- /package/{esm2020 → esm2022}/cameras/index.mjs +0 -0
- /package/{esm2020 → esm2022}/controls/angular-three-soba-controls.mjs +0 -0
- /package/{esm2020 → esm2022}/controls/index.mjs +0 -0
- /package/{esm2020 → esm2022}/index.mjs +0 -0
- /package/{esm2020 → esm2022}/loaders/angular-three-soba-loaders.mjs +0 -0
- /package/{esm2020 → esm2022}/loaders/index.mjs +0 -0
- /package/{esm2020 → esm2022}/loaders/lib/gltf-loader/gltf-loader.mjs +0 -0
- /package/{esm2020 → esm2022}/loaders/lib/progress/progress.mjs +0 -0
- /package/{esm2020 → esm2022}/loaders/lib/texture-loader/texture-loader.mjs +0 -0
- /package/{esm2020 → esm2022}/materials/angular-three-soba-materials.mjs +0 -0
- /package/{esm2020 → esm2022}/materials/index.mjs +0 -0
- /package/{esm2020 → esm2022}/misc/angular-three-soba-misc.mjs +0 -0
- /package/{esm2020 → esm2022}/misc/index.mjs +0 -0
- /package/{esm2020 → esm2022}/misc/lib/animations/animations.mjs +0 -0
- /package/{esm2020 → esm2022}/misc/lib/depth-buffer/depth-buffer.mjs +0 -0
- /package/{esm2020 → esm2022}/misc/lib/fbo/fbo.mjs +0 -0
- /package/{esm2020 → esm2022}/performance/angular-three-soba-performance.mjs +0 -0
- /package/{esm2020 → esm2022}/performance/index.mjs +0 -0
- /package/{esm2020 → esm2022}/shaders/angular-three-soba-shaders.mjs +0 -0
- /package/{esm2020 → esm2022}/shaders/index.mjs +0 -0
- /package/{esm2020 → esm2022}/shaders/lib/caustics-material/caustics-material.mjs +0 -0
- /package/{esm2020 → esm2022}/shaders/lib/caustics-projection-material/caustics-projection-material.mjs +0 -0
- /package/{esm2020 → esm2022}/shaders/lib/convolution-material/convolution-material.mjs +0 -0
- /package/{esm2020 → esm2022}/shaders/lib/discard-material/discard-material.mjs +0 -0
- /package/{esm2020 → esm2022}/shaders/lib/mesh-distort-material/mesh-distort-material.mjs +0 -0
- /package/{esm2020 → esm2022}/shaders/lib/mesh-reflector-material/mesh-reflector-material.mjs +0 -0
- /package/{esm2020 → esm2022}/shaders/lib/mesh-refraction-material/mesh-refraction-material.mjs +0 -0
- /package/{esm2020 → esm2022}/shaders/lib/mesh-transmission-material/mesh-transmission-material.mjs +0 -0
- /package/{esm2020 → esm2022}/shaders/lib/mesh-wobble-material/mesh-wobble-material.mjs +0 -0
- /package/{esm2020 → esm2022}/shaders/lib/shader-material/shader-material.mjs +0 -0
- /package/{esm2020 → esm2022}/shaders/lib/soft-shadow-material/soft-shadow-material.mjs +0 -0
- /package/{esm2020 → esm2022}/shaders/lib/spot-light-material/spot-light-material.mjs +0 -0
- /package/{esm2020 → esm2022}/shaders/lib/star-field-material/star-field-material.mjs +0 -0
- /package/{esm2020 → esm2022}/staging/angular-three-soba-staging.mjs +0 -0
- /package/{esm2020 → esm2022}/staging/index.mjs +0 -0
- /package/{esm2020 → esm2022}/staging/lib/accumulative-shadows/progressive-light-map.mjs +0 -0
- /package/{esm2020 → esm2022}/staging/lib/environment/assets.mjs +0 -0
- /package/{esm2020 → esm2022}/staging/lib/environment/utils.mjs +0 -0
- /package/{esm2020 → esm2022}/staging/lib/spot-light/common.mjs +0 -0
- /package/{fesm2015 → fesm2022}/angular-three-soba.mjs +0 -0
- /package/{fesm2015 → fesm2022}/angular-three-soba.mjs.map +0 -0
|
@@ -200,7 +200,7 @@ function boundsApiFactory(bounds) {
|
|
|
200
200
|
return api;
|
|
201
201
|
}
|
|
202
202
|
extend({ Group });
|
|
203
|
-
|
|
203
|
+
class NgtsBounds extends NgtRxStore {
|
|
204
204
|
constructor() {
|
|
205
205
|
super(...arguments);
|
|
206
206
|
this.boundsRef = injectNgtRef();
|
|
@@ -243,14 +243,15 @@ export class NgtsBounds extends NgtRxStore {
|
|
|
243
243
|
}
|
|
244
244
|
});
|
|
245
245
|
}
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
NgtsBounds.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.5", type: NgtsBounds, isStandalone: true, selector: "ngts-bounds", inputs: { boundsRef: "boundsRef", damping: "damping", fit: "fit", clip: "clip", observe: "observe", margin: "margin", eps: "eps" }, outputs: { fitted: "fitted" }, providers: [{ provide: NGTS_BOUNDS_API, useFactory: boundsApiFactory, deps: [NgtsBounds] }], usesInheritance: true, ngImport: i0, template: `
|
|
246
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtsBounds, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
247
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0", type: NgtsBounds, isStandalone: true, selector: "ngts-bounds", inputs: { boundsRef: "boundsRef", damping: "damping", fit: "fit", clip: "clip", observe: "observe", margin: "margin", eps: "eps" }, outputs: { fitted: "fitted" }, providers: [{ provide: NGTS_BOUNDS_API, useFactory: boundsApiFactory, deps: [NgtsBounds] }], usesInheritance: true, ngImport: i0, template: `
|
|
249
248
|
<ngt-group ngtCompound [ref]="boundsRef">
|
|
250
249
|
<ng-content />
|
|
251
250
|
</ngt-group>
|
|
252
|
-
`, isInline: true });
|
|
253
|
-
|
|
251
|
+
`, isInline: true }); }
|
|
252
|
+
}
|
|
253
|
+
export { NgtsBounds };
|
|
254
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtsBounds, decorators: [{
|
|
254
255
|
type: Component,
|
|
255
256
|
args: [{
|
|
256
257
|
selector: 'ngts-bounds',
|
|
@@ -280,4 +281,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.5", ngImpor
|
|
|
280
281
|
}], fitted: [{
|
|
281
282
|
type: Output
|
|
282
283
|
}] } });
|
|
283
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm91bmRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXRocmVlLXNvYmEvc3RhZ2luZy9zcmMvbGliL2JvdW5kcy9ib3VuZHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxzQkFBc0IsRUFDdEIsWUFBWSxFQUNaLE1BQU0sRUFDTixjQUFjLEVBQ2QsS0FBSyxFQUVMLE1BQU0sR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsTUFBTSxFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRyxPQUFPLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoRCxPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMvQixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sT0FBTyxDQUFDOztBQStCOUIsTUFBTSxNQUFNLEdBQUcsQ0FBQyxHQUFZLEVBQXFCLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFLLEdBQWtCLENBQUMsTUFBTSxDQUFDO0FBRXhGLFNBQVMsTUFBTSxDQUFDLENBQWdCLEVBQUUsQ0FBZ0IsRUFBRSxHQUFXO0lBQzNELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0YsQ0FBQztBQUVELFNBQVMsSUFBSSxDQUFDLENBQWdCLEVB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LEdBQUcsQ0FBQyxDQUFDO2dCQUNqQixNQUFNLFFBQVEsR0FBRztvQkFDYixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQ2xELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztvQkFDbEQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO29CQUNsRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQ2xELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztvQkFDbEQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO29CQUNsRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQ2xELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztpQkFDckQsQ0FBQztnQkFDRix1REFBdUQ7Z0JBQ3ZELE1BQU0sQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7Z0JBQy9DLEtBQUssTUFBTSxDQUFDLElBQUksUUFBUSxFQUFFO29CQUN0QixDQUFDLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO29CQUMxQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUMxRCxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUMzRDtnQkFDRCxTQUFTLElBQUksQ0FBQyxDQUFDO2dCQUNmLFFBQVEsSUFBSSxDQUFDLENBQUM7Z0JBQ2QsTUFBTSxhQUFhLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxTQUFTLENBQUM7Z0JBQy9ELE1BQU0sWUFBWSxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDO2dCQUM3RCxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7Z0JBQ2xFLElBQUksQ0FBQyxPQUFPLEVBQUU7b0JBQ1YsTUFBTSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztvQkFDL0IsTUFBTSxDQUFDLHNCQUFzQixFQUFFLENBQUM7aUJBQ25DO2FBQ0o7WUFFRCxJQUFJLE9BQU8sRUFBRTtnQkFDVCxNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7YUFDbkM7aUJBQU07Z0JBQ0gsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDekMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNqQyxJQUFJLFFBQVEsRUFBRTtvQkFDVixRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUN4QyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7aUJBQ3JCO2FBQ0o7WUFDRCxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUTtnQkFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUMvRCxVQUFVLEVBQUUsQ0FBQztZQUNiLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7S0FDYSxDQUFDO0lBRW5CLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztJQUNkLE1BQU0sQ0FBQyxJQUFJLENBQ1AsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUNuQixTQUFTLENBQUMsR0FBRyxFQUFFLENBQ1gsYUFBYSxDQUFDO1FBQ1YsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDckIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDcEIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7UUFDeEIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7UUFDdEIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUM7UUFDeEIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDcEIsTUFBTSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUU7S0FDL0IsQ0FBQyxDQUNMLENBQ0osRUFDRCxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFO1FBQ3JCLElBQUksT0FBTyxJQUFJLEtBQUssRUFBRSxLQUFLLENBQUMsRUFBRTtZQUMxQixHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDZCxJQUFJLEdBQUc7Z0JBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ25CLElBQUksSUFBSTtnQkFBRSxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDeEI7SUFDTCxDQUFDLENBQ0osQ0FBQztJQUVGLGtCQUFrQixDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFO1FBQzdCLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUU7WUFDMUIsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDdEMsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNwRSxNQUFNLFFBQVEsR0FBRyxhQUF5QyxDQUFDO1lBRTNELElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDOUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNoRSxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDbEcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUU1QyxJQUFJLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDL0IsTUFBTSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztnQkFDbEMsTUFBTSxDQUFDLHNCQUFzQixFQUFFLENBQUM7YUFDbkM7WUFFRCxJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUNYLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUN2QztpQkFBTTtnQkFDSCxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUMzQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7YUFDckI7WUFFRCxVQUFVLEVBQUUsQ0FBQztZQUNiLElBQUksRUFBRSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO2dCQUFFLE9BQU87WUFDdkcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUM7Z0JBQUUsT0FBTztZQUN0RyxJQUFJLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUM7Z0JBQUUsT0FBTztZQUM5RSxNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7U0FDcEM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sR0FBRyxDQUFDO0FBQ2YsQ0FBQztBQUVELE1BQU0sQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7QUFhbEIsTUFBTSxPQUFPLFVBQVcsU0FBUSxVQUFVO0lBWDFDOztRQVlhLGNBQVMsR0FBRyxZQUFZLEVBQVMsQ0FBQztRQTBCakMsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFrQixDQUFDO1FBRXJDLFVBQUssR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFakMsWUFBTyxHQUFHLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUNqRyxTQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztLQW9CeEY7SUFqREcsSUFBYSxPQUFPLENBQUMsT0FBZTtRQUNoQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBYSxHQUFHLENBQUMsR0FBWTtRQUN6QixJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUN0QixDQUFDO0lBRUQsSUFBYSxJQUFJLENBQUMsSUFBYTtRQUMzQixJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBRUQsSUFBYSxPQUFPLENBQUMsT0FBZ0I7UUFDakMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQWEsTUFBTSxDQUFDLE1BQWM7UUFDOUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUVELElBQWEsR0FBRyxDQUFDLEdBQVc7UUFDeEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDdEIsQ0FBQztJQVNRLFVBQVU7UUFDZixLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUM5RixDQUFDO0lBRUQsUUFBUTtRQUNKLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFTyxvQkFBb0I7UUFDeEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQ3BELElBQUksUUFBUSxFQUFFO2dCQUNWLE1BQU0sUUFBUSxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLENBQUM7Z0JBQ3ZELFFBQXFDLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUMzRSxPQUFPLEdBQUcsRUFBRSxDQUFFLFFBQXFDLENBQUMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO2FBQzlGO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOzt1R0FuRFEsVUFBVTsyRkFBVixVQUFVLDZOQUhSLENBQUMsRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLGlEQUxqRjs7OztLQUlUOzJGQUlRLFVBQVU7a0JBWHRCLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLGFBQWE7b0JBQ3ZCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUU7Ozs7S0FJVDtvQkFDRCxTQUFTLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsQ0FBQztvQkFDM0YsT0FBTyxFQUFFLENBQUMsc0JBQXNCLENBQUM7aUJBQ3BDOzhCQUVZLFNBQVM7c0JBQWpCLEtBQUs7Z0JBRU8sT0FBTztzQkFBbkIsS0FBSztnQkFJTyxHQUFHO3NCQUFmLEtBQUs7Z0JBSU8sSUFBSTtzQkFBaEIsS0FBSztnQkFJTyxPQUFPO3NCQUFuQixLQUFLO2dCQUlPLE1BQU07c0JBQWxCLEtBQUs7Z0JBSU8sR0FBRztzQkFBZixLQUFLO2dCQUlJLE1BQU07c0JBQWYsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIGluamVjdCxcbiAgICBJbmplY3Rpb25Ub2tlbixcbiAgICBJbnB1dCxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGV4dGVuZCwgaW5qZWN0QmVmb3JlUmVuZGVyLCBpbmplY3ROZ3RSZWYsIGlzLCBOZ3RSeFN0b3JlLCBOZ3RTdG9yZSB9IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgKiBhcyBUSFJFRSBmcm9tICd0aHJlZSc7XG5pbXBvcnQgeyBHcm91cCB9IGZyb20gJ3RocmVlJztcblxuZXhwb3J0IGludGVyZmFjZSBOZ3RzQm91bmRzU2l6ZSB7XG4gICAgYm94OiBUSFJFRS5Cb3gzO1xuICAgIHNpemU6IFRIUkVFLlZlY3RvcjM7XG4gICAgY2VudGVyOiBUSFJFRS5WZWN0b3IzO1xuICAgIGRpc3RhbmNlOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0c0JvdW5kc0FwaSB7XG4gICAgZ2V0U2l6ZTogKCkgPT4gTmd0c0JvdW5kc1NpemU7XG4gICAgcmVmcmVzaDogKG9iamVjdD86IFRIUkVFLk9iamVjdDNEIHwgVEhSRUUuQm94MykgPT4gTmd0c0JvdW5kc0FwaTtcbiAgICBjbGlwOiAoKSA9PiBOZ3RzQm91bmRzQXBpO1xuICAgIGZpdDogKCkgPT4gTmd0c0JvdW5kc0FwaTtcbiAgICB0bzogKHtcbiAgICAgICAgcG9zaXRpb24sXG4gICAgICAgIHRhcmdldCxcbiAgICB9OiB7XG4gICAgICAgIHBvc2l0aW9uOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl07XG4gICAgICAgIHRhcmdldD86IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcbiAgICB9KSA9PiBOZ3RzQm91bmRzQXBpO1xufVxuXG50eXBlIENvbnRyb2xzUHJvdG8gPSB7XG4gICAgdXBkYXRlKCk6IHZvaWQ7XG4gICAgdGFyZ2V0OiBUSFJFRS5WZWN0b3IzO1xuICAgIG1heERpc3RhbmNlOiBudW1iZXI7XG4gICAgYWRkRXZlbnRMaXN0ZW5lcjogKGV2ZW50OiBzdHJpbmcsIGNhbGxiYWNrOiAoZXZlbnQ6IGFueSkgPT4gdm9pZCkgPT4gdm9pZDtcbiAgICByZW1vdmVFdmVudExpc3RlbmVyOiAoZXZlbnQ6IHN0cmluZywgY2FsbGJhY2s6IChldmVudDogYW55KSA9PiB2b2lkKSA9PiB2b2lkO1xufTtcblxuY29uc3QgaXNCb3gzID0gKGRlZjogdW5rbm93bik6IGRlZiBpcyBUSFJFRS5Cb3gzID0+ICEhZGVmICYmIChkZWYgYXMgVEhSRUUuQm94MykuaXNCb3gzO1xuXG5mdW5jdGlvbiBlcXVhbHMoYTogVEhSRUUuVmVjdG9yMywgYjogVEhSRUUuVmVjdG9yMywgZXBzOiBudW1iZXIpIHtcbiAgICByZXR1cm4gTWF0aC5hYnMoYS54IC0gYi54KSA8IGVwcyAmJiBNYXRoLmFicyhhLnkgLSBiLnkpIDwgZXBzICYmIE1hdGguYWJzKGEueiAtIGIueikgPCBlcHM7XG59XG5cbmZ1bmN0aW9uIGRhbXAodjogVEhSRUUuVmVjdG9yMywgdDogVEhSRUUuVmVjdG9yMywgbGFtYmRhOiBudW1iZXIsIGRlbHRhOiBudW1iZXIpIHtcbiAgICB2LnggPSBUSFJFRS5NYXRoVXRpbHMuZGFtcCh2LngsIHQueCwgbGFtYmRhLCBkZWx0YSk7XG4gICAgdi55ID0gVEhSRUUuTWF0aFV0aWxzLmRhbXAodi55LCB0LnksIGxhbWJkYSwgZGVsdGEpO1xuICAgIHYueiA9IFRIUkVFLk1hdGhVdGlscy5kYW1wKHYueiwgdC56LCBsYW1iZGEsIGRlbHRhKTtcbn1cblxuZXhwb3J0IGNvbnN0IE5HVFNfQk9VTkRTX0FQSSA9IG5ldyBJbmplY3Rpb25Ub2tlbjxOZ3RzQm91bmRzQXBpPignTmd0c0JvdW5kcyBBUEknKTtcblxuZnVuY3Rpb24gYm91bmRzQXBpRmFjdG9yeShib3VuZHM6IE5ndHNCb3VuZHMpIHtcbiAgICBjb25zdCBzdG9yZSA9IGluamVjdChOZ3RTdG9yZSk7XG4gICAgY29uc3QgYm94ID0gbmV3IFRIUkVFLkJveDMoKTtcblxuICAgIGZ1bmN0aW9uIGdldFNpemUoKSB7XG4gICAgICAgIGNvbnN0IGNhbWVyYSA9IHN0b3JlLmdldCgnY2FtZXJhJyk7XG4gICAgICAgIGNvbnN0IG1hcmdpbiA9IGJvdW5kcy5nZXQoJ21hcmdpbicpO1xuXG4gICAgICAgIGNvbnN0IHNpemUgPSBib3guZ2V0U2l6ZShuZXcgVEhSRUUuVmVjdG9yMygpKTtcbiAgICAgICAgY29uc3QgY2VudGVyID0gYm94LmdldENlbnRlcihuZXcgVEhSRUUuVmVjdG9yMygpKTtcbiAgICAgICAgY29uc3QgbWF4U2l6ZSA9IE1hdGgubWF4KHNpemUueCwgc2l6ZS55LCBzaXplLnopO1xuICAgICAgICBjb25zdCBmaXRIZWlnaHREaXN0YW5jZSA9IGlzLm9ydGhvZ3JhcGhpY0NhbWVyYShjYW1lcmEpXG4gICAgICAgICAgICA/IG1heFNpemUgKiA0XG4gICAgICAgICAgICA6IG1heFNpemUgLyAoMiAqIE1hdGguYXRhbigoTWF0aC5QSSAqIGNhbWVyYS5mb3YpIC8gMzYwKSk7XG4gICAgICAgIGNvbnN0IGZpdFdpZHRoRGlzdGFuY2UgPSBpcy5vcnRob2dyYXBoaWNDYW1lcmEoY2FtZXJhKSA/IG1heFNpemUgKiA0IDogZml0SGVpZ2h0RGlzdGFuY2UgLyBjYW1lcmEuYXNwZWN0O1xuICAgICAgICBjb25zdCBkaXN0YW5jZSA9IG1hcmdpbiAqIE1hdGgubWF4KGZpdEhlaWdodERpc3RhbmNlLCBmaXRXaWR0aERpc3RhbmNlKTtcbiAgICAgICAgcmV0dXJuIHsgYm94LCBzaXplLCBjZW50ZXIsIGRpc3RhbmNlIH07XG4gICAgfVxuXG4gICAgY29uc3QgYXBpID0ge1xuICAgICAgICBnZXRTaXplLFxuICAgICAgICByZWZyZXNoKG9iamVjdD86IFRIUkVFLk9iamVjdDNEIHwgVEhSRUUuQm94Mykge1xuICAgICAgICAgICAgY29uc3QgeyBjYW1lcmEsIGNvbnRyb2xzOiBzdG9yZUNvbnRyb2xzIH0gPSBzdG9yZS5nZXQoKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRyb2xzID0gc3RvcmVDb250cm9scyBhcyB1bmtub3duIGFzIENvbnRyb2xzUHJvdG87XG5cbiAgICAgICAgICAgIGlmIChpc0JveDMob2JqZWN0KSkgYm94LmNvcHkob2JqZWN0KTtcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IG9iamVjdCB8fCBib3VuZHMuYm91bmRzUmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXQudXBkYXRlV29ybGRNYXRyaXgodHJ1ZSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGJveC5zZXRGcm9tT2JqZWN0KHRhcmdldCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGJveC5pc0VtcHR5KCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtYXggPSBjYW1lcmEucG9zaXRpb24ubGVuZ3RoKCkgfHwgMTA7XG4gICAgICAgICAgICAgICAgYm94LnNldEZyb21DZW50ZXJBbmRTaXplKG5ldyBUSFJFRS5WZWN0b3IzKCksIG5ldyBUSFJFRS5WZWN0b3IzKG1heCwgbWF4LCBtYXgpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNvbnRyb2xzPy5jb25zdHJ1Y3Rvci5uYW1lID09PSAnT3J0aG9ncmFwaGljVHJhY2tiYWxsQ29udHJvbHMnKSB7XG4gICAgICAgICAgICAgICAgLy8gcHV0IGNhbWVyYSBvbiBhIHNwaGVyZSBhbG9uZyB3aGljaCBpdCB3b3VsZCBtb3ZlXG4gICAgICAgICAgICAgICAgY29uc3QgeyBkaXN0YW5jZSB9ID0gZ2V0U2l6ZSgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IGNhbWVyYS5wb3NpdGlvbi5jbG9uZSgpLnN1Yihjb250cm9scy50YXJnZXQpLm5vcm1hbGl6ZSgpLm11bHRpcGx5U2NhbGFyKGRpc3RhbmNlKTtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdQb3MgPSBjb250cm9scy50YXJnZXQuY2xvbmUoKS5hZGQoZGlyZWN0aW9uKTtcbiAgICAgICAgICAgICAgICBjYW1lcmEucG9zaXRpb24uY29weShuZXdQb3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG4gICAgICAgIGNsaXAoKSB7XG4gICAgICAgICAgICBjb25zdCB7IGRpc3RhbmNlIH0gPSBnZXRTaXplKCk7XG4gICAgICAgICAgICBjb25zdCB7IGNhbWVyYSwgY29udHJvbHM6IHN0b3JlQ29udHJvbHMsIGludmFsaWRhdGUgfSA9IHN0b3JlLmdldCgpO1xuICAgICAgICAgICAgY29uc3QgY29udHJvbHMgPSBzdG9yZUNvbnRyb2xzIGFzIHVua25vd24gYXMgQ29udHJvbHNQcm90bztcbiAgICAgICAgICAgIGlmIChjb250cm9scykgY29udHJvbHMubWF4RGlzdGFuY2UgPSBkaXN0YW5jZSAqIDEwO1xuICAgICAgICAgICAgY2FtZXJhLm5lYXIgPSBkaXN0YW5jZSAvIDEwMDtcbiAgICAgICAgICAgIGNhbWVyYS5mYXIgPSBkaXN0YW5jZSAqIDEwMDtcbiAgICAgICAgICAgIGNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCk7XG4gICAgICAgICAgICBpZiAoY29udHJvbHMpIGNvbnRyb2xzLnVwZGF0ZSgpO1xuICAgICAgICAgICAgaW52YWxpZGF0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG4gICAgICAgIHRvKHsgcG9zaXRpb24sIHRhcmdldCB9OiB7IHBvc2l0aW9uOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl07IHRhcmdldD86IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSB9KSB7XG4gICAgICAgICAgICBjb25zdCB7IGNhbWVyYSB9ID0gc3RvcmUuZ2V0KCk7XG4gICAgICAgICAgICBjb25zdCB7IGRhbXBpbmcgfSA9IGJvdW5kcy5nZXQoKTtcblxuICAgICAgICAgICAgYm91bmRzLmN1cnJlbnQuY2FtZXJhLmNvcHkoY2FtZXJhLnBvc2l0aW9uKTtcbiAgICAgICAgICAgIGNvbnN0IHsgY2VudGVyIH0gPSBnZXRTaXplKCk7XG4gICAgICAgICAgICBib3VuZHMuZ29hbC5jYW1lcmEuc2V0KC4uLnBvc2l0aW9uKTtcblxuICAgICAgICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICAgICAgICAgIGJvdW5kcy5nb2FsLmZvY3VzLnNldCguLi50YXJnZXQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBib3VuZHMuZ29hbC5mb2N1cy5jb3B5KGNlbnRlcik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChkYW1waW5nKSB7XG4gICAgICAgICAgICAgICAgYm91bmRzLmN1cnJlbnQuYW5pbWF0aW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FtZXJhLnBvc2l0aW9uLnNldCguLi5wb3NpdGlvbik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuICAgICAgICBmaXQoKSB7XG4gICAgICAgICAgICBjb25zdCB7IGNhbWVyYSwgY29udHJvbHM6IHN0b3JlQ29udHJvbHMsIGludmFsaWRhdGUgfSA9IHN0b3JlLmdldCgpO1xuICAgICAgICAgICAgY29uc3QgY29udHJvbHMgPSBzdG9yZUNvbnRyb2xzIGFzIHVua25vd24gYXMgQ29udHJvbHNQcm90bztcblxuICAgICAgICAgICAgY29uc3QgeyBkYW1waW5nLCBtYXJnaW4gfSA9IGJvdW5kcy5nZXQoKTtcblxuICAgICAgICAgICAgYm91bmRzLmN1cnJlbnQuY2FtZXJhLmNvcHkoY2FtZXJhLnBvc2l0aW9uKTtcbiAgICAgICAgICAgIGlmIChjb250cm9scykgYm91bmRzLmN1cnJlbnQuZm9jdXMuY29weShjb250cm9scy50YXJnZXQpO1xuXG4gICAgICAgICAgICBjb25zdCB7IGNlbnRlciwgZGlzdGFuY2UgfSA9IGdldFNpemUoKTtcbiAgICAgICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IGNlbnRlci5jbG9uZSgpLnN1YihjYW1lcmEucG9zaXRpb24pLm5vcm1hbGl6ZSgpLm11bHRpcGx5U2NhbGFyKGRpc3RhbmNlKTtcblxuICAgICAgICAgICAgYm91bmRzLmdvYWwuY2FtZXJhLmNvcHkoY2VudGVyKS5zdWIoZGlyZWN0aW9uKTtcbiAgICAgICAgICAgIGJvdW5kcy5nb2FsLmZvY3VzLmNvcHkoY2VudGVyKTtcblxuICAgICAgICAgICAgaWYgKGlzLm9ydGhvZ3JhcGhpY0NhbWVyYShjYW1lcmEpKSB7XG4gICAgICAgICAgICAgICAgYm91bmRzLmN1cnJlbnQuem9vbSA9IGNhbWVyYS56b29tO1xuXG4gICAgICAgICAgICAgICAgbGV0IG1heEhlaWdodCA9IDAsXG4gICAgICAgICAgICAgICAgICAgIG1heFdpZHRoID0gMDtcbiAgICAgICAgICAgICAgICBjb25zdCB2ZXJ0aWNlcyA9IFtcbiAgICAgICAgICAgICAgICAgICAgbmV3IFRIUkVFLlZlY3RvcjMoYm94Lm1pbi54LCBib3gubWluLnksIGJveC5taW4ueiksXG4gICAgICAgICAgICAgICAgICAgIG5ldyBUSFJFRS5WZWN0b3IzKGJveC5taW4ueCwgYm94Lm1heC55LCBib3gubWluLnopLFxuICAgICAgICAgICAgICAgICAgICBuZXcgVEhSRUUuVmVjdG9yMyhib3gubWluLngsIGJveC5taW4ueSwgYm94Lm1heC56KSxcbiAgICAgICAgICAgICAgICAgICAgbmV3IFRIUkVFLlZlY3RvcjMoYm94Lm1pbi54LCBib3gubWF4LnksIGJveC5tYXgueiksXG4gICAgICAgICAgICAgICAgICAgIG5ldyBUSFJFRS5WZWN0b3IzKGJveC5tYXgueCwgYm94Lm1heC55LCBib3gubWF4LnopLFxuICAgICAgICAgICAgICAgICAgICBuZXcgVEhSRUUuVmVjdG9yMyhib3gubWF4LngsIGJveC5tYXgueSwgYm94Lm1pbi56KSxcbiAgICAgICAgICAgICAgICAgICAgbmV3IFRIUkVFLlZlY3RvcjMoYm94Lm1heC54LCBib3gubWluLnksIGJveC5tYXgueiksXG4gICAgICAgICAgICAgICAgICAgIG5ldyBUSFJFRS5WZWN0b3IzKGJveC5tYXgueCwgYm94Lm1pbi55LCBib3gubWluLnopLFxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgLy8gVHJhbnNmb3JtIHRoZSBjZW50ZXIgYW5kIGVhY2ggY29ybmVyIHRvIGNhbWVyYSBzcGFjZVxuICAgICAgICAgICAgICAgIGNlbnRlci5hcHBseU1hdHJpeDQoY2FtZXJhLm1hdHJpeFdvcmxkSW52ZXJzZSk7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCB2IG9mIHZlcnRpY2VzKSB7XG4gICAgICAgICAgICAgICAgICAgIHYuYXBwbHlNYXRyaXg0KGNhbWVyYS5tYXRyaXhXb3JsZEludmVyc2UpO1xuICAgICAgICAgICAgICAgICAgICBtYXhIZWlnaHQgPSBNYXRoLm1heChtYXhIZWlnaHQsIE1hdGguYWJzKHYueSAtIGNlbnRlci55KSk7XG4gICAgICAgICAgICAgICAgICAgIG1heFdpZHRoID0gTWF0aC5tYXgobWF4V2lkdGgsIE1hdGguYWJzKHYueCAtIGNlbnRlci54KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG1heEhlaWdodCAqPSAyO1xuICAgICAgICAgICAgICAgIG1heFdpZHRoICo9IDI7XG4gICAgICAgICAgICAgICAgY29uc3Qgem9vbUZvckhlaWdodCA9IChjYW1lcmEudG9wIC0gY2FtZXJhLmJvdHRvbSkgLyBtYXhIZWlnaHQ7XG4gICAgICAgICAgICAgICAgY29uc3Qgem9vbUZvcldpZHRoID0gKGNhbWVyYS5yaWdodCAtIGNhbWVyYS5sZWZ0KSAvIG1heFdpZHRoO1xuICAgICAgICAgICAgICAgIGJvdW5kcy5nb2FsLnpvb20gPSBNYXRoLm1pbih6b29tRm9ySGVpZ2h0LCB6b29tRm9yV2lkdGgpIC8gbWFyZ2luO1xuICAgICAgICAgICAgICAgIGlmICghZGFtcGluZykge1xuICAgICAgICAgICAgICAgICAgICBjYW1lcmEuem9vbSA9IGJvdW5kcy5nb2FsLnpvb207XG4gICAgICAgICAgICAgICAgICAgIGNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZGFtcGluZykge1xuICAgICAgICAgICAgICAgIGJvdW5kcy5jdXJyZW50LmFuaW1hdGluZyA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbWVyYS5wb3NpdGlvbi5jb3B5KGJvdW5kcy5nb2FsLmNhbWVyYSk7XG4gICAgICAgICAgICAgICAgY2FtZXJhLmxvb2tBdChib3VuZHMuZ29hbC5mb2N1cyk7XG4gICAgICAgICAgICAgICAgaWYgKGNvbnRyb2xzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2xzLnRhcmdldC5jb3B5KGJvdW5kcy5nb2FsLmZvY3VzKTtcbiAgICAgICAgICAgICAgICAgICAgY29udHJvbHMudXBkYXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGJvdW5kcy5maXR0ZWQub2JzZXJ2ZWQpIGJvdW5kcy5maXR0ZWQuZW1pdCh0aGlzLmdldFNpemUoKSk7XG4gICAgICAgICAgICBpbnZhbGlkYXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcbiAgICB9IGFzIE5ndHNCb3VuZHNBcGk7XG5cbiAgICBsZXQgY291bnQgPSAwO1xuICAgIGJvdW5kcy5ob2xkKFxuICAgICAgICBib3VuZHMuYm91bmRzUmVmLiQucGlwZShcbiAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PlxuICAgICAgICAgICAgICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICAgICAgICAgICAgICBib3VuZHMuc2VsZWN0KCdjbGlwJyksXG4gICAgICAgICAgICAgICAgICAgIGJvdW5kcy5zZWxlY3QoJ2ZpdCcpLFxuICAgICAgICAgICAgICAgICAgICBib3VuZHMuc2VsZWN0KCdvYnNlcnZlJyksXG4gICAgICAgICAgICAgICAgICAgIHN0b3JlLnNlbGVjdCgnY2FtZXJhJyksXG4gICAgICAgICAgICAgICAgICAgIHN0b3JlLnNlbGVjdCgnY29udHJvbHMnKSxcbiAgICAgICAgICAgICAgICAgICAgc3RvcmUuc2VsZWN0KCdzaXplJyksXG4gICAgICAgICAgICAgICAgICAgIGJvdW5kcy5ib3VuZHNSZWYuY2hpbGRyZW4kKCksXG4gICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgIClcbiAgICAgICAgKSxcbiAgICAgICAgKFtjbGlwLCBmaXQsIG9ic2VydmVdKSA9PiB7XG4gICAgICAgICAgICBpZiAob2JzZXJ2ZSB8fCBjb3VudCsrID09PSAwKSB7XG4gICAgICAgICAgICAgICAgYXBpLnJlZnJlc2goKTtcbiAgICAgICAgICAgICAgICBpZiAoZml0KSBhcGkuZml0KCk7XG4gICAgICAgICAgICAgICAgaWYgKGNsaXApIGFwaS5jbGlwKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgaW5qZWN0QmVmb3JlUmVuZGVyKCh7IGRlbHRhIH0pID0+IHtcbiAgICAgICAgaWYgKGJvdW5kcy5jdXJyZW50LmFuaW1hdGluZykge1xuICAgICAgICAgICAgY29uc3QgeyBkYW1waW5nLCBlcHMgfSA9IGJvdW5kcy5nZXQoKTtcbiAgICAgICAgICAgIGNvbnN0IHsgY2FtZXJhLCBjb250cm9sczogc3RvcmVDb250cm9scywgaW52YWxpZGF0ZSB9ID0gc3RvcmUuZ2V0KCk7XG4gICAgICAgICAgICBjb25zdCBjb250cm9scyA9IHN0b3JlQ29udHJvbHMgYXMgdW5rbm93biBhcyBDb250cm9sc1Byb3RvO1xuXG4gICAgICAgICAgICBkYW1wKGJvdW5kcy5jdXJyZW50LmZvY3VzLCBib3VuZHMuZ29hbC5mb2N1cywgZGFtcGluZywgZGVsdGEpO1xuICAgICAgICAgICAgZGFtcChib3VuZHMuY3VycmVudC5jYW1lcmEsIGJvdW5kcy5nb2FsLmNhbWVyYSwgZGFtcGluZywgZGVsdGEpO1xuICAgICAgICAgICAgYm91bmRzLmN1cnJlbnQuem9vbSA9IFRIUkVFLk1hdGhVdGlscy5kYW1wKGJvdW5kcy5jdXJyZW50Lnpvb20sIGJvdW5kcy5nb2FsLnpvb20sIGRhbXBpbmcsIGRlbHRhKTtcbiAgICAgICAgICAgIGNhbWVyYS5wb3NpdGlvbi5jb3B5KGJvdW5kcy5jdXJyZW50LmNhbWVyYSk7XG5cbiAgICAgICAgICAgIGlmIChpcy5vcnRob2dyYXBoaWNDYW1lcmEoY2FtZXJhKSkge1xuICAgICAgICAgICAgICAgIGNhbWVyYS56b29tID0gYm91bmRzLmN1cnJlbnQuem9vbTtcbiAgICAgICAgICAgICAgICBjYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIWNvbnRyb2xzKSB7XG4gICAgICAgICAgICAgICAgY2FtZXJhLmxvb2tBdChib3VuZHMuY3VycmVudC5mb2N1cyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnRyb2xzLnRhcmdldC5jb3B5KGJvdW5kcy5jdXJyZW50LmZvY3VzKTtcbiAgICAgICAgICAgICAgICBjb250cm9scy51cGRhdGUoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaW52YWxpZGF0ZSgpO1xuICAgICAgICAgICAgaWYgKGlzLm9ydGhvZ3JhcGhpY0NhbWVyYShjYW1lcmEpICYmICEoTWF0aC5hYnMoYm91bmRzLmN1cnJlbnQuem9vbSAtIGJvdW5kcy5nb2FsLnpvb20pIDwgZXBzKSkgcmV0dXJuO1xuICAgICAgICAgICAgaWYgKCFpcy5vcnRob2dyYXBoaWNDYW1lcmEoY2FtZXJhKSAmJiAhZXF1YWxzKGJvdW5kcy5jdXJyZW50LmNhbWVyYSwgYm91bmRzLmdvYWwuY2FtZXJhLCBlcHMpKSByZXR1cm47XG4gICAgICAgICAgICBpZiAoY29udHJvbHMgJiYgIWVxdWFscyhib3VuZHMuY3VycmVudC5mb2N1cywgYm91bmRzLmdvYWwuZm9jdXMsIGVwcykpIHJldHVybjtcbiAgICAgICAgICAgIGJvdW5kcy5jdXJyZW50LmFuaW1hdGluZyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gYXBpO1xufVxuXG5leHRlbmQoeyBHcm91cCB9KTtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduZ3RzLWJvdW5kcycsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8bmd0LWdyb3VwIG5ndENvbXBvdW5kIFtyZWZdPVwiYm91bmRzUmVmXCI+XG4gICAgICAgICAgICA8bmctY29udGVudCAvPlxuICAgICAgICA8L25ndC1ncm91cD5cbiAgICBgLFxuICAgIHByb3ZpZGVyczogW3sgcHJvdmlkZTogTkdUU19CT1VORFNfQVBJLCB1c2VGYWN0b3J5OiBib3VuZHNBcGlGYWN0b3J5LCBkZXBzOiBbTmd0c0JvdW5kc10gfV0sXG4gICAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzQm91bmRzIGV4dGVuZHMgTmd0UnhTdG9yZSBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgQElucHV0KCkgYm91bmRzUmVmID0gaW5qZWN0Tmd0UmVmPEdyb3VwPigpO1xuXG4gICAgQElucHV0KCkgc2V0IGRhbXBpbmcoZGFtcGluZzogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgZGFtcGluZyB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgZml0KGZpdDogYm9vbGVhbikge1xuICAgICAgICB0aGlzLnNldCh7IGZpdCB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgY2xpcChjbGlwOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgY2xpcCB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgb2JzZXJ2ZShvYnNlcnZlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgb2JzZXJ2ZSB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgbWFyZ2luKG1hcmdpbjogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgbWFyZ2luIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBlcHMoZXBzOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBlcHMgfSk7XG4gICAgfVxuXG4gICAgQE91dHB1dCgpIGZpdHRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Tmd0c0JvdW5kc1NpemU+KCk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IHN0b3JlID0gaW5qZWN0KE5ndFN0b3JlKTtcblxuICAgIHJlYWRvbmx5IGN1cnJlbnQgPSB7IGFuaW1hdGluZzogZmFsc2UsIGZvY3VzOiBuZXcgVEhSRUUuVmVjdG9yMygpLCBjYW1lcmE6IG5ldyBUSFJFRS5WZWN0b3IzKCksIHpvb206IDEgfTtcbiAgICByZWFkb25seSBnb2FsID0geyBmb2N1czogbmV3IFRIUkVFLlZlY3RvcjMoKSwgY2FtZXJhOiBuZXcgVEhSRUUuVmVjdG9yMygpLCB6b29tOiAxIH07XG5cbiAgICBvdmVycmlkZSBpbml0aWFsaXplKCkge1xuICAgICAgICBzdXBlci5pbml0aWFsaXplKCk7XG4gICAgICAgIHRoaXMuc2V0KHsgZGFtcGluZzogNiwgZml0OiBmYWxzZSwgY2xpcDogZmFsc2UsIG9ic2VydmU6IGZhbHNlLCBtYXJnaW46IDEuMiwgZXBzOiAwLjAxIH0pO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnByZXZlbnREcmFnSGlqYWNraW5nKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwcmV2ZW50RHJhZ0hpamFja2luZygpIHtcbiAgICAgICAgdGhpcy5lZmZlY3QodGhpcy5zdG9yZS5zZWxlY3QoJ2NvbnRyb2xzJyksIChjb250cm9scykgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbnRyb2xzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2FsbGJhY2sgPSAoKSA9PiAodGhpcy5jdXJyZW50LmFuaW1hdGluZyA9IGZhbHNlKTtcbiAgICAgICAgICAgICAgICAoY29udHJvbHMgYXMgdW5rbm93biBhcyBDb250cm9sc1Byb3RvKS5hZGRFdmVudExpc3RlbmVyKCdzdGFydCcsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gKCkgPT4gKGNvbnRyb2xzIGFzIHVua25vd24gYXMgQ29udHJvbHNQcm90bykucmVtb3ZlRXZlbnRMaXN0ZW5lcignc3RhcnQnLCBjYWxsYmFjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==
|
|
284
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm91bmRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXRocmVlLXNvYmEvc3RhZ2luZy9zcmMvbGliL2JvdW5kcy9ib3VuZHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxzQkFBc0IsRUFDdEIsWUFBWSxFQUNaLE1BQU0sRUFDTixjQUFjLEVBQ2QsS0FBSyxFQUVMLE1BQU0sR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsTUFBTSxFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRyxPQUFPLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoRCxPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMvQixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sT0FBTyxDQUFDOztBQStCOUIsTUFBTSxNQUFNLEdBQUcsQ0FBQyxHQUFZLEVBQXFCLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFLLEdBQWtCLENBQUMsTUFBTSxDQUFDO0FBRXhGLFNBQVMsTUFBTSxDQUFDLENBQWdCLEVBQUUsQ0FBZ0IsRUFBRSxHQUFXO0lBQzNELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0YsQ0FBQztBQUVELFNBQVMsSUFBSSxDQUFDLENBQWdCLEVB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LEdBQUcsQ0FBQyxDQUFDO2dCQUNqQixNQUFNLFFBQVEsR0FBRztvQkFDYixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQ2xELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztvQkFDbEQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO29CQUNsRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQ2xELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztvQkFDbEQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO29CQUNsRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQ2xELElB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ZUFBZSxFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLGlEQUxqRjs7OztLQUlUOztTQUlRLFVBQVU7MkZBQVYsVUFBVTtrQkFYdEIsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsYUFBYTtvQkFDdkIsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRTs7OztLQUlUO29CQUNELFNBQVMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxDQUFDO29CQUMzRixPQUFPLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztpQkFDcEM7OEJBRVksU0FBUztzQkFBakIsS0FBSztnQkFFTyxPQUFPO3NCQUFuQixLQUFLO2dCQUlPLEdBQUc7c0JBQWYsS0FBSztnQkFJTyxJQUFJO3NCQUFoQixLQUFLO2dCQUlPLE9BQU87c0JBQW5CLEtBQUs7Z0JBSU8sTUFBTTtzQkFBbEIsS0FBSztnQkFJTyxHQUFHO3NCQUFmLEtBQUs7Z0JBSUksTUFBTTtzQkFBZixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgaW5qZWN0LFxuICAgIEluamVjdGlvblRva2VuLFxuICAgIElucHV0LFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZXh0ZW5kLCBpbmplY3RCZWZvcmVSZW5kZXIsIGluamVjdE5ndFJlZiwgaXMsIE5ndFJ4U3RvcmUsIE5ndFN0b3JlIH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCAqIGFzIFRIUkVFIGZyb20gJ3RocmVlJztcbmltcG9ydCB7IEdyb3VwIH0gZnJvbSAndGhyZWUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5ndHNCb3VuZHNTaXplIHtcbiAgICBib3g6IFRIUkVFLkJveDM7XG4gICAgc2l6ZTogVEhSRUUuVmVjdG9yMztcbiAgICBjZW50ZXI6IFRIUkVFLlZlY3RvcjM7XG4gICAgZGlzdGFuY2U6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOZ3RzQm91bmRzQXBpIHtcbiAgICBnZXRTaXplOiAoKSA9PiBOZ3RzQm91bmRzU2l6ZTtcbiAgICByZWZyZXNoOiAob2JqZWN0PzogVEhSRUUuT2JqZWN0M0QgfCBUSFJFRS5Cb3gzKSA9PiBOZ3RzQm91bmRzQXBpO1xuICAgIGNsaXA6ICgpID0+IE5ndHNCb3VuZHNBcGk7XG4gICAgZml0OiAoKSA9PiBOZ3RzQm91bmRzQXBpO1xuICAgIHRvOiAoe1xuICAgICAgICBwb3NpdGlvbixcbiAgICAgICAgdGFyZ2V0LFxuICAgIH06IHtcbiAgICAgICAgcG9zaXRpb246IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcbiAgICAgICAgdGFyZ2V0PzogW251bWJlciwgbnVtYmVyLCBudW1iZXJdO1xuICAgIH0pID0+IE5ndHNCb3VuZHNBcGk7XG59XG5cbnR5cGUgQ29udHJvbHNQcm90byA9IHtcbiAgICB1cGRhdGUoKTogdm9pZDtcbiAgICB0YXJnZXQ6IFRIUkVFLlZlY3RvcjM7XG4gICAgbWF4RGlzdGFuY2U6IG51bWJlcjtcbiAgICBhZGRFdmVudExpc3RlbmVyOiAoZXZlbnQ6IHN0cmluZywgY2FsbGJhY2s6IChldmVudDogYW55KSA9PiB2b2lkKSA9PiB2b2lkO1xuICAgIHJlbW92ZUV2ZW50TGlzdGVuZXI6IChldmVudDogc3RyaW5nLCBjYWxsYmFjazogKGV2ZW50OiBhbnkpID0+IHZvaWQpID0+IHZvaWQ7XG59O1xuXG5jb25zdCBpc0JveDMgPSAoZGVmOiB1bmtub3duKTogZGVmIGlzIFRIUkVFLkJveDMgPT4gISFkZWYgJiYgKGRlZiBhcyBUSFJFRS5Cb3gzKS5pc0JveDM7XG5cbmZ1bmN0aW9uIGVxdWFscyhhOiBUSFJFRS5WZWN0b3IzLCBiOiBUSFJFRS5WZWN0b3IzLCBlcHM6IG51bWJlcikge1xuICAgIHJldHVybiBNYXRoLmFicyhhLnggLSBiLngpIDwgZXBzICYmIE1hdGguYWJzKGEueSAtIGIueSkgPCBlcHMgJiYgTWF0aC5hYnMoYS56IC0gYi56KSA8IGVwcztcbn1cblxuZnVuY3Rpb24gZGFtcCh2OiBUSFJFRS5WZWN0b3IzLCB0OiBUSFJFRS5WZWN0b3IzLCBsYW1iZGE6IG51bWJlciwgZGVsdGE6IG51bWJlcikge1xuICAgIHYueCA9IFRIUkVFLk1hdGhVdGlscy5kYW1wKHYueCwgdC54LCBsYW1iZGEsIGRlbHRhKTtcbiAgICB2LnkgPSBUSFJFRS5NYXRoVXRpbHMuZGFtcCh2LnksIHQueSwgbGFtYmRhLCBkZWx0YSk7XG4gICAgdi56ID0gVEhSRUUuTWF0aFV0aWxzLmRhbXAodi56LCB0LnosIGxhbWJkYSwgZGVsdGEpO1xufVxuXG5leHBvcnQgY29uc3QgTkdUU19CT1VORFNfQVBJID0gbmV3IEluamVjdGlvblRva2VuPE5ndHNCb3VuZHNBcGk+KCdOZ3RzQm91bmRzIEFQSScpO1xuXG5mdW5jdGlvbiBib3VuZHNBcGlGYWN0b3J5KGJvdW5kczogTmd0c0JvdW5kcykge1xuICAgIGNvbnN0IHN0b3JlID0gaW5qZWN0KE5ndFN0b3JlKTtcbiAgICBjb25zdCBib3ggPSBuZXcgVEhSRUUuQm94MygpO1xuXG4gICAgZnVuY3Rpb24gZ2V0U2l6ZSgpIHtcbiAgICAgICAgY29uc3QgY2FtZXJhID0gc3RvcmUuZ2V0KCdjYW1lcmEnKTtcbiAgICAgICAgY29uc3QgbWFyZ2luID0gYm91bmRzLmdldCgnbWFyZ2luJyk7XG5cbiAgICAgICAgY29uc3Qgc2l6ZSA9IGJveC5nZXRTaXplKG5ldyBUSFJFRS5WZWN0b3IzKCkpO1xuICAgICAgICBjb25zdCBjZW50ZXIgPSBib3guZ2V0Q2VudGVyKG5ldyBUSFJFRS5WZWN0b3IzKCkpO1xuICAgICAgICBjb25zdCBtYXhTaXplID0gTWF0aC5tYXgoc2l6ZS54LCBzaXplLnksIHNpemUueik7XG4gICAgICAgIGNvbnN0IGZpdEhlaWdodERpc3RhbmNlID0gaXMub3J0aG9ncmFwaGljQ2FtZXJhKGNhbWVyYSlcbiAgICAgICAgICAgID8gbWF4U2l6ZSAqIDRcbiAgICAgICAgICAgIDogbWF4U2l6ZSAvICgyICogTWF0aC5hdGFuKChNYXRoLlBJICogY2FtZXJhLmZvdikgLyAzNjApKTtcbiAgICAgICAgY29uc3QgZml0V2lkdGhEaXN0YW5jZSA9IGlzLm9ydGhvZ3JhcGhpY0NhbWVyYShjYW1lcmEpID8gbWF4U2l6ZSAqIDQgOiBmaXRIZWlnaHREaXN0YW5jZSAvIGNhbWVyYS5hc3BlY3Q7XG4gICAgICAgIGNvbnN0IGRpc3RhbmNlID0gbWFyZ2luICogTWF0aC5tYXgoZml0SGVpZ2h0RGlzdGFuY2UsIGZpdFdpZHRoRGlzdGFuY2UpO1xuICAgICAgICByZXR1cm4geyBib3gsIHNpemUsIGNlbnRlciwgZGlzdGFuY2UgfTtcbiAgICB9XG5cbiAgICBjb25zdCBhcGkgPSB7XG4gICAgICAgIGdldFNpemUsXG4gICAgICAgIHJlZnJlc2gob2JqZWN0PzogVEhSRUUuT2JqZWN0M0QgfCBUSFJFRS5Cb3gzKSB7XG4gICAgICAgICAgICBjb25zdCB7IGNhbWVyYSwgY29udHJvbHM6IHN0b3JlQ29udHJvbHMgfSA9IHN0b3JlLmdldCgpO1xuICAgICAgICAgICAgY29uc3QgY29udHJvbHMgPSBzdG9yZUNvbnRyb2xzIGFzIHVua25vd24gYXMgQ29udHJvbHNQcm90bztcblxuICAgICAgICAgICAgaWYgKGlzQm94MyhvYmplY3QpKSBib3guY29weShvYmplY3QpO1xuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gb2JqZWN0IHx8IGJvdW5kcy5ib3VuZHNSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICAgICAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldC51cGRhdGVXb3JsZE1hdHJpeCh0cnVlLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgYm94LnNldEZyb21PYmplY3QodGFyZ2V0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYm94LmlzRW1wdHkoKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1heCA9IGNhbWVyYS5wb3NpdGlvbi5sZW5ndGgoKSB8fCAxMDtcbiAgICAgICAgICAgICAgICBib3guc2V0RnJvbUNlbnRlckFuZFNpemUobmV3IFRIUkVFLlZlY3RvcjMoKSwgbmV3IFRIUkVFLlZlY3RvcjMobWF4LCBtYXgsIG1heCkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY29udHJvbHM/LmNvbnN0cnVjdG9yLm5hbWUgPT09ICdPcnRob2dyYXBoaWNUcmFja2JhbGxDb250cm9scycpIHtcbiAgICAgICAgICAgICAgICAvLyBwdXQgY2FtZXJhIG9uIGEgc3BoZXJlIGFsb25nIHdoaWNoIGl0IHdvdWxkIG1vdmVcbiAgICAgICAgICAgICAgICBjb25zdCB7IGRpc3RhbmNlIH0gPSBnZXRTaXplKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZGlyZWN0aW9uID0gY2FtZXJhLnBvc2l0aW9uLmNsb25lKCkuc3ViKGNvbnRyb2xzLnRhcmdldCkubm9ybWFsaXplKCkubXVsdGlwbHlTY2FsYXIoZGlzdGFuY2UpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1BvcyA9IGNvbnRyb2xzLnRhcmdldC5jbG9uZSgpLmFkZChkaXJlY3Rpb24pO1xuICAgICAgICAgICAgICAgIGNhbWVyYS5wb3NpdGlvbi5jb3B5KG5ld1Bvcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcbiAgICAgICAgY2xpcCgpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgZGlzdGFuY2UgfSA9IGdldFNpemUoKTtcbiAgICAgICAgICAgIGNvbnN0IHsgY2FtZXJhLCBjb250cm9sczogc3RvcmVDb250cm9scywgaW52YWxpZGF0ZSB9ID0gc3RvcmUuZ2V0KCk7XG4gICAgICAgICAgICBjb25zdCBjb250cm9scyA9IHN0b3JlQ29udHJvbHMgYXMgdW5rbm93biBhcyBDb250cm9sc1Byb3RvO1xuICAgICAgICAgICAgaWYgKGNvbnRyb2xzKSBjb250cm9scy5tYXhEaXN0YW5jZSA9IGRpc3RhbmNlICogMTA7XG4gICAgICAgICAgICBjYW1lcmEubmVhciA9IGRpc3RhbmNlIC8gMTAwO1xuICAgICAgICAgICAgY2FtZXJhLmZhciA9IGRpc3RhbmNlICogMTAwO1xuICAgICAgICAgICAgY2FtZXJhLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKTtcbiAgICAgICAgICAgIGlmIChjb250cm9scykgY29udHJvbHMudXBkYXRlKCk7XG4gICAgICAgICAgICBpbnZhbGlkYXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcbiAgICAgICAgdG8oeyBwb3NpdGlvbiwgdGFyZ2V0IH06IHsgcG9zaXRpb246IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXTsgdGFyZ2V0PzogW251bWJlciwgbnVtYmVyLCBudW1iZXJdIH0pIHtcbiAgICAgICAgICAgIGNvbnN0IHsgY2FtZXJhIH0gPSBzdG9yZS5nZXQoKTtcbiAgICAgICAgICAgIGNvbnN0IHsgZGFtcGluZyB9ID0gYm91bmRzLmdldCgpO1xuXG4gICAgICAgICAgICBib3VuZHMuY3VycmVudC5jYW1lcmEuY29weShjYW1lcmEucG9zaXRpb24pO1xuICAgICAgICAgICAgY29uc3QgeyBjZW50ZXIgfSA9IGdldFNpemUoKTtcbiAgICAgICAgICAgIGJvdW5kcy5nb2FsLmNhbWVyYS5zZXQoLi4ucG9zaXRpb24pO1xuXG4gICAgICAgICAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgYm91bmRzLmdvYWwuZm9jdXMuc2V0KC4uLnRhcmdldCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGJvdW5kcy5nb2FsLmZvY3VzLmNvcHkoY2VudGVyKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRhbXBpbmcpIHtcbiAgICAgICAgICAgICAgICBib3VuZHMuY3VycmVudC5hbmltYXRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYW1lcmEucG9zaXRpb24uc2V0KC4uLnBvc2l0aW9uKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG4gICAgICAgIGZpdCgpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgY2FtZXJhLCBjb250cm9sczogc3RvcmVDb250cm9scywgaW52YWxpZGF0ZSB9ID0gc3RvcmUuZ2V0KCk7XG4gICAgICAgICAgICBjb25zdCBjb250cm9scyA9IHN0b3JlQ29udHJvbHMgYXMgdW5rbm93biBhcyBDb250cm9sc1Byb3RvO1xuXG4gICAgICAgICAgICBjb25zdCB7IGRhbXBpbmcsIG1hcmdpbiB9ID0gYm91bmRzLmdldCgpO1xuXG4gICAgICAgICAgICBib3VuZHMuY3VycmVudC5jYW1lcmEuY29weShjYW1lcmEucG9zaXRpb24pO1xuICAgICAgICAgICAgaWYgKGNvbnRyb2xzKSBib3VuZHMuY3VycmVudC5mb2N1cy5jb3B5KGNvbnRyb2xzLnRhcmdldCk7XG5cbiAgICAgICAgICAgIGNvbnN0IHsgY2VudGVyLCBkaXN0YW5jZSB9ID0gZ2V0U2l6ZSgpO1xuICAgICAgICAgICAgY29uc3QgZGlyZWN0aW9uID0gY2VudGVyLmNsb25lKCkuc3ViKGNhbWVyYS5wb3NpdGlvbikubm9ybWFsaXplKCkubXVsdGlwbHlTY2FsYXIoZGlzdGFuY2UpO1xuXG4gICAgICAgICAgICBib3VuZHMuZ29hbC5jYW1lcmEuY29weShjZW50ZXIpLnN1YihkaXJlY3Rpb24pO1xuICAgICAgICAgICAgYm91bmRzLmdvYWwuZm9jdXMuY29weShjZW50ZXIpO1xuXG4gICAgICAgICAgICBpZiAoaXMub3J0aG9ncmFwaGljQ2FtZXJhKGNhbWVyYSkpIHtcbiAgICAgICAgICAgICAgICBib3VuZHMuY3VycmVudC56b29tID0gY2FtZXJhLnpvb207XG5cbiAgICAgICAgICAgICAgICBsZXQgbWF4SGVpZ2h0ID0gMCxcbiAgICAgICAgICAgICAgICAgICAgbWF4V2lkdGggPSAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IHZlcnRpY2VzID0gW1xuICAgICAgICAgICAgICAgICAgICBuZXcgVEhSRUUuVmVjdG9yMyhib3gubWluLngsIGJveC5taW4ueSwgYm94Lm1pbi56KSxcbiAgICAgICAgICAgICAgICAgICAgbmV3IFRIUkVFLlZlY3RvcjMoYm94Lm1pbi54LCBib3gubWF4LnksIGJveC5taW4ueiksXG4gICAgICAgICAgICAgICAgICAgIG5ldyBUSFJFRS5WZWN0b3IzKGJveC5taW4ueCwgYm94Lm1pbi55LCBib3gubWF4LnopLFxuICAgICAgICAgICAgICAgICAgICBuZXcgVEhSRUUuVmVjdG9yMyhib3gubWluLngsIGJveC5tYXgueSwgYm94Lm1heC56KSxcbiAgICAgICAgICAgICAgICAgICAgbmV3IFRIUkVFLlZlY3RvcjMoYm94Lm1heC54LCBib3gubWF4LnksIGJveC5tYXgueiksXG4gICAgICAgICAgICAgICAgICAgIG5ldyBUSFJFRS5WZWN0b3IzKGJveC5tYXgueCwgYm94Lm1heC55LCBib3gubWluLnopLFxuICAgICAgICAgICAgICAgICAgICBuZXcgVEhSRUUuVmVjdG9yMyhib3gubWF4LngsIGJveC5taW4ueSwgYm94Lm1heC56KSxcbiAgICAgICAgICAgICAgICAgICAgbmV3IFRIUkVFLlZlY3RvcjMoYm94Lm1heC54LCBib3gubWluLnksIGJveC5taW4ueiksXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICAvLyBUcmFuc2Zvcm0gdGhlIGNlbnRlciBhbmQgZWFjaCBjb3JuZXIgdG8gY2FtZXJhIHNwYWNlXG4gICAgICAgICAgICAgICAgY2VudGVyLmFwcGx5TWF0cml4NChjYW1lcmEubWF0cml4V29ybGRJbnZlcnNlKTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHYgb2YgdmVydGljZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdi5hcHBseU1hdHJpeDQoY2FtZXJhLm1hdHJpeFdvcmxkSW52ZXJzZSk7XG4gICAgICAgICAgICAgICAgICAgIG1heEhlaWdodCA9IE1hdGgubWF4KG1heEhlaWdodCwgTWF0aC5hYnModi55IC0gY2VudGVyLnkpKTtcbiAgICAgICAgICAgICAgICAgICAgbWF4V2lkdGggPSBNYXRoLm1heChtYXhXaWR0aCwgTWF0aC5hYnModi54IC0gY2VudGVyLngpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbWF4SGVpZ2h0ICo9IDI7XG4gICAgICAgICAgICAgICAgbWF4V2lkdGggKj0gMjtcbiAgICAgICAgICAgICAgICBjb25zdCB6b29tRm9ySGVpZ2h0ID0gKGNhbWVyYS50b3AgLSBjYW1lcmEuYm90dG9tKSAvIG1heEhlaWdodDtcbiAgICAgICAgICAgICAgICBjb25zdCB6b29tRm9yV2lkdGggPSAoY2FtZXJhLnJpZ2h0IC0gY2FtZXJhLmxlZnQpIC8gbWF4V2lkdGg7XG4gICAgICAgICAgICAgICAgYm91bmRzLmdvYWwuem9vbSA9IE1hdGgubWluKHpvb21Gb3JIZWlnaHQsIHpvb21Gb3JXaWR0aCkgLyBtYXJnaW47XG4gICAgICAgICAgICAgICAgaWYgKCFkYW1waW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbWVyYS56b29tID0gYm91bmRzLmdvYWwuem9vbTtcbiAgICAgICAgICAgICAgICAgICAgY2FtZXJhLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChkYW1waW5nKSB7XG4gICAgICAgICAgICAgICAgYm91bmRzLmN1cnJlbnQuYW5pbWF0aW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FtZXJhLnBvc2l0aW9uLmNvcHkoYm91bmRzLmdvYWwuY2FtZXJhKTtcbiAgICAgICAgICAgICAgICBjYW1lcmEubG9va0F0KGJvdW5kcy5nb2FsLmZvY3VzKTtcbiAgICAgICAgICAgICAgICBpZiAoY29udHJvbHMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udHJvbHMudGFyZ2V0LmNvcHkoYm91bmRzLmdvYWwuZm9jdXMpO1xuICAgICAgICAgICAgICAgICAgICBjb250cm9scy51cGRhdGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYm91bmRzLmZpdHRlZC5vYnNlcnZlZCkgYm91bmRzLmZpdHRlZC5lbWl0KHRoaXMuZ2V0U2l6ZSgpKTtcbiAgICAgICAgICAgIGludmFsaWRhdGUoKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuICAgIH0gYXMgTmd0c0JvdW5kc0FwaTtcblxuICAgIGxldCBjb3VudCA9IDA7XG4gICAgYm91bmRzLmhvbGQoXG4gICAgICAgIGJvdW5kcy5ib3VuZHNSZWYuJC5waXBlKFxuICAgICAgICAgICAgc3dpdGNoTWFwKCgpID0+XG4gICAgICAgICAgICAgICAgY29tYmluZUxhdGVzdChbXG4gICAgICAgICAgICAgICAgICAgIGJvdW5kcy5zZWxlY3QoJ2NsaXAnKSxcbiAgICAgICAgICAgICAgICAgICAgYm91bmRzLnNlbGVjdCgnZml0JyksXG4gICAgICAgICAgICAgICAgICAgIGJvdW5kcy5zZWxlY3QoJ29ic2VydmUnKSxcbiAgICAgICAgICAgICAgICAgICAgc3RvcmUuc2VsZWN0KCdjYW1lcmEnKSxcbiAgICAgICAgICAgICAgICAgICAgc3RvcmUuc2VsZWN0KCdjb250cm9scycpLFxuICAgICAgICAgICAgICAgICAgICBzdG9yZS5zZWxlY3QoJ3NpemUnKSxcbiAgICAgICAgICAgICAgICAgICAgYm91bmRzLmJvdW5kc1JlZi5jaGlsZHJlbiQoKSxcbiAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgKVxuICAgICAgICApLFxuICAgICAgICAoW2NsaXAsIGZpdCwgb2JzZXJ2ZV0pID0+IHtcbiAgICAgICAgICAgIGlmIChvYnNlcnZlIHx8IGNvdW50KysgPT09IDApIHtcbiAgICAgICAgICAgICAgICBhcGkucmVmcmVzaCgpO1xuICAgICAgICAgICAgICAgIGlmIChmaXQpIGFwaS5maXQoKTtcbiAgICAgICAgICAgICAgICBpZiAoY2xpcCkgYXBpLmNsaXAoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICBpbmplY3RCZWZvcmVSZW5kZXIoKHsgZGVsdGEgfSkgPT4ge1xuICAgICAgICBpZiAoYm91bmRzLmN1cnJlbnQuYW5pbWF0aW5nKSB7XG4gICAgICAgICAgICBjb25zdCB7IGRhbXBpbmcsIGVwcyB9ID0gYm91bmRzLmdldCgpO1xuICAgICAgICAgICAgY29uc3QgeyBjYW1lcmEsIGNvbnRyb2xzOiBzdG9yZUNvbnRyb2xzLCBpbnZhbGlkYXRlIH0gPSBzdG9yZS5nZXQoKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRyb2xzID0gc3RvcmVDb250cm9scyBhcyB1bmtub3duIGFzIENvbnRyb2xzUHJvdG87XG5cbiAgICAgICAgICAgIGRhbXAoYm91bmRzLmN1cnJlbnQuZm9jdXMsIGJvdW5kcy5nb2FsLmZvY3VzLCBkYW1waW5nLCBkZWx0YSk7XG4gICAgICAgICAgICBkYW1wKGJvdW5kcy5jdXJyZW50LmNhbWVyYSwgYm91bmRzLmdvYWwuY2FtZXJhLCBkYW1waW5nLCBkZWx0YSk7XG4gICAgICAgICAgICBib3VuZHMuY3VycmVudC56b29tID0gVEhSRUUuTWF0aFV0aWxzLmRhbXAoYm91bmRzLmN1cnJlbnQuem9vbSwgYm91bmRzLmdvYWwuem9vbSwgZGFtcGluZywgZGVsdGEpO1xuICAgICAgICAgICAgY2FtZXJhLnBvc2l0aW9uLmNvcHkoYm91bmRzLmN1cnJlbnQuY2FtZXJhKTtcblxuICAgICAgICAgICAgaWYgKGlzLm9ydGhvZ3JhcGhpY0NhbWVyYShjYW1lcmEpKSB7XG4gICAgICAgICAgICAgICAgY2FtZXJhLnpvb20gPSBib3VuZHMuY3VycmVudC56b29tO1xuICAgICAgICAgICAgICAgIGNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghY29udHJvbHMpIHtcbiAgICAgICAgICAgICAgICBjYW1lcmEubG9va0F0KGJvdW5kcy5jdXJyZW50LmZvY3VzKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29udHJvbHMudGFyZ2V0LmNvcHkoYm91bmRzLmN1cnJlbnQuZm9jdXMpO1xuICAgICAgICAgICAgICAgIGNvbnRyb2xzLnVwZGF0ZSgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpbnZhbGlkYXRlKCk7XG4gICAgICAgICAgICBpZiAoaXMub3J0aG9ncmFwaGljQ2FtZXJhKGNhbWVyYSkgJiYgIShNYXRoLmFicyhib3VuZHMuY3VycmVudC56b29tIC0gYm91bmRzLmdvYWwuem9vbSkgPCBlcHMpKSByZXR1cm47XG4gICAgICAgICAgICBpZiAoIWlzLm9ydGhvZ3JhcGhpY0NhbWVyYShjYW1lcmEpICYmICFlcXVhbHMoYm91bmRzLmN1cnJlbnQuY2FtZXJhLCBib3VuZHMuZ29hbC5jYW1lcmEsIGVwcykpIHJldHVybjtcbiAgICAgICAgICAgIGlmIChjb250cm9scyAmJiAhZXF1YWxzKGJvdW5kcy5jdXJyZW50LmZvY3VzLCBib3VuZHMuZ29hbC5mb2N1cywgZXBzKSkgcmV0dXJuO1xuICAgICAgICAgICAgYm91bmRzLmN1cnJlbnQuYW5pbWF0aW5nID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBhcGk7XG59XG5cbmV4dGVuZCh7IEdyb3VwIH0pO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25ndHMtYm91bmRzJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxuZ3QtZ3JvdXAgbmd0Q29tcG91bmQgW3JlZl09XCJib3VuZHNSZWZcIj5cbiAgICAgICAgICAgIDxuZy1jb250ZW50IC8+XG4gICAgICAgIDwvbmd0LWdyb3VwPlxuICAgIGAsXG4gICAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBOR1RTX0JPVU5EU19BUEksIHVzZUZhY3Rvcnk6IGJvdW5kc0FwaUZhY3RvcnksIGRlcHM6IFtOZ3RzQm91bmRzXSB9XSxcbiAgICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXG59KVxuZXhwb3J0IGNsYXNzIE5ndHNCb3VuZHMgZXh0ZW5kcyBOZ3RSeFN0b3JlIGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBASW5wdXQoKSBib3VuZHNSZWYgPSBpbmplY3ROZ3RSZWY8R3JvdXA+KCk7XG5cbiAgICBASW5wdXQoKSBzZXQgZGFtcGluZyhkYW1waW5nOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBkYW1waW5nIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBmaXQoZml0OiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgZml0IH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBjbGlwKGNsaXA6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5zZXQoeyBjbGlwIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBvYnNlcnZlKG9ic2VydmU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5zZXQoeyBvYnNlcnZlIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBtYXJnaW4obWFyZ2luOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBtYXJnaW4gfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IGVwcyhlcHM6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IGVwcyB9KTtcbiAgICB9XG5cbiAgICBAT3V0cHV0KCkgZml0dGVkID0gbmV3IEV2ZW50RW1pdHRlcjxOZ3RzQm91bmRzU2l6ZT4oKTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgc3RvcmUgPSBpbmplY3QoTmd0U3RvcmUpO1xuXG4gICAgcmVhZG9ubHkgY3VycmVudCA9IHsgYW5pbWF0aW5nOiBmYWxzZSwgZm9jdXM6IG5ldyBUSFJFRS5WZWN0b3IzKCksIGNhbWVyYTogbmV3IFRIUkVFLlZlY3RvcjMoKSwgem9vbTogMSB9O1xuICAgIHJlYWRvbmx5IGdvYWwgPSB7IGZvY3VzOiBuZXcgVEhSRUUuVmVjdG9yMygpLCBjYW1lcmE6IG5ldyBUSFJFRS5WZWN0b3IzKCksIHpvb206IDEgfTtcblxuICAgIG92ZXJyaWRlIGluaXRpYWxpemUoKSB7XG4gICAgICAgIHN1cGVyLmluaXRpYWxpemUoKTtcbiAgICAgICAgdGhpcy5zZXQoeyBkYW1waW5nOiA2LCBmaXQ6IGZhbHNlLCBjbGlwOiBmYWxzZSwgb2JzZXJ2ZTogZmFsc2UsIG1hcmdpbjogMS4yLCBlcHM6IDAuMDEgfSk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMucHJldmVudERyYWdIaWphY2tpbmcoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHByZXZlbnREcmFnSGlqYWNraW5nKCkge1xuICAgICAgICB0aGlzLmVmZmVjdCh0aGlzLnN0b3JlLnNlbGVjdCgnY29udHJvbHMnKSwgKGNvbnRyb2xzKSA9PiB7XG4gICAgICAgICAgICBpZiAoY29udHJvbHMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjYWxsYmFjayA9ICgpID0+ICh0aGlzLmN1cnJlbnQuYW5pbWF0aW5nID0gZmFsc2UpO1xuICAgICAgICAgICAgICAgIChjb250cm9scyBhcyB1bmtub3duIGFzIENvbnRyb2xzUHJvdG8pLmFkZEV2ZW50TGlzdGVuZXIoJ3N0YXJ0JywgY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgIHJldHVybiAoKSA9PiAoY29udHJvbHMgYXMgdW5rbm93biBhcyBDb250cm9sc1Byb3RvKS5yZW1vdmVFdmVudExpc3RlbmVyKCdzdGFydCcsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { Directive, inject, Input } from '@angular/core';
|
|
2
|
+
import { injectBeforeRender, NgtRxStore, NgtStore } from 'angular-three';
|
|
3
|
+
import { combineLatest } from 'rxjs';
|
|
4
|
+
import { SimplexNoise } from 'three-stdlib';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
class NgtsCameraShake extends NgtRxStore {
|
|
7
|
+
set intensity(intensity) {
|
|
8
|
+
this.set({ intensity });
|
|
9
|
+
}
|
|
10
|
+
set decay(decay) {
|
|
11
|
+
this.set({ decay });
|
|
12
|
+
}
|
|
13
|
+
set decayRate(decayRate) {
|
|
14
|
+
this.set({ decayRate });
|
|
15
|
+
}
|
|
16
|
+
set maxYaw(maxYaw) {
|
|
17
|
+
this.set({ maxYaw });
|
|
18
|
+
}
|
|
19
|
+
set maxPitch(maxPitch) {
|
|
20
|
+
this.set({ maxPitch });
|
|
21
|
+
}
|
|
22
|
+
set maxRoll(maxRoll) {
|
|
23
|
+
this.set({ maxRoll });
|
|
24
|
+
}
|
|
25
|
+
set yawFrequency(yawFrequency) {
|
|
26
|
+
this.set({ yawFrequency });
|
|
27
|
+
}
|
|
28
|
+
set pitchFrequency(pitchFrequency) {
|
|
29
|
+
this.set({ pitchFrequency });
|
|
30
|
+
}
|
|
31
|
+
set rollFrequency(rollFrequency) {
|
|
32
|
+
this.set({ rollFrequency });
|
|
33
|
+
}
|
|
34
|
+
initialize() {
|
|
35
|
+
super.initialize();
|
|
36
|
+
this.set({
|
|
37
|
+
intensity: 1,
|
|
38
|
+
decayRate: 0.65,
|
|
39
|
+
maxYaw: 0.1,
|
|
40
|
+
maxPitch: 0.1,
|
|
41
|
+
maxRoll: 0.1,
|
|
42
|
+
yawFrequency: 0.1,
|
|
43
|
+
pitchFrequency: 0.1,
|
|
44
|
+
rollFrequency: 0.1,
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
constructor() {
|
|
48
|
+
super();
|
|
49
|
+
this.store = inject(NgtStore);
|
|
50
|
+
this.initialRotation = this.store.get('camera').rotation.clone();
|
|
51
|
+
this.yawNoise = new SimplexNoise();
|
|
52
|
+
this.pitchNoise = new SimplexNoise();
|
|
53
|
+
this.rollNoise = new SimplexNoise();
|
|
54
|
+
injectBeforeRender(({ clock, delta, camera }) => {
|
|
55
|
+
const { intensity, maxYaw, maxPitch, maxRoll, yawFrequency, pitchFrequency, rollFrequency, decay, decayRate, } = this.get();
|
|
56
|
+
const shake = Math.pow(intensity, 2);
|
|
57
|
+
const yaw = maxYaw * shake * this.yawNoise.noise(clock.elapsedTime * yawFrequency, 1);
|
|
58
|
+
const pitch = maxPitch * shake * this.pitchNoise.noise(clock.elapsedTime * pitchFrequency, 1);
|
|
59
|
+
const roll = maxRoll * shake * this.rollNoise.noise(clock.elapsedTime * rollFrequency, 1);
|
|
60
|
+
camera.rotation.set(this.initialRotation.x + pitch, this.initialRotation.y + yaw, this.initialRotation.z + roll);
|
|
61
|
+
if (decay && intensity > 0) {
|
|
62
|
+
this.set({ intensity: intensity - decayRate * delta });
|
|
63
|
+
this.constraintIntensity();
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
ngOnInit() {
|
|
68
|
+
this.setChangeEvent();
|
|
69
|
+
}
|
|
70
|
+
setChangeEvent() {
|
|
71
|
+
this.effect(combineLatest([this.store.select('camera'), this.store.select('controls')]), ([camera, controls]) => {
|
|
72
|
+
if (controls) {
|
|
73
|
+
const callback = () => void (this.initialRotation = camera.rotation.clone());
|
|
74
|
+
controls.addEventListener('change', callback);
|
|
75
|
+
callback();
|
|
76
|
+
return () => void controls.removeEventListener('change', callback);
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
getIntensity() {
|
|
81
|
+
return this.get('intensity');
|
|
82
|
+
}
|
|
83
|
+
setIntensity(intensity) {
|
|
84
|
+
this.set({ intensity });
|
|
85
|
+
this.constraintIntensity();
|
|
86
|
+
}
|
|
87
|
+
constraintIntensity() {
|
|
88
|
+
const intensity = this.get('intensity');
|
|
89
|
+
if (intensity < 0 || intensity > 1) {
|
|
90
|
+
this.set({ intensity: intensity < 0 ? 0 : 1 });
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtsCameraShake, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
94
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.0", type: NgtsCameraShake, isStandalone: true, selector: "ngts-camera-shake", inputs: { intensity: "intensity", decay: "decay", decayRate: "decayRate", maxYaw: "maxYaw", maxPitch: "maxPitch", maxRoll: "maxRoll", yawFrequency: "yawFrequency", pitchFrequency: "pitchFrequency", rollFrequency: "rollFrequency" }, usesInheritance: true, ngImport: i0 }); }
|
|
95
|
+
}
|
|
96
|
+
export { NgtsCameraShake };
|
|
97
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtsCameraShake, decorators: [{
|
|
98
|
+
type: Directive,
|
|
99
|
+
args: [{
|
|
100
|
+
selector: 'ngts-camera-shake',
|
|
101
|
+
standalone: true,
|
|
102
|
+
}]
|
|
103
|
+
}], ctorParameters: function () { return []; }, propDecorators: { intensity: [{
|
|
104
|
+
type: Input
|
|
105
|
+
}], decay: [{
|
|
106
|
+
type: Input
|
|
107
|
+
}], decayRate: [{
|
|
108
|
+
type: Input
|
|
109
|
+
}], maxYaw: [{
|
|
110
|
+
type: Input
|
|
111
|
+
}], maxPitch: [{
|
|
112
|
+
type: Input
|
|
113
|
+
}], maxRoll: [{
|
|
114
|
+
type: Input
|
|
115
|
+
}], yawFrequency: [{
|
|
116
|
+
type: Input
|
|
117
|
+
}], pitchFrequency: [{
|
|
118
|
+
type: Input
|
|
119
|
+
}], rollFrequency: [{
|
|
120
|
+
type: Input
|
|
121
|
+
}] } });
|
|
122
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FtZXJhLXNoYWtlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXRocmVlLXNvYmEvc3RhZ2luZy9zcmMvbGliL2NhbWVyYS1zaGFrZS9jYW1lcmEtc2hha2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDckMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGNBQWMsQ0FBQzs7QUFFNUMsTUFJYSxlQUFnQixTQUFRLFVBQVU7SUFTM0MsSUFBYSxTQUFTLENBQUMsU0FBaUI7UUFDcEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVELElBQWEsS0FBSyxDQUFDLEtBQWM7UUFDN0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQWEsU0FBUyxDQUFDLFNBQWlCO1FBQ3BDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRCxJQUFhLE1BQU0sQ0FBQyxNQUFjO1FBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFRCxJQUFhLFFBQVEsQ0FBQyxRQUFnQjtRQUNsQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQsSUFBYSxPQUFPLENBQUMsT0FBZTtRQUNoQyxJQUFJLENBQUMsR0FBRyxD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R0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUNsRDtJQUNMLENBQUM7OEdBNUhRLGVBQWU7a0dBQWYsZUFBZTs7U0FBZixlQUFlOzJGQUFmLGVBQWU7a0JBSjNCLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLG1CQUFtQjtvQkFDN0IsVUFBVSxFQUFFLElBQUk7aUJBQ25COzBFQVVnQixTQUFTO3NCQUFyQixLQUFLO2dCQUlPLEtBQUs7c0JBQWpCLEtBQUs7Z0JBSU8sU0FBUztzQkFBckIsS0FBSztnQkFJTyxNQUFNO3NCQUFsQixLQUFLO2dCQUlPLFFBQVE7c0JBQXBCLEtBQUs7Z0JBSU8sT0FBTztzQkFBbkIsS0FBSztnQkFJTyxZQUFZO3NCQUF4QixLQUFLO2dCQUlPLGNBQWM7c0JBQTFCLEtBQUs7Z0JBSU8sYUFBYTtzQkFBekIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgaW5qZWN0LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBpbmplY3RCZWZvcmVSZW5kZXIsIE5ndFJ4U3RvcmUsIE5ndFN0b3JlIH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBTaW1wbGV4Tm9pc2UgfSBmcm9tICd0aHJlZS1zdGRsaWInO1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ25ndHMtY2FtZXJhLXNoYWtlJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzQ2FtZXJhU2hha2UgZXh0ZW5kcyBOZ3RSeFN0b3JlIGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHN0b3JlID0gaW5qZWN0KE5ndFN0b3JlKTtcblxuICAgIHByaXZhdGUgaW5pdGlhbFJvdGF0aW9uID0gdGhpcy5zdG9yZS5nZXQoJ2NhbWVyYScpLnJvdGF0aW9uLmNsb25lKCk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IHlhd05vaXNlID0gbmV3IFNpbXBsZXhOb2lzZSgpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcGl0Y2hOb2lzZSA9IG5ldyBTaW1wbGV4Tm9pc2UoKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvbGxOb2lzZSA9IG5ldyBTaW1wbGV4Tm9pc2UoKTtcblxuICAgIEBJbnB1dCgpIHNldCBpbnRlbnNpdHkoaW50ZW5zaXR5OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBpbnRlbnNpdHkgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IGRlY2F5KGRlY2F5OiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgZGVjYXkgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IGRlY2F5UmF0ZShkZWNheVJhdGU6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IGRlY2F5UmF0ZSB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgbWF4WWF3KG1heFlhdzogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgbWF4WWF3IH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBtYXhQaXRjaChtYXhQaXRjaDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgbWF4UGl0Y2ggfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IG1heFJvbGwobWF4Um9sbDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgbWF4Um9sbCB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgeWF3RnJlcXVlbmN5KHlhd0ZyZXF1ZW5jeTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgeWF3RnJlcXVlbmN5IH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBwaXRjaEZyZXF1ZW5jeShwaXRjaEZyZXF1ZW5jeTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgcGl0Y2hGcmVxdWVuY3kgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IHJvbGxGcmVxdWVuY3kocm9sbEZyZXF1ZW5jeTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgcm9sbEZyZXF1ZW5jeSB9KTtcbiAgICB9XG5cbiAgICBvdmVycmlkZSBpbml0aWFsaXplKCk6IHZvaWQge1xuICAgICAgICBzdXBlci5pbml0aWFsaXplKCk7XG4gICAgICAgIHRoaXMuc2V0KHtcbiAgICAgICAgICAgIGludGVuc2l0eTogMSxcbiAgICAgICAgICAgIGRlY2F5UmF0ZTogMC42NSxcbiAgICAgICAgICAgIG1heFlhdzogMC4xLFxuICAgICAgICAgICAgbWF4UGl0Y2g6IDAuMSxcbiAgICAgICAgICAgIG1heFJvbGw6IDAuMSxcbiAgICAgICAgICAgIHlhd0ZyZXF1ZW5jeTogMC4xLFxuICAgICAgICAgICAgcGl0Y2hGcmVxdWVuY3k6IDAuMSxcbiAgICAgICAgICAgIHJvbGxGcmVxdWVuY3k6IDAuMSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIGluamVjdEJlZm9yZVJlbmRlcigoeyBjbG9jaywgZGVsdGEsIGNhbWVyYSB9KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgICAgaW50ZW5zaXR5LFxuICAgICAgICAgICAgICAgIG1heFlhdyxcbiAgICAgICAgICAgICAgICBtYXhQaXRjaCxcbiAgICAgICAgICAgICAgICBtYXhSb2xsLFxuICAgICAgICAgICAgICAgIHlhd0ZyZXF1ZW5jeSxcbiAgICAgICAgICAgICAgICBwaXRjaEZyZXF1ZW5jeSxcbiAgICAgICAgICAgICAgICByb2xsRnJlcXVlbmN5LFxuICAgICAgICAgICAgICAgIGRlY2F5LFxuICAgICAgICAgICAgICAgIGRlY2F5UmF0ZSxcbiAgICAgICAgICAgIH0gPSB0aGlzLmdldCgpO1xuXG4gICAgICAgICAgICBjb25zdCBzaGFrZSA9IE1hdGgucG93KGludGVuc2l0eSwgMik7XG4gICAgICAgICAgICBjb25zdCB5YXcgPSBtYXhZYXcgKiBzaGFrZSAqIHRoaXMueWF3Tm9pc2Uubm9pc2UoY2xvY2suZWxhcHNlZFRpbWUgKiB5YXdGcmVxdWVuY3ksIDEpO1xuICAgICAgICAgICAgY29uc3QgcGl0Y2ggPSBtYXhQaXRjaCAqIHNoYWtlICogdGhpcy5waXRjaE5vaXNlLm5vaXNlKGNsb2NrLmVsYXBzZWRUaW1lICogcGl0Y2hGcmVxdWVuY3ksIDEpO1xuICAgICAgICAgICAgY29uc3Qgcm9sbCA9IG1heFJvbGwgKiBzaGFrZSAqIHRoaXMucm9sbE5vaXNlLm5vaXNlKGNsb2NrLmVsYXBzZWRUaW1lICogcm9sbEZyZXF1ZW5jeSwgMSk7XG5cbiAgICAgICAgICAgIGNhbWVyYS5yb3RhdGlvbi5zZXQoXG4gICAgICAgICAgICAgICAgdGhpcy5pbml0aWFsUm90YXRpb24ueCArIHBpdGNoLFxuICAgICAgICAgICAgICAgIHRoaXMuaW5pdGlhbFJvdGF0aW9uLnkgKyB5YXcsXG4gICAgICAgICAgICAgICAgdGhpcy5pbml0aWFsUm90YXRpb24ueiArIHJvbGxcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmIChkZWNheSAmJiBpbnRlbnNpdHkgPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXQoeyBpbnRlbnNpdHk6IGludGVuc2l0eSAtIGRlY2F5UmF0ZSAqIGRlbHRhIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuY29uc3RyYWludEludGVuc2l0eSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZXRDaGFuZ2VFdmVudCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0Q2hhbmdlRXZlbnQoKSB7XG4gICAgICAgIHRoaXMuZWZmZWN0KFxuICAgICAgICAgICAgY29tYmluZUxhdGVzdChbdGhpcy5zdG9yZS5zZWxlY3QoJ2NhbWVyYScpLCB0aGlzLnN0b3JlLnNlbGVjdCgnY29udHJvbHMnKV0pLFxuICAgICAgICAgICAgKFtjYW1lcmEsIGNvbnRyb2xzXSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChjb250cm9scykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjYWxsYmFjayA9ICgpID0+IHZvaWQgKHRoaXMuaW5pdGlhbFJvdGF0aW9uID0gY2FtZXJhLnJvdGF0aW9uLmNsb25lKCkpO1xuICAgICAgICAgICAgICAgICAgICBjb250cm9scy5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoKSA9PiB2b2lkIGNvbnRyb2xzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZ2V0SW50ZW5zaXR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXQoJ2ludGVuc2l0eScpO1xuICAgIH1cblxuICAgIHNldEludGVuc2l0eShpbnRlbnNpdHk6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IGludGVuc2l0eSB9KTtcbiAgICAgICAgdGhpcy5jb25zdHJhaW50SW50ZW5zaXR5KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb25zdHJhaW50SW50ZW5zaXR5KCkge1xuICAgICAgICBjb25zdCBpbnRlbnNpdHkgPSB0aGlzLmdldCgnaW50ZW5zaXR5Jyk7XG4gICAgICAgIGlmIChpbnRlbnNpdHkgPCAwIHx8IGludGVuc2l0eSA+IDEpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0KHsgaW50ZW5zaXR5OiBpbnRlbnNpdHkgPCAwID8gMCA6IDEgfSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
|