@firestitch/common 8.0.12 → 12.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (226) hide show
  1. package/app/directives/autofocus.directive.d.ts +3 -0
  2. package/app/directives/prevent-default.directive.d.ts +3 -0
  3. package/app/directives/stop-propagation.directive.d.ts +3 -0
  4. package/app/fs-common.module.d.ts +14 -0
  5. package/app/pipes/bytes.pipe.d.ts +3 -0
  6. package/app/pipes/currency.pipe.d.ts +3 -0
  7. package/app/pipes/number.pipe.d.ts +3 -0
  8. package/app/pipes/ordinal-number.pipe.d.ts +3 -0
  9. package/app/pipes/truncate.pipe.d.ts +3 -0
  10. package/app/pipes/util.pipe.d.ts +9 -0
  11. package/app/services/array.service.d.ts +3 -0
  12. package/app/services/math.service.d.ts +3 -0
  13. package/app/services/util.service.d.ts +3 -0
  14. package/app/services/vaildate.service.d.ts +3 -0
  15. package/bundles/firestitch-common.umd.js +838 -2453
  16. package/bundles/firestitch-common.umd.js.map +1 -1
  17. package/esm2015/app/directives/autofocus.directive.js +12 -33
  18. package/esm2015/app/directives/prevent-default.directive.js +13 -18
  19. package/esm2015/app/directives/stop-propagation.directive.js +13 -18
  20. package/esm2015/app/fs-common.module.js +65 -44
  21. package/esm2015/app/pipes/bytes.pipe.js +10 -15
  22. package/esm2015/app/pipes/currency.pipe.js +13 -28
  23. package/esm2015/app/pipes/number.pipe.js +10 -16
  24. package/esm2015/app/pipes/ordinal-number.pipe.js +10 -15
  25. package/esm2015/app/pipes/truncate.pipe.js +10 -20
  26. package/esm2015/app/pipes/util.pipe.js +34 -45
  27. package/esm2015/app/services/array.service.js +63 -190
  28. package/esm2015/app/services/math.service.js +9 -17
  29. package/esm2015/app/services/util.service.js +65 -244
  30. package/esm2015/app/services/vaildate.service.js +12 -32
  31. package/esm2015/firestitch-common.js +2 -16
  32. package/esm2015/libs/array/compare/compare.js +1 -12
  33. package/esm2015/libs/array/compare/index.js +2 -7
  34. package/esm2015/libs/array/filter/filter.js +7 -33
  35. package/esm2015/libs/array/filter/index.js +2 -7
  36. package/esm2015/libs/array/find/find.js +1 -12
  37. package/esm2015/libs/array/find/index.js +2 -7
  38. package/esm2015/libs/array/inArray/inArray.js +1 -11
  39. package/esm2015/libs/array/inArray/index.js +2 -7
  40. package/esm2015/libs/array/index/index.js +5 -21
  41. package/esm2015/libs/array/index.js +14 -19
  42. package/esm2015/libs/array/indexOf/index.js +2 -7
  43. package/esm2015/libs/array/indexOf/indexOf.js +3 -18
  44. package/esm2015/libs/array/keyExists/index.js +2 -7
  45. package/esm2015/libs/array/keyExists/keyExists.js +1 -11
  46. package/esm2015/libs/array/ksort/index.js +2 -7
  47. package/esm2015/libs/array/ksort/ksort.js +3 -17
  48. package/esm2015/libs/array/list/index.js +2 -7
  49. package/esm2015/libs/array/list/list.js +3 -20
  50. package/esm2015/libs/array/nameValue/index.js +2 -7
  51. package/esm2015/libs/array/nameValue/nameValue.js +9 -40
  52. package/esm2015/libs/array/remove/index.js +2 -7
  53. package/esm2015/libs/array/remove/remove.js +1 -12
  54. package/esm2015/libs/array/rsort/index.js +2 -7
  55. package/esm2015/libs/array/rsort/rsort.js +1 -11
  56. package/esm2015/libs/array/sort/index.js +2 -7
  57. package/esm2015/libs/array/sort/sort.js +3 -20
  58. package/esm2015/libs/format/acronym/acronym.js +1 -13
  59. package/esm2015/libs/format/acronym/index.js +2 -7
  60. package/esm2015/libs/format/bytes/bytes.js +1 -12
  61. package/esm2015/libs/format/bytes/index.js +2 -7
  62. package/esm2015/libs/format/currency/currency.js +1 -14
  63. package/esm2015/libs/format/currency/index.js +2 -7
  64. package/esm2015/libs/format/index.js +6 -11
  65. package/esm2015/libs/format/number/index.js +2 -7
  66. package/esm2015/libs/format/number/number.js +1 -11
  67. package/esm2015/libs/format/truncate/index.js +2 -7
  68. package/esm2015/libs/format/truncate/truncate.js +1 -14
  69. package/esm2015/libs/index.js +5 -10
  70. package/esm2015/libs/rxjs/delayedRetry.js +5 -43
  71. package/esm2015/libs/rxjs/keyboard-shortcut.js +18 -0
  72. package/esm2015/libs/util/boolean/boolean.js +1 -10
  73. package/esm2015/libs/util/boolean/index.js +2 -7
  74. package/esm2015/libs/util/debounce/debounce.js +6 -29
  75. package/esm2015/libs/util/debounce/index.js +2 -7
  76. package/esm2015/libs/util/get-normalized-path/get-normalized-path.js +1 -11
  77. package/esm2015/libs/util/get-normalized-path/index.js +1 -6
  78. package/esm2015/libs/util/guid/guid.js +3 -20
  79. package/esm2015/libs/util/guid/index.js +2 -7
  80. package/esm2015/libs/util/index.js +15 -20
  81. package/esm2015/libs/util/isClass/index.js +2 -7
  82. package/esm2015/libs/util/isClass/isClass.js +1 -11
  83. package/esm2015/libs/util/isEmpty/index.js +2 -7
  84. package/esm2015/libs/util/isEmpty/isEmpty.js +1 -11
  85. package/esm2015/libs/util/isNumeric/index.js +2 -7
  86. package/esm2015/libs/util/isNumeric/isNumeric.js +1 -11
  87. package/esm2015/libs/util/keys/index.js +2 -7
  88. package/esm2015/libs/util/keys/keys.js +1 -43
  89. package/esm2015/libs/util/length/index.js +2 -7
  90. package/esm2015/libs/util/length/length.js +1 -10
  91. package/esm2015/libs/util/ordinal-number/ordinal-number.js +1 -13
  92. package/esm2015/libs/util/queue/index.js +2 -7
  93. package/esm2015/libs/util/queue/operation.js +1 -18
  94. package/esm2015/libs/util/queue/queue.enum.js +6 -12
  95. package/esm2015/libs/util/queue/queue.js +14 -168
  96. package/esm2015/libs/util/remove-query-params/index.js +1 -6
  97. package/esm2015/libs/util/remove-query-params/remove-query-params.js +1 -10
  98. package/esm2015/libs/util/resolve/index.js +2 -7
  99. package/esm2015/libs/util/resolve/resolve.js +6 -29
  100. package/esm2015/libs/util/stringify/index.js +2 -7
  101. package/esm2015/libs/util/stringify/stringify.js +1 -10
  102. package/esm2015/libs/util/throttle/index.js +2 -7
  103. package/esm2015/libs/util/throttle/throttle.js +6 -23
  104. package/esm2015/libs/util/uuid/index.js +2 -7
  105. package/esm2015/libs/util/uuid/uuid.js +1 -9
  106. package/esm2015/libs/util/value/index.js +2 -7
  107. package/esm2015/libs/util/value/value.js +1 -12
  108. package/esm2015/libs/validate/email/email.js +1 -10
  109. package/esm2015/libs/validate/email/index.js +2 -7
  110. package/esm2015/libs/validate/index.js +4 -9
  111. package/esm2015/libs/validate/phone/index.js +2 -7
  112. package/esm2015/libs/validate/phone/phone.js +1 -11
  113. package/esm2015/libs/validate/url/index.js +2 -7
  114. package/esm2015/libs/validate/url/url.js +1 -12
  115. package/esm2015/public_api.js +12 -7
  116. package/fesm2015/firestitch-common.js +435 -1809
  117. package/fesm2015/firestitch-common.js.map +1 -1
  118. package/firestitch-common.d.ts +1 -9
  119. package/libs/array/index/index.d.ts +1 -1
  120. package/libs/rxjs/keyboard-shortcut.d.ts +2 -0
  121. package/libs/util/queue/queue.d.ts +9 -9
  122. package/package.json +7 -11
  123. package/public_api.d.ts +10 -0
  124. package/bundles/firestitch-common.umd.min.js +0 -16
  125. package/bundles/firestitch-common.umd.min.js.map +0 -1
  126. package/esm5/app/directives/autofocus.directive.js +0 -45
  127. package/esm5/app/directives/prevent-default.directive.js +0 -32
  128. package/esm5/app/directives/stop-propagation.directive.js +0 -32
  129. package/esm5/app/fs-common.module.js +0 -79
  130. package/esm5/app/pipes/bytes.pipe.js +0 -30
  131. package/esm5/app/pipes/currency.pipe.js +0 -43
  132. package/esm5/app/pipes/number.pipe.js +0 -32
  133. package/esm5/app/pipes/ordinal-number.pipe.js +0 -30
  134. package/esm5/app/pipes/truncate.pipe.js +0 -38
  135. package/esm5/app/pipes/util.pipe.js +0 -100
  136. package/esm5/app/services/array.service.js +0 -491
  137. package/esm5/app/services/math.service.js +0 -42
  138. package/esm5/app/services/util.service.js +0 -608
  139. package/esm5/app/services/vaildate.service.js +0 -63
  140. package/esm5/firestitch-common.js +0 -19
  141. package/esm5/libs/array/compare/compare.js +0 -19
  142. package/esm5/libs/array/compare/index.js +0 -7
  143. package/esm5/libs/array/filter/filter.js +0 -53
  144. package/esm5/libs/array/filter/index.js +0 -7
  145. package/esm5/libs/array/find/find.js +0 -17
  146. package/esm5/libs/array/find/index.js +0 -7
  147. package/esm5/libs/array/inArray/inArray.js +0 -22
  148. package/esm5/libs/array/inArray/index.js +0 -7
  149. package/esm5/libs/array/index/index.js +0 -24
  150. package/esm5/libs/array/index.js +0 -19
  151. package/esm5/libs/array/indexOf/index.js +0 -7
  152. package/esm5/libs/array/indexOf/indexOf.js +0 -31
  153. package/esm5/libs/array/keyExists/index.js +0 -7
  154. package/esm5/libs/array/keyExists/keyExists.js +0 -14
  155. package/esm5/libs/array/ksort/index.js +0 -7
  156. package/esm5/libs/array/ksort/ksort.js +0 -22
  157. package/esm5/libs/array/list/index.js +0 -7
  158. package/esm5/libs/array/list/list.js +0 -31
  159. package/esm5/libs/array/nameValue/index.js +0 -7
  160. package/esm5/libs/array/nameValue/nameValue.js +0 -52
  161. package/esm5/libs/array/remove/index.js +0 -7
  162. package/esm5/libs/array/remove/remove.js +0 -20
  163. package/esm5/libs/array/rsort/index.js +0 -7
  164. package/esm5/libs/array/rsort/rsort.js +0 -15
  165. package/esm5/libs/array/sort/index.js +0 -7
  166. package/esm5/libs/array/sort/sort.js +0 -45
  167. package/esm5/libs/format/acronym/acronym.js +0 -35
  168. package/esm5/libs/format/acronym/index.js +0 -7
  169. package/esm5/libs/format/bytes/bytes.js +0 -23
  170. package/esm5/libs/format/bytes/index.js +0 -7
  171. package/esm5/libs/format/currency/currency.js +0 -23
  172. package/esm5/libs/format/currency/index.js +0 -7
  173. package/esm5/libs/format/index.js +0 -11
  174. package/esm5/libs/format/number/index.js +0 -7
  175. package/esm5/libs/format/number/number.js +0 -14
  176. package/esm5/libs/format/truncate/index.js +0 -7
  177. package/esm5/libs/format/truncate/truncate.js +0 -28
  178. package/esm5/libs/index.js +0 -11
  179. package/esm5/libs/rxjs/delayedRetry.js +0 -65
  180. package/esm5/libs/util/boolean/boolean.js +0 -14
  181. package/esm5/libs/util/boolean/index.js +0 -7
  182. package/esm5/libs/util/debounce/debounce.js +0 -40
  183. package/esm5/libs/util/debounce/index.js +0 -7
  184. package/esm5/libs/util/get-normalized-path/get-normalized-path.js +0 -16
  185. package/esm5/libs/util/get-normalized-path/index.js +0 -7
  186. package/esm5/libs/util/guid/guid.js +0 -37
  187. package/esm5/libs/util/guid/index.js +0 -7
  188. package/esm5/libs/util/index.js +0 -23
  189. package/esm5/libs/util/isClass/index.js +0 -7
  190. package/esm5/libs/util/isClass/isClass.js +0 -28
  191. package/esm5/libs/util/isEmpty/index.js +0 -7
  192. package/esm5/libs/util/isEmpty/isEmpty.js +0 -23
  193. package/esm5/libs/util/isNumeric/index.js +0 -7
  194. package/esm5/libs/util/isNumeric/isNumeric.js +0 -16
  195. package/esm5/libs/util/keys/index.js +0 -7
  196. package/esm5/libs/util/keys/keys.js +0 -80
  197. package/esm5/libs/util/length/index.js +0 -7
  198. package/esm5/libs/util/length/length.js +0 -20
  199. package/esm5/libs/util/ordinal-number/ordinal-number.js +0 -22
  200. package/esm5/libs/util/queue/index.js +0 -8
  201. package/esm5/libs/util/queue/operation.js +0 -30
  202. package/esm5/libs/util/queue/queue.enum.js +0 -12
  203. package/esm5/libs/util/queue/queue.js +0 -367
  204. package/esm5/libs/util/remove-query-params/index.js +0 -7
  205. package/esm5/libs/util/remove-query-params/remove-query-params.js +0 -13
  206. package/esm5/libs/util/resolve/index.js +0 -7
  207. package/esm5/libs/util/resolve/resolve.js +0 -34
  208. package/esm5/libs/util/stringify/index.js +0 -7
  209. package/esm5/libs/util/stringify/stringify.js +0 -13
  210. package/esm5/libs/util/throttle/index.js +0 -7
  211. package/esm5/libs/util/throttle/throttle.js +0 -30
  212. package/esm5/libs/util/uuid/index.js +0 -7
  213. package/esm5/libs/util/uuid/uuid.js +0 -13
  214. package/esm5/libs/util/value/index.js +0 -7
  215. package/esm5/libs/util/value/value.js +0 -20
  216. package/esm5/libs/validate/email/email.js +0 -13
  217. package/esm5/libs/validate/email/index.js +0 -7
  218. package/esm5/libs/validate/index.js +0 -9
  219. package/esm5/libs/validate/phone/index.js +0 -7
  220. package/esm5/libs/validate/phone/phone.js +0 -15
  221. package/esm5/libs/validate/url/index.js +0 -7
  222. package/esm5/libs/validate/url/url.js +0 -23
  223. package/esm5/public_api.js +0 -17
  224. package/fesm5/firestitch-common.js +0 -3284
  225. package/fesm5/firestitch-common.js.map +0 -1
  226. package/firestitch-common.metadata.json +0 -1
@@ -1,608 +0,0 @@
1
- /**
2
- * @fileoverview added by tsickle
3
- * Generated from: app/services/util.service.ts
4
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
5
- */
6
- import { Injectable } from '@angular/core';
7
- /** @type {?} */
8
- export var KEY_CANCEL = 3;
9
- /** @type {?} */
10
- export var KEY_HELP = 6;
11
- /** @type {?} */
12
- export var KEY_BACKSPACE = 8;
13
- /** @type {?} */
14
- export var KEY_TAB = 9;
15
- /** @type {?} */
16
- export var KEY_CLEAR = 12;
17
- /** @type {?} */
18
- export var KEY_RETURN = 13;
19
- /** @type {?} */
20
- export var KEY_ENTER = 14;
21
- /** @type {?} */
22
- export var KEY_SHIFT = 16;
23
- /** @type {?} */
24
- export var KEY_CONTROL = 17;
25
- /** @type {?} */
26
- export var KEY_ALT = 18;
27
- /** @type {?} */
28
- export var KEY_PAUSE = 19;
29
- /** @type {?} */
30
- export var KEY_CAPS_LOCK = 20;
31
- /** @type {?} */
32
- export var KEY_ESCAPE = 27;
33
- /** @type {?} */
34
- export var KEY_SPACE = 32;
35
- /** @type {?} */
36
- export var KEY_PAGE_UP = 33;
37
- /** @type {?} */
38
- export var KEY_PAGE_DOWN = 34;
39
- /** @type {?} */
40
- export var KEY_END = 35;
41
- /** @type {?} */
42
- export var KEY_HOME = 36;
43
- /** @type {?} */
44
- export var KEY_LEFT = 37;
45
- /** @type {?} */
46
- export var KEY_UP = 38;
47
- /** @type {?} */
48
- export var KEY_RIGHT = 39;
49
- /** @type {?} */
50
- export var KEY_DOWN = 40;
51
- /** @type {?} */
52
- export var KEY_PRINTSCREEN = 44;
53
- /** @type {?} */
54
- export var KEY_INSERT = 45;
55
- /** @type {?} */
56
- export var KEY_DELETE = 46;
57
- /** @type {?} */
58
- export var KEY_0 = 48;
59
- /** @type {?} */
60
- export var KEY_1 = 49;
61
- /** @type {?} */
62
- export var KEY_2 = 50;
63
- /** @type {?} */
64
- export var KEY_3 = 51;
65
- /** @type {?} */
66
- export var KEY_4 = 52;
67
- /** @type {?} */
68
- export var KEY_5 = 53;
69
- /** @type {?} */
70
- export var KEY_6 = 54;
71
- /** @type {?} */
72
- export var KEY_7 = 55;
73
- /** @type {?} */
74
- export var KEY_8 = 56;
75
- /** @type {?} */
76
- export var KEY_9 = 57;
77
- /** @type {?} */
78
- export var KEY_SEMICOLON = 59;
79
- /** @type {?} */
80
- export var KEY_EQUALS = 61;
81
- /*
82
- Basically, just copy-pasted functionality from fs-boilerplate v1.x, with some small changes (like we dont have angular.bind anymore, had to go with a workaround)
83
- There might be a better way to organise constatns but I need to know use-cases
84
- */
85
- var FsUtil = /** @class */ (function () {
86
- function FsUtil() {
87
- this.intervals = {};
88
- }
89
- /**
90
- * @deprecated use @firestitch/common/util/guid instead
91
- */
92
- /**
93
- * @deprecated use \@firestitch/common/util/guid instead
94
- * @param {?=} pattern
95
- * @return {?}
96
- */
97
- FsUtil.prototype.guid = /**
98
- * @deprecated use \@firestitch/common/util/guid instead
99
- * @param {?=} pattern
100
- * @return {?}
101
- */
102
- function (pattern) {
103
- console.warn('@deprecated use @firestitch/common/util/guid instead');
104
- pattern = pattern || 'xxxxxx';
105
- return pattern.replace(/[xy]/g, (/**
106
- * @param {?} c
107
- * @return {?}
108
- */
109
- function (c) {
110
- /** @type {?} */
111
- var r = Math.random() * 16 | 0;
112
- /** @type {?} */
113
- var v = c == 'x' ? r : (r & 0x3 | 0x8);
114
- return v.toString(16);
115
- }));
116
- };
117
- /**
118
- * @deprecated use import { uuid } from @firestitch/common/util; instead
119
- */
120
- /**
121
- * @deprecated use import { uuid } from \@firestitch/common/util; instead
122
- * @return {?}
123
- */
124
- FsUtil.prototype.uuid = /**
125
- * @deprecated use import { uuid } from \@firestitch/common/util; instead
126
- * @return {?}
127
- */
128
- function () {
129
- console.warn('@deprecated use @firestitch/common/util/uuid instead');
130
- return this.guid('xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx');
131
- };
132
- /**
133
- * @deprecated use import { resolve } from @firestitch/common/util; instead
134
- */
135
- /**
136
- * @deprecated use import { resolve } from \@firestitch/common/util; instead
137
- * @param {?} promise
138
- * @param {?=} defaults
139
- * @return {?}
140
- */
141
- FsUtil.prototype.resolve = /**
142
- * @deprecated use import { resolve } from \@firestitch/common/util; instead
143
- * @param {?} promise
144
- * @param {?=} defaults
145
- * @return {?}
146
- */
147
- function (promise, defaults) {
148
- if (defaults === void 0) { defaults = []; }
149
- console.warn('@deprecated use @firestitch/common/util/resolve instead');
150
- /** @type {?} */
151
- var result = defaults;
152
- return new Promise((/**
153
- * @param {?} resolve
154
- * @return {?}
155
- */
156
- function (resolve) {
157
- promise.then((/**
158
- * @param {?} data
159
- * @return {?}
160
- */
161
- function (data) {
162
- Object.keys(data).forEach((/**
163
- * @param {?} key
164
- * @return {?}
165
- */
166
- function (key) { return result[key] = data[key]; }));
167
- resolve(result);
168
- }));
169
- }));
170
- };
171
- /**
172
- * @deprecated use _.toInteger() instead
173
- */
174
- /**
175
- * @deprecated use _.toInteger() instead
176
- * @param {?} value
177
- * @return {?}
178
- */
179
- FsUtil.prototype.int = /**
180
- * @deprecated use _.toInteger() instead
181
- * @param {?} value
182
- * @return {?}
183
- */
184
- function (value) {
185
- console.warn('@deprecated use _.toInteger() instead');
186
- value = parseInt(value);
187
- if (isNaN(value)) {
188
- value = 0;
189
- }
190
- return value;
191
- };
192
- /**
193
- * @deprecated use _.toFinite() instead
194
- */
195
- /**
196
- * @deprecated use _.toFinite() instead
197
- * @param {?} value
198
- * @return {?}
199
- */
200
- FsUtil.prototype.float = /**
201
- * @deprecated use _.toFinite() instead
202
- * @param {?} value
203
- * @return {?}
204
- */
205
- function (value) {
206
- console.warn('@deprecated use _.toFinite() instead');
207
- value = parseFloat(value);
208
- if (isNaN(value)) {
209
- value = 0;
210
- }
211
- return value;
212
- };
213
- /**
214
- * @deprecated use _.toString() instead
215
- */
216
- /**
217
- * @deprecated use _.toString() instead
218
- * @param {?} string
219
- * @return {?}
220
- */
221
- FsUtil.prototype.string = /**
222
- * @deprecated use _.toString() instead
223
- * @param {?} string
224
- * @return {?}
225
- */
226
- function (string) {
227
- console.warn('@deprecated use _.toString() instead');
228
- if (string === null || string === undefined) {
229
- string = '';
230
- }
231
- return (string).toString();
232
- };
233
- /**
234
- * @deprecated use import { isEmpty } from @firestitch/common/util; instead
235
- */
236
- /**
237
- * @deprecated use import { isEmpty } from \@firestitch/common/util; instead
238
- * @param {?} value
239
- * @param {?=} options
240
- * @return {?}
241
- */
242
- FsUtil.prototype.isEmpty = /**
243
- * @deprecated use import { isEmpty } from \@firestitch/common/util; instead
244
- * @param {?} value
245
- * @param {?=} options
246
- * @return {?}
247
- */
248
- function (value, options) {
249
- console.warn('@deprecated use import { isEmpty } from @firestitch/common/util; instead');
250
- options = options || {};
251
- return value === undefined ||
252
- value === null ||
253
- value === false ||
254
- value === '' ||
255
- !this.string(value).length ||
256
- (this.isObject(value) &&
257
- (value.constructor.name === 'Object' && !Object.keys(value).length)) ||
258
- (!options.zero && (value === 0 || value === '0'));
259
- };
260
- /**
261
- * @deprecated use _.isInteger() instead
262
- */
263
- /**
264
- * @deprecated use _.isInteger() instead
265
- * @param {?} value
266
- * @param {?=} type
267
- * @return {?}
268
- */
269
- FsUtil.prototype.isInt = /**
270
- * @deprecated use _.isInteger() instead
271
- * @param {?} value
272
- * @param {?=} type
273
- * @return {?}
274
- */
275
- function (value, type) {
276
- console.warn('@deprecated use _.isInteger() instead');
277
- /** @type {?} */
278
- var int = !!this.string(value).match(/^\d+$/);
279
- if (!int) {
280
- return false;
281
- }
282
- if (type) {
283
- return Number.isInteger(value);
284
- }
285
- return true;
286
- };
287
- /**
288
- * @deprecated use _.each() instead {@link https://lodash.com/docs/4.17.5#forEach}
289
- */
290
- /**
291
- * @deprecated use _.each() instead {\@link https://lodash.com/docs/4.17.5#forEach}
292
- * @param {?} object
293
- * @param {?} func
294
- * @return {?}
295
- */
296
- FsUtil.prototype.each = /**
297
- * @deprecated use _.each() instead {\@link https://lodash.com/docs/4.17.5#forEach}
298
- * @param {?} object
299
- * @param {?} func
300
- * @return {?}
301
- */
302
- function (object, func) {
303
- console.warn('@deprecated use _.each() instead {@link https://lodash.com/docs/4.17.5#forEach}');
304
- if (!this.isArray(object) && !this.isObject(object)) {
305
- return;
306
- }
307
- Object.keys(object).forEach((/**
308
- * @param {?} key
309
- * @return {?}
310
- */
311
- function (key) {
312
- func(object[key], key);
313
- }));
314
- };
315
- /**
316
- * @deprecated use _.isArrayLikeObject() {@link https://lodash.com/docs/4.17.5#isArrayLikeObject}
317
- * or _.isObject() {@link https://lodash.com/docs/4.17.5#isObject} instead
318
- */
319
- /**
320
- * @deprecated use _.isArrayLikeObject() {\@link https://lodash.com/docs/4.17.5#isArrayLikeObject}
321
- * or _.isObject() {\@link https://lodash.com/docs/4.17.5#isObject} instead
322
- * @param {?} value
323
- * @return {?}
324
- */
325
- FsUtil.prototype.isObject = /**
326
- * @deprecated use _.isArrayLikeObject() {\@link https://lodash.com/docs/4.17.5#isArrayLikeObject}
327
- * or _.isObject() {\@link https://lodash.com/docs/4.17.5#isObject} instead
328
- * @param {?} value
329
- * @return {?}
330
- */
331
- function (value) {
332
- console.warn('@deprecated use _.isArrayLikeObject() {@link https://lodash.com/docs/4.17.5#isArrayLikeObject} or _.isObject() {@link https://lodash.com/docs/4.17.5#isObject} instead');
333
- return value !== null && typeof value === 'object' && !this.isArray(value);
334
- };
335
- /**
336
- * @deprecated use _.isString() instead {@link https://lodash.com/docs/4.17.5#isString}
337
- */
338
- /**
339
- * @deprecated use _.isString() instead {\@link https://lodash.com/docs/4.17.5#isString}
340
- * @param {?} value
341
- * @return {?}
342
- */
343
- FsUtil.prototype.isString = /**
344
- * @deprecated use _.isString() instead {\@link https://lodash.com/docs/4.17.5#isString}
345
- * @param {?} value
346
- * @return {?}
347
- */
348
- function (value) {
349
- console.warn('@deprecated use _.isString() instead {@link https://lodash.com/docs/4.17.5#isString}');
350
- return typeof value === 'string' || value instanceof String;
351
- };
352
- /**
353
- * @deprecated use _.isArray() instead {@link https://lodash.com/docs/4.17.5#isArray}
354
- */
355
- /**
356
- * @deprecated use _.isArray() instead {\@link https://lodash.com/docs/4.17.5#isArray}
357
- * @param {?} value
358
- * @return {?}
359
- */
360
- FsUtil.prototype.isArray = /**
361
- * @deprecated use _.isArray() instead {\@link https://lodash.com/docs/4.17.5#isArray}
362
- * @param {?} value
363
- * @return {?}
364
- */
365
- function (value) {
366
- console.warn('@deprecated use _.isArray() instead {@link https://lodash.com/docs/4.17.5#isArray}');
367
- return value instanceof Array;
368
- };
369
- /**
370
- * @deprecated use import { isNumeric } from @firestitch/common/util; instead
371
- */
372
- /**
373
- * @deprecated use import { isNumeric } from \@firestitch/common/util; instead
374
- * @param {?} value
375
- * @return {?}
376
- */
377
- FsUtil.prototype.isNumeric = /**
378
- * @deprecated use import { isNumeric } from \@firestitch/common/util; instead
379
- * @param {?} value
380
- * @return {?}
381
- */
382
- function (value) {
383
- console.warn('@deprecated use import { isNumeric } from @firestitch/common/util; instead');
384
- return this.string(value).length && !!this.string(value).match(/^-?\d*\.?\d*$/);
385
- };
386
- /**
387
- * @deprecated use import { isClass } from @firestitch/common/util; instead
388
- */
389
- /**
390
- * @deprecated use import { isClass } from \@firestitch/common/util; instead
391
- * @param {?} value
392
- * @param {?} cls
393
- * @return {?}
394
- */
395
- FsUtil.prototype.isClass = /**
396
- * @deprecated use import { isClass } from \@firestitch/common/util; instead
397
- * @param {?} value
398
- * @param {?} cls
399
- * @return {?}
400
- */
401
- function (value, cls) {
402
- console.warn('@deprecated use import { isClass } from @firestitch/common/util; instead');
403
- if (this.isObject(value)) {
404
- if (this.isString(cls)) {
405
- if (value.constructor) {
406
- if (value.constructor.name === cls) {
407
- return true;
408
- }
409
- }
410
- }
411
- else {
412
- if (value instanceof cls) {
413
- return true;
414
- }
415
- }
416
- }
417
- return false;
418
- };
419
- /**
420
- * @deprecated use _.isBoolean() instead {@link https://lodash.com/docs/4.17.5#isBoolean}
421
- */
422
- /**
423
- * @deprecated use _.isBoolean() instead {\@link https://lodash.com/docs/4.17.5#isBoolean}
424
- * @param {?} value
425
- * @return {?}
426
- */
427
- FsUtil.prototype.isBoolean = /**
428
- * @deprecated use _.isBoolean() instead {\@link https://lodash.com/docs/4.17.5#isBoolean}
429
- * @param {?} value
430
- * @return {?}
431
- */
432
- function (value) {
433
- console.warn('@deprecated use _.isBoolean() instead {@link https://lodash.com/docs/4.17.5#isBoolean}');
434
- return value === true || value === false;
435
- };
436
- /**
437
- * @deprecated use import { value } from @firestitch/common/util; instead
438
- */
439
- /**
440
- * @deprecated use import { value } from \@firestitch/common/util; instead
441
- * @param {?} object
442
- * @param {?} key
443
- * @param {?} def
444
- * @return {?}
445
- */
446
- FsUtil.prototype.value = /**
447
- * @deprecated use import { value } from \@firestitch/common/util; instead
448
- * @param {?} object
449
- * @param {?} key
450
- * @param {?} def
451
- * @return {?}
452
- */
453
- function (object, key, def) {
454
- console.warn('@deprecated use import { value } from @firestitch/common/util; instead');
455
- if (this.isObject(object) || this.isArray(object)) {
456
- if (object.hasOwnProperty(key)) {
457
- return object[key];
458
- }
459
- }
460
- return def;
461
- };
462
- /**
463
- * @param {?} func
464
- * @param {?} wait
465
- * @return {?}
466
- */
467
- FsUtil.prototype.throttle = /**
468
- * @param {?} func
469
- * @param {?} wait
470
- * @return {?}
471
- */
472
- function (func, wait) {
473
- console.warn('@deprecated use import { throttle } from @firestitch/common/util; instead');
474
- /** @type {?} */
475
- var waiting = false;
476
- return (/**
477
- * @return {?}
478
- */
479
- function () {
480
- if (!waiting) { // If we're not waiting
481
- func.apply(null, arguments); // Execute users function
482
- waiting = true; // Prevent future invocations
483
- setTimeout((/**
484
- * @return {?}
485
- */
486
- function () {
487
- waiting = false; // And allow future invocations
488
- }), wait);
489
- }
490
- });
491
- };
492
- /**
493
- * @deprecated use import { debounce } from @firestitch/common/util; instead
494
- */
495
- /**
496
- * @deprecated use import { debounce } from \@firestitch/common/util; instead
497
- * @param {?} func
498
- * @param {?} wait
499
- * @param {?} immediate
500
- * @return {?}
501
- */
502
- FsUtil.prototype.debounce = /**
503
- * @deprecated use import { debounce } from \@firestitch/common/util; instead
504
- * @param {?} func
505
- * @param {?} wait
506
- * @param {?} immediate
507
- * @return {?}
508
- */
509
- function (func, wait, immediate) {
510
- console.warn('@deprecated use import { debounce } from @firestitch/common/util; instead');
511
- /** @type {?} */
512
- var timeout;
513
- return (/**
514
- * @return {?}
515
- */
516
- function () {
517
- /** @type {?} */
518
- var context = this;
519
- /** @type {?} */
520
- var args = arguments;
521
- /** @type {?} */
522
- var later = (/**
523
- * @return {?}
524
- */
525
- function () {
526
- timeout = null;
527
- if (!immediate)
528
- func.apply(context, args);
529
- });
530
- /** @type {?} */
531
- var callNow = immediate && !timeout;
532
- clearTimeout(timeout);
533
- timeout = setTimeout(later, wait);
534
- if (callNow)
535
- func.apply(context, args);
536
- });
537
- };
538
- /**
539
- * @deprecated use import { length } from @firestitch/common/util; instead
540
- */
541
- /**
542
- * @deprecated use import { length } from \@firestitch/common/util; instead
543
- * @param {?} object
544
- * @return {?}
545
- */
546
- FsUtil.prototype.length = /**
547
- * @deprecated use import { length } from \@firestitch/common/util; instead
548
- * @param {?} object
549
- * @return {?}
550
- */
551
- function (object) {
552
- console.warn('@deprecated use import { length } from @firestitch/common/util; instead');
553
- if (this.isObject(object)) {
554
- return Object.keys(object).length;
555
- }
556
- if (this.isArray(object)) {
557
- return object.length;
558
- }
559
- return 0;
560
- };
561
- /**
562
- * @deprecated use import { boolean } from @firestitch/common/util; instead
563
- */
564
- /**
565
- * @deprecated use import { boolean } from \@firestitch/common/util; instead
566
- * @param {?} value
567
- * @return {?}
568
- */
569
- FsUtil.prototype.boolean = /**
570
- * @deprecated use import { boolean } from \@firestitch/common/util; instead
571
- * @param {?} value
572
- * @return {?}
573
- */
574
- function (value) {
575
- console.warn('@deprecated use import { boolean } from @firestitch/common/util; instead');
576
- return this.string(value).toLowerCase() !== 'false' && !!value;
577
- };
578
- /**
579
- * @deprecated use import { stringify } from @firestitch/common/util; instead
580
- */
581
- /**
582
- * @deprecated use import { stringify } from \@firestitch/common/util; instead
583
- * @param {?} value
584
- * @return {?}
585
- */
586
- FsUtil.prototype.stringify = /**
587
- * @deprecated use import { stringify } from \@firestitch/common/util; instead
588
- * @param {?} value
589
- * @return {?}
590
- */
591
- function (value) {
592
- console.warn('@deprecated use import { stringify } from @firestitch/common/util; instead');
593
- return JSON.stringify(value);
594
- };
595
- FsUtil.decorators = [
596
- { type: Injectable }
597
- ];
598
- return FsUtil;
599
- }());
600
- export { FsUtil };
601
- if (false) {
602
- /**
603
- * @type {?}
604
- * @private
605
- */
606
- FsUtil.prototype.intervals;
607
- }
608
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGZpcmVzdGl0Y2gvY29tbW9uLyIsInNvdXJjZXMiOlsiYXBwL3NlcnZpY2VzL3V0aWwuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBRTNDLE1BQU0sS0FBTyxVQUFVLEdBQUcsQ0FBQzs7QUFBM0IsTUFBTSxLQUNGLFFBQVEsR0FBRyxDQUFDOztBQURoQixNQUFNLEtBRUYsYUFBYSxHQUFHLENBQUM7O0FBRnJCLE1BQU0sS0FHRixPQUFPLEdBQUcsQ0FBQzs7QUFIZixNQUFNLEtBSUYsU0FBUyxHQUFHLEVBQUU7O0FBSmxCLE1BQU0sS0FLRixVQUFVLEdBQUcsRUFBRTs7QUFMbkIsTUFBTSxLQU1GLFNBQVMsR0FBRyxFQUFFOztBQU5sQixNQUFNLEtBT0YsU0FBUyxHQUFHLEVBQUU7O0FBUGxCLE1BQU0sS0FRRixXQUFXLEdBQUcsRUFBRTs7QUFScEIsTUFBTSxLQVNGLE9BQU8sR0FBRyxFQUFFOztBQVRoQixNQUFNLEtBVUYsU0FBUyxHQUFHLEVBQUU7O0FBVmxCLE1BQU0sS0FXRixhQUFhLEdBQUcsRUFBRTs7QUFYdEIsTUFBTSxLQVlGLFVBQVUsR0FBRyxFQUFFOztBQVpuQixNQUFNLEtBYUYsU0FBUyxHQUFHLEVBQUU7O0FBYmxCLE1BQU0sS0FjRixXQUFXLEdBQUcsRUFBRTs7QUFkcEIsTUFBTSxLQWVGLGFBQWEsR0FBRyxFQUFFOztBQWZ0QixNQUFNLEtBZ0JGLE9BQU8sR0FBRyxFQUFFOztBQWhCaEIsTUFBTSxLQWlCRixRQUFRLEdBQUcsRUFBRTs7QUFqQmpCLE1BQU0sS0FrQkYsUUFBUSxHQUFHLEVBQUU7O0FBbEJqQixNQUFNLEtBbUJGLE1BQU0sR0FBRyxFQUFFOztBQW5CZixNQUFNLEtBb0JGLFNBQVMsR0FBRyxFQUFFOztBQXBCbEIsTUFBTSxLQXFCRixRQUFRLEdBQUcsRUFBRTs7QUFyQmpCLE1BQU0sS0FzQkYsZUFBZSxHQUFHLEVBQUU7O0FBdEJ4QixNQUFNLEtBdUJGLFVBQVUsR0FBRyxFQUFFOztBQXZCbkIsTUFBTSxLQXdCRixVQUFVLEdBQUcsRUFBRTs7QUF4Qm5CLE1BQU0sS0F5QkYsS0FBSyxHQUFHLEVBQUU7O0FBekJkLE1BQU0sS0EwQkYsS0FBSyxHQUFHLEVBQUU7O0FBMUJkLE1BQU0sS0EyQkYsS0FBSyxHQUFHLEVBQUU7O0FBM0JkLE1BQU0sS0E0QkYsS0FBSyxHQUFHLEVBQUU7O0FBNUJkLE1BQU0sS0E2QkYsS0FBSyxHQUFHLEVBQUU7O0FBN0JkLE1BQU0sS0E4QkYsS0FBSyxHQUFHLEVBQUU7O0FBOUJkLE1BQU0sS0ErQkYsS0FBSyxHQUFHLEVBQUU7O0FBL0JkLE1BQU0sS0FnQ0YsS0FBSyxHQUFHLEVBQUU7O0FBaENkLE1BQU0sS0FpQ0YsS0FBSyxHQUFHLEVBQUU7O0FBakNkLE1BQU0sS0FrQ0YsS0FBSyxHQUFHLEVBQUU7O0FBbENkLE1BQU0sS0FtQ0YsYUFBYSxHQUFHLEVBQUU7O0FBbkN0QixNQUFNLEtBb0NGLFVBQVUsR0FBRyxFQUFFOzs7OztBQVFuQjtJQUFBO1FBR1ksY0FBUyxHQUFHLEVBQUUsQ0FBQztJQTRRM0IsQ0FBQztJQTFRRzs7TUFFRTs7Ozs7O0lBQ0sscUJBQUk7Ozs7O0lBQVgsVUFBWSxPQUFnQjtRQUMxQixPQUFPLENBQUMsSUFBSSxDQUFDLHNEQUFzRCxDQUFDLENBQUM7UUFDckUsT0FBTyxHQUFHLE9BQU8sSUFBSSxRQUFRLENBQUM7UUFDOUIsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU87Ozs7UUFBRSxVQUFTLENBQUM7O2dCQUNwQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDOztnQkFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO1lBQ2xFLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4QixDQUFDLEVBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7TUFFRTs7Ozs7SUFDSyxxQkFBSTs7OztJQUFYO1FBQ0UsT0FBTyxDQUFDLElBQUksQ0FBQyxzREFBc0QsQ0FBQyxDQUFDO1FBQ3JFLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRDs7TUFFRTs7Ozs7OztJQUNLLHdCQUFPOzs7Ozs7SUFBZCxVQUFlLE9BQXdCLEVBQUUsUUFBYTtRQUFiLHlCQUFBLEVBQUEsYUFBYTtRQUNwRCxPQUFPLENBQUMsSUFBSSxDQUFDLHlEQUF5RCxDQUFDLENBQUM7O1lBQ2xFLE1BQU0sR0FBRyxRQUFRO1FBQ3ZCLE9BQU8sSUFBSSxPQUFPOzs7O1FBQUMsVUFBQSxPQUFPO1lBQ3BCLE9BQU8sQ0FBQyxJQUFJOzs7O1lBQUMsVUFBVSxJQUFJO2dCQUN2QixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU87Ozs7Z0JBQUMsVUFBQSxHQUFHLElBQUksT0FBQSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUF2QixDQUF1QixFQUFDLENBQUE7Z0JBQ3pELE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQTtZQUNuQixDQUFDLEVBQUMsQ0FBQztRQUNSLENBQUMsRUFBQyxDQUFBO0lBQ0wsQ0FBQztJQUVEOztNQUVFOzs7Ozs7SUFDSyxvQkFBRzs7Ozs7SUFBVixVQUFXLEtBQVU7UUFDakIsT0FBTyxDQUFDLElBQUksQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO1FBQ3RELEtBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEIsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDZCxLQUFLLEdBQUcsQ0FBQyxDQUFDO1NBQ2I7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRUQ7O01BRUU7Ozs7OztJQUNLLHNCQUFLOzs7OztJQUFaLFVBQWEsS0FBSztRQUNoQixPQUFPLENBQUMsSUFBSSxDQUFDLHNDQUFzQyxDQUFDLENBQUM7UUFDckQsS0FBSyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQixJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNkLEtBQUssR0FBRyxDQUFDLENBQUM7U0FDYjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVEOztNQUVFOzs7Ozs7SUFDSyx1QkFBTTs7Ozs7SUFBYixVQUFjLE1BQU07UUFDbEIsT0FBTyxDQUFDLElBQUksQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO1FBQ25ELElBQUksTUFBTSxLQUFLLElBQUksSUFBSSxNQUFNLEtBQUssU0FBUyxFQUFFO1lBQ3pDLE1BQU0sR0FBRyxFQUFFLENBQUM7U0FDZjtRQUVELE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQ7O01BRUU7Ozs7Ozs7SUFDSyx3QkFBTzs7Ozs7O0lBQWQsVUFBZSxLQUFLLEVBQUUsT0FBUTtRQUMxQixPQUFPLENBQUMsSUFBSSxDQUFDLDBFQUEwRSxDQUFDLENBQUM7UUFDekYsT0FBTyxHQUFHLE9BQU8sSUFBSSxFQUFFLENBQUM7UUFDeEIsT0FBTyxLQUFLLEtBQUssU0FBUztZQUN0QixLQUFLLEtBQUssSUFBSTtZQUNkLEtBQUssS0FBSyxLQUFLO1lBQ2YsS0FBSyxLQUFLLEVBQUU7WUFDWixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTTtZQUMxQixDQUNJLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO2dCQUNwQixDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxLQUFLLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDcEUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxJQUFJLEtBQUssS0FBSyxHQUFHLENBQUMsQ0FDbkQsQ0FBQztJQUNWLENBQUM7SUFFRDs7TUFFRTs7Ozs7OztJQUNLLHNCQUFLOzs7Ozs7SUFBWixVQUFhLEtBQUssRUFBRSxJQUFLO1FBQ3JCLE9BQU8sQ0FBQyxJQUFJLENBQUMsdUNBQXVDLENBQUMsQ0FBQzs7WUFDaEQsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7UUFFL0MsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNOLE9BQU8sS0FBSyxDQUFDO1NBQ2hCO1FBRUQsSUFBSSxJQUFJLEVBQUU7WUFDTixPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDbEM7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQ7O01BRUU7Ozs7Ozs7SUFDSyxxQkFBSTs7Ozs7O0lBQVgsVUFBWSxNQUFNLEVBQUUsSUFBSTtRQUN0QixPQUFPLENBQUMsSUFBSSxDQUFDLGlGQUFpRixDQUFDLENBQUM7UUFDaEcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ25ELE9BQU87U0FDUjtRQUVELE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTzs7OztRQUFDLFVBQVMsR0FBRztZQUN0QyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3hCLENBQUMsRUFBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7TUFHRTs7Ozs7OztJQUNLLHlCQUFROzs7Ozs7SUFBZixVQUFnQixLQUFLO1FBQ25CLE9BQU8sQ0FBQyxJQUFJLENBQUMsd0tBQXdLLENBQUMsQ0FBQztRQUN2TCxPQUFPLEtBQUssS0FBSyxJQUFJLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBRUQ7O01BRUU7Ozs7OztJQUNLLHlCQUFROzs7OztJQUFmLFVBQWdCLEtBQUs7UUFDbkIsT0FBTyxDQUFDLElBQUksQ0FBQyxzRkFBc0YsQ0FBQyxDQUFDO1FBQ3JHLE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssWUFBWSxNQUFNLENBQUM7SUFDOUQsQ0FBQztJQUVEOztNQUVFOzs7Ozs7SUFDSyx3QkFBTzs7Ozs7SUFBZCxVQUFlLEtBQUs7UUFDbEIsT0FBTyxDQUFDLElBQUksQ0FBQyxvRkFBb0YsQ0FBQyxDQUFDO1FBQ25HLE9BQU8sS0FBSyxZQUFZLEtBQUssQ0FBQztJQUNoQyxDQUFDO0lBRUQ7O01BRUU7Ozs7OztJQUNLLDBCQUFTOzs7OztJQUFoQixVQUFpQixLQUFLO1FBQ3BCLE9BQU8sQ0FBQyxJQUFJLENBQUMsNEVBQTRFLENBQUMsQ0FBQztRQUMzRixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUNsRixDQUFDO0lBRUQ7O01BRUU7Ozs7Ozs7SUFDSyx3QkFBTzs7Ozs7O0lBQWQsVUFBZSxLQUFLLEVBQUUsR0FBRztRQUNyQixPQUFPLENBQUMsSUFBSSxDQUFDLDBFQUEwRSxDQUFDLENBQUM7UUFDekYsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBRXRCLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFFcEIsSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFO29CQUNuQixJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxLQUFLLEdBQUcsRUFBRTt3QkFDaEMsT0FBTyxJQUFJLENBQUM7cUJBQ2Y7aUJBQ0o7YUFFSjtpQkFBTTtnQkFFSCxJQUFJLEtBQUssWUFBWSxHQUFHLEVBQUU7b0JBQ3RCLE9BQU8sSUFBSSxDQUFDO2lCQUNmO2FBQ0o7U0FDSjtRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7TUFFRTs7Ozs7O0lBQ0ssMEJBQVM7Ozs7O0lBQWhCLFVBQWlCLEtBQUs7UUFDcEIsT0FBTyxDQUFDLElBQUksQ0FBQyx3RkFBd0YsQ0FBQyxDQUFDO1FBQ3ZHLE9BQU8sS0FBSyxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssS0FBSyxDQUFDO0lBQzNDLENBQUM7SUFFRDs7TUFFRTs7Ozs7Ozs7SUFDSyxzQkFBSzs7Ozs7OztJQUFaLFVBQWEsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHO1FBQzNCLE9BQU8sQ0FBQyxJQUFJLENBQUMsd0VBQXdFLENBQUMsQ0FBQztRQUNyRixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUUvQyxJQUFJLE1BQU0sQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQzVCLE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ3RCO1NBQ0o7UUFFRCxPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7Ozs7OztJQUVNLHlCQUFROzs7OztJQUFmLFVBQWdCLElBQUksRUFBRSxJQUFJO1FBQ3hCLE9BQU8sQ0FBQyxJQUFJLENBQUMsMkVBQTJFLENBQUMsQ0FBQzs7WUFDdEYsT0FBTyxHQUFHLEtBQUs7UUFDakI7OztRQUFPO1lBQ0gsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFxQix1QkFBdUI7Z0JBQ3RELElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUsseUJBQXlCO2dCQUMxRCxPQUFPLEdBQUcsSUFBSSxDQUFDLENBQWdCLDZCQUE2QjtnQkFDNUQsVUFBVTs7O2dCQUFDO29CQUNQLE9BQU8sR0FBRyxLQUFLLENBQUMsQ0FBVywrQkFBK0I7Z0JBQzlELENBQUMsR0FBRSxJQUFJLENBQUMsQ0FBQzthQUNaO1FBQ0wsQ0FBQyxFQUFBO0lBQ0wsQ0FBQztJQUVEOztNQUVFOzs7Ozs7OztJQUNLLHlCQUFROzs7Ozs7O0lBQWYsVUFBZ0IsSUFBSSxFQUFFLElBQUksRUFBRSxTQUFTO1FBQ25DLE9BQU8sQ0FBQyxJQUFJLENBQUMsMkVBQTJFLENBQUMsQ0FBQzs7WUFDdEYsT0FBTztRQUNUOzs7UUFBTzs7Z0JBQ0MsT0FBTyxHQUFHLElBQUk7O2dCQUFFLElBQUksR0FBRyxTQUFTOztnQkFDaEMsS0FBSzs7O1lBQUc7Z0JBQ1IsT0FBTyxHQUFHLElBQUksQ0FBQztnQkFDZixJQUFJLENBQUMsU0FBUztvQkFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztZQUM5QyxDQUFDLENBQUE7O2dCQUNHLE9BQU8sR0FBRyxTQUFTLElBQUksQ0FBQyxPQUFPO1lBQ25DLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN0QixPQUFPLEdBQUcsVUFBVSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNsQyxJQUFJLE9BQU87Z0JBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDM0MsQ0FBQyxFQUFDO0lBQ04sQ0FBQztJQUVEOztNQUVFOzs7Ozs7SUFDSyx1QkFBTTs7Ozs7SUFBYixVQUFjLE1BQU07UUFDbEIsT0FBTyxDQUFDLElBQUksQ0FBQyx5RUFBeUUsQ0FBQyxDQUFDO1FBQ3hGLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNyQixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDO1NBQ3JDO1FBRUQsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3RCLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQztTQUN4QjtRQUVELE9BQU8sQ0FBQyxDQUFDO0lBQ2IsQ0FBQztJQUVEOztNQUVFOzs7Ozs7SUFDSyx3QkFBTzs7Ozs7SUFBZCxVQUFlLEtBQUs7UUFDbEIsT0FBTyxDQUFDLElBQUksQ0FBQywwRUFBMEUsQ0FBQyxDQUFDO1FBQ3pGLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxXQUFXLEVBQUUsS0FBSyxPQUFPLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUNqRSxDQUFDO0lBRUQ7O01BRUU7Ozs7OztJQUNLLDBCQUFTOzs7OztJQUFoQixVQUFpQixLQUFLO1FBQ3BCLE9BQU8sQ0FBQyxJQUFJLENBQUMsNEVBQTRFLENBQUMsQ0FBQztRQUMzRixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0IsQ0FBQzs7Z0JBOVFKLFVBQVU7O0lBK1FYLGFBQUM7Q0FBQSxBQS9RRCxJQStRQztTQTlRWSxNQUFNOzs7Ozs7SUFFZiwyQkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCBjb25zdCBLRVlfQ0FOQ0VMID0gMyxcbiAgICBLRVlfSEVMUCA9IDYsXG4gICAgS0VZX0JBQ0tTUEFDRSA9IDgsXG4gICAgS0VZX1RBQiA9IDksXG4gICAgS0VZX0NMRUFSID0gMTIsXG4gICAgS0VZX1JFVFVSTiA9IDEzLFxuICAgIEtFWV9FTlRFUiA9IDE0LFxuICAgIEtFWV9TSElGVCA9IDE2LFxuICAgIEtFWV9DT05UUk9MID0gMTcsXG4gICAgS0VZX0FMVCA9IDE4LFxuICAgIEtFWV9QQVVTRSA9IDE5LFxuICAgIEtFWV9DQVBTX0xPQ0sgPSAyMCxcbiAgICBLRVlfRVNDQVBFID0gMjcsXG4gICAgS0VZX1NQQUNFID0gMzIsXG4gICAgS0VZX1BBR0VfVVAgPSAzMyxcbiAgICBLRVlfUEFHRV9ET1dOID0gMzQsXG4gICAgS0VZX0VORCA9IDM1LFxuICAgIEtFWV9IT01FID0gMzYsXG4gICAgS0VZX0xFRlQgPSAzNyxcbiAgICBLRVlfVVAgPSAzOCxcbiAgICBLRVlfUklHSFQgPSAzOSxcbiAgICBLRVlfRE9XTiA9IDQwLFxuICAgIEtFWV9QUklOVFNDUkVFTiA9IDQ0LFxuICAgIEtFWV9JTlNFUlQgPSA0NSxcbiAgICBLRVlfREVMRVRFID0gNDYsXG4gICAgS0VZXzAgPSA0OCxcbiAgICBLRVlfMSA9IDQ5LFxuICAgIEtFWV8yID0gNTAsXG4gICAgS0VZXzMgPSA1MSxcbiAgICBLRVlfNCA9IDUyLFxuICAgIEtFWV81ID0gNTMsXG4gICAgS0VZXzYgPSA1NCxcbiAgICBLRVlfNyA9IDU1LFxuICAgIEtFWV84ID0gNTYsXG4gICAgS0VZXzkgPSA1NyxcbiAgICBLRVlfU0VNSUNPTE9OID0gNTksXG4gICAgS0VZX0VRVUFMUyA9IDYxO1xuXG4vKlxuICAgIEJhc2ljYWxseSwganVzdCBjb3B5LXBhc3RlZCBmdW5jdGlvbmFsaXR5IGZyb20gZnMtYm9pbGVycGxhdGUgdjEueCwgd2l0aCBzb21lIHNtYWxsIGNoYW5nZXMgKGxpa2Ugd2UgZG9udCBoYXZlIGFuZ3VsYXIuYmluZCBhbnltb3JlLCBoYWQgdG8gZ28gd2l0aCBhIHdvcmthcm91bmQpXG4gICAgVGhlcmUgbWlnaHQgYmUgYSBiZXR0ZXIgd2F5IHRvIG9yZ2FuaXNlIGNvbnN0YXRucyBidXQgSSBuZWVkIHRvIGtub3cgdXNlLWNhc2VzXG4qL1xuXG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBGc1V0aWwge1xuXG4gICAgcHJpdmF0ZSBpbnRlcnZhbHMgPSB7fTtcblxuICAgIC8qKlxuICAgICogQGRlcHJlY2F0ZWQgdXNlIEBmaXJlc3RpdGNoL2NvbW1vbi91dGlsL2d1aWQgaW5zdGVhZFxuICAgICovXG4gICAgcHVibGljIGd1aWQocGF0dGVybj86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICBjb25zb2xlLndhcm4oJ0BkZXByZWNhdGVkIHVzZSBAZmlyZXN0aXRjaC9jb21tb24vdXRpbC9ndWlkIGluc3RlYWQnKTtcbiAgICAgIHBhdHRlcm4gPSBwYXR0ZXJuIHx8ICd4eHh4eHgnO1xuICAgICAgcmV0dXJuIHBhdHRlcm4ucmVwbGFjZSgvW3h5XS9nLCBmdW5jdGlvbihjKSB7XG4gICAgICAgIHZhciByID0gTWF0aC5yYW5kb20oKSAqIDE2IHwgMCwgdiA9IGMgPT0gJ3gnID8gciA6IChyICYgMHgzIHwgMHg4KTtcbiAgICAgICAgcmV0dXJuIHYudG9TdHJpbmcoMTYpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIGltcG9ydCB7IHV1aWQgfSBmcm9tIEBmaXJlc3RpdGNoL2NvbW1vbi91dGlsOyBpbnN0ZWFkXG4gICAgKi9cbiAgICBwdWJsaWMgdXVpZCgpOiBzdHJpbmcge1xuICAgICAgY29uc29sZS53YXJuKCdAZGVwcmVjYXRlZCB1c2UgQGZpcmVzdGl0Y2gvY29tbW9uL3V0aWwvdXVpZCBpbnN0ZWFkJyk7XG4gICAgICByZXR1cm4gdGhpcy5ndWlkKCd4eHh4eHh4eC14eHh4LXh4eHgteHh4eC14eHh4eHh4eHh4eHgnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCB1c2UgaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gQGZpcmVzdGl0Y2gvY29tbW9uL3V0aWw7IGluc3RlYWRcbiAgICAqL1xuICAgIHB1YmxpYyByZXNvbHZlKHByb21pc2U6IFByb21pc2U8b2JqZWN0PiwgZGVmYXVsdHMgPSBbXSk6IFByb21pc2U8b2JqZWN0PiB7XG4gICAgICBjb25zb2xlLndhcm4oJ0BkZXByZWNhdGVkIHVzZSBAZmlyZXN0aXRjaC9jb21tb24vdXRpbC9yZXNvbHZlIGluc3RlYWQnKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGRlZmF1bHRzO1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgICAgcHJvbWlzZS50aGVuKGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoZGF0YSkuZm9yRWFjaChrZXkgPT4gcmVzdWx0W2tleV0gPSBkYXRhW2tleV0pXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpXG4gICAgICAgICAgICB9KTtcbiAgICAgICB9KVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIHVzZSBfLnRvSW50ZWdlcigpIGluc3RlYWRcbiAgICAqL1xuICAgIHB1YmxpYyBpbnQodmFsdWU6IGFueSk6IG51bWJlciB7XG4gICAgICAgIGNvbnNvbGUud2FybignQGRlcHJlY2F0ZWQgdXNlIF8udG9JbnRlZ2VyKCkgaW5zdGVhZCcpO1xuICAgICAgICB2YWx1ZSA9IHBhcnNlSW50KHZhbHVlKTtcbiAgICAgICAgaWYgKGlzTmFOKHZhbHVlKSkge1xuICAgICAgICAgICAgdmFsdWUgPSAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCB1c2UgXy50b0Zpbml0ZSgpIGluc3RlYWRcbiAgICAqL1xuICAgIHB1YmxpYyBmbG9hdCh2YWx1ZSk6IG51bWJlciB7XG4gICAgICBjb25zb2xlLndhcm4oJ0BkZXByZWNhdGVkIHVzZSBfLnRvRmluaXRlKCkgaW5zdGVhZCcpO1xuICAgICAgdmFsdWUgPSBwYXJzZUZsb2F0KHZhbHVlKTtcbiAgICAgIGlmIChpc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICB2YWx1ZSA9IDA7XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIF8udG9TdHJpbmcoKSBpbnN0ZWFkXG4gICAgKi9cbiAgICBwdWJsaWMgc3RyaW5nKHN0cmluZyk6IHN0cmluZyB7XG4gICAgICBjb25zb2xlLndhcm4oJ0BkZXByZWNhdGVkIHVzZSBfLnRvU3RyaW5nKCkgaW5zdGVhZCcpO1xuICAgICAgICBpZiAoc3RyaW5nID09PSBudWxsIHx8IHN0cmluZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBzdHJpbmcgPSAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAoc3RyaW5nKS50b1N0cmluZygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIHVzZSBpbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBAZmlyZXN0aXRjaC9jb21tb24vdXRpbDsgaW5zdGVhZFxuICAgICovXG4gICAgcHVibGljIGlzRW1wdHkodmFsdWUsIG9wdGlvbnM/KTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnNvbGUud2FybignQGRlcHJlY2F0ZWQgdXNlIGltcG9ydCB7IGlzRW1wdHkgfSBmcm9tIEBmaXJlc3RpdGNoL2NvbW1vbi91dGlsOyBpbnN0ZWFkJyk7XG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgICAgICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgdmFsdWUgPT09IG51bGwgfHxcbiAgICAgICAgICAgIHZhbHVlID09PSBmYWxzZSB8fFxuICAgICAgICAgICAgdmFsdWUgPT09ICcnIHx8XG4gICAgICAgICAgICAhdGhpcy5zdHJpbmcodmFsdWUpLmxlbmd0aCB8fFxuICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgIHRoaXMuaXNPYmplY3QodmFsdWUpICYmXG4gICAgICAgICAgICAgICAgKHZhbHVlLmNvbnN0cnVjdG9yLm5hbWUgPT09ICdPYmplY3QnICYmICFPYmplY3Qua2V5cyh2YWx1ZSkubGVuZ3RoKSkgfHxcbiAgICAgICAgICAgICAgICAoIW9wdGlvbnMuemVybyAmJiAodmFsdWUgPT09IDAgfHwgdmFsdWUgPT09ICcwJylcbiAgICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIF8uaXNJbnRlZ2VyKCkgaW5zdGVhZFxuICAgICovXG4gICAgcHVibGljIGlzSW50KHZhbHVlLCB0eXBlPykge1xuICAgICAgICBjb25zb2xlLndhcm4oJ0BkZXByZWNhdGVkIHVzZSBfLmlzSW50ZWdlcigpIGluc3RlYWQnKTtcbiAgICAgICAgY29uc3QgaW50ID0gISF0aGlzLnN0cmluZyh2YWx1ZSkubWF0Y2goL15cXGQrJC8pO1xuXG4gICAgICAgIGlmICghaW50KSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZSkge1xuICAgICAgICAgICAgcmV0dXJuIE51bWJlci5pc0ludGVnZXIodmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIF8uZWFjaCgpIGluc3RlYWQge0BsaW5rIGh0dHBzOi8vbG9kYXNoLmNvbS9kb2NzLzQuMTcuNSNmb3JFYWNofVxuICAgICovXG4gICAgcHVibGljIGVhY2gob2JqZWN0LCBmdW5jKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ0BkZXByZWNhdGVkIHVzZSBfLmVhY2goKSBpbnN0ZWFkIHtAbGluayBodHRwczovL2xvZGFzaC5jb20vZG9jcy80LjE3LjUjZm9yRWFjaH0nKTtcbiAgICAgIGlmICghdGhpcy5pc0FycmF5KG9iamVjdCkgJiYgIXRoaXMuaXNPYmplY3Qob2JqZWN0KSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIE9iamVjdC5rZXlzKG9iamVjdCkuZm9yRWFjaChmdW5jdGlvbihrZXkpIHtcbiAgICAgICAgZnVuYyhvYmplY3Rba2V5XSxrZXkpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIF8uaXNBcnJheUxpa2VPYmplY3QoKSB7QGxpbmsgaHR0cHM6Ly9sb2Rhc2guY29tL2RvY3MvNC4xNy41I2lzQXJyYXlMaWtlT2JqZWN0fVxuICAgICAqIG9yIF8uaXNPYmplY3QoKSB7QGxpbmsgaHR0cHM6Ly9sb2Rhc2guY29tL2RvY3MvNC4xNy41I2lzT2JqZWN0fSBpbnN0ZWFkXG4gICAgKi9cbiAgICBwdWJsaWMgaXNPYmplY3QodmFsdWUpOiBib29sZWFuIHtcbiAgICAgIGNvbnNvbGUud2FybignQGRlcHJlY2F0ZWQgdXNlIF8uaXNBcnJheUxpa2VPYmplY3QoKSB7QGxpbmsgaHR0cHM6Ly9sb2Rhc2guY29tL2RvY3MvNC4xNy41I2lzQXJyYXlMaWtlT2JqZWN0fSBvciBfLmlzT2JqZWN0KCkge0BsaW5rIGh0dHBzOi8vbG9kYXNoLmNvbS9kb2NzLzQuMTcuNSNpc09iamVjdH0gaW5zdGVhZCcpO1xuICAgICAgcmV0dXJuIHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgIXRoaXMuaXNBcnJheSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICAqIEBkZXByZWNhdGVkIHVzZSBfLmlzU3RyaW5nKCkgaW5zdGVhZCB7QGxpbmsgaHR0cHM6Ly9sb2Rhc2guY29tL2RvY3MvNC4xNy41I2lzU3RyaW5nfVxuICAgICovXG4gICAgcHVibGljIGlzU3RyaW5nKHZhbHVlKTogYm9vbGVhbiB7XG4gICAgICBjb25zb2xlLndhcm4oJ0BkZXByZWNhdGVkIHVzZSBfLmlzU3RyaW5nKCkgaW5zdGVhZCB7QGxpbmsgaHR0cHM6Ly9sb2Rhc2guY29tL2RvY3MvNC4xNy41I2lzU3RyaW5nfScpO1xuICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgfHwgdmFsdWUgaW5zdGFuY2VvZiBTdHJpbmc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIF8uaXNBcnJheSgpIGluc3RlYWQge0BsaW5rIGh0dHBzOi8vbG9kYXNoLmNvbS9kb2NzLzQuMTcuNSNpc0FycmF5fVxuICAgICovXG4gICAgcHVibGljIGlzQXJyYXkodmFsdWUpOiBib29sZWFuIHtcbiAgICAgIGNvbnNvbGUud2FybignQGRlcHJlY2F0ZWQgdXNlIF8uaXNBcnJheSgpIGluc3RlYWQge0BsaW5rIGh0dHBzOi8vbG9kYXNoLmNvbS9kb2NzLzQuMTcuNSNpc0FycmF5fScpO1xuICAgICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgQXJyYXk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIGltcG9ydCB7IGlzTnVtZXJpYyB9IGZyb20gQGZpcmVzdGl0Y2gvY29tbW9uL3V0aWw7IGluc3RlYWRcbiAgICAqL1xuICAgIHB1YmxpYyBpc051bWVyaWModmFsdWUpOiBib29sZWFuIHtcbiAgICAgIGNvbnNvbGUud2FybignQGRlcHJlY2F0ZWQgdXNlIGltcG9ydCB7IGlzTnVtZXJpYyB9IGZyb20gQGZpcmVzdGl0Y2gvY29tbW9uL3V0aWw7IGluc3RlYWQnKTtcbiAgICAgIHJldHVybiB0aGlzLnN0cmluZyh2YWx1ZSkubGVuZ3RoICYmICEhdGhpcy5zdHJpbmcodmFsdWUpLm1hdGNoKC9eLT9cXGQqXFwuP1xcZCokLyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIGltcG9ydCB7IGlzQ2xhc3MgfSBmcm9tIEBmaXJlc3RpdGNoL2NvbW1vbi91dGlsOyBpbnN0ZWFkXG4gICAgKi9cbiAgICBwdWJsaWMgaXNDbGFzcyh2YWx1ZSwgY2xzKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignQGRlcHJlY2F0ZWQgdXNlIGltcG9ydCB7IGlzQ2xhc3MgfSBmcm9tIEBmaXJlc3RpdGNoL2NvbW1vbi91dGlsOyBpbnN0ZWFkJyk7XG4gICAgICAgIGlmICh0aGlzLmlzT2JqZWN0KHZhbHVlKSkge1xuXG4gICAgICAgICAgICBpZiAodGhpcy5pc1N0cmluZyhjbHMpKSB7XG5cbiAgICAgICAgICAgICAgICBpZiAodmFsdWUuY29uc3RydWN0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLmNvbnN0cnVjdG9yLm5hbWUgPT09IGNscykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBjbHMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAgKiBAZGVwcmVjYXRlZCB1c2UgXy5pc0Jvb2xlYW4oKSBpbnN0ZWFkIHtAbGluayBodHRwczovL2xvZGFzaC5jb20vZG9jcy80LjE3LjUjaXNCb29sZWFufVxuICAgICovXG4gICAgcHVibGljIGlzQm9vbGVhbih2YWx1ZSk6IGJvb2xlYW4ge1xuICAgICAgY29uc29sZS53YXJuKCdAZGVwcmVjYXRlZCB1c2UgXy5pc0Jvb2xlYW4oKSBpbnN0ZWFkIHtAbGluayBodHRwczovL2xvZGFzaC5jb20vZG9jcy80LjE3LjUjaXNCb29sZWFufScpO1xuICAgICAgcmV0dXJuIHZhbHVlID09PSB0cnVlIHx8IHZhbHVlID09PSBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCB1c2UgaW1wb3J0IHsgdmFsdWUgfSBmcm9tIEBmaXJlc3RpdGNoL2NvbW1vbi91dGlsOyBpbnN0ZWFkXG4gICAgKi9cbiAgICBwdWJsaWMgdmFsdWUob2JqZWN0LCBrZXksIGRlZik6IGFueSB7XG4gICAgICBjb25zb2xlLndhcm4oJ0BkZXByZWNhdGVkIHVzZSBpbXBvcnQgeyB2YWx1ZSB9IGZyb20gQGZpcmVzdGl0Y2gvY29tbW9uL3V0aWw7IGluc3RlYWQnKTtcbiAgICAgICAgaWYgKHRoaXMuaXNPYmplY3Qob2JqZWN0KSB8fCB0aGlzLmlzQXJyYXkob2JqZWN0KSkge1xuXG4gICAgICAgICAgICBpZiAob2JqZWN0Lmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0W2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGVmO1xuICAgIH1cblxuICAgIHB1YmxpYyB0aHJvdHRsZShmdW5jLCB3YWl0KSB7XG4gICAgICBjb25zb2xlLndhcm4oJ0BkZXByZWNhdGVkIHVzZSBpbXBvcnQgeyB0aHJvdHRsZSB9IGZyb20gQGZpcmVzdGl0Y2gvY29tbW9uL3V0aWw7IGluc3RlYWQnKTtcbiAgICAgIGxldCB3YWl0aW5nID0gZmFsc2U7ICAgICAgICAgICAgICAgICAgXHQvLyBJbml0aWFsbHksIHdlJ3JlIG5vdCB3YWl0aW5nXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7ICAgICAgICAgICAgICAgXHRcdC8vIFdlIHJldHVybiBhIHRocm90dGxlZCBmdW5jdGlvblxuICAgICAgICAgICAgaWYgKCF3YWl0aW5nKSB7ICAgICAgICAgICAgICAgICAgIFx0Ly8gSWYgd2UncmUgbm90IHdhaXRpbmdcbiAgICAgICAgICAgICAgICBmdW5jLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7ICAgICAvLyBFeGVjdXRlIHVzZXJzIGZ1bmN0aW9uXG4gICAgICAgICAgICAgICAgd2FpdGluZyA9IHRydWU7ICAgICAgICAgICAgICAgXHQvLyBQcmV2ZW50IGZ1dHVyZSBpbnZvY2F0aW9uc1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyAgIFx0XHQvLyBBZnRlciBhIHBlcmlvZCBvZiB0aW1lXG4gICAgICAgICAgICAgICAgICAgIHdhaXRpbmcgPSBmYWxzZTsgICAgICAgICAgXHQvLyBBbmQgYWxsb3cgZnV0dXJlIGludm9jYXRpb25zXG4gICAgICAgICAgICAgICAgfSwgd2FpdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCB1c2UgaW1wb3J0IHsgZGVib3VuY2UgfSBmcm9tIEBmaXJlc3RpdGNoL2NvbW1vbi91dGlsOyBpbnN0ZWFkXG4gICAgKi9cbiAgICBwdWJsaWMgZGVib3VuY2UoZnVuYywgd2FpdCwgaW1tZWRpYXRlKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ0BkZXByZWNhdGVkIHVzZSBpbXBvcnQgeyBkZWJvdW5jZSB9IGZyb20gQGZpcmVzdGl0Y2gvY29tbW9uL3V0aWw7IGluc3RlYWQnKTtcbiAgICAgIHZhciB0aW1lb3V0O1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGNvbnRleHQgPSB0aGlzLCBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgICAgICAgdmFyIGxhdGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBudWxsO1xuICAgICAgICAgICAgICAgIGlmICghaW1tZWRpYXRlKSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHZhciBjYWxsTm93ID0gaW1tZWRpYXRlICYmICF0aW1lb3V0O1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQobGF0ZXIsIHdhaXQpO1xuICAgICAgICAgICAgaWYgKGNhbGxOb3cpIGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIGltcG9ydCB7IGxlbmd0aCB9IGZyb20gQGZpcmVzdGl0Y2gvY29tbW9uL3V0aWw7IGluc3RlYWRcbiAgICAqL1xuICAgIHB1YmxpYyBsZW5ndGgob2JqZWN0KTogbnVtYmVyIHtcbiAgICAgIGNvbnNvbGUud2FybignQGRlcHJlY2F0ZWQgdXNlIGltcG9ydCB7IGxlbmd0aCB9IGZyb20gQGZpcmVzdGl0Y2gvY29tbW9uL3V0aWw7IGluc3RlYWQnKTtcbiAgICAgIGlmICh0aGlzLmlzT2JqZWN0KG9iamVjdCkpIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmplY3QpLmxlbmd0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmlzQXJyYXkob2JqZWN0KSkge1xuICAgICAgICAgICAgcmV0dXJuIG9iamVjdC5sZW5ndGg7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCB1c2UgaW1wb3J0IHsgYm9vbGVhbiB9IGZyb20gQGZpcmVzdGl0Y2gvY29tbW9uL3V0aWw7IGluc3RlYWRcbiAgICAqL1xuICAgIHB1YmxpYyBib29sZWFuKHZhbHVlKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ0BkZXByZWNhdGVkIHVzZSBpbXBvcnQgeyBib29sZWFuIH0gZnJvbSBAZmlyZXN0aXRjaC9jb21tb24vdXRpbDsgaW5zdGVhZCcpO1xuICAgICAgcmV0dXJuIHRoaXMuc3RyaW5nKHZhbHVlKS50b0xvd2VyQ2FzZSgpICE9PSAnZmFsc2UnICYmICEhdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIGltcG9ydCB7IHN0cmluZ2lmeSB9IGZyb20gQGZpcmVzdGl0Y2gvY29tbW9uL3V0aWw7IGluc3RlYWRcbiAgICAqL1xuICAgIHB1YmxpYyBzdHJpbmdpZnkodmFsdWUpIHtcbiAgICAgIGNvbnNvbGUud2FybignQGRlcHJlY2F0ZWQgdXNlIGltcG9ydCB7IHN0cmluZ2lmeSB9IGZyb20gQGZpcmVzdGl0Y2gvY29tbW9uL3V0aWw7IGluc3RlYWQnKTtcbiAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgfVxufVxuIl19