@magic-xpa/gui 4.1100.0-dev4110.26 → 4.1100.0-dev4110.261

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 (194) hide show
  1. package/{esm2020 → esm2022}/index.mjs +71 -71
  2. package/{esm2020 → esm2022}/magic-xpa-gui.mjs +1 -1
  3. package/esm2022/src/Commands.mjs +184 -0
  4. package/esm2022/src/Events.mjs +425 -0
  5. package/{esm2020 → esm2022}/src/EventsProcessor.mjs +66 -66
  6. package/{esm2020 → esm2022}/src/FocusManager.mjs +33 -33
  7. package/esm2022/src/GuiConstants.mjs +68 -0
  8. package/{esm2020 → esm2022}/src/GuiEnums.mjs +299 -299
  9. package/esm2022/src/GuiEnvironment.mjs +4 -0
  10. package/{esm2020 → esm2022}/src/IFlowMonitorQueue.mjs +1 -1
  11. package/esm2022/src/Manager.mjs +91 -0
  12. package/esm2022/src/UIBridge.mjs +33 -0
  13. package/{esm2020 → esm2022}/src/env/IEnvironment.mjs +1 -1
  14. package/{esm2020 → esm2022}/src/gui/ControlBase.mjs +2 -2
  15. package/esm2022/src/gui/GuiMgControl.mjs +123 -0
  16. package/{esm2020 → esm2022}/src/gui/GuiMgForm.mjs +3 -3
  17. package/esm2022/src/gui/KeyboardItem.mjs +135 -0
  18. package/esm2022/src/gui/LastFocusedVal.mjs +11 -0
  19. package/esm2022/src/gui/MgValue.mjs +16 -0
  20. package/{esm2020 → esm2022}/src/gui/PropParentInterface.mjs +1 -1
  21. package/{esm2020 → esm2022}/src/gui/low/DialogHandler.mjs +6 -6
  22. package/esm2022/src/gui/low/GuiCommand.mjs +68 -0
  23. package/esm2022/src/gui/low/GuiCommandQueue.mjs +35 -0
  24. package/esm2022/src/gui/low/GuiInteractive.mjs +177 -0
  25. package/esm2022/src/gui/low/Style.mjs +20 -0
  26. package/esm2022/src/management/RuntimeContextBase.mjs +42 -0
  27. package/esm2022/src/management/data/BlobType.mjs +281 -0
  28. package/esm2022/src/management/data/DcValues.mjs +214 -0
  29. package/{esm2020 → esm2022}/src/management/data/DcValuesBuilderBase.mjs +95 -95
  30. package/esm2022/src/management/data/FieldDef.mjs +331 -0
  31. package/{esm2020 → esm2022}/src/management/data/FieldsTable.mjs +54 -54
  32. package/esm2022/src/management/data/GuiDataViewBase.mjs +88 -0
  33. package/esm2022/src/management/data/GuiFieldBase.mjs +82 -0
  34. package/{esm2020 → esm2022}/src/management/data/IRecord.mjs +1 -1
  35. package/{esm2020 → esm2022}/src/management/data/IReferencedObject.mjs +1 -1
  36. package/esm2022/src/management/data/NUM_TYPE.mjs +1739 -0
  37. package/esm2022/src/management/data/ObjectReferenceBase.mjs +48 -0
  38. package/esm2022/src/management/data/ObjectReferencesCollection.mjs +27 -0
  39. package/{esm2020 → esm2022}/src/management/data/RecordUtils.mjs +360 -360
  40. package/esm2022/src/management/data/VectorType.mjs +612 -0
  41. package/esm2022/src/management/data/VectorTypeBase.mjs +88 -0
  42. package/{esm2020 → esm2022}/src/management/events/IActionManager.mjs +1 -1
  43. package/{esm2020 → esm2022}/src/management/events/IGuiEventsManager.mjs +1 -1
  44. package/esm2022/src/management/exp/ExpressionInterface.mjs +244 -0
  45. package/esm2022/src/management/exp/GuiExpressionEvaluator.mjs +305 -0
  46. package/esm2022/src/management/gui/ControlTable.mjs +118 -0
  47. package/esm2022/src/management/gui/DisplayConvertor.mjs +1649 -0
  48. package/esm2022/src/management/gui/FieldValidator.mjs +711 -0
  49. package/esm2022/src/management/gui/GuiControlPropertyAdapter.mjs +24 -0
  50. package/{esm2020 → esm2022}/src/management/gui/GuiFormPropertyAdapter.mjs +10 -10
  51. package/esm2022/src/management/gui/HebrewDate.mjs +278 -0
  52. package/esm2022/src/management/gui/Helps.mjs +237 -0
  53. package/esm2022/src/management/gui/MgControlBase.mjs +1859 -0
  54. package/esm2022/src/management/gui/MgFormBase.mjs +741 -0
  55. package/esm2022/src/management/gui/PIC.mjs +1185 -0
  56. package/{esm2020 → esm2022}/src/management/gui/PropDefaults.mjs +229 -229
  57. package/{esm2020 → esm2022}/src/management/gui/PropInterface.mjs +246 -245
  58. package/esm2022/src/management/gui/PropTable.mjs +221 -0
  59. package/esm2022/src/management/gui/Property.mjs +1362 -0
  60. package/esm2022/src/management/gui/ValidationDetails.mjs +248 -0
  61. package/{esm2020 → esm2022}/src/management/gui/ValidationDetailsBase.mjs +93 -93
  62. package/{esm2020 → esm2022}/src/management/gui/WrongFormatException.mjs +29 -29
  63. package/esm2022/src/management/tasks/GuiDataCollection.mjs +4 -0
  64. package/esm2022/src/management/tasks/GuiTaskBase.mjs +511 -0
  65. package/{esm2020 → esm2022}/src/management/tasks/IMGDataTable.mjs +1 -1
  66. package/{esm2020 → esm2022}/src/management/tasks/ITask.mjs +1 -1
  67. package/esm2022/src/management/tasks/MgTimer.mjs +21 -0
  68. package/esm2022/src/management/tasks/TaskDefinitionId.mjs +54 -0
  69. package/{esm2020 → esm2022}/src/management/tasks/TaskDefinitionIdTableSaxHandler.mjs +41 -41
  70. package/{esm2020 → esm2022}/src/util/MemoryUtil.mjs +34 -34
  71. package/esm2022/src/util/ObjectReference.mjs +36 -0
  72. package/esm2022/src/util/UsernamePasswordCredentials.mjs +52 -0
  73. package/{fesm2020 → fesm2022}/magic-xpa-gui.mjs +16074 -16074
  74. package/fesm2022/magic-xpa-gui.mjs.map +1 -0
  75. package/index.d.ts +70 -70
  76. package/package.json +6 -12
  77. package/src/Commands.d.ts +40 -39
  78. package/src/Events.d.ts +157 -155
  79. package/src/EventsProcessor.d.ts +13 -13
  80. package/src/FocusManager.d.ts +8 -8
  81. package/src/GuiConstants.d.ts +65 -65
  82. package/src/GuiEnums.d.ts +282 -282
  83. package/src/GuiEnvironment.d.ts +4 -4
  84. package/src/IFlowMonitorQueue.d.ts +3 -3
  85. package/src/Manager.d.ts +26 -26
  86. package/src/UIBridge.d.ts +16 -16
  87. package/src/env/IEnvironment.d.ts +31 -31
  88. package/src/gui/ControlBase.d.ts +4 -4
  89. package/src/gui/GuiMgControl.d.ts +38 -38
  90. package/src/gui/GuiMgForm.d.ts +3 -3
  91. package/src/gui/KeyboardItem.d.ts +18 -18
  92. package/src/gui/LastFocusedVal.d.ts +7 -7
  93. package/src/gui/MgValue.d.ts +15 -15
  94. package/src/gui/PropParentInterface.d.ts +13 -13
  95. package/src/gui/low/DialogHandler.d.ts +4 -4
  96. package/src/gui/low/GuiCommand.d.ts +37 -37
  97. package/src/gui/low/GuiCommandQueue.d.ts +13 -13
  98. package/src/gui/low/GuiInteractive.d.ts +55 -53
  99. package/src/gui/low/Style.d.ts +19 -19
  100. package/src/management/RuntimeContextBase.d.ts +23 -23
  101. package/src/management/data/BlobType.d.ts +29 -29
  102. package/src/management/data/DcValues.d.ts +33 -33
  103. package/src/management/data/DcValuesBuilderBase.d.ts +17 -17
  104. package/src/management/data/FieldDef.d.ts +53 -53
  105. package/src/management/data/FieldsTable.d.ts +16 -16
  106. package/src/management/data/GuiDataViewBase.d.ts +27 -27
  107. package/src/management/data/GuiFieldBase.d.ts +17 -17
  108. package/src/management/data/IRecord.d.ts +12 -12
  109. package/src/management/data/IReferencedObject.d.ts +5 -5
  110. package/src/management/data/NUM_TYPE.d.ts +103 -103
  111. package/src/management/data/ObjectReferenceBase.d.ts +16 -16
  112. package/src/management/data/ObjectReferencesCollection.d.ts +10 -10
  113. package/src/management/data/RecordUtils.d.ts +21 -21
  114. package/src/management/data/VectorType.d.ts +52 -52
  115. package/src/management/data/VectorTypeBase.d.ts +8 -8
  116. package/src/management/events/IActionManager.d.ts +7 -7
  117. package/src/management/events/IGuiEventsManager.d.ts +20 -20
  118. package/src/management/exp/ExpressionInterface.d.ts +242 -242
  119. package/src/management/exp/GuiExpressionEvaluator.d.ts +47 -47
  120. package/src/management/gui/ControlTable.d.ts +28 -28
  121. package/src/management/gui/DisplayConvertor.d.ts +103 -103
  122. package/src/management/gui/FieldValidator.d.ts +35 -35
  123. package/src/management/gui/GuiControlPropertyAdapter.d.ts +40 -40
  124. package/src/management/gui/GuiFormPropertyAdapter.d.ts +17 -17
  125. package/src/management/gui/HebrewDate.d.ts +46 -46
  126. package/src/management/gui/Helps.d.ts +51 -51
  127. package/src/management/gui/MgControlBase.d.ts +223 -223
  128. package/src/management/gui/MgFormBase.d.ts +160 -160
  129. package/src/management/gui/PIC.d.ts +108 -108
  130. package/src/management/gui/PropDefaults.d.ts +7 -7
  131. package/src/management/gui/PropInterface.d.ts +244 -243
  132. package/src/management/gui/PropTable.d.ts +33 -33
  133. package/src/management/gui/Property.d.ts +121 -121
  134. package/src/management/gui/ValidationDetails.d.ts +52 -52
  135. package/src/management/gui/ValidationDetailsBase.d.ts +14 -14
  136. package/src/management/gui/WrongFormatException.d.ts +9 -9
  137. package/src/management/tasks/GuiDataCollection.d.ts +4 -4
  138. package/src/management/tasks/GuiTaskBase.d.ts +150 -150
  139. package/src/management/tasks/IMGDataTable.d.ts +10 -10
  140. package/src/management/tasks/ITask.d.ts +6 -6
  141. package/src/management/tasks/MgTimer.d.ts +8 -8
  142. package/src/management/tasks/TaskDefinitionId.d.ts +16 -16
  143. package/src/management/tasks/TaskDefinitionIdTableSaxHandler.d.ts +7 -7
  144. package/src/util/MemoryUtil.d.ts +6 -6
  145. package/src/util/ObjectReference.d.ts +9 -9
  146. package/src/util/UsernamePasswordCredentials.d.ts +18 -18
  147. package/esm2020/src/Commands.mjs +0 -177
  148. package/esm2020/src/Events.mjs +0 -420
  149. package/esm2020/src/GuiConstants.mjs +0 -68
  150. package/esm2020/src/GuiEnvironment.mjs +0 -4
  151. package/esm2020/src/Manager.mjs +0 -91
  152. package/esm2020/src/UIBridge.mjs +0 -32
  153. package/esm2020/src/gui/GuiMgControl.mjs +0 -125
  154. package/esm2020/src/gui/KeyboardItem.mjs +0 -135
  155. package/esm2020/src/gui/LastFocusedVal.mjs +0 -11
  156. package/esm2020/src/gui/MgValue.mjs +0 -16
  157. package/esm2020/src/gui/low/GuiCommand.mjs +0 -66
  158. package/esm2020/src/gui/low/GuiCommandQueue.mjs +0 -35
  159. package/esm2020/src/gui/low/GuiInteractive.mjs +0 -165
  160. package/esm2020/src/gui/low/Style.mjs +0 -20
  161. package/esm2020/src/management/RuntimeContextBase.mjs +0 -43
  162. package/esm2020/src/management/data/BlobType.mjs +0 -281
  163. package/esm2020/src/management/data/DcValues.mjs +0 -214
  164. package/esm2020/src/management/data/FieldDef.mjs +0 -331
  165. package/esm2020/src/management/data/GuiDataViewBase.mjs +0 -90
  166. package/esm2020/src/management/data/GuiFieldBase.mjs +0 -82
  167. package/esm2020/src/management/data/NUM_TYPE.mjs +0 -1741
  168. package/esm2020/src/management/data/ObjectReferenceBase.mjs +0 -48
  169. package/esm2020/src/management/data/ObjectReferencesCollection.mjs +0 -29
  170. package/esm2020/src/management/data/VectorType.mjs +0 -612
  171. package/esm2020/src/management/data/VectorTypeBase.mjs +0 -88
  172. package/esm2020/src/management/exp/ExpressionInterface.mjs +0 -244
  173. package/esm2020/src/management/exp/GuiExpressionEvaluator.mjs +0 -307
  174. package/esm2020/src/management/gui/ControlTable.mjs +0 -118
  175. package/esm2020/src/management/gui/DisplayConvertor.mjs +0 -1679
  176. package/esm2020/src/management/gui/FieldValidator.mjs +0 -711
  177. package/esm2020/src/management/gui/GuiControlPropertyAdapter.mjs +0 -22
  178. package/esm2020/src/management/gui/HebrewDate.mjs +0 -278
  179. package/esm2020/src/management/gui/Helps.mjs +0 -237
  180. package/esm2020/src/management/gui/MgControlBase.mjs +0 -1858
  181. package/esm2020/src/management/gui/MgFormBase.mjs +0 -738
  182. package/esm2020/src/management/gui/PIC.mjs +0 -1185
  183. package/esm2020/src/management/gui/PropTable.mjs +0 -221
  184. package/esm2020/src/management/gui/Property.mjs +0 -1356
  185. package/esm2020/src/management/gui/ValidationDetails.mjs +0 -248
  186. package/esm2020/src/management/tasks/GuiDataCollection.mjs +0 -4
  187. package/esm2020/src/management/tasks/GuiTaskBase.mjs +0 -510
  188. package/esm2020/src/management/tasks/MgTimer.mjs +0 -21
  189. package/esm2020/src/management/tasks/TaskDefinitionId.mjs +0 -54
  190. package/esm2020/src/util/ObjectReference.mjs +0 -36
  191. package/esm2020/src/util/UsernamePasswordCredentials.mjs +0 -52
  192. package/fesm2015/magic-xpa-gui.mjs +0 -16364
  193. package/fesm2015/magic-xpa-gui.mjs.map +0 -1
  194. package/fesm2020/magic-xpa-gui.mjs.map +0 -1
@@ -1,230 +1,230 @@
1
- import { Debug, NString, RefParam } from "@magic-xpa/mscorelib";
2
- import { ListboxSelectionMode, MgControlType, StorageAttribute, TransMode } from "@magic-xpa/utils";
3
- import { PIC } from "./PIC";
4
- import { DisplayConvertor } from "./DisplayConvertor";
5
- import { BlobType } from "../data/BlobType";
6
- import { PropInterface } from "./PropInterface";
7
- import { GuiConstants } from "../../GuiConstants";
8
- export class PropDefaults {
9
- static getNumericMgValue(propParent, Value) {
10
- let pic = new PIC("3", StorageAttribute.NUMERIC, propParent.getCompIdx());
11
- return DisplayConvertor.Instance.disp2mg(Value, pic, propParent.getCompIdx(), BlobType.CONTENT_TYPE_UNKNOWN);
12
- }
13
- static getDefaultValueForTask(propId, handled) {
14
- let val = null;
15
- handled.value = true;
16
- switch (propId) {
17
- case PropInterface.PROP_TYPE_TASK_PROPERTIES_ALLOW_EVENTS:
18
- case PropInterface.PROP_TYPE_ALLOW_LOCATE_IN_QUERY:
19
- case PropInterface.PROP_TYPE_PRINT_DATA:
20
- case PropInterface.PROP_TYPE_ALLOW_RANGE:
21
- case PropInterface.PROP_TYPE_ALLOW_LOCATE:
22
- case PropInterface.PROP_TYPE_ALLOW_SORT:
23
- case PropInterface.PROP_TYPE_PRELOAD_VIEW:
24
- case PropInterface.PROP_TYPE_TASK_PROPERTIES_ALLOW_INDEX:
25
- val = "1";
26
- break;
27
- case PropInterface.PROP_TYPE_CLOSE_TASKS_BY_MDI_MENU:
28
- val = "0";
29
- break;
30
- default:
31
- handled.value = false;
32
- break;
33
- }
34
- return val;
35
- }
36
- static getDefaultValue(propId, parentType, propParent) {
37
- let val = null;
38
- let control = null;
39
- if (parentType === GuiConstants.PARENT_TYPE_TASK) {
40
- let handled = new RefParam(false);
41
- val = this.getDefaultValueForTask(propId, handled);
42
- if (handled.value)
43
- return val;
44
- }
45
- switch (propId) {
46
- case PropInterface.PROP_TYPE_COLOR:
47
- val = this.getNumericMgValue(propParent, "1");
48
- if (parentType === GuiConstants.PARENT_TYPE_CONTROL) {
49
- control = propParent;
50
- if (control.Type === MgControlType.CTRL_TYPE_BUTTON && control.IsImageButton())
51
- val = this.getNumericMgValue(propParent, "0");
52
- }
53
- break;
54
- case PropInterface.PROP_TYPE_BORDER:
55
- val = "0";
56
- if (parentType === GuiConstants.PARENT_TYPE_CONTROL) {
57
- control = propParent;
58
- switch (control.Type) {
59
- case MgControlType.CTRL_TYPE_SUBFORM:
60
- val = "0";
61
- break;
62
- case MgControlType.CTRL_TYPE_TEXT:
63
- case MgControlType.CTRL_TYPE_TABLE:
64
- case MgControlType.CTRL_TYPE_LIST:
65
- case MgControlType.CTRL_TYPE_BROWSER:
66
- val = "1";
67
- break;
68
- }
69
- }
70
- break;
71
- case PropInterface.PROP_TYPE_MAXBOX:
72
- case PropInterface.PROP_TYPE_MINBOX:
73
- case PropInterface.PROP_TYPE_MUST_INPUT:
74
- case PropInterface.PROP_TYPE_MULTILINE:
75
- case PropInterface.PROP_TYPE_PASSWORD:
76
- case PropInterface.PROP_TYPE_HEBREW:
77
- case PropInterface.PROP_TYPE_MULTILINE_VERTICAL_SCROLL:
78
- case PropInterface.PROP_TYPE_MULTILINE_ALLOW_CR:
79
- case PropInterface.PROP_TYPE_IS_CACHED:
80
- case PropInterface.PROP_TYPE_MODIFY_IN_QUERY:
81
- case PropInterface.PROP_TYPE_SHOW_FULL_ROW:
82
- case PropInterface.PROP_TYPE_TRACK_SELECTION:
83
- case PropInterface.PROP_TYPE_COLUMN_DIVIDER:
84
- case PropInterface.PROP_TYPE_LINE_DIVIDER:
85
- case PropInterface.PROP_TYPE_THREE_STATES:
86
- case PropInterface.PROP_TYPE_REFRESH_WHEN_HIDDEN:
87
- case PropInterface.PROP_TYPE_RETAIN_FOCUS:
88
- case PropInterface.PROP_TYPE_ROW_PLACEMENT:
89
- case PropInterface.PROP_TYPE_SHOW_IN_WINDOW_MENU:
90
- case PropInterface.PROP_TYPE_DATAVIEWCONTROL:
91
- case PropInterface.PROP_TYPE_SORT_COLUMN:
92
- case PropInterface.PROP_TYPE_BEFORE_900_VERSION:
93
- case PropInterface.PROP_TYPE_FILL_WIDTH:
94
- case PropInterface.PROP_TYPE_MULTI_COLUMN_DISPLAY:
95
- case PropInterface.PROP_TYPE_AUTO_COMPLETE_MODE_WC:
96
- val = "0";
97
- break;
98
- case PropInterface.PROP_TYPE_SYSTEM_MENU:
99
- case PropInterface.PROP_TYPE_TITLE_BAR:
100
- case PropInterface.PROP_TYPE_ENABLED:
101
- case PropInterface.PROP_TYPE_VISIBLE:
102
- case PropInterface.PROP_TYPE_TAB_IN:
103
- case PropInterface.PROP_TYPE_MODIFIABLE:
104
- case PropInterface.PROP_TYPE_HIGHLIGHTING:
105
- case PropInterface.PROP_TYPE_AUTO_REFRESH:
106
- case PropInterface.PROP_TYPE_PARK_ON_CLICK:
107
- case PropInterface.PROP_TYPE_DISPLAY_MENU:
108
- case PropInterface.PROP_TYPE_DISPLAY_TOOLBAR:
109
- case PropInterface.PROP_TYPE_SHOW_BUTTONS:
110
- case PropInterface.PROP_TYPE_LINES_AT_ROOT:
111
- case PropInterface.PROP_TYPE_SCROLL_BAR:
112
- case PropInterface.PROP_TYPE_SHOW_LINES:
113
- case PropInterface.PROP_TYPE_ALLOW_QUERY:
114
- case PropInterface.PROP_TYPE_RIGHT_BORDER:
115
- case PropInterface.PROP_TYPE_TOP_BORDER:
116
- case PropInterface.PROP_TYPE_TOP_BORDER_MARGIN:
117
- case PropInterface.PROP_TYPE_SHOW_ELLIPISIS:
118
- val = "1";
119
- break;
120
- case PropInterface.PROP_TYPE_TRIGGER:
121
- case PropInterface.PROP_TYPE_PROMPT:
122
- case PropInterface.PROP_TYPE_DISPLAY_LIST:
123
- case PropInterface.PROP_TYPE_DATA:
124
- case PropInterface.PROP_TYPE_IMAGE_FILENAME:
125
- case PropInterface.PROP_TYPE_LABEL:
126
- case PropInterface.PROP_TYPE_PLACEMENT:
127
- case PropInterface.PROP_TYPE_PULLDOWN_MENU:
128
- case PropInterface.PROP_TYPE_CONTEXT_MENU:
129
- case PropInterface.PROP_TYPE_NODE_ID:
130
- case PropInterface.PROP_TYPE_NODE_PARENTID:
131
- case PropInterface.PROP_TYPE_SELECT_PROGRAM:
132
- case PropInterface.PROP_TYPE_VISIBLE_LAYERS_LIST:
133
- case PropInterface.PROP_TYPE_EXPANDED_IMAGEIDX:
134
- case PropInterface.PROP_TYPE_COLLAPSED_IMAGEIDX:
135
- case PropInterface.PROP_TYPE_OBJECT_TYPE:
136
- case PropInterface.PROP_TYPE_TAB_ORDER:
137
- case PropInterface.PROP_TYPE_LOAD_IMAGE_FROM:
138
- case PropInterface.PROP_TYPE_FORM_NAME:
139
- case PropInterface.PROP_TYPE_COLUMN_TITLE:
140
- case PropInterface.PROP_TYPE_WIDTH:
141
- case PropInterface.PROP_TYPE_PRGTSK_NUM:
142
- break;
143
- case PropInterface.PROP_TYPE_MULTILINE_WORDWRAP_SCROLL:
144
- case PropInterface.PROP_TYPE_BORDER_STYLE:
145
- val = this.getNumericMgValue(propParent, "2");
146
- break;
147
- case PropInterface.PROP_TYPE_WINDOW_TYPE:
148
- val = this.getNumericMgValue(propParent, "6");
149
- break;
150
- case PropInterface.PROP_TYPE_ROW_HIGHLIGHT_STYLE:
151
- val = this.getNumericMgValue(propParent, "4");
152
- break;
153
- case PropInterface.PROP_TYPE_GRADIENT_STYLE:
154
- case PropInterface.PROP_TYPE_TABBING_ORDER:
155
- case PropInterface.PROP_TYPE_STARTUP_MODE:
156
- case PropInterface.PROP_TYPE_CHOICE_COLUMNS:
157
- case PropInterface.PROP_TYPE_HORIZONTAL_ALIGNMENT:
158
- case PropInterface.PROP_TYPE_FONT:
159
- case PropInterface.PROP_TYPE_WALLPAPER_STYLE:
160
- case PropInterface.PROP_TYPE_CHECKBOX_MAIN_STYLE:
161
- case PropInterface.PROP_TYPE_TAB_CONTROL_SIDE:
162
- case PropInterface.PROP_TYPE_RAISE_AT:
163
- case PropInterface.PROP_TYPE_ALLOWED_DIRECTION:
164
- case PropInterface.PROP_TYPE_SUBFORM_TYPE:
165
- case PropInterface.PROP_TYPE_UOM:
166
- case PropInterface.PROP_TYPE_BOTTOM_POSITION_INTERVAL:
167
- val = this.getNumericMgValue(propParent, "1");
168
- break;
169
- case PropInterface.PROP_TYPE_TASK_PROPERTIES_TRANSACTION_MODE:
170
- val = TransMode.Physical;
171
- break;
172
- case PropInterface.PROP_TYPE_PARKED_COLLAPSED_IMAGEIDX:
173
- case PropInterface.PROP_TYPE_PARKED_IMAGEIDX:
174
- case PropInterface.PROP_TYPE_MINIMUM_HEIGHT:
175
- case PropInterface.PROP_TYPE_TOP:
176
- case PropInterface.PROP_TYPE_LEFT:
177
- case PropInterface.PROP_TYPE_TITLE_HEIGHT:
178
- case PropInterface.PROP_TYPE_LAYER:
179
- case PropInterface.PROP_TYPE_VISIBLE_LINES:
180
- case PropInterface.PROP_TYPE_FRAMESET_STYLE:
181
- case PropInterface.PROP_TYPE_TRANSLATOR:
182
- case PropInterface.PROP_TYPE_HOR_FAC:
183
- case PropInterface.PROP_TYPE_VER_FAC:
184
- case PropInterface.PROP_TYPE_FOCUS_COLOR:
185
- val = this.getNumericMgValue(propParent, "0");
186
- break;
187
- case PropInterface.PROP_TYPE_STYLE_3D:
188
- if (parentType === GuiConstants.PARENT_TYPE_CONTROL) {
189
- control = propParent;
190
- switch (control.Type) {
191
- case MgControlType.CTRL_TYPE_COMBO:
192
- val = this.getNumericMgValue(propParent, "2");
193
- break;
194
- case MgControlType.CTRL_TYPE_RADIO:
195
- case MgControlType.CTRL_TYPE_CHECKBOX:
196
- val = this.getNumericMgValue(propParent, "3");
197
- break;
198
- }
199
- }
200
- break;
201
- case PropInterface.PROP_TYPE_IMAGE_LIST_INDEXES:
202
- case PropInterface.PROP_TYPE_WALLPAPER:
203
- case PropInterface.PROP_TYPE_TEXT:
204
- case PropInterface.PROP_TYPE_TOOLTIP:
205
- case PropInterface.PROP_TYPE_FORMAT:
206
- val = NString.Empty;
207
- break;
208
- case PropInterface.PROP_TYPE_IMAGE_STYLE:
209
- val = this.getNumericMgValue(propParent, "2");
210
- break;
211
- case PropInterface.PROP_TYPE_SELECTION_MODE:
212
- val = this.getNumericMgValue(propParent, String(ListboxSelectionMode.Single));
213
- break;
214
- case PropInterface.PROP_TYPE_INDEX:
215
- case PropInterface.PROP_TYPE_LINK_FIELD:
216
- case PropInterface.PROP_TYPE_DISPLAY_FIELD:
217
- case PropInterface.PROP_TYPE_PERSISTENT_FORM_STATE_VERSION:
218
- val = this.getNumericMgValue(propParent, "0");
219
- break;
220
- default:
221
- Debug.Assert(false, "Undefined default value");
222
- break;
223
- }
224
- return val;
225
- }
226
- static GetPropertyName(propTypeId) {
227
- return "{Field ID " + propTypeId + "}";
228
- }
229
- }
1
+ import { Debug, NString, RefParam } from "@magic-xpa/mscorelib";
2
+ import { ListboxSelectionMode, MgControlType, StorageAttribute, TransMode } from "@magic-xpa/utils";
3
+ import { PIC } from "./PIC";
4
+ import { DisplayConvertor } from "./DisplayConvertor";
5
+ import { BlobType } from "../data/BlobType";
6
+ import { PropInterface } from "./PropInterface";
7
+ import { GuiConstants } from "../../GuiConstants";
8
+ export class PropDefaults {
9
+ static getNumericMgValue(propParent, Value) {
10
+ let pic = new PIC("3", StorageAttribute.NUMERIC, propParent.getCompIdx());
11
+ return DisplayConvertor.Instance.disp2mg(Value, pic, propParent.getCompIdx(), BlobType.CONTENT_TYPE_UNKNOWN);
12
+ }
13
+ static getDefaultValueForTask(propId, handled) {
14
+ let val = null;
15
+ handled.value = true;
16
+ switch (propId) {
17
+ case PropInterface.PROP_TYPE_TASK_PROPERTIES_ALLOW_EVENTS:
18
+ case PropInterface.PROP_TYPE_ALLOW_LOCATE_IN_QUERY:
19
+ case PropInterface.PROP_TYPE_PRINT_DATA:
20
+ case PropInterface.PROP_TYPE_ALLOW_RANGE:
21
+ case PropInterface.PROP_TYPE_ALLOW_LOCATE:
22
+ case PropInterface.PROP_TYPE_ALLOW_SORT:
23
+ case PropInterface.PROP_TYPE_PRELOAD_VIEW:
24
+ case PropInterface.PROP_TYPE_TASK_PROPERTIES_ALLOW_INDEX:
25
+ val = "1";
26
+ break;
27
+ case PropInterface.PROP_TYPE_CLOSE_TASKS_BY_MDI_MENU:
28
+ val = "0";
29
+ break;
30
+ default:
31
+ handled.value = false;
32
+ break;
33
+ }
34
+ return val;
35
+ }
36
+ static getDefaultValue(propId, parentType, propParent) {
37
+ let val = null;
38
+ let control = null;
39
+ if (parentType === GuiConstants.PARENT_TYPE_TASK) {
40
+ let handled = new RefParam(false);
41
+ val = this.getDefaultValueForTask(propId, handled);
42
+ if (handled.value)
43
+ return val;
44
+ }
45
+ switch (propId) {
46
+ case PropInterface.PROP_TYPE_COLOR:
47
+ val = this.getNumericMgValue(propParent, "1");
48
+ if (parentType === GuiConstants.PARENT_TYPE_CONTROL) {
49
+ control = propParent;
50
+ if (control.Type === MgControlType.CTRL_TYPE_BUTTON && control.IsImageButton())
51
+ val = this.getNumericMgValue(propParent, "0");
52
+ }
53
+ break;
54
+ case PropInterface.PROP_TYPE_BORDER:
55
+ val = "0";
56
+ if (parentType === GuiConstants.PARENT_TYPE_CONTROL) {
57
+ control = propParent;
58
+ switch (control.Type) {
59
+ case MgControlType.CTRL_TYPE_SUBFORM:
60
+ val = "0";
61
+ break;
62
+ case MgControlType.CTRL_TYPE_TEXT:
63
+ case MgControlType.CTRL_TYPE_TABLE:
64
+ case MgControlType.CTRL_TYPE_LIST:
65
+ case MgControlType.CTRL_TYPE_BROWSER:
66
+ val = "1";
67
+ break;
68
+ }
69
+ }
70
+ break;
71
+ case PropInterface.PROP_TYPE_MAXBOX:
72
+ case PropInterface.PROP_TYPE_MINBOX:
73
+ case PropInterface.PROP_TYPE_MUST_INPUT:
74
+ case PropInterface.PROP_TYPE_MULTILINE:
75
+ case PropInterface.PROP_TYPE_PASSWORD:
76
+ case PropInterface.PROP_TYPE_HEBREW:
77
+ case PropInterface.PROP_TYPE_MULTILINE_VERTICAL_SCROLL:
78
+ case PropInterface.PROP_TYPE_MULTILINE_ALLOW_CR:
79
+ case PropInterface.PROP_TYPE_IS_CACHED:
80
+ case PropInterface.PROP_TYPE_MODIFY_IN_QUERY:
81
+ case PropInterface.PROP_TYPE_SHOW_FULL_ROW:
82
+ case PropInterface.PROP_TYPE_TRACK_SELECTION:
83
+ case PropInterface.PROP_TYPE_COLUMN_DIVIDER:
84
+ case PropInterface.PROP_TYPE_LINE_DIVIDER:
85
+ case PropInterface.PROP_TYPE_THREE_STATES:
86
+ case PropInterface.PROP_TYPE_REFRESH_WHEN_HIDDEN:
87
+ case PropInterface.PROP_TYPE_RETAIN_FOCUS:
88
+ case PropInterface.PROP_TYPE_ROW_PLACEMENT:
89
+ case PropInterface.PROP_TYPE_SHOW_IN_WINDOW_MENU:
90
+ case PropInterface.PROP_TYPE_DATAVIEWCONTROL:
91
+ case PropInterface.PROP_TYPE_SORT_COLUMN:
92
+ case PropInterface.PROP_TYPE_BEFORE_900_VERSION:
93
+ case PropInterface.PROP_TYPE_FILL_WIDTH:
94
+ case PropInterface.PROP_TYPE_MULTI_COLUMN_DISPLAY:
95
+ case PropInterface.PROP_TYPE_AUTO_COMPLETE_MODE_WC:
96
+ val = "0";
97
+ break;
98
+ case PropInterface.PROP_TYPE_SYSTEM_MENU:
99
+ case PropInterface.PROP_TYPE_TITLE_BAR:
100
+ case PropInterface.PROP_TYPE_ENABLED:
101
+ case PropInterface.PROP_TYPE_VISIBLE:
102
+ case PropInterface.PROP_TYPE_TAB_IN:
103
+ case PropInterface.PROP_TYPE_MODIFIABLE:
104
+ case PropInterface.PROP_TYPE_HIGHLIGHTING:
105
+ case PropInterface.PROP_TYPE_AUTO_REFRESH:
106
+ case PropInterface.PROP_TYPE_PARK_ON_CLICK:
107
+ case PropInterface.PROP_TYPE_DISPLAY_MENU:
108
+ case PropInterface.PROP_TYPE_DISPLAY_TOOLBAR:
109
+ case PropInterface.PROP_TYPE_SHOW_BUTTONS:
110
+ case PropInterface.PROP_TYPE_LINES_AT_ROOT:
111
+ case PropInterface.PROP_TYPE_SCROLL_BAR:
112
+ case PropInterface.PROP_TYPE_SHOW_LINES:
113
+ case PropInterface.PROP_TYPE_ALLOW_QUERY:
114
+ case PropInterface.PROP_TYPE_RIGHT_BORDER:
115
+ case PropInterface.PROP_TYPE_TOP_BORDER:
116
+ case PropInterface.PROP_TYPE_TOP_BORDER_MARGIN:
117
+ case PropInterface.PROP_TYPE_SHOW_ELLIPISIS:
118
+ val = "1";
119
+ break;
120
+ case PropInterface.PROP_TYPE_TRIGGER:
121
+ case PropInterface.PROP_TYPE_PROMPT:
122
+ case PropInterface.PROP_TYPE_DISPLAY_LIST:
123
+ case PropInterface.PROP_TYPE_DATA:
124
+ case PropInterface.PROP_TYPE_IMAGE_FILENAME:
125
+ case PropInterface.PROP_TYPE_LABEL:
126
+ case PropInterface.PROP_TYPE_PLACEMENT:
127
+ case PropInterface.PROP_TYPE_PULLDOWN_MENU:
128
+ case PropInterface.PROP_TYPE_CONTEXT_MENU:
129
+ case PropInterface.PROP_TYPE_NODE_ID:
130
+ case PropInterface.PROP_TYPE_NODE_PARENTID:
131
+ case PropInterface.PROP_TYPE_SELECT_PROGRAM:
132
+ case PropInterface.PROP_TYPE_VISIBLE_LAYERS_LIST:
133
+ case PropInterface.PROP_TYPE_EXPANDED_IMAGEIDX:
134
+ case PropInterface.PROP_TYPE_COLLAPSED_IMAGEIDX:
135
+ case PropInterface.PROP_TYPE_OBJECT_TYPE:
136
+ case PropInterface.PROP_TYPE_TAB_ORDER:
137
+ case PropInterface.PROP_TYPE_LOAD_IMAGE_FROM:
138
+ case PropInterface.PROP_TYPE_FORM_NAME:
139
+ case PropInterface.PROP_TYPE_COLUMN_TITLE:
140
+ case PropInterface.PROP_TYPE_WIDTH:
141
+ case PropInterface.PROP_TYPE_PRGTSK_NUM:
142
+ break;
143
+ case PropInterface.PROP_TYPE_MULTILINE_WORDWRAP_SCROLL:
144
+ case PropInterface.PROP_TYPE_BORDER_STYLE:
145
+ val = this.getNumericMgValue(propParent, "2");
146
+ break;
147
+ case PropInterface.PROP_TYPE_WINDOW_TYPE:
148
+ val = this.getNumericMgValue(propParent, "6");
149
+ break;
150
+ case PropInterface.PROP_TYPE_ROW_HIGHLIGHT_STYLE:
151
+ val = this.getNumericMgValue(propParent, "4");
152
+ break;
153
+ case PropInterface.PROP_TYPE_GRADIENT_STYLE:
154
+ case PropInterface.PROP_TYPE_TABBING_ORDER:
155
+ case PropInterface.PROP_TYPE_STARTUP_MODE:
156
+ case PropInterface.PROP_TYPE_CHOICE_COLUMNS:
157
+ case PropInterface.PROP_TYPE_HORIZONTAL_ALIGNMENT:
158
+ case PropInterface.PROP_TYPE_FONT:
159
+ case PropInterface.PROP_TYPE_WALLPAPER_STYLE:
160
+ case PropInterface.PROP_TYPE_CHECKBOX_MAIN_STYLE:
161
+ case PropInterface.PROP_TYPE_TAB_CONTROL_SIDE:
162
+ case PropInterface.PROP_TYPE_RAISE_AT:
163
+ case PropInterface.PROP_TYPE_ALLOWED_DIRECTION:
164
+ case PropInterface.PROP_TYPE_SUBFORM_TYPE:
165
+ case PropInterface.PROP_TYPE_UOM:
166
+ case PropInterface.PROP_TYPE_BOTTOM_POSITION_INTERVAL:
167
+ val = this.getNumericMgValue(propParent, "1");
168
+ break;
169
+ case PropInterface.PROP_TYPE_TASK_PROPERTIES_TRANSACTION_MODE:
170
+ val = TransMode.Physical;
171
+ break;
172
+ case PropInterface.PROP_TYPE_PARKED_COLLAPSED_IMAGEIDX:
173
+ case PropInterface.PROP_TYPE_PARKED_IMAGEIDX:
174
+ case PropInterface.PROP_TYPE_MINIMUM_HEIGHT:
175
+ case PropInterface.PROP_TYPE_TOP:
176
+ case PropInterface.PROP_TYPE_LEFT:
177
+ case PropInterface.PROP_TYPE_TITLE_HEIGHT:
178
+ case PropInterface.PROP_TYPE_LAYER:
179
+ case PropInterface.PROP_TYPE_VISIBLE_LINES:
180
+ case PropInterface.PROP_TYPE_FRAMESET_STYLE:
181
+ case PropInterface.PROP_TYPE_TRANSLATOR:
182
+ case PropInterface.PROP_TYPE_HOR_FAC:
183
+ case PropInterface.PROP_TYPE_VER_FAC:
184
+ case PropInterface.PROP_TYPE_FOCUS_COLOR:
185
+ val = this.getNumericMgValue(propParent, "0");
186
+ break;
187
+ case PropInterface.PROP_TYPE_STYLE_3D:
188
+ if (parentType === GuiConstants.PARENT_TYPE_CONTROL) {
189
+ control = propParent;
190
+ switch (control.Type) {
191
+ case MgControlType.CTRL_TYPE_COMBO:
192
+ val = this.getNumericMgValue(propParent, "2");
193
+ break;
194
+ case MgControlType.CTRL_TYPE_RADIO:
195
+ case MgControlType.CTRL_TYPE_CHECKBOX:
196
+ val = this.getNumericMgValue(propParent, "3");
197
+ break;
198
+ }
199
+ }
200
+ break;
201
+ case PropInterface.PROP_TYPE_IMAGE_LIST_INDEXES:
202
+ case PropInterface.PROP_TYPE_WALLPAPER:
203
+ case PropInterface.PROP_TYPE_TEXT:
204
+ case PropInterface.PROP_TYPE_TOOLTIP:
205
+ case PropInterface.PROP_TYPE_FORMAT:
206
+ val = NString.Empty;
207
+ break;
208
+ case PropInterface.PROP_TYPE_IMAGE_STYLE:
209
+ val = this.getNumericMgValue(propParent, "2");
210
+ break;
211
+ case PropInterface.PROP_TYPE_SELECTION_MODE:
212
+ val = this.getNumericMgValue(propParent, String(ListboxSelectionMode.Single));
213
+ break;
214
+ case PropInterface.PROP_TYPE_INDEX:
215
+ case PropInterface.PROP_TYPE_LINK_FIELD:
216
+ case PropInterface.PROP_TYPE_DISPLAY_FIELD:
217
+ case PropInterface.PROP_TYPE_PERSISTENT_FORM_STATE_VERSION:
218
+ val = this.getNumericMgValue(propParent, "0");
219
+ break;
220
+ default:
221
+ Debug.Assert(false, "Undefined default value");
222
+ break;
223
+ }
224
+ return val;
225
+ }
226
+ static GetPropertyName(propTypeId) {
227
+ return "{Field ID " + propTypeId + "}";
228
+ }
229
+ }
230
230
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUHJvcERlZmF1bHRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ3VpL3NyYy9tYW5hZ2VtZW50L2d1aS9Qcm9wRGVmYXVsdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDOUQsT0FBTyxFQUFDLG9CQUFvQixFQUFFLGFBQWEsRUFBRSxnQkFBZ0IsRUFBRSxTQUFTLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUVsRyxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBQ3BELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDOUMsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBTWhELE1BQU0sT0FBTyxZQUFZO0lBT2YsTUFBTSxDQUFDLGlCQUFpQixDQUFDLFVBQStCLEVBQUUsS0FBYTtRQUM3RSxJQUFJLEdBQUcsR0FBUSxJQUFJLEdBQUcsQ0FBQyxHQUFHLEVBQUUsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQy9FLE9BQU8sZ0JBQWdCLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLFVBQVUsQ0FBQyxVQUFVLEVBQUUsRUFBRSxRQUFRLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUMvRyxDQUFDO0lBT08sTUFBTSxDQUFDLHNCQUFzQixDQUFDLE1BQWMsRUFBRSxPQUEwQjtRQUM5RSxJQUFJLEdBQUcsR0FBVyxJQUFJLENBQUM7UUFDdkIsT0FBTyxDQUFDLEtBQUssR0FB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QUNSO2dCQUNFLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLHlCQUF5QixDQUFDLENBQUM7Z0JBQy9DLE1BQU07U0FDVDtRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVELE1BQU0sQ0FBQyxlQUFlLENBQUMsVUFBa0I7UUFDdkMsT0FBTyxZQUFZLEdBQUcsVUFBVSxHQUFHLEdBQUcsQ0FBQztJQUN6QyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0RlYnVnLCBOU3RyaW5nLCBSZWZQYXJhbX0gZnJvbSBcIkBtYWdpYy14cGEvbXNjb3JlbGliXCI7XHJcbmltcG9ydCB7TGlzdGJveFNlbGVjdGlvbk1vZGUsIE1nQ29udHJvbFR5cGUsIFN0b3JhZ2VBdHRyaWJ1dGUsIFRyYW5zTW9kZX0gZnJvbSBcIkBtYWdpYy14cGEvdXRpbHNcIjtcclxuaW1wb3J0IHtQcm9wUGFyZW50SW50ZXJmYWNlfSBmcm9tIFwiLi4vLi4vZ3VpL1Byb3BQYXJlbnRJbnRlcmZhY2VcIjtcclxuaW1wb3J0IHtQSUN9IGZyb20gXCIuL1BJQ1wiO1xyXG5pbXBvcnQge0Rpc3BsYXlDb252ZXJ0b3J9IGZyb20gXCIuL0Rpc3BsYXlDb252ZXJ0b3JcIjtcclxuaW1wb3J0IHtCbG9iVHlwZX0gZnJvbSBcIi4uL2RhdGEvQmxvYlR5cGVcIjtcclxuaW1wb3J0IHtQcm9wSW50ZXJmYWNlfSBmcm9tIFwiLi9Qcm9wSW50ZXJmYWNlXCI7XHJcbmltcG9ydCB7R3VpQ29uc3RhbnRzfSBmcm9tIFwiLi4vLi4vR3VpQ29uc3RhbnRzXCI7XHJcbmltcG9ydCB7R3VpQ29udHJvbFByb3BlcnR5QWRhcHRlcn0gZnJvbSBcIi4vR3VpQ29udHJvbFByb3BlcnR5QWRhcHRlclwiO1xyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gICBQcm9wRGVmYXVsdHMgbWFuYWdlcyB0aGUgZGVmYXVsdCB2YWx1ZXMgb2YgcHJvcGVydGllcyBhY2NvcmRpbmcgdG8gdGhlIG1vZGVsIHRoZXkgYmVsb25nIHRvXHJcbi8vLyA8L3N1bW1hcnk+XHJcbmV4cG9ydCBjbGFzcyBQcm9wRGVmYXVsdHMge1xyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIGEgbnVtZXJpYyB2YWx1ZSBpbiBpdHMgbWFnaWMgaW50ZXJuYWwgZm9ybWF0XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInByb3BQYXJlbnRcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiVmFsdWVcIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0TnVtZXJpY01nVmFsdWUocHJvcFBhcmVudDogUHJvcFBhcmVudEludGVyZmFjZSwgVmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBsZXQgcGljOiBQSUMgPSBuZXcgUElDKFwiM1wiLCBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMsIHByb3BQYXJlbnQuZ2V0Q29tcElkeCgpKTtcclxuICAgIHJldHVybiBEaXNwbGF5Q29udmVydG9yLkluc3RhbmNlLmRpc3AybWcoVmFsdWUsIHBpYywgcHJvcFBhcmVudC5nZXRDb21wSWR4KCksIEJsb2JUeXBlLkNPTlRFTlRfVFlQRV9VTktOT1dOKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy9cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInByb3BJZFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBwcml2YXRlIHN0YXRpYyBnZXREZWZhdWx0VmFsdWVGb3JUYXNrKHByb3BJZDogbnVtYmVyLCBoYW5kbGVkOiBSZWZQYXJhbTxib29sZWFuPik6IHN0cmluZyB7XHJcbiAgICBsZXQgdmFsOiBzdHJpbmcgPSBudWxsO1xyXG4gICAgaGFuZGxlZC52YWx1ZSA9IHRydWU7XHJcblxyXG4gICAgc3dpdGNoIChwcm9wSWQpIHtcclxuICAgICAgLy8gZm9yIHRhc2sgcHJvcGVydGllc1xyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1RBU0tfUFJPUEVSVElFU19BTExPV19FVkVOVFM6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfQUxMT1dfTE9DQVRFX0lOX1FVRVJZOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1BSSU5UX0RBVEE6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfQUxMT1dfUkFOR0U6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfQUxMT1dfTE9DQVRFOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0FMTE9XX1NPUlQ6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfUFJFTE9BRF9WSUVXOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1RBU0tfUFJPUEVSVElFU19BTExPV19JTkRFWDpcclxuICAgICAgICB2YWwgPSBcIjFcIjsgLy8geWVzIGJvb2xlYW5cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIC8vIGZvciB0YXNrIHByb3BlcnRpZXNcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9DTE9TRV9UQVNLU19CWV9NRElfTUVOVTpcclxuICAgICAgICB2YWwgPSBcIjBcIjsgLy8geWVzIGJvb2xlYW5cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgaGFuZGxlZC52YWx1ZSA9IGZhbHNlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB2YWw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZ2V0RGVmYXVsdFZhbHVlIHJldHVybnMgdGhlIGRlZmF1bHQgdmFsdWUgb2YgYSBwcm9wZXJ0eVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJwcm9wSWRcIj5UaGUgcHJvcGVydHkgaWQ8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicGFyZW50VHlwZVwiPlBBUkVOVF9UWVBFX0NPTlRST0wsIFBBUkVOVF9UWVBFX0ZPUk0sIFBBUkVOVF9UWVBFX1RBU0s8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicHJvcFBhcmVudFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBUaGUgcHJvcGVydHkgZGVmYXVsdCB2YWx1ZSBTdHJpbmcgcmVwcmVzZW50YXRpb248L3JldHVybnM+XHJcbiAgc3RhdGljIGdldERlZmF1bHRWYWx1ZShwcm9wSWQ6IG51bWJlciwgcGFyZW50VHlwZTogc3RyaW5nLCBwcm9wUGFyZW50OiBQcm9wUGFyZW50SW50ZXJmYWNlKTogc3RyaW5nIHtcclxuICAgIGxldCB2YWw6IHN0cmluZyA9IG51bGw7XHJcbiAgICBsZXQgY29udHJvbDogR3VpQ29udHJvbFByb3BlcnR5QWRhcHRlciA9IG51bGw7XHJcblxyXG4gICAgaWYgKHBhcmVudFR5cGUgPT09IEd1aUNvbnN0YW50cy5QQVJFTlRfVFlQRV9UQVNLKSB7XHJcbiAgICAgIGxldCBoYW5kbGVkOiBSZWZQYXJhbTxib29sZWFuPiA9IG5ldyBSZWZQYXJhbTxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gICAgICB2YWwgPSB0aGlzLmdldERlZmF1bHRWYWx1ZUZvclRhc2socHJvcElkLCBoYW5kbGVkKTtcclxuXHJcbiAgICAgIGlmIChoYW5kbGVkLnZhbHVlKVxyXG4gICAgICAgIHJldHVybiB2YWw7XHJcbiAgICB9XHJcblxyXG4gICAgc3dpdGNoIChwcm9wSWQpIHtcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9DT0xPUjpcclxuICAgICAgICB2YWwgPSB0aGlzLmdldE51bWVyaWNNZ1ZhbHVlKHByb3BQYXJlbnQsIFwiMVwiKTtcclxuICAgICAgICBpZiAocGFyZW50VHlwZSA9PT0gR3VpQ29uc3RhbnRzLlBBUkVOVF9UWVBFX0NPTlRST0wpIHtcclxuICAgICAgICAgIGNvbnRyb2wgPSA8R3VpQ29udHJvbFByb3BlcnR5QWRhcHRlcj48YW55PnByb3BQYXJlbnQ7XHJcbiAgICAgICAgICBpZiAoY29udHJvbC5UeXBlID09PSBNZ0NvbnRyb2xUeXBlLkNUUkxfVFlQRV9CVVRUT04gJiYgY29udHJvbC5Jc0ltYWdlQnV0dG9uKCkpXHJcbiAgICAgICAgICAgIHZhbCA9IHRoaXMuZ2V0TnVtZXJpY01nVmFsdWUocHJvcFBhcmVudCwgXCIwXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfQk9SREVSOlxyXG4gICAgICAgIHZhbCA9IFwiMFwiOyAvLyBubyBib29sZWFuXHJcbiAgICAgICAgaWYgKHBhcmVudFR5cGUgPT09IEd1aUNvbnN0YW50cy5QQVJFTlRfVFlQRV9DT05UUk9MKSB7XHJcbiAgICAgICAgICBjb250cm9sID0gPEd1aUNvbnRyb2xQcm9wZXJ0eUFkYXB0ZXI+PGFueT5wcm9wUGFyZW50O1xyXG4gICAgICAgICAgc3dpdGNoIChjb250cm9sLlR5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSBNZ0NvbnRyb2xUeXBlLkNUUkxfVFlQRV9TVUJGT1JNOlxyXG4gICAgICAgICAgICAgIC8vIGZpeGVkIGJ1ZyAjNzc3NjMzLCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBzdWJmb3JtIGNvbnRyb2wgaXMgTm8gYW5kIG5vdCBZZXNcclxuICAgICAgICAgICAgICB2YWwgPSBcIjBcIjsgLy8gbm8gYm9vbGVhblxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSBNZ0NvbnRyb2xUeXBlLkNUUkxfVFlQRV9URVhUOlxyXG4gICAgICAgICAgICBjYXNlIE1nQ29udHJvbFR5cGUuQ1RSTF9UWVBFX1RBQkxFOlxyXG4gICAgICAgICAgICBjYXNlIE1nQ29udHJvbFR5cGUuQ1RSTF9UWVBFX0xJU1Q6XHJcbiAgICAgICAgICAgIGNhc2UgTWdDb250cm9sVHlwZS5DVFJMX1RZUEVfQlJPV1NFUjpcclxuICAgICAgICAgICAgICB2YWwgPSBcIjFcIjsgLy8geWVzIGJvb2xlYW5cclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX01BWEJPWDpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9NSU5CT1g6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfTVVTVF9JTlBVVDpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9NVUxUSUxJTkU6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfUEFTU1dPUkQ6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfSEVCUkVXOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX01VTFRJTElORV9WRVJUSUNBTF9TQ1JPTEw6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfTVVMVElMSU5FX0FMTE9XX0NSOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0lTX0NBQ0hFRDpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9NT0RJRllfSU5fUVVFUlk6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfU0hPV19GVUxMX1JPVzpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9UUkFDS19TRUxFQ1RJT046XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfQ09MVU1OX0RJVklERVI6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfTElORV9ESVZJREVSOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1RIUkVFX1NUQVRFUzpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9SRUZSRVNIX1dIRU5fSElEREVOOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1JFVEFJTl9GT0NVUzpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9ST1dfUExBQ0VNRU5UOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1NIT1dfSU5fV0lORE9XX01FTlU6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfREFUQVZJRVdDT05UUk9MOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1NPUlRfQ09MVU1OOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0JFRk9SRV85MDBfVkVSU0lPTjpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9GSUxMX1dJRFRIOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX01VTFRJX0NPTFVNTl9ESVNQTEFZOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0FVVE9fQ09NUExFVEVfTU9ERV9XQzpcclxuICAgICAgICB2YWwgPSBcIjBcIjsgLy8gbm8gYm9vbGVhblxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9TWVNURU1fTUVOVTpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9USVRMRV9CQVI6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfRU5BQkxFRDpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9WSVNJQkxFOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1RBQl9JTjpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9NT0RJRklBQkxFOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0hJR0hMSUdIVElORzpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9BVVRPX1JFRlJFU0g6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfUEFSS19PTl9DTElDSzpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9ESVNQTEFZX01FTlU6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfRElTUExBWV9UT09MQkFSOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1NIT1dfQlVUVE9OUzpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9MSU5FU19BVF9ST09UOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1NDUk9MTF9CQVI6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfU0hPV19MSU5FUzpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9BTExPV19RVUVSWTpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9SSUdIVF9CT1JERVI6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfVE9QX0JPUkRFUjpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9UT1BfQk9SREVSX01BUkdJTjpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9TSE9XX0VMTElQSVNJUzpcclxuICAgICAgICB2YWwgPSBcIjFcIjsgLy8geWVzIGJvb2xlYW5cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIC8vIGFsbCB0aG9zZSBwcm9wZXJ0aWVzIG5lZWQgbm90IGNyZWF0ZSBhIGRlZmF1bHRcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9UUklHR0VSOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1BST01QVDpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9ESVNQTEFZX0xJU1Q6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfREFUQTpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9JTUFHRV9GSUxFTkFNRTpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9MQUJFTDpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9QTEFDRU1FTlQ6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfUFVMTERPV05fTUVOVTpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9DT05URVhUX01FTlU6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfTk9ERV9JRDpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9OT0RFX1BBUkVOVElEOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1NFTEVDVF9QUk9HUkFNOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1ZJU0lCTEVfTEFZRVJTX0xJU1Q6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfRVhQQU5ERURfSU1BR0VJRFg6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfQ09MTEFQU0VEX0lNQUdFSURYOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX09CSkVDVF9UWVBFOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1RBQl9PUkRFUjpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9MT0FEX0lNQUdFX0ZST006XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfRk9STV9OQU1FOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0NPTFVNTl9USVRMRTpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9XSURUSDpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9QUkdUU0tfTlVNOlxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9NVUxUSUxJTkVfV09SRFdSQVBfU0NST0xMOlxyXG4gICAgICAvLyAyLSBIT1JJWk9OVEFMX1NDUk9MTF9OT1xyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0JPUkRFUl9TVFlMRTogLy8gQk9SREVSX1RZUEVfVEhJQ0tcclxuICAgICAgICB2YWwgPSB0aGlzLmdldE51bWVyaWNNZ1ZhbHVlKHByb3BQYXJlbnQsIFwiMlwiKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9XSU5ET1dfVFlQRTpcclxuICAgICAgICB2YWwgPSB0aGlzLmdldE51bWVyaWNNZ1ZhbHVlKHByb3BQYXJlbnQsIFwiNlwiKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9ST1dfSElHSExJR0hUX1NUWUxFOlxyXG4gICAgICAgIHZhbCA9IHRoaXMuZ2V0TnVtZXJpY01nVmFsdWUocHJvcFBhcmVudCwgXCI0XCIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9HUkFESUVOVF9TVFlMRTpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9UQUJCSU5HX09SREVSOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1NUQVJUVVBfTU9ERTpcclxuICAgICAgLy8gMS5ERUZBVUxUXHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfQ0hPSUNFX0NPTFVNTlM6XHJcbiAgICAgIC8vIDFcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9IT1JJWk9OVEFMX0FMSUdOTUVOVDpcclxuICAgICAgLy8gMSBBTElHTk1FTlRfVFlQRV9IT1JJX0xFRlRcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9GT05UOlxyXG4gICAgICAvLyAxXHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfV0FMTFBBUEVSX1NUWUxFOlxyXG4gICAgICAvLyBDVFJMX0lNQUdFX1NUWUxFX1RJTEVEXHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfQ0hFQ0tCT1hfTUFJTl9TVFlMRTpcclxuICAgICAgLy8gQ0hFQ0tCT1hfTUFJTl9TVFlMRV9CT1hcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9UQUJfQ09OVFJPTF9TSURFOlxyXG4gICAgICAvLyBTSURFX1RZUEVfVE9QOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1JBSVNFX0FUOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0FMTE9XRURfRElSRUNUSU9OOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1NVQkZPUk1fVFlQRTpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9VT006XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfQk9UVE9NX1BPU0lUSU9OX0lOVEVSVkFMOlxyXG4gICAgICAgIHZhbCA9IHRoaXMuZ2V0TnVtZXJpY01nVmFsdWUocHJvcFBhcmVudCwgXCIxXCIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9UQVNLX1BST1BFUlRJRVNfVFJBTlNBQ1RJT05fTU9ERTpcclxuICAgICAgICB2YWwgPSBUcmFuc01vZGUuUGh5c2ljYWw7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1BBUktFRF9DT0xMQVBTRURfSU1BR0VJRFg6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfUEFSS0VEX0lNQUdFSURYOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX01JTklNVU1fSEVJR0hUOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1RPUDpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9MRUZUOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1RJVExFX0hFSUdIVDpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9MQVlFUjpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9WSVNJQkxFX0xJTkVTOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0ZSQU1FU0VUX1NUWUxFOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1RSQU5TTEFUT1I6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfSE9SX0ZBQzpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9WRVJfRkFDOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0ZPQ1VTX0NPTE9SOlxyXG4gICAgICAgIHZhbCA9IHRoaXMuZ2V0TnVtZXJpY01nVmFsdWUocHJvcFBhcmVudCwgXCIwXCIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9TVFlMRV8zRDpcclxuICAgICAgICBpZiAocGFyZW50VHlwZSA9PT0gR3VpQ29uc3RhbnRzLlBBUkVOVF9UWVBFX0NPTlRST0wpIHtcclxuICAgICAgICAgIGNvbnRyb2wgPSA8R3VpQ29udHJvbFByb3BlcnR5QWRhcHRlcj48YW55PnByb3BQYXJlbnQ7XHJcbiAgICAgICAgICBzd2l0Y2ggKGNvbnRyb2wuVHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlIE1nQ29udHJvbFR5cGUuQ1RSTF9UWVBFX0NPTUJPOlxyXG4gICAgICAgICAgICAgIHZhbCA9IHRoaXMuZ2V0TnVtZXJpY01nVmFsdWUocHJvcFBhcmVudCwgXCIyXCIpOyAvLyBDVFJMX0RJTV8zRFxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIE1nQ29udHJvbFR5cGUuQ1RSTF9UWVBFX1JBRElPOlxyXG4gICAgICAgICAgICBjYXNlIE1nQ29udHJvbFR5cGUuQ1RSTF9UWVBFX0NIRUNLQk9YOlxyXG4gICAgICAgICAgICAgIHZhbCA9IHRoaXMuZ2V0TnVtZXJpY01nVmFsdWUocHJvcFBhcmVudCwgXCIzXCIpOyAvLyBDVFJMX0RJTV8zRF9TVU5LRU5cclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfSU1BR0VfTElTVF9JTkRFWEVTOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1dBTExQQVBFUjpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9URVhUOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1RPT0xUSVA6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfRk9STUFUOlxyXG4gICAgICAgIHZhbCA9IE5TdHJpbmcuRW1wdHk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0lNQUdFX1NUWUxFOlxyXG4gICAgICAgIHZhbCA9IHRoaXMuZ2V0TnVtZXJpY01nVmFsdWUocHJvcFBhcmVudCwgXCIyXCIpOyAvLyBDVFJMX0lNQUdFX1NUWUxFX0NPUElFRFxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9TRUxFQ1RJT05fTU9ERTpcclxuICAgICAgICB2YWwgPSB0aGlzLmdldE51bWVyaWNNZ1ZhbHVlKHByb3BQYXJlbnQsIFN0cmluZyhMaXN0Ym94U2VsZWN0aW9uTW9kZS5TaW5nbGUpKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfSU5ERVg6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfTElOS19GSUVMRDpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9ESVNQTEFZX0ZJRUxEOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1BFUlNJU1RFTlRfRk9STV9TVEFURV9WRVJTSU9OOlxyXG4gICAgICAgIHZhbCA9IHRoaXMuZ2V0TnVtZXJpY01nVmFsdWUocHJvcFBhcmVudCwgXCIwXCIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIERlYnVnLkFzc2VydChmYWxzZSwgXCJVbmRlZmluZWQgZGVmYXVsdCB2YWx1ZVwiKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHJldHVybiB2YWw7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgR2V0UHJvcGVydHlOYW1lKHByb3BUeXBlSWQ6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gXCJ7RmllbGQgSUQgXCIgKyBwcm9wVHlwZUlkICsgXCJ9XCI7XHJcbiAgfVxyXG59XHJcbiJdfQ==