@decaf-ts/for-fabric 0.4.2 → 0.4.5

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 (495) hide show
  1. package/dist/for-fabric.cjs +3777 -2
  2. package/dist/for-fabric.js +3881 -2
  3. package/lib/bin/cli.cjs +1 -1
  4. package/lib/cli-module.cjs +8 -4
  5. package/lib/cli-utils.cjs +1 -1
  6. package/lib/client/FabricClientAdapter.cjs +1 -1
  7. package/lib/client/FabricClientDispatch.cjs +1 -1
  8. package/lib/client/FabricClientPaginator.cjs +1 -1
  9. package/lib/client/FabricClientRepository.cjs +1 -1
  10. package/lib/client/FabricClientStatement.cjs +1 -1
  11. package/lib/client/collections/generation.cjs +1 -1
  12. package/lib/client/collections/index.cjs +1 -1
  13. package/lib/client/constants.cjs +1 -1
  14. package/lib/client/crypto.cjs +1 -1
  15. package/lib/client/erc20/FabricERC20ClientRepository.cjs +1 -1
  16. package/lib/client/erc20/index.cjs +1 -1
  17. package/lib/client/fabric-fs.cjs +1 -1
  18. package/lib/client/fabric-hsm.cjs +1 -1
  19. package/lib/client/ids/id-extraction.cjs +1 -1
  20. package/lib/client/ids/index.cjs +1 -1
  21. package/lib/client/index.cjs +1 -1
  22. package/lib/client/indexes/generation.cjs +1 -1
  23. package/lib/client/indexes/index.cjs +1 -1
  24. package/lib/client/logging.cjs +1 -1
  25. package/lib/client/services/FabricEnrollmentService.cjs +1 -1
  26. package/lib/client/services/FabricIdentityService.cjs +1 -1
  27. package/lib/client/services/RegistrationRequestBuilder.cjs +1 -1
  28. package/lib/client/services/constants.cjs +1 -1
  29. package/lib/client/services/index.cjs +1 -1
  30. package/lib/client/types.cjs +1 -1
  31. package/lib/client/utils.cjs +1 -1
  32. package/lib/contract/Address.cjs +1 -1
  33. package/lib/contract/AddressContract.cjs +1 -1
  34. package/lib/contract/AuditContract.cjs +1 -1
  35. package/lib/contract/BatchContract.cjs +1 -1
  36. package/lib/contract/MarketContract.cjs +1 -1
  37. package/lib/contract/OtherAuditContract.cjs +1 -1
  38. package/lib/contract/OtherBatchContract.cjs +1 -1
  39. package/lib/contract/OtherMarketContract.cjs +1 -1
  40. package/lib/contract/OtherProductContract.cjs +1 -1
  41. package/lib/contract/OtherProductImageContract.cjs +1 -1
  42. package/lib/contract/OtherProductSharedContract.cjs +1 -1
  43. package/lib/contract/OtherProductStrengthContract.cjs +1 -1
  44. package/lib/contract/Product.cjs +1 -1
  45. package/lib/contract/ProductContract.cjs +1 -1
  46. package/lib/contract/ProductStrengthContract.cjs +1 -1
  47. package/lib/contract/SegregatedPrivateDocumentContract.cjs +1 -1
  48. package/lib/contract/SegregatedSharedDocumentContract.cjs +1 -1
  49. package/lib/contract/User.cjs +1 -1
  50. package/lib/contract/UserContract.cjs +1 -1
  51. package/lib/contract/index.cjs +1 -1
  52. package/lib/contract/models/Audit.cjs +1 -1
  53. package/lib/contract/models/BaseIdentifiedModel.cjs +1 -1
  54. package/lib/contract/models/BaseModel.cjs +1 -1
  55. package/lib/contract/models/Batch.cjs +1 -1
  56. package/lib/contract/models/GtinOwner.cjs +1 -1
  57. package/lib/contract/models/History.cjs +1 -1
  58. package/lib/contract/models/Leaflet.cjs +1 -1
  59. package/lib/contract/models/LeafletFile.cjs +1 -1
  60. package/lib/contract/models/Market.cjs +1 -1
  61. package/lib/contract/models/OtherAudit.cjs +1 -1
  62. package/lib/contract/models/OtherBatchShared.cjs +1 -1
  63. package/lib/contract/models/OtherLeaflet.cjs +1 -1
  64. package/lib/contract/models/OtherLeafletFile.cjs +1 -1
  65. package/lib/contract/models/OtherMarket.cjs +1 -1
  66. package/lib/contract/models/OtherProduct.cjs +1 -1
  67. package/lib/contract/models/OtherProductImage.cjs +1 -1
  68. package/lib/contract/models/OtherProductShared.cjs +1 -1
  69. package/lib/contract/models/OtherProductStrength.cjs +1 -1
  70. package/lib/contract/models/Product.cjs +1 -1
  71. package/lib/contract/models/ProductStrength.cjs +1 -1
  72. package/lib/contract/models/SegregatedDocument.cjs +1 -1
  73. package/lib/contract/models/constants.cjs +1 -1
  74. package/lib/contract/models/decorators-private.cjs +1 -1
  75. package/lib/contract/models/decorators.cjs +1 -1
  76. package/lib/contract/models/gtin.cjs +1 -1
  77. package/lib/contract/models/history-dec.cjs +1 -1
  78. package/lib/contracts/ContractAdapter.cjs +1 -1
  79. package/lib/contracts/ContractContext.cjs +1 -1
  80. package/lib/contracts/FabricContractDispatch.cjs +1 -1
  81. package/lib/contracts/FabricContractPaginator.cjs +1 -1
  82. package/lib/contracts/FabricContractRepository.cjs +1 -1
  83. package/lib/contracts/FabricContractRepositoryObservableHandler.cjs +1 -1
  84. package/lib/contracts/FabricContractSequence.cjs +1 -1
  85. package/lib/contracts/FabricContractStatement.cjs +1 -1
  86. package/lib/contracts/PrivateSequence.cjs +1 -1
  87. package/lib/contracts/auth/decorators.cjs +1 -1
  88. package/lib/contracts/auth/index.cjs +1 -1
  89. package/lib/contracts/crud/crud-contract.cjs +1 -1
  90. package/lib/contracts/crud/index.cjs +1 -1
  91. package/lib/contracts/crud/serialized-crud-contract.cjs +1 -1
  92. package/lib/contracts/erc20/erc20contract.cjs +1 -1
  93. package/lib/contracts/erc20/index.cjs +1 -1
  94. package/lib/contracts/erc20/models.cjs +1 -1
  95. package/lib/contracts/index.cjs +1 -1
  96. package/lib/contracts/logging.cjs +1 -1
  97. package/lib/contracts/overrides.cjs +1 -1
  98. package/lib/contracts/types.cjs +1 -1
  99. package/lib/contracts/uuid.cjs +1 -1
  100. package/lib/esm/bin/cli.js +1 -1
  101. package/lib/esm/cli-module.js +8 -4
  102. package/lib/esm/cli-utils.js +1 -1
  103. package/lib/esm/client/FabricClientAdapter.js +1 -1
  104. package/lib/esm/client/FabricClientDispatch.js +1 -1
  105. package/lib/esm/client/FabricClientPaginator.js +1 -1
  106. package/lib/esm/client/FabricClientRepository.js +1 -1
  107. package/lib/esm/client/FabricClientStatement.js +1 -1
  108. package/lib/esm/client/collections/generation.js +1 -1
  109. package/lib/esm/client/collections/index.js +1 -1
  110. package/lib/esm/client/constants.js +1 -1
  111. package/lib/esm/client/crypto.js +1 -1
  112. package/lib/esm/client/erc20/FabricERC20ClientRepository.js +1 -1
  113. package/lib/esm/client/erc20/index.js +1 -1
  114. package/lib/esm/client/fabric-fs.js +1 -1
  115. package/lib/esm/client/fabric-hsm.js +1 -1
  116. package/lib/esm/client/ids/id-extraction.js +1 -1
  117. package/lib/esm/client/ids/index.js +1 -1
  118. package/lib/esm/client/index.js +1 -1
  119. package/lib/esm/client/indexes/generation.js +1 -1
  120. package/lib/esm/client/indexes/index.js +1 -1
  121. package/lib/esm/client/logging.js +1 -1
  122. package/lib/esm/client/services/FabricEnrollmentService.js +1 -1
  123. package/lib/esm/client/services/FabricIdentityService.js +1 -1
  124. package/lib/esm/client/services/RegistrationRequestBuilder.js +1 -1
  125. package/lib/esm/client/services/constants.js +1 -1
  126. package/lib/esm/client/services/index.js +1 -1
  127. package/lib/esm/client/types.js +1 -1
  128. package/lib/esm/client/utils.js +1 -1
  129. package/lib/esm/contract/Address.js +1 -1
  130. package/lib/esm/contract/AddressContract.js +1 -1
  131. package/lib/esm/contract/AuditContract.js +1 -1
  132. package/lib/esm/contract/BatchContract.js +1 -1
  133. package/lib/esm/contract/MarketContract.js +1 -1
  134. package/lib/esm/contract/OtherAuditContract.js +1 -1
  135. package/lib/esm/contract/OtherBatchContract.js +1 -1
  136. package/lib/esm/contract/OtherMarketContract.js +1 -1
  137. package/lib/esm/contract/OtherProductContract.js +1 -1
  138. package/lib/esm/contract/OtherProductImageContract.js +1 -1
  139. package/lib/esm/contract/OtherProductSharedContract.js +1 -1
  140. package/lib/esm/contract/OtherProductStrengthContract.js +1 -1
  141. package/lib/esm/contract/Product.js +1 -1
  142. package/lib/esm/contract/ProductContract.js +1 -1
  143. package/lib/esm/contract/ProductStrengthContract.js +1 -1
  144. package/lib/esm/contract/SegregatedPrivateDocumentContract.js +1 -1
  145. package/lib/esm/contract/SegregatedSharedDocumentContract.js +1 -1
  146. package/lib/esm/contract/User.js +1 -1
  147. package/lib/esm/contract/UserContract.js +1 -1
  148. package/lib/esm/contract/index.js +1 -1
  149. package/lib/esm/contract/models/Audit.js +1 -1
  150. package/lib/esm/contract/models/BaseIdentifiedModel.js +1 -1
  151. package/lib/esm/contract/models/BaseModel.js +1 -1
  152. package/lib/esm/contract/models/Batch.js +1 -1
  153. package/lib/esm/contract/models/GtinOwner.js +1 -1
  154. package/lib/esm/contract/models/History.js +1 -1
  155. package/lib/esm/contract/models/Leaflet.js +1 -1
  156. package/lib/esm/contract/models/LeafletFile.js +1 -1
  157. package/lib/esm/contract/models/Market.js +1 -1
  158. package/lib/esm/contract/models/OtherAudit.js +1 -1
  159. package/lib/esm/contract/models/OtherBatchShared.js +1 -1
  160. package/lib/esm/contract/models/OtherLeaflet.js +1 -1
  161. package/lib/esm/contract/models/OtherLeafletFile.js +1 -1
  162. package/lib/esm/contract/models/OtherMarket.js +1 -1
  163. package/lib/esm/contract/models/OtherProduct.js +1 -1
  164. package/lib/esm/contract/models/OtherProductImage.js +1 -1
  165. package/lib/esm/contract/models/OtherProductShared.js +1 -1
  166. package/lib/esm/contract/models/OtherProductStrength.js +1 -1
  167. package/lib/esm/contract/models/Product.js +1 -1
  168. package/lib/esm/contract/models/ProductStrength.js +1 -1
  169. package/lib/esm/contract/models/SegregatedDocument.js +1 -1
  170. package/lib/esm/contract/models/constants.js +1 -1
  171. package/lib/esm/contract/models/decorators-private.js +1 -1
  172. package/lib/esm/contract/models/decorators.js +1 -1
  173. package/lib/esm/contract/models/gtin.js +1 -1
  174. package/lib/esm/contract/models/history-dec.js +1 -1
  175. package/lib/esm/contracts/ContractAdapter.js +1 -1
  176. package/lib/esm/contracts/ContractContext.js +1 -1
  177. package/lib/esm/contracts/FabricContractDispatch.js +1 -1
  178. package/lib/esm/contracts/FabricContractPaginator.js +1 -1
  179. package/lib/esm/contracts/FabricContractRepository.js +1 -1
  180. package/lib/esm/contracts/FabricContractRepositoryObservableHandler.js +1 -1
  181. package/lib/esm/contracts/FabricContractSequence.js +1 -1
  182. package/lib/esm/contracts/FabricContractStatement.js +1 -1
  183. package/lib/esm/contracts/PrivateSequence.js +1 -1
  184. package/lib/esm/contracts/auth/decorators.js +1 -1
  185. package/lib/esm/contracts/auth/index.js +1 -1
  186. package/lib/esm/contracts/crud/crud-contract.js +1 -1
  187. package/lib/esm/contracts/crud/index.js +1 -1
  188. package/lib/esm/contracts/crud/serialized-crud-contract.js +1 -1
  189. package/lib/esm/contracts/erc20/erc20contract.js +1 -1
  190. package/lib/esm/contracts/erc20/index.js +1 -1
  191. package/lib/esm/contracts/erc20/models.js +1 -1
  192. package/lib/esm/contracts/index.js +1 -1
  193. package/lib/esm/contracts/logging.js +1 -1
  194. package/lib/esm/contracts/overrides.js +1 -1
  195. package/lib/esm/contracts/types.js +1 -1
  196. package/lib/esm/contracts/uuid.js +1 -1
  197. package/lib/esm/index.js +1 -1
  198. package/lib/esm/shared/ClientSerializer.js +1 -1
  199. package/lib/esm/shared/DeterministicSerializer.js +1 -1
  200. package/lib/esm/shared/SimpleDeterministicSerializer.js +1 -1
  201. package/lib/esm/shared/constants.js +1 -1
  202. package/lib/esm/shared/decorators.js +1 -1
  203. package/lib/esm/shared/erc20/erc20-constants.js +1 -1
  204. package/lib/esm/shared/erc20/index.js +1 -1
  205. package/lib/esm/shared/errors.js +1 -1
  206. package/lib/esm/shared/events.js +1 -1
  207. package/lib/esm/shared/fabric-types.js +1 -1
  208. package/lib/esm/shared/index.js +1 -1
  209. package/lib/esm/shared/interfaces/Checkable.js +1 -1
  210. package/lib/esm/shared/interfaces/index.js +1 -1
  211. package/lib/esm/shared/math.js +1 -1
  212. package/lib/esm/shared/model/FabricBaseModel.js +1 -1
  213. package/lib/esm/shared/model/FabricIdentifiedBaseModel.js +1 -1
  214. package/lib/esm/shared/model/Identity.js +1 -1
  215. package/lib/esm/shared/model/IdentityCredentials.js +1 -1
  216. package/lib/esm/shared/model/index.js +1 -1
  217. package/lib/esm/shared/overrides/Model.js +1 -1
  218. package/lib/esm/shared/overrides/index.js +1 -1
  219. package/lib/esm/shared/overrides/overrides.js +1 -1
  220. package/lib/esm/shared/types.js +1 -1
  221. package/lib/esm/version.d.ts +1 -1
  222. package/lib/esm/version.js +2 -2
  223. package/lib/index.cjs +1 -1
  224. package/lib/shared/ClientSerializer.cjs +1 -1
  225. package/lib/shared/DeterministicSerializer.cjs +1 -1
  226. package/lib/shared/SimpleDeterministicSerializer.cjs +1 -1
  227. package/lib/shared/constants.cjs +1 -1
  228. package/lib/shared/decorators.cjs +1 -1
  229. package/lib/shared/erc20/erc20-constants.cjs +1 -1
  230. package/lib/shared/erc20/index.cjs +1 -1
  231. package/lib/shared/errors.cjs +1 -1
  232. package/lib/shared/events.cjs +1 -1
  233. package/lib/shared/fabric-types.cjs +1 -1
  234. package/lib/shared/index.cjs +1 -1
  235. package/lib/shared/interfaces/Checkable.cjs +1 -1
  236. package/lib/shared/interfaces/index.cjs +1 -1
  237. package/lib/shared/math.cjs +1 -1
  238. package/lib/shared/model/FabricBaseModel.cjs +1 -1
  239. package/lib/shared/model/FabricIdentifiedBaseModel.cjs +1 -1
  240. package/lib/shared/model/Identity.cjs +1 -1
  241. package/lib/shared/model/IdentityCredentials.cjs +1 -1
  242. package/lib/shared/model/index.cjs +1 -1
  243. package/lib/shared/overrides/Model.cjs +1 -1
  244. package/lib/shared/overrides/index.cjs +1 -1
  245. package/lib/shared/overrides/overrides.cjs +1 -1
  246. package/lib/shared/types.cjs +1 -1
  247. package/lib/version.cjs +2 -2
  248. package/lib/version.d.ts +1 -1
  249. package/package.json +1 -1
  250. package/dist/for-fabric.cjs.map +0 -1
  251. package/dist/for-fabric.js.map +0 -1
  252. package/lib/bin/cli.js.map +0 -1
  253. package/lib/cli-module.js.map +0 -1
  254. package/lib/cli-utils.js.map +0 -1
  255. package/lib/client/FabricClientAdapter.js.map +0 -1
  256. package/lib/client/FabricClientDispatch.js.map +0 -1
  257. package/lib/client/FabricClientPaginator.js.map +0 -1
  258. package/lib/client/FabricClientRepository.js.map +0 -1
  259. package/lib/client/FabricClientStatement.js.map +0 -1
  260. package/lib/client/collections/generation.js.map +0 -1
  261. package/lib/client/collections/index.js.map +0 -1
  262. package/lib/client/constants.js.map +0 -1
  263. package/lib/client/crypto.js.map +0 -1
  264. package/lib/client/erc20/FabricERC20ClientRepository.js.map +0 -1
  265. package/lib/client/erc20/index.js.map +0 -1
  266. package/lib/client/fabric-fs.js.map +0 -1
  267. package/lib/client/fabric-hsm.js.map +0 -1
  268. package/lib/client/ids/id-extraction.js.map +0 -1
  269. package/lib/client/ids/index.js.map +0 -1
  270. package/lib/client/index.js.map +0 -1
  271. package/lib/client/indexes/generation.js.map +0 -1
  272. package/lib/client/indexes/index.js.map +0 -1
  273. package/lib/client/logging.js.map +0 -1
  274. package/lib/client/services/FabricEnrollmentService.js.map +0 -1
  275. package/lib/client/services/FabricIdentityService.js.map +0 -1
  276. package/lib/client/services/RegistrationRequestBuilder.js.map +0 -1
  277. package/lib/client/services/constants.js.map +0 -1
  278. package/lib/client/services/index.js.map +0 -1
  279. package/lib/client/types.js.map +0 -1
  280. package/lib/client/utils.js.map +0 -1
  281. package/lib/contract/Address.js.map +0 -1
  282. package/lib/contract/AddressContract.js.map +0 -1
  283. package/lib/contract/AuditContract.js.map +0 -1
  284. package/lib/contract/BatchContract.js.map +0 -1
  285. package/lib/contract/MarketContract.js.map +0 -1
  286. package/lib/contract/OtherAuditContract.js.map +0 -1
  287. package/lib/contract/OtherBatchContract.js.map +0 -1
  288. package/lib/contract/OtherMarketContract.js.map +0 -1
  289. package/lib/contract/OtherProductContract.js.map +0 -1
  290. package/lib/contract/OtherProductImageContract.js.map +0 -1
  291. package/lib/contract/OtherProductSharedContract.js.map +0 -1
  292. package/lib/contract/OtherProductStrengthContract.js.map +0 -1
  293. package/lib/contract/Product.js.map +0 -1
  294. package/lib/contract/ProductContract.js.map +0 -1
  295. package/lib/contract/ProductStrengthContract.js.map +0 -1
  296. package/lib/contract/SegregatedPrivateDocumentContract.js.map +0 -1
  297. package/lib/contract/SegregatedSharedDocumentContract.js.map +0 -1
  298. package/lib/contract/User.js.map +0 -1
  299. package/lib/contract/UserContract.js.map +0 -1
  300. package/lib/contract/index.js.map +0 -1
  301. package/lib/contract/models/Audit.js.map +0 -1
  302. package/lib/contract/models/BaseIdentifiedModel.js.map +0 -1
  303. package/lib/contract/models/BaseModel.js.map +0 -1
  304. package/lib/contract/models/Batch.js.map +0 -1
  305. package/lib/contract/models/GtinOwner.js.map +0 -1
  306. package/lib/contract/models/History.js.map +0 -1
  307. package/lib/contract/models/Leaflet.js.map +0 -1
  308. package/lib/contract/models/LeafletFile.js.map +0 -1
  309. package/lib/contract/models/Market.js.map +0 -1
  310. package/lib/contract/models/OtherAudit.js.map +0 -1
  311. package/lib/contract/models/OtherBatchShared.js.map +0 -1
  312. package/lib/contract/models/OtherLeaflet.js.map +0 -1
  313. package/lib/contract/models/OtherLeafletFile.js.map +0 -1
  314. package/lib/contract/models/OtherMarket.js.map +0 -1
  315. package/lib/contract/models/OtherProduct.js.map +0 -1
  316. package/lib/contract/models/OtherProductImage.js.map +0 -1
  317. package/lib/contract/models/OtherProductShared.js.map +0 -1
  318. package/lib/contract/models/OtherProductStrength.js.map +0 -1
  319. package/lib/contract/models/Product.js.map +0 -1
  320. package/lib/contract/models/ProductStrength.js.map +0 -1
  321. package/lib/contract/models/SegregatedDocument.js.map +0 -1
  322. package/lib/contract/models/constants.js.map +0 -1
  323. package/lib/contract/models/decorators-private.js.map +0 -1
  324. package/lib/contract/models/decorators.js.map +0 -1
  325. package/lib/contract/models/gtin.js.map +0 -1
  326. package/lib/contract/models/history-dec.js.map +0 -1
  327. package/lib/contracts/ContractAdapter.js.map +0 -1
  328. package/lib/contracts/ContractContext.js.map +0 -1
  329. package/lib/contracts/FabricContractDispatch.js.map +0 -1
  330. package/lib/contracts/FabricContractPaginator.js.map +0 -1
  331. package/lib/contracts/FabricContractRepository.js.map +0 -1
  332. package/lib/contracts/FabricContractRepositoryObservableHandler.js.map +0 -1
  333. package/lib/contracts/FabricContractSequence.js.map +0 -1
  334. package/lib/contracts/FabricContractStatement.js.map +0 -1
  335. package/lib/contracts/PrivateSequence.js.map +0 -1
  336. package/lib/contracts/auth/decorators.js.map +0 -1
  337. package/lib/contracts/auth/index.js.map +0 -1
  338. package/lib/contracts/crud/crud-contract.js.map +0 -1
  339. package/lib/contracts/crud/index.js.map +0 -1
  340. package/lib/contracts/crud/serialized-crud-contract.js.map +0 -1
  341. package/lib/contracts/erc20/erc20contract.js.map +0 -1
  342. package/lib/contracts/erc20/index.js.map +0 -1
  343. package/lib/contracts/erc20/models.js.map +0 -1
  344. package/lib/contracts/index.js.map +0 -1
  345. package/lib/contracts/logging.js.map +0 -1
  346. package/lib/contracts/overrides.js.map +0 -1
  347. package/lib/contracts/types.js.map +0 -1
  348. package/lib/contracts/uuid.js.map +0 -1
  349. package/lib/esm/bin/cli.js.map +0 -1
  350. package/lib/esm/cli-module.js.map +0 -1
  351. package/lib/esm/cli-utils.js.map +0 -1
  352. package/lib/esm/client/FabricClientAdapter.js.map +0 -1
  353. package/lib/esm/client/FabricClientDispatch.js.map +0 -1
  354. package/lib/esm/client/FabricClientPaginator.js.map +0 -1
  355. package/lib/esm/client/FabricClientRepository.js.map +0 -1
  356. package/lib/esm/client/FabricClientStatement.js.map +0 -1
  357. package/lib/esm/client/collections/generation.js.map +0 -1
  358. package/lib/esm/client/collections/index.js.map +0 -1
  359. package/lib/esm/client/constants.js.map +0 -1
  360. package/lib/esm/client/crypto.js.map +0 -1
  361. package/lib/esm/client/erc20/FabricERC20ClientRepository.js.map +0 -1
  362. package/lib/esm/client/erc20/index.js.map +0 -1
  363. package/lib/esm/client/fabric-fs.js.map +0 -1
  364. package/lib/esm/client/fabric-hsm.js.map +0 -1
  365. package/lib/esm/client/ids/id-extraction.js.map +0 -1
  366. package/lib/esm/client/ids/index.js.map +0 -1
  367. package/lib/esm/client/index.js.map +0 -1
  368. package/lib/esm/client/indexes/generation.js.map +0 -1
  369. package/lib/esm/client/indexes/index.js.map +0 -1
  370. package/lib/esm/client/logging.js.map +0 -1
  371. package/lib/esm/client/services/FabricEnrollmentService.js.map +0 -1
  372. package/lib/esm/client/services/FabricIdentityService.js.map +0 -1
  373. package/lib/esm/client/services/RegistrationRequestBuilder.js.map +0 -1
  374. package/lib/esm/client/services/constants.js.map +0 -1
  375. package/lib/esm/client/services/index.js.map +0 -1
  376. package/lib/esm/client/types.js.map +0 -1
  377. package/lib/esm/client/utils.js.map +0 -1
  378. package/lib/esm/contract/Address.js.map +0 -1
  379. package/lib/esm/contract/AddressContract.js.map +0 -1
  380. package/lib/esm/contract/AuditContract.js.map +0 -1
  381. package/lib/esm/contract/BatchContract.js.map +0 -1
  382. package/lib/esm/contract/MarketContract.js.map +0 -1
  383. package/lib/esm/contract/OtherAuditContract.js.map +0 -1
  384. package/lib/esm/contract/OtherBatchContract.js.map +0 -1
  385. package/lib/esm/contract/OtherMarketContract.js.map +0 -1
  386. package/lib/esm/contract/OtherProductContract.js.map +0 -1
  387. package/lib/esm/contract/OtherProductImageContract.js.map +0 -1
  388. package/lib/esm/contract/OtherProductSharedContract.js.map +0 -1
  389. package/lib/esm/contract/OtherProductStrengthContract.js.map +0 -1
  390. package/lib/esm/contract/Product.js.map +0 -1
  391. package/lib/esm/contract/ProductContract.js.map +0 -1
  392. package/lib/esm/contract/ProductStrengthContract.js.map +0 -1
  393. package/lib/esm/contract/SegregatedPrivateDocumentContract.js.map +0 -1
  394. package/lib/esm/contract/SegregatedSharedDocumentContract.js.map +0 -1
  395. package/lib/esm/contract/User.js.map +0 -1
  396. package/lib/esm/contract/UserContract.js.map +0 -1
  397. package/lib/esm/contract/index.js.map +0 -1
  398. package/lib/esm/contract/models/Audit.js.map +0 -1
  399. package/lib/esm/contract/models/BaseIdentifiedModel.js.map +0 -1
  400. package/lib/esm/contract/models/BaseModel.js.map +0 -1
  401. package/lib/esm/contract/models/Batch.js.map +0 -1
  402. package/lib/esm/contract/models/GtinOwner.js.map +0 -1
  403. package/lib/esm/contract/models/History.js.map +0 -1
  404. package/lib/esm/contract/models/Leaflet.js.map +0 -1
  405. package/lib/esm/contract/models/LeafletFile.js.map +0 -1
  406. package/lib/esm/contract/models/Market.js.map +0 -1
  407. package/lib/esm/contract/models/OtherAudit.js.map +0 -1
  408. package/lib/esm/contract/models/OtherBatchShared.js.map +0 -1
  409. package/lib/esm/contract/models/OtherLeaflet.js.map +0 -1
  410. package/lib/esm/contract/models/OtherLeafletFile.js.map +0 -1
  411. package/lib/esm/contract/models/OtherMarket.js.map +0 -1
  412. package/lib/esm/contract/models/OtherProduct.js.map +0 -1
  413. package/lib/esm/contract/models/OtherProductImage.js.map +0 -1
  414. package/lib/esm/contract/models/OtherProductShared.js.map +0 -1
  415. package/lib/esm/contract/models/OtherProductStrength.js.map +0 -1
  416. package/lib/esm/contract/models/Product.js.map +0 -1
  417. package/lib/esm/contract/models/ProductStrength.js.map +0 -1
  418. package/lib/esm/contract/models/SegregatedDocument.js.map +0 -1
  419. package/lib/esm/contract/models/constants.js.map +0 -1
  420. package/lib/esm/contract/models/decorators-private.js.map +0 -1
  421. package/lib/esm/contract/models/decorators.js.map +0 -1
  422. package/lib/esm/contract/models/gtin.js.map +0 -1
  423. package/lib/esm/contract/models/history-dec.js.map +0 -1
  424. package/lib/esm/contracts/ContractAdapter.js.map +0 -1
  425. package/lib/esm/contracts/ContractContext.js.map +0 -1
  426. package/lib/esm/contracts/FabricContractDispatch.js.map +0 -1
  427. package/lib/esm/contracts/FabricContractPaginator.js.map +0 -1
  428. package/lib/esm/contracts/FabricContractRepository.js.map +0 -1
  429. package/lib/esm/contracts/FabricContractRepositoryObservableHandler.js.map +0 -1
  430. package/lib/esm/contracts/FabricContractSequence.js.map +0 -1
  431. package/lib/esm/contracts/FabricContractStatement.js.map +0 -1
  432. package/lib/esm/contracts/PrivateSequence.js.map +0 -1
  433. package/lib/esm/contracts/auth/decorators.js.map +0 -1
  434. package/lib/esm/contracts/auth/index.js.map +0 -1
  435. package/lib/esm/contracts/crud/crud-contract.js.map +0 -1
  436. package/lib/esm/contracts/crud/index.js.map +0 -1
  437. package/lib/esm/contracts/crud/serialized-crud-contract.js.map +0 -1
  438. package/lib/esm/contracts/erc20/erc20contract.js.map +0 -1
  439. package/lib/esm/contracts/erc20/index.js.map +0 -1
  440. package/lib/esm/contracts/erc20/models.js.map +0 -1
  441. package/lib/esm/contracts/index.js.map +0 -1
  442. package/lib/esm/contracts/logging.js.map +0 -1
  443. package/lib/esm/contracts/overrides.js.map +0 -1
  444. package/lib/esm/contracts/types.js.map +0 -1
  445. package/lib/esm/contracts/uuid.js.map +0 -1
  446. package/lib/esm/index.js.map +0 -1
  447. package/lib/esm/shared/ClientSerializer.js.map +0 -1
  448. package/lib/esm/shared/DeterministicSerializer.js.map +0 -1
  449. package/lib/esm/shared/SimpleDeterministicSerializer.js.map +0 -1
  450. package/lib/esm/shared/constants.js.map +0 -1
  451. package/lib/esm/shared/decorators.js.map +0 -1
  452. package/lib/esm/shared/erc20/erc20-constants.js.map +0 -1
  453. package/lib/esm/shared/erc20/index.js.map +0 -1
  454. package/lib/esm/shared/errors.js.map +0 -1
  455. package/lib/esm/shared/events.js.map +0 -1
  456. package/lib/esm/shared/fabric-types.js.map +0 -1
  457. package/lib/esm/shared/index.js.map +0 -1
  458. package/lib/esm/shared/interfaces/Checkable.js.map +0 -1
  459. package/lib/esm/shared/interfaces/index.js.map +0 -1
  460. package/lib/esm/shared/math.js.map +0 -1
  461. package/lib/esm/shared/model/FabricBaseModel.js.map +0 -1
  462. package/lib/esm/shared/model/FabricIdentifiedBaseModel.js.map +0 -1
  463. package/lib/esm/shared/model/Identity.js.map +0 -1
  464. package/lib/esm/shared/model/IdentityCredentials.js.map +0 -1
  465. package/lib/esm/shared/model/index.js.map +0 -1
  466. package/lib/esm/shared/overrides/Model.js.map +0 -1
  467. package/lib/esm/shared/overrides/index.js.map +0 -1
  468. package/lib/esm/shared/overrides/overrides.js.map +0 -1
  469. package/lib/esm/shared/types.js.map +0 -1
  470. package/lib/esm/version.js.map +0 -1
  471. package/lib/index.js.map +0 -1
  472. package/lib/shared/ClientSerializer.js.map +0 -1
  473. package/lib/shared/DeterministicSerializer.js.map +0 -1
  474. package/lib/shared/SimpleDeterministicSerializer.js.map +0 -1
  475. package/lib/shared/constants.js.map +0 -1
  476. package/lib/shared/decorators.js.map +0 -1
  477. package/lib/shared/erc20/erc20-constants.js.map +0 -1
  478. package/lib/shared/erc20/index.js.map +0 -1
  479. package/lib/shared/errors.js.map +0 -1
  480. package/lib/shared/events.js.map +0 -1
  481. package/lib/shared/fabric-types.js.map +0 -1
  482. package/lib/shared/index.js.map +0 -1
  483. package/lib/shared/interfaces/Checkable.js.map +0 -1
  484. package/lib/shared/interfaces/index.js.map +0 -1
  485. package/lib/shared/math.js.map +0 -1
  486. package/lib/shared/model/FabricBaseModel.js.map +0 -1
  487. package/lib/shared/model/FabricIdentifiedBaseModel.js.map +0 -1
  488. package/lib/shared/model/Identity.js.map +0 -1
  489. package/lib/shared/model/IdentityCredentials.js.map +0 -1
  490. package/lib/shared/model/index.js.map +0 -1
  491. package/lib/shared/overrides/Model.js.map +0 -1
  492. package/lib/shared/overrides/index.js.map +0 -1
  493. package/lib/shared/overrides/overrides.js.map +0 -1
  494. package/lib/shared/types.js.map +0 -1
  495. package/lib/version.js.map +0 -1
package/lib/bin/cli.cjs CHANGED
@@ -6,4 +6,4 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
7
  const cli_module_1 = __importDefault(require("./../cli-module.cjs"));
8
8
  (0, cli_module_1.default)().parse(process.argv);
9
- //# sourceMappingURL=cli.js.map
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Jpbi9jbGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxxRUFBbUM7QUFFbkMsSUFBQSxvQkFBTSxHQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBmYWJyaWMgZnJvbSBcIi4uL2NsaS1tb2R1bGVcIjtcblxuZmFicmljKCkucGFyc2UocHJvY2Vzcy5hcmd2KTtcbiJdfQ==
@@ -33,6 +33,7 @@ const compileCommand = new commander_1.Command()
33
33
  .option("--strip-contract-name", "strip contract name from output", false)
34
34
  .option("--input <String>", "input folder for contracts", "lib/contracts")
35
35
  .option("--output <String>", "output folder for contracts", "./contracts")
36
+ .option("--sourcemaps", "includes sourcemaps in the compiled output", false)
36
37
  .action(async (options) => {
37
38
  const pkg = JSON.parse(fs_1.default.readFileSync(path_1.default.join(process.cwd(), "package.json"), "utf-8"));
38
39
  const version = pkg.version;
@@ -52,7 +53,7 @@ const compileCommand = new commander_1.Command()
52
53
  // eslint-disable-next-line prefer-const
53
54
  ccaas,
54
55
  // eslint-disable-next-line prefer-const
55
- bundle, tsConfigFile, } = options;
56
+ bundle, tsConfigFile, sourcemaps, } = options;
56
57
  const log = logger.for("compile-contract");
57
58
  log.debug(`running with options: ${JSON.stringify(options)} for ${pkg.name} version ${version}`);
58
59
  tsConfigFile = path_1.default.isAbsolute(tsConfigFile)
@@ -75,6 +76,8 @@ const compileCommand = new commander_1.Command()
75
76
  tsconfig: tsConfigFile,
76
77
  compilerOptions: {
77
78
  outDir: output,
79
+ sourceMap: sourcemaps,
80
+ inlineSources: sourcemaps,
78
81
  },
79
82
  module: "esnext",
80
83
  declaration: false,
@@ -86,6 +89,7 @@ const compileCommand = new commander_1.Command()
86
89
  file: `${output}/${(0, logging_1.toPascalCase)(name)}.js`,
87
90
  format: "umd",
88
91
  name: `${(0, logging_1.toPascalCase)(name)}.js`,
92
+ sourcemap: sourcemaps,
89
93
  });
90
94
  }
91
95
  else {
@@ -93,8 +97,8 @@ const compileCommand = new commander_1.Command()
93
97
  outDir: output,
94
98
  module: typescript_1.default.ModuleKind.ESNext,
95
99
  declaration: false,
96
- sourceMap: false,
97
- // rootDir: input,
100
+ sourceMap: sourcemaps,
101
+ inlineSources: sourcemaps,
98
102
  });
99
103
  }
100
104
  const scripts = {
@@ -414,4 +418,4 @@ fabricCmd.addCommand(extractCollections);
414
418
  function fabric() {
415
419
  return fabricCmd;
416
420
  }
417
- //# sourceMappingURL=cli-module.js.map
421
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLW1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9jbGktbW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBb21CQSx5QkFFQztBQXRtQkQseUNBQW9DO0FBQ3BDLCtDQUEwRDtBQUMxRCxpREFBeUM7QUFDekMsNENBQW9CO0FBQ3BCLGdEQUF3QjtBQUN4QixtQ0FBZ0M7QUFDaEMsNEVBQTZDO0FBQzdDLGtGQUFtRDtBQUNuRCwyREFBNEU7QUFDNUUsd0RBTzBCO0FBQzFCLHlFQUF1RDtBQUN2RCwrQ0FRcUI7QUFDckIsd0NBQTRCO0FBQzVCLDREQUE0QjtBQUM1QiwwREFLb0M7QUFHcEMsTUFBTSxNQUFNLEdBQUcsaUJBQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7QUFFckMsTUFBTSxjQUFjLEdBQUcsSUFBSSxtQkFBTyxFQUFFO0tBQ2pDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztLQUN4QixXQUFXLENBQUMsMkJBQTJCLENBQUM7S0FDeEMsTUFBTSxDQUFDLE9BQU8sRUFBRSx5Q0FBeUMsRUFBRSxLQUFLLENBQUM7S0FDakUsTUFBTSxDQUFDLFNBQVMsRUFBRSxtQ0FBbUMsRUFBRSxLQUFLLENBQUM7S0FDN0QsTUFBTSxDQUNMLFNBQVMsRUFDVCxxREFBcUQsRUFDckQsS0FBSyxDQUNOO0tBQ0EsTUFBTSxDQUFDLGlCQUFpQixFQUFFLGVBQWUsRUFBRSxpQkFBaUIsQ0FBQztLQUM3RCxNQUFNLENBQUMsVUFBVSxFQUFFLDBDQUEwQyxFQUFFLEtBQUssQ0FBQztLQUNyRSxNQUFNLENBQ0wsMkJBQTJCLEVBQzNCLG1FQUFtRSxFQUNuRSxpQkFBaUIsQ0FDbEI7S0FDQSxNQUFNLENBQ0wsd0JBQXdCLEVBQ3hCLHNCQUFzQixFQUN0QixnQ0FBZ0MsQ0FDakM7S0FDQSxNQUFNLENBQUMsdUJBQXVCLEVBQUUsaUNBQWlDLEVBQUUsS0FBSyxDQUFDO0tBQ3pFLE1BQU0sQ0FBQyxrQkFBa0IsRUFB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LElBQUksbUJBQU8sRUFBRTtLQUM1QixJQUFJLENBQUMsWUFBWSxDQUFDO0tBQ2xCLE9BQU8sQ0FBQyxRQUFRLENBQUM7S0FDakIsV0FBVyxDQUNWLG1FQUFtRSxDQUNwRSxDQUFDO0FBRUosU0FBUyxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUNyQyxTQUFTLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBQ3JDLFNBQVMsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDbEMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUNyQyxTQUFTLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFDeEMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0FBRXpDLFNBQXdCLE1BQU07SUFDNUIsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1hbmQgfSBmcm9tIFwiY29tbWFuZGVyXCI7XG5pbXBvcnQgeyBMb2dnaW5nLCB0b1Bhc2NhbENhc2UgfSBmcm9tIFwiQGRlY2FmLXRzL2xvZ2dpbmdcIjtcbmltcG9ydCB7IGV4ZWNTeW5jIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCBmcyBmcm9tIFwiZnNcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyByb2xsdXAgfSBmcm9tIFwicm9sbHVwXCI7XG5pbXBvcnQgcmVwbGFjZSBmcm9tIFwiQHJvbGx1cC9wbHVnaW4tcmVwbGFjZVwiO1xuaW1wb3J0IHR5cGVzY3JpcHQgZnJvbSBcIkByb2xsdXAvcGx1Z2luLXR5cGVzY3JpcHRcIjtcbmltcG9ydCB7IEludGVybmFsRXJyb3IsIFNlcmlhbGl6YXRpb25FcnJvciB9IGZyb20gXCJAZGVjYWYtdHMvZGItZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHtcbiAgZ2VuZXJhdGVNb2RlbERlc2lnbkRvY3MsXG4gIGdlbmVyYXRlTW9kZWxJbmRleGVzLFxuICByZWFkTW9kZWxGaWxlLFxuICByZWFkTW9kZWxGb2xkZXJzLFxuICB3cml0ZURlc2lnbkRvY3MsXG4gIHdyaXRlSW5kZXhlcyxcbn0gZnJvbSBcIi4vY2xpZW50L2luZGV4ZXNcIjtcbmltcG9ydCB7IE1vZGVsIH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvblwiO1xuaW1wb3J0IHtcbiAgYXBwcm92ZUNvbnRyYWN0LFxuICBlbnN1cmVJbmZyYXN0cnVjdHVyZUJvb3RlZCxcbiAgaW5zdGFsbENvbnRyYWN0LFxuICBwYWNrYWdlQ29udHJhY3QsXG4gIGNvbW1pdENoYWluY29kZSxcbiAgZ2V0Q29udHJhY3RTdGFydENvbW1hbmQsXG4gIGNvbXBpbGVXaXRoVHNjb25maWdPdmVycmlkZXMsXG59IGZyb20gXCIuL2NsaS11dGlsc1wiO1xuaW1wb3J0IFwiLi9zaGFyZWQvb3ZlcnJpZGVzXCI7XG5pbXBvcnQgdHMgZnJvbSBcInR5cGVzY3JpcHRcIjtcbmltcG9ydCB7XG4gIGV4dHJhY3RDb2xsZWN0aW9ucyBhcyBleENvbGxlY3Rpb25zLFxuICBQcml2YXRlQ29sbGVjdGlvbixcbiAgd3JpdGVDb2xsZWN0aW9ucyxcbiAgd3JpdGVDb2xsZWN0aW9uRGVzaWduRG9jcyxcbn0gZnJvbSBcIi4vY2xpZW50L2NvbGxlY3Rpb25zL2luZGV4XCI7XG5pbXBvcnQgeyBDb3VjaERCRGVzaWduRG9jLCBDcmVhdGVJbmRleFJlcXVlc3QgfSBmcm9tIFwiQGRlY2FmLXRzL2Zvci1jb3VjaGRiXCI7XG5cbmNvbnN0IGxvZ2dlciA9IExvZ2dpbmcuZm9yKFwiZmFicmljXCIpO1xuXG5jb25zdCBjb21waWxlQ29tbWFuZCA9IG5ldyBDb21tYW5kKClcbiAgLm5hbWUoXCJjb21waWxlLWNvbnRyYWN0XCIpXG4gIC5kZXNjcmlwdGlvbihcIkNyZWF0ZXMgYSBnbG9iYWwgY29udHJhY3RcIilcbiAgLm9wdGlvbihcIi0tZGV2XCIsIFwiY29tcGlsZXMgY29udHJhY3RzIHdpdGhvdXQgbWluaWZpY2F0aW9uXCIsIGZhbHNlKVxuICAub3B0aW9uKFwiLS1kZWJ1Z1wiLCBcIm1ha2VzIGF0dGFjaGluZyBkZWJ1Z2dlciBwb3NzaWJsZVwiLCBmYWxzZSlcbiAgLm9wdGlvbihcbiAgICBcIi0tY2NhYXNcIixcbiAgICBcIkFqdXN0cyB0aGUgcGFja2FnZSBjb21tYW5kcyB0byBiZSBkZXBsb3llZCBhcyBjY2Fhc1wiLFxuICAgIGZhbHNlXG4gIClcbiAgLm9wdGlvbihcIi0tbmFtZSA8U3RyaW5nPlwiLCBcImNvbnRyYWN0IG5hbWVcIiwgXCJnbG9iYWwtY29udHJhY3RcIilcbiAgLm9wdGlvbihcIi0tYnVuZGxlXCIsIFwiQnVuZGxlcyB3aXRoIHJvbGx1cCBpbnN0ZWFkIG9mIHVzaW5nIHRzY1wiLCBmYWxzZSlcbiAgLm9wdGlvbihcbiAgICBcIi0tdHMtY29uZmlnLWZpbGUgPHN0cmluZz5cIixcbiAgICBcInJlbGF0aXZlIHBhdGggdG8gdGhlIHRzIGNvbmZpZyBmaWxlIGJhc2VkIG9uIGN3ZCBvciBhYnNvbHV0ZSBwYXRoXCIsXG4gICAgXCIuL3RzY29uZmlnLmpzb25cIlxuICApXG4gIC5vcHRpb24oXG4gICAgXCItLWRlc2NyaXB0aW9uIDxTdHJpbmc+XCIsXG4gICAgXCJjb250cmFjdCBkZXNjcmlwdGlvblwiLFxuICAgIFwiR2xvYmFsIGNvbnRyYWN0IGltcGxlbWVudGF0aW9uXCJcbiAgKVxuICAub3B0aW9uKFwiLS1zdHJpcC1jb250cmFjdC1uYW1lXCIsIFwic3RyaXAgY29udHJhY3QgbmFtZSBmcm9tIG91dHB1dFwiLCBmYWxzZSlcbiAgLm9wdGlvbihcIi0taW5wdXQgPFN0cmluZz5cIiwgXCJpbnB1dCBmb2xkZXIgZm9yIGNvbnRyYWN0c1wiLCBcImxpYi9jb250cmFjdHNcIilcbiAgLm9wdGlvbihcIi0tb3V0cHV0IDxTdHJpbmc+XCIsIFwib3V0cHV0IGZvbGRlciBmb3IgY29udHJhY3RzXCIsIFwiLi9jb250cmFjdHNcIilcbiAgLm9wdGlvbihcIi0tc291cmNlbWFwc1wiLCBcImluY2x1ZGVzIHNvdXJjZW1hcHMgaW4gdGhlIGNvbXBpbGVkIG91dHB1dFwiLCBmYWxzZSlcbiAgLmFjdGlvbihhc3luYyAob3B0aW9uczogYW55KSA9PiB7XG4gICAgY29uc3QgcGtnID0gSlNPTi5wYXJzZShcbiAgICAgIGZzLnJlYWRGaWxlU3luYyhwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgXCJwYWNrYWdlLmpzb25cIiksIFwidXRmLThcIilcbiAgICApO1xuXG4gICAgY29uc3QgdmVyc2lvbiA9IHBrZy52ZXJzaW9uO1xuXG4gICAgbGV0IHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItY29uc3RcbiAgICAgIGRldixcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItY29uc3RcbiAgICAgIGRlYnVnLFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdFxuICAgICAgbmFtZSxcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItY29uc3RcbiAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgb3V0cHV0LFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdFxuICAgICAgaW5wdXQsXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWNvbnN0XG4gICAgICBzdHJpcENvbnRyYWN0TmFtZSxcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItY29uc3RcbiAgICAgIGNjYWFzLFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdFxuICAgICAgYnVuZGxlLFxuXG4gICAgICB0c0NvbmZpZ0ZpbGUsXG4gICAgICBzb3VyY2VtYXBzLFxuICAgIH0gPSBvcHRpb25zO1xuICAgIGNvbnN0IGxvZyA9IGxvZ2dlci5mb3IoXCJjb21waWxlLWNvbnRyYWN0XCIpO1xuICAgIGxvZy5kZWJ1ZyhcbiAgICAgIGBydW5uaW5nIHdpdGggb3B0aW9uczogJHtKU09OLnN0cmluZ2lmeShvcHRpb25zKX0gZm9yICR7cGtnLm5hbWV9IHZlcnNpb24gJHt2ZXJzaW9ufWBcbiAgICApO1xuXG4gICAgdHNDb25maWdGaWxlID0gcGF0aC5pc0Fic29sdXRlKHRzQ29uZmlnRmlsZSlcbiAgICAgID8gdHNDb25maWdGaWxlXG4gICAgICA6IHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCB0c0NvbmZpZ0ZpbGUpO1xuXG4gICAgb3V0cHV0ID0gc3RyaXBDb250cmFjdE5hbWUgPyBvdXRwdXQgOiBwYXRoLmpvaW4ob3V0cHV0LCBuYW1lKTtcbiAgICBsb2cuaW5mbyhgRGVsZXRpbmcgZXhpc3Rpbmcgb3V0cHV0IGZvbGRlciAoaWYgZXhpc3RzKSB1bmRlciAke291dHB1dH1gKTtcbiAgICBleGVjU3luYyhgcm0gLXJmICR7b3V0cHV0fWApO1xuICAgIGlmIChidW5kbGUpIHtcbiAgICAgIGxvZy5pbmZvKGBidW5kbGluZyBjb250cmFjdCBmcm9tICR7aW5wdXR9YCk7XG4gICAgICBjb25zdCBidW5kbGUgPSBhd2FpdCByb2xsdXAoe1xuICAgICAgICBpbnB1dDogYCR7aW5wdXR9L2luZGV4LnRzYCxcbiAgICAgICAgcGx1Z2luczogW1xuICAgICAgICAgIHJlcGxhY2Uoe1xuICAgICAgICAgICAgcHJldmVudEFzc2lnbm1lbnQ6IHRydWUsXG4gICAgICAgICAgICBkZWxpbWl0ZXJzOiBbXCJcIiwgXCJcIl0sXG4gICAgICAgICAgICB2YWx1ZXM6IHsgXCIjI1ZFUlNJT04jI1wiOiB2ZXJzaW9uLCBcIiMjUEFDS0FHRSMjXCI6IHBrZy5uYW1lIH0sXG4gICAgICAgICAgfSksXG4gICAgICAgICAgdHlwZXNjcmlwdCh7XG4gICAgICAgICAgICB0c2NvbmZpZzogdHNDb25maWdGaWxlLFxuICAgICAgICAgICAgY29tcGlsZXJPcHRpb25zOiB7XG4gICAgICAgICAgICAgIG91dERpcjogb3V0cHV0LFxuICAgICAgICAgICAgICBzb3VyY2VNYXA6IHNvdXJjZW1hcHMsXG4gICAgICAgICAgICAgIGlubGluZVNvdXJjZXM6IHNvdXJjZW1hcHMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbW9kdWxlOiBcImVzbmV4dFwiLFxuICAgICAgICAgICAgZGVjbGFyYXRpb246IGZhbHNlLFxuICAgICAgICAgIH0pLFxuICAgICAgICBdLFxuICAgICAgfSk7XG4gICAgICBsb2cuaW5mbyhcbiAgICAgICAgYHdpdGhpbmcgY29udHJhY3QgdG8gJHtvdXRwdXR9IHdpdGggbmFtZSAke3RvUGFzY2FsQ2FzZShuYW1lKX0uanNgXG4gICAgICApO1xuICAgICAgYXdhaXQgYnVuZGxlLndyaXRlKHtcbiAgICAgICAgZmlsZTogYCR7b3V0cHV0fS8ke3RvUGFzY2FsQ2FzZShuYW1lKX0uanNgLFxuICAgICAgICBmb3JtYXQ6IFwidW1kXCIsXG4gICAgICAgIG5hbWU6IGAke3RvUGFzY2FsQ2FzZShuYW1lKX0uanNgLFxuICAgICAgICBzb3VyY2VtYXA6IHNvdXJjZW1hcHMsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29tcGlsZVdpdGhUc2NvbmZpZ092ZXJyaWRlcyh0c0NvbmZpZ0ZpbGUsIHtcbiAgICAgICAgb3V0RGlyOiBvdXRwdXQsXG4gICAgICAgIG1vZHVsZTogdHMuTW9kdWxlS2luZC5FU05leHQsXG4gICAgICAgIGRlY2xhcmF0aW9uOiBmYWxzZSxcbiAgICAgICAgc291cmNlTWFwOiBzb3VyY2VtYXBzLFxuICAgICAgICBpbmxpbmVTb3VyY2VzOiBzb3VyY2VtYXBzLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2NyaXB0cyA9IHtcbiAgICAgIHN0YXJ0OiBnZXRDb250cmFjdFN0YXJ0Q29tbWFuZChkZWJ1ZywgY2NhYXMpLFxuICAgICAgXCJzdGFydDpkZXZcIjogXCJmYWJyaWMtY2hhaW5jb2RlLW5vZGUgc3RhcnQgLS10bHMuZW5hYmxlZCBmYWxzZVwiLFxuICAgICAgXCJzdGFydDp3YXRjaFwiOiAnbm9kZW1vbiAtLWV4ZWMgXCJucG0gcnVuIHN0YXJ0OmRldlwiJyxcbiAgICAgIGJ1aWxkOiAnZWNobyBcIk5vIG5lZWQgdG8gYnVpbGQgdGhlIGNoYWluY29kZVwiJyxcbiAgICAgIGxpbnQ6IFwiZXNsaW50IC4gLS1maXggLS1leHQgLmpzXCIsXG4gICAgfTtcblxuICAgIGNvbnN0IGNvbnRyYWN0UGFja2FnZSA9IHBrZztcblxuICAgIGNvbnRyYWN0UGFja2FnZS5uYW1lID0gbmFtZTtcbiAgICBjb250cmFjdFBhY2thZ2UuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcbiAgICBjb250cmFjdFBhY2thZ2Uuc2NyaXB0cyA9IHNjcmlwdHM7XG5cbiAgICBkZWxldGUgY29udHJhY3RQYWNrYWdlLnR5cGU7XG4gICAgZGVsZXRlIGNvbnRyYWN0UGFja2FnZS50eXBlcztcbiAgICBkZWxldGUgY29udHJhY3RQYWNrYWdlLmV4cG9ydHM7XG4gICAgY29udHJhY3RQYWNrYWdlLm1haW4gPSBidW5kbGVcbiAgICAgID8gYCR7dG9QYXNjYWxDYXNlKG5hbWUpfS5qc2BcbiAgICAgIDogYCR7aW5wdXR9L2luZGV4LmpzYDtcblxuICAgIGZzLndyaXRlRmlsZVN5bmMoXG4gICAgICBwYXRoLmpvaW4ob3V0cHV0LCBcInBhY2thZ2UuanNvblwiKSxcbiAgICAgIEpTT04uc3RyaW5naWZ5KGNvbnRyYWN0UGFja2FnZSlcbiAgICApO1xuXG4gICAgbG9nLmluZm8oYEluc3RhbGxpbmcgYW5kIHNocmlua3dyYXBwaW5nIGRlcGVuZGVuY2llc2ApO1xuICAgIGV4ZWNTeW5jKGBucG0gaW5zdGFsbGAsIHsgY3dkOiBvdXRwdXQgfSk7XG4gICAgZXhlY1N5bmMoYG5wbSBzaHJpbmt3cmFwYCwgeyBjd2Q6IG91dHB1dCB9KTtcbiAgICBleGVjU3luYyhcInJtIC1yZiBub2RlX21vZHVsZXNcIiwgeyBjd2Q6IG91dHB1dCB9KTtcbiAgICBsb2cuaW5mbyhgZGVsZXRpbmcgdGVtcCBmb2xkZXJzYCk7XG4gICAgZXhlY1N5bmMoYHJtIC1yZiAuL2xpYiAmJiBybSAtcmYgLi9kaXN0YCwgeyBjd2Q6IG91dHB1dCB9KTtcbiAgICBsb2cuaW5mbyhcbiAgICAgIGBDb250cmFjdCAke25hbWV9IGNvbXBpbGVkIHN1Y2Nlc3NmdWxseSEgaW4gJHtwYXRoLnJlc29sdmUob3V0cHV0KX1gXG4gICAgKTtcbiAgICBpZiAoZGV2KSB7XG4gICAgICBsb2cuaW5mbyhgZGV2IG1vZGUgZW5hYmxlZC4gaW5zdGFsbGluZyBkZXBlbmRlbmNpZXMgZm9yIGRlYnVnZ2luZ2ApO1xuICAgICAgZXhlY1N5bmMoYG5wbSBpbnN0YWxsYCwge1xuICAgICAgICBjd2Q6IG91dHB1dCxcbiAgICAgICAgZW52OiB7IC4uLnByb2Nlc3MuZW52LCBOT0RFX0VOVjogXCJwcm9kdWN0aW9uXCIgfSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG5cbmNvbnN0IGV4dHJhY3RJbmRleGVzID0gbmV3IENvbW1hbmQoKVxuICAuY29tbWFuZChcImV4dHJhY3QtaW5kZXhlc1wiKVxuICAub3B0aW9uKFwiLS1maWxlIFtTdHJpbmddXCIsIFwidGhlIG1vZGVsIGZpbGVcIilcbiAgLm9wdGlvbihcIi0tZm9sZGVyIFtTdHJpbmddXCIsIFwidGhlIG1vZGVsIGZvbGRlclwiKVxuICAub3B0aW9uKFwiLS1vdXREaXIgPFN0cmluZz5cIiwgXCJ0aGUgb3V0ZGlyLiBzaG91bGQgbWF0Y2ggeW91ciBjb250cmFjdCBmb2xkZXJcIilcbiAgLmRlc2NyaXB0aW9uKFxuICAgIFwiQ3JlYXRlcyBhIHRoZSBKU09OIGluZGV4IGZpbGVzIHRvIGJlIHN1Ym1pdHRlZCB0byBhbG9uZyB3aXRoIHRoZSBjb250cmFjdFwiXG4gIClcbiAgLmFjdGlvbihhc3luYyAob3B0aW9uczogYW55KSA9PiB7XG4gICAgY29uc3QgcGtnID0gSlNPTi5wYXJzZShcbiAgICAgIGZzLnJlYWRGaWxlU3luYyhwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgXCJwYWNrYWdlLmpzb25cIiksIFwidXRmLThcIilcbiAgICApO1xuXG4gICAgY29uc3QgdmVyc2lvbiA9IHBrZy52ZXJzaW9uO1xuXG4gICAgY29uc3QgbG9nID0gbG9nZ2VyLmZvcihcImV4dHJhY3QtaW5kZXhlc1wiKTtcbiAgICBsb2cuZGVidWcoXG4gICAgICBgcnVubmluZyB3aXRoIG9wdGlvbnM6ICR7SlNPTi5zdHJpbmdpZnkob3B0aW9ucyl9IGZvciAke3BrZy5uYW1lfSB2ZXJzaW9uICR7dmVyc2lvbn1gXG4gICAgKTtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItY29uc3RcbiAgICBsZXQgeyBmaWxlLCBmb2xkZXIsIG91dERpciB9ID0gb3B0aW9ucztcblxuICAgIGNvbnN0IG1vZGVsczogYW55W10gPSBbXTtcbiAgICBpZiAoZmlsZSkge1xuICAgICAgbW9kZWxzLnB1c2goLi4ucmVhZE1vZGVsRmlsZShmaWxlKSk7XG4gICAgfVxuXG4gICAgaWYgKGZvbGRlcikge1xuICAgICAgbG9nLmluZm8oYExvYWRpbmcgbW9kZWxzIGZyb20gJHtmb2xkZXJ9Li4uYCk7XG4gICAgICBtb2RlbHMucHVzaCguLi4oYXdhaXQgcmVhZE1vZGVsRm9sZGVycyhmb2xkZXIpKSk7XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICAgIGNvbnN0IGRlc2lnbkRvY3M6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcblxuICAgIGlmICghZmlsZSAmJiAhZm9sZGVyKVxuICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoYE11c3QgcGFzcyBhIGZpbGUgb3IgYSBmb2xkZXJgKTtcblxuICAgIGZvciAoY29uc3QgbSBvZiBtb2RlbHMpIHtcbiAgICAgIGxvZy52ZXJib3NlKGBFeHRyYWN0aW5nIGluZGV4ZXMgZm9yIHRhYmxlICR7TW9kZWwudGFibGVOYW1lKG0pfWApO1xuICAgICAgY29uc3QgaW5kZXhlcyA9IGdlbmVyYXRlTW9kZWxJbmRleGVzKG0pO1xuICAgICAgaW5kZXhlcy5mb3JFYWNoKChpbmRleCkgPT4ge1xuICAgICAgICBpZiAoaW5kZXgubmFtZSkge1xuICAgICAgICAgIHJlc3VsdFtpbmRleC5uYW1lXSA9IGluZGV4O1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGdlbmVyYXRlTW9kZWxEZXNpZ25Eb2NzKG0sIGRlc2lnbkRvY3MpO1xuICAgIH1cbiAgICBjb25zdCBpbmRleGVzVG9Xcml0ZSA9IE9iamVjdC52YWx1ZXMocmVzdWx0KTtcbiAgICBjb25zdCBkb2NzVG9Xcml0ZSA9IE9iamVjdC52YWx1ZXMoZGVzaWduRG9jcyk7XG4gICAgbG9nLnZlcmJvc2UoYEZvdW5kICR7aW5kZXhlc1RvV3JpdGUubGVuZ3RofSBpbmRleGVzIHRvIGNyZWF0ZWApO1xuICAgIGxvZy52ZXJib3NlKGBGb3VuZCAke2RvY3NUb1dyaXRlLmxlbmd0aH0gZGVzaWduIGRvY3MgdG8gY3JlYXRlYCk7XG4gICAgbG9nLmRlYnVnKGBJbmRleGVzOiAke0pTT04uc3RyaW5naWZ5KHJlc3VsdCl9YCk7XG4gICAgbG9nLmRlYnVnKGBEZXNpZ25Eb2NzOiAke0pTT04uc3RyaW5naWZ5KGRlc2lnbkRvY3MpfWApO1xuICAgIHdyaXRlSW5kZXhlcyhpbmRleGVzVG9Xcml0ZSwgb3V0RGlyKTtcbiAgICB3cml0ZURlc2lnbkRvY3MoZG9jc1RvV3JpdGUsIG91dERpcik7XG4gIH0pO1xuXG5jb25zdCBleHRyYWN0Q29sbGVjdGlvbnMgPSBuZXcgQ29tbWFuZCgpXG4gIC5jb21tYW5kKFwiZXh0cmFjdC1jb2xsZWN0aW9uc1wiKVxuICAub3B0aW9uKFwiLS1maWxlIFtTdHJpbmddXCIsIFwidGhlIG1vZGVsIGZpbGVcIilcbiAgLm9wdGlvbihcIi0tZm9sZGVyIFtTdHJpbmddXCIsIFwidGhlIG1vZGVsIGZvbGRlclwiKVxuICAub3B0aW9uKFwiLS1vdXREaXIgPFN0cmluZz5cIiwgXCJ0aGUgb3V0ZGlyLiBzaG91bGQgbWF0Y2ggeW91ciBjb250cmFjdCBmb2xkZXJcIilcbiAgLm9wdGlvbihcIi0tbXNwSWRzIDxTdHJpbmc+XCIsIFwic2luZ2xlIG1zcElkIG9yIHN0cmluZ2lmaWVkIGFycmF5XCIpXG4gIC5vcHRpb24oXCItLW1haW5Nc3BJZCA8U3RyaW5nPlwiLCBcInNpbmdsZSBtc3BJZFwiKVxuICAub3B0aW9uKFxuICAgIFwiLS1vdmVycmlkZXMgW1N0cmluZ11cIixcbiAgICBcInN0cmluZ2lmaWVkIG92ZXJyaWRlIG9iamVjdCB7cmVxdWlyZWRQZWVyQ291bnQ6IG51bWJlciwgbWF4UGVlckNvdW50OiBudW1iZXIsIGJsb2NrVG9MaXZlOiBudW1iZXIsIG1lbWJlck9ubHlSZWFkOiBudW1iZXIsIG1lbWJlck9ubHlXcml0ZTogbnVtYmVyLCBlbmRvcnNlbWVudFBvbGljeTogIHt9fVwiXG4gIClcbiAgLmRlc2NyaXB0aW9uKFxuICAgIFwiQ3JlYXRlcyBhIHRoZSBKU09OIGluZGV4IGZpbGVzIHRvIGJlIHN1Ym1pdHRlZCB0byBhbG9uZyB3aXRoIHRoZSBjb250cmFjdFwiXG4gIClcbiAgLmFjdGlvbihhc3luYyAob3B0aW9uczogYW55KSA9PiB7XG4gICAgY29uc3QgcGtnID0gSlNPTi5wYXJzZShcbiAgICAgIGZzLnJlYWRGaWxlU3luYyhwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgXCJwYWNrYWdlLmpzb25cIiksIFwidXRmLThcIilcbiAgICApO1xuXG4gICAgY29uc3QgdmVyc2lvbiA9IHBrZy52ZXJzaW9uO1xuXG4gICAgY29uc3QgbG9nID0gbG9nZ2VyLmZvcihcImV4dHJhY3QtY29sbGVjdGlvbnNcIik7XG4gICAgbG9nLmRlYnVnKFxuICAgICAgYHJ1bm5pbmcgd2l0aCBvcHRpb25zOiAke0pTT04uc3RyaW5naWZ5KG9wdGlvbnMpfSBmb3IgJHtwa2cubmFtZX0gdmVyc2lvbiAke3ZlcnNpb259YFxuICAgICk7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWNvbnN0XG4gICAgbGV0IHsgZmlsZSwgZm9sZGVyLCBvdXREaXIsIG1zcElkcywgbWFpbk1zcElkIH0gPSBvcHRpb25zO1xuXG4gICAgdHJ5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIG1zcElkcyA9IG1zcElkcyA/IEpTT04ucGFyc2UobXNwSWRzKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgICAvLyAgZG8gbm90aGluZ1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgIHRocm93IG5ldyBTZXJpYWxpemF0aW9uRXJyb3IoYFVuYWJsZSB0byBleHRyYWN0IG1zcGlkczogICR7ZX1gKTtcbiAgICB9XG5cbiAgICBjb25zdCBtb2RlbHM6IGFueVtdID0gW107XG4gICAgaWYgKGZpbGUpIHtcbiAgICAgIG1vZGVscy5wdXNoKC4uLnJlYWRNb2RlbEZpbGUoZmlsZSkpO1xuICAgIH1cblxuICAgIGlmIChmb2xkZXIpIHtcbiAgICAgIGxvZy5pbmZvKGBMb2FkaW5nIG1vZGVscyBmcm9tICR7Zm9sZGVyfS4uLmApO1xuICAgICAgbW9kZWxzLnB1c2goLi4uKGF3YWl0IHJlYWRNb2RlbEZvbGRlcnMoZm9sZGVyKSkpO1xuICAgIH1cblxuICAgIGlmICghZmlsZSAmJiAhZm9sZGVyKVxuICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoYE11c3QgcGFzcyBhIGZpbGUgb3IgYSBmb2xkZXJgKTtcblxuICAgIGNvbnN0IGluamVjdGFibGVNb2RlbHMgPSBtb2RlbHMuZmlsdGVyKFxuICAgICAgKG1vZGVsKSA9PlxuICAgICAgICBNb2RlbC5pc1NoYXJlZChtb2RlbCkgfHxcbiAgICAgICAgTW9kZWwuaXNQcml2YXRlKG1vZGVsKSB8fFxuICAgICAgICAhIU1vZGVsLm1pcnJvcmVkQXQobW9kZWwpXG4gICAgKTtcbiAgICBpZiAoIWluamVjdGFibGVNb2RlbHMubGVuZ3RoKSB7XG4gICAgICBsb2cuaW5mbyhcbiAgICAgICAgYE5vIHNoYXJlZCwgcHJpdmF0ZSwgb3IgbWlycm9yZWQgbW9kZWxzIGZvdW5kIHRvIGV4dHJhY3QgY29sbGVjdGlvbnNgXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGFzeW5jIGZ1bmN0aW9uIGdldENvbHMobXNwSWRzTGlzdD86IHN0cmluZ1tdKSB7XG4gICAgICBjb25zdCBjb2xzOiB7XG4gICAgICAgIGluZGV4ZXM6IENyZWF0ZUluZGV4UmVxdWVzdFtdO1xuICAgICAgICBkZXNpZ25Eb2NzOiBDb3VjaERCRGVzaWduRG9jW107XG4gICAgICAgIG1pcnJvcj86IFByaXZhdGVDb2xsZWN0aW9uO1xuICAgICAgICBjb2xsZWN0aW9uczogUHJpdmF0ZUNvbGxlY3Rpb25bXTtcbiAgICAgIH1bXSA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICBpbmplY3RhYmxlTW9kZWxzLm1hcChhc3luYyAoY2xhenopID0+IHtcbiAgICAgICAgICBjb25zdCB0YWJsZU5hbWUgPSBNb2RlbC50YWJsZU5hbWUoY2xhenopO1xuICAgICAgICAgIGNvbnN0IG1pcnJvck1ldGEgPSBNb2RlbC5taXJyb3JlZEF0KGNsYXp6KTtcblxuICAgICAgICAgIGNvbnNvbGUubG9nKHRhYmxlTmFtZSk7XG4gICAgICAgICAgY29uc3QgY29sbGVjdGlvbnM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgICAgICAgICBmb3IgKGNvbnN0IG1zcCBvZiBtc3BJZHNMaXN0IHx8IG1zcElkcyB8fCBbXSkge1xuICAgICAgICAgICAgY29sbGVjdGlvbnNbbXNwXSA9IGF3YWl0IGV4Q29sbGVjdGlvbnMoXG4gICAgICAgICAgICAgIGNsYXp6LFxuICAgICAgICAgICAgICBbbXNwLCBtYWluTXNwSWRdLFxuICAgICAgICAgICAgICB7fSxcbiAgICAgICAgICAgICAgLy8ge1xuICAgICAgICAgICAgICAvLyAgIHNoYXJlZENvbHM6IE9iamVjdC5hc3NpZ24oe30sIG92ZXJyaWRlcy5zaGFyZWRDb2xzKSxcbiAgICAgICAgICAgICAgLy8gICBwcml2YXRlQ29sczogT2JqZWN0LmFzc2lnbih7fSwgb3ZlcnJpZGVzLnByaXZhdGVDb2xzKSxcbiAgICAgICAgICAgICAgLy8gfSxcbiAgICAgICAgICAgICAgISFtaXJyb3JNZXRhXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxldCBtaXJyb3JDb2xsZWN0aW9uOiBQcml2YXRlQ29sbGVjdGlvbiB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICAgICAgICAgIGlmIChtaXJyb3JNZXRhKSB7XG4gICAgICAgICAgICBjb2xsZWN0aW9uc1ttYWluTXNwSWRdID0gY29sbGVjdGlvbnNbbWFpbk1zcElkXSB8fCB7fTtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGNvbGxlY3Rpb25zKS5mb3JFYWNoKChtc3A6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICBjb2xsZWN0aW9uc1ttYWluTXNwSWRdLnByaXZhdGVzID0gY29sbGVjdGlvbnNbXG4gICAgICAgICAgICAgICAgbXNwXG4gICAgICAgICAgICAgIF0ucHJpdmF0ZXM/LmZpbHRlcigocDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHAubmFtZSAhPT0gKG1pcnJvck1ldGEucmVzb2x2ZXIgYXMgc3RyaW5nKSkgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgbWlycm9yQ29sbGVjdGlvbiA9IHAgYXMgYW55O1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBwcml2YXRlc0NvdW50ID0gT2JqZWN0LnZhbHVlcyhjb2xsZWN0aW9ucylcbiAgICAgICAgICAgIC5tYXAoKGMpID0+IGMucHJpdmF0ZXMpXG4gICAgICAgICAgICAuZmxhdCgpLmxlbmd0aDtcbiAgICAgICAgICBpZiAocHJpdmF0ZXNDb3VudClcbiAgICAgICAgICAgIGxvZ1xuICAgICAgICAgICAgICAuZm9yKE1vZGVsLnRhYmxlTmFtZShjbGF6eikpXG4gICAgICAgICAgICAgIC5pbmZvKGBGb3VuZCAke3ByaXZhdGVzQ291bnR9IHByaXZhdGUgY29sbGVjdGlvbnMgdG8gY3JlYXRlYCk7XG4gICAgICAgICAgY29uc3Qgc2hhcmVkQ291bnQgPSBPYmplY3QudmFsdWVzKGNvbGxlY3Rpb25zKVxuICAgICAgICAgICAgLm1hcCgoYykgPT4gYy5zaGFyZWQpXG4gICAgICAgICAgICAuZmxhdCgpLmxlbmd0aDtcblxuICAgICAgICAgIGxvZ1xuICAgICAgICAgICAgLmZvcihNb2RlbC50YWJsZU5hbWUoY2xhenopKVxuICAgICAgICAgICAgLmluZm8oYEZvdW5kICR7c2hhcmVkQ291bnR9IHNoYXJlZCBjb2xsZWN0aW9ucyB0byBjcmVhdGVgKTtcbiAgICAgICAgICBpZiAobWlycm9yQ29sbGVjdGlvbilcbiAgICAgICAgICAgIGxvZ1xuICAgICAgICAgICAgICAuZm9yKE1vZGVsLnRhYmxlTmFtZShjbGF6eikpXG4gICAgICAgICAgICAgIC5pbmZvKFxuICAgICAgICAgICAgICAgIGBGb3VuZCBvbmUgbWlycm9yIGNvbGxlY3Rpb24gJHttaXJyb3JNZXRhPy5yZXNvbHZlciBhcyBzdHJpbmd9YFxuICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgY29uc3QgY29sTGlzdCA9IE9iamVjdC52YWx1ZXMoY29sbGVjdGlvbnMpXG4gICAgICAgICAgICAubWFwKChjKSA9PiBbLi4uKGMucHJpdmF0ZXMgfHwgW10pLCAuLi4oYy5zaGFyZWQgfHwgW10pXSlcbiAgICAgICAgICAgIC5mbGF0KCk7XG4gICAgICAgICAgbGV0IGluZGV4ZXM6IENyZWF0ZUluZGV4UmVxdWVzdFtdID0gW107XG4gICAgICAgICAgbGV0IGRlc2lnbkRvY3M6IENvdWNoREJEZXNpZ25Eb2NbXSA9IFtdO1xuICAgICAgICAgIGlmIChjb2xMaXN0Lmxlbmd0aCkge1xuICAgICAgICAgICAgbG9nXG4gICAgICAgICAgICAgIC5mb3IoTW9kZWwudGFibGVOYW1lKGNsYXp6KSlcbiAgICAgICAgICAgICAgLnZlcmJvc2UoYGdlbmVyYXRpbmcgaW5kZXhlcyBmb3IgY29sbGVjdGlvbnNgKTtcbiAgICAgICAgICAgIGluZGV4ZXMgPSBnZW5lcmF0ZU1vZGVsSW5kZXhlcyhjbGF6eik7XG4gICAgICAgICAgICBsb2dcbiAgICAgICAgICAgICAgLmZvcihNb2RlbC50YWJsZU5hbWUoY2xhenopKVxuICAgICAgICAgICAgICAuaW5mbyhgZm91bmQgJHtpbmRleGVzLmxlbmd0aH0gaW5kZXhlc2ApO1xuICAgICAgICAgICAgZGVzaWduRG9jcyA9IGdlbmVyYXRlTW9kZWxEZXNpZ25Eb2NzKGNsYXp6KTtcbiAgICAgICAgICAgIGxvZ1xuICAgICAgICAgICAgICAuZm9yKE1vZGVsLnRhYmxlTmFtZShjbGF6eikpXG4gICAgICAgICAgICAgIC5pbmZvKGBmb3VuZCAke2Rlc2lnbkRvY3MubGVuZ3RofSBkZXNpZ24gZG9jc2ApO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaW5kZXhlcyxcbiAgICAgICAgICAgIGRlc2lnbkRvY3MsXG4gICAgICAgICAgICBjb2xsZWN0aW9uczogY29sTGlzdCxcbiAgICAgICAgICAgIG1pcnJvcjogbWlycm9yQ29sbGVjdGlvbixcbiAgICAgICAgICB9O1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICAgIHJldHVybiBjb2xzO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbHMgPSBhd2FpdCBnZXRDb2xzKCk7XG4gICAgY29uc3Qgb25seU1pcnJvciA9IGF3YWl0IGdldENvbHMoW21haW5Nc3BJZF0pO1xuXG4gICAgY29uc3QgY29sbGVjdGlvbnNUbyA9IFtcbiAgICAgIC4uLm9ubHlNaXJyb3IuZmlsdGVyKChjKSA9PiBjLm1pcnJvcikubWFwKChjKSA9PiBjLm1pcnJvciksXG4gICAgICAuLi5jb2xzLm1hcCgoYykgPT4gYy5jb2xsZWN0aW9ucykuZmxhdCgpLFxuICAgICAgLi4uY29scy5maWx0ZXIoKGMpID0+IGMubWlycm9yKS5tYXAoKGMpID0+IGMubWlycm9yKSxcbiAgICBdIGFzIFByaXZhdGVDb2xsZWN0aW9uW107XG5cbiAgICBjb25zdCB1bmlxdWVCeUNvbGxlY3Rpb24gPSBbXG4gICAgICAuLi5uZXcgTWFwKFxuICAgICAgICBjb2xsZWN0aW9uc1RvLm1hcCgoaXRlbTogUHJpdmF0ZUNvbGxlY3Rpb24pID0+IFtpdGVtLm5hbWUsIGl0ZW1dKVxuICAgICAgKS52YWx1ZXMoKSxcbiAgICBdO1xuXG4gICAgaWYgKHVuaXF1ZUJ5Q29sbGVjdGlvbi5sZW5ndGgpIHtcbiAgICAgIHdyaXRlQ29sbGVjdGlvbnModW5pcXVlQnlDb2xsZWN0aW9uLCBvdXREaXIpO1xuICAgICAgY29uc3QgbWV0YUNvbGxlY3Rpb25zQ29uZmlnID0gcGF0aC5qb2luKFxuICAgICAgICBvdXREaXIsXG4gICAgICAgIFwiTUVUQS1JTkZcIixcbiAgICAgICAgXCJjb2xsZWN0aW9uc19jb25maWcuanNvblwiXG4gICAgICApO1xuICAgICAgY29uc3QgY29udHJhY3RDb2xsZWN0aW9uc0NvbmZpZyA9IHBhdGguam9pbihcbiAgICAgICAgb3V0RGlyLFxuICAgICAgICBcImNvbGxlY3Rpb25zX2NvbmZpZy5qc29uXCJcbiAgICAgICk7XG4gICAgICBmcy5jb3B5RmlsZVN5bmMobWV0YUNvbGxlY3Rpb25zQ29uZmlnLCBjb250cmFjdENvbGxlY3Rpb25zQ29uZmlnKTtcbiAgICAgIGxvZy5pbmZvKFxuICAgICAgICBgU3RvcmVkICR7Y29sbGVjdGlvbnNUby5sZW5ndGh9IGNvbGxlY3Rpb25zIHRvICR7bWV0YUNvbGxlY3Rpb25zQ29uZmlnfWBcbiAgICAgICk7XG4gICAgICBsb2cuaW5mbyhcbiAgICAgICAgYENvcGllZCBjb2xsZWN0aW9uc19jb25maWcgdG8gJHtjb250cmFjdENvbGxlY3Rpb25zQ29uZmlnfSBhbG9uZ3NpZGUgdGhlIHBhY2thZ2UuanNvbmBcbiAgICAgICk7XG5cbiAgICAgIGNvbHMuZm9yRWFjaCgoYykgPT4ge1xuICAgICAgICBjb25zdCB7IGluZGV4ZXMsIGRlc2lnbkRvY3MsIGNvbGxlY3Rpb25zLCBtaXJyb3IgfSA9IGM7XG4gICAgICAgIGNvbnN0IHRvSW5kZXg6IFByaXZhdGVDb2xsZWN0aW9uW10gPSBbLi4uY29sbGVjdGlvbnMsIG1pcnJvcl0uZmlsdGVyKFxuICAgICAgICAgIEJvb2xlYW5cbiAgICAgICAgKSBhcyBQcml2YXRlQ29sbGVjdGlvbltdO1xuICAgICAgICB0b0luZGV4LmZvckVhY2goKGkpID0+IHtcbiAgICAgICAgICB3cml0ZUluZGV4ZXMoaW5kZXhlcywgb3V0RGlyLCBpLm5hbWUpO1xuICAgICAgICAgIHdyaXRlQ29sbGVjdGlvbkRlc2lnbkRvY3MoZGVzaWduRG9jcyB8fCBbXSwgb3V0RGlyLCBpLm5hbWUpO1xuICAgICAgICAgIGxvZy5pbmZvKFxuICAgICAgICAgICAgYFN0b3JlZCAke2luZGV4ZXM/Lmxlbmd0aCB8fCAwfSBpbmRleGVzIGFuZCAke2Rlc2lnbkRvY3M/Lmxlbmd0aCB8fCAwfSBkZXNpZ24gZG9jcyB0byBjb2xsZWN0aW9uICR7aS5uYW1lfWBcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG5cbmNvbnN0IGVuc3VyZUluZnJhID0gbmV3IENvbW1hbmQoKVxuICAubmFtZShcImF3YWl0LWluZnJhXCIpXG4gIC5kZXNjcmlwdGlvbihcIndhaXRzIGZvciB0aGUgaW5mcmFzdHJ1Y3R1cmUgdG8gYmUgdXAgYW5kIHJ1bm5pbmdcIilcbiAgLm9wdGlvbihcbiAgICBcIi0tY29udGFpbmVyIDxTdHJpbmc+XCIsXG4gICAgXCJkb2NrZXIgY29udGFpbmVyIG5hbWUgdG8gdGVzdCAodXN1YWxseSBsYXN0IHBlZXIpXCIsXG4gICAgXCJib290LW9yZy1jLXBlZXItMFwiXG4gIClcbiAgLm9wdGlvbihcIi0tdGltZW91dCA8U3RyaW5nPlwiLCBcInRpbWVvdXQgYmV0d2VlbiB0ZXN0cyBpbiBtaWxsaXNlY29uZHNcIiwgXCI1MDAwXCIpXG4gIC5vcHRpb24oXCItLWF0dGVtcHRzIDxTdHJpbmc+XCIsIFwibnVtYmVyIG9mIGF0dGVtcHRzIGJlZm9yZSBnaXZpbmcgdXBcIiwgXCIxMFwiKVxuICAuYWN0aW9uKGFzeW5jIChvcHRpb25zOiBhbnkpID0+IHtcbiAgICBjb25zdCBwa2cgPSBKU09OLnBhcnNlKFxuICAgICAgZnMucmVhZEZpbGVTeW5jKHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCBcInBhY2thZ2UuanNvblwiKSwgXCJ1dGYtOFwiKVxuICAgICk7XG5cbiAgICBjb25zdCB2ZXJzaW9uID0gcGtnLnZlcnNpb247XG5cbiAgICBjb25zdCBsb2cgPSBsb2dnZXIuZm9yKFwiYXdhaXQtaW5mcmFcIik7XG4gICAgbG9nLmRlYnVnKFxuICAgICAgYHJ1bm5pbmcgd2l0aCBvcHRpb25zOiAke0pTT04uc3RyaW5naWZ5KG9wdGlvbnMpfSBmb3IgJHtwa2cubmFtZX0gdmVyc2lvbiAke3ZlcnNpb259YFxuICAgICk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdFxuICAgIGxldCB7IGNvbnRhaW5lciwgdGltZW91dCwgYXR0ZW1wdHMgfSA9IG9wdGlvbnM7XG4gICAgdGltZW91dCA9IHBhcnNlSW50KHRpbWVvdXQpIHx8IDUwMDA7XG4gICAgYXR0ZW1wdHMgPSBwYXJzZUludChhdHRlbXB0cykgfHwgMTA7XG5cbiAgICBhd2FpdCBlbnN1cmVJbmZyYXN0cnVjdHVyZUJvb3RlZChcImJvb3Qtb3JnLWMtcGVlci0wXCIsIHRpbWVvdXQsIGF0dGVtcHRzKTtcblxuICAgIGxvZy5pbmZvKFxuICAgICAgYEluZnJhc3RydWN0dXJlIGJvb3RlZCBzdWNjZXNzZnVsbHkgKGFjY29yZGluZyB0byBjb250YWluZXIgJHtjb250YWluZXJ9KSFgXG4gICAgKTtcbiAgfSk7XG5cbmNvbnN0IGRlcGxveUNvbnRyYWN0ID0gbmV3IENvbW1hbmQoKVxuICAubmFtZShcImRlcGxveS1jb250cmFjdFwiKVxuICAuZGVzY3JpcHRpb24oXCJkZXBsb3lzIHRoZSBzZWxlY3RlZCBjb250cmFjdFwiKVxuICAub3B0aW9uKFwiLS1uYW1lIDxTdHJpbmc+XCIsIFwiQ29udHJhY3QgTmFtZSAoYW5kIGZvbGRlcilcIilcbiAgLm9wdGlvbihcIi0taW5wdXQgPFN0cmluZz5cIiwgXCJpbnB1dCBmb2xkZXJcIilcbiAgLm9wdGlvbihcbiAgICBcIi0tY29sbGVjdGlvbnMtY29uZmlnIDxTdHJpbmc+XCIsXG4gICAgXCJwYXRoIHRvIGNvbGxlY3Rpb25zX2NvbmZpZy5qc29uIHRvIGNvbmZpZ3VyZSBwcml2YXRlIGNvbGxlY3Rpb25zXCJcbiAgKVxuICAub3B0aW9uKFxuICAgIFwiLS1pbmNyZW1lbnRWZXJzaW9uIDxTdHJpbmc+XCIsXG4gICAgXCIodHJ1ZSB8IGZhbHNlKSBpZiBzaG91bGQgdXNlIHZlcnNpb24gb3Igc2VxdWVuY2UgdG8gdXBkYXRlIGNvbnRyYWN0c1wiLFxuICAgIGZhbHNlXG4gIClcbiAgLm9wdGlvbihcbiAgICBcIi0tdHJhY2tlckZvbGRlciA8U3RyaW5nPlwiLFxuICAgIFwiY29udHJhY3QgdmVyc2lvbiB0cmFja2VyIGZvbGRlciAoc2hvdWxkIGJlIGRlbGV0ZWQgb24gaW5mcmFzdHJ1Y3R1cmU6ZG93bilcIixcbiAgICBwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgXCJ0ZXN0c1wiLCBcImludGVncmF0aW9uXCIsIFwiY2hhaW5jb2RlVHJhY2tlcnNcIilcbiAgKVxuICAub3B0aW9uKFxuICAgIFwiLS1wZWVycyA8U3RyaW5nPlwiLFxuICAgIFwiY29tbWEgc2VwYXJhdGVkIHBlZXIgaWRzXCIsXG4gICAgXCJvcmctYS1wZWVyLTAsb3JnLWItcGVlci0wLG9yZy1jLXBlZXItMFwiXG4gIClcbiAgLmFjdGlvbihhc3luYyAob3B0aW9uczogYW55KSA9PiB7XG4gICAgY29uc3QgcGtnID0gSlNPTi5wYXJzZShcbiAgICAgIGZzLnJlYWRGaWxlU3luYyhwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgXCJwYWNrYWdlLmpzb25cIiksIFwidXRmLThcIilcbiAgICApO1xuXG4gICAgY29uc3QgdmVyc2lvbiA9IHBrZy52ZXJzaW9uO1xuXG4gICAgY29uc3QgbG9nID0gbG9nZ2VyLmZvcihcImRlcGxveS1jb250cmFjdFwiKTtcbiAgICBsb2cuZGVidWcoXG4gICAgICBgcnVubmluZyB3aXRoIG9wdGlvbnM6ICR7SlNPTi5zdHJpbmdpZnkob3B0aW9ucyl9IGZvciAke3BrZy5uYW1lfSB2ZXJzaW9uICR7dmVyc2lvbn1gXG4gICAgKTtcblxuICAgIGNvbnN0IHtcbiAgICAgIG5hbWUsXG4gICAgICBpbnB1dCxcbiAgICAgIHBlZXJzLFxuICAgICAgdHJhY2tlckZvbGRlcixcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICAgIGluY3JlbWVudFZlcnNpb24sXG4gICAgICBjb2xsZWN0aW9uc0NvbmZpZyxcbiAgICB9ID0gb3B0aW9ucztcbiAgICBjb25zdCBwZWVySWRzID0gcGVlcnMuc3BsaXQoXCIsXCIpO1xuXG4gICAgY29uc3QgY291bnRQYXRoID0gcGF0aC5yZXNvbHZlKHBhdGguam9pbih0cmFja2VyRm9sZGVyLCBgJHtuYW1lfS5jb3VudGApKTtcblxuICAgIGxldCBzZXF1ZW5jZTogbnVtYmVyO1xuXG4gICAgdHJ5IHtcbiAgICAgIHNlcXVlbmNlID0gcGFyc2VJbnQoZnMucmVhZEZpbGVTeW5jKGNvdW50UGF0aCkudG9TdHJpbmcoXCJ1dGYtOFwiKSk7XG4gICAgICBpZiAoaXNOYU4oc2VxdWVuY2UpKSBzZXF1ZW5jZSA9IDE7XG4gICAgICBlbHNlIHNlcXVlbmNlICs9IDE7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgc2VxdWVuY2UgPSAxO1xuICAgIH1cbiAgICAvL1xuICAgIC8vIGlmIChpbmNyZW1lbnRWZXJzaW9uKSB7XG4gICAgLy8gICB2ZXJzaW9uID0gdmVyc2lvbiArIGAtJHtzZXF1ZW5jZX1gO1xuICAgIC8vICAgLy8gc2VxdWVuY2UgPSAxO1xuICAgIC8vIH1cblxuICAgIHRyeSB7XG4gICAgICBmb3IgKGNvbnN0IHBlZXIgb2YgcGVlcklkcykge1xuICAgICAgICBwYWNrYWdlQ29udHJhY3QocGVlciwgaW5wdXQsIG5hbWUsIHZlcnNpb24pO1xuICAgICAgICBpbnN0YWxsQ29udHJhY3QocGVlciwgbmFtZSk7XG4gICAgICAgIGFwcHJvdmVDb250cmFjdChcbiAgICAgICAgICBwZWVyLFxuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgcGVlciA9PT0gXCJvcmctYS1wZWVyLTBcIlxuICAgICAgICAgICAgPyBcInRscy1jYS1jZXJ0LnBlbVwiXG4gICAgICAgICAgICA6IFwib3JkZXJlci10bHMtY2EtY2VydC5wZW1cIixcbiAgICAgICAgICBzZXF1ZW5jZSxcbiAgICAgICAgICB2ZXJzaW9uLFxuICAgICAgICAgIGNvbGxlY3Rpb25zQ29uZmlnXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBmcy53cml0ZUZpbGVTeW5jKGNvdW50UGF0aCwgc2VxdWVuY2UudG9TdHJpbmcoKSk7XG4gICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgIGxvZy5lcnJvcihcIkVycm9yIGRlcGxveWluZyBjb250cmFjdDpcIiwgZXJyKTtcbiAgICB9XG4gICAgY29tbWl0Q2hhaW5jb2RlKG5hbWUsIHNlcXVlbmNlLCB2ZXJzaW9uLCBjb2xsZWN0aW9uc0NvbmZpZyk7XG4gIH0pO1xuXG5jb25zdCBnZXRDcnlwdG9NYXRlcmlhbCA9IG5ldyBDb21tYW5kKClcbiAgLm5hbWUoXCJnZXQtY3J5cHRvLW1hdGVyaWFsXCIpXG4gIC5kZXNjcmlwdGlvbihcImNvcGllcyB0aGUgY3J5cHRvIG1hdGVyaWFsIHRvIHRoZSBzZWxlY3RlZCBmb2xkZXJcIilcbiAgLm9wdGlvbihcIi0tZm9sZGVyIDxTdHJpbmc+XCIsIFwib3V0cHV0IGZvbGRlclwiLCBcImRvY2tlci9kb2NrZXItZGF0YVwiKVxuICAub3B0aW9uKFwiLS1vcmcgW1N0cmluZ11cIiwgXCJ0aGUgb3JnL3BlZXIgdG8gZXh0cmFjdCBmcm9tXCIsIFwib3JnLWFcIilcbiAgLmFjdGlvbihhc3luYyAob3B0aW9uczogYW55KSA9PiB7XG4gICAgY29uc3QgcGtnID0gSlNPTi5wYXJzZShcbiAgICAgIGZzLnJlYWRGaWxlU3luYyhwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgXCJwYWNrYWdlLmpzb25cIiksIFwidXRmLThcIilcbiAgICApO1xuXG4gICAgY29uc3QgdmVyc2lvbiA9IHBrZy52ZXJzaW9uO1xuXG4gICAgY29uc3QgbG9nID0gbG9nZ2VyLmZvcihcImdldC1jcnlwdG8tbWF0ZXJpYWxcIik7XG4gICAgbG9nLmRlYnVnKFxuICAgICAgYHJ1bm5pbmcgd2l0aCBvcHRpb25zOiAke0pTT04uc3RyaW5naWZ5KG9wdGlvbnMpfSBmb3IgJHtwa2cubmFtZX0gdmVyc2lvbiAke3ZlcnNpb259YFxuICAgICk7XG4gICAgY29uc3QgeyBmb2xkZXIsIG9yZyB9ID0gb3B0aW9ucztcbiAgICBleGVjU3luYyhgZG9ja2VyIGNwICR7b3JnfTovd2VhdmVyL2NsaWVudC8uICR7Zm9sZGVyfWAsIHtcbiAgICAgIGN3ZDogcHJvY2Vzcy5jd2QoKSxcbiAgICB9KTtcbiAgfSk7XG5cbmNvbnN0IGZhYnJpY0NtZCA9IG5ldyBDb21tYW5kKClcbiAgLm5hbWUoXCJmb3ItZmFicmljXCIpXG4gIC5jb21tYW5kKFwiZmFicmljXCIpXG4gIC5kZXNjcmlwdGlvbihcbiAgICBcImV4cG9zZXMgc2V2ZXJhbCBjb21tYW5kcyB0byBoZWxwIG1hbmFnZSB0aGUgZmFicmljIGluZnJhc3RydWN0dXJlXCJcbiAgKTtcblxuZmFicmljQ21kLmFkZENvbW1hbmQoY29tcGlsZUNvbW1hbmQpO1xuZmFicmljQ21kLmFkZENvbW1hbmQoZXh0cmFjdEluZGV4ZXMpO1xuZmFicmljQ21kLmFkZENvbW1hbmQoZW5zdXJlSW5mcmEpO1xuZmFicmljQ21kLmFkZENvbW1hbmQoZGVwbG95Q29udHJhY3QpO1xuZmFicmljQ21kLmFkZENvbW1hbmQoZ2V0Q3J5cHRvTWF0ZXJpYWwpO1xuZmFicmljQ21kLmFkZENvbW1hbmQoZXh0cmFjdENvbGxlY3Rpb25zKTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZmFicmljKCkge1xuICByZXR1cm4gZmFicmljQ21kO1xufVxuIl19
package/lib/cli-utils.cjs CHANGED
@@ -306,4 +306,4 @@ function compileWithTsconfigOverrides(tsconfigPath, overrides) {
306
306
  throw new Error("Emit was skipped (check diagnostics above).");
307
307
  }
308
308
  }
309
- //# sourceMappingURL=cli-utils.js.map
309
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NsaS11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFNQSxzREFlQztBQUVELGdFQVdDO0FBRUQsMENBYUM7QUFFRCwwQ0FJQztBQUVELDBDQW1CQztBQUVELHdDQXVDQztBQUVELDBDQW1CQztBQUVELDBEQXdDQztBQUVELG9CQUdDO0FBRUQsMENBaUNDO0FBRUQsd0NBK0JDO0FBRUQsd0RBa0NDO0FBMkJELDBEQVVDO0FBV0Qsb0VBOERDO0FBL1lELGlEQUF5QztBQUN6Qyx1Q0FBeUI7QUFDekIsMkNBQTZCO0FBQzdCLDJEQUF3RDtBQUN4RCw0REFBNEI7QUFFNUIsU0FBZ0IscUJBQXFCLENBQ25DLGdCQUF3QixtQkFBbUI7SUFFM0MsSUFBSSxDQUFDO1FBQ0gsTUFBTSxNQUFNLEdBQUcsSUFBQSx3QkFBUSxFQUNyQixrQkFBa0IsYUFBYSxpQ0FBaUMsQ0FDakU7YUFDRSxRQUFRLEVBQUU7YUFDVixJQUFJLEVBQUUsQ0FBQztRQUVWLE9BQU8sTUFBTSxLQUFLLEdBQUcsQ0FBQztJQUN4QixDQUFDO0lBQUMsT0FBTyxHQUFRLEVBQUUsQ0FBQztRQUNsQixPQUFPLENBQUMsS0FBSyxDQUFDLDZCQUE2QixFQUFFLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMxRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7QUFDSCxDQUFDO0FBRU0sS0FBSyxVQUFVLDBCQUEwQixDQUM5QyxnQkFBd0IsbUJBQW1CLEVBQzNDLFVBQWtCLElBQUksRUFDdEIsV0FBbUIsRUFBRTtJQUVyQixPQUFPLENBQUMscUJBQXFCLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztRQUM3QyxJQUFJLEVBQUUsUUFBUSxJQUFJLENBQUM7WUFBRSxNQUFNLElBQUksNkJBQWEsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1FBRTFF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LGlCQUFpQjtLQUM1QyxDQUFDLENBQUM7SUFFSCxNQUFNLE9BQU8sR0FBRyxvQkFBRSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2xELElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ25CLG9FQUFvRTtRQUNwRSxNQUFNLElBQUksS0FBSyxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVELE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNsQyxNQUFNLGVBQWUsR0FBRyxVQUFVLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQztJQUNyRCxJQUFJLGVBQWUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUMzQixNQUFNLElBQUksS0FBSyxDQUFDLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVELElBQUksVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzNCLE1BQU0sSUFBSSxLQUFLLENBQUMsNkNBQTZDLENBQUMsQ0FBQztJQUNqRSxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4ZWNTeW5jIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCAqIGFzIGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgSW50ZXJuYWxFcnJvciB9IGZyb20gXCJAZGVjYWYtdHMvZGItZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHRzIGZyb20gXCJ0eXBlc2NyaXB0XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBkaWRJbmZyYXN0cnVjdHVyZUJvb3QoXG4gIGNvbnRhaW5lck5hbWU6IHN0cmluZyA9IFwiYm9vdC1vcmctYy1wZWVyLTBcIlxuKTogYm9vbGVhbiB7XG4gIHRyeSB7XG4gICAgY29uc3Qgb3V0cHV0ID0gZXhlY1N5bmMoXG4gICAgICBgZG9ja2VyIGluc3BlY3QgJHtjb250YWluZXJOYW1lfSAtLWZvcm1hdD0ne3suU3RhdGUuRXhpdENvZGV9fSdgXG4gICAgKVxuICAgICAgLnRvU3RyaW5nKClcbiAgICAgIC50cmltKCk7XG5cbiAgICByZXR1cm4gb3V0cHV0ID09PSBcIjBcIjtcbiAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgaW5zcGVjdGluZyBjb250YWluZXI6XCIsIGVyci5tZXNzYWdlKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVuc3VyZUluZnJhc3RydWN0dXJlQm9vdGVkKFxuICBjb250YWluZXJOYW1lOiBzdHJpbmcgPSBcImJvb3Qtb3JnLWMtcGVlci0wXCIsXG4gIHRpbWVvdXQ6IG51bWJlciA9IDUwMDAsXG4gIGF0dGVtcHRzOiBudW1iZXIgPSAxMFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIHdoaWxlICghZGlkSW5mcmFzdHJ1Y3R1cmVCb290KGNvbnRhaW5lck5hbWUpKSB7XG4gICAgaWYgKC0tYXR0ZW1wdHMgPD0gMCkgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXCJleGNlZWRlZCBhbGxvd2VkIGF0dGVtcHRzXCIpO1xuXG4gICAgY29uc29sZS5sb2coXCJXYWl0aW5nIGZvciBpbmZyYXN0cnVjdHVyZSB0byBib290Li4uXCIpO1xuICAgIGF3YWl0IG5ldyBQcm9taXNlKChyKSA9PiBzZXRUaW1lb3V0KHIsIHRpbWVvdXQpKTsgLy8gV2FpdCBmb3IgNSBzZWNvbmRzIGJlZm9yZSByZXRyeWluZ1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYWNrYWdlQ29udHJhY3QoXG4gIGRvY2tlck5hbWU6IHN0cmluZyxcbiAgY29udHJhY3RGb2xkZXI6IHN0cmluZyxcbiAgY29udHJhY3ROYW1lOiBzdHJpbmcsXG4gIHZlcnNpb246IHN0cmluZyA9IFwiMS4wXCJcbik6IHZvaWQge1xuICBleGVjU3luYyhgZG9ja2VyIGV4ZWMgJHtkb2NrZXJOYW1lfSBub2RlIC4vd2VhdmVyL2xpYi9jb3JlL2NsaS5janMgcGFja2FnZS1jaGFpbmNvZGUgLWQgXFxcbiAgICAtLWNoYWluY29kZS1wYXRoIC4vd2VhdmVyL2NoYWluY29kZS8ke2NvbnRyYWN0Rm9sZGVyfSBcXFxuICAgIC0tbGFuZyBub2RlIFxcXG4gICAgLS1jaGFpbmNvZGUtb3V0cHV0IC93ZWF2ZXIvcGVlci8ke2NvbnRyYWN0TmFtZX0udGFyLmd6IFxcXG4gICAgLS1jaGFpbmNvZGUtbmFtZSAke2NvbnRyYWN0TmFtZX0gXFxcbiAgICAtLWNoYWluY29kZS12ZXJzaW9uICR7dmVyc2lvbn0gLXNcbiAgICBgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluc3RhbGxDb250cmFjdChkb2NrZXJOYW1lOiBzdHJpbmcsIGNvbnRyYWN0TmFtZTogc3RyaW5nKSB7XG4gIGV4ZWNTeW5jKFxuICAgIGBkb2NrZXIgZXhlYyAke2RvY2tlck5hbWV9IG5vZGUgLi93ZWF2ZXIvbGliL2NvcmUvY2xpLmNqcyBpbnN0YWxsLWNoYWluY29kZSAtZCAtcyAtLWNoYWluY29kZS1wYXRoIC4vd2VhdmVyL3BlZXIvJHtjb250cmFjdE5hbWV9LnRhci5nemBcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFwcHJvdmVDb250cmFjdChcbiAgZG9ja2VyTmFtZTogc3RyaW5nLFxuICBjb250cmFjdE5hbWU6IHN0cmluZyxcbiAgdGxzQ2VydE5hbWU6IHN0cmluZyxcbiAgc2VxdWVuY2U6IG51bWJlciA9IDEsXG4gIHZlcnNpb246IHN0cmluZyA9IFwiMS4wXCIsXG4gIGNvbGxlY3Rpb25zQ29uZmlnPzogc3RyaW5nXG4pIHtcbiAgY29uc3QgY29sbGVjdGlvbnNGbGFnID0gY29sbGVjdGlvbnNDb25maWdcbiAgICA/IGAgLS1jb2xsZWN0aW9ucy1jb25maWcgXCIke2NvbGxlY3Rpb25zQ29uZmlnfVwiYFxuICAgIDogXCJcIjtcbiAgZXhlY1N5bmMoYGRvY2tlciBleGVjICR7ZG9ja2VyTmFtZX0gbm9kZSAuL3dlYXZlci9saWIvY29yZS9jbGkuY2pzIGFwcHJvdmUtY2hhaW5jb2RlIC1kIC1zIFxcXG4gICAgLS1vcmRlcmVyLWFkZHJlc3Mgb3JnLWEtb3JkZXJlci0wOjcwMjEgXFxcbiAgICAtLWNoYW5uZWwtaWQgc2ltcGxlLWNoYW5uZWwgXFxcbiAgICAtLWNoYWluY29kZS1uYW1lICR7Y29udHJhY3ROYW1lfSBcXFxuICAgIC0tY2hhaW5jb2RlLXZlcnNpb24gJHt2ZXJzaW9ufSBcXFxuICAgIC0tc2VxdWVuY2UgJHtzZXF1ZW5jZX0ke2NvbGxlY3Rpb25zRmxhZ30gXFxcbiAgICAtLWVuYWJsZS10bHMgXFxcbiAgICAtLXRscy1jYS1jZXJ0LWZpbGUgL3dlYXZlci9wZWVyLyR7dGxzQ2VydE5hbWV9YCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZXBsb3lDb250cmFjdChcbiAgY29udHJhY3RGb2xkZXI6IHN0cmluZyxcbiAgY29udHJhY3ROYW1lOiBzdHJpbmcsXG4gIHZlcnNpb246IHN0cmluZyA9IFwiMS4wXCIsXG4gIHBlZXJzOiBzdHJpbmdbXSA9IFtcIm9yZy1hLXBlZXItMFwiLCBcIm9yZy1iLXBlZXItMFwiLCBcIm9yZy1jLXBlZXItMFwiXVxuKSB7XG4gIGxldCBzZXF1ZW5jZTogbnVtYmVyO1xuICBjb25zdCBjb3VudFBhdGggPSBwYXRoLnJlc29sdmUoXG4gICAgcGF0aC5qb2luKFxuICAgICAgYCR7X19kaXJuYW1lfWAsXG4gICAgICBcIi4uXCIsXG4gICAgICBcImludGVncmF0aW9uXCIsXG4gICAgICBcImNoYWluY29kZVRyYWNrZXJzXCIsXG4gICAgICBgJHtjb250cmFjdE5hbWV9LmNvdW50YFxuICAgIClcbiAgKTtcbiAgdHJ5IHtcbiAgICBzZXF1ZW5jZSA9IHBhcnNlSW50KGZzLnJlYWRGaWxlU3luYyhjb3VudFBhdGgpLnRvU3RyaW5nKFwidXRmLThcIikpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgIHNlcXVlbmNlID0gMTtcbiAgfVxuICBmcy53cml0ZUZpbGVTeW5jKGNvdW50UGF0aCwgc2VxdWVuY2UudG9TdHJpbmcoKSk7XG5cbiAgdHJ5IHtcbiAgICBmb3IgKGNvbnN0IHBlZXIgb2YgcGVlcnMpIHtcbiAgICAgIHBhY2thZ2VDb250cmFjdChwZWVyLCBjb250cmFjdEZvbGRlciwgY29udHJhY3ROYW1lLCB2ZXJzaW9uKTtcbiAgICAgIGluc3RhbGxDb250cmFjdChwZWVyLCBjb250cmFjdE5hbWUpO1xuICAgICAgYXBwcm92ZUNvbnRyYWN0KFxuICAgICAgICBwZWVyLFxuICAgICAgICBjb250cmFjdE5hbWUsXG4gICAgICAgIHBlZXIgPT09IFwib3JnLWEtcGVlci0wXCIgPyBcInRscy1jYS1jZXJ0LnBlbVwiIDogXCJvcmRlcmVyLXRscy1jYS1jZXJ0LnBlbVwiLFxuICAgICAgICBzZXF1ZW5jZSxcbiAgICAgICAgdmVyc2lvblxuICAgICAgKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgY29uc29sZS5sb2coXCJFcnJvciBkZXBsb3lpbmcgY29udHJhY3Q6XCIsIGVyci5tZXNzYWdlKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tbWl0Q2hhaW5jb2RlKFxuICBjb250cmFjdE5hbWU6IHN0cmluZyxcbiAgc2VxdWVuY2U6IG51bWJlciA9IDEsXG4gIHZlcnNpb246IHN0cmluZyA9IFwiMS4wXCIsXG4gIGNvbGxlY3Rpb25zQ29uZmlnPzogc3RyaW5nXG4pOiB2b2lkIHtcbiAgY29uc3QgY29sbGVjdGlvbnNGbGFnID0gY29sbGVjdGlvbnNDb25maWdcbiAgICA/IGAgLS1jb2xsZWN0aW9ucy1jb25maWcgXCIke2NvbGxlY3Rpb25zQ29uZmlnfVwiYFxuICAgIDogXCJcIjtcbiAgZXhlY1N5bmMoYGRvY2tlciBleGVjIG9yZy1hLXBlZXItMCBub2RlIC4vd2VhdmVyL2xpYi9jb3JlL2NsaS5janMgY29tbWl0LWNoYWluY29kZSAtZCAtcyBcXFxuICAgIC0tb3JkZXJlci1hZGRyZXNzIG9yZy1hLW9yZGVyZXItMDo3MDIxIFxcXG4gICAgLS1jaGFubmVsLWlkIHNpbXBsZS1jaGFubmVsIFxcXG4gICAgLS1jaGFpbmNvZGUtbmFtZSAke2NvbnRyYWN0TmFtZX0gXFxcbiAgICAtLWNoYWluY29kZS12ZXJzaW9uICR7dmVyc2lvbn0gXFxcbiAgICAtLXNlcXVlbmNlICR7c2VxdWVuY2V9JHtjb2xsZWN0aW9uc0ZsYWd9IFxcXG4gICAgLS1lbmFibGUtdGxzIFxcXG4gICAgLS10bHMtY2EtY2VydC1maWxlIC93ZWF2ZXIvcGVlci90bHMtY2EtY2VydC5wZW0gXFxcbiAgICAtLXBlZXItYWRkcmVzc2VzIG9yZy1hLXBlZXItMDo3MDMxLG9yZy1iLXBlZXItMDo3MDMyLG9yZy1jLXBlZXItMDo3MDMzIFxcXG4gICAgLS1wZWVyLXJvb3QtdGxzIC4vd2VhdmVyL3BlZXIvdGxzLWNhLWNlcnQucGVtLC4vd2VhdmVyL3BlZXIvb3JnLWItdGxzLWNhLWNlcnQucGVtLC4vd2VhdmVyL3BlZXIvb3JnLWMtdGxzLWNhLWNlcnQucGVtYCk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBlbnN1cmVDb250cmFjdFJlYWRpbmVzcyhcbiAgY29udHJhY3ROYW1lOiBzdHJpbmcsXG4gIGRvY2tlck5hbWU6IHN0cmluZyA9IFwib3JnLWEtcGVlci0wXCIsXG4gIHRsc0NlcnQ6IHN0cmluZyA9IFwidGxzLWNhLWNlcnQucGVtXCIsXG4gIGNvdW50ZXIgPSAwXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICB0cnkge1xuICAgIC8vIFByZXBhcmUgdGhlIEpTT04gYXJndW1lbnQgZm9yIHRoZSBjaGFpbmNvZGVcbiAgICBjb25zdCBjaGFpbmNvZGVBcmdzID0gSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgZnVuY3Rpb246IFwiaGVhbHRoY2hlY2tcIixcbiAgICAgIEFyZ3M6IFtdLFxuICAgIH0pO1xuXG4gICAgaWYgKGNvdW50ZXIgPiAxMCkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG4gICAgLy8gSW52b2tlIHRoZSBjaGFpbmNvZGVcbiAgICBjb25zdCByZXMgPSBleGVjU3luYyhcbiAgICAgIGBkb2NrZXIgZXhlYyAke2RvY2tlck5hbWV9IHBlZXIgY2hhaW5jb2RlIHF1ZXJ5IFxcXG4gICAgICAgIC1DIHNpbXBsZS1jaGFubmVsIFxcXG4gICAgICAgIC1uICR7Y29udHJhY3ROYW1lfSBcXFxuICAgICAgICAtYyAnJHtjaGFpbmNvZGVBcmdzfScgXFxcbiAgICAgICAgLS10bHMgLS1jYWZpbGUgL3dlYXZlci9wZWVyLyR7dGxzQ2VydH1gXG4gICAgKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IEpTT04ucGFyc2UocmVzLnRvU3RyaW5nKCkpO1xuXG4gICAgcmV0dXJuIHJlc3VsdC5oZWFsdGhjaGVjay50b1N0cmluZygpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICBjb25zb2xlLmxvZyhcIkNoYWluY29kZSBub3QgcmVhZHkuIFJldHJ5aW5nLi4uXCIpO1xuICAgIGF3YWl0IG5ldyBQcm9taXNlKChyKSA9PiBzZXRUaW1lb3V0KHIsIDUwMDApKTsgLy8gV2FpdCBmb3IgNSBzZWNvbmRzIGJlZm9yZSByZXRyeWluZ1xuICAgIHJldHVybiBlbnN1cmVDb250cmFjdFJlYWRpbmVzcyhcbiAgICAgIGNvbnRyYWN0TmFtZSxcbiAgICAgIGRvY2tlck5hbWUsXG4gICAgICB0bHNDZXJ0LFxuICAgICAgY291bnRlcisrXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdHJpbShzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnNvbGUud2FybihcIkNvbnRyYWN0IG5vdCB0cmltbWluZyByZXNwb25zZSBwcm9wZXJseTogXCIsIHN0cik7XG4gIHJldHVybiBzdHIudHJpbSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW52b2tlQ2hhaW5jb2RlKFxuICBjb250cmFjdE5hbWU6IHN0cmluZyxcbiAgZnVuY3Rpb25OYW1lOiBzdHJpbmcsXG4gIGFyZ3M6IGFueVtdLFxuICB0cmFuc2llbnQ6IGFueSA9IHt9LFxuICBkb2NrZXJOYW1lOiBzdHJpbmcgPSBcIm9yZy1hLXBlZXItMFwiLFxuICB0bHM6IHN0cmluZyA9IFwidGxzLWNhLWNlcnQucGVtXCJcbikge1xuICAvLyBQcmVwYXJlIHRoZSBKU09OIGFyZ3VtZW50IGZvciB0aGUgY2hhaW5jb2RlXG4gIGNvbnN0IGNoYWluY29kZUFyZ3MgPSBKU09OLnN0cmluZ2lmeSh7XG4gICAgZnVuY3Rpb246IGZ1bmN0aW9uTmFtZSxcbiAgICBBcmdzOiBhcmdzLFxuICB9KTtcblxuICBjb25zdCB0cmFuc2llbnREYXRhID0gSlNPTi5zdHJpbmdpZnkodHJhbnNpZW50KTtcbiAgY29uc3QgdHJhbnNpZW50U3RyaW5nID0gYC0tdHJhbnNpZW50ICcke3RyYW5zaWVudERhdGF9J2A7XG5cbiAgLy8gSW52b2tlIHRoZSBjaGFpbmNvZGVcbiAgcmV0dXJuIGV4ZWNTeW5jKFxuICAgIGBkb2NrZXIgZXhlYyAke2RvY2tlck5hbWV9IHBlZXIgY2hhaW5jb2RlIGludm9rZSBcXFxuICAgIC1DIHNpbXBsZS1jaGFubmVsIFxcXG4gICAgLW4gJHtjb250cmFjdE5hbWV9IFxcXG4gICAgLWMgJyR7Y2hhaW5jb2RlQXJnc30nIFxcXG4gICAgLS1wZWVyQWRkcmVzc2VzIG9yZy1hLXBlZXItMDo3MDMxIFxcXG4gICAgLS10bHNSb290Q2VydEZpbGVzIC93ZWF2ZXIvcGVlci90bHMtY2EtY2VydC5wZW0gXFxcbiAgICAtLXBlZXJBZGRyZXNzZXMgb3JnLWItcGVlci0wOjcwMzIgXFxcbiAgICAtLXRsc1Jvb3RDZXJ0RmlsZXMgL3dlYXZlci9wZWVyL29yZy1iLXRscy1jYS1jZXJ0LnBlbSBcXFxuICAgIC0tcGVlckFkZHJlc3NlcyBvcmctYy1wZWVyLTA6NzAzMyBcXFxuICAgIC0tdGxzUm9vdENlcnRGaWxlcyAvd2VhdmVyL3BlZXIvb3JnLWMtdGxzLWNhLWNlcnQucGVtIFxcXG4gICAgLW8gb3JnLWEtb3JkZXJlci0wOjcwMjEgXFxcbiAgICAtLXRscyAtLWNhZmlsZSAvd2VhdmVyL3BlZXIvJHt0bHN9IFxcXG4gICAgJHt0cmFuc2llbnQgPyB0cmFuc2llbnRTdHJpbmcgOiBcIlwifWBcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHF1ZXJ5Q2hhaW5jb2RlKFxuICBjb250cmFjdE5hbWU6IHN0cmluZyxcbiAgZnVuY3Rpb25OYW1lOiBzdHJpbmcsXG4gIGFyZ3M6IGFueVtdLFxuICBkb2NrZXJOYW1lOiBzdHJpbmcgPSBcIm9yZy1hLXBlZXItMFwiLFxuICB0bHM6IHN0cmluZyA9IFwidGxzLWNhLWNlcnQucGVtXCJcbikge1xuICB0cnkge1xuICAgIC8vIFByZXBhcmUgdGhlIEpTT04gYXJndW1lbnQgZm9yIHRoZSBjaGFpbmNvZGVcbiAgICBjb25zdCBjaGFpbmNvZGVBcmdzID0gSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgZnVuY3Rpb246IGZ1bmN0aW9uTmFtZSxcbiAgICAgIEFyZ3M6IGFyZ3MsXG4gICAgfSk7XG5cbiAgICAvLyBJbnZva2UgdGhlIGNoYWluY29kZVxuICAgIGNvbnN0IHJlcyA9IGV4ZWNTeW5jKFxuICAgICAgYGRvY2tlciBleGVjICR7ZG9ja2VyTmFtZX0gcGVlciBjaGFpbmNvZGUgcXVlcnkgXFxcbiAgICAgICAgLUMgc2ltcGxlLWNoYW5uZWwgXFxcbiAgICAgICAgLW4gJHtjb250cmFjdE5hbWV9IFxcXG4gICAgICAgIC1jICcke2NoYWluY29kZUFyZ3N9JyBcXFxuICAgICAgICAtLXRscyAtLWNhZmlsZSAke3Rsc31gXG4gICAgKTtcblxuICAgIGNvbnN0IHByb2Nlc3NlZCA9IHJlcy50b1N0cmluZygpO1xuICAgIGNvbnNvbGUubG9nKFwiQmxvY2tjaGFpbiByZWFkOlwiLCBwcm9jZXNzZWQpO1xuXG4gICAgcmV0dXJuIHByb2Nlc3NlZDtcbiAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICBjb25zb2xlLmxvZyhcIkZhaWxlZCB0byByZWFkIGJsb2NrY2hhaW5cIik7XG4gICAgdGhyb3cgZXJyO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnZva2VQcml2YXRlQ2hhaW5jb2RlKFxuICBjb250cmFjdE5hbWU6IHN0cmluZyxcbiAgZnVuY3Rpb25OYW1lOiBzdHJpbmcsXG4gIGFyZ3M6IGFueVtdLFxuICB0cmFuc2llbnQ6IGFueSA9IHt9LFxuICBkb2NrZXJOYW1lOiBzdHJpbmcgPSBcIm9yZy1hLXBlZXItMFwiLFxuICB0bHM6IHN0cmluZyA9IFwidGxzLWNhLWNlcnQucGVtXCJcbikge1xuICAvLyBQcmVwYXJlIHRoZSBKU09OIGFyZ3VtZW50IGZvciB0aGUgY2hhaW5jb2RlXG4gIGNvbnN0IGNoYWluY29kZUFyZ3MgPSBKU09OLnN0cmluZ2lmeSh7XG4gICAgZnVuY3Rpb246IGZ1bmN0aW9uTmFtZSxcbiAgICBBcmdzOiBhcmdzLFxuICB9KTtcblxuICBjb25zdCB0cmFuc2llbnREYXRhID0gSlNPTi5zdHJpbmdpZnkodHJhbnNpZW50KTtcbiAgY29uc3QgdHJhbnNpZW50U3RyaW5nID0gYC0tdHJhbnNpZW50ICcke3RyYW5zaWVudERhdGF9J2A7XG5cbiAgLy8gSW52b2tlIHRoZSBjaGFpbmNvZGVcbiAgcmV0dXJuIGV4ZWNTeW5jKFxuICAgIGBkb2NrZXIgZXhlYyAke2RvY2tlck5hbWV9IHBlZXIgY2hhaW5jb2RlIGludm9rZSBcXFxuICAgIC1DIHNpbXBsZS1jaGFubmVsIFxcXG4gICAgLW4gJHtjb250cmFjdE5hbWV9IFxcXG4gICAgLWMgJyR7Y2hhaW5jb2RlQXJnc30nIFxcXG4gICAgLS1wZWVyQWRkcmVzc2VzIG9yZy1hLXBlZXItMDo3MDMxIFxcXG4gICAgLS10bHNSb290Q2VydEZpbGVzIC93ZWF2ZXIvcGVlci90bHMtY2EtY2VydC5wZW0gXFxcbiAgICAtbyBvcmctYS1vcmRlcmVyLTA6NzAyMSBcXFxuICAgIC0tdGxzIC0tY2FmaWxlIC93ZWF2ZXIvcGVlci8ke3Rsc30gXFxcbiAgICAke3RyYW5zaWVudCA/IHRyYW5zaWVudFN0cmluZyA6IFwiXCJ9YFxuICApO1xuXG4gIC8vICAgLS1wZWVyQWRkcmVzc2VzIG9yZy1iLXBlZXItMDo3MDMyIFxcXG4gIC8vIC0tdGxzUm9vdENlcnRGaWxlcyAvd2VhdmVyL3BlZXIvb3JnLWItdGxzLWNhLWNlcnQucGVtIFxcXG4gIC8vIC0tcGVlckFkZHJlc3NlcyBvcmctYy1wZWVyLTA6NzAzMyBcXFxuICAvLyAtLXRsc1Jvb3RDZXJ0RmlsZXMgL3dlYXZlci9wZWVyL29yZy1jLXRscy1jYS1jZXJ0LnBlbSBcXFxufVxuXG5leHBvcnQgZW51bSBTY3JpcHRDb21tYW5kcyB7XG4gIFNUQVJUID0gXCJmYWJyaWMtY2hhaW5jb2RlLW5vZGUgc3RhcnQgXFxcbiAgICAgICAgICAtLWdycGMubWF4X3JlY2VpdmVfbWVzc2FnZV9sZW5ndGggJHtDSEFJTkNPREVfTUFYUkVDVk1TR1NJWkUtMTU3Mjg2NDB9IFxcXG4gICAgICAgICAgLS1ncnBjLm1heF9zZW5kX21lc3NhZ2VfbGVuZ3RoICR7Q0hBSU5DT0RFX01BWFNFTkRNU0dTSVpFLTE1NzI4NjQwfSBcIixcbiAgU1RBUlRfQ0NBQVMgPSBcImZhYnJpYy1jaGFpbmNvZGUtbm9kZSBzZXJ2ZXIgXFxcbiAgICAgICAgICAtLWNoYWluY29kZS1hZGRyZXNzPSRDSEFJTkNPREVfU0VSVkVSX0FERFJFU1MgXFxcbiAgICAgICAgICAtLWNoYWluY29kZS1pZD0kQ0hBSU5DT0RFX0lEIFxcXG4gICAgICAgICAgLS1jaGFpbmNvZGUtdGxzLWNlcnQtZmlsZT0ke0NIQUlOQ09ERV9UTFNfQ0VSVH0gXFxcbiAgICAgICAgICAtLWNoYWluY29kZS10bHMta2V5LWZpbGU9JHtDSEFJTkNPREVfVExTX0tFWX0gXFxcbiAgICAgICAgICAtLWdycGMubWF4X3JlY2VpdmVfbWVzc2FnZV9sZW5ndGggJHtDSEFJTkNPREVfTUFYUkVDVk1TR1NJWkUtMTU3Mjg2NDB9IFxcXG4gICAgICAgICAgLS1ncnBjLm1heF9zZW5kX21lc3NhZ2VfbGVuZ3RoICR7Q0hBSU5DT0RFX01BWFNFTkRNU0dTSVpFLTE1NzI4NjQwfSBcXFxuICAgICAgICAgIC0tdGxzLmVuYWJsZWQ9dHJ1ZVwiLFxuICBTVEFSVF9DQ0FBU19ERUJVRyA9IFwibm9kZSAtLWluc3BlY3Q9MC4wLjAuMDo5MjI5IC4vbm9kZV9tb2R1bGVzLy5iaW4vZmFicmljLWNoYWluY29kZS1ub2RlIHNlcnZlciBcXFxuICAgICAgICAgIC0tY2hhaW5jb2RlLWFkZHJlc3M9JENIQUlOQ09ERV9TRVJWRVJfQUREUkVTUyBcXFxuICAgICAgICAgIC0tY2hhaW5jb2RlLWlkPSRDSEFJTkNPREVfSUQgXFxcbiAgICAgICAgICAtLWNoYWluY29kZS10bHMtY2VydC1maWxlPSR7Q0hBSU5DT0RFX1RMU19DRVJUfSBcXFxuICAgICAgICAgIC0tY2hhaW5jb2RlLXRscy1rZXktZmlsZT0ke0NIQUlOQ09ERV9UTFNfS0VZfSBcXFxuICAgICAgICAgIC0tZ3JwYy5tYXhfcmVjZWl2ZV9tZXNzYWdlX2xlbmd0aCAke0NIQUlOQ09ERV9NQVhSRUNWTVNHU0laRS0xNTcyODY0MH0gXFxcbiAgICAgICAgICAtLWdycGMubWF4X3NlbmRfbWVzc2FnZV9sZW5ndGggJHtDSEFJTkNPREVfTUFYU0VORE1TR1NJWkUtMTU3Mjg2NDB9IFxcXG4gICAgICAgICAgLS10bHMuZW5hYmxlZD10cnVlXCIsXG4gIFNUQVJUX0RFQlVHID0gXCJub2RlIC0taW5zcGVjdD0wLjAuMC4wOjkyMjkgL3Vzci9sb2NhbC9zcmMvbm9kZV9tb2R1bGVzLy5iaW4vZmFicmljLWNoYWluY29kZS1ub2RlIHN0YXJ0IFxcXG4gICAgICAgICAgLS1ncnBjLm1heF9yZWNlaXZlX21lc3NhZ2VfbGVuZ3RoICR7Q0hBSU5DT0RFX01BWFJFQ1ZNU0dTSVpFLTE1NzI4NjQwfSBcXFxuICAgICAgICAgIC0tZ3JwYy5tYXhfc2VuZF9tZXNzYWdlX2xlbmd0aCAke0NIQUlOQ09ERV9NQVhTRU5ETVNHU0laRS0xNTcyODY0MH1cIixcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbnRyYWN0U3RhcnRDb21tYW5kKFxuICBkZWJ1ZzogYm9vbGVhbixcbiAgY2NhYXM6IGJvb2xlYW5cbik6IHN0cmluZyB7XG4gIGlmIChjY2Fhcykge1xuICAgIHJldHVybiBkZWJ1Z1xuICAgICAgPyBTY3JpcHRDb21tYW5kcy5TVEFSVF9DQ0FBU19ERUJVR1xuICAgICAgOiBTY3JpcHRDb21tYW5kcy5TVEFSVF9DQ0FBUztcbiAgfVxuICByZXR1cm4gZGVidWcgPyBTY3JpcHRDb21tYW5kcy5TVEFSVF9ERUJVRyA6IFNjcmlwdENvbW1hbmRzLlNUQVJUO1xufVxuXG5mdW5jdGlvbiBmb3JtYXREaWFnbm9zdGljcyhkaWFnczogcmVhZG9ubHkgdHMuRGlhZ25vc3RpY1tdKTogc3RyaW5nIHtcbiAgY29uc3QgaG9zdDogdHMuRm9ybWF0RGlhZ25vc3RpY3NIb3N0ID0ge1xuICAgIGdldENhbm9uaWNhbEZpbGVOYW1lOiAoZikgPT4gZixcbiAgICBnZXRDdXJyZW50RGlyZWN0b3J5OiB0cy5zeXMuZ2V0Q3VycmVudERpcmVjdG9yeSxcbiAgICBnZXROZXdMaW5lOiAoKSA9PiB0cy5zeXMubmV3TGluZSxcbiAgfTtcbiAgcmV0dXJuIHRzLmZvcm1hdERpYWdub3N0aWNzV2l0aENvbG9yQW5kQ29udGV4dChkaWFncywgaG9zdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21waWxlV2l0aFRzY29uZmlnT3ZlcnJpZGVzKFxuICB0c2NvbmZpZ1BhdGg6IHN0cmluZyxcbiAgb3ZlcnJpZGVzOiBQYXJ0aWFsPHRzLkNvbXBpbGVyT3B0aW9ucz5cbik6IHZvaWQge1xuICBjb25zdCBhYnNDb25maWdQYXRoID0gcGF0aC5pc0Fic29sdXRlKHRzY29uZmlnUGF0aClcbiAgICA/IHRzY29uZmlnUGF0aFxuICAgIDogcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksIHRzY29uZmlnUGF0aCk7XG5cbiAgLy8gMSkgUmVhZCB0aGUgdHNjb25maWcuanNvblxuICBjb25zdCBjb25maWdGaWxlID0gdHMucmVhZENvbmZpZ0ZpbGUoYWJzQ29uZmlnUGF0aCwgdHMuc3lzLnJlYWRGaWxlKTtcbiAgaWYgKGNvbmZpZ0ZpbGUuZXJyb3IpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZm9ybWF0RGlhZ25vc3RpY3MoW2NvbmZpZ0ZpbGUuZXJyb3JdKSk7XG4gIH1cblxuICAvLyAyKSBQYXJzZSBpdCAocmVzb2x2ZXMgXCJleHRlbmRzXCIsIGluY2x1ZGUvZXhjbHVkZS9maWxlcywgZXRjLilcbiAgY29uc3QgY29uZmlnRGlyID0gcGF0aC5kaXJuYW1lKGFic0NvbmZpZ1BhdGgpO1xuICBjb25zdCBwYXJzZWQgPSB0cy5wYXJzZUpzb25Db25maWdGaWxlQ29udGVudChcbiAgICBjb25maWdGaWxlLmNvbmZpZyxcbiAgICB0cy5zeXMsXG4gICAgY29uZmlnRGlyLFxuICAgIC8qZXhpc3RpbmdPcHRpb25zKi8gdW5kZWZpbmVkLFxuICAgIGFic0NvbmZpZ1BhdGhcbiAgKTtcblxuICBpZiAocGFyc2VkLmVycm9ycy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZm9ybWF0RGlhZ25vc3RpY3MocGFyc2VkLmVycm9ycykpO1xuICB9XG5cbiAgLy8gMykgT3ZlcnJpZGUgY29tcGlsZXIgb3B0aW9ucyBpbi1tZW1vcnlcbiAgY29uc3Qgb3B0aW9uczogdHMuQ29tcGlsZXJPcHRpb25zID0ge1xuICAgIC4uLnBhcnNlZC5vcHRpb25zLFxuICAgIC4uLm92ZXJyaWRlcyxcbiAgfTtcblxuICAvLyBPcHRpb25hbDogSWYgeW91IG92ZXJyaWRlIG91dERpci9yb290RGlyLCBlbnN1cmUgdGhleeKAmXJlIGFic29sdXRlXG4gIC8vIHRvIGF2b2lkIHN1cnByaXNlcyBkZXBlbmRpbmcgb24gQ1dELlxuICBpZiAob3B0aW9ucy5vdXREaXIpIG9wdGlvbnMub3V0RGlyID0gcGF0aC5yZXNvbHZlKGNvbmZpZ0Rpciwgb3B0aW9ucy5vdXREaXIpO1xuICBpZiAob3B0aW9ucy5yb290RGlyKVxuICAgIG9wdGlvbnMucm9vdERpciA9IHBhdGgucmVzb2x2ZShjb25maWdEaXIsIG9wdGlvbnMucm9vdERpcik7XG5cbiAgLy8gNCkgQ3JlYXRlIHByb2dyYW0gKyBlbWl0XG4gIGNvbnN0IHByb2dyYW0gPSB0cy5jcmVhdGVQcm9ncmFtKHtcbiAgICByb290TmFtZXM6IHBhcnNlZC5maWxlTmFtZXMsXG4gICAgb3B0aW9ucyxcbiAgICBwcm9qZWN0UmVmZXJlbmNlczogcGFyc2VkLnByb2plY3RSZWZlcmVuY2VzLFxuICB9KTtcblxuICBjb25zdCBwcmVFbWl0ID0gdHMuZ2V0UHJlRW1pdERpYWdub3N0aWNzKHByb2dyYW0pO1xuICBpZiAocHJlRW1pdC5sZW5ndGgpIHtcbiAgICAvLyBJZiB5b3Ugd2FudCBcInRyYW5zcGlsZSBhbnl3YXlcIiwgeW91IGNhbiBjaG9vc2UgdG8gbm90IHRocm93IGhlcmUuXG4gICAgdGhyb3cgbmV3IEVycm9yKGZvcm1hdERpYWdub3N0aWNzKHByZUVtaXQpKTtcbiAgfVxuXG4gIGNvbnN0IGVtaXRSZXN1bHQgPSBwcm9ncmFtLmVtaXQoKTtcbiAgY29uc3QgZW1pdERpYWdub3N0aWNzID0gZW1pdFJlc3VsdC5kaWFnbm9zdGljcyA/PyBbXTtcbiAgaWYgKGVtaXREaWFnbm9zdGljcy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZm9ybWF0RGlhZ25vc3RpY3MoZW1pdERpYWdub3N0aWNzKSk7XG4gIH1cblxuICBpZiAoZW1pdFJlc3VsdC5lbWl0U2tpcHBlZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkVtaXQgd2FzIHNraXBwZWQgKGNoZWNrIGRpYWdub3N0aWNzIGFib3ZlKS5cIik7XG4gIH1cbn1cbiJdfQ==
@@ -1355,4 +1355,4 @@ __decorate([
1355
1355
  ], FabricClientAdapter.prototype, "view", null);
1356
1356
  FabricClientAdapter.decoration();
1357
1357
  core_1.Adapter.setCurrent(constants_1.FabricFlavour);
1358
- //# sourceMappingURL=FabricClientAdapter.js.map
1358
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmFicmljQ2xpZW50QWRhcHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jbGllbnQvRmFicmljQ2xpZW50QWRhcHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsMkNBQTZCO0FBQzdCLHVEQUkrQjtBQUMvQiwyQ0FBdUM7QUFDdkMsb0RBQXNDO0FBQ3RDLHlFQUl3QztBQUN4QywrQ0FBMEQ7QUFNMUQsZ0VBVXFDO0FBQ3JDLG1EQUFtRTtBQUVuRSwrQ0FLcUI7QUFDckIsMkRBV2lDO0FBQ2pDLHlDQXFCd0I7QUFDeEIseURBQW9EO0FBQ3BELHVFQUE4RDtBQUk5RCx1RUFBZ0U7QUFDaEUsdUVBQWdFO0FBQ2hFLHlFQUFrRTtBQUNsRSxtREFNMEI7QUFFMUIsK0NBQXVEO0FBQ3ZELDRDQUFvQjtBQUNwQix5Q0FBdUM7QUFDdkMsMkRBQWlEO0FBWWpEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtERztBQUNILE1BQWEsbUJBQW9CLFNBQVEsY0FLeEM7SUFDQzs7T0FFRzthQUNZLFlBQU8sR0FBRyxJQUFJLFdBQVcsQ0FBQyxNQUFNLENBQUMsQUFBMUIsQ0FBMkI7YUFFbEMsZUFBVSxHQUFHLElBQUksbUNBQWdCLEVBQUUsQUFBekIsQ0FBMEI7YUFFbEMsUUFBRyxHQUFHLGlCQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLEFBQW5DLENBQW9DO0lBS3hEOzs7OztPQUtHO0lBQ0gsWUFBWSxNQUFrQixFQUFFLEtBQWM7UUFDNUMsS0FBSyxDQUNILE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLG9DQUF3QixFQUFFLE1BQU0sQ0FBQyxFQUNuRCx5QkFBYSxFQUNiLEtBQUssQ0FDTixDQUFDO1FBZGUsZUFBVSxHQUMzQixtQkFBbUIsQ0FBQyxVQUFVLENBQUM7SUFj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QU1rQixjQUFPOztpREF1Q2hDO0FBSUs7SUFGTCxJQUFBLGVBQUssR0FBRTtJQUNQLElBQUEsZUFBSyxHQUFFOzs2Q0FHa0IsY0FBTzs7c0RBZWhDO0FBV0s7SUFGTCxJQUFBLGVBQUssR0FBRTtJQUNQLElBQUEsZUFBSyxHQUFFOztxREFJa0IsY0FBTzs7K0NBZ0JoQztBQTRCSztJQUZMLElBQUEsZUFBSyxHQUFFO0lBQ1AsSUFBQSxlQUFLLEdBQUU7O3FFQU1rQixjQUFPOztpREF3Q2hDO0FBV2M7SUFGZCxJQUFBLGVBQUssR0FBRTtJQUNQLElBQUEsZUFBSyxHQUFFOztxREFJa0IsY0FBTzs7aURBOEJoQztBQTRCSztJQURMLElBQUEsZUFBSyxHQUFFOztpRUFHSSxDQUFDLG9CQUFELENBQUMsd0NBRWEsY0FBTzs7OENBd0NoQztBQWFLO0lBREwsSUFBQSxlQUFLLEdBQUU7OzZEQUtrQixjQUFPOzsrQ0F3QmhDO0FBd3hCSCxtQkFBbUIsQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUNqQyxjQUFPLENBQUMsVUFBVSxDQUFDLHlCQUFhLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBcIi4uL3NoYXJlZC9vdmVycmlkZXNcIjtcbmltcG9ydCB7XG4gIENvdWNoREJLZXlzLFxuICB0eXBlIE1hbmdvUXVlcnksXG4gIHR5cGUgVmlld1Jlc3BvbnNlLFxufSBmcm9tIFwiQGRlY2FmLXRzL2Zvci1jb3VjaGRiXCI7XG5pbXBvcnQgeyBDbGllbnQgfSBmcm9tIFwiQGdycGMvZ3JwYy1qc1wiO1xuaW1wb3J0ICogYXMgZ3JwYyBmcm9tIFwiQGdycGMvZ3JwYy1qc1wiO1xuaW1wb3J0IHtcbiAgTW9kZWwsXG4gIHR5cGUgTW9kZWxDb25zdHJ1Y3RvcixcbiAgdHlwZSBTZXJpYWxpemVyLFxufSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBkZWJ1ZywgZmluYWwsIExvZ2dpbmcgfSBmcm9tIFwiQGRlY2FmLXRzL2xvZ2dpbmdcIjtcbmltcG9ydCB7XG4gIHR5cGUgUGVlckNvbmZpZyxcbiAgdHlwZSBTZWdyZWdhdGVkTW9kZWwsXG4gIHR5cGUgTXNwRGV0YWlscyxcbn0gZnJvbSBcIi4uL3NoYXJlZC90eXBlc1wiO1xuaW1wb3J0IHtcbiAgY29ubmVjdCxcbiAgdHlwZSBDb25uZWN0T3B0aW9ucyxcbiAgR2F0ZXdheSxcbiAgTmV0d29yayxcbiAgUHJvcG9zYWxPcHRpb25zLFxuICBDb250cmFjdCBhcyBDb250cmFrdCxcbiAgdHlwZSBTaWduZXIsXG4gIEdhdGV3YXlFcnJvcixcbiAgRW5kb3JzZUVycm9yLFxufSBmcm9tIFwiQGh5cGVybGVkZ2VyL2ZhYnJpYy1nYXRld2F5XCI7XG5pbXBvcnQgeyBHYXRld2F5IGFzIExlZ2FjeUdhdGV3YXksIFdhbGxldHMgfSBmcm9tIFwiZmFicmljLW5ldHdvcmtcIjtcbmltcG9ydCB0eXBlIHsgRW5kb3JzZXIgfSBmcm9tIFwiZmFicmljLWNvbW1vblwiO1xuaW1wb3J0IHtcbiAgZ2V0SWRlbnRpdHksXG4gIGdldFNpZ25lcixcbiAgZ2V0Rmlyc3REaXJGaWxlTmFtZUNvbnRlbnQsXG4gIHJlYWRGaWxlIGFzIHJlYWRGc0ZpbGUsXG59IGZyb20gXCIuL2ZhYnJpYy1mc1wiO1xuaW1wb3J0IHtcbiAgQmFzZUVycm9yLFxuICBJbnRlcm5hbEVycm9yLFxuICBPcGVyYXRpb25LZXlzLFxuICBTZXJpYWxpemF0aW9uRXJyb3IsXG4gIEJ1bGtDcnVkT3BlcmF0aW9uS2V5cyxcbiAgTm90Rm91bmRFcnJvcixcbiAgQ29uZmxpY3RFcnJvcixcbiAgQmFkUmVxdWVzdEVycm9yLFxuICB0eXBlIFByaW1hcnlLZXlUeXBlLFxuICBWYWxpZGF0aW9uRXJyb3IsXG59IGZyb20gXCJAZGVjYWYtdHMvZGItZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHtcbiAgQ29udGV4dCxcbiAgQWRhcHRlcixcbiAgdHlwZSBBZGFwdGVyRmxhZ3MsXG4gIEF1dGhvcml6YXRpb25FcnJvcixcbiAgQ29ubmVjdGlvbkVycm9yLFxuICBGb3JiaWRkZW5FcnJvcixcbiAgTWlncmF0aW9uRXJyb3IsXG4gIE9ic2VydmVyRXJyb3IsXG4gIFBhZ2luZ0Vycm9yLFxuICBQZXJzaXN0ZW5jZUtleXMsXG4gIFF1ZXJ5RXJyb3IsXG4gIFJlcG9zaXRvcnksXG4gIFVuc3VwcG9ydGVkRXJyb3IsXG4gIFN0YXRlbWVudCxcbiAgdHlwZSBQcmVwYXJlZFN0YXRlbWVudCxcbiAgUGFnaW5hdG9yLFxuICBNYXliZUNvbnRleHR1YWxBcmcsXG4gIENvbnRleHR1YWxBcmdzLFxuICB0eXBlIFByZXBhcmVkTW9kZWwsXG4gIEFsbE9wZXJhdGlvbktleXMsXG59IGZyb20gXCJAZGVjYWYtdHMvY29yZVwiO1xuaW1wb3J0IHsgRmFicmljRmxhdm91ciB9IGZyb20gXCIuLi9zaGFyZWQvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBDbGllbnRTZXJpYWxpemVyIH0gZnJvbSBcIi4uL3NoYXJlZC9DbGllbnRTZXJpYWxpemVyXCI7XG5pbXBvcnQgeyBGYWJyaWNDbGllbnREaXNwYXRjaCB9IGZyb20gXCIuL0ZhYnJpY0NsaWVudERpc3BhdGNoXCI7XG4vLyBpbXBvcnQgeyBIU01TaWduZXJGYWN0b3J5Q3VzdG9tIH0gZnJvbSBcIi4vZmFicmljLWhzbVwiO1xuaW1wb3J0IHsgdHlwZSBDb25zdHJ1Y3RvciB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdGlvblwiO1xuaW1wb3J0IHsgRmFicmljQ2xpZW50U3RhdGVtZW50IH0gZnJvbSBcIi4vRmFicmljQ2xpZW50U3RhdGVtZW50XCI7XG5pbXBvcnQgeyBGYWJyaWNDbGllbnRQYWdpbmF0b3IgfSBmcm9tIFwiLi9GYWJyaWNDbGllbnRQYWdpbmF0b3JcIjtcbmltcG9ydCB7IEZhYnJpY0NsaWVudFJlcG9zaXRvcnkgfSBmcm9tIFwiLi9GYWJyaWNDbGllbnRSZXBvc2l0b3J5XCI7XG5pbXBvcnQge1xuICBFbmRvcnNlbWVudEVycm9yLFxuICBFbmRvcnNlbWVudFBvbGljeUVycm9yLFxuICBNdmNjUmVhZENvbmZsaWN0RXJyb3IsXG4gIFBoYW50b21SZWFkQ29uZmxpY3RFcnJvcixcbiAgVHJhbnNhY3Rpb25UaW1lb3V0RXJyb3IsXG59IGZyb20gXCIuLi9zaGFyZWQvZXJyb3JzXCI7XG5pbXBvcnQgeyBGYWJyaWNDbGllbnRGbGFncyB9IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgeyBEZWZhdWx0RmFicmljQ2xpZW50RmxhZ3MgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCBmcyBmcm9tIFwiZnNcIjtcbmltcG9ydCB7IENyeXB0b1V0aWxzIH0gZnJvbSBcIi4vY3J5cHRvXCI7XG5pbXBvcnQgeyBleHRyYWN0SWRzIH0gZnJvbSBcIi4vaWRzL2lkLWV4dHJhY3Rpb25cIjtcbmltcG9ydCB7IElkZW50aXR5IH0gZnJvbSBcIi4uL3NoYXJlZC9pbmRleFwiO1xuXG50eXBlIExlZ2FjeVBlZXJUYXJnZXQgPSB7XG4gIG1zcElkOiBzdHJpbmc7XG4gIHBlZXJFbmRwb2ludDogc3RyaW5nO1xuICBwZWVySG9zdEFsaWFzPzogc3RyaW5nO1xuICB0bHNDZXJ0Pzogc3RyaW5nIHwgQnVmZmVyO1xufTtcblxudHlwZSBMZWdhY3lQZWVyV2l0aE5hbWUgPSBMZWdhY3lQZWVyVGFyZ2V0ICYgeyBuYW1lOiBzdHJpbmcgfTtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQWRhcHRlciBmb3IgaW50ZXJhY3Rpbmcgd2l0aCBIeXBlcmxlZGdlciBGYWJyaWMgbmV0d29ya3NcbiAqIEBzdW1tYXJ5IFRoZSBGYWJyaWNBZGFwdGVyIGV4dGVuZHMgQ291Y2hEQkFkYXB0ZXIgdG8gcHJvdmlkZSBhIHNlYW1sZXNzIGludGVyZmFjZSBmb3IgaW50ZXJhY3Rpbmcgd2l0aCBIeXBlcmxlZGdlciBGYWJyaWMgbmV0d29ya3MuXG4gKiBJdCBoYW5kbGVzIGNvbm5lY3Rpb24gbWFuYWdlbWVudCwgdHJhbnNhY3Rpb24gc3VibWlzc2lvbiwgYW5kIENSVUQgb3BlcmF0aW9ucyBhZ2FpbnN0IEZhYnJpYyBjaGFpbmNvZGUuXG4gKiBAdGVtcGxhdGUgUGVlckNvbmZpZyAtIENvbmZpZ3VyYXRpb24gdHlwZSBmb3IgY29ubmVjdGluZyB0byBhIEZhYnJpYyBwZWVyXG4gKiBAdGVtcGxhdGUgRmFicmljRmxhZ3MgLSBGbGFncyBzcGVjaWZpYyB0byBGYWJyaWMgb3BlcmF0aW9uc1xuICogQHRlbXBsYXRlIENvbnRleHQ8RmFicmljRmxhZ3M+IC0gQ29udGV4dCB0eXBlIGNvbnRhaW5pbmcgRmFicmljLXNwZWNpZmljIGZsYWdzXG4gKiBAcGFyYW0gY29uZmlnIC0gQ29uZmlndXJhdGlvbiBmb3IgY29ubmVjdGluZyB0byBhIEZhYnJpYyBwZWVyXG4gKiBAcGFyYW0gYWxpYXMgLSBPcHRpb25hbCBhbGlhcyBmb3IgdGhlIGFkYXB0ZXIgaW5zdGFuY2VcbiAqIEBjbGFzcyBGYWJyaWNDbGllbnRBZGFwdGVyXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gQ3JlYXRlIGEgbmV3IEZhYnJpY0FkYXB0ZXIgaW5zdGFuY2VcbiAqIGNvbnN0IGNvbmZpZzogUGVlckNvbmZpZyA9IHtcbiAqICAgbXNwSWQ6ICdPcmcxTVNQJyxcbiAqICAgcGVlckVuZHBvaW50OiAnbG9jYWxob3N0OjcwNTEnLFxuICogICBjaGFubmVsTmFtZTogJ215Y2hhbm5lbCcsXG4gKiAgIGNoYWluY29kZU5hbWU6ICdteWNjJyxcbiAqICAgY29udHJhY3ROYW1lOiAnbXljb250cmFjdCcsXG4gKiAgIHRsc0NlcnRQYXRoOiAnL3BhdGgvdG8vdGxzL2NlcnQnLFxuICogICBjZXJ0RGlyZWN0b3J5UGF0aDogJy9wYXRoL3RvL2NlcnQvZGlyJyxcbiAqICAga2V5RGlyZWN0b3J5UGF0aDogJy9wYXRoL3RvL2tleS9kaXInXG4gKiB9O1xuICpcbiAqIGNvbnN0IGFkYXB0ZXIgPSBuZXcgRmFicmljQWRhcHRlcihjb25maWcsICdvcmcxLWFkYXB0ZXInKTtcbiAqXG4gKiAvLyBVc2UgdGhlIGFkYXB0ZXIgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgRmFicmljIG5ldHdvcmtcbiAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGFkYXB0ZXIucmVhZCgndXNlcnMnLCAndXNlcjEnLCBteVNlcmlhbGl6ZXIpO1xuICogYGBgXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IENsaWVudFxuICogICBwYXJ0aWNpcGFudCBGYWJyaWNBZGFwdGVyXG4gKiAgIHBhcnRpY2lwYW50IEdhdGV3YXlcbiAqICAgcGFydGljaXBhbnQgTmV0d29ya1xuICogICBwYXJ0aWNpcGFudCBDb250cmFjdFxuICogICBwYXJ0aWNpcGFudCBDaGFpbmNvZGVcbiAqXG4gKiAgIENsaWVudC0+PkZhYnJpY0FkYXB0ZXI6IGNyZWF0ZSh0YWJsZU5hbWUsIGlkLCBtb2RlbCwgdHJhbnNpZW50LCBzZXJpYWxpemVyKVxuICogICBGYWJyaWNBZGFwdGVyLT4+RmFicmljQWRhcHRlcjogc3VibWl0VHJhbnNhY3Rpb24oT3BlcmF0aW9uS2V5cy5DUkVBVEUsIFtzZXJpYWxpemVkTW9kZWxdLCB0cmFuc2llbnQpXG4gKiAgIEZhYnJpY0FkYXB0ZXItPj5HYXRld2F5OiBjb25uZWN0KClcbiAqICAgR2F0ZXdheS0+Pk5ldHdvcms6IGdldE5ldHdvcmsoY2hhbm5lbE5hbWUpXG4gKiAgIE5ldHdvcmstPj5Db250cmFjdDogZ2V0Q29udHJhY3QoY2hhaW5jb2RlTmFtZSwgY29udHJhY3ROYW1lKVxuICogICBGYWJyaWNBZGFwdGVyLT4+Q29udHJhY3Q6IHN1Ym1pdChhcGksIHByb3Bvc2FsT3B0aW9ucylcbiAqICAgQ29udHJhY3QtPj5DaGFpbmNvZGU6IGludm9rZVxuICogICBDaGFpbmNvZGUtLT4+Q29udHJhY3Q6IHJlc3BvbnNlXG4gKiAgIENvbnRyYWN0LS0+PkZhYnJpY0FkYXB0ZXI6IHJlc3VsdFxuICogICBGYWJyaWNBZGFwdGVyLT4+RmFicmljQWRhcHRlcjogZGVjb2RlKHJlc3VsdClcbiAqICAgRmFicmljQWRhcHRlci0+PkZhYnJpY0FkYXB0ZXI6IHNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoZGVjb2RlZFJlc3VsdClcbiAqICAgRmFicmljQWRhcHRlci0tPj5DbGllbnQ6IGRlc2VyaWFsaXplZFJlc3VsdFxuICovXG5leHBvcnQgY2xhc3MgRmFicmljQ2xpZW50QWRhcHRlciBleHRlbmRzIEFkYXB0ZXI8XG4gIFBlZXJDb25maWcsXG4gIENsaWVudCxcbiAgTWFuZ29RdWVyeSxcbiAgQ29udGV4dDxGYWJyaWNDbGllbnRGbGFncz5cbj4ge1xuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFN0YXRpYyB0ZXh0IGRlY29kZXIgZm9yIGNvbnZlcnRpbmcgVWludDhBcnJheSB0byBzdHJpbmdcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoXCJ1dGY4XCIpO1xuXG4gIHByaXZhdGUgc3RhdGljIHNlcmlhbGl6ZXIgPSBuZXcgQ2xpZW50U2VyaWFsaXplcigpO1xuXG4gIHByb3RlY3RlZCBzdGF0aWMgbG9nID0gTG9nZ2luZy5mb3IoRmFicmljQ2xpZW50QWRhcHRlcik7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNlcmlhbGl6ZXI6IFNlcmlhbGl6ZXI8YW55PiA9XG4gICAgRmFicmljQ2xpZW50QWRhcHRlci5zZXJpYWxpemVyO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhIG5ldyBGYWJyaWNBZGFwdGVyIGluc3RhbmNlXG4gICAqIEBzdW1tYXJ5IEluaXRpYWxpemVzIGEgbmV3IGFkYXB0ZXIgZm9yIGludGVyYWN0aW5nIHdpdGggYSBIeXBlcmxlZGdlciBGYWJyaWMgbmV0d29ya1xuICAgKiBAcGFyYW0ge1BlZXJDb25maWd9IGNvbmZpZyAtIENvbmZpZ3VyYXRpb24gZm9yIGNvbm5lY3RpbmcgdG8gYSBGYWJyaWMgcGVlclxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2FsaWFzXSAtIE9wdGlvbmFsIGFsaWFzIGZvciB0aGUgYWRhcHRlciBpbnN0YW5jZVxuICAgKi9cbiAgY29uc3RydWN0b3IoY29uZmlnOiBQZWVyQ29uZmlnLCBhbGlhcz86IHN0cmluZykge1xuICAgIHN1cGVyKFxuICAgICAgT2JqZWN0LmFzc2lnbih7fSwgRGVmYXVsdEZhYnJpY0NsaWVudEZsYWdzLCBjb25maWcpLFxuICAgICAgRmFicmljRmxhdm91cixcbiAgICAgIGFsaWFzXG4gICAgKTtcbiAgfVxuXG4gIG92ZXJyaWRlIFN0YXRlbWVudDxNIGV4dGVuZHMgTW9kZWw+KFxuICAgIG92ZXJyaWRlcz86IFBhcnRpYWw8QWRhcHRlckZsYWdzPlxuICApOiBTdGF0ZW1lbnQ8TSwgRmFicmljQ2xpZW50QWRhcHRlciwgYW55LCBNYW5nb1F1ZXJ5PiB7XG4gICAgcmV0dXJuIG5ldyBGYWJyaWNDbGllbnRTdGF0ZW1lbnQodGhpcywgb3ZlcnJpZGVzKTtcbiAgfVxuXG4gIFBhZ2luYXRvcjxNIGV4dGVuZHMgTW9kZWw+KFxuICAgIHF1ZXJ5OiBQcmVwYXJlZFN0YXRlbWVudDxhbnk+IHwgTWFuZ29RdWVyeSxcbiAgICBzaXplOiBudW1iZXIsXG4gICAgY2xheno6IENvbnN0cnVjdG9yPE0+XG4gICk6IFBhZ2luYXRvcjxNLCBhbnksIE1hbmdvUXVlcnk+IHtcbiAgICByZXR1cm4gbmV3IEZhYnJpY0NsaWVudFBhZ2luYXRvcih0aGlzLCBxdWVyeSwgc2l6ZSwgY2xhenopO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIGZsYWdzPE0gZXh0ZW5kcyBNb2RlbD4oXG4gICAgb3BlcmF0aW9uOiBPcGVyYXRpb25LZXlzIHwgc3RyaW5nLFxuICAgIG1vZGVsOiBDb25zdHJ1Y3RvcjxNPiB8IENvbnN0cnVjdG9yPE0+W10gfCB1bmRlZmluZWQsXG4gICAgZmxhZ3M6IFBhcnRpYWw8RmFicmljQ2xpZW50RmxhZ3M+LFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8RmFicmljQ2xpZW50RmxhZ3M+IHtcbiAgICBjb25zdCBtZXJnZWRGbGFncyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuY29uZmlnLCBmbGFncyk7XG4gICAgY29uc3QgZiA9IE9iamVjdC5hc3NpZ24oXG4gICAgICBhd2FpdCBzdXBlci5mbGFncyhvcGVyYXRpb24sIG1vZGVsLCBtZXJnZWRGbGFncywgLi4uYXJncylcbiAgICApO1xuICAgIHJldHVybiBmO1xuICB9XG5cbiAgb3ZlcnJpZGUgYXN5bmMgY29udGV4dDxNIGV4dGVuZHMgTW9kZWw+KFxuICAgIG9wZXJhdGlvbjogKCguLi5hcmdzOiBhbnlbXSkgPT4gYW55KSB8IEFsbE9wZXJhdGlvbktleXMsXG4gICAgb3ZlcnJpZGVzOiBQYXJ0aWFsPEZhYnJpY0NsaWVudEZsYWdzPixcbiAgICBtb2RlbDogQ29uc3RydWN0b3I8TT4gfCBDb25zdHJ1Y3RvcjxNPltdLFxuICAgIC4uLmFyZ3M6IE1heWJlQ29udGV4dHVhbEFyZzxDb250ZXh0PGFueT4+XG4gICk6IFByb21pc2U8Q29udGV4dDxGYWJyaWNDbGllbnRGbGFncz4+IHtcbiAgICBjb25zdCBsb2cgPSB0aGlzLmxvZy5mb3IodGhpcy5jb250ZXh0KTtcbiAgICBsb2cuc2lsbHkoXG4gICAgICBgY3JlYXRpbmcgbmV3IGNvbnRleHQgZm9yICR7b3BlcmF0aW9ufSBvcGVyYXRpb24gb24gJHttb2RlbCA/IChBcnJheS5pc0FycmF5KG1vZGVsKSA/IG1vZGVsLm1hcCgobSkgPT4gTW9kZWwudGFibGVOYW1lKG0pKSA6IE1vZGVsLnRhYmxlTmFtZShtb2RlbCkpIDogXCJub1wifSB0YWJsZSAke292ZXJyaWRlcyAmJiBPYmplY3Qua2V5cyhvdmVycmlkZXMpID8gT2JqZWN0LmtleXMob3ZlcnJpZGVzKS5sZW5ndGggOiBcIm5vXCJ9IHdpdGggZmxhZyBvdmVycmlkZXNgXG4gICAgKTtcbiAgICBsZXQgY3R4ID0gYXJncy5wb3AoKTtcbiAgICBpZiAodHlwZW9mIGN0eCAhPT0gXCJ1bmRlZmluZWRcIiAmJiAhKGN0eCBpbnN0YW5jZW9mIENvbnRleHQpKSB7XG4gICAgICBhcmdzLnB1c2goY3R4KTtcbiAgICAgIGN0eCA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBvdmVycmlkZXMgPSBjdHhcbiAgICAgID8gT2JqZWN0LmFzc2lnbih7fSwgY3R4LnRvT3ZlcnJpZGVzKCksIG92ZXJyaWRlcylcbiAgICAgIDogb3ZlcnJpZGVzO1xuICAgIGNvbnN0IGZsYWdzID0gYXdhaXQgdGhpcy5mbGFncyhcbiAgICAgIHR5cGVvZiBvcGVyYXRpb24gPT09IFwic3RyaW5nXCIgPyBvcGVyYXRpb24gOiBvcGVyYXRpb24ubmFtZSxcbiAgICAgIG1vZGVsLFxuICAgICAgb3ZlcnJpZGVzIGFzIFBhcnRpYWw8RmFicmljQ2xpZW50RmxhZ3M+LFxuICAgICAgLi4uWy4uLmFyZ3MsIGN0eF0uZmlsdGVyKEJvb2xlYW4pXG4gICAgKTtcblxuICAgIGlmIChjdHgpIHtcbiAgICAgIGlmICghKGN0eCBpbnN0YW5jZW9mIHRoaXMuQ29udGV4dCkpIHtcbiAgICAgICAgY29uc3QgbmV3Q3R4ID0gbmV3IHRoaXMuQ29udGV4dCgpLmFjY3VtdWxhdGUoe1xuICAgICAgICAgIC4uLmN0eFtcImNhY2hlXCJdLFxuICAgICAgICAgIC4uLmZsYWdzLFxuICAgICAgICAgIHBhcmVudENvbnRleHQ6IGN0eCxcbiAgICAgICAgfSkgYXMgYW55O1xuICAgICAgICBjdHguYWNjdW11bGF0ZSh7XG4gICAgICAgICAgY2hpbGRDb250ZXh0czogW1xuICAgICAgICAgICAgLi4uKGN0eC5nZXRPclVuZGVmaW5lZChcImNoaWxkQ29udGV4dHNcIikgfHwgW10pLFxuICAgICAgICAgICAgbmV3Q3R4LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbmV3Q3R4O1xuICAgICAgfVxuICAgICAgY29uc3QgY3VycmVudE9wID0gY3R4LmdldE9yVW5kZWZpbmVkKFwib3BlcmF0aW9uXCIpO1xuICAgICAgY29uc3QgY3VycmVudE1vZGVsID0gY3R4LmdldE9yVW5kZWZpbmVkKFwiYWZmZWN0ZWRUYWJsZXNcIik7XG4gICAgICBpZiAoXG4gICAgICAgICFjdXJyZW50T3AgfHxcbiAgICAgICAgY3VycmVudE9wICE9PSBvcGVyYXRpb24gfHxcbiAgICAgICAgKG1vZGVsICYmIG1vZGVsICE9PSBjdXJyZW50TW9kZWwpXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgbmV3Q3R4ID0gbmV3IHRoaXMuQ29udGV4dCgpLmFjY3VtdWxhdGUoe1xuICAgICAgICAgIC4uLmN0eFtcImNhY2hlXCJdLFxuICAgICAgICAgIC4uLmZsYWdzLFxuICAgICAgICAgIHBhcmVudENvbnRleHQ6IGN0eCxcbiAgICAgICAgfSkgYXMgYW55O1xuXG4gICAgICAgIGN0eC5hY2N1bXVsYXRlKHtcbiAgICAgICAgICBjaGlsZENvbnRleHRzOiBbXG4gICAgICAgICAgICAuLi4oY3R4LmdldE9yVW5kZWZpbmVkKFwiY2hpbGRDb250ZXh0c1wiKSB8fCBbXSksXG4gICAgICAgICAgICBuZXdDdHgsXG4gICAgICAgICAgXSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBuZXdDdHg7XG4gICAgICB9XG4gICAgICByZXR1cm4gY3R4LmFjY3VtdWxhdGUoZmxhZ3MpIGFzIGFueTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IHRoaXMuQ29udGV4dCgpLmFjY3VtdWxhdGUoe1xuICAgICAgLi4uZmxhZ3MsXG4gICAgfSkgYXMgYW55O1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBEZWNvZGVzIGEgVWludDhBcnJheSB0byBhIHN0cmluZ1xuICAgKiBAc3VtbWFyeSBDb252ZXJ0cyBiaW5hcnkgZGF0YSByZWNlaXZlZCBmcm9tIEZhYnJpYyB0byBhIHN0cmluZyB1c2luZyBVVEYtOCBlbmNvZGluZ1xuICAgKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGRhdGEgLSBUaGUgYmluYXJ5IGRhdGEgdG8gZGVjb2RlXG4gICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGRlY29kZWQgc3RyaW5nXG4gICAqL1xuICBkZWNvZGUoZGF0YTogVWludDhBcnJheSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEZhYnJpY0NsaWVudEFkYXB0ZXIuZGVjb2Rlci5kZWNvZGUoZGF0YSk7XG4gIH1cblxuICBvdmVycmlkZSByZXBvc2l0b3J5PFxuICAgIFIgZXh0ZW5kcyBSZXBvc2l0b3J5PFxuICAgICAgYW55LFxuICAgICAgQWRhcHRlcjxQZWVyQ29uZmlnLCBDbGllbnQsIE1hbmdvUXVlcnksIENvbnRleHQ8RmFicmljQ2xpZW50RmxhZ3M+PlxuICAgID4sXG4gID4oKTogQ29uc3RydWN0b3I8Uj4ge1xuICAgIHJldHVybiBGYWJyaWNDbGllbnRSZXBvc2l0b3J5IGFzIHVua25vd24gYXMgQ29uc3RydWN0b3I8Uj47XG4gIH1cblxuICBwcm90ZWN0ZWQgY3JlYXRlUHJlZml4PE0gZXh0ZW5kcyBNb2RlbD4oXG4gICAgY2xheno6IENvbnN0cnVjdG9yPE0+LFxuICAgIGlkOiBQcmltYXJ5S2V5VHlwZSxcbiAgICBtb2RlbDogUmVjb3JkPHN0cmluZywgYW55PixcbiAgICAuLi5hcmdzOiBNYXliZUNvbnRleHR1YWxBcmc8Q29udGV4dDxGYWJyaWNDbGllbnRGbGFncz4+XG4gICk6IFtDb25zdHJ1Y3RvcjxNPiwgUHJpbWFyeUtleVR5cGUsIFJlY29yZDxzdHJpbmcsIGFueT4sIC4uLmFueVtdLCBDb250ZXh0XSB7XG4gICAgY29uc3QgeyBjdHhBcmdzIH0gPSB0aGlzLmxvZ0N0eChhcmdzLCB0aGlzLmNyZWF0ZVByZWZpeCk7XG4gICAgY29uc3QgdGFibGVOYW1lID0gTW9kZWwudGFibGVOYW1lKGNsYXp6KTtcbiAgICBjb25zdCByZWNvcmQ6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgICByZWNvcmRbQ291Y2hEQktleXMuVEFCTEVdID0gdGFibGVOYW1lO1xuICAgIE9iamVjdC5hc3NpZ24ocmVjb3JkLCBtb2RlbCk7XG4gICAgcmV0dXJuIFtjbGF6eiwgaWQsIHJlY29yZCwgLi4uY3R4QXJnc107XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFByZXBhcmVzIG11bHRpcGxlIHJlY29yZHMgZm9yIGNyZWF0aW9uXG4gICAqIEBzdW1tYXJ5IEFkZHMgbmVjZXNzYXJ5IENvdWNoREIgZmllbGRzIHRvIG11bHRpcGxlIHJlY29yZHMgYmVmb3JlIGNyZWF0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZU5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgdGFibGVcbiAgICogQHBhcmFtIHtzdHJpbmdbXXxudW1iZXJbXX0gaWRzIC0gVGhlIElEcyBvZiB0aGUgcmVjb3Jkc1xuICAgKiBAcGFyYW0gbW9kZWxzIC0gVGhlIG1vZGVscyB0byBwcmVwYXJlXG4gICAqIEByZXR1cm4gQSB0dXBsZSBjb250YWluaW5nIHRoZSB0YWJsZU5hbWUsIGlkcywgYW5kIHByZXBhcmVkIHJlY29yZHNcbiAgICogQHRocm93cyB7SW50ZXJuYWxFcnJvcn0gSWYgaWRzIGFuZCBtb2RlbHMgYXJyYXlzIGhhdmUgZGlmZmVyZW50IGxlbmd0aHNcbiAgICovXG4gIHByb3RlY3RlZCBjcmVhdGVBbGxQcmVmaXg8TSBleHRlbmRzIE1vZGVsPihcbiAgICBjbGF6ejogQ29uc3RydWN0b3I8TT4sXG4gICAgaWRzOiBzdHJpbmdbXSB8IG51bWJlcltdLFxuICAgIG1vZGVsczogUmVjb3JkPHN0cmluZywgYW55PltdLFxuICAgIC4uLmFyZ3M6IE1heWJlQ29udGV4dHVhbEFyZzxDb250ZXh0PEZhYnJpY0NsaWVudEZsYWdzPj5cbiAgKSB7XG4gICAgY29uc3QgdGFibGVOYW1lID0gTW9kZWwudGFibGVOYW1lKGNsYXp6KTtcbiAgICBpZiAoaWRzLmxlbmd0aCAhPT0gbW9kZWxzLmxlbmd0aClcbiAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFwiSWRzIGFuZCBtb2RlbHMgbXVzdCBoYXZlIHRoZSBzYW1lIGxlbmd0aFwiKTtcbiAgICBjb25zdCB7IGN0eEFyZ3MgfSA9IHRoaXMubG9nQ3R4KGFyZ3MsIHRoaXMuY3JlYXRlQWxsUHJlZml4KTtcbiAgICBjb25zdCByZWNvcmRzID0gaWRzLm1hcCgoaWQsIGNvdW50KSA9PiB7XG4gICAgICBjb25zdCByZWNvcmQ6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgICAgIHJlY29yZFtDb3VjaERCS2V5cy5UQUJMRV0gPSB0YWJsZU5hbWU7XG4gICAgICBPYmplY3QuYXNzaWduKHJlY29yZCwgbW9kZWxzW2NvdW50XSk7XG4gICAgICByZXR1cm4gcmVjb3JkO1xuICAgIH0pO1xuICAgIHJldHVybiBbY2xhenosIGlkcywgcmVjb3JkcywgLi4uY3R4QXJnc107XG4gIH1cblxuICBwcm90ZWN0ZWQgdXBkYXRlQWxsUHJlZml4PE0gZXh0ZW5kcyBNb2RlbD4oXG4gICAgY2xheno6IENvbnN0cnVjdG9yPE0+LFxuICAgIGlkczogUHJpbWFyeUtleVR5cGVbXSxcbiAgICBtb2RlbHM6IFJlY29yZDxzdHJpbmcsIGFueT5bXSxcbiAgICAuLi5hcmdzOiBNYXliZUNvbnRleHR1YWxBcmc8Q29udGV4dDxGYWJyaWNDbGllbnRGbGFncz4+XG4gICkge1xuICAgIGNvbnN0IHRhYmxlTmFtZSA9IE1vZGVsLnRhYmxlTmFtZShjbGF6eik7XG4gICAgaWYgKGlkcy5sZW5ndGggIT09IG1vZGVscy5sZW5ndGgpXG4gICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcIklkcyBhbmQgbW9kZWxzIG11c3QgaGF2ZSB0aGUgc2FtZSBsZW5ndGhcIik7XG4gICAgY29uc3QgeyBjdHhBcmdzIH0gPSB0aGlzLmxvZ0N0eChhcmdzLCB0aGlzLnVwZGF0ZUFsbFByZWZpeCk7XG4gICAgY29uc3QgcmVjb3JkcyA9IGlkcy5tYXAoKCkgPT4ge1xuICAgICAgY29uc3QgcmVjb3JkOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG4gICAgICByZWNvcmRbQ291Y2hEQktleXMuVEFCTEVdID0gdGFibGVOYW1lO1xuICAgICAgcmV0dXJuIHJlY29yZDtcbiAgICB9KTtcbiAgICByZXR1cm4gW2NsYXp6LCBpZHMsIHJlY29yZHMsIC4uLmN0eEFyZ3NdO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIG11bHRpcGxlIHJlY29yZHMgaW4gYSBzaW5nbGUgdHJhbnNhY3Rpb25cbiAgICogQHN1bW1hcnkgU3VibWl0cyBhIHRyYW5zYWN0aW9uIHRvIGNyZWF0ZSBtdWx0aXBsZSByZWNvcmRzIGluIHRoZSBGYWJyaWMgbGVkZ2VyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZU5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgdGFibGUvY29sbGVjdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ1tdIHwgbnVtYmVyW119IGlkcyAtIEFycmF5IG9mIHJlY29yZCBpZGVudGlmaWVyc1xuICAgKiBAcGFyYW0ge0FycmF5PFJlY29yZDxzdHJpbmcsIGFueT4+fSBtb2RlbHMgLSBBcnJheSBvZiByZWNvcmQgZGF0YVxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IHRyYW5zaWVudCAtIFRyYW5zaWVudCBkYXRhIGZvciB0aGUgdHJhbnNhY3Rpb25cbiAgICogQHJldHVybiB7UHJvbWlzZTxBcnJheTxSZWNvcmQ8c3RyaW5nLCBhbnk+Pj59IFByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSBjcmVhdGVkIHJlY29yZHNcbiAgICovXG4gIG92ZXJyaWRlIGFzeW5jIGNyZWF0ZUFsbDxNIGV4dGVuZHMgTW9kZWw+KFxuICAgIGNsYXp6OiBDb25zdHJ1Y3RvcjxNPixcbiAgICBpZHM6IFByaW1hcnlLZXlUeXBlW10sXG4gICAgbW9kZWxzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+W10sXG4gICAgLi4uYXJnczogQ29udGV4dHVhbEFyZ3M8Q29udGV4dDxGYWJyaWNDbGllbnRGbGFncz4+XG4gICk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgYW55PltdPiB7XG4gICAgaWYgKGlkcy5sZW5ndGggIT09IG1vZGVscy5sZW5ndGgpXG4gICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcIklkcyBhbmQgbW9kZWxzIG11c3QgaGF2ZSB0aGUgc2FtZSBsZW5ndGhcIik7XG4gICAgLy9IRVJFIVxuICAgIGNvbnN0IGN0eEFyZ3MgPSBbLi4uKGFyZ3MgYXMgdW5rbm93biBhcyBhbnlbXSldO1xuICAgIGNvbnN0IHRyYW5zaWVudCA9IGN0eEFyZ3Muc2hpZnQoKSBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAgIGNvbnN0IHsgbG9nLCBjdHggfSA9IHRoaXMubG9nQ3R4KFxuICAgICAgY3R4QXJncyBhcyBDb250ZXh0dWFsQXJnczxDb250ZXh0PEZhYnJpY0NsaWVudEZsYWdzPj4sXG4gICAgICB0aGlzLmNyZWF0ZUFsbFxuICAgICk7XG4gICAgY29uc3QgdGFibGVOYW1lID0gTW9kZWwudGFibGVOYW1lKGNsYXp6KTtcblxuICAgIGxvZy5pbmZvKGBhZGRpbmcgJHtpZHMubGVuZ3RofSBlbnRyaWVzIHRvICR7dGFibGVOYW1lfSB0YWJsZWApO1xuICAgIGxvZy52ZXJib3NlKGBwa3M6ICR7aWRzfWApO1xuICAgIGNvbnN0IGhhc1RyYW5zaWVudCA9IHRyYW5zaWVudCAmJiBPYmplY3Qua2V5cyh0cmFuc2llbnQpLmxlbmd0aCA+IDA7XG4gICAgY29uc3QgbmVlZHNGdWxsUGF5bG9hZCA9XG4gICAgICBoYXNUcmFuc2llbnQgfHwgdGhpcy5zaG91bGRGb3JjZUdhdGV3YXlIeWRyYXRpb24oY3R4KTtcbiAgICBjb25zdCB0cmFuc2llbnRQYXlsb2FkID0gaGFzVHJhbnNpZW50ID8geyBbdGFibGVOYW1lXTogdHJhbnNpZW50IH0gOiB7fTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuc3VibWl0VHJhbnNhY3Rpb24oXG4gICAgICBjdHgsXG4gICAgICBCdWxrQ3J1ZE9wZXJhdGlvbktleXMuQ1JFQVRFX0FMTCxcbiAgICAgIFtcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgbW9kZWxzLm1hcCgobSkgPT4gdGhpcy5zZXJpYWxpemVyLnNlcmlhbGl6ZShtLCBjbGF6ei5uYW1lKSlcbiAgICAgICAgKSxcbiAgICAgIF0sXG4gICAgICB0cmFuc2llbnRQYXlsb2FkIGFzIGFueSxcbiAgICAgIHRoaXMuZ2V0RW5kb3JzaW5nT3JnYW5pemF0aW9ucyhjdHgpLFxuICAgICAgY2xhenoubmFtZVxuICAgICk7XG5cbiAgICBsZXQgcmVzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+W107XG4gICAgdHJ5IHtcbiAgICAgIHJlcyA9IEpTT04ucGFyc2UodGhpcy5kZWNvZGUocmVzdWx0KSkubWFwKChyOiBhbnkpID0+IEpTT04ucGFyc2UocikpO1xuICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgIHRocm93IG5ldyBTZXJpYWxpemF0aW9uRXJyb3IoZSBhcyBFcnJvcik7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdGhpcy5zaG91bGRSZWZyZXNoQWZ0ZXJXcml0ZShcbiAgICAgICAgY2xhenosXG4gICAgICAgIGN0eCxcbiAgICAgICAgbmVlZHNGdWxsUGF5bG9hZCxcbiAgICAgICAgcmVzWzBdW01vZGVsLnBrKGNsYXp6KSBhcyBzdHJpbmddIHx8IGlkc1swXVxuICAgICAgKVxuICAgICkge1xuICAgICAgcmV0dXJuIHRoaXMucmVhZEFsbChcbiAgICAgICAgY2xhenosXG4gICAgICAgIGV4dHJhY3RJZHMoXG4gICAgICAgICAgY2xhenosXG4gICAgICAgICAgbW9kZWxzLm1hcCgobSwgaSkgPT5cbiAgICAgICAgICAgIE1vZGVsLm1lcmdlKE9iamVjdC5hc3NpZ24oe30sIG0gYXMgYW55LCB0cmFuc2llbnRbaV0gfHwge30pLCByZXNbaV0pXG4gICAgICAgICAgKSxcbiAgICAgICAgICBpZHNcbiAgICAgICAgKSxcbiAgICAgICAgY3R4XG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiByZXM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJlYWRzIG11bHRpcGxlIHJlY29yZHMgaW4gYSBzaW5nbGUgdHJhbnNhY3Rpb25cbiAgICogQHN1bW1hcnkgU3VibWl0cyBhIHRyYW5zYWN0aW9uIHRvIHJlYWQgbXVsdGlwbGUgcmVjb3JkcyBmcm9tIHRoZSBGYWJyaWMgbGVkZ2VyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZU5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgdGFibGUvY29sbGVjdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ1tdIHwgbnVtYmVyW119IGlkcyAtIEFycmF5IG9mIHJlY29yZCBpZGVudGlmaWVycyB0byByZWFkXG4gICAqIEByZXR1cm4ge1Byb21pc2U8QXJyYXk8UmVjb3JkPHN0cmluZywgYW55Pj4+fSBQcm9taXNlIHJlc29sdmluZyB0byB0aGUgcmV0cmlldmVkIHJlY29yZHNcbiAgICovXG4gIG92ZXJyaWRlIGFzeW5jIHJlYWRBbGw8TSBleHRlbmRzIE1vZGVsPihcbiAgICBjbGF6ejogQ29uc3RydWN0b3I8TT4sXG4gICAgaWRzOiBQcmltYXJ5S2V5VHlwZVtdLFxuICAgIC4uLmFyZ3M6IENvbnRleHR1YWxBcmdzPENvbnRleHQ8RmFicmljQ2xpZW50RmxhZ3M+PlxuICApOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT5bXT4ge1xuICAgIGNvbnN0IHsgbG9nLCBjdHggfSA9IHRoaXMubG9nQ3R4KGFyZ3MsIHRoaXMucmVhZEFsbCk7XG4gICAgY29uc3QgdGFibGVOYW1lID0gTW9kZWwudGFibGVOYW1lKGNsYXp6KTtcbiAgICBsb2cuaW5mbyhgcmVhZGluZyAke2lkcy5sZW5ndGh9IGVudHJpZXMgdG8gJHt0YWJsZU5hbWV9IHRhYmxlYCk7XG4gICAgbG9nLnZlcmJvc2UoYHBrczogJHtpZHN9YCk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5ldmFsdWF0ZVRyYW5zYWN0aW9uKFxuICAgICAgY3R4LFxuICAgICAgQnVsa0NydWRPcGVyYXRpb25LZXlzLlJFQURfQUxMLFxuICAgICAgW0pTT04uc3RyaW5naWZ5KGlkcyldLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgY2xhenoubmFtZVxuICAgICk7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBKU09OLnBhcnNlKHRoaXMuZGVjb2RlKHJlc3VsdCkpLm1hcCgocjogYW55KSA9PiBKU09OLnBhcnNlKHIpKTtcbiAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICB0aHJvdyBuZXcgU2VyaWFsaXphdGlvbkVycm9yKGUgYXMgRXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVXBkYXRlcyBtdWx0aXBsZSByZWNvcmRzIGluIGEgc2luZ2xlIHRyYW5zYWN0aW9uXG4gICAqIEBzdW1tYXJ5IFN1Ym1pdHMgYSB0cmFuc2FjdGlvbiB0byB1cGRhdGUgbXVsdGlwbGUgcmVjb3JkcyBpbiB0aGUgRmFicmljIGxlZGdlclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHRhYmxlL2NvbGxlY3Rpb25cbiAgICogQHBhcmFtIHtzdHJpbmdbXSB8IG51bWJlcltdfSBpZHMgLSBBcnJheSBvZiByZWNvcmQgaWRlbnRpZmllcnNcbiAgICogQHBhcmFtIHtBcnJheTxSZWNvcmQ8c3RyaW5nLCBhbnk+Pn0gbW9kZWxzIC0gQXJyYXkgb2YgdXBkYXRlZCByZWNvcmQgZGF0YVxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IHRyYW5zaWVudCAtIFRyYW5zaWVudCBkYXRhIGZvciB0aGUgdHJhbnNhY3Rpb25cbiAgICogQHJldHVybiB7UHJvbWlzZTxBcnJheTxSZWNvcmQ8c3RyaW5nLCBhbnk+Pj59IFByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSB1cGRhdGVkIHJlY29yZHNcbiAgICovXG4gIG92ZXJyaWRlIGFzeW5jIHVwZGF0ZUFsbDxNIGV4dGVuZHMgTW9kZWw+KFxuICAgIGNsYXp6OiBDb25zdHJ1Y3RvcjxNPixcbiAgICBpZHM6IFByaW1hcnlLZXlUeXBlW10sXG4gICAgbW9kZWxzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+W10sXG4gICAgLi4uYXJnczogQ29udGV4dHVhbEFyZ3M8Q29udGV4dDxGYWJyaWNDbGllbnRGbGFncz4+XG4gICk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgYW55PltdPiB7XG4gICAgaWYgKGlkcy5sZW5ndGggIT09IG1vZGVscy5sZW5ndGgpXG4gICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcIklkcyBhbmQgbW9kZWxzIG11c3QgaGF2ZSB0aGUgc2FtZSBsZW5ndGhcIik7XG4gICAgY29uc3QgY3R4QXJncyA9IFsuLi4oYXJncyBhcyB1bmtub3duIGFzIGFueVtdKV07XG4gICAgY29uc3QgdHJhbnNpZW50ID0gY3R4QXJncy5zaGlmdCgpIGFzIFJlY29yZDxzdHJpbmcsIGFueT47XG4gICAgY29uc3QgeyBsb2csIGN0eCB9ID0gdGhpcy5sb2dDdHgoXG4gICAgICBjdHhBcmdzIGFzIENvbnRleHR1YWxBcmdzPENvbnRleHQ8RmFicmljQ2xpZW50RmxhZ3M+PixcbiAgICAgIHRoaXMudXBkYXRlQWxsXG4gICAgKTtcbiAgICBjb25zdCB0YWJsZU5hbWUgPSBNb2RlbC50YWJsZU5hbWUoY2xhenopO1xuICAgIGxvZy5pbmZvKGB1cGRhdGluZyAke2lkcy5sZW5ndGh9IGVudHJpZXMgdG8gJHt0YWJsZU5hbWV9IHRhYmxlYCk7XG4gICAgbG9nLnZlcmJvc2UoYHBrczogJHtpZHN9YCk7XG4gICAgY29uc3QgaGFzVHJhbnNpZW50ID0gdHJhbnNpZW50ICYmIE9iamVjdC5rZXlzKHRyYW5zaWVudCkubGVuZ3RoID4gMDtcbiAgICBjb25zdCBuZWVkc0Z1bGxQYXlsb2FkID1cbiAgICAgIGhhc1RyYW5zaWVudCB8fCB0aGlzLnNob3VsZEZvcmNlR2F0ZXdheUh5ZHJhdGlvbihjdHgpO1xuICAgIGNvbnN0IHRyYW5zaWVudFBheWxvYWQgPSBoYXNUcmFuc2llbnQgPyB7IFt0YWJsZU5hbWVdOiB0cmFuc2llbnQgfSA6IHt9O1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5zdWJtaXRUcmFuc2FjdGlvbihcbiAgICAgIGN0eCxcbiAgICAgIEJ1bGtDcnVkT3BlcmF0aW9uS2V5cy5VUERBVEVfQUxMLFxuICAgICAgW1xuICAgICAgICBKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICBtb2RlbHMubWFwKChtKSA9PiB0aGlzLnNlcmlhbGl6ZXIuc2VyaWFsaXplKG0sIGNsYXp6Lm5hbWUpKVxuICAgICAgICApLFxuICAgICAgXSxcbiAgICAgIHRyYW5zaWVudFBheWxvYWQgYXMgYW55LFxuICAgICAgdGhpcy5nZXRFbmRvcnNpbmdPcmdhbml6YXRpb25zKGN0eCksXG4gICAgICBjbGF6ei5uYW1lXG4gICAgKTtcblxuICAgIGxldCByZXM6IGFueTtcbiAgICB0cnkge1xuICAgICAgcmVzID0gSlNPTi5wYXJzZSh0aGlzLmRlY29kZShyZXN1bHQpKS5tYXAoKHI6IGFueSkgPT4gSlNPTi5wYXJzZShyKSk7XG4gICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgdGhyb3cgbmV3IFNlcmlhbGl6YXRpb25FcnJvcihlIGFzIEVycm9yKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zaG91bGRSZWZyZXNoQWZ0ZXJXcml0ZShjbGF6eiwgY3R4LCBuZWVkc0Z1bGxQYXlsb2FkLCBpZHNbMF0pKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZWFkQWxsKFxuICAgICAgICBjbGF6eixcbiAgICAgICAgZXh0cmFjdElkcyhcbiAgICAgICAgICBjbGF6eixcbiAgICAgICAgICBtb2RlbHMubWFwKChtLCBpKSA9PlxuICAgICAgICAgICAgTW9kZWwubWVyZ2UoT2JqZWN0LmFzc2lnbih7fSwgbSBhcyBhbnksIHRyYW5zaWVudFtpXSB8fCB7fSksIHJlc1tpXSlcbiAgICAgICAgICApLFxuICAgICAgICAgIGlkc1xuICAgICAgICApLFxuICAgICAgICBjdHhcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIERlbGV0ZXMgbXVsdGlwbGUgcmVjb3JkcyBpbiBhIHNpbmdsZSB0cmFuc2FjdGlvblxuICAgKiBAc3VtbWFyeSBTdWJtaXRzIGEgdHJhbnNhY3Rpb24gdG8gZGVsZXRlIG11bHRpcGxlIHJlY29yZHMgZnJvbSB0aGUgRmFicmljIGxlZGdlclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHRhYmxlL2NvbGxlY3Rpb25cbiAgICogQHBhcmFtIHtBcnJheTxzdHJpbmcgfCBudW1iZXIgfCBiaWdpbnQ+fSBpZHMgLSBBcnJheSBvZiByZWNvcmQgaWRlbnRpZmllcnMgdG8gZGVsZXRlXG4gICAqIEBwYXJhbSB7U2VyaWFsaXplcjxhbnk+fSBzZXJpYWxpemVyIC0gU2VyaWFsaXplciBmb3IgdGhlIG1vZGVsIGRhdGFcbiAgICogQHJldHVybiB7UHJvbWlzZTxBcnJheTxSZWNvcmQ8c3RyaW5nLCBhbnk+Pj59IFByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSBkZWxldGVkIHJlY29yZHNcbiAgICovXG4gIG92ZXJyaWRlIGFzeW5jIGRlbGV0ZUFsbDxNIGV4dGVuZHMgTW9kZWw+KFxuICAgIGNsYXp6OiBDb25zdHJ1Y3RvcjxNPixcbiAgICBpZHM6IFByaW1hcnlLZXlUeXBlW10sXG4gICAgLi4uYXJnczogQ29udGV4dHVhbEFyZ3M8Q29udGV4dDxGYWJyaWNDbGllbnRGbGFncz4+XG4gICk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgYW55PltdPiB7XG4gICAgY29uc3QgeyBsb2csIGN0eCwgY3R4QXJncyB9ID0gdGhpcy5sb2dDdHgoYXJncywgdGhpcy5kZWxldGVBbGwpO1xuICAgIGNvbnN0IHRhYmxlTmFtZSA9IE1vZGVsLnRhYmxlTmFtZShjbGF6eik7XG5cbiAgICBjb25zdCBuZWVkc0Z1bGxQYXlsb2FkID1cbiAgICAgIE1vZGVsLmlzVHJhbnNpZW50KGNsYXp6KSB8fCB0aGlzLnNob3VsZEZvcmNlR2F0ZXdheUh5ZHJhdGlvbihjdHgpO1xuICAgIGxldCByZXN1bHQ6IGFueTtcbiAgICBjb25zdCBzaG91bGRIeWRyYXRlID0gdGhpcy5zaG91bGRSZWZyZXNoQWZ0ZXJXcml0ZShcbiAgICAgIGNsYXp6LFxuICAgICAgY3R4LFxuICAgICAgbmVlZHNGdWxsUGF5bG9hZCxcbiAgICAgIGlkc1swXVxuICAgICk7XG4gICAgaWYgKHNob3VsZEh5ZHJhdGUpIHtcbiAgICAgIHJlc3VsdCA9IGF3YWl0IHRoaXMucmVhZEFsbChjbGF6eiwgaWRzLCAuLi5jdHhBcmdzKTtcbiAgICB9XG5cbiAgICBsb2cuaW5mbyhgZGVsZXRpbmcgJHtpZHMubGVuZ3RofSBlbnRyaWVzIHRvICR7dGFibGVOYW1lfSB0YWJsZWApO1xuICAgIGxvZy52ZXJib3NlKGBwa3M6ICR7aWRzfWApO1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuc3VibWl0VHJhbnNhY3Rpb24oXG4gICAgICBjdHgsXG4gICAgICBCdWxrQ3J1ZE9wZXJhdGlvbktleXMuREVMRVRFX0FMTCxcbiAgICAgIFtKU09OLnN0cmluZ2lmeShpZHMpXSxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHRoaXMuZ2V0RW5kb3JzaW5nT3JnYW5pemF0aW9ucyhjdHgpLFxuICAgICAgY2xhenoubmFtZVxuICAgICk7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBzaG91bGRIeWRyYXRlXG4gICAgICAgID8gcmVzdWx0XG4gICAgICAgIDogSlNPTi5wYXJzZSh0aGlzLmRlY29kZShyZXMpKS5tYXAoKHI6IGFueSkgPT4gSlNPTi5wYXJzZShyKSk7XG4gICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgdGhyb3cgbmV3IFNlcmlhbGl6YXRpb25FcnJvcihlIGFzIEVycm9yKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFByZXBhcmVzIGEgbW9kZWwgZm9yIHBlcnNpc3RlbmNlXG4gICAqIEBzdW1tYXJ5IENvbnZlcnRzIGEgbW9kZWwgaW5zdGFuY2UgaW50byBhIGZvcm1hdCBzdWl0YWJsZSBmb3IgZGF0YWJhc2Ugc3RvcmFnZSxcbiAgICogaGFuZGxpbmcgY29sdW1uIG1hcHBpbmcgYW5kIHNlcGFyYXRpbmcgdHJhbnNpZW50IHByb3BlcnRpZXNcbiAgICogQHRlbXBsYXRlIE0gLSBUaGUgbW9kZWwgdHlwZVxuICAgKiBAcGFyYW0ge019IG1vZGVsIC0gVGhlIG1vZGVsIGluc3RhbmNlIHRvIHByZXBhcmVcbiAgICogQHBhcmFtIHBrIC0gVGhlIHByaW1hcnkga2V5IHByb3BlcnR5IG5hbWVcbiAgICogQHJldHVybiBUaGUgcHJlcGFyZWQgZGF0YVxuICAgKi9cbiAgb3ZlcnJpZGUgcHJlcGFyZTxNIGV4dGVuZHMgTW9kZWw+KFxuICAgIG1vZGVsOiBNLFxuICAgIC4uLmFyZ3M6IENvbnRleHR1YWxBcmdzPENvbnRleHQ8RmFicmljQ2xpZW50RmxhZ3M+PlxuICApOiBTZWdyZWdhdGVkTW9kZWw8TT4gJiBQcmVwYXJlZE1vZGVsIHtcbiAgICBjb25zdCB7IGxvZywgY3R4IH0gPSB0aGlzLmxvZ0N0eChhcmdzLCB0aGlzLnByZXBhcmUpO1xuICAgIGNvbnN0IHNwbGl0ID0gTW9kZWwuc2VncmVnYXRlKG1vZGVsKTtcbiAgICBpZiAoKG1vZGVsIGFzIGFueSlbUGVyc2lzdGVuY2VLZXlzLk1FVEFEQVRBXSkge1xuICAgICAgbG9nLnNpbGx5KFxuICAgICAgICBgUGFzc2luZyBhbG9uZyBwZXJzaXN0ZW5jZSBtZXRhZGF0YSBmb3IgJHsobW9kZWwgYXMgYW55KVtQZXJzaXN0ZW5jZUtleXMuTUVUQURBVEFdfWBcbiAgICAgICk7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc3BsaXQubW9kZWwsIFBlcnNpc3RlbmNlS2V5cy5NRVRBREFUQSwge1xuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIHZhbHVlOiAobW9kZWwgYXMgYW55KVtQZXJzaXN0ZW5jZUtleXMuTUVUQURBVEFdLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgbWlycm9yTWV0YSA9IE1vZGVsLm1pcnJvcmVkQXQobW9kZWwpO1xuICAgIGlmIChtaXJyb3JNZXRhKSB7XG4gICAgICBjb25zdCBtaXJyb3JNc3AgPSBtaXJyb3JNZXRhLm1zcElkO1xuICAgICAgaWYgKCFtaXJyb3JNc3ApIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKGBObyBtaXJyb3IgTVNQIGNvdWxkIGJlIGZvdW5kYCk7XG4gICAgICBsZXQgbXNwcyA9IHRoaXMuZ2V0RW5kb3JzaW5nT3JnYW5pemF0aW9ucyhjdHgpIHx8IFtdO1xuICAgICAgbXNwcyA9IEFycmF5LmlzQXJyYXkobXNwcykgPyBtc3BzIDogW21zcHNdO1xuICAgICAgY29uc3QgbWVyZ2VkID0gWy4uLm5ldyBTZXQoWy4uLm1zcHMsIG1pcnJvck1zcF0pXTtcbiAgICAgIGN0eC5hY2N1bXVsYXRlKHtcbiAgICAgICAgZW5kb3JzaW5nT3JnczogbWVyZ2VkLFxuICAgICAgICBlbmRvcnNpbmdPcmdhbml6YXRpb25zOiBtZXJnZWQsXG4gICAgICAgIGxlZ2FjeTogdHJ1ZSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICByZWNvcmQ6IHNwbGl0Lm1vZGVsLFxuICAgICAgbW9kZWw6IHNwbGl0Lm1vZGVsLFxuICAgICAgaWQ6IG1vZGVsW01vZGVsLnBrKG1vZGVsLmNvbnN0cnVjdG9yIGFzIENvbnN0cnVjdG9yPE0+KV0gYXMgc3RyaW5nLFxuICAgICAgdHJhbnNpZW50OiBzcGxpdC50cmFuc2llbnQsXG4gICAgICBwcml2YXRlczogc3BsaXQucHJpdmF0ZXMsXG4gICAgICBzaGFyZWQ6IHNwbGl0LnNoYXJlZCxcbiAgICB9O1xuICB9XG5cbiAgb3ZlcnJpZGUgcmV2ZXJ0PE0gZXh0ZW5kcyBNb2RlbD4oXG4gICAgb2JqOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgIGNsYXp6OiBDb25zdHJ1Y3RvcjxNPixcbiAgICBpZDogUHJpbWFyeUtleVR5cGUsXG4gICAgdHJhbnNpZW50PzogUmVjb3JkPHN0cmluZywgYW55PixcbiAgICAuLi5hcmdzOiBDb250ZXh0dWFsQXJnczxDb250ZXh0PEZhYnJpY0NsaWVudEZsYWdzPj5cbiAgKTogTSB7XG4gICAgY29uc3QgeyBsb2csIGN0eCB9ID0gdGhpcy5sb2dDdHgoYXJncywgdGhpcy5yZXZlcnQpO1xuICAgIGlmIChcbiAgICAgIHRyYW5zaWVudCAmJlxuICAgICAgdGhpcy5zaG91bGRSZWJ1aWxkV2l0aFRyYW5zaWVudChcbiAgICAgICAgY3R4LFxuICAgICAgICBjdHguZ2V0T3JVbmRlZmluZWQoXCJvcGVyYXRpb25cIikgYXMgc3RyaW5nIHwgdW5kZWZpbmVkXG4gICAgICApXG4gICAgKSB7XG4gICAgICBsb2cudmVyYm9zZShcbiAgICAgICAgYHJlLWFkZGluZyB0cmFuc2llbnQgcHJvcGVydGllczogJHtPYmplY3Qua2V5cyh0cmFuc2llbnQpLmpvaW4oXCIsIFwiKX1gXG4gICAgICApO1xuICAgICAgT2JqZWN0LmVudHJpZXModHJhbnNpZW50IGFzIFJlY29yZDxzdHJpbmcsIGFueT4pXG4gICAgICAgIC5maWx0ZXIoKFssIHZdKSA9PiB0eXBlb2YgdiAhPT0gXCJ1bmRlZmluZWRcIilcbiAgICAgICAgLmZvckVhY2goKFtrZXksIHZhbF0pID0+IHtcbiAgICAgICAgICBpZiAoa2V5IGluIG9iaiAmJiAob2JqIGFzIGFueSlba2V5XSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgbG9nLndhcm4oXG4gICAgICAgICAgICAgIGBvdmVyd3JpdGluZyBleGlzdGluZyAke2tleX0uIGlmIHRoaXMgaXMgbm90IGEgZGVmYXVsdCB2YWx1ZSwgdGhpcyBtYXkgcG9zZSBhIHByb2JsZW1gXG4gICAgICAgICAgICApO1xuICAgICAgICAgIChvYmogYXMgTSlba2V5IGFzIGtleW9mIE1dID0gdmFsO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBuZXcgKGNsYXp6IGFzIENvbnN0cnVjdG9yPE0+KShvYmopO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgc2hvdWxkUmVidWlsZFdpdGhUcmFuc2llbnQoXG4gICAgY3R4OiBDb250ZXh0PEZhYnJpY0NsaWVudEZsYWdzPixcbiAgICBvcGVyYXRpb24/OiBzdHJpbmdcbiAgKTogYm9vbGVhbiB7XG4gICAgaWYgKCFjdHgpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoY3R4LmdldE9yVW5kZWZpbmVkKFwicmVidWlsZFdpdGhUcmFuc2llbnRcIikpIHJldHVybiB0cnVlO1xuICAgIGNvbnN0IGNoaWxkUmVidWlsZCA9XG4gICAgICB0eXBlb2YgKGN0eCBhcyBhbnkpLmdldEZyb21DaGlsZHJlbiA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgID8gKGN0eCBhcyBhbnkpLmdldEZyb21DaGlsZHJlbihcInJlYnVpbGRXaXRoVHJhbnNpZW50XCIpXG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgIGlmIChjaGlsZFJlYnVpbGQpIHJldHVybiB0cnVlO1xuICAgIGNvbnN0IHJlc29sdmVkT3AgPSB0aGlzLnJlc29sdmVPcGVyYXRpb24oY3R4LCBvcGVyYXRpb24pO1xuICAgIGlmICghcmVzb2x2ZWRPcCkgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IG9wID0gcmVzb2x2ZWRPcC50b1N0cmluZygpLnRvTG93ZXJDYXNlKCk7XG4gICAgcmV0dXJuIChcbiAgICAgIG9wLmluY2x1ZGVzKFwicmVhZFwiKSB8fFxuICAgICAgb3AuaW5jbHVkZXMoXCJmaW5kXCIpIHx8XG4gICAgICBvcC5pbmNsdWRlcyhcInF1ZXJ5XCIpIHx8XG4gICAgICBvcC5pbmNsdWRlcyhcInN0YXRlbWVudFwiKSB8fFxuICAgICAgb3AuaW5jbHVkZXMoXCJwYWdlXCIpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZU9wZXJhdGlvbihcbiAgICBjdHg6IENvbnRleHQ8RmFicmljQ2xpZW50RmxhZ3M+LFxuICAgIG9wZXJhdGlvbj86IHN0cmluZ1xuICApOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmIChvcGVyYXRpb24pIHJldHVybiBvcGVyYXRpb247XG4gICAgaWYgKHR5cGVvZiAoY3R4IGFzIGFueSkuZ2V0RnJvbUNoaWxkcmVuID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHJldHVybiAoY3R4IGFzIGFueSkuZ2V0RnJvbUNoaWxkcmVuKFwib3BlcmF0aW9uXCIpO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBzaG91bGRSZWZyZXNoQWZ0ZXJXcml0ZTxNIGV4dGVuZHMgTW9kZWw+KFxuICAgIGNsYXp6OiBDb25zdHJ1Y3RvcjxNPixcbiAgICBjdHg6IENvbnRleHQ8RmFicmljQ2xpZW50RmxhZ3M+LFxuICAgIGhhc1RyYW5zaWVudDogYm9vbGVhbixcbiAgICBpZD86IFByaW1hcnlLZXlUeXBlXG4gICk6IGJvb2xlYW4ge1xuICAgIGlmICghaGFzVHJhbnNpZW50KSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgcGsgPSBNb2RlbC5wayhjbGF6eik7XG4gICAgY29uc3QgY29tcG9zZWQgPSBNb2RlbC5jb21wb3NlZChjbGF6eiwgcGspO1xuICAgIGNvbnN0IGdlbmVyYXRlZCA9IE1vZGVsLmdlbmVyYXRlZChjbGF6eiwgcGspO1xuICAgIGNvbnN0IGhhc0lkID0gaWQgIT09IHVuZGVmaW5lZCAmJiBpZCAhPT0gbnVsbDtcbiAgICBpZiAoIWhhc0lkICYmIGNvbXBvc2VkKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoIWhhc0lkICYmIGdlbmVyYXRlZCkge1xuICAgICAgY3R4LmxvZ2dlci53YXJuKFxuICAgICAgICBgQ2Fubm90IHJlZnJlc2ggcmVjb3JkIHdpdGggcHJpdmF0ZSBnZW5lcmF0ZWQgcHJpbWFyeSBrZXlgXG4gICAgICApO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gaGFzSWQ7XG4gIH1cblxuICBwcml2YXRlIGdldEVuZG9yc2luZ09yZ2FuaXphdGlvbnMoXG4gICAgY3R4OiBDb250ZXh0PEZhYnJpY0NsaWVudEZsYWdzPlxuICApOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgZGlyZWN0ID1cbiAgICAgIGN0eC5nZXRPclVuZGVmaW5lZChcImVuZG9yc2luZ09yZ3NcIikgfHxcbiAgICAgIChjdHguZ2V0T3JVbmRlZmluZWQoXCJlbmRvcnNpbmdPcmdzXCIpIGFzIHN0cmluZ1tdIHwgdW5kZWZpbmVkKTtcbiAgICBpZiAoZGlyZWN0ICYmIGRpcmVjdC5sZW5ndGgpIHJldHVybiBkaXJlY3Q7XG4gICAgcmV0dXJuIChcbiAgICAgIChjdHguZ2V0RnJvbUNoaWxkcmVuKFwiZW5kb3JzaW5nT3Jnc1wiKSBhcyBzdHJpbmdbXSB8IHVuZGVmaW5lZCkgfHxcbiAgICAgIChjdHguZ2V0RnJvbUNoaWxkcmVuKFwiZW5kb3JzaW5nT3Jnc1wiKSBhcyBzdHJpbmdbXSB8IHVuZGVmaW5lZClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBzaG91bGRGb3JjZUdhdGV3YXlIeWRyYXRpb24oXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIGN0eDogQ29udGV4dDxGYWJyaWNDbGllbnRGbGFncz5cbiAgKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5jb25maWcuYWxsb3dHYXRld2F5T3ZlcnJpZGU7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgYSBzaW5nbGUgcmVjb3JkXG4gICAqIEBzdW1tYXJ5IFN1Ym1pdHMgYSB0cmFuc2FjdGlvbiB0byBjcmVhdGUgYSByZWNvcmQgaW4gdGhlIEZhYnJpYyBsZWRnZXJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhYmxlTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSB0YWJsZS9jb2xsZWN0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVtYmVyfSBpZCAtIFRoZSByZWNvcmQgaWRlbnRpZmllclxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IG1vZGVsIC0gVGhlIHJlY29yZCBkYXRhXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gdHJhbnNpZW50IC0gVHJhbnNpZW50IGRhdGEgZm9yIHRoZSB0cmFuc2FjdGlvblxuICAgKiBAcmV0dXJuIHtQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+fSBQcm9taXNlIHJlc29sdmluZyB0byB0aGUgY3JlYXRlZCByZWNvcmRcbiAgICovXG4gIEBkZWJ1ZygpXG4gIEBmaW5hbCgpXG4gIG92ZXJyaWRlIGFzeW5jIGNyZWF0ZTxNIGV4dGVuZHMgTW9kZWw+KFxuICAgIGNsYXp6OiBDb25zdHJ1Y3RvcjxNPixcbiAgICBpZDogUHJpbWFyeUtleVR5cGUsXG4gICAgbW9kZWw6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgdHJhbnNpZW50OiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge30sXG4gICAgLi4uYXJnczogQ29udGV4dHVhbEFyZ3M8Q29udGV4dDxGYWJyaWNDbGllbnRGbGFncz4+XG4gICk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgYW55Pj4ge1xuICAgIGNvbnN0IGN0eEFyZ3MgPSBbLi4uKGFyZ3MgYXMgdW5rbm93biBhcyBhbnlbXSldO1xuICAgIGNvbnN0IHsgbG9nLCBjdHggfSA9IHRoaXMubG9nQ3R4KFxuICAgICAgY3R4QXJncyBhcyBDb250ZXh0dWFsQXJnczxDb250ZXh0PEZhYnJpY0NsaWVudEZsYWdzPj4sXG4gICAgICB0aGlzLmNyZWF0ZVxuICAgICk7XG4gICAgY29uc3QgdGFibGVOYW1lID0gTW9kZWwudGFibGVOYW1lKGNsYXp6KTtcbiAgICBsb2cudmVyYm9zZShgYWRkaW5nIGVudHJ5IHRvICR7dGFibGVOYW1lfSB0YWJsZWApO1xuICAgIGxvZy5kZWJ1ZyhgcGs6ICR7aWR9YCk7XG4gICAgY29uc3QgaGFzVHJhbnNpZW50ID0gdHJhbnNpZW50ICYmIE9iamVjdC5rZXlzKHRyYW5zaWVudCkubGVuZ3RoID4gMDtcbiAgICBjb25zdCBuZWVkc0Z1bGxQYXlsb2FkID1cbiAgICAgIGhhc1RyYW5zaWVudCB8fCB0aGlzLnNob3VsZEZvcmNlR2F0ZXdheUh5ZHJhdGlvbihjdHgpO1xuICAgIGNvbnN0IHRyYW5zaWVudFBheWxvYWQgPSBoYXNUcmFuc2llbnQgPyB7IFt0YWJsZU5hbWVdOiB0cmFuc2llbnQgfSA6IHt9O1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuc3VibWl0VHJhbnNhY3Rpb24oXG4gICAgICBjdHgsXG4gICAgICBPcGVyYXRpb25LZXlzLkNSRUFURSxcbiAgICAgIFt0aGlzLnNlcmlhbGl6ZXIuc2VyaWFsaXplKG1vZGVsLCBjbGF6ei5uYW1lKV0sXG4gICAgICB0cmFuc2llbnRQYXlsb2FkIGFzIGFueSxcbiAgICAgIHRoaXMuZ2V0RW5kb3JzaW5nT3JnYW5pemF0aW9ucyhjdHgpLFxuICAgICAgY2xhenoubmFtZVxuICAgICk7XG4gICAgY29uc3QgZGVzZXJpYWxpemVkID0gdGhpcy5zZXJpYWxpemVyLmRlc2VyaWFsaXplKHRoaXMuZGVjb2RlKHJlc3VsdCkpO1xuICAgIGlmICh0aGlzLnNob3VsZFJlZnJlc2hBZnRlcldyaXRlKGNsYXp6LCBjdHgsIG5lZWRzRnVsbFBheWxvYWQsIGlkKSkge1xuICAgICAgcmV0dXJuIHRoaXMucmVhZChcbiAgICAgICAgY2xhenosXG4gICAgICAgIGV4dHJhY3RJZHMoXG4gICAgICAgICAgY2xhenosXG4gICAgICAgICAgTW9kZWwubWVyZ2UoXG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHt9LCBtb2RlbCwgdHJhbnNpZW50IHx8IHt9KSxcbiAgICAgICAgICAgIGRlc2VyaWFsaXplZCxcbiAgICAgICAgICAgIGNsYXp6XG4gICAgICAgICAgKSxcbiAgICAgICAgICBpZFxuICAgICAgICApLFxuICAgICAgICBjdHhcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBkZXNlcmlhbGl6ZWQ7XG4gIH1cblxuICBAZGVidWcoKVxuICBAZmluYWwoKVxuICBhc3luYyBoZWFsdGhjaGVjazxNIGV4dGVuZHMgTW9kZWw+KFxuICAgIGNsYXp6OiBDb25zdHJ1Y3RvcjxNPixcbiAgICAuLi5hcmdzOiBDb250ZXh0dWFsQXJnczxDb250ZXh0PEZhYnJpY0NsaWVudEZsYWdzPj5cbiAgKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+PiB7XG4gICAgY29uc3QgeyBsb2csIGN0eCB9ID0gdGhpcy5sb2dDdHgoYXJncywgdGhpcy5oZWFsdGhjaGVjayk7XG4gICAgY29uc3QgdGFibGVOYW1lID0gTW9kZWwudGFibGVOYW1lKGNsYXp6KTtcblxuICAgIGxvZy52ZXJib3NlKGByZWFkaW5nIGVudHJ5IGZyb20gJHt0YWJsZU5hbWV9IHRhYmxlYCk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5ldmFsdWF0ZVRyYW5zYWN0aW9uKFxuICAgICAgY3R4LFxuICAgICAgXCJoZWFsdGhjaGVja1wiLFxuICAgICAgW10sXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBjbGF6ei5uYW1lXG4gICAgKTtcbiAgICByZXR1cm4gSlNPTi5wYXJzZSh0aGlzLmRlY29kZShyZXN1bHQpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVhZHMgYSBzaW5nbGUgcmVjb3JkXG4gICAqIEBzdW1tYXJ5IEV2YWx1YXRlcyBhIHRyYW5zYWN0aW9uIHRvIHJlYWQgYSByZWNvcmQgZnJvbSB0aGUgRmFicmljIGxlZGdlclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHRhYmxlL2NvbGxlY3Rpb25cbiAgICogQHBhcmFtIHtzdHJpbmcgfCBudW1iZXJ9IGlkIC0gVGhlIHJlY29yZCBpZGVudGlmaWVyXG4gICAqIEByZXR1cm4ge1Byb21pc2U8UmVjb3JkPHN0cmluZywgYW55Pj59IFByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSByZXRyaWV2ZWQgcmVjb3JkXG4gICAqL1xuICBAZGVidWcoKVxuICBAZmluYWwoKVxuICBhc3luYyByZWFkPE0gZXh0ZW5kcyBNb2RlbD4oXG4gICAgY2xheno6IENvbnN0cnVjdG9yPE0+LFxuICAgIGlkOiBQcmltYXJ5S2V5VHlwZSxcbiAgICAuLi5hcmdzOiBDb250ZXh0dWFsQXJnczxDb250ZXh0PEZhYnJpY0NsaWVudEZsYWdzPj5cbiAgKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+PiB7XG4gICAgY29uc3QgeyBsb2csIGN0eCB9ID0gdGhpcy5sb2dDdHgoYXJncywgdGhpcy5yZWFkKTtcbiAgICBjb25zdCB0YWJsZU5hbWUgPSBNb2RlbC50YWJsZU5hbWUoY2xhenopO1xuXG4gICAgbG9nLnZlcmJvc2UoYHJlYWRpbmcgZW50cnkgZnJvbSAke3RhYmxlTmFtZX0gdGFibGVgKTtcbiAgICBsb2cuZGVidWcoYHBrOiAke2lkfWApO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZXZhbHVhdGVUcmFuc2FjdGlvbihcbiAgICAgIGN0eCxcbiAgICAgIE9wZXJhdGlvbktleXMuUkVBRCxcbiAgICAgIFtpZC50b1N0cmluZygpXSxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIGNsYXp6Lm5hbWVcbiAgICApO1xuICAgIHJldHVybiB0aGlzLnNlcmlhbGl6ZXIuZGVzZXJpYWxpemUodGhpcy5kZWNvZGUocmVzdWx0KSk7XG4gIH1cblxuICB1cGRhdGVQcmVmaXg8TSBleHRlbmRzIE1vZGVsPihcbiAgICBjbGF6ejogQ29uc3RydWN0b3I8TT4sXG4gICAgaWQ6IFByaW1hcnlLZXlUeXBlLFxuICAgIG1vZGVsOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgIC4uLmFyZ3M6IE1heWJlQ29udGV4dHVhbEFyZzxDb250ZXh0PEZhYnJpY0NsaWVudEZsYWdzPj5cbiAgKSB7XG4gICAgY29uc3QgdGFibGVOYW1lID0gTW9kZWwudGFibGVOYW1lKGNsYXp6KTtcbiAgICBjb25zdCB7IGN0eEFyZ3MgfSA9IHRoaXMubG9nQ3R4KGFyZ3MsIHRoaXMudXBkYXRlUHJlZml4KTtcbiAgICBjb25zdCByZWNvcmQ6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgICByZWNvcmRbQ291Y2hEQktleXMuVEFCTEVdID0gdGFibGVOYW1lO1xuICAgIC8vIHJlY29yZFtDb3VjaERCS2V5cy5JRF0gPSB0aGlzLmdlbmVyYXRlSWQodGFibGVOYW1lLCBpZCk7XG4gICAgT2JqZWN0LmFzc2lnbihyZWNvcmQsIG1vZGVsKTtcbiAgICByZXR1cm4gW2NsYXp6LCBpZCwgcmVjb3JkLCAuLi5jdHhBcmdzXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVXBkYXRlcyBhIHNpbmdsZSByZWNvcmRcbiAgICogQHN1bW1hcnkgU3VibWl0cyBhIHRyYW5zYWN0aW9uIHRvIHVwZGF0ZSBhIHJlY29yZCBpbiB0aGUgRmFicmljIGxlZGdlclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHRhYmxlL2NvbGxlY3Rpb25cbiAgICogQHBhcmFtIHtzdHJpbmcgfCBudW1iZXJ9IGlkIC0gVGhlIHJlY29yZCBpZGVudGlmaWVyXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gbW9kZWwgLSBUaGUgdXBkYXRlZCByZWNvcmQgZGF0YVxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IHRyYW5zaWVudCAtIFRyYW5zaWVudCBkYXRhIGZvciB0aGUgdHJhbnNhY3Rpb25cbiAgICogQHJldHVybiB7UHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+Pn0gUHJvbWlzZSByZXNvbHZpbmcgdG8gdGhlIHVwZGF0ZWQgcmVjb3JkXG4gICAqL1xuICBAZGVidWcoKVxuICBAZmluYWwoKVxuICBhc3luYyB1cGRhdGU8TSBleHRlbmRzIE1vZGVsPihcbiAgICBjbGF6ejogQ29uc3RydWN0b3I8TT4sXG4gICAgaWQ6IFByaW1hcnlLZXlUeXBlLFxuICAgIG1vZGVsOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgIHRyYW5zaWVudDogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9LFxuICAgIC4uLmFyZ3M6IENvbnRleHR1YWxBcmdzPENvbnRleHQ8RmFicmljQ2xpZW50RmxhZ3M+PlxuICApOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+IHtcbiAgICBjb25zdCBjdHhBcmdzID0gWy4uLihhcmdzIGFzIHVua25vd24gYXMgYW55W10pXTtcbiAgICBjb25zdCB7IGxvZywgY3R4IH0gPSB0aGlzLmxvZ0N0eChcbiAgICAgIGN0eEFyZ3MgYXMgQ29udGV4dHVhbEFyZ3M8Q29udGV4dDxGYWJyaWNDbGllbnRGbGFncz4+LFxuICAgICAgdGhpcy51cGRhdGVcbiAgICApO1xuICAgIGxvZy5pbmZvKGBDTElFTlQgVVBEQVRFIGNsYXNzIDogJHt0eXBlb2YgY2xhenp9YCk7XG4gICAgY29uc3QgdGFibGVOYW1lID0gTW9kZWwudGFibGVOYW1lKGNsYXp6KTtcbiAgICBsb2cudmVyYm9zZShgdXBkYXRpbmcgZW50cnkgdG8gJHt0YWJsZU5hbWV9IHRhYmxlYCk7XG4gICAgbG9nLmRlYnVnKGBwazogJHtpZH1gKTtcbiAgICBjb25zdCBoYXNUcmFuc2llbnQgPSB0cmFuc2llbnQgJiYgT2JqZWN0LmtleXModHJhbnNpZW50KS5sZW5ndGggPiAwO1xuICAgIGNvbnN0IG5lZWRzRnVsbFBheWxvYWQgPVxuICAgICAgaGFzVHJhbnNpZW50IHx8IHRoaXMuc2hvdWxkRm9yY2VHYXRld2F5SHlkcmF0aW9uKGN0eCk7XG4gICAgY29uc3QgdHJhbnNpZW50UGF5bG9hZCA9IGhhc1RyYW5zaWVudCA/IHsgW3RhYmxlTmFtZV06IHRyYW5zaWVudCB9IDoge307XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5zdWJtaXRUcmFuc2FjdGlvbihcbiAgICAgIGN0eCxcbiAgICAgIE9wZXJhdGlvbktleXMuVVBEQVRFLFxuICAgICAgW3RoaXMuc2VyaWFsaXplci5zZXJpYWxpemUobW9kZWwsIGNsYXp6Lm5hbWUgfHwgY2xhenopXSwgLy8gVE9ETyBzaG91bGQgYmUgcmVjZXZpbmcgY2xhc3MgYnV0IGlzIHJlY2VpdmluZyBzdHJpbmdcbiAgICAgIHRyYW5zaWVudFBheWxvYWQgYXMgYW55LFxuICAgICAgdGhpcy5nZXRFbmRvcnNpbmdPcmdhbml6YXRpb25zKGN0eCksXG4gICAgICBjbGF6ei5uYW1lXG4gICAgKTtcbiAgICBjb25zdCBkZXNlcmlhbGl6ZWQgPSB0aGlzLnNlcmlhbGl6ZXIuZGVzZXJpYWxpemUodGhpcy5kZWNvZGUocmVzdWx0KSk7XG4gICAgaWYgKHRoaXMuc2hvdWxkUmVmcmVzaEFmdGVyV3JpdGUoY2xhenosIGN0eCwgbmVlZHNGdWxsUGF5bG9hZCwgaWQpKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZWFkKFxuICAgICAgICBjbGF6eixcbiAgICAgICAgZXh0cmFjdElkcyhcbiAgICAgICAgICBjbGF6eixcbiAgICAgICAgICBNb2RlbC5tZXJnZShcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oe30sIG1vZGVsLCB0cmFuc2llbnQgfHwge30pLFxuICAgICAgICAgICAgZGVzZXJpYWxpemVkLFxuICAgICAgICAgICAgY2xhenpcbiAgICAgICAgICApLFxuICAgICAgICAgIGlkXG4gICAgICAgICksXG4gICAgICAgIGN0eFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGRlc2VyaWFsaXplZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRGVsZXRlcyBhIHNpbmdsZSByZWNvcmRcbiAgICogQHN1bW1hcnkgU3VibWl0cyBhIHRyYW5zYWN0aW9uIHRvIGRlbGV0ZSBhIHJlY29yZCBmcm9tIHRoZSBGYWJyaWMgbGVkZ2VyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZU5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgdGFibGUvY29sbGVjdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bWJlcn0gaWQgLSBUaGUgcmVjb3JkIGlkZW50aWZpZXIgdG8gZGVsZXRlXG4gICAqIEByZXR1cm4ge1Byb21pc2U8UmVjb3JkPHN0cmluZywgYW55Pj59IFByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSBkZWxldGVkIHJlY29yZFxuICAgKi9cbiAgQGRlYnVnKClcbiAgQGZpbmFsKClcbiAgb3ZlcnJpZGUgYXN5bmMgZGVsZXRlPE0gZXh0ZW5kcyBNb2RlbD4oXG4gICAgY2xheno6IENvbnN0cnVjdG9yPE0+LFxuICAgIGlkOiBQcmltYXJ5S2V5VHlwZSxcbiAgICAuLi5hcmdzOiBDb250ZXh0dWFsQXJnczxDb250ZXh0PEZhYnJpY0NsaWVudEZsYWdzPj5cbiAgKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+PiB7XG4gICAgY29uc3QgeyBsb2csIGN0eCB9ID0gdGhpcy5sb2dDdHgoYXJncywgdGhpcy5kZWxldGUpO1xuICAgIGNvbnN0IHRhYmxlTmFtZSA9IE1vZGVsLnRhYmxlTmFtZShjbGF6eik7XG4gICAgY29uc3QgbmVlZHNGdWxsUGF5bG9hZCA9XG4gICAgICBNb2RlbC5pc1RyYW5zaWVudChjbGF6eikgfHwgdGhpcy5zaG91bGRGb3JjZUdhdGV3YXlIeWRyYXRpb24oY3R4KTtcbiAgICBsZXQgcmVzdWx0OiBhbnk7XG4gICAgY29uc3Qgc2hvdWxkSHlkcmF0ZSA9IHRoaXMuc2hvdWxkUmVmcmVzaEFmdGVyV3JpdGUoXG4gICAgICBjbGF6eixcbiAgICAgIGN0eCxcbiAgICAgIG5lZWRzRnVsbFBheWxvYWQsXG4gICAgICBpZFxuICAgICk7XG4gICAgaWYgKHNob3VsZEh5ZHJhdGUpIHtcbiAgICAgIHJlc3VsdCA9IGF3YWl0IHRoaXMucmVhZChjbGF6eiwgaWQsIGN0eCk7XG4gICAgfVxuXG4gICAgbG9nLnZlcmJvc2UoYGRlbGV0aW5nIGVudHJ5IGZyb20gJHt0YWJsZU5hbWV9IHRhYmxlYCk7XG4gICAgbG9nLmRlYnVnKGBwazogJHtpZH1gKTtcbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLnN1Ym1pdFRyYW5zYWN0aW9uKFxuICAgICAgY3R4LFxuICAgICAgT3BlcmF0aW9uS2V5cy5ERUxFVEUsXG4gICAgICBbaWQudG9TdHJpbmcoKV0sXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB0aGlzLmdldEVuZG9yc2luZ09yZ2FuaXphdGlvbnMoY3R4KSxcbiAgICAgIGNsYXp6Lm5hbWVcbiAgICApO1xuICAgIHJldHVybiBzaG91bGRIeWRyYXRlXG4gICAgICA/IHJlc3VsdFxuICAgICAgOiB0aGlzLnNlcmlhbGl6ZXIuZGVzZXJpYWxpemUodGhpcy5kZWNvZGUocmVzKSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEV4ZWN1dGVzIGEgcmF3IHF1ZXJ5IGFnYWluc3QgdGhlIEZhYnJpYyBsZWRnZXJcbiAgICogQHN1bW1hcnkgRXZhbHVhdGVzIGEgdHJhbnNhY3Rpb24gdG8gcGVyZm9ybSBhIHF1ZXJ5IHVzaW5nIE1hbmdvIFF1ZXJ5IHN5bnRheFxuICAgKiBAdGVtcGxhdGUgViAtIFRoZSByZXR1cm4gdHlwZVxuICAgKiBAcGFyYW0ge01hbmdvUXVlcnl9IHJhd0lucHV0IC0gVGhlIE1hbmdvIFF1ZXJ5IHRvIGV4ZWN1dGVcbiAgICogQHBhcmFtIHtib29sZWFufSBwcm9jZXNzIC0gV2hldGhlciB0byBwcm9jZXNzIHRoZSByZXN1bHRcbiAgICogQHJldHVybiB7UHJvbWlzZTxWPn0gUHJvbWlzZSByZXNvbHZpbmcgdG8gdGhlIHF1ZXJ5IHJlc3VsdFxuICAgKiBAbWVybWFpZFxuICAgKiBzZXF1ZW5jZURpYWdyYW1cbiAgICogICBwYXJ0aWNpcGFudCBDbGllbnRcbiAgICogICBwYXJ0aWNpcGFudCBGYWJyaWNBZGFwdGVyXG4gICAqICAgcGFydGljaXBhbnQgQ29udHJhY3RcbiAgICogICBwYXJ0aWNpcGFudCBDaGFpbmNvZGVcbiAgICpcbiAgICogICBDbGllbnQtPj5GYWJyaWNBZGFwdGVyOiByYXcocmF3SW5wdXQsIHByb2Nlc3MpXG4gICAqICAgRmFicmljQWRhcHRlci0+PkZhYnJpY0FkYXB0ZXI6IEpTT04uc3RyaW5naWZ5KHJhd0lucHV0KVxuICAgKiAgIEZhYnJpY0FkYXB0ZXItPj5GYWJyaWNBZGFwdGVyOiBldmFsdWF0ZVRyYW5zYWN0aW9uKFwicXVlcnlcIiwgW2lucHV0XSlcbiAgICogICBGYWJyaWNBZGFwdGVyLT4+Q29udHJhY3Q6IGV2YWx1YXRlKFwicXVlcnlcIiwgcHJvcG9zYWxPcHRpb25zKVxuICAgKiAgIENvbnRyYWN0LT4+Q2hhaW5jb2RlOiBpbnZva2VcbiAgICogICBDaGFpbmNvZGUtLT4+Q29udHJhY3Q6IHJlc3BvbnNlXG4gICAqICAgQ29udHJhY3QtLT4+RmFicmljQWRhcHRlcjogcmVzdWx0XG4gICAqICAgRmFicmljQWRhcHRlci0+PkZhYnJpY0FkYXB0ZXI6IEpTT04ucGFyc2UoZGVjb2RlKHJlc3VsdCkpXG4gICAqICAgRmFicmljQWRhcHRlci0+PkZhYnJpY0FkYXB0ZXI6IFByb2Nlc3MgcmVzdWx0IGJhc2VkIG9uIHR5cGVcbiAgICogICBGYWJyaWNBZGFwdGVyLS0+PkNsaWVudDogcHJvY2Vzc2VkIHJlc3VsdFxuICAgKi9cbiAgQGRlYnVnKClcbiAgYXN5bmMgcmF3PFYsIEQgZXh0ZW5kcyBib29sZWFuPihcbiAgICByYXdJbnB1dDogTWFuZ29RdWVyeSxcbiAgICBkb2NzT25seTogRCA9IHRydWUgYXMgRCxcbiAgICBjbGF6ejogTW9kZWxDb25zdHJ1Y3Rvcjxhbnk+LFxuICAgIC4uLmFyZ3M6IENvbnRleHR1YWxBcmdzPENvbnRleHQ8RmFicmljQ2xpZW50RmxhZ3M+PlxuICApOiBQcm9taXNlPFY+IHtcbiAgICBjb25zdCB7IGxvZywgY3R4IH0gPSB0aGlzLmxvZ0N0eChhcmdzLCB0aGlzLnJhdyk7XG4gICAgY29uc3QgdGFibGVOYW1lID0gY2xhenoubmFtZTtcbiAgICBsb2cuaW5mbyhgUGVyZm9ybWluZyByYXcgc3RhdGVtZW50IG9uIHRhYmxlICR7TW9kZWwudGFibGVOYW1lKGNsYXp6KX1gKTtcbiAgICBsZXQgdHJhbnNhY3Rpb25SZXN1bHQ6IGFueTtcbiAgICB0cnkge1xuICAgICAgdHJhbnNhY3Rpb25SZXN1bHQgPSBhd2FpdCB0aGlzLmV2YWx1YXRlVHJhbnNhY3Rpb24oXG4gICAgICAgIGN0eCxcbiAgICAgICAgXCJyYXdcIixcbiAgICAgICAgW0pTT04uc3RyaW5naWZ5KHJhd0lucHV0KSwgZG9jc09ubHldLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgdGFibGVOYW1lXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgIHRocm93IHRoaXMucGFyc2VFcnJvcihlIGFzIEVycm9yKTtcbiAgICB9XG4gICAgbGV0IHJlc3VsdDogYW55O1xuICAgIHRyeSB7XG4gICAgICByZXN1bHQgPSBKU09OLnBhcnNlKHRoaXMuZGVjb2RlKHRyYW5zYWN0aW9uUmVzdWx0KSk7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICB0aHJvdyBuZXcgU2VyaWFsaXphdGlvbkVycm9yKGBGYWlsZWQgdG8gcHJvY2VzcyByZXN1bHQ6ICR7ZX1gKTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJzZVJlY29yZCA9IChyZWNvcmQ6IFJlY29yZDxhbnksIGFueT4pID0+IHtcbiAgICAgIGlmIChNb2RlbC5pc01vZGVsKHJlY29yZCkpIHJldHVybiBNb2RlbC5idWlsZChyZWNvcmQpO1xuICAgICAgcmV0dXJuIHJlY29yZDtcbiAgICB9O1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkocmVzdWx0KSkge1xuICAgICAgaWYgKCFyZXN1bHQubGVuZ3RoKSByZXR1cm4gcmVzdWx0IGFzIFY7XG4gICAgICBjb25zdCBlbCA9IHJlc3VsdFswXTtcbiAgICAgIGlmIChNb2RlbC5pc01vZGVsKGVsKSlcbiAgICAgICAgLy8gaWYgdGhlIGZpcnN0IG9uZSBpcyBhIG1vZGVsLCBhbGwgYXJlIG1vZGVsc1xuICAgICAgICByZXR1cm4gcmVzdWx0Lm1hcCgoZWwpID0+IE1vZGVsLmJ1aWxkKGVsKSkgYXMgVjtcbiAgICAgIHJldHVybiByZXN1bHQgYXMgVjtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VSZWNvcmQocmVzdWx0IGFzIGFueSkgYXMgVjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRXhlY3V0ZXMgYSBDb3VjaERCIHZpZXcgcXVlcnkgYWdhaW5zdCB0aGUgRmFicmljIGNoYWluY29kZVxuICAgKiBAc3VtbWFyeSBFdmFsdWF0ZXMgYSB0cmFuc2FjdGlvbiB0byBxdWVyeSBhIGRlc2lnbiBkb2N1bWVudCB2aWV3XG4gICAqIEB0ZW1wbGF0ZSBSIC0gVGhlIHZpZXcgcmVzcG9uc2UgdHlwZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gZGRvYyAtIERlc2lnbiBkb2N1bWVudCBuYW1lXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2aWV3TmFtZSAtIFZpZXcgbmFtZVxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IG9wdGlvbnMgLSBWaWV3IHF1ZXJ5IG9wdGlvbnNcbiAgICogQHBhcmFtIHsuLi5Db250ZXh0dWFsQXJnczxDb250ZXh0PEZhYnJpY0NsaWVudEZsYWdzPj59IGFyZ3MgLSBPcHRpb25hbCBjb250ZXh0dWFsIGFyZ3VtZW50c1xuICAgKiBAcmV0dXJuIHtQcm9taXNlPFZpZXdSZXNwb25zZTxSPj59IFRoZSB2aWV3IHJlc3BvbnNlXG4gICAqL1xuICBAZGVidWcoKVxuICBhc3luYyB2aWV3PFI+KFxuICAgIGRkb2M6IHN0cmluZyxcbiAgICB2aWV3TmFtZTogc3RyaW5nLFxuICAgIG9wdGlvbnM6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgLi4uYXJnczogQ29udGV4dHVhbEFyZ3M8Q29udGV4dDxGYWJyaWNDbGllbnRGbGFncz4+XG4gICk6IFByb21pc2U8Vmlld1Jlc3BvbnNlPFI+PiB7XG4gICAgY29uc3QgeyBsb2csIGN0eCB9ID0gdGhpcy5sb2dDdHgoYXJncywgdGhpcy52aWV3KTtcbiAgICBsb2cuaW5mbyhgUXVlcnlpbmcgdmlldyAke2Rkb2N9LyR7dmlld05hbWV9YCk7XG4gICAgbGV0IHRyYW5zYWN0aW9uUmVzdWx0OiBhbnk7XG4gICAgdHJ5IHtcbiAgICAgIHRyYW5zYWN0aW9uUmVzdWx0ID0gYXdhaXQgdGhpcy5ldmFsdWF0ZVRyYW5zYWN0aW9uKFxuICAgICAgICBjdHgsXG4gICAgICAgIFwidmlld1wiLFxuICAgICAgICBbZGRvYywgdmlld05hbWUsIEpTT04uc3RyaW5naWZ5KG9wdGlvbnMpXSxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHVuZGVmaW5lZFxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICB0aHJvdyB0aGlzLnBhcnNlRXJyb3IoZSBhcyBFcnJvcik7XG4gICAgfVxuICAgIGxldCByZXN1bHQ6IFZpZXdSZXNwb25zZTxSPjtcbiAgICB0cnkge1xuICAgICAgcmVzdWx0ID0gSlNPTi5wYXJzZSh0aGlzLmRlY29kZSh0cmFuc2FjdGlvblJlc3VsdCkpO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgdGhyb3cgbmV3IFNlcmlhbGl6YXRpb25FcnJvcihgRmFpbGVkIHRvIHByb2Nlc3MgdmlldyByZXN1bHQ6ICR7ZX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gR2V0cyBvciBjcmVhdGVzIGEgZ1JQQyBjbGllbnQgZm9yIHRoZSBGYWJyaWMgcGVlclxuICAgKiBAc3VtbWFyeSBSZXR1cm5zIGEgY2FjaGVkIGNsaWVudCBvciBjcmVhdGVzIGEgbmV3IG9uZSBpZiBub25lIGV4aXN0c1xuICAgKiBAcmV0dXJuIHtQcm9taXNlPENsaWVudD59IFByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSBnUlBDIGNsaWVudFxuICAgKi9cbiAgb3ZlcnJpZGUgZ2V0Q2xpZW50KCk6IENsaWVudCB7XG4gICAgaWYgKCF0aGlzLl9jbGllbnQpXG4gICAgICB0aGlzLl9jbGllbnQgPSBGYWJyaWNDbGllbnRBZGFwdGVyLmdldENsaWVudCh0aGlzLmNvbmZpZyk7XG4gICAgcmV0dXJuIHRoaXMuX2NsaWVudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gR2V0cyBhIEdhdGV3YXkgaW5zdGFuY2UgZm9yIHRoZSBGYWJyaWMgbmV0d29ya1xuICAgKiBAc3VtbWFyeSBDcmVhdGVzIGEgbmV3IEdhdGV3YXkgaW5zdGFuY2UgdXNpbmcgdGhlIGN1cnJlbnQgY2xpZW50XG4gICAqIEByZXR1cm4ge1Byb21pc2U8R2F0ZXdheT59IFByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSBHYXRld2F5IGluc3RhbmNlXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgR2F0ZXdheShjdHg6IENvbnRleHQ8RmFicmljQ2xpZW50RmxhZ3M+KTogUHJvbWlzZTxHYXRld2F5PiB7XG4gICAgcmV0dXJuIEZhYnJpY0NsaWVudEFkYXB0ZXIuZ2V0R2F0ZXdheShjdHgsIHRoaXMuY29uZmlnLCB0aGlzLmNsaWVudCk7XG4gIH1cblxuICBwcml2YXRlIGdldENvbnRyYWN0TmFtZShjbGFzc05hbWU/OiBzdHJpbmcpIHtcbiAgICBpZiAoIWNsYXNzTmFtZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4gYCR7Y2xhc3NOYW1lfUNvbnRyYWN0YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gR2V0cyBhIENvbnRyYWN0IGluc3RhbmNlIGZvciB0aGUgRmFicmljIGNoYWluY29kZVxuICAgKiBAc3VtbWFyeSBDcmVhdGVzIGEgbmV3IENvbnRyYWN0IGluc3RhbmNlIHVzaW5nIHRoZSBjdXJyZW50IEdhdGV3YXlcbiAgICogQHJldHVybiB7UHJvbWlzZTxDb250cmFrdD59IFByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSBDb250cmFjdCBpbnN0YW5jZVxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIENvbnRyYWN0KFxuICAgIGN0eDogQ29udGV4dDxGYWJyaWNDbGllbnRGbGFncz4sXG4gICAgY29udHJhY3ROYW1lPzogc3RyaW5nXG4gICk6IFByb21pc2U8Q29udHJha3Q+IHtcbiAgICByZXR1cm4gRmFicmljQ2xpZW50QWRhcHRlci5nZXRDb250cmFjdChcbiAgICAgIGF3YWl0IHRoaXMuR2F0ZXdheShjdHgpLFxuICAgICAgdGhpcy5jb25maWcsXG4gICAgICBjb250cmFjdE5hbWVcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBFeGVjdXRlcyBhIHRyYW5zYWN0aW9uIG9uIHRoZSBGYWJyaWMgbmV0d29ya1xuICAgKiBAc3VtbWFyeSBTdWJtaXRzIG9yIGV2YWx1YXRlcyBhIHRyYW5zYWN0aW9uIG9uIHRoZSBGYWJyaWMgY2hhaW5jb2RlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcGkgLSBUaGUgY2hhaW5jb2RlIGZ1bmN0aW9uIHRvIGNhbGxcbiAgICogQHBhcmFtIHtib29sZWFufSBzdWJtaXQgLSBXaGV0aGVyIHRvIHN1Ym1pdCAodHJ1ZSkgb3IgZXZhbHVhdGUgKGZhbHNlKSB0aGUgdHJhbnNhY3Rpb25cbiAgICogQHBhcmFtIHthbnlbXX0gW2FyZ3NdIC0gQXJndW1lbnRzIHRvIHBhc3MgdG8gdGhlIGNoYWluY29kZSBmdW5jdGlvblxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIHN0cmluZz59IFt0cmFuc2llbnREYXRhXSAtIFRyYW5zaWVudCBkYXRhIGZvciB0aGUgdHJhbnNhY3Rpb25cbiAgICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBbZW5kb3JzaW5nT3JnYW5pemF0aW9uc10gLSBPcmdhbml6YXRpb25zIHRoYXQgbXVzdCBlbmRvcnNlIHRoZSB0cmFuc2FjdGlvblxuICAgKiBAcmV0dXJuIHtQcm9taXNlPFVpbnQ4QXJyYXk+fSBQcm9taXNlIHJlc29sdmluZyB0byB0aGUgdHJhbnNhY3Rpb24gcmVzdWx0XG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IEZhYnJpY0FkYXB0ZXJcbiAgICogICBwYXJ0aWNpcGFudCBHYXRld2F5XG4gICAqICAgcGFydGljaXBhbnQgQ29udHJhY3RcbiAgICogICBwYXJ0aWNpcGFudCBDaGFpbmNvZGVcbiAgICpcbiAgICogICBGYWJyaWNBZGFwdGVyLT4+R2F0ZXdheTogY29ubmVjdCgpXG4gICAqICAgRmFicmljQWRhcHRlci0+PkNvbnRyYWN0OiBnZXRDb250cmFjdCgpXG4gICAqICAgYWx0IHN1Ym1pdCB0cmFuc2FjdGlvblxuICAgKiAgICAgRmFicmljQWRhcHRlci0+PkNvbnRyYWN0OiBzdWJtaXQoYXBpLCBwcm9wb3NhbE9wdGlvbnMpXG4gICAqICAgZWxzZSBldmFsdWF0ZSB0cmFuc2FjdGlvblxuICAgKiAgICAgRmFicmljQWRhcHRlci0+PkNvbnRyYWN0OiBldmFsdWF0ZShhcGksIHByb3Bvc2FsT3B0aW9ucylcbiAgICogICBlbmRcbiAgICogICBDb250cmFjdC0+PkNoYWluY29kZTogaW52b2tlXG4gICAqICAgQ2hhaW5jb2RlLS0+PkNvbnRyYWN0OiByZXNwb25zZVxuICAgKiAgIENvbnRyYWN0LS0+PkZhYnJpY0FkYXB0ZXI6IHJlc3VsdFxuICAgKiAgIEZhYnJpY0FkYXB0ZXItPj5HYXRld2F5OiBjbG9zZSgpXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgdHJhbnNhY3Rpb24oXG4gICAgY3R4OiBDb250ZXh0PEZhYnJpY0NsaWVudEZsYWdzPixcbiAgICBhcGk6IHN0cmluZyxcbiAgICBzdWJtaXQgPSB0cnVlLFxuICAgIGFyZ3M/OiBhbnlbXSxcbiAgICB0cmFuc2llbnREYXRhOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge30sXG4gICAgZW5kb3JzaW5nT3JnYW5pemF0aW9ucz86IHN0cmluZ1tdLFxuICAgIGNsYXNzTmFtZT86IHN0cmluZ1xuICApOiBQcm9taXNlPFVpbnQ4QXJyYXk+IHtcbiAgICBjb25zdCBsb2cgPSB0aGlzLmxvZy5mb3IodGhpcy50cmFuc2FjdGlvbik7XG4gICAgY29uc3QgZ2F0ZXdheSA9IGF3YWl0IHRoaXMuR2F0ZXdheShjdHgpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb250cmFjdCA9IGF3YWl0IHRoaXMuQ29udHJhY3QoXG4gICAgICAgIGN0eCxcbiAgICAgICAgdGhpcy5nZXRDb250cmFjdE5hbWUoY2xhc3NOYW1lKVxuICAgICAgKTtcbiAgICAgIGxvZy52ZXJib3NlKFxuICAgICAgICBgJHtzdWJtaXQgPyBcIlN1Ym1pdFwiIDogXCJFdmFsdWF0ZVwifXRpbmcgdHJhbnNhY3Rpb24gJHt0aGlzLmdldENvbnRyYWN0TmFtZShjbGFzc05hbWUpIHx8IHRoaXMuY29uZmlnLmNvbnRyYWN0TmFtZX0uJHthcGl9YFxuICAgICAgKTtcbiAgICAgIGxvZy5kZWJ1ZyhgYXJnczogJHthcmdzPy5tYXAoKGEpID0+IGEudG9TdHJpbmcoKSkuam9pbihcIlxcblwiKSB8fCBcIm5vbmVcIn1gKTtcbiAgICAgIGNvbnN0IG1ldGhvZCA9IHN1Ym1pdCA/IGNvbnRyYWN0LnN1Ym1pdCA6IGNvbnRyYWN0LmV2YWx1YXRlO1xuXG4gICAgICBlbmRvcnNpbmdPcmdhbml6YXRpb25zID0gZW5kb3JzaW5nT3JnYW5pemF0aW9ucz8ubGVuZ3RoXG4gICAgICAgID8gZW5kb3JzaW5nT3JnYW5pemF0aW9uc1xuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IHByb3Bvc2FsT3B0aW9uczogUHJvcG9zYWxPcHRpb25zID0ge1xuICAgICAgICBhcmd1bWVudHM6IGFyZ3MgfHwgW10sXG4gICAgICAgIHRyYW5zaWVudERhdGE6IE9iamVjdC5lbnRyaWVzKHRyYW5zaWVudERhdGEpLnJlZHVjZShcbiAgICAgICAgICAoYWNjLCBba2V5LCB2YWxdKSA9PiB7XG4gICAgICAgICAgICBhY2Nba2V5XSA9IEpTT04uc3RyaW5naWZ5KHZhbCk7XG4gICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgIH0sXG4gICAgICAgICAge30gYXMgdHlwZW9mIHRyYW5zaWVudERhdGFcbiAgICAgICAgKSxcbiAgICAgICAgZW5kb3JzaW5nT3JnYW5pemF0aW9uczogY3R4LmdldE9yVW5kZWZpbmVkKFwiYWxsb3dNYW51YWxFbmRvcnNpbmdPcmdzXCIpXG4gICAgICAgICAgPyBlbmRvcnNpbmdPcmdhbml6YXRpb25zIHx8IHVuZGVmaW5lZFxuICAgICAgICAgIDogdW5kZWZpbmVkLCAvLyBtc3BJZCBsaXN0XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gYXdhaXQgbWV0aG9kLmNhbGwoY29udHJhY3QsIGFwaSwgcHJvcG9zYWxPcHRpb25zKTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIHRocm93IHRoaXMucGFyc2VFcnJvcihlKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5sb2cuZGVidWcoYENsb3NpbmcgJHt0aGlzLmNvbmZpZy5tc3BJZH0gZ2F0ZXdheSBjb25uZWN0aW9uYCk7XG4gICAgICBnYXRld2F5LmNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzaG91bGRVc2VMZWdhY3lHYXRld2F5KGN0eDogQ29udGV4dDxGYWJyaWNDbGllbnRGbGFncz4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gISFjdHguZ2V0T3JVbmRlZmluZWQoXCJsZWdhY3lcIikgJiYgISF0aGlzLmNvbmZpZy5hbGxvd0dhdGV3YXlPdmVycmlkZTtcbiAgfVxuXG4gIHByaXZhdGUgcHJlcGFyZUxlZ2FjeUFyZ3MoYXJncz86IGFueVtdKTogc3RyaW5nW10ge1xuICAgIHJldHVybiAoYXJncyB8fCBbXSkubWFwKChhcmcpID0+XG4gICAgICB0eXBlb2YgYXJnID09PSBcInN0cmluZ1wiID8gYXJnIDogSlNPTi5zdHJpbmdpZnkoYXJnKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkTGVnYWN5VHJhbnNpZW50KFxuICAgIHRyYW5zaWVudERhdGE/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG4gICk6IFJlY29yZDxzdHJpbmcsIEJ1ZmZlcj4gfCB1bmRlZmluZWQge1xuICAgIGlmICghdHJhbnNpZW50RGF0YSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBjb25zdCBlbnRyaWVzID0gT2JqZWN0LmVudHJpZXModHJhbnNpZW50RGF0YSk7XG4gICAgaWYgKCFlbnRyaWVzLmxlbmd0aCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBjb25zdCBtYXA6IFJlY29yZDxzdHJpbmcsIEJ1ZmZlcj4gPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBlbnRyaWVzKSB7XG4gICAgICBtYXBba2V5XSA9IEJ1ZmZlci5mcm9tKEpTT04uc3RyaW5naWZ5KHZhbHVlKSk7XG4gICAgfVxuICAgIHJldHVybiBtYXA7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVMZWdhY3lNc3BDb3VudCgpOiBudW1iZXIge1xuICAgIGNvbnN0IGNvbmZpZ3VyZWQgPSB0aGlzLmNvbmZpZy5sZWdhY3lNc3BDb3VudCA/PyAxO1xuICAgIGNvbnN0IHBhcnNlZCA9IE51bWJlcihjb25maWd1cmVkKTtcbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShwYXJzZWQpIHx8IHBhcnNlZCA8IDEpIHJldHVybiAxO1xuICAgIHJldHVybiBNYXRoLmZsb29yKHBhcnNlZCk7XG4gIH1cblxuICBwcml2YXRlIHBpY2tMZWdhY3lDYW5kaWRhdGVzKFxuICAgIGNhbmRpZGF0ZXM6IE1zcERldGFpbHNbXSxcbiAgICBsaW1pdDogbnVtYmVyXG4gICk6IE1zcERldGFpbHNbXSB7XG4gICAgaWYgKCFjYW5kaWRhdGVzLmxlbmd0aCB8fCBsaW1pdCA8PSAwKSByZXR1cm4gW107XG4gICAgY29uc3QgYXZhaWxhYmxlID0gWy4uLmNhbmRpZGF0ZXNdO1xuICAgIGNvbnN0IHRhcmdldCA9IE1hdGgubWluKGxpbWl0LCBhdmFpbGFibGUubGVuZ3RoKTtcbiAgICBjb25zdCBwaWNrZWQ6IE1zcERldGFpbHNbXSA9IFtdO1xuICAgIHdoaWxlIChwaWNrZWQubGVuZ3RoIDwgdGFyZ2V0ICYmIGF2YWlsYWJsZS5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGlkeCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGF2YWlsYWJsZS5sZW5ndGgpO1xuICAgICAgY29uc3QgW3NlbGVjdGlvbl0gPSBhdmFpbGFibGUuc3BsaWNlKGlkeCwgMSk7XG4gICAgICBpZiAoc2VsZWN0aW9uKSB7XG4gICAgICAgIHBpY2tlZC5wdXNoKHNlbGVjdGlvbik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwaWNrZWQ7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkTGVnYWN5UGVlckNvbmZpZ3MoXG4gICAgY3R4OiBDb250ZXh0PEZhYnJpY0NsaWVudEZsYWdzPlxuICApOiBMZWdhY3lQZWVyVGFyZ2V0W10ge1xuICAgIGNvbnN0IHBlZXJzOiBMZWdhY3lQZWVyVGFyZ2V0W10gPSBbXG4gICAgICB7XG4gICAgICAgIG1zcElkOiB0aGlzLmNvbmZpZy5tc3BJZCxcbiAgICAgICAgcGVlckVuZHBvaW50OiB0aGlzLmNvbmZpZy5wZWVyRW5kcG9pbnQsXG4gICAgICAgIHBlZXJIb3N0QWxpYXM6IHRoaXMuY29uZmlnLnBlZXJIb3N0QWxpYXMsXG4gICAgICAgIHRsc0NlcnQ6IHRoaXMuY29uZmlnLnRsc0NlcnQsXG4gICAgICB9LFxuICAgIF07XG5cbiAgICBsZXQgZW5kb3JzaW5nT3JncyA9IHRoaXMuZ2V0RW5kb3JzaW5nT3JnYW5pemF0aW9ucyhjdHgpIHx8IFtdO1xuICAgIGVuZG9yc2luZ09yZ3MgPSBBcnJheS5pc0FycmF5KGVuZG9yc2luZ09yZ3MpXG4gICAgICA/IGVuZG9yc2luZ09yZ3NcbiAgICAgIDogW2VuZG9yc2luZ09yZ3NdO1xuICAgIGNvbnN0IGVuZG9yc2VycyA9XG4gICAgICBlbmRvcnNpbmdPcmdzLmZpbHRlcigob3JnKTogb3JnIGlzIHN0cmluZyA9PiBCb29sZWFuKG9yZykpIHx8IFtdO1xuICAgIGNvbnN0IGV4dHJhcyA9IGVuZG9yc2Vycy5maWx0ZXIoKG9yZykgPT4gb3JnICE9PSB0aGlzLmNvbmZpZy5tc3BJZCk7XG4gICAgaWYgKCFleHRyYXMubGVuZ3RoKSByZXR1cm4gcGVlcnM7XG5cbiAgICBjb25zdCBtYXAgPSB0aGlzLmNvbmZpZy5tc3BNYXA7XG4gICAgY29uc3QgbGVnYWN5Q291bnQgPSB0aGlzLnJlc29sdmVMZWdhY3lNc3BDb3VudCgpO1xuICAgIGZvciAoY29uc3QgbXNwIG9mIGV4dHJhcykge1xuICAgICAgY29uc3QgY2FuZGlkYXRlcyA9IG1hcD8uW21zcF07XG4gICAgICBpZiAoIWNhbmRpZGF0ZXM/Lmxlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcihcbiAgICAgICAgICBgTm8gcGVlciBtYXBwaW5nIGF2YWlsYWJsZSBmb3IgTVNQICR7bXNwfS4gUHJvdmlkZSBpdCB2aWEgY29uZmlnLm1zcE1hcGBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNlbGVjdGlvbnMgPSB0aGlzLnBpY2tMZWdhY3lDYW5kaWRhdGVzKGNhbmRpZGF0ZXMsIGxlZ2FjeUNvdW50KTtcbiAgICAgIGlmICghc2VsZWN0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoXG4gICAgICAgICAgYE5vIHZhbGlkIHBlZXIgbWFwcGluZyBhdmFpbGFibGUgZm9yIE1TUCAke21zcH0uIFByb3ZpZGUgaXQgdmlhIGNvbmZpZy5tc3BNYXBgXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IGNob2ljZSBvZiBzZWxlY3Rpb25zKSB7XG4gICAgICAgIGlmICghY2hvaWNlLmVuZHBvaW50KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoXG4gICAgICAgICAgICBgSW52YWxpZCBwZWVyIG1hcHBpbmcgZm9yIE1TUCAke21zcH06IG1pc3NpbmcgZW5kcG9pbnRgXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBwZWVycy5wdXNoKHtcbiAgICAgICAgICBtc3BJZDogbXNwLFxuICAgICAgICAgIHBlZXJFbmRwb2ludDogY2hvaWNlLmVuZHBvaW50LFxuICAgICAgICAgIHBlZXJIb3N0QWxpYXM6IGNob2ljZS5hbGlhcyxcbiAgICAgICAgICB0bHNDZXJ0OiBjaG9pY2UudGxzQ2VydCB8fCB0aGlzLmNvbmZpZy50bHNDZXJ0LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcGVlcnM7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHN1Ym1pdExlZ2FjeVdpdGhFeHBsaWNpdEVuZG9yc2VycyhcbiAgICBjdHg6IENvbnRleHQ8RmFicmljQ2xpZW50RmxhZ3M+LFxuICAgIGZjbjogc3RyaW5nLFxuICAgIGFyZ3M6IHN0cmluZ1tdLFxuICAgIHRyYW5zaWVudE1hcDogUmVjb3JkPHN0cmluZywgQnVmZmVyPiB8IHVuZGVmaW5lZCxcbiAgICBwZWVyQ29uZmlnczogTGVnYWN5UGVlclRhcmdldFtdLFxuICAgIGNsYXNzTmFtZT86IHN0cmluZ1xuICApOiBQcm9taXNlPFVpbnQ4QXJyYXk+IHtcbiAgICBjb25zdCBsb2cgPSB0aGlzLmxvZy5mb3IodGhpcy5zdWJtaXRMZWdhY3lXaXRoRXhwbGljaXRFbmRvcnNlcnMpO1xuICAgIGNvbnN0IHBlZXJzID0gdGhpcy5ub3JtYWxpemVMZWdhY3lQZWVycyhwZWVyQ29uZmlncyk7XG4gICAgY29uc3QgaWRlbnRpdHlNYXRlcmlhbCA9IGF3YWl0IHRoaXMucmVzb2x2ZUxlZ2FjeUlkZW50aXR5TWF0ZXJpYWwoKTtcbiAgICBjb25zdCB3YWxsZXQgPSBhd2FpdCBXYWxsZXRzLm5ld0luTWVtb3J5V2FsbGV0KCk7XG4gICAgY29uc3QgaWRlbnRpdHlMYWJlbCA9IGAke3RoaXMuY29uZmlnLm1zcElkfS1sZWdhY3lgO1xuICAgIGF3YWl0IHdhbGxldC5wdXQoaWRlbnRpdHlMYWJlbCwge1xuICAgICAgY3JlZGVudGlhbHM6IHtcbiAgICAgICAgY2VydGlmaWNhdGU6IGlkZW50aXR5TWF0ZXJpYWwuY2VydGlmaWNhdGUsXG4gICAgICAgIHByaXZhdGVLZXk6IGlkZW50aXR5TWF0ZXJpYWwucHJpdmF0ZUtleSxcbiAgICAgIH0sXG4gICAgICBtc3BJZDogdGhpcy5jb25maWcubXNwSWQsXG4gICAgICB0eXBlOiBcIlguNTA5XCIsXG4gICAgfSBhcyBJZGVudGl0eSk7XG5cbiAgICBjb25zdCBjb25uZWN0aW9uUHJvZmlsZSA9IGF3YWl0IHRoaXMuYnVpbGRMZWdhY3lDb25uZWN0aW9uUHJvZmlsZShwZWVycyk7XG4gICAgY29uc3QgZ2F0ZXdheSA9IG5ldyBMZWdhY3lHYXRld2F5KCk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgZ2F0ZXdheS5jb25uZWN0KGNvbm5lY3Rpb25Qcm9maWxlLCB7XG4gICAgICAgIGlkZW50aXR5OiBpZGVudGl0eUxhYmVsLFxuICAgICAgICB3YWxsZXQsXG4gICAgICAgIGRpc2NvdmVyeToge1xuICAgICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgYXNMb2NhbGhvc3Q6IHRoaXMuc2hvdWxkVHJlYXRQZWVyc0FzTG9jYWxob3N0KHBlZXJzKSxcbiAgICAgICAgfSxcbiAgICAgICAgdGxzSW5mbzoge1xuICAgICAgICAgIGNlcnRpZmljYXRlOiBpZGVudGl0eU1hdGVyaWFsLmNlcnRpZmljYXRlLFxuICAgICAgICAgIGtleTogaWRlbnRpdHlNYXRlcmlhbC5wcml2YXRlS2V5LFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IG5ldHdvcmsgPSBhd2FpdCBnYXRld2F5LmdldE5ldHdvcmsodGhpcy5jb25maWcuY2hhbm5lbCk7XG4gICAgICBjb25zdCBjb250cmFjdCA9IG5ldHdvcmsuZ2V0Q29udHJhY3QoXG4gICAgICAgIHRoaXMuY29uZmlnLmNoYWluY29kZU5hbWUsXG4gICAgICAgIHRoaXMuZ2V0Q29udHJhY3ROYW1lKGNsYXNzTmFtZSlcbiAgICAgICk7XG4gICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IGNvbnRyYWN0LmNyZWF0ZVRyYW5zYWN0aW9uKGZjbik7XG5cbiAgICAgIGlmICh0cmFuc2llbnRNYXApIHtcbiAgICAgICAgdHJhbnNhY3Rpb24uc2V0VHJhbnNpZW50KHRyYW5zaWVudE1hcCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGVuZG9yc2VycyA9IHBlZXJzXG4gICAgICAgIC5tYXAoKHBlZXIpID0+IG5ldHdvcmsuZ2V0Q2hhbm5lbCgpLmdldEVuZG9yc2VyKHBlZXIubmFtZSkpXG4gICAgICAgIC5maWx0ZXIoKGVuZG9yc2VyKTogZW5kb3JzZXIgaXMgRW5kb3JzZXIgPT4gQm9vbGVhbihlbmRvcnNlcikpO1xuICAgICAgaWYgKGVuZG9yc2Vycy5sZW5ndGgpIHtcbiAgICAgICAgdHJhbnNhY3Rpb24uc2V0RW5kb3JzaW5nUGVlcnMoZW5kb3JzZXJzKTtcbiAgICAgIH1cblxuICAgICAgbG9nLnZlcmJvc2UoXG4gICAgICAgIGBMZWdhY3kgc3VibWl0dGluZyAke3RoaXMuZ2V0Q29udHJhY3ROYW1lKGNsYXNzTmFtZSkgfHwgdGhpcy5jb25maWcuY29udHJhY3ROYW1lfS4ke2Zjbn0gdmlhIHBlZXJzICR7cGVlcnMubWFwKChwKSA9PiBwLnBlZXJFbmRwb2ludCkuam9pbihcIiwgXCIpfWBcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRyYW5zYWN0aW9uLnN1Ym1pdCguLi5hcmdzKTtcbiAgICAgIHJldHVybiBVaW50OEFycmF5LmZyb20ocmVzdWx0KTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIHRocm93IHRoaXMucGFyc2VFcnJvcihlKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgZ2F0ZXdheS5kaXNjb25uZWN0KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBub3JtYWxpemVMZWdhY3lQZWVycyhcbiAgICBwZWVyczogTGVnYWN5UGVlclRhcmdldFtdXG4gICk6IExlZ2FjeVBlZXJXaXRoTmFtZVtdIHtcbiAgICBjb25zdCBkZWR1cGVkID0gbmV3IE1hcDxzdHJpbmcsIExlZ2FjeVBlZXJXaXRoTmFtZT4oKTtcbiAgICBjb25zdCBhZGRQZWVyID0gKHBlZXI6IExlZ2FjeVBlZXJUYXJnZXQpID0+IHtcbiAgICAgIGNvbnN0IGtleSA9IGAke3BlZXIucGVlckVuZHBvaW50fXwke3BlZXIucGVlckhvc3RBbGlhcyB8fCBcIlwifWA7XG4gICAgICBpZiAoZGVkdXBlZC5oYXMoa2V5KSkgcmV0dXJuO1xuICAgICAgY29uc3QgbmFtZSA9IGBwZWVyLSR7cGVlci5tc3BJZH0tJHtkZWR1cGVkLnNpemV9YDtcbiAgICAgIGRlZHVwZWQuc2V0KGtleSwge1xuICAgICAgICAuLi5wZWVyLFxuICAgICAgICBuYW1lLFxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHBlZXJzLmZvckVhY2goYWRkUGVlcik7XG4gICAgYWRkUGVlcih7XG4gICAgICBtc3BJZDogdGhpcy5jb25maWcubXNwSWQsXG4gICAgICBwZWVyRW5kcG9pbnQ6IHRoaXMuY29uZmlnLnBlZXJFbmRwb2ludCxcbiAgICAgIHBlZXJIb3N0QWxpYXM6IHRoaXMuY29uZmlnLnBlZXJIb3N0QWxpYXMsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gQXJyYXkuZnJvbShkZWR1cGVkLnZhbHVlcygpKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVzb2x2ZUxlZ2FjeUlkZW50aXR5TWF0ZXJpYWwoKTogUHJvbWlzZTx7XG4gICAgY2VydGlmaWNhdGU6IHN0cmluZztcbiAgICBwcml2YXRlS2V5OiBzdHJpbmc7XG4gIH0+IHtcbiAgICBjb25zdCBjZXJ0aWZpY2F0ZSA9IGF3YWl0IHRoaXMucmVhZFBlbUlucHV0KFxuICAgICAgdGhpcy5jb25maWcuY2VydENlcnRPckRpcmVjdG9yeVBhdGhcbiAgICApO1xuICAgIGNvbnN0IHByaXZhdGVLZXkgPSBhd2FpdCB0aGlzLnJlYWRQZW1JbnB1dChcbiAgICAgIHRoaXMuY29uZmlnLmtleUNlcnRPckRpcmVjdG9yeVBhdGhcbiAgICApO1xuICAgIHJldHVybiB7IGNlcnRpZmljYXRlLCBwcml2YXRlS2V5IH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGJ1aWxkTGVnYWN5Q29ubmVjdGlvblByb2ZpbGUocGVlcnM6IExlZ2FjeVBlZXJXaXRoTmFtZVtdKSB7XG4gICAgY29uc3QgcGVlckVudHJpZXM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgICBjb25zdCBjaGFubmVsUGVlcnM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgICBjb25zdCBvcmdzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG4gICAgZm9yIChjb25zdCBwZWVyIG9mIHBlZXJzKSB7XG4gICAgICBjb25zdCB0bHNQZW0gPSBhd2FpdCB0aGlzLnJlYWRQZW1JbnB1dChcbiAgICAgICAgcGVlci50bHNDZXJ0IHx8IHRoaXMuY29uZmlnLnRsc0NlcnRcbiAgICAgICk7XG4gICAgICBjb25zdCBob3N0bmFtZSA9XG4gICAgICAgIHBlZXIucGVlckhvc3RBbGlhcyB8fCB0aGlzLmV4dHJhY3RIb3N0KHBlZXIucGVlckVuZHBvaW50KTtcbiAgICAgIHBlZXJFbnRyaWVzW3BlZXIubmFtZV0gPSB7XG4gICAgICAgIHVybDogdGhpcy5lbnN1cmVHcnBjVXJsKHBlZXIucGVlckVuZHBvaW50KSxcbiAgICAgICAgdGxzQ0FDZXJ0czogeyBwZW06IHRsc1BlbSB9LFxuICAgICAgICBncnBjT3B0aW9uczoge1xuICAgICAgICAgIFwic3NsLXRhcmdldC1uYW1lLW92ZXJyaWRlXCI6IGhvc3RuYW1lLFxuICAgICAgICAgIGhvc3RuYW1lT3ZlcnJpZGU6IGhvc3RuYW1lLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIGNoYW5uZWxQZWVyc1twZWVyLm5hbWVdID0ge1xuICAgICAgICBlbmRvcnNpbmdQZWVyOiB0cnVlLFxuICAgICAgICBjaGFpbmNvZGVRdWVyeTogdHJ1ZSxcbiAgICAgICAgbGVkZ2VyUXVlcnk6IHRydWUsXG4gICAgICAgIGV2ZW50U291cmNlOiB0cnVlLFxuICAgICAgfTtcbiAgICAgIG9yZ3NbcGVlci5tc3BJZF0gPSBvcmdzW3BlZXIubXNwSWRdIHx8IHtcbiAgICAgICAgbXNwaWQ6IHBlZXIubXNwSWQsXG4gICAgICAgIHBlZXJzOiBbXSxcbiAgICAgIH07XG4gICAgICBvcmdzW3BlZXIubXNwSWRdLnBlZXJzLnB1c2gocGVlci5uYW1lKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogXCJsZWdhY3ktbWFudWFsXCIsXG4gICAgICB2ZXJzaW9uOiBcIjEuMC4wXCIsXG4gICAgICBjbGllbnQ6IHtcbiAgICAgICAgb3JnYW5pemF0aW9uOiB0aGlzLmNvbmZpZy5tc3BJZCxcbiAgICAgIH0sXG4gICAgICBvcmdhbml6YXRpb25zOiBvcmdzLFxuICAgICAgcGVlcnM6IHBlZXJFbnRyaWVzLFxuICAgICAgb3JkZXJlcnM6IHt9LFxuICAgICAgY2hhbm5lbHM6IHtcbiAgICAgICAgW3RoaXMuY29uZmlnLmNoYW5uZWxdOiB7XG4gICAgICAgICAgcGVlcnM6IGNoYW5uZWxQZWVycyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgc2hvdWxkVHJlYXRQZWVyc0FzTG9jYWxob3N0KHBlZXJzOiBMZWdhY3lQZWVyV2l0aE5hbWVbXSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBwZWVycy5ldmVyeSgocGVlcikgPT4gdGhpcy5pc0xvY2FsRW5kcG9pbnQocGVlci5wZWVyRW5kcG9pbnQpKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNMb2NhbEVuZHBvaW50KGVuZHBvaW50OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBob3N0ID0gdGhpcy5leHRyYWN0SG9zdChlbmRwb2ludCkudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gaG9zdCA9PT0gXCJsb2NhbGhvc3RcIiB8fCBob3N0ID09PSBcIjEyNy4wLjAuMVwiO1xuICB9XG5cbiAgcHJpdmF0ZSBleHRyYWN0SG9zdChlbmRwb2ludDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBzYW5pdGl6ZWQgPSBlbmRwb2ludC5yZXBsYWNlKC9eZ3JwY3M/OlxcL1xcLy8sIFwiXCIpO1xuICAgIHJldHVybiBzYW5pdGl6ZWQuc3BsaXQoXCI6XCIpWzBdO1xuICB9XG5cbiAgcHJpdmF0ZSBlbnN1cmVHcnBjVXJsKGVuZHBvaW50OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICgvXmdycGNzPzpcXC9cXC8vaS50ZXN0KGVuZHBvaW50KSkgcmV0dXJuIGVuZHBvaW50O1xuICAgIHJldHVybiBgZ3JwY3M6Ly8ke2VuZHBvaW50fWA7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlYWRQZW1JbnB1dChzb3VyY2U/OiBzdHJpbmcgfCBCdWZmZXIpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGlmICghc291cmNlKSB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcIk1pc3NpbmcgY2VydGlmaWNhdGUgb3Iga2V5IG1hdGVyaWFsXCIpO1xuICAgIGlmIChCdWZmZXIuaXNCdWZmZXIoc291cmNlKSkgcmV0dXJuIHNvdXJjZS50b1N0cmluZyhcInV0ZjhcIik7XG4gICAgY29uc3QgdHJpbW1lZCA9IHNvdXJjZS50cmltKCk7XG4gICAgaWYgKC8tLS0tLUJFR0lOIFtBLVogXSstLS0tLS8udGVzdCh0cmltbWVkKSkgcmV0dXJuIHRyaW1tZWQ7XG4gICAgY29uc3Qgc3RhdHMgPSBhd2FpdCBmcy5wcm9taXNlcy5zdGF0KHNvdXJjZSkuY2F0Y2goKCkgPT4gdW5kZWZpbmVkKTtcbiAgICBpZiAoc3RhdHM/LmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgIHJldHVybiBhd2FpdCBnZXRGaXJzdERpckZpbGVOYW1lQ29udGVudChzb3VyY2UpO1xuICAgIH1cbiAgICByZXR1cm4gKGF3YWl0IHJlYWRGc0ZpbGUoc291cmNlKSkudG9TdHJpbmcoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUGFyc2VzIGFuIGVycm9yIGludG8gYSBCYXNlRXJyb3JcbiAgICogQHN1bW1hcnkgQ29udmVydHMgYW55IGVycm9yIGludG8gYSBzdGFuZGFyZGl6ZWQgQmFzZUVycm9yXG4gICAqIEBwYXJhbSB7RXJyb3IgfCBzdHJpbmd9IGVyciAtIFRoZSBlcnJvciB0byBwYXJzZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlYXNvbl0gLSBPcHRpb25hbCByZWFzb24gZm9yIHRoZSBlcnJvclxuICAgKiBAcmV0dXJuIHtCYXNlRXJyb3J9IFRoZSBwYXJzZWQgZXJyb3JcbiAgICovXG4gIG92ZXJyaWRlIHBhcnNlRXJyb3I8RSBleHRlbmRzIEJhc2VFcnJvcj4oZXJyOiBFcnJvciB8IHN0cmluZyk6IEUge1xuICAgIHJldHVybiBGYWJyaWNDbGllbnRBZGFwdGVyLnBhcnNlRXJyb3I8RT4oZXJyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU3VibWl0cyBhIHRyYW5zYWN0aW9uIHRvIHRoZSBGYWJyaWMgbmV0d29ya1xuICAgKiBAc3VtbWFyeSBFeGVjdXRlcyBhIHRyYW5zYWN0aW9uIHRoYXQgbW9kaWZpZXMgdGhlIGxlZGdlciBzdGF0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXBpIC0gVGhlIGNoYWluY29kZSBmdW5jdGlvbiB0byBjYWxsXG4gICAqIEBwYXJhbSB7YW55W119IFthcmdzXSAtIEFyZ3VtZW50cyB0byBwYXNzIHRvIHRoZSBjaGFpbmNvZGUgZnVuY3Rpb25cbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSBbdHJhbnNpZW50RGF0YV0gLSBUcmFuc2llbnQgZGF0YSBmb3IgdGhlIHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gW2VuZG9yc2luZ09yZ2FuaXphdGlvbnNdIC0gT3JnYW5pemF0aW9ucyB0aGF0IG11c3QgZW5kb3JzZSB0aGUgdHJhbnNhY3Rpb25cbiAgICogQHJldHVybiB7UHJvbWlzZTxVaW50OEFycmF5Pn0gUHJvbWlzZSByZXNvbHZpbmcgdG8gdGhlIHRyYW5zYWN0aW9uIHJlc3VsdFxuICAgKi9cbiAgYXN5bmMgc3VibWl0VHJhbnNhY3Rpb24oXG4gICAgY3R4OiBDb250ZXh0PEZhYnJpY0NsaWVudEZsYWdzPixcbiAgICBhcGk6IHN0cmluZyxcbiAgICBhcmdzPzogYW55W10sXG4gICAgdHJhbnNpZW50RGF0YT86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG4gICAgZW5kb3JzaW5nT3JnYW5pemF0aW9ucz86IEFycmF5PHN0cmluZz4sXG4gICAgY2xhc3NOYW1lPzogc3RyaW5nXG4gICk6IFByb21pc2U8VWludDhBcnJheT4ge1xuICAgIGlmICh0aGlzLnNob3VsZFVzZUxlZ2FjeUdhdGV3YXkoY3R4KSkge1xuICAgICAgY29uc3QgbGVnYWN5QXJncyA9IHRoaXMucHJlcGFyZUxlZ2FjeUFyZ3MoYXJncyk7XG4gICAgICBjb25zdCB0cmFuc2llbnRNYXAgPSB0aGlzLmJ1aWxkTGVnYWN5VHJhbnNpZW50KHRyYW5zaWVudERhdGEpO1xuICAgICAgY29uc3QgcGVlckNvbmZpZ3MgPSB0aGlzLmJ1aWxkTGVnYWN5UGVlckNvbmZpZ3MoY3R4KTtcbiAgICAgIHJldHVybiB0aGlzLnN1Ym1pdExlZ2FjeVdpdGhFeHBsaWNpdEVuZG9yc2VycyhcbiAgICAgICAgY3R4LFxuICAgICAgICBhcGksXG4gICAgICAgIGxlZ2FjeUFyZ3MsXG4gICAgICAgIHRyYW5zaWVudE1hcCxcbiAgICAgICAgcGVlckNvbmZpZ3MsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudHJhbnNhY3Rpb24oXG4gICAgICBjdHgsXG4gICAgICBhcGksXG4gICAgICB0cnVlLFxuICAgICAgYXJncyxcbiAgICAgIHRyYW5zaWVudERhdGEsXG4gICAgICBlbmRvcnNpbmdPcmdhbml6YXRpb25zLFxuICAgICAgY2xhc3NOYW1lXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRXZhbHVhdGVzIGEgdHJhbnNhY3Rpb24gb24gdGhlIEZhYnJpYyBuZXR3b3JrXG4gICAqIEBzdW1tYXJ5IEV4ZWN1dGVzIGEgdHJhbnNhY3Rpb24gdGhhdCBkb2VzIG5vdCBtb2RpZnkgdGhlIGxlZGdlciBzdGF0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXBpIC0gVGhlIGNoYWluY29kZSBmdW5jdGlvbiB0byBjYWxsXG4gICAqIEBwYXJhbSB7YW55W119IFthcmdzXSAtIEFyZ3VtZW50cyB0byBwYXNzIHRvIHRoZSBjaGFpbmNvZGUgZnVuY3Rpb25cbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSBbdHJhbnNpZW50RGF0YV0gLSBUcmFuc2llbnQgZGF0YSBmb3IgdGhlIHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gW2VuZG9yc2luZ09yZ2FuaXphdGlvbnNdIC0gT3JnYW5pemF0aW9ucyB0aGF0IG11c3QgZW5kb3JzZSB0aGUgdHJhbnNhY3Rpb25cbiAgICogQHJldHVybiB7UHJvbWlzZTxVaW50OEFycmF5Pn0gUHJvbWlzZSByZXNvbHZpbmcgdG8gdGhlIHRyYW5zYWN0aW9uIHJlc3VsdFxuICAgKi9cbiAgYXN5bmMgZXZhbHVhdGVUcmFuc2FjdGlvbihcbiAgICBjdHg6IENvbnRleHQ8RmFicmljQ2xpZW50RmxhZ3M+LFxuICAgIGFwaTogc3RyaW5nLFxuICAgIGFyZ3M/OiBhbnlbXSxcbiAgICB0cmFuc2llbnREYXRhPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbiAgICBlbmRvcnNpbmdPcmdhbml6YXRpb25zPzogQXJyYXk8c3RyaW5nPixcbiAgICBjbGFzc05hbWU/OiBzdHJpbmdcbiAgKTogUHJvbWlzZTxVaW50OEFycmF5PiB7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNhY3Rpb24oXG4gICAgICBjdHgsXG4gICAgICBhcGksXG4gICAgICBmYWxzZSxcbiAgICAgIGFyZ3MsXG4gICAgICB0cmFuc2llbnREYXRhLFxuICAgICAgZW5kb3JzaW5nT3JnYW5pemF0aW9ucyxcbiAgICAgIGNsYXNzTmFtZVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNodXRzIGRvd24gdGhlIGNvbm5lY3Rpb24gdG8gdGhlIEZhYnJpYyBuZXR3b3JrXG4gICAqIEBzdW1tYXJ5IENsb3NlcyB0aGUgYWN0aXZlIGRpc3BhdGNoICh3aGljaCBpbiB0dXJuIGNsb3NlcyBhbnkgZ2F0ZXdheVxuICAgKiBldmVudCBzdWJzY3JpcHRpb24pIHZpYSB0aGUgYmFzZSBjbGFzcywgdGhlbiBjbG9zZXMgdGhlIGdSUEMgY2xpZW50LlxuICAgKiBXb3JrcyBjb3JyZWN0bHkgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGBzeW50aGV0aWNFdmVudHNgIGlzIGVuYWJsZWQuXG4gICAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59IFByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIGFsbCBjb25uZWN0aW9ucyBhcmUgY2xvc2VkXG4gICAqL1xuICBvdmVycmlkZSBhc3luYyBzaHV0ZG93biguLi5hcmdzOiBNYXliZUNvbnRleHR1YWxBcmc8Q29udGV4dDxGYWJyaWNDbGllbnRGbGFncz4+KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gQmFzZSBjbGFzcyBoYW5kbGVzIGRpc3BhdGNoLmNsb3NlKCkgaW50ZXJuYWxseS5cbiAgICBhd2FpdCBzdXBlci5zaHV0ZG93biguLi5hcmdzKTtcbiAgICBpZiAodGhpcy5jbGllbnQpIHtcbiAgICAgIHRoaXMubG9nLnZlcmJvc2UoYENsb3NpbmcgJHt0aGlzLmNvbmZpZy5tc3BJZH0gZ2F0ZXdheSBjbGllbnRgKTtcbiAgICAgIHRoaXMuY2xpZW50LmNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBHZXRzIGEgQ29udHJhY3QgaW5zdGFuY2UgZnJvbSBhIEdhdGV3YXlcbiAgICogQHN1bW1hcnkgUmV0cmlldmVzIGEgY2hhaW5jb2RlIGNvbnRyYWN0IGZyb20gdGhlIHNwZWNpZmllZCBuZXR3b3JrXG4gICAqIEBwYXJhbSB7R2F0ZXdheX0gZ2F0ZXdheSAtIFRoZSBHYXRld2F5IGluc3RhbmNlXG4gICAqIEBwYXJhbSB7UGVlckNvbmZpZ30gY29uZmlnIC0gVGhlIHBlZXIgY29uZmlndXJhdGlvblxuICAgKiBAcmV0dXJuIHtDb250cmFrdH0gVGhlIENvbnRyYWN0IGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgZ2V0Q29udHJhY3QoXG4gICAgZ2F0ZXdheTogR2F0ZXdheSxcbiAgICBjb25maWc6IFBlZXJDb25maWcsXG4gICAgY29udHJhY3ROYW1lPzogc3RyaW5nXG4gICk6IENvbnRyYWt0IHtcbiAgICBjb25zdCBsb2cgPSB0aGlzLmxvZy5mb3IodGhpcy5nZXRDb250cmFjdCk7XG4gICAgY29uc3QgbmV0d29yayA9IHRoaXMuZ2V0TmV0d29yayhnYXRld2F5LCBjb25maWcuY2hhbm5lbCk7XG4gICAgbGV0IGNvbnRyYWN0OiBDb250cmFrdDtcbiAgICB0cnkge1xuICAgICAgbG9nLmRlYnVnKFxuICAgICAgICBgUmV0cmlldmluZyBjaGFpbmNvZGUgJHtjb25maWcuY2hhaW5jb2RlTmFtZX0gY29udHJhY3QgJHtjb250cmFjdE5hbWUgfHwgY29uZmlnLmNvbnRyYWN0TmFtZX0gZnJvbSBuZXR3b3JrICR7Y29uZmlnLmNoYW5uZWx9YFxuICAgICAgKTtcbiAgICAgIGNvbnRyYWN0TmFtZSA9IGNvbnRyYWN0TmFtZSA/IGNvbnRyYWN0TmFtZSA6IGNvbmZpZy5jb250cmFjdE5hbWU7XG4gICAgICBjb250cmFjdCA9IG5ldHdvcmsuZ2V0Q29udHJhY3QoY29uZmlnLmNoYWluY29kZU5hbWUsIGNvbnRyYWN0TmFtZSk7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICB0aHJvdyB0aGlzLnBhcnNlRXJyb3IoZSk7XG4gICAgfVxuICAgIHJldHVybiBjb250cmFjdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gR2V0cyBhIE5ldHdvcmsgaW5zdGFuY2UgZnJvbSBhIEdhdGV3YXlcbiAgICogQHN1bW1hcnkgQ29ubmVjdHMgdG8gYSBzcGVjaWZpYyBjaGFubmVsIG9uIHRoZSBGYWJyaWMgbmV0d29ya1xuICAgKiBAcGFyYW0ge0dhdGV3YXl9IGdhdGV3YXkgLSBUaGUgR2F0ZXdheSBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2hhbm5lbE5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgY2hhbm5lbCB0byBjb25uZWN0IHRvXG4gICAqIEByZXR1cm4ge05ldHdvcmt9IFRoZSBOZXR3b3JrIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgZ2V0TmV0d29yayhnYXRld2F5OiBHYXRld2F5LCBjaGFubmVsTmFtZTogc3RyaW5nKTogTmV0d29yayB7XG4gICAgY29uc3QgbG9nID0gTG9nZ2luZy5mb3IodGhpcy5nZXROZXR3b3JrKTtcbiAgICBsZXQgbmV0d29yazogTmV0d29yaztcbiAgICB0cnkge1xuICAgICAgbG9nLmRlYnVnKGBDb25uZWN0aW5nIHRvIGNoYW5uZWwgJHtjaGFubmVsTmFtZX1gKTtcbiAgICAgIG5ldHdvcmsgPSBnYXRld2F5LmdldE5ldHdvcmsoY2hhbm5lbE5hbWUpO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgdGhyb3cgdGhpcy5wYXJzZUVycm9yKGUpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXR3b3JrO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBHZXRzIGEgR2F0ZXdheSBpbnN0YW5jZSBmb3IgY29ubmVjdGluZyB0byB0aGUgRmFicmljIG5ldHdvcmtcbiAgICogQHN1bW1hcnkgQ3JlYXRlcyBhIEdhdGV3YXkgdXNpbmcgdGhlIHByb3ZpZGVkIGNvbmZpZ3VyYXRpb24gYW5kIGNsaWVudFxuICAgKiBAcGFyYW0ge1BlZXJDb25maWd9IGNvbmZpZyAtIFRoZSBwZWVyIGNvbmZpZ3VyYXRpb25cbiAgICogQHBhcmFtIHtDbGllbnR9IFtjbGllbnRdIC0gT3B0aW9uYWwgZ1JQQyBjbGllbnQsIHdpbGwgYmUgY3JlYXRlZCBpZiBub3QgcHJvdmlkZWRcbiAgICogQHJldHVybiB7UHJvbWlzZTxHYXRld2F5Pn0gUHJvbWlzZSByZXNvbHZpbmcgdG8gdGhlIEdhdGV3YXkgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBhc3luYyBnZXRHYXRld2F5KFxuICAgIGN0eDogQ29udGV4dDxGYWJyaWNDbGllbnRGbGFncz4sXG4gICAgY29uZmlnOiBQZWVyQ29uZmlnLFxuICAgIGNsaWVudD86IENsaWVudFxuICApIHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuZ2V0Q29ubmVjdGlvbihcbiAgICAgIGNsaWVudCB8fCAoYXdhaXQgdGhpcy5nZXRDbGllbnQoY29uZmlnKSksXG4gICAgICBjb25maWcsXG4gICAgICBjdHhcbiAgICApKSBhcyBHYXRld2F5O1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIGEgZ1JQQyBjbGllbnQgZm9yIGNvbm5lY3RpbmcgdG8gYSBGYWJyaWMgcGVlclxuICAgKiBAc3VtbWFyeSBJbml0aWFsaXplcyBhIGNsaWVudCB3aXRoIFRMUyBjcmVkZW50aWFscyBmb3Igc2VjdXJlIGNvbW11bmljYXRpb25cbiAgICogQHBhcmFtIHtQZWVyQ29uZmlnfSBjb25maWcgLSBUaGUgcGVlciBjb25maWd1cmF0aW9uXG4gICAqIEByZXR1cm4ge0NsaWVudH0gUHJvbWlzZSByZXNvbHZpbmcgdG8gdGhlIGdSUEMgY2xpZW50XG4gICAqL1xuICBzdGF0aWMgZ2V0Q2xpZW50KGNvbmZpZzogUGVlckNvbmZpZyk6IENsaWVudCB7XG4gICAgY29uc3QgbG9nID0gdGhpcy5sb2cuZm9yKHRoaXMuZ2V0Q2xpZW50KTtcbiAgICBsb2cuZGVidWcoYGdlbmVyYXRpbmcgVExTIGNyZWRlbnRpYWxzIGZvciBtc3AgJHtjb25maWcubXNwSWR9YCk7XG4gICAgbGV0IHBhdGhPckNlcnQ6IHN0cmluZyB8IEJ1ZmZlciA9IGNvbmZpZy50bHNDZXJ0IGFzIHN0cmluZyB8IEJ1ZmZlcjtcblxuICAgIGlmICh0eXBlb2YgcGF0aE9yQ2VydCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgaWYgKFxuICAgICAgICBwYXRoT3JDZXJ0Lm1hdGNoKFxuICAgICAgICAgIC8tLS0tLUJFR0lOIChDRVJUSUZJQ0FURXxLRVl8UFJJVkFURSBLRVkpLS0tLS0uKz8tLS0tLUVORCBcXDEtLS0tLSQvZ21zXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICBwYXRoT3JDZXJ0ID0gQnVmZmVyLmZyb20ocGF0aE9yQ2VydCwgXCJ1dGY4XCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBwYXRoT3JDZXJ0ID0gQnVmZmVyLmZyb20oZnMucmVhZEZpbGVTeW5jKHBhdGhPckNlcnQsIFwidXRmOFwiKSk7XG4gICAgICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcbiAgICAgICAgICAgIGBGYWlsZWQgdG8gcmVhZCB0aGUgdGxzIGNlcnRpZmljYXRlIGZyb20gJHtwYXRoT3JDZXJ0fTogJHtlfWBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgdGxzQ3JlZGVudGlhbHMgPSBncnBjLmNyZWRlbnRpYWxzLmNyZWF0ZVNzbChwYXRoT3JDZXJ0KTtcbiAgICBsb2cuZGVidWcoYGdlbmVyYXRpbmcgR2F0ZXdheSBDbGllbnQgZm9yIHVybCAke2NvbmZpZy5wZWVyRW5kcG9pbnR9YCk7XG4gICAgcmV0dXJuIG5ldyBDbGllbnQoY29uZmlnLnBlZXJFbmRwb2ludCwgdGxzQ3JlZGVudGlhbHMsIHtcbiAgICAgIFwiZ3JwYy5tYXhfcmVjZWl2ZV9tZXNzYWdlX2xlbmd0aFwiOiAoY29uZmlnLnNpemVMaW1pdCB8fCAxNSkgKiAxMDI0ICogMTAyNCxcbiAgICAgIFwiZ3JwYy5tYXhfc2VuZF9tZXNzYWdlX2xlbmd0aFwiOiAoY29uZmlnLnNpemVMaW1pdCB8fCAxNSkgKiAxMDI0ICogMTAyNCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRXN0YWJsaXNoZXMgYSBjb25uZWN0aW9uIHRvIHRoZSBGYWJyaWMgbmV0d29ya1xuICAgKiBAc3VtbWFyeSBDcmVhdGVzIGEgR2F0ZXdheSBjb25uZWN0aW9uIHdpdGggaWRlbnRpdHkgYW5kIHNpZ25lclxuICAgKiBAcGFyYW0ge0NsaWVudH0gY2xpZW50IC0gVGhlIGdSUEMgY2xpZW50XG4gICAqIEBwYXJhbSB7UGVlckNvbmZpZ30gY29uZmlnIC0gVGhlIHBlZXIgY29uZmlndXJhdGlvblxuICAgKiBAcmV0dXJuIHtQcm9taXNlPEdhdGV3YXk+fSBQcm9taXNlIHJlc29sdmluZyB0byB0aGUgY29ubmVjdGVkIEdhdGV3YXlcbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgQ2FsbGVyXG4gICAqICAgcGFydGljaXBhbnQgRmFicmljQWRhcHRlclxuICAgKiAgIHBhcnRpY2lwYW50IElkZW50aXR5XG4gICAqICAgcGFydGljaXBhbnQgU2lnbmVyXG4gICAqICAgcGFydGljaXBhbnQgR2F0ZXdheVxuICAgKlxuICAgKiAgIENhbGxlci0+PkZhYnJpY0FkYXB0ZXI6IGdldENvbm5lY3Rpb24oY2xpZW50LCBjb25maWcpXG4gICAqICAgRmFicmljQWRhcHRlci0+PklkZW50aXR5OiBnZXRJZGVudGl0eShtc3BJZCwgY2VydERpcmVjdG9yeVBhdGgpXG4gICAqICAgSWRlbnRpdHktLT4+RmFicmljQWRhcHRlcjogaWRlbnRpdHlcbiAgICogICBGYWJyaWNBZGFwdGVyLT4+U2lnbmVyOiBnZXRTaWduZXIoa2V5RGlyZWN0b3J5UGF0aClcbiAgICogICBTaWduZXItLT4+RmFicmljQWRhcHRlcjogc2lnbmVyXG4gICAqICAgRmFicmljQWRhcHRlci0+PkZhYnJpY0FkYXB0ZXI6IENyZWF0ZSBDb25uZWN0T3B0aW9uc1xuICAgKiAgIEZhYnJpY0FkYXB0ZXItPj5HYXRld2F5OiBjb25uZWN0KG9wdGlvbnMpXG4gICAqICAgR2F0ZXdheS0tPj5GYWJyaWNBZGFwdGVyOiBnYXRld2F5XG4gICAqICAgRmFicmljQWRhcHRlci0tPj5DYWxsZXI6IGdhdGV3YXlcbiAgICovXG4gIHN0YXRpYyBhc3luYyBnZXRDb25uZWN0aW9uKFxuICAgIGNsaWVudDogQ2xpZW50LFxuICAgIGNvbmZpZzogUGVlckNvbmZpZyxcbiAgICBjdHg6IENvbnRleHQ8RmFicmljQ2xpZW50RmxhZ3M+XG4gICkge1xuICAgIGNvbnN0IGxvZyA9IExvZ2dpbmcuZm9yKHRoaXMuZ2V0Q29ubmVjdGlvbik7XG4gICAgbG9nLmRlYnVnKFxuICAgICAgYFJldHJpZXZpbmcgUGVlciBJZGVudGl0eSBmb3IgJHtjb25maWcubXNwSWR9IHVuZGVyICR7Y29uZmlnLmNlcnRDZXJ0T3JEaXJlY3RvcnlQYXRofWBcbiAgICApO1xuICAgIGNvbnN0IGlkZW50aXR5ID0gYXdhaXQgZ2V0SWRlbnRpdHkoXG4gICAgICBjb25maWcubXNwSWQsXG4gICAgICBjb25maWcuY2VydENlcnRPckRpcmVjdG9yeVBhdGggYXMgYW55XG4gICAgKTtcbiAgICB0cnkge1xuICAgICAgbG9nLmRlYnVnKFxuICAgICAgICBgcHJlcGFyaW5nIHRyYW5zYWN0aW9uIHNpZ25lciBmb3IgJHtDcnlwdG9VdGlscy5mYWJyaWNJZEZyb21DZXJ0aWZpY2F0ZShpZGVudGl0eS5jcmVkZW50aWFscy50b1N0cmluZygpKX1gXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgIGxvZy5lcnJvcihgRmFpbGVkIHRvIGV4dHJhY3QgRmFicmljIElEIGZyb20gY2VydGlmaWNhdGVgLCBlIGFzIEVycm9yKTtcbiAgICB9XG5cbiAgICBsZXQgc2lnbmVyOiBTaWduZXI7XG4gICAgY29uc3QgY2xvc2UgPSAoKSA9PiB7fTtcbiAgICBpZiAoIWNvbmZpZy5oc20pIHtcbiAgICAgIHNpZ25lciA9IGF3YWl0IGdldFNpZ25lcihjb25maWcua2V5Q2VydE9yRGlyZWN0b3J5UGF0aCBhcyBhbnkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBjb25zdCBoc20gPSBuZXcgSFNNU2lnbmVyRmFjdG9yeUN1c3RvbShjb25maWcuaHNtLmxpYnJhcnkpO1xuICAgICAgLy8gY29uc3QgaWRlbnRpZmllciA9IGhzbS5nZXRTS0lGcm9tQ2VydGlmaWNhdGVQYXRoKFxuICAgICAgLy8gICBjb25maWcuY2VydENlcnRPckRpcmVjdG9yeVBhdGggYXMgYW55XG4gICAgICAvLyApO1xuICAgICAgLy8gY29uc3QgcGtjczExU2lnbmVyID0gaHNtLm5ld1NpZ25lcih7XG4gICAgICAvLyAgIGxhYmVsOiBjb25maWcuaHNtLnRva2VuTGFiZWwgYXMgc3RyaW5nLFxuICAgICAgLy8gICBwaW46IFN0cmluZyhjb25maWcuaHNtLnBpbikgYXMgc3RyaW5nLFxuICAgICAgLy8gICBpZGVudGlmaWVyOiBpZGVudGlmaWVyLFxuICAgICAgLy8gICAvLyB1c2VyVHlwZTogMSAvKkNLVV9VU0VSICovLFxuICAgICAgLy8gfSk7XG4gICAgICAvLyBzaWduZXIgPSBwa2NzMTFTaWduZXIuc2lnbmVyO1xuICAgICAgLy8gY2xvc2UgPSBwa2NzMTFTaWduZXIuY2xvc2U7XG4gICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcihcIkhTTSBOT1QgSU1QTEVNRU5URURcIik7XG4gICAgfVxuXG4gICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgIGNsaWVudCxcbiAgICAgIGlkZW50aXR5OiBpZGVudGl0eSxcbiAgICAgIHNpZ25lcjogc2lnbmVyLFxuICAgICAgLy8gRGVmYXVsdCB0aW1lb3V0cyBmb3IgZGlmZmVyZW50IGdSUEMgY2FsbHNcbiAgICAgIGV2YWx1YXRlT3B0aW9uczogKCkgPT4ge1xuICAgICAgICByZXR1cm4geyBkZWFkbGluZTogRGF0ZS5ub3coKSArIDEwMDAgKiBjdHguZ2V0KFwiZXZhbHVhdGVUaW1lb3V0XCIpIH07IC8vIGRlZmF1bHRzIHRvIDUgc2Vjb25kc1xuICAgICAgfSxcbiAgICAgIGVuZG9yc2VPcHRpb25zOiAoKSA9PiB7XG4gICAgICAgIHJldHVybiB7IGRlYWRsaW5lOiBEYXRlLm5vdygpICsgMTAwMCAqIGN0eC5nZXQoXCJlbmRvcnNlVGltZW91dFwiKSB9OyAvLyBkZWZhdWx0cyB0byAxNSBzZWNvbmRzXG4gICAgICB9LFxuICAgICAgc3VibWl0T3B0aW9uczogKCkgPT4ge1xuICAgICAgICByZXR1cm4geyBkZWFkbGluZTogRGF0ZS5ub3coKSArIDEwMDAgKiBjdHguZ2V0KFwic3VibWl0VGltZW91dFwiKSB9OyAvLyBkZWZhdWx0cyB0byA1IHNlY29uZHNcbiAgICAgIH0sXG4gICAgICBjb21taXRTdGF0dXNPcHRpb25zOiAoKSA9PiB7XG4gICAgICAgIHJldHVybiB7IGRlYWRsaW5lOiBEYXRlLm5vdygpICsgMTAwMCAqIGN0eC5nZXQoXCJjb21taXRUaW1lb3V0XCIpIH07IC8vIGRlZmF1bHRzIHRvIDEgbWludXRlXG4gICAgICB9LFxuICAgIH0gYXMgQ29ubmVjdE9wdGlvbnM7XG5cbiAgICBsb2cuZGVidWcoYENvbm5lY3RpbmcgdG8gJHtjb25maWcubXNwSWR9YCk7XG4gICAgY29uc3QgZ2F0ZXdheSA9IGNvbm5lY3Qob3B0aW9ucyk7XG5cbiAgICAvLyBUT0RPOiByZXBsYWNlP1xuICAgIGlmIChjb25maWcuaHNtKSB7XG4gICAgICBnYXRld2F5LmNsb3NlID0gbmV3IFByb3h5KGdhdGV3YXkuY2xvc2UsIHtcbiAgICAgICAgYXBwbHkodGFyZ2V0OiAoKSA9PiB2b2lkLCB0aGlzQXJnOiBhbnksIGFyZ0FycmF5OiBhbnlbXSk6IGFueSB7XG4gICAgICAgICAgUmVmbGVjdC5hcHBseSh0YXJnZXQsIHRoaXNBcmcsIGFyZ0FycmF5KTtcbiAgICAgICAgICBjbG9zZSgpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGdhdGV3YXk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgYSBuZXcgRGlzcGF0Y2ggaW5zdGFuY2UgZm9yIHRoZSBGYWJyaWMgY2xpZW50LlxuICAgKiBAc3VtbWFyeSBUaGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyBhIG5ldyBGYWJyaWNDbGllbnREaXNwYXRjaCBpbnN0YW5jZSB0aGF0IGNhbiBiZSB1c2VkIHRvIGludGVyYWN0IHdpdGggdGhlIEZhYnJpYyBuZXR3b3JrLlxuICAgKiBAcmV0dXJucyB7RGlzcGF0Y2h9IEEgbmV3IERpc3BhdGNoIGluc3RhbmNlIGNvbmZpZ3VyZWQgZm9yIHRoZSBGYWJyaWMgY2xpZW50LlxuICAgKiBAcmVtYXJrcyBUaGUgRGlzcGF0Y2ggaW5zdGFuY2UgaXMgdXNlZCB0byBlbmNhcHN1bGF0ZSB0aGUgbG9naWMgZm9yIGludGVyYWN0aW5nIHdpdGggdGhlIEZhYnJpYyBuZXR3b3JrLCBzdWNoIGFzIHN1Ym1pdHRpbmcgdHJhbnNhY3Rpb25zIG9yIHF1ZXJ5aW5nIGRhdGEuXG4gICAqIEBleGFtcGxlXG4gICAqIGNvbnN0IGZhYnJpY0Rpc3BhdGNoID0gZmFicmljQ2xpZW50QWRhcHRlci5EaXNwYXRjaCgpO1xuICAgKiBmYWJyaWNEaXNwYXRjaC5zdWJtaXRUcmFuc2FjdGlvbignY3JlYXRlUHJvZHVjdCcsIHsgbmFtZTogJ1Byb2R1Y3QgQScsIHByaWNlOiAxMDAgfSk7XG4gICAqL1xuICBvdmVycmlkZSBEaXNwYXRjaCgpOiBGYWJyaWNDbGllbnREaXNwYXRjaCB7XG4gICAgcmV0dXJuIG5ldyBGYWJyaWNDbGllbnRBZGFwdGVyW1wiX2Jhc2VEaXNwYXRjaFwiXSh0aGlzLmNsaWVudCk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFBhcnNlcyBhbiBlcnJvciBpbnRvIGEgQmFzZUVycm9yXG4gICAqIEBzdW1tYXJ5IENvbnZlcnRzIGFueSBlcnJvciBpbnRvIGEgc3RhbmRhcmRpemVkIEJhc2VFcnJvciB1c2luZyB0aGUgcGFyZW50IGNsYXNzIGltcGxlbWVudGF0aW9uXG4gICAqIEBwYXJhbSB7RXJyb3IgfCBzdHJpbmd9IGVyciAtIFRoZSBlcnJvciB0byBwYXJzZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlYXNvbl0gLSBPcHRpb25hbCByZWFzb24gZm9yIHRoZSBlcnJvclxuICAgKiBAcmV0dXJuIHtCYXNlRXJyb3J9IFRoZSBwYXJzZWQgZXJyb3JcbiAgICovXG4gIHByb3RlY3RlZCBzdGF0aWMgcGFyc2VFcnJvcjxFIGV4dGVuZHMgQmFzZUVycm9yPihcbiAgICBlcnI6IEVycm9yIHwgc3RyaW5nIHwgR2F0ZXdheUVycm9yXG4gICk6IEUge1xuICAgIC8vIGlmIChcbiAgICAvLyAgIE1JU1NJTkdfUFJJVkFURV9EQVRBX1JFR0VYLnRlc3QoXG4gICAgLy8gICAgIHR5cGVvZiBlcnIgPT09IFwic3RyaW5nXCIgPyBlcnIgOiBlcnIubWVzc2FnZVxuICAgIC8vICAgKVxuICAgIC8vIClcbiAgICAvLyAgIHJldHVybiBuZXcgVW5hdXRob3JpemVkUHJpdmF0ZURhdGFBY2Nlc3MoZXJyKSBhcyBFO1xuXG4gICAgbGV0IG1zZyA9IHR5cGVvZiBlcnIgPT09IFwic3RyaW5nXCIgPyBlcnIgOiBlcnIubWVzc2FnZTtcbiAgICBpZiAoZXJyIGluc3RhbmNlb2YgR2F0ZXdheUVycm9yICYmIGVyci5kZXRhaWxzLmxlbmd0aCAmJiBlcnIuY29kZSA9PT0gMTApIHtcbiAgICAgIG1zZyA9IGAke2Vyci5kZXRhaWxzWzBdLm1lc3NhZ2V9YDtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBlcnIgaW5zdGFuY2VvZiBFbmRvcnNlRXJyb3IgJiZcbiAgICAgIGVyci5kZXRhaWxzLmxlbmd0aCAmJlxuICAgICAgZXJyLmNvZGUgPT09IDEwICYmXG4gICAgICBlcnIuZGV0YWlsc1swXS5tZXNzYWdlPy5pbmNsdWRlcyhVbnN1cHBvcnRlZEVycm9yLm5hbWUpXG4gICAgKSB7XG4gICAgICBtc2cgPSBgJHtlcnIuZGV0YWlsc1swXS5tZXNzYWdlfWA7XG4gICAgfVxuXG4gICAgaWYgKG1zZy5pbmNsdWRlcyhcIk1WQ0NfUkVBRF9DT05GTElDVFwiKSlcbiAgICAgIHJldHVybiBuZXcgTXZjY1JlYWRDb25mbGljdEVycm9yKGVycikgYXMgRTtcblxuICAgIGlmIChtc2cuaW5jbHVkZXMoXCJERUFETElORV9FWENFRURFRFwiKSlcbiAgICAgIHJldHVybiBuZXcgVHJhbnNhY3Rpb25UaW1lb3V0RXJyb3IoZXJyKSBhcyBFO1xuXG4gICAgaWYgKG1zZy5pbmNsdWRlcyhcIkVORE9SU0VNRU5UX1BPTElDWV9GQUlMVVJFXCIpKVxuICAgICAgcmV0dXJuIG5ldyBFbmRvcnNlbWVudFBvbGljeUVycm9yKGVycikgYXMgRTtcblxuICAgIGlmIChtc2cuaW5jbHVkZXMoXCJQSEFOVE9NX1JFQURfQ09ORkxJQ1RcIikpXG4gICAgICByZXR1cm4gbmV3IFBoYW50b21SZWFkQ29uZmxpY3RFcnJvcihlcnIpIGFzIEU7XG5cbiAgICBpZiAoZXJyIGluc3RhbmNlb2YgRXJyb3IgJiYgKGVyciBhcyBhbnkpLmNvZGUpIHtcbiAgICAgIHN3aXRjaCAoKGVyciBhcyBhbnkpLmNvZGUpIHtcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgIHJldHVybiBuZXcgRW5kb3JzZW1lbnRFcnJvcihlcnIpIGFzIEU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG1zZy5pbmNsdWRlcyhWYWxpZGF0aW9uRXJyb3IubmFtZSkpXG4gICAgICByZXR1cm4gbmV3IFZhbGlkYXRpb25FcnJvcihlcnIpIGFzIEU7XG4gICAgaWYgKG1zZy5pbmNsdWRlcyhOb3RGb3VuZEVycm9yLm5hbWUpKSByZXR1cm4gbmV3IE5vdEZvdW5kRXJyb3IoZXJyKSBhcyBFO1xuICAgIGlmIChtc2cuaW5jbHVkZXMoQ29uZmxpY3RFcnJvci5uYW1lKSkgcmV0dXJuIG5ldyBDb25mbGljdEVycm9yKGVycikgYXMgRTtcbiAgICBpZiAobXNnLmluY2x1ZGVzKEJhZFJlcXVlc3RFcnJvci5uYW1lKSlcbiAgICAgIHJldHVybiBuZXcgQmFkUmVxdWVzdEVycm9yKGVycikgYXMgRTtcbiAgICBpZiAobXNnLmluY2x1ZGVzKFF1ZXJ5RXJyb3IubmFtZSkpIHJldHVybiBuZXcgUXVlcnlFcnJvcihlcnIpIGFzIEU7XG4gICAgaWYgKG1zZy5pbmNsdWRlcyhQYWdpbmdFcnJvci5uYW1lKSkgcmV0dXJuIG5ldyBQYWdpbmdFcnJvcihlcnIpIGFzIEU7XG4gICAgaWYgKG1zZy5pbmNsdWRlcyhVbnN1cHBvcnRlZEVycm9yLm5hbWUpKVxuICAgICAgcmV0dXJuIG5ldyBVbnN1cHBvcnRlZEVycm9yKGVycikgYXMgRTtcbiAgICBpZiAobXNnLmluY2x1ZGVzKE1pZ3JhdGlvbkVycm9yLm5hbWUpKSByZXR1cm4gbmV3IE1pZ3JhdGlvbkVycm9yKGVycikgYXMgRTtcbiAgICBpZiAobXNnLmluY2x1ZGVzKE9ic2VydmVyRXJyb3IubmFtZSkpIHJldHVybiBuZXcgT2JzZXJ2ZXJFcnJvcihlcnIpIGFzIEU7XG4gICAgaWYgKG1zZy5pbmNsdWRlcyhBdXRob3JpemF0aW9uRXJyb3IubmFtZSkpXG4gICAgICByZXR1cm4gbmV3IEF1dGhvcml6YXRpb25FcnJvcihlcnIpIGFzIEU7XG4gICAgaWYgKG1zZy5pbmNsdWRlcyhGb3JiaWRkZW5FcnJvci5uYW1lKSkgcmV0dXJuIG5ldyBGb3JiaWRkZW5FcnJvcihlcnIpIGFzIEU7XG4gICAgaWYgKG1zZy5pbmNsdWRlcyhDb25uZWN0aW9uRXJyb3IubmFtZSkpXG4gICAgICByZXR1cm4gbmV3IENvbm5lY3Rpb25FcnJvcihlcnIpIGFzIEU7XG4gICAgaWYgKG1zZy5pbmNsdWRlcyhTZXJpYWxpemF0aW9uRXJyb3IubmFtZSkpXG4gICAgICByZXR1cm4gbmV3IFNlcmlhbGl6YXRpb25FcnJvcihlcnIpIGFzIEU7XG4gICAgcmV0dXJuIG5ldyBJbnRlcm5hbEVycm9yKGVycikgYXMgRTtcbiAgfVxufVxuXG5GYWJyaWNDbGllbnRBZGFwdGVyLmRlY29yYXRpb24oKTtcbkFkYXB0ZXIuc2V0Q3VycmVudChGYWJyaWNGbGF2b3VyKTtcbiJdfQ==