@microsoft/terraform-cdk-constructs 1.2.0 → 1.3.1

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 (291) hide show
  1. package/.jsii +54630 -26185
  2. package/API.md +72091 -23784
  3. package/lib/azure-actiongroup/index.d.ts +0 -10
  4. package/lib/azure-actiongroup/index.js +1 -11
  5. package/lib/azure-actiongroup/lib/action-group.d.ts +0 -10
  6. package/lib/azure-actiongroup/lib/action-group.js +6 -32
  7. package/lib/azure-actiongroup/lib/index.d.ts +1 -4
  8. package/lib/azure-actiongroup/lib/index.js +2 -5
  9. package/lib/azure-activitylogalert/index.d.ts +0 -10
  10. package/lib/azure-activitylogalert/index.js +1 -11
  11. package/lib/azure-activitylogalert/lib/activity-log-alert.d.ts +0 -10
  12. package/lib/azure-activitylogalert/lib/activity-log-alert.js +6 -32
  13. package/lib/azure-activitylogalert/lib/index.d.ts +1 -4
  14. package/lib/azure-activitylogalert/lib/index.js +2 -5
  15. package/lib/azure-aks/index.d.ts +0 -8
  16. package/lib/azure-aks/index.js +1 -11
  17. package/lib/azure-aks/lib/aks-cluster.d.ts +4 -13
  18. package/lib/azure-aks/lib/aks-cluster.js +13 -36
  19. package/lib/azure-aks/lib/index.d.ts +1 -10
  20. package/lib/azure-aks/lib/index.js +2 -21
  21. package/lib/azure-diagnosticsettings/index.d.ts +0 -6
  22. package/lib/azure-diagnosticsettings/index.js +1 -7
  23. package/lib/azure-diagnosticsettings/lib/diagnostic-settings.d.ts +0 -10
  24. package/lib/azure-diagnosticsettings/lib/diagnostic-settings.js +6 -32
  25. package/lib/azure-diagnosticsettings/lib/index.d.ts +1 -7
  26. package/lib/azure-diagnosticsettings/lib/index.js +2 -8
  27. package/lib/azure-dnsforwardingruleset/index.d.ts +1 -0
  28. package/lib/azure-dnsforwardingruleset/index.js +18 -0
  29. package/lib/azure-dnsforwardingruleset/lib/dns-forwarding-ruleset-schemas.d.ts +24 -0
  30. package/lib/azure-dnsforwardingruleset/lib/dns-forwarding-ruleset-schemas.js +206 -0
  31. package/lib/azure-dnsforwardingruleset/lib/dns-forwarding-ruleset.d.ts +174 -0
  32. package/lib/azure-dnsforwardingruleset/lib/dns-forwarding-ruleset.js +214 -0
  33. package/lib/azure-dnsforwardingruleset/lib/forwarding-rule-schemas.d.ts +24 -0
  34. package/lib/azure-dnsforwardingruleset/lib/forwarding-rule-schemas.js +242 -0
  35. package/lib/azure-dnsforwardingruleset/lib/forwarding-rule.d.ts +193 -0
  36. package/lib/azure-dnsforwardingruleset/lib/forwarding-rule.js +193 -0
  37. package/lib/azure-dnsforwardingruleset/lib/index.d.ts +6 -0
  38. package/lib/azure-dnsforwardingruleset/lib/index.js +23 -0
  39. package/lib/azure-dnsforwardingruleset/lib/virtual-network-link-schemas.d.ts +24 -0
  40. package/lib/azure-dnsforwardingruleset/lib/virtual-network-link-schemas.js +199 -0
  41. package/lib/azure-dnsforwardingruleset/lib/virtual-network-link.d.ts +160 -0
  42. package/lib/azure-dnsforwardingruleset/lib/virtual-network-link.js +178 -0
  43. package/lib/azure-dnsforwardingruleset/test/dns-forwarding-ruleset.integ.d.ts +9 -0
  44. package/lib/azure-dnsforwardingruleset/test/dns-forwarding-ruleset.integ.js +133 -0
  45. package/lib/azure-dnsforwardingruleset/test/dns-forwarding-ruleset.spec.d.ts +9 -0
  46. package/lib/azure-dnsforwardingruleset/test/dns-forwarding-ruleset.spec.js +350 -0
  47. package/lib/azure-dnsforwardingruleset/test/forwarding-rule.spec.d.ts +9 -0
  48. package/lib/azure-dnsforwardingruleset/test/forwarding-rule.spec.js +397 -0
  49. package/lib/azure-dnsforwardingruleset/test/virtual-network-link.spec.d.ts +9 -0
  50. package/lib/azure-dnsforwardingruleset/test/virtual-network-link.spec.js +285 -0
  51. package/lib/azure-dnsresolver/index.d.ts +1 -0
  52. package/lib/azure-dnsresolver/index.js +18 -0
  53. package/lib/azure-dnsresolver/lib/dns-resolver-schemas.d.ts +24 -0
  54. package/lib/azure-dnsresolver/lib/dns-resolver-schemas.js +218 -0
  55. package/lib/azure-dnsresolver/lib/dns-resolver.d.ts +170 -0
  56. package/lib/azure-dnsresolver/lib/dns-resolver.js +236 -0
  57. package/lib/azure-dnsresolver/lib/inbound-endpoint-schemas.d.ts +24 -0
  58. package/lib/azure-dnsresolver/lib/inbound-endpoint-schemas.js +261 -0
  59. package/lib/azure-dnsresolver/lib/inbound-endpoint.d.ts +189 -0
  60. package/lib/azure-dnsresolver/lib/inbound-endpoint.js +243 -0
  61. package/lib/azure-dnsresolver/lib/index.d.ts +6 -0
  62. package/lib/azure-dnsresolver/lib/index.js +23 -0
  63. package/lib/azure-dnsresolver/lib/outbound-endpoint-schemas.d.ts +24 -0
  64. package/lib/azure-dnsresolver/lib/outbound-endpoint-schemas.js +231 -0
  65. package/lib/azure-dnsresolver/lib/outbound-endpoint.d.ts +175 -0
  66. package/lib/azure-dnsresolver/lib/outbound-endpoint.js +234 -0
  67. package/lib/azure-dnsresolver/test/dns-resolver.integ.d.ts +14 -0
  68. package/lib/azure-dnsresolver/test/dns-resolver.integ.js +117 -0
  69. package/lib/azure-dnsresolver/test/dns-resolver.spec.d.ts +9 -0
  70. package/lib/azure-dnsresolver/test/dns-resolver.spec.js +353 -0
  71. package/lib/azure-dnsresolver/test/inbound-endpoint.integ.d.ts +9 -0
  72. package/lib/azure-dnsresolver/test/inbound-endpoint.integ.js +151 -0
  73. package/lib/azure-dnsresolver/test/inbound-endpoint.spec.d.ts +9 -0
  74. package/lib/azure-dnsresolver/test/inbound-endpoint.spec.js +441 -0
  75. package/lib/azure-dnsresolver/test/outbound-endpoint.integ.d.ts +9 -0
  76. package/lib/azure-dnsresolver/test/outbound-endpoint.integ.js +149 -0
  77. package/lib/azure-dnsresolver/test/outbound-endpoint.spec.d.ts +9 -0
  78. package/lib/azure-dnsresolver/test/outbound-endpoint.spec.js +301 -0
  79. package/lib/azure-dnszone/index.d.ts +1 -0
  80. package/lib/azure-dnszone/index.js +18 -0
  81. package/lib/azure-dnszone/lib/dns-zone-schemas.d.ts +24 -0
  82. package/lib/azure-dnszone/lib/dns-zone-schemas.js +191 -0
  83. package/lib/azure-dnszone/lib/dns-zone.d.ts +182 -0
  84. package/lib/azure-dnszone/lib/dns-zone.js +228 -0
  85. package/lib/azure-dnszone/lib/index.d.ts +2 -0
  86. package/lib/azure-dnszone/lib/index.js +19 -0
  87. package/lib/azure-dnszone/test/dns-zone.integ.d.ts +9 -0
  88. package/lib/azure-dnszone/test/dns-zone.integ.js +85 -0
  89. package/lib/azure-dnszone/test/dns-zone.spec.d.ts +9 -0
  90. package/lib/azure-dnszone/test/dns-zone.spec.js +285 -0
  91. package/lib/azure-metricalert/index.d.ts +0 -10
  92. package/lib/azure-metricalert/index.js +1 -11
  93. package/lib/azure-metricalert/lib/index.d.ts +1 -4
  94. package/lib/azure-metricalert/lib/index.js +2 -5
  95. package/lib/azure-metricalert/lib/metric-alert.d.ts +0 -10
  96. package/lib/azure-metricalert/lib/metric-alert.js +6 -32
  97. package/lib/azure-networkinterface/index.d.ts +0 -3
  98. package/lib/azure-networkinterface/index.js +1 -4
  99. package/lib/azure-networkinterface/lib/index.d.ts +1 -5
  100. package/lib/azure-networkinterface/lib/index.js +2 -5
  101. package/lib/azure-networkinterface/lib/network-interface.d.ts +4 -9
  102. package/lib/azure-networkinterface/lib/network-interface.js +14 -29
  103. package/lib/azure-networkinterface/test/network-interface.integ.js +20 -6
  104. package/lib/azure-networksecuritygroup/index.d.ts +0 -5
  105. package/lib/azure-networksecuritygroup/index.js +1 -6
  106. package/lib/azure-networksecuritygroup/lib/index.d.ts +2 -5
  107. package/lib/azure-networksecuritygroup/lib/index.js +17 -14
  108. package/lib/azure-networksecuritygroup/lib/network-security-group.d.ts +4 -13
  109. package/lib/azure-networksecuritygroup/lib/network-security-group.js +14 -36
  110. package/lib/azure-policyassignment/index.d.ts +1 -0
  111. package/lib/azure-policyassignment/index.js +18 -0
  112. package/lib/azure-policyassignment/lib/index.d.ts +2 -0
  113. package/lib/azure-policyassignment/lib/index.js +19 -0
  114. package/lib/azure-policyassignment/lib/policy-assignment-schemas.d.ts +25 -0
  115. package/lib/azure-policyassignment/lib/policy-assignment-schemas.js +260 -0
  116. package/lib/azure-policyassignment/lib/policy-assignment.d.ts +349 -0
  117. package/lib/azure-policyassignment/lib/policy-assignment.js +237 -0
  118. package/lib/azure-policyassignment/test/policy-assignment.integ.d.ts +13 -0
  119. package/lib/azure-policyassignment/test/policy-assignment.integ.js +153 -0
  120. package/lib/azure-policyassignment/test/policy-assignment.spec.d.ts +9 -0
  121. package/lib/azure-policyassignment/test/policy-assignment.spec.js +651 -0
  122. package/lib/azure-policydefinition/index.d.ts +1 -0
  123. package/lib/azure-policydefinition/index.js +18 -0
  124. package/lib/azure-policydefinition/lib/index.d.ts +2 -0
  125. package/lib/azure-policydefinition/lib/index.js +19 -0
  126. package/lib/azure-policydefinition/lib/policy-definition-schemas.d.ts +25 -0
  127. package/lib/azure-policydefinition/lib/policy-definition-schemas.js +210 -0
  128. package/lib/azure-policydefinition/lib/policy-definition.d.ts +281 -0
  129. package/lib/azure-policydefinition/lib/policy-definition.js +236 -0
  130. package/lib/azure-policydefinition/test/policy-definition.integ.d.ts +9 -0
  131. package/lib/azure-policydefinition/test/policy-definition.integ.js +137 -0
  132. package/lib/azure-policydefinition/test/policy-definition.spec.d.ts +9 -0
  133. package/lib/azure-policydefinition/test/policy-definition.spec.js +806 -0
  134. package/lib/azure-privatednszone/index.d.ts +1 -0
  135. package/lib/azure-privatednszone/index.js +18 -0
  136. package/lib/azure-privatednszone/lib/index.d.ts +2 -0
  137. package/lib/azure-privatednszone/lib/index.js +19 -0
  138. package/lib/azure-privatednszone/lib/private-dns-zone-schemas.d.ts +24 -0
  139. package/lib/azure-privatednszone/lib/private-dns-zone-schemas.js +254 -0
  140. package/lib/azure-privatednszone/lib/private-dns-zone.d.ts +178 -0
  141. package/lib/azure-privatednszone/lib/private-dns-zone.js +272 -0
  142. package/lib/azure-privatednszone/test/private-dns-zone.integ.d.ts +9 -0
  143. package/lib/azure-privatednszone/test/private-dns-zone.integ.js +84 -0
  144. package/lib/azure-privatednszone/test/private-dns-zone.spec.d.ts +9 -0
  145. package/lib/azure-privatednszone/test/private-dns-zone.spec.js +341 -0
  146. package/lib/azure-privatednszonelink/index.d.ts +1 -0
  147. package/lib/azure-privatednszonelink/index.js +18 -0
  148. package/lib/azure-privatednszonelink/lib/index.d.ts +2 -0
  149. package/lib/azure-privatednszonelink/lib/index.js +19 -0
  150. package/lib/azure-privatednszonelink/lib/private-dns-zone-link-schemas.d.ts +24 -0
  151. package/lib/azure-privatednszonelink/lib/private-dns-zone-link-schemas.js +262 -0
  152. package/lib/azure-privatednszonelink/lib/private-dns-zone-link.d.ts +202 -0
  153. package/lib/azure-privatednszonelink/lib/private-dns-zone-link.js +250 -0
  154. package/lib/azure-privatednszonelink/test/private-dns-zone-link.integ.d.ts +9 -0
  155. package/lib/azure-privatednszonelink/test/private-dns-zone-link.integ.js +110 -0
  156. package/lib/azure-privatednszonelink/test/private-dns-zone-link.spec.d.ts +9 -0
  157. package/lib/azure-privatednszonelink/test/private-dns-zone-link.spec.js +465 -0
  158. package/lib/azure-publicipaddress/index.d.ts +0 -5
  159. package/lib/azure-publicipaddress/index.js +1 -6
  160. package/lib/azure-publicipaddress/lib/index.d.ts +2 -9
  161. package/lib/azure-publicipaddress/lib/index.js +17 -17
  162. package/lib/azure-publicipaddress/lib/public-ip-address.d.ts +4 -13
  163. package/lib/azure-publicipaddress/lib/public-ip-address.js +14 -36
  164. package/lib/azure-resourcegroup/index.d.ts +0 -37
  165. package/lib/azure-resourcegroup/index.js +1 -39
  166. package/lib/azure-resourcegroup/lib/index.d.ts +1 -44
  167. package/lib/azure-resourcegroup/lib/index.js +2 -43
  168. package/lib/azure-resourcegroup/lib/resource-group.d.ts +9 -23
  169. package/lib/azure-resourcegroup/lib/resource-group.js +23 -56
  170. package/lib/azure-resourcegroup/test/resource-group.spec.js +13 -19
  171. package/lib/azure-roleassignment/index.d.ts +1 -0
  172. package/lib/azure-roleassignment/index.js +18 -0
  173. package/lib/azure-roleassignment/lib/index.d.ts +2 -0
  174. package/lib/azure-roleassignment/lib/index.js +19 -0
  175. package/lib/azure-roleassignment/lib/role-assignment-schemas.d.ts +25 -0
  176. package/lib/azure-roleassignment/lib/role-assignment-schemas.js +238 -0
  177. package/lib/azure-roleassignment/lib/role-assignment.d.ts +294 -0
  178. package/lib/azure-roleassignment/lib/role-assignment.js +257 -0
  179. package/lib/azure-roleassignment/test/role-assignment.integ.d.ts +12 -0
  180. package/lib/azure-roleassignment/test/role-assignment.integ.js +101 -0
  181. package/lib/azure-roleassignment/test/role-assignment.spec.d.ts +9 -0
  182. package/lib/azure-roleassignment/test/role-assignment.spec.js +633 -0
  183. package/lib/azure-roledefinition/index.d.ts +1 -0
  184. package/lib/azure-roledefinition/index.js +18 -0
  185. package/lib/azure-roledefinition/lib/index.d.ts +2 -0
  186. package/lib/azure-roledefinition/lib/index.js +19 -0
  187. package/lib/azure-roledefinition/lib/role-definition-schemas.d.ts +25 -0
  188. package/lib/azure-roledefinition/lib/role-definition-schemas.js +195 -0
  189. package/lib/azure-roledefinition/lib/role-definition.d.ts +236 -0
  190. package/lib/azure-roledefinition/lib/role-definition.js +192 -0
  191. package/lib/azure-roledefinition/test/role-definition.integ.d.ts +12 -0
  192. package/lib/azure-roledefinition/test/role-definition.integ.js +142 -0
  193. package/lib/azure-roledefinition/test/role-definition.spec.d.ts +9 -0
  194. package/lib/azure-roledefinition/test/role-definition.spec.js +946 -0
  195. package/lib/azure-storageaccount/index.d.ts +0 -19
  196. package/lib/azure-storageaccount/index.js +1 -20
  197. package/lib/azure-storageaccount/lib/index.d.ts +1 -7
  198. package/lib/azure-storageaccount/lib/index.js +2 -8
  199. package/lib/azure-storageaccount/lib/storage-account.d.ts +4 -9
  200. package/lib/azure-storageaccount/lib/storage-account.js +15 -29
  201. package/lib/azure-subnet/index.d.ts +0 -3
  202. package/lib/azure-subnet/index.js +1 -4
  203. package/lib/azure-subnet/lib/index.d.ts +1 -4
  204. package/lib/azure-subnet/lib/index.js +2 -5
  205. package/lib/azure-subnet/lib/subnet.d.ts +3 -14
  206. package/lib/azure-subnet/lib/subnet.js +28 -47
  207. package/lib/azure-subnet/test/subnet.integ.js +19 -7
  208. package/lib/azure-subnet/test/subnet.spec.js +1 -2
  209. package/lib/azure-virtualmachine/index.d.ts +0 -6
  210. package/lib/azure-virtualmachine/index.js +1 -7
  211. package/lib/azure-virtualmachine/lib/index.d.ts +1 -10
  212. package/lib/azure-virtualmachine/lib/index.js +2 -21
  213. package/lib/azure-virtualmachine/lib/virtual-machine.d.ts +4 -13
  214. package/lib/azure-virtualmachine/lib/virtual-machine.js +15 -36
  215. package/lib/azure-virtualnetwork/index.d.ts +0 -9
  216. package/lib/azure-virtualnetwork/index.js +1 -11
  217. package/lib/azure-virtualnetwork/lib/index.d.ts +2 -9
  218. package/lib/azure-virtualnetwork/lib/index.js +17 -20
  219. package/lib/azure-virtualnetwork/lib/virtual-network.d.ts +4 -13
  220. package/lib/azure-virtualnetwork/lib/virtual-network.js +15 -36
  221. package/lib/azure-virtualnetworkmanager/index.d.ts +1 -0
  222. package/lib/azure-virtualnetworkmanager/index.js +18 -0
  223. package/lib/azure-virtualnetworkmanager/lib/connectivity-configuration-schemas.d.ts +48 -0
  224. package/lib/azure-virtualnetworkmanager/lib/connectivity-configuration-schemas.js +265 -0
  225. package/lib/azure-virtualnetworkmanager/lib/connectivity-configuration.d.ts +185 -0
  226. package/lib/azure-virtualnetworkmanager/lib/connectivity-configuration.js +206 -0
  227. package/lib/azure-virtualnetworkmanager/lib/index.d.ts +14 -0
  228. package/lib/azure-virtualnetworkmanager/lib/index.js +31 -0
  229. package/lib/azure-virtualnetworkmanager/lib/network-group-schemas.d.ts +32 -0
  230. package/lib/azure-virtualnetworkmanager/lib/network-group-schemas.js +189 -0
  231. package/lib/azure-virtualnetworkmanager/lib/network-group-static-member-schemas.d.ts +32 -0
  232. package/lib/azure-virtualnetworkmanager/lib/network-group-static-member-schemas.js +201 -0
  233. package/lib/azure-virtualnetworkmanager/lib/network-group-static-member.d.ts +135 -0
  234. package/lib/azure-virtualnetworkmanager/lib/network-group-static-member.js +163 -0
  235. package/lib/azure-virtualnetworkmanager/lib/network-group.d.ts +139 -0
  236. package/lib/azure-virtualnetworkmanager/lib/network-group.js +158 -0
  237. package/lib/azure-virtualnetworkmanager/lib/security-admin-configuration-schemas.d.ts +32 -0
  238. package/lib/azure-virtualnetworkmanager/lib/security-admin-configuration-schemas.js +182 -0
  239. package/lib/azure-virtualnetworkmanager/lib/security-admin-configuration.d.ts +144 -0
  240. package/lib/azure-virtualnetworkmanager/lib/security-admin-configuration.js +164 -0
  241. package/lib/azure-virtualnetworkmanager/lib/security-admin-rule-collection-schemas.d.ts +38 -0
  242. package/lib/azure-virtualnetworkmanager/lib/security-admin-rule-collection-schemas.js +206 -0
  243. package/lib/azure-virtualnetworkmanager/lib/security-admin-rule-collection.d.ts +142 -0
  244. package/lib/azure-virtualnetworkmanager/lib/security-admin-rule-collection.js +162 -0
  245. package/lib/azure-virtualnetworkmanager/lib/security-admin-rule-schemas.d.ts +39 -0
  246. package/lib/azure-virtualnetworkmanager/lib/security-admin-rule-schemas.js +359 -0
  247. package/lib/azure-virtualnetworkmanager/lib/security-admin-rule.d.ts +221 -0
  248. package/lib/azure-virtualnetworkmanager/lib/security-admin-rule.js +204 -0
  249. package/lib/azure-virtualnetworkmanager/lib/virtual-network-manager-schemas.d.ts +32 -0
  250. package/lib/azure-virtualnetworkmanager/lib/virtual-network-manager-schemas.js +236 -0
  251. package/lib/azure-virtualnetworkmanager/lib/virtual-network-manager.d.ts +337 -0
  252. package/lib/azure-virtualnetworkmanager/lib/virtual-network-manager.js +283 -0
  253. package/lib/azure-virtualnetworkmanager/test/virtual-network-manager.integ.d.ts +25 -0
  254. package/lib/azure-virtualnetworkmanager/test/virtual-network-manager.integ.js +402 -0
  255. package/lib/azure-virtualnetworkmanager/test/virtual-network-manager.spec.d.ts +9 -0
  256. package/lib/azure-virtualnetworkmanager/test/virtual-network-manager.spec.js +1652 -0
  257. package/lib/azure-vmss/index.d.ts +0 -5
  258. package/lib/azure-vmss/index.js +1 -6
  259. package/lib/azure-vmss/lib/index.d.ts +0 -7
  260. package/lib/azure-vmss/lib/index.js +1 -21
  261. package/lib/azure-vmss/lib/virtual-machine-scale-set.d.ts +5 -13
  262. package/lib/azure-vmss/lib/virtual-machine-scale-set.js +29 -53
  263. package/lib/core-azure/lib/azapi/azapi-resource-tags.spec.d.ts +10 -0
  264. package/lib/core-azure/lib/azapi/azapi-resource-tags.spec.js +218 -0
  265. package/lib/core-azure/lib/azapi/azapi-resource.d.ts +206 -26
  266. package/lib/core-azure/lib/azapi/azapi-resource.js +379 -91
  267. package/lib/core-azure/lib/azapi/azapi-resource.spec.js +2 -2
  268. package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-client-config/index.js +2 -2
  269. package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource/index.js +5 -5
  270. package/lib/core-azure/lib/azapi/providers-azapi/provider/index.js +5 -3
  271. package/lib/core-azure/lib/azapi/providers-azapi/resource/index.js +5 -5
  272. package/lib/core-azure/lib/azapi/providers-azapi/resource-action/index.js +3 -3
  273. package/lib/core-azure/lib/azapi/providers-azapi/update-resource/index.js +3 -3
  274. package/lib/core-azure/lib/azapi/resource-schema-validator.d.ts +118 -0
  275. package/lib/core-azure/lib/azapi/resource-schema-validator.js +236 -0
  276. package/lib/core-azure/lib/azapi/resource-version-manager.d.ts +103 -0
  277. package/lib/core-azure/lib/azapi/resource-version-manager.js +168 -0
  278. package/lib/core-azure/lib/azapi/schema-mapper/schema-mapper.js +11 -6
  279. package/lib/core-azure/lib/index.d.ts +2 -2
  280. package/lib/core-azure/lib/index.js +5 -5
  281. package/lib/core-azure/lib/version-manager/api-version-manager.js +1 -1
  282. package/lib/core-azure/lib/version-manager/interfaces/version-interfaces.js +7 -7
  283. package/lib/index.d.ts +19 -0
  284. package/lib/index.js +21 -2
  285. package/lib/testing/index.js +2 -2
  286. package/lib/testing/lib/cleanup.d.ts +1 -0
  287. package/lib/testing/lib/cleanup.js +19 -12
  288. package/lib/testing/lib/metadata.js +19 -16
  289. package/package.json +1 -1
  290. package/scripts/cleanup-test-resources.ts +22 -4
  291. package/scripts/generate-index.js +25 -8
@@ -0,0 +1,349 @@
1
+ /**
2
+ * Unified Azure Policy Assignment implementation using VersionedAzapiResource framework
3
+ *
4
+ * This class provides a version-aware implementation for managing Azure Policy Assignments
5
+ * using the AZAPI provider. Policy assignments apply policy definitions to specific scopes
6
+ * (subscription, resource group, or resource) and can provide parameter values and
7
+ * enforcement settings.
8
+ *
9
+ * Supported API Versions:
10
+ * - 2022-06-01 (Active, Latest)
11
+ *
12
+ * Features:
13
+ * - Automatic latest version resolution when no version is specified
14
+ * - Explicit version pinning for stability requirements
15
+ * - Schema-driven validation and transformation
16
+ * - Support for enforcement modes (Default, DoNotEnforce)
17
+ * - Managed identity support for remediation policies
18
+ * - Custom non-compliance messages
19
+ * - Scope exclusions (notScopes)
20
+ * - JSII compliance for multi-language support
21
+ */
22
+ import * as cdktf from "cdktf";
23
+ import { Construct } from "constructs";
24
+ import { AzapiResource, AzapiResourceProps } from "../../core-azure/lib/azapi/azapi-resource";
25
+ import { ApiSchema } from "../../core-azure/lib/version-manager/interfaces/version-interfaces";
26
+ /**
27
+ * Identity configuration for policy assignments
28
+ * Required for policies with deployIfNotExists or modify effects
29
+ */
30
+ export interface PolicyAssignmentIdentity {
31
+ /**
32
+ * The type of managed identity
33
+ * @example "SystemAssigned", "UserAssigned", "None"
34
+ */
35
+ readonly type: string;
36
+ /**
37
+ * The user assigned identities associated with the policy assignment
38
+ * Required when type is UserAssigned
39
+ *
40
+ * @example
41
+ * {
42
+ * "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rg/providers/Microsoft.ManagedIdentity/userAssignedIdentities/identity": {}
43
+ * }
44
+ */
45
+ readonly userAssignedIdentities?: {
46
+ [key: string]: any;
47
+ };
48
+ }
49
+ /**
50
+ * Non-compliance message configuration
51
+ */
52
+ export interface PolicyAssignmentNonComplianceMessage {
53
+ /**
54
+ * The non-compliance message for the policy assignment
55
+ */
56
+ readonly message: string;
57
+ /**
58
+ * The policy definition reference ID within a policy set definition
59
+ * Optional - if specified, this message applies only to the specified policy within the set
60
+ */
61
+ readonly policyDefinitionReferenceId?: string;
62
+ }
63
+ /**
64
+ * Properties for the unified Azure Policy Assignment
65
+ *
66
+ * Extends AzapiResourceProps with Policy Assignment specific properties
67
+ */
68
+ export interface PolicyAssignmentProps extends AzapiResourceProps {
69
+ /**
70
+ * The policy definition ID to assign
71
+ * This can be a built-in or custom policy definition
72
+ * Required property
73
+ *
74
+ * @example "/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Authorization/policyDefinitions/policy-name"
75
+ * @example "/providers/Microsoft.Authorization/policyDefinitions/06a78e20-9358-41c9-923c-fb736d382a4d" (built-in)
76
+ */
77
+ readonly policyDefinitionId: string;
78
+ /**
79
+ * The scope at which the policy assignment is applied
80
+ * Can be a subscription, resource group, or resource
81
+ * Required property
82
+ *
83
+ * @example "/subscriptions/00000000-0000-0000-0000-000000000000"
84
+ * @example "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rg-name"
85
+ */
86
+ readonly scope: string;
87
+ /**
88
+ * The display name of the policy assignment
89
+ * Provides a human-readable name for the assignment
90
+ *
91
+ * @example "Require tag on resources in production"
92
+ */
93
+ readonly displayName?: string;
94
+ /**
95
+ * The policy assignment description
96
+ * Provides detailed information about the assignment
97
+ *
98
+ * @example "Enforces required tags on all resources in production environment"
99
+ */
100
+ readonly description?: string;
101
+ /**
102
+ * The enforcement mode of the policy assignment
103
+ * @default "Default"
104
+ * @example "Default" - Policy effect is enforced during resource creation/update
105
+ * @example "DoNotEnforce" - Policy effect is not enforced (audit only)
106
+ */
107
+ readonly enforcementMode?: string;
108
+ /**
109
+ * Parameters for the policy assignment
110
+ * Provides values for parameters defined in the policy definition
111
+ *
112
+ * @example
113
+ * {
114
+ * tagName: {
115
+ * value: "Environment"
116
+ * },
117
+ * tagValue: {
118
+ * value: "Production"
119
+ * }
120
+ * }
121
+ */
122
+ readonly parameters?: any;
123
+ /**
124
+ * Metadata for the policy assignment
125
+ * Used to store additional information like assignedBy, parameterScopes, etc.
126
+ *
127
+ * @example
128
+ * {
129
+ * assignedBy: "admin@example.com",
130
+ * parameterScopes: {}
131
+ * }
132
+ */
133
+ readonly metadata?: any;
134
+ /**
135
+ * The managed identity associated with the policy assignment
136
+ * Required for policies with deployIfNotExists or modify effects
137
+ *
138
+ * @example
139
+ * {
140
+ * type: "SystemAssigned"
141
+ * }
142
+ */
143
+ readonly identity?: PolicyAssignmentIdentity;
144
+ /**
145
+ * The policy's excluded scopes
146
+ * Resources within these scopes will not be evaluated by the policy
147
+ *
148
+ * @example ["/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/excluded-rg"]
149
+ */
150
+ readonly notScopes?: string[];
151
+ /**
152
+ * The non-compliance messages for the policy assignment
153
+ * Provides custom messages when resources are non-compliant
154
+ *
155
+ * @example
156
+ * [
157
+ * {
158
+ * message: "Resource must have the Environment tag"
159
+ * }
160
+ * ]
161
+ */
162
+ readonly nonComplianceMessages?: PolicyAssignmentNonComplianceMessage[];
163
+ /**
164
+ * The lifecycle rules to ignore changes
165
+ * @example ["metadata"]
166
+ */
167
+ readonly ignoreChanges?: string[];
168
+ }
169
+ /**
170
+ * Properties interface for Azure Policy Assignment
171
+ * This is required for JSII compliance to support multi-language code generation
172
+ */
173
+ export interface PolicyAssignmentProperties {
174
+ /**
175
+ * The policy definition ID
176
+ */
177
+ readonly policyDefinitionId: string;
178
+ /**
179
+ * The scope of the policy assignment
180
+ */
181
+ readonly scope: string;
182
+ /**
183
+ * The display name of the policy assignment
184
+ */
185
+ readonly displayName?: string;
186
+ /**
187
+ * The policy assignment description
188
+ */
189
+ readonly description?: string;
190
+ /**
191
+ * The enforcement mode
192
+ */
193
+ readonly enforcementMode?: string;
194
+ /**
195
+ * Parameters for the policy assignment
196
+ */
197
+ readonly parameters?: any;
198
+ /**
199
+ * Metadata for the policy assignment
200
+ */
201
+ readonly metadata?: any;
202
+ /**
203
+ * The policy's excluded scopes
204
+ */
205
+ readonly notScopes?: string[];
206
+ /**
207
+ * The non-compliance messages
208
+ */
209
+ readonly nonComplianceMessages?: PolicyAssignmentNonComplianceMessage[];
210
+ }
211
+ /**
212
+ * The resource body interface for Azure Policy Assignment API calls
213
+ * This matches the Azure REST API schema for policy assignments
214
+ */
215
+ export interface PolicyAssignmentBody {
216
+ /**
217
+ * The properties of the policy assignment
218
+ */
219
+ readonly properties: PolicyAssignmentProperties;
220
+ /**
221
+ * The managed identity associated with the policy assignment
222
+ */
223
+ readonly identity?: PolicyAssignmentIdentity;
224
+ }
225
+ /**
226
+ * Unified Azure Policy Assignment implementation
227
+ *
228
+ * This class provides a single, version-aware implementation for managing Azure
229
+ * Policy Assignments. It automatically handles version resolution, schema validation,
230
+ * and property transformation.
231
+ *
232
+ * Note: Policy assignments can be deployed at subscription, resource group, or resource scope.
233
+ * Like policy definitions, they do not have a location property as they are not region-specific.
234
+ *
235
+ * @example
236
+ * // Basic policy assignment:
237
+ * const assignment = new PolicyAssignment(this, "assignment", {
238
+ * name: "require-tag-assignment",
239
+ * policyDefinitionId: policyDefinition.id,
240
+ * scope: "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rg-name",
241
+ * displayName: "Require tag on resources",
242
+ * description: "Enforces required tags on resources"
243
+ * });
244
+ *
245
+ * @example
246
+ * // Policy assignment with parameters:
247
+ * const assignment = new PolicyAssignment(this, "assignment", {
248
+ * name: "require-tag-assignment",
249
+ * policyDefinitionId: policyDefinition.id,
250
+ * scope: "/subscriptions/00000000-0000-0000-0000-000000000000",
251
+ * parameters: {
252
+ * tagName: {
253
+ * value: "Environment"
254
+ * },
255
+ * tagValue: {
256
+ * value: "Production"
257
+ * }
258
+ * }
259
+ * });
260
+ *
261
+ * @example
262
+ * // Policy assignment with managed identity:
263
+ * const assignment = new PolicyAssignment(this, "assignment", {
264
+ * name: "deploy-monitoring-assignment",
265
+ * policyDefinitionId: "/providers/Microsoft.Authorization/policyDefinitions/policy-id",
266
+ * scope: "/subscriptions/00000000-0000-0000-0000-000000000000",
267
+ * identity: {
268
+ * type: "SystemAssigned"
269
+ * }
270
+ * });
271
+ *
272
+ * @stability stable
273
+ */
274
+ export declare class PolicyAssignment extends AzapiResource {
275
+ /**
276
+ * The input properties for this Policy Assignment instance
277
+ */
278
+ readonly props: PolicyAssignmentProps;
279
+ readonly idOutput: cdktf.TerraformOutput;
280
+ readonly nameOutput: cdktf.TerraformOutput;
281
+ /**
282
+ * Creates a new Azure Policy Assignment using the VersionedAzapiResource framework
283
+ *
284
+ * The constructor automatically handles version resolution, schema registration,
285
+ * validation, and resource creation.
286
+ *
287
+ * @param scope - The scope in which to define this construct
288
+ * @param id - The unique identifier for this instance
289
+ * @param props - Configuration properties for the Policy Assignment
290
+ */
291
+ constructor(scope: Construct, id: string, props: PolicyAssignmentProps);
292
+ /**
293
+ * Gets the default API version to use when no explicit version is specified
294
+ * Returns the most recent stable version as the default
295
+ */
296
+ protected defaultVersion(): string;
297
+ /**
298
+ * Gets the Azure resource type for Policy Assignments
299
+ */
300
+ protected resourceType(): string;
301
+ /**
302
+ * Gets the API schema for the resolved version
303
+ * Uses the framework's schema resolution to get the appropriate schema
304
+ */
305
+ protected apiSchema(): ApiSchema;
306
+ /**
307
+ * Policy Assignments do not support tags at the resource level
308
+ * Tags are not a valid property for Microsoft.Authorization/policyAssignments
309
+ * @returns false - Policy Assignments cannot have tags
310
+ * @override
311
+ */
312
+ protected supportsTags(): boolean;
313
+ /**
314
+ * Creates the resource body for the Azure API call
315
+ * Transforms the input properties into the JSON format expected by Azure REST API
316
+ *
317
+ * Note: Policy assignments do not have a location property as they are
318
+ * scoped resources (subscription, resource group, or resource level).
319
+ * The scope property is NOT included in the body as it's read-only and
320
+ * automatically derived from the parentId.
321
+ */
322
+ protected createResourceBody(props: any): any;
323
+ /**
324
+ * Overrides parent ID resolution to use the scope from props
325
+ * Policy assignments are scoped resources where the scope IS the parent
326
+ */
327
+ protected resolveParentId(props: any): string;
328
+ /**
329
+ * Get the full resource identifier for use in other Azure resources
330
+ * Alias for the id property
331
+ */
332
+ get resourceId(): string;
333
+ /**
334
+ * Get the policy definition ID this assignment references
335
+ */
336
+ get policyDefinitionId(): string;
337
+ /**
338
+ * Get the scope of this policy assignment
339
+ */
340
+ get assignmentScope(): string;
341
+ /**
342
+ * Get the enforcement mode
343
+ */
344
+ get enforcementMode(): string;
345
+ /**
346
+ * Applies ignore changes lifecycle rules if specified in props
347
+ */
348
+ private _applyIgnoreChanges;
349
+ }
@@ -0,0 +1,237 @@
1
+ "use strict";
2
+ var _a;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.PolicyAssignment = void 0;
5
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
+ /**
7
+ * Unified Azure Policy Assignment implementation using VersionedAzapiResource framework
8
+ *
9
+ * This class provides a version-aware implementation for managing Azure Policy Assignments
10
+ * using the AZAPI provider. Policy assignments apply policy definitions to specific scopes
11
+ * (subscription, resource group, or resource) and can provide parameter values and
12
+ * enforcement settings.
13
+ *
14
+ * Supported API Versions:
15
+ * - 2022-06-01 (Active, Latest)
16
+ *
17
+ * Features:
18
+ * - Automatic latest version resolution when no version is specified
19
+ * - Explicit version pinning for stability requirements
20
+ * - Schema-driven validation and transformation
21
+ * - Support for enforcement modes (Default, DoNotEnforce)
22
+ * - Managed identity support for remediation policies
23
+ * - Custom non-compliance messages
24
+ * - Scope exclusions (notScopes)
25
+ * - JSII compliance for multi-language support
26
+ */
27
+ const cdktf = require("cdktf");
28
+ const policy_assignment_schemas_1 = require("./policy-assignment-schemas");
29
+ const azapi_resource_1 = require("../../core-azure/lib/azapi/azapi-resource");
30
+ /**
31
+ * Unified Azure Policy Assignment implementation
32
+ *
33
+ * This class provides a single, version-aware implementation for managing Azure
34
+ * Policy Assignments. It automatically handles version resolution, schema validation,
35
+ * and property transformation.
36
+ *
37
+ * Note: Policy assignments can be deployed at subscription, resource group, or resource scope.
38
+ * Like policy definitions, they do not have a location property as they are not region-specific.
39
+ *
40
+ * @example
41
+ * // Basic policy assignment:
42
+ * const assignment = new PolicyAssignment(this, "assignment", {
43
+ * name: "require-tag-assignment",
44
+ * policyDefinitionId: policyDefinition.id,
45
+ * scope: "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rg-name",
46
+ * displayName: "Require tag on resources",
47
+ * description: "Enforces required tags on resources"
48
+ * });
49
+ *
50
+ * @example
51
+ * // Policy assignment with parameters:
52
+ * const assignment = new PolicyAssignment(this, "assignment", {
53
+ * name: "require-tag-assignment",
54
+ * policyDefinitionId: policyDefinition.id,
55
+ * scope: "/subscriptions/00000000-0000-0000-0000-000000000000",
56
+ * parameters: {
57
+ * tagName: {
58
+ * value: "Environment"
59
+ * },
60
+ * tagValue: {
61
+ * value: "Production"
62
+ * }
63
+ * }
64
+ * });
65
+ *
66
+ * @example
67
+ * // Policy assignment with managed identity:
68
+ * const assignment = new PolicyAssignment(this, "assignment", {
69
+ * name: "deploy-monitoring-assignment",
70
+ * policyDefinitionId: "/providers/Microsoft.Authorization/policyDefinitions/policy-id",
71
+ * scope: "/subscriptions/00000000-0000-0000-0000-000000000000",
72
+ * identity: {
73
+ * type: "SystemAssigned"
74
+ * }
75
+ * });
76
+ *
77
+ * @stability stable
78
+ */
79
+ class PolicyAssignment extends azapi_resource_1.AzapiResource {
80
+ // Public properties
81
+ /**
82
+ * Creates a new Azure Policy Assignment using the VersionedAzapiResource framework
83
+ *
84
+ * The constructor automatically handles version resolution, schema registration,
85
+ * validation, and resource creation.
86
+ *
87
+ * @param scope - The scope in which to define this construct
88
+ * @param id - The unique identifier for this instance
89
+ * @param props - Configuration properties for the Policy Assignment
90
+ */
91
+ constructor(scope, id, props) {
92
+ super(scope, id, props);
93
+ this.props = props;
94
+ // Validate that location is provided when identity is specified
95
+ if (props.identity && !this.location) {
96
+ throw new Error(`Location is required for Policy Assignment "${props.name || id}" when identity is specified. ` +
97
+ `The managed identity must be provisioned in a specific Azure region.`);
98
+ }
99
+ // Extract properties from the AZAPI resource outputs using Terraform interpolation
100
+ // Create Terraform outputs for easy access and referencing from other resources
101
+ this.idOutput = new cdktf.TerraformOutput(this, "id", {
102
+ value: this.id,
103
+ description: "The ID of the Policy Assignment",
104
+ });
105
+ this.nameOutput = new cdktf.TerraformOutput(this, "name", {
106
+ value: `\${${this.terraformResource.fqn}.name}`,
107
+ description: "The name of the Policy Assignment",
108
+ });
109
+ // Override logical IDs to match original naming convention
110
+ this.idOutput.overrideLogicalId("id");
111
+ this.nameOutput.overrideLogicalId("name");
112
+ // Apply ignore changes if specified
113
+ this._applyIgnoreChanges();
114
+ }
115
+ // =============================================================================
116
+ // REQUIRED ABSTRACT METHODS FROM AzapiResource
117
+ // =============================================================================
118
+ /**
119
+ * Gets the default API version to use when no explicit version is specified
120
+ * Returns the most recent stable version as the default
121
+ */
122
+ defaultVersion() {
123
+ return "2022-06-01";
124
+ }
125
+ /**
126
+ * Gets the Azure resource type for Policy Assignments
127
+ */
128
+ resourceType() {
129
+ return policy_assignment_schemas_1.POLICY_ASSIGNMENT_TYPE;
130
+ }
131
+ /**
132
+ * Gets the API schema for the resolved version
133
+ * Uses the framework's schema resolution to get the appropriate schema
134
+ */
135
+ apiSchema() {
136
+ return this.resolveSchema();
137
+ }
138
+ /**
139
+ * Policy Assignments do not support tags at the resource level
140
+ * Tags are not a valid property for Microsoft.Authorization/policyAssignments
141
+ * @returns false - Policy Assignments cannot have tags
142
+ * @override
143
+ */
144
+ supportsTags() {
145
+ return false;
146
+ }
147
+ /**
148
+ * Creates the resource body for the Azure API call
149
+ * Transforms the input properties into the JSON format expected by Azure REST API
150
+ *
151
+ * Note: Policy assignments do not have a location property as they are
152
+ * scoped resources (subscription, resource group, or resource level).
153
+ * The scope property is NOT included in the body as it's read-only and
154
+ * automatically derived from the parentId.
155
+ */
156
+ createResourceBody(props) {
157
+ const typedProps = props;
158
+ const body = {
159
+ properties: {
160
+ policyDefinitionId: typedProps.policyDefinitionId,
161
+ // Note: scope is NOT included here - it's read-only and derived from parentId
162
+ displayName: typedProps.displayName,
163
+ description: typedProps.description,
164
+ enforcementMode: typedProps.enforcementMode || "Default",
165
+ parameters: typedProps.parameters,
166
+ metadata: typedProps.metadata,
167
+ notScopes: typedProps.notScopes,
168
+ nonComplianceMessages: typedProps.nonComplianceMessages,
169
+ },
170
+ };
171
+ // Add identity if provided
172
+ if (typedProps.identity) {
173
+ body.identity = typedProps.identity;
174
+ // Azure requires location when identity is specified for managed identity provisioning
175
+ body.location = typedProps.location;
176
+ }
177
+ return body;
178
+ }
179
+ /**
180
+ * Overrides parent ID resolution to use the scope from props
181
+ * Policy assignments are scoped resources where the scope IS the parent
182
+ */
183
+ resolveParentId(props) {
184
+ const typedProps = props;
185
+ return typedProps.scope;
186
+ }
187
+ // =============================================================================
188
+ // PUBLIC METHODS FOR POLICY ASSIGNMENT OPERATIONS
189
+ // =============================================================================
190
+ /**
191
+ * Get the full resource identifier for use in other Azure resources
192
+ * Alias for the id property
193
+ */
194
+ get resourceId() {
195
+ return this.id;
196
+ }
197
+ /**
198
+ * Get the policy definition ID this assignment references
199
+ */
200
+ get policyDefinitionId() {
201
+ return this.props.policyDefinitionId;
202
+ }
203
+ /**
204
+ * Get the scope of this policy assignment
205
+ */
206
+ get assignmentScope() {
207
+ return this.props.scope;
208
+ }
209
+ /**
210
+ * Get the enforcement mode
211
+ */
212
+ get enforcementMode() {
213
+ return this.props.enforcementMode || "Default";
214
+ }
215
+ // =============================================================================
216
+ // PRIVATE HELPER METHODS
217
+ // =============================================================================
218
+ /**
219
+ * Applies ignore changes lifecycle rules if specified in props
220
+ */
221
+ _applyIgnoreChanges() {
222
+ if (this.props.ignoreChanges && this.props.ignoreChanges.length > 0) {
223
+ this.terraformResource.addOverride("lifecycle", [
224
+ {
225
+ ignore_changes: this.props.ignoreChanges,
226
+ },
227
+ ]);
228
+ }
229
+ }
230
+ }
231
+ exports.PolicyAssignment = PolicyAssignment;
232
+ _a = JSII_RTTI_SYMBOL_1;
233
+ PolicyAssignment[_a] = { fqn: "@microsoft/terraform-cdk-constructs.PolicyAssignment", version: "1.3.1" };
234
+ (() => {
235
+ azapi_resource_1.AzapiResource.registerSchemas(policy_assignment_schemas_1.POLICY_ASSIGNMENT_TYPE, policy_assignment_schemas_1.ALL_POLICY_ASSIGNMENT_VERSIONS);
236
+ })();
237
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9saWN5LWFzc2lnbm1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXp1cmUtcG9saWN5YXNzaWdubWVudC9saWIvcG9saWN5LWFzc2lnbm1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkc7QUFFSCwrQkFBK0I7QUFFL0IsMkVBR3FDO0FBQ3JDLDhFQUdtRDtBQWtPbkQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWdERztBQUNILE1BQWEsZ0JBQWlCLFNBQVEsOEJBQWE7SUFpQmpELG9CQUFvQjtJQUVwQjs7Ozs7Ozs7O09BU0c7SUFDSCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQTRCO1FBQ3BFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRXhCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBRW5CLGdFQUFnRTtRQUNoRSxJQUFJLEtBQUssQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDckMsTUFBTSxJQUFJLEtBQUssQ0FDYiwrQ0FBK0MsS0FBSyxDQUFDLElBQUksSUFBSSxFQUFFLGdDQUFnQztnQkFDN0Ysc0VBQXNFLENBQ3pFLENBQUM7UUFDSixDQUFDO1FBRUQsbUZBQW1GO1FBRW5GLGdGQUFnRjtRQUNoRixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFO1lBQ3BELEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRTtZQUNkLFdBQVcsRUFBRSxpQ0FBaUM7U0FDL0MsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLEtBQUssQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRTtZQUN4RCxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxRQUFRO1lBQy9DLFdBQVcsRUFBRSxtQ0FBbUM7U0FDakQsQ0FBQyxDQUFDO1FBRUgsMkRBQTJEO1FBQzNELElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUUxQyxvQ0FBb0M7UUFDcEMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELGdGQUFnRjtJQUNoRiwrQ0FBK0M7SUFDL0MsZ0ZBQWdGO0lBRWhGOzs7T0FHRztJQUNPLGNBQWM7UUFDdEIsT0FBTyxZQUFZLENBQUM7SUFDdEIsQ0FBQztJQUVEOztPQUVHO0lBQ08sWUFBWTtRQUNwQixPQUFPLGtEQUFzQixDQUFDO0lBQ2hDLENBQUM7SUFFRDs7O09BR0c7SUFDTyxTQUFTO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNPLFlBQVk7UUFDcEIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDTyxrQkFBa0IsQ0FBQyxLQUFVO1FBQ3JDLE1BQU0sVUFBVSxHQUFHLEtBQThCLENBQUM7UUFFbEQsTUFBTSxJQUFJLEdBQVE7WUFDaEIsVUFBVSxFQUFFO2dCQUNWLGtCQUFrQixFQUFFLFVBQVUsQ0FBQyxrQkFBa0I7Z0JBQ2pELDhFQUE4RTtnQkFDOUUsV0FBVyxFQUFFLFVBQVUsQ0FBQyxXQUFXO2dCQUNuQyxXQUFXLEVBQUUsVUFBVSxDQUFDLFdBQVc7Z0JBQ25DLGVBQWUsRUFBRSxVQUFVLENBQUMsZUFBZSxJQUFJLFNBQVM7Z0JBQ3hELFVBQVUsRUFBRSxVQUFVLENBQUMsVUFBVTtnQkFDakMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxRQUFRO2dCQUM3QixTQUFTLEVBQUUsVUFBVSxDQUFDLFNBQVM7Z0JBQy9CLHFCQUFxQixFQUFFLFVBQVUsQ0FBQyxxQkFBcUI7YUFDeEQ7U0FDRixDQUFDO1FBRUYsMkJBQTJCO1FBQzNCLElBQUksVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQztZQUNwQyx1RkFBdUY7WUFDdkYsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDO1FBQ3RDLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7O09BR0c7SUFDTyxlQUFlLENBQUMsS0FBVTtRQUNsQyxNQUFNLFVBQVUsR0FBRyxLQUE4QixDQUFDO1FBQ2xELE9BQU8sVUFBVSxDQUFDLEtBQUssQ0FBQztJQUMxQixDQUFDO0lBRUQsZ0ZBQWdGO0lBQ2hGLGtEQUFrRDtJQUNsRCxnRkFBZ0Y7SUFFaEY7OztPQUdHO0lBQ0gsSUFBVyxVQUFVO1FBQ25CLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUNqQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLGtCQUFrQjtRQUMzQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUM7SUFDdkMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxlQUFlO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7SUFDMUIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxlQUFlO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLElBQUksU0FBUyxDQUFDO0lBQ2pELENBQUM7SUFFRCxnRkFBZ0Y7SUFDaEYseUJBQXlCO0lBQ3pCLGdGQUFnRjtJQUVoRjs7T0FFRztJQUNLLG1CQUFtQjtRQUN6QixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNwRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRTtnQkFDOUM7b0JBQ0UsY0FBYyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYTtpQkFDekM7YUFDRixDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQzs7QUFqTUgsNENBa01DOzs7QUFqTUM7SUFDRSw4QkFBYSxDQUFDLGVBQWUsQ0FDM0Isa0RBQXNCLEVBQ3RCLDBEQUE4QixDQUMvQixDQUFDO0FBQ0osQ0FBQyxHQUFBLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFVuaWZpZWQgQXp1cmUgUG9saWN5IEFzc2lnbm1lbnQgaW1wbGVtZW50YXRpb24gdXNpbmcgVmVyc2lvbmVkQXphcGlSZXNvdXJjZSBmcmFtZXdvcmtcbiAqXG4gKiBUaGlzIGNsYXNzIHByb3ZpZGVzIGEgdmVyc2lvbi1hd2FyZSBpbXBsZW1lbnRhdGlvbiBmb3IgbWFuYWdpbmcgQXp1cmUgUG9saWN5IEFzc2lnbm1lbnRzXG4gKiB1c2luZyB0aGUgQVpBUEkgcHJvdmlkZXIuIFBvbGljeSBhc3NpZ25tZW50cyBhcHBseSBwb2xpY3kgZGVmaW5pdGlvbnMgdG8gc3BlY2lmaWMgc2NvcGVzXG4gKiAoc3Vic2NyaXB0aW9uLCByZXNvdXJjZSBncm91cCwgb3IgcmVzb3VyY2UpIGFuZCBjYW4gcHJvdmlkZSBwYXJhbWV0ZXIgdmFsdWVzIGFuZFxuICogZW5mb3JjZW1lbnQgc2V0dGluZ3MuXG4gKlxuICogU3VwcG9ydGVkIEFQSSBWZXJzaW9uczpcbiAqIC0gMjAyMi0wNi0wMSAoQWN0aXZlLCBMYXRlc3QpXG4gKlxuICogRmVhdHVyZXM6XG4gKiAtIEF1dG9tYXRpYyBsYXRlc3QgdmVyc2lvbiByZXNvbHV0aW9uIHdoZW4gbm8gdmVyc2lvbiBpcyBzcGVjaWZpZWRcbiAqIC0gRXhwbGljaXQgdmVyc2lvbiBwaW5uaW5nIGZvciBzdGFiaWxpdHkgcmVxdWlyZW1lbnRzXG4gKiAtIFNjaGVtYS1kcml2ZW4gdmFsaWRhdGlvbiBhbmQgdHJhbnNmb3JtYXRpb25cbiAqIC0gU3VwcG9ydCBmb3IgZW5mb3JjZW1lbnQgbW9kZXMgKERlZmF1bHQsIERvTm90RW5mb3JjZSlcbiAqIC0gTWFuYWdlZCBpZGVudGl0eSBzdXBwb3J0IGZvciByZW1lZGlhdGlvbiBwb2xpY2llc1xuICogLSBDdXN0b20gbm9uLWNvbXBsaWFuY2UgbWVzc2FnZXNcbiAqIC0gU2NvcGUgZXhjbHVzaW9ucyAobm90U2NvcGVzKVxuICogLSBKU0lJIGNvbXBsaWFuY2UgZm9yIG11bHRpLWxhbmd1YWdlIHN1cHBvcnRcbiAqL1xuXG5pbXBvcnQgKiBhcyBjZGt0ZiBmcm9tIFwiY2RrdGZcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQge1xuICBBTExfUE9MSUNZX0FTU0lHTk1FTlRfVkVSU0lPTlMsXG4gIFBPTElDWV9BU1NJR05NRU5UX1RZUEUsXG59IGZyb20gXCIuL3BvbGljeS1hc3NpZ25tZW50LXNjaGVtYXNcIjtcbmltcG9ydCB7XG4gIEF6YXBpUmVzb3VyY2UsXG4gIEF6YXBpUmVzb3VyY2VQcm9wcyxcbn0gZnJvbSBcIi4uLy4uL2NvcmUtYXp1cmUvbGliL2F6YXBpL2F6YXBpLXJlc291cmNlXCI7XG5pbXBvcnQgeyBBcGlTY2hlbWEgfSBmcm9tIFwiLi4vLi4vY29yZS1henVyZS9saWIvdmVyc2lvbi1tYW5hZ2VyL2ludGVyZmFjZXMvdmVyc2lvbi1pbnRlcmZhY2VzXCI7XG5cbi8qKlxuICogSWRlbnRpdHkgY29uZmlndXJhdGlvbiBmb3IgcG9saWN5IGFzc2lnbm1lbnRzXG4gKiBSZXF1aXJlZCBmb3IgcG9saWNpZXMgd2l0aCBkZXBsb3lJZk5vdEV4aXN0cyBvciBtb2RpZnkgZWZmZWN0c1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFBvbGljeUFzc2lnbm1lbnRJZGVudGl0eSB7XG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiBtYW5hZ2VkIGlkZW50aXR5XG4gICAqIEBleGFtcGxlIFwiU3lzdGVtQXNzaWduZWRcIiwgXCJVc2VyQXNzaWduZWRcIiwgXCJOb25lXCJcbiAgICovXG4gIHJlYWRvbmx5IHR5cGU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHVzZXIgYXNzaWduZWQgaWRlbnRpdGllcyBhc3NvY2lhdGVkIHdpdGggdGhlIHBvbGljeSBhc3NpZ25tZW50XG4gICAqIFJlcXVpcmVkIHdoZW4gdHlwZSBpcyBVc2VyQXNzaWduZWRcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICoge1xuICAgKiAgIFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwL3Jlc291cmNlR3JvdXBzL3JnL3Byb3ZpZGVycy9NaWNyb3NvZnQuTWFuYWdlZElkZW50aXR5L3VzZXJBc3NpZ25lZElkZW50aXRpZXMvaWRlbnRpdHlcIjoge31cbiAgICogfVxuICAgKi9cbiAgcmVhZG9ubHkgdXNlckFzc2lnbmVkSWRlbnRpdGllcz86IHsgW2tleTogc3RyaW5nXTogYW55IH07XG59XG5cbi8qKlxuICogTm9uLWNvbXBsaWFuY2UgbWVzc2FnZSBjb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUG9saWN5QXNzaWdubWVudE5vbkNvbXBsaWFuY2VNZXNzYWdlIHtcbiAgLyoqXG4gICAqIFRoZSBub24tY29tcGxpYW5jZSBtZXNzYWdlIGZvciB0aGUgcG9saWN5IGFzc2lnbm1lbnRcbiAgICovXG4gIHJlYWRvbmx5IG1lc3NhZ2U6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBvbGljeSBkZWZpbml0aW9uIHJlZmVyZW5jZSBJRCB3aXRoaW4gYSBwb2xpY3kgc2V0IGRlZmluaXRpb25cbiAgICogT3B0aW9uYWwgLSBpZiBzcGVjaWZpZWQsIHRoaXMgbWVzc2FnZSBhcHBsaWVzIG9ubHkgdG8gdGhlIHNwZWNpZmllZCBwb2xpY3kgd2l0aGluIHRoZSBzZXRcbiAgICovXG4gIHJlYWRvbmx5IHBvbGljeURlZmluaXRpb25SZWZlcmVuY2VJZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciB0aGUgdW5pZmllZCBBenVyZSBQb2xpY3kgQXNzaWdubWVudFxuICpcbiAqIEV4dGVuZHMgQXphcGlSZXNvdXJjZVByb3BzIHdpdGggUG9saWN5IEFzc2lnbm1lbnQgc3BlY2lmaWMgcHJvcGVydGllc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFBvbGljeUFzc2lnbm1lbnRQcm9wcyBleHRlbmRzIEF6YXBpUmVzb3VyY2VQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgcG9saWN5IGRlZmluaXRpb24gSUQgdG8gYXNzaWduXG4gICAqIFRoaXMgY2FuIGJlIGEgYnVpbHQtaW4gb3IgY3VzdG9tIHBvbGljeSBkZWZpbml0aW9uXG4gICAqIFJlcXVpcmVkIHByb3BlcnR5XG4gICAqXG4gICAqIEBleGFtcGxlIFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwL3Byb3ZpZGVycy9NaWNyb3NvZnQuQXV0aG9yaXphdGlvbi9wb2xpY3lEZWZpbml0aW9ucy9wb2xpY3ktbmFtZVwiXG4gICAqIEBleGFtcGxlIFwiL3Byb3ZpZGVycy9NaWNyb3NvZnQuQXV0aG9yaXphdGlvbi9wb2xpY3lEZWZpbml0aW9ucy8wNmE3OGUyMC05MzU4LTQxYzktOTIzYy1mYjczNmQzODJhNGRcIiAoYnVpbHQtaW4pXG4gICAqL1xuICByZWFkb25seSBwb2xpY3lEZWZpbml0aW9uSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHNjb3BlIGF0IHdoaWNoIHRoZSBwb2xpY3kgYXNzaWdubWVudCBpcyBhcHBsaWVkXG4gICAqIENhbiBiZSBhIHN1YnNjcmlwdGlvbiwgcmVzb3VyY2UgZ3JvdXAsIG9yIHJlc291cmNlXG4gICAqIFJlcXVpcmVkIHByb3BlcnR5XG4gICAqXG4gICAqIEBleGFtcGxlIFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwXCJcbiAgICogQGV4YW1wbGUgXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAvcmVzb3VyY2VHcm91cHMvcmctbmFtZVwiXG4gICAqL1xuICByZWFkb25seSBzY29wZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZGlzcGxheSBuYW1lIG9mIHRoZSBwb2xpY3kgYXNzaWdubWVudFxuICAgKiBQcm92aWRlcyBhIGh1bWFuLXJlYWRhYmxlIG5hbWUgZm9yIHRoZSBhc3NpZ25tZW50XG4gICAqXG4gICAqIEBleGFtcGxlIFwiUmVxdWlyZSB0YWcgb24gcmVzb3VyY2VzIGluIHByb2R1Y3Rpb25cIlxuICAgKi9cbiAgcmVhZG9ubHkgZGlzcGxheU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwb2xpY3kgYXNzaWdubWVudCBkZXNjcmlwdGlvblxuICAgKiBQcm92aWRlcyBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYXNzaWdubWVudFxuICAgKlxuICAgKiBAZXhhbXBsZSBcIkVuZm9yY2VzIHJlcXVpcmVkIHRhZ3Mgb24gYWxsIHJlc291cmNlcyBpbiBwcm9kdWN0aW9uIGVudmlyb25tZW50XCJcbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZW5mb3JjZW1lbnQgbW9kZSBvZiB0aGUgcG9saWN5IGFzc2lnbm1lbnRcbiAgICogQGRlZmF1bHQgXCJEZWZhdWx0XCJcbiAgICogQGV4YW1wbGUgXCJEZWZhdWx0XCIgLSBQb2xpY3kgZWZmZWN0IGlzIGVuZm9yY2VkIGR1cmluZyByZXNvdXJjZSBjcmVhdGlvbi91cGRhdGVcbiAgICogQGV4YW1wbGUgXCJEb05vdEVuZm9yY2VcIiAtIFBvbGljeSBlZmZlY3QgaXMgbm90IGVuZm9yY2VkIChhdWRpdCBvbmx5KVxuICAgKi9cbiAgcmVhZG9ubHkgZW5mb3JjZW1lbnRNb2RlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQYXJhbWV0ZXJzIGZvciB0aGUgcG9saWN5IGFzc2lnbm1lbnRcbiAgICogUHJvdmlkZXMgdmFsdWVzIGZvciBwYXJhbWV0ZXJzIGRlZmluZWQgaW4gdGhlIHBvbGljeSBkZWZpbml0aW9uXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHtcbiAgICogICB0YWdOYW1lOiB7XG4gICAqICAgICB2YWx1ZTogXCJFbnZpcm9ubWVudFwiXG4gICAqICAgfSxcbiAgICogICB0YWdWYWx1ZToge1xuICAgKiAgICAgdmFsdWU6IFwiUHJvZHVjdGlvblwiXG4gICAqICAgfVxuICAgKiB9XG4gICAqL1xuICByZWFkb25seSBwYXJhbWV0ZXJzPzogYW55O1xuXG4gIC8qKlxuICAgKiBNZXRhZGF0YSBmb3IgdGhlIHBvbGljeSBhc3NpZ25tZW50XG4gICAqIFVzZWQgdG8gc3RvcmUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBsaWtlIGFzc2lnbmVkQnksIHBhcmFtZXRlclNjb3BlcywgZXRjLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiB7XG4gICAqICAgYXNzaWduZWRCeTogXCJhZG1pbkBleGFtcGxlLmNvbVwiLFxuICAgKiAgIHBhcmFtZXRlclNjb3Blczoge31cbiAgICogfVxuICAgKi9cbiAgcmVhZG9ubHkgbWV0YWRhdGE/OiBhbnk7XG5cbiAgLyoqXG4gICAqIFRoZSBtYW5hZ2VkIGlkZW50aXR5IGFzc29jaWF0ZWQgd2l0aCB0aGUgcG9saWN5IGFzc2lnbm1lbnRcbiAgICogUmVxdWlyZWQgZm9yIHBvbGljaWVzIHdpdGggZGVwbG95SWZOb3RFeGlzdHMgb3IgbW9kaWZ5IGVmZmVjdHNcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICoge1xuICAgKiAgIHR5cGU6IFwiU3lzdGVtQXNzaWduZWRcIlxuICAgKiB9XG4gICAqL1xuICByZWFkb25seSBpZGVudGl0eT86IFBvbGljeUFzc2lnbm1lbnRJZGVudGl0eTtcblxuICAvKipcbiAgICogVGhlIHBvbGljeSdzIGV4Y2x1ZGVkIHNjb3Blc1xuICAgKiBSZXNvdXJjZXMgd2l0aGluIHRoZXNlIHNjb3BlcyB3aWxsIG5vdCBiZSBldmFsdWF0ZWQgYnkgdGhlIHBvbGljeVxuICAgKlxuICAgKiBAZXhhbXBsZSBbXCIvc3Vic2NyaXB0aW9ucy8wMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAvcmVzb3VyY2VHcm91cHMvZXhjbHVkZWQtcmdcIl1cbiAgICovXG4gIHJlYWRvbmx5IG5vdFNjb3Blcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgbm9uLWNvbXBsaWFuY2UgbWVzc2FnZXMgZm9yIHRoZSBwb2xpY3kgYXNzaWdubWVudFxuICAgKiBQcm92aWRlcyBjdXN0b20gbWVzc2FnZXMgd2hlbiByZXNvdXJjZXMgYXJlIG5vbi1jb21wbGlhbnRcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogW1xuICAgKiAgIHtcbiAgICogICAgIG1lc3NhZ2U6IFwiUmVzb3VyY2UgbXVzdCBoYXZlIHRoZSBFbnZpcm9ubWVudCB0YWdcIlxuICAgKiAgIH1cbiAgICogXVxuICAgKi9cbiAgcmVhZG9ubHkgbm9uQ29tcGxpYW5jZU1lc3NhZ2VzPzogUG9saWN5QXNzaWdubWVudE5vbkNvbXBsaWFuY2VNZXNzYWdlW107XG5cbiAgLyoqXG4gICAqIFRoZSBsaWZlY3ljbGUgcnVsZXMgdG8gaWdub3JlIGNoYW5nZXNcbiAgICogQGV4YW1wbGUgW1wibWV0YWRhdGFcIl1cbiAgICovXG4gIHJlYWRvbmx5IGlnbm9yZUNoYW5nZXM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGludGVyZmFjZSBmb3IgQXp1cmUgUG9saWN5IEFzc2lnbm1lbnRcbiAqIFRoaXMgaXMgcmVxdWlyZWQgZm9yIEpTSUkgY29tcGxpYW5jZSB0byBzdXBwb3J0IG11bHRpLWxhbmd1YWdlIGNvZGUgZ2VuZXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBvbGljeUFzc2lnbm1lbnRQcm9wZXJ0aWVzIHtcbiAgLyoqXG4gICAqIFRoZSBwb2xpY3kgZGVmaW5pdGlvbiBJRFxuICAgKi9cbiAgcmVhZG9ubHkgcG9saWN5RGVmaW5pdGlvbklkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBzY29wZSBvZiB0aGUgcG9saWN5IGFzc2lnbm1lbnRcbiAgICovXG4gIHJlYWRvbmx5IHNjb3BlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBkaXNwbGF5IG5hbWUgb2YgdGhlIHBvbGljeSBhc3NpZ25tZW50XG4gICAqL1xuICByZWFkb25seSBkaXNwbGF5TmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBvbGljeSBhc3NpZ25tZW50IGRlc2NyaXB0aW9uXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGVuZm9yY2VtZW50IG1vZGVcbiAgICovXG4gIHJlYWRvbmx5IGVuZm9yY2VtZW50TW9kZT86IHN0cmluZztcblxuICAvKipcbiAgICogUGFyYW1ldGVycyBmb3IgdGhlIHBvbGljeSBhc3NpZ25tZW50XG4gICAqL1xuICByZWFkb25seSBwYXJhbWV0ZXJzPzogYW55O1xuXG4gIC8qKlxuICAgKiBNZXRhZGF0YSBmb3IgdGhlIHBvbGljeSBhc3NpZ25tZW50XG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IGFueTtcblxuICAvKipcbiAgICogVGhlIHBvbGljeSdzIGV4Y2x1ZGVkIHNjb3Blc1xuICAgKi9cbiAgcmVhZG9ubHkgbm90U2NvcGVzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBub24tY29tcGxpYW5jZSBtZXNzYWdlc1xuICAgKi9cbiAgcmVhZG9ubHkgbm9uQ29tcGxpYW5jZU1lc3NhZ2VzPzogUG9saWN5QXNzaWdubWVudE5vbkNvbXBsaWFuY2VNZXNzYWdlW107XG59XG5cbi8qKlxuICogVGhlIHJlc291cmNlIGJvZHkgaW50ZXJmYWNlIGZvciBBenVyZSBQb2xpY3kgQXNzaWdubWVudCBBUEkgY2FsbHNcbiAqIFRoaXMgbWF0Y2hlcyB0aGUgQXp1cmUgUkVTVCBBUEkgc2NoZW1hIGZvciBwb2xpY3kgYXNzaWdubWVudHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQb2xpY3lBc3NpZ25tZW50Qm9keSB7XG4gIC8qKlxuICAgKiBUaGUgcHJvcGVydGllcyBvZiB0aGUgcG9saWN5IGFzc2lnbm1lbnRcbiAgICovXG4gIHJlYWRvbmx5IHByb3BlcnRpZXM6IFBvbGljeUFzc2lnbm1lbnRQcm9wZXJ0aWVzO1xuXG4gIC8qKlxuICAgKiBUaGUgbWFuYWdlZCBpZGVudGl0eSBhc3NvY2lhdGVkIHdpdGggdGhlIHBvbGljeSBhc3NpZ25tZW50XG4gICAqL1xuICByZWFkb25seSBpZGVudGl0eT86IFBvbGljeUFzc2lnbm1lbnRJZGVudGl0eTtcbn1cblxuLyoqXG4gKiBVbmlmaWVkIEF6dXJlIFBvbGljeSBBc3NpZ25tZW50IGltcGxlbWVudGF0aW9uXG4gKlxuICogVGhpcyBjbGFzcyBwcm92aWRlcyBhIHNpbmdsZSwgdmVyc2lvbi1hd2FyZSBpbXBsZW1lbnRhdGlvbiBmb3IgbWFuYWdpbmcgQXp1cmVcbiAqIFBvbGljeSBBc3NpZ25tZW50cy4gSXQgYXV0b21hdGljYWxseSBoYW5kbGVzIHZlcnNpb24gcmVzb2x1dGlvbiwgc2NoZW1hIHZhbGlkYXRpb24sXG4gKiBhbmQgcHJvcGVydHkgdHJhbnNmb3JtYXRpb24uXG4gKlxuICogTm90ZTogUG9saWN5IGFzc2lnbm1lbnRzIGNhbiBiZSBkZXBsb3llZCBhdCBzdWJzY3JpcHRpb24sIHJlc291cmNlIGdyb3VwLCBvciByZXNvdXJjZSBzY29wZS5cbiAqIExpa2UgcG9saWN5IGRlZmluaXRpb25zLCB0aGV5IGRvIG5vdCBoYXZlIGEgbG9jYXRpb24gcHJvcGVydHkgYXMgdGhleSBhcmUgbm90IHJlZ2lvbi1zcGVjaWZpYy5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQmFzaWMgcG9saWN5IGFzc2lnbm1lbnQ6XG4gKiBjb25zdCBhc3NpZ25tZW50ID0gbmV3IFBvbGljeUFzc2lnbm1lbnQodGhpcywgXCJhc3NpZ25tZW50XCIsIHtcbiAqICAgbmFtZTogXCJyZXF1aXJlLXRhZy1hc3NpZ25tZW50XCIsXG4gKiAgIHBvbGljeURlZmluaXRpb25JZDogcG9saWN5RGVmaW5pdGlvbi5pZCxcbiAqICAgc2NvcGU6IFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwL3Jlc291cmNlR3JvdXBzL3JnLW5hbWVcIixcbiAqICAgZGlzcGxheU5hbWU6IFwiUmVxdWlyZSB0YWcgb24gcmVzb3VyY2VzXCIsXG4gKiAgIGRlc2NyaXB0aW9uOiBcIkVuZm9yY2VzIHJlcXVpcmVkIHRhZ3Mgb24gcmVzb3VyY2VzXCJcbiAqIH0pO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBQb2xpY3kgYXNzaWdubWVudCB3aXRoIHBhcmFtZXRlcnM6XG4gKiBjb25zdCBhc3NpZ25tZW50ID0gbmV3IFBvbGljeUFzc2lnbm1lbnQodGhpcywgXCJhc3NpZ25tZW50XCIsIHtcbiAqICAgbmFtZTogXCJyZXF1aXJlLXRhZy1hc3NpZ25tZW50XCIsXG4gKiAgIHBvbGljeURlZmluaXRpb25JZDogcG9saWN5RGVmaW5pdGlvbi5pZCxcbiAqICAgc2NvcGU6IFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwXCIsXG4gKiAgIHBhcmFtZXRlcnM6IHtcbiAqICAgICB0YWdOYW1lOiB7XG4gKiAgICAgICB2YWx1ZTogXCJFbnZpcm9ubWVudFwiXG4gKiAgICAgfSxcbiAqICAgICB0YWdWYWx1ZToge1xuICogICAgICAgdmFsdWU6IFwiUHJvZHVjdGlvblwiXG4gKiAgICAgfVxuICogICB9XG4gKiB9KTtcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gUG9saWN5IGFzc2lnbm1lbnQgd2l0aCBtYW5hZ2VkIGlkZW50aXR5OlxuICogY29uc3QgYXNzaWdubWVudCA9IG5ldyBQb2xpY3lBc3NpZ25tZW50KHRoaXMsIFwiYXNzaWdubWVudFwiLCB7XG4gKiAgIG5hbWU6IFwiZGVwbG95LW1vbml0b3JpbmctYXNzaWdubWVudFwiLFxuICogICBwb2xpY3lEZWZpbml0aW9uSWQ6IFwiL3Byb3ZpZGVycy9NaWNyb3NvZnQuQXV0aG9yaXphdGlvbi9wb2xpY3lEZWZpbml0aW9ucy9wb2xpY3ktaWRcIixcbiAqICAgc2NvcGU6IFwiL3N1YnNjcmlwdGlvbnMvMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwXCIsXG4gKiAgIGlkZW50aXR5OiB7XG4gKiAgICAgdHlwZTogXCJTeXN0ZW1Bc3NpZ25lZFwiXG4gKiAgIH1cbiAqIH0pO1xuICpcbiAqIEBzdGFiaWxpdHkgc3RhYmxlXG4gKi9cbmV4cG9ydCBjbGFzcyBQb2xpY3lBc3NpZ25tZW50IGV4dGVuZHMgQXphcGlSZXNvdXJjZSB7XG4gIHN0YXRpYyB7XG4gICAgQXphcGlSZXNvdXJjZS5yZWdpc3RlclNjaGVtYXMoXG4gICAgICBQT0xJQ1lfQVNTSUdOTUVOVF9UWVBFLFxuICAgICAgQUxMX1BPTElDWV9BU1NJR05NRU5UX1ZFUlNJT05TLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGlucHV0IHByb3BlcnRpZXMgZm9yIHRoaXMgUG9saWN5IEFzc2lnbm1lbnQgaW5zdGFuY2VcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBwcm9wczogUG9saWN5QXNzaWdubWVudFByb3BzO1xuXG4gIC8vIE91dHB1dCBwcm9wZXJ0aWVzIGZvciBlYXN5IGFjY2VzcyBhbmQgcmVmZXJlbmNpbmdcbiAgcHVibGljIHJlYWRvbmx5IGlkT3V0cHV0OiBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQ7XG4gIHB1YmxpYyByZWFkb25seSBuYW1lT3V0cHV0OiBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQ7XG5cbiAgLy8gUHVibGljIHByb3BlcnRpZXNcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBBenVyZSBQb2xpY3kgQXNzaWdubWVudCB1c2luZyB0aGUgVmVyc2lvbmVkQXphcGlSZXNvdXJjZSBmcmFtZXdvcmtcbiAgICpcbiAgICogVGhlIGNvbnN0cnVjdG9yIGF1dG9tYXRpY2FsbHkgaGFuZGxlcyB2ZXJzaW9uIHJlc29sdXRpb24sIHNjaGVtYSByZWdpc3RyYXRpb24sXG4gICAqIHZhbGlkYXRpb24sIGFuZCByZXNvdXJjZSBjcmVhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIC0gVGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIGNvbnN0cnVjdFxuICAgKiBAcGFyYW0gaWQgLSBUaGUgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoaXMgaW5zdGFuY2VcbiAgICogQHBhcmFtIHByb3BzIC0gQ29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzIGZvciB0aGUgUG9saWN5IEFzc2lnbm1lbnRcbiAgICovXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBQb2xpY3lBc3NpZ25tZW50UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcblxuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcblxuICAgIC8vIFZhbGlkYXRlIHRoYXQgbG9jYXRpb24gaXMgcHJvdmlkZWQgd2hlbiBpZGVudGl0eSBpcyBzcGVjaWZpZWRcbiAgICBpZiAocHJvcHMuaWRlbnRpdHkgJiYgIXRoaXMubG9jYXRpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYExvY2F0aW9uIGlzIHJlcXVpcmVkIGZvciBQb2xpY3kgQXNzaWdubWVudCBcIiR7cHJvcHMubmFtZSB8fCBpZH1cIiB3aGVuIGlkZW50aXR5IGlzIHNwZWNpZmllZC4gYCArXG4gICAgICAgICAgYFRoZSBtYW5hZ2VkIGlkZW50aXR5IG11c3QgYmUgcHJvdmlzaW9uZWQgaW4gYSBzcGVjaWZpYyBBenVyZSByZWdpb24uYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gRXh0cmFjdCBwcm9wZXJ0aWVzIGZyb20gdGhlIEFaQVBJIHJlc291cmNlIG91dHB1dHMgdXNpbmcgVGVycmFmb3JtIGludGVycG9sYXRpb25cblxuICAgIC8vIENyZWF0ZSBUZXJyYWZvcm0gb3V0cHV0cyBmb3IgZWFzeSBhY2Nlc3MgYW5kIHJlZmVyZW5jaW5nIGZyb20gb3RoZXIgcmVzb3VyY2VzXG4gICAgdGhpcy5pZE91dHB1dCA9IG5ldyBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQodGhpcywgXCJpZFwiLCB7XG4gICAgICB2YWx1ZTogdGhpcy5pZCxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlRoZSBJRCBvZiB0aGUgUG9saWN5IEFzc2lnbm1lbnRcIixcbiAgICB9KTtcblxuICAgIHRoaXMubmFtZU91dHB1dCA9IG5ldyBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQodGhpcywgXCJuYW1lXCIsIHtcbiAgICAgIHZhbHVlOiBgXFwkeyR7dGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5mcW59Lm5hbWV9YCxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlRoZSBuYW1lIG9mIHRoZSBQb2xpY3kgQXNzaWdubWVudFwiLFxuICAgIH0pO1xuXG4gICAgLy8gT3ZlcnJpZGUgbG9naWNhbCBJRHMgdG8gbWF0Y2ggb3JpZ2luYWwgbmFtaW5nIGNvbnZlbnRpb25cbiAgICB0aGlzLmlkT3V0cHV0Lm92ZXJyaWRlTG9naWNhbElkKFwiaWRcIik7XG4gICAgdGhpcy5uYW1lT3V0cHV0Lm92ZXJyaWRlTG9naWNhbElkKFwibmFtZVwiKTtcblxuICAgIC8vIEFwcGx5IGlnbm9yZSBjaGFuZ2VzIGlmIHNwZWNpZmllZFxuICAgIHRoaXMuX2FwcGx5SWdub3JlQ2hhbmdlcygpO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gUkVRVUlSRUQgQUJTVFJBQ1QgTUVUSE9EUyBGUk9NIEF6YXBpUmVzb3VyY2VcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogR2V0cyB0aGUgZGVmYXVsdCBBUEkgdmVyc2lvbiB0byB1c2Ugd2hlbiBubyBleHBsaWNpdCB2ZXJzaW9uIGlzIHNwZWNpZmllZFxuICAgKiBSZXR1cm5zIHRoZSBtb3N0IHJlY2VudCBzdGFibGUgdmVyc2lvbiBhcyB0aGUgZGVmYXVsdFxuICAgKi9cbiAgcHJvdGVjdGVkIGRlZmF1bHRWZXJzaW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiMjAyMi0wNi0wMVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIEF6dXJlIHJlc291cmNlIHR5cGUgZm9yIFBvbGljeSBBc3NpZ25tZW50c1xuICAgKi9cbiAgcHJvdGVjdGVkIHJlc291cmNlVHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBQT0xJQ1lfQVNTSUdOTUVOVF9UWVBFO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIEFQSSBzY2hlbWEgZm9yIHRoZSByZXNvbHZlZCB2ZXJzaW9uXG4gICAqIFVzZXMgdGhlIGZyYW1ld29yaydzIHNjaGVtYSByZXNvbHV0aW9uIHRvIGdldCB0aGUgYXBwcm9wcmlhdGUgc2NoZW1hXG4gICAqL1xuICBwcm90ZWN0ZWQgYXBpU2NoZW1hKCk6IEFwaVNjaGVtYSB7XG4gICAgcmV0dXJuIHRoaXMucmVzb2x2ZVNjaGVtYSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBvbGljeSBBc3NpZ25tZW50cyBkbyBub3Qgc3VwcG9ydCB0YWdzIGF0IHRoZSByZXNvdXJjZSBsZXZlbFxuICAgKiBUYWdzIGFyZSBub3QgYSB2YWxpZCBwcm9wZXJ0eSBmb3IgTWljcm9zb2Z0LkF1dGhvcml6YXRpb24vcG9saWN5QXNzaWdubWVudHNcbiAgICogQHJldHVybnMgZmFsc2UgLSBQb2xpY3kgQXNzaWdubWVudHMgY2Fubm90IGhhdmUgdGFnc1xuICAgKiBAb3ZlcnJpZGVcbiAgICovXG4gIHByb3RlY3RlZCBzdXBwb3J0c1RhZ3MoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgdGhlIHJlc291cmNlIGJvZHkgZm9yIHRoZSBBenVyZSBBUEkgY2FsbFxuICAgKiBUcmFuc2Zvcm1zIHRoZSBpbnB1dCBwcm9wZXJ0aWVzIGludG8gdGhlIEpTT04gZm9ybWF0IGV4cGVjdGVkIGJ5IEF6dXJlIFJFU1QgQVBJXG4gICAqXG4gICAqIE5vdGU6IFBvbGljeSBhc3NpZ25tZW50cyBkbyBub3QgaGF2ZSBhIGxvY2F0aW9uIHByb3BlcnR5IGFzIHRoZXkgYXJlXG4gICAqIHNjb3BlZCByZXNvdXJjZXMgKHN1YnNjcmlwdGlvbiwgcmVzb3VyY2UgZ3JvdXAsIG9yIHJlc291cmNlIGxldmVsKS5cbiAgICogVGhlIHNjb3BlIHByb3BlcnR5IGlzIE5PVCBpbmNsdWRlZCBpbiB0aGUgYm9keSBhcyBpdCdzIHJlYWQtb25seSBhbmRcbiAgICogYXV0b21hdGljYWxseSBkZXJpdmVkIGZyb20gdGhlIHBhcmVudElkLlxuICAgKi9cbiAgcHJvdGVjdGVkIGNyZWF0ZVJlc291cmNlQm9keShwcm9wczogYW55KTogYW55IHtcbiAgICBjb25zdCB0eXBlZFByb3BzID0gcHJvcHMgYXMgUG9saWN5QXNzaWdubWVudFByb3BzO1xuXG4gICAgY29uc3QgYm9keTogYW55ID0ge1xuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBwb2xpY3lEZWZpbml0aW9uSWQ6IHR5cGVkUHJvcHMucG9saWN5RGVmaW5pdGlvbklkLFxuICAgICAgICAvLyBOb3RlOiBzY29wZSBpcyBOT1QgaW5jbHVkZWQgaGVyZSAtIGl0J3MgcmVhZC1vbmx5IGFuZCBkZXJpdmVkIGZyb20gcGFyZW50SWRcbiAgICAgICAgZGlzcGxheU5hbWU6IHR5cGVkUHJvcHMuZGlzcGxheU5hbWUsXG4gICAgICAgIGRlc2NyaXB0aW9uOiB0eXBlZFByb3BzLmRlc2NyaXB0aW9uLFxuICAgICAgICBlbmZvcmNlbWVudE1vZGU6IHR5cGVkUHJvcHMuZW5mb3JjZW1lbnRNb2RlIHx8IFwiRGVmYXVsdFwiLFxuICAgICAgICBwYXJhbWV0ZXJzOiB0eXBlZFByb3BzLnBhcmFtZXRlcnMsXG4gICAgICAgIG1ldGFkYXRhOiB0eXBlZFByb3BzLm1ldGFkYXRhLFxuICAgICAgICBub3RTY29wZXM6IHR5cGVkUHJvcHMubm90U2NvcGVzLFxuICAgICAgICBub25Db21wbGlhbmNlTWVzc2FnZXM6IHR5cGVkUHJvcHMubm9uQ29tcGxpYW5jZU1lc3NhZ2VzLFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgLy8gQWRkIGlkZW50aXR5IGlmIHByb3ZpZGVkXG4gICAgaWYgKHR5cGVkUHJvcHMuaWRlbnRpdHkpIHtcbiAgICAgIGJvZHkuaWRlbnRpdHkgPSB0eXBlZFByb3BzLmlkZW50aXR5O1xuICAgICAgLy8gQXp1cmUgcmVxdWlyZXMgbG9jYXRpb24gd2hlbiBpZGVudGl0eSBpcyBzcGVjaWZpZWQgZm9yIG1hbmFnZWQgaWRlbnRpdHkgcHJvdmlzaW9uaW5nXG4gICAgICBib2R5LmxvY2F0aW9uID0gdHlwZWRQcm9wcy5sb2NhdGlvbjtcbiAgICB9XG5cbiAgICByZXR1cm4gYm9keTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPdmVycmlkZXMgcGFyZW50IElEIHJlc29sdXRpb24gdG8gdXNlIHRoZSBzY29wZSBmcm9tIHByb3BzXG4gICAqIFBvbGljeSBhc3NpZ25tZW50cyBhcmUgc2NvcGVkIHJlc291cmNlcyB3aGVyZSB0aGUgc2NvcGUgSVMgdGhlIHBhcmVudFxuICAgKi9cbiAgcHJvdGVjdGVkIHJlc29sdmVQYXJlbnRJZChwcm9wczogYW55KTogc3RyaW5nIHtcbiAgICBjb25zdCB0eXBlZFByb3BzID0gcHJvcHMgYXMgUG9saWN5QXNzaWdubWVudFByb3BzO1xuICAgIHJldHVybiB0eXBlZFByb3BzLnNjb3BlO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gUFVCTElDIE1FVEhPRFMgRk9SIFBPTElDWSBBU1NJR05NRU5UIE9QRVJBVElPTlNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogR2V0IHRoZSBmdWxsIHJlc291cmNlIGlkZW50aWZpZXIgZm9yIHVzZSBpbiBvdGhlciBBenVyZSByZXNvdXJjZXNcbiAgICogQWxpYXMgZm9yIHRoZSBpZCBwcm9wZXJ0eVxuICAgKi9cbiAgcHVibGljIGdldCByZXNvdXJjZUlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaWQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBwb2xpY3kgZGVmaW5pdGlvbiBJRCB0aGlzIGFzc2lnbm1lbnQgcmVmZXJlbmNlc1xuICAgKi9cbiAgcHVibGljIGdldCBwb2xpY3lEZWZpbml0aW9uSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5wb2xpY3lEZWZpbml0aW9uSWQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBzY29wZSBvZiB0aGlzIHBvbGljeSBhc3NpZ25tZW50XG4gICAqL1xuICBwdWJsaWMgZ2V0IGFzc2lnbm1lbnRTY29wZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnNjb3BlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZW5mb3JjZW1lbnQgbW9kZVxuICAgKi9cbiAgcHVibGljIGdldCBlbmZvcmNlbWVudE1vZGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5lbmZvcmNlbWVudE1vZGUgfHwgXCJEZWZhdWx0XCI7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBQUklWQVRFIEhFTFBFUiBNRVRIT0RTXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIEFwcGxpZXMgaWdub3JlIGNoYW5nZXMgbGlmZWN5Y2xlIHJ1bGVzIGlmIHNwZWNpZmllZCBpbiBwcm9wc1xuICAgKi9cbiAgcHJpdmF0ZSBfYXBwbHlJZ25vcmVDaGFuZ2VzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnByb3BzLmlnbm9yZUNoYW5nZXMgJiYgdGhpcy5wcm9wcy5pZ25vcmVDaGFuZ2VzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMudGVycmFmb3JtUmVzb3VyY2UuYWRkT3ZlcnJpZGUoXCJsaWZlY3ljbGVcIiwgW1xuICAgICAgICB7XG4gICAgICAgICAgaWdub3JlX2NoYW5nZXM6IHRoaXMucHJvcHMuaWdub3JlQ2hhbmdlcyxcbiAgICAgICAgfSxcbiAgICAgIF0pO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Integration test for Azure Policy Assignment
3
+ *
4
+ * This test demonstrates basic usage of the PolicyAssignment construct
5
+ * and validates deployment, idempotency, and cleanup.
6
+ *
7
+ * Note: This test requires a policy definition to exist before assigning it.
8
+ * It creates a simple policy definition first, then creates assignments
9
+ * that reference it.
10
+ *
11
+ * Run with: npm run integration:nostream
12
+ */
13
+ import "cdktf/lib/testing/adapters/jest";