@simpleangularcontrols/sac-common 10.0.0-rc.29 → 10.0.0-rc.30

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 (267) hide show
  1. package/bundles/simpleangularcontrols-sac-common.umd.js +1848 -1249
  2. package/bundles/simpleangularcontrols-sac-common.umd.js.map +1 -1
  3. package/bundles/simpleangularcontrols-sac-common.umd.min.js +1 -1
  4. package/bundles/simpleangularcontrols-sac-common.umd.min.js.map +1 -1
  5. package/common/basedatetimecontrol.d.ts +47 -21
  6. package/common/baseinputcontrol.d.ts +10 -8
  7. package/common/baselistcontrol.d.ts +15 -15
  8. package/common/basemodelcontrol.d.ts +59 -43
  9. package/common/baseselectcontrol.d.ts +5 -5
  10. package/common/baseuploadcontrol.d.ts +77 -57
  11. package/components/browser/browser.d.ts +86 -89
  12. package/components/browser/models/browserfile.d.ts +6 -6
  13. package/components/browser/models/browserfiledeleterequest.d.ts +7 -7
  14. package/components/browser/models/browserfilerenamerequest.d.ts +10 -10
  15. package/components/browser/models/browserfileresponse.d.ts +2 -2
  16. package/components/browser/models/browserfilesaverequest.d.ts +7 -7
  17. package/components/browser/models/browsernode.d.ts +13 -13
  18. package/components/browser/models/browsernodedeleterequest.d.ts +6 -6
  19. package/components/browser/models/browsernodenewrequest.d.ts +7 -7
  20. package/components/browser/models/browsernoderenamerequest.d.ts +7 -7
  21. package/components/browser/models/browsernoderequest.d.ts +7 -7
  22. package/components/browser/models/browsernoderesponse.d.ts +1 -1
  23. package/controls/buttons/button.d.ts +25 -19
  24. package/controls/checkbox/checkbox.d.ts +3 -3
  25. package/controls/checkbox/radiobutton.d.ts +19 -13
  26. package/controls/checkbox/radiobuttons.d.ts +13 -10
  27. package/controls/confirm/confirm.button.d.ts +3 -3
  28. package/controls/confirm/confirm.d.ts +13 -12
  29. package/controls/confirm/confirm.service.d.ts +14 -14
  30. package/controls/contextmenu/contextmenu.d.ts +33 -27
  31. package/controls/contextmenu/contextmenu.interface.d.ts +6 -0
  32. package/controls/contextmenu/contextmenuanchor.d.ts +4 -4
  33. package/controls/contextmenu/contextmenucontainer.d.ts +4 -4
  34. package/controls/contextmenu/contextmenuitembutton.d.ts +12 -12
  35. package/controls/datetime/date.d.ts +11 -11
  36. package/controls/datetime/dateselector.d.ts +47 -40
  37. package/controls/datetime/datetime.d.ts +15 -14
  38. package/controls/datetime/time.d.ts +22 -12
  39. package/controls/dialog/dialog.d.ts +28 -22
  40. package/controls/form/form.d.ts +17 -12
  41. package/controls/grid/grid.d.ts +1 -0
  42. package/controls/grid/gridbutton.d.ts +1 -0
  43. package/controls/grid/gridcolumn.d.ts +5 -1
  44. package/controls/grid/gridcolumnaction.d.ts +1 -1
  45. package/controls/grid/gridcolumnbase.d.ts +8 -3
  46. package/controls/grid/model.d.ts +5 -2
  47. package/controls/grid/paging.d.ts +2 -3
  48. package/controls/input/input.d.ts +7 -7
  49. package/controls/input/inputarea.d.ts +8 -6
  50. package/controls/input/inputcurrency.d.ts +4 -1
  51. package/controls/input/inputdecimal.d.ts +14 -14
  52. package/controls/input/inputemail.d.ts +4 -4
  53. package/controls/input/inputinteger.d.ts +14 -14
  54. package/controls/input/inputpassword.d.ts +3 -3
  55. package/controls/input/inputsearch.d.ts +8 -5
  56. package/controls/layout/formlayout.d.ts +8 -5
  57. package/controls/list/buildvaluestring.d.ts +2 -2
  58. package/controls/list/dropdown.d.ts +23 -22
  59. package/controls/list/dropdownoptions.d.ts +10 -10
  60. package/controls/list/listbox.d.ts +25 -23
  61. package/controls/multilanguage/multilanguageinput.d.ts +25 -25
  62. package/controls/multilanguage/multilanguageinputarea.d.ts +27 -27
  63. package/controls/static/formcontainer.d.ts +8 -8
  64. package/controls/static/staticlabel.d.ts +5 -5
  65. package/controls/tabs/tab.d.ts +2 -2
  66. package/controls/tabs/tabitem.d.ts +7 -7
  67. package/controls/tinymce/tinymce.d.ts +37 -37
  68. package/controls/tinymce/tinymcedialogsettings.d.ts +6 -6
  69. package/controls/tinymce/tinymcedialogsettingsmeta.d.ts +2 -2
  70. package/controls/tinymce/tinymceinstance.d.ts +2 -2
  71. package/controls/tooltip/tooltip.d.ts +10 -5
  72. package/controls/treeview/treeview.d.ts +50 -5
  73. package/controls/upload/dropzonemultiple.d.ts +16 -16
  74. package/controls/upload/dropzonesingle.d.ts +11 -11
  75. package/controls/upload/uploadmultiple.d.ts +12 -12
  76. package/controls/upload/uploadsingle.d.ts +7 -7
  77. package/controls/validation/validationsummary.d.ts +12 -11
  78. package/controls/wizard/wizard.d.ts +25 -18
  79. package/controls/wizard/wizarditem.d.ts +5 -5
  80. package/enums/ButtonRoleType.d.ts +26 -1
  81. package/enums/ControlHeight.d.ts +1 -1
  82. package/enums/IconType.d.ts +1 -1
  83. package/esm2015/common/basedatetimecontrol.js +47 -22
  84. package/esm2015/common/baseinputcontrol.js +13 -11
  85. package/esm2015/common/baselistcontrol.js +21 -17
  86. package/esm2015/common/basemodelcontrol.js +72 -49
  87. package/esm2015/common/baseselectcontrol.js +11 -9
  88. package/esm2015/common/baseuploadcontrol.js +69 -49
  89. package/esm2015/components/browser/browser.js +93 -105
  90. package/esm2015/components/browser/models/browserfile.js +1 -1
  91. package/esm2015/components/browser/models/browserfiledeleterequest.js +6 -4
  92. package/esm2015/components/browser/models/browserfilerenamerequest.js +6 -4
  93. package/esm2015/components/browser/models/browserfileresponse.js +1 -1
  94. package/esm2015/components/browser/models/browserfilesaverequest.js +5 -3
  95. package/esm2015/components/browser/models/browsernode.js +1 -1
  96. package/esm2015/components/browser/models/browsernodedeleterequest.js +6 -4
  97. package/esm2015/components/browser/models/browsernodenewrequest.js +6 -4
  98. package/esm2015/components/browser/models/browsernoderenamerequest.js +6 -4
  99. package/esm2015/components/browser/models/browsernoderequest.js +6 -4
  100. package/esm2015/components/browser/models/browsernoderesponse.js +1 -1
  101. package/esm2015/controls/buttons/button.js +26 -20
  102. package/esm2015/controls/checkbox/checkbox.js +3 -3
  103. package/esm2015/controls/checkbox/radiobutton.js +21 -15
  104. package/esm2015/controls/checkbox/radiobuttons.js +14 -11
  105. package/esm2015/controls/confirm/confirm.button.js +4 -4
  106. package/esm2015/controls/confirm/confirm.js +14 -13
  107. package/esm2015/controls/confirm/confirm.service.js +21 -21
  108. package/esm2015/controls/contextmenu/contextmenu.interface.js +1 -1
  109. package/esm2015/controls/contextmenu/contextmenu.js +29 -23
  110. package/esm2015/controls/contextmenu/contextmenuanchor.js +4 -4
  111. package/esm2015/controls/contextmenu/contextmenucontainer.js +4 -4
  112. package/esm2015/controls/contextmenu/contextmenuitembutton.js +10 -10
  113. package/esm2015/controls/datetime/date.js +13 -13
  114. package/esm2015/controls/datetime/dateselector.js +55 -54
  115. package/esm2015/controls/datetime/datetime.js +17 -16
  116. package/esm2015/controls/datetime/time.js +24 -14
  117. package/esm2015/controls/dialog/dialog.js +31 -24
  118. package/esm2015/controls/form/form.js +18 -13
  119. package/esm2015/controls/grid/grid.js +2 -1
  120. package/esm2015/controls/grid/gridbutton.js +2 -1
  121. package/esm2015/controls/grid/gridcolumn.js +6 -2
  122. package/esm2015/controls/grid/gridcolumnaction.js +2 -2
  123. package/esm2015/controls/grid/gridcolumnbase.js +9 -4
  124. package/esm2015/controls/grid/model.js +5 -2
  125. package/esm2015/controls/grid/paging.js +6 -7
  126. package/esm2015/controls/input/input.js +8 -8
  127. package/esm2015/controls/input/inputarea.js +9 -7
  128. package/esm2015/controls/input/inputcurrency.js +6 -3
  129. package/esm2015/controls/input/inputdecimal.js +21 -27
  130. package/esm2015/controls/input/inputemail.js +5 -5
  131. package/esm2015/controls/input/inputinteger.js +19 -23
  132. package/esm2015/controls/input/inputpassword.js +4 -4
  133. package/esm2015/controls/input/inputsearch.js +9 -6
  134. package/esm2015/controls/layout/formlayout.js +10 -7
  135. package/esm2015/controls/list/buildvaluestring.js +6 -6
  136. package/esm2015/controls/list/dropdown.js +28 -27
  137. package/esm2015/controls/list/dropdownoptions.js +12 -12
  138. package/esm2015/controls/list/listbox.js +26 -24
  139. package/esm2015/controls/multilanguage/multilanguageinput.js +29 -29
  140. package/esm2015/controls/multilanguage/multilanguageinputarea.js +31 -31
  141. package/esm2015/controls/static/formcontainer.js +10 -10
  142. package/esm2015/controls/static/staticlabel.js +7 -7
  143. package/esm2015/controls/tabs/tab.js +2 -2
  144. package/esm2015/controls/tabs/tabitem.js +5 -5
  145. package/esm2015/controls/tinymce/tinymce.js +35 -35
  146. package/esm2015/controls/tinymce/tinymcedialogsettings.js +4 -4
  147. package/esm2015/controls/tinymce/tinymcedialogsettingsmeta.js +1 -1
  148. package/esm2015/controls/tinymce/tinymceinstance.js +1 -1
  149. package/esm2015/controls/tooltip/tooltip.js +13 -8
  150. package/esm2015/controls/treeview/treeview.js +52 -7
  151. package/esm2015/controls/upload/dropzonemultiple.js +18 -18
  152. package/esm2015/controls/upload/dropzonesingle.js +12 -12
  153. package/esm2015/controls/upload/uploadmultiple.js +14 -14
  154. package/esm2015/controls/upload/uploadsingle.js +8 -8
  155. package/esm2015/controls/validation/validationsummary.js +14 -13
  156. package/esm2015/controls/wizard/wizard.js +24 -17
  157. package/esm2015/controls/wizard/wizarditem.js +4 -4
  158. package/esm2015/enums/ButtonRoleType.js +1 -1
  159. package/esm2015/enums/ControlHeight.js +2 -2
  160. package/esm2015/enums/IconType.js +2 -2
  161. package/esm2015/interfaces/ISacConfigurationService.js +1 -1
  162. package/esm2015/interfaces/ISacFileBrowserService.js +1 -1
  163. package/esm2015/interfaces/ISacLabelSizes.js +1 -1
  164. package/esm2015/interfaces/ISacLanguageService.js +1 -1
  165. package/esm2015/interfaces/ISacLocalisationService.js +1 -1
  166. package/esm2015/interfaces/ISacUploadEventCompleteState.js +1 -1
  167. package/esm2015/interfaces/iabstractcontrollabel.js +1 -1
  168. package/esm2015/interfaces/iconfirmcomponent.js +1 -1
  169. package/esm2015/interfaces/idatetimecontrol.js +1 -1
  170. package/esm2015/interfaces/iuploadcontrol.js +1 -1
  171. package/esm2015/interfaces/treeviewaction.interface.js +1 -1
  172. package/esm2015/models/languagemodel.js +5 -3
  173. package/esm2015/public_api.js +3 -2
  174. package/esm2015/services/index.js +4 -4
  175. package/esm2015/services/sac-configuration.service.js +7 -1
  176. package/esm2015/services/sac-filebrowser.service.js +46 -38
  177. package/esm2015/services/sac-localisation.service.js +11 -7
  178. package/esm2015/services/sac-validationkey.service.js +148 -1
  179. package/esm2015/utilities/convertion.js +7 -5
  180. package/esm2015/utilities/datatypes.js +6 -4
  181. package/esm2015/utilities/enums.js +9 -8
  182. package/esm2015/utilities/guid.js +2 -2
  183. package/esm2015/utilities/interpolation.js +16 -9
  184. package/esm2015/utilities/popuphelper.js +62 -25
  185. package/esm2015/utilities/positioncalculator.js +209 -0
  186. package/esm2015/utilities/positioncalculator.ngfactory.js +7 -0
  187. package/esm2015/utilities/positionelements.js +108 -0
  188. package/esm2015/utilities/positionelements.ngfactory.js +7 -0
  189. package/esm2015/utilities/testingattribute.pipe.js +17 -2
  190. package/esm2015/validation/email.validator.js +11 -2
  191. package/esm2015/validation/equals.validator.js +11 -1
  192. package/esm2015/validation/index.js +1 -1
  193. package/esm2015/validation/invaliddate.validator.js +11 -2
  194. package/esm2015/validation/isDateValid.js +11 -10
  195. package/esm2015/validation/maxdate.validator.js +14 -4
  196. package/esm2015/validation/maxtime.validator.js +14 -4
  197. package/esm2015/validation/maxvalue.validator.js +12 -2
  198. package/esm2015/validation/mindate.validator.js +14 -4
  199. package/esm2015/validation/minfiles.validator.js +12 -2
  200. package/esm2015/validation/mintextlength.validator.js +9 -1
  201. package/esm2015/validation/mintime.validator.js +14 -4
  202. package/esm2015/validation/minvalue.validator.js +12 -2
  203. package/esm2015/validation/multilanguagerequired.validator.js +11 -1
  204. package/esm2015/validation/multilanguagerequiredany.validator.js +11 -1
  205. package/esm2015/validation/notequals.validator.js +11 -1
  206. package/esm2015/validation/pattern.validator.js +12 -2
  207. package/esm2015/validation/required.validator.js +11 -2
  208. package/esm2015/validation/validation.class.js +84 -101
  209. package/esm2015/validation/validationerrorcreator.js +12 -1
  210. package/esm2015/validation/validationerroritem.js +11 -9
  211. package/fesm2015/simpleangularcontrols-sac-common.js +1823 -1226
  212. package/fesm2015/simpleangularcontrols-sac-common.js.map +1 -1
  213. package/interfaces/ISacConfigurationService.d.ts +9 -1
  214. package/interfaces/ISacFileBrowserService.d.ts +43 -43
  215. package/interfaces/ISacLabelSizes.d.ts +15 -12
  216. package/interfaces/ISacLanguageService.d.ts +3 -3
  217. package/interfaces/ISacLocalisationService.d.ts +2 -2
  218. package/interfaces/ISacUploadEventCompleteState.d.ts +6 -0
  219. package/interfaces/iabstractcontrollabel.d.ts +4 -1
  220. package/interfaces/iconfirmcomponent.d.ts +6 -6
  221. package/interfaces/idatetimecontrol.d.ts +10 -1
  222. package/interfaces/treeviewaction.interface.d.ts +9 -0
  223. package/models/languagemodel.d.ts +9 -9
  224. package/package.json +1 -1
  225. package/public_api.d.ts +2 -1
  226. package/services/index.d.ts +3 -3
  227. package/services/sac-configuration.service.d.ts +8 -0
  228. package/services/sac-filebrowser.service.d.ts +78 -70
  229. package/services/sac-localisation.service.d.ts +11 -7
  230. package/services/sac-validationkey.service.d.ts +147 -0
  231. package/simpleangularcontrols-sac-common-10.0.0-rc.30.tgz +0 -0
  232. package/simpleangularcontrols-sac-common.metadata.json +1 -1
  233. package/utilities/convertion.d.ts +4 -4
  234. package/utilities/datatypes.d.ts +3 -3
  235. package/utilities/enums.d.ts +8 -1
  236. package/utilities/guid.d.ts +1 -1
  237. package/utilities/interpolation.d.ts +9 -8
  238. package/utilities/popuphelper.d.ts +47 -10
  239. package/utilities/positioncalculator.d.ts +82 -0
  240. package/utilities/positionelements.d.ts +30 -0
  241. package/utilities/positionelements.ngfactory.d.ts +1 -0
  242. package/utilities/testingattribute.pipe.d.ts +16 -1
  243. package/validation/email.validator.d.ts +7 -0
  244. package/validation/equals.validator.d.ts +8 -0
  245. package/validation/invaliddate.validator.d.ts +7 -0
  246. package/validation/isDateValid.d.ts +5 -2
  247. package/validation/maxdate.validator.d.ts +8 -0
  248. package/validation/maxtime.validator.d.ts +8 -0
  249. package/validation/maxvalue.validator.d.ts +8 -0
  250. package/validation/mindate.validator.d.ts +8 -0
  251. package/validation/minfiles.validator.d.ts +8 -0
  252. package/validation/mintextlength.validator.d.ts +8 -0
  253. package/validation/mintime.validator.d.ts +8 -0
  254. package/validation/minvalue.validator.d.ts +8 -0
  255. package/validation/multilanguagerequired.validator.d.ts +9 -1
  256. package/validation/multilanguagerequiredany.validator.d.ts +9 -1
  257. package/validation/notequals.validator.d.ts +8 -0
  258. package/validation/pattern.validator.d.ts +8 -0
  259. package/validation/required.validator.d.ts +7 -0
  260. package/validation/validation.class.d.ts +83 -100
  261. package/validation/validationerrorcreator.d.ts +9 -0
  262. package/validation/validationerroritem.d.ts +16 -16
  263. package/esm2015/utilities/positioning.js +0 -301
  264. package/esm2015/utilities/positioning.ngfactory.js +0 -7
  265. package/simpleangularcontrols-sac-common-10.0.0-rc.29.tgz +0 -0
  266. package/utilities/positioning.d.ts +0 -82
  267. /package/utilities/{positioning.ngfactory.d.ts → positioncalculator.ngfactory.d.ts} +0 -0
@@ -9,7 +9,7 @@ import { Directive, Host, Injector, Input } from '@angular/core';
9
9
  import { FormControlName, FormGroupDirective, NgControl, } from '@angular/forms';
10
10
  import { Observable } from 'rxjs';
11
11
  /**
12
- * Abstract Klasse für SacBaseModelControl. Implements ControlValueAccessor, Validator, OnInit
12
+ * Abstract class for SacBaseModelControl. Implements ControlValueAccessor, Validator, OnInit
13
13
  */
14
14
  export class SacBaseModelControl {
15
15
  // #endregion Properties
@@ -23,7 +23,7 @@ export class SacBaseModelControl {
23
23
  this.injector = injector;
24
24
  // #region Properties
25
25
  /**
26
- * Inline Errors für das Control
26
+ * Inline errors for the control
27
27
  */
28
28
  this._inlineerrorenabled = null;
29
29
  /**
@@ -31,19 +31,19 @@ export class SacBaseModelControl {
31
31
  */
32
32
  this._label = '';
33
33
  /**
34
- * Boolean Property dirty; default Wert - false
34
+ * Boolean property dirty; default value - false
35
35
  */
36
36
  this._dirty = false;
37
37
  /**
38
- * SacModel Form ist disabled
38
+ * SacModel form is disabled
39
39
  */
40
40
  this._disabledForm = false;
41
41
  /**
42
- * Boolean Property touched; default Wert - false
42
+ * Boolean property touched; default value - false
43
43
  */
44
44
  this._touched = false;
45
45
  /**
46
- * Interne Variable, die den Wert des Controls hält
46
+ * Internal variable that holds the value of the control
47
47
  */
48
48
  this._value = null;
49
49
  /**
@@ -59,11 +59,11 @@ export class SacBaseModelControl {
59
59
  */
60
60
  this.componentHeight = null;
61
61
  /**
62
- * Deaktiviert das Input Control
62
+ * Disables the input control
63
63
  */
64
64
  this.disabled = false;
65
65
  /**
66
- * Deaktiviert das Label im Template
66
+ * Disables the label in the template
67
67
  */
68
68
  this.disablelabel = false;
69
69
  /**
@@ -79,9 +79,9 @@ export class SacBaseModelControl {
79
79
  */
80
80
  this.inlineError = true;
81
81
  /**
82
- * defines that the labels are displayed as adaptive labels
82
+ * Label Mode 'standard' | 'floating' or null (null = use global configuration)
83
83
  */
84
- this.isAdaptiveLabel = false;
84
+ this.labelMode = null;
85
85
  /**
86
86
  * default labe size for large devices
87
87
  */
@@ -107,15 +107,15 @@ export class SacBaseModelControl {
107
107
  */
108
108
  this.labelSizeXxl = null;
109
109
  /**
110
- * Name des Controls
110
+ * Name of the control
111
111
  */
112
112
  this.name = createGuid();
113
113
  /**
114
- * Leere Implementation von "propagateChange". Muss gemacht werden, damit kein Fehler entsteht
114
+ * Empty implementation of "propagateChange". Must be done to avoid errors
115
115
  */
116
116
  this.propagateChange = () => { };
117
117
  /**
118
- * Leere Implementation von "propagateTouch". Muss gemacht werden, damit kein Fehler entsteht
118
+ * Empty implementation of "propagateTouch". Must be done to avoid errors
119
119
  */
120
120
  this.propagateTouch = () => { };
121
121
  /**
@@ -137,7 +137,7 @@ export class SacBaseModelControl {
137
137
  return this.iconService.GenericHelptextIcon;
138
138
  }
139
139
  /**
140
- * Methode ergibt Boolean Wert für dirty
140
+ * Method returns boolean value for dirty
141
141
  */
142
142
  get dirty() {
143
143
  if (this.ngControl !== null && this.ngControl !== undefined) {
@@ -152,7 +152,7 @@ export class SacBaseModelControl {
152
152
  return this._inlineerrorenabled;
153
153
  }
154
154
  /**
155
- * Aktiviert oder Deaktiviert die Inline Errors für das Control
155
+ * Enables or disables the inline errors for the control
156
156
  */
157
157
  set inlineerrorenabled(value) {
158
158
  if (value === null || value === undefined) {
@@ -163,13 +163,13 @@ export class SacBaseModelControl {
163
163
  }
164
164
  }
165
165
  /**
166
- * Methode ergibt boolean Wert wenn Form invalid oder nicht invalid ist
166
+ * Method returns a boolean value indicating whether the form is invalid
167
167
  */
168
168
  get invalid() {
169
169
  return this.ngControl !== undefined && this.ngControl !== null && this.ngControl.invalid;
170
170
  }
171
171
  /**
172
- * Definiert ob das Control disabled ist
172
+ * Defines whether the control is disabled
173
173
  */
174
174
  get isdisabled() {
175
175
  return this._disabledForm || this.disabled;
@@ -191,20 +191,20 @@ export class SacBaseModelControl {
191
191
  return true;
192
192
  }
193
193
  /**
194
- * Definiert den Label Text
194
+ * Defines the label text
195
195
  */
196
196
  get label() {
197
197
  return this._label;
198
198
  }
199
199
  /**
200
- * Definiert den Label Text
200
+ * Sets the label text
201
201
  */
202
202
  set label(v) {
203
203
  this._label = v;
204
204
  this.UpdateLabelToControl();
205
205
  }
206
206
  /**
207
- * returns an object with all label sizes. These values can then be transferred to corresponding CSS classes using a pipe
207
+ * Returns an object with all label sizes. These values can then be transferred to corresponding CSS classes using a pipe
208
208
  */
209
209
  get labelSizes() {
210
210
  return {
@@ -217,7 +217,7 @@ export class SacBaseModelControl {
217
217
  };
218
218
  }
219
219
  /**
220
- * Methode ergibt Boolean Wert für touched
220
+ * Method returns boolean value for touched
221
221
  */
222
222
  get touched() {
223
223
  if (this.ngControl !== null && this.ngControl !== undefined) {
@@ -226,14 +226,14 @@ export class SacBaseModelControl {
226
226
  return this._touched;
227
227
  }
228
228
  /**
229
- * Get Methode für NgModel Binding in Html Markup
229
+ * Get method for NgModel binding in HTML markup
230
230
  */
231
231
  get value() {
232
232
  return this._value;
233
233
  }
234
234
  /**
235
- * Set Methode für NgModel Binding in Html Markup
236
- * Input wird benötigt, damit der Wert auch über das Markup gesetzt werden kann.
235
+ * Set method for NgModel binding in HTML markup
236
+ * Input is required so that the value can also be set via the markup.
237
237
  */
238
238
  set value(v) {
239
239
  if (this.disabled) {
@@ -245,7 +245,7 @@ export class SacBaseModelControl {
245
245
  // #endregion Public Getters And Setters
246
246
  // #region Public Methods
247
247
  /**
248
- * Methode ergibt Error anhand von gegebenen Kriterien
248
+ * Method returns error based on given criteria
249
249
  */
250
250
  GetErrorMessage() {
251
251
  if (this.ngControl.errors === undefined || this.ngControl.errors === null) {
@@ -299,8 +299,6 @@ export class SacBaseModelControl {
299
299
  this.setLabelSizes();
300
300
  // set component heigth from fromlayout directive
301
301
  this.setComponentHeight();
302
- // set adaptive label property from formlayout directive
303
- this.setIsAdaptiveLabel();
304
302
  // set method to display helptext
305
303
  this.setHelpTextMode();
306
304
  // set SplitMode for Labels
@@ -308,52 +306,60 @@ export class SacBaseModelControl {
308
306
  this.OnClassInit();
309
307
  }
310
308
  /**
311
- * Methode ergibt boolean touched = true
309
+ * Method sets touched = true
312
310
  */
313
311
  onTouch() {
314
312
  this._touched = true;
315
313
  this.propagateTouch();
316
314
  }
317
315
  /**
318
- * Methode, damit andere Controls änderungen im Control mitbekommen können
319
- * Zur Änderungsinfo die Methode propagateChange aufrufen.
316
+ * Method so that other controls can be notified of changes in the control
317
+ * For change notification, call the propagateChange method.
318
+ * @param fn Callback function for change notification
320
319
  */
321
320
  registerOnChange(fn) {
322
321
  this.propagateChange = (obj) => fn(obj);
323
322
  }
324
323
  /**
325
- * Methode, damit andere Controls änderungen mitbekommen, wenn das Control aktiviert (Focus) wird.
324
+ * Method so that other controls can be notified of changes when the control is activated (focus).
325
+ * @param fn Callback function for touch notification
326
326
  */
327
327
  registerOnTouched(fn) {
328
328
  this.propagateTouch = (obj) => fn(obj);
329
329
  }
330
330
  /**
331
- * Methode registriert Änderungen bei der Validierung
331
+ * Method registers changes in validation
332
+ * @param fn Callback function for validator change notification
332
333
  */
333
334
  registerOnValidatorChange(fn) {
334
335
  this._onChange = fn;
335
336
  }
336
337
  /**
337
- * Setzt das Control auf Disabled
338
+ * Sets the control to disabled
339
+ * @param isDisabled True to disable the control, false to enable it
338
340
  */
339
341
  setDisabledState(isDisabled) {
340
342
  this._disabledForm = isDisabled;
341
343
  }
342
344
  /**
343
- * Methode die den Wert des Inputs setzt
345
+ * Method that sets the value of the input
346
+ * @param v The value to set
344
347
  */
345
348
  setValue(v) {
346
349
  this.value = v;
347
350
  }
348
351
  /**
349
- * Validator Methode
352
+ * Validator method
353
+ * @param c Form control to validate
354
+ * @returns Validation errors or null if valid
350
355
  */
351
356
  validate(c) {
352
357
  const error = this.validateData(c);
353
358
  return error;
354
359
  }
355
360
  /**
356
- * Methode zum schreiben von Werten aus dem Model in das Control
361
+ * Method for writing values from the model into the control
362
+ * @param value The value to write to the control
357
363
  */
358
364
  writeValue(value) {
359
365
  this._value = value;
@@ -361,15 +367,15 @@ export class SacBaseModelControl {
361
367
  // #endregion Public Methods
362
368
  // #region Protected Methods
363
369
  /**
364
- * Method can Overwriten in Parent Classes
365
- * @param value Wert welcher in den korrekten Typ konvertiert werden soll
366
- * @returns Wert im korrekten Typ
370
+ * Method can be overridden in parent classes
371
+ * @param value Value that should be converted to the correct type
372
+ * @returns Value in the correct type
367
373
  */
368
374
  ConvertInputValue(value) {
369
375
  return value;
370
376
  }
371
377
  /**
372
- * Methode ergibt Decimal Symbol
378
+ * Method returns the decimal symbol
373
379
  */
374
380
  GetDecimalSymbol() {
375
381
  return '.';
@@ -379,7 +385,7 @@ export class SacBaseModelControl {
379
385
  */
380
386
  OnClassInit() { }
381
387
  /**
382
- * Aktualisiert den NgModel Wert und die Gültigkeit des Validators des Controls
388
+ * Updates the NgModel value and the validity of the control's validator
383
389
  */
384
390
  UpdateValueAndValidity() {
385
391
  if (this.ngControl) {
@@ -424,24 +430,38 @@ export class SacBaseModelControl {
424
430
  }
425
431
  }
426
432
  /**
427
- * Set adaptive label property from parent layout control
433
+ * Sets the label display mode from property or parent layout control
428
434
  */
429
- setIsAdaptiveLabel() {
435
+ setLabelMode() {
430
436
  var _a;
431
- if (!this.isAdaptiveLabel) {
432
- if (((_a = this.formlayout) === null || _a === void 0 ? void 0 : _a.isAdaptiveLabel) !== undefined) {
433
- this.isAdaptiveLabel = this.formlayout.isAdaptiveLabel;
437
+ if (!this.labelMode) {
438
+ if ((_a = this.formlayout) === null || _a === void 0 ? void 0 : _a.labelMode) {
439
+ this.labelMode = this.formlayout.labelMode;
434
440
  }
435
441
  else {
436
- this.isAdaptiveLabel = false;
442
+ this.labelMode = this.configurationService.LabelMode;
437
443
  }
438
444
  }
445
+ // floating labels need always full width
446
+ if (this.labelMode === 'floating') {
447
+ this.labelSizeXxl = 12;
448
+ this.labelSizeXl = 12;
449
+ this.labelSizeLg = 12;
450
+ this.labelSizeMd = 12;
451
+ this.labelSizeSm = 12;
452
+ this.labelSizeXs = 12;
453
+ }
439
454
  }
440
455
  /**
441
456
  * Set label sizes from property or parent layout control
442
457
  */
443
458
  setLabelSizes() {
444
459
  var _a, _b, _c, _d, _e, _f;
460
+ this.setLabelMode();
461
+ // floating labels need always full width
462
+ if (this.labelMode === 'floating') {
463
+ return;
464
+ }
445
465
  // set size extra small
446
466
  if (!this.labelSizeXs) {
447
467
  if ((_a = this.formlayout) === null || _a === void 0 ? void 0 : _a.labelSizeXs) {
@@ -497,6 +517,9 @@ export class SacBaseModelControl {
497
517
  }
498
518
  }
499
519
  }
520
+ /**
521
+ * Sets the label split mode from property or parent layout control\n
522
+ **/
500
523
  setLabelSplitMode() {
501
524
  var _a;
502
525
  if (!this.splitlabelandhelptext) {
@@ -524,7 +547,7 @@ SacBaseModelControl.propDecorators = {
524
547
  helptext: [{ type: Input }],
525
548
  helptextmode: [{ type: Input }],
526
549
  inlineError: [{ type: Input }],
527
- isAdaptiveLabel: [{ type: Input }],
550
+ labelMode: [{ type: Input }],
528
551
  labelSizeLg: [{ type: Input }],
529
552
  labelSizeMd: [{ type: Input }],
530
553
  labelSizeSm: [{ type: Input }],
@@ -537,4 +560,4 @@ SacBaseModelControl.propDecorators = {
537
560
  label: [{ type: Input }],
538
561
  value: [{ type: Input }]
539
562
  };
540
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZW1vZGVsY29udHJvbC5qcyIsInNvdXJjZVJvb3QiOiIvaG9tZS9ydW5uZXIvd29yay9zaW1wbGVhbmd1bGFyY29udHJvbHMvc2ltcGxlYW5ndWxhcmNvbnRyb2xzL2NoLmpuZXR3b3JrLnNhYy1jb250cm9scy9wcm9qZWN0cy9zYWMtY29tbW9uL3NyYy8iLCJzb3VyY2VzIjpbImNvbW1vbi9iYXNlbW9kZWxjb250cm9sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQU92RCxPQUFPLEVBQ0gsZUFBZSxFQUNmLHdCQUF3QixFQUN4QixxQkFBcUIsRUFDckIsOEJBQThCLEdBQ2pDLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSw4QkFBOEIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ2pILE9BQU8sRUFBRSx1QkFBdUIsRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzlHLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzNELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUUvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ3pFLE9BQU8sRUFJSCxlQUFlLEVBQ2Ysa0JBQWtCLEVBQ2xCLFNBQVMsR0FHWixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFbEM7O0dBRUc7QUFFSCxNQUFNLE9BQWdCLG1CQUFtQjtJQThLckMsd0JBQXdCO0lBRXhCLHVCQUF1QjtJQUV2Qjs7OztPQUlHO0lBQ0gsWUFBb0IsVUFBK0IsRUFBbUIsUUFBa0I7UUFBbEIsYUFBUSxHQUFS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QUFxQixHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxxQkFBcUIsQ0FBQzthQUNoRjtTQUNKO0lBQ0wsQ0FBQzs7O1lBdG5CSixTQUFTOzs7WUFuQ0QsbUJBQW1CLHVCQTJOWCxJQUFJO1lBeE1LLFFBQVE7Ozs4QkF3RjdCLEtBQUs7dUJBTUwsS0FBSzsyQkFLTCxLQUFLOzRCQUtMLEtBQUs7dUJBTUwsS0FBSzsyQkFLTCxLQUFLOzBCQU1MLEtBQUs7OEJBS0wsS0FBSzswQkFLTCxLQUFLOzBCQU1MLEtBQUs7MEJBTUwsS0FBSzswQkFNTCxLQUFLOzBCQU1MLEtBQUs7MkJBTUwsS0FBSzttQkFNTCxLQUFLO29DQWdCTCxLQUFLO2lDQThETCxLQUFLO29CQW9ETCxLQUFLO29CQXlDTCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2FjRm9ybUxheW91dENvbW1vbiB9IGZyb20gJy4uL2NvbnRyb2xzL2xheW91dC9mb3JtbGF5b3V0JztcbmltcG9ydCB7IENvbnRyb2xIZWlnaHQgfSBmcm9tICcuLi9lbnVtcy9Db250cm9sSGVpZ2h0JztcbmltcG9ydCB7IElTYWNDb25maWd1cmF0aW9uU2VydmljZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvSVNhY0NvbmZpZ3VyYXRpb25TZXJ2aWNlJztcbmltcG9ydCB7IElTYWNJY29uU2VydmljZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvSVNhY0ljb25TZXJ2aWNlJztcbmltcG9ydCB7IElTYWNMYWJlbFNpemVzIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JU2FjTGFiZWxTaXplcyc7XG5pbXBvcnQgeyBJU2FjTG9jYWxpc2F0aW9uU2VydmljZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvSVNhY0xvY2FsaXNhdGlvblNlcnZpY2UnO1xuaW1wb3J0IHsgSVNhY1ZhbGlkYXRpb25LZXlTZXJ2aWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JU2FjVmFsaWRhdGlvbktleVNlcnZpY2UnO1xuaW1wb3J0IHsgSUFic3RyYWN0Q29udHJvbExhYmVsRXh0ZW5zaW9uIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9pYWJzdHJhY3Rjb250cm9sbGFiZWwnO1xuaW1wb3J0IHtcbiAgICBTQUNJQ09OX1NFUlZJQ0UsXG4gICAgU0FDVkFMSURBVElPTktFWV9TRVJWSUNFLFxuICAgIFNhY0RlZmF1bHRJY29uU2VydmljZSxcbiAgICBTYWNEZWZhdWx0VmFsaWRhdGlvbktleVNlcnZpY2UsXG59IGZyb20gJy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IFNBQ0NPTkZJR1VSQVRJT05fU0VSVklDRSwgU2FjRGVmYXVsdENvbmZpZ3VyYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvc2FjLWNvbmZpZ3VyYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBTQUNMT0NBTElTQVRJT05fU0VSVklDRSwgU2FjRGVmYXVsdExvY2FsaXNhdGlvblNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9zYWMtbG9jYWxpc2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgY29udmVydFRvQm9vbGVhbiB9IGZyb20gJy4uL3V0aWxpdGllcy9jb252ZXJ0aW9uJztcbmltcG9ydCB7IGNyZWF0ZUd1aWQgfSBmcm9tICcuLi91dGlsaXRpZXMvZ3VpZCc7XG5pbXBvcnQgeyBWYWxpZGF0aW9uRXJyb3JJdGVtIH0gZnJvbSAnLi4vdmFsaWRhdGlvbic7XG5pbXBvcnQgeyBEaXJlY3RpdmUsIEhvc3QsIEluamVjdG9yLCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICAgIEFic3RyYWN0Q29udHJvbCxcbiAgICBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgICBGb3JtQ29udHJvbCxcbiAgICBGb3JtQ29udHJvbE5hbWUsXG4gICAgRm9ybUdyb3VwRGlyZWN0aXZlLFxuICAgIE5nQ29udHJvbCxcbiAgICBWYWxpZGF0aW9uRXJyb3JzLFxuICAgIFZhbGlkYXRvcixcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG4vKipcbiAqIEFic3RyYWN0IEtsYXNzZSBmw7xyIFNhY0Jhc2VNb2RlbENvbnRyb2wuIEltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIFZhbGlkYXRvciwgT25Jbml0XG4gKi9cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFNhY0Jhc2VNb2RlbENvbnRyb2w8VkFMVUU+IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIFZhbGlkYXRvciwgT25Jbml0IHtcbiAgICAvLyAjcmVnaW9uIFByb3BlcnRpZXNcblxuICAgIC8qKlxuICAgICAqIElubGluZSBFcnJvcnMgZsO8ciBkYXMgQ29udHJvbFxuICAgICAqL1xuICAgIHByaXZhdGUgX2lubGluZWVycm9yZW5hYmxlZDogYm9vbGVhbiB8IG51bGwgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogTGFiZWwgVGV4dFxuICAgICAqL1xuICAgIHByaXZhdGUgX2xhYmVsOiBzdHJpbmcgPSAnJztcblxuICAgIC8qKlxuICAgICAqIFNlcnZpY2UgZm9yIGxvYWRpbmcgZGVmYXVsdCBzZXR0aW5ncyBmb3IgdGhlIGNvbnRyb2xzXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGNvbmZpZ3VyYXRpb25TZXJ2aWNlOiBJU2FjQ29uZmlndXJhdGlvblNlcnZpY2U7XG5cbiAgICAvKipcbiAgICAgKiBCb29sZWFuIFByb3BlcnR5IGRpcnR5OyBkZWZhdWx0IFdlcnQgLSBmYWxzZVxuICAgICAqL1xuICAgIHByb3RlY3RlZCBfZGlydHk6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFNhY01vZGVsIEZvcm0gaXN0IGRpc2FibGVkXG4gICAgICovXG4gICAgcHJvdGVjdGVkIF9kaXNhYmxlZEZvcm06IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFZhbGlkYXRvclxuICAgICAqL1xuICAgIHByb3RlY3RlZCBfb25DaGFuZ2U6ICgpID0+IHZvaWQ7XG5cbiAgICAvKipcbiAgICAgKiBCb29sZWFuIFByb3BlcnR5IHRvdWNoZWQ7IGRlZmF1bHQgV2VydCAtIGZhbHNlXG4gICAgICovXG4gICAgcHJvdGVjdGVkIF90b3VjaGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5lIFZhcmlhYmxlLCBkaWUgZGVuIFdlcnQgZGVzIENvbnRyb2xzIGjDpGx0XG4gICAgICovXG4gICAgcHJvdGVjdGVkIF92YWx1ZTogVkFMVUUgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogRm9ybSBsYXlvdXQgaW5zdGFuY2UgaWYgZXhpc3RzXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGZvcm1sYXlvdXQ6IFNhY0Zvcm1MYXlvdXRDb21tb24gPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogaWNvbiBzZXJ2aWNlXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGljb25TZXJ2aWNlOiBJU2FjSWNvblNlcnZpY2U7XG5cbiAgICAvKipcbiAgICAgKiBTZXJ2aWNlIGbDvHIgRXJyb3IgTG9jYWxpc2F0aW9uXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGxuZ1Jlc291cmNlU2VydmljZTogSVNhY0xvY2FsaXNhdGlvblNlcnZpY2U7XG5cbiAgICAvKipcbiAgICAgKiBuZ0NvbnRyb2xcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgbmdDb250cm9sOiBGb3JtQ29udHJvbDtcblxuICAgIC8qKlxuICAgICAqIENvbnRyb2xIZWlnaHQgZW51bSBmb3IgdXNlIGluIEhUTUwgbWFya3VwXG4gICAgICovXG4gICAgcHVibGljIENvbnRyb2xIZWlnaHQ6IHR5cGVvZiBDb250cm9sSGVpZ2h0ID0gQ29udHJvbEhlaWdodDtcblxuICAgIC8qKlxuICAgICAqIERlZmluZXMgdGhlIHN0YW5kYXJkIGhlaWdodCBvZiB0aGUgY29tcG9uZW50c1xuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGNvbXBvbmVudEhlaWdodDogQ29udHJvbEhlaWdodCB8IG51bGwgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogRGVha3RpdmllcnQgZGFzIElucHV0IENvbnRyb2xcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIERlYWt0aXZpZXJ0IGRhcyBMYWJlbCBpbSBUZW1wbGF0ZVxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBkaXNhYmxlbGFiZWw6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIElkZW50aWZpZXIgdXNlZCBmb3IgdGhlIEUyRSBkYXRhIGF0dHJpYnV0ZS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBlMmVpZGVudGlmaWVyOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFRleHQgdG8gc3VwcG9ydCB0aGUgdXNlciBkdXJpbmcgaW5wdXQuXG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIGhlbHB0ZXh0OiBzdHJpbmcgPSAnJztcblxuICAgIC8qKlxuICAgICAqIE1vZGUgZm9yIGRpc3BsYXkgaGVscHRleHRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBoZWxwdGV4dG1vZGU6ICd0b29sdGlwJyB8ICd0ZXh0JyB8IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBkZWZpbmVzIHRoYXQgZXJyb3IgbWVzc2FnZXMgYXJlIGRpc3BsYXllZCB1bmRlciB0aGUgY29udHJvbHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgaW5saW5lRXJyb3I6IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogZGVmaW5lcyB0aGF0IHRoZSBsYWJlbHMgYXJlIGRpc3BsYXllZCBhcyBhZGFwdGl2ZSBsYWJlbHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgaXNBZGFwdGl2ZUxhYmVsOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBkZWZhdWx0IGxhYmUgc2l6ZSBmb3IgbGFyZ2UgZGV2aWNlc1xuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGxhYmVsU2l6ZUxnOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIGRlZmF1bHQgbGFiZWwgc2l6ZSBmb3IgbWVkaXVtIGRldmljZXNcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBsYWJlbFNpemVNZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBkZWZhdWx0IGxhYmVsIHNpemUgZm9yIHNtYWxsIGRldmljZXNcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBsYWJlbFNpemVTbTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBkZWZhdWx0IGxhYmVsIHNpemUgZm9yIGV4dHJhIGxhcmdlIGRldmljZXNcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBsYWJlbFNpemVYbDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBkZWZhdWx0IGxhYmVsIGNvbHVtbiBzaXplXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgbGFiZWxTaXplWHM6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogZGVmYXVsdCBsYWJlbCBzaXplIGZvciBleHRyYSBleHRyYSBsYXJnZSBkZXZpY2VzXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgbGFiZWxTaXplWHhsOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIE5hbWUgZGVzIENvbnRyb2xzXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgbmFtZTogc3RyaW5nID0gY3JlYXRlR3VpZCgpO1xuXG4gICAgLyoqXG4gICAgICogTGVlcmUgSW1wbGVtZW50YXRpb24gdm9uIFwicHJvcGFnYXRlQ2hhbmdlXCIuIE11c3MgZ2VtYWNodCB3ZXJkZW4sIGRhbWl0IGtlaW4gRmVobGVyIGVudHN0ZWh0XG4gICAgICovXG4gICAgcHVibGljIHByb3BhZ2F0ZUNoYW5nZTogYW55ID0gKCkgPT4ge307XG5cbiAgICAvKipcbiAgICAgKiBMZWVyZSBJbXBsZW1lbnRhdGlvbiB2b24gXCJwcm9wYWdhdGVUb3VjaFwiLiBNdXNzIGdlbWFjaHQgd2VyZGVuLCBkYW1pdCBrZWluIEZlaGxlciBlbnRzdGVodFxuICAgICAqL1xuICAgIHB1YmxpYyBwcm9wYWdhdGVUb3VjaDogYW55ID0gKCkgPT4ge307XG5cbiAgICAvKipcbiAgICAgKiBEZXRhY2ggbGFiZWwgdGV4dCBhbmQgdG9vbHRpcCBmcm9tIGVhY2ggb3RoZXIgaW4gTGFiZWwgc28gdGhhdCBsYWJlbCBhbmQgdG9vbHRpcCBjYW4gYmUgYWxpZ25lZCBkaWZmZXJlbnRseS4gVGhpcyBpcyBpbiBCb290c3RyYXAgMyBub3Qgc3VwcG9ydGVkIVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNwbGl0bGFiZWxhbmRoZWxwdGV4dDogYm9vbGVhbiB8IG51bGwgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogU2VydmljZSB0byByZWNlaXZlIHN0YW5kYXJkIHZhbGlkYXRpb24gbWVzc2FnZSBrZXlzIGFuZCB0ZXh0c1xuICAgICAqL1xuICAgIHB1YmxpYyB2YWxpZGF0aW9uS2V5U2VydmljZTogSVNhY1ZhbGlkYXRpb25LZXlTZXJ2aWNlO1xuXG4gICAgLy8gI2VuZHJlZ2lvbiBQcm9wZXJ0aWVzXG5cbiAgICAvLyAjcmVnaW9uIENvbnN0cnVjdG9yc1xuXG4gICAgLyoqXG4gICAgICogQ29uc3RydWN0b3JcbiAgICAgKiBAcGFyYW0gZm9ybWxheW91dCBTYWNGb3JtTGF5b3V0Q29tbW9uIHRvIGRlZmluZSBzY29wZWQgbGF5b3V0IHNldHRpbmdzXG4gICAgICogQHBhcmFtIGluamVjdG9yIEluamVjdG9yIGZvciBpbmplY3Rpbmcgc2VydmljZXNcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihASG9zdCgpIGZvcm1sYXlvdXQ6IFNhY0Zvcm1MYXlvdXRDb21tb24sIHByaXZhdGUgcmVhZG9ubHkgaW5qZWN0b3I6IEluamVjdG9yKSB7XG4gICAgICAgIHRoaXMuZm9ybWxheW91dCA9IGZvcm1sYXlvdXQ7XG4gICAgICAgIHRoaXMudmFsaWRhdGlvbktleVNlcnZpY2UgPSBpbmplY3Rvci5nZXQoU0FDVkFMSURBVElPTktFWV9TRVJWSUNFLCBuZXcgU2FjRGVmYXVsdFZhbGlkYXRpb25LZXlTZXJ2aWNlKCkpO1xuICAgICAgICB0aGlzLmxuZ1Jlc291cmNlU2VydmljZSA9IGluamVjdG9yLmdldChcbiAgICAgICAgICAgIFNBQ0xPQ0FMSVNBVElPTl9TRVJWSUNFLFxuICAgICAgICAgICAgbmV3IFNhY0RlZmF1bHRMb2NhbGlzYXRpb25TZXJ2aWNlKHRoaXMudmFsaWRhdGlvbktleVNlcnZpY2UpXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uU2VydmljZSA9IGluamVjdG9yLmdldChTQUNDT05GSUdVUkFUSU9OX1NFUlZJQ0UsIG5ldyBTYWNEZWZhdWx0Q29uZmlndXJhdGlvblNlcnZpY2UoKSk7XG5cbiAgICAgICAgdGhpcy5pY29uU2VydmljZSA9IGluamVjdG9yLmdldChTQUNJQ09OX1NFUlZJQ0UsIG5ldyBTYWNEZWZhdWx0SWNvblNlcnZpY2UoKSk7XG4gICAgfVxuXG4gICAgLy8gI2VuZHJlZ2lvbiBDb25zdHJ1Y3RvcnNcblxuICAgIC8vICNyZWdpb24gUHVibGljIEdldHRlcnMgQW5kIFNldHRlcnNcblxuICAgIC8qKlxuICAgICAqIEdldCBJY29uIGZvciBIZWxwdGV4dCBUb29sdGlwXG4gICAgICovXG4gICAgcHVibGljIGdldCBIZWxwdGV4dFRvb2x0aXBJY29uKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmljb25TZXJ2aWNlLkdlbmVyaWNIZWxwdGV4dEljb247XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTWV0aG9kZSBlcmdpYnQgQm9vbGVhbiBXZXJ0IGbDvHIgZGlydHlcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGRpcnR5KCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5uZ0NvbnRyb2wgIT09IG51bGwgJiYgdGhpcy5uZ0NvbnRyb2wgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5fZGlydHkgPSB0aGlzLm5nQ29udHJvbC5kaXJ0eTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9kaXJ0eTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTaG93IGVycm9yIG1lc3NhZ2VzIGlubGluZVxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgaW5saW5lZXJyb3JlbmFibGVkKCk6IGJvb2xlYW4gfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lubGluZWVycm9yZW5hYmxlZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBa3RpdmllcnQgb2RlciBEZWFrdGl2aWVydCBkaWUgSW5saW5lIEVycm9ycyBmw7xyIGRhcyBDb250cm9sXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IGlubGluZWVycm9yZW5hYmxlZCh2YWx1ZTogYm9vbGVhbiB8IG51bGwpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2lubGluZWVycm9yZW5hYmxlZCA9IG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9pbmxpbmVlcnJvcmVuYWJsZWQgPSBjb252ZXJ0VG9Cb29sZWFuKHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1ldGhvZGUgZXJnaWJ0IGJvb2xlYW4gV2VydCB3ZW5uIEZvcm0gaW52YWxpZCBvZGVyIG5pY2h0IGludmFsaWQgaXN0XG4gICAgICovXG4gICAgcHVibGljIGdldCBpbnZhbGlkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5uZ0NvbnRyb2wgIT09IHVuZGVmaW5lZCAmJiB0aGlzLm5nQ29udHJvbCAhPT0gbnVsbCAmJiB0aGlzLm5nQ29udHJvbC5pbnZhbGlkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlZmluaWVydCBvYiBkYXMgQ29udHJvbCBkaXNhYmxlZCBpc3RcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGlzZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZEZvcm0gfHwgdGhpcy5kaXNhYmxlZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIGlubGluZSBlcnJvciBtZXNzYWdlcyBhcmUgYWN0aXZlIGZvciB0aGlzIGNvbnRyb2wuXG4gICAgICovXG4gICAgcHVibGljIGdldCBpc2lubGluZWVycm9yZW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMuX2lubGluZWVycm9yZW5hYmxlZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lubGluZWVycm9yZW5hYmxlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmZvcm1sYXlvdXQgIT09IG51bGwgJiYgdGhpcy5mb3JtbGF5b3V0LklzSW5saW5lRXJyb3JFbmFibGVkICE9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5mb3JtbGF5b3V0Py5Jc0lubGluZUVycm9yRW5hYmxlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmNvbmZpZ3VyYXRpb25TZXJ2aWNlLklubGluZUVycm9yRW5hYmxlZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uZmlndXJhdGlvblNlcnZpY2UuSW5saW5lRXJyb3JFbmFibGVkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVmaW5pZXJ0IGRlbiBMYWJlbCBUZXh0XG4gICAgICovXG4gICAgcHVibGljIGdldCBsYWJlbCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fbGFiZWw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVmaW5pZXJ0IGRlbiBMYWJlbCBUZXh0XG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIHNldCBsYWJlbCh2OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fbGFiZWwgPSB2O1xuICAgICAgICB0aGlzLlVwZGF0ZUxhYmVsVG9Db250cm9sKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogcmV0dXJucyBhbiBvYmplY3Qgd2l0aCBhbGwgbGFiZWwgc2l6ZXMuIFRoZXNlIHZhbHVlcyBjYW4gdGhlbiBiZSB0cmFuc2ZlcnJlZCB0byBjb3JyZXNwb25kaW5nIENTUyBjbGFzc2VzIHVzaW5nIGEgcGlwZVxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgbGFiZWxTaXplcygpOiBJU2FjTGFiZWxTaXplcyB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBsYWJlbFNpemVTbTogdGhpcy5sYWJlbFNpemVTbSxcbiAgICAgICAgICAgIGxhYmVsU2l6ZU1kOiB0aGlzLmxhYmVsU2l6ZU1kLFxuICAgICAgICAgICAgbGFiZWxTaXplWHM6IHRoaXMubGFiZWxTaXplWHMsXG4gICAgICAgICAgICBsYWJlbFNpemVYbDogdGhpcy5sYWJlbFNpemVYbCxcbiAgICAgICAgICAgIGxhYmVsU2l6ZVh4bDogdGhpcy5sYWJlbFNpemVYeGwsXG4gICAgICAgICAgICBsYWJlbFNpemVMZzogdGhpcy5sYWJlbFNpemVMZyxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNZXRob2RlIGVyZ2lidCBCb29sZWFuIFdlcnQgZsO8ciB0b3VjaGVkXG4gICAgICovXG4gICAgcHVibGljIGdldCB0b3VjaGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5uZ0NvbnRyb2wgIT09IG51bGwgJiYgdGhpcy5uZ0NvbnRyb2wgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5fdG91Y2hlZCA9IHRoaXMubmdDb250cm9sLnRvdWNoZWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fdG91Y2hlZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgTWV0aG9kZSBmw7xyIE5nTW9kZWwgQmluZGluZyBpbiBIdG1sIE1hcmt1cFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgdmFsdWUoKTogVkFMVUUge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IE1ldGhvZGUgZsO8ciBOZ01vZGVsIEJpbmRpbmcgaW4gSHRtbCBNYXJrdXBcbiAgICAgKiBJbnB1dCB3aXJkIGJlbsO2dGlndCwgZGFtaXQgZGVyIFdlcnQgYXVjaCDDvGJlciBkYXMgTWFya3VwIGdlc2V0enQgd2VyZGVuIGthbm4uXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IHZhbHVlKHY6IFZBTFVFKSB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl92YWx1ZSA9IHRoaXMuQ29udmVydElucHV0VmFsdWUodik7XG4gICAgICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKHRoaXMuX3ZhbHVlKTtcbiAgICB9XG5cbiAgICAvLyAjZW5kcmVnaW9uIFB1YmxpYyBHZXR0ZXJzIEFuZCBTZXR0ZXJzXG5cbiAgICAvLyAjcmVnaW9uIFB1YmxpYyBNZXRob2RzXG5cbiAgICAvKipcbiAgICAgKiBNZXRob2RlIGVyZ2lidCBFcnJvciBhbmhhbmQgdm9uIGdlZ2ViZW5lbiBLcml0ZXJpZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgR2V0RXJyb3JNZXNzYWdlKCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgICAgIGlmICh0aGlzLm5nQ29udHJvbC5lcnJvcnMgPT09IHVuZGVmaW5lZCB8fCB0aGlzLm5nQ29udHJvbC5lcnJvcnMgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZTxzdHJpbmc+KChvYnNlcnZlcikgPT4ge1xuICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoJycpO1xuICAgICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGVycm9yczogVmFsaWRhdGlvbkVycm9ycyA9IHRoaXMubmdDb250cm9sLmVycm9ycztcblxuICAgICAgICBpZiAoZXJyb3JzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlPHN0cmluZz4oKG9ic2VydmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dCgnJyk7XG4gICAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qga2V5czogc3RyaW5nW10gPSBPYmplY3Qua2V5cyhlcnJvcnMpO1xuXG4gICAgICAgIGlmIChrZXlzLmxlbmd0aCA8PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGU8c3RyaW5nPigob2JzZXJ2ZXIpID0+IHtcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KCcnKTtcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBlcnJvckl0ZW06IFZhbGlkYXRpb25FcnJvckl0ZW0gPSBlcnJvcnNba2V5c1swXV07XG5cbiAgICAgICAgLy8gVmFsaWRhdGlvbiBQYXJhbWV0ZXJzXG4gICAgICAgIGNvbnN0IHBhcmFtZXRlcnMgPSB7fTtcbiAgICAgICAgaWYgKGVycm9ySXRlbS5wYXJhbWV0ZXJzICE9PSBudWxsICYmIGVycm9ySXRlbS5wYXJhbWV0ZXJzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGVycm9ySXRlbS5wYXJhbWV0ZXJzLmZvckVhY2goKHYsIGspID0+IHtcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzW2tdID0gdjtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHBhcmFtZXRlcnNbJ0ZJRUxEJ10gPSBlcnJvckl0ZW0uZmllbGROYW1lO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmxuZ1Jlc291cmNlU2VydmljZS5HZXRTdHJpbmcoZXJyb3JJdGVtLmVycm9yTWVzc2FnZUtleSwgcGFyYW1ldGVycyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW5pdCBFdmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICAgICAgLy8gcmVjZWl2ZSBmb3JtIHZpYSBmb3JtY29udHJvbG5hbWUgb3IgZm9ybWNvbnRyb2wgaW5zdGFuY2VcbiAgICAgICAgY29uc3QgZm9ybUNvbnRyb2wgPSB0aGlzLmluamVjdG9yLmdldChOZ0NvbnRyb2wsIG51bGwpO1xuICAgICAgICBpZiAoZm9ybUNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQ29udHJvbE5hbWUpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm0gPSB0aGlzLmluamVjdG9yLmdldChGb3JtR3JvdXBEaXJlY3RpdmUsIG51bGwpO1xuICAgICAgICAgICAgdGhpcy5uZ0NvbnRyb2wgPSBmb3JtLmdldENvbnRyb2woZm9ybUNvbnRyb2wpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGZvcm1Db250cm9sKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5uZ0NvbnRyb2wgPSBmb3JtQ29udHJvbC5jb250cm9sIGFzIEZvcm1Db250cm9sO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5VcGRhdGVMYWJlbFRvQ29udHJvbCgpO1xuXG4gICAgICAgIC8vIHNldCBsYWJlbCBzaXplcyBmcm9tIGZvcm1sYXlvdXQgZGlyZWN0aXZlXG4gICAgICAgIHRoaXMuc2V0TGFiZWxTaXplcygpO1xuXG4gICAgICAgIC8vIHNldCBjb21wb25lbnQgaGVpZ3RoIGZyb20gZnJvbWxheW91dCBkaXJlY3RpdmVcbiAgICAgICAgdGhpcy5zZXRDb21wb25lbnRIZWlnaHQoKTtcblxuICAgICAgICAvLyBzZXQgYWRhcHRpdmUgbGFiZWwgcHJvcGVydHkgZnJvbSBmb3JtbGF5b3V0IGRpcmVjdGl2ZVxuICAgICAgICB0aGlzLnNldElzQWRhcHRpdmVMYWJlbCgpO1xuXG4gICAgICAgIC8vIHNldCBtZXRob2QgdG8gZGlzcGxheSBoZWxwdGV4dFxuICAgICAgICB0aGlzLnNldEhlbHBUZXh0TW9kZSgpO1xuXG4gICAgICAgIC8vIHNldCBTcGxpdE1vZGUgZm9yIExhYmVsc1xuICAgICAgICB0aGlzLnNldExhYmVsU3BsaXRNb2RlKCk7XG5cbiAgICAgICAgdGhpcy5PbkNsYXNzSW5pdCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1ldGhvZGUgZXJnaWJ0IGJvb2xlYW4gdG91Y2hlZCA9IHRydWVcbiAgICAgKi9cbiAgICBwdWJsaWMgb25Ub3VjaCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdG91Y2hlZCA9IHRydWU7XG4gICAgICAgIHRoaXMucHJvcGFnYXRlVG91Y2goKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNZXRob2RlLCBkYW1pdCBhbmRlcmUgQ29udHJvbHMgw6RuZGVydW5nZW4gaW0gQ29udHJvbCBtaXRiZWtvbW1lbiBrw7ZubmVuXG4gICAgICogWnVyIMOEbmRlcnVuZ3NpbmZvIGRpZSBNZXRob2RlIHByb3BhZ2F0ZUNoYW5nZSBhdWZydWZlbi5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlID0gKG9iaikgPT4gZm4ob2JqKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNZXRob2RlLCBkYW1pdCBhbmRlcmUgQ29udHJvbHMgw6RuZGVydW5nZW4gbWl0YmVrb21tZW4sIHdlbm4gZGFzIENvbnRyb2wgYWt0aXZpZXJ0IChGb2N1cykgd2lyZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLnByb3BhZ2F0ZVRvdWNoID0gKG9iaikgPT4gZm4ob2JqKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNZXRob2RlIHJlZ2lzdHJpZXJ0IMOEbmRlcnVuZ2VuIGJlaSBkZXIgVmFsaWRpZXJ1bmdcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZShmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9vbkNoYW5nZSA9IGZuO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHp0IGRhcyBDb250cm9sIGF1ZiBEaXNhYmxlZFxuICAgICAqL1xuICAgIHB1YmxpYyBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZGlzYWJsZWRGb3JtID0gaXNEaXNhYmxlZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNZXRob2RlIGRpZSBkZW4gV2VydCBkZXMgSW5wdXRzIHNldHp0XG4gICAgICovXG4gICAgcHVibGljIHNldFZhbHVlKHY6IFZBTFVFKTogdm9pZCB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFZhbGlkYXRvciBNZXRob2RlXG4gICAgICovXG4gICAgcHVibGljIHZhbGlkYXRlKGM6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICAgICAgY29uc3QgZXJyb3I6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0gdGhpcy52YWxpZGF0ZURhdGEoYyk7XG4gICAgICAgIHJldHVybiBlcnJvcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBYnN0cmFrdGUgVmFsaWRhdG9yIE1ldGhvZGVcbiAgICAgKi9cbiAgICBwdWJsaWMgYWJzdHJhY3QgdmFsaWRhdGVEYXRhKGM6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsO1xuXG4gICAgLyoqXG4gICAgICogTWV0aG9kZSB6dW0gc2NocmVpYmVuIHZvbiBXZXJ0ZW4gYXVzIGRlbSBNb2RlbCBpbiBkYXMgQ29udHJvbFxuICAgICAqL1xuICAgIHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlOiBWQUxVRSkge1xuICAgICAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8vICNlbmRyZWdpb24gUHVibGljIE1ldGhvZHNcblxuICAgIC8vICNyZWdpb24gUHJvdGVjdGVkIE1ldGhvZHNcblxuICAgIC8qKlxuICAgICAqIE1ldGhvZCBjYW4gT3ZlcndyaXRlbiBpbiBQYXJlbnQgQ2xhc3Nlc1xuICAgICAqIEBwYXJhbSB2YWx1ZSBXZXJ0IHdlbGNoZXIgaW4gZGVuIGtvcnJla3RlbiBUeXAga29udmVydGllcnQgd2VyZGVuIHNvbGxcbiAgICAgKiBAcmV0dXJucyBXZXJ0IGltIGtvcnJla3RlbiBUeXBcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgQ29udmVydElucHV0VmFsdWUodmFsdWU6IFZBTFVFKTogVkFMVUUge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTWV0aG9kZSBlcmdpYnQgRGVjaW1hbCBTeW1ib2xcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgR2V0RGVjaW1hbFN5bWJvbCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gJy4nO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1ldGhvZCBjYW4gYmUgdXNlZCB0byBTZXQgUHJvcGVydGllcyBhdCBDbGFzcyBJbml0XG4gICAgICovXG4gICAgcHJvdGVjdGVkIE9uQ2xhc3NJbml0KCk6IHZvaWQge31cblxuICAgIC8qKlxuICAgICAqIEFrdHVhbGlzaWVydCBkZW4gTmdNb2RlbCBXZXJ0IHVuZCBkaWUgR8O8bHRpZ2tlaXQgZGVzIFZhbGlkYXRvcnMgZGVzIENvbnRyb2xzXG4gICAgICovXG4gICAgcHJvdGVjdGVkIFVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLm5nQ29udHJvbCkge1xuICAgICAgICAgICAgdGhpcy5uZ0NvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IG9ubHlTZWxmOiB0cnVlIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gI2VuZHJlZ2lvbiBQcm90ZWN0ZWQgTWV0aG9kc1xuXG4gICAgLy8gI3JlZ2lvbiBQcml2YXRlIE1ldGhvZHNcblxuICAgIHByaXZhdGUgVXBkYXRlTGFiZWxUb0NvbnRyb2woKTogdm9pZCB7XG4gICAgICAgIC8vIEhBQ0s6IEFkZCBhZGRpdGlvbiBwcm9wZXJ0eSB0byBGb3JtQ29udHJvbC4gQ2FuIGJlIGZpeGVkIGlmIHNvbHV0aW9uIGZvciB0aWNrZXQ6IGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvaXNzdWVzLzE5Njg2XG4gICAgICAgIGlmICh0aGlzLm5nQ29udHJvbCkge1xuICAgICAgICAgICAgKHRoaXMubmdDb250cm9sIGFzIHVua25vd24gYXMgSUFic3RyYWN0Q29udHJvbExhYmVsRXh0ZW5zaW9uKS5jb250cm9sbGFiZWwgPSB0aGlzLmxhYmVsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IGNvbXBvbmVudCBoZWlnaHQgZnJvbSBwcm9wZXJ0eSBvciBwYXJlbnQgbGF5b3V0IGNvbnRyb2xcbiAgICAgKi9cbiAgICBwcml2YXRlIHNldENvbXBvbmVudEhlaWdodCgpIHtcbiAgICAgICAgLy8gc2V0IHNpemUgZXh0cmEgc21hbGxcbiAgICAgICAgaWYgKCF0aGlzLmNvbXBvbmVudEhlaWdodCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZm9ybWxheW91dD8uY29tcG9uZW50SGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb21wb25lbnRIZWlnaHQgPSB0aGlzLmZvcm1sYXlvdXQuY29tcG9uZW50SGVpZ2h0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbXBvbmVudEhlaWdodCA9IHRoaXMuY29uZmlndXJhdGlvblNlcnZpY2UuQ29tcG9uZW50SGVpZ2h0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IG1vZGUgZm9yIGhlbHB0ZXh0LiBDYW4gYmUgdG9vbHRpcCBvciB0ZXh0XG4gICAgICovXG4gICAgcHJpdmF0ZSBzZXRIZWxwVGV4dE1vZGUoKSB7XG4gICAgICAgIGlmICghdGhpcy5oZWxwdGV4dG1vZGUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmZvcm1sYXlvdXQ/LmhlbHB0ZXh0bW9kZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaGVscHRleHRtb2RlID0gdGhpcy5mb3JtbGF5b3V0LmhlbHB0ZXh0bW9kZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oZWxwdGV4dG1vZGUgPSB0aGlzLmNvbmZpZ3VyYXRpb25TZXJ2aWNlLkhlbHB0ZXh0TW9kZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldCBhZGFwdGl2ZSBsYWJlbCBwcm9wZXJ0eSBmcm9tIHBhcmVudCBsYXlvdXQgY29udHJvbFxuICAgICAqL1xuICAgIHByaXZhdGUgc2V0SXNBZGFwdGl2ZUxhYmVsKCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNBZGFwdGl2ZUxhYmVsKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5mb3JtbGF5b3V0Py5pc0FkYXB0aXZlTGFiZWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNBZGFwdGl2ZUxhYmVsID0gdGhpcy5mb3JtbGF5b3V0LmlzQWRhcHRpdmVMYWJlbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0FkYXB0aXZlTGFiZWwgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldCBsYWJlbCBzaXplcyBmcm9tIHByb3BlcnR5IG9yIHBhcmVudCBsYXlvdXQgY29udHJvbFxuICAgICAqL1xuICAgIHByaXZhdGUgc2V0TGFiZWxTaXplcygpIHtcbiAgICAgICAgLy8gc2V0IHNpemUgZXh0cmEgc21hbGxcbiAgICAgICAgaWYgKCF0aGlzLmxhYmVsU2l6ZVhzKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5mb3JtbGF5b3V0Py5sYWJlbFNpemVYcykge1xuICAgICAgICAgICAgICAgIHRoaXMubGFiZWxTaXplWHMgPSB0aGlzLmZvcm1sYXlvdXQubGFiZWxTaXplWHM7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMubGFiZWxTaXplWHMgPSB0aGlzLmNvbmZpZ3VyYXRpb25TZXJ2aWNlLkxhYmVsU2l6ZVhzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gc2V0IHNpemUgc21hbGxcbiAgICAgICAgaWYgKCF0aGlzLmxhYmVsU2l6ZVNtKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5mb3JtbGF5b3V0Py5sYWJlbFNpemVTbSkge1xuICAgICAgICAgICAgICAgIHRoaXMubGFiZWxTaXplU20gPSB0aGlzLmZvcm1sYXlvdXQubGFiZWxTaXplU207XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMubGFiZWxTaXplU20gPSB0aGlzLmNvbmZpZ3VyYXRpb25TZXJ2aWNlLkxhYmVsU2l6ZVNtO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gc2V0IHNpemUgbWVkaXVtXG4gICAgICAgIGlmICghdGhpcy5sYWJlbFNpemVNZCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZm9ybWxheW91dD8ubGFiZWxTaXplTWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxhYmVsU2l6ZU1kID0gdGhpcy5mb3JtbGF5b3V0LmxhYmVsU2l6ZU1kO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxhYmVsU2l6ZU1kID0gdGhpcy5jb25maWd1cmF0aW9uU2VydmljZS5MYWJlbFNpemVNZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHNldCBzaXplIGxhcmdlXG4gICAgICAgIGlmICghdGhpcy5sYWJlbFNpemVMZykge1xuICAgICAgICAgICAgaWYgKHRoaXMuZm9ybWxheW91dD8ubGFiZWxTaXplTGcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxhYmVsU2l6ZUxnID0gdGhpcy5mb3JtbGF5b3V0LmxhYmVsU2l6ZUxnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxhYmVsU2l6ZUxnID0gdGhpcy5jb25maWd1cmF0aW9uU2VydmljZS5MYWJlbFNpemVMZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHNldCBzaXplIGV4dHJhIGxhcmdlXG4gICAgICAgIGlmICghdGhpcy5sYWJlbFNpemVYbCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZm9ybWxheW91dD8ubGFiZWxTaXplWGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxhYmVsU2l6ZVhsID0gdGhpcy5mb3JtbGF5b3V0LmxhYmVsU2l6ZVhsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxhYmVsU2l6ZVhsID0gdGhpcy5jb25maWd1cmF0aW9uU2VydmljZS5MYWJlbFNpemVYbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHNldCBzaXplIGV4dHJhIGV4dHJhIGxhcmdlXG4gICAgICAgIGlmICghdGhpcy5sYWJlbFNpemVYeGwpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmZvcm1sYXlvdXQ/LmxhYmVsU2l6ZVh4bCkge1xuICAgICAgICAgICAgICAgIHRoaXMubGFiZWxTaXplWHhsID0gdGhpcy5mb3JtbGF5b3V0LmxhYmVsU2l6ZVh4bDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sYWJlbFNpemVYeGwgPSB0aGlzLmNvbmZpZ3VyYXRpb25TZXJ2aWNlLkxhYmVsU2l6ZVh4bDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0TGFiZWxTcGxpdE1vZGUoKSB7XG4gICAgICAgIGlmICghdGhpcy5zcGxpdGxhYmVsYW5kaGVscHRleHQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmZvcm1sYXlvdXQ/LnNwbGl0bGFiZWxhbmRoZWxwdGV4dCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc3BsaXRsYWJlbGFuZGhlbHB0ZXh0ID0gdGhpcy5mb3JtbGF5b3V0LnNwbGl0bGFiZWxhbmRoZWxwdGV4dDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zcGxpdGxhYmVsYW5kaGVscHRleHQgPSB0aGlzLmNvbmZpZ3VyYXRpb25TZXJ2aWNlLlNwbGl0TGFiZWxBbmRIZWxwdGV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vICNlbmRyZWdpb24gUHJpdmF0ZSBNZXRob2RzXG59XG4iXX0=
563
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZW1vZGVsY29udHJvbC5qcyIsInNvdXJjZVJvb3QiOiIvaG9tZS9ydW5uZXIvd29yay9zaW1wbGVhbmd1bGFyY29udHJvbHMvc2ltcGxlYW5ndWxhcmNvbnRyb2xzL2NoLmpuZXR3b3JrLnNhYy1jb250cm9scy9wcm9qZWN0cy9zYWMtY29tbW9uL3NyYy8iLCJzb3VyY2VzIjpbImNvbW1vbi9iYXNlbW9kZWxjb250cm9sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQU92RCxPQUFPLEVBQ0gsZUFBZSxFQUNmLHdCQUF3QixFQUN4QixxQkFBcUIsRUFDckIsOEJBQThCLEdBQ2pDLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSw4QkFBOEIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ2pILE9BQU8sRUFBRSx1QkFBdUIsRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzlHLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzNELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUUvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ3pFLE9BQU8sRUFJSCxlQUFlLEVBQ2Ysa0JBQWtCLEVBQ2xCLFNBQVMsR0FHWixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFbEM7O0dBRUc7QUFFSCxNQUFNLE9BQWdCLG1CQUFtQjtJQStLckMsd0JBQXdCO0lBRXhCLHVCQUF1QjtJQUV2Qjs7OztPQUlHO0lBQ0gsWUFDWSxVQUErQixFQUN0QixRQUFrQjtRQUFsQixhQUFRLEdBQVIs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WSxFQUFFO2dCQUMvQixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDO2FBQ3BEO2lCQUFNO2dCQUNILElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFlBQVksQ0FBQzthQUM5RDtTQUNKO0lBQ0wsQ0FBQztJQUVEOztRQUVJO0lBQ0ksaUJBQWlCOztRQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFO1lBQzdCLFVBQUksSUFBSSxDQUFDLFVBQVUsMENBQUUscUJBQXFCLEVBQUU7Z0JBQ3hDLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLHFCQUFxQixDQUFDO2FBQ3RFO2lCQUFNO2dCQUNILElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMscUJBQXFCLENBQUM7YUFDaEY7U0FDSjtJQUNMLENBQUM7OztZQXhwQkosU0FBUzs7O1lBbkNELG1CQUFtQix1QkE2Tm5CLElBQUk7WUExTWEsUUFBUTs7OzhCQXdGN0IsS0FBSzt1QkFNTCxLQUFLOzJCQUtMLEtBQUs7NEJBS0wsS0FBSzt1QkFNTCxLQUFLOzJCQUtMLEtBQUs7MEJBTUwsS0FBSzt3QkFLTCxLQUFLOzBCQU1MLEtBQUs7MEJBTUwsS0FBSzswQkFNTCxLQUFLOzBCQU1MLEtBQUs7MEJBTUwsS0FBSzsyQkFNTCxLQUFLO21CQU1MLEtBQUs7b0NBZ0JMLEtBQUs7aUNBaUVMLEtBQUs7b0JBb0RMLEtBQUs7b0JBeUNMLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTYWNGb3JtTGF5b3V0Q29tbW9uIH0gZnJvbSAnLi4vY29udHJvbHMvbGF5b3V0L2Zvcm1sYXlvdXQnO1xuaW1wb3J0IHsgQ29udHJvbEhlaWdodCB9IGZyb20gJy4uL2VudW1zL0NvbnRyb2xIZWlnaHQnO1xuaW1wb3J0IHsgSVNhY0NvbmZpZ3VyYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JU2FjQ29uZmlndXJhdGlvblNlcnZpY2UnO1xuaW1wb3J0IHsgSVNhY0ljb25TZXJ2aWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JU2FjSWNvblNlcnZpY2UnO1xuaW1wb3J0IHsgSVNhY0xhYmVsU2l6ZXMgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0lTYWNMYWJlbFNpemVzJztcbmltcG9ydCB7IElTYWNMb2NhbGlzYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JU2FjTG9jYWxpc2F0aW9uU2VydmljZSc7XG5pbXBvcnQgeyBJU2FjVmFsaWRhdGlvbktleVNlcnZpY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0lTYWNWYWxpZGF0aW9uS2V5U2VydmljZSc7XG5pbXBvcnQgeyBJQWJzdHJhY3RDb250cm9sTGFiZWxFeHRlbnNpb24gfSBmcm9tICcuLi9pbnRlcmZhY2VzL2lhYnN0cmFjdGNvbnRyb2xsYWJlbCc7XG5pbXBvcnQge1xuICAgIFNBQ0lDT05fU0VSVklDRSxcbiAgICBTQUNWQUxJREFUSU9OS0VZX1NFUlZJQ0UsXG4gICAgU2FjRGVmYXVsdEljb25TZXJ2aWNlLFxuICAgIFNhY0RlZmF1bHRWYWxpZGF0aW9uS2V5U2VydmljZSxcbn0gZnJvbSAnLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgU0FDQ09ORklHVVJBVElPTl9TRVJWSUNFLCBTYWNEZWZhdWx0Q29uZmlndXJhdGlvblNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9zYWMtY29uZmlndXJhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFNBQ0xPQ0FMSVNBVElPTl9TRVJWSUNFLCBTYWNEZWZhdWx0TG9jYWxpc2F0aW9uU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3NhYy1sb2NhbGlzYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBjb252ZXJ0VG9Cb29sZWFuIH0gZnJvbSAnLi4vdXRpbGl0aWVzL2NvbnZlcnRpb24nO1xuaW1wb3J0IHsgY3JlYXRlR3VpZCB9IGZyb20gJy4uL3V0aWxpdGllcy9ndWlkJztcbmltcG9ydCB7IFZhbGlkYXRpb25FcnJvckl0ZW0gfSBmcm9tICcuLi92YWxpZGF0aW9uJztcbmltcG9ydCB7IERpcmVjdGl2ZSwgSG9zdCwgSW5qZWN0b3IsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgQWJzdHJhY3RDb250cm9sLFxuICAgIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICAgIEZvcm1Db250cm9sLFxuICAgIEZvcm1Db250cm9sTmFtZSxcbiAgICBGb3JtR3JvdXBEaXJlY3RpdmUsXG4gICAgTmdDb250cm9sLFxuICAgIFZhbGlkYXRpb25FcnJvcnMsXG4gICAgVmFsaWRhdG9yLFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbi8qKlxuICogQWJzdHJhY3QgY2xhc3MgZm9yIFNhY0Jhc2VNb2RlbENvbnRyb2wuIEltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIFZhbGlkYXRvciwgT25Jbml0XG4gKi9cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFNhY0Jhc2VNb2RlbENvbnRyb2w8VkFMVUU+IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIFZhbGlkYXRvciwgT25Jbml0IHtcbiAgICAvLyAjcmVnaW9uIFByb3BlcnRpZXNcblxuICAgIC8qKlxuICAgICAqIElubGluZSBlcnJvcnMgZm9yIHRoZSBjb250cm9sXG4gICAgICovXG4gICAgcHJpdmF0ZSBfaW5saW5lZXJyb3JlbmFibGVkOiBib29sZWFuIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBMYWJlbCBUZXh0XG4gICAgICovXG4gICAgcHJpdmF0ZSBfbGFiZWwgPSAnJztcblxuICAgIC8qKlxuICAgICAqIFNlcnZpY2UgZm9yIGxvYWRpbmcgZGVmYXVsdCBzZXR0aW5ncyBmb3IgdGhlIGNvbnRyb2xzXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGNvbmZpZ3VyYXRpb25TZXJ2aWNlOiBJU2FjQ29uZmlndXJhdGlvblNlcnZpY2U7XG5cbiAgICAvKipcbiAgICAgKiBCb29sZWFuIHByb3BlcnR5IGRpcnR5OyBkZWZhdWx0IHZhbHVlIC0gZmFsc2VcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgX2RpcnR5ID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBTYWNNb2RlbCBmb3JtIGlzIGRpc2FibGVkXG4gICAgICovXG4gICAgcHJvdGVjdGVkIF9kaXNhYmxlZEZvcm0gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFZhbGlkYXRvclxuICAgICAqL1xuICAgIHByb3RlY3RlZCBfb25DaGFuZ2U6ICgpID0+IHZvaWQ7XG5cbiAgICAvKipcbiAgICAgKiBCb29sZWFuIHByb3BlcnR5IHRvdWNoZWQ7IGRlZmF1bHQgdmFsdWUgLSBmYWxzZVxuICAgICAqL1xuICAgIHByb3RlY3RlZCBfdG91Y2hlZCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgdmFyaWFibGUgdGhhdCBob2xkcyB0aGUgdmFsdWUgb2YgdGhlIGNvbnRyb2xcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgX3ZhbHVlOiBWQUxVRSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBGb3JtIGxheW91dCBpbnN0YW5jZSBpZiBleGlzdHNcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgZm9ybWxheW91dDogU2FjRm9ybUxheW91dENvbW1vbiA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBpY29uIHNlcnZpY2VcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgaWNvblNlcnZpY2U6IElTYWNJY29uU2VydmljZTtcblxuICAgIC8qKlxuICAgICAqIFNlcnZpY2UgZm9yIGVycm9yIGxvY2FsaXNhdGlvblxuICAgICAqL1xuICAgIHByb3RlY3RlZCBsbmdSZXNvdXJjZVNlcnZpY2U6IElTYWNMb2NhbGlzYXRpb25TZXJ2aWNlO1xuXG4gICAgLyoqXG4gICAgICogbmdDb250cm9sXG4gICAgICovXG4gICAgcHJvdGVjdGVkIG5nQ29udHJvbDogRm9ybUNvbnRyb2w7XG5cbiAgICAvKipcbiAgICAgKiBDb250cm9sSGVpZ2h0IGVudW0gZm9yIHVzZSBpbiBIVE1MIG1hcmt1cFxuICAgICAqL1xuICAgIHB1YmxpYyBDb250cm9sSGVpZ2h0OiB0eXBlb2YgQ29udHJvbEhlaWdodCA9IENvbnRyb2xIZWlnaHQ7XG5cbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIHRoZSBzdGFuZGFyZCBoZWlnaHQgb2YgdGhlIGNvbXBvbmVudHNcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBjb21wb25lbnRIZWlnaHQ6IENvbnRyb2xIZWlnaHQgfCBudWxsID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIERpc2FibGVzIHRoZSBpbnB1dCBjb250cm9sXG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIGRpc2FibGVkID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBEaXNhYmxlcyB0aGUgbGFiZWwgaW4gdGhlIHRlbXBsYXRlXG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIGRpc2FibGVsYWJlbCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogSWRlbnRpZmllciB1c2VkIGZvciB0aGUgRTJFIGRhdGEgYXR0cmlidXRlLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGUyZWlkZW50aWZpZXI6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogVGV4dCB0byBzdXBwb3J0IHRoZSB1c2VyIGR1cmluZyBpbnB1dC5cbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgaGVscHRleHQgPSAnJztcblxuICAgIC8qKlxuICAgICAqIE1vZGUgZm9yIGRpc3BsYXkgaGVscHRleHRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBoZWxwdGV4dG1vZGU6ICd0b29sdGlwJyB8ICd0ZXh0JyB8IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBkZWZpbmVzIHRoYXQgZXJyb3IgbWVzc2FnZXMgYXJlIGRpc3BsYXllZCB1bmRlciB0aGUgY29udHJvbHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgaW5saW5lRXJyb3IgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogTGFiZWwgTW9kZSAnc3RhbmRhcmQnIHwgJ2Zsb2F0aW5nJyBvciBudWxsIChudWxsID0gdXNlIGdsb2JhbCBjb25maWd1cmF0aW9uKVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGxhYmVsTW9kZTogJ3N0YW5kYXJkJyB8ICdmbG9hdGluZycgfCBudWxsID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIGRlZmF1bHQgbGFiZSBzaXplIGZvciBsYXJnZSBkZXZpY2VzXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgbGFiZWxTaXplTGc6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogZGVmYXVsdCBsYWJlbCBzaXplIGZvciBtZWRpdW0gZGV2aWNlc1xuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGxhYmVsU2l6ZU1kOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIGRlZmF1bHQgbGFiZWwgc2l6ZSBmb3Igc21hbGwgZGV2aWNlc1xuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGxhYmVsU2l6ZVNtOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIGRlZmF1bHQgbGFiZWwgc2l6ZSBmb3IgZXh0cmEgbGFyZ2UgZGV2aWNlc1xuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGxhYmVsU2l6ZVhsOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIGRlZmF1bHQgbGFiZWwgY29sdW1uIHNpemVcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBsYWJlbFNpemVYczogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBkZWZhdWx0IGxhYmVsIHNpemUgZm9yIGV4dHJhIGV4dHJhIGxhcmdlIGRldmljZXNcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBsYWJlbFNpemVYeGw6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogTmFtZSBvZiB0aGUgY29udHJvbFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG5hbWU6IHN0cmluZyA9IGNyZWF0ZUd1aWQoKTtcblxuICAgIC8qKlxuICAgICAqIEVtcHR5IGltcGxlbWVudGF0aW9uIG9mIFwicHJvcGFnYXRlQ2hhbmdlXCIuIE11c3QgYmUgZG9uZSB0byBhdm9pZCBlcnJvcnNcbiAgICAgKi9cbiAgICBwdWJsaWMgcHJvcGFnYXRlQ2hhbmdlOiBhbnkgPSAoKSA9PiB7fTtcblxuICAgIC8qKlxuICAgICAqIEVtcHR5IGltcGxlbWVudGF0aW9uIG9mIFwicHJvcGFnYXRlVG91Y2hcIi4gTXVzdCBiZSBkb25lIHRvIGF2b2lkIGVycm9yc1xuICAgICAqL1xuICAgIHB1YmxpYyBwcm9wYWdhdGVUb3VjaDogYW55ID0gKCkgPT4ge307XG5cbiAgICAvKipcbiAgICAgKiBEZXRhY2ggbGFiZWwgdGV4dCBhbmQgdG9vbHRpcCBmcm9tIGVhY2ggb3RoZXIgaW4gTGFiZWwgc28gdGhhdCBsYWJlbCBhbmQgdG9vbHRpcCBjYW4gYmUgYWxpZ25lZCBkaWZmZXJlbnRseS4gVGhpcyBpcyBpbiBCb290c3RyYXAgMyBub3Qgc3VwcG9ydGVkIVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNwbGl0bGFiZWxhbmRoZWxwdGV4dDogYm9vbGVhbiB8IG51bGwgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogU2VydmljZSB0byByZWNlaXZlIHN0YW5kYXJkIHZhbGlkYXRpb24gbWVzc2FnZSBrZXlzIGFuZCB0ZXh0c1xuICAgICAqL1xuICAgIHB1YmxpYyB2YWxpZGF0aW9uS2V5U2VydmljZTogSVNhY1ZhbGlkYXRpb25LZXlTZXJ2aWNlO1xuXG4gICAgLy8gI2VuZHJlZ2lvbiBQcm9wZXJ0aWVzXG5cbiAgICAvLyAjcmVnaW9uIENvbnN0cnVjdG9yc1xuXG4gICAgLyoqXG4gICAgICogQ29uc3RydWN0b3JcbiAgICAgKiBAcGFyYW0gZm9ybWxheW91dCBTYWNGb3JtTGF5b3V0Q29tbW9uIHRvIGRlZmluZSBzY29wZWQgbGF5b3V0IHNldHRpbmdzXG4gICAgICogQHBhcmFtIGluamVjdG9yIEluamVjdG9yIGZvciBpbmplY3Rpbmcgc2VydmljZXNcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgQEhvc3QoKSBmb3JtbGF5b3V0OiBTYWNGb3JtTGF5b3V0Q29tbW9uLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGluamVjdG9yOiBJbmplY3RvclxuICAgICkge1xuICAgICAgICB0aGlzLmZvcm1sYXlvdXQgPSBmb3JtbGF5b3V0O1xuICAgICAgICB0aGlzLnZhbGlkYXRpb25LZXlTZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KFNBQ1ZBTElEQVRJT05LRVlfU0VSVklDRSwgbmV3IFNhY0RlZmF1bHRWYWxpZGF0aW9uS2V5U2VydmljZSgpKTtcbiAgICAgICAgdGhpcy5sbmdSZXNvdXJjZVNlcnZpY2UgPSBpbmplY3Rvci5nZXQoXG4gICAgICAgICAgICBTQUNMT0NBTElTQVRJT05fU0VSVklDRSxcbiAgICAgICAgICAgIG5ldyBTYWNEZWZhdWx0TG9jYWxpc2F0aW9uU2VydmljZSh0aGlzLnZhbGlkYXRpb25LZXlTZXJ2aWNlKVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuY29uZmlndXJhdGlvblNlcnZpY2UgPSBpbmplY3Rvci5nZXQoU0FDQ09ORklHVVJBVElPTl9TRVJWSUNFLCBuZXcgU2FjRGVmYXVsdENvbmZpZ3VyYXRpb25TZXJ2aWNlKCkpO1xuXG4gICAgICAgIHRoaXMuaWNvblNlcnZpY2UgPSBpbmplY3Rvci5nZXQoU0FDSUNPTl9TRVJWSUNFLCBuZXcgU2FjRGVmYXVsdEljb25TZXJ2aWNlKCkpO1xuICAgIH1cblxuICAgIC8vICNlbmRyZWdpb24gQ29uc3RydWN0b3JzXG5cbiAgICAvLyAjcmVnaW9uIFB1YmxpYyBHZXR0ZXJzIEFuZCBTZXR0ZXJzXG5cbiAgICAvKipcbiAgICAgKiBHZXQgSWNvbiBmb3IgSGVscHRleHQgVG9vbHRpcFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgSGVscHRleHRUb29sdGlwSWNvbigpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5pY29uU2VydmljZS5HZW5lcmljSGVscHRleHRJY29uO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1ldGhvZCByZXR1cm5zIGJvb2xlYW4gdmFsdWUgZm9yIGRpcnR5XG4gICAgICovXG4gICAgcHVibGljIGdldCBkaXJ0eSgpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMubmdDb250cm9sICE9PSBudWxsICYmIHRoaXMubmdDb250cm9sICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gdGhpcy5uZ0NvbnRyb2wuZGlydHk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fZGlydHk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2hvdyBlcnJvciBtZXNzYWdlcyBpbmxpbmVcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGlubGluZWVycm9yZW5hYmxlZCgpOiBib29sZWFuIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbmxpbmVlcnJvcmVuYWJsZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgaW5saW5lIGVycm9ycyBmb3IgdGhlIGNvbnRyb2xcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgaW5saW5lZXJyb3JlbmFibGVkKHZhbHVlOiBib29sZWFuIHwgbnVsbCkge1xuICAgICAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5faW5saW5lZXJyb3JlbmFibGVkID0gbnVsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2lubGluZWVycm9yZW5hYmxlZCA9IGNvbnZlcnRUb0Jvb2xlYW4odmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTWV0aG9kIHJldHVybnMgYSBib29sZWFuIHZhbHVlIGluZGljYXRpbmcgd2hldGhlciB0aGUgZm9ybSBpcyBpbnZhbGlkXG4gICAgICovXG4gICAgcHVibGljIGdldCBpbnZhbGlkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5uZ0NvbnRyb2wgIT09IHVuZGVmaW5lZCAmJiB0aGlzLm5nQ29udHJvbCAhPT0gbnVsbCAmJiB0aGlzLm5nQ29udHJvbC5pbnZhbGlkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlZmluZXMgd2hldGhlciB0aGUgY29udHJvbCBpcyBkaXNhYmxlZFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgaXNkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkRm9ybSB8fCB0aGlzLmRpc2FibGVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgd2hldGhlciB0aGUgaW5saW5lIGVycm9yIG1lc3NhZ2VzIGFyZSBhY3RpdmUgZm9yIHRoaXMgY29udHJvbC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGlzaW5saW5lZXJyb3JlbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5faW5saW5lZXJyb3JlbmFibGVkICE9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faW5saW5lZXJyb3JlbmFibGVkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuZm9ybWxheW91dCAhPT0gbnVsbCAmJiB0aGlzLmZvcm1sYXlvdXQuSXNJbmxpbmVFcnJvckVuYWJsZWQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZvcm1sYXlvdXQ/LklzSW5saW5lRXJyb3JFbmFibGVkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuY29uZmlndXJhdGlvblNlcnZpY2UuSW5saW5lRXJyb3JFbmFibGVkICE9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb25maWd1cmF0aW9uU2VydmljZS5JbmxpbmVFcnJvckVuYWJsZWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIHRoZSBsYWJlbCB0ZXh0XG4gICAgICovXG4gICAgcHVibGljIGdldCBsYWJlbCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fbGFiZWw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbGFiZWwgdGV4dFxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBzZXQgbGFiZWwodjogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX2xhYmVsID0gdjtcbiAgICAgICAgdGhpcy5VcGRhdGVMYWJlbFRvQ29udHJvbCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYW4gb2JqZWN0IHdpdGggYWxsIGxhYmVsIHNpemVzLiBUaGVzZSB2YWx1ZXMgY2FuIHRoZW4gYmUgdHJhbnNmZXJyZWQgdG8gY29ycmVzcG9uZGluZyBDU1MgY2xhc3NlcyB1c2luZyBhIHBpcGVcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGxhYmVsU2l6ZXMoKTogSVNhY0xhYmVsU2l6ZXMge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbGFiZWxTaXplU206IHRoaXMubGFiZWxTaXplU20sXG4gICAgICAgICAgICBsYWJlbFNpemVNZDogdGhpcy5sYWJlbFNpemVNZCxcbiAgICAgICAgICAgIGxhYmVsU2l6ZVhzOiB0aGlzLmxhYmVsU2l6ZVhzLFxuICAgICAgICAgICAgbGFiZWxTaXplWGw6IHRoaXMubGFiZWxTaXplWGwsXG4gICAgICAgICAgICBsYWJlbFNpemVYeGw6IHRoaXMubGFiZWxTaXplWHhsLFxuICAgICAgICAgICAgbGFiZWxTaXplTGc6IHRoaXMubGFiZWxTaXplTGcsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTWV0aG9kIHJldHVybnMgYm9vbGVhbiB2YWx1ZSBmb3IgdG91Y2hlZFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgdG91Y2hlZCgpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMubmdDb250cm9sICE9PSBudWxsICYmIHRoaXMubmdDb250cm9sICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX3RvdWNoZWQgPSB0aGlzLm5nQ29udHJvbC50b3VjaGVkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX3RvdWNoZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IG1ldGhvZCBmb3IgTmdNb2RlbCBiaW5kaW5nIGluIEhUTUwgbWFya3VwXG4gICAgICovXG4gICAgcHVibGljIGdldCB2YWx1ZSgpOiBWQUxVRSB7XG4gICAgICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXQgbWV0aG9kIGZvciBOZ01vZGVsIGJpbmRpbmcgaW4gSFRNTCBtYXJrdXBcbiAgICAgKiBJbnB1dCBpcyByZXF1aXJlZCBzbyB0aGF0IHRoZSB2YWx1ZSBjYW4gYWxzbyBiZSBzZXQgdmlhIHRoZSBtYXJrdXAuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IHZhbHVlKHY6IFZBTFVFKSB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl92YWx1ZSA9IHRoaXMuQ29udmVydElucHV0VmFsdWUodik7XG4gICAgICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKHRoaXMuX3ZhbHVlKTtcbiAgICB9XG5cbiAgICAvLyAjZW5kcmVnaW9uIFB1YmxpYyBHZXR0ZXJzIEFuZCBTZXR0ZXJzXG5cbiAgICAvLyAjcmVnaW9uIFB1YmxpYyBNZXRob2RzXG5cbiAgICAvKipcbiAgICAgKiBNZXRob2QgcmV0dXJucyBlcnJvciBiYXNlZCBvbiBnaXZlbiBjcml0ZXJpYVxuICAgICAqL1xuICAgIHB1YmxpYyBHZXRFcnJvck1lc3NhZ2UoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICAgICAgaWYgKHRoaXMubmdDb250cm9sLmVycm9ycyA9PT0gdW5kZWZpbmVkIHx8IHRoaXMubmdDb250cm9sLmVycm9ycyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlPHN0cmluZz4oKG9ic2VydmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dCgnJyk7XG4gICAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZXJyb3JzOiBWYWxpZGF0aW9uRXJyb3JzID0gdGhpcy5uZ0NvbnRyb2wuZXJyb3JzO1xuXG4gICAgICAgIGlmIChlcnJvcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGU8c3RyaW5nPigob2JzZXJ2ZXIpID0+IHtcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KCcnKTtcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBrZXlzOiBzdHJpbmdbXSA9IE9iamVjdC5rZXlzKGVycm9ycyk7XG5cbiAgICAgICAgaWYgKGtleXMubGVuZ3RoIDw9IDApIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZTxzdHJpbmc+KChvYnNlcnZlcikgPT4ge1xuICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoJycpO1xuICAgICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGVycm9ySXRlbTogVmFsaWRhdGlvbkVycm9ySXRlbSA9IGVycm9yc1trZXlzWzBdXTtcblxuICAgICAgICAvLyBWYWxpZGF0aW9uIFBhcmFtZXRlcnNcbiAgICAgICAgY29uc3QgcGFyYW1ldGVycyA9IHt9O1xuICAgICAgICBpZiAoZXJyb3JJdGVtLnBhcmFtZXRlcnMgIT09IG51bGwgJiYgZXJyb3JJdGVtLnBhcmFtZXRlcnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZXJyb3JJdGVtLnBhcmFtZXRlcnMuZm9yRWFjaCgodiwgaykgPT4ge1xuICAgICAgICAgICAgICAgIHBhcmFtZXRlcnNba10gPSB2O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcGFyYW1ldGVyc1snRklFTEQnXSA9IGVycm9ySXRlbS5maWVsZE5hbWU7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMubG5nUmVzb3VyY2VTZXJ2aWNlLkdldFN0cmluZyhlcnJvckl0ZW0uZXJyb3JNZXNzYWdlS2V5LCBwYXJhbWV0ZXJzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbml0IEV2ZW50XG4gICAgICovXG4gICAgcHVibGljIG5nT25Jbml0KCkge1xuICAgICAgICAvLyByZWNlaXZlIGZvcm0gdmlhIGZvcm1jb250cm9sbmFtZSBvciBmb3JtY29udHJvbCBpbnN0YW5jZVxuICAgICAgICBjb25zdCBmb3JtQ29udHJvbCA9IHRoaXMuaW5qZWN0b3IuZ2V0KE5nQ29udHJvbCwgbnVsbCk7XG4gICAgICAgIGlmIChmb3JtQ29udHJvbCBpbnN0YW5jZW9mIEZvcm1Db250cm9sTmFtZSkge1xuICAgICAgICAgICAgY29uc3QgZm9ybSA9IHRoaXMuaW5qZWN0b3IuZ2V0KEZvcm1Hcm91cERpcmVjdGl2ZSwgbnVsbCk7XG4gICAgICAgICAgICB0aGlzLm5nQ29udHJvbCA9IGZvcm0uZ2V0Q29udHJvbChmb3JtQ29udHJvbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoZm9ybUNvbnRyb2wpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5nQ29udHJvbCA9IGZvcm1Db250cm9sLmNvbnRyb2wgYXMgRm9ybUNvbnRyb2w7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLlVwZGF0ZUxhYmVsVG9Db250cm9sKCk7XG5cbiAgICAgICAgLy8gc2V0IGxhYmVsIHNpemVzIGZyb20gZm9ybWxheW91dCBkaXJlY3RpdmVcbiAgICAgICAgdGhpcy5zZXRMYWJlbFNpemVzKCk7XG5cbiAgICAgICAgLy8gc2V0IGNvbXBvbmVudCBoZWlndGggZnJvbSBmcm9tbGF5b3V0IGRpcmVjdGl2ZVxuICAgICAgICB0aGlzLnNldENvbXBvbmVudEhlaWdodCgpO1xuXG4gICAgICAgIC8vIHNldCBtZXRob2QgdG8gZGlzcGxheSBoZWxwdGV4dFxuICAgICAgICB0aGlzLnNldEhlbHBUZXh0TW9kZSgpO1xuXG4gICAgICAgIC8vIHNldCBTcGxpdE1vZGUgZm9yIExhYmVsc1xuICAgICAgICB0aGlzLnNldExhYmVsU3BsaXRNb2RlKCk7XG5cbiAgICAgICAgdGhpcy5PbkNsYXNzSW5pdCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1ldGhvZCBzZXRzIHRvdWNoZWQgPSB0cnVlXG4gICAgICovXG4gICAgcHVibGljIG9uVG91Y2goKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RvdWNoZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnByb3BhZ2F0ZVRvdWNoKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTWV0aG9kIHNvIHRoYXQgb3RoZXIgY29udHJvbHMgY2FuIGJlIG5vdGlmaWVkIG9mIGNoYW5nZXMgaW4gdGhlIGNvbnRyb2xcbiAgICAgKiBGb3IgY2hhbmdlIG5vdGlmaWNhdGlvbiwgY2FsbCB0aGUgcHJvcGFnYXRlQ2hhbmdlIG1ldGhvZC5cbiAgICAgKiBAcGFyYW0gZm4gQ2FsbGJhY2sgZnVuY3Rpb24gZm9yIGNoYW5nZSBub3RpZmljYXRpb25cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlID0gKG9iaikgPT4gZm4ob2JqKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNZXRob2Qgc28gdGhhdCBvdGhlciBjb250cm9scyBjYW4gYmUgbm90aWZpZWQgb2YgY2hhbmdlcyB3aGVuIHRoZSBjb250cm9sIGlzIGFjdGl2YXRlZCAoZm9jdXMpLlxuICAgICAqIEBwYXJhbSBmbiBDYWxsYmFjayBmdW5jdGlvbiBmb3IgdG91Y2ggbm90aWZpY2F0aW9uXG4gICAgICovXG4gICAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wcm9wYWdhdGVUb3VjaCA9IChvYmopID0+IGZuKG9iaik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTWV0aG9kIHJlZ2lzdGVycyBjaGFuZ2VzIGluIHZhbGlkYXRpb25cbiAgICAgKiBAcGFyYW0gZm4gQ2FsbGJhY2sgZnVuY3Rpb24gZm9yIHZhbGlkYXRvciBjaGFuZ2Ugbm90aWZpY2F0aW9uXG4gICAgICovXG4gICAgcHVibGljIHJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fb25DaGFuZ2UgPSBmbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBjb250cm9sIHRvIGRpc2FibGVkXG4gICAgICogQHBhcmFtIGlzRGlzYWJsZWQgVHJ1ZSB0byBkaXNhYmxlIHRoZSBjb250cm9sLCBmYWxzZSB0byBlbmFibGUgaXRcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2Rpc2FibGVkRm9ybSA9IGlzRGlzYWJsZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTWV0aG9kIHRoYXQgc2V0cyB0aGUgdmFsdWUgb2YgdGhlIGlucHV0XG4gICAgICogQHBhcmFtIHYgVGhlIHZhbHVlIHRvIHNldFxuICAgICAqL1xuICAgIHB1YmxpYyBzZXRWYWx1ZSh2OiBWQUxVRSk6IHZvaWQge1xuICAgICAgICB0aGlzLnZhbHVlID0gdjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBWYWxpZGF0b3IgbWV0aG9kXG4gICAgICogQHBhcmFtIGMgRm9ybSBjb250cm9sIHRvIHZhbGlkYXRlXG4gICAgICogQHJldHVybnMgVmFsaWRhdGlvbiBlcnJvcnMgb3IgbnVsbCBpZiB2YWxpZFxuICAgICAqL1xuICAgIHB1YmxpYyB2YWxpZGF0ZShjOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IGVycm9yOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9IHRoaXMudmFsaWRhdGVEYXRhKGMpO1xuICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWJzdHJhY3QgdmFsaWRhdG9yIG1ldGhvZCBmb3IgZm9ybSBjb250cm9sIHZhbHVlLlxuICAgICAqXG4gICAgICogRGVyaXZlZCBjbGFzc2VzIHNob3VsZCBjaGVjayBjb250cm9sIHZhbHVlIGFuZCByZXR1cm4gdmFsaWRhdGlvbiBlcnJvcnMgb3IgbnVsbC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjIEZvcm0gY29udHJvbCBiZWluZyB2YWxpZGF0ZWRcbiAgICAgKiBAcmV0dXJucyBWYWxpZGF0aW9uRXJyb3JzIGlmIGludmFsaWQsIG90aGVyd2lzZSBudWxsXG4gICAgICovXG4gICAgcHVibGljIGFic3RyYWN0IHZhbGlkYXRlRGF0YShjOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbDtcblxuICAgIC8qKlxuICAgICAqIE1ldGhvZCBmb3Igd3JpdGluZyB2YWx1ZXMgZnJvbSB0aGUgbW9kZWwgaW50byB0aGUgY29udHJvbFxuICAgICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gd3JpdGUgdG8gdGhlIGNvbnRyb2xcbiAgICAgKi9cbiAgICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogVkFMVUUpIHtcbiAgICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvLyAjZW5kcmVnaW9uIFB1YmxpYyBNZXRob2RzXG5cbiAgICAvLyAjcmVnaW9uIFByb3RlY3RlZCBNZXRob2RzXG5cbiAgICAvKipcbiAgICAgKiBNZXRob2QgY2FuIGJlIG92ZXJyaWRkZW4gaW4gcGFyZW50IGNsYXNzZXNcbiAgICAgKiBAcGFyYW0gdmFsdWUgVmFsdWUgdGhhdCBzaG91bGQgYmUgY29udmVydGVkIHRvIHRoZSBjb3JyZWN0IHR5cGVcbiAgICAgKiBAcmV0dXJucyBWYWx1ZSBpbiB0aGUgY29ycmVjdCB0eXBlXG4gICAgICovXG4gICAgcHJvdGVjdGVkIENvbnZlcnRJbnB1dFZhbHVlKHZhbHVlOiBWQUxVRSk6IFZBTFVFIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1ldGhvZCByZXR1cm5zIHRoZSBkZWNpbWFsIHN5bWJvbFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBHZXREZWNpbWFsU3ltYm9sKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiAnLic7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTWV0aG9kIGNhbiBiZSB1c2VkIHRvIFNldCBQcm9wZXJ0aWVzIGF0IENsYXNzIEluaXRcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgT25DbGFzc0luaXQoKTogdm9pZCB7fVxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlcyB0aGUgTmdNb2RlbCB2YWx1ZSBhbmQgdGhlIHZhbGlkaXR5IG9mIHRoZSBjb250cm9sJ3MgdmFsaWRhdG9yXG4gICAgICovXG4gICAgcHJvdGVjdGVkIFVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLm5nQ29udHJvbCkge1xuICAgICAgICAgICAgdGhpcy5uZ0NvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IG9ubHlTZWxmOiB0cnVlIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gI2VuZHJlZ2lvbiBQcm90ZWN0ZWQgTWV0aG9kc1xuXG4gICAgLy8gI3JlZ2lvbiBQcml2YXRlIE1ldGhvZHNcblxuICAgIHByaXZhdGUgVXBkYXRlTGFiZWxUb0NvbnRyb2woKTogdm9pZCB7XG4gICAgICAgIC8vIEhBQ0s6IEFkZCBhZGRpdGlvbiBwcm9wZXJ0eSB0byBGb3JtQ29udHJvbC4gQ2FuIGJlIGZpeGVkIGlmIHNvbHV0aW9uIGZvciB0aWNrZXQ6IGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvaXNzdWVzLzE5Njg2XG4gICAgICAgIGlmICh0aGlzLm5nQ29udHJvbCkge1xuICAgICAgICAgICAgKHRoaXMubmdDb250cm9sIGFzIHVua25vd24gYXMgSUFic3RyYWN0Q29udHJvbExhYmVsRXh0ZW5zaW9uKS5jb250cm9sbGFiZWwgPSB0aGlzLmxhYmVsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IGNvbXBvbmVudCBoZWlnaHQgZnJvbSBwcm9wZXJ0eSBvciBwYXJlbnQgbGF5b3V0IGNvbnRyb2xcbiAgICAgKi9cbiAgICBwcml2YXRlIHNldENvbXBvbmVudEhlaWdodCgpIHtcbiAgICAgICAgLy8gc2V0IHNpemUgZXh0cmEgc21hbGxcbiAgICAgICAgaWYgKCF0aGlzLmNvbXBvbmVudEhlaWdodCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZm9ybWxheW91dD8uY29tcG9uZW50SGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb21wb25lbnRIZWlnaHQgPSB0aGlzLmZvcm1sYXlvdXQuY29tcG9uZW50SGVpZ2h0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbXBvbmVudEhlaWdodCA9IHRoaXMuY29uZmlndXJhdGlvblNlcnZpY2UuQ29tcG9uZW50SGVpZ2h0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IG1vZGUgZm9yIGhlbHB0ZXh0LiBDYW4gYmUgdG9vbHRpcCBvciB0ZXh0XG4gICAgICovXG4gICAgcHJpdmF0ZSBzZXRIZWxwVGV4dE1vZGUoKSB7XG4gICAgICAgIGlmICghdGhpcy5oZWxwdGV4dG1vZGUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmZvcm1sYXlvdXQ/LmhlbHB0ZXh0bW9kZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaGVscHRleHRtb2RlID0gdGhpcy5mb3JtbGF5b3V0LmhlbHB0ZXh0bW9kZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oZWxwdGV4dG1vZGUgPSB0aGlzLmNvbmZpZ3VyYXRpb25TZXJ2aWNlLkhlbHB0ZXh0TW9kZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGxhYmVsIGRpc3BsYXkgbW9kZSBmcm9tIHByb3BlcnR5IG9yIHBhcmVudCBsYXlvdXQgY29udHJvbFxuICAgICAqL1xuICAgIHByaXZhdGUgc2V0TGFiZWxNb2RlKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMubGFiZWxNb2RlKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5mb3JtbGF5b3V0Py5sYWJlbE1vZGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxhYmVsTW9kZSA9IHRoaXMuZm9ybWxheW91dC5sYWJlbE1vZGU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMubGFiZWxNb2RlID0gdGhpcy5jb25maWd1cmF0aW9uU2VydmljZS5MYWJlbE1vZGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBmbG9hdGluZyBsYWJlbHMgbmVlZCBhbHdheXMgZnVsbCB3aWR0aFxuICAgICAgICBpZiAodGhpcy5sYWJlbE1vZGUgPT09ICdmbG9hdGluZycpIHtcbiAgICAgICAgICAgIHRoaXMubGFiZWxTaXplWHhsID0gMTI7XG4gICAgICAgICAgICB0aGlzLmxhYmVsU2l6ZVhsID0gMTI7XG4gICAgICAgICAgICB0aGlzLmxhYmVsU2l6ZUxnID0gMTI7XG4gICAgICAgICAgICB0aGlzLmxhYmVsU2l6ZU1kID0gMTI7XG4gICAgICAgICAgICB0aGlzLmxhYmVsU2l6ZVNtID0gMTI7XG4gICAgICAgICAgICB0aGlzLmxhYmVsU2l6ZVhzID0gMTI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXQgbGFiZWwgc2l6ZXMgZnJvbSBwcm9wZXJ0eSBvciBwYXJlbnQgbGF5b3V0IGNvbnRyb2xcbiAgICAgKi9cbiAgICBwcml2YXRlIHNldExhYmVsU2l6ZXMoKSB7XG4gICAgICAgIHRoaXMuc2V0TGFiZWxNb2RlKCk7XG5cbiAgICAgICAgLy8gZmxvYXRpbmcgbGFiZWxzIG5lZWQgYWx3YXlzIGZ1bGwgd2lkdGhcbiAgICAgICAgaWYgKHRoaXMubGFiZWxNb2RlID09PSAnZmxvYXRpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzZXQgc2l6ZSBleHRyYSBzbWFsbFxuICAgICAgICBpZiAoIXRoaXMubGFiZWxTaXplWHMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmZvcm1sYXlvdXQ/LmxhYmVsU2l6ZVhzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sYWJlbFNpemVYcyA9IHRoaXMuZm9ybWxheW91dC5sYWJlbFNpemVYcztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sYWJlbFNpemVYcyA9IHRoaXMuY29uZmlndXJhdGlvblNlcnZpY2UuTGFiZWxTaXplWHM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzZXQgc2l6ZSBzbWFsbFxuICAgICAgICBpZiAoIXRoaXMubGFiZWxTaXplU20pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmZvcm1sYXlvdXQ/LmxhYmVsU2l6ZVNtKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sYWJlbFNpemVTbSA9IHRoaXMuZm9ybWxheW91dC5sYWJlbFNpemVTbTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sYWJlbFNpemVTbSA9IHRoaXMuY29uZmlndXJhdGlvblNlcnZpY2UuTGFiZWxTaXplU207XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzZXQgc2l6ZSBtZWRpdW1cbiAgICAgICAgaWYgKCF0aGlzLmxhYmVsU2l6ZU1kKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5mb3JtbGF5b3V0Py5sYWJlbFNpemVNZCkge1xuICAgICAgICAgICAgICAgIHRoaXMubGFiZWxTaXplTWQgPSB0aGlzLmZvcm1sYXlvdXQubGFiZWxTaXplTWQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMubGFiZWxTaXplTWQgPSB0aGlzLmNvbmZpZ3VyYXRpb25TZXJ2aWNlLkxhYmVsU2l6ZU1kO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gc2V0IHNpemUgbGFyZ2VcbiAgICAgICAgaWYgKCF0aGlzLmxhYmVsU2l6ZUxnKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5mb3JtbGF5b3V0Py5sYWJlbFNpemVMZykge1xuICAgICAgICAgICAgICAgIHRoaXMubGFiZWxTaXplTGcgPSB0aGlzLmZvcm1sYXlvdXQubGFiZWxTaXplTGc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMubGFiZWxTaXplTGcgPSB0aGlzLmNvbmZpZ3VyYXRpb25TZXJ2aWNlLkxhYmVsU2l6ZUxnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gc2V0IHNpemUgZXh0cmEgbGFyZ2VcbiAgICAgICAgaWYgKCF0aGlzLmxhYmVsU2l6ZVhsKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5mb3JtbGF5b3V0Py5sYWJlbFNpemVYbCkge1xuICAgICAgICAgICAgICAgIHRoaXMubGFiZWxTaXplWGwgPSB0aGlzLmZvcm1sYXlvdXQubGFiZWxTaXplWGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMubGFiZWxTaXplWGwgPSB0aGlzLmNvbmZpZ3VyYXRpb25TZXJ2aWNlLkxhYmVsU2l6ZVhsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gc2V0IHNpemUgZXh0cmEgZXh0cmEgbGFyZ2VcbiAgICAgICAgaWYgKCF0aGlzLmxhYmVsU2l6ZVh4bCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZm9ybWxheW91dD8ubGFiZWxTaXplWHhsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sYWJlbFNpemVYeGwgPSB0aGlzLmZvcm1sYXlvdXQubGFiZWxTaXplWHhsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxhYmVsU2l6ZVh4bCA9IHRoaXMuY29uZmlndXJhdGlvblNlcnZpY2UuTGFiZWxTaXplWHhsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbGFiZWwgc3BsaXQgbW9kZSBmcm9tIHByb3BlcnR5IG9yIHBhcmVudCBsYXlvdXQgY29udHJvbFxcblxuICAgICAqKi9cbiAgICBwcml2YXRlIHNldExhYmVsU3BsaXRNb2RlKCkge1xuICAgICAgICBpZiAoIXRoaXMuc3BsaXRsYWJlbGFuZGhlbHB0ZXh0KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5mb3JtbGF5b3V0Py5zcGxpdGxhYmVsYW5kaGVscHRleHQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNwbGl0bGFiZWxhbmRoZWxwdGV4dCA9IHRoaXMuZm9ybWxheW91dC5zcGxpdGxhYmVsYW5kaGVscHRleHQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc3BsaXRsYWJlbGFuZGhlbHB0ZXh0ID0gdGhpcy5jb25maWd1cmF0aW9uU2VydmljZS5TcGxpdExhYmVsQW5kSGVscHRleHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAjZW5kcmVnaW9uIFByaXZhdGUgTWV0aG9kc1xufVxuIl19
@@ -1,26 +1,28 @@
1
- import { Input, Directive } from '@angular/core';
2
1
  import { SacBaseListControl } from './baselistcontrol';
2
+ import { Directive, Input } from '@angular/core';
3
3
  /**
4
- * Abstract Klasse für SacBaseSelectControl. Extendes SacBaseListControl
4
+ * Abstract class for SacBaseSelectControl. Extends SacBaseListControl
5
5
  */
6
6
  export class SacBaseSelectControl extends SacBaseListControl {
7
7
  constructor() {
8
+ // #region Properties
8
9
  super(...arguments);
9
10
  /**
10
- * Definiert das Label für das Group Element
11
+ * Defines the collection of items in the group element
11
12
  */
12
- this.grouplabel = 'label';
13
+ this.groupitems = '';
13
14
  /**
14
- * Definiert die Collection der Items im Group Element
15
+ * Defines the label for the group element
15
16
  */
16
- this.groupitems = '';
17
+ this.grouplabel = 'label';
18
+ // #endregion Properties
17
19
  }
18
20
  }
19
21
  SacBaseSelectControl.decorators = [
20
22
  { type: Directive }
21
23
  ];
22
24
  SacBaseSelectControl.propDecorators = {
23
- grouplabel: [{ type: Input }],
24
- groupitems: [{ type: Input }]
25
+ groupitems: [{ type: Input }],
26
+ grouplabel: [{ type: Input }]
25
27
  };
26
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZXNlbGVjdGNvbnRyb2wuanMiLCJzb3VyY2VSb290IjoiL2hvbWUvcnVubmVyL3dvcmsvc2ltcGxlYW5ndWxhcmNvbnRyb2xzL3NpbXBsZWFuZ3VsYXJjb250cm9scy9jaC5qbmV0d29yay5zYWMtY29udHJvbHMvcHJvamVjdHMvc2FjLWNvbW1vbi9zcmMvIiwic291cmNlcyI6WyJjb21tb24vYmFzZXNlbGVjdGNvbnRyb2wudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFdkQ7O0dBRUc7QUFFSCxNQUFNLE9BQWdCLG9CQUE0QixTQUFRLGtCQUF5QjtJQURuRjs7UUFHRTs7V0FFRztRQUNNLGVBQVUsR0FBVyxPQUFPLENBQUM7UUFFdEM7O1dBRUc7UUFDTSxlQUFVLEdBQVcsRUFBRSxDQUFDO0lBRW5DLENBQUM7OztZQWJBLFNBQVM7Ozt5QkFNUCxLQUFLO3lCQUtMLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbnB1dCwgRGlyZWN0aXZlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTYWNCYXNlTGlzdENvbnRyb2wgfSBmcm9tICcuL2Jhc2VsaXN0Y29udHJvbCc7XG5cbi8qKlxuICogQWJzdHJhY3QgS2xhc3NlIGbDvHIgU2FjQmFzZVNlbGVjdENvbnRyb2wuIEV4dGVuZGVzIFNhY0Jhc2VMaXN0Q29udHJvbFxuICovXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBTYWNCYXNlU2VsZWN0Q29udHJvbDxWQUxVRT4gZXh0ZW5kcyBTYWNCYXNlTGlzdENvbnRyb2w8VkFMVUU+IHtcblxuICAvKipcbiAgICogRGVmaW5pZXJ0IGRhcyBMYWJlbCBmw7xyIGRhcyBHcm91cCBFbGVtZW50XG4gICAqL1xuICBASW5wdXQoKSBncm91cGxhYmVsOiBzdHJpbmcgPSAnbGFiZWwnO1xuXG4gIC8qKlxuICAgKiBEZWZpbmllcnQgZGllIENvbGxlY3Rpb24gZGVyIEl0ZW1zIGltIEdyb3VwIEVsZW1lbnRcbiAgICovXG4gIEBJbnB1dCgpIGdyb3VwaXRlbXM6IHN0cmluZyA9ICcnO1xuXG59XG4iXX0=
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZXNlbGVjdGNvbnRyb2wuanMiLCJzb3VyY2VSb290IjoiL2hvbWUvcnVubmVyL3dvcmsvc2ltcGxlYW5ndWxhcmNvbnRyb2xzL3NpbXBsZWFuZ3VsYXJjb250cm9scy9jaC5qbmV0d29yay5zYWMtY29udHJvbHMvcHJvamVjdHMvc2FjLWNvbW1vbi9zcmMvIiwic291cmNlcyI6WyJjb21tb24vYmFzZXNlbGVjdGNvbnRyb2wudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDdkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFakQ7O0dBRUc7QUFFSCxNQUFNLE9BQWdCLG9CQUE0QixTQUFRLGtCQUF5QjtJQURuRjtRQUVJLHFCQUFxQjs7UUFFckI7O1dBRUc7UUFDYSxlQUFVLEdBQUcsRUFBRSxDQUFDO1FBRWhDOztXQUVHO1FBQ2EsZUFBVSxHQUFHLE9BQU8sQ0FBQztRQUVyQyx3QkFBd0I7SUFDNUIsQ0FBQzs7O1lBZkEsU0FBUzs7O3lCQU9MLEtBQUs7eUJBS0wsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNhY0Jhc2VMaXN0Q29udHJvbCB9IGZyb20gJy4vYmFzZWxpc3Rjb250cm9sJztcbmltcG9ydCB7IERpcmVjdGl2ZSwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqXG4gKiBBYnN0cmFjdCBjbGFzcyBmb3IgU2FjQmFzZVNlbGVjdENvbnRyb2wuIEV4dGVuZHMgU2FjQmFzZUxpc3RDb250cm9sXG4gKi9cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFNhY0Jhc2VTZWxlY3RDb250cm9sPFZBTFVFPiBleHRlbmRzIFNhY0Jhc2VMaXN0Q29udHJvbDxWQUxVRT4ge1xuICAgIC8vICNyZWdpb24gUHJvcGVydGllc1xuXG4gICAgLyoqXG4gICAgICogRGVmaW5lcyB0aGUgY29sbGVjdGlvbiBvZiBpdGVtcyBpbiB0aGUgZ3JvdXAgZWxlbWVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBncm91cGl0ZW1zID0gJyc7XG5cbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIHRoZSBsYWJlbCBmb3IgdGhlIGdyb3VwIGVsZW1lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgZ3JvdXBsYWJlbCA9ICdsYWJlbCc7XG5cbiAgICAvLyAjZW5kcmVnaW9uIFByb3BlcnRpZXNcbn1cbiJdfQ==