@skyux/colorpicker 7.5.0 → 7.6.0

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 (24) hide show
  1. package/documentation.json +41 -41
  2. package/esm2020/lib/modules/colorpicker/colorpicker-input.directive.mjs +7 -7
  3. package/esm2020/lib/modules/colorpicker/colorpicker.component.mjs +5 -5
  4. package/esm2020/lib/modules/colorpicker/types/colorpicker-cmyk.mjs +1 -1
  5. package/esm2020/lib/modules/colorpicker/types/colorpicker-hsla.mjs +1 -1
  6. package/esm2020/lib/modules/colorpicker/types/colorpicker-hsva.mjs +1 -1
  7. package/esm2020/lib/modules/colorpicker/types/colorpicker-message-type.mjs +2 -2
  8. package/esm2020/lib/modules/colorpicker/types/colorpicker-message.mjs +1 -1
  9. package/esm2020/lib/modules/colorpicker/types/colorpicker-output.mjs +1 -1
  10. package/esm2020/lib/modules/colorpicker/types/colorpicker-rgba.mjs +1 -1
  11. package/fesm2015/skyux-colorpicker.mjs +11 -11
  12. package/fesm2015/skyux-colorpicker.mjs.map +1 -1
  13. package/fesm2020/skyux-colorpicker.mjs +11 -11
  14. package/fesm2020/skyux-colorpicker.mjs.map +1 -1
  15. package/lib/modules/colorpicker/colorpicker-input.directive.d.ts +6 -6
  16. package/lib/modules/colorpicker/colorpicker.component.d.ts +7 -7
  17. package/lib/modules/colorpicker/types/colorpicker-cmyk.d.ts +5 -5
  18. package/lib/modules/colorpicker/types/colorpicker-hsla.d.ts +6 -6
  19. package/lib/modules/colorpicker/types/colorpicker-hsva.d.ts +8 -8
  20. package/lib/modules/colorpicker/types/colorpicker-message-type.d.ts +1 -1
  21. package/lib/modules/colorpicker/types/colorpicker-message.d.ts +1 -1
  22. package/lib/modules/colorpicker/types/colorpicker-output.d.ts +8 -8
  23. package/lib/modules/colorpicker/types/colorpicker-rgba.d.ts +6 -6
  24. package/package.json +7 -7
@@ -26,7 +26,7 @@
26
26
  "kindString": "Enumeration",
27
27
  "flags": {},
28
28
  "comment": {
29
- "shortText": "Specifies the commands to provide the colorpicker."
29
+ "shortText": "The commands to provide the colorpicker."
30
30
  },
31
31
  "children": [
32
32
  {
@@ -183,7 +183,7 @@
183
183
  "kindString": "Class",
184
184
  "flags": {},
185
185
  "comment": {
186
- "shortText": "Provides a SKY UX-themed replacement for the HTML `input` element with `type=\"color\"`.\nThe value that users select is driven through the `ngModel` attribute specified on\nthe `input` element."
186
+ "shortText": "The SKY UX-themed replacement for the HTML `input` element with `type=\"color\"`.\nThe value that users select is driven through the `ngModel` attribute specified on\nthe `input` element."
187
187
  },
188
188
  "decorators": [
189
189
  {
@@ -362,7 +362,7 @@
362
362
  "isPublic": true
363
363
  },
364
364
  "comment": {
365
- "shortText": "Specifies an ARIA label for the colorpicker. This sets the colorpicker's `aria-label` attribute\n[to support accessibility](https://developer.blackbaud.com/skyux/components/checkbox#accessibility)\nwhen the colorpicker does not include a visible label. If the colorpicker includes a visible label, use `labelledBy` instead.",
365
+ "shortText": "The ARIA label for the colorpicker. This sets the colorpicker's `aria-label` attribute\n[to support accessibility](https://developer.blackbaud.com/skyux/components/checkbox#accessibility)\nwhen the colorpicker does not include a visible label. If the colorpicker includes a visible label, use `labelledBy` instead.",
366
366
  "tags": [
367
367
  {
368
368
  "tag": "default",
@@ -403,7 +403,7 @@
403
403
  "isPublic": true
404
404
  },
405
405
  "comment": {
406
- "shortText": "Specifies the HTML element ID (without the leading `#`) of the element that labels the\ncolorpicker. This sets the colorpicker's `aria-labelledby` attribute\n[to support accessibility](https://developer.blackbaud.com/skyux/components/checkbox#accessibility).\nIf the colorpicker does not include a visible label, use `label` instead."
406
+ "shortText": "The HTML element ID (without the leading `#`) of the element that labels the\ncolorpicker. This sets the colorpicker's `aria-labelledby` attribute\n[to support accessibility](https://developer.blackbaud.com/skyux/components/checkbox#accessibility).\nIf the colorpicker does not include a visible label, use `label` instead."
407
407
  },
408
408
  "decorators": [
409
409
  {
@@ -458,7 +458,7 @@
458
458
  "isPublic": true
459
459
  },
460
460
  "comment": {
461
- "shortText": "Provides an observable to send commands to the colorpicker. The commands should\nrespect the `SkyColorPickerMessage` type."
461
+ "shortText": "The observable to send commands to the colorpicker. The commands should\nrespect the `SkyColorPickerMessage` type."
462
462
  },
463
463
  "decorators": [
464
464
  {
@@ -613,7 +613,7 @@
613
613
  "isPublic": true
614
614
  },
615
615
  "comment": {
616
- "shortText": "Indicates whether to display a reset button to let users return to the default color."
616
+ "shortText": "Whether to display a reset button to let users return to the default color."
617
617
  },
618
618
  "decorators": [
619
619
  {
@@ -1709,7 +1709,7 @@
1709
1709
  "isPublic": true
1710
1710
  },
1711
1711
  "comment": {
1712
- "shortText": "Indicates whether to display a transparency slider for users to select transparency\nlevels."
1712
+ "shortText": "Whether to display a transparency slider for users to select transparency\nlevels."
1713
1713
  },
1714
1714
  "decorators": [
1715
1715
  {
@@ -1745,7 +1745,7 @@
1745
1745
  "isPublic": true
1746
1746
  },
1747
1747
  "comment": {
1748
- "shortText": "Specifies the type of transparency to use in the transparency slider.",
1748
+ "shortText": "The type of transparency in the transparency slider.",
1749
1749
  "tags": [
1750
1750
  {
1751
1751
  "tag": "default",
@@ -1787,7 +1787,7 @@
1787
1787
  "isPublic": true
1788
1788
  },
1789
1789
  "comment": {
1790
- "shortText": "Specifies the format to use for the color when the colorpicker uses a native input\nelement such as a standard text input or a button. This property accepts `rgba`, `hex`,\nor `hsla`, but we do not recommend using it because users never see or use its value.\nInstead, if you need to access this format value, see the demo for an example.",
1790
+ "shortText": "The format for the color when the colorpicker uses a native input\nelement such as a standard text input or a button. This property accepts `rgba`, `hex`,\nor `hsla`, but we do not recommend using it because users never see or use its value.\nInstead, if you need to access this format value, see the demo for an example.",
1791
1791
  "tags": [
1792
1792
  {
1793
1793
  "tag": "default",
@@ -1829,7 +1829,7 @@
1829
1829
  "isPublic": true
1830
1830
  },
1831
1831
  "comment": {
1832
- "shortText": "Specifies an array of colors to load as preset choices. The colorpicker displays the\ncolors in a series of 12 boxes for users to select."
1832
+ "shortText": "The array of colors to load as preset choices. The colorpicker displays the\ncolors in a series of 12 boxes for users to select."
1833
1833
  },
1834
1834
  "decorators": [
1835
1835
  {
@@ -1982,7 +1982,7 @@
1982
1982
  "kindString": "Get signature",
1983
1983
  "flags": {},
1984
1984
  "comment": {
1985
- "shortText": "Specifies an initial color to load in the colorpicker. Use a reactive or\ntemplate-driven form to set this value. This property is deprecated. As an alternative,\nwe recommend the `formControlName` property on reactive forms or `ngModel` on\ntemplate-driven forms. See the demo for examples.",
1985
+ "shortText": "The initial color to load in the colorpicker. Use a reactive or\ntemplate-driven form to set this value. This property is deprecated. As an alternative,\nwe recommend the `formControlName` property on reactive forms or `ngModel` on\ntemplate-driven forms. See the demo for examples.",
1986
1986
  "tags": [
1987
1987
  {
1988
1988
  "tag": "deprecated",
@@ -2004,7 +2004,7 @@
2004
2004
  "kindString": "Set signature",
2005
2005
  "flags": {},
2006
2006
  "comment": {
2007
- "shortText": "Specifies an initial color to load in the colorpicker. Use a reactive or\ntemplate-driven form to set this value. This property is deprecated. As an alternative,\nwe recommend the `formControlName` property on reactive forms or `ngModel` on\ntemplate-driven forms. See the demo for examples.",
2007
+ "shortText": "The initial color to load in the colorpicker. Use a reactive or\ntemplate-driven form to set this value. This property is deprecated. As an alternative,\nwe recommend the `formControlName` property on reactive forms or `ngModel` on\ntemplate-driven forms. See the demo for examples.",
2008
2008
  "tags": [
2009
2009
  {
2010
2010
  "tag": "deprecated",
@@ -2605,7 +2605,7 @@
2605
2605
  "kindString": "Interface",
2606
2606
  "flags": {},
2607
2607
  "comment": {
2608
- "shortText": "Specifies colors as a combination of cyan, magenta, yellow, and black."
2608
+ "shortText": "Colors specified as a combination of cyan, magenta, yellow, and black."
2609
2609
  },
2610
2610
  "children": [
2611
2611
  {
@@ -2615,7 +2615,7 @@
2615
2615
  "kindString": "Property",
2616
2616
  "flags": {},
2617
2617
  "comment": {
2618
- "shortText": "Specifies the percentage of cyan to use."
2618
+ "shortText": "The percentage of cyan."
2619
2619
  },
2620
2620
  "sources": [
2621
2621
  {
@@ -2636,7 +2636,7 @@
2636
2636
  "kindString": "Property",
2637
2637
  "flags": {},
2638
2638
  "comment": {
2639
- "shortText": "Specifies the percentage of black to use."
2639
+ "shortText": "The percentage of black."
2640
2640
  },
2641
2641
  "sources": [
2642
2642
  {
@@ -2657,7 +2657,7 @@
2657
2657
  "kindString": "Property",
2658
2658
  "flags": {},
2659
2659
  "comment": {
2660
- "shortText": "Specifies the percentage of magenta to use."
2660
+ "shortText": "The percentage of magenta."
2661
2661
  },
2662
2662
  "sources": [
2663
2663
  {
@@ -2678,7 +2678,7 @@
2678
2678
  "kindString": "Property",
2679
2679
  "flags": {},
2680
2680
  "comment": {
2681
- "shortText": "Specifies the percentage of yellow to use."
2681
+ "shortText": "The percentage of yellow."
2682
2682
  },
2683
2683
  "sources": [
2684
2684
  {
@@ -2720,7 +2720,7 @@
2720
2720
  "kindString": "Interface",
2721
2721
  "flags": {},
2722
2722
  "comment": {
2723
- "shortText": "Specifies colors as a combination of hue, saturation, and lightness with an alpha\nchannel that specifies the opacity of the color."
2723
+ "shortText": "Colors specified as a combination of hue, saturation, and lightness with an alpha\nchannel to set the opacity."
2724
2724
  },
2725
2725
  "children": [
2726
2726
  {
@@ -2730,7 +2730,7 @@
2730
2730
  "kindString": "Property",
2731
2731
  "flags": {},
2732
2732
  "comment": {
2733
- "shortText": "Specifies the alpha channel to set the opacity."
2733
+ "shortText": "The alpha channel to set the opacity."
2734
2734
  },
2735
2735
  "sources": [
2736
2736
  {
@@ -2751,7 +2751,7 @@
2751
2751
  "kindString": "Property",
2752
2752
  "flags": {},
2753
2753
  "comment": {
2754
- "shortText": "Specifies the hue, which is a degree on the color wheel from 0 to 360.\n0 is red, 120 is green, and 240 is blue."
2754
+ "shortText": "The hue, which is a degree on the color wheel from 0 to 360.\n0 is red, 120 is green, and 240 is blue."
2755
2755
  },
2756
2756
  "sources": [
2757
2757
  {
@@ -2772,7 +2772,7 @@
2772
2772
  "kindString": "Property",
2773
2773
  "flags": {},
2774
2774
  "comment": {
2775
- "shortText": "Specifies the lightness, which is a percentage value where 0 percent is\nblack and 100 percent is white."
2775
+ "shortText": "The lightness, which is a percentage value where 0 percent is\nblack and 100 percent is white."
2776
2776
  },
2777
2777
  "sources": [
2778
2778
  {
@@ -2793,7 +2793,7 @@
2793
2793
  "kindString": "Property",
2794
2794
  "flags": {},
2795
2795
  "comment": {
2796
- "shortText": "Specifies the saturation, which is a percentage value where 0 percent is a\nshade of gray and 100 percent is the full color."
2796
+ "shortText": "The saturation, which is a percentage value where 0 percent is a\nshade of gray and 100 percent is the full color."
2797
2797
  },
2798
2798
  "sources": [
2799
2799
  {
@@ -2835,7 +2835,7 @@
2835
2835
  "kindString": "Interface",
2836
2836
  "flags": {},
2837
2837
  "comment": {
2838
- "shortText": "Specifies colors as a combination of hue, saturation, and value with an alpha\nchannel that specifies the opacity of the color."
2838
+ "shortText": "Colors specified as a combination of hue, saturation, and value with an alpha\nchannel to set the opacity."
2839
2839
  },
2840
2840
  "children": [
2841
2841
  {
@@ -2845,7 +2845,7 @@
2845
2845
  "kindString": "Property",
2846
2846
  "flags": {},
2847
2847
  "comment": {
2848
- "shortText": "Specifies the alpha channel to set the opacity."
2848
+ "shortText": "The alpha channel to set the opacity."
2849
2849
  },
2850
2850
  "sources": [
2851
2851
  {
@@ -2866,7 +2866,7 @@
2866
2866
  "kindString": "Property",
2867
2867
  "flags": {},
2868
2868
  "comment": {
2869
- "shortText": "Specifies the hue, which is a degree on the color wheel from 0 to 360.\n0 is red, 120 is green, and 240 is blue."
2869
+ "shortText": "The hue, which is a degree on the color wheel from 0 to 360.\n0 is red, 120 is green, and 240 is blue."
2870
2870
  },
2871
2871
  "sources": [
2872
2872
  {
@@ -2887,7 +2887,7 @@
2887
2887
  "kindString": "Property",
2888
2888
  "flags": {},
2889
2889
  "comment": {
2890
- "shortText": "Specifies the saturation, which is a percentage value where 0 percent is a\nshade of gray and 100 percent is the full color."
2890
+ "shortText": "The saturation, which is a percentage value where 0 percent is a\nshade of gray and 100 percent is the full color."
2891
2891
  },
2892
2892
  "sources": [
2893
2893
  {
@@ -2908,7 +2908,7 @@
2908
2908
  "kindString": "Property",
2909
2909
  "flags": {},
2910
2910
  "comment": {
2911
- "shortText": "Specifies the value, which is a percentage value that describes the brightness\nor intensity of the color where 0 is completely black and 100 is the brightest\nand reveals the most color."
2911
+ "shortText": "The brightness or intensity, which is a percentage value of the\ncolor where 0 is completely black and 100 is the brightest and\nreveals the most color."
2912
2912
  },
2913
2913
  "sources": [
2914
2914
  {
@@ -2962,7 +2962,7 @@
2962
2962
  "isOptional": true
2963
2963
  },
2964
2964
  "comment": {
2965
- "shortText": "Specifies the message type."
2965
+ "shortText": "The message type."
2966
2966
  },
2967
2967
  "sources": [
2968
2968
  {
@@ -3012,7 +3012,7 @@
3012
3012
  "kindString": "Property",
3013
3013
  "flags": {},
3014
3014
  "comment": {
3015
- "shortText": "Specifies the CMYK values for the selected color."
3015
+ "shortText": "The CMYK values for the selected color."
3016
3016
  },
3017
3017
  "sources": [
3018
3018
  {
@@ -3034,7 +3034,7 @@
3034
3034
  "kindString": "Property",
3035
3035
  "flags": {},
3036
3036
  "comment": {
3037
- "shortText": "Specifies a CMYK text value for the selected color."
3037
+ "shortText": "The CMYK text value for the selected color."
3038
3038
  },
3039
3039
  "sources": [
3040
3040
  {
@@ -3055,7 +3055,7 @@
3055
3055
  "kindString": "Property",
3056
3056
  "flags": {},
3057
3057
  "comment": {
3058
- "shortText": "Specifies the hex value for the selected color."
3058
+ "shortText": "The hex value for the selected color."
3059
3059
  },
3060
3060
  "sources": [
3061
3061
  {
@@ -3076,7 +3076,7 @@
3076
3076
  "kindString": "Property",
3077
3077
  "flags": {},
3078
3078
  "comment": {
3079
- "shortText": "Specifies the HSLA values for the selected color."
3079
+ "shortText": "The HSLA values for the selected color."
3080
3080
  },
3081
3081
  "sources": [
3082
3082
  {
@@ -3098,7 +3098,7 @@
3098
3098
  "kindString": "Property",
3099
3099
  "flags": {},
3100
3100
  "comment": {
3101
- "shortText": "Specifies an HSLA text value for the selected color."
3101
+ "shortText": "The HSLA text value for the selected color."
3102
3102
  },
3103
3103
  "sources": [
3104
3104
  {
@@ -3119,7 +3119,7 @@
3119
3119
  "kindString": "Property",
3120
3120
  "flags": {},
3121
3121
  "comment": {
3122
- "shortText": "Specifies the HSVA values for the selected color."
3122
+ "shortText": "The HSVA values for the selected color."
3123
3123
  },
3124
3124
  "sources": [
3125
3125
  {
@@ -3141,7 +3141,7 @@
3141
3141
  "kindString": "Property",
3142
3142
  "flags": {},
3143
3143
  "comment": {
3144
- "shortText": "Specifies the RGBA values for the selected color."
3144
+ "shortText": "The RGBA values for the selected color."
3145
3145
  },
3146
3146
  "sources": [
3147
3147
  {
@@ -3163,7 +3163,7 @@
3163
3163
  "kindString": "Property",
3164
3164
  "flags": {},
3165
3165
  "comment": {
3166
- "shortText": "Specifies an RGBA text value for the selected color."
3166
+ "shortText": "The RGBA text value for the selected color."
3167
3167
  },
3168
3168
  "sources": [
3169
3169
  {
@@ -3259,7 +3259,7 @@
3259
3259
  "kindString": "Interface",
3260
3260
  "flags": {},
3261
3261
  "comment": {
3262
- "shortText": "Specifies colors as a combination of red, green, and blue with an alpha\nchannel that specifies the opacity of the color."
3262
+ "shortText": "Colors specified as a combination of red, green, and blue with an alpha\nchannel to set the opacity."
3263
3263
  },
3264
3264
  "children": [
3265
3265
  {
@@ -3269,7 +3269,7 @@
3269
3269
  "kindString": "Property",
3270
3270
  "flags": {},
3271
3271
  "comment": {
3272
- "shortText": "Specifies the alpha channel to set the opacity."
3272
+ "shortText": "The alpha channel to set the opacity."
3273
3273
  },
3274
3274
  "sources": [
3275
3275
  {
@@ -3290,7 +3290,7 @@
3290
3290
  "kindString": "Property",
3291
3291
  "flags": {},
3292
3292
  "comment": {
3293
- "shortText": "Specifies the percentage of blue to use."
3293
+ "shortText": "The percentage of blue."
3294
3294
  },
3295
3295
  "sources": [
3296
3296
  {
@@ -3311,7 +3311,7 @@
3311
3311
  "kindString": "Property",
3312
3312
  "flags": {},
3313
3313
  "comment": {
3314
- "shortText": "Specifies the percentage of green to use."
3314
+ "shortText": "The percentage of green."
3315
3315
  },
3316
3316
  "sources": [
3317
3317
  {
@@ -3332,7 +3332,7 @@
3332
3332
  "kindString": "Property",
3333
3333
  "flags": {},
3334
3334
  "comment": {
3335
- "shortText": "Specifies the percentage of red to use."
3335
+ "shortText": "The percentage of red."
3336
3336
  },
3337
3337
  "sources": [
3338
3338
  {
@@ -30,25 +30,25 @@ export class SkyColorpickerInputDirective {
30
30
  */
31
31
  this.returnFormat = 'rgba';
32
32
  /**
33
- * Specifies the format to use for the color when the colorpicker uses a native input
33
+ * The format for the color when the colorpicker uses a native input
34
34
  * element such as a standard text input or a button. This property accepts `rgba`, `hex`,
35
35
  * or `hsla`, but we do not recommend using it because users never see or use its value.
36
36
  * Instead, if you need to access this format value, see the demo for an example.
37
- *@default "rgba"
37
+ * @default "rgba"
38
38
  */
39
39
  this.outputFormat = 'rgba';
40
40
  /**
41
- * Specifies an array of colors to load as preset choices. The colorpicker displays the
41
+ * The array of colors to load as preset choices. The colorpicker displays the
42
42
  * colors in a series of 12 boxes for users to select.
43
43
  */
44
44
  this.presetColors = ['#333', '#888', '#EFEFEF', '#FFF'];
45
45
  /**
46
- * Specifies the type of transparency to use in the transparency slider.
46
+ * The type of transparency in the transparency slider.
47
47
  *@default "hex6"
48
48
  */
49
49
  this.alphaChannel = 'hex6';
50
50
  /**
51
- * Indicates whether to display a transparency slider for users to select transparency
51
+ * Whether to display a transparency slider for users to select transparency
52
52
  * levels.
53
53
  */
54
54
  this.allowTransparency = true;
@@ -68,7 +68,7 @@ export class SkyColorpickerInputDirective {
68
68
  __classPrivateFieldSet(this, _SkyColorpickerInputDirective_injector, injector, "f");
69
69
  }
70
70
  /**
71
- * Specifies an initial color to load in the colorpicker. Use a reactive or
71
+ * The initial color to load in the colorpicker. Use a reactive or
72
72
  * template-driven form to set this value. This property is deprecated. As an alternative,
73
73
  * we recommend the `formControlName` property on reactive forms or `ngModel` on
74
74
  * template-driven forms. See the demo for examples.
@@ -256,4 +256,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.11", ngImpo
256
256
  type: HostListener,
257
257
  args: ['change']
258
258
  }] } });
259
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb3JwaWNrZXItaW5wdXQuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2NvbG9ycGlja2VyL3NyYy9saWIvbW9kdWxlcy9jb2xvcnBpY2tlci9jb2xvcnBpY2tlci1pbnB1dC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULFdBQVcsRUFDWCxZQUFZLEVBRVosS0FBSyxFQUtMLFVBQVUsR0FDWCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBRUwsYUFBYSxFQUNiLGlCQUFpQixFQUNqQixTQUFTLEdBSVYsTUFBTSxnQkFBZ0IsQ0FBQzs7OztBQVN4QixNQUFNLDhCQUE4QixHQUFHO0lBQ3JDLE9BQU8sRUFBRSxpQkFBaUI7SUFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyw0QkFBNEIsQ0FBQztJQUMzRCxLQUFLLEVBQUUsSUFBSTtDQUNaLENBQUM7QUFFRixNQUFNLHlCQUF5QixHQUFHO0lBQ2hDLE9BQU8sRUFBRSxhQUFhO0lBQ3RCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsNEJBQTRCLENBQUM7SUFDM0QsS0FBSyxFQUFFLElBQUk7Q0FDWixDQUFDO0FBRUYsTUFBTSw2QkFBNkIsR0FBRyxTQUFTLENBQUM7QUFFaEQ7O0dBRUc7QUFLSCxNQUFNLE9BQU8sNEJBQTRCO0lBOEZ2QyxZQUNFLFVBQXNCLEVBQ3RCLFFBQW1CLEVBQ25CLEdBQTBCLEVBQzFCLFlBQW9DLEVBQ3BDLFFBQWtCOztRQWxFcEI7Ozs7O1dBS0c7UUFFSSxpQkFBWSxHQUFHLE1BQU0sQ0FBQztRQUU3Qjs7Ozs7O1dBTUc7UUFFSSxpQkFBWSxHQUFHLE1BQU0sQ0FBQztRQUU3Qjs7O1dBR0c7UUFFSSxpQkFBWSxHQUFHLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFT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Z0JBK0JuQyxXQUFXO3NCQURqQixZQUFZO3VCQUFDLE9BQU87Z0JBUWQsUUFBUTtzQkFEZCxZQUFZO3VCQUFDLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBEaXJlY3RpdmUsXG4gIEVsZW1lbnRSZWYsXG4gIEhvc3RCaW5kaW5nLFxuICBIb3N0TGlzdGVuZXIsXG4gIEluamVjdG9yLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgUmVuZGVyZXIyLFxuICBmb3J3YXJkUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICBOR19WQUxJREFUT1JTLFxuICBOR19WQUxVRV9BQ0NFU1NPUixcbiAgTmdDb250cm9sLFxuICBVbnR5cGVkRm9ybUNvbnRyb2wsXG4gIFZhbGlkYXRpb25FcnJvcnMsXG4gIFZhbGlkYXRvcixcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU2t5TGliUmVzb3VyY2VzU2VydmljZSB9IGZyb20gJ0Bza3l1eC9pMThuJztcblxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFNreUNvbG9ycGlja2VyQ29tcG9uZW50IH0gZnJvbSAnLi9jb2xvcnBpY2tlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2t5Q29sb3JwaWNrZXJTZXJ2aWNlIH0gZnJvbSAnLi9jb2xvcnBpY2tlci5zZXJ2aWNlJztcbmltcG9ydCB7IFNreUNvbG9ycGlja2VyT3V0cHV0IH0gZnJvbSAnLi90eXBlcy9jb2xvcnBpY2tlci1vdXRwdXQnO1xuXG5jb25zdCBTS1lfQ09MT1JQSUNLRVJfVkFMVUVfQUNDRVNTT1IgPSB7XG4gIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBTa3lDb2xvcnBpY2tlcklucHV0RGlyZWN0aXZlKSxcbiAgbXVsdGk6IHRydWUsXG59O1xuXG5jb25zdCBTS1lfQ09MT1JQSUNLRVJfVkFMSURBVE9SID0ge1xuICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxuICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBTa3lDb2xvcnBpY2tlcklucHV0RGlyZWN0aXZlKSxcbiAgbXVsdGk6IHRydWUsXG59O1xuXG5jb25zdCBTS1lfQ09MT1JQSUNLRVJfREVGQVVMVF9DT0xPUiA9ICcjRkZGRkZGJztcblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBjb2xvcnBpY2tlciBlbGVtZW50IGFuZCBkcm9wZG93bi5cbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW3NreUNvbG9ycGlja2VySW5wdXRdJyxcbiAgcHJvdmlkZXJzOiBbU0tZX0NPTE9SUElDS0VSX1ZBTFVFX0FDQ0VTU09SLCBTS1lfQ09MT1JQSUNLRVJfVkFMSURBVE9SXSxcbn0pXG5leHBvcnQgY2xhc3MgU2t5Q29sb3JwaWNrZXJJbnB1dERpcmVjdGl2ZVxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBDb250cm9sVmFsdWVBY2Nlc3NvciwgVmFsaWRhdG9yLCBPbkRlc3Ryb3lcbntcbiAgLyoqXG4gICAqIENyZWF0ZXMgdGhlIGNvbG9ycGlja2VyIGVsZW1lbnQgYW5kIGRyb3Bkb3duLiBQbGFjZSB0aGlzIGF0dHJpYnV0ZSBvbiBhbiBgaW5wdXRgIGVsZW1lbnRcbiAgICogb3IgYGJ1dHRvbmAgZWxlbWVudCwgd3JhcCB0aGUgZWxlbWVudCBpbiBhIGBza3ktY29sb3JwaWNrZXJgIGNvbXBvbmVudCwgYW5kIHNldCB0aGUgYXR0cmlidXRlXG4gICAqIHRvIHRoZSBpbnN0YW5jZSBvZiB0aGUgYHNreS1jb2xvcnBpY2tlcmAgY29tcG9uZW50LlxuICAgKiBAcmVxdWlyZWRcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBza3lDb2xvcnBpY2tlcklucHV0ITogU2t5Q29sb3JwaWNrZXJDb21wb25lbnQ7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyBhbiBpbml0aWFsIGNvbG9yIHRvIGxvYWQgaW4gdGhlIGNvbG9ycGlja2VyLiBVc2UgYSByZWFjdGl2ZSBvclxuICAgKiB0ZW1wbGF0ZS1kcml2ZW4gZm9ybSB0byBzZXQgdGhpcyB2YWx1ZS4gVGhpcyBwcm9wZXJ0eSBpcyBkZXByZWNhdGVkLiBBcyBhbiBhbHRlcm5hdGl2ZSxcbiAgICogd2UgcmVjb21tZW5kIHRoZSBgZm9ybUNvbnRyb2xOYW1lYCBwcm9wZXJ0eSBvbiByZWFjdGl2ZSBmb3JtcyBvciBgbmdNb2RlbGAgb25cbiAgICogdGVtcGxhdGUtZHJpdmVuIGZvcm1zLiBTZWUgdGhlIGRlbW8gZm9yIGV4YW1wbGVzLlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBpbml0aWFsQ29sb3IodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKCF0aGlzLiNfaW5pdGlhbENvbG9yICYmICF0aGlzLiNtb2RlbFZhbHVlKSB7XG4gICAgICB0aGlzLndyaXRlVmFsdWUodmFsdWUpO1xuICAgIH1cblxuICAgIHRoaXMuI19pbml0aWFsQ29sb3IgPSB2YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaW5pdGlhbENvbG9yKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuI19pbml0aWFsQ29sb3IgfHwgU0tZX0NPTE9SUElDS0VSX0RFRkFVTFRfQ09MT1I7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBwcm9wZXJ0eSBpcyBkZXByZWNhdGVkIGFuZCBkb2VzIG5vdCBhZmZlY3QgdGhlIGNvbG9ycGlja2VyLlxuICAgKiBXZSByZWNvbW1lbmQgYWdhaW5zdCB1c2luZyBpdC5cbiAgICogQGRlcHJlY2F0ZWRcbiAgICogQGRlZmF1bHQgXCJyZ2JhXCJcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyByZXR1cm5Gb3JtYXQgPSAncmdiYSc7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgZm9ybWF0IHRvIHVzZSBmb3IgdGhlIGNvbG9yIHdoZW4gdGhlIGNvbG9ycGlja2VyIHVzZXMgYSBuYXRpdmUgaW5wdXRcbiAgICogZWxlbWVudCBzdWNoIGFzIGEgc3RhbmRhcmQgdGV4dCBpbnB1dCBvciBhIGJ1dHRvbi4gVGhpcyBwcm9wZXJ0eSBhY2NlcHRzIGByZ2JhYCwgYGhleGAsXG4gICAqIG9yIGBoc2xhYCwgYnV0IHdlIGRvIG5vdCByZWNvbW1lbmQgdXNpbmcgaXQgYmVjYXVzZSB1c2VycyBuZXZlciBzZWUgb3IgdXNlIGl0cyB2YWx1ZS5cbiAgICogSW5zdGVhZCwgaWYgeW91IG5lZWQgdG8gYWNjZXNzIHRoaXMgZm9ybWF0IHZhbHVlLCBzZWUgdGhlIGRlbW8gZm9yIGFuIGV4YW1wbGUuXG4gICAqQGRlZmF1bHQgXCJyZ2JhXCJcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBvdXRwdXRGb3JtYXQgPSAncmdiYSc7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyBhbiBhcnJheSBvZiBjb2xvcnMgdG8gbG9hZCBhcyBwcmVzZXQgY2hvaWNlcy4gVGhlIGNvbG9ycGlja2VyIGRpc3BsYXlzIHRoZVxuICAgKiBjb2xvcnMgaW4gYSBzZXJpZXMgb2YgMTIgYm94ZXMgZm9yIHVzZXJzIHRvIHNlbGVjdC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBwcmVzZXRDb2xvcnMgPSBbJyMzMzMnLCAnIzg4OCcsICcjRUZFRkVGJywgJyNGRkYnXTtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSB0eXBlIG9mIHRyYW5zcGFyZW5jeSB0byB1c2UgaW4gdGhlIHRyYW5zcGFyZW5jeSBzbGlkZXIuXG4gICAqQGRlZmF1bHQgXCJoZXg2XCJcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBhbHBoYUNoYW5uZWwgPSAnaGV4Nic7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRvIGRpc3BsYXkgYSB0cmFuc3BhcmVuY3kgc2xpZGVyIGZvciB1c2VycyB0byBzZWxlY3QgdHJhbnNwYXJlbmN5XG4gICAqIGxldmVscy5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBhbGxvd1RyYW5zcGFyZW5jeSA9IHRydWU7XG5cbiAgQEhvc3RCaW5kaW5nKCdyZWFkb25seScpXG4gIHByb3RlY3RlZCBnZXQgcmVhZG9ubHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnNreS1jb2xvcnBpY2tlci1pbnB1dCcpXG4gIHByb3RlY3RlZCBnZXQgY29sb3JJbnB1dENsYXNzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgI21vZGVsVmFsdWU6IFNreUNvbG9ycGlja2VyT3V0cHV0IHwgdW5kZWZpbmVkO1xuICAjcGlja2VyQ2hhbmdlZFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkO1xuICAjZWxlbWVudFJlZjogRWxlbWVudFJlZjtcbiAgI3JlbmRlcmVyOiBSZW5kZXJlcjI7XG4gICNzdmM6IFNreUNvbG9ycGlja2VyU2VydmljZTtcbiAgI3Jlc291cmNlc1N2YzogU2t5TGliUmVzb3VyY2VzU2VydmljZTtcbiAgI2luamVjdG9yOiBJbmplY3RvcjtcblxuICAjX2Rpc2FibGVkOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAjX2luaXRpYWxDb2xvcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBzdmM6IFNreUNvbG9ycGlja2VyU2VydmljZSxcbiAgICByZXNvdXJjZXNTdmM6IFNreUxpYlJlc291cmNlc1NlcnZpY2UsXG4gICAgaW5qZWN0b3I6IEluamVjdG9yXG4gICkge1xuICAgIHRoaXMuI2VsZW1lbnRSZWYgPSBlbGVtZW50UmVmO1xuICAgIHRoaXMuI3JlbmRlcmVyID0gcmVuZGVyZXI7XG4gICAgdGhpcy4jc3ZjID0gc3ZjO1xuICAgIHRoaXMuI3Jlc291cmNlc1N2YyA9IHJlc291cmNlc1N2YztcbiAgICB0aGlzLiNpbmplY3RvciA9IGluamVjdG9yO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignaW5wdXQnKVxuICBwdWJsaWMgY2hhbmdlSW5wdXQoKTogdm9pZCB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLiNlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQudmFsdWU7XG4gICAgdGhpcy5za3lDb2xvcnBpY2tlcklucHV0LnVwZGF0ZVBpY2tlclZhbHVlcyh2YWx1ZSk7XG4gICAgdGhpcy5za3lDb2xvcnBpY2tlcklucHV0LmJhY2tncm91bmRDb2xvckZvckRpc3BsYXkgPSB2YWx1ZTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2NoYW5nZScpXG4gIHB1YmxpYyBvbkNoYW5nZSgpOiB2b2lkIHtcbiAgICBjb25zdCBuZXdWYWx1ZSA9IHRoaXMuI2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC52YWx1ZTtcbiAgICBjb25zdCBmb3JtYXR0ZWRWYWx1ZSA9IHRoaXMuI2Zvcm1hdHRlcihuZXdWYWx1ZSk7XG4gICAgdGhpcy4jbW9kZWxWYWx1ZSA9IGZvcm1hdHRlZFZhbHVlO1xuICAgIHRoaXMuI3dyaXRlTW9kZWxWYWx1ZShmb3JtYXR0ZWRWYWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMuI2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcblxuICAgIHRoaXMuI3JlbmRlcmVyLmFkZENsYXNzKGVsZW1lbnQsICdza3ktZm9ybS1jb250cm9sJyk7XG4gICAgdGhpcy5za3lDb2xvcnBpY2tlcklucHV0LmluaXRpYWxDb2xvciA9IHRoaXMuaW5pdGlhbENvbG9yO1xuICAgIHRoaXMuc2t5Q29sb3JwaWNrZXJJbnB1dC5yZXR1cm5Gb3JtYXQgPSB0aGlzLnJldHVybkZvcm1hdDtcblxuICAgIHRoaXMuI3BpY2tlckNoYW5nZWRTdWJzY3JpcHRpb24gPVxuICAgICAgdGhpcy5za3lDb2xvcnBpY2tlcklucHV0LnNlbGVjdGVkQ29sb3JDaGFuZ2VkLnN1YnNjcmliZShcbiAgICAgICAgKG5ld0NvbG9yOiBTa3lDb2xvcnBpY2tlck91dHB1dCkgPT4ge1xuICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgICAgaWYgKG5ld0NvbG9yKSB7XG4gICAgICAgICAgICB0aGlzLiNtb2RlbFZhbHVlID0gdGhpcy4jZm9ybWF0dGVyKG5ld0NvbG9yKTtcblxuICAgICAgICAgICAgLy8gV3JpdGUgdGhlIG5ldyB2YWx1ZSB0byB0aGUgcmVhY3RpdmUgZm9ybSBjb250cm9sLCB3aGljaCB3aWxsIHVwZGF0ZSB0aGUgdGVtcGxhdGUgbW9kZWxcbiAgICAgICAgICAgIHRoaXMud3JpdGVWYWx1ZShuZXdDb2xvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApO1xuXG4gICAgdGhpcy5za3lDb2xvcnBpY2tlcklucHV0LnVwZGF0ZVBpY2tlclZhbHVlcyh0aGlzLmluaXRpYWxDb2xvcik7XG5cbiAgICAvKiBTYW5pdHkgY2hlY2sgKi9cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICghdGhpcy4jX2Rpc2FibGVkKSB7XG4gICAgICB0aGlzLnNreUNvbG9ycGlja2VySW5wdXQuYmFja2dyb3VuZENvbG9yRm9yRGlzcGxheSA9IHRoaXMuaW5pdGlhbENvbG9yO1xuICAgIH1cblxuICAgIC8vLyBTZXQgYXJpYS1sYWJlbCBhcyBkZWZhdWx0LCBpZiBub3Qgc2V0XG4gICAgaWYgKCFlbGVtZW50LmdldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcpKSB7XG4gICAgICB0aGlzLiNyZW5kZXJlci5zZXRBdHRyaWJ1dGUoXG4gICAgICAgIGVsZW1lbnQsXG4gICAgICAgICdhcmlhLWxhYmVsJyxcbiAgICAgICAgdGhpcy4jZ2V0U3RyaW5nKCdza3l1eF9jb2xvcnBpY2tlcl9pbnB1dF9kZWZhdWx0X2xhYmVsJylcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgdHlwZUF0dHIgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgndHlwZScpO1xuICAgIGlmICh0eXBlQXR0ciAmJiB0eXBlQXR0ciA9PT0gJ2hpZGRlbicpIHtcbiAgICAgIHRoaXMuc2t5Q29sb3JwaWNrZXJJbnB1dC5pc1Zpc2libGUgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5za3lDb2xvcnBpY2tlcklucHV0LmlzVmlzaWJsZSA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLiNwaWNrZXJDaGFuZ2VkU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLiNwaWNrZXJDaGFuZ2VkU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNldENvbG9yUGlja2VyRGVmYXVsdHMoKTogdm9pZCB7XG4gICAgdGhpcy5za3lDb2xvcnBpY2tlcklucHV0LnNldERpYWxvZyhcbiAgICAgIHRoaXMuaW5pdGlhbENvbG9yLFxuICAgICAgdGhpcy5vdXRwdXRGb3JtYXQsXG4gICAgICB0aGlzLnByZXNldENvbG9ycyxcbiAgICAgIHRoaXMuYWxwaGFDaGFubmVsLFxuICAgICAgdGhpcy5hbGxvd1RyYW5zcGFyZW5jeVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkNoYW5nZXMoKTogdm9pZCB7XG4gICAgdGhpcy5za3lDb2xvcnBpY2tlcklucHV0LnJldHVybkZvcm1hdCA9IHRoaXMucmV0dXJuRm9ybWF0O1xuICAgIHRoaXMuc2V0Q29sb3JQaWNrZXJEZWZhdWx0cygpO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZSgpOiB2b2lkIHt9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoKTogdm9pZCB7fVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgcHVibGljIHJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UoKTogdm9pZCB7fVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLnNreUNvbG9ycGlja2VySW5wdXQgJiZcbiAgICAgIHZhbHVlICYmXG4gICAgICB2YWx1ZSAhPT0gdGhpcy5za3lDb2xvcnBpY2tlcklucHV0Lmxhc3RBcHBsaWVkQ29sb3JcbiAgICApIHtcbiAgICAgIGNvbnN0IGZvcm1hdHRlZFZhbHVlID0gdGhpcy4jZm9ybWF0dGVyKHZhbHVlKTtcblxuICAgICAgdGhpcy4jbW9kZWxWYWx1ZSA9IGZvcm1hdHRlZFZhbHVlO1xuICAgICAgdGhpcy4jd3JpdGVNb2RlbFZhbHVlKGZvcm1hdHRlZFZhbHVlKTtcblxuICAgICAgaWYgKCF0aGlzLiNfaW5pdGlhbENvbG9yKSB7XG4gICAgICAgIHRoaXMuI19pbml0aWFsQ29sb3IgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5za3lDb2xvcnBpY2tlcklucHV0LmluaXRpYWxDb2xvciA9IHZhbHVlO1xuICAgICAgfVxuICAgICAgdGhpcy5za3lDb2xvcnBpY2tlcklucHV0Lmxhc3RBcHBsaWVkQ29sb3IgPSB2YWx1ZTtcbiAgICAgIGNvbnN0IGNvbnRyb2w6IFVudHlwZWRGb3JtQ29udHJvbCA9IHRoaXMuI2luamVjdG9yLmdldDxOZ0NvbnRyb2w+KFxuICAgICAgICBOZ0NvbnRyb2xcbiAgICAgICkuY29udHJvbCBhcyBVbnR5cGVkRm9ybUNvbnRyb2w7XG4gICAgICBpZiAoY29udHJvbCkge1xuICAgICAgICBjb250cm9sLnNldFZhbHVlKHRoaXMuI21vZGVsVmFsdWUsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdmFsaWRhdGUoKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgQ29udHJvbFZhbHVlQWNjZXNzb3IuXG4gICAqL1xuICBwdWJsaWMgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy4jX2Rpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICB0aGlzLnNreUNvbG9ycGlja2VySW5wdXQuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgIGlmICh0aGlzLiNfZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuc2t5Q29sb3JwaWNrZXJJbnB1dC5iYWNrZ3JvdW5kQ29sb3JGb3JEaXNwbGF5ID0gJyNmZmYnO1xuICAgIH0gZWxzZSBpZiAodGhpcy4jbW9kZWxWYWx1ZSkge1xuICAgICAgdGhpcy5za3lDb2xvcnBpY2tlcklucHV0LmJhY2tncm91bmRDb2xvckZvckRpc3BsYXkgPSB0aGlzLiNtb2RlbFZhbHVlLmhleDtcbiAgICB9XG4gIH1cblxuICAjd3JpdGVNb2RlbFZhbHVlKG1vZGVsOiBTa3lDb2xvcnBpY2tlck91dHB1dCk6IHZvaWQge1xuICAgIGNvbnN0IHNldEVsZW1lbnRWYWx1ZSA9IG1vZGVsLnJnYmFUZXh0O1xuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLiNlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICBsZXQgb3V0cHV0OiBzdHJpbmc7XG4gICAgc3dpdGNoICh0aGlzLm91dHB1dEZvcm1hdCkge1xuICAgICAgY2FzZSAnaHNsYSc6XG4gICAgICAgIG91dHB1dCA9IG1vZGVsLmhzbGFUZXh0O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2NteWsnOlxuICAgICAgICBvdXRwdXQgPSBtb2RlbC5jbXlrVGV4dDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgICBvdXRwdXQgPSBtb2RlbC5oZXg7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgb3V0cHV0ID0gbW9kZWwucmdiYVRleHQ7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHRoaXMuc2t5Q29sb3JwaWNrZXJJbnB1dC51cGRhdGVQaWNrZXJWYWx1ZXMob3V0cHV0KTtcbiAgICB0aGlzLnNreUNvbG9ycGlja2VySW5wdXQuYmFja2dyb3VuZENvbG9yRm9yRGlzcGxheSA9IG91dHB1dDtcblxuICAgIHRoaXMuI3JlbmRlcmVyLnNldFN0eWxlKGVsZW1lbnQsICdiYWNrZ3JvdW5kLWNvbG9yJywgc2V0RWxlbWVudFZhbHVlKTtcbiAgICB0aGlzLiNyZW5kZXJlci5zZXRQcm9wZXJ0eShlbGVtZW50LCAndmFsdWUnLCBvdXRwdXQpO1xuICB9XG5cbiAgI2Zvcm1hdHRlcihcbiAgICBjb2xvcjogc3RyaW5nIHwgU2t5Q29sb3JwaWNrZXJPdXRwdXQgfCB1bmRlZmluZWRcbiAgKTogU2t5Q29sb3JwaWNrZXJPdXRwdXQge1xuICAgIGlmIChjb2xvciAmJiB0eXBlb2YgY29sb3IgIT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gY29sb3I7XG4gICAgfVxuXG4gICAgY29uc3QgaHN2YSA9IHRoaXMuI3N2Yy5zdHJpbmdUb0hzdmEoXG4gICAgICBjb2xvciBhcyBzdHJpbmcsXG4gICAgICB0aGlzLmFscGhhQ2hhbm5lbCA9PT0gJ2hleDgnXG4gICAgKTtcblxuICAgIC8vIFRPRE86IFRoaXMgY29kZSBhc3N1bWVkIG5vbi1udWxsIHByZS1zdHJpY3QgbW9kZS4gUmVldmFsdWF0ZSBpbiB0aGUgZnV0dXJlP1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgY29uc3QgZm9ybWF0Q29sb3IgPSB0aGlzLiNzdmMuc2t5Q29sb3JwaWNrZXJPdXQoaHN2YSEpO1xuXG4gICAgcmV0dXJuIGZvcm1hdENvbG9yO1xuICB9XG5cbiAgI2dldFN0cmluZyhrZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgLy8gVE9ETzogTmVlZCB0byBpbXBsZW1lbnQgdGhlIGFzeW5jIGBnZXRTdHJpbmdgIG1ldGhvZCBpbiBhIGJyZWFraW5nIGNoYW5nZS5cbiAgICByZXR1cm4gdGhpcy4jcmVzb3VyY2VzU3ZjLmdldFN0cmluZ0ZvckxvY2FsZSh7IGxvY2FsZTogJ2VuLVVTJyB9LCBrZXkpO1xuICB9XG59XG4iXX0=
259
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb3JwaWNrZXItaW5wdXQuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2NvbG9ycGlja2VyL3NyYy9saWIvbW9kdWxlcy9jb2xvcnBpY2tlci9jb2xvcnBpY2tlci1pbnB1dC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULFdBQVcsRUFDWCxZQUFZLEVBRVosS0FBSyxFQUtMLFVBQVUsR0FDWCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBRUwsYUFBYSxFQUNiLGlCQUFpQixFQUNqQixTQUFTLEdBSVYsTUFBTSxnQkFBZ0IsQ0FBQzs7OztBQVN4QixNQUFNLDhCQUE4QixHQUFHO0lBQ3JDLE9BQU8sRUFBRSxpQkFBaUI7SUFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyw0QkFBNEIsQ0FBQztJQUMzRCxLQUFLLEVBQUUsSUFBSTtDQUNaLENBQUM7QUFFRixNQUFNLHlCQUF5QixHQUFHO0lBQ2hDLE9BQU8sRUFBRSxhQUFhO0lBQ3RCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsNEJBQTRCLENBQUM7SUFDM0QsS0FBSyxFQUFFLElBQUk7Q0FDWixDQUFDO0FBRUYsTUFBTSw2QkFBNkIsR0FBRyxTQUFTLENBQUM7QUFFaEQ7O0dBRUc7QUFLSCxNQUFNLE9BQU8sNEJBQTRCO0lBOEZ2QyxZQUNFLFVBQXNCLEVBQ3RCLFFBQW1CLEVBQ25CLEdBQTBCLEVBQzFCLFlBQW9DLEVBQ3BDLFFBQWtCOztRQWxFcEI7Ozs7O1dBS0c7UUFFSSxpQkFBWSxHQUFHLE1BQU0sQ0FBQztRQUU3Qjs7Ozs7O1dBTUc7UUFFSSxpQkFBWSxHQUFHLE1BQU0sQ0FBQztRQUU3Qjs7O1dBR0c7UUFFSSxpQkFBWSxHQUFHLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFT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Z0JBK0JuQyxXQUFXO3NCQURqQixZQUFZO3VCQUFDLE9BQU87Z0JBUWQsUUFBUTtzQkFEZCxZQUFZO3VCQUFDLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBEaXJlY3RpdmUsXG4gIEVsZW1lbnRSZWYsXG4gIEhvc3RCaW5kaW5nLFxuICBIb3N0TGlzdGVuZXIsXG4gIEluamVjdG9yLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgUmVuZGVyZXIyLFxuICBmb3J3YXJkUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICBOR19WQUxJREFUT1JTLFxuICBOR19WQUxVRV9BQ0NFU1NPUixcbiAgTmdDb250cm9sLFxuICBVbnR5cGVkRm9ybUNvbnRyb2wsXG4gIFZhbGlkYXRpb25FcnJvcnMsXG4gIFZhbGlkYXRvcixcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU2t5TGliUmVzb3VyY2VzU2VydmljZSB9IGZyb20gJ0Bza3l1eC9pMThuJztcblxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFNreUNvbG9ycGlja2VyQ29tcG9uZW50IH0gZnJvbSAnLi9jb2xvcnBpY2tlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2t5Q29sb3JwaWNrZXJTZXJ2aWNlIH0gZnJvbSAnLi9jb2xvcnBpY2tlci5zZXJ2aWNlJztcbmltcG9ydCB7IFNreUNvbG9ycGlja2VyT3V0cHV0IH0gZnJvbSAnLi90eXBlcy9jb2xvcnBpY2tlci1vdXRwdXQnO1xuXG5jb25zdCBTS1lfQ09MT1JQSUNLRVJfVkFMVUVfQUNDRVNTT1IgPSB7XG4gIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBTa3lDb2xvcnBpY2tlcklucHV0RGlyZWN0aXZlKSxcbiAgbXVsdGk6IHRydWUsXG59O1xuXG5jb25zdCBTS1lfQ09MT1JQSUNLRVJfVkFMSURBVE9SID0ge1xuICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxuICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBTa3lDb2xvcnBpY2tlcklucHV0RGlyZWN0aXZlKSxcbiAgbXVsdGk6IHRydWUsXG59O1xuXG5jb25zdCBTS1lfQ09MT1JQSUNLRVJfREVGQVVMVF9DT0xPUiA9ICcjRkZGRkZGJztcblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBjb2xvcnBpY2tlciBlbGVtZW50IGFuZCBkcm9wZG93bi5cbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW3NreUNvbG9ycGlja2VySW5wdXRdJyxcbiAgcHJvdmlkZXJzOiBbU0tZX0NPTE9SUElDS0VSX1ZBTFVFX0FDQ0VTU09SLCBTS1lfQ09MT1JQSUNLRVJfVkFMSURBVE9SXSxcbn0pXG5leHBvcnQgY2xhc3MgU2t5Q29sb3JwaWNrZXJJbnB1dERpcmVjdGl2ZVxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBDb250cm9sVmFsdWVBY2Nlc3NvciwgVmFsaWRhdG9yLCBPbkRlc3Ryb3lcbntcbiAgLyoqXG4gICAqIENyZWF0ZXMgdGhlIGNvbG9ycGlja2VyIGVsZW1lbnQgYW5kIGRyb3Bkb3duLiBQbGFjZSB0aGlzIGF0dHJpYnV0ZSBvbiBhbiBgaW5wdXRgIGVsZW1lbnRcbiAgICogb3IgYGJ1dHRvbmAgZWxlbWVudCwgd3JhcCB0aGUgZWxlbWVudCBpbiBhIGBza3ktY29sb3JwaWNrZXJgIGNvbXBvbmVudCwgYW5kIHNldCB0aGUgYXR0cmlidXRlXG4gICAqIHRvIHRoZSBpbnN0YW5jZSBvZiB0aGUgYHNreS1jb2xvcnBpY2tlcmAgY29tcG9uZW50LlxuICAgKiBAcmVxdWlyZWRcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBza3lDb2xvcnBpY2tlcklucHV0ITogU2t5Q29sb3JwaWNrZXJDb21wb25lbnQ7XG5cbiAgLyoqXG4gICAqIFRoZSBpbml0aWFsIGNvbG9yIHRvIGxvYWQgaW4gdGhlIGNvbG9ycGlja2VyLiBVc2UgYSByZWFjdGl2ZSBvclxuICAgKiB0ZW1wbGF0ZS1kcml2ZW4gZm9ybSB0byBzZXQgdGhpcyB2YWx1ZS4gVGhpcyBwcm9wZXJ0eSBpcyBkZXByZWNhdGVkLiBBcyBhbiBhbHRlcm5hdGl2ZSxcbiAgICogd2UgcmVjb21tZW5kIHRoZSBgZm9ybUNvbnRyb2xOYW1lYCBwcm9wZXJ0eSBvbiByZWFjdGl2ZSBmb3JtcyBvciBgbmdNb2RlbGAgb25cbiAgICogdGVtcGxhdGUtZHJpdmVuIGZvcm1zLiBTZWUgdGhlIGRlbW8gZm9yIGV4YW1wbGVzLlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBpbml0aWFsQ29sb3IodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKCF0aGlzLiNfaW5pdGlhbENvbG9yICYmICF0aGlzLiNtb2RlbFZhbHVlKSB7XG4gICAgICB0aGlzLndyaXRlVmFsdWUodmFsdWUpO1xuICAgIH1cblxuICAgIHRoaXMuI19pbml0aWFsQ29sb3IgPSB2YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaW5pdGlhbENvbG9yKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuI19pbml0aWFsQ29sb3IgfHwgU0tZX0NPTE9SUElDS0VSX0RFRkFVTFRfQ09MT1I7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBwcm9wZXJ0eSBpcyBkZXByZWNhdGVkIGFuZCBkb2VzIG5vdCBhZmZlY3QgdGhlIGNvbG9ycGlja2VyLlxuICAgKiBXZSByZWNvbW1lbmQgYWdhaW5zdCB1c2luZyBpdC5cbiAgICogQGRlcHJlY2F0ZWRcbiAgICogQGRlZmF1bHQgXCJyZ2JhXCJcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyByZXR1cm5Gb3JtYXQgPSAncmdiYSc7XG5cbiAgLyoqXG4gICAqIFRoZSBmb3JtYXQgZm9yIHRoZSBjb2xvciB3aGVuIHRoZSBjb2xvcnBpY2tlciB1c2VzIGEgbmF0aXZlIGlucHV0XG4gICAqIGVsZW1lbnQgc3VjaCBhcyBhIHN0YW5kYXJkIHRleHQgaW5wdXQgb3IgYSBidXR0b24uIFRoaXMgcHJvcGVydHkgYWNjZXB0cyBgcmdiYWAsIGBoZXhgLFxuICAgKiBvciBgaHNsYWAsIGJ1dCB3ZSBkbyBub3QgcmVjb21tZW5kIHVzaW5nIGl0IGJlY2F1c2UgdXNlcnMgbmV2ZXIgc2VlIG9yIHVzZSBpdHMgdmFsdWUuXG4gICAqIEluc3RlYWQsIGlmIHlvdSBuZWVkIHRvIGFjY2VzcyB0aGlzIGZvcm1hdCB2YWx1ZSwgc2VlIHRoZSBkZW1vIGZvciBhbiBleGFtcGxlLlxuICAgKiBAZGVmYXVsdCBcInJnYmFcIlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIG91dHB1dEZvcm1hdCA9ICdyZ2JhJztcblxuICAvKipcbiAgICogVGhlIGFycmF5IG9mIGNvbG9ycyB0byBsb2FkIGFzIHByZXNldCBjaG9pY2VzLiBUaGUgY29sb3JwaWNrZXIgZGlzcGxheXMgdGhlXG4gICAqIGNvbG9ycyBpbiBhIHNlcmllcyBvZiAxMiBib3hlcyBmb3IgdXNlcnMgdG8gc2VsZWN0LlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHByZXNldENvbG9ycyA9IFsnIzMzMycsICcjODg4JywgJyNFRkVGRUYnLCAnI0ZGRiddO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiB0cmFuc3BhcmVuY3kgaW4gdGhlIHRyYW5zcGFyZW5jeSBzbGlkZXIuXG4gICAqQGRlZmF1bHQgXCJoZXg2XCJcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBhbHBoYUNoYW5uZWwgPSAnaGV4Nic7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZGlzcGxheSBhIHRyYW5zcGFyZW5jeSBzbGlkZXIgZm9yIHVzZXJzIHRvIHNlbGVjdCB0cmFuc3BhcmVuY3lcbiAgICogbGV2ZWxzLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGFsbG93VHJhbnNwYXJlbmN5ID0gdHJ1ZTtcblxuICBASG9zdEJpbmRpbmcoJ3JlYWRvbmx5JylcbiAgcHJvdGVjdGVkIGdldCByZWFkb25seSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3Muc2t5LWNvbG9ycGlja2VyLWlucHV0JylcbiAgcHJvdGVjdGVkIGdldCBjb2xvcklucHV0Q2xhc3MoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAjbW9kZWxWYWx1ZTogU2t5Q29sb3JwaWNrZXJPdXRwdXQgfCB1bmRlZmluZWQ7XG4gICNwaWNrZXJDaGFuZ2VkU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XG4gICNlbGVtZW50UmVmOiBFbGVtZW50UmVmO1xuICAjcmVuZGVyZXI6IFJlbmRlcmVyMjtcbiAgI3N2YzogU2t5Q29sb3JwaWNrZXJTZXJ2aWNlO1xuICAjcmVzb3VyY2VzU3ZjOiBTa3lMaWJSZXNvdXJjZXNTZXJ2aWNlO1xuICAjaW5qZWN0b3I6IEluamVjdG9yO1xuXG4gICNfZGlzYWJsZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICNfaW5pdGlhbENvbG9yOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHN2YzogU2t5Q29sb3JwaWNrZXJTZXJ2aWNlLFxuICAgIHJlc291cmNlc1N2YzogU2t5TGliUmVzb3VyY2VzU2VydmljZSxcbiAgICBpbmplY3RvcjogSW5qZWN0b3JcbiAgKSB7XG4gICAgdGhpcy4jZWxlbWVudFJlZiA9IGVsZW1lbnRSZWY7XG4gICAgdGhpcy4jcmVuZGVyZXIgPSByZW5kZXJlcjtcbiAgICB0aGlzLiNzdmMgPSBzdmM7XG4gICAgdGhpcy4jcmVzb3VyY2VzU3ZjID0gcmVzb3VyY2VzU3ZjO1xuICAgIHRoaXMuI2luamVjdG9yID0gaW5qZWN0b3I7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdpbnB1dCcpXG4gIHB1YmxpYyBjaGFuZ2VJbnB1dCgpOiB2b2lkIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuI2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC52YWx1ZTtcbiAgICB0aGlzLnNreUNvbG9ycGlja2VySW5wdXQudXBkYXRlUGlja2VyVmFsdWVzKHZhbHVlKTtcbiAgICB0aGlzLnNreUNvbG9ycGlja2VySW5wdXQuYmFja2dyb3VuZENvbG9yRm9yRGlzcGxheSA9IHZhbHVlO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignY2hhbmdlJylcbiAgcHVibGljIG9uQ2hhbmdlKCk6IHZvaWQge1xuICAgIGNvbnN0IG5ld1ZhbHVlID0gdGhpcy4jZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlO1xuICAgIGNvbnN0IGZvcm1hdHRlZFZhbHVlID0gdGhpcy4jZm9ybWF0dGVyKG5ld1ZhbHVlKTtcbiAgICB0aGlzLiNtb2RlbFZhbHVlID0gZm9ybWF0dGVkVmFsdWU7XG4gICAgdGhpcy4jd3JpdGVNb2RlbFZhbHVlKGZvcm1hdHRlZFZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy4jZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuXG4gICAgdGhpcy4jcmVuZGVyZXIuYWRkQ2xhc3MoZWxlbWVudCwgJ3NreS1mb3JtLWNvbnRyb2wnKTtcbiAgICB0aGlzLnNreUNvbG9ycGlja2VySW5wdXQuaW5pdGlhbENvbG9yID0gdGhpcy5pbml0aWFsQ29sb3I7XG4gICAgdGhpcy5za3lDb2xvcnBpY2tlcklucHV0LnJldHVybkZvcm1hdCA9IHRoaXMucmV0dXJuRm9ybWF0O1xuXG4gICAgdGhpcy4jcGlja2VyQ2hhbmdlZFN1YnNjcmlwdGlvbiA9XG4gICAgICB0aGlzLnNreUNvbG9ycGlja2VySW5wdXQuc2VsZWN0ZWRDb2xvckNoYW5nZWQuc3Vic2NyaWJlKFxuICAgICAgICAobmV3Q29sb3I6IFNreUNvbG9ycGlja2VyT3V0cHV0KSA9PiB7XG4gICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICBpZiAobmV3Q29sb3IpIHtcbiAgICAgICAgICAgIHRoaXMuI21vZGVsVmFsdWUgPSB0aGlzLiNmb3JtYXR0ZXIobmV3Q29sb3IpO1xuXG4gICAgICAgICAgICAvLyBXcml0ZSB0aGUgbmV3IHZhbHVlIHRvIHRoZSByZWFjdGl2ZSBmb3JtIGNvbnRyb2wsIHdoaWNoIHdpbGwgdXBkYXRlIHRoZSB0ZW1wbGF0ZSBtb2RlbFxuICAgICAgICAgICAgdGhpcy53cml0ZVZhbHVlKG5ld0NvbG9yKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICk7XG5cbiAgICB0aGlzLnNreUNvbG9ycGlja2VySW5wdXQudXBkYXRlUGlja2VyVmFsdWVzKHRoaXMuaW5pdGlhbENvbG9yKTtcblxuICAgIC8qIFNhbml0eSBjaGVjayAqL1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKCF0aGlzLiNfZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuc2t5Q29sb3JwaWNrZXJJbnB1dC5iYWNrZ3JvdW5kQ29sb3JGb3JEaXNwbGF5ID0gdGhpcy5pbml0aWFsQ29sb3I7XG4gICAgfVxuXG4gICAgLy8vIFNldCBhcmlhLWxhYmVsIGFzIGRlZmF1bHQsIGlmIG5vdCBzZXRcbiAgICBpZiAoIWVsZW1lbnQuZ2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJykpIHtcbiAgICAgIHRoaXMuI3JlbmRlcmVyLnNldEF0dHJpYnV0ZShcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgJ2FyaWEtbGFiZWwnLFxuICAgICAgICB0aGlzLiNnZXRTdHJpbmcoJ3NreXV4X2NvbG9ycGlja2VyX2lucHV0X2RlZmF1bHRfbGFiZWwnKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCB0eXBlQXR0ciA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCd0eXBlJyk7XG4gICAgaWYgKHR5cGVBdHRyICYmIHR5cGVBdHRyID09PSAnaGlkZGVuJykge1xuICAgICAgdGhpcy5za3lDb2xvcnBpY2tlcklucHV0LmlzVmlzaWJsZSA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNreUNvbG9ycGlja2VySW5wdXQuaXNWaXNpYmxlID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuI3BpY2tlckNoYW5nZWRTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuI3BpY2tlckNoYW5nZWRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2V0Q29sb3JQaWNrZXJEZWZhdWx0cygpOiB2b2lkIHtcbiAgICB0aGlzLnNreUNvbG9ycGlja2VySW5wdXQuc2V0RGlhbG9nKFxuICAgICAgdGhpcy5pbml0aWFsQ29sb3IsXG4gICAgICB0aGlzLm91dHB1dEZvcm1hdCxcbiAgICAgIHRoaXMucHJlc2V0Q29sb3JzLFxuICAgICAgdGhpcy5hbHBoYUNoYW5uZWwsXG4gICAgICB0aGlzLmFsbG93VHJhbnNwYXJlbmN5XG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uQ2hhbmdlcygpOiB2b2lkIHtcbiAgICB0aGlzLnNreUNvbG9ycGlja2VySW5wdXQucmV0dXJuRm9ybWF0ID0gdGhpcy5yZXR1cm5Gb3JtYXQ7XG4gICAgdGhpcy5zZXRDb2xvclBpY2tlckRlZmF1bHRzKCk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKCk6IHZvaWQge31cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZCgpOiB2b2lkIHt9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICBwdWJsaWMgcmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZSgpOiB2b2lkIHt9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgcHVibGljIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgIGlmIChcbiAgICAgIHRoaXMuc2t5Q29sb3JwaWNrZXJJbnB1dCAmJlxuICAgICAgdmFsdWUgJiZcbiAgICAgIHZhbHVlICE9PSB0aGlzLnNreUNvbG9ycGlja2VySW5wdXQubGFzdEFwcGxpZWRDb2xvclxuICAgICkge1xuICAgICAgY29uc3QgZm9ybWF0dGVkVmFsdWUgPSB0aGlzLiNmb3JtYXR0ZXIodmFsdWUpO1xuXG4gICAgICB0aGlzLiNtb2RlbFZhbHVlID0gZm9ybWF0dGVkVmFsdWU7XG4gICAgICB0aGlzLiN3cml0ZU1vZGVsVmFsdWUoZm9ybWF0dGVkVmFsdWUpO1xuXG4gICAgICBpZiAoIXRoaXMuI19pbml0aWFsQ29sb3IpIHtcbiAgICAgICAgdGhpcy4jX2luaXRpYWxDb2xvciA9IHZhbHVlO1xuICAgICAgICB0aGlzLnNreUNvbG9ycGlja2VySW5wdXQuaW5pdGlhbENvbG9yID0gdmFsdWU7XG4gICAgICB9XG4gICAgICB0aGlzLnNreUNvbG9ycGlja2VySW5wdXQubGFzdEFwcGxpZWRDb2xvciA9IHZhbHVlO1xuICAgICAgY29uc3QgY29udHJvbDogVW50eXBlZEZvcm1Db250cm9sID0gdGhpcy4jaW5qZWN0b3IuZ2V0PE5nQ29udHJvbD4oXG4gICAgICAgIE5nQ29udHJvbFxuICAgICAgKS5jb250cm9sIGFzIFVudHlwZWRGb3JtQ29udHJvbDtcbiAgICAgIGlmIChjb250cm9sKSB7XG4gICAgICAgIGNvbnRyb2wuc2V0VmFsdWUodGhpcy4jbW9kZWxWYWx1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyB2YWxpZGF0ZSgpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogSW1wbGVtZW50ZWQgYXMgcGFydCBvZiBDb250cm9sVmFsdWVBY2Nlc3Nvci5cbiAgICovXG4gIHB1YmxpYyBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLiNfZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgIHRoaXMuc2t5Q29sb3JwaWNrZXJJbnB1dC5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gICAgaWYgKHRoaXMuI19kaXNhYmxlZCkge1xuICAgICAgdGhpcy5za3lDb2xvcnBpY2tlcklucHV0LmJhY2tncm91bmRDb2xvckZvckRpc3BsYXkgPSAnI2ZmZic7XG4gICAgfSBlbHNlIGlmICh0aGlzLiNtb2RlbFZhbHVlKSB7XG4gICAgICB0aGlzLnNreUNvbG9ycGlja2VySW5wdXQuYmFja2dyb3VuZENvbG9yRm9yRGlzcGxheSA9IHRoaXMuI21vZGVsVmFsdWUuaGV4O1xuICAgIH1cbiAgfVxuXG4gICN3cml0ZU1vZGVsVmFsdWUobW9kZWw6IFNreUNvbG9ycGlja2VyT3V0cHV0KTogdm9pZCB7XG4gICAgY29uc3Qgc2V0RWxlbWVudFZhbHVlID0gbW9kZWwucmdiYVRleHQ7XG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMuI2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcblxuICAgIGxldCBvdXRwdXQ6IHN0cmluZztcbiAgICBzd2l0Y2ggKHRoaXMub3V0cHV0Rm9ybWF0KSB7XG4gICAgICBjYXNlICdoc2xhJzpcbiAgICAgICAgb3V0cHV0ID0gbW9kZWwuaHNsYVRleHQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnY215ayc6XG4gICAgICAgIG91dHB1dCA9IG1vZGVsLmNteWtUZXh0O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIG91dHB1dCA9IG1vZGVsLmhleDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBvdXRwdXQgPSBtb2RlbC5yZ2JhVGV4dDtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgdGhpcy5za3lDb2xvcnBpY2tlcklucHV0LnVwZGF0ZVBpY2tlclZhbHVlcyhvdXRwdXQpO1xuICAgIHRoaXMuc2t5Q29sb3JwaWNrZXJJbnB1dC5iYWNrZ3JvdW5kQ29sb3JGb3JEaXNwbGF5ID0gb3V0cHV0O1xuXG4gICAgdGhpcy4jcmVuZGVyZXIuc2V0U3R5bGUoZWxlbWVudCwgJ2JhY2tncm91bmQtY29sb3InLCBzZXRFbGVtZW50VmFsdWUpO1xuICAgIHRoaXMuI3JlbmRlcmVyLnNldFByb3BlcnR5KGVsZW1lbnQsICd2YWx1ZScsIG91dHB1dCk7XG4gIH1cblxuICAjZm9ybWF0dGVyKFxuICAgIGNvbG9yOiBzdHJpbmcgfCBTa3lDb2xvcnBpY2tlck91dHB1dCB8IHVuZGVmaW5lZFxuICApOiBTa3lDb2xvcnBpY2tlck91dHB1dCB7XG4gICAgaWYgKGNvbG9yICYmIHR5cGVvZiBjb2xvciAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBjb2xvcjtcbiAgICB9XG5cbiAgICBjb25zdCBoc3ZhID0gdGhpcy4jc3ZjLnN0cmluZ1RvSHN2YShcbiAgICAgIGNvbG9yIGFzIHN0cmluZyxcbiAgICAgIHRoaXMuYWxwaGFDaGFubmVsID09PSAnaGV4OCdcbiAgICApO1xuXG4gICAgLy8gVE9ETzogVGhpcyBjb2RlIGFzc3VtZWQgbm9uLW51bGwgcHJlLXN0cmljdCBtb2RlLiBSZWV2YWx1YXRlIGluIHRoZSBmdXR1cmU/XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICBjb25zdCBmb3JtYXRDb2xvciA9IHRoaXMuI3N2Yy5za3lDb2xvcnBpY2tlck91dChoc3ZhISk7XG5cbiAgICByZXR1cm4gZm9ybWF0Q29sb3I7XG4gIH1cblxuICAjZ2V0U3RyaW5nKGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAvLyBUT0RPOiBOZWVkIHRvIGltcGxlbWVudCB0aGUgYXN5bmMgYGdldFN0cmluZ2AgbWV0aG9kIGluIGEgYnJlYWtpbmcgY2hhbmdlLlxuICAgIHJldHVybiB0aGlzLiNyZXNvdXJjZXNTdmMuZ2V0U3RyaW5nRm9yTG9jYWxlKHsgbG9jYWxlOiAnZW4tVVMnIH0sIGtleSk7XG4gIH1cbn1cbiJdfQ==