@microsoft/terraform-cdk-constructs 1.0.0 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (577) hide show
  1. package/.jsii +89270 -15866
  2. package/API.md +103201 -10557
  3. package/README.md +72 -36
  4. package/docs/monitoring-guide.md +206 -0
  5. package/docs/testing.md +84 -1
  6. package/lib/azure-actiongroup/index.d.ts +1 -0
  7. package/lib/azure-actiongroup/index.js +18 -0
  8. package/lib/azure-actiongroup/lib/action-group-schemas.d.ts +24 -0
  9. package/lib/azure-actiongroup/lib/action-group-schemas.js +201 -0
  10. package/lib/azure-actiongroup/lib/action-group.d.ts +302 -0
  11. package/lib/azure-actiongroup/lib/action-group.js +175 -0
  12. package/lib/azure-actiongroup/lib/index.d.ts +2 -0
  13. package/lib/azure-actiongroup/lib/index.js +19 -0
  14. package/lib/azure-actiongroup/test/action-group.integ.d.ts +9 -0
  15. package/lib/azure-actiongroup/test/action-group.integ.js +79 -0
  16. package/lib/azure-actiongroup/test/action-group.spec.d.ts +8 -0
  17. package/lib/azure-actiongroup/test/action-group.spec.js +602 -0
  18. package/lib/azure-activitylogalert/index.d.ts +1 -0
  19. package/lib/azure-activitylogalert/index.js +18 -0
  20. package/lib/azure-activitylogalert/lib/activity-log-alert-schemas.d.ts +24 -0
  21. package/lib/azure-activitylogalert/lib/activity-log-alert-schemas.js +182 -0
  22. package/lib/azure-activitylogalert/lib/activity-log-alert.d.ts +226 -0
  23. package/lib/azure-activitylogalert/lib/activity-log-alert.js +186 -0
  24. package/lib/azure-activitylogalert/lib/index.d.ts +2 -0
  25. package/lib/azure-activitylogalert/lib/index.js +19 -0
  26. package/lib/azure-activitylogalert/test/activity-log-alert.integ.d.ts +9 -0
  27. package/lib/azure-activitylogalert/test/activity-log-alert.integ.js +98 -0
  28. package/lib/azure-activitylogalert/test/activity-log-alert.spec.d.ts +9 -0
  29. package/lib/azure-activitylogalert/test/activity-log-alert.spec.js +1101 -0
  30. package/lib/azure-aks/index.d.ts +1 -0
  31. package/lib/azure-aks/index.js +18 -0
  32. package/lib/azure-aks/lib/aks-cluster-schemas.d.ts +505 -0
  33. package/lib/azure-aks/lib/aks-cluster-schemas.js +572 -0
  34. package/lib/azure-aks/lib/aks-cluster.d.ts +386 -0
  35. package/lib/azure-aks/lib/aks-cluster.js +466 -0
  36. package/lib/azure-aks/lib/index.d.ts +2 -0
  37. package/lib/azure-aks/lib/index.js +19 -0
  38. package/lib/azure-aks/test/aks-cluster.integ.d.ts +9 -0
  39. package/lib/azure-aks/test/aks-cluster.integ.js +260 -0
  40. package/lib/azure-aks/test/aks-cluster.spec.d.ts +8 -0
  41. package/lib/azure-aks/test/aks-cluster.spec.js +1396 -0
  42. package/lib/azure-diagnosticsettings/index.d.ts +1 -0
  43. package/lib/azure-diagnosticsettings/index.js +18 -0
  44. package/lib/azure-diagnosticsettings/lib/diagnostic-settings-schemas.d.ts +50 -0
  45. package/lib/azure-diagnosticsettings/lib/diagnostic-settings-schemas.js +207 -0
  46. package/lib/azure-diagnosticsettings/lib/diagnostic-settings.d.ts +183 -0
  47. package/lib/azure-diagnosticsettings/lib/diagnostic-settings.js +174 -0
  48. package/lib/azure-diagnosticsettings/lib/index.d.ts +2 -0
  49. package/lib/azure-diagnosticsettings/lib/index.js +19 -0
  50. package/lib/azure-diagnosticsettings/test/diagnostic-settings.spec.d.ts +8 -0
  51. package/lib/azure-diagnosticsettings/test/diagnostic-settings.spec.js +432 -0
  52. package/lib/azure-dnsforwardingruleset/index.d.ts +1 -0
  53. package/lib/azure-dnsforwardingruleset/index.js +18 -0
  54. package/lib/azure-dnsforwardingruleset/lib/dns-forwarding-ruleset-schemas.d.ts +24 -0
  55. package/lib/azure-dnsforwardingruleset/lib/dns-forwarding-ruleset-schemas.js +206 -0
  56. package/lib/azure-dnsforwardingruleset/lib/dns-forwarding-ruleset.d.ts +174 -0
  57. package/lib/azure-dnsforwardingruleset/lib/dns-forwarding-ruleset.js +214 -0
  58. package/lib/azure-dnsforwardingruleset/lib/forwarding-rule-schemas.d.ts +24 -0
  59. package/lib/azure-dnsforwardingruleset/lib/forwarding-rule-schemas.js +242 -0
  60. package/lib/azure-dnsforwardingruleset/lib/forwarding-rule.d.ts +193 -0
  61. package/lib/azure-dnsforwardingruleset/lib/forwarding-rule.js +193 -0
  62. package/lib/azure-dnsforwardingruleset/lib/index.d.ts +6 -0
  63. package/lib/azure-dnsforwardingruleset/lib/index.js +23 -0
  64. package/lib/azure-dnsforwardingruleset/lib/virtual-network-link-schemas.d.ts +24 -0
  65. package/lib/azure-dnsforwardingruleset/lib/virtual-network-link-schemas.js +199 -0
  66. package/lib/azure-dnsforwardingruleset/lib/virtual-network-link.d.ts +160 -0
  67. package/lib/azure-dnsforwardingruleset/lib/virtual-network-link.js +178 -0
  68. package/lib/azure-dnsforwardingruleset/test/dns-forwarding-ruleset.integ.d.ts +9 -0
  69. package/lib/azure-dnsforwardingruleset/test/dns-forwarding-ruleset.integ.js +133 -0
  70. package/lib/azure-dnsforwardingruleset/test/dns-forwarding-ruleset.spec.d.ts +9 -0
  71. package/lib/azure-dnsforwardingruleset/test/dns-forwarding-ruleset.spec.js +350 -0
  72. package/lib/azure-dnsforwardingruleset/test/forwarding-rule.spec.d.ts +9 -0
  73. package/lib/azure-dnsforwardingruleset/test/forwarding-rule.spec.js +397 -0
  74. package/lib/azure-dnsforwardingruleset/test/virtual-network-link.spec.d.ts +9 -0
  75. package/lib/azure-dnsforwardingruleset/test/virtual-network-link.spec.js +285 -0
  76. package/lib/azure-dnsresolver/index.d.ts +1 -0
  77. package/lib/azure-dnsresolver/index.js +18 -0
  78. package/lib/azure-dnsresolver/lib/dns-resolver-schemas.d.ts +24 -0
  79. package/lib/azure-dnsresolver/lib/dns-resolver-schemas.js +218 -0
  80. package/lib/azure-dnsresolver/lib/dns-resolver.d.ts +170 -0
  81. package/lib/azure-dnsresolver/lib/dns-resolver.js +236 -0
  82. package/lib/azure-dnsresolver/lib/inbound-endpoint-schemas.d.ts +24 -0
  83. package/lib/azure-dnsresolver/lib/inbound-endpoint-schemas.js +261 -0
  84. package/lib/azure-dnsresolver/lib/inbound-endpoint.d.ts +189 -0
  85. package/lib/azure-dnsresolver/lib/inbound-endpoint.js +243 -0
  86. package/lib/azure-dnsresolver/lib/index.d.ts +6 -0
  87. package/lib/azure-dnsresolver/lib/index.js +23 -0
  88. package/lib/azure-dnsresolver/lib/outbound-endpoint-schemas.d.ts +24 -0
  89. package/lib/azure-dnsresolver/lib/outbound-endpoint-schemas.js +231 -0
  90. package/lib/azure-dnsresolver/lib/outbound-endpoint.d.ts +175 -0
  91. package/lib/azure-dnsresolver/lib/outbound-endpoint.js +234 -0
  92. package/lib/azure-dnsresolver/test/dns-resolver.integ.d.ts +14 -0
  93. package/lib/azure-dnsresolver/test/dns-resolver.integ.js +117 -0
  94. package/lib/azure-dnsresolver/test/dns-resolver.spec.d.ts +9 -0
  95. package/lib/azure-dnsresolver/test/dns-resolver.spec.js +353 -0
  96. package/lib/azure-dnsresolver/test/inbound-endpoint.integ.d.ts +9 -0
  97. package/lib/azure-dnsresolver/test/inbound-endpoint.integ.js +151 -0
  98. package/lib/azure-dnsresolver/test/inbound-endpoint.spec.d.ts +9 -0
  99. package/lib/azure-dnsresolver/test/inbound-endpoint.spec.js +441 -0
  100. package/lib/azure-dnsresolver/test/outbound-endpoint.integ.d.ts +9 -0
  101. package/lib/azure-dnsresolver/test/outbound-endpoint.integ.js +149 -0
  102. package/lib/azure-dnsresolver/test/outbound-endpoint.spec.d.ts +9 -0
  103. package/lib/azure-dnsresolver/test/outbound-endpoint.spec.js +301 -0
  104. package/lib/azure-dnszone/index.d.ts +1 -0
  105. package/lib/azure-dnszone/index.js +18 -0
  106. package/lib/azure-dnszone/lib/dns-zone-schemas.d.ts +24 -0
  107. package/lib/azure-dnszone/lib/dns-zone-schemas.js +191 -0
  108. package/lib/azure-dnszone/lib/dns-zone.d.ts +182 -0
  109. package/lib/azure-dnszone/lib/dns-zone.js +228 -0
  110. package/lib/azure-dnszone/lib/index.d.ts +2 -0
  111. package/lib/azure-dnszone/lib/index.js +19 -0
  112. package/lib/azure-dnszone/test/dns-zone.integ.d.ts +9 -0
  113. package/lib/azure-dnszone/test/dns-zone.integ.js +85 -0
  114. package/lib/azure-dnszone/test/dns-zone.spec.d.ts +9 -0
  115. package/lib/azure-dnszone/test/dns-zone.spec.js +285 -0
  116. package/lib/azure-metricalert/index.d.ts +1 -0
  117. package/lib/azure-metricalert/index.js +18 -0
  118. package/lib/azure-metricalert/lib/index.d.ts +2 -0
  119. package/lib/azure-metricalert/lib/index.js +19 -0
  120. package/lib/azure-metricalert/lib/metric-alert-schemas.d.ts +24 -0
  121. package/lib/azure-metricalert/lib/metric-alert-schemas.js +242 -0
  122. package/lib/azure-metricalert/lib/metric-alert.d.ts +334 -0
  123. package/lib/azure-metricalert/lib/metric-alert.js +226 -0
  124. package/lib/azure-metricalert/test/metric-alert.integ.d.ts +9 -0
  125. package/lib/azure-metricalert/test/metric-alert.integ.js +123 -0
  126. package/lib/azure-metricalert/test/metric-alert.spec.d.ts +9 -0
  127. package/lib/azure-metricalert/test/metric-alert.spec.js +1266 -0
  128. package/lib/azure-networkinterface/index.d.ts +1 -0
  129. package/lib/azure-networkinterface/index.js +18 -0
  130. package/lib/azure-networkinterface/lib/index.d.ts +2 -0
  131. package/lib/azure-networkinterface/lib/index.js +19 -0
  132. package/lib/azure-networkinterface/lib/network-interface-schemas.d.ts +32 -0
  133. package/lib/azure-networkinterface/lib/network-interface-schemas.js +222 -0
  134. package/lib/azure-networkinterface/lib/network-interface.d.ts +260 -0
  135. package/lib/azure-networkinterface/lib/network-interface.js +213 -0
  136. package/lib/azure-networkinterface/test/network-interface.integ.d.ts +9 -0
  137. package/lib/azure-networkinterface/test/network-interface.integ.js +116 -0
  138. package/lib/azure-networkinterface/test/network-interface.spec.d.ts +8 -0
  139. package/lib/azure-networkinterface/test/network-interface.spec.js +655 -0
  140. package/lib/azure-networksecuritygroup/index.d.ts +1 -0
  141. package/lib/azure-networksecuritygroup/index.js +18 -0
  142. package/lib/azure-networksecuritygroup/lib/index.d.ts +2 -0
  143. package/lib/azure-networksecuritygroup/lib/index.js +19 -0
  144. package/lib/azure-networksecuritygroup/lib/network-security-group-schemas.d.ts +32 -0
  145. package/lib/azure-networksecuritygroup/lib/network-security-group-schemas.js +198 -0
  146. package/lib/azure-networksecuritygroup/lib/network-security-group.d.ts +259 -0
  147. package/lib/azure-networksecuritygroup/lib/network-security-group.js +226 -0
  148. package/lib/azure-networksecuritygroup/test/network-security-group.integ.d.ts +9 -0
  149. package/lib/azure-networksecuritygroup/test/network-security-group.integ.js +151 -0
  150. package/lib/azure-networksecuritygroup/test/network-security-group.spec.d.ts +8 -0
  151. package/lib/azure-networksecuritygroup/test/network-security-group.spec.js +652 -0
  152. package/lib/azure-policyassignment/index.d.ts +1 -0
  153. package/lib/azure-policyassignment/index.js +18 -0
  154. package/lib/azure-policyassignment/lib/index.d.ts +2 -0
  155. package/lib/azure-policyassignment/lib/index.js +19 -0
  156. package/lib/azure-policyassignment/lib/policy-assignment-schemas.d.ts +25 -0
  157. package/lib/azure-policyassignment/lib/policy-assignment-schemas.js +260 -0
  158. package/lib/azure-policyassignment/lib/policy-assignment.d.ts +342 -0
  159. package/lib/azure-policyassignment/lib/policy-assignment.js +228 -0
  160. package/lib/azure-policyassignment/test/policy-assignment.integ.d.ts +13 -0
  161. package/lib/azure-policyassignment/test/policy-assignment.integ.js +153 -0
  162. package/lib/azure-policyassignment/test/policy-assignment.spec.d.ts +9 -0
  163. package/lib/azure-policyassignment/test/policy-assignment.spec.js +651 -0
  164. package/lib/azure-policydefinition/index.d.ts +1 -0
  165. package/lib/azure-policydefinition/index.js +18 -0
  166. package/lib/azure-policydefinition/lib/index.d.ts +2 -0
  167. package/lib/azure-policydefinition/lib/index.js +19 -0
  168. package/lib/azure-policydefinition/lib/policy-definition-schemas.d.ts +25 -0
  169. package/lib/azure-policydefinition/lib/policy-definition-schemas.js +210 -0
  170. package/lib/azure-policydefinition/lib/policy-definition.d.ts +260 -0
  171. package/lib/azure-policydefinition/lib/policy-definition.js +199 -0
  172. package/lib/azure-policydefinition/test/policy-definition.integ.d.ts +9 -0
  173. package/lib/azure-policydefinition/test/policy-definition.integ.js +137 -0
  174. package/lib/azure-policydefinition/test/policy-definition.spec.d.ts +9 -0
  175. package/lib/azure-policydefinition/test/policy-definition.spec.js +596 -0
  176. package/lib/azure-privatednszone/index.d.ts +1 -0
  177. package/lib/azure-privatednszone/index.js +18 -0
  178. package/lib/azure-privatednszone/lib/index.d.ts +2 -0
  179. package/lib/azure-privatednszone/lib/index.js +19 -0
  180. package/lib/azure-privatednszone/lib/private-dns-zone-schemas.d.ts +24 -0
  181. package/lib/azure-privatednszone/lib/private-dns-zone-schemas.js +254 -0
  182. package/lib/azure-privatednszone/lib/private-dns-zone.d.ts +178 -0
  183. package/lib/azure-privatednszone/lib/private-dns-zone.js +272 -0
  184. package/lib/azure-privatednszone/test/private-dns-zone.integ.d.ts +9 -0
  185. package/lib/azure-privatednszone/test/private-dns-zone.integ.js +84 -0
  186. package/lib/azure-privatednszone/test/private-dns-zone.spec.d.ts +9 -0
  187. package/lib/azure-privatednszone/test/private-dns-zone.spec.js +341 -0
  188. package/lib/azure-privatednszonelink/index.d.ts +1 -0
  189. package/lib/azure-privatednszonelink/index.js +18 -0
  190. package/lib/azure-privatednszonelink/lib/index.d.ts +2 -0
  191. package/lib/azure-privatednszonelink/lib/index.js +19 -0
  192. package/lib/azure-privatednszonelink/lib/private-dns-zone-link-schemas.d.ts +24 -0
  193. package/lib/azure-privatednszonelink/lib/private-dns-zone-link-schemas.js +262 -0
  194. package/lib/azure-privatednszonelink/lib/private-dns-zone-link.d.ts +202 -0
  195. package/lib/azure-privatednszonelink/lib/private-dns-zone-link.js +250 -0
  196. package/lib/azure-privatednszonelink/test/private-dns-zone-link.integ.d.ts +9 -0
  197. package/lib/azure-privatednszonelink/test/private-dns-zone-link.integ.js +110 -0
  198. package/lib/azure-privatednszonelink/test/private-dns-zone-link.spec.d.ts +9 -0
  199. package/lib/azure-privatednszonelink/test/private-dns-zone-link.spec.js +465 -0
  200. package/lib/azure-publicipaddress/index.d.ts +1 -0
  201. package/lib/azure-publicipaddress/index.js +18 -0
  202. package/lib/azure-publicipaddress/lib/index.d.ts +2 -0
  203. package/lib/azure-publicipaddress/lib/index.js +19 -0
  204. package/lib/azure-publicipaddress/lib/public-ip-address-schemas.d.ts +32 -0
  205. package/lib/azure-publicipaddress/lib/public-ip-address-schemas.js +227 -0
  206. package/lib/azure-publicipaddress/lib/public-ip-address.d.ts +247 -0
  207. package/lib/azure-publicipaddress/lib/public-ip-address.js +245 -0
  208. package/lib/azure-publicipaddress/test/public-ip-address.integ.d.ts +9 -0
  209. package/lib/azure-publicipaddress/test/public-ip-address.integ.js +75 -0
  210. package/lib/azure-publicipaddress/test/public-ip-address.spec.d.ts +15 -0
  211. package/lib/azure-publicipaddress/test/public-ip-address.spec.js +498 -0
  212. package/lib/azure-resourcegroup/index.d.ts +0 -37
  213. package/lib/azure-resourcegroup/index.js +1 -39
  214. package/lib/azure-resourcegroup/lib/index.d.ts +1 -44
  215. package/lib/azure-resourcegroup/lib/index.js +2 -43
  216. package/lib/azure-resourcegroup/lib/resource-group.d.ts +9 -23
  217. package/lib/azure-resourcegroup/lib/resource-group.js +23 -56
  218. package/lib/azure-resourcegroup/test/resource-group.integ.js +23 -11
  219. package/lib/azure-resourcegroup/test/resource-group.spec.js +13 -19
  220. package/lib/azure-roleassignment/index.d.ts +1 -0
  221. package/lib/azure-roleassignment/index.js +18 -0
  222. package/lib/azure-roleassignment/lib/index.d.ts +2 -0
  223. package/lib/azure-roleassignment/lib/index.js +19 -0
  224. package/lib/azure-roleassignment/lib/role-assignment-schemas.d.ts +25 -0
  225. package/lib/azure-roleassignment/lib/role-assignment-schemas.js +238 -0
  226. package/lib/azure-roleassignment/lib/role-assignment.d.ts +294 -0
  227. package/lib/azure-roleassignment/lib/role-assignment.js +257 -0
  228. package/lib/azure-roleassignment/test/role-assignment.integ.d.ts +12 -0
  229. package/lib/azure-roleassignment/test/role-assignment.integ.js +101 -0
  230. package/lib/azure-roleassignment/test/role-assignment.spec.d.ts +9 -0
  231. package/lib/azure-roleassignment/test/role-assignment.spec.js +633 -0
  232. package/lib/azure-roledefinition/index.d.ts +1 -0
  233. package/lib/azure-roledefinition/index.js +18 -0
  234. package/lib/azure-roledefinition/lib/index.d.ts +2 -0
  235. package/lib/azure-roledefinition/lib/index.js +19 -0
  236. package/lib/azure-roledefinition/lib/role-definition-schemas.d.ts +25 -0
  237. package/lib/azure-roledefinition/lib/role-definition-schemas.js +195 -0
  238. package/lib/azure-roledefinition/lib/role-definition.d.ts +236 -0
  239. package/lib/azure-roledefinition/lib/role-definition.js +192 -0
  240. package/lib/azure-roledefinition/test/role-definition.integ.d.ts +12 -0
  241. package/lib/azure-roledefinition/test/role-definition.integ.js +142 -0
  242. package/lib/azure-roledefinition/test/role-definition.spec.d.ts +9 -0
  243. package/lib/azure-roledefinition/test/role-definition.spec.js +946 -0
  244. package/lib/azure-storageaccount/index.d.ts +0 -19
  245. package/lib/azure-storageaccount/index.js +1 -20
  246. package/lib/azure-storageaccount/lib/index.d.ts +1 -7
  247. package/lib/azure-storageaccount/lib/index.js +2 -8
  248. package/lib/azure-storageaccount/lib/storage-account-schemas.d.ts +98 -0
  249. package/lib/azure-storageaccount/lib/storage-account-schemas.js +1 -1
  250. package/lib/azure-storageaccount/lib/storage-account.d.ts +40 -8
  251. package/lib/azure-storageaccount/lib/storage-account.js +145 -23
  252. package/lib/azure-storageaccount/test/storage-account.integ.js +91 -12
  253. package/lib/azure-subnet/index.d.ts +1 -0
  254. package/lib/azure-subnet/index.js +18 -0
  255. package/lib/azure-subnet/lib/index.d.ts +2 -0
  256. package/lib/azure-subnet/lib/index.js +19 -0
  257. package/lib/azure-subnet/lib/subnet-schemas.d.ts +32 -0
  258. package/lib/azure-subnet/lib/subnet-schemas.js +237 -0
  259. package/lib/azure-subnet/lib/subnet.d.ts +274 -0
  260. package/lib/azure-subnet/lib/subnet.js +235 -0
  261. package/lib/azure-subnet/test/subnet.integ.d.ts +11 -0
  262. package/lib/azure-subnet/test/subnet.integ.js +92 -0
  263. package/lib/azure-subnet/test/subnet.spec.d.ts +8 -0
  264. package/lib/azure-subnet/test/subnet.spec.js +395 -0
  265. package/lib/azure-virtualmachine/index.d.ts +1 -0
  266. package/lib/azure-virtualmachine/index.js +18 -0
  267. package/lib/azure-virtualmachine/lib/index.d.ts +2 -0
  268. package/lib/azure-virtualmachine/lib/index.js +19 -0
  269. package/lib/azure-virtualmachine/lib/virtual-machine-schemas.d.ts +327 -0
  270. package/lib/azure-virtualmachine/lib/virtual-machine-schemas.js +544 -0
  271. package/lib/azure-virtualmachine/lib/virtual-machine.d.ts +368 -0
  272. package/lib/azure-virtualmachine/lib/virtual-machine.js +441 -0
  273. package/lib/azure-virtualmachine/test/virtual-machine.integ.d.ts +9 -0
  274. package/lib/azure-virtualmachine/test/virtual-machine.integ.js +220 -0
  275. package/lib/azure-virtualmachine/test/virtual-machine.spec.d.ts +9 -0
  276. package/lib/azure-virtualmachine/test/virtual-machine.spec.js +1032 -0
  277. package/lib/azure-virtualnetwork/index.d.ts +1 -0
  278. package/lib/azure-virtualnetwork/index.js +18 -0
  279. package/lib/azure-virtualnetwork/lib/index.d.ts +2 -0
  280. package/lib/azure-virtualnetwork/lib/index.js +19 -0
  281. package/lib/azure-virtualnetwork/lib/virtual-network-schemas.d.ts +32 -0
  282. package/lib/azure-virtualnetwork/lib/virtual-network-schemas.js +236 -0
  283. package/lib/azure-virtualnetwork/lib/virtual-network.d.ts +204 -0
  284. package/lib/azure-virtualnetwork/lib/virtual-network.js +224 -0
  285. package/lib/azure-virtualnetwork/test/virtual-network.integ.d.ts +9 -0
  286. package/lib/azure-virtualnetwork/test/virtual-network.integ.js +91 -0
  287. package/lib/azure-virtualnetwork/test/virtual-network.spec.d.ts +8 -0
  288. package/lib/azure-virtualnetwork/test/virtual-network.spec.js +398 -0
  289. package/lib/azure-virtualnetworkmanager/index.d.ts +1 -0
  290. package/lib/azure-virtualnetworkmanager/index.js +18 -0
  291. package/lib/azure-virtualnetworkmanager/lib/connectivity-configuration-schemas.d.ts +48 -0
  292. package/lib/azure-virtualnetworkmanager/lib/connectivity-configuration-schemas.js +265 -0
  293. package/lib/azure-virtualnetworkmanager/lib/connectivity-configuration.d.ts +185 -0
  294. package/lib/azure-virtualnetworkmanager/lib/connectivity-configuration.js +206 -0
  295. package/lib/azure-virtualnetworkmanager/lib/index.d.ts +14 -0
  296. package/lib/azure-virtualnetworkmanager/lib/index.js +31 -0
  297. package/lib/azure-virtualnetworkmanager/lib/network-group-schemas.d.ts +32 -0
  298. package/lib/azure-virtualnetworkmanager/lib/network-group-schemas.js +189 -0
  299. package/lib/azure-virtualnetworkmanager/lib/network-group-static-member-schemas.d.ts +32 -0
  300. package/lib/azure-virtualnetworkmanager/lib/network-group-static-member-schemas.js +201 -0
  301. package/lib/azure-virtualnetworkmanager/lib/network-group-static-member.d.ts +135 -0
  302. package/lib/azure-virtualnetworkmanager/lib/network-group-static-member.js +163 -0
  303. package/lib/azure-virtualnetworkmanager/lib/network-group.d.ts +139 -0
  304. package/lib/azure-virtualnetworkmanager/lib/network-group.js +158 -0
  305. package/lib/azure-virtualnetworkmanager/lib/security-admin-configuration-schemas.d.ts +32 -0
  306. package/lib/azure-virtualnetworkmanager/lib/security-admin-configuration-schemas.js +182 -0
  307. package/lib/azure-virtualnetworkmanager/lib/security-admin-configuration.d.ts +144 -0
  308. package/lib/azure-virtualnetworkmanager/lib/security-admin-configuration.js +164 -0
  309. package/lib/azure-virtualnetworkmanager/lib/security-admin-rule-collection-schemas.d.ts +38 -0
  310. package/lib/azure-virtualnetworkmanager/lib/security-admin-rule-collection-schemas.js +206 -0
  311. package/lib/azure-virtualnetworkmanager/lib/security-admin-rule-collection.d.ts +142 -0
  312. package/lib/azure-virtualnetworkmanager/lib/security-admin-rule-collection.js +162 -0
  313. package/lib/azure-virtualnetworkmanager/lib/security-admin-rule-schemas.d.ts +39 -0
  314. package/lib/azure-virtualnetworkmanager/lib/security-admin-rule-schemas.js +359 -0
  315. package/lib/azure-virtualnetworkmanager/lib/security-admin-rule.d.ts +221 -0
  316. package/lib/azure-virtualnetworkmanager/lib/security-admin-rule.js +204 -0
  317. package/lib/azure-virtualnetworkmanager/lib/virtual-network-manager-schemas.d.ts +32 -0
  318. package/lib/azure-virtualnetworkmanager/lib/virtual-network-manager-schemas.js +236 -0
  319. package/lib/azure-virtualnetworkmanager/lib/virtual-network-manager.d.ts +337 -0
  320. package/lib/azure-virtualnetworkmanager/lib/virtual-network-manager.js +283 -0
  321. package/lib/azure-virtualnetworkmanager/test/virtual-network-manager.integ.d.ts +25 -0
  322. package/lib/azure-virtualnetworkmanager/test/virtual-network-manager.integ.js +402 -0
  323. package/lib/azure-virtualnetworkmanager/test/virtual-network-manager.spec.d.ts +9 -0
  324. package/lib/azure-virtualnetworkmanager/test/virtual-network-manager.spec.js +1652 -0
  325. package/lib/azure-vmss/index.d.ts +1 -0
  326. package/lib/azure-vmss/index.js +18 -0
  327. package/lib/azure-vmss/lib/index.d.ts +2 -0
  328. package/lib/azure-vmss/lib/index.js +19 -0
  329. package/lib/azure-vmss/lib/virtual-machine-scale-set.d.ts +250 -0
  330. package/lib/azure-vmss/lib/virtual-machine-scale-set.js +479 -0
  331. package/lib/azure-vmss/lib/vmss-schemas.d.ts +472 -0
  332. package/lib/azure-vmss/lib/vmss-schemas.js +444 -0
  333. package/lib/azure-vmss/test/virtual-machine-scale-set.integ.d.ts +15 -0
  334. package/lib/azure-vmss/test/virtual-machine-scale-set.integ.js +261 -0
  335. package/lib/azure-vmss/test/virtual-machine-scale-set.spec.d.ts +8 -0
  336. package/lib/azure-vmss/test/virtual-machine-scale-set.spec.js +997 -0
  337. package/lib/core-azure/lib/azapi/azapi-resource-tags.spec.d.ts +10 -0
  338. package/lib/core-azure/lib/azapi/azapi-resource-tags.spec.js +218 -0
  339. package/lib/core-azure/lib/azapi/azapi-resource.d.ts +268 -48
  340. package/lib/core-azure/lib/azapi/azapi-resource.js +411 -136
  341. package/lib/core-azure/lib/azapi/azapi-resource.spec.js +2 -2
  342. package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-client-config/index.d.ts +33 -21
  343. package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-client-config/index.js +69 -27
  344. package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource/index.d.ts +134 -120
  345. package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource/index.js +209 -59
  346. package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource-action/index.d.ts +141 -128
  347. package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource-action/index.js +183 -36
  348. package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource-id/index.d.ts +55 -43
  349. package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource-id/index.js +94 -26
  350. package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource-list/index.d.ts +129 -116
  351. package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource-list/index.js +155 -32
  352. package/lib/core-azure/lib/azapi/providers-azapi/data-plane-resource/index.d.ts +187 -174
  353. package/lib/core-azure/lib/azapi/providers-azapi/data-plane-resource/index.js +267 -48
  354. package/lib/core-azure/lib/azapi/providers-azapi/index.d.ts +10 -10
  355. package/lib/core-azure/lib/azapi/providers-azapi/index.js +1 -1
  356. package/lib/core-azure/lib/azapi/providers-azapi/lazy-index.d.ts +0 -0
  357. package/lib/core-azure/lib/azapi/providers-azapi/lazy-index.js +13 -0
  358. package/lib/core-azure/lib/azapi/providers-azapi/provider/index.d.ts +174 -162
  359. package/lib/core-azure/lib/azapi/providers-azapi/provider/index.js +278 -16
  360. package/lib/core-azure/lib/azapi/providers-azapi/resource/index.d.ts +239 -225
  361. package/lib/core-azure/lib/azapi/providers-azapi/resource/index.js +360 -76
  362. package/lib/core-azure/lib/azapi/providers-azapi/resource-action/index.d.ts +163 -150
  363. package/lib/core-azure/lib/azapi/providers-azapi/resource-action/index.js +221 -46
  364. package/lib/core-azure/lib/azapi/providers-azapi/update-resource/index.d.ts +162 -149
  365. package/lib/core-azure/lib/azapi/providers-azapi/update-resource/index.js +249 -50
  366. package/lib/core-azure/lib/azapi/resource-schema-validator.d.ts +118 -0
  367. package/lib/core-azure/lib/azapi/resource-schema-validator.js +236 -0
  368. package/lib/core-azure/lib/azapi/resource-version-manager.d.ts +103 -0
  369. package/lib/core-azure/lib/azapi/resource-version-manager.js +168 -0
  370. package/lib/core-azure/lib/azapi/schema-mapper/schema-mapper.js +13 -6
  371. package/lib/core-azure/lib/index.d.ts +2 -2
  372. package/lib/core-azure/lib/index.js +5 -5
  373. package/lib/core-azure/lib/version-manager/api-version-manager.js +1 -1
  374. package/lib/core-azure/lib/version-manager/interfaces/version-interfaces.js +7 -7
  375. package/lib/index.d.ts +56 -0
  376. package/lib/index.js +59 -2
  377. package/lib/testing/index.d.ts +92 -2
  378. package/lib/testing/index.js +258 -18
  379. package/lib/testing/lib/cleanup.d.ts +230 -0
  380. package/lib/testing/lib/cleanup.js +338 -0
  381. package/lib/testing/lib/metadata.d.ts +151 -0
  382. package/lib/testing/lib/metadata.js +183 -0
  383. package/lib/testing/lib/naming.d.ts +96 -0
  384. package/lib/testing/lib/naming.js +336 -0
  385. package/node_modules/uuid/LICENSE.md +9 -0
  386. package/node_modules/uuid/README.md +510 -0
  387. package/node_modules/uuid/dist/cjs/index.d.ts +15 -0
  388. package/node_modules/uuid/dist/cjs/index.js +31 -0
  389. package/node_modules/uuid/dist/cjs/max.d.ts +2 -0
  390. package/node_modules/uuid/dist/cjs/max.js +3 -0
  391. package/node_modules/uuid/dist/cjs/md5.d.ts +4 -0
  392. package/node_modules/uuid/dist/cjs/md5.js +13 -0
  393. package/node_modules/uuid/dist/cjs/native.d.ts +6 -0
  394. package/node_modules/uuid/dist/cjs/native.js +4 -0
  395. package/node_modules/uuid/dist/cjs/nil.d.ts +2 -0
  396. package/node_modules/uuid/dist/cjs/nil.js +3 -0
  397. package/node_modules/uuid/dist/cjs/package.json +1 -0
  398. package/node_modules/uuid/dist/cjs/parse.d.ts +2 -0
  399. package/node_modules/uuid/dist/cjs/parse.js +11 -0
  400. package/node_modules/uuid/dist/cjs/regex.d.ts +2 -0
  401. package/node_modules/uuid/dist/cjs/regex.js +3 -0
  402. package/node_modules/uuid/dist/cjs/rng.d.ts +1 -0
  403. package/node_modules/uuid/dist/cjs/rng.js +13 -0
  404. package/node_modules/uuid/dist/cjs/sha1.d.ts +4 -0
  405. package/node_modules/uuid/dist/cjs/sha1.js +13 -0
  406. package/node_modules/uuid/dist/cjs/stringify.d.ts +3 -0
  407. package/node_modules/uuid/dist/cjs/stringify.js +39 -0
  408. package/node_modules/uuid/dist/cjs/types.d.ts +21 -0
  409. package/node_modules/uuid/dist/cjs/types.js +2 -0
  410. package/node_modules/uuid/dist/cjs/uuid-bin.d.ts +1 -0
  411. package/node_modules/uuid/dist/cjs/uuid-bin.js +72 -0
  412. package/node_modules/uuid/dist/cjs/v1.d.ts +11 -0
  413. package/node_modules/uuid/dist/cjs/v1.js +87 -0
  414. package/node_modules/uuid/dist/cjs/v1ToV6.d.ts +2 -0
  415. package/node_modules/uuid/dist/cjs/v1ToV6.js +13 -0
  416. package/node_modules/uuid/dist/cjs/v3.d.ts +9 -0
  417. package/node_modules/uuid/dist/cjs/v3.js +14 -0
  418. package/node_modules/uuid/dist/cjs/v35.d.ts +7 -0
  419. package/node_modules/uuid/dist/cjs/v35.js +41 -0
  420. package/node_modules/uuid/dist/cjs/v4.d.ts +4 -0
  421. package/node_modules/uuid/dist/cjs/v4.js +29 -0
  422. package/node_modules/uuid/dist/cjs/v5.d.ts +9 -0
  423. package/node_modules/uuid/dist/cjs/v5.js +14 -0
  424. package/node_modules/uuid/dist/cjs/v6.d.ts +4 -0
  425. package/node_modules/uuid/dist/cjs/v6.js +19 -0
  426. package/node_modules/uuid/dist/cjs/v6ToV1.d.ts +2 -0
  427. package/node_modules/uuid/dist/cjs/v6ToV1.js +13 -0
  428. package/node_modules/uuid/dist/cjs/v7.d.ts +9 -0
  429. package/node_modules/uuid/dist/cjs/v7.js +69 -0
  430. package/node_modules/uuid/dist/cjs/validate.d.ts +2 -0
  431. package/node_modules/uuid/dist/cjs/validate.js +7 -0
  432. package/node_modules/uuid/dist/cjs/version.d.ts +2 -0
  433. package/node_modules/uuid/dist/cjs/version.js +10 -0
  434. package/node_modules/uuid/dist/cjs-browser/index.d.ts +15 -0
  435. package/node_modules/uuid/dist/cjs-browser/index.js +31 -0
  436. package/node_modules/uuid/dist/cjs-browser/max.d.ts +2 -0
  437. package/node_modules/uuid/dist/cjs-browser/max.js +3 -0
  438. package/node_modules/uuid/dist/cjs-browser/md5.d.ts +2 -0
  439. package/node_modules/uuid/dist/cjs-browser/md5.js +137 -0
  440. package/node_modules/uuid/dist/cjs-browser/native.d.ts +4 -0
  441. package/node_modules/uuid/dist/cjs-browser/native.js +4 -0
  442. package/node_modules/uuid/dist/cjs-browser/nil.d.ts +2 -0
  443. package/node_modules/uuid/dist/cjs-browser/nil.js +3 -0
  444. package/node_modules/uuid/dist/cjs-browser/package.json +1 -0
  445. package/node_modules/uuid/dist/cjs-browser/parse.d.ts +2 -0
  446. package/node_modules/uuid/dist/cjs-browser/parse.js +11 -0
  447. package/node_modules/uuid/dist/cjs-browser/regex.d.ts +2 -0
  448. package/node_modules/uuid/dist/cjs-browser/regex.js +3 -0
  449. package/node_modules/uuid/dist/cjs-browser/rng.d.ts +1 -0
  450. package/node_modules/uuid/dist/cjs-browser/rng.js +14 -0
  451. package/node_modules/uuid/dist/cjs-browser/sha1.d.ts +2 -0
  452. package/node_modules/uuid/dist/cjs-browser/sha1.js +72 -0
  453. package/node_modules/uuid/dist/cjs-browser/stringify.d.ts +3 -0
  454. package/node_modules/uuid/dist/cjs-browser/stringify.js +39 -0
  455. package/node_modules/uuid/dist/cjs-browser/types.d.ts +21 -0
  456. package/node_modules/uuid/dist/cjs-browser/types.js +2 -0
  457. package/node_modules/uuid/dist/cjs-browser/uuid-bin.d.ts +1 -0
  458. package/node_modules/uuid/dist/cjs-browser/uuid-bin.js +72 -0
  459. package/node_modules/uuid/dist/cjs-browser/v1.d.ts +11 -0
  460. package/node_modules/uuid/dist/cjs-browser/v1.js +87 -0
  461. package/node_modules/uuid/dist/cjs-browser/v1ToV6.d.ts +2 -0
  462. package/node_modules/uuid/dist/cjs-browser/v1ToV6.js +13 -0
  463. package/node_modules/uuid/dist/cjs-browser/v3.d.ts +9 -0
  464. package/node_modules/uuid/dist/cjs-browser/v3.js +14 -0
  465. package/node_modules/uuid/dist/cjs-browser/v35.d.ts +7 -0
  466. package/node_modules/uuid/dist/cjs-browser/v35.js +41 -0
  467. package/node_modules/uuid/dist/cjs-browser/v4.d.ts +4 -0
  468. package/node_modules/uuid/dist/cjs-browser/v4.js +29 -0
  469. package/node_modules/uuid/dist/cjs-browser/v5.d.ts +9 -0
  470. package/node_modules/uuid/dist/cjs-browser/v5.js +14 -0
  471. package/node_modules/uuid/dist/cjs-browser/v6.d.ts +4 -0
  472. package/node_modules/uuid/dist/cjs-browser/v6.js +19 -0
  473. package/node_modules/uuid/dist/cjs-browser/v6ToV1.d.ts +2 -0
  474. package/node_modules/uuid/dist/cjs-browser/v6ToV1.js +13 -0
  475. package/node_modules/uuid/dist/cjs-browser/v7.d.ts +9 -0
  476. package/node_modules/uuid/dist/cjs-browser/v7.js +69 -0
  477. package/node_modules/uuid/dist/cjs-browser/validate.d.ts +2 -0
  478. package/node_modules/uuid/dist/cjs-browser/validate.js +7 -0
  479. package/node_modules/uuid/dist/cjs-browser/version.d.ts +2 -0
  480. package/node_modules/uuid/dist/cjs-browser/version.js +10 -0
  481. package/node_modules/uuid/dist/esm/bin/uuid +2 -0
  482. package/node_modules/uuid/dist/esm/index.d.ts +15 -0
  483. package/node_modules/uuid/dist/esm/index.js +14 -0
  484. package/node_modules/uuid/dist/esm/max.d.ts +2 -0
  485. package/node_modules/uuid/dist/esm/max.js +1 -0
  486. package/node_modules/uuid/dist/esm/md5.d.ts +4 -0
  487. package/node_modules/uuid/dist/esm/md5.js +11 -0
  488. package/node_modules/uuid/dist/esm/native.d.ts +6 -0
  489. package/node_modules/uuid/dist/esm/native.js +2 -0
  490. package/node_modules/uuid/dist/esm/nil.d.ts +2 -0
  491. package/node_modules/uuid/dist/esm/nil.js +1 -0
  492. package/node_modules/uuid/dist/esm/parse.d.ts +2 -0
  493. package/node_modules/uuid/dist/esm/parse.js +9 -0
  494. package/node_modules/uuid/dist/esm/regex.d.ts +2 -0
  495. package/node_modules/uuid/dist/esm/regex.js +1 -0
  496. package/node_modules/uuid/dist/esm/rng.d.ts +1 -0
  497. package/node_modules/uuid/dist/esm/rng.js +10 -0
  498. package/node_modules/uuid/dist/esm/sha1.d.ts +4 -0
  499. package/node_modules/uuid/dist/esm/sha1.js +11 -0
  500. package/node_modules/uuid/dist/esm/stringify.d.ts +3 -0
  501. package/node_modules/uuid/dist/esm/stringify.js +35 -0
  502. package/node_modules/uuid/dist/esm/types.d.ts +21 -0
  503. package/node_modules/uuid/dist/esm/types.js +1 -0
  504. package/node_modules/uuid/dist/esm/uuid-bin.d.ts +1 -0
  505. package/node_modules/uuid/dist/esm/uuid-bin.js +70 -0
  506. package/node_modules/uuid/dist/esm/v1.d.ts +11 -0
  507. package/node_modules/uuid/dist/esm/v1.js +83 -0
  508. package/node_modules/uuid/dist/esm/v1ToV6.d.ts +2 -0
  509. package/node_modules/uuid/dist/esm/v1ToV6.js +10 -0
  510. package/node_modules/uuid/dist/esm/v3.d.ts +9 -0
  511. package/node_modules/uuid/dist/esm/v3.js +9 -0
  512. package/node_modules/uuid/dist/esm/v35.d.ts +7 -0
  513. package/node_modules/uuid/dist/esm/v35.js +36 -0
  514. package/node_modules/uuid/dist/esm/v4.d.ts +4 -0
  515. package/node_modules/uuid/dist/esm/v4.js +27 -0
  516. package/node_modules/uuid/dist/esm/v5.d.ts +9 -0
  517. package/node_modules/uuid/dist/esm/v5.js +9 -0
  518. package/node_modules/uuid/dist/esm/v6.d.ts +4 -0
  519. package/node_modules/uuid/dist/esm/v6.js +17 -0
  520. package/node_modules/uuid/dist/esm/v6ToV1.d.ts +2 -0
  521. package/node_modules/uuid/dist/esm/v6ToV1.js +10 -0
  522. package/node_modules/uuid/dist/esm/v7.d.ts +9 -0
  523. package/node_modules/uuid/dist/esm/v7.js +65 -0
  524. package/node_modules/uuid/dist/esm/validate.d.ts +2 -0
  525. package/node_modules/uuid/dist/esm/validate.js +5 -0
  526. package/node_modules/uuid/dist/esm/version.d.ts +2 -0
  527. package/node_modules/uuid/dist/esm/version.js +8 -0
  528. package/node_modules/uuid/dist/esm-browser/index.d.ts +15 -0
  529. package/node_modules/uuid/dist/esm-browser/index.js +14 -0
  530. package/node_modules/uuid/dist/esm-browser/max.d.ts +2 -0
  531. package/node_modules/uuid/dist/esm-browser/max.js +1 -0
  532. package/node_modules/uuid/dist/esm-browser/md5.d.ts +2 -0
  533. package/node_modules/uuid/dist/esm-browser/md5.js +135 -0
  534. package/node_modules/uuid/dist/esm-browser/native.d.ts +4 -0
  535. package/node_modules/uuid/dist/esm-browser/native.js +2 -0
  536. package/node_modules/uuid/dist/esm-browser/nil.d.ts +2 -0
  537. package/node_modules/uuid/dist/esm-browser/nil.js +1 -0
  538. package/node_modules/uuid/dist/esm-browser/parse.d.ts +2 -0
  539. package/node_modules/uuid/dist/esm-browser/parse.js +9 -0
  540. package/node_modules/uuid/dist/esm-browser/regex.d.ts +2 -0
  541. package/node_modules/uuid/dist/esm-browser/regex.js +1 -0
  542. package/node_modules/uuid/dist/esm-browser/rng.d.ts +1 -0
  543. package/node_modules/uuid/dist/esm-browser/rng.js +11 -0
  544. package/node_modules/uuid/dist/esm-browser/sha1.d.ts +2 -0
  545. package/node_modules/uuid/dist/esm-browser/sha1.js +70 -0
  546. package/node_modules/uuid/dist/esm-browser/stringify.d.ts +3 -0
  547. package/node_modules/uuid/dist/esm-browser/stringify.js +35 -0
  548. package/node_modules/uuid/dist/esm-browser/types.d.ts +21 -0
  549. package/node_modules/uuid/dist/esm-browser/types.js +1 -0
  550. package/node_modules/uuid/dist/esm-browser/uuid-bin.d.ts +1 -0
  551. package/node_modules/uuid/dist/esm-browser/uuid-bin.js +70 -0
  552. package/node_modules/uuid/dist/esm-browser/v1.d.ts +11 -0
  553. package/node_modules/uuid/dist/esm-browser/v1.js +83 -0
  554. package/node_modules/uuid/dist/esm-browser/v1ToV6.d.ts +2 -0
  555. package/node_modules/uuid/dist/esm-browser/v1ToV6.js +10 -0
  556. package/node_modules/uuid/dist/esm-browser/v3.d.ts +9 -0
  557. package/node_modules/uuid/dist/esm-browser/v3.js +9 -0
  558. package/node_modules/uuid/dist/esm-browser/v35.d.ts +7 -0
  559. package/node_modules/uuid/dist/esm-browser/v35.js +36 -0
  560. package/node_modules/uuid/dist/esm-browser/v4.d.ts +4 -0
  561. package/node_modules/uuid/dist/esm-browser/v4.js +27 -0
  562. package/node_modules/uuid/dist/esm-browser/v5.d.ts +9 -0
  563. package/node_modules/uuid/dist/esm-browser/v5.js +9 -0
  564. package/node_modules/uuid/dist/esm-browser/v6.d.ts +4 -0
  565. package/node_modules/uuid/dist/esm-browser/v6.js +17 -0
  566. package/node_modules/uuid/dist/esm-browser/v6ToV1.d.ts +2 -0
  567. package/node_modules/uuid/dist/esm-browser/v6ToV1.js +10 -0
  568. package/node_modules/uuid/dist/esm-browser/v7.d.ts +9 -0
  569. package/node_modules/uuid/dist/esm-browser/v7.js +65 -0
  570. package/node_modules/uuid/dist/esm-browser/validate.d.ts +2 -0
  571. package/node_modules/uuid/dist/esm-browser/validate.js +5 -0
  572. package/node_modules/uuid/dist/esm-browser/version.d.ts +2 -0
  573. package/node_modules/uuid/dist/esm-browser/version.js +8 -0
  574. package/node_modules/uuid/package.json +132 -0
  575. package/package.json +17 -12
  576. package/scripts/cleanup-test-resources.ts +387 -0
  577. package/scripts/generate-index.js +25 -8
@@ -1,9 +1,10 @@
1
1
  "use strict";
2
- // https://registry.terraform.io/providers/azure/azapi/2.7.0/docs
3
- // generated from terraform resource schema
2
+ var _a;
4
3
  Object.defineProperty(exports, "__esModule", { value: true });
5
4
  exports.AzapiProvider = void 0;
6
5
  exports.azapiProviderEndpointToTerraform = azapiProviderEndpointToTerraform;
6
+ exports.azapiProviderEndpointToHclTerraform = azapiProviderEndpointToHclTerraform;
7
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
7
8
  const cdktf = require("cdktf");
8
9
  function azapiProviderEndpointToTerraform(struct) {
9
10
  if (!cdktf.canInspect(struct) || cdktf.Tokenization.isResolvable(struct)) {
@@ -18,29 +19,72 @@ function azapiProviderEndpointToTerraform(struct) {
18
19
  resource_manager_endpoint: cdktf.stringToTerraform(struct.resourceManagerEndpoint),
19
20
  };
20
21
  }
22
+ function azapiProviderEndpointToHclTerraform(struct) {
23
+ if (!cdktf.canInspect(struct) || cdktf.Tokenization.isResolvable(struct)) {
24
+ return struct;
25
+ }
26
+ if (cdktf.isComplexElement(struct)) {
27
+ throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
28
+ }
29
+ const attrs = {
30
+ active_directory_authority_host: {
31
+ value: cdktf.stringToHclTerraform(struct.activeDirectoryAuthorityHost),
32
+ isBlock: false,
33
+ type: "simple",
34
+ storageClassType: "string",
35
+ },
36
+ resource_manager_audience: {
37
+ value: cdktf.stringToHclTerraform(struct.resourceManagerAudience),
38
+ isBlock: false,
39
+ type: "simple",
40
+ storageClassType: "string",
41
+ },
42
+ resource_manager_endpoint: {
43
+ value: cdktf.stringToHclTerraform(struct.resourceManagerEndpoint),
44
+ isBlock: false,
45
+ type: "simple",
46
+ storageClassType: "string",
47
+ },
48
+ };
49
+ // remove undefined attributes
50
+ return Object.fromEntries(Object.entries(attrs).filter(([_, value]) => value !== undefined && value.value !== undefined));
51
+ }
21
52
  /**
22
- * Represents a {@link https://registry.terraform.io/providers/azure/azapi/2.7.0/docs azapi}
23
- */
53
+ * Represents a {@link https://registry.terraform.io/providers/azure/azapi/2.7.0/docs azapi}
54
+ */
24
55
  class AzapiProvider extends cdktf.TerraformProvider {
56
+ // ==============
57
+ // STATIC Methods
58
+ // ==============
59
+ /**
60
+ * Generates CDKTF code for importing a AzapiProvider resource upon running "cdktf plan <stack-name>"
61
+ * @param scope The scope in which to define this construct
62
+ * @param importToId The construct id used in the generated config for the AzapiProvider to import
63
+ * @param importFromId The id of the existing AzapiProvider that should be imported. Refer to the {@link https://registry.terraform.io/providers/azure/azapi/2.7.0/docs#import import section} in the documentation of this resource for the id to use
64
+ * @param provider? Optional instance of the provider where the AzapiProvider to import is found
65
+ */
66
+ static generateConfigForImport(scope, importToId, importFromId, provider) {
67
+ return new cdktf.ImportableResource(scope, importToId, { terraformResourceType: "azapi", importId: importFromId, provider });
68
+ }
25
69
  // ===========
26
70
  // INITIALIZER
27
71
  // ===========
28
72
  /**
29
- * Create a new {@link https://registry.terraform.io/providers/azure/azapi/2.7.0/docs azapi} Resource
30
- *
31
- * @param scope The scope in which to define this construct
32
- * @param id The scoped construct ID. Must be unique amongst siblings in the same scope
33
- * @param options AzapiProviderConfig = {}
34
- */
73
+ * Create a new {@link https://registry.terraform.io/providers/azure/azapi/2.7.0/docs azapi} Resource
74
+ *
75
+ * @param scope The scope in which to define this construct
76
+ * @param id The scoped construct ID. Must be unique amongst siblings in the same scope
77
+ * @param options AzapiProviderConfig = {}
78
+ */
35
79
  constructor(scope, id, config = {}) {
36
80
  super(scope, id, {
37
- terraformResourceType: "azapi",
81
+ terraformResourceType: 'azapi',
38
82
  terraformGeneratorMetadata: {
39
- providerName: "azapi",
40
- providerVersion: "2.7.0",
41
- providerVersionConstraint: "~> 2.7.0",
83
+ providerName: 'azapi',
84
+ providerVersion: '2.7.0',
85
+ providerVersionConstraint: '~> 2.7.0'
42
86
  },
43
- terraformProviderSource: "Azure/azapi",
87
+ terraformProviderSource: 'Azure/azapi'
44
88
  });
45
89
  this._auxiliaryTenantIds = config.auxiliaryTenantIds;
46
90
  this._clientCertificate = config.clientCertificate;
@@ -575,10 +619,228 @@ class AzapiProvider extends cdktf.TerraformProvider {
575
619
  alias: cdktf.stringToTerraform(this._alias),
576
620
  };
577
621
  }
622
+ synthesizeHclAttributes() {
623
+ const attrs = {
624
+ auxiliary_tenant_ids: {
625
+ value: cdktf.listMapperHcl(cdktf.stringToHclTerraform, false)(this._auxiliaryTenantIds),
626
+ isBlock: false,
627
+ type: "list",
628
+ storageClassType: "stringList",
629
+ },
630
+ client_certificate: {
631
+ value: cdktf.stringToHclTerraform(this._clientCertificate),
632
+ isBlock: false,
633
+ type: "simple",
634
+ storageClassType: "string",
635
+ },
636
+ client_certificate_password: {
637
+ value: cdktf.stringToHclTerraform(this._clientCertificatePassword),
638
+ isBlock: false,
639
+ type: "simple",
640
+ storageClassType: "string",
641
+ },
642
+ client_certificate_path: {
643
+ value: cdktf.stringToHclTerraform(this._clientCertificatePath),
644
+ isBlock: false,
645
+ type: "simple",
646
+ storageClassType: "string",
647
+ },
648
+ client_id: {
649
+ value: cdktf.stringToHclTerraform(this._clientId),
650
+ isBlock: false,
651
+ type: "simple",
652
+ storageClassType: "string",
653
+ },
654
+ client_id_file_path: {
655
+ value: cdktf.stringToHclTerraform(this._clientIdFilePath),
656
+ isBlock: false,
657
+ type: "simple",
658
+ storageClassType: "string",
659
+ },
660
+ client_secret: {
661
+ value: cdktf.stringToHclTerraform(this._clientSecret),
662
+ isBlock: false,
663
+ type: "simple",
664
+ storageClassType: "string",
665
+ },
666
+ client_secret_file_path: {
667
+ value: cdktf.stringToHclTerraform(this._clientSecretFilePath),
668
+ isBlock: false,
669
+ type: "simple",
670
+ storageClassType: "string",
671
+ },
672
+ custom_correlation_request_id: {
673
+ value: cdktf.stringToHclTerraform(this._customCorrelationRequestId),
674
+ isBlock: false,
675
+ type: "simple",
676
+ storageClassType: "string",
677
+ },
678
+ default_location: {
679
+ value: cdktf.stringToHclTerraform(this._defaultLocation),
680
+ isBlock: false,
681
+ type: "simple",
682
+ storageClassType: "string",
683
+ },
684
+ default_name: {
685
+ value: cdktf.stringToHclTerraform(this._defaultName),
686
+ isBlock: false,
687
+ type: "simple",
688
+ storageClassType: "string",
689
+ },
690
+ default_tags: {
691
+ value: cdktf.hashMapperHcl(cdktf.stringToHclTerraform)(this._defaultTags),
692
+ isBlock: false,
693
+ type: "map",
694
+ storageClassType: "stringMap",
695
+ },
696
+ disable_correlation_request_id: {
697
+ value: cdktf.booleanToHclTerraform(this._disableCorrelationRequestId),
698
+ isBlock: false,
699
+ type: "simple",
700
+ storageClassType: "boolean",
701
+ },
702
+ disable_default_output: {
703
+ value: cdktf.booleanToHclTerraform(this._disableDefaultOutput),
704
+ isBlock: false,
705
+ type: "simple",
706
+ storageClassType: "boolean",
707
+ },
708
+ disable_instance_discovery: {
709
+ value: cdktf.booleanToHclTerraform(this._disableInstanceDiscovery),
710
+ isBlock: false,
711
+ type: "simple",
712
+ storageClassType: "boolean",
713
+ },
714
+ disable_terraform_partner_id: {
715
+ value: cdktf.booleanToHclTerraform(this._disableTerraformPartnerId),
716
+ isBlock: false,
717
+ type: "simple",
718
+ storageClassType: "boolean",
719
+ },
720
+ enable_preflight: {
721
+ value: cdktf.booleanToHclTerraform(this._enablePreflight),
722
+ isBlock: false,
723
+ type: "simple",
724
+ storageClassType: "boolean",
725
+ },
726
+ endpoint: {
727
+ value: cdktf.listMapperHcl(azapiProviderEndpointToHclTerraform, false)(this._endpoint),
728
+ isBlock: true,
729
+ type: "list",
730
+ storageClassType: "AzapiProviderEndpointList",
731
+ },
732
+ environment: {
733
+ value: cdktf.stringToHclTerraform(this._environment),
734
+ isBlock: false,
735
+ type: "simple",
736
+ storageClassType: "string",
737
+ },
738
+ ignore_no_op_changes: {
739
+ value: cdktf.booleanToHclTerraform(this._ignoreNoOpChanges),
740
+ isBlock: false,
741
+ type: "simple",
742
+ storageClassType: "boolean",
743
+ },
744
+ maximum_busy_retry_attempts: {
745
+ value: cdktf.numberToHclTerraform(this._maximumBusyRetryAttempts),
746
+ isBlock: false,
747
+ type: "simple",
748
+ storageClassType: "number",
749
+ },
750
+ oidc_azure_service_connection_id: {
751
+ value: cdktf.stringToHclTerraform(this._oidcAzureServiceConnectionId),
752
+ isBlock: false,
753
+ type: "simple",
754
+ storageClassType: "string",
755
+ },
756
+ oidc_request_token: {
757
+ value: cdktf.stringToHclTerraform(this._oidcRequestToken),
758
+ isBlock: false,
759
+ type: "simple",
760
+ storageClassType: "string",
761
+ },
762
+ oidc_request_url: {
763
+ value: cdktf.stringToHclTerraform(this._oidcRequestUrl),
764
+ isBlock: false,
765
+ type: "simple",
766
+ storageClassType: "string",
767
+ },
768
+ oidc_token: {
769
+ value: cdktf.stringToHclTerraform(this._oidcToken),
770
+ isBlock: false,
771
+ type: "simple",
772
+ storageClassType: "string",
773
+ },
774
+ oidc_token_file_path: {
775
+ value: cdktf.stringToHclTerraform(this._oidcTokenFilePath),
776
+ isBlock: false,
777
+ type: "simple",
778
+ storageClassType: "string",
779
+ },
780
+ partner_id: {
781
+ value: cdktf.stringToHclTerraform(this._partnerId),
782
+ isBlock: false,
783
+ type: "simple",
784
+ storageClassType: "string",
785
+ },
786
+ skip_provider_registration: {
787
+ value: cdktf.booleanToHclTerraform(this._skipProviderRegistration),
788
+ isBlock: false,
789
+ type: "simple",
790
+ storageClassType: "boolean",
791
+ },
792
+ subscription_id: {
793
+ value: cdktf.stringToHclTerraform(this._subscriptionId),
794
+ isBlock: false,
795
+ type: "simple",
796
+ storageClassType: "string",
797
+ },
798
+ tenant_id: {
799
+ value: cdktf.stringToHclTerraform(this._tenantId),
800
+ isBlock: false,
801
+ type: "simple",
802
+ storageClassType: "string",
803
+ },
804
+ use_aks_workload_identity: {
805
+ value: cdktf.booleanToHclTerraform(this._useAksWorkloadIdentity),
806
+ isBlock: false,
807
+ type: "simple",
808
+ storageClassType: "boolean",
809
+ },
810
+ use_cli: {
811
+ value: cdktf.booleanToHclTerraform(this._useCli),
812
+ isBlock: false,
813
+ type: "simple",
814
+ storageClassType: "boolean",
815
+ },
816
+ use_msi: {
817
+ value: cdktf.booleanToHclTerraform(this._useMsi),
818
+ isBlock: false,
819
+ type: "simple",
820
+ storageClassType: "boolean",
821
+ },
822
+ use_oidc: {
823
+ value: cdktf.booleanToHclTerraform(this._useOidc),
824
+ isBlock: false,
825
+ type: "simple",
826
+ storageClassType: "boolean",
827
+ },
828
+ alias: {
829
+ value: cdktf.stringToHclTerraform(this._alias),
830
+ isBlock: false,
831
+ type: "simple",
832
+ storageClassType: "string",
833
+ },
834
+ };
835
+ // remove undefined attributes
836
+ return Object.fromEntries(Object.entries(attrs).filter(([_, value]) => value !== undefined && value.value !== undefined));
837
+ }
578
838
  }
579
839
  exports.AzapiProvider = AzapiProvider;
840
+ _a = JSII_RTTI_SYMBOL_1;
841
+ AzapiProvider[_a] = { fqn: "@microsoft/terraform-cdk-constructs.AzapiProvider", version: "1.3.0" };
580
842
  // =================
581
843
  // STATIC PROPERTIES
582
844
  // =================
583
845
  AzapiProvider.tfResourceType = "azapi";
584
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvY29yZS1henVyZS9saWIvYXphcGkvcHJvdmlkZXJzLWF6YXBpL3Byb3ZpZGVyL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxpRUFBaUU7QUFDakUsMkNBQTJDOzs7QUFnUDNDLDRFQXNCQztBQXBRRCwrQkFBK0I7QUE4Ty9CLFNBQWdCLGdDQUFnQyxDQUM5QyxNQUFrRDtJQUVsRCxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQ3pFLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFDRCxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQ25DLE1BQU0sSUFBSSxLQUFLLENBQ2Isb0hBQW9ILENBQ3JILENBQUM7SUFDSixDQUFDO0lBQ0QsT0FBTztRQUNMLCtCQUErQixFQUFFLEtBQUssQ0FBQyxpQkFBaUIsQ0FDdEQsTUFBTyxDQUFDLDRCQUE0QixDQUNyQztRQUNELHlCQUF5QixFQUFFLEtBQUssQ0FBQyxpQkFBaUIsQ0FDaEQsTUFBTyxDQUFDLHVCQUF1QixDQUNoQztRQUNELHlCQUF5QixFQUFFLEtBQUssQ0FBQyxpQkFBaUIsQ0FDaEQsTUFBTyxDQUFDLHVCQUF1QixDQUNoQztLQUNGLENBQUM7QUFDSixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFhLGFBQWMsU0FBUSxLQUFLLENBQUMsaUJBQWlCO0lBTXhELGNBQWM7SUFDZCxjQUFjO0lBQ2QsY0FBYztJQUVkOzs7Ozs7T0FNRztJQUNILFlBQ0UsS0FBZ0IsRUFDaEIsRUFBVSxFQUNWLFNBQThCLEVBQUU7UUFFaEMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUU7WUFDZixxQkFBcUIsRUFBRSxPQUFP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QW9CO0FBQ0csNEJBQWMsR0FBRyxPQUFPLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvYXp1cmUvYXphcGkvMi43LjAvZG9jc1xuLy8gZ2VuZXJhdGVkIGZyb20gdGVycmFmb3JtIHJlc291cmNlIHNjaGVtYVxuXG5pbXBvcnQgKiBhcyBjZGt0ZiBmcm9tIFwiY2RrdGZcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5cbi8vIENvbmZpZ3VyYXRpb25cblxuZXhwb3J0IGludGVyZmFjZSBBemFwaVByb3ZpZGVyQ29uZmlnIHtcbiAgLyoqXG4gICAqIExpc3Qgb2YgYXV4aWxpYXJ5IFRlbmFudCBJRHMgcmVxdWlyZWQgZm9yIG11bHRpLXRlbmFuY3kgYW5kIGNyb3NzLXRlbmFudCBzY2VuYXJpb3MuIFRoaXMgY2FuIGFsc28gYmUgc291cmNlZCBmcm9tIHRoZSBgQVJNX0FVWElMSUFSWV9URU5BTlRfSURTYCBFbnZpcm9ubWVudCBWYXJpYWJsZS5cbiAgICpcbiAgICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvYXp1cmUvYXphcGkvMi43LjAvZG9jcyNhdXhpbGlhcnlfdGVuYW50X2lkcyBBemFwaVByb3ZpZGVyI2F1eGlsaWFyeV90ZW5hbnRfaWRzfVxuICAgKi9cbiAgcmVhZG9ubHkgYXV4aWxpYXJ5VGVuYW50SWRzPzogc3RyaW5nW107XG4gIC8qKlxuICAgKiBBIGJhc2U2NC1lbmNvZGVkIFBLQ1MjMTIgYnVuZGxlIHRvIGJlIHVzZWQgYXMgdGhlIGNsaWVudCBjZXJ0aWZpY2F0ZSBmb3IgYXV0aGVudGljYXRpb24uIFRoaXMgY2FuIGFsc28gYmUgc291cmNlZCBmcm9tIHRoZSBgQVJNX0NMSUVOVF9DRVJUSUZJQ0FURWAgZW52aXJvbm1lbnQgdmFyaWFibGUuXG4gICAqXG4gICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2F6dXJlL2F6YXBpLzIuNy4wL2RvY3MjY2xpZW50X2NlcnRpZmljYXRlIEF6YXBpUHJvdmlkZXIjY2xpZW50X2NlcnRpZmljYXRlfVxuICAgKi9cbiAgcmVhZG9ubHkgY2xpZW50Q2VydGlmaWNhdGU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgcGFzc3dvcmQgYXNzb2NpYXRlZCB3aXRoIHRoZSBDbGllbnQgQ2VydGlmaWNhdGUuIFRoaXMgY2FuIGFsc28gYmUgc291cmNlZCBmcm9tIHRoZSBgQVJNX0NMSUVOVF9DRVJUSUZJQ0FURV9QQVNTV09SRGAgRW52aXJvbm1lbnQgVmFyaWFibGUuXG4gICAqXG4gICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2F6dXJlL2F6YXBpLzIuNy4wL2RvY3MjY2xpZW50X2NlcnRpZmljYXRlX3Bhc3N3b3JkIEF6YXBpUHJvdmlkZXIjY2xpZW50X2NlcnRpZmljYXRlX3Bhc3N3b3JkfVxuICAgKi9cbiAgcmVhZG9ubHkgY2xpZW50Q2VydGlmaWNhdGVQYXNzd29yZD86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBwYXRoIHRvIHRoZSBDbGllbnQgQ2VydGlmaWNhdGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBTZXJ2aWNlIFByaW5jaXBhbCB3aGljaCBzaG91bGQgYmUgdXNlZC4gVGhpcyBjYW4gYWxzbyBiZSBzb3VyY2VkIGZyb20gdGhlIGBBUk1fQ0xJRU5UX0NFUlRJRklDQVRFX1BBVEhgIEVudmlyb25tZW50IFZhcmlhYmxlLlxuICAgKlxuICAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9henVyZS9hemFwaS8yLjcuMC9kb2NzI2NsaWVudF9jZXJ0aWZpY2F0ZV9wYXRoIEF6YXBpUHJvdmlkZXIjY2xpZW50X2NlcnRpZmljYXRlX3BhdGh9XG4gICAqL1xuICByZWFkb25seSBjbGllbnRDZXJ0aWZpY2F0ZVBhdGg/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgQ2xpZW50IElEIHdoaWNoIHNob3VsZCBiZSB1c2VkLiBUaGlzIGNhbiBhbHNvIGJlIHNvdXJjZWQgZnJvbSB0aGUgYEFSTV9DTElFTlRfSURgLCBgQVpVUkVfQ0xJRU5UX0lEYCBFbnZpcm9ubWVudCBWYXJpYWJsZS5cbiAgICpcbiAgICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvYXp1cmUvYXphcGkvMi43LjAvZG9jcyNjbGllbnRfaWQgQXphcGlQcm92aWRlciNjbGllbnRfaWR9XG4gICAqL1xuICByZWFkb25seSBjbGllbnRJZD86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBwYXRoIHRvIGEgZmlsZSBjb250YWluaW5nIHRoZSBDbGllbnQgSUQgd2hpY2ggc2hvdWxkIGJlIHVzZWQuIFRoaXMgY2FuIGFsc28gYmUgc291cmNlZCBmcm9tIHRoZSBgQVJNX0NMSUVOVF9JRF9GSUxFX1BBVEhgIEVudmlyb25tZW50IFZhcmlhYmxlLlxuICAgKlxuICAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9henVyZS9hemFwaS8yLjcuMC9kb2NzI2NsaWVudF9pZF9maWxlX3BhdGggQXphcGlQcm92aWRlciNjbGllbnRfaWRfZmlsZV9wYXRofVxuICAgKi9cbiAgcmVhZG9ubHkgY2xpZW50SWRGaWxlUGF0aD86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBDbGllbnQgU2VjcmV0IHdoaWNoIHNob3VsZCBiZSB1c2VkLiBUaGlzIGNhbiBhbHNvIGJlIHNvdXJjZWQgZnJvbSB0aGUgYEFSTV9DTElFTlRfU0VDUkVUYCBFbnZpcm9ubWVudCBWYXJpYWJsZS5cbiAgICpcbiAgICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvYXp1cmUvYXphcGkvMi43LjAvZG9jcyNjbGllbnRfc2VjcmV0IEF6YXBpUHJvdmlkZXIjY2xpZW50X3NlY3JldH1cbiAgICovXG4gIHJlYWRvbmx5IGNsaWVudFNlY3JldD86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBwYXRoIHRvIGEgZmlsZSBjb250YWluaW5nIHRoZSBDbGllbnQgU2VjcmV0IHdoaWNoIHNob3VsZCBiZSB1c2VkLiBGb3IgdXNlIFdoZW4gYXV0aGVudGljYXRpbmcgYXMgYSBTZXJ2aWNlIFByaW5jaXBhbCB1c2luZyBhIENsaWVudCBTZWNyZXQuIFRoaXMgY2FuIGFsc28gYmUgc291cmNlZCBmcm9tIHRoZSBgQVJNX0NMSUVOVF9TRUNSRVRfRklMRV9QQVRIYCBFbnZpcm9ubWVudCBWYXJpYWJsZS5cbiAgICpcbiAgICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvYXp1cmUvYXphcGkvMi43LjAvZG9jcyNjbGllbnRfc2VjcmV0X2ZpbGVfcGF0aCBBemFwaVByb3ZpZGVyI2NsaWVudF9zZWNyZXRfZmlsZV9wYXRofVxuICAgKi9cbiAgcmVhZG9ubHkgY2xpZW50U2VjcmV0RmlsZVBhdGg/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgb2YgdGhlIGB4LW1zLWNvcnJlbGF0aW9uLXJlcXVlc3QtaWRgIGhlYWRlciwgb3RoZXJ3aXNlIGFuIGF1dG8tZ2VuZXJhdGVkIFVVSUQgd2lsbCBiZSB1c2VkLiBUaGlzIGNhbiBhbHNvIGJlIHNvdXJjZWQgZnJvbSB0aGUgYEFSTV9DT1JSRUxBVElPTl9SRVFVRVNUX0lEYCBlbnZpcm9ubWVudCB2YXJpYWJsZS5cbiAgICpcbiAgICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvYXp1cmUvYXphcGkvMi43LjAvZG9jcyNjdXN0b21fY29ycmVsYXRpb25fcmVxdWVzdF9pZCBBemFwaVByb3ZpZGVyI2N1c3RvbV9jb3JyZWxhdGlvbl9yZXF1ZXN0X2lkfVxuICAgKi9cbiAgcmVhZG9ubHkgY3VzdG9tQ29ycmVsYXRpb25SZXF1ZXN0SWQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiAgVGhlIGRlZmF1bHQgQXp1cmUgUmVnaW9uIHdoZXJlIHRoZSBhenVyZSByZXNvdXJjZSBzaG91bGQgZXhpc3QuIFRoZSBgbG9jYXRpb25gIGluIGVhY2ggcmVzb3VyY2UgYmxvY2sgY2FuIG92ZXJyaWRlIHRoZSBgZGVmYXVsdF9sb2NhdGlvbmAuIENoYW5naW5nIHRoaXMgZm9yY2VzIG5ldyByZXNvdXJjZXMgdG8gYmUgY3JlYXRlZC5cbiAgICpcbiAgICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvYXp1cmUvYXphcGkvMi43LjAvZG9jcyNkZWZhdWx0X2xvY2F0aW9uIEF6YXBpUHJvdmlkZXIjZGVmYXVsdF9sb2NhdGlvbn1cbiAgICovXG4gIHJlYWRvbmx5IGRlZmF1bHRMb2NhdGlvbj86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IG5hbWUgdG8gY3JlYXRlIHRoZSBhenVyZSByZXNvdXJjZS4gVGhlIGBuYW1lYCBpbiBlYWNoIHJlc291cmNlIGJsb2NrIGNhbiBvdmVycmlkZSB0aGUgYGRlZmF1bHRfbmFtZWAuIENoYW5naW5nIHRoaXMgZm9yY2VzIG5ldyByZXNvdXJjZXMgdG8gYmUgY3JlYXRlZC5cbiAgICpcbiAgICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvYXp1cmUvYXphcGkvMi43LjAvZG9jcyNkZWZhdWx0X25hbWUgQXphcGlQcm92aWRlciNkZWZhdWx0X25hbWV9XG4gICAqL1xuICByZWFkb25seSBkZWZhdWx0TmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIEEgbWFwcGluZyBvZiB0YWdzIHdoaWNoIHNob3VsZCBiZSBhc3NpZ25lZCB0byB0aGUgYXp1cmUgcmVzb3VyY2UgYXMgZGVmYXVsdCB0YWdzLiBUaGVgdGFnc2AgaW4gZWFjaCByZXNvdXJjZSBibG9jayBjYW4gb3ZlcnJpZGUgdGhlIGBkZWZhdWx0X3RhZ3NgLlxuICAgKlxuICAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9henVyZS9hemFwaS8yLjcuMC9kb2NzI2RlZmF1bHRfdGFncyBBemFwaVByb3ZpZGVyI2RlZmF1bHRfdGFnc31cbiAgICovXG4gIHJlYWRvbmx5IGRlZmF1bHRUYWdzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcbiAgLyoqXG4gICAqIFRoaXMgd2lsbCBkaXNhYmxlIHRoZSB4LW1zLWNvcnJlbGF0aW9uLXJlcXVlc3QtaWQgaGVhZGVyLlxuICAgKlxuICAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9henVyZS9hemFwaS8yLjcuMC9kb2NzI2Rpc2FibGVfY29ycmVsYXRpb25fcmVxdWVzdF9pZCBBemFwaVByb3ZpZGVyI2Rpc2FibGVfY29ycmVsYXRpb25fcmVxdWVzdF9pZH1cbiAgICovXG4gIHJlYWRvbmx5IGRpc2FibGVDb3JyZWxhdGlvblJlcXVlc3RJZD86IGJvb2xlYW4gfCBjZGt0Zi5JUmVzb2x2YWJsZTtcbiAgLyoqXG4gICAqIERpc2FibGUgZGVmYXVsdCBvdXRwdXQuIFRoZSBkZWZhdWx0IGlzIGZhbHNlLiBXaGVuIHNldCB0byBmYWxzZSwgdGhlIHByb3ZpZGVyIHdpbGwgb3V0cHV0IHRoZSByZWFkLW9ubHkgcHJvcGVydGllcyBpZiBgcmVzcG9uc2VfZXhwb3J0X3ZhbHVlc2AgaXMgbm90IHNwZWNpZmllZCBpbiB0aGUgcmVzb3VyY2UgYmxvY2suIFdoZW4gc2V0IHRvIHRydWUsIHRoZSBwcm92aWRlciB3aWxsIGRpc2FibGUgdGhpcyBvdXRwdXQuIFRoaXMgY2FuIGFsc28gYmUgc291cmNlZCBmcm9tIHRoZSBgQVJNX0RJU0FCTEVfREVGQVVMVF9PVVRQVVRgIEVudmlyb25tZW50IFZhcmlhYmxlLlxuICAgKlxuICAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9henVyZS9hemFwaS8yLjcuMC9kb2NzI2Rpc2FibGVfZGVmYXVsdF9vdXRwdXQgQXphcGlQcm92aWRlciNkaXNhYmxlX2RlZmF1bHRfb3V0cHV0fVxuICAgKi9cbiAgcmVhZG9ubHkgZGlzYWJsZURlZmF1bHRPdXRwdXQ/OiBib29sZWFuIHwgY2RrdGYuSVJlc29sdmFibGU7XG4gIC8qKlxuICAgKiBEaXNhYmxlcyBJbnN0YW5jZSBEaXNjb3ZlcnksIHdoaWNoIHZhbGlkYXRlcyB0aGF0IHRoZSBBdXRob3JpdHkgaXMgdmFsaWQgYW5kIGtub3duIGJ5IHRoZSBNaWNyb3NvZnQgRW50cmEgaW5zdGFuY2UgbWV0YWRhdGEgc2VydmljZSBhdCBgaHR0cHM6Ly9sb2dpbi5taWNyb3NvZnQuY29tYCBiZWZvcmUgYXV0aGVudGljYXRpbmcuIFRoaXMgc2hvdWxkIG9ubHkgYmUgZW5hYmxlZCB3aGVuIHRoZSBjb25maWd1cmVkIGF1dGhvcml0eSBpcyBrbm93biB0byBiZSB2YWxpZCBhbmQgdHJ1c3R3b3J0aHkgLSBzdWNoIGFzIHdoZW4gcnVubmluZyBhZ2FpbnN0IEF6dXJlIFN0YWNrIG9yIHdoZW4gYGVudmlyb25tZW50YCBpcyBzZXQgdG8gYGN1c3RvbWAuIFRoaXMgY2FuIGFsc28gYmUgc3BlY2lmaWVkIHZpYSB0aGUgYEFSTV9ESVNBQkxFX0lOU1RBTkNFX0RJU0NPVkVSWWAgZW52aXJvbm1lbnQgdmFyaWFibGUuIERlZmF1bHRzIHRvIGBmYWxzZWAuXG4gICAqXG4gICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2F6dXJlL2F6YXBpLzIuNy4wL2RvY3MjZGlzYWJsZV9pbnN0YW5jZV9kaXNjb3ZlcnkgQXphcGlQcm92aWRlciNkaXNhYmxlX2luc3RhbmNlX2Rpc2NvdmVyeX1cbiAgICovXG4gIHJlYWRvbmx5IGRpc2FibGVJbnN0YW5jZURpc2NvdmVyeT86IGJvb2xlYW4gfCBjZGt0Zi5JUmVzb2x2YWJsZTtcbiAgLyoqXG4gICAqIERpc2FibGUgc2VuZGluZyB0aGUgVGVycmFmb3JtIFBhcnRuZXIgSUQgaWYgYSBjdXN0b20gYHBhcnRuZXJfaWRgIGlzbid0IHNwZWNpZmllZCwgd2hpY2ggYWxsb3dzIE1pY3Jvc29mdCB0byBiZXR0ZXIgdW5kZXJzdGFuZCB0aGUgdXNhZ2Ugb2YgVGVycmFmb3JtLiBUaGUgUGFydG5lciBJRCBkb2VzIG5vdCBnaXZlIEhhc2hpQ29ycCBhbnkgZGlyZWN0IGFjY2VzcyB0byB1c2FnZSBpbmZvcm1hdGlvbi4gVGhpcyBjYW4gYWxzbyBiZSBzb3VyY2VkIGZyb20gdGhlIGBBUk1fRElTQUJMRV9URVJSQUZPUk1fUEFSVE5FUl9JRGAgZW52aXJvbm1lbnQgdmFyaWFibGUuIERlZmF1bHRzIHRvIGBmYWxzZWAuXG4gICAqXG4gICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2F6dXJlL2F6YXBpLzIuNy4wL2RvY3MjZGlzYWJsZV90ZXJyYWZvcm1fcGFydG5lcl9pZCBBemFwaVByb3ZpZGVyI2Rpc2FibGVfdGVycmFmb3JtX3BhcnRuZXJfaWR9XG4gICAqL1xuICByZWFkb25seSBkaXNhYmxlVGVycmFmb3JtUGFydG5lcklkPzogYm9vbGVhbiB8IGNka3RmLklSZXNvbHZhYmxlO1xuICAvKipcbiAgICogRW5hYmxlIFByZWZsaWdodCBWYWxpZGF0aW9uLiBUaGUgZGVmYXVsdCBpcyBmYWxzZS4gV2hlbiBzZXQgdG8gdHJ1ZSwgdGhlIHByb3ZpZGVyIHdpbGwgdXNlIFByZWZsaWdodCB0byBkbyBzdGF0aWMgdmFsaWRhdGlvbiBiZWZvcmUgcmVhbGx5IGRlcGxveWluZyBhIG5ldyByZXNvdXJjZS4gV2hlbiBzZXQgdG8gZmFsc2UsIHRoZSBwcm92aWRlciB3aWxsIGRpc2FibGUgdGhpcyB2YWxpZGF0aW9uLiBUaGlzIGNhbiBhbHNvIGJlIHNvdXJjZWQgZnJvbSB0aGUgYEFSTV9FTkFCTEVfUFJFRkxJR0hUYCBFbnZpcm9ubWVudCBWYXJpYWJsZS5cbiAgICpcbiAgICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvYXp1cmUvYXphcGkvMi43LjAvZG9jcyNlbmFibGVfcHJlZmxpZ2h0IEF6YXBpUHJvdmlkZXIjZW5hYmxlX3ByZWZsaWdodH1cbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZVByZWZsaWdodD86IGJvb2xlYW4gfCBjZGt0Zi5JUmVzb2x2YWJsZTtcbiAgLyoqXG4gICAqIFRoZSBBenVyZSBBUEkgRW5kcG9pbnQgQ29uZmlndXJhdGlvbi5cbiAgICpcbiAgICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvYXp1cmUvYXphcGkvMi43LjAvZG9jcyNlbmRwb2ludCBBemFwaVByb3ZpZGVyI2VuZHBvaW50fVxuICAgKi9cbiAgcmVhZG9ubHkgZW5kcG9pbnQ/OiBBemFwaVByb3ZpZGVyRW5kcG9pbnRbXSB8IGNka3RmLklSZXNvbHZhYmxlO1xuICAvKipcbiAgICogVGhlIENsb3VkIEVudmlyb25tZW50IHdoaWNoIHNob3VsZCBiZSB1c2VkLiBQb3NzaWJsZSB2YWx1ZXMgYXJlIGBwdWJsaWNgLCBgdXNnb3Zlcm5tZW50YCwgYGNoaW5hYCBhbmQgYGN1c3RvbWAuIERlZmF1bHRzIHRvIGBwdWJsaWNgLiBUaGlzIGNhbiBhbHNvIGJlIHNvdXJjZWQgZnJvbSB0aGUgYEFSTV9FTlZJUk9OTUVOVGAgRW52aXJvbm1lbnQgVmFyaWFibGUuXG4gICAqXG4gICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2F6dXJlL2F6YXBpLzIuNy4wL2RvY3MjZW52aXJvbm1lbnQgQXphcGlQcm92aWRlciNlbnZpcm9ubWVudH1cbiAgICovXG4gIHJlYWRvbmx5IGVudmlyb25tZW50Pzogc3RyaW5nO1xuICAvKipcbiAgICogSWdub3JlIG5vLW9wIGNoYW5nZXMgZm9yIGBhemFwaV9yZXNvdXJjZWAuIFRoZSBkZWZhdWx0IGlzIHRydWUuIFdoZW4gc2V0IHRvIHRydWUsIHRoZSBwcm92aWRlciB3aWxsIHN1cHByZXNzIGNoYW5nZXMgaW4gdGhlIGBhemFwaV9yZXNvdXJjZWAgaWYgdGhlIGBib2R5YCBpbiB0aGUgbmV3IEFQSSB2ZXJzaW9uIHN0aWxsIG1hdGNoZXMgdGhlIHJlbW90ZSBzdGF0ZS4gV2hlbiBzZXQgdG8gZmFsc2UsIHRoZSBwcm92aWRlciB3aWxsIG5vdCBzdXBwcmVzcyB0aGVzZSBjaGFuZ2VzLiBUaGlzIGNhbiBhbHNvIGJlIHNvdXJjZWQgZnJvbSB0aGUgYEFSTV9JR05PUkVfTk9fT1BfQ0hBTkdFU2AgRW52aXJvbm1lbnQgVmFyaWFibGUuXG4gICAqXG4gICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2F6dXJlL2F6YXBpLzIuNy4wL2RvY3MjaWdub3JlX25vX29wX2NoYW5nZXMgQXphcGlQcm92aWRlciNpZ25vcmVfbm9fb3BfY2hhbmdlc31cbiAgICovXG4gIHJlYWRvbmx5IGlnbm9yZU5vT3BDaGFuZ2VzPzogYm9vbGVhbiB8IGNka3RmLklSZXNvbHZhYmxlO1xuICAvKipcbiAgICogREVQUkVDQVRFRCAtIFRoZSBtYXhpbXVtIG51bWJlciBvZiByZXRyaWVzIHRvIGF0dGVtcHQgaWYgdGhlIEF6dXJlIEFQSSByZXR1cm5zIGFuIEhUVFAgNDA4LCA0MjksIDUwMCwgNTAyLCA1MDMsIG9yIDUwNCByZXNwb25zZS4gVGhlIGRlZmF1bHQgaXMgYDMyNzY3YCwgdGhpcyBhbGxvd3MgdGhlIHByb3ZpZGVyIHRvIHJlbHkgb24gdGhlIHJlc291cmNlIHRpbWVvdXQgdmFsdWVzIHJhdGhlciB0aGFuIGEgbWF4aW11bSByZXRyeSBjb3VudC4gVGhlIHJlc291cmNlLXNwZWNpZmljIHJldHJ5IGNvbmZpZ3VyYXRpb24gbWF5IGFkZGl0aW9uYWxseSBiZSB1c2VkIHRvIHJldHJ5IG9uIG90aGVyIGVycm9ycyBhbmQgY29uZGl0aW9ucy4gVGhpcyBwcm9wZXJ0eSB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbi5cbiAgICpcbiAgICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvYXp1cmUvYXphcGkvMi43LjAvZG9jcyNtYXhpbXVtX2J1c3lfcmV0cnlfYXR0ZW1wdHMgQXphcGlQcm92aWRlciNtYXhpbXVtX2J1c3lfcmV0cnlfYXR0ZW1wdHN9XG4gICAqL1xuICByZWFkb25seSBtYXhpbXVtQnVzeVJldHJ5QXR0ZW1wdHM/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBUaGUgQXp1cmUgUGlwZWxpbmVzIFNlcnZpY2UgQ29ubmVjdGlvbiBJRCB0byB1c2UgZm9yIGF1dGhlbnRpY2F0aW9uLiBUaGlzIGNhbiBhbHNvIGJlIHNvdXJjZWQgZnJvbSB0aGUgYEFSTV9BRE9fUElQRUxJTkVfU0VSVklDRV9DT05ORUNUSU9OX0lEYCwgYEFSTV9PSURDX0FaVVJFX1NFUlZJQ0VfQ09OTkVDVElPTl9JRGAsIG9yIGBBWlVSRVNVQlNDUklQVElPTl9TRVJWSUNFX0NPTk5FQ1RJT05fSURgIEVudmlyb25tZW50IFZhcmlhYmxlcy5cbiAgICpcbiAgICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvYXp1cmUvYXphcGkvMi43LjAvZG9jcyNvaWRjX2F6dXJlX3NlcnZpY2VfY29ubmVjdGlvbl9pZCBBemFwaVByb3ZpZGVyI29pZGNfYXp1cmVfc2VydmljZV9jb25uZWN0aW9uX2lkfVxuICAgKi9cbiAgcmVhZG9ubHkgb2lkY0F6dXJlU2VydmljZUNvbm5lY3Rpb25JZD86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBiZWFyZXIgdG9rZW4gZm9yIHRoZSByZXF1ZXN0IHRvIHRoZSBPSURDIHByb3ZpZGVyLiBUaGlzIGNhbiBhbHNvIGJlIHNvdXJjZWQgZnJvbSB0aGUgYEFSTV9PSURDX1JFUVVFU1RfVE9LRU5gLCBgQUNUSU9OU19JRF9UT0tFTl9SRVFVRVNUX1RPS0VOYCwgb3IgYFNZU1RFTV9BQ0NFU1NUT0tFTmAgRW52aXJvbm1lbnQgVmFyaWFibGVzLlxuICAgKlxuICAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9henVyZS9hemFwaS8yLjcuMC9kb2NzI29pZGNfcmVxdWVzdF90b2tlbiBBemFwaVByb3ZpZGVyI29pZGNfcmVxdWVzdF90b2tlbn1cbiAgICovXG4gIHJlYWRvbmx5IG9pZGNSZXF1ZXN0VG9rZW4/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgVVJMIGZvciB0aGUgT0lEQyBwcm92aWRlciBmcm9tIHdoaWNoIHRvIHJlcXVlc3QgYW4gSUQgdG9rZW4uIFRoaXMgY2FuIGFsc28gYmUgc291cmNlZCBmcm9tIHRoZSBgQVJNX09JRENfUkVRVUVTVF9VUkxgLCBgQUNUSU9OU19JRF9UT0tFTl9SRVFVRVNUX1VSTGAsIG9yIGBTWVNURU1fT0lEQ1JFUVVFU1RVUklgIEVudmlyb25tZW50IFZhcmlhYmxlcy5cbiAgICpcbiAgICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvYXp1cmUvYXphcGkvMi43LjAvZG9jcyNvaWRjX3JlcXVlc3RfdXJsIEF6YXBpUHJvdmlkZXIjb2lkY19yZXF1ZXN0X3VybH1cbiAgICovXG4gIHJlYWRvbmx5IG9pZGNSZXF1ZXN0VXJsPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIElEIHRva2VuIHdoZW4gYXV0aGVudGljYXRpbmcgdXNpbmcgT3BlbklEIENvbm5lY3QgKE9JREMpLiBUaGlzIGNhbiBhbHNvIGJlIHNvdXJjZWQgZnJvbSB0aGUgYEFSTV9PSURDX1RPS0VOYCBlbnZpcm9ubWVudCBWYXJpYWJsZS5cbiAgICpcbiAgICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvYXp1cmUvYXphcGkvMi43LjAvZG9jcyNvaWRjX3Rva2VuIEF6YXBpUHJvdmlkZXIjb2lkY190b2tlbn1cbiAgICovXG4gIHJlYWRvbmx5IG9pZGNUb2tlbj86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBwYXRoIHRvIGEgZmlsZSBjb250YWluaW5nIGFuIElEIHRva2VuIHdoZW4gYXV0aGVudGljYXRpbmcgdXNpbmcgT3BlbklEIENvbm5lY3QgKE9JREMpLiBUaGlzIGNhbiBhbHNvIGJlIHNvdXJjZWQgZnJvbSB0aGUgYEFSTV9PSURDX1RPS0VOX0ZJTEVfUEFUSGAsIGBBWlVSRV9GRURFUkFURURfVE9LRU5fRklMRWAgZW52aXJvbm1lbnQgVmFyaWFibGUuXG4gICAqXG4gICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2F6dXJlL2F6YXBpLzIuNy4wL2RvY3Mjb2lkY190b2tlbl9maWxlX3BhdGggQXphcGlQcm92aWRlciNvaWRjX3Rva2VuX2ZpbGVfcGF0aH1cbiAgICovXG4gIHJlYWRvbmx5IG9pZGNUb2tlbkZpbGVQYXRoPzogc3RyaW5nO1xuICAvKipcbiAgICogQSBHVUlEL1VVSUQgdGhhdCBpcyBbcmVnaXN0ZXJlZF0oaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vYXp1cmUvbWFya2V0cGxhY2UvYXp1cmUtcGFydG5lci1jdXN0b21lci11c2FnZS1hdHRyaWJ1dGlvbiNyZWdpc3Rlci1ndWlkcy1hbmQtb2ZmZXJzKSB3aXRoIE1pY3Jvc29mdCB0byBmYWNpbGl0YXRlIHBhcnRuZXIgcmVzb3VyY2UgdXNhZ2UgYXR0cmlidXRpb24uIFRoaXMgY2FuIGFsc28gYmUgc291cmNlZCBmcm9tIHRoZSBgQVJNX1BBUlRORVJfSURgIEVudmlyb25tZW50IFZhcmlhYmxlLlxuICAgKlxuICAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9henVyZS9hemFwaS8yLjcuMC9kb2NzI3BhcnRuZXJfaWQgQXphcGlQcm92aWRlciNwYXJ0bmVyX2lkfVxuICAgKi9cbiAgcmVhZG9ubHkgcGFydG5lcklkPzogc3RyaW5nO1xuICAvKipcbiAgICogU2hvdWxkIHRoZSBQcm92aWRlciBza2lwIHJlZ2lzdGVyaW5nIHRoZSBSZXNvdXJjZSBQcm92aWRlcnMgaXQgc3VwcG9ydHM/IFRoaXMgY2FuIGFsc28gYmUgc291cmNlZCBmcm9tIHRoZSBgQVJNX1NLSVBfUFJPVklERVJfUkVHSVNUUkFUSU9OYCBFbnZpcm9ubWVudCBWYXJpYWJsZS4gRGVmYXVsdHMgdG8gYGZhbHNlYC5cbiAgICpcbiAgICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvYXp1cmUvYXphcGkvMi43LjAvZG9jcyNza2lwX3Byb3ZpZGVyX3JlZ2lzdHJhdGlvbiBBemFwaVByb3ZpZGVyI3NraXBfcHJvdmlkZXJfcmVnaXN0cmF0aW9ufVxuICAgKi9cbiAgcmVhZG9ubHkgc2tpcFByb3ZpZGVyUmVnaXN0cmF0aW9uPzogYm9vbGVhbiB8IGNka3RmLklSZXNvbHZhYmxlO1xuICAvKipcbiAgICogVGhlIFN1YnNjcmlwdGlvbiBJRCB3aGljaCBzaG91bGQgYmUgdXNlZC4gVGhpcyBjYW4gYWxzbyBiZSBzb3VyY2VkIGZyb20gdGhlIGBBUk1fU1VCU0NSSVBUSU9OX0lEYCBFbnZpcm9ubWVudCBWYXJpYWJsZS5cbiAgICpcbiAgICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvYXp1cmUvYXphcGkvMi43LjAvZG9jcyNzdWJzY3JpcHRpb25faWQgQXphcGlQcm92aWRlciNzdWJzY3JpcHRpb25faWR9XG4gICAqL1xuICByZWFkb25seSBzdWJzY3JpcHRpb25JZD86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBUZW5hbnQgSUQgc2hvdWxkIGJlIHVzZWQuIFRoaXMgY2FuIGFsc28gYmUgc291cmNlZCBmcm9tIHRoZSBgQVJNX1RFTkFOVF9JRGAgRW52aXJvbm1lbnQgVmFyaWFibGUuXG4gICAqXG4gICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2F6dXJlL2F6YXBpLzIuNy4wL2RvY3MjdGVuYW50X2lkIEF6YXBpUHJvdmlkZXIjdGVuYW50X2lkfVxuICAgKi9cbiAgcmVhZG9ubHkgdGVuYW50SWQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBTaG91bGQgQUtTIFdvcmtsb2FkIElkZW50aXR5IGJlIHVzZWQgZm9yIEF1dGhlbnRpY2F0aW9uPyBUaGlzIGNhbiBhbHNvIGJlIHNvdXJjZWQgZnJvbSB0aGUgYEFSTV9VU0VfQUtTX1dPUktMT0FEX0lERU5USVRZYCBFbnZpcm9ubWVudCBWYXJpYWJsZS4gRGVmYXVsdHMgdG8gYGZhbHNlYC4gV2hlbiBzZXQsIGBjbGllbnRfaWRgLCBgdGVuYW50X2lkYCBhbmQgYG9pZGNfdG9rZW5fZmlsZV9wYXRoYCB3aWxsIGJlIGRldGVjdGVkIGZyb20gdGhlIGVudmlyb25tZW50IGFuZCBkbyBub3QgbmVlZCB0byBiZSBzcGVjaWZpZWQuXG4gICAqXG4gICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2F6dXJlL2F6YXBpLzIuNy4wL2RvY3MjdXNlX2Frc193b3JrbG9hZF9pZGVudGl0eSBBemFwaVByb3ZpZGVyI3VzZV9ha3Nfd29ya2xvYWRfaWRlbnRpdHl9XG4gICAqL1xuICByZWFkb25seSB1c2VBa3NXb3JrbG9hZElkZW50aXR5PzogYm9vbGVhbiB8IGNka3RmLklSZXNvbHZhYmxlO1xuICAvKipcbiAgICogU2hvdWxkIEF6dXJlIENMSSBiZSB1c2VkIGZvciBhdXRoZW50aWNhdGlvbj8gVGhpcyBjYW4gYWxzbyBiZSBzb3VyY2VkIGZyb20gdGhlIGBBUk1fVVNFX0NMSWAgZW52aXJvbm1lbnQgdmFyaWFibGUuIERlZmF1bHRzIHRvIGB0cnVlYC5cbiAgICpcbiAgICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvYXp1cmUvYXphcGkvMi43LjAvZG9jcyN1c2VfY2xpIEF6YXBpUHJvdmlkZXIjdXNlX2NsaX1cbiAgICovXG4gIHJlYWRvbmx5IHVzZUNsaT86IGJvb2xlYW4gfCBjZGt0Zi5JUmVzb2x2YWJsZTtcbiAgLyoqXG4gICAqIFNob3VsZCBNYW5hZ2VkIElkZW50aXR5IGJlIHVzZWQgZm9yIEF1dGhlbnRpY2F0aW9uPyBUaGlzIGNhbiBhbHNvIGJlIHNvdXJjZWQgZnJvbSB0aGUgYEFSTV9VU0VfTVNJYCBFbnZpcm9ubWVudCBWYXJpYWJsZS4gRGVmYXVsdHMgdG8gYGZhbHNlYC5cbiAgICpcbiAgICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvYXp1cmUvYXphcGkvMi43LjAvZG9jcyN1c2VfbXNpIEF6YXBpUHJvdmlkZXIjdXNlX21zaX1cbiAgICovXG4gIHJlYWRvbmx5IHVzZU1zaT86IGJvb2xlYW4gfCBjZGt0Zi5JUmVzb2x2YWJsZTtcbiAgLyoqXG4gICAqIFNob3VsZCBPSURDIGJlIHVzZWQgZm9yIEF1dGhlbnRpY2F0aW9uPyBUaGlzIGNhbiBhbHNvIGJlIHNvdXJjZWQgZnJvbSB0aGUgYEFSTV9VU0VfT0lEQ2AgRW52aXJvbm1lbnQgVmFyaWFibGUuIERlZmF1bHRzIHRvIGBmYWxzZWAuXG4gICAqXG4gICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2F6dXJlL2F6YXBpLzIuNy4wL2RvY3MjdXNlX29pZGMgQXphcGlQcm92aWRlciN1c2Vfb2lkY31cbiAgICovXG4gIHJlYWRvbmx5IHVzZU9pZGM/OiBib29sZWFuIHwgY2RrdGYuSVJlc29sdmFibGU7XG4gIC8qKlxuICAgKiBBbGlhcyBuYW1lXG4gICAqXG4gICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2F6dXJlL2F6YXBpLzIuNy4wL2RvY3MjYWxpYXMgQXphcGlQcm92aWRlciNhbGlhc31cbiAgICovXG4gIHJlYWRvbmx5IGFsaWFzPzogc3RyaW5nO1xufVxuZXhwb3J0IGludGVyZmFjZSBBemFwaVByb3ZpZGVyRW5kcG9pbnQge1xuICAvKipcbiAgICogVGhlIEF6dXJlIEFjdGl2ZSBEaXJlY3RvcnkgbG9naW4gZW5kcG9pbnQgdG8gdXNlLiBUaGlzIGNhbiBhbHNvIGJlIHNvdXJjZWQgZnJvbSB0aGUgYEFSTV9BQ1RJVkVfRElSRUNUT1JZX0FVVEhPUklUWV9IT1NUYCBFbnZpcm9ubWVudCBWYXJpYWJsZS4gRGVmYXVsdHMgdG8gYGh0dHBzOi8vbG9naW4ubWljcm9zb2Z0b25saW5lLmNvbS9gIGZvciBwdWJsaWMgY2xvdWQuXG4gICAqXG4gICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2F6dXJlL2F6YXBpLzIuNy4wL2RvY3MjYWN0aXZlX2RpcmVjdG9yeV9hdXRob3JpdHlfaG9zdCBBemFwaVByb3ZpZGVyI2FjdGl2ZV9kaXJlY3RvcnlfYXV0aG9yaXR5X2hvc3R9XG4gICAqL1xuICByZWFkb25seSBhY3RpdmVEaXJlY3RvcnlBdXRob3JpdHlIb3N0Pzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHJlc291cmNlIElEIHRvIG9idGFpbiBBRCB0b2tlbnMgZm9yLiBUaGlzIGNhbiBhbHNvIGJlIHNvdXJjZWQgZnJvbSB0aGUgYEFSTV9SRVNPVVJDRV9NQU5BR0VSX0FVRElFTkNFYCBFbnZpcm9ubWVudCBWYXJpYWJsZS4gRGVmYXVsdHMgdG8gYGh0dHBzOi8vbWFuYWdlbWVudC5jb3JlLndpbmRvd3MubmV0L2AgZm9yIHB1YmxpYyBjbG91ZC5cbiAgICpcbiAgICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvYXp1cmUvYXphcGkvMi43LjAvZG9jcyNyZXNvdXJjZV9tYW5hZ2VyX2F1ZGllbmNlIEF6YXBpUHJvdmlkZXIjcmVzb3VyY2VfbWFuYWdlcl9hdWRpZW5jZX1cbiAgICovXG4gIHJlYWRvbmx5IHJlc291cmNlTWFuYWdlckF1ZGllbmNlPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIEF6dXJlIFJlc291cmNlIE1hbmFnZXIgZW5kcG9pbnQgdG8gdXNlLiBUaGlzIGNhbiBhbHNvIGJlIHNvdXJjZWQgZnJvbSB0aGUgYEFSTV9SRVNPVVJDRV9NQU5BR0VSX0VORFBPSU5UYCBFbnZpcm9ubWVudCBWYXJpYWJsZS4gRGVmYXVsdHMgdG8gYGh0dHBzOi8vbWFuYWdlbWVudC5henVyZS5jb20vYCBmb3IgcHVibGljIGNsb3VkLlxuICAgKlxuICAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9henVyZS9hemFwaS8yLjcuMC9kb2NzI3Jlc291cmNlX21hbmFnZXJfZW5kcG9pbnQgQXphcGlQcm92aWRlciNyZXNvdXJjZV9tYW5hZ2VyX2VuZHBvaW50fVxuICAgKi9cbiAgcmVhZG9ubHkgcmVzb3VyY2VNYW5hZ2VyRW5kcG9pbnQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhemFwaVByb3ZpZGVyRW5kcG9pbnRUb1RlcnJhZm9ybShcbiAgc3RydWN0PzogQXphcGlQcm92aWRlckVuZHBvaW50IHwgY2RrdGYuSVJlc29sdmFibGUsXG4pOiBhbnkge1xuICBpZiAoIWNka3RmLmNhbkluc3BlY3Qoc3RydWN0KSB8fCBjZGt0Zi5Ub2tlbml6YXRpb24uaXNSZXNvbHZhYmxlKHN0cnVjdCkpIHtcbiAgICByZXR1cm4gc3RydWN0O1xuICB9XG4gIGlmIChjZGt0Zi5pc0NvbXBsZXhFbGVtZW50KHN0cnVjdCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBcIkEgY29tcGxleCBlbGVtZW50IHdhcyB1c2VkIGFzIGNvbmZpZ3VyYXRpb24sIHRoaXMgaXMgbm90IHN1cHBvcnRlZDogaHR0cHM6Ly9jZGsudGYvY29tcGxleC1vYmplY3QtYXMtY29uZmlndXJhdGlvblwiLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBhY3RpdmVfZGlyZWN0b3J5X2F1dGhvcml0eV9ob3N0OiBjZGt0Zi5zdHJpbmdUb1RlcnJhZm9ybShcbiAgICAgIHN0cnVjdCEuYWN0aXZlRGlyZWN0b3J5QXV0aG9yaXR5SG9zdCxcbiAgICApLFxuICAgIHJlc291cmNlX21hbmFnZXJfYXVkaWVuY2U6IGNka3RmLnN0cmluZ1RvVGVycmFmb3JtKFxuICAgICAgc3RydWN0IS5yZXNvdXJjZU1hbmFnZXJBdWRpZW5jZSxcbiAgICApLFxuICAgIHJlc291cmNlX21hbmFnZXJfZW5kcG9pbnQ6IGNka3RmLnN0cmluZ1RvVGVycmFmb3JtKFxuICAgICAgc3RydWN0IS5yZXNvdXJjZU1hbmFnZXJFbmRwb2ludCxcbiAgICApLFxuICB9O1xufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYSB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2F6dXJlL2F6YXBpLzIuNy4wL2RvY3MgYXphcGl9XG4gKi9cbmV4cG9ydCBjbGFzcyBBemFwaVByb3ZpZGVyIGV4dGVuZHMgY2RrdGYuVGVycmFmb3JtUHJvdmlkZXIge1xuICAvLyA9PT09PT09PT09PT09PT09PVxuICAvLyBTVEFUSUMgUFJPUEVSVElFU1xuICAvLyA9PT09PT09PT09PT09PT09PVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IHRmUmVzb3VyY2VUeXBlID0gXCJhemFwaVwiO1xuXG4gIC8vID09PT09PT09PT09XG4gIC8vIElOSVRJQUxJWkVSXG4gIC8vID09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2F6dXJlL2F6YXBpLzIuNy4wL2RvY3MgYXphcGl9IFJlc291cmNlXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSBUaGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgY29uc3RydWN0XG4gICAqIEBwYXJhbSBpZCBUaGUgc2NvcGVkIGNvbnN0cnVjdCBJRC4gTXVzdCBiZSB1bmlxdWUgYW1vbmdzdCBzaWJsaW5ncyBpbiB0aGUgc2FtZSBzY29wZVxuICAgKiBAcGFyYW0gb3B0aW9ucyBBemFwaVByb3ZpZGVyQ29uZmlnID0ge31cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgY29uZmlnOiBBemFwaVByb3ZpZGVyQ29uZmlnID0ge30sXG4gICkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgdGVycmFmb3JtUmVzb3VyY2VUeXBlOiBcImF6YXBpXCIsXG4gICAgICB0ZXJyYWZvcm1HZW5lcmF0b3JNZXRhZGF0YToge1xuICAgICAgICBwcm92aWRlck5hbWU6IFwiYXphcGlcIixcbiAgICAgICAgcHJvdmlkZXJWZXJzaW9uOiBcIjIuNy4wXCIsXG4gICAgICAgIHByb3ZpZGVyVmVyc2lvbkNvbnN0cmFpbnQ6IFwifj4gMi43LjBcIixcbiAgICAgIH0sXG4gICAgICB0ZXJyYWZvcm1Qcm92aWRlclNvdXJjZTogXCJBenVyZS9hemFwaVwiLFxuICAgIH0pO1xuICAgIHRoaXMuX2F1eGlsaWFyeVRlbmFudElkcyA9IGNvbmZpZy5hdXhpbGlhcnlUZW5hbnRJZHM7XG4gICAgdGhpcy5fY2xpZW50Q2VydGlmaWNhdGUgPSBjb25maWcuY2xpZW50Q2VydGlmaWNhdGU7XG4gICAgdGhpcy5fY2xpZW50Q2VydGlmaWNhdGVQYXNzd29yZCA9IGNvbmZpZy5jbGllbnRDZXJ0aWZpY2F0ZVBhc3N3b3JkO1xuICAgIHRoaXMuX2NsaWVudENlcnRpZmljYXRlUGF0aCA9IGNvbmZpZy5jbGllbnRDZXJ0aWZpY2F0ZVBhdGg7XG4gICAgdGhpcy5fY2xpZW50SWQgPSBjb25maWcuY2xpZW50SWQ7XG4gICAgdGhpcy5fY2xpZW50SWRGaWxlUGF0aCA9IGNvbmZpZy5jbGllbnRJZEZpbGVQYXRoO1xuICAgIHRoaXMuX2NsaWVudFNlY3JldCA9IGNvbmZpZy5jbGllbnRTZWNyZXQ7XG4gICAgdGhpcy5fY2xpZW50U2VjcmV0RmlsZVBhdGggPSBjb25maWcuY2xpZW50U2VjcmV0RmlsZVBhdGg7XG4gICAgdGhpcy5fY3VzdG9tQ29ycmVsYXRpb25SZXF1ZXN0SWQgPSBjb25maWcuY3VzdG9tQ29ycmVsYXRpb25SZXF1ZXN0SWQ7XG4gICAgdGhpcy5fZGVmYXVsdExvY2F0aW9uID0gY29uZmlnLmRlZmF1bHRMb2NhdGlvbjtcbiAgICB0aGlzLl9kZWZhdWx0TmFtZSA9IGNvbmZpZy5kZWZhdWx0TmFtZTtcbiAgICB0aGlzLl9kZWZhdWx0VGFncyA9IGNvbmZpZy5kZWZhdWx0VGFncztcbiAgICB0aGlzLl9kaXNhYmxlQ29ycmVsYXRpb25SZXF1ZXN0SWQgPSBjb25maWcuZGlzYWJsZUNvcnJlbGF0aW9uUmVxdWVzdElkO1xuICAgIHRoaXMuX2Rpc2FibGVEZWZhdWx0T3V0cHV0ID0gY29uZmlnLmRpc2FibGVEZWZhdWx0T3V0cHV0O1xuICAgIHRoaXMuX2Rpc2FibGVJbnN0YW5jZURpc2NvdmVyeSA9IGNvbmZpZy5kaXNhYmxlSW5zdGFuY2VEaXNjb3Zlcnk7XG4gICAgdGhpcy5fZGlzYWJsZVRlcnJhZm9ybVBhcnRuZXJJZCA9IGNvbmZpZy5kaXNhYmxlVGVycmFmb3JtUGFydG5lcklkO1xuICAgIHRoaXMuX2VuYWJsZVByZWZsaWdodCA9IGNvbmZpZy5lbmFibGVQcmVmbGlnaHQ7XG4gICAgdGhpcy5fZW5kcG9pbnQgPSBjb25maWcuZW5kcG9pbnQ7XG4gICAgdGhpcy5fZW52aXJvbm1lbnQgPSBjb25maWcuZW52aXJvbm1lbnQ7XG4gICAgdGhpcy5faWdub3JlTm9PcENoYW5nZXMgPSBjb25maWcuaWdub3JlTm9PcENoYW5nZXM7XG4gICAgdGhpcy5fbWF4aW11bUJ1c3lSZXRyeUF0dGVtcHRzID0gY29uZmlnLm1heGltdW1CdXN5UmV0cnlBdHRlbXB0cztcbiAgICB0aGlzLl9vaWRjQXp1cmVTZXJ2aWNlQ29ubmVjdGlvbklkID0gY29uZmlnLm9pZGNBenVyZVNlcnZpY2VDb25uZWN0aW9uSWQ7XG4gICAgdGhpcy5fb2lkY1JlcXVlc3RUb2tlbiA9IGNvbmZpZy5vaWRjUmVxdWVzdFRva2VuO1xuICAgIHRoaXMuX29pZGNSZXF1ZXN0VXJsID0gY29uZmlnLm9pZGNSZXF1ZXN0VXJsO1xuICAgIHRoaXMuX29pZGNUb2tlbiA9IGNvbmZpZy5vaWRjVG9rZW47XG4gICAgdGhpcy5fb2lkY1Rva2VuRmlsZVBhdGggPSBjb25maWcub2lkY1Rva2VuRmlsZVBhdGg7XG4gICAgdGhpcy5fcGFydG5lcklkID0gY29uZmlnLnBhcnRuZXJJZDtcbiAgICB0aGlzLl9za2lwUHJvdmlkZXJSZWdpc3RyYXRpb24gPSBjb25maWcuc2tpcFByb3ZpZGVyUmVnaXN0cmF0aW9uO1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbklkID0gY29uZmlnLnN1YnNjcmlwdGlvbklkO1xuICAgIHRoaXMuX3RlbmFudElkID0gY29uZmlnLnRlbmFudElkO1xuICAgIHRoaXMuX3VzZUFrc1dvcmtsb2FkSWRlbnRpdHkgPSBjb25maWcudXNlQWtzV29ya2xvYWRJZGVudGl0eTtcbiAgICB0aGlzLl91c2VDbGkgPSBjb25maWcudXNlQ2xpO1xuICAgIHRoaXMuX3VzZU1zaSA9IGNvbmZpZy51c2VNc2k7XG4gICAgdGhpcy5fdXNlT2lkYyA9IGNvbmZpZy51c2VPaWRjO1xuICAgIHRoaXMuX2FsaWFzID0gY29uZmlnLmFsaWFzO1xuICB9XG5cbiAgLy8gPT09PT09PT09PVxuICAvLyBBVFRSSUJVVEVTXG4gIC8vID09PT09PT09PT1cblxuICAvLyBhdXhpbGlhcnlfdGVuYW50X2lkcyAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9hdXhpbGlhcnlUZW5hbnRJZHM/OiBzdHJpbmdbXTtcbiAgcHVibGljIGdldCBhdXhpbGlhcnlUZW5hbnRJZHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2F1eGlsaWFyeVRlbmFudElkcztcbiAgfVxuICBwdWJsaWMgc2V0IGF1eGlsaWFyeVRlbmFudElkcyh2YWx1ZTogc3RyaW5nW10gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9hdXhpbGlhcnlUZW5hbnRJZHMgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRBdXhpbGlhcnlUZW5hbnRJZHMoKSB7XG4gICAgdGhpcy5fYXV4aWxpYXJ5VGVuYW50SWRzID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBhdXhpbGlhcnlUZW5hbnRJZHNJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fYXV4aWxpYXJ5VGVuYW50SWRzO1xuICB9XG5cbiAgLy8gY2xpZW50X2NlcnRpZmljYXRlIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX2NsaWVudENlcnRpZmljYXRlPzogc3RyaW5nO1xuICBwdWJsaWMgZ2V0IGNsaWVudENlcnRpZmljYXRlKCkge1xuICAgIHJldHVybiB0aGlzLl9jbGllbnRDZXJ0aWZpY2F0ZTtcbiAgfVxuICBwdWJsaWMgc2V0IGNsaWVudENlcnRpZmljYXRlKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9jbGllbnRDZXJ0aWZpY2F0ZSA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldENsaWVudENlcnRpZmljYXRlKCkge1xuICAgIHRoaXMuX2NsaWVudENlcnRpZmljYXRlID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBjbGllbnRDZXJ0aWZpY2F0ZUlucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9jbGllbnRDZXJ0aWZpY2F0ZTtcbiAgfVxuXG4gIC8vIGNsaWVudF9jZXJ0aWZpY2F0ZV9wYXNzd29yZCAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9jbGllbnRDZXJ0aWZpY2F0ZVBhc3N3b3JkPzogc3RyaW5nO1xuICBwdWJsaWMgZ2V0IGNsaWVudENlcnRpZmljYXRlUGFzc3dvcmQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NsaWVudENlcnRpZmljYXRlUGFzc3dvcmQ7XG4gIH1cbiAgcHVibGljIHNldCBjbGllbnRDZXJ0aWZpY2F0ZVBhc3N3b3JkKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9jbGllbnRDZXJ0aWZpY2F0ZVBhc3N3b3JkID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0Q2xpZW50Q2VydGlmaWNhdGVQYXNzd29yZCgpIHtcbiAgICB0aGlzLl9jbGllbnRDZXJ0aWZpY2F0ZVBhc3N3b3JkID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBjbGllbnRDZXJ0aWZpY2F0ZVBhc3N3b3JkSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NsaWVudENlcnRpZmljYXRlUGFzc3dvcmQ7XG4gIH1cblxuICAvLyBjbGllbnRfY2VydGlmaWNhdGVfcGF0aCAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9jbGllbnRDZXJ0aWZpY2F0ZVBhdGg/OiBzdHJpbmc7XG4gIHB1YmxpYyBnZXQgY2xpZW50Q2VydGlmaWNhdGVQYXRoKCkge1xuICAgIHJldHVybiB0aGlzLl9jbGllbnRDZXJ0aWZpY2F0ZVBhdGg7XG4gIH1cbiAgcHVibGljIHNldCBjbGllbnRDZXJ0aWZpY2F0ZVBhdGgodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX2NsaWVudENlcnRpZmljYXRlUGF0aCA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldENsaWVudENlcnRpZmljYXRlUGF0aCgpIHtcbiAgICB0aGlzLl9jbGllbnRDZXJ0aWZpY2F0ZVBhdGggPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IGNsaWVudENlcnRpZmljYXRlUGF0aElucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9jbGllbnRDZXJ0aWZpY2F0ZVBhdGg7XG4gIH1cblxuICAvLyBjbGllbnRfaWQgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfY2xpZW50SWQ/OiBzdHJpbmc7XG4gIHB1YmxpYyBnZXQgY2xpZW50SWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NsaWVudElkO1xuICB9XG4gIHB1YmxpYyBzZXQgY2xpZW50SWQodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX2NsaWVudElkID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0Q2xpZW50SWQoKSB7XG4gICAgdGhpcy5fY2xpZW50SWQgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IGNsaWVudElkSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NsaWVudElkO1xuICB9XG5cbiAgLy8gY2xpZW50X2lkX2ZpbGVfcGF0aCAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9jbGllbnRJZEZpbGVQYXRoPzogc3RyaW5nO1xuICBwdWJsaWMgZ2V0IGNsaWVudElkRmlsZVBhdGgoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NsaWVudElkRmlsZVBhdGg7XG4gIH1cbiAgcHVibGljIHNldCBjbGllbnRJZEZpbGVQYXRoKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9jbGllbnRJZEZpbGVQYXRoID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0Q2xpZW50SWRGaWxlUGF0aCgpIHtcbiAgICB0aGlzLl9jbGllbnRJZEZpbGVQYXRoID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBjbGllbnRJZEZpbGVQYXRoSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NsaWVudElkRmlsZVBhdGg7XG4gIH1cblxuICAvLyBjbGllbnRfc2VjcmV0IC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX2NsaWVudFNlY3JldD86IHN0cmluZztcbiAgcHVibGljIGdldCBjbGllbnRTZWNyZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NsaWVudFNlY3JldDtcbiAgfVxuICBwdWJsaWMgc2V0IGNsaWVudFNlY3JldCh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fY2xpZW50U2VjcmV0ID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0Q2xpZW50U2VjcmV0KCkge1xuICAgIHRoaXMuX2NsaWVudFNlY3JldCA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgY2xpZW50U2VjcmV0SW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NsaWVudFNlY3JldDtcbiAgfVxuXG4gIC8vIGNsaWVudF9zZWNyZXRfZmlsZV9wYXRoIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX2NsaWVudFNlY3JldEZpbGVQYXRoPzogc3RyaW5nO1xuICBwdWJsaWMgZ2V0IGNsaWVudFNlY3JldEZpbGVQYXRoKCkge1xuICAgIHJldHVybiB0aGlzLl9jbGllbnRTZWNyZXRGaWxlUGF0aDtcbiAgfVxuICBwdWJsaWMgc2V0IGNsaWVudFNlY3JldEZpbGVQYXRoKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9jbGllbnRTZWNyZXRGaWxlUGF0aCA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldENsaWVudFNlY3JldEZpbGVQYXRoKCkge1xuICAgIHRoaXMuX2NsaWVudFNlY3JldEZpbGVQYXRoID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBjbGllbnRTZWNyZXRGaWxlUGF0aElucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9jbGllbnRTZWNyZXRGaWxlUGF0aDtcbiAgfVxuXG4gIC8vIGN1c3RvbV9jb3JyZWxhdGlvbl9yZXF1ZXN0X2lkIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX2N1c3RvbUNvcnJlbGF0aW9uUmVxdWVzdElkPzogc3RyaW5nO1xuICBwdWJsaWMgZ2V0IGN1c3RvbUNvcnJlbGF0aW9uUmVxdWVzdElkKCkge1xuICAgIHJldHVybiB0aGlzLl9jdXN0b21Db3JyZWxhdGlvblJlcXVlc3RJZDtcbiAgfVxuICBwdWJsaWMgc2V0IGN1c3RvbUNvcnJlbGF0aW9uUmVxdWVzdElkKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9jdXN0b21Db3JyZWxhdGlvblJlcXVlc3RJZCA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldEN1c3RvbUNvcnJlbGF0aW9uUmVxdWVzdElkKCkge1xuICAgIHRoaXMuX2N1c3RvbUNvcnJlbGF0aW9uUmVxdWVzdElkID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBjdXN0b21Db3JyZWxhdGlvblJlcXVlc3RJZElucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9jdXN0b21Db3JyZWxhdGlvblJlcXVlc3RJZDtcbiAgfVxuXG4gIC8vIGRlZmF1bHRfbG9jYXRpb24gLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfZGVmYXVsdExvY2F0aW9uPzogc3RyaW5nO1xuICBwdWJsaWMgZ2V0IGRlZmF1bHRMb2NhdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5fZGVmYXVsdExvY2F0aW9uO1xuICB9XG4gIHB1YmxpYyBzZXQgZGVmYXVsdExvY2F0aW9uKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9kZWZhdWx0TG9jYXRpb24gPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXREZWZhdWx0TG9jYXRpb24oKSB7XG4gICAgdGhpcy5fZGVmYXVsdExvY2F0aW9uID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBkZWZhdWx0TG9jYXRpb25JbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZGVmYXVsdExvY2F0aW9uO1xuICB9XG5cbiAgLy8gZGVmYXVsdF9uYW1lIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX2RlZmF1bHROYW1lPzogc3RyaW5nO1xuICBwdWJsaWMgZ2V0IGRlZmF1bHROYW1lKCkge1xuICAgIHJldHVybiB0aGlzLl9kZWZhdWx0TmFtZTtcbiAgfVxuICBwdWJsaWMgc2V0IGRlZmF1bHROYW1lKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9kZWZhdWx0TmFtZSA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldERlZmF1bHROYW1lKCkge1xuICAgIHRoaXMuX2RlZmF1bHROYW1lID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBkZWZhdWx0TmFtZUlucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9kZWZhdWx0TmFtZTtcbiAgfVxuXG4gIC8vIGRlZmF1bHRfdGFncyAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9kZWZhdWx0VGFncz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG4gIHB1YmxpYyBnZXQgZGVmYXVsdFRhZ3MoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RlZmF1bHRUYWdzO1xuICB9XG4gIHB1YmxpYyBzZXQgZGVmYXVsdFRhZ3ModmFsdWU6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9kZWZhdWx0VGFncyA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldERlZmF1bHRUYWdzKCkge1xuICAgIHRoaXMuX2RlZmF1bHRUYWdzID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBkZWZhdWx0VGFnc0lucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9kZWZhdWx0VGFncztcbiAgfVxuXG4gIC8vIGRpc2FibGVfY29ycmVsYXRpb25fcmVxdWVzdF9pZCAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9kaXNhYmxlQ29ycmVsYXRpb25SZXF1ZXN0SWQ/OiBib29sZWFuIHwgY2RrdGYuSVJlc29sdmFibGU7XG4gIHB1YmxpYyBnZXQgZGlzYWJsZUNvcnJlbGF0aW9uUmVxdWVzdElkKCkge1xuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlQ29ycmVsYXRpb25SZXF1ZXN0SWQ7XG4gIH1cbiAgcHVibGljIHNldCBkaXNhYmxlQ29ycmVsYXRpb25SZXF1ZXN0SWQoXG4gICAgdmFsdWU6IGJvb2xlYW4gfCBjZGt0Zi5JUmVzb2x2YWJsZSB8IHVuZGVmaW5lZCxcbiAgKSB7XG4gICAgdGhpcy5fZGlzYWJsZUNvcnJlbGF0aW9uUmVxdWVzdElkID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0RGlzYWJsZUNvcnJlbGF0aW9uUmVxdWVzdElkKCkge1xuICAgIHRoaXMuX2Rpc2FibGVDb3JyZWxhdGlvblJlcXVlc3RJZCA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgZGlzYWJsZUNvcnJlbGF0aW9uUmVxdWVzdElkSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVDb3JyZWxhdGlvblJlcXVlc3RJZDtcbiAgfVxuXG4gIC8vIGRpc2FibGVfZGVmYXVsdF9vdXRwdXQgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfZGlzYWJsZURlZmF1bHRPdXRwdXQ/OiBib29sZWFuIHwgY2RrdGYuSVJlc29sdmFibGU7XG4gIHB1YmxpYyBnZXQgZGlzYWJsZURlZmF1bHRPdXRwdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVEZWZhdWx0T3V0cHV0O1xuICB9XG4gIHB1YmxpYyBzZXQgZGlzYWJsZURlZmF1bHRPdXRwdXQoXG4gICAgdmFsdWU6IGJvb2xlYW4gfCBjZGt0Zi5JUmVzb2x2YWJsZSB8IHVuZGVmaW5lZCxcbiAgKSB7XG4gICAgdGhpcy5fZGlzYWJsZURlZmF1bHRPdXRwdXQgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXREaXNhYmxlRGVmYXVsdE91dHB1dCgpIHtcbiAgICB0aGlzLl9kaXNhYmxlRGVmYXVsdE91dHB1dCA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgZGlzYWJsZURlZmF1bHRPdXRwdXRJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzYWJsZURlZmF1bHRPdXRwdXQ7XG4gIH1cblxuICAvLyBkaXNhYmxlX2luc3RhbmNlX2Rpc2NvdmVyeSAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9kaXNhYmxlSW5zdGFuY2VEaXNjb3Zlcnk/OiBib29sZWFuIHwgY2RrdGYuSVJlc29sdmFibGU7XG4gIHB1YmxpYyBnZXQgZGlzYWJsZUluc3RhbmNlRGlzY292ZXJ5KCkge1xuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlSW5zdGFuY2VEaXNjb3Zlcnk7XG4gIH1cbiAgcHVibGljIHNldCBkaXNhYmxlSW5zdGFuY2VEaXNjb3ZlcnkoXG4gICAgdmFsdWU6IGJvb2xlYW4gfCBjZGt0Zi5JUmVzb2x2YWJsZSB8IHVuZGVmaW5lZCxcbiAgKSB7XG4gICAgdGhpcy5fZGlzYWJsZUluc3RhbmNlRGlzY292ZXJ5ID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0RGlzYWJsZUluc3RhbmNlRGlzY292ZXJ5KCkge1xuICAgIHRoaXMuX2Rpc2FibGVJbnN0YW5jZURpc2NvdmVyeSA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgZGlzYWJsZUluc3RhbmNlRGlzY292ZXJ5SW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVJbnN0YW5jZURpc2NvdmVyeTtcbiAgfVxuXG4gIC8vIGRpc2FibGVfdGVycmFmb3JtX3BhcnRuZXJfaWQgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfZGlzYWJsZVRlcnJhZm9ybVBhcnRuZXJJZD86IGJvb2xlYW4gfCBjZGt0Zi5JUmVzb2x2YWJsZTtcbiAgcHVibGljIGdldCBkaXNhYmxlVGVycmFmb3JtUGFydG5lcklkKCkge1xuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlVGVycmFmb3JtUGFydG5lcklkO1xuICB9XG4gIHB1YmxpYyBzZXQgZGlzYWJsZVRlcnJhZm9ybVBhcnRuZXJJZChcbiAgICB2YWx1ZTogYm9vbGVhbiB8IGNka3RmLklSZXNvbHZhYmxlIHwgdW5kZWZpbmVkLFxuICApIHtcbiAgICB0aGlzLl9kaXNhYmxlVGVycmFmb3JtUGFydG5lcklkID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0RGlzYWJsZVRlcnJhZm9ybVBhcnRuZXJJZCgpIHtcbiAgICB0aGlzLl9kaXNhYmxlVGVycmFmb3JtUGFydG5lcklkID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBkaXNhYmxlVGVycmFmb3JtUGFydG5lcklkSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVUZXJyYWZvcm1QYXJ0bmVySWQ7XG4gIH1cblxuICAvLyBlbmFibGVfcHJlZmxpZ2h0IC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX2VuYWJsZVByZWZsaWdodD86IGJvb2xlYW4gfCBjZGt0Zi5JUmVzb2x2YWJsZTtcbiAgcHVibGljIGdldCBlbmFibGVQcmVmbGlnaHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2VuYWJsZVByZWZsaWdodDtcbiAgfVxuICBwdWJsaWMgc2V0IGVuYWJsZVByZWZsaWdodCh2YWx1ZTogYm9vbGVhbiB8IGNka3RmLklSZXNvbHZhYmxlIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fZW5hYmxlUHJlZmxpZ2h0ID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0RW5hYmxlUHJlZmxpZ2h0KCkge1xuICAgIHRoaXMuX2VuYWJsZVByZWZsaWdodCA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgZW5hYmxlUHJlZmxpZ2h0SW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2VuYWJsZVByZWZsaWdodDtcbiAgfVxuXG4gIC8vIGVuZHBvaW50IC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX2VuZHBvaW50PzogQXphcGlQcm92aWRlckVuZHBvaW50W10gfCBjZGt0Zi5JUmVzb2x2YWJsZTtcbiAgcHVibGljIGdldCBlbmRwb2ludCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZW5kcG9pbnQ7XG4gIH1cbiAgcHVibGljIHNldCBlbmRwb2ludChcbiAgICB2YWx1ZTogQXphcGlQcm92aWRlckVuZHBvaW50W10gfCBjZGt0Zi5JUmVzb2x2YWJsZSB8IHVuZGVmaW5lZCxcbiAgKSB7XG4gICAgdGhpcy5fZW5kcG9pbnQgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRFbmRwb2ludCgpIHtcbiAgICB0aGlzLl9lbmRwb2ludCA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgZW5kcG9pbnRJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZW5kcG9pbnQ7XG4gIH1cblxuICAvLyBlbnZpcm9ubWVudCAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9lbnZpcm9ubWVudD86IHN0cmluZztcbiAgcHVibGljIGdldCBlbnZpcm9ubWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZW52aXJvbm1lbnQ7XG4gIH1cbiAgcHVibGljIHNldCBlbnZpcm9ubWVudCh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fZW52aXJvbm1lbnQgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRFbnZpcm9ubWVudCgpIHtcbiAgICB0aGlzLl9lbnZpcm9ubWVudCA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgZW52aXJvbm1lbnRJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZW52aXJvbm1lbnQ7XG4gIH1cblxuICAvLyBpZ25vcmVfbm9fb3BfY2hhbmdlcyAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9pZ25vcmVOb09wQ2hhbmdlcz86IGJvb2xlYW4gfCBjZGt0Zi5JUmVzb2x2YWJsZTtcbiAgcHVibGljIGdldCBpZ25vcmVOb09wQ2hhbmdlcygpIHtcbiAgICByZXR1cm4gdGhpcy5faWdub3JlTm9PcENoYW5nZXM7XG4gIH1cbiAgcHVibGljIHNldCBpZ25vcmVOb09wQ2hhbmdlcyh2YWx1ZTogYm9vbGVhbiB8IGNka3RmLklSZXNvbHZhYmxlIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5faWdub3JlTm9PcENoYW5nZXMgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRJZ25vcmVOb09wQ2hhbmdlcygpIHtcbiAgICB0aGlzLl9pZ25vcmVOb09wQ2hhbmdlcyA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgaWdub3JlTm9PcENoYW5nZXNJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5faWdub3JlTm9PcENoYW5nZXM7XG4gIH1cblxuICAvLyBtYXhpbXVtX2J1c3lfcmV0cnlfYXR0ZW1wdHMgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfbWF4aW11bUJ1c3lSZXRyeUF0dGVtcHRzPzogbnVtYmVyO1xuICBwdWJsaWMgZ2V0IG1heGltdW1CdXN5UmV0cnlBdHRlbXB0cygpIHtcbiAgICByZXR1cm4gdGhpcy5fbWF4aW11bUJ1c3lSZXRyeUF0dGVtcHRzO1xuICB9XG4gIHB1YmxpYyBzZXQgbWF4aW11bUJ1c3lSZXRyeUF0dGVtcHRzKHZhbHVlOiBudW1iZXIgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9tYXhpbXVtQnVzeVJldHJ5QXR0ZW1wdHMgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRNYXhpbXVtQnVzeVJldHJ5QXR0ZW1wdHMoKSB7XG4gICAgdGhpcy5fbWF4aW11bUJ1c3lSZXRyeUF0dGVtcHRzID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBtYXhpbXVtQnVzeVJldHJ5QXR0ZW1wdHNJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fbWF4aW11bUJ1c3lSZXRyeUF0dGVtcHRzO1xuICB9XG5cbiAgLy8gb2lkY19henVyZV9zZXJ2aWNlX2Nvbm5lY3Rpb25faWQgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfb2lkY0F6dXJlU2VydmljZUNvbm5lY3Rpb25JZD86IHN0cmluZztcbiAgcHVibGljIGdldCBvaWRjQXp1cmVTZXJ2aWNlQ29ubmVjdGlvbklkKCkge1xuICAgIHJldHVybiB0aGlzLl9vaWRjQXp1cmVTZXJ2aWNlQ29ubmVjdGlvbklkO1xuICB9XG4gIHB1YmxpYyBzZXQgb2lkY0F6dXJlU2VydmljZUNvbm5lY3Rpb25JZCh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fb2lkY0F6dXJlU2VydmljZUNvbm5lY3Rpb25JZCA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldE9pZGNBenVyZVNlcnZpY2VDb25uZWN0aW9uSWQoKSB7XG4gICAgdGhpcy5fb2lkY0F6dXJlU2VydmljZUNvbm5lY3Rpb25JZCA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgb2lkY0F6dXJlU2VydmljZUNvbm5lY3Rpb25JZElucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9vaWRjQXp1cmVTZXJ2aWNlQ29ubmVjdGlvbklkO1xuICB9XG5cbiAgLy8gb2lkY19yZXF1ZXN0X3Rva2VuIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX29pZGNSZXF1ZXN0VG9rZW4/OiBzdHJpbmc7XG4gIHB1YmxpYyBnZXQgb2lkY1JlcXVlc3RUb2tlbigpIHtcbiAgICByZXR1cm4gdGhpcy5fb2lkY1JlcXVlc3RUb2tlbjtcbiAgfVxuICBwdWJsaWMgc2V0IG9pZGNSZXF1ZXN0VG9rZW4odmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX29pZGNSZXF1ZXN0VG9rZW4gPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRPaWRjUmVxdWVzdFRva2VuKCkge1xuICAgIHRoaXMuX29pZGNSZXF1ZXN0VG9rZW4gPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IG9pZGNSZXF1ZXN0VG9rZW5JbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fb2lkY1JlcXVlc3RUb2tlbjtcbiAgfVxuXG4gIC8vIG9pZGNfcmVxdWVzdF91cmwgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfb2lkY1JlcXVlc3RVcmw/OiBzdHJpbmc7XG4gIHB1YmxpYyBnZXQgb2lkY1JlcXVlc3RVcmwoKSB7XG4gICAgcmV0dXJuIHRoaXMuX29pZGNSZXF1ZXN0VXJsO1xuICB9XG4gIHB1YmxpYyBzZXQgb2lkY1JlcXVlc3RVcmwodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX29pZGNSZXF1ZXN0VXJsID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0T2lkY1JlcXVlc3RVcmwoKSB7XG4gICAgdGhpcy5fb2lkY1JlcXVlc3RVcmwgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IG9pZGNSZXF1ZXN0VXJsSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX29pZGNSZXF1ZXN0VXJsO1xuICB9XG5cbiAgLy8gb2lkY190b2tlbiAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9vaWRjVG9rZW4/OiBzdHJpbmc7XG4gIHB1YmxpYyBnZXQgb2lkY1Rva2VuKCkge1xuICAgIHJldHVybiB0aGlzLl9vaWRjVG9rZW47XG4gIH1cbiAgcHVibGljIHNldCBvaWRjVG9rZW4odmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX29pZGNUb2tlbiA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldE9pZGNUb2tlbigpIHtcbiAgICB0aGlzLl9vaWRjVG9rZW4gPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IG9pZGNUb2tlbklucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9vaWRjVG9rZW47XG4gIH1cblxuICAvLyBvaWRjX3Rva2VuX2ZpbGVfcGF0aCAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9vaWRjVG9rZW5GaWxlUGF0aD86IHN0cmluZztcbiAgcHVibGljIGdldCBvaWRjVG9rZW5GaWxlUGF0aCgpIHtcbiAgICByZXR1cm4gdGhpcy5fb2lkY1Rva2VuRmlsZVBhdGg7XG4gIH1cbiAgcHVibGljIHNldCBvaWRjVG9rZW5GaWxlUGF0aCh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fb2lkY1Rva2VuRmlsZVBhdGggPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRPaWRjVG9rZW5GaWxlUGF0aCgpIHtcbiAgICB0aGlzLl9vaWRjVG9rZW5GaWxlUGF0aCA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgb2lkY1Rva2VuRmlsZVBhdGhJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fb2lkY1Rva2VuRmlsZVBhdGg7XG4gIH1cblxuICAvLyBwYXJ0bmVyX2lkIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX3BhcnRuZXJJZD86IHN0cmluZztcbiAgcHVibGljIGdldCBwYXJ0bmVySWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3BhcnRuZXJJZDtcbiAgfVxuICBwdWJsaWMgc2V0IHBhcnRuZXJJZCh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fcGFydG5lcklkID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0UGFydG5lcklkKCkge1xuICAgIHRoaXMuX3BhcnRuZXJJZCA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgcGFydG5lcklkSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3BhcnRuZXJJZDtcbiAgfVxuXG4gIC8vIHNraXBfcHJvdmlkZXJfcmVnaXN0cmF0aW9uIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX3NraXBQcm92aWRlclJlZ2lzdHJhdGlvbj86IGJvb2xlYW4gfCBjZGt0Zi5JUmVzb2x2YWJsZTtcbiAgcHVibGljIGdldCBza2lwUHJvdmlkZXJSZWdpc3RyYXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NraXBQcm92aWRlclJlZ2lzdHJhdGlvbjtcbiAgfVxuICBwdWJsaWMgc2V0IHNraXBQcm92aWRlclJlZ2lzdHJhdGlvbihcbiAgICB2YWx1ZTogYm9vbGVhbiB8IGNka3RmLklSZXNvbHZhYmxlIHwgdW5kZWZpbmVkLFxuICApIHtcbiAgICB0aGlzLl9za2lwUHJvdmlkZXJSZWdpc3RyYXRpb24gPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRTa2lwUHJvdmlkZXJSZWdpc3RyYXRpb24oKSB7XG4gICAgdGhpcy5fc2tpcFByb3ZpZGVyUmVnaXN0cmF0aW9uID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBza2lwUHJvdmlkZXJSZWdpc3RyYXRpb25JbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2tpcFByb3ZpZGVyUmVnaXN0cmF0aW9uO1xuICB9XG5cbiAgLy8gc3Vic2NyaXB0aW9uX2lkIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX3N1YnNjcmlwdGlvbklkPzogc3RyaW5nO1xuICBwdWJsaWMgZ2V0IHN1YnNjcmlwdGlvbklkKCkge1xuICAgIHJldHVybiB0aGlzLl9zdWJzY3JpcHRpb25JZDtcbiAgfVxuICBwdWJsaWMgc2V0IHN1YnNjcmlwdGlvbklkKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25JZCA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldFN1YnNjcmlwdGlvbklkKCkge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbklkID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBzdWJzY3JpcHRpb25JZElucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9zdWJzY3JpcHRpb25JZDtcbiAgfVxuXG4gIC8vIHRlbmFudF9pZCAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF90ZW5hbnRJZD86IHN0cmluZztcbiAgcHVibGljIGdldCB0ZW5hbnRJZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fdGVuYW50SWQ7XG4gIH1cbiAgcHVibGljIHNldCB0ZW5hbnRJZCh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fdGVuYW50SWQgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRUZW5hbnRJZCgpIHtcbiAgICB0aGlzLl90ZW5hbnRJZCA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgdGVuYW50SWRJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fdGVuYW50SWQ7XG4gIH1cblxuICAvLyB1c2VfYWtzX3dvcmtsb2FkX2lkZW50aXR5IC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX3VzZUFrc1dvcmtsb2FkSWRlbnRpdHk/OiBib29sZWFuIHwgY2RrdGYuSVJlc29sdmFibGU7XG4gIHB1YmxpYyBnZXQgdXNlQWtzV29ya2xvYWRJZGVudGl0eSgpIHtcbiAgICByZXR1cm4gdGhpcy5fdXNlQWtzV29ya2xvYWRJZGVudGl0eTtcbiAgfVxuICBwdWJsaWMgc2V0IHVzZUFrc1dvcmtsb2FkSWRlbnRpdHkoXG4gICAgdmFsdWU6IGJvb2xlYW4gfCBjZGt0Zi5JUmVzb2x2YWJsZSB8IHVuZGVmaW5lZCxcbiAgKSB7XG4gICAgdGhpcy5fdXNlQWtzV29ya2xvYWRJZGVudGl0eSA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldFVzZUFrc1dvcmtsb2FkSWRlbnRpdHkoKSB7XG4gICAgdGhpcy5fdXNlQWtzV29ya2xvYWRJZGVudGl0eSA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgdXNlQWtzV29ya2xvYWRJZGVudGl0eUlucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl91c2VBa3NXb3JrbG9hZElkZW50aXR5O1xuICB9XG5cbiAgLy8gdXNlX2NsaSAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF91c2VDbGk/OiBib29sZWFuIHwgY2RrdGYuSVJlc29sdmFibGU7XG4gIHB1YmxpYyBnZXQgdXNlQ2xpKCkge1xuICAgIHJldHVybiB0aGlzLl91c2VDbGk7XG4gIH1cbiAgcHVibGljIHNldCB1c2VDbGkodmFsdWU6IGJvb2xlYW4gfCBjZGt0Zi5JUmVzb2x2YWJsZSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX3VzZUNsaSA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldFVzZUNsaSgpIHtcbiAgICB0aGlzLl91c2VDbGkgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IHVzZUNsaUlucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl91c2VDbGk7XG4gIH1cblxuICAvLyB1c2VfbXNpIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX3VzZU1zaT86IGJvb2xlYW4gfCBjZGt0Zi5JUmVzb2x2YWJsZTtcbiAgcHVibGljIGdldCB1c2VNc2koKSB7XG4gICAgcmV0dXJuIHRoaXMuX3VzZU1zaTtcbiAgfVxuICBwdWJsaWMgc2V0IHVzZU1zaSh2YWx1ZTogYm9vbGVhbiB8IGNka3RmLklSZXNvbHZhYmxlIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fdXNlTXNpID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0VXNlTXNpKCkge1xuICAgIHRoaXMuX3VzZU1zaSA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgdXNlTXNpSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3VzZU1zaTtcbiAgfVxuXG4gIC8vIHVzZV9vaWRjIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX3VzZU9pZGM/OiBib29sZWFuIHwgY2RrdGYuSVJlc29sdmFibGU7XG4gIHB1YmxpYyBnZXQgdXNlT2lkYygpIHtcbiAgICByZXR1cm4gdGhpcy5fdXNlT2lkYztcbiAgfVxuICBwdWJsaWMgc2V0IHVzZU9pZGModmFsdWU6IGJvb2xlYW4gfCBjZGt0Zi5JUmVzb2x2YWJsZSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX3VzZU9pZGMgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRVc2VPaWRjKCkge1xuICAgIHRoaXMuX3VzZU9pZGMgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IHVzZU9pZGNJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fdXNlT2lkYztcbiAgfVxuXG4gIC8vIGFsaWFzIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX2FsaWFzPzogc3RyaW5nO1xuICBwdWJsaWMgZ2V0IGFsaWFzKCkge1xuICAgIHJldHVybiB0aGlzLl9hbGlhcztcbiAgfVxuICBwdWJsaWMgc2V0IGFsaWFzKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9hbGlhcyA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldEFsaWFzKCkge1xuICAgIHRoaXMuX2FsaWFzID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBhbGlhc0lucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9hbGlhcztcbiAgfVxuXG4gIC8vID09PT09PT09PVxuICAvLyBTWU5USEVTSVNcbiAgLy8gPT09PT09PT09XG5cbiAgcHJvdGVjdGVkIHN5bnRoZXNpemVBdHRyaWJ1dGVzKCk6IHsgW25hbWU6IHN0cmluZ106IGFueSB9IHtcbiAgICByZXR1cm4ge1xuICAgICAgYXV4aWxpYXJ5X3RlbmFudF9pZHM6IGNka3RmLmxpc3RNYXBwZXIoXG4gICAgICAgIGNka3RmLnN0cmluZ1RvVGVycmFmb3JtLFxuICAgICAgICBmYWxzZSxcbiAgICAgICkodGhpcy5fYXV4aWxpYXJ5VGVuYW50SWRzKSxcbiAgICAgIGNsaWVudF9jZXJ0aWZpY2F0ZTogY2RrdGYuc3RyaW5nVG9UZXJyYWZvcm0odGhpcy5fY2xpZW50Q2VydGlmaWNhdGUpLFxuICAgICAgY2xpZW50X2NlcnRpZmljYXRlX3Bhc3N3b3JkOiBjZGt0Zi5zdHJpbmdUb1RlcnJhZm9ybShcbiAgICAgICAgdGhpcy5fY2xpZW50Q2VydGlmaWNhdGVQYXNzd29yZCxcbiAgICAgICksXG4gICAgICBjbGllbnRfY2VydGlmaWNhdGVfcGF0aDogY2RrdGYuc3RyaW5nVG9UZXJyYWZvcm0oXG4gICAgICAgIHRoaXMuX2NsaWVudENlcnRpZmljYXRlUGF0aCxcbiAgICAgICksXG4gICAgICBjbGllbnRfaWQ6IGNka3RmLnN0cmluZ1RvVGVycmFmb3JtKHRoaXMuX2NsaWVudElkKSxcbiAgICAgIGNsaWVudF9pZF9maWxlX3BhdGg6IGNka3RmLnN0cmluZ1RvVGVycmFmb3JtKHRoaXMuX2NsaWVudElkRmlsZVBhdGgpLFxuICAgICAgY2xpZW50X3NlY3JldDogY2RrdGYuc3RyaW5nVG9UZXJyYWZvcm0odGhpcy5fY2xpZW50U2VjcmV0KSxcbiAgICAgIGNsaWVudF9zZWNyZXRfZmlsZV9wYXRoOiBjZGt0Zi5zdHJpbmdUb1RlcnJhZm9ybShcbiAgICAgICAgdGhpcy5fY2xpZW50U2VjcmV0RmlsZVBhdGgsXG4gICAgICApLFxuICAgICAgY3VzdG9tX2NvcnJlbGF0aW9uX3JlcXVlc3RfaWQ6IGNka3RmLnN0cmluZ1RvVGVycmFmb3JtKFxuICAgICAgICB0aGlzLl9jdXN0b21Db3JyZWxhdGlvblJlcXVlc3RJZCxcbiAgICAgICksXG4gICAgICBkZWZhdWx0X2xvY2F0aW9uOiBjZGt0Zi5zdHJpbmdUb1RlcnJhZm9ybSh0aGlzLl9kZWZhdWx0TG9jYXRpb24pLFxuICAgICAgZGVmYXVsdF9uYW1lOiBjZGt0Zi5zdHJpbmdUb1RlcnJhZm9ybSh0aGlzLl9kZWZhdWx0TmFtZSksXG4gICAgICBkZWZhdWx0X3RhZ3M6IGNka3RmLmhhc2hNYXBwZXIoY2RrdGYuc3RyaW5nVG9UZXJyYWZvcm0pKFxuICAgICAgICB0aGlzLl9kZWZhdWx0VGFncyxcbiAgICAgICksXG4gICAgICBkaXNhYmxlX2NvcnJlbGF0aW9uX3JlcXVlc3RfaWQ6IGNka3RmLmJvb2xlYW5Ub1RlcnJhZm9ybShcbiAgICAgICAgdGhpcy5fZGlzYWJsZUNvcnJlbGF0aW9uUmVxdWVzdElkLFxuICAgICAgKSxcbiAgICAgIGRpc2FibGVfZGVmYXVsdF9vdXRwdXQ6IGNka3RmLmJvb2xlYW5Ub1RlcnJhZm9ybShcbiAgICAgICAgdGhpcy5fZGlzYWJsZURlZmF1bHRPdXRwdXQsXG4gICAgICApLFxuICAgICAgZGlzYWJsZV9pbnN0YW5jZV9kaXNjb3Zlcnk6IGNka3RmLmJvb2xlYW5Ub1RlcnJhZm9ybShcbiAgICAgICAgdGhpcy5fZGlzYWJsZUluc3RhbmNlRGlzY292ZXJ5LFxuICAgICAgKSxcbiAgICAgIGRpc2FibGVfdGVycmFmb3JtX3BhcnRuZXJfaWQ6IGNka3RmLmJvb2xlYW5Ub1RlcnJhZm9ybShcbiAgICAgICAgdGhpcy5fZGlzYWJsZVRlcnJhZm9ybVBhcnRuZXJJZCxcbiAgICAgICksXG4gICAgICBlbmFibGVfcHJlZmxpZ2h0OiBjZGt0Zi5ib29sZWFuVG9UZXJyYWZvcm0odGhpcy5fZW5hYmxlUHJlZmxpZ2h0KSxcbiAgICAgIGVuZHBvaW50OiBjZGt0Zi5saXN0TWFwcGVyKFxuICAgICAgICBhemFwaVByb3ZpZGVyRW5kcG9pbnRUb1RlcnJhZm9ybSxcbiAgICAgICAgZmFsc2UsXG4gICAgICApKHRoaXMuX2VuZHBvaW50KSxcbiAgICAgIGVudmlyb25tZW50OiBjZGt0Zi5zdHJpbmdUb1RlcnJhZm9ybSh0aGlzLl9lbnZpcm9ubWVudCksXG4gICAgICBpZ25vcmVfbm9fb3BfY2hhbmdlczogY2RrdGYuYm9vbGVhblRvVGVycmFmb3JtKHRoaXMuX2lnbm9yZU5vT3BDaGFuZ2VzKSxcbiAgICAgIG1heGltdW1fYnVzeV9yZXRyeV9hdHRlbXB0czogY2RrdGYubnVtYmVyVG9UZXJyYWZvcm0oXG4gICAgICAgIHRoaXMuX21heGltdW1CdXN5UmV0cnlBdHRlbXB0cyxcbiAgICAgICksXG4gICAgICBvaWRjX2F6dXJlX3NlcnZpY2VfY29ubmVjdGlvbl9pZDogY2RrdGYuc3RyaW5nVG9UZXJyYWZvcm0oXG4gICAgICAgIHRoaXMuX29pZGNBenVyZVNlcnZpY2VDb25uZWN0aW9uSWQsXG4gICAgICApLFxuICAgICAgb2lkY19yZXF1ZXN0X3Rva2VuOiBjZGt0Zi5zdHJpbmdUb1RlcnJhZm9ybSh0aGlzLl9vaWRjUmVxdWVzdFRva2VuKSxcbiAgICAgIG9pZGNfcmVxdWVzdF91cmw6IGNka3RmLnN0cmluZ1RvVGVycmFmb3JtKHRoaXMuX29pZGNSZXF1ZXN0VXJsKSxcbiAgICAgIG9pZGNfdG9rZW46IGNka3RmLnN0cmluZ1RvVGVycmFmb3JtKHRoaXMuX29pZGNUb2tlbiksXG4gICAgICBvaWRjX3Rva2VuX2ZpbGVfcGF0aDogY2RrdGYuc3RyaW5nVG9UZXJyYWZvcm0odGhpcy5fb2lkY1Rva2VuRmlsZVBhdGgpLFxuICAgICAgcGFydG5lcl9pZDogY2RrdGYuc3RyaW5nVG9UZXJyYWZvcm0odGhpcy5fcGFydG5lcklkKSxcbiAgICAgIHNraXBfcHJvdmlkZXJfcmVnaXN0cmF0aW9uOiBjZGt0Zi5ib29sZWFuVG9UZXJyYWZvcm0oXG4gICAgICAgIHRoaXMuX3NraXBQcm92aWRlclJlZ2lzdHJhdGlvbixcbiAgICAgICksXG4gICAgICBzdWJzY3JpcHRpb25faWQ6IGNka3RmLnN0cmluZ1RvVGVycmFmb3JtKHRoaXMuX3N1YnNjcmlwdGlvbklkKSxcbiAgICAgIHRlbmFudF9pZDogY2RrdGYuc3RyaW5nVG9UZXJyYWZvcm0odGhpcy5fdGVuYW50SWQpLFxuICAgICAgdXNlX2Frc193b3JrbG9hZF9pZGVudGl0eTogY2RrdGYuYm9vbGVhblRvVGVycmFmb3JtKFxuICAgICAgICB0aGlzLl91c2VBa3NXb3JrbG9hZElkZW50aXR5LFxuICAgICAgKSxcbiAgICAgIHVzZV9jbGk6IGNka3RmLmJvb2xlYW5Ub1RlcnJhZm9ybSh0aGlzLl91c2VDbGkpLFxuICAgICAgdXNlX21zaTogY2RrdGYuYm9vbGVhblRvVGVycmFmb3JtKHRoaXMuX3VzZU1zaSksXG4gICAgICB1c2Vfb2lkYzogY2RrdGYuYm9vbGVhblRvVGVycmFmb3JtKHRoaXMuX3VzZU9pZGMpLFxuICAgICAgYWxpYXM6IGNka3RmLnN0cmluZ1RvVGVycmFmb3JtKHRoaXMuX2FsaWFzKSxcbiAgICB9O1xuICB9XG59XG4iXX0=
846
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvY29yZS1henVyZS9saWIvYXphcGkvcHJvdmlkZXJzLWF6YXBpL3Byb3ZpZGVyL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFpUEEsNEVBVUM7QUFHRCxrRkE0QkM7O0FBdFJELCtCQUErQjtBQTZPL0IsU0FBZ0IsZ0NBQWdDLENBQUMsTUFBa0Q7SUFDakcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUFDLE9BQU8sTUFBTSxDQUFDO0lBQUMsQ0FBQztJQUM1RixJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQ25DLE1BQU0sSUFBSSxLQUFLLENBQUMsb0hBQW9ILENBQUMsQ0FBQztJQUN4SSxDQUFDO0lBQ0QsT0FBTztRQUNMLCtCQUErQixFQUFFLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxNQUFPLENBQUMsNEJBQTRCLENBQUM7UUFDOUYseUJBQXlCLEVBQUUsS0FBSyxDQUFDLGlCQUFpQixDQUFDLE1BQU8sQ0FBQyx1QkFBdUIsQ0FBQztRQUNuRix5QkFBeUIsRUFBRSxLQUFLLENBQUMsaUJBQWlCLENBQUMsTUFBTyxDQUFDLHVCQUF1QixDQUFDO0tBQ3BGLENBQUE7QUFDSCxDQUFDO0FBR0QsU0FBZ0IsbUNBQW1DLENBQUMsTUFBa0Q7SUFDcEcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUFDLE9BQU8sTUFBTSxDQUFDO0lBQUMsQ0FBQztJQUM1RixJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFD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QixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7Z0JBQzlDLE9BQU8sRUFBRSxLQUFLO2dCQUNkLElBQUksRUFBRSxRQUFRO2dCQUNkLGdCQUFnQixFQUFFLFFBQVE7YUFDM0I7U0FDRixDQUFDO1FBRUYsOEJBQThCO1FBQzlCLE9BQU8sTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEtBQUssU0FBUyxJQUFJLEtBQUssQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFFLENBQUMsQ0FBQTtJQUM1SCxDQUFDOztBQXY0Qkgsc0NBdzRCQzs7O0FBdDRCQyxvQkFBb0I7QUFDcEIsb0JBQW9CO0FBQ3BCLG9CQUFvQjtBQUNHLDRCQUFjLEdBQUcsT0FBTyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2F6dXJlL2F6YXBpLzIuNy4wL2RvY3Ncbi8vIGdlbmVyYXRlZCBmcm9tIHRlcnJhZm9ybSByZXNvdXJjZSBzY2hlbWFcblxuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgKiBhcyBjZGt0ZiBmcm9tICdjZGt0Zic7XG5cbi8vIENvbmZpZ3VyYXRpb25cblxuZXhwb3J0IGludGVyZmFjZSBBemFwaVByb3ZpZGVyQ29uZmlnIHtcbiAgLyoqXG4gICogTGlzdCBvZiBhdXhpbGlhcnkgVGVuYW50IElEcyByZXF1aXJlZCBmb3IgbXVsdGktdGVuYW5jeSBhbmQgY3Jvc3MtdGVuYW50IHNjZW5hcmlvcy4gVGhpcyBjYW4gYWxzbyBiZSBzb3VyY2VkIGZyb20gdGhlIGBBUk1fQVVYSUxJQVJZX1RFTkFOVF9JRFNgIEVudmlyb25tZW50IFZhcmlhYmxlLlxuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvYXp1cmUvYXphcGkvMi43LjAvZG9jcyNhdXhpbGlhcnlfdGVuYW50X2lkcyBBemFwaVByb3ZpZGVyI2F1eGlsaWFyeV90ZW5hbnRfaWRzfVxuICAqL1xuICByZWFkb25seSBhdXhpbGlhcnlUZW5hbnRJZHM/OiBzdHJpbmdbXTtcbiAgLyoqXG4gICogQSBiYXNlNjQtZW5jb2RlZCBQS0NTIzEyIGJ1bmRsZSB0byBiZSB1c2VkIGFzIHRoZSBjbGllbnQgY2VydGlmaWNhdGUgZm9yIGF1dGhlbnRpY2F0aW9uLiBUaGlzIGNhbiBhbHNvIGJlIHNvdXJjZWQgZnJvbSB0aGUgYEFSTV9DTElFTlRfQ0VSVElGSUNBVEVgIGVudmlyb25tZW50IHZhcmlhYmxlLlxuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvYXp1cmUvYXphcGkvMi43LjAvZG9jcyNjbGllbnRfY2VydGlmaWNhdGUgQXphcGlQcm92aWRlciNjbGllbnRfY2VydGlmaWNhdGV9XG4gICovXG4gIHJlYWRvbmx5IGNsaWVudENlcnRpZmljYXRlPzogc3RyaW5nO1xuICAvKipcbiAgKiBUaGUgcGFzc3dvcmQgYXNzb2NpYXRlZCB3aXRoIHRoZSBDbGllbnQgQ2VydGlmaWNhdGUuIFRoaXMgY2FuIGFsc28gYmUgc291cmNlZCBmcm9tIHRoZSBgQVJNX0NMSUVOVF9DRVJUSUZJQ0FURV9QQVNTV09SRGAgRW52aXJvbm1lbnQgVmFyaWFibGUuXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9henVyZS9hemFwaS8yLjcuMC9kb2NzI2NsaWVudF9jZXJ0aWZpY2F0ZV9wYXNzd29yZCBBemFwaVByb3ZpZGVyI2NsaWVudF9jZXJ0aWZpY2F0ZV9wYXNzd29yZH1cbiAgKi9cbiAgcmVhZG9ubHkgY2xpZW50Q2VydGlmaWNhdGVQYXNzd29yZD86IHN0cmluZztcbiAgLyoqXG4gICogVGhlIHBhdGggdG8gdGhlIENsaWVudCBDZXJ0aWZpY2F0ZSBhc3NvY2lhdGVkIHdpdGggdGhlIFNlcnZpY2UgUHJpbmNpcGFsIHdoaWNoIHNob3VsZCBiZSB1c2VkLiBUaGlzIGNhbiBhbHNvIGJlIHNvdXJjZWQgZnJvbSB0aGUgYEFSTV9DTElFTlRfQ0VSVElGSUNBVEVfUEFUSGAgRW52aXJvbm1lbnQgVmFyaWFibGUuXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9henVyZS9hemFwaS8yLjcuMC9kb2NzI2NsaWVudF9jZXJ0aWZpY2F0ZV9wYXRoIEF6YXBpUHJvdmlkZXIjY2xpZW50X2NlcnRpZmljYXRlX3BhdGh9XG4gICovXG4gIHJlYWRvbmx5IGNsaWVudENlcnRpZmljYXRlUGF0aD86IHN0cmluZztcbiAgLyoqXG4gICogVGhlIENsaWVudCBJRCB3aGljaCBzaG91bGQgYmUgdXNlZC4gVGhpcyBjYW4gYWxzbyBiZSBzb3VyY2VkIGZyb20gdGhlIGBBUk1fQ0xJRU5UX0lEYCwgYEFaVVJFX0NMSUVOVF9JRGAgRW52aXJvbm1lbnQgVmFyaWFibGUuXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9henVyZS9hemFwaS8yLjcuMC9kb2NzI2NsaWVudF9pZCBBemFwaVByb3ZpZGVyI2NsaWVudF9pZH1cbiAgKi9cbiAgcmVhZG9ubHkgY2xpZW50SWQ/OiBzdHJpbmc7XG4gIC8qKlxuICAqIFRoZSBwYXRoIHRvIGEgZmlsZSBjb250YWluaW5nIHRoZSBDbGllbnQgSUQgd2hpY2ggc2hvdWxkIGJlIHVzZWQuIFRoaXMgY2FuIGFsc28gYmUgc291cmNlZCBmcm9tIHRoZSBgQVJNX0NMSUVOVF9JRF9GSUxFX1BBVEhgIEVudmlyb25tZW50IFZhcmlhYmxlLlxuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvYXp1cmUvYXphcGkvMi43LjAvZG9jcyNjbGllbnRfaWRfZmlsZV9wYXRoIEF6YXBpUHJvdmlkZXIjY2xpZW50X2lkX2ZpbGVfcGF0aH1cbiAgKi9cbiAgcmVhZG9ubHkgY2xpZW50SWRGaWxlUGF0aD86IHN0cmluZztcbiAgLyoqXG4gICogVGhlIENsaWVudCBTZWNyZXQgd2hpY2ggc2hvdWxkIGJlIHVzZWQuIFRoaXMgY2FuIGFsc28gYmUgc291cmNlZCBmcm9tIHRoZSBgQVJNX0NMSUVOVF9TRUNSRVRgIEVudmlyb25tZW50IFZhcmlhYmxlLlxuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvYXp1cmUvYXphcGkvMi43LjAvZG9jcyNjbGllbnRfc2VjcmV0IEF6YXBpUHJvdmlkZXIjY2xpZW50X3NlY3JldH1cbiAgKi9cbiAgcmVhZG9ubHkgY2xpZW50U2VjcmV0Pzogc3RyaW5nO1xuICAvKipcbiAgKiBUaGUgcGF0aCB0byBhIGZpbGUgY29udGFpbmluZyB0aGUgQ2xpZW50IFNlY3JldCB3aGljaCBzaG91bGQgYmUgdXNlZC4gRm9yIHVzZSBXaGVuIGF1dGhlbnRpY2F0aW5nIGFzIGEgU2VydmljZSBQcmluY2lwYWwgdXNpbmcgYSBDbGllbnQgU2VjcmV0LiBUaGlzIGNhbiBhbHNvIGJlIHNvdXJjZWQgZnJvbSB0aGUgYEFSTV9DTElFTlRfU0VDUkVUX0ZJTEVfUEFUSGAgRW52aXJvbm1lbnQgVmFyaWFibGUuXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9henVyZS9hemFwaS8yLjcuMC9kb2NzI2NsaWVudF9zZWNyZXRfZmlsZV9wYXRoIEF6YXBpUHJvdmlkZXIjY2xpZW50X3NlY3JldF9maWxlX3BhdGh9XG4gICovXG4gIHJlYWRvbmx5IGNsaWVudFNlY3JldEZpbGVQYXRoPzogc3RyaW5nO1xuICAvKipcbiAgKiBUaGUgdmFsdWUgb2YgdGhlIGB4LW1zLWNvcnJlbGF0aW9uLXJlcXVlc3QtaWRgIGhlYWRlciwgb3RoZXJ3aXNlIGFuIGF1dG8tZ2VuZXJhdGVkIFVVSUQgd2lsbCBiZSB1c2VkLiBUaGlzIGNhbiBhbHNvIGJlIHNvdXJjZWQgZnJvbSB0aGUgYEFSTV9DT1JSRUxBVElPTl9SRVFVRVNUX0lEYCBlbnZpcm9ubWVudCB2YXJpYWJsZS5cbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2F6dXJlL2F6YXBpLzIuNy4wL2RvY3MjY3VzdG9tX2NvcnJlbGF0aW9uX3JlcXVlc3RfaWQgQXphcGlQcm92aWRlciNjdXN0b21fY29ycmVsYXRpb25fcmVxdWVzdF9pZH1cbiAgKi9cbiAgcmVhZG9ubHkgY3VzdG9tQ29ycmVsYXRpb25SZXF1ZXN0SWQ/OiBzdHJpbmc7XG4gIC8qKlxuICAqICBUaGUgZGVmYXVsdCBBenVyZSBSZWdpb24gd2hlcmUgdGhlIGF6dXJlIHJlc291cmNlIHNob3VsZCBleGlzdC4gVGhlIGBsb2NhdGlvbmAgaW4gZWFjaCByZXNvdXJjZSBibG9jayBjYW4gb3ZlcnJpZGUgdGhlIGBkZWZhdWx0X2xvY2F0aW9uYC4gQ2hhbmdpbmcgdGhpcyBmb3JjZXMgbmV3IHJlc291cmNlcyB0byBiZSBjcmVhdGVkLlxuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvYXp1cmUvYXphcGkvMi43LjAvZG9jcyNkZWZhdWx0X2xvY2F0aW9uIEF6YXBpUHJvdmlkZXIjZGVmYXVsdF9sb2NhdGlvbn1cbiAgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdExvY2F0aW9uPzogc3RyaW5nO1xuICAvKipcbiAgKiBUaGUgZGVmYXVsdCBuYW1lIHRvIGNyZWF0ZSB0aGUgYXp1cmUgcmVzb3VyY2UuIFRoZSBgbmFtZWAgaW4gZWFjaCByZXNvdXJjZSBibG9jayBjYW4gb3ZlcnJpZGUgdGhlIGBkZWZhdWx0X25hbWVgLiBDaGFuZ2luZyB0aGlzIGZvcmNlcyBuZXcgcmVzb3VyY2VzIHRvIGJlIGNyZWF0ZWQuXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9henVyZS9hemFwaS8yLjcuMC9kb2NzI2RlZmF1bHRfbmFtZSBBemFwaVByb3ZpZGVyI2RlZmF1bHRfbmFtZX1cbiAgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdE5hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAqIEEgbWFwcGluZyBvZiB0YWdzIHdoaWNoIHNob3VsZCBiZSBhc3NpZ25lZCB0byB0aGUgYXp1cmUgcmVzb3VyY2UgYXMgZGVmYXVsdCB0YWdzLiBUaGVgdGFnc2AgaW4gZWFjaCByZXNvdXJjZSBibG9jayBjYW4gb3ZlcnJpZGUgdGhlIGBkZWZhdWx0X3RhZ3NgLlxuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvYXp1cmUvYXphcGkvMi43LjAvZG9jcyNkZWZhdWx0X3RhZ3MgQXphcGlQcm92aWRlciNkZWZhdWx0X3RhZ3N9XG4gICovXG4gIHJlYWRvbmx5IGRlZmF1bHRUYWdzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcbiAgLyoqXG4gICogVGhpcyB3aWxsIGRpc2FibGUgdGhlIHgtbXMtY29ycmVsYXRpb24tcmVxdWVzdC1pZCBoZWFkZXIuXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9henVyZS9hemFwaS8yLjcuMC9kb2NzI2Rpc2FibGVfY29ycmVsYXRpb25fcmVxdWVzdF9pZCBBemFwaVByb3ZpZGVyI2Rpc2FibGVfY29ycmVsYXRpb25fcmVxdWVzdF9pZH1cbiAgKi9cbiAgcmVhZG9ubHkgZGlzYWJsZUNvcnJlbGF0aW9uUmVxdWVzdElkPzogYm9vbGVhbiB8IGNka3RmLklSZXNvbHZhYmxlO1xuICAvKipcbiAgKiBEaXNhYmxlIGRlZmF1bHQgb3V0cHV0LiBUaGUgZGVmYXVsdCBpcyBmYWxzZS4gV2hlbiBzZXQgdG8gZmFsc2UsIHRoZSBwcm92aWRlciB3aWxsIG91dHB1dCB0aGUgcmVhZC1vbmx5IHByb3BlcnRpZXMgaWYgYHJlc3BvbnNlX2V4cG9ydF92YWx1ZXNgIGlzIG5vdCBzcGVjaWZpZWQgaW4gdGhlIHJlc291cmNlIGJsb2NrLiBXaGVuIHNldCB0byB0cnVlLCB0aGUgcHJvdmlkZXIgd2lsbCBkaXNhYmxlIHRoaXMgb3V0cHV0LiBUaGlzIGNhbiBhbHNvIGJlIHNvdXJjZWQgZnJvbSB0aGUgYEFSTV9ESVNBQkxFX0RFRkFVTFRfT1VUUFVUYCBFbnZpcm9ubWVudCBWYXJpYWJsZS5cbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2F6dXJlL2F6YXBpLzIuNy4wL2RvY3MjZGlzYWJsZV9kZWZhdWx0X291dHB1dCBBemFwaVByb3ZpZGVyI2Rpc2FibGVfZGVmYXVsdF9vdXRwdXR9XG4gICovXG4gIHJlYWRvbmx5IGRpc2FibGVEZWZhdWx0T3V0cHV0PzogYm9vbGVhbiB8IGNka3RmLklSZXNvbHZhYmxlO1xuICAvKipcbiAgKiBEaXNhYmxlcyBJbnN0YW5jZSBEaXNjb3ZlcnksIHdoaWNoIHZhbGlkYXRlcyB0aGF0IHRoZSBBdXRob3JpdHkgaXMgdmFsaWQgYW5kIGtub3duIGJ5IHRoZSBNaWNyb3NvZnQgRW50cmEgaW5zdGFuY2UgbWV0YWRhdGEgc2VydmljZSBhdCBgaHR0cHM6Ly9sb2dpbi5taWNyb3NvZnQuY29tYCBiZWZvcmUgYXV0aGVudGljYXRpbmcuIFRoaXMgc2hvdWxkIG9ubHkgYmUgZW5hYmxlZCB3aGVuIHRoZSBjb25maWd1cmVkIGF1dGhvcml0eSBpcyBrbm93biB0byBiZSB2YWxpZCBhbmQgdHJ1c3R3b3J0aHkgLSBzdWNoIGFzIHdoZW4gcnVubmluZyBhZ2FpbnN0IEF6dXJlIFN0YWNrIG9yIHdoZW4gYGVudmlyb25tZW50YCBpcyBzZXQgdG8gYGN1c3RvbWAuIFRoaXMgY2FuIGFsc28gYmUgc3BlY2lmaWVkIHZpYSB0aGUgYEFSTV9ESVNBQkxFX0lOU1RBTkNFX0RJU0NPVkVSWWAgZW52aXJvbm1lbnQgdmFyaWFibGUuIERlZmF1bHRzIHRvIGBmYWxzZWAuXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9henVyZS9hemFwaS8yLjcuMC9kb2NzI2Rpc2FibGVfaW5zdGFuY2VfZGlzY292ZXJ5IEF6YXBpUHJvdmlkZXIjZGlzYWJsZV9pbnN0YW5jZV9kaXNjb3Zlcnl9XG4gICovXG4gIHJlYWRvbmx5IGRpc2FibGVJbnN0YW5jZURpc2NvdmVyeT86IGJvb2xlYW4gfCBjZGt0Zi5JUmVzb2x2YWJsZTtcbiAgLyoqXG4gICogRGlzYWJsZSBzZW5kaW5nIHRoZSBUZXJyYWZvcm0gUGFydG5lciBJRCBpZiBhIGN1c3RvbSBgcGFydG5lcl9pZGAgaXNuJ3Qgc3BlY2lmaWVkLCB3aGljaCBhbGxvd3MgTWljcm9zb2Z0IHRvIGJldHRlciB1bmRlcnN0YW5kIHRoZSB1c2FnZSBvZiBUZXJyYWZvcm0uIFRoZSBQYXJ0bmVyIElEIGRvZXMgbm90IGdpdmUgSGFzaGlDb3JwIGFueSBkaXJlY3QgYWNjZXNzIHRvIHVzYWdlIGluZm9ybWF0aW9uLiBUaGlzIGNhbiBhbHNvIGJlIHNvdXJjZWQgZnJvbSB0aGUgYEFSTV9ESVNBQkxFX1RFUlJBRk9STV9QQVJUTkVSX0lEYCBlbnZpcm9ubWVudCB2YXJpYWJsZS4gRGVmYXVsdHMgdG8gYGZhbHNlYC5cbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2F6dXJlL2F6YXBpLzIuNy4wL2RvY3MjZGlzYWJsZV90ZXJyYWZvcm1fcGFydG5lcl9pZCBBemFwaVByb3ZpZGVyI2Rpc2FibGVfdGVycmFmb3JtX3BhcnRuZXJfaWR9XG4gICovXG4gIHJlYWRvbmx5IGRpc2FibGVUZXJyYWZvcm1QYXJ0bmVySWQ/OiBib29sZWFuIHwgY2RrdGYuSVJlc29sdmFibGU7XG4gIC8qKlxuICAqIEVuYWJsZSBQcmVmbGlnaHQgVmFsaWRhdGlvbi4gVGhlIGRlZmF1bHQgaXMgZmFsc2UuIFdoZW4gc2V0IHRvIHRydWUsIHRoZSBwcm92aWRlciB3aWxsIHVzZSBQcmVmbGlnaHQgdG8gZG8gc3RhdGljIHZhbGlkYXRpb24gYmVmb3JlIHJlYWxseSBkZXBsb3lpbmcgYSBuZXcgcmVzb3VyY2UuIFdoZW4gc2V0IHRvIGZhbHNlLCB0aGUgcHJvdmlkZXIgd2lsbCBkaXNhYmxlIHRoaXMgdmFsaWRhdGlvbi4gVGhpcyBjYW4gYWxzbyBiZSBzb3VyY2VkIGZyb20gdGhlIGBBUk1fRU5BQkxFX1BSRUZMSUdIVGAgRW52aXJvbm1lbnQgVmFyaWFibGUuXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9henVyZS9hemFwaS8yLjcuMC9kb2NzI2VuYWJsZV9wcmVmbGlnaHQgQXphcGlQcm92aWRlciNlbmFibGVfcHJlZmxpZ2h0fVxuICAqL1xuICByZWFkb25seSBlbmFibGVQcmVmbGlnaHQ/OiBib29sZWFuIHwgY2RrdGYuSVJlc29sdmFibGU7XG4gIC8qKlxuICAqIFRoZSBBenVyZSBBUEkgRW5kcG9pbnQgQ29uZmlndXJhdGlvbi5cbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2F6dXJlL2F6YXBpLzIuNy4wL2RvY3MjZW5kcG9pbnQgQXphcGlQcm92aWRlciNlbmRwb2ludH1cbiAgKi9cbiAgcmVhZG9ubHkgZW5kcG9pbnQ/OiBBemFwaVByb3ZpZGVyRW5kcG9pbnRbXSB8IGNka3RmLklSZXNvbHZhYmxlO1xuICAvKipcbiAgKiBUaGUgQ2xvdWQgRW52aXJvbm1lbnQgd2hpY2ggc2hvdWxkIGJlIHVzZWQuIFBvc3NpYmxlIHZhbHVlcyBhcmUgYHB1YmxpY2AsIGB1c2dvdmVybm1lbnRgLCBgY2hpbmFgIGFuZCBgY3VzdG9tYC4gRGVmYXVsdHMgdG8gYHB1YmxpY2AuIFRoaXMgY2FuIGFsc28gYmUgc291cmNlZCBmcm9tIHRoZSBgQVJNX0VOVklST05NRU5UYCBFbnZpcm9ubWVudCBWYXJpYWJsZS5cbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2F6dXJlL2F6YXBpLzIuNy4wL2RvY3MjZW52aXJvbm1lbnQgQXphcGlQcm92aWRlciNlbnZpcm9ubWVudH1cbiAgKi9cbiAgcmVhZG9ubHkgZW52aXJvbm1lbnQ/OiBzdHJpbmc7XG4gIC8qKlxuICAqIElnbm9yZSBuby1vcCBjaGFuZ2VzIGZvciBgYXphcGlfcmVzb3VyY2VgLiBUaGUgZGVmYXVsdCBpcyB0cnVlLiBXaGVuIHNldCB0byB0cnVlLCB0aGUgcHJvdmlkZXIgd2lsbCBzdXBwcmVzcyBjaGFuZ2VzIGluIHRoZSBgYXphcGlfcmVzb3VyY2VgIGlmIHRoZSBgYm9keWAgaW4gdGhlIG5ldyBBUEkgdmVyc2lvbiBzdGlsbCBtYXRjaGVzIHRoZSByZW1vdGUgc3RhdGUuIFdoZW4gc2V0IHRvIGZhbHNlLCB0aGUgcHJvdmlkZXIgd2lsbCBub3Qgc3VwcHJlc3MgdGhlc2UgY2hhbmdlcy4gVGhpcyBjYW4gYWxzbyBiZSBzb3VyY2VkIGZyb20gdGhlIGBBUk1fSUdOT1JFX05PX09QX0NIQU5HRVNgIEVudmlyb25tZW50IFZhcmlhYmxlLlxuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvYXp1cmUvYXphcGkvMi43LjAvZG9jcyNpZ25vcmVfbm9fb3BfY2hhbmdlcyBBemFwaVByb3ZpZGVyI2lnbm9yZV9ub19vcF9jaGFuZ2VzfVxuICAqL1xuICByZWFkb25seSBpZ25vcmVOb09wQ2hhbmdlcz86IGJvb2xlYW4gfCBjZGt0Zi5JUmVzb2x2YWJsZTtcbiAgLyoqXG4gICogREVQUkVDQVRFRCAtIFRoZSBtYXhpbXVtIG51bWJlciBvZiByZXRyaWVzIHRvIGF0dGVtcHQgaWYgdGhlIEF6dXJlIEFQSSByZXR1cm5zIGFuIEhUVFAgNDA4LCA0MjksIDUwMCwgNTAyLCA1MDMsIG9yIDUwNCByZXNwb25zZS4gVGhlIGRlZmF1bHQgaXMgYDMyNzY3YCwgdGhpcyBhbGxvd3MgdGhlIHByb3ZpZGVyIHRvIHJlbHkgb24gdGhlIHJlc291cmNlIHRpbWVvdXQgdmFsdWVzIHJhdGhlciB0aGFuIGEgbWF4aW11bSByZXRyeSBjb3VudC4gVGhlIHJlc291cmNlLXNwZWNpZmljIHJldHJ5IGNvbmZpZ3VyYXRpb24gbWF5IGFkZGl0aW9uYWxseSBiZSB1c2VkIHRvIHJldHJ5IG9uIG90aGVyIGVycm9ycyBhbmQgY29uZGl0aW9ucy4gVGhpcyBwcm9wZXJ0eSB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbi5cbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2F6dXJlL2F6YXBpLzIuNy4wL2RvY3MjbWF4aW11bV9idXN5X3JldHJ5X2F0dGVtcHRzIEF6YXBpUHJvdmlkZXIjbWF4aW11bV9idXN5X3JldHJ5X2F0dGVtcHRzfVxuICAqL1xuICByZWFkb25seSBtYXhpbXVtQnVzeVJldHJ5QXR0ZW1wdHM/OiBudW1iZXI7XG4gIC8qKlxuICAqIFRoZSBBenVyZSBQaXBlbGluZXMgU2VydmljZSBDb25uZWN0aW9uIElEIHRvIHVzZSBmb3IgYXV0aGVudGljYXRpb24uIFRoaXMgY2FuIGFsc28gYmUgc291cmNlZCBmcm9tIHRoZSBgQVJNX0FET19QSVBFTElORV9TRVJWSUNFX0NPTk5FQ1RJT05fSURgLCBgQVJNX09JRENfQVpVUkVfU0VSVklDRV9DT05ORUNUSU9OX0lEYCwgb3IgYEFaVVJFU1VCU0NSSVBUSU9OX1NFUlZJQ0VfQ09OTkVDVElPTl9JRGAgRW52aXJvbm1lbnQgVmFyaWFibGVzLlxuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvYXp1cmUvYXphcGkvMi43LjAvZG9jcyNvaWRjX2F6dXJlX3NlcnZpY2VfY29ubmVjdGlvbl9pZCBBemFwaVByb3ZpZGVyI29pZGNfYXp1cmVfc2VydmljZV9jb25uZWN0aW9uX2lkfVxuICAqL1xuICByZWFkb25seSBvaWRjQXp1cmVTZXJ2aWNlQ29ubmVjdGlvbklkPzogc3RyaW5nO1xuICAvKipcbiAgKiBUaGUgYmVhcmVyIHRva2VuIGZvciB0aGUgcmVxdWVzdCB0byB0aGUgT0lEQyBwcm92aWRlci4gVGhpcyBjYW4gYWxzbyBiZSBzb3VyY2VkIGZyb20gdGhlIGBBUk1fT0lEQ19SRVFVRVNUX1RPS0VOYCwgYEFDVElPTlNfSURfVE9LRU5fUkVRVUVTVF9UT0tFTmAsIG9yIGBTWVNURU1fQUNDRVNTVE9LRU5gIEVudmlyb25tZW50IFZhcmlhYmxlcy5cbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2F6dXJlL2F6YXBpLzIuNy4wL2RvY3Mjb2lkY19yZXF1ZXN0X3Rva2VuIEF6YXBpUHJvdmlkZXIjb2lkY19yZXF1ZXN0X3Rva2VufVxuICAqL1xuICByZWFkb25seSBvaWRjUmVxdWVzdFRva2VuPzogc3RyaW5nO1xuICAvKipcbiAgKiBUaGUgVVJMIGZvciB0aGUgT0lEQyBwcm92aWRlciBmcm9tIHdoaWNoIHRvIHJlcXVlc3QgYW4gSUQgdG9rZW4uIFRoaXMgY2FuIGFsc28gYmUgc291cmNlZCBmcm9tIHRoZSBgQVJNX09JRENfUkVRVUVTVF9VUkxgLCBgQUNUSU9OU19JRF9UT0tFTl9SRVFVRVNUX1VSTGAsIG9yIGBTWVNURU1fT0lEQ1JFUVVFU1RVUklgIEVudmlyb25tZW50IFZhcmlhYmxlcy5cbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2F6dXJlL2F6YXBpLzIuNy4wL2RvY3Mjb2lkY19yZXF1ZXN0X3VybCBBemFwaVByb3ZpZGVyI29pZGNfcmVxdWVzdF91cmx9XG4gICovXG4gIHJlYWRvbmx5IG9pZGNSZXF1ZXN0VXJsPzogc3RyaW5nO1xuICAvKipcbiAgKiBUaGUgSUQgdG9rZW4gd2hlbiBhdXRoZW50aWNhdGluZyB1c2luZyBPcGVuSUQgQ29ubmVjdCAoT0lEQykuIFRoaXMgY2FuIGFsc28gYmUgc291cmNlZCBmcm9tIHRoZSBgQVJNX09JRENfVE9LRU5gIGVudmlyb25tZW50IFZhcmlhYmxlLlxuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvYXp1cmUvYXphcGkvMi43LjAvZG9jcyNvaWRjX3Rva2VuIEF6YXBpUHJvdmlkZXIjb2lkY190b2tlbn1cbiAgKi9cbiAgcmVhZG9ubHkgb2lkY1Rva2VuPzogc3RyaW5nO1xuICAvKipcbiAgKiBUaGUgcGF0aCB0byBhIGZpbGUgY29udGFpbmluZyBhbiBJRCB0b2tlbiB3aGVuIGF1dGhlbnRpY2F0aW5nIHVzaW5nIE9wZW5JRCBDb25uZWN0IChPSURDKS4gVGhpcyBjYW4gYWxzbyBiZSBzb3VyY2VkIGZyb20gdGhlIGBBUk1fT0lEQ19UT0tFTl9GSUxFX1BBVEhgLCBgQVpVUkVfRkVERVJBVEVEX1RPS0VOX0ZJTEVgIGVudmlyb25tZW50IFZhcmlhYmxlLlxuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvYXp1cmUvYXphcGkvMi43LjAvZG9jcyNvaWRjX3Rva2VuX2ZpbGVfcGF0aCBBemFwaVByb3ZpZGVyI29pZGNfdG9rZW5fZmlsZV9wYXRofVxuICAqL1xuICByZWFkb25seSBvaWRjVG9rZW5GaWxlUGF0aD86IHN0cmluZztcbiAgLyoqXG4gICogQSBHVUlEL1VVSUQgdGhhdCBpcyBbcmVnaXN0ZXJlZF0oaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vYXp1cmUvbWFya2V0cGxhY2UvYXp1cmUtcGFydG5lci1jdXN0b21lci11c2FnZS1hdHRyaWJ1dGlvbiNyZWdpc3Rlci1ndWlkcy1hbmQtb2ZmZXJzKSB3aXRoIE1pY3Jvc29mdCB0byBmYWNpbGl0YXRlIHBhcnRuZXIgcmVzb3VyY2UgdXNhZ2UgYXR0cmlidXRpb24uIFRoaXMgY2FuIGFsc28gYmUgc291cmNlZCBmcm9tIHRoZSBgQVJNX1BBUlRORVJfSURgIEVudmlyb25tZW50IFZhcmlhYmxlLlxuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvYXp1cmUvYXphcGkvMi43LjAvZG9jcyNwYXJ0bmVyX2lkIEF6YXBpUHJvdmlkZXIjcGFydG5lcl9pZH1cbiAgKi9cbiAgcmVhZG9ubHkgcGFydG5lcklkPzogc3RyaW5nO1xuICAvKipcbiAgKiBTaG91bGQgdGhlIFByb3ZpZGVyIHNraXAgcmVnaXN0ZXJpbmcgdGhlIFJlc291cmNlIFByb3ZpZGVycyBpdCBzdXBwb3J0cz8gVGhpcyBjYW4gYWxzbyBiZSBzb3VyY2VkIGZyb20gdGhlIGBBUk1fU0tJUF9QUk9WSURFUl9SRUdJU1RSQVRJT05gIEVudmlyb25tZW50IFZhcmlhYmxlLiBEZWZhdWx0cyB0byBgZmFsc2VgLlxuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvYXp1cmUvYXphcGkvMi43LjAvZG9jcyNza2lwX3Byb3ZpZGVyX3JlZ2lzdHJhdGlvbiBBemFwaVByb3ZpZGVyI3NraXBfcHJvdmlkZXJfcmVnaXN0cmF0aW9ufVxuICAqL1xuICByZWFkb25seSBza2lwUHJvdmlkZXJSZWdpc3RyYXRpb24/OiBib29sZWFuIHwgY2RrdGYuSVJlc29sdmFibGU7XG4gIC8qKlxuICAqIFRoZSBTdWJzY3JpcHRpb24gSUQgd2hpY2ggc2hvdWxkIGJlIHVzZWQuIFRoaXMgY2FuIGFsc28gYmUgc291cmNlZCBmcm9tIHRoZSBgQVJNX1NVQlNDUklQVElPTl9JRGAgRW52aXJvbm1lbnQgVmFyaWFibGUuXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9henVyZS9hemFwaS8yLjcuMC9kb2NzI3N1YnNjcmlwdGlvbl9pZCBBemFwaVByb3ZpZGVyI3N1YnNjcmlwdGlvbl9pZH1cbiAgKi9cbiAgcmVhZG9ubHkgc3Vic2NyaXB0aW9uSWQ/OiBzdHJpbmc7XG4gIC8qKlxuICAqIFRoZSBUZW5hbnQgSUQgc2hvdWxkIGJlIHVzZWQuIFRoaXMgY2FuIGFsc28gYmUgc291cmNlZCBmcm9tIHRoZSBgQVJNX1RFTkFOVF9JRGAgRW52aXJvbm1lbnQgVmFyaWFibGUuXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9henVyZS9hemFwaS8yLjcuMC9kb2NzI3RlbmFudF9pZCBBemFwaVByb3ZpZGVyI3RlbmFudF9pZH1cbiAgKi9cbiAgcmVhZG9ubHkgdGVuYW50SWQ/OiBzdHJpbmc7XG4gIC8qKlxuICAqIFNob3VsZCBBS1MgV29ya2xvYWQgSWRlbnRpdHkgYmUgdXNlZCBmb3IgQXV0aGVudGljYXRpb24/IFRoaXMgY2FuIGFsc28gYmUgc291cmNlZCBmcm9tIHRoZSBgQVJNX1VTRV9BS1NfV09SS0xPQURfSURFTlRJVFlgIEVudmlyb25tZW50IFZhcmlhYmxlLiBEZWZhdWx0cyB0byBgZmFsc2VgLiBXaGVuIHNldCwgYGNsaWVudF9pZGAsIGB0ZW5hbnRfaWRgIGFuZCBgb2lkY190b2tlbl9maWxlX3BhdGhgIHdpbGwgYmUgZGV0ZWN0ZWQgZnJvbSB0aGUgZW52aXJvbm1lbnQgYW5kIGRvIG5vdCBuZWVkIHRvIGJlIHNwZWNpZmllZC5cbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2F6dXJlL2F6YXBpLzIuNy4wL2RvY3MjdXNlX2Frc193b3JrbG9hZF9pZGVudGl0eSBBemFwaVByb3ZpZGVyI3VzZV9ha3Nfd29ya2xvYWRfaWRlbnRpdHl9XG4gICovXG4gIHJlYWRvbmx5IHVzZUFrc1dvcmtsb2FkSWRlbnRpdHk/OiBib29sZWFuIHwgY2RrdGYuSVJlc29sdmFibGU7XG4gIC8qKlxuICAqIFNob3VsZCBBenVyZSBDTEkgYmUgdXNlZCBmb3IgYXV0aGVudGljYXRpb24/IFRoaXMgY2FuIGFsc28gYmUgc291cmNlZCBmcm9tIHRoZSBgQVJNX1VTRV9DTElgIGVudmlyb25tZW50IHZhcmlhYmxlLiBEZWZhdWx0cyB0byBgdHJ1ZWAuXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9henVyZS9hemFwaS8yLjcuMC9kb2NzI3VzZV9jbGkgQXphcGlQcm92aWRlciN1c2VfY2xpfVxuICAqL1xuICByZWFkb25seSB1c2VDbGk/OiBib29sZWFuIHwgY2RrdGYuSVJlc29sdmFibGU7XG4gIC8qKlxuICAqIFNob3VsZCBNYW5hZ2VkIElkZW50aXR5IGJlIHVzZWQgZm9yIEF1dGhlbnRpY2F0aW9uPyBUaGlzIGNhbiBhbHNvIGJlIHNvdXJjZWQgZnJvbSB0aGUgYEFSTV9VU0VfTVNJYCBFbnZpcm9ubWVudCBWYXJpYWJsZS4gRGVmYXVsdHMgdG8gYGZhbHNlYC5cbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2F6dXJlL2F6YXBpLzIuNy4wL2RvY3MjdXNlX21zaSBBemFwaVByb3ZpZGVyI3VzZV9tc2l9XG4gICovXG4gIHJlYWRvbmx5IHVzZU1zaT86IGJvb2xlYW4gfCBjZGt0Zi5JUmVzb2x2YWJsZTtcbiAgLyoqXG4gICogU2hvdWxkIE9JREMgYmUgdXNlZCBmb3IgQXV0aGVudGljYXRpb24/IFRoaXMgY2FuIGFsc28gYmUgc291cmNlZCBmcm9tIHRoZSBgQVJNX1VTRV9PSURDYCBFbnZpcm9ubWVudCBWYXJpYWJsZS4gRGVmYXVsdHMgdG8gYGZhbHNlYC5cbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2F6dXJlL2F6YXBpLzIuNy4wL2RvY3MjdXNlX29pZGMgQXphcGlQcm92aWRlciN1c2Vfb2lkY31cbiAgKi9cbiAgcmVhZG9ubHkgdXNlT2lkYz86IGJvb2xlYW4gfCBjZGt0Zi5JUmVzb2x2YWJsZTtcbiAgLyoqXG4gICogQWxpYXMgbmFtZVxuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvYXp1cmUvYXphcGkvMi43LjAvZG9jcyNhbGlhcyBBemFwaVByb3ZpZGVyI2FsaWFzfVxuICAqL1xuICByZWFkb25seSBhbGlhcz86IHN0cmluZztcbn1cbmV4cG9ydCBpbnRlcmZhY2UgQXphcGlQcm92aWRlckVuZHBvaW50IHtcbiAgLyoqXG4gICogVGhlIEF6dXJlIEFjdGl2ZSBEaXJlY3RvcnkgbG9naW4gZW5kcG9pbnQgdG8gdXNlLiBUaGlzIGNhbiBhbHNvIGJlIHNvdXJjZWQgZnJvbSB0aGUgYEFSTV9BQ1RJVkVfRElSRUNUT1JZX0FVVEhPUklUWV9IT1NUYCBFbnZpcm9ubWVudCBWYXJpYWJsZS4gRGVmYXVsdHMgdG8gYGh0dHBzOi8vbG9naW4ubWljcm9zb2Z0b25saW5lLmNvbS9gIGZvciBwdWJsaWMgY2xvdWQuXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9henVyZS9hemFwaS8yLjcuMC9kb2NzI2FjdGl2ZV9kaXJlY3RvcnlfYXV0aG9yaXR5X2hvc3QgQXphcGlQcm92aWRlciNhY3RpdmVfZGlyZWN0b3J5X2F1dGhvcml0eV9ob3N0fVxuICAqL1xuICByZWFkb25seSBhY3RpdmVEaXJlY3RvcnlBdXRob3JpdHlIb3N0Pzogc3RyaW5nO1xuICAvKipcbiAgKiBUaGUgcmVzb3VyY2UgSUQgdG8gb2J0YWluIEFEIHRva2VucyBmb3IuIFRoaXMgY2FuIGFsc28gYmUgc291cmNlZCBmcm9tIHRoZSBgQVJNX1JFU09VUkNFX01BTkFHRVJfQVVESUVOQ0VgIEVudmlyb25tZW50IFZhcmlhYmxlLiBEZWZhdWx0cyB0byBgaHR0cHM6Ly9tYW5hZ2VtZW50LmNvcmUud2luZG93cy5uZXQvYCBmb3IgcHVibGljIGNsb3VkLlxuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvYXp1cmUvYXphcGkvMi43LjAvZG9jcyNyZXNvdXJjZV9tYW5hZ2VyX2F1ZGllbmNlIEF6YXBpUHJvdmlkZXIjcmVzb3VyY2VfbWFuYWdlcl9hdWRpZW5jZX1cbiAgKi9cbiAgcmVhZG9ubHkgcmVzb3VyY2VNYW5hZ2VyQXVkaWVuY2U/OiBzdHJpbmc7XG4gIC8qKlxuICAqIFRoZSBBenVyZSBSZXNvdXJjZSBNYW5hZ2VyIGVuZHBvaW50IHRvIHVzZS4gVGhpcyBjYW4gYWxzbyBiZSBzb3VyY2VkIGZyb20gdGhlIGBBUk1fUkVTT1VSQ0VfTUFOQUdFUl9FTkRQT0lOVGAgRW52aXJvbm1lbnQgVmFyaWFibGUuIERlZmF1bHRzIHRvIGBodHRwczovL21hbmFnZW1lbnQuYXp1cmUuY29tL2AgZm9yIHB1YmxpYyBjbG91ZC5cbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2F6dXJlL2F6YXBpLzIuNy4wL2RvY3MjcmVzb3VyY2VfbWFuYWdlcl9lbmRwb2ludCBBemFwaVByb3ZpZGVyI3Jlc291cmNlX21hbmFnZXJfZW5kcG9pbnR9XG4gICovXG4gIHJlYWRvbmx5IHJlc291cmNlTWFuYWdlckVuZHBvaW50Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXphcGlQcm92aWRlckVuZHBvaW50VG9UZXJyYWZvcm0oc3RydWN0PzogQXphcGlQcm92aWRlckVuZHBvaW50IHwgY2RrdGYuSVJlc29sdmFibGUpOiBhbnkge1xuICBpZiAoIWNka3RmLmNhbkluc3BlY3Qoc3RydWN0KSB8fCBjZGt0Zi5Ub2tlbml6YXRpb24uaXNSZXNvbHZhYmxlKHN0cnVjdCkpIHsgcmV0dXJuIHN0cnVjdDsgfVxuICBpZiAoY2RrdGYuaXNDb21wbGV4RWxlbWVudChzdHJ1Y3QpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQSBjb21wbGV4IGVsZW1lbnQgd2FzIHVzZWQgYXMgY29uZmlndXJhdGlvbiwgdGhpcyBpcyBub3Qgc3VwcG9ydGVkOiBodHRwczovL2Nkay50Zi9jb21wbGV4LW9iamVjdC1hcy1jb25maWd1cmF0aW9uXCIpO1xuICB9XG4gIHJldHVybiB7XG4gICAgYWN0aXZlX2RpcmVjdG9yeV9hdXRob3JpdHlfaG9zdDogY2RrdGYuc3RyaW5nVG9UZXJyYWZvcm0oc3RydWN0IS5hY3RpdmVEaXJlY3RvcnlBdXRob3JpdHlIb3N0KSxcbiAgICByZXNvdXJjZV9tYW5hZ2VyX2F1ZGllbmNlOiBjZGt0Zi5zdHJpbmdUb1RlcnJhZm9ybShzdHJ1Y3QhLnJlc291cmNlTWFuYWdlckF1ZGllbmNlKSxcbiAgICByZXNvdXJjZV9tYW5hZ2VyX2VuZHBvaW50OiBjZGt0Zi5zdHJpbmdUb1RlcnJhZm9ybShzdHJ1Y3QhLnJlc291cmNlTWFuYWdlckVuZHBvaW50KSxcbiAgfVxufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBhemFwaVByb3ZpZGVyRW5kcG9pbnRUb0hjbFRlcnJhZm9ybShzdHJ1Y3Q/OiBBemFwaVByb3ZpZGVyRW5kcG9pbnQgfCBjZGt0Zi5JUmVzb2x2YWJsZSk6IGFueSB7XG4gIGlmICghY2RrdGYuY2FuSW5zcGVjdChzdHJ1Y3QpIHx8IGNka3RmLlRva2VuaXphdGlvbi5pc1Jlc29sdmFibGUoc3RydWN0KSkgeyByZXR1cm4gc3RydWN0OyB9XG4gIGlmIChjZGt0Zi5pc0NvbXBsZXhFbGVtZW50KHN0cnVjdCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJBIGNvbXBsZXggZWxlbWVudCB3YXMgdXNlZCBhcyBjb25maWd1cmF0aW9uLCB0aGlzIGlzIG5vdCBzdXBwb3J0ZWQ6IGh0dHBzOi8vY2RrLnRmL2NvbXBsZXgtb2JqZWN0LWFzLWNvbmZpZ3VyYXRpb25cIik7XG4gIH1cbiAgY29uc3QgYXR0cnMgPSB7XG4gICAgYWN0aXZlX2RpcmVjdG9yeV9hdXRob3JpdHlfaG9zdDoge1xuICAgICAgdmFsdWU6IGNka3RmLnN0cmluZ1RvSGNsVGVycmFmb3JtKHN0cnVjdCEuYWN0aXZlRGlyZWN0b3J5QXV0aG9yaXR5SG9zdCksXG4gICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcInN0cmluZ1wiLFxuICAgIH0sXG4gICAgcmVzb3VyY2VfbWFuYWdlcl9hdWRpZW5jZToge1xuICAgICAgdmFsdWU6IGNka3RmLnN0cmluZ1RvSGNsVGVycmFmb3JtKHN0cnVjdCEucmVzb3VyY2VNYW5hZ2VyQXVkaWVuY2UpLFxuICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJzdHJpbmdcIixcbiAgICB9LFxuICAgIHJlc291cmNlX21hbmFnZXJfZW5kcG9pbnQ6IHtcbiAgICAgIHZhbHVlOiBjZGt0Zi5zdHJpbmdUb0hjbFRlcnJhZm9ybShzdHJ1Y3QhLnJlc291cmNlTWFuYWdlckVuZHBvaW50KSxcbiAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgfSxcbiAgfTtcblxuICAvLyByZW1vdmUgdW5kZWZpbmVkIGF0dHJpYnV0ZXNcbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhhdHRycykuZmlsdGVyKChbXywgdmFsdWVdKSA9PiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlLnZhbHVlICE9PSB1bmRlZmluZWQpKTtcbn1cblxuXG4vKipcbiogUmVwcmVzZW50cyBhIHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvYXp1cmUvYXphcGkvMi43LjAvZG9jcyBhemFwaX1cbiovXG5leHBvcnQgY2xhc3MgQXphcGlQcm92aWRlciBleHRlbmRzIGNka3RmLlRlcnJhZm9ybVByb3ZpZGVyIHtcblxuICAvLyA9PT09PT09PT09PT09PT09PVxuICAvLyBTVEFUSUMgUFJPUEVSVElFU1xuICAvLyA9PT09PT09PT09PT09PT09PVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IHRmUmVzb3VyY2VUeXBlID0gXCJhemFwaVwiO1xuXG4gIC8vID09PT09PT09PT09PT09XG4gIC8vIFNUQVRJQyBNZXRob2RzXG4gIC8vID09PT09PT09PT09PT09XG4gIC8qKlxuICAqIEdlbmVyYXRlcyBDREtURiBjb2RlIGZvciBpbXBvcnRpbmcgYSBBemFwaVByb3ZpZGVyIHJlc291cmNlIHVwb24gcnVubmluZyBcImNka3RmIHBsYW4gPHN0YWNrLW5hbWU+XCJcbiAgKiBAcGFyYW0gc2NvcGUgVGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIGNvbnN0cnVjdFxuICAqIEBwYXJhbSBpbXBvcnRUb0lkIFRoZSBjb25zdHJ1Y3QgaWQgdXNlZCBpbiB0aGUgZ2VuZXJhdGVkIGNvbmZpZyBmb3IgdGhlIEF6YXBpUHJvdmlkZXIgdG8gaW1wb3J0XG4gICogQHBhcmFtIGltcG9ydEZyb21JZCBUaGUgaWQgb2YgdGhlIGV4aXN0aW5nIEF6YXBpUHJvdmlkZXIgdGhhdCBzaG91bGQgYmUgaW1wb3J0ZWQuIFJlZmVyIHRvIHRoZSB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2F6dXJlL2F6YXBpLzIuNy4wL2RvY3MjaW1wb3J0IGltcG9ydCBzZWN0aW9ufSBpbiB0aGUgZG9jdW1lbnRhdGlvbiBvZiB0aGlzIHJlc291cmNlIGZvciB0aGUgaWQgdG8gdXNlXG4gICogQHBhcmFtIHByb3ZpZGVyPyBPcHRpb25hbCBpbnN0YW5jZSBvZiB0aGUgcHJvdmlkZXIgd2hlcmUgdGhlIEF6YXBpUHJvdmlkZXIgdG8gaW1wb3J0IGlzIGZvdW5kXG4gICovXG4gIHB1YmxpYyBzdGF0aWMgZ2VuZXJhdGVDb25maWdGb3JJbXBvcnQoc2NvcGU6IENvbnN0cnVjdCwgaW1wb3J0VG9JZDogc3RyaW5nLCBpbXBvcnRGcm9tSWQ6IHN0cmluZywgcHJvdmlkZXI/OiBjZGt0Zi5UZXJyYWZvcm1Qcm92aWRlcikge1xuICAgICAgICByZXR1cm4gbmV3IGNka3RmLkltcG9ydGFibGVSZXNvdXJjZShzY29wZSwgaW1wb3J0VG9JZCwgeyB0ZXJyYWZvcm1SZXNvdXJjZVR5cGU6IFwiYXphcGlcIiwgaW1wb3J0SWQ6IGltcG9ydEZyb21JZCwgcHJvdmlkZXIgfSk7XG4gICAgICB9XG5cbiAgLy8gPT09PT09PT09PT1cbiAgLy8gSU5JVElBTElaRVJcbiAgLy8gPT09PT09PT09PT1cblxuICAvKipcbiAgKiBDcmVhdGUgYSBuZXcge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9henVyZS9hemFwaS8yLjcuMC9kb2NzIGF6YXBpfSBSZXNvdXJjZVxuICAqXG4gICogQHBhcmFtIHNjb3BlIFRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBjb25zdHJ1Y3RcbiAgKiBAcGFyYW0gaWQgVGhlIHNjb3BlZCBjb25zdHJ1Y3QgSUQuIE11c3QgYmUgdW5pcXVlIGFtb25nc3Qgc2libGluZ3MgaW4gdGhlIHNhbWUgc2NvcGVcbiAgKiBAcGFyYW0gb3B0aW9ucyBBemFwaVByb3ZpZGVyQ29uZmlnID0ge31cbiAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIGNvbmZpZzogQXphcGlQcm92aWRlckNvbmZpZyA9IHt9KSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICB0ZXJyYWZvcm1SZXNvdXJjZVR5cGU6ICdhemFwaScsXG4gICAgICB0ZXJyYWZvcm1HZW5lcmF0b3JNZXRhZGF0YToge1xuICAgICAgICBwcm92aWRlck5hbWU6ICdhemFwaScsXG4gICAgICAgIHByb3ZpZGVyVmVyc2lvbjogJzIuNy4wJyxcbiAgICAgICAgcHJvdmlkZXJWZXJzaW9uQ29uc3RyYWludDogJ34+IDIuNy4wJ1xuICAgICAgfSxcbiAgICAgIHRlcnJhZm9ybVByb3ZpZGVyU291cmNlOiAnQXp1cmUvYXphcGknXG4gICAgfSk7XG4gICAgdGhpcy5fYXV4aWxpYXJ5VGVuYW50SWRzID0gY29uZmlnLmF1eGlsaWFyeVRlbmFudElkcztcbiAgICB0aGlzLl9jbGllbnRDZXJ0aWZpY2F0ZSA9IGNvbmZpZy5jbGllbnRDZXJ0aWZpY2F0ZTtcbiAgICB0aGlzLl9jbGllbnRDZXJ0aWZpY2F0ZVBhc3N3b3JkID0gY29uZmlnLmNsaWVudENlcnRpZmljYXRlUGFzc3dvcmQ7XG4gICAgdGhpcy5fY2xpZW50Q2VydGlmaWNhdGVQYXRoID0gY29uZmlnLmNsaWVudENlcnRpZmljYXRlUGF0aDtcbiAgICB0aGlzLl9jbGllbnRJZCA9IGNvbmZpZy5jbGllbnRJZDtcbiAgICB0aGlzLl9jbGllbnRJZEZpbGVQYXRoID0gY29uZmlnLmNsaWVudElkRmlsZVBhdGg7XG4gICAgdGhpcy5fY2xpZW50U2VjcmV0ID0gY29uZmlnLmNsaWVudFNlY3JldDtcbiAgICB0aGlzLl9jbGllbnRTZWNyZXRGaWxlUGF0aCA9IGNvbmZpZy5jbGllbnRTZWNyZXRGaWxlUGF0aDtcbiAgICB0aGlzLl9jdXN0b21Db3JyZWxhdGlvblJlcXVlc3RJZCA9IGNvbmZpZy5jdXN0b21Db3JyZWxhdGlvblJlcXVlc3RJZDtcbiAgICB0aGlzLl9kZWZhdWx0TG9jYXRpb24gPSBjb25maWcuZGVmYXVsdExvY2F0aW9uO1xuICAgIHRoaXMuX2RlZmF1bHROYW1lID0gY29uZmlnLmRlZmF1bHROYW1lO1xuICAgIHRoaXMuX2RlZmF1bHRUYWdzID0gY29uZmlnLmRlZmF1bHRUYWdzO1xuICAgIHRoaXMuX2Rpc2FibGVDb3JyZWxhdGlvblJlcXVlc3RJZCA9IGNvbmZpZy5kaXNhYmxlQ29ycmVsYXRpb25SZXF1ZXN0SWQ7XG4gICAgdGhpcy5fZGlzYWJsZURlZmF1bHRPdXRwdXQgPSBjb25maWcuZGlzYWJsZURlZmF1bHRPdXRwdXQ7XG4gICAgdGhpcy5fZGlzYWJsZUluc3RhbmNlRGlzY292ZXJ5ID0gY29uZmlnLmRpc2FibGVJbnN0YW5jZURpc2NvdmVyeTtcbiAgICB0aGlzLl9kaXNhYmxlVGVycmFmb3JtUGFydG5lcklkID0gY29uZmlnLmRpc2FibGVUZXJyYWZvcm1QYXJ0bmVySWQ7XG4gICAgdGhpcy5fZW5hYmxlUHJlZmxpZ2h0ID0gY29uZmlnLmVuYWJsZVByZWZsaWdodDtcbiAgICB0aGlzLl9lbmRwb2ludCA9IGNvbmZpZy5lbmRwb2ludDtcbiAgICB0aGlzLl9lbnZpcm9ubWVudCA9IGNvbmZpZy5lbnZpcm9ubWVudDtcbiAgICB0aGlzLl9pZ25vcmVOb09wQ2hhbmdlcyA9IGNvbmZpZy5pZ25vcmVOb09wQ2hhbmdlcztcbiAgICB0aGlzLl9tYXhpbXVtQnVzeVJldHJ5QXR0ZW1wdHMgPSBjb25maWcubWF4aW11bUJ1c3lSZXRyeUF0dGVtcHRzO1xuICAgIHRoaXMuX29pZGNBenVyZVNlcnZpY2VDb25uZWN0aW9uSWQgPSBjb25maWcub2lkY0F6dXJlU2VydmljZUNvbm5lY3Rpb25JZDtcbiAgICB0aGlzLl9vaWRjUmVxdWVzdFRva2VuID0gY29uZmlnLm9pZGNSZXF1ZXN0VG9rZW47XG4gICAgdGhpcy5fb2lkY1JlcXVlc3RVcmwgPSBjb25maWcub2lkY1JlcXVlc3RVcmw7XG4gICAgdGhpcy5fb2lkY1Rva2VuID0gY29uZmlnLm9pZGNUb2tlbjtcbiAgICB0aGlzLl9vaWRjVG9rZW5GaWxlUGF0aCA9IGNvbmZpZy5vaWRjVG9rZW5GaWxlUGF0aDtcbiAgICB0aGlzLl9wYXJ0bmVySWQgPSBjb25maWcucGFydG5lcklkO1xuICAgIHRoaXMuX3NraXBQcm92aWRlclJlZ2lzdHJhdGlvbiA9IGNvbmZpZy5za2lwUHJvdmlkZXJSZWdpc3RyYXRpb247XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uSWQgPSBjb25maWcuc3Vic2NyaXB0aW9uSWQ7XG4gICAgdGhpcy5fdGVuYW50SWQgPSBjb25maWcudGVuYW50SWQ7XG4gICAgdGhpcy5fdXNlQWtzV29ya2xvYWRJZGVudGl0eSA9IGNvbmZpZy51c2VBa3NXb3JrbG9hZElkZW50aXR5O1xuICAgIHRoaXMuX3VzZUNsaSA9IGNvbmZpZy51c2VDbGk7XG4gICAgdGhpcy5fdXNlTXNpID0gY29uZmlnLnVzZU1zaTtcbiAgICB0aGlzLl91c2VPaWRjID0gY29uZmlnLnVzZU9pZGM7XG4gICAgdGhpcy5fYWxpYXMgPSBjb25maWcuYWxpYXM7XG4gIH1cblxuICAvLyA9PT09PT09PT09XG4gIC8vIEFUVFJJQlVURVNcbiAgLy8gPT09PT09PT09PVxuXG4gIC8vIGF1eGlsaWFyeV90ZW5hbnRfaWRzIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX2F1eGlsaWFyeVRlbmFudElkcz86IHN0cmluZ1tdOyBcbiAgcHVibGljIGdldCBhdXhpbGlhcnlUZW5hbnRJZHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2F1eGlsaWFyeVRlbmFudElkcztcbiAgfVxuICBwdWJsaWMgc2V0IGF1eGlsaWFyeVRlbmFudElkcyh2YWx1ZTogc3RyaW5nW10gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9hdXhpbGlhcnlUZW5hbnRJZHMgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRBdXhpbGlhcnlUZW5hbnRJZHMoKSB7XG4gICAgdGhpcy5fYXV4aWxpYXJ5VGVuYW50SWRzID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBhdXhpbGlhcnlUZW5hbnRJZHNJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fYXV4aWxpYXJ5VGVuYW50SWRzO1xuICB9XG5cbiAgLy8gY2xpZW50X2NlcnRpZmljYXRlIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX2NsaWVudENlcnRpZmljYXRlPzogc3RyaW5nOyBcbiAgcHVibGljIGdldCBjbGllbnRDZXJ0aWZpY2F0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fY2xpZW50Q2VydGlmaWNhdGU7XG4gIH1cbiAgcHVibGljIHNldCBjbGllbnRDZXJ0aWZpY2F0ZSh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fY2xpZW50Q2VydGlmaWNhdGUgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRDbGllbnRDZXJ0aWZpY2F0ZSgpIHtcbiAgICB0aGlzLl9jbGllbnRDZXJ0aWZpY2F0ZSA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgY2xpZW50Q2VydGlmaWNhdGVJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY2xpZW50Q2VydGlmaWNhdGU7XG4gIH1cblxuICAvLyBjbGllbnRfY2VydGlmaWNhdGVfcGFzc3dvcmQgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfY2xpZW50Q2VydGlmaWNhdGVQYXNzd29yZD86IHN0cmluZzsgXG4gIHB1YmxpYyBnZXQgY2xpZW50Q2VydGlmaWNhdGVQYXNzd29yZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY2xpZW50Q2VydGlmaWNhdGVQYXNzd29yZDtcbiAgfVxuICBwdWJsaWMgc2V0IGNsaWVudENlcnRpZmljYXRlUGFzc3dvcmQodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX2NsaWVudENlcnRpZmljYXRlUGFzc3dvcmQgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRDbGllbnRDZXJ0aWZpY2F0ZVBhc3N3b3JkKCkge1xuICAgIHRoaXMuX2NsaWVudENlcnRpZmljYXRlUGFzc3dvcmQgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IGNsaWVudENlcnRpZmljYXRlUGFzc3dvcmRJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY2xpZW50Q2VydGlmaWNhdGVQYXNzd29yZDtcbiAgfVxuXG4gIC8vIGNsaWVudF9jZXJ0aWZpY2F0ZV9wYXRoIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX2NsaWVudENlcnRpZmljYXRlUGF0aD86IHN0cmluZzsgXG4gIHB1YmxpYyBnZXQgY2xpZW50Q2VydGlmaWNhdGVQYXRoKCkge1xuICAgIHJldHVybiB0aGlzLl9jbGllbnRDZXJ0aWZpY2F0ZVBhdGg7XG4gIH1cbiAgcHVibGljIHNldCBjbGllbnRDZXJ0aWZpY2F0ZVBhdGgodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX2NsaWVudENlcnRpZmljYXRlUGF0aCA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldENsaWVudENlcnRpZmljYXRlUGF0aCgpIHtcbiAgICB0aGlzLl9jbGllbnRDZXJ0aWZpY2F0ZVBhdGggPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IGNsaWVudENlcnRpZmljYXRlUGF0aElucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9jbGllbnRDZXJ0aWZpY2F0ZVBhdGg7XG4gIH1cblxuICAvLyBjbGllbnRfaWQgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfY2xpZW50SWQ/OiBzdHJpbmc7IFxuICBwdWJsaWMgZ2V0IGNsaWVudElkKCkge1xuICAgIHJldHVybiB0aGlzLl9jbGllbnRJZDtcbiAgfVxuICBwdWJsaWMgc2V0IGNsaWVudElkKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9jbGllbnRJZCA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldENsaWVudElkKCkge1xuICAgIHRoaXMuX2NsaWVudElkID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBjbGllbnRJZElucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9jbGllbnRJZDtcbiAgfVxuXG4gIC8vIGNsaWVudF9pZF9maWxlX3BhdGggLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfY2xpZW50SWRGaWxlUGF0aD86IHN0cmluZzsgXG4gIHB1YmxpYyBnZXQgY2xpZW50SWRGaWxlUGF0aCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY2xpZW50SWRGaWxlUGF0aDtcbiAgfVxuICBwdWJsaWMgc2V0IGNsaWVudElkRmlsZVBhdGgodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX2NsaWVudElkRmlsZVBhdGggPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRDbGllbnRJZEZpbGVQYXRoKCkge1xuICAgIHRoaXMuX2NsaWVudElkRmlsZVBhdGggPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IGNsaWVudElkRmlsZVBhdGhJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY2xpZW50SWRGaWxlUGF0aDtcbiAgfVxuXG4gIC8vIGNsaWVudF9zZWNyZXQgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfY2xpZW50U2VjcmV0Pzogc3RyaW5nOyBcbiAgcHVibGljIGdldCBjbGllbnRTZWNyZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NsaWVudFNlY3JldDtcbiAgfVxuICBwdWJsaWMgc2V0IGNsaWVudFNlY3JldCh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fY2xpZW50U2VjcmV0ID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0Q2xpZW50U2VjcmV0KCkge1xuICAgIHRoaXMuX2NsaWVudFNlY3JldCA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgY2xpZW50U2VjcmV0SW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NsaWVudFNlY3JldDtcbiAgfVxuXG4gIC8vIGNsaWVudF9zZWNyZXRfZmlsZV9wYXRoIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX2NsaWVudFNlY3JldEZpbGVQYXRoPzogc3RyaW5nOyBcbiAgcHVibGljIGdldCBjbGllbnRTZWNyZXRGaWxlUGF0aCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY2xpZW50U2VjcmV0RmlsZVBhdGg7XG4gIH1cbiAgcHVibGljIHNldCBjbGllbnRTZWNyZXRGaWxlUGF0aCh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fY2xpZW50U2VjcmV0RmlsZVBhdGggPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRDbGllbnRTZWNyZXRGaWxlUGF0aCgpIHtcbiAgICB0aGlzLl9jbGllbnRTZWNyZXRGaWxlUGF0aCA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgY2xpZW50U2VjcmV0RmlsZVBhdGhJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY2xpZW50U2VjcmV0RmlsZVBhdGg7XG4gIH1cblxuICAvLyBjdXN0b21fY29ycmVsYXRpb25fcmVxdWVzdF9pZCAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9jdXN0b21Db3JyZWxhdGlvblJlcXVlc3RJZD86IHN0cmluZzsgXG4gIHB1YmxpYyBnZXQgY3VzdG9tQ29ycmVsYXRpb25SZXF1ZXN0SWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2N1c3RvbUNvcnJlbGF0aW9uUmVxdWVzdElkO1xuICB9XG4gIHB1YmxpYyBzZXQgY3VzdG9tQ29ycmVsYXRpb25SZXF1ZXN0SWQodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX2N1c3RvbUNvcnJlbGF0aW9uUmVxdWVzdElkID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0Q3VzdG9tQ29ycmVsYXRpb25SZXF1ZXN0SWQoKSB7XG4gICAgdGhpcy5fY3VzdG9tQ29ycmVsYXRpb25SZXF1ZXN0SWQgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IGN1c3RvbUNvcnJlbGF0aW9uUmVxdWVzdElkSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2N1c3RvbUNvcnJlbGF0aW9uUmVxdWVzdElkO1xuICB9XG5cbiAgLy8gZGVmYXVsdF9sb2NhdGlvbiAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9kZWZhdWx0TG9jYXRpb24/OiBzdHJpbmc7IFxuICBwdWJsaWMgZ2V0IGRlZmF1bHRMb2NhdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5fZGVmYXVsdExvY2F0aW9uO1xuICB9XG4gIHB1YmxpYyBzZXQgZGVmYXVsdExvY2F0aW9uKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9kZWZhdWx0TG9jYXRpb24gPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXREZWZhdWx0TG9jYXRpb24oKSB7XG4gICAgdGhpcy5fZGVmYXVsdExvY2F0aW9uID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBkZWZhdWx0TG9jYXRpb25JbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZGVmYXVsdExvY2F0aW9uO1xuICB9XG5cbiAgLy8gZGVmYXVsdF9uYW1lIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX2RlZmF1bHROYW1lPzogc3RyaW5nOyBcbiAgcHVibGljIGdldCBkZWZhdWx0TmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fZGVmYXVsdE5hbWU7XG4gIH1cbiAgcHVibGljIHNldCBkZWZhdWx0TmFtZSh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fZGVmYXVsdE5hbWUgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXREZWZhdWx0TmFtZSgpIHtcbiAgICB0aGlzLl9kZWZhdWx0TmFtZSA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgZGVmYXVsdE5hbWVJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZGVmYXVsdE5hbWU7XG4gIH1cblxuICAvLyBkZWZhdWx0X3RhZ3MgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfZGVmYXVsdFRhZ3M/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9OyBcbiAgcHVibGljIGdldCBkZWZhdWx0VGFncygpIHtcbiAgICByZXR1cm4gdGhpcy5fZGVmYXVsdFRhZ3M7XG4gIH1cbiAgcHVibGljIHNldCBkZWZhdWx0VGFncyh2YWx1ZTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX2RlZmF1bHRUYWdzID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0RGVmYXVsdFRhZ3MoKSB7XG4gICAgdGhpcy5fZGVmYXVsdFRhZ3MgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IGRlZmF1bHRUYWdzSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RlZmF1bHRUYWdzO1xuICB9XG5cbiAgLy8gZGlzYWJsZV9jb3JyZWxhdGlvbl9yZXF1ZXN0X2lkIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX2Rpc2FibGVDb3JyZWxhdGlvblJlcXVlc3RJZD86IGJvb2xlYW4gfCBjZGt0Zi5JUmVzb2x2YWJsZTsgXG4gIHB1YmxpYyBnZXQgZGlzYWJsZUNvcnJlbGF0aW9uUmVxdWVzdElkKCkge1xuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlQ29ycmVsYXRpb25SZXF1ZXN0SWQ7XG4gIH1cbiAgcHVibGljIHNldCBkaXNhYmxlQ29ycmVsYXRpb25SZXF1ZXN0SWQodmFsdWU6IGJvb2xlYW4gfCBjZGt0Zi5JUmVzb2x2YWJsZSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX2Rpc2FibGVDb3JyZWxhdGlvblJlcXVlc3RJZCA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldERpc2FibGVDb3JyZWxhdGlvblJlcXVlc3RJZCgpIHtcbiAgICB0aGlzLl9kaXNhYmxlQ29ycmVsYXRpb25SZXF1ZXN0SWQgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IGRpc2FibGVDb3JyZWxhdGlvblJlcXVlc3RJZElucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlQ29ycmVsYXRpb25SZXF1ZXN0SWQ7XG4gIH1cblxuICAvLyBkaXNhYmxlX2RlZmF1bHRfb3V0cHV0IC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX2Rpc2FibGVEZWZhdWx0T3V0cHV0PzogYm9vbGVhbiB8IGNka3RmLklSZXNvbHZhYmxlOyBcbiAgcHVibGljIGdldCBkaXNhYmxlRGVmYXVsdE91dHB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzYWJsZURlZmF1bHRPdXRwdXQ7XG4gIH1cbiAgcHVibGljIHNldCBkaXNhYmxlRGVmYXVsdE91dHB1dCh2YWx1ZTogYm9vbGVhbiB8IGNka3RmLklSZXNvbHZhYmxlIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fZGlzYWJsZURlZmF1bHRPdXRwdXQgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXREaXNhYmxlRGVmYXVsdE91dHB1dCgpIHtcbiAgICB0aGlzLl9kaXNhYmxlRGVmYXVsdE91dHB1dCA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgZGlzYWJsZURlZmF1bHRPdXRwdXRJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzYWJsZURlZmF1bHRPdXRwdXQ7XG4gIH1cblxuICAvLyBkaXNhYmxlX2luc3RhbmNlX2Rpc2NvdmVyeSAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9kaXNhYmxlSW5zdGFuY2VEaXNjb3Zlcnk/OiBib29sZWFuIHwgY2RrdGYuSVJlc29sdmFibGU7IFxuICBwdWJsaWMgZ2V0IGRpc2FibGVJbnN0YW5jZURpc2NvdmVyeSgpIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzYWJsZUluc3RhbmNlRGlzY292ZXJ5O1xuICB9XG4gIHB1YmxpYyBzZXQgZGlzYWJsZUluc3RhbmNlRGlzY292ZXJ5KHZhbHVlOiBib29sZWFuIHwgY2RrdGYuSVJlc29sdmFibGUgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9kaXNhYmxlSW5zdGFuY2VEaXNjb3ZlcnkgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXREaXNhYmxlSW5zdGFuY2VEaXNjb3ZlcnkoKSB7XG4gICAgdGhpcy5fZGlzYWJsZUluc3RhbmNlRGlzY292ZXJ5ID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBkaXNhYmxlSW5zdGFuY2VEaXNjb3ZlcnlJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzYWJsZUluc3RhbmNlRGlzY292ZXJ5O1xuICB9XG5cbiAgLy8gZGlzYWJsZV90ZXJyYWZvcm1fcGFydG5lcl9pZCAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9kaXNhYmxlVGVycmFmb3JtUGFydG5lcklkPzogYm9vbGVhbiB8IGNka3RmLklSZXNvbHZhYmxlOyBcbiAgcHVibGljIGdldCBkaXNhYmxlVGVycmFmb3JtUGFydG5lcklkKCkge1xuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlVGVycmFmb3JtUGFydG5lcklkO1xuICB9XG4gIHB1YmxpYyBzZXQgZGlzYWJsZVRlcnJhZm9ybVBhcnRuZXJJZCh2YWx1ZTogYm9vbGVhbiB8IGNka3RmLklSZXNvbHZhYmxlIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fZGlzYWJsZVRlcnJhZm9ybVBhcnRuZXJJZCA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldERpc2FibGVUZXJyYWZvcm1QYXJ0bmVySWQoKSB7XG4gICAgdGhpcy5fZGlzYWJsZVRlcnJhZm9ybVBhcnRuZXJJZCA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgZGlzYWJsZVRlcnJhZm9ybVBhcnRuZXJJZElucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlVGVycmFmb3JtUGFydG5lcklkO1xuICB9XG5cbiAgLy8gZW5hYmxlX3ByZWZsaWdodCAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9lbmFibGVQcmVmbGlnaHQ/OiBib29sZWFuIHwgY2RrdGYuSVJlc29sdmFibGU7IFxuICBwdWJsaWMgZ2V0IGVuYWJsZVByZWZsaWdodCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZW5hYmxlUHJlZmxpZ2h0O1xuICB9XG4gIHB1YmxpYyBzZXQgZW5hYmxlUHJlZmxpZ2h0KHZhbHVlOiBib29sZWFuIHwgY2RrdGYuSVJlc29sdmFibGUgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9lbmFibGVQcmVmbGlnaHQgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRFbmFibGVQcmVmbGlnaHQoKSB7XG4gICAgdGhpcy5fZW5hYmxlUHJlZmxpZ2h0ID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBlbmFibGVQcmVmbGlnaHRJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZW5hYmxlUHJlZmxpZ2h0O1xuICB9XG5cbiAgLy8gZW5kcG9pbnQgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfZW5kcG9pbnQ/OiBBemFwaVByb3ZpZGVyRW5kcG9pbnRbXSB8IGNka3RmLklSZXNvbHZhYmxlOyBcbiAgcHVibGljIGdldCBlbmRwb2ludCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZW5kcG9pbnQ7XG4gIH1cbiAgcHVibGljIHNldCBlbmRwb2ludCh2YWx1ZTogQXphcGlQcm92aWRlckVuZHBvaW50W10gfCBjZGt0Zi5JUmVzb2x2YWJsZSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX2VuZHBvaW50ID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0RW5kcG9pbnQoKSB7XG4gICAgdGhpcy5fZW5kcG9pbnQgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IGVuZHBvaW50SW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2VuZHBvaW50O1xuICB9XG5cbiAgLy8gZW52aXJvbm1lbnQgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfZW52aXJvbm1lbnQ/OiBzdHJpbmc7IFxuICBwdWJsaWMgZ2V0IGVudmlyb25tZW50KCkge1xuICAgIHJldHVybiB0aGlzLl9lbnZpcm9ubWVudDtcbiAgfVxuICBwdWJsaWMgc2V0IGVudmlyb25tZW50KHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9lbnZpcm9ubWVudCA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldEVudmlyb25tZW50KCkge1xuICAgIHRoaXMuX2Vudmlyb25tZW50ID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBlbnZpcm9ubWVudElucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9lbnZpcm9ubWVudDtcbiAgfVxuXG4gIC8vIGlnbm9yZV9ub19vcF9jaGFuZ2VzIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX2lnbm9yZU5vT3BDaGFuZ2VzPzogYm9vbGVhbiB8IGNka3RmLklSZXNvbHZhYmxlOyBcbiAgcHVibGljIGdldCBpZ25vcmVOb09wQ2hhbmdlcygpIHtcbiAgICByZXR1cm4gdGhpcy5faWdub3JlTm9PcENoYW5nZXM7XG4gIH1cbiAgcHVibGljIHNldCBpZ25vcmVOb09wQ2hhbmdlcyh2YWx1ZTogYm9vbGVhbiB8IGNka3RmLklSZXNvbHZhYmxlIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5faWdub3JlTm9PcENoYW5nZXMgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRJZ25vcmVOb09wQ2hhbmdlcygpIHtcbiAgICB0aGlzLl9pZ25vcmVOb09wQ2hhbmdlcyA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgaWdub3JlTm9PcENoYW5nZXNJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5faWdub3JlTm9PcENoYW5nZXM7XG4gIH1cblxuICAvLyBtYXhpbXVtX2J1c3lfcmV0cnlfYXR0ZW1wdHMgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfbWF4aW11bUJ1c3lSZXRyeUF0dGVtcHRzPzogbnVtYmVyOyBcbiAgcHVibGljIGdldCBtYXhpbXVtQnVzeVJldHJ5QXR0ZW1wdHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX21heGltdW1CdXN5UmV0cnlBdHRlbXB0cztcbiAgfVxuICBwdWJsaWMgc2V0IG1heGltdW1CdXN5UmV0cnlBdHRlbXB0cyh2YWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fbWF4aW11bUJ1c3lSZXRyeUF0dGVtcHRzID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0TWF4aW11bUJ1c3lSZXRyeUF0dGVtcHRzKCkge1xuICAgIHRoaXMuX21heGltdW1CdXN5UmV0cnlBdHRlbXB0cyA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgbWF4aW11bUJ1c3lSZXRyeUF0dGVtcHRzSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX21heGltdW1CdXN5UmV0cnlBdHRlbXB0cztcbiAgfVxuXG4gIC8vIG9pZGNfYXp1cmVfc2VydmljZV9jb25uZWN0aW9uX2lkIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX29pZGNBenVyZVNlcnZpY2VDb25uZWN0aW9uSWQ/OiBzdHJpbmc7IFxuICBwdWJsaWMgZ2V0IG9pZGNBenVyZVNlcnZpY2VDb25uZWN0aW9uSWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX29pZGNBenVyZVNlcnZpY2VDb25uZWN0aW9uSWQ7XG4gIH1cbiAgcHVibGljIHNldCBvaWRjQXp1cmVTZXJ2aWNlQ29ubmVjdGlvbklkKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9vaWRjQXp1cmVTZXJ2aWNlQ29ubmVjdGlvbklkID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0T2lkY0F6dXJlU2VydmljZUNvbm5lY3Rpb25JZCgpIHtcbiAgICB0aGlzLl9vaWRjQXp1cmVTZXJ2aWNlQ29ubmVjdGlvbklkID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBvaWRjQXp1cmVTZXJ2aWNlQ29ubmVjdGlvbklkSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX29pZGNBenVyZVNlcnZpY2VDb25uZWN0aW9uSWQ7XG4gIH1cblxuICAvLyBvaWRjX3JlcXVlc3RfdG9rZW4gLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfb2lkY1JlcXVlc3RUb2tlbj86IHN0cmluZzsgXG4gIHB1YmxpYyBnZXQgb2lkY1JlcXVlc3RUb2tlbigpIHtcbiAgICByZXR1cm4gdGhpcy5fb2lkY1JlcXVlc3RUb2tlbjtcbiAgfVxuICBwdWJsaWMgc2V0IG9pZGNSZXF1ZXN0VG9rZW4odmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX29pZGNSZXF1ZXN0VG9rZW4gPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRPaWRjUmVxdWVzdFRva2VuKCkge1xuICAgIHRoaXMuX29pZGNSZXF1ZXN0VG9rZW4gPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IG9pZGNSZXF1ZXN0VG9rZW5JbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fb2lkY1JlcXVlc3RUb2tlbjtcbiAgfVxuXG4gIC8vIG9pZGNfcmVxdWVzdF91cmwgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfb2lkY1JlcXVlc3RVcmw/OiBzdHJpbmc7IFxuICBwdWJsaWMgZ2V0IG9pZGNSZXF1ZXN0VXJsKCkge1xuICAgIHJldHVybiB0aGlzLl9vaWRjUmVxdWVzdFVybDtcbiAgfVxuICBwdWJsaWMgc2V0IG9pZGNSZXF1ZXN0VXJsKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9vaWRjUmVxdWVzdFVybCA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldE9pZGNSZXF1ZXN0VXJsKCkge1xuICAgIHRoaXMuX29pZGNSZXF1ZXN0VXJsID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBvaWRjUmVxdWVzdFVybElucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9vaWRjUmVxdWVzdFVybDtcbiAgfVxuXG4gIC8vIG9pZGNfdG9rZW4gLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfb2lkY1Rva2VuPzogc3RyaW5nOyBcbiAgcHVibGljIGdldCBvaWRjVG9rZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuX29pZGNUb2tlbjtcbiAgfVxuICBwdWJsaWMgc2V0IG9pZGNUb2tlbih2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fb2lkY1Rva2VuID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0T2lkY1Rva2VuKCkge1xuICAgIHRoaXMuX29pZGNUb2tlbiA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgb2lkY1Rva2VuSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX29pZGNUb2tlbjtcbiAgfVxuXG4gIC8vIG9pZGNfdG9rZW5fZmlsZV9wYXRoIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX29pZGNUb2tlbkZpbGVQYXRoPzogc3RyaW5nOyBcbiAgcHVibGljIGdldCBvaWRjVG9rZW5GaWxlUGF0aCgpIHtcbiAgICByZXR1cm4gdGhpcy5fb2lkY1Rva2VuRmlsZVBhdGg7XG4gIH1cbiAgcHVibGljIHNldCBvaWRjVG9rZW5GaWxlUGF0aCh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fb2lkY1Rva2VuRmlsZVBhdGggPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRPaWRjVG9rZW5GaWxlUGF0aCgpIHtcbiAgICB0aGlzLl9vaWRjVG9rZW5GaWxlUGF0aCA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgb2lkY1Rva2VuRmlsZVBhdGhJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fb2lkY1Rva2VuRmlsZVBhdGg7XG4gIH1cblxuICAvLyBwYXJ0bmVyX2lkIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX3BhcnRuZXJJZD86IHN0cmluZzsgXG4gIHB1YmxpYyBnZXQgcGFydG5lcklkKCkge1xuICAgIHJldHVybiB0aGlzLl9wYXJ0bmVySWQ7XG4gIH1cbiAgcHVibGljIHNldCBwYXJ0bmVySWQodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX3BhcnRuZXJJZCA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldFBhcnRuZXJJZCgpIHtcbiAgICB0aGlzLl9wYXJ0bmVySWQgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IHBhcnRuZXJJZElucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9wYXJ0bmVySWQ7XG4gIH1cblxuICAvLyBza2lwX3Byb3ZpZGVyX3JlZ2lzdHJhdGlvbiAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9za2lwUHJvdmlkZXJSZWdpc3RyYXRpb24/OiBib29sZWFuIHwgY2RrdGYuSVJlc29sdmFibGU7IFxuICBwdWJsaWMgZ2V0IHNraXBQcm92aWRlclJlZ2lzdHJhdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5fc2tpcFByb3ZpZGVyUmVnaXN0cmF0aW9uO1xuICB9XG4gIHB1YmxpYyBzZXQgc2tpcFByb3ZpZGVyUmVnaXN0cmF0aW9uKHZhbHVlOiBib29sZWFuIHwgY2RrdGYuSVJlc29sdmFibGUgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9za2lwUHJvdmlkZXJSZWdpc3RyYXRpb24gPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRTa2lwUHJvdmlkZXJSZWdpc3RyYXRpb24oKSB7XG4gICAgdGhpcy5fc2tpcFByb3ZpZGVyUmVnaXN0cmF0aW9uID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBza2lwUHJvdmlkZXJSZWdpc3RyYXRpb25JbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2tpcFByb3ZpZGVyUmVnaXN0cmF0aW9uO1xuICB9XG5cbiAgLy8gc3Vic2NyaXB0aW9uX2lkIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX3N1YnNjcmlwdGlvbklkPzogc3RyaW5nOyBcbiAgcHVibGljIGdldCBzdWJzY3JpcHRpb25JZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fc3Vic2NyaXB0aW9uSWQ7XG4gIH1cbiAgcHVibGljIHNldCBzdWJzY3JpcHRpb25JZCh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uSWQgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRTdWJzY3JpcHRpb25JZCgpIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25JZCA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgc3Vic2NyaXB0aW9uSWRJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fc3Vic2NyaXB0aW9uSWQ7XG4gIH1cblxuICAvLyB0ZW5hbnRfaWQgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfdGVuYW50SWQ/OiBzdHJpbmc7IFxuICBwdWJsaWMgZ2V0IHRlbmFudElkKCkge1xuICAgIHJldHVybiB0aGlzLl90ZW5hbnRJZDtcbiAgfVxuICBwdWJsaWMgc2V0IHRlbmFudElkKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl90ZW5hbnRJZCA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldFRlbmFudElkKCkge1xuICAgIHRoaXMuX3RlbmFudElkID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCB0ZW5hbnRJZElucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl90ZW5hbnRJZDtcbiAgfVxuXG4gIC8vIHVzZV9ha3Nfd29ya2xvYWRfaWRlbnRpdHkgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfdXNlQWtzV29ya2xvYWRJZGVudGl0eT86IGJvb2xlYW4gfCBjZGt0Zi5JUmVzb2x2YWJsZTsgXG4gIHB1YmxpYyBnZXQgdXNlQWtzV29ya2xvYWRJZGVudGl0eSgpIHtcbiAgICByZXR1cm4gdGhpcy5fdXNlQWtzV29ya2xvYWRJZGVudGl0eTtcbiAgfVxuICBwdWJsaWMgc2V0IHVzZUFrc1dvcmtsb2FkSWRlbnRpdHkodmFsdWU6IGJvb2xlYW4gfCBjZGt0Zi5JUmVzb2x2YWJsZSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX3VzZUFrc1dvcmtsb2FkSWRlbnRpdHkgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRVc2VBa3NXb3JrbG9hZElkZW50aXR5KCkge1xuICAgIHRoaXMuX3VzZUFrc1dvcmtsb2FkSWRlbnRpdHkgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IHVzZUFrc1dvcmtsb2FkSWRlbnRpdHlJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fdXNlQWtzV29ya2xvYWRJZGVudGl0eTtcbiAgfVxuXG4gIC8vIHVzZV9jbGkgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfdXNlQ2xpPzogYm9vbGVhbiB8IGNka3RmLklSZXNvbHZhYmxlOyBcbiAgcHVibGljIGdldCB1c2VDbGkoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3VzZUNsaTtcbiAgfVxuICBwdWJsaWMgc2V0IHVzZUNsaSh2YWx1ZTogYm9vbGVhbiB8IGNka3RmLklSZXNvbHZhYmxlIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fdXNlQ2xpID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0VXNlQ2xpKCkge1xuICAgIHRoaXMuX3VzZUNsaSA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgdXNlQ2xpSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3VzZUNsaTtcbiAgfVxuXG4gIC8vIHVzZV9tc2kgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfdXNlTXNpPzogYm9vbGVhbiB8IGNka3RmLklSZXNvbHZhYmxlOyBcbiAgcHVibGljIGdldCB1c2VNc2koKSB7XG4gICAgcmV0dXJuIHRoaXMuX3VzZU1zaTtcbiAgfVxuICBwdWJsaWMgc2V0IHVzZU1zaSh2YWx1ZTogYm9vbGVhbiB8IGNka3RmLklSZXNvbHZhYmxlIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fdXNlTXNpID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0VXNlTXNpKCkge1xuICAgIHRoaXMuX3VzZU1zaSA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgdXNlTXNpSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3VzZU1zaTtcbiAgfVxuXG4gIC8vIHVzZV9vaWRjIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX3VzZU9pZGM/OiBib29sZWFuIHwgY2RrdGYuSVJlc29sdmFibGU7IFxuICBwdWJsaWMgZ2V0IHVzZU9pZGMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3VzZU9pZGM7XG4gIH1cbiAgcHVibGljIHNldCB1c2VPaWRjKHZhbHVlOiBib29sZWFuIHwgY2RrdGYuSVJlc29sdmFibGUgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl91c2VPaWRjID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0VXNlT2lkYygpIHtcbiAgICB0aGlzLl91c2VPaWRjID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCB1c2VPaWRjSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3VzZU9pZGM7XG4gIH1cblxuICAvLyBhbGlhcyAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9hbGlhcz86IHN0cmluZzsgXG4gIHB1YmxpYyBnZXQgYWxpYXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FsaWFzO1xuICB9XG4gIHB1YmxpYyBzZXQgYWxpYXModmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX2FsaWFzID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0QWxpYXMoKSB7XG4gICAgdGhpcy5fYWxpYXMgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IGFsaWFzSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FsaWFzO1xuICB9XG5cbiAgLy8gPT09PT09PT09XG4gIC8vIFNZTlRIRVNJU1xuICAvLyA9PT09PT09PT1cblxuICBwcm90ZWN0ZWQgc3ludGhlc2l6ZUF0dHJpYnV0ZXMoKTogeyBbbmFtZTogc3RyaW5nXTogYW55IH0ge1xuICAgIHJldHVybiB7XG4gICAgICBhdXhpbGlhcnlfdGVuYW50X2lkczogY2RrdGYubGlzdE1hcHBlcihjZGt0Zi5zdHJpbmdUb1RlcnJhZm9ybSwgZmFsc2UpKHRoaXMuX2F1eGlsaWFyeVRlbmFudElkcyksXG4gICAgICBjbGllbnRfY2VydGlmaWNhdGU6IGNka3RmLnN0cmluZ1RvVGVycmFmb3JtKHRoaXMuX2NsaWVudENlcnRpZmljYXRlKSxcbiAgICAgIGNsaWVudF9jZXJ0aWZpY2F0ZV9wYXNzd29yZDogY2RrdGYuc3RyaW5nVG9UZXJyYWZvcm0odGhpcy5fY2xpZW50Q2VydGlmaWNhdGVQYXNzd29yZCksXG4gICAgICBjbGllbnRfY2VydGlmaWNhdGVfcGF0aDogY2RrdGYuc3RyaW5nVG9UZXJyYWZvcm0odGhpcy5fY2xpZW50Q2VydGlmaWNhdGVQYXRoKSxcbiAgICAgIGNsaWVudF9pZDogY2RrdGYuc3RyaW5nVG9UZXJyYWZvcm0odGhpcy5fY2xpZW50SWQpLFxuICAgICAgY2xpZW50X2lkX2ZpbGVfcGF0aDogY2RrdGYuc3RyaW5nVG9UZXJyYWZvcm0odGhpcy5fY2xpZW50SWRGaWxlUGF0aCksXG4gICAgICBjbGllbnRfc2VjcmV0OiBjZGt0Zi5zdHJpbmdUb1RlcnJhZm9ybSh0aGlzLl9jbGllbnRTZWNyZXQpLFxuICAgICAgY2xpZW50X3NlY3JldF9maWxlX3BhdGg6IGNka3RmLnN0cmluZ1RvVGVycmFmb3JtKHRoaXMuX2NsaWVudFNlY3JldEZpbGVQYXRoKSxcbiAgICAgIGN1c3RvbV9jb3JyZWxhdGlvbl9yZXF1ZXN0X2lkOiBjZGt0Zi5zdHJpbmdUb1RlcnJhZm9ybSh0aGlzLl9jdXN0b21Db3JyZWxhdGlvblJlcXVlc3RJZCksXG4gICAgICBkZWZhdWx0X2xvY2F0aW9uOiBjZGt0Zi5zdHJpbmdUb1RlcnJhZm9ybSh0aGlzLl9kZWZhdWx0TG9jYXRpb24pLFxuICAgICAgZGVmYXVsdF9uYW1lOiBjZGt0Zi5zdHJpbmdUb1RlcnJhZm9ybSh0aGlzLl9kZWZhdWx0TmFtZSksXG4gICAgICBkZWZhdWx0X3RhZ3M6IGNka3RmLmhhc2hNYXBwZXIoY2RrdGYuc3RyaW5nVG9UZXJyYWZvcm0pKHRoaXMuX2RlZmF1bHRUYWdzKSxcbiAgICAgIGRpc2FibGVfY29ycmVsYXRpb25fcmVxdWVzdF9pZDogY2RrdGYuYm9vbGVhblRvVGVycmFmb3JtKHRoaXMuX2Rpc2FibGVDb3JyZWxhdGlvblJlcXVlc3RJZCksXG4gICAgICBkaXNhYmxlX2RlZmF1bHRfb3V0cHV0OiBjZGt0Zi5ib29sZWFuVG9UZXJyYWZvcm0odGhpcy5fZGlzYWJsZURlZmF1bHRPdXRwdXQpLFxuICAgICAgZGlzYWJsZV9pbnN0YW5jZV9kaXNjb3Zlcnk6IGNka3RmLmJvb2xlYW5Ub1RlcnJhZm9ybSh0aGlzLl9kaXNhYmxlSW5zdGFuY2VEaXNjb3ZlcnkpLFxuICAgICAgZGlzYWJsZV90ZXJyYWZvcm1fcGFydG5lcl9pZDogY2RrdGYuYm9vbGVhblRvVGVycmFmb3JtKHRoaXMuX2Rpc2FibGVUZXJyYWZvcm1QYXJ0bmVySWQpLFxuICAgICAgZW5hYmxlX3ByZWZsaWdodDogY2RrdGYuYm9vbGVhblRvVGVycmFmb3JtKHRoaXMuX2VuYWJsZVByZWZsaWdodCksXG4gICAgICBlbmRwb2ludDogY2RrdGYubGlzdE1hcHBlcihhemFwaVByb3ZpZGVyRW5kcG9pbnRUb1RlcnJhZm9ybSwgZmFsc2UpKHRoaXMuX2VuZHBvaW50KSxcbiAgICAgIGVudmlyb25tZW50OiBjZGt0Zi5zdHJpbmdUb1RlcnJhZm9ybSh0aGlzLl9lbnZpcm9ubWVudCksXG4gICAgICBpZ25vcmVfbm9fb3BfY2hhbmdlczogY2RrdGYuYm9vbGVhblRvVGVycmFmb3JtKHRoaXMuX2lnbm9yZU5vT3BDaGFuZ2VzKSxcbiAgICAgIG1heGltdW1fYnVzeV9yZXRyeV9hdHRlbXB0czogY2RrdGYubnVtYmVyVG9UZXJyYWZvcm0odGhpcy5fbWF4aW11bUJ1c3lSZXRyeUF0dGVtcHRzKSxcbiAgICAgIG9pZGNfYXp1cmVfc2VydmljZV9jb25uZWN0aW9uX2lkOiBjZGt0Zi5zdHJpbmdUb1RlcnJhZm9ybSh0aGlzLl9vaWRjQXp1cmVTZXJ2aWNlQ29ubmVjdGlvbklkKSxcbiAgICAgIG9pZGNfcmVxdWVzdF90b2tlbjogY2RrdGYuc3RyaW5nVG9UZXJyYWZvcm0odGhpcy5fb2lkY1JlcXVlc3RUb2tlbiksXG4gICAgICBvaWRjX3JlcXVlc3RfdXJsOiBjZGt0Zi5zdHJpbmdUb1RlcnJhZm9ybSh0aGlzLl9vaWRjUmVxdWVzdFVybCksXG4gICAgICBvaWRjX3Rva2VuOiBjZGt0Zi5zdHJpbmdUb1RlcnJhZm9ybSh0aGlzLl9vaWRjVG9rZW4pLFxuICAgICAgb2lkY190b2tlbl9maWxlX3BhdGg6IGNka3RmLnN0cmluZ1RvVGVycmFmb3JtKHRoaXMuX29pZGNUb2tlbkZpbGVQYXRoKSxcbiAgICAgIHBhcnRuZXJfaWQ6IGNka3RmLnN0cmluZ1RvVGVycmFmb3JtKHRoaXMuX3BhcnRuZXJJZCksXG4gICAgICBza2lwX3Byb3ZpZGVyX3JlZ2lzdHJhdGlvbjogY2RrdGYuYm9vbGVhblRvVGVycmFmb3JtKHRoaXMuX3NraXBQcm92aWRlclJlZ2lzdHJhdGlvbiksXG4gICAgICBzdWJzY3JpcHRpb25faWQ6IGNka3RmLnN0cmluZ1RvVGVycmFmb3JtKHRoaXMuX3N1YnNjcmlwdGlvbklkKSxcbiAgICAgIHRlbmFudF9pZDogY2RrdGYuc3RyaW5nVG9UZXJyYWZvcm0odGhpcy5fdGVuYW50SWQpLFxuICAgICAgdXNlX2Frc193b3JrbG9hZF9pZGVudGl0eTogY2RrdGYuYm9vbGVhblRvVGVycmFmb3JtKHRoaXMuX3VzZUFrc1dvcmtsb2FkSWRlbnRpdHkpLFxuICAgICAgdXNlX2NsaTogY2RrdGYuYm9vbGVhblRvVGVycmFmb3JtKHRoaXMuX3VzZUNsaSksXG4gICAgICB1c2VfbXNpOiBjZGt0Zi5ib29sZWFuVG9UZXJyYWZvcm0odGhpcy5fdXNlTXNpKSxcbiAgICAgIHVzZV9vaWRjOiBjZGt0Zi5ib29sZWFuVG9UZXJyYWZvcm0odGhpcy5fdXNlT2lkYyksXG4gICAgICBhbGlhczogY2RrdGYuc3RyaW5nVG9UZXJyYWZvcm0odGhpcy5fYWxpYXMpLFxuICAgIH07XG4gIH1cblxuICBwcm90ZWN0ZWQgc3ludGhlc2l6ZUhjbEF0dHJpYnV0ZXMoKTogeyBbbmFtZTogc3RyaW5nXTogYW55IH0ge1xuICAgIGNvbnN0IGF0dHJzID0ge1xuICAgICAgYXV4aWxpYXJ5X3RlbmFudF9pZHM6IHtcbiAgICAgICAgdmFsdWU6IGNka3RmLmxpc3RNYXBwZXJIY2woY2RrdGYuc3RyaW5nVG9IY2xUZXJyYWZvcm0sIGZhbHNlKSh0aGlzLl9hdXhpbGlhcnlUZW5hbnRJZHMpLFxuICAgICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgICAgdHlwZTogXCJsaXN0XCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nTGlzdFwiLFxuICAgICAgfSxcbiAgICAgIGNsaWVudF9jZXJ0aWZpY2F0ZToge1xuICAgICAgICB2YWx1ZTogY2RrdGYuc3RyaW5nVG9IY2xUZXJyYWZvcm0odGhpcy5fY2xpZW50Q2VydGlmaWNhdGUpLFxuICAgICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJzdHJpbmdcIixcbiAgICAgIH0sXG4gICAgICBjbGllbnRfY2VydGlmaWNhdGVfcGFzc3dvcmQ6IHtcbiAgICAgICAgdmFsdWU6IGNka3RmLnN0cmluZ1RvSGNsVGVycmFmb3JtKHRoaXMuX2NsaWVudENlcnRpZmljYXRlUGFzc3dvcmQpLFxuICAgICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJzdHJpbmdcIixcbiAgICAgIH0sXG4gICAgICBjbGllbnRfY2VydGlmaWNhdGVfcGF0aDoge1xuICAgICAgICB2YWx1ZTogY2RrdGYuc3RyaW5nVG9IY2xUZXJyYWZvcm0odGhpcy5fY2xpZW50Q2VydGlmaWNhdGVQYXRoKSxcbiAgICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgICB9LFxuICAgICAgY2xpZW50X2lkOiB7XG4gICAgICAgIHZhbHVlOiBjZGt0Zi5zdHJpbmdUb0hjbFRlcnJhZm9ybSh0aGlzLl9jbGllbnRJZCksXG4gICAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcInN0cmluZ1wiLFxuICAgICAgfSxcbiAgICAgIGNsaWVudF9pZF9maWxlX3BhdGg6IHtcbiAgICAgICAgdmFsdWU6IGNka3RmLnN0cmluZ1RvSGNsVGVycmFmb3JtKHRoaXMuX2NsaWVudElkRmlsZVBhdGgpLFxuICAgICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJzdHJpbmdcIixcbiAgICAgIH0sXG4gICAgICBjbGllbnRfc2VjcmV0OiB7XG4gICAgICAgIHZhbHVlOiBjZGt0Zi5zdHJpbmdUb0hjbFRlcnJhZm9ybSh0aGlzLl9jbGllbnRTZWNyZXQpLFxuICAgICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJzdHJpbmdcIixcbiAgICAgIH0sXG4gICAgICBjbGllbnRfc2VjcmV0X2ZpbGVfcGF0aDoge1xuICAgICAgICB2YWx1ZTogY2RrdGYuc3RyaW5nVG9IY2xUZXJyYWZvcm0odGhpcy5fY2xpZW50U2VjcmV0RmlsZVBhdGgpLFxuICAgICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJzdHJpbmdcIixcbiAgICAgIH0sXG4gICAgICBjdXN0b21fY29ycmVsYXRpb25fcmVxdWVzdF9pZDoge1xuICAgICAgICB2YWx1ZTogY2RrdGYuc3RyaW5nVG9IY2xUZXJyYWZvcm0odGhpcy5fY3VzdG9tQ29ycmVsYXRpb25SZXF1ZXN0SWQpLFxuICAgICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJzdHJpbmdcIixcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0X2xvY2F0aW9uOiB7XG4gICAgICAgIHZhbHVlOiBjZGt0Zi5zdHJpbmdUb0hjbFRlcnJhZm9ybSh0aGlzLl9kZWZhdWx0TG9jYXRpb24pLFxuICAgICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJzdHJpbmdcIixcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0X25hbWU6IHtcbiAgICAgICAgdmFsdWU6IGNka3RmLnN0cmluZ1RvSGNsVGVycmFmb3JtKHRoaXMuX2RlZmF1bHROYW1lKSxcbiAgICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgICB9LFxuICAgICAgZGVmYXVsdF90YWdzOiB7XG4gICAgICAgIHZhbHVlOiBjZGt0Zi5oYXNoTWFwcGVySGNsKGNka3RmLnN0cmluZ1RvSGNsVGVycmFmb3JtKSh0aGlzLl9kZWZhdWx0VGFncyksXG4gICAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgICB0eXBlOiBcIm1hcFwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcInN0cmluZ01hcFwiLFxuICAgICAgfSxcbiAgICAgIGRpc2FibGVfY29ycmVsYXRpb25fcmVxdWVzdF9pZDoge1xuICAgICAgICB2YWx1ZTogY2RrdGYuYm9vbGVhblRvSGNsVGVycmFmb3JtKHRoaXMuX2Rpc2FibGVDb3JyZWxhdGlvblJlcXVlc3RJZCksXG4gICAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcImJvb2xlYW5cIixcbiAgICAgIH0sXG4gICAgICBkaXNhYmxlX2RlZmF1bHRfb3V0cHV0OiB7XG4gICAgICAgIHZhbHVlOiBjZGt0Zi5ib29sZWFuVG9IY2xUZXJyYWZvcm0odGhpcy5fZGlzYWJsZURlZmF1bHRPdXRwdXQpLFxuICAgICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJib29sZWFuXCIsXG4gICAgICB9LFxuICAgICAgZGlzYWJsZV9pbnN0YW5jZV9kaXNjb3Zlcnk6IHtcbiAgICAgICAgdmFsdWU6IGNka3RmLmJvb2xlYW5Ub0hjbFRlcnJhZm9ybSh0aGlzLl9kaXNhYmxlSW5zdGFuY2VEaXNjb3ZlcnkpLFxuICAgICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJib29sZWFuXCIsXG4gICAgICB9LFxuICAgICAgZGlzYWJsZV90ZXJyYWZvcm1fcGFydG5lcl9pZDoge1xuICAgICAgICB2YWx1ZTogY2RrdGYuYm9vbGVhblRvSGNsVGVycmFmb3JtKHRoaXMuX2Rpc2FibGVUZXJyYWZvcm1QYXJ0bmVySWQpLFxuICAgICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJib29sZWFuXCIsXG4gICAgICB9LFxuICAgICAgZW5hYmxlX3ByZWZsaWdodDoge1xuICAgICAgICB2YWx1ZTogY2RrdGYuYm9vbGVhblRvSGNsVGVycmFmb3JtKHRoaXMuX2VuYWJsZVByZWZsaWdodCksXG4gICAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcImJvb2xlYW5cIixcbiAgICAgIH0sXG4gICAgICBlbmRwb2ludDoge1xuICAgICAgICB2YWx1ZTogY2RrdGYubGlzdE1hcHBlckhjbChhemFwaVByb3ZpZGVyRW5kcG9pbnRUb0hjbFRlcnJhZm9ybSwgZmFsc2UpKHRoaXMuX2VuZHBvaW50KSxcbiAgICAgICAgaXNCbG9jazogdHJ1ZSxcbiAgICAgICAgdHlwZTogXCJsaXN0XCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwiQXphcGlQcm92aWRlckVuZHBvaW50TGlzdFwiLFxuICAgICAgfSxcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIHZhbHVlOiBjZGt0Zi5zdHJpbmdUb0hjbFRlcnJhZm9ybSh0aGlzLl9lbnZpcm9ubWVudCksXG4gICAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcInN0cmluZ1wiLFxuICAgICAgfSxcbiAgICAgIGlnbm9yZV9ub19vcF9jaGFuZ2VzOiB7XG4gICAgICAgIHZhbHVlOiBjZGt0Zi5ib29sZWFuVG9IY2xUZXJyYWZvcm0odGhpcy5faWdub3JlTm9PcENoYW5nZXMpLFxuICAgICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJib29sZWFuXCIsXG4gICAgICB9LFxuICAgICAgbWF4aW11bV9idXN5X3JldHJ5X2F0dGVtcHRzOiB7XG4gICAgICAgIHZhbHVlOiBjZGt0Zi5udW1iZXJUb0hjbFRlcnJhZm9ybSh0aGlzLl9tYXhpbXVtQnVzeVJldHJ5QXR0ZW1wdHMpLFxuICAgICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJudW1iZXJcIixcbiAgICAgIH0sXG4gICAgICBvaWRjX2F6dXJlX3NlcnZpY2VfY29ubmVjdGlvbl9pZDoge1xuICAgICAgICB2YWx1ZTogY2RrdGYuc3RyaW5nVG9IY2xUZXJyYWZvcm0odGhpcy5fb2lkY0F6dXJlU2VydmljZUNvbm5lY3Rpb25JZCksXG4gICAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcInN0cmluZ1wiLFxuICAgICAgfSxcbiAgICAgIG9pZGNfcmVxdWVzdF90b2tlbjoge1xuICAgICAgICB2YWx1ZTogY2RrdGYuc3RyaW5nVG9IY2xUZXJyYWZvcm0odGhpcy5fb2lkY1JlcXVlc3RUb2tlbiksXG4gICAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcInN0cmluZ1wiLFxuICAgICAgfSxcbiAgICAgIG9pZGNfcmVxdWVzdF91cmw6IHtcbiAgICAgICAgdmFsdWU6IGNka3RmLnN0cmluZ1RvSGNsVGVycmFmb3JtKHRoaXMuX29pZGNSZXF1ZXN0VXJsKSxcbiAgICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgICB9LFxuICAgICAgb2lkY190b2tlbjoge1xuICAgICAgICB2YWx1ZTogY2RrdGYuc3RyaW5nVG9IY2xUZXJyYWZvcm0odGhpcy5fb2lkY1Rva2VuKSxcbiAgICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgICB9LFxuICAgICAgb2lkY190b2tlbl9maWxlX3BhdGg6IHtcbiAgICAgICAgdmFsdWU6IGNka3RmLnN0cmluZ1RvSGNsVGVycmFmb3JtKHRoaXMuX29pZGNUb2tlbkZpbGVQYXRoKSxcbiAgICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgICB9LFxuICAgICAgcGFydG5lcl9pZDoge1xuICAgICAgICB2YWx1ZTogY2RrdGYuc3RyaW5nVG9IY2xUZXJyYWZvcm0odGhpcy5fcGFydG5lcklkKSxcbiAgICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgICB9LFxuICAgICAgc2tpcF9wcm92aWRlcl9yZWdpc3RyYXRpb246IHtcbiAgICAgICAgdmFsdWU6IGNka3RmLmJvb2xlYW5Ub0hjbFRlcnJhZm9ybSh0aGlzLl9za2lwUHJvdmlkZXJSZWdpc3RyYXRpb24pLFxuICAgICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJib29sZWFuXCIsXG4gICAgICB9LFxuICAgICAgc3Vic2NyaXB0aW9uX2lkOiB7XG4gICAgICAgIHZhbHVlOiBjZGt0Zi5zdHJpbmdUb0hjbFRlcnJhZm9ybSh0aGlzLl9zdWJzY3JpcHRpb25JZCksXG4gICAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcInN0cmluZ1wiLFxuICAgICAgfSxcbiAgICAgIHRlbmFudF9pZDoge1xuICAgICAgICB2YWx1ZTogY2RrdGYuc3RyaW5nVG9IY2xUZXJyYWZvcm0odGhpcy5fdGVuYW50SWQpLFxuICAgICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJzdHJpbmdcIixcbiAgICAgIH0sXG4gICAgICB1c2VfYWtzX3dvcmtsb2FkX2lkZW50aXR5OiB7XG4gICAgICAgIHZhbHVlOiBjZGt0Zi5ib29sZWFuVG9IY2xUZXJyYWZvcm0odGhpcy5fdXNlQWtzV29ya2xvYWRJZGVudGl0eSksXG4gICAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcImJvb2xlYW5cIixcbiAgICAgIH0sXG4gICAgICB1c2VfY2xpOiB7XG4gICAgICAgIHZhbHVlOiBjZGt0Zi5ib29sZWFuVG9IY2xUZXJyYWZvcm0odGhpcy5fdXNlQ2xpKSxcbiAgICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwiYm9vbGVhblwiLFxuICAgICAgfSxcbiAgICAgIHVzZV9tc2k6IHtcbiAgICAgICAgdmFsdWU6IGNka3RmLmJvb2xlYW5Ub0hjbFRlcnJhZm9ybSh0aGlzLl91c2VNc2kpLFxuICAgICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJib29sZWFuXCIsXG4gICAgICB9LFxuICAgICAgdXNlX29pZGM6IHtcbiAgICAgICAgdmFsdWU6IGNka3RmLmJvb2xlYW5Ub0hjbFRlcnJhZm9ybSh0aGlzLl91c2VPaWRjKSxcbiAgICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwiYm9vbGVhblwiLFxuICAgICAgfSxcbiAgICAgIGFsaWFzOiB7XG4gICAgICAgIHZhbHVlOiBjZGt0Zi5zdHJpbmdUb0hjbFRlcnJhZm9ybSh0aGlzLl9hbGlhcyksXG4gICAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcInN0cmluZ1wiLFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgLy8gcmVtb3ZlIHVuZGVmaW5lZCBhdHRyaWJ1dGVzXG4gICAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhhdHRycykuZmlsdGVyKChbXywgdmFsdWVdKSA9PiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlLnZhbHVlICE9PSB1bmRlZmluZWQgKSlcbiAgfVxufVxuIl19