@seniorsistemas/yms-integration 2.0.0 → 2.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 (228) hide show
  1. package/bundles/seniorsistemas-yms-integration.umd.js +2922 -1185
  2. package/bundles/seniorsistemas-yms-integration.umd.js.map +1 -1
  3. package/bundles/seniorsistemas-yms-integration.umd.min.js +1 -1
  4. package/bundles/seniorsistemas-yms-integration.umd.min.js.map +1 -1
  5. package/esm2015/index.js +9 -1
  6. package/esm2015/seniorsistemas-yms-integration.js +48 -38
  7. package/esm2015/src/devices/balancas/balancas.service.js +4 -1
  8. package/esm2015/src/devices/balancas/visualiar-balanca/visualizar-balanca.component.js +8 -25
  9. package/esm2015/src/devices/balancas/weightScale.js +1 -1
  10. package/esm2015/src/devices/cancelas/cancelas.service.js +5 -1
  11. package/esm2015/src/devices/cancelas/controlador-cancela/controlador-cancela.component.js +91 -21
  12. package/esm2015/src/devices/cancelas/gate.js +1 -1
  13. package/esm2015/src/devices/dock/dock.module.js +12 -0
  14. package/esm2015/src/devices/dock/dock.service.js +22 -0
  15. package/esm2015/src/erp-senior/components/nota-form/nota-form.component.js +24 -9
  16. package/esm2015/src/erp-senior/core/entities/agenda/agenda.module.js +2 -2
  17. package/esm2015/src/erp-senior/core/entities/cidade/cidade.module.js +2 -2
  18. package/esm2015/src/erp-senior/core/entities/contrato-compra/contrato-compra.module.js +2 -2
  19. package/esm2015/src/erp-senior/core/entities/contrato-compra-item/contrato-compra-item.module.js +2 -2
  20. package/esm2015/src/erp-senior/core/entities/derivacao/derivacao.module.js +2 -2
  21. package/esm2015/src/erp-senior/core/entities/devolucao/devolucao.module.js +2 -2
  22. package/esm2015/src/erp-senior/core/entities/empresa/empresa.module.js +2 -2
  23. package/esm2015/src/erp-senior/core/entities/estado/estado.module.js +2 -2
  24. package/esm2015/src/erp-senior/core/entities/expedicao/expedicao.module.js +2 -2
  25. package/esm2015/src/erp-senior/core/entities/familia-produto/familia-produto.js +5 -7
  26. package/esm2015/src/erp-senior/core/entities/familia-produto/familia-produto.module.js +2 -2
  27. package/esm2015/src/erp-senior/core/entities/filial/filial.module.js +2 -2
  28. package/esm2015/src/erp-senior/core/entities/log-integracao/log-integracao.module.js +2 -2
  29. package/esm2015/src/erp-senior/core/entities/motorista/motorista.js +1 -1
  30. package/esm2015/src/erp-senior/core/entities/ordem-compra/ordem-compra.module.js +7 -2
  31. package/esm2015/src/erp-senior/core/entities/pais/pais.module.js +2 -2
  32. package/esm2015/src/erp-senior/core/entities/pedido-venda/pedido-venda.module.js +2 -2
  33. package/esm2015/src/erp-senior/core/entities/pedido-venda-item/pedido-venda-item.module.js +2 -2
  34. package/esm2015/src/erp-senior/core/entities/pessoa/pessoa.module.js +2 -2
  35. package/esm2015/src/erp-senior/core/entities/pessoa-endereco/pessoa-endereco-dto.js +1 -5
  36. package/esm2015/src/erp-senior/core/entities/pessoa-endereco/pessoa-endereco.js +1 -7
  37. package/esm2015/src/erp-senior/core/entities/pessoa-endereco/pessoa-endereco.module.js +2 -2
  38. package/esm2015/src/erp-senior/core/entities/pessoa-fisica/pessoa-fisica.module.js +2 -2
  39. package/esm2015/src/erp-senior/core/entities/pessoa-juridica/pessoa-juridica.module.js +2 -2
  40. package/esm2015/src/erp-senior/core/entities/processo-avulso/processo-avulso.module.js +7 -2
  41. package/esm2015/src/erp-senior/core/entities/produto/produto.js +1 -9
  42. package/esm2015/src/erp-senior/core/entities/produto/produto.module.js +2 -2
  43. package/esm2015/src/erp-senior/core/entities/recebimento-contrato/recebimento.module.js +7 -2
  44. package/esm2015/src/erp-senior/core/entities/recebimento-ordem-compra/recebimento-ordem-compra.module.js +11 -12
  45. package/esm2015/src/erp-senior/core/entities/royalty/royalty.module.js +2 -2
  46. package/esm2015/src/erp-senior/core/entities/safra/safra.module.js +2 -2
  47. package/esm2015/src/erp-senior/core/entities/transgenia/transgenia.js +1 -1
  48. package/esm2015/src/erp-senior/core/entities/transportadora/transportadora.module.js +2 -2
  49. package/esm2015/src/erp-senior/core/entities/unidade-medida/unidade-medida.module.js +2 -2
  50. package/esm2015/src/erp-senior/core/verifica-nota-fiscal/verificaNotaFiscal.js +9 -1
  51. package/esm2015/src/erp-senior/devolucao/form/devolucao-form.component.js +12 -7
  52. package/esm2015/src/erp-senior/expedicao/form/expedicao-form.component.js +15 -21
  53. package/esm2015/src/erp-senior/processo-avulso/form/processo-avulso-form.component.js +7 -2
  54. package/esm2015/src/erp-senior/recebimento/contrato-form/contrato-form.component.js +20 -4
  55. package/esm2015/src/erp-senior/recebimento/form/recebimento-form.component.js +242 -199
  56. package/esm2015/src/erp-senior/recebimento-ordem-compra/form/recebimento-ordem-compra-form.component.js +29 -20
  57. package/esm2015/src/erp-senior/recebimento-ordem-compra/ordem-compra-form/ordem-compra-form.component.js +13 -4
  58. package/esm2015/src/sam-senior/components/credencial-form/credencial-form.component.js +126 -0
  59. package/esm2015/src/sam-senior/components/scheduling/lobby.service.js +22 -0
  60. package/esm2015/src/sam-senior/components/scheduling/scheduling.component.js +191 -0
  61. package/esm2015/src/sam-senior/components/scheduling/shechuling.service.js +40 -0
  62. package/esm2015/src/sam-senior/components/visited-info/visited-info.component.js +59 -0
  63. package/esm2015/src/sam-senior/components/visited-info/visited-info.service.js +26 -0
  64. package/esm2015/src/sam-senior/components/visitor-edit/visitor-edit-form/visitante-form/visitor-edit-form.component.js +84 -0
  65. package/esm2015/src/sam-senior/components/visitor-edit/visitor-edit-list/visitor-edit-list.component.js +364 -0
  66. package/esm2015/src/sam-senior/components/visitor-list/visitor-list.component.js +64 -0
  67. package/esm2015/src/sam-senior/components/visitor-list/visitor-list.service.js +26 -0
  68. package/esm2015/src/sam-senior/components/visitor-list.module.js +36 -0
  69. package/esm2015/src/sam-senior/core/entity-service.js +102 -0
  70. package/esm2015/src/sam-senior/core/lookup.js +184 -0
  71. package/esm2015/src/sam-senior/core/utils.js +26 -0
  72. package/esm2015/src/sam-senior/entities/credential-card-dto.js +9 -0
  73. package/esm2015/src/sam-senior/entities/lobby-dto.js +3 -0
  74. package/esm2015/src/sam-senior/entities/scheduling-dto.js +3 -0
  75. package/esm2015/src/sam-senior/entities/scheduling-visitors.js +3 -0
  76. package/esm2015/src/sam-senior/entities/scheduling.js +26 -0
  77. package/esm2015/src/sam-senior/entities/visited.js +3 -0
  78. package/esm2015/src/sam-senior/entities/visitor-credentials-dto.js +6 -0
  79. package/esm2015/src/sam-senior/entities/visitor-dto.js +1 -0
  80. package/esm2015/src/sam-senior/entities/visitor-situation.js +10 -0
  81. package/esm2015/src/sam-senior/form/form-sam.component.js +61 -0
  82. package/esm2015/src/sam-senior/models/card-credential.js +7 -0
  83. package/esm2015/src/sam-senior/models/visit-situation.js +8 -0
  84. package/esm2015/src/sam-senior/models/visitor-situation.js +10 -0
  85. package/esm2015/src/sam-senior/models/visitor.js +23 -0
  86. package/esm2015/src/sam-senior/sam-senior.module.js +75 -0
  87. package/esm2015/src/utils/build-form-field.js +28 -0
  88. package/esm5/index.js +9 -1
  89. package/esm5/seniorsistemas-yms-integration.js +48 -38
  90. package/esm5/src/devices/balancas/balancas.service.js +4 -1
  91. package/esm5/src/devices/balancas/visualiar-balanca/visualizar-balanca.component.js +8 -25
  92. package/esm5/src/devices/balancas/weightScale.js +1 -1
  93. package/esm5/src/devices/cancelas/cancelas.service.js +5 -1
  94. package/esm5/src/devices/cancelas/controlador-cancela/controlador-cancela.component.js +94 -21
  95. package/esm5/src/devices/cancelas/gate.js +1 -1
  96. package/esm5/src/devices/dock/dock.module.js +15 -0
  97. package/esm5/src/devices/dock/dock.service.js +25 -0
  98. package/esm5/src/erp-senior/components/nota-form/nota-form.component.js +24 -9
  99. package/esm5/src/erp-senior/core/entities/agenda/agenda.module.js +2 -2
  100. package/esm5/src/erp-senior/core/entities/cidade/cidade.module.js +2 -2
  101. package/esm5/src/erp-senior/core/entities/contrato-compra/contrato-compra.module.js +2 -2
  102. package/esm5/src/erp-senior/core/entities/contrato-compra-item/contrato-compra-item.module.js +2 -2
  103. package/esm5/src/erp-senior/core/entities/derivacao/derivacao.module.js +2 -2
  104. package/esm5/src/erp-senior/core/entities/devolucao/devolucao.module.js +2 -2
  105. package/esm5/src/erp-senior/core/entities/empresa/empresa.module.js +2 -2
  106. package/esm5/src/erp-senior/core/entities/estado/estado.module.js +2 -2
  107. package/esm5/src/erp-senior/core/entities/expedicao/expedicao.module.js +2 -2
  108. package/esm5/src/erp-senior/core/entities/familia-produto/familia-produto.js +5 -7
  109. package/esm5/src/erp-senior/core/entities/familia-produto/familia-produto.module.js +2 -2
  110. package/esm5/src/erp-senior/core/entities/filial/filial.module.js +2 -2
  111. package/esm5/src/erp-senior/core/entities/log-integracao/log-integracao.module.js +2 -2
  112. package/esm5/src/erp-senior/core/entities/motorista/motorista.js +1 -1
  113. package/esm5/src/erp-senior/core/entities/ordem-compra/ordem-compra.module.js +7 -2
  114. package/esm5/src/erp-senior/core/entities/pais/pais.module.js +2 -2
  115. package/esm5/src/erp-senior/core/entities/pedido-venda/pedido-venda.module.js +2 -2
  116. package/esm5/src/erp-senior/core/entities/pedido-venda-item/pedido-venda-item.module.js +2 -2
  117. package/esm5/src/erp-senior/core/entities/pessoa/pessoa.module.js +2 -2
  118. package/esm5/src/erp-senior/core/entities/pessoa-endereco/pessoa-endereco-dto.js +1 -5
  119. package/esm5/src/erp-senior/core/entities/pessoa-endereco/pessoa-endereco.js +1 -7
  120. package/esm5/src/erp-senior/core/entities/pessoa-endereco/pessoa-endereco.module.js +2 -2
  121. package/esm5/src/erp-senior/core/entities/pessoa-fisica/pessoa-fisica.module.js +2 -2
  122. package/esm5/src/erp-senior/core/entities/pessoa-juridica/pessoa-juridica.module.js +2 -2
  123. package/esm5/src/erp-senior/core/entities/processo-avulso/processo-avulso.module.js +7 -2
  124. package/esm5/src/erp-senior/core/entities/produto/produto.js +1 -9
  125. package/esm5/src/erp-senior/core/entities/produto/produto.module.js +2 -2
  126. package/esm5/src/erp-senior/core/entities/recebimento-contrato/recebimento.module.js +7 -2
  127. package/esm5/src/erp-senior/core/entities/recebimento-ordem-compra/recebimento-ordem-compra.module.js +11 -12
  128. package/esm5/src/erp-senior/core/entities/royalty/royalty.module.js +2 -2
  129. package/esm5/src/erp-senior/core/entities/safra/safra.module.js +2 -2
  130. package/esm5/src/erp-senior/core/entities/transgenia/transgenia.js +1 -1
  131. package/esm5/src/erp-senior/core/entities/transportadora/transportadora.module.js +2 -2
  132. package/esm5/src/erp-senior/core/entities/unidade-medida/unidade-medida.module.js +2 -2
  133. package/esm5/src/erp-senior/core/verifica-nota-fiscal/verificaNotaFiscal.js +9 -1
  134. package/esm5/src/erp-senior/devolucao/form/devolucao-form.component.js +12 -7
  135. package/esm5/src/erp-senior/expedicao/form/expedicao-form.component.js +15 -21
  136. package/esm5/src/erp-senior/processo-avulso/form/processo-avulso-form.component.js +7 -2
  137. package/esm5/src/erp-senior/recebimento/contrato-form/contrato-form.component.js +21 -4
  138. package/esm5/src/erp-senior/recebimento/form/recebimento-form.component.js +244 -203
  139. package/esm5/src/erp-senior/recebimento-ordem-compra/form/recebimento-ordem-compra-form.component.js +29 -20
  140. package/esm5/src/erp-senior/recebimento-ordem-compra/ordem-compra-form/ordem-compra-form.component.js +14 -4
  141. package/esm5/src/sam-senior/components/credencial-form/credencial-form.component.js +144 -0
  142. package/esm5/src/sam-senior/components/scheduling/lobby.service.js +25 -0
  143. package/esm5/src/sam-senior/components/scheduling/scheduling.component.js +199 -0
  144. package/esm5/src/sam-senior/components/scheduling/shechuling.service.js +43 -0
  145. package/esm5/src/sam-senior/components/visited-info/visited-info.component.js +56 -0
  146. package/esm5/src/sam-senior/components/visited-info/visited-info.service.js +29 -0
  147. package/esm5/src/sam-senior/components/visitor-edit/visitor-edit-form/visitante-form/visitor-edit-form.component.js +87 -0
  148. package/esm5/src/sam-senior/components/visitor-edit/visitor-edit-list/visitor-edit-list.component.js +384 -0
  149. package/esm5/src/sam-senior/components/visitor-list/visitor-list.component.js +82 -0
  150. package/esm5/src/sam-senior/components/visitor-list/visitor-list.service.js +29 -0
  151. package/esm5/src/sam-senior/components/visitor-list.module.js +37 -0
  152. package/esm5/src/sam-senior/core/entity-service.js +107 -0
  153. package/esm5/src/sam-senior/core/lookup.js +229 -0
  154. package/esm5/src/sam-senior/core/utils.js +28 -0
  155. package/esm5/src/sam-senior/entities/credential-card-dto.js +13 -0
  156. package/esm5/src/sam-senior/entities/lobby-dto.js +7 -0
  157. package/esm5/src/sam-senior/entities/scheduling-dto.js +7 -0
  158. package/esm5/src/sam-senior/entities/scheduling-visitors.js +7 -0
  159. package/esm5/src/sam-senior/entities/scheduling.js +30 -0
  160. package/esm5/src/sam-senior/entities/visited.js +7 -0
  161. package/esm5/src/sam-senior/entities/visitor-credentials-dto.js +8 -0
  162. package/esm5/src/sam-senior/entities/visitor-dto.js +1 -0
  163. package/esm5/src/sam-senior/entities/visitor-situation.js +10 -0
  164. package/esm5/src/sam-senior/form/form-sam.component.js +64 -0
  165. package/esm5/src/sam-senior/models/card-credential.js +7 -0
  166. package/esm5/src/sam-senior/models/visit-situation.js +8 -0
  167. package/esm5/src/sam-senior/models/visitor-situation.js +10 -0
  168. package/esm5/src/sam-senior/models/visitor.js +32 -0
  169. package/esm5/src/sam-senior/sam-senior.module.js +76 -0
  170. package/esm5/src/utils/build-form-field.js +29 -0
  171. package/fesm2015/seniorsistemas-yms-integration.js +2763 -1193
  172. package/fesm2015/seniorsistemas-yms-integration.js.map +1 -1
  173. package/fesm5/seniorsistemas-yms-integration.js +2888 -1169
  174. package/fesm5/seniorsistemas-yms-integration.js.map +1 -1
  175. package/index.d.ts +7 -0
  176. package/package.json +3 -3
  177. package/seniorsistemas-yms-integration.d.ts +47 -37
  178. package/seniorsistemas-yms-integration.metadata.json +1 -1
  179. package/src/devices/balancas/balancas.service.d.ts +1 -0
  180. package/src/devices/balancas/visualiar-balanca/visualizar-balanca.component.d.ts +2 -11
  181. package/src/devices/balancas/weightScale.d.ts +2 -2
  182. package/src/devices/cancelas/cancelas.service.d.ts +1 -0
  183. package/src/devices/cancelas/controlador-cancela/controlador-cancela.component.d.ts +12 -8
  184. package/src/devices/cancelas/gate.d.ts +2 -0
  185. package/src/devices/dock/dock.module.d.ts +2 -0
  186. package/src/devices/dock/dock.service.d.ts +10 -0
  187. package/src/erp-senior/components/nota-form/nota-form.component.d.ts +7 -1
  188. package/src/erp-senior/core/entities/motorista/motorista.d.ts +3 -0
  189. package/src/erp-senior/core/entities/pessoa-endereco/pessoa-endereco-dto.d.ts +2 -0
  190. package/src/erp-senior/core/entities/pessoa-endereco/pessoa-endereco.d.ts +2 -0
  191. package/src/erp-senior/core/entities/transgenia/transgenia.d.ts +2 -0
  192. package/src/erp-senior/core/verifica-nota-fiscal/verificaNotaFiscal.d.ts +2 -0
  193. package/src/erp-senior/devolucao/form/devolucao-form.component.d.ts +2 -0
  194. package/src/erp-senior/processo-avulso/form/processo-avulso-form.component.d.ts +2 -0
  195. package/src/erp-senior/recebimento/contrato-form/contrato-form.component.d.ts +10 -4
  196. package/src/erp-senior/recebimento/form/recebimento-form.component.d.ts +25 -10
  197. package/src/erp-senior/recebimento-ordem-compra/form/recebimento-ordem-compra-form.component.d.ts +4 -2
  198. package/src/erp-senior/recebimento-ordem-compra/ordem-compra-form/ordem-compra-form.component.d.ts +6 -2
  199. package/src/sam-senior/components/credencial-form/credencial-form.component.d.ts +29 -0
  200. package/src/sam-senior/components/scheduling/lobby.service.d.ts +9 -0
  201. package/src/sam-senior/components/scheduling/scheduling.component.d.ts +43 -0
  202. package/src/sam-senior/components/scheduling/shechuling.service.d.ts +14 -0
  203. package/src/sam-senior/components/visited-info/visited-info.component.d.ts +15 -0
  204. package/src/sam-senior/components/visited-info/visited-info.service.d.ts +10 -0
  205. package/src/sam-senior/components/visitor-edit/visitor-edit-form/visitante-form/visitor-edit-form.component.d.ts +22 -0
  206. package/src/sam-senior/components/visitor-edit/visitor-edit-list/visitor-edit-list.component.d.ts +56 -0
  207. package/src/sam-senior/components/visitor-list/visitor-list.component.d.ts +16 -0
  208. package/src/sam-senior/components/visitor-list/visitor-list.service.d.ts +10 -0
  209. package/src/sam-senior/components/visitor-list.module.d.ts +5 -0
  210. package/src/sam-senior/core/entity-service.d.ts +35 -0
  211. package/src/sam-senior/core/lookup.d.ts +38 -0
  212. package/src/sam-senior/core/utils.d.ts +18 -0
  213. package/src/sam-senior/entities/credential-card-dto.d.ts +12 -0
  214. package/src/sam-senior/entities/lobby-dto.d.ts +5 -0
  215. package/src/sam-senior/entities/scheduling-dto.d.ts +11 -0
  216. package/src/sam-senior/entities/scheduling-visitors.d.ts +6 -0
  217. package/src/sam-senior/entities/scheduling.d.ts +12 -0
  218. package/src/sam-senior/entities/visited.d.ts +4 -0
  219. package/src/sam-senior/entities/visitor-credentials-dto.d.ts +6 -0
  220. package/src/sam-senior/entities/visitor-dto.d.ts +10 -0
  221. package/src/sam-senior/entities/visitor-situation.d.ts +8 -0
  222. package/src/sam-senior/form/form-sam.component.d.ts +18 -0
  223. package/src/sam-senior/models/card-credential.d.ts +16 -0
  224. package/src/sam-senior/models/visit-situation.d.ts +6 -0
  225. package/src/sam-senior/models/visitor-situation.d.ts +8 -0
  226. package/src/sam-senior/models/visitor.d.ts +24 -0
  227. package/src/sam-senior/sam-senior.module.d.ts +6 -0
  228. package/src/utils/build-form-field.d.ts +9 -0
@@ -147,26 +147,6 @@ var ExpedicaoFormComponent = /** @class */ (function () {
147
147
  this.setTransportadora(this.agenda.externalTenant.cnpj);
148
148
  }
149
149
  this.totalEixosComposicao = this.agenda && this.agenda.veiculo ? this.agenda.veiculo.eixos || 0 : 0;
150
- var statusAgenda = [
151
- "AGUARDANDO_CONFIRMACAO_SOLICITANTE",
152
- "AGENDADO",
153
- "AGUARDANDO_CONFIRMACAO",
154
- "EM_EXECUCAO",
155
- "REJEITADO_POR_VALIDACAO",
156
- ];
157
- if (this.agenda && !statusAgenda.includes(this.agenda.status)) {
158
- this.formGroup.disable();
159
- this.disableButtonSave = true;
160
- }
161
- if (this.agenda && this.agenda.createdByErp) {
162
- this.formGroup.get("filial").disable();
163
- this.formGroup.get("transportadora").disable();
164
- this.formGroup.get("clienteRemessa").disable();
165
- this.formGroup.get("clienteFaturamento").disable();
166
- this.pedidoVendaForm.disable();
167
- this.itemFormGroup.disable();
168
- this.disableOrdersButtons = true;
169
- }
170
150
  this.setPedidosValueChanges();
171
151
  this.erpProcessService.current.subscribe(function (message) { return _this.erpProcessData = message; });
172
152
  this.erpFormConfigService.current.subscribe(function (message) { return _this.enableRevalidation = message; });
@@ -300,6 +280,20 @@ var ExpedicaoFormComponent = /** @class */ (function () {
300
280
  _this.hasChangeService.hasChange(_this.agenda.id);
301
281
  }
302
282
  });
283
+ var statusAgenda = ["AGUARDANDO_CONFIRMACAO_SOLICITANTE", "AGENDADO", "AGUARDANDO_CONFIRMACAO", "REJEITADO_POR_VALIDACAO"];
284
+ if (this.agenda && !statusAgenda.includes(this.agenda.status) || !this.permissions.editar) {
285
+ this.formGroup.disable();
286
+ this.disableButtonSave = true;
287
+ }
288
+ if (this.agenda && this.agenda.createdByErp) {
289
+ this.formGroup.get("filial").disable();
290
+ this.formGroup.get("transportadora").disable();
291
+ this.formGroup.get("clienteRemessa").disable();
292
+ this.formGroup.get("clienteFaturamento").disable();
293
+ this.pedidoVendaForm.disable();
294
+ this.itemFormGroup.disable();
295
+ this.disableOrdersButtons = true;
296
+ }
303
297
  };
304
298
  ExpedicaoFormComponent.prototype.ngOnDestroy = function () {
305
299
  this.ngUnsubscribe.next();
@@ -1513,4 +1507,4 @@ var ExpedicaoFormComponent = /** @class */ (function () {
1513
1507
  return ExpedicaoFormComponent;
1514
1508
  }());
1515
1509
  export { ExpedicaoFormComponent };
1516
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwZWRpY2FvLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHNlbmlvcnNpc3RlbWFzL3ltcy1pbnRlZ3JhdGlvbi8iLCJzb3VyY2VzIjpbInNyYy9lcnAtc2VuaW9yL2V4cGVkaWNhby9mb3JtL2V4cGVkaWNhby1mb3JtLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ2hFLE9BQU8sRUFFTCxTQUFTLEVBQ1QsS0FBSyxFQUdMLFdBQVcsRUFDWCxTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLFdBQVcsRUFDWCxXQUFXLEVBQ1gsU0FBUyxFQUNULFVBQVUsR0FHWCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUMxRSxPQUFPLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzFELE9BQU8sS0FBSyxPQUFPLE1BQU0sUUFBUSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3pELE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsU0FBUyxHQUFHLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDdkYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDhC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N3JEUTtRQUFSLEtBQUssRUFBRTswQ0FBaUIsTUFBTTswREFBQztJQUN2QjtRQUFSLEtBQUssRUFBRTs7K0RBQThCO0lBR3RDO1FBREMsU0FBUyxDQUFDLGdCQUFnQixDQUFDOzBDQUNMLFdBQVc7a0VBQU07SUFHeEM7UUFEQyxTQUFTLENBQUMsa0JBQWtCLENBQUM7MENBQ0wsV0FBVztvRUFBTTtJQXZIL0Isc0JBQXNCO1FBTGxDLFNBQVMsQ0FBQztZQUNULFFBQVEsRUFBRSxnQkFBZ0I7WUFDMUIsb3hiQUE4Qzs7U0FFL0MsQ0FBQztpREErSDRCLGdCQUFnQjtZQUMxQixNQUFNO1lBQ1AsY0FBYztZQUNMLGNBQWM7WUFDakIsV0FBVztZQUNiLGdCQUFnQjtZQUNYLGNBQWM7WUFDVix5QkFBeUI7WUFDL0IsWUFBWTtZQUNYLGFBQWE7WUFDYixhQUFhO1lBQ0wscUJBQXFCO1lBQ3hCLGtCQUFrQjtZQUNkLHNCQUFzQjtZQUMvQixhQUFhO1lBQ2xCLCtCQUErQjtZQUNwQixtQkFBbUI7WUFDckIsaUJBQWlCO1lBQ2Qsb0JBQW9CO1lBQ3hCLGdCQUFnQjtPQWpKakMsc0JBQXNCLENBOHlEbEM7SUFBRCw2QkFBQztDQUFBLEFBOXlERCxJQTh5REM7U0E5eURZLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN0YXR1c0FnZW5kYSB9IGZyb20gXCIuLy4uLy4uL2NvcmUvZW51bXMvc3RhdHVzLWFnZW5kYVwiO1xuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQge1xuICBGb3JtQnVpbGRlcixcbiAgRm9ybUNvbnRyb2wsXG4gIEZvcm1Hcm91cCxcbiAgVmFsaWRhdG9ycyxcbiAgRm9ybUFycmF5LFxuICBBYnN0cmFjdENvbnRyb2wsXG59IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tIFwiQG5neC10cmFuc2xhdGUvY29yZVwiO1xuaW1wb3J0IHsgRmllbGRUeXBlLCBGb3JtRmllbGQgfSBmcm9tIFwiQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50c1wiO1xuaW1wb3J0IHsgSG90a2V5LCBIb3RrZXlzU2VydmljZSB9IGZyb20gXCJhbmd1bGFyMi1ob3RrZXlzXCI7XG5pbXBvcnQgKiBhcyBfbW9tZW50IGZyb20gXCJtb21lbnRcIjtcbmltcG9ydCB7IE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSBcInByaW1lbmcvY29tcG9uZW50cy9jb21tb24vbWVzc2FnZXNlcnZpY2VcIjtcbmltcG9ydCB7IGZvcmtKb2luLCBvZiwgU3ViamVjdCwgdGhyb3dFcnJvciB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBjb25jYXRNYXAsIGZpbmFsaXplLCBtYXAsIHRha2VVbnRpbCwgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcbmltcG9ydCB7IEZpZWxkQ3VzdG9taXphdGlvblNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvZmllbGQtY3VzdG9taXphdGlvbi5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBGb2N1c1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvZm9jdXMuc2VydmljZVwiO1xuaW1wb3J0IHtcbiAgaXNWYWxpZEZpbHRlcixcbiAgbWVyZ2VVbmlxdWUsXG4gIHVzZXJDYW5WaXN1YWxpemUsXG59IGZyb20gXCIuLi8uLi8uLi91dGlscy91dGlsc1wiO1xuaW1wb3J0IHsgQWdlbmRhIH0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvYWdlbmRhL2FnZW5kYVwiO1xuaW1wb3J0IHsgQWdlbmRhU2VydmljZSB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL2FnZW5kYS9hZ2VuZGEuc2VydmljZVwiO1xuaW1wb3J0IHtcbiAgRXhwZWRpY2FvLFxuICBPcmRlbVZlbmRhSXRlbSxcbn0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvZXhwZWRpY2FvL2V4cGVkaWNhb1wiO1xuaW1wb3J0IHsgRXhwZWRpY2FvU2VydmljZSB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL2V4cGVkaWNhby9leHBlZGljYW8uc2VydmljZVwiO1xuaW1wb3J0IHsgRmlsaWFsIH0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvZmlsaWFsL2ZpbGlhbFwiO1xuaW1wb3J0IHtcbiAgRmlsaWFsU2VydmljZSxcbiAgUGVzcXVpc2FyRmlsaWFpc0lucHV0LFxufSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy9maWxpYWwvZmlsaWFsLnNlcnZpY2VcIjtcbmltcG9ydCB7IFBlZGlkb1ZlbmRhU2VydmljZSB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL3BlZGlkby12ZW5kYS9wZWRpZG8tdmVuZGEuc2VydmljZVwiO1xuaW1wb3J0IHsgUGVzc29hIH0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvcGVzc29hL3Blc3NvYVwiO1xuaW1wb3J0IHsgUGVzc29hU2VydmljZSB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL3Blc3NvYS9wZXNzb2Euc2VydmljZVwiO1xuaW1wb3J0IHsgVHJhbnNwb3J0YWRvcmFTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvdHJhbnNwb3J0YWRvcmEvdHJhbnNwb3J0YWRvcmEuc2VydmljZVwiO1xuaW1wb3J0IHsgRXhwZWRpY2FvQ2hlZ2FkYVZlaWN1bG9PdmVycmlkZSB9IGZyb20gXCIuLi9leHBlZGljYW8tY2hlZ2FkYS12ZWljdWxvLm92ZXJyaWRlXCI7XG5pbXBvcnQgeyBQZWRpZG9WZW5kYSB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL3BlZGlkby12ZW5kYS9wZWRpZG8tdmVuZGFcIjtcbmltcG9ydCB7IFBlZGlkb1ZlbmRhSXRlbSB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL3BlZGlkby12ZW5kYS1pdGVtL3BlZGlkby12ZW5kYS1pdGVtXCI7XG5pbXBvcnQgeyBQZWRpZG9WZW5kYUl0ZW1TZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvcGVkaWRvLXZlbmRhLWl0ZW0vcGVkaWRvLXZlbmRhLWl0ZW0uc2VydmljZVwiO1xuaW1wb3J0IHsgVHJhbnNwb3J0YWRvcmEgfSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy90cmFuc3BvcnRhZG9yYS90cmFuc3BvcnRhZG9yYVwiO1xuaW1wb3J0IHtcbiAgUGVkaWRvVmVuZGFEdG8sXG4gIFBlc3F1aXNhUGVkaWRvc1ZlbmRhRHRvLFxufSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy9wZWRpZG8tdmVuZGEvcGVkaWRvLXZlbmRhLWR0b1wiO1xuaW1wb3J0IHsgb25Mb29rdXBSZXF1ZXN0LCBvblNlYXJjaFJlcXVlc3QgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvbG9va3VwLXV0aWxzXCI7XG5pbXBvcnQgeyBDb25maXJtYXRpb25TZXJ2aWNlLCBTb3J0TWV0YSB9IGZyb20gXCJwcmltZW5nL2FwaVwiO1xuaW1wb3J0IHsgRXJwUHJvY2Vzc0RhdGEgfSBmcm9tIFwiLi4vLi4vY29yZS9lcnAtcHJvY2Vzcy1kYXRhL2VycC1wcm9jZXNzLWRhdGFcIjtcbmltcG9ydCB7IEVycFByb2Nlc3NTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2NvcmUvZXJwLXByb2Nlc3MtZGF0YS9lcnAtcHJvY2Vzcy1zZXJ2aWNlXCI7XG5pbXBvcnQgeyBFcnBGb3JtQ29uZmlnU2VydmljZSB9IGZyb20gXCIuLi8uLi9jb3JlL2VycC1mb3JtLWNvbmZpZy9lcnAtZm9ybS1jb25maWctc2VydmljZVwiO1xuaW1wb3J0IHsgSGFzQ2hhbmdlU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvaGFzLWNoYW5nZS9oYXMtY2hhbmdlLXNlcnZpY2UnO1xuXG5jb25zdCBtb21lbnQgPSBfbW9tZW50O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwiZXhwZWRpY2FvLWZvcm1cIixcbiAgdGVtcGxhdGVVcmw6IFwiLi9leHBlZGljYW8tZm9ybS5jb21wb25lbnQuaHRtbFwiLFxuICBzdHlsZVVybHM6IFtcIi4uLy4uL2VycC1zZW5pb3Iuc2Nzc1wiXSxcbn0pXG5leHBvcnQgY2xhc3MgRXhwZWRpY2FvRm9ybUNvbXBvbmVudFxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0XG57XG4gIHB1YmxpYyBsb2NhbGVDb25maWc6IGFueSA9IHt9O1xuICBwdWJsaWMgY3VycmVuY3lMb2NhbGVPcHRpb25zOiBhbnkgPSB7fTtcbiAgcHVibGljIHBlcm1pc3Npb25zOiBhbnkgPSB7fTtcbiAgcHVibGljIGFsbFBlcm1pc3Npb25zOiBhbnkgPSB7fTtcbiAgcHVibGljIHBlZGlkb0F0dWFsOiBGb3JtR3JvdXA7XG5cbiAgcHVibGljIGZvcm1Hcm91cDogRm9ybUdyb3VwO1xuICBwdWJsaWMgcGVkaWRvVmVuZGFGb3JtOiBGb3JtR3JvdXA7XG4gIHB1YmxpYyBpdGVtRm9ybUdyb3VwOiBGb3JtR3JvdXA7XG4gIHB1YmxpYyBsb2FkaW5nOiBib29sZWFuO1xuICBwdWJsaWMgbWFpblBhbmVsQ29sbGFwc2VkID0gZmFsc2U7XG4gIHB1YmxpYyB2aXNpYmxlRGlhbG9nID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBmb3JtQ2FycmVnYWRvID0gZmFsc2U7XG5cbiAgcHVibGljIGNsaWVudGVGYXR1cmFtZW50b0xvb2t1cFN1Z2dlc3Rpb25zOiBQZXNzb2FbXTtcbiAgcHVibGljIGNsaWVudGVGYXR1cmFtZW50b0xvb2t1cERpc3BsYXlGaWVsZHMgPSBbXCJjb2RpZ29cIiwgXCJub21lXCIsIFwiY3BmQ25walwiXTtcbiAgcHVibGljIGNsaWVudGVGYXR1cmFtZW50b0FkdmFuY2VkRGlzcGxheUZpZWxkcyA9IFtcImlkXCIsIFwiY29kaWdvXCIsIFwibm9tZVwiXTtcbiAgcHVibGljIGNsaWVudGVGYXR1cmFtZW50b0xvb2t1cFNlcGFyYXRvciA9IFwiIC0gXCI7XG4gIHB1YmxpYyBjbGllbnRlRmF0dXJhbWVudG9TZWFyY2hGaWVsZHM6IEZvcm1GaWVsZFtdO1xuICBwdWJsaWMgY2xpZW50ZUZhdHVyYW1lbnRvU2VhcmNoR3JpZEZpZWxkczogRm9ybUZpZWxkW107XG4gIHB1YmxpYyBjbGllbnRlRmF0dXJhbWVudG9TZWFyY2hHcmlkRGF0YTogUGVzc29hW107XG4gIHB1YmxpYyBjbGllbnRlRmF0dXJhbWVudG9TZWFyY2hUb3RhbFJlY29yZHM6IG51bWJlcjtcblxuICBwdWJsaWMgY2xpZW50ZVJlbWVzc2FMb29rdXBTdWdnZXN0aW9uczogUGVzc29hW107XG4gIHB1YmxpYyBjbGllbnRlUmVtZXNzYUxvb2t1cERpc3BsYXlGaWVsZHMgPSBbXCJjb2RpZ29cIiwgXCJub21lXCIsIFwiY3BmQ25walwiXTtcbiAgcHVibGljIGNsaWVudGVSZW1lc3NhQWR2YW5jZWREaXNwbGF5RmllbGRzID0gW1wiaWRcIiwgXCJjb2RpZ29cIiwgXCJub21lXCJdO1xuICBwdWJsaWMgY2xpZW50ZVJlbWVzc2FMb29rdXBTZXBhcmF0b3IgPSBcIiAtIFwiO1xuICBwdWJsaWMgY2xpZW50ZVJlbWVzc2FTZWFyY2hGaWVsZHM6IEZvcm1GaWVsZFtdO1xuICBwdWJsaWMgY2xpZW50ZVJlbWVzc2FTZWFyY2hHcmlkRmllbGRzOiBGb3JtRmllbGRbXTtcbiAgcHVibGljIGNsaWVudGVSZW1lc3NhU2VhcmNoR3JpZERhdGE6IFBlc3NvYVtdO1xuICBwdWJsaWMgY2xpZW50ZVJlbWVzc2FTZWFyY2hUb3RhbFJlY29yZHM6IG51bWJlcjtcblxuICBwdWJsaWMgZmlsaWFsTG9va3VwU3VnZ2VzdGlvbnM6IEZpbGlhbFtdO1xuICBwdWJsaWMgZmlsaWFsTG9va3VwRGlzcGxheUZpZWxkcyA9IFtcImNvZGlnb1wiLCBcIm5vbWVcIl07XG4gIHB1YmxpYyBmaWxpYWxBZHZhbmNlZERpc3BsYXlGaWVsZHMgPSBbXCJpZFwiLCBcImNvZGlnb1wiLCBcIm5vbWVcIl07XG4gIHB1YmxpYyBmaWxpYWxMb29rdXBTZXBhcmF0b3IgPSBcIiAtIFwiO1xuICBwdWJsaWMgZmlsaWFsU2VhcmNoRmllbGRzOiBGb3JtRmllbGRbXTtcbiAgcHVibGljIGZpbGlhbFNlYXJjaEdyaWRGaWVsZHM6IEZvcm1GaWVsZFtdO1xuICBwdWJsaWMgZmlsaWFsU2VhcmNoR3JpZERhdGE6IEZpbGlhbFtdO1xuICBwdWJsaWMgZmlsaWFsU2VhcmNoVG90YWxSZWNvcmRzOiBudW1iZXI7XG5cbiAgcHVibGljIHRyYW5zcG9ydGFkb3JhTG9va3VwU3VnZ2VzdGlvbnM6IFRyYW5zcG9ydGFkb3JhW107XG4gIHB1YmxpYyB0cmFuc3BvcnRhZG9yYUxvb2t1cERpc3BsYXlGaWVsZHMgPSBbXG4gICAgXCJjb2RpZ29cIixcbiAgICBcInBlc3NvYS5ub21lXCIsXG4gICAgXCJwZXNzb2EuY3BmQ25walwiLFxuICBdO1xuICBwdWJsaWMgdHJhbnNwb3J0YWRvcmFBZHZhbmNlZERpc3BsYXlGaWVsZHMgPSBbXG4gICAgXCJpZFwiLFxuICAgIFwiY29kaWdvXCIsXG4gICAgXCJwZXNzb2Eubm9tZVwiLFxuICAgIFwicGVzc29hLmNwZkNucGpcIixcbiAgXTtcbiAgcHVibGljIHRyYW5zcG9ydGFkb3JhTG9va3VwU2VwYXJhdG9yID0gXCIgLSBcIjtcbiAgcHVibGljIHRyYW5zcG9ydGFkb3JhU2VhcmNoRmllbGRzOiBGb3JtRmllbGRbXTtcbiAgcHVibGljIHRyYW5zcG9ydGFkb3JhU2VhcmNoR3JpZEZpZWxkczogRm9ybUZpZWxkW107XG4gIHB1YmxpYyB0cmFuc3BvcnRhZG9yYVNlYXJjaEdyaWREYXRhOiBUcmFuc3BvcnRhZG9yYVtdO1xuICBwdWJsaWMgdHJhbnNwb3J0YWRvcmFTZWFyY2hUb3RhbFJlY29yZHM6IG51bWJlcjtcblxuICBwdWJsaWMgcGVkaWRvVmVuZGFMb29rdXBTdWdnZXN0aW9uczogUGVkaWRvVmVuZGFbXTtcbiAgcHVibGljIHBlZGlkb1ZlbmRhTG9va3VwRGlzcGxheUZpZWxkcyA9IFtcIm51bWVyb1wiLCBcImNsaWVudGVcIl07XG4gIHB1YmxpYyBwZWRpZG9WZW5kYUFkdmFuY2VkRGlzcGxheUZpZWxkcyA9IFtcbiAgICBcImlkXCIsXG4gICAgXCJudW1lcm9cIixcbiAgICBcImZpbGlhbC5ub21lXCIsXG4gICAgXCJmaWxpYWwuY29kaWdvXCIsXG4gICAgXCJwZXNzb2EuaWRcIixcbiAgICBcInBlc3NvYS5jb2RpZ29cIixcbiAgICBcInBlc3NvYS5ub21lXCIsXG4gIF07XG4gIHB1YmxpYyBwZWRpZG9WZW5kYUxvb2t1cFNlcGFyYXRvciA9IFwiIC0gXCI7XG4gIHB1YmxpYyBwZWRpZG9WZW5kYVNlYXJjaEZpZWxkczogRm9ybUZpZWxkW107XG4gIHB1YmxpYyBwZWRpZG9WZW5kYVNlYXJjaEdyaWRGaWVsZHM6IEZvcm1GaWVsZFtdO1xuICBwdWJsaWMgcGVkaWRvVmVuZGFTZWFyY2hHcmlkRGF0YTogUGVkaWRvVmVuZGFbXTtcbiAgcHVibGljIHBlZGlkb1ZlbmRhU2VhcmNoVG90YWxSZWNvcmRzOiBudW1iZXI7XG5cbiAgcHVibGljIHBlZGlkb1ZlbmRhSXRlbUxvb2t1cFN1Z2dlc3Rpb25zOiBQZWRpZG9WZW5kYUl0ZW1bXTtcbiAgcHVibGljIHBlZGlkb1ZlbmRhSXRlbUxvb2t1cERpc3BsYXlGaWVsZHMgPSBbXCJzZXF1ZW5jaWFcIiwgXCJza3UuZGVzY3JpY2FvXCJdO1xuICBwdWJsaWMgcGVkaWRvVmVuZGFJdGVtQWR2YW5jZWREaXNwbGF5RmllbGRzID0gW1xuICAgIFwiaWRcIixcbiAgICBcInNlcXVlbmNpYVwiLFxuICAgIFwic2t1LmRlc2NyaWNhb1wiLFxuICBdO1xuICBwdWJsaWMgcGVkaWRvVmVuZGFJdGVtTG9va3VwU2VwYXJhdG9yID0gXCIgLSBcIjtcbiAgcHVibGljIHBlZGlkb1ZlbmRhSXRlbVNlYXJjaEZpZWxkczogRm9ybUZpZWxkW107XG4gIHB1YmxpYyBwZWRpZG9WZW5kYUl0ZW1TZWFyY2hHcmlkRmllbGRzOiBGb3JtRmllbGRbXTtcbiAgcHVibGljIHBlZGlkb1ZlbmRhSXRlbVNlYXJjaEdyaWREYXRhOiBQZWRpZG9WZW5kYUl0ZW1bXTtcbiAgcHVibGljIHBlZGlkb1ZlbmRhSXRlbVNlYXJjaFRvdGFsUmVjb3JkczogbnVtYmVyO1xuXG4gIHB1YmxpYyBhZ2VuZGFMb29rdXBTdWdnZXN0aW9uczogQWdlbmRhW107XG4gIHB1YmxpYyBhZ2VuZGFMb29rdXBEaXNwbGF5RmllbGRzID0gW1wiaWRcIiwgXCJkZXNjcmljYW9cIl07XG4gIHB1YmxpYyBhZ2VuZGFBZHZhbmNlZERpc3BsYXlGaWVsZHMgPSBbXCJpZFwiLCBcImRlc2NyaWNhb1wiXTtcbiAgcHVibGljIGFnZW5kYUxvb2t1cFNlcGFyYXRvciA9IFwiIC0gXCI7XG4gIHB1YmxpYyBhZ2VuZGFTZWFyY2hGaWVsZHM6IEZvcm1GaWVsZFtdO1xuICBwdWJsaWMgYWdlbmRhU2VhcmNoR3JpZEZpZWxkczogRm9ybUZpZWxkW107XG4gIHB1YmxpYyBhZ2VuZGFTZWFyY2hHcmlkRGF0YTogQWdlbmRhW107XG4gIHB1YmxpYyBhZ2VuZGFTZWFyY2hUb3RhbFJlY29yZHM6IG51bWJlcjtcblxuICBwdWJsaWMgZGlzYWJsZUJ1dHRvblNhdmU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwdWJsaWMgZGlzYWJsZU9yZGVyc0J1dHRvbnM6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIHB1YmxpYyB0b3RhbEVpeG9zQ29udHJhdGFkb3M6IG51bWJlciA9IDA7XG4gIHB1YmxpYyB0b3RhbEVpeG9zQ29tcG9zaWNhbzogbnVtYmVyID0gMDtcblxuICBwdWJsaWMgb3JkZXJzVmFsaWQgPSB0cnVlO1xuICBwdWJsaWMgc2F2ZUFuZEluaXRCdXR0b246IGFueTtcblxuICBASW5wdXQoKSBwcml2YXRlIGFnZW5kYTogQWdlbmRhO1xuICBASW5wdXQoKSBwcml2YXRlIHJldmFsaWRhY2FvOiBib29sZWFuO1xuXG4gIEBWaWV3Q2hpbGQoXCJjdXN0b21UZW1wbGF0ZVwiKVxuICBwdWJsaWMgY3VzdG9tVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgQFZpZXdDaGlsZChcImN1c3RvbUZvcm1GaWVsZHNcIilcbiAgcHVibGljIGN1c3RvbUZvcm1GaWVsZHM6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgcHJpdmF0ZSBuZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3QoKTsgIFxuICBwcml2YXRlIGVycFByb2Nlc3NEYXRhOiBFcnBQcm9jZXNzRGF0YTtcbiAgcHJpdmF0ZSBlbmFibGVSZXZhbGlkYXRpb246IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBleHBlZGljYW9TZXJ2aWNlOiBFeHBlZGljYW9TZXJ2aWNlLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSBtZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBob3RrZXlzU2VydmljZTogSG90a2V5c1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBmaWVsZEN1c3RvbWl6YXRpb246IEZpZWxkQ3VzdG9taXphdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmb2N1c1NlcnZpY2U6IEZvY3VzU2VydmljZSxcbiAgICBwcml2YXRlIHBlc3NvYVNlcnZpY2U6IFBlc3NvYVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmaWxpYWxTZXJ2aWNlOiBGaWxpYWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgdHJhbnNwb3J0YWRvcmFTZXJ2aWNlOiBUcmFuc3BvcnRhZG9yYVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwZWRpZG9WZW5kYVNlcnZpY2U6IFBlZGlkb1ZlbmRhU2VydmljZSxcbiAgICBwcml2YXRlIHBlZGlkb1ZlbmRhSXRlbVNlcnZpY2U6IFBlZGlkb1ZlbmRhSXRlbVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhZ2VuZGFTZXJ2aWNlOiBBZ2VuZGFTZXJ2aWNlLFxuICAgIHByaXZhdGUgb3ZlcnJpZGU6IEV4cGVkaWNhb0NoZWdhZGFWZWljdWxvT3ZlcnJpZGUsXG4gICAgcHJpdmF0ZSBjb25maXJtYXRpb25TZXJ2aWNlOiBDb25maXJtYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgZXJwUHJvY2Vzc1NlcnZpY2U6IEVycFByb2Nlc3NTZXJ2aWNlLFxuICAgIHByaXZhdGUgZXJwRm9ybUNvbmZpZ1NlcnZpY2U6IEVycEZvcm1Db25maWdTZXJ2aWNlLFxuICAgIHByaXZhdGUgaGFzQ2hhbmdlU2VydmljZTogSGFzQ2hhbmdlU2VydmljZVxuICApIHtcbiAgICB0aGlzLmZvcm1Hcm91cCA9IHRoaXMuZ2V0Rm9ybUdyb3VwKCk7XG4gICAgdGhpcy5wZWRpZG9WZW5kYUZvcm0gPSB0aGlzLmdldFBlZGlkb1ZlbmRhRm9ybSgpO1xuICAgIHRoaXMuaXRlbUZvcm1Hcm91cCA9IHRoaXMuZ2V0T3JkZW1WZW5kYUl0ZW1Gb3JtKCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5yb3V0ZS5kYXRhXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKGRhdGE6IGFueSkgPT4gdGhpcy5vblJvdXRlRGF0YUNoYW5nZShkYXRhKSk7XG5cbiAgICB0aGlzLnJvdXRlLnBhcmFtc1xuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKCh7IGFnZW5kYSB9KSA9PiB7XG4gICAgICAgIGlmIChhZ2VuZGEgIT0gXCJuZXdcIikge1xuICAgICAgICAgIHRoaXMuZ2V0RXhwZWRpY2FvKGFnZW5kYSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5idXNjYXJGaWxpYWwoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICB0aGlzLmNsaWVudGVGYXR1cmFtZW50b1NlYXJjaEZpZWxkcyA9IHRoaXMuZ2V0Q2xpZW50ZVNlYXJjaEZpZWxkcygpO1xuICAgIHRoaXMuY2xpZW50ZUZhdHVyYW1lbnRvU2VhcmNoR3JpZEZpZWxkcyA9IHRoaXMuZ2V0Q2xpZW50ZVNlYXJjaEdyaWRGaWVsZHMoKTtcblxuICAgIHRoaXMuY2xpZW50ZVJlbWVzc2FTZWFyY2hGaWVsZHMgPSB0aGlzLmdldENsaWVudGVTZWFyY2hGaWVsZHMoKTtcbiAgICB0aGlzLmNsaWVudGVSZW1lc3NhU2VhcmNoR3JpZEZpZWxkcyA9IHRoaXMuZ2V0Q2xpZW50ZVNlYXJjaEdyaWRGaWVsZHMoKTtcblxuICAgIHRoaXMuZmlsaWFsU2VhcmNoRmllbGRzID0gdGhpcy5nZXRGaWxpYWxTZWFyY2hGaWVsZHMoKTtcbiAgICB0aGlzLmZpbGlhbFNlYXJjaEdyaWRGaWVsZHMgPSB0aGlzLmdldEZpbGlhbFNlYXJjaEdyaWRGaWVsZHMoKTtcblxuICAgIHRoaXMudHJhbnNwb3J0YWRvcmFTZWFyY2hGaWVsZHMgPSB0aGlzLmdldFRyYW5zcG9ydGFkb3JhU2VhcmNoRmllbGRzKCk7XG4gICAgdGhpcy50cmFuc3BvcnRhZG9yYVNlYXJjaEdyaWRGaWVsZHMgPSB0aGlzLmdldFRyYW5zcG9ydGFkb3JhU2VhcmNoR3JpZEZpZWxkcygpO1xuXG4gICAgdGhpcy5wZWRpZG9WZW5kYVNlYXJjaEZpZWxkcyA9IHRoaXMuZ2V0UGVkaWRvVmVuZGFTZWFyY2hGaWVsZHMoKTtcbiAgICB0aGlzLnBlZGlkb1ZlbmRhU2VhcmNoR3JpZEZpZWxkcyA9IHRoaXMuZ2V0UGVkaWRvVmVuZGFTZWFyY2hHcmlkRmllbGRzKCk7XG5cbiAgICB0aGlzLnBlZGlkb1ZlbmRhSXRlbVNlYXJjaEZpZWxkcyA9IHRoaXMuZ2V0UGVkaWRvVmVuZGFJdGVtU2VhcmNoRmllbGRzKCk7XG4gICAgdGhpcy5wZWRpZG9WZW5kYUl0ZW1TZWFyY2hHcmlkRmllbGRzID0gdGhpcy5nZXRQZWRpZG9WZW5kYUl0ZW1TZWFyY2hHcmlkRmllbGRzKCk7XG5cbiAgICB0aGlzLmFnZW5kYVNlYXJjaEZpZWxkcyA9IHRoaXMuZ2V0QWdlbmRhU2VhcmNoRmllbGRzKCk7XG4gICAgdGhpcy5hZ2VuZGFTZWFyY2hHcmlkRmllbGRzID0gdGhpcy5nZXRBZ2VuZGFTZWFyY2hHcmlkRmllbGRzKCk7XG5cbiAgICB0aGlzLnNldEhvdGtleXMoKTtcblxuICAgIGlmICh0aGlzLmFnZW5kYSAmJiB0aGlzLmFnZW5kYS5leHRlcm5hbFRlbmFudCkge1xuICAgICAgdGhpcy5zZXRUcmFuc3BvcnRhZG9yYSh0aGlzLmFnZW5kYS5leHRlcm5hbFRlbmFudC5jbnBqKTtcbiAgICB9XG5cbiAgICB0aGlzLnRvdGFsRWl4b3NDb21wb3NpY2FvID0gdGhpcy5hZ2VuZGEgJiYgdGhpcy5hZ2VuZGEudmVpY3VsbyA/IHRoaXMuYWdlbmRhLnZlaWN1bG8uZWl4b3MgfHwgMCA6IDA7XG5cbiAgICBjb25zdCBzdGF0dXNBZ2VuZGEgPSBbXG4gICAgICBcIkFHVUFSREFORE9fQ09ORklSTUFDQU9fU09MSUNJVEFOVEVcIixcbiAgICAgIFwiQUdFTkRBRE9cIixcbiAgICAgIFwiQUdVQVJEQU5ET19DT05GSVJNQUNBT1wiLFxuICAgICAgXCJFTV9FWEVDVUNBT1wiLFxuICAgICAgXCJSRUpFSVRBRE9fUE9SX1ZBTElEQUNBT1wiLFxuICAgIF07XG5cbiAgICBpZiAodGhpcy5hZ2VuZGEgJiYgIXN0YXR1c0FnZW5kYS5pbmNsdWRlcyh0aGlzLmFnZW5kYS5zdGF0dXMpKSB7XG4gICAgICB0aGlzLmZvcm1Hcm91cC5kaXNhYmxlKCk7XG4gICAgICB0aGlzLmRpc2FibGVCdXR0b25TYXZlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5hZ2VuZGEgJiYgdGhpcy5hZ2VuZGEuY3JlYXRlZEJ5RXJwKSB7XG4gICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoXCJmaWxpYWxcIikuZGlzYWJsZSgpO1xuICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KFwidHJhbnNwb3J0YWRvcmFcIikuZGlzYWJsZSgpO1xuICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KFwiY2xpZW50ZVJlbWVzc2FcIikuZGlzYWJsZSgpO1xuICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KFwiY2xpZW50ZUZhdHVyYW1lbnRvXCIpLmRpc2FibGUoKTtcbiAgICAgIHRoaXMucGVkaWRvVmVuZGFGb3JtLmRpc2FibGUoKTtcbiAgICAgIHRoaXMuaXRlbUZvcm1Hcm91cC5kaXNhYmxlKCk7XG4gICAgICB0aGlzLmRpc2FibGVPcmRlcnNCdXR0b25zID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aGlzLnNldFBlZGlkb3NWYWx1ZUNoYW5nZXMoKTtcbiAgICB0aGlzLmVycFByb2Nlc3NTZXJ2aWNlLmN1cnJlbnQuc3Vic2NyaWJlKG1lc3NhZ2UgPT4gdGhpcy5lcnBQcm9jZXNzRGF0YSA9IG1lc3NhZ2UpOyAgICBcbiAgICB0aGlzLmVycEZvcm1Db25maWdTZXJ2aWNlLmN1cnJlbnQuc3Vic2NyaWJlKG1lc3NhZ2UgPT4gdGhpcy5lbmFibGVSZXZhbGlkYXRpb24gPSBtZXNzYWdlKTsgIFxuXG4gICAgdGhpcy5yZXZhbGlkYWNhb1RyYW5zcG9ydGFkb3JhICgpO1xuICAgIHRoaXMudmVyaWZpY2FTZVRlbUFsdGVyYWNhbygpO1xuICB9XG4gICAgICAgXG4gIHByaXZhdGUgdmVyaWZpY2FTZVRlbUFsdGVyYWNhbygpIHtcbiAgICB0aGlzLmZvcm1Hcm91cC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuZm9ybUNhcnJlZ2Fkbykge1xuICAgICAgICAgICAgdGhpcy5oYXNDaGFuZ2VTZXJ2aWNlLmhhc0NoYW5nZSh0aGlzLmFnZW5kYS5pZCk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmV2YWxpZGFjYW9UcmFuc3BvcnRhZG9yYSAoKSB7XG4gICAgdGhpcy5mb3JtR3JvdXAuZ2V0KFwidHJhbnNwb3J0YWRvcmFcIikudmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZSgoXykgPT4ge1xuICAgICAgY29uc3QgdHJhbnNwID0gdGhpcy5mb3JtR3JvdXAuZ2V0KFwidHJhbnNwb3J0YWRvcmFcIikudmFsdWU7XG4gICAgICBpZiAodGhpcy5lcnBQcm9jZXNzU2VydmljZSAmJiB0cmFuc3ApIHsgICAgICAgICAgICAgICAgXG4gICAgICAgICAgdGhpcy5lcnBQcm9jZXNzRGF0YS50cmFuc3BvcnRhZG9yYUlkID0gdHJhbnNwLmlkOyAgICAgICAgICBcbiAgICAgICAgICB0aGlzLmVycFByb2Nlc3NTZXJ2aWNlLmNoYW5nZURhdGEodGhpcy5lcnBQcm9jZXNzRGF0YSk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfSk7ICAgXG4gIH1cblxuICBwdWJsaWMgYWJyaXJQZWRpZG9WZW5kYShwZWRpZG9WZW5kYT86IFBlZGlkb1ZlbmRhKSB7XG4gICAgY29uc3QgYnV0dG9ucyA9IGRvY3VtZW50XG4gICAgICAuZ2V0RWxlbWVudEJ5SWQoXCJwZWRpZG9WZW5kYVwiKVxuICAgICAgLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiYnV0dG9uXCIpO1xuXG4gICAgaWYgKCFidXR0b25zLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucGVkaWRvVmVuZGFGb3JtLnBhdGNoVmFsdWUoeyBwZWRpZG9WZW5kYSB9KTtcbiAgICBidXR0b25zWzBdLmNsaWNrKCk7XG4gIH1cblxuICBwdWJsaWMgZXhjbHVpclBlZGlkb1ZlbmRhKGluZGV4OiBudW1iZXIpIHtcbiAgICAodGhpcy5mb3JtR3JvdXAuZ2V0KFwicGVkaWRvc1wiKSBhcyBGb3JtQXJyYXkpLnJlbW92ZUF0KGluZGV4KTtcbiAgfVxuXG4gIHB1YmxpYyBhYnJpclBlZGlkb1ZlbmRhSXRlbShcbiAgICBwZWRpZG86IEZvcm1Hcm91cCxcbiAgICBwZWRpZG9WZW5kYUl0ZW0/OiBPcmRlbVZlbmRhSXRlbVxuICApIHtcbiAgICB0aGlzLml0ZW1Gb3JtR3JvdXAucGF0Y2hWYWx1ZShcbiAgICAgIHBlZGlkb1ZlbmRhSXRlbSB8fCB7IGl0ZW06IHVuZGVmaW5lZCwgcXVhbnRpZGFkZTogMSB9XG4gICAgKTtcbiAgICB0aGlzLnBlZGlkb0F0dWFsID0gcGVkaWRvO1xuICAgIHRoaXMudmlzaWJsZURpYWxvZyA9IHRydWU7XG4gIH1cblxuICBwdWJsaWMgZXhjbHVpclBlZGlkb1ZlbmRhSXRlbShpZDogc3RyaW5nLCBwZWRpZG86IEZvcm1Hcm91cCkge1xuICAgIGNvbnN0IGluZGV4ID0gKFxuICAgICAgKHBlZGlkby5nZXQoXCJpdGVuc1wiKSBhcyBGb3JtQXJyYXkpLnZhbHVlIGFzIE9yZGVtVmVuZGFJdGVtW11cbiAgICApLmZpbmRJbmRleCgoaXRlbSkgPT4gaXRlbS5pdGVtLmlkID09PSBpZCk7XG4gICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgIChwZWRpZG8uZ2V0KFwiaXRlbnNcIikgYXMgRm9ybUFycmF5KS5yZW1vdmVBdChpbmRleCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNldFBlZGlkb3NWYWx1ZUNoYW5nZXMoKSB7XG4gICAgKHRoaXMuZm9ybUdyb3VwLmdldChcInBlZGlkb3NcIikgYXMgRm9ybUFycmF5KS52YWx1ZUNoYW5nZXNcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHBlZGlkb3NMZW5ndGggPSAodGhpcy5mb3JtR3JvdXAuZ2V0KFwicGVkaWRvc1wiKSBhcyBGb3JtQXJyYXkpXG4gICAgICAgICAgLmxlbmd0aDtcbiAgICAgICAgdGhpcy5vcmRlcnNWYWxpZCA9IHBlZGlkb3NMZW5ndGggPiAwO1xuICAgICAgICB0aGlzLmZvcm1Hcm91cFxuICAgICAgICAgIC5nZXQoXCJmaWxpYWxcIilcbiAgICAgICAgICBbcGVkaWRvc0xlbmd0aCA+PSAxID8gXCJkaXNhYmxlXCIgOiBcImVuYWJsZVwiXSgpO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc2VsZWNpb25hclBlZGlkb1ZlbmRhKHBlZGlkb1ZlbmRhOiBQZWRpZG9WZW5kYSkge1xuICAgIGNvbnN0IGNoZWNrT3JkZXJzID0gKG9yZGVyOiBhbnkpID0+IG9yZGVyLnBlZGlkb1ZlbmRhLmlkID09PSBwZWRpZG9WZW5kYS5pZDtcbiAgICBjb25zdCBwZWRpZG9zID0gdGhpcy5mb3JtR3JvdXAuZ2V0KFwicGVkaWRvc1wiKS52YWx1ZTtcblxuICAgIGlmIChwZWRpZG9zLmZpbmQoY2hlY2tPcmRlcnMpKSB7XG4gICAgICByZXR1cm4gdGhpcy5hZGRNZXNzYWdlKFxuICAgICAgICBcIndhcm5cIixcbiAgICAgICAgdGhpcy50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICBcInltcy5lcnAucGVkaWRvX3ZlbmRhX3NlYXJjaF9hbHJlYWR5X3NlbGVjdGVkX3N1bW1hcnlcIlxuICAgICAgICApLFxuICAgICAgICB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgIFwieW1zLmVycC5wZWRpZG9fdmVuZGFfc2VhcmNoX2FscmVhZHlfc2VsZWN0ZWRfZGV0YWlsXCJcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICAodGhpcy5mb3JtR3JvdXAuZ2V0KFwicGVkaWRvc1wiKSBhcyBGb3JtQXJyYXkpXG4gICAgLnB1c2godGhpcy5nZXRPcmRlbVZlbmRhRm9ybShwZWRpZG9WZW5kYSwgdHJ1ZSkpO1xuXG4gICAgaWYgKFxuICAgICAgISFwZWRpZG9WZW5kYSAmJlxuICAgICAgKHRoaXMuZm9ybUdyb3VwLmdldChcInBlZGlkb3NcIikgYXMgRm9ybUFycmF5KS5sZW5ndGggPT09IDEgJiZcbiAgICAgICF0aGlzLmZvcm1Hcm91cC5nZXQoXCJjbGllbnRlRmF0dXJhbWVudG9cIikudmFsdWVcbiAgICApIHtcbiAgICAgIHRoaXMuYnVzY2FyQ2xpZW50ZUFGYXR1cmFyKHBlZGlkb1ZlbmRhIGFzIGFueSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNlbGVjaW9uYXJQZWRpZG9WZW5kYUl0ZW0oKSB7XG4gICAgY29uc3QgaXRlbSA9IHRoaXMuaXRlbUZvcm1Hcm91cC52YWx1ZTtcbiAgICBjb25zdCBwZWRpZG8gPSB0aGlzLnBlZGlkb0F0dWFsLmdldChcIml0ZW5zXCIpLnZhbHVlO1xuICAgIGNvbnN0IGNoZWNrT3JkZXJJdGVucyA9IChvcmRlcjogYW55KSA9PiBvcmRlci5pdGVtLmlkID09PSBpdGVtLml0ZW0uaWQ7XG4gICAgaWYgKHBlZGlkbyAmJiBpdGVtICYmIGl0ZW0uaXRlbSAmJiBwZWRpZG8uZmluZChjaGVja09yZGVySXRlbnMpKVxuICAgICAgcmV0dXJuIHRoaXMuYWRkTWVzc2FnZShcbiAgICAgICAgXCJ3YXJuXCIsXG4gICAgICAgIHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgXCJ5bXMuZXJwLml0ZW1fcGVkaWRvX3ZlbmRhX3NlYXJjaF9hbHJlYWR5X3NlbGVjdGVkX3N1bW1hcnlcIlxuICAgICAgICApLFxuICAgICAgICB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgIFwieW1zLmVycC5pdGVtX3BlZGlkb192ZW5kYV9zZWFyY2hfYWxyZWFkeV9zZWxlY3RlZF9kZXRhaWxcIlxuICAgICAgICApXG4gICAgICApO1xuICAgIGNvbnN0IGZvcm0gPSB0aGlzLmdldE9yZGVtVmVuZGFJdGVtRm9ybSgpO1xuICAgIGZvcm0ucGF0Y2hWYWx1ZSh7IC4uLnRoaXMuaXRlbUZvcm1Hcm91cC52YWx1ZSB9KTtcbiAgICBpZiAoZm9ybS5nZXQoXCJpdGVtXCIpLnZhbHVlID09IHVuZGVmaW5lZCkgcmV0dXJuO1xuICAgICh0aGlzLnBlZGlkb0F0dWFsLmdldChcIml0ZW5zXCIpIGFzIEZvcm1BcnJheSkucHVzaChmb3JtKTtcbiAgICB0aGlzLnZpc2libGVEaWFsb2cgPSBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBzZWxlY2lvbmFyUGVkaWRvVmVuZGFJdGVtQXV0b21hdGljYW1lbnRlKFxuICAgIGl0ZW5zOiBhbnksXG4gICAgcGVkaWRvVmVuZGE6IGFueVxuICApIHtcbiAgICBpZiAoaXRlbnMgJiYgaXRlbnMubGVuZ3RoID09PSAxKSB7XG4gICAgICBjb25zdCBmb3JtID0gdGhpcy5nZXRPcmRlbVZlbmRhSXRlbUZvcm0oKTtcbiAgICAgIGNvbnN0IHBlZGlkb3MgPSB0aGlzLmdldFBlZGlkb3MoKTtcbiAgICAgIGNvbnN0IHBlZGlkb0F0dWFsOiBhbnkgPSBwZWRpZG9zLmZpbHRlcigocGVkaWRvOiBhbnkpID0+XG4gICAgICAgIHBlZGlkbyAmJiBwZWRpZG8udmFsdWUucGVkaWRvVmVuZGFcbiAgICAgICAgICA/IHBlZGlkby52YWx1ZS5wZWRpZG9WZW5kYS5pZCA9PT0gcGVkaWRvVmVuZGEuaWRcbiAgICAgICAgICA6IGZhbHNlXG4gICAgICApO1xuICAgICAgdGhpcy5pdGVtRm9ybUdyb3VwXG4gICAgICAgIC5nZXQoXCJpdGVtXCIpXG4gICAgICAgIC5zZXRWYWx1ZShpdGVucy5sZW5ndGggPT09IDEgPyBpdGVuc1swXSA6IHt9KTtcbiAgICAgIHRoaXMuaXRlbUZvcm1Hcm91cC5nZXQoXCJxdWFudGlkYWRlXCIpLnNldFZhbHVlKDEpO1xuICAgICAgZm9ybS5wYXRjaFZhbHVlKHsgLi4udGhpcy5pdGVtRm9ybUdyb3VwLnZhbHVlIH0pO1xuICAgICAgKHBlZGlkb0F0dWFsWzBdLmdldChcIml0ZW5zXCIpIGFzIEZvcm1BcnJheSkucHVzaChmb3JtKTtcbiAgICAgIHRoaXMudmlzaWJsZURpYWxvZyA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRQZWRpZG9zKCk6IEFic3RyYWN0Q29udHJvbFtdIHtcbiAgICByZXR1cm4gKHRoaXMuZm9ybUdyb3VwLmdldChcInBlZGlkb3NcIikgYXMgRm9ybUFycmF5KS5jb250cm9scztcbiAgfVxuXG4gIHB1YmxpYyBidWlsZFRva2VucyhpdGVuczogT3JkZW1WZW5kYUl0ZW1bXSkge1xuICAgIHJldHVybiBpdGVucy5tYXAoKGl0ZW06IGFueSkgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBpdGVtICYmIGl0ZW0uaXRlbSA/IGl0ZW0uaXRlbSA6IGl0ZW07XG4gICAgICBjb25zdCBwcm9kdXRvID0gdmFsdWUuc2t1ID8gdmFsdWUuc2t1IDogdmFsdWUucHJvZHV0bztcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlkOiB2YWx1ZS5pZCxcbiAgICAgICAgbGFiZWw6IGBQcm9kdXRvOiAke3Byb2R1dG8uZGVzY3JpY2FvfSwgU2VxdWVuY2lhOiAke3ZhbHVlLnNlcXVlbmNpYX1gLFxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgY29uc3QgaW5wdXRMaXN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJpbnB1dFwiKTtcbiAgICBjb25zdCBzZWxlY3RlZElucHV0ID0gQXJyYXkuZnJvbShpbnB1dExpc3QpLmZpbmQoKGY6IGFueSkgPT4gIWYuZGlzYWJsZWQpO1xuICAgIGlmIChzZWxlY3RlZElucHV0KSB7XG4gICAgICBzZWxlY3RlZElucHV0LmZvY3VzKCk7XG4gICAgfVxuXG4gICAgdGhpcy5vdmVycmlkZS5pbml0aWFsaXplKCk7XG4gICAgdGhpcy5zYXZlQW5kSW5pdEJ1dHRvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiaW5pdFwiKTtcblxuICAgIHRoaXMuZm9ybUdyb3VwLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuZm9ybUNhcnJlZ2Fkbykge1xuICAgICAgICB0aGlzLmhhc0NoYW5nZVNlcnZpY2UuaGFzQ2hhbmdlKHRoaXMuYWdlbmRhLmlkKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpO1xuICAgIHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpO1xuICAgIHRoaXMub3ZlcnJpZGUucmVtb3ZlKCk7XG4gIH1cblxuICBwdWJsaWMgc2V0SG90a2V5cygpIHtcbiAgICB0aGlzLmhvdGtleXNTZXJ2aWNlLmFkZChcbiAgICAgIG5ldyBIb3RrZXkoXG4gICAgICAgIFwiYWx0K3NoaWZ0K3NcIixcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLmlzTmV3KCkgfHwgdGhpcy5wZXJtaXNzaW9ucy5lZGl0YXIpIHRoaXMub25TYXZlKCk7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9LFxuICAgICAgICBbXCJJTlBVVFwiLCBcIlNFTEVDVFwiLCBcIlRFWFRBUkVBXCJdXG4gICAgICApXG4gICAgKTtcblxuICAgIHRoaXMuaG90a2V5c1NlcnZpY2UuYWRkKFxuICAgICAgbmV3IEhvdGtleShcbiAgICAgICAgXCJhbHQrc2hpZnQrY1wiLFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5vbkNhbmNlbCgpO1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSxcbiAgICAgICAgW1wiSU5QVVRcIiwgXCJTRUxFQ1RcIiwgXCJURVhUQVJFQVwiXVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgaXNOZXcoKSB7XG4gICAgcmV0dXJuICF0aGlzLmZvcm1Hcm91cC52YWx1ZS5pZDtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVTdWdnZXN0aW9ucyh2YWx1ZTogYW55KSB7XG4gICAgaWYgKHZhbHVlLmFnZW5kYSkge1xuICAgICAgdmFsdWUuYWdlbmRhLmxhYmVsID0gdGhpcy5nZXRTdWdnZXN0aW9uVmFsdWUoXG4gICAgICAgIFtcImlkXCIsIFwiZGVzY3JpY2FvXCJdLFxuICAgICAgICBcImFnZW5kYVwiLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgdGhpcy5hZ2VuZGFMb29rdXBTZXBhcmF0b3JcbiAgICAgICk7XG4gICAgICBpZiAodmFsdWUuYWdlbmRhLmxhYmVsLnRyaW0oKSA9PT0gdGhpcy5hZ2VuZGFMb29rdXBTZXBhcmF0b3IudHJpbSgpKSB7XG4gICAgICAgIGRlbGV0ZSB2YWx1ZS5hZ2VuZGEubGFiZWw7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldFN1Z2dlc3Rpb25WYWx1ZShcbiAgICBkaXNwbGF5RmllbGRzOiBzdHJpbmdbXSxcbiAgICBvd25lckVudGl0eTogc3RyaW5nLFxuICAgIHZhbHVlOiBhbnksXG4gICAgc2VwYXJhdG9yOiBzdHJpbmdcbiAgKSB7XG4gICAgcmV0dXJuIGRpc3BsYXlGaWVsZHNcbiAgICAgIC5tYXAoKGZpZWxkKSA9PiB0aGlzLmdldFByb3AodmFsdWUsIGAke293bmVyRW50aXR5fS4ke2ZpZWxkfWApKVxuICAgICAgLnJlZHVjZSgoYWNjOiBhbnksIHZhbDogYW55KSA9PiBgJHthY2N9JHtzZXBhcmF0b3J9JHt2YWx9YCk7XG4gIH1cblxuICBwdWJsaWMgb25Sb3V0ZURhdGFDaGFuZ2UoZGF0YTogYW55KSB7XG4gICAgY29uc3QgeyBjdXJyZW5jeVN5bWJvbCwgdGhvdXNhbmRzU2VwYXJhdG9yLCBkZWNpbWFsU2VwYXJhdG9yIH0gPVxuICAgICAgZGF0YS5sb2NhbGVDb25maWcubnVtYmVyO1xuXG4gICAgdGhpcy5sb2NhbGVDb25maWcgPSBkYXRhLmxvY2FsZUNvbmZpZztcbiAgICB0aGlzLmN1cnJlbmN5TG9jYWxlT3B0aW9ucyA9IHtcbiAgICAgIGFsaWduOiBcImxlZnRcIixcbiAgICAgIHByZWZpeDogY3VycmVuY3lTeW1ib2wsXG4gICAgICB0aG91c2FuZHM6IHRob3VzYW5kc1NlcGFyYXRvcixcbiAgICAgIGRlY2ltYWw6IGRlY2ltYWxTZXBhcmF0b3IsXG4gICAgfTtcbiAgICB0aGlzLnBlcm1pc3Npb25zID0gZGF0YS5hbGxQZXJtaXNzaW9ucy5leHBlZGljYW87XG4gICAgdGhpcy5hbGxQZXJtaXNzaW9ucyA9IGRhdGEuYWxsUGVybWlzc2lvbnM7XG4gICAgLy90aGlzLnZhbGlkYXRlVmlzdWFsaXphdGlvbigpO1xuICAgIGlmIChkYXRhLmVudGl0eSkge1xuICAgICAgY29uc3QgY2FuRWRpdCA9IHRoaXMucGVybWlzc2lvbnMuZWRpdGFyO1xuICAgICAgaWYgKCFjYW5FZGl0KSB0aGlzLmZvcm1Hcm91cC5kaXNhYmxlKCk7XG4gICAgICBjb25zdCB2YWx1ZTogYW55ID0gRXhwZWRpY2FvLmZyb21EdG8oZGF0YS5lbnRpdHkpO1xuICAgICAgdGhpcy51cGRhdGVTdWdnZXN0aW9ucyh2YWx1ZSk7XG4gICAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZShuZXcgRXhwZWRpY2FvKCkpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvbkNhbmNlbCgpIHtcbiAgICB0aGlzLmdvQmFjaygpO1xuICB9XG5cbiAgcHVibGljIG9uU2VuZEZpbGUoZmlsZXNUb0RlbGV0ZTogYW55LCBmaWxlc1RvQ29tbWl0OiBhbnlbXSkge1xuICAgIGNvbnN0IG9ic2VydmFibGVzOiBhbnlbXSA9IFtdO1xuXG4gICAgaWYgKCF0aGlzLmZpZWxkQ3VzdG9taXphdGlvbi5pc0VtcHR5KGZpbGVzVG9EZWxldGUpKSB7XG4gICAgICBvYnNlcnZhYmxlcy5wdXNoKHRoaXMuZmllbGRDdXN0b21pemF0aW9uLmRlbGV0ZUZpbGVzKGZpbGVzVG9EZWxldGUpKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmZpZWxkQ3VzdG9taXphdGlvbi5pc0VtcHR5KGZpbGVzVG9Db21taXQpKSB7XG4gICAgICBvYnNlcnZhYmxlcy5wdXNoKHRoaXMuZmllbGRDdXN0b21pemF0aW9uLmNvbW1pdEZpbGVzKGZpbGVzVG9Db21taXQpKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuZmllbGRDdXN0b21pemF0aW9uLmlzRW1wdHkob2JzZXJ2YWJsZXMpKSB7XG4gICAgICByZXR1cm4gZm9ya0pvaW4ob2JzZXJ2YWJsZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gb2Yoe30pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZXRWYWx1ZXNQZWRpZG9CaW9kaXNlbCgpIHtcbiAgICBjb25zdCBudW1lcm9QZWRpZG9DbGllbnRlID0gdGhpcy5mb3JtR3JvdXAuZ2V0KFwibnVtZXJvUGVkaWRvQ2xpZW50ZVwiKS52YWx1ZTtcbiAgICBjb25zdCBpdGVtUGVkaWRvQ2xpZW50ZSA9IHRoaXMuZm9ybUdyb3VwLmdldChcIml0ZW1QZWRpZG9DbGllbnRlXCIpLnZhbHVlO1xuICAgIGNvbnN0IHsgdmFsdWU6IHBlZGlkb3MgfSA9IHRoaXMuZm9ybUdyb3VwLmdldChcInBlZGlkb3NcIik7XG4gICAgKHBlZGlkb3MgfHwgW10pLm1hcCgoZTogYW55KSA9PiB7XG4gICAgICBpZiAoZSAmJiBlLml0ZW5zICYmIGUuaXRlbnMubGVuZ3RoKSB7XG4gICAgICAgIGUuaXRlbnNbMF0ubnVtZXJvUGVkaWRvQ2xpZW50ZSA9IG51bWVyb1BlZGlkb0NsaWVudGU7XG4gICAgICAgIGUuaXRlbnNbMF0uaXRlbVBlZGlkb0NsaWVudGUgPSBpdGVtUGVkaWRvQ2xpZW50ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmZvcm1Hcm91cC5nZXQoXCJwZWRpZG9zXCIpLnBhdGNoVmFsdWUocGVkaWRvcyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0VmFsdWVzUGVkaWRvQmlvZGlzZWwoKSB7XG4gICAgY29uc3QgcGVkaWRvcyA9IHRoaXMuZm9ybUdyb3VwLmdldChcInBlZGlkb3NcIikudmFsdWU7XG4gICAgY29uc3QgbnVtZXJvUGVkaWRvQ2xpZW50ZSA9IHRoaXMuZm9ybUdyb3VwLmdldChcIm51bWVyb1BlZGlkb0NsaWVudGVcIik7XG4gICAgY29uc3QgaXRlbVBlZGlkb0NsaWVudGUgPSB0aGlzLmZvcm1Hcm91cC5nZXQoXCJpdGVtUGVkaWRvQ2xpZW50ZVwiKTtcbiAgICAocGVkaWRvcyB8fCBbXSkubWFwKChlOiBhbnkpID0+IHtcbiAgICAgIGlmIChudW1lcm9QZWRpZG9DbGllbnRlLnZhbHVlICYmIGl0ZW1QZWRpZG9DbGllbnRlLnZhbHVlKSByZXR1cm47XG4gICAgICBjb25zdCBwZWRpZG9zSW50ZXJubyA9XG4gICAgICAgIGUgJiYgZS5pdGVucyAmJiBlLml0ZW5zLmxlbmd0aCA/IGUuaXRlbnNbMF0ucGVkaWRvIDogbnVsbDtcbiAgICAgIGlmIChcbiAgICAgICAgcGVkaWRvc0ludGVybm8gJiZcbiAgICAgICAgcGVkaWRvc0ludGVybm8uaXRlbnMgJiZcbiAgICAgICAgcGVkaWRvc0ludGVybm8uaXRlbnMubGVuZ3RoXG4gICAgICApIHtcbiAgICAgICAgaWYgKHBlZGlkb3NJbnRlcm5vLml0ZW5zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIG51bWVyb1BlZGlkb0NsaWVudGUucGF0Y2hWYWx1ZShcbiAgICAgICAgICAgIHBlZGlkb3NJbnRlcm5vLml0ZW5zWzBdLm51bWVyb1BlZGlkb0NsaWVudGVcbiAgICAgICAgICApO1xuICAgICAgICAgIGl0ZW1QZWRpZG9DbGllbnRlLnBhdGNoVmFsdWUoXG4gICAgICAgICAgICBwZWRpZG9zSW50ZXJuby5pdGVuc1swXS5pdGVtUGVkaWRvQ2xpZW50ZVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBvblNhdmUoc3RhcnQ/OiBib29sZWFuKSB7XG4gICAgdGhpcy5mb3JtR3JvdXAuZ2V0KFwiYWdlbmRhXCIpLnNldFZhbHVlKHRoaXMuYWdlbmRhKTtcbiAgICB0aGlzLm9yZGVyc1ZhbGlkID0gKHRoaXMuZm9ybUdyb3VwLmdldChcInBlZGlkb3NcIikgYXMgRm9ybUFycmF5KS5sZW5ndGggPiAwO1xuXG4gICAgaWYgKHRoaXMuZm9ybUdyb3VwLmludmFsaWQgfHwgIXRoaXMub3JkZXJzVmFsaWQpIHtcbiAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlQWxsRm9ybUZpZWxkcyh0aGlzLmZvcm1Hcm91cCk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRWYWx1ZXNQZWRpZG9CaW9kaXNlbCgpO1xuXG4gICAgY29uc3QgeyBmaWxlc1RvRGVsZXRlLCBmaWxlc1RvQ29tbWl0IH0gPSB0aGlzLmZpZWxkQ3VzdG9taXphdGlvbi5nZXRGaWxlcyh0aGlzLmZvcm1Hcm91cCk7XG4gICAgXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcblxuICAgIGlmICh0aGlzLmlzTmV3KCkgfHwgIXRoaXMuZW5hYmxlUmV2YWxpZGF0aW9uKSB7XG4gICAgICByZXR1cm4gdGhpcy5zYXZlQW5kSW5pdChmaWxlc1RvRGVsZXRlLCBmaWxlc1RvQ29tbWl0LCBzdGFydCk7XG4gICAgfVxuXG4gICAgdGhpcy5lcnBQcm9jZXNzRGF0YSA9IHRoaXMuZXJwUHJvY2Vzc1NlcnZpY2UuYnVpbGRlckVycFByb2Nlc3NEYXRhKHRoaXMuZXJwUHJvY2Vzc0RhdGEsIHRoaXMuZm9ybUdyb3VwKTtcbiAgICB0aGlzLmVycFByb2Nlc3NTZXJ2aWNlLmNoYW5nZURhdGFFcnAodGhpcy5lcnBQcm9jZXNzRGF0YSk7XG4gICAgcmV0dXJuIHRoaXMuYWdlbmRhU2VydmljZVxuICAgICAgICAuY2hlY2FyUmV2YWxpZGFjYW8odGhpcy5lcnBQcm9jZXNzRGF0YSlcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICB0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSxcbiAgICAgICAgICAgIGZpbmFsaXplKCgpID0+IHRoaXMubG9hZGluZyA9IGZhbHNlKSxcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2UucmVxdWVyUmV2YWxpZGFjYW8pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmF0dWFsaXphQWdlbmRhUGFyYVJlamVpdGFkb1BvclZhbGlkYWNhbygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuc2F2ZUFuZEluaXQoZmlsZXNUb0RlbGV0ZSwgZmlsZXNUb0NvbW1pdCwgc3RhcnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXR1YWxpemFBZ2VuZGFQYXJhUmVqZWl0YWRvUG9yVmFsaWRhY2FvKCkge1xuICAgIHRoaXMuY29uZmlybWF0aW9uU2VydmljZS5jb25maXJtKHtcbiAgICAgIGhlYWRlcjogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5wYXRpby5hZ2VuZGFfcmV2YWxpZGFjYW9fdGl0bGVcIiksXG4gICAgICBtZXNzYWdlOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLnBhdGlvLmFnZW5kYV9yZXZhbGlkYWNhb19tZXNzYWdlXCIpLFxuICAgICAgYWNjZXB0OiAoKSA9PiB7XG4gICAgICAgIHRoaXMuaGFzQ2hhbmdlU2VydmljZS5oYXNDaGFuZ2VTYXZlKHRoaXMuYWdlbmRhLmlkKTtcbiAgICAgICAgdGhpcy5hZ2VuZGEuc3RhdHVzID0gU3RhdHVzQWdlbmRhLlJFSkVJVEFET19QT1JfVkFMSURBQ0FPO1xuICAgICAgICB0aGlzLmFnZW5kYS5tb3RvcmlzdGEgPSB7aWQ6IHRoaXMuZXJwUHJvY2Vzc0RhdGEubW90b3Jpc3RhSWR9O1xuICAgICAgICB0aGlzLmFnZW5kYS52ZWljdWxvID0ge2lkOiB0aGlzLmVycFByb2Nlc3NEYXRhLnZlaWN1bG9JZH07XG4gICAgICAgIHRoaXMuYWdlbmRhU2VydmljZVxuICAgICAgICAgIC5hdHVhbGl6YXJBZ2VuZGEodGhpcy5hZ2VuZGEpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICB0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSxcbiAgICAgICAgICAgIGNvbmNhdE1hcCgoXykgPT4gdGhpcy5nZXRTYXZlT2JzZXJ2YWJsZSgpKSxcbiAgICAgICAgICAgIGZpbmFsaXplKCgpID0+IHRoaXMubG9hZGluZyA9IGZhbHNlKSxcbiAgICAgICAgICApXG4gICAgICAgICAgLnN1YnNjcmliZSgoXykgPT4ge1xuICAgICAgICAgICAgdGhpcy5zdWNjZXNzTWVzc2FnZSgpO1xuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW1wiL2NoZWdhZGEtdmVpY3Vsb1wiXSwgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICByZWplY3Q6ICgpID0+IHRoaXMubG9hZGluZyA9IGZhbHNlLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzYXZlQW5kSW5pdChmaWxlc1RvRGVsZXRlOiBhbnksIGZpbGVzVG9Db21taXQ6IGFueVtdLCBzdGFydDogYm9vbGVhbikge1xuICAgIHRoaXMuYXR1YWxpemFFeHBlZGljYW8oZmlsZXNUb0RlbGV0ZSwgZmlsZXNUb0NvbW1pdCwgKCkgPT4ge1xuICAgICAgdGhpcy5oYXNDaGFuZ2VTZXJ2aWNlLmhhc0NoYW5nZVNhdmUodGhpcy5hZ2VuZGEuaWQpO1xuICAgICAgaWYgKHN0YXJ0ICYmIHRoaXMuc2F2ZUFuZEluaXRCdXR0b24pIHtcbiAgICAgICAgdGhpcy5oYXNDaGFuZ2VTZXJ2aWNlLmhhc0NoYW5nZVNhdmUodGhpcy5hZ2VuZGEuaWQpO1xuICAgICAgICB0aGlzLnNhdmVBbmRJbml0QnV0dG9uLmNsaWNrKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHN1Y2Nlc3NNZXNzYWdlKCkge1xuICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHtcbiAgICAgICAgc2V2ZXJpdHk6IFwic3VjY2Vzc1wiLFxuICAgICAgICBzdW1tYXJ5OiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwic2F2ZWRfbWVzc2FnZV90aXRsZVwiKSxcbiAgICAgICAgZGV0YWlsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwic2F2ZWRfbWVzc2FnZV9jb250ZW50XCIpLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhdHVhbGl6YUV4cGVkaWNhbyhcbiAgICBmaWxlc1RvRGVsZXRlOiBhbnksXG4gICAgZmlsZXNUb0NvbW1pdDogYW55W10sXG4gICAgb25TdWJzY3JpYmU/OiBGdW5jdGlvblxuICApIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTYXZlT2JzZXJ2YWJsZSgpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksXG4gICAgICAgIGZpbmFsaXplKCgpID0+ICh0aGlzLmxvYWRpbmcgPSBmYWxzZSkpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgodmFsdWU6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoXCJpZFwiKS5zZXRWYWx1ZSh2YWx1ZS5pZCB8fCBudWxsKTtcblxuICAgICAgICB0aGlzLm9uU2VuZEZpbGUoZmlsZXNUb0RlbGV0ZSwgZmlsZXNUb0NvbW1pdClcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGVycik7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYWRkTWVzc2FnZShcbiAgICAgICAgICAgICAgXCJzdWNjZXNzXCIsXG4gICAgICAgICAgICAgIFwic2F2ZWRfbWVzc2FnZV90aXRsZVwiLFxuICAgICAgICAgICAgICBcInNhdmVkX21lc3NhZ2VfY29udGVudFwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgb25TdWJzY3JpYmUoKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHNldFRyYW5zcG9ydGFkb3JhKHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIGNvbnN0IGNucGogPSB2YWx1ZS5yZXBsYWNlKFwiLlwiLCBcIlwiKS5yZXBsYWNlKFwiL1wiLCBcIlwiKS5yZXBsYWNlKFwiLVwiLCBcIlwiKTtcbiAgICAgIGNvbnN0IGZpbHRlclF1ZXJ5ID0gYHBlc3NvYS5jcGZDbnBqIGVxICcke2NucGp9J2A7XG4gICAgICB0aGlzLnRyYW5zcG9ydGFkb3JhU2VydmljZVxuICAgICAgICAubGlzdCh7IGZpbHRlclF1ZXJ5LCBwYWdlOiAwLCBzaXplOiAxMCB9KVxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgLnN1YnNjcmliZSgoeyBjb250ZW50cyB9KSA9PiB7XG4gICAgICAgICAgaWYgKGNvbnRlbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgY29uc3QgY29kZSA9IGNvbnRlbnRzWzBdLmNvZGlnb1xuICAgICAgICAgICAgICA/IGNvbnRlbnRzWzBdLmNvZGlnby50b1N0cmluZygpXG4gICAgICAgICAgICAgIDogXCJcIjtcbiAgICAgICAgICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gY29udGVudHNbMF0uZGVzY3JpY2FvXG4gICAgICAgICAgICAgID8gY29udGVudHNbMF0uZGVzY3JpY2FvLnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgOiBcIlwiO1xuICAgICAgICAgICAgaWYgKCFkZXNjcmlwdGlvbi50cmltKCkgJiYgIWNvZGUudHJpbSgpKSB7XG4gICAgICAgICAgICAgIGNvbnRlbnRzWzBdLmxhYmVsID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAgICAgICBcInltcy5lcnAuZGVyaXZhY2FvX3NlbV9kZXNjcmljYW9cIlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29udGVudHNbMF0ubGFiZWwgPSBgJHtjb2RlfSAtICR7ZGVzY3JpcHRpb259YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChcInRyYW5zcG9ydGFkb3JhXCIpLnNldFZhbHVlKGNvbnRlbnRzWzBdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRQcm9wKG9iajogYW55LCBwYXRoOiBhbnkpIHtcbiAgICByZXR1cm4gcGF0aFxuICAgICAgLnNwbGl0KFwiLlwiKVxuICAgICAgLnJlZHVjZShcbiAgICAgICAgKHJlc3VsdDogYW55LCBwcm9wOiBhbnkpID0+XG4gICAgICAgICAgcmVzdWx0W3Byb3BdID09PSB1bmRlZmluZWQgPyBcIlwiIDogcmVzdWx0W3Byb3BdLFxuICAgICAgICBvYmpcbiAgICAgICk7XG4gIH1cblxuICBwdWJsaWMgZ2V0RXhwZWRpY2FvKGFnZW5kYUlkOiBzdHJpbmcpIHtcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgIHRoaXMuZXhwZWRpY2FvU2VydmljZVxuICAgICAgLmxpc3Qoe1xuICAgICAgICBmaWx0ZXJRdWVyeTogYGFnZW5kYS5pZCBlcSAnJHthZ2VuZGFJZH0nYCxcbiAgICAgICAgc2l6ZTogMSxcbiAgICAgICAgcGFnZTogMCxcbiAgICAgIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksXG4gICAgICAgIGZpbmFsaXplKCgpID0+ICh0aGlzLmxvYWRpbmcgPSBmYWxzZSkpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCh7IGNvbnRlbnRzIH0pID0+IHtcbiAgICAgICAgaWYgKCFjb250ZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLmJ1c2NhckZpbGlhbCgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudG90YWxFaXhvc0NvbnRyYXRhZG9zID0gY29udGVudHNbMF0uZWl4b3MgfHwgMDtcbiAgICAgICAgdGhpcy50b3RhbEVpeG9zQ29tcG9zaWNhbyA9XG4gICAgICAgICAgY29udGVudHNbMF0uYWdlbmRhICYmIGNvbnRlbnRzWzBdLmFnZW5kYS52ZWljdWxvXG4gICAgICAgICAgICA/IGNvbnRlbnRzWzBdLmFnZW5kYS52ZWljdWxvLmVpeG9zIHx8IDBcbiAgICAgICAgICAgIDogMDtcblxuICAgICAgICBjb25zdCBleHBlZGljYW8gPSBFeHBlZGljYW8uZnJvbUR0byhjb250ZW50c1swXSk7XG5cbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuZW5hYmxlKCk7XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUoZXhwZWRpY2FvKTtcblxuICAgICAgICBleHBlZGljYW8ucGVkaWRvcy5mb3JFYWNoKChwZWRpZG8pID0+IHtcbiAgICAgICAgICBjb25zdCBmb3JtID0gdGhpcy5nZXRPcmRlbVZlbmRhRm9ybSgpO1xuICAgICAgICAgIGZvcm0ucGF0Y2hWYWx1ZShwZWRpZG8pO1xuICAgICAgICAgIHBlZGlkby5pdGVucy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpdGVtRm9ybSA9IHRoaXMuZ2V0T3JkZW1WZW5kYUl0ZW1Gb3JtKCk7XG4gICAgICAgICAgICBpdGVtRm9ybS5wYXRjaFZhbHVlKGl0ZW0pO1xuICAgICAgICAgICAgKGZvcm0uZ2V0KFwiaXRlbnNcIikgYXMgRm9ybUFycmF5KS5wdXNoKGl0ZW1Gb3JtKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICAodGhpcy5mb3JtR3JvdXAuZ2V0KFwicGVkaWRvc1wiKSBhcyBGb3JtQXJyYXkpLnB1c2goZm9ybSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmdldFZhbHVlc1BlZGlkb0Jpb2Rpc2VsKCk7XG4gICAgICAgIHRoaXMuZm9ybUNhcnJlZ2FkbyA9IHRydWU7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgcHVibGljIG9uQ2xpZW50ZUZhdHVyYW1lbnRvTG9va3VwUmVxdWVzdCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgb25Mb29rdXBSZXF1ZXN0KFxuICAgICAgdGhpcy5jbGllbnRlRmF0dXJhbWVudG9TZWFyY2hGaWVsZHMsXG4gICAgICB0aGlzLmNsaWVudGVGYXR1cmFtZW50b0xvb2t1cERpc3BsYXlGaWVsZHMsXG4gICAgICB0aGlzLmNsaWVudGVGYXR1cmFtZW50b0FkdmFuY2VkRGlzcGxheUZpZWxkcyxcbiAgICAgIHRoaXMuY2xpZW50ZUZhdHVyYW1lbnRvTG9va3VwU2VwYXJhdG9yLFxuICAgICAgdGhpcy5wZXNzb2FTZXJ2aWNlLFxuICAgICAgdmFsdWUsXG4gICAgICBcImNsaWVudGUgZXEgdHJ1ZVwiXG4gICAgKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKChsaXN0OiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5jbGllbnRlRmF0dXJhbWVudG9Mb29rdXBTdWdnZXN0aW9ucyA9IGxpc3QuY29udGVudHM7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBvbkNsaWVudGVGYXR1cmFtZW50b1NlYXJjaFJlcXVlc3QoZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IHsgZmlyc3QsIHJvd3MsIG11bHRpU29ydE1ldGEsIGZpbHRlckRhdGEgfSA9IGV2ZW50O1xuICAgIGNvbnN0IHBhZ2UgPSBmaXJzdCAvIHJvd3M7XG4gICAgY29uc3Qgc29ydCA9IG11bHRpU29ydE1ldGE7XG4gICAgbGV0IGZpbHRlclF1ZXJ5ID0gdGhpcy5nZXRDbGllbnRlU2VhcmNoRmllbGRzKClcbiAgICAgIC5maWx0ZXIoXG4gICAgICAgICh7IG5hbWUgfSkgPT4gZmlsdGVyRGF0YVtuYW1lXSAhPSB1bmRlZmluZWQgJiYgZmlsdGVyRGF0YVtuYW1lXSAhPSBcIlwiXG4gICAgICApXG4gICAgICAubWFwKCh7IG5hbWUsIHR5cGUgfSkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGZpbHRlckRhdGFbbmFtZV07XG5cbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcIm51bWJlclwiKSByZXR1cm4gYCR7bmFtZX0gZXEgJHt2YWx1ZX1gO1xuICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5EYXRlKVxuICAgICAgICAgIHJldHVybiBgJHtuYW1lfSBlcSAnJHttb21lbnQodmFsdWUpLmZvcm1hdChcIllZWVktTU0tRERcIil9J2A7XG4gICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLlRpbWUpXG4gICAgICAgICAgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KFwiSEg6bW06c3NcIil9J2A7XG4gICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLkRhdGVUaW1lKVxuICAgICAgICAgIHJldHVybiBgJHtuYW1lfSBlcSAnJHttb21lbnQodmFsdWUpLmZvcm1hdCgpfSdgO1xuICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5FbnVtKSByZXR1cm4gYCR7bmFtZX0gZXEgJyR7dmFsdWV9J2A7XG4gICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLlN0cmluZylcbiAgICAgICAgICByZXR1cm4gYGNvbnRhaW5pbmcobG93ZXIoJHtuYW1lfSksIGxvd2VyKCcke3ZhbHVlLnJlcGxhY2UoXG4gICAgICAgICAgICAvJy9nLFxuICAgICAgICAgICAgXCJcXFxcJ1wiXG4gICAgICAgICAgKX0nKSlgO1xuICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5Mb29rdXApIHJldHVybiBgJHtuYW1lfSBlcSAnJHt2YWx1ZS5pZH0nYDtcbiAgICAgICAgZWxzZSByZXR1cm4gYCR7bmFtZX0gZXEgJyR7dmFsdWV9J2A7XG4gICAgICB9KVxuICAgICAgLmpvaW4oXCIgYW5kIFwiKTtcblxuICAgIGZpbHRlclF1ZXJ5ID0gYCR7ZmlsdGVyUXVlcnl9JHtcbiAgICAgIGZpbHRlclF1ZXJ5ID8gXCIgYW5kIFwiIDogXCJcIlxuICAgIH1zaXR1YWNhbyBlcSBBVElWTyBhbmQgY2xpZW50ZSBlcSB0cnVlYDtcblxuICAgIGNvbnN0IGRpc3BsYXlGaWVsZHMgPSBtZXJnZVVuaXF1ZShcbiAgICAgIHRoaXMuY2xpZW50ZUZhdHVyYW1lbnRvTG9va3VwRGlzcGxheUZpZWxkcyxcbiAgICAgIHRoaXMuY2xpZW50ZUZhdHVyYW1lbnRvQWR2YW5jZWREaXNwbGF5RmllbGRzXG4gICAgKTtcbiAgICB0aGlzLnBlc3NvYVNlcnZpY2VcbiAgICAgIC5saXN0KHsgcGFnZSwgc29ydCwgZmlsdGVyUXVlcnksIGRpc3BsYXlGaWVsZHMgfSlcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgobGlzdDogYW55KSA9PiAoe1xuICAgICAgICAgIC4uLmxpc3QsXG4gICAgICAgICAgY29udGVudHM6IGxpc3QuY29udGVudHMubWFwKChpdGVtOiBhbnkpID0+ICh7XG4gICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgbGFiZWw6IHRoaXMuY2xpZW50ZUZhdHVyYW1lbnRvTG9va3VwRGlzcGxheUZpZWxkc1xuICAgICAgICAgICAgICAubWFwKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChmaWVsZC5pbmRleE9mKFwiLlwiKSA+IDApIHJldHVybiB0aGlzLmdldFByb3AoaXRlbSwgZmllbGQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtW2ZpZWxkXTtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgLmpvaW4odGhpcy5jbGllbnRlRmF0dXJhbWVudG9Mb29rdXBTZXBhcmF0b3IpLFxuICAgICAgICAgIH0pKSxcbiAgICAgICAgfSkpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChsaXN0OiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5jbGllbnRlRmF0dXJhbWVudG9TZWFyY2hHcmlkRGF0YSA9IGxpc3QuY29udGVudHM7XG4gICAgICAgIHRoaXMuY2xpZW50ZUZhdHVyYW1lbnRvU2VhcmNoVG90YWxSZWNvcmRzID0gbGlzdC50b3RhbEVsZW1lbnRzO1xuICAgICAgfSk7XG4gICAgfVxuXG4gIHB1YmxpYyBvbkNsaWVudGVSZW1lc3NhTG9va3VwUmVxdWVzdCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgb25Mb29rdXBSZXF1ZXN0KFxuICAgICAgdGhpcy5jbGllbnRlUmVtZXNzYVNlYXJjaEZpZWxkcyxcbiAgICAgIHRoaXMuY2xpZW50ZVJlbWVzc2FMb29rdXBEaXNwbGF5RmllbGRzLFxuICAgICAgdGhpcy5jbGllbnRlUmVtZXNzYUFkdmFuY2VkRGlzcGxheUZpZWxkcyxcbiAgICAgIHRoaXMuY2xpZW50ZVJlbWVzc2FMb29rdXBTZXBhcmF0b3IsXG4gICAgICB0aGlzLnBlc3NvYVNlcnZpY2UsXG4gICAgICB2YWx1ZSxcbiAgICAgIFwiY2xpZW50ZSBlcSB0cnVlXCJcbiAgICApXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKGxpc3Q6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmNsaWVudGVSZW1lc3NhTG9va3VwU3VnZ2VzdGlvbnMgPSBsaXN0LmNvbnRlbnRzO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgb25DbGllbnRlUmVtZXNzYVNlYXJjaFJlcXVlc3QoZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IHsgZmlyc3QsIHJvd3MsIG11bHRpU29ydE1ldGEsIGZpbHRlckRhdGEgfSA9IGV2ZW50O1xuICAgIGNvbnN0IHBhZ2UgPSBmaXJzdCAvIHJvd3M7XG4gICAgY29uc3Qgc29ydCA9IG11bHRpU29ydE1ldGE7XG4gICAgbGV0IGZpbHRlclF1ZXJ5ID0gdGhpcy5nZXRDbGllbnRlU2VhcmNoRmllbGRzKClcbiAgICAgIC5maWx0ZXIoXG4gICAgICAgICh7IG5hbWUgfSkgPT4gZmlsdGVyRGF0YVtuYW1lXSAhPSB1bmRlZmluZWQgJiYgZmlsdGVyRGF0YVtuYW1lXSAhPSBcIlwiXG4gICAgICApXG4gICAgICAubWFwKCh7IG5hbWUsIHR5cGUgfSkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGZpbHRlckRhdGFbbmFtZV07XG5cbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcIm51bWJlclwiKSByZXR1cm4gYCR7bmFtZX0gZXEgJHt2YWx1ZX1gO1xuICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5EYXRlKVxuICAgICAgICAgIHJldHVybiBgJHtuYW1lfSBlcSAnJHttb21lbnQodmFsdWUpLmZvcm1hdChcIllZWVktTU0tRERcIil9J2A7XG4gICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLlRpbWUpXG4gICAgICAgICAgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KFwiSEg6bW06c3NcIil9J2A7XG4gICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLkRhdGVUaW1lKVxuICAgICAgICAgIHJldHVybiBgJHtuYW1lfSBlcSAnJHttb21lbnQodmFsdWUpLmZvcm1hdCgpfSdgO1xuICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5FbnVtKSByZXR1cm4gYCR7bmFtZX0gZXEgJyR7dmFsdWV9J2A7XG4gICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLlN0cmluZylcbiAgICAgICAgICByZXR1cm4gYGNvbnRhaW5pbmcobG93ZXIoJHtuYW1lfSksIGxvd2VyKCcke3ZhbHVlLnJlcGxhY2UoXG4gICAgICAgICAgICAvJy9nLFxuICAgICAgICAgICAgXCJcXFxcJ1wiXG4gICAgICAgICAgKX0nKSlgO1xuICAgICAgICBlbHNlIHJldHVybiBgJHtuYW1lfSBlcSAnJHt2YWx1ZX0nYDtcbiAgICAgIH0pXG4gICAgICAuam9pbihcIiBhbmQgXCIpO1xuXG4gICAgZmlsdGVyUXVlcnkgPSBgJHtmaWx0ZXJRdWVyeX0ke1xuICAgICAgZmlsdGVyUXVlcnkgPyBcIiBhbmQgXCIgOiBcIlwiXG4gICAgfXNpdHVhY2FvIGVxIEFUSVZPIGFuZCBjbGllbnRlIGVxIHRydWVgO1xuXG4gICAgY29uc3QgZGlzcGxheUZpZWxkcyA9IG1lcmdlVW5pcXVlKFxuICAgICAgdGhpcy5jbGllbnRlUmVtZXNzYUxvb2t1cERpc3BsYXlGaWVsZHMsXG4gICAgICB0aGlzLmNsaWVudGVSZW1lc3NhQWR2YW5jZWREaXNwbGF5RmllbGRzXG4gICAgKTtcbiAgICB0aGlzLnBlc3NvYVNlcnZpY2VcbiAgICAgIC5saXN0KHsgcGFnZSwgc29ydCwgZmlsdGVyUXVlcnksIGRpc3BsYXlGaWVsZHMgfSlcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgobGlzdDogYW55KSA9PiAoe1xuICAgICAgICAgIC4uLmxpc3QsXG4gICAgICAgICAgY29udGVudHM6IGxpc3QuY29udGVudHMubWFwKChpdGVtOiBhbnkpID0+ICh7XG4gICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgbGFiZWw6IHRoaXMuY2xpZW50ZVJlbWVzc2FMb29rdXBEaXNwbGF5RmllbGRzXG4gICAgICAgICAgICAgIC5tYXAoKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkLmluZGV4T2YoXCIuXCIpID4gMCkgcmV0dXJuIHRoaXMuZ2V0UHJvcChpdGVtLCBmaWVsZCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1bZmllbGRdO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAuam9pbih0aGlzLmNsaWVudGVSZW1lc3NhTG9va3VwU2VwYXJhdG9yKSxcbiAgICAgICAgICB9KSksXG4gICAgICAgIH0pKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgobGlzdDogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuY2xpZW50ZVJlbWVzc2FTZWFyY2hHcmlkRGF0YSA9IGxpc3QuY29udGVudHM7XG4gICAgICAgIHRoaXMuY2xpZW50ZVJlbWVzc2FTZWFyY2hUb3RhbFJlY29yZHMgPSBsaXN0LnRvdGFsRWxlbWVudHM7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBvbkZpbGlhbFNlbGVjdChldmVudDogYW55KSB7XG4gICAgdGhpcy5kaXNhYmxlT3JkZXJzQnV0dG9ucyA9ICFldmVudCB8fCB0aGlzLmFnZW5kYS5jcmVhdGVkQnlFcnA7XG4gIH1cblxuICBwdWJsaWMgb25GaWxpYWxMb29rdXBSZXF1ZXN0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBmaWx0ZXJJbnB1dCA9IHRoaXMuZ2V0RmlsaWFsU2VhcmNoRmllbGRzKClcbiAgICAgIC5maWx0ZXIoKHsgdHlwZSB9KSA9PiBpc1ZhbGlkRmlsdGVyKHR5cGUsIHZhbHVlKSlcbiAgICAgIC5yZWR1Y2UoXG4gICAgICAgIChhLCB7IG5hbWUsIHR5cGUgfSkgPT4ge1xuICAgICAgICAgIGlmICh0eXBlID09PSBGaWVsZFR5cGUuSW50ZWdlcikge1xuICAgICAgICAgICAgcmV0dXJuIHsgLi4uYSwgW25hbWVdOiB2YWx1ZS5yZXBsYWNlKC9cXEQvLCBcIlwiKSB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4geyAuLi5hLCBbbmFtZV06IHZhbHVlIH07XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBjbnBqczogdGhpcy5hZ2VuZGEucGxhbnRhLmNucGosXG4gICAgICAgICAgcGFnaW5hOiB7IGxpbWl0OiAxMCwgb2Zmc2V0OiAwIH0sXG4gICAgICAgIH0gYXMgUGVzcXVpc2FyRmlsaWFpc0lucHV0XG4gICAgICApO1xuXG4gICAgdGhpcy5maWxpYWxTZXJ2aWNlXG4gICAgICAubGlzdEZpbGlhaXMoZmlsdGVySW5wdXQpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgIChsaXN0OiBhbnkpID0+XG4gICAgICAgICAgKHRoaXMuZmlsaWFsTG9va3VwU3VnZ2VzdGlvbnMgPSBsaXN0LmZpbGlhaXMubWFwKChmaWxpYWw6IGFueSkgPT5cbiAgICAgICAgICAgIEZpbGlhbC5mcm9tRHRvKGZpbGlhbClcbiAgICAgICAgICApKVxuICAgICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkZpbGlhbFNlYXJjaFJlcXVlc3QoZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IHsgZmlyc3QsIHJvd3MsIG11bHRpU29ydE1ldGEsIGZpbHRlckRhdGEgfSA9IGV2ZW50O1xuICAgIGNvbnN0IHBhZ2UgPSBmaXJzdCAvIHJvd3M7XG4gICAgY29uc3Qgc29ydDogU29ydE1ldGFbXSA9IG11bHRpU29ydE1ldGE7XG4gICAgY29uc3Qgc29ydEZvcm1hdHRlZCA9ICEhKHNvcnQgfHwgW10pLmxlbmd0aCAmJiB7XG4gICAgICBjYW1wbzogc29ydFswXS5maWVsZCxcbiAgICAgIG9yZGVuYWNhbzogc29ydFswXS5vcmRlciA+IDAgPyBcIkFzY1wiIDogXCJEZXNjXCIsXG4gICAgfTtcbiAgICBjb25zdCBmaWx0ZXJJbnB1dCA9IHRoaXMuZ2V0RmlsaWFsU2VhcmNoRmllbGRzKClcbiAgICAgIC5maWx0ZXIoXG4gICAgICAgICh7IG5hbWUgfSkgPT4gZmlsdGVyRGF0YVtuYW1lXSAhPSB1bmRlZmluZWQgJiYgZmlsdGVyRGF0YVtuYW1lXSAhPSBcIlwiXG4gICAgICApXG4gICAgICAucmVkdWNlKFxuICAgICAgICAoYSwgeyBuYW1lLCB0eXBlIH0pID0+IHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IGZpbHRlckRhdGFbbmFtZV07XG4gICAgICAgICAgaWYgKHR5cGUgPT09IEZpZWxkVHlwZS5JbnRlZ2VyKSB7XG4gICAgICAgICAgICByZXR1cm4geyAuLi5hLCBbbmFtZV06IGAke3ZhbHVlfWAucmVwbGFjZSgvXFxELywgXCJcIikgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHsgLi4uYSwgW25hbWVdOiB2YWx1ZSB9O1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgY25wanM6IHRoaXMuYWdlbmRhLnBsYW50YS5jbnBqLFxuICAgICAgICAgIHBhZ2luYToge1xuICAgICAgICAgICAgbGltaXQ6IHJvd3MsXG4gICAgICAgICAgICBvZmZzZXQ6IHBhZ2UsXG4gICAgICAgICAgICBsaXN0YU9yZGVuYWNhbzogc29ydEZvcm1hdHRlZCA/IFt7IC4uLnNvcnRGb3JtYXR0ZWQgfV0gOiBudWxsLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0gYXMgUGVzcXVpc2FyRmlsaWFpc0lucHV0XG4gICAgICApO1xuXG4gICAgdGhpcy5maWxpYWxTZXJ2aWNlXG4gICAgICAubGlzdEZpbGlhaXMoZmlsdGVySW5wdXQpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKGxpc3Q6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmZpbGlhbFNlYXJjaEdyaWREYXRhID0gbGlzdC5maWxpYWlzLm1hcChGaWxpYWwuZnJvbUR0byk7XG4gICAgICAgIHRoaXMuZmlsaWFsU2VhcmNoVG90YWxSZWNvcmRzID0gbGlzdC5xdGRUb3RhbFJlZ2lzdHJvcztcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG9uVHJhbnNwb3J0YWRvcmFMb29rdXBSZXF1ZXN0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICBvbkxvb2t1cFJlcXVlc3QoXG4gICAgICB0aGlzLnRyYW5zcG9ydGFkb3JhU2VhcmNoRmllbGRzLFxuICAgICAgdGhpcy50cmFuc3BvcnRhZG9yYUxvb2t1cERpc3BsYXlGaWVsZHMsXG4gICAgICB0aGlzLnRyYW5zcG9ydGFkb3JhQWR2YW5jZWREaXNwbGF5RmllbGRzLFxuICAgICAgdGhpcy50cmFuc3BvcnRhZG9yYUxvb2t1cFNlcGFyYXRvcixcbiAgICAgIHRoaXMudHJhbnNwb3J0YWRvcmFTZXJ2aWNlLFxuICAgICAgdmFsdWVcbiAgICApXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKGxpc3Q6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnRyYW5zcG9ydGFkb3JhTG9va3VwU3VnZ2VzdGlvbnMgPSBsaXN0LmNvbnRlbnRzO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgb25UcmFuc3BvcnRhZG9yYVNlYXJjaFJlcXVlc3QoZXZlbnQ6IGFueSkge1xuICAgIG9uU2VhcmNoUmVxdWVzdChcbiAgICAgIHRoaXMudHJhbnNwb3J0YWRvcmFTZWFyY2hGaWVsZHMsXG4gICAgICB0aGlzLnRyYW5zcG9ydGFkb3JhTG9va3VwRGlzcGxheUZpZWxkcyxcbiAgICAgIHRoaXMudHJhbnNwb3J0YWRvcmFBZHZhbmNlZERpc3BsYXlGaWVsZHMsXG4gICAgICB0aGlzLnRyYW5zcG9ydGFkb3JhTG9va3VwU2VwYXJhdG9yLFxuICAgICAgdGhpcy50cmFuc3BvcnRhZG9yYVNlcnZpY2UsXG4gICAgICBldmVudFxuICAgIClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgobGlzdDogYW55KSA9PiB7XG4gICAgICAgIHRoaXMudHJhbnNwb3J0YWRvcmFTZWFyY2hHcmlkRGF0YSA9IGxpc3QuY29udGVudHM7XG4gICAgICAgIHRoaXMudHJhbnNwb3J0YWRvcmFTZWFyY2hUb3RhbFJlY29yZHMgPSBsaXN0LnRvdGFsRWxlbWVudHM7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBvblBlZGlkb1ZlbmRhTG9va3VwUmVxdWVzdCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgY29uc3Qgc29ydCA9IHRoaXMucGVkaWRvVmVuZGFMb29rdXBEaXNwbGF5RmllbGRzLm1hcCgoZmllbGQ6IGFueSkgPT4gKHtcbiAgICAgIGZpZWxkLFxuICAgICAgb3JkZXI6IDEsXG4gICAgfSkpO1xuXG4gICAgbGV0IGZpbHRlclF1ZXJ5ID0gdGhpcy5nZXRQZWRpZG9WZW5kYVNlYXJjaEZpZWxkcygpXG4gICAgICAuZmlsdGVyKCh7IHR5cGUgfSkgPT4gaXNWYWxpZEZpbHRlcih0eXBlLCB2YWx1ZSkpXG4gICAgICAubWFwKCh7IG5hbWUsIHR5cGUgfSkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09IFwibnVtYmVyXCIpIHJldHVybiBgJHtuYW1lfSBlcSAke3ZhbHVlfWA7XG4gICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLkRhdGUpXG4gICAgICAgICAgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKX0nYDtcbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuVGltZSlcbiAgICAgICAgICByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoXCJISDptbTpzc1wiKX0nYDtcbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuRGF0ZVRpbWUpXG4gICAgICAgICAgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KCl9J2A7XG4gICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLlN0cmluZylcbiAgICAgICAgICByZXR1cm4gYGNvbnRhaW5pbmcobG93ZXIoJHtuYW1lfSksIGxvd2VyKCcke3ZhbHVlLnJlcGxhY2UoXG4gICAgICAgICAgICAvJy9nLFxuICAgICAgICAgICAgXCJcXFxcJ1wiXG4gICAgICAgICAgKX0nKSlgO1xuICAgICAgICBlbHNlIHJldHVybiBgJHtuYW1lfSBlcSAnJHt2YWx1ZX0nYDtcbiAgICAgIH0pXG4gICAgICAuam9pbihcIiBvciBcIik7XG5cbiAgICBmaWx0ZXJRdWVyeSA9IGAke2ZpbHRlclF1ZXJ5fSR7XG4gICAgICBmaWx0ZXJRdWVyeSA/IFwiIGFuZCBcIiA6IFwiXCJcbiAgICB9c2l0dWFjYW9QZWRpZG8gZXEgQUJFUlRPX1RPVEFMIG9yIHNpdHVhY2FvUGVkaWRvIGVxIEFCRVJUT19QQVJDSUFMYDtcblxuICAgIGNvbnN0IHBlZGlkb3MgPSB0aGlzLmZvcm1Hcm91cC5nZXQoXCJwZWRpZG9zXCIpLnZhbHVlIHx8IFtdO1xuICAgIGxldCBwZWRpZG9zSWRzUXVlcnkgPSBcIlwiO1xuICAgIHBlZGlkb3MubWFwKChlOiBhbnkpID0+XG4gICAgICBlICYmIGUucGVkaWRvVmVuZGEgJiYgZS5wZWRpZG9WZW5kYS5pZFxuICAgICAgICA/IChwZWRpZG9zSWRzUXVlcnkgKz0gYCBhbmQgKGlkIG5lICcke2UucGVkaWRvVmVuZGEuaWR9JylgKVxuICAgICAgICA6IGZhbHNlXG4gICAgKTtcbiAgICBpZiAocGVkaWRvcy5sZW5ndGggJiYgcGVkaWRvc0lkc1F1ZXJ5KSBmaWx0ZXJRdWVyeSArPSBwZWRpZG9zSWRzUXVlcnk7XG5cbiAgICBjb25zdCBkaXNwbGF5RmllbGRzID0gbWVyZ2VVbmlxdWUoXG4gICAgICB0aGlzLnBlZGlkb1ZlbmRhTG9va3VwRGlzcGxheUZpZWxkcyxcbiAgICAgIHRoaXMucGVkaWRvVmVuZGFBZHZhbmNlZERpc3BsYXlGaWVsZHNcbiAgICApO1xuICAgIHRoaXMucGVkaWRvVmVuZGFTZXJ2aWNlXG4gICAgICAubGlzdCh7IHNvcnQsIGZpbHRlclF1ZXJ5LCBkaXNwbGF5RmllbGRzIH0pXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKGxpc3Q6IGFueSkgPT4gKHtcbiAgICAgICAgICAuLi5saXN0LFxuICAgICAgICAgIGNvbnRlbnRzOiBsaXN0LmNvbnRlbnRzLm1hcCgoaXRlbTogYW55KSA9PiAoe1xuICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgIGxhYmVsOiB0aGlzLnBlZGlkb1ZlbmRhTG9va3VwRGlzcGxheUZpZWxkc1xuICAgICAgICAgICAgICAubWFwKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChmaWVsZC5pbmRleE9mKFwiLlwiKSA+IDApIHJldHVybiB0aGlzLmdldFByb3AoaXRlbSwgZmllbGQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtW2ZpZWxkXTtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgLmpvaW4odGhpcy5wZWRpZG9WZW5kYUxvb2t1cFNlcGFyYXRvciksXG4gICAgICAgICAgfSkpLFxuICAgICAgICB9KSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKGxpc3Q6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnBlZGlkb1ZlbmRhTG9va3VwU3VnZ2VzdGlvbnMgPSBsaXN0LmNvbnRlbnRzO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0UmVjUGFnaW5hKGZpcnN0OiBudW1iZXIsIHJvd3M6IG51bWJlciwgc29ydDogYW55KSB7XG4gICAgY29uc3QgcGFnZSA9IGZpcnN0IC8gcm93cztcbiAgICBjb25zdCBvcmRlckJ5ID1cbiAgICAgIHNvcnQgJiYgc29ydC5sZW5ndGhcbiAgICAgICAgPyBzb3J0Lm1hcCgoczogYW55KSA9PiAoe1xuICAgICAgICAgICAgY2FtcG86IHMuZmllbGQsXG4gICAgICAgICAgICBvcmRlbmFjYW86IHMub3JkZXIgPT09IDEgPyBcIkFzY1wiIDogXCJEZXNjXCIsXG4gICAgICAgICAgfSkpXG4gICAgICAgIDogW107XG4gICAgcmV0dXJuIHtcbiAgICAgIG9mZnNldDogcGFnZSxcbiAgICAgIGxpbWl0OiByb3dzLFxuICAgICAgbGlzdGFPcmRlbmFjYW86IG9yZGVyQnksXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBvblBlZGlkb1ZlbmRhU2VhcmNoUmVxdWVzdChldmVudDogYW55KSB7XG4gICAgY29uc3QgeyBmaXJzdCwgcm93cywgbXVsdGlTb3J0TWV0YSwgZmlsdGVyRGF0YSB9ID0gZXZlbnQ7XG4gICAgY29uc3Qgc29ydCA9IG11bHRpU29ydE1ldGEgfHwgW107XG5cbiAgICBjb25zdCBmaWxpYWwgPSB0aGlzLmZvcm1Hcm91cC5nZXQoXCJmaWxpYWxcIikudmFsdWU7XG5cbiAgICBjb25zdCBwZWRpZG9zID0gdGhpcy5mb3JtR3JvdXAuZ2V0KFwicGVkaWRvc1wiKS52YWx1ZSB8fCBbXTtcbiAgICBsZXQgcGVkaWRvc1NlbGVjaW9uYWRvczogYW55ID0gW107XG4gICAgcGVkaWRvcy5tYXAoKGU6IGFueSkgPT5cbiAgICAgIGUgJiYgZS5wZWRpZG9WZW5kYSAmJiBlLnBlZGlkb1ZlbmRhLmlkXG4gICAgICAgID8gcGVkaWRvc1NlbGVjaW9uYWRvcy5wdXNoKGUucGVkaWRvVmVuZGEuaWQpXG4gICAgICAgIDogZmFsc2VcbiAgICApO1xuXG4gICAgY29uc3QgcGVzcXVpc2E6IFBlc3F1aXNhUGVkaWRvc1ZlbmRhRHRvID0ge1xuICAgICAgcGVzc29hSWQ6IGZpbHRlckRhdGFbXCJjbGllbnRlXCJdID8gZmlsdGVyRGF0YVtcImNsaWVudGVcIl0uaWQgOiBudWxsLFxuICAgICAgZmlsaWFsSWQ6IGZpbGlhbCA/IGZpbGlhbC5pZCA6IG51bGwsXG4gICAgICB0aXBvQWdlbmRhbWVudG9JZDogdGhpcy5hZ2VuZGEudGlwb0FnZW5kYW1lbnRvXG4gICAgICAgID8gdGhpcy5hZ2VuZGEudGlwb0FnZW5kYW1lbnRvLmlkXG4gICAgICAgIDogbnVsbCxcbiAgICAgIGZpbGlhbFBlZGlkbzogZmlsdGVyRGF0YVtcImZpbGlhbFBlZGlkb1wiXSxcbiAgICAgIHBlZGlkb3NTZWxlY2lvbmFkb3MsXG4gICAgICBudW1lcm86IGZpbHRlckRhdGFbXCJudW1lcm9cIl0sXG4gICAgICBwYWdpbmE6IHRoaXMuZ2V0UmVjUGFnaW5hKGZpcnN0LCByb3dzLCBzb3J0KSxcbiAgICB9O1xuXG4gICAgdGhpcy5wZWRpZG9WZW5kYVNlcnZpY2VcbiAgICAgIC5wZXNxdWlzYXJQZWRpZG9zVmVuZGEocGVzcXVpc2EpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKGxpc3Q6IGFueSkgPT4gKHtcbiAgICAgICAgICAuLi5saXN0LFxuICAgICAgICAgIGNvbnRlbnRzOiBsaXN0LmNvbnRlbnRzLm1hcCgoaXRlbTogYW55KSA9PiAoe1xuICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgIGxhYmVsOiB0aGlzLnBlZGlkb1ZlbmRhTG9va3VwRGlzcGxheUZpZWxkc1xuICAgICAgICAgICAgICAubWFwKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChmaWVsZC5pbmRleE9mKFwiLlwiKSA+IDApIHJldHVybiB0aGlzLmdldFByb3AoaXRlbSwgZmllbGQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtW2ZpZWxkXTtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgLmpvaW4odGhpcy5wZWRpZG9WZW5kYUxvb2t1cFNlcGFyYXRvciksXG4gICAgICAgICAgfSkpLFxuICAgICAgICB9KSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKGxpc3Q6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnBlZGlkb1ZlbmRhU2VhcmNoR3JpZERhdGEgPSBsaXN0LmNvbnRlbnRzO1xuICAgICAgICB0aGlzLnBlZGlkb1ZlbmRhU2VhcmNoVG90YWxSZWNvcmRzID0gbGlzdC50b3RhbEVsZW1lbnRzO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgb25QZWRpZG9WZW5kYUl0ZW1Mb29rdXBSZXF1ZXN0KHZhbHVlOiBhbnkpIHtcbiAgICBjb25zdCBzb3J0ID0gdGhpcy5wZWRpZG9WZW5kYUl0ZW1Mb29rdXBEaXNwbGF5RmllbGRzLm1hcCgoZmllbGQ6IGFueSkgPT4gKHtcbiAgICAgIGZpZWxkLFxuICAgICAgb3JkZXI6IDEsXG4gICAgfSkpO1xuXG4gICAgY29uc3QgZmlsaWFsSWQgPSAodGhpcy5mb3JtR3JvdXAuZ2V0KFwiZmlsaWFsXCIpLnZhbHVlIHx8IHt9KS5pZDtcbiAgICBjb25zdCBwZWRpZG9JZCA9ICh0aGlzLnBlZGlkb0F0dWFsLmdldChcInBlZGlkb1ZlbmRhXCIpLnZhbHVlIHx8IHt9KS5pZDtcblxuICAgIGNvbnN0IHBlc3F1aXNhID0ge1xuICAgICAgcGVkaWRvSWQsXG4gICAgICBmaWxpYWxJZCxcbiAgICAgIHNlcXVlbmNpYTogIWlzTmFOKHZhbHVlKSA/IHZhbHVlIDogbnVsbCxcbiAgICAgIHRpcG9BZ2VuZGFtZW50b0lkOlxuICAgICAgICB0aGlzLmFnZW5kYSAmJiB0aGlzLmFnZW5kYS50aXBvQWdlbmRhbWVudG9cbiAgICAgICAgICA/IHRoaXMuYWdlbmRhLnRpcG9BZ2VuZGFtZW50by5pZFxuICAgICAgICAgIDogbnVsbCxcbiAgICAgIHBhZ2luYTogdGhpcy5nZXRSZWNQYWdpbmEoMCwgMTAsIHNvcnQpLFxuICAgIH07XG5cbiAgICB0aGlzLnBlZGlkb1ZlbmRhSXRlbVNlcnZpY2VcbiAgICAgIC5wZXNxdWlzYXJJdGVuc1BlZGlkb1ZlbmRhKHBlc3F1aXNhKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChsaXN0OiBhbnkpID0+ICh7XG4gICAgICAgICAgLi4ubGlzdCxcbiAgICAgICAgICBjb250ZW50czogbGlzdC5jb250ZW50cy5tYXAoKGl0ZW06IGFueSkgPT4gKHtcbiAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICBsYWJlbDogdGhpcy5wZWRpZG9WZW5kYUl0ZW1Mb29rdXBEaXNwbGF5RmllbGRzXG4gICAgICAgICAgICAgIC5tYXAoKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkLmluZGV4T2YoXCIuXCIpID4gMCkgcmV0dXJuIHRoaXMuZ2V0UHJvcChpdGVtLCBmaWVsZCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1bZmllbGRdO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAuam9pbih0aGlzLnBlZGlkb1ZlbmRhSXRlbUxvb2t1cFNlcGFyYXRvciksXG4gICAgICAgICAgfSkpLFxuICAgICAgICB9KSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKGxpc3Q6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnBlZGlkb1ZlbmRhSXRlbUxvb2t1cFN1Z2dlc3Rpb25zID0gbGlzdC5jb250ZW50cztcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG9uUGVkaWRvVmVuZGFJdGVtU2VhcmNoUmVxdWVzdChldmVudDogYW55KSB7XG4gICAgY29uc3QgeyBmaXJzdCwgcm93cywgbXVsdGlTb3J0TWV0YSwgZmlsdGVyRGF0YSB9ID0gZXZlbnQ7XG4gICAgY29uc3Qgc29ydCA9IG11bHRpU29ydE1ldGE7XG5cbiAgICBjb25zdCBmaWxpYWxJZCA9ICh0aGlzLmZvcm1Hcm91cC5nZXQoXCJmaWxpYWxcIikudmFsdWUgfHwge30pLmlkO1xuICAgIGNvbnN0IHBlZGlkb0lkID0gKHRoaXMucGVkaWRvQXR1YWwuZ2V0KFwicGVkaWRvVmVuZGFcIikudmFsdWUgfHwge30pLmlkO1xuXG4gICAgY29uc3QgcGVzcXVpc2EgPSB7XG4gICAgICBwZWRpZG9JZCxcbiAgICAgIGZpbGlhbElkLFxuICAgICAgc2VxdWVuY2lhOiBmaWx0ZXJEYXRhW1wic2VxdWVuY2lhXCJdLFxuICAgICAgdGlwb0FnZW5kYW1lbnRvSWQ6XG4gICAgICAgIHRoaXMuYWdlbmRhICYmIHRoaXMuYWdlbmRhLnRpcG9BZ2VuZGFtZW50b1xuICAgICAgICAgID8gdGhpcy5hZ2VuZGEudGlwb0FnZW5kYW1lbnRvLmlkXG4gICAgICAgICAgOiBudWxsLFxuICAgICAgcGFnaW5hOiB0aGlzLmdldFJlY1BhZ2luYShmaXJzdCwgcm93cywgc29ydCksXG4gICAgfTtcblxuICAgIHRoaXMucGVkaWRvVmVuZGFJdGVtU2VydmljZVxuICAgICAgLnBlc3F1aXNhckl0ZW5zUGVkaWRvVmVuZGEocGVzcXVpc2EpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKGxpc3Q6IGFueSkgPT4gKHtcbiAgICAgICAgICAuLi5saXN0LFxuICAgICAgICAgIGNvbnRlbnRzOiBsaXN0LmNvbnRlbnRzLm1hcCgoaXRlbTogYW55KSA9PiAoe1xuICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgIGxhYmVsOiB0aGlzLnBlZGlkb1ZlbmRhSXRlbUxvb2t1cERpc3BsYXlGaWVsZHNcbiAgICAgICAgICAgICAgLm1hcCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZmllbGQuaW5kZXhPZihcIi5cIikgPiAwKSByZXR1cm4gdGhpcy5nZXRQcm9wKGl0ZW0sIGZpZWxkKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbVtmaWVsZF07XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5qb2luKHRoaXMucGVkaWRvVmVuZGFJdGVtTG9va3VwU2VwYXJhdG9yKSxcbiAgICAgICAgICB9KSksXG4gICAgICAgIH0pKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgobGlzdDogYW55KSA9PiB7XG4gICAgICAgIHRoaXMucGVkaWRvVmVuZGFJdGVtU2VhcmNoR3JpZERhdGEgPSBsaXN0LmNvbnRlbnRzO1xuICAgICAgICB0aGlzLnBlZGlkb1ZlbmRhSXRlbVNlYXJjaFRvdGFsUmVjb3JkcyA9IGxpc3QudG90YWxFbGVtZW50cztcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldEF1dG9tYXRpY0l0ZW5zT3JkZXIocGVkaWRvVmVuZGE6IGFueSkge1xuICAgIGlmIChwZWRpZG9WZW5kYSAmJiBwZWRpZG9WZW5kYS5pZCkge1xuICAgICAgY29uc3Qgc29ydCA9IHRoaXMucGVkaWRvVmVuZGFJdGVtTG9va3VwRGlzcGxheUZpZWxkcy5tYXAoXG4gICAgICAgIChmaWVsZDogYW55KSA9PiAoeyBmaWVsZCwgb3JkZXI6IDEgfSlcbiAgICAgICk7XG4gICAgICBjb25zdCBmaWxpYWxJZCA9ICh0aGlzLmZvcm1Hcm91cC5nZXQoXCJmaWxpYWxcIikudmFsdWUgfHwge30pLmlkO1xuXG4gICAgICBjb25zdCBwZXNxdWlzYSA9IHtcbiAgICAgICAgcGVkaWRvSWQ6IHBlZGlkb1ZlbmRhLmlkLFxuICAgICAgICBmaWxpYWxJZCxcbiAgICAgICAgdGlwb0FnZW5kYW1lbnRvSWQ6XG4gICAgICAgICAgdGhpcy5hZ2VuZGEgJiYgdGhpcy5hZ2VuZGEudGlwb0FnZW5kYW1lbnRvXG4gICAgICAgICAgICA/IHRoaXMuYWdlbmRhLnRpcG9BZ2VuZGFtZW50by5pZFxuICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICBwYWdpbmE6IHRoaXMuZ2V0UmVjUGFnaW5hKDAsIDEwLCBzb3J0KSxcbiAgICAgIH07XG5cbiAgICAgIHRoaXMucGVkaWRvVmVuZGFJdGVtU2VydmljZVxuICAgICAgICAucGVzcXVpc2FySXRlbnNQZWRpZG9WZW5kYShwZXNxdWlzYSlcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIG1hcCgobGlzdDogYW55KSA9PiAoe1xuICAgICAgICAgICAgLi4ubGlzdCxcbiAgICAgICAgICAgIGNvbnRlbnRzOiBsaXN0LmNvbnRlbnRzLm1hcCgoaXRlbTogYW55KSA9PiAoe1xuICAgICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgICBsYWJlbDogdGhpcy5wZWRpZG9WZW5kYUl0ZW1Mb29rdXBEaXNwbGF5RmllbGRzXG4gICAgICAgICAgICAgICAgLm1hcCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChmaWVsZC5pbmRleE9mKFwiLlwiKSA+IDApIHJldHVybiB0aGlzLmdldFByb3AoaXRlbSwgZmllbGQpO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1bZmllbGRdO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmpvaW4odGhpcy5wZWRpZG9WZW5kYUl0ZW1Mb29rdXBTZXBhcmF0b3IpLFxuICAgICAgICAgICAgfSkpLFxuICAgICAgICAgIH0pKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKGxpc3Q6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMuc2VsZWNpb25hclBlZGlkb1ZlbmRhSXRlbUF1dG9tYXRpY2FtZW50ZShcbiAgICAgICAgICAgIGxpc3QuY29udGVudHMsXG4gICAgICAgICAgICBwZWRpZG9WZW5kYVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvbkFnZW5kYUxvb2t1cFJlcXVlc3QodmFsdWU6IHN0cmluZykge1xuICAgIGNvbnN0IHNvcnQgPSB0aGlzLmFnZW5kYUxvb2t1cERpc3BsYXlGaWVsZHMubWFwKChmaWVsZDogYW55KSA9PiAoe1xuICAgICAgZmllbGQsXG4gICAgICBvcmRlcjogMSxcbiAgICB9KSk7XG5cbiAgICBjb25zdCBmaWx0ZXJRdWVyeSA9IHRoaXMuZ2V0QWdlbmRhU2VhcmNoRmllbGRzKClcbiAgICAgIC5maWx0ZXIoKHsgdHlwZSB9KSA9PiBpc1ZhbGlkRmlsdGVyKHR5cGUsIHZhbHVlKSlcbiAgICAgIC5tYXAoKHsgbmFtZSwgdHlwZSB9KSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJudW1iZXJcIikgcmV0dXJuIGAke25hbWV9IGVxICR7dmFsdWV9YDtcbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuRGF0ZSlcbiAgICAgICAgICByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoXCJZWVlZLU1NLUREXCIpfSdgO1xuICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5UaW1lKVxuICAgICAgICAgIHJldHVybiBgJHtuYW1lfSBlcSAnJHttb21lbnQodmFsdWUpLmZvcm1hdChcIkhIOm1tOnNzXCIpfSdgO1xuICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5EYXRlVGltZSlcbiAgICAgICAgICByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoKX0nYDtcbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuU3RyaW5nKVxuICAgICAgICAgIHJldHVybiBgY29udGFpbmluZyhsb3dlcigke25hbWV9KSwgbG93ZXIoJyR7dmFsdWUucmVwbGFjZShcbiAgICAgICAgICAgIC8nL2csXG4gICAgICAgICAgICBcIlxcXFwnXCJcbiAgICAgICAgICApfScpKWA7XG4gICAgICAgIGVsc2UgcmV0dXJuIGAke25hbWV9IGVxICcke3ZhbHVlfSdgO1xuICAgICAgfSlcbiAgICAgIC5qb2luKFwiIG9yIFwiKTtcblxuICAgIGNvbnN0IGRpc3BsYXlGaWVsZHMgPSBtZXJnZVVuaXF1ZShcbiAgICAgIHRoaXMuYWdlbmRhTG9va3VwRGlzcGxheUZpZWxkcyxcbiAgICAgIHRoaXMuYWdlbmRhQWR2YW5jZWREaXNwbGF5RmllbGRzXG4gICAgKTtcbiAgICB0aGlzLmFnZW5kYVNlcnZpY2VcbiAgICAgIC5saXN0RXh0ZXJuYWxBZ2VuZGEoeyBzb3J0LCBmaWx0ZXJRdWVyeSwgZGlzcGxheUZpZWxkcyB9KVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChsaXN0OiBhbnkpID0+ICh7XG4gICAgICAgICAgLi4ubGlzdCxcbiAgICAgICAgICBjb250ZW50czogbGlzdC5jb250ZW50cy5tYXAoKGl0ZW06IGFueSkgPT4gKHtcbiAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICBsYWJlbDogdGhpcy5hZ2VuZGFMb29rdXBEaXNwbGF5RmllbGRzXG4gICAgICAgICAgICAgIC5tYXAoKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkLmluZGV4T2YoXCIuXCIpID4gMCkgcmV0dXJuIHRoaXMuZ2V0UHJvcChpdGVtLCBmaWVsZCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1bZmllbGRdO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAuam9pbih0aGlzLmFnZW5kYUxvb2t1cFNlcGFyYXRvciksXG4gICAgICAgICAgfSkpLFxuICAgICAgICB9KSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKGxpc3Q6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmFnZW5kYUxvb2t1cFN1Z2dlc3Rpb25zID0gbGlzdC5jb250ZW50cztcbiAgICAgIH0pO1xuXG4gICAgLyp7Q0E6T05fQUdFTkRBX0xPT0tVUF9SRVFVRVNUX0VORDpTVEFSVH0qL1xuICAgIC8qe0NBOk9OX0FHRU5EQV9MT09LVVBfUkVRVUVTVF9FTkQ6RU5EfSovXG4gIH1cblxuICBwdWJsaWMgb25BZ2VuZGFTZWFyY2hSZXF1ZXN0KGV2ZW50OiBhbnkpIHtcbiAgICAvKntDQTpPTl9BR0VOREFfU0VBUkNIX1JFUVVFU1RfU1RBUlQ6U1RBUlR9Ki9cbiAgICAvKntDQTpPTl9BR0VOREFfU0VBUkNIX1JFUVVFU1RfU1RBUlQ6RU5EfSovXG5cbiAgICBjb25zdCB7IGZpcnN0LCByb3dzLCBtdWx0aVNvcnRNZXRhLCBmaWx0ZXJEYXRhIH0gPSBldmVudDtcbiAgICBjb25zdCBwYWdlID0gZmlyc3QgLyByb3dzO1xuICAgIGNvbnN0IHNvcnQgPSBtdWx0aVNvcnRNZXRhO1xuICAgIGNvbnN0IGZpbHRlclF1ZXJ5ID0gdGhpcy5nZXRBZ2VuZGFTZWFyY2hGaWVsZHMoKVxuICAgICAgLmZpbHRlcihcbiAgICAgICAgKHsgbmFtZSB9KSA9PiBmaWx0ZXJEYXRhW25hbWVdICE9IHVuZGVmaW5lZCAmJiBmaWx0ZXJEYXRhW25hbWVdICE9IFwiXCJcbiAgICAgIClcbiAgICAgIC5tYXAoKHsgbmFtZSwgdHlwZSB9KSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gZmlsdGVyRGF0YVtuYW1lXTtcblxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09IFwibnVtYmVyXCIpIHJldHVybiBgJHtuYW1lfSBlcSAke3ZhbHVlfWA7XG4gICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLkRhdGUpXG4gICAgICAgICAgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKX0nYDtcbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuVGltZSlcbiAgICAgICAgICByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoXCJISDptbTpzc1wiKX0nYDtcbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuRGF0ZVRpbWUpXG4gICAgICAgICAgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KCl9J2A7XG4gICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLkVudW0pIHJldHVybiBgJHtuYW1lfSBlcSAnJHt2YWx1ZX0nYDtcbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuU3RyaW5nKVxuICAgICAgICAgIHJldHVybiBgY29udGFpbmluZyhsb3dlcigke25hbWV9KSwgbG93ZXIoJyR7dmFsdWUucmVwbGFjZShcbiAgICAgICAgICAgIC8nL2csXG4gICAgICAgICAgICBcIlxcXFwnXCJcbiAgICAgICAgICApfScpKWA7XG4gICAgICAgIGVsc2UgcmV0dXJuIGAke25hbWV9IGVxICcke3ZhbHVlfSdgO1xuICAgICAgfSlcbiAgICAgIC5qb2luKFwiIGFuZCBcIik7XG5cbiAgICBjb25zdCBkaXNwbGF5RmllbGRzID0gbWVyZ2VVbmlxdWUoXG4gICAgICB0aGlzLmFnZW5kYUxvb2t1cERpc3BsYXlGaWVsZHMsXG4gICAgICB0aGlzLmFnZW5kYUFkdmFuY2VkRGlzcGxheUZpZWxkc1xuICAgICk7XG4gICAgdGhpcy5hZ2VuZGFTZXJ2aWNlXG4gICAgICAubGlzdEV4dGVybmFsQWdlbmRhKHsgcGFnZSwgc29ydCwgZmlsdGVyUXVlcnksIGRpc3BsYXlGaWVsZHMgfSlcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgobGlzdDogYW55KSA9PiAoe1xuICAgICAgICAgIC4uLmxpc3QsXG4gICAgICAgICAgY29udGVudHM6IGxpc3QuY29udGVudHMubWFwKChpdGVtOiBhbnkpID0+ICh7XG4gICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgbGFiZWw6IHRoaXMuYWdlbmRhTG9va3VwRGlzcGxheUZpZWxkc1xuICAgICAgICAgICAgICAubWFwKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChmaWVsZC5pbmRleE9mKFwiLlwiKSA+IDApIHJldHVybiB0aGlzLmdldFByb3AoaXRlbSwgZmllbGQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtW2ZpZWxkXTtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgLmpvaW4odGhpcy5hZ2VuZGFMb29rdXBTZXBhcmF0b3IpLFxuICAgICAgICAgIH0pKSxcbiAgICAgICAgfSkpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChsaXN0OiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5hZ2VuZGFTZWFyY2hHcmlkRGF0YSA9IGxpc3QuY29udGVudHM7XG4gICAgICAgIHRoaXMuYWdlbmRhU2VhcmNoVG90YWxSZWNvcmRzID0gbGlzdC50b3RhbEVsZW1lbnRzO1xuICAgICAgfSk7XG5cbiAgICAvKntDQTpPTl9BR0VOREFfU0VBUkNIX1JFUVVFU1RfRU5EOlNUQVJUfSovXG4gICAgLyp7Q0E6T05fQUdFTkRBX1NFQVJDSF9SRVFVRVNUX0VORDpFTkR9Ki9cbiAgfVxuXG4gIHByaXZhdGUgZ2V0Rm9ybUdyb3VwKCkge1xuICAgIGNvbnN0IGZvcm1Hcm91cCA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgaWQ6IFt7IHZhbHVlOiB1bmRlZmluZWQsIGRpc2FibGVkOiB0cnVlIH0sIFZhbGlkYXRvcnMuY29tcG9zZShbXSldLFxuICAgICAgY2xpZW50ZUZhdHVyYW1lbnRvOiBbXG4gICAgICAgIHsgdmFsdWU6IHVuZGVmaW5lZCwgZGlzYWJsZWQ6IGZhbHNlIH0sXG4gICAgICAgIFZhbGlkYXRvcnMuY29tcG9zZShbVmFsaWRhdG9ycy5yZXF1aXJlZF0pLFxuICAgICAgXSxcbiAgICAgIGNsaWVudGVSZW1lc3NhOiBbeyB2YWx1ZTogdW5kZWZpbmVkLCBkaXNhYmxlZDogZmFsc2UgfV0sXG4gICAgICBmaWxpYWw6IFtcbiAgICAgICAgeyB2YWx1ZTogdW5kZWZpbmVkLCBkaXNhYmxlZDogZmFsc2UgfSxcbiAgICAgICAgVmFsaWRhdG9ycy5jb21wb3NlKFtWYWxpZGF0b3JzLnJlcXVpcmVkXSksXG4gICAgICBdLFxuICAgICAgdHJhbnNwb3J0YWRvcmE6IFtcbiAgICAgICAgeyB2YWx1ZTogdW5kZWZpbmVkLCBkaXNhYmxlZDogZmFsc2UgfSxcbiAgICAgICAgVmFsaWRhdG9ycy5jb21wb3NlKFtdKSxcbiAgICAgIF0sXG4gICAgICBwZWRpZG9zOiB0aGlzLmZvcm1CdWlsZGVyLmFycmF5KFtdKSxcbiAgICAgIGFnZW5kYTogW1xuICAgICAgICB7IHZhbHVlOiB1bmRlZmluZWQsIGRpc2FibGVkOiBmYWxzZSB9LFxuICAgICAgICBWYWxpZGF0b3JzLmNvbXBvc2UoW1ZhbGlkYXRvcnMucmVxdWlyZWRdKSxcbiAgICAgIF0sXG4gICAgICBudW1lcm9BZ2VuZGFtZW50b0NsaWVudGU6IFtcbiAgICAgICAgeyB2YWx1ZTogdW5kZWZpbmVkLCBkaXNhYmxlZDogZmFsc2UgfSxcbiAgICAgICAgVmFsaWRhdG9ycy5jb21wb3NlKFtdKSxcbiAgICAgIF0sXG4gICAgICBudW1lcm9QZWRpZG9DbGllbnRlOiBbXG4gICAgICAgIHsgdmFsdWU6IHVuZGVmaW5lZCwgZGlzYWJsZWQ6IGZhbHNlIH0sXG4gICAgICAgIFZhbGlkYXRvcnMuY29tcG9zZShbXSksXG4gICAgICBdLFxuICAgICAgaXRlbVBlZGlkb0NsaWVudGU6IFtcbiAgICAgICAgeyB2YWx1ZTogdW5kZWZpbmVkLCBkaXNhYmxlZDogZmFsc2UgfSxcbiAgICAgICAgVmFsaWRhdG9ycy5jb21wb3NlKFtdKSxcbiAgICAgIF0sXG4gICAgICBjcmVhdGVkQnk6IFt7IHZhbHVlOiB1bmRlZmluZWQsIGRpc2FibGVkOiB0cnVlIH0sIFZhbGlkYXRvcnMuY29tcG9zZShbXSldLFxuICAgICAgY3JlYXRlZERhdGU6IFtcbiAgICAgICAgeyB2YWx1ZTogdW5kZWZpbmVkLCBkaXNhYmxlZDogdHJ1ZSB9LFxuICAgICAgICBWYWxpZGF0b3JzLmNvbXBvc2UoW10pLFxuICAgICAgXSxcbiAgICAgIGxhc3RNb2RpZmllZEJ5OiBbXG4gICAgICAgIHsgdmFsdWU6IHVuZGVmaW5lZCwgZGlzYWJsZWQ6IHRydWUgfSxcbiAgICAgICAgVmFsaWRhdG9ycy5jb21wb3NlKFtdKSxcbiAgICAgIF0sXG4gICAgICBsYXN0TW9kaWZpZWREYXRlOiBbXG4gICAgICAgIHsgdmFsdWU6IHVuZGVmaW5lZCwgZGlzYWJsZWQ6IHRydWUgfSxcbiAgICAgICAgVmFsaWRhdG9ycy5jb21wb3NlKFtdKSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICAvKntDQTpHRVRfRk9STV9DT05UUk9MUzpTVEFSVH0qL1xuICAgIC8qe0NBOkdFVF9GT1JNX0NPTlRST0xTOkVORH0qL1xuXG4gICAgcmV0dXJuIGZvcm1Hcm91cDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q2xpZW50ZVNlYXJjaEZpZWxkcygpIHtcbiAgICByZXR1cm4gW1xuICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgIG5hbWU6IFwiY29kaWdvXCIsXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5wZXNzb2FfY29kaWdvXCIpLFxuICAgICAgICB0eXBlOiBGaWVsZFR5cGUuSW50ZWdlcixcbiAgICAgIH0pLFxuICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgIG5hbWU6IFwibm9tZVwiLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucGVzc29hX25vbWVcIiksXG4gICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICB9KSxcbiAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICBuYW1lOiBcImNwZkNucGpcIixcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnBlc3NvYV9jcGZDbnBqXCIpLFxuICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgfSksXG4gICAgXTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q2xpZW50ZVNlYXJjaEdyaWRGaWVsZHMoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICBuYW1lOiBcImNvZGlnb1wiLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucGVzc29hX2NvZGlnb1wiKSxcbiAgICAgICAgdHlwZTogRmllbGRUeXBlLkludGVnZXIsXG4gICAgICB9KSxcbiAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICBuYW1lOiBcIm5vbWVcIixcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnBlc3NvYV9ub21lXCIpLFxuICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgfSksXG4gICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgbmFtZTogXCJjcGZDbnBqXCIsXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5wZXNzb2FfY3BmQ25walwiKSxcbiAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgIH0pLFxuICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgIG5hbWU6IFwic2l0ZVwiLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucGVzc29hX3NpdGVcIiksXG4gICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICB9KSxcbiAgICBdO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRGaWxpYWxTZWFyY2hGaWVsZHMoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICBuYW1lOiBcImNvZGlnb1wiLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAuZmlsaWFsX2NvZGlnb1wiKSxcbiAgICAgICAgdHlwZTogRmllbGRUeXBlLkludGVnZXIsXG4gICAgICB9KSxcbiAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICBuYW1lOiBcIm5vbWVcIixcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLmZpbGlhbF9ub21lXCIpLFxuICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgfSksXG4gICAgXTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RmlsaWFsU2VhcmNoR3JpZEZpZWxkcygpIHtcbiAgICByZXR1cm4gW1xuICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgIG5hbWU6IFwiY29kaWdvXCIsXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5maWxpYWxfY29kaWdvXCIpLFxuICAgICAgICB0eXBlOiBGaWVsZFR5cGUuSW50ZWdlcixcbiAgICAgIH0pLFxuICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgIG5hbWU6IFwibm9tZVwiLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAuZmlsaWFsX25vbWVcIiksXG4gICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICB9KSxcbiAgICBdO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRUcmFuc3BvcnRhZG9yYVNlYXJjaEZpZWxkcygpIHtcbiAgICByZXR1cm4gW1xuICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgIG5hbWU6IFwiY29kaWdvXCIsXG4gICAgICAgIHR5cGU6IEZpZWxkVHlwZS5JbnRlZ2VyLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAudHJhbnNwb3J0YWRvcmFfY29kaWdvXCIpLFxuICAgICAgfSksXG4gICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgbmFtZTogXCJwZXNzb2Eubm9tZVwiLFxuICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAudHJhbnNwb3J0YWRvcmFfZGVzY3JpY2FvXCIpLFxuICAgICAgfSksXG4gICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgbmFtZTogXCJwZXNzb2EuY3BmQ25walwiLFxuICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAudHJhbnNwb3J0YWRvcmFfY25walwiKSxcbiAgICAgIH0pLFxuICAgIF07XG4gIH1cblxuICBwcml2YXRlIGdldFRyYW5zcG9ydGFkb3JhU2VhcmNoR3JpZEZpZWxkcygpIHtcbiAgICByZXR1cm4gW1xuICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgIG5hbWU6IFwiY29kaWdvXCIsXG4gICAgICAgIHR5cGU6IEZpZWxkVHlwZS5JbnRlZ2VyLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAudHJhbnNwb3J0YWRvcmFfY29kaWdvXCIpLFxuICAgICAgfSksXG4gICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgbmFtZTogXCJwZXNzb2Eubm9tZVwiLFxuICAgICAgICB0eXBlOiBGaWVsZFR5cGUuSW50ZWdlcixcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnBlc3NvYV9ub21lXCIpLFxuICAgICAgfSksXG4gICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgbmFtZTogXCJwZXNzb2EuY3BmQ25walwiLFxuICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAudHJhbnNwb3J0YWRvcmFfY25walwiKSxcbiAgICAgIH0pLFxuICAgIF07XG4gIH1cblxuICBwcml2YXRlIGdldFBlZGlkb1ZlbmRhU2VhcmNoRmllbGRzKCkge1xuICAgIGNvbnN0IGNsaWVudFN1Z2dlc3Rpb25zJCA9IG5ldyBTdWJqZWN0PGFueVtdPigpO1xuICAgIGNvbnN0IGNsaWVudFNlYXJjaCQgPSBuZXcgU3ViamVjdDxhbnk+KCk7XG5cbiAgICByZXR1cm4gW1xuICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgIG5hbWU6IFwibnVtZXJvXCIsXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5wZWRpZG9fdmVuZGFfbnVtZXJvXCIpLFxuICAgICAgICB0eXBlOiBGaWVsZFR5cGUuSW50ZWdlcixcbiAgICAgIH0pLFxuICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgIG5hbWU6IFwiZmlsaWFsUGVkaWRvXCIsXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5maWxpYWxfY29kaWdvXCIpLFxuICAgICAgICB0eXBlOiBGaWVsZFR5cGUuSW50ZWdlcixcbiAgICAgIH0pLFxuICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgIG5hbWU6IFwiY2xpZW50ZVwiLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucGVzc29hX2NsaWVudGVfbGFiZWxcIiksXG4gICAgICAgIHR5cGU6IEZpZWxkVHlwZS5Mb29rdXAsXG4gICAgICAgIHNlYXJjaEZpZWxkczogdGhpcy5nZXRDbGllbnRlU2VhcmNoRmllbGRzKCksXG4gICAgICAgIHNlYXJjaEdyaWRGaWVsZHM6IHRoaXMuZ2V0Q2xpZW50ZVNlYXJjaEdyaWRGaWVsZHMoKSxcbiAgICAgICAgc3VnZ2VzdGlvbnNPYnNlcnZhYmxlOiBjbGllbnRTdWdnZXN0aW9ucyQsXG4gICAgICAgIHNlYXJjaE9ic2VydmFibGU6IGNsaWVudFNlYXJjaCQsXG4gICAgICAgIGVtcHR5TWVzc2FnZTogXCJOZW5odW1hIHN1Z2VzdMOjbyBlbmNvbnRyYWRhXCIsXG4gICAgICAgIHNpemU6IHsgc206IDEyLCBtZDogMTIsIGxnOiAxMiwgeGw6IDEyIH0sXG4gICAgICAgIG9uTG9va3VwUmVxdWVzdDogKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICBvbkxvb2t1cFJlcXVlc3QoXG4gICAgICAgICAgICB0aGlzLmNsaWVudGVGYXR1cmFtZW50b1NlYXJjaEZpZWxkcyxcbiAgICAgICAgICAgIHRoaXMuY2xpZW50ZUZhdHVyYW1lbnRvTG9va3VwRGlzcGxheUZpZWxkcyxcbiAgICAgICAgICAgIHRoaXMuY2xpZW50ZUZhdHVyYW1lbnRvQWR2YW5jZWREaXNwbGF5RmllbGRzLFxuICAgICAgICAgICAgdGhpcy5jbGllbnRlRmF0dXJhbWVudG9Mb29rdXBTZXBhcmF0b3IsXG4gICAgICAgICAgICB0aGlzLnBlc3NvYVNlcnZpY2UsXG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIFwic2l0dWFjYW8gZXEgQVRJVk8gYW5kIGNsaWVudGUgZXEgdHJ1ZVwiXG4gICAgICAgICAgKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChsaXN0OiBhbnkpID0+IGNsaWVudFN1Z2dlc3Rpb25zJC5uZXh0KGxpc3QuY29udGVudHMpKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25TZWFyY2hSZXF1ZXN0OiAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICAgIG9uU2VhcmNoUmVxdWVzdChcbiAgICAgICAgICAgIHRoaXMuY2xpZW50ZUZhdHVyYW1lbnRvU2VhcmNoRmllbGRzLFxuICAgICAgICAgICAgdGhpcy5jbGllbnRlRmF0dXJhbWVudG9Mb29rdXBEaXNwbGF5RmllbGRzLFxuICAgICAgICAgICAgdGhpcy5jbGllbnRlRmF0dXJhbWVudG9BZHZhbmNlZERpc3BsYXlGaWVsZHMsXG4gICAgICAgICAgICB0aGlzLmNsaWVudGVGYXR1cmFtZW50b0xvb2t1cFNlcGFyYXRvcixcbiAgICAgICAgICAgIHRoaXMucGVzc29hU2VydmljZSxcbiAgICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgICAgXCJzaXR1YWNhbyBlcSBBVElWTyBhbmQgY2xpZW50ZSBlcSB0cnVlXCJcbiAgICAgICAgICApXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGxpc3Q6IGFueSkgPT4ge1xuICAgICAgICAgICAgICBjbGllbnRTZWFyY2gkLm5leHQoe1xuICAgICAgICAgICAgICAgIHRvdGFsUmVjb3JkczogbGlzdC50b3RhbEVsZW1lbnRzLFxuICAgICAgICAgICAgICAgIGdyaWREYXRhOiBsaXN0LmNvbnRlbnRzLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBkYXRhS2V5OiBcImlkXCIsXG4gICAgICAgIGxvb2t1cERpc3BsYXlGaWVsZDogXCJsYWJlbFwiLFxuICAgICAgICBzZWFyY2hUaXRsZTogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucGVzc29hX2NsaWVudGVfbGFiZWxcIiksXG4gICAgICAgIHNlYXJjaEVtcHR5VGl0bGU6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLm5vdGhpbmdfZm91bmRcIiksXG4gICAgICAgIGZpbHRlckxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5maWx0ZXJcIiksXG4gICAgICAgIGZpbHRlclRpdGxlOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmludGVncmF0aW9uLmZpbHRlcnNcIiksXG4gICAgICAgIGNsZWFyTGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLmNsZWFyXCIpLFxuICAgICAgICBjYW5jZWxMYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAuY2FuY2VsXCIpLFxuICAgICAgICBzZWxlY3RMYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAuc2VsZWN0XCIpLFxuICAgICAgICB0b29sdGlwOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5wZXNzb2FfY2xpZW50ZV9sYWJlbFwiKSxcbiAgICAgIH0pLFxuICAgIF07XG4gIH1cblxuICBwcml2YXRlIGdldFBlZGlkb1ZlbmRhU2VhcmNoR3JpZEZpZWxkcygpIHtcbiAgICByZXR1cm4gW1xuICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgIG5hbWU6IFwibnVtZXJvXCIsXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5wZWRpZG9fdmVuZGFfbnVtZXJvXCIpLFxuICAgICAgICB0eXBlOiBGaWVsZFR5cGUuSW50ZWdlcixcbiAgICAgIH0pLFxuICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgIG5hbWU6IFwiZmlsaWFsLm5vbWVcIixcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLmZpbGlhbFwiKSxcbiAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgIH0pLFxuICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgIG5hbWU6IFwiZmlsaWFsLmNvZGlnb1wiLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAuZmlsaWFsX2NvZGlnb1wiKSxcbiAgICAgICAgdHlwZTogRmllbGRUeXBlLkludGVnZXIsXG4gICAgICB9KSxcbiAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICBuYW1lOiBcInBlc3NvYS5ub21lXCIsXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5wZXNzb2FfY2xpZW50ZV9sYWJlbFwiKSxcbiAgICAgICAgdHlwZTogRmllbGRUeXBlLkludGVnZXIsXG4gICAgICB9KSxcbiAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICBuYW1lOiBcInBlc3NvYS5jb2RpZ29cIixcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnBlc3NvYV9jbGllbnRlX2NvZGlnb19sYWJlbFwiKSxcbiAgICAgICAgdHlwZTogRmllbGRUeXBlLkludGVnZXIsXG4gICAgICB9KSxcbiAgICBdO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQZWRpZG9WZW5kYUl0ZW1TZWFyY2hGaWVsZHMoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICBuYW1lOiBcInNlcXVlbmNpYVwiLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucGVkaWRvX3ZlbmRhX2l0ZW1fc2VxdWVuY2lhXCIpLFxuICAgICAgICB0eXBlOiBGaWVsZFR5cGUuSW50ZWdlcixcbiAgICAgIH0pLFxuICAgIF07XG4gIH1cblxuICBwcml2YXRlIGdldFBlZGlkb1ZlbmRhSXRlbVNlYXJjaEdyaWRGaWVsZHMoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIC4uLnRoaXMuZ2V0UGVkaWRvVmVuZGFJdGVtU2VhcmNoRmllbGRzKCksXG4gICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgbmFtZTogXCJza3UuZGVzY3JpY2FvXCIsXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5wcm9kdXRvXCIpLFxuICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgfSksXG4gICAgXTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QWdlbmRhU2VhcmNoRmllbGRzKCkge1xuICAgIGNvbnN0IHNlYXJjaEZpZWxkcyA9IFtcbiAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICBuYW1lOiBcImRlc2NyaWNhb1wiLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAuYWdlbmRhX2Rlc2NyaWNhb1wiKSxcbiAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgIH0pLFxuICAgIF07XG5cbiAgICAvKntDQTpHRVRfQUdFTkRBX1NFQVJDSF9GSUVMRFM6U1RBUlR9Ki9cbiAgICAvKntDQTpHRVRfQUdFTkRBX1NFQVJDSF9GSUVMRFM6RU5EfSovXG5cbiAgICByZXR1cm4gc2VhcmNoRmllbGRzO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRBZ2VuZGFTZWFyY2hHcmlkRmllbGRzKCkge1xuICAgIGNvbnN0IHNlYXJjaEdyaWRGaWVsZHMgPSBbXG4gICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgbmFtZTogXCJkZXNjcmljYW9cIixcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLmFnZW5kYV9kZXNjcmljYW9cIiksXG4gICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICB9KSxcbiAgICBdO1xuXG4gICAgLyp7Q0E6R0VUX0FHRU5EQV9TRUFSQ0hfR1JJRF9GSUVMRFM6U1RBUlR9Ki9cbiAgICAvKntDQTpHRVRfQUdFTkRBX1NFQVJDSF9HUklEX0ZJRUxEUzpFTkR9Ki9cblxuICAgIHJldHVybiBzZWFyY2hHcmlkRmllbGRzO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREZXJpdmFjYW9TZWFyY2hGaWVsZHMoKSB7XG4gICAgY29uc3Qgc2VhcmNoRmllbGRzID0gW1xuICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgIG5hbWU6IFwiY29kaWdvXCIsXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5kZXJpdmFjYW9fY29kaWdvXCIpLFxuICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgfSksXG4gICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgbmFtZTogXCJkZXNjcmljYW9cIixcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLmRlcml2YWNhb19kZXNjcmljYW9cIiksXG4gICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICB9KSxcbiAgICBdO1xuXG4gICAgLyp7Q0E6R0VUX0RFUklWQUNBT19TRUFSQ0hfRklFTERTOlNUQVJUfSovXG4gICAgLyp7Q0E6R0VUX0RFUklWQUNBT19TRUFSQ0hfRklFTERTOkVORH0qL1xuXG4gICAgcmV0dXJuIHNlYXJjaEZpZWxkcztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGVyaXZhY2FvU2VhcmNoR3JpZEZpZWxkcygpIHtcbiAgICBjb25zdCBzZWFyY2hHcmlkRmllbGRzID0gW1xuICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgIG5hbWU6IFwiY29kaWdvXCIsXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5kZXJpdmFjYW9fY29kaWdvXCIpLFxuICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgfSksXG4gICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgbmFtZTogXCJkZXNjcmljYW9cIixcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLmRlcml2YWNhb19kZXNjcmljYW9cIiksXG4gICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICB9KSxcbiAgICBdO1xuXG4gICAgLyp7Q0E6R0VUX0RFUklWQUNBT19TRUFSQ0hfR1JJRF9GSUVMRFM6U1RBUlR9Ki9cbiAgICAvKntDQTpHRVRfREVSSVZBQ0FPX1NFQVJDSF9HUklEX0ZJRUxEUzpFTkR9Ki9cblxuICAgIHJldHVybiBzZWFyY2hHcmlkRmllbGRzO1xuICB9XG5cbiAgcHJpdmF0ZSBnb0JhY2soKSB7XG4gICAgY29uc3QgcHJldmlvdXNSb3V0ZSA9IFwiLi4vXCI7XG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3ByZXZpb3VzUm91dGVdLCB7IHJlbGF0aXZlVG86IHRoaXMucm91dGUucGFyZW50IH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZUFsbEZvcm1GaWVsZHMoZm9ybUdyb3VwOiBGb3JtR3JvdXApIHtcbiAgICBPYmplY3Qua2V5cyhmb3JtR3JvdXAuY29udHJvbHMpLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICBjb25zdCBjb250cm9sID0gZm9ybUdyb3VwLmdldChmaWVsZCk7XG4gICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1Db250cm9sKVxuICAgICAgICBjb250cm9sLm1hcmtBc0RpcnR5KHsgb25seVNlbGY6IHRydWUgfSk7XG4gICAgICBlbHNlIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUdyb3VwKVxuICAgICAgICB0aGlzLnZhbGlkYXRlQWxsRm9ybUZpZWxkcyhjb250cm9sKTtcbiAgICB9KTtcblxuICAgIHRoaXMuZm9jdXNTZXJ2aWNlLmZvY3VzRmlyc3RJbnZhbGlkSW5wdXQoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2F2ZU9ic2VydmFibGUoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmZvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpO1xuICAgIGNvbnN0IGV4cGVkaWNhb0R0byA9IEV4cGVkaWNhby50b0R0byh2YWx1ZSk7XG5cbiAgICBsZXQgb2JzZXJ2YWJsZTtcblxuICAgIGlmICh0aGlzLmlzTmV3KCkgJiYgIXZhbHVlLmlkKSB7XG4gICAgICBvYnNlcnZhYmxlID0gdGhpcy5leHBlZGljYW9TZXJ2aWNlLmluc2VydChleHBlZGljYW9EdG8pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBpZCA9IHZhbHVlLmlkO1xuICAgICAgb2JzZXJ2YWJsZSA9IHRoaXMuZXhwZWRpY2FvU2VydmljZS51cGRhdGUoaWQsIGV4cGVkaWNhb0R0byk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9ic2VydmFibGU7XG4gIH1cblxuICBwcml2YXRlIHZhbGlkYXRlVmlzdWFsaXphdGlvbigpIHtcbiAgICBpZiAoIXVzZXJDYW5WaXN1YWxpemUodGhpcy5mb3JtR3JvdXAsIHRoaXMuYWxsUGVybWlzc2lvbnMpKSB7XG4gICAgICB0aGlzLmFkZE1lc3NhZ2UoXG4gICAgICAgIFwiZXJyb3JcIixcbiAgICAgICAgXCJ5bXMuZXJwLmNhbm5vdF92aXN1YWxpemVfZm9ybV9zdW1tYXJ5XCIsXG4gICAgICAgIFwieW1zLmVycC5jYW5ub3RfdmlzdWFsaXplX2Zvcm1fZGV0YWlsXCJcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhZGRNZXNzYWdlKHNldmVyaXR5OiBzdHJpbmcsIHN1bW1hcnk6IHN0cmluZywgZGV0YWlsOiBzdHJpbmcpIHtcbiAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7XG4gICAgICBzZXZlcml0eSxcbiAgICAgIHN1bW1hcnk6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoc3VtbWFyeSksXG4gICAgICBkZXRhaWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoZGV0YWlsKSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UGVkaWRvVmVuZGFGb3JtKCkge1xuICAgIHJldHVybiB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgIHBlZGlkb1ZlbmRhOiBbdW5kZWZpbmVkXSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0T3JkZW1WZW5kYUZvcm0oXG4gICAgcGVkaWRvVmVuZGE/OiBQZWRpZG9WZW5kYSxcbiAgICBnZXRBdXRvbWF0aWNJdGVuc09yZGVyPzogYm9vbGVhblxuICApIHtcbiAgICBpZiAoZ2V0QXV0b21hdGljSXRlbnNPcmRlcikgdGhpcy5nZXRBdXRvbWF0aWNJdGVuc09yZGVyKHBlZGlkb1ZlbmRhKTtcbiAgICByZXR1cm4gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICBpZDogW3VuZGVmaW5lZF0sXG4gICAgICBwZWRpZG9WZW5kYTogW3BlZGlkb1ZlbmRhXSxcbiAgICAgIGl0ZW5zOiB0aGlzLmZvcm1CdWlsZGVyLmFycmF5KFtdKSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0T3JkZW1WZW5kYUl0ZW1Gb3JtKHBlZGlkb1ZlbmRhSXRlbT86IFBlZGlkb1ZlbmRhSXRlbSkge1xuICAgIHJldHVybiB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgIGlkOiBbdW5kZWZpbmVkXSxcbiAgICAgIHBlZGlkbzogW3VuZGVmaW5lZF0sXG4gICAgICBpdGVtOiBbcGVkaWRvVmVuZGFJdGVtXSxcbiAgICAgIHF1YW50aWRhZGU6IFt1bmRlZmluZWRdLFxuICAgICAgbnVtZXJvUGVkaWRvQ2xpZW50ZTogW3VuZGVmaW5lZF0sXG4gICAgICBpdGVtUGVkaWRvQ2xpZW50ZTogW3VuZGVmaW5lZF0sXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGJ1c2NhckZpbGlhbCgpIHtcbiAgICBjb25zdCBwbGFudGEgPSB0aGlzLmFnZW5kYS5wbGFudGEgfHwgeyBjbnBqOiBbXSB9O1xuXG4gICAgaWYgKHBsYW50YS5jbnBqLmxlbmd0aCAhPT0gMSkge1xuICAgICAgdGhpcy5mb3JtQ2FycmVnYWRvID0gdHJ1ZTsgICAgIFxuICAgICAgcmV0dXJuO1xuICAgIH0gXG4gICAgICBcbiAgICAgIHRoaXMuZmlsaWFsU2VydmljZVxuICAgICAgLmxpc3Qoe1xuICAgICAgICBwYWdlOiAwLFxuICAgICAgICBzaXplOiAxLFxuICAgICAgICBmaWx0ZXJRdWVyeTogYHBlc3NvYS5jcGZDbnBqIGVxICcke3BsYW50YS5jbnBqWzBdfSdgLFxuICAgICAgICBkaXNwbGF5RmllbGRzOiBbXCIqXCIsIFwiZW1wcmVzYS5ub21lXCJdLFxuICAgICAgfSlcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgoeyBjb250ZW50cyB9KSA9PiB7XG4gICAgICAgIGlmIChjb250ZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoXCJmaWxpYWxcIikuc2V0VmFsdWUoRmlsaWFsLmZyb21EdG8oY29udGVudHNbMF0pKTtcbiAgICAgICAgICB0aGlzLmRpc2FibGVPcmRlcnNCdXR0b25zID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgdGhpcy5mb3JtQ2FycmVnYWRvID0gdHJ1ZTsgICBcbiAgfVxuXG4gIHByaXZhdGUgYnVzY2FyQ2xpZW50ZUFGYXR1cmFyKHBlZGlkb1ZlbmRhOiBQZWRpZG9WZW5kYUR0bykge1xuICAgIHRoaXMucGVzc29hU2VydmljZVxuICAgICAgLmxpc3Qoe1xuICAgICAgICBzaXplOiAxLFxuICAgICAgICBwYWdlOiAwLFxuICAgICAgICBmaWx0ZXJRdWVyeTogYGlkIGVxICcke3BlZGlkb1ZlbmRhLnBlc3NvYS5pZH0nYCxcbiAgICAgIH0pXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKHsgY29udGVudHMgfSkgPT4ge1xuICAgICAgICBpZiAoKGNvbnRlbnRzIHx8IFtdKS5sZW5ndGggIT09IDEpIHJldHVybjtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXBcbiAgICAgICAgICAuZ2V0KFwiY2xpZW50ZUZhdHVyYW1lbnRvXCIpXG4gICAgICAgICAgLnNldFZhbHVlKFBlc3NvYS5mcm9tRHRvKGNvbnRlbnRzWzBdKSk7XG4gICAgICB9KTtcbiAgfVxufVxuIl19
1510
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwZWRpY2FvLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHNlbmlvcnNpc3RlbWFzL3ltcy1pbnRlZ3JhdGlvbi8iLCJzb3VyY2VzIjpbInNyYy9lcnAtc2VuaW9yL2V4cGVkaWNhby9mb3JtL2V4cGVkaWNhby1mb3JtLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ2hFLE9BQU8sRUFFTCxTQUFTLEVBQ1QsS0FBSyxFQUdMLFdBQVcsRUFDWCxTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLFdBQVcsRUFDWCxXQUFXLEVBQ1gsU0FBUyxFQUNULFVBQVUsR0FHWCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUMxRSxPQUFPLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzFELE9BQU8sS0FBSyxPQUFPLE1BQU0sUUFBUSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3pELE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsU0FBUyxHQUFHLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDdkYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDhC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QyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBdHJEUTtRQUFSLEtBQUssRUFBRTswQ0FBaUIsTUFBTTswREFBQztJQUN2QjtRQUFSLEtBQUssRUFBRTs7K0RBQThCO0lBR3RDO1FBREMsU0FBUyxDQUFDLGdCQUFnQixDQUFDOzBDQUNMLFdBQVc7a0VBQU07SUFHeEM7UUFEQyxTQUFTLENBQUMsa0JBQWtCLENBQUM7MENBQ0wsV0FBVztvRUFBTTtJQXZIL0Isc0JBQXNCO1FBTGxDLFNBQVMsQ0FBQztZQUNULFFBQVEsRUFBRSxnQkFBZ0I7WUFDMUIsb3hiQUE4Qzs7U0FFL0MsQ0FBQztpREErSDRCLGdCQUFnQjtZQUMxQixNQUFNO1lBQ1AsY0FBYztZQUNMLGNBQWM7WUFDakIsV0FBVztZQUNiLGdCQUFnQjtZQUNYLGNBQWM7WUFDVix5QkFBeUI7WUFDL0IsWUFBWTtZQUNYLGFBQWE7WUFDYixhQUFhO1lBQ0wscUJBQXFCO1lBQ3hCLGtCQUFrQjtZQUNkLHNCQUFzQjtZQUMvQixhQUFhO1lBQ2xCLCtCQUErQjtZQUNwQixtQkFBbUI7WUFDckIsaUJBQWlCO1lBQ2Qsb0JBQW9CO1lBQ3hCLGdCQUFnQjtPQWpKakMsc0JBQXNCLENBdXlEbEM7SUFBRCw2QkFBQztDQUFBLEFBdnlERCxJQXV5REM7U0F2eURZLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN0YXR1c0FnZW5kYSB9IGZyb20gXCIuLy4uLy4uL2NvcmUvZW51bXMvc3RhdHVzLWFnZW5kYVwiO1xuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQge1xuICBGb3JtQnVpbGRlcixcbiAgRm9ybUNvbnRyb2wsXG4gIEZvcm1Hcm91cCxcbiAgVmFsaWRhdG9ycyxcbiAgRm9ybUFycmF5LFxuICBBYnN0cmFjdENvbnRyb2wsXG59IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tIFwiQG5neC10cmFuc2xhdGUvY29yZVwiO1xuaW1wb3J0IHsgRmllbGRUeXBlLCBGb3JtRmllbGQgfSBmcm9tIFwiQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50c1wiO1xuaW1wb3J0IHsgSG90a2V5LCBIb3RrZXlzU2VydmljZSB9IGZyb20gXCJhbmd1bGFyMi1ob3RrZXlzXCI7XG5pbXBvcnQgKiBhcyBfbW9tZW50IGZyb20gXCJtb21lbnRcIjtcbmltcG9ydCB7IE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSBcInByaW1lbmcvY29tcG9uZW50cy9jb21tb24vbWVzc2FnZXNlcnZpY2VcIjtcbmltcG9ydCB7IGZvcmtKb2luLCBvZiwgU3ViamVjdCwgdGhyb3dFcnJvciB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBjb25jYXRNYXAsIGZpbmFsaXplLCBtYXAsIHRha2VVbnRpbCwgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcbmltcG9ydCB7IEZpZWxkQ3VzdG9taXphdGlvblNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvZmllbGQtY3VzdG9taXphdGlvbi5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBGb2N1c1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvZm9jdXMuc2VydmljZVwiO1xuaW1wb3J0IHtcbiAgaXNWYWxpZEZpbHRlcixcbiAgbWVyZ2VVbmlxdWUsXG4gIHVzZXJDYW5WaXN1YWxpemUsXG59IGZyb20gXCIuLi8uLi8uLi91dGlscy91dGlsc1wiO1xuaW1wb3J0IHsgQWdlbmRhIH0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvYWdlbmRhL2FnZW5kYVwiO1xuaW1wb3J0IHsgQWdlbmRhU2VydmljZSB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL2FnZW5kYS9hZ2VuZGEuc2VydmljZVwiO1xuaW1wb3J0IHtcbiAgRXhwZWRpY2FvLFxuICBPcmRlbVZlbmRhSXRlbSxcbn0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvZXhwZWRpY2FvL2V4cGVkaWNhb1wiO1xuaW1wb3J0IHsgRXhwZWRpY2FvU2VydmljZSB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL2V4cGVkaWNhby9leHBlZGljYW8uc2VydmljZVwiO1xuaW1wb3J0IHsgRmlsaWFsIH0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvZmlsaWFsL2ZpbGlhbFwiO1xuaW1wb3J0IHtcbiAgRmlsaWFsU2VydmljZSxcbiAgUGVzcXVpc2FyRmlsaWFpc0lucHV0LFxufSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy9maWxpYWwvZmlsaWFsLnNlcnZpY2VcIjtcbmltcG9ydCB7IFBlZGlkb1ZlbmRhU2VydmljZSB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL3BlZGlkby12ZW5kYS9wZWRpZG8tdmVuZGEuc2VydmljZVwiO1xuaW1wb3J0IHsgUGVzc29hIH0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvcGVzc29hL3Blc3NvYVwiO1xuaW1wb3J0IHsgUGVzc29hU2VydmljZSB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL3Blc3NvYS9wZXNzb2Euc2VydmljZVwiO1xuaW1wb3J0IHsgVHJhbnNwb3J0YWRvcmFTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvdHJhbnNwb3J0YWRvcmEvdHJhbnNwb3J0YWRvcmEuc2VydmljZVwiO1xuaW1wb3J0IHsgRXhwZWRpY2FvQ2hlZ2FkYVZlaWN1bG9PdmVycmlkZSB9IGZyb20gXCIuLi9leHBlZGljYW8tY2hlZ2FkYS12ZWljdWxvLm92ZXJyaWRlXCI7XG5pbXBvcnQgeyBQZWRpZG9WZW5kYSB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL3BlZGlkby12ZW5kYS9wZWRpZG8tdmVuZGFcIjtcbmltcG9ydCB7IFBlZGlkb1ZlbmRhSXRlbSB9IGZyb20gXCIuLi8uLi9jb3JlL2VudGl0aWVzL3BlZGlkby12ZW5kYS1pdGVtL3BlZGlkby12ZW5kYS1pdGVtXCI7XG5pbXBvcnQgeyBQZWRpZG9WZW5kYUl0ZW1TZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2NvcmUvZW50aXRpZXMvcGVkaWRvLXZlbmRhLWl0ZW0vcGVkaWRvLXZlbmRhLWl0ZW0uc2VydmljZVwiO1xuaW1wb3J0IHsgVHJhbnNwb3J0YWRvcmEgfSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy90cmFuc3BvcnRhZG9yYS90cmFuc3BvcnRhZG9yYVwiO1xuaW1wb3J0IHtcbiAgUGVkaWRvVmVuZGFEdG8sXG4gIFBlc3F1aXNhUGVkaWRvc1ZlbmRhRHRvLFxufSBmcm9tIFwiLi4vLi4vY29yZS9lbnRpdGllcy9wZWRpZG8tdmVuZGEvcGVkaWRvLXZlbmRhLWR0b1wiO1xuaW1wb3J0IHsgb25Mb29rdXBSZXF1ZXN0LCBvblNlYXJjaFJlcXVlc3QgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvbG9va3VwLXV0aWxzXCI7XG5pbXBvcnQgeyBDb25maXJtYXRpb25TZXJ2aWNlLCBTb3J0TWV0YSB9IGZyb20gXCJwcmltZW5nL2FwaVwiO1xuaW1wb3J0IHsgRXJwUHJvY2Vzc0RhdGEgfSBmcm9tIFwiLi4vLi4vY29yZS9lcnAtcHJvY2Vzcy1kYXRhL2VycC1wcm9jZXNzLWRhdGFcIjtcbmltcG9ydCB7IEVycFByb2Nlc3NTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2NvcmUvZXJwLXByb2Nlc3MtZGF0YS9lcnAtcHJvY2Vzcy1zZXJ2aWNlXCI7XG5pbXBvcnQgeyBFcnBGb3JtQ29uZmlnU2VydmljZSB9IGZyb20gXCIuLi8uLi9jb3JlL2VycC1mb3JtLWNvbmZpZy9lcnAtZm9ybS1jb25maWctc2VydmljZVwiO1xuaW1wb3J0IHsgSGFzQ2hhbmdlU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvaGFzLWNoYW5nZS9oYXMtY2hhbmdlLXNlcnZpY2UnO1xuXG5jb25zdCBtb21lbnQgPSBfbW9tZW50O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwiZXhwZWRpY2FvLWZvcm1cIixcbiAgdGVtcGxhdGVVcmw6IFwiLi9leHBlZGljYW8tZm9ybS5jb21wb25lbnQuaHRtbFwiLFxuICBzdHlsZVVybHM6IFtcIi4uLy4uL2VycC1zZW5pb3Iuc2Nzc1wiXSxcbn0pXG5leHBvcnQgY2xhc3MgRXhwZWRpY2FvRm9ybUNvbXBvbmVudFxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0XG57XG4gIHB1YmxpYyBsb2NhbGVDb25maWc6IGFueSA9IHt9O1xuICBwdWJsaWMgY3VycmVuY3lMb2NhbGVPcHRpb25zOiBhbnkgPSB7fTtcbiAgcHVibGljIHBlcm1pc3Npb25zOiBhbnkgPSB7fTtcbiAgcHVibGljIGFsbFBlcm1pc3Npb25zOiBhbnkgPSB7fTtcbiAgcHVibGljIHBlZGlkb0F0dWFsOiBGb3JtR3JvdXA7XG5cbiAgcHVibGljIGZvcm1Hcm91cDogRm9ybUdyb3VwO1xuICBwdWJsaWMgcGVkaWRvVmVuZGFGb3JtOiBGb3JtR3JvdXA7XG4gIHB1YmxpYyBpdGVtRm9ybUdyb3VwOiBGb3JtR3JvdXA7XG4gIHB1YmxpYyBsb2FkaW5nOiBib29sZWFuO1xuICBwdWJsaWMgbWFpblBhbmVsQ29sbGFwc2VkID0gZmFsc2U7XG4gIHB1YmxpYyB2aXNpYmxlRGlhbG9nID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBmb3JtQ2FycmVnYWRvID0gZmFsc2U7XG5cbiAgcHVibGljIGNsaWVudGVGYXR1cmFtZW50b0xvb2t1cFN1Z2dlc3Rpb25zOiBQZXNzb2FbXTtcbiAgcHVibGljIGNsaWVudGVGYXR1cmFtZW50b0xvb2t1cERpc3BsYXlGaWVsZHMgPSBbXCJjb2RpZ29cIiwgXCJub21lXCIsIFwiY3BmQ25walwiXTtcbiAgcHVibGljIGNsaWVudGVGYXR1cmFtZW50b0FkdmFuY2VkRGlzcGxheUZpZWxkcyA9IFtcImlkXCIsIFwiY29kaWdvXCIsIFwibm9tZVwiXTtcbiAgcHVibGljIGNsaWVudGVGYXR1cmFtZW50b0xvb2t1cFNlcGFyYXRvciA9IFwiIC0gXCI7XG4gIHB1YmxpYyBjbGllbnRlRmF0dXJhbWVudG9TZWFyY2hGaWVsZHM6IEZvcm1GaWVsZFtdO1xuICBwdWJsaWMgY2xpZW50ZUZhdHVyYW1lbnRvU2VhcmNoR3JpZEZpZWxkczogRm9ybUZpZWxkW107XG4gIHB1YmxpYyBjbGllbnRlRmF0dXJhbWVudG9TZWFyY2hHcmlkRGF0YTogUGVzc29hW107XG4gIHB1YmxpYyBjbGllbnRlRmF0dXJhbWVudG9TZWFyY2hUb3RhbFJlY29yZHM6IG51bWJlcjtcblxuICBwdWJsaWMgY2xpZW50ZVJlbWVzc2FMb29rdXBTdWdnZXN0aW9uczogUGVzc29hW107XG4gIHB1YmxpYyBjbGllbnRlUmVtZXNzYUxvb2t1cERpc3BsYXlGaWVsZHMgPSBbXCJjb2RpZ29cIiwgXCJub21lXCIsIFwiY3BmQ25walwiXTtcbiAgcHVibGljIGNsaWVudGVSZW1lc3NhQWR2YW5jZWREaXNwbGF5RmllbGRzID0gW1wiaWRcIiwgXCJjb2RpZ29cIiwgXCJub21lXCJdO1xuICBwdWJsaWMgY2xpZW50ZVJlbWVzc2FMb29rdXBTZXBhcmF0b3IgPSBcIiAtIFwiO1xuICBwdWJsaWMgY2xpZW50ZVJlbWVzc2FTZWFyY2hGaWVsZHM6IEZvcm1GaWVsZFtdO1xuICBwdWJsaWMgY2xpZW50ZVJlbWVzc2FTZWFyY2hHcmlkRmllbGRzOiBGb3JtRmllbGRbXTtcbiAgcHVibGljIGNsaWVudGVSZW1lc3NhU2VhcmNoR3JpZERhdGE6IFBlc3NvYVtdO1xuICBwdWJsaWMgY2xpZW50ZVJlbWVzc2FTZWFyY2hUb3RhbFJlY29yZHM6IG51bWJlcjtcblxuICBwdWJsaWMgZmlsaWFsTG9va3VwU3VnZ2VzdGlvbnM6IEZpbGlhbFtdO1xuICBwdWJsaWMgZmlsaWFsTG9va3VwRGlzcGxheUZpZWxkcyA9IFtcImNvZGlnb1wiLCBcIm5vbWVcIl07XG4gIHB1YmxpYyBmaWxpYWxBZHZhbmNlZERpc3BsYXlGaWVsZHMgPSBbXCJpZFwiLCBcImNvZGlnb1wiLCBcIm5vbWVcIl07XG4gIHB1YmxpYyBmaWxpYWxMb29rdXBTZXBhcmF0b3IgPSBcIiAtIFwiO1xuICBwdWJsaWMgZmlsaWFsU2VhcmNoRmllbGRzOiBGb3JtRmllbGRbXTtcbiAgcHVibGljIGZpbGlhbFNlYXJjaEdyaWRGaWVsZHM6IEZvcm1GaWVsZFtdO1xuICBwdWJsaWMgZmlsaWFsU2VhcmNoR3JpZERhdGE6IEZpbGlhbFtdO1xuICBwdWJsaWMgZmlsaWFsU2VhcmNoVG90YWxSZWNvcmRzOiBudW1iZXI7XG5cbiAgcHVibGljIHRyYW5zcG9ydGFkb3JhTG9va3VwU3VnZ2VzdGlvbnM6IFRyYW5zcG9ydGFkb3JhW107XG4gIHB1YmxpYyB0cmFuc3BvcnRhZG9yYUxvb2t1cERpc3BsYXlGaWVsZHMgPSBbXG4gICAgXCJjb2RpZ29cIixcbiAgICBcInBlc3NvYS5ub21lXCIsXG4gICAgXCJwZXNzb2EuY3BmQ25walwiLFxuICBdO1xuICBwdWJsaWMgdHJhbnNwb3J0YWRvcmFBZHZhbmNlZERpc3BsYXlGaWVsZHMgPSBbXG4gICAgXCJpZFwiLFxuICAgIFwiY29kaWdvXCIsXG4gICAgXCJwZXNzb2Eubm9tZVwiLFxuICAgIFwicGVzc29hLmNwZkNucGpcIixcbiAgXTtcbiAgcHVibGljIHRyYW5zcG9ydGFkb3JhTG9va3VwU2VwYXJhdG9yID0gXCIgLSBcIjtcbiAgcHVibGljIHRyYW5zcG9ydGFkb3JhU2VhcmNoRmllbGRzOiBGb3JtRmllbGRbXTtcbiAgcHVibGljIHRyYW5zcG9ydGFkb3JhU2VhcmNoR3JpZEZpZWxkczogRm9ybUZpZWxkW107XG4gIHB1YmxpYyB0cmFuc3BvcnRhZG9yYVNlYXJjaEdyaWREYXRhOiBUcmFuc3BvcnRhZG9yYVtdO1xuICBwdWJsaWMgdHJhbnNwb3J0YWRvcmFTZWFyY2hUb3RhbFJlY29yZHM6IG51bWJlcjtcblxuICBwdWJsaWMgcGVkaWRvVmVuZGFMb29rdXBTdWdnZXN0aW9uczogUGVkaWRvVmVuZGFbXTtcbiAgcHVibGljIHBlZGlkb1ZlbmRhTG9va3VwRGlzcGxheUZpZWxkcyA9IFtcIm51bWVyb1wiLCBcImNsaWVudGVcIl07XG4gIHB1YmxpYyBwZWRpZG9WZW5kYUFkdmFuY2VkRGlzcGxheUZpZWxkcyA9IFtcbiAgICBcImlkXCIsXG4gICAgXCJudW1lcm9cIixcbiAgICBcImZpbGlhbC5ub21lXCIsXG4gICAgXCJmaWxpYWwuY29kaWdvXCIsXG4gICAgXCJwZXNzb2EuaWRcIixcbiAgICBcInBlc3NvYS5jb2RpZ29cIixcbiAgICBcInBlc3NvYS5ub21lXCIsXG4gIF07XG4gIHB1YmxpYyBwZWRpZG9WZW5kYUxvb2t1cFNlcGFyYXRvciA9IFwiIC0gXCI7XG4gIHB1YmxpYyBwZWRpZG9WZW5kYVNlYXJjaEZpZWxkczogRm9ybUZpZWxkW107XG4gIHB1YmxpYyBwZWRpZG9WZW5kYVNlYXJjaEdyaWRGaWVsZHM6IEZvcm1GaWVsZFtdO1xuICBwdWJsaWMgcGVkaWRvVmVuZGFTZWFyY2hHcmlkRGF0YTogUGVkaWRvVmVuZGFbXTtcbiAgcHVibGljIHBlZGlkb1ZlbmRhU2VhcmNoVG90YWxSZWNvcmRzOiBudW1iZXI7XG5cbiAgcHVibGljIHBlZGlkb1ZlbmRhSXRlbUxvb2t1cFN1Z2dlc3Rpb25zOiBQZWRpZG9WZW5kYUl0ZW1bXTtcbiAgcHVibGljIHBlZGlkb1ZlbmRhSXRlbUxvb2t1cERpc3BsYXlGaWVsZHMgPSBbXCJzZXF1ZW5jaWFcIiwgXCJza3UuZGVzY3JpY2FvXCJdO1xuICBwdWJsaWMgcGVkaWRvVmVuZGFJdGVtQWR2YW5jZWREaXNwbGF5RmllbGRzID0gW1xuICAgIFwiaWRcIixcbiAgICBcInNlcXVlbmNpYVwiLFxuICAgIFwic2t1LmRlc2NyaWNhb1wiLFxuICBdO1xuICBwdWJsaWMgcGVkaWRvVmVuZGFJdGVtTG9va3VwU2VwYXJhdG9yID0gXCIgLSBcIjtcbiAgcHVibGljIHBlZGlkb1ZlbmRhSXRlbVNlYXJjaEZpZWxkczogRm9ybUZpZWxkW107XG4gIHB1YmxpYyBwZWRpZG9WZW5kYUl0ZW1TZWFyY2hHcmlkRmllbGRzOiBGb3JtRmllbGRbXTtcbiAgcHVibGljIHBlZGlkb1ZlbmRhSXRlbVNlYXJjaEdyaWREYXRhOiBQZWRpZG9WZW5kYUl0ZW1bXTtcbiAgcHVibGljIHBlZGlkb1ZlbmRhSXRlbVNlYXJjaFRvdGFsUmVjb3JkczogbnVtYmVyO1xuXG4gIHB1YmxpYyBhZ2VuZGFMb29rdXBTdWdnZXN0aW9uczogQWdlbmRhW107XG4gIHB1YmxpYyBhZ2VuZGFMb29rdXBEaXNwbGF5RmllbGRzID0gW1wiaWRcIiwgXCJkZXNjcmljYW9cIl07XG4gIHB1YmxpYyBhZ2VuZGFBZHZhbmNlZERpc3BsYXlGaWVsZHMgPSBbXCJpZFwiLCBcImRlc2NyaWNhb1wiXTtcbiAgcHVibGljIGFnZW5kYUxvb2t1cFNlcGFyYXRvciA9IFwiIC0gXCI7XG4gIHB1YmxpYyBhZ2VuZGFTZWFyY2hGaWVsZHM6IEZvcm1GaWVsZFtdO1xuICBwdWJsaWMgYWdlbmRhU2VhcmNoR3JpZEZpZWxkczogRm9ybUZpZWxkW107XG4gIHB1YmxpYyBhZ2VuZGFTZWFyY2hHcmlkRGF0YTogQWdlbmRhW107XG4gIHB1YmxpYyBhZ2VuZGFTZWFyY2hUb3RhbFJlY29yZHM6IG51bWJlcjtcblxuICBwdWJsaWMgZGlzYWJsZUJ1dHRvblNhdmU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwdWJsaWMgZGlzYWJsZU9yZGVyc0J1dHRvbnM6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIHB1YmxpYyB0b3RhbEVpeG9zQ29udHJhdGFkb3M6IG51bWJlciA9IDA7XG4gIHB1YmxpYyB0b3RhbEVpeG9zQ29tcG9zaWNhbzogbnVtYmVyID0gMDtcblxuICBwdWJsaWMgb3JkZXJzVmFsaWQgPSB0cnVlO1xuICBwdWJsaWMgc2F2ZUFuZEluaXRCdXR0b246IGFueTtcblxuICBASW5wdXQoKSBwcml2YXRlIGFnZW5kYTogQWdlbmRhO1xuICBASW5wdXQoKSBwcml2YXRlIHJldmFsaWRhY2FvOiBib29sZWFuO1xuXG4gIEBWaWV3Q2hpbGQoXCJjdXN0b21UZW1wbGF0ZVwiKVxuICBwdWJsaWMgY3VzdG9tVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgQFZpZXdDaGlsZChcImN1c3RvbUZvcm1GaWVsZHNcIilcbiAgcHVibGljIGN1c3RvbUZvcm1GaWVsZHM6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgcHJpdmF0ZSBuZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3QoKTsgIFxuICBwcml2YXRlIGVycFByb2Nlc3NEYXRhOiBFcnBQcm9jZXNzRGF0YTtcbiAgcHJpdmF0ZSBlbmFibGVSZXZhbGlkYXRpb246IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBleHBlZGljYW9TZXJ2aWNlOiBFeHBlZGljYW9TZXJ2aWNlLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSBtZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBob3RrZXlzU2VydmljZTogSG90a2V5c1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBmaWVsZEN1c3RvbWl6YXRpb246IEZpZWxkQ3VzdG9taXphdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmb2N1c1NlcnZpY2U6IEZvY3VzU2VydmljZSxcbiAgICBwcml2YXRlIHBlc3NvYVNlcnZpY2U6IFBlc3NvYVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmaWxpYWxTZXJ2aWNlOiBGaWxpYWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgdHJhbnNwb3J0YWRvcmFTZXJ2aWNlOiBUcmFuc3BvcnRhZG9yYVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwZWRpZG9WZW5kYVNlcnZpY2U6IFBlZGlkb1ZlbmRhU2VydmljZSxcbiAgICBwcml2YXRlIHBlZGlkb1ZlbmRhSXRlbVNlcnZpY2U6IFBlZGlkb1ZlbmRhSXRlbVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhZ2VuZGFTZXJ2aWNlOiBBZ2VuZGFTZXJ2aWNlLFxuICAgIHByaXZhdGUgb3ZlcnJpZGU6IEV4cGVkaWNhb0NoZWdhZGFWZWljdWxvT3ZlcnJpZGUsXG4gICAgcHJpdmF0ZSBjb25maXJtYXRpb25TZXJ2aWNlOiBDb25maXJtYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgZXJwUHJvY2Vzc1NlcnZpY2U6IEVycFByb2Nlc3NTZXJ2aWNlLFxuICAgIHByaXZhdGUgZXJwRm9ybUNvbmZpZ1NlcnZpY2U6IEVycEZvcm1Db25maWdTZXJ2aWNlLFxuICAgIHByaXZhdGUgaGFzQ2hhbmdlU2VydmljZTogSGFzQ2hhbmdlU2VydmljZVxuICApIHtcbiAgICB0aGlzLmZvcm1Hcm91cCA9IHRoaXMuZ2V0Rm9ybUdyb3VwKCk7XG4gICAgdGhpcy5wZWRpZG9WZW5kYUZvcm0gPSB0aGlzLmdldFBlZGlkb1ZlbmRhRm9ybSgpO1xuICAgIHRoaXMuaXRlbUZvcm1Hcm91cCA9IHRoaXMuZ2V0T3JkZW1WZW5kYUl0ZW1Gb3JtKCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5yb3V0ZS5kYXRhXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKGRhdGE6IGFueSkgPT4gdGhpcy5vblJvdXRlRGF0YUNoYW5nZShkYXRhKSk7XG5cbiAgICB0aGlzLnJvdXRlLnBhcmFtc1xuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKCh7IGFnZW5kYSB9KSA9PiB7XG4gICAgICAgIGlmIChhZ2VuZGEgIT0gXCJuZXdcIikge1xuICAgICAgICAgIHRoaXMuZ2V0RXhwZWRpY2FvKGFnZW5kYSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5idXNjYXJGaWxpYWwoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICB0aGlzLmNsaWVudGVGYXR1cmFtZW50b1NlYXJjaEZpZWxkcyA9IHRoaXMuZ2V0Q2xpZW50ZVNlYXJjaEZpZWxkcygpO1xuICAgIHRoaXMuY2xpZW50ZUZhdHVyYW1lbnRvU2VhcmNoR3JpZEZpZWxkcyA9IHRoaXMuZ2V0Q2xpZW50ZVNlYXJjaEdyaWRGaWVsZHMoKTtcblxuICAgIHRoaXMuY2xpZW50ZVJlbWVzc2FTZWFyY2hGaWVsZHMgPSB0aGlzLmdldENsaWVudGVTZWFyY2hGaWVsZHMoKTtcbiAgICB0aGlzLmNsaWVudGVSZW1lc3NhU2VhcmNoR3JpZEZpZWxkcyA9IHRoaXMuZ2V0Q2xpZW50ZVNlYXJjaEdyaWRGaWVsZHMoKTtcblxuICAgIHRoaXMuZmlsaWFsU2VhcmNoRmllbGRzID0gdGhpcy5nZXRGaWxpYWxTZWFyY2hGaWVsZHMoKTtcbiAgICB0aGlzLmZpbGlhbFNlYXJjaEdyaWRGaWVsZHMgPSB0aGlzLmdldEZpbGlhbFNlYXJjaEdyaWRGaWVsZHMoKTtcblxuICAgIHRoaXMudHJhbnNwb3J0YWRvcmFTZWFyY2hGaWVsZHMgPSB0aGlzLmdldFRyYW5zcG9ydGFkb3JhU2VhcmNoRmllbGRzKCk7XG4gICAgdGhpcy50cmFuc3BvcnRhZG9yYVNlYXJjaEdyaWRGaWVsZHMgPSB0aGlzLmdldFRyYW5zcG9ydGFkb3JhU2VhcmNoR3JpZEZpZWxkcygpO1xuXG4gICAgdGhpcy5wZWRpZG9WZW5kYVNlYXJjaEZpZWxkcyA9IHRoaXMuZ2V0UGVkaWRvVmVuZGFTZWFyY2hGaWVsZHMoKTtcbiAgICB0aGlzLnBlZGlkb1ZlbmRhU2VhcmNoR3JpZEZpZWxkcyA9IHRoaXMuZ2V0UGVkaWRvVmVuZGFTZWFyY2hHcmlkRmllbGRzKCk7XG5cbiAgICB0aGlzLnBlZGlkb1ZlbmRhSXRlbVNlYXJjaEZpZWxkcyA9IHRoaXMuZ2V0UGVkaWRvVmVuZGFJdGVtU2VhcmNoRmllbGRzKCk7XG4gICAgdGhpcy5wZWRpZG9WZW5kYUl0ZW1TZWFyY2hHcmlkRmllbGRzID0gdGhpcy5nZXRQZWRpZG9WZW5kYUl0ZW1TZWFyY2hHcmlkRmllbGRzKCk7XG5cbiAgICB0aGlzLmFnZW5kYVNlYXJjaEZpZWxkcyA9IHRoaXMuZ2V0QWdlbmRhU2VhcmNoRmllbGRzKCk7XG4gICAgdGhpcy5hZ2VuZGFTZWFyY2hHcmlkRmllbGRzID0gdGhpcy5nZXRBZ2VuZGFTZWFyY2hHcmlkRmllbGRzKCk7XG5cbiAgICB0aGlzLnNldEhvdGtleXMoKTtcblxuICAgIGlmICh0aGlzLmFnZW5kYSAmJiB0aGlzLmFnZW5kYS5leHRlcm5hbFRlbmFudCkge1xuICAgICAgdGhpcy5zZXRUcmFuc3BvcnRhZG9yYSh0aGlzLmFnZW5kYS5leHRlcm5hbFRlbmFudC5jbnBqKTtcbiAgICB9XG5cbiAgICB0aGlzLnRvdGFsRWl4b3NDb21wb3NpY2FvID0gdGhpcy5hZ2VuZGEgJiYgdGhpcy5hZ2VuZGEudmVpY3VsbyA/IHRoaXMuYWdlbmRhLnZlaWN1bG8uZWl4b3MgfHwgMCA6IDA7XG5cbiAgICB0aGlzLnNldFBlZGlkb3NWYWx1ZUNoYW5nZXMoKTtcbiAgICB0aGlzLmVycFByb2Nlc3NTZXJ2aWNlLmN1cnJlbnQuc3Vic2NyaWJlKG1lc3NhZ2UgPT4gdGhpcy5lcnBQcm9jZXNzRGF0YSA9IG1lc3NhZ2UpOyAgICBcbiAgICB0aGlzLmVycEZvcm1Db25maWdTZXJ2aWNlLmN1cnJlbnQuc3Vic2NyaWJlKG1lc3NhZ2UgPT4gdGhpcy5lbmFibGVSZXZhbGlkYXRpb24gPSBtZXNzYWdlKTsgIFxuXG4gICAgdGhpcy5yZXZhbGlkYWNhb1RyYW5zcG9ydGFkb3JhICgpO1xuICAgIHRoaXMudmVyaWZpY2FTZVRlbUFsdGVyYWNhbygpO1xuICB9XG4gICAgICAgXG4gIHByaXZhdGUgdmVyaWZpY2FTZVRlbUFsdGVyYWNhbygpIHtcbiAgICB0aGlzLmZvcm1Hcm91cC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuZm9ybUNhcnJlZ2Fkbykge1xuICAgICAgICAgICAgdGhpcy5oYXNDaGFuZ2VTZXJ2aWNlLmhhc0NoYW5nZSh0aGlzLmFnZW5kYS5pZCk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmV2YWxpZGFjYW9UcmFuc3BvcnRhZG9yYSAoKSB7XG4gICAgdGhpcy5mb3JtR3JvdXAuZ2V0KFwidHJhbnNwb3J0YWRvcmFcIikudmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZSgoXykgPT4ge1xuICAgICAgY29uc3QgdHJhbnNwID0gdGhpcy5mb3JtR3JvdXAuZ2V0KFwidHJhbnNwb3J0YWRvcmFcIikudmFsdWU7XG4gICAgICBpZiAodGhpcy5lcnBQcm9jZXNzU2VydmljZSAmJiB0cmFuc3ApIHsgICAgICAgICAgICAgICAgXG4gICAgICAgICAgdGhpcy5lcnBQcm9jZXNzRGF0YS50cmFuc3BvcnRhZG9yYUlkID0gdHJhbnNwLmlkOyAgICAgICAgICBcbiAgICAgICAgICB0aGlzLmVycFByb2Nlc3NTZXJ2aWNlLmNoYW5nZURhdGEodGhpcy5lcnBQcm9jZXNzRGF0YSk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfSk7ICAgXG4gIH1cblxuICBwdWJsaWMgYWJyaXJQZWRpZG9WZW5kYShwZWRpZG9WZW5kYT86IFBlZGlkb1ZlbmRhKSB7XG4gICAgY29uc3QgYnV0dG9ucyA9IGRvY3VtZW50XG4gICAgICAuZ2V0RWxlbWVudEJ5SWQoXCJwZWRpZG9WZW5kYVwiKVxuICAgICAgLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiYnV0dG9uXCIpO1xuXG4gICAgaWYgKCFidXR0b25zLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucGVkaWRvVmVuZGFGb3JtLnBhdGNoVmFsdWUoeyBwZWRpZG9WZW5kYSB9KTtcbiAgICBidXR0b25zWzBdLmNsaWNrKCk7XG4gIH1cblxuICBwdWJsaWMgZXhjbHVpclBlZGlkb1ZlbmRhKGluZGV4OiBudW1iZXIpIHtcbiAgICAodGhpcy5mb3JtR3JvdXAuZ2V0KFwicGVkaWRvc1wiKSBhcyBGb3JtQXJyYXkpLnJlbW92ZUF0KGluZGV4KTtcbiAgfVxuXG4gIHB1YmxpYyBhYnJpclBlZGlkb1ZlbmRhSXRlbShcbiAgICBwZWRpZG86IEZvcm1Hcm91cCxcbiAgICBwZWRpZG9WZW5kYUl0ZW0/OiBPcmRlbVZlbmRhSXRlbVxuICApIHtcbiAgICB0aGlzLml0ZW1Gb3JtR3JvdXAucGF0Y2hWYWx1ZShcbiAgICAgIHBlZGlkb1ZlbmRhSXRlbSB8fCB7IGl0ZW06IHVuZGVmaW5lZCwgcXVhbnRpZGFkZTogMSB9XG4gICAgKTtcbiAgICB0aGlzLnBlZGlkb0F0dWFsID0gcGVkaWRvO1xuICAgIHRoaXMudmlzaWJsZURpYWxvZyA9IHRydWU7XG4gIH1cblxuICBwdWJsaWMgZXhjbHVpclBlZGlkb1ZlbmRhSXRlbShpZDogc3RyaW5nLCBwZWRpZG86IEZvcm1Hcm91cCkge1xuICAgIGNvbnN0IGluZGV4ID0gKFxuICAgICAgKHBlZGlkby5nZXQoXCJpdGVuc1wiKSBhcyBGb3JtQXJyYXkpLnZhbHVlIGFzIE9yZGVtVmVuZGFJdGVtW11cbiAgICApLmZpbmRJbmRleCgoaXRlbSkgPT4gaXRlbS5pdGVtLmlkID09PSBpZCk7XG4gICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgIChwZWRpZG8uZ2V0KFwiaXRlbnNcIikgYXMgRm9ybUFycmF5KS5yZW1vdmVBdChpbmRleCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNldFBlZGlkb3NWYWx1ZUNoYW5nZXMoKSB7XG4gICAgKHRoaXMuZm9ybUdyb3VwLmdldChcInBlZGlkb3NcIikgYXMgRm9ybUFycmF5KS52YWx1ZUNoYW5nZXNcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHBlZGlkb3NMZW5ndGggPSAodGhpcy5mb3JtR3JvdXAuZ2V0KFwicGVkaWRvc1wiKSBhcyBGb3JtQXJyYXkpXG4gICAgICAgICAgLmxlbmd0aDtcbiAgICAgICAgdGhpcy5vcmRlcnNWYWxpZCA9IHBlZGlkb3NMZW5ndGggPiAwO1xuICAgICAgICB0aGlzLmZvcm1Hcm91cFxuICAgICAgICAgIC5nZXQoXCJmaWxpYWxcIilcbiAgICAgICAgICBbcGVkaWRvc0xlbmd0aCA+PSAxID8gXCJkaXNhYmxlXCIgOiBcImVuYWJsZVwiXSgpO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc2VsZWNpb25hclBlZGlkb1ZlbmRhKHBlZGlkb1ZlbmRhOiBQZWRpZG9WZW5kYSkge1xuICAgIGNvbnN0IGNoZWNrT3JkZXJzID0gKG9yZGVyOiBhbnkpID0+IG9yZGVyLnBlZGlkb1ZlbmRhLmlkID09PSBwZWRpZG9WZW5kYS5pZDtcbiAgICBjb25zdCBwZWRpZG9zID0gdGhpcy5mb3JtR3JvdXAuZ2V0KFwicGVkaWRvc1wiKS52YWx1ZTtcblxuICAgIGlmIChwZWRpZG9zLmZpbmQoY2hlY2tPcmRlcnMpKSB7XG4gICAgICByZXR1cm4gdGhpcy5hZGRNZXNzYWdlKFxuICAgICAgICBcIndhcm5cIixcbiAgICAgICAgdGhpcy50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICBcInltcy5lcnAucGVkaWRvX3ZlbmRhX3NlYXJjaF9hbHJlYWR5X3NlbGVjdGVkX3N1bW1hcnlcIlxuICAgICAgICApLFxuICAgICAgICB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgIFwieW1zLmVycC5wZWRpZG9fdmVuZGFfc2VhcmNoX2FscmVhZHlfc2VsZWN0ZWRfZGV0YWlsXCJcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICAodGhpcy5mb3JtR3JvdXAuZ2V0KFwicGVkaWRvc1wiKSBhcyBGb3JtQXJyYXkpXG4gICAgLnB1c2godGhpcy5nZXRPcmRlbVZlbmRhRm9ybShwZWRpZG9WZW5kYSwgdHJ1ZSkpO1xuXG4gICAgaWYgKFxuICAgICAgISFwZWRpZG9WZW5kYSAmJlxuICAgICAgKHRoaXMuZm9ybUdyb3VwLmdldChcInBlZGlkb3NcIikgYXMgRm9ybUFycmF5KS5sZW5ndGggPT09IDEgJiZcbiAgICAgICF0aGlzLmZvcm1Hcm91cC5nZXQoXCJjbGllbnRlRmF0dXJhbWVudG9cIikudmFsdWVcbiAgICApIHtcbiAgICAgIHRoaXMuYnVzY2FyQ2xpZW50ZUFGYXR1cmFyKHBlZGlkb1ZlbmRhIGFzIGFueSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNlbGVjaW9uYXJQZWRpZG9WZW5kYUl0ZW0oKSB7XG4gICAgY29uc3QgaXRlbSA9IHRoaXMuaXRlbUZvcm1Hcm91cC52YWx1ZTtcbiAgICBjb25zdCBwZWRpZG8gPSB0aGlzLnBlZGlkb0F0dWFsLmdldChcIml0ZW5zXCIpLnZhbHVlO1xuICAgIGNvbnN0IGNoZWNrT3JkZXJJdGVucyA9IChvcmRlcjogYW55KSA9PiBvcmRlci5pdGVtLmlkID09PSBpdGVtLml0ZW0uaWQ7XG4gICAgaWYgKHBlZGlkbyAmJiBpdGVtICYmIGl0ZW0uaXRlbSAmJiBwZWRpZG8uZmluZChjaGVja09yZGVySXRlbnMpKVxuICAgICAgcmV0dXJuIHRoaXMuYWRkTWVzc2FnZShcbiAgICAgICAgXCJ3YXJuXCIsXG4gICAgICAgIHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgXCJ5bXMuZXJwLml0ZW1fcGVkaWRvX3ZlbmRhX3NlYXJjaF9hbHJlYWR5X3NlbGVjdGVkX3N1bW1hcnlcIlxuICAgICAgICApLFxuICAgICAgICB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgIFwieW1zLmVycC5pdGVtX3BlZGlkb192ZW5kYV9zZWFyY2hfYWxyZWFkeV9zZWxlY3RlZF9kZXRhaWxcIlxuICAgICAgICApXG4gICAgICApO1xuICAgIGNvbnN0IGZvcm0gPSB0aGlzLmdldE9yZGVtVmVuZGFJdGVtRm9ybSgpO1xuICAgIGZvcm0ucGF0Y2hWYWx1ZSh7IC4uLnRoaXMuaXRlbUZvcm1Hcm91cC52YWx1ZSB9KTtcbiAgICBpZiAoZm9ybS5nZXQoXCJpdGVtXCIpLnZhbHVlID09IHVuZGVmaW5lZCkgcmV0dXJuO1xuICAgICh0aGlzLnBlZGlkb0F0dWFsLmdldChcIml0ZW5zXCIpIGFzIEZvcm1BcnJheSkucHVzaChmb3JtKTtcbiAgICB0aGlzLnZpc2libGVEaWFsb2cgPSBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBzZWxlY2lvbmFyUGVkaWRvVmVuZGFJdGVtQXV0b21hdGljYW1lbnRlKFxuICAgIGl0ZW5zOiBhbnksXG4gICAgcGVkaWRvVmVuZGE6IGFueVxuICApIHtcbiAgICBpZiAoaXRlbnMgJiYgaXRlbnMubGVuZ3RoID09PSAxKSB7XG4gICAgICBjb25zdCBmb3JtID0gdGhpcy5nZXRPcmRlbVZlbmRhSXRlbUZvcm0oKTtcbiAgICAgIGNvbnN0IHBlZGlkb3MgPSB0aGlzLmdldFBlZGlkb3MoKTtcbiAgICAgIGNvbnN0IHBlZGlkb0F0dWFsOiBhbnkgPSBwZWRpZG9zLmZpbHRlcigocGVkaWRvOiBhbnkpID0+XG4gICAgICAgIHBlZGlkbyAmJiBwZWRpZG8udmFsdWUucGVkaWRvVmVuZGFcbiAgICAgICAgICA/IHBlZGlkby52YWx1ZS5wZWRpZG9WZW5kYS5pZCA9PT0gcGVkaWRvVmVuZGEuaWRcbiAgICAgICAgICA6IGZhbHNlXG4gICAgICApO1xuICAgICAgdGhpcy5pdGVtRm9ybUdyb3VwXG4gICAgICAgIC5nZXQoXCJpdGVtXCIpXG4gICAgICAgIC5zZXRWYWx1ZShpdGVucy5sZW5ndGggPT09IDEgPyBpdGVuc1swXSA6IHt9KTtcbiAgICAgIHRoaXMuaXRlbUZvcm1Hcm91cC5nZXQoXCJxdWFudGlkYWRlXCIpLnNldFZhbHVlKDEpO1xuICAgICAgZm9ybS5wYXRjaFZhbHVlKHsgLi4udGhpcy5pdGVtRm9ybUdyb3VwLnZhbHVlIH0pO1xuICAgICAgKHBlZGlkb0F0dWFsWzBdLmdldChcIml0ZW5zXCIpIGFzIEZvcm1BcnJheSkucHVzaChmb3JtKTtcbiAgICAgIHRoaXMudmlzaWJsZURpYWxvZyA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRQZWRpZG9zKCk6IEFic3RyYWN0Q29udHJvbFtdIHtcbiAgICByZXR1cm4gKHRoaXMuZm9ybUdyb3VwLmdldChcInBlZGlkb3NcIikgYXMgRm9ybUFycmF5KS5jb250cm9scztcbiAgfVxuXG4gIHB1YmxpYyBidWlsZFRva2VucyhpdGVuczogT3JkZW1WZW5kYUl0ZW1bXSkge1xuICAgIHJldHVybiBpdGVucy5tYXAoKGl0ZW06IGFueSkgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBpdGVtICYmIGl0ZW0uaXRlbSA/IGl0ZW0uaXRlbSA6IGl0ZW07XG4gICAgICBjb25zdCBwcm9kdXRvID0gdmFsdWUuc2t1ID8gdmFsdWUuc2t1IDogdmFsdWUucHJvZHV0bztcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlkOiB2YWx1ZS5pZCxcbiAgICAgICAgbGFiZWw6IGBQcm9kdXRvOiAke3Byb2R1dG8uZGVzY3JpY2FvfSwgU2VxdWVuY2lhOiAke3ZhbHVlLnNlcXVlbmNpYX1gLFxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgY29uc3QgaW5wdXRMaXN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJpbnB1dFwiKTtcbiAgICBjb25zdCBzZWxlY3RlZElucHV0ID0gQXJyYXkuZnJvbShpbnB1dExpc3QpLmZpbmQoKGY6IGFueSkgPT4gIWYuZGlzYWJsZWQpO1xuICAgIGlmIChzZWxlY3RlZElucHV0KSB7XG4gICAgICBzZWxlY3RlZElucHV0LmZvY3VzKCk7XG4gICAgfVxuXG4gICAgdGhpcy5vdmVycmlkZS5pbml0aWFsaXplKCk7XG4gICAgdGhpcy5zYXZlQW5kSW5pdEJ1dHRvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiaW5pdFwiKTtcblxuICAgIHRoaXMuZm9ybUdyb3VwLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuZm9ybUNhcnJlZ2Fkbykge1xuICAgICAgICB0aGlzLmhhc0NoYW5nZVNlcnZpY2UuaGFzQ2hhbmdlKHRoaXMuYWdlbmRhLmlkKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IHN0YXR1c0FnZW5kYSA9IFtcIkFHVUFSREFORE9fQ09ORklSTUFDQU9fU09MSUNJVEFOVEVcIiwgXCJBR0VOREFET1wiLCBcIkFHVUFSREFORE9fQ09ORklSTUFDQU9cIiwgXCJSRUpFSVRBRE9fUE9SX1ZBTElEQUNBT1wiXTtcbiAgICBpZiAodGhpcy5hZ2VuZGEgJiYgIXN0YXR1c0FnZW5kYS5pbmNsdWRlcyh0aGlzLmFnZW5kYS5zdGF0dXMpIHx8ICF0aGlzLnBlcm1pc3Npb25zLmVkaXRhcikge1xuICAgICAgdGhpcy5mb3JtR3JvdXAuZGlzYWJsZSgpO1xuICAgICAgdGhpcy5kaXNhYmxlQnV0dG9uU2F2ZSA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYWdlbmRhICYmIHRoaXMuYWdlbmRhLmNyZWF0ZWRCeUVycCkge1xuICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KFwiZmlsaWFsXCIpLmRpc2FibGUoKTtcbiAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChcInRyYW5zcG9ydGFkb3JhXCIpLmRpc2FibGUoKTtcbiAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChcImNsaWVudGVSZW1lc3NhXCIpLmRpc2FibGUoKTtcbiAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChcImNsaWVudGVGYXR1cmFtZW50b1wiKS5kaXNhYmxlKCk7XG4gICAgICB0aGlzLnBlZGlkb1ZlbmRhRm9ybS5kaXNhYmxlKCk7XG4gICAgICB0aGlzLml0ZW1Gb3JtR3JvdXAuZGlzYWJsZSgpO1xuICAgICAgdGhpcy5kaXNhYmxlT3JkZXJzQnV0dG9ucyA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMubmdVbnN1YnNjcmliZS5uZXh0KCk7XG4gICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5vdmVycmlkZS5yZW1vdmUoKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRIb3RrZXlzKCkge1xuICAgIHRoaXMuaG90a2V5c1NlcnZpY2UuYWRkKFxuICAgICAgbmV3IEhvdGtleShcbiAgICAgICAgXCJhbHQrc2hpZnQrc1wiLFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuaXNOZXcoKSB8fCB0aGlzLnBlcm1pc3Npb25zLmVkaXRhcikgdGhpcy5vblNhdmUoKTtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0sXG4gICAgICAgIFtcIklOUFVUXCIsIFwiU0VMRUNUXCIsIFwiVEVYVEFSRUFcIl1cbiAgICAgIClcbiAgICApO1xuXG4gICAgdGhpcy5ob3RrZXlzU2VydmljZS5hZGQoXG4gICAgICBuZXcgSG90a2V5KFxuICAgICAgICBcImFsdCtzaGlmdCtjXCIsXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICB0aGlzLm9uQ2FuY2VsKCk7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9LFxuICAgICAgICBbXCJJTlBVVFwiLCBcIlNFTEVDVFwiLCBcIlRFWFRBUkVBXCJdXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBpc05ldygpIHtcbiAgICByZXR1cm4gIXRoaXMuZm9ybUdyb3VwLnZhbHVlLmlkO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZVN1Z2dlc3Rpb25zKHZhbHVlOiBhbnkpIHtcbiAgICBpZiAodmFsdWUuYWdlbmRhKSB7XG4gICAgICB2YWx1ZS5hZ2VuZGEubGFiZWwgPSB0aGlzLmdldFN1Z2dlc3Rpb25WYWx1ZShcbiAgICAgICAgW1wiaWRcIiwgXCJkZXNjcmljYW9cIl0sXG4gICAgICAgIFwiYWdlbmRhXCIsXG4gICAgICAgIHZhbHVlLFxuICAgICAgICB0aGlzLmFnZW5kYUxvb2t1cFNlcGFyYXRvclxuICAgICAgKTtcbiAgICAgIGlmICh2YWx1ZS5hZ2VuZGEubGFiZWwudHJpbSgpID09PSB0aGlzLmFnZW5kYUxvb2t1cFNlcGFyYXRvci50cmltKCkpIHtcbiAgICAgICAgZGVsZXRlIHZhbHVlLmFnZW5kYS5sYWJlbDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0U3VnZ2VzdGlvblZhbHVlKFxuICAgIGRpc3BsYXlGaWVsZHM6IHN0cmluZ1tdLFxuICAgIG93bmVyRW50aXR5OiBzdHJpbmcsXG4gICAgdmFsdWU6IGFueSxcbiAgICBzZXBhcmF0b3I6IHN0cmluZ1xuICApIHtcbiAgICByZXR1cm4gZGlzcGxheUZpZWxkc1xuICAgICAgLm1hcCgoZmllbGQpID0+IHRoaXMuZ2V0UHJvcCh2YWx1ZSwgYCR7b3duZXJFbnRpdHl9LiR7ZmllbGR9YCkpXG4gICAgICAucmVkdWNlKChhY2M6IGFueSwgdmFsOiBhbnkpID0+IGAke2FjY30ke3NlcGFyYXRvcn0ke3ZhbH1gKTtcbiAgfVxuXG4gIHB1YmxpYyBvblJvdXRlRGF0YUNoYW5nZShkYXRhOiBhbnkpIHtcbiAgICBjb25zdCB7IGN1cnJlbmN5U3ltYm9sLCB0aG91c2FuZHNTZXBhcmF0b3IsIGRlY2ltYWxTZXBhcmF0b3IgfSA9XG4gICAgICBkYXRhLmxvY2FsZUNvbmZpZy5udW1iZXI7XG5cbiAgICB0aGlzLmxvY2FsZUNvbmZpZyA9IGRhdGEubG9jYWxlQ29uZmlnO1xuICAgIHRoaXMuY3VycmVuY3lMb2NhbGVPcHRpb25zID0ge1xuICAgICAgYWxpZ246IFwibGVmdFwiLFxuICAgICAgcHJlZml4OiBjdXJyZW5jeVN5bWJvbCxcbiAgICAgIHRob3VzYW5kczogdGhvdXNhbmRzU2VwYXJhdG9yLFxuICAgICAgZGVjaW1hbDogZGVjaW1hbFNlcGFyYXRvcixcbiAgICB9O1xuICAgIHRoaXMucGVybWlzc2lvbnMgPSBkYXRhLmFsbFBlcm1pc3Npb25zLmV4cGVkaWNhbztcbiAgICB0aGlzLmFsbFBlcm1pc3Npb25zID0gZGF0YS5hbGxQZXJtaXNzaW9ucztcbiAgICAvL3RoaXMudmFsaWRhdGVWaXN1YWxpemF0aW9uKCk7XG4gICAgaWYgKGRhdGEuZW50aXR5KSB7XG4gICAgICBjb25zdCBjYW5FZGl0ID0gdGhpcy5wZXJtaXNzaW9ucy5lZGl0YXI7XG4gICAgICBpZiAoIWNhbkVkaXQpIHRoaXMuZm9ybUdyb3VwLmRpc2FibGUoKTtcbiAgICAgIGNvbnN0IHZhbHVlOiBhbnkgPSBFeHBlZGljYW8uZnJvbUR0byhkYXRhLmVudGl0eSk7XG4gICAgICB0aGlzLnVwZGF0ZVN1Z2dlc3Rpb25zKHZhbHVlKTtcbiAgICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUodmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKG5ldyBFeHBlZGljYW8oKSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9uQ2FuY2VsKCkge1xuICAgIHRoaXMuZ29CYWNrKCk7XG4gIH1cblxuICBwdWJsaWMgb25TZW5kRmlsZShmaWxlc1RvRGVsZXRlOiBhbnksIGZpbGVzVG9Db21taXQ6IGFueVtdKSB7XG4gICAgY29uc3Qgb2JzZXJ2YWJsZXM6IGFueVtdID0gW107XG5cbiAgICBpZiAoIXRoaXMuZmllbGRDdXN0b21pemF0aW9uLmlzRW1wdHkoZmlsZXNUb0RlbGV0ZSkpIHtcbiAgICAgIG9ic2VydmFibGVzLnB1c2godGhpcy5maWVsZEN1c3RvbWl6YXRpb24uZGVsZXRlRmlsZXMoZmlsZXNUb0RlbGV0ZSkpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuZmllbGRDdXN0b21pemF0aW9uLmlzRW1wdHkoZmlsZXNUb0NvbW1pdCkpIHtcbiAgICAgIG9ic2VydmFibGVzLnB1c2godGhpcy5maWVsZEN1c3RvbWl6YXRpb24uY29tbWl0RmlsZXMoZmlsZXNUb0NvbW1pdCkpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5maWVsZEN1c3RvbWl6YXRpb24uaXNFbXB0eShvYnNlcnZhYmxlcykpIHtcbiAgICAgIHJldHVybiBmb3JrSm9pbihvYnNlcnZhYmxlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvZih7fSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNldFZhbHVlc1BlZGlkb0Jpb2Rpc2VsKCkge1xuICAgIGNvbnN0IG51bWVyb1BlZGlkb0NsaWVudGUgPSB0aGlzLmZvcm1Hcm91cC5nZXQoXCJudW1lcm9QZWRpZG9DbGllbnRlXCIpLnZhbHVlO1xuICAgIGNvbnN0IGl0ZW1QZWRpZG9DbGllbnRlID0gdGhpcy5mb3JtR3JvdXAuZ2V0KFwiaXRlbVBlZGlkb0NsaWVudGVcIikudmFsdWU7XG4gICAgY29uc3QgeyB2YWx1ZTogcGVkaWRvcyB9ID0gdGhpcy5mb3JtR3JvdXAuZ2V0KFwicGVkaWRvc1wiKTtcbiAgICAocGVkaWRvcyB8fCBbXSkubWFwKChlOiBhbnkpID0+IHtcbiAgICAgIGlmIChlICYmIGUuaXRlbnMgJiYgZS5pdGVucy5sZW5ndGgpIHtcbiAgICAgICAgZS5pdGVuc1swXS5udW1lcm9QZWRpZG9DbGllbnRlID0gbnVtZXJvUGVkaWRvQ2xpZW50ZTtcbiAgICAgICAgZS5pdGVuc1swXS5pdGVtUGVkaWRvQ2xpZW50ZSA9IGl0ZW1QZWRpZG9DbGllbnRlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuZm9ybUdyb3VwLmdldChcInBlZGlkb3NcIikucGF0Y2hWYWx1ZShwZWRpZG9zKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRWYWx1ZXNQZWRpZG9CaW9kaXNlbCgpIHtcbiAgICBjb25zdCBwZWRpZG9zID0gdGhpcy5mb3JtR3JvdXAuZ2V0KFwicGVkaWRvc1wiKS52YWx1ZTtcbiAgICBjb25zdCBudW1lcm9QZWRpZG9DbGllbnRlID0gdGhpcy5mb3JtR3JvdXAuZ2V0KFwibnVtZXJvUGVkaWRvQ2xpZW50ZVwiKTtcbiAgICBjb25zdCBpdGVtUGVkaWRvQ2xpZW50ZSA9IHRoaXMuZm9ybUdyb3VwLmdldChcIml0ZW1QZWRpZG9DbGllbnRlXCIpO1xuICAgIChwZWRpZG9zIHx8IFtdKS5tYXAoKGU6IGFueSkgPT4ge1xuICAgICAgaWYgKG51bWVyb1BlZGlkb0NsaWVudGUudmFsdWUgJiYgaXRlbVBlZGlkb0NsaWVudGUudmFsdWUpIHJldHVybjtcbiAgICAgIGNvbnN0IHBlZGlkb3NJbnRlcm5vID1cbiAgICAgICAgZSAmJiBlLml0ZW5zICYmIGUuaXRlbnMubGVuZ3RoID8gZS5pdGVuc1swXS5wZWRpZG8gOiBudWxsO1xuICAgICAgaWYgKFxuICAgICAgICBwZWRpZG9zSW50ZXJubyAmJlxuICAgICAgICBwZWRpZG9zSW50ZXJuby5pdGVucyAmJlxuICAgICAgICBwZWRpZG9zSW50ZXJuby5pdGVucy5sZW5ndGhcbiAgICAgICkge1xuICAgICAgICBpZiAocGVkaWRvc0ludGVybm8uaXRlbnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgbnVtZXJvUGVkaWRvQ2xpZW50ZS5wYXRjaFZhbHVlKFxuICAgICAgICAgICAgcGVkaWRvc0ludGVybm8uaXRlbnNbMF0ubnVtZXJvUGVkaWRvQ2xpZW50ZVxuICAgICAgICAgICk7XG4gICAgICAgICAgaXRlbVBlZGlkb0NsaWVudGUucGF0Y2hWYWx1ZShcbiAgICAgICAgICAgIHBlZGlkb3NJbnRlcm5vLml0ZW5zWzBdLml0ZW1QZWRpZG9DbGllbnRlXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG9uU2F2ZShzdGFydD86IGJvb2xlYW4pIHtcbiAgICB0aGlzLmZvcm1Hcm91cC5nZXQoXCJhZ2VuZGFcIikuc2V0VmFsdWUodGhpcy5hZ2VuZGEpO1xuICAgIHRoaXMub3JkZXJzVmFsaWQgPSAodGhpcy5mb3JtR3JvdXAuZ2V0KFwicGVkaWRvc1wiKSBhcyBGb3JtQXJyYXkpLmxlbmd0aCA+IDA7XG5cbiAgICBpZiAodGhpcy5mb3JtR3JvdXAuaW52YWxpZCB8fCAhdGhpcy5vcmRlcnNWYWxpZCkge1xuICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVBbGxGb3JtRmllbGRzKHRoaXMuZm9ybUdyb3VwKTtcbiAgICB9XG5cbiAgICB0aGlzLnNldFZhbHVlc1BlZGlkb0Jpb2Rpc2VsKCk7XG5cbiAgICBjb25zdCB7IGZpbGVzVG9EZWxldGUsIGZpbGVzVG9Db21taXQgfSA9IHRoaXMuZmllbGRDdXN0b21pemF0aW9uLmdldEZpbGVzKHRoaXMuZm9ybUdyb3VwKTtcbiAgICBcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuXG4gICAgaWYgKHRoaXMuaXNOZXcoKSB8fCAhdGhpcy5lbmFibGVSZXZhbGlkYXRpb24pIHtcbiAgICAgIHJldHVybiB0aGlzLnNhdmVBbmRJbml0KGZpbGVzVG9EZWxldGUsIGZpbGVzVG9Db21taXQsIHN0YXJ0KTtcbiAgICB9XG5cbiAgICB0aGlzLmVycFByb2Nlc3NEYXRhID0gdGhpcy5lcnBQcm9jZXNzU2VydmljZS5idWlsZGVyRXJwUHJvY2Vzc0RhdGEodGhpcy5lcnBQcm9jZXNzRGF0YSwgdGhpcy5mb3JtR3JvdXApO1xuICAgIHRoaXMuZXJwUHJvY2Vzc1NlcnZpY2UuY2hhbmdlRGF0YUVycCh0aGlzLmVycFByb2Nlc3NEYXRhKTtcbiAgICByZXR1cm4gdGhpcy5hZ2VuZGFTZXJ2aWNlXG4gICAgICAgIC5jaGVjYXJSZXZhbGlkYWNhbyh0aGlzLmVycFByb2Nlc3NEYXRhKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLFxuICAgICAgICAgICAgZmluYWxpemUoKCkgPT4gdGhpcy5sb2FkaW5nID0gZmFsc2UpLFxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5yZXF1ZXJSZXZhbGlkYWNhbykge1xuICAgICAgICAgICAgICAgIHRoaXMuYXR1YWxpemFBZ2VuZGFQYXJhUmVqZWl0YWRvUG9yVmFsaWRhY2FvKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5zYXZlQW5kSW5pdChmaWxlc1RvRGVsZXRlLCBmaWxlc1RvQ29tbWl0LCBzdGFydCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhdHVhbGl6YUFnZW5kYVBhcmFSZWplaXRhZG9Qb3JWYWxpZGFjYW8oKSB7XG4gICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlLmNvbmZpcm0oe1xuICAgICAgaGVhZGVyOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLnBhdGlvLmFnZW5kYV9yZXZhbGlkYWNhb190aXRsZVwiKSxcbiAgICAgIG1lc3NhZ2U6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMucGF0aW8uYWdlbmRhX3JldmFsaWRhY2FvX21lc3NhZ2VcIiksXG4gICAgICBhY2NlcHQ6ICgpID0+IHtcbiAgICAgICAgdGhpcy5oYXNDaGFuZ2VTZXJ2aWNlLmhhc0NoYW5nZVNhdmUodGhpcy5hZ2VuZGEuaWQpO1xuICAgICAgICB0aGlzLmFnZW5kYS5zdGF0dXMgPSBTdGF0dXNBZ2VuZGEuUkVKRUlUQURPX1BPUl9WQUxJREFDQU87XG4gICAgICAgIHRoaXMuYWdlbmRhLm1vdG9yaXN0YSA9IHtpZDogdGhpcy5lcnBQcm9jZXNzRGF0YS5tb3RvcmlzdGFJZH07XG4gICAgICAgIHRoaXMuYWdlbmRhLnZlaWN1bG8gPSB7aWQ6IHRoaXMuZXJwUHJvY2Vzc0RhdGEudmVpY3Vsb0lkfTtcbiAgICAgICAgdGhpcy5hZ2VuZGFTZXJ2aWNlXG4gICAgICAgICAgLmF0dWFsaXphckFnZW5kYSh0aGlzLmFnZW5kYSlcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLFxuICAgICAgICAgICAgY29uY2F0TWFwKChfKSA9PiB0aGlzLmdldFNhdmVPYnNlcnZhYmxlKCkpLFxuICAgICAgICAgICAgZmluYWxpemUoKCkgPT4gdGhpcy5sb2FkaW5nID0gZmFsc2UpLFxuICAgICAgICAgIClcbiAgICAgICAgICAuc3Vic2NyaWJlKChfKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnN1Y2Nlc3NNZXNzYWdlKCk7XG4gICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXCIvY2hlZ2FkYS12ZWljdWxvXCJdLCB7IHJlbGF0aXZlVG86IHRoaXMucm91dGUgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIHJlamVjdDogKCkgPT4gdGhpcy5sb2FkaW5nID0gZmFsc2UsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNhdmVBbmRJbml0KGZpbGVzVG9EZWxldGU6IGFueSwgZmlsZXNUb0NvbW1pdDogYW55W10sIHN0YXJ0OiBib29sZWFuKSB7XG4gICAgdGhpcy5hdHVhbGl6YUV4cGVkaWNhbyhmaWxlc1RvRGVsZXRlLCBmaWxlc1RvQ29tbWl0LCAoKSA9PiB7XG4gICAgICB0aGlzLmhhc0NoYW5nZVNlcnZpY2UuaGFzQ2hhbmdlU2F2ZSh0aGlzLmFnZW5kYS5pZCk7XG4gICAgICBpZiAoc3RhcnQgJiYgdGhpcy5zYXZlQW5kSW5pdEJ1dHRvbikge1xuICAgICAgICB0aGlzLmhhc0NoYW5nZVNlcnZpY2UuaGFzQ2hhbmdlU2F2ZSh0aGlzLmFnZW5kYS5pZCk7XG4gICAgICAgIHRoaXMuc2F2ZUFuZEluaXRCdXR0b24uY2xpY2soKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc3VjY2Vzc01lc3NhZ2UoKSB7XG4gICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoe1xuICAgICAgICBzZXZlcml0eTogXCJzdWNjZXNzXCIsXG4gICAgICAgIHN1bW1hcnk6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJzYXZlZF9tZXNzYWdlX3RpdGxlXCIpLFxuICAgICAgICBkZXRhaWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJzYXZlZF9tZXNzYWdlX2NvbnRlbnRcIiksXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGF0dWFsaXphRXhwZWRpY2FvKFxuICAgIGZpbGVzVG9EZWxldGU6IGFueSxcbiAgICBmaWxlc1RvQ29tbWl0OiBhbnlbXSxcbiAgICBvblN1YnNjcmliZT86IEZ1bmN0aW9uXG4gICkge1xuICAgIHJldHVybiB0aGlzLmdldFNhdmVPYnNlcnZhYmxlKClcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSxcbiAgICAgICAgZmluYWxpemUoKCkgPT4gKHRoaXMubG9hZGluZyA9IGZhbHNlKSksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCh2YWx1ZTogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChcImlkXCIpLnNldFZhbHVlKHZhbHVlLmlkIHx8IG51bGwpO1xuXG4gICAgICAgIHRoaXMub25TZW5kRmlsZShmaWxlc1RvRGVsZXRlLCBmaWxlc1RvQ29tbWl0KVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IGFueSkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXJyKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5hZGRNZXNzYWdlKFxuICAgICAgICAgICAgICBcInN1Y2Nlc3NcIixcbiAgICAgICAgICAgICAgXCJzYXZlZF9tZXNzYWdlX3RpdGxlXCIsXG4gICAgICAgICAgICAgIFwic2F2ZWRfbWVzc2FnZV9jb250ZW50XCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBvblN1YnNjcmliZSgpO1xuICAgICAgICAgIH0pO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc2V0VHJhbnNwb3J0YWRvcmEodmFsdWU6IHN0cmluZykge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgY29uc3QgY25waiA9IHZhbHVlLnJlcGxhY2UoXCIuXCIsIFwiXCIpLnJlcGxhY2UoXCIvXCIsIFwiXCIpLnJlcGxhY2UoXCItXCIsIFwiXCIpO1xuICAgICAgY29uc3QgZmlsdGVyUXVlcnkgPSBgcGVzc29hLmNwZkNucGogZXEgJyR7Y25wan0nYDtcbiAgICAgIHRoaXMudHJhbnNwb3J0YWRvcmFTZXJ2aWNlXG4gICAgICAgIC5saXN0KHsgZmlsdGVyUXVlcnksIHBhZ2U6IDAsIHNpemU6IDEwIH0pXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAuc3Vic2NyaWJlKCh7IGNvbnRlbnRzIH0pID0+IHtcbiAgICAgICAgICBpZiAoY29udGVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBjb25zdCBjb2RlID0gY29udGVudHNbMF0uY29kaWdvXG4gICAgICAgICAgICAgID8gY29udGVudHNbMF0uY29kaWdvLnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgOiBcIlwiO1xuICAgICAgICAgICAgY29uc3QgZGVzY3JpcHRpb24gPSBjb250ZW50c1swXS5kZXNjcmljYW9cbiAgICAgICAgICAgICAgPyBjb250ZW50c1swXS5kZXNjcmljYW8udG9TdHJpbmcoKVxuICAgICAgICAgICAgICA6IFwiXCI7XG4gICAgICAgICAgICBpZiAoIWRlc2NyaXB0aW9uLnRyaW0oKSAmJiAhY29kZS50cmltKCkpIHtcbiAgICAgICAgICAgICAgY29udGVudHNbMF0ubGFiZWwgPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICAgICAgIFwieW1zLmVycC5kZXJpdmFjYW9fc2VtX2Rlc2NyaWNhb1wiXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb250ZW50c1swXS5sYWJlbCA9IGAke2NvZGV9IC0gJHtkZXNjcmlwdGlvbn1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KFwidHJhbnNwb3J0YWRvcmFcIikuc2V0VmFsdWUoY29udGVudHNbMF0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldFByb3Aob2JqOiBhbnksIHBhdGg6IGFueSkge1xuICAgIHJldHVybiBwYXRoXG4gICAgICAuc3BsaXQoXCIuXCIpXG4gICAgICAucmVkdWNlKFxuICAgICAgICAocmVzdWx0OiBhbnksIHByb3A6IGFueSkgPT5cbiAgICAgICAgICByZXN1bHRbcHJvcF0gPT09IHVuZGVmaW5lZCA/IFwiXCIgOiByZXN1bHRbcHJvcF0sXG4gICAgICAgIG9ialxuICAgICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRFeHBlZGljYW8oYWdlbmRhSWQ6IHN0cmluZykge1xuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgdGhpcy5leHBlZGljYW9TZXJ2aWNlXG4gICAgICAubGlzdCh7XG4gICAgICAgIGZpbHRlclF1ZXJ5OiBgYWdlbmRhLmlkIGVxICcke2FnZW5kYUlkfSdgLFxuICAgICAgICBzaXplOiAxLFxuICAgICAgICBwYWdlOiAwLFxuICAgICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSxcbiAgICAgICAgZmluYWxpemUoKCkgPT4gKHRoaXMubG9hZGluZyA9IGZhbHNlKSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHsgY29udGVudHMgfSkgPT4ge1xuICAgICAgICBpZiAoIWNvbnRlbnRzLmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMuYnVzY2FyRmlsaWFsKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50b3RhbEVpeG9zQ29udHJhdGFkb3MgPSBjb250ZW50c1swXS5laXhvcyB8fCAwO1xuICAgICAgICB0aGlzLnRvdGFsRWl4b3NDb21wb3NpY2FvID1cbiAgICAgICAgICBjb250ZW50c1swXS5hZ2VuZGEgJiYgY29udGVudHNbMF0uYWdlbmRhLnZlaWN1bG9cbiAgICAgICAgICAgID8gY29udGVudHNbMF0uYWdlbmRhLnZlaWN1bG8uZWl4b3MgfHwgMFxuICAgICAgICAgICAgOiAwO1xuXG4gICAgICAgIGNvbnN0IGV4cGVkaWNhbyA9IEV4cGVkaWNhby5mcm9tRHRvKGNvbnRlbnRzWzBdKTtcblxuICAgICAgICB0aGlzLmZvcm1Hcm91cC5lbmFibGUoKTtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZShleHBlZGljYW8pO1xuXG4gICAgICAgIGV4cGVkaWNhby5wZWRpZG9zLmZvckVhY2goKHBlZGlkbykgPT4ge1xuICAgICAgICAgIGNvbnN0IGZvcm0gPSB0aGlzLmdldE9yZGVtVmVuZGFGb3JtKCk7XG4gICAgICAgICAgZm9ybS5wYXRjaFZhbHVlKHBlZGlkbyk7XG4gICAgICAgICAgcGVkaWRvLml0ZW5zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1Gb3JtID0gdGhpcy5nZXRPcmRlbVZlbmRhSXRlbUZvcm0oKTtcbiAgICAgICAgICAgIGl0ZW1Gb3JtLnBhdGNoVmFsdWUoaXRlbSk7XG4gICAgICAgICAgICAoZm9ybS5nZXQoXCJpdGVuc1wiKSBhcyBGb3JtQXJyYXkpLnB1c2goaXRlbUZvcm0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgICh0aGlzLmZvcm1Hcm91cC5nZXQoXCJwZWRpZG9zXCIpIGFzIEZvcm1BcnJheSkucHVzaChmb3JtKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZ2V0VmFsdWVzUGVkaWRvQmlvZGlzZWwoKTtcbiAgICAgICAgdGhpcy5mb3JtQ2FycmVnYWRvID0gdHJ1ZTtcbiAgICAgIH0pO1xuICAgIH1cblxuICBwdWJsaWMgb25DbGllbnRlRmF0dXJhbWVudG9Mb29rdXBSZXF1ZXN0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICBvbkxvb2t1cFJlcXVlc3QoXG4gICAgICB0aGlzLmNsaWVudGVGYXR1cmFtZW50b1NlYXJjaEZpZWxkcyxcbiAgICAgIHRoaXMuY2xpZW50ZUZhdHVyYW1lbnRvTG9va3VwRGlzcGxheUZpZWxkcyxcbiAgICAgIHRoaXMuY2xpZW50ZUZhdHVyYW1lbnRvQWR2YW5jZWREaXNwbGF5RmllbGRzLFxuICAgICAgdGhpcy5jbGllbnRlRmF0dXJhbWVudG9Mb29rdXBTZXBhcmF0b3IsXG4gICAgICB0aGlzLnBlc3NvYVNlcnZpY2UsXG4gICAgICB2YWx1ZSxcbiAgICAgIFwiY2xpZW50ZSBlcSB0cnVlXCJcbiAgICApXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKGxpc3Q6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmNsaWVudGVGYXR1cmFtZW50b0xvb2t1cFN1Z2dlc3Rpb25zID0gbGlzdC5jb250ZW50cztcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG9uQ2xpZW50ZUZhdHVyYW1lbnRvU2VhcmNoUmVxdWVzdChldmVudDogYW55KSB7XG4gICAgY29uc3QgeyBmaXJzdCwgcm93cywgbXVsdGlTb3J0TWV0YSwgZmlsdGVyRGF0YSB9ID0gZXZlbnQ7XG4gICAgY29uc3QgcGFnZSA9IGZpcnN0IC8gcm93cztcbiAgICBjb25zdCBzb3J0ID0gbXVsdGlTb3J0TWV0YTtcbiAgICBsZXQgZmlsdGVyUXVlcnkgPSB0aGlzLmdldENsaWVudGVTZWFyY2hGaWVsZHMoKVxuICAgICAgLmZpbHRlcihcbiAgICAgICAgKHsgbmFtZSB9KSA9PiBmaWx0ZXJEYXRhW25hbWVdICE9IHVuZGVmaW5lZCAmJiBmaWx0ZXJEYXRhW25hbWVdICE9IFwiXCJcbiAgICAgIClcbiAgICAgIC5tYXAoKHsgbmFtZSwgdHlwZSB9KSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gZmlsdGVyRGF0YVtuYW1lXTtcblxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09IFwibnVtYmVyXCIpIHJldHVybiBgJHtuYW1lfSBlcSAke3ZhbHVlfWA7XG4gICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLkRhdGUpXG4gICAgICAgICAgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKX0nYDtcbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuVGltZSlcbiAgICAgICAgICByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoXCJISDptbTpzc1wiKX0nYDtcbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuRGF0ZVRpbWUpXG4gICAgICAgICAgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KCl9J2A7XG4gICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLkVudW0pIHJldHVybiBgJHtuYW1lfSBlcSAnJHt2YWx1ZX0nYDtcbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuU3RyaW5nKVxuICAgICAgICAgIHJldHVybiBgY29udGFpbmluZyhsb3dlcigke25hbWV9KSwgbG93ZXIoJyR7dmFsdWUucmVwbGFjZShcbiAgICAgICAgICAgIC8nL2csXG4gICAgICAgICAgICBcIlxcXFwnXCJcbiAgICAgICAgICApfScpKWA7XG4gICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLkxvb2t1cCkgcmV0dXJuIGAke25hbWV9IGVxICcke3ZhbHVlLmlkfSdgO1xuICAgICAgICBlbHNlIHJldHVybiBgJHtuYW1lfSBlcSAnJHt2YWx1ZX0nYDtcbiAgICAgIH0pXG4gICAgICAuam9pbihcIiBhbmQgXCIpO1xuXG4gICAgZmlsdGVyUXVlcnkgPSBgJHtmaWx0ZXJRdWVyeX0ke1xuICAgICAgZmlsdGVyUXVlcnkgPyBcIiBhbmQgXCIgOiBcIlwiXG4gICAgfXNpdHVhY2FvIGVxIEFUSVZPIGFuZCBjbGllbnRlIGVxIHRydWVgO1xuXG4gICAgY29uc3QgZGlzcGxheUZpZWxkcyA9IG1lcmdlVW5pcXVlKFxuICAgICAgdGhpcy5jbGllbnRlRmF0dXJhbWVudG9Mb29rdXBEaXNwbGF5RmllbGRzLFxuICAgICAgdGhpcy5jbGllbnRlRmF0dXJhbWVudG9BZHZhbmNlZERpc3BsYXlGaWVsZHNcbiAgICApO1xuICAgIHRoaXMucGVzc29hU2VydmljZVxuICAgICAgLmxpc3QoeyBwYWdlLCBzb3J0LCBmaWx0ZXJRdWVyeSwgZGlzcGxheUZpZWxkcyB9KVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChsaXN0OiBhbnkpID0+ICh7XG4gICAgICAgICAgLi4ubGlzdCxcbiAgICAgICAgICBjb250ZW50czogbGlzdC5jb250ZW50cy5tYXAoKGl0ZW06IGFueSkgPT4gKHtcbiAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICBsYWJlbDogdGhpcy5jbGllbnRlRmF0dXJhbWVudG9Mb29rdXBEaXNwbGF5RmllbGRzXG4gICAgICAgICAgICAgIC5tYXAoKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkLmluZGV4T2YoXCIuXCIpID4gMCkgcmV0dXJuIHRoaXMuZ2V0UHJvcChpdGVtLCBmaWVsZCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1bZmllbGRdO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAuam9pbih0aGlzLmNsaWVudGVGYXR1cmFtZW50b0xvb2t1cFNlcGFyYXRvciksXG4gICAgICAgICAgfSkpLFxuICAgICAgICB9KSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKGxpc3Q6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmNsaWVudGVGYXR1cmFtZW50b1NlYXJjaEdyaWREYXRhID0gbGlzdC5jb250ZW50cztcbiAgICAgICAgdGhpcy5jbGllbnRlRmF0dXJhbWVudG9TZWFyY2hUb3RhbFJlY29yZHMgPSBsaXN0LnRvdGFsRWxlbWVudHM7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgcHVibGljIG9uQ2xpZW50ZVJlbWVzc2FMb29rdXBSZXF1ZXN0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICBvbkxvb2t1cFJlcXVlc3QoXG4gICAgICB0aGlzLmNsaWVudGVSZW1lc3NhU2VhcmNoRmllbGRzLFxuICAgICAgdGhpcy5jbGllbnRlUmVtZXNzYUxvb2t1cERpc3BsYXlGaWVsZHMsXG4gICAgICB0aGlzLmNsaWVudGVSZW1lc3NhQWR2YW5jZWREaXNwbGF5RmllbGRzLFxuICAgICAgdGhpcy5jbGllbnRlUmVtZXNzYUxvb2t1cFNlcGFyYXRvcixcbiAgICAgIHRoaXMucGVzc29hU2VydmljZSxcbiAgICAgIHZhbHVlLFxuICAgICAgXCJjbGllbnRlIGVxIHRydWVcIlxuICAgIClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgobGlzdDogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuY2xpZW50ZVJlbWVzc2FMb29rdXBTdWdnZXN0aW9ucyA9IGxpc3QuY29udGVudHM7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBvbkNsaWVudGVSZW1lc3NhU2VhcmNoUmVxdWVzdChldmVudDogYW55KSB7XG4gICAgY29uc3QgeyBmaXJzdCwgcm93cywgbXVsdGlTb3J0TWV0YSwgZmlsdGVyRGF0YSB9ID0gZXZlbnQ7XG4gICAgY29uc3QgcGFnZSA9IGZpcnN0IC8gcm93cztcbiAgICBjb25zdCBzb3J0ID0gbXVsdGlTb3J0TWV0YTtcbiAgICBsZXQgZmlsdGVyUXVlcnkgPSB0aGlzLmdldENsaWVudGVTZWFyY2hGaWVsZHMoKVxuICAgICAgLmZpbHRlcihcbiAgICAgICAgKHsgbmFtZSB9KSA9PiBmaWx0ZXJEYXRhW25hbWVdICE9IHVuZGVmaW5lZCAmJiBmaWx0ZXJEYXRhW25hbWVdICE9IFwiXCJcbiAgICAgIClcbiAgICAgIC5tYXAoKHsgbmFtZSwgdHlwZSB9KSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gZmlsdGVyRGF0YVtuYW1lXTtcblxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09IFwibnVtYmVyXCIpIHJldHVybiBgJHtuYW1lfSBlcSAke3ZhbHVlfWA7XG4gICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLkRhdGUpXG4gICAgICAgICAgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKX0nYDtcbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuVGltZSlcbiAgICAgICAgICByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoXCJISDptbTpzc1wiKX0nYDtcbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuRGF0ZVRpbWUpXG4gICAgICAgICAgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KCl9J2A7XG4gICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLkVudW0pIHJldHVybiBgJHtuYW1lfSBlcSAnJHt2YWx1ZX0nYDtcbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuU3RyaW5nKVxuICAgICAgICAgIHJldHVybiBgY29udGFpbmluZyhsb3dlcigke25hbWV9KSwgbG93ZXIoJyR7dmFsdWUucmVwbGFjZShcbiAgICAgICAgICAgIC8nL2csXG4gICAgICAgICAgICBcIlxcXFwnXCJcbiAgICAgICAgICApfScpKWA7XG4gICAgICAgIGVsc2UgcmV0dXJuIGAke25hbWV9IGVxICcke3ZhbHVlfSdgO1xuICAgICAgfSlcbiAgICAgIC5qb2luKFwiIGFuZCBcIik7XG5cbiAgICBmaWx0ZXJRdWVyeSA9IGAke2ZpbHRlclF1ZXJ5fSR7XG4gICAgICBmaWx0ZXJRdWVyeSA/IFwiIGFuZCBcIiA6IFwiXCJcbiAgICB9c2l0dWFjYW8gZXEgQVRJVk8gYW5kIGNsaWVudGUgZXEgdHJ1ZWA7XG5cbiAgICBjb25zdCBkaXNwbGF5RmllbGRzID0gbWVyZ2VVbmlxdWUoXG4gICAgICB0aGlzLmNsaWVudGVSZW1lc3NhTG9va3VwRGlzcGxheUZpZWxkcyxcbiAgICAgIHRoaXMuY2xpZW50ZVJlbWVzc2FBZHZhbmNlZERpc3BsYXlGaWVsZHNcbiAgICApO1xuICAgIHRoaXMucGVzc29hU2VydmljZVxuICAgICAgLmxpc3QoeyBwYWdlLCBzb3J0LCBmaWx0ZXJRdWVyeSwgZGlzcGxheUZpZWxkcyB9KVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChsaXN0OiBhbnkpID0+ICh7XG4gICAgICAgICAgLi4ubGlzdCxcbiAgICAgICAgICBjb250ZW50czogbGlzdC5jb250ZW50cy5tYXAoKGl0ZW06IGFueSkgPT4gKHtcbiAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICBsYWJlbDogdGhpcy5jbGllbnRlUmVtZXNzYUxvb2t1cERpc3BsYXlGaWVsZHNcbiAgICAgICAgICAgICAgLm1hcCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZmllbGQuaW5kZXhPZihcIi5cIikgPiAwKSByZXR1cm4gdGhpcy5nZXRQcm9wKGl0ZW0sIGZpZWxkKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbVtmaWVsZF07XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5qb2luKHRoaXMuY2xpZW50ZVJlbWVzc2FMb29rdXBTZXBhcmF0b3IpLFxuICAgICAgICAgIH0pKSxcbiAgICAgICAgfSkpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChsaXN0OiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5jbGllbnRlUmVtZXNzYVNlYXJjaEdyaWREYXRhID0gbGlzdC5jb250ZW50cztcbiAgICAgICAgdGhpcy5jbGllbnRlUmVtZXNzYVNlYXJjaFRvdGFsUmVjb3JkcyA9IGxpc3QudG90YWxFbGVtZW50cztcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG9uRmlsaWFsU2VsZWN0KGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmRpc2FibGVPcmRlcnNCdXR0b25zID0gIWV2ZW50IHx8IHRoaXMuYWdlbmRhLmNyZWF0ZWRCeUVycDtcbiAgfVxuXG4gIHB1YmxpYyBvbkZpbGlhbExvb2t1cFJlcXVlc3QodmFsdWU6IHN0cmluZykge1xuICAgIGNvbnN0IGZpbHRlcklucHV0ID0gdGhpcy5nZXRGaWxpYWxTZWFyY2hGaWVsZHMoKVxuICAgICAgLmZpbHRlcigoeyB0eXBlIH0pID0+IGlzVmFsaWRGaWx0ZXIodHlwZSwgdmFsdWUpKVxuICAgICAgLnJlZHVjZShcbiAgICAgICAgKGEsIHsgbmFtZSwgdHlwZSB9KSA9PiB7XG4gICAgICAgICAgaWYgKHR5cGUgPT09IEZpZWxkVHlwZS5JbnRlZ2VyKSB7XG4gICAgICAgICAgICByZXR1cm4geyAuLi5hLCBbbmFtZV06IHZhbHVlLnJlcGxhY2UoL1xcRC8sIFwiXCIpIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB7IC4uLmEsIFtuYW1lXTogdmFsdWUgfTtcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGNucGpzOiB0aGlzLmFnZW5kYS5wbGFudGEuY25waixcbiAgICAgICAgICBwYWdpbmE6IHsgbGltaXQ6IDEwLCBvZmZzZXQ6IDAgfSxcbiAgICAgICAgfSBhcyBQZXNxdWlzYXJGaWxpYWlzSW5wdXRcbiAgICAgICk7XG5cbiAgICB0aGlzLmZpbGlhbFNlcnZpY2VcbiAgICAgIC5saXN0RmlsaWFpcyhmaWx0ZXJJbnB1dClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgKGxpc3Q6IGFueSkgPT5cbiAgICAgICAgICAodGhpcy5maWxpYWxMb29rdXBTdWdnZXN0aW9ucyA9IGxpc3QuZmlsaWFpcy5tYXAoKGZpbGlhbDogYW55KSA9PlxuICAgICAgICAgICAgRmlsaWFsLmZyb21EdG8oZmlsaWFsKVxuICAgICAgICAgICkpXG4gICAgICApO1xuICB9XG5cbiAgcHVibGljIG9uRmlsaWFsU2VhcmNoUmVxdWVzdChldmVudDogYW55KSB7XG4gICAgY29uc3QgeyBmaXJzdCwgcm93cywgbXVsdGlTb3J0TWV0YSwgZmlsdGVyRGF0YSB9ID0gZXZlbnQ7XG4gICAgY29uc3QgcGFnZSA9IGZpcnN0IC8gcm93cztcbiAgICBjb25zdCBzb3J0OiBTb3J0TWV0YVtdID0gbXVsdGlTb3J0TWV0YTtcbiAgICBjb25zdCBzb3J0Rm9ybWF0dGVkID0gISEoc29ydCB8fCBbXSkubGVuZ3RoICYmIHtcbiAgICAgIGNhbXBvOiBzb3J0WzBdLmZpZWxkLFxuICAgICAgb3JkZW5hY2FvOiBzb3J0WzBdLm9yZGVyID4gMCA/IFwiQXNjXCIgOiBcIkRlc2NcIixcbiAgICB9O1xuICAgIGNvbnN0IGZpbHRlcklucHV0ID0gdGhpcy5nZXRGaWxpYWxTZWFyY2hGaWVsZHMoKVxuICAgICAgLmZpbHRlcihcbiAgICAgICAgKHsgbmFtZSB9KSA9PiBmaWx0ZXJEYXRhW25hbWVdICE9IHVuZGVmaW5lZCAmJiBmaWx0ZXJEYXRhW25hbWVdICE9IFwiXCJcbiAgICAgIClcbiAgICAgIC5yZWR1Y2UoXG4gICAgICAgIChhLCB7IG5hbWUsIHR5cGUgfSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gZmlsdGVyRGF0YVtuYW1lXTtcbiAgICAgICAgICBpZiAodHlwZSA9PT0gRmllbGRUeXBlLkludGVnZXIpIHtcbiAgICAgICAgICAgIHJldHVybiB7IC4uLmEsIFtuYW1lXTogYCR7dmFsdWV9YC5yZXBsYWNlKC9cXEQvLCBcIlwiKSB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4geyAuLi5hLCBbbmFtZV06IHZhbHVlIH07XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBjbnBqczogdGhpcy5hZ2VuZGEucGxhbnRhLmNucGosXG4gICAgICAgICAgcGFnaW5hOiB7XG4gICAgICAgICAgICBsaW1pdDogcm93cyxcbiAgICAgICAgICAgIG9mZnNldDogcGFnZSxcbiAgICAgICAgICAgIGxpc3RhT3JkZW5hY2FvOiBzb3J0Rm9ybWF0dGVkID8gW3sgLi4uc29ydEZvcm1hdHRlZCB9XSA6IG51bGwsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSBhcyBQZXNxdWlzYXJGaWxpYWlzSW5wdXRcbiAgICAgICk7XG5cbiAgICB0aGlzLmZpbGlhbFNlcnZpY2VcbiAgICAgIC5saXN0RmlsaWFpcyhmaWx0ZXJJbnB1dClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgobGlzdDogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuZmlsaWFsU2VhcmNoR3JpZERhdGEgPSBsaXN0LmZpbGlhaXMubWFwKEZpbGlhbC5mcm9tRHRvKTtcbiAgICAgICAgdGhpcy5maWxpYWxTZWFyY2hUb3RhbFJlY29yZHMgPSBsaXN0LnF0ZFRvdGFsUmVnaXN0cm9zO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgb25UcmFuc3BvcnRhZG9yYUxvb2t1cFJlcXVlc3QodmFsdWU6IHN0cmluZykge1xuICAgIG9uTG9va3VwUmVxdWVzdChcbiAgICAgIHRoaXMudHJhbnNwb3J0YWRvcmFTZWFyY2hGaWVsZHMsXG4gICAgICB0aGlzLnRyYW5zcG9ydGFkb3JhTG9va3VwRGlzcGxheUZpZWxkcyxcbiAgICAgIHRoaXMudHJhbnNwb3J0YWRvcmFBZHZhbmNlZERpc3BsYXlGaWVsZHMsXG4gICAgICB0aGlzLnRyYW5zcG9ydGFkb3JhTG9va3VwU2VwYXJhdG9yLFxuICAgICAgdGhpcy50cmFuc3BvcnRhZG9yYVNlcnZpY2UsXG4gICAgICB2YWx1ZVxuICAgIClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgobGlzdDogYW55KSA9PiB7XG4gICAgICAgIHRoaXMudHJhbnNwb3J0YWRvcmFMb29rdXBTdWdnZXN0aW9ucyA9IGxpc3QuY29udGVudHM7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBvblRyYW5zcG9ydGFkb3JhU2VhcmNoUmVxdWVzdChldmVudDogYW55KSB7XG4gICAgb25TZWFyY2hSZXF1ZXN0KFxuICAgICAgdGhpcy50cmFuc3BvcnRhZG9yYVNlYXJjaEZpZWxkcyxcbiAgICAgIHRoaXMudHJhbnNwb3J0YWRvcmFMb29rdXBEaXNwbGF5RmllbGRzLFxuICAgICAgdGhpcy50cmFuc3BvcnRhZG9yYUFkdmFuY2VkRGlzcGxheUZpZWxkcyxcbiAgICAgIHRoaXMudHJhbnNwb3J0YWRvcmFMb29rdXBTZXBhcmF0b3IsXG4gICAgICB0aGlzLnRyYW5zcG9ydGFkb3JhU2VydmljZSxcbiAgICAgIGV2ZW50XG4gICAgKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKChsaXN0OiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy50cmFuc3BvcnRhZG9yYVNlYXJjaEdyaWREYXRhID0gbGlzdC5jb250ZW50cztcbiAgICAgICAgdGhpcy50cmFuc3BvcnRhZG9yYVNlYXJjaFRvdGFsUmVjb3JkcyA9IGxpc3QudG90YWxFbGVtZW50cztcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG9uUGVkaWRvVmVuZGFMb29rdXBSZXF1ZXN0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBzb3J0ID0gdGhpcy5wZWRpZG9WZW5kYUxvb2t1cERpc3BsYXlGaWVsZHMubWFwKChmaWVsZDogYW55KSA9PiAoe1xuICAgICAgZmllbGQsXG4gICAgICBvcmRlcjogMSxcbiAgICB9KSk7XG5cbiAgICBsZXQgZmlsdGVyUXVlcnkgPSB0aGlzLmdldFBlZGlkb1ZlbmRhU2VhcmNoRmllbGRzKClcbiAgICAgIC5maWx0ZXIoKHsgdHlwZSB9KSA9PiBpc1ZhbGlkRmlsdGVyKHR5cGUsIHZhbHVlKSlcbiAgICAgIC5tYXAoKHsgbmFtZSwgdHlwZSB9KSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJudW1iZXJcIikgcmV0dXJuIGAke25hbWV9IGVxICR7dmFsdWV9YDtcbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuRGF0ZSlcbiAgICAgICAgICByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoXCJZWVlZLU1NLUREXCIpfSdgO1xuICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5UaW1lKVxuICAgICAgICAgIHJldHVybiBgJHtuYW1lfSBlcSAnJHttb21lbnQodmFsdWUpLmZvcm1hdChcIkhIOm1tOnNzXCIpfSdgO1xuICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5EYXRlVGltZSlcbiAgICAgICAgICByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoKX0nYDtcbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuU3RyaW5nKVxuICAgICAgICAgIHJldHVybiBgY29udGFpbmluZyhsb3dlcigke25hbWV9KSwgbG93ZXIoJyR7dmFsdWUucmVwbGFjZShcbiAgICAgICAgICAgIC8nL2csXG4gICAgICAgICAgICBcIlxcXFwnXCJcbiAgICAgICAgICApfScpKWA7XG4gICAgICAgIGVsc2UgcmV0dXJuIGAke25hbWV9IGVxICcke3ZhbHVlfSdgO1xuICAgICAgfSlcbiAgICAgIC5qb2luKFwiIG9yIFwiKTtcblxuICAgIGZpbHRlclF1ZXJ5ID0gYCR7ZmlsdGVyUXVlcnl9JHtcbiAgICAgIGZpbHRlclF1ZXJ5ID8gXCIgYW5kIFwiIDogXCJcIlxuICAgIH1zaXR1YWNhb1BlZGlkbyBlcSBBQkVSVE9fVE9UQUwgb3Igc2l0dWFjYW9QZWRpZG8gZXEgQUJFUlRPX1BBUkNJQUxgO1xuXG4gICAgY29uc3QgcGVkaWRvcyA9IHRoaXMuZm9ybUdyb3VwLmdldChcInBlZGlkb3NcIikudmFsdWUgfHwgW107XG4gICAgbGV0IHBlZGlkb3NJZHNRdWVyeSA9IFwiXCI7XG4gICAgcGVkaWRvcy5tYXAoKGU6IGFueSkgPT5cbiAgICAgIGUgJiYgZS5wZWRpZG9WZW5kYSAmJiBlLnBlZGlkb1ZlbmRhLmlkXG4gICAgICAgID8gKHBlZGlkb3NJZHNRdWVyeSArPSBgIGFuZCAoaWQgbmUgJyR7ZS5wZWRpZG9WZW5kYS5pZH0nKWApXG4gICAgICAgIDogZmFsc2VcbiAgICApO1xuICAgIGlmIChwZWRpZG9zLmxlbmd0aCAmJiBwZWRpZG9zSWRzUXVlcnkpIGZpbHRlclF1ZXJ5ICs9IHBlZGlkb3NJZHNRdWVyeTtcblxuICAgIGNvbnN0IGRpc3BsYXlGaWVsZHMgPSBtZXJnZVVuaXF1ZShcbiAgICAgIHRoaXMucGVkaWRvVmVuZGFMb29rdXBEaXNwbGF5RmllbGRzLFxuICAgICAgdGhpcy5wZWRpZG9WZW5kYUFkdmFuY2VkRGlzcGxheUZpZWxkc1xuICAgICk7XG4gICAgdGhpcy5wZWRpZG9WZW5kYVNlcnZpY2VcbiAgICAgIC5saXN0KHsgc29ydCwgZmlsdGVyUXVlcnksIGRpc3BsYXlGaWVsZHMgfSlcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgobGlzdDogYW55KSA9PiAoe1xuICAgICAgICAgIC4uLmxpc3QsXG4gICAgICAgICAgY29udGVudHM6IGxpc3QuY29udGVudHMubWFwKChpdGVtOiBhbnkpID0+ICh7XG4gICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgbGFiZWw6IHRoaXMucGVkaWRvVmVuZGFMb29rdXBEaXNwbGF5RmllbGRzXG4gICAgICAgICAgICAgIC5tYXAoKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkLmluZGV4T2YoXCIuXCIpID4gMCkgcmV0dXJuIHRoaXMuZ2V0UHJvcChpdGVtLCBmaWVsZCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1bZmllbGRdO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAuam9pbih0aGlzLnBlZGlkb1ZlbmRhTG9va3VwU2VwYXJhdG9yKSxcbiAgICAgICAgICB9KSksXG4gICAgICAgIH0pKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgobGlzdDogYW55KSA9PiB7XG4gICAgICAgIHRoaXMucGVkaWRvVmVuZGFMb29rdXBTdWdnZXN0aW9ucyA9IGxpc3QuY29udGVudHM7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRSZWNQYWdpbmEoZmlyc3Q6IG51bWJlciwgcm93czogbnVtYmVyLCBzb3J0OiBhbnkpIHtcbiAgICBjb25zdCBwYWdlID0gZmlyc3QgLyByb3dzO1xuICAgIGNvbnN0IG9yZGVyQnkgPVxuICAgICAgc29ydCAmJiBzb3J0Lmxlbmd0aFxuICAgICAgICA/IHNvcnQubWFwKChzOiBhbnkpID0+ICh7XG4gICAgICAgICAgICBjYW1wbzogcy5maWVsZCxcbiAgICAgICAgICAgIG9yZGVuYWNhbzogcy5vcmRlciA9PT0gMSA/IFwiQXNjXCIgOiBcIkRlc2NcIixcbiAgICAgICAgICB9KSlcbiAgICAgICAgOiBbXTtcbiAgICByZXR1cm4ge1xuICAgICAgb2Zmc2V0OiBwYWdlLFxuICAgICAgbGltaXQ6IHJvd3MsXG4gICAgICBsaXN0YU9yZGVuYWNhbzogb3JkZXJCeSxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIG9uUGVkaWRvVmVuZGFTZWFyY2hSZXF1ZXN0KGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCB7IGZpcnN0LCByb3dzLCBtdWx0aVNvcnRNZXRhLCBmaWx0ZXJEYXRhIH0gPSBldmVudDtcbiAgICBjb25zdCBzb3J0ID0gbXVsdGlTb3J0TWV0YSB8fCBbXTtcblxuICAgIGNvbnN0IGZpbGlhbCA9IHRoaXMuZm9ybUdyb3VwLmdldChcImZpbGlhbFwiKS52YWx1ZTtcblxuICAgIGNvbnN0IHBlZGlkb3MgPSB0aGlzLmZvcm1Hcm91cC5nZXQoXCJwZWRpZG9zXCIpLnZhbHVlIHx8IFtdO1xuICAgIGxldCBwZWRpZG9zU2VsZWNpb25hZG9zOiBhbnkgPSBbXTtcbiAgICBwZWRpZG9zLm1hcCgoZTogYW55KSA9PlxuICAgICAgZSAmJiBlLnBlZGlkb1ZlbmRhICYmIGUucGVkaWRvVmVuZGEuaWRcbiAgICAgICAgPyBwZWRpZG9zU2VsZWNpb25hZG9zLnB1c2goZS5wZWRpZG9WZW5kYS5pZClcbiAgICAgICAgOiBmYWxzZVxuICAgICk7XG5cbiAgICBjb25zdCBwZXNxdWlzYTogUGVzcXVpc2FQZWRpZG9zVmVuZGFEdG8gPSB7XG4gICAgICBwZXNzb2FJZDogZmlsdGVyRGF0YVtcImNsaWVudGVcIl0gPyBmaWx0ZXJEYXRhW1wiY2xpZW50ZVwiXS5pZCA6IG51bGwsXG4gICAgICBmaWxpYWxJZDogZmlsaWFsID8gZmlsaWFsLmlkIDogbnVsbCxcbiAgICAgIHRpcG9BZ2VuZGFtZW50b0lkOiB0aGlzLmFnZW5kYS50aXBvQWdlbmRhbWVudG9cbiAgICAgICAgPyB0aGlzLmFnZW5kYS50aXBvQWdlbmRhbWVudG8uaWRcbiAgICAgICAgOiBudWxsLFxuICAgICAgZmlsaWFsUGVkaWRvOiBmaWx0ZXJEYXRhW1wiZmlsaWFsUGVkaWRvXCJdLFxuICAgICAgcGVkaWRvc1NlbGVjaW9uYWRvcyxcbiAgICAgIG51bWVybzogZmlsdGVyRGF0YVtcIm51bWVyb1wiXSxcbiAgICAgIHBhZ2luYTogdGhpcy5nZXRSZWNQYWdpbmEoZmlyc3QsIHJvd3MsIHNvcnQpLFxuICAgIH07XG5cbiAgICB0aGlzLnBlZGlkb1ZlbmRhU2VydmljZVxuICAgICAgLnBlc3F1aXNhclBlZGlkb3NWZW5kYShwZXNxdWlzYSlcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgobGlzdDogYW55KSA9PiAoe1xuICAgICAgICAgIC4uLmxpc3QsXG4gICAgICAgICAgY29udGVudHM6IGxpc3QuY29udGVudHMubWFwKChpdGVtOiBhbnkpID0+ICh7XG4gICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgbGFiZWw6IHRoaXMucGVkaWRvVmVuZGFMb29rdXBEaXNwbGF5RmllbGRzXG4gICAgICAgICAgICAgIC5tYXAoKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkLmluZGV4T2YoXCIuXCIpID4gMCkgcmV0dXJuIHRoaXMuZ2V0UHJvcChpdGVtLCBmaWVsZCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1bZmllbGRdO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAuam9pbih0aGlzLnBlZGlkb1ZlbmRhTG9va3VwU2VwYXJhdG9yKSxcbiAgICAgICAgICB9KSksXG4gICAgICAgIH0pKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgobGlzdDogYW55KSA9PiB7XG4gICAgICAgIHRoaXMucGVkaWRvVmVuZGFTZWFyY2hHcmlkRGF0YSA9IGxpc3QuY29udGVudHM7XG4gICAgICAgIHRoaXMucGVkaWRvVmVuZGFTZWFyY2hUb3RhbFJlY29yZHMgPSBsaXN0LnRvdGFsRWxlbWVudHM7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBvblBlZGlkb1ZlbmRhSXRlbUxvb2t1cFJlcXVlc3QodmFsdWU6IGFueSkge1xuICAgIGNvbnN0IHNvcnQgPSB0aGlzLnBlZGlkb1ZlbmRhSXRlbUxvb2t1cERpc3BsYXlGaWVsZHMubWFwKChmaWVsZDogYW55KSA9PiAoe1xuICAgICAgZmllbGQsXG4gICAgICBvcmRlcjogMSxcbiAgICB9KSk7XG5cbiAgICBjb25zdCBmaWxpYWxJZCA9ICh0aGlzLmZvcm1Hcm91cC5nZXQoXCJmaWxpYWxcIikudmFsdWUgfHwge30pLmlkO1xuICAgIGNvbnN0IHBlZGlkb0lkID0gKHRoaXMucGVkaWRvQXR1YWwuZ2V0KFwicGVkaWRvVmVuZGFcIikudmFsdWUgfHwge30pLmlkO1xuXG4gICAgY29uc3QgcGVzcXVpc2EgPSB7XG4gICAgICBwZWRpZG9JZCxcbiAgICAgIGZpbGlhbElkLFxuICAgICAgc2VxdWVuY2lhOiAhaXNOYU4odmFsdWUpID8gdmFsdWUgOiBudWxsLFxuICAgICAgdGlwb0FnZW5kYW1lbnRvSWQ6XG4gICAgICAgIHRoaXMuYWdlbmRhICYmIHRoaXMuYWdlbmRhLnRpcG9BZ2VuZGFtZW50b1xuICAgICAgICAgID8gdGhpcy5hZ2VuZGEudGlwb0FnZW5kYW1lbnRvLmlkXG4gICAgICAgICAgOiBudWxsLFxuICAgICAgcGFnaW5hOiB0aGlzLmdldFJlY1BhZ2luYSgwLCAxMCwgc29ydCksXG4gICAgfTtcblxuICAgIHRoaXMucGVkaWRvVmVuZGFJdGVtU2VydmljZVxuICAgICAgLnBlc3F1aXNhckl0ZW5zUGVkaWRvVmVuZGEocGVzcXVpc2EpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKGxpc3Q6IGFueSkgPT4gKHtcbiAgICAgICAgICAuLi5saXN0LFxuICAgICAgICAgIGNvbnRlbnRzOiBsaXN0LmNvbnRlbnRzLm1hcCgoaXRlbTogYW55KSA9PiAoe1xuICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgIGxhYmVsOiB0aGlzLnBlZGlkb1ZlbmRhSXRlbUxvb2t1cERpc3BsYXlGaWVsZHNcbiAgICAgICAgICAgICAgLm1hcCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZmllbGQuaW5kZXhPZihcIi5cIikgPiAwKSByZXR1cm4gdGhpcy5nZXRQcm9wKGl0ZW0sIGZpZWxkKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbVtmaWVsZF07XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5qb2luKHRoaXMucGVkaWRvVmVuZGFJdGVtTG9va3VwU2VwYXJhdG9yKSxcbiAgICAgICAgICB9KSksXG4gICAgICAgIH0pKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgobGlzdDogYW55KSA9PiB7XG4gICAgICAgIHRoaXMucGVkaWRvVmVuZGFJdGVtTG9va3VwU3VnZ2VzdGlvbnMgPSBsaXN0LmNvbnRlbnRzO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgb25QZWRpZG9WZW5kYUl0ZW1TZWFyY2hSZXF1ZXN0KGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCB7IGZpcnN0LCByb3dzLCBtdWx0aVNvcnRNZXRhLCBmaWx0ZXJEYXRhIH0gPSBldmVudDtcbiAgICBjb25zdCBzb3J0ID0gbXVsdGlTb3J0TWV0YTtcblxuICAgIGNvbnN0IGZpbGlhbElkID0gKHRoaXMuZm9ybUdyb3VwLmdldChcImZpbGlhbFwiKS52YWx1ZSB8fCB7fSkuaWQ7XG4gICAgY29uc3QgcGVkaWRvSWQgPSAodGhpcy5wZWRpZG9BdHVhbC5nZXQoXCJwZWRpZG9WZW5kYVwiKS52YWx1ZSB8fCB7fSkuaWQ7XG5cbiAgICBjb25zdCBwZXNxdWlzYSA9IHtcbiAgICAgIHBlZGlkb0lkLFxuICAgICAgZmlsaWFsSWQsXG4gICAgICBzZXF1ZW5jaWE6IGZpbHRlckRhdGFbXCJzZXF1ZW5jaWFcIl0sXG4gICAgICB0aXBvQWdlbmRhbWVudG9JZDpcbiAgICAgICAgdGhpcy5hZ2VuZGEgJiYgdGhpcy5hZ2VuZGEudGlwb0FnZW5kYW1lbnRvXG4gICAgICAgICAgPyB0aGlzLmFnZW5kYS50aXBvQWdlbmRhbWVudG8uaWRcbiAgICAgICAgICA6IG51bGwsXG4gICAgICBwYWdpbmE6IHRoaXMuZ2V0UmVjUGFnaW5hKGZpcnN0LCByb3dzLCBzb3J0KSxcbiAgICB9O1xuXG4gICAgdGhpcy5wZWRpZG9WZW5kYUl0ZW1TZXJ2aWNlXG4gICAgICAucGVzcXVpc2FySXRlbnNQZWRpZG9WZW5kYShwZXNxdWlzYSlcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgobGlzdDogYW55KSA9PiAoe1xuICAgICAgICAgIC4uLmxpc3QsXG4gICAgICAgICAgY29udGVudHM6IGxpc3QuY29udGVudHMubWFwKChpdGVtOiBhbnkpID0+ICh7XG4gICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgbGFiZWw6IHRoaXMucGVkaWRvVmVuZGFJdGVtTG9va3VwRGlzcGxheUZpZWxkc1xuICAgICAgICAgICAgICAubWFwKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChmaWVsZC5pbmRleE9mKFwiLlwiKSA+IDApIHJldHVybiB0aGlzLmdldFByb3AoaXRlbSwgZmllbGQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtW2ZpZWxkXTtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgLmpvaW4odGhpcy5wZWRpZG9WZW5kYUl0ZW1Mb29rdXBTZXBhcmF0b3IpLFxuICAgICAgICAgIH0pKSxcbiAgICAgICAgfSkpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChsaXN0OiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5wZWRpZG9WZW5kYUl0ZW1TZWFyY2hHcmlkRGF0YSA9IGxpc3QuY29udGVudHM7XG4gICAgICAgIHRoaXMucGVkaWRvVmVuZGFJdGVtU2VhcmNoVG90YWxSZWNvcmRzID0gbGlzdC50b3RhbEVsZW1lbnRzO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0QXV0b21hdGljSXRlbnNPcmRlcihwZWRpZG9WZW5kYTogYW55KSB7XG4gICAgaWYgKHBlZGlkb1ZlbmRhICYmIHBlZGlkb1ZlbmRhLmlkKSB7XG4gICAgICBjb25zdCBzb3J0ID0gdGhpcy5wZWRpZG9WZW5kYUl0ZW1Mb29rdXBEaXNwbGF5RmllbGRzLm1hcChcbiAgICAgICAgKGZpZWxkOiBhbnkpID0+ICh7IGZpZWxkLCBvcmRlcjogMSB9KVxuICAgICAgKTtcbiAgICAgIGNvbnN0IGZpbGlhbElkID0gKHRoaXMuZm9ybUdyb3VwLmdldChcImZpbGlhbFwiKS52YWx1ZSB8fCB7fSkuaWQ7XG5cbiAgICAgIGNvbnN0IHBlc3F1aXNhID0ge1xuICAgICAgICBwZWRpZG9JZDogcGVkaWRvVmVuZGEuaWQsXG4gICAgICAgIGZpbGlhbElkLFxuICAgICAgICB0aXBvQWdlbmRhbWVudG9JZDpcbiAgICAgICAgICB0aGlzLmFnZW5kYSAmJiB0aGlzLmFnZW5kYS50aXBvQWdlbmRhbWVudG9cbiAgICAgICAgICAgID8gdGhpcy5hZ2VuZGEudGlwb0FnZW5kYW1lbnRvLmlkXG4gICAgICAgICAgICA6IG51bGwsXG4gICAgICAgIHBhZ2luYTogdGhpcy5nZXRSZWNQYWdpbmEoMCwgMTAsIHNvcnQpLFxuICAgICAgfTtcblxuICAgICAgdGhpcy5wZWRpZG9WZW5kYUl0ZW1TZXJ2aWNlXG4gICAgICAgIC5wZXNxdWlzYXJJdGVuc1BlZGlkb1ZlbmRhKHBlc3F1aXNhKVxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgbWFwKChsaXN0OiBhbnkpID0+ICh7XG4gICAgICAgICAgICAuLi5saXN0LFxuICAgICAgICAgICAgY29udGVudHM6IGxpc3QuY29udGVudHMubWFwKChpdGVtOiBhbnkpID0+ICh7XG4gICAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnBlZGlkb1ZlbmRhSXRlbUxvb2t1cERpc3BsYXlGaWVsZHNcbiAgICAgICAgICAgICAgICAubWFwKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkLmluZGV4T2YoXCIuXCIpID4gMCkgcmV0dXJuIHRoaXMuZ2V0UHJvcChpdGVtLCBmaWVsZCk7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbVtmaWVsZF07XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuam9pbih0aGlzLnBlZGlkb1ZlbmRhSXRlbUxvb2t1cFNlcGFyYXRvciksXG4gICAgICAgICAgICB9KSksXG4gICAgICAgICAgfSkpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgobGlzdDogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5zZWxlY2lvbmFyUGVkaWRvVmVuZGFJdGVtQXV0b21hdGljYW1lbnRlKFxuICAgICAgICAgICAgbGlzdC5jb250ZW50cyxcbiAgICAgICAgICAgIHBlZGlkb1ZlbmRhXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9uQWdlbmRhTG9va3VwUmVxdWVzdCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgY29uc3Qgc29ydCA9IHRoaXMuYWdlbmRhTG9va3VwRGlzcGxheUZpZWxkcy5tYXAoKGZpZWxkOiBhbnkpID0+ICh7XG4gICAgICBmaWVsZCxcbiAgICAgIG9yZGVyOiAxLFxuICAgIH0pKTtcblxuICAgIGNvbnN0IGZpbHRlclF1ZXJ5ID0gdGhpcy5nZXRBZ2VuZGFTZWFyY2hGaWVsZHMoKVxuICAgICAgLmZpbHRlcigoeyB0eXBlIH0pID0+IGlzVmFsaWRGaWx0ZXIodHlwZSwgdmFsdWUpKVxuICAgICAgLm1hcCgoeyBuYW1lLCB0eXBlIH0pID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcIm51bWJlclwiKSByZXR1cm4gYCR7bmFtZX0gZXEgJHt2YWx1ZX1gO1xuICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5EYXRlKVxuICAgICAgICAgIHJldHVybiBgJHtuYW1lfSBlcSAnJHttb21lbnQodmFsdWUpLmZvcm1hdChcIllZWVktTU0tRERcIil9J2A7XG4gICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLlRpbWUpXG4gICAgICAgICAgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KFwiSEg6bW06c3NcIil9J2A7XG4gICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLkRhdGVUaW1lKVxuICAgICAgICAgIHJldHVybiBgJHtuYW1lfSBlcSAnJHttb21lbnQodmFsdWUpLmZvcm1hdCgpfSdgO1xuICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5TdHJpbmcpXG4gICAgICAgICAgcmV0dXJuIGBjb250YWluaW5nKGxvd2VyKCR7bmFtZX0pLCBsb3dlcignJHt2YWx1ZS5yZXBsYWNlKFxuICAgICAgICAgICAgLycvZyxcbiAgICAgICAgICAgIFwiXFxcXCdcIlxuICAgICAgICAgICl9JykpYDtcbiAgICAgICAgZWxzZSByZXR1cm4gYCR7bmFtZX0gZXEgJyR7dmFsdWV9J2A7XG4gICAgICB9KVxuICAgICAgLmpvaW4oXCIgb3IgXCIpO1xuXG4gICAgY29uc3QgZGlzcGxheUZpZWxkcyA9IG1lcmdlVW5pcXVlKFxuICAgICAgdGhpcy5hZ2VuZGFMb29rdXBEaXNwbGF5RmllbGRzLFxuICAgICAgdGhpcy5hZ2VuZGFBZHZhbmNlZERpc3BsYXlGaWVsZHNcbiAgICApO1xuICAgIHRoaXMuYWdlbmRhU2VydmljZVxuICAgICAgLmxpc3RFeHRlcm5hbEFnZW5kYSh7IHNvcnQsIGZpbHRlclF1ZXJ5LCBkaXNwbGF5RmllbGRzIH0pXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKGxpc3Q6IGFueSkgPT4gKHtcbiAgICAgICAgICAuLi5saXN0LFxuICAgICAgICAgIGNvbnRlbnRzOiBsaXN0LmNvbnRlbnRzLm1hcCgoaXRlbTogYW55KSA9PiAoe1xuICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgIGxhYmVsOiB0aGlzLmFnZW5kYUxvb2t1cERpc3BsYXlGaWVsZHNcbiAgICAgICAgICAgICAgLm1hcCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZmllbGQuaW5kZXhPZihcIi5cIikgPiAwKSByZXR1cm4gdGhpcy5nZXRQcm9wKGl0ZW0sIGZpZWxkKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbVtmaWVsZF07XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5qb2luKHRoaXMuYWdlbmRhTG9va3VwU2VwYXJhdG9yKSxcbiAgICAgICAgICB9KSksXG4gICAgICAgIH0pKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgobGlzdDogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuYWdlbmRhTG9va3VwU3VnZ2VzdGlvbnMgPSBsaXN0LmNvbnRlbnRzO1xuICAgICAgfSk7XG5cbiAgICAvKntDQTpPTl9BR0VOREFfTE9PS1VQX1JFUVVFU1RfRU5EOlNUQVJUfSovXG4gICAgLyp7Q0E6T05fQUdFTkRBX0xPT0tVUF9SRVFVRVNUX0VORDpFTkR9Ki9cbiAgfVxuXG4gIHB1YmxpYyBvbkFnZW5kYVNlYXJjaFJlcXVlc3QoZXZlbnQ6IGFueSkge1xuICAgIC8qe0NBOk9OX0FHRU5EQV9TRUFSQ0hfUkVRVUVTVF9TVEFSVDpTVEFSVH0qL1xuICAgIC8qe0NBOk9OX0FHRU5EQV9TRUFSQ0hfUkVRVUVTVF9TVEFSVDpFTkR9Ki9cblxuICAgIGNvbnN0IHsgZmlyc3QsIHJvd3MsIG11bHRpU29ydE1ldGEsIGZpbHRlckRhdGEgfSA9IGV2ZW50O1xuICAgIGNvbnN0IHBhZ2UgPSBmaXJzdCAvIHJvd3M7XG4gICAgY29uc3Qgc29ydCA9IG11bHRpU29ydE1ldGE7XG4gICAgY29uc3QgZmlsdGVyUXVlcnkgPSB0aGlzLmdldEFnZW5kYVNlYXJjaEZpZWxkcygpXG4gICAgICAuZmlsdGVyKFxuICAgICAgICAoeyBuYW1lIH0pID0+IGZpbHRlckRhdGFbbmFtZV0gIT0gdW5kZWZpbmVkICYmIGZpbHRlckRhdGFbbmFtZV0gIT0gXCJcIlxuICAgICAgKVxuICAgICAgLm1hcCgoeyBuYW1lLCB0eXBlIH0pID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBmaWx0ZXJEYXRhW25hbWVdO1xuXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJudW1iZXJcIikgcmV0dXJuIGAke25hbWV9IGVxICR7dmFsdWV9YDtcbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuRGF0ZSlcbiAgICAgICAgICByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoXCJZWVlZLU1NLUREXCIpfSdgO1xuICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5UaW1lKVxuICAgICAgICAgIHJldHVybiBgJHtuYW1lfSBlcSAnJHttb21lbnQodmFsdWUpLmZvcm1hdChcIkhIOm1tOnNzXCIpfSdgO1xuICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5EYXRlVGltZSlcbiAgICAgICAgICByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoKX0nYDtcbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuRW51bSkgcmV0dXJuIGAke25hbWV9IGVxICcke3ZhbHVlfSdgO1xuICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5TdHJpbmcpXG4gICAgICAgICAgcmV0dXJuIGBjb250YWluaW5nKGxvd2VyKCR7bmFtZX0pLCBsb3dlcignJHt2YWx1ZS5yZXBsYWNlKFxuICAgICAgICAgICAgLycvZyxcbiAgICAgICAgICAgIFwiXFxcXCdcIlxuICAgICAgICAgICl9JykpYDtcbiAgICAgICAgZWxzZSByZXR1cm4gYCR7bmFtZX0gZXEgJyR7dmFsdWV9J2A7XG4gICAgICB9KVxuICAgICAgLmpvaW4oXCIgYW5kIFwiKTtcblxuICAgIGNvbnN0IGRpc3BsYXlGaWVsZHMgPSBtZXJnZVVuaXF1ZShcbiAgICAgIHRoaXMuYWdlbmRhTG9va3VwRGlzcGxheUZpZWxkcyxcbiAgICAgIHRoaXMuYWdlbmRhQWR2YW5jZWREaXNwbGF5RmllbGRzXG4gICAgKTtcbiAgICB0aGlzLmFnZW5kYVNlcnZpY2VcbiAgICAgIC5saXN0RXh0ZXJuYWxBZ2VuZGEoeyBwYWdlLCBzb3J0LCBmaWx0ZXJRdWVyeSwgZGlzcGxheUZpZWxkcyB9KVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChsaXN0OiBhbnkpID0+ICh7XG4gICAgICAgICAgLi4ubGlzdCxcbiAgICAgICAgICBjb250ZW50czogbGlzdC5jb250ZW50cy5tYXAoKGl0ZW06IGFueSkgPT4gKHtcbiAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICBsYWJlbDogdGhpcy5hZ2VuZGFMb29rdXBEaXNwbGF5RmllbGRzXG4gICAgICAgICAgICAgIC5tYXAoKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkLmluZGV4T2YoXCIuXCIpID4gMCkgcmV0dXJuIHRoaXMuZ2V0UHJvcChpdGVtLCBmaWVsZCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1bZmllbGRdO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAuam9pbih0aGlzLmFnZW5kYUxvb2t1cFNlcGFyYXRvciksXG4gICAgICAgICAgfSkpLFxuICAgICAgICB9KSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKGxpc3Q6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmFnZW5kYVNlYXJjaEdyaWREYXRhID0gbGlzdC5jb250ZW50cztcbiAgICAgICAgdGhpcy5hZ2VuZGFTZWFyY2hUb3RhbFJlY29yZHMgPSBsaXN0LnRvdGFsRWxlbWVudHM7XG4gICAgICB9KTtcblxuICAgIC8qe0NBOk9OX0FHRU5EQV9TRUFSQ0hfUkVRVUVTVF9FTkQ6U1RBUlR9Ki9cbiAgICAvKntDQTpPTl9BR0VOREFfU0VBUkNIX1JFUVVFU1RfRU5EOkVORH0qL1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRGb3JtR3JvdXAoKSB7XG4gICAgY29uc3QgZm9ybUdyb3VwID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICBpZDogW3sgdmFsdWU6IHVuZGVmaW5lZCwgZGlzYWJsZWQ6IHRydWUgfSwgVmFsaWRhdG9ycy5jb21wb3NlKFtdKV0sXG4gICAgICBjbGllbnRlRmF0dXJhbWVudG86IFtcbiAgICAgICAgeyB2YWx1ZTogdW5kZWZpbmVkLCBkaXNhYmxlZDogZmFsc2UgfSxcbiAgICAgICAgVmFsaWRhdG9ycy5jb21wb3NlKFtWYWxpZGF0b3JzLnJlcXVpcmVkXSksXG4gICAgICBdLFxuICAgICAgY2xpZW50ZVJlbWVzc2E6IFt7IHZhbHVlOiB1bmRlZmluZWQsIGRpc2FibGVkOiBmYWxzZSB9XSxcbiAgICAgIGZpbGlhbDogW1xuICAgICAgICB7IHZhbHVlOiB1bmRlZmluZWQsIGRpc2FibGVkOiBmYWxzZSB9LFxuICAgICAgICBWYWxpZGF0b3JzLmNvbXBvc2UoW1ZhbGlkYXRvcnMucmVxdWlyZWRdKSxcbiAgICAgIF0sXG4gICAgICB0cmFuc3BvcnRhZG9yYTogW1xuICAgICAgICB7IHZhbHVlOiB1bmRlZmluZWQsIGRpc2FibGVkOiBmYWxzZSB9LFxuICAgICAgICBWYWxpZGF0b3JzLmNvbXBvc2UoW10pLFxuICAgICAgXSxcbiAgICAgIHBlZGlkb3M6IHRoaXMuZm9ybUJ1aWxkZXIuYXJyYXkoW10pLFxuICAgICAgYWdlbmRhOiBbXG4gICAgICAgIHsgdmFsdWU6IHVuZGVmaW5lZCwgZGlzYWJsZWQ6IGZhbHNlIH0sXG4gICAgICAgIFZhbGlkYXRvcnMuY29tcG9zZShbVmFsaWRhdG9ycy5yZXF1aXJlZF0pLFxuICAgICAgXSxcbiAgICAgIG51bWVyb0FnZW5kYW1lbnRvQ2xpZW50ZTogW1xuICAgICAgICB7IHZhbHVlOiB1bmRlZmluZWQsIGRpc2FibGVkOiBmYWxzZSB9LFxuICAgICAgICBWYWxpZGF0b3JzLmNvbXBvc2UoW10pLFxuICAgICAgXSxcbiAgICAgIG51bWVyb1BlZGlkb0NsaWVudGU6IFtcbiAgICAgICAgeyB2YWx1ZTogdW5kZWZpbmVkLCBkaXNhYmxlZDogZmFsc2UgfSxcbiAgICAgICAgVmFsaWRhdG9ycy5jb21wb3NlKFtdKSxcbiAgICAgIF0sXG4gICAgICBpdGVtUGVkaWRvQ2xpZW50ZTogW1xuICAgICAgICB7IHZhbHVlOiB1bmRlZmluZWQsIGRpc2FibGVkOiBmYWxzZSB9LFxuICAgICAgICBWYWxpZGF0b3JzLmNvbXBvc2UoW10pLFxuICAgICAgXSxcbiAgICAgIGNyZWF0ZWRCeTogW3sgdmFsdWU6IHVuZGVmaW5lZCwgZGlzYWJsZWQ6IHRydWUgfSwgVmFsaWRhdG9ycy5jb21wb3NlKFtdKV0sXG4gICAgICBjcmVhdGVkRGF0ZTogW1xuICAgICAgICB7IHZhbHVlOiB1bmRlZmluZWQsIGRpc2FibGVkOiB0cnVlIH0sXG4gICAgICAgIFZhbGlkYXRvcnMuY29tcG9zZShbXSksXG4gICAgICBdLFxuICAgICAgbGFzdE1vZGlmaWVkQnk6IFtcbiAgICAgICAgeyB2YWx1ZTogdW5kZWZpbmVkLCBkaXNhYmxlZDogdHJ1ZSB9LFxuICAgICAgICBWYWxpZGF0b3JzLmNvbXBvc2UoW10pLFxuICAgICAgXSxcbiAgICAgIGxhc3RNb2RpZmllZERhdGU6IFtcbiAgICAgICAgeyB2YWx1ZTogdW5kZWZpbmVkLCBkaXNhYmxlZDogdHJ1ZSB9LFxuICAgICAgICBWYWxpZGF0b3JzLmNvbXBvc2UoW10pLFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIC8qe0NBOkdFVF9GT1JNX0NPTlRST0xTOlNUQVJUfSovXG4gICAgLyp7Q0E6R0VUX0ZPUk1fQ09OVFJPTFM6RU5EfSovXG5cbiAgICByZXR1cm4gZm9ybUdyb3VwO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDbGllbnRlU2VhcmNoRmllbGRzKCkge1xuICAgIHJldHVybiBbXG4gICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgbmFtZTogXCJjb2RpZ29cIixcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnBlc3NvYV9jb2RpZ29cIiksXG4gICAgICAgIHR5cGU6IEZpZWxkVHlwZS5JbnRlZ2VyLFxuICAgICAgfSksXG4gICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgbmFtZTogXCJub21lXCIsXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5wZXNzb2Ffbm9tZVwiKSxcbiAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgIH0pLFxuICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgIG5hbWU6IFwiY3BmQ25walwiLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucGVzc29hX2NwZkNucGpcIiksXG4gICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICB9KSxcbiAgICBdO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDbGllbnRlU2VhcmNoR3JpZEZpZWxkcygpIHtcbiAgICByZXR1cm4gW1xuICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgIG5hbWU6IFwiY29kaWdvXCIsXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5wZXNzb2FfY29kaWdvXCIpLFxuICAgICAgICB0eXBlOiBGaWVsZFR5cGUuSW50ZWdlcixcbiAgICAgIH0pLFxuICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgIG5hbWU6IFwibm9tZVwiLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucGVzc29hX25vbWVcIiksXG4gICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICB9KSxcbiAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICBuYW1lOiBcImNwZkNucGpcIixcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnBlc3NvYV9jcGZDbnBqXCIpLFxuICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgfSksXG4gICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgbmFtZTogXCJzaXRlXCIsXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5wZXNzb2Ffc2l0ZVwiKSxcbiAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgIH0pLFxuICAgIF07XG4gIH1cblxuICBwcml2YXRlIGdldEZpbGlhbFNlYXJjaEZpZWxkcygpIHtcbiAgICByZXR1cm4gW1xuICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgIG5hbWU6IFwiY29kaWdvXCIsXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5maWxpYWxfY29kaWdvXCIpLFxuICAgICAgICB0eXBlOiBGaWVsZFR5cGUuSW50ZWdlcixcbiAgICAgIH0pLFxuICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgIG5hbWU6IFwibm9tZVwiLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAuZmlsaWFsX25vbWVcIiksXG4gICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICB9KSxcbiAgICBdO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRGaWxpYWxTZWFyY2hHcmlkRmllbGRzKCkge1xuICAgIHJldHVybiBbXG4gICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgbmFtZTogXCJjb2RpZ29cIixcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLmZpbGlhbF9jb2RpZ29cIiksXG4gICAgICAgIHR5cGU6IEZpZWxkVHlwZS5JbnRlZ2VyLFxuICAgICAgfSksXG4gICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgbmFtZTogXCJub21lXCIsXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5maWxpYWxfbm9tZVwiKSxcbiAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgIH0pLFxuICAgIF07XG4gIH1cblxuICBwcml2YXRlIGdldFRyYW5zcG9ydGFkb3JhU2VhcmNoRmllbGRzKCkge1xuICAgIHJldHVybiBbXG4gICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgbmFtZTogXCJjb2RpZ29cIixcbiAgICAgICAgdHlwZTogRmllbGRUeXBlLkludGVnZXIsXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC50cmFuc3BvcnRhZG9yYV9jb2RpZ29cIiksXG4gICAgICB9KSxcbiAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICBuYW1lOiBcInBlc3NvYS5ub21lXCIsXG4gICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC50cmFuc3BvcnRhZG9yYV9kZXNjcmljYW9cIiksXG4gICAgICB9KSxcbiAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICBuYW1lOiBcInBlc3NvYS5jcGZDbnBqXCIsXG4gICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC50cmFuc3BvcnRhZG9yYV9jbnBqXCIpLFxuICAgICAgfSksXG4gICAgXTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VHJhbnNwb3J0YWRvcmFTZWFyY2hHcmlkRmllbGRzKCkge1xuICAgIHJldHVybiBbXG4gICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgbmFtZTogXCJjb2RpZ29cIixcbiAgICAgICAgdHlwZTogRmllbGRUeXBlLkludGVnZXIsXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC50cmFuc3BvcnRhZG9yYV9jb2RpZ29cIiksXG4gICAgICB9KSxcbiAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICBuYW1lOiBcInBlc3NvYS5ub21lXCIsXG4gICAgICAgIHR5cGU6IEZpZWxkVHlwZS5JbnRlZ2VyLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucGVzc29hX25vbWVcIiksXG4gICAgICB9KSxcbiAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICBuYW1lOiBcInBlc3NvYS5jcGZDbnBqXCIsXG4gICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC50cmFuc3BvcnRhZG9yYV9jbnBqXCIpLFxuICAgICAgfSksXG4gICAgXTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UGVkaWRvVmVuZGFTZWFyY2hGaWVsZHMoKSB7XG4gICAgY29uc3QgY2xpZW50U3VnZ2VzdGlvbnMkID0gbmV3IFN1YmplY3Q8YW55W10+KCk7XG4gICAgY29uc3QgY2xpZW50U2VhcmNoJCA9IG5ldyBTdWJqZWN0PGFueT4oKTtcblxuICAgIHJldHVybiBbXG4gICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgbmFtZTogXCJudW1lcm9cIixcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnBlZGlkb192ZW5kYV9udW1lcm9cIiksXG4gICAgICAgIHR5cGU6IEZpZWxkVHlwZS5JbnRlZ2VyLFxuICAgICAgfSksXG4gICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgbmFtZTogXCJmaWxpYWxQZWRpZG9cIixcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLmZpbGlhbF9jb2RpZ29cIiksXG4gICAgICAgIHR5cGU6IEZpZWxkVHlwZS5JbnRlZ2VyLFxuICAgICAgfSksXG4gICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgbmFtZTogXCJjbGllbnRlXCIsXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5wZXNzb2FfY2xpZW50ZV9sYWJlbFwiKSxcbiAgICAgICAgdHlwZTogRmllbGRUeXBlLkxvb2t1cCxcbiAgICAgICAgc2VhcmNoRmllbGRzOiB0aGlzLmdldENsaWVudGVTZWFyY2hGaWVsZHMoKSxcbiAgICAgICAgc2VhcmNoR3JpZEZpZWxkczogdGhpcy5nZXRDbGllbnRlU2VhcmNoR3JpZEZpZWxkcygpLFxuICAgICAgICBzdWdnZXN0aW9uc09ic2VydmFibGU6IGNsaWVudFN1Z2dlc3Rpb25zJCxcbiAgICAgICAgc2VhcmNoT2JzZXJ2YWJsZTogY2xpZW50U2VhcmNoJCxcbiAgICAgICAgZW1wdHlNZXNzYWdlOiBcIk5lbmh1bWEgc3VnZXN0w6NvIGVuY29udHJhZGFcIixcbiAgICAgICAgc2l6ZTogeyBzbTogMTIsIG1kOiAxMiwgbGc6IDEyLCB4bDogMTIgfSxcbiAgICAgICAgb25Mb29rdXBSZXF1ZXN0OiAodmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgIG9uTG9va3VwUmVxdWVzdChcbiAgICAgICAgICAgIHRoaXMuY2xpZW50ZUZhdHVyYW1lbnRvU2VhcmNoRmllbGRzLFxuICAgICAgICAgICAgdGhpcy5jbGllbnRlRmF0dXJhbWVudG9Mb29rdXBEaXNwbGF5RmllbGRzLFxuICAgICAgICAgICAgdGhpcy5jbGllbnRlRmF0dXJhbWVudG9BZHZhbmNlZERpc3BsYXlGaWVsZHMsXG4gICAgICAgICAgICB0aGlzLmNsaWVudGVGYXR1cmFtZW50b0xvb2t1cFNlcGFyYXRvcixcbiAgICAgICAgICAgIHRoaXMucGVzc29hU2VydmljZSxcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgXCJzaXR1YWNhbyBlcSBBVElWTyBhbmQgY2xpZW50ZSBlcSB0cnVlXCJcbiAgICAgICAgICApXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGxpc3Q6IGFueSkgPT4gY2xpZW50U3VnZ2VzdGlvbnMkLm5leHQobGlzdC5jb250ZW50cykpO1xuICAgICAgICB9LFxuICAgICAgICBvblNlYXJjaFJlcXVlc3Q6IChldmVudDogYW55KSA9PiB7XG4gICAgICAgICAgb25TZWFyY2hSZXF1ZXN0KFxuICAgICAgICAgICAgdGhpcy5jbGllbnRlRmF0dXJhbWVudG9TZWFyY2hGaWVsZHMsXG4gICAgICAgICAgICB0aGlzLmNsaWVudGVGYXR1cmFtZW50b0xvb2t1cERpc3BsYXlGaWVsZHMsXG4gICAgICAgICAgICB0aGlzLmNsaWVudGVGYXR1cmFtZW50b0FkdmFuY2VkRGlzcGxheUZpZWxkcyxcbiAgICAgICAgICAgIHRoaXMuY2xpZW50ZUZhdHVyYW1lbnRvTG9va3VwU2VwYXJhdG9yLFxuICAgICAgICAgICAgdGhpcy5wZXNzb2FTZXJ2aWNlLFxuICAgICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgICBcInNpdHVhY2FvIGVxIEFUSVZPIGFuZCBjbGllbnRlIGVxIHRydWVcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgobGlzdDogYW55KSA9PiB7XG4gICAgICAgICAgICAgIGNsaWVudFNlYXJjaCQubmV4dCh7XG4gICAgICAgICAgICAgICAgdG90YWxSZWNvcmRzOiBsaXN0LnRvdGFsRWxlbWVudHMsXG4gICAgICAgICAgICAgICAgZ3JpZERhdGE6IGxpc3QuY29udGVudHMsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGRhdGFLZXk6IFwiaWRcIixcbiAgICAgICAgbG9va3VwRGlzcGxheUZpZWxkOiBcImxhYmVsXCIsXG4gICAgICAgIHNlYXJjaFRpdGxlOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5wZXNzb2FfY2xpZW50ZV9sYWJlbFwiKSxcbiAgICAgICAgc2VhcmNoRW1wdHlUaXRsZTogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAubm90aGluZ19mb3VuZFwiKSxcbiAgICAgICAgZmlsdGVyTGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLmZpbHRlclwiKSxcbiAgICAgICAgZmlsdGVyVGl0bGU6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuaW50ZWdyYXRpb24uZmlsdGVyc1wiKSxcbiAgICAgICAgY2xlYXJMYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAuY2xlYXJcIiksXG4gICAgICAgIGNhbmNlbExhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5jYW5jZWxcIiksXG4gICAgICAgIHNlbGVjdExhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5zZWxlY3RcIiksXG4gICAgICAgIHRvb2x0aXA6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnBlc3NvYV9jbGllbnRlX2xhYmVsXCIpLFxuICAgICAgfSksXG4gICAgXTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UGVkaWRvVmVuZGFTZWFyY2hHcmlkRmllbGRzKCkge1xuICAgIHJldHVybiBbXG4gICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgbmFtZTogXCJudW1lcm9cIixcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnBlZGlkb192ZW5kYV9udW1lcm9cIiksXG4gICAgICAgIHR5cGU6IEZpZWxkVHlwZS5JbnRlZ2VyLFxuICAgICAgfSksXG4gICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgbmFtZTogXCJmaWxpYWwubm9tZVwiLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAuZmlsaWFsXCIpLFxuICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgfSksXG4gICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgbmFtZTogXCJmaWxpYWwuY29kaWdvXCIsXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5maWxpYWxfY29kaWdvXCIpLFxuICAgICAgICB0eXBlOiBGaWVsZFR5cGUuSW50ZWdlcixcbiAgICAgIH0pLFxuICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgIG5hbWU6IFwicGVzc29hLm5vbWVcIixcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnBlc3NvYV9jbGllbnRlX2xhYmVsXCIpLFxuICAgICAgICB0eXBlOiBGaWVsZFR5cGUuSW50ZWdlcixcbiAgICAgIH0pLFxuICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgIG5hbWU6IFwicGVzc29hLmNvZGlnb1wiLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAucGVzc29hX2NsaWVudGVfY29kaWdvX2xhYmVsXCIpLFxuICAgICAgICB0eXBlOiBGaWVsZFR5cGUuSW50ZWdlcixcbiAgICAgIH0pLFxuICAgIF07XG4gIH1cblxuICBwcml2YXRlIGdldFBlZGlkb1ZlbmRhSXRlbVNlYXJjaEZpZWxkcygpIHtcbiAgICByZXR1cm4gW1xuICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgIG5hbWU6IFwic2VxdWVuY2lhXCIsXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5wZWRpZG9fdmVuZGFfaXRlbV9zZXF1ZW5jaWFcIiksXG4gICAgICAgIHR5cGU6IEZpZWxkVHlwZS5JbnRlZ2VyLFxuICAgICAgfSksXG4gICAgXTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UGVkaWRvVmVuZGFJdGVtU2VhcmNoR3JpZEZpZWxkcygpIHtcbiAgICByZXR1cm4gW1xuICAgICAgLi4udGhpcy5nZXRQZWRpZG9WZW5kYUl0ZW1TZWFyY2hGaWVsZHMoKSxcbiAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICBuYW1lOiBcInNrdS5kZXNjcmljYW9cIixcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLnByb2R1dG9cIiksXG4gICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICB9KSxcbiAgICBdO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRBZ2VuZGFTZWFyY2hGaWVsZHMoKSB7XG4gICAgY29uc3Qgc2VhcmNoRmllbGRzID0gW1xuICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgIG5hbWU6IFwiZGVzY3JpY2FvXCIsXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwieW1zLmVycC5hZ2VuZGFfZGVzY3JpY2FvXCIpLFxuICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgfSksXG4gICAgXTtcblxuICAgIC8qe0NBOkdFVF9BR0VOREFfU0VBUkNIX0ZJRUxEUzpTVEFSVH0qL1xuICAgIC8qe0NBOkdFVF9BR0VOREFfU0VBUkNIX0ZJRUxEUzpFTkR9Ki9cblxuICAgIHJldHVybiBzZWFyY2hGaWVsZHM7XG4gIH1cblxuICBwcml2YXRlIGdldEFnZW5kYVNlYXJjaEdyaWRGaWVsZHMoKSB7XG4gICAgY29uc3Qgc2VhcmNoR3JpZEZpZWxkcyA9IFtcbiAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICBuYW1lOiBcImRlc2NyaWNhb1wiLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAuYWdlbmRhX2Rlc2NyaWNhb1wiKSxcbiAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgIH0pLFxuICAgIF07XG5cbiAgICAvKntDQTpHRVRfQUdFTkRBX1NFQVJDSF9HUklEX0ZJRUxEUzpTVEFSVH0qL1xuICAgIC8qe0NBOkdFVF9BR0VOREFfU0VBUkNIX0dSSURfRklFTERTOkVORH0qL1xuXG4gICAgcmV0dXJuIHNlYXJjaEdyaWRGaWVsZHM7XG4gIH1cblxuICBwcml2YXRlIGdldERlcml2YWNhb1NlYXJjaEZpZWxkcygpIHtcbiAgICBjb25zdCBzZWFyY2hGaWVsZHMgPSBbXG4gICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgbmFtZTogXCJjb2RpZ29cIixcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLmRlcml2YWNhb19jb2RpZ29cIiksXG4gICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICB9KSxcbiAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICBuYW1lOiBcImRlc2NyaWNhb1wiLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAuZGVyaXZhY2FvX2Rlc2NyaWNhb1wiKSxcbiAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgIH0pLFxuICAgIF07XG5cbiAgICAvKntDQTpHRVRfREVSSVZBQ0FPX1NFQVJDSF9GSUVMRFM6U1RBUlR9Ki9cbiAgICAvKntDQTpHRVRfREVSSVZBQ0FPX1NFQVJDSF9GSUVMRFM6RU5EfSovXG5cbiAgICByZXR1cm4gc2VhcmNoRmllbGRzO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREZXJpdmFjYW9TZWFyY2hHcmlkRmllbGRzKCkge1xuICAgIGNvbnN0IHNlYXJjaEdyaWRGaWVsZHMgPSBbXG4gICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgbmFtZTogXCJjb2RpZ29cIixcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuZXJwLmRlcml2YWNhb19jb2RpZ29cIiksXG4gICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICB9KSxcbiAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICBuYW1lOiBcImRlc2NyaWNhb1wiLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5lcnAuZGVyaXZhY2FvX2Rlc2NyaWNhb1wiKSxcbiAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgIH0pLFxuICAgIF07XG5cbiAgICAvKntDQTpHRVRfREVSSVZBQ0FPX1NFQVJDSF9HUklEX0ZJRUxEUzpTVEFSVH0qL1xuICAgIC8qe0NBOkdFVF9ERVJJVkFDQU9fU0VBUkNIX0dSSURfRklFTERTOkVORH0qL1xuXG4gICAgcmV0dXJuIHNlYXJjaEdyaWRGaWVsZHM7XG4gIH1cblxuICBwcml2YXRlIGdvQmFjaygpIHtcbiAgICBjb25zdCBwcmV2aW91c1JvdXRlID0gXCIuLi9cIjtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbcHJldmlvdXNSb3V0ZV0sIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZS5wYXJlbnQgfSk7XG4gIH1cblxuICBwcml2YXRlIHZhbGlkYXRlQWxsRm9ybUZpZWxkcyhmb3JtR3JvdXA6IEZvcm1Hcm91cCkge1xuICAgIE9iamVjdC5rZXlzKGZvcm1Hcm91cC5jb250cm9scykuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgIGNvbnN0IGNvbnRyb2wgPSBmb3JtR3JvdXAuZ2V0KGZpZWxkKTtcbiAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUNvbnRyb2wpXG4gICAgICAgIGNvbnRyb2wubWFya0FzRGlydHkoeyBvbmx5U2VsZjogdHJ1ZSB9KTtcbiAgICAgIGVsc2UgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtR3JvdXApXG4gICAgICAgIHRoaXMudmFsaWRhdGVBbGxGb3JtRmllbGRzKGNvbnRyb2wpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5mb2N1c1NlcnZpY2UuZm9jdXNGaXJzdEludmFsaWRJbnB1dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTYXZlT2JzZXJ2YWJsZSgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZm9ybUdyb3VwLmdldFJhd1ZhbHVlKCk7XG4gICAgY29uc3QgZXhwZWRpY2FvRHRvID0gRXhwZWRpY2FvLnRvRHRvKHZhbHVlKTtcblxuICAgIGxldCBvYnNlcnZhYmxlO1xuXG4gICAgaWYgKHRoaXMuaXNOZXcoKSAmJiAhdmFsdWUuaWQpIHtcbiAgICAgIG9ic2VydmFibGUgPSB0aGlzLmV4cGVkaWNhb1NlcnZpY2UuaW5zZXJ0KGV4cGVkaWNhb0R0byk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGlkID0gdmFsdWUuaWQ7XG4gICAgICBvYnNlcnZhYmxlID0gdGhpcy5leHBlZGljYW9TZXJ2aWNlLnVwZGF0ZShpZCwgZXhwZWRpY2FvRHRvKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb2JzZXJ2YWJsZTtcbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGVWaXN1YWxpemF0aW9uKCkge1xuICAgIGlmICghdXNlckNhblZpc3VhbGl6ZSh0aGlzLmZvcm1Hcm91cCwgdGhpcy5hbGxQZXJtaXNzaW9ucykpIHtcbiAgICAgIHRoaXMuYWRkTWVzc2FnZShcbiAgICAgICAgXCJlcnJvclwiLFxuICAgICAgICBcInltcy5lcnAuY2Fubm90X3Zpc3VhbGl6ZV9mb3JtX3N1bW1hcnlcIixcbiAgICAgICAgXCJ5bXMuZXJwLmNhbm5vdF92aXN1YWxpemVfZm9ybV9kZXRhaWxcIlxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFkZE1lc3NhZ2Uoc2V2ZXJpdHk6IHN0cmluZywgc3VtbWFyeTogc3RyaW5nLCBkZXRhaWw6IHN0cmluZykge1xuICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHtcbiAgICAgIHNldmVyaXR5LFxuICAgICAgc3VtbWFyeTogdGhpcy50cmFuc2xhdGUuaW5zdGFudChzdW1tYXJ5KSxcbiAgICAgIGRldGFpbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChkZXRhaWwpLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQZWRpZG9WZW5kYUZvcm0oKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgcGVkaWRvVmVuZGE6IFt1bmRlZmluZWRdLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRPcmRlbVZlbmRhRm9ybShcbiAgICBwZWRpZG9WZW5kYT86IFBlZGlkb1ZlbmRhLFxuICAgIGdldEF1dG9tYXRpY0l0ZW5zT3JkZXI/OiBib29sZWFuXG4gICkge1xuICAgIGlmIChnZXRBdXRvbWF0aWNJdGVuc09yZGVyKSB0aGlzLmdldEF1dG9tYXRpY0l0ZW5zT3JkZXIocGVkaWRvVmVuZGEpO1xuICAgIHJldHVybiB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgIGlkOiBbdW5kZWZpbmVkXSxcbiAgICAgIHBlZGlkb1ZlbmRhOiBbcGVkaWRvVmVuZGFdLFxuICAgICAgaXRlbnM6IHRoaXMuZm9ybUJ1aWxkZXIuYXJyYXkoW10pLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRPcmRlbVZlbmRhSXRlbUZvcm0ocGVkaWRvVmVuZGFJdGVtPzogUGVkaWRvVmVuZGFJdGVtKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgaWQ6IFt1bmRlZmluZWRdLFxuICAgICAgcGVkaWRvOiBbdW5kZWZpbmVkXSxcbiAgICAgIGl0ZW06IFtwZWRpZG9WZW5kYUl0ZW1dLFxuICAgICAgcXVhbnRpZGFkZTogW3VuZGVmaW5lZF0sXG4gICAgICBudW1lcm9QZWRpZG9DbGllbnRlOiBbdW5kZWZpbmVkXSxcbiAgICAgIGl0ZW1QZWRpZG9DbGllbnRlOiBbdW5kZWZpbmVkXSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYnVzY2FyRmlsaWFsKCkge1xuICAgIGNvbnN0IHBsYW50YSA9IHRoaXMuYWdlbmRhLnBsYW50YSB8fCB7IGNucGo6IFtdIH07XG5cbiAgICBpZiAocGxhbnRhLmNucGoubGVuZ3RoICE9PSAxKSB7XG4gICAgICB0aGlzLmZvcm1DYXJyZWdhZG8gPSB0cnVlOyAgICAgXG4gICAgICByZXR1cm47XG4gICAgfSBcbiAgICAgIFxuICAgICAgdGhpcy5maWxpYWxTZXJ2aWNlXG4gICAgICAubGlzdCh7XG4gICAgICAgIHBhZ2U6IDAsXG4gICAgICAgIHNpemU6IDEsXG4gICAgICAgIGZpbHRlclF1ZXJ5OiBgcGVzc29hLmNwZkNucGogZXEgJyR7cGxhbnRhLmNucGpbMF19J2AsXG4gICAgICAgIGRpc3BsYXlGaWVsZHM6IFtcIipcIiwgXCJlbXByZXNhLm5vbWVcIl0sXG4gICAgICB9KVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKCh7IGNvbnRlbnRzIH0pID0+IHtcbiAgICAgICAgaWYgKGNvbnRlbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChcImZpbGlhbFwiKS5zZXRWYWx1ZShGaWxpYWwuZnJvbUR0byhjb250ZW50c1swXSkpO1xuICAgICAgICAgIHRoaXMuZGlzYWJsZU9yZGVyc0J1dHRvbnMgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICB0aGlzLmZvcm1DYXJyZWdhZG8gPSB0cnVlOyAgIFxuICB9XG5cbiAgcHJpdmF0ZSBidXNjYXJDbGllbnRlQUZhdHVyYXIocGVkaWRvVmVuZGE6IFBlZGlkb1ZlbmRhRHRvKSB7XG4gICAgdGhpcy5wZXNzb2FTZXJ2aWNlXG4gICAgICAubGlzdCh7XG4gICAgICAgIHNpemU6IDEsXG4gICAgICAgIHBhZ2U6IDAsXG4gICAgICAgIGZpbHRlclF1ZXJ5OiBgaWQgZXEgJyR7cGVkaWRvVmVuZGEucGVzc29hLmlkfSdgLFxuICAgICAgfSlcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgoeyBjb250ZW50cyB9KSA9PiB7XG4gICAgICAgIGlmICgoY29udGVudHMgfHwgW10pLmxlbmd0aCAhPT0gMSkgcmV0dXJuO1xuICAgICAgICB0aGlzLmZvcm1Hcm91cFxuICAgICAgICAgIC5nZXQoXCJjbGllbnRlRmF0dXJhbWVudG9cIilcbiAgICAgICAgICAuc2V0VmFsdWUoUGVzc29hLmZyb21EdG8oY29udGVudHNbMF0pKTtcbiAgICAgIH0pO1xuICB9XG59XG4iXX0=