@colijnit/homedecorator 255.1.4 → 255.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. package/app/core/enum/message-type.enum.d.ts +3 -1
  2. package/app/core/interface/message-with-payload.interface.d.ts +6 -0
  3. package/app/core/model/homedecorator-settings-options.d.ts +2 -0
  4. package/app/core/service/homedecorator-app-event.service.d.ts +1 -0
  5. package/app/core/service/homedecorator-connector-adapter.service.d.ts +2 -0
  6. package/app/core/service/homedecorator-connector.service.d.ts +5 -4
  7. package/app/core/service/homedecorator-settings.service.d.ts +2 -1
  8. package/app/core/service/presets.service.d.ts +3 -1
  9. package/app/homedecorator.component.d.ts +3 -1
  10. package/app/homedecorator.module.d.ts +2 -1
  11. package/app/plugins/core3d/service/floor-pattern.service.d.ts +1 -1
  12. package/app/plugins/core3d/service/floor-tile-intersection.service.d.ts +2 -1
  13. package/app/plugins/core3d/service/floor.service.d.ts +3 -1
  14. package/app/plugins/core3d/service/post-processing.service.d.ts +21 -7
  15. package/app/plugins/core3d/service/scene.service.d.ts +1 -1
  16. package/app/plugins/core3d/service/ssr.service.d.ts +0 -1
  17. package/app/plugins/model-uploader/model-previewer/model-preview.component.d.ts +11 -2
  18. package/app/plugins/model-uploader/model-previewer/model-preview.component.scss +185 -15
  19. package/app/plugins/model-uploader/model-uploader.module.d.ts +5 -1
  20. package/app/plugins/render/render-dialog/render-dialog.component.d.ts +4 -1
  21. package/app/plugins/render/render-dialog/render-dialog.component.scss +5 -5
  22. package/app/plugins/room-planner/components/floorplanner/floorplanner.component.d.ts +3 -1
  23. package/app/plugins/room-planner/components/floorplanner/service/room.service.d.ts +1 -0
  24. package/app/plugins/room-planner/components/settings/settings.component.d.ts +5 -1
  25. package/app/plugins/room-planner/components/texture-editor/texture-editor.component.d.ts +4 -1
  26. package/app/plugins/room-planner/room-planner/room-planner.component.scss +1 -0
  27. package/app/plugins/threedselector/threedselector/service/build-furniture.service.d.ts +1 -3
  28. package/app/plugins/toolbar/draw-dialog/draw-dialog.component.d.ts +2 -0
  29. package/app/plugins/toolbar/draw-dialog/draw-dialog.component.scss +1 -1
  30. package/app/plugins/toolbar/toolbar/toolbar.component.d.ts +2 -0
  31. package/assets/icons/dash-button.svg +7 -0
  32. package/assets/icons/pen-ruler.svg +1 -0
  33. package/assets/icons/retry-button.svg +7 -0
  34. package/bundles/colijnit-homedecorator.umd.js +822 -601
  35. package/bundles/colijnit-homedecorator.umd.js.map +1 -1
  36. package/esm2015/app/app.version.js +3 -3
  37. package/esm2015/app/core/enum/message-type.enum.js +3 -1
  38. package/esm2015/app/core/interface/message-with-payload.interface.js +1 -1
  39. package/esm2015/app/core/model/homedecorator-settings-options.js +3 -1
  40. package/esm2015/app/core/service/3dm-api.js +4 -4
  41. package/esm2015/app/core/service/homedecorator-app-event.service.js +2 -1
  42. package/esm2015/app/core/service/homedecorator-connector-adapter.service.js +25 -2
  43. package/esm2015/app/core/service/homedecorator-connector.service.js +25 -22
  44. package/esm2015/app/core/service/homedecorator-settings.service.js +3 -2
  45. package/esm2015/app/core/service/presets.service.js +13 -5
  46. package/esm2015/app/core/utils/material.utils.js +3 -3
  47. package/esm2015/app/homedecorator.component.js +26 -19
  48. package/esm2015/app/homedecorator.module.js +8 -4
  49. package/esm2015/app/plugins/core3d/core3d/components/scenecontrol/scene-control.component.js +5 -5
  50. package/esm2015/app/plugins/core3d/items/custom-cylinder-floor-item.js +2 -2
  51. package/esm2015/app/plugins/core3d/items/custom-cylinder-wall-item.js +2 -2
  52. package/esm2015/app/plugins/core3d/items/custom-shape-floor-item.js +2 -2
  53. package/esm2015/app/plugins/core3d/items/custom-shape-wall-item.js +2 -2
  54. package/esm2015/app/plugins/core3d/items/factory.js +3 -2
  55. package/esm2015/app/plugins/core3d/service/ar.service.js +2 -1
  56. package/esm2015/app/plugins/core3d/service/floor-pattern.service.js +24 -18
  57. package/esm2015/app/plugins/core3d/service/floor-tile-intersection.service.js +13 -8
  58. package/esm2015/app/plugins/core3d/service/floor.service.js +9 -4
  59. package/esm2015/app/plugins/core3d/service/light-presets.service.js +10 -8
  60. package/esm2015/app/plugins/core3d/service/lights.service.js +8 -1
  61. package/esm2015/app/plugins/core3d/service/outline.service.js +4 -6
  62. package/esm2015/app/plugins/core3d/service/post-processing.service.js +148 -51
  63. package/esm2015/app/plugins/core3d/service/scene-event.service.js +14 -7
  64. package/esm2015/app/plugins/core3d/service/scene.service.js +84 -74
  65. package/esm2015/app/plugins/core3d/service/ssr.service.js +2 -53
  66. package/esm2015/app/plugins/lite-selector/lite-selector/component/answers-slideout/answers-slideout.component.js +10 -5
  67. package/esm2015/app/plugins/lite-selector/lite-selector/lite-selector.component.js +2 -2
  68. package/esm2015/app/plugins/model-uploader/model-previewer/model-preview.component.js +281 -166
  69. package/esm2015/app/plugins/model-uploader/model-uploader.module.js +22 -3
  70. package/esm2015/app/plugins/render/render-controls/render-controls.component.js +3 -2
  71. package/esm2015/app/plugins/render/render-dialog/render-dialog.component.js +19 -14
  72. package/esm2015/app/plugins/render/service/new-render.service.js +4 -2
  73. package/esm2015/app/plugins/room-planner/components/custom-cylinder-creator/custom-cylinder-creator.component.js +4 -2
  74. package/esm2015/app/plugins/room-planner/components/custome-shape-creator/custom-shape-creator.component.js +2 -2
  75. package/esm2015/app/plugins/room-planner/components/floorplanner/floorplanner.component.js +29 -15
  76. package/esm2015/app/plugins/room-planner/components/floorplanner/service/room.service.js +5 -2
  77. package/esm2015/app/plugins/room-planner/components/settings/settings.component.js +12 -5
  78. package/esm2015/app/plugins/room-planner/components/texture-editor/texture-editor.component.js +31 -15
  79. package/esm2015/app/plugins/room-planner/room-planner/room-planner.component.js +691 -683
  80. package/esm2015/app/plugins/threedselector/threedselector/service/build-furniture.service.js +43 -41
  81. package/esm2015/app/plugins/threedselector/threedselector/threedselector.component.js +1 -1
  82. package/esm2015/app/plugins/toolbar/draw-dialog/draw-dialog.component.js +26 -20
  83. package/esm2015/app/plugins/toolbar/save-dialog/save-dialog.component.js +2 -2
  84. package/esm2015/app/plugins/toolbar/toolbar/toolbar.component.js +15 -8
  85. package/esm2015/app/shared/loading-overlay/loading-overlay.component.js +4 -2
  86. package/esm2015/app/shared/model-dialog/model-dialog-furniture-list.component.js +3 -3
  87. package/fesm2015/colijnit-homedecorator.js +1656 -1322
  88. package/fesm2015/colijnit-homedecorator.js.map +1 -1
  89. package/package.json +1 -1
@@ -1,17 +1,21 @@
1
1
  import { Injectable } from '@angular/core';
2
- import { Color, DepthFormat, DepthTexture, NearestFilter, RGBAFormat, SRGBColorSpace, UnsignedIntType, WebGLRenderTarget } from 'three';
2
+ import { Color, HalfFloatType, NearestFilter, RGBAFormat, SRGBColorSpace, WebGLRenderTarget } from 'three';
3
3
  import { EffectComposer } from 'three/examples/jsm/postprocessing/EffectComposer';
4
4
  import GUI from 'three/examples/jsm/libs/lil-gui.module.min';
5
5
  import { N8AOPass } from 'n8ao';
6
6
  import { ConfigurationKey } from '../../../core/enum/configuration-key.enum';
7
- import { TAARenderPass } from 'three/examples/jsm/postprocessing/TAARenderPass';
8
7
  import { OutputPass } from 'three/examples/jsm/postprocessing/OutputPass';
9
8
  import { RenderPass } from 'three/examples/jsm/postprocessing/RenderPass';
9
+ import { FXAAShader } from 'three/examples/jsm/shaders/FXAAShader';
10
+ import { ShaderPass } from 'three/examples/jsm/postprocessing/ShaderPass';
11
+ import { BlendShader } from 'three/examples/jsm/shaders/BlendShader';
10
12
  import * as i0 from "@angular/core";
11
13
  import * as i1 from "../../../core/service/configuration.service";
14
+ import * as i2 from "../../../core/service/homedecorator-settings.service";
12
15
  export class PostProcessingService {
13
- constructor(_configurationService) {
16
+ constructor(_configurationService, _settingsService) {
14
17
  this._configurationService = _configurationService;
18
+ this._settingsService = _settingsService;
15
19
  this._effectController = {
16
20
  aoSamples: 32.0,
17
21
  denoiseSamples: 8.0,
@@ -27,13 +31,24 @@ export class PostProcessingService {
27
31
  color: [0, 0, 0],
28
32
  colorMultiply: true,
29
33
  stencil: true,
30
- accumulate: false
34
+ accumulate: false,
35
+ gammaCorrection: false
31
36
  };
32
37
  this._subs = [];
33
38
  this._subs.push(this._configurationService.onChange.subscribe((changed) => {
34
39
  if (ConfigurationKey.ShowPostProcessingSettings in changed) {
35
40
  this._showHideGui(changed[ConfigurationKey.ShowPostProcessingSettings]);
36
41
  }
42
+ }), this._settingsService.settingsLoaded.subscribe(() => {
43
+ this._aoEnabled = this._settingsService.settings.options.aoEnabled;
44
+ this._aaEnabled = this._settingsService.settings.options.aaEnabled;
45
+ }), this._settingsService.settingsChanged.subscribe(() => {
46
+ if (this._aoEnabled !== this._settingsService.settings.options.aoEnabled || this._aaEnabled !== this._settingsService.settings.options.aaEnabled) {
47
+ this._aoEnabled = this._settingsService.settings.options.aoEnabled;
48
+ this._aaEnabled = this._settingsService.settings.options.aaEnabled;
49
+ this._initComposers();
50
+ this.render();
51
+ }
37
52
  }));
38
53
  }
39
54
  ngOnDestroy() {
@@ -43,37 +58,127 @@ export class PostProcessingService {
43
58
  this._renderer = renderer;
44
59
  this._scene = scene;
45
60
  this._camera = camera;
46
- this._renderTarget = new WebGLRenderTarget(width, height, {
61
+ this._width = width;
62
+ this._height = height;
63
+ this._postProcessingGui = new GUI();
64
+ this._postProcessingGui.hide();
65
+ this._renderPass = new RenderPass(this._scene, this._camera);
66
+ this._outputPass = new OutputPass();
67
+ this._initComposers();
68
+ this._createGui();
69
+ // this._createGuiTaaPass();
70
+ }
71
+ setSize(width, height) {
72
+ if (this._aoComposer) {
73
+ this._aoComposer.setSize(width, height);
74
+ }
75
+ if (this._aaComposer) {
76
+ this._aaComposer.setSize(width, height);
77
+ }
78
+ if (this._blendComposer) {
79
+ this._blendComposer.setSize(width, height);
80
+ }
81
+ }
82
+ render() {
83
+ if (this._settingsService.settings.options.aaEnabled && this._aaComposer) {
84
+ this._aaComposer.render();
85
+ }
86
+ if (this._settingsService.settings.options.aoEnabled && this._aoComposer) {
87
+ this._aoComposer.render();
88
+ }
89
+ if (this._blendComposer) {
90
+ this._blendComposer.render();
91
+ }
92
+ }
93
+ showGui() {
94
+ this._postProcessingGui.show(true);
95
+ }
96
+ hideGui() {
97
+ this._postProcessingGui.hide();
98
+ }
99
+ _initComposers() {
100
+ this._initAaComposer();
101
+ this._initAoComposer();
102
+ this._initBlendComposer();
103
+ }
104
+ _initAaComposer() {
105
+ if (this._aaComposer) {
106
+ this._aaComposer.dispose();
107
+ }
108
+ if (!this._aaEnabled) {
109
+ return;
110
+ }
111
+ this._aaRenderTarget = new WebGLRenderTarget(this._width, this._height, {
112
+ samples: 4,
113
+ type: HalfFloatType,
47
114
  minFilter: NearestFilter,
48
115
  magFilter: NearestFilter,
49
116
  format: RGBAFormat,
50
117
  colorSpace: SRGBColorSpace
51
118
  });
52
- this._renderTarget.samples = 4;
53
- this._renderTarget.depthTexture = new DepthTexture(width, height, UnsignedIntType);
54
- this._renderTarget.depthTexture.format = DepthFormat;
55
- this._composer = new EffectComposer(this._renderer, this._renderTarget);
56
- this._n8aoPass = new N8AOPass(scene, camera, width, height);
119
+ this._aaComposer = new EffectComposer(this._renderer, this._aaRenderTarget);
120
+ this._aaComposer.renderToScreen = false;
121
+ this._fxaaPass = new ShaderPass(FXAAShader);
122
+ const pixelRatio = this._renderer.getPixelRatio();
123
+ // this._fxaaPass.material.uniforms[ 'resolution' ].value.x = 1 / (this._width * pixelRatio);
124
+ // this._fxaaPass.material.uniforms[ 'resolution' ].value.y = 1 / (this._height * pixelRatio);
125
+ this._fxaaPass.uniforms['resolution'].value.x = 1 / (this._width * pixelRatio);
126
+ this._fxaaPass.uniforms['resolution'].value.y = 1 / (this._height * pixelRatio);
127
+ // this._taaRenderPass = new TAARenderPass(this._scene, this._camera, 0x000000, 0);
128
+ // this._taaRenderPass.unbiased = true;
129
+ // this._taaRenderPass.sampleLevel = 4;
130
+ this._aaComposer.addPass(this._renderPass);
131
+ // this._aaComposer.addPass(this._taaRenderPass);
132
+ this._aaComposer.addPass(this._fxaaPass);
133
+ this._aaComposer.addPass(this._outputPass);
134
+ }
135
+ _initAoComposer() {
136
+ if (this._aoComposer) {
137
+ this._aoComposer.dispose();
138
+ }
139
+ if (!this._aoEnabled) {
140
+ return;
141
+ }
142
+ this._aoRenderTarget = new WebGLRenderTarget(this._width, this._height, {
143
+ samples: 4,
144
+ type: HalfFloatType,
145
+ minFilter: NearestFilter,
146
+ magFilter: NearestFilter,
147
+ format: RGBAFormat,
148
+ colorSpace: SRGBColorSpace
149
+ });
150
+ this._aoComposer = new EffectComposer(this._renderer, this._aoRenderTarget);
151
+ this._aoComposer.renderToScreen = false;
152
+ this._n8aoPass = new N8AOPass(this._scene, this._camera, this._width, this._height);
57
153
  this._n8aoPass.configuration.gammaCorrection = false;
58
- this._n8aoPass.debugMode = true;
59
- // const smaaPass = new SMAAPass(width, height);
60
- // this._composer.addPass(smaaPass);
61
- // const fxaaPass = new ShaderPass(FXAAShader);
62
- // const pixelRatio = this._renderer.getPixelRatio();
63
- // fxaaPass.material.uniforms[ 'resolution' ].value.x = 1 / (width * pixelRatio);
64
- // fxaaPass.material.uniforms[ 'resolution' ].value.y = 1 / (height * pixelRatio);
65
- this._outputPass = new OutputPass();
66
- this._taaRenderPass = new TAARenderPass(this._scene, this._camera, 0x000000, 0);
67
- this._taaRenderPass.unbiased = false;
68
- this._taaRenderPass.sampleLevel = 4;
69
- this._renderPass = new RenderPass(this._scene, this._camera);
70
- // this._renderPass.enabled = false;
71
- this._composer.addPass(this._renderPass);
72
- this._composer.addPass(this._taaRenderPass);
73
- this._composer.addPass(this._n8aoPass);
74
- this._composer.addPass(this._outputPass);
75
- this._createGui();
76
- this._createGuiTaaPass();
154
+ // this._n8aoPass.debugMode = true;
155
+ // this._aoComposer.addPass(this._renderPass);
156
+ this._aoComposer.addPass(this._n8aoPass);
157
+ this._aoComposer.addPass(this._outputPass);
158
+ }
159
+ _initBlendComposer() {
160
+ if (this._blendShader) {
161
+ this._blendShader.dispose();
162
+ }
163
+ this._blendShader = new ShaderPass(BlendShader);
164
+ if (this._aaEnabled && this._aoEnabled) {
165
+ this._blendShader.uniforms.tDiffuse1.value = this._aaRenderTarget.texture;
166
+ this._blendShader.uniforms.tDiffuse2.value = this._aoRenderTarget.texture;
167
+ }
168
+ else if (this._aoEnabled) {
169
+ this._blendShader.uniforms.tDiffuse1.value = this._aoRenderTarget.texture;
170
+ }
171
+ else if (this._aaEnabled) {
172
+ this._blendShader.uniforms.tDiffuse1.value = this._aaRenderTarget.texture;
173
+ }
174
+ this._blendShader.uniforms.mixRatio.value = 0.2;
175
+ this._blendComposer = new EffectComposer(this._renderer);
176
+ this._blendComposer.renderToScreen = true;
177
+ this._blendComposer.addPass(this._renderPass);
178
+ if (this._aaEnabled || this._aoEnabled) {
179
+ this._blendComposer.addPass(this._blendShader);
180
+ }
181
+ // this._blendComposer.addPass(this._outputPass);
77
182
  }
78
183
  _updatePass() {
79
184
  this._n8aoPass.configuration.aoRadius = this._effectController.aoRadius;
@@ -91,13 +196,12 @@ export class PostProcessingService {
91
196
  this._n8aoPass.configuration.depthAwareUpsampling = this._effectController.depthAwareUpsampling;
92
197
  this._n8aoPass.configuration.colorMultiply = this._effectController.colorMultiply;
93
198
  this._n8aoPass.configuration.accumulate = this._effectController.accumulate;
199
+ this._n8aoPass.configuration.gammaCorrection = this._effectController.gammaCorrection;
94
200
  this.render();
95
201
  }
96
202
  _createGuiTaaPass() {
97
- this._taaPassGui = new GUI();
98
- this._taaPassGui.hide();
99
203
  const param = { TAAEnabled: '1', TAASampleLevel: 0 };
100
- this._taaPassGui.add(param, 'TAAEnabled', {
204
+ this._postProcessingGui.add(param, 'TAAEnabled', {
101
205
  'Disabled': '0',
102
206
  'Enabled': '1'
103
207
  }).onFinishChange(() => {
@@ -106,7 +210,7 @@ export class PostProcessingService {
106
210
  }
107
211
  this.render();
108
212
  });
109
- this._taaPassGui.add(param, 'TAASampleLevel', {
213
+ this._postProcessingGui.add(param, 'TAASampleLevel', {
110
214
  'Level 0: 1 Sample': 0,
111
215
  'Level 1: 2 Samples': 1,
112
216
  'Level 2: 4 Samples': 2,
@@ -119,26 +223,11 @@ export class PostProcessingService {
119
223
  }
120
224
  this.render();
121
225
  });
122
- this._taaPassGui.open();
123
- }
124
- setSize(width, height) {
125
- this._composer.setSize(width, height);
126
- }
127
- render() {
128
- this._composer.render();
129
- }
130
- showGui() {
131
- this._postProcessingGui.show(true);
132
- }
133
- hideGui() {
134
- this._postProcessingGui.hide();
135
226
  }
136
227
  _showHideGui(show) {
137
228
  show ? this.showGui() : this.hideGui();
138
229
  }
139
230
  _createGui() {
140
- this._postProcessingGui = new GUI();
141
- this._postProcessingGui.hide();
142
231
  this._postProcessingGui.add(this._effectController, 'aoSamples', 1.0, 64.0, 1.0).onChange(() => this._updatePass());
143
232
  this._postProcessingGui.add(this._effectController, 'denoiseSamples', 1.0, 64.0, 1.0).onChange(() => this._updatePass());
144
233
  this._postProcessingGui.add(this._effectController, 'denoiseRadius', 0.0, 24.0, 0.01).onChange(() => this._updatePass());
@@ -165,6 +254,9 @@ export class PostProcessingService {
165
254
  df.updateDisplay();
166
255
  this._updatePass();
167
256
  });
257
+ const blendShaderParams = {
258
+ mixRatio: 0.5
259
+ };
168
260
  this._postProcessingGui.add(this._effectController, 'halfRes').onChange(() => this._updatePass());
169
261
  this._postProcessingGui.add(this._effectController, 'transparencyAware').onChange(() => this._updatePass());
170
262
  this._postProcessingGui.add(this._effectController, 'depthAwareUpsampling').onChange(() => this._updatePass());
@@ -173,15 +265,20 @@ export class PostProcessingService {
173
265
  this._postProcessingGui.addColor(this._effectController, 'color').onChange(() => this._updatePass());
174
266
  this._postProcessingGui.add(this._effectController, 'colorMultiply').onChange(() => this._updatePass());
175
267
  this._postProcessingGui.add(this._effectController, 'accumulate').onChange(() => this._updatePass());
268
+ this._postProcessingGui.add(this._effectController, 'gammaCorrection').onChange(() => this._updatePass());
176
269
  this._postProcessingGui.add(this._effectController, 'renderMode', ['Combined', 'AO', 'No AO', 'Split', 'Split AO']).onChange(() => this._updatePass());
270
+ this._postProcessingGui.add(blendShaderParams, 'mixRatio', 0.0, 10.0, 0.01).onChange(() => {
271
+ this._blendShader.uniforms.mixRatio.value = blendShaderParams.mixRatio;
272
+ this.render();
273
+ });
177
274
  }
178
275
  }
179
- PostProcessingService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PostProcessingService, deps: [{ token: i1.ConfigurationService }], target: i0.ɵɵFactoryTarget.Injectable });
276
+ PostProcessingService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PostProcessingService, deps: [{ token: i1.ConfigurationService }, { token: i2.HomedecoratorSettingsService }], target: i0.ɵɵFactoryTarget.Injectable });
180
277
  PostProcessingService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PostProcessingService, providedIn: 'root' });
181
278
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PostProcessingService, decorators: [{
182
279
  type: Injectable,
183
280
  args: [{
184
281
  providedIn: 'root'
185
282
  }]
186
- }], ctorParameters: function () { return [{ type: i1.ConfigurationService }]; } });
187
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zdC1wcm9jZXNzaW5nLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvY2xpZW50L2FwcC9wbHVnaW5zL2NvcmUzZC9zZXJ2aWNlL3Bvc3QtcHJvY2Vzc2luZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQVksTUFBTSxlQUFlLENBQUM7QUFDcEQsT0FBTyxFQUNMLEtBQUssRUFDTCxXQUFXLEVBQUUsWUFBWSxFQUN6QixhQUFhLEVBRWIsVUFBVSxFQUVWLGNBQWMsRUFBRSxlQUFlLEVBRS9CLGlCQUFpQixFQUNsQixNQUFNLE9BQU8sQ0FBQztBQUNmLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxrREFBa0QsQ0FBQztBQUNoRixPQUFPLEdBQUcsTUFBTSw0Q0FBNEMsQ0FBQztBQUM3RCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRTlCLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDJDQUEyQyxDQUFDO0FBRzNFLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxpREFBaUQsQ0FBQztBQUM5RSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sOENBQThDLENBQUM7QUFDeEUsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLDhDQUE4QyxDQUFDOzs7QUFReEUsTUFBTSxPQUFPLHFCQUFxQjtJQWdDaEMsWUFDVSxxQkFBMkM7UUFBM0MsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUFzQjtRQXRCN0Msc0JBQWlCLEdBQUc7WUFDMUIsU0FBUyxFQUFFLElBQUk7WUFDZixjQUFjLEVBQUUsR0FBRztZQUNuQixhQUFhLEVBQUUsSUFBSTtZQUNuQixRQUFRLEVBQUUsR0FBRztZQUNiLGVBQWUsRUFBRSxHQUFHO1lBQ3BCLGlCQUFpQixFQUFFLEtBQUs7WUFDeEIsT0FBTyxFQUFFLEtBQUs7WUFDZCxvQkFBb0IsRUFBRSxJQUFJO1lB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RUFBRSxDQUFDLENBQUM7UUFDckgsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ3JHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLGVBQWUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUN4RyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxZQUFZLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDckcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsWUFBWSxFQUFFLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQ3pKLENBQUM7O21IQTNNVSxxQkFBcUI7dUhBQXJCLHFCQUFxQixjQUZwQixNQUFNOzRGQUVQLHFCQUFxQjtrQkFIakMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGUsIE9uRGVzdHJveX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgQ29sb3IsXHJcbiAgRGVwdGhGb3JtYXQsIERlcHRoVGV4dHVyZSxcclxuICBOZWFyZXN0RmlsdGVyLFxyXG4gIFBlcnNwZWN0aXZlQ2FtZXJhLFxyXG4gIFJHQkFGb3JtYXQsXHJcbiAgU2NlbmUsXHJcbiAgU1JHQkNvbG9yU3BhY2UsIFVuc2lnbmVkSW50VHlwZSxcclxuICBXZWJHTFJlbmRlcmVyLFxyXG4gIFdlYkdMUmVuZGVyVGFyZ2V0XHJcbn0gZnJvbSAndGhyZWUnO1xyXG5pbXBvcnQge0VmZmVjdENvbXBvc2VyfSBmcm9tICd0aHJlZS9leGFtcGxlcy9qc20vcG9zdHByb2Nlc3NpbmcvRWZmZWN0Q29tcG9zZXInO1xyXG5pbXBvcnQgR1VJIGZyb20gJ3RocmVlL2V4YW1wbGVzL2pzbS9saWJzL2xpbC1ndWkubW9kdWxlLm1pbic7XHJcbmltcG9ydCB7TjhBT1Bhc3N9IGZyb20gJ244YW8nO1xyXG5pbXBvcnQge0NvbmZpZ3VyYXRpb25EYXRhfSBmcm9tICcuLi8uLi8uLi9jb3JlL2ludGVyZmFjZS9jb25maWd1cmF0aW9uLWRhdGEuaW50ZXJmYWNlJztcclxuaW1wb3J0IHtDb25maWd1cmF0aW9uS2V5fSBmcm9tICcuLi8uLi8uLi9jb3JlL2VudW0vY29uZmlndXJhdGlvbi1rZXkuZW51bSc7XHJcbmltcG9ydCB7U3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtDb25maWd1cmF0aW9uU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL2NvbmZpZ3VyYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7VEFBUmVuZGVyUGFzc30gZnJvbSAndGhyZWUvZXhhbXBsZXMvanNtL3Bvc3Rwcm9jZXNzaW5nL1RBQVJlbmRlclBhc3MnO1xyXG5pbXBvcnQge091dHB1dFBhc3N9IGZyb20gJ3RocmVlL2V4YW1wbGVzL2pzbS9wb3N0cHJvY2Vzc2luZy9PdXRwdXRQYXNzJztcclxuaW1wb3J0IHtSZW5kZXJQYXNzfSBmcm9tICd0aHJlZS9leGFtcGxlcy9qc20vcG9zdHByb2Nlc3NpbmcvUmVuZGVyUGFzcyc7XHJcbmltcG9ydCB7RlhBQVNoYWRlcn0gZnJvbSAndGhyZWUvZXhhbXBsZXMvanNtL3NoYWRlcnMvRlhBQVNoYWRlcic7XHJcbmltcG9ydCB7U2hhZGVyUGFzc30gZnJvbSAndGhyZWUvZXhhbXBsZXMvanNtL3Bvc3Rwcm9jZXNzaW5nL1NoYWRlclBhc3MnO1xyXG5pbXBvcnQge1NNQUFQYXNzfSBmcm9tICd0aHJlZS9leGFtcGxlcy9qc20vcG9zdHByb2Nlc3NpbmcvU01BQVBhc3MnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgUG9zdFByb2Nlc3NpbmdTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcclxuXHJcbiAgcHJpdmF0ZSBfY29tcG9zZXI6IEVmZmVjdENvbXBvc2VyO1xyXG4gIHByaXZhdGUgX244YW9QYXNzOiBOOEFPUGFzcztcclxuICBwcml2YXRlIF90YWFSZW5kZXJQYXNzOiBUQUFSZW5kZXJQYXNzO1xyXG4gIHByaXZhdGUgX291dHB1dFBhc3M6IE91dHB1dFBhc3M7XHJcbiAgcHJpdmF0ZSBfcmVuZGVyUGFzczogUmVuZGVyUGFzcztcclxuICBwcml2YXRlIF9zY2VuZTogU2NlbmU7XHJcbiAgcHJpdmF0ZSBfcmVuZGVyZXI6IFdlYkdMUmVuZGVyZXI7XHJcbiAgcHJpdmF0ZSBfY2FtZXJhOiBQZXJzcGVjdGl2ZUNhbWVyYTtcclxuICBwcml2YXRlIF9yZW5kZXJUYXJnZXQ6IFdlYkdMUmVuZGVyVGFyZ2V0O1xyXG4gIHByaXZhdGUgX2VmZmVjdENvbnRyb2xsZXIgPSB7XHJcbiAgICBhb1NhbXBsZXM6IDMyLjAsXHJcbiAgICBkZW5vaXNlU2FtcGxlczogOC4wLFxyXG4gICAgZGVub2lzZVJhZGl1czogMTIuMCxcclxuICAgIGFvUmFkaXVzOiA1LjAsXHJcbiAgICBkaXN0YW5jZUZhbGxvZmY6IDEuMCxcclxuICAgIHNjcmVlblNwYWNlUmFkaXVzOiBmYWxzZSxcclxuICAgIGhhbGZSZXM6IGZhbHNlLFxyXG4gICAgZGVwdGhBd2FyZVVwc2FtcGxpbmc6IHRydWUsXHJcbiAgICB0cmFuc3BhcmVuY3lBd2FyZTogdHJ1ZSxcclxuICAgIGludGVuc2l0eTogMi41LFxyXG4gICAgcmVuZGVyTW9kZTogJ0NvbWJpbmVkJyxcclxuICAgIGNvbG9yOiBbMCwgMCwgMF0sXHJcbiAgICBjb2xvck11bHRpcGx5OiB0cnVlLFxyXG4gICAgc3RlbmNpbDogdHJ1ZSxcclxuICAgIGFjY3VtdWxhdGU6IGZhbHNlXHJcbiAgfTtcclxuICBwcml2YXRlIF9wb3N0UHJvY2Vzc2luZ0d1aTogR1VJO1xyXG4gIHByaXZhdGUgX3RhYVBhc3NHdWk6IEdVSTtcclxuICBwcml2YXRlIF9zdWJzOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgX2NvbmZpZ3VyYXRpb25TZXJ2aWNlOiBDb25maWd1cmF0aW9uU2VydmljZVxyXG4gICkge1xyXG4gICAgdGhpcy5fc3Vicy5wdXNoKFxyXG4gICAgICB0aGlzLl9jb25maWd1cmF0aW9uU2VydmljZS5vbkNoYW5nZS5zdWJzY3JpYmUoKGNoYW5nZWQ6IENvbmZpZ3VyYXRpb25EYXRhKSA9PiB7XHJcbiAgICAgICAgaWYgKENvbmZpZ3VyYXRpb25LZXkuU2hvd1Bvc3RQcm9jZXNzaW5nU2V0dGluZ3MgaW4gY2hhbmdlZCkge1xyXG4gICAgICAgICAgdGhpcy5fc2hvd0hpZGVHdWkoY2hhbmdlZFtDb25maWd1cmF0aW9uS2V5LlNob3dQb3N0UHJvY2Vzc2luZ1NldHRpbmdzXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy5fc3Vicy5mb3JFYWNoKHMgPT4gcy51bnN1YnNjcmliZSgpKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBpbml0KHJlbmRlcmVyOiBXZWJHTFJlbmRlcmVyLCBzY2VuZTogU2NlbmUsIGNhbWVyYTogUGVyc3BlY3RpdmVDYW1lcmEsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLl9yZW5kZXJlciA9IHJlbmRlcmVyO1xyXG4gICAgdGhpcy5fc2NlbmUgPSBzY2VuZTtcclxuICAgIHRoaXMuX2NhbWVyYSA9IGNhbWVyYTtcclxuXHJcbiAgICB0aGlzLl9yZW5kZXJUYXJnZXQgPSBuZXcgV2ViR0xSZW5kZXJUYXJnZXQod2lkdGgsIGhlaWdodCwge1xyXG4gICAgICBtaW5GaWx0ZXI6IE5lYXJlc3RGaWx0ZXIsXHJcbiAgICAgIG1hZ0ZpbHRlcjogTmVhcmVzdEZpbHRlcixcclxuICAgICAgZm9ybWF0OiBSR0JBRm9ybWF0LFxyXG4gICAgICBjb2xvclNwYWNlOiBTUkdCQ29sb3JTcGFjZVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLl9yZW5kZXJUYXJnZXQuc2FtcGxlcyA9IDQ7XHJcbiAgICB0aGlzLl9yZW5kZXJUYXJnZXQuZGVwdGhUZXh0dXJlID0gbmV3IERlcHRoVGV4dHVyZSh3aWR0aCwgaGVpZ2h0LCBVbnNpZ25lZEludFR5cGUpO1xyXG4gICAgdGhpcy5fcmVuZGVyVGFyZ2V0LmRlcHRoVGV4dHVyZS5mb3JtYXQgPSBEZXB0aEZvcm1hdDtcclxuICAgIHRoaXMuX2NvbXBvc2VyID0gbmV3IEVmZmVjdENvbXBvc2VyKHRoaXMuX3JlbmRlcmVyLCB0aGlzLl9yZW5kZXJUYXJnZXQpO1xyXG4gICAgdGhpcy5fbjhhb1Bhc3MgPSBuZXcgTjhBT1Bhc3Moc2NlbmUsIGNhbWVyYSwgd2lkdGgsIGhlaWdodCk7XHJcbiAgICB0aGlzLl9uOGFvUGFzcy5jb25maWd1cmF0aW9uLmdhbW1hQ29ycmVjdGlvbiA9IGZhbHNlO1xyXG4gICAgdGhpcy5fbjhhb1Bhc3MuZGVidWdNb2RlID0gdHJ1ZTtcclxuICAgIC8vIGNvbnN0IHNtYWFQYXNzID0gbmV3IFNNQUFQYXNzKHdpZHRoLCBoZWlnaHQpO1xyXG4gICAgLy8gdGhpcy5fY29tcG9zZXIuYWRkUGFzcyhzbWFhUGFzcyk7XHJcblxyXG4gICAgLy8gY29uc3QgZnhhYVBhc3MgPSBuZXcgU2hhZGVyUGFzcyhGWEFBU2hhZGVyKTtcclxuICAgIC8vIGNvbnN0IHBpeGVsUmF0aW8gPSB0aGlzLl9yZW5kZXJlci5nZXRQaXhlbFJhdGlvKCk7XHJcbiAgICAvLyBmeGFhUGFzcy5tYXRlcmlhbC51bmlmb3Jtc1sgJ3Jlc29sdXRpb24nIF0udmFsdWUueCA9IDEgLyAod2lkdGggKiBwaXhlbFJhdGlvKTtcclxuICAgIC8vIGZ4YWFQYXNzLm1hdGVyaWFsLnVuaWZvcm1zWyAncmVzb2x1dGlvbicgXS52YWx1ZS55ID0gMSAvIChoZWlnaHQgKiBwaXhlbFJhdGlvKTtcclxuXHJcbiAgICB0aGlzLl9vdXRwdXRQYXNzID0gbmV3IE91dHB1dFBhc3MoKTtcclxuXHJcbiAgICB0aGlzLl90YWFSZW5kZXJQYXNzID0gbmV3IFRBQVJlbmRlclBhc3ModGhpcy5fc2NlbmUsIHRoaXMuX2NhbWVyYSwgMHgwMDAwMDAsIDApO1xyXG4gICAgdGhpcy5fdGFhUmVuZGVyUGFzcy51bmJpYXNlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5fdGFhUmVuZGVyUGFzcy5zYW1wbGVMZXZlbCA9IDQ7XHJcblxyXG4gICAgdGhpcy5fcmVuZGVyUGFzcyA9IG5ldyBSZW5kZXJQYXNzKHRoaXMuX3NjZW5lLCB0aGlzLl9jYW1lcmEpO1xyXG4gICAgLy8gdGhpcy5fcmVuZGVyUGFzcy5lbmFibGVkID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy5fY29tcG9zZXIuYWRkUGFzcyh0aGlzLl9yZW5kZXJQYXNzKTtcclxuICAgIHRoaXMuX2NvbXBvc2VyLmFkZFBhc3ModGhpcy5fdGFhUmVuZGVyUGFzcyk7XHJcbiAgICB0aGlzLl9jb21wb3Nlci5hZGRQYXNzKHRoaXMuX244YW9QYXNzKTtcclxuICAgIHRoaXMuX2NvbXBvc2VyLmFkZFBhc3ModGhpcy5fb3V0cHV0UGFzcyk7XHJcblxyXG4gICAgdGhpcy5fY3JlYXRlR3VpKCk7XHJcbiAgICB0aGlzLl9jcmVhdGVHdWlUYWFQYXNzKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF91cGRhdGVQYXNzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fbjhhb1Bhc3MuY29uZmlndXJhdGlvbi5hb1JhZGl1cyA9IHRoaXMuX2VmZmVjdENvbnRyb2xsZXIuYW9SYWRpdXM7XHJcbiAgICB0aGlzLl9uOGFvUGFzcy5jb25maWd1cmF0aW9uLmRpc3RhbmNlRmFsbG9mZiA9IHRoaXMuX2VmZmVjdENvbnRyb2xsZXIuZGlzdGFuY2VGYWxsb2ZmO1xyXG4gICAgdGhpcy5fbjhhb1Bhc3MuY29uZmlndXJhdGlvbi50cmFuc3BhcmVuY3lBd2FyZSA9IHRoaXMuX2VmZmVjdENvbnRyb2xsZXIudHJhbnNwYXJlbmN5QXdhcmU7XHJcbiAgICB0aGlzLl9uOGFvUGFzcy5jb25maWd1cmF0aW9uLmludGVuc2l0eSA9IHRoaXMuX2VmZmVjdENvbnRyb2xsZXIuaW50ZW5zaXR5O1xyXG4gICAgdGhpcy5fbjhhb1Bhc3MuY29uZmlndXJhdGlvbi5hb1NhbXBsZXMgPSB0aGlzLl9lZmZlY3RDb250cm9sbGVyLmFvU2FtcGxlcztcclxuICAgIHRoaXMuX244YW9QYXNzLmNvbmZpZ3VyYXRpb24uZGVub2lzZVJhZGl1cyA9IHRoaXMuX2VmZmVjdENvbnRyb2xsZXIuZGVub2lzZVJhZGl1cztcclxuICAgIHRoaXMuX244YW9QYXNzLmNvbmZpZ3VyYXRpb24uZGVub2lzZVNhbXBsZXMgPSB0aGlzLl9lZmZlY3RDb250cm9sbGVyLmRlbm9pc2VTYW1wbGVzO1xyXG4gICAgdGhpcy5fbjhhb1Bhc3MuY29uZmlndXJhdGlvbi5zdGVuY2lsID0gdGhpcy5fZWZmZWN0Q29udHJvbGxlci5zdGVuY2lsO1xyXG4gICAgdGhpcy5fbjhhb1Bhc3MuY29uZmlndXJhdGlvbi5yZW5kZXJNb2RlID0gWydDb21iaW5lZCcsICdBTycsICdObyBBTycsICdTcGxpdCcsICdTcGxpdCBBTyddLmluZGV4T2YodGhpcy5fZWZmZWN0Q29udHJvbGxlci5yZW5kZXJNb2RlKTtcclxuICAgIHRoaXMuX244YW9QYXNzLmNvbmZpZ3VyYXRpb24uY29sb3IgPSBuZXcgQ29sb3IodGhpcy5fZWZmZWN0Q29udHJvbGxlci5jb2xvclswXSwgdGhpcy5fZWZmZWN0Q29udHJvbGxlci5jb2xvclsxXSwgdGhpcy5fZWZmZWN0Q29udHJvbGxlci5jb2xvclsyXSk7XHJcbiAgICB0aGlzLl9uOGFvUGFzcy5jb25maWd1cmF0aW9uLnNjcmVlblNwYWNlUmFkaXVzID0gdGhpcy5fZWZmZWN0Q29udHJvbGxlci5zY3JlZW5TcGFjZVJhZGl1cztcclxuICAgIHRoaXMuX244YW9QYXNzLmNvbmZpZ3VyYXRpb24uaGFsZlJlcyA9IHRoaXMuX2VmZmVjdENvbnRyb2xsZXIuaGFsZlJlcztcclxuICAgIHRoaXMuX244YW9QYXNzLmNvbmZpZ3VyYXRpb24uZGVwdGhBd2FyZVVwc2FtcGxpbmcgPSB0aGlzLl9lZmZlY3RDb250cm9sbGVyLmRlcHRoQXdhcmVVcHNhbXBsaW5nO1xyXG4gICAgdGhpcy5fbjhhb1Bhc3MuY29uZmlndXJhdGlvbi5jb2xvck11bHRpcGx5ID0gdGhpcy5fZWZmZWN0Q29udHJvbGxlci5jb2xvck11bHRpcGx5O1xyXG4gICAgdGhpcy5fbjhhb1Bhc3MuY29uZmlndXJhdGlvbi5hY2N1bXVsYXRlID0gdGhpcy5fZWZmZWN0Q29udHJvbGxlci5hY2N1bXVsYXRlO1xyXG4gICAgdGhpcy5yZW5kZXIoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NyZWF0ZUd1aVRhYVBhc3MoKTogdm9pZCB7XHJcbiAgICB0aGlzLl90YWFQYXNzR3VpID0gbmV3IEdVSSgpO1xyXG4gICAgdGhpcy5fdGFhUGFzc0d1aS5oaWRlKCk7XHJcbiAgICBjb25zdCBwYXJhbSA9IHsgVEFBRW5hYmxlZDogJzEnLCBUQUFTYW1wbGVMZXZlbDogMCB9O1xyXG4gICAgdGhpcy5fdGFhUGFzc0d1aS5hZGQoIHBhcmFtLCAnVEFBRW5hYmxlZCcsIHtcclxuICAgICAgJ0Rpc2FibGVkJzogJzAnLFxyXG4gICAgICAnRW5hYmxlZCc6ICcxJ1xyXG4gICAgfSApLm9uRmluaXNoQ2hhbmdlKCAoKSA9PiB7XHJcblxyXG4gICAgICBpZiAoIHRoaXMuX3RhYVJlbmRlclBhc3MgKSB7XHJcbiAgICAgICAgdGhpcy5fdGFhUmVuZGVyUGFzcy5lbmFibGVkID0gKCBwYXJhbS5UQUFFbmFibGVkID09PSAnMScgKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnJlbmRlcigpO1xyXG4gICAgfSApO1xyXG5cclxuICAgIHRoaXMuX3RhYVBhc3NHdWkuYWRkKCBwYXJhbSwgJ1RBQVNhbXBsZUxldmVsJywge1xyXG4gICAgICAnTGV2ZWwgMDogMSBTYW1wbGUnOiAwLFxyXG4gICAgICAnTGV2ZWwgMTogMiBTYW1wbGVzJzogMSxcclxuICAgICAgJ0xldmVsIDI6IDQgU2FtcGxlcyc6IDIsXHJcbiAgICAgICdMZXZlbCAzOiA4IFNhbXBsZXMnOiAzLFxyXG4gICAgICAnTGV2ZWwgNDogMTYgU2FtcGxlcyc6IDQsXHJcbiAgICAgICdMZXZlbCA1OiAzMiBTYW1wbGVzJzogNVxyXG4gICAgfSApLm9uRmluaXNoQ2hhbmdlKCAoKSA9PiB7XHJcblxyXG4gICAgICBpZiAoIHRoaXMuX3RhYVJlbmRlclBhc3MgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuX3RhYVJlbmRlclBhc3Muc2FtcGxlTGV2ZWwgPSBwYXJhbS5UQUFTYW1wbGVMZXZlbDtcclxuXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5yZW5kZXIoKTtcclxuICAgIH0gKTtcclxuXHJcbiAgICB0aGlzLl90YWFQYXNzR3VpLm9wZW4oKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRTaXplKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLl9jb21wb3Nlci5zZXRTaXplKHdpZHRoLCBoZWlnaHQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlbmRlcigpOiB2b2lkIHtcclxuICAgIHRoaXMuX2NvbXBvc2VyLnJlbmRlcigpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNob3dHdWkoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9wb3N0UHJvY2Vzc2luZ0d1aS5zaG93KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGhpZGVHdWkoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9wb3N0UHJvY2Vzc2luZ0d1aS5oaWRlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zaG93SGlkZUd1aShzaG93OiBib29sZWFuKTogdm9pZCB7XHJcbiAgICBzaG93ID8gdGhpcy5zaG93R3VpKCkgOiB0aGlzLmhpZGVHdWkoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NyZWF0ZUd1aSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3Bvc3RQcm9jZXNzaW5nR3VpID0gbmV3IEdVSSgpO1xyXG4gICAgdGhpcy5fcG9zdFByb2Nlc3NpbmdHdWkuaGlkZSgpO1xyXG4gICAgdGhpcy5fcG9zdFByb2Nlc3NpbmdHdWkuYWRkKHRoaXMuX2VmZmVjdENvbnRyb2xsZXIsICdhb1NhbXBsZXMnLCAxLjAsIDY0LjAsIDEuMCkub25DaGFuZ2UoKCkgPT4gdGhpcy5fdXBkYXRlUGFzcygpKTtcclxuICAgIHRoaXMuX3Bvc3RQcm9jZXNzaW5nR3VpLmFkZCh0aGlzLl9lZmZlY3RDb250cm9sbGVyLCAnZGVub2lzZVNhbXBsZXMnLCAxLjAsIDY0LjAsIDEuMCkub25DaGFuZ2UoKCkgPT4gdGhpcy5fdXBkYXRlUGFzcygpKTtcclxuICAgIHRoaXMuX3Bvc3RQcm9jZXNzaW5nR3VpLmFkZCh0aGlzLl9lZmZlY3RDb250cm9sbGVyLCAnZGVub2lzZVJhZGl1cycsIDAuMCwgMjQuMCwgMC4wMSkub25DaGFuZ2UoKCkgPT4gdGhpcy5fdXBkYXRlUGFzcygpKTtcclxuICAgIGNvbnN0IGFvciA9IHRoaXMuX3Bvc3RQcm9jZXNzaW5nR3VpLmFkZCh0aGlzLl9lZmZlY3RDb250cm9sbGVyLCAnYW9SYWRpdXMnLCAxLjAsIDEwLjAsIDAuMDEpLm9uQ2hhbmdlKCgpID0+IHRoaXMuX3VwZGF0ZVBhc3MoKSk7XHJcbiAgICBjb25zdCBkZiA9IHRoaXMuX3Bvc3RQcm9jZXNzaW5nR3VpLmFkZCh0aGlzLl9lZmZlY3RDb250cm9sbGVyLCAnZGlzdGFuY2VGYWxsb2ZmJywgMC4wLCAxMC4wLCAwLjAxKS5vbkNoYW5nZSgoKSA9PiB0aGlzLl91cGRhdGVQYXNzKCkpO1xyXG4gICAgdGhpcy5fcG9zdFByb2Nlc3NpbmdHdWkuYWRkKHRoaXMuX2VmZmVjdENvbnRyb2xsZXIsICdzY3JlZW5TcGFjZVJhZGl1cycpLm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICB0aGlzLl9lZmZlY3RDb250cm9sbGVyLmFvUmFkaXVzID0gNDguMDtcclxuICAgICAgICB0aGlzLl9lZmZlY3RDb250cm9sbGVyLmRpc3RhbmNlRmFsbG9mZiA9IDAuMjtcclxuICAgICAgICBhb3IuX21pbiA9IDA7XHJcbiAgICAgICAgYW9yLl9tYXggPSA2NDtcclxuICAgICAgICBkZi5fbWluID0gMDtcclxuICAgICAgICBkZi5fbWF4ID0gMTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLl9lZmZlY3RDb250cm9sbGVyLmFvUmFkaXVzID0gNS4wO1xyXG4gICAgICAgIHRoaXMuX2VmZmVjdENvbnRyb2xsZXIuZGlzdGFuY2VGYWxsb2ZmID0gMS4wO1xyXG4gICAgICAgIGFvci5fbWluID0gMTtcclxuICAgICAgICBhb3IuX21heCA9IDEwO1xyXG4gICAgICAgIGRmLl9taW4gPSAwO1xyXG4gICAgICAgIGRmLl9tYXggPSAxMDtcclxuICAgICAgfVxyXG4gICAgICBhb3IudXBkYXRlRGlzcGxheSgpO1xyXG4gICAgICBkZi51cGRhdGVEaXNwbGF5KCk7XHJcbiAgICAgIHRoaXMuX3VwZGF0ZVBhc3MoKTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5fcG9zdFByb2Nlc3NpbmdHdWkuYWRkKHRoaXMuX2VmZmVjdENvbnRyb2xsZXIsICdoYWxmUmVzJykub25DaGFuZ2UoKCkgPT4gdGhpcy5fdXBkYXRlUGFzcygpKTtcclxuICAgIHRoaXMuX3Bvc3RQcm9jZXNzaW5nR3VpLmFkZCh0aGlzLl9lZmZlY3RDb250cm9sbGVyLCAndHJhbnNwYXJlbmN5QXdhcmUnKS5vbkNoYW5nZSgoKSA9PiB0aGlzLl91cGRhdGVQYXNzKCkpO1xyXG4gICAgdGhpcy5fcG9zdFByb2Nlc3NpbmdHdWkuYWRkKHRoaXMuX2VmZmVjdENvbnRyb2xsZXIsICdkZXB0aEF3YXJlVXBzYW1wbGluZycpLm9uQ2hhbmdlKCgpID0+IHRoaXMuX3VwZGF0ZVBhc3MoKSk7XHJcbiAgICB0aGlzLl9wb3N0UHJvY2Vzc2luZ0d1aS5hZGQodGhpcy5fZWZmZWN0Q29udHJvbGxlciwgJ3N0ZW5jaWwnKS5vbkNoYW5nZSgoKSA9PiB0aGlzLl91cGRhdGVQYXNzKCkpO1xyXG4gICAgdGhpcy5fcG9zdFByb2Nlc3NpbmdHdWkuYWRkKHRoaXMuX2VmZmVjdENvbnRyb2xsZXIsICdpbnRlbnNpdHknLCAwLjAsIDEwLjAsIDAuMDEpLm9uQ2hhbmdlKCgpID0+IHRoaXMuX3VwZGF0ZVBhc3MoKSk7XHJcbiAgICB0aGlzLl9wb3N0UHJvY2Vzc2luZ0d1aS5hZGRDb2xvcih0aGlzLl9lZmZlY3RDb250cm9sbGVyLCAnY29sb3InKS5vbkNoYW5nZSgoKSA9PiB0aGlzLl91cGRhdGVQYXNzKCkpO1xyXG4gICAgdGhpcy5fcG9zdFByb2Nlc3NpbmdHdWkuYWRkKHRoaXMuX2VmZmVjdENvbnRyb2xsZXIsICdjb2xvck11bHRpcGx5Jykub25DaGFuZ2UoKCkgPT4gdGhpcy5fdXBkYXRlUGFzcygpKTtcclxuICAgIHRoaXMuX3Bvc3RQcm9jZXNzaW5nR3VpLmFkZCh0aGlzLl9lZmZlY3RDb250cm9sbGVyLCAnYWNjdW11bGF0ZScpLm9uQ2hhbmdlKCgpID0+IHRoaXMuX3VwZGF0ZVBhc3MoKSk7XHJcbiAgICB0aGlzLl9wb3N0UHJvY2Vzc2luZ0d1aS5hZGQodGhpcy5fZWZmZWN0Q29udHJvbGxlciwgJ3JlbmRlck1vZGUnLCBbJ0NvbWJpbmVkJywgJ0FPJywgJ05vIEFPJywgJ1NwbGl0JywgJ1NwbGl0IEFPJ10pLm9uQ2hhbmdlKCgpID0+IHRoaXMuX3VwZGF0ZVBhc3MoKSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
283
+ }], ctorParameters: function () { return [{ type: i1.ConfigurationService }, { type: i2.HomedecoratorSettingsService }]; } });
284
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zdC1wcm9jZXNzaW5nLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvY2xpZW50L2FwcC9wbHVnaW5zL2NvcmUzZC9zZXJ2aWNlL3Bvc3QtcHJvY2Vzc2luZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQVksTUFBTSxlQUFlLENBQUM7QUFDcEQsT0FBTyxFQUFDLEtBQUssRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFxQixVQUFVLEVBQVMsY0FBYyxFQUFpQixpQkFBaUIsRUFBQyxNQUFNLE9BQU8sQ0FBQztBQUNsSixPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sa0RBQWtELENBQUM7QUFDaEYsT0FBTyxHQUFHLE1BQU0sNENBQTRDLENBQUM7QUFDN0QsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUU5QixPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSwyQ0FBMkMsQ0FBQztBQUkzRSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sOENBQThDLENBQUM7QUFDeEUsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLDhDQUE4QyxDQUFDO0FBQ3hFLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSx1Q0FBdUMsQ0FBQztBQUNqRSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sOENBQThDLENBQUM7QUFDeEUsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHdDQUF3QyxDQUFDOzs7O0FBTW5FLE1BQU0sT0FBTyxxQkFBcUI7SUErQ2hDLFlBQ1UscUJBQTJDLEVBQzNDLGdCQUE4QztRQUQ5QywwQkFBcUIsR0FBckIscUJBQXFCLENBQXNCO1FBQzNDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBOEI7UUF2QmhELHNCQUFpQixHQUFHO1lBQzFCLFNBQVMsRUFBRSxJQUFJO1lBQ2YsY0FBYyxFQUFFLEdBQUc7WUFDbkIsYUFBYSxFQUFFLElB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QUFFLENBQUMsQ0FBQztRQUN4RyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxZQUFZLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDckcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsaUJBQWlCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDMUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsWUFBWSxFQUFFLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZKLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUN4RixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxHQUFHLGlCQUFpQixDQUFDLFFBQVEsQ0FBQztZQUN2RSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDaEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOzttSEF4VFUscUJBQXFCO3VIQUFyQixxQkFBcUIsY0FGcEIsTUFBTTs0RkFFUCxxQkFBcUI7a0JBSGpDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlLCBPbkRlc3Ryb3l9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0NvbG9yLCBIYWxmRmxvYXRUeXBlLCBOZWFyZXN0RmlsdGVyLCBQZXJzcGVjdGl2ZUNhbWVyYSwgUkdCQUZvcm1hdCwgU2NlbmUsIFNSR0JDb2xvclNwYWNlLCBXZWJHTFJlbmRlcmVyLCBXZWJHTFJlbmRlclRhcmdldH0gZnJvbSAndGhyZWUnO1xyXG5pbXBvcnQge0VmZmVjdENvbXBvc2VyfSBmcm9tICd0aHJlZS9leGFtcGxlcy9qc20vcG9zdHByb2Nlc3NpbmcvRWZmZWN0Q29tcG9zZXInO1xyXG5pbXBvcnQgR1VJIGZyb20gJ3RocmVlL2V4YW1wbGVzL2pzbS9saWJzL2xpbC1ndWkubW9kdWxlLm1pbic7XHJcbmltcG9ydCB7TjhBT1Bhc3N9IGZyb20gJ244YW8nO1xyXG5pbXBvcnQge0NvbmZpZ3VyYXRpb25EYXRhfSBmcm9tICcuLi8uLi8uLi9jb3JlL2ludGVyZmFjZS9jb25maWd1cmF0aW9uLWRhdGEuaW50ZXJmYWNlJztcclxuaW1wb3J0IHtDb25maWd1cmF0aW9uS2V5fSBmcm9tICcuLi8uLi8uLi9jb3JlL2VudW0vY29uZmlndXJhdGlvbi1rZXkuZW51bSc7XHJcbmltcG9ydCB7U3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtDb25maWd1cmF0aW9uU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL2NvbmZpZ3VyYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7VEFBUmVuZGVyUGFzc30gZnJvbSAndGhyZWUvZXhhbXBsZXMvanNtL3Bvc3Rwcm9jZXNzaW5nL1RBQVJlbmRlclBhc3MnO1xyXG5pbXBvcnQge091dHB1dFBhc3N9IGZyb20gJ3RocmVlL2V4YW1wbGVzL2pzbS9wb3N0cHJvY2Vzc2luZy9PdXRwdXRQYXNzJztcclxuaW1wb3J0IHtSZW5kZXJQYXNzfSBmcm9tICd0aHJlZS9leGFtcGxlcy9qc20vcG9zdHByb2Nlc3NpbmcvUmVuZGVyUGFzcyc7XHJcbmltcG9ydCB7RlhBQVNoYWRlcn0gZnJvbSAndGhyZWUvZXhhbXBsZXMvanNtL3NoYWRlcnMvRlhBQVNoYWRlcic7XHJcbmltcG9ydCB7U2hhZGVyUGFzc30gZnJvbSAndGhyZWUvZXhhbXBsZXMvanNtL3Bvc3Rwcm9jZXNzaW5nL1NoYWRlclBhc3MnO1xyXG5pbXBvcnQge0JsZW5kU2hhZGVyfSBmcm9tICd0aHJlZS9leGFtcGxlcy9qc20vc2hhZGVycy9CbGVuZFNoYWRlcic7XHJcbmltcG9ydCB7SG9tZWRlY29yYXRvclNldHRpbmdzU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL2hvbWVkZWNvcmF0b3Itc2V0dGluZ3Muc2VydmljZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQb3N0UHJvY2Vzc2luZ1NlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG5cclxuICBwcml2YXRlIF9hb0VuYWJsZWQ6IGJvb2xlYW47XHJcbiAgcHJpdmF0ZSBfYWFFbmFibGVkOiBib29sZWFuO1xyXG5cclxuICBwcml2YXRlIF9hYUNvbXBvc2VyOiBFZmZlY3RDb21wb3NlcjtcclxuICBwcml2YXRlIF9hb0NvbXBvc2VyOiBFZmZlY3RDb21wb3NlcjtcclxuICBwcml2YXRlIF9ibGVuZENvbXBvc2VyOiBFZmZlY3RDb21wb3NlcjtcclxuICBwcml2YXRlIF9uOGFvUGFzczogTjhBT1Bhc3M7XHJcbiAgcHJpdmF0ZSBfdGFhUmVuZGVyUGFzczogVEFBUmVuZGVyUGFzcztcclxuICAvLyBwcml2YXRlIF9hYU91dHB1dFBhc3M6IE91dHB1dFBhc3M7XHJcbiAgcHJpdmF0ZSBfcmVuZGVyUGFzczogUmVuZGVyUGFzcztcclxuICBwcml2YXRlIF9vdXRwdXRQYXNzOiBPdXRwdXRQYXNzO1xyXG4gIC8vIHByaXZhdGUgX2FvUmVuZGVyUGFzczogUmVuZGVyUGFzcztcclxuICBwcml2YXRlIF9meGFhUGFzczogU2hhZGVyUGFzcztcclxuICAvLyBwcml2YXRlIF9zYW9QYXNzOiBTQU9QYXNzO1xyXG4gIC8vIHByaXZhdGUgX3NzYW9QYXNzOiBTU0FPUGFzcztcclxuICBwcml2YXRlIF9zY2VuZTogU2NlbmU7XHJcbiAgcHJpdmF0ZSBfcmVuZGVyZXI6IFdlYkdMUmVuZGVyZXI7XHJcbiAgcHJpdmF0ZSBfY2FtZXJhOiBQZXJzcGVjdGl2ZUNhbWVyYTtcclxuICBwcml2YXRlIF9hYVJlbmRlclRhcmdldDogV2ViR0xSZW5kZXJUYXJnZXQ7XHJcbiAgcHJpdmF0ZSBfYW9SZW5kZXJUYXJnZXQ6IFdlYkdMUmVuZGVyVGFyZ2V0O1xyXG4gIHByaXZhdGUgX2JsZW5kU2hhZGVyOiBTaGFkZXJQYXNzO1xyXG4gIHByaXZhdGUgX3dpZHRoOiBudW1iZXI7XHJcbiAgcHJpdmF0ZSBfaGVpZ2h0OiBudW1iZXI7XHJcblxyXG4gIHByaXZhdGUgX2VmZmVjdENvbnRyb2xsZXIgPSB7XHJcbiAgICBhb1NhbXBsZXM6IDMyLjAsXHJcbiAgICBkZW5vaXNlU2FtcGxlczogOC4wLFxyXG4gICAgZGVub2lzZVJhZGl1czogMTIuMCxcclxuICAgIGFvUmFkaXVzOiA1LjAsXHJcbiAgICBkaXN0YW5jZUZhbGxvZmY6IDEuMCxcclxuICAgIHNjcmVlblNwYWNlUmFkaXVzOiBmYWxzZSxcclxuICAgIGhhbGZSZXM6IGZhbHNlLFxyXG4gICAgZGVwdGhBd2FyZVVwc2FtcGxpbmc6IHRydWUsXHJcbiAgICB0cmFuc3BhcmVuY3lBd2FyZTogdHJ1ZSxcclxuICAgIGludGVuc2l0eTogMi41LFxyXG4gICAgcmVuZGVyTW9kZTogJ0NvbWJpbmVkJyxcclxuICAgIGNvbG9yOiBbMCwgMCwgMF0sXHJcbiAgICBjb2xvck11bHRpcGx5OiB0cnVlLFxyXG4gICAgc3RlbmNpbDogdHJ1ZSxcclxuICAgIGFjY3VtdWxhdGU6IGZhbHNlLFxyXG4gICAgZ2FtbWFDb3JyZWN0aW9uOiBmYWxzZVxyXG4gIH07XHJcbiAgcHJpdmF0ZSBfcG9zdFByb2Nlc3NpbmdHdWk6IEdVSTtcclxuICBwcml2YXRlIF9zdWJzOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgX2NvbmZpZ3VyYXRpb25TZXJ2aWNlOiBDb25maWd1cmF0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgX3NldHRpbmdzU2VydmljZTogSG9tZWRlY29yYXRvclNldHRpbmdzU2VydmljZVxyXG4gICkge1xyXG4gICAgdGhpcy5fc3Vicy5wdXNoKFxyXG4gICAgICB0aGlzLl9jb25maWd1cmF0aW9uU2VydmljZS5vbkNoYW5nZS5zdWJzY3JpYmUoKGNoYW5nZWQ6IENvbmZpZ3VyYXRpb25EYXRhKSA9PiB7XHJcbiAgICAgICAgaWYgKENvbmZpZ3VyYXRpb25LZXkuU2hvd1Bvc3RQcm9jZXNzaW5nU2V0dGluZ3MgaW4gY2hhbmdlZCkge1xyXG4gICAgICAgICAgdGhpcy5fc2hvd0hpZGVHdWkoY2hhbmdlZFtDb25maWd1cmF0aW9uS2V5LlNob3dQb3N0UHJvY2Vzc2luZ1NldHRpbmdzXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICAgdGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzTG9hZGVkLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5fYW9FbmFibGVkID0gdGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLm9wdGlvbnMuYW9FbmFibGVkO1xyXG4gICAgICAgIHRoaXMuX2FhRW5hYmxlZCA9IHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5vcHRpb25zLmFhRW5hYmxlZDtcclxuICAgICAgfSksXHJcbiAgICAgIHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5nc0NoYW5nZWQuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5fYW9FbmFibGVkICE9PSB0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3Mub3B0aW9ucy5hb0VuYWJsZWQgfHwgdGhpcy5fYWFFbmFibGVkICE9PSB0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3Mub3B0aW9ucy5hYUVuYWJsZWQpIHtcclxuICAgICAgICAgIHRoaXMuX2FvRW5hYmxlZCA9IHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5vcHRpb25zLmFvRW5hYmxlZDtcclxuICAgICAgICAgIHRoaXMuX2FhRW5hYmxlZCA9IHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5vcHRpb25zLmFhRW5hYmxlZDtcclxuICAgICAgICAgIHRoaXMuX2luaXRDb21wb3NlcnMoKTtcclxuICAgICAgICAgIHRoaXMucmVuZGVyKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy5fc3Vicy5mb3JFYWNoKHMgPT4gcy51bnN1YnNjcmliZSgpKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBpbml0KHJlbmRlcmVyOiBXZWJHTFJlbmRlcmVyLCBzY2VuZTogU2NlbmUsIGNhbWVyYTogUGVyc3BlY3RpdmVDYW1lcmEsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLl9yZW5kZXJlciA9IHJlbmRlcmVyO1xyXG4gICAgdGhpcy5fc2NlbmUgPSBzY2VuZTtcclxuICAgIHRoaXMuX2NhbWVyYSA9IGNhbWVyYTtcclxuICAgIHRoaXMuX3dpZHRoID0gd2lkdGg7XHJcbiAgICB0aGlzLl9oZWlnaHQgPSBoZWlnaHQ7XHJcbiAgICB0aGlzLl9wb3N0UHJvY2Vzc2luZ0d1aSA9IG5ldyBHVUkoKTtcclxuICAgIHRoaXMuX3Bvc3RQcm9jZXNzaW5nR3VpLmhpZGUoKTtcclxuICAgIHRoaXMuX3JlbmRlclBhc3MgPSBuZXcgUmVuZGVyUGFzcyh0aGlzLl9zY2VuZSwgdGhpcy5fY2FtZXJhKTtcclxuICAgIHRoaXMuX291dHB1dFBhc3MgPSBuZXcgT3V0cHV0UGFzcygpO1xyXG4gICAgdGhpcy5faW5pdENvbXBvc2VycygpO1xyXG4gICAgdGhpcy5fY3JlYXRlR3VpKCk7XHJcbiAgICAvLyB0aGlzLl9jcmVhdGVHdWlUYWFQYXNzKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0U2l6ZSh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX2FvQ29tcG9zZXIpIHtcclxuICAgICAgdGhpcy5fYW9Db21wb3Nlci5zZXRTaXplKHdpZHRoLCBoZWlnaHQpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuX2FhQ29tcG9zZXIpIHtcclxuICAgICAgdGhpcy5fYWFDb21wb3Nlci5zZXRTaXplKHdpZHRoLCBoZWlnaHQpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuX2JsZW5kQ29tcG9zZXIpIHtcclxuICAgICAgdGhpcy5fYmxlbmRDb21wb3Nlci5zZXRTaXplKHdpZHRoLCBoZWlnaHQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlbmRlcigpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3Mub3B0aW9ucy5hYUVuYWJsZWQgJiYgdGhpcy5fYWFDb21wb3Nlcikge1xyXG4gICAgICB0aGlzLl9hYUNvbXBvc2VyLnJlbmRlcigpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5vcHRpb25zLmFvRW5hYmxlZCAmJiB0aGlzLl9hb0NvbXBvc2VyKSB7XHJcbiAgICAgIHRoaXMuX2FvQ29tcG9zZXIucmVuZGVyKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5fYmxlbmRDb21wb3Nlcikge1xyXG4gICAgICB0aGlzLl9ibGVuZENvbXBvc2VyLnJlbmRlcigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNob3dHdWkoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9wb3N0UHJvY2Vzc2luZ0d1aS5zaG93KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGhpZGVHdWkoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9wb3N0UHJvY2Vzc2luZ0d1aS5oaWRlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pbml0Q29tcG9zZXJzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5faW5pdEFhQ29tcG9zZXIoKTtcclxuICAgIHRoaXMuX2luaXRBb0NvbXBvc2VyKCk7XHJcbiAgICB0aGlzLl9pbml0QmxlbmRDb21wb3NlcigpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaW5pdEFhQ29tcG9zZXIoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fYWFDb21wb3Nlcikge1xyXG4gICAgICB0aGlzLl9hYUNvbXBvc2VyLmRpc3Bvc2UoKTtcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5fYWFFbmFibGVkKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuX2FhUmVuZGVyVGFyZ2V0ID0gbmV3IFdlYkdMUmVuZGVyVGFyZ2V0KHRoaXMuX3dpZHRoLCB0aGlzLl9oZWlnaHQsIHtcclxuICAgICAgc2FtcGxlczogNCxcclxuICAgICAgdHlwZTogSGFsZkZsb2F0VHlwZSxcclxuICAgICAgbWluRmlsdGVyOiBOZWFyZXN0RmlsdGVyLFxyXG4gICAgICBtYWdGaWx0ZXI6IE5lYXJlc3RGaWx0ZXIsXHJcbiAgICAgIGZvcm1hdDogUkdCQUZvcm1hdCxcclxuICAgICAgY29sb3JTcGFjZTogU1JHQkNvbG9yU3BhY2VcclxuICAgIH0pO1xyXG4gICAgdGhpcy5fYWFDb21wb3NlciA9IG5ldyBFZmZlY3RDb21wb3Nlcih0aGlzLl9yZW5kZXJlciwgdGhpcy5fYWFSZW5kZXJUYXJnZXQpO1xyXG4gICAgdGhpcy5fYWFDb21wb3Nlci5yZW5kZXJUb1NjcmVlbiA9IGZhbHNlO1xyXG4gICAgdGhpcy5fZnhhYVBhc3MgPSBuZXcgU2hhZGVyUGFzcyhGWEFBU2hhZGVyKTtcclxuICAgIGNvbnN0IHBpeGVsUmF0aW8gPSB0aGlzLl9yZW5kZXJlci5nZXRQaXhlbFJhdGlvKCk7XHJcbiAgICAvLyB0aGlzLl9meGFhUGFzcy5tYXRlcmlhbC51bmlmb3Jtc1sgJ3Jlc29sdXRpb24nIF0udmFsdWUueCA9IDEgLyAodGhpcy5fd2lkdGggKiBwaXhlbFJhdGlvKTtcclxuICAgIC8vIHRoaXMuX2Z4YWFQYXNzLm1hdGVyaWFsLnVuaWZvcm1zWyAncmVzb2x1dGlvbicgXS52YWx1ZS55ID0gMSAvICh0aGlzLl9oZWlnaHQgKiBwaXhlbFJhdGlvKTtcclxuICAgIHRoaXMuX2Z4YWFQYXNzLnVuaWZvcm1zWyAncmVzb2x1dGlvbicgXS52YWx1ZS54ID0gMSAvICh0aGlzLl93aWR0aCAqIHBpeGVsUmF0aW8pO1xyXG4gICAgdGhpcy5fZnhhYVBhc3MudW5pZm9ybXNbICdyZXNvbHV0aW9uJyBdLnZhbHVlLnkgPSAxIC8gKHRoaXMuX2hlaWdodCAqIHBpeGVsUmF0aW8pO1xyXG5cclxuXHJcbiAgICAvLyB0aGlzLl90YWFSZW5kZXJQYXNzID0gbmV3IFRBQVJlbmRlclBhc3ModGhpcy5fc2NlbmUsIHRoaXMuX2NhbWVyYSwgMHgwMDAwMDAsIDApO1xyXG4gICAgLy8gdGhpcy5fdGFhUmVuZGVyUGFzcy51bmJpYXNlZCA9IHRydWU7XHJcbiAgICAvLyB0aGlzLl90YWFSZW5kZXJQYXNzLnNhbXBsZUxldmVsID0gNDtcclxuXHJcbiAgICB0aGlzLl9hYUNvbXBvc2VyLmFkZFBhc3ModGhpcy5fcmVuZGVyUGFzcyk7XHJcbiAgICAvLyB0aGlzLl9hYUNvbXBvc2VyLmFkZFBhc3ModGhpcy5fdGFhUmVuZGVyUGFzcyk7XHJcbiAgICB0aGlzLl9hYUNvbXBvc2VyLmFkZFBhc3ModGhpcy5fZnhhYVBhc3MpO1xyXG4gICAgdGhpcy5fYWFDb21wb3Nlci5hZGRQYXNzKHRoaXMuX291dHB1dFBhc3MpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaW5pdEFvQ29tcG9zZXIoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fYW9Db21wb3Nlcikge1xyXG4gICAgICB0aGlzLl9hb0NvbXBvc2VyLmRpc3Bvc2UoKTtcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5fYW9FbmFibGVkKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuX2FvUmVuZGVyVGFyZ2V0ID0gbmV3IFdlYkdMUmVuZGVyVGFyZ2V0KHRoaXMuX3dpZHRoLCB0aGlzLl9oZWlnaHQsIHtcclxuICAgICAgc2FtcGxlczogNCxcclxuICAgICAgdHlwZTogSGFsZkZsb2F0VHlwZSxcclxuICAgICAgbWluRmlsdGVyOiBOZWFyZXN0RmlsdGVyLFxyXG4gICAgICBtYWdGaWx0ZXI6IE5lYXJlc3RGaWx0ZXIsXHJcbiAgICAgIGZvcm1hdDogUkdCQUZvcm1hdCxcclxuICAgICAgY29sb3JTcGFjZTogU1JHQkNvbG9yU3BhY2VcclxuICAgIH0pO1xyXG4gICAgdGhpcy5fYW9Db21wb3NlciA9IG5ldyBFZmZlY3RDb21wb3Nlcih0aGlzLl9yZW5kZXJlciwgdGhpcy5fYW9SZW5kZXJUYXJnZXQpO1xyXG4gICAgdGhpcy5fYW9Db21wb3Nlci5yZW5kZXJUb1NjcmVlbiA9IGZhbHNlO1xyXG4gICAgdGhpcy5fbjhhb1Bhc3MgPSBuZXcgTjhBT1Bhc3ModGhpcy5fc2NlbmUsIHRoaXMuX2NhbWVyYSwgdGhpcy5fd2lkdGgsIHRoaXMuX2hlaWdodCk7XHJcbiAgICB0aGlzLl9uOGFvUGFzcy5jb25maWd1cmF0aW9uLmdhbW1hQ29ycmVjdGlvbiA9IGZhbHNlO1xyXG4gICAgLy8gdGhpcy5fbjhhb1Bhc3MuZGVidWdNb2RlID0gdHJ1ZTtcclxuXHJcbiAgICAvLyB0aGlzLl9hb0NvbXBvc2VyLmFkZFBhc3ModGhpcy5fcmVuZGVyUGFzcyk7XHJcbiAgICB0aGlzLl9hb0NvbXBvc2VyLmFkZFBhc3ModGhpcy5fbjhhb1Bhc3MpO1xyXG4gICAgdGhpcy5fYW9Db21wb3Nlci5hZGRQYXNzKHRoaXMuX291dHB1dFBhc3MpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaW5pdEJsZW5kQ29tcG9zZXIoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fYmxlbmRTaGFkZXIpIHtcclxuICAgICAgdGhpcy5fYmxlbmRTaGFkZXIuZGlzcG9zZSgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fYmxlbmRTaGFkZXIgPSBuZXcgU2hhZGVyUGFzcyhCbGVuZFNoYWRlcik7XHJcbiAgICBpZiAodGhpcy5fYWFFbmFibGVkICYmIHRoaXMuX2FvRW5hYmxlZCkge1xyXG4gICAgICB0aGlzLl9ibGVuZFNoYWRlci51bmlmb3Jtcy50RGlmZnVzZTEudmFsdWUgPSB0aGlzLl9hYVJlbmRlclRhcmdldC50ZXh0dXJlO1xyXG4gICAgICB0aGlzLl9ibGVuZFNoYWRlci51bmlmb3Jtcy50RGlmZnVzZTIudmFsdWUgPSB0aGlzLl9hb1JlbmRlclRhcmdldC50ZXh0dXJlO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLl9hb0VuYWJsZWQpIHtcclxuICAgICAgdGhpcy5fYmxlbmRTaGFkZXIudW5pZm9ybXMudERpZmZ1c2UxLnZhbHVlID0gdGhpcy5fYW9SZW5kZXJUYXJnZXQudGV4dHVyZTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5fYWFFbmFibGVkKSB7XHJcbiAgICAgIHRoaXMuX2JsZW5kU2hhZGVyLnVuaWZvcm1zLnREaWZmdXNlMS52YWx1ZSA9IHRoaXMuX2FhUmVuZGVyVGFyZ2V0LnRleHR1cmU7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9ibGVuZFNoYWRlci51bmlmb3Jtcy5taXhSYXRpby52YWx1ZSA9IDAuMjtcclxuXHJcbiAgICB0aGlzLl9ibGVuZENvbXBvc2VyID0gbmV3IEVmZmVjdENvbXBvc2VyKHRoaXMuX3JlbmRlcmVyKTtcclxuICAgIHRoaXMuX2JsZW5kQ29tcG9zZXIucmVuZGVyVG9TY3JlZW4gPSB0cnVlO1xyXG4gICAgdGhpcy5fYmxlbmRDb21wb3Nlci5hZGRQYXNzKHRoaXMuX3JlbmRlclBhc3MpO1xyXG4gICAgaWYgKHRoaXMuX2FhRW5hYmxlZCB8fCB0aGlzLl9hb0VuYWJsZWQpIHtcclxuICAgICAgdGhpcy5fYmxlbmRDb21wb3Nlci5hZGRQYXNzKHRoaXMuX2JsZW5kU2hhZGVyKTtcclxuICAgIH1cclxuICAgIC8vIHRoaXMuX2JsZW5kQ29tcG9zZXIuYWRkUGFzcyh0aGlzLl9vdXRwdXRQYXNzKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3VwZGF0ZVBhc3MoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9uOGFvUGFzcy5jb25maWd1cmF0aW9uLmFvUmFkaXVzID0gdGhpcy5fZWZmZWN0Q29udHJvbGxlci5hb1JhZGl1cztcclxuICAgIHRoaXMuX244YW9QYXNzLmNvbmZpZ3VyYXRpb24uZGlzdGFuY2VGYWxsb2ZmID0gdGhpcy5fZWZmZWN0Q29udHJvbGxlci5kaXN0YW5jZUZhbGxvZmY7XHJcbiAgICB0aGlzLl9uOGFvUGFzcy5jb25maWd1cmF0aW9uLnRyYW5zcGFyZW5jeUF3YXJlID0gdGhpcy5fZWZmZWN0Q29udHJvbGxlci50cmFuc3BhcmVuY3lBd2FyZTtcclxuICAgIHRoaXMuX244YW9QYXNzLmNvbmZpZ3VyYXRpb24uaW50ZW5zaXR5ID0gdGhpcy5fZWZmZWN0Q29udHJvbGxlci5pbnRlbnNpdHk7XHJcbiAgICB0aGlzLl9uOGFvUGFzcy5jb25maWd1cmF0aW9uLmFvU2FtcGxlcyA9IHRoaXMuX2VmZmVjdENvbnRyb2xsZXIuYW9TYW1wbGVzO1xyXG4gICAgdGhpcy5fbjhhb1Bhc3MuY29uZmlndXJhdGlvbi5kZW5vaXNlUmFkaXVzID0gdGhpcy5fZWZmZWN0Q29udHJvbGxlci5kZW5vaXNlUmFkaXVzO1xyXG4gICAgdGhpcy5fbjhhb1Bhc3MuY29uZmlndXJhdGlvbi5kZW5vaXNlU2FtcGxlcyA9IHRoaXMuX2VmZmVjdENvbnRyb2xsZXIuZGVub2lzZVNhbXBsZXM7XHJcbiAgICB0aGlzLl9uOGFvUGFzcy5jb25maWd1cmF0aW9uLnN0ZW5jaWwgPSB0aGlzLl9lZmZlY3RDb250cm9sbGVyLnN0ZW5jaWw7XHJcbiAgICB0aGlzLl9uOGFvUGFzcy5jb25maWd1cmF0aW9uLnJlbmRlck1vZGUgPSBbJ0NvbWJpbmVkJywgJ0FPJywgJ05vIEFPJywgJ1NwbGl0JywgJ1NwbGl0IEFPJ10uaW5kZXhPZih0aGlzLl9lZmZlY3RDb250cm9sbGVyLnJlbmRlck1vZGUpO1xyXG4gICAgdGhpcy5fbjhhb1Bhc3MuY29uZmlndXJhdGlvbi5jb2xvciA9IG5ldyBDb2xvcih0aGlzLl9lZmZlY3RDb250cm9sbGVyLmNvbG9yWzBdLCB0aGlzLl9lZmZlY3RDb250cm9sbGVyLmNvbG9yWzFdLCB0aGlzLl9lZmZlY3RDb250cm9sbGVyLmNvbG9yWzJdKTtcclxuICAgIHRoaXMuX244YW9QYXNzLmNvbmZpZ3VyYXRpb24uc2NyZWVuU3BhY2VSYWRpdXMgPSB0aGlzLl9lZmZlY3RDb250cm9sbGVyLnNjcmVlblNwYWNlUmFkaXVzO1xyXG4gICAgdGhpcy5fbjhhb1Bhc3MuY29uZmlndXJhdGlvbi5oYWxmUmVzID0gdGhpcy5fZWZmZWN0Q29udHJvbGxlci5oYWxmUmVzO1xyXG4gICAgdGhpcy5fbjhhb1Bhc3MuY29uZmlndXJhdGlvbi5kZXB0aEF3YXJlVXBzYW1wbGluZyA9IHRoaXMuX2VmZmVjdENvbnRyb2xsZXIuZGVwdGhBd2FyZVVwc2FtcGxpbmc7XHJcbiAgICB0aGlzLl9uOGFvUGFzcy5jb25maWd1cmF0aW9uLmNvbG9yTXVsdGlwbHkgPSB0aGlzLl9lZmZlY3RDb250cm9sbGVyLmNvbG9yTXVsdGlwbHk7XHJcbiAgICB0aGlzLl9uOGFvUGFzcy5jb25maWd1cmF0aW9uLmFjY3VtdWxhdGUgPSB0aGlzLl9lZmZlY3RDb250cm9sbGVyLmFjY3VtdWxhdGU7XHJcbiAgICB0aGlzLl9uOGFvUGFzcy5jb25maWd1cmF0aW9uLmdhbW1hQ29ycmVjdGlvbiA9IHRoaXMuX2VmZmVjdENvbnRyb2xsZXIuZ2FtbWFDb3JyZWN0aW9uO1xyXG4gICAgdGhpcy5yZW5kZXIoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NyZWF0ZUd1aVRhYVBhc3MoKTogdm9pZCB7XHJcbiAgICBjb25zdCBwYXJhbSA9IHsgVEFBRW5hYmxlZDogJzEnLCBUQUFTYW1wbGVMZXZlbDogMCB9O1xyXG4gICAgdGhpcy5fcG9zdFByb2Nlc3NpbmdHdWkuYWRkKCBwYXJhbSwgJ1RBQUVuYWJsZWQnLCB7XHJcbiAgICAgICdEaXNhYmxlZCc6ICcwJyxcclxuICAgICAgJ0VuYWJsZWQnOiAnMSdcclxuICAgIH0gKS5vbkZpbmlzaENoYW5nZSggKCkgPT4ge1xyXG5cclxuICAgICAgaWYgKCB0aGlzLl90YWFSZW5kZXJQYXNzICkge1xyXG4gICAgICAgIHRoaXMuX3RhYVJlbmRlclBhc3MuZW5hYmxlZCA9ICggcGFyYW0uVEFBRW5hYmxlZCA9PT0gJzEnICk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5yZW5kZXIoKTtcclxuICAgIH0gKTtcclxuXHJcbiAgICB0aGlzLl9wb3N0UHJvY2Vzc2luZ0d1aS5hZGQoIHBhcmFtLCAnVEFBU2FtcGxlTGV2ZWwnLCB7XHJcbiAgICAgICdMZXZlbCAwOiAxIFNhbXBsZSc6IDAsXHJcbiAgICAgICdMZXZlbCAxOiAyIFNhbXBsZXMnOiAxLFxyXG4gICAgICAnTGV2ZWwgMjogNCBTYW1wbGVzJzogMixcclxuICAgICAgJ0xldmVsIDM6IDggU2FtcGxlcyc6IDMsXHJcbiAgICAgICdMZXZlbCA0OiAxNiBTYW1wbGVzJzogNCxcclxuICAgICAgJ0xldmVsIDU6IDMyIFNhbXBsZXMnOiA1XHJcbiAgICB9ICkub25GaW5pc2hDaGFuZ2UoICgpID0+IHtcclxuXHJcbiAgICAgIGlmICggdGhpcy5fdGFhUmVuZGVyUGFzcyApIHtcclxuXHJcbiAgICAgICAgdGhpcy5fdGFhUmVuZGVyUGFzcy5zYW1wbGVMZXZlbCA9IHBhcmFtLlRBQVNhbXBsZUxldmVsO1xyXG5cclxuICAgICAgfVxyXG4gICAgICB0aGlzLnJlbmRlcigpO1xyXG4gICAgfSApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2hvd0hpZGVHdWkoc2hvdzogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgc2hvdyA/IHRoaXMuc2hvd0d1aSgpIDogdGhpcy5oaWRlR3VpKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jcmVhdGVHdWkoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9wb3N0UHJvY2Vzc2luZ0d1aS5hZGQodGhpcy5fZWZmZWN0Q29udHJvbGxlciwgJ2FvU2FtcGxlcycsIDEuMCwgNjQuMCwgMS4wKS5vbkNoYW5nZSgoKSA9PiB0aGlzLl91cGRhdGVQYXNzKCkpO1xyXG4gICAgdGhpcy5fcG9zdFByb2Nlc3NpbmdHdWkuYWRkKHRoaXMuX2VmZmVjdENvbnRyb2xsZXIsICdkZW5vaXNlU2FtcGxlcycsIDEuMCwgNjQuMCwgMS4wKS5vbkNoYW5nZSgoKSA9PiB0aGlzLl91cGRhdGVQYXNzKCkpO1xyXG4gICAgdGhpcy5fcG9zdFByb2Nlc3NpbmdHdWkuYWRkKHRoaXMuX2VmZmVjdENvbnRyb2xsZXIsICdkZW5vaXNlUmFkaXVzJywgMC4wLCAyNC4wLCAwLjAxKS5vbkNoYW5nZSgoKSA9PiB0aGlzLl91cGRhdGVQYXNzKCkpO1xyXG4gICAgY29uc3QgYW9yID0gdGhpcy5fcG9zdFByb2Nlc3NpbmdHdWkuYWRkKHRoaXMuX2VmZmVjdENvbnRyb2xsZXIsICdhb1JhZGl1cycsIDEuMCwgMTAuMCwgMC4wMSkub25DaGFuZ2UoKCkgPT4gdGhpcy5fdXBkYXRlUGFzcygpKTtcclxuICAgIGNvbnN0IGRmID0gdGhpcy5fcG9zdFByb2Nlc3NpbmdHdWkuYWRkKHRoaXMuX2VmZmVjdENvbnRyb2xsZXIsICdkaXN0YW5jZUZhbGxvZmYnLCAwLjAsIDEwLjAsIDAuMDEpLm9uQ2hhbmdlKCgpID0+IHRoaXMuX3VwZGF0ZVBhc3MoKSk7XHJcbiAgICB0aGlzLl9wb3N0UHJvY2Vzc2luZ0d1aS5hZGQodGhpcy5fZWZmZWN0Q29udHJvbGxlciwgJ3NjcmVlblNwYWNlUmFkaXVzJykub25DaGFuZ2UoKHZhbHVlKSA9PiB7XHJcbiAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuX2VmZmVjdENvbnRyb2xsZXIuYW9SYWRpdXMgPSA0OC4wO1xyXG4gICAgICAgIHRoaXMuX2VmZmVjdENvbnRyb2xsZXIuZGlzdGFuY2VGYWxsb2ZmID0gMC4yO1xyXG4gICAgICAgIGFvci5fbWluID0gMDtcclxuICAgICAgICBhb3IuX21heCA9IDY0O1xyXG4gICAgICAgIGRmLl9taW4gPSAwO1xyXG4gICAgICAgIGRmLl9tYXggPSAxO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX2VmZmVjdENvbnRyb2xsZXIuYW9SYWRpdXMgPSA1LjA7XHJcbiAgICAgICAgdGhpcy5fZWZmZWN0Q29udHJvbGxlci5kaXN0YW5jZUZhbGxvZmYgPSAxLjA7XHJcbiAgICAgICAgYW9yLl9taW4gPSAxO1xyXG4gICAgICAgIGFvci5fbWF4ID0gMTA7XHJcbiAgICAgICAgZGYuX21pbiA9IDA7XHJcbiAgICAgICAgZGYuX21heCA9IDEwO1xyXG4gICAgICB9XHJcbiAgICAgIGFvci51cGRhdGVEaXNwbGF5KCk7XHJcbiAgICAgIGRmLnVwZGF0ZURpc3BsYXkoKTtcclxuICAgICAgdGhpcy5fdXBkYXRlUGFzcygpO1xyXG4gICAgfSk7XHJcbiAgICBjb25zdCBibGVuZFNoYWRlclBhcmFtcyA9IHtcclxuICAgICAgbWl4UmF0aW86IDAuNVxyXG4gICAgfTtcclxuICAgIHRoaXMuX3Bvc3RQcm9jZXNzaW5nR3VpLmFkZCh0aGlzLl9lZmZlY3RDb250cm9sbGVyLCAnaGFsZlJlcycpLm9uQ2hhbmdlKCgpID0+IHRoaXMuX3VwZGF0ZVBhc3MoKSk7XHJcbiAgICB0aGlzLl9wb3N0UHJvY2Vzc2luZ0d1aS5hZGQodGhpcy5fZWZmZWN0Q29udHJvbGxlciwgJ3RyYW5zcGFyZW5jeUF3YXJlJykub25DaGFuZ2UoKCkgPT4gdGhpcy5fdXBkYXRlUGFzcygpKTtcclxuICAgIHRoaXMuX3Bvc3RQcm9jZXNzaW5nR3VpLmFkZCh0aGlzLl9lZmZlY3RDb250cm9sbGVyLCAnZGVwdGhBd2FyZVVwc2FtcGxpbmcnKS5vbkNoYW5nZSgoKSA9PiB0aGlzLl91cGRhdGVQYXNzKCkpO1xyXG4gICAgdGhpcy5fcG9zdFByb2Nlc3NpbmdHdWkuYWRkKHRoaXMuX2VmZmVjdENvbnRyb2xsZXIsICdzdGVuY2lsJykub25DaGFuZ2UoKCkgPT4gdGhpcy5fdXBkYXRlUGFzcygpKTtcclxuICAgIHRoaXMuX3Bvc3RQcm9jZXNzaW5nR3VpLmFkZCh0aGlzLl9lZmZlY3RDb250cm9sbGVyLCAnaW50ZW5zaXR5JywgMC4wLCAxMC4wLCAwLjAxKS5vbkNoYW5nZSgoKSA9PiB0aGlzLl91cGRhdGVQYXNzKCkpO1xyXG4gICAgdGhpcy5fcG9zdFByb2Nlc3NpbmdHdWkuYWRkQ29sb3IodGhpcy5fZWZmZWN0Q29udHJvbGxlciwgJ2NvbG9yJykub25DaGFuZ2UoKCkgPT4gdGhpcy5fdXBkYXRlUGFzcygpKTtcclxuICAgIHRoaXMuX3Bvc3RQcm9jZXNzaW5nR3VpLmFkZCh0aGlzLl9lZmZlY3RDb250cm9sbGVyLCAnY29sb3JNdWx0aXBseScpLm9uQ2hhbmdlKCgpID0+IHRoaXMuX3VwZGF0ZVBhc3MoKSk7XHJcbiAgICB0aGlzLl9wb3N0UHJvY2Vzc2luZ0d1aS5hZGQodGhpcy5fZWZmZWN0Q29udHJvbGxlciwgJ2FjY3VtdWxhdGUnKS5vbkNoYW5nZSgoKSA9PiB0aGlzLl91cGRhdGVQYXNzKCkpO1xyXG4gICAgdGhpcy5fcG9zdFByb2Nlc3NpbmdHdWkuYWRkKHRoaXMuX2VmZmVjdENvbnRyb2xsZXIsICdnYW1tYUNvcnJlY3Rpb24nKS5vbkNoYW5nZSgoKSA9PiB0aGlzLl91cGRhdGVQYXNzKCkpO1xyXG4gICAgdGhpcy5fcG9zdFByb2Nlc3NpbmdHdWkuYWRkKHRoaXMuX2VmZmVjdENvbnRyb2xsZXIsICdyZW5kZXJNb2RlJywgWydDb21iaW5lZCcsICdBTycsICdObyBBTycsICdTcGxpdCcsICdTcGxpdCBBTyddKS5vbkNoYW5nZSgoKSA9PiB0aGlzLl91cGRhdGVQYXNzKCkpO1xyXG4gICAgdGhpcy5fcG9zdFByb2Nlc3NpbmdHdWkuYWRkKGJsZW5kU2hhZGVyUGFyYW1zLCAnbWl4UmF0aW8nLCAwLjAsIDEwLjAsIDAuMDEpLm9uQ2hhbmdlKCgpID0+IHtcclxuICAgICAgdGhpcy5fYmxlbmRTaGFkZXIudW5pZm9ybXMubWl4UmF0aW8udmFsdWUgPSBibGVuZFNoYWRlclBhcmFtcy5taXhSYXRpbztcclxuICAgICAgdGhpcy5yZW5kZXIoKTtcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iXX0=