@microsoft/terraform-cdk-constructs 1.2.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 (291) hide show
  1. package/.jsii +54846 -26661
  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 +342 -0
  117. package/lib/azure-policyassignment/lib/policy-assignment.js +228 -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 +260 -0
  129. package/lib/azure-policydefinition/lib/policy-definition.js +199 -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 +596 -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 +178 -26
  266. package/lib/core-azure/lib/azapi/azapi-resource.js +328 -90
  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,285 @@
1
+ "use strict";
2
+ /**
3
+ * Comprehensive tests for the DnsForwardingRulesetVirtualNetworkLink implementation
4
+ *
5
+ * This test suite validates the DnsForwardingRulesetVirtualNetworkLink class using the
6
+ * AzapiResource framework. Tests cover automatic version resolution,
7
+ * explicit version pinning, schema validation, property transformation,
8
+ * parent-child resource relationships, and full backward compatibility.
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ const cdktf_1 = require("cdktf");
12
+ const cdktf = require("cdktf");
13
+ const api_version_manager_1 = require("../../core-azure/lib/version-manager/api-version-manager");
14
+ const version_interfaces_1 = require("../../core-azure/lib/version-manager/interfaces/version-interfaces");
15
+ const virtual_network_link_1 = require("../lib/virtual-network-link");
16
+ const virtual_network_link_schemas_1 = require("../lib/virtual-network-link-schemas");
17
+ describe("DnsForwardingRulesetVirtualNetworkLink - Implementation", () => {
18
+ let app;
19
+ let stack;
20
+ let manager;
21
+ const mockRulesetId = "/subscriptions/12345678-1234-1234-1234-123456789012/resourceGroups/test-rg/providers/Microsoft.Network/dnsForwardingRulesets/test-ruleset";
22
+ const mockVirtualNetworkId = "/subscriptions/12345678-1234-1234-1234-123456789012/resourceGroups/test-rg/providers/Microsoft.Network/virtualNetworks/test-vnet";
23
+ beforeEach(() => {
24
+ app = cdktf_1.Testing.app();
25
+ stack = new cdktf.TerraformStack(app, "TestStack");
26
+ manager = api_version_manager_1.ApiVersionManager.instance();
27
+ // Ensure schemas are registered
28
+ try {
29
+ manager.registerResourceType(virtual_network_link_schemas_1.VIRTUAL_NETWORK_LINK_TYPE, virtual_network_link_schemas_1.ALL_VIRTUAL_NETWORK_LINK_VERSIONS);
30
+ }
31
+ catch (error) {
32
+ // Ignore if already registered
33
+ }
34
+ });
35
+ describe("Constructor and Basic Properties", () => {
36
+ it("should create Virtual Network Link with automatic latest version resolution", () => {
37
+ const props = {
38
+ name: "my-vnet-link",
39
+ dnsForwardingRulesetId: mockRulesetId,
40
+ virtualNetworkId: mockVirtualNetworkId,
41
+ };
42
+ const link = new virtual_network_link_1.DnsForwardingRulesetVirtualNetworkLink(stack, "TestLink", props);
43
+ expect(link).toBeInstanceOf(virtual_network_link_1.DnsForwardingRulesetVirtualNetworkLink);
44
+ expect(link.resolvedApiVersion).toBe("2022-07-01");
45
+ expect(link.props).toBe(props);
46
+ });
47
+ it("should create Virtual Network Link with explicit version pinning", () => {
48
+ const props = {
49
+ name: "my-vnet-link",
50
+ dnsForwardingRulesetId: mockRulesetId,
51
+ virtualNetworkId: mockVirtualNetworkId,
52
+ apiVersion: "2022-07-01",
53
+ };
54
+ const link = new virtual_network_link_1.DnsForwardingRulesetVirtualNetworkLink(stack, "TestLink", props);
55
+ expect(link.resolvedApiVersion).toBe("2022-07-01");
56
+ });
57
+ it("should create Virtual Network Link with metadata", () => {
58
+ const props = {
59
+ name: "my-vnet-link",
60
+ dnsForwardingRulesetId: mockRulesetId,
61
+ virtualNetworkId: mockVirtualNetworkId,
62
+ metadata: {
63
+ environment: "production",
64
+ team: "platform",
65
+ },
66
+ };
67
+ const link = new virtual_network_link_1.DnsForwardingRulesetVirtualNetworkLink(stack, "TestLink", props);
68
+ expect(link).toBeDefined();
69
+ expect(link.props.metadata).toEqual({
70
+ environment: "production",
71
+ team: "platform",
72
+ });
73
+ });
74
+ });
75
+ describe("Framework Integration", () => {
76
+ it("should resolve latest API version automatically", () => {
77
+ const link = new virtual_network_link_1.DnsForwardingRulesetVirtualNetworkLink(stack, "TestLink", {
78
+ name: "my-vnet-link",
79
+ dnsForwardingRulesetId: mockRulesetId,
80
+ virtualNetworkId: mockVirtualNetworkId,
81
+ });
82
+ expect(link.resolvedApiVersion).toBe("2022-07-01");
83
+ expect(link.latestVersion()).toBe("2022-07-01");
84
+ });
85
+ it("should provide version configuration", () => {
86
+ const link = new virtual_network_link_1.DnsForwardingRulesetVirtualNetworkLink(stack, "TestLink", {
87
+ name: "my-vnet-link",
88
+ dnsForwardingRulesetId: mockRulesetId,
89
+ virtualNetworkId: mockVirtualNetworkId,
90
+ });
91
+ expect(link.versionConfig).toBeDefined();
92
+ expect(link.versionConfig.version).toBe("2022-07-01");
93
+ expect(link.versionConfig.supportLevel).toBe(version_interfaces_1.VersionSupportLevel.ACTIVE);
94
+ });
95
+ it("should provide supported versions", () => {
96
+ const link = new virtual_network_link_1.DnsForwardingRulesetVirtualNetworkLink(stack, "TestLink", {
97
+ name: "my-vnet-link",
98
+ dnsForwardingRulesetId: mockRulesetId,
99
+ virtualNetworkId: mockVirtualNetworkId,
100
+ });
101
+ const versions = link.supportedVersions();
102
+ expect(versions).toContain("2022-07-01");
103
+ expect(versions.length).toBeGreaterThan(0);
104
+ });
105
+ });
106
+ describe("Parent-Child Resource Relationship", () => {
107
+ it("should use dnsForwardingRulesetId as parent ID", () => {
108
+ const link = new virtual_network_link_1.DnsForwardingRulesetVirtualNetworkLink(stack, "TestLink", {
109
+ name: "my-vnet-link",
110
+ dnsForwardingRulesetId: mockRulesetId,
111
+ virtualNetworkId: mockVirtualNetworkId,
112
+ });
113
+ // Verify the link was created successfully with proper parent
114
+ expect(link).toBeDefined();
115
+ expect(link.props.dnsForwardingRulesetId).toBe(mockRulesetId);
116
+ });
117
+ it("should correctly handle child resource in Terraform synthesis", () => {
118
+ new virtual_network_link_1.DnsForwardingRulesetVirtualNetworkLink(stack, "TestLink", {
119
+ name: "my-vnet-link",
120
+ dnsForwardingRulesetId: mockRulesetId,
121
+ virtualNetworkId: mockVirtualNetworkId,
122
+ });
123
+ const synthesized = cdktf_1.Testing.synth(stack);
124
+ expect(synthesized).toContain("virtualNetworkLinks");
125
+ expect(synthesized).toContain(mockRulesetId);
126
+ });
127
+ });
128
+ describe("Public Methods - Virtual Network Link Properties", () => {
129
+ it("should provide provisioning state", () => {
130
+ const link = new virtual_network_link_1.DnsForwardingRulesetVirtualNetworkLink(stack, "TestLink", {
131
+ name: "my-vnet-link",
132
+ dnsForwardingRulesetId: mockRulesetId,
133
+ virtualNetworkId: mockVirtualNetworkId,
134
+ });
135
+ expect(link.provisioningState).toBeDefined();
136
+ expect(typeof link.provisioningState).toBe("string");
137
+ });
138
+ it("should provide metadata", () => {
139
+ const link = new virtual_network_link_1.DnsForwardingRulesetVirtualNetworkLink(stack, "TestLink", {
140
+ name: "my-vnet-link",
141
+ dnsForwardingRulesetId: mockRulesetId,
142
+ virtualNetworkId: mockVirtualNetworkId,
143
+ metadata: { key: "value" },
144
+ });
145
+ expect(link.metadata).toBeDefined();
146
+ expect(typeof link.metadata).toBe("string");
147
+ });
148
+ });
149
+ describe("Outputs", () => {
150
+ it("should create all required outputs", () => {
151
+ const link = new virtual_network_link_1.DnsForwardingRulesetVirtualNetworkLink(stack, "TestLink", {
152
+ name: "my-vnet-link",
153
+ dnsForwardingRulesetId: mockRulesetId,
154
+ virtualNetworkId: mockVirtualNetworkId,
155
+ });
156
+ expect(link.idOutput).toBeDefined();
157
+ expect(link.nameOutput).toBeDefined();
158
+ expect(link.provisioningStateOutput).toBeDefined();
159
+ });
160
+ it("should have correct logical IDs for outputs", () => {
161
+ new virtual_network_link_1.DnsForwardingRulesetVirtualNetworkLink(stack, "TestLink", {
162
+ name: "my-vnet-link",
163
+ dnsForwardingRulesetId: mockRulesetId,
164
+ virtualNetworkId: mockVirtualNetworkId,
165
+ });
166
+ const synthesized = cdktf_1.Testing.synth(stack);
167
+ expect(synthesized).toContain('"id"');
168
+ expect(synthesized).toContain('"name"');
169
+ expect(synthesized).toContain('"provisioning_state"');
170
+ });
171
+ });
172
+ describe("Ignore Changes Configuration", () => {
173
+ it("should apply ignore changes lifecycle rules", () => {
174
+ new virtual_network_link_1.DnsForwardingRulesetVirtualNetworkLink(stack, "TestLink", {
175
+ name: "my-vnet-link",
176
+ dnsForwardingRulesetId: mockRulesetId,
177
+ virtualNetworkId: mockVirtualNetworkId,
178
+ ignoreChanges: ["metadata"],
179
+ });
180
+ const synthesized = cdktf_1.Testing.synth(stack);
181
+ expect(synthesized).toContain("ignore_changes");
182
+ });
183
+ it("should handle multiple ignore changes properties", () => {
184
+ new virtual_network_link_1.DnsForwardingRulesetVirtualNetworkLink(stack, "TestLink", {
185
+ name: "my-vnet-link",
186
+ dnsForwardingRulesetId: mockRulesetId,
187
+ virtualNetworkId: mockVirtualNetworkId,
188
+ ignoreChanges: ["metadata", "name"],
189
+ });
190
+ const synthesized = cdktf_1.Testing.synth(stack);
191
+ expect(synthesized).toBeDefined();
192
+ });
193
+ });
194
+ describe("CDK Terraform Integration", () => {
195
+ it("should synthesize to valid Terraform configuration", () => {
196
+ new virtual_network_link_1.DnsForwardingRulesetVirtualNetworkLink(stack, "SynthTest", {
197
+ name: "my-vnet-link",
198
+ dnsForwardingRulesetId: mockRulesetId,
199
+ virtualNetworkId: mockVirtualNetworkId,
200
+ });
201
+ const synthesized = cdktf_1.Testing.synth(stack);
202
+ expect(synthesized).toBeDefined();
203
+ const stackConfig = JSON.parse(synthesized);
204
+ expect(stackConfig.resource).toBeDefined();
205
+ });
206
+ it("should generate correct resource type in Terraform", () => {
207
+ new virtual_network_link_1.DnsForwardingRulesetVirtualNetworkLink(stack, "SynthTest", {
208
+ name: "my-vnet-link",
209
+ dnsForwardingRulesetId: mockRulesetId,
210
+ virtualNetworkId: mockVirtualNetworkId,
211
+ });
212
+ const synthesized = cdktf_1.Testing.synth(stack);
213
+ expect(synthesized).toContain("virtualNetworkLinks");
214
+ expect(synthesized).toContain("2022-07-01");
215
+ });
216
+ it("should include all properties in Terraform body", () => {
217
+ new virtual_network_link_1.DnsForwardingRulesetVirtualNetworkLink(stack, "SynthTest", {
218
+ name: "my-vnet-link",
219
+ dnsForwardingRulesetId: mockRulesetId,
220
+ virtualNetworkId: mockVirtualNetworkId,
221
+ metadata: { env: "test" },
222
+ });
223
+ const synthesized = cdktf_1.Testing.synth(stack);
224
+ expect(synthesized).toContain(mockVirtualNetworkId);
225
+ });
226
+ });
227
+ describe("Resource Identification", () => {
228
+ it("should provide resource ID", () => {
229
+ const link = new virtual_network_link_1.DnsForwardingRulesetVirtualNetworkLink(stack, "TestLink", {
230
+ name: "my-vnet-link",
231
+ dnsForwardingRulesetId: mockRulesetId,
232
+ virtualNetworkId: mockVirtualNetworkId,
233
+ });
234
+ expect(link.id).toBeDefined();
235
+ expect(typeof link.id).toBe("string");
236
+ });
237
+ it("should provide resource name from props when specified", () => {
238
+ const link = new virtual_network_link_1.DnsForwardingRulesetVirtualNetworkLink(stack, "TestLink", {
239
+ name: "my-vnet-link",
240
+ dnsForwardingRulesetId: mockRulesetId,
241
+ virtualNetworkId: mockVirtualNetworkId,
242
+ });
243
+ expect(link.name).toBe("my-vnet-link");
244
+ });
245
+ });
246
+ describe("JSII Compliance", () => {
247
+ it("should have proper return types for all public methods", () => {
248
+ const link = new virtual_network_link_1.DnsForwardingRulesetVirtualNetworkLink(stack, "TestLink", {
249
+ name: "my-vnet-link",
250
+ dnsForwardingRulesetId: mockRulesetId,
251
+ virtualNetworkId: mockVirtualNetworkId,
252
+ });
253
+ // All getter methods should return strings for Terraform interpolations
254
+ expect(typeof link.provisioningState).toBe("string");
255
+ expect(typeof link.metadata).toBe("string");
256
+ });
257
+ });
258
+ describe("Schema Registration", () => {
259
+ it("should register schemas successfully", () => {
260
+ const link = new virtual_network_link_1.DnsForwardingRulesetVirtualNetworkLink(stack, "TestLink", {
261
+ name: "my-vnet-link",
262
+ dnsForwardingRulesetId: mockRulesetId,
263
+ virtualNetworkId: mockVirtualNetworkId,
264
+ });
265
+ // If the link was created successfully, schemas were registered
266
+ expect(link).toBeDefined();
267
+ expect(link.resolvedApiVersion).toBe("2022-07-01");
268
+ });
269
+ it("should handle multiple instantiations without errors", () => {
270
+ new virtual_network_link_1.DnsForwardingRulesetVirtualNetworkLink(stack, "TestLink1", {
271
+ name: "my-vnet-link-1",
272
+ dnsForwardingRulesetId: mockRulesetId,
273
+ virtualNetworkId: mockVirtualNetworkId,
274
+ });
275
+ // Second instantiation should not throw an error even if schemas are already registered
276
+ const link2 = new virtual_network_link_1.DnsForwardingRulesetVirtualNetworkLink(stack, "TestLink2", {
277
+ name: "my-vnet-link-2",
278
+ dnsForwardingRulesetId: mockRulesetId,
279
+ virtualNetworkId: mockVirtualNetworkId,
280
+ });
281
+ expect(link2).toBeDefined();
282
+ });
283
+ });
284
+ });
285
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlydHVhbC1uZXR3b3JrLWxpbmsuc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9henVyZS1kbnNmb3J3YXJkaW5ncnVsZXNldC90ZXN0L3ZpcnR1YWwtbmV0d29yay1saW5rLnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7O0dBT0c7O0FBRUgsaUNBQWdDO0FBQ2hDLCtCQUErQjtBQUMvQixrR0FBNkY7QUFDN0YsMkdBQXlHO0FBQ3pHLHNFQUdxQztBQUNyQyxzRkFHNkM7QUFFN0MsUUFBUSxDQUFDLHlEQUF5RCxFQUFFLEdBQUcsRUFBRTtJQUN2RSxJQUFJLEdBQWMsQ0FBQztJQUNuQixJQUFJLEtBQTJCLENBQUM7SUFDaEMsSUFBSSxPQUEwQixDQUFDO0lBRS9CLE1BQU0sYUFBYSxHQUNqQiwySUFBMkksQ0FBQztJQUM5SSxNQUFNLG9CQUFvQixHQUN4QixrSUFBa0ksQ0FBQztJQUVySSxVQUFVLENBQUMsR0FBRyxFQUFFO1FBQ2QsR0FBRyxHQUFHLGVBQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNwQixLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUNuRCxPQUFPLEdBQUcsdUNBQWlCLENBQUMsUUFBUSxFQUFFLENBQUM7UUFFdkMsZ0NBQWdDO1FBQ2hDLElBQUksQ0FBQztZQUNILE9BQU8sQ0FBQyxvQkFBb0IsQ0FDMUIsd0RBQXlCLEVBQ3pCLGdFQUFpQyxDQUNsQyxDQUFDO1FBQ0osQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZiwrQkFBK0I7UUFDakMsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLGtDQUFrQyxFQUFFLEdBQUcsRUFBRTtRQUNoRCxFQUFFLENBQUMsNkVBQTZFLEVBQUUsR0FBRyxFQUFFO1lBQ3JGLE1BQU0sS0FBSyxHQUFnRDtnQkFDekQsSUFBSSxFQUFFLGNBQWM7Z0JBQ3BCLHNCQUFzQixFQUFFLGFBQWE7Z0JBQ3JDLGdCQUFnQixFQUFFLG9CQUFvQjthQUN2QyxDQUFDO1lBRUYsTUFBTSxJQUFJLEdBQUcsSUFBSSw2REFBc0MsQ0FDckQsS0FBSyxFQUNMLFVBQVUsRUFDVixLQUFLLENBQ04sQ0FBQztZQUVGLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxjQUFjLENBQUMsNkRBQXNDLENBQUMsQ0FBQztZQUNwRSxNQUFNLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ25ELE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pDLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGtFQUFrRSxFQUFFLEdBQUcsRUFBRTtZQUMxRSxNQUFNLEtBQUssR0FBZ0Q7Z0JBQ3pELElBQUksRUFBRSxjQUFjO2dCQUNwQixzQkFBc0IsRUFBRSxhQUFhO2dCQUNyQyxnQkFBZ0IsRUFBRSxvQkFBb0I7Z0JBQ3RDLFVBQVUsRUFBRSxZQUFZO2FBQ3pCLENBQUM7WUFFRixNQUFNLElBQUksR0FBRyxJQUFJLDZEQUFzQyxDQUNyRCxLQUFLLEVBQ0wsVUFBVSxFQUNWLEtBQUssQ0FDTixDQUFDO1lBRUYsTUFBTSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNyRCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxrREFBa0QsRUFBRSxHQUFHLEVBQUU7WUFDMUQsTUFBTSxLQUFLLEdBQWdEO2dCQUN6RCxJQUFJLEVBQUUsY0FBYztnQkFDcEIsc0JBQXNCLEVBQUUsYUFBYTtnQkFDckMsZ0JBQWdCLEVBQUUsb0JBQW9CO2dCQUN0QyxRQUFRLEVBQUU7b0JBQ1IsV0FBVyxFQUFFLFlBQVk7b0JBQ3pCLElBQUksRUFBRSxVQUFVO2lCQUNqQjthQUNGLENBQUM7WUFFRixNQUFNLElBQUksR0FBRyxJQUFJLDZEQUFzQyxDQUNyRCxLQUFLLEVBQ0wsVUFBVSxFQUNWLEtBQUssQ0FDTixDQUFDO1lBRUYsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQzNCLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQztnQkFDbEMsV0FBVyxFQUFFLFlBQVk7Z0JBQ3pCLElBQUksRUFBRSxVQUFVO2FBQ2pCLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsdUJBQXVCLEVBQUUsR0FBRyxFQUFFO1FBQ3JDLEVBQUUsQ0FBQyxpREFBaUQsRUFBRSxHQUFHLEVBQUU7WUFDekQsTUFBTSxJQUFJLEdBQUcsSUFBSSw2REFBc0MsQ0FDckQsS0FBSyxFQUNMLFVBQVUsRUFDVjtnQkFDRSxJQUFJLEVBQUUsY0FBYztnQkFDcEIsc0JBQXNCLEVBQUUsYUFBYTtnQkFDckMsZ0JBQWdCLEVBQUUsb0JBQW9CO2FBQ3ZDLENBQ0YsQ0FBQztZQUVGLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDbkQsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNsRCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxzQ0FBc0MsRUFBRSxHQUFHLEVBQUU7WUFDOUMsTUFBTSxJQUFJLEdBQUcsSUFBSSw2REFBc0MsQ0FDckQsS0FBSyxFQUNMLFVBQVUsRUFDVjtnQkFDRSxJQUFJLEVBQUUsY0FBYztnQkFDcEIsc0JBQXNCLEVBQUUsYUFBYTtnQkFDckMsZ0JBQWdCLEVBQUUsb0JBQW9CO2FBQ3ZDLENBQ0YsQ0FBQztZQUVGLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDekMsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ3RELE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyx3Q0FBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMzRSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxtQ0FBbUMsRUFBRSxHQUFHLEVBQUU7WUFDM0MsTUFBTSxJQUFJLEdBQUcsSUFBSSw2REFBc0MsQ0FDckQsS0FBSyxFQUNMLFVBQVUsRUFDVjtnQkFDRSxJQUFJLEVBQUUsY0FBYztnQkFDcEIsc0JBQXNCLEVBQUUsYUFBYTtnQkFDckMsZ0JBQWdCLEVBQUUsb0JBQW9CO2FBQ3ZDLENBQ0YsQ0FBQztZQUVGLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQzFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDekMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0MsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxvQ0FBb0MsRUFBRSxHQUFHLEVBQUU7UUFDbEQsRUFBRSxDQUFDLGdEQUFnRCxFQUFFLEdBQUcsRUFBRTtZQUN4RCxNQUFNLElBQUksR0FBRyxJQUFJLDZEQUFzQyxDQUNyRCxLQUFLLEVBQ0wsVUFBVSxFQUNWO2dCQUNFLElBQUksRUFBRSxjQUFjO2dCQUNwQixzQkFBc0IsRUFBRSxhQUFhO2dCQUNyQyxnQkFBZ0IsRUFBRSxvQkFBb0I7YUFDdkMsQ0FDRixDQUFDO1lBRUYsOERBQThEO1lBQzlELE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUMzQixNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNoRSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQywrREFBK0QsRUFBRSxHQUFHLEVBQUU7WUFDdkUsSUFBSSw2REFBc0MsQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFO2dCQUM1RCxJQUFJLEVBQUUsY0FBYztnQkFDcEIsc0JBQXNCLEVBQUUsYUFBYTtnQkFDckMsZ0JBQWdCLEVBQUUsb0JBQW9CO2FBQ3ZDLENBQUMsQ0FBQztZQUVILE1BQU0sV0FBVyxHQUFHLGVBQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDekMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1lBQ3JELE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDL0MsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxrREFBa0QsRUFBRSxHQUFHLEVBQUU7UUFDaEUsRUFBRSxDQUFDLG1DQUFtQyxFQUFFLEdBQUcsRUFBRTtZQUMzQyxNQUFNLElBQUksR0FBRyxJQUFJLDZEQUFzQyxDQUNyRCxLQUFLLEVBQ0wsVUFBVSxFQUNWO2dCQUNFLElBQUksRUFBRSxjQUFjO2dCQUNwQixzQkFBc0IsRUFBRSxhQUFhO2dCQUNyQyxnQkFBZ0IsRUFBRSxvQkFBb0I7YUFDdkMsQ0FDRixDQUFDO1lBRUYsTUFBTSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQzdDLE1BQU0sQ0FBQyxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN2RCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyx5QkFBeUIsRUFBRSxHQUFHLEVBQUU7WUFDakMsTUFBTSxJQUFJLEdBQUcsSUFBSSw2REFBc0MsQ0FDckQsS0FBSyxFQUNMLFVBQVUsRUFDVjtnQkFDRSxJQUFJLEVBQUUsY0FBYztnQkFDcEIsc0JBQXNCLEVBQUUsYUFBYTtnQkFDckMsZ0JBQWdCLEVBQUUsb0JBQW9CO2dCQUN0QyxRQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFO2FBQzNCLENBQ0YsQ0FBQztZQUVGLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDcEMsTUFBTSxDQUFDLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM5QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUU7UUFDdkIsRUFBRSxDQUFDLG9DQUFvQyxFQUFFLEdBQUcsRUFBRTtZQUM1QyxNQUFNLElBQUksR0FBRyxJQUFJLDZEQUFzQyxDQUNyRCxLQUFLLEVBQ0wsVUFBVSxFQUNWO2dCQUNFLElBQUksRUFBRSxjQUFjO2dCQUNwQixzQkFBc0IsRUFBRSxhQUFhO2dCQUNyQyxnQkFBZ0IsRUFBRSxvQkFBb0I7YUFDdkMsQ0FDRixDQUFDO1lBRUYsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNwQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3RDLE1BQU0sQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNyRCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyw2Q0FBNkMsRUFBRSxHQUFHLEVBQUU7WUFDckQsSUFBSSw2REFBc0MsQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFO2dCQUM1RCxJQUFJLEVBQUUsY0FBYztnQkFDcEIsc0JBQXNCLEVBQUUsYUFBYTtnQkFDckMsZ0JBQWdCLEVBQUUsb0JBQW9CO2FBQ3ZDLENBQUMsQ0FBQztZQUVILE1BQU0sV0FBVyxHQUFHLGVBQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDekMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN0QyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3hDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxTQUFTLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUN4RCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLDhCQUE4QixFQUFFLEdBQUcsRUFBRTtRQUM1QyxFQUFFLENBQUMsNkNBQTZDLEVBQUUsR0FBRyxFQUFFO1lBQ3JELElBQUksNkRBQXNDLENBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRTtnQkFDNUQsSUFBSSxFQUFFLGNBQWM7Z0JBQ3BCLHNCQUFzQixFQUFFLGFBQWE7Z0JBQ3JDLGdCQUFnQixFQUFFLG9CQUFvQjtnQkFDdEMsYUFBYSxFQUFFLENBQUMsVUFBVSxDQUFDO2FBQzVCLENBQUMsQ0FBQztZQUVILE1BQU0sV0FBVyxHQUFHLGVBQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDekMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ2xELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGtEQUFrRCxFQUFFLEdBQUcsRUFBRTtZQUMxRCxJQUFJLDZEQUFzQyxDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUU7Z0JBQzVELElBQUksRUFBRSxjQUFjO2dCQUNwQixzQkFBc0IsRUFBRSxhQUFhO2dCQUNyQyxnQkFBZ0IsRUFBRSxvQkFBb0I7Z0JBQ3RDLGFBQWEsRUFBRSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUM7YUFDcEMsQ0FBQyxDQUFDO1lBRUgsTUFBTSxXQUFXLEdBQUcsZUFBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN6QyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDcEMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQywyQkFBMkIsRUFBRSxHQUFHLEVBQUU7UUFDekMsRUFBRSxDQUFDLG9EQUFvRCxFQUFFLEdBQUcsRUFBRTtZQUM1RCxJQUFJLDZEQUFzQyxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUU7Z0JBQzdELElBQUksRUFBRSxjQUFjO2dCQUNwQixzQkFBc0IsRUFBRSxhQUFhO2dCQUNyQyxnQkFBZ0IsRUFBRSxvQkFBb0I7YUFDdkMsQ0FBQyxDQUFDO1lBRUgsTUFBTSxXQUFXLEdBQUcsZUFBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN6QyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7WUFFbEMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUM1QyxNQUFNLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzdDLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLG9EQUFvRCxFQUFFLEdBQUcsRUFBRTtZQUM1RCxJQUFJLDZEQUFzQyxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUU7Z0JBQzdELElBQUksRUFBRSxjQUFjO2dCQUNwQixzQkFBc0IsRUFBRSxhQUFhO2dCQUNyQyxnQkFBZ0IsRUFBRSxvQkFBb0I7YUFDdkMsQ0FBQyxDQUFDO1lBRUgsTUFBTSxXQUFXLEdBQUcsZUFBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN6QyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsU0FBUyxDQUFDLHFCQUFxQixDQUFDLENBQUM7WUFDckQsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM5QyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxpREFBaUQsRUFBRSxHQUFHLEVBQUU7WUFDekQsSUFBSSw2REFBc0MsQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFO2dCQUM3RCxJQUFJLEVBQUUsY0FBYztnQkFDcEIsc0JBQXNCLEVBQUUsYUFBYTtnQkFDckMsZ0JBQWdCLEVBQUUsb0JBQW9CO2dCQUN0QyxRQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFO2FBQzFCLENBQUMsQ0FBQztZQUVILE1BQU0sV0FBVyxHQUFHLGVBQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDekMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ3RELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMseUJBQXlCLEVBQUUsR0FBRyxFQUFFO1FBQ3ZDLEVBQUUsQ0FBQyw0QkFBNEIsRUFBRSxHQUFHLEVBQUU7WUFDcEMsTUFBTSxJQUFJLEdBQUcsSUFBSSw2REFBc0MsQ0FDckQsS0FBSyxFQUNMLFVBQVUsRUFDVjtnQkFDRSxJQUFJLEVBQUUsY0FBYztnQkFDcEIsc0JBQXNCLEVBQUUsYUFBYTtnQkFDckMsZ0JBQWdCLEVBQUUsb0JBQW9CO2FBQ3ZDLENBQ0YsQ0FBQztZQUVGLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDOUIsTUFBTSxDQUFDLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN4QyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyx3REFBd0QsRUFBRSxHQUFHLEVBQUU7WUFDaEUsTUFBTSxJQUFJLEdBQUcsSUFBSSw2REFBc0MsQ0FDckQsS0FBSyxFQUNMLFVBQVUsRUFDVjtnQkFDRSxJQUFJLEVBQUUsY0FBYztnQkFDcEIsc0JBQXNCLEVBQUUsYUFBYTtnQkFDckMsZ0JBQWdCLEVBQUUsb0JBQW9CO2FBQ3ZDLENBQ0YsQ0FBQztZQUVGLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3pDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxFQUFFO1FBQy9CLEVBQUUsQ0FBQyx3REFBd0QsRUFBRSxHQUFHLEVBQUU7WUFDaEUsTUFBTSxJQUFJLEdBQUcsSUFBSSw2REFBc0MsQ0FDckQsS0FBSyxFQUNMLFVBQVUsRUFDVjtnQkFDRSxJQUFJLEVBQUUsY0FBYztnQkFDcEIsc0JBQXNCLEVBQUUsYUFBYTtnQkFDckMsZ0JBQWdCLEVBQUUsb0JBQW9CO2FBQ3ZDLENBQ0YsQ0FBQztZQUVGLHdFQUF3RTtZQUN4RSxNQUFNLENBQUMsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDckQsTUFBTSxDQUFDLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM5QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLHFCQUFxQixFQUFFLEdBQUcsRUFBRTtRQUNuQyxFQUFFLENBQUMsc0NBQXNDLEVBQUUsR0FBRyxFQUFFO1lBQzlDLE1BQU0sSUFBSSxHQUFHLElBQUksNkRBQXNDLENBQ3JELEtBQUssRUFDTCxVQUFVLEVBQ1Y7Z0JBQ0UsSUFBSSxFQUFFLGNBQWM7Z0JBQ3BCLHNCQUFzQixFQUFFLGFBQWE7Z0JBQ3JDLGdCQUFnQixFQUFFLG9CQUFvQjthQUN2QyxDQUNGLENBQUM7WUFFRixnRUFBZ0U7WUFDaEUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQzNCLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDckQsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsc0RBQXNELEVBQUUsR0FBRyxFQUFFO1lBQzlELElBQUksNkRBQXNDLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRTtnQkFDN0QsSUFBSSxFQUFFLGdCQUFnQjtnQkFDdEIsc0JBQXNCLEVBQUUsYUFBYTtnQkFDckMsZ0JBQWdCLEVBQUUsb0JBQW9CO2FBQ3ZDLENBQUMsQ0FBQztZQUVILHdGQUF3RjtZQUN4RixNQUFNLEtBQUssR0FBRyxJQUFJLDZEQUFzQyxDQUN0RCxLQUFLLEVBQ0wsV0FBVyxFQUNYO2dCQUNFLElBQUksRUFBRSxnQkFBZ0I7Z0JBQ3RCLHNCQUFzQixFQUFFLGFBQWE7Z0JBQ3JDLGdCQUFnQixFQUFFLG9CQUFvQjthQUN2QyxDQUNGLENBQUM7WUFFRixNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDOUIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb21wcmVoZW5zaXZlIHRlc3RzIGZvciB0aGUgRG5zRm9yd2FyZGluZ1J1bGVzZXRWaXJ0dWFsTmV0d29ya0xpbmsgaW1wbGVtZW50YXRpb25cbiAqXG4gKiBUaGlzIHRlc3Qgc3VpdGUgdmFsaWRhdGVzIHRoZSBEbnNGb3J3YXJkaW5nUnVsZXNldFZpcnR1YWxOZXR3b3JrTGluayBjbGFzcyB1c2luZyB0aGVcbiAqIEF6YXBpUmVzb3VyY2UgZnJhbWV3b3JrLiBUZXN0cyBjb3ZlciBhdXRvbWF0aWMgdmVyc2lvbiByZXNvbHV0aW9uLFxuICogZXhwbGljaXQgdmVyc2lvbiBwaW5uaW5nLCBzY2hlbWEgdmFsaWRhdGlvbiwgcHJvcGVydHkgdHJhbnNmb3JtYXRpb24sXG4gKiBwYXJlbnQtY2hpbGQgcmVzb3VyY2UgcmVsYXRpb25zaGlwcywgYW5kIGZ1bGwgYmFja3dhcmQgY29tcGF0aWJpbGl0eS5cbiAqL1xuXG5pbXBvcnQgeyBUZXN0aW5nIH0gZnJvbSBcImNka3RmXCI7XG5pbXBvcnQgKiBhcyBjZGt0ZiBmcm9tIFwiY2RrdGZcIjtcbmltcG9ydCB7IEFwaVZlcnNpb25NYW5hZ2VyIH0gZnJvbSBcIi4uLy4uL2NvcmUtYXp1cmUvbGliL3ZlcnNpb24tbWFuYWdlci9hcGktdmVyc2lvbi1tYW5hZ2VyXCI7XG5pbXBvcnQgeyBWZXJzaW9uU3VwcG9ydExldmVsIH0gZnJvbSBcIi4uLy4uL2NvcmUtYXp1cmUvbGliL3ZlcnNpb24tbWFuYWdlci9pbnRlcmZhY2VzL3ZlcnNpb24taW50ZXJmYWNlc1wiO1xuaW1wb3J0IHtcbiAgRG5zRm9yd2FyZGluZ1J1bGVzZXRWaXJ0dWFsTmV0d29ya0xpbmssXG4gIERuc0ZvcndhcmRpbmdSdWxlc2V0VmlydHVhbE5ldHdvcmtMaW5rUHJvcHMsXG59IGZyb20gXCIuLi9saWIvdmlydHVhbC1uZXR3b3JrLWxpbmtcIjtcbmltcG9ydCB7XG4gIEFMTF9WSVJUVUFMX05FVFdPUktfTElOS19WRVJTSU9OUyxcbiAgVklSVFVBTF9ORVRXT1JLX0xJTktfVFlQRSxcbn0gZnJvbSBcIi4uL2xpYi92aXJ0dWFsLW5ldHdvcmstbGluay1zY2hlbWFzXCI7XG5cbmRlc2NyaWJlKFwiRG5zRm9yd2FyZGluZ1J1bGVzZXRWaXJ0dWFsTmV0d29ya0xpbmsgLSBJbXBsZW1lbnRhdGlvblwiLCAoKSA9PiB7XG4gIGxldCBhcHA6IGNka3RmLkFwcDtcbiAgbGV0IHN0YWNrOiBjZGt0Zi5UZXJyYWZvcm1TdGFjaztcbiAgbGV0IG1hbmFnZXI6IEFwaVZlcnNpb25NYW5hZ2VyO1xuXG4gIGNvbnN0IG1vY2tSdWxlc2V0SWQgPVxuICAgIFwiL3N1YnNjcmlwdGlvbnMvMTIzNDU2NzgtMTIzNC0xMjM0LTEyMzQtMTIzNDU2Nzg5MDEyL3Jlc291cmNlR3JvdXBzL3Rlc3QtcmcvcHJvdmlkZXJzL01pY3Jvc29mdC5OZXR3b3JrL2Ruc0ZvcndhcmRpbmdSdWxlc2V0cy90ZXN0LXJ1bGVzZXRcIjtcbiAgY29uc3QgbW9ja1ZpcnR1YWxOZXR3b3JrSWQgPVxuICAgIFwiL3N1YnNjcmlwdGlvbnMvMTIzNDU2NzgtMTIzNC0xMjM0LTEyMzQtMTIzNDU2Nzg5MDEyL3Jlc291cmNlR3JvdXBzL3Rlc3QtcmcvcHJvdmlkZXJzL01pY3Jvc29mdC5OZXR3b3JrL3ZpcnR1YWxOZXR3b3Jrcy90ZXN0LXZuZXRcIjtcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBhcHAgPSBUZXN0aW5nLmFwcCgpO1xuICAgIHN0YWNrID0gbmV3IGNka3RmLlRlcnJhZm9ybVN0YWNrKGFwcCwgXCJUZXN0U3RhY2tcIik7XG4gICAgbWFuYWdlciA9IEFwaVZlcnNpb25NYW5hZ2VyLmluc3RhbmNlKCk7XG5cbiAgICAvLyBFbnN1cmUgc2NoZW1hcyBhcmUgcmVnaXN0ZXJlZFxuICAgIHRyeSB7XG4gICAgICBtYW5hZ2VyLnJlZ2lzdGVyUmVzb3VyY2VUeXBlKFxuICAgICAgICBWSVJUVUFMX05FVFdPUktfTElOS19UWVBFLFxuICAgICAgICBBTExfVklSVFVBTF9ORVRXT1JLX0xJTktfVkVSU0lPTlMsXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBJZ25vcmUgaWYgYWxyZWFkeSByZWdpc3RlcmVkXG4gICAgfVxuICB9KTtcblxuICBkZXNjcmliZShcIkNvbnN0cnVjdG9yIGFuZCBCYXNpYyBQcm9wZXJ0aWVzXCIsICgpID0+IHtcbiAgICBpdChcInNob3VsZCBjcmVhdGUgVmlydHVhbCBOZXR3b3JrIExpbmsgd2l0aCBhdXRvbWF0aWMgbGF0ZXN0IHZlcnNpb24gcmVzb2x1dGlvblwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBwcm9wczogRG5zRm9yd2FyZGluZ1J1bGVzZXRWaXJ0dWFsTmV0d29ya0xpbmtQcm9wcyA9IHtcbiAgICAgICAgbmFtZTogXCJteS12bmV0LWxpbmtcIixcbiAgICAgICAgZG5zRm9yd2FyZGluZ1J1bGVzZXRJZDogbW9ja1J1bGVzZXRJZCxcbiAgICAgICAgdmlydHVhbE5ldHdvcmtJZDogbW9ja1ZpcnR1YWxOZXR3b3JrSWQsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBsaW5rID0gbmV3IERuc0ZvcndhcmRpbmdSdWxlc2V0VmlydHVhbE5ldHdvcmtMaW5rKFxuICAgICAgICBzdGFjayxcbiAgICAgICAgXCJUZXN0TGlua1wiLFxuICAgICAgICBwcm9wcyxcbiAgICAgICk7XG5cbiAgICAgIGV4cGVjdChsaW5rKS50b0JlSW5zdGFuY2VPZihEbnNGb3J3YXJkaW5nUnVsZXNldFZpcnR1YWxOZXR3b3JrTGluayk7XG4gICAgICBleHBlY3QobGluay5yZXNvbHZlZEFwaVZlcnNpb24pLnRvQmUoXCIyMDIyLTA3LTAxXCIpO1xuICAgICAgZXhwZWN0KGxpbmsucHJvcHMpLnRvQmUocHJvcHMpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgY3JlYXRlIFZpcnR1YWwgTmV0d29yayBMaW5rIHdpdGggZXhwbGljaXQgdmVyc2lvbiBwaW5uaW5nXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IHByb3BzOiBEbnNGb3J3YXJkaW5nUnVsZXNldFZpcnR1YWxOZXR3b3JrTGlua1Byb3BzID0ge1xuICAgICAgICBuYW1lOiBcIm15LXZuZXQtbGlua1wiLFxuICAgICAgICBkbnNGb3J3YXJkaW5nUnVsZXNldElkOiBtb2NrUnVsZXNldElkLFxuICAgICAgICB2aXJ0dWFsTmV0d29ya0lkOiBtb2NrVmlydHVhbE5ldHdvcmtJZCxcbiAgICAgICAgYXBpVmVyc2lvbjogXCIyMDIyLTA3LTAxXCIsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBsaW5rID0gbmV3IERuc0ZvcndhcmRpbmdSdWxlc2V0VmlydHVhbE5ldHdvcmtMaW5rKFxuICAgICAgICBzdGFjayxcbiAgICAgICAgXCJUZXN0TGlua1wiLFxuICAgICAgICBwcm9wcyxcbiAgICAgICk7XG5cbiAgICAgIGV4cGVjdChsaW5rLnJlc29sdmVkQXBpVmVyc2lvbikudG9CZShcIjIwMjItMDctMDFcIik7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBjcmVhdGUgVmlydHVhbCBOZXR3b3JrIExpbmsgd2l0aCBtZXRhZGF0YVwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBwcm9wczogRG5zRm9yd2FyZGluZ1J1bGVzZXRWaXJ0dWFsTmV0d29ya0xpbmtQcm9wcyA9IHtcbiAgICAgICAgbmFtZTogXCJteS12bmV0LWxpbmtcIixcbiAgICAgICAgZG5zRm9yd2FyZGluZ1J1bGVzZXRJZDogbW9ja1J1bGVzZXRJZCxcbiAgICAgICAgdmlydHVhbE5ldHdvcmtJZDogbW9ja1ZpcnR1YWxOZXR3b3JrSWQsXG4gICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgZW52aXJvbm1lbnQ6IFwicHJvZHVjdGlvblwiLFxuICAgICAgICAgIHRlYW06IFwicGxhdGZvcm1cIixcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGxpbmsgPSBuZXcgRG5zRm9yd2FyZGluZ1J1bGVzZXRWaXJ0dWFsTmV0d29ya0xpbmsoXG4gICAgICAgIHN0YWNrLFxuICAgICAgICBcIlRlc3RMaW5rXCIsXG4gICAgICAgIHByb3BzLFxuICAgICAgKTtcblxuICAgICAgZXhwZWN0KGxpbmspLnRvQmVEZWZpbmVkKCk7XG4gICAgICBleHBlY3QobGluay5wcm9wcy5tZXRhZGF0YSkudG9FcXVhbCh7XG4gICAgICAgIGVudmlyb25tZW50OiBcInByb2R1Y3Rpb25cIixcbiAgICAgICAgdGVhbTogXCJwbGF0Zm9ybVwiLFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKFwiRnJhbWV3b3JrIEludGVncmF0aW9uXCIsICgpID0+IHtcbiAgICBpdChcInNob3VsZCByZXNvbHZlIGxhdGVzdCBBUEkgdmVyc2lvbiBhdXRvbWF0aWNhbGx5XCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGxpbmsgPSBuZXcgRG5zRm9yd2FyZGluZ1J1bGVzZXRWaXJ0dWFsTmV0d29ya0xpbmsoXG4gICAgICAgIHN0YWNrLFxuICAgICAgICBcIlRlc3RMaW5rXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcIm15LXZuZXQtbGlua1wiLFxuICAgICAgICAgIGRuc0ZvcndhcmRpbmdSdWxlc2V0SWQ6IG1vY2tSdWxlc2V0SWQsXG4gICAgICAgICAgdmlydHVhbE5ldHdvcmtJZDogbW9ja1ZpcnR1YWxOZXR3b3JrSWQsXG4gICAgICAgIH0sXG4gICAgICApO1xuXG4gICAgICBleHBlY3QobGluay5yZXNvbHZlZEFwaVZlcnNpb24pLnRvQmUoXCIyMDIyLTA3LTAxXCIpO1xuICAgICAgZXhwZWN0KGxpbmsubGF0ZXN0VmVyc2lvbigpKS50b0JlKFwiMjAyMi0wNy0wMVwiKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIHByb3ZpZGUgdmVyc2lvbiBjb25maWd1cmF0aW9uXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGxpbmsgPSBuZXcgRG5zRm9yd2FyZGluZ1J1bGVzZXRWaXJ0dWFsTmV0d29ya0xpbmsoXG4gICAgICAgIHN0YWNrLFxuICAgICAgICBcIlRlc3RMaW5rXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcIm15LXZuZXQtbGlua1wiLFxuICAgICAgICAgIGRuc0ZvcndhcmRpbmdSdWxlc2V0SWQ6IG1vY2tSdWxlc2V0SWQsXG4gICAgICAgICAgdmlydHVhbE5ldHdvcmtJZDogbW9ja1ZpcnR1YWxOZXR3b3JrSWQsXG4gICAgICAgIH0sXG4gICAgICApO1xuXG4gICAgICBleHBlY3QobGluay52ZXJzaW9uQ29uZmlnKS50b0JlRGVmaW5lZCgpO1xuICAgICAgZXhwZWN0KGxpbmsudmVyc2lvbkNvbmZpZy52ZXJzaW9uKS50b0JlKFwiMjAyMi0wNy0wMVwiKTtcbiAgICAgIGV4cGVjdChsaW5rLnZlcnNpb25Db25maWcuc3VwcG9ydExldmVsKS50b0JlKFZlcnNpb25TdXBwb3J0TGV2ZWwuQUNUSVZFKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIHByb3ZpZGUgc3VwcG9ydGVkIHZlcnNpb25zXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGxpbmsgPSBuZXcgRG5zRm9yd2FyZGluZ1J1bGVzZXRWaXJ0dWFsTmV0d29ya0xpbmsoXG4gICAgICAgIHN0YWNrLFxuICAgICAgICBcIlRlc3RMaW5rXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcIm15LXZuZXQtbGlua1wiLFxuICAgICAgICAgIGRuc0ZvcndhcmRpbmdSdWxlc2V0SWQ6IG1vY2tSdWxlc2V0SWQsXG4gICAgICAgICAgdmlydHVhbE5ldHdvcmtJZDogbW9ja1ZpcnR1YWxOZXR3b3JrSWQsXG4gICAgICAgIH0sXG4gICAgICApO1xuXG4gICAgICBjb25zdCB2ZXJzaW9ucyA9IGxpbmsuc3VwcG9ydGVkVmVyc2lvbnMoKTtcbiAgICAgIGV4cGVjdCh2ZXJzaW9ucykudG9Db250YWluKFwiMjAyMi0wNy0wMVwiKTtcbiAgICAgIGV4cGVjdCh2ZXJzaW9ucy5sZW5ndGgpLnRvQmVHcmVhdGVyVGhhbigwKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoXCJQYXJlbnQtQ2hpbGQgUmVzb3VyY2UgUmVsYXRpb25zaGlwXCIsICgpID0+IHtcbiAgICBpdChcInNob3VsZCB1c2UgZG5zRm9yd2FyZGluZ1J1bGVzZXRJZCBhcyBwYXJlbnQgSURcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgbGluayA9IG5ldyBEbnNGb3J3YXJkaW5nUnVsZXNldFZpcnR1YWxOZXR3b3JrTGluayhcbiAgICAgICAgc3RhY2ssXG4gICAgICAgIFwiVGVzdExpbmtcIixcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwibXktdm5ldC1saW5rXCIsXG4gICAgICAgICAgZG5zRm9yd2FyZGluZ1J1bGVzZXRJZDogbW9ja1J1bGVzZXRJZCxcbiAgICAgICAgICB2aXJ0dWFsTmV0d29ya0lkOiBtb2NrVmlydHVhbE5ldHdvcmtJZCxcbiAgICAgICAgfSxcbiAgICAgICk7XG5cbiAgICAgIC8vIFZlcmlmeSB0aGUgbGluayB3YXMgY3JlYXRlZCBzdWNjZXNzZnVsbHkgd2l0aCBwcm9wZXIgcGFyZW50XG4gICAgICBleHBlY3QobGluaykudG9CZURlZmluZWQoKTtcbiAgICAgIGV4cGVjdChsaW5rLnByb3BzLmRuc0ZvcndhcmRpbmdSdWxlc2V0SWQpLnRvQmUobW9ja1J1bGVzZXRJZCk7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBjb3JyZWN0bHkgaGFuZGxlIGNoaWxkIHJlc291cmNlIGluIFRlcnJhZm9ybSBzeW50aGVzaXNcIiwgKCkgPT4ge1xuICAgICAgbmV3IERuc0ZvcndhcmRpbmdSdWxlc2V0VmlydHVhbE5ldHdvcmtMaW5rKHN0YWNrLCBcIlRlc3RMaW5rXCIsIHtcbiAgICAgICAgbmFtZTogXCJteS12bmV0LWxpbmtcIixcbiAgICAgICAgZG5zRm9yd2FyZGluZ1J1bGVzZXRJZDogbW9ja1J1bGVzZXRJZCxcbiAgICAgICAgdmlydHVhbE5ldHdvcmtJZDogbW9ja1ZpcnR1YWxOZXR3b3JrSWQsXG4gICAgICB9KTtcblxuICAgICAgY29uc3Qgc3ludGhlc2l6ZWQgPSBUZXN0aW5nLnN5bnRoKHN0YWNrKTtcbiAgICAgIGV4cGVjdChzeW50aGVzaXplZCkudG9Db250YWluKFwidmlydHVhbE5ldHdvcmtMaW5rc1wiKTtcbiAgICAgIGV4cGVjdChzeW50aGVzaXplZCkudG9Db250YWluKG1vY2tSdWxlc2V0SWQpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZShcIlB1YmxpYyBNZXRob2RzIC0gVmlydHVhbCBOZXR3b3JrIExpbmsgUHJvcGVydGllc1wiLCAoKSA9PiB7XG4gICAgaXQoXCJzaG91bGQgcHJvdmlkZSBwcm92aXNpb25pbmcgc3RhdGVcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgbGluayA9IG5ldyBEbnNGb3J3YXJkaW5nUnVsZXNldFZpcnR1YWxOZXR3b3JrTGluayhcbiAgICAgICAgc3RhY2ssXG4gICAgICAgIFwiVGVzdExpbmtcIixcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwibXktdm5ldC1saW5rXCIsXG4gICAgICAgICAgZG5zRm9yd2FyZGluZ1J1bGVzZXRJZDogbW9ja1J1bGVzZXRJZCxcbiAgICAgICAgICB2aXJ0dWFsTmV0d29ya0lkOiBtb2NrVmlydHVhbE5ldHdvcmtJZCxcbiAgICAgICAgfSxcbiAgICAgICk7XG5cbiAgICAgIGV4cGVjdChsaW5rLnByb3Zpc2lvbmluZ1N0YXRlKS50b0JlRGVmaW5lZCgpO1xuICAgICAgZXhwZWN0KHR5cGVvZiBsaW5rLnByb3Zpc2lvbmluZ1N0YXRlKS50b0JlKFwic3RyaW5nXCIpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgcHJvdmlkZSBtZXRhZGF0YVwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBsaW5rID0gbmV3IERuc0ZvcndhcmRpbmdSdWxlc2V0VmlydHVhbE5ldHdvcmtMaW5rKFxuICAgICAgICBzdGFjayxcbiAgICAgICAgXCJUZXN0TGlua1wiLFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJteS12bmV0LWxpbmtcIixcbiAgICAgICAgICBkbnNGb3J3YXJkaW5nUnVsZXNldElkOiBtb2NrUnVsZXNldElkLFxuICAgICAgICAgIHZpcnR1YWxOZXR3b3JrSWQ6IG1vY2tWaXJ0dWFsTmV0d29ya0lkLFxuICAgICAgICAgIG1ldGFkYXRhOiB7IGtleTogXCJ2YWx1ZVwiIH0sXG4gICAgICAgIH0sXG4gICAgICApO1xuXG4gICAgICBleHBlY3QobGluay5tZXRhZGF0YSkudG9CZURlZmluZWQoKTtcbiAgICAgIGV4cGVjdCh0eXBlb2YgbGluay5tZXRhZGF0YSkudG9CZShcInN0cmluZ1wiKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoXCJPdXRwdXRzXCIsICgpID0+IHtcbiAgICBpdChcInNob3VsZCBjcmVhdGUgYWxsIHJlcXVpcmVkIG91dHB1dHNcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgbGluayA9IG5ldyBEbnNGb3J3YXJkaW5nUnVsZXNldFZpcnR1YWxOZXR3b3JrTGluayhcbiAgICAgICAgc3RhY2ssXG4gICAgICAgIFwiVGVzdExpbmtcIixcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwibXktdm5ldC1saW5rXCIsXG4gICAgICAgICAgZG5zRm9yd2FyZGluZ1J1bGVzZXRJZDogbW9ja1J1bGVzZXRJZCxcbiAgICAgICAgICB2aXJ0dWFsTmV0d29ya0lkOiBtb2NrVmlydHVhbE5ldHdvcmtJZCxcbiAgICAgICAgfSxcbiAgICAgICk7XG5cbiAgICAgIGV4cGVjdChsaW5rLmlkT3V0cHV0KS50b0JlRGVmaW5lZCgpO1xuICAgICAgZXhwZWN0KGxpbmsubmFtZU91dHB1dCkudG9CZURlZmluZWQoKTtcbiAgICAgIGV4cGVjdChsaW5rLnByb3Zpc2lvbmluZ1N0YXRlT3V0cHV0KS50b0JlRGVmaW5lZCgpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgaGF2ZSBjb3JyZWN0IGxvZ2ljYWwgSURzIGZvciBvdXRwdXRzXCIsICgpID0+IHtcbiAgICAgIG5ldyBEbnNGb3J3YXJkaW5nUnVsZXNldFZpcnR1YWxOZXR3b3JrTGluayhzdGFjaywgXCJUZXN0TGlua1wiLCB7XG4gICAgICAgIG5hbWU6IFwibXktdm5ldC1saW5rXCIsXG4gICAgICAgIGRuc0ZvcndhcmRpbmdSdWxlc2V0SWQ6IG1vY2tSdWxlc2V0SWQsXG4gICAgICAgIHZpcnR1YWxOZXR3b3JrSWQ6IG1vY2tWaXJ0dWFsTmV0d29ya0lkLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHN5bnRoZXNpemVkID0gVGVzdGluZy5zeW50aChzdGFjayk7XG4gICAgICBleHBlY3Qoc3ludGhlc2l6ZWQpLnRvQ29udGFpbignXCJpZFwiJyk7XG4gICAgICBleHBlY3Qoc3ludGhlc2l6ZWQpLnRvQ29udGFpbignXCJuYW1lXCInKTtcbiAgICAgIGV4cGVjdChzeW50aGVzaXplZCkudG9Db250YWluKCdcInByb3Zpc2lvbmluZ19zdGF0ZVwiJyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKFwiSWdub3JlIENoYW5nZXMgQ29uZmlndXJhdGlvblwiLCAoKSA9PiB7XG4gICAgaXQoXCJzaG91bGQgYXBwbHkgaWdub3JlIGNoYW5nZXMgbGlmZWN5Y2xlIHJ1bGVzXCIsICgpID0+IHtcbiAgICAgIG5ldyBEbnNGb3J3YXJkaW5nUnVsZXNldFZpcnR1YWxOZXR3b3JrTGluayhzdGFjaywgXCJUZXN0TGlua1wiLCB7XG4gICAgICAgIG5hbWU6IFwibXktdm5ldC1saW5rXCIsXG4gICAgICAgIGRuc0ZvcndhcmRpbmdSdWxlc2V0SWQ6IG1vY2tSdWxlc2V0SWQsXG4gICAgICAgIHZpcnR1YWxOZXR3b3JrSWQ6IG1vY2tWaXJ0dWFsTmV0d29ya0lkLFxuICAgICAgICBpZ25vcmVDaGFuZ2VzOiBbXCJtZXRhZGF0YVwiXSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBzeW50aGVzaXplZCA9IFRlc3Rpbmcuc3ludGgoc3RhY2spO1xuICAgICAgZXhwZWN0KHN5bnRoZXNpemVkKS50b0NvbnRhaW4oXCJpZ25vcmVfY2hhbmdlc1wiKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIGhhbmRsZSBtdWx0aXBsZSBpZ25vcmUgY2hhbmdlcyBwcm9wZXJ0aWVzXCIsICgpID0+IHtcbiAgICAgIG5ldyBEbnNGb3J3YXJkaW5nUnVsZXNldFZpcnR1YWxOZXR3b3JrTGluayhzdGFjaywgXCJUZXN0TGlua1wiLCB7XG4gICAgICAgIG5hbWU6IFwibXktdm5ldC1saW5rXCIsXG4gICAgICAgIGRuc0ZvcndhcmRpbmdSdWxlc2V0SWQ6IG1vY2tSdWxlc2V0SWQsXG4gICAgICAgIHZpcnR1YWxOZXR3b3JrSWQ6IG1vY2tWaXJ0dWFsTmV0d29ya0lkLFxuICAgICAgICBpZ25vcmVDaGFuZ2VzOiBbXCJtZXRhZGF0YVwiLCBcIm5hbWVcIl0sXG4gICAgICB9KTtcblxuICAgICAgY29uc3Qgc3ludGhlc2l6ZWQgPSBUZXN0aW5nLnN5bnRoKHN0YWNrKTtcbiAgICAgIGV4cGVjdChzeW50aGVzaXplZCkudG9CZURlZmluZWQoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoXCJDREsgVGVycmFmb3JtIEludGVncmF0aW9uXCIsICgpID0+IHtcbiAgICBpdChcInNob3VsZCBzeW50aGVzaXplIHRvIHZhbGlkIFRlcnJhZm9ybSBjb25maWd1cmF0aW9uXCIsICgpID0+IHtcbiAgICAgIG5ldyBEbnNGb3J3YXJkaW5nUnVsZXNldFZpcnR1YWxOZXR3b3JrTGluayhzdGFjaywgXCJTeW50aFRlc3RcIiwge1xuICAgICAgICBuYW1lOiBcIm15LXZuZXQtbGlua1wiLFxuICAgICAgICBkbnNGb3J3YXJkaW5nUnVsZXNldElkOiBtb2NrUnVsZXNldElkLFxuICAgICAgICB2aXJ0dWFsTmV0d29ya0lkOiBtb2NrVmlydHVhbE5ldHdvcmtJZCxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBzeW50aGVzaXplZCA9IFRlc3Rpbmcuc3ludGgoc3RhY2spO1xuICAgICAgZXhwZWN0KHN5bnRoZXNpemVkKS50b0JlRGVmaW5lZCgpO1xuXG4gICAgICBjb25zdCBzdGFja0NvbmZpZyA9IEpTT04ucGFyc2Uoc3ludGhlc2l6ZWQpO1xuICAgICAgZXhwZWN0KHN0YWNrQ29uZmlnLnJlc291cmNlKS50b0JlRGVmaW5lZCgpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgZ2VuZXJhdGUgY29ycmVjdCByZXNvdXJjZSB0eXBlIGluIFRlcnJhZm9ybVwiLCAoKSA9PiB7XG4gICAgICBuZXcgRG5zRm9yd2FyZGluZ1J1bGVzZXRWaXJ0dWFsTmV0d29ya0xpbmsoc3RhY2ssIFwiU3ludGhUZXN0XCIsIHtcbiAgICAgICAgbmFtZTogXCJteS12bmV0LWxpbmtcIixcbiAgICAgICAgZG5zRm9yd2FyZGluZ1J1bGVzZXRJZDogbW9ja1J1bGVzZXRJZCxcbiAgICAgICAgdmlydHVhbE5ldHdvcmtJZDogbW9ja1ZpcnR1YWxOZXR3b3JrSWQsXG4gICAgICB9KTtcblxuICAgICAgY29uc3Qgc3ludGhlc2l6ZWQgPSBUZXN0aW5nLnN5bnRoKHN0YWNrKTtcbiAgICAgIGV4cGVjdChzeW50aGVzaXplZCkudG9Db250YWluKFwidmlydHVhbE5ldHdvcmtMaW5rc1wiKTtcbiAgICAgIGV4cGVjdChzeW50aGVzaXplZCkudG9Db250YWluKFwiMjAyMi0wNy0wMVwiKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIGluY2x1ZGUgYWxsIHByb3BlcnRpZXMgaW4gVGVycmFmb3JtIGJvZHlcIiwgKCkgPT4ge1xuICAgICAgbmV3IERuc0ZvcndhcmRpbmdSdWxlc2V0VmlydHVhbE5ldHdvcmtMaW5rKHN0YWNrLCBcIlN5bnRoVGVzdFwiLCB7XG4gICAgICAgIG5hbWU6IFwibXktdm5ldC1saW5rXCIsXG4gICAgICAgIGRuc0ZvcndhcmRpbmdSdWxlc2V0SWQ6IG1vY2tSdWxlc2V0SWQsXG4gICAgICAgIHZpcnR1YWxOZXR3b3JrSWQ6IG1vY2tWaXJ0dWFsTmV0d29ya0lkLFxuICAgICAgICBtZXRhZGF0YTogeyBlbnY6IFwidGVzdFwiIH0sXG4gICAgICB9KTtcblxuICAgICAgY29uc3Qgc3ludGhlc2l6ZWQgPSBUZXN0aW5nLnN5bnRoKHN0YWNrKTtcbiAgICAgIGV4cGVjdChzeW50aGVzaXplZCkudG9Db250YWluKG1vY2tWaXJ0dWFsTmV0d29ya0lkKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoXCJSZXNvdXJjZSBJZGVudGlmaWNhdGlvblwiLCAoKSA9PiB7XG4gICAgaXQoXCJzaG91bGQgcHJvdmlkZSByZXNvdXJjZSBJRFwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBsaW5rID0gbmV3IERuc0ZvcndhcmRpbmdSdWxlc2V0VmlydHVhbE5ldHdvcmtMaW5rKFxuICAgICAgICBzdGFjayxcbiAgICAgICAgXCJUZXN0TGlua1wiLFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJteS12bmV0LWxpbmtcIixcbiAgICAgICAgICBkbnNGb3J3YXJkaW5nUnVsZXNldElkOiBtb2NrUnVsZXNldElkLFxuICAgICAgICAgIHZpcnR1YWxOZXR3b3JrSWQ6IG1vY2tWaXJ0dWFsTmV0d29ya0lkLFxuICAgICAgICB9LFxuICAgICAgKTtcblxuICAgICAgZXhwZWN0KGxpbmsuaWQpLnRvQmVEZWZpbmVkKCk7XG4gICAgICBleHBlY3QodHlwZW9mIGxpbmsuaWQpLnRvQmUoXCJzdHJpbmdcIik7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBwcm92aWRlIHJlc291cmNlIG5hbWUgZnJvbSBwcm9wcyB3aGVuIHNwZWNpZmllZFwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBsaW5rID0gbmV3IERuc0ZvcndhcmRpbmdSdWxlc2V0VmlydHVhbE5ldHdvcmtMaW5rKFxuICAgICAgICBzdGFjayxcbiAgICAgICAgXCJUZXN0TGlua1wiLFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJteS12bmV0LWxpbmtcIixcbiAgICAgICAgICBkbnNGb3J3YXJkaW5nUnVsZXNldElkOiBtb2NrUnVsZXNldElkLFxuICAgICAgICAgIHZpcnR1YWxOZXR3b3JrSWQ6IG1vY2tWaXJ0dWFsTmV0d29ya0lkLFxuICAgICAgICB9LFxuICAgICAgKTtcblxuICAgICAgZXhwZWN0KGxpbmsubmFtZSkudG9CZShcIm15LXZuZXQtbGlua1wiKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoXCJKU0lJIENvbXBsaWFuY2VcIiwgKCkgPT4ge1xuICAgIGl0KFwic2hvdWxkIGhhdmUgcHJvcGVyIHJldHVybiB0eXBlcyBmb3IgYWxsIHB1YmxpYyBtZXRob2RzXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGxpbmsgPSBuZXcgRG5zRm9yd2FyZGluZ1J1bGVzZXRWaXJ0dWFsTmV0d29ya0xpbmsoXG4gICAgICAgIHN0YWNrLFxuICAgICAgICBcIlRlc3RMaW5rXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcIm15LXZuZXQtbGlua1wiLFxuICAgICAgICAgIGRuc0ZvcndhcmRpbmdSdWxlc2V0SWQ6IG1vY2tSdWxlc2V0SWQsXG4gICAgICAgICAgdmlydHVhbE5ldHdvcmtJZDogbW9ja1ZpcnR1YWxOZXR3b3JrSWQsXG4gICAgICAgIH0sXG4gICAgICApO1xuXG4gICAgICAvLyBBbGwgZ2V0dGVyIG1ldGhvZHMgc2hvdWxkIHJldHVybiBzdHJpbmdzIGZvciBUZXJyYWZvcm0gaW50ZXJwb2xhdGlvbnNcbiAgICAgIGV4cGVjdCh0eXBlb2YgbGluay5wcm92aXNpb25pbmdTdGF0ZSkudG9CZShcInN0cmluZ1wiKTtcbiAgICAgIGV4cGVjdCh0eXBlb2YgbGluay5tZXRhZGF0YSkudG9CZShcInN0cmluZ1wiKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoXCJTY2hlbWEgUmVnaXN0cmF0aW9uXCIsICgpID0+IHtcbiAgICBpdChcInNob3VsZCByZWdpc3RlciBzY2hlbWFzIHN1Y2Nlc3NmdWxseVwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBsaW5rID0gbmV3IERuc0ZvcndhcmRpbmdSdWxlc2V0VmlydHVhbE5ldHdvcmtMaW5rKFxuICAgICAgICBzdGFjayxcbiAgICAgICAgXCJUZXN0TGlua1wiLFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJteS12bmV0LWxpbmtcIixcbiAgICAgICAgICBkbnNGb3J3YXJkaW5nUnVsZXNldElkOiBtb2NrUnVsZXNldElkLFxuICAgICAgICAgIHZpcnR1YWxOZXR3b3JrSWQ6IG1vY2tWaXJ0dWFsTmV0d29ya0lkLFxuICAgICAgICB9LFxuICAgICAgKTtcblxuICAgICAgLy8gSWYgdGhlIGxpbmsgd2FzIGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5LCBzY2hlbWFzIHdlcmUgcmVnaXN0ZXJlZFxuICAgICAgZXhwZWN0KGxpbmspLnRvQmVEZWZpbmVkKCk7XG4gICAgICBleHBlY3QobGluay5yZXNvbHZlZEFwaVZlcnNpb24pLnRvQmUoXCIyMDIyLTA3LTAxXCIpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgaGFuZGxlIG11bHRpcGxlIGluc3RhbnRpYXRpb25zIHdpdGhvdXQgZXJyb3JzXCIsICgpID0+IHtcbiAgICAgIG5ldyBEbnNGb3J3YXJkaW5nUnVsZXNldFZpcnR1YWxOZXR3b3JrTGluayhzdGFjaywgXCJUZXN0TGluazFcIiwge1xuICAgICAgICBuYW1lOiBcIm15LXZuZXQtbGluay0xXCIsXG4gICAgICAgIGRuc0ZvcndhcmRpbmdSdWxlc2V0SWQ6IG1vY2tSdWxlc2V0SWQsXG4gICAgICAgIHZpcnR1YWxOZXR3b3JrSWQ6IG1vY2tWaXJ0dWFsTmV0d29ya0lkLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFNlY29uZCBpbnN0YW50aWF0aW9uIHNob3VsZCBub3QgdGhyb3cgYW4gZXJyb3IgZXZlbiBpZiBzY2hlbWFzIGFyZSBhbHJlYWR5IHJlZ2lzdGVyZWRcbiAgICAgIGNvbnN0IGxpbmsyID0gbmV3IERuc0ZvcndhcmRpbmdSdWxlc2V0VmlydHVhbE5ldHdvcmtMaW5rKFxuICAgICAgICBzdGFjayxcbiAgICAgICAgXCJUZXN0TGluazJcIixcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwibXktdm5ldC1saW5rLTJcIixcbiAgICAgICAgICBkbnNGb3J3YXJkaW5nUnVsZXNldElkOiBtb2NrUnVsZXNldElkLFxuICAgICAgICAgIHZpcnR1YWxOZXR3b3JrSWQ6IG1vY2tWaXJ0dWFsTmV0d29ya0lkLFxuICAgICAgICB9LFxuICAgICAgKTtcblxuICAgICAgZXhwZWN0KGxpbmsyKS50b0JlRGVmaW5lZCgpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
@@ -0,0 +1 @@
1
+ export * from "./lib";
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./lib"), exports);
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXp1cmUtZG5zcmVzb2x2ZXIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHdDQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2xpYlwiO1xuIl19
@@ -0,0 +1,24 @@
1
+ /**
2
+ * API schemas for Azure DNS Private Resolver across all supported versions
3
+ *
4
+ * This file defines the complete API schemas for Microsoft.Network/dnsResolvers
5
+ * across all supported API versions. The schemas are used by the VersionedAzapiResource
6
+ * framework for validation, transformation, and version management.
7
+ */
8
+ import { ApiSchema, VersionConfig } from "../../core-azure/lib/version-manager/interfaces/version-interfaces";
9
+ /**
10
+ * API Schema for DNS Resolver version 2022-07-01
11
+ */
12
+ export declare const DNS_RESOLVER_SCHEMA_2022_07_01: ApiSchema;
13
+ /**
14
+ * Version configuration for DNS Resolver 2022-07-01
15
+ */
16
+ export declare const DNS_RESOLVER_VERSION_2022_07_01: VersionConfig;
17
+ /**
18
+ * All supported DNS Resolver versions for registration
19
+ */
20
+ export declare const ALL_DNS_RESOLVER_VERSIONS: VersionConfig[];
21
+ /**
22
+ * Resource type constant
23
+ */
24
+ export declare const DNS_RESOLVER_TYPE = "Microsoft.Network/dnsResolvers";
@@ -0,0 +1,218 @@
1
+ "use strict";
2
+ /**
3
+ * API schemas for Azure DNS Private Resolver across all supported versions
4
+ *
5
+ * This file defines the complete API schemas for Microsoft.Network/dnsResolvers
6
+ * across all supported API versions. The schemas are used by the VersionedAzapiResource
7
+ * framework for validation, transformation, and version management.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.DNS_RESOLVER_TYPE = exports.ALL_DNS_RESOLVER_VERSIONS = exports.DNS_RESOLVER_VERSION_2022_07_01 = exports.DNS_RESOLVER_SCHEMA_2022_07_01 = void 0;
11
+ const version_interfaces_1 = require("../../core-azure/lib/version-manager/interfaces/version-interfaces");
12
+ // =============================================================================
13
+ // COMMON PROPERTY DEFINITIONS
14
+ // =============================================================================
15
+ /**
16
+ * Common property definitions shared across all DNS Resolver versions
17
+ */
18
+ const COMMON_PROPERTIES = {
19
+ location: {
20
+ dataType: version_interfaces_1.PropertyType.STRING,
21
+ required: true,
22
+ description: "The Azure region where the DNS Resolver will be created. DNS Resolvers are regional resources.",
23
+ validation: [
24
+ {
25
+ ruleType: version_interfaces_1.ValidationRuleType.REQUIRED,
26
+ message: "Location is required for DNS Resolvers",
27
+ },
28
+ ],
29
+ },
30
+ tags: {
31
+ dataType: version_interfaces_1.PropertyType.OBJECT,
32
+ required: false,
33
+ defaultValue: {},
34
+ description: "A dictionary of tags to apply to the DNS Resolver for organizational, billing, or other purposes",
35
+ validation: [
36
+ {
37
+ ruleType: version_interfaces_1.ValidationRuleType.TYPE_CHECK,
38
+ value: version_interfaces_1.PropertyType.OBJECT,
39
+ message: "Tags must be an object with string key-value pairs",
40
+ },
41
+ ],
42
+ },
43
+ name: {
44
+ dataType: version_interfaces_1.PropertyType.STRING,
45
+ required: true,
46
+ description: "The name of the DNS Resolver. Must be unique within the resource group.",
47
+ validation: [
48
+ {
49
+ ruleType: version_interfaces_1.ValidationRuleType.REQUIRED,
50
+ message: "DNS Resolver name is required",
51
+ },
52
+ {
53
+ ruleType: version_interfaces_1.ValidationRuleType.PATTERN_MATCH,
54
+ value: "^[a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?$",
55
+ message: "DNS Resolver name must start and end with alphanumeric characters and can contain hyphens",
56
+ },
57
+ {
58
+ ruleType: version_interfaces_1.ValidationRuleType.VALUE_RANGE,
59
+ value: { minLength: 1, maxLength: 80 },
60
+ message: "DNS Resolver name must be between 1 and 80 characters",
61
+ },
62
+ ],
63
+ },
64
+ virtualNetworkId: {
65
+ dataType: version_interfaces_1.PropertyType.STRING,
66
+ required: true,
67
+ description: "The resource ID of the virtual network where the DNS Resolver will be deployed. The resolver requires a dedicated subnet.",
68
+ validation: [
69
+ {
70
+ ruleType: version_interfaces_1.ValidationRuleType.REQUIRED,
71
+ message: "Virtual Network ID is required for DNS Resolvers",
72
+ },
73
+ {
74
+ ruleType: version_interfaces_1.ValidationRuleType.PATTERN_MATCH,
75
+ value: "^/subscriptions/[^/]+/resourceGroups/[^/]+/providers/Microsoft.Network/virtualNetworks/[^/]+$",
76
+ message: "Virtual Network ID must be a valid Azure resource ID",
77
+ },
78
+ ],
79
+ },
80
+ ignoreChanges: {
81
+ dataType: version_interfaces_1.PropertyType.ARRAY,
82
+ required: false,
83
+ description: "Array of property names to ignore during updates",
84
+ validation: [
85
+ {
86
+ ruleType: version_interfaces_1.ValidationRuleType.TYPE_CHECK,
87
+ value: version_interfaces_1.PropertyType.ARRAY,
88
+ message: "IgnoreChanges must be an array of strings",
89
+ },
90
+ ],
91
+ },
92
+ };
93
+ // =============================================================================
94
+ // READ-ONLY PROPERTY DEFINITIONS
95
+ // =============================================================================
96
+ /**
97
+ * Read-only properties that are populated by Azure after creation
98
+ * These properties should not be included in the request body
99
+ */
100
+ const READ_ONLY_PROPERTIES = {
101
+ dnsResolverState: {
102
+ dataType: version_interfaces_1.PropertyType.STRING,
103
+ required: false,
104
+ description: "The state of the DNS Resolver. Can be 'Connected' or 'Disconnected' (read-only)",
105
+ validation: [
106
+ {
107
+ ruleType: version_interfaces_1.ValidationRuleType.TYPE_CHECK,
108
+ value: version_interfaces_1.PropertyType.STRING,
109
+ message: "DnsResolverState must be a string",
110
+ },
111
+ ],
112
+ },
113
+ provisioningState: {
114
+ dataType: version_interfaces_1.PropertyType.STRING,
115
+ required: false,
116
+ description: "The provisioning state of the DNS Resolver resource (read-only)",
117
+ validation: [
118
+ {
119
+ ruleType: version_interfaces_1.ValidationRuleType.TYPE_CHECK,
120
+ value: version_interfaces_1.PropertyType.STRING,
121
+ message: "ProvisioningState must be a string",
122
+ },
123
+ ],
124
+ },
125
+ resourceGuid: {
126
+ dataType: version_interfaces_1.PropertyType.STRING,
127
+ required: false,
128
+ description: "The unique identifier for the DNS Resolver resource (read-only)",
129
+ validation: [
130
+ {
131
+ ruleType: version_interfaces_1.ValidationRuleType.TYPE_CHECK,
132
+ value: version_interfaces_1.PropertyType.STRING,
133
+ message: "ResourceGuid must be a string",
134
+ },
135
+ ],
136
+ },
137
+ };
138
+ // =============================================================================
139
+ // VERSION-SPECIFIC SCHEMAS
140
+ // =============================================================================
141
+ /**
142
+ * API Schema for DNS Resolver version 2022-07-01
143
+ */
144
+ exports.DNS_RESOLVER_SCHEMA_2022_07_01 = {
145
+ resourceType: "Microsoft.Network/dnsResolvers",
146
+ version: "2022-07-01",
147
+ properties: {
148
+ ...COMMON_PROPERTIES,
149
+ ...READ_ONLY_PROPERTIES,
150
+ },
151
+ required: ["location", "name", "virtualNetworkId"],
152
+ optional: ["tags", "ignoreChanges"],
153
+ deprecated: [],
154
+ transformationRules: {},
155
+ validationRules: [
156
+ {
157
+ property: "location",
158
+ rules: [
159
+ {
160
+ ruleType: version_interfaces_1.ValidationRuleType.REQUIRED,
161
+ message: "Location is required for DNS Resolvers",
162
+ },
163
+ ],
164
+ },
165
+ {
166
+ property: "name",
167
+ rules: [
168
+ {
169
+ ruleType: version_interfaces_1.ValidationRuleType.REQUIRED,
170
+ message: "Name is required for DNS Resolvers",
171
+ },
172
+ ],
173
+ },
174
+ {
175
+ property: "virtualNetworkId",
176
+ rules: [
177
+ {
178
+ ruleType: version_interfaces_1.ValidationRuleType.REQUIRED,
179
+ message: "Virtual Network ID is required for DNS Resolvers",
180
+ },
181
+ ],
182
+ },
183
+ ],
184
+ };
185
+ // =============================================================================
186
+ // VERSION CONFIGURATIONS
187
+ // =============================================================================
188
+ /**
189
+ * Version configuration for DNS Resolver 2022-07-01
190
+ */
191
+ exports.DNS_RESOLVER_VERSION_2022_07_01 = {
192
+ version: "2022-07-01",
193
+ schema: exports.DNS_RESOLVER_SCHEMA_2022_07_01,
194
+ supportLevel: version_interfaces_1.VersionSupportLevel.ACTIVE,
195
+ releaseDate: "2022-07-01",
196
+ deprecationDate: undefined,
197
+ sunsetDate: undefined,
198
+ breakingChanges: [],
199
+ migrationGuide: "/docs/dns-resolver/migration-2022-07-01",
200
+ changeLog: [
201
+ {
202
+ changeType: "added",
203
+ description: "Stable release of DNS Resolver API with support for hybrid DNS scenarios and conditional forwarding",
204
+ breaking: false,
205
+ },
206
+ ],
207
+ };
208
+ /**
209
+ * All supported DNS Resolver versions for registration
210
+ */
211
+ exports.ALL_DNS_RESOLVER_VERSIONS = [
212
+ exports.DNS_RESOLVER_VERSION_2022_07_01,
213
+ ];
214
+ /**
215
+ * Resource type constant
216
+ */
217
+ exports.DNS_RESOLVER_TYPE = "Microsoft.Network/dnsResolvers";
218
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG5zLXJlc29sdmVyLXNjaGVtYXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXp1cmUtZG5zcmVzb2x2ZXIvbGliL2Rucy1yZXNvbHZlci1zY2hlbWFzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7O0dBTUc7OztBQUVILDJHQU80RTtBQUU1RSxnRkFBZ0Y7QUFDaEYsOEJBQThCO0FBQzlCLGdGQUFnRjtBQUVoRjs7R0FFRztBQUNILE1BQU0saUJBQWlCLEdBQTBDO0lBQy9ELFFBQVEsRUFBRTtRQUNSLFFBQVEsRUFBRSxpQ0FBWSxDQUFDLE1BQU07UUFDN0IsUUFBUSxFQUFFLElBQUk7UUFDZCxXQUFXLEVBQ1QsZ0dBQWdHO1FBQ2xHLFVBQVUsRUFBRTtZQUNWO2dCQUNFLFFBQVEsRUFBRSx1Q0FBa0IsQ0FBQyxRQUFRO2dCQUNyQyxPQUFPLEVBQUUsd0NBQXdDO2FBQ2xEO1NBQ0Y7S0FDRjtJQUNELElBQUksRUFBRTtRQUNKLFFBQVEsRUFBRSxpQ0FBWSxDQUFDLE1BQU07UUFDN0IsUUFBUSxFQUFFLEtBQUs7UUFDZixZQUFZLEVBQUUsRUFBRTtRQUNoQixXQUFXLEVBQ1Qsa0dBQWtHO1FBQ3BHLFVBQVUsRUFBRTtZQUNWO2dCQUNFLFFBQVEsRUFBRSx1Q0FBa0IsQ0FBQyxVQUFVO2dCQUN2QyxLQUFLLEVBQUUsaUNBQVksQ0FBQyxNQUFNO2dCQUMxQixPQUFPLEVBQUUsb0RBQW9EO2FBQzlEO1NBQ0Y7S0FDRjtJQUNELElBQUksRUFBRTtRQUNKLFFBQVEsRUFBRSxpQ0FBWSxDQUFDLE1BQU07UUFDN0IsUUFBUSxFQUFFLElBQUk7UUFDZCxXQUFXLEVBQ1QseUVBQXlFO1FBQzNFLFVBQVUsRUFBRTtZQUNWO2dCQUNFLFFBQVEsRUFBRSx1Q0FBa0IsQ0FBQyxRQUFRO2dCQUNyQyxPQUFPLEVBQUUsK0JBQStCO2FBQ3pDO1lBQ0Q7Z0JBQ0UsUUFBUSxFQUFFLHVDQUFrQixDQUFDLGFBQWE7Z0JBQzFD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Q0w7b0JBQ0UsUUFBUSxFQUFFLHVDQUFrQixDQUFDLFFBQVE7b0JBQ3JDLE9BQU8sRUFBRSx3Q0FBd0M7aUJBQ2xEO2FBQ0Y7U0FDRjtRQUNEO1lBQ0UsUUFBUSxFQUFFLE1BQU07WUFDaEIsS0FBSyxFQUFFO2dCQUNMO29CQUNFLFFBQVEsRUFBRSx1Q0FBa0IsQ0FBQyxRQUFRO29CQUNyQyxPQUFPLEVBQUUsb0NBQW9DO2lCQUM5QzthQUNGO1NBQ0Y7UUFDRDtZQUNFLFFBQVEsRUFBRSxrQkFBa0I7WUFDNUIsS0FBSyxFQUFFO2dCQUNMO29CQUNFLFFBQVEsRUFBRSx1Q0FBa0IsQ0FBQyxRQUFRO29CQUNyQyxPQUFPLEVBQUUsa0RBQWtEO2lCQUM1RDthQUNGO1NBQ0Y7S0FDRjtDQUNGLENBQUM7QUFFRixnRkFBZ0Y7QUFDaEYseUJBQXlCO0FBQ3pCLGdGQUFnRjtBQUVoRjs7R0FFRztBQUNVLFFBQUEsK0JBQStCLEdBQWtCO0lBQzVELE9BQU8sRUFBRSxZQUFZO0lBQ3JCLE1BQU0sRUFBRSxzQ0FBOEI7SUFDdEMsWUFBWSxFQUFFLHdDQUFtQixDQUFDLE1BQU07SUFDeEMsV0FBVyxFQUFFLFlBQVk7SUFDekIsZUFBZSxFQUFFLFNBQVM7SUFDMUIsVUFBVSxFQUFFLFNBQVM7SUFDckIsZUFBZSxFQUFFLEVBQUU7SUFDbkIsY0FBYyxFQUFFLHlDQUF5QztJQUN6RCxTQUFTLEVBQUU7UUFDVDtZQUNFLFVBQVUsRUFBRSxPQUFPO1lBQ25CLFdBQVcsRUFDVCxxR0FBcUc7WUFDdkcsUUFBUSxFQUFFLEtBQUs7U0FDaEI7S0FDRjtDQUNGLENBQUM7QUFFRjs7R0FFRztBQUNVLFFBQUEseUJBQXlCLEdBQW9CO0lBQ3hELHVDQUErQjtDQUNoQyxDQUFDO0FBRUY7O0dBRUc7QUFDVSxRQUFBLGlCQUFpQixHQUFHLGdDQUFnQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBBUEkgc2NoZW1hcyBmb3IgQXp1cmUgRE5TIFByaXZhdGUgUmVzb2x2ZXIgYWNyb3NzIGFsbCBzdXBwb3J0ZWQgdmVyc2lvbnNcbiAqXG4gKiBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgY29tcGxldGUgQVBJIHNjaGVtYXMgZm9yIE1pY3Jvc29mdC5OZXR3b3JrL2Ruc1Jlc29sdmVyc1xuICogYWNyb3NzIGFsbCBzdXBwb3J0ZWQgQVBJIHZlcnNpb25zLiBUaGUgc2NoZW1hcyBhcmUgdXNlZCBieSB0aGUgVmVyc2lvbmVkQXphcGlSZXNvdXJjZVxuICogZnJhbWV3b3JrIGZvciB2YWxpZGF0aW9uLCB0cmFuc2Zvcm1hdGlvbiwgYW5kIHZlcnNpb24gbWFuYWdlbWVudC5cbiAqL1xuXG5pbXBvcnQge1xuICBBcGlTY2hlbWEsXG4gIFByb3BlcnR5RGVmaW5pdGlvbixcbiAgUHJvcGVydHlUeXBlLFxuICBWYWxpZGF0aW9uUnVsZVR5cGUsXG4gIFZlcnNpb25Db25maWcsXG4gIFZlcnNpb25TdXBwb3J0TGV2ZWwsXG59IGZyb20gXCIuLi8uLi9jb3JlLWF6dXJlL2xpYi92ZXJzaW9uLW1hbmFnZXIvaW50ZXJmYWNlcy92ZXJzaW9uLWludGVyZmFjZXNcIjtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIENPTU1PTiBQUk9QRVJUWSBERUZJTklUSU9OU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBDb21tb24gcHJvcGVydHkgZGVmaW5pdGlvbnMgc2hhcmVkIGFjcm9zcyBhbGwgRE5TIFJlc29sdmVyIHZlcnNpb25zXG4gKi9cbmNvbnN0IENPTU1PTl9QUk9QRVJUSUVTOiB7IFtrZXk6IHN0cmluZ106IFByb3BlcnR5RGVmaW5pdGlvbiB9ID0ge1xuICBsb2NhdGlvbjoge1xuICAgIGRhdGFUeXBlOiBQcm9wZXJ0eVR5cGUuU1RSSU5HLFxuICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgXCJUaGUgQXp1cmUgcmVnaW9uIHdoZXJlIHRoZSBETlMgUmVzb2x2ZXIgd2lsbCBiZSBjcmVhdGVkLiBETlMgUmVzb2x2ZXJzIGFyZSByZWdpb25hbCByZXNvdXJjZXMuXCIsXG4gICAgdmFsaWRhdGlvbjogW1xuICAgICAge1xuICAgICAgICBydWxlVHlwZTogVmFsaWRhdGlvblJ1bGVUeXBlLlJFUVVJUkVELFxuICAgICAgICBtZXNzYWdlOiBcIkxvY2F0aW9uIGlzIHJlcXVpcmVkIGZvciBETlMgUmVzb2x2ZXJzXCIsXG4gICAgICB9LFxuICAgIF0sXG4gIH0sXG4gIHRhZ3M6IHtcbiAgICBkYXRhVHlwZTogUHJvcGVydHlUeXBlLk9CSkVDVCxcbiAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgZGVmYXVsdFZhbHVlOiB7fSxcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgIFwiQSBkaWN0aW9uYXJ5IG9mIHRhZ3MgdG8gYXBwbHkgdG8gdGhlIEROUyBSZXNvbHZlciBmb3Igb3JnYW5pemF0aW9uYWwsIGJpbGxpbmcsIG9yIG90aGVyIHB1cnBvc2VzXCIsXG4gICAgdmFsaWRhdGlvbjogW1xuICAgICAge1xuICAgICAgICBydWxlVHlwZTogVmFsaWRhdGlvblJ1bGVUeXBlLlRZUEVfQ0hFQ0ssXG4gICAgICAgIHZhbHVlOiBQcm9wZXJ0eVR5cGUuT0JKRUNULFxuICAgICAgICBtZXNzYWdlOiBcIlRhZ3MgbXVzdCBiZSBhbiBvYmplY3Qgd2l0aCBzdHJpbmcga2V5LXZhbHVlIHBhaXJzXCIsXG4gICAgICB9LFxuICAgIF0sXG4gIH0sXG4gIG5hbWU6IHtcbiAgICBkYXRhVHlwZTogUHJvcGVydHlUeXBlLlNUUklORyxcbiAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgIFwiVGhlIG5hbWUgb2YgdGhlIEROUyBSZXNvbHZlci4gTXVzdCBiZSB1bmlxdWUgd2l0aGluIHRoZSByZXNvdXJjZSBncm91cC5cIixcbiAgICB2YWxpZGF0aW9uOiBbXG4gICAgICB7XG4gICAgICAgIHJ1bGVUeXBlOiBWYWxpZGF0aW9uUnVsZVR5cGUuUkVRVUlSRUQsXG4gICAgICAgIG1lc3NhZ2U6IFwiRE5TIFJlc29sdmVyIG5hbWUgaXMgcmVxdWlyZWRcIixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHJ1bGVUeXBlOiBWYWxpZGF0aW9uUnVsZVR5cGUuUEFUVEVSTl9NQVRDSCxcbiAgICAgICAgdmFsdWU6IFwiXlthLXpBLVowLTldKFthLXpBLVowLTktXSpbYS16QS1aMC05XSk/JFwiLFxuICAgICAgICBtZXNzYWdlOlxuICAgICAgICAgIFwiRE5TIFJlc29sdmVyIG5hbWUgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGggYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgYW5kIGNhbiBjb250YWluIGh5cGhlbnNcIixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHJ1bGVUeXBlOiBWYWxpZGF0aW9uUnVsZVR5cGUuVkFMVUVfUkFOR0UsXG4gICAgICAgIHZhbHVlOiB7IG1pbkxlbmd0aDogMSwgbWF4TGVuZ3RoOiA4MCB9LFxuICAgICAgICBtZXNzYWdlOiBcIkROUyBSZXNvbHZlciBuYW1lIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA4MCBjaGFyYWN0ZXJzXCIsXG4gICAgICB9LFxuICAgIF0sXG4gIH0sXG4gIHZpcnR1YWxOZXR3b3JrSWQ6IHtcbiAgICBkYXRhVHlwZTogUHJvcGVydHlUeXBlLlNUUklORyxcbiAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgIFwiVGhlIHJlc291cmNlIElEIG9mIHRoZSB2aXJ0dWFsIG5ldHdvcmsgd2hlcmUgdGhlIEROUyBSZXNvbHZlciB3aWxsIGJlIGRlcGxveWVkLiBUaGUgcmVzb2x2ZXIgcmVxdWlyZXMgYSBkZWRpY2F0ZWQgc3VibmV0LlwiLFxuICAgIHZhbGlkYXRpb246IFtcbiAgICAgIHtcbiAgICAgICAgcnVsZVR5cGU6IFZhbGlkYXRpb25SdWxlVHlwZS5SRVFVSVJFRCxcbiAgICAgICAgbWVzc2FnZTogXCJWaXJ0dWFsIE5ldHdvcmsgSUQgaXMgcmVxdWlyZWQgZm9yIEROUyBSZXNvbHZlcnNcIixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHJ1bGVUeXBlOiBWYWxpZGF0aW9uUnVsZVR5cGUuUEFUVEVSTl9NQVRDSCxcbiAgICAgICAgdmFsdWU6XG4gICAgICAgICAgXCJeL3N1YnNjcmlwdGlvbnMvW14vXSsvcmVzb3VyY2VHcm91cHMvW14vXSsvcHJvdmlkZXJzL01pY3Jvc29mdC5OZXR3b3JrL3ZpcnR1YWxOZXR3b3Jrcy9bXi9dKyRcIixcbiAgICAgICAgbWVzc2FnZTogXCJWaXJ0dWFsIE5ldHdvcmsgSUQgbXVzdCBiZSBhIHZhbGlkIEF6dXJlIHJlc291cmNlIElEXCIsXG4gICAgICB9LFxuICAgIF0sXG4gIH0sXG4gIGlnbm9yZUNoYW5nZXM6IHtcbiAgICBkYXRhVHlwZTogUHJvcGVydHlUeXBlLkFSUkFZLFxuICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICBkZXNjcmlwdGlvbjogXCJBcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyB0byBpZ25vcmUgZHVyaW5nIHVwZGF0ZXNcIixcbiAgICB2YWxpZGF0aW9uOiBbXG4gICAgICB7XG4gICAgICAgIHJ1bGVUeXBlOiBWYWxpZGF0aW9uUnVsZVR5cGUuVFlQRV9DSEVDSyxcbiAgICAgICAgdmFsdWU6IFByb3BlcnR5VHlwZS5BUlJBWSxcbiAgICAgICAgbWVzc2FnZTogXCJJZ25vcmVDaGFuZ2VzIG11c3QgYmUgYW4gYXJyYXkgb2Ygc3RyaW5nc1wiLFxuICAgICAgfSxcbiAgICBdLFxuICB9LFxufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFJFQUQtT05MWSBQUk9QRVJUWSBERUZJTklUSU9OU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBSZWFkLW9ubHkgcHJvcGVydGllcyB0aGF0IGFyZSBwb3B1bGF0ZWQgYnkgQXp1cmUgYWZ0ZXIgY3JlYXRpb25cbiAqIFRoZXNlIHByb3BlcnRpZXMgc2hvdWxkIG5vdCBiZSBpbmNsdWRlZCBpbiB0aGUgcmVxdWVzdCBib2R5XG4gKi9cbmNvbnN0IFJFQURfT05MWV9QUk9QRVJUSUVTOiB7IFtrZXk6IHN0cmluZ106IFByb3BlcnR5RGVmaW5pdGlvbiB9ID0ge1xuICBkbnNSZXNvbHZlclN0YXRlOiB7XG4gICAgZGF0YVR5cGU6IFByb3BlcnR5VHlwZS5TVFJJTkcsXG4gICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgXCJUaGUgc3RhdGUgb2YgdGhlIEROUyBSZXNvbHZlci4gQ2FuIGJlICdDb25uZWN0ZWQnIG9yICdEaXNjb25uZWN0ZWQnIChyZWFkLW9ubHkpXCIsXG4gICAgdmFsaWRhdGlvbjogW1xuICAgICAge1xuICAgICAgICBydWxlVHlwZTogVmFsaWRhdGlvblJ1bGVUeXBlLlRZUEVfQ0hFQ0ssXG4gICAgICAgIHZhbHVlOiBQcm9wZXJ0eVR5cGUuU1RSSU5HLFxuICAgICAgICBtZXNzYWdlOiBcIkRuc1Jlc29sdmVyU3RhdGUgbXVzdCBiZSBhIHN0cmluZ1wiLFxuICAgICAgfSxcbiAgICBdLFxuICB9LFxuICBwcm92aXNpb25pbmdTdGF0ZToge1xuICAgIGRhdGFUeXBlOiBQcm9wZXJ0eVR5cGUuU1RSSU5HLFxuICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgIFwiVGhlIHByb3Zpc2lvbmluZyBzdGF0ZSBvZiB0aGUgRE5TIFJlc29sdmVyIHJlc291cmNlIChyZWFkLW9ubHkpXCIsXG4gICAgdmFsaWRhdGlvbjogW1xuICAgICAge1xuICAgICAgICBydWxlVHlwZTogVmFsaWRhdGlvblJ1bGVUeXBlLlRZUEVfQ0hFQ0ssXG4gICAgICAgIHZhbHVlOiBQcm9wZXJ0eVR5cGUuU1RSSU5HLFxuICAgICAgICBtZXNzYWdlOiBcIlByb3Zpc2lvbmluZ1N0YXRlIG11c3QgYmUgYSBzdHJpbmdcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgfSxcbiAgcmVzb3VyY2VHdWlkOiB7XG4gICAgZGF0YVR5cGU6IFByb3BlcnR5VHlwZS5TVFJJTkcsXG4gICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgXCJUaGUgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBETlMgUmVzb2x2ZXIgcmVzb3VyY2UgKHJlYWQtb25seSlcIixcbiAgICB2YWxpZGF0aW9uOiBbXG4gICAgICB7XG4gICAgICAgIHJ1bGVUeXBlOiBWYWxpZGF0aW9uUnVsZVR5cGUuVFlQRV9DSEVDSyxcbiAgICAgICAgdmFsdWU6IFByb3BlcnR5VHlwZS5TVFJJTkcsXG4gICAgICAgIG1lc3NhZ2U6IFwiUmVzb3VyY2VHdWlkIG11c3QgYmUgYSBzdHJpbmdcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgfSxcbn07XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBWRVJTSU9OLVNQRUNJRklDIFNDSEVNQVNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogQVBJIFNjaGVtYSBmb3IgRE5TIFJlc29sdmVyIHZlcnNpb24gMjAyMi0wNy0wMVxuICovXG5leHBvcnQgY29uc3QgRE5TX1JFU09MVkVSX1NDSEVNQV8yMDIyXzA3XzAxOiBBcGlTY2hlbWEgPSB7XG4gIHJlc291cmNlVHlwZTogXCJNaWNyb3NvZnQuTmV0d29yay9kbnNSZXNvbHZlcnNcIixcbiAgdmVyc2lvbjogXCIyMDIyLTA3LTAxXCIsXG4gIHByb3BlcnRpZXM6IHtcbiAgICAuLi5DT01NT05fUFJPUEVSVElFUyxcbiAgICAuLi5SRUFEX09OTFlfUFJPUEVSVElFUyxcbiAgfSxcbiAgcmVxdWlyZWQ6IFtcImxvY2F0aW9uXCIsIFwibmFtZVwiLCBcInZpcnR1YWxOZXR3b3JrSWRcIl0sXG4gIG9wdGlvbmFsOiBbXCJ0YWdzXCIsIFwiaWdub3JlQ2hhbmdlc1wiXSxcbiAgZGVwcmVjYXRlZDogW10sXG4gIHRyYW5zZm9ybWF0aW9uUnVsZXM6IHt9LFxuICB2YWxpZGF0aW9uUnVsZXM6IFtcbiAgICB7XG4gICAgICBwcm9wZXJ0eTogXCJsb2NhdGlvblwiLFxuICAgICAgcnVsZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHJ1bGVUeXBlOiBWYWxpZGF0aW9uUnVsZVR5cGUuUkVRVUlSRUQsXG4gICAgICAgICAgbWVzc2FnZTogXCJMb2NhdGlvbiBpcyByZXF1aXJlZCBmb3IgRE5TIFJlc29sdmVyc1wiLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3BlcnR5OiBcIm5hbWVcIixcbiAgICAgIHJ1bGVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBydWxlVHlwZTogVmFsaWRhdGlvblJ1bGVUeXBlLlJFUVVJUkVELFxuICAgICAgICAgIG1lc3NhZ2U6IFwiTmFtZSBpcyByZXF1aXJlZCBmb3IgRE5TIFJlc29sdmVyc1wiLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3BlcnR5OiBcInZpcnR1YWxOZXR3b3JrSWRcIixcbiAgICAgIHJ1bGVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBydWxlVHlwZTogVmFsaWRhdGlvblJ1bGVUeXBlLlJFUVVJUkVELFxuICAgICAgICAgIG1lc3NhZ2U6IFwiVmlydHVhbCBOZXR3b3JrIElEIGlzIHJlcXVpcmVkIGZvciBETlMgUmVzb2x2ZXJzXCIsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0sXG4gIF0sXG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gVkVSU0lPTiBDT05GSUdVUkFUSU9OU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBWZXJzaW9uIGNvbmZpZ3VyYXRpb24gZm9yIEROUyBSZXNvbHZlciAyMDIyLTA3LTAxXG4gKi9cbmV4cG9ydCBjb25zdCBETlNfUkVTT0xWRVJfVkVSU0lPTl8yMDIyXzA3XzAxOiBWZXJzaW9uQ29uZmlnID0ge1xuICB2ZXJzaW9uOiBcIjIwMjItMDctMDFcIixcbiAgc2NoZW1hOiBETlNfUkVTT0xWRVJfU0NIRU1BXzIwMjJfMDdfMDEsXG4gIHN1cHBvcnRMZXZlbDogVmVyc2lvblN1cHBvcnRMZXZlbC5BQ1RJVkUsXG4gIHJlbGVhc2VEYXRlOiBcIjIwMjItMDctMDFcIixcbiAgZGVwcmVjYXRpb25EYXRlOiB1bmRlZmluZWQsXG4gIHN1bnNldERhdGU6IHVuZGVmaW5lZCxcbiAgYnJlYWtpbmdDaGFuZ2VzOiBbXSxcbiAgbWlncmF0aW9uR3VpZGU6IFwiL2RvY3MvZG5zLXJlc29sdmVyL21pZ3JhdGlvbi0yMDIyLTA3LTAxXCIsXG4gIGNoYW5nZUxvZzogW1xuICAgIHtcbiAgICAgIGNoYW5nZVR5cGU6IFwiYWRkZWRcIixcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIlN0YWJsZSByZWxlYXNlIG9mIEROUyBSZXNvbHZlciBBUEkgd2l0aCBzdXBwb3J0IGZvciBoeWJyaWQgRE5TIHNjZW5hcmlvcyBhbmQgY29uZGl0aW9uYWwgZm9yd2FyZGluZ1wiLFxuICAgICAgYnJlYWtpbmc6IGZhbHNlLFxuICAgIH0sXG4gIF0sXG59O1xuXG4vKipcbiAqIEFsbCBzdXBwb3J0ZWQgRE5TIFJlc29sdmVyIHZlcnNpb25zIGZvciByZWdpc3RyYXRpb25cbiAqL1xuZXhwb3J0IGNvbnN0IEFMTF9ETlNfUkVTT0xWRVJfVkVSU0lPTlM6IFZlcnNpb25Db25maWdbXSA9IFtcbiAgRE5TX1JFU09MVkVSX1ZFUlNJT05fMjAyMl8wN18wMSxcbl07XG5cbi8qKlxuICogUmVzb3VyY2UgdHlwZSBjb25zdGFudFxuICovXG5leHBvcnQgY29uc3QgRE5TX1JFU09MVkVSX1RZUEUgPSBcIk1pY3Jvc29mdC5OZXR3b3JrL2Ruc1Jlc29sdmVyc1wiO1xuIl19