@mtgame/core 0.1.58 → 0.1.60

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 (332) hide show
  1. package/bundles/mtgame-core.umd.js +4109 -4076
  2. package/bundles/mtgame-core.umd.js.map +1 -1
  3. package/esm2015/api/basketball-game-api.js +8 -9
  4. package/esm2015/api/feedback-api.js +8 -9
  5. package/esm2015/api/file-api.js +8 -9
  6. package/esm2015/api/football-game-api.js +8 -9
  7. package/esm2015/api/game-base-api.js +8 -9
  8. package/esm2015/api/handball-game-api.js +8 -9
  9. package/esm2015/api/hockey-game-api.js +8 -9
  10. package/esm2015/api/league-api.js +8 -9
  11. package/esm2015/api/league-news-api.js +8 -9
  12. package/esm2015/api/league-player-api.js +7 -9
  13. package/esm2015/api/media-api.js +8 -9
  14. package/esm2015/api/notification-api.js +6 -8
  15. package/esm2015/api/notification-base-api.js +8 -9
  16. package/esm2015/api/org-notification-api.js +6 -8
  17. package/esm2015/api/paginated-response.interface.js +2 -1
  18. package/esm2015/api/public-api.js +2 -1
  19. package/esm2015/api/public-team-api.js +7 -9
  20. package/esm2015/api/public-user-api.js +7 -9
  21. package/esm2015/api/reference-api.js +8 -9
  22. package/esm2015/api/rugby-game-api.js +8 -9
  23. package/esm2015/api/team-api.js +9 -10
  24. package/esm2015/api/team-event-api.js +8 -9
  25. package/esm2015/api/tournament-api.js +8 -9
  26. package/esm2015/api/tournament-join-api.js +8 -9
  27. package/esm2015/api/tournament-season-api.js +8 -9
  28. package/esm2015/api/tournament-stage-api.js +8 -9
  29. package/esm2015/api/user-api.js +8 -9
  30. package/esm2015/api/volleyball-game-api.js +8 -9
  31. package/esm2015/http-cookie.interceptor.js +6 -9
  32. package/esm2015/localization/basketball-game-log-types.js +1 -1
  33. package/esm2015/localization/football-game-log-types.js +1 -1
  34. package/esm2015/localization/handball-game-log-types.js +1 -1
  35. package/esm2015/localization/hockey-game-log-types.js +1 -1
  36. package/esm2015/localization/hockey-penalty-types.js +1 -1
  37. package/esm2015/localization/overtime-types.js +1 -1
  38. package/esm2015/localization/public-api.js +1 -1
  39. package/esm2015/localization/rugby-foul-sanction.js +1 -1
  40. package/esm2015/localization/rugby-game-log-types.js +1 -1
  41. package/esm2015/localization/team-event-type.js +1 -1
  42. package/esm2015/localization/team-user-role.js +1 -1
  43. package/esm2015/localization/user-profile.js +1 -1
  44. package/esm2015/localization/volleyball-game-log-types.js +1 -1
  45. package/esm2015/models/base-statistic.js +2 -1
  46. package/esm2015/models/basketball-game-config.js +1 -1
  47. package/esm2015/models/basketball-game-log.js +1 -1
  48. package/esm2015/models/basketball-game-statistic.js +1 -1
  49. package/esm2015/models/basketball-game-team-statistic.js +1 -1
  50. package/esm2015/models/basketball-profile.js +1 -1
  51. package/esm2015/models/basketball-statistic.js +1 -1
  52. package/esm2015/models/city.js +1 -1
  53. package/esm2015/models/feedback.js +1 -1
  54. package/esm2015/models/file.js +1 -1
  55. package/esm2015/models/football-game-config.js +1 -1
  56. package/esm2015/models/football-game-log.js +1 -1
  57. package/esm2015/models/football-game-statistic.js +1 -1
  58. package/esm2015/models/football-game-team-statistic.js +1 -1
  59. package/esm2015/models/football-profile.js +1 -1
  60. package/esm2015/models/football-statistic.js +1 -1
  61. package/esm2015/models/game-invite.js +1 -1
  62. package/esm2015/models/game-log-base.js +2 -1
  63. package/esm2015/models/game-statistic-base.js +2 -1
  64. package/esm2015/models/game-team-statistic-base.js +2 -1
  65. package/esm2015/models/game-timeline-stages.js +1 -1
  66. package/esm2015/models/game-user-limitation.js +1 -1
  67. package/esm2015/models/game-user.js +1 -1
  68. package/esm2015/models/game.js +1 -1
  69. package/esm2015/models/handball-game-config.js +1 -1
  70. package/esm2015/models/handball-game-log.js +1 -1
  71. package/esm2015/models/handball-game-statistic.js +1 -1
  72. package/esm2015/models/handball-game-team-statistic.js +1 -1
  73. package/esm2015/models/handball-profile.js +1 -1
  74. package/esm2015/models/handball-statistic.js +1 -1
  75. package/esm2015/models/hockey-game-config.js +1 -1
  76. package/esm2015/models/hockey-game-log.js +1 -1
  77. package/esm2015/models/hockey-game-statistic.js +1 -1
  78. package/esm2015/models/hockey-game-team-statistic.js +1 -1
  79. package/esm2015/models/hockey-profile.js +1 -1
  80. package/esm2015/models/hockey-statistic.js +1 -1
  81. package/esm2015/models/league-banner.js +1 -1
  82. package/esm2015/models/league-court.js +1 -1
  83. package/esm2015/models/league-document.js +1 -1
  84. package/esm2015/models/league-news.js +1 -1
  85. package/esm2015/models/league-partner.js +1 -1
  86. package/esm2015/models/league-player.js +1 -1
  87. package/esm2015/models/league-playlist.js +1 -1
  88. package/esm2015/models/league-user.js +1 -1
  89. package/esm2015/models/league.js +1 -1
  90. package/esm2015/models/media-item.js +1 -1
  91. package/esm2015/models/notification-settings.js +1 -1
  92. package/esm2015/models/notification.js +1 -1
  93. package/esm2015/models/organization.js +1 -1
  94. package/esm2015/models/playoff.js +1 -1
  95. package/esm2015/models/poll.js +1 -1
  96. package/esm2015/models/public-api.js +5 -1
  97. package/esm2015/models/rugby-foul-type.js +1 -1
  98. package/esm2015/models/rugby-game-config.js +1 -1
  99. package/esm2015/models/rugby-game-log.js +2 -2
  100. package/esm2015/models/rugby-game-statistic.js +1 -1
  101. package/esm2015/models/rugby-game-team-statistic.js +1 -1
  102. package/esm2015/models/rugby-profile.js +1 -1
  103. package/esm2015/models/rugby-statistic.js +1 -1
  104. package/esm2015/models/sport.js +1 -1
  105. package/esm2015/models/team-access.js +1 -1
  106. package/esm2015/models/team-event-invite.js +1 -1
  107. package/esm2015/models/team-event-type.js +1 -1
  108. package/esm2015/models/team-event.js +1 -1
  109. package/esm2015/models/team-invite-external.js +1 -1
  110. package/esm2015/models/team-invite.js +1 -1
  111. package/esm2015/models/team-permission.js +1 -1
  112. package/esm2015/models/team-user.js +1 -1
  113. package/esm2015/models/team.js +1 -1
  114. package/esm2015/models/tournament-disqualification.js +1 -1
  115. package/esm2015/models/tournament-event.js +1 -1
  116. package/esm2015/models/tournament-group.js +1 -1
  117. package/esm2015/models/tournament-invite.js +1 -1
  118. package/esm2015/models/tournament-join-team.js +1 -1
  119. package/esm2015/models/tournament-news.js +1 -1
  120. package/esm2015/models/tournament-season.js +1 -1
  121. package/esm2015/models/tournament-stage-team.js +1 -1
  122. package/esm2015/models/tournament-stage.js +1 -1
  123. package/esm2015/models/tournament-team-user-invite.js +1 -1
  124. package/esm2015/models/tournament-team-user.js +1 -1
  125. package/esm2015/models/tournament-team.js +1 -1
  126. package/esm2015/models/tournament.js +1 -1
  127. package/esm2015/models/user-access.js +1 -1
  128. package/esm2015/models/user-permission.js +1 -1
  129. package/esm2015/models/user-profile.js +1 -1
  130. package/esm2015/models/user.js +1 -1
  131. package/esm2015/models/util.js +1 -1
  132. package/esm2015/models/volleyball-game-config.js +1 -1
  133. package/esm2015/models/volleyball-game-log.js +1 -1
  134. package/esm2015/models/volleyball-game-statistic.js +1 -1
  135. package/esm2015/models/volleyball-game-team-statistic.js +1 -1
  136. package/esm2015/models/volleyball-profile.js +1 -1
  137. package/esm2015/models/volleyball-statistic.js +1 -1
  138. package/esm2015/mtgame-core.js +1 -1
  139. package/esm2015/public-api.js +1 -1
  140. package/esm2015/services/base.service.js +6 -8
  141. package/esm2015/services/centrifugo.service.js +7 -9
  142. package/esm2015/services/config.service.js +7 -10
  143. package/esm2015/services/public-api.js +1 -1
  144. package/esm2015/storage/local-storage-engine.js +1 -1
  145. package/esm2015/storage/public-api.js +1 -1
  146. package/esm2015/storage/storage-engine.js +1 -1
  147. package/esm2015/storage/store.js +1 -1
  148. package/esm2015/utils/array.js +1 -1
  149. package/esm2015/utils/component-destroyed.js +12 -8
  150. package/esm2015/utils/cookie.js +1 -1
  151. package/esm2015/utils/data.js +1 -1
  152. package/esm2015/utils/device.js +1 -1
  153. package/esm2015/utils/enum.js +1 -1
  154. package/esm2015/utils/errors.js +1 -1
  155. package/esm2015/utils/favicon.js +1 -1
  156. package/esm2015/utils/form.js +1 -1
  157. package/esm2015/utils/public-api.js +1 -1
  158. package/esm2015/utils/validators.js +1 -1
  159. package/fesm2015/mtgame-core.js +195 -191
  160. package/fesm2015/mtgame-core.js.map +1 -1
  161. package/localization/basketball-game-log-types.d.ts +0 -1
  162. package/localization/football-game-log-types.d.ts +0 -1
  163. package/localization/handball-game-log-types.d.ts +0 -1
  164. package/localization/hockey-game-log-types.d.ts +0 -1
  165. package/localization/overtime-types.d.ts +0 -1
  166. package/localization/rugby-foul-sanction.d.ts +0 -1
  167. package/localization/rugby-game-log-types.d.ts +0 -1
  168. package/localization/team-event-type.d.ts +0 -1
  169. package/localization/team-user-role.d.ts +0 -1
  170. package/localization/user-profile.d.ts +0 -6
  171. package/localization/volleyball-game-log-types.d.ts +0 -1
  172. package/package.json +9 -11
  173. package/bundles/mtgame-core.umd.min.js +0 -16
  174. package/bundles/mtgame-core.umd.min.js.map +0 -1
  175. package/esm5/api/basketball-game-api.js +0 -77
  176. package/esm5/api/feedback-api.js +0 -44
  177. package/esm5/api/file-api.js +0 -68
  178. package/esm5/api/football-game-api.js +0 -81
  179. package/esm5/api/game-base-api.js +0 -58
  180. package/esm5/api/handball-game-api.js +0 -81
  181. package/esm5/api/hockey-game-api.js +0 -81
  182. package/esm5/api/league-api.js +0 -168
  183. package/esm5/api/league-news-api.js +0 -82
  184. package/esm5/api/league-player-api.js +0 -37
  185. package/esm5/api/media-api.js +0 -149
  186. package/esm5/api/notification-api.js +0 -21
  187. package/esm5/api/notification-base-api.js +0 -109
  188. package/esm5/api/org-notification-api.js +0 -21
  189. package/esm5/api/paginated-response.interface.js +0 -1
  190. package/esm5/api/public-api.js +0 -27
  191. package/esm5/api/public-team-api.js +0 -34
  192. package/esm5/api/public-user-api.js +0 -44
  193. package/esm5/api/reference-api.js +0 -45
  194. package/esm5/api/rugby-game-api.js +0 -79
  195. package/esm5/api/team-api.js +0 -486
  196. package/esm5/api/team-event-api.js +0 -96
  197. package/esm5/api/tournament-api.js +0 -543
  198. package/esm5/api/tournament-join-api.js +0 -59
  199. package/esm5/api/tournament-season-api.js +0 -134
  200. package/esm5/api/tournament-stage-api.js +0 -65
  201. package/esm5/api/user-api.js +0 -350
  202. package/esm5/api/volleyball-game-api.js +0 -81
  203. package/esm5/http-cookie.interceptor.js +0 -41
  204. package/esm5/localization/basketball-game-log-types.js +0 -28
  205. package/esm5/localization/football-game-log-types.js +0 -34
  206. package/esm5/localization/handball-game-log-types.js +0 -25
  207. package/esm5/localization/hockey-game-log-types.js +0 -31
  208. package/esm5/localization/hockey-penalty-types.js +0 -50
  209. package/esm5/localization/overtime-types.js +0 -14
  210. package/esm5/localization/public-api.js +0 -13
  211. package/esm5/localization/rugby-foul-sanction.js +0 -11
  212. package/esm5/localization/rugby-game-log-types.js +0 -41
  213. package/esm5/localization/team-event-type.js +0 -7
  214. package/esm5/localization/team-user-role.js +0 -15
  215. package/esm5/localization/user-profile.js +0 -82
  216. package/esm5/localization/volleyball-game-log-types.js +0 -27
  217. package/esm5/models/base-statistic.js +0 -1
  218. package/esm5/models/basketball-game-config.js +0 -44
  219. package/esm5/models/basketball-game-log.js +0 -118
  220. package/esm5/models/basketball-game-statistic.js +0 -63
  221. package/esm5/models/basketball-game-team-statistic.js +0 -32
  222. package/esm5/models/basketball-profile.js +0 -48
  223. package/esm5/models/basketball-statistic.js +0 -97
  224. package/esm5/models/city.js +0 -27
  225. package/esm5/models/feedback.js +0 -37
  226. package/esm5/models/file.js +0 -65
  227. package/esm5/models/football-game-config.js +0 -53
  228. package/esm5/models/football-game-log.js +0 -111
  229. package/esm5/models/football-game-statistic.js +0 -213
  230. package/esm5/models/football-game-team-statistic.js +0 -32
  231. package/esm5/models/football-profile.js +0 -48
  232. package/esm5/models/football-statistic.js +0 -174
  233. package/esm5/models/game-invite.js +0 -42
  234. package/esm5/models/game-log-base.js +0 -1
  235. package/esm5/models/game-statistic-base.js +0 -1
  236. package/esm5/models/game-team-statistic-base.js +0 -1
  237. package/esm5/models/game-timeline-stages.js +0 -60
  238. package/esm5/models/game-user-limitation.js +0 -59
  239. package/esm5/models/game-user.js +0 -38
  240. package/esm5/models/game.js +0 -286
  241. package/esm5/models/handball-game-config.js +0 -39
  242. package/esm5/models/handball-game-log.js +0 -99
  243. package/esm5/models/handball-game-statistic.js +0 -162
  244. package/esm5/models/handball-game-team-statistic.js +0 -32
  245. package/esm5/models/handball-profile.js +0 -44
  246. package/esm5/models/handball-statistic.js +0 -105
  247. package/esm5/models/hockey-game-config.js +0 -61
  248. package/esm5/models/hockey-game-log.js +0 -135
  249. package/esm5/models/hockey-game-statistic.js +0 -223
  250. package/esm5/models/hockey-game-team-statistic.js +0 -32
  251. package/esm5/models/hockey-profile.js +0 -46
  252. package/esm5/models/hockey-statistic.js +0 -144
  253. package/esm5/models/league-banner.js +0 -44
  254. package/esm5/models/league-court.js +0 -29
  255. package/esm5/models/league-document.js +0 -31
  256. package/esm5/models/league-news.js +0 -55
  257. package/esm5/models/league-partner.js +0 -34
  258. package/esm5/models/league-player.js +0 -77
  259. package/esm5/models/league-playlist.js +0 -33
  260. package/esm5/models/league-user.js +0 -61
  261. package/esm5/models/league.js +0 -95
  262. package/esm5/models/media-item.js +0 -50
  263. package/esm5/models/notification-settings.js +0 -40
  264. package/esm5/models/notification.js +0 -143
  265. package/esm5/models/organization.js +0 -32
  266. package/esm5/models/playoff.js +0 -102
  267. package/esm5/models/poll.js +0 -154
  268. package/esm5/models/public-api.js +0 -88
  269. package/esm5/models/rugby-foul-type.js +0 -40
  270. package/esm5/models/rugby-game-config.js +0 -51
  271. package/esm5/models/rugby-game-log.js +0 -143
  272. package/esm5/models/rugby-game-statistic.js +0 -68
  273. package/esm5/models/rugby-game-team-statistic.js +0 -32
  274. package/esm5/models/rugby-profile.js +0 -42
  275. package/esm5/models/rugby-statistic.js +0 -119
  276. package/esm5/models/sport.js +0 -104
  277. package/esm5/models/team-access.js +0 -50
  278. package/esm5/models/team-event-invite.js +0 -35
  279. package/esm5/models/team-event-type.js +0 -6
  280. package/esm5/models/team-event.js +0 -58
  281. package/esm5/models/team-invite-external.js +0 -30
  282. package/esm5/models/team-invite.js +0 -46
  283. package/esm5/models/team-permission.js +0 -43
  284. package/esm5/models/team-user.js +0 -53
  285. package/esm5/models/team.js +0 -70
  286. package/esm5/models/tournament-disqualification.js +0 -34
  287. package/esm5/models/tournament-event.js +0 -50
  288. package/esm5/models/tournament-group.js +0 -29
  289. package/esm5/models/tournament-invite.js +0 -48
  290. package/esm5/models/tournament-join-team.js +0 -73
  291. package/esm5/models/tournament-news.js +0 -38
  292. package/esm5/models/tournament-season.js +0 -50
  293. package/esm5/models/tournament-stage-team.js +0 -54
  294. package/esm5/models/tournament-stage.js +0 -40
  295. package/esm5/models/tournament-team-user-invite.js +0 -34
  296. package/esm5/models/tournament-team-user.js +0 -41
  297. package/esm5/models/tournament-team.js +0 -80
  298. package/esm5/models/tournament.js +0 -234
  299. package/esm5/models/user-access.js +0 -30
  300. package/esm5/models/user-permission.js +0 -43
  301. package/esm5/models/user-profile.js +0 -27
  302. package/esm5/models/user.js +0 -107
  303. package/esm5/models/util.js +0 -298
  304. package/esm5/models/volleyball-game-config.js +0 -53
  305. package/esm5/models/volleyball-game-log.js +0 -145
  306. package/esm5/models/volleyball-game-statistic.js +0 -72
  307. package/esm5/models/volleyball-game-team-statistic.js +0 -32
  308. package/esm5/models/volleyball-profile.js +0 -48
  309. package/esm5/models/volleyball-statistic.js +0 -89
  310. package/esm5/mtgame-core.js +0 -5
  311. package/esm5/public-api.js +0 -8
  312. package/esm5/services/base.service.js +0 -19
  313. package/esm5/services/centrifugo.service.js +0 -122
  314. package/esm5/services/config.service.js +0 -52
  315. package/esm5/services/public-api.js +0 -4
  316. package/esm5/storage/local-storage-engine.js +0 -25
  317. package/esm5/storage/public-api.js +0 -4
  318. package/esm5/storage/storage-engine.js +0 -77
  319. package/esm5/storage/store.js +0 -77
  320. package/esm5/utils/array.js +0 -18
  321. package/esm5/utils/component-destroyed.js +0 -21
  322. package/esm5/utils/cookie.js +0 -9
  323. package/esm5/utils/data.js +0 -79
  324. package/esm5/utils/device.js +0 -14
  325. package/esm5/utils/enum.js +0 -7
  326. package/esm5/utils/errors.js +0 -12
  327. package/esm5/utils/favicon.js +0 -47
  328. package/esm5/utils/form.js +0 -22
  329. package/esm5/utils/public-api.js +0 -11
  330. package/esm5/utils/validators.js +0 -49
  331. package/fesm5/mtgame-core.js +0 -9819
  332. package/fesm5/mtgame-core.js.map +0 -1
@@ -1,486 +0,0 @@
1
- import { __awaiter, __decorate, __generator } from "tslib";
2
- import { Injectable } from '@angular/core';
3
- import { HttpClient, HttpParams, HttpResponse } from '@angular/common/http';
4
- import { Team } from '../models/team';
5
- import { map } from 'rxjs/operators';
6
- import { TeamUser, TeamUserRole } from '../models/team-user';
7
- import { User } from '../models/user';
8
- import { TeamInvite } from '../models/team-invite';
9
- import { TeamInviteExternal } from '../models/team-invite-external';
10
- import { Poll } from '../models/poll';
11
- import { VolleyballStatistic } from '../models/volleyball-statistic';
12
- import { Game } from '../models/game';
13
- import { TeamEvent } from '../models/team-event';
14
- import { Tournament } from '../models/tournament';
15
- import { TournamentTeam } from '../models/tournament-team';
16
- import { TournamentInvite } from '../models/tournament-invite';
17
- import { BasketballStatistic } from '../models/basketball-statistic';
18
- import { TeamPermission } from '../models/team-permission';
19
- import { TeamAccess } from '../models/team-access';
20
- import { ConfigService } from '../services/config.service';
21
- import * as i0 from "@angular/core";
22
- import * as i1 from "@angular/common/http";
23
- import * as i2 from "../services/config.service";
24
- var TeamApi = /** @class */ (function () {
25
- function TeamApi(httpClient, configService) {
26
- this.httpClient = httpClient;
27
- this.configService = configService;
28
- }
29
- TeamApi.prototype.search = function (query, sportId) {
30
- return __awaiter(this, void 0, void 0, function () {
31
- var params;
32
- return __generator(this, function (_a) {
33
- params = (new HttpParams()).set('search', query);
34
- if (sportId) {
35
- params = params.set('sport', sportId.toString());
36
- }
37
- return [2 /*return*/, this.httpClient
38
- .get(this.configService.get('apiUrl') + "/api/v1/team/", { params: params })
39
- .pipe(map(function (data) { return Team.toFront(data); }))
40
- .toPromise()];
41
- });
42
- });
43
- };
44
- TeamApi.prototype.create = function (team) {
45
- return __awaiter(this, void 0, void 0, function () {
46
- return __generator(this, function (_a) {
47
- return [2 /*return*/, this.httpClient
48
- .post(this.configService.get('apiUrl') + "/api/v1/team/", Team.toBack(team))
49
- .pipe(map(function (data) { return Team.toFront(data); }))
50
- .toPromise()];
51
- });
52
- });
53
- };
54
- TeamApi.prototype.getById = function (teamId) {
55
- return __awaiter(this, void 0, void 0, function () {
56
- return __generator(this, function (_a) {
57
- return [2 /*return*/, this.httpClient
58
- .get(this.configService.get('apiUrl') + "/api/v1/team/" + teamId + "/")
59
- .pipe(map(function (data) { return Team.toFront(data); }))
60
- .toPromise()];
61
- });
62
- });
63
- };
64
- TeamApi.prototype.getTeamAccess = function (teamId) {
65
- return __awaiter(this, void 0, void 0, function () {
66
- return __generator(this, function (_a) {
67
- return [2 /*return*/, this.httpClient
68
- .get(this.configService.get('apiUrl') + "/api/v1/team/" + teamId + "/access/")
69
- .pipe(map(function (data) { return TeamAccess.toFront(data); }))
70
- .toPromise()];
71
- });
72
- });
73
- };
74
- TeamApi.prototype.update = function (teamId, values) {
75
- return __awaiter(this, void 0, void 0, function () {
76
- return __generator(this, function (_a) {
77
- return [2 /*return*/, this.httpClient
78
- .patch(this.configService.get('apiUrl') + "/api/v1/team/" + teamId + "/", Team.toBack(values))
79
- .pipe(map(function (data) { return Team.toFront(data); }))
80
- .toPromise()];
81
- });
82
- });
83
- };
84
- TeamApi.prototype.delete = function (team) {
85
- return __awaiter(this, void 0, void 0, function () {
86
- return __generator(this, function (_a) {
87
- return [2 /*return*/, this.httpClient
88
- .delete(this.configService.get('apiUrl') + "/api/v1/team/" + team.id + "/")
89
- .toPromise()];
90
- });
91
- });
92
- };
93
- TeamApi.prototype.getPermission = function (teamId) {
94
- return __awaiter(this, void 0, void 0, function () {
95
- return __generator(this, function (_a) {
96
- return [2 /*return*/, this.httpClient
97
- .get(this.configService.get('apiUrl') + "/api/v1/team/" + teamId + "/permission/")
98
- .pipe(map(function (data) { return TeamPermission.toFront(data); }))
99
- .toPromise()];
100
- });
101
- });
102
- };
103
- TeamApi.prototype.updatePermission = function (teamId, permission) {
104
- return __awaiter(this, void 0, void 0, function () {
105
- return __generator(this, function (_a) {
106
- return [2 /*return*/, this.httpClient
107
- .patch(this.configService.get('apiUrl') + "/api/v1/team/" + teamId + "/permission/", TeamPermission.toBack(permission))
108
- .pipe(map(function (data) { return TeamPermission.toFront(data); }))
109
- .toPromise()];
110
- });
111
- });
112
- };
113
- TeamApi.prototype.getUsers = function (teamId, tournamentId) {
114
- return __awaiter(this, void 0, void 0, function () {
115
- var params;
116
- return __generator(this, function (_a) {
117
- params = new HttpParams();
118
- if (tournamentId) {
119
- params = params.set('tournament_id', tournamentId.toString());
120
- }
121
- return [2 /*return*/, this.httpClient
122
- .get(this.configService.get('apiUrl') + "/api/v1/team/" + teamId + "/users/", { params: params })
123
- .pipe(map(function (data) { return TeamUser.toFront(data); }))
124
- .toPromise()];
125
- });
126
- });
127
- };
128
- TeamApi.prototype.updateUserRole = function (teamId, teamUserId, role) {
129
- return __awaiter(this, void 0, void 0, function () {
130
- return __generator(this, function (_a) {
131
- return [2 /*return*/, this.httpClient
132
- .patch(this.configService.get('apiUrl') + "/api/v1/team/" + teamId + "/users/" + teamUserId + "/role/", { role: TeamUserRole[role] })
133
- .pipe(map(function (data) { return TeamUser.toFront(data); }))
134
- .toPromise()];
135
- });
136
- });
137
- };
138
- TeamApi.prototype.updateUserNumber = function (teamId, teamUserId, gameNumber) {
139
- return __awaiter(this, void 0, void 0, function () {
140
- return __generator(this, function (_a) {
141
- return [2 /*return*/, this.httpClient
142
- .patch(this.configService.get('apiUrl') + "/api/v1/team/" + teamId + "/users/" + teamUserId + "/number/", { number: gameNumber.toString() })
143
- .pipe(map(function (data) { return TeamUser.toFront(data); }))
144
- .toPromise()];
145
- });
146
- });
147
- };
148
- TeamApi.prototype.deleteUser = function (teamUser) {
149
- return __awaiter(this, void 0, void 0, function () {
150
- return __generator(this, function (_a) {
151
- return [2 /*return*/, this.httpClient
152
- .delete(this.configService.get('apiUrl') + "/api/v1/team/" + teamUser.teamId + "/users/" + teamUser.id + "/")
153
- .toPromise()];
154
- });
155
- });
156
- };
157
- TeamApi.prototype.changeOwner = function (teamId, user) {
158
- return __awaiter(this, void 0, void 0, function () {
159
- return __generator(this, function (_a) {
160
- return [2 /*return*/, this.httpClient
161
- .post(this.configService.get('apiUrl') + "/api/v1/team/" + teamId + "/owner/", { id: user.id })
162
- .pipe(map(function (data) { return Team.toFront(data); }))
163
- .toPromise()];
164
- });
165
- });
166
- };
167
- TeamApi.prototype.getInvites = function (teamId) {
168
- return __awaiter(this, void 0, void 0, function () {
169
- return __generator(this, function (_a) {
170
- return [2 /*return*/, this.httpClient
171
- .get(this.configService.get('apiUrl') + "/api/v1/team/" + teamId + "/invites/")
172
- .pipe(map(function (data) { return TeamInvite.toFront(data); }))
173
- .toPromise()];
174
- });
175
- });
176
- };
177
- TeamApi.prototype.sendInvite = function (teamId, user) {
178
- return __awaiter(this, void 0, void 0, function () {
179
- return __generator(this, function (_a) {
180
- return [2 /*return*/, this.httpClient
181
- .post(this.configService.get('apiUrl') + "/api/v1/team/" + teamId + "/invites/", { user: user })
182
- .pipe(map(function (data) { return TeamInvite.toFront(data); }))
183
- .toPromise()];
184
- });
185
- });
186
- };
187
- TeamApi.prototype.acceptInvite = function (invite) {
188
- return __awaiter(this, void 0, void 0, function () {
189
- return __generator(this, function (_a) {
190
- return [2 /*return*/, this.httpClient
191
- .post(this.configService.get('apiUrl') + "/api/v1/team_invite/" + invite.id + "/accept/", {})
192
- .pipe(map(function (data) { return TeamInvite.toFront(data); }))
193
- .toPromise()];
194
- });
195
- });
196
- };
197
- TeamApi.prototype.declineInvite = function (invite) {
198
- return __awaiter(this, void 0, void 0, function () {
199
- return __generator(this, function (_a) {
200
- return [2 /*return*/, this.httpClient
201
- .post(this.configService.get('apiUrl') + "/api/v1/team_invite/" + invite.id + "/decline/", {})
202
- .pipe(map(function (data) { return TeamInvite.toFront(data); }))
203
- .toPromise()];
204
- });
205
- });
206
- };
207
- TeamApi.prototype.resendInvite = function (invite) {
208
- return __awaiter(this, void 0, void 0, function () {
209
- return __generator(this, function (_a) {
210
- return [2 /*return*/, this.httpClient
211
- .post(this.configService.get('apiUrl') + "/api/v1/team_invite/" + invite.id + "/resend/", {})
212
- .pipe(map(function (data) { return TeamInvite.toFront(data); }))
213
- .toPromise()];
214
- });
215
- });
216
- };
217
- TeamApi.prototype.getInvitesExternal = function (teamId) {
218
- return __awaiter(this, void 0, void 0, function () {
219
- return __generator(this, function (_a) {
220
- return [2 /*return*/, this.httpClient
221
- .get(this.configService.get('apiUrl') + "/api/v1/team/" + teamId + "/invites_external/")
222
- .pipe(map(function (data) { return TeamInviteExternal.toFront(data); }))
223
- .toPromise()];
224
- });
225
- });
226
- };
227
- TeamApi.prototype.sendInviteExternal = function (teamId, invite) {
228
- return __awaiter(this, void 0, void 0, function () {
229
- return __generator(this, function (_a) {
230
- return [2 /*return*/, this.httpClient
231
- .post(this.configService.get('apiUrl') + "/api/v1/team/" + teamId + "/invites_external/", TeamInviteExternal.toBack(invite))
232
- .pipe(map(function (data) { return TeamInviteExternal.toFront(data); }))
233
- .toPromise()];
234
- });
235
- });
236
- };
237
- TeamApi.prototype.deleteInviteExternal = function (invite) {
238
- return __awaiter(this, void 0, void 0, function () {
239
- return __generator(this, function (_a) {
240
- return [2 /*return*/, this.httpClient
241
- .delete(this.configService.get('apiUrl') + "/api/v1/invites_external/" + invite.id + "/")
242
- .toPromise()];
243
- });
244
- });
245
- };
246
- TeamApi.prototype.resendInviteExternal = function (invite) {
247
- return __awaiter(this, void 0, void 0, function () {
248
- return __generator(this, function (_a) {
249
- return [2 /*return*/, this.httpClient
250
- .post(this.configService.get('apiUrl') + "/api/v1/invites_external/" + invite.id + "/resend/", {})
251
- .pipe(map(function (data) { return TeamInviteExternal.toFront(data); }))
252
- .toPromise()];
253
- });
254
- });
255
- };
256
- TeamApi.prototype.getPolls = function (teamId, archive) {
257
- if (archive === void 0) { archive = false; }
258
- return __awaiter(this, void 0, void 0, function () {
259
- return __generator(this, function (_a) {
260
- return [2 /*return*/, this.httpClient
261
- .get(this.configService.get('apiUrl') + "/api/v1/team/" + teamId + "/polls/" + (archive ? '?archive=1' : ''))
262
- .pipe(map(function (data) { return Poll.toFront(data); }))
263
- .toPromise()];
264
- });
265
- });
266
- };
267
- TeamApi.prototype.createPoll = function (teamId, poll) {
268
- return __awaiter(this, void 0, void 0, function () {
269
- return __generator(this, function (_a) {
270
- return [2 /*return*/, this.httpClient
271
- .post(this.configService.get('apiUrl') + "/api/v1/team/" + teamId + "/polls/", Poll.toBack(poll))
272
- .pipe(map(function (data) { return Poll.toFront(data); }))
273
- .toPromise()];
274
- });
275
- });
276
- };
277
- TeamApi.prototype.getUsersStatistic = function (teamId) {
278
- return __awaiter(this, void 0, void 0, function () {
279
- return __generator(this, function (_a) {
280
- return [2 /*return*/, this.httpClient
281
- .get(this.configService.get('apiUrl') + "/api/v1/team/" + teamId + "/statistics/")
282
- .pipe(map(function (data) { return BasketballStatistic.toFront(data); }))
283
- .toPromise()];
284
- });
285
- });
286
- };
287
- TeamApi.prototype.getVolleyballStatistic = function (teamId) {
288
- return __awaiter(this, void 0, void 0, function () {
289
- return __generator(this, function (_a) {
290
- return [2 /*return*/, this.httpClient
291
- .get(this.configService.get('apiUrl') + "/api/v1/team/" + teamId + "/volleyball_statistics/")
292
- .pipe(map(function (data) { return VolleyballStatistic.toFront(data); }))
293
- .toPromise()];
294
- });
295
- });
296
- };
297
- TeamApi.prototype.joinTeam = function (teamId) {
298
- return __awaiter(this, void 0, void 0, function () {
299
- return __generator(this, function (_a) {
300
- return [2 /*return*/, this.httpClient
301
- .post(this.configService.get('apiUrl') + "/api/v1/team/" + teamId + "/join/", {})
302
- .pipe(map(function (data) { return TeamInvite.toFront(data); }))
303
- .toPromise()];
304
- });
305
- });
306
- };
307
- TeamApi.prototype.leaveTeam = function (teamId) {
308
- return __awaiter(this, void 0, void 0, function () {
309
- return __generator(this, function (_a) {
310
- return [2 /*return*/, this.httpClient
311
- .post(this.configService.get('apiUrl') + "/api/v1/team/" + teamId + "/leave/", {})
312
- .toPromise()];
313
- });
314
- });
315
- };
316
- TeamApi.prototype.getGames = function (teamId, archive) {
317
- if (archive === void 0) { archive = false; }
318
- return __awaiter(this, void 0, void 0, function () {
319
- return __generator(this, function (_a) {
320
- return [2 /*return*/, this.httpClient
321
- .get(this.configService.get('apiUrl') + "/api/v1/team/" + teamId + "/games/" + (archive ? '?archive=1' : ''))
322
- .pipe(map(function (data) { return Game.toFront(data); }))
323
- .toPromise()];
324
- });
325
- });
326
- };
327
- TeamApi.prototype.createGame = function (teamId, game) {
328
- return __awaiter(this, void 0, void 0, function () {
329
- return __generator(this, function (_a) {
330
- return [2 /*return*/, this.httpClient
331
- .post(this.configService.get('apiUrl') + "/api/v1/team/" + teamId + "/games/", Game.toBack(game))
332
- .pipe(map(function (data) { return Game.toFront(data); }))
333
- .toPromise()];
334
- });
335
- });
336
- };
337
- TeamApi.prototype.getTeamEvents = function (teamId) {
338
- return __awaiter(this, void 0, void 0, function () {
339
- return __generator(this, function (_a) {
340
- return [2 /*return*/, this.httpClient
341
- .get(this.configService.get('apiUrl') + "/api/v1/team/" + teamId + "/events/")
342
- .pipe(map(function (data) { return TeamEvent.toFront(data); }))
343
- .toPromise()];
344
- });
345
- });
346
- };
347
- TeamApi.prototype.createTeamEvent = function (teamId, teamEvent) {
348
- return __awaiter(this, void 0, void 0, function () {
349
- return __generator(this, function (_a) {
350
- return [2 /*return*/, this.httpClient
351
- .post(this.configService.get('apiUrl') + "/api/v1/team/" + teamId + "/events/", TeamEvent.toBack(teamEvent))
352
- .pipe(map(function (data) { return TeamEvent.toFront(data); }))
353
- .toPromise()];
354
- });
355
- });
356
- };
357
- TeamApi.prototype.getTournaments = function (teamId) {
358
- return __awaiter(this, void 0, void 0, function () {
359
- return __generator(this, function (_a) {
360
- return [2 /*return*/, this.httpClient
361
- .get(this.configService.get('apiUrl') + "/api/v1/team/" + teamId + "/tournaments/")
362
- .pipe(map(function (data) { return Tournament.toFront(data); }))
363
- .toPromise()];
364
- });
365
- });
366
- };
367
- TeamApi.prototype.getTournamentTeams = function (teamId) {
368
- return __awaiter(this, void 0, void 0, function () {
369
- return __generator(this, function (_a) {
370
- return [2 /*return*/, this.httpClient
371
- .get(this.configService.get('apiUrl') + "/api/v1/team/" + teamId + "/tournament_teams/")
372
- .pipe(map(function (data) { return TournamentTeam.toFront(data); }))
373
- .toPromise()];
374
- });
375
- });
376
- };
377
- TeamApi.prototype.getTournamentInvites = function (teamId) {
378
- return __awaiter(this, void 0, void 0, function () {
379
- return __generator(this, function (_a) {
380
- return [2 /*return*/, this.httpClient
381
- .get(this.configService.get('apiUrl') + "/api/v1/team/" + teamId + "/tournament_invites/")
382
- .pipe(map(function (data) { return TournamentInvite.toFront(data); }))
383
- .toPromise()];
384
- });
385
- });
386
- };
387
- TeamApi.prototype.getTournamentGames = function (teamId, tournamentId, page, size) {
388
- return __awaiter(this, void 0, void 0, function () {
389
- var params;
390
- return __generator(this, function (_a) {
391
- params = new HttpParams().set('page', page.toString());
392
- if (size) {
393
- params = params.set('size', size.toString());
394
- }
395
- return [2 /*return*/, this.httpClient
396
- .get(this.configService.get('apiUrl') + "/api/v1/team/" + teamId + "/tournaments/" + tournamentId + "/games/", { params: params, observe: 'response' })
397
- .pipe(map(function (response) {
398
- return {
399
- total: +response.headers.get('X-Page-Count'),
400
- data: Game.toFront(response.body)
401
- };
402
- }))
403
- .toPromise()];
404
- });
405
- });
406
- };
407
- TeamApi.prototype.acceptTournamentInvite = function (inviteId) {
408
- return __awaiter(this, void 0, void 0, function () {
409
- return __generator(this, function (_a) {
410
- return [2 /*return*/, this.httpClient
411
- .post(this.configService.get('apiUrl') + "/api/v1/tournament_invite/" + inviteId + "/accept/", {})
412
- .pipe(map(function (data) { return TournamentInvite.toFront(data); }))
413
- .toPromise()];
414
- });
415
- });
416
- };
417
- TeamApi.prototype.declineTournamentInvite = function (inviteId) {
418
- return __awaiter(this, void 0, void 0, function () {
419
- return __generator(this, function (_a) {
420
- return [2 /*return*/, this.httpClient
421
- .post(this.configService.get('apiUrl') + "/api/v1/tournament_invite/" + inviteId + "/decline/", {})
422
- .pipe(map(function (data) { return TournamentInvite.toFront(data); }))
423
- .toPromise()];
424
- });
425
- });
426
- };
427
- TeamApi.prototype.registerLazyUser = function (teamId, userData) {
428
- return __awaiter(this, void 0, void 0, function () {
429
- return __generator(this, function (_a) {
430
- return [2 /*return*/, this.httpClient
431
- .post(this.configService.get('apiUrl') + "/api/v1/team/" + teamId + "/lazy_user/", { user: User.toBack(userData) })
432
- .pipe(map(function (data) { return TeamUser.toFront(data); }))
433
- .toPromise()];
434
- });
435
- });
436
- };
437
- TeamApi.prototype.getLazyUser = function (teamUserId) {
438
- return __awaiter(this, void 0, void 0, function () {
439
- return __generator(this, function (_a) {
440
- return [2 /*return*/, this.httpClient
441
- .get(this.configService.get('apiUrl') + "/api/v1/lazy_user/" + teamUserId + "/")
442
- .pipe(map(function (data) { return TeamUser.toFront(data); }))
443
- .toPromise()];
444
- });
445
- });
446
- };
447
- TeamApi.prototype.updateLazyUser = function (teamUserId, userData) {
448
- return __awaiter(this, void 0, void 0, function () {
449
- return __generator(this, function (_a) {
450
- return [2 /*return*/, this.httpClient
451
- .patch(this.configService.get('apiUrl') + "/api/v1/lazy_user/" + teamUserId + "/", { user: User.toBack(userData) })
452
- .pipe(map(function (data) { return TeamUser.toFront(data); }))
453
- .toPromise()];
454
- });
455
- });
456
- };
457
- TeamApi.prototype.deleteLazyUser = function (teamUserId) {
458
- return __awaiter(this, void 0, void 0, function () {
459
- return __generator(this, function (_a) {
460
- return [2 /*return*/, this.httpClient
461
- .delete(this.configService.get('apiUrl') + "/api/v1/lazy_user/" + teamUserId + "/")
462
- .toPromise()];
463
- });
464
- });
465
- };
466
- TeamApi.prototype.resendLazyUserEmail = function (teamUserId) {
467
- return __awaiter(this, void 0, void 0, function () {
468
- return __generator(this, function (_a) {
469
- return [2 /*return*/, this.httpClient
470
- .post(this.configService.get('apiUrl') + "/api/v1/lazy_user/" + teamUserId + "/resend_email/", {})
471
- .toPromise()];
472
- });
473
- });
474
- };
475
- TeamApi.ctorParameters = function () { return [
476
- { type: HttpClient },
477
- { type: ConfigService }
478
- ]; };
479
- TeamApi.ɵprov = i0.ɵɵdefineInjectable({ factory: function TeamApi_Factory() { return new TeamApi(i0.ɵɵinject(i1.HttpClient), i0.ɵɵinject(i2.ConfigService)); }, token: TeamApi, providedIn: "root" });
480
- TeamApi = __decorate([
481
- Injectable({ providedIn: 'root' })
482
- ], TeamApi);
483
- return TeamApi;
484
- }());
485
- export { TeamApi };
486
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVhbS1hcGkuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AbXRnYW1lL2NvcmUvIiwic291cmNlcyI6WyJhcGkvdGVhbS1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDNUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzdELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDakQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUUvRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDM0QsT0FBTyxF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Q0FBQyxRQUFRLENBQUMsMEJBQXFCLFVBQVUsTUFBRyxDQUFDO3lCQUM3RSxTQUFTLEVBQUUsRUFBQzs7O0tBQ2hCO0lBRUsscUNBQW1CLEdBQXpCLFVBQTBCLFVBQWtCOzs7Z0JBQzFDLHNCQUFPLElBQUksQ0FBQyxVQUFVO3lCQUNuQixJQUFJLENBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLDBCQUFxQixVQUFVLG1CQUFnQixFQUFFLEVBQUUsQ0FBQzt5QkFDNUYsU0FBUyxFQUFFLEVBQUM7OztLQUNoQjs7Z0JBMVRxQixVQUFVO2dCQUNQLGFBQWE7OztJQUgzQixPQUFPO1FBRG5CLFVBQVUsQ0FBQyxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUMsQ0FBQztPQUNwQixPQUFPLENBNlRuQjtrQkFuVkQ7Q0FtVkMsQUE3VEQsSUE2VEM7U0E3VFksT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBQYXJhbXMsIEh0dHBSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IFRlYW0gfSBmcm9tICcuLi9tb2RlbHMvdGVhbSc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBUZWFtVXNlciwgVGVhbVVzZXJSb2xlIH0gZnJvbSAnLi4vbW9kZWxzL3RlYW0tdXNlcic7XG5pbXBvcnQgeyBVc2VyIH0gZnJvbSAnLi4vbW9kZWxzL3VzZXInO1xuaW1wb3J0IHsgVGVhbUludml0ZSB9IGZyb20gJy4uL21vZGVscy90ZWFtLWludml0ZSc7XG5pbXBvcnQgeyBUZWFtSW52aXRlRXh0ZXJuYWwgfSBmcm9tICcuLi9tb2RlbHMvdGVhbS1pbnZpdGUtZXh0ZXJuYWwnO1xuaW1wb3J0IHsgUG9sbCB9IGZyb20gJy4uL21vZGVscy9wb2xsJztcbmltcG9ydCB7IFZvbGxleWJhbGxTdGF0aXN0aWMgfSBmcm9tICcuLi9tb2RlbHMvdm9sbGV5YmFsbC1zdGF0aXN0aWMnO1xuaW1wb3J0IHsgR2FtZSB9IGZyb20gJy4uL21vZGVscy9nYW1lJztcbmltcG9ydCB7IFRlYW1FdmVudCB9IGZyb20gJy4uL21vZGVscy90ZWFtLWV2ZW50JztcbmltcG9ydCB7IFRvdXJuYW1lbnQgfSBmcm9tICcuLi9tb2RlbHMvdG91cm5hbWVudCc7XG5pbXBvcnQgeyBUb3VybmFtZW50VGVhbSB9IGZyb20gJy4uL21vZGVscy90b3VybmFtZW50LXRlYW0nO1xuaW1wb3J0IHsgVG91cm5hbWVudEludml0ZSB9IGZyb20gJy4uL21vZGVscy90b3VybmFtZW50LWludml0ZSc7XG5pbXBvcnQgeyBQYWdpbmF0ZWRSZXNwb25zZSB9IGZyb20gJy4vcGFnaW5hdGVkLXJlc3BvbnNlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBCYXNrZXRiYWxsU3RhdGlzdGljIH0gZnJvbSAnLi4vbW9kZWxzL2Jhc2tldGJhbGwtc3RhdGlzdGljJztcbmltcG9ydCB7IFRlYW1QZXJtaXNzaW9uIH0gZnJvbSAnLi4vbW9kZWxzL3RlYW0tcGVybWlzc2lvbic7XG5pbXBvcnQgeyBUZWFtQWNjZXNzIH0gZnJvbSAnLi4vbW9kZWxzL3RlYW0tYWNjZXNzJztcbmltcG9ydCB7IENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9jb25maWcuc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKHtwcm92aWRlZEluOiAncm9vdCd9KVxuZXhwb3J0IGNsYXNzIFRlYW1BcGkge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGh0dHBDbGllbnQ6IEh0dHBDbGllbnQsXG4gICAgcHJpdmF0ZSBjb25maWdTZXJ2aWNlOiBDb25maWdTZXJ2aWNlLFxuICApIHt9XG5cbiAgYXN5bmMgc2VhcmNoKHF1ZXJ5OiBzdHJpbmcsIHNwb3J0SWQ/OiBudW1iZXIpOiBQcm9taXNlPFRlYW1bXT4ge1xuICAgIGxldCBwYXJhbXMgPSAobmV3IEh0dHBQYXJhbXMoKSkuc2V0KCdzZWFyY2gnLCBxdWVyeSk7XG4gICAgaWYgKHNwb3J0SWQpIHtcbiAgICAgIHBhcmFtcyA9IHBhcmFtcy5zZXQoJ3Nwb3J0Jywgc3BvcnRJZC50b1N0cmluZygpKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgLmdldChgJHt0aGlzLmNvbmZpZ1NlcnZpY2UuZ2V0KCdhcGlVcmwnKX0vYXBpL3YxL3RlYW0vYCwge3BhcmFtc30pXG4gICAgICAucGlwZShtYXAoZGF0YSA9PiBUZWFtLnRvRnJvbnQoZGF0YSkpKVxuICAgICAgLnRvUHJvbWlzZSgpO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlKHRlYW06IFRlYW0pOiBQcm9taXNlPFRlYW0+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAucG9zdChgJHt0aGlzLmNvbmZpZ1NlcnZpY2UuZ2V0KCdhcGlVcmwnKX0vYXBpL3YxL3RlYW0vYCwgVGVhbS50b0JhY2sodGVhbSkpXG4gICAgICAucGlwZShtYXAoZGF0YSA9PiBUZWFtLnRvRnJvbnQoZGF0YSkpKVxuICAgICAgLnRvUHJvbWlzZSgpO1xuICB9XG5cbiAgYXN5bmMgZ2V0QnlJZCh0ZWFtSWQ6IG51bWJlcik6IFByb21pc2U8VGVhbT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcbiAgICAgIC5nZXQoYCR7dGhpcy5jb25maWdTZXJ2aWNlLmdldCgnYXBpVXJsJyl9L2FwaS92MS90ZWFtLyR7dGVhbUlkfS9gKVxuICAgICAgLnBpcGUobWFwKGRhdGEgPT4gVGVhbS50b0Zyb250KGRhdGEpKSlcbiAgICAgIC50b1Byb21pc2UoKTtcbiAgfVxuXG4gIGFzeW5jIGdldFRlYW1BY2Nlc3ModGVhbUlkOiBudW1iZXIpOiBQcm9taXNlPFRlYW1BY2Nlc3M+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAuZ2V0KGAke3RoaXMuY29uZmlnU2VydmljZS5nZXQoJ2FwaVVybCcpfS9hcGkvdjEvdGVhbS8ke3RlYW1JZH0vYWNjZXNzL2ApXG4gICAgICAucGlwZShtYXAoZGF0YSA9PiBUZWFtQWNjZXNzLnRvRnJvbnQoZGF0YSkpKVxuICAgICAgLnRvUHJvbWlzZSgpO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlKHRlYW1JZDogbnVtYmVyLCB2YWx1ZXM6IGFueSk6IFByb21pc2U8VGVhbT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcbiAgICAgIC5wYXRjaChgJHt0aGlzLmNvbmZpZ1NlcnZpY2UuZ2V0KCdhcGlVcmwnKX0vYXBpL3YxL3RlYW0vJHt0ZWFtSWR9L2AsIFRlYW0udG9CYWNrKHZhbHVlcykpXG4gICAgICAucGlwZShtYXAoZGF0YSA9PiBUZWFtLnRvRnJvbnQoZGF0YSkpKVxuICAgICAgLnRvUHJvbWlzZSgpO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlKHRlYW06IFRlYW0pOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcbiAgICAgIC5kZWxldGUoYCR7dGhpcy5jb25maWdTZXJ2aWNlLmdldCgnYXBpVXJsJyl9L2FwaS92MS90ZWFtLyR7dGVhbS5pZH0vYClcbiAgICAgIC50b1Byb21pc2UoKTtcbiAgfVxuXG4gIGFzeW5jIGdldFBlcm1pc3Npb24odGVhbUlkOiBudW1iZXIpOiBQcm9taXNlPFRlYW1QZXJtaXNzaW9uPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgLmdldChgJHt0aGlzLmNvbmZpZ1NlcnZpY2UuZ2V0KCdhcGlVcmwnKX0vYXBpL3YxL3RlYW0vJHt0ZWFtSWR9L3Blcm1pc3Npb24vYClcbiAgICAgIC5waXBlKG1hcChkYXRhID0+IFRlYW1QZXJtaXNzaW9uLnRvRnJvbnQoZGF0YSkpKVxuICAgICAgLnRvUHJvbWlzZSgpO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlUGVybWlzc2lvbih0ZWFtSWQ6IG51bWJlciwgcGVybWlzc2lvbjogVGVhbVBlcm1pc3Npb24pOiBQcm9taXNlPFRlYW1QZXJtaXNzaW9uPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgLnBhdGNoKGAke3RoaXMuY29uZmlnU2VydmljZS5nZXQoJ2FwaVVybCcpfS9hcGkvdjEvdGVhbS8ke3RlYW1JZH0vcGVybWlzc2lvbi9gLCBUZWFtUGVybWlzc2lvbi50b0JhY2socGVybWlzc2lvbikpXG4gICAgICAucGlwZShtYXAoZGF0YSA9PiBUZWFtUGVybWlzc2lvbi50b0Zyb250KGRhdGEpKSlcbiAgICAgIC50b1Byb21pc2UoKTtcbiAgfVxuXG4gIGFzeW5jIGdldFVzZXJzKHRlYW1JZDogbnVtYmVyLCB0b3VybmFtZW50SWQ/OiBudW1iZXIpOiBQcm9taXNlPFRlYW1Vc2VyW10+IHtcbiAgICBsZXQgcGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcbiAgICBpZiAodG91cm5hbWVudElkKSB7XG4gICAgICBwYXJhbXMgPSBwYXJhbXMuc2V0KCd0b3VybmFtZW50X2lkJywgdG91cm5hbWVudElkLnRvU3RyaW5nKCkpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAuZ2V0KGAke3RoaXMuY29uZmlnU2VydmljZS5nZXQoJ2FwaVVybCcpfS9hcGkvdjEvdGVhbS8ke3RlYW1JZH0vdXNlcnMvYCwge3BhcmFtc30pXG4gICAgICAucGlwZShtYXAoZGF0YSA9PiBUZWFtVXNlci50b0Zyb250KGRhdGEpKSlcbiAgICAgIC50b1Byb21pc2UoKTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZVVzZXJSb2xlKHRlYW1JZDogbnVtYmVyLCB0ZWFtVXNlcklkOiBudW1iZXIsIHJvbGU6IFRlYW1Vc2VyUm9sZSk6IFByb21pc2U8VGVhbVVzZXI+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAucGF0Y2goYCR7dGhpcy5jb25maWdTZXJ2aWNlLmdldCgnYXBpVXJsJyl9L2FwaS92MS90ZWFtLyR7dGVhbUlkfS91c2Vycy8ke3RlYW1Vc2VySWR9L3JvbGUvYCwge3JvbGU6IFRlYW1Vc2VyUm9sZVtyb2xlXX0pXG4gICAgICAucGlwZShtYXAoZGF0YSA9PiBUZWFtVXNlci50b0Zyb250KGRhdGEpKSlcbiAgICAgIC50b1Byb21pc2UoKTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZVVzZXJOdW1iZXIodGVhbUlkOiBudW1iZXIsIHRlYW1Vc2VySWQ6IG51bWJlciwgZ2FtZU51bWJlcjogbnVtYmVyKTogUHJvbWlzZTxUZWFtVXNlcj4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcbiAgICAgIC5wYXRjaChgJHt0aGlzLmNvbmZpZ1NlcnZpY2UuZ2V0KCdhcGlVcmwnKX0vYXBpL3YxL3RlYW0vJHt0ZWFtSWR9L3VzZXJzLyR7dGVhbVVzZXJJZH0vbnVtYmVyL2AsIHtudW1iZXI6IGdhbWVOdW1iZXIudG9TdHJpbmcoKX0pXG4gICAgICAucGlwZShtYXAoZGF0YSA9PiBUZWFtVXNlci50b0Zyb250KGRhdGEpKSlcbiAgICAgIC50b1Byb21pc2UoKTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZVVzZXIodGVhbVVzZXI6IFRlYW1Vc2VyKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAuZGVsZXRlKGAke3RoaXMuY29uZmlnU2VydmljZS5nZXQoJ2FwaVVybCcpfS9hcGkvdjEvdGVhbS8ke3RlYW1Vc2VyLnRlYW1JZH0vdXNlcnMvJHt0ZWFtVXNlci5pZH0vYClcbiAgICAgIC50b1Byb21pc2UoKTtcbiAgfVxuXG4gIGFzeW5jIGNoYW5nZU93bmVyKHRlYW1JZDogbnVtYmVyLCB1c2VyOiBVc2VyKTogUHJvbWlzZTxUZWFtPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgLnBvc3QoYCR7dGhpcy5jb25maWdTZXJ2aWNlLmdldCgnYXBpVXJsJyl9L2FwaS92MS90ZWFtLyR7dGVhbUlkfS9vd25lci9gLCB7aWQ6IHVzZXIuaWR9KVxuICAgICAgLnBpcGUobWFwKGRhdGEgPT4gVGVhbS50b0Zyb250KGRhdGEpKSlcbiAgICAgIC50b1Byb21pc2UoKTtcbiAgfVxuXG4gIGFzeW5jIGdldEludml0ZXModGVhbUlkOiBudW1iZXIpOiBQcm9taXNlPFRlYW1JbnZpdGVbXT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcbiAgICAgIC5nZXQoYCR7dGhpcy5jb25maWdTZXJ2aWNlLmdldCgnYXBpVXJsJyl9L2FwaS92MS90ZWFtLyR7dGVhbUlkfS9pbnZpdGVzL2ApXG4gICAgICAucGlwZShtYXAoZGF0YSA9PiBUZWFtSW52aXRlLnRvRnJvbnQoZGF0YSkpKVxuICAgICAgLnRvUHJvbWlzZSgpO1xuICB9XG5cbiAgYXN5bmMgc2VuZEludml0ZSh0ZWFtSWQ6IG51bWJlciwgdXNlcjogVXNlcik6IFByb21pc2U8VGVhbUludml0ZT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcbiAgICAgIC5wb3N0KGAke3RoaXMuY29uZmlnU2VydmljZS5nZXQoJ2FwaVVybCcpfS9hcGkvdjEvdGVhbS8ke3RlYW1JZH0vaW52aXRlcy9gLCB7dXNlcn0pXG4gICAgICAucGlwZShtYXAoZGF0YSA9PiBUZWFtSW52aXRlLnRvRnJvbnQoZGF0YSkpKVxuICAgICAgLnRvUHJvbWlzZSgpO1xuICB9XG5cbiAgYXN5bmMgYWNjZXB0SW52aXRlKGludml0ZTogVGVhbUludml0ZSk6IFByb21pc2U8VGVhbUludml0ZT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcbiAgICAgIC5wb3N0KGAke3RoaXMuY29uZmlnU2VydmljZS5nZXQoJ2FwaVVybCcpfS9hcGkvdjEvdGVhbV9pbnZpdGUvJHtpbnZpdGUuaWR9L2FjY2VwdC9gLCB7fSlcbiAgICAgIC5waXBlKG1hcChkYXRhID0+IFRlYW1JbnZpdGUudG9Gcm9udChkYXRhKSkpXG4gICAgICAudG9Qcm9taXNlKCk7XG4gIH1cblxuICBhc3luYyBkZWNsaW5lSW52aXRlKGludml0ZTogVGVhbUludml0ZSk6IFByb21pc2U8VGVhbUludml0ZT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcbiAgICAgIC5wb3N0KGAke3RoaXMuY29uZmlnU2VydmljZS5nZXQoJ2FwaVVybCcpfS9hcGkvdjEvdGVhbV9pbnZpdGUvJHtpbnZpdGUuaWR9L2RlY2xpbmUvYCwge30pXG4gICAgICAucGlwZShtYXAoZGF0YSA9PiBUZWFtSW52aXRlLnRvRnJvbnQoZGF0YSkpKVxuICAgICAgLnRvUHJvbWlzZSgpO1xuICB9XG5cbiAgYXN5bmMgcmVzZW5kSW52aXRlKGludml0ZTogVGVhbUludml0ZSk6IFByb21pc2U8VGVhbUludml0ZT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcbiAgICAgIC5wb3N0KGAke3RoaXMuY29uZmlnU2VydmljZS5nZXQoJ2FwaVVybCcpfS9hcGkvdjEvdGVhbV9pbnZpdGUvJHtpbnZpdGUuaWR9L3Jlc2VuZC9gLCB7fSlcbiAgICAgIC5waXBlKG1hcChkYXRhID0+IFRlYW1JbnZpdGUudG9Gcm9udChkYXRhKSkpXG4gICAgICAudG9Qcm9taXNlKCk7XG4gIH1cblxuICBhc3luYyBnZXRJbnZpdGVzRXh0ZXJuYWwodGVhbUlkOiBudW1iZXIpOiBQcm9taXNlPFRlYW1JbnZpdGVFeHRlcm5hbFtdPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgLmdldChgJHt0aGlzLmNvbmZpZ1NlcnZpY2UuZ2V0KCdhcGlVcmwnKX0vYXBpL3YxL3RlYW0vJHt0ZWFtSWR9L2ludml0ZXNfZXh0ZXJuYWwvYClcbiAgICAgIC5waXBlKG1hcChkYXRhID0+IFRlYW1JbnZpdGVFeHRlcm5hbC50b0Zyb250KGRhdGEpKSlcbiAgICAgIC50b1Byb21pc2UoKTtcbiAgfVxuXG4gIGFzeW5jIHNlbmRJbnZpdGVFeHRlcm5hbCh0ZWFtSWQ6IG51bWJlciwgaW52aXRlOiBUZWFtSW52aXRlRXh0ZXJuYWwpOiBQcm9taXNlPFRlYW1JbnZpdGVFeHRlcm5hbD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcbiAgICAgIC5wb3N0KGAke3RoaXMuY29uZmlnU2VydmljZS5nZXQoJ2FwaVVybCcpfS9hcGkvdjEvdGVhbS8ke3RlYW1JZH0vaW52aXRlc19leHRlcm5hbC9gLCBUZWFtSW52aXRlRXh0ZXJuYWwudG9CYWNrKGludml0ZSkpXG4gICAgICAucGlwZShtYXAoZGF0YSA9PiBUZWFtSW52aXRlRXh0ZXJuYWwudG9Gcm9udChkYXRhKSkpXG4gICAgICAudG9Qcm9taXNlKCk7XG4gIH1cblxuICBhc3luYyBkZWxldGVJbnZpdGVFeHRlcm5hbChpbnZpdGU6IFRlYW1JbnZpdGVFeHRlcm5hbCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgLmRlbGV0ZShgJHt0aGlzLmNvbmZpZ1NlcnZpY2UuZ2V0KCdhcGlVcmwnKX0vYXBpL3YxL2ludml0ZXNfZXh0ZXJuYWwvJHtpbnZpdGUuaWR9L2ApXG4gICAgICAudG9Qcm9taXNlKCk7XG4gIH1cblxuICBhc3luYyByZXNlbmRJbnZpdGVFeHRlcm5hbChpbnZpdGU6IFRlYW1JbnZpdGVFeHRlcm5hbCk6IFByb21pc2U8VGVhbUludml0ZUV4dGVybmFsPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgLnBvc3QoYCR7dGhpcy5jb25maWdTZXJ2aWNlLmdldCgnYXBpVXJsJyl9L2FwaS92MS9pbnZpdGVzX2V4dGVybmFsLyR7aW52aXRlLmlkfS9yZXNlbmQvYCwge30pXG4gICAgICAucGlwZShtYXAoZGF0YSA9PiBUZWFtSW52aXRlRXh0ZXJuYWwudG9Gcm9udChkYXRhKSkpXG4gICAgICAudG9Qcm9taXNlKCk7XG4gIH1cblxuICBhc3luYyBnZXRQb2xscyh0ZWFtSWQ6IG51bWJlciwgYXJjaGl2ZTogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTxQb2xsW10+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAuZ2V0KGAke3RoaXMuY29uZmlnU2VydmljZS5nZXQoJ2FwaVVybCcpfS9hcGkvdjEvdGVhbS8ke3RlYW1JZH0vcG9sbHMvJHthcmNoaXZlID8gJz9hcmNoaXZlPTEnIDogJyd9YClcbiAgICAgIC5waXBlKG1hcChkYXRhID0+IFBvbGwudG9Gcm9udChkYXRhKSkpXG4gICAgICAudG9Qcm9taXNlKCk7XG4gIH1cblxuICBhc3luYyBjcmVhdGVQb2xsKHRlYW1JZDogbnVtYmVyLCBwb2xsOiBQb2xsKTogUHJvbWlzZTxQb2xsPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgLnBvc3QoYCR7dGhpcy5jb25maWdTZXJ2aWNlLmdldCgnYXBpVXJsJyl9L2FwaS92MS90ZWFtLyR7dGVhbUlkfS9wb2xscy9gLCBQb2xsLnRvQmFjayhwb2xsKSlcbiAgICAgIC5waXBlKG1hcChkYXRhID0+IFBvbGwudG9Gcm9udChkYXRhKSkpXG4gICAgICAudG9Qcm9taXNlKCk7XG4gIH1cblxuICBhc3luYyBnZXRVc2Vyc1N0YXRpc3RpYyh0ZWFtSWQ6IG51bWJlcik6IFByb21pc2U8QmFza2V0YmFsbFN0YXRpc3RpY1tdPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgLmdldChgJHt0aGlzLmNvbmZpZ1NlcnZpY2UuZ2V0KCdhcGlVcmwnKX0vYXBpL3YxL3RlYW0vJHt0ZWFtSWR9L3N0YXRpc3RpY3MvYClcbiAgICAgIC5waXBlKG1hcChkYXRhID0+IEJhc2tldGJhbGxTdGF0aXN0aWMudG9Gcm9udChkYXRhKSkpXG4gICAgICAudG9Qcm9taXNlKCk7XG4gIH1cblxuICBhc3luYyBnZXRWb2xsZXliYWxsU3RhdGlzdGljKHRlYW1JZDogbnVtYmVyKTogUHJvbWlzZTxWb2xsZXliYWxsU3RhdGlzdGljW10+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAuZ2V0KGAke3RoaXMuY29uZmlnU2VydmljZS5nZXQoJ2FwaVVybCcpfS9hcGkvdjEvdGVhbS8ke3RlYW1JZH0vdm9sbGV5YmFsbF9zdGF0aXN0aWNzL2ApXG4gICAgICAucGlwZShtYXAoZGF0YSA9PiBWb2xsZXliYWxsU3RhdGlzdGljLnRvRnJvbnQoZGF0YSkpKVxuICAgICAgLnRvUHJvbWlzZSgpO1xuICB9XG5cbiAgYXN5bmMgam9pblRlYW0odGVhbUlkOiBudW1iZXIpOiBQcm9taXNlPFRlYW1JbnZpdGU+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAucG9zdChgJHt0aGlzLmNvbmZpZ1NlcnZpY2UuZ2V0KCdhcGlVcmwnKX0vYXBpL3YxL3RlYW0vJHt0ZWFtSWR9L2pvaW4vYCwge30pXG4gICAgICAucGlwZShtYXAoZGF0YSA9PiBUZWFtSW52aXRlLnRvRnJvbnQoZGF0YSkpKVxuICAgICAgLnRvUHJvbWlzZSgpO1xuICB9XG5cbiAgYXN5bmMgbGVhdmVUZWFtKHRlYW1JZDogbnVtYmVyKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAucG9zdChgJHt0aGlzLmNvbmZpZ1NlcnZpY2UuZ2V0KCdhcGlVcmwnKX0vYXBpL3YxL3RlYW0vJHt0ZWFtSWR9L2xlYXZlL2AsIHt9KVxuICAgICAgLnRvUHJvbWlzZSgpO1xuICB9XG5cbiAgYXN5bmMgZ2V0R2FtZXModGVhbUlkOiBudW1iZXIsIGFyY2hpdmUgPSBmYWxzZSk6IFByb21pc2U8R2FtZVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgLmdldChgJHt0aGlzLmNvbmZpZ1NlcnZpY2UuZ2V0KCdhcGlVcmwnKX0vYXBpL3YxL3RlYW0vJHt0ZWFtSWR9L2dhbWVzLyR7YXJjaGl2ZSA/ICc/YXJjaGl2ZT0xJyA6ICcnfWApXG4gICAgICAucGlwZShtYXAoZGF0YSA9PiBHYW1lLnRvRnJvbnQoZGF0YSkpKVxuICAgICAgLnRvUHJvbWlzZSgpO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlR2FtZSh0ZWFtSWQ6IG51bWJlciwgZ2FtZTogR2FtZSk6IFByb21pc2U8R2FtZT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcbiAgICAgIC5wb3N0KGAke3RoaXMuY29uZmlnU2VydmljZS5nZXQoJ2FwaVVybCcpfS9hcGkvdjEvdGVhbS8ke3RlYW1JZH0vZ2FtZXMvYCwgR2FtZS50b0JhY2soZ2FtZSkpXG4gICAgICAucGlwZShtYXAoZGF0YSA9PiBHYW1lLnRvRnJvbnQoZGF0YSkpKVxuICAgICAgLnRvUHJvbWlzZSgpO1xuICB9XG5cbiAgYXN5bmMgZ2V0VGVhbUV2ZW50cyh0ZWFtSWQ6IG51bWJlcik6IFByb21pc2U8VGVhbUV2ZW50W10+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAuZ2V0KGAke3RoaXMuY29uZmlnU2VydmljZS5nZXQoJ2FwaVVybCcpfS9hcGkvdjEvdGVhbS8ke3RlYW1JZH0vZXZlbnRzL2ApXG4gICAgICAucGlwZShtYXAoZGF0YSA9PiBUZWFtRXZlbnQudG9Gcm9udChkYXRhKSkpXG4gICAgICAudG9Qcm9taXNlKCk7XG4gIH1cblxuICBhc3luYyBjcmVhdGVUZWFtRXZlbnQodGVhbUlkOiBudW1iZXIsIHRlYW1FdmVudDogVGVhbUV2ZW50KTogUHJvbWlzZTxUZWFtRXZlbnQ+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAucG9zdChgJHt0aGlzLmNvbmZpZ1NlcnZpY2UuZ2V0KCdhcGlVcmwnKX0vYXBpL3YxL3RlYW0vJHt0ZWFtSWR9L2V2ZW50cy9gLCBUZWFtRXZlbnQudG9CYWNrKHRlYW1FdmVudCkpXG4gICAgICAucGlwZShtYXAoZGF0YSA9PiBUZWFtRXZlbnQudG9Gcm9udChkYXRhKSkpXG4gICAgICAudG9Qcm9taXNlKCk7XG4gIH1cblxuICBhc3luYyBnZXRUb3VybmFtZW50cyh0ZWFtSWQ6IG51bWJlcik6IFByb21pc2U8VG91cm5hbWVudFtdPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgLmdldChgJHt0aGlzLmNvbmZpZ1NlcnZpY2UuZ2V0KCdhcGlVcmwnKX0vYXBpL3YxL3RlYW0vJHt0ZWFtSWR9L3RvdXJuYW1lbnRzL2ApXG4gICAgICAucGlwZShtYXAoZGF0YSA9PiBUb3VybmFtZW50LnRvRnJvbnQoZGF0YSkpKVxuICAgICAgLnRvUHJvbWlzZSgpO1xuICB9XG5cbiAgYXN5bmMgZ2V0VG91cm5hbWVudFRlYW1zKHRlYW1JZDogbnVtYmVyKTogUHJvbWlzZTxUb3VybmFtZW50VGVhbVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgLmdldChgJHt0aGlzLmNvbmZpZ1NlcnZpY2UuZ2V0KCdhcGlVcmwnKX0vYXBpL3YxL3RlYW0vJHt0ZWFtSWR9L3RvdXJuYW1lbnRfdGVhbXMvYClcbiAgICAgIC5waXBlKG1hcChkYXRhID0+IFRvdXJuYW1lbnRUZWFtLnRvRnJvbnQoZGF0YSkpKVxuICAgICAgLnRvUHJvbWlzZSgpO1xuICB9XG5cbiAgYXN5bmMgZ2V0VG91cm5hbWVudEludml0ZXModGVhbUlkOiBudW1iZXIpOiBQcm9taXNlPFRvdXJuYW1lbnRJbnZpdGVbXT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcbiAgICAgIC5nZXQoYCR7dGhpcy5jb25maWdTZXJ2aWNlLmdldCgnYXBpVXJsJyl9L2FwaS92MS90ZWFtLyR7dGVhbUlkfS90b3VybmFtZW50X2ludml0ZXMvYClcbiAgICAgIC5waXBlKG1hcChkYXRhID0+IFRvdXJuYW1lbnRJbnZpdGUudG9Gcm9udChkYXRhKSkpXG4gICAgICAudG9Qcm9taXNlKCk7XG4gIH1cblxuICBhc3luYyBnZXRUb3VybmFtZW50R2FtZXModGVhbUlkOiBudW1iZXIsIHRvdXJuYW1lbnRJZDogbnVtYmVyLCBwYWdlOiBudW1iZXIsIHNpemU/OiBudW1iZXIpOiBQcm9taXNlPFBhZ2luYXRlZFJlc3BvbnNlPEdhbWVbXT4+IHtcbiAgICBsZXQgcGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKS5zZXQoJ3BhZ2UnLCBwYWdlLnRvU3RyaW5nKCkpO1xuICAgIGlmIChzaXplKSB7XG4gICAgICBwYXJhbXMgPSBwYXJhbXMuc2V0KCdzaXplJywgc2l6ZS50b1N0cmluZygpKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgLmdldChgJHt0aGlzLmNvbmZpZ1NlcnZpY2UuZ2V0KCdhcGlVcmwnKX0vYXBpL3YxL3RlYW0vJHt0ZWFtSWR9L3RvdXJuYW1lbnRzLyR7dG91cm5hbWVudElkfS9nYW1lcy9gLCB7cGFyYW1zLCBvYnNlcnZlOiAncmVzcG9uc2UnfSlcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2U6IEh0dHBSZXNwb25zZTxhbnk+KSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdG90YWw6ICtyZXNwb25zZS5oZWFkZXJzLmdldCgnWC1QYWdlLUNvdW50JyksXG4gICAgICAgICAgZGF0YTogR2FtZS50b0Zyb250KHJlc3BvbnNlLmJvZHkpXG4gICAgICAgIH07XG4gICAgICB9KSlcbiAgICAgIC50b1Byb21pc2UoKTtcbiAgfVxuXG4gIGFzeW5jIGFjY2VwdFRvdXJuYW1lbnRJbnZpdGUoaW52aXRlSWQ6IG51bWJlcik6IFByb21pc2U8VG91cm5hbWVudEludml0ZT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcbiAgICAgIC5wb3N0KGAke3RoaXMuY29uZmlnU2VydmljZS5nZXQoJ2FwaVVybCcpfS9hcGkvdjEvdG91cm5hbWVudF9pbnZpdGUvJHtpbnZpdGVJZH0vYWNjZXB0L2AsIHt9KVxuICAgICAgLnBpcGUobWFwKGRhdGEgPT4gVG91cm5hbWVudEludml0ZS50b0Zyb250KGRhdGEpKSlcbiAgICAgIC50b1Byb21pc2UoKTtcbiAgfVxuXG4gIGFzeW5jIGRlY2xpbmVUb3VybmFtZW50SW52aXRlKGludml0ZUlkOiBudW1iZXIpOiBQcm9taXNlPFRvdXJuYW1lbnRJbnZpdGU+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAucG9zdChgJHt0aGlzLmNvbmZpZ1NlcnZpY2UuZ2V0KCdhcGlVcmwnKX0vYXBpL3YxL3RvdXJuYW1lbnRfaW52aXRlLyR7aW52aXRlSWR9L2RlY2xpbmUvYCwge30pXG4gICAgICAucGlwZShtYXAoZGF0YSA9PiBUb3VybmFtZW50SW52aXRlLnRvRnJvbnQoZGF0YSkpKVxuICAgICAgLnRvUHJvbWlzZSgpO1xuICB9XG5cbiAgYXN5bmMgcmVnaXN0ZXJMYXp5VXNlcih0ZWFtSWQ6IG51bWJlciwgdXNlckRhdGE6IFVzZXIpOiBQcm9taXNlPFRlYW1Vc2VyPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgLnBvc3QoYCR7dGhpcy5jb25maWdTZXJ2aWNlLmdldCgnYXBpVXJsJyl9L2FwaS92MS90ZWFtLyR7dGVhbUlkfS9sYXp5X3VzZXIvYCwgIHt1c2VyOiBVc2VyLnRvQmFjayh1c2VyRGF0YSl9KVxuICAgICAgLnBpcGUobWFwKGRhdGEgPT4gVGVhbVVzZXIudG9Gcm9udChkYXRhKSkpXG4gICAgICAudG9Qcm9taXNlKCk7XG4gIH1cblxuICBhc3luYyBnZXRMYXp5VXNlcih0ZWFtVXNlcklkOiBudW1iZXIpOiBQcm9taXNlPFRlYW1Vc2VyPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgLmdldChgJHt0aGlzLmNvbmZpZ1NlcnZpY2UuZ2V0KCdhcGlVcmwnKX0vYXBpL3YxL2xhenlfdXNlci8ke3RlYW1Vc2VySWR9L2ApXG4gICAgICAucGlwZShtYXAoZGF0YSA9PiBUZWFtVXNlci50b0Zyb250KGRhdGEpKSlcbiAgICAgIC50b1Byb21pc2UoKTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZUxhenlVc2VyKHRlYW1Vc2VySWQ6IG51bWJlciwgdXNlckRhdGE6IFVzZXIpOiBQcm9taXNlPFRlYW1Vc2VyPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgLnBhdGNoKGAke3RoaXMuY29uZmlnU2VydmljZS5nZXQoJ2FwaVVybCcpfS9hcGkvdjEvbGF6eV91c2VyLyR7dGVhbVVzZXJJZH0vYCwge3VzZXI6IFVzZXIudG9CYWNrKHVzZXJEYXRhKX0pXG4gICAgICAucGlwZShtYXAoZGF0YSA9PiBUZWFtVXNlci50b0Zyb250KGRhdGEpKSlcbiAgICAgIC50b1Byb21pc2UoKTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZUxhenlVc2VyKHRlYW1Vc2VySWQ6IG51bWJlcik6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgLmRlbGV0ZShgJHt0aGlzLmNvbmZpZ1NlcnZpY2UuZ2V0KCdhcGlVcmwnKX0vYXBpL3YxL2xhenlfdXNlci8ke3RlYW1Vc2VySWR9L2ApXG4gICAgICAudG9Qcm9taXNlKCk7XG4gIH1cblxuICBhc3luYyByZXNlbmRMYXp5VXNlckVtYWlsKHRlYW1Vc2VySWQ6IG51bWJlcik6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgLnBvc3QoYCR7dGhpcy5jb25maWdTZXJ2aWNlLmdldCgnYXBpVXJsJyl9L2FwaS92MS9sYXp5X3VzZXIvJHt0ZWFtVXNlcklkfS9yZXNlbmRfZW1haWwvYCwge30pXG4gICAgICAudG9Qcm9taXNlKCk7XG4gIH1cbn1cbiJdfQ==