@decaf-ts/for-fabric 0.1.78 → 0.1.79

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 (415) hide show
  1. package/dist/for-fabric.cjs +3048 -2
  2. package/dist/for-fabric.js +3138 -2
  3. package/lib/bin/cli.cjs +2 -1
  4. package/lib/cli-module.cjs +77 -68
  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-fs.d.ts +1 -1
  19. package/lib/client/fabric-hsm.cjs +1 -1
  20. package/lib/client/index.cjs +1 -1
  21. package/lib/client/indexes/generation.cjs +1 -1
  22. package/lib/client/indexes/index.cjs +1 -1
  23. package/lib/client/logging.cjs +1 -1
  24. package/lib/client/services/FabricEnrollmentService.cjs +1 -1
  25. package/lib/client/services/FabricIdentityService.cjs +1 -1
  26. package/lib/client/services/RegistrationRequestBuilder.cjs +1 -1
  27. package/lib/client/services/constants.cjs +1 -1
  28. package/lib/client/services/index.cjs +1 -1
  29. package/lib/client/types.cjs +1 -1
  30. package/lib/client/utils.cjs +1 -1
  31. package/lib/client/utils.d.ts +1 -1
  32. package/lib/contract/Address.cjs +1 -1
  33. package/lib/contract/AddressContract.cjs +1 -1
  34. package/lib/contract/BatchContract.cjs +1 -1
  35. package/lib/contract/OtherProductContract.cjs +1 -1
  36. package/lib/contract/OtherProductSharedContract.cjs +1 -1
  37. package/lib/contract/Product.cjs +1 -1
  38. package/lib/contract/ProductContract.cjs +1 -1
  39. package/lib/contract/SegregatedPrivateDocumentContract.cjs +1 -1
  40. package/lib/contract/SegregatedSharedDocumentContract.cjs +1 -1
  41. package/lib/contract/User.cjs +1 -1
  42. package/lib/contract/UserContract.cjs +1 -1
  43. package/lib/contract/index.cjs +1 -1
  44. package/lib/contract/models/Audit.cjs +1 -1
  45. package/lib/contract/models/BaseIdentifiedModel.cjs +1 -1
  46. package/lib/contract/models/BaseModel.cjs +1 -1
  47. package/lib/contract/models/Batch.cjs +1 -1
  48. package/lib/contract/models/Leaflet.cjs +1 -1
  49. package/lib/contract/models/LeafletFile.cjs +1 -1
  50. package/lib/contract/models/Market.cjs +1 -1
  51. package/lib/contract/models/OtherProduct.cjs +1 -1
  52. package/lib/contract/models/OtherProductShared.cjs +1 -1
  53. package/lib/contract/models/Product.cjs +1 -1
  54. package/lib/contract/models/ProductStrength.cjs +1 -1
  55. package/lib/contract/models/SegregatedDocument.cjs +1 -1
  56. package/lib/contract/models/constants.cjs +1 -1
  57. package/lib/contract/models/decorators.cjs +1 -1
  58. package/lib/contract/models/gtin.cjs +1 -1
  59. package/lib/contracts/ContractAdapter.cjs +1 -1
  60. package/lib/contracts/ContractContext.cjs +1 -1
  61. package/lib/contracts/ContractPrivateDataAdapter.cjs +1 -1
  62. package/lib/contracts/FabricConstruction.cjs +1 -1
  63. package/lib/contracts/FabricContractPaginator.cjs +1 -1
  64. package/lib/contracts/FabricContractRepository.cjs +1 -1
  65. package/lib/contracts/FabricContractRepositoryObservableHandler.cjs +1 -1
  66. package/lib/contracts/FabricContractSequence.cjs +1 -1
  67. package/lib/contracts/FabricContractStatement.cjs +1 -1
  68. package/lib/contracts/PrivateSequence.cjs +1 -1
  69. package/lib/contracts/crud/crud-contract.cjs +1 -1
  70. package/lib/contracts/crud/index.cjs +1 -1
  71. package/lib/contracts/crud/serialized-crud-contract.cjs +1 -1
  72. package/lib/contracts/erc20/erc20contract.cjs +1 -1
  73. package/lib/contracts/erc20/index.cjs +1 -1
  74. package/lib/contracts/erc20/models.cjs +1 -1
  75. package/lib/contracts/index.cjs +1 -1
  76. package/lib/contracts/logging.cjs +1 -1
  77. package/lib/contracts/overrides.cjs +1 -1
  78. package/lib/contracts/private-data.cjs +1 -1
  79. package/lib/contracts/types.cjs +1 -1
  80. package/lib/contracts/uuid.cjs +1 -1
  81. package/lib/esm/bin/cli.js +1 -1
  82. package/lib/esm/cli-module.js +77 -68
  83. package/lib/esm/cli-utils.js +1 -1
  84. package/lib/esm/client/FabricClientAdapter.js +1 -1
  85. package/lib/esm/client/FabricClientDispatch.js +1 -1
  86. package/lib/esm/client/FabricClientPaginator.js +1 -1
  87. package/lib/esm/client/FabricClientRepository.js +1 -1
  88. package/lib/esm/client/FabricClientStatement.js +1 -1
  89. package/lib/esm/client/collections/generation.js +1 -1
  90. package/lib/esm/client/collections/index.js +1 -1
  91. package/lib/esm/client/constants.js +1 -1
  92. package/lib/esm/client/crypto.js +1 -1
  93. package/lib/esm/client/erc20/FabricERC20ClientRepository.js +1 -1
  94. package/lib/esm/client/erc20/index.js +1 -1
  95. package/lib/esm/client/fabric-fs.d.ts +1 -1
  96. package/lib/esm/client/fabric-fs.js +1 -1
  97. package/lib/esm/client/fabric-hsm.js +1 -1
  98. package/lib/esm/client/index.js +1 -1
  99. package/lib/esm/client/indexes/generation.js +1 -1
  100. package/lib/esm/client/indexes/index.js +1 -1
  101. package/lib/esm/client/logging.js +1 -1
  102. package/lib/esm/client/services/FabricEnrollmentService.js +1 -1
  103. package/lib/esm/client/services/FabricIdentityService.js +1 -1
  104. package/lib/esm/client/services/RegistrationRequestBuilder.js +1 -1
  105. package/lib/esm/client/services/constants.js +1 -1
  106. package/lib/esm/client/services/index.js +1 -1
  107. package/lib/esm/client/types.js +1 -1
  108. package/lib/esm/client/utils.d.ts +1 -1
  109. package/lib/esm/client/utils.js +1 -1
  110. package/lib/esm/contract/Address.js +1 -1
  111. package/lib/esm/contract/AddressContract.js +1 -1
  112. package/lib/esm/contract/BatchContract.js +1 -1
  113. package/lib/esm/contract/OtherProductContract.js +1 -1
  114. package/lib/esm/contract/OtherProductSharedContract.js +1 -1
  115. package/lib/esm/contract/Product.js +1 -1
  116. package/lib/esm/contract/ProductContract.js +1 -1
  117. package/lib/esm/contract/SegregatedPrivateDocumentContract.js +1 -1
  118. package/lib/esm/contract/SegregatedSharedDocumentContract.js +1 -1
  119. package/lib/esm/contract/User.js +1 -1
  120. package/lib/esm/contract/UserContract.js +1 -1
  121. package/lib/esm/contract/index.js +1 -1
  122. package/lib/esm/contract/models/Audit.js +1 -1
  123. package/lib/esm/contract/models/BaseIdentifiedModel.js +1 -1
  124. package/lib/esm/contract/models/BaseModel.js +1 -1
  125. package/lib/esm/contract/models/Batch.js +1 -1
  126. package/lib/esm/contract/models/Leaflet.js +1 -1
  127. package/lib/esm/contract/models/LeafletFile.js +1 -1
  128. package/lib/esm/contract/models/Market.js +1 -1
  129. package/lib/esm/contract/models/OtherProduct.js +1 -1
  130. package/lib/esm/contract/models/OtherProductShared.js +1 -1
  131. package/lib/esm/contract/models/Product.js +1 -1
  132. package/lib/esm/contract/models/ProductStrength.js +1 -1
  133. package/lib/esm/contract/models/SegregatedDocument.js +1 -1
  134. package/lib/esm/contract/models/constants.js +1 -1
  135. package/lib/esm/contract/models/decorators.js +1 -1
  136. package/lib/esm/contract/models/gtin.js +1 -1
  137. package/lib/esm/contracts/ContractAdapter.js +1 -1
  138. package/lib/esm/contracts/ContractContext.js +1 -1
  139. package/lib/esm/contracts/ContractPrivateDataAdapter.js +1 -1
  140. package/lib/esm/contracts/FabricConstruction.js +1 -1
  141. package/lib/esm/contracts/FabricContractPaginator.js +1 -1
  142. package/lib/esm/contracts/FabricContractRepository.js +1 -1
  143. package/lib/esm/contracts/FabricContractRepositoryObservableHandler.js +1 -1
  144. package/lib/esm/contracts/FabricContractSequence.js +1 -1
  145. package/lib/esm/contracts/FabricContractStatement.js +1 -1
  146. package/lib/esm/contracts/PrivateSequence.js +1 -1
  147. package/lib/esm/contracts/crud/crud-contract.js +1 -1
  148. package/lib/esm/contracts/crud/index.js +1 -1
  149. package/lib/esm/contracts/crud/serialized-crud-contract.js +1 -1
  150. package/lib/esm/contracts/erc20/erc20contract.js +1 -1
  151. package/lib/esm/contracts/erc20/index.js +1 -1
  152. package/lib/esm/contracts/erc20/models.js +1 -1
  153. package/lib/esm/contracts/index.js +1 -1
  154. package/lib/esm/contracts/logging.js +1 -1
  155. package/lib/esm/contracts/overrides.js +1 -1
  156. package/lib/esm/contracts/private-data.js +1 -1
  157. package/lib/esm/contracts/types.js +1 -1
  158. package/lib/esm/contracts/uuid.js +1 -1
  159. package/lib/esm/index.js +1 -1
  160. package/lib/esm/shared/ClientSerializer.js +1 -1
  161. package/lib/esm/shared/DeterministicSerializer.js +1 -1
  162. package/lib/esm/shared/SimpleDeterministicSerializer.js +1 -1
  163. package/lib/esm/shared/constants.js +1 -1
  164. package/lib/esm/shared/decorators.js +1 -1
  165. package/lib/esm/shared/erc20/erc20-constants.js +1 -1
  166. package/lib/esm/shared/erc20/index.js +1 -1
  167. package/lib/esm/shared/errors.js +1 -1
  168. package/lib/esm/shared/events.js +1 -1
  169. package/lib/esm/shared/fabric-types.js +1 -1
  170. package/lib/esm/shared/index.js +1 -1
  171. package/lib/esm/shared/interfaces/Checkable.js +1 -1
  172. package/lib/esm/shared/interfaces/index.js +1 -1
  173. package/lib/esm/shared/math.js +1 -1
  174. package/lib/esm/shared/model/FabricBaseModel.js +1 -1
  175. package/lib/esm/shared/model/FabricIdentifiedBaseModel.js +1 -1
  176. package/lib/esm/shared/model/Identity.js +1 -1
  177. package/lib/esm/shared/model/IdentityCredentials.js +1 -1
  178. package/lib/esm/shared/model/index.js +1 -1
  179. package/lib/esm/shared/overrides/Model.js +1 -1
  180. package/lib/esm/shared/overrides/index.js +1 -1
  181. package/lib/esm/shared/overrides/overrides.js +1 -1
  182. package/lib/esm/shared/types.js +1 -1
  183. package/lib/esm/version.d.ts +1 -1
  184. package/lib/esm/version.js +2 -2
  185. package/lib/index.cjs +1 -1
  186. package/lib/shared/ClientSerializer.cjs +1 -1
  187. package/lib/shared/DeterministicSerializer.cjs +1 -1
  188. package/lib/shared/SimpleDeterministicSerializer.cjs +1 -1
  189. package/lib/shared/constants.cjs +1 -1
  190. package/lib/shared/decorators.cjs +1 -1
  191. package/lib/shared/erc20/erc20-constants.cjs +1 -1
  192. package/lib/shared/erc20/index.cjs +1 -1
  193. package/lib/shared/errors.cjs +1 -1
  194. package/lib/shared/events.cjs +1 -1
  195. package/lib/shared/fabric-types.cjs +1 -1
  196. package/lib/shared/index.cjs +1 -1
  197. package/lib/shared/interfaces/Checkable.cjs +1 -1
  198. package/lib/shared/interfaces/index.cjs +1 -1
  199. package/lib/shared/math.cjs +1 -1
  200. package/lib/shared/model/FabricBaseModel.cjs +1 -1
  201. package/lib/shared/model/FabricIdentifiedBaseModel.cjs +1 -1
  202. package/lib/shared/model/Identity.cjs +1 -1
  203. package/lib/shared/model/IdentityCredentials.cjs +1 -1
  204. package/lib/shared/model/index.cjs +1 -1
  205. package/lib/shared/overrides/Model.cjs +1 -1
  206. package/lib/shared/overrides/index.cjs +1 -1
  207. package/lib/shared/overrides/overrides.cjs +1 -1
  208. package/lib/shared/types.cjs +1 -1
  209. package/lib/version.cjs +2 -2
  210. package/lib/version.d.ts +1 -1
  211. package/package.json +1 -1
  212. package/dist/for-fabric.cjs.map +0 -1
  213. package/dist/for-fabric.js.map +0 -1
  214. package/lib/bin/cli.js.map +0 -1
  215. package/lib/cli-module.js.map +0 -1
  216. package/lib/cli-utils.js.map +0 -1
  217. package/lib/client/FabricClientAdapter.js.map +0 -1
  218. package/lib/client/FabricClientDispatch.js.map +0 -1
  219. package/lib/client/FabricClientPaginator.js.map +0 -1
  220. package/lib/client/FabricClientRepository.js.map +0 -1
  221. package/lib/client/FabricClientStatement.js.map +0 -1
  222. package/lib/client/collections/generation.js.map +0 -1
  223. package/lib/client/collections/index.js.map +0 -1
  224. package/lib/client/constants.js.map +0 -1
  225. package/lib/client/crypto.js.map +0 -1
  226. package/lib/client/erc20/FabricERC20ClientRepository.js.map +0 -1
  227. package/lib/client/erc20/index.js.map +0 -1
  228. package/lib/client/fabric-fs.js.map +0 -1
  229. package/lib/client/fabric-hsm.js.map +0 -1
  230. package/lib/client/index.js.map +0 -1
  231. package/lib/client/indexes/generation.js.map +0 -1
  232. package/lib/client/indexes/index.js.map +0 -1
  233. package/lib/client/logging.js.map +0 -1
  234. package/lib/client/services/FabricEnrollmentService.js.map +0 -1
  235. package/lib/client/services/FabricIdentityService.js.map +0 -1
  236. package/lib/client/services/RegistrationRequestBuilder.js.map +0 -1
  237. package/lib/client/services/constants.js.map +0 -1
  238. package/lib/client/services/index.js.map +0 -1
  239. package/lib/client/types.js.map +0 -1
  240. package/lib/client/utils.js.map +0 -1
  241. package/lib/contract/Address.js.map +0 -1
  242. package/lib/contract/AddressContract.js.map +0 -1
  243. package/lib/contract/BatchContract.js.map +0 -1
  244. package/lib/contract/OtherProductContract.js.map +0 -1
  245. package/lib/contract/OtherProductSharedContract.js.map +0 -1
  246. package/lib/contract/Product.js.map +0 -1
  247. package/lib/contract/ProductContract.js.map +0 -1
  248. package/lib/contract/SegregatedPrivateDocumentContract.js.map +0 -1
  249. package/lib/contract/SegregatedSharedDocumentContract.js.map +0 -1
  250. package/lib/contract/User.js.map +0 -1
  251. package/lib/contract/UserContract.js.map +0 -1
  252. package/lib/contract/index.js.map +0 -1
  253. package/lib/contract/models/Audit.js.map +0 -1
  254. package/lib/contract/models/BaseIdentifiedModel.js.map +0 -1
  255. package/lib/contract/models/BaseModel.js.map +0 -1
  256. package/lib/contract/models/Batch.js.map +0 -1
  257. package/lib/contract/models/Leaflet.js.map +0 -1
  258. package/lib/contract/models/LeafletFile.js.map +0 -1
  259. package/lib/contract/models/Market.js.map +0 -1
  260. package/lib/contract/models/OtherProduct.js.map +0 -1
  261. package/lib/contract/models/OtherProductShared.js.map +0 -1
  262. package/lib/contract/models/Product.js.map +0 -1
  263. package/lib/contract/models/ProductStrength.js.map +0 -1
  264. package/lib/contract/models/SegregatedDocument.js.map +0 -1
  265. package/lib/contract/models/constants.js.map +0 -1
  266. package/lib/contract/models/decorators.js.map +0 -1
  267. package/lib/contract/models/gtin.js.map +0 -1
  268. package/lib/contracts/ContractAdapter.js.map +0 -1
  269. package/lib/contracts/ContractContext.js.map +0 -1
  270. package/lib/contracts/ContractPrivateDataAdapter.js.map +0 -1
  271. package/lib/contracts/FabricConstruction.js.map +0 -1
  272. package/lib/contracts/FabricContractPaginator.js.map +0 -1
  273. package/lib/contracts/FabricContractRepository.js.map +0 -1
  274. package/lib/contracts/FabricContractRepositoryObservableHandler.js.map +0 -1
  275. package/lib/contracts/FabricContractSequence.js.map +0 -1
  276. package/lib/contracts/FabricContractStatement.js.map +0 -1
  277. package/lib/contracts/PrivateSequence.js.map +0 -1
  278. package/lib/contracts/crud/crud-contract.js.map +0 -1
  279. package/lib/contracts/crud/index.js.map +0 -1
  280. package/lib/contracts/crud/serialized-crud-contract.js.map +0 -1
  281. package/lib/contracts/erc20/erc20contract.js.map +0 -1
  282. package/lib/contracts/erc20/index.js.map +0 -1
  283. package/lib/contracts/erc20/models.js.map +0 -1
  284. package/lib/contracts/index.js.map +0 -1
  285. package/lib/contracts/logging.js.map +0 -1
  286. package/lib/contracts/overrides.js.map +0 -1
  287. package/lib/contracts/private-data.js.map +0 -1
  288. package/lib/contracts/types.js.map +0 -1
  289. package/lib/contracts/uuid.js.map +0 -1
  290. package/lib/esm/bin/cli.js.map +0 -1
  291. package/lib/esm/cli-module.js.map +0 -1
  292. package/lib/esm/cli-utils.js.map +0 -1
  293. package/lib/esm/client/FabricClientAdapter.js.map +0 -1
  294. package/lib/esm/client/FabricClientDispatch.js.map +0 -1
  295. package/lib/esm/client/FabricClientPaginator.js.map +0 -1
  296. package/lib/esm/client/FabricClientRepository.js.map +0 -1
  297. package/lib/esm/client/FabricClientStatement.js.map +0 -1
  298. package/lib/esm/client/collections/generation.js.map +0 -1
  299. package/lib/esm/client/collections/index.js.map +0 -1
  300. package/lib/esm/client/constants.js.map +0 -1
  301. package/lib/esm/client/crypto.js.map +0 -1
  302. package/lib/esm/client/erc20/FabricERC20ClientRepository.js.map +0 -1
  303. package/lib/esm/client/erc20/index.js.map +0 -1
  304. package/lib/esm/client/fabric-fs.js.map +0 -1
  305. package/lib/esm/client/fabric-hsm.js.map +0 -1
  306. package/lib/esm/client/index.js.map +0 -1
  307. package/lib/esm/client/indexes/generation.js.map +0 -1
  308. package/lib/esm/client/indexes/index.js.map +0 -1
  309. package/lib/esm/client/logging.js.map +0 -1
  310. package/lib/esm/client/services/FabricEnrollmentService.js.map +0 -1
  311. package/lib/esm/client/services/FabricIdentityService.js.map +0 -1
  312. package/lib/esm/client/services/RegistrationRequestBuilder.js.map +0 -1
  313. package/lib/esm/client/services/constants.js.map +0 -1
  314. package/lib/esm/client/services/index.js.map +0 -1
  315. package/lib/esm/client/types.js.map +0 -1
  316. package/lib/esm/client/utils.js.map +0 -1
  317. package/lib/esm/contract/Address.js.map +0 -1
  318. package/lib/esm/contract/AddressContract.js.map +0 -1
  319. package/lib/esm/contract/BatchContract.js.map +0 -1
  320. package/lib/esm/contract/OtherProductContract.js.map +0 -1
  321. package/lib/esm/contract/OtherProductSharedContract.js.map +0 -1
  322. package/lib/esm/contract/Product.js.map +0 -1
  323. package/lib/esm/contract/ProductContract.js.map +0 -1
  324. package/lib/esm/contract/SegregatedPrivateDocumentContract.js.map +0 -1
  325. package/lib/esm/contract/SegregatedSharedDocumentContract.js.map +0 -1
  326. package/lib/esm/contract/User.js.map +0 -1
  327. package/lib/esm/contract/UserContract.js.map +0 -1
  328. package/lib/esm/contract/index.js.map +0 -1
  329. package/lib/esm/contract/models/Audit.js.map +0 -1
  330. package/lib/esm/contract/models/BaseIdentifiedModel.js.map +0 -1
  331. package/lib/esm/contract/models/BaseModel.js.map +0 -1
  332. package/lib/esm/contract/models/Batch.js.map +0 -1
  333. package/lib/esm/contract/models/Leaflet.js.map +0 -1
  334. package/lib/esm/contract/models/LeafletFile.js.map +0 -1
  335. package/lib/esm/contract/models/Market.js.map +0 -1
  336. package/lib/esm/contract/models/OtherProduct.js.map +0 -1
  337. package/lib/esm/contract/models/OtherProductShared.js.map +0 -1
  338. package/lib/esm/contract/models/Product.js.map +0 -1
  339. package/lib/esm/contract/models/ProductStrength.js.map +0 -1
  340. package/lib/esm/contract/models/SegregatedDocument.js.map +0 -1
  341. package/lib/esm/contract/models/constants.js.map +0 -1
  342. package/lib/esm/contract/models/decorators.js.map +0 -1
  343. package/lib/esm/contract/models/gtin.js.map +0 -1
  344. package/lib/esm/contracts/ContractAdapter.js.map +0 -1
  345. package/lib/esm/contracts/ContractContext.js.map +0 -1
  346. package/lib/esm/contracts/ContractPrivateDataAdapter.js.map +0 -1
  347. package/lib/esm/contracts/FabricConstruction.js.map +0 -1
  348. package/lib/esm/contracts/FabricContractPaginator.js.map +0 -1
  349. package/lib/esm/contracts/FabricContractRepository.js.map +0 -1
  350. package/lib/esm/contracts/FabricContractRepositoryObservableHandler.js.map +0 -1
  351. package/lib/esm/contracts/FabricContractSequence.js.map +0 -1
  352. package/lib/esm/contracts/FabricContractStatement.js.map +0 -1
  353. package/lib/esm/contracts/PrivateSequence.js.map +0 -1
  354. package/lib/esm/contracts/crud/crud-contract.js.map +0 -1
  355. package/lib/esm/contracts/crud/index.js.map +0 -1
  356. package/lib/esm/contracts/crud/serialized-crud-contract.js.map +0 -1
  357. package/lib/esm/contracts/erc20/erc20contract.js.map +0 -1
  358. package/lib/esm/contracts/erc20/index.js.map +0 -1
  359. package/lib/esm/contracts/erc20/models.js.map +0 -1
  360. package/lib/esm/contracts/index.js.map +0 -1
  361. package/lib/esm/contracts/logging.js.map +0 -1
  362. package/lib/esm/contracts/overrides.js.map +0 -1
  363. package/lib/esm/contracts/private-data.js.map +0 -1
  364. package/lib/esm/contracts/types.js.map +0 -1
  365. package/lib/esm/contracts/uuid.js.map +0 -1
  366. package/lib/esm/index.js.map +0 -1
  367. package/lib/esm/shared/ClientSerializer.js.map +0 -1
  368. package/lib/esm/shared/DeterministicSerializer.js.map +0 -1
  369. package/lib/esm/shared/SimpleDeterministicSerializer.js.map +0 -1
  370. package/lib/esm/shared/constants.js.map +0 -1
  371. package/lib/esm/shared/decorators.js.map +0 -1
  372. package/lib/esm/shared/erc20/erc20-constants.js.map +0 -1
  373. package/lib/esm/shared/erc20/index.js.map +0 -1
  374. package/lib/esm/shared/errors.js.map +0 -1
  375. package/lib/esm/shared/events.js.map +0 -1
  376. package/lib/esm/shared/fabric-types.js.map +0 -1
  377. package/lib/esm/shared/index.js.map +0 -1
  378. package/lib/esm/shared/interfaces/Checkable.js.map +0 -1
  379. package/lib/esm/shared/interfaces/index.js.map +0 -1
  380. package/lib/esm/shared/math.js.map +0 -1
  381. package/lib/esm/shared/model/FabricBaseModel.js.map +0 -1
  382. package/lib/esm/shared/model/FabricIdentifiedBaseModel.js.map +0 -1
  383. package/lib/esm/shared/model/Identity.js.map +0 -1
  384. package/lib/esm/shared/model/IdentityCredentials.js.map +0 -1
  385. package/lib/esm/shared/model/index.js.map +0 -1
  386. package/lib/esm/shared/overrides/Model.js.map +0 -1
  387. package/lib/esm/shared/overrides/index.js.map +0 -1
  388. package/lib/esm/shared/overrides/overrides.js.map +0 -1
  389. package/lib/esm/shared/types.js.map +0 -1
  390. package/lib/esm/version.js.map +0 -1
  391. package/lib/index.js.map +0 -1
  392. package/lib/shared/ClientSerializer.js.map +0 -1
  393. package/lib/shared/DeterministicSerializer.js.map +0 -1
  394. package/lib/shared/SimpleDeterministicSerializer.js.map +0 -1
  395. package/lib/shared/constants.js.map +0 -1
  396. package/lib/shared/decorators.js.map +0 -1
  397. package/lib/shared/erc20/erc20-constants.js.map +0 -1
  398. package/lib/shared/erc20/index.js.map +0 -1
  399. package/lib/shared/errors.js.map +0 -1
  400. package/lib/shared/events.js.map +0 -1
  401. package/lib/shared/fabric-types.js.map +0 -1
  402. package/lib/shared/index.js.map +0 -1
  403. package/lib/shared/interfaces/Checkable.js.map +0 -1
  404. package/lib/shared/interfaces/index.js.map +0 -1
  405. package/lib/shared/math.js.map +0 -1
  406. package/lib/shared/model/FabricBaseModel.js.map +0 -1
  407. package/lib/shared/model/FabricIdentifiedBaseModel.js.map +0 -1
  408. package/lib/shared/model/Identity.js.map +0 -1
  409. package/lib/shared/model/IdentityCredentials.js.map +0 -1
  410. package/lib/shared/model/index.js.map +0 -1
  411. package/lib/shared/overrides/Model.js.map +0 -1
  412. package/lib/shared/overrides/index.js.map +0 -1
  413. package/lib/shared/overrides/overrides.js.map +0 -1
  414. package/lib/shared/types.js.map +0 -1
  415. package/lib/version.js.map +0 -1
package/lib/bin/cli.cjs CHANGED
@@ -1,3 +1,4 @@
1
+ #!/usr/bin/env node
1
2
  "use strict";
2
3
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
4
  return (mod && mod.__esModule) ? mod : { "default": mod };
@@ -5,4 +6,4 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
6
  Object.defineProperty(exports, "__esModule", { value: true });
6
7
  const cli_module_1 = __importDefault(require("./../cli-module.cjs"));
7
8
  (0, cli_module_1.default)().parse(process.argv);
8
- //# sourceMappingURL=cli.js.map
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Jpbi9jbGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxxRUFBbUM7QUFFbkMsSUFBQSxvQkFBTSxHQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBmYWJyaWMgZnJvbSBcIi4uL2NsaS1tb2R1bGVcIjtcblxuZmFicmljKCkucGFyc2UocHJvY2Vzcy5hcmd2KTtcbiJdfQ==
@@ -223,80 +223,89 @@ const extractCollections = new commander_1.Command()
223
223
  log.info(`No shared, private, or mirrored models found to extract collections`);
224
224
  return;
225
225
  }
226
- const cols = await Promise.all(injectableModels.map(async (clazz) => {
227
- const tableName = decorator_validation_1.Model.tableName(clazz);
228
- const meta = decoration_1.Metadata.get(clazz);
229
- const mirrorMeta = decorator_validation_1.Model.mirroredAt(clazz);
230
- console.log(tableName);
231
- const collections = {};
232
- for (const msp of mspIds) {
233
- collections[msp] = await (0, index_1.extractCollections)(clazz, [msp, mainMspId], {},
234
- // {
235
- // sharedCols: Object.assign({}, overrides.sharedCols),
236
- // privateCols: Object.assign({}, overrides.privateCols),
237
- // },
238
- !!mirrorMeta);
239
- }
240
- let mirrorCollection = undefined;
241
- if (mirrorMeta) {
242
- collections[mainMspId] = collections[mainMspId] || {};
243
- Object.keys(collections).forEach((msp) => {
244
- collections[mainMspId].privates = collections[msp].privates?.filter((p) => {
245
- if (p.name !== mirrorMeta.resolver)
246
- return true;
247
- mirrorCollection = p;
248
- return false;
226
+ async function getCols(mspIdsList) {
227
+ const cols = await Promise.all(injectableModels.map(async (clazz) => {
228
+ const tableName = decorator_validation_1.Model.tableName(clazz);
229
+ const meta = decoration_1.Metadata.get(clazz);
230
+ const mirrorMeta = decorator_validation_1.Model.mirroredAt(clazz);
231
+ console.log(tableName);
232
+ const collections = {};
233
+ for (const msp of mspIdsList || mspIds || []) {
234
+ collections[msp] = await (0, index_1.extractCollections)(clazz, [msp, mainMspId], {},
235
+ // {
236
+ // sharedCols: Object.assign({}, overrides.sharedCols),
237
+ // privateCols: Object.assign({}, overrides.privateCols),
238
+ // },
239
+ !!mirrorMeta);
240
+ }
241
+ let mirrorCollection = undefined;
242
+ if (mirrorMeta) {
243
+ collections[mainMspId] = collections[mainMspId] || {};
244
+ Object.keys(collections).forEach((msp) => {
245
+ collections[mainMspId].privates = collections[msp].privates?.filter((p) => {
246
+ if (p.name !== mirrorMeta.resolver)
247
+ return true;
248
+ mirrorCollection = p;
249
+ return false;
250
+ });
249
251
  });
250
- });
251
- }
252
- const privatesCount = Object.values(collections)
253
- .map((c) => c.privates)
254
- .flat().length;
255
- if (privatesCount)
256
- log
257
- .for(decorator_validation_1.Model.tableName(clazz))
258
- .info(`Found ${privatesCount} private collections to create`);
259
- const sharedCount = Object.values(collections)
260
- .map((c) => c.shared)
261
- .flat().length;
262
- log
263
- .for(decorator_validation_1.Model.tableName(clazz))
264
- .info(`Found ${sharedCount} shared collections to create`);
265
- if (mirrorCollection)
266
- log
267
- .for(decorator_validation_1.Model.tableName(clazz))
268
- .info(`Found one mirror collection ${mirrorMeta?.resolver}`);
269
- const colList = Object.values(collections)
270
- .map((c) => [...(c.privates || []), ...(c.shared || [])])
271
- .flat();
272
- let indexes = [];
273
- let designDocs = [];
274
- if (colList.length) {
275
- log
276
- .for(decorator_validation_1.Model.tableName(clazz))
277
- .verbose(`generating indexes for collections`);
278
- indexes = (0, indexes_1.generateModelIndexes)(clazz);
279
- log
280
- .for(decorator_validation_1.Model.tableName(clazz))
281
- .info(`found ${indexes.length} indexes`);
282
- designDocs = (0, indexes_1.generateModelDesignDocs)(clazz);
252
+ }
253
+ const privatesCount = Object.values(collections)
254
+ .map((c) => c.privates)
255
+ .flat().length;
256
+ if (privatesCount)
257
+ log
258
+ .for(decorator_validation_1.Model.tableName(clazz))
259
+ .info(`Found ${privatesCount} private collections to create`);
260
+ const sharedCount = Object.values(collections)
261
+ .map((c) => c.shared)
262
+ .flat().length;
283
263
  log
284
264
  .for(decorator_validation_1.Model.tableName(clazz))
285
- .info(`found ${designDocs.length} design docs`);
286
- }
287
- return {
288
- indexes,
289
- designDocs,
290
- collections: colList,
291
- mirror: mirrorCollection,
292
- };
293
- }));
265
+ .info(`Found ${sharedCount} shared collections to create`);
266
+ if (mirrorCollection)
267
+ log
268
+ .for(decorator_validation_1.Model.tableName(clazz))
269
+ .info(`Found one mirror collection ${mirrorMeta?.resolver}`);
270
+ const colList = Object.values(collections)
271
+ .map((c) => [...(c.privates || []), ...(c.shared || [])])
272
+ .flat();
273
+ let indexes = [];
274
+ let designDocs = [];
275
+ if (colList.length) {
276
+ log
277
+ .for(decorator_validation_1.Model.tableName(clazz))
278
+ .verbose(`generating indexes for collections`);
279
+ indexes = (0, indexes_1.generateModelIndexes)(clazz);
280
+ log
281
+ .for(decorator_validation_1.Model.tableName(clazz))
282
+ .info(`found ${indexes.length} indexes`);
283
+ designDocs = (0, indexes_1.generateModelDesignDocs)(clazz);
284
+ log
285
+ .for(decorator_validation_1.Model.tableName(clazz))
286
+ .info(`found ${designDocs.length} design docs`);
287
+ }
288
+ return {
289
+ indexes,
290
+ designDocs,
291
+ collections: colList,
292
+ mirror: mirrorCollection,
293
+ };
294
+ }));
295
+ return cols;
296
+ }
297
+ const cols = await getCols();
298
+ const onlyMirror = await getCols([mainMspId]);
294
299
  const collectionsTo = [
300
+ ...onlyMirror.filter((c) => c.mirror).map((c) => c.mirror),
295
301
  ...cols.map((c) => c.collections).flat(),
296
302
  ...cols.filter((c) => c.mirror).map((c) => c.mirror),
297
303
  ];
298
- if (collectionsTo.length) {
299
- (0, index_1.writeCollections)(collectionsTo, outDir);
304
+ const uniqueByCollection = [
305
+ ...new Map(collectionsTo.map((item) => [item.name, item])).values(),
306
+ ];
307
+ if (uniqueByCollection.length) {
308
+ (0, index_1.writeCollections)(uniqueByCollection, outDir);
300
309
  const metaCollectionsConfig = path_1.default.join(outDir, "META-INF", "collections_config.json");
301
310
  const contractCollectionsConfig = path_1.default.join(outDir, "collections_config.json");
302
311
  fs_1.default.copyFileSync(metaCollectionsConfig, contractCollectionsConfig);
@@ -407,4 +416,4 @@ fabricCmd.addCommand(extractCollections);
407
416
  function fabric() {
408
417
  return fabricCmd;
409
418
  }
410
- //# sourceMappingURL=cli-module.js.map
419
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLW1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9jbGktbW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBcW1CQSx5QkFFQztBQXZtQkQseUNBQW9DO0FBQ3BDLCtDQUEwRDtBQUMxRCxpREFBeUM7QUFDekMsNENBQW9CO0FBQ3BCLGdEQUF3QjtBQUN4QixtQ0FBZ0M7QUFDaEMsNEVBQTZDO0FBQzdDLGtGQUFtRDtBQUNuRCwyREFBNEU7QUFDNUUsd0RBTzBCO0FBQzFCLHlFQUF1RDtBQUN2RCwrQ0FRcUI7QUFDckIsd0NBQTRCO0FBQzVCLDREQUE0QjtBQUM1QiwwREFLb0M7QUFFcEMscURBQWdEO0FBR2hELE1BQU0sTUFBTSxHQUFHLGlCQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBRXJDLE1BQU0sY0FBYyxHQUFHLElBQUksbUJBQU8sRUFBRTtLQUNqQyxJQUFJLENBQUMsa0JBQWtCLENBQUM7S0FDeEIsV0FBVyxDQUFDLDJCQUEyQixDQUFDO0tBQ3hDLE1BQU0sQ0FBQyxPQUFPLEVBQUUseUNBQXlDLEVBQUUsS0FBSyxDQUFDO0tBQ2pFLE1BQU0sQ0FBQyxTQUFTLEVBQUUsbUNBQW1DLEVBQUUsS0FBSyxDQUFDO0tBQzdELE1BQU0sQ0FDTCxTQUFTLEVBQ1QscURBQXFELEVBQ3JELEtBQUssQ0FDTjtLQUNBLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsaUJBQWlCLENBQUM7S0FDN0QsTUFBTSxDQUFDLFVBQVUsRUFBRSwwQ0FBMEMsRUFBRSxLQUFLLENBQUM7S0FDckUsTUFBTSxDQUNMLDJCQUEyQixFQUMzQixtRUFBbUUsRUFDbkUsaUJBQWlCLENBQ2xCO0tBQ0EsTUFBTSxDQUNMLHdCQUF3QixFQUN4QixzQkFBc0IsRUFDdEIsZ0NBQWdDLENBQ2pDO0tBQ0EsTUFBTSxDQUFDLHVCQUF1QixFQUFFLGlDQUFpQyxFQUFFLEtBQUssQ0FBQztLQUN6RSxNQUFNLENB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LFNBQVMsR0FBRyxJQUFJLG1CQUFPLEVBQUU7S0FDNUIsSUFBSSxDQUFDLFlBQVksQ0FBQztLQUNsQixPQUFPLENBQUMsUUFBUSxDQUFDO0tBQ2pCLFdBQVcsQ0FDVixtRUFBbUUsQ0FDcEUsQ0FBQztBQUVKLFNBQVMsQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDckMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUNyQyxTQUFTLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ2xDLFNBQVMsQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDckMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0FBQ3hDLFNBQVMsQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQUV6QyxTQUF3QixNQUFNO0lBQzVCLE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tYW5kIH0gZnJvbSBcImNvbW1hbmRlclwiO1xuaW1wb3J0IHsgTG9nZ2luZywgdG9QYXNjYWxDYXNlIH0gZnJvbSBcIkBkZWNhZi10cy9sb2dnaW5nXCI7XG5pbXBvcnQgeyBleGVjU3luYyB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgZnMgZnJvbSBcImZzXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgcm9sbHVwIH0gZnJvbSBcInJvbGx1cFwiO1xuaW1wb3J0IHJlcGxhY2UgZnJvbSBcIkByb2xsdXAvcGx1Z2luLXJlcGxhY2VcIjtcbmltcG9ydCB0eXBlc2NyaXB0IGZyb20gXCJAcm9sbHVwL3BsdWdpbi10eXBlc2NyaXB0XCI7XG5pbXBvcnQgeyBJbnRlcm5hbEVycm9yLCBTZXJpYWxpemF0aW9uRXJyb3IgfSBmcm9tIFwiQGRlY2FmLXRzL2RiLWRlY29yYXRvcnNcIjtcbmltcG9ydCB7XG4gIGdlbmVyYXRlTW9kZWxEZXNpZ25Eb2NzLFxuICBnZW5lcmF0ZU1vZGVsSW5kZXhlcyxcbiAgcmVhZE1vZGVsRmlsZSxcbiAgcmVhZE1vZGVsRm9sZGVycyxcbiAgd3JpdGVEZXNpZ25Eb2NzLFxuICB3cml0ZUluZGV4ZXMsXG59IGZyb20gXCIuL2NsaWVudC9pbmRleGVzXCI7XG5pbXBvcnQgeyBNb2RlbCB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcbmltcG9ydCB7XG4gIGFwcHJvdmVDb250cmFjdCxcbiAgZW5zdXJlSW5mcmFzdHJ1Y3R1cmVCb290ZWQsXG4gIGluc3RhbGxDb250cmFjdCxcbiAgcGFja2FnZUNvbnRyYWN0LFxuICBjb21taXRDaGFpbmNvZGUsXG4gIGdldENvbnRyYWN0U3RhcnRDb21tYW5kLFxuICBjb21waWxlV2l0aFRzY29uZmlnT3ZlcnJpZGVzLFxufSBmcm9tIFwiLi9jbGktdXRpbHNcIjtcbmltcG9ydCBcIi4vc2hhcmVkL292ZXJyaWRlc1wiO1xuaW1wb3J0IHRzIGZyb20gXCJ0eXBlc2NyaXB0XCI7XG5pbXBvcnQge1xuICBleHRyYWN0Q29sbGVjdGlvbnMgYXMgZXhDb2xsZWN0aW9ucyxcbiAgUHJpdmF0ZUNvbGxlY3Rpb24sXG4gIHdyaXRlQ29sbGVjdGlvbnMsXG4gIHdyaXRlQ29sbGVjdGlvbkRlc2lnbkRvY3MsXG59IGZyb20gXCIuL2NsaWVudC9jb2xsZWN0aW9ucy9pbmRleFwiO1xuaW1wb3J0IHsgQ291Y2hEQkRlc2lnbkRvYywgQ3JlYXRlSW5kZXhSZXF1ZXN0IH0gZnJvbSBcIkBkZWNhZi10cy9mb3ItY291Y2hkYlwiO1xuaW1wb3J0IHsgTWV0YWRhdGEgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRpb25cIjtcbmltcG9ydCB7IG9uIH0gZnJvbSBcImV2ZW50c1wiO1xuXG5jb25zdCBsb2dnZXIgPSBMb2dnaW5nLmZvcihcImZhYnJpY1wiKTtcblxuY29uc3QgY29tcGlsZUNvbW1hbmQgPSBuZXcgQ29tbWFuZCgpXG4gIC5uYW1lKFwiY29tcGlsZS1jb250cmFjdFwiKVxuICAuZGVzY3JpcHRpb24oXCJDcmVhdGVzIGEgZ2xvYmFsIGNvbnRyYWN0XCIpXG4gIC5vcHRpb24oXCItLWRldlwiLCBcImNvbXBpbGVzIGNvbnRyYWN0cyB3aXRob3V0IG1pbmlmaWNhdGlvblwiLCBmYWxzZSlcbiAgLm9wdGlvbihcIi0tZGVidWdcIiwgXCJtYWtlcyBhdHRhY2hpbmcgZGVidWdnZXIgcG9zc2libGVcIiwgZmFsc2UpXG4gIC5vcHRpb24oXG4gICAgXCItLWNjYWFzXCIsXG4gICAgXCJBanVzdHMgdGhlIHBhY2thZ2UgY29tbWFuZHMgdG8gYmUgZGVwbG95ZWQgYXMgY2NhYXNcIixcbiAgICBmYWxzZVxuICApXG4gIC5vcHRpb24oXCItLW5hbWUgPFN0cmluZz5cIiwgXCJjb250cmFjdCBuYW1lXCIsIFwiZ2xvYmFsLWNvbnRyYWN0XCIpXG4gIC5vcHRpb24oXCItLWJ1bmRsZVwiLCBcIkJ1bmRsZXMgd2l0aCByb2xsdXAgaW5zdGVhZCBvZiB1c2luZyB0c2NcIiwgZmFsc2UpXG4gIC5vcHRpb24oXG4gICAgXCItLXRzLWNvbmZpZy1maWxlIDxzdHJpbmc+XCIsXG4gICAgXCJyZWxhdGl2ZSBwYXRoIHRvIHRoZSB0cyBjb25maWcgZmlsZSBiYXNlZCBvbiBjd2Qgb3IgYWJzb2x1dGUgcGF0aFwiLFxuICAgIFwiLi90c2NvbmZpZy5qc29uXCJcbiAgKVxuICAub3B0aW9uKFxuICAgIFwiLS1kZXNjcmlwdGlvbiA8U3RyaW5nPlwiLFxuICAgIFwiY29udHJhY3QgZGVzY3JpcHRpb25cIixcbiAgICBcIkdsb2JhbCBjb250cmFjdCBpbXBsZW1lbnRhdGlvblwiXG4gIClcbiAgLm9wdGlvbihcIi0tc3RyaXAtY29udHJhY3QtbmFtZVwiLCBcInN0cmlwIGNvbnRyYWN0IG5hbWUgZnJvbSBvdXRwdXRcIiwgZmFsc2UpXG4gIC5vcHRpb24oXCItLWlucHV0IDxTdHJpbmc+XCIsIFwiaW5wdXQgZm9sZGVyIGZvciBjb250cmFjdHNcIiwgXCJsaWIvY29udHJhY3RzXCIpXG4gIC5vcHRpb24oXCItLW91dHB1dCA8U3RyaW5nPlwiLCBcIm91dHB1dCBmb2xkZXIgZm9yIGNvbnRyYWN0c1wiLCBcIi4vY29udHJhY3RzXCIpXG4gIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnM6IGFueSkgPT4ge1xuICAgIGNvbnN0IHBrZyA9IEpTT04ucGFyc2UoXG4gICAgICBmcy5yZWFkRmlsZVN5bmMocGF0aC5qb2luKHByb2Nlc3MuY3dkKCksIFwicGFja2FnZS5qc29uXCIpLCBcInV0Zi04XCIpXG4gICAgKTtcblxuICAgIGNvbnN0IHZlcnNpb24gPSBwa2cudmVyc2lvbjtcblxuICAgIGxldCB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWNvbnN0XG4gICAgICBkZXYsXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWNvbnN0XG4gICAgICBkZWJ1ZyxcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItY29uc3RcbiAgICAgIG5hbWUsXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWNvbnN0XG4gICAgICBkZXNjcmlwdGlvbixcbiAgICAgIG91dHB1dCxcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItY29uc3RcbiAgICAgIGlucHV0LFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdFxuICAgICAgc3RyaXBDb250cmFjdE5hbWUsXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWNvbnN0XG4gICAgICBjY2FhcyxcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItY29uc3RcbiAgICAgIGJ1bmRsZSxcblxuICAgICAgdHNDb25maWdGaWxlLFxuICAgIH0gPSBvcHRpb25zO1xuICAgIGNvbnN0IGxvZyA9IGxvZ2dlci5mb3IoXCJjb21waWxlLWNvbnRyYWN0XCIpO1xuICAgIGxvZy5kZWJ1ZyhcbiAgICAgIGBydW5uaW5nIHdpdGggb3B0aW9uczogJHtKU09OLnN0cmluZ2lmeShvcHRpb25zKX0gZm9yICR7cGtnLm5hbWV9IHZlcnNpb24gJHt2ZXJzaW9ufWBcbiAgICApO1xuXG4gICAgdHNDb25maWdGaWxlID0gcGF0aC5pc0Fic29sdXRlKHRzQ29uZmlnRmlsZSlcbiAgICAgID8gdHNDb25maWdGaWxlXG4gICAgICA6IHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCB0c0NvbmZpZ0ZpbGUpO1xuXG4gICAgb3V0cHV0ID0gc3RyaXBDb250cmFjdE5hbWUgPyBvdXRwdXQgOiBwYXRoLmpvaW4ob3V0cHV0LCBuYW1lKTtcbiAgICBsb2cuaW5mbyhgRGVsZXRpbmcgZXhpc3Rpbmcgb3V0cHV0IGZvbGRlciAoaWYgZXhpc3RzKSB1bmRlciAke291dHB1dH1gKTtcbiAgICBleGVjU3luYyhgcm0gLXJmICR7b3V0cHV0fWApO1xuICAgIGlmIChidW5kbGUpIHtcbiAgICAgIGxvZy5pbmZvKGBidW5kbGluZyBjb250cmFjdCBmcm9tICR7aW5wdXR9YCk7XG4gICAgICBjb25zdCBidW5kbGUgPSBhd2FpdCByb2xsdXAoe1xuICAgICAgICBpbnB1dDogYCR7aW5wdXR9L2luZGV4LnRzYCxcbiAgICAgICAgcGx1Z2luczogW1xuICAgICAgICAgIHJlcGxhY2Uoe1xuICAgICAgICAgICAgcHJldmVudEFzc2lnbm1lbnQ6IHRydWUsXG4gICAgICAgICAgICBkZWxpbWl0ZXJzOiBbXCJcIiwgXCJcIl0sXG4gICAgICAgICAgICB2YWx1ZXM6IHsgXCIjI1ZFUlNJT04jI1wiOiB2ZXJzaW9uLCBcIiMjUEFDS0FHRSMjXCI6IHBrZy5uYW1lIH0sXG4gICAgICAgICAgfSksXG4gICAgICAgICAgdHlwZXNjcmlwdCh7XG4gICAgICAgICAgICB0c2NvbmZpZzogdHNDb25maWdGaWxlLFxuICAgICAgICAgICAgY29tcGlsZXJPcHRpb25zOiB7XG4gICAgICAgICAgICAgIG91dERpcjogb3V0cHV0LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1vZHVsZTogXCJlc25leHRcIixcbiAgICAgICAgICAgIGRlY2xhcmF0aW9uOiBmYWxzZSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgXSxcbiAgICAgIH0pO1xuICAgICAgbG9nLmluZm8oXG4gICAgICAgIGB3aXRoaW5nIGNvbnRyYWN0IHRvICR7b3V0cHV0fSB3aXRoIG5hbWUgJHt0b1Bhc2NhbENhc2UobmFtZSl9LmpzYFxuICAgICAgKTtcbiAgICAgIGF3YWl0IGJ1bmRsZS53cml0ZSh7XG4gICAgICAgIGZpbGU6IGAke291dHB1dH0vJHt0b1Bhc2NhbENhc2UobmFtZSl9LmpzYCxcbiAgICAgICAgZm9ybWF0OiBcInVtZFwiLFxuICAgICAgICBuYW1lOiBgJHt0b1Bhc2NhbENhc2UobmFtZSl9LmpzYCxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb21waWxlV2l0aFRzY29uZmlnT3ZlcnJpZGVzKHRzQ29uZmlnRmlsZSwge1xuICAgICAgICBvdXREaXI6IG91dHB1dCxcbiAgICAgICAgbW9kdWxlOiB0cy5Nb2R1bGVLaW5kLkVTTmV4dCxcbiAgICAgICAgZGVjbGFyYXRpb246IGZhbHNlLFxuICAgICAgICBzb3VyY2VNYXA6IGZhbHNlLFxuICAgICAgICAvLyByb290RGlyOiBpbnB1dCxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHNjcmlwdHMgPSB7XG4gICAgICBzdGFydDogZ2V0Q29udHJhY3RTdGFydENvbW1hbmQoZGVidWcsIGNjYWFzKSxcbiAgICAgIFwic3RhcnQ6ZGV2XCI6IFwiZmFicmljLWNoYWluY29kZS1ub2RlIHN0YXJ0IC0tdGxzLmVuYWJsZWQgZmFsc2VcIixcbiAgICAgIFwic3RhcnQ6d2F0Y2hcIjogJ25vZGVtb24gLS1leGVjIFwibnBtIHJ1biBzdGFydDpkZXZcIicsXG4gICAgICBidWlsZDogJ2VjaG8gXCJObyBuZWVkIHRvIGJ1aWxkIHRoZSBjaGFpbmNvZGVcIicsXG4gICAgICBsaW50OiBcImVzbGludCAuIC0tZml4IC0tZXh0IC5qc1wiLFxuICAgIH07XG5cbiAgICBjb25zdCBjb250cmFjdFBhY2thZ2UgPSBwa2c7XG5cbiAgICBjb250cmFjdFBhY2thZ2UubmFtZSA9IG5hbWU7XG4gICAgY29udHJhY3RQYWNrYWdlLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247XG4gICAgY29udHJhY3RQYWNrYWdlLnNjcmlwdHMgPSBzY3JpcHRzO1xuXG4gICAgZGVsZXRlIGNvbnRyYWN0UGFja2FnZS50eXBlO1xuICAgIGRlbGV0ZSBjb250cmFjdFBhY2thZ2UudHlwZXM7XG4gICAgZGVsZXRlIGNvbnRyYWN0UGFja2FnZS5leHBvcnRzO1xuICAgIGNvbnRyYWN0UGFja2FnZS5tYWluID0gYnVuZGxlXG4gICAgICA/IGAke3RvUGFzY2FsQ2FzZShuYW1lKX0uanNgXG4gICAgICA6IGAke2lucHV0fS9pbmRleC5qc2A7XG5cbiAgICBmcy53cml0ZUZpbGVTeW5jKFxuICAgICAgcGF0aC5qb2luKG91dHB1dCwgXCJwYWNrYWdlLmpzb25cIiksXG4gICAgICBKU09OLnN0cmluZ2lmeShjb250cmFjdFBhY2thZ2UpXG4gICAgKTtcblxuICAgIGxvZy5pbmZvKGBJbnN0YWxsaW5nIGFuZCBzaHJpbmt3cmFwcGluZyBkZXBlbmRlbmNpZXNgKTtcbiAgICBleGVjU3luYyhgbnBtIGluc3RhbGxgLCB7IGN3ZDogb3V0cHV0IH0pO1xuICAgIGV4ZWNTeW5jKGBucG0gc2hyaW5rd3JhcGAsIHsgY3dkOiBvdXRwdXQgfSk7XG4gICAgZXhlY1N5bmMoXCJybSAtcmYgbm9kZV9tb2R1bGVzXCIsIHsgY3dkOiBvdXRwdXQgfSk7XG4gICAgbG9nLmluZm8oYGRlbGV0aW5nIHRlbXAgZm9sZGVyc2ApO1xuICAgIGV4ZWNTeW5jKGBybSAtcmYgLi9saWIgJiYgcm0gLXJmIC4vZGlzdGAsIHsgY3dkOiBvdXRwdXQgfSk7XG4gICAgbG9nLmluZm8oXG4gICAgICBgQ29udHJhY3QgJHtuYW1lfSBjb21waWxlZCBzdWNjZXNzZnVsbHkhIGluICR7cGF0aC5yZXNvbHZlKG91dHB1dCl9YFxuICAgICk7XG4gICAgaWYgKGRldikge1xuICAgICAgbG9nLmluZm8oYGRldiBtb2RlIGVuYWJsZWQuIGluc3RhbGxpbmcgZGVwZW5kZW5jaWVzIGZvciBkZWJ1Z2dpbmdgKTtcbiAgICAgIGV4ZWNTeW5jKGBucG0gaW5zdGFsbGAsIHtcbiAgICAgICAgY3dkOiBvdXRwdXQsXG4gICAgICAgIGVudjogeyAuLi5wcm9jZXNzLmVudiwgTk9ERV9FTlY6IFwicHJvZHVjdGlvblwiIH0sXG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuXG5jb25zdCBleHRyYWN0SW5kZXhlcyA9IG5ldyBDb21tYW5kKClcbiAgLmNvbW1hbmQoXCJleHRyYWN0LWluZGV4ZXNcIilcbiAgLm9wdGlvbihcIi0tZmlsZSBbU3RyaW5nXVwiLCBcInRoZSBtb2RlbCBmaWxlXCIpXG4gIC5vcHRpb24oXCItLWZvbGRlciBbU3RyaW5nXVwiLCBcInRoZSBtb2RlbCBmb2xkZXJcIilcbiAgLm9wdGlvbihcIi0tb3V0RGlyIDxTdHJpbmc+XCIsIFwidGhlIG91dGRpci4gc2hvdWxkIG1hdGNoIHlvdXIgY29udHJhY3QgZm9sZGVyXCIpXG4gIC5kZXNjcmlwdGlvbihcbiAgICBcIkNyZWF0ZXMgYSB0aGUgSlNPTiBpbmRleCBmaWxlcyB0byBiZSBzdWJtaXR0ZWQgdG8gYWxvbmcgd2l0aCB0aGUgY29udHJhY3RcIlxuICApXG4gIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnM6IGFueSkgPT4ge1xuICAgIGNvbnN0IHBrZyA9IEpTT04ucGFyc2UoXG4gICAgICBmcy5yZWFkRmlsZVN5bmMocGF0aC5qb2luKHByb2Nlc3MuY3dkKCksIFwicGFja2FnZS5qc29uXCIpLCBcInV0Zi04XCIpXG4gICAgKTtcblxuICAgIGNvbnN0IHZlcnNpb24gPSBwa2cudmVyc2lvbjtcblxuICAgIGNvbnN0IGxvZyA9IGxvZ2dlci5mb3IoXCJleHRyYWN0LWluZGV4ZXNcIik7XG4gICAgbG9nLmRlYnVnKFxuICAgICAgYHJ1bm5pbmcgd2l0aCBvcHRpb25zOiAke0pTT04uc3RyaW5naWZ5KG9wdGlvbnMpfSBmb3IgJHtwa2cubmFtZX0gdmVyc2lvbiAke3ZlcnNpb259YFxuICAgICk7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWNvbnN0XG4gICAgbGV0IHsgZmlsZSwgZm9sZGVyLCBvdXREaXIgfSA9IG9wdGlvbnM7XG5cbiAgICBjb25zdCBtb2RlbHM6IGFueVtdID0gW107XG4gICAgaWYgKGZpbGUpIHtcbiAgICAgIG1vZGVscy5wdXNoKC4uLnJlYWRNb2RlbEZpbGUoZmlsZSkpO1xuICAgIH1cblxuICAgIGlmIChmb2xkZXIpIHtcbiAgICAgIGxvZy5pbmZvKGBMb2FkaW5nIG1vZGVscyBmcm9tICR7Zm9sZGVyfS4uLmApO1xuICAgICAgbW9kZWxzLnB1c2goLi4uKGF3YWl0IHJlYWRNb2RlbEZvbGRlcnMoZm9sZGVyKSkpO1xuICAgIH1cbiAgICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgICBjb25zdCBkZXNpZ25Eb2NzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG5cbiAgICBpZiAoIWZpbGUgJiYgIWZvbGRlcilcbiAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKGBNdXN0IHBhc3MgYSBmaWxlIG9yIGEgZm9sZGVyYCk7XG5cbiAgICBmb3IgKGNvbnN0IG0gb2YgbW9kZWxzKSB7XG4gICAgICBsb2cudmVyYm9zZShgRXh0cmFjdGluZyBpbmRleGVzIGZvciB0YWJsZSAke01vZGVsLnRhYmxlTmFtZShtKX1gKTtcbiAgICAgIGNvbnN0IGluZGV4ZXMgPSBnZW5lcmF0ZU1vZGVsSW5kZXhlcyhtKTtcbiAgICAgIGluZGV4ZXMuZm9yRWFjaCgoaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKGluZGV4Lm5hbWUpIHtcbiAgICAgICAgICByZXN1bHRbaW5kZXgubmFtZV0gPSBpbmRleDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBnZW5lcmF0ZU1vZGVsRGVzaWduRG9jcyhtLCBkZXNpZ25Eb2NzKTtcbiAgICB9XG4gICAgY29uc3QgaW5kZXhlc1RvV3JpdGUgPSBPYmplY3QudmFsdWVzKHJlc3VsdCk7XG4gICAgY29uc3QgZG9jc1RvV3JpdGUgPSBPYmplY3QudmFsdWVzKGRlc2lnbkRvY3MpO1xuICAgIGxvZy52ZXJib3NlKGBGb3VuZCAke2luZGV4ZXNUb1dyaXRlLmxlbmd0aH0gaW5kZXhlcyB0byBjcmVhdGVgKTtcbiAgICBsb2cudmVyYm9zZShgRm91bmQgJHtkb2NzVG9Xcml0ZS5sZW5ndGh9IGRlc2lnbiBkb2NzIHRvIGNyZWF0ZWApO1xuICAgIGxvZy5kZWJ1ZyhgSW5kZXhlczogJHtKU09OLnN0cmluZ2lmeShyZXN1bHQpfWApO1xuICAgIGxvZy5kZWJ1ZyhgRGVzaWduRG9jczogJHtKU09OLnN0cmluZ2lmeShkZXNpZ25Eb2NzKX1gKTtcbiAgICB3cml0ZUluZGV4ZXMoaW5kZXhlc1RvV3JpdGUsIG91dERpcik7XG4gICAgd3JpdGVEZXNpZ25Eb2NzKGRvY3NUb1dyaXRlLCBvdXREaXIpO1xuICB9KTtcblxuY29uc3QgZXh0cmFjdENvbGxlY3Rpb25zID0gbmV3IENvbW1hbmQoKVxuICAuY29tbWFuZChcImV4dHJhY3QtY29sbGVjdGlvbnNcIilcbiAgLm9wdGlvbihcIi0tZmlsZSBbU3RyaW5nXVwiLCBcInRoZSBtb2RlbCBmaWxlXCIpXG4gIC5vcHRpb24oXCItLWZvbGRlciBbU3RyaW5nXVwiLCBcInRoZSBtb2RlbCBmb2xkZXJcIilcbiAgLm9wdGlvbihcIi0tb3V0RGlyIDxTdHJpbmc+XCIsIFwidGhlIG91dGRpci4gc2hvdWxkIG1hdGNoIHlvdXIgY29udHJhY3QgZm9sZGVyXCIpXG4gIC5vcHRpb24oXCItLW1zcElkcyA8U3RyaW5nPlwiLCBcInNpbmdsZSBtc3BJZCBvciBzdHJpbmdpZmllZCBhcnJheVwiKVxuICAub3B0aW9uKFwiLS1tYWluTXNwSWQgPFN0cmluZz5cIiwgXCJzaW5nbGUgbXNwSWRcIilcbiAgLm9wdGlvbihcbiAgICBcIi0tb3ZlcnJpZGVzIFtTdHJpbmddXCIsXG4gICAgXCJzdHJpbmdpZmllZCBvdmVycmlkZSBvYmplY3Qge3JlcXVpcmVkUGVlckNvdW50OiBudW1iZXIsIG1heFBlZXJDb3VudDogbnVtYmVyLCBibG9ja1RvTGl2ZTogbnVtYmVyLCBtZW1iZXJPbmx5UmVhZDogbnVtYmVyLCBtZW1iZXJPbmx5V3JpdGU6IG51bWJlciwgZW5kb3JzZW1lbnRQb2xpY3k6ICB7fX1cIlxuICApXG4gIC5kZXNjcmlwdGlvbihcbiAgICBcIkNyZWF0ZXMgYSB0aGUgSlNPTiBpbmRleCBmaWxlcyB0byBiZSBzdWJtaXR0ZWQgdG8gYWxvbmcgd2l0aCB0aGUgY29udHJhY3RcIlxuICApXG4gIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnM6IGFueSkgPT4ge1xuICAgIGNvbnN0IHBrZyA9IEpTT04ucGFyc2UoXG4gICAgICBmcy5yZWFkRmlsZVN5bmMocGF0aC5qb2luKHByb2Nlc3MuY3dkKCksIFwicGFja2FnZS5qc29uXCIpLCBcInV0Zi04XCIpXG4gICAgKTtcblxuICAgIGNvbnN0IHZlcnNpb24gPSBwa2cudmVyc2lvbjtcblxuICAgIGNvbnN0IGxvZyA9IGxvZ2dlci5mb3IoXCJleHRyYWN0LWNvbGxlY3Rpb25zXCIpO1xuICAgIGxvZy5kZWJ1ZyhcbiAgICAgIGBydW5uaW5nIHdpdGggb3B0aW9uczogJHtKU09OLnN0cmluZ2lmeShvcHRpb25zKX0gZm9yICR7cGtnLm5hbWV9IHZlcnNpb24gJHt2ZXJzaW9ufWBcbiAgICApO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdFxuICAgIGxldCB7IGZpbGUsIGZvbGRlciwgb3V0RGlyLCBtc3BJZHMsIG92ZXJyaWRlcywgbWFpbk1zcElkIH0gPSBvcHRpb25zO1xuXG4gICAgdHJ5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIG1zcElkcyA9IG1zcElkcyA/IEpTT04ucGFyc2UobXNwSWRzKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgICAvLyAgZG8gbm90aGluZ1xuICAgICAgfVxuICAgICAgb3ZlcnJpZGVzID0gb3ZlcnJpZGVzXG4gICAgICAgID8gSlNPTi5wYXJzZShvdmVycmlkZXMpXG4gICAgICAgIDogeyBwcml2YXRlQ29sczoge30sIHNoYXJlZENvbHM6IHt9IH07XG4gICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgdGhyb3cgbmV3IFNlcmlhbGl6YXRpb25FcnJvcihcbiAgICAgICAgYFVuYWJsZSB0byBleHRyYWN0IG1zcGlkcyBvciBvdmVycmlkZXM6ICAke2V9YFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBtb2RlbHM6IGFueVtdID0gW107XG4gICAgaWYgKGZpbGUpIHtcbiAgICAgIG1vZGVscy5wdXNoKC4uLnJlYWRNb2RlbEZpbGUoZmlsZSkpO1xuICAgIH1cblxuICAgIGlmIChmb2xkZXIpIHtcbiAgICAgIGxvZy5pbmZvKGBMb2FkaW5nIG1vZGVscyBmcm9tICR7Zm9sZGVyfS4uLmApO1xuICAgICAgbW9kZWxzLnB1c2goLi4uKGF3YWl0IHJlYWRNb2RlbEZvbGRlcnMoZm9sZGVyKSkpO1xuICAgIH1cblxuICAgIGlmICghZmlsZSAmJiAhZm9sZGVyKVxuICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoYE11c3QgcGFzcyBhIGZpbGUgb3IgYSBmb2xkZXJgKTtcblxuICAgIGNvbnN0IGluamVjdGFibGVNb2RlbHMgPSBtb2RlbHMuZmlsdGVyKFxuICAgICAgKG1vZGVsKSA9PlxuICAgICAgICBNb2RlbC5pc1NoYXJlZChtb2RlbCkgfHxcbiAgICAgICAgTW9kZWwuaXNQcml2YXRlKG1vZGVsKSB8fFxuICAgICAgICAhIU1vZGVsLm1pcnJvcmVkQXQobW9kZWwpXG4gICAgKTtcbiAgICBpZiAoIWluamVjdGFibGVNb2RlbHMubGVuZ3RoKSB7XG4gICAgICBsb2cuaW5mbyhcbiAgICAgICAgYE5vIHNoYXJlZCwgcHJpdmF0ZSwgb3IgbWlycm9yZWQgbW9kZWxzIGZvdW5kIHRvIGV4dHJhY3QgY29sbGVjdGlvbnNgXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGFzeW5jIGZ1bmN0aW9uIGdldENvbHMobXNwSWRzTGlzdD86IHN0cmluZ1tdKSB7XG4gICAgICBjb25zdCBjb2xzOiB7XG4gICAgICAgIGluZGV4ZXM6IENyZWF0ZUluZGV4UmVxdWVzdFtdO1xuICAgICAgICBkZXNpZ25Eb2NzOiBDb3VjaERCRGVzaWduRG9jW107XG4gICAgICAgIG1pcnJvcj86IFByaXZhdGVDb2xsZWN0aW9uO1xuICAgICAgICBjb2xsZWN0aW9uczogUHJpdmF0ZUNvbGxlY3Rpb25bXTtcbiAgICAgIH1bXSA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICBpbmplY3RhYmxlTW9kZWxzLm1hcChhc3luYyAoY2xhenopID0+IHtcbiAgICAgICAgICBjb25zdCB0YWJsZU5hbWUgPSBNb2RlbC50YWJsZU5hbWUoY2xhenopO1xuICAgICAgICAgIGNvbnN0IG1ldGEgPSBNZXRhZGF0YS5nZXQoY2xhenopO1xuICAgICAgICAgIGNvbnN0IG1pcnJvck1ldGEgPSBNb2RlbC5taXJyb3JlZEF0KGNsYXp6KTtcblxuICAgICAgICAgIGNvbnNvbGUubG9nKHRhYmxlTmFtZSk7XG4gICAgICAgICAgY29uc3QgY29sbGVjdGlvbnM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgICAgICAgICBmb3IgKGNvbnN0IG1zcCBvZiBtc3BJZHNMaXN0IHx8IG1zcElkcyB8fCBbXSkge1xuICAgICAgICAgICAgY29sbGVjdGlvbnNbbXNwXSA9IGF3YWl0IGV4Q29sbGVjdGlvbnMoXG4gICAgICAgICAgICAgIGNsYXp6LFxuICAgICAgICAgICAgICBbbXNwLCBtYWluTXNwSWRdLFxuICAgICAgICAgICAgICB7fSxcbiAgICAgICAgICAgICAgLy8ge1xuICAgICAgICAgICAgICAvLyAgIHNoYXJlZENvbHM6IE9iamVjdC5hc3NpZ24oe30sIG92ZXJyaWRlcy5zaGFyZWRDb2xzKSxcbiAgICAgICAgICAgICAgLy8gICBwcml2YXRlQ29sczogT2JqZWN0LmFzc2lnbih7fSwgb3ZlcnJpZGVzLnByaXZhdGVDb2xzKSxcbiAgICAgICAgICAgICAgLy8gfSxcbiAgICAgICAgICAgICAgISFtaXJyb3JNZXRhXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxldCBtaXJyb3JDb2xsZWN0aW9uOiBQcml2YXRlQ29sbGVjdGlvbiB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICAgICAgICAgIGlmIChtaXJyb3JNZXRhKSB7XG4gICAgICAgICAgICBjb2xsZWN0aW9uc1ttYWluTXNwSWRdID0gY29sbGVjdGlvbnNbbWFpbk1zcElkXSB8fCB7fTtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGNvbGxlY3Rpb25zKS5mb3JFYWNoKChtc3A6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICBjb2xsZWN0aW9uc1ttYWluTXNwSWRdLnByaXZhdGVzID0gY29sbGVjdGlvbnNbXG4gICAgICAgICAgICAgICAgbXNwXG4gICAgICAgICAgICAgIF0ucHJpdmF0ZXM/LmZpbHRlcigocDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHAubmFtZSAhPT0gKG1pcnJvck1ldGEucmVzb2x2ZXIgYXMgc3RyaW5nKSkgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgbWlycm9yQ29sbGVjdGlvbiA9IHAgYXMgYW55O1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBwcml2YXRlc0NvdW50ID0gT2JqZWN0LnZhbHVlcyhjb2xsZWN0aW9ucylcbiAgICAgICAgICAgIC5tYXAoKGMpID0+IGMucHJpdmF0ZXMpXG4gICAgICAgICAgICAuZmxhdCgpLmxlbmd0aDtcbiAgICAgICAgICBpZiAocHJpdmF0ZXNDb3VudClcbiAgICAgICAgICAgIGxvZ1xuICAgICAgICAgICAgICAuZm9yKE1vZGVsLnRhYmxlTmFtZShjbGF6eikpXG4gICAgICAgICAgICAgIC5pbmZvKGBGb3VuZCAke3ByaXZhdGVzQ291bnR9IHByaXZhdGUgY29sbGVjdGlvbnMgdG8gY3JlYXRlYCk7XG4gICAgICAgICAgY29uc3Qgc2hhcmVkQ291bnQgPSBPYmplY3QudmFsdWVzKGNvbGxlY3Rpb25zKVxuICAgICAgICAgICAgLm1hcCgoYykgPT4gYy5zaGFyZWQpXG4gICAgICAgICAgICAuZmxhdCgpLmxlbmd0aDtcblxuICAgICAgICAgIGxvZ1xuICAgICAgICAgICAgLmZvcihNb2RlbC50YWJsZU5hbWUoY2xhenopKVxuICAgICAgICAgICAgLmluZm8oYEZvdW5kICR7c2hhcmVkQ291bnR9IHNoYXJlZCBjb2xsZWN0aW9ucyB0byBjcmVhdGVgKTtcbiAgICAgICAgICBpZiAobWlycm9yQ29sbGVjdGlvbilcbiAgICAgICAgICAgIGxvZ1xuICAgICAgICAgICAgICAuZm9yKE1vZGVsLnRhYmxlTmFtZShjbGF6eikpXG4gICAgICAgICAgICAgIC5pbmZvKFxuICAgICAgICAgICAgICAgIGBGb3VuZCBvbmUgbWlycm9yIGNvbGxlY3Rpb24gJHttaXJyb3JNZXRhPy5yZXNvbHZlciBhcyBzdHJpbmd9YFxuICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgY29uc3QgY29sTGlzdCA9IE9iamVjdC52YWx1ZXMoY29sbGVjdGlvbnMpXG4gICAgICAgICAgICAubWFwKChjKSA9PiBbLi4uKGMucHJpdmF0ZXMgfHwgW10pLCAuLi4oYy5zaGFyZWQgfHwgW10pXSlcbiAgICAgICAgICAgIC5mbGF0KCk7XG4gICAgICAgICAgbGV0IGluZGV4ZXM6IENyZWF0ZUluZGV4UmVxdWVzdFtdID0gW107XG4gICAgICAgICAgbGV0IGRlc2lnbkRvY3M6IENvdWNoREJEZXNpZ25Eb2NbXSA9IFtdO1xuICAgICAgICAgIGlmIChjb2xMaXN0Lmxlbmd0aCkge1xuICAgICAgICAgICAgbG9nXG4gICAgICAgICAgICAgIC5mb3IoTW9kZWwudGFibGVOYW1lKGNsYXp6KSlcbiAgICAgICAgICAgICAgLnZlcmJvc2UoYGdlbmVyYXRpbmcgaW5kZXhlcyBmb3IgY29sbGVjdGlvbnNgKTtcbiAgICAgICAgICAgIGluZGV4ZXMgPSBnZW5lcmF0ZU1vZGVsSW5kZXhlcyhjbGF6eik7XG4gICAgICAgICAgICBsb2dcbiAgICAgICAgICAgICAgLmZvcihNb2RlbC50YWJsZU5hbWUoY2xhenopKVxuICAgICAgICAgICAgICAuaW5mbyhgZm91bmQgJHtpbmRleGVzLmxlbmd0aH0gaW5kZXhlc2ApO1xuICAgICAgICAgICAgZGVzaWduRG9jcyA9IGdlbmVyYXRlTW9kZWxEZXNpZ25Eb2NzKGNsYXp6KTtcbiAgICAgICAgICAgIGxvZ1xuICAgICAgICAgICAgICAuZm9yKE1vZGVsLnRhYmxlTmFtZShjbGF6eikpXG4gICAgICAgICAgICAgIC5pbmZvKGBmb3VuZCAke2Rlc2lnbkRvY3MubGVuZ3RofSBkZXNpZ24gZG9jc2ApO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaW5kZXhlcyxcbiAgICAgICAgICAgIGRlc2lnbkRvY3MsXG4gICAgICAgICAgICBjb2xsZWN0aW9uczogY29sTGlzdCxcbiAgICAgICAgICAgIG1pcnJvcjogbWlycm9yQ29sbGVjdGlvbixcbiAgICAgICAgICB9O1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICAgIHJldHVybiBjb2xzO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbHMgPSBhd2FpdCBnZXRDb2xzKCk7XG4gICAgY29uc3Qgb25seU1pcnJvciA9IGF3YWl0IGdldENvbHMoW21haW5Nc3BJZF0pO1xuXG4gICAgY29uc3QgY29sbGVjdGlvbnNUbyA9IFtcbiAgICAgIC4uLm9ubHlNaXJyb3IuZmlsdGVyKChjKSA9PiBjLm1pcnJvcikubWFwKChjKSA9PiBjLm1pcnJvciksXG4gICAgICAuLi5jb2xzLm1hcCgoYykgPT4gYy5jb2xsZWN0aW9ucykuZmxhdCgpLFxuICAgICAgLi4uY29scy5maWx0ZXIoKGMpID0+IGMubWlycm9yKS5tYXAoKGMpID0+IGMubWlycm9yKSxcbiAgICBdIGFzIFByaXZhdGVDb2xsZWN0aW9uW107XG5cbiAgICBjb25zdCB1bmlxdWVCeUNvbGxlY3Rpb24gPSBbXG4gICAgICAuLi5uZXcgTWFwKFxuICAgICAgICBjb2xsZWN0aW9uc1RvLm1hcCgoaXRlbTogUHJpdmF0ZUNvbGxlY3Rpb24pID0+IFtpdGVtLm5hbWUsIGl0ZW1dKVxuICAgICAgKS52YWx1ZXMoKSxcbiAgICBdO1xuXG4gICAgaWYgKHVuaXF1ZUJ5Q29sbGVjdGlvbi5sZW5ndGgpIHtcbiAgICAgIHdyaXRlQ29sbGVjdGlvbnModW5pcXVlQnlDb2xsZWN0aW9uLCBvdXREaXIpO1xuICAgICAgY29uc3QgbWV0YUNvbGxlY3Rpb25zQ29uZmlnID0gcGF0aC5qb2luKFxuICAgICAgICBvdXREaXIsXG4gICAgICAgIFwiTUVUQS1JTkZcIixcbiAgICAgICAgXCJjb2xsZWN0aW9uc19jb25maWcuanNvblwiXG4gICAgICApO1xuICAgICAgY29uc3QgY29udHJhY3RDb2xsZWN0aW9uc0NvbmZpZyA9IHBhdGguam9pbihcbiAgICAgICAgb3V0RGlyLFxuICAgICAgICBcImNvbGxlY3Rpb25zX2NvbmZpZy5qc29uXCJcbiAgICAgICk7XG4gICAgICBmcy5jb3B5RmlsZVN5bmMobWV0YUNvbGxlY3Rpb25zQ29uZmlnLCBjb250cmFjdENvbGxlY3Rpb25zQ29uZmlnKTtcbiAgICAgIGxvZy5pbmZvKFxuICAgICAgICBgU3RvcmVkICR7Y29sbGVjdGlvbnNUby5sZW5ndGh9IGNvbGxlY3Rpb25zIHRvICR7bWV0YUNvbGxlY3Rpb25zQ29uZmlnfWBcbiAgICAgICk7XG4gICAgICBsb2cuaW5mbyhcbiAgICAgICAgYENvcGllZCBjb2xsZWN0aW9uc19jb25maWcgdG8gJHtjb250cmFjdENvbGxlY3Rpb25zQ29uZmlnfSBhbG9uZ3NpZGUgdGhlIHBhY2thZ2UuanNvbmBcbiAgICAgICk7XG5cbiAgICAgIGNvbHMuZm9yRWFjaCgoYywgaSkgPT4ge1xuICAgICAgICBjb25zdCB7IGluZGV4ZXMsIGRlc2lnbkRvY3MsIGNvbGxlY3Rpb25zLCBtaXJyb3IgfSA9IGM7XG4gICAgICAgIGNvbnN0IHRvSW5kZXg6IFByaXZhdGVDb2xsZWN0aW9uW10gPSBbLi4uY29sbGVjdGlvbnMsIG1pcnJvcl0uZmlsdGVyKFxuICAgICAgICAgIEJvb2xlYW5cbiAgICAgICAgKSBhcyBQcml2YXRlQ29sbGVjdGlvbltdO1xuICAgICAgICB0b0luZGV4LmZvckVhY2goKGkpID0+IHtcbiAgICAgICAgICB3cml0ZUluZGV4ZXMoaW5kZXhlcywgb3V0RGlyLCBpLm5hbWUpO1xuICAgICAgICAgIHdyaXRlQ29sbGVjdGlvbkRlc2lnbkRvY3MoZGVzaWduRG9jcyB8fCBbXSwgb3V0RGlyLCBpLm5hbWUpO1xuICAgICAgICAgIGxvZy5pbmZvKFxuICAgICAgICAgICAgYFN0b3JlZCAke2luZGV4ZXM/Lmxlbmd0aCB8fCAwfSBpbmRleGVzIGFuZCAke2Rlc2lnbkRvY3M/Lmxlbmd0aCB8fCAwfSBkZXNpZ24gZG9jcyB0byBjb2xsZWN0aW9uICR7aS5uYW1lfWBcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG5cbmNvbnN0IGVuc3VyZUluZnJhID0gbmV3IENvbW1hbmQoKVxuICAubmFtZShcImF3YWl0LWluZnJhXCIpXG4gIC5kZXNjcmlwdGlvbihcIndhaXRzIGZvciB0aGUgaW5mcmFzdHJ1Y3R1cmUgdG8gYmUgdXAgYW5kIHJ1bm5pbmdcIilcbiAgLm9wdGlvbihcbiAgICBcIi0tY29udGFpbmVyIDxTdHJpbmc+XCIsXG4gICAgXCJkb2NrZXIgY29udGFpbmVyIG5hbWUgdG8gdGVzdCAodXN1YWxseSBsYXN0IHBlZXIpXCIsXG4gICAgXCJib290LW9yZy1jLXBlZXItMFwiXG4gIClcbiAgLm9wdGlvbihcIi0tdGltZW91dCA8U3RyaW5nPlwiLCBcInRpbWVvdXQgYmV0d2VlbiB0ZXN0cyBpbiBtaWxsaXNlY29uZHNcIiwgXCI1MDAwXCIpXG4gIC5vcHRpb24oXCItLWF0dGVtcHRzIDxTdHJpbmc+XCIsIFwibnVtYmVyIG9mIGF0dGVtcHRzIGJlZm9yZSBnaXZpbmcgdXBcIiwgXCIxMFwiKVxuICAuYWN0aW9uKGFzeW5jIChvcHRpb25zOiBhbnkpID0+IHtcbiAgICBjb25zdCBwa2cgPSBKU09OLnBhcnNlKFxuICAgICAgZnMucmVhZEZpbGVTeW5jKHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCBcInBhY2thZ2UuanNvblwiKSwgXCJ1dGYtOFwiKVxuICAgICk7XG5cbiAgICBjb25zdCB2ZXJzaW9uID0gcGtnLnZlcnNpb247XG5cbiAgICBjb25zdCBsb2cgPSBsb2dnZXIuZm9yKFwiYXdhaXQtaW5mcmFcIik7XG4gICAgbG9nLmRlYnVnKFxuICAgICAgYHJ1bm5pbmcgd2l0aCBvcHRpb25zOiAke0pTT04uc3RyaW5naWZ5KG9wdGlvbnMpfSBmb3IgJHtwa2cubmFtZX0gdmVyc2lvbiAke3ZlcnNpb259YFxuICAgICk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdFxuICAgIGxldCB7IGNvbnRhaW5lciwgdGltZW91dCwgYXR0ZW1wdHMgfSA9IG9wdGlvbnM7XG4gICAgdGltZW91dCA9IHBhcnNlSW50KHRpbWVvdXQpIHx8IDUwMDA7XG4gICAgYXR0ZW1wdHMgPSBwYXJzZUludChhdHRlbXB0cykgfHwgMTA7XG5cbiAgICBhd2FpdCBlbnN1cmVJbmZyYXN0cnVjdHVyZUJvb3RlZChcImJvb3Qtb3JnLWMtcGVlci0wXCIsIHRpbWVvdXQsIGF0dGVtcHRzKTtcblxuICAgIGxvZy5pbmZvKFxuICAgICAgYEluZnJhc3RydWN0dXJlIGJvb3RlZCBzdWNjZXNzZnVsbHkgKGFjY29yZGluZyB0byBjb250YWluZXIgJHtjb250YWluZXJ9KSFgXG4gICAgKTtcbiAgfSk7XG5cbmNvbnN0IGRlcGxveUNvbnRyYWN0ID0gbmV3IENvbW1hbmQoKVxuICAubmFtZShcImRlcGxveS1jb250cmFjdFwiKVxuICAuZGVzY3JpcHRpb24oXCJkZXBsb3lzIHRoZSBzZWxlY3RlZCBjb250cmFjdFwiKVxuICAub3B0aW9uKFwiLS1uYW1lIDxTdHJpbmc+XCIsIFwiQ29udHJhY3QgTmFtZSAoYW5kIGZvbGRlcilcIilcbiAgLm9wdGlvbihcIi0taW5wdXQgPFN0cmluZz5cIiwgXCJpbnB1dCBmb2xkZXJcIilcbiAgLm9wdGlvbihcbiAgICBcIi0tY29sbGVjdGlvbnMtY29uZmlnIDxTdHJpbmc+XCIsXG4gICAgXCJwYXRoIHRvIGNvbGxlY3Rpb25zX2NvbmZpZy5qc29uIHRvIGNvbmZpZ3VyZSBwcml2YXRlIGNvbGxlY3Rpb25zXCJcbiAgKVxuICAub3B0aW9uKFxuICAgIFwiLS1pbmNyZW1lbnRWZXJzaW9uIDxTdHJpbmc+XCIsXG4gICAgXCIodHJ1ZSB8IGZhbHNlKSBpZiBzaG91bGQgdXNlIHZlcnNpb24gb3Igc2VxdWVuY2UgdG8gdXBkYXRlIGNvbnRyYWN0c1wiLFxuICAgIGZhbHNlXG4gIClcbiAgLm9wdGlvbihcbiAgICBcIi0tdHJhY2tlckZvbGRlciA8U3RyaW5nPlwiLFxuICAgIFwiY29udHJhY3QgdmVyc2lvbiB0cmFja2VyIGZvbGRlciAoc2hvdWxkIGJlIGRlbGV0ZWQgb24gaW5mcmFzdHJ1Y3R1cmU6ZG93bilcIixcbiAgICBwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgXCJ0ZXN0c1wiLCBcImludGVncmF0aW9uXCIsIFwiY2hhaW5jb2RlVHJhY2tlcnNcIilcbiAgKVxuICAub3B0aW9uKFxuICAgIFwiLS1wZWVycyA8U3RyaW5nPlwiLFxuICAgIFwiY29tbWEgc2VwYXJhdGVkIHBlZXIgaWRzXCIsXG4gICAgXCJvcmctYS1wZWVyLTAsb3JnLWItcGVlci0wLG9yZy1jLXBlZXItMFwiXG4gIClcbiAgLmFjdGlvbihhc3luYyAob3B0aW9uczogYW55KSA9PiB7XG4gICAgY29uc3QgcGtnID0gSlNPTi5wYXJzZShcbiAgICAgIGZzLnJlYWRGaWxlU3luYyhwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgXCJwYWNrYWdlLmpzb25cIiksIFwidXRmLThcIilcbiAgICApO1xuXG4gICAgY29uc3QgdmVyc2lvbiA9IHBrZy52ZXJzaW9uO1xuXG4gICAgY29uc3QgbG9nID0gbG9nZ2VyLmZvcihcImRlcGxveS1jb250cmFjdFwiKTtcbiAgICBsb2cuZGVidWcoXG4gICAgICBgcnVubmluZyB3aXRoIG9wdGlvbnM6ICR7SlNPTi5zdHJpbmdpZnkob3B0aW9ucyl9IGZvciAke3BrZy5uYW1lfSB2ZXJzaW9uICR7dmVyc2lvbn1gXG4gICAgKTtcblxuICAgIGNvbnN0IHtcbiAgICAgIG5hbWUsXG4gICAgICBpbnB1dCxcbiAgICAgIHBlZXJzLFxuICAgICAgdHJhY2tlckZvbGRlcixcbiAgICAgIGluY3JlbWVudFZlcnNpb24sXG4gICAgICBjb2xsZWN0aW9uc0NvbmZpZyxcbiAgICB9ID0gb3B0aW9ucztcbiAgICBjb25zdCBwZWVySWRzID0gcGVlcnMuc3BsaXQoXCIsXCIpO1xuXG4gICAgY29uc3QgY291bnRQYXRoID0gcGF0aC5yZXNvbHZlKHBhdGguam9pbih0cmFja2VyRm9sZGVyLCBgJHtuYW1lfS5jb3VudGApKTtcblxuICAgIGxldCBzZXF1ZW5jZTogbnVtYmVyO1xuXG4gICAgdHJ5IHtcbiAgICAgIHNlcXVlbmNlID0gcGFyc2VJbnQoZnMucmVhZEZpbGVTeW5jKGNvdW50UGF0aCkudG9TdHJpbmcoXCJ1dGYtOFwiKSk7XG4gICAgICBpZiAoaXNOYU4oc2VxdWVuY2UpKSBzZXF1ZW5jZSA9IDE7XG4gICAgICBlbHNlIHNlcXVlbmNlICs9IDE7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgc2VxdWVuY2UgPSAxO1xuICAgIH1cbiAgICAvL1xuICAgIC8vIGlmIChpbmNyZW1lbnRWZXJzaW9uKSB7XG4gICAgLy8gICB2ZXJzaW9uID0gdmVyc2lvbiArIGAtJHtzZXF1ZW5jZX1gO1xuICAgIC8vICAgLy8gc2VxdWVuY2UgPSAxO1xuICAgIC8vIH1cblxuICAgIHRyeSB7XG4gICAgICBmb3IgKGNvbnN0IHBlZXIgb2YgcGVlcklkcykge1xuICAgICAgICBwYWNrYWdlQ29udHJhY3QocGVlciwgaW5wdXQsIG5hbWUsIHZlcnNpb24pO1xuICAgICAgICBpbnN0YWxsQ29udHJhY3QocGVlciwgbmFtZSk7XG4gICAgICAgIGFwcHJvdmVDb250cmFjdChcbiAgICAgICAgICBwZWVyLFxuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgcGVlciA9PT0gXCJvcmctYS1wZWVyLTBcIlxuICAgICAgICAgICAgPyBcInRscy1jYS1jZXJ0LnBlbVwiXG4gICAgICAgICAgICA6IFwib3JkZXJlci10bHMtY2EtY2VydC5wZW1cIixcbiAgICAgICAgICBzZXF1ZW5jZSxcbiAgICAgICAgICB2ZXJzaW9uLFxuICAgICAgICAgIGNvbGxlY3Rpb25zQ29uZmlnXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBmcy53cml0ZUZpbGVTeW5jKGNvdW50UGF0aCwgc2VxdWVuY2UudG9TdHJpbmcoKSk7XG4gICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgIGxvZy5lcnJvcihcIkVycm9yIGRlcGxveWluZyBjb250cmFjdDpcIiwgZXJyKTtcbiAgICB9XG4gICAgY29tbWl0Q2hhaW5jb2RlKG5hbWUsIHNlcXVlbmNlLCB2ZXJzaW9uLCBjb2xsZWN0aW9uc0NvbmZpZyk7XG4gIH0pO1xuXG5jb25zdCBnZXRDcnlwdG9NYXRlcmlhbCA9IG5ldyBDb21tYW5kKClcbiAgLm5hbWUoXCJnZXQtY3J5cHRvLW1hdGVyaWFsXCIpXG4gIC5kZXNjcmlwdGlvbihcImNvcGllcyB0aGUgY3J5cHRvIG1hdGVyaWFsIHRvIHRoZSBzZWxlY3RlZCBmb2xkZXJcIilcbiAgLm9wdGlvbihcIi0tZm9sZGVyIDxTdHJpbmc+XCIsIFwib3V0cHV0IGZvbGRlclwiLCBcImRvY2tlci9kb2NrZXItZGF0YVwiKVxuICAuYWN0aW9uKGFzeW5jIChvcHRpb25zOiBhbnkpID0+IHtcbiAgICBjb25zdCBwa2cgPSBKU09OLnBhcnNlKFxuICAgICAgZnMucmVhZEZpbGVTeW5jKHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCBcInBhY2thZ2UuanNvblwiKSwgXCJ1dGYtOFwiKVxuICAgICk7XG5cbiAgICBjb25zdCB2ZXJzaW9uID0gcGtnLnZlcnNpb247XG5cbiAgICBjb25zdCBsb2cgPSBsb2dnZXIuZm9yKFwiZ2V0LWNyeXB0by1tYXRlcmlhbFwiKTtcbiAgICBsb2cuZGVidWcoXG4gICAgICBgcnVubmluZyB3aXRoIG9wdGlvbnM6ICR7SlNPTi5zdHJpbmdpZnkob3B0aW9ucyl9IGZvciAke3BrZy5uYW1lfSB2ZXJzaW9uICR7dmVyc2lvbn1gXG4gICAgKTtcbiAgICBjb25zdCB7IGZvbGRlciB9ID0gb3B0aW9ucztcbiAgICBleGVjU3luYyhgZG9ja2VyIGNwIG9yZy1hOi93ZWF2ZXIvY2xpZW50Ly4gJHtmb2xkZXJ9YCwge1xuICAgICAgY3dkOiBwcm9jZXNzLmN3ZCgpLFxuICAgIH0pO1xuICB9KTtcblxuY29uc3QgZmFicmljQ21kID0gbmV3IENvbW1hbmQoKVxuICAubmFtZShcImZvci1mYWJyaWNcIilcbiAgLmNvbW1hbmQoXCJmYWJyaWNcIilcbiAgLmRlc2NyaXB0aW9uKFxuICAgIFwiZXhwb3NlcyBzZXZlcmFsIGNvbW1hbmRzIHRvIGhlbHAgbWFuYWdlIHRoZSBmYWJyaWMgaW5mcmFzdHJ1Y3R1cmVcIlxuICApO1xuXG5mYWJyaWNDbWQuYWRkQ29tbWFuZChjb21waWxlQ29tbWFuZCk7XG5mYWJyaWNDbWQuYWRkQ29tbWFuZChleHRyYWN0SW5kZXhlcyk7XG5mYWJyaWNDbWQuYWRkQ29tbWFuZChlbnN1cmVJbmZyYSk7XG5mYWJyaWNDbWQuYWRkQ29tbWFuZChkZXBsb3lDb250cmFjdCk7XG5mYWJyaWNDbWQuYWRkQ29tbWFuZChnZXRDcnlwdG9NYXRlcmlhbCk7XG5mYWJyaWNDbWQuYWRkQ29tbWFuZChleHRyYWN0Q29sbGVjdGlvbnMpO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBmYWJyaWMoKSB7XG4gIHJldHVybiBmYWJyaWNDbWQ7XG59XG4iXX0=
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NsaS11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFNQSxzREFlQztBQUVELGdFQVdDO0FBRUQsMENBYUM7QUFFRCwwQ0FJQztBQUVELDBDQW1CQztBQUVELHdDQXVDQztBQUVELDBDQW1CQztBQUVELDBEQXdDQztBQUVELG9CQUdDO0FBRUQsMENBaUNDO0FBRUQsd0NBK0JDO0FBRUQsd0RBa0NDO0FBMkJELDBEQVVDO0FBV0Qsb0VBOERDO0FBL1lELGlEQUF5QztBQUN6Qyx1Q0FBeUI7QUFDekIsMkNBQTZCO0FBQzdCLDJEQUF3RDtBQUN4RCw0REFBNEI7QUFFNUIsU0FBZ0IscUJBQXFCLENBQ25DLGdCQUF3QixtQkFBbUI7SUFFM0MsSUFBSSxDQUFDO1FBQ0gsTUFBTSxNQUFNLEdBQUcsSUFBQSx3QkFBUSxFQUNyQixrQkFBa0IsYUFBYSxpQ0FBaUMsQ0FDakU7YUFDRSxRQUFRLEVBQUU7YUFDVixJQUFJLEVBQUUsQ0FBQztRQUVWLE9BQU8sTUFBTSxLQUFLLEdBQUcsQ0FBQztJQUN4QixDQUFDO0lBQUMsT0FBTyxHQUFRLEVBQUUsQ0FBQztRQUNsQixPQUFPLENBQUMsS0FBSyxDQUFDLDZCQUE2QixFQUFFLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMxRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7QUFDSCxDQUFDO0FBRU0sS0FBSyxVQUFVLDBCQUEwQixDQUM5QyxnQkFBd0IsbUJBQW1CLEVBQzNDLFVBQWtCLElBQUksRUFDdEIsV0FBbUIsRUFBRTtJQUVyQixPQUFPLENBQUMscUJBQXFCLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztRQUM3QyxJQUFJLEVBQUUsUUFBUSxJQUFJLENBQUM7WUFBRSxNQUFNLElBQUksNkJBQWEsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1FBRTFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsdUNBQXVDLENBQUMsQ0FBQztRQUNyRCxNQUFNLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxxQ0FBcUM7SUFDekYsQ0FBQztBQUNILENBQUM7QUFFRCxTQUFnQixlQUFlLENBQzdCLFVBQWtCLEVBQ2xCLGNBQXNCLEVBQ3RCLFlBQW9CLEVBQ3BCLFVBQWtCLEtBQUs7SUFFdkIsSUFBQSx3QkFBUSxFQUFDLGVBQWUsVUFBVTswQ0FDTSxjQUFjOztzQ0FFbEIsWUFBWTt1QkFDM0IsWUFBWTswQkFDVCxPQUFPO0tBQzVCLENBQUMsQ0FBQztBQUNQLENBQUM7QUFFRCxTQUFnQixlQUFlLENBQUMsVUFBa0IsRUFBRSxZQUFvQjtJQUN0RSxJQUFBLHdCQUFRLEVBQ04sZUFBZSxVQUFVLDBGQUEwRixZQUFZLFNBQVMsQ0FDekksQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFnQixlQUFlLENBQzdCLFVBQWtCLEVBQ2xCLFlBQW9CLEVBQ3BCLFdBQW1CLEVBQ25CLFdBQW1CLENBQUMsRUFDcEIsVUFBa0IsS0FBSyxFQUN2QixpQkFBMEI7SUFFMUIsTUFBTSxlQUFlLEdBQUcsaUJBQWlCO1FBQ3ZDLENBQUMsQ0FBQywwQkFBMEIsaUJBQWlCLEdBQUc7UUFDaEQsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNQLElBQUEsd0JBQVEsRUFBQyxlQUFlLFVBQVU7Ozt1QkFHYixZQUFZOzBCQUNULE9BQU87aUJBQ2hCLFFBQVEsR0FBRyxlQUFlOztzQ0FFTCxXQUFXLEVBQUUsQ0FBQyxDQUFDO0FBQ3JELENBQUM7QUFFRCxTQUFnQixjQUFjLENBQzVCLGNBQXNCLEVBQ3RCLFlBQW9CLEVBQ3BCLFVBQWtCLEtBQUssRUFDdkIsUUFBa0IsQ0FBQyxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsQ0FBQztJQUVsRSxJQUFJLFFBQWdCLENBQUM7SUFDckIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FDNUIsSUFBSSxDQUFDLElBQUksQ0FDUCxHQUFHLFNBQVMsRUFBRSxFQUNkLElBQUksRUFDSixhQUFhLEVBQ2IsbUJBQW1CLEVBQ25CLEdBQUcsWUFBWSxRQUFRLENBQ3hCLENBQ0YsQ0FBQztJQUNGLElBQUksQ0FBQztRQUNILFFBQVEsR0FBRyxRQUFRLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUNsRSw2REFBNkQ7SUFDL0QsQ0FBQztJQUFDLE9BQU8sQ0FBVSxFQUFFLENBQUM7UUFDcEIsUUFBUSxHQUFHLENBQUMsQ0FBQztJQUNmLENBQUM7SUFDRCxFQUFFLENBQUMsYUFBYSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUVqRCxJQUFJLENBQUM7UUFDSCxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ3pCLGVBQWUsQ0FBQyxJQUFJLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQztZQUM3RCxlQUFlLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQ3BDLGVBQWUsQ0FDYixJQUFJLEVBQ0osWUFBWSxFQUNaLElBQUksS0FBSyxjQUFjLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyx5QkFBeUIsRUFDdkUsUUFBUSxFQUNSLE9BQU8sQ0FDUixDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFBQyxPQUFPLEdBQVEsRUFBRSxDQUFDO1FBQ2xCLE9BQU8sQ0FBQyxHQUFHLENBQUMsMkJBQTJCLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3hELENBQUM7QUFDSCxDQUFDO0FBRUQsU0FBZ0IsZUFBZSxDQUM3QixZQUFvQixFQUNwQixXQUFtQixDQUFDLEVBQ3BCLFVBQWtCLEtBQUssRUFDdkIsaUJBQTBCO0lBRTFCLE1BQU0sZUFBZSxHQUFHLGlCQUFpQjtRQUN2QyxDQUFDLENBQUMsMEJBQTBCLGlCQUFpQixHQUFHO1FBQ2hELENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDUCxJQUFBLHdCQUFRLEVBQUM7Ozt1QkFHWSxZQUFZOzBCQUNULE9BQU87aUJBQ2hCLFFBQVEsR0FBRyxlQUFlOzs7OzBIQUkrRSxDQUFDLENBQUM7QUFDNUgsQ0FBQztBQUVNLEtBQUssVUFBVSx1QkFBdUIsQ0FDM0MsWUFBb0IsRUFDcEIsYUFBcUIsY0FBYyxFQUNuQyxVQUFrQixpQkFBaUIsRUFDbkMsT0FBTyxHQUFHLENBQUM7SUFFWCxJQUFJLENBQUM7UUFDSCw4Q0FBOEM7UUFDOUMsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUNuQyxRQUFRLEVBQUUsYUFBYTtZQUN2QixJQUFJLEVBQUUsRUFBRTtTQUNULENBQUMsQ0FBQztRQUVILElBQUksT0FBTyxHQUFHLEVBQUUsRUFBRSxDQUFDO1lBQ2pCLE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztRQUVELHVCQUF1QjtRQUN2QixNQUFNLEdBQUcsR0FBRyxJQUFBLHdCQUFRLEVBQ2xCLGVBQWUsVUFBVTs7YUFFbEIsWUFBWTtjQUNYLGFBQWE7c0NBQ1csT0FBTyxFQUFFLENBQzFDLENBQUM7UUFFRixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBRTFDLE9BQU8sTUFBTSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNyQyw2REFBNkQ7SUFDL0QsQ0FBQztJQUFDLE9BQU8sR0FBUSxFQUFFLENBQUM7UUFDbEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO1FBQ2hELE1BQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLHFDQUFxQztRQUNwRixPQUFPLHVCQUF1QixDQUM1QixZQUFZLEVBQ1osVUFBVSxFQUNWLE9BQU8sRUFDUCxPQUFPLEVBQUUsQ0FDVixDQUFDO0lBQ0osQ0FBQztBQUNILENBQUM7QUFFRCxTQUFnQixJQUFJLENBQUMsR0FBVztJQUM5QixPQUFPLENBQUMsSUFBSSxDQUFDLDJDQUEyQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQy9ELE9BQU8sR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCLENBQUM7QUFFRCxTQUFnQixlQUFlLENBQzdCLFlBQW9CLEVBQ3BCLFlBQW9CLEVBQ3BCLElBQVcsRUFDWCxZQUFpQixFQUFFLEVBQ25CLGFBQXFCLGNBQWMsRUFDbkMsTUFBYyxpQkFBaUI7SUFFL0IsOENBQThDO0lBQzlDLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDbkMsUUFBUSxFQUFFLFlBQVk7UUFDdEIsSUFBSSxFQUFFLElBQUk7S0FDWCxDQUFDLENBQUM7SUFFSCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2hELE1BQU0sZUFBZSxHQUFHLGdCQUFnQixhQUFhLEdBQUcsQ0FBQztJQUV6RCx1QkFBdUI7SUFDdkIsT0FBTyxJQUFBLHdCQUFRLEVBQ2IsZUFBZSxVQUFVOztTQUVwQixZQUFZO1VBQ1gsYUFBYTs7Ozs7Ozs7a0NBUVcsR0FBRztNQUMvQixTQUFTLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQ3JDLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBZ0IsY0FBYyxDQUM1QixZQUFvQixFQUNwQixZQUFvQixFQUNwQixJQUFXLEVBQ1gsYUFBcUIsY0FBYyxFQUNuQyxNQUFjLGlCQUFpQjtJQUUvQixJQUFJLENBQUM7UUFDSCw4Q0FBOEM7UUFDOUMsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUNuQyxRQUFRLEVBQUUsWUFBWTtZQUN0QixJQUFJLEVBQUUsSUFBSTtTQUNYLENBQUMsQ0FBQztRQUVILHVCQUF1QjtRQUN2QixNQUFNLEdBQUcsR0FBRyxJQUFBLHdCQUFRLEVBQ2xCLGVBQWUsVUFBVTs7YUFFbEIsWUFBWTtjQUNYLGFBQWE7eUJBQ0YsR0FBRyxFQUFFLENBQ3pCLENBQUM7UUFFRixNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDakMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUUzQyxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBQUMsT0FBTyxHQUFRLEVBQUUsQ0FBQztRQUNsQixPQUFPLENBQUMsR0FBRyxDQUFDLDJCQUEyQixDQUFDLENBQUM7UUFDekMsTUFBTSxHQUFHLENBQUM7SUFDWixDQUFDO0FBQ0gsQ0FBQztBQUVELFNBQWdCLHNCQUFzQixDQUNwQyxZQUFvQixFQUNwQixZQUFvQixFQUNwQixJQUFXLEVBQ1gsWUFBaUIsRUFBRSxFQUNuQixhQUFxQixjQUFjLEVBQ25DLE1BQWMsaUJBQWlCO0lBRS9CLDhDQUE4QztJQUM5QyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQ25DLFFBQVEsRUFBRSxZQUFZO1FBQ3RCLElBQUksRUFBRSxJQUFJO0tBQ1gsQ0FBQyxDQUFDO0lBRUgsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNoRCxNQUFNLGVBQWUsR0FBRyxnQkFBZ0IsYUFBYSxHQUFHLENBQUM7SUFFekQsdUJBQXVCO0lBQ3ZCLE9BQU8sSUFBQSx3QkFBUSxFQUNiLGVBQWUsVUFBVTs7U0FFcEIsWUFBWTtVQUNYLGFBQWE7Ozs7a0NBSVcsR0FBRztNQUMvQixTQUFTLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQ3JDLENBQUM7SUFFRix3Q0FBd0M7SUFDeEMsMERBQTBEO0lBQzFELHNDQUFzQztJQUN0QywwREFBMEQ7QUFDNUQsQ0FBQztBQUVELElBQVksY0F1Qlg7QUF2QkQsV0FBWSxjQUFjO0lBQ3hCLHVOQUU2RSxDQUFBO0lBQzdFLDJjQU8yQixDQUFBO0lBQzNCLGlnQkFPMkIsQ0FBQTtJQUMzQix5UkFFNEUsQ0FBQTtBQUM5RSxDQUFDLEVBdkJXLGNBQWMsOEJBQWQsY0FBYyxRQXVCekI7QUFFRCxTQUFnQix1QkFBdUIsQ0FDckMsS0FBYyxFQUNkLEtBQWM7SUFFZCxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ1YsT0FBTyxLQUFLO1lBQ1YsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxpQkFBaUI7WUFDbEMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUM7SUFDakMsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDO0FBQ25FLENBQUM7QUFFRCxTQUFTLGlCQUFpQixDQUFDLEtBQStCO0lBQ3hELE1BQU0sSUFBSSxHQUE2QjtRQUNyQyxvQkFBb0IsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUM5QixtQkFBbUIsRUFBRSxvQkFBRSxDQUFDLEdBQUcsQ0FBQyxtQkFBbUI7UUFDL0MsVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUFDLG9CQUFFLENBQUMsR0FBRyxDQUFDLE9BQU87S0FDakMsQ0FBQztJQUNGLE9BQU8sb0JBQUUsQ0FBQyxvQ0FBb0MsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDOUQsQ0FBQztBQUVELFNBQWdCLDRCQUE0QixDQUMxQyxZQUFvQixFQUNwQixTQUFzQztJQUV0QyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQztRQUNqRCxDQUFDLENBQUMsWUFBWTtRQUNkLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUU5Qyw0QkFBNEI7SUFDNUIsTUFBTSxVQUFVLEdBQUcsb0JBQUUsQ0FBQyxjQUFjLENBQUMsYUFBYSxFQUFFLG9CQUFFLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3JFLElBQUksVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3JCLE1BQU0sSUFBSSxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRCxnRUFBZ0U7SUFDaEUsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUM5QyxNQUFNLE1BQU0sR0FBRyxvQkFBRSxDQUFDLDBCQUEwQixDQUMxQyxVQUFVLENBQUMsTUFBTSxFQUNqQixvQkFBRSxDQUFDLEdBQUcsRUFDTixTQUFTO0lBQ1QsbUJBQW1CLENBQUMsU0FBUyxFQUM3QixhQUFhLENBQ2QsQ0FBQztJQUVGLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN6QixNQUFNLElBQUksS0FBSyxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRCx5Q0FBeUM7SUFDekMsTUFBTSxPQUFPLEdBQXVCO1FBQ2xDLEdBQUcsTUFBTSxDQUFDLE9BQU87UUFDakIsR0FBRyxTQUFTO0tBQ2IsQ0FBQztJQUVGLG9FQUFvRTtJQUNwRSx1Q0FBdUM7SUFDdkMsSUFBSSxPQUFPLENBQUMsTUFBTTtRQUFFLE9BQU8sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzdFLElBQUksT0FBTyxDQUFDLE9BQU87UUFDakIsT0FBTyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFN0QsMkJBQTJCO0lBQzNCLE1BQU0sT0FBTyxHQUFHLG9CQUFFLENBQUMsYUFBYSxDQUFDO1FBQy9CLFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUztRQUMzQixPQUFPO1FBQ1AsaUJBQWlCLEVBQUUsTUFBTSxDQUFDLGlCQUFpQjtLQUM1QyxDQUFDLENBQUM7SUFFSCxNQUFNLE9BQU8sR0FBRyxvQkFBRSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2xELElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ25CLG9FQUFvRTtRQUNwRSxNQUFNLElBQUksS0FBSyxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVELE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNsQyxNQUFNLGVBQWUsR0FBRyxVQUFVLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQztJQUNyRCxJQUFJLGVBQWUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUMzQixNQUFNLElBQUksS0FBSyxDQUFDLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVELElBQUksVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzNCLE1BQU0sSUFBSSxLQUFLLENBQUMsNkNBQTZDLENBQUMsQ0FBQztJQUNqRSxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4ZWNTeW5jIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCAqIGFzIGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgSW50ZXJuYWxFcnJvciB9IGZyb20gXCJAZGVjYWYtdHMvZGItZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHRzIGZyb20gXCJ0eXBlc2NyaXB0XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBkaWRJbmZyYXN0cnVjdHVyZUJvb3QoXG4gIGNvbnRhaW5lck5hbWU6IHN0cmluZyA9IFwiYm9vdC1vcmctYy1wZWVyLTBcIlxuKTogYm9vbGVhbiB7XG4gIHRyeSB7XG4gICAgY29uc3Qgb3V0cHV0ID0gZXhlY1N5bmMoXG4gICAgICBgZG9ja2VyIGluc3BlY3QgJHtjb250YWluZXJOYW1lfSAtLWZvcm1hdD0ne3suU3RhdGUuRXhpdENvZGV9fSdgXG4gICAgKVxuICAgICAgLnRvU3RyaW5nKClcbiAgICAgIC50cmltKCk7XG5cbiAgICByZXR1cm4gb3V0cHV0ID09PSBcIjBcIjtcbiAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgaW5zcGVjdGluZyBjb250YWluZXI6XCIsIGVyci5tZXNzYWdlKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVuc3VyZUluZnJhc3RydWN0dXJlQm9vdGVkKFxuICBjb250YWluZXJOYW1lOiBzdHJpbmcgPSBcImJvb3Qtb3JnLWMtcGVlci0wXCIsXG4gIHRpbWVvdXQ6IG51bWJlciA9IDUwMDAsXG4gIGF0dGVtcHRzOiBudW1iZXIgPSAxMFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIHdoaWxlICghZGlkSW5mcmFzdHJ1Y3R1cmVCb290KGNvbnRhaW5lck5hbWUpKSB7XG4gICAgaWYgKC0tYXR0ZW1wdHMgPD0gMCkgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXCJleGNlZWRlZCBhbGxvd2VkIGF0dGVtcHRzXCIpO1xuXG4gICAgY29uc29sZS5sb2coXCJXYWl0aW5nIGZvciBpbmZyYXN0cnVjdHVyZSB0byBib290Li4uXCIpO1xuICAgIGF3YWl0IG5ldyBQcm9taXNlKChyKSA9PiBzZXRUaW1lb3V0KHIsIHRpbWVvdXQpKTsgLy8gV2FpdCBmb3IgNSBzZWNvbmRzIGJlZm9yZSByZXRyeWluZ1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYWNrYWdlQ29udHJhY3QoXG4gIGRvY2tlck5hbWU6IHN0cmluZyxcbiAgY29udHJhY3RGb2xkZXI6IHN0cmluZyxcbiAgY29udHJhY3ROYW1lOiBzdHJpbmcsXG4gIHZlcnNpb246IHN0cmluZyA9IFwiMS4wXCJcbik6IHZvaWQge1xuICBleGVjU3luYyhgZG9ja2VyIGV4ZWMgJHtkb2NrZXJOYW1lfSBub2RlIC4vd2VhdmVyL2xpYi9jb3JlL2NsaS5janMgcGFja2FnZS1jaGFpbmNvZGUgLWQgXFxcbiAgICAtLWNoYWluY29kZS1wYXRoIC4vd2VhdmVyL2NoYWluY29kZS8ke2NvbnRyYWN0Rm9sZGVyfSBcXFxuICAgIC0tbGFuZyBub2RlIFxcXG4gICAgLS1jaGFpbmNvZGUtb3V0cHV0IC93ZWF2ZXIvcGVlci8ke2NvbnRyYWN0TmFtZX0udGFyLmd6IFxcXG4gICAgLS1jaGFpbmNvZGUtbmFtZSAke2NvbnRyYWN0TmFtZX0gXFxcbiAgICAtLWNoYWluY29kZS12ZXJzaW9uICR7dmVyc2lvbn0gLXNcbiAgICBgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluc3RhbGxDb250cmFjdChkb2NrZXJOYW1lOiBzdHJpbmcsIGNvbnRyYWN0TmFtZTogc3RyaW5nKSB7XG4gIGV4ZWNTeW5jKFxuICAgIGBkb2NrZXIgZXhlYyAke2RvY2tlck5hbWV9IG5vZGUgLi93ZWF2ZXIvbGliL2NvcmUvY2xpLmNqcyBpbnN0YWxsLWNoYWluY29kZSAtZCAtcyAtLWNoYWluY29kZS1wYXRoIC4vd2VhdmVyL3BlZXIvJHtjb250cmFjdE5hbWV9LnRhci5nemBcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFwcHJvdmVDb250cmFjdChcbiAgZG9ja2VyTmFtZTogc3RyaW5nLFxuICBjb250cmFjdE5hbWU6IHN0cmluZyxcbiAgdGxzQ2VydE5hbWU6IHN0cmluZyxcbiAgc2VxdWVuY2U6IG51bWJlciA9IDEsXG4gIHZlcnNpb246IHN0cmluZyA9IFwiMS4wXCIsXG4gIGNvbGxlY3Rpb25zQ29uZmlnPzogc3RyaW5nXG4pIHtcbiAgY29uc3QgY29sbGVjdGlvbnNGbGFnID0gY29sbGVjdGlvbnNDb25maWdcbiAgICA/IGAgLS1jb2xsZWN0aW9ucy1jb25maWcgXCIke2NvbGxlY3Rpb25zQ29uZmlnfVwiYFxuICAgIDogXCJcIjtcbiAgZXhlY1N5bmMoYGRvY2tlciBleGVjICR7ZG9ja2VyTmFtZX0gbm9kZSAuL3dlYXZlci9saWIvY29yZS9jbGkuY2pzIGFwcHJvdmUtY2hhaW5jb2RlIC1kIC1zIFxcXG4gICAgLS1vcmRlcmVyLWFkZHJlc3Mgb3JnLWEtb3JkZXJlci0wOjcwMjEgXFxcbiAgICAtLWNoYW5uZWwtaWQgc2ltcGxlLWNoYW5uZWwgXFxcbiAgICAtLWNoYWluY29kZS1uYW1lICR7Y29udHJhY3ROYW1lfSBcXFxuICAgIC0tY2hhaW5jb2RlLXZlcnNpb24gJHt2ZXJzaW9ufSBcXFxuICAgIC0tc2VxdWVuY2UgJHtzZXF1ZW5jZX0ke2NvbGxlY3Rpb25zRmxhZ30gXFxcbiAgICAtLWVuYWJsZS10bHMgXFxcbiAgICAtLXRscy1jYS1jZXJ0LWZpbGUgL3dlYXZlci9wZWVyLyR7dGxzQ2VydE5hbWV9YCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZXBsb3lDb250cmFjdChcbiAgY29udHJhY3RGb2xkZXI6IHN0cmluZyxcbiAgY29udHJhY3ROYW1lOiBzdHJpbmcsXG4gIHZlcnNpb246IHN0cmluZyA9IFwiMS4wXCIsXG4gIHBlZXJzOiBzdHJpbmdbXSA9IFtcIm9yZy1hLXBlZXItMFwiLCBcIm9yZy1iLXBlZXItMFwiLCBcIm9yZy1jLXBlZXItMFwiXVxuKSB7XG4gIGxldCBzZXF1ZW5jZTogbnVtYmVyO1xuICBjb25zdCBjb3VudFBhdGggPSBwYXRoLnJlc29sdmUoXG4gICAgcGF0aC5qb2luKFxuICAgICAgYCR7X19kaXJuYW1lfWAsXG4gICAgICBcIi4uXCIsXG4gICAgICBcImludGVncmF0aW9uXCIsXG4gICAgICBcImNoYWluY29kZVRyYWNrZXJzXCIsXG4gICAgICBgJHtjb250cmFjdE5hbWV9LmNvdW50YFxuICAgIClcbiAgKTtcbiAgdHJ5IHtcbiAgICBzZXF1ZW5jZSA9IHBhcnNlSW50KGZzLnJlYWRGaWxlU3luYyhjb3VudFBhdGgpLnRvU3RyaW5nKFwidXRmLThcIikpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgIHNlcXVlbmNlID0gMTtcbiAgfVxuICBmcy53cml0ZUZpbGVTeW5jKGNvdW50UGF0aCwgc2VxdWVuY2UudG9TdHJpbmcoKSk7XG5cbiAgdHJ5IHtcbiAgICBmb3IgKGNvbnN0IHBlZXIgb2YgcGVlcnMpIHtcbiAgICAgIHBhY2thZ2VDb250cmFjdChwZWVyLCBjb250cmFjdEZvbGRlciwgY29udHJhY3ROYW1lLCB2ZXJzaW9uKTtcbiAgICAgIGluc3RhbGxDb250cmFjdChwZWVyLCBjb250cmFjdE5hbWUpO1xuICAgICAgYXBwcm92ZUNvbnRyYWN0KFxuICAgICAgICBwZWVyLFxuICAgICAgICBjb250cmFjdE5hbWUsXG4gICAgICAgIHBlZXIgPT09IFwib3JnLWEtcGVlci0wXCIgPyBcInRscy1jYS1jZXJ0LnBlbVwiIDogXCJvcmRlcmVyLXRscy1jYS1jZXJ0LnBlbVwiLFxuICAgICAgICBzZXF1ZW5jZSxcbiAgICAgICAgdmVyc2lvblxuICAgICAgKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgY29uc29sZS5sb2coXCJFcnJvciBkZXBsb3lpbmcgY29udHJhY3Q6XCIsIGVyci5tZXNzYWdlKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tbWl0Q2hhaW5jb2RlKFxuICBjb250cmFjdE5hbWU6IHN0cmluZyxcbiAgc2VxdWVuY2U6IG51bWJlciA9IDEsXG4gIHZlcnNpb246IHN0cmluZyA9IFwiMS4wXCIsXG4gIGNvbGxlY3Rpb25zQ29uZmlnPzogc3RyaW5nXG4pOiB2b2lkIHtcbiAgY29uc3QgY29sbGVjdGlvbnNGbGFnID0gY29sbGVjdGlvbnNDb25maWdcbiAgICA/IGAgLS1jb2xsZWN0aW9ucy1jb25maWcgXCIke2NvbGxlY3Rpb25zQ29uZmlnfVwiYFxuICAgIDogXCJcIjtcbiAgZXhlY1N5bmMoYGRvY2tlciBleGVjIG9yZy1hLXBlZXItMCBub2RlIC4vd2VhdmVyL2xpYi9jb3JlL2NsaS5janMgY29tbWl0LWNoYWluY29kZSAtZCAtcyBcXFxuICAgIC0tb3JkZXJlci1hZGRyZXNzIG9yZy1hLW9yZGVyZXItMDo3MDIxIFxcXG4gICAgLS1jaGFubmVsLWlkIHNpbXBsZS1jaGFubmVsIFxcXG4gICAgLS1jaGFpbmNvZGUtbmFtZSAke2NvbnRyYWN0TmFtZX0gXFxcbiAgICAtLWNoYWluY29kZS12ZXJzaW9uICR7dmVyc2lvbn0gXFxcbiAgICAtLXNlcXVlbmNlICR7c2VxdWVuY2V9JHtjb2xsZWN0aW9uc0ZsYWd9IFxcXG4gICAgLS1lbmFibGUtdGxzIFxcXG4gICAgLS10bHMtY2EtY2VydC1maWxlIC93ZWF2ZXIvcGVlci90bHMtY2EtY2VydC5wZW0gXFxcbiAgICAtLXBlZXItYWRkcmVzc2VzIG9yZy1hLXBlZXItMDo3MDMxLG9yZy1iLXBlZXItMDo3MDMyLG9yZy1jLXBlZXItMDo3MDMzIFxcXG4gICAgLS1wZWVyLXJvb3QtdGxzIC4vd2VhdmVyL3BlZXIvdGxzLWNhLWNlcnQucGVtLC4vd2VhdmVyL3BlZXIvb3JnLWItdGxzLWNhLWNlcnQucGVtLC4vd2VhdmVyL3BlZXIvb3JnLWMtdGxzLWNhLWNlcnQucGVtYCk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBlbnN1cmVDb250cmFjdFJlYWRpbmVzcyhcbiAgY29udHJhY3ROYW1lOiBzdHJpbmcsXG4gIGRvY2tlck5hbWU6IHN0cmluZyA9IFwib3JnLWEtcGVlci0wXCIsXG4gIHRsc0NlcnQ6IHN0cmluZyA9IFwidGxzLWNhLWNlcnQucGVtXCIsXG4gIGNvdW50ZXIgPSAwXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICB0cnkge1xuICAgIC8vIFByZXBhcmUgdGhlIEpTT04gYXJndW1lbnQgZm9yIHRoZSBjaGFpbmNvZGVcbiAgICBjb25zdCBjaGFpbmNvZGVBcmdzID0gSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgZnVuY3Rpb246IFwiaGVhbHRoY2hlY2tcIixcbiAgICAgIEFyZ3M6IFtdLFxuICAgIH0pO1xuXG4gICAgaWYgKGNvdW50ZXIgPiAxMCkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG4gICAgLy8gSW52b2tlIHRoZSBjaGFpbmNvZGVcbiAgICBjb25zdCByZXMgPSBleGVjU3luYyhcbiAgICAgIGBkb2NrZXIgZXhlYyAke2RvY2tlck5hbWV9IHBlZXIgY2hhaW5jb2RlIHF1ZXJ5IFxcXG4gICAgICAgIC1DIHNpbXBsZS1jaGFubmVsIFxcXG4gICAgICAgIC1uICR7Y29udHJhY3ROYW1lfSBcXFxuICAgICAgICAtYyAnJHtjaGFpbmNvZGVBcmdzfScgXFxcbiAgICAgICAgLS10bHMgLS1jYWZpbGUgL3dlYXZlci9wZWVyLyR7dGxzQ2VydH1gXG4gICAgKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IEpTT04ucGFyc2UocmVzLnRvU3RyaW5nKCkpO1xuXG4gICAgcmV0dXJuIHJlc3VsdC5oZWFsdGhjaGVjay50b1N0cmluZygpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICBjb25zb2xlLmxvZyhcIkNoYWluY29kZSBub3QgcmVhZHkuIFJldHJ5aW5nLi4uXCIpO1xuICAgIGF3YWl0IG5ldyBQcm9taXNlKChyKSA9PiBzZXRUaW1lb3V0KHIsIDUwMDApKTsgLy8gV2FpdCBmb3IgNSBzZWNvbmRzIGJlZm9yZSByZXRyeWluZ1xuICAgIHJldHVybiBlbnN1cmVDb250cmFjdFJlYWRpbmVzcyhcbiAgICAgIGNvbnRyYWN0TmFtZSxcbiAgICAgIGRvY2tlck5hbWUsXG4gICAgICB0bHNDZXJ0LFxuICAgICAgY291bnRlcisrXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdHJpbShzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnNvbGUud2FybihcIkNvbnRyYWN0IG5vdCB0cmltbWluZyByZXNwb25zZSBwcm9wZXJseTogXCIsIHN0cik7XG4gIHJldHVybiBzdHIudHJpbSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW52b2tlQ2hhaW5jb2RlKFxuICBjb250cmFjdE5hbWU6IHN0cmluZyxcbiAgZnVuY3Rpb25OYW1lOiBzdHJpbmcsXG4gIGFyZ3M6IGFueVtdLFxuICB0cmFuc2llbnQ6IGFueSA9IHt9LFxuICBkb2NrZXJOYW1lOiBzdHJpbmcgPSBcIm9yZy1hLXBlZXItMFwiLFxuICB0bHM6IHN0cmluZyA9IFwidGxzLWNhLWNlcnQucGVtXCJcbikge1xuICAvLyBQcmVwYXJlIHRoZSBKU09OIGFyZ3VtZW50IGZvciB0aGUgY2hhaW5jb2RlXG4gIGNvbnN0IGNoYWluY29kZUFyZ3MgPSBKU09OLnN0cmluZ2lmeSh7XG4gICAgZnVuY3Rpb246IGZ1bmN0aW9uTmFtZSxcbiAgICBBcmdzOiBhcmdzLFxuICB9KTtcblxuICBjb25zdCB0cmFuc2llbnREYXRhID0gSlNPTi5zdHJpbmdpZnkodHJhbnNpZW50KTtcbiAgY29uc3QgdHJhbnNpZW50U3RyaW5nID0gYC0tdHJhbnNpZW50ICcke3RyYW5zaWVudERhdGF9J2A7XG5cbiAgLy8gSW52b2tlIHRoZSBjaGFpbmNvZGVcbiAgcmV0dXJuIGV4ZWNTeW5jKFxuICAgIGBkb2NrZXIgZXhlYyAke2RvY2tlck5hbWV9IHBlZXIgY2hhaW5jb2RlIGludm9rZSBcXFxuICAgIC1DIHNpbXBsZS1jaGFubmVsIFxcXG4gICAgLW4gJHtjb250cmFjdE5hbWV9IFxcXG4gICAgLWMgJyR7Y2hhaW5jb2RlQXJnc30nIFxcXG4gICAgLS1wZWVyQWRkcmVzc2VzIG9yZy1hLXBlZXItMDo3MDMxIFxcXG4gICAgLS10bHNSb290Q2VydEZpbGVzIC93ZWF2ZXIvcGVlci90bHMtY2EtY2VydC5wZW0gXFxcbiAgICAtLXBlZXJBZGRyZXNzZXMgb3JnLWItcGVlci0wOjcwMzIgXFxcbiAgICAtLXRsc1Jvb3RDZXJ0RmlsZXMgL3dlYXZlci9wZWVyL29yZy1iLXRscy1jYS1jZXJ0LnBlbSBcXFxuICAgIC0tcGVlckFkZHJlc3NlcyBvcmctYy1wZWVyLTA6NzAzMyBcXFxuICAgIC0tdGxzUm9vdENlcnRGaWxlcyAvd2VhdmVyL3BlZXIvb3JnLWMtdGxzLWNhLWNlcnQucGVtIFxcXG4gICAgLW8gb3JnLWEtb3JkZXJlci0wOjcwMjEgXFxcbiAgICAtLXRscyAtLWNhZmlsZSAvd2VhdmVyL3BlZXIvJHt0bHN9IFxcXG4gICAgJHt0cmFuc2llbnQgPyB0cmFuc2llbnRTdHJpbmcgOiBcIlwifWBcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHF1ZXJ5Q2hhaW5jb2RlKFxuICBjb250cmFjdE5hbWU6IHN0cmluZyxcbiAgZnVuY3Rpb25OYW1lOiBzdHJpbmcsXG4gIGFyZ3M6IGFueVtdLFxuICBkb2NrZXJOYW1lOiBzdHJpbmcgPSBcIm9yZy1hLXBlZXItMFwiLFxuICB0bHM6IHN0cmluZyA9IFwidGxzLWNhLWNlcnQucGVtXCJcbikge1xuICB0cnkge1xuICAgIC8vIFByZXBhcmUgdGhlIEpTT04gYXJndW1lbnQgZm9yIHRoZSBjaGFpbmNvZGVcbiAgICBjb25zdCBjaGFpbmNvZGVBcmdzID0gSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgZnVuY3Rpb246IGZ1bmN0aW9uTmFtZSxcbiAgICAgIEFyZ3M6IGFyZ3MsXG4gICAgfSk7XG5cbiAgICAvLyBJbnZva2UgdGhlIGNoYWluY29kZVxuICAgIGNvbnN0IHJlcyA9IGV4ZWNTeW5jKFxuICAgICAgYGRvY2tlciBleGVjICR7ZG9ja2VyTmFtZX0gcGVlciBjaGFpbmNvZGUgcXVlcnkgXFxcbiAgICAgICAgLUMgc2ltcGxlLWNoYW5uZWwgXFxcbiAgICAgICAgLW4gJHtjb250cmFjdE5hbWV9IFxcXG4gICAgICAgIC1jICcke2NoYWluY29kZUFyZ3N9JyBcXFxuICAgICAgICAtLXRscyAtLWNhZmlsZSAke3Rsc31gXG4gICAgKTtcblxuICAgIGNvbnN0IHByb2Nlc3NlZCA9IHJlcy50b1N0cmluZygpO1xuICAgIGNvbnNvbGUubG9nKFwiQmxvY2tjaGFpbiByZWFkOlwiLCBwcm9jZXNzZWQpO1xuXG4gICAgcmV0dXJuIHByb2Nlc3NlZDtcbiAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICBjb25zb2xlLmxvZyhcIkZhaWxlZCB0byByZWFkIGJsb2NrY2hhaW5cIik7XG4gICAgdGhyb3cgZXJyO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnZva2VQcml2YXRlQ2hhaW5jb2RlKFxuICBjb250cmFjdE5hbWU6IHN0cmluZyxcbiAgZnVuY3Rpb25OYW1lOiBzdHJpbmcsXG4gIGFyZ3M6IGFueVtdLFxuICB0cmFuc2llbnQ6IGFueSA9IHt9LFxuICBkb2NrZXJOYW1lOiBzdHJpbmcgPSBcIm9yZy1hLXBlZXItMFwiLFxuICB0bHM6IHN0cmluZyA9IFwidGxzLWNhLWNlcnQucGVtXCJcbikge1xuICAvLyBQcmVwYXJlIHRoZSBKU09OIGFyZ3VtZW50IGZvciB0aGUgY2hhaW5jb2RlXG4gIGNvbnN0IGNoYWluY29kZUFyZ3MgPSBKU09OLnN0cmluZ2lmeSh7XG4gICAgZnVuY3Rpb246IGZ1bmN0aW9uTmFtZSxcbiAgICBBcmdzOiBhcmdzLFxuICB9KTtcblxuICBjb25zdCB0cmFuc2llbnREYXRhID0gSlNPTi5zdHJpbmdpZnkodHJhbnNpZW50KTtcbiAgY29uc3QgdHJhbnNpZW50U3RyaW5nID0gYC0tdHJhbnNpZW50ICcke3RyYW5zaWVudERhdGF9J2A7XG5cbiAgLy8gSW52b2tlIHRoZSBjaGFpbmNvZGVcbiAgcmV0dXJuIGV4ZWNTeW5jKFxuICAgIGBkb2NrZXIgZXhlYyAke2RvY2tlck5hbWV9IHBlZXIgY2hhaW5jb2RlIGludm9rZSBcXFxuICAgIC1DIHNpbXBsZS1jaGFubmVsIFxcXG4gICAgLW4gJHtjb250cmFjdE5hbWV9IFxcXG4gICAgLWMgJyR7Y2hhaW5jb2RlQXJnc30nIFxcXG4gICAgLS1wZWVyQWRkcmVzc2VzIG9yZy1hLXBlZXItMDo3MDMxIFxcXG4gICAgLS10bHNSb290Q2VydEZpbGVzIC93ZWF2ZXIvcGVlci90bHMtY2EtY2VydC5wZW0gXFxcbiAgICAtbyBvcmctYS1vcmRlcmVyLTA6NzAyMSBcXFxuICAgIC0tdGxzIC0tY2FmaWxlIC93ZWF2ZXIvcGVlci8ke3Rsc30gXFxcbiAgICAke3RyYW5zaWVudCA/IHRyYW5zaWVudFN0cmluZyA6IFwiXCJ9YFxuICApO1xuXG4gIC8vICAgLS1wZWVyQWRkcmVzc2VzIG9yZy1iLXBlZXItMDo3MDMyIFxcXG4gIC8vIC0tdGxzUm9vdENlcnRGaWxlcyAvd2VhdmVyL3BlZXIvb3JnLWItdGxzLWNhLWNlcnQucGVtIFxcXG4gIC8vIC0tcGVlckFkZHJlc3NlcyBvcmctYy1wZWVyLTA6NzAzMyBcXFxuICAvLyAtLXRsc1Jvb3RDZXJ0RmlsZXMgL3dlYXZlci9wZWVyL29yZy1jLXRscy1jYS1jZXJ0LnBlbSBcXFxufVxuXG5leHBvcnQgZW51bSBTY3JpcHRDb21tYW5kcyB7XG4gIFNUQVJUID0gXCJmYWJyaWMtY2hhaW5jb2RlLW5vZGUgc3RhcnQgXFxcbiAgICAgICAgICAtLWdycGMubWF4X3JlY2VpdmVfbWVzc2FnZV9sZW5ndGggJHtDSEFJTkNPREVfTUFYUkVDVk1TR1NJWkUtMTU3Mjg2NDB9IFxcXG4gICAgICAgICAgLS1ncnBjLm1heF9zZW5kX21lc3NhZ2VfbGVuZ3RoICR7Q0hBSU5DT0RFX01BWFNFTkRNU0dTSVpFLTE1NzI4NjQwfSBcIixcbiAgU1RBUlRfQ0NBQVMgPSBcImZhYnJpYy1jaGFpbmNvZGUtbm9kZSBzZXJ2ZXIgXFxcbiAgICAgICAgICAtLWNoYWluY29kZS1hZGRyZXNzPSRDSEFJTkNPREVfU0VSVkVSX0FERFJFU1MgXFxcbiAgICAgICAgICAtLWNoYWluY29kZS1pZD0kQ0hBSU5DT0RFX0lEIFxcXG4gICAgICAgICAgLS1jaGFpbmNvZGUtdGxzLWNlcnQtZmlsZT0ke0NIQUlOQ09ERV9UTFNfQ0VSVH0gXFxcbiAgICAgICAgICAtLWNoYWluY29kZS10bHMta2V5LWZpbGU9JHtDSEFJTkNPREVfVExTX0tFWX0gXFxcbiAgICAgICAgICAtLWdycGMubWF4X3JlY2VpdmVfbWVzc2FnZV9sZW5ndGggJHtDSEFJTkNPREVfTUFYUkVDVk1TR1NJWkUtMTU3Mjg2NDB9IFxcXG4gICAgICAgICAgLS1ncnBjLm1heF9zZW5kX21lc3NhZ2VfbGVuZ3RoICR7Q0hBSU5DT0RFX01BWFNFTkRNU0dTSVpFLTE1NzI4NjQwfSBcXFxuICAgICAgICAgIC0tdGxzLmVuYWJsZWQ9dHJ1ZVwiLFxuICBTVEFSVF9DQ0FBU19ERUJVRyA9IFwibm9kZSAtLWluc3BlY3Q9MC4wLjAuMDo5MjI5IC4vbm9kZV9tb2R1bGVzLy5iaW4vZmFicmljLWNoYWluY29kZS1ub2RlIHNlcnZlciBcXFxuICAgICAgICAgIC0tY2hhaW5jb2RlLWFkZHJlc3M9JENIQUlOQ09ERV9TRVJWRVJfQUREUkVTUyBcXFxuICAgICAgICAgIC0tY2hhaW5jb2RlLWlkPSRDSEFJTkNPREVfSUQgXFxcbiAgICAgICAgICAtLWNoYWluY29kZS10bHMtY2VydC1maWxlPSR7Q0hBSU5DT0RFX1RMU19DRVJUfSBcXFxuICAgICAgICAgIC0tY2hhaW5jb2RlLXRscy1rZXktZmlsZT0ke0NIQUlOQ09ERV9UTFNfS0VZfSBcXFxuICAgICAgICAgIC0tZ3JwYy5tYXhfcmVjZWl2ZV9tZXNzYWdlX2xlbmd0aCAke0NIQUlOQ09ERV9NQVhSRUNWTVNHU0laRS0xNTcyODY0MH0gXFxcbiAgICAgICAgICAtLWdycGMubWF4X3NlbmRfbWVzc2FnZV9sZW5ndGggJHtDSEFJTkNPREVfTUFYU0VORE1TR1NJWkUtMTU3Mjg2NDB9IFxcXG4gICAgICAgICAgLS10bHMuZW5hYmxlZD10cnVlXCIsXG4gIFNUQVJUX0RFQlVHID0gXCJub2RlIC0taW5zcGVjdD0wLjAuMC4wOjkyMjkgL3Vzci9sb2NhbC9zcmMvbm9kZV9tb2R1bGVzLy5iaW4vZmFicmljLWNoYWluY29kZS1ub2RlIHN0YXJ0IFxcXG4gICAgICAgICAgLS1ncnBjLm1heF9yZWNlaXZlX21lc3NhZ2VfbGVuZ3RoICR7Q0hBSU5DT0RFX01BWFJFQ1ZNU0dTSVpFLTE1NzI4NjQwfSBcXFxuICAgICAgICAgIC0tZ3JwYy5tYXhfc2VuZF9tZXNzYWdlX2xlbmd0aCAke0NIQUlOQ09ERV9NQVhTRU5ETVNHU0laRS0xNTcyODY0MH1cIixcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbnRyYWN0U3RhcnRDb21tYW5kKFxuICBkZWJ1ZzogYm9vbGVhbixcbiAgY2NhYXM6IGJvb2xlYW5cbik6IHN0cmluZyB7XG4gIGlmIChjY2Fhcykge1xuICAgIHJldHVybiBkZWJ1Z1xuICAgICAgPyBTY3JpcHRDb21tYW5kcy5TVEFSVF9DQ0FBU19ERUJVR1xuICAgICAgOiBTY3JpcHRDb21tYW5kcy5TVEFSVF9DQ0FBUztcbiAgfVxuICByZXR1cm4gZGVidWcgPyBTY3JpcHRDb21tYW5kcy5TVEFSVF9ERUJVRyA6IFNjcmlwdENvbW1hbmRzLlNUQVJUO1xufVxuXG5mdW5jdGlvbiBmb3JtYXREaWFnbm9zdGljcyhkaWFnczogcmVhZG9ubHkgdHMuRGlhZ25vc3RpY1tdKTogc3RyaW5nIHtcbiAgY29uc3QgaG9zdDogdHMuRm9ybWF0RGlhZ25vc3RpY3NIb3N0ID0ge1xuICAgIGdldENhbm9uaWNhbEZpbGVOYW1lOiAoZikgPT4gZixcbiAgICBnZXRDdXJyZW50RGlyZWN0b3J5OiB0cy5zeXMuZ2V0Q3VycmVudERpcmVjdG9yeSxcbiAgICBnZXROZXdMaW5lOiAoKSA9PiB0cy5zeXMubmV3TGluZSxcbiAgfTtcbiAgcmV0dXJuIHRzLmZvcm1hdERpYWdub3N0aWNzV2l0aENvbG9yQW5kQ29udGV4dChkaWFncywgaG9zdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21waWxlV2l0aFRzY29uZmlnT3ZlcnJpZGVzKFxuICB0c2NvbmZpZ1BhdGg6IHN0cmluZyxcbiAgb3ZlcnJpZGVzOiBQYXJ0aWFsPHRzLkNvbXBpbGVyT3B0aW9ucz5cbik6IHZvaWQge1xuICBjb25zdCBhYnNDb25maWdQYXRoID0gcGF0aC5pc0Fic29sdXRlKHRzY29uZmlnUGF0aClcbiAgICA/IHRzY29uZmlnUGF0aFxuICAgIDogcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksIHRzY29uZmlnUGF0aCk7XG5cbiAgLy8gMSkgUmVhZCB0aGUgdHNjb25maWcuanNvblxuICBjb25zdCBjb25maWdGaWxlID0gdHMucmVhZENvbmZpZ0ZpbGUoYWJzQ29uZmlnUGF0aCwgdHMuc3lzLnJlYWRGaWxlKTtcbiAgaWYgKGNvbmZpZ0ZpbGUuZXJyb3IpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZm9ybWF0RGlhZ25vc3RpY3MoW2NvbmZpZ0ZpbGUuZXJyb3JdKSk7XG4gIH1cblxuICAvLyAyKSBQYXJzZSBpdCAocmVzb2x2ZXMgXCJleHRlbmRzXCIsIGluY2x1ZGUvZXhjbHVkZS9maWxlcywgZXRjLilcbiAgY29uc3QgY29uZmlnRGlyID0gcGF0aC5kaXJuYW1lKGFic0NvbmZpZ1BhdGgpO1xuICBjb25zdCBwYXJzZWQgPSB0cy5wYXJzZUpzb25Db25maWdGaWxlQ29udGVudChcbiAgICBjb25maWdGaWxlLmNvbmZpZyxcbiAgICB0cy5zeXMsXG4gICAgY29uZmlnRGlyLFxuICAgIC8qZXhpc3RpbmdPcHRpb25zKi8gdW5kZWZpbmVkLFxuICAgIGFic0NvbmZpZ1BhdGhcbiAgKTtcblxuICBpZiAocGFyc2VkLmVycm9ycy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZm9ybWF0RGlhZ25vc3RpY3MocGFyc2VkLmVycm9ycykpO1xuICB9XG5cbiAgLy8gMykgT3ZlcnJpZGUgY29tcGlsZXIgb3B0aW9ucyBpbi1tZW1vcnlcbiAgY29uc3Qgb3B0aW9uczogdHMuQ29tcGlsZXJPcHRpb25zID0ge1xuICAgIC4uLnBhcnNlZC5vcHRpb25zLFxuICAgIC4uLm92ZXJyaWRlcyxcbiAgfTtcblxuICAvLyBPcHRpb25hbDogSWYgeW91IG92ZXJyaWRlIG91dERpci9yb290RGlyLCBlbnN1cmUgdGhleeKAmXJlIGFic29sdXRlXG4gIC8vIHRvIGF2b2lkIHN1cnByaXNlcyBkZXBlbmRpbmcgb24gQ1dELlxuICBpZiAob3B0aW9ucy5vdXREaXIpIG9wdGlvbnMub3V0RGlyID0gcGF0aC5yZXNvbHZlKGNvbmZpZ0Rpciwgb3B0aW9ucy5vdXREaXIpO1xuICBpZiAob3B0aW9ucy5yb290RGlyKVxuICAgIG9wdGlvbnMucm9vdERpciA9IHBhdGgucmVzb2x2ZShjb25maWdEaXIsIG9wdGlvbnMucm9vdERpcik7XG5cbiAgLy8gNCkgQ3JlYXRlIHByb2dyYW0gKyBlbWl0XG4gIGNvbnN0IHByb2dyYW0gPSB0cy5jcmVhdGVQcm9ncmFtKHtcbiAgICByb290TmFtZXM6IHBhcnNlZC5maWxlTmFtZXMsXG4gICAgb3B0aW9ucyxcbiAgICBwcm9qZWN0UmVmZXJlbmNlczogcGFyc2VkLnByb2plY3RSZWZlcmVuY2VzLFxuICB9KTtcblxuICBjb25zdCBwcmVFbWl0ID0gdHMuZ2V0UHJlRW1pdERpYWdub3N0aWNzKHByb2dyYW0pO1xuICBpZiAocHJlRW1pdC5sZW5ndGgpIHtcbiAgICAvLyBJZiB5b3Ugd2FudCBcInRyYW5zcGlsZSBhbnl3YXlcIiwgeW91IGNhbiBjaG9vc2UgdG8gbm90IHRocm93IGhlcmUuXG4gICAgdGhyb3cgbmV3IEVycm9yKGZvcm1hdERpYWdub3N0aWNzKHByZUVtaXQpKTtcbiAgfVxuXG4gIGNvbnN0IGVtaXRSZXN1bHQgPSBwcm9ncmFtLmVtaXQoKTtcbiAgY29uc3QgZW1pdERpYWdub3N0aWNzID0gZW1pdFJlc3VsdC5kaWFnbm9zdGljcyA/PyBbXTtcbiAgaWYgKGVtaXREaWFnbm9zdGljcy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZm9ybWF0RGlhZ25vc3RpY3MoZW1pdERpYWdub3N0aWNzKSk7XG4gIH1cblxuICBpZiAoZW1pdFJlc3VsdC5lbWl0U2tpcHBlZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkVtaXQgd2FzIHNraXBwZWQgKGNoZWNrIGRpYWdub3N0aWNzIGFib3ZlKS5cIik7XG4gIH1cbn1cbiJdfQ==
@@ -904,4 +904,4 @@ __decorate([
904
904
  ], FabricClientAdapter.prototype, "view", null);
905
905
  FabricClientAdapter.decoration();
906
906
  core_1.Adapter.setCurrent(constants_1.FabricFlavour);
907
- //# sourceMappingURL=FabricClientAdapter.js.map
907
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmFicmljQ2xpZW50QWRhcHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jbGllbnQvRmFicmljQ2xpZW50QWRhcHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsMkNBQTZCO0FBQzdCLHVEQUkrQjtBQUMvQiwyQ0FBdUM7QUFDdkMsb0RBQXNDO0FBQ3RDLHlFQUl3QztBQUN4QywrQ0FBMEQ7QUFFMUQsZ0VBUXFDO0FBQ3JDLCtDQUFxRDtBQUNyRCwyREFVaUM7QUFDakMseUNBb0J3QjtBQUN4Qix5REFBb0Q7QUFDcEQsdUVBQThEO0FBRTlELGlEQUFzRDtBQUV0RCx1RUFBZ0U7QUFDaEUsdUVBQWdFO0FBQ2hFLHlFQUFrRTtBQUNsRSxtREFLMEI7QUFHMUIsNENBQW9CO0FBRXBCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtERztBQUNILE1BQWEsbUJBQW9CLFNBQVEsY0FLeEM7SUFDQzs7T0FFRzthQUNZLFlBQU8sR0FBRyxJQUFJLFdBQVcsQ0FBQyxNQUFNLENBQUMsQUFBMUIsQ0FBMkI7YUFFbEMsZUFBVSxHQUFHLElBQUksbUNBQWdCLEVBQUUsQUFBekIsQ0FBMEI7YUFFbEMsUUFBRyxHQUFHLGlCQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLEFBQW5DLENBQW9DO0lBS3hEOzs7OztPQUtHO0lBQ0gsWUFBWSxNQUFrQixFQUFFLEtBQWM7UUFDNUMsS0FBSyxDQUNILE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLE1BQU0sRUFBRTtZQUN4QixlQUFlLEVBQUUsQ0FBQztZQUNsQixjQUFjLEVBQUUsRUFBRTtZQUNsQixhQUFhLEVBQUUsQ0FBQztZQUNoQixhQUFhLEVBQUUsRUFBRTtTQUNsQixDQUFDLEVBQ0YseUJBQWEsRUFDYixLQUFLLENBQ04sQ0FBQztRQW5CZSxlQUFVLEdBQzNCLG1CQUFtQixDQUFDLFVBQVUsQ0FBQztJQW1CakMsQ0FBQztJQUVRLFNBQVMsQ0FDaEIsU0FBaUM7UUFFakMsT0FBTyxJQUFJLDZDQUFxQixDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsU0FBUyxDQUNQLEtBQTBDLEVBQzFDLElBQVksRUFDWixLQUFxQjtRQUVyQixPQUFPLElBQUksNkNBQXFCLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVrQixLQUFLLENBQUMsS0FBSyxDQUM1QixTQUFpQyxFQUNqQyxLQUFvRCxFQUNwRCxLQUFpQyxFQUNqQyxHQUFHLElBQVc7UUFFZCxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQ2xCLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FDZixTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLEVBQ3JDLEdBQUcsSUFBSSxDQUNSLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILE1BQU0sQ0FBQyxJQUFnQjtRQUNyQixPQUFPLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVRLFVBQVU7UUFNakIsT0FBTywrQ0FBbUQsQ0FBQztJQUM3RCxDQUFDO0lBRVMsWUFBWSxDQUNwQixLQUFxQixFQUNyQixFQUFrQixFQUNsQixLQUEwQixFQUMxQixHQUFHLElBQW9EO1FBRXZELE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDekQsTUFBTSxTQUFTLEdBQUcsNEJBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekMsTUFBTSxNQUFNLEdBQXdCLEVBQUUsQ0FBQztRQUN2QyxNQUFNLENBQUMseUJBQVcsQ0FBQyxLQUFLLENBQUMsR0FBRyxTQUFTLENBQUM7UUFDdEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDN0IsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ08sZUFBZSxDQUN2QixLQUFxQixFQUNyQixHQUF3QixFQUN4QixNQUE2QixFQUM3QixHQUFHLElBQW9EO1FBRXZELE1BQU0sU0FBUyxHQUFHLDRCQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pDLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsTUFBTTtZQUM5QixNQUFNLElBQUksNkJBQWEsQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDO1FBQ3RFLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDNUQsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUNwQyxNQUFNLE1BQU0sR0FBd0IsRUFBRSxDQUFDO1lBQ3ZDLE1BQU0sQ0FBQyx5QkFBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLFNBQVMsQ0FBQztZQUN0QyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUNyQyxPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFUyxlQUFlLENBQ3ZCLEtBQXFCLEVBQ3JCLEdBQXFCLEVBQ3JCLE1BQTZCLEVBQzdCLEdBQUcsSUFBb0Q7UUFFdkQsTUFBTSxTQUFTLEdBQUcsNEJBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekMsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLE1BQU0sQ0FBQyxNQUFNO1lBQzlCLE1BQU0sSUFBSSw2QkFBYSxDQUFDLDBDQUEwQyxDQUFDLENBQUM7UUFDdEUsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUM1RCxNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUMzQixNQUFNLE1BQU0sR0FBd0IsRUFBRSxDQUFDO1lBQ3ZDLE1BQU0sQ0FBQyx5QkFBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLFNBQVMsQ0FBQztZQUN0QyxPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNNLEtBQUssQ0FBQyxTQUFTLENBQ3RCLEtBQXFCLEVBQ3JCLEdBQXFCLEVBQ3JCLE1BQTZCLEVBQzdCLEdBQUcsSUFBZ0Q7UUFFbkQsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLE1BQU0sQ0FBQyxNQUFNO1lBQzlCLE1BQU0sSUFBSSw2QkFBYSxDQUFDLDBDQUEwQyxDQUFDLENBQUM7UUFDdEUsT0FBTztRQUNQLE1BQU0sT0FBTyxHQUFHLENBQUMsR0FBSSxJQUF5QixDQUFDLENBQUM7UUFDaEQsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLEtBQUssRUFBeUIsQ0FBQztRQUN6RCxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQzlCLE9BQXFELEVBQ3JELElBQUksQ0FBQyxTQUFTLENBQ2YsQ0FBQztRQUNGLE1BQU0sU0FBUyxHQUFHLDRCQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXpDLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsTUFBTSxlQUFlLFNBQVMsUUFBUSxDQUFDLENBQUM7UUFDL0QsR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDM0IsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQ3pDLEdBQUcsRUFDSCxxQ0FBcUIsQ0FBQyxVQUFVLEVBQ2hDO1lBQ0UsSUFBSSxDQUFDLFNBQVMsQ0FDWixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQzVEO1NBQ0YsRUFDRCxTQUFTLEVBQ1QsU0FBUyxFQUNULEtBQUssQ0FBQyxJQUFJLENBQ1gsQ0FBQztRQUNGLElBQUksQ0FBQztZQUNILE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEUsQ0FBQztRQUFDLE9BQU8sQ0FBVSxFQUFFLENBQUM7WUFDcEIsTUFBTSxJQUFJLGtDQUFrQixDQUFDLENBQVUsQ0FBQyxDQUFDO1FBQzNDLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ00sS0FBSyxDQUFDLE9BQU8sQ0FDcEIsS0FBcUIsRUFDckIsR0FBcUIsRUFDckIsR0FBRyxJQUFnRDtRQUVuRCxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNyRCxNQUFNLFNBQVMsR0FBRyw0QkFBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLE1BQU0sZUFBZSxTQUFTLFFBQVEsQ0FBQyxDQUFDO1FBQ2hFLEdBQUcsQ0FBQyxPQUFPLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQzNCLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLG1CQUFtQixDQUMzQyxHQUFHLEVBQ0gscUNBQXFCLENBQUMsUUFBUSxFQUM5QixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsRUFDckIsU0FBUyxFQUNULFNBQVMsRUFDVCxLQUFLLENBQUMsSUFBSSxDQUNYLENBQUM7UUFDRixJQUFJLENBQUM7WUFDSCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hFLENBQUM7UUFBQyxPQUFPLENBQVUsRUFBRSxDQUFDO1lBQ3BCLE1BQU0sSUFBSSxrQ0FBa0IsQ0FBQyxDQUFVLENBQUMsQ0FBQztRQUMzQyxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ00sS0FBSyxDQUFDLFNBQVMsQ0FDdEIsS0FBcUIsRUFDckIsR0FBcUIsRUFDckIsTUFBNkIsRUFDN0IsR0FBRyxJQUFnRDtRQUVuRCxJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssTUFBTSxDQUFDLE1BQU07WUFDOUIsTUFBTSxJQUFJLDZCQUFhLENBQUMsMENBQTBDLENBQUMsQ0FBQztRQUN0RSxNQUFNLE9BQU8sR0FBRyxDQUFDLEdBQUksSUFBeUIsQ0FBQyxDQUFDO1FBQ2hELE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQXlCLENBQUM7UUFDekQsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUM5QixPQUFxRCxFQUNyRCxJQUFJLENBQUMsU0FBUyxDQUNmLENBQUM7UUFDRixNQUFNLFNBQVMsR0FBRyw0QkFBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QyxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLE1BQU0sZUFBZSxTQUFTLFFBQVEsQ0FBQyxDQUFDO1FBQ2pFLEdBQUcsQ0FBQyxPQUFPLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBRTNCLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUN6QyxHQUFHLEVBQ0gscUNBQXFCLENBQUMsVUFBVSxFQUNoQztZQUNFLElBQUksQ0FBQyxTQUFTLENBQ1osTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUM1RDtTQUNGLEVBQ0QsU0FBUyxFQUNULFNBQVMsRUFDVCxLQUFLLENBQUMsSUFBSSxDQUNYLENBQUM7UUFDRixJQUFJLENBQUM7WUFDSCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hFLENBQUM7UUFBQyxPQUFPLENBQVUsRUFBRSxDQUFDO1lBQ3BCLE1BQU0sSUFBSSxrQ0FBa0IsQ0FBQyxDQUFVLENBQUMsQ0FBQztRQUMzQyxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDTSxLQUFLLENBQUMsU0FBUyxDQUN0QixLQUFxQixFQUNyQixHQUFxQixFQUNyQixHQUFHLElBQWdEO1FBRW5ELE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3ZELE1BQU0sU0FBUyxHQUFHLDRCQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pDLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsTUFBTSxlQUFlLFNBQVMsUUFBUSxDQUFDLENBQUM7UUFDakUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDM0IsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQ3pDLEdBQUcsRUFDSCxxQ0FBcUIsQ0FBQyxVQUFVLEVBQ2hDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUNyQixTQUFTLEVBQ1QsU0FBUyxFQUNULEtBQUssQ0FBQyxJQUFJLENBQ1gsQ0FBQztRQUNGLElBQUksQ0FBQztZQUNILE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEUsQ0FBQztRQUFDLE9BQU8sQ0FBVSxFQUFFLENBQUM7WUFDcEIsTUFBTSxJQUFJLGtDQUFrQixDQUFDLENBQVUsQ0FBQyxDQUFDO1FBQzNDLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDTSxPQUFPLENBQ2QsS0FBUSxFQUNSLEdBQUcsSUFBZ0Q7UUFFbkQsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNoRCxNQUFNLEtBQUssR0FBRyw0QkFBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyQyxJQUFLLEtBQWEsQ0FBQyxzQkFBZSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDN0MsR0FBRyxDQUFDLEtBQUssQ0FDUCwwQ0FBMkMsS0FBYSxDQUFDLHNCQUFlLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FDckYsQ0FBQztZQUNGLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxzQkFBZSxDQUFDLFFBQVEsRUFBRTtnQkFDM0QsVUFBVSxFQUFFLEtBQUs7Z0JBQ2pCLFFBQVEsRUFBRSxLQUFLO2dCQUNmLFlBQVksRUFBRSxJQUFJO2dCQUNsQixLQUFLLEVBQUcsS0FBYSxDQUFDLHNCQUFlLENBQUMsUUFBUSxDQUFDO2FBQ2hELENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxPQUFPO1lBQ0wsTUFBTSxFQUFFLEtBQUssQ0FBQyxLQUFLO1lBQ25CLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSztZQUNsQixFQUFFLEVBQUUsS0FBSyxDQUFDLDRCQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxXQUE2QixDQUFDLENBQVc7WUFDbEUsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTO1lBQzFCLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUTtZQUN4QixNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU07U0FDckIsQ0FBQztJQUNKLENBQUM7SUFFUSxNQUFNLENBQ2IsR0FBd0IsRUFDeEIsS0FBcUIsRUFDckIsRUFBa0IsRUFDbEIsU0FBK0IsRUFDL0IsR0FBRyxJQUFnRDtRQUVuRCxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQy9DLElBQUksU0FBUyxFQUFFLENBQUM7WUFDZCxHQUFHLENBQUMsT0FBTyxDQUNULG1DQUFtQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUN2RSxDQUFDO1lBQ0YsTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFnQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRTtnQkFDdEUsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLFdBQVc7b0JBQy9DLE1BQU0sSUFBSSw2QkFBYSxDQUNyQixzQkFBc0IsR0FBRyw0QkFBNEIsT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLHdCQUF3QixDQUM1SCxDQUFDO2dCQUNILEdBQVMsQ0FBQyxHQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7WUFDbkMsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsT0FBTyxJQUFLLEtBQXdCLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBR1ksQUFBTixLQUFLLENBQUMsTUFBTSxDQUNuQixLQUFxQixFQUNyQixFQUFrQixFQUNsQixLQUEwQixFQUMxQixZQUFpQyxFQUFFLEVBQ25DLEdBQUcsSUFBZ0Q7UUFFbkQsTUFBTSxPQUFPLEdBQUcsQ0FBQyxHQUFJLElBQXlCLENBQUMsQ0FBQztRQUNoRCxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQzlCLE9BQXFELEVBQ3JELElBQUksQ0FBQyxNQUFNLENBQ1osQ0FBQztRQUNGLE1BQU0sU0FBUyxHQUFHLDRCQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pDLEdBQUcsQ0FBQyxPQUFPLENBQUMsbUJBQW1CLFNBQVMsUUFBUSxDQUFDLENBQUM7UUFDbEQsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDdkIsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQ3pDLEdBQUcsRUFDSCw2QkFBYSxDQUFDLE1BQU0sRUFDcEIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQzlDLFNBQVMsRUFDVCxTQUFTLEVBQ1QsS0FBSyxDQUFDLElBQUksQ0FDWCxDQUFDO1FBQ0YsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUdHLEFBQU4sS0FBSyxDQUFDLElBQUksQ0FDUixLQUFxQixFQUNyQixFQUFrQixFQUNsQixHQUFHLElBQWdEO1FBRW5ELE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3JELE1BQU0sU0FBUyxHQUFHLDRCQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXpDLEdBQUcsQ0FBQyxPQUFPLENBQUMsc0JBQXNCLFNBQVMsUUFBUSxDQUFDLENBQUM7UUFDckQsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDdkIsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsbUJBQW1CLENBQzNDLEdBQUcsRUFDSCw2QkFBYSxDQUFDLElBQUksRUFDbEIsQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsRUFDZixTQUFTLEVBQ1QsU0FBUyxFQUNULEtBQUssQ0FBQyxJQUFJLENBQ1gsQ0FBQztRQUNGLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRCxZQUFZLENBQ1YsS0FBcUIsRUFDckIsRUFBa0IsRUFDbEIsS0FBMEIsRUFDMUIsR0FBRyxJQUFvRDtRQUV2RCxNQUFNLFNBQVMsR0FBRyw0QkFBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QyxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3pELE1BQU0sTUFBTSxHQUF3QixFQUFFLENBQUM7UUFDdkMsTUFBTSxDQUFDLHlCQUFXLENBQUMsS0FBSyxDQUFDLEdBQUcsU0FBUyxDQUFDO1FBQ3RDLDJEQUEyRDtRQUMzRCxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM3QixPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFHRyxBQUFOLEtBQUssQ0FBQyxNQUFNLENBQ1YsS0FBcUIsRUFDckIsRUFBa0IsRUFDbEIsS0FBMEIsRUFDMUIsWUFBaUMsRUFBRSxFQUNuQyxHQUFHLElBQWdEO1FBRW5ELE1BQU0sT0FBTyxHQUFHLENBQUMsR0FBSSxJQUF5QixDQUFDLENBQUM7UUFDaEQsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUM5QixPQUFxRCxFQUNyRCxJQUFJLENBQUMsU0FBUyxDQUNmLENBQUM7UUFDRixHQUFHLENBQUMsSUFBSSxDQUFDLHlCQUF5QixPQUFPLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDbEQsTUFBTSxTQUFTLEdBQUcsNEJBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsU0FBUyxRQUFRLENBQUMsQ0FBQztRQUNwRCxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN2QixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FDekMsR0FBRyxFQUNILDZCQUFhLENBQUMsTUFBTSxFQUNwQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxDQUFDLEVBQUUsd0RBQXdEO1FBQ2pILFNBQVMsRUFDVCxTQUFTLEVBQ1QsS0FBSyxDQUFDLElBQUksQ0FDWCxDQUFDO1FBQ0YsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUdZLEFBQU4sS0FBSyxDQUFDLE1BQU0sQ0FDbkIsS0FBcUIsRUFDckIsRUFBa0IsRUFDbEIsR0FBRyxJQUFnRDtRQUVuRCxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNwRCxNQUFNLFNBQVMsR0FBRyw0QkFBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QyxHQUFHLENBQUMsT0FBTyxDQUFDLHVCQUF1QixTQUFTLFFBQVEsQ0FBQyxDQUFDO1FBQ3RELEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZCLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUN6QyxHQUFHLEVBQ0gsNkJBQWEsQ0FBQyxNQUFNLEVBQ3BCLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQ2YsU0FBUyxFQUNULFNBQVMsRUFDVCxLQUFLLENBQUMsSUFBSSxDQUNYLENBQUM7UUFDRixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQXdCRztJQUVHLEFBQU4sS0FBSyxDQUFDLEdBQUcsQ0FDUCxRQUFvQixFQUNwQixXQUFjLElBQVMsRUFDdkIsS0FBNEIsRUFDNUIsR0FBRyxJQUFnRDtRQUVuRCxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNqRCxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO1FBQzdCLEdBQUcsQ0FBQyxJQUFJLENBQUMscUNBQXFDLDRCQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4RSxJQUFJLGlCQUFzQixDQUFDO1FBQzNCLElBQUksQ0FBQztZQUNILGlCQUFpQixHQUFHLE1BQU0sSUFBSSxDQUFDLG1CQUFtQixDQUNoRCxHQUFHLEVBQ0gsS0FBSyxFQUNMLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRSxRQUFRLENBQUMsRUFDcEMsU0FBUyxFQUNULFNBQVMsRUFDVCxTQUFTLENBQ1YsQ0FBQztRQUNKLENBQUM7UUFBQyxPQUFPLENBQVUsRUFBRSxDQUFDO1lBQ3BCLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFVLENBQUMsQ0FBQztRQUNwQyxDQUFDO1FBQ0QsSUFBSSxNQUFXLENBQUM7UUFDaEIsSUFBSSxDQUFDO1lBQ0gsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7UUFDdEQsQ0FBQztRQUFDLE9BQU8sQ0FBTSxFQUFFLENBQUM7WUFDaEIsTUFBTSxJQUFJLGtDQUFrQixDQUFDLDZCQUE2QixDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2pFLENBQUM7UUFFRCxNQUFNLFdBQVcsR0FBRyxDQUFDLE1BQXdCLEVBQUUsRUFBRTtZQUMvQyxJQUFJLDRCQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztnQkFBRSxPQUFPLDRCQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3RELE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUMsQ0FBQztRQUVGLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTTtnQkFBRSxPQUFPLE1BQVcsQ0FBQztZQUN2QyxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckIsSUFBSSw0QkFBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQ25CLDhDQUE4QztnQkFDOUMsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyw0QkFBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBTSxDQUFDO1lBQ2xELE9BQU8sTUFBVyxDQUFDO1FBQ3JCLENBQUM7UUFFRCxPQUFPLFdBQVcsQ0FBQyxNQUFhLENBQU0sQ0FBQztJQUN6QyxDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBRUcsQUFBTixLQUFLLENBQUMsSUFBSSxDQUNSLElBQVksRUFDWixRQUFnQixFQUNoQixPQUE0QixFQUM1QixHQUFHLElBQWdEO1FBRW5ELE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xELEdBQUcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLElBQUksSUFBSSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQzlDLElBQUksaUJBQXNCLENBQUM7UUFDM0IsSUFBSSxDQUFDO1lBQ0gsaUJBQWlCLEdBQUcsTUFBTSxJQUFJLENBQUMsbUJBQW1CLENBQ2hELEdBQUcsRUFDSCxNQUFNLEVBQ04sQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsRUFDekMsU0FBUyxFQUNULFNBQVMsRUFDVCxTQUFTLENBQ1YsQ0FBQztRQUNKLENBQUM7UUFBQyxPQUFPLENBQVUsRUFBRSxDQUFDO1lBQ3BCLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFVLENBQUMsQ0FBQztRQUNwQyxDQUFDO1FBQ0QsSUFBSSxNQUF1QixDQUFDO1FBQzVCLElBQUksQ0FBQztZQUNILE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO1FBQ3RELENBQUM7UUFBQyxPQUFPLENBQU0sRUFBRSxDQUFDO1lBQ2hCLE1BQU0sSUFBSSxrQ0FBa0IsQ0FBQyxrQ0FBa0MsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN0RSxDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7O09BSUc7SUFDTSxTQUFTO1FBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTztZQUNmLElBQUksQ0FBQyxPQUFPLEdBQUcsbUJBQW1CLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM1RCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUVEOzs7O09BSUc7SUFDTyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQStCO1FBQ3JELE9BQU8sbUJBQW1CLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRU8sZUFBZSxDQUFDLFNBQWtCO1FBQ3hDLElBQUksQ0FBQyxTQUFTO1lBQUUsT0FBTyxTQUFTLENBQUM7UUFDakMsT0FBTyxHQUFHLFNBQVMsVUFBVSxDQUFDO0lBQ2hDLENBQUM7SUFFRDs7OztPQUlHO0lBQ08sS0FBSyxDQUFDLFFBQVEsQ0FDdEIsR0FBK0IsRUFDL0IsWUFBcUI7UUFFckIsT0FBTyxtQkFBbUIsQ0FBQyxXQUFXLENBQ3BDLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFDdkIsSUFBSSxDQUFDLE1BQU0sRUFDWCxZQUFZLENBQ2IsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09BMkJHO0lBQ08sS0FBSyxDQUFDLFdBQVcsQ0FDekIsR0FBK0IsRUFDL0IsR0FBVyxFQUNYLE1BQU0sR0FBRyxJQUFJLEVBQ2IsSUFBWSxFQUNaLGFBQXNDLEVBQ3RDLHNCQUFzQyxFQUN0QyxTQUFrQjtRQUVsQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDM0MsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQztZQUNILE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FDbEMsR0FBRyxFQUNILElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQ2hDLENBQUM7WUFDRixHQUFHLENBQUMsT0FBTyxDQUNULEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFVBQVUsb0JBQW9CLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLElBQUksR0FBRyxFQUFFLENBQzFILENBQUM7WUFDRixHQUFHLENBQUMsS0FBSyxDQUFDLFNBQVMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFDMUUsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO1lBRTVELHNCQUFzQixHQUFHLHNCQUFzQixFQUFFLE1BQU07Z0JBQ3JELENBQUMsQ0FBQyxzQkFBc0I7Z0JBQ3hCLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDZCxNQUFNLGVBQWUsR0FBb0I7Z0JBQ3ZDLFNBQVMsRUFBRSxJQUFJLElBQUksRUFBRTtnQkFDckIsYUFBYSxFQUFFLGFBQWE7Z0JBQzVCLDBFQUEwRTthQUMzRSxDQUFDO1lBRUYsT0FBTyxNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxlQUFlLENBQUMsQ0FBQztRQUMzRCxDQUFDO1FBQUMsT0FBTyxDQUFNLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssRUFBRSxFQUFFLENBQUM7Z0JBQ2xCLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDN0MsQ0FBQztZQUNELE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzQixDQUFDO2dCQUFTLENBQUM7WUFDVCxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxXQUFXLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxxQkFBcUIsQ0FBQyxDQUFDO1lBQ2xFLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNsQixDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNNLFVBQVUsQ0FBc0IsR0FBbUI7UUFDMUQsT0FBTyxtQkFBbUIsQ0FBQyxVQUFVLENBQUksR0FBRyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0gsS0FBSyxDQUFDLGlCQUFpQixDQUNyQixHQUErQixFQUMvQixHQUFXLEVBQ1gsSUFBWSxFQUNaLGFBQXNDLEVBQ3RDLHNCQUFzQyxFQUN0QyxTQUFrQjtRQUVsQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQ3JCLEdBQUcsRUFDSCxHQUFHLEVBQ0gsSUFBSSxFQUNKLElBQUksRUFDSixhQUFhLEVBQ2Isc0JBQXNCLEVBQ3RCLFNBQVMsQ0FDVixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0gsS0FBSyxDQUFDLG1CQUFtQixDQUN2QixHQUErQixFQUMvQixHQUFXLEVBQ1gsSUFBWSxFQUNaLGFBQXNDLEVBQ3RDLHNCQUFzQyxFQUN0QyxTQUFrQjtRQUVsQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQ3JCLEdBQUcsRUFDSCxHQUFHLEVBQ0gsS0FBSyxFQUNMLElBQUksRUFDSixhQUFhLEVBQ2Isc0JBQXNCLEVBQ3RCLFNBQVMsQ0FDVixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxLQUFLLENBQUMsS0FBSztRQUNULElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLFdBQVcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLGlCQUFpQixDQUFDLENBQUM7WUFDaEUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN0QixDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILE1BQU0sQ0FBQyxXQUFXLENBQ2hCLE9BQWdCLEVBQ2hCLE1BQWtCLEVBQ2xCLFlBQXFCO1FBRXJCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMzQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDekQsSUFBSSxRQUFrQixDQUFDO1FBQ3ZCLElBQUksQ0FBQztZQUNILEdBQUcsQ0FBQyxLQUFLLENBQ1Asd0JBQXdCLE1BQU0sQ0FBQyxhQUFhLGFBQWEsWUFBWSxJQUFJLE1BQU0sQ0FBQyxZQUFZLGlCQUFpQixNQUFNLENBQUMsT0FBTyxFQUFFLENBQzlILENBQUM7WUFDRixZQUFZLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUM7WUFDakUsUUFBUSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUNyRSxDQUFDO1FBQUMsT0FBTyxDQUFNLEVBQUUsQ0FBQztZQUNoQixNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0IsQ0FBQztRQUNELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxNQUFNLENBQUMsVUFBVSxDQUFDLE9BQWdCLEVBQUUsV0FBbUI7UUFDckQsTUFBTSxHQUFHLEdBQUcsaUJBQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3pDLElBQUksT0FBZ0IsQ0FBQztRQUNyQixJQUFJLENBQUM7WUFDSCxHQUFHLENBQUMsS0FBSyxDQUFDLHlCQUF5QixXQUFXLEVBQUUsQ0FBQyxDQUFDO1lBQ2xELE9BQU8sR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzVDLENBQUM7UUFBQyxPQUFPLENBQU0sRUFBRSxDQUFDO1lBQ2hCLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzQixDQUFDO1FBRUQsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUNyQixHQUErQixFQUMvQixNQUFrQixFQUNsQixNQUFlO1FBRWYsT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FDOUIsTUFBTSxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQ3hDLE1BQU0sRUFDTixHQUFHLENBQ0osQ0FBWSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBa0I7UUFDakMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3pDLEdBQUcsQ0FBQyxLQUFLLENBQUMsc0NBQXNDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ2hFLElBQUksVUFBVSxHQUFvQixNQUFNLENBQUMsT0FBMEIsQ0FBQztRQUVwRSxJQUFJLE9BQU8sVUFBVSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ25DLElBQ0UsVUFBVSxDQUFDLEtBQUssQ0FDZCxzRUFBc0UsQ0FDdkUsRUFDRCxDQUFDO2dCQUNELFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUMvQyxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDO29CQUNILFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQUUsQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0JBQ2hFLENBQUM7Z0JBQUMsT0FBTyxDQUFVLEVBQUUsQ0FBQztvQkFDcEIsTUFBTSxJQUFJLDZCQUFhLENBQ3JCLDJDQUEyQyxVQUFVLEtBQUssQ0FBQyxFQUFFLENBQzlELENBQUM7Z0JBQ0osQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBRUQsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDOUQsR0FBRyxDQUFDLEtBQUssQ0FBQyxxQ0FBcUMsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7UUFDdEUsT0FBTyxJQUFJLGdCQUFNLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxjQUFjLEVBQUU7WUFDckQsaUNBQWlDLEVBQUUsQ0FBQyxNQUFNLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJO1lBQ3pFLDhCQUE4QixFQUFFLENBQUMsTUFBTSxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSTtTQUN2RSxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09BdUJHO0lBQ0gsTUFBTSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQ3hCLE1BQWMsRUFDZCxNQUFrQixFQUNsQixHQUErQjtRQUUvQixNQUFNLEdBQUcsR0FBRyxpQkFBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDNUMsR0FBRyxDQUFDLEtBQUssQ0FDUCxnQ0FBZ0MsTUFBTSxDQUFDLEtBQUssVUFBVSxNQUFNLENBQUMsdUJBQXVCLEVBQUUsQ0FDdkYsQ0FBQztRQUNGLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBQSx1QkFBVyxFQUNoQyxNQUFNLENBQUMsS0FBSyxFQUNaLE1BQU0sQ0FBQyx1QkFBOEIsQ0FDdEMsQ0FBQztRQUNGLEdBQUcsQ0FBQyxLQUFLLENBQUMsOEJBQThCLE1BQU0sQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLENBQUM7UUFFekUsSUFBSSxNQUFjLEVBQ2hCLEtBQUssR0FBRyxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUM7UUFDbkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNoQixNQUFNLEdBQUcsTUFBTSxJQUFBLHFCQUFTLEVBQUMsTUFBTSxDQUFDLHNCQUE2QixDQUFDLENBQUM7UUFDakUsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLEdBQUcsR0FBRyxJQUFJLG1DQUFzQixDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDM0QsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLHlCQUF5QixDQUM5QyxNQUFNLENBQUMsdUJBQThCLENBQ3RDLENBQUM7WUFDRixNQUFNLFlBQVksR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDO2dCQUNqQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxVQUFvQjtnQkFDdEMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBVztnQkFDckMsVUFBVSxFQUFFLFVBQVU7Z0JBQ3RCLDZCQUE2QjthQUM5QixDQUFDLENBQUM7WUFDSCxNQUFNLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQztZQUU3QixLQUFLLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQztRQUM3QixDQUFDO1FBRUQsTUFBTSxPQUFPLEdBQUc7WUFDZCxNQUFNO1lBQ04sUUFBUSxFQUFFLFFBQVE7WUFDbEIsTUFBTSxFQUFFLE1BQU07WUFDZCw0Q0FBNEM7WUFDNUMsZUFBZSxFQUFFLEdBQUcsRUFBRTtnQkFDcEIsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLENBQUMsd0JBQXdCO1lBQy9GLENBQUM7WUFDRCxjQUFjLEVBQUUsR0FBRyxFQUFFO2dCQUNuQixPQUFPLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsQ0FBQyx5QkFBeUI7WUFDL0YsQ0FBQztZQUNELGFBQWEsRUFBRSxHQUFHLEVBQUU7Z0JBQ2xCLE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQyx3QkFBd0I7WUFDN0YsQ0FBQztZQUNELG1CQUFtQixFQUFFLEdBQUcsRUFBRTtnQkFDeEIsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxDQUFDLHVCQUF1QjtZQUM1RixDQUFDO1NBQ2dCLENBQUM7UUFFcEIsR0FBRyxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDM0MsTUFBTSxPQUFPLEdBQUcsSUFBQSx3QkFBTyxFQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRWpDLGlCQUFpQjtRQUNqQixJQUFJLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNmLE9BQU8sQ0FBQyxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRTtnQkFDdkMsS0FBSyxDQUFDLE1BQWtCLEVBQUUsT0FBWSxFQUFFLFFBQWU7b0JBQ3JELE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztvQkFDekMsS0FBSyxFQUFFLENBQUM7Z0JBQ1YsQ0FBQzthQUNGLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDTSxRQUFRO1FBQ2YsT0FBTyxJQUFJLG1CQUFtQixDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUM7SUFDcEQsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNPLE1BQU0sQ0FBQyxVQUFVLENBQXNCLEdBQW1CO1FBQ2xFLE9BQU87UUFDUCxxQ0FBcUM7UUFDckMsa0RBQWtEO1FBQ2xELE1BQU07UUFDTixJQUFJO1FBQ0osd0RBQXdEO1FBQ3hELE1BQU0sR0FBRyxHQUFHLE9BQU8sR0FBRyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDO1FBRXhELElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQztZQUNwQyxPQUFPLElBQUksOEJBQXFCLENBQUMsR0FBRyxDQUFNLENBQUM7UUFFN0MsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLDRCQUE0QixDQUFDO1lBQzVDLE9BQU8sSUFBSSwrQkFBc0IsQ0FBQyxHQUFHLENBQU0sQ0FBQztRQUU5QyxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsdUJBQXVCLENBQUM7WUFDdkMsT0FBTyxJQUFJLGlDQUF3QixDQUFDLEdBQUcsQ0FBTSxDQUFDO1FBRWhELElBQUksR0FBRyxZQUFZLEtBQUssSUFBSyxHQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDOUMsUUFBUyxHQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQzFCLEtBQUssQ0FBQztvQkFDSixPQUFPLElBQUkseUJBQWdCLENBQUMsR0FBRyxDQUFNLENBQUM7WUFDMUMsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsNkJBQWEsQ0FBQyxJQUFJLENBQUM7WUFBRSxPQUFPLElBQUksNkJBQWEsQ0FBQyxHQUFHLENBQU0sQ0FBQztRQUN6RSxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsNkJBQWEsQ0FBQyxJQUFJLENBQUM7WUFBRSxPQUFPLElBQUksNkJBQWEsQ0FBQyxHQUFHLENBQU0sQ0FBQztRQUN6RSxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsK0JBQWUsQ0FBQyxJQUFJLENBQUM7WUFDcEMsT0FBTyxJQUFJLCtCQUFlLENBQUMsR0FBRyxDQUFNLENBQUM7UUFDdkMsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLGlCQUFVLENBQUMsSUFBSSxDQUFDO1lBQUUsT0FBTyxJQUFJLGlCQUFVLENBQUMsR0FBRyxDQUFNLENBQUM7UUFDbkUsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLGtCQUFXLENBQUMsSUFBSSxDQUFDO1lBQUUsT0FBTyxJQUFJLGtCQUFXLENBQUMsR0FBRyxDQUFNLENBQUM7UUFDckUsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLHVCQUFnQixDQUFDLElBQUksQ0FBQztZQUNyQyxPQUFPLElBQUksdUJBQWdCLENBQUMsR0FBRyxDQUFNLENBQUM7UUFDeEMsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLHFCQUFjLENBQUMsSUFBSSxDQUFDO1lBQUUsT0FBTyxJQUFJLHFCQUFjLENBQUMsR0FBRyxDQUFNLENBQUM7UUFDM0UsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLG9CQUFhLENBQUMsSUFBSSxDQUFDO1lBQUUsT0FBTyxJQUFJLG9CQUFhLENBQUMsR0FBRyxDQUFNLENBQUM7UUFDekUsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLHlCQUFrQixDQUFDLElBQUksQ0FBQztZQUN2QyxPQUFPLElBQUkseUJBQWtCLENBQUMsR0FBRyxDQUFNLENBQUM7UUFDMUMsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLHFCQUFjLENBQUMsSUFBSSxDQUFDO1lBQUUsT0FBTyxJQUFJLHFCQUFjLENBQUMsR0FBRyxDQUFNLENBQUM7UUFDM0UsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLHNCQUFlLENBQUMsSUFBSSxDQUFDO1lBQ3BDLE9BQU8sSUFBSSxzQkFBZSxDQUFDLEdBQUcsQ0FBTSxDQUFDO1FBQ3ZDLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxrQ0FBa0IsQ0FBQyxJQUFJLENBQUM7WUFDdkMsT0FBTyxJQUFJLGtDQUFrQixDQUFDLEdBQUcsQ0FBTSxDQUFDO1FBQzFDLE9BQU8sSUFBSSw2QkFBYSxDQUFDLEdBQUcsQ0FBTSxDQUFDO0lBQ3JDLENBQUM7O0FBcGpDSCxrREFxakNDO0FBL3JCZ0I7SUFGZCxJQUFBLGVBQUssR0FBRTtJQUNQLElBQUEsZUFBSyxHQUFFOztxRUFNa0IsY0FBTzs7aURBbUJoQztBQVdLO0lBRkwsSUFBQSxlQUFLLEdBQUU7SUFDUCxJQUFBLGVBQUssR0FBRTs7cURBSWtCLGNBQU87OytDQWdCaEM7QUE0Qks7SUFGTCxJQUFBLGVBQUssR0FBRTtJQUNQLElBQUEsZUFBSyxHQUFFOztxRUFNa0IsY0FBTzs7aURBb0JoQztBQVdjO0lBRmQsSUFBQSxlQUFLLEdBQUU7SUFDUCxJQUFBLGVBQUssR0FBRTs7cURBSWtCLGNBQU87O2lEQWVoQztBQTRCSztJQURMLElBQUEsZUFBSyxHQUFFOztpRUFHSSxDQUFDLG9CQUFELENBQUMsd0NBRWEsY0FBTzs7OENBd0NoQztBQWFLO0lBREwsSUFBQSxlQUFLLEdBQUU7OzZEQUtrQixjQUFPOzsrQ0F3QmhDO0FBd2NILG1CQUFtQixDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQ2pDLGNBQU8sQ0FBQyxVQUFVLENBQUMseUJBQWEsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFwiLi4vc2hhcmVkL292ZXJyaWRlc1wiO1xuaW1wb3J0IHtcbiAgQ291Y2hEQktleXMsXG4gIHR5cGUgTWFuZ29RdWVyeSxcbiAgdHlwZSBWaWV3UmVzcG9uc2UsXG59IGZyb20gXCJAZGVjYWYtdHMvZm9yLWNvdWNoZGJcIjtcbmltcG9ydCB7IENsaWVudCB9IGZyb20gXCJAZ3JwYy9ncnBjLWpzXCI7XG5pbXBvcnQgKiBhcyBncnBjIGZyb20gXCJAZ3JwYy9ncnBjLWpzXCI7XG5pbXBvcnQge1xuICBNb2RlbCxcbiAgdHlwZSBNb2RlbENvbnN0cnVjdG9yLFxuICB0eXBlIFNlcmlhbGl6ZXIsXG59IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcbmltcG9ydCB7IGRlYnVnLCBmaW5hbCwgTG9nZ2luZyB9IGZyb20gXCJAZGVjYWYtdHMvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgdHlwZSBQZWVyQ29uZmlnLCB0eXBlIFNlZ3JlZ2F0ZWRNb2RlbCB9IGZyb20gXCIuLi9zaGFyZWQvdHlwZXNcIjtcbmltcG9ydCB7XG4gIGNvbm5lY3QsXG4gIHR5cGUgQ29ubmVjdE9wdGlvbnMsXG4gIEdhdGV3YXksXG4gIE5ldHdvcmssXG4gIFByb3Bvc2FsT3B0aW9ucyxcbiAgQ29udHJhY3QgYXMgQ29udHJha3QsXG4gIHR5cGUgU2lnbmVyLFxufSBmcm9tIFwiQGh5cGVybGVkZ2VyL2ZhYnJpYy1nYXRld2F5XCI7XG5pbXBvcnQgeyBnZXRJZGVudGl0eSwgZ2V0U2lnbmVyIH0gZnJvbSBcIi4vZmFicmljLWZzXCI7XG5pbXBvcnQge1xuICBCYXNlRXJyb3IsXG4gIEludGVybmFsRXJyb3IsXG4gIE9wZXJhdGlvbktleXMsXG4gIFNlcmlhbGl6YXRpb25FcnJvcixcbiAgQnVsa0NydWRPcGVyYXRpb25LZXlzLFxuICBOb3RGb3VuZEVycm9yLFxuICBDb25mbGljdEVycm9yLFxuICBCYWRSZXF1ZXN0RXJyb3IsXG4gIHR5cGUgUHJpbWFyeUtleVR5cGUsXG59IGZyb20gXCJAZGVjYWYtdHMvZGItZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHtcbiAgQ29udGV4dCxcbiAgQWRhcHRlcixcbiAgdHlwZSBBZGFwdGVyRmxhZ3MsXG4gIEF1dGhvcml6YXRpb25FcnJvcixcbiAgQ29ubmVjdGlvbkVycm9yLFxuICBGb3JiaWRkZW5FcnJvcixcbiAgTWlncmF0aW9uRXJyb3IsXG4gIE9ic2VydmVyRXJyb3IsXG4gIFBhZ2luZ0Vycm9yLFxuICBQZXJzaXN0ZW5jZUtleXMsXG4gIFF1ZXJ5RXJyb3IsXG4gIFJlcG9zaXRvcnksXG4gIFVuc3VwcG9ydGVkRXJyb3IsXG4gIFN0YXRlbWVudCxcbiAgdHlwZSBQcmVwYXJlZFN0YXRlbWVudCxcbiAgUGFnaW5hdG9yLFxuICBNYXliZUNvbnRleHR1YWxBcmcsXG4gIENvbnRleHR1YWxBcmdzLFxuICB0eXBlIFByZXBhcmVkTW9kZWwsXG59IGZyb20gXCJAZGVjYWYtdHMvY29yZVwiO1xuaW1wb3J0IHsgRmFicmljRmxhdm91ciB9IGZyb20gXCIuLi9zaGFyZWQvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBDbGllbnRTZXJpYWxpemVyIH0gZnJvbSBcIi4uL3NoYXJlZC9DbGllbnRTZXJpYWxpemVyXCI7XG5pbXBvcnQgeyBGYWJyaWNDbGllbnREaXNwYXRjaCB9IGZyb20gXCIuL0ZhYnJpY0NsaWVudERpc3BhdGNoXCI7XG5pbXBvcnQgeyBIU01TaWduZXJGYWN0b3J5Q3VzdG9tIH0gZnJvbSBcIi4vZmFicmljLWhzbVwiO1xuaW1wb3J0IHsgdHlwZSBDb25zdHJ1Y3RvciB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdGlvblwiO1xuaW1wb3J0IHsgRmFicmljQ2xpZW50U3RhdGVtZW50IH0gZnJvbSBcIi4vRmFicmljQ2xpZW50U3RhdGVtZW50XCI7XG5pbXBvcnQgeyBGYWJyaWNDbGllbnRQYWdpbmF0b3IgfSBmcm9tIFwiLi9GYWJyaWNDbGllbnRQYWdpbmF0b3JcIjtcbmltcG9ydCB7IEZhYnJpY0NsaWVudFJlcG9zaXRvcnkgfSBmcm9tIFwiLi9GYWJyaWNDbGllbnRSZXBvc2l0b3J5XCI7XG5pbXBvcnQge1xuICBFbmRvcnNlbWVudEVycm9yLFxuICBFbmRvcnNlbWVudFBvbGljeUVycm9yLFxuICBNdmNjUmVhZENvbmZsaWN0RXJyb3IsXG4gIFBoYW50b21SZWFkQ29uZmxpY3RFcnJvcixcbn0gZnJvbSBcIi4uL3NoYXJlZC9lcnJvcnNcIjtcbmltcG9ydCB7IEZhYnJpY0NsaWVudEZsYWdzIH0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7IERlZmF1bHRGYWJyaWNDbGllbnRGbGFncyB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0IGZzIGZyb20gXCJmc1wiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBBZGFwdGVyIGZvciBpbnRlcmFjdGluZyB3aXRoIEh5cGVybGVkZ2VyIEZhYnJpYyBuZXR3b3Jrc1xuICogQHN1bW1hcnkgVGhlIEZhYnJpY0FkYXB0ZXIgZXh0ZW5kcyBDb3VjaERCQWRhcHRlciB0byBwcm92aWRlIGEgc2VhbWxlc3MgaW50ZXJmYWNlIGZvciBpbnRlcmFjdGluZyB3aXRoIEh5cGVybGVkZ2VyIEZhYnJpYyBuZXR3b3Jrcy5cbiAqIEl0IGhhbmRsZXMgY29ubmVjdGlvbiBtYW5hZ2VtZW50LCB0cmFuc2FjdGlvbiBzdWJtaXNzaW9uLCBhbmQgQ1JVRCBvcGVyYXRpb25zIGFnYWluc3QgRmFicmljIGNoYWluY29kZS5cbiAqIEB0ZW1wbGF0ZSBQZWVyQ29uZmlnIC0gQ29uZmlndXJhdGlvbiB0eXBlIGZvciBjb25uZWN0aW5nIHRvIGEgRmFicmljIHBlZXJcbiAqIEB0ZW1wbGF0ZSBGYWJyaWNGbGFncyAtIEZsYWdzIHNwZWNpZmljIHRvIEZhYnJpYyBvcGVyYXRpb25zXG4gKiBAdGVtcGxhdGUgQ29udGV4dDxGYWJyaWNGbGFncz4gLSBDb250ZXh0IHR5cGUgY29udGFpbmluZyBGYWJyaWMtc3BlY2lmaWMgZmxhZ3NcbiAqIEBwYXJhbSBjb25maWcgLSBDb25maWd1cmF0aW9uIGZvciBjb25uZWN0aW5nIHRvIGEgRmFicmljIHBlZXJcbiAqIEBwYXJhbSBhbGlhcyAtIE9wdGlvbmFsIGFsaWFzIGZvciB0aGUgYWRhcHRlciBpbnN0YW5jZVxuICogQGNsYXNzIEZhYnJpY0NsaWVudEFkYXB0ZXJcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBDcmVhdGUgYSBuZXcgRmFicmljQWRhcHRlciBpbnN0YW5jZVxuICogY29uc3QgY29uZmlnOiBQZWVyQ29uZmlnID0ge1xuICogICBtc3BJZDogJ09yZzFNU1AnLFxuICogICBwZWVyRW5kcG9pbnQ6ICdsb2NhbGhvc3Q6NzA1MScsXG4gKiAgIGNoYW5uZWxOYW1lOiAnbXljaGFubmVsJyxcbiAqICAgY2hhaW5jb2RlTmFtZTogJ215Y2MnLFxuICogICBjb250cmFjdE5hbWU6ICdteWNvbnRyYWN0JyxcbiAqICAgdGxzQ2VydFBhdGg6ICcvcGF0aC90by90bHMvY2VydCcsXG4gKiAgIGNlcnREaXJlY3RvcnlQYXRoOiAnL3BhdGgvdG8vY2VydC9kaXInLFxuICogICBrZXlEaXJlY3RvcnlQYXRoOiAnL3BhdGgvdG8va2V5L2RpcidcbiAqIH07XG4gKlxuICogY29uc3QgYWRhcHRlciA9IG5ldyBGYWJyaWNBZGFwdGVyKGNvbmZpZywgJ29yZzEtYWRhcHRlcicpO1xuICpcbiAqIC8vIFVzZSB0aGUgYWRhcHRlciB0byBpbnRlcmFjdCB3aXRoIHRoZSBGYWJyaWMgbmV0d29ya1xuICogY29uc3QgcmVzdWx0ID0gYXdhaXQgYWRhcHRlci5yZWFkKCd1c2VycycsICd1c2VyMScsIG15U2VyaWFsaXplcik7XG4gKiBgYGBcbiAqIEBtZXJtYWlkXG4gKiBzZXF1ZW5jZURpYWdyYW1cbiAqICAgcGFydGljaXBhbnQgQ2xpZW50XG4gKiAgIHBhcnRpY2lwYW50IEZhYnJpY0FkYXB0ZXJcbiAqICAgcGFydGljaXBhbnQgR2F0ZXdheVxuICogICBwYXJ0aWNpcGFudCBOZXR3b3JrXG4gKiAgIHBhcnRpY2lwYW50IENvbnRyYWN0XG4gKiAgIHBhcnRpY2lwYW50IENoYWluY29kZVxuICpcbiAqICAgQ2xpZW50LT4+RmFicmljQWRhcHRlcjogY3JlYXRlKHRhYmxlTmFtZSwgaWQsIG1vZGVsLCB0cmFuc2llbnQsIHNlcmlhbGl6ZXIpXG4gKiAgIEZhYnJpY0FkYXB0ZXItPj5GYWJyaWNBZGFwdGVyOiBzdWJtaXRUcmFuc2FjdGlvbihPcGVyYXRpb25LZXlzLkNSRUFURSwgW3NlcmlhbGl6ZWRNb2RlbF0sIHRyYW5zaWVudClcbiAqICAgRmFicmljQWRhcHRlci0+PkdhdGV3YXk6IGNvbm5lY3QoKVxuICogICBHYXRld2F5LT4+TmV0d29yazogZ2V0TmV0d29yayhjaGFubmVsTmFtZSlcbiAqICAgTmV0d29yay0+PkNvbnRyYWN0OiBnZXRDb250cmFjdChjaGFpbmNvZGVOYW1lLCBjb250cmFjdE5hbWUpXG4gKiAgIEZhYnJpY0FkYXB0ZXItPj5Db250cmFjdDogc3VibWl0KGFwaSwgcHJvcG9zYWxPcHRpb25zKVxuICogICBDb250cmFjdC0+PkNoYWluY29kZTogaW52b2tlXG4gKiAgIENoYWluY29kZS0tPj5Db250cmFjdDogcmVzcG9uc2VcbiAqICAgQ29udHJhY3QtLT4+RmFicmljQWRhcHRlcjogcmVzdWx0XG4gKiAgIEZhYnJpY0FkYXB0ZXItPj5GYWJyaWNBZGFwdGVyOiBkZWNvZGUocmVzdWx0KVxuICogICBGYWJyaWNBZGFwdGVyLT4+RmFicmljQWRhcHRlcjogc2VyaWFsaXplci5kZXNlcmlhbGl6ZShkZWNvZGVkUmVzdWx0KVxuICogICBGYWJyaWNBZGFwdGVyLS0+PkNsaWVudDogZGVzZXJpYWxpemVkUmVzdWx0XG4gKi9cbmV4cG9ydCBjbGFzcyBGYWJyaWNDbGllbnRBZGFwdGVyIGV4dGVuZHMgQWRhcHRlcjxcbiAgUGVlckNvbmZpZyxcbiAgQ2xpZW50LFxuICBNYW5nb1F1ZXJ5LFxuICBDb250ZXh0PEZhYnJpY0NsaWVudEZsYWdzPlxuPiB7XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU3RhdGljIHRleHQgZGVjb2RlciBmb3IgY29udmVydGluZyBVaW50OEFycmF5IHRvIHN0cmluZ1xuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgZGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcihcInV0ZjhcIik7XG5cbiAgcHJpdmF0ZSBzdGF0aWMgc2VyaWFsaXplciA9IG5ldyBDbGllbnRTZXJpYWxpemVyKCk7XG5cbiAgcHJvdGVjdGVkIHN0YXRpYyBsb2cgPSBMb2dnaW5nLmZvcihGYWJyaWNDbGllbnRBZGFwdGVyKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2VyaWFsaXplcjogU2VyaWFsaXplcjxhbnk+ID1cbiAgICBGYWJyaWNDbGllbnRBZGFwdGVyLnNlcmlhbGl6ZXI7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIGEgbmV3IEZhYnJpY0FkYXB0ZXIgaW5zdGFuY2VcbiAgICogQHN1bW1hcnkgSW5pdGlhbGl6ZXMgYSBuZXcgYWRhcHRlciBmb3IgaW50ZXJhY3Rpbmcgd2l0aCBhIEh5cGVybGVkZ2VyIEZhYnJpYyBuZXR3b3JrXG4gICAqIEBwYXJhbSB7UGVlckNvbmZpZ30gY29uZmlnIC0gQ29uZmlndXJhdGlvbiBmb3IgY29ubmVjdGluZyB0byBhIEZhYnJpYyBwZWVyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbYWxpYXNdIC0gT3B0aW9uYWwgYWxpYXMgZm9yIHRoZSBhZGFwdGVyIGluc3RhbmNlXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihjb25maWc6IFBlZXJDb25maWcsIGFsaWFzPzogc3RyaW5nKSB7XG4gICAgc3VwZXIoXG4gICAgICBPYmplY3QuYXNzaWduKHt9LCBjb25maWcsIHtcbiAgICAgICAgZXZhbHVhdGVUaW1lb3V0OiA1LFxuICAgICAgICBlbmRvcnNlVGltZW91dDogMTUsXG4gICAgICAgIHN1Ym1pdFRpbWVvdXQ6IDUsXG4gICAgICAgIGNvbW1pdFRpbWVvdXQ6IDYwLFxuICAgICAgfSksXG4gICAgICBGYWJyaWNGbGF2b3VyLFxuICAgICAgYWxpYXNcbiAgICApO1xuICB9XG5cbiAgb3ZlcnJpZGUgU3RhdGVtZW50PE0gZXh0ZW5kcyBNb2RlbD4oXG4gICAgb3ZlcnJpZGVzPzogUGFydGlhbDxBZGFwdGVyRmxhZ3M+XG4gICk6IFN0YXRlbWVudDxNLCBGYWJyaWNDbGllbnRBZGFwdGVyLCBhbnksIE1hbmdvUXVlcnk+IHtcbiAgICByZXR1cm4gbmV3IEZhYnJpY0NsaWVudFN0YXRlbWVudCh0aGlzLCBvdmVycmlkZXMpO1xuICB9XG5cbiAgUGFnaW5hdG9yPE0gZXh0ZW5kcyBNb2RlbD4oXG4gICAgcXVlcnk6IFByZXBhcmVkU3RhdGVtZW50PGFueT4gfCBNYW5nb1F1ZXJ5LFxuICAgIHNpemU6IG51bWJlcixcbiAgICBjbGF6ejogQ29uc3RydWN0b3I8TT5cbiAgKTogUGFnaW5hdG9yPE0sIGFueSwgTWFuZ29RdWVyeT4ge1xuICAgIHJldHVybiBuZXcgRmFicmljQ2xpZW50UGFnaW5hdG9yKHRoaXMsIHF1ZXJ5LCBzaXplLCBjbGF6eik7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgZmxhZ3M8TSBleHRlbmRzIE1vZGVsPihcbiAgICBvcGVyYXRpb246IE9wZXJhdGlvbktleXMgfCBzdHJpbmcsXG4gICAgbW9kZWw6IENvbnN0cnVjdG9yPE0+IHwgQ29uc3RydWN0b3I8TT5bXSB8IHVuZGVmaW5lZCxcbiAgICBmbGFnczogUGFydGlhbDxGYWJyaWNDbGllbnRGbGFncz4sXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxGYWJyaWNDbGllbnRGbGFncz4ge1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKFxuICAgICAgYXdhaXQgc3VwZXIuZmxhZ3MoXG4gICAgICAgIG9wZXJhdGlvbixcbiAgICAgICAgbW9kZWwsXG4gICAgICAgIE9iamVjdC5hc3NpZ24oe30sIHRoaXMuY29uZmlnLCBmbGFncyksXG4gICAgICAgIC4uLmFyZ3NcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBEZWNvZGVzIGEgVWludDhBcnJheSB0byBhIHN0cmluZ1xuICAgKiBAc3VtbWFyeSBDb252ZXJ0cyBiaW5hcnkgZGF0YSByZWNlaXZlZCBmcm9tIEZhYnJpYyB0byBhIHN0cmluZyB1c2luZyBVVEYtOCBlbmNvZGluZ1xuICAgKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGRhdGEgLSBUaGUgYmluYXJ5IGRhdGEgdG8gZGVjb2RlXG4gICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGRlY29kZWQgc3RyaW5nXG4gICAqL1xuICBkZWNvZGUoZGF0YTogVWludDhBcnJheSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEZhYnJpY0NsaWVudEFkYXB0ZXIuZGVjb2Rlci5kZWNvZGUoZGF0YSk7XG4gIH1cblxuICBvdmVycmlkZSByZXBvc2l0b3J5PFxuICAgIFIgZXh0ZW5kcyBSZXBvc2l0b3J5PFxuICAgICAgYW55LFxuICAgICAgQWRhcHRlcjxQZWVyQ29uZmlnLCBDbGllbnQsIE1hbmdvUXVlcnksIENvbnRleHQ8RmFicmljQ2xpZW50RmxhZ3M+PlxuICAgID4sXG4gID4oKTogQ29uc3RydWN0b3I8Uj4ge1xuICAgIHJldHVybiBGYWJyaWNDbGllbnRSZXBvc2l0b3J5IGFzIHVua25vd24gYXMgQ29uc3RydWN0b3I8Uj47XG4gIH1cblxuICBwcm90ZWN0ZWQgY3JlYXRlUHJlZml4PE0gZXh0ZW5kcyBNb2RlbD4oXG4gICAgY2xheno6IENvbnN0cnVjdG9yPE0+LFxuICAgIGlkOiBQcmltYXJ5S2V5VHlwZSxcbiAgICBtb2RlbDogUmVjb3JkPHN0cmluZywgYW55PixcbiAgICAuLi5hcmdzOiBNYXliZUNvbnRleHR1YWxBcmc8Q29udGV4dDxGYWJyaWNDbGllbnRGbGFncz4+XG4gICk6IFtDb25zdHJ1Y3RvcjxNPiwgUHJpbWFyeUtleVR5cGUsIFJlY29yZDxzdHJpbmcsIGFueT4sIC4uLmFueVtdLCBDb250ZXh0XSB7XG4gICAgY29uc3QgeyBjdHhBcmdzIH0gPSB0aGlzLmxvZ0N0eChhcmdzLCB0aGlzLmNyZWF0ZVByZWZpeCk7XG4gICAgY29uc3QgdGFibGVOYW1lID0gTW9kZWwudGFibGVOYW1lKGNsYXp6KTtcbiAgICBjb25zdCByZWNvcmQ6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgICByZWNvcmRbQ291Y2hEQktleXMuVEFCTEVdID0gdGFibGVOYW1lO1xuICAgIE9iamVjdC5hc3NpZ24ocmVjb3JkLCBtb2RlbCk7XG4gICAgcmV0dXJuIFtjbGF6eiwgaWQsIHJlY29yZCwgLi4uY3R4QXJnc107XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFByZXBhcmVzIG11bHRpcGxlIHJlY29yZHMgZm9yIGNyZWF0aW9uXG4gICAqIEBzdW1tYXJ5IEFkZHMgbmVjZXNzYXJ5IENvdWNoREIgZmllbGRzIHRvIG11bHRpcGxlIHJlY29yZHMgYmVmb3JlIGNyZWF0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZU5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgdGFibGVcbiAgICogQHBhcmFtIHtzdHJpbmdbXXxudW1iZXJbXX0gaWRzIC0gVGhlIElEcyBvZiB0aGUgcmVjb3Jkc1xuICAgKiBAcGFyYW0gbW9kZWxzIC0gVGhlIG1vZGVscyB0byBwcmVwYXJlXG4gICAqIEByZXR1cm4gQSB0dXBsZSBjb250YWluaW5nIHRoZSB0YWJsZU5hbWUsIGlkcywgYW5kIHByZXBhcmVkIHJlY29yZHNcbiAgICogQHRocm93cyB7SW50ZXJuYWxFcnJvcn0gSWYgaWRzIGFuZCBtb2RlbHMgYXJyYXlzIGhhdmUgZGlmZmVyZW50IGxlbmd0aHNcbiAgICovXG4gIHByb3RlY3RlZCBjcmVhdGVBbGxQcmVmaXg8TSBleHRlbmRzIE1vZGVsPihcbiAgICBjbGF6ejogQ29uc3RydWN0b3I8TT4sXG4gICAgaWRzOiBzdHJpbmdbXSB8IG51bWJlcltdLFxuICAgIG1vZGVsczogUmVjb3JkPHN0cmluZywgYW55PltdLFxuICAgIC4uLmFyZ3M6IE1heWJlQ29udGV4dHVhbEFyZzxDb250ZXh0PEZhYnJpY0NsaWVudEZsYWdzPj5cbiAgKSB7XG4gICAgY29uc3QgdGFibGVOYW1lID0gTW9kZWwudGFibGVOYW1lKGNsYXp6KTtcbiAgICBpZiAoaWRzLmxlbmd0aCAhPT0gbW9kZWxzLmxlbmd0aClcbiAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFwiSWRzIGFuZCBtb2RlbHMgbXVzdCBoYXZlIHRoZSBzYW1lIGxlbmd0aFwiKTtcbiAgICBjb25zdCB7IGN0eEFyZ3MgfSA9IHRoaXMubG9nQ3R4KGFyZ3MsIHRoaXMuY3JlYXRlQWxsUHJlZml4KTtcbiAgICBjb25zdCByZWNvcmRzID0gaWRzLm1hcCgoaWQsIGNvdW50KSA9PiB7XG4gICAgICBjb25zdCByZWNvcmQ6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgICAgIHJlY29yZFtDb3VjaERCS2V5cy5UQUJMRV0gPSB0YWJsZU5hbWU7XG4gICAgICBPYmplY3QuYXNzaWduKHJlY29yZCwgbW9kZWxzW2NvdW50XSk7XG4gICAgICByZXR1cm4gcmVjb3JkO1xuICAgIH0pO1xuICAgIHJldHVybiBbY2xhenosIGlkcywgcmVjb3JkcywgLi4uY3R4QXJnc107XG4gIH1cblxuICBwcm90ZWN0ZWQgdXBkYXRlQWxsUHJlZml4PE0gZXh0ZW5kcyBNb2RlbD4oXG4gICAgY2xheno6IENvbnN0cnVjdG9yPE0+LFxuICAgIGlkczogUHJpbWFyeUtleVR5cGVbXSxcbiAgICBtb2RlbHM6IFJlY29yZDxzdHJpbmcsIGFueT5bXSxcbiAgICAuLi5hcmdzOiBNYXliZUNvbnRleHR1YWxBcmc8Q29udGV4dDxGYWJyaWNDbGllbnRGbGFncz4+XG4gICkge1xuICAgIGNvbnN0IHRhYmxlTmFtZSA9IE1vZGVsLnRhYmxlTmFtZShjbGF6eik7XG4gICAgaWYgKGlkcy5sZW5ndGggIT09IG1vZGVscy5sZW5ndGgpXG4gICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcIklkcyBhbmQgbW9kZWxzIG11c3QgaGF2ZSB0aGUgc2FtZSBsZW5ndGhcIik7XG4gICAgY29uc3QgeyBjdHhBcmdzIH0gPSB0aGlzLmxvZ0N0eChhcmdzLCB0aGlzLnVwZGF0ZUFsbFByZWZpeCk7XG4gICAgY29uc3QgcmVjb3JkcyA9IGlkcy5tYXAoKCkgPT4ge1xuICAgICAgY29uc3QgcmVjb3JkOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG4gICAgICByZWNvcmRbQ291Y2hEQktleXMuVEFCTEVdID0gdGFibGVOYW1lO1xuICAgICAgcmV0dXJuIHJlY29yZDtcbiAgICB9KTtcbiAgICByZXR1cm4gW2NsYXp6LCBpZHMsIHJlY29yZHMsIC4uLmN0eEFyZ3NdO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIG11bHRpcGxlIHJlY29yZHMgaW4gYSBzaW5nbGUgdHJhbnNhY3Rpb25cbiAgICogQHN1bW1hcnkgU3VibWl0cyBhIHRyYW5zYWN0aW9uIHRvIGNyZWF0ZSBtdWx0aXBsZSByZWNvcmRzIGluIHRoZSBGYWJyaWMgbGVkZ2VyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZU5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgdGFibGUvY29sbGVjdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ1tdIHwgbnVtYmVyW119IGlkcyAtIEFycmF5IG9mIHJlY29yZCBpZGVudGlmaWVyc1xuICAgKiBAcGFyYW0ge0FycmF5PFJlY29yZDxzdHJpbmcsIGFueT4+fSBtb2RlbHMgLSBBcnJheSBvZiByZWNvcmQgZGF0YVxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IHRyYW5zaWVudCAtIFRyYW5zaWVudCBkYXRhIGZvciB0aGUgdHJhbnNhY3Rpb25cbiAgICogQHJldHVybiB7UHJvbWlzZTxBcnJheTxSZWNvcmQ8c3RyaW5nLCBhbnk+Pj59IFByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSBjcmVhdGVkIHJlY29yZHNcbiAgICovXG4gIG92ZXJyaWRlIGFzeW5jIGNyZWF0ZUFsbDxNIGV4dGVuZHMgTW9kZWw+KFxuICAgIGNsYXp6OiBDb25zdHJ1Y3RvcjxNPixcbiAgICBpZHM6IFByaW1hcnlLZXlUeXBlW10sXG4gICAgbW9kZWxzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+W10sXG4gICAgLi4uYXJnczogQ29udGV4dHVhbEFyZ3M8Q29udGV4dDxGYWJyaWNDbGllbnRGbGFncz4+XG4gICk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgYW55PltdPiB7XG4gICAgaWYgKGlkcy5sZW5ndGggIT09IG1vZGVscy5sZW5ndGgpXG4gICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcIklkcyBhbmQgbW9kZWxzIG11c3QgaGF2ZSB0aGUgc2FtZSBsZW5ndGhcIik7XG4gICAgLy9IRVJFIVxuICAgIGNvbnN0IGN0eEFyZ3MgPSBbLi4uKGFyZ3MgYXMgdW5rbm93biBhcyBhbnlbXSldO1xuICAgIGNvbnN0IHRyYW5zaWVudCA9IGN0eEFyZ3Muc2hpZnQoKSBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAgIGNvbnN0IHsgbG9nLCBjdHggfSA9IHRoaXMubG9nQ3R4KFxuICAgICAgY3R4QXJncyBhcyBDb250ZXh0dWFsQXJnczxDb250ZXh0PEZhYnJpY0NsaWVudEZsYWdzPj4sXG4gICAgICB0aGlzLmNyZWF0ZUFsbFxuICAgICk7XG4gICAgY29uc3QgdGFibGVOYW1lID0gTW9kZWwudGFibGVOYW1lKGNsYXp6KTtcblxuICAgIGxvZy5pbmZvKGBhZGRpbmcgJHtpZHMubGVuZ3RofSBlbnRyaWVzIHRvICR7dGFibGVOYW1lfSB0YWJsZWApO1xuICAgIGxvZy52ZXJib3NlKGBwa3M6ICR7aWRzfWApO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuc3VibWl0VHJhbnNhY3Rpb24oXG4gICAgICBjdHgsXG4gICAgICBCdWxrQ3J1ZE9wZXJhdGlvbktleXMuQ1JFQVRFX0FMTCxcbiAgICAgIFtcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgbW9kZWxzLm1hcCgobSkgPT4gdGhpcy5zZXJpYWxpemVyLnNlcmlhbGl6ZShtLCBjbGF6ei5uYW1lKSlcbiAgICAgICAgKSxcbiAgICAgIF0sXG4gICAgICB0cmFuc2llbnQsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBjbGF6ei5uYW1lXG4gICAgKTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEpTT04ucGFyc2UodGhpcy5kZWNvZGUocmVzdWx0KSkubWFwKChyOiBhbnkpID0+IEpTT04ucGFyc2UocikpO1xuICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgIHRocm93IG5ldyBTZXJpYWxpemF0aW9uRXJyb3IoZSBhcyBFcnJvcik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZWFkcyBtdWx0aXBsZSByZWNvcmRzIGluIGEgc2luZ2xlIHRyYW5zYWN0aW9uXG4gICAqIEBzdW1tYXJ5IFN1Ym1pdHMgYSB0cmFuc2FjdGlvbiB0byByZWFkIG11bHRpcGxlIHJlY29yZHMgZnJvbSB0aGUgRmFicmljIGxlZGdlclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHRhYmxlL2NvbGxlY3Rpb25cbiAgICogQHBhcmFtIHtzdHJpbmdbXSB8IG51bWJlcltdfSBpZHMgLSBBcnJheSBvZiByZWNvcmQgaWRlbnRpZmllcnMgdG8gcmVhZFxuICAgKiBAcmV0dXJuIHtQcm9taXNlPEFycmF5PFJlY29yZDxzdHJpbmcsIGFueT4+Pn0gUHJvbWlzZSByZXNvbHZpbmcgdG8gdGhlIHJldHJpZXZlZCByZWNvcmRzXG4gICAqL1xuICBvdmVycmlkZSBhc3luYyByZWFkQWxsPE0gZXh0ZW5kcyBNb2RlbD4oXG4gICAgY2xheno6IENvbnN0cnVjdG9yPE0+LFxuICAgIGlkczogUHJpbWFyeUtleVR5cGVbXSxcbiAgICAuLi5hcmdzOiBDb250ZXh0dWFsQXJnczxDb250ZXh0PEZhYnJpY0NsaWVudEZsYWdzPj5cbiAgKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+W10+IHtcbiAgICBjb25zdCB7IGxvZywgY3R4IH0gPSB0aGlzLmxvZ0N0eChhcmdzLCB0aGlzLnJlYWRBbGwpO1xuICAgIGNvbnN0IHRhYmxlTmFtZSA9IE1vZGVsLnRhYmxlTmFtZShjbGF6eik7XG4gICAgbG9nLmluZm8oYHJlYWRpbmcgJHtpZHMubGVuZ3RofSBlbnRyaWVzIHRvICR7dGFibGVOYW1lfSB0YWJsZWApO1xuICAgIGxvZy52ZXJib3NlKGBwa3M6ICR7aWRzfWApO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZXZhbHVhdGVUcmFuc2FjdGlvbihcbiAgICAgIGN0eCxcbiAgICAgIEJ1bGtDcnVkT3BlcmF0aW9uS2V5cy5SRUFEX0FMTCxcbiAgICAgIFtKU09OLnN0cmluZ2lmeShpZHMpXSxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIGNsYXp6Lm5hbWVcbiAgICApO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5wYXJzZSh0aGlzLmRlY29kZShyZXN1bHQpKS5tYXAoKHI6IGFueSkgPT4gSlNPTi5wYXJzZShyKSk7XG4gICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgdGhyb3cgbmV3IFNlcmlhbGl6YXRpb25FcnJvcihlIGFzIEVycm9yKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFVwZGF0ZXMgbXVsdGlwbGUgcmVjb3JkcyBpbiBhIHNpbmdsZSB0cmFuc2FjdGlvblxuICAgKiBAc3VtbWFyeSBTdWJtaXRzIGEgdHJhbnNhY3Rpb24gdG8gdXBkYXRlIG11bHRpcGxlIHJlY29yZHMgaW4gdGhlIEZhYnJpYyBsZWRnZXJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhYmxlTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSB0YWJsZS9jb2xsZWN0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nW10gfCBudW1iZXJbXX0gaWRzIC0gQXJyYXkgb2YgcmVjb3JkIGlkZW50aWZpZXJzXG4gICAqIEBwYXJhbSB7QXJyYXk8UmVjb3JkPHN0cmluZywgYW55Pj59IG1vZGVscyAtIEFycmF5IG9mIHVwZGF0ZWQgcmVjb3JkIGRhdGFcbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSB0cmFuc2llbnQgLSBUcmFuc2llbnQgZGF0YSBmb3IgdGhlIHRyYW5zYWN0aW9uXG4gICAqIEByZXR1cm4ge1Byb21pc2U8QXJyYXk8UmVjb3JkPHN0cmluZywgYW55Pj4+fSBQcm9taXNlIHJlc29sdmluZyB0byB0aGUgdXBkYXRlZCByZWNvcmRzXG4gICAqL1xuICBvdmVycmlkZSBhc3luYyB1cGRhdGVBbGw8TSBleHRlbmRzIE1vZGVsPihcbiAgICBjbGF6ejogQ29uc3RydWN0b3I8TT4sXG4gICAgaWRzOiBQcmltYXJ5S2V5VHlwZVtdLFxuICAgIG1vZGVsczogUmVjb3JkPHN0cmluZywgYW55PltdLFxuICAgIC4uLmFyZ3M6IENvbnRleHR1YWxBcmdzPENvbnRleHQ8RmFicmljQ2xpZW50RmxhZ3M+PlxuICApOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT5bXT4ge1xuICAgIGlmIChpZHMubGVuZ3RoICE9PSBtb2RlbHMubGVuZ3RoKVxuICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXCJJZHMgYW5kIG1vZGVscyBtdXN0IGhhdmUgdGhlIHNhbWUgbGVuZ3RoXCIpO1xuICAgIGNvbnN0IGN0eEFyZ3MgPSBbLi4uKGFyZ3MgYXMgdW5rbm93biBhcyBhbnlbXSldO1xuICAgIGNvbnN0IHRyYW5zaWVudCA9IGN0eEFyZ3Muc2hpZnQoKSBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAgIGNvbnN0IHsgbG9nLCBjdHggfSA9IHRoaXMubG9nQ3R4KFxuICAgICAgY3R4QXJncyBhcyBDb250ZXh0dWFsQXJnczxDb250ZXh0PEZhYnJpY0NsaWVudEZsYWdzPj4sXG4gICAgICB0aGlzLnVwZGF0ZUFsbFxuICAgICk7XG4gICAgY29uc3QgdGFibGVOYW1lID0gTW9kZWwudGFibGVOYW1lKGNsYXp6KTtcbiAgICBsb2cuaW5mbyhgdXBkYXRpbmcgJHtpZHMubGVuZ3RofSBlbnRyaWVzIHRvICR7dGFibGVOYW1lfSB0YWJsZWApO1xuICAgIGxvZy52ZXJib3NlKGBwa3M6ICR7aWRzfWApO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5zdWJtaXRUcmFuc2FjdGlvbihcbiAgICAgIGN0eCxcbiAgICAgIEJ1bGtDcnVkT3BlcmF0aW9uS2V5cy5VUERBVEVfQUxMLFxuICAgICAgW1xuICAgICAgICBKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICBtb2RlbHMubWFwKChtKSA9PiB0aGlzLnNlcmlhbGl6ZXIuc2VyaWFsaXplKG0sIGNsYXp6Lm5hbWUpKVxuICAgICAgICApLFxuICAgICAgXSxcbiAgICAgIHRyYW5zaWVudCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIGNsYXp6Lm5hbWVcbiAgICApO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5wYXJzZSh0aGlzLmRlY29kZShyZXN1bHQpKS5tYXAoKHI6IGFueSkgPT4gSlNPTi5wYXJzZShyKSk7XG4gICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgdGhyb3cgbmV3IFNlcmlhbGl6YXRpb25FcnJvcihlIGFzIEVycm9yKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIERlbGV0ZXMgbXVsdGlwbGUgcmVjb3JkcyBpbiBhIHNpbmdsZSB0cmFuc2FjdGlvblxuICAgKiBAc3VtbWFyeSBTdWJtaXRzIGEgdHJhbnNhY3Rpb24gdG8gZGVsZXRlIG11bHRpcGxlIHJlY29yZHMgZnJvbSB0aGUgRmFicmljIGxlZGdlclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHRhYmxlL2NvbGxlY3Rpb25cbiAgICogQHBhcmFtIHtBcnJheTxzdHJpbmcgfCBudW1iZXIgfCBiaWdpbnQ+fSBpZHMgLSBBcnJheSBvZiByZWNvcmQgaWRlbnRpZmllcnMgdG8gZGVsZXRlXG4gICAqIEBwYXJhbSB7U2VyaWFsaXplcjxhbnk+fSBzZXJpYWxpemVyIC0gU2VyaWFsaXplciBmb3IgdGhlIG1vZGVsIGRhdGFcbiAgICogQHJldHVybiB7UHJvbWlzZTxBcnJheTxSZWNvcmQ8c3RyaW5nLCBhbnk+Pj59IFByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSBkZWxldGVkIHJlY29yZHNcbiAgICovXG4gIG92ZXJyaWRlIGFzeW5jIGRlbGV0ZUFsbDxNIGV4dGVuZHMgTW9kZWw+KFxuICAgIGNsYXp6OiBDb25zdHJ1Y3RvcjxNPixcbiAgICBpZHM6IFByaW1hcnlLZXlUeXBlW10sXG4gICAgLi4uYXJnczogQ29udGV4dHVhbEFyZ3M8Q29udGV4dDxGYWJyaWNDbGllbnRGbGFncz4+XG4gICk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgYW55PltdPiB7XG4gICAgY29uc3QgeyBsb2csIGN0eCB9ID0gdGhpcy5sb2dDdHgoYXJncywgdGhpcy5kZWxldGVBbGwpO1xuICAgIGNvbnN0IHRhYmxlTmFtZSA9IE1vZGVsLnRhYmxlTmFtZShjbGF6eik7XG4gICAgbG9nLmluZm8oYGRlbGV0aW5nICR7aWRzLmxlbmd0aH0gZW50cmllcyB0byAke3RhYmxlTmFtZX0gdGFibGVgKTtcbiAgICBsb2cudmVyYm9zZShgcGtzOiAke2lkc31gKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnN1Ym1pdFRyYW5zYWN0aW9uKFxuICAgICAgY3R4LFxuICAgICAgQnVsa0NydWRPcGVyYXRpb25LZXlzLkRFTEVURV9BTEwsXG4gICAgICBbSlNPTi5zdHJpbmdpZnkoaWRzKV0sXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBjbGF6ei5uYW1lXG4gICAgKTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEpTT04ucGFyc2UodGhpcy5kZWNvZGUocmVzdWx0KSkubWFwKChyOiBhbnkpID0+IEpTT04ucGFyc2UocikpO1xuICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgIHRocm93IG5ldyBTZXJpYWxpemF0aW9uRXJyb3IoZSBhcyBFcnJvcik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBQcmVwYXJlcyBhIG1vZGVsIGZvciBwZXJzaXN0ZW5jZVxuICAgKiBAc3VtbWFyeSBDb252ZXJ0cyBhIG1vZGVsIGluc3RhbmNlIGludG8gYSBmb3JtYXQgc3VpdGFibGUgZm9yIGRhdGFiYXNlIHN0b3JhZ2UsXG4gICAqIGhhbmRsaW5nIGNvbHVtbiBtYXBwaW5nIGFuZCBzZXBhcmF0aW5nIHRyYW5zaWVudCBwcm9wZXJ0aWVzXG4gICAqIEB0ZW1wbGF0ZSBNIC0gVGhlIG1vZGVsIHR5cGVcbiAgICogQHBhcmFtIHtNfSBtb2RlbCAtIFRoZSBtb2RlbCBpbnN0YW5jZSB0byBwcmVwYXJlXG4gICAqIEBwYXJhbSBwayAtIFRoZSBwcmltYXJ5IGtleSBwcm9wZXJ0eSBuYW1lXG4gICAqIEByZXR1cm4gVGhlIHByZXBhcmVkIGRhdGFcbiAgICovXG4gIG92ZXJyaWRlIHByZXBhcmU8TSBleHRlbmRzIE1vZGVsPihcbiAgICBtb2RlbDogTSxcbiAgICAuLi5hcmdzOiBDb250ZXh0dWFsQXJnczxDb250ZXh0PEZhYnJpY0NsaWVudEZsYWdzPj5cbiAgKTogU2VncmVnYXRlZE1vZGVsPE0+ICYgUHJlcGFyZWRNb2RlbCB7XG4gICAgY29uc3QgeyBsb2cgfSA9IHRoaXMubG9nQ3R4KGFyZ3MsIHRoaXMucHJlcGFyZSk7XG4gICAgY29uc3Qgc3BsaXQgPSBNb2RlbC5zZWdyZWdhdGUobW9kZWwpO1xuICAgIGlmICgobW9kZWwgYXMgYW55KVtQZXJzaXN0ZW5jZUtleXMuTUVUQURBVEFdKSB7XG4gICAgICBsb2cuc2lsbHkoXG4gICAgICAgIGBQYXNzaW5nIGFsb25nIHBlcnNpc3RlbmNlIG1ldGFkYXRhIGZvciAkeyhtb2RlbCBhcyBhbnkpW1BlcnNpc3RlbmNlS2V5cy5NRVRBREFUQV19YFxuICAgICAgKTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzcGxpdC5tb2RlbCwgUGVyc2lzdGVuY2VLZXlzLk1FVEFEQVRBLCB7XG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IChtb2RlbCBhcyBhbnkpW1BlcnNpc3RlbmNlS2V5cy5NRVRBREFUQV0sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgcmVjb3JkOiBzcGxpdC5tb2RlbCxcbiAgICAgIG1vZGVsOiBzcGxpdC5tb2RlbCxcbiAgICAgIGlkOiBtb2RlbFtNb2RlbC5wayhtb2RlbC5jb25zdHJ1Y3RvciBhcyBDb25zdHJ1Y3RvcjxNPildIGFzIHN0cmluZyxcbiAgICAgIHRyYW5zaWVudDogc3BsaXQudHJhbnNpZW50LFxuICAgICAgcHJpdmF0ZXM6IHNwbGl0LnByaXZhdGVzLFxuICAgICAgc2hhcmVkOiBzcGxpdC5zaGFyZWQsXG4gICAgfTtcbiAgfVxuXG4gIG92ZXJyaWRlIHJldmVydDxNIGV4dGVuZHMgTW9kZWw+KFxuICAgIG9iajogUmVjb3JkPHN0cmluZywgYW55PixcbiAgICBjbGF6ejogQ29uc3RydWN0b3I8TT4sXG4gICAgaWQ6IFByaW1hcnlLZXlUeXBlLFxuICAgIHRyYW5zaWVudD86IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgLi4uYXJnczogQ29udGV4dHVhbEFyZ3M8Q29udGV4dDxGYWJyaWNDbGllbnRGbGFncz4+XG4gICk6IE0ge1xuICAgIGNvbnN0IHsgbG9nIH0gPSB0aGlzLmxvZ0N0eChhcmdzLCB0aGlzLnJldmVydCk7XG4gICAgaWYgKHRyYW5zaWVudCkge1xuICAgICAgbG9nLnZlcmJvc2UoXG4gICAgICAgIGByZS1hZGRpbmcgdHJhbnNpZW50IHByb3BlcnRpZXM6ICR7T2JqZWN0LmtleXModHJhbnNpZW50KS5qb2luKFwiLCBcIil9YFxuICAgICAgKTtcbiAgICAgIE9iamVjdC5lbnRyaWVzKHRyYW5zaWVudCBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KS5mb3JFYWNoKChba2V5LCB2YWxdKSA9PiB7XG4gICAgICAgIGlmIChrZXkgaW4gb2JqICYmIHR5cGVvZiBvYmpba2V5XSAhPT0gXCJ1bmRlZmluZWRcIilcbiAgICAgICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcbiAgICAgICAgICAgIGBUcmFuc2llbnQgcHJvcGVydHkgJHtrZXl9IGFscmVhZHkgZXhpc3RzIG9uIG1vZGVsICR7dHlwZW9mIGNsYXp6ID09PSBcInN0cmluZ1wiID8gY2xhenogOiBjbGF6ei5uYW1lfS4gc2hvdWxkIGJlIGltcG9zc2libGVgXG4gICAgICAgICAgKTtcbiAgICAgICAgKG9iaiBhcyBNKVtrZXkgYXMga2V5b2YgTV0gPSB2YWw7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IChjbGF6eiBhcyBDb25zdHJ1Y3RvcjxNPikob2JqKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhIHNpbmdsZSByZWNvcmRcbiAgICogQHN1bW1hcnkgU3VibWl0cyBhIHRyYW5zYWN0aW9uIHRvIGNyZWF0ZSBhIHJlY29yZCBpbiB0aGUgRmFicmljIGxlZGdlclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHRhYmxlL2NvbGxlY3Rpb25cbiAgICogQHBhcmFtIHtzdHJpbmcgfCBudW1iZXJ9IGlkIC0gVGhlIHJlY29yZCBpZGVudGlmaWVyXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gbW9kZWwgLSBUaGUgcmVjb3JkIGRhdGFcbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSB0cmFuc2llbnQgLSBUcmFuc2llbnQgZGF0YSBmb3IgdGhlIHRyYW5zYWN0aW9uXG4gICAqIEByZXR1cm4ge1Byb21pc2U8UmVjb3JkPHN0cmluZywgYW55Pj59IFByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSBjcmVhdGVkIHJlY29yZFxuICAgKi9cbiAgQGRlYnVnKClcbiAgQGZpbmFsKClcbiAgb3ZlcnJpZGUgYXN5bmMgY3JlYXRlPE0gZXh0ZW5kcyBNb2RlbD4oXG4gICAgY2xheno6IENvbnN0cnVjdG9yPE0+LFxuICAgIGlkOiBQcmltYXJ5S2V5VHlwZSxcbiAgICBtb2RlbDogUmVjb3JkPHN0cmluZywgYW55PixcbiAgICB0cmFuc2llbnQ6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fSxcbiAgICAuLi5hcmdzOiBDb250ZXh0dWFsQXJnczxDb250ZXh0PEZhYnJpY0NsaWVudEZsYWdzPj5cbiAgKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+PiB7XG4gICAgY29uc3QgY3R4QXJncyA9IFsuLi4oYXJncyBhcyB1bmtub3duIGFzIGFueVtdKV07XG4gICAgY29uc3QgeyBsb2csIGN0eCB9ID0gdGhpcy5sb2dDdHgoXG4gICAgICBjdHhBcmdzIGFzIENvbnRleHR1YWxBcmdzPENvbnRleHQ8RmFicmljQ2xpZW50RmxhZ3M+PixcbiAgICAgIHRoaXMuY3JlYXRlXG4gICAgKTtcbiAgICBjb25zdCB0YWJsZU5hbWUgPSBNb2RlbC50YWJsZU5hbWUoY2xhenopO1xuICAgIGxvZy52ZXJib3NlKGBhZGRpbmcgZW50cnkgdG8gJHt0YWJsZU5hbWV9IHRhYmxlYCk7XG4gICAgbG9nLmRlYnVnKGBwazogJHtpZH1gKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnN1Ym1pdFRyYW5zYWN0aW9uKFxuICAgICAgY3R4LFxuICAgICAgT3BlcmF0aW9uS2V5cy5DUkVBVEUsXG4gICAgICBbdGhpcy5zZXJpYWxpemVyLnNlcmlhbGl6ZShtb2RlbCwgY2xhenoubmFtZSldLFxuICAgICAgdHJhbnNpZW50LFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgY2xhenoubmFtZVxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMuc2VyaWFsaXplci5kZXNlcmlhbGl6ZSh0aGlzLmRlY29kZShyZXN1bHQpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVhZHMgYSBzaW5nbGUgcmVjb3JkXG4gICAqIEBzdW1tYXJ5IEV2YWx1YXRlcyBhIHRyYW5zYWN0aW9uIHRvIHJlYWQgYSByZWNvcmQgZnJvbSB0aGUgRmFicmljIGxlZGdlclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHRhYmxlL2NvbGxlY3Rpb25cbiAgICogQHBhcmFtIHtzdHJpbmcgfCBudW1iZXJ9IGlkIC0gVGhlIHJlY29yZCBpZGVudGlmaWVyXG4gICAqIEByZXR1cm4ge1Byb21pc2U8UmVjb3JkPHN0cmluZywgYW55Pj59IFByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSByZXRyaWV2ZWQgcmVjb3JkXG4gICAqL1xuICBAZGVidWcoKVxuICBAZmluYWwoKVxuICBhc3luYyByZWFkPE0gZXh0ZW5kcyBNb2RlbD4oXG4gICAgY2xheno6IENvbnN0cnVjdG9yPE0+LFxuICAgIGlkOiBQcmltYXJ5S2V5VHlwZSxcbiAgICAuLi5hcmdzOiBDb250ZXh0dWFsQXJnczxDb250ZXh0PEZhYnJpY0NsaWVudEZsYWdzPj5cbiAgKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+PiB7XG4gICAgY29uc3QgeyBsb2csIGN0eCB9ID0gdGhpcy5sb2dDdHgoYXJncywgdGhpcy5yZWFkQWxsKTtcbiAgICBjb25zdCB0YWJsZU5hbWUgPSBNb2RlbC50YWJsZU5hbWUoY2xhenopO1xuXG4gICAgbG9nLnZlcmJvc2UoYHJlYWRpbmcgZW50cnkgZnJvbSAke3RhYmxlTmFtZX0gdGFibGVgKTtcbiAgICBsb2cuZGVidWcoYHBrOiAke2lkfWApO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZXZhbHVhdGVUcmFuc2FjdGlvbihcbiAgICAgIGN0eCxcbiAgICAgIE9wZXJhdGlvbktleXMuUkVBRCxcbiAgICAgIFtpZC50b1N0cmluZygpXSxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIGNsYXp6Lm5hbWVcbiAgICApO1xuICAgIHJldHVybiB0aGlzLnNlcmlhbGl6ZXIuZGVzZXJpYWxpemUodGhpcy5kZWNvZGUocmVzdWx0KSk7XG4gIH1cblxuICB1cGRhdGVQcmVmaXg8TSBleHRlbmRzIE1vZGVsPihcbiAgICBjbGF6ejogQ29uc3RydWN0b3I8TT4sXG4gICAgaWQ6IFByaW1hcnlLZXlUeXBlLFxuICAgIG1vZGVsOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgIC4uLmFyZ3M6IE1heWJlQ29udGV4dHVhbEFyZzxDb250ZXh0PEZhYnJpY0NsaWVudEZsYWdzPj5cbiAgKSB7XG4gICAgY29uc3QgdGFibGVOYW1lID0gTW9kZWwudGFibGVOYW1lKGNsYXp6KTtcbiAgICBjb25zdCB7IGN0eEFyZ3MgfSA9IHRoaXMubG9nQ3R4KGFyZ3MsIHRoaXMudXBkYXRlUHJlZml4KTtcbiAgICBjb25zdCByZWNvcmQ6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgICByZWNvcmRbQ291Y2hEQktleXMuVEFCTEVdID0gdGFibGVOYW1lO1xuICAgIC8vIHJlY29yZFtDb3VjaERCS2V5cy5JRF0gPSB0aGlzLmdlbmVyYXRlSWQodGFibGVOYW1lLCBpZCk7XG4gICAgT2JqZWN0LmFzc2lnbihyZWNvcmQsIG1vZGVsKTtcbiAgICByZXR1cm4gW2NsYXp6LCBpZCwgcmVjb3JkLCAuLi5jdHhBcmdzXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVXBkYXRlcyBhIHNpbmdsZSByZWNvcmRcbiAgICogQHN1bW1hcnkgU3VibWl0cyBhIHRyYW5zYWN0aW9uIHRvIHVwZGF0ZSBhIHJlY29yZCBpbiB0aGUgRmFicmljIGxlZGdlclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHRhYmxlL2NvbGxlY3Rpb25cbiAgICogQHBhcmFtIHtzdHJpbmcgfCBudW1iZXJ9IGlkIC0gVGhlIHJlY29yZCBpZGVudGlmaWVyXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gbW9kZWwgLSBUaGUgdXBkYXRlZCByZWNvcmQgZGF0YVxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IHRyYW5zaWVudCAtIFRyYW5zaWVudCBkYXRhIGZvciB0aGUgdHJhbnNhY3Rpb25cbiAgICogQHJldHVybiB7UHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+Pn0gUHJvbWlzZSByZXNvbHZpbmcgdG8gdGhlIHVwZGF0ZWQgcmVjb3JkXG4gICAqL1xuICBAZGVidWcoKVxuICBAZmluYWwoKVxuICBhc3luYyB1cGRhdGU8TSBleHRlbmRzIE1vZGVsPihcbiAgICBjbGF6ejogQ29uc3RydWN0b3I8TT4sXG4gICAgaWQ6IFByaW1hcnlLZXlUeXBlLFxuICAgIG1vZGVsOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgIHRyYW5zaWVudDogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9LFxuICAgIC4uLmFyZ3M6IENvbnRleHR1YWxBcmdzPENvbnRleHQ8RmFicmljQ2xpZW50RmxhZ3M+PlxuICApOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+IHtcbiAgICBjb25zdCBjdHhBcmdzID0gWy4uLihhcmdzIGFzIHVua25vd24gYXMgYW55W10pXTtcbiAgICBjb25zdCB7IGxvZywgY3R4IH0gPSB0aGlzLmxvZ0N0eChcbiAgICAgIGN0eEFyZ3MgYXMgQ29udGV4dHVhbEFyZ3M8Q29udGV4dDxGYWJyaWNDbGllbnRGbGFncz4+LFxuICAgICAgdGhpcy51cGRhdGVBbGxcbiAgICApO1xuICAgIGxvZy5pbmZvKGBDTElFTlQgVVBEQVRFIGNsYXNzIDogJHt0eXBlb2YgY2xhenp9YCk7XG4gICAgY29uc3QgdGFibGVOYW1lID0gTW9kZWwudGFibGVOYW1lKGNsYXp6KTtcbiAgICBsb2cudmVyYm9zZShgdXBkYXRpbmcgZW50cnkgdG8gJHt0YWJsZU5hbWV9IHRhYmxlYCk7XG4gICAgbG9nLmRlYnVnKGBwazogJHtpZH1gKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnN1Ym1pdFRyYW5zYWN0aW9uKFxuICAgICAgY3R4LFxuICAgICAgT3BlcmF0aW9uS2V5cy5VUERBVEUsXG4gICAgICBbdGhpcy5zZXJpYWxpemVyLnNlcmlhbGl6ZShtb2RlbCwgY2xhenoubmFtZSB8fCBjbGF6eildLCAvLyBUT0RPIHNob3VsZCBiZSByZWNldmluZyBjbGFzcyBidXQgaXMgcmVjZWl2aW5nIHN0cmluZ1xuICAgICAgdHJhbnNpZW50LFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgY2xhenoubmFtZVxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMuc2VyaWFsaXplci5kZXNlcmlhbGl6ZSh0aGlzLmRlY29kZShyZXN1bHQpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRGVsZXRlcyBhIHNpbmdsZSByZWNvcmRcbiAgICogQHN1bW1hcnkgU3VibWl0cyBhIHRyYW5zYWN0aW9uIHRvIGRlbGV0ZSBhIHJlY29yZCBmcm9tIHRoZSBGYWJyaWMgbGVkZ2VyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZU5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgdGFibGUvY29sbGVjdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bWJlcn0gaWQgLSBUaGUgcmVjb3JkIGlkZW50aWZpZXIgdG8gZGVsZXRlXG4gICAqIEByZXR1cm4ge1Byb21pc2U8UmVjb3JkPHN0cmluZywgYW55Pj59IFByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSBkZWxldGVkIHJlY29yZFxuICAgKi9cbiAgQGRlYnVnKClcbiAgQGZpbmFsKClcbiAgb3ZlcnJpZGUgYXN5bmMgZGVsZXRlPE0gZXh0ZW5kcyBNb2RlbD4oXG4gICAgY2xheno6IENvbnN0cnVjdG9yPE0+LFxuICAgIGlkOiBQcmltYXJ5S2V5VHlwZSxcbiAgICAuLi5hcmdzOiBDb250ZXh0dWFsQXJnczxDb250ZXh0PEZhYnJpY0NsaWVudEZsYWdzPj5cbiAgKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+PiB7XG4gICAgY29uc3QgeyBsb2csIGN0eCB9ID0gdGhpcy5sb2dDdHgoYXJncywgdGhpcy5kZWxldGUpO1xuICAgIGNvbnN0IHRhYmxlTmFtZSA9IE1vZGVsLnRhYmxlTmFtZShjbGF6eik7XG4gICAgbG9nLnZlcmJvc2UoYGRlbGV0aW5nIGVudHJ5IGZyb20gJHt0YWJsZU5hbWV9IHRhYmxlYCk7XG4gICAgbG9nLmRlYnVnKGBwazogJHtpZH1gKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnN1Ym1pdFRyYW5zYWN0aW9uKFxuICAgICAgY3R4LFxuICAgICAgT3BlcmF0aW9uS2V5cy5ERUxFVEUsXG4gICAgICBbaWQudG9TdHJpbmcoKV0sXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBjbGF6ei5uYW1lXG4gICAgKTtcbiAgICByZXR1cm4gdGhpcy5zZXJpYWxpemVyLmRlc2VyaWFsaXplKHRoaXMuZGVjb2RlKHJlc3VsdCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBFeGVjdXRlcyBhIHJhdyBxdWVyeSBhZ2FpbnN0IHRoZSBGYWJyaWMgbGVkZ2VyXG4gICAqIEBzdW1tYXJ5IEV2YWx1YXRlcyBhIHRyYW5zYWN0aW9uIHRvIHBlcmZvcm0gYSBxdWVyeSB1c2luZyBNYW5nbyBRdWVyeSBzeW50YXhcbiAgICogQHRlbXBsYXRlIFYgLSBUaGUgcmV0dXJuIHR5cGVcbiAgICogQHBhcmFtIHtNYW5nb1F1ZXJ5fSByYXdJbnB1dCAtIFRoZSBNYW5nbyBRdWVyeSB0byBleGVjdXRlXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gcHJvY2VzcyAtIFdoZXRoZXIgdG8gcHJvY2VzcyB0aGUgcmVzdWx0XG4gICAqIEByZXR1cm4ge1Byb21pc2U8Vj59IFByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSBxdWVyeSByZXN1bHRcbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgQ2xpZW50XG4gICAqICAgcGFydGljaXBhbnQgRmFicmljQWRhcHRlclxuICAgKiAgIHBhcnRpY2lwYW50IENvbnRyYWN0XG4gICAqICAgcGFydGljaXBhbnQgQ2hhaW5jb2RlXG4gICAqXG4gICAqICAgQ2xpZW50LT4+RmFicmljQWRhcHRlcjogcmF3KHJhd0lucHV0LCBwcm9jZXNzKVxuICAgKiAgIEZhYnJpY0FkYXB0ZXItPj5GYWJyaWNBZGFwdGVyOiBKU09OLnN0cmluZ2lmeShyYXdJbnB1dClcbiAgICogICBGYWJyaWNBZGFwdGVyLT4+RmFicmljQWRhcHRlcjogZXZhbHVhdGVUcmFuc2FjdGlvbihcInF1ZXJ5XCIsIFtpbnB1dF0pXG4gICAqICAgRmFicmljQWRhcHRlci0+PkNvbnRyYWN0OiBldmFsdWF0ZShcInF1ZXJ5XCIsIHByb3Bvc2FsT3B0aW9ucylcbiAgICogICBDb250cmFjdC0+PkNoYWluY29kZTogaW52b2tlXG4gICAqICAgQ2hhaW5jb2RlLS0+PkNvbnRyYWN0OiByZXNwb25zZVxuICAgKiAgIENvbnRyYWN0LS0+PkZhYnJpY0FkYXB0ZXI6IHJlc3VsdFxuICAgKiAgIEZhYnJpY0FkYXB0ZXItPj5GYWJyaWNBZGFwdGVyOiBKU09OLnBhcnNlKGRlY29kZShyZXN1bHQpKVxuICAgKiAgIEZhYnJpY0FkYXB0ZXItPj5GYWJyaWNBZGFwdGVyOiBQcm9jZXNzIHJlc3VsdCBiYXNlZCBvbiB0eXBlXG4gICAqICAgRmFicmljQWRhcHRlci0tPj5DbGllbnQ6IHByb2Nlc3NlZCByZXN1bHRcbiAgICovXG4gIEBkZWJ1ZygpXG4gIGFzeW5jIHJhdzxWLCBEIGV4dGVuZHMgYm9vbGVhbj4oXG4gICAgcmF3SW5wdXQ6IE1hbmdvUXVlcnksXG4gICAgZG9jc09ubHk6IEQgPSB0cnVlIGFzIEQsXG4gICAgY2xheno6IE1vZGVsQ29uc3RydWN0b3I8YW55PixcbiAgICAuLi5hcmdzOiBDb250ZXh0dWFsQXJnczxDb250ZXh0PEZhYnJpY0NsaWVudEZsYWdzPj5cbiAgKTogUHJvbWlzZTxWPiB7XG4gICAgY29uc3QgeyBsb2csIGN0eCB9ID0gdGhpcy5sb2dDdHgoYXJncywgdGhpcy5yYXcpO1xuICAgIGNvbnN0IHRhYmxlTmFtZSA9IGNsYXp6Lm5hbWU7XG4gICAgbG9nLmluZm8oYFBlcmZvcm1pbmcgcmF3IHN0YXRlbWVudCBvbiB0YWJsZSAke01vZGVsLnRhYmxlTmFtZShjbGF6eil9YCk7XG4gICAgbGV0IHRyYW5zYWN0aW9uUmVzdWx0OiBhbnk7XG4gICAgdHJ5IHtcbiAgICAgIHRyYW5zYWN0aW9uUmVzdWx0ID0gYXdhaXQgdGhpcy5ldmFsdWF0ZVRyYW5zYWN0aW9uKFxuICAgICAgICBjdHgsXG4gICAgICAgIFwicmF3XCIsXG4gICAgICAgIFtKU09OLnN0cmluZ2lmeShyYXdJbnB1dCksIGRvY3NPbmx5XSxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHRhYmxlTmFtZVxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICB0aHJvdyB0aGlzLnBhcnNlRXJyb3IoZSBhcyBFcnJvcik7XG4gICAgfVxuICAgIGxldCByZXN1bHQ6IGFueTtcbiAgICB0cnkge1xuICAgICAgcmVzdWx0ID0gSlNPTi5wYXJzZSh0aGlzLmRlY29kZSh0cmFuc2FjdGlvblJlc3VsdCkpO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgdGhyb3cgbmV3IFNlcmlhbGl6YXRpb25FcnJvcihgRmFpbGVkIHRvIHByb2Nlc3MgcmVzdWx0OiAke2V9YCk7XG4gICAgfVxuXG4gICAgY29uc3QgcGFyc2VSZWNvcmQgPSAocmVjb3JkOiBSZWNvcmQ8YW55LCBhbnk+KSA9PiB7XG4gICAgICBpZiAoTW9kZWwuaXNNb2RlbChyZWNvcmQpKSByZXR1cm4gTW9kZWwuYnVpbGQocmVjb3JkKTtcbiAgICAgIHJldHVybiByZWNvcmQ7XG4gICAgfTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KHJlc3VsdCkpIHtcbiAgICAgIGlmICghcmVzdWx0Lmxlbmd0aCkgcmV0dXJuIHJlc3VsdCBhcyBWO1xuICAgICAgY29uc3QgZWwgPSByZXN1bHRbMF07XG4gICAgICBpZiAoTW9kZWwuaXNNb2RlbChlbCkpXG4gICAgICAgIC8vIGlmIHRoZSBmaXJzdCBvbmUgaXMgYSBtb2RlbCwgYWxsIGFyZSBtb2RlbHNcbiAgICAgICAgcmV0dXJuIHJlc3VsdC5tYXAoKGVsKSA9PiBNb2RlbC5idWlsZChlbCkpIGFzIFY7XG4gICAgICByZXR1cm4gcmVzdWx0IGFzIFY7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlUmVjb3JkKHJlc3VsdCBhcyBhbnkpIGFzIFY7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEV4ZWN1dGVzIGEgQ291Y2hEQiB2aWV3IHF1ZXJ5IGFnYWluc3QgdGhlIEZhYnJpYyBjaGFpbmNvZGVcbiAgICogQHN1bW1hcnkgRXZhbHVhdGVzIGEgdHJhbnNhY3Rpb24gdG8gcXVlcnkgYSBkZXNpZ24gZG9jdW1lbnQgdmlld1xuICAgKiBAdGVtcGxhdGUgUiAtIFRoZSB2aWV3IHJlc3BvbnNlIHR5cGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGRkb2MgLSBEZXNpZ24gZG9jdW1lbnQgbmFtZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmlld05hbWUgLSBWaWV3IG5hbWVcbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBvcHRpb25zIC0gVmlldyBxdWVyeSBvcHRpb25zXG4gICAqIEBwYXJhbSB7Li4uQ29udGV4dHVhbEFyZ3M8Q29udGV4dDxGYWJyaWNDbGllbnRGbGFncz4+fSBhcmdzIC0gT3B0aW9uYWwgY29udGV4dHVhbCBhcmd1bWVudHNcbiAgICogQHJldHVybiB7UHJvbWlzZTxWaWV3UmVzcG9uc2U8Uj4+fSBUaGUgdmlldyByZXNwb25zZVxuICAgKi9cbiAgQGRlYnVnKClcbiAgYXN5bmMgdmlldzxSPihcbiAgICBkZG9jOiBzdHJpbmcsXG4gICAgdmlld05hbWU6IHN0cmluZyxcbiAgICBvcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgIC4uLmFyZ3M6IENvbnRleHR1YWxBcmdzPENvbnRleHQ8RmFicmljQ2xpZW50RmxhZ3M+PlxuICApOiBQcm9taXNlPFZpZXdSZXNwb25zZTxSPj4ge1xuICAgIGNvbnN0IHsgbG9nLCBjdHggfSA9IHRoaXMubG9nQ3R4KGFyZ3MsIHRoaXMudmlldyk7XG4gICAgbG9nLmluZm8oYFF1ZXJ5aW5nIHZpZXcgJHtkZG9jfS8ke3ZpZXdOYW1lfWApO1xuICAgIGxldCB0cmFuc2FjdGlvblJlc3VsdDogYW55O1xuICAgIHRyeSB7XG4gICAgICB0cmFuc2FjdGlvblJlc3VsdCA9IGF3YWl0IHRoaXMuZXZhbHVhdGVUcmFuc2FjdGlvbihcbiAgICAgICAgY3R4LFxuICAgICAgICBcInZpZXdcIixcbiAgICAgICAgW2Rkb2MsIHZpZXdOYW1lLCBKU09OLnN0cmluZ2lmeShvcHRpb25zKV0sXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICB1bmRlZmluZWRcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgdGhyb3cgdGhpcy5wYXJzZUVycm9yKGUgYXMgRXJyb3IpO1xuICAgIH1cbiAgICBsZXQgcmVzdWx0OiBWaWV3UmVzcG9uc2U8Uj47XG4gICAgdHJ5IHtcbiAgICAgIHJlc3VsdCA9IEpTT04ucGFyc2UodGhpcy5kZWNvZGUodHJhbnNhY3Rpb25SZXN1bHQpKTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIHRocm93IG5ldyBTZXJpYWxpemF0aW9uRXJyb3IoYEZhaWxlZCB0byBwcm9jZXNzIHZpZXcgcmVzdWx0OiAke2V9YCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEdldHMgb3IgY3JlYXRlcyBhIGdSUEMgY2xpZW50IGZvciB0aGUgRmFicmljIHBlZXJcbiAgICogQHN1bW1hcnkgUmV0dXJucyBhIGNhY2hlZCBjbGllbnQgb3IgY3JlYXRlcyBhIG5ldyBvbmUgaWYgbm9uZSBleGlzdHNcbiAgICogQHJldHVybiB7UHJvbWlzZTxDbGllbnQ+fSBQcm9taXNlIHJlc29sdmluZyB0byB0aGUgZ1JQQyBjbGllbnRcbiAgICovXG4gIG92ZXJyaWRlIGdldENsaWVudCgpOiBDbGllbnQge1xuICAgIGlmICghdGhpcy5fY2xpZW50KVxuICAgICAgdGhpcy5fY2xpZW50ID0gRmFicmljQ2xpZW50QWRhcHRlci5nZXRDbGllbnQodGhpcy5jb25maWcpO1xuICAgIHJldHVybiB0aGlzLl9jbGllbnQ7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEdldHMgYSBHYXRld2F5IGluc3RhbmNlIGZvciB0aGUgRmFicmljIG5ldHdvcmtcbiAgICogQHN1bW1hcnkgQ3JlYXRlcyBhIG5ldyBHYXRld2F5IGluc3RhbmNlIHVzaW5nIHRoZSBjdXJyZW50IGNsaWVudFxuICAgKiBAcmV0dXJuIHtQcm9taXNlPEdhdGV3YXk+fSBQcm9taXNlIHJlc29sdmluZyB0byB0aGUgR2F0ZXdheSBpbnN0YW5jZVxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIEdhdGV3YXkoY3R4OiBDb250ZXh0PEZhYnJpY0NsaWVudEZsYWdzPik6IFByb21pc2U8R2F0ZXdheT4ge1xuICAgIHJldHVybiBGYWJyaWNDbGllbnRBZGFwdGVyLmdldEdhdGV3YXkoY3R4LCB0aGlzLmNvbmZpZywgdGhpcy5jbGllbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDb250cmFjdE5hbWUoY2xhc3NOYW1lPzogc3RyaW5nKSB7XG4gICAgaWYgKCFjbGFzc05hbWUpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIGAke2NsYXNzTmFtZX1Db250cmFjdGA7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEdldHMgYSBDb250cmFjdCBpbnN0YW5jZSBmb3IgdGhlIEZhYnJpYyBjaGFpbmNvZGVcbiAgICogQHN1bW1hcnkgQ3JlYXRlcyBhIG5ldyBDb250cmFjdCBpbnN0YW5jZSB1c2luZyB0aGUgY3VycmVudCBHYXRld2F5XG4gICAqIEByZXR1cm4ge1Byb21pc2U8Q29udHJha3Q+fSBQcm9taXNlIHJlc29sdmluZyB0byB0aGUgQ29udHJhY3QgaW5zdGFuY2VcbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBDb250cmFjdChcbiAgICBjdHg6IENvbnRleHQ8RmFicmljQ2xpZW50RmxhZ3M+LFxuICAgIGNvbnRyYWN0TmFtZT86IHN0cmluZ1xuICApOiBQcm9taXNlPENvbnRyYWt0PiB7XG4gICAgcmV0dXJuIEZhYnJpY0NsaWVudEFkYXB0ZXIuZ2V0Q29udHJhY3QoXG4gICAgICBhd2FpdCB0aGlzLkdhdGV3YXkoY3R4KSxcbiAgICAgIHRoaXMuY29uZmlnLFxuICAgICAgY29udHJhY3ROYW1lXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRXhlY3V0ZXMgYSB0cmFuc2FjdGlvbiBvbiB0aGUgRmFicmljIG5ldHdvcmtcbiAgICogQHN1bW1hcnkgU3VibWl0cyBvciBldmFsdWF0ZXMgYSB0cmFuc2FjdGlvbiBvbiB0aGUgRmFicmljIGNoYWluY29kZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXBpIC0gVGhlIGNoYWluY29kZSBmdW5jdGlvbiB0byBjYWxsXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc3VibWl0IC0gV2hldGhlciB0byBzdWJtaXQgKHRydWUpIG9yIGV2YWx1YXRlIChmYWxzZSkgdGhlIHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSB7YW55W119IFthcmdzXSAtIEFyZ3VtZW50cyB0byBwYXNzIHRvIHRoZSBjaGFpbmNvZGUgZnVuY3Rpb25cbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSBbdHJhbnNpZW50RGF0YV0gLSBUcmFuc2llbnQgZGF0YSBmb3IgdGhlIHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gW2VuZG9yc2luZ09yZ2FuaXphdGlvbnNdIC0gT3JnYW5pemF0aW9ucyB0aGF0IG11c3QgZW5kb3JzZSB0aGUgdHJhbnNhY3Rpb25cbiAgICogQHJldHVybiB7UHJvbWlzZTxVaW50OEFycmF5Pn0gUHJvbWlzZSByZXNvbHZpbmcgdG8gdGhlIHRyYW5zYWN0aW9uIHJlc3VsdFxuICAgKiBAbWVybWFpZFxuICAgKiBzZXF1ZW5jZURpYWdyYW1cbiAgICogICBwYXJ0aWNpcGFudCBGYWJyaWNBZGFwdGVyXG4gICAqICAgcGFydGljaXBhbnQgR2F0ZXdheVxuICAgKiAgIHBhcnRpY2lwYW50IENvbnRyYWN0XG4gICAqICAgcGFydGljaXBhbnQgQ2hhaW5jb2RlXG4gICAqXG4gICAqICAgRmFicmljQWRhcHRlci0+PkdhdGV3YXk6IGNvbm5lY3QoKVxuICAgKiAgIEZhYnJpY0FkYXB0ZXItPj5Db250cmFjdDogZ2V0Q29udHJhY3QoKVxuICAgKiAgIGFsdCBzdWJtaXQgdHJhbnNhY3Rpb25cbiAgICogICAgIEZhYnJpY0FkYXB0ZXItPj5Db250cmFjdDogc3VibWl0KGFwaSwgcHJvcG9zYWxPcHRpb25zKVxuICAgKiAgIGVsc2UgZXZhbHVhdGUgdHJhbnNhY3Rpb25cbiAgICogICAgIEZhYnJpY0FkYXB0ZXItPj5Db250cmFjdDogZXZhbHVhdGUoYXBpLCBwcm9wb3NhbE9wdGlvbnMpXG4gICAqICAgZW5kXG4gICAqICAgQ29udHJhY3QtPj5DaGFpbmNvZGU6IGludm9rZVxuICAgKiAgIENoYWluY29kZS0tPj5Db250cmFjdDogcmVzcG9uc2VcbiAgICogICBDb250cmFjdC0tPj5GYWJyaWNBZGFwdGVyOiByZXN1bHRcbiAgICogICBGYWJyaWNBZGFwdGVyLT4+R2F0ZXdheTogY2xvc2UoKVxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIHRyYW5zYWN0aW9uKFxuICAgIGN0eDogQ29udGV4dDxGYWJyaWNDbGllbnRGbGFncz4sXG4gICAgYXBpOiBzdHJpbmcsXG4gICAgc3VibWl0ID0gdHJ1ZSxcbiAgICBhcmdzPzogYW55W10sXG4gICAgdHJhbnNpZW50RGF0YT86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG4gICAgZW5kb3JzaW5nT3JnYW5pemF0aW9ucz86IEFycmF5PHN0cmluZz4sXG4gICAgY2xhc3NOYW1lPzogc3RyaW5nXG4gICk6IFByb21pc2U8VWludDhBcnJheT4ge1xuICAgIGNvbnN0IGxvZyA9IHRoaXMubG9nLmZvcih0aGlzLnRyYW5zYWN0aW9uKTtcbiAgICBjb25zdCBnYXRld2F5ID0gYXdhaXQgdGhpcy5HYXRld2F5KGN0eCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNvbnRyYWN0ID0gYXdhaXQgdGhpcy5Db250cmFjdChcbiAgICAgICAgY3R4LFxuICAgICAgICB0aGlzLmdldENvbnRyYWN0TmFtZShjbGFzc05hbWUpXG4gICAgICApO1xuICAgICAgbG9nLnZlcmJvc2UoXG4gICAgICAgIGAke3N1Ym1pdCA/IFwiU3VibWl0XCIgOiBcIkV2YWx1YXRlXCJ9dGluZyB0cmFuc2FjdGlvbiAke3RoaXMuZ2V0Q29udHJhY3ROYW1lKGNsYXNzTmFtZSkgfHwgdGhpcy5jb25maWcuY29udHJhY3ROYW1lfS4ke2FwaX1gXG4gICAgICApO1xuICAgICAgbG9nLmRlYnVnKGBhcmdzOiAke2FyZ3M/Lm1hcCgoYSkgPT4gYS50b1N0cmluZygpKS5qb2luKFwiXFxuXCIpIHx8IFwibm9uZVwifWApO1xuICAgICAgY29uc3QgbWV0aG9kID0gc3VibWl0ID8gY29udHJhY3Quc3VibWl0IDogY29udHJhY3QuZXZhbHVhdGU7XG5cbiAgICAgIGVuZG9yc2luZ09yZ2FuaXphdGlvbnMgPSBlbmRvcnNpbmdPcmdhbml6YXRpb25zPy5sZW5ndGhcbiAgICAgICAgPyBlbmRvcnNpbmdPcmdhbml6YXRpb25zXG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgY29uc3QgcHJvcG9zYWxPcHRpb25zOiBQcm9wb3NhbE9wdGlvbnMgPSB7XG4gICAgICAgIGFyZ3VtZW50czogYXJncyB8fCBbXSxcbiAgICAgICAgdHJhbnNpZW50RGF0YTogdHJhbnNpZW50RGF0YSxcbiAgICAgICAgLy8gLi4uKGVuZG9yc2luZ09yZ2FuaXphdGlvbnMgJiYgeyBlbmRvcnNpbmdPcmdhbml6YXRpb25zIH0pIC8vIG1zcElkIGxpc3RcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBhd2FpdCBtZXRob2QuY2FsbChjb250cmFjdCwgYXBpLCBwcm9wb3NhbE9wdGlvbnMpO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgaWYgKGUuY29kZSA9PT0gMTApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2UuZGV0YWlsc1swXS5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgICAgdGhyb3cgdGhpcy5wYXJzZUVycm9yKGUpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgQ2xvc2luZyAke3RoaXMuY29uZmlnLm1zcElkfSBnYXRld2F5IGNvbm5lY3Rpb25gKTtcbiAgICAgIGdhdGV3YXkuY2xvc2UoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFBhcnNlcyBhbiBlcnJvciBpbnRvIGEgQmFzZUVycm9yXG4gICAqIEBzdW1tYXJ5IENvbnZlcnRzIGFueSBlcnJvciBpbnRvIGEgc3RhbmRhcmRpemVkIEJhc2VFcnJvclxuICAgKiBAcGFyYW0ge0Vycm9yIHwgc3RyaW5nfSBlcnIgLSBUaGUgZXJyb3IgdG8gcGFyc2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWFzb25dIC0gT3B0aW9uYWwgcmVhc29uIGZvciB0aGUgZXJyb3JcbiAgICogQHJldHVybiB7QmFzZUVycm9yfSBUaGUgcGFyc2VkIGVycm9yXG4gICAqL1xuICBvdmVycmlkZSBwYXJzZUVycm9yPEUgZXh0ZW5kcyBCYXNlRXJyb3I+KGVycjogRXJyb3IgfCBzdHJpbmcpOiBFIHtcbiAgICByZXR1cm4gRmFicmljQ2xpZW50QWRhcHRlci5wYXJzZUVycm9yPEU+KGVycik7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFN1Ym1pdHMgYSB0cmFuc2FjdGlvbiB0byB0aGUgRmFicmljIG5ldHdvcmtcbiAgICogQHN1bW1hcnkgRXhlY3V0ZXMgYSB0cmFuc2FjdGlvbiB0aGF0IG1vZGlmaWVzIHRoZSBsZWRnZXIgc3RhdGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFwaSAtIFRoZSBjaGFpbmNvZGUgZnVuY3Rpb24gdG8gY2FsbFxuICAgKiBAcGFyYW0ge2FueVtdfSBbYXJnc10gLSBBcmd1bWVudHMgdG8gcGFzcyB0byB0aGUgY2hhaW5jb2RlIGZ1bmN0aW9uXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgc3RyaW5nPn0gW3RyYW5zaWVudERhdGFdIC0gVHJhbnNpZW50IGRhdGEgZm9yIHRoZSB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IFtlbmRvcnNpbmdPcmdhbml6YXRpb25zXSAtIE9yZ2FuaXphdGlvbnMgdGhhdCBtdXN0IGVuZG9yc2UgdGhlIHRyYW5zYWN0aW9uXG4gICAqIEByZXR1cm4ge1Byb21pc2U8VWludDhBcnJheT59IFByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSB0cmFuc2FjdGlvbiByZXN1bHRcbiAgICovXG4gIGFzeW5jIHN1Ym1pdFRyYW5zYWN0aW9uKFxuICAgIGN0eDogQ29udGV4dDxGYWJyaWNDbGllbnRGbGFncz4sXG4gICAgYXBpOiBzdHJpbmcsXG4gICAgYXJncz86IGFueVtdLFxuICAgIHRyYW5zaWVudERhdGE/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICAgIGVuZG9yc2luZ09yZ2FuaXphdGlvbnM/OiBBcnJheTxzdHJpbmc+LFxuICAgIGNsYXNzTmFtZT86IHN0cmluZ1xuICApOiBQcm9taXNlPFVpbnQ4QXJyYXk+IHtcbiAgICByZXR1cm4gdGhpcy50cmFuc2FjdGlvbihcbiAgICAgIGN0eCxcbiAgICAgIGFwaSxcbiAgICAgIHRydWUsXG4gICAgICBhcmdzLFxuICAgICAgdHJhbnNpZW50RGF0YSxcbiAgICAgIGVuZG9yc2luZ09yZ2FuaXphdGlvbnMsXG4gICAgICBjbGFzc05hbWVcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBFdmFsdWF0ZXMgYSB0cmFuc2FjdGlvbiBvbiB0aGUgRmFicmljIG5ldHdvcmtcbiAgICogQHN1bW1hcnkgRXhlY3V0ZXMgYSB0cmFuc2FjdGlvbiB0aGF0IGRvZXMgbm90IG1vZGlmeSB0aGUgbGVkZ2VyIHN0YXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcGkgLSBUaGUgY2hhaW5jb2RlIGZ1bmN0aW9uIHRvIGNhbGxcbiAgICogQHBhcmFtIHthbnlbXX0gW2FyZ3NdIC0gQXJndW1lbnRzIHRvIHBhc3MgdG8gdGhlIGNoYWluY29kZSBmdW5jdGlvblxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIHN0cmluZz59IFt0cmFuc2llbnREYXRhXSAtIFRyYW5zaWVudCBkYXRhIGZvciB0aGUgdHJhbnNhY3Rpb25cbiAgICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBbZW5kb3JzaW5nT3JnYW5pemF0aW9uc10gLSBPcmdhbml6YXRpb25zIHRoYXQgbXVzdCBlbmRvcnNlIHRoZSB0cmFuc2FjdGlvblxuICAgKiBAcmV0dXJuIHtQcm9taXNlPFVpbnQ4QXJyYXk+fSBQcm9taXNlIHJlc29sdmluZyB0byB0aGUgdHJhbnNhY3Rpb24gcmVzdWx0XG4gICAqL1xuICBhc3luYyBldmFsdWF0ZVRyYW5zYWN0aW9uKFxuICAgIGN0eDogQ29udGV4dDxGYWJyaWNDbGllbnRGbGFncz4sXG4gICAgYXBpOiBzdHJpbmcsXG4gICAgYXJncz86IGFueVtdLFxuICAgIHRyYW5zaWVudERhdGE/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICAgIGVuZG9yc2luZ09yZ2FuaXphdGlvbnM/OiBBcnJheTxzdHJpbmc+LFxuICAgIGNsYXNzTmFtZT86IHN0cmluZ1xuICApOiBQcm9taXNlPFVpbnQ4QXJyYXk+IHtcbiAgICByZXR1cm4gdGhpcy50cmFuc2FjdGlvbihcbiAgICAgIGN0eCxcbiAgICAgIGFwaSxcbiAgICAgIGZhbHNlLFxuICAgICAgYXJncyxcbiAgICAgIHRyYW5zaWVudERhdGEsXG4gICAgICBlbmRvcnNpbmdPcmdhbml6YXRpb25zLFxuICAgICAgY2xhc3NOYW1lXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ2xvc2VzIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBGYWJyaWMgbmV0d29ya1xuICAgKiBAc3VtbWFyeSBDbG9zZXMgdGhlIGdSUEMgY2xpZW50IGlmIGl0IGV4aXN0c1xuICAgKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgY2xpZW50IGlzIGNsb3NlZFxuICAgKi9cbiAgYXN5bmMgY2xvc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuY2xpZW50KSB7XG4gICAgICB0aGlzLmxvZy52ZXJib3NlKGBDbG9zaW5nICR7dGhpcy5jb25maWcubXNwSWR9IGdhdGV3YXkgY2xpZW50YCk7XG4gICAgICB0aGlzLmNsaWVudC5jbG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gR2V0cyBhIENvbnRyYWN0IGluc3RhbmNlIGZyb20gYSBHYXRld2F5XG4gICAqIEBzdW1tYXJ5IFJldHJpZXZlcyBhIGNoYWluY29kZSBjb250cmFjdCBmcm9tIHRoZSBzcGVjaWZpZWQgbmV0d29ya1xuICAgKiBAcGFyYW0ge0dhdGV3YXl9IGdhdGV3YXkgLSBUaGUgR2F0ZXdheSBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge1BlZXJDb25maWd9IGNvbmZpZyAtIFRoZSBwZWVyIGNvbmZpZ3VyYXRpb25cbiAgICogQHJldHVybiB7Q29udHJha3R9IFRoZSBDb250cmFjdCBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGdldENvbnRyYWN0KFxuICAgIGdhdGV3YXk6IEdhdGV3YXksXG4gICAgY29uZmlnOiBQZWVyQ29uZmlnLFxuICAgIGNvbnRyYWN0TmFtZT86IHN0cmluZ1xuICApOiBDb250cmFrdCB7XG4gICAgY29uc3QgbG9nID0gdGhpcy5sb2cuZm9yKHRoaXMuZ2V0Q29udHJhY3QpO1xuICAgIGNvbnN0IG5ldHdvcmsgPSB0aGlzLmdldE5ldHdvcmsoZ2F0ZXdheSwgY29uZmlnLmNoYW5uZWwpO1xuICAgIGxldCBjb250cmFjdDogQ29udHJha3Q7XG4gICAgdHJ5IHtcbiAgICAgIGxvZy5kZWJ1ZyhcbiAgICAgICAgYFJldHJpZXZpbmcgY2hhaW5jb2RlICR7Y29uZmlnLmNoYWluY29kZU5hbWV9IGNvbnRyYWN0ICR7Y29udHJhY3ROYW1lIHx8IGNvbmZpZy5jb250cmFjdE5hbWV9IGZyb20gbmV0d29yayAke2NvbmZpZy5jaGFubmVsfWBcbiAgICAgICk7XG4gICAgICBjb250cmFjdE5hbWUgPSBjb250cmFjdE5hbWUgPyBjb250cmFjdE5hbWUgOiBjb25maWcuY29udHJhY3ROYW1lO1xuICAgICAgY29udHJhY3QgPSBuZXR3b3JrLmdldENvbnRyYWN0KGNvbmZpZy5jaGFpbmNvZGVOYW1lLCBjb250cmFjdE5hbWUpO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgdGhyb3cgdGhpcy5wYXJzZUVycm9yKGUpO1xuICAgIH1cbiAgICByZXR1cm4gY29udHJhY3Q7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEdldHMgYSBOZXR3b3JrIGluc3RhbmNlIGZyb20gYSBHYXRld2F5XG4gICAqIEBzdW1tYXJ5IENvbm5lY3RzIHRvIGEgc3BlY2lmaWMgY2hhbm5lbCBvbiB0aGUgRmFicmljIG5ldHdvcmtcbiAgICogQHBhcmFtIHtHYXRld2F5fSBnYXRld2F5IC0gVGhlIEdhdGV3YXkgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNoYW5uZWxOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGNoYW5uZWwgdG8gY29ubmVjdCB0b1xuICAgKiBAcmV0dXJuIHtOZXR3b3JrfSBUaGUgTmV0d29yayBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGdldE5ldHdvcmsoZ2F0ZXdheTogR2F0ZXdheSwgY2hhbm5lbE5hbWU6IHN0cmluZyk6IE5ldHdvcmsge1xuICAgIGNvbnN0IGxvZyA9IExvZ2dpbmcuZm9yKHRoaXMuZ2V0TmV0d29yayk7XG4gICAgbGV0IG5ldHdvcms6IE5ldHdvcms7XG4gICAgdHJ5IHtcbiAgICAgIGxvZy5kZWJ1ZyhgQ29ubmVjdGluZyB0byBjaGFubmVsICR7Y2hhbm5lbE5hbWV9YCk7XG4gICAgICBuZXR3b3JrID0gZ2F0ZXdheS5nZXROZXR3b3JrKGNoYW5uZWxOYW1lKTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIHRocm93IHRoaXMucGFyc2VFcnJvcihlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV0d29yaztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gR2V0cyBhIEdhdGV3YXkgaW5zdGFuY2UgZm9yIGNvbm5lY3RpbmcgdG8gdGhlIEZhYnJpYyBuZXR3b3JrXG4gICAqIEBzdW1tYXJ5IENyZWF0ZXMgYSBHYXRld2F5IHVzaW5nIHRoZSBwcm92aWRlZCBjb25maWd1cmF0aW9uIGFuZCBjbGllbnRcbiAgICogQHBhcmFtIHtQZWVyQ29uZmlnfSBjb25maWcgLSBUaGUgcGVlciBjb25maWd1cmF0aW9uXG4gICAqIEBwYXJhbSB7Q2xpZW50fSBbY2xpZW50XSAtIE9wdGlvbmFsIGdSUEMgY2xpZW50LCB3aWxsIGJlIGNyZWF0ZWQgaWYgbm90IHByb3ZpZGVkXG4gICAqIEByZXR1cm4ge1Byb21pc2U8R2F0ZXdheT59IFByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSBHYXRld2F5IGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgZ2V0R2F0ZXdheShcbiAgICBjdHg6IENvbnRleHQ8RmFicmljQ2xpZW50RmxhZ3M+LFxuICAgIGNvbmZpZzogUGVlckNvbmZpZyxcbiAgICBjbGllbnQ/OiBDbGllbnRcbiAgKSB7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmdldENvbm5lY3Rpb24oXG4gICAgICBjbGllbnQgfHwgKGF3YWl0IHRoaXMuZ2V0Q2xpZW50KGNvbmZpZykpLFxuICAgICAgY29uZmlnLFxuICAgICAgY3R4XG4gICAgKSkgYXMgR2F0ZXdheTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhIGdSUEMgY2xpZW50IGZvciBjb25uZWN0aW5nIHRvIGEgRmFicmljIHBlZXJcbiAgICogQHN1bW1hcnkgSW5pdGlhbGl6ZXMgYSBjbGllbnQgd2l0aCBUTFMgY3JlZGVudGlhbHMgZm9yIHNlY3VyZSBjb21tdW5pY2F0aW9uXG4gICAqIEBwYXJhbSB7UGVlckNvbmZpZ30gY29uZmlnIC0gVGhlIHBlZXIgY29uZmlndXJhdGlvblxuICAgKiBAcmV0dXJuIHtDbGllbnR9IFByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSBnUlBDIGNsaWVudFxuICAgKi9cbiAgc3RhdGljIGdldENsaWVudChjb25maWc6IFBlZXJDb25maWcpOiBDbGllbnQge1xuICAgIGNvbnN0IGxvZyA9IHRoaXMubG9nLmZvcih0aGlzLmdldENsaWVudCk7XG4gICAgbG9nLmRlYnVnKGBnZW5lcmF0aW5nIFRMUyBjcmVkZW50aWFscyBmb3IgbXNwICR7Y29uZmlnLm1zcElkfWApO1xuICAgIGxldCBwYXRoT3JDZXJ0OiBzdHJpbmcgfCBCdWZmZXIgPSBjb25maWcudGxzQ2VydCBhcyBzdHJpbmcgfCBCdWZmZXI7XG5cbiAgICBpZiAodHlwZW9mIHBhdGhPckNlcnQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGlmIChcbiAgICAgICAgcGF0aE9yQ2VydC5tYXRjaChcbiAgICAgICAgICAvLS0tLS1CRUdJTiAoQ0VSVElGSUNBVEV8S0VZfFBSSVZBVEUgS0VZKS0tLS0tLis/LS0tLS1FTkQgXFwxLS0tLS0kL2dtc1xuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgcGF0aE9yQ2VydCA9IEJ1ZmZlci5mcm9tKHBhdGhPckNlcnQsIFwidXRmOFwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcGF0aE9yQ2VydCA9IEJ1ZmZlci5mcm9tKGZzLnJlYWRGaWxlU3luYyhwYXRoT3JDZXJ0LCBcInV0ZjhcIikpO1xuICAgICAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICAgICAgICBgRmFpbGVkIHRvIHJlYWQgdGhlIHRscyBjZXJ0aWZpY2F0ZSBmcm9tICR7cGF0aE9yQ2VydH06ICR7ZX1gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHRsc0NyZWRlbnRpYWxzID0gZ3JwYy5jcmVkZW50aWFscy5jcmVhdGVTc2wocGF0aE9yQ2VydCk7XG4gICAgbG9nLmRlYnVnKGBnZW5lcmF0aW5nIEdhdGV3YXkgQ2xpZW50IGZvciB1cmwgJHtjb25maWcucGVlckVuZHBvaW50fWApO1xuICAgIHJldHVybiBuZXcgQ2xpZW50KGNvbmZpZy5wZWVyRW5kcG9pbnQsIHRsc0NyZWRlbnRpYWxzLCB7XG4gICAgICBcImdycGMubWF4X3JlY2VpdmVfbWVzc2FnZV9sZW5ndGhcIjogKGNvbmZpZy5zaXplTGltaXQgfHwgMTUpICogMTAyNCAqIDEwMjQsXG4gICAgICBcImdycGMubWF4X3NlbmRfbWVzc2FnZV9sZW5ndGhcIjogKGNvbmZpZy5zaXplTGltaXQgfHwgMTUpICogMTAyNCAqIDEwMjQsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEVzdGFibGlzaGVzIGEgY29ubmVjdGlvbiB0byB0aGUgRmFicmljIG5ldHdvcmtcbiAgICogQHN1bW1hcnkgQ3JlYXRlcyBhIEdhdGV3YXkgY29ubmVjdGlvbiB3aXRoIGlkZW50aXR5IGFuZCBzaWduZXJcbiAgICogQHBhcmFtIHtDbGllbnR9IGNsaWVudCAtIFRoZSBnUlBDIGNsaWVudFxuICAgKiBAcGFyYW0ge1BlZXJDb25maWd9IGNvbmZpZyAtIFRoZSBwZWVyIGNvbmZpZ3VyYXRpb25cbiAgICogQHJldHVybiB7UHJvbWlzZTxHYXRld2F5Pn0gUHJvbWlzZSByZXNvbHZpbmcgdG8gdGhlIGNvbm5lY3RlZCBHYXRld2F5XG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IENhbGxlclxuICAgKiAgIHBhcnRpY2lwYW50IEZhYnJpY0FkYXB0ZXJcbiAgICogICBwYXJ0aWNpcGFudCBJZGVudGl0eVxuICAgKiAgIHBhcnRpY2lwYW50IFNpZ25lclxuICAgKiAgIHBhcnRpY2lwYW50IEdhdGV3YXlcbiAgICpcbiAgICogICBDYWxsZXItPj5GYWJyaWNBZGFwdGVyOiBnZXRDb25uZWN0aW9uKGNsaWVudCwgY29uZmlnKVxuICAgKiAgIEZhYnJpY0FkYXB0ZXItPj5JZGVudGl0eTogZ2V0SWRlbnRpdHkobXNwSWQsIGNlcnREaXJlY3RvcnlQYXRoKVxuICAgKiAgIElkZW50aXR5LS0+PkZhYnJpY0FkYXB0ZXI6IGlkZW50aXR5XG4gICAqICAgRmFicmljQWRhcHRlci0+PlNpZ25lcjogZ2V0U2lnbmVyKGtleURpcmVjdG9yeVBhdGgpXG4gICAqICAgU2lnbmVyLS0+PkZhYnJpY0FkYXB0ZXI6IHNpZ25lclxuICAgKiAgIEZhYnJpY0FkYXB0ZXItPj5GYWJyaWNBZGFwdGVyOiBDcmVhdGUgQ29ubmVjdE9wdGlvbnNcbiAgICogICBGYWJyaWNBZGFwdGVyLT4+R2F0ZXdheTogY29ubmVjdChvcHRpb25zKVxuICAgKiAgIEdhdGV3YXktLT4+RmFicmljQWRhcHRlcjogZ2F0ZXdheVxuICAgKiAgIEZhYnJpY0FkYXB0ZXItLT4+Q2FsbGVyOiBnYXRld2F5XG4gICAqL1xuICBzdGF0aWMgYXN5bmMgZ2V0Q29ubmVjdGlvbihcbiAgICBjbGllbnQ6IENsaWVudCxcbiAgICBjb25maWc6IFBlZXJDb25maWcsXG4gICAgY3R4OiBDb250ZXh0PEZhYnJpY0NsaWVudEZsYWdzPlxuICApIHtcbiAgICBjb25zdCBsb2cgPSBMb2dnaW5nLmZvcih0aGlzLmdldENvbm5lY3Rpb24pO1xuICAgIGxvZy5kZWJ1ZyhcbiAgICAgIGBSZXRyaWV2aW5nIFBlZXIgSWRlbnRpdHkgZm9yICR7Y29uZmlnLm1zcElkfSB1bmRlciAke2NvbmZpZy5jZXJ0Q2VydE9yRGlyZWN0b3J5UGF0aH1gXG4gICAgKTtcbiAgICBjb25zdCBpZGVudGl0eSA9IGF3YWl0IGdldElkZW50aXR5KFxuICAgICAgY29uZmlnLm1zcElkLFxuICAgICAgY29uZmlnLmNlcnRDZXJ0T3JEaXJlY3RvcnlQYXRoIGFzIGFueVxuICAgICk7XG4gICAgbG9nLmRlYnVnKGBSZXRyaWV2aW5nIHNpZ25lciBrZXkgZnJvbSAke2NvbmZpZy5rZXlDZXJ0T3JEaXJlY3RvcnlQYXRofWApO1xuXG4gICAgbGV0IHNpZ25lcjogU2lnbmVyLFxuICAgICAgY2xvc2UgPSAoKSA9PiB7fTtcbiAgICBpZiAoIWNvbmZpZy5oc20pIHtcbiAgICAgIHNpZ25lciA9IGF3YWl0IGdldFNpZ25lcihjb25maWcua2V5Q2VydE9yRGlyZWN0b3J5UGF0aCBhcyBhbnkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBoc20gPSBuZXcgSFNNU2lnbmVyRmFjdG9yeUN1c3RvbShjb25maWcuaHNtLmxpYnJhcnkpO1xuICAgICAgY29uc3QgaWRlbnRpZmllciA9IGhzbS5nZXRTS0lGcm9tQ2VydGlmaWNhdGVQYXRoKFxuICAgICAgICBjb25maWcuY2VydENlcnRPckRpcmVjdG9yeVBhdGggYXMgYW55XG4gICAgICApO1xuICAgICAgY29uc3QgcGtjczExU2lnbmVyID0gaHNtLm5ld1NpZ25lcih7XG4gICAgICAgIGxhYmVsOiBjb25maWcuaHNtLnRva2VuTGFiZWwgYXMgc3RyaW5nLFxuICAgICAgICBwaW46IFN0cmluZyhjb25maWcuaHNtLnBpbikgYXMgc3RyaW5nLFxuICAgICAgICBpZGVudGlmaWVyOiBpZGVudGlmaWVyLFxuICAgICAgICAvLyB1c2VyVHlwZTogMSAvKkNLVV9VU0VSICovLFxuICAgICAgfSk7XG4gICAgICBzaWduZXIgPSBwa2NzMTFTaWduZXIuc2lnbmVyO1xuXG4gICAgICBjbG9zZSA9IHBrY3MxMVNpZ25lci5jbG9zZTtcbiAgICB9XG5cbiAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgY2xpZW50LFxuICAgICAgaWRlbnRpdHk6IGlkZW50aXR5LFxuICAgICAgc2lnbmVyOiBzaWduZXIsXG4gICAgICAvLyBEZWZhdWx0IHRpbWVvdXRzIGZvciBkaWZmZXJlbnQgZ1JQQyBjYWxsc1xuICAgICAgZXZhbHVhdGVPcHRpb25zOiAoKSA9PiB7XG4gICAgICAgIHJldHVybiB7IGRlYWRsaW5lOiBEYXRlLm5vdygpICsgMTAwMCAqIGN0eC5nZXQoXCJldmFsdWF0ZVRpbWVvdXRcIikgfTsgLy8gZGVmYXVsdHMgdG8gNSBzZWNvbmRzXG4gICAgICB9LFxuICAgICAgZW5kb3JzZU9wdGlvbnM6ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHsgZGVhZGxpbmU6IERhdGUubm93KCkgKyAxMDAwICogY3R4LmdldChcImVuZG9yc2VUaW1lb3V0XCIpIH07IC8vIGRlZmF1bHRzIHRvIDE1IHNlY29uZHNcbiAgICAgIH0sXG4gICAgICBzdWJtaXRPcHRpb25zOiAoKSA9PiB7XG4gICAgICAgIHJldHVybiB7IGRlYWRsaW5lOiBEYXRlLm5vdygpICsgMTAwMCAqIGN0eC5nZXQoXCJzdWJtaXRUaW1lb3V0XCIpIH07IC8vIGRlZmF1bHRzIHRvIDUgc2Vjb25kc1xuICAgICAgfSxcbiAgICAgIGNvbW1pdFN0YXR1c09wdGlvbnM6ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHsgZGVhZGxpbmU6IERhdGUubm93KCkgKyAxMDAwICogY3R4LmdldChcImNvbW1pdFRpbWVvdXRcIikgfTsgLy8gZGVmYXVsdHMgdG8gMSBtaW51dGVcbiAgICAgIH0sXG4gICAgfSBhcyBDb25uZWN0T3B0aW9ucztcblxuICAgIGxvZy5kZWJ1ZyhgQ29ubmVjdGluZyB0byAke2NvbmZpZy5tc3BJZH1gKTtcbiAgICBjb25zdCBnYXRld2F5ID0gY29ubmVjdChvcHRpb25zKTtcblxuICAgIC8vIFRPRE86IHJlcGxhY2U/XG4gICAgaWYgKGNvbmZpZy5oc20pIHtcbiAgICAgIGdhdGV3YXkuY2xvc2UgPSBuZXcgUHJveHkoZ2F0ZXdheS5jbG9zZSwge1xuICAgICAgICBhcHBseSh0YXJnZXQ6ICgpID0+IHZvaWQsIHRoaXNBcmc6IGFueSwgYXJnQXJyYXk6IGFueVtdKTogYW55IHtcbiAgICAgICAgICBSZWZsZWN0LmFwcGx5KHRhcmdldCwgdGhpc0FyZywgYXJnQXJyYXkpO1xuICAgICAgICAgIGNsb3NlKCk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZ2F0ZXdheTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhIG5ldyBEaXNwYXRjaCBpbnN0YW5jZSBmb3IgdGhlIEZhYnJpYyBjbGllbnQuXG4gICAqIEBzdW1tYXJ5IFRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIGEgbmV3IEZhYnJpY0NsaWVudERpc3BhdGNoIGluc3RhbmNlIHRoYXQgY2FuIGJlIHVzZWQgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgRmFicmljIG5ldHdvcmsuXG4gICAqIEByZXR1cm5zIHtEaXNwYXRjaH0gQSBuZXcgRGlzcGF0Y2ggaW5zdGFuY2UgY29uZmlndXJlZCBmb3IgdGhlIEZhYnJpYyBjbGllbnQuXG4gICAqIEByZW1hcmtzIFRoZSBEaXNwYXRjaCBpbnN0YW5jZSBpcyB1c2VkIHRvIGVuY2Fwc3VsYXRlIHRoZSBsb2dpYyBmb3IgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgRmFicmljIG5ldHdvcmssIHN1Y2ggYXMgc3VibWl0dGluZyB0cmFuc2FjdGlvbnMgb3IgcXVlcnlpbmcgZGF0YS5cbiAgICogQGV4YW1wbGVcbiAgICogY29uc3QgZmFicmljRGlzcGF0Y2ggPSBmYWJyaWNDbGllbnRBZGFwdGVyLkRpc3BhdGNoKCk7XG4gICAqIGZhYnJpY0Rpc3BhdGNoLnN1Ym1pdFRyYW5zYWN0aW9uKCdjcmVhdGVQcm9kdWN0JywgeyBuYW1lOiAnUHJvZHVjdCBBJywgcHJpY2U6IDEwMCB9KTtcbiAgICovXG4gIG92ZXJyaWRlIERpc3BhdGNoKCk6IEZhYnJpY0NsaWVudERpc3BhdGNoIHtcbiAgICByZXR1cm4gbmV3IEZhYnJpY0NsaWVudEFkYXB0ZXJbXCJfYmFzZURpc3BhdGNoXCJdKCk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFBhcnNlcyBhbiBlcnJvciBpbnRvIGEgQmFzZUVycm9yXG4gICAqIEBzdW1tYXJ5IENvbnZlcnRzIGFueSBlcnJvciBpbnRvIGEgc3RhbmRhcmRpemVkIEJhc2VFcnJvciB1c2luZyB0aGUgcGFyZW50IGNsYXNzIGltcGxlbWVudGF0aW9uXG4gICAqIEBwYXJhbSB7RXJyb3IgfCBzdHJpbmd9IGVyciAtIFRoZSBlcnJvciB0byBwYXJzZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlYXNvbl0gLSBPcHRpb25hbCByZWFzb24gZm9yIHRoZSBlcnJvclxuICAgKiBAcmV0dXJuIHtCYXNlRXJyb3J9IFRoZSBwYXJzZWQgZXJyb3JcbiAgICovXG4gIHByb3RlY3RlZCBzdGF0aWMgcGFyc2VFcnJvcjxFIGV4dGVuZHMgQmFzZUVycm9yPihlcnI6IEVycm9yIHwgc3RyaW5nKTogRSB7XG4gICAgLy8gaWYgKFxuICAgIC8vICAgTUlTU0lOR19QUklWQVRFX0RBVEFfUkVHRVgudGVzdChcbiAgICAvLyAgICAgdHlwZW9mIGVyciA9PT0gXCJzdHJpbmdcIiA/IGVyciA6IGVyci5tZXNzYWdlXG4gICAgLy8gICApXG4gICAgLy8gKVxuICAgIC8vICAgcmV0dXJuIG5ldyBVbmF1dGhvcml6ZWRQcml2YXRlRGF0YUFjY2VzcyhlcnIpIGFzIEU7XG4gICAgY29uc3QgbXNnID0gdHlwZW9mIGVyciA9PT0gXCJzdHJpbmdcIiA/IGVyciA6IGVyci5tZXNzYWdlO1xuXG4gICAgaWYgKG1zZy5pbmNsdWRlcyhcIk1WQ0NfUkVBRF9DT05GTElDVFwiKSlcbiAgICAgIHJldHVybiBuZXcgTXZjY1JlYWRDb25mbGljdEVycm9yKGVycikgYXMgRTtcblxuICAgIGlmIChtc2cuaW5jbHVkZXMoXCJFTkRPUlNFTUVOVF9QT0xJQ1lfRkFJTFVSRVwiKSlcbiAgICAgIHJldHVybiBuZXcgRW5kb3JzZW1lbnRQb2xpY3lFcnJvcihlcnIpIGFzIEU7XG5cbiAgICBpZiAobXNnLmluY2x1ZGVzKFwiUEhBTlRPTV9SRUFEX0NPTkZMSUNUXCIpKVxuICAgICAgcmV0dXJuIG5ldyBQaGFudG9tUmVhZENvbmZsaWN0RXJyb3IoZXJyKSBhcyBFO1xuXG4gICAgaWYgKGVyciBpbnN0YW5jZW9mIEVycm9yICYmIChlcnIgYXMgYW55KS5jb2RlKSB7XG4gICAgICBzd2l0Y2ggKChlcnIgYXMgYW55KS5jb2RlKSB7XG4gICAgICAgIGNhc2UgOTpcbiAgICAgICAgICByZXR1cm4gbmV3IEVuZG9yc2VtZW50RXJyb3IoZXJyKSBhcyBFO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChtc2cuaW5jbHVkZXMoTm90Rm91bmRFcnJvci5uYW1lKSkgcmV0dXJuIG5ldyBOb3RGb3VuZEVycm9yKGVycikgYXMgRTtcbiAgICBpZiAobXNnLmluY2x1ZGVzKENvbmZsaWN0RXJyb3IubmFtZSkpIHJldHVybiBuZXcgQ29uZmxpY3RFcnJvcihlcnIpIGFzIEU7XG4gICAgaWYgKG1zZy5pbmNsdWRlcyhCYWRSZXF1ZXN0RXJyb3IubmFtZSkpXG4gICAgICByZXR1cm4gbmV3IEJhZFJlcXVlc3RFcnJvcihlcnIpIGFzIEU7XG4gICAgaWYgKG1zZy5pbmNsdWRlcyhRdWVyeUVycm9yLm5hbWUpKSByZXR1cm4gbmV3IFF1ZXJ5RXJyb3IoZXJyKSBhcyBFO1xuICAgIGlmIChtc2cuaW5jbHVkZXMoUGFnaW5nRXJyb3IubmFtZSkpIHJldHVybiBuZXcgUGFnaW5nRXJyb3IoZXJyKSBhcyBFO1xuICAgIGlmIChtc2cuaW5jbHVkZXMoVW5zdXBwb3J0ZWRFcnJvci5uYW1lKSlcbiAgICAgIHJldHVybiBuZXcgVW5zdXBwb3J0ZWRFcnJvcihlcnIpIGFzIEU7XG4gICAgaWYgKG1zZy5pbmNsdWRlcyhNaWdyYXRpb25FcnJvci5uYW1lKSkgcmV0dXJuIG5ldyBNaWdyYXRpb25FcnJvcihlcnIpIGFzIEU7XG4gICAgaWYgKG1zZy5pbmNsdWRlcyhPYnNlcnZlckVycm9yLm5hbWUpKSByZXR1cm4gbmV3IE9ic2VydmVyRXJyb3IoZXJyKSBhcyBFO1xuICAgIGlmIChtc2cuaW5jbHVkZXMoQXV0aG9yaXphdGlvbkVycm9yLm5hbWUpKVxuICAgICAgcmV0dXJuIG5ldyBBdXRob3JpemF0aW9uRXJyb3IoZXJyKSBhcyBFO1xuICAgIGlmIChtc2cuaW5jbHVkZXMoRm9yYmlkZGVuRXJyb3IubmFtZSkpIHJldHVybiBuZXcgRm9yYmlkZGVuRXJyb3IoZXJyKSBhcyBFO1xuICAgIGlmIChtc2cuaW5jbHVkZXMoQ29ubmVjdGlvbkVycm9yLm5hbWUpKVxuICAgICAgcmV0dXJuIG5ldyBDb25uZWN0aW9uRXJyb3IoZXJyKSBhcyBFO1xuICAgIGlmIChtc2cuaW5jbHVkZXMoU2VyaWFsaXphdGlvbkVycm9yLm5hbWUpKVxuICAgICAgcmV0dXJuIG5ldyBTZXJpYWxpemF0aW9uRXJyb3IoZXJyKSBhcyBFO1xuICAgIHJldHVybiBuZXcgSW50ZXJuYWxFcnJvcihlcnIpIGFzIEU7XG4gIH1cbn1cblxuRmFicmljQ2xpZW50QWRhcHRlci5kZWNvcmF0aW9uKCk7XG5BZGFwdGVyLnNldEN1cnJlbnQoRmFicmljRmxhdm91cik7XG4iXX0=