@spinnaker/azure 0.4.10 → 2025.0.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.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/utility.ts","../src/help/azure.help.ts","../src/image/image.reader.js","../src/instance/azureInstanceType.service.js","../src/instance/details/instance.details.controller.js","../src/loadBalancer/configure/AzureLoadBalancerChoiceModal.tsx","../src/azure.settings.ts","../src/loadBalancer/loadBalancer.transformer.js","../src/loadBalancer/configure/createLoadBalancer.controller.js","../src/loadBalancer/details/loadBalancerDetail.controller.js","../src/pipeline/stages/bake/bakeExecutionDetails.controller.js","../src/serverGroup/serverGroup.transformer.js","../src/serverGroup/configure/serverGroupCommandBuilder.service.js","../src/pipeline/stages/bake/azureBakeStage.js","../src/pipeline/stages/destroyAsg/azureDestroyAsgStage.js","../src/pipeline/stages/disableAsg/azureDisableAsgStage.js","../src/pipeline/stages/enableAsg/azureEnableAsgStage.js","../src/securityGroup/securityGroup.write.service.js","../src/securityGroup/configure/CreateSecurityGroupCtrl.js","../src/securityGroup/configure/EditSecurityGroupCtrl.js","../src/securityGroup/clone/cloneSecurityGroup.controller.js","../src/securityGroup/details/securityGroupDetail.controller.js","../src/securityGroup/securityGroup.reader.js","../src/securityGroup/securityGroup.transformer.js","../src/serverGroup/configure/wizard/ServerGroupInstanceArchetype.controller.js","../src/serverGroup/configure/wizard/ServerGroupInstanceType.controller.js","../src/serverGroup/configure/wizard/advancedSettings/ServerGroupAdvancedSettings.controller.js","../src/serverGroup/configure/wizard/advancedSettings/advancedSettingsSelector.directive.js","../src/serverGroup/configure/wizard/basicSettings/image.regional.filter.js","../src/serverGroup/configure/wizard/basicSettings/ServerGroupBasicSettings.controller.js","../src/serverGroup/configure/wizard/capacity/capacitySelector.directive.js","../src/serverGroup/configure/wizard/healthSettings/ServerGroupHealthSettings.controller.js","../src/serverGroup/configure/wizard/healthSettings/healthSettingsSelector.directive.js","../src/serverGroup/configure/wizard/image/ServerGroupImageSettings.controller.js","../src/serverGroup/configure/wizard/image/imageSettingsSelector.directive.js","../src/serverGroup/configure/wizard/loadBalancers/ServerGroupLoadBalancers.controller.js","../src/serverGroup/configure/wizard/loadBalancers/serverGroupLoadBalancersSelector.directive.js","../src/serverGroup/configure/wizard/networkSettings/ServerGroupNetworkSettings.controller.js","../src/serverGroup/configure/wizard/networkSettings/ServerGroupNetworkSettingsSelector.directive.js","../src/serverGroup/configure/wizard/securityGroup/ServerGroupSecurityGroups.controller.js","../src/serverGroup/configure/wizard/securityGroup/serverGroupSecurityGroupsSelector.directive.js","../src/serverGroup/configure/wizard/tags/tagsSelector.directive.js","../src/serverGroup/configure/wizard/zones/zoneSelector.directive.js","../src/serverGroup/configure/serverGroup.configure.azure.module.js","../src/serverGroup/configure/serverGroupConfiguration.service.js","../src/serverGroup/configure/wizard/CloneServerGroup.azure.controller.js","../src/common/AzureModalFooter.tsx","../src/serverGroup/details/rollback/RollbackServerGroupModal.tsx","../src/serverGroup/details/serverGroupDetails.azure.controller.js","../src/serverGroup/details/serverGroup.details.module.js","../src/validation/applicationName.validator.js","../../../node_modules/style-inject/dist/style-inject.es.js","../src/azure.module.ts","../src/logo/logo_azure.png"],"sourcesContent":["export interface ITagResult {\n isValid: boolean;\n error: TagError | null;\n errorMessage?: string;\n}\n\nexport enum TagError {\n TAG_NUMBER_EXCEED,\n TAG_KEY_LENGTH_EXCEED,\n TAG_VALUE_LENGTH_EXCEED,\n TAG_KEY_INVALID_CHARACTER,\n TAG_VALUE_INVALID_CHARACTER,\n TAG_OBJECT_UNDEFINED,\n}\n\nexport interface IAzureLoadBalancer {\n type: string;\n description: string;\n}\n\nexport const AzureLoadBalancerTypes: IAzureLoadBalancer[] = [\n {\n type: 'Azure Load Balancer',\n description: '',\n },\n {\n type: 'Azure Application Gateway',\n description: '',\n },\n];\n\nexport default class Utility {\n public static readonly TAG_LIMITATION: number = 8;\n public static readonly TAG_KEY_LENGTH_LIMITATION: number = 512;\n public static readonly TAG_VALUE_LENGTH_LIMITATION: number = 256;\n public static readonly TAG_INVALID_CHAR_REG_EXR: RegExp = /[<>%&\\\\?/]/;\n\n public static checkTags(tagsObject: { [s: string]: string }): ITagResult {\n if (!tagsObject) {\n return {\n isValid: false,\n error: TagError.TAG_OBJECT_UNDEFINED,\n errorMessage: 'instanceTags is not defined',\n };\n }\n const length: number = Object.keys(tagsObject).length;\n if (!(length >= 0 && length <= Utility.TAG_LIMITATION)) {\n return {\n isValid: false,\n error: TagError.TAG_NUMBER_EXCEED,\n errorMessage: `Number of tags exceeds the limit: ${Utility.TAG_LIMITATION}`,\n };\n }\n\n for (const [k, v] of Object.entries(tagsObject)) {\n if (k.length > Utility.TAG_KEY_LENGTH_LIMITATION) {\n return {\n isValid: false,\n error: TagError.TAG_KEY_LENGTH_EXCEED,\n errorMessage: `Length of Tag key: ${k} exceeds the limit: ${Utility.TAG_KEY_LENGTH_LIMITATION}`,\n };\n }\n if (v.length > Utility.TAG_VALUE_LENGTH_LIMITATION) {\n return {\n isValid: false,\n error: TagError.TAG_VALUE_LENGTH_EXCEED,\n errorMessage: `Length of Tag value: ${v} exceeds the limit: ${Utility.TAG_VALUE_LENGTH_LIMITATION}`,\n };\n }\n if (Utility.TAG_INVALID_CHAR_REG_EXR.test(k)) {\n return {\n isValid: false,\n error: TagError.TAG_KEY_INVALID_CHARACTER,\n errorMessage: `Invalid characters in Tag key: ${k}`,\n };\n }\n if (Utility.TAG_INVALID_CHAR_REG_EXR.test(v)) {\n return {\n isValid: false,\n error: TagError.TAG_VALUE_INVALID_CHARACTER,\n errorMessage: `Invalid characters in Tag value: ${v}`,\n };\n }\n }\n return {\n isValid: true,\n error: null,\n };\n }\n\n public static getLoadBalancerType(typeString: string): IAzureLoadBalancer | null {\n typeString = typeString.toLowerCase().split('_').join(' ');\n return AzureLoadBalancerTypes.find((lb: IAzureLoadBalancer) => lb.type.toLowerCase() === typeString) || null;\n }\n}\n","import { HelpContentsRegistry } from '@spinnaker/core';\nimport Utility from '../utility';\n\nconst helpContents: { [key: string]: string } = {\n 'azure.securityGroup.ingress.description': 'Friendly description of the rule you want to enable (limit 80 chars.)',\n 'azure.securityGroup.ingress.priority':\n \"Rules are processed in priority order; the lower the number, the higher the priority. We recommend leaving gaps between rules - 100, 200, 300, etc. - so that it's easier to add new rules without having to edit existing rules. There are several default rules that can be overridden with priority (65000, 65001 and 65500). For more information visit http://portal.azure.com.\",\n 'azure.securityGroup.ingress.source':\n \"The source filter can be Any, an IP address range or a default tag('Internet', 'VirtualNetwork', AzureLoadBalancer'). It specifies the incoming traffic from a specific source IP address range (CIDR format) that will be allowed or denied by this rule.\",\n 'azure.securityGroup.ingress.sourcePortRange':\n 'The source port range can be a single port, such as 80, or a port range, such as 1024-65535. This specifies from which ports incoming traffic will be allowed or denied by this rule. Provide an asterisk (*) to allow traffic from clients connecting from any port.',\n 'azure.securityGroup.ingress.destination':\n \"The destination filter can be Any, an IP address range or a default tag('Internet', 'VirtualNetwork', AzureLoadBalancer'). It specifies the outgoing traffic from a specific destination IP address range (CIDR format) that will be allowed or denied by this rule.\",\n 'azure.securityGroup.ingress.destinationPortRange':\n 'The destination port range can be a single port, such as 80, or a port range, such as 1024-65535. This specifies from which destination ports traffic will be allowed or denied by this rule. Provide an asterisk (*) to allow traffic from clients connecting from any port.',\n 'azure.securityGroup.ingress.direction': 'Specifies whether the rule is for inbound or outbound traffic.',\n 'azure.securityGroup.ingress.actions':\n 'To adjust the priority of a rule, move it up or down in the list of rules. Rules at the top of the list have the highest priority.',\n 'azure.securityGroup.ingress.destPortRanges':\n 'Provide a single port, such as 80; a port range, such as 1024-65535; or a comma-separated list of single ports and/or port ranges, such as 80,1024-65535. Provide an asterisk (*) to allow traffic on any port.',\n 'azure.securityGroup.ingress.sourceIPCIDRRanges':\n 'Provide an address range using CIDR notation, such as 192.168.99.0/24; an IP address, such as 192.168.99.0; or a comma-separated list of address ranges or IP addresses, such as 10.0.0.0/24,44.66.0.0/24',\n 'azure.serverGroup.imageName': '(Required) <b>Image</b> is the deployable Azure Machine Image.',\n 'azure.serverGroup.stack':\n '(Required) <b>Stack</b> is one of the core naming components of a cluster, used to create vertical stacks of dependent services for integration testing.',\n 'azure.serverGroup.detail':\n '(Required) <b>Detail</b> is a naming component to help distinguish specifics of the server group.',\n 'azure.serverGroup.scriptLocation':\n 'The location of custom scripts separated by comma or semicolon to be downloaded on to each instance. A single script should be like: fileUri. Multiple scripts should be like fileUri1,fileUri2 or fileUri1;fileUri2',\n 'azure.serverGroup.commandToExecute':\n 'Command(s) to execute custom scripts provided during provisioning of an instance.',\n 'azure.serverGroup.customData': 'Script or metadata to be injected into each instances.',\n 'azure.serverGroup.customTags': `Custom tags on Virtual Machine Scale Set. Allow ${Utility.TAG_LIMITATION} tags at most.`,\n 'azure.serverGroup.enableInboundNAT':\n 'An Azure load balancer of the basic sku will be created with adding inbound NAT port-forwarding rules to facilitate loggin on VM instances. There is no charge for creating an Azure load balancer of the basic sku. This option is disabled if Availability Zones are set which require Standard Azure Load Balancer and an extra Network Security Group with correct inbound and outbound rules configured.',\n 'azure.serverGroup.lun':\n 'Specifies the logical unit number of the data disk. This value is used to identify data disks within the VM and therefore must be unique for each data disk attached to a VM.',\n 'azure.serverGroup.diskSizeGB':\n 'Specifies the size of an empty data disk in gigabytes. This value cannot be larger than 1023 GB',\n 'azure.serverGroup.managedDisk.storageAccountType':\n 'You can choose between Azure managed disks types to support your workload or scenario.',\n 'azure.serverGroup.caching':\n 'Changing the default host caching policy can adversely impact the performance of your application. You should run performance tests to measure its impact. To improve the total IOPS/throughput, we recommend striping across multiple disks and using premium (SSD) disks.',\n 'azure.serverGroup.userAssignedIdentities':\n 'Allows your server to access Azure resources. Learn more here: https://docs.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/overview',\n 'azure.loadBalancer.dnsName':\n 'If there is no custom DNS label specified, a default DNS name will be created. The default value will be \"GeneratedText.cloudapp.net\" for Azure Application Gateway or \"GeneratedText.[region].cloudapp.azure.com\" for Azure Load Balancer.',\n 'azure.loadBalancer.probes.probeInterval':\n 'Probe interval in seconds. This value is the time interval between two consecutive probes.',\n 'azure.loadBalancer.probes.timeout':\n 'Probe time-out in seconds. If a valid response is not received within this time-out period, the probe is marked as failed. Note that the time-out value should not be more than the Interval value.',\n 'azure.loadBalancer.probes.unhealthyThreshold':\n 'Probe retry count. The back-end server is marked down after the consecutive probe failure count reaches the unhealthy threshold.',\n 'azure.loadBalancer.loadBalancingRules.idleTimeout':\n 'Keep a TCP or HTTP connection open without relying on clients to send keep-alive messages.',\n 'azure.loadBalancer.loadBalancingRules.sessionPersistence':\n 'Session persistence specifies that traffic from a client should be handled by the same virtual machine in the backend pool for the duration of a session. \"None\" specifies that successive requests from the same client may be handled by any virtual machine. \"Client IP\" specifies that successive requests from the same client IP address will be handled by the same virtual machine. \"Client IP and protocol\" specifies that successive requests from the same client IP address and protocol combination will be handled by the same virtual machine.',\n};\n\nObject.keys(helpContents).forEach((key) => HelpContentsRegistry.register(key, helpContents[key]));\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { REST } from '@spinnaker/core';\n\nexport const AZURE_IMAGE_IMAGE_READER = 'spinnaker.azure.image.reader';\nexport const name = AZURE_IMAGE_IMAGE_READER; // for backwards compatibility\nmodule(AZURE_IMAGE_IMAGE_READER, []).factory('azureImageReader', function () {\n function findImages(params) {\n return REST('/images/find')\n .query(params)\n .get()\n .then(\n function (results) {\n return results;\n },\n function () {\n return [];\n },\n );\n }\n\n function getImage(amiName, region, credentials) {\n return REST('/images')\n .path(credentials, region, amiName)\n .query({ provider: 'azure' })\n .get()\n .then(\n function (results) {\n return results && results.length ? results[0] : null;\n },\n function () {\n return null;\n },\n );\n }\n\n return {\n findImages: findImages,\n getImage: getImage,\n };\n});\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nexport const AZURE_INSTANCE_AZUREINSTANCETYPE_SERVICE = 'spinnaker.azure.instanceType.service';\nexport const name = AZURE_INSTANCE_AZUREINSTANCETYPE_SERVICE; // for backwards compatibility\nmodule(AZURE_INSTANCE_AZUREINSTANCETYPE_SERVICE, []).factory('azureInstanceTypeService', [\n '$q',\n function ($q) {\n const B = {\n type: 'B-series',\n description:\n 'The B-series burstable VMs are ideal for workloads that do not need the full performance of the CPU continuously, like web servers, small databases and development and test environments.',\n instanceTypes: [\n {\n name: 'Standard_B1ms',\n label: 'Standard_B1ms',\n cpu: 1,\n memory: 2,\n storage: {\n type: 'SSD',\n count: 2,\n size: 4,\n },\n },\n {\n name: 'Standard_B1s',\n label: 'Standard_B1s',\n cpu: 1,\n memory: 1,\n storage: {\n type: 'SSD',\n count: 2,\n size: 2,\n },\n },\n {\n name: 'Standard_B2ms',\n label: 'Standard_B2ms',\n cpu: 2,\n memory: 8,\n storage: {\n type: 'SSD',\n count: 4,\n size: 16,\n },\n },\n {\n name: 'Standard_B2s',\n label: 'Standard_B2s',\n cpu: 2,\n memory: 4,\n storage: {\n type: 'SSD',\n count: 4,\n size: 8,\n },\n },\n {\n name: 'Standard_B4ms',\n label: 'Standard_B4ms',\n cpu: 4,\n memory: 16,\n storage: {\n type: 'SSD',\n count: 8,\n size: 32,\n },\n },\n {\n name: 'Standard_B8ms',\n label: 'Standard_B8ms',\n cpu: 8,\n memory: 32,\n storage: {\n type: 'SSD',\n count: 16,\n size: 64,\n },\n },\n {\n name: 'Standard_B1ls',\n label: 'Standard_B1ls',\n cpu: 1,\n memory: 0.5,\n storage: {\n type: 'SSD',\n count: 2,\n size: 1,\n },\n },\n ],\n };\n\n const DSV3 = {\n type: 'Dsv3-series',\n description:\n 'The Dsv3-series sizes offer a combination of vCPU, memory, and temporary storage for most production workloads.',\n instanceTypes: [\n {\n name: 'Standard_D2s_v3',\n label: 'Standard_D2s_v3',\n cpu: 2,\n memory: 8,\n storage: {\n type: 'SSD',\n count: 4,\n size: 16,\n },\n },\n {\n name: 'Standard_D4s_v3',\n label: 'Standard_D4s_v3',\n cpu: 4,\n memory: 16,\n storage: {\n type: 'SSD',\n count: 8,\n size: 32,\n },\n },\n {\n name: 'Standard_D8s_v3',\n label: 'Standard_D8s_v3',\n cpu: 8,\n memory: 32,\n storage: {\n type: 'SSD',\n count: 16,\n size: 64,\n },\n },\n {\n name: 'Standard_D16s_v3',\n label: 'Standard_D16s_v3',\n cpu: 16,\n memory: 64,\n storage: {\n type: 'SSD',\n count: 32,\n size: 128,\n },\n },\n {\n name: 'Standard_D32s_v3',\n label: 'Standard_D32s_v3',\n cpu: 32,\n memory: 128,\n storage: {\n type: 'SSD',\n count: 32,\n size: 256,\n },\n },\n {\n name: 'Standard_D64s_v3',\n label: 'Standard_D64s_v3',\n cpu: 64,\n memory: 256,\n storage: {\n type: 'SSD',\n count: 32,\n size: 512,\n },\n },\n ],\n };\n\n const DV3 = {\n type: 'Dv3-series',\n description:\n 'The Dv3-series sizes offer a combination of vCPU, memory, and temporary storage for most production workloads.',\n instanceTypes: [\n {\n name: 'Standard_D2_v3',\n label: 'Standard_D2_v3',\n cpu: 2,\n memory: 8,\n storage: {\n type: 'SSD',\n count: 4,\n size: 50,\n },\n },\n {\n name: 'Standard_D4_v3',\n label: 'Standard_D4_v3',\n cpu: 4,\n memory: 16,\n storage: {\n type: 'SSD',\n count: 8,\n size: 100,\n },\n },\n {\n name: 'Standard_D8_v3',\n label: 'Standard_D8_v3',\n cpu: 8,\n memory: 32,\n storage: {\n type: 'SSD',\n count: 16,\n size: 200,\n },\n },\n {\n name: 'Standard_D16_v3',\n label: 'Standard_D16_v3',\n cpu: 16,\n memory: 64,\n storage: {\n type: 'SSD',\n count: 32,\n size: 400,\n },\n },\n {\n name: 'Standard_D32_v3',\n label: 'Standard_D32_v3',\n cpu: 32,\n memory: 128,\n storage: {\n type: 'SSD',\n count: 32,\n size: 800,\n },\n },\n {\n name: 'Standard_D64_v3',\n label: 'Standard_D64_v3',\n cpu: 64,\n memory: 256,\n storage: {\n type: 'SSD',\n count: 32,\n size: 1600,\n },\n },\n ],\n };\n\n const DSV2 = {\n type: 'DSv2-series',\n description: '',\n instanceTypes: [\n {\n name: 'Standard_DS1_v2',\n label: 'Standard_DS1_v2',\n cpu: 1,\n memory: 3.5,\n storage: {\n type: 'SSD',\n count: 4,\n size: 7,\n },\n },\n {\n name: 'Standard_DS2_v2',\n label: 'Standard_DS2_v2',\n cpu: 2,\n memory: 7,\n storage: {\n type: 'SSD',\n count: 8,\n size: 14,\n },\n },\n {\n name: 'Standard_DS3_v2',\n label: 'Standard_DS3_v2',\n cpu: 4,\n memory: 14,\n storage: {\n type: 'SSD',\n count: 16,\n size: 28,\n },\n },\n {\n name: 'Standard_DS4_v2',\n label: 'Standard_DS4_v2',\n cpu: 8,\n memory: 28,\n storage: {\n type: 'SSD',\n count: 32,\n size: 56,\n },\n },\n {\n name: 'Standard_DS5_v2',\n label: 'Standard_DS5_v2',\n cpu: 16,\n memory: 56,\n storage: {\n type: 'SSD',\n count: 64,\n size: 112,\n },\n },\n {\n name: 'Standard_DS11_v2',\n label: 'Standard_DS11_v2',\n cpu: 2,\n memory: 14,\n storage: {\n type: 'SSD',\n count: 8,\n size: 28,\n },\n },\n {\n name: 'Standard_DS12_v2',\n label: 'Standard_DS12_v2',\n cpu: 4,\n memory: 28,\n storage: {\n type: 'SSD',\n count: 16,\n size: 56,\n },\n },\n {\n name: 'Standard_DS13_v2',\n label: 'Standard_DS13_v2',\n cpu: 8,\n memory: 56,\n storage: {\n type: 'SSD',\n count: 32,\n size: 112,\n },\n },\n {\n name: 'Standard_DS14_v2',\n label: 'Standard_DS14_v2',\n cpu: 16,\n memory: 112,\n storage: {\n type: 'SSD',\n count: 64,\n size: 224,\n },\n },\n {\n name: 'Standard_DS15_v2',\n label: 'Standard_DS15_v2',\n cpu: 20,\n memory: 140,\n storage: {\n type: 'SSD',\n count: 64,\n size: 280,\n },\n },\n ],\n };\n\n const DV2 = {\n type: 'Dv2-series',\n description: '',\n instanceTypes: [\n {\n name: 'Standard_D1_v2',\n label: 'Standard_D1_v2',\n cpu: 1,\n memory: 3.5,\n storage: {\n type: 'SSD',\n count: 4,\n size: 50,\n },\n },\n {\n name: 'Standard_D2_v2',\n label: 'Standard_D2_v2',\n cpu: 2,\n memory: 7,\n storage: {\n type: 'SSD',\n count: 8,\n size: 100,\n },\n },\n {\n name: 'Standard_D3_v2',\n label: 'Standard_D3_v2',\n cpu: 4,\n memory: 14,\n storage: {\n type: 'SSD',\n count: 16,\n size: 200,\n },\n },\n {\n name: 'Standard_D4_v2',\n label: 'Standard_D4_v2',\n cpu: 8,\n memory: 28,\n storage: {\n type: 'SSD',\n count: 32,\n size: 400,\n },\n },\n {\n name: 'Standard_D5_v2',\n label: 'Standard_D5_v2',\n cpu: 16,\n memory: 56,\n storage: {\n type: 'SSD',\n count: 64,\n size: 800,\n },\n },\n {\n name: 'Standard_D11_v2',\n label: 'Standard_D11_v2',\n cpu: 2,\n memory: 14,\n storage: {\n type: 'SSD',\n count: 8,\n size: 100,\n },\n },\n {\n name: 'Standard_D12_v2',\n label: 'Standard_D12_v2',\n cpu: 4,\n memory: 28,\n storage: {\n type: 'SSD',\n count: 16,\n size: 200,\n },\n },\n {\n name: 'Standard_D13_v2',\n label: 'Standard_D13_v2',\n cpu: 8,\n memory: 56,\n storage: {\n type: 'SSD',\n count: 32,\n size: 400,\n },\n },\n {\n name: 'Standard_D14_v2',\n label: 'Standard_D14_v2',\n cpu: 16,\n memory: 112,\n storage: {\n type: 'SSD',\n count: 64,\n size: 800,\n },\n },\n {\n name: 'Standard_D15_v2',\n label: 'Standard_D15_v2',\n cpu: 20,\n memory: 140,\n storage: {\n type: 'SSD',\n count: 64,\n size: 280,\n },\n },\n ],\n };\n\n const AV2 = {\n type: 'Av2-series',\n description: '',\n instanceTypes: [\n {\n name: 'Standard_A1_v2',\n label: 'Standard_A1_v2',\n cpu: 1,\n memory: 2,\n storage: {\n type: 'SSD',\n count: 2,\n size: 10,\n },\n },\n {\n name: 'Standard_A2m_v2',\n label: 'Standard_A2m_v2',\n cpu: 2,\n memory: 16,\n storage: {\n type: 'SSD',\n count: 4,\n size: 20,\n },\n },\n {\n name: 'Standard_A2_v2',\n label: 'Standard_A2_v2',\n cpu: 2,\n memory: 4,\n storage: {\n type: 'SSD',\n count: 4,\n size: 20,\n },\n },\n {\n name: 'Standard_A4m_v2',\n label: 'Standard_A4m_v2',\n cpu: 4,\n memory: 32,\n storage: {\n type: 'SSD',\n count: 8,\n size: 40,\n },\n },\n {\n name: 'Standard_A4_v2',\n label: 'Standard_A4_v2',\n cpu: 4,\n memory: 8,\n storage: {\n type: 'SSD',\n count: 8,\n size: 40,\n },\n },\n {\n name: 'Standard_A8m_v2',\n label: 'Standard_A8m_v2',\n cpu: 8,\n memory: 64,\n storage: {\n type: 'SSD',\n count: 16,\n size: 80,\n },\n },\n {\n name: 'Standard_A8_v2',\n label: 'Standard_A8_v2',\n cpu: 8,\n memory: 16,\n storage: {\n type: 'SSD',\n count: 16,\n size: 80,\n },\n },\n ],\n };\n\n const DC = {\n type: 'DC-series',\n description: '',\n instanceTypes: [\n {\n name: 'Standard_DC2s',\n label: 'Standard_DC2s',\n cpu: 2,\n memory: 8,\n storage: {\n type: 'SSD',\n count: 2,\n size: 100,\n },\n },\n {\n name: 'Standard_DC4s',\n label: 'Standard_DC4s',\n cpu: 4,\n memory: 16,\n storage: {\n type: 'SSD',\n count: 4,\n size: 200,\n },\n },\n ],\n };\n\n const FSV2 = {\n type: 'Fsv2-series',\n description: '',\n instanceTypes: [\n {\n name: 'Standard_F2s_v2',\n label: 'Standard_F2s_v2',\n cpu: 2,\n memory: 4,\n storage: { type: 'SSD', count: 4, size: 16 },\n },\n {\n name: 'Standard_F4s_v2',\n label: 'Standard_F4s_v2',\n cpu: 4,\n memory: 8,\n storage: { type: 'SSD', count: 8, size: 32 },\n },\n {\n name: 'Standard_F8s_v2',\n label: 'Standard_F8s_v2',\n cpu: 8,\n memory: 16,\n storage: { type: 'SSD', count: 16, size: 64 },\n },\n {\n name: 'Standard_F16s_v2',\n label: 'Standard_F16s_v2',\n cpu: 16,\n memory: 32,\n storage: { type: 'SSD', count: 32, size: 128 },\n },\n {\n name: 'Standard_F32s_v2',\n label: 'Standard_F32s_v2',\n cpu: 32,\n memory: 64,\n storage: { type: 'SSD', count: 32, size: 256 },\n },\n {\n name: 'Standard_F64s_v2',\n label: 'Standard_F64s_v2',\n cpu: 64,\n memory: 128,\n storage: { type: 'SSD', count: 32, size: 512 },\n },\n {\n name: 'Standard_F72s_v2',\n label: 'Standard_F72s_v2',\n cpu: 72,\n memory: 144,\n storage: { type: 'SSD', count: 32, size: 576 },\n },\n ],\n };\n\n const FS = {\n type: 'Fs-series',\n description: '',\n instanceTypes: [\n {\n name: 'Standard_F1s',\n label: 'Standard_F1s',\n cpu: 1,\n memory: 2,\n storage: { type: 'SSD', count: 4, size: 4 },\n },\n {\n name: 'Standard_F2s',\n label: 'Standard_F2s',\n cpu: 2,\n memory: 4,\n storage: { type: 'SSD', count: 8, size: 8 },\n },\n {\n name: 'Standard_F4s',\n label: 'Standard_F4s',\n cpu: 4,\n memory: 8,\n storage: { type: 'SSD', count: 16, size: 16 },\n },\n {\n name: 'Standard_F8s',\n label: 'Standard_F8s',\n cpu: 8,\n memory: 16,\n storage: { type: 'SSD', count: 32, size: 32 },\n },\n {\n name: 'Standard_F16s',\n label: 'Standard_F16s',\n cpu: 16,\n memory: 32,\n storage: { type: 'SSD', count: 64, size: 64 },\n },\n ],\n };\n\n const F = {\n type: 'F-series',\n description: '',\n instanceTypes: [\n {\n name: 'Standard_F1',\n label: 'Standard_F1',\n cpu: 1,\n memory: 2,\n storage: { type: 'SSD', count: 4, size: 16 },\n },\n {\n name: 'Standard_F2',\n label: 'Standard_F2',\n cpu: 2,\n memory: 4,\n storage: { type: 'SSD', count: 8, size: 32 },\n },\n {\n name: 'Standard_F4',\n label: 'Standard_F4',\n cpu: 4,\n memory: 8,\n storage: { type: 'SSD', count: 16, size: 64 },\n },\n {\n name: 'Standard_F8',\n label: 'Standard_F8',\n cpu: 8,\n memory: 16,\n storage: { type: 'SSD', count: 32, size: 128 },\n },\n {\n name: 'Standard_F16',\n label: 'Standard_F16',\n cpu: 16,\n memory: 32,\n storage: { type: 'SSD', count: 64, size: 256 },\n },\n ],\n };\n\n const categories = [\n {\n type: 'general',\n label: 'General Purpose',\n description:\n 'Balanced CPU-to-memory ratio. Ideal for testing and development, small to medium databases, and low to medium traffic web servers.',\n families: [B, DSV3, DV3, DSV2, DV2, AV2, DC],\n icon: 'hdd',\n },\n {\n type: 'compute',\n label: 'Compute Optimized',\n description:\n 'High CPU-to-memory ratio. Good for medium traffic web servers, network appliances, batch processes, and application servers.',\n families: [FSV2, FS, F],\n icon: 'hdd',\n },\n {\n type: 'custom',\n label: 'Custom Type',\n description: 'Select the instance type below.',\n families: [],\n icon: 'asterisk',\n },\n ];\n\n function calculateStorage(type) {\n if (!type || !type.storage) {\n return 0;\n }\n return type.storage.count * type.storage.size;\n }\n\n function buildStats(category) {\n const stats = {\n cpu: {\n min: Number.MAX_VALUE,\n max: -Number.MAX_VALUE,\n },\n memory: {\n min: Number.MAX_VALUE,\n max: -Number.MAX_VALUE,\n },\n storage: {\n min: Number.MAX_VALUE,\n max: -Number.MAX_VALUE,\n },\n families: [],\n };\n\n if (category.families && category.families.length) {\n category.families.forEach(function (family) {\n stats.families.push(family.type);\n const cpuMin = _.minBy(family.instanceTypes, 'cpu').cpu || Number.MAX_VALUE;\n const cpuMax = _.maxBy(family.instanceTypes, 'cpu').cpu || -Number.MAX_VALUE;\n const memoryMin = _.minBy(family.instanceTypes, 'memory').memory || Number.MAX_VALUE;\n const memoryMax = _.maxBy(family.instanceTypes, 'memory').memory || -Number.MAX_VALUE;\n const storageMin = calculateStorage(_.minBy(family.instanceTypes, calculateStorage)) || Number.MAX_VALUE;\n const storageMax = calculateStorage(_.maxBy(family.instanceTypes, calculateStorage)) || -Number.MAX_VALUE;\n\n stats.cpu.min = Math.min(stats.cpu.min, cpuMin);\n stats.cpu.max = Math.max(stats.cpu.max, cpuMax);\n stats.memory.min = Math.min(stats.memory.min, memoryMin);\n stats.memory.max = Math.max(stats.memory.max, memoryMax);\n stats.storage.min = Math.min(stats.storage.min, storageMin);\n stats.storage.max = Math.max(stats.storage.max, storageMax);\n });\n }\n\n return stats;\n }\n\n function getCategories() {\n categories.map(function (category) {\n for (const family of category.families) {\n for (const inst of family.instanceTypes) {\n if (inst.costFactor == undefined) inst.costFactor = 0;\n }\n }\n category.stats = buildStats(category);\n });\n return $q.when(categories);\n }\n\n const getAllTypesByRegion = function getAllTypesByRegion() {\n return getCategories();\n };\n\n function getAvailableTypesForRegions(locationToInstanceTypesMap, selectedLocations) {\n // This function is only ever called with one location.\n const [location] = selectedLocations;\n return locationToInstanceTypesMap[location];\n }\n\n return {\n getCategories: getCategories,\n getAvailableTypesForRegions: getAvailableTypesForRegions,\n getAllTypesByRegion: getAllTypesByRegion,\n };\n },\n]);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport { module } from 'angular';\nimport ANGULAR_UI_BOOTSTRAP from 'angular-ui-bootstrap';\nimport _ from 'lodash';\n\nimport {\n CloudProviderRegistry,\n ConfirmationModalService,\n InstanceReader,\n InstanceWriter,\n RecentHistoryService,\n} from '@spinnaker/core';\n\nexport const AZURE_INSTANCE_DETAILS_INSTANCE_DETAILS_CONTROLLER = 'spinnaker.azure.instance.detail.controller';\nexport const name = AZURE_INSTANCE_DETAILS_INSTANCE_DETAILS_CONTROLLER; // for backwards compatibility\nmodule(AZURE_INSTANCE_DETAILS_INSTANCE_DETAILS_CONTROLLER, [UIROUTER_ANGULARJS, ANGULAR_UI_BOOTSTRAP]).controller(\n 'azureInstanceDetailsCtrl',\n [\n '$scope',\n '$state',\n '$uibModal',\n 'instance',\n 'app',\n '$q',\n function ($scope, $state, $uibModal, instance, app, $q) {\n // needed for standalone instances\n $scope.detailsTemplateUrl = CloudProviderRegistry.getValue('azure', 'instance.detailsTemplateUrl');\n\n $scope.state = {\n loading: true,\n standalone: app.isStandalone,\n };\n\n function extractHealthMetrics(instance, latest) {\n // do not backfill on standalone instances\n if (app.isStandalone) {\n instance.health = latest.health;\n }\n\n instance.health = instance.health || [];\n const displayableMetrics = instance.health.filter(function (metric) {\n return metric.type !== 'Azure' || metric.state !== 'Unknown';\n });\n // backfill details where applicable\n if (latest.health) {\n displayableMetrics.forEach(function (metric) {\n const detailsMatch = latest.health.filter(function (latestHealth) {\n return latestHealth.type === metric.type;\n });\n if (detailsMatch.length) {\n _.defaults(metric, detailsMatch[0]);\n }\n });\n }\n $scope.healthMetrics = displayableMetrics;\n }\n\n function retrieveInstance() {\n const extraData = {};\n let instanceSummary, loadBalancers, account, region, vpcId;\n if (!app.serverGroups) {\n // standalone instance\n instanceSummary = {};\n loadBalancers = [];\n account = instance.account;\n region = instance.region;\n } else {\n app.serverGroups.data.some(function (serverGroup) {\n return serverGroup.instances.some(function (possibleInstance) {\n if (possibleInstance.id === instance.instanceId) {\n instanceSummary = possibleInstance;\n loadBalancers = serverGroup.loadBalancers;\n account = serverGroup.account;\n region = serverGroup.region;\n vpcId = serverGroup.vpcId;\n extraData.serverGroup = serverGroup.name;\n extraData.vpcId = serverGroup.vpcId;\n return true;\n }\n });\n });\n if (!instanceSummary) {\n // perhaps it is in a server group that is part of another app\n app.loadBalancers.data.some(function (loadBalancer) {\n return loadBalancer.instances.some(function (possibleInstance) {\n if (possibleInstance.id === instance.instanceId) {\n instanceSummary = possibleInstance;\n loadBalancers = [loadBalancer.name];\n account = loadBalancer.account;\n region = loadBalancer.region;\n vpcId = loadBalancer.vpcId;\n return true;\n }\n });\n });\n if (!instanceSummary) {\n // perhaps it is in a disabled server group via a load balancer\n app.loadBalancers.data.some(function (loadBalancer) {\n return loadBalancer.serverGroups.some(function (serverGroup) {\n if (!serverGroup.isDisabled) {\n return false;\n }\n return serverGroup.instances.some(function (possibleInstance) {\n if (possibleInstance.id === instance.instanceId) {\n instanceSummary = possibleInstance;\n loadBalancers = [loadBalancer.name];\n account = loadBalancer.account;\n region = loadBalancer.region;\n vpcId = loadBalancer.vpcId;\n return true;\n }\n });\n });\n });\n }\n }\n }\n\n if (instanceSummary && account && region) {\n extraData.account = account;\n extraData.region = region;\n RecentHistoryService.addExtraDataToLatest('instances', extraData);\n return InstanceReader.getInstanceDetails(account, region, instance.instanceId).then(\n function (details) {\n $scope.state.loading = false;\n extractHealthMetrics(instanceSummary, details);\n $scope.instance = _.defaults(details, instanceSummary);\n $scope.instance.account = account;\n $scope.instance.region = region;\n $scope.instance.vpcId = vpcId;\n $scope.instance.loadBalancers = loadBalancers;\n const discoveryMetric = _.find($scope.healthMetrics, function (metric) {\n return metric.type === 'Discovery';\n });\n if (discoveryMetric && discoveryMetric.vipAddress) {\n const vipList = discoveryMetric.vipAddress;\n $scope.instance.vipAddress = vipList.includes(',') ? vipList.split(',') : [vipList];\n }\n $scope.baseIpAddress = details.publicDnsName || details.privateIpAddress;\n },\n function () {\n // When an instance is first starting up, we may not have the details cached in oort yet, but we still\n // want to let the user see what details we have\n $scope.state.loading = false;\n $state.go('^');\n },\n );\n }\n\n if (!instanceSummary) {\n $scope.instanceIdNotFound = instance.instanceId;\n $scope.state.loading = false;\n }\n\n return $q.when(null);\n }\n\n this.canDeregisterFromLoadBalancer = function () {\n return $scope.instance.health.some(function (health) {\n return health.type === 'LoadBalancer';\n });\n };\n\n this.canRegisterWithLoadBalancer = function () {\n const instance = $scope.instance;\n if (!instance.loadBalancers || !instance.loadBalancers.length) {\n return false;\n }\n const outOfService = instance.health.some(function (health) {\n return health.type === 'LoadBalancer' && health.state === 'OutOfService';\n });\n const hasLoadBalancerHealth = instance.health.some(function (health) {\n return health.type === 'LoadBalancer';\n });\n return outOfService || !hasLoadBalancerHealth;\n };\n\n this.canRegisterWithDiscovery = function () {\n const instance = $scope.instance;\n const discoveryHealth = instance.health.filter(function (health) {\n return health.type === 'Discovery';\n });\n return discoveryHealth.length ? discoveryHealth[0].state === 'OutOfService' : false;\n };\n\n this.terminateInstance = function terminateInstance() {\n const instance = $scope.instance;\n\n const taskMonitor = {\n application: app,\n title: 'Terminating ' + instance.instanceId,\n onTaskComplete: function () {\n if ($state.includes('**.instanceDetails', { instanceId: instance.instanceId })) {\n $state.go('^');\n }\n },\n };\n\n const submitMethod = function () {\n return InstanceWriter.terminateInstance(instance, app);\n };\n\n ConfirmationModalService.confirm({\n header: 'Really terminate ' + instance.instanceId + '?',\n buttonText: 'Terminate ' + instance.instanceId,\n account: instance.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n });\n };\n\n this.terminateInstanceAndShrinkServerGroup = function terminateInstanceAndShrinkServerGroup() {\n const instance = $scope.instance;\n\n const taskMonitor = {\n application: app,\n title: 'Terminating ' + instance.instanceId + ' and shrinking server group',\n onTaskComplete: function () {\n if ($state.includes('**.instanceDetails', { instanceId: instance.instanceId })) {\n $state.go('^');\n }\n },\n };\n\n const submitMethod = function () {\n return InstanceWriter.terminateInstanceAndShrinkServerGroup(instance, app);\n };\n\n ConfirmationModalService.confirm({\n header: 'Really terminate ' + instance.instanceId + ' and shrink ' + instance.serverGroup + '?',\n buttonText: 'Terminate ' + instance.instanceId + ' and shrink ' + instance.serverGroup,\n account: instance.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n });\n };\n\n this.rebootInstance = function rebootInstance() {\n const instance = $scope.instance;\n\n const taskMonitor = {\n application: app,\n title: 'Rebooting ' + instance.instanceId,\n };\n\n const submitMethod = function () {\n return InstanceWriter.rebootInstance(instance, app);\n };\n\n ConfirmationModalService.confirm({\n header: 'Really reboot ' + instance.instanceId + '?',\n buttonText: 'Reboot ' + instance.instanceId,\n account: instance.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n });\n };\n\n this.registerInstanceWithLoadBalancer = function registerInstanceWithLoadBalancer() {\n const instance = $scope.instance;\n const loadBalancerNames = instance.loadBalancers.join(' and ');\n\n const taskMonitor = {\n application: app,\n title: 'Registering ' + instance.instanceId + ' with ' + loadBalancerNames,\n };\n\n const submitMethod = function () {\n return InstanceWriter.registerInstanceWithLoadBalancer(instance, app);\n };\n\n ConfirmationModalService.confirm({\n header: 'Really register ' + instance.instanceId + ' with ' + loadBalancerNames + '?',\n buttonText: 'Register ' + instance.instanceId,\n account: instance.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n });\n };\n\n this.deregisterInstanceFromLoadBalancer = function deregisterInstanceFromLoadBalancer() {\n const instance = $scope.instance;\n const loadBalancerNames = instance.loadBalancers.join(' and ');\n\n const taskMonitor = {\n application: app,\n title: 'Deregistering ' + instance.instanceId + ' from ' + loadBalancerNames,\n };\n\n const submitMethod = function () {\n return InstanceWriter.deregisterInstanceFromLoadBalancer(instance, app);\n };\n\n ConfirmationModalService.confirm({\n header: 'Really deregister ' + instance.instanceId + ' from ' + loadBalancerNames + '?',\n buttonText: 'Deregister ' + instance.instanceId,\n account: instance.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n });\n };\n\n this.enableInstanceInDiscovery = function enableInstanceInDiscovery() {\n const instance = $scope.instance;\n\n const taskMonitor = {\n application: app,\n title: 'Enabling ' + instance.instanceId + ' in discovery',\n };\n\n const submitMethod = function () {\n return InstanceWriter.enableInstanceInDiscovery(instance, app);\n };\n\n ConfirmationModalService.confirm({\n header: 'Really enable ' + instance.instanceId + ' in discovery?',\n buttonText: 'Enable ' + instance.instanceId,\n account: instance.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n });\n };\n\n this.disableInstanceInDiscovery = function disableInstanceInDiscovery() {\n const instance = $scope.instance;\n\n const taskMonitor = {\n application: app,\n title: 'Disabling ' + instance.instanceId + ' in discovery',\n };\n\n const submitMethod = function () {\n return InstanceWriter.disableInstanceInDiscovery(instance, app);\n };\n\n ConfirmationModalService.confirm({\n header: 'Really disable ' + instance.instanceId + ' in discovery?',\n buttonText: 'Disable ' + instance.instanceId,\n account: instance.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n });\n };\n\n this.hasHealthState = function hasHealthState(healthProviderType, state) {\n const instance = $scope.instance;\n return instance.health.some(function (health) {\n return health.type === healthProviderType && health.state === state;\n });\n };\n\n const initialize = app.isStandalone\n ? retrieveInstance()\n : $q.all([app.serverGroups.ready(), app.loadBalancers.ready()]).then(retrieveInstance);\n\n initialize.then(() => {\n // Two things to look out for here:\n // 1. If the retrieveInstance call completes *after* the user has navigated away from the view, there\n // is no point in subscribing to the refresh\n // 2. If this is a standalone instance, there is no application that will refresh\n if (!$scope.$$destroyed && !app.isStandalone) {\n app.serverGroups.onRefresh($scope, retrieveInstance);\n }\n });\n\n $scope.account = instance.account;\n },\n ],\n);\n","import React from 'react';\nimport { Button, Modal } from 'react-bootstrap';\n\nimport type { ILoadBalancerModalProps } from '@spinnaker/core';\nimport { CloudProviderRegistry, ModalClose, ModalInjector, noop, ReactModal } from '@spinnaker/core';\n\nimport type { IAzureLoadBalancer } from '../../utility';\nimport { AzureLoadBalancerTypes } from '../../utility';\n\nexport interface IAzureLoadBalancerChoiceModalState {\n choices: IAzureLoadBalancer[];\n selectedChoice: IAzureLoadBalancer;\n}\n\nexport class AzureLoadBalancerChoiceModal extends React.Component<\n ILoadBalancerModalProps,\n IAzureLoadBalancerChoiceModalState\n> {\n public static defaultProps: Partial<ILoadBalancerModalProps> = {\n closeModal: noop,\n dismissModal: noop,\n };\n\n public static show(props: ILoadBalancerModalProps): Promise<void> {\n return ReactModal.show(AzureLoadBalancerChoiceModal, {\n ...props,\n className: 'create-pipeline-modal-overflow-visible',\n });\n }\n\n constructor(props: ILoadBalancerModalProps) {\n super(props);\n this.state = {\n choices: AzureLoadBalancerTypes,\n selectedChoice: AzureLoadBalancerTypes[0],\n };\n }\n\n public choiceSelected(choice: IAzureLoadBalancer): void {\n this.setState({ selectedChoice: choice });\n }\n\n private choose = (): void => {\n this.close();\n const provider: any = CloudProviderRegistry.getValue('azure', 'loadBalancer');\n ModalInjector.modalService\n .open({\n templateUrl: provider.createLoadBalancerTemplateUrl,\n windowClass: 'modal-z-index',\n controller: `${provider.createLoadBalancerController} as ctrl`,\n size: 'lg',\n resolve: {\n application: () => this.props.app,\n loadBalancer: (): any => null,\n isNew: () => true,\n forPipelineConfig: () => false,\n loadBalancerType: () => this.state.selectedChoice,\n },\n })\n .result.catch(() => {});\n };\n\n public close = (reason?: any): void => {\n this.props.dismissModal(reason);\n };\n\n public render() {\n const { choices, selectedChoice } = this.state;\n\n return (\n <>\n <ModalClose dismiss={this.close} />\n <Modal.Header>\n <Modal.Title>Select Type of Load Balancer</Modal.Title>\n </Modal.Header>\n <Modal.Body>\n <div className=\"modal-body\">\n <div className=\"card-choices\">\n {choices.map((choice) => (\n <div\n key={choice.type}\n className={`card ${selectedChoice === choice ? 'active' : ''}`}\n onClick={() => this.choiceSelected(choice)}\n >\n <h3 className=\"load-balancer-label\">{choice.type}</h3>\n <div>{choice.description}</div>\n </div>\n ))}\n </div>\n <div className=\"load-balancer-description\" />\n </div>\n </Modal.Body>\n <Modal.Footer>\n <Button onClick={this.choose}>\n Configure Load Balancer <span className=\"glyphicon glyphicon-chevron-right\" />\n </Button>\n </Modal.Footer>\n </>\n );\n }\n}\n","import type { IProviderSettings } from '@spinnaker/core';\nimport { SETTINGS } from '@spinnaker/core';\n\nexport interface IAzureProviderSettings extends IProviderSettings {\n defaults: {\n account?: string;\n region?: string;\n };\n}\n\nexport const AzureProviderSettings: IAzureProviderSettings = (SETTINGS.providers.azure as IAzureProviderSettings) || {\n defaults: {},\n};\nif (AzureProviderSettings) {\n AzureProviderSettings.resetToOriginal = SETTINGS.resetProvider('azure');\n}\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nimport { AzureProviderSettings } from '../azure.settings';\n\nexport const AZURE_LOADBALANCER_LOADBALANCER_TRANSFORMER = 'spinnaker.azure.loadBalancer.transformer';\nexport const name = AZURE_LOADBALANCER_LOADBALANCER_TRANSFORMER; // for backwards compatibility\nmodule(AZURE_LOADBALANCER_LOADBALANCER_TRANSFORMER, []).factory('azureLoadBalancerTransformer', [\n '$q',\n function ($q) {\n function normalizeLoadBalancer(loadBalancer) {\n loadBalancer.serverGroups.forEach(function (serverGroup) {\n serverGroup.account = loadBalancer.account;\n serverGroup.region = loadBalancer.region;\n\n if (serverGroup.detachedInstances) {\n serverGroup.detachedInstances = serverGroup.detachedInstances.map(function (instanceId) {\n return { id: instanceId };\n });\n serverGroup.instances = serverGroup.instances.concat(serverGroup.detachedInstances);\n } else {\n serverGroup.detachedInstances = [];\n }\n });\n const activeServerGroups = _.filter(loadBalancer.serverGroups, { isDisabled: false });\n loadBalancer.provider = loadBalancer.type;\n loadBalancer.instances = _.chain(activeServerGroups).map('instances').flatten().value();\n loadBalancer.detachedInstances = _.chain(activeServerGroups).map('detachedInstances').flatten().value();\n return $q.resolve(loadBalancer);\n }\n\n function convertLoadBalancerForEditing(loadBalancer) {\n const toEdit = {\n region: loadBalancer.region,\n credentials: loadBalancer.account,\n name: loadBalancer.name,\n stack: loadBalancer.stack,\n detail: loadBalancer.detail,\n vnet: loadBalancer.vnet,\n subnet: loadBalancer.subnet,\n probes: [],\n loadBalancingRules: [],\n };\n\n if (loadBalancer.elb) {\n const elb = loadBalancer.elb;\n\n toEdit.securityGroups = elb.securityGroups;\n toEdit.vnet = elb.vnet;\n\n if (elb.loadBalancingRules) {\n toEdit.loadBalancingRules = elb.loadBalancingRules;\n }\n\n toEdit.probes = elb.probes;\n if (elb.dnsName && elb.dnsName !== 'dns-not-found') {\n toEdit.dnsName = elb.dnsName.split('.')[0];\n }\n }\n return toEdit;\n }\n\n function constructNewLoadBalancerTemplate(application) {\n const defaultCredentials = application.defaultCredentials.azure || AzureProviderSettings.defaults.account;\n const defaultRegion = application.defaultRegions.azure || AzureProviderSettings.defaults.region;\n return {\n stack: '',\n detail: 'frontend',\n credentials: defaultCredentials,\n region: defaultRegion,\n cloudProvider: 'azure',\n vnet: null,\n subnet: null,\n probes: [\n {\n probeName: '',\n probeProtocol: 'HTTP',\n probePort: '80',\n probePath: '/',\n probeInterval: 30,\n unhealthyThreshold: 8,\n timeout: 120,\n },\n ],\n securityGroups: [],\n loadBalancingRules: [\n {\n ruleName: '',\n protocol: 'HTTP',\n externalPort: 80,\n backendPort: 80,\n probeName: '',\n persistence: 'None',\n idleTimeout: 4,\n },\n ],\n sku: 'Standard_v2',\n };\n }\n\n return {\n normalizeLoadBalancer: normalizeLoadBalancer,\n convertLoadBalancerForEditing: convertLoadBalancerForEditing,\n constructNewLoadBalancerTemplate: constructNewLoadBalancerTemplate,\n };\n },\n]);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nimport { AccountService, LoadBalancerWriter, NameUtils, NetworkReader, TaskMonitor } from '@spinnaker/core';\n\nimport { AZURE_LOADBALANCER_LOADBALANCER_TRANSFORMER } from '../loadBalancer.transformer';\n\nexport const AZURE_LOADBALANCER_CONFIGURE_CREATELOADBALANCER_CONTROLLER =\n 'spinnaker.azure.loadBalancer.create.controller';\nexport const name = AZURE_LOADBALANCER_CONFIGURE_CREATELOADBALANCER_CONTROLLER; // for backwards compatibility\nmodule(AZURE_LOADBALANCER_CONFIGURE_CREATELOADBALANCER_CONTROLLER, [\n UIROUTER_ANGULARJS,\n AZURE_LOADBALANCER_LOADBALANCER_TRANSFORMER,\n]).controller('azureCreateLoadBalancerCtrl', [\n '$scope',\n '$uibModalInstance',\n '$state',\n 'azureLoadBalancerTransformer',\n 'application',\n 'loadBalancer',\n 'isNew',\n 'loadBalancerType',\n function (\n $scope,\n $uibModalInstance,\n $state,\n azureLoadBalancerTransformer,\n application,\n loadBalancer,\n isNew,\n loadBalancerType,\n ) {\n const ctrl = this;\n\n $scope.regions = [];\n\n $scope.pages = {\n location: require('./createLoadBalancerProperties.html'),\n listeners: require('./listeners.html'),\n healthCheck: require('./healthCheck.html'),\n advancedSettings: require('./advancedSettings.html'),\n };\n\n $scope.isNew = isNew;\n $scope.loadBalancerType = loadBalancerType.type;\n $scope.isALB = loadBalancerType.type === 'Azure Load Balancer';\n\n $scope.state = {\n accountsLoaded: false,\n submitting: false,\n };\n\n $scope.validSkus = ['Standard_v2', 'Standard_Small'];\n\n function onApplicationRefresh() {\n // If the user has already closed the modal, do not navigate to the new details view\n if ($scope.$$destroyed) {\n return;\n }\n $uibModalInstance.close();\n const newStateParams = {\n name: $scope.loadBalancer.name,\n accountId: $scope.loadBalancer.credentials,\n region: $scope.loadBalancer.region,\n provider: 'azure',\n };\n\n if (!$state.includes('**.loadBalancerDetails')) {\n $state.go('.loadBalancerDetails', newStateParams);\n } else {\n $state.go('^.loadBalancerDetails', newStateParams);\n }\n }\n\n function onTaskComplete() {\n application.loadBalancers.refresh();\n application.loadBalancers.onNextRefresh($scope, onApplicationRefresh);\n }\n\n $scope.taskMonitor = new TaskMonitor({\n application: application,\n title: (isNew ? 'Creating ' : 'Updating ') + 'your load balancer',\n modalInstance: $uibModalInstance,\n onTaskComplete: onTaskComplete,\n });\n\n function initializeCreateMode() {\n AccountService.listAccounts('azure').then(function (accounts) {\n $scope.accounts = accounts;\n $scope.state.accountsLoaded = true;\n ctrl.accountUpdated();\n });\n }\n\n function initializeController() {\n if (loadBalancer) {\n $scope.loadBalancer = azureLoadBalancerTransformer.convertLoadBalancerForEditing(loadBalancer);\n if (isNew) {\n const nameParts = NameUtils.parseLoadBalancerName($scope.loadBalancer.name);\n $scope.loadBalancer.stack = nameParts.stack;\n $scope.loadBalancer.detail = nameParts.freeFormDetails;\n delete $scope.loadBalancer.name;\n }\n } else {\n $scope.loadBalancer = azureLoadBalancerTransformer.constructNewLoadBalancerTemplate(application);\n }\n if (isNew) {\n updateLoadBalancerNames();\n initializeCreateMode();\n }\n }\n\n function updateLoadBalancerNames() {\n const account = $scope.loadBalancer.credentials;\n const region = $scope.loadBalancer.region;\n\n const accountLoadBalancersByRegion = {};\n application\n .getDataSource('loadBalancers')\n .refresh(true)\n .then(() => {\n application.getDataSource('loadBalancers').data.forEach((loadBalancer) => {\n if (loadBalancer.account === account) {\n accountLoadBalancersByRegion[loadBalancer.region] =\n accountLoadBalancersByRegion[loadBalancer.region] || [];\n accountLoadBalancersByRegion[loadBalancer.region].push(loadBalancer.name);\n }\n });\n\n $scope.existingLoadBalancerNames = accountLoadBalancersByRegion[region] || [];\n });\n }\n\n initializeController();\n\n this.requiresHealthCheckPath = function () {\n return (\n $scope.loadBalancer.probes[0].probeProtocol && $scope.loadBalancer.probes[0].probeProtocol.indexOf('HTTP') === 0\n );\n };\n\n this.updateName = function () {\n $scope.loadBalancer.name = this.getName();\n };\n\n this.getName = function () {\n const elb = $scope.loadBalancer;\n const elbName = [application.name, elb.stack || '', elb.detail || ''].join('-');\n return _.trimEnd(elbName, '-');\n };\n\n this.accountUpdated = function () {\n AccountService.getRegionsForAccount($scope.loadBalancer.credentials).then(function (regions) {\n $scope.regions = regions;\n ctrl.regionUpdated();\n });\n };\n\n this.regionUpdated = function () {\n updateLoadBalancerNames();\n ctrl.updateName();\n ctrl.vnetUpdated();\n };\n\n this.vnetUpdated = function () {\n const account = $scope.loadBalancer.credentials;\n const region = $scope.loadBalancer.region;\n $scope.loadBalancer.selectedVnet = null;\n $scope.loadBalancer.vnet = null;\n $scope.loadBalancer.vnetResourceGroup = null;\n ctrl.selectedVnets = [];\n\n NetworkReader.listNetworks().then(function (vnets) {\n if (vnets.azure) {\n vnets.azure.forEach((vnet) => {\n if (vnet.account === account && vnet.region === region) {\n ctrl.selectedVnets.push(vnet);\n }\n });\n }\n });\n\n ctrl.subnetUpdated();\n };\n\n this.subnetUpdated = function () {\n $scope.loadBalancer.selectedSubnet = null;\n $scope.loadBalancer.subnet = null;\n ctrl.selectedSubnets = [];\n };\n\n this.selectedVnetChanged = function (item) {\n $scope.loadBalancer.vnet = item.name;\n $scope.loadBalancer.vnetResourceGroup = item.resourceGroup;\n $scope.loadBalancer.selectedSubnet = null;\n $scope.loadBalancer.subnet = null;\n ctrl.selectedSubnets = [];\n if (item.subnets) {\n item.subnets.map(function (subnet) {\n let addSubnet = true;\n if (subnet.devices) {\n subnet.devices.map(function (device) {\n if (device && device.type !== 'applicationGateways') {\n addSubnet = false;\n }\n });\n }\n if (addSubnet) {\n ctrl.selectedSubnets.push(subnet);\n }\n });\n }\n };\n\n this.removeListener = function (index) {\n $scope.loadBalancer.loadBalancingRules.splice(index, 1);\n };\n\n this.addListener = function () {\n $scope.loadBalancer.loadBalancingRules.push({ protocol: 'HTTP' });\n };\n\n this.submit = function () {\n const descriptor = isNew ? 'Create' : 'Update';\n\n $scope.taskMonitor.submit(function () {\n const params = {\n cloudProvider: 'azure',\n appName: application.name,\n clusterName: $scope.loadBalancer.clusterName,\n resourceGroupName: $scope.loadBalancer.clusterName,\n loadBalancerName: $scope.loadBalancer.name,\n };\n\n if ($scope.loadBalancer.selectedVnet) {\n $scope.loadBalancer.vnet = $scope.loadBalancer.selectedVnet.name;\n $scope.loadBalancer.vnetResourceGroup = $scope.loadBalancer.selectedVnet.resourceGroup;\n }\n\n if ($scope.loadBalancer.selectedSubnet) {\n $scope.loadBalancer.subnet = $scope.loadBalancer.selectedSubnet.name;\n }\n\n const name = $scope.loadBalancer.clusterName || $scope.loadBalancer.name;\n const probeName = name + '-probe';\n const ruleNameBase = name + '-rule';\n $scope.loadBalancer.type = 'upsertLoadBalancer';\n $scope.loadBalancer.loadBalancerType = $scope.loadBalancerType;\n if (!$scope.loadBalancer.vnet && !$scope.loadBalancer.subnetType) {\n $scope.loadBalancer.securityGroups = null;\n }\n\n $scope.loadBalancer.probes[0].probeName = probeName;\n\n $scope.loadBalancer.loadBalancingRules.forEach((rule, index) => {\n rule.ruleName = ruleNameBase + index;\n rule.probeName = probeName;\n });\n\n if ($scope.loadBalancer.probes[0].probeProtocol === 'TCP') {\n $scope.loadBalancer.probes[0].probePath = undefined;\n }\n\n return LoadBalancerWriter.upsertLoadBalancer($scope.loadBalancer, application, descriptor, params);\n });\n };\n\n this.cancel = function () {\n $uibModalInstance.dismiss();\n };\n },\n]);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport * as angular from 'angular';\nimport ANGULAR_UI_BOOTSTRAP from 'angular-ui-bootstrap';\nimport _ from 'lodash';\n\nimport {\n ConfirmationModalService,\n FirewallLabels,\n LOAD_BALANCER_READ_SERVICE,\n LoadBalancerWriter,\n SECURITY_GROUP_READER,\n} from '@spinnaker/core';\n\nexport const AZURE_LOADBALANCER_DETAILS_LOADBALANCERDETAIL_CONTROLLER =\n 'spinnaker.azure.loadBalancer.details.controller';\nexport const name = AZURE_LOADBALANCER_DETAILS_LOADBALANCERDETAIL_CONTROLLER; // for backwards compatibility\nangular\n .module(AZURE_LOADBALANCER_DETAILS_LOADBALANCERDETAIL_CONTROLLER, [\n ANGULAR_UI_BOOTSTRAP,\n UIROUTER_ANGULARJS,\n SECURITY_GROUP_READER,\n LOAD_BALANCER_READ_SERVICE,\n ])\n .controller('azureLoadBalancerDetailsCtrl', [\n '$scope',\n '$state',\n '$exceptionHandler',\n '$uibModal',\n 'loadBalancer',\n 'app',\n 'securityGroupReader',\n 'loadBalancerReader',\n '$q',\n function (\n $scope,\n $state,\n $exceptionHandler,\n $uibModal,\n loadBalancer,\n app,\n securityGroupReader,\n loadBalancerReader,\n $q,\n ) {\n $scope.state = {\n loading: true,\n };\n\n $scope.firewallsLabel = FirewallLabels.get('Firewalls');\n\n function extractLoadBalancer() {\n $scope.loadBalancer = app.loadBalancers.data.filter(function (test) {\n return (\n test.name === loadBalancer.name &&\n test.region === loadBalancer.region &&\n test.account === loadBalancer.accountId\n );\n })[0];\n\n if ($scope.loadBalancer) {\n const detailsLoader = loadBalancerReader.getLoadBalancerDetails(\n $scope.loadBalancer.provider,\n loadBalancer.accountId,\n loadBalancer.region,\n loadBalancer.name,\n );\n\n return detailsLoader.then(function (details) {\n $scope.state.loading = false;\n const securityGroups = [];\n\n const filtered = details.filter(function (test) {\n return test.name === loadBalancer.name;\n });\n\n if (filtered.length) {\n $scope.loadBalancer.elb = filtered[0];\n\n $scope.loadBalancer.account = loadBalancer.accountId;\n\n if ($scope.loadBalancer.elb.securityGroups) {\n $scope.loadBalancer.elb.securityGroups.forEach(function (securityGroupId) {\n const match = securityGroupReader.getApplicationSecurityGroup(\n app,\n loadBalancer.accountId,\n loadBalancer.region,\n securityGroupId,\n );\n if (match) {\n securityGroups.push(match);\n }\n });\n $scope.securityGroups = _.sortBy(securityGroups, 'name');\n }\n\n if ($scope.loadBalancer.loadBalancerType && $scope.loadBalancer.loadBalancerType.includes('_')) {\n const type = $scope.loadBalancer.loadBalancerType;\n $scope.loadBalancer.loadBalancerType = type\n .split('_')\n .map((s) => {\n const ss = s.toLowerCase();\n return ss.substring(0, 1).toUpperCase() + ss.substring(1);\n })\n .join(' ');\n }\n }\n });\n }\n if (!$scope.loadBalancer) {\n $state.go('^');\n }\n\n return $q.when(null);\n }\n\n app\n .ready()\n .then(extractLoadBalancer)\n .then(() => {\n // If the user navigates away from the view before the initial extractLoadBalancer call completes,\n // do not bother subscribing to the refresh\n if (!$scope.$$destroyed) {\n app.onRefresh($scope, extractLoadBalancer);\n }\n });\n\n this.editLoadBalancer = function editLoadBalancer() {\n $uibModal.open({\n templateUrl: require('../configure/editLoadBalancer.html'),\n controller: 'azureCreateLoadBalancerCtrl as ctrl',\n size: 'lg',\n resolve: {\n application: function () {\n return app;\n },\n loadBalancer: function () {\n return angular.copy($scope.loadBalancer);\n },\n isNew: function () {\n return false;\n },\n loadBalancerType: function () {\n return { type: $scope.loadBalancer.loadBalancerType };\n },\n },\n });\n };\n\n this.deleteLoadBalancer = function deleteLoadBalancer() {\n if ($scope.loadBalancer.instances && $scope.loadBalancer.instances.length) {\n return;\n }\n\n const taskMonitor = {\n application: app,\n title: 'Deleting ' + loadBalancer.name,\n };\n\n const command = {\n cloudProvider: 'azure',\n loadBalancerName: $scope.loadBalancer.name,\n loadBalancerType: $scope.loadBalancer.loadBalancerType,\n credentials: $scope.loadBalancer.account,\n region: loadBalancer.region,\n appName: app.name,\n };\n\n const submitMethod = () => LoadBalancerWriter.deleteLoadBalancer(command, app);\n\n ConfirmationModalService.confirm({\n header: 'Really delete ' + loadBalancer.name + '?',\n buttonText: 'Delete ' + loadBalancer.name,\n account: loadBalancer.accountId,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n });\n };\n },\n ]);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport { module } from 'angular';\n\nimport { SETTINGS } from '@spinnaker/core';\n\nexport const AZURE_PIPELINE_STAGES_BAKE_BAKEEXECUTIONDETAILS_CONTROLLER =\n 'spinnaker.azure.pipeline.stage.bake.executionDetails.controller';\nexport const name = AZURE_PIPELINE_STAGES_BAKE_BAKEEXECUTIONDETAILS_CONTROLLER; // for backwards compatibility\nmodule(AZURE_PIPELINE_STAGES_BAKE_BAKEEXECUTIONDETAILS_CONTROLLER, [UIROUTER_ANGULARJS]).controller(\n 'azureBakeExecutionDetailsCtrl',\n [\n '$scope',\n '$stateParams',\n 'executionDetailsSectionService',\n '$interpolate',\n function ($scope, $stateParams, executionDetailsSectionService, $interpolate) {\n $scope.configSections = ['bakeConfig', 'taskStatus'];\n\n const initialized = () => {\n $scope.detailsSection = $stateParams.details;\n $scope.provider = $scope.stage.context.cloudProviderType || 'azure';\n $scope.roscoMode =\n SETTINGS.feature.roscoMode ||\n (typeof SETTINGS.feature.roscoSelector === 'function' &&\n SETTINGS.feature.roscoSelector($scope.stage.context));\n $scope.bakeryDetailUrl = $interpolate(\n $scope.roscoMode && SETTINGS.roscoDetailUrl ? SETTINGS.roscoDetailUrl : SETTINGS.bakeryDetailUrl,\n );\n };\n\n const initialize = () => executionDetailsSectionService.synchronizeSection($scope.configSections, initialized);\n\n initialize();\n\n $scope.$on('$stateChangeSuccess', initialize);\n },\n ],\n);\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nexport const AZURE_SERVERGROUP_SERVERGROUP_TRANSFORMER = 'spinnaker.azure.serverGroup.transformer';\nexport const name = AZURE_SERVERGROUP_SERVERGROUP_TRANSFORMER; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_SERVERGROUP_TRANSFORMER, []).factory('azureServerGroupTransformer', function () {\n function normalizeServerGroup(serverGroup) {\n return serverGroup;\n }\n\n function parseCustomScriptsSettings(command, configuration) {\n /*\n At the first time this wizard pops up, the type of command.customScriptsSettings.fileUris is String. As for the following\n occurrences of its pop up with this field unchanged, its type becomes an array. So here differentiate the two scenarios\n to assign the correct value to model.\n */\n if (Array.isArray(command.customScriptsSettings.fileUris)) {\n configuration.customScriptsSettings.fileUris = command.customScriptsSettings.fileUris;\n } else {\n const fileUrisTemp = command.customScriptsSettings.fileUris;\n if (fileUrisTemp.includes(',')) {\n configuration.customScriptsSettings.fileUris = fileUrisTemp.split(',');\n } else if (fileUrisTemp.includes(';')) {\n configuration.customScriptsSettings.fileUris = fileUrisTemp.split(';');\n } else {\n configuration.customScriptsSettings.fileUris = [fileUrisTemp];\n }\n\n configuration.customScriptsSettings.fileUris.forEach(function (v, index) {\n configuration.customScriptsSettings.fileUris[index] = v.trim();\n });\n }\n }\n\n function convertServerGroupCommandToDeployConfiguration(command) {\n let tempImage;\n\n if (command.viewState.mode === 'editPipeline' || command.viewState.mode === 'createPipeline') {\n tempImage = {\n imageName: '',\n isCustom: 'true',\n publisher: '',\n offer: '',\n sku: '',\n version: '',\n region: command.region,\n uri: '',\n ostype: '',\n };\n } else {\n tempImage = command.selectedImage;\n }\n\n const configuration = {\n name: command.application,\n cloudProvider: command.selectedProvider,\n application: command.application,\n stack: command.stack,\n strategy: command.strategy,\n rollback: {\n onFailure: command.rollback ? command.rollback.onFailure : null,\n },\n scaleDown: command.scaleDown,\n maxRemainingAsgs: command.maxRemainingAsgs,\n delayBeforeDisableSec: command.delayBeforeDisableSec,\n delayBeforeScaleDownSec: command.delayBeforeScaleDownSec,\n allowDeleteActive: command.strategy === 'redblack' ? true : null,\n allowScaleDownActive: command.strategy === 'redblack' ? true : null,\n detail: command.freeFormDetails,\n freeFormDetails: command.freeFormDetails,\n healthSettings: command.healthSettings,\n image: command.image,\n account: command.credentials,\n selectedProvider: 'azure',\n vnet: command.vnet,\n vnetResourceGroup: command.selectedVnet.resourceGroup,\n subnet: command.subnet,\n useSourceCapacity: false,\n capacity: {\n min: command.sku.capacity,\n max: command.sku.capacity,\n },\n credentials: command.credentials,\n region: command.region,\n securityGroupName: command.securityGroupName,\n loadBalancerName: command.loadBalancerName,\n loadBalancerType: command.loadBalancerType,\n user: '[anonymous]',\n upgradePolicy: 'Manual',\n type: 'createServerGroup',\n sku: {\n name: 'Standard_DS1_v2',\n tier: 'Standard',\n capacity: command.sku.capacity,\n },\n instanceTags: command.instanceTags,\n dataDisks: command.dataDisks,\n userAssignedIdentities: command.userAssignedIdentities,\n viewState: command.viewState,\n osConfig: {\n customData: command.osConfig ? command.osConfig.customData : null,\n },\n customScriptsSettings: {\n fileUris: null,\n commandToExecute: '',\n },\n zonesEnabled: command.zonesEnabled,\n zones: command.zonesEnabled ? command.zones : [],\n enableInboundNAT: command.enableInboundNAT,\n };\n\n if (command.image == null || command.image.isCustom == false) {\n configuration.image = tempImage;\n }\n\n if (typeof command.stack !== 'undefined') {\n configuration.name = configuration.name + '-' + command.stack;\n }\n if (typeof command.freeFormDetails !== 'undefined') {\n configuration.name = configuration.name + '-' + command.freeFormDetails;\n }\n\n if (typeof command.customScriptsSettings !== 'undefined') {\n configuration.customScriptsSettings.commandToExecute = command.customScriptsSettings.commandToExecute;\n if (!_.isEmpty(command.customScriptsSettings.fileUris)) {\n parseCustomScriptsSettings(command, configuration);\n }\n }\n\n if (command.instanceType) {\n const vmsku = command.instanceType;\n configuration.instanceType = command.instanceType;\n configuration.sku.name = vmsku;\n configuration.sku.tier = vmsku.substring(0, vmsku.indexOf('_'));\n }\n\n // Default to an empty list of health provider names for now.\n configuration.interestingHealthProviderNames = [];\n\n return configuration;\n }\n\n return {\n convertServerGroupCommandToDeployConfiguration: convertServerGroupCommandToDeployConfiguration,\n normalizeServerGroup: normalizeServerGroup,\n parseCustomScriptsSettings: parseCustomScriptsSettings,\n };\n});\n","'use strict';\n\nimport * as angular from 'angular';\nimport _ from 'lodash';\n\nimport { NameUtils } from '@spinnaker/core';\nimport { AZURE_IMAGE_IMAGE_READER } from '../../image/image.reader';\nimport { AZURE_SERVERGROUP_SERVERGROUP_TRANSFORMER } from '../serverGroup.transformer';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE =\n 'spinnaker.azure.serverGroupCommandBuilder.service';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE; // for backwards compatibility\nangular\n .module(AZURE_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE, [\n AZURE_IMAGE_IMAGE_READER,\n AZURE_SERVERGROUP_SERVERGROUP_TRANSFORMER,\n ])\n .factory('azureServerGroupCommandBuilder', [\n '$q',\n 'azureImageReader',\n 'azureServerGroupTransformer',\n function ($q, azureImageReader, azureServerGroupTransformer) {\n function buildNewServerGroupCommand(application, defaults) {\n defaults = defaults || {};\n\n const defaultCredentials = defaults.account || application.defaultCredentials.azure;\n const defaultRegion = defaults.region || application.defaultRegions.azure;\n\n return azureImageReader.findImages({ provider: 'azure' }).then(function (images) {\n return {\n application: application.name,\n credentials: defaultCredentials,\n region: defaultRegion,\n images,\n loadBalancers: [],\n selectedVnetSubnets: [],\n strategy: '',\n sku: {\n capacity: 1,\n },\n zonesEnabled: false,\n zones: [],\n instanceTags: {},\n dataDisks: [],\n selectedProvider: 'azure',\n viewState: {\n instanceProfile: 'custom',\n allImageSelection: null,\n useAllImageSelection: false,\n useSimpleCapacity: true,\n usePreferredZones: true,\n mode: defaults.mode || 'create',\n disableStrategySelection: true,\n loadBalancersConfigured: false,\n networkSettingsConfigured: false,\n securityGroupsConfigured: false,\n },\n enableInboundNAT: false,\n };\n });\n }\n\n // Only used to prepare view requiring template selecting\n function buildNewServerGroupCommandForPipeline() {\n return $q.when({\n viewState: {\n requiresTemplateSelection: true,\n },\n });\n }\n\n function buildServerGroupCommandFromExisting(application, serverGroup, mode) {\n mode = mode || 'clone';\n\n const serverGroupName = NameUtils.parseServerGroupName(serverGroup.name);\n\n const command = {\n application: application.name,\n strategy: '',\n stack: serverGroupName.stack,\n freeFormDetails: serverGroupName.freeFormDetails,\n credentials: serverGroup.account,\n loadBalancers: serverGroup.loadBalancers,\n selectedSubnets: serverGroup.selectedVnetSubnets,\n selectedVnet: serverGroup.selectedVnet,\n securityGroups: serverGroup.securityGroups,\n loadBalancerName: serverGroup.loadBalancerName,\n loadBalancerType: serverGroup.loadBalancerType,\n securityGroupName: serverGroup.securityGroupName,\n region: serverGroup.region,\n vnet: serverGroup.vnet,\n vnetResourceGroup: serverGroup.vnetResourceGroup,\n subnet: serverGroup.subnet,\n zones: serverGroup.zones,\n zonesEnabled: serverGroup.zones && serverGroup.zones.length > 0,\n instanceTags: {},\n dataDisks: serverGroup.dataDisks,\n sku: serverGroup.sku,\n capacity: {\n min: serverGroup.capacity.min,\n max: serverGroup.capacity.max,\n desired: serverGroup.capacity.desired,\n },\n tags: [],\n instanceType: serverGroup.sku.name,\n selectedProvider: 'azure',\n source: {\n account: serverGroup.account,\n region: serverGroup.region,\n serverGroupName: serverGroup.name,\n asgName: serverGroup.name,\n },\n viewState: {\n allImageSelection: null,\n useAllImageSelection: false,\n useSimpleCapacity: true,\n usePreferredZones: false,\n listImplicitSecurityGroups: false,\n mode: mode,\n disableStrategySelection: true,\n },\n enableInboundNAT: serverGroup.enableInboundNAT,\n };\n\n if (typeof serverGroup.customScriptsSettings !== 'undefined') {\n command.customScriptsSettings = {};\n command.customScriptsSettings.commandToExecute = serverGroup.customScriptsSettings.commandToExecute;\n if (!_.isEmpty(serverGroup.customScriptsSettings.fileUris)) {\n azureServerGroupTransformer.parseCustomScriptsSettings(serverGroup, command);\n }\n }\n\n return $q.when(command);\n }\n\n function buildServerGroupCommandFromPipeline(application, originalCluster) {\n const pipelineCluster = _.cloneDeep(originalCluster);\n const region = pipelineCluster.region;\n\n const commandOptions = { account: pipelineCluster.account, region: region };\n return buildNewServerGroupCommand(application, commandOptions).then(function (command) {\n const viewState = {\n disableImageSelection: true,\n useSimpleCapacity: true,\n mode: 'editPipeline',\n submitButtonLabel: 'Done',\n instanceProfile: originalCluster.viewState.instanceProfile,\n instanceTypeDetails: originalCluster.viewState.instanceTypeDetails,\n };\n\n const viewOverrides = {\n region: region,\n credentials: pipelineCluster.account,\n viewState: viewState,\n };\n if (originalCluster.viewState.instanceTypeDetails) {\n viewOverrides.instanceType = originalCluster.viewState.instanceTypeDetails.name;\n }\n\n pipelineCluster.strategy = pipelineCluster.strategy || '';\n\n const extendedCommand = angular.extend({}, command, pipelineCluster, viewOverrides);\n\n return extendedCommand;\n });\n }\n\n return {\n buildNewServerGroupCommand: buildNewServerGroupCommand,\n buildNewServerGroupCommandForPipeline: buildNewServerGroupCommandForPipeline,\n buildServerGroupCommandFromExisting: buildServerGroupCommandFromExisting,\n buildServerGroupCommandFromPipeline: buildServerGroupCommandFromPipeline,\n };\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nimport {\n AccountService,\n AuthenticationService,\n BakeExecutionLabel,\n BakeryReader,\n PipelineTemplates,\n Registry,\n SETTINGS,\n} from '@spinnaker/core';\n\nimport { AZURE_PIPELINE_STAGES_BAKE_BAKEEXECUTIONDETAILS_CONTROLLER } from './bakeExecutionDetails.controller';\nimport { AZURE_IMAGE_IMAGE_READER } from '../../../image/image.reader';\nimport { AZURE_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE } from './../../../serverGroup/configure/serverGroupCommandBuilder.service';\n\nexport const AZURE_PIPELINE_STAGES_BAKE_AZUREBAKESTAGE = 'spinnaker.azure.pipeline.stage.bakeStage';\nexport const name = AZURE_PIPELINE_STAGES_BAKE_AZUREBAKESTAGE; // for backwards compatibility\nmodule(AZURE_PIPELINE_STAGES_BAKE_AZUREBAKESTAGE, [\n AZURE_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE,\n AZURE_IMAGE_IMAGE_READER,\n AZURE_PIPELINE_STAGES_BAKE_BAKEEXECUTIONDETAILS_CONTROLLER,\n])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'bake',\n cloudProvider: 'azure',\n label: 'Bake',\n description: 'Bakes an image',\n templateUrl: require('./bakeStage.html'),\n executionDetailsUrl: require('./bakeExecutionDetails.html'),\n executionLabelComponent: BakeExecutionLabel,\n extraLabelLines: (stage) => {\n return stage.masterStage.context.allPreviouslyBaked || stage.masterStage.context.somePreviouslyBaked ? 1 : 0;\n },\n supportsCustomTimeout: true,\n validators: [\n { type: 'requiredField', fieldName: 'package' },\n { type: 'requiredField', fieldName: 'regions' },\n {\n type: 'upstreamVersionProvided',\n checkParentTriggers: true,\n getMessage: (labels) =>\n 'Bake stages should always have a stage or trigger preceding them that provides version information: ' +\n '<ul>' +\n labels.map((label) => `<li>${label}</li>`).join('') +\n '</ul>' +\n 'Otherwise, Spinnaker will bake and deploy the most-recently built package.',\n },\n ],\n restartable: true,\n });\n })\n .controller('azureBakeStageCtrl', [\n '$scope',\n '$q',\n 'azureImageReader',\n '$uibModal',\n function ($scope, $q, azureImageReader, $uibModal) {\n $scope.stage.extendedAttributes = $scope.stage.extendedAttributes || {};\n $scope.stage.regions = $scope.stage.regions || [];\n\n if (!$scope.stage.user) {\n $scope.stage.user = AuthenticationService.getAuthenticatedUser().name;\n }\n\n $scope.viewState = {\n loading: true,\n };\n\n function initialize() {\n $q.all([\n AccountService.getCredentialsKeyedByAccount('azure'),\n BakeryReader.getRegions('azure'),\n BakeryReader.getBaseOsOptions('azure'),\n BakeryReader.getBaseLabelOptions(),\n ]).then(function ([credentialsKeyedByAccount, regions, baseOsOptions, baseLabelOptions]) {\n $scope.accounts = Object.keys(credentialsKeyedByAccount);\n $scope.regions = regions;\n if ($scope.regions.length === 1) {\n $scope.stage.region = $scope.regions[0];\n } else if (!$scope.regions.includes($scope.stage.region)) {\n delete $scope.stage.region;\n }\n if (!$scope.stage.regions.length && $scope.application.defaultRegions.azure) {\n $scope.stage.regions.push($scope.application.defaultRegions.azure);\n }\n if (!$scope.stage.regions.length && $scope.application.defaultRegions.azure) {\n $scope.stage.regions.push($scope.application.defaultRegions.azure);\n }\n $scope.baseOsOptions = baseOsOptions.baseImages;\n\n $scope.baseLabelOptions = baseLabelOptions;\n $scope.osTypeOptions = ['linux', 'windows'];\n $scope.packageTypeOptions = ['DEB', 'RPM'];\n\n $scope.viewState.roscoMode =\n SETTINGS.feature.roscoMode ||\n (typeof SETTINGS.feature.roscoSelector === 'function' && SETTINGS.feature.roscoSelector($scope.stage));\n $scope.showAdvancedOptions = showAdvanced();\n $scope.viewState.loading = false;\n\n if ($scope.stage.managedImage != null) {\n $scope.managedImagesWasChosen = true;\n setManagedImages();\n }\n $scope.defaultImagesWasChosen = $scope.stage.baseOs != null;\n $scope.customImagesWasChosen = $scope.stage.publisher != null;\n });\n }\n\n function stageUpdated() {\n deleteEmptyProperties();\n // Since the selector computes using stage as an input, it needs to be able to recompute roscoMode on updates\n if (typeof SETTINGS.feature.roscoSelector === 'function') {\n $scope.viewState.roscoMode = SETTINGS.feature.roscoSelector($scope.stage);\n }\n }\n\n function showAdvanced() {\n const stg = $scope.stage;\n return !!(\n stg.templateFileName ||\n (stg.extendedAttributes && _.size(stg.extendedAttributes) > 0) ||\n stg.varFileName\n );\n }\n\n function deleteEmptyProperties() {\n _.forOwn($scope.stage, function (val, key) {\n if (val === '') {\n delete $scope.stage[key];\n }\n });\n }\n\n function setManagedImages() {\n azureImageReader\n .findImages({ provider: 'azure', managedImages: true, account: $scope.stage.account })\n .then(function (images) {\n let managedImageOptions = [];\n for (let i in images) {\n let image = images[i];\n let newImage = {\n id: image.imageName,\n osType: image.ostype,\n name: image.imageName,\n };\n managedImageOptions.push(newImage);\n }\n $scope.managedImageOptions = managedImageOptions;\n })\n .catch(() => {});\n }\n\n function setRegions() {\n AccountService.getRegionsForAccount($scope.stage.account)\n .then(function (regions) {\n $scope.regions = regions.map((r) => r.name);\n })\n .catch(() => {});\n }\n\n this.addExtendedAttribute = function () {\n if (!$scope.stage.extendedAttributes) {\n $scope.stage.extendedAttributes = {};\n }\n $uibModal\n .open({\n templateUrl: PipelineTemplates.addExtendedAttributes,\n controller: 'bakeStageAddExtendedAttributeController',\n controllerAs: 'addExtendedAttribute',\n resolve: {\n extendedAttribute: function () {\n return {\n key: '',\n value: '',\n };\n },\n },\n })\n .result.then(function (extendedAttribute) {\n $scope.stage.extendedAttributes[extendedAttribute.key] = extendedAttribute.value;\n })\n .catch(() => {});\n };\n\n this.removeExtendedAttribute = function (key) {\n delete $scope.stage.extendedAttributes[key];\n };\n\n this.showTemplateFileName = function () {\n return $scope.viewState.roscoMode || $scope.stage.templateFileName;\n };\n\n this.showExtendedAttributes = function () {\n return (\n $scope.viewState.roscoMode || ($scope.stage.extendedAttributes && _.size($scope.stage.extendedAttributes) > 0)\n );\n };\n\n this.showVarFileName = function () {\n return $scope.viewState.roscoMode || $scope.stage.varFileName;\n };\n\n this.showDefaultImages = function () {\n $scope.managedImagesWasChosen = false;\n $scope.defaultImagesWasChosen = true;\n $scope.customImagesWasChosen = false;\n\n $scope.stage.managedImage = null;\n $scope.stage.publisher = null;\n $scope.stage.offer = null;\n $scope.stage.sku = null;\n $scope.stage.osType = null;\n $scope.stage.packageType = null;\n };\n\n this.showManagedImages = function () {\n setManagedImages();\n\n $scope.managedImagesWasChosen = true;\n $scope.defaultImagesWasChosen = false;\n $scope.customImagesWasChosen = false;\n\n $scope.stage.osType = null;\n $scope.stage.baseOs = null;\n $scope.stage.publisher = null;\n $scope.stage.offer = null;\n $scope.stage.sku = null;\n $scope.stage.packageType = null;\n };\n\n this.showCustomImages = function () {\n $scope.managedImagesWasChosen = false;\n $scope.defaultImagesWasChosen = false;\n $scope.customImagesWasChosen = true;\n\n $scope.stage.baseOs = null;\n $scope.stage.managedImage = null;\n $scope.stage.osType = null;\n $scope.stage.packageType = null;\n };\n\n this.onChangeAccount = () => {\n $scope.stage.osType = null;\n $scope.stage.packageType = null;\n $scope.stage.managedImage = null;\n\n if ($scope.stage.account) {\n setRegions();\n }\n\n if ($scope.managedImagesWasChosen) {\n setManagedImages();\n }\n };\n\n $scope.onChangeManagedImage = () => {\n $scope.stage.packageType = null;\n const selectedManagedImage = _.find($scope.managedImageOptions, { id: $scope.stage.managedImage });\n $scope.stage.osType = selectedManagedImage.osType.toLowerCase();\n };\n\n this.onChangeOsType = function (e) {\n $scope.stage.packageType = null;\n };\n\n $scope.$watch('stage', stageUpdated, true);\n\n initialize();\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { AccountService, Registry, StageConstants } from '@spinnaker/core';\n\nexport const AZURE_PIPELINE_STAGES_DESTROYASG_AZUREDESTROYASGSTAGE = 'spinnaker.azure.pipeline.stage.destroyAsgStage';\nexport const name = AZURE_PIPELINE_STAGES_DESTROYASG_AZUREDESTROYASGSTAGE; // for backwards compatibility\nmodule(AZURE_PIPELINE_STAGES_DESTROYASG_AZUREDESTROYASGSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'destroyServerGroup',\n cloudProvider: 'azure',\n templateUrl: require('./destroyAsgStage.html'),\n executionStepLabelUrl: require('./destroyAsgStepLabel.html'),\n accountExtractor: (stage) => [stage.context.credentials],\n configAccountExtractor: (stage) => [stage.credentials],\n validators: [\n {\n type: 'targetImpedance',\n message:\n 'This pipeline will attempt to destroy a server group without deploying a new version into the same cluster.',\n },\n { type: 'requiredField', fieldName: 'cluster' },\n { type: 'requiredField', fieldName: 'target' },\n { type: 'requiredField', fieldName: 'regions' },\n { type: 'requiredField', fieldName: 'credentials', fieldLabel: 'account' },\n ],\n });\n })\n .controller('azureDestroyAsgStageCtrl', [\n '$scope',\n function ($scope) {\n const ctrl = this;\n\n const stage = $scope.stage;\n\n $scope.state = {\n accounts: false,\n regionsLoaded: false,\n };\n\n AccountService.listAccounts('azure').then(function (accounts) {\n $scope.accounts = accounts;\n $scope.state.accounts = true;\n });\n\n ctrl.accountUpdated = function () {\n AccountService.getAccountDetails(stage.credentials).then(function (details) {\n stage.regions = [details.org];\n // stage.regions = ['eastus', 'westus'];\n });\n };\n\n $scope.targets = StageConstants.TARGET_LIST;\n\n stage.regions = stage.regions || [];\n stage.cloudProvider = 'azure';\n\n stage.interestingHealthProviderNames = []; // bypass the check for now; will change this later to ['azureService']\n\n if (!stage.credentials && $scope.application.defaultCredentials.azure) {\n stage.credentials = $scope.application.defaultCredentials.azure;\n }\n\n if (stage.credentials) {\n ctrl.accountUpdated();\n }\n if (!stage.target) {\n stage.target = $scope.targets[0].val;\n }\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { AccountService, Registry, StageConstants } from '@spinnaker/core';\n\nexport const AZURE_PIPELINE_STAGES_DISABLEASG_AZUREDISABLEASGSTAGE = 'spinnaker.azure.pipeline.stage.disableAsgStage';\nexport const name = AZURE_PIPELINE_STAGES_DISABLEASG_AZUREDISABLEASGSTAGE; // for backwards compatibility\nmodule(AZURE_PIPELINE_STAGES_DISABLEASG_AZUREDISABLEASGSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'disableServerGroup',\n alias: 'disableAsg',\n cloudProvider: 'azure',\n templateUrl: require('./disableAsgStage.html'),\n executionStepLabelUrl: require('./disableAsgStepLabel.html'),\n validators: [\n {\n type: 'targetImpedance',\n message:\n 'This pipeline will attempt to disable a server group without deploying a new version into the same cluster.',\n },\n { type: 'requiredField', fieldName: 'cluster' },\n { type: 'requiredField', fieldName: 'target' },\n { type: 'requiredField', fieldName: 'regions' },\n { type: 'requiredField', fieldName: 'credentials', fieldLabel: 'account' },\n ],\n });\n })\n .controller('azureDisableAsgStageCtrl', [\n '$scope',\n function ($scope) {\n const stage = $scope.stage;\n\n $scope.state = {\n accounts: false,\n regionsLoaded: false,\n };\n\n AccountService.listAccounts('azure').then(function (accounts) {\n $scope.accounts = accounts;\n $scope.state.accounts = true;\n });\n\n $scope.targets = StageConstants.TARGET_LIST;\n\n stage.regions = stage.regions || [];\n stage.cloudProvider = 'azure';\n\n if (stage.isNew && $scope.application.attributes.platformHealthOnly) {\n stage.interestingHealthProviderNames = []; // bypass the check for now; will change this later to ['azureService']\n }\n\n if (!stage.credentials && $scope.application.defaultCredentials.azure) {\n stage.credentials = $scope.application.defaultCredentials.azure;\n }\n if (!stage.regions.length && $scope.application.defaultRegions.azure) {\n stage.regions.push($scope.application.defaultRegions.azure);\n }\n\n if (!stage.target) {\n stage.target = $scope.targets[0].val;\n }\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { AccountService, Registry, StageConstants } from '@spinnaker/core';\n\nexport const AZURE_PIPELINE_STAGES_ENABLEASG_AZUREENABLEASGSTAGE = 'spinnaker.azure.pipeline.stage.enableAsgStage';\nexport const name = AZURE_PIPELINE_STAGES_ENABLEASG_AZUREENABLEASGSTAGE; // for backwards compatibility\nmodule(AZURE_PIPELINE_STAGES_ENABLEASG_AZUREENABLEASGSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'enableServerGroup',\n alias: 'enableAsg',\n cloudProvider: 'azure',\n templateUrl: require('./enableAsgStage.html'),\n executionStepLabelUrl: require('./enableAsgStepLabel.html'),\n validators: [\n { type: 'requiredField', fieldName: 'cluster' },\n { type: 'requiredField', fieldName: 'target' },\n { type: 'requiredField', fieldName: 'regions' },\n { type: 'requiredField', fieldName: 'credentials', fieldLabel: 'account' },\n ],\n });\n })\n .controller('azureEnableAsgStageCtrl', [\n '$scope',\n function ($scope) {\n const ctrl = this;\n\n const stage = $scope.stage;\n\n $scope.state = {\n accounts: false,\n regionsLoaded: false,\n };\n\n AccountService.listAccounts('azure').then(function (accounts) {\n $scope.accounts = accounts;\n $scope.state.accounts = true;\n });\n\n ctrl.reset = () => {\n ctrl.accountUpdated();\n ctrl.resetSelectedCluster();\n };\n\n $scope.targets = StageConstants.TARGET_LIST;\n\n stage.regions = stage.regions || [];\n stage.cloudProvider = 'azure';\n\n if (stage.isNew) {\n // bypass the health check for now; will change this later to ['azureService'] and we will also add back the check for $scope.application.attributes.platformHealthOnly\n stage.interestingHealthProviderNames = [];\n }\n\n if (!stage.credentials && $scope.application.defaultCredentials.azure) {\n stage.credentials = $scope.application.defaultCredentials.azure;\n }\n if (!stage.regions.length && $scope.application.defaultRegions.azure) {\n stage.regions.push($scope.application.defaultRegions.azure);\n }\n\n if (!stage.target) {\n stage.target = $scope.targets[0].val;\n }\n\n $scope.$watch('stage.credentials', $scope.accountUpdated);\n },\n ]);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nimport { FirewallLabels, InfrastructureCaches, TaskExecutor } from '@spinnaker/core';\n\nexport const AZURE_SECURITYGROUP_SECURITYGROUP_WRITE_SERVICE = 'spinnaker.azure.securityGroup.write.service';\nexport const name = AZURE_SECURITYGROUP_SECURITYGROUP_WRITE_SERVICE; // for backwards compatibility\nmodule(AZURE_SECURITYGROUP_SECURITYGROUP_WRITE_SERVICE, [UIROUTER_ANGULARJS]).factory(\n 'azureSecurityGroupWriter',\n function () {\n function upsertSecurityGroup(securityGroup, application, descriptor, params = {}) {\n params.securityGroupName = securityGroup.name;\n\n // We want to extend params with all attributes from securityGroup, but only if they don't already exist.\n _.assignWith(params, securityGroup, function (value, other) {\n return _.isUndefined(value) ? other : value;\n });\n\n const operation = TaskExecutor.executeTask({\n job: [params],\n application: application,\n description: `${descriptor} ${FirewallLabels.get('Firewall')}: ${name}`,\n });\n\n InfrastructureCaches.clearCache('securityGroup');\n\n return operation;\n }\n\n function deleteSecurityGroup(securityGroup, application, params = {}) {\n params.type = 'deleteSecurityGroup';\n params.securityGroupName = securityGroup.name;\n params.regions = [securityGroup.region];\n params.credentials = securityGroup.accountId;\n //params.cloudProvider = securityGroup.providerType;\n params.appName = application.name;\n\n const operation = TaskExecutor.executeTask({\n job: [params],\n application: application,\n description: `Delete ${FirewallLabels.get('Firewalls')}: ${securityGroup.name}`,\n });\n\n InfrastructureCaches.clearCache('securityGroup');\n\n return operation;\n }\n\n return {\n deleteSecurityGroup: deleteSecurityGroup,\n upsertSecurityGroup: upsertSecurityGroup,\n };\n },\n);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nimport { AccountService, FirewallLabels, NetworkReader, TaskMonitor } from '@spinnaker/core';\n\nimport { AZURE_SECURITYGROUP_SECURITYGROUP_WRITE_SERVICE } from '../securityGroup.write.service';\n\nexport const AZURE_SECURITYGROUP_CONFIGURE_CREATESECURITYGROUPCTRL = 'spinnaker.azure.securityGroup.create.controller';\nexport const name = AZURE_SECURITYGROUP_CONFIGURE_CREATESECURITYGROUPCTRL; // for backwards compatibility\nmodule(AZURE_SECURITYGROUP_CONFIGURE_CREATESECURITYGROUPCTRL, [\n UIROUTER_ANGULARJS,\n AZURE_SECURITYGROUP_SECURITYGROUP_WRITE_SERVICE,\n]).controller('azureCreateSecurityGroupCtrl', [\n '$scope',\n '$uibModalInstance',\n '$state',\n '$controller',\n 'application',\n 'securityGroup',\n 'azureSecurityGroupWriter',\n function ($scope, $uibModalInstance, $state, $controller, application, securityGroup, azureSecurityGroupWriter) {\n $scope.pages = {\n location: require('./createSecurityGroupProperties.html'),\n ingress: require('./createSecurityGroupIngress.html'),\n };\n\n $scope.regions = [];\n\n $scope.firewallLabel = FirewallLabels.get('Firewall');\n\n const ctrl = this;\n $scope.isNew = true;\n $scope.state = {\n submitting: false,\n infiniteScroll: {\n numToAdd: 20,\n currentItems: 20,\n },\n };\n\n AccountService.listAccounts('azure').then(function (accounts) {\n $scope.accounts = accounts;\n ctrl.accountUpdated();\n });\n\n ctrl.addMoreItems = function () {\n $scope.state.infiniteScroll.currentItems += $scope.state.infiniteScroll.numToAdd;\n };\n\n function onApplicationRefresh() {\n // If the user has already closed the modal, do not navigate to the new details view\n if ($scope.$$destroyed) {\n return;\n }\n $uibModalInstance.close();\n const newStateParams = {\n name: $scope.securityGroup.name,\n accountId: $scope.securityGroup.credentials || $scope.securityGroup.accountName,\n region: $scope.securityGroup.regions[0],\n provider: 'azure',\n };\n if (!$state.includes('**.firewallDetails')) {\n $state.go('.firewallDetails', newStateParams);\n } else {\n $state.go('^.firewallDetails', newStateParams);\n }\n }\n\n function onTaskComplete() {\n application.securityGroups.refresh();\n application.securityGroups.onNextRefresh($scope, onApplicationRefresh);\n }\n\n $scope.taskMonitor = new TaskMonitor({\n application: application,\n title: `Creating your ${FirewallLabels.get('firewall')}`,\n modalInstance: $uibModalInstance,\n onTaskComplete: onTaskComplete,\n });\n\n $scope.securityGroup = securityGroup;\n\n ctrl.accountUpdated = function () {\n AccountService.getRegionsForAccount($scope.securityGroup.credentials).then(function (regions) {\n $scope.regions = regions;\n $scope.securityGroup.regions = regions;\n ctrl.updateName();\n ctrl.regionUpdated();\n });\n };\n\n this.regionUpdated = function () {\n ctrl.vnetUpdated();\n };\n\n this.vnetUpdated = function () {\n const account = $scope.securityGroup.credentials;\n const region = $scope.securityGroup.region;\n $scope.securityGroup.selectedVnet = null;\n $scope.securityGroup.vnet = null;\n $scope.securityGroup.vnetResourceGroup = null;\n\n ctrl.selectedVnets = [];\n\n NetworkReader.listNetworks().then(function (vnets) {\n if (vnets.azure) {\n vnets.azure.forEach((vnet) => {\n if (vnet.account === account && vnet.region === region) {\n ctrl.selectedVnets.push(vnet);\n }\n });\n }\n });\n\n ctrl.subnetUpdated();\n };\n\n this.subnetUpdated = function () {\n $scope.securityGroup.selectedSubnet = null;\n $scope.securityGroup.subnet = null;\n ctrl.selectedSubnets = [];\n };\n\n this.selectedVnetChanged = function (item) {\n $scope.securityGroup.vnet = item.name;\n $scope.securityGroup.vnetResourceGroup = item.resourceGroup;\n $scope.securityGroup.selectedSubnet = null;\n $scope.securityGroup.subnet = null;\n ctrl.selectedSubnets = [];\n if (item.subnets) {\n item.subnets.map(function (subnet) {\n ctrl.selectedSubnets.push(subnet);\n });\n }\n };\n\n ctrl.cancel = function () {\n $uibModalInstance.dismiss();\n };\n\n ctrl.updateName = function () {\n const securityGroup = $scope.securityGroup;\n let name = application.name;\n if (securityGroup.detail) {\n name += '-' + securityGroup.detail;\n }\n securityGroup.name = name;\n $scope.namePreview = name;\n };\n\n ctrl.upsert = function () {\n $scope.taskMonitor.submit(function () {\n const params = {\n cloudProvider: 'azure',\n appName: application.name,\n region: $scope.securityGroup.region,\n vpcId: 'null',\n };\n\n if ($scope.securityGroup.selectedVnet) {\n $scope.securityGroup.vnet = $scope.securityGroup.selectedVnet.name;\n $scope.securityGroup.vnetResourceGroup = $scope.securityGroup.selectedVnet.resourceGroup;\n }\n\n if ($scope.securityGroup.selectedSubnet) {\n $scope.securityGroup.subnet = $scope.securityGroup.selectedSubnet.name;\n }\n\n $scope.securityGroup.type = 'upsertSecurityGroup';\n\n return azureSecurityGroupWriter.upsertSecurityGroup($scope.securityGroup, application, 'Create', params);\n });\n };\n\n ctrl.addRule = function (ruleset) {\n ruleset.push({\n name: $scope.securityGroup.name + '-Rule' + ruleset.length,\n priority: ruleset.length == 0 ? 100 : 100 * (ruleset.length + 1),\n protocolUI: 'tcp',\n protocol: 'tcp',\n access: 'Allow',\n direction: 'InBound',\n sourceAddressPrefix: '*',\n sourceAddressPrefixes: [],\n sourcePortRange: '*',\n destinationAddressPrefix: '*',\n destinationPortRange: '*',\n destinationPortRanges: [],\n destPortRanges: '*',\n sourceIPCIDRRanges: '*',\n });\n };\n\n ctrl.portUpdated = function (ruleset, index) {\n if (!_.isEmpty(ruleset[index].destPortRanges)) {\n const ruleRanges = ruleset[index].destPortRanges.split(',');\n\n if (ruleRanges.length > 1) {\n ruleset[index].destinationPortRanges = [];\n ruleRanges.forEach((v) => ruleset[index].destinationPortRanges.push(v));\n\n // If there are multiple port ranges then set null to the single port parameter otherwise ARM template will fail in validation.\n ruleset[index].destinationPortRange = null;\n } else {\n ruleset[index].destinationPortRange = ruleset[index].destPortRanges;\n\n // If there is a single port range then set null to the port array otherwise ARM template will fail in validation.\n ruleset[index].destinationPortRanges = [];\n }\n }\n };\n\n ctrl.sourceIPCIDRUpdated = function (ruleset, index) {\n if (!_.isEmpty(ruleset[index].destPortRanges)) {\n const ruleRanges = ruleset[index].sourceIPCIDRRanges.split(',');\n if (ruleRanges.length > 1) {\n ruleset[index].sourceAddressPrefixes = [];\n ruleRanges.forEach((v) => ruleset[index].sourceAddressPrefixes.push(v));\n\n // If there are multiple IP/CIDR ranges then set null to the single sourceAddressPrefix parameter otherwise ARM template will fail in validation\n ruleset[index].sourceAddressPrefix = null;\n } else {\n ruleset[index].sourceAddressPrefix = ruleset[index].sourceIPCIDRRanges;\n\n // If there is a single IP/CIDR then set null to the IP/CIDR array otherwise ARM template will fail in validation.\n ruleset[index].sourceAddressPrefixes = [];\n }\n }\n };\n\n ctrl.protocolUpdated = function (ruleset, index) {\n ruleset[index].protocol = ruleset[index].protocolUI;\n };\n\n ctrl.removeRule = function (ruleset, index) {\n ruleset.splice(index, 1);\n };\n\n ctrl.moveUp = function (ruleset, index) {\n if (index === 0) return;\n swapRules(ruleset, index, index - 1);\n };\n ctrl.moveDown = function (ruleset, index) {\n if (index === ruleset.length - 1) return;\n swapRules(ruleset, index, index + 1);\n };\n\n function swapRules(ruleset, a, b) {\n const temp = ruleset[b];\n const priorityA = ruleset[a].priority;\n const priorityB = ruleset[b].priority;\n //swap elements\n ruleset[b] = ruleset[a];\n ruleset[a] = temp;\n //swap priorities\n ruleset[a].priority = priorityA;\n ruleset[b].priority = priorityB;\n }\n\n $scope.securityGroup.securityRules = [];\n },\n]);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nimport {\n CACHE_INITIALIZER_SERVICE,\n FirewallLabels,\n InfrastructureCaches,\n SECURITY_GROUP_READER,\n TaskMonitor,\n} from '@spinnaker/core';\n\nimport { AZURE_SECURITYGROUP_SECURITYGROUP_WRITE_SERVICE } from '../securityGroup.write.service';\n\nexport const AZURE_SECURITYGROUP_CONFIGURE_EDITSECURITYGROUPCTRL =\n 'spinnaker.azure.securityGroup.azure.edit.controller';\nexport const name = AZURE_SECURITYGROUP_CONFIGURE_EDITSECURITYGROUPCTRL; // for backwards compatibility\nmodule(AZURE_SECURITYGROUP_CONFIGURE_EDITSECURITYGROUPCTRL, [\n UIROUTER_ANGULARJS,\n CACHE_INITIALIZER_SERVICE,\n SECURITY_GROUP_READER,\n AZURE_SECURITYGROUP_SECURITYGROUP_WRITE_SERVICE,\n]).controller('azureEditSecurityGroupCtrl', [\n '$scope',\n '$uibModalInstance',\n '$exceptionHandler',\n '$state',\n 'securityGroupReader',\n 'cacheInitializer',\n 'application',\n 'securityGroup',\n 'azureSecurityGroupWriter',\n function (\n $scope,\n $uibModalInstance,\n $exceptionHandler,\n $state,\n securityGroupReader,\n cacheInitializer,\n application,\n securityGroup,\n azureSecurityGroupWriter,\n ) {\n $scope.pages = {\n ingress: require('./createSecurityGroupIngress.html'),\n };\n\n securityGroup.securityRules = _.map(securityGroup.securityRules, function (rule) {\n if (!_.isEmpty(rule.protocol)) {\n rule.protocolUI = rule.protocol.toLowerCase();\n }\n\n rule.destPortRanges = rule.destinationPortRangeModel;\n rule.sourceIPCIDRRanges = rule.sourceAddressPrefixModel;\n\n return rule;\n });\n\n $scope.securityGroup = securityGroup;\n\n $scope.state = {\n refreshingSecurityGroups: false,\n };\n\n $scope.taskMonitor = new TaskMonitor({\n application: application,\n title: `Updating your ${FirewallLabels.get('firewall')}`,\n modalInstance: $uibModalInstance,\n onTaskComplete: onTaskComplete,\n });\n\n this.getSecurityGroupRefreshTime = function () {\n return InfrastructureCaches.get('securityGroups').getStats().ageMax;\n };\n\n this.refreshSecurityGroups = function () {\n $scope.state.refreshingSecurityGroups = true;\n return cacheInitializer.refreshCache('securityGroups').then(function () {\n initializeSecurityGroups().then(function () {\n $scope.state.refreshingSecurityGroups = false;\n });\n });\n };\n\n function initializeSecurityGroups() {\n return securityGroupReader.getAllSecurityGroups().then(function (securityGroups) {\n const account = securityGroup.accountName;\n const region = securityGroup.region;\n const availableGroups = _.filter(securityGroups[account].azure[region], {\n /*vpcId: vpcId*/\n });\n $scope.availableSecurityGroups = _.map(availableGroups, 'name');\n });\n }\n\n this.addRule = function (ruleset) {\n ruleset.push({\n name: $scope.securityGroup.name + '-Rule' + ruleset.length,\n priority: ruleset.length === 0 ? 100 : 100 * (ruleset.length + 1),\n protocolUI: 'tcp',\n access: 'Allow',\n direction: 'InBound',\n sourceAddressPrefix: '*',\n sourceAddressPrefixes: [],\n sourcePortRange: '*',\n destinationAddressPrefix: '*',\n destinationPortRange: '*',\n destinationPortRanges: [],\n destPortRanges: '*',\n sourceIPCIDRRanges: '*',\n });\n };\n\n function onApplicationRefresh() {\n // If the user has already closed the modal, do not navigate to the new details view\n if ($scope.$$destroyed) {\n return;\n }\n $uibModalInstance.close();\n const newStateParams = {\n name: $scope.securityGroup.name,\n accountId: $scope.securityGroup.credentials || $scope.securityGroup.accountName,\n region: $scope.securityGroup.region,\n provider: 'azure',\n };\n if (!$state.includes('**.firewallDetails')) {\n $state.go('.firewallDetails', newStateParams);\n } else {\n $state.go('^.firewallDetails', newStateParams);\n }\n }\n\n function onTaskComplete() {\n application.securityGroups.refresh();\n application.securityGroups.onNextRefresh($scope, onApplicationRefresh);\n }\n\n this.portUpdated = function (ruleset, index) {\n if (!_.isEmpty(ruleset[index].sourceIPCIDRRanges)) {\n const ruleRanges = ruleset[index].destPortRanges.split(',');\n if (ruleRanges.length > 1) {\n ruleset[index].destinationPortRanges = [];\n ruleRanges.forEach((v) => ruleset[index].destinationPortRanges.push(v));\n\n // If there are multiple port ranges then set null to the single port parameter otherwise ARM template will fail in validation.\n ruleset[index].destinationPortRange = null;\n } else {\n ruleset[index].destinationPortRange = ruleset[index].destPortRanges;\n\n // If there is a single port range then set null to the port array otherwise ARM template will fail in validation.\n ruleset[index].destinationPortRanges = [];\n }\n }\n };\n\n this.sourceIPCIDRUpdated = function (ruleset, index) {\n if (!_.isEmpty(ruleset[index].sourceIPCIDRRanges)) {\n const ruleRanges = ruleset[index].sourceIPCIDRRanges.split(',');\n if (ruleRanges.length > 1) {\n ruleset[index].sourceAddressPrefixes = [];\n ruleRanges.forEach((v) => ruleset[index].sourceAddressPrefixes.push(v));\n\n // If there are multiple IP/CIDR ranges then set null to the single sourceAddressPrefix parameter otherwise ARM template will fail in validation\n ruleset[index].sourceAddressPrefix = null;\n } else {\n ruleset[index].sourceAddressPrefix = ruleset[index].sourceIPCIDRRanges;\n\n // If there is a single IP/CIDR then set null to the IP/CIDR array otherwise ARM template will fail in validation.\n ruleset[index].sourceAddressPrefixes = [];\n }\n }\n };\n\n this.removeRule = function (ruleset, index) {\n ruleset.splice(index, 1);\n };\n\n this.moveUp = function (ruleset, index) {\n if (index === 0) return;\n swapRules(ruleset, index, index - 1);\n };\n this.moveDown = function (ruleset, index) {\n if (index === ruleset.length - 1) return;\n swapRules(ruleset, index, index + 1);\n };\n\n function swapRules(ruleset, a, b) {\n const temp = ruleset[b];\n const priorityA = ruleset[a].priority;\n const priorityB = ruleset[b].priority;\n //swap elements\n ruleset[b] = ruleset[a];\n ruleset[a] = temp;\n //swap priorities\n ruleset[a].priority = priorityA;\n ruleset[b].priority = priorityB;\n }\n\n $scope.taskMonitor.onTaskComplete = $uibModalInstance.dismiss;\n\n this.upsert = function () {\n $scope.taskMonitor.submit(function () {\n const params = {\n cloudProvider: 'azure',\n appName: application.name,\n region: $scope.securityGroup.region,\n subnet: null,\n vpcId: 'null',\n };\n $scope.securityGroup.type = 'upsertSecurityGroup';\n\n return azureSecurityGroupWriter.upsertSecurityGroup($scope.securityGroup, application, 'Update', params);\n });\n };\n\n this.cancel = function () {\n $uibModalInstance.dismiss();\n };\n },\n]);\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nimport { AccountService, FirewallLabels, TaskMonitor } from '@spinnaker/core';\n\nimport { AZURE_SECURITYGROUP_CONFIGURE_CREATESECURITYGROUPCTRL } from '../configure/CreateSecurityGroupCtrl';\nimport { AZURE_SECURITYGROUP_SECURITYGROUP_WRITE_SERVICE } from '../securityGroup.write.service';\n\nexport const AZURE_SECURITYGROUP_CLONE_CLONESECURITYGROUP_CONTROLLER = 'spinnaker.azure.securityGroup.clone.controller';\nexport const name = AZURE_SECURITYGROUP_CLONE_CLONESECURITYGROUP_CONTROLLER; // for backwards compatibility\nmodule(AZURE_SECURITYGROUP_CLONE_CLONESECURITYGROUP_CONTROLLER, [\n AZURE_SECURITYGROUP_SECURITYGROUP_WRITE_SERVICE,\n AZURE_SECURITYGROUP_CONFIGURE_CREATESECURITYGROUPCTRL,\n]).controller('azureCloneSecurityGroupController', [\n '$scope',\n '$uibModalInstance',\n '$controller',\n '$state',\n 'azureSecurityGroupWriter',\n 'securityGroup',\n 'application',\n function ($scope, $uibModalInstance, $controller, $state, azureSecurityGroupWriter, securityGroup, application) {\n const ctrl = this;\n\n $scope.firewallLabel = FirewallLabels.get('Firewall');\n\n $scope.pages = {\n location: require('../configure/createSecurityGroupProperties.html'),\n ingress: require('../configure/createSecurityGroupIngress.html'),\n };\n\n securityGroup.securityRules = _.map(securityGroup.securityRules, function (rule) {\n const temp = rule.destinationPortRange.split('-');\n rule.startPort = Number(temp[0]);\n rule.endPort = Number(temp[1]);\n return rule;\n });\n\n ctrl.accountUpdated = function () {\n AccountService.getRegionsForAccount($scope.securityGroup.credentials).then(function (regions) {\n $scope.regions = regions;\n $scope.securityGroup.regions = regions;\n ctrl.updateName();\n });\n };\n\n ctrl.cancel = function () {\n $uibModalInstance.dismiss();\n };\n\n ctrl.updateName = function () {\n const securityGroup = $scope.securityGroup;\n let name = application.name;\n if (securityGroup.detail) {\n name += '-' + securityGroup.detail;\n }\n securityGroup.name = name;\n $scope.namePreview = name;\n };\n\n $scope.securityGroup = securityGroup;\n\n $scope.state = {\n refreshingSecurityGroups: false,\n };\n\n $scope.taskMonitor = new TaskMonitor({\n application: application,\n title: `Updating your ${FirewallLabels.get('firewall')}`,\n modalInstance: $uibModalInstance,\n onTaskComplete: onTaskComplete,\n });\n\n AccountService.listAccounts('azure').then(function (accounts) {\n $scope.accounts = accounts;\n ctrl.accountUpdated();\n });\n\n ctrl.addRule = function (ruleset) {\n ruleset.push({\n name: $scope.securityGroup.name + '-Rule' + ruleset.length,\n priority: ruleset.length === 0 ? 100 : 100 * (ruleset.length + 1),\n protocol: 'tcp',\n access: 'Allow',\n direction: 'InBound',\n sourceAddressPrefix: '*',\n sourcePortRange: '*',\n destinationAddressPrefix: '*',\n destinationPortRange: '7001-7001',\n startPort: 7001,\n endPort: 7001,\n });\n };\n\n function onApplicationRefresh() {\n // If the user has already closed the modal, do not navigate to the new details view\n if ($scope.$$destroyed) {\n return;\n }\n $uibModalInstance.close();\n const newStateParams = {\n name: $scope.securityGroup.name,\n accountId: $scope.securityGroup.credentials || $scope.securityGroup.accountName,\n region: $scope.securityGroup.region,\n provider: 'azure',\n };\n if (!$state.includes('**.firewallDetails')) {\n $state.go('.firewallDetails', newStateParams);\n } else {\n $state.go('^.firewallDetails', newStateParams);\n }\n }\n\n function onTaskComplete() {\n application.securityGroups.refresh();\n application.securityGroups.onNextRefresh($scope, onApplicationRefresh);\n }\n\n ctrl.portUpdated = function (ruleset, index) {\n ruleset[index].destinationPortRange = ruleset[index].startPort + '-' + ruleset[index].endPort;\n };\n ctrl.removeRule = function (ruleset, index) {\n ruleset.splice(index, 1);\n };\n ctrl.moveUp = function (ruleset, index) {\n if (index === 0) return;\n swapRules(ruleset, index, index - 1);\n };\n ctrl.moveDown = function (ruleset, index) {\n if (index === ruleset.length - 1) return;\n swapRules(ruleset, index, index + 1);\n };\n function swapRules(ruleset, a, b) {\n const temp = ruleset[b];\n const priorityA = ruleset[a].priority;\n const priorityB = ruleset[b].priority;\n //swap elements\n ruleset[b] = ruleset[a];\n ruleset[a] = temp;\n //swap priorities\n ruleset[a].priority = priorityA;\n ruleset[b].priority = priorityB;\n }\n\n ctrl.upsert = function () {\n $scope.taskMonitor.submit(function () {\n const params = {\n cloudProvider: 'azure',\n appName: application.name,\n region: $scope.securityGroup.region,\n subnet: 'none',\n vpcId: 'null',\n };\n $scope.securityGroup.type = 'upsertSecurityGroup';\n\n return azureSecurityGroupWriter.upsertSecurityGroup($scope.securityGroup, application, 'Clone', params);\n });\n };\n },\n]);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport * as angular from 'angular';\nimport _ from 'lodash';\n\nimport { ConfirmationModalService, FirewallLabels, SECURITY_GROUP_READER } from '@spinnaker/core';\n\nimport { AZURE_SECURITYGROUP_CLONE_CLONESECURITYGROUP_CONTROLLER } from '../clone/cloneSecurityGroup.controller';\nimport { AZURE_SECURITYGROUP_SECURITYGROUP_WRITE_SERVICE } from '../securityGroup.write.service';\n\nexport const AZURE_SECURITYGROUP_DETAILS_SECURITYGROUPDETAIL_CONTROLLER =\n 'spinnaker.azure.securityGroup.azure.details.controller';\nexport const name = AZURE_SECURITYGROUP_DETAILS_SECURITYGROUPDETAIL_CONTROLLER; // for backwards compatibility\nangular\n .module(AZURE_SECURITYGROUP_DETAILS_SECURITYGROUPDETAIL_CONTROLLER, [\n UIROUTER_ANGULARJS,\n SECURITY_GROUP_READER,\n AZURE_SECURITYGROUP_SECURITYGROUP_WRITE_SERVICE,\n AZURE_SECURITYGROUP_CLONE_CLONESECURITYGROUP_CONTROLLER,\n ])\n .controller('azureSecurityGroupDetailsCtrl', [\n '$scope',\n '$state',\n 'resolvedSecurityGroup',\n 'app',\n 'azureSecurityGroupWriter',\n 'securityGroupReader',\n '$uibModal',\n function ($scope, $state, resolvedSecurityGroup, app, azureSecurityGroupWriter, securityGroupReader, $uibModal) {\n const application = app;\n const securityGroup = resolvedSecurityGroup;\n\n $scope.state = {\n loading: true,\n };\n\n $scope.firewallLabel = FirewallLabels.get('Firewall');\n\n function extractSecurityGroup() {\n return securityGroupReader\n .getSecurityGroupDetails(\n application,\n securityGroup.accountId,\n securityGroup.provider,\n securityGroup.region,\n securityGroup.vpcId,\n securityGroup.name,\n )\n .then(\n function (details) {\n $scope.state.loading = false;\n\n if (!details || _.isEmpty(details)) {\n fourOhFour();\n } else {\n $scope.securityGroup = details;\n }\n },\n function () {\n fourOhFour();\n },\n );\n }\n\n function fourOhFour() {\n $state.go('^');\n }\n\n extractSecurityGroup().then(() => {\n // If the user navigates away from the view before the initial extractSecurityGroup call completes,\n // do not bother subscribing to the refresh\n if (!$scope.$$destroyed) {\n app.securityGroups.onRefresh($scope, extractSecurityGroup);\n }\n });\n\n this.editInboundRules = function editInboundRules() {\n $uibModal.open({\n templateUrl: require('../configure/editSecurityGroup.html'),\n controller: 'azureEditSecurityGroupCtrl as ctrl',\n resolve: {\n securityGroup: function () {\n return angular.copy($scope.securityGroup);\n },\n application: function () {\n return application;\n },\n },\n });\n };\n\n this.cloneSecurityGroup = function cloneSecurityGroup() {\n $uibModal.open({\n templateUrl: require('../clone/cloneSecurityGroup.html'),\n controller: 'azureCloneSecurityGroupController as ctrl',\n resolve: {\n securityGroup: function () {\n const securityGroup = angular.copy($scope.securityGroup);\n if (securityGroup.region) {\n securityGroup.regions = [securityGroup.region];\n }\n return securityGroup;\n },\n application: function () {\n return application;\n },\n },\n });\n };\n\n this.deleteSecurityGroup = function deleteSecurityGroup() {\n const taskMonitor = {\n application: application,\n title: 'Deleting ' + securityGroup.name,\n };\n\n const submitMethod = function () {\n $scope.securityGroup.type = 'deleteSecurityGroup';\n return azureSecurityGroupWriter.deleteSecurityGroup(securityGroup, application, {\n cloudProvider: 'azure',\n vpcId: $scope.securityGroup.vpcId,\n });\n };\n\n ConfirmationModalService.confirm({\n header: 'Really delete ' + securityGroup.name + '?',\n buttonText: 'Delete ' + securityGroup.name,\n account: securityGroup.accountId,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n });\n };\n\n if (app.isStandalone) {\n // we still want the edit to refresh the firewall details when the modal closes\n app.securityGroups = {\n refresh: extractSecurityGroup,\n };\n }\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const AZURE_SECURITYGROUP_SECURITYGROUP_READER = 'spinnaker.azure.securityGroup.reader';\nexport const name = AZURE_SECURITYGROUP_SECURITYGROUP_READER; // for backwards compatibility\nmodule(AZURE_SECURITYGROUP_SECURITYGROUP_READER, []).factory('azureSecurityGroupReader', function () {\n function resolveIndexedSecurityGroup(indexedSecurityGroups, container, securityGroupId) {\n //hack to get around securityGroupId not matching id in indexedSecurityGroups.\n const temp = securityGroupId.split('/');\n return indexedSecurityGroups[container.account][container.region][temp[temp.length - 1]];\n }\n\n return {\n resolveIndexedSecurityGroup: resolveIndexedSecurityGroup,\n };\n});\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const AZURE_SECURITYGROUP_SECURITYGROUP_TRANSFORMER = 'spinnaker.azure.securityGroup.transformer';\nexport const name = AZURE_SECURITYGROUP_SECURITYGROUP_TRANSFORMER; // for backwards compatibility\nmodule(AZURE_SECURITYGROUP_SECURITYGROUP_TRANSFORMER, []).factory('azureSecurityGroupTransformer', function () {\n function normalizeSecurityGroup() {}\n\n return {\n normalizeSecurityGroup: normalizeSecurityGroup,\n };\n});\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_SERVERGROUPINSTANCEARCHETYPE_CONTROLLER =\n 'spinnaker.azure.serverGroup.configure.instanceArchetype.controller';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_SERVERGROUPINSTANCEARCHETYPE_CONTROLLER; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_SERVERGROUPINSTANCEARCHETYPE_CONTROLLER, []).controller(\n 'azureInstanceArchetypeCtrl',\n [\n '$scope',\n 'instanceTypeService',\n 'modalWizardService',\n function ($scope, instanceTypeService, modalWizardService) {\n const wizard = modalWizardService.getWizard();\n\n $scope.$watch('command.viewState.instanceProfile', function () {\n if (!$scope.command.viewState.instanceProfile || $scope.command.viewState.instanceProfile === 'custom') {\n wizard.excludePage('instance-type');\n } else {\n wizard.includePage('instance-type');\n wizard.markClean('instance-profile');\n wizard.markComplete('instance-profile');\n }\n });\n\n $scope.$watch('command.viewState.instanceType', function (newVal) {\n if (newVal) {\n wizard.markClean('instance-profile');\n wizard.markComplete('instance-profile');\n }\n });\n },\n ],\n);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_SERVERGROUPINSTANCETYPE_CONTROLLER =\n 'spinnaker.azure.serverGroup.configure.instanceType.controller';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_SERVERGROUPINSTANCETYPE_CONTROLLER; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_SERVERGROUPINSTANCETYPE_CONTROLLER, []).controller('azureInstanceTypeCtrl', [\n '$scope',\n 'modalWizardService',\n function ($scope, modalWizardService) {\n modalWizardService.getWizard().markComplete('instance-type');\n modalWizardService.getWizard().markClean('instance-type');\n },\n]);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_SERVERGROUPADVANCEDSETTINGS_CONTROLLER =\n 'spinnaker.azure.serverGroup.configure.advancedSetting.controller';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_SERVERGROUPADVANCEDSETTINGS_CONTROLLER; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_SERVERGROUPADVANCEDSETTINGS_CONTROLLER, []).controller(\n 'azureServerGroupAdvancedSettingsCtrl',\n [\n '$scope',\n 'modalWizardService',\n function ($scope, modalWizardService) {\n modalWizardService.getWizard().markComplete('advanced');\n\n $scope.$watch('form.$valid', function (newVal) {\n if (newVal) {\n modalWizardService.getWizard().markClean('advanced');\n } else {\n modalWizardService.getWizard().markDirty('advanced');\n }\n });\n },\n ],\n);\n","'use strict';\n\nimport * as angular from 'angular';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_ADVANCEDSETTINGSSELECTOR_DIRECTIVE =\n 'spinnaker.azure.serverGroup.configure.wizard.advancedSettings.selector.directive';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_ADVANCEDSETTINGSSELECTOR_DIRECTIVE; // for backwards compatibility\nangular\n .module(AZURE_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_ADVANCEDSETTINGSSELECTOR_DIRECTIVE, [])\n .directive('azureServerGroupAdvancedSettingsSelector', function () {\n return {\n restrict: 'E',\n templateUrl: require('./advancedSettingsSelector.directive.html'),\n scope: {},\n bindToController: {\n command: '=',\n },\n controllerAs: 'adv',\n controller: 'azureServerGroupAdvancedSettingsSelectorCtrl',\n };\n })\n .controller('azureServerGroupAdvancedSettingsSelectorCtrl', function () {\n this.addDataDisk = () => {\n const newDataDisks = angular.copy(this.command.dataDisks);\n this.command.dataDisks = newDataDisks.concat([\n {\n lun: 0,\n managedDisk: {\n storageAccountType: 'Standard_LRS',\n },\n diskSizeGB: 1,\n caching: 'None',\n createOption: 'Empty',\n },\n ]);\n };\n\n this.removeDataDisk = (index) => {\n const newDataDisks = angular.copy(this.command.dataDisks);\n newDataDisks.splice(index, 1);\n this.command.dataDisks = newDataDisks;\n };\n });\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_BASICSETTINGS_IMAGE_REGIONAL_FILTER =\n 'spinnaker.azure.serverGroup.configure.basicSettings.image.filter';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_BASICSETTINGS_IMAGE_REGIONAL_FILTER; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_BASICSETTINGS_IMAGE_REGIONAL_FILTER, []).filter('regional', function () {\n return function (input, selectedRegion) {\n return _.filter(input, function (image) {\n return image.region === selectedRegion || image.region === null;\n });\n };\n});\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport * as angular from 'angular';\nimport ANGULAR_UI_BOOTSTRAP from 'angular-ui-bootstrap';\n\nimport { IMAGE_READER, ModalWizard } from '@spinnaker/core';\n\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_BASICSETTINGS_IMAGE_REGIONAL_FILTER } from './image.regional.filter';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_BASICSETTINGS_SERVERGROUPBASICSETTINGS_CONTROLLER =\n 'spinnaker.azure.serverGroup.configure.basicSettings';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_BASICSETTINGS_SERVERGROUPBASICSETTINGS_CONTROLLER; // for backwards compatibility\nangular\n .module(AZURE_SERVERGROUP_CONFIGURE_WIZARD_BASICSETTINGS_SERVERGROUPBASICSETTINGS_CONTROLLER, [\n UIROUTER_ANGULARJS,\n ANGULAR_UI_BOOTSTRAP,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_BASICSETTINGS_IMAGE_REGIONAL_FILTER,\n IMAGE_READER,\n ])\n .controller('azureServerGroupBasicSettingsCtrl', [\n '$scope',\n '$controller',\n '$uibModalStack',\n '$state',\n 'imageReader',\n function ($scope, $controller, $uibModalStack, $state, imageReader) {\n $scope.$watch('form.$valid', function (newVal) {\n if (newVal) {\n ModalWizard.markClean('basic-settings');\n ModalWizard.markComplete('basic-settings');\n } else {\n ModalWizard.markIncomplete('basic-settings');\n }\n });\n\n this.imageChanged = (image) => {\n $scope.command.imageName = image.imageName;\n $scope.command.selectedImage = image;\n ModalWizard.markClean('basic-settings');\n };\n\n angular.extend(\n this,\n $controller('BasicSettingsMixin', {\n $scope: $scope,\n imageReader: imageReader,\n $uibModalStack: $uibModalStack,\n $state: $state,\n }),\n );\n\n this.stackPattern = {\n test: function (stack) {\n const pattern = $scope.command.viewState.templatingEnabled ? /^([a-zA-Z0-9]*(\\${.+})*)*$/ : /^[a-zA-Z0-9]*$/;\n\n return pattern.test(stack);\n },\n };\n\n this.detailPattern = {\n test: function (detail) {\n const pattern = $scope.command.viewState.templatingEnabled\n ? /^([a-zA-Z0-9-]*(\\${.+})*)*$/\n : /^[a-zA-Z0-9-]*$/;\n\n return pattern.test(detail);\n },\n };\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_CAPACITY_CAPACITYSELECTOR_DIRECTIVE =\n 'spinnaker.azure.serverGroup.configure.wizard.capacity.selector.directive';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_CAPACITY_CAPACITYSELECTOR_DIRECTIVE; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_CAPACITY_CAPACITYSELECTOR_DIRECTIVE, [])\n .directive('azureServerGroupCapacitySelector', function () {\n return {\n restrict: 'E',\n templateUrl: require('./capacitySelector.directive.html'),\n scope: {},\n bindToController: {\n command: '=',\n },\n controllerAs: 'cap',\n controller: 'azureServerGroupCapacitySelectorCtrl',\n };\n })\n .controller('azureServerGroupCapacitySelectorCtrl', function () {});\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_HEALTHSETTINGS_SERVERGROUPHEALTHSETTINGS_CONTROLLER =\n 'spinnaker.azure.serverGroup.configure.healthSetting.controller';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_HEALTHSETTINGS_SERVERGROUPHEALTHSETTINGS_CONTROLLER; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_HEALTHSETTINGS_SERVERGROUPHEALTHSETTINGS_CONTROLLER, []).controller(\n 'azureServerGroupHealthSettingsCtrl',\n [\n '$scope',\n function ($scope) {\n if (typeof $scope.command.healthSettings === 'undefined') {\n $scope.command.healthSettings = {};\n }\n\n this.healthCheckProtocols = [\n { displayName: 'N/A', name: null },\n { displayName: 'HTTP', name: 'http' },\n { displayName: 'TCP', name: 'tcp' },\n ];\n\n this.requiresHealthCheckPath = function () {\n return $scope.command.healthSettings.protocol === 'http';\n };\n\n this.changeHealthCheckProtocol = function (newProtocol) {\n if (newProtocol == null) {\n $scope.command.healthSettings.protocol = null;\n $scope.command.healthSettings.port = null;\n $scope.command.healthSettings.requestPath = null;\n } else if (!this.requiresHealthCheckPath()) {\n $scope.command.healthSettings.requestPath = null;\n }\n };\n },\n ],\n);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_HEALTHSETTINGS_HEALTHSETTINGSSELECTOR_DIRECTIVE =\n 'spinnaker.azure.serverGroup.configure.wizard.healthSettings.selector.directive';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_HEALTHSETTINGS_HEALTHSETTINGSSELECTOR_DIRECTIVE; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_HEALTHSETTINGS_HEALTHSETTINGSSELECTOR_DIRECTIVE, []).directive(\n 'azureServerGroupHealthSettingsSelector',\n [\n 'azureServerGroupConfigurationService',\n function () {\n return {\n restrict: 'E',\n templateUrl: require('./healthSettingsSelector.directive.html'),\n scope: {\n command: '=',\n },\n };\n },\n ],\n);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { ModalWizard } from '@spinnaker/core';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_IMAGESETTINGS_SERVERGROUPIMAGESETTINGS_CONTROLLER =\n 'spinnaker.azure.serverGroup.configure.imageSettings.controller';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_IMAGESETTINGS_SERVERGROUPIMAGESETTINGS_CONTROLLER; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_IMAGESETTINGS_SERVERGROUPIMAGESETTINGS_CONTROLLER, []).controller(\n 'azureServerGroupImageSettingsCtrl',\n [\n '$scope',\n function ($scope) {\n this.clearImage = function () {\n if ($scope.command.image.isCustom == false) {\n $scope.command.image = { isCustom: false };\n } else {\n $scope.command.image.region = $scope.command.region;\n }\n };\n\n ModalWizard.markComplete('image-settings');\n\n $scope.$watch('form.$valid', function (newVal) {\n if (newVal) {\n ModalWizard.markClean('image-settings');\n } else {\n ModalWizard.markDirty('image-settings');\n }\n });\n },\n ],\n);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_IMAGESETTINGS_IMAGESETTINGS_DIRECTIVE =\n 'spinnaker.azure.serverGroup.configure.wizard.imageSettingsSelector.directive';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_IMAGESETTINGS_IMAGESETTINGS_DIRECTIVE; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_IMAGESETTINGS_IMAGESETTINGS_DIRECTIVE, []).directive(\n 'azureServerGroupImageSettingsSelector',\n [\n 'azureServerGroupConfigurationService',\n function () {\n return {\n restrict: 'E',\n templateUrl: require('./imageSettingsSelector.directive.html'),\n scope: {\n command: '=',\n },\n };\n },\n ],\n);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { InfrastructureCaches, LOAD_BALANCER_READ_SERVICE, ModalWizard, NetworkReader } from '@spinnaker/core';\n\nimport Utility from '../../../../utility';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_SERVERGROUPLOADBALANCERS_CONTROLLER =\n 'spinnaker.azure.serverGroup.configure.loadBalancer.controller';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_SERVERGROUPLOADBALANCERS_CONTROLLER; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_SERVERGROUPLOADBALANCERS_CONTROLLER, [\n LOAD_BALANCER_READ_SERVICE,\n]).controller('azureServerGroupLoadBalancersCtrl', [\n '$scope',\n 'loadBalancerReader',\n function ($scope, loadBalancerReader) {\n ModalWizard.markClean('load-balancers');\n\n function loadVnetSubnets(item, type) {\n loadBalancerReader\n .getLoadBalancerDetails('azure', $scope.command.credentials, $scope.command.region, item)\n .then(function (LBs) {\n if (!LBs || LBs.length === 0) {\n // load the subnet and vnets without a load balancer\n const attachedVnet = $scope.command.selectedVnet;\n const attachedSubnet = $scope.command.selectedSubnet;\n $scope.command.selectedVnetSubnets = [];\n $scope.command.allVnets = [];\n NetworkReader.listNetworks().then(function (vnets) {\n if (vnets.azure) {\n vnets.azure.forEach((selectedVnet) => {\n if (\n selectedVnet.account === $scope.command.credentials &&\n selectedVnet.region === $scope.command.region\n ) {\n $scope.command.allVnets.push(selectedVnet);\n\n selectedVnet.subnets.map(function (subnet) {\n let addSubnet = true;\n if (subnet.devices) {\n subnet.devices.map(function (device) {\n // only add subnets that are not assigned to an ApplicationGateway\n if (device && device.type === 'applicationGateways') {\n addSubnet = false;\n }\n });\n }\n if (addSubnet) {\n $scope.command.selectedVnetSubnets.push(subnet.name);\n if (subnet.name === attachedSubnet) {\n $scope.command.selectedSubnet = attachedSubnet;\n }\n }\n });\n }\n });\n }\n });\n } else if (LBs && LBs.length === 1) {\n const selectedLoadBalancer = LBs[0];\n const attachedVnet = $scope.command.selectedVnet;\n $scope.command.selectedVnet = null;\n $scope.command.selectedVnetSubnets = [];\n $scope.command.allVnets = [];\n NetworkReader.listNetworks().then(function (vnets) {\n if (vnets.azure) {\n vnets.azure.forEach((selectedVnet) => {\n if (\n selectedVnet.account === $scope.command.credentials &&\n selectedVnet.region === $scope.command.region\n ) {\n $scope.command.allVnets.push(selectedVnet);\n }\n if (\n selectedVnet.account === $scope.command.credentials &&\n selectedVnet.region === $scope.command.region &&\n ((type === 'Azure Application Gateway' && selectedVnet.name == selectedLoadBalancer.vnet) ||\n (type === 'Azure Load Balancer' && selectedVnet.name === attachedVnet.name))\n ) {\n $scope.command.selectedVnet = selectedVnet;\n selectedVnet.subnets.map(function (subnet) {\n let addSubnet = true;\n if (subnet.devices) {\n subnet.devices.map(function (device) {\n // only add subnets that are not assigned to an ApplicationGateway\n if (device && device.type === 'applicationGateways') {\n addSubnet = false;\n }\n });\n }\n if (addSubnet) {\n $scope.command.selectedVnetSubnets.push(subnet.name);\n }\n });\n }\n });\n }\n });\n }\n });\n }\n\n if ($scope.command.credentials && $scope.command.region) {\n $scope.command.viewState.networkSettingsConfigured = true;\n $scope.command.selectedVnetSubnets = [];\n if ($scope.command.loadBalancerName !== null && typeof $scope.command.loadBalancerName !== 'undefined') {\n $scope.useLoadBalancer = true;\n }\n loadVnetSubnets($scope.command.loadBalancerName, $scope.command.loadBalancerType);\n }\n\n this.loadBalancerChanged = function (item) {\n $scope.command.viewState.networkSettingsConfigured = true;\n ModalWizard.markComplete('load-balancers');\n\n const loadBalancers = $scope.command.backingData.loadBalancers;\n let loadBalancerType = null;\n\n if (loadBalancers) {\n const loadBalancerToFind = loadBalancers.find((lb) => lb.name === item);\n if (loadBalancerToFind) {\n loadBalancerType = Utility.getLoadBalancerType(loadBalancerToFind.loadBalancerType).type;\n }\n }\n\n if (item === null) {\n $scope.command.loadBalancerName = null;\n }\n\n $scope.command.selectedVnetSubnets = [];\n $scope.command.loadBalancerType = loadBalancerType;\n InfrastructureCaches.clearCache('networks');\n loadVnetSubnets(item, loadBalancerType);\n };\n },\n]);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_SERVERGROUPLOADBALANCERSSELECTOR_DIRECTIVE =\n 'spinnaker.azure.serverGroup.configure.loadBalancer.directive';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_SERVERGROUPLOADBALANCERSSELECTOR_DIRECTIVE; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_SERVERGROUPLOADBALANCERSSELECTOR_DIRECTIVE, []).directive(\n 'azureServerGroupLoadBalancersSelector',\n [\n 'azureServerGroupConfigurationService',\n function () {\n return {\n restrict: 'E',\n scope: {\n command: '=',\n },\n templateUrl: require('./serverGroupLoadBalancersSelector.directive.html'),\n };\n },\n ],\n);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { ModalWizard } from '@spinnaker/core';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_NETWORKSETTINGS_SERVERGROUPNETWORKSETTINGS_CONTROLLER =\n 'spinnaker.azure.serverGroup.configure.networkSettings.controller';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_NETWORKSETTINGS_SERVERGROUPNETWORKSETTINGS_CONTROLLER; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_NETWORKSETTINGS_SERVERGROUPNETWORKSETTINGS_CONTROLLER, []).controller(\n 'azureServerGroupNetworkSettingsCtrl',\n [\n '$scope',\n function ($scope) {\n ModalWizard.markClean('network-settings');\n\n $scope.command.selectedVnet = {\n name: $scope.command.vnet,\n };\n\n $scope.command.selectedSubnet = $scope.command.subnet;\n\n this.vnetChanged = function (item) {\n $scope.command.vnet = item;\n $scope.command.subnet = $scope.command.selectedSubnet = null;\n $scope.command.selectedVnetSubnets = item.subnets.map((s) => s.name);\n };\n\n this.networkSettingsChanged = function (item) {\n $scope.command.vnet = $scope.command.selectedVnet.name;\n $scope.command.subnet = item;\n ModalWizard.markComplete('network-settings');\n };\n\n this.getVnetName = function () {\n if ($scope.command.selectedVnet) {\n return $scope.command.selectedVnet.name;\n } else {\n return 'Virtual network was not selected';\n }\n };\n },\n ],\n);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_NETWORKSETTINGS_SERVERGROUPNETWORKSETTINGSSELECTOR_DIRECTIVE =\n 'spinnaker.azure.serverGroup.configure.networkSettings.directive';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_NETWORKSETTINGS_SERVERGROUPNETWORKSETTINGSSELECTOR_DIRECTIVE; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_NETWORKSETTINGS_SERVERGROUPNETWORKSETTINGSSELECTOR_DIRECTIVE, []).directive(\n 'azureServerGroupNetworkSettingsSelector',\n function () {\n return {\n restrict: 'E',\n scope: {\n command: '=',\n },\n templateUrl: require('./ServerGroupNetworkSettingsSelector.directive.html'),\n };\n },\n);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { ModalWizard } from '@spinnaker/core';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUP_SERVERGROUPSECURITYGROUPS_CONTROLLER =\n 'spinnaker.azure.serverGroup.configure.securityGroups.controller';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUP_SERVERGROUPSECURITYGROUPS_CONTROLLER; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUP_SERVERGROUPSECURITYGROUPS_CONTROLLER, []).controller(\n 'azureServerGroupSecurityGroupsCtrl',\n [\n '$scope',\n function ($scope) {\n ModalWizard.markClean('security-groups');\n ModalWizard.markComplete('security-groups');\n\n $scope.command.selectedSecurityGroup = {\n id: $scope.command.securityGroupName,\n };\n\n this.securityGroupChanged = function (securityGroup) {\n $scope.command.securityGroupName = securityGroup.id;\n ModalWizard.markComplete('security-groups');\n };\n },\n ],\n);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { FirewallLabels, InfrastructureCaches } from '@spinnaker/core';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUP_SERVERGROUPSECURITYGROUPSSELECTOR_DIRECTIVE =\n 'spinnaker.azure.serverGroup.configure.securityGroupSelector.directive';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUP_SERVERGROUPSECURITYGROUPSSELECTOR_DIRECTIVE; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUP_SERVERGROUPSECURITYGROUPSSELECTOR_DIRECTIVE, []).directive(\n 'azureServerGroupSecurityGroupsSelector',\n [\n 'azureServerGroupConfigurationService',\n function (azureServerGroupConfigurationService) {\n return {\n restrict: 'E',\n scope: {\n command: '=',\n },\n templateUrl: require('./serverGroupSecurityGroupsSelector.directive.html'),\n link: function (scope) {\n scope.firewallLabel = FirewallLabels.get('firewall');\n\n scope.getSecurityGroupRefreshTime = function () {\n return InfrastructureCaches.get('securityGroups').getStats().ageMax;\n };\n\n scope.refreshSecurityGroups = function () {\n scope.refreshing = true;\n azureServerGroupConfigurationService.refreshSecurityGroups(scope.command).then(function () {\n scope.refreshing = false;\n });\n };\n },\n };\n },\n ],\n);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport Utility from '../../../../utility';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_TAGS_TAGSSELECTOR_DIRECTIVE =\n 'spinnaker.azure.serverGroup.configure.wizard.tags.directive';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_TAGS_TAGSSELECTOR_DIRECTIVE; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_TAGS_TAGSSELECTOR_DIRECTIVE, [])\n .directive('azureTagsSelector', function () {\n return {\n restrict: 'E',\n templateUrl: require('./tagsSelector.directive.html'),\n scope: {},\n bindToController: {\n command: '=',\n },\n controllerAs: 'tagsSelectorCtrl',\n controller: 'TagsSelectorCtrl',\n };\n })\n .controller('TagsSelectorCtrl', [\n '$scope',\n function () {\n this.getTagResult = function () {\n return Utility.checkTags(this.command.instanceTags);\n };\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_ZONES_ZONESELECTOR_DIRECTIVE =\n 'spinnaker.azure.serverGroup.configure.wizard.capacity.zone.directive';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_ZONES_ZONESELECTOR_DIRECTIVE; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_ZONES_ZONESELECTOR_DIRECTIVE, []).directive('azureZoneSelector', function () {\n return {\n restrict: 'E',\n templateUrl: require('./zoneSelector.directive.html'),\n scope: {},\n bindToController: {\n command: '=',\n },\n controllerAs: 'vm',\n controller: [\n '$scope',\n function ($scope) {\n this.updateEnableInboundNAT = () => {\n if ($scope.vm.command.zonesEnabled) {\n $scope.vm.command.enableInboundNAT = false;\n }\n };\n },\n ],\n };\n});\n","import { module } from 'angular';\n\nimport { AZURE_SERVERGROUP_SERVERGROUP_TRANSFORMER } from '../serverGroup.transformer';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_SERVERGROUPINSTANCEARCHETYPE_CONTROLLER } from './wizard/ServerGroupInstanceArchetype.controller';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_SERVERGROUPINSTANCETYPE_CONTROLLER } from './wizard/ServerGroupInstanceType.controller';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_SERVERGROUPADVANCEDSETTINGS_CONTROLLER } from './wizard/advancedSettings/ServerGroupAdvancedSettings.controller';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_ADVANCEDSETTINGSSELECTOR_DIRECTIVE } from './wizard/advancedSettings/advancedSettingsSelector.directive';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_BASICSETTINGS_SERVERGROUPBASICSETTINGS_CONTROLLER } from './wizard/basicSettings/ServerGroupBasicSettings.controller';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_CAPACITY_CAPACITYSELECTOR_DIRECTIVE } from './wizard/capacity/capacitySelector.directive';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_HEALTHSETTINGS_SERVERGROUPHEALTHSETTINGS_CONTROLLER } from './wizard/healthSettings/ServerGroupHealthSettings.controller';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_HEALTHSETTINGS_HEALTHSETTINGSSELECTOR_DIRECTIVE } from './wizard/healthSettings/healthSettingsSelector.directive';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_IMAGESETTINGS_SERVERGROUPIMAGESETTINGS_CONTROLLER } from './wizard/image/ServerGroupImageSettings.controller';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_IMAGESETTINGS_IMAGESETTINGS_DIRECTIVE } from './wizard/image/imageSettingsSelector.directive';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_SERVERGROUPLOADBALANCERS_CONTROLLER } from './wizard/loadBalancers/ServerGroupLoadBalancers.controller';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_SERVERGROUPLOADBALANCERSSELECTOR_DIRECTIVE } from './wizard/loadBalancers/serverGroupLoadBalancersSelector.directive';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_NETWORKSETTINGS_SERVERGROUPNETWORKSETTINGS_CONTROLLER } from './wizard/networkSettings/ServerGroupNetworkSettings.controller';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_NETWORKSETTINGS_SERVERGROUPNETWORKSETTINGSSELECTOR_DIRECTIVE } from './wizard/networkSettings/ServerGroupNetworkSettingsSelector.directive';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUP_SERVERGROUPSECURITYGROUPS_CONTROLLER } from './wizard/securityGroup/ServerGroupSecurityGroups.controller';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUP_SERVERGROUPSECURITYGROUPSSELECTOR_DIRECTIVE } from './wizard/securityGroup/serverGroupSecurityGroupsSelector.directive';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_TAGS_TAGSSELECTOR_DIRECTIVE } from './wizard/tags/tagsSelector.directive';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_ZONES_ZONESELECTOR_DIRECTIVE } from './wizard/zones/zoneSelector.directive';\n\n('use strict');\n\nexport const AZURE_SERVERGROUP_CONFIGURE_SERVERGROUP_CONFIGURE_AZURE_MODULE = 'spinnaker.azure.serverGroup.configure';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_SERVERGROUP_CONFIGURE_AZURE_MODULE; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_SERVERGROUP_CONFIGURE_AZURE_MODULE, [\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_BASICSETTINGS_SERVERGROUPBASICSETTINGS_CONTROLLER,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_SERVERGROUPLOADBALANCERS_CONTROLLER,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_SERVERGROUPINSTANCEARCHETYPE_CONTROLLER,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_SERVERGROUPINSTANCETYPE_CONTROLLER,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUP_SERVERGROUPSECURITYGROUPS_CONTROLLER,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_SERVERGROUPADVANCEDSETTINGS_CONTROLLER,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_HEALTHSETTINGS_HEALTHSETTINGSSELECTOR_DIRECTIVE,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_IMAGESETTINGS_IMAGESETTINGS_DIRECTIVE,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_IMAGESETTINGS_SERVERGROUPIMAGESETTINGS_CONTROLLER,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_HEALTHSETTINGS_SERVERGROUPHEALTHSETTINGS_CONTROLLER,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_SERVERGROUPLOADBALANCERSSELECTOR_DIRECTIVE,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_CAPACITY_CAPACITYSELECTOR_DIRECTIVE,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUP_SERVERGROUPSECURITYGROUPSSELECTOR_DIRECTIVE,\n AZURE_SERVERGROUP_SERVERGROUP_TRANSFORMER,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_ADVANCEDSETTINGSSELECTOR_DIRECTIVE,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_NETWORKSETTINGS_SERVERGROUPNETWORKSETTINGS_CONTROLLER,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_NETWORKSETTINGS_SERVERGROUPNETWORKSETTINGSSELECTOR_DIRECTIVE,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_ZONES_ZONESELECTOR_DIRECTIVE,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_TAGS_TAGSSELECTOR_DIRECTIVE,\n]);\n","'use strict';\n\nimport * as angular from 'angular';\nimport _ from 'lodash';\n\nimport {\n AccountService,\n CACHE_INITIALIZER_SERVICE,\n LOAD_BALANCER_READ_SERVICE,\n SECURITY_GROUP_READER,\n} from '@spinnaker/core';\nimport { AZURE_IMAGE_IMAGE_READER } from '../../image/image.reader';\nimport { AZURE_INSTANCE_AZUREINSTANCETYPE_SERVICE } from '../../instance/azureInstanceType.service';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_SERVERGROUPCONFIGURATION_SERVICE =\n 'spinnaker.azure.serverGroup.configure.service';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_SERVERGROUPCONFIGURATION_SERVICE; // for backwards compatibility\nangular\n .module(AZURE_SERVERGROUP_CONFIGURE_SERVERGROUPCONFIGURATION_SERVICE, [\n AZURE_IMAGE_IMAGE_READER,\n LOAD_BALANCER_READ_SERVICE,\n SECURITY_GROUP_READER,\n CACHE_INITIALIZER_SERVICE,\n AZURE_INSTANCE_AZUREINSTANCETYPE_SERVICE,\n ])\n .factory('azureServerGroupConfigurationService', [\n '$q',\n 'azureImageReader',\n 'securityGroupReader',\n 'cacheInitializer',\n 'loadBalancerReader',\n 'azureInstanceTypeService',\n function (\n $q,\n azureImageReader,\n securityGroupReader,\n cacheInitializer,\n loadBalancerReader,\n azureInstanceTypeService,\n ) {\n const dataDiskTypes = ['Standard_LRS', 'StandardSSD_LRS', 'Premium_LRS'];\n const dataDiskCachingTypes = ['None', 'ReadOnly', 'ReadWrite'];\n\n const healthCheckTypes = ['EC2', 'ELB'];\n const terminationPolicies = [\n 'OldestInstance',\n 'NewestInstance',\n 'OldestLaunchConfiguration',\n 'ClosestToNextInstanceHour',\n 'Default',\n ];\n\n function configureUpdateCommand(command) {\n command.backingData = {\n healthCheckTypes: angular.copy(healthCheckTypes),\n terminationPolicies: angular.copy(terminationPolicies),\n };\n }\n\n function configureCommand(application, command) {\n return $q\n .all([\n AccountService.getCredentialsKeyedByAccount('azure'),\n securityGroupReader.loadSecurityGroups(),\n loadBalancerReader.loadLoadBalancers(application.name),\n ])\n .then(function ([credentialsKeyedByAccount, securityGroups, loadBalancers]) {\n command.backingData = {\n credentialsKeyedByAccount,\n securityGroups,\n loadBalancers,\n dataDiskTypes: angular.copy(dataDiskTypes),\n dataDiskCachingTypes: angular.copy(dataDiskCachingTypes),\n accounts: _.keys(credentialsKeyedByAccount),\n filtered: {},\n };\n attachEventHandlers(command);\n });\n }\n\n function configureInstanceTypes(command) {\n const result = {\n dirty: {},\n };\n if (command.region) {\n const results = [result.dirty];\n\n // results.push(configureCustomInstanceTypes(command).dirty);\n results.push(configureStandardInstanceTypes(command).dirty);\n\n angular.extend(...results);\n } else {\n command.backingData.filtered.instanceTypes = [];\n }\n return result;\n }\n\n function configureStandardInstanceTypes(command) {\n const c = command;\n const result = {\n dirty: {},\n };\n\n const locations = [c.region];\n const { credentialsKeyedByAccount } = c.backingData;\n const { locationToInstanceTypesMap } = credentialsKeyedByAccount[c.credentials];\n\n if (locations.every((l) => !l)) {\n return result;\n }\n\n const filtered = azureInstanceTypeService\n .getAvailableTypesForRegions(locationToInstanceTypesMap, locations)\n .map((type) => type.name);\n\n const instanceType = c.instanceType;\n if (_.every([instanceType, !_.startsWith(instanceType, 'custom'), !_.includes(filtered, instanceType)])) {\n result.dirty.instanceType = c.instanceType;\n c.instanceType = null;\n }\n c.backingData.filtered.instanceTypes = filtered;\n return result;\n }\n\n function configureImages(command) {\n const result = {\n dirty: {},\n };\n let regionalImages = null;\n if (command.viewState.disableImageSelection) {\n return result;\n }\n if (command.region) {\n regionalImages = command.backingData.packageImages\n .filter(function (image) {\n return image.amis && image.amis[command.region];\n })\n .map(function (image) {\n return {\n imageName: image.imageName,\n ami: image.amis ? image.amis[command.region][0] : null,\n };\n });\n if (\n command.amiName &&\n !regionalImages.some(function (image) {\n return image.imageName === command.amiName;\n })\n ) {\n result.dirty.amiName = true;\n command.amiName = null;\n }\n } else {\n command.amiName = null;\n }\n command.backingData.filtered.images = regionalImages;\n return result;\n }\n\n function configureZones(command) {\n const result = { dirty: {} };\n const filteredData = command.backingData.filtered;\n if (!command.region) {\n return result;\n }\n let { regionsSupportZones, availabilityZones } = command.backingData.credentialsKeyedByAccount[\n command.credentials\n ];\n regionsSupportZones = regionsSupportZones || [];\n availabilityZones = availabilityZones || [];\n filteredData.zones = regionsSupportZones.includes(command.region) ? availabilityZones : [];\n\n return result;\n }\n\n function getRegionalSecurityGroups(command) {\n const newSecurityGroups = command.backingData.securityGroups[command.credentials] || {\n azure: {},\n };\n return _.chain(newSecurityGroups[command.region]).sortBy('name').value();\n }\n\n function configureSecurityGroupOptions(command) {\n const result = {\n dirty: {},\n };\n let currentOptions;\n if (command.backingData.filtered.securityGroups) {\n currentOptions = command.backingData.filtered.securityGroups;\n }\n const newRegionalSecurityGroups = getRegionalSecurityGroups(command);\n if (command.selectedSecurityGroup) {\n // one has not been previously selected. We are either configuring for the\n //first time or they changed regions or account\n command.selectedSecurityGroup = null;\n result.dirty.securityGroups = true;\n }\n if (currentOptions != newRegionalSecurityGroups) {\n command.backingData.filtered.securityGroups = newRegionalSecurityGroups;\n result.dirty.securityGroups = true;\n }\n\n if (command.backingData.filtered.securityGroups === []) {\n command.viewState.securityGroupsConfigured = false;\n } else {\n command.viewState.securityGroupsConfigured = true;\n }\n\n return result;\n }\n\n function refreshSecurityGroups(command, skipCommandReconfiguration) {\n return cacheInitializer.refreshCache('securityGroups').then(function () {\n return securityGroupReader.getAllSecurityGroups().then(function (securityGroups) {\n command.backingData.securityGroups = securityGroups;\n if (!skipCommandReconfiguration) {\n configureSecurityGroupOptions(command);\n }\n });\n });\n }\n\n function getLoadBalancerNames(loadBalancers) {\n return _.chain(loadBalancers).map('name').uniq().value().sort();\n }\n\n function configureLoadBalancerOptions(command) {\n const result = {\n dirty: {},\n };\n const current = command.loadBalancers;\n const newLoadBalancers = getLoadBalancerNames(command.backingData.loadBalancers);\n\n if (current && command.loadBalancers) {\n const matched = _.intersection(newLoadBalancers, command.loadBalancers);\n const removed = _.xor(matched, current);\n command.loadBalancers = matched;\n if (removed.length) {\n result.dirty.loadBalancers = removed;\n }\n }\n command.backingData.filtered.loadBalancers = newLoadBalancers;\n return result;\n }\n\n function refreshLoadBalancers(command, skipCommandReconfiguration) {\n return loadBalancerReader.listLoadBalancers('azure').then(function (loadBalancers) {\n command.backingData.loadBalancers = loadBalancers;\n if (!skipCommandReconfiguration) {\n configureLoadBalancerOptions(command);\n }\n });\n }\n\n function configureLoadBalancers(command) {\n const result = {\n dirty: {},\n };\n const temp = command.backingData.loadBalancers;\n const filterlist = _.filter(temp, function (lb) {\n return lb.account === command.credentials && lb.region === command.region;\n });\n\n command.loadBalancers = getLoadBalancerNames(filterlist);\n command.viewState.loadBalancersConfigured = true;\n\n return result;\n }\n\n function attachEventHandlers(cmd) {\n cmd.regionChanged = function regionChanged(command, isInit = false) {\n const result = {\n dirty: {},\n };\n if (command.region && command.credentials) {\n angular.extend(result.dirty, configureLoadBalancers(command).dirty);\n angular.extend(result.dirty, configureSecurityGroupOptions(command).dirty);\n angular.extend(result.dirty, configureInstanceTypes(command).dirty);\n angular.extend(result.dirty, configureZones(command).dirty);\n }\n // reset previous set values\n if (!isInit) {\n command.loadBalancerName = null;\n command.loadBalancerType = null;\n command.vnet = null;\n command.vnetResourceGroup = null;\n command.subnet = null;\n command.selectedSubnet = null;\n command.selectedVnet = null;\n command.selectedVnetSubnets = [];\n command.viewState.networkSettingsConfigured = false;\n command.selectedSecurityGroup = null;\n command.securityGroupName = null;\n command.zonesEnabled = false;\n command.zones = [];\n }\n\n return result;\n };\n\n cmd.credentialsChanged = function credentialsChanged(command, isInit) {\n const result = {\n dirty: {},\n };\n const backingData = command.backingData;\n if (command.credentials) {\n const regionsForAccount = backingData.credentialsKeyedByAccount[command.credentials] || {\n regions: [],\n defaultKeyPair: null,\n };\n backingData.filtered.regions = regionsForAccount.regions;\n if (\n !_.chain(backingData.filtered.regions)\n .some({\n name: command.region,\n })\n .value()\n ) {\n command.region = null;\n result.dirty.region = true;\n } else {\n angular.extend(result.dirty, command.regionChanged(command, isInit).dirty);\n }\n if (command.region) {\n angular.extend(result.dirty, configureLoadBalancers(command).dirty);\n }\n angular.extend(result.dirty, configureInstanceTypes(command).dirty);\n } else {\n command.region = null;\n }\n return result;\n };\n }\n\n function refreshInstanceTypes(command) {\n return cacheInitializer.refreshCache('instanceTypes').then(function () {\n return azureInstanceTypeService.getAllTypesByRegion().then(function (instanceTypes) {\n command.backingData.instanceTypes = instanceTypes;\n configureInstanceTypes(command);\n });\n });\n }\n\n return {\n configureUpdateCommand: configureUpdateCommand,\n configureCommand: configureCommand,\n configureImages: configureImages,\n configureSecurityGroupOptions: configureSecurityGroupOptions,\n configureLoadBalancerOptions: configureLoadBalancerOptions,\n refreshLoadBalancers: refreshLoadBalancers,\n refreshSecurityGroups: refreshSecurityGroups,\n getRegionalSecurityGroups: getRegionalSecurityGroups,\n refreshInstanceTypes: refreshInstanceTypes,\n configureZones: configureZones,\n };\n },\n ]);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport { module } from 'angular';\n\nimport { FirewallLabels, ModalWizard, SERVER_GROUP_WRITER, TaskMonitor } from '@spinnaker/core';\n\nimport { AZURE_SERVERGROUP_SERVERGROUP_TRANSFORMER } from '../../serverGroup.transformer';\nimport { AZURE_SERVERGROUP_CONFIGURE_SERVERGROUPCONFIGURATION_SERVICE } from '../serverGroupConfiguration.service';\nimport Utility from '../../../utility';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_CLONESERVERGROUP_AZURE_CONTROLLER =\n 'spinnaker.azure.cloneServerGroup.controller';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_CLONESERVERGROUP_AZURE_CONTROLLER; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_CLONESERVERGROUP_AZURE_CONTROLLER, [\n UIROUTER_ANGULARJS,\n AZURE_SERVERGROUP_CONFIGURE_SERVERGROUPCONFIGURATION_SERVICE,\n AZURE_SERVERGROUP_SERVERGROUP_TRANSFORMER,\n SERVER_GROUP_WRITER,\n]).controller('azureCloneServerGroupCtrl', [\n '$scope',\n '$uibModalInstance',\n '$q',\n '$state',\n 'serverGroupWriter',\n 'azureServerGroupConfigurationService',\n 'serverGroupCommand',\n 'application',\n 'title',\n function (\n $scope,\n $uibModalInstance,\n $q,\n $state,\n serverGroupWriter,\n azureServerGroupConfigurationService,\n serverGroupCommand,\n application,\n title,\n ) {\n $scope.pages = {\n templateSelection: require('./templateSelection.html'),\n basicSettings: require('./basicSettings/basicSettings.html'),\n imageSettings: require('./image/imageSettings.html'),\n healthSettings: require('./healthSettings/healthSettings.html'),\n loadBalancers: require('./loadBalancers/loadBalancers.html'),\n networkSettings: require('./networkSettings/networkSettings.html'),\n securityGroups: require('./securityGroup/securityGroups.html'),\n instanceType: require('./instanceType/instanceType.html'),\n zones: require('./capacity/zones.html'),\n tags: require('./tags/tags.html'),\n advancedSettings: require('./advancedSettings/advancedSettings.html'),\n };\n\n $scope.firewallsLabel = FirewallLabels.get('Firewalls');\n\n $scope.title = title;\n\n $scope.applicationName = application.name;\n $scope.application = application;\n $scope.command = serverGroupCommand;\n\n // Give regions an init value to prevent it being undefined. If so, the React component RegionSelectField would get \"undefined\" for property regions\n // and then be unmounted so that the region selector would be hidden.\n $scope.command.backingData = $scope.command.backingData || {};\n $scope.command.backingData.filtered = $scope.command.backingData.filtered || {};\n $scope.command.backingData.filtered.regions = $scope.command.backingData.filtered.regions || [];\n\n $scope.state = {\n loaded: false,\n requiresTemplateSelection: !!serverGroupCommand.viewState.requiresTemplateSelection,\n };\n\n this.templateSelectionText = {\n copied: [\n 'account, region, subnet, cluster name (stack, details)',\n 'load balancers',\n FirewallLabels.get('firewalls'),\n 'instance type',\n 'all fields on the Advanced Settings page',\n ],\n notCopied: [],\n additionalCopyText:\n 'If a server group exists in this cluster at the time of deployment, its scaling policies will be copied over to the new server group.',\n };\n\n if (!$scope.command.viewState.disableStrategySelection) {\n this.templateSelectionText.notCopied.push(\n 'the deployment strategy (if any) used to deploy the most recent server group',\n );\n }\n\n function onApplicationRefresh() {\n // If the user has already closed the modal, do not navigate to the new details view\n if ($scope.$$destroyed) {\n return;\n }\n const cloneStage = $scope.taskMonitor.task.execution.stages.find((stage) => stage.type === 'cloneServerGroup');\n if (cloneStage && cloneStage.context['deploy.server.groups']) {\n const newServerGroupName = cloneStage.context['deploy.server.groups'][$scope.command.region];\n if (newServerGroupName) {\n const newStateParams = {\n serverGroup: newServerGroupName,\n accountId: $scope.command.credentials,\n region: $scope.command.region,\n provider: 'azure',\n };\n let transitionTo = '^.^.^.clusters.serverGroup';\n if ($state.includes('**.clusters.serverGroup')) {\n // clone via details, all view\n transitionTo = '^.serverGroup';\n }\n if ($state.includes('**.clusters.cluster.serverGroup')) {\n // clone or create with details open\n transitionTo = '^.^.serverGroup';\n }\n if ($state.includes('**.clusters')) {\n // create new, no details open\n transitionTo = '.serverGroup';\n }\n $state.go(transitionTo, newStateParams);\n }\n }\n }\n\n function onTaskComplete() {\n application.serverGroups.refresh();\n application.serverGroups.onNextRefresh($scope, onApplicationRefresh);\n }\n\n $scope.taskMonitor = new TaskMonitor({\n application: application,\n title: 'Creating your server group',\n modalInstance: $uibModalInstance,\n onTaskComplete: onTaskComplete,\n });\n\n function configureCommand() {\n azureServerGroupConfigurationService.configureCommand(application, serverGroupCommand).then(function () {\n const mode = serverGroupCommand.viewState.mode;\n if (mode === 'clone' || mode === 'create') {\n serverGroupCommand.viewState.useAllImageSelection = true;\n }\n $scope.state.loaded = true;\n initializeWizardState();\n initializeSelectOptions();\n initializeWatches();\n });\n }\n\n function initializeWizardState() {\n const mode = serverGroupCommand.viewState.mode;\n if (mode === 'clone' || mode === 'editPipeline') {\n ModalWizard.markComplete('basic-settings');\n ModalWizard.markComplete('load-balancers');\n ModalWizard.markComplete('network-settings');\n ModalWizard.markComplete('security-groups');\n ModalWizard.markComplete('instance-type');\n ModalWizard.markComplete('zones');\n }\n }\n\n function initializeWatches() {\n $scope.$watch('command.credentials', createResultProcessor($scope.command.credentialsChanged));\n $scope.$watch('command.region', createResultProcessor($scope.command.regionChanged));\n }\n\n function initializeSelectOptions() {\n processCommandUpdateResult($scope.command.credentialsChanged($scope.command, true));\n processCommandUpdateResult($scope.command.regionChanged($scope.command, true));\n }\n\n function createResultProcessor(method) {\n return function (newValue, oldValue) {\n if (newValue !== oldValue) {\n processCommandUpdateResult(method($scope.command));\n }\n };\n }\n\n function processCommandUpdateResult(result) {\n if (result.dirty.loadBalancers) {\n ModalWizard.markDirty('load-balancers');\n ModalWizard.markDirty('network-settings');\n }\n if (result.dirty.securityGroups) {\n ModalWizard.markDirty('security-groups');\n }\n if (result.dirty.instanceType) {\n ModalWizard.markDirty('instance-type');\n }\n if (result.dirty.zoneEnabled || result.dirty.zones) {\n ModalWizard.markDirty('zones');\n }\n }\n\n this.submit = function () {\n if ($scope.command.viewState.mode === 'editPipeline' || $scope.command.viewState.mode === 'createPipeline') {\n return $uibModalInstance.close($scope.command);\n }\n $scope.taskMonitor.submit(function () {\n return serverGroupWriter.cloneServerGroup($scope.command, application);\n });\n };\n\n this.cancel = function () {\n $uibModalInstance.dismiss();\n };\n\n this.toggleSuspendedProcess = function (process) {\n $scope.command.suspendedProcesses = $scope.command.suspendedProcesses || [];\n const processIndex = $scope.command.suspendedProcesses.indexOf(process);\n if (processIndex === -1) {\n $scope.command.suspendedProcesses.push(process);\n } else {\n $scope.command.suspendedProcesses.splice(processIndex, 1);\n }\n };\n\n this.processIsSuspended = function (process) {\n return $scope.command.suspendedProcesses.includes(process);\n };\n\n if (!$scope.state.requiresTemplateSelection) {\n configureCommand();\n } else {\n $scope.state.loaded = true;\n }\n\n this.templateSelected = () => {\n $scope.state.requiresTemplateSelection = false;\n configureCommand();\n };\n\n this.isValid = function () {\n return (\n $scope.command &&\n $scope.command.application &&\n $scope.command.credentials &&\n $scope.command.instanceType &&\n $scope.command.region &&\n (!$scope.command.zonesEnabled || $scope.command.zones.length !== 0) &&\n Utility.checkTags($scope.command.instanceTags).isValid\n );\n };\n },\n]);\n","import React from 'react';\n\nimport { UserVerification } from '@spinnaker/core';\n\nexport interface IAzureModalFooterProps {\n onSubmit: () => void;\n onCancel: () => void;\n isValid: boolean;\n account: string;\n}\n\nexport interface IAzureModalFooterState {\n verified: boolean;\n}\n\nexport class AzureModalFooter extends React.Component<IAzureModalFooterProps, IAzureModalFooterState> {\n constructor(props: any) {\n super(props);\n }\n\n public state = { verified: false };\n\n private handleVerification = (verified: boolean) => {\n this.setState({ verified });\n };\n\n public render() {\n const { onSubmit, onCancel, isValid, account } = this.props;\n const { verified } = this.state;\n\n return (\n <div className=\"modal-footer\">\n {<UserVerification expectedValue={account} onValidChange={this.handleVerification} />}\n <button className=\"btn btn-default\" onClick={onCancel}>\n Cancel\n </button>\n <button type=\"submit\" className=\"btn btn-primary\" onClick={onSubmit} disabled={!isValid || !verified}>\n Submit\n </button>\n </div>\n );\n }\n}\n","import React from 'react';\nimport { Modal } from 'react-bootstrap';\nimport Select from 'react-select';\n\nimport type { IModalComponentProps } from '@spinnaker/core';\nimport {\n ModalClose,\n noop,\n ReactInjector,\n ReactModal,\n TaskMonitor,\n TaskMonitorWrapper,\n TaskReason,\n} from '@spinnaker/core';\n\nimport { AzureModalFooter } from '../../../common/AzureModalFooter';\n\nexport interface IAzureRollbackServerGroupModalProps extends IModalComponentProps {\n application: any;\n serverGroup: any;\n disabledServerGroups: any;\n}\n\nexport interface IAzureRollbackServerGroupModalState {\n taskMonitor: TaskMonitor;\n submitting: boolean;\n command: any;\n}\n\nexport class AzureRollbackServerGroupModal extends React.Component<\n IAzureRollbackServerGroupModalProps,\n IAzureRollbackServerGroupModalState\n> {\n public static defaultProps: Partial<IAzureRollbackServerGroupModalProps> = {\n closeModal: noop,\n dismissModal: noop,\n };\n\n public static show(props: IAzureRollbackServerGroupModalProps) {\n const modalProps = {};\n return ReactModal.show(AzureRollbackServerGroupModal, props, modalProps);\n }\n\n constructor(props: IAzureRollbackServerGroupModalProps) {\n super(props);\n\n const { application, serverGroup } = props;\n\n this.state = {\n taskMonitor: new TaskMonitor({\n application: application,\n title: 'Rolling back your server group',\n modalInstance: TaskMonitor.modalInstanceEmulation(() => this.props.dismissModal()),\n }),\n submitting: true,\n command: {\n interestingHealthProviderNames: [],\n rollbackType: 'EXPLICIT',\n rollbackContext: {\n rollbackServerGroupName: serverGroup.name,\n enableAndDisableOnly: true,\n },\n },\n };\n }\n\n private close = (args?: any) => {\n this.props.dismissModal.apply(null, args);\n };\n\n private submit = () => {\n const { command, taskMonitor } = this.state;\n const { serverGroup, application } = this.props;\n\n taskMonitor.submit(() => {\n return ReactInjector.serverGroupWriter.rollbackServerGroup(serverGroup, application, command);\n });\n };\n\n private filterServerGroups = (disabledServerGroups: any) => {\n const filteredDisabledServerGroups = disabledServerGroups\n .filter((disabledServerGroup: any) => disabledServerGroup.instanceCounts.total !== 0)\n .sort((a: any, b: any) => b.name.localeCompare(a.name));\n\n return filteredDisabledServerGroups;\n };\n\n private isValid = () => {\n const restoreServerGroupName = this.state.command.rollbackContext.restoreServerGroupName;\n return restoreServerGroupName !== undefined;\n };\n\n private handleServerGroupChange = (restoreServerGroupOption: any) => {\n const { disabledServerGroups } = this.props;\n const newCommand = { ...this.state.command };\n newCommand.rollbackContext.restoreServerGroupName = restoreServerGroupOption.value;\n const restoreServerGroup = this.filterServerGroups(disabledServerGroups).find(function (disabledServerGroup: any) {\n return disabledServerGroup.name === restoreServerGroupOption.value;\n });\n newCommand.targetSize = restoreServerGroup.capacity.max;\n this.setState({\n command: newCommand,\n });\n };\n\n private handleTaskReasonChange = (taskReason?: any) => {\n const newCommand = { ...this.state.command };\n newCommand.reason = taskReason;\n this.setState({\n command: newCommand,\n });\n };\n\n public render() {\n const { command, taskMonitor, submitting } = this.state;\n const { serverGroup, disabledServerGroups } = this.props;\n const isValidSG = this.isValid();\n const disabledServerGroupOptions = this.filterServerGroups(disabledServerGroups).map(\n (disabledServerGroup: any) => ({\n label: disabledServerGroup.name,\n value: disabledServerGroup.name,\n }),\n );\n\n return (\n <Modal onHide={this.close}>\n <TaskMonitorWrapper monitor={taskMonitor} />\n {submitting && (\n <form role=\"form\">\n <ModalClose dismiss={this.close} />\n <Modal.Header>\n <Modal.Title>Rollback {serverGroup.name}</Modal.Title>\n </Modal.Header>\n <Modal.Body>\n <div className=\"row\">\n <div className=\"col-sm-3 sm-label-right\">Restore to</div>\n <div className=\"col-sm-6\">\n <Select\n value={command.rollbackContext.restoreServerGroupName}\n onChange={this.handleServerGroupChange}\n options={disabledServerGroupOptions}\n />\n </div>\n </div>\n <TaskReason reason={command.taskReason} onChange={this.handleTaskReasonChange} />\n </Modal.Body>\n <AzureModalFooter\n onSubmit={this.submit}\n onCancel={this.close}\n isValid={isValidSG}\n account={serverGroup.account}\n />\n </form>\n )}\n </Modal>\n );\n }\n}\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport * as angular from 'angular';\nimport _ from 'lodash';\n\nimport {\n ConfirmationModalService,\n FirewallLabels,\n SERVER_GROUP_WRITER,\n ServerGroupReader,\n ServerGroupWarningMessageService,\n} from '@spinnaker/core';\n\nimport '../configure/serverGroup.configure.azure.module';\nimport { AZURE_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE } from '../configure/serverGroupCommandBuilder.service';\nimport { AzureRollbackServerGroupModal } from './rollback/RollbackServerGroupModal';\n\nexport const AZURE_SERVERGROUP_DETAILS_SERVERGROUPDETAILS_AZURE_CONTROLLER =\n 'spinnaker.azure.serverGroup.details.controller';\nexport const name = AZURE_SERVERGROUP_DETAILS_SERVERGROUPDETAILS_AZURE_CONTROLLER; // for backwards compatibility\nangular\n .module(AZURE_SERVERGROUP_DETAILS_SERVERGROUPDETAILS_AZURE_CONTROLLER, [\n UIROUTER_ANGULARJS,\n AZURE_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE,\n SERVER_GROUP_WRITER,\n ])\n .controller('azureServerGroupDetailsCtrl', [\n '$scope',\n '$state',\n '$templateCache',\n 'app',\n 'serverGroup',\n 'azureServerGroupCommandBuilder',\n '$uibModal',\n 'serverGroupWriter',\n function (\n $scope,\n $state,\n $templateCache,\n app,\n serverGroup,\n azureServerGroupCommandBuilder,\n $uibModal,\n serverGroupWriter,\n ) {\n $scope.state = {\n loading: true,\n };\n\n $scope.firewallsLabel = FirewallLabels.get('Firewalls');\n\n this.application = app;\n\n function extractServerGroupSummary() {\n let summary = _.find(app.serverGroups.data, function (toCheck) {\n return (\n toCheck.name === serverGroup.name &&\n toCheck.account === serverGroup.accountId &&\n toCheck.region === serverGroup.region\n );\n });\n if (!summary) {\n app.loadBalancers.data.some(function (loadBalancer) {\n if (loadBalancer.account === serverGroup.accountId && loadBalancer.region === serverGroup.region) {\n return loadBalancer.serverGroups.some(function (possibleServerGroup) {\n if (possibleServerGroup.name === serverGroup.name) {\n summary = possibleServerGroup;\n return true;\n }\n });\n }\n });\n }\n if (!summary) {\n $state.go('^');\n }\n return summary;\n }\n\n function retrieveServerGroup() {\n const summary = extractServerGroupSummary();\n return ServerGroupReader.getServerGroup(\n app.name,\n serverGroup.accountId,\n serverGroup.region,\n serverGroup.name,\n ).then(function (details) {\n cancelLoader();\n\n angular.extend(details, summary);\n details.account = serverGroup.accountId; // it's possible the summary was not found because the clusters are still loading\n\n $scope.serverGroup = details;\n\n if (!_.isEmpty($scope.serverGroup)) {\n $scope.image = details.image ? details.image : undefined;\n\n if (details.image && details.image.description) {\n const tags = details.image.description.split(', ');\n tags.forEach(function (tag) {\n const keyVal = tag.split('=');\n if (keyVal.length === 2 && keyVal[0] === 'ancestor_name') {\n details.image.baseImage = keyVal[1];\n }\n });\n }\n\n if (details.launchConfig && details.launchConfig.securityGroups) {\n $scope.securityGroups = _.chain(details.launchConfig.securityGroups)\n .map(function (id) {\n return (\n _.find(app.securityGroups.data, {\n accountName: serverGroup.accountId,\n region: serverGroup.region,\n id: id,\n }) ||\n _.find(app.securityGroups.data, {\n accountName: serverGroup.accountId,\n region: serverGroup.region,\n name: id,\n })\n );\n })\n .compact()\n .value();\n }\n } else {\n $state.go('^');\n }\n });\n }\n\n function cancelLoader() {\n $scope.state.loading = false;\n }\n\n retrieveServerGroup().then(() => {\n // If the user navigates away from the view before the initial retrieveServerGroup call completes,\n // do not bother subscribing to the refresh\n if (!$scope.$$destroyed) {\n app.serverGroups.onRefresh($scope, retrieveServerGroup);\n }\n });\n\n this.destroyServerGroup = function destroyServerGroup() {\n const serverGroup = $scope.serverGroup;\n\n const stateParams = {\n name: serverGroup.name,\n accountId: serverGroup.account,\n region: serverGroup.region,\n };\n\n const taskMonitor = {\n application: app,\n title: 'Destroying ' + serverGroup.name,\n onTaskComplete: function () {\n if ($state.includes('**.serverGroup', stateParams)) {\n $state.go('^');\n }\n },\n };\n\n const submitMethod = function () {\n return serverGroupWriter.destroyServerGroup(serverGroup, app);\n };\n\n const confirmationModalParams = {\n header: 'Really destroy ' + serverGroup.name + '?',\n buttonText: 'Destroy ' + serverGroup.name,\n account: serverGroup.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n };\n\n ServerGroupWarningMessageService.addDestroyWarningMessage(app, serverGroup, confirmationModalParams);\n\n ConfirmationModalService.confirm(confirmationModalParams);\n };\n\n this.disableServerGroup = function disableServerGroup() {\n const serverGroup = $scope.serverGroup;\n\n const taskMonitor = {\n application: app,\n title: 'Disabling ' + serverGroup.name,\n };\n\n const submitMethod = () => serverGroupWriter.disableServerGroup(serverGroup, app);\n\n const confirmationModalParams = {\n header: 'Really disable ' + serverGroup.name + '?',\n buttonText: 'Disable ' + serverGroup.name,\n account: serverGroup.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n };\n\n ServerGroupWarningMessageService.addDisableWarningMessage(app, serverGroup, confirmationModalParams);\n\n ConfirmationModalService.confirm(confirmationModalParams);\n };\n\n this.enableServerGroup = function enableServerGroup() {\n const serverGroup = $scope.serverGroup;\n\n const taskMonitor = {\n application: app,\n title: 'Enabling ' + serverGroup.name,\n };\n\n const submitMethod = (params) => {\n return serverGroupWriter.enableServerGroup(\n serverGroup,\n app,\n angular.extend(params, {\n interestingHealthProviderNames: [], // bypass the check for now; will change this later to ['azureService']\n }),\n );\n };\n\n ConfirmationModalService.confirm({\n header: 'Really enable ' + serverGroup.name + '?',\n buttonText: 'Enable ' + serverGroup.name,\n account: serverGroup.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n });\n };\n\n this.rollbackServerGroup = () => {\n const serverGroup = $scope.serverGroup;\n const cluster = _.find(app.clusters, { name: serverGroup.cluster, account: serverGroup.account });\n const disabledServerGroups = _.filter(cluster.serverGroups, { isDisabled: true, region: serverGroup.region });\n AzureRollbackServerGroupModal.show({ application: app, serverGroup, disabledServerGroups });\n };\n\n this.cloneServerGroup = (serverGroup) => {\n $uibModal.open({\n templateUrl: require('../configure/wizard/serverGroupWizard.html'),\n controller: 'azureCloneServerGroupCtrl as ctrl',\n size: 'lg',\n resolve: {\n title: () => 'Clone ' + serverGroup.name,\n application: () => app,\n serverGroupCommand: () =>\n azureServerGroupCommandBuilder.buildServerGroupCommandFromExisting(app, serverGroup),\n },\n });\n };\n\n this.truncateCommitHash = function () {\n if ($scope.serverGroup && $scope.serverGroup.buildInfo && $scope.serverGroup.buildInfo.commit) {\n return $scope.serverGroup.buildInfo.commit.substring(0, 8);\n }\n return null;\n };\n },\n ]);\n","import { module } from 'angular';\n\nimport { AZURE_SERVERGROUP_DETAILS_SERVERGROUPDETAILS_AZURE_CONTROLLER } from './serverGroupDetails.azure.controller';\n\n('use strict');\n\nexport const AZURE_SERVERGROUP_DETAILS_SERVERGROUP_DETAILS_MODULE = 'spinnaker.azure.serverGroup.details.azure';\nexport const name = AZURE_SERVERGROUP_DETAILS_SERVERGROUP_DETAILS_MODULE; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_DETAILS_SERVERGROUP_DETAILS_MODULE, [\n AZURE_SERVERGROUP_DETAILS_SERVERGROUPDETAILS_AZURE_CONTROLLER,\n]);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { ApplicationNameValidator } from '@spinnaker/core';\n\nexport const AZURE_VALIDATION_APPLICATIONNAME_VALIDATOR = 'spinnaker.azure.validation.applicationName';\nexport const name = AZURE_VALIDATION_APPLICATIONNAME_VALIDATOR; // for backwards compatibility\nmodule(AZURE_VALIDATION_APPLICATIONNAME_VALIDATOR, [])\n .factory('azureApplicationNameValidator', function () {\n function validateSpecialCharacters(name, errors) {\n const pattern = /^([a-zA-Z][a-zA-Z0-9]*)?$/;\n if (!pattern.test(name)) {\n errors.push(\n 'The application name must begin with a letter and must contain only letters or digits. No ' +\n 'special characters are allowed.',\n );\n }\n }\n\n function validate(name) {\n const warnings = [];\n const errors = [];\n\n if (name && name.length) {\n validateSpecialCharacters(name, errors);\n }\n\n return {\n warnings: warnings,\n errors: errors,\n };\n }\n\n return {\n validate: validate,\n };\n })\n .run([\n 'azureApplicationNameValidator',\n function (azureApplicationNameValidator) {\n ApplicationNameValidator.registerValidator('azure', azureApplicationNameValidator);\n },\n ]);\n","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","import { module } from 'angular';\n\nimport { CloudProviderRegistry, DeploymentStrategyRegistry } from '@spinnaker/core';\n\nimport './help/azure.help';\nimport { AZURE_IMAGE_IMAGE_READER } from './image/image.reader';\nimport { AZURE_INSTANCE_AZUREINSTANCETYPE_SERVICE } from './instance/azureInstanceType.service';\nimport { AZURE_INSTANCE_DETAILS_INSTANCE_DETAILS_CONTROLLER } from './instance/details/instance.details.controller';\nimport { AzureLoadBalancerChoiceModal } from './loadBalancer/configure/AzureLoadBalancerChoiceModal';\nimport { AZURE_LOADBALANCER_CONFIGURE_CREATELOADBALANCER_CONTROLLER } from './loadBalancer/configure/createLoadBalancer.controller';\nimport { AZURE_LOADBALANCER_DETAILS_LOADBALANCERDETAIL_CONTROLLER } from './loadBalancer/details/loadBalancerDetail.controller';\nimport { AZURE_LOADBALANCER_LOADBALANCER_TRANSFORMER } from './loadBalancer/loadBalancer.transformer';\nimport logo from './logo/logo_azure.png';\nimport { AZURE_PIPELINE_STAGES_BAKE_AZUREBAKESTAGE } from './pipeline/stages/bake/azureBakeStage';\nimport { AZURE_PIPELINE_STAGES_DESTROYASG_AZUREDESTROYASGSTAGE } from './pipeline/stages/destroyAsg/azureDestroyAsgStage';\nimport { AZURE_PIPELINE_STAGES_DISABLEASG_AZUREDISABLEASGSTAGE } from './pipeline/stages/disableAsg/azureDisableAsgStage';\nimport { AZURE_PIPELINE_STAGES_ENABLEASG_AZUREENABLEASGSTAGE } from './pipeline/stages/enableAsg/azureEnableAsgStage';\nimport { AZURE_SECURITYGROUP_CONFIGURE_CREATESECURITYGROUPCTRL } from './securityGroup/configure/CreateSecurityGroupCtrl';\nimport { AZURE_SECURITYGROUP_CONFIGURE_EDITSECURITYGROUPCTRL } from './securityGroup/configure/EditSecurityGroupCtrl';\nimport { AZURE_SECURITYGROUP_DETAILS_SECURITYGROUPDETAIL_CONTROLLER } from './securityGroup/details/securityGroupDetail.controller';\nimport { AZURE_SECURITYGROUP_SECURITYGROUP_READER } from './securityGroup/securityGroup.reader';\nimport { AZURE_SECURITYGROUP_SECURITYGROUP_TRANSFORMER } from './securityGroup/securityGroup.transformer';\nimport { AZURE_SERVERGROUP_CONFIGURE_SERVERGROUP_CONFIGURE_AZURE_MODULE } from './serverGroup/configure/serverGroup.configure.azure.module';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_CLONESERVERGROUP_AZURE_CONTROLLER } from './serverGroup/configure/wizard/CloneServerGroup.azure.controller';\nimport { AZURE_SERVERGROUP_DETAILS_SERVERGROUP_DETAILS_MODULE } from './serverGroup/details/serverGroup.details.module';\nimport { AZURE_SERVERGROUP_SERVERGROUP_TRANSFORMER } from './serverGroup/serverGroup.transformer';\nimport { AZURE_VALIDATION_APPLICATIONNAME_VALIDATOR } from './validation/applicationName.validator';\n\nimport './logo/azure.logo.less';\n\nexport const AZURE_MODULE = 'spinnaker.azure';\nmodule(AZURE_MODULE, [\n AZURE_PIPELINE_STAGES_DESTROYASG_AZUREDESTROYASGSTAGE,\n AZURE_PIPELINE_STAGES_ENABLEASG_AZUREENABLEASGSTAGE,\n AZURE_PIPELINE_STAGES_DISABLEASG_AZUREDISABLEASGSTAGE,\n AZURE_PIPELINE_STAGES_BAKE_AZUREBAKESTAGE,\n AZURE_SERVERGROUP_DETAILS_SERVERGROUP_DETAILS_MODULE,\n AZURE_SERVERGROUP_SERVERGROUP_TRANSFORMER,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_CLONESERVERGROUP_AZURE_CONTROLLER,\n AZURE_SERVERGROUP_CONFIGURE_SERVERGROUP_CONFIGURE_AZURE_MODULE,\n AZURE_INSTANCE_AZUREINSTANCETYPE_SERVICE,\n AZURE_LOADBALANCER_LOADBALANCER_TRANSFORMER,\n AZURE_LOADBALANCER_DETAILS_LOADBALANCERDETAIL_CONTROLLER,\n AZURE_LOADBALANCER_CONFIGURE_CREATELOADBALANCER_CONTROLLER,\n AZURE_INSTANCE_DETAILS_INSTANCE_DETAILS_CONTROLLER,\n AZURE_SECURITYGROUP_DETAILS_SECURITYGROUPDETAIL_CONTROLLER,\n AZURE_SECURITYGROUP_CONFIGURE_CREATESECURITYGROUPCTRL,\n AZURE_SECURITYGROUP_CONFIGURE_EDITSECURITYGROUPCTRL,\n AZURE_SECURITYGROUP_SECURITYGROUP_TRANSFORMER,\n AZURE_SECURITYGROUP_SECURITYGROUP_READER,\n AZURE_IMAGE_IMAGE_READER,\n AZURE_VALIDATION_APPLICATIONNAME_VALIDATOR,\n]).config(function () {\n CloudProviderRegistry.registerProvider('azure', {\n name: 'Azure',\n logo: {\n path: logo,\n },\n image: {\n reader: 'azureImageReader',\n },\n serverGroup: {\n transformer: 'azureServerGroupTransformer',\n detailsTemplateUrl: require('./serverGroup/details/serverGroupDetails.html'),\n detailsController: 'azureServerGroupDetailsCtrl',\n cloneServerGroupTemplateUrl: require('./serverGroup/configure/wizard/serverGroupWizard.html'),\n cloneServerGroupController: 'azureCloneServerGroupCtrl',\n commandBuilder: 'azureServerGroupCommandBuilder',\n configurationService: 'azureServerGroupConfigurationService',\n },\n instance: {\n instanceTypeService: 'azureInstanceTypeService',\n detailsTemplateUrl: require('./instance/details/instanceDetails.html'),\n detailsController: 'azureInstanceDetailsCtrl',\n },\n loadBalancer: {\n transformer: 'azureLoadBalancerTransformer',\n detailsTemplateUrl: require('./loadBalancer/details/loadBalancerDetail.html'),\n detailsController: 'azureLoadBalancerDetailsCtrl',\n createLoadBalancerTemplateUrl: require('./loadBalancer/configure/createLoadBalancer.html'),\n createLoadBalancerController: 'azureCreateLoadBalancerCtrl',\n CreateLoadBalancerModal: AzureLoadBalancerChoiceModal,\n },\n securityGroup: {\n transformer: 'azureSecurityGroupTransformer',\n reader: 'azureSecurityGroupReader',\n detailsTemplateUrl: require('./securityGroup/details/securityGroupDetail.html'),\n detailsController: 'azureSecurityGroupDetailsCtrl',\n createSecurityGroupTemplateUrl: require('./securityGroup/configure/createSecurityGroup.html'),\n createSecurityGroupController: 'azureCreateSecurityGroupCtrl',\n },\n });\n});\n\nDeploymentStrategyRegistry.registerProvider('azure', ['redblack']);\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQYAAACrCAYAAACEwDK4AAAAAXNSR0IArs4c6QAAAAlwSFlzAAALEwAACxMBAJqcGAAABCZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIgogICAgICAgICAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDx0aWZmOkNvbXByZXNzaW9uPjU8L3RpZmY6Q29tcHJlc3Npb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjcyPC90aWZmOlhSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpPcmllbnRhdGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgogICAgICAgICA8dGlmZjpZUmVzb2x1dGlvbj43MjwvdGlmZjpZUmVzb2x1dGlvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjI2MjwvZXhpZjpQaXhlbFhEaW1lbnNpb24+CiAgICAgICAgIDxleGlmOkNvbG9yU3BhY2U+MTwvZXhpZjpDb2xvclNwYWNlPgogICAgICAgICA8ZXhpZjpQaXhlbFlEaW1lbnNpb24+MTcxPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgICAgPGRjOnN1YmplY3Q+CiAgICAgICAgICAgIDxyZGY6QmFnLz4KICAgICAgICAgPC9kYzpzdWJqZWN0PgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxOS0wNS0wNlQxMjowNTozMTwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+UGl4ZWxtYXRvciAzLjguMzwveG1wOkNyZWF0b3JUb29sPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4K8Qjg7wAAM9JJREFUeAHtnQeAFdX1/8/MvLa9L1tgF5Zl6UUUggoIggVLrCQYY42a/jPlb4rxr9EkvxhNIz9bEjUmllhRRFCxIKII0hVY2jaWLbC9vf5mft9z571lwd1lWfWXRM+FeW/ezJ07937uveeee+6ZWbIsazG2EpIgBITA554AywKWCSRC4XPfFgSAEDiCgMiEI3DIDyEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEh8B9DQPuPyWk0o+2WlRnyhYorW8O5++pb0irq2pIqu6y46uaAtau6tv6+L89Yf9akzF3/aeWS/AqBfycCjk8jM5ZljUa6FrZyTdPCvd0DcZJwvAhbLrZkbN158RMZXaGIsbcx4Cira3ej8ydWtoeza1u9haf8atXItkBkeER3pkYiRDpEm6FppBkaBci9zxHv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\""],"names":["TagError","TagError2","AzureLoadBalancerTypes","type","description","_Utility","[object Object]","tagsObject","isValid","error","errorMessage","length","Object","keys","TAG_LIMITATION","k","v","entries","TAG_KEY_LENGTH_LIMITATION","TAG_VALUE_LENGTH_LIMITATION","TAG_INVALID_CHAR_REG_EXR","test","typeString","toLowerCase","split","join","find","lb","Utility","helpContents","azure.securityGroup.ingress.description","azure.securityGroup.ingress.priority","azure.securityGroup.ingress.source","azure.securityGroup.ingress.sourcePortRange","azure.securityGroup.ingress.destination","azure.securityGroup.ingress.destinationPortRange","azure.securityGroup.ingress.direction","azure.securityGroup.ingress.actions","azure.securityGroup.ingress.destPortRanges","azure.securityGroup.ingress.sourceIPCIDRRanges","azure.serverGroup.imageName","azure.serverGroup.stack","azure.serverGroup.detail","azure.serverGroup.scriptLocation","azure.serverGroup.commandToExecute","azure.serverGroup.customData","azure.serverGroup.customTags","azure.serverGroup.enableInboundNAT","azure.serverGroup.lun","azure.serverGroup.diskSizeGB","azure.serverGroup.managedDisk.storageAccountType","azure.serverGroup.caching","azure.serverGroup.userAssignedIdentities","azure.loadBalancer.dnsName","azure.loadBalancer.probes.probeInterval","azure.loadBalancer.probes.timeout","azure.loadBalancer.probes.unhealthyThreshold","azure.loadBalancer.loadBalancingRules.idleTimeout","azure.loadBalancer.loadBalancingRules.sessionPersistence","forEach","key","HelpContentsRegistry","register","module","factory","findImages","params","REST","query","get","then","results","getImage","amiName","region","credentials","path","provider","$q","categories","label","families","instanceTypes","name","cpu","memory","storage","count","size","icon","calculateStorage","getCategories","map","category","family","inst","costFactor","stats","min","Number","MAX_VALUE","max","push","cpuMin","_","minBy","cpuMax","maxBy","memoryMin","memoryMax","storageMin","storageMax","Math","buildStats","when","getAvailableTypesForRegions","locationToInstanceTypesMap","selectedLocations","location","getAllTypesByRegion","UIROUTER_ANGULARJS","ANGULAR_UI_BOOTSTRAP","controller","$scope","$state","$uibModal","instance","app","retrieveInstance","extraData","instanceSummary","loadBalancers","account","vpcId","serverGroups","data","some","serverGroup","instances","possibleInstance","id","instanceId","loadBalancer","isDisabled","RecentHistoryService","addExtraDataToLatest","InstanceReader","getInstanceDetails","details","state","loading","instance2","latest","isStandalone","health","displayableMetrics","filter","metric","detailsMatch","latestHealth","defaults","healthMetrics","extractHealthMetrics","discoveryMetric","vipAddress","vipList","includes","baseIpAddress","publicDnsName","privateIpAddress","go","instanceIdNotFound","detailsTemplateUrl","CloudProviderRegistry","getValue","standalone","this","canDeregisterFromLoadBalancer","canRegisterWithLoadBalancer","outOfService","hasLoadBalancerHealth","canRegisterWithDiscovery","discoveryHealth","terminateInstance","taskMonitor","application","title","onTaskComplete","ConfirmationModalService","confirm","header","buttonText","taskMonitorConfig","submitMethod","InstanceWriter","terminateInstanceAndShrinkServerGroup","rebootInstance","registerInstanceWithLoadBalancer","loadBalancerNames","deregisterInstanceFromLoadBalancer","enableInstanceInDiscovery","disableInstanceInDiscovery","hasHealthState","healthProviderType","all","ready","$$destroyed","onRefresh","_AzureLoadBalancerChoiceModal","React","Component","props","super","choose","close","ModalInjector","modalService","open","templateUrl","createLoadBalancerTemplateUrl","windowClass","createLoadBalancerController","resolve","isNew","forPipelineConfig","loadBalancerType","selectedChoice","result","catch","reason","dismissModal","choices","ReactModal","show","className","choice","setState","createElement","Fragment","ModalClose","dismiss","Modal","Header","Title","Body","onClick","choiceSelected","Footer","Button","AzureLoadBalancerChoiceModal","defaultProps","closeModal","noop","AzureProviderSettings","SETTINGS","providers","azure","resetToOriginal","resetProvider","normalizeLoadBalancer","detachedInstances","concat","activeServerGroups","chain","flatten","value","convertLoadBalancerForEditing","toEdit","stack","detail","vnet","subnet","probes","loadBalancingRules","elb","securityGroups","dnsName","constructNewLoadBalancerTemplate","defaultCredentials","defaultRegions","cloudProvider","probeName","probeProtocol","probePort","probePath","probeInterval","unhealthyThreshold","timeout","ruleName","protocol","externalPort","backendPort","persistence","idleTimeout","sku","$uibModalInstance","ctrl","onApplicationRefresh","newStateParams","accountLoadBalancersByRegion","getDataSource","existingLoadBalancerNames","regions","listeners","healthCheck","advancedSettings","isALB","accountsLoaded","TaskMonitor","modalInstance","refresh","azureLoadBalancerTransformer","updateLoadBalancerNames","AccountService","listAccounts","accounts","initializeController","requiresHealthCheckPath","updateName","getName","elbName","getRegionsForAccount","regionUpdated","vnetUpdated","selectedVnet","NetworkReader","listNetworks","vnets","selectedVnets","selectedSubnet","selectedVnetChanged","item","vnetResourceGroup","resourceGroup","subnets","addSubnet","devices","removeListener","index","addListener","submit","descriptor","appName","name2","ruleNameBase","rule","cancel","window","angular","run","templateCache","put","SECURITY_GROUP_READER","LOAD_BALANCER_READ_SERVICE","filtered","match","sortBy","ss","s","substring","toUpperCase","firewallsLabel","extractLoadBalancer","editLoadBalancer","copy","deleteLoadBalancer","command","loadBalancerName","accountId","$stateParams","executionDetailsSectionService","$interpolate","configSections","initialized","detailsSection","stage","context","cloudProviderType","roscoMode","feature","roscoSelector","bakeryDetailUrl","roscoDetailUrl","initialize","synchronizeSection","$on","parseCustomScriptsSettings","configuration","Array","isArray","customScriptsSettings","fileUris","fileUrisTemp","trim","convertServerGroupCommandToDeployConfiguration","tempImage","viewState","mode","imageName","isCustom","publisher","offer","version","uri","ostype","selectedImage","selectedProvider","strategy","rollback","onFailure","scaleDown","maxRemainingAsgs","delayBeforeDisableSec","delayBeforeScaleDownSec","allowDeleteActive","allowScaleDownActive","freeFormDetails","healthSettings","image","useSourceCapacity","capacity","securityGroupName","user","upgradePolicy","tier","instanceTags","dataDisks","userAssignedIdentities","osConfig","customData","commandToExecute","zonesEnabled","zones","enableInboundNAT","isEmpty","instanceType","vmsku","indexOf","interestingHealthProviderNames","normalizeServerGroup","azureImageReader","azureServerGroupTransformer","buildNewServerGroupCommand","defaultRegion","images","selectedVnetSubnets","instanceProfile","allImageSelection","useAllImageSelection","useSimpleCapacity","usePreferredZones","disableStrategySelection","loadBalancersConfigured","networkSettingsConfigured","securityGroupsConfigured","buildNewServerGroupCommandForPipeline","requiresTemplateSelection","buildServerGroupCommandFromExisting","serverGroupName","NameUtils","parseServerGroupName","selectedSubnets","desired","tags","source","asgName","listImplicitSecurityGroups","buildServerGroupCommandFromPipeline","originalCluster","pipelineCluster","cloneDeep","disableImageSelection","submitButtonLabel","instanceTypeDetails","viewOverrides","extend","config","Registry","pipeline","registerStage","provides","executionDetailsUrl","executionLabelComponent","BakeExecutionLabel","extraLabelLines","masterStage","supportsCustomTimeout","validators","fieldName","checkParentTriggers","getMessage","labels","restartable","i","newImage","osType","managedImageOptions","addExtendedAttribute","extendedAttributes","controllerAs","extendedAttribute","removeExtendedAttribute","showExtendedAttributes","showVarFileName","showDefaultImages","managedImagesWasChosen","defaultImagesWasChosen","packageType","showManagedImages","setManagedImages","customImagesWasChosen","managedImage","onChangeAccount","onChangeManagedImage","selectedManagedImage","onChangeOsType","e","$watch","forOwn","val","getCredentialsKeyedByAccount","BakeryReader","getRegions","getBaseOsOptions","credentialsKeyedByAccount","baseOsOptions","baseImages","baseLabelOptions","osTypeOptions","packageTypeOptions","showAdvancedOptions","stg","templateFileName","showAdvanced","baseOs","executionStepLabelUrl","accountExtractor","configAccountExtractor","message","fieldLabel","regionsLoaded","accountUpdated","getAccountDetails","targets","StageConstants","TARGET_LIST","alias","target","reset","deleteSecurityGroup","securityGroup","operation","TaskExecutor","executeTask","job","FirewallLabels","InfrastructureCaches","clearCache","upsertSecurityGroup","assignWith","other","isUndefined","pages","ingress","firewallLabel","accountName","swapRules","ruleset","a","b","priorityA","priority","priorityB","submitting","numToAdd","addMoreItems","onNextRefresh","subnetUpdated","securityGroup2","namePreview","upsert","azureSecurityGroupWriter","addRule","access","direction","sourceAddressPrefix","sourceAddressPrefixes","sourcePortRange","destinationAddressPrefix","destinationPortRange","destinationPortRanges","sourceIPCIDRRanges","portUpdated","ruleRanges","destPortRanges","sourceIPCIDRUpdated","protocolUpdated","moveUp","moveDown","securityRules","CACHE_INITIALIZER_SERVICE","temp","refreshingSecurityGroups","getSecurityGroupRefreshTime","refreshSecurityGroups","securityGroupReader","getAllSecurityGroups","availableGroups","availableSecurityGroups","protocolUI","removeRule","splice","startPort","endPort","resolvedSecurityGroup","extractSecurityGroup","fourOhFour","editInboundRules","resolveIndexedSecurityGroup","indexedSecurityGroups","container","securityGroupId","normalizeSecurityGroup","instanceTypeService","modalWizardService","wizard","getWizard","includePage","markClean","markComplete","excludePage","newVal","markDirty","restrict","scope","bindToController","addDataDisk","newDataDisks","managedDisk","storageAccountType","diskSizeGB","caching","createOption","removeDataDisk","input","selectedRegion","IMAGE_READER","$controller","$uibModalStack","imageReader","ModalWizard","markIncomplete","imageChanged","stackPattern","templatingEnabled","detailPattern","directive","healthCheckProtocols","displayName","changeHealthCheckProtocol","newProtocol","port","requestPath","clearImage","loadBalancerReader","loadVnetSubnets","getLoadBalancerDetails","LBs","selectedLoadBalancer","attachedVnet","allVnets","device","attachedSubnet","useLoadBalancer","loadBalancerChanged","backingData","loadBalancerToFind","getLoadBalancerType","vnetChanged","networkSettingsChanged","getVnetName","selectedSecurityGroup","securityGroupChanged","azureServerGroupConfigurationService","link","refreshing","getTagResult","updateEnableInboundNAT","vm","cacheInitializer","azureInstanceTypeService","dataDiskTypes","dataDiskCachingTypes","healthCheckTypes","terminationPolicies","configureInstanceTypes","dirty","c","locations","every","l","startsWith","configureStandardInstanceTypes","configureZones","filteredData","regionsSupportZones","availabilityZones","getRegionalSecurityGroups","newSecurityGroups","configureSecurityGroupOptions","currentOptions","newRegionalSecurityGroups","getLoadBalancerNames","uniq","sort","configureLoadBalancerOptions","current","newLoadBalancers","matched","intersection","removed","xor","configureLoadBalancers","filterlist","configureUpdateCommand","configureCommand","loadSecurityGroups","loadLoadBalancers","cmd","regionChanged","isInit","credentialsChanged","regionsForAccount","defaultKeyPair","configureImages","regionalImages","packageImages","amis","ami","refreshLoadBalancers","skipCommandReconfiguration","listLoadBalancers","refreshCache","refreshInstanceTypes","SERVER_GROUP_WRITER","cloneStage","newServerGroupName","transitionTo","serverGroupCommand","loaded","initializeWizardState","processCommandUpdateResult","createResultProcessor","method","newValue","oldValue","zoneEnabled","templateSelection","basicSettings","imageSettings","networkSettings","applicationName","templateSelectionText","copied","notCopied","additionalCopyText","suspendedProcesses","processIndex","process","processIsSuspended","templateSelected","AzureModalFooter","verified","handleVerification","onSubmit","onCancel","UserVerification","expectedValue","onValidChange","disabled","_AzureRollbackServerGroupModal","args","apply","ReactInjector","serverGroupWriter","rollbackServerGroup","filterServerGroups","disabledServerGroups","disabledServerGroup","instanceCounts","total","localeCompare","rollbackContext","restoreServerGroupName","handleServerGroupChange","restoreServerGroupOption","newCommand","restoreServerGroup","targetSize","handleTaskReasonChange","taskReason","modalInstanceEmulation","rollbackType","rollbackServerGroupName","enableAndDisableOnly","isValidSG","disabledServerGroupOptions","onHide","TaskMonitorWrapper","monitor","role","Select","onChange","options","TaskReason","AzureRollbackServerGroupModal","retrieveServerGroup","summary","extractServerGroupSummary","ServerGroupReader","getServerGroup","tag","keyVal","launchConfig","compact","destroyServerGroup","serverGroup2","stateParams","confirmationModalParams","ServerGroupWarningMessageService","disableServerGroup","enableServerGroup","cloneServerGroup","validate","errors","validateSpecialCharacters","warnings","azureApplicationNameValidator","ApplicationNameValidator","registerValidator","css","ref","insertAt","document","head","getElementsByTagName","style","firstChild","insertBefore","appendChild","styleSheet","cssText","createTextNode","AZURE_MODULE","registerProvider","logo","reader","transformer","detailsController","cloneServerGroupTemplateUrl","cloneServerGroupController","commandBuilder","configurationService","CreateLoadBalancerModal","createSecurityGroupTemplateUrl","createSecurityGroupController","DeploymentStrategyRegistry"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/utility.ts","../src/help/azure.help.ts","../src/image/image.reader.js","../src/instance/azureInstanceType.service.js","../src/instance/details/instance.details.controller.js","../src/loadBalancer/configure/AzureLoadBalancerChoiceModal.tsx","../src/azure.settings.ts","../src/loadBalancer/loadBalancer.transformer.js","../src/loadBalancer/configure/createLoadBalancer.controller.js","../src/loadBalancer/details/loadBalancerDetail.controller.js","../src/logo/logo_azure.png","../src/pipeline/stages/bake/bakeExecutionDetails.controller.js","../src/serverGroup/serverGroup.transformer.js","../src/serverGroup/configure/serverGroupCommandBuilder.service.js","../src/pipeline/stages/bake/azureBakeStage.js","../src/pipeline/stages/destroyAsg/azureDestroyAsgStage.js","../src/pipeline/stages/disableAsg/azureDisableAsgStage.js","../src/pipeline/stages/enableAsg/azureEnableAsgStage.js","../src/securityGroup/securityGroup.write.service.js","../src/securityGroup/configure/CreateSecurityGroupCtrl.js","../src/securityGroup/configure/EditSecurityGroupCtrl.js","../src/securityGroup/clone/cloneSecurityGroup.controller.js","../src/securityGroup/details/securityGroupDetail.controller.js","../src/securityGroup/securityGroup.reader.js","../src/securityGroup/securityGroup.transformer.js","../src/serverGroup/configure/wizard/ServerGroupInstanceArchetype.controller.js","../src/serverGroup/configure/wizard/ServerGroupInstanceType.controller.js","../src/serverGroup/configure/wizard/advancedSettings/ServerGroupAdvancedSettings.controller.js","../src/serverGroup/configure/wizard/advancedSettings/advancedSettingsSelector.directive.js","../src/serverGroup/configure/wizard/basicSettings/image.regional.filter.js","../src/serverGroup/configure/wizard/basicSettings/ServerGroupBasicSettings.controller.js","../src/serverGroup/configure/wizard/capacity/capacitySelector.directive.js","../src/serverGroup/configure/wizard/healthSettings/ServerGroupHealthSettings.controller.js","../src/serverGroup/configure/wizard/healthSettings/healthSettingsSelector.directive.js","../src/serverGroup/configure/wizard/image/ServerGroupImageSettings.controller.js","../src/serverGroup/configure/wizard/image/imageSettingsSelector.directive.js","../src/serverGroup/configure/wizard/loadBalancers/ServerGroupLoadBalancers.controller.js","../src/serverGroup/configure/wizard/loadBalancers/serverGroupLoadBalancersSelector.directive.js","../src/serverGroup/configure/wizard/networkSettings/ServerGroupNetworkSettings.controller.js","../src/serverGroup/configure/wizard/networkSettings/ServerGroupNetworkSettingsSelector.directive.js","../src/serverGroup/configure/wizard/securityGroup/ServerGroupSecurityGroups.controller.js","../src/serverGroup/configure/wizard/securityGroup/serverGroupSecurityGroupsSelector.directive.js","../src/serverGroup/configure/wizard/tags/tagsSelector.directive.js","../src/serverGroup/configure/wizard/zones/zoneSelector.directive.js","../src/serverGroup/configure/serverGroup.configure.azure.module.js","../src/serverGroup/configure/serverGroupConfiguration.service.js","../src/serverGroup/configure/wizard/CloneServerGroup.azure.controller.js","../src/common/AzureModalFooter.tsx","../src/serverGroup/details/rollback/RollbackServerGroupModal.tsx","../src/serverGroup/details/serverGroupDetails.azure.controller.js","../src/serverGroup/details/serverGroup.details.module.js","../src/validation/applicationName.validator.js","../../../node_modules/style-inject/dist/style-inject.es.js","../src/azure.module.ts"],"sourcesContent":["export interface ITagResult {\n isValid: boolean;\n error: TagError | null;\n errorMessage?: string;\n}\n\nexport enum TagError {\n TAG_NUMBER_EXCEED,\n TAG_KEY_LENGTH_EXCEED,\n TAG_VALUE_LENGTH_EXCEED,\n TAG_KEY_INVALID_CHARACTER,\n TAG_VALUE_INVALID_CHARACTER,\n TAG_OBJECT_UNDEFINED,\n}\n\nexport interface IAzureLoadBalancer {\n type: string;\n description: string;\n}\n\nexport const AzureLoadBalancerTypes: IAzureLoadBalancer[] = [\n {\n type: 'Azure Load Balancer',\n description: '',\n },\n {\n type: 'Azure Application Gateway',\n description: '',\n },\n];\n\nexport default class Utility {\n public static readonly TAG_LIMITATION: number = 8;\n public static readonly TAG_KEY_LENGTH_LIMITATION: number = 512;\n public static readonly TAG_VALUE_LENGTH_LIMITATION: number = 256;\n public static readonly TAG_INVALID_CHAR_REG_EXR: RegExp = /[<>%&\\\\?/]/;\n\n public static checkTags(tagsObject: { [s: string]: string }): ITagResult {\n if (!tagsObject) {\n return {\n isValid: false,\n error: TagError.TAG_OBJECT_UNDEFINED,\n errorMessage: 'instanceTags is not defined',\n };\n }\n const length: number = Object.keys(tagsObject).length;\n if (!(length >= 0 && length <= Utility.TAG_LIMITATION)) {\n return {\n isValid: false,\n error: TagError.TAG_NUMBER_EXCEED,\n errorMessage: `Number of tags exceeds the limit: ${Utility.TAG_LIMITATION}`,\n };\n }\n\n for (const [k, v] of Object.entries(tagsObject)) {\n if (k.length > Utility.TAG_KEY_LENGTH_LIMITATION) {\n return {\n isValid: false,\n error: TagError.TAG_KEY_LENGTH_EXCEED,\n errorMessage: `Length of Tag key: ${k} exceeds the limit: ${Utility.TAG_KEY_LENGTH_LIMITATION}`,\n };\n }\n if (v.length > Utility.TAG_VALUE_LENGTH_LIMITATION) {\n return {\n isValid: false,\n error: TagError.TAG_VALUE_LENGTH_EXCEED,\n errorMessage: `Length of Tag value: ${v} exceeds the limit: ${Utility.TAG_VALUE_LENGTH_LIMITATION}`,\n };\n }\n if (Utility.TAG_INVALID_CHAR_REG_EXR.test(k)) {\n return {\n isValid: false,\n error: TagError.TAG_KEY_INVALID_CHARACTER,\n errorMessage: `Invalid characters in Tag key: ${k}`,\n };\n }\n if (Utility.TAG_INVALID_CHAR_REG_EXR.test(v)) {\n return {\n isValid: false,\n error: TagError.TAG_VALUE_INVALID_CHARACTER,\n errorMessage: `Invalid characters in Tag value: ${v}`,\n };\n }\n }\n return {\n isValid: true,\n error: null,\n };\n }\n\n public static getLoadBalancerType(typeString: string): IAzureLoadBalancer | null {\n typeString = typeString.toLowerCase().split('_').join(' ');\n return AzureLoadBalancerTypes.find((lb: IAzureLoadBalancer) => lb.type.toLowerCase() === typeString) || null;\n }\n}\n","import { HelpContentsRegistry } from '@spinnaker/core';\nimport Utility from '../utility';\n\nconst helpContents: { [key: string]: string } = {\n 'azure.securityGroup.ingress.description': 'Friendly description of the rule you want to enable (limit 80 chars.)',\n 'azure.securityGroup.ingress.priority':\n \"Rules are processed in priority order; the lower the number, the higher the priority. We recommend leaving gaps between rules - 100, 200, 300, etc. - so that it's easier to add new rules without having to edit existing rules. There are several default rules that can be overridden with priority (65000, 65001 and 65500). For more information visit http://portal.azure.com.\",\n 'azure.securityGroup.ingress.source':\n \"The source filter can be Any, an IP address range or a default tag('Internet', 'VirtualNetwork', AzureLoadBalancer'). It specifies the incoming traffic from a specific source IP address range (CIDR format) that will be allowed or denied by this rule.\",\n 'azure.securityGroup.ingress.sourcePortRange':\n 'The source port range can be a single port, such as 80, or a port range, such as 1024-65535. This specifies from which ports incoming traffic will be allowed or denied by this rule. Provide an asterisk (*) to allow traffic from clients connecting from any port.',\n 'azure.securityGroup.ingress.destination':\n \"The destination filter can be Any, an IP address range or a default tag('Internet', 'VirtualNetwork', AzureLoadBalancer'). It specifies the outgoing traffic from a specific destination IP address range (CIDR format) that will be allowed or denied by this rule.\",\n 'azure.securityGroup.ingress.destinationPortRange':\n 'The destination port range can be a single port, such as 80, or a port range, such as 1024-65535. This specifies from which destination ports traffic will be allowed or denied by this rule. Provide an asterisk (*) to allow traffic from clients connecting from any port.',\n 'azure.securityGroup.ingress.direction': 'Specifies whether the rule is for inbound or outbound traffic.',\n 'azure.securityGroup.ingress.actions':\n 'To adjust the priority of a rule, move it up or down in the list of rules. Rules at the top of the list have the highest priority.',\n 'azure.securityGroup.ingress.destPortRanges':\n 'Provide a single port, such as 80; a port range, such as 1024-65535; or a comma-separated list of single ports and/or port ranges, such as 80,1024-65535. Provide an asterisk (*) to allow traffic on any port.',\n 'azure.securityGroup.ingress.sourceIPCIDRRanges':\n 'Provide an address range using CIDR notation, such as 192.168.99.0/24; an IP address, such as 192.168.99.0; or a comma-separated list of address ranges or IP addresses, such as 10.0.0.0/24,44.66.0.0/24',\n 'azure.serverGroup.imageName': '(Required) <b>Image</b> is the deployable Azure Machine Image.',\n 'azure.serverGroup.stack':\n '(Required) <b>Stack</b> is one of the core naming components of a cluster, used to create vertical stacks of dependent services for integration testing.',\n 'azure.serverGroup.detail':\n '(Required) <b>Detail</b> is a naming component to help distinguish specifics of the server group.',\n 'azure.serverGroup.scriptLocation':\n 'The location of custom scripts separated by comma or semicolon to be downloaded on to each instance. A single script should be like: fileUri. Multiple scripts should be like fileUri1,fileUri2 or fileUri1;fileUri2',\n 'azure.serverGroup.commandToExecute':\n 'Command(s) to execute custom scripts provided during provisioning of an instance.',\n 'azure.serverGroup.customData': 'Script or metadata to be injected into each instances.',\n 'azure.serverGroup.customTags': `Custom tags on Virtual Machine Scale Set. Allow ${Utility.TAG_LIMITATION} tags at most.`,\n 'azure.serverGroup.enableInboundNAT':\n 'An Azure load balancer of the basic sku will be created with adding inbound NAT port-forwarding rules to facilitate loggin on VM instances. There is no charge for creating an Azure load balancer of the basic sku. This option is disabled if Availability Zones are set which require Standard Azure Load Balancer and an extra Network Security Group with correct inbound and outbound rules configured.',\n 'azure.serverGroup.lun':\n 'Specifies the logical unit number of the data disk. This value is used to identify data disks within the VM and therefore must be unique for each data disk attached to a VM.',\n 'azure.serverGroup.diskSizeGB':\n 'Specifies the size of an empty data disk in gigabytes. This value cannot be larger than 1023 GB',\n 'azure.serverGroup.managedDisk.storageAccountType':\n 'You can choose between Azure managed disks types to support your workload or scenario.',\n 'azure.serverGroup.caching':\n 'Changing the default host caching policy can adversely impact the performance of your application. You should run performance tests to measure its impact. To improve the total IOPS/throughput, we recommend striping across multiple disks and using premium (SSD) disks.',\n 'azure.serverGroup.userAssignedIdentities':\n 'Allows your server to access Azure resources. Learn more here: https://docs.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/overview',\n 'azure.loadBalancer.dnsName':\n 'If there is no custom DNS label specified, a default DNS name will be created. The default value will be \"GeneratedText.cloudapp.net\" for Azure Application Gateway or \"GeneratedText.[region].cloudapp.azure.com\" for Azure Load Balancer.',\n 'azure.loadBalancer.probes.probeInterval':\n 'Probe interval in seconds. This value is the time interval between two consecutive probes.',\n 'azure.loadBalancer.probes.timeout':\n 'Probe time-out in seconds. If a valid response is not received within this time-out period, the probe is marked as failed. Note that the time-out value should not be more than the Interval value.',\n 'azure.loadBalancer.probes.unhealthyThreshold':\n 'Probe retry count. The back-end server is marked down after the consecutive probe failure count reaches the unhealthy threshold.',\n 'azure.loadBalancer.loadBalancingRules.idleTimeout':\n 'Keep a TCP or HTTP connection open without relying on clients to send keep-alive messages.',\n 'azure.loadBalancer.loadBalancingRules.sessionPersistence':\n 'Session persistence specifies that traffic from a client should be handled by the same virtual machine in the backend pool for the duration of a session. \"None\" specifies that successive requests from the same client may be handled by any virtual machine. \"Client IP\" specifies that successive requests from the same client IP address will be handled by the same virtual machine. \"Client IP and protocol\" specifies that successive requests from the same client IP address and protocol combination will be handled by the same virtual machine.',\n};\n\nObject.keys(helpContents).forEach((key) => HelpContentsRegistry.register(key, helpContents[key]));\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { REST } from '@spinnaker/core';\n\nexport const AZURE_IMAGE_IMAGE_READER = 'spinnaker.azure.image.reader';\nexport const name = AZURE_IMAGE_IMAGE_READER; // for backwards compatibility\nmodule(AZURE_IMAGE_IMAGE_READER, []).factory('azureImageReader', function () {\n function findImages(params) {\n return REST('/images/find')\n .query(params)\n .get()\n .then(\n function (results) {\n return results;\n },\n function () {\n return [];\n },\n );\n }\n\n function getImage(amiName, region, credentials) {\n return REST('/images')\n .path(credentials, region, amiName)\n .query({ provider: 'azure' })\n .get()\n .then(\n function (results) {\n return results && results.length ? results[0] : null;\n },\n function () {\n return null;\n },\n );\n }\n\n return {\n findImages: findImages,\n getImage: getImage,\n };\n});\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nexport const AZURE_INSTANCE_AZUREINSTANCETYPE_SERVICE = 'spinnaker.azure.instanceType.service';\nexport const name = AZURE_INSTANCE_AZUREINSTANCETYPE_SERVICE; // for backwards compatibility\nmodule(AZURE_INSTANCE_AZUREINSTANCETYPE_SERVICE, []).factory('azureInstanceTypeService', [\n '$q',\n function ($q) {\n const B = {\n type: 'B-series',\n description:\n 'The B-series burstable VMs are ideal for workloads that do not need the full performance of the CPU continuously, like web servers, small databases and development and test environments.',\n instanceTypes: [\n {\n name: 'Standard_B1ms',\n label: 'Standard_B1ms',\n cpu: 1,\n memory: 2,\n storage: {\n type: 'SSD',\n count: 2,\n size: 4,\n },\n },\n {\n name: 'Standard_B1s',\n label: 'Standard_B1s',\n cpu: 1,\n memory: 1,\n storage: {\n type: 'SSD',\n count: 2,\n size: 2,\n },\n },\n {\n name: 'Standard_B2ms',\n label: 'Standard_B2ms',\n cpu: 2,\n memory: 8,\n storage: {\n type: 'SSD',\n count: 4,\n size: 16,\n },\n },\n {\n name: 'Standard_B2s',\n label: 'Standard_B2s',\n cpu: 2,\n memory: 4,\n storage: {\n type: 'SSD',\n count: 4,\n size: 8,\n },\n },\n {\n name: 'Standard_B4ms',\n label: 'Standard_B4ms',\n cpu: 4,\n memory: 16,\n storage: {\n type: 'SSD',\n count: 8,\n size: 32,\n },\n },\n {\n name: 'Standard_B8ms',\n label: 'Standard_B8ms',\n cpu: 8,\n memory: 32,\n storage: {\n type: 'SSD',\n count: 16,\n size: 64,\n },\n },\n {\n name: 'Standard_B1ls',\n label: 'Standard_B1ls',\n cpu: 1,\n memory: 0.5,\n storage: {\n type: 'SSD',\n count: 2,\n size: 1,\n },\n },\n ],\n };\n\n const DSV3 = {\n type: 'Dsv3-series',\n description:\n 'The Dsv3-series sizes offer a combination of vCPU, memory, and temporary storage for most production workloads.',\n instanceTypes: [\n {\n name: 'Standard_D2s_v3',\n label: 'Standard_D2s_v3',\n cpu: 2,\n memory: 8,\n storage: {\n type: 'SSD',\n count: 4,\n size: 16,\n },\n },\n {\n name: 'Standard_D4s_v3',\n label: 'Standard_D4s_v3',\n cpu: 4,\n memory: 16,\n storage: {\n type: 'SSD',\n count: 8,\n size: 32,\n },\n },\n {\n name: 'Standard_D8s_v3',\n label: 'Standard_D8s_v3',\n cpu: 8,\n memory: 32,\n storage: {\n type: 'SSD',\n count: 16,\n size: 64,\n },\n },\n {\n name: 'Standard_D16s_v3',\n label: 'Standard_D16s_v3',\n cpu: 16,\n memory: 64,\n storage: {\n type: 'SSD',\n count: 32,\n size: 128,\n },\n },\n {\n name: 'Standard_D32s_v3',\n label: 'Standard_D32s_v3',\n cpu: 32,\n memory: 128,\n storage: {\n type: 'SSD',\n count: 32,\n size: 256,\n },\n },\n {\n name: 'Standard_D64s_v3',\n label: 'Standard_D64s_v3',\n cpu: 64,\n memory: 256,\n storage: {\n type: 'SSD',\n count: 32,\n size: 512,\n },\n },\n ],\n };\n\n const DV3 = {\n type: 'Dv3-series',\n description:\n 'The Dv3-series sizes offer a combination of vCPU, memory, and temporary storage for most production workloads.',\n instanceTypes: [\n {\n name: 'Standard_D2_v3',\n label: 'Standard_D2_v3',\n cpu: 2,\n memory: 8,\n storage: {\n type: 'SSD',\n count: 4,\n size: 50,\n },\n },\n {\n name: 'Standard_D4_v3',\n label: 'Standard_D4_v3',\n cpu: 4,\n memory: 16,\n storage: {\n type: 'SSD',\n count: 8,\n size: 100,\n },\n },\n {\n name: 'Standard_D8_v3',\n label: 'Standard_D8_v3',\n cpu: 8,\n memory: 32,\n storage: {\n type: 'SSD',\n count: 16,\n size: 200,\n },\n },\n {\n name: 'Standard_D16_v3',\n label: 'Standard_D16_v3',\n cpu: 16,\n memory: 64,\n storage: {\n type: 'SSD',\n count: 32,\n size: 400,\n },\n },\n {\n name: 'Standard_D32_v3',\n label: 'Standard_D32_v3',\n cpu: 32,\n memory: 128,\n storage: {\n type: 'SSD',\n count: 32,\n size: 800,\n },\n },\n {\n name: 'Standard_D64_v3',\n label: 'Standard_D64_v3',\n cpu: 64,\n memory: 256,\n storage: {\n type: 'SSD',\n count: 32,\n size: 1600,\n },\n },\n ],\n };\n\n const DSV2 = {\n type: 'DSv2-series',\n description: '',\n instanceTypes: [\n {\n name: 'Standard_DS1_v2',\n label: 'Standard_DS1_v2',\n cpu: 1,\n memory: 3.5,\n storage: {\n type: 'SSD',\n count: 4,\n size: 7,\n },\n },\n {\n name: 'Standard_DS2_v2',\n label: 'Standard_DS2_v2',\n cpu: 2,\n memory: 7,\n storage: {\n type: 'SSD',\n count: 8,\n size: 14,\n },\n },\n {\n name: 'Standard_DS3_v2',\n label: 'Standard_DS3_v2',\n cpu: 4,\n memory: 14,\n storage: {\n type: 'SSD',\n count: 16,\n size: 28,\n },\n },\n {\n name: 'Standard_DS4_v2',\n label: 'Standard_DS4_v2',\n cpu: 8,\n memory: 28,\n storage: {\n type: 'SSD',\n count: 32,\n size: 56,\n },\n },\n {\n name: 'Standard_DS5_v2',\n label: 'Standard_DS5_v2',\n cpu: 16,\n memory: 56,\n storage: {\n type: 'SSD',\n count: 64,\n size: 112,\n },\n },\n {\n name: 'Standard_DS11_v2',\n label: 'Standard_DS11_v2',\n cpu: 2,\n memory: 14,\n storage: {\n type: 'SSD',\n count: 8,\n size: 28,\n },\n },\n {\n name: 'Standard_DS12_v2',\n label: 'Standard_DS12_v2',\n cpu: 4,\n memory: 28,\n storage: {\n type: 'SSD',\n count: 16,\n size: 56,\n },\n },\n {\n name: 'Standard_DS13_v2',\n label: 'Standard_DS13_v2',\n cpu: 8,\n memory: 56,\n storage: {\n type: 'SSD',\n count: 32,\n size: 112,\n },\n },\n {\n name: 'Standard_DS14_v2',\n label: 'Standard_DS14_v2',\n cpu: 16,\n memory: 112,\n storage: {\n type: 'SSD',\n count: 64,\n size: 224,\n },\n },\n {\n name: 'Standard_DS15_v2',\n label: 'Standard_DS15_v2',\n cpu: 20,\n memory: 140,\n storage: {\n type: 'SSD',\n count: 64,\n size: 280,\n },\n },\n ],\n };\n\n const DV2 = {\n type: 'Dv2-series',\n description: '',\n instanceTypes: [\n {\n name: 'Standard_D1_v2',\n label: 'Standard_D1_v2',\n cpu: 1,\n memory: 3.5,\n storage: {\n type: 'SSD',\n count: 4,\n size: 50,\n },\n },\n {\n name: 'Standard_D2_v2',\n label: 'Standard_D2_v2',\n cpu: 2,\n memory: 7,\n storage: {\n type: 'SSD',\n count: 8,\n size: 100,\n },\n },\n {\n name: 'Standard_D3_v2',\n label: 'Standard_D3_v2',\n cpu: 4,\n memory: 14,\n storage: {\n type: 'SSD',\n count: 16,\n size: 200,\n },\n },\n {\n name: 'Standard_D4_v2',\n label: 'Standard_D4_v2',\n cpu: 8,\n memory: 28,\n storage: {\n type: 'SSD',\n count: 32,\n size: 400,\n },\n },\n {\n name: 'Standard_D5_v2',\n label: 'Standard_D5_v2',\n cpu: 16,\n memory: 56,\n storage: {\n type: 'SSD',\n count: 64,\n size: 800,\n },\n },\n {\n name: 'Standard_D11_v2',\n label: 'Standard_D11_v2',\n cpu: 2,\n memory: 14,\n storage: {\n type: 'SSD',\n count: 8,\n size: 100,\n },\n },\n {\n name: 'Standard_D12_v2',\n label: 'Standard_D12_v2',\n cpu: 4,\n memory: 28,\n storage: {\n type: 'SSD',\n count: 16,\n size: 200,\n },\n },\n {\n name: 'Standard_D13_v2',\n label: 'Standard_D13_v2',\n cpu: 8,\n memory: 56,\n storage: {\n type: 'SSD',\n count: 32,\n size: 400,\n },\n },\n {\n name: 'Standard_D14_v2',\n label: 'Standard_D14_v2',\n cpu: 16,\n memory: 112,\n storage: {\n type: 'SSD',\n count: 64,\n size: 800,\n },\n },\n {\n name: 'Standard_D15_v2',\n label: 'Standard_D15_v2',\n cpu: 20,\n memory: 140,\n storage: {\n type: 'SSD',\n count: 64,\n size: 280,\n },\n },\n ],\n };\n\n const AV2 = {\n type: 'Av2-series',\n description: '',\n instanceTypes: [\n {\n name: 'Standard_A1_v2',\n label: 'Standard_A1_v2',\n cpu: 1,\n memory: 2,\n storage: {\n type: 'SSD',\n count: 2,\n size: 10,\n },\n },\n {\n name: 'Standard_A2m_v2',\n label: 'Standard_A2m_v2',\n cpu: 2,\n memory: 16,\n storage: {\n type: 'SSD',\n count: 4,\n size: 20,\n },\n },\n {\n name: 'Standard_A2_v2',\n label: 'Standard_A2_v2',\n cpu: 2,\n memory: 4,\n storage: {\n type: 'SSD',\n count: 4,\n size: 20,\n },\n },\n {\n name: 'Standard_A4m_v2',\n label: 'Standard_A4m_v2',\n cpu: 4,\n memory: 32,\n storage: {\n type: 'SSD',\n count: 8,\n size: 40,\n },\n },\n {\n name: 'Standard_A4_v2',\n label: 'Standard_A4_v2',\n cpu: 4,\n memory: 8,\n storage: {\n type: 'SSD',\n count: 8,\n size: 40,\n },\n },\n {\n name: 'Standard_A8m_v2',\n label: 'Standard_A8m_v2',\n cpu: 8,\n memory: 64,\n storage: {\n type: 'SSD',\n count: 16,\n size: 80,\n },\n },\n {\n name: 'Standard_A8_v2',\n label: 'Standard_A8_v2',\n cpu: 8,\n memory: 16,\n storage: {\n type: 'SSD',\n count: 16,\n size: 80,\n },\n },\n ],\n };\n\n const DC = {\n type: 'DC-series',\n description: '',\n instanceTypes: [\n {\n name: 'Standard_DC2s',\n label: 'Standard_DC2s',\n cpu: 2,\n memory: 8,\n storage: {\n type: 'SSD',\n count: 2,\n size: 100,\n },\n },\n {\n name: 'Standard_DC4s',\n label: 'Standard_DC4s',\n cpu: 4,\n memory: 16,\n storage: {\n type: 'SSD',\n count: 4,\n size: 200,\n },\n },\n ],\n };\n\n const FSV2 = {\n type: 'Fsv2-series',\n description: '',\n instanceTypes: [\n {\n name: 'Standard_F2s_v2',\n label: 'Standard_F2s_v2',\n cpu: 2,\n memory: 4,\n storage: { type: 'SSD', count: 4, size: 16 },\n },\n {\n name: 'Standard_F4s_v2',\n label: 'Standard_F4s_v2',\n cpu: 4,\n memory: 8,\n storage: { type: 'SSD', count: 8, size: 32 },\n },\n {\n name: 'Standard_F8s_v2',\n label: 'Standard_F8s_v2',\n cpu: 8,\n memory: 16,\n storage: { type: 'SSD', count: 16, size: 64 },\n },\n {\n name: 'Standard_F16s_v2',\n label: 'Standard_F16s_v2',\n cpu: 16,\n memory: 32,\n storage: { type: 'SSD', count: 32, size: 128 },\n },\n {\n name: 'Standard_F32s_v2',\n label: 'Standard_F32s_v2',\n cpu: 32,\n memory: 64,\n storage: { type: 'SSD', count: 32, size: 256 },\n },\n {\n name: 'Standard_F64s_v2',\n label: 'Standard_F64s_v2',\n cpu: 64,\n memory: 128,\n storage: { type: 'SSD', count: 32, size: 512 },\n },\n {\n name: 'Standard_F72s_v2',\n label: 'Standard_F72s_v2',\n cpu: 72,\n memory: 144,\n storage: { type: 'SSD', count: 32, size: 576 },\n },\n ],\n };\n\n const FS = {\n type: 'Fs-series',\n description: '',\n instanceTypes: [\n {\n name: 'Standard_F1s',\n label: 'Standard_F1s',\n cpu: 1,\n memory: 2,\n storage: { type: 'SSD', count: 4, size: 4 },\n },\n {\n name: 'Standard_F2s',\n label: 'Standard_F2s',\n cpu: 2,\n memory: 4,\n storage: { type: 'SSD', count: 8, size: 8 },\n },\n {\n name: 'Standard_F4s',\n label: 'Standard_F4s',\n cpu: 4,\n memory: 8,\n storage: { type: 'SSD', count: 16, size: 16 },\n },\n {\n name: 'Standard_F8s',\n label: 'Standard_F8s',\n cpu: 8,\n memory: 16,\n storage: { type: 'SSD', count: 32, size: 32 },\n },\n {\n name: 'Standard_F16s',\n label: 'Standard_F16s',\n cpu: 16,\n memory: 32,\n storage: { type: 'SSD', count: 64, size: 64 },\n },\n ],\n };\n\n const F = {\n type: 'F-series',\n description: '',\n instanceTypes: [\n {\n name: 'Standard_F1',\n label: 'Standard_F1',\n cpu: 1,\n memory: 2,\n storage: { type: 'SSD', count: 4, size: 16 },\n },\n {\n name: 'Standard_F2',\n label: 'Standard_F2',\n cpu: 2,\n memory: 4,\n storage: { type: 'SSD', count: 8, size: 32 },\n },\n {\n name: 'Standard_F4',\n label: 'Standard_F4',\n cpu: 4,\n memory: 8,\n storage: { type: 'SSD', count: 16, size: 64 },\n },\n {\n name: 'Standard_F8',\n label: 'Standard_F8',\n cpu: 8,\n memory: 16,\n storage: { type: 'SSD', count: 32, size: 128 },\n },\n {\n name: 'Standard_F16',\n label: 'Standard_F16',\n cpu: 16,\n memory: 32,\n storage: { type: 'SSD', count: 64, size: 256 },\n },\n ],\n };\n\n const categories = [\n {\n type: 'general',\n label: 'General Purpose',\n description:\n 'Balanced CPU-to-memory ratio. Ideal for testing and development, small to medium databases, and low to medium traffic web servers.',\n families: [B, DSV3, DV3, DSV2, DV2, AV2, DC],\n icon: 'hdd',\n },\n {\n type: 'compute',\n label: 'Compute Optimized',\n description:\n 'High CPU-to-memory ratio. Good for medium traffic web servers, network appliances, batch processes, and application servers.',\n families: [FSV2, FS, F],\n icon: 'hdd',\n },\n {\n type: 'custom',\n label: 'Custom Type',\n description: 'Select the instance type below.',\n families: [],\n icon: 'asterisk',\n },\n ];\n\n function calculateStorage(type) {\n if (!type || !type.storage) {\n return 0;\n }\n return type.storage.count * type.storage.size;\n }\n\n function buildStats(category) {\n const stats = {\n cpu: {\n min: Number.MAX_VALUE,\n max: -Number.MAX_VALUE,\n },\n memory: {\n min: Number.MAX_VALUE,\n max: -Number.MAX_VALUE,\n },\n storage: {\n min: Number.MAX_VALUE,\n max: -Number.MAX_VALUE,\n },\n families: [],\n };\n\n if (category.families && category.families.length) {\n category.families.forEach(function (family) {\n stats.families.push(family.type);\n const cpuMin = _.minBy(family.instanceTypes, 'cpu').cpu || Number.MAX_VALUE;\n const cpuMax = _.maxBy(family.instanceTypes, 'cpu').cpu || -Number.MAX_VALUE;\n const memoryMin = _.minBy(family.instanceTypes, 'memory').memory || Number.MAX_VALUE;\n const memoryMax = _.maxBy(family.instanceTypes, 'memory').memory || -Number.MAX_VALUE;\n const storageMin = calculateStorage(_.minBy(family.instanceTypes, calculateStorage)) || Number.MAX_VALUE;\n const storageMax = calculateStorage(_.maxBy(family.instanceTypes, calculateStorage)) || -Number.MAX_VALUE;\n\n stats.cpu.min = Math.min(stats.cpu.min, cpuMin);\n stats.cpu.max = Math.max(stats.cpu.max, cpuMax);\n stats.memory.min = Math.min(stats.memory.min, memoryMin);\n stats.memory.max = Math.max(stats.memory.max, memoryMax);\n stats.storage.min = Math.min(stats.storage.min, storageMin);\n stats.storage.max = Math.max(stats.storage.max, storageMax);\n });\n }\n\n return stats;\n }\n\n function getCategories() {\n categories.map(function (category) {\n for (const family of category.families) {\n for (const inst of family.instanceTypes) {\n if (inst.costFactor == undefined) inst.costFactor = 0;\n }\n }\n category.stats = buildStats(category);\n });\n return $q.when(categories);\n }\n\n const getAllTypesByRegion = function getAllTypesByRegion() {\n return getCategories();\n };\n\n function getAvailableTypesForRegions(locationToInstanceTypesMap, selectedLocations) {\n // This function is only ever called with one location.\n const [location] = selectedLocations;\n return locationToInstanceTypesMap[location];\n }\n\n return {\n getCategories: getCategories,\n getAvailableTypesForRegions: getAvailableTypesForRegions,\n getAllTypesByRegion: getAllTypesByRegion,\n };\n },\n]);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport { module } from 'angular';\nimport ANGULAR_UI_BOOTSTRAP from 'angular-ui-bootstrap';\nimport _ from 'lodash';\n\nimport {\n CloudProviderRegistry,\n ConfirmationModalService,\n InstanceReader,\n InstanceWriter,\n RecentHistoryService,\n} from '@spinnaker/core';\n\nexport const AZURE_INSTANCE_DETAILS_INSTANCE_DETAILS_CONTROLLER = 'spinnaker.azure.instance.detail.controller';\nexport const name = AZURE_INSTANCE_DETAILS_INSTANCE_DETAILS_CONTROLLER; // for backwards compatibility\nmodule(AZURE_INSTANCE_DETAILS_INSTANCE_DETAILS_CONTROLLER, [UIROUTER_ANGULARJS, ANGULAR_UI_BOOTSTRAP]).controller(\n 'azureInstanceDetailsCtrl',\n [\n '$scope',\n '$state',\n '$uibModal',\n 'instance',\n 'app',\n '$q',\n function ($scope, $state, $uibModal, instance, app, $q) {\n // needed for standalone instances\n $scope.detailsTemplateUrl = CloudProviderRegistry.getValue('azure', 'instance.detailsTemplateUrl');\n\n $scope.state = {\n loading: true,\n standalone: app.isStandalone,\n };\n\n function extractHealthMetrics(instance, latest) {\n // do not backfill on standalone instances\n if (app.isStandalone) {\n instance.health = latest.health;\n }\n\n instance.health = instance.health || [];\n const displayableMetrics = instance.health.filter(function (metric) {\n return metric.type !== 'Azure' || metric.state !== 'Unknown';\n });\n // backfill details where applicable\n if (latest.health) {\n displayableMetrics.forEach(function (metric) {\n const detailsMatch = latest.health.filter(function (latestHealth) {\n return latestHealth.type === metric.type;\n });\n if (detailsMatch.length) {\n _.defaults(metric, detailsMatch[0]);\n }\n });\n }\n $scope.healthMetrics = displayableMetrics;\n }\n\n function retrieveInstance() {\n const extraData = {};\n let instanceSummary, loadBalancers, account, region, vpcId;\n if (!app.serverGroups) {\n // standalone instance\n instanceSummary = {};\n loadBalancers = [];\n account = instance.account;\n region = instance.region;\n } else {\n app.serverGroups.data.some(function (serverGroup) {\n return serverGroup.instances.some(function (possibleInstance) {\n if (possibleInstance.id === instance.instanceId) {\n instanceSummary = possibleInstance;\n loadBalancers = serverGroup.loadBalancers;\n account = serverGroup.account;\n region = serverGroup.region;\n vpcId = serverGroup.vpcId;\n extraData.serverGroup = serverGroup.name;\n extraData.vpcId = serverGroup.vpcId;\n return true;\n }\n });\n });\n if (!instanceSummary) {\n // perhaps it is in a server group that is part of another app\n app.loadBalancers.data.some(function (loadBalancer) {\n return loadBalancer.instances.some(function (possibleInstance) {\n if (possibleInstance.id === instance.instanceId) {\n instanceSummary = possibleInstance;\n loadBalancers = [loadBalancer.name];\n account = loadBalancer.account;\n region = loadBalancer.region;\n vpcId = loadBalancer.vpcId;\n return true;\n }\n });\n });\n if (!instanceSummary) {\n // perhaps it is in a disabled server group via a load balancer\n app.loadBalancers.data.some(function (loadBalancer) {\n return loadBalancer.serverGroups.some(function (serverGroup) {\n if (!serverGroup.isDisabled) {\n return false;\n }\n return serverGroup.instances.some(function (possibleInstance) {\n if (possibleInstance.id === instance.instanceId) {\n instanceSummary = possibleInstance;\n loadBalancers = [loadBalancer.name];\n account = loadBalancer.account;\n region = loadBalancer.region;\n vpcId = loadBalancer.vpcId;\n return true;\n }\n });\n });\n });\n }\n }\n }\n\n if (instanceSummary && account && region) {\n extraData.account = account;\n extraData.region = region;\n RecentHistoryService.addExtraDataToLatest('instances', extraData);\n return InstanceReader.getInstanceDetails(account, region, instance.instanceId).then(\n function (details) {\n $scope.state.loading = false;\n extractHealthMetrics(instanceSummary, details);\n $scope.instance = _.defaults(details, instanceSummary);\n $scope.instance.account = account;\n $scope.instance.region = region;\n $scope.instance.vpcId = vpcId;\n $scope.instance.loadBalancers = loadBalancers;\n const discoveryMetric = _.find($scope.healthMetrics, function (metric) {\n return metric.type === 'Discovery';\n });\n if (discoveryMetric && discoveryMetric.vipAddress) {\n const vipList = discoveryMetric.vipAddress;\n $scope.instance.vipAddress = vipList.includes(',') ? vipList.split(',') : [vipList];\n }\n $scope.baseIpAddress = details.publicDnsName || details.privateIpAddress;\n },\n function () {\n // When an instance is first starting up, we may not have the details cached in oort yet, but we still\n // want to let the user see what details we have\n $scope.state.loading = false;\n $state.go('^');\n },\n );\n }\n\n if (!instanceSummary) {\n $scope.instanceIdNotFound = instance.instanceId;\n $scope.state.loading = false;\n }\n\n return $q.when(null);\n }\n\n this.canDeregisterFromLoadBalancer = function () {\n return $scope.instance.health.some(function (health) {\n return health.type === 'LoadBalancer';\n });\n };\n\n this.canRegisterWithLoadBalancer = function () {\n const instance = $scope.instance;\n if (!instance.loadBalancers || !instance.loadBalancers.length) {\n return false;\n }\n const outOfService = instance.health.some(function (health) {\n return health.type === 'LoadBalancer' && health.state === 'OutOfService';\n });\n const hasLoadBalancerHealth = instance.health.some(function (health) {\n return health.type === 'LoadBalancer';\n });\n return outOfService || !hasLoadBalancerHealth;\n };\n\n this.canRegisterWithDiscovery = function () {\n const instance = $scope.instance;\n const discoveryHealth = instance.health.filter(function (health) {\n return health.type === 'Discovery';\n });\n return discoveryHealth.length ? discoveryHealth[0].state === 'OutOfService' : false;\n };\n\n this.terminateInstance = function terminateInstance() {\n const instance = $scope.instance;\n\n const taskMonitor = {\n application: app,\n title: 'Terminating ' + instance.instanceId,\n onTaskComplete: function () {\n if ($state.includes('**.instanceDetails', { instanceId: instance.instanceId })) {\n $state.go('^');\n }\n },\n };\n\n const submitMethod = function () {\n return InstanceWriter.terminateInstance(instance, app);\n };\n\n ConfirmationModalService.confirm({\n header: 'Really terminate ' + instance.instanceId + '?',\n buttonText: 'Terminate ' + instance.instanceId,\n account: instance.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n });\n };\n\n this.terminateInstanceAndShrinkServerGroup = function terminateInstanceAndShrinkServerGroup() {\n const instance = $scope.instance;\n\n const taskMonitor = {\n application: app,\n title: 'Terminating ' + instance.instanceId + ' and shrinking server group',\n onTaskComplete: function () {\n if ($state.includes('**.instanceDetails', { instanceId: instance.instanceId })) {\n $state.go('^');\n }\n },\n };\n\n const submitMethod = function () {\n return InstanceWriter.terminateInstanceAndShrinkServerGroup(instance, app);\n };\n\n ConfirmationModalService.confirm({\n header: 'Really terminate ' + instance.instanceId + ' and shrink ' + instance.serverGroup + '?',\n buttonText: 'Terminate ' + instance.instanceId + ' and shrink ' + instance.serverGroup,\n account: instance.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n });\n };\n\n this.rebootInstance = function rebootInstance() {\n const instance = $scope.instance;\n\n const taskMonitor = {\n application: app,\n title: 'Rebooting ' + instance.instanceId,\n };\n\n const submitMethod = function () {\n return InstanceWriter.rebootInstance(instance, app);\n };\n\n ConfirmationModalService.confirm({\n header: 'Really reboot ' + instance.instanceId + '?',\n buttonText: 'Reboot ' + instance.instanceId,\n account: instance.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n });\n };\n\n this.registerInstanceWithLoadBalancer = function registerInstanceWithLoadBalancer() {\n const instance = $scope.instance;\n const loadBalancerNames = instance.loadBalancers.join(' and ');\n\n const taskMonitor = {\n application: app,\n title: 'Registering ' + instance.instanceId + ' with ' + loadBalancerNames,\n };\n\n const submitMethod = function () {\n return InstanceWriter.registerInstanceWithLoadBalancer(instance, app);\n };\n\n ConfirmationModalService.confirm({\n header: 'Really register ' + instance.instanceId + ' with ' + loadBalancerNames + '?',\n buttonText: 'Register ' + instance.instanceId,\n account: instance.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n });\n };\n\n this.deregisterInstanceFromLoadBalancer = function deregisterInstanceFromLoadBalancer() {\n const instance = $scope.instance;\n const loadBalancerNames = instance.loadBalancers.join(' and ');\n\n const taskMonitor = {\n application: app,\n title: 'Deregistering ' + instance.instanceId + ' from ' + loadBalancerNames,\n };\n\n const submitMethod = function () {\n return InstanceWriter.deregisterInstanceFromLoadBalancer(instance, app);\n };\n\n ConfirmationModalService.confirm({\n header: 'Really deregister ' + instance.instanceId + ' from ' + loadBalancerNames + '?',\n buttonText: 'Deregister ' + instance.instanceId,\n account: instance.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n });\n };\n\n this.enableInstanceInDiscovery = function enableInstanceInDiscovery() {\n const instance = $scope.instance;\n\n const taskMonitor = {\n application: app,\n title: 'Enabling ' + instance.instanceId + ' in discovery',\n };\n\n const submitMethod = function () {\n return InstanceWriter.enableInstanceInDiscovery(instance, app);\n };\n\n ConfirmationModalService.confirm({\n header: 'Really enable ' + instance.instanceId + ' in discovery?',\n buttonText: 'Enable ' + instance.instanceId,\n account: instance.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n });\n };\n\n this.disableInstanceInDiscovery = function disableInstanceInDiscovery() {\n const instance = $scope.instance;\n\n const taskMonitor = {\n application: app,\n title: 'Disabling ' + instance.instanceId + ' in discovery',\n };\n\n const submitMethod = function () {\n return InstanceWriter.disableInstanceInDiscovery(instance, app);\n };\n\n ConfirmationModalService.confirm({\n header: 'Really disable ' + instance.instanceId + ' in discovery?',\n buttonText: 'Disable ' + instance.instanceId,\n account: instance.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n });\n };\n\n this.hasHealthState = function hasHealthState(healthProviderType, state) {\n const instance = $scope.instance;\n return instance.health.some(function (health) {\n return health.type === healthProviderType && health.state === state;\n });\n };\n\n const initialize = app.isStandalone\n ? retrieveInstance()\n : $q.all([app.serverGroups.ready(), app.loadBalancers.ready()]).then(retrieveInstance);\n\n initialize.then(() => {\n // Two things to look out for here:\n // 1. If the retrieveInstance call completes *after* the user has navigated away from the view, there\n // is no point in subscribing to the refresh\n // 2. If this is a standalone instance, there is no application that will refresh\n if (!$scope.$$destroyed && !app.isStandalone) {\n app.serverGroups.onRefresh($scope, retrieveInstance);\n }\n });\n\n $scope.account = instance.account;\n },\n ],\n);\n","import React from 'react';\nimport { Button, Modal } from 'react-bootstrap';\n\nimport type { ILoadBalancerModalProps } from '@spinnaker/core';\nimport { CloudProviderRegistry, ModalClose, ModalInjector, noop, ReactModal } from '@spinnaker/core';\n\nimport type { IAzureLoadBalancer } from '../../utility';\nimport { AzureLoadBalancerTypes } from '../../utility';\n\nexport interface IAzureLoadBalancerChoiceModalState {\n choices: IAzureLoadBalancer[];\n selectedChoice: IAzureLoadBalancer;\n}\n\nexport class AzureLoadBalancerChoiceModal extends React.Component<\n ILoadBalancerModalProps,\n IAzureLoadBalancerChoiceModalState\n> {\n public static defaultProps: Partial<ILoadBalancerModalProps> = {\n closeModal: noop,\n dismissModal: noop,\n };\n\n public static show(props: ILoadBalancerModalProps): Promise<void> {\n return ReactModal.show(AzureLoadBalancerChoiceModal, {\n ...props,\n className: 'create-pipeline-modal-overflow-visible',\n });\n }\n\n constructor(props: ILoadBalancerModalProps) {\n super(props);\n this.state = {\n choices: AzureLoadBalancerTypes,\n selectedChoice: AzureLoadBalancerTypes[0],\n };\n }\n\n public choiceSelected(choice: IAzureLoadBalancer): void {\n this.setState({ selectedChoice: choice });\n }\n\n private choose = (): void => {\n this.close();\n const provider: any = CloudProviderRegistry.getValue('azure', 'loadBalancer');\n ModalInjector.modalService\n .open({\n templateUrl: provider.createLoadBalancerTemplateUrl,\n windowClass: 'modal-z-index',\n controller: `${provider.createLoadBalancerController} as ctrl`,\n size: 'lg',\n resolve: {\n application: () => this.props.app,\n loadBalancer: (): any => null,\n isNew: () => true,\n forPipelineConfig: () => false,\n loadBalancerType: () => this.state.selectedChoice,\n },\n })\n .result.catch(() => {});\n };\n\n public close = (reason?: any): void => {\n this.props.dismissModal(reason);\n };\n\n public render() {\n const { choices, selectedChoice } = this.state;\n\n return (\n <>\n <ModalClose dismiss={this.close} />\n <Modal.Header>\n <Modal.Title>Select Type of Load Balancer</Modal.Title>\n </Modal.Header>\n <Modal.Body>\n <div className=\"modal-body\">\n <div className=\"card-choices\">\n {choices.map((choice) => (\n <div\n key={choice.type}\n className={`card ${selectedChoice === choice ? 'active' : ''}`}\n onClick={() => this.choiceSelected(choice)}\n >\n <h3 className=\"load-balancer-label\">{choice.type}</h3>\n <div>{choice.description}</div>\n </div>\n ))}\n </div>\n <div className=\"load-balancer-description\" />\n </div>\n </Modal.Body>\n <Modal.Footer>\n <Button onClick={this.choose}>\n Configure Load Balancer <span className=\"glyphicon glyphicon-chevron-right\" />\n </Button>\n </Modal.Footer>\n </>\n );\n }\n}\n","import type { IProviderSettings } from '@spinnaker/core';\nimport { SETTINGS } from '@spinnaker/core';\n\nexport interface IAzureProviderSettings extends IProviderSettings {\n defaults: {\n account?: string;\n region?: string;\n };\n}\n\nexport const AzureProviderSettings: IAzureProviderSettings = (SETTINGS.providers.azure as IAzureProviderSettings) || {\n defaults: {},\n};\nif (AzureProviderSettings) {\n AzureProviderSettings.resetToOriginal = SETTINGS.resetProvider('azure');\n}\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nimport { AzureProviderSettings } from '../azure.settings';\n\nexport const AZURE_LOADBALANCER_LOADBALANCER_TRANSFORMER = 'spinnaker.azure.loadBalancer.transformer';\nexport const name = AZURE_LOADBALANCER_LOADBALANCER_TRANSFORMER; // for backwards compatibility\nmodule(AZURE_LOADBALANCER_LOADBALANCER_TRANSFORMER, []).factory('azureLoadBalancerTransformer', [\n '$q',\n function ($q) {\n function normalizeLoadBalancer(loadBalancer) {\n loadBalancer.serverGroups.forEach(function (serverGroup) {\n serverGroup.account = loadBalancer.account;\n serverGroup.region = loadBalancer.region;\n\n if (serverGroup.detachedInstances) {\n serverGroup.detachedInstances = serverGroup.detachedInstances.map(function (instanceId) {\n return { id: instanceId };\n });\n serverGroup.instances = serverGroup.instances.concat(serverGroup.detachedInstances);\n } else {\n serverGroup.detachedInstances = [];\n }\n });\n const activeServerGroups = _.filter(loadBalancer.serverGroups, { isDisabled: false });\n loadBalancer.provider = loadBalancer.type;\n loadBalancer.instances = _.chain(activeServerGroups).map('instances').flatten().value();\n loadBalancer.detachedInstances = _.chain(activeServerGroups).map('detachedInstances').flatten().value();\n return $q.resolve(loadBalancer);\n }\n\n function convertLoadBalancerForEditing(loadBalancer) {\n const toEdit = {\n region: loadBalancer.region,\n credentials: loadBalancer.account,\n name: loadBalancer.name,\n stack: loadBalancer.stack,\n detail: loadBalancer.detail,\n vnet: loadBalancer.vnet,\n subnet: loadBalancer.subnet,\n probes: [],\n loadBalancingRules: [],\n };\n\n if (loadBalancer.elb) {\n const elb = loadBalancer.elb;\n\n toEdit.securityGroups = elb.securityGroups;\n toEdit.vnet = elb.vnet;\n\n if (elb.loadBalancingRules) {\n toEdit.loadBalancingRules = elb.loadBalancingRules;\n }\n\n toEdit.probes = elb.probes;\n if (elb.dnsName && elb.dnsName !== 'dns-not-found') {\n toEdit.dnsName = elb.dnsName.split('.')[0];\n }\n }\n return toEdit;\n }\n\n function constructNewLoadBalancerTemplate(application) {\n const defaultCredentials = application.defaultCredentials.azure || AzureProviderSettings.defaults.account;\n const defaultRegion = application.defaultRegions.azure || AzureProviderSettings.defaults.region;\n return {\n stack: '',\n detail: 'frontend',\n credentials: defaultCredentials,\n region: defaultRegion,\n cloudProvider: 'azure',\n vnet: null,\n subnet: null,\n probes: [\n {\n probeName: '',\n probeProtocol: 'HTTP',\n probePort: '80',\n probePath: '/',\n probeInterval: 30,\n unhealthyThreshold: 8,\n timeout: 120,\n },\n ],\n securityGroups: [],\n loadBalancingRules: [\n {\n ruleName: '',\n protocol: 'HTTP',\n externalPort: 80,\n backendPort: 80,\n probeName: '',\n persistence: 'None',\n idleTimeout: 4,\n },\n ],\n sku: 'Standard_v2',\n };\n }\n\n return {\n normalizeLoadBalancer: normalizeLoadBalancer,\n convertLoadBalancerForEditing: convertLoadBalancerForEditing,\n constructNewLoadBalancerTemplate: constructNewLoadBalancerTemplate,\n };\n },\n]);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nimport { AccountService, LoadBalancerWriter, NameUtils, NetworkReader, TaskMonitor } from '@spinnaker/core';\n\nimport { AZURE_LOADBALANCER_LOADBALANCER_TRANSFORMER } from '../loadBalancer.transformer';\n\nexport const AZURE_LOADBALANCER_CONFIGURE_CREATELOADBALANCER_CONTROLLER =\n 'spinnaker.azure.loadBalancer.create.controller';\nexport const name = AZURE_LOADBALANCER_CONFIGURE_CREATELOADBALANCER_CONTROLLER; // for backwards compatibility\nmodule(AZURE_LOADBALANCER_CONFIGURE_CREATELOADBALANCER_CONTROLLER, [\n UIROUTER_ANGULARJS,\n AZURE_LOADBALANCER_LOADBALANCER_TRANSFORMER,\n]).controller('azureCreateLoadBalancerCtrl', [\n '$scope',\n '$uibModalInstance',\n '$state',\n 'azureLoadBalancerTransformer',\n 'application',\n 'loadBalancer',\n 'isNew',\n 'loadBalancerType',\n function (\n $scope,\n $uibModalInstance,\n $state,\n azureLoadBalancerTransformer,\n application,\n loadBalancer,\n isNew,\n loadBalancerType,\n ) {\n const ctrl = this;\n\n $scope.regions = [];\n\n $scope.pages = {\n location: require('./createLoadBalancerProperties.html'),\n listeners: require('./listeners.html'),\n healthCheck: require('./healthCheck.html'),\n advancedSettings: require('./advancedSettings.html'),\n };\n\n $scope.isNew = isNew;\n $scope.loadBalancerType = loadBalancerType.type;\n $scope.isALB = loadBalancerType.type === 'Azure Load Balancer';\n\n $scope.state = {\n accountsLoaded: false,\n submitting: false,\n };\n\n $scope.validSkus = ['Standard_v2', 'Standard_Small'];\n\n function onApplicationRefresh() {\n // If the user has already closed the modal, do not navigate to the new details view\n if ($scope.$$destroyed) {\n return;\n }\n $uibModalInstance.close();\n const newStateParams = {\n name: $scope.loadBalancer.name,\n accountId: $scope.loadBalancer.credentials,\n region: $scope.loadBalancer.region,\n provider: 'azure',\n };\n\n if (!$state.includes('**.loadBalancerDetails')) {\n $state.go('.loadBalancerDetails', newStateParams);\n } else {\n $state.go('^.loadBalancerDetails', newStateParams);\n }\n }\n\n function onTaskComplete() {\n application.loadBalancers.refresh();\n application.loadBalancers.onNextRefresh($scope, onApplicationRefresh);\n }\n\n $scope.taskMonitor = new TaskMonitor({\n application: application,\n title: (isNew ? 'Creating ' : 'Updating ') + 'your load balancer',\n modalInstance: $uibModalInstance,\n onTaskComplete: onTaskComplete,\n });\n\n function initializeCreateMode() {\n AccountService.listAccounts('azure').then(function (accounts) {\n $scope.accounts = accounts;\n $scope.state.accountsLoaded = true;\n ctrl.accountUpdated();\n });\n }\n\n function initializeController() {\n if (loadBalancer) {\n $scope.loadBalancer = azureLoadBalancerTransformer.convertLoadBalancerForEditing(loadBalancer);\n if (isNew) {\n const nameParts = NameUtils.parseLoadBalancerName($scope.loadBalancer.name);\n $scope.loadBalancer.stack = nameParts.stack;\n $scope.loadBalancer.detail = nameParts.freeFormDetails;\n delete $scope.loadBalancer.name;\n }\n } else {\n $scope.loadBalancer = azureLoadBalancerTransformer.constructNewLoadBalancerTemplate(application);\n }\n if (isNew) {\n updateLoadBalancerNames();\n initializeCreateMode();\n }\n }\n\n function updateLoadBalancerNames() {\n const account = $scope.loadBalancer.credentials;\n const region = $scope.loadBalancer.region;\n\n const accountLoadBalancersByRegion = {};\n application\n .getDataSource('loadBalancers')\n .refresh(true)\n .then(() => {\n application.getDataSource('loadBalancers').data.forEach((loadBalancer) => {\n if (loadBalancer.account === account) {\n accountLoadBalancersByRegion[loadBalancer.region] =\n accountLoadBalancersByRegion[loadBalancer.region] || [];\n accountLoadBalancersByRegion[loadBalancer.region].push(loadBalancer.name);\n }\n });\n\n $scope.existingLoadBalancerNames = accountLoadBalancersByRegion[region] || [];\n });\n }\n\n initializeController();\n\n this.requiresHealthCheckPath = function () {\n return (\n $scope.loadBalancer.probes[0].probeProtocol && $scope.loadBalancer.probes[0].probeProtocol.indexOf('HTTP') === 0\n );\n };\n\n this.updateName = function () {\n $scope.loadBalancer.name = this.getName();\n };\n\n this.getName = function () {\n const elb = $scope.loadBalancer;\n const elbName = [application.name, elb.stack || '', elb.detail || ''].join('-');\n return _.trimEnd(elbName, '-');\n };\n\n this.accountUpdated = function () {\n AccountService.getRegionsForAccount($scope.loadBalancer.credentials).then(function (regions) {\n $scope.regions = regions;\n ctrl.regionUpdated();\n });\n };\n\n this.regionUpdated = function () {\n updateLoadBalancerNames();\n ctrl.updateName();\n ctrl.vnetUpdated();\n };\n\n this.vnetUpdated = function () {\n const account = $scope.loadBalancer.credentials;\n const region = $scope.loadBalancer.region;\n $scope.loadBalancer.selectedVnet = null;\n $scope.loadBalancer.vnet = null;\n $scope.loadBalancer.vnetResourceGroup = null;\n ctrl.selectedVnets = [];\n\n NetworkReader.listNetworks().then(function (vnets) {\n if (vnets.azure) {\n vnets.azure.forEach((vnet) => {\n if (vnet.account === account && vnet.region === region) {\n ctrl.selectedVnets.push(vnet);\n }\n });\n }\n });\n\n ctrl.subnetUpdated();\n };\n\n this.subnetUpdated = function () {\n $scope.loadBalancer.selectedSubnet = null;\n $scope.loadBalancer.subnet = null;\n ctrl.selectedSubnets = [];\n };\n\n this.selectedVnetChanged = function (item) {\n $scope.loadBalancer.vnet = item.name;\n $scope.loadBalancer.vnetResourceGroup = item.resourceGroup;\n $scope.loadBalancer.selectedSubnet = null;\n $scope.loadBalancer.subnet = null;\n ctrl.selectedSubnets = [];\n if (item.subnets) {\n item.subnets.map(function (subnet) {\n let addSubnet = true;\n if (subnet.devices) {\n subnet.devices.map(function (device) {\n if (device && device.type !== 'applicationGateways') {\n addSubnet = false;\n }\n });\n }\n if (addSubnet) {\n ctrl.selectedSubnets.push(subnet);\n }\n });\n }\n };\n\n this.removeListener = function (index) {\n $scope.loadBalancer.loadBalancingRules.splice(index, 1);\n };\n\n this.addListener = function () {\n $scope.loadBalancer.loadBalancingRules.push({ protocol: 'HTTP' });\n };\n\n this.submit = function () {\n const descriptor = isNew ? 'Create' : 'Update';\n\n $scope.taskMonitor.submit(function () {\n const params = {\n cloudProvider: 'azure',\n appName: application.name,\n clusterName: $scope.loadBalancer.clusterName,\n resourceGroupName: $scope.loadBalancer.clusterName,\n loadBalancerName: $scope.loadBalancer.name,\n };\n\n if ($scope.loadBalancer.selectedVnet) {\n $scope.loadBalancer.vnet = $scope.loadBalancer.selectedVnet.name;\n $scope.loadBalancer.vnetResourceGroup = $scope.loadBalancer.selectedVnet.resourceGroup;\n }\n\n if ($scope.loadBalancer.selectedSubnet) {\n $scope.loadBalancer.subnet = $scope.loadBalancer.selectedSubnet.name;\n }\n\n const name = $scope.loadBalancer.clusterName || $scope.loadBalancer.name;\n const probeName = name + '-probe';\n const ruleNameBase = name + '-rule';\n $scope.loadBalancer.type = 'upsertLoadBalancer';\n $scope.loadBalancer.loadBalancerType = $scope.loadBalancerType;\n if (!$scope.loadBalancer.vnet && !$scope.loadBalancer.subnetType) {\n $scope.loadBalancer.securityGroups = null;\n }\n\n $scope.loadBalancer.probes[0].probeName = probeName;\n\n $scope.loadBalancer.loadBalancingRules.forEach((rule, index) => {\n rule.ruleName = ruleNameBase + index;\n rule.probeName = probeName;\n });\n\n if ($scope.loadBalancer.probes[0].probeProtocol === 'TCP') {\n $scope.loadBalancer.probes[0].probePath = undefined;\n }\n\n return LoadBalancerWriter.upsertLoadBalancer($scope.loadBalancer, application, descriptor, params);\n });\n };\n\n this.cancel = function () {\n $uibModalInstance.dismiss();\n };\n },\n]);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport * as angular from 'angular';\nimport ANGULAR_UI_BOOTSTRAP from 'angular-ui-bootstrap';\nimport _ from 'lodash';\n\nimport {\n ConfirmationModalService,\n FirewallLabels,\n LOAD_BALANCER_READ_SERVICE,\n LoadBalancerWriter,\n SECURITY_GROUP_READER,\n} from '@spinnaker/core';\n\nexport const AZURE_LOADBALANCER_DETAILS_LOADBALANCERDETAIL_CONTROLLER =\n 'spinnaker.azure.loadBalancer.details.controller';\nexport const name = AZURE_LOADBALANCER_DETAILS_LOADBALANCERDETAIL_CONTROLLER; // for backwards compatibility\nangular\n .module(AZURE_LOADBALANCER_DETAILS_LOADBALANCERDETAIL_CONTROLLER, [\n ANGULAR_UI_BOOTSTRAP,\n UIROUTER_ANGULARJS,\n SECURITY_GROUP_READER,\n LOAD_BALANCER_READ_SERVICE,\n ])\n .controller('azureLoadBalancerDetailsCtrl', [\n '$scope',\n '$state',\n '$exceptionHandler',\n '$uibModal',\n 'loadBalancer',\n 'app',\n 'securityGroupReader',\n 'loadBalancerReader',\n '$q',\n function (\n $scope,\n $state,\n $exceptionHandler,\n $uibModal,\n loadBalancer,\n app,\n securityGroupReader,\n loadBalancerReader,\n $q,\n ) {\n $scope.state = {\n loading: true,\n };\n\n $scope.firewallsLabel = FirewallLabels.get('Firewalls');\n\n function extractLoadBalancer() {\n $scope.loadBalancer = app.loadBalancers.data.filter(function (test) {\n return (\n test.name === loadBalancer.name &&\n test.region === loadBalancer.region &&\n test.account === loadBalancer.accountId\n );\n })[0];\n\n if ($scope.loadBalancer) {\n const detailsLoader = loadBalancerReader.getLoadBalancerDetails(\n $scope.loadBalancer.provider,\n loadBalancer.accountId,\n loadBalancer.region,\n loadBalancer.name,\n );\n\n return detailsLoader.then(function (details) {\n $scope.state.loading = false;\n const securityGroups = [];\n\n const filtered = details.filter(function (test) {\n return test.name === loadBalancer.name;\n });\n\n if (filtered.length) {\n $scope.loadBalancer.elb = filtered[0];\n\n $scope.loadBalancer.account = loadBalancer.accountId;\n\n if ($scope.loadBalancer.elb.securityGroups) {\n $scope.loadBalancer.elb.securityGroups.forEach(function (securityGroupId) {\n const match = securityGroupReader.getApplicationSecurityGroup(\n app,\n loadBalancer.accountId,\n loadBalancer.region,\n securityGroupId,\n );\n if (match) {\n securityGroups.push(match);\n }\n });\n $scope.securityGroups = _.sortBy(securityGroups, 'name');\n }\n\n if ($scope.loadBalancer.loadBalancerType && $scope.loadBalancer.loadBalancerType.includes('_')) {\n const type = $scope.loadBalancer.loadBalancerType;\n $scope.loadBalancer.loadBalancerType = type\n .split('_')\n .map((s) => {\n const ss = s.toLowerCase();\n return ss.substring(0, 1).toUpperCase() + ss.substring(1);\n })\n .join(' ');\n }\n }\n });\n }\n if (!$scope.loadBalancer) {\n $state.go('^');\n }\n\n return $q.when(null);\n }\n\n app\n .ready()\n .then(extractLoadBalancer)\n .then(() => {\n // If the user navigates away from the view before the initial extractLoadBalancer call completes,\n // do not bother subscribing to the refresh\n if (!$scope.$$destroyed) {\n app.onRefresh($scope, extractLoadBalancer);\n }\n });\n\n this.editLoadBalancer = function editLoadBalancer() {\n $uibModal.open({\n templateUrl: require('../configure/editLoadBalancer.html'),\n controller: 'azureCreateLoadBalancerCtrl as ctrl',\n size: 'lg',\n resolve: {\n application: function () {\n return app;\n },\n loadBalancer: function () {\n return angular.copy($scope.loadBalancer);\n },\n isNew: function () {\n return false;\n },\n loadBalancerType: function () {\n return { type: $scope.loadBalancer.loadBalancerType };\n },\n },\n });\n };\n\n this.deleteLoadBalancer = function deleteLoadBalancer() {\n if ($scope.loadBalancer.instances && $scope.loadBalancer.instances.length) {\n return;\n }\n\n const taskMonitor = {\n application: app,\n title: 'Deleting ' + loadBalancer.name,\n };\n\n const command = {\n cloudProvider: 'azure',\n loadBalancerName: $scope.loadBalancer.name,\n loadBalancerType: $scope.loadBalancer.loadBalancerType,\n credentials: $scope.loadBalancer.account,\n region: loadBalancer.region,\n appName: app.name,\n };\n\n const submitMethod = () => LoadBalancerWriter.deleteLoadBalancer(command, app);\n\n ConfirmationModalService.confirm({\n header: 'Really delete ' + loadBalancer.name + '?',\n buttonText: 'Delete ' + loadBalancer.name,\n account: loadBalancer.accountId,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n });\n };\n },\n ]);\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQYAAACrCAYAAACEwDK4AAAAAXNSR0IArs4c6QAAAAlwSFlzAAALEwAACxMBAJqcGAAABCZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIgogICAgICAgICAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDx0aWZmOkNvbXByZXNzaW9uPjU8L3RpZmY6Q29tcHJlc3Npb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjcyPC90aWZmOlhSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpPcmllbnRhdGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgogICAgICAgICA8dGlmZjpZUmVzb2x1dGlvbj43MjwvdGlmZjpZUmVzb2x1dGlvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjI2MjwvZXhpZjpQaXhlbFhEaW1lbnNpb24+CiAgICAgICAgIDxleGlmOkNvbG9yU3BhY2U+MTwvZXhpZjpDb2xvclNwYWNlPgogICAgICAgICA8ZXhpZjpQaXhlbFlEaW1lbnNpb24+MTcxPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgICAgPGRjOnN1YmplY3Q+CiAgICAgICAgICAgIDxyZGY6QmFnLz4KICAgICAgICAgPC9kYzpzdWJqZWN0PgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxOS0wNS0wNlQxMjowNTozMTwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+UGl4ZWxtYXRvciAzLjguMzwveG1wOkNyZWF0b3JUb29sPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4K8Qjg7wAAM9JJREFUeAHtnQeAFdX1/8/MvLa9L1tgF5Zl6UUUggoIggVLrCQYY42a/jPlb4rxr9EkvxhNIz9bEjUmllhRRFCxIKII0hVY2jaWLbC9vf5mft9z571lwd1lWfWXRM+FeW/ezJ07937uveeee+6ZWbIsazG2EpIgBITA554AywKWCSRC4XPfFgSAEDiCgMiEI3DIDyEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEh8B9DQPuPyWk0o+2WlRnyhYorW8O5++pb0irq2pIqu6y46uaAtau6tv6+L89Yf9akzF3/aeWS/AqBfycCjk8jM5ZljUa6FrZyTdPCvd0DcZJwvAhbLrZkbN158RMZXaGIsbcx4Cira3ej8ydWtoeza1u9haf8atXItkBkeER3pkYiRDpEm6FppBkaBci9zxHv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\"","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport { module } from 'angular';\n\nimport { SETTINGS } from '@spinnaker/core';\n\nexport const AZURE_PIPELINE_STAGES_BAKE_BAKEEXECUTIONDETAILS_CONTROLLER =\n 'spinnaker.azure.pipeline.stage.bake.executionDetails.controller';\nexport const name = AZURE_PIPELINE_STAGES_BAKE_BAKEEXECUTIONDETAILS_CONTROLLER; // for backwards compatibility\nmodule(AZURE_PIPELINE_STAGES_BAKE_BAKEEXECUTIONDETAILS_CONTROLLER, [UIROUTER_ANGULARJS]).controller(\n 'azureBakeExecutionDetailsCtrl',\n [\n '$scope',\n '$stateParams',\n 'executionDetailsSectionService',\n '$interpolate',\n function ($scope, $stateParams, executionDetailsSectionService, $interpolate) {\n $scope.configSections = ['bakeConfig', 'taskStatus'];\n\n const initialized = () => {\n $scope.detailsSection = $stateParams.details;\n $scope.provider = $scope.stage.context.cloudProviderType || 'azure';\n $scope.roscoMode =\n SETTINGS.feature.roscoMode ||\n (typeof SETTINGS.feature.roscoSelector === 'function' &&\n SETTINGS.feature.roscoSelector($scope.stage.context));\n $scope.bakeryDetailUrl = $interpolate(\n $scope.roscoMode && SETTINGS.roscoDetailUrl ? SETTINGS.roscoDetailUrl : SETTINGS.bakeryDetailUrl,\n );\n };\n\n const initialize = () => executionDetailsSectionService.synchronizeSection($scope.configSections, initialized);\n\n initialize();\n\n $scope.$on('$stateChangeSuccess', initialize);\n },\n ],\n);\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nexport const AZURE_SERVERGROUP_SERVERGROUP_TRANSFORMER = 'spinnaker.azure.serverGroup.transformer';\nexport const name = AZURE_SERVERGROUP_SERVERGROUP_TRANSFORMER; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_SERVERGROUP_TRANSFORMER, []).factory('azureServerGroupTransformer', function () {\n function normalizeServerGroup(serverGroup) {\n return serverGroup;\n }\n\n function parseCustomScriptsSettings(command, configuration) {\n /*\n At the first time this wizard pops up, the type of command.customScriptsSettings.fileUris is String. As for the following\n occurrences of its pop up with this field unchanged, its type becomes an array. So here differentiate the two scenarios\n to assign the correct value to model.\n */\n if (Array.isArray(command.customScriptsSettings.fileUris)) {\n configuration.customScriptsSettings.fileUris = command.customScriptsSettings.fileUris;\n } else {\n const fileUrisTemp = command.customScriptsSettings.fileUris;\n if (fileUrisTemp.includes(',')) {\n configuration.customScriptsSettings.fileUris = fileUrisTemp.split(',');\n } else if (fileUrisTemp.includes(';')) {\n configuration.customScriptsSettings.fileUris = fileUrisTemp.split(';');\n } else {\n configuration.customScriptsSettings.fileUris = [fileUrisTemp];\n }\n\n configuration.customScriptsSettings.fileUris.forEach(function (v, index) {\n configuration.customScriptsSettings.fileUris[index] = v.trim();\n });\n }\n }\n\n function convertServerGroupCommandToDeployConfiguration(command) {\n let tempImage;\n\n if (command.viewState.mode === 'editPipeline' || command.viewState.mode === 'createPipeline') {\n tempImage = {\n imageName: '',\n isCustom: 'true',\n publisher: '',\n offer: '',\n sku: '',\n version: '',\n region: command.region,\n uri: '',\n ostype: '',\n };\n } else {\n tempImage = command.selectedImage;\n }\n\n const configuration = {\n name: command.application,\n cloudProvider: command.selectedProvider,\n application: command.application,\n stack: command.stack,\n strategy: command.strategy,\n rollback: {\n onFailure: command.rollback ? command.rollback.onFailure : null,\n },\n scaleDown: command.scaleDown,\n maxRemainingAsgs: command.maxRemainingAsgs,\n delayBeforeDisableSec: command.delayBeforeDisableSec,\n delayBeforeScaleDownSec: command.delayBeforeScaleDownSec,\n allowDeleteActive: command.strategy === 'redblack' ? true : null,\n allowScaleDownActive: command.strategy === 'redblack' ? true : null,\n detail: command.freeFormDetails,\n freeFormDetails: command.freeFormDetails,\n healthSettings: command.healthSettings,\n image: command.image,\n account: command.credentials,\n selectedProvider: 'azure',\n vnet: command.vnet,\n vnetResourceGroup: command.selectedVnet.resourceGroup,\n subnet: command.subnet,\n useSourceCapacity: false,\n capacity: {\n min: command.sku.capacity,\n max: command.sku.capacity,\n },\n credentials: command.credentials,\n region: command.region,\n securityGroupName: command.securityGroupName,\n loadBalancerName: command.loadBalancerName,\n loadBalancerType: command.loadBalancerType,\n user: '[anonymous]',\n upgradePolicy: 'Manual',\n type: 'createServerGroup',\n sku: {\n name: 'Standard_DS1_v2',\n tier: 'Standard',\n capacity: command.sku.capacity,\n },\n instanceTags: command.instanceTags,\n dataDisks: command.dataDisks,\n userAssignedIdentities: command.userAssignedIdentities,\n viewState: command.viewState,\n osConfig: {\n customData: command.osConfig ? command.osConfig.customData : null,\n },\n customScriptsSettings: {\n fileUris: null,\n commandToExecute: '',\n },\n zonesEnabled: command.zonesEnabled,\n zones: command.zonesEnabled ? command.zones : [],\n enableInboundNAT: command.enableInboundNAT,\n };\n\n if (command.image == null || command.image.isCustom == false) {\n configuration.image = tempImage;\n }\n\n if (typeof command.stack !== 'undefined') {\n configuration.name = configuration.name + '-' + command.stack;\n }\n if (typeof command.freeFormDetails !== 'undefined') {\n configuration.name = configuration.name + '-' + command.freeFormDetails;\n }\n\n if (typeof command.customScriptsSettings !== 'undefined') {\n configuration.customScriptsSettings.commandToExecute = command.customScriptsSettings.commandToExecute;\n if (!_.isEmpty(command.customScriptsSettings.fileUris)) {\n parseCustomScriptsSettings(command, configuration);\n }\n }\n\n if (command.instanceType) {\n const vmsku = command.instanceType;\n configuration.instanceType = command.instanceType;\n configuration.sku.name = vmsku;\n configuration.sku.tier = vmsku.substring(0, vmsku.indexOf('_'));\n }\n\n // Default to an empty list of health provider names for now.\n configuration.interestingHealthProviderNames = [];\n\n return configuration;\n }\n\n return {\n convertServerGroupCommandToDeployConfiguration: convertServerGroupCommandToDeployConfiguration,\n normalizeServerGroup: normalizeServerGroup,\n parseCustomScriptsSettings: parseCustomScriptsSettings,\n };\n});\n","'use strict';\n\nimport * as angular from 'angular';\nimport _ from 'lodash';\n\nimport { NameUtils } from '@spinnaker/core';\nimport { AZURE_IMAGE_IMAGE_READER } from '../../image/image.reader';\nimport { AZURE_SERVERGROUP_SERVERGROUP_TRANSFORMER } from '../serverGroup.transformer';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE =\n 'spinnaker.azure.serverGroupCommandBuilder.service';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE; // for backwards compatibility\nangular\n .module(AZURE_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE, [\n AZURE_IMAGE_IMAGE_READER,\n AZURE_SERVERGROUP_SERVERGROUP_TRANSFORMER,\n ])\n .factory('azureServerGroupCommandBuilder', [\n '$q',\n 'azureImageReader',\n 'azureServerGroupTransformer',\n function ($q, azureImageReader, azureServerGroupTransformer) {\n function buildNewServerGroupCommand(application, defaults) {\n defaults = defaults || {};\n\n const defaultCredentials = defaults.account || application.defaultCredentials.azure;\n const defaultRegion = defaults.region || application.defaultRegions.azure;\n\n return azureImageReader.findImages({ provider: 'azure' }).then(function (images) {\n return {\n application: application.name,\n credentials: defaultCredentials,\n region: defaultRegion,\n images,\n loadBalancers: [],\n selectedVnetSubnets: [],\n strategy: '',\n sku: {\n capacity: 1,\n },\n zonesEnabled: false,\n zones: [],\n instanceTags: {},\n dataDisks: [],\n selectedProvider: 'azure',\n viewState: {\n instanceProfile: 'custom',\n allImageSelection: null,\n useAllImageSelection: false,\n useSimpleCapacity: true,\n usePreferredZones: true,\n mode: defaults.mode || 'create',\n disableStrategySelection: true,\n loadBalancersConfigured: false,\n networkSettingsConfigured: false,\n securityGroupsConfigured: false,\n },\n enableInboundNAT: false,\n };\n });\n }\n\n // Only used to prepare view requiring template selecting\n function buildNewServerGroupCommandForPipeline() {\n return $q.when({\n viewState: {\n requiresTemplateSelection: true,\n },\n });\n }\n\n function buildServerGroupCommandFromExisting(application, serverGroup, mode) {\n mode = mode || 'clone';\n\n const serverGroupName = NameUtils.parseServerGroupName(serverGroup.name);\n\n const command = {\n application: application.name,\n strategy: '',\n stack: serverGroupName.stack,\n freeFormDetails: serverGroupName.freeFormDetails,\n credentials: serverGroup.account,\n loadBalancers: serverGroup.loadBalancers,\n selectedSubnets: serverGroup.selectedVnetSubnets,\n selectedVnet: serverGroup.selectedVnet,\n securityGroups: serverGroup.securityGroups,\n loadBalancerName: serverGroup.loadBalancerName,\n loadBalancerType: serverGroup.loadBalancerType,\n securityGroupName: serverGroup.securityGroupName,\n region: serverGroup.region,\n vnet: serverGroup.vnet,\n vnetResourceGroup: serverGroup.vnetResourceGroup,\n subnet: serverGroup.subnet,\n zones: serverGroup.zones,\n zonesEnabled: serverGroup.zones && serverGroup.zones.length > 0,\n instanceTags: {},\n dataDisks: serverGroup.dataDisks,\n sku: serverGroup.sku,\n capacity: {\n min: serverGroup.capacity.min,\n max: serverGroup.capacity.max,\n desired: serverGroup.capacity.desired,\n },\n tags: [],\n instanceType: serverGroup.sku.name,\n selectedProvider: 'azure',\n source: {\n account: serverGroup.account,\n region: serverGroup.region,\n serverGroupName: serverGroup.name,\n asgName: serverGroup.name,\n },\n viewState: {\n allImageSelection: null,\n useAllImageSelection: false,\n useSimpleCapacity: true,\n usePreferredZones: false,\n listImplicitSecurityGroups: false,\n mode: mode,\n disableStrategySelection: true,\n },\n enableInboundNAT: serverGroup.enableInboundNAT,\n };\n\n if (typeof serverGroup.customScriptsSettings !== 'undefined') {\n command.customScriptsSettings = {};\n command.customScriptsSettings.commandToExecute = serverGroup.customScriptsSettings.commandToExecute;\n if (!_.isEmpty(serverGroup.customScriptsSettings.fileUris)) {\n azureServerGroupTransformer.parseCustomScriptsSettings(serverGroup, command);\n }\n }\n\n return $q.when(command);\n }\n\n function buildServerGroupCommandFromPipeline(application, originalCluster) {\n const pipelineCluster = _.cloneDeep(originalCluster);\n const region = pipelineCluster.region;\n\n const commandOptions = { account: pipelineCluster.account, region: region };\n return buildNewServerGroupCommand(application, commandOptions).then(function (command) {\n const viewState = {\n disableImageSelection: true,\n useSimpleCapacity: true,\n mode: 'editPipeline',\n submitButtonLabel: 'Done',\n instanceProfile: originalCluster.viewState.instanceProfile,\n instanceTypeDetails: originalCluster.viewState.instanceTypeDetails,\n };\n\n const viewOverrides = {\n region: region,\n credentials: pipelineCluster.account,\n viewState: viewState,\n };\n if (originalCluster.viewState.instanceTypeDetails) {\n viewOverrides.instanceType = originalCluster.viewState.instanceTypeDetails.name;\n }\n\n pipelineCluster.strategy = pipelineCluster.strategy || '';\n\n const extendedCommand = angular.extend({}, command, pipelineCluster, viewOverrides);\n\n return extendedCommand;\n });\n }\n\n return {\n buildNewServerGroupCommand: buildNewServerGroupCommand,\n buildNewServerGroupCommandForPipeline: buildNewServerGroupCommandForPipeline,\n buildServerGroupCommandFromExisting: buildServerGroupCommandFromExisting,\n buildServerGroupCommandFromPipeline: buildServerGroupCommandFromPipeline,\n };\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nimport {\n AccountService,\n AuthenticationService,\n BakeExecutionLabel,\n BakeryReader,\n PipelineTemplates,\n Registry,\n SETTINGS,\n} from '@spinnaker/core';\n\nimport { AZURE_PIPELINE_STAGES_BAKE_BAKEEXECUTIONDETAILS_CONTROLLER } from './bakeExecutionDetails.controller';\nimport { AZURE_IMAGE_IMAGE_READER } from '../../../image/image.reader';\nimport { AZURE_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE } from './../../../serverGroup/configure/serverGroupCommandBuilder.service';\n\nexport const AZURE_PIPELINE_STAGES_BAKE_AZUREBAKESTAGE = 'spinnaker.azure.pipeline.stage.bakeStage';\nexport const name = AZURE_PIPELINE_STAGES_BAKE_AZUREBAKESTAGE; // for backwards compatibility\nmodule(AZURE_PIPELINE_STAGES_BAKE_AZUREBAKESTAGE, [\n AZURE_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE,\n AZURE_IMAGE_IMAGE_READER,\n AZURE_PIPELINE_STAGES_BAKE_BAKEEXECUTIONDETAILS_CONTROLLER,\n])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'bake',\n cloudProvider: 'azure',\n label: 'Bake',\n description: 'Bakes an image',\n templateUrl: require('./bakeStage.html'),\n executionDetailsUrl: require('./bakeExecutionDetails.html'),\n executionLabelComponent: BakeExecutionLabel,\n extraLabelLines: (stage) => {\n return stage.masterStage.context.allPreviouslyBaked || stage.masterStage.context.somePreviouslyBaked ? 1 : 0;\n },\n supportsCustomTimeout: true,\n validators: [\n { type: 'requiredField', fieldName: 'package' },\n { type: 'requiredField', fieldName: 'regions' },\n {\n type: 'upstreamVersionProvided',\n checkParentTriggers: true,\n getMessage: (labels) =>\n 'Bake stages should always have a stage or trigger preceding them that provides version information: ' +\n '<ul>' +\n labels.map((label) => `<li>${label}</li>`).join('') +\n '</ul>' +\n 'Otherwise, Spinnaker will bake and deploy the most-recently built package.',\n },\n ],\n restartable: true,\n });\n })\n .controller('azureBakeStageCtrl', [\n '$scope',\n '$q',\n 'azureImageReader',\n '$uibModal',\n function ($scope, $q, azureImageReader, $uibModal) {\n $scope.stage.extendedAttributes = $scope.stage.extendedAttributes || {};\n $scope.stage.regions = $scope.stage.regions || [];\n\n if (!$scope.stage.user) {\n $scope.stage.user = AuthenticationService.getAuthenticatedUser().name;\n }\n\n $scope.viewState = {\n loading: true,\n };\n\n function initialize() {\n $q.all([\n AccountService.getCredentialsKeyedByAccount('azure'),\n BakeryReader.getRegions('azure'),\n BakeryReader.getBaseOsOptions('azure'),\n BakeryReader.getBaseLabelOptions(),\n ]).then(function ([credentialsKeyedByAccount, regions, baseOsOptions, baseLabelOptions]) {\n $scope.accounts = Object.keys(credentialsKeyedByAccount);\n $scope.regions = regions;\n if ($scope.regions.length === 1) {\n $scope.stage.region = $scope.regions[0];\n } else if (!$scope.regions.includes($scope.stage.region)) {\n delete $scope.stage.region;\n }\n if (!$scope.stage.regions.length && $scope.application.defaultRegions.azure) {\n $scope.stage.regions.push($scope.application.defaultRegions.azure);\n }\n if (!$scope.stage.regions.length && $scope.application.defaultRegions.azure) {\n $scope.stage.regions.push($scope.application.defaultRegions.azure);\n }\n $scope.baseOsOptions = baseOsOptions.baseImages;\n\n $scope.baseLabelOptions = baseLabelOptions;\n $scope.osTypeOptions = ['linux', 'windows'];\n $scope.packageTypeOptions = ['DEB', 'RPM'];\n\n $scope.viewState.roscoMode =\n SETTINGS.feature.roscoMode ||\n (typeof SETTINGS.feature.roscoSelector === 'function' && SETTINGS.feature.roscoSelector($scope.stage));\n $scope.showAdvancedOptions = showAdvanced();\n $scope.viewState.loading = false;\n\n if ($scope.stage.managedImage != null) {\n $scope.managedImagesWasChosen = true;\n setManagedImages();\n }\n $scope.defaultImagesWasChosen = $scope.stage.baseOs != null;\n $scope.customImagesWasChosen = $scope.stage.publisher != null;\n });\n }\n\n function stageUpdated() {\n deleteEmptyProperties();\n // Since the selector computes using stage as an input, it needs to be able to recompute roscoMode on updates\n if (typeof SETTINGS.feature.roscoSelector === 'function') {\n $scope.viewState.roscoMode = SETTINGS.feature.roscoSelector($scope.stage);\n }\n }\n\n function showAdvanced() {\n const stg = $scope.stage;\n return !!(\n stg.templateFileName ||\n (stg.extendedAttributes && _.size(stg.extendedAttributes) > 0) ||\n stg.varFileName\n );\n }\n\n function deleteEmptyProperties() {\n _.forOwn($scope.stage, function (val, key) {\n if (val === '') {\n delete $scope.stage[key];\n }\n });\n }\n\n function setManagedImages() {\n azureImageReader\n .findImages({ provider: 'azure', managedImages: true, account: $scope.stage.account })\n .then(function (images) {\n let managedImageOptions = [];\n for (let i in images) {\n let image = images[i];\n let newImage = {\n id: image.imageName,\n osType: image.ostype,\n name: image.imageName,\n };\n managedImageOptions.push(newImage);\n }\n $scope.managedImageOptions = managedImageOptions;\n })\n .catch(() => {});\n }\n\n function setRegions() {\n AccountService.getRegionsForAccount($scope.stage.account)\n .then(function (regions) {\n $scope.regions = regions.map((r) => r.name);\n })\n .catch(() => {});\n }\n\n this.addExtendedAttribute = function () {\n if (!$scope.stage.extendedAttributes) {\n $scope.stage.extendedAttributes = {};\n }\n $uibModal\n .open({\n templateUrl: PipelineTemplates.addExtendedAttributes,\n controller: 'bakeStageAddExtendedAttributeController',\n controllerAs: 'addExtendedAttribute',\n resolve: {\n extendedAttribute: function () {\n return {\n key: '',\n value: '',\n };\n },\n },\n })\n .result.then(function (extendedAttribute) {\n $scope.stage.extendedAttributes[extendedAttribute.key] = extendedAttribute.value;\n })\n .catch(() => {});\n };\n\n this.removeExtendedAttribute = function (key) {\n delete $scope.stage.extendedAttributes[key];\n };\n\n this.showTemplateFileName = function () {\n return $scope.viewState.roscoMode || $scope.stage.templateFileName;\n };\n\n this.showExtendedAttributes = function () {\n return (\n $scope.viewState.roscoMode || ($scope.stage.extendedAttributes && _.size($scope.stage.extendedAttributes) > 0)\n );\n };\n\n this.showVarFileName = function () {\n return $scope.viewState.roscoMode || $scope.stage.varFileName;\n };\n\n this.showDefaultImages = function () {\n $scope.managedImagesWasChosen = false;\n $scope.defaultImagesWasChosen = true;\n $scope.customImagesWasChosen = false;\n\n $scope.stage.managedImage = null;\n $scope.stage.publisher = null;\n $scope.stage.offer = null;\n $scope.stage.sku = null;\n $scope.stage.osType = null;\n $scope.stage.packageType = null;\n };\n\n this.showManagedImages = function () {\n setManagedImages();\n\n $scope.managedImagesWasChosen = true;\n $scope.defaultImagesWasChosen = false;\n $scope.customImagesWasChosen = false;\n\n $scope.stage.osType = null;\n $scope.stage.baseOs = null;\n $scope.stage.publisher = null;\n $scope.stage.offer = null;\n $scope.stage.sku = null;\n $scope.stage.packageType = null;\n };\n\n this.showCustomImages = function () {\n $scope.managedImagesWasChosen = false;\n $scope.defaultImagesWasChosen = false;\n $scope.customImagesWasChosen = true;\n\n $scope.stage.baseOs = null;\n $scope.stage.managedImage = null;\n $scope.stage.osType = null;\n $scope.stage.packageType = null;\n };\n\n this.onChangeAccount = () => {\n $scope.stage.osType = null;\n $scope.stage.packageType = null;\n $scope.stage.managedImage = null;\n\n if ($scope.stage.account) {\n setRegions();\n }\n\n if ($scope.managedImagesWasChosen) {\n setManagedImages();\n }\n };\n\n $scope.onChangeManagedImage = () => {\n $scope.stage.packageType = null;\n const selectedManagedImage = _.find($scope.managedImageOptions, { id: $scope.stage.managedImage });\n $scope.stage.osType = selectedManagedImage.osType.toLowerCase();\n };\n\n this.onChangeOsType = function (e) {\n $scope.stage.packageType = null;\n };\n\n $scope.$watch('stage', stageUpdated, true);\n\n initialize();\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { AccountService, Registry, StageConstants } from '@spinnaker/core';\n\nexport const AZURE_PIPELINE_STAGES_DESTROYASG_AZUREDESTROYASGSTAGE = 'spinnaker.azure.pipeline.stage.destroyAsgStage';\nexport const name = AZURE_PIPELINE_STAGES_DESTROYASG_AZUREDESTROYASGSTAGE; // for backwards compatibility\nmodule(AZURE_PIPELINE_STAGES_DESTROYASG_AZUREDESTROYASGSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'destroyServerGroup',\n cloudProvider: 'azure',\n templateUrl: require('./destroyAsgStage.html'),\n executionStepLabelUrl: require('./destroyAsgStepLabel.html'),\n accountExtractor: (stage) => [stage.context.credentials],\n configAccountExtractor: (stage) => [stage.credentials],\n validators: [\n {\n type: 'targetImpedance',\n message:\n 'This pipeline will attempt to destroy a server group without deploying a new version into the same cluster.',\n },\n { type: 'requiredField', fieldName: 'cluster' },\n { type: 'requiredField', fieldName: 'target' },\n { type: 'requiredField', fieldName: 'regions' },\n { type: 'requiredField', fieldName: 'credentials', fieldLabel: 'account' },\n ],\n });\n })\n .controller('azureDestroyAsgStageCtrl', [\n '$scope',\n function ($scope) {\n const ctrl = this;\n\n const stage = $scope.stage;\n\n $scope.state = {\n accounts: false,\n regionsLoaded: false,\n };\n\n AccountService.listAccounts('azure').then(function (accounts) {\n $scope.accounts = accounts;\n $scope.state.accounts = true;\n });\n\n ctrl.accountUpdated = function () {\n AccountService.getAccountDetails(stage.credentials).then(function (details) {\n stage.regions = [details.org];\n // stage.regions = ['eastus', 'westus'];\n });\n };\n\n $scope.targets = StageConstants.TARGET_LIST;\n\n stage.regions = stage.regions || [];\n stage.cloudProvider = 'azure';\n\n stage.interestingHealthProviderNames = []; // bypass the check for now; will change this later to ['azureService']\n\n if (!stage.credentials && $scope.application.defaultCredentials.azure) {\n stage.credentials = $scope.application.defaultCredentials.azure;\n }\n\n if (stage.credentials) {\n ctrl.accountUpdated();\n }\n if (!stage.target) {\n stage.target = $scope.targets[0].val;\n }\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { AccountService, Registry, StageConstants } from '@spinnaker/core';\n\nexport const AZURE_PIPELINE_STAGES_DISABLEASG_AZUREDISABLEASGSTAGE = 'spinnaker.azure.pipeline.stage.disableAsgStage';\nexport const name = AZURE_PIPELINE_STAGES_DISABLEASG_AZUREDISABLEASGSTAGE; // for backwards compatibility\nmodule(AZURE_PIPELINE_STAGES_DISABLEASG_AZUREDISABLEASGSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'disableServerGroup',\n alias: 'disableAsg',\n cloudProvider: 'azure',\n templateUrl: require('./disableAsgStage.html'),\n executionStepLabelUrl: require('./disableAsgStepLabel.html'),\n validators: [\n {\n type: 'targetImpedance',\n message:\n 'This pipeline will attempt to disable a server group without deploying a new version into the same cluster.',\n },\n { type: 'requiredField', fieldName: 'cluster' },\n { type: 'requiredField', fieldName: 'target' },\n { type: 'requiredField', fieldName: 'regions' },\n { type: 'requiredField', fieldName: 'credentials', fieldLabel: 'account' },\n ],\n });\n })\n .controller('azureDisableAsgStageCtrl', [\n '$scope',\n function ($scope) {\n const stage = $scope.stage;\n\n $scope.state = {\n accounts: false,\n regionsLoaded: false,\n };\n\n AccountService.listAccounts('azure').then(function (accounts) {\n $scope.accounts = accounts;\n $scope.state.accounts = true;\n });\n\n $scope.targets = StageConstants.TARGET_LIST;\n\n stage.regions = stage.regions || [];\n stage.cloudProvider = 'azure';\n\n if (stage.isNew && $scope.application.attributes.platformHealthOnly) {\n stage.interestingHealthProviderNames = []; // bypass the check for now; will change this later to ['azureService']\n }\n\n if (!stage.credentials && $scope.application.defaultCredentials.azure) {\n stage.credentials = $scope.application.defaultCredentials.azure;\n }\n if (!stage.regions.length && $scope.application.defaultRegions.azure) {\n stage.regions.push($scope.application.defaultRegions.azure);\n }\n\n if (!stage.target) {\n stage.target = $scope.targets[0].val;\n }\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { AccountService, Registry, StageConstants } from '@spinnaker/core';\n\nexport const AZURE_PIPELINE_STAGES_ENABLEASG_AZUREENABLEASGSTAGE = 'spinnaker.azure.pipeline.stage.enableAsgStage';\nexport const name = AZURE_PIPELINE_STAGES_ENABLEASG_AZUREENABLEASGSTAGE; // for backwards compatibility\nmodule(AZURE_PIPELINE_STAGES_ENABLEASG_AZUREENABLEASGSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'enableServerGroup',\n alias: 'enableAsg',\n cloudProvider: 'azure',\n templateUrl: require('./enableAsgStage.html'),\n executionStepLabelUrl: require('./enableAsgStepLabel.html'),\n validators: [\n { type: 'requiredField', fieldName: 'cluster' },\n { type: 'requiredField', fieldName: 'target' },\n { type: 'requiredField', fieldName: 'regions' },\n { type: 'requiredField', fieldName: 'credentials', fieldLabel: 'account' },\n ],\n });\n })\n .controller('azureEnableAsgStageCtrl', [\n '$scope',\n function ($scope) {\n const ctrl = this;\n\n const stage = $scope.stage;\n\n $scope.state = {\n accounts: false,\n regionsLoaded: false,\n };\n\n AccountService.listAccounts('azure').then(function (accounts) {\n $scope.accounts = accounts;\n $scope.state.accounts = true;\n });\n\n ctrl.reset = () => {\n ctrl.accountUpdated();\n ctrl.resetSelectedCluster();\n };\n\n $scope.targets = StageConstants.TARGET_LIST;\n\n stage.regions = stage.regions || [];\n stage.cloudProvider = 'azure';\n\n if (stage.isNew) {\n // bypass the health check for now; will change this later to ['azureService'] and we will also add back the check for $scope.application.attributes.platformHealthOnly\n stage.interestingHealthProviderNames = [];\n }\n\n if (!stage.credentials && $scope.application.defaultCredentials.azure) {\n stage.credentials = $scope.application.defaultCredentials.azure;\n }\n if (!stage.regions.length && $scope.application.defaultRegions.azure) {\n stage.regions.push($scope.application.defaultRegions.azure);\n }\n\n if (!stage.target) {\n stage.target = $scope.targets[0].val;\n }\n\n $scope.$watch('stage.credentials', $scope.accountUpdated);\n },\n ]);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nimport { FirewallLabels, InfrastructureCaches, TaskExecutor } from '@spinnaker/core';\n\nexport const AZURE_SECURITYGROUP_SECURITYGROUP_WRITE_SERVICE = 'spinnaker.azure.securityGroup.write.service';\nexport const name = AZURE_SECURITYGROUP_SECURITYGROUP_WRITE_SERVICE; // for backwards compatibility\nmodule(AZURE_SECURITYGROUP_SECURITYGROUP_WRITE_SERVICE, [UIROUTER_ANGULARJS]).factory(\n 'azureSecurityGroupWriter',\n function () {\n function upsertSecurityGroup(securityGroup, application, descriptor, params = {}) {\n params.securityGroupName = securityGroup.name;\n\n // We want to extend params with all attributes from securityGroup, but only if they don't already exist.\n _.assignWith(params, securityGroup, function (value, other) {\n return _.isUndefined(value) ? other : value;\n });\n\n const operation = TaskExecutor.executeTask({\n job: [params],\n application: application,\n description: `${descriptor} ${FirewallLabels.get('Firewall')}: ${name}`,\n });\n\n InfrastructureCaches.clearCache('securityGroup');\n\n return operation;\n }\n\n function deleteSecurityGroup(securityGroup, application, params = {}) {\n params.type = 'deleteSecurityGroup';\n params.securityGroupName = securityGroup.name;\n params.regions = [securityGroup.region];\n params.credentials = securityGroup.accountId;\n //params.cloudProvider = securityGroup.providerType;\n params.appName = application.name;\n\n const operation = TaskExecutor.executeTask({\n job: [params],\n application: application,\n description: `Delete ${FirewallLabels.get('Firewalls')}: ${securityGroup.name}`,\n });\n\n InfrastructureCaches.clearCache('securityGroup');\n\n return operation;\n }\n\n return {\n deleteSecurityGroup: deleteSecurityGroup,\n upsertSecurityGroup: upsertSecurityGroup,\n };\n },\n);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nimport { AccountService, FirewallLabels, NetworkReader, TaskMonitor } from '@spinnaker/core';\n\nimport { AZURE_SECURITYGROUP_SECURITYGROUP_WRITE_SERVICE } from '../securityGroup.write.service';\n\nexport const AZURE_SECURITYGROUP_CONFIGURE_CREATESECURITYGROUPCTRL = 'spinnaker.azure.securityGroup.create.controller';\nexport const name = AZURE_SECURITYGROUP_CONFIGURE_CREATESECURITYGROUPCTRL; // for backwards compatibility\nmodule(AZURE_SECURITYGROUP_CONFIGURE_CREATESECURITYGROUPCTRL, [\n UIROUTER_ANGULARJS,\n AZURE_SECURITYGROUP_SECURITYGROUP_WRITE_SERVICE,\n]).controller('azureCreateSecurityGroupCtrl', [\n '$scope',\n '$uibModalInstance',\n '$state',\n '$controller',\n 'application',\n 'securityGroup',\n 'azureSecurityGroupWriter',\n function ($scope, $uibModalInstance, $state, $controller, application, securityGroup, azureSecurityGroupWriter) {\n $scope.pages = {\n location: require('./createSecurityGroupProperties.html'),\n ingress: require('./createSecurityGroupIngress.html'),\n };\n\n $scope.regions = [];\n\n $scope.firewallLabel = FirewallLabels.get('Firewall');\n\n const ctrl = this;\n $scope.isNew = true;\n $scope.state = {\n submitting: false,\n infiniteScroll: {\n numToAdd: 20,\n currentItems: 20,\n },\n };\n\n AccountService.listAccounts('azure').then(function (accounts) {\n $scope.accounts = accounts;\n ctrl.accountUpdated();\n });\n\n ctrl.addMoreItems = function () {\n $scope.state.infiniteScroll.currentItems += $scope.state.infiniteScroll.numToAdd;\n };\n\n function onApplicationRefresh() {\n // If the user has already closed the modal, do not navigate to the new details view\n if ($scope.$$destroyed) {\n return;\n }\n $uibModalInstance.close();\n const newStateParams = {\n name: $scope.securityGroup.name,\n accountId: $scope.securityGroup.credentials || $scope.securityGroup.accountName,\n region: $scope.securityGroup.regions[0],\n provider: 'azure',\n };\n if (!$state.includes('**.firewallDetails')) {\n $state.go('.firewallDetails', newStateParams);\n } else {\n $state.go('^.firewallDetails', newStateParams);\n }\n }\n\n function onTaskComplete() {\n application.securityGroups.refresh();\n application.securityGroups.onNextRefresh($scope, onApplicationRefresh);\n }\n\n $scope.taskMonitor = new TaskMonitor({\n application: application,\n title: `Creating your ${FirewallLabels.get('firewall')}`,\n modalInstance: $uibModalInstance,\n onTaskComplete: onTaskComplete,\n });\n\n $scope.securityGroup = securityGroup;\n\n ctrl.accountUpdated = function () {\n AccountService.getRegionsForAccount($scope.securityGroup.credentials).then(function (regions) {\n $scope.regions = regions;\n $scope.securityGroup.regions = regions;\n ctrl.updateName();\n ctrl.regionUpdated();\n });\n };\n\n this.regionUpdated = function () {\n ctrl.vnetUpdated();\n };\n\n this.vnetUpdated = function () {\n const account = $scope.securityGroup.credentials;\n const region = $scope.securityGroup.region;\n $scope.securityGroup.selectedVnet = null;\n $scope.securityGroup.vnet = null;\n $scope.securityGroup.vnetResourceGroup = null;\n\n ctrl.selectedVnets = [];\n\n NetworkReader.listNetworks().then(function (vnets) {\n if (vnets.azure) {\n vnets.azure.forEach((vnet) => {\n if (vnet.account === account && vnet.region === region) {\n ctrl.selectedVnets.push(vnet);\n }\n });\n }\n });\n\n ctrl.subnetUpdated();\n };\n\n this.subnetUpdated = function () {\n $scope.securityGroup.selectedSubnet = null;\n $scope.securityGroup.subnet = null;\n ctrl.selectedSubnets = [];\n };\n\n this.selectedVnetChanged = function (item) {\n $scope.securityGroup.vnet = item.name;\n $scope.securityGroup.vnetResourceGroup = item.resourceGroup;\n $scope.securityGroup.selectedSubnet = null;\n $scope.securityGroup.subnet = null;\n ctrl.selectedSubnets = [];\n if (item.subnets) {\n item.subnets.map(function (subnet) {\n ctrl.selectedSubnets.push(subnet);\n });\n }\n };\n\n ctrl.cancel = function () {\n $uibModalInstance.dismiss();\n };\n\n ctrl.updateName = function () {\n const securityGroup = $scope.securityGroup;\n let name = application.name;\n if (securityGroup.detail) {\n name += '-' + securityGroup.detail;\n }\n securityGroup.name = name;\n $scope.namePreview = name;\n };\n\n ctrl.upsert = function () {\n $scope.taskMonitor.submit(function () {\n const params = {\n cloudProvider: 'azure',\n appName: application.name,\n region: $scope.securityGroup.region,\n vpcId: 'null',\n };\n\n if ($scope.securityGroup.selectedVnet) {\n $scope.securityGroup.vnet = $scope.securityGroup.selectedVnet.name;\n $scope.securityGroup.vnetResourceGroup = $scope.securityGroup.selectedVnet.resourceGroup;\n }\n\n if ($scope.securityGroup.selectedSubnet) {\n $scope.securityGroup.subnet = $scope.securityGroup.selectedSubnet.name;\n }\n\n $scope.securityGroup.type = 'upsertSecurityGroup';\n\n return azureSecurityGroupWriter.upsertSecurityGroup($scope.securityGroup, application, 'Create', params);\n });\n };\n\n ctrl.addRule = function (ruleset) {\n ruleset.push({\n name: $scope.securityGroup.name + '-Rule' + ruleset.length,\n priority: ruleset.length == 0 ? 100 : 100 * (ruleset.length + 1),\n protocolUI: 'tcp',\n protocol: 'tcp',\n access: 'Allow',\n direction: 'InBound',\n sourceAddressPrefix: '*',\n sourceAddressPrefixes: [],\n sourcePortRange: '*',\n destinationAddressPrefix: '*',\n destinationPortRange: '*',\n destinationPortRanges: [],\n destPortRanges: '*',\n sourceIPCIDRRanges: '*',\n });\n };\n\n ctrl.portUpdated = function (ruleset, index) {\n if (!_.isEmpty(ruleset[index].destPortRanges)) {\n const ruleRanges = ruleset[index].destPortRanges.split(',');\n\n if (ruleRanges.length > 1) {\n ruleset[index].destinationPortRanges = [];\n ruleRanges.forEach((v) => ruleset[index].destinationPortRanges.push(v));\n\n // If there are multiple port ranges then set null to the single port parameter otherwise ARM template will fail in validation.\n ruleset[index].destinationPortRange = null;\n } else {\n ruleset[index].destinationPortRange = ruleset[index].destPortRanges;\n\n // If there is a single port range then set null to the port array otherwise ARM template will fail in validation.\n ruleset[index].destinationPortRanges = [];\n }\n }\n };\n\n ctrl.sourceIPCIDRUpdated = function (ruleset, index) {\n if (!_.isEmpty(ruleset[index].destPortRanges)) {\n const ruleRanges = ruleset[index].sourceIPCIDRRanges.split(',');\n if (ruleRanges.length > 1) {\n ruleset[index].sourceAddressPrefixes = [];\n ruleRanges.forEach((v) => ruleset[index].sourceAddressPrefixes.push(v));\n\n // If there are multiple IP/CIDR ranges then set null to the single sourceAddressPrefix parameter otherwise ARM template will fail in validation\n ruleset[index].sourceAddressPrefix = null;\n } else {\n ruleset[index].sourceAddressPrefix = ruleset[index].sourceIPCIDRRanges;\n\n // If there is a single IP/CIDR then set null to the IP/CIDR array otherwise ARM template will fail in validation.\n ruleset[index].sourceAddressPrefixes = [];\n }\n }\n };\n\n ctrl.protocolUpdated = function (ruleset, index) {\n ruleset[index].protocol = ruleset[index].protocolUI;\n };\n\n ctrl.removeRule = function (ruleset, index) {\n ruleset.splice(index, 1);\n };\n\n ctrl.moveUp = function (ruleset, index) {\n if (index === 0) return;\n swapRules(ruleset, index, index - 1);\n };\n ctrl.moveDown = function (ruleset, index) {\n if (index === ruleset.length - 1) return;\n swapRules(ruleset, index, index + 1);\n };\n\n function swapRules(ruleset, a, b) {\n const temp = ruleset[b];\n const priorityA = ruleset[a].priority;\n const priorityB = ruleset[b].priority;\n //swap elements\n ruleset[b] = ruleset[a];\n ruleset[a] = temp;\n //swap priorities\n ruleset[a].priority = priorityA;\n ruleset[b].priority = priorityB;\n }\n\n $scope.securityGroup.securityRules = [];\n },\n]);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nimport {\n CACHE_INITIALIZER_SERVICE,\n FirewallLabels,\n InfrastructureCaches,\n SECURITY_GROUP_READER,\n TaskMonitor,\n} from '@spinnaker/core';\n\nimport { AZURE_SECURITYGROUP_SECURITYGROUP_WRITE_SERVICE } from '../securityGroup.write.service';\n\nexport const AZURE_SECURITYGROUP_CONFIGURE_EDITSECURITYGROUPCTRL =\n 'spinnaker.azure.securityGroup.azure.edit.controller';\nexport const name = AZURE_SECURITYGROUP_CONFIGURE_EDITSECURITYGROUPCTRL; // for backwards compatibility\nmodule(AZURE_SECURITYGROUP_CONFIGURE_EDITSECURITYGROUPCTRL, [\n UIROUTER_ANGULARJS,\n CACHE_INITIALIZER_SERVICE,\n SECURITY_GROUP_READER,\n AZURE_SECURITYGROUP_SECURITYGROUP_WRITE_SERVICE,\n]).controller('azureEditSecurityGroupCtrl', [\n '$scope',\n '$uibModalInstance',\n '$exceptionHandler',\n '$state',\n 'securityGroupReader',\n 'cacheInitializer',\n 'application',\n 'securityGroup',\n 'azureSecurityGroupWriter',\n function (\n $scope,\n $uibModalInstance,\n $exceptionHandler,\n $state,\n securityGroupReader,\n cacheInitializer,\n application,\n securityGroup,\n azureSecurityGroupWriter,\n ) {\n $scope.pages = {\n ingress: require('./createSecurityGroupIngress.html'),\n };\n\n securityGroup.securityRules = _.map(securityGroup.securityRules, function (rule) {\n if (!_.isEmpty(rule.protocol)) {\n rule.protocolUI = rule.protocol.toLowerCase();\n }\n\n rule.destPortRanges = rule.destinationPortRangeModel;\n rule.sourceIPCIDRRanges = rule.sourceAddressPrefixModel;\n\n return rule;\n });\n\n $scope.securityGroup = securityGroup;\n\n $scope.state = {\n refreshingSecurityGroups: false,\n };\n\n $scope.taskMonitor = new TaskMonitor({\n application: application,\n title: `Updating your ${FirewallLabels.get('firewall')}`,\n modalInstance: $uibModalInstance,\n onTaskComplete: onTaskComplete,\n });\n\n this.getSecurityGroupRefreshTime = function () {\n return InfrastructureCaches.get('securityGroups').getStats().ageMax;\n };\n\n this.refreshSecurityGroups = function () {\n $scope.state.refreshingSecurityGroups = true;\n return cacheInitializer.refreshCache('securityGroups').then(function () {\n initializeSecurityGroups().then(function () {\n $scope.state.refreshingSecurityGroups = false;\n });\n });\n };\n\n function initializeSecurityGroups() {\n return securityGroupReader.getAllSecurityGroups().then(function (securityGroups) {\n const account = securityGroup.accountName;\n const region = securityGroup.region;\n const availableGroups = _.filter(securityGroups[account].azure[region], {\n /*vpcId: vpcId*/\n });\n $scope.availableSecurityGroups = _.map(availableGroups, 'name');\n });\n }\n\n this.addRule = function (ruleset) {\n ruleset.push({\n name: $scope.securityGroup.name + '-Rule' + ruleset.length,\n priority: ruleset.length === 0 ? 100 : 100 * (ruleset.length + 1),\n protocolUI: 'tcp',\n access: 'Allow',\n direction: 'InBound',\n sourceAddressPrefix: '*',\n sourceAddressPrefixes: [],\n sourcePortRange: '*',\n destinationAddressPrefix: '*',\n destinationPortRange: '*',\n destinationPortRanges: [],\n destPortRanges: '*',\n sourceIPCIDRRanges: '*',\n });\n };\n\n function onApplicationRefresh() {\n // If the user has already closed the modal, do not navigate to the new details view\n if ($scope.$$destroyed) {\n return;\n }\n $uibModalInstance.close();\n const newStateParams = {\n name: $scope.securityGroup.name,\n accountId: $scope.securityGroup.credentials || $scope.securityGroup.accountName,\n region: $scope.securityGroup.region,\n provider: 'azure',\n };\n if (!$state.includes('**.firewallDetails')) {\n $state.go('.firewallDetails', newStateParams);\n } else {\n $state.go('^.firewallDetails', newStateParams);\n }\n }\n\n function onTaskComplete() {\n application.securityGroups.refresh();\n application.securityGroups.onNextRefresh($scope, onApplicationRefresh);\n }\n\n this.portUpdated = function (ruleset, index) {\n if (!_.isEmpty(ruleset[index].sourceIPCIDRRanges)) {\n const ruleRanges = ruleset[index].destPortRanges.split(',');\n if (ruleRanges.length > 1) {\n ruleset[index].destinationPortRanges = [];\n ruleRanges.forEach((v) => ruleset[index].destinationPortRanges.push(v));\n\n // If there are multiple port ranges then set null to the single port parameter otherwise ARM template will fail in validation.\n ruleset[index].destinationPortRange = null;\n } else {\n ruleset[index].destinationPortRange = ruleset[index].destPortRanges;\n\n // If there is a single port range then set null to the port array otherwise ARM template will fail in validation.\n ruleset[index].destinationPortRanges = [];\n }\n }\n };\n\n this.sourceIPCIDRUpdated = function (ruleset, index) {\n if (!_.isEmpty(ruleset[index].sourceIPCIDRRanges)) {\n const ruleRanges = ruleset[index].sourceIPCIDRRanges.split(',');\n if (ruleRanges.length > 1) {\n ruleset[index].sourceAddressPrefixes = [];\n ruleRanges.forEach((v) => ruleset[index].sourceAddressPrefixes.push(v));\n\n // If there are multiple IP/CIDR ranges then set null to the single sourceAddressPrefix parameter otherwise ARM template will fail in validation\n ruleset[index].sourceAddressPrefix = null;\n } else {\n ruleset[index].sourceAddressPrefix = ruleset[index].sourceIPCIDRRanges;\n\n // If there is a single IP/CIDR then set null to the IP/CIDR array otherwise ARM template will fail in validation.\n ruleset[index].sourceAddressPrefixes = [];\n }\n }\n };\n\n this.removeRule = function (ruleset, index) {\n ruleset.splice(index, 1);\n };\n\n this.moveUp = function (ruleset, index) {\n if (index === 0) return;\n swapRules(ruleset, index, index - 1);\n };\n this.moveDown = function (ruleset, index) {\n if (index === ruleset.length - 1) return;\n swapRules(ruleset, index, index + 1);\n };\n\n function swapRules(ruleset, a, b) {\n const temp = ruleset[b];\n const priorityA = ruleset[a].priority;\n const priorityB = ruleset[b].priority;\n //swap elements\n ruleset[b] = ruleset[a];\n ruleset[a] = temp;\n //swap priorities\n ruleset[a].priority = priorityA;\n ruleset[b].priority = priorityB;\n }\n\n $scope.taskMonitor.onTaskComplete = $uibModalInstance.dismiss;\n\n this.upsert = function () {\n $scope.taskMonitor.submit(function () {\n const params = {\n cloudProvider: 'azure',\n appName: application.name,\n region: $scope.securityGroup.region,\n subnet: null,\n vpcId: 'null',\n };\n $scope.securityGroup.type = 'upsertSecurityGroup';\n\n return azureSecurityGroupWriter.upsertSecurityGroup($scope.securityGroup, application, 'Update', params);\n });\n };\n\n this.cancel = function () {\n $uibModalInstance.dismiss();\n };\n },\n]);\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nimport { AccountService, FirewallLabels, TaskMonitor } from '@spinnaker/core';\n\nimport { AZURE_SECURITYGROUP_CONFIGURE_CREATESECURITYGROUPCTRL } from '../configure/CreateSecurityGroupCtrl';\nimport { AZURE_SECURITYGROUP_SECURITYGROUP_WRITE_SERVICE } from '../securityGroup.write.service';\n\nexport const AZURE_SECURITYGROUP_CLONE_CLONESECURITYGROUP_CONTROLLER = 'spinnaker.azure.securityGroup.clone.controller';\nexport const name = AZURE_SECURITYGROUP_CLONE_CLONESECURITYGROUP_CONTROLLER; // for backwards compatibility\nmodule(AZURE_SECURITYGROUP_CLONE_CLONESECURITYGROUP_CONTROLLER, [\n AZURE_SECURITYGROUP_SECURITYGROUP_WRITE_SERVICE,\n AZURE_SECURITYGROUP_CONFIGURE_CREATESECURITYGROUPCTRL,\n]).controller('azureCloneSecurityGroupController', [\n '$scope',\n '$uibModalInstance',\n '$controller',\n '$state',\n 'azureSecurityGroupWriter',\n 'securityGroup',\n 'application',\n function ($scope, $uibModalInstance, $controller, $state, azureSecurityGroupWriter, securityGroup, application) {\n const ctrl = this;\n\n $scope.firewallLabel = FirewallLabels.get('Firewall');\n\n $scope.pages = {\n location: require('../configure/createSecurityGroupProperties.html'),\n ingress: require('../configure/createSecurityGroupIngress.html'),\n };\n\n securityGroup.securityRules = _.map(securityGroup.securityRules, function (rule) {\n const temp = rule.destinationPortRange.split('-');\n rule.startPort = Number(temp[0]);\n rule.endPort = Number(temp[1]);\n return rule;\n });\n\n ctrl.accountUpdated = function () {\n AccountService.getRegionsForAccount($scope.securityGroup.credentials).then(function (regions) {\n $scope.regions = regions;\n $scope.securityGroup.regions = regions;\n ctrl.updateName();\n });\n };\n\n ctrl.cancel = function () {\n $uibModalInstance.dismiss();\n };\n\n ctrl.updateName = function () {\n const securityGroup = $scope.securityGroup;\n let name = application.name;\n if (securityGroup.detail) {\n name += '-' + securityGroup.detail;\n }\n securityGroup.name = name;\n $scope.namePreview = name;\n };\n\n $scope.securityGroup = securityGroup;\n\n $scope.state = {\n refreshingSecurityGroups: false,\n };\n\n $scope.taskMonitor = new TaskMonitor({\n application: application,\n title: `Updating your ${FirewallLabels.get('firewall')}`,\n modalInstance: $uibModalInstance,\n onTaskComplete: onTaskComplete,\n });\n\n AccountService.listAccounts('azure').then(function (accounts) {\n $scope.accounts = accounts;\n ctrl.accountUpdated();\n });\n\n ctrl.addRule = function (ruleset) {\n ruleset.push({\n name: $scope.securityGroup.name + '-Rule' + ruleset.length,\n priority: ruleset.length === 0 ? 100 : 100 * (ruleset.length + 1),\n protocol: 'tcp',\n access: 'Allow',\n direction: 'InBound',\n sourceAddressPrefix: '*',\n sourcePortRange: '*',\n destinationAddressPrefix: '*',\n destinationPortRange: '7001-7001',\n startPort: 7001,\n endPort: 7001,\n });\n };\n\n function onApplicationRefresh() {\n // If the user has already closed the modal, do not navigate to the new details view\n if ($scope.$$destroyed) {\n return;\n }\n $uibModalInstance.close();\n const newStateParams = {\n name: $scope.securityGroup.name,\n accountId: $scope.securityGroup.credentials || $scope.securityGroup.accountName,\n region: $scope.securityGroup.region,\n provider: 'azure',\n };\n if (!$state.includes('**.firewallDetails')) {\n $state.go('.firewallDetails', newStateParams);\n } else {\n $state.go('^.firewallDetails', newStateParams);\n }\n }\n\n function onTaskComplete() {\n application.securityGroups.refresh();\n application.securityGroups.onNextRefresh($scope, onApplicationRefresh);\n }\n\n ctrl.portUpdated = function (ruleset, index) {\n ruleset[index].destinationPortRange = ruleset[index].startPort + '-' + ruleset[index].endPort;\n };\n ctrl.removeRule = function (ruleset, index) {\n ruleset.splice(index, 1);\n };\n ctrl.moveUp = function (ruleset, index) {\n if (index === 0) return;\n swapRules(ruleset, index, index - 1);\n };\n ctrl.moveDown = function (ruleset, index) {\n if (index === ruleset.length - 1) return;\n swapRules(ruleset, index, index + 1);\n };\n function swapRules(ruleset, a, b) {\n const temp = ruleset[b];\n const priorityA = ruleset[a].priority;\n const priorityB = ruleset[b].priority;\n //swap elements\n ruleset[b] = ruleset[a];\n ruleset[a] = temp;\n //swap priorities\n ruleset[a].priority = priorityA;\n ruleset[b].priority = priorityB;\n }\n\n ctrl.upsert = function () {\n $scope.taskMonitor.submit(function () {\n const params = {\n cloudProvider: 'azure',\n appName: application.name,\n region: $scope.securityGroup.region,\n subnet: 'none',\n vpcId: 'null',\n };\n $scope.securityGroup.type = 'upsertSecurityGroup';\n\n return azureSecurityGroupWriter.upsertSecurityGroup($scope.securityGroup, application, 'Clone', params);\n });\n };\n },\n]);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport * as angular from 'angular';\nimport _ from 'lodash';\n\nimport { ConfirmationModalService, FirewallLabels, SECURITY_GROUP_READER } from '@spinnaker/core';\n\nimport { AZURE_SECURITYGROUP_CLONE_CLONESECURITYGROUP_CONTROLLER } from '../clone/cloneSecurityGroup.controller';\nimport { AZURE_SECURITYGROUP_SECURITYGROUP_WRITE_SERVICE } from '../securityGroup.write.service';\n\nexport const AZURE_SECURITYGROUP_DETAILS_SECURITYGROUPDETAIL_CONTROLLER =\n 'spinnaker.azure.securityGroup.azure.details.controller';\nexport const name = AZURE_SECURITYGROUP_DETAILS_SECURITYGROUPDETAIL_CONTROLLER; // for backwards compatibility\nangular\n .module(AZURE_SECURITYGROUP_DETAILS_SECURITYGROUPDETAIL_CONTROLLER, [\n UIROUTER_ANGULARJS,\n SECURITY_GROUP_READER,\n AZURE_SECURITYGROUP_SECURITYGROUP_WRITE_SERVICE,\n AZURE_SECURITYGROUP_CLONE_CLONESECURITYGROUP_CONTROLLER,\n ])\n .controller('azureSecurityGroupDetailsCtrl', [\n '$scope',\n '$state',\n 'resolvedSecurityGroup',\n 'app',\n 'azureSecurityGroupWriter',\n 'securityGroupReader',\n '$uibModal',\n function ($scope, $state, resolvedSecurityGroup, app, azureSecurityGroupWriter, securityGroupReader, $uibModal) {\n const application = app;\n const securityGroup = resolvedSecurityGroup;\n\n $scope.state = {\n loading: true,\n };\n\n $scope.firewallLabel = FirewallLabels.get('Firewall');\n\n function extractSecurityGroup() {\n return securityGroupReader\n .getSecurityGroupDetails(\n application,\n securityGroup.accountId,\n securityGroup.provider,\n securityGroup.region,\n securityGroup.vpcId,\n securityGroup.name,\n )\n .then(\n function (details) {\n $scope.state.loading = false;\n\n if (!details || _.isEmpty(details)) {\n fourOhFour();\n } else {\n $scope.securityGroup = details;\n }\n },\n function () {\n fourOhFour();\n },\n );\n }\n\n function fourOhFour() {\n $state.go('^');\n }\n\n extractSecurityGroup().then(() => {\n // If the user navigates away from the view before the initial extractSecurityGroup call completes,\n // do not bother subscribing to the refresh\n if (!$scope.$$destroyed) {\n app.securityGroups.onRefresh($scope, extractSecurityGroup);\n }\n });\n\n this.editInboundRules = function editInboundRules() {\n $uibModal.open({\n templateUrl: require('../configure/editSecurityGroup.html'),\n controller: 'azureEditSecurityGroupCtrl as ctrl',\n resolve: {\n securityGroup: function () {\n return angular.copy($scope.securityGroup);\n },\n application: function () {\n return application;\n },\n },\n });\n };\n\n this.cloneSecurityGroup = function cloneSecurityGroup() {\n $uibModal.open({\n templateUrl: require('../clone/cloneSecurityGroup.html'),\n controller: 'azureCloneSecurityGroupController as ctrl',\n resolve: {\n securityGroup: function () {\n const securityGroup = angular.copy($scope.securityGroup);\n if (securityGroup.region) {\n securityGroup.regions = [securityGroup.region];\n }\n return securityGroup;\n },\n application: function () {\n return application;\n },\n },\n });\n };\n\n this.deleteSecurityGroup = function deleteSecurityGroup() {\n const taskMonitor = {\n application: application,\n title: 'Deleting ' + securityGroup.name,\n };\n\n const submitMethod = function () {\n $scope.securityGroup.type = 'deleteSecurityGroup';\n return azureSecurityGroupWriter.deleteSecurityGroup(securityGroup, application, {\n cloudProvider: 'azure',\n vpcId: $scope.securityGroup.vpcId,\n });\n };\n\n ConfirmationModalService.confirm({\n header: 'Really delete ' + securityGroup.name + '?',\n buttonText: 'Delete ' + securityGroup.name,\n account: securityGroup.accountId,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n });\n };\n\n if (app.isStandalone) {\n // we still want the edit to refresh the firewall details when the modal closes\n app.securityGroups = {\n refresh: extractSecurityGroup,\n };\n }\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const AZURE_SECURITYGROUP_SECURITYGROUP_READER = 'spinnaker.azure.securityGroup.reader';\nexport const name = AZURE_SECURITYGROUP_SECURITYGROUP_READER; // for backwards compatibility\nmodule(AZURE_SECURITYGROUP_SECURITYGROUP_READER, []).factory('azureSecurityGroupReader', function () {\n function resolveIndexedSecurityGroup(indexedSecurityGroups, container, securityGroupId) {\n //hack to get around securityGroupId not matching id in indexedSecurityGroups.\n const temp = securityGroupId.split('/');\n return indexedSecurityGroups[container.account][container.region][temp[temp.length - 1]];\n }\n\n return {\n resolveIndexedSecurityGroup: resolveIndexedSecurityGroup,\n };\n});\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const AZURE_SECURITYGROUP_SECURITYGROUP_TRANSFORMER = 'spinnaker.azure.securityGroup.transformer';\nexport const name = AZURE_SECURITYGROUP_SECURITYGROUP_TRANSFORMER; // for backwards compatibility\nmodule(AZURE_SECURITYGROUP_SECURITYGROUP_TRANSFORMER, []).factory('azureSecurityGroupTransformer', function () {\n function normalizeSecurityGroup() {}\n\n return {\n normalizeSecurityGroup: normalizeSecurityGroup,\n };\n});\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_SERVERGROUPINSTANCEARCHETYPE_CONTROLLER =\n 'spinnaker.azure.serverGroup.configure.instanceArchetype.controller';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_SERVERGROUPINSTANCEARCHETYPE_CONTROLLER; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_SERVERGROUPINSTANCEARCHETYPE_CONTROLLER, []).controller(\n 'azureInstanceArchetypeCtrl',\n [\n '$scope',\n 'instanceTypeService',\n 'modalWizardService',\n function ($scope, instanceTypeService, modalWizardService) {\n const wizard = modalWizardService.getWizard();\n\n $scope.$watch('command.viewState.instanceProfile', function () {\n if (!$scope.command.viewState.instanceProfile || $scope.command.viewState.instanceProfile === 'custom') {\n wizard.excludePage('instance-type');\n } else {\n wizard.includePage('instance-type');\n wizard.markClean('instance-profile');\n wizard.markComplete('instance-profile');\n }\n });\n\n $scope.$watch('command.viewState.instanceType', function (newVal) {\n if (newVal) {\n wizard.markClean('instance-profile');\n wizard.markComplete('instance-profile');\n }\n });\n },\n ],\n);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_SERVERGROUPINSTANCETYPE_CONTROLLER =\n 'spinnaker.azure.serverGroup.configure.instanceType.controller';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_SERVERGROUPINSTANCETYPE_CONTROLLER; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_SERVERGROUPINSTANCETYPE_CONTROLLER, []).controller('azureInstanceTypeCtrl', [\n '$scope',\n 'modalWizardService',\n function ($scope, modalWizardService) {\n modalWizardService.getWizard().markComplete('instance-type');\n modalWizardService.getWizard().markClean('instance-type');\n },\n]);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_SERVERGROUPADVANCEDSETTINGS_CONTROLLER =\n 'spinnaker.azure.serverGroup.configure.advancedSetting.controller';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_SERVERGROUPADVANCEDSETTINGS_CONTROLLER; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_SERVERGROUPADVANCEDSETTINGS_CONTROLLER, []).controller(\n 'azureServerGroupAdvancedSettingsCtrl',\n [\n '$scope',\n 'modalWizardService',\n function ($scope, modalWizardService) {\n modalWizardService.getWizard().markComplete('advanced');\n\n $scope.$watch('form.$valid', function (newVal) {\n if (newVal) {\n modalWizardService.getWizard().markClean('advanced');\n } else {\n modalWizardService.getWizard().markDirty('advanced');\n }\n });\n },\n ],\n);\n","'use strict';\n\nimport * as angular from 'angular';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_ADVANCEDSETTINGSSELECTOR_DIRECTIVE =\n 'spinnaker.azure.serverGroup.configure.wizard.advancedSettings.selector.directive';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_ADVANCEDSETTINGSSELECTOR_DIRECTIVE; // for backwards compatibility\nangular\n .module(AZURE_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_ADVANCEDSETTINGSSELECTOR_DIRECTIVE, [])\n .directive('azureServerGroupAdvancedSettingsSelector', function () {\n return {\n restrict: 'E',\n templateUrl: require('./advancedSettingsSelector.directive.html'),\n scope: {},\n bindToController: {\n command: '=',\n },\n controllerAs: 'adv',\n controller: 'azureServerGroupAdvancedSettingsSelectorCtrl',\n };\n })\n .controller('azureServerGroupAdvancedSettingsSelectorCtrl', function () {\n this.addDataDisk = () => {\n const newDataDisks = angular.copy(this.command.dataDisks);\n this.command.dataDisks = newDataDisks.concat([\n {\n lun: 0,\n managedDisk: {\n storageAccountType: 'Standard_LRS',\n },\n diskSizeGB: 1,\n caching: 'None',\n createOption: 'Empty',\n },\n ]);\n };\n\n this.removeDataDisk = (index) => {\n const newDataDisks = angular.copy(this.command.dataDisks);\n newDataDisks.splice(index, 1);\n this.command.dataDisks = newDataDisks;\n };\n });\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_BASICSETTINGS_IMAGE_REGIONAL_FILTER =\n 'spinnaker.azure.serverGroup.configure.basicSettings.image.filter';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_BASICSETTINGS_IMAGE_REGIONAL_FILTER; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_BASICSETTINGS_IMAGE_REGIONAL_FILTER, []).filter('regional', function () {\n return function (input, selectedRegion) {\n return _.filter(input, function (image) {\n return image.region === selectedRegion || image.region === null;\n });\n };\n});\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport * as angular from 'angular';\nimport ANGULAR_UI_BOOTSTRAP from 'angular-ui-bootstrap';\n\nimport { IMAGE_READER, ModalWizard } from '@spinnaker/core';\n\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_BASICSETTINGS_IMAGE_REGIONAL_FILTER } from './image.regional.filter';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_BASICSETTINGS_SERVERGROUPBASICSETTINGS_CONTROLLER =\n 'spinnaker.azure.serverGroup.configure.basicSettings';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_BASICSETTINGS_SERVERGROUPBASICSETTINGS_CONTROLLER; // for backwards compatibility\nangular\n .module(AZURE_SERVERGROUP_CONFIGURE_WIZARD_BASICSETTINGS_SERVERGROUPBASICSETTINGS_CONTROLLER, [\n UIROUTER_ANGULARJS,\n ANGULAR_UI_BOOTSTRAP,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_BASICSETTINGS_IMAGE_REGIONAL_FILTER,\n IMAGE_READER,\n ])\n .controller('azureServerGroupBasicSettingsCtrl', [\n '$scope',\n '$controller',\n '$uibModalStack',\n '$state',\n 'imageReader',\n function ($scope, $controller, $uibModalStack, $state, imageReader) {\n $scope.$watch('form.$valid', function (newVal) {\n if (newVal) {\n ModalWizard.markClean('basic-settings');\n ModalWizard.markComplete('basic-settings');\n } else {\n ModalWizard.markIncomplete('basic-settings');\n }\n });\n\n this.imageChanged = (image) => {\n $scope.command.imageName = image.imageName;\n $scope.command.selectedImage = image;\n ModalWizard.markClean('basic-settings');\n };\n\n angular.extend(\n this,\n $controller('BasicSettingsMixin', {\n $scope: $scope,\n imageReader: imageReader,\n $uibModalStack: $uibModalStack,\n $state: $state,\n }),\n );\n\n this.stackPattern = {\n test: function (stack) {\n const pattern = $scope.command.viewState.templatingEnabled ? /^([a-zA-Z0-9]*(\\${.+})*)*$/ : /^[a-zA-Z0-9]*$/;\n\n return pattern.test(stack);\n },\n };\n\n this.detailPattern = {\n test: function (detail) {\n const pattern = $scope.command.viewState.templatingEnabled\n ? /^([a-zA-Z0-9-]*(\\${.+})*)*$/\n : /^[a-zA-Z0-9-]*$/;\n\n return pattern.test(detail);\n },\n };\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_CAPACITY_CAPACITYSELECTOR_DIRECTIVE =\n 'spinnaker.azure.serverGroup.configure.wizard.capacity.selector.directive';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_CAPACITY_CAPACITYSELECTOR_DIRECTIVE; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_CAPACITY_CAPACITYSELECTOR_DIRECTIVE, [])\n .directive('azureServerGroupCapacitySelector', function () {\n return {\n restrict: 'E',\n templateUrl: require('./capacitySelector.directive.html'),\n scope: {},\n bindToController: {\n command: '=',\n },\n controllerAs: 'cap',\n controller: 'azureServerGroupCapacitySelectorCtrl',\n };\n })\n .controller('azureServerGroupCapacitySelectorCtrl', function () {});\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_HEALTHSETTINGS_SERVERGROUPHEALTHSETTINGS_CONTROLLER =\n 'spinnaker.azure.serverGroup.configure.healthSetting.controller';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_HEALTHSETTINGS_SERVERGROUPHEALTHSETTINGS_CONTROLLER; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_HEALTHSETTINGS_SERVERGROUPHEALTHSETTINGS_CONTROLLER, []).controller(\n 'azureServerGroupHealthSettingsCtrl',\n [\n '$scope',\n function ($scope) {\n if (typeof $scope.command.healthSettings === 'undefined') {\n $scope.command.healthSettings = {};\n }\n\n this.healthCheckProtocols = [\n { displayName: 'N/A', name: null },\n { displayName: 'HTTP', name: 'http' },\n { displayName: 'TCP', name: 'tcp' },\n ];\n\n this.requiresHealthCheckPath = function () {\n return $scope.command.healthSettings.protocol === 'http';\n };\n\n this.changeHealthCheckProtocol = function (newProtocol) {\n if (newProtocol == null) {\n $scope.command.healthSettings.protocol = null;\n $scope.command.healthSettings.port = null;\n $scope.command.healthSettings.requestPath = null;\n } else if (!this.requiresHealthCheckPath()) {\n $scope.command.healthSettings.requestPath = null;\n }\n };\n },\n ],\n);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_HEALTHSETTINGS_HEALTHSETTINGSSELECTOR_DIRECTIVE =\n 'spinnaker.azure.serverGroup.configure.wizard.healthSettings.selector.directive';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_HEALTHSETTINGS_HEALTHSETTINGSSELECTOR_DIRECTIVE; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_HEALTHSETTINGS_HEALTHSETTINGSSELECTOR_DIRECTIVE, []).directive(\n 'azureServerGroupHealthSettingsSelector',\n [\n 'azureServerGroupConfigurationService',\n function () {\n return {\n restrict: 'E',\n templateUrl: require('./healthSettingsSelector.directive.html'),\n scope: {\n command: '=',\n },\n };\n },\n ],\n);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { ModalWizard } from '@spinnaker/core';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_IMAGESETTINGS_SERVERGROUPIMAGESETTINGS_CONTROLLER =\n 'spinnaker.azure.serverGroup.configure.imageSettings.controller';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_IMAGESETTINGS_SERVERGROUPIMAGESETTINGS_CONTROLLER; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_IMAGESETTINGS_SERVERGROUPIMAGESETTINGS_CONTROLLER, []).controller(\n 'azureServerGroupImageSettingsCtrl',\n [\n '$scope',\n function ($scope) {\n this.clearImage = function () {\n if ($scope.command.image.isCustom == false) {\n $scope.command.image = { isCustom: false };\n } else {\n $scope.command.image.region = $scope.command.region;\n }\n };\n\n ModalWizard.markComplete('image-settings');\n\n $scope.$watch('form.$valid', function (newVal) {\n if (newVal) {\n ModalWizard.markClean('image-settings');\n } else {\n ModalWizard.markDirty('image-settings');\n }\n });\n },\n ],\n);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_IMAGESETTINGS_IMAGESETTINGS_DIRECTIVE =\n 'spinnaker.azure.serverGroup.configure.wizard.imageSettingsSelector.directive';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_IMAGESETTINGS_IMAGESETTINGS_DIRECTIVE; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_IMAGESETTINGS_IMAGESETTINGS_DIRECTIVE, []).directive(\n 'azureServerGroupImageSettingsSelector',\n [\n 'azureServerGroupConfigurationService',\n function () {\n return {\n restrict: 'E',\n templateUrl: require('./imageSettingsSelector.directive.html'),\n scope: {\n command: '=',\n },\n };\n },\n ],\n);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { InfrastructureCaches, LOAD_BALANCER_READ_SERVICE, ModalWizard, NetworkReader } from '@spinnaker/core';\n\nimport Utility from '../../../../utility';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_SERVERGROUPLOADBALANCERS_CONTROLLER =\n 'spinnaker.azure.serverGroup.configure.loadBalancer.controller';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_SERVERGROUPLOADBALANCERS_CONTROLLER; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_SERVERGROUPLOADBALANCERS_CONTROLLER, [\n LOAD_BALANCER_READ_SERVICE,\n]).controller('azureServerGroupLoadBalancersCtrl', [\n '$scope',\n 'loadBalancerReader',\n function ($scope, loadBalancerReader) {\n ModalWizard.markClean('load-balancers');\n\n function loadVnetSubnets(item, type) {\n loadBalancerReader\n .getLoadBalancerDetails('azure', $scope.command.credentials, $scope.command.region, item)\n .then(function (LBs) {\n if (!LBs || LBs.length === 0) {\n // load the subnet and vnets without a load balancer\n const attachedVnet = $scope.command.selectedVnet;\n const attachedSubnet = $scope.command.selectedSubnet;\n $scope.command.selectedVnetSubnets = [];\n $scope.command.allVnets = [];\n NetworkReader.listNetworks().then(function (vnets) {\n if (vnets.azure) {\n vnets.azure.forEach((selectedVnet) => {\n if (\n selectedVnet.account === $scope.command.credentials &&\n selectedVnet.region === $scope.command.region\n ) {\n $scope.command.allVnets.push(selectedVnet);\n\n selectedVnet.subnets.map(function (subnet) {\n let addSubnet = true;\n if (subnet.devices) {\n subnet.devices.map(function (device) {\n // only add subnets that are not assigned to an ApplicationGateway\n if (device && device.type === 'applicationGateways') {\n addSubnet = false;\n }\n });\n }\n if (addSubnet) {\n $scope.command.selectedVnetSubnets.push(subnet.name);\n if (subnet.name === attachedSubnet) {\n $scope.command.selectedSubnet = attachedSubnet;\n }\n }\n });\n }\n });\n }\n });\n } else if (LBs && LBs.length === 1) {\n const selectedLoadBalancer = LBs[0];\n const attachedVnet = $scope.command.selectedVnet;\n $scope.command.selectedVnet = null;\n $scope.command.selectedVnetSubnets = [];\n $scope.command.allVnets = [];\n NetworkReader.listNetworks().then(function (vnets) {\n if (vnets.azure) {\n vnets.azure.forEach((selectedVnet) => {\n if (\n selectedVnet.account === $scope.command.credentials &&\n selectedVnet.region === $scope.command.region\n ) {\n $scope.command.allVnets.push(selectedVnet);\n }\n if (\n selectedVnet.account === $scope.command.credentials &&\n selectedVnet.region === $scope.command.region &&\n ((type === 'Azure Application Gateway' && selectedVnet.name == selectedLoadBalancer.vnet) ||\n (type === 'Azure Load Balancer' && selectedVnet.name === attachedVnet.name))\n ) {\n $scope.command.selectedVnet = selectedVnet;\n selectedVnet.subnets.map(function (subnet) {\n let addSubnet = true;\n if (subnet.devices) {\n subnet.devices.map(function (device) {\n // only add subnets that are not assigned to an ApplicationGateway\n if (device && device.type === 'applicationGateways') {\n addSubnet = false;\n }\n });\n }\n if (addSubnet) {\n $scope.command.selectedVnetSubnets.push(subnet.name);\n }\n });\n }\n });\n }\n });\n }\n });\n }\n\n if ($scope.command.credentials && $scope.command.region) {\n $scope.command.viewState.networkSettingsConfigured = true;\n $scope.command.selectedVnetSubnets = [];\n if ($scope.command.loadBalancerName !== null && typeof $scope.command.loadBalancerName !== 'undefined') {\n $scope.useLoadBalancer = true;\n }\n loadVnetSubnets($scope.command.loadBalancerName, $scope.command.loadBalancerType);\n }\n\n this.loadBalancerChanged = function (item) {\n $scope.command.viewState.networkSettingsConfigured = true;\n ModalWizard.markComplete('load-balancers');\n\n const loadBalancers = $scope.command.backingData.loadBalancers;\n let loadBalancerType = null;\n\n if (loadBalancers) {\n const loadBalancerToFind = loadBalancers.find((lb) => lb.name === item);\n if (loadBalancerToFind) {\n loadBalancerType = Utility.getLoadBalancerType(loadBalancerToFind.loadBalancerType).type;\n }\n }\n\n if (item === null) {\n $scope.command.loadBalancerName = null;\n }\n\n $scope.command.selectedVnetSubnets = [];\n $scope.command.loadBalancerType = loadBalancerType;\n InfrastructureCaches.clearCache('networks');\n loadVnetSubnets(item, loadBalancerType);\n };\n },\n]);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_SERVERGROUPLOADBALANCERSSELECTOR_DIRECTIVE =\n 'spinnaker.azure.serverGroup.configure.loadBalancer.directive';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_SERVERGROUPLOADBALANCERSSELECTOR_DIRECTIVE; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_SERVERGROUPLOADBALANCERSSELECTOR_DIRECTIVE, []).directive(\n 'azureServerGroupLoadBalancersSelector',\n [\n 'azureServerGroupConfigurationService',\n function () {\n return {\n restrict: 'E',\n scope: {\n command: '=',\n },\n templateUrl: require('./serverGroupLoadBalancersSelector.directive.html'),\n };\n },\n ],\n);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { ModalWizard } from '@spinnaker/core';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_NETWORKSETTINGS_SERVERGROUPNETWORKSETTINGS_CONTROLLER =\n 'spinnaker.azure.serverGroup.configure.networkSettings.controller';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_NETWORKSETTINGS_SERVERGROUPNETWORKSETTINGS_CONTROLLER; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_NETWORKSETTINGS_SERVERGROUPNETWORKSETTINGS_CONTROLLER, []).controller(\n 'azureServerGroupNetworkSettingsCtrl',\n [\n '$scope',\n function ($scope) {\n ModalWizard.markClean('network-settings');\n\n $scope.command.selectedVnet = {\n name: $scope.command.vnet,\n };\n\n $scope.command.selectedSubnet = $scope.command.subnet;\n\n this.vnetChanged = function (item) {\n $scope.command.vnet = item;\n $scope.command.subnet = $scope.command.selectedSubnet = null;\n $scope.command.selectedVnetSubnets = item.subnets.map((s) => s.name);\n };\n\n this.networkSettingsChanged = function (item) {\n $scope.command.vnet = $scope.command.selectedVnet.name;\n $scope.command.subnet = item;\n ModalWizard.markComplete('network-settings');\n };\n\n this.getVnetName = function () {\n if ($scope.command.selectedVnet) {\n return $scope.command.selectedVnet.name;\n } else {\n return 'Virtual network was not selected';\n }\n };\n },\n ],\n);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_NETWORKSETTINGS_SERVERGROUPNETWORKSETTINGSSELECTOR_DIRECTIVE =\n 'spinnaker.azure.serverGroup.configure.networkSettings.directive';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_NETWORKSETTINGS_SERVERGROUPNETWORKSETTINGSSELECTOR_DIRECTIVE; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_NETWORKSETTINGS_SERVERGROUPNETWORKSETTINGSSELECTOR_DIRECTIVE, []).directive(\n 'azureServerGroupNetworkSettingsSelector',\n function () {\n return {\n restrict: 'E',\n scope: {\n command: '=',\n },\n templateUrl: require('./ServerGroupNetworkSettingsSelector.directive.html'),\n };\n },\n);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { ModalWizard } from '@spinnaker/core';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUP_SERVERGROUPSECURITYGROUPS_CONTROLLER =\n 'spinnaker.azure.serverGroup.configure.securityGroups.controller';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUP_SERVERGROUPSECURITYGROUPS_CONTROLLER; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUP_SERVERGROUPSECURITYGROUPS_CONTROLLER, []).controller(\n 'azureServerGroupSecurityGroupsCtrl',\n [\n '$scope',\n function ($scope) {\n ModalWizard.markClean('security-groups');\n ModalWizard.markComplete('security-groups');\n\n $scope.command.selectedSecurityGroup = {\n id: $scope.command.securityGroupName,\n };\n\n this.securityGroupChanged = function (securityGroup) {\n $scope.command.securityGroupName = securityGroup.id;\n ModalWizard.markComplete('security-groups');\n };\n },\n ],\n);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { FirewallLabels, InfrastructureCaches } from '@spinnaker/core';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUP_SERVERGROUPSECURITYGROUPSSELECTOR_DIRECTIVE =\n 'spinnaker.azure.serverGroup.configure.securityGroupSelector.directive';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUP_SERVERGROUPSECURITYGROUPSSELECTOR_DIRECTIVE; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUP_SERVERGROUPSECURITYGROUPSSELECTOR_DIRECTIVE, []).directive(\n 'azureServerGroupSecurityGroupsSelector',\n [\n 'azureServerGroupConfigurationService',\n function (azureServerGroupConfigurationService) {\n return {\n restrict: 'E',\n scope: {\n command: '=',\n },\n templateUrl: require('./serverGroupSecurityGroupsSelector.directive.html'),\n link: function (scope) {\n scope.firewallLabel = FirewallLabels.get('firewall');\n\n scope.getSecurityGroupRefreshTime = function () {\n return InfrastructureCaches.get('securityGroups').getStats().ageMax;\n };\n\n scope.refreshSecurityGroups = function () {\n scope.refreshing = true;\n azureServerGroupConfigurationService.refreshSecurityGroups(scope.command).then(function () {\n scope.refreshing = false;\n });\n };\n },\n };\n },\n ],\n);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport Utility from '../../../../utility';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_TAGS_TAGSSELECTOR_DIRECTIVE =\n 'spinnaker.azure.serverGroup.configure.wizard.tags.directive';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_TAGS_TAGSSELECTOR_DIRECTIVE; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_TAGS_TAGSSELECTOR_DIRECTIVE, [])\n .directive('azureTagsSelector', function () {\n return {\n restrict: 'E',\n templateUrl: require('./tagsSelector.directive.html'),\n scope: {},\n bindToController: {\n command: '=',\n },\n controllerAs: 'tagsSelectorCtrl',\n controller: 'TagsSelectorCtrl',\n };\n })\n .controller('TagsSelectorCtrl', [\n '$scope',\n function () {\n this.getTagResult = function () {\n return Utility.checkTags(this.command.instanceTags);\n };\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_ZONES_ZONESELECTOR_DIRECTIVE =\n 'spinnaker.azure.serverGroup.configure.wizard.capacity.zone.directive';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_ZONES_ZONESELECTOR_DIRECTIVE; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_ZONES_ZONESELECTOR_DIRECTIVE, []).directive('azureZoneSelector', function () {\n return {\n restrict: 'E',\n templateUrl: require('./zoneSelector.directive.html'),\n scope: {},\n bindToController: {\n command: '=',\n },\n controllerAs: 'vm',\n controller: [\n '$scope',\n function ($scope) {\n this.updateEnableInboundNAT = () => {\n if ($scope.vm.command.zonesEnabled) {\n $scope.vm.command.enableInboundNAT = false;\n }\n };\n },\n ],\n };\n});\n","import { module } from 'angular';\n\nimport { AZURE_SERVERGROUP_SERVERGROUP_TRANSFORMER } from '../serverGroup.transformer';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_SERVERGROUPINSTANCEARCHETYPE_CONTROLLER } from './wizard/ServerGroupInstanceArchetype.controller';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_SERVERGROUPINSTANCETYPE_CONTROLLER } from './wizard/ServerGroupInstanceType.controller';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_SERVERGROUPADVANCEDSETTINGS_CONTROLLER } from './wizard/advancedSettings/ServerGroupAdvancedSettings.controller';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_ADVANCEDSETTINGSSELECTOR_DIRECTIVE } from './wizard/advancedSettings/advancedSettingsSelector.directive';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_BASICSETTINGS_SERVERGROUPBASICSETTINGS_CONTROLLER } from './wizard/basicSettings/ServerGroupBasicSettings.controller';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_CAPACITY_CAPACITYSELECTOR_DIRECTIVE } from './wizard/capacity/capacitySelector.directive';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_HEALTHSETTINGS_SERVERGROUPHEALTHSETTINGS_CONTROLLER } from './wizard/healthSettings/ServerGroupHealthSettings.controller';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_HEALTHSETTINGS_HEALTHSETTINGSSELECTOR_DIRECTIVE } from './wizard/healthSettings/healthSettingsSelector.directive';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_IMAGESETTINGS_SERVERGROUPIMAGESETTINGS_CONTROLLER } from './wizard/image/ServerGroupImageSettings.controller';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_IMAGESETTINGS_IMAGESETTINGS_DIRECTIVE } from './wizard/image/imageSettingsSelector.directive';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_SERVERGROUPLOADBALANCERS_CONTROLLER } from './wizard/loadBalancers/ServerGroupLoadBalancers.controller';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_SERVERGROUPLOADBALANCERSSELECTOR_DIRECTIVE } from './wizard/loadBalancers/serverGroupLoadBalancersSelector.directive';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_NETWORKSETTINGS_SERVERGROUPNETWORKSETTINGS_CONTROLLER } from './wizard/networkSettings/ServerGroupNetworkSettings.controller';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_NETWORKSETTINGS_SERVERGROUPNETWORKSETTINGSSELECTOR_DIRECTIVE } from './wizard/networkSettings/ServerGroupNetworkSettingsSelector.directive';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUP_SERVERGROUPSECURITYGROUPS_CONTROLLER } from './wizard/securityGroup/ServerGroupSecurityGroups.controller';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUP_SERVERGROUPSECURITYGROUPSSELECTOR_DIRECTIVE } from './wizard/securityGroup/serverGroupSecurityGroupsSelector.directive';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_TAGS_TAGSSELECTOR_DIRECTIVE } from './wizard/tags/tagsSelector.directive';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_ZONES_ZONESELECTOR_DIRECTIVE } from './wizard/zones/zoneSelector.directive';\n\n('use strict');\n\nexport const AZURE_SERVERGROUP_CONFIGURE_SERVERGROUP_CONFIGURE_AZURE_MODULE = 'spinnaker.azure.serverGroup.configure';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_SERVERGROUP_CONFIGURE_AZURE_MODULE; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_SERVERGROUP_CONFIGURE_AZURE_MODULE, [\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_BASICSETTINGS_SERVERGROUPBASICSETTINGS_CONTROLLER,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_SERVERGROUPLOADBALANCERS_CONTROLLER,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_SERVERGROUPINSTANCEARCHETYPE_CONTROLLER,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_SERVERGROUPINSTANCETYPE_CONTROLLER,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUP_SERVERGROUPSECURITYGROUPS_CONTROLLER,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_SERVERGROUPADVANCEDSETTINGS_CONTROLLER,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_HEALTHSETTINGS_HEALTHSETTINGSSELECTOR_DIRECTIVE,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_IMAGESETTINGS_IMAGESETTINGS_DIRECTIVE,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_IMAGESETTINGS_SERVERGROUPIMAGESETTINGS_CONTROLLER,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_HEALTHSETTINGS_SERVERGROUPHEALTHSETTINGS_CONTROLLER,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_SERVERGROUPLOADBALANCERSSELECTOR_DIRECTIVE,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_CAPACITY_CAPACITYSELECTOR_DIRECTIVE,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUP_SERVERGROUPSECURITYGROUPSSELECTOR_DIRECTIVE,\n AZURE_SERVERGROUP_SERVERGROUP_TRANSFORMER,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_ADVANCEDSETTINGSSELECTOR_DIRECTIVE,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_NETWORKSETTINGS_SERVERGROUPNETWORKSETTINGS_CONTROLLER,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_NETWORKSETTINGS_SERVERGROUPNETWORKSETTINGSSELECTOR_DIRECTIVE,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_ZONES_ZONESELECTOR_DIRECTIVE,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_TAGS_TAGSSELECTOR_DIRECTIVE,\n]);\n","'use strict';\n\nimport * as angular from 'angular';\nimport _ from 'lodash';\n\nimport {\n AccountService,\n CACHE_INITIALIZER_SERVICE,\n LOAD_BALANCER_READ_SERVICE,\n SECURITY_GROUP_READER,\n} from '@spinnaker/core';\nimport { AZURE_IMAGE_IMAGE_READER } from '../../image/image.reader';\nimport { AZURE_INSTANCE_AZUREINSTANCETYPE_SERVICE } from '../../instance/azureInstanceType.service';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_SERVERGROUPCONFIGURATION_SERVICE =\n 'spinnaker.azure.serverGroup.configure.service';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_SERVERGROUPCONFIGURATION_SERVICE; // for backwards compatibility\nangular\n .module(AZURE_SERVERGROUP_CONFIGURE_SERVERGROUPCONFIGURATION_SERVICE, [\n AZURE_IMAGE_IMAGE_READER,\n LOAD_BALANCER_READ_SERVICE,\n SECURITY_GROUP_READER,\n CACHE_INITIALIZER_SERVICE,\n AZURE_INSTANCE_AZUREINSTANCETYPE_SERVICE,\n ])\n .factory('azureServerGroupConfigurationService', [\n '$q',\n 'azureImageReader',\n 'securityGroupReader',\n 'cacheInitializer',\n 'loadBalancerReader',\n 'azureInstanceTypeService',\n function (\n $q,\n azureImageReader,\n securityGroupReader,\n cacheInitializer,\n loadBalancerReader,\n azureInstanceTypeService,\n ) {\n const dataDiskTypes = ['Standard_LRS', 'StandardSSD_LRS', 'Premium_LRS'];\n const dataDiskCachingTypes = ['None', 'ReadOnly', 'ReadWrite'];\n\n const healthCheckTypes = ['EC2', 'ELB'];\n const terminationPolicies = [\n 'OldestInstance',\n 'NewestInstance',\n 'OldestLaunchConfiguration',\n 'ClosestToNextInstanceHour',\n 'Default',\n ];\n\n function configureUpdateCommand(command) {\n command.backingData = {\n healthCheckTypes: angular.copy(healthCheckTypes),\n terminationPolicies: angular.copy(terminationPolicies),\n };\n }\n\n function configureCommand(application, command) {\n return $q\n .all([\n AccountService.getCredentialsKeyedByAccount('azure'),\n securityGroupReader.loadSecurityGroups(),\n loadBalancerReader.loadLoadBalancers(application.name),\n ])\n .then(function ([credentialsKeyedByAccount, securityGroups, loadBalancers]) {\n command.backingData = {\n credentialsKeyedByAccount,\n securityGroups,\n loadBalancers,\n dataDiskTypes: angular.copy(dataDiskTypes),\n dataDiskCachingTypes: angular.copy(dataDiskCachingTypes),\n accounts: _.keys(credentialsKeyedByAccount),\n filtered: {},\n };\n attachEventHandlers(command);\n });\n }\n\n function configureInstanceTypes(command) {\n const result = {\n dirty: {},\n };\n if (command.region) {\n const results = [result.dirty];\n\n // results.push(configureCustomInstanceTypes(command).dirty);\n results.push(configureStandardInstanceTypes(command).dirty);\n\n angular.extend(...results);\n } else {\n command.backingData.filtered.instanceTypes = [];\n }\n return result;\n }\n\n function configureStandardInstanceTypes(command) {\n const c = command;\n const result = {\n dirty: {},\n };\n\n const locations = [c.region];\n const { credentialsKeyedByAccount } = c.backingData;\n const { locationToInstanceTypesMap } = credentialsKeyedByAccount[c.credentials];\n\n if (locations.every((l) => !l)) {\n return result;\n }\n\n const filtered = azureInstanceTypeService\n .getAvailableTypesForRegions(locationToInstanceTypesMap, locations)\n .map((type) => type.name);\n\n const instanceType = c.instanceType;\n if (_.every([instanceType, !_.startsWith(instanceType, 'custom'), !_.includes(filtered, instanceType)])) {\n result.dirty.instanceType = c.instanceType;\n c.instanceType = null;\n }\n c.backingData.filtered.instanceTypes = filtered;\n return result;\n }\n\n function configureImages(command) {\n const result = {\n dirty: {},\n };\n let regionalImages = null;\n if (command.viewState.disableImageSelection) {\n return result;\n }\n if (command.region) {\n regionalImages = command.backingData.packageImages\n .filter(function (image) {\n return image.amis && image.amis[command.region];\n })\n .map(function (image) {\n return {\n imageName: image.imageName,\n ami: image.amis ? image.amis[command.region][0] : null,\n };\n });\n if (\n command.amiName &&\n !regionalImages.some(function (image) {\n return image.imageName === command.amiName;\n })\n ) {\n result.dirty.amiName = true;\n command.amiName = null;\n }\n } else {\n command.amiName = null;\n }\n command.backingData.filtered.images = regionalImages;\n return result;\n }\n\n function configureZones(command) {\n const result = { dirty: {} };\n const filteredData = command.backingData.filtered;\n if (!command.region) {\n return result;\n }\n let { regionsSupportZones, availabilityZones } = command.backingData.credentialsKeyedByAccount[\n command.credentials\n ];\n regionsSupportZones = regionsSupportZones || [];\n availabilityZones = availabilityZones || [];\n filteredData.zones = regionsSupportZones.includes(command.region) ? availabilityZones : [];\n\n return result;\n }\n\n function getRegionalSecurityGroups(command) {\n const newSecurityGroups = command.backingData.securityGroups[command.credentials] || {\n azure: {},\n };\n return _.chain(newSecurityGroups[command.region]).sortBy('name').value();\n }\n\n function configureSecurityGroupOptions(command) {\n const result = {\n dirty: {},\n };\n let currentOptions;\n if (command.backingData.filtered.securityGroups) {\n currentOptions = command.backingData.filtered.securityGroups;\n }\n const newRegionalSecurityGroups = getRegionalSecurityGroups(command);\n if (command.selectedSecurityGroup) {\n // one has not been previously selected. We are either configuring for the\n //first time or they changed regions or account\n command.selectedSecurityGroup = null;\n result.dirty.securityGroups = true;\n }\n if (currentOptions != newRegionalSecurityGroups) {\n command.backingData.filtered.securityGroups = newRegionalSecurityGroups;\n result.dirty.securityGroups = true;\n }\n\n if (command.backingData.filtered.securityGroups === []) {\n command.viewState.securityGroupsConfigured = false;\n } else {\n command.viewState.securityGroupsConfigured = true;\n }\n\n return result;\n }\n\n function refreshSecurityGroups(command, skipCommandReconfiguration) {\n return cacheInitializer.refreshCache('securityGroups').then(function () {\n return securityGroupReader.getAllSecurityGroups().then(function (securityGroups) {\n command.backingData.securityGroups = securityGroups;\n if (!skipCommandReconfiguration) {\n configureSecurityGroupOptions(command);\n }\n });\n });\n }\n\n function getLoadBalancerNames(loadBalancers) {\n return _.chain(loadBalancers).map('name').uniq().value().sort();\n }\n\n function configureLoadBalancerOptions(command) {\n const result = {\n dirty: {},\n };\n const current = command.loadBalancers;\n const newLoadBalancers = getLoadBalancerNames(command.backingData.loadBalancers);\n\n if (current && command.loadBalancers) {\n const matched = _.intersection(newLoadBalancers, command.loadBalancers);\n const removed = _.xor(matched, current);\n command.loadBalancers = matched;\n if (removed.length) {\n result.dirty.loadBalancers = removed;\n }\n }\n command.backingData.filtered.loadBalancers = newLoadBalancers;\n return result;\n }\n\n function refreshLoadBalancers(command, skipCommandReconfiguration) {\n return loadBalancerReader.listLoadBalancers('azure').then(function (loadBalancers) {\n command.backingData.loadBalancers = loadBalancers;\n if (!skipCommandReconfiguration) {\n configureLoadBalancerOptions(command);\n }\n });\n }\n\n function configureLoadBalancers(command) {\n const result = {\n dirty: {},\n };\n const temp = command.backingData.loadBalancers;\n const filterlist = _.filter(temp, function (lb) {\n return lb.account === command.credentials && lb.region === command.region;\n });\n\n command.loadBalancers = getLoadBalancerNames(filterlist);\n command.viewState.loadBalancersConfigured = true;\n\n return result;\n }\n\n function attachEventHandlers(cmd) {\n cmd.regionChanged = function regionChanged(command, isInit = false) {\n const result = {\n dirty: {},\n };\n if (command.region && command.credentials) {\n angular.extend(result.dirty, configureLoadBalancers(command).dirty);\n angular.extend(result.dirty, configureSecurityGroupOptions(command).dirty);\n angular.extend(result.dirty, configureInstanceTypes(command).dirty);\n angular.extend(result.dirty, configureZones(command).dirty);\n }\n // reset previous set values\n if (!isInit) {\n command.loadBalancerName = null;\n command.loadBalancerType = null;\n command.vnet = null;\n command.vnetResourceGroup = null;\n command.subnet = null;\n command.selectedSubnet = null;\n command.selectedVnet = null;\n command.selectedVnetSubnets = [];\n command.viewState.networkSettingsConfigured = false;\n command.selectedSecurityGroup = null;\n command.securityGroupName = null;\n command.zonesEnabled = false;\n command.zones = [];\n }\n\n return result;\n };\n\n cmd.credentialsChanged = function credentialsChanged(command, isInit) {\n const result = {\n dirty: {},\n };\n const backingData = command.backingData;\n if (command.credentials) {\n const regionsForAccount = backingData.credentialsKeyedByAccount[command.credentials] || {\n regions: [],\n defaultKeyPair: null,\n };\n backingData.filtered.regions = regionsForAccount.regions;\n if (\n !_.chain(backingData.filtered.regions)\n .some({\n name: command.region,\n })\n .value()\n ) {\n command.region = null;\n result.dirty.region = true;\n } else {\n angular.extend(result.dirty, command.regionChanged(command, isInit).dirty);\n }\n if (command.region) {\n angular.extend(result.dirty, configureLoadBalancers(command).dirty);\n }\n angular.extend(result.dirty, configureInstanceTypes(command).dirty);\n } else {\n command.region = null;\n }\n return result;\n };\n }\n\n function refreshInstanceTypes(command) {\n return cacheInitializer.refreshCache('instanceTypes').then(function () {\n return azureInstanceTypeService.getAllTypesByRegion().then(function (instanceTypes) {\n command.backingData.instanceTypes = instanceTypes;\n configureInstanceTypes(command);\n });\n });\n }\n\n return {\n configureUpdateCommand: configureUpdateCommand,\n configureCommand: configureCommand,\n configureImages: configureImages,\n configureSecurityGroupOptions: configureSecurityGroupOptions,\n configureLoadBalancerOptions: configureLoadBalancerOptions,\n refreshLoadBalancers: refreshLoadBalancers,\n refreshSecurityGroups: refreshSecurityGroups,\n getRegionalSecurityGroups: getRegionalSecurityGroups,\n refreshInstanceTypes: refreshInstanceTypes,\n configureZones: configureZones,\n };\n },\n ]);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport { module } from 'angular';\n\nimport { FirewallLabels, ModalWizard, SERVER_GROUP_WRITER, TaskMonitor } from '@spinnaker/core';\n\nimport { AZURE_SERVERGROUP_SERVERGROUP_TRANSFORMER } from '../../serverGroup.transformer';\nimport { AZURE_SERVERGROUP_CONFIGURE_SERVERGROUPCONFIGURATION_SERVICE } from '../serverGroupConfiguration.service';\nimport Utility from '../../../utility';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_CLONESERVERGROUP_AZURE_CONTROLLER =\n 'spinnaker.azure.cloneServerGroup.controller';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_CLONESERVERGROUP_AZURE_CONTROLLER; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_CLONESERVERGROUP_AZURE_CONTROLLER, [\n UIROUTER_ANGULARJS,\n AZURE_SERVERGROUP_CONFIGURE_SERVERGROUPCONFIGURATION_SERVICE,\n AZURE_SERVERGROUP_SERVERGROUP_TRANSFORMER,\n SERVER_GROUP_WRITER,\n]).controller('azureCloneServerGroupCtrl', [\n '$scope',\n '$uibModalInstance',\n '$q',\n '$state',\n 'serverGroupWriter',\n 'azureServerGroupConfigurationService',\n 'serverGroupCommand',\n 'application',\n 'title',\n function (\n $scope,\n $uibModalInstance,\n $q,\n $state,\n serverGroupWriter,\n azureServerGroupConfigurationService,\n serverGroupCommand,\n application,\n title,\n ) {\n $scope.pages = {\n templateSelection: require('./templateSelection.html'),\n basicSettings: require('./basicSettings/basicSettings.html'),\n imageSettings: require('./image/imageSettings.html'),\n healthSettings: require('./healthSettings/healthSettings.html'),\n loadBalancers: require('./loadBalancers/loadBalancers.html'),\n networkSettings: require('./networkSettings/networkSettings.html'),\n securityGroups: require('./securityGroup/securityGroups.html'),\n instanceType: require('./instanceType/instanceType.html'),\n zones: require('./capacity/zones.html'),\n tags: require('./tags/tags.html'),\n advancedSettings: require('./advancedSettings/advancedSettings.html'),\n };\n\n $scope.firewallsLabel = FirewallLabels.get('Firewalls');\n\n $scope.title = title;\n\n $scope.applicationName = application.name;\n $scope.application = application;\n $scope.command = serverGroupCommand;\n\n // Give regions an init value to prevent it being undefined. If so, the React component RegionSelectField would get \"undefined\" for property regions\n // and then be unmounted so that the region selector would be hidden.\n $scope.command.backingData = $scope.command.backingData || {};\n $scope.command.backingData.filtered = $scope.command.backingData.filtered || {};\n $scope.command.backingData.filtered.regions = $scope.command.backingData.filtered.regions || [];\n\n $scope.state = {\n loaded: false,\n requiresTemplateSelection: !!serverGroupCommand.viewState.requiresTemplateSelection,\n };\n\n this.templateSelectionText = {\n copied: [\n 'account, region, subnet, cluster name (stack, details)',\n 'load balancers',\n FirewallLabels.get('firewalls'),\n 'instance type',\n 'all fields on the Advanced Settings page',\n ],\n notCopied: [],\n additionalCopyText:\n 'If a server group exists in this cluster at the time of deployment, its scaling policies will be copied over to the new server group.',\n };\n\n if (!$scope.command.viewState.disableStrategySelection) {\n this.templateSelectionText.notCopied.push(\n 'the deployment strategy (if any) used to deploy the most recent server group',\n );\n }\n\n function onApplicationRefresh() {\n // If the user has already closed the modal, do not navigate to the new details view\n if ($scope.$$destroyed) {\n return;\n }\n const cloneStage = $scope.taskMonitor.task.execution.stages.find((stage) => stage.type === 'cloneServerGroup');\n if (cloneStage && cloneStage.context['deploy.server.groups']) {\n const newServerGroupName = cloneStage.context['deploy.server.groups'][$scope.command.region];\n if (newServerGroupName) {\n const newStateParams = {\n serverGroup: newServerGroupName,\n accountId: $scope.command.credentials,\n region: $scope.command.region,\n provider: 'azure',\n };\n let transitionTo = '^.^.^.clusters.serverGroup';\n if ($state.includes('**.clusters.serverGroup')) {\n // clone via details, all view\n transitionTo = '^.serverGroup';\n }\n if ($state.includes('**.clusters.cluster.serverGroup')) {\n // clone or create with details open\n transitionTo = '^.^.serverGroup';\n }\n if ($state.includes('**.clusters')) {\n // create new, no details open\n transitionTo = '.serverGroup';\n }\n $state.go(transitionTo, newStateParams);\n }\n }\n }\n\n function onTaskComplete() {\n application.serverGroups.refresh();\n application.serverGroups.onNextRefresh($scope, onApplicationRefresh);\n }\n\n $scope.taskMonitor = new TaskMonitor({\n application: application,\n title: 'Creating your server group',\n modalInstance: $uibModalInstance,\n onTaskComplete: onTaskComplete,\n });\n\n function configureCommand() {\n azureServerGroupConfigurationService.configureCommand(application, serverGroupCommand).then(function () {\n const mode = serverGroupCommand.viewState.mode;\n if (mode === 'clone' || mode === 'create') {\n serverGroupCommand.viewState.useAllImageSelection = true;\n }\n $scope.state.loaded = true;\n initializeWizardState();\n initializeSelectOptions();\n initializeWatches();\n });\n }\n\n function initializeWizardState() {\n const mode = serverGroupCommand.viewState.mode;\n if (mode === 'clone' || mode === 'editPipeline') {\n ModalWizard.markComplete('basic-settings');\n ModalWizard.markComplete('load-balancers');\n ModalWizard.markComplete('network-settings');\n ModalWizard.markComplete('security-groups');\n ModalWizard.markComplete('instance-type');\n ModalWizard.markComplete('zones');\n }\n }\n\n function initializeWatches() {\n $scope.$watch('command.credentials', createResultProcessor($scope.command.credentialsChanged));\n $scope.$watch('command.region', createResultProcessor($scope.command.regionChanged));\n }\n\n function initializeSelectOptions() {\n processCommandUpdateResult($scope.command.credentialsChanged($scope.command, true));\n processCommandUpdateResult($scope.command.regionChanged($scope.command, true));\n }\n\n function createResultProcessor(method) {\n return function (newValue, oldValue) {\n if (newValue !== oldValue) {\n processCommandUpdateResult(method($scope.command));\n }\n };\n }\n\n function processCommandUpdateResult(result) {\n if (result.dirty.loadBalancers) {\n ModalWizard.markDirty('load-balancers');\n ModalWizard.markDirty('network-settings');\n }\n if (result.dirty.securityGroups) {\n ModalWizard.markDirty('security-groups');\n }\n if (result.dirty.instanceType) {\n ModalWizard.markDirty('instance-type');\n }\n if (result.dirty.zoneEnabled || result.dirty.zones) {\n ModalWizard.markDirty('zones');\n }\n }\n\n this.submit = function () {\n if ($scope.command.viewState.mode === 'editPipeline' || $scope.command.viewState.mode === 'createPipeline') {\n return $uibModalInstance.close($scope.command);\n }\n $scope.taskMonitor.submit(function () {\n return serverGroupWriter.cloneServerGroup($scope.command, application);\n });\n };\n\n this.cancel = function () {\n $uibModalInstance.dismiss();\n };\n\n this.toggleSuspendedProcess = function (process) {\n $scope.command.suspendedProcesses = $scope.command.suspendedProcesses || [];\n const processIndex = $scope.command.suspendedProcesses.indexOf(process);\n if (processIndex === -1) {\n $scope.command.suspendedProcesses.push(process);\n } else {\n $scope.command.suspendedProcesses.splice(processIndex, 1);\n }\n };\n\n this.processIsSuspended = function (process) {\n return $scope.command.suspendedProcesses.includes(process);\n };\n\n if (!$scope.state.requiresTemplateSelection) {\n configureCommand();\n } else {\n $scope.state.loaded = true;\n }\n\n this.templateSelected = () => {\n $scope.state.requiresTemplateSelection = false;\n configureCommand();\n };\n\n this.isValid = function () {\n return (\n $scope.command &&\n $scope.command.application &&\n $scope.command.credentials &&\n $scope.command.instanceType &&\n $scope.command.region &&\n (!$scope.command.zonesEnabled || $scope.command.zones.length !== 0) &&\n Utility.checkTags($scope.command.instanceTags).isValid\n );\n };\n },\n]);\n","import React from 'react';\n\nimport { UserVerification } from '@spinnaker/core';\n\nexport interface IAzureModalFooterProps {\n onSubmit: () => void;\n onCancel: () => void;\n isValid: boolean;\n account: string;\n}\n\nexport interface IAzureModalFooterState {\n verified: boolean;\n}\n\nexport class AzureModalFooter extends React.Component<IAzureModalFooterProps, IAzureModalFooterState> {\n constructor(props: any) {\n super(props);\n }\n\n public state = { verified: false };\n\n private handleVerification = (verified: boolean) => {\n this.setState({ verified });\n };\n\n public render() {\n const { onSubmit, onCancel, isValid, account } = this.props;\n const { verified } = this.state;\n\n return (\n <div className=\"modal-footer\">\n {<UserVerification expectedValue={account} onValidChange={this.handleVerification} />}\n <button className=\"btn btn-default\" onClick={onCancel}>\n Cancel\n </button>\n <button type=\"submit\" className=\"btn btn-primary\" onClick={onSubmit} disabled={!isValid || !verified}>\n Submit\n </button>\n </div>\n );\n }\n}\n","import React from 'react';\nimport { Modal } from 'react-bootstrap';\nimport Select from 'react-select';\n\nimport type { IModalComponentProps } from '@spinnaker/core';\nimport {\n ModalClose,\n noop,\n ReactInjector,\n ReactModal,\n TaskMonitor,\n TaskMonitorWrapper,\n TaskReason,\n} from '@spinnaker/core';\n\nimport { AzureModalFooter } from '../../../common/AzureModalFooter';\n\nexport interface IAzureRollbackServerGroupModalProps extends IModalComponentProps {\n application: any;\n serverGroup: any;\n disabledServerGroups: any;\n}\n\nexport interface IAzureRollbackServerGroupModalState {\n taskMonitor: TaskMonitor;\n submitting: boolean;\n command: any;\n}\n\nexport class AzureRollbackServerGroupModal extends React.Component<\n IAzureRollbackServerGroupModalProps,\n IAzureRollbackServerGroupModalState\n> {\n public static defaultProps: Partial<IAzureRollbackServerGroupModalProps> = {\n closeModal: noop,\n dismissModal: noop,\n };\n\n public static show(props: IAzureRollbackServerGroupModalProps) {\n const modalProps = {};\n return ReactModal.show(AzureRollbackServerGroupModal, props, modalProps);\n }\n\n constructor(props: IAzureRollbackServerGroupModalProps) {\n super(props);\n\n const { application, serverGroup } = props;\n\n this.state = {\n taskMonitor: new TaskMonitor({\n application: application,\n title: 'Rolling back your server group',\n modalInstance: TaskMonitor.modalInstanceEmulation(() => this.props.dismissModal()),\n }),\n submitting: true,\n command: {\n interestingHealthProviderNames: [],\n rollbackType: 'EXPLICIT',\n rollbackContext: {\n rollbackServerGroupName: serverGroup.name,\n enableAndDisableOnly: true,\n },\n },\n };\n }\n\n private close = (args?: any) => {\n this.props.dismissModal.apply(null, args);\n };\n\n private submit = () => {\n const { command, taskMonitor } = this.state;\n const { serverGroup, application } = this.props;\n\n taskMonitor.submit(() => {\n return ReactInjector.serverGroupWriter.rollbackServerGroup(serverGroup, application, command);\n });\n };\n\n private filterServerGroups = (disabledServerGroups: any) => {\n const filteredDisabledServerGroups = disabledServerGroups\n .filter((disabledServerGroup: any) => disabledServerGroup.instanceCounts.total !== 0)\n .sort((a: any, b: any) => b.name.localeCompare(a.name));\n\n return filteredDisabledServerGroups;\n };\n\n private isValid = () => {\n const restoreServerGroupName = this.state.command.rollbackContext.restoreServerGroupName;\n return restoreServerGroupName !== undefined;\n };\n\n private handleServerGroupChange = (restoreServerGroupOption: any) => {\n const { disabledServerGroups } = this.props;\n const newCommand = { ...this.state.command };\n newCommand.rollbackContext.restoreServerGroupName = restoreServerGroupOption.value;\n const restoreServerGroup = this.filterServerGroups(disabledServerGroups).find(function (disabledServerGroup: any) {\n return disabledServerGroup.name === restoreServerGroupOption.value;\n });\n newCommand.targetSize = restoreServerGroup.capacity.max;\n this.setState({\n command: newCommand,\n });\n };\n\n private handleTaskReasonChange = (taskReason?: any) => {\n const newCommand = { ...this.state.command };\n newCommand.reason = taskReason;\n this.setState({\n command: newCommand,\n });\n };\n\n public render() {\n const { command, taskMonitor, submitting } = this.state;\n const { serverGroup, disabledServerGroups } = this.props;\n const isValidSG = this.isValid();\n const disabledServerGroupOptions = this.filterServerGroups(disabledServerGroups).map(\n (disabledServerGroup: any) => ({\n label: disabledServerGroup.name,\n value: disabledServerGroup.name,\n }),\n );\n\n return (\n <Modal onHide={this.close}>\n <TaskMonitorWrapper monitor={taskMonitor} />\n {submitting && (\n <form role=\"form\">\n <ModalClose dismiss={this.close} />\n <Modal.Header>\n <Modal.Title>Rollback {serverGroup.name}</Modal.Title>\n </Modal.Header>\n <Modal.Body>\n <div className=\"row\">\n <div className=\"col-sm-3 sm-label-right\">Restore to</div>\n <div className=\"col-sm-6\">\n <Select\n value={command.rollbackContext.restoreServerGroupName}\n onChange={this.handleServerGroupChange}\n options={disabledServerGroupOptions}\n />\n </div>\n </div>\n <TaskReason reason={command.taskReason} onChange={this.handleTaskReasonChange} />\n </Modal.Body>\n <AzureModalFooter\n onSubmit={this.submit}\n onCancel={this.close}\n isValid={isValidSG}\n account={serverGroup.account}\n />\n </form>\n )}\n </Modal>\n );\n }\n}\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport * as angular from 'angular';\nimport _ from 'lodash';\n\nimport {\n ConfirmationModalService,\n FirewallLabels,\n SERVER_GROUP_WRITER,\n ServerGroupReader,\n ServerGroupWarningMessageService,\n} from '@spinnaker/core';\n\nimport '../configure/serverGroup.configure.azure.module';\nimport { AZURE_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE } from '../configure/serverGroupCommandBuilder.service';\nimport { AzureRollbackServerGroupModal } from './rollback/RollbackServerGroupModal';\n\nexport const AZURE_SERVERGROUP_DETAILS_SERVERGROUPDETAILS_AZURE_CONTROLLER =\n 'spinnaker.azure.serverGroup.details.controller';\nexport const name = AZURE_SERVERGROUP_DETAILS_SERVERGROUPDETAILS_AZURE_CONTROLLER; // for backwards compatibility\nangular\n .module(AZURE_SERVERGROUP_DETAILS_SERVERGROUPDETAILS_AZURE_CONTROLLER, [\n UIROUTER_ANGULARJS,\n AZURE_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE,\n SERVER_GROUP_WRITER,\n ])\n .controller('azureServerGroupDetailsCtrl', [\n '$scope',\n '$state',\n '$templateCache',\n 'app',\n 'serverGroup',\n 'azureServerGroupCommandBuilder',\n '$uibModal',\n 'serverGroupWriter',\n function (\n $scope,\n $state,\n $templateCache,\n app,\n serverGroup,\n azureServerGroupCommandBuilder,\n $uibModal,\n serverGroupWriter,\n ) {\n $scope.state = {\n loading: true,\n };\n\n $scope.firewallsLabel = FirewallLabels.get('Firewalls');\n\n this.application = app;\n\n function extractServerGroupSummary() {\n let summary = _.find(app.serverGroups.data, function (toCheck) {\n return (\n toCheck.name === serverGroup.name &&\n toCheck.account === serverGroup.accountId &&\n toCheck.region === serverGroup.region\n );\n });\n if (!summary) {\n app.loadBalancers.data.some(function (loadBalancer) {\n if (loadBalancer.account === serverGroup.accountId && loadBalancer.region === serverGroup.region) {\n return loadBalancer.serverGroups.some(function (possibleServerGroup) {\n if (possibleServerGroup.name === serverGroup.name) {\n summary = possibleServerGroup;\n return true;\n }\n });\n }\n });\n }\n if (!summary) {\n $state.go('^');\n }\n return summary;\n }\n\n function retrieveServerGroup() {\n const summary = extractServerGroupSummary();\n return ServerGroupReader.getServerGroup(\n app.name,\n serverGroup.accountId,\n serverGroup.region,\n serverGroup.name,\n ).then(function (details) {\n cancelLoader();\n\n angular.extend(details, summary);\n details.account = serverGroup.accountId; // it's possible the summary was not found because the clusters are still loading\n\n $scope.serverGroup = details;\n\n if (!_.isEmpty($scope.serverGroup)) {\n $scope.image = details.image ? details.image : undefined;\n\n if (details.image && details.image.description) {\n const tags = details.image.description.split(', ');\n tags.forEach(function (tag) {\n const keyVal = tag.split('=');\n if (keyVal.length === 2 && keyVal[0] === 'ancestor_name') {\n details.image.baseImage = keyVal[1];\n }\n });\n }\n\n if (details.launchConfig && details.launchConfig.securityGroups) {\n $scope.securityGroups = _.chain(details.launchConfig.securityGroups)\n .map(function (id) {\n return (\n _.find(app.securityGroups.data, {\n accountName: serverGroup.accountId,\n region: serverGroup.region,\n id: id,\n }) ||\n _.find(app.securityGroups.data, {\n accountName: serverGroup.accountId,\n region: serverGroup.region,\n name: id,\n })\n );\n })\n .compact()\n .value();\n }\n } else {\n $state.go('^');\n }\n });\n }\n\n function cancelLoader() {\n $scope.state.loading = false;\n }\n\n retrieveServerGroup().then(() => {\n // If the user navigates away from the view before the initial retrieveServerGroup call completes,\n // do not bother subscribing to the refresh\n if (!$scope.$$destroyed) {\n app.serverGroups.onRefresh($scope, retrieveServerGroup);\n }\n });\n\n this.destroyServerGroup = function destroyServerGroup() {\n const serverGroup = $scope.serverGroup;\n\n const stateParams = {\n name: serverGroup.name,\n accountId: serverGroup.account,\n region: serverGroup.region,\n };\n\n const taskMonitor = {\n application: app,\n title: 'Destroying ' + serverGroup.name,\n onTaskComplete: function () {\n if ($state.includes('**.serverGroup', stateParams)) {\n $state.go('^');\n }\n },\n };\n\n const submitMethod = function () {\n return serverGroupWriter.destroyServerGroup(serverGroup, app);\n };\n\n const confirmationModalParams = {\n header: 'Really destroy ' + serverGroup.name + '?',\n buttonText: 'Destroy ' + serverGroup.name,\n account: serverGroup.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n };\n\n ServerGroupWarningMessageService.addDestroyWarningMessage(app, serverGroup, confirmationModalParams);\n\n ConfirmationModalService.confirm(confirmationModalParams);\n };\n\n this.disableServerGroup = function disableServerGroup() {\n const serverGroup = $scope.serverGroup;\n\n const taskMonitor = {\n application: app,\n title: 'Disabling ' + serverGroup.name,\n };\n\n const submitMethod = () => serverGroupWriter.disableServerGroup(serverGroup, app);\n\n const confirmationModalParams = {\n header: 'Really disable ' + serverGroup.name + '?',\n buttonText: 'Disable ' + serverGroup.name,\n account: serverGroup.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n };\n\n ServerGroupWarningMessageService.addDisableWarningMessage(app, serverGroup, confirmationModalParams);\n\n ConfirmationModalService.confirm(confirmationModalParams);\n };\n\n this.enableServerGroup = function enableServerGroup() {\n const serverGroup = $scope.serverGroup;\n\n const taskMonitor = {\n application: app,\n title: 'Enabling ' + serverGroup.name,\n };\n\n const submitMethod = (params) => {\n return serverGroupWriter.enableServerGroup(\n serverGroup,\n app,\n angular.extend(params, {\n interestingHealthProviderNames: [], // bypass the check for now; will change this later to ['azureService']\n }),\n );\n };\n\n ConfirmationModalService.confirm({\n header: 'Really enable ' + serverGroup.name + '?',\n buttonText: 'Enable ' + serverGroup.name,\n account: serverGroup.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n });\n };\n\n this.rollbackServerGroup = () => {\n const serverGroup = $scope.serverGroup;\n const cluster = _.find(app.clusters, { name: serverGroup.cluster, account: serverGroup.account });\n const disabledServerGroups = _.filter(cluster.serverGroups, { isDisabled: true, region: serverGroup.region });\n AzureRollbackServerGroupModal.show({ application: app, serverGroup, disabledServerGroups });\n };\n\n this.cloneServerGroup = (serverGroup) => {\n $uibModal.open({\n templateUrl: require('../configure/wizard/serverGroupWizard.html'),\n controller: 'azureCloneServerGroupCtrl as ctrl',\n size: 'lg',\n resolve: {\n title: () => 'Clone ' + serverGroup.name,\n application: () => app,\n serverGroupCommand: () =>\n azureServerGroupCommandBuilder.buildServerGroupCommandFromExisting(app, serverGroup),\n },\n });\n };\n\n this.truncateCommitHash = function () {\n if ($scope.serverGroup && $scope.serverGroup.buildInfo && $scope.serverGroup.buildInfo.commit) {\n return $scope.serverGroup.buildInfo.commit.substring(0, 8);\n }\n return null;\n };\n },\n ]);\n","import { module } from 'angular';\n\nimport { AZURE_SERVERGROUP_DETAILS_SERVERGROUPDETAILS_AZURE_CONTROLLER } from './serverGroupDetails.azure.controller';\n\n('use strict');\n\nexport const AZURE_SERVERGROUP_DETAILS_SERVERGROUP_DETAILS_MODULE = 'spinnaker.azure.serverGroup.details.azure';\nexport const name = AZURE_SERVERGROUP_DETAILS_SERVERGROUP_DETAILS_MODULE; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_DETAILS_SERVERGROUP_DETAILS_MODULE, [\n AZURE_SERVERGROUP_DETAILS_SERVERGROUPDETAILS_AZURE_CONTROLLER,\n]);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { ApplicationNameValidator } from '@spinnaker/core';\n\nexport const AZURE_VALIDATION_APPLICATIONNAME_VALIDATOR = 'spinnaker.azure.validation.applicationName';\nexport const name = AZURE_VALIDATION_APPLICATIONNAME_VALIDATOR; // for backwards compatibility\nmodule(AZURE_VALIDATION_APPLICATIONNAME_VALIDATOR, [])\n .factory('azureApplicationNameValidator', function () {\n function validateSpecialCharacters(name, errors) {\n const pattern = /^([a-zA-Z][a-zA-Z0-9]*)?$/;\n if (!pattern.test(name)) {\n errors.push(\n 'The application name must begin with a letter and must contain only letters or digits. No ' +\n 'special characters are allowed.',\n );\n }\n }\n\n function validate(name) {\n const warnings = [];\n const errors = [];\n\n if (name && name.length) {\n validateSpecialCharacters(name, errors);\n }\n\n return {\n warnings: warnings,\n errors: errors,\n };\n }\n\n return {\n validate: validate,\n };\n })\n .run([\n 'azureApplicationNameValidator',\n function (azureApplicationNameValidator) {\n ApplicationNameValidator.registerValidator('azure', azureApplicationNameValidator);\n },\n ]);\n","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","import { module } from 'angular';\n\nimport { CloudProviderRegistry, DeploymentStrategyRegistry } from '@spinnaker/core';\n\nimport './help/azure.help';\nimport { AZURE_IMAGE_IMAGE_READER } from './image/image.reader';\nimport { AZURE_INSTANCE_AZUREINSTANCETYPE_SERVICE } from './instance/azureInstanceType.service';\nimport { AZURE_INSTANCE_DETAILS_INSTANCE_DETAILS_CONTROLLER } from './instance/details/instance.details.controller';\nimport { AzureLoadBalancerChoiceModal } from './loadBalancer/configure/AzureLoadBalancerChoiceModal';\nimport { AZURE_LOADBALANCER_CONFIGURE_CREATELOADBALANCER_CONTROLLER } from './loadBalancer/configure/createLoadBalancer.controller';\nimport { AZURE_LOADBALANCER_DETAILS_LOADBALANCERDETAIL_CONTROLLER } from './loadBalancer/details/loadBalancerDetail.controller';\nimport { AZURE_LOADBALANCER_LOADBALANCER_TRANSFORMER } from './loadBalancer/loadBalancer.transformer';\nimport logo from './logo/logo_azure.png';\nimport { AZURE_PIPELINE_STAGES_BAKE_AZUREBAKESTAGE } from './pipeline/stages/bake/azureBakeStage';\nimport { AZURE_PIPELINE_STAGES_DESTROYASG_AZUREDESTROYASGSTAGE } from './pipeline/stages/destroyAsg/azureDestroyAsgStage';\nimport { AZURE_PIPELINE_STAGES_DISABLEASG_AZUREDISABLEASGSTAGE } from './pipeline/stages/disableAsg/azureDisableAsgStage';\nimport { AZURE_PIPELINE_STAGES_ENABLEASG_AZUREENABLEASGSTAGE } from './pipeline/stages/enableAsg/azureEnableAsgStage';\nimport { AZURE_SECURITYGROUP_CONFIGURE_CREATESECURITYGROUPCTRL } from './securityGroup/configure/CreateSecurityGroupCtrl';\nimport { AZURE_SECURITYGROUP_CONFIGURE_EDITSECURITYGROUPCTRL } from './securityGroup/configure/EditSecurityGroupCtrl';\nimport { AZURE_SECURITYGROUP_DETAILS_SECURITYGROUPDETAIL_CONTROLLER } from './securityGroup/details/securityGroupDetail.controller';\nimport { AZURE_SECURITYGROUP_SECURITYGROUP_READER } from './securityGroup/securityGroup.reader';\nimport { AZURE_SECURITYGROUP_SECURITYGROUP_TRANSFORMER } from './securityGroup/securityGroup.transformer';\nimport { AZURE_SERVERGROUP_CONFIGURE_SERVERGROUP_CONFIGURE_AZURE_MODULE } from './serverGroup/configure/serverGroup.configure.azure.module';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_CLONESERVERGROUP_AZURE_CONTROLLER } from './serverGroup/configure/wizard/CloneServerGroup.azure.controller';\nimport { AZURE_SERVERGROUP_DETAILS_SERVERGROUP_DETAILS_MODULE } from './serverGroup/details/serverGroup.details.module';\nimport { AZURE_SERVERGROUP_SERVERGROUP_TRANSFORMER } from './serverGroup/serverGroup.transformer';\nimport { AZURE_VALIDATION_APPLICATIONNAME_VALIDATOR } from './validation/applicationName.validator';\n\nimport './logo/azure.logo.less';\n\nexport const AZURE_MODULE = 'spinnaker.azure';\nmodule(AZURE_MODULE, [\n AZURE_PIPELINE_STAGES_DESTROYASG_AZUREDESTROYASGSTAGE,\n AZURE_PIPELINE_STAGES_ENABLEASG_AZUREENABLEASGSTAGE,\n AZURE_PIPELINE_STAGES_DISABLEASG_AZUREDISABLEASGSTAGE,\n AZURE_PIPELINE_STAGES_BAKE_AZUREBAKESTAGE,\n AZURE_SERVERGROUP_DETAILS_SERVERGROUP_DETAILS_MODULE,\n AZURE_SERVERGROUP_SERVERGROUP_TRANSFORMER,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_CLONESERVERGROUP_AZURE_CONTROLLER,\n AZURE_SERVERGROUP_CONFIGURE_SERVERGROUP_CONFIGURE_AZURE_MODULE,\n AZURE_INSTANCE_AZUREINSTANCETYPE_SERVICE,\n AZURE_LOADBALANCER_LOADBALANCER_TRANSFORMER,\n AZURE_LOADBALANCER_DETAILS_LOADBALANCERDETAIL_CONTROLLER,\n AZURE_LOADBALANCER_CONFIGURE_CREATELOADBALANCER_CONTROLLER,\n AZURE_INSTANCE_DETAILS_INSTANCE_DETAILS_CONTROLLER,\n AZURE_SECURITYGROUP_DETAILS_SECURITYGROUPDETAIL_CONTROLLER,\n AZURE_SECURITYGROUP_CONFIGURE_CREATESECURITYGROUPCTRL,\n AZURE_SECURITYGROUP_CONFIGURE_EDITSECURITYGROUPCTRL,\n AZURE_SECURITYGROUP_SECURITYGROUP_TRANSFORMER,\n AZURE_SECURITYGROUP_SECURITYGROUP_READER,\n AZURE_IMAGE_IMAGE_READER,\n AZURE_VALIDATION_APPLICATIONNAME_VALIDATOR,\n]).config(function () {\n CloudProviderRegistry.registerProvider('azure', {\n name: 'Azure',\n logo: {\n path: logo,\n },\n image: {\n reader: 'azureImageReader',\n },\n serverGroup: {\n transformer: 'azureServerGroupTransformer',\n detailsTemplateUrl: require('./serverGroup/details/serverGroupDetails.html'),\n detailsController: 'azureServerGroupDetailsCtrl',\n cloneServerGroupTemplateUrl: require('./serverGroup/configure/wizard/serverGroupWizard.html'),\n cloneServerGroupController: 'azureCloneServerGroupCtrl',\n commandBuilder: 'azureServerGroupCommandBuilder',\n configurationService: 'azureServerGroupConfigurationService',\n },\n instance: {\n instanceTypeService: 'azureInstanceTypeService',\n detailsTemplateUrl: require('./instance/details/instanceDetails.html'),\n detailsController: 'azureInstanceDetailsCtrl',\n },\n loadBalancer: {\n transformer: 'azureLoadBalancerTransformer',\n detailsTemplateUrl: require('./loadBalancer/details/loadBalancerDetail.html'),\n detailsController: 'azureLoadBalancerDetailsCtrl',\n createLoadBalancerTemplateUrl: require('./loadBalancer/configure/createLoadBalancer.html'),\n createLoadBalancerController: 'azureCreateLoadBalancerCtrl',\n CreateLoadBalancerModal: AzureLoadBalancerChoiceModal,\n },\n securityGroup: {\n transformer: 'azureSecurityGroupTransformer',\n reader: 'azureSecurityGroupReader',\n detailsTemplateUrl: require('./securityGroup/details/securityGroupDetail.html'),\n detailsController: 'azureSecurityGroupDetailsCtrl',\n createSecurityGroupTemplateUrl: require('./securityGroup/configure/createSecurityGroup.html'),\n createSecurityGroupController: 'azureCreateSecurityGroupCtrl',\n },\n });\n});\n\nDeploymentStrategyRegistry.registerProvider('azure', ['redblack']);\n"],"names":[],"mappings":";;;;;;;;;;AAAO,IAAI,QAAQ,CAAC;AACpB,CAAC,SAAS,SAAS,EAAE;AACrB,EAAE,SAAS,CAAC,SAAS,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,GAAG,mBAAmB,CAAC;AACtE,EAAE,SAAS,CAAC,SAAS,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC,GAAG,uBAAuB,CAAC;AAC9E,EAAE,SAAS,CAAC,SAAS,CAAC,yBAAyB,CAAC,GAAG,CAAC,CAAC,GAAG,yBAAyB,CAAC;AAClF,EAAE,SAAS,CAAC,SAAS,CAAC,2BAA2B,CAAC,GAAG,CAAC,CAAC,GAAG,2BAA2B,CAAC;AACtF,EAAE,SAAS,CAAC,SAAS,CAAC,6BAA6B,CAAC,GAAG,CAAC,CAAC,GAAG,6BAA6B,CAAC;AAC1F,EAAE,SAAS,CAAC,SAAS,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC,GAAG,sBAAsB,CAAC;AAC5E,CAAC,EAAE,QAAQ,KAAK,QAAQ,GAAG,EAAE,CAAC,CAAC,CAAC;AACzB,MAAM,sBAAsB,GAAG;AACtC,EAAE;AACF,IAAI,IAAI,EAAE,qBAAqB;AAC/B,IAAI,WAAW,EAAE,EAAE;AACnB,GAAG;AACH,EAAE;AACF,IAAI,IAAI,EAAE,2BAA2B;AACrC,IAAI,WAAW,EAAE,EAAE;AACnB,GAAG;AACH,CAAC,CAAC;AACF,MAAM,QAAQ,GAAG,MAAM;AACvB,EAAE,OAAO,SAAS,CAAC,UAAU,EAAE;AAC/B,IAAI,IAAI,CAAC,UAAU,EAAE;AACrB,MAAM,OAAO;AACb,QAAQ,OAAO,EAAE,KAAK;AACtB,QAAQ,KAAK,EAAE,CAAC;AAChB,QAAQ,YAAY,EAAE,6BAA6B;AACnD,OAAO,CAAC;AACR,KAAK;AACL,IAAI,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC;AAClD,IAAI,IAAI,EAAE,MAAM,IAAI,CAAC,IAAI,MAAM,IAAI,QAAQ,CAAC,cAAc,CAAC,EAAE;AAC7D,MAAM,OAAO;AACb,QAAQ,OAAO,EAAE,KAAK;AACtB,QAAQ,KAAK,EAAE,CAAC;AAChB,QAAQ,YAAY,EAAE,CAAC,kCAAkC,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC;AACpF,OAAO,CAAC;AACR,KAAK;AACL,IAAI,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;AACrD,MAAM,IAAI,CAAC,CAAC,MAAM,GAAG,QAAQ,CAAC,yBAAyB,EAAE;AACzD,QAAQ,OAAO;AACf,UAAU,OAAO,EAAE,KAAK;AACxB,UAAU,KAAK,EAAE,CAAC;AAClB,UAAU,YAAY,EAAE,CAAC,mBAAmB,EAAE,CAAC,CAAC,oBAAoB,EAAE,QAAQ,CAAC,yBAAyB,CAAC,CAAC;AAC1G,SAAS,CAAC;AACV,OAAO;AACP,MAAM,IAAI,CAAC,CAAC,MAAM,GAAG,QAAQ,CAAC,2BAA2B,EAAE;AAC3D,QAAQ,OAAO;AACf,UAAU,OAAO,EAAE,KAAK;AACxB,UAAU,KAAK,EAAE,CAAC;AAClB,UAAU,YAAY,EAAE,CAAC,qBAAqB,EAAE,CAAC,CAAC,oBAAoB,EAAE,QAAQ,CAAC,2BAA2B,CAAC,CAAC;AAC9G,SAAS,CAAC;AACV,OAAO;AACP,MAAM,IAAI,QAAQ,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;AACrD,QAAQ,OAAO;AACf,UAAU,OAAO,EAAE,KAAK;AACxB,UAAU,KAAK,EAAE,CAAC;AAClB,UAAU,YAAY,EAAE,CAAC,+BAA+B,EAAE,CAAC,CAAC,CAAC;AAC7D,SAAS,CAAC;AACV,OAAO;AACP,MAAM,IAAI,QAAQ,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;AACrD,QAAQ,OAAO;AACf,UAAU,OAAO,EAAE,KAAK;AACxB,UAAU,KAAK,EAAE,CAAC;AAClB,UAAU,YAAY,EAAE,CAAC,iCAAiC,EAAE,CAAC,CAAC,CAAC;AAC/D,SAAS,CAAC;AACV,OAAO;AACP,KAAK;AACL,IAAI,OAAO;AACX,MAAM,OAAO,EAAE,IAAI;AACnB,MAAM,KAAK,EAAE,IAAI;AACjB,KAAK,CAAC;AACN,GAAG;AACH,EAAE,OAAO,mBAAmB,CAAC,UAAU,EAAE;AACzC,IAAI,UAAU,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/D,IAAI,OAAO,sBAAsB,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,UAAU,CAAC,IAAI,IAAI,CAAC;AAC7F,GAAG;AACH,CAAC,CAAC;AACF,IAAI,OAAO,GAAG,QAAQ,CAAC;AACvB,OAAO,CAAC,cAAc,GAAG,CAAC,CAAC;AAC3B,OAAO,CAAC,yBAAyB,GAAG,GAAG,CAAC;AACxC,OAAO,CAAC,2BAA2B,GAAG,GAAG,CAAC;AAC1C,OAAO,CAAC,wBAAwB,GAAG,YAAY;;AC9E/C,MAAM,YAAY,GAAG;AACrB,EAAE,yCAAyC,EAAE,uEAAuE;AACpH,EAAE,sCAAsC,EAAE,yXAAyX;AACna,EAAE,oCAAoC,EAAE,6PAA6P;AACrS,EAAE,6CAA6C,EAAE,yQAAyQ;AAC1T,EAAE,yCAAyC,EAAE,uQAAuQ;AACpT,EAAE,kDAAkD,EAAE,iRAAiR;AACvU,EAAE,uCAAuC,EAAE,gEAAgE;AAC3G,EAAE,qCAAqC,EAAE,qIAAqI;AAC9K,EAAE,4CAA4C,EAAE,iNAAiN;AACjQ,EAAE,gDAAgD,EAAE,2MAA2M;AAC/P,EAAE,6BAA6B,EAAE,gEAAgE;AACjG,EAAE,yBAAyB,EAAE,0JAA0J;AACvL,EAAE,0BAA0B,EAAE,mGAAmG;AACjI,EAAE,kCAAkC,EAAE,sNAAsN;AAC5P,EAAE,oCAAoC,EAAE,mFAAmF;AAC3H,EAAE,8BAA8B,EAAE,wDAAwD;AAC1F,EAAE,8BAA8B,EAAE,CAAC,gDAAgD,EAAE,OAAO,CAAC,cAAc,CAAC,cAAc,CAAC;AAC3H,EAAE,oCAAoC,EAAE,+YAA+Y;AACvb,EAAE,uBAAuB,EAAE,+KAA+K;AAC1M,EAAE,8BAA8B,EAAE,iGAAiG;AACnI,EAAE,kDAAkD,EAAE,wFAAwF;AAC9I,EAAE,2BAA2B,EAAE,6QAA6Q;AAC5S,EAAE,0CAA0C,EAAE,oKAAoK;AAClN,EAAE,4BAA4B,EAAE,6OAA6O;AAC7Q,EAAE,yCAAyC,EAAE,4FAA4F;AACzI,EAAE,mCAAmC,EAAE,qMAAqM;AAC5O,EAAE,8CAA8C,EAAE,kIAAkI;AACpL,EAAE,mDAAmD,EAAE,4FAA4F;AACnJ,EAAE,0DAA0D,EAAE,+hBAA+hB;AAC7lB,CAAC,CAAC;AACF,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK,oBAAoB,CAAC,QAAQ,CAAC,GAAG,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;;AC9B1F,MAAM,wBAAwB,GAAG,8BAA8B,CAAC;AAEvE,MAAM,CAAC,wBAAwB,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,kBAAkB,EAAE,WAAW;AAC5E,EAAE,SAAS,UAAU,CAAC,MAAM,EAAE;AAC9B,IAAI,OAAO,IAAI,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,OAAO,EAAE;AAC3E,MAAM,OAAO,OAAO,CAAC;AACrB,KAAK,EAAE,WAAW;AAClB,MAAM,OAAO,EAAE,CAAC;AAChB,KAAK,CAAC,CAAC;AACP,GAAG;AACH,EAAE,SAAS,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE;AAClD,IAAI,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,OAAO,EAAE;AACxH,MAAM,OAAO,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;AAC3D,KAAK,EAAE,WAAW;AAClB,MAAM,OAAO,IAAI,CAAC;AAClB,KAAK,CAAC,CAAC;AACP,GAAG;AACH,EAAE,OAAO;AACT,IAAI,UAAU;AACd,IAAI,QAAQ;AACZ,GAAG,CAAC;AACJ,CAAC,CAAC;;ACrBK,MAAM,wCAAwC,GAAG,sCAAsC,CAAC;AAE/F,MAAM,CAAC,wCAAwC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,0BAA0B,EAAE;AACzF,EAAE,IAAI;AACN,EAAE,SAAS,EAAE,EAAE;AACf,IAAI,MAAM,CAAC,GAAG;AACd,MAAM,IAAI,EAAE,UAAU;AACtB,MAAM,WAAW,EAAE,4LAA4L;AAC/M,MAAM,aAAa,EAAE;AACrB,QAAQ;AACR,UAAU,IAAI,EAAE,eAAe;AAC/B,UAAU,KAAK,EAAE,eAAe;AAChC,UAAU,GAAG,EAAE,CAAC;AAChB,UAAU,MAAM,EAAE,CAAC;AACnB,UAAU,OAAO,EAAE;AACnB,YAAY,IAAI,EAAE,KAAK;AACvB,YAAY,KAAK,EAAE,CAAC;AACpB,YAAY,IAAI,EAAE,CAAC;AACnB,WAAW;AACX,SAAS;AACT,QAAQ;AACR,UAAU,IAAI,EAAE,cAAc;AAC9B,UAAU,KAAK,EAAE,cAAc;AAC/B,UAAU,GAAG,EAAE,CAAC;AAChB,UAAU,MAAM,EAAE,CAAC;AACnB,UAAU,OAAO,EAAE;AACnB,YAAY,IAAI,EAAE,KAAK;AACvB,YAAY,KAAK,EAAE,CAAC;AACpB,YAAY,IAAI,EAAE,CAAC;AACnB,WAAW;AACX,SAAS;AACT,QAAQ;AACR,UAAU,IAAI,EAAE,eAAe;AAC/B,UAAU,KAAK,EAAE,eAAe;AAChC,UAAU,GAAG,EAAE,CAAC;AAChB,UAAU,MAAM,EAAE,CAAC;AACnB,UAAU,OAAO,EAAE;AACnB,YAAY,IAAI,EAAE,KAAK;AACvB,YAAY,KAAK,EAAE,CAAC;AACpB,YAAY,IAAI,EAAE,EAAE;AACpB,WAAW;AACX,SAAS;AACT,QAAQ;AACR,UAAU,IAAI,EAAE,cAAc;AAC9B,UAAU,KAAK,EAAE,cAAc;AAC/B,UAAU,GAAG,EAAE,CAAC;AAChB,UAAU,MAAM,EAAE,CAAC;AACnB,UAAU,OAAO,EAAE;AACnB,YAAY,IAAI,EAAE,KAAK;AACvB,YAAY,KAAK,EAAE,CAAC;AACpB,YAAY,IAAI,EAAE,CAAC;AACnB,WAAW;AACX,SAAS;AACT,QAAQ;AACR,UAAU,IAAI,EAAE,eAAe;AAC/B,UAAU,KAAK,EAAE,eAAe;AAChC,UAAU,GAAG,EAAE,CAAC;AAChB,UAAU,MAAM,EAAE,EAAE;AACpB,UAAU,OAAO,EAAE;AACnB,YAAY,IAAI,EAAE,KAAK;AACvB,YAAY,KAAK,EAAE,CAAC;AACpB,YAAY,IAAI,EAAE,EAAE;AACpB,WAAW;AACX,SAAS;AACT,QAAQ;AACR,UAAU,IAAI,EAAE,eAAe;AAC/B,UAAU,KAAK,EAAE,eAAe;AAChC,UAAU,GAAG,EAAE,CAAC;AAChB,UAAU,MAAM,EAAE,EAAE;AACpB,UAAU,OAAO,EAAE;AACnB,YAAY,IAAI,EAAE,KAAK;AACvB,YAAY,KAAK,EAAE,EAAE;AACrB,YAAY,IAAI,EAAE,EAAE;AACpB,WAAW;AACX,SAAS;AACT,QAAQ;AACR,UAAU,IAAI,EAAE,eAAe;AAC/B,UAAU,KAAK,EAAE,eAAe;AAChC,UAAU,GAAG,EAAE,CAAC;AAChB,UAAU,MAAM,EAAE,GAAG;AACrB,UAAU,OAAO,EAAE;AACnB,YAAY,IAAI,EAAE,KAAK;AACvB,YAAY,KAAK,EAAE,CAAC;AACpB,YAAY,IAAI,EAAE,CAAC;AACnB,WAAW;AACX,SAAS;AACT,OAAO;AACP,KAAK,CAAC;AACN,IAAI,MAAM,IAAI,GAAG;AACjB,MAAM,IAAI,EAAE,aAAa;AACzB,MAAM,WAAW,EAAE,iHAAiH;AACpI,MAAM,aAAa,EAAE;AACrB,QAAQ;AACR,UAAU,IAAI,EAAE,iBAAiB;AACjC,UAAU,KAAK,EAAE,iBAAiB;AAClC,UAAU,GAAG,EAAE,CAAC;AAChB,UAAU,MAAM,EAAE,CAAC;AACnB,UAAU,OAAO,EAAE;AACnB,YAAY,IAAI,EAAE,KAAK;AACvB,YAAY,KAAK,EAAE,CAAC;AACpB,YAAY,IAAI,EAAE,EAAE;AACpB,WAAW;AACX,SAAS;AACT,QAAQ;AACR,UAAU,IAAI,EAAE,iBAAiB;AACjC,UAAU,KAAK,EAAE,iBAAiB;AAClC,UAAU,GAAG,EAAE,CAAC;AAChB,UAAU,MAAM,EAAE,EAAE;AACpB,UAAU,OAAO,EAAE;AACnB,YAAY,IAAI,EAAE,KAAK;AACvB,YAAY,KAAK,EAAE,CAAC;AACpB,YAAY,IAAI,EAAE,EAAE;AACpB,WAAW;AACX,SAAS;AACT,QAAQ;AACR,UAAU,IAAI,EAAE,iBAAiB;AACjC,UAAU,KAAK,EAAE,iBAAiB;AAClC,UAAU,GAAG,EAAE,CAAC;AAChB,UAAU,MAAM,EAAE,EAAE;AACpB,UAAU,OAAO,EAAE;AACnB,YAAY,IAAI,EAAE,KAAK;AACvB,YAAY,KAAK,EAAE,EAAE;AACrB,YAAY,IAAI,EAAE,EAAE;AACpB,WAAW;AACX,SAAS;AACT,QAAQ;AACR,UAAU,IAAI,EAAE,kBAAkB;AAClC,UAAU,KAAK,EAAE,kBAAkB;AACnC,UAAU,GAAG,EAAE,EAAE;AACjB,UAAU,MAAM,EAAE,EAAE;AACpB,UAAU,OAAO,EAAE;AACnB,YAAY,IAAI,EAAE,KAAK;AACvB,YAAY,KAAK,EAAE,EAAE;AACrB,YAAY,IAAI,EAAE,GAAG;AACrB,WAAW;AACX,SAAS;AACT,QAAQ;AACR,UAAU,IAAI,EAAE,kBAAkB;AAClC,UAAU,KAAK,EAAE,kBAAkB;AACnC,UAAU,GAAG,EAAE,EAAE;AACjB,UAAU,MAAM,EAAE,GAAG;AACrB,UAAU,OAAO,EAAE;AACnB,YAAY,IAAI,EAAE,KAAK;AACvB,YAAY,KAAK,EAAE,EAAE;AACrB,YAAY,IAAI,EAAE,GAAG;AACrB,WAAW;AACX,SAAS;AACT,QAAQ;AACR,UAAU,IAAI,EAAE,kBAAkB;AAClC,UAAU,KAAK,EAAE,kBAAkB;AACnC,UAAU,GAAG,EAAE,EAAE;AACjB,UAAU,MAAM,EAAE,GAAG;AACrB,UAAU,OAAO,EAAE;AACnB,YAAY,IAAI,EAAE,KAAK;AACvB,YAAY,KAAK,EAAE,EAAE;AACrB,YAAY,IAAI,EAAE,GAAG;AACrB,WAAW;AACX,SAAS;AACT,OAAO;AACP,KAAK,CAAC;AACN,IAAI,MAAM,GAAG,GAAG;AAChB,MAAM,IAAI,EAAE,YAAY;AACxB,MAAM,WAAW,EAAE,gHAAgH;AACnI,MAAM,aAAa,EAAE;AACrB,QAAQ;AACR,UAAU,IAAI,EAAE,gBAAgB;AAChC,UAAU,KAAK,EAAE,gBAAgB;AACjC,UAAU,GAAG,EAAE,CAAC;AAChB,UAAU,MAAM,EAAE,CAAC;AACnB,UAAU,OAAO,EAAE;AACnB,YAAY,IAAI,EAAE,KAAK;AACvB,YAAY,KAAK,EAAE,CAAC;AACpB,YAAY,IAAI,EAAE,EAAE;AACpB,WAAW;AACX,SAAS;AACT,QAAQ;AACR,UAAU,IAAI,EAAE,gBAAgB;AAChC,UAAU,KAAK,EAAE,gBAAgB;AACjC,UAAU,GAAG,EAAE,CAAC;AAChB,UAAU,MAAM,EAAE,EAAE;AACpB,UAAU,OAAO,EAAE;AACnB,YAAY,IAAI,EAAE,KAAK;AACvB,YAAY,KAAK,EAAE,CAAC;AACpB,YAAY,IAAI,EAAE,GAAG;AACrB,WAAW;AACX,SAAS;AACT,QAAQ;AACR,UAAU,IAAI,EAAE,gBAAgB;AAChC,UAAU,KAAK,EAAE,gBAAgB;AACjC,UAAU,GAAG,EAAE,CAAC;AAChB,UAAU,MAAM,EAAE,EAAE;AACpB,UAAU,OAAO,EAAE;AACnB,YAAY,IAAI,EAAE,KAAK;AACvB,YAAY,KAAK,EAAE,EAAE;AACrB,YAAY,IAAI,EAAE,GAAG;AACrB,WAAW;AACX,SAAS;AACT,QAAQ;AACR,UAAU,IAAI,EAAE,iBAAiB;AACjC,UAAU,KAAK,EAAE,iBAAiB;AAClC,UAAU,GAAG,EAAE,EAAE;AACjB,UAAU,MAAM,EAAE,EAAE;AACpB,UAAU,OAAO,EAAE;AACnB,YAAY,IAAI,EAAE,KAAK;AACvB,YAAY,KAAK,EAAE,EAAE;AACrB,YAAY,IAAI,EAAE,GAAG;AACrB,WAAW;AACX,SAAS;AACT,QAAQ;AACR,UAAU,IAAI,EAAE,iBAAiB;AACjC,UAAU,KAAK,EAAE,iBAAiB;AAClC,UAAU,GAAG,EAAE,EAAE;AACjB,UAAU,MAAM,EAAE,GAAG;AACrB,UAAU,OAAO,EAAE;AACnB,YAAY,IAAI,EAAE,KAAK;AACvB,YAAY,KAAK,EAAE,EAAE;AACrB,YAAY,IAAI,EAAE,GAAG;AACrB,WAAW;AACX,SAAS;AACT,QAAQ;AACR,UAAU,IAAI,EAAE,iBAAiB;AACjC,UAAU,KAAK,EAAE,iBAAiB;AAClC,UAAU,GAAG,EAAE,EAAE;AACjB,UAAU,MAAM,EAAE,GAAG;AACrB,UAAU,OAAO,EAAE;AACnB,YAAY,IAAI,EAAE,KAAK;AACvB,YAAY,KAAK,EAAE,EAAE;AACrB,YAAY,IAAI,EAAE,IAAI;AACtB,WAAW;AACX,SAAS;AACT,OAAO;AACP,KAAK,CAAC;AACN,IAAI,MAAM,IAAI,GAAG;AACjB,MAAM,IAAI,EAAE,aAAa;AACzB,MAAM,WAAW,EAAE,EAAE;AACrB,MAAM,aAAa,EAAE;AACrB,QAAQ;AACR,UAAU,IAAI,EAAE,iBAAiB;AACjC,UAAU,KAAK,EAAE,iBAAiB;AAClC,UAAU,GAAG,EAAE,CAAC;AAChB,UAAU,MAAM,EAAE,GAAG;AACrB,UAAU,OAAO,EAAE;AACnB,YAAY,IAAI,EAAE,KAAK;AACvB,YAAY,KAAK,EAAE,CAAC;AACpB,YAAY,IAAI,EAAE,CAAC;AACnB,WAAW;AACX,SAAS;AACT,QAAQ;AACR,UAAU,IAAI,EAAE,iBAAiB;AACjC,UAAU,KAAK,EAAE,iBAAiB;AAClC,UAAU,GAAG,EAAE,CAAC;AAChB,UAAU,MAAM,EAAE,CAAC;AACnB,UAAU,OAAO,EAAE;AACnB,YAAY,IAAI,EAAE,KAAK;AACvB,YAAY,KAAK,EAAE,CAAC;AACpB,YAAY,IAAI,EAAE,EAAE;AACpB,WAAW;AACX,SAAS;AACT,QAAQ;AACR,UAAU,IAAI,EAAE,iBAAiB;AACjC,UAAU,KAAK,EAAE,iBAAiB;AAClC,UAAU,GAAG,EAAE,CAAC;AAChB,UAAU,MAAM,EAAE,EAAE;AACpB,UAAU,OAAO,EAAE;AACnB,YAAY,IAAI,EAAE,KAAK;AACvB,YAAY,KAAK,EAAE,EAAE;AACrB,YAAY,IAAI,EAAE,EAAE;AACpB,WAAW;AACX,SAAS;AACT,QAAQ;AACR,UAAU,IAAI,EAAE,iBAAiB;AACjC,UAAU,KAAK,EAAE,iBAAiB;AAClC,UAAU,GAAG,EAAE,CAAC;AAChB,UAAU,MAAM,EAAE,EAAE;AACpB,UAAU,OAAO,EAAE;AACnB,YAAY,IAAI,EAAE,KAAK;AACvB,YAAY,KAAK,EAAE,EAAE;AACrB,YAAY,IAAI,EAAE,EAAE;AACpB,WAAW;AACX,SAAS;AACT,QAAQ;AACR,UAAU,IAAI,EAAE,iBAAiB;AACjC,UAAU,KAAK,EAAE,iBAAiB;AAClC,UAAU,GAAG,EAAE,EAAE;AACjB,UAAU,MAAM,EAAE,EAAE;AACpB,UAAU,OAAO,EAAE;AACnB,YAAY,IAAI,EAAE,KAAK;AACvB,YAAY,KAAK,EAAE,EAAE;AACrB,YAAY,IAAI,EAAE,GAAG;AACrB,WAAW;AACX,SAAS;AACT,QAAQ;AACR,UAAU,IAAI,EAAE,kBAAkB;AAClC,UAAU,KAAK,EAAE,kBAAkB;AACnC,UAAU,GAAG,EAAE,CAAC;AAChB,UAAU,MAAM,EAAE,EAAE;AACpB,UAAU,OAAO,EAAE;AACnB,YAAY,IAAI,EAAE,KAAK;AACvB,YAAY,KAAK,EAAE,CAAC;AACpB,YAAY,IAAI,EAAE,EAAE;AACpB,WAAW;AACX,SAAS;AACT,QAAQ;AACR,UAAU,IAAI,EAAE,kBAAkB;AAClC,UAAU,KAAK,EAAE,kBAAkB;AACnC,UAAU,GAAG,EAAE,CAAC;AAChB,UAAU,MAAM,EAAE,EAAE;AACpB,UAAU,OAAO,EAAE;AACnB,YAAY,IAAI,EAAE,KAAK;AACvB,YAAY,KAAK,EAAE,EAAE;AACrB,YAAY,IAAI,EAAE,EAAE;AACpB,WAAW;AACX,SAAS;AACT,QAAQ;AACR,UAAU,IAAI,EAAE,kBAAkB;AAClC,UAAU,KAAK,EAAE,kBAAkB;AACnC,UAAU,GAAG,EAAE,CAAC;AAChB,UAAU,MAAM,EAAE,EAAE;AACpB,UAAU,OAAO,EAAE;AACnB,YAAY,IAAI,EAAE,KAAK;AACvB,YAAY,KAAK,EAAE,EAAE;AACrB,YAAY,IAAI,EAAE,GAAG;AACrB,WAAW;AACX,SAAS;AACT,QAAQ;AACR,UAAU,IAAI,EAAE,kBAAkB;AAClC,UAAU,KAAK,EAAE,kBAAkB;AACnC,UAAU,GAAG,EAAE,EAAE;AACjB,UAAU,MAAM,EAAE,GAAG;AACrB,UAAU,OAAO,EAAE;AACnB,YAAY,IAAI,EAAE,KAAK;AACvB,YAAY,KAAK,EAAE,EAAE;AACrB,YAAY,IAAI,EAAE,GAAG;AACrB,WAAW;AACX,SAAS;AACT,QAAQ;AACR,UAAU,IAAI,EAAE,kBAAkB;AAClC,UAAU,KAAK,EAAE,kBAAkB;AACnC,UAAU,GAAG,EAAE,EAAE;AACjB,UAAU,MAAM,EAAE,GAAG;AACrB,UAAU,OAAO,EAAE;AACnB,YAAY,IAAI,EAAE,KAAK;AACvB,YAAY,KAAK,EAAE,EAAE;AACrB,YAAY,IAAI,EAAE,GAAG;AACrB,WAAW;AACX,SAAS;AACT,OAAO;AACP,KAAK,CAAC;AACN,IAAI,MAAM,GAAG,GAAG;AAChB,MAAM,IAAI,EAAE,YAAY;AACxB,MAAM,WAAW,EAAE,EAAE;AACrB,MAAM,aAAa,EAAE;AACrB,QAAQ;AACR,UAAU,IAAI,EAAE,gBAAgB;AAChC,UAAU,KAAK,EAAE,gBAAgB;AACjC,UAAU,GAAG,EAAE,CAAC;AAChB,UAAU,MAAM,EAAE,GAAG;AACrB,UAAU,OAAO,EAAE;AACnB,YAAY,IAAI,EAAE,KAAK;AACvB,YAAY,KAAK,EAAE,CAAC;AACpB,YAAY,IAAI,EAAE,EAAE;AACpB,WAAW;AACX,SAAS;AACT,QAAQ;AACR,UAAU,IAAI,EAAE,gBAAgB;AAChC,UAAU,KAAK,EAAE,gBAAgB;AACjC,UAAU,GAAG,EAAE,CAAC;AAChB,UAAU,MAAM,EAAE,CAAC;AACnB,UAAU,OAAO,EAAE;AACnB,YAAY,IAAI,EAAE,KAAK;AACvB,YAAY,KAAK,EAAE,CAAC;AACpB,YAAY,IAAI,EAAE,GAAG;AACrB,WAAW;AACX,SAAS;AACT,QAAQ;AACR,UAAU,IAAI,EAAE,gBAAgB;AAChC,UAAU,KAAK,EAAE,gBAAgB;AACjC,UAAU,GAAG,EAAE,CAAC;AAChB,UAAU,MAAM,EAAE,EAAE;AACpB,UAAU,OAAO,EAAE;AACnB,YAAY,IAAI,EAAE,KAAK;AACvB,YAAY,KAAK,EAAE,EAAE;AACrB,YAAY,IAAI,EAAE,GAAG;AACrB,WAAW;AACX,SAAS;AACT,QAAQ;AACR,UAAU,IAAI,EAAE,gBAAgB;AAChC,UAAU,KAAK,EAAE,gBAAgB;AACjC,UAAU,GAAG,EAAE,CAAC;AAChB,UAAU,MAAM,EAAE,EAAE;AACpB,UAAU,OAAO,EAAE;AACnB,YAAY,IAAI,EAAE,KAAK;AACvB,YAAY,KAAK,EAAE,EAAE;AACrB,YAAY,IAAI,EAAE,GAAG;AACrB,WAAW;AACX,SAAS;AACT,QAAQ;AACR,UAAU,IAAI,EAAE,gBAAgB;AAChC,UAAU,KAAK,EAAE,gBAAgB;AACjC,UAAU,GAAG,EAAE,EAAE;AACjB,UAAU,MAAM,EAAE,EAAE;AACpB,UAAU,OAAO,EAAE;AACnB,YAAY,IAAI,EAAE,KAAK;AACvB,YAAY,KAAK,EAAE,EAAE;AACrB,YAAY,IAAI,EAAE,GAAG;AACrB,WAAW;AACX,SAAS;AACT,QAAQ;AACR,UAAU,IAAI,EAAE,iBAAiB;AACjC,UAAU,KAAK,EAAE,iBAAiB;AAClC,UAAU,GAAG,EAAE,CAAC;AAChB,UAAU,MAAM,EAAE,EAAE;AACpB,UAAU,OAAO,EAAE;AACnB,YAAY,IAAI,EAAE,KAAK;AACvB,YAAY,KAAK,EAAE,CAAC;AACpB,YAAY,IAAI,EAAE,GAAG;AACrB,WAAW;AACX,SAAS;AACT,QAAQ;AACR,UAAU,IAAI,EAAE,iBAAiB;AACjC,UAAU,KAAK,EAAE,iBAAiB;AAClC,UAAU,GAAG,EAAE,CAAC;AAChB,UAAU,MAAM,EAAE,EAAE;AACpB,UAAU,OAAO,EAAE;AACnB,YAAY,IAAI,EAAE,KAAK;AACvB,YAAY,KAAK,EAAE,EAAE;AACrB,YAAY,IAAI,EAAE,GAAG;AACrB,WAAW;AACX,SAAS;AACT,QAAQ;AACR,UAAU,IAAI,EAAE,iBAAiB;AACjC,UAAU,KAAK,EAAE,iBAAiB;AAClC,UAAU,GAAG,EAAE,CAAC;AAChB,UAAU,MAAM,EAAE,EAAE;AACpB,UAAU,OAAO,EAAE;AACnB,YAAY,IAAI,EAAE,KAAK;AACvB,YAAY,KAAK,EAAE,EAAE;AACrB,YAAY,IAAI,EAAE,GAAG;AACrB,WAAW;AACX,SAAS;AACT,QAAQ;AACR,UAAU,IAAI,EAAE,iBAAiB;AACjC,UAAU,KAAK,EAAE,iBAAiB;AAClC,UAAU,GAAG,EAAE,EAAE;AACjB,UAAU,MAAM,EAAE,GAAG;AACrB,UAAU,OAAO,EAAE;AACnB,YAAY,IAAI,EAAE,KAAK;AACvB,YAAY,KAAK,EAAE,EAAE;AACrB,YAAY,IAAI,EAAE,GAAG;AACrB,WAAW;AACX,SAAS;AACT,QAAQ;AACR,UAAU,IAAI,EAAE,iBAAiB;AACjC,UAAU,KAAK,EAAE,iBAAiB;AAClC,UAAU,GAAG,EAAE,EAAE;AACjB,UAAU,MAAM,EAAE,GAAG;AACrB,UAAU,OAAO,EAAE;AACnB,YAAY,IAAI,EAAE,KAAK;AACvB,YAAY,KAAK,EAAE,EAAE;AACrB,YAAY,IAAI,EAAE,GAAG;AACrB,WAAW;AACX,SAAS;AACT,OAAO;AACP,KAAK,CAAC;AACN,IAAI,MAAM,GAAG,GAAG;AAChB,MAAM,IAAI,EAAE,YAAY;AACxB,MAAM,WAAW,EAAE,EAAE;AACrB,MAAM,aAAa,EAAE;AACrB,QAAQ;AACR,UAAU,IAAI,EAAE,gBAAgB;AAChC,UAAU,KAAK,EAAE,gBAAgB;AACjC,UAAU,GAAG,EAAE,CAAC;AAChB,UAAU,MAAM,EAAE,CAAC;AACnB,UAAU,OAAO,EAAE;AACnB,YAAY,IAAI,EAAE,KAAK;AACvB,YAAY,KAAK,EAAE,CAAC;AACpB,YAAY,IAAI,EAAE,EAAE;AACpB,WAAW;AACX,SAAS;AACT,QAAQ;AACR,UAAU,IAAI,EAAE,iBAAiB;AACjC,UAAU,KAAK,EAAE,iBAAiB;AAClC,UAAU,GAAG,EAAE,CAAC;AAChB,UAAU,MAAM,EAAE,EAAE;AACpB,UAAU,OAAO,EAAE;AACnB,YAAY,IAAI,EAAE,KAAK;AACvB,YAAY,KAAK,EAAE,CAAC;AACpB,YAAY,IAAI,EAAE,EAAE;AACpB,WAAW;AACX,SAAS;AACT,QAAQ;AACR,UAAU,IAAI,EAAE,gBAAgB;AAChC,UAAU,KAAK,EAAE,gBAAgB;AACjC,UAAU,GAAG,EAAE,CAAC;AAChB,UAAU,MAAM,EAAE,CAAC;AACnB,UAAU,OAAO,EAAE;AACnB,YAAY,IAAI,EAAE,KAAK;AACvB,YAAY,KAAK,EAAE,CAAC;AACpB,YAAY,IAAI,EAAE,EAAE;AACpB,WAAW;AACX,SAAS;AACT,QAAQ;AACR,UAAU,IAAI,EAAE,iBAAiB;AACjC,UAAU,KAAK,EAAE,iBAAiB;AAClC,UAAU,GAAG,EAAE,CAAC;AAChB,UAAU,MAAM,EAAE,EAAE;AACpB,UAAU,OAAO,EAAE;AACnB,YAAY,IAAI,EAAE,KAAK;AACvB,YAAY,KAAK,EAAE,CAAC;AACpB,YAAY,IAAI,EAAE,EAAE;AACpB,WAAW;AACX,SAAS;AACT,QAAQ;AACR,UAAU,IAAI,EAAE,gBAAgB;AAChC,UAAU,KAAK,EAAE,gBAAgB;AACjC,UAAU,GAAG,EAAE,CAAC;AAChB,UAAU,MAAM,EAAE,CAAC;AACnB,UAAU,OAAO,EAAE;AACnB,YAAY,IAAI,EAAE,KAAK;AACvB,YAAY,KAAK,EAAE,CAAC;AACpB,YAAY,IAAI,EAAE,EAAE;AACpB,WAAW;AACX,SAAS;AACT,QAAQ;AACR,UAAU,IAAI,EAAE,iBAAiB;AACjC,UAAU,KAAK,EAAE,iBAAiB;AAClC,UAAU,GAAG,EAAE,CAAC;AAChB,UAAU,MAAM,EAAE,EAAE;AACpB,UAAU,OAAO,EAAE;AACnB,YAAY,IAAI,EAAE,KAAK;AACvB,YAAY,KAAK,EAAE,EAAE;AACrB,YAAY,IAAI,EAAE,EAAE;AACpB,WAAW;AACX,SAAS;AACT,QAAQ;AACR,UAAU,IAAI,EAAE,gBAAgB;AAChC,UAAU,KAAK,EAAE,gBAAgB;AACjC,UAAU,GAAG,EAAE,CAAC;AAChB,UAAU,MAAM,EAAE,EAAE;AACpB,UAAU,OAAO,EAAE;AACnB,YAAY,IAAI,EAAE,KAAK;AACvB,YAAY,KAAK,EAAE,EAAE;AACrB,YAAY,IAAI,EAAE,EAAE;AACpB,WAAW;AACX,SAAS;AACT,OAAO;AACP,KAAK,CAAC;AACN,IAAI,MAAM,EAAE,GAAG;AACf,MAAM,IAAI,EAAE,WAAW;AACvB,MAAM,WAAW,EAAE,EAAE;AACrB,MAAM,aAAa,EAAE;AACrB,QAAQ;AACR,UAAU,IAAI,EAAE,eAAe;AAC/B,UAAU,KAAK,EAAE,eAAe;AAChC,UAAU,GAAG,EAAE,CAAC;AAChB,UAAU,MAAM,EAAE,CAAC;AACnB,UAAU,OAAO,EAAE;AACnB,YAAY,IAAI,EAAE,KAAK;AACvB,YAAY,KAAK,EAAE,CAAC;AACpB,YAAY,IAAI,EAAE,GAAG;AACrB,WAAW;AACX,SAAS;AACT,QAAQ;AACR,UAAU,IAAI,EAAE,eAAe;AAC/B,UAAU,KAAK,EAAE,eAAe;AAChC,UAAU,GAAG,EAAE,CAAC;AAChB,UAAU,MAAM,EAAE,EAAE;AACpB,UAAU,OAAO,EAAE;AACnB,YAAY,IAAI,EAAE,KAAK;AACvB,YAAY,KAAK,EAAE,CAAC;AACpB,YAAY,IAAI,EAAE,GAAG;AACrB,WAAW;AACX,SAAS;AACT,OAAO;AACP,KAAK,CAAC;AACN,IAAI,MAAM,IAAI,GAAG;AACjB,MAAM,IAAI,EAAE,aAAa;AACzB,MAAM,WAAW,EAAE,EAAE;AACrB,MAAM,aAAa,EAAE;AACrB,QAAQ;AACR,UAAU,IAAI,EAAE,iBAAiB;AACjC,UAAU,KAAK,EAAE,iBAAiB;AAClC,UAAU,GAAG,EAAE,CAAC;AAChB,UAAU,MAAM,EAAE,CAAC;AACnB,UAAU,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE;AACtD,SAAS;AACT,QAAQ;AACR,UAAU,IAAI,EAAE,iBAAiB;AACjC,UAAU,KAAK,EAAE,iBAAiB;AAClC,UAAU,GAAG,EAAE,CAAC;AAChB,UAAU,MAAM,EAAE,CAAC;AACnB,UAAU,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE;AACtD,SAAS;AACT,QAAQ;AACR,UAAU,IAAI,EAAE,iBAAiB;AACjC,UAAU,KAAK,EAAE,iBAAiB;AAClC,UAAU,GAAG,EAAE,CAAC;AAChB,UAAU,MAAM,EAAE,EAAE;AACpB,UAAU,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;AACvD,SAAS;AACT,QAAQ;AACR,UAAU,IAAI,EAAE,kBAAkB;AAClC,UAAU,KAAK,EAAE,kBAAkB;AACnC,UAAU,GAAG,EAAE,EAAE;AACjB,UAAU,MAAM,EAAE,EAAE;AACpB,UAAU,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE;AACxD,SAAS;AACT,QAAQ;AACR,UAAU,IAAI,EAAE,kBAAkB;AAClC,UAAU,KAAK,EAAE,kBAAkB;AACnC,UAAU,GAAG,EAAE,EAAE;AACjB,UAAU,MAAM,EAAE,EAAE;AACpB,UAAU,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE;AACxD,SAAS;AACT,QAAQ;AACR,UAAU,IAAI,EAAE,kBAAkB;AAClC,UAAU,KAAK,EAAE,kBAAkB;AACnC,UAAU,GAAG,EAAE,EAAE;AACjB,UAAU,MAAM,EAAE,GAAG;AACrB,UAAU,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE;AACxD,SAAS;AACT,QAAQ;AACR,UAAU,IAAI,EAAE,kBAAkB;AAClC,UAAU,KAAK,EAAE,kBAAkB;AACnC,UAAU,GAAG,EAAE,EAAE;AACjB,UAAU,MAAM,EAAE,GAAG;AACrB,UAAU,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE;AACxD,SAAS;AACT,OAAO;AACP,KAAK,CAAC;AACN,IAAI,MAAM,EAAE,GAAG;AACf,MAAM,IAAI,EAAE,WAAW;AACvB,MAAM,WAAW,EAAE,EAAE;AACrB,MAAM,aAAa,EAAE;AACrB,QAAQ;AACR,UAAU,IAAI,EAAE,cAAc;AAC9B,UAAU,KAAK,EAAE,cAAc;AAC/B,UAAU,GAAG,EAAE,CAAC;AAChB,UAAU,MAAM,EAAE,CAAC;AACnB,UAAU,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE;AACrD,SAAS;AACT,QAAQ;AACR,UAAU,IAAI,EAAE,cAAc;AAC9B,UAAU,KAAK,EAAE,cAAc;AAC/B,UAAU,GAAG,EAAE,CAAC;AAChB,UAAU,MAAM,EAAE,CAAC;AACnB,UAAU,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE;AACrD,SAAS;AACT,QAAQ;AACR,UAAU,IAAI,EAAE,cAAc;AAC9B,UAAU,KAAK,EAAE,cAAc;AAC/B,UAAU,GAAG,EAAE,CAAC;AAChB,UAAU,MAAM,EAAE,CAAC;AACnB,UAAU,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;AACvD,SAAS;AACT,QAAQ;AACR,UAAU,IAAI,EAAE,cAAc;AAC9B,UAAU,KAAK,EAAE,cAAc;AAC/B,UAAU,GAAG,EAAE,CAAC;AAChB,UAAU,MAAM,EAAE,EAAE;AACpB,UAAU,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;AACvD,SAAS;AACT,QAAQ;AACR,UAAU,IAAI,EAAE,eAAe;AAC/B,UAAU,KAAK,EAAE,eAAe;AAChC,UAAU,GAAG,EAAE,EAAE;AACjB,UAAU,MAAM,EAAE,EAAE;AACpB,UAAU,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;AACvD,SAAS;AACT,OAAO;AACP,KAAK,CAAC;AACN,IAAI,MAAM,CAAC,GAAG;AACd,MAAM,IAAI,EAAE,UAAU;AACtB,MAAM,WAAW,EAAE,EAAE;AACrB,MAAM,aAAa,EAAE;AACrB,QAAQ;AACR,UAAU,IAAI,EAAE,aAAa;AAC7B,UAAU,KAAK,EAAE,aAAa;AAC9B,UAAU,GAAG,EAAE,CAAC;AAChB,UAAU,MAAM,EAAE,CAAC;AACnB,UAAU,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE;AACtD,SAAS;AACT,QAAQ;AACR,UAAU,IAAI,EAAE,aAAa;AAC7B,UAAU,KAAK,EAAE,aAAa;AAC9B,UAAU,GAAG,EAAE,CAAC;AAChB,UAAU,MAAM,EAAE,CAAC;AACnB,UAAU,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE;AACtD,SAAS;AACT,QAAQ;AACR,UAAU,IAAI,EAAE,aAAa;AAC7B,UAAU,KAAK,EAAE,aAAa;AAC9B,UAAU,GAAG,EAAE,CAAC;AAChB,UAAU,MAAM,EAAE,CAAC;AACnB,UAAU,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;AACvD,SAAS;AACT,QAAQ;AACR,UAAU,IAAI,EAAE,aAAa;AAC7B,UAAU,KAAK,EAAE,aAAa;AAC9B,UAAU,GAAG,EAAE,CAAC;AAChB,UAAU,MAAM,EAAE,EAAE;AACpB,UAAU,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE;AACxD,SAAS;AACT,QAAQ;AACR,UAAU,IAAI,EAAE,cAAc;AAC9B,UAAU,KAAK,EAAE,cAAc;AAC/B,UAAU,GAAG,EAAE,EAAE;AACjB,UAAU,MAAM,EAAE,EAAE;AACpB,UAAU,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE;AACxD,SAAS;AACT,OAAO;AACP,KAAK,CAAC;AACN,IAAI,MAAM,UAAU,GAAG;AACvB,MAAM;AACN,QAAQ,IAAI,EAAE,SAAS;AACvB,QAAQ,KAAK,EAAE,iBAAiB;AAChC,QAAQ,WAAW,EAAE,oIAAoI;AACzJ,QAAQ,QAAQ,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC;AACpD,QAAQ,IAAI,EAAE,KAAK;AACnB,OAAO;AACP,MAAM;AACN,QAAQ,IAAI,EAAE,SAAS;AACvB,QAAQ,KAAK,EAAE,mBAAmB;AAClC,QAAQ,WAAW,EAAE,8HAA8H;AACnJ,QAAQ,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;AAC/B,QAAQ,IAAI,EAAE,KAAK;AACnB,OAAO;AACP,MAAM;AACN,QAAQ,IAAI,EAAE,QAAQ;AACtB,QAAQ,KAAK,EAAE,aAAa;AAC5B,QAAQ,WAAW,EAAE,iCAAiC;AACtD,QAAQ,QAAQ,EAAE,EAAE;AACpB,QAAQ,IAAI,EAAE,UAAU;AACxB,OAAO;AACP,KAAK,CAAC;AACN,IAAI,SAAS,gBAAgB,CAAC,IAAI,EAAE;AACpC,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AAClC,QAAQ,OAAO,CAAC,CAAC;AACjB,OAAO;AACP,MAAM,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;AACpD,KAAK;AACL,IAAI,SAAS,UAAU,CAAC,QAAQ,EAAE;AAClC,MAAM,MAAM,KAAK,GAAG;AACpB,QAAQ,GAAG,EAAE;AACb,UAAU,GAAG,EAAE,MAAM,CAAC,SAAS;AAC/B,UAAU,GAAG,EAAE,CAAC,MAAM,CAAC,SAAS;AAChC,SAAS;AACT,QAAQ,MAAM,EAAE;AAChB,UAAU,GAAG,EAAE,MAAM,CAAC,SAAS;AAC/B,UAAU,GAAG,EAAE,CAAC,MAAM,CAAC,SAAS;AAChC,SAAS;AACT,QAAQ,OAAO,EAAE;AACjB,UAAU,GAAG,EAAE,MAAM,CAAC,SAAS;AAC/B,UAAU,GAAG,EAAE,CAAC,MAAM,CAAC,SAAS;AAChC,SAAS;AACT,QAAQ,QAAQ,EAAE,EAAE;AACpB,OAAO,CAAC;AACR,MAAM,IAAI,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE;AACzD,QAAQ,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,MAAM,EAAE;AACnD,UAAU,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC3C,UAAU,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC,GAAG,IAAI,MAAM,CAAC,SAAS,CAAC;AACtF,UAAU,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;AACvF,UAAU,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC,MAAM,IAAI,MAAM,CAAC,SAAS,CAAC;AAC/F,UAAU,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;AAChG,UAAU,MAAM,UAAU,GAAG,gBAAgB,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAC,IAAI,MAAM,CAAC,SAAS,CAAC;AACnH,UAAU,MAAM,UAAU,GAAG,gBAAgB,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;AACpH,UAAU,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;AAC1D,UAAU,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;AAC1D,UAAU,KAAK,CAAC,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;AACnE,UAAU,KAAK,CAAC,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;AACnE,UAAU,KAAK,CAAC,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;AACtE,UAAU,KAAK,CAAC,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;AACtE,SAAS,CAAC,CAAC;AACX,OAAO;AACP,MAAM,OAAO,KAAK,CAAC;AACnB,KAAK;AACL,IAAI,SAAS,aAAa,GAAG;AAC7B,MAAM,UAAU,CAAC,GAAG,CAAC,SAAS,QAAQ,EAAE;AACxC,QAAQ,KAAK,MAAM,MAAM,IAAI,QAAQ,CAAC,QAAQ,EAAE;AAChD,UAAU,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,aAAa,EAAE;AACnD,YAAY,IAAI,IAAI,CAAC,UAAU,IAAI,KAAK,CAAC;AACzC,cAAc,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;AAClC,WAAW;AACX,SAAS;AACT,QAAQ,QAAQ,CAAC,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;AAC9C,OAAO,CAAC,CAAC;AACT,MAAM,OAAO,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACjC,KAAK;AACL,IAAI,MAAM,mBAAmB,GAAG,SAAS,oBAAoB,GAAG;AAChE,MAAM,OAAO,aAAa,EAAE,CAAC;AAC7B,KAAK,CAAC;AACN,IAAI,SAAS,2BAA2B,CAAC,0BAA0B,EAAE,iBAAiB,EAAE;AACxF,MAAM,MAAM,CAAC,QAAQ,CAAC,GAAG,iBAAiB,CAAC;AAC3C,MAAM,OAAO,0BAA0B,CAAC,QAAQ,CAAC,CAAC;AAClD,KAAK;AACL,IAAI,OAAO;AACX,MAAM,aAAa;AACnB,MAAM,2BAA2B;AACjC,MAAM,mBAAmB;AACzB,KAAK,CAAC;AACN,GAAG;AACH,CAAC,CAAC;;ACxxBK,MAAM,kDAAkD,GAAG,4CAA4C,CAAC;AAE/G,MAAM,CAAC,kDAAkD,EAAE,CAAC,kBAAkB,EAAE,oBAAoB,CAAC,CAAC,CAAC,UAAU,CAAC,0BAA0B,EAAE;AAC9I,EAAE,QAAQ;AACV,EAAE,QAAQ;AACV,EAAE,WAAW;AACb,EAAE,UAAU;AACZ,EAAE,KAAK;AACP,EAAE,IAAI;AACN,EAAE,SAAS,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,EAAE;AACzD,IAAI,MAAM,CAAC,kBAAkB,GAAG,qBAAqB,CAAC,QAAQ,CAAC,OAAO,EAAE,6BAA6B,CAAC,CAAC;AACvG,IAAI,MAAM,CAAC,KAAK,GAAG;AACnB,MAAM,OAAO,EAAE,IAAI;AACnB,MAAM,UAAU,EAAE,GAAG,CAAC,YAAY;AAClC,KAAK,CAAC;AACN,IAAI,SAAS,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE;AACrD,MAAM,IAAI,GAAG,CAAC,YAAY,EAAE;AAC5B,QAAQ,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACzC,OAAO;AACP,MAAM,SAAS,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,IAAI,EAAE,CAAC;AAChD,MAAM,MAAM,kBAAkB,GAAG,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,MAAM,EAAE;AAC1E,QAAQ,OAAO,MAAM,CAAC,IAAI,KAAK,OAAO,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,CAAC;AACrE,OAAO,CAAC,CAAC;AACT,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE;AACzB,QAAQ,kBAAkB,CAAC,OAAO,CAAC,SAAS,MAAM,EAAE;AACpD,UAAU,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,YAAY,EAAE;AAC3E,YAAY,OAAO,YAAY,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC;AACrD,WAAW,CAAC,CAAC;AACb,UAAU,IAAI,YAAY,CAAC,MAAM,EAAE;AACnC,YAAY,CAAC,CAAC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;AAChD,WAAW;AACX,SAAS,CAAC,CAAC;AACX,OAAO;AACP,MAAM,MAAM,CAAC,aAAa,GAAG,kBAAkB,CAAC;AAChD,KAAK;AACL,IAAI,SAAS,gBAAgB,GAAG;AAChC,MAAM,MAAM,SAAS,GAAG,EAAE,CAAC;AAC3B,MAAM,IAAI,eAAe,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC;AACjE,MAAM,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AAC7B,QAAQ,eAAe,GAAG,EAAE,CAAC;AAC7B,QAAQ,aAAa,GAAG,EAAE,CAAC;AAC3B,QAAQ,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;AACnC,QAAQ,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;AACjC,OAAO,MAAM;AACb,QAAQ,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,WAAW,EAAE;AACzD,UAAU,OAAO,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,gBAAgB,EAAE;AACvE,YAAY,IAAI,gBAAgB,CAAC,EAAE,KAAK,QAAQ,CAAC,UAAU,EAAE;AAC7D,cAAc,eAAe,GAAG,gBAAgB,CAAC;AACjD,cAAc,aAAa,GAAG,WAAW,CAAC,aAAa,CAAC;AACxD,cAAc,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC;AAC5C,cAAc,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC;AAC1C,cAAc,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC;AACxC,cAAc,SAAS,CAAC,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC;AACvD,cAAc,SAAS,CAAC,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC;AAClD,cAAc,OAAO,IAAI,CAAC;AAC1B,aAAa;AACb,WAAW,CAAC,CAAC;AACb,SAAS,CAAC,CAAC;AACX,QAAQ,IAAI,CAAC,eAAe,EAAE;AAC9B,UAAU,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,YAAY,EAAE;AAC7D,YAAY,OAAO,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,gBAAgB,EAAE;AAC1E,cAAc,IAAI,gBAAgB,CAAC,EAAE,KAAK,QAAQ,CAAC,UAAU,EAAE;AAC/D,gBAAgB,eAAe,GAAG,gBAAgB,CAAC;AACnD,gBAAgB,aAAa,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;AACpD,gBAAgB,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC;AAC/C,gBAAgB,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC;AAC7C,gBAAgB,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC;AAC3C,gBAAgB,OAAO,IAAI,CAAC;AAC5B,eAAe;AACf,aAAa,CAAC,CAAC;AACf,WAAW,CAAC,CAAC;AACb,UAAU,IAAI,CAAC,eAAe,EAAE;AAChC,YAAY,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,YAAY,EAAE;AAC/D,cAAc,OAAO,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,WAAW,EAAE;AAC1E,gBAAgB,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE;AAC7C,kBAAkB,OAAO,KAAK,CAAC;AAC/B,iBAAiB;AACjB,gBAAgB,OAAO,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,gBAAgB,EAAE;AAC7E,kBAAkB,IAAI,gBAAgB,CAAC,EAAE,KAAK,QAAQ,CAAC,UAAU,EAAE;AACnE,oBAAoB,eAAe,GAAG,gBAAgB,CAAC;AACvD,oBAAoB,aAAa,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;AACxD,oBAAoB,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC;AACnD,oBAAoB,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC;AACjD,oBAAoB,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC;AAC/C,oBAAoB,OAAO,IAAI,CAAC;AAChC,mBAAmB;AACnB,iBAAiB,CAAC,CAAC;AACnB,eAAe,CAAC,CAAC;AACjB,aAAa,CAAC,CAAC;AACf,WAAW;AACX,SAAS;AACT,OAAO;AACP,MAAM,IAAI,eAAe,IAAI,OAAO,IAAI,MAAM,EAAE;AAChD,QAAQ,SAAS,CAAC,OAAO,GAAG,OAAO,CAAC;AACpC,QAAQ,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC;AAClC,QAAQ,oBAAoB,CAAC,oBAAoB,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;AAC1E,QAAQ,OAAO,cAAc,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,SAAS,OAAO,EAAE;AAC9G,UAAU,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC;AACvC,UAAU,oBAAoB,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;AACzD,UAAU,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;AACjE,UAAU,MAAM,CAAC,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAC;AAC5C,UAAU,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC;AAC1C,UAAU,MAAM,CAAC,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAC;AACxC,UAAU,MAAM,CAAC,QAAQ,CAAC,aAAa,GAAG,aAAa,CAAC;AACxD,UAAU,MAAM,eAAe,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE;AAChF,YAAY,OAAO,MAAM,CAAC,IAAI,KAAK,WAAW,CAAC;AAC/C,WAAW,CAAC,CAAC;AACb,UAAU,IAAI,eAAe,IAAI,eAAe,CAAC,UAAU,EAAE;AAC7D,YAAY,MAAM,OAAO,GAAG,eAAe,CAAC,UAAU,CAAC;AACvD,YAAY,MAAM,CAAC,QAAQ,CAAC,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAChG,WAAW;AACX,UAAU,MAAM,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,OAAO,CAAC,gBAAgB,CAAC;AACnF,SAAS,EAAE,WAAW;AACtB,UAAU,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC;AACvC,UAAU,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;AACzB,SAAS,CAAC,CAAC;AACX,OAAO;AACP,MAAM,IAAI,CAAC,eAAe,EAAE;AAC5B,QAAQ,MAAM,CAAC,kBAAkB,GAAG,QAAQ,CAAC,UAAU,CAAC;AACxD,QAAQ,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC;AACrC,OAAO;AACP,MAAM,OAAO,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3B,KAAK;AACL,IAAI,IAAI,CAAC,6BAA6B,GAAG,WAAW;AACpD,MAAM,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,MAAM,EAAE;AAC1D,QAAQ,OAAO,MAAM,CAAC,IAAI,KAAK,cAAc,CAAC;AAC9C,OAAO,CAAC,CAAC;AACT,KAAK,CAAC;AACN,IAAI,IAAI,CAAC,2BAA2B,GAAG,WAAW;AAClD,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC;AACxC,MAAM,IAAI,CAAC,SAAS,CAAC,aAAa,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,MAAM,EAAE;AACvE,QAAQ,OAAO,KAAK,CAAC;AACrB,OAAO;AACP,MAAM,MAAM,YAAY,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,MAAM,EAAE;AAClE,QAAQ,OAAO,MAAM,CAAC,IAAI,KAAK,cAAc,IAAI,MAAM,CAAC,KAAK,KAAK,cAAc,CAAC;AACjF,OAAO,CAAC,CAAC;AACT,MAAM,MAAM,qBAAqB,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,MAAM,EAAE;AAC3E,QAAQ,OAAO,MAAM,CAAC,IAAI,KAAK,cAAc,CAAC;AAC9C,OAAO,CAAC,CAAC;AACT,MAAM,OAAO,YAAY,IAAI,CAAC,qBAAqB,CAAC;AACpD,KAAK,CAAC;AACN,IAAI,IAAI,CAAC,wBAAwB,GAAG,WAAW;AAC/C,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC;AACxC,MAAM,MAAM,eAAe,GAAG,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,MAAM,EAAE;AACvE,QAAQ,OAAO,MAAM,CAAC,IAAI,KAAK,WAAW,CAAC;AAC3C,OAAO,CAAC,CAAC;AACT,MAAM,OAAO,eAAe,CAAC,MAAM,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,cAAc,GAAG,KAAK,CAAC;AAC1F,KAAK,CAAC;AACN,IAAI,IAAI,CAAC,iBAAiB,GAAG,SAAS,iBAAiB,GAAG;AAC1D,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC;AACxC,MAAM,MAAM,WAAW,GAAG;AAC1B,QAAQ,WAAW,EAAE,GAAG;AACxB,QAAQ,KAAK,EAAE,cAAc,GAAG,SAAS,CAAC,UAAU;AACpD,QAAQ,cAAc,EAAE,WAAW;AACnC,UAAU,IAAI,MAAM,CAAC,QAAQ,CAAC,oBAAoB,EAAE,EAAE,UAAU,EAAE,SAAS,CAAC,UAAU,EAAE,CAAC,EAAE;AAC3F,YAAY,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;AAC3B,WAAW;AACX,SAAS;AACT,OAAO,CAAC;AACR,MAAM,MAAM,YAAY,GAAG,WAAW;AACtC,QAAQ,OAAO,cAAc,CAAC,iBAAiB,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;AAChE,OAAO,CAAC;AACR,MAAM,wBAAwB,CAAC,OAAO,CAAC;AACvC,QAAQ,MAAM,EAAE,mBAAmB,GAAG,SAAS,CAAC,UAAU,GAAG,GAAG;AAChE,QAAQ,UAAU,EAAE,YAAY,GAAG,SAAS,CAAC,UAAU;AACvD,QAAQ,OAAO,EAAE,SAAS,CAAC,OAAO;AAClC,QAAQ,iBAAiB,EAAE,WAAW;AACtC,QAAQ,YAAY;AACpB,OAAO,CAAC,CAAC;AACT,KAAK,CAAC;AACN,IAAI,IAAI,CAAC,qCAAqC,GAAG,SAAS,qCAAqC,GAAG;AAClG,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC;AACxC,MAAM,MAAM,WAAW,GAAG;AAC1B,QAAQ,WAAW,EAAE,GAAG;AACxB,QAAQ,KAAK,EAAE,cAAc,GAAG,SAAS,CAAC,UAAU,GAAG,6BAA6B;AACpF,QAAQ,cAAc,EAAE,WAAW;AACnC,UAAU,IAAI,MAAM,CAAC,QAAQ,CAAC,oBAAoB,EAAE,EAAE,UAAU,EAAE,SAAS,CAAC,UAAU,EAAE,CAAC,EAAE;AAC3F,YAAY,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;AAC3B,WAAW;AACX,SAAS;AACT,OAAO,CAAC;AACR,MAAM,MAAM,YAAY,GAAG,WAAW;AACtC,QAAQ,OAAO,cAAc,CAAC,qCAAqC,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;AACpF,OAAO,CAAC;AACR,MAAM,wBAAwB,CAAC,OAAO,CAAC;AACvC,QAAQ,MAAM,EAAE,mBAAmB,GAAG,SAAS,CAAC,UAAU,GAAG,cAAc,GAAG,SAAS,CAAC,WAAW,GAAG,GAAG;AACzG,QAAQ,UAAU,EAAE,YAAY,GAAG,SAAS,CAAC,UAAU,GAAG,cAAc,GAAG,SAAS,CAAC,WAAW;AAChG,QAAQ,OAAO,EAAE,SAAS,CAAC,OAAO;AAClC,QAAQ,iBAAiB,EAAE,WAAW;AACtC,QAAQ,YAAY;AACpB,OAAO,CAAC,CAAC;AACT,KAAK,CAAC;AACN,IAAI,IAAI,CAAC,cAAc,GAAG,SAAS,cAAc,GAAG;AACpD,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC;AACxC,MAAM,MAAM,WAAW,GAAG;AAC1B,QAAQ,WAAW,EAAE,GAAG;AACxB,QAAQ,KAAK,EAAE,YAAY,GAAG,SAAS,CAAC,UAAU;AAClD,OAAO,CAAC;AACR,MAAM,MAAM,YAAY,GAAG,WAAW;AACtC,QAAQ,OAAO,cAAc,CAAC,cAAc,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;AAC7D,OAAO,CAAC;AACR,MAAM,wBAAwB,CAAC,OAAO,CAAC;AACvC,QAAQ,MAAM,EAAE,gBAAgB,GAAG,SAAS,CAAC,UAAU,GAAG,GAAG;AAC7D,QAAQ,UAAU,EAAE,SAAS,GAAG,SAAS,CAAC,UAAU;AACpD,QAAQ,OAAO,EAAE,SAAS,CAAC,OAAO;AAClC,QAAQ,iBAAiB,EAAE,WAAW;AACtC,QAAQ,YAAY;AACpB,OAAO,CAAC,CAAC;AACT,KAAK,CAAC;AACN,IAAI,IAAI,CAAC,gCAAgC,GAAG,SAAS,gCAAgC,GAAG;AACxF,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC;AACxC,MAAM,MAAM,iBAAiB,GAAG,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACtE,MAAM,MAAM,WAAW,GAAG;AAC1B,QAAQ,WAAW,EAAE,GAAG;AACxB,QAAQ,KAAK,EAAE,cAAc,GAAG,SAAS,CAAC,UAAU,GAAG,QAAQ,GAAG,iBAAiB;AACnF,OAAO,CAAC;AACR,MAAM,MAAM,YAAY,GAAG,WAAW;AACtC,QAAQ,OAAO,cAAc,CAAC,gCAAgC,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;AAC/E,OAAO,CAAC;AACR,MAAM,wBAAwB,CAAC,OAAO,CAAC;AACvC,QAAQ,MAAM,EAAE,kBAAkB,GAAG,SAAS,CAAC,UAAU,GAAG,QAAQ,GAAG,iBAAiB,GAAG,GAAG;AAC9F,QAAQ,UAAU,EAAE,WAAW,GAAG,SAAS,CAAC,UAAU;AACtD,QAAQ,OAAO,EAAE,SAAS,CAAC,OAAO;AAClC,QAAQ,iBAAiB,EAAE,WAAW;AACtC,QAAQ,YAAY;AACpB,OAAO,CAAC,CAAC;AACT,KAAK,CAAC;AACN,IAAI,IAAI,CAAC,kCAAkC,GAAG,SAAS,kCAAkC,GAAG;AAC5F,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC;AACxC,MAAM,MAAM,iBAAiB,GAAG,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACtE,MAAM,MAAM,WAAW,GAAG;AAC1B,QAAQ,WAAW,EAAE,GAAG;AACxB,QAAQ,KAAK,EAAE,gBAAgB,GAAG,SAAS,CAAC,UAAU,GAAG,QAAQ,GAAG,iBAAiB;AACrF,OAAO,CAAC;AACR,MAAM,MAAM,YAAY,GAAG,WAAW;AACtC,QAAQ,OAAO,cAAc,CAAC,kCAAkC,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;AACjF,OAAO,CAAC;AACR,MAAM,wBAAwB,CAAC,OAAO,CAAC;AACvC,QAAQ,MAAM,EAAE,oBAAoB,GAAG,SAAS,CAAC,UAAU,GAAG,QAAQ,GAAG,iBAAiB,GAAG,GAAG;AAChG,QAAQ,UAAU,EAAE,aAAa,GAAG,SAAS,CAAC,UAAU;AACxD,QAAQ,OAAO,EAAE,SAAS,CAAC,OAAO;AAClC,QAAQ,iBAAiB,EAAE,WAAW;AACtC,QAAQ,YAAY;AACpB,OAAO,CAAC,CAAC;AACT,KAAK,CAAC;AACN,IAAI,IAAI,CAAC,yBAAyB,GAAG,SAAS,yBAAyB,GAAG;AAC1E,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC;AACxC,MAAM,MAAM,WAAW,GAAG;AAC1B,QAAQ,WAAW,EAAE,GAAG;AACxB,QAAQ,KAAK,EAAE,WAAW,GAAG,SAAS,CAAC,UAAU,GAAG,eAAe;AACnE,OAAO,CAAC;AACR,MAAM,MAAM,YAAY,GAAG,WAAW;AACtC,QAAQ,OAAO,cAAc,CAAC,yBAAyB,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;AACxE,OAAO,CAAC;AACR,MAAM,wBAAwB,CAAC,OAAO,CAAC;AACvC,QAAQ,MAAM,EAAE,gBAAgB,GAAG,SAAS,CAAC,UAAU,GAAG,gBAAgB;AAC1E,QAAQ,UAAU,EAAE,SAAS,GAAG,SAAS,CAAC,UAAU;AACpD,QAAQ,OAAO,EAAE,SAAS,CAAC,OAAO;AAClC,QAAQ,iBAAiB,EAAE,WAAW;AACtC,QAAQ,YAAY;AACpB,OAAO,CAAC,CAAC;AACT,KAAK,CAAC;AACN,IAAI,IAAI,CAAC,0BAA0B,GAAG,SAAS,0BAA0B,GAAG;AAC5E,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC;AACxC,MAAM,MAAM,WAAW,GAAG;AAC1B,QAAQ,WAAW,EAAE,GAAG;AACxB,QAAQ,KAAK,EAAE,YAAY,GAAG,SAAS,CAAC,UAAU,GAAG,eAAe;AACpE,OAAO,CAAC;AACR,MAAM,MAAM,YAAY,GAAG,WAAW;AACtC,QAAQ,OAAO,cAAc,CAAC,0BAA0B,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;AACzE,OAAO,CAAC;AACR,MAAM,wBAAwB,CAAC,OAAO,CAAC;AACvC,QAAQ,MAAM,EAAE,iBAAiB,GAAG,SAAS,CAAC,UAAU,GAAG,gBAAgB;AAC3E,QAAQ,UAAU,EAAE,UAAU,GAAG,SAAS,CAAC,UAAU;AACrD,QAAQ,OAAO,EAAE,SAAS,CAAC,OAAO;AAClC,QAAQ,iBAAiB,EAAE,WAAW;AACtC,QAAQ,YAAY;AACpB,OAAO,CAAC,CAAC;AACT,KAAK,CAAC;AACN,IAAI,IAAI,CAAC,cAAc,GAAG,SAAS,cAAc,CAAC,kBAAkB,EAAE,KAAK,EAAE;AAC7E,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC;AACxC,MAAM,OAAO,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,MAAM,EAAE;AACpD,QAAQ,OAAO,MAAM,CAAC,IAAI,KAAK,kBAAkB,IAAI,MAAM,CAAC,KAAK,KAAK,KAAK,CAAC;AAC5E,OAAO,CAAC,CAAC;AACT,KAAK,CAAC;AACN,IAAI,MAAM,UAAU,GAAG,GAAG,CAAC,YAAY,GAAG,gBAAgB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,EAAE,EAAE,GAAG,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;AACpJ,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM;AAC1B,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AACpD,QAAQ,GAAG,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;AAC7D,OAAO;AACP,KAAK,CAAC,CAAC;AACP,IAAI,MAAM,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;AACtC,GAAG;AACH,CAAC,CAAC;;AC7SF,MAAM,6BAA6B,GAAG,cAAc,KAAK,CAAC,SAAS,CAAC;AACpE,EAAE,WAAW,CAAC,KAAK,EAAE;AACrB,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;AACjB,IAAI,IAAI,CAAC,MAAM,GAAG,MAAM;AACxB,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;AACnB,MAAM,MAAM,QAAQ,GAAG,qBAAqB,CAAC,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;AAC/E,MAAM,aAAa,CAAC,YAAY,CAAC,IAAI,CAAC;AACtC,QAAQ,WAAW,EAAE,QAAQ,CAAC,6BAA6B;AAC3D,QAAQ,WAAW,EAAE,eAAe;AACpC,QAAQ,UAAU,EAAE,CAAC,EAAE,QAAQ,CAAC,4BAA4B,CAAC,QAAQ,CAAC;AACtE,QAAQ,IAAI,EAAE,IAAI;AAClB,QAAQ,OAAO,EAAE;AACjB,UAAU,WAAW,EAAE,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG;AAC3C,UAAU,YAAY,EAAE,MAAM,IAAI;AAClC,UAAU,KAAK,EAAE,MAAM,IAAI;AAC3B,UAAU,iBAAiB,EAAE,MAAM,KAAK;AACxC,UAAU,gBAAgB,EAAE,MAAM,IAAI,CAAC,KAAK,CAAC,cAAc;AAC3D,SAAS;AACT,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM;AAC5B,OAAO,CAAC,CAAC;AACT,KAAK,CAAC;AACN,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,MAAM,KAAK;AAC7B,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;AACtC,KAAK,CAAC;AACN,IAAI,IAAI,CAAC,KAAK,GAAG;AACjB,MAAM,OAAO,EAAE,sBAAsB;AACrC,MAAM,cAAc,EAAE,sBAAsB,CAAC,CAAC,CAAC;AAC/C,KAAK,CAAC;AACN,GAAG;AACH,EAAE,OAAO,IAAI,CAAC,KAAK,EAAE;AACrB,IAAI,OAAO,UAAU,CAAC,IAAI,CAAC,6BAA6B,EAAE;AAC1D,MAAM,GAAG,KAAK;AACd,MAAM,SAAS,EAAE,wCAAwC;AACzD,KAAK,CAAC,CAAC;AACP,GAAG;AACH,EAAE,cAAc,CAAC,MAAM,EAAE;AACzB,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC,CAAC;AAC9C,GAAG;AACH,EAAE,MAAM,GAAG;AACX,IAAI,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;AACnD,IAAI,uBAAuB,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,kBAAkB,KAAK,CAAC,aAAa,CAAC,UAAU,EAAE;AACrH,MAAM,OAAO,EAAE,IAAI,CAAC,KAAK;AACzB,KAAK,CAAC,kBAAkB,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,kBAAkB,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,8BAA8B,CAAC,CAAC,kBAAkB,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,kBAAkB,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE;AAC1P,MAAM,SAAS,EAAE,YAAY;AAC7B,KAAK,kBAAkB,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE;AAClD,MAAM,SAAS,EAAE,cAAc;AAC/B,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,qBAAqB,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE;AAC1E,MAAM,GAAG,EAAE,MAAM,CAAC,IAAI;AACtB,MAAM,SAAS,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,MAAM,GAAG,QAAQ,GAAG,EAAE,CAAC,CAAC;AACpE,MAAM,OAAO,EAAE,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;AAChD,KAAK,kBAAkB,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE;AACjD,MAAM,SAAS,EAAE,qBAAqB;AACtC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,kBAAkB,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,kBAAkB,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE;AACzI,MAAM,SAAS,EAAE,2BAA2B;AAC5C,KAAK,CAAC,CAAC,CAAC,kBAAkB,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,kBAAkB,KAAK,CAAC,aAAa,CAAC,MAAM,EAAE;AAC9G,MAAM,OAAO,EAAE,IAAI,CAAC,MAAM;AAC1B,KAAK,EAAE,0BAA0B,kBAAkB,KAAK,CAAC,aAAa,CAAC,MAAM,EAAE;AAC/E,MAAM,SAAS,EAAE,mCAAmC;AACpD,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACV,GAAG;AACH,CAAC,CAAC;AACK,IAAI,4BAA4B,GAAG,6BAA6B,CAAC;AACxE,4BAA4B,CAAC,YAAY,GAAG;AAC5C,EAAE,UAAU,EAAE,IAAI;AAClB,EAAE,YAAY,EAAE,IAAI;AACpB,CAAC;;ACpEM,MAAM,qBAAqB,GAAG,QAAQ,CAAC,SAAS,CAAC,KAAK,IAAI;AACjE,EAAE,QAAQ,EAAE,EAAE;AACd,CAAC,CAAC;AACF,IAAI,qBAAqB,EAAE;AAC3B,EAAE,qBAAqB,CAAC,eAAe,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AAC1E;;ACFO,MAAM,2CAA2C,GAAG,0CAA0C,CAAC;AAEtG,MAAM,CAAC,2CAA2C,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,8BAA8B,EAAE;AAChG,EAAE,IAAI;AACN,EAAE,SAAS,EAAE,EAAE;AACf,IAAI,SAAS,qBAAqB,CAAC,YAAY,EAAE;AACjD,MAAM,YAAY,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS,WAAW,EAAE;AAC9D,QAAQ,WAAW,CAAC,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC;AACnD,QAAQ,WAAW,CAAC,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC;AACjD,QAAQ,IAAI,WAAW,CAAC,iBAAiB,EAAE;AAC3C,UAAU,WAAW,CAAC,iBAAiB,GAAG,WAAW,CAAC,iBAAiB,CAAC,GAAG,CAAC,SAAS,UAAU,EAAE;AACjG,YAAY,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC;AACtC,WAAW,CAAC,CAAC;AACb,UAAU,WAAW,CAAC,SAAS,GAAG,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC;AAC9F,SAAS,MAAM;AACf,UAAU,WAAW,CAAC,iBAAiB,GAAG,EAAE,CAAC;AAC7C,SAAS;AACT,OAAO,CAAC,CAAC;AACT,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,YAAY,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;AAC5F,MAAM,YAAY,CAAC,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC;AAChD,MAAM,YAAY,CAAC,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC;AAC9F,MAAM,YAAY,CAAC,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC;AAC9G,MAAM,OAAO,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;AACtC,KAAK;AACL,IAAI,SAAS,6BAA6B,CAAC,YAAY,EAAE;AACzD,MAAM,MAAM,MAAM,GAAG;AACrB,QAAQ,MAAM,EAAE,YAAY,CAAC,MAAM;AACnC,QAAQ,WAAW,EAAE,YAAY,CAAC,OAAO;AACzC,QAAQ,IAAI,EAAE,YAAY,CAAC,IAAI;AAC/B,QAAQ,KAAK,EAAE,YAAY,CAAC,KAAK;AACjC,QAAQ,MAAM,EAAE,YAAY,CAAC,MAAM;AACnC,QAAQ,IAAI,EAAE,YAAY,CAAC,IAAI;AAC/B,QAAQ,MAAM,EAAE,YAAY,CAAC,MAAM;AACnC,QAAQ,MAAM,EAAE,EAAE;AAClB,QAAQ,kBAAkB,EAAE,EAAE;AAC9B,OAAO,CAAC;AACR,MAAM,IAAI,YAAY,CAAC,GAAG,EAAE;AAC5B,QAAQ,MAAM,GAAG,GAAG,YAAY,CAAC,GAAG,CAAC;AACrC,QAAQ,MAAM,CAAC,cAAc,GAAG,GAAG,CAAC,cAAc,CAAC;AACnD,QAAQ,MAAM,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;AAC/B,QAAQ,IAAI,GAAG,CAAC,kBAAkB,EAAE;AACpC,UAAU,MAAM,CAAC,kBAAkB,GAAG,GAAG,CAAC,kBAAkB,CAAC;AAC7D,SAAS;AACT,QAAQ,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;AACnC,QAAQ,IAAI,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,OAAO,KAAK,eAAe,EAAE;AAC5D,UAAU,MAAM,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACrD,SAAS;AACT,OAAO;AACP,MAAM,OAAO,MAAM,CAAC;AACpB,KAAK;AACL,IAAI,SAAS,gCAAgC,CAAC,WAAW,EAAE;AAC3D,MAAM,MAAM,kBAAkB,GAAG,WAAW,CAAC,kBAAkB,CAAC,KAAK,IAAI,qBAAqB,CAAC,QAAQ,CAAC,OAAO,CAAC;AAChH,MAAM,MAAM,aAAa,GAAG,WAAW,CAAC,cAAc,CAAC,KAAK,IAAI,qBAAqB,CAAC,QAAQ,CAAC,MAAM,CAAC;AACtG,MAAM,OAAO;AACb,QAAQ,KAAK,EAAE,EAAE;AACjB,QAAQ,MAAM,EAAE,UAAU;AAC1B,QAAQ,WAAW,EAAE,kBAAkB;AACvC,QAAQ,MAAM,EAAE,aAAa;AAC7B,QAAQ,aAAa,EAAE,OAAO;AAC9B,QAAQ,IAAI,EAAE,IAAI;AAClB,QAAQ,MAAM,EAAE,IAAI;AACpB,QAAQ,MAAM,EAAE;AAChB,UAAU;AACV,YAAY,SAAS,EAAE,EAAE;AACzB,YAAY,aAAa,EAAE,MAAM;AACjC,YAAY,SAAS,EAAE,IAAI;AAC3B,YAAY,SAAS,EAAE,GAAG;AAC1B,YAAY,aAAa,EAAE,EAAE;AAC7B,YAAY,kBAAkB,EAAE,CAAC;AACjC,YAAY,OAAO,EAAE,GAAG;AACxB,WAAW;AACX,SAAS;AACT,QAAQ,cAAc,EAAE,EAAE;AAC1B,QAAQ,kBAAkB,EAAE;AAC5B,UAAU;AACV,YAAY,QAAQ,EAAE,EAAE;AACxB,YAAY,QAAQ,EAAE,MAAM;AAC5B,YAAY,YAAY,EAAE,EAAE;AAC5B,YAAY,WAAW,EAAE,EAAE;AAC3B,YAAY,SAAS,EAAE,EAAE;AACzB,YAAY,WAAW,EAAE,MAAM;AAC/B,YAAY,WAAW,EAAE,CAAC;AAC1B,WAAW;AACX,SAAS;AACT,QAAQ,GAAG,EAAE,aAAa;AAC1B,OAAO,CAAC;AACR,KAAK;AACL,IAAI,OAAO;AACX,MAAM,qBAAqB;AAC3B,MAAM,6BAA6B;AACnC,MAAM,gCAAgC;AACtC,KAAK,CAAC;AACN,GAAG;AACH,CAAC,CAAC;;AC3FK,MAAM,0DAA0D,GAAG;AAE1E,MAAM,CAAC,0DAA0D,EAAE;AACnE;AACA,EAAE,2CAA2C;AAC7C,CAAC,CAAC,CAAC,UAAU,CAAC,6BAA6B,EAAE;AAC7C,EAAE,QAAQ;AACV,EAAE,mBAAmB;AACrB,EAAE,QAAQ;AACV,EAAE,8BAA8B;AAChC,EAAE,aAAa;AACf,EAAE;AACF,EAAE,OAAO;AACT,EAAE;AACF,EAAE,SAAS,MAAM,EAAE;AACnB,IAAI,MAAM,IAAI;AACd,IAAI,MAAM,CAAC;AACX,IAAI,MAAM;AACV,MAAM,QAAQ,EAAE;AAChB,MAAM;AACN,MAAM;AACN,MAAM,gBAAgB;AACtB,KAAK,CAAC;AACN,IAAI,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;AACzB,IAAI,MAAM,CAAC;AACX,IAAI,MAAM,CAAC,KAAK;AAChB,IAAI,MAAM;AACV,MAAM,cAAc;AACpB;AACA,KAAK,CAAC;AACN;AACA,IAAI,SAAS;AACb;AACA,QAAQ,OAAO;AACf,OAAO;AACP,MAAM;AACN,MAAM,MAAM;AACZ,QAAQ,IAAI,EAAE,MAAM,CAAC;AACrB;AACA;AACA,QAAQ,QAAQ,EAAE,OAAO;AACzB,OAAO,CAAC;AACR,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,wBAAwB,CAAC,EAAE;AACtD;AACA,OAAO,MAAM;AACb,QAAQ,MAAM,CAAC,EAAE,CAAC;AAClB,OAAO;AACP,KAAK;AACL;AACA,MAAM,WAAW,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;AAC1C;AACA,KAAK;AACL,IAAI,MAAM,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC;AACzC,MAAM,WAAW;AACjB,MAAM,KAAK,EAAE,CAAC;AACd,MAAM;AACN,MAAM,cAAc;AACpB,KAAK,CAAC,CAAC;AACP,IAAI,SAAS,oBAAoB,GAAG;AACpC,MAAM,cAAc,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC;AAChD,QAAQ,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACnC,QAAQ,MAAM,CAAC,KAAK,CAAC;AACrB,QAAQ;AACR;AACA,KAAK;AACL,IAAI,SAAS,oBAAoB,GAAG;AACpC,MAAM,IAAI;AACV,QAAQ,MAAM,CAAC,YAAY,GAAG,4BAA4B,CAAC;AAC3D;AACA;AACA;AACA,UAAU,MAAM,CAAC,YAAY,CAAC;AAC9B,UAAU,OAAO,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC;AAC1C,SAAS;AACT;AACA;AACA,OAAO;AACP,MAAM,IAAI,KAAK,EAAE;AACjB,QAAQ,uBAAuB,EAAE,CAAC;AAClC,QAAQ,oBAAoB,EAAE,CAAC;AAC/B,OAAO;AACP,KAAK;AACL;AACA,MAAM,MAAM,OAAO,GAAG,MAAM,CAAC;AAC7B,MAAM,MAAM,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC;AAChD,MAAM,MAAM;AACZ,MAAM,WAAW,CAAC,aAAa,CAAC;AAChC,QAAQ,WAAW,CAAC;AACpB;AACA;AACA;AACA,WAAW;AACX,SAAS,CAAC,CAAC;AACX,QAAQ,MAAM,CAAC,yBAAyB,GAAG,4BAA4B,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;AACtF,OAAO,CAAC,CAAC;AACT,KAAK;AACL,IAAI,oBAAoB,EAAE,CAAC;AAC3B,IAAI,IAAI,CAAC,uBAAuB,GAAG,WAAW;AAC9C,MAAM,OAAO,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;AAC1C,KAAK,CAAC;AACN,IAAI,IAAI,CAAC;AACT,MAAM,MAAM,CAAC,YAAY,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;AAChD,KAAK,CAAC;AACN,IAAI,IAAI,CAAC,OAAO;AAChB,MAAM,MAAM,GAAG,GAAG,MAAM,CAAC;AACzB,MAAM,MAAM,OAAO,GAAG,CAAC;AACvB,MAAM;AACN,KAAK;AACL;AACA,MAAM,cAAc,CAAC;AACrB,QAAQ,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;AACjC,QAAQ,IAAI,CAAC,aAAa,EAAE,CAAC;AAC7B;AACA,KAAK,CAAC;AACN,IAAI,IAAI,CAAC;AACT,MAAM,uBAAuB,EAAE,CAAC;AAChC,MAAM,IAAI,CAAC,UAAU;AACrB,MAAM,IAAI,CAAC;AACX,KAAK,CAAC;AACN,IAAI,IAAI,CAAC,WAAW,GAAG,WAAW;AAClC,MAAM,MAAM,OAAO,GAAG,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC;AACtD,MAAM,MAAM,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC;AAChD,MAAM,MAAM,CAAC,YAAY,CAAC,YAAY,GAAG,IAAI,CAAC;AAC9C,MAAM,MAAM,CAAC;AACb,MAAM,MAAM,CAAC;AACb;AACA,MAAM,aAAa,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,SAAS,KAAK,EAAE;AACxD,QAAQ;AACR;AACA;AACA,cAAc,IAAI,CAAC;AACnB;AACA,WAAW,CAAC,CAAC;AACb,SAAS;AACT,OAAO,CAAC,CAAC;AACT,MAAM;AACN,KAAK,CAAC;AACN;AACA,MAAM,MAAM,CAAC,YAAY,CAAC;AAC1B,MAAM,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC;AACxC,MAAM;AACN;AACA,IAAI,IAAI,CAAC,mBAAmB,GAAG;AAC/B,MAAM,MAAM,CAAC,YAAY,CAAC,IAAI,GAAG,IAAI,CAAC;AACtC,MAAM,MAAM,CAAC,YAAY,CAAC,iBAAiB,GAAG,IAAI,CAAC,aAAa,CAAC;AACjE,MAAM,MAAM,CAAC,YAAY,CAAC;AAC1B,MAAM;AACN;AACA,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE;AACxB,QAAQ,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,MAAM,EAAE;AAC1C,UAAU,IAAI,SAAS,GAAG,IAAI,CAAC;AAC/B,UAAU,IAAI,MAAM,CAAC,OAAO;AAC5B;AACA;AACA;AACA,eAAe;AACf,aAAa,CAAC,CAAC;AACf,WAAW;AACX,UAAU,IAAI,SAAS,EAAE;AACzB;AACA;AACA,SAAS,CAAC,CAAC;AACX,OAAO;AACP,KAAK,CAAC;AACN,IAAI,IAAI,CAAC,cAAc,GAAG,SAAS,KAAK,EAAE;AAC1C,MAAM,MAAM,CAAC,YAAY,CAAC;AAC1B,KAAK,CAAC;AACN,IAAI,IAAI,CAAC,WAAW,GAAG;AACvB;AACA,KAAK,CAAC;AACN,IAAI,IAAI,CAAC,MAAM,GAAG;AAClB,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,QAAQ;AACzC,MAAM,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,WAAW;AAC3C,QAAQ,MAAM,MAAM,GAAG;AACvB,UAAU;AACV,UAAU;AACV;AACA;AACA;AACA,SAAS,CAAC;AACV;AACA;AACA,UAAU,MAAM,CAAC,YAAY,CAAC;AAC9B,SAAS;AACT,QAAQ,IAAI,MAAM,CAAC,YAAY,CAAC;AAChC,UAAU,MAAM,CAAC,YAAY,CAAC;AAC9B;AACA;AACA,QAAQ,MAAM,SAAS,GAAG,KAAK,GAAG,QAAQ,CAAC;AAC3C,QAAQ,MAAM,YAAY,GAAG,KAAK,GAAG;AACrC,QAAQ,MAAM,CAAC,YAAY,CAAC,IAAI,GAAG,oBAAoB,CAAC;AACxD,QAAQ,MAAM,CAAC,YAAY,CAAC,gBAAgB,GAAG;AAC/C,QAAQ,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI;AACrC,UAAU,MAAM,CAAC,YAAY,CAAC;AAC9B,SAAS;AACT,QAAQ,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACtC,QAAQ,MAAM,CAAC,YAAY,CAAC;AAC5B,UAAU,IAAI,CAAC,QAAQ,GAAG;AAC1B,UAAU,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;AACrC,SAAS,CAAC,CAAC;AACX,QAAQ,IAAI,MAAM,CAAC,YAAY,CAAC;AAChC,UAAU;AACV,SAAS;AACT,QAAQ;AACR,OAAO,CAAC,CAAC;AACT,KAAK,CAAC;AACN,IAAI,IAAI,CAAC;AACT,MAAM;AACN,KAAK,CAAC;AACN,GAAG;AACH;AACA,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;AACjC,EAAE,aAAa,CAAC,GAAG,CAAC;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtQO,MAAM;AAEb;AACA,EAAE,oBAAoB;AACtB,EAAE,kBAAkB;AACpB,EAAE,qBAAqB;AACvB,EAAE;AACF,CAAC,CAAC,CAAC,UAAU,CAAC,8BAA8B,EAAE;AAC9C,EAAE,QAAQ;AACV,EAAE,QAAQ;AACV,EAAE,mBAAmB;AACrB,EAAE,WAAW;AACb,EAAE;AACF,EAAE,KAAK;AACP,EAAE;AACF,EAAE;AACF,EAAE,IAAI;AACN,EAAE,SAAS;AACX,IAAI,MAAM,CAAC,KAAK,GAAG;AACnB,MAAM;AACN,KAAK,CAAC;AACN,IAAI,MAAM,CAAC,cAAc;AACzB,IAAI;AACJ,MAAM,MAAM,CAAC;AACb,QAAQ;AACR,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AACZ,MAAM,IAAI,MAAM,CAAC;AACjB,QAAQ,MAAM;AACd,QAAQ,OAAO;AACf,UAAU;AACV,UAAU,MAAM;AAChB,UAAU,MAAM,QAAQ;AACxB;AACA;AACA,UAAU,IAAI,QAAQ;AACtB,YAAY,MAAM,CAAC;AACnB;AACA;AACA,cAAc,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC;AAC7D;AACA,gBAAgB,IAAI,KAAK,EAAE;AAC3B,kBAAkB,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC7C,iBAAiB;AACjB,eAAe,CAAC,CAAC;AACjB,cAAc,MAAM,CAAC,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;AAC/C,aAAa;AACb,YAAY;AACZ,cAAc;AACd;AACA,gBAAgB,MAAM,EAAE,GAAG,CAAC,CAAC;AAC7B,gBAAgB,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAC1E,eAAe,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC3B,aAAa;AACb,WAAW;AACX,SAAS,CAAC,CAAC;AACX,OAAO;AACP;AACA,QAAQ,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;AACvB,OAAO;AACP,MAAM,OAAO,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3B;AACA,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,MAAM;AACrD,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;AAC/B,QAAQ,GAAG,CAAC;AACZ;AACA,KAAK,CAAC,CAAC;AACP,IAAI,IAAI,CAAC,gBAAgB,GAAG,SAAS;AACrC;AACA,QAAQ,WAAW,EAAE;AACrB;AACA,QAAQ,IAAI,EAAE,IAAI;AAClB,QAAQ,OAAO,EAAE;AACjB,UAAU,WAAW,EAAE,WAAW;AAClC,YAAY,OAAO,GAAG,CAAC;AACvB,WAAW;AACX,UAAU,YAAY,EAAE,WAAW;AACnC,YAAY,OAAO,OAAO,CAAC,IAAI,CAAC;AAChC,WAAW;AACX,UAAU,KAAK,EAAE,WAAW;AAC5B,YAAY,OAAO,KAAK,CAAC;AACzB,WAAW;AACX,UAAU;AACV,YAAY,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,YAAY,CAAC,gBAAgB,EAAE,CAAC;AAClE,WAAW;AACX;AACA,OAAO,CAAC,CAAC;AACT,KAAK,CAAC;AACN,IAAI,IAAI,CAAC,kBAAkB,GAAG,SAAS,kBAAkB;AACzD,MAAM,IAAI,MAAM,CAAC,YAAY;AAC7B,QAAQ,OAAO;AACf,OAAO;AACP,MAAM,MAAM,WAAW,GAAG;AAC1B,QAAQ,WAAW;AACnB,QAAQ,KAAK,EAAE,WAAW,GAAG;AAC7B,OAAO,CAAC;AACR,MAAM,MAAM;AACZ,QAAQ;AACR,QAAQ;AACR,QAAQ,gBAAgB,EAAE,MAAM,CAAC;AACjC,QAAQ,WAAW,EAAE;AACrB,QAAQ;AACR;AACA,OAAO,CAAC;AACR,MAAM;AACN;AACA,QAAQ;AACR,QAAQ;AACR,QAAQ,OAAO,EAAE,YAAY,CAAC;AAC9B,QAAQ;AACR,QAAQ,YAAY;AACpB,OAAO,CAAC,CAAC;AACT,KAAK,CAAC;AACN,GAAG;AACH,CAAC,CAAC,CAAC;AACH,MAAM,CAAC;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC,CAAC;AACH;;AC1JA,WAAe;;ACIR,MAAM,0DAA0D,GAAG,iEAAiE,CAAC;AAE5I,MAAM,CAAC,0DAA0D,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,UAAU,CAAC,+BAA+B,EAAE;AACrI,EAAE,QAAQ;AACV,EAAE,cAAc;AAChB,EAAE,gCAAgC;AAClC,EAAE,cAAc;AAChB,EAAE,SAAS,MAAM,EAAE,YAAY,EAAE,8BAA8B,EAAE,YAAY,EAAE;AAC/E,IAAI,MAAM,CAAC,cAAc,GAAG,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;AACzD,IAAI,MAAM,WAAW,GAAG,MAAM;AAC9B,MAAM,MAAM,CAAC,cAAc,GAAG,YAAY,CAAC,OAAO,CAAC;AACnD,MAAM,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,iBAAiB,IAAI,OAAO,CAAC;AAC1E,MAAM,MAAM,CAAC,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,IAAI,OAAO,QAAQ,CAAC,OAAO,CAAC,aAAa,KAAK,UAAU,IAAI,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AACpK,MAAM,MAAM,CAAC,eAAe,GAAG,YAAY,CAAC,MAAM,CAAC,SAAS,IAAI,QAAQ,CAAC,cAAc,GAAG,QAAQ,CAAC,cAAc,GAAG,QAAQ,CAAC,eAAe,CAAC,CAAC;AAC9I,KAAK,CAAC;AACN,IAAI,MAAM,UAAU,GAAG,MAAM,8BAA8B,CAAC,kBAAkB,CAAC,MAAM,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;AACnH,IAAI,UAAU,EAAE,CAAC;AACjB,IAAI,MAAM,CAAC,GAAG,CAAC,qBAAqB,EAAE,UAAU,CAAC,CAAC;AAClD,GAAG;AACH,CAAC,CAAC;;ACpBK,MAAM,yCAAyC,GAAG,yCAAyC,CAAC;AAEnG,MAAM,CAAC,yCAAyC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,6BAA6B,EAAE,WAAW;AACxG,EAAE,SAAS,oBAAoB,CAAC,WAAW,EAAE;AAC7C,IAAI,OAAO,WAAW,CAAC;AACvB,GAAG;AACH,EAAE,SAAS,0BAA0B,CAAC,OAAO,EAAE,aAAa,EAAE;AAC9D,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,qBAAqB,CAAC,QAAQ,CAAC,EAAE;AAC/D,MAAM,aAAa,CAAC,qBAAqB,CAAC,QAAQ,GAAG,OAAO,CAAC,qBAAqB,CAAC,QAAQ,CAAC;AAC5F,KAAK,MAAM;AACX,MAAM,MAAM,YAAY,GAAG,OAAO,CAAC,qBAAqB,CAAC,QAAQ,CAAC;AAClE,MAAM,IAAI,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AACtC,QAAQ,aAAa,CAAC,qBAAqB,CAAC,QAAQ,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC/E,OAAO,MAAM,IAAI,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AAC7C,QAAQ,aAAa,CAAC,qBAAqB,CAAC,QAAQ,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC/E,OAAO,MAAM;AACb,QAAQ,aAAa,CAAC,qBAAqB,CAAC,QAAQ,GAAG,CAAC,YAAY,CAAC,CAAC;AACtE,OAAO;AACP,MAAM,aAAa,CAAC,qBAAqB,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE;AAC9E,QAAQ,aAAa,CAAC,qBAAqB,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AACvE,OAAO,CAAC,CAAC;AACT,KAAK;AACL,GAAG;AACH,EAAE,SAAS,8CAA8C,CAAC,OAAO,EAAE;AACnE,IAAI,IAAI,SAAS,CAAC;AAClB,IAAI,IAAI,OAAO,CAAC,SAAS,CAAC,IAAI,KAAK,cAAc,IAAI,OAAO,CAAC,SAAS,CAAC,IAAI,KAAK,gBAAgB,EAAE;AAClG,MAAM,SAAS,GAAG;AAClB,QAAQ,SAAS,EAAE,EAAE;AACrB,QAAQ,QAAQ,EAAE,MAAM;AACxB,QAAQ,SAAS,EAAE,EAAE;AACrB,QAAQ,KAAK,EAAE,EAAE;AACjB,QAAQ,GAAG,EAAE,EAAE;AACf,QAAQ,OAAO,EAAE,EAAE;AACnB,QAAQ,MAAM,EAAE,OAAO,CAAC,MAAM;AAC9B,QAAQ,GAAG,EAAE,EAAE;AACf,QAAQ,MAAM,EAAE,EAAE;AAClB,OAAO,CAAC;AACR,KAAK,MAAM;AACX,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC;AACxC,KAAK;AACL,IAAI,MAAM,aAAa,GAAG;AAC1B,MAAM,IAAI,EAAE,OAAO,CAAC,WAAW;AAC/B,MAAM,aAAa,EAAE,OAAO,CAAC,gBAAgB;AAC7C,MAAM,WAAW,EAAE,OAAO,CAAC,WAAW;AACtC,MAAM,KAAK,EAAE,OAAO,CAAC,KAAK;AAC1B,MAAM,QAAQ,EAAE,OAAO,CAAC,QAAQ;AAChC,MAAM,QAAQ,EAAE;AAChB,QAAQ,SAAS,EAAE,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,SAAS,GAAG,IAAI;AACvE,OAAO;AACP,MAAM,SAAS,EAAE,OAAO,CAAC,SAAS;AAClC,MAAM,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;AAChD,MAAM,qBAAqB,EAAE,OAAO,CAAC,qBAAqB;AAC1D,MAAM,uBAAuB,EAAE,OAAO,CAAC,uBAAuB;AAC9D,MAAM,iBAAiB,EAAE,OAAO,CAAC,QAAQ,KAAK,UAAU,GAAG,IAAI,GAAG,IAAI;AACtE,MAAM,oBAAoB,EAAE,OAAO,CAAC,QAAQ,KAAK,UAAU,GAAG,IAAI,GAAG,IAAI;AACzE,MAAM,MAAM,EAAE,OAAO,CAAC,eAAe;AACrC,MAAM,eAAe,EAAE,OAAO,CAAC,eAAe;AAC9C,MAAM,cAAc,EAAE,OAAO,CAAC,cAAc;AAC5C,MAAM,KAAK,EAAE,OAAO,CAAC,KAAK;AAC1B,MAAM,OAAO,EAAE,OAAO,CAAC,WAAW;AAClC,MAAM,gBAAgB,EAAE,OAAO;AAC/B,MAAM,IAAI,EAAE,OAAO,CAAC,IAAI;AACxB,MAAM,iBAAiB,EAAE,OAAO,CAAC,YAAY,CAAC,aAAa;AAC3D,MAAM,MAAM,EAAE,OAAO,CAAC,MAAM;AAC5B,MAAM,iBAAiB,EAAE,KAAK;AAC9B,MAAM,QAAQ,EAAE;AAChB,QAAQ,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ;AACjC,QAAQ,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ;AACjC,OAAO;AACP,MAAM,WAAW,EAAE,OAAO,CAAC,WAAW;AACtC,MAAM,MAAM,EAAE,OAAO,CAAC,MAAM;AAC5B,MAAM,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;AAClD,MAAM,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;AAChD,MAAM,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;AAChD,MAAM,IAAI,EAAE,aAAa;AACzB,MAAM,aAAa,EAAE,QAAQ;AAC7B,MAAM,IAAI,EAAE,mBAAmB;AAC/B,MAAM,GAAG,EAAE;AACX,QAAQ,IAAI,EAAE,iBAAiB;AAC/B,QAAQ,IAAI,EAAE,UAAU;AACxB,QAAQ,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ;AACtC,OAAO;AACP,MAAM,YAAY,EAAE,OAAO,CAAC,YAAY;AACxC,MAAM,SAAS,EAAE,OAAO,CAAC,SAAS;AAClC,MAAM,sBAAsB,EAAE,OAAO,CAAC,sBAAsB;AAC5D,MAAM,SAAS,EAAE,OAAO,CAAC,SAAS;AAClC,MAAM,QAAQ,EAAE;AAChB,QAAQ,UAAU,EAAE,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,UAAU,GAAG,IAAI;AACzE,OAAO;AACP,MAAM,qBAAqB,EAAE;AAC7B,QAAQ,QAAQ,EAAE,IAAI;AACtB,QAAQ,gBAAgB,EAAE,EAAE;AAC5B,OAAO;AACP,MAAM,YAAY,EAAE,OAAO,CAAC,YAAY;AACxC,MAAM,KAAK,EAAE,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC,KAAK,GAAG,EAAE;AACtD,MAAM,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;AAChD,KAAK,CAAC;AACN,IAAI,IAAI,OAAO,CAAC,KAAK,IAAI,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,QAAQ,IAAI,KAAK,EAAE;AAClE,MAAM,aAAa,CAAC,KAAK,GAAG,SAAS,CAAC;AACtC,KAAK;AACL,IAAI,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,WAAW,EAAE;AAC9C,MAAM,aAAa,CAAC,IAAI,GAAG,aAAa,CAAC,IAAI,GAAG,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC;AACpE,KAAK;AACL,IAAI,IAAI,OAAO,OAAO,CAAC,eAAe,KAAK,WAAW,EAAE;AACxD,MAAM,aAAa,CAAC,IAAI,GAAG,aAAa,CAAC,IAAI,GAAG,GAAG,GAAG,OAAO,CAAC,eAAe,CAAC;AAC9E,KAAK;AACL,IAAI,IAAI,OAAO,OAAO,CAAC,qBAAqB,KAAK,WAAW,EAAE;AAC9D,MAAM,aAAa,CAAC,qBAAqB,CAAC,gBAAgB,GAAG,OAAO,CAAC,qBAAqB,CAAC,gBAAgB,CAAC;AAC5G,MAAM,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,qBAAqB,CAAC,QAAQ,CAAC,EAAE;AAC9D,QAAQ,0BAA0B,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;AAC3D,OAAO;AACP,KAAK;AACL,IAAI,IAAI,OAAO,CAAC,YAAY,EAAE;AAC9B,MAAM,MAAM,KAAK,GAAG,OAAO,CAAC,YAAY,CAAC;AACzC,MAAM,aAAa,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;AACxD,MAAM,aAAa,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC;AACrC,MAAM,aAAa,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;AACtE,KAAK;AACL,IAAI,aAAa,CAAC,8BAA8B,GAAG,EAAE,CAAC;AACtD,IAAI,OAAO,aAAa,CAAC;AACzB,GAAG;AACH,EAAE,OAAO;AACT,IAAI,8CAA8C;AAClD,IAAI,oBAAoB;AACxB,IAAI,0BAA0B;AAC9B,GAAG,CAAC;AACJ,CAAC,CAAC;;AC3HK,MAAM,6DAA6D,GAAG,mDAAmD,CAAC;AAEjI,OAAO,CAAC,MAAM,CAAC,6DAA6D,EAAE;AAC9E,EAAE,wBAAwB;AAC1B,EAAE,yCAAyC;AAC3C,CAAC,CAAC,CAAC,OAAO,CAAC,gCAAgC,EAAE;AAC7C,EAAE,IAAI;AACN,EAAE,kBAAkB;AACpB,EAAE,6BAA6B;AAC/B,EAAE,SAAS,EAAE,EAAE,gBAAgB,EAAE,2BAA2B,EAAE;AAC9D,IAAI,SAAS,0BAA0B,CAAC,WAAW,EAAE,QAAQ,EAAE;AAC/D,MAAM,QAAQ,GAAG,QAAQ,IAAI,EAAE,CAAC;AAChC,MAAM,MAAM,kBAAkB,GAAG,QAAQ,CAAC,OAAO,IAAI,WAAW,CAAC,kBAAkB,CAAC,KAAK,CAAC;AAC1F,MAAM,MAAM,aAAa,GAAG,QAAQ,CAAC,MAAM,IAAI,WAAW,CAAC,cAAc,CAAC,KAAK,CAAC;AAChF,MAAM,OAAO,gBAAgB,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,MAAM,EAAE;AACtF,QAAQ,OAAO;AACf,UAAU,WAAW,EAAE,WAAW,CAAC,IAAI;AACvC,UAAU,WAAW,EAAE,kBAAkB;AACzC,UAAU,MAAM,EAAE,aAAa;AAC/B,UAAU,MAAM;AAChB,UAAU,aAAa,EAAE,EAAE;AAC3B,UAAU,mBAAmB,EAAE,EAAE;AACjC,UAAU,QAAQ,EAAE,EAAE;AACtB,UAAU,GAAG,EAAE;AACf,YAAY,QAAQ,EAAE,CAAC;AACvB,WAAW;AACX,UAAU,YAAY,EAAE,KAAK;AAC7B,UAAU,KAAK,EAAE,EAAE;AACnB,UAAU,YAAY,EAAE,EAAE;AAC1B,UAAU,SAAS,EAAE,EAAE;AACvB,UAAU,gBAAgB,EAAE,OAAO;AACnC,UAAU,SAAS,EAAE;AACrB,YAAY,eAAe,EAAE,QAAQ;AACrC,YAAY,iBAAiB,EAAE,IAAI;AACnC,YAAY,oBAAoB,EAAE,KAAK;AACvC,YAAY,iBAAiB,EAAE,IAAI;AACnC,YAAY,iBAAiB,EAAE,IAAI;AACnC,YAAY,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI,QAAQ;AAC3C,YAAY,wBAAwB,EAAE,IAAI;AAC1C,YAAY,uBAAuB,EAAE,KAAK;AAC1C,YAAY,yBAAyB,EAAE,KAAK;AAC5C,YAAY,wBAAwB,EAAE,KAAK;AAC3C,WAAW;AACX,UAAU,gBAAgB,EAAE,KAAK;AACjC,SAAS,CAAC;AACV,OAAO,CAAC,CAAC;AACT,KAAK;AACL,IAAI,SAAS,qCAAqC,GAAG;AACrD,MAAM,OAAO,EAAE,CAAC,IAAI,CAAC;AACrB,QAAQ,SAAS,EAAE;AACnB,UAAU,yBAAyB,EAAE,IAAI;AACzC,SAAS;AACT,OAAO,CAAC,CAAC;AACT,KAAK;AACL,IAAI,SAAS,mCAAmC,CAAC,WAAW,EAAE,WAAW,EAAE,IAAI,EAAE;AACjF,MAAM,IAAI,GAAG,IAAI,IAAI,OAAO,CAAC;AAC7B,MAAM,MAAM,eAAe,GAAG,SAAS,CAAC,oBAAoB,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AAC/E,MAAM,MAAM,OAAO,GAAG;AACtB,QAAQ,WAAW,EAAE,WAAW,CAAC,IAAI;AACrC,QAAQ,QAAQ,EAAE,EAAE;AACpB,QAAQ,KAAK,EAAE,eAAe,CAAC,KAAK;AACpC,QAAQ,eAAe,EAAE,eAAe,CAAC,eAAe;AACxD,QAAQ,WAAW,EAAE,WAAW,CAAC,OAAO;AACxC,QAAQ,aAAa,EAAE,WAAW,CAAC,aAAa;AAChD,QAAQ,eAAe,EAAE,WAAW,CAAC,mBAAmB;AACxD,QAAQ,YAAY,EAAE,WAAW,CAAC,YAAY;AAC9C,QAAQ,cAAc,EAAE,WAAW,CAAC,cAAc;AAClD,QAAQ,gBAAgB,EAAE,WAAW,CAAC,gBAAgB;AACtD,QAAQ,gBAAgB,EAAE,WAAW,CAAC,gBAAgB;AACtD,QAAQ,iBAAiB,EAAE,WAAW,CAAC,iBAAiB;AACxD,QAAQ,MAAM,EAAE,WAAW,CAAC,MAAM;AAClC,QAAQ,IAAI,EAAE,WAAW,CAAC,IAAI;AAC9B,QAAQ,iBAAiB,EAAE,WAAW,CAAC,iBAAiB;AACxD,QAAQ,MAAM,EAAE,WAAW,CAAC,MAAM;AAClC,QAAQ,KAAK,EAAE,WAAW,CAAC,KAAK;AAChC,QAAQ,YAAY,EAAE,WAAW,CAAC,KAAK,IAAI,WAAW,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;AACvE,QAAQ,YAAY,EAAE,EAAE;AACxB,QAAQ,SAAS,EAAE,WAAW,CAAC,SAAS;AACxC,QAAQ,GAAG,EAAE,WAAW,CAAC,GAAG;AAC5B,QAAQ,QAAQ,EAAE;AAClB,UAAU,GAAG,EAAE,WAAW,CAAC,QAAQ,CAAC,GAAG;AACvC,UAAU,GAAG,EAAE,WAAW,CAAC,QAAQ,CAAC,GAAG;AACvC,UAAU,OAAO,EAAE,WAAW,CAAC,QAAQ,CAAC,OAAO;AAC/C,SAAS;AACT,QAAQ,IAAI,EAAE,EAAE;AAChB,QAAQ,YAAY,EAAE,WAAW,CAAC,GAAG,CAAC,IAAI;AAC1C,QAAQ,gBAAgB,EAAE,OAAO;AACjC,QAAQ,MAAM,EAAE;AAChB,UAAU,OAAO,EAAE,WAAW,CAAC,OAAO;AACtC,UAAU,MAAM,EAAE,WAAW,CAAC,MAAM;AACpC,UAAU,eAAe,EAAE,WAAW,CAAC,IAAI;AAC3C,UAAU,OAAO,EAAE,WAAW,CAAC,IAAI;AACnC,SAAS;AACT,QAAQ,SAAS,EAAE;AACnB,UAAU,iBAAiB,EAAE,IAAI;AACjC,UAAU,oBAAoB,EAAE,KAAK;AACrC,UAAU,iBAAiB,EAAE,IAAI;AACjC,UAAU,iBAAiB,EAAE,KAAK;AAClC,UAAU,0BAA0B,EAAE,KAAK;AAC3C,UAAU,IAAI;AACd,UAAU,wBAAwB,EAAE,IAAI;AACxC,SAAS;AACT,QAAQ,gBAAgB,EAAE,WAAW,CAAC,gBAAgB;AACtD,OAAO,CAAC;AACR,MAAM,IAAI,OAAO,WAAW,CAAC,qBAAqB,KAAK,WAAW,EAAE;AACpE,QAAQ,OAAO,CAAC,qBAAqB,GAAG,EAAE,CAAC;AAC3C,QAAQ,OAAO,CAAC,qBAAqB,CAAC,gBAAgB,GAAG,WAAW,CAAC,qBAAqB,CAAC,gBAAgB,CAAC;AAC5G,QAAQ,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,qBAAqB,CAAC,QAAQ,CAAC,EAAE;AACpE,UAAU,2BAA2B,CAAC,0BAA0B,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;AACvF,SAAS;AACT,OAAO;AACP,MAAM,OAAO,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC9B,KAAK;AACL,IAAI,SAAS,mCAAmC,CAAC,WAAW,EAAE,eAAe,EAAE;AAC/E,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;AAC3D,MAAM,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC;AAC5C,MAAM,MAAM,cAAc,GAAG,EAAE,OAAO,EAAE,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;AAC1E,MAAM,OAAO,0BAA0B,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC,IAAI,CAAC,SAAS,OAAO,EAAE;AAC5F,QAAQ,MAAM,SAAS,GAAG;AAC1B,UAAU,qBAAqB,EAAE,IAAI;AACrC,UAAU,iBAAiB,EAAE,IAAI;AACjC,UAAU,IAAI,EAAE,cAAc;AAC9B,UAAU,iBAAiB,EAAE,MAAM;AACnC,UAAU,eAAe,EAAE,eAAe,CAAC,SAAS,CAAC,eAAe;AACpE,UAAU,mBAAmB,EAAE,eAAe,CAAC,SAAS,CAAC,mBAAmB;AAC5E,SAAS,CAAC;AACV,QAAQ,MAAM,aAAa,GAAG;AAC9B,UAAU,MAAM;AAChB,UAAU,WAAW,EAAE,eAAe,CAAC,OAAO;AAC9C,UAAU,SAAS;AACnB,SAAS,CAAC;AACV,QAAQ,IAAI,eAAe,CAAC,SAAS,CAAC,mBAAmB,EAAE;AAC3D,UAAU,aAAa,CAAC,YAAY,GAAG,eAAe,CAAC,SAAS,CAAC,mBAAmB,CAAC,IAAI,CAAC;AAC1F,SAAS;AACT,QAAQ,eAAe,CAAC,QAAQ,GAAG,eAAe,CAAC,QAAQ,IAAI,EAAE,CAAC;AAClE,QAAQ,MAAM,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,EAAE,eAAe,EAAE,aAAa,CAAC,CAAC;AAC5F,QAAQ,OAAO,eAAe,CAAC;AAC/B,OAAO,CAAC,CAAC;AACT,KAAK;AACL,IAAI,OAAO;AACX,MAAM,0BAA0B;AAChC,MAAM,qCAAqC;AAC3C,MAAM,mCAAmC;AACzC,MAAM,mCAAmC;AACzC,KAAK,CAAC;AACN,GAAG;AACH,CAAC,CAAC;;ACzIK,MAAM,yCAAyC,GAAG,0CAA0C,CAAC;AAEpG,MAAM,CAAC,yCAAyC,EAAE;AAClD;AACA,EAAE,wBAAwB;AAC1B,EAAE,0DAA0D;AAC5D,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW;AACrB,EAAE,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC;AAClC,IAAI,QAAQ,EAAE,MAAM;AACpB,IAAI,aAAa,EAAE,OAAO;AAC1B;AACA,IAAI,WAAW,EAAE;AACjB,IAAI,WAAW,EAAE;AACjB,IAAI,mBAAmB;AACvB,IAAI,uBAAuB,EAAE;AAC7B,IAAI,eAAe;AACnB,MAAM,OAAO,KAAK,CAAC,WAAW,CAAC;AAC/B,KAAK;AACL,IAAI,qBAAqB,EAAE;AAC3B,IAAI,UAAU,EAAE;AAChB,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE;AAC/B,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,SAAS,EAAE,SAAS,EAAE;AACrD,MAAM;AACN,QAAQ,IAAI,EAAE;AACd,QAAQ;AACR,QAAQ,UAAU,EAAE,CAAC,MAAM,KAAK;AAChC,OAAO;AACP,KAAK;AACL,IAAI,WAAW,EAAE,IAAI;AACrB,GAAG,CAAC,CAAC;AACL,CAAC,CAAC,CAAC,UAAU,CAAC;AACd,EAAE,QAAQ;AACV,EAAE,IAAI;AACN,EAAE,kBAAkB;AACpB,EAAE,WAAW;AACb,EAAE,SAAS,MAAM,EAAE,EAAE,EAAE,gBAAgB,EAAE,SAAS,EAAE;AACpD,IAAI,MAAM;AACV,IAAI;AACJ,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;AACtB,MAAM;AACN;AACA,IAAI,MAAM,CAAC,SAAS,GAAG;AACvB,MAAM,OAAO;AACb,KAAK,CAAC;AACN,IAAI,SAAS,UAAU;AACvB,MAAM,EAAE,CAAC,GAAG,CAAC;AACb,QAAQ,cAAc,CAAC,4BAA4B,CAAC;AACpD,QAAQ,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC;AACxC,QAAQ,YAAY,CAAC,gBAAgB,CAAC,OAAO,CAAC;AAC9C;AACA,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;AACxB,QAAQ,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;AACjE;AACA;AACA,UAAU,MAAM,CAAC,KAAK,CAAC;AACvB,SAAS,MAAM,IAAI,CAAC;AACpB;AACA;AACA,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;AAC1B,UAAU,MAAM;AAChB,SAAS;AACT,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM;AACxC,UAAU,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;AAC3C,SAAS;AACT,QAAQ,MAAM,CAAC,aAAa,GAAG,aAAa,CAAC,UAAU,CAAC;AACxD,QAAQ,MAAM,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;AACnD,QAAQ,MAAM,CAAC,aAAa,GAAG,CAAC;AAChC,QAAQ,MAAM,CAAC,kBAAkB,GAAG,CAAC,KAAK,EAAE;AAC5C,QAAQ,MAAM,CAAC,SAAS,CAAC,SAAS,GAAG,QAAQ,CAAC;AAC9C,QAAQ,MAAM,CAAC,mBAAmB,GAAG,YAAY,EAAE,CAAC;AACpD,QAAQ,MAAM,CAAC,SAAS,CAAC,OAAO,GAAG;AACnC,QAAQ;AACR,UAAU,MAAM,CAAC,sBAAsB,GAAG,IAAI,CAAC;AAC/C,UAAU,gBAAgB,EAAE,CAAC;AAC7B,SAAS;AACT,QAAQ,MAAM,CAAC,sBAAsB,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC;AACpE,QAAQ,MAAM,CAAC,qBAAqB,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC;AACtE,OAAO,CAAC,CAAC;AACT,KAAK;AACL;AACA,MAAM,qBAAqB,EAAE,CAAC;AAC9B,MAAM,IAAI,OAAO,QAAQ,CAAC,OAAO,CAAC,aAAa,KAAK;AACpD,QAAQ,MAAM,CAAC,SAAS,CAAC,SAAS,GAAG,QAAQ,CAAC,OAAO;AACrD;AACA,KAAK;AACL,IAAI,SAAS,YAAY,GAAG;AAC5B,MAAM,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC;AAC/B,MAAM,OAAO,CAAC,EAAE,GAAG,CAAC,gBAAgB,IAAI,GAAG,CAAC;AAC5C,KAAK;AACL;AACA,MAAM,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,GAAG,EAAE,GAAG,EAAE;AAChD,QAAQ,IAAI,GAAG,KAAK,EAAE,EAAE;AACxB,UAAU,OAAO,MAAM,CAAC,KAAK,CAAC;AAC9B,SAAS;AACT,OAAO,CAAC,CAAC;AACT,KAAK;AACL,IAAI;AACJ,MAAM;AACN;AACA,QAAQ,KAAK,IAAI,CAAC,IAAI,MAAM,EAAE;AAC9B,UAAU,IAAI,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AAChC,UAAU,IAAI,QAAQ,GAAG;AACzB,YAAY,EAAE,EAAE,KAAK,CAAC,SAAS;AAC/B,YAAY,MAAM,EAAE,KAAK,CAAC,MAAM;AAChC;AACA;AACA;AACA,SAAS;AACT,QAAQ,MAAM,CAAC;AACf,OAAO,CAAC,CAAC,KAAK,CAAC;AACf,OAAO,CAAC,CAAC;AACT,KAAK;AACL,IAAI,SAAS,UAAU;AACvB,MAAM;AACN;AACA;AACA,OAAO,CAAC,CAAC;AACT,KAAK;AACL,IAAI,IAAI,CAAC;AACT,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;AACxB,QAAQ;AACR,OAAO;AACP,MAAM;AACN;AACA,QAAQ,UAAU,EAAE;AACpB,QAAQ,YAAY,EAAE;AACtB,QAAQ,OAAO,EAAE;AACjB,UAAU,iBAAiB,EAAE;AAC7B,YAAY,OAAO;AACnB,cAAc,GAAG,EAAE,EAAE;AACrB,cAAc,KAAK,EAAE,EAAE;AACvB,aAAa,CAAC;AACd,WAAW;AACX,SAAS;AACT,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS;AAC9B,QAAQ,MAAM,CAAC;AACf,OAAO,CAAC,CAAC,KAAK,CAAC,MAAM;AACrB,OAAO,CAAC,CAAC;AACT,KAAK,CAAC;AACN,IAAI,IAAI,CAAC;AACT,MAAM,OAAO,MAAM,CAAC,KAAK,CAAC;AAC1B,KAAK,CAAC;AACN;AACA,MAAM,OAAO,MAAM,CAAC,SAAS;AAC7B,KAAK,CAAC;AACN,IAAI,IAAI,CAAC,sBAAsB,GAAG;AAClC,MAAM,OAAO,MAAM,CAAC,SAAS,CAAC,SAAS,IAAI,MAAM,CAAC,KAAK,CAAC;AACxD,KAAK,CAAC;AACN,IAAI,IAAI,CAAC,eAAe,GAAG;AAC3B,MAAM;AACN;AACA,IAAI,IAAI,CAAC,iBAAiB,GAAG,WAAW;AACxC,MAAM,MAAM,CAAC,sBAAsB,GAAG,KAAK,CAAC;AAC5C,MAAM,MAAM,CAAC,sBAAsB,GAAG,IAAI,CAAC;AAC3C,MAAM;AACN,MAAM,MAAM,CAAC;AACb,MAAM,MAAM,CAAC;AACb,MAAM,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;AAChC,MAAM,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC;AAC9B,MAAM,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;AACjC,MAAM,MAAM,CAAC,KAAK,CAAC;AACnB,KAAK,CAAC;AACN,IAAI,IAAI,CAAC;AACT,MAAM,gBAAgB,EAAE,CAAC;AACzB,MAAM,MAAM,CAAC;AACb,MAAM,MAAM,CAAC;AACb,MAAM,MAAM,CAAC;AACb,MAAM,MAAM,CAAC;AACb,MAAM,MAAM;AACZ,MAAM,MAAM,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC;AACpC,MAAM,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;AAChC,MAAM,MAAM;AACZ,MAAM,MAAM,CAAC,KAAK,CAAC;AACnB,KAAK,CAAC;AACN;AACA,MAAM,MAAM,CAAC,sBAAsB,GAAG,KAAK,CAAC;AAC5C,MAAM,MAAM,CAAC,sBAAsB,GAAG,KAAK,CAAC;AAC5C,MAAM;AACN;AACA,MAAM,MAAM,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC;AACvC,MAAM,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;AACjC,MAAM;AACN;AACA,IAAI,IAAI,CAAC,eAAe,GAAG,MAAM;AACjC,MAAM,MAAM,CAAC;AACb,MAAM,MAAM,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC;AACtC,MAAM;AACN,MAAM;AACN;AACA,OAAO;AACP,MAAM,IAAI,MAAM,CAAC,sBAAsB,EAAE;AACzC,QAAQ;AACR;AACA,KAAK,CAAC;AACN,IAAI,MAAM,CAAC,oBAAoB,GAAG,MAAM;AACxC,MAAM,MAAM,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC;AACtC,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,IAAI,CAAC;AAC1C;AACA,KAAK,CAAC;AACN,IAAI,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC,EAAE;AACtC,MAAM,MAAM,CAAC,KAAK,CAAC,WAAW,GAAG;AACjC,KAAK,CAAC;AACN,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE;AAC3B,IAAI,UAAU,EAAE,CAAC;AACjB,GAAG;AACH;AACA,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;AACjC,EAAE,aAAa,CAAC,GAAG,CAAC;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9QA;AACA,EAAE,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC;AAClC,IAAI,QAAQ,EAAE,oBAAoB;AAClC,IAAI,aAAa,EAAE,OAAO;AAC1B,IAAI,WAAW,EAAE;AACjB,IAAI,qBAAqB,EAAE;AAC3B,IAAI,gBAAgB,EAAE,CAAC,KAAK,KAAK,CAAC;AAClC,IAAI,sBAAsB,EAAE,CAAC;AAC7B,IAAI,UAAU,EAAE;AAChB,MAAM;AACN,QAAQ,IAAI,EAAE,iBAAiB;AAC/B,QAAQ,OAAO,EAAE;AACjB,OAAO;AACP,MAAM,EAAE;AACR,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE;AAC/B,MAAM,EAAE,IAAI,EAAE;AACd,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE;AAChF,KAAK;AACL,GAAG,CAAC,CAAC;AACL,CAAC,CAAC,CAAC,UAAU,CAAC,0BAA0B,EAAE;AAC1C,EAAE,QAAQ;AACV,EAAE,SAAS,MAAM,EAAE;AACnB,IAAI;AACJ,IAAI;AACJ,IAAI;AACJ,MAAM,QAAQ,EAAE,KAAK;AACrB,MAAM;AACN,KAAK,CAAC;AACN,IAAI,cAAc,CAAC;AACnB;AACA,MAAM,MAAM,CAAC,KAAK,CAAC,QAAQ,GAAG;AAC9B;AACA,IAAI,IAAI,CAAC;AACT,MAAM,cAAc,CAAC;AACrB,QAAQ,KAAK,CAAC,OAAO,GAAG,CAAC;AACzB,OAAO,CAAC;AACR;AACA,IAAI,MAAM,CAAC,OAAO,GAAG,cAAc,CAAC,WAAW,CAAC;AAChD,IAAI,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO;AACjC,IAAI,KAAK,CAAC,aAAa,GAAG,OAAO,CAAC;AAClC,IAAI,KAAK;AACT;AACA,MAAM,KAAK,CAAC,WAAW,GAAG,MAAM,CAAC;AACjC,KAAK;AACL,IAAI,IAAI,KAAK,CAAC,WAAW,EAAE;AAC3B,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;AAC5B,KAAK;AACL,IAAI,IAAI;AACR;AACA,KAAK;AACL;AACA,CAAC,CAAC,CAAC;AACH,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC,CAAC;AACH,CAAC,CAAC,CAAC,CAAC;AACJ,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;AACjC,EAAE;AACF,CAAC,CAAC,CAAC;AACH,CAAC,CAAC,CAAC;;;ACnEH;AACA,EAAE,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC;AAClC,IAAI,QAAQ,EAAE,oBAAoB;AAClC,IAAI,KAAK,EAAE,YAAY;AACvB,IAAI,aAAa,EAAE;AACnB,IAAI,WAAW,EAAE;AACjB,IAAI,qBAAqB,EAAE;AAC3B,IAAI,UAAU,EAAE;AAChB,MAAM;AACN,QAAQ,IAAI,EAAE;AACd,QAAQ,OAAO,EAAE;AACjB,OAAO;AACP,MAAM,EAAE;AACR,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE;AAC/B,MAAM,EAAE,IAAI,EAAE;AACd,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE;AAChF,KAAK;AACL,GAAG,CAAC,CAAC;AACL,CAAC,CAAC,CAAC,UAAU,CAAC,0BAA0B,EAAE;AAC1C,EAAE,QAAQ;AACV,EAAE,SAAS,MAAM,EAAE;AACnB,IAAI;AACJ,IAAI;AACJ;AACA,MAAM,aAAa,EAAE,KAAK;AAC1B,KAAK,CAAC;AACN,IAAI,cAAc,CAAC;AACnB,MAAM,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACjC;AACA,KAAK,CAAC,CAAC;AACP,IAAI,MAAM,CAAC,OAAO,GAAG;AACrB,IAAI,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC;AAC1B,IAAI;AACJ;AACA,MAAM,KAAK,CAAC,8BAA8B,GAAG,EAAE,CAAC;AAChD,KAAK;AACL,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,MAAM,CAAC;AACrC,MAAM;AACN;AACA,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC;AACxC;AACA,KAAK;AACL,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;AACvB;AACA,KAAK;AACL,GAAG;AACH,CAAC,CAAC,CAAC;AACH;AACA,EAAE,aAAa,CAAC,GAAG,CAAC;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC,CAAC;;;;;;;;AC3DH;AACA,EAAE,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC;AAClC,IAAI,QAAQ,EAAE,mBAAmB;AACjC,IAAI,KAAK,EAAE,WAAW;AACtB,IAAI,aAAa,EAAE;AACnB,IAAI,WAAW,EAAE;AACjB,IAAI,qBAAqB,EAAE;AAC3B,IAAI,UAAU,EAAE;AAChB,MAAM,EAAE,IAAI,EAAE,eAAe;AAC7B,MAAM,EAAE,IAAI,EAAE;AACd,MAAM,EAAE,IAAI,EAAE,eAAe;AAC7B,MAAM,EAAE,IAAI,EAAE;AACd,KAAK;AACL,GAAG,CAAC,CAAC;AACL,CAAC,CAAC,CAAC,UAAU,CAAC,yBAAyB,EAAE;AACzC,EAAE,QAAQ;AACV,EAAE;AACF,IAAI;AACJ,IAAI;AACJ,IAAI,MAAM,CAAC,KAAK,GAAG;AACnB,MAAM;AACN,MAAM,aAAa,EAAE;AACrB,KAAK,CAAC;AACN;AACA,MAAM,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACjC;AACA,KAAK,CAAC,CAAC;AACP,IAAI,IAAI,CAAC,KAAK,GAAG,MAAM;AACvB,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;AAC5B,MAAM;AACN;AACA,IAAI,MAAM,CAAC,OAAO,GAAG,cAAc,CAAC,WAAW,CAAC;AAChD,IAAI,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO;AACjC,IAAI,KAAK,CAAC,aAAa,GAAG,OAAO,CAAC;AAClC,IAAI,IAAI;AACR;AACA,KAAK;AACL,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI;AAC9B,MAAM,KAAK,CAAC,WAAW,GAAG,MAAM,CAAC;AACjC,KAAK;AACL;AACA,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AAC5C;AACA,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;AACvB,MAAM,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC;AACpC;AACA,IAAI,MAAM,CAAC,MAAM,CAAC;AAClB,GAAG;AACH,CAAC,CAAC,CAAC;AACH,MAAM,CAAC;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC,CAAC,CAAC;AACJ,MAAM;AACN,EAAE;;;;AChEK,MAAM,+CAA+C,GAAG,6CAA6C,CAAC;AACtG,MAAM,IAAI,GAAG,+CAA+C,CAAC;AACpE,MAAM,CAAC,+CAA+C,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,CAAC,0BAA0B,EAAE,WAAW;AAC7H,EAAE,SAAS,mBAAmB,CAAC,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,GAAG,EAAE,EAAE;AACpF,IAAI,MAAM,CAAC,iBAAiB,GAAG,aAAa,CAAC,IAAI,CAAC;AAClD,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,EAAE,aAAa,EAAE,SAAS,KAAK,EAAE,KAAK,EAAE;AAC/D,MAAM,OAAO,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,KAAK,CAAC;AAClD,KAAK,CAAC,CAAC;AACP,IAAI,MAAM,SAAS,GAAG,YAAY,CAAC,WAAW,CAAC;AAC/C,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC;AACnB,MAAM,WAAW;AACjB,MAAM,WAAW,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,cAAc,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;AAC7E,KAAK,CAAC,CAAC;AACP,IAAI,oBAAoB,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;AACrD,IAAI,OAAO,SAAS,CAAC;AACrB,GAAG;AACH,EAAE,SAAS,mBAAmB,CAAC,aAAa,EAAE,WAAW,EAAE,MAAM,GAAG,EAAE,EAAE;AACxE,IAAI,MAAM,CAAC,IAAI,GAAG,qBAAqB,CAAC;AACxC,IAAI,MAAM,CAAC,iBAAiB,GAAG,aAAa,CAAC,IAAI,CAAC;AAClD,IAAI,MAAM,CAAC,OAAO,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;AAC5C,IAAI,MAAM,CAAC,WAAW,GAAG,aAAa,CAAC,SAAS,CAAC;AACjD,IAAI,MAAM,CAAC,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC;AACtC,IAAI,MAAM,SAAS,GAAG,YAAY,CAAC,WAAW,CAAC;AAC/C,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC;AACnB,MAAM,WAAW;AACjB,MAAM,WAAW,EAAE,CAAC,OAAO,EAAE,cAAc,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,EAAE,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;AACrF,KAAK,CAAC,CAAC;AACP,IAAI,oBAAoB,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;AACrD,IAAI,OAAO,SAAS,CAAC;AACrB,GAAG;AACH,EAAE,OAAO;AACT,IAAI,mBAAmB;AACvB,IAAI,mBAAmB;AACvB,GAAG,CAAC;AACJ,CAAC,CAAC;;ACjCK,MAAM,qDAAqD,GAAG;AAErE,MAAM,CAAC,qDAAqD,EAAE;AAC9D;AACA,EAAE,+CAA+C;AACjD,CAAC,CAAC,CAAC,UAAU,CAAC,8BAA8B,EAAE;AAC9C,EAAE,QAAQ;AACV,EAAE,mBAAmB;AACrB,EAAE,QAAQ;AACV,EAAE,aAAa;AACf,EAAE;AACF,EAAE,eAAe;AACjB,EAAE;AACF,EAAE,SAAS;AACX,IAAI,MAAM,CAAC,KAAK;AAChB,MAAM,QAAQ,EAAE;AAChB,MAAM,OAAO,EAAE;AACf,KAAK,CAAC;AACN,IAAI,MAAM,CAAC,OAAO;AAClB,IAAI,MAAM,CAAC;AACX,IAAI,MAAM,IAAI;AACd,IAAI;AACJ;AACA,MAAM,UAAU,EAAE,KAAK;AACvB;AACA,QAAQ,QAAQ,EAAE,EAAE;AACpB;AACA,OAAO;AACP,KAAK,CAAC;AACN,IAAI,cAAc,CAAC;AACnB,MAAM,MAAM,CAAC,QAAQ,GAAG;AACxB,MAAM,IAAI,CAAC;AACX,KAAK,CAAC,CAAC;AACP,IAAI,IAAI,CAAC,YAAY,GAAG;AACxB,MAAM;AACN,KAAK,CAAC;AACN;AACA,MAAM,IAAI,MAAM,CAAC,WAAW,EAAE;AAC9B,QAAQ,OAAO;AACf,OAAO;AACP,MAAM;AACN;AACA,QAAQ,IAAI,EAAE,MAAM,CAAC,aAAa,CAAC;AACnC,QAAQ,SAAS,EAAE,MAAM,CAAC,aAAa,CAAC,WAAW,IAAI,MAAM,CAAC,aAAa,CAAC,WAAW;AACvF;AACA;AACA,OAAO,CAAC;AACR,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE;AAClD,QAAQ,MAAM,CAAC,EAAE,CAAC;AAClB,OAAO,MAAM;AACb;AACA,OAAO;AACP,KAAK;AACL,IAAI,SAAS,cAAc,GAAG;AAC9B,MAAM,WAAW,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;AAC3C,MAAM,WAAW,CAAC,cAAc,CAAC,aAAa,CAAC;AAC/C,KAAK;AACL,IAAI;AACJ,MAAM,WAAW;AACjB,MAAM,KAAK,EAAE,CAAC,cAAc,EAAE,cAAc,CAAC,GAAG,CAAC;AACjD,MAAM;AACN,MAAM,cAAc;AACpB,KAAK,CAAC,CAAC;AACP,IAAI;AACJ;AACA,MAAM,cAAc,CAAC;AACrB,QAAQ,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;AACjC,QAAQ,MAAM,CAAC,aAAa,CAAC,OAAO,GAAG,OAAO,CAAC;AAC/C;AACA;AACA,OAAO,CAAC,CAAC;AACT,KAAK,CAAC;AACN,IAAI,IAAI,CAAC,aAAa,GAAG,WAAW;AACpC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;AACzB,KAAK,CAAC;AACN,IAAI;AACJ;AACA,MAAM,MAAM,MAAM,GAAG,MAAM,CAAC,aAAa;AACzC;AACA,MAAM,MAAM,CAAC,aAAa,CAAC,IAAI,GAAG,IAAI,CAAC;AACvC,MAAM,MAAM,CAAC,aAAa,CAAC,iBAAiB,GAAG,IAAI,CAAC;AACpD,MAAM,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;AAC9B,MAAM,aAAa,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC;AACxC,QAAQ,IAAI,KAAK,CAAC,KAAK,EAAE;AACzB,UAAU,KAAK,CAAC,KAAK,CAAC,OAAO;AAC7B;AACA;AACA;AACA,WAAW,CAAC,CAAC;AACb,SAAS;AACT;AACA;AACA,KAAK,CAAC;AACN,IAAI,IAAI,CAAC,aAAa,GAAG,WAAW;AACpC,MAAM,MAAM,CAAC,aAAa,CAAC,cAAc,GAAG,IAAI,CAAC;AACjD,MAAM,MAAM,CAAC,aAAa,CAAC,MAAM,GAAG,IAAI,CAAC;AACzC,MAAM,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;AAChC,KAAK,CAAC;AACN;AACA,MAAM,MAAM,CAAC,aAAa,CAAC;AAC3B;AACA,MAAM,MAAM,CAAC,aAAa,CAAC,cAAc,GAAG,IAAI,CAAC;AACjD,MAAM,MAAM,CAAC,aAAa;AAC1B,MAAM,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;AAChC,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE;AACxB,QAAQ,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,MAAM,EAAE;AAC1C,UAAU;AACV,SAAS,CAAC,CAAC;AACX,OAAO;AACP,KAAK,CAAC;AACN;AACA,MAAM,iBAAiB,CAAC;AACxB,KAAK,CAAC;AACN;AACA,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC;AACpC,MAAM,IAAI,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC;AACnC,MAAM,IAAI,cAAc,CAAC,MAAM,EAAE;AACjC,QAAQ,KAAK,IAAI,GAAG,GAAG;AACvB;AACA;AACA,MAAM,MAAM,CAAC,WAAW,GAAG,KAAK,CAAC;AACjC,KAAK,CAAC;AACN,IAAI,IAAI,CAAC,MAAM,GAAG,WAAW;AAC7B,MAAM,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,WAAW;AAC3C,QAAQ,MAAM,MAAM,GAAG;AACvB,UAAU,aAAa,EAAE,OAAO;AAChC,UAAU,OAAO,EAAE;AACnB,UAAU,MAAM,EAAE,MAAM,CAAC,aAAa,CAAC;AACvC,UAAU,KAAK,EAAE,MAAM;AACvB,SAAS,CAAC;AACV;AACA;AACA;AACA,SAAS;AACT,QAAQ,IAAI,MAAM,CAAC,aAAa,CAAC;AACjC;AACA;AACA,QAAQ,MAAM,CAAC,aAAa,CAAC,IAAI;AACjC,QAAQ,OAAO,wBAAwB,CAAC;AACxC,OAAO,CAAC,CAAC;AACT,KAAK,CAAC;AACN,IAAI,IAAI,CAAC,OAAO,GAAG,SAAS,OAAO,EAAE;AACrC,MAAM;AACN,QAAQ,IAAI,EAAE,MAAM,CAAC;AACrB,QAAQ,QAAQ,EAAE,OAAO,CAAC,MAAM;AAChC;AACA;AACA,QAAQ,MAAM,EAAE,OAAO;AACvB,QAAQ,SAAS,EAAE,SAAS;AAC5B,QAAQ;AACR,QAAQ,qBAAqB,EAAE,EAAE;AACjC,QAAQ,eAAe,EAAE,GAAG;AAC5B,QAAQ,wBAAwB,EAAE,GAAG;AACrC,QAAQ;AACR,QAAQ;AACR;AACA,QAAQ,kBAAkB,EAAE,GAAG;AAC/B,OAAO,CAAC,CAAC;AACT,KAAK,CAAC;AACN,IAAI,IAAI,CAAC;AACT;AACA,QAAQ,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;AAC1C,QAAQ,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;AACnC;AACA;AACA,UAAU,OAAO,CAAC,KAAK,CAAC,CAAC,oBAAoB,GAAG,IAAI,CAAC;AACrD;AACA,UAAU,OAAO,CAAC,KAAK,CAAC,CAAC,oBAAoB,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC;AAC9E;AACA;AACA;AACA,KAAK,CAAC;AACN,IAAI,IAAI,CAAC;AACT,MAAM,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,EAAE;AACrD,QAAQ,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,kBAAkB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACxE,QAAQ,IAAI,UAAU,CAAC;AACvB,UAAU,OAAO,CAAC,KAAK,CAAC;AACxB,UAAU,UAAU,CAAC;AACrB,UAAU,OAAO,CAAC,KAAK,CAAC,CAAC;AACzB,SAAS,MAAM;AACf,UAAU,OAAO,CAAC,KAAK,CAAC,CAAC;AACzB,UAAU,OAAO,CAAC,KAAK,CAAC,CAAC;AACzB,SAAS;AACT,OAAO;AACP,KAAK,CAAC;AACN,IAAI,IAAI,CAAC,eAAe,GAAG;AAC3B,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,GAAG;AAChC,KAAK,CAAC;AACN,IAAI;AACJ;AACA,KAAK,CAAC;AACN,IAAI,IAAI,CAAC,MAAM,GAAG,SAAS,OAAO,EAAE,KAAK,EAAE;AAC3C,MAAM,IAAI,KAAK,KAAK,CAAC;AACrB;AACA,MAAM,SAAS,CAAC,OAAO,EAAE,KAAK,EAAE;AAChC,KAAK,CAAC;AACN,IAAI,IAAI,CAAC,QAAQ,GAAG,SAAS,OAAO,EAAE,KAAK,EAAE;AAC7C;AACA,QAAQ,OAAO;AACf,MAAM,SAAS,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;AAC3C,KAAK,CAAC;AACN,IAAI,SAAS,SAAS,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE;AACtC;AACA,MAAM,MAAM,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;AAC5C,MAAM,MAAM,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;AAC5C,MAAM;AACN,MAAM;AACN,MAAM;AACN;AACA,KAAK;AACL,IAAI,MAAM,CAAC,aAAa,CAAC,aAAa,GAAG,EAAE,CAAC;AAC5C,GAAG;AACH,CAAC,CAAC,CAAC;AACH,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,gBAAgB,EAAE;AACnD,EAAE,aAAa,CAAC,GAAG,CAAC;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5PO,MAAM;AAEb,MAAM,CAAC,mDAAmD,EAAE;AAC5D;AACA,EAAE,yBAAyB;AAC3B,EAAE,qBAAqB;AACvB,EAAE,+CAA+C;AACjD,CAAC,CAAC,CAAC,UAAU,CAAC,4BAA4B,EAAE;AAC5C,EAAE,QAAQ;AACV,EAAE,mBAAmB;AACrB,EAAE,mBAAmB;AACrB,EAAE,QAAQ;AACV,EAAE,qBAAqB;AACvB,EAAE;AACF,EAAE,aAAa;AACf,EAAE,eAAe;AACjB,EAAE;AACF,EAAE,SAAS,MAAM,EAAE;AACnB,IAAI,MAAM,CAAC,KAAK,GAAG;AACnB,MAAM,OAAO,EAAE;AACf,KAAK,CAAC;AACN,IAAI,aAAa,CAAC;AAClB,MAAM,IAAI,CAAC,CAAC;AACZ,QAAQ;AACR,OAAO;AACP,MAAM,IAAI,CAAC;AACX,MAAM,IAAI,CAAC;AACX,MAAM,OAAO,IAAI,CAAC;AAClB,KAAK,CAAC,CAAC;AACP,IAAI,MAAM,CAAC;AACX,IAAI,MAAM,CAAC,KAAK;AAChB,MAAM;AACN,KAAK;AACL,IAAI,MAAM,CAAC;AACX,MAAM;AACN,MAAM;AACN;AACA,MAAM,cAAc;AACpB,KAAK,CAAC,CAAC;AACP,IAAI,IAAI,CAAC,2BAA2B,GAAG,WAAW;AAClD,MAAM;AACN;AACA,IAAI,IAAI,CAAC,qBAAqB,GAAG,WAAW;AAC5C,MAAM,MAAM,CAAC,KAAK,CAAC,wBAAwB,GAAG,IAAI,CAAC;AACnD;AACA,QAAQ;AACR;AACA;AACA,OAAO,CAAC,CAAC;AACT;AACA,IAAI,SAAS;AACb,MAAM,OAAO,mBAAmB,CAAC;AACjC;AACA;AACA,QAAQ,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;AACzC,QAAQ,MAAM,CAAC;AACf,OAAO,CAAC,CAAC;AACT,KAAK;AACL,IAAI,IAAI,CAAC,OAAO,GAAG,SAAS,OAAO,EAAE;AACrC,MAAM;AACN;AACA,QAAQ,QAAQ,EAAE,OAAO,CAAC,MAAM,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG;AAClD,QAAQ,UAAU,EAAE,KAAK;AACzB;AACA;AACA,QAAQ,mBAAmB,EAAE,GAAG;AAChC,QAAQ,qBAAqB,EAAE,EAAE;AACjC,QAAQ,eAAe,EAAE,GAAG;AAC5B,QAAQ,wBAAwB,EAAE,GAAG;AACrC,QAAQ,oBAAoB,EAAE,GAAG;AACjC,QAAQ;AACR,QAAQ;AACR;AACA;AACA,KAAK,CAAC;AACN,IAAI,SAAS,oBAAoB,GAAG;AACpC,MAAM,IAAI,MAAM,CAAC,WAAW,EAAE;AAC9B,QAAQ,OAAO;AACf,OAAO;AACP,MAAM,iBAAiB,CAAC;AACxB,MAAM;AACN,QAAQ,IAAI,EAAE,MAAM,CAAC,aAAa,CAAC,IAAI;AACvC,QAAQ;AACR;AACA;AACA,OAAO,CAAC;AACR,MAAM,IAAI,CAAC,MAAM,CAAC;AAClB,QAAQ,MAAM,CAAC,EAAE,CAAC,kBAAkB,EAAE,cAAc,CAAC,CAAC;AACtD,OAAO,MAAM;AACb,QAAQ,MAAM,CAAC,EAAE,CAAC;AAClB,OAAO;AACP,KAAK;AACL,IAAI,SAAS,cAAc,GAAG;AAC9B,MAAM,WAAW,CAAC,cAAc,CAAC;AACjC,MAAM,WAAW,CAAC;AAClB,KAAK;AACL,IAAI,IAAI,CAAC,WAAW,GAAG,SAAS;AAChC,MAAM,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK;AAClC,QAAQ,MAAM,UAAU,GAAG;AAC3B,QAAQ,IAAI,UAAU,CAAC,MAAM,GAAG;AAChC;AACA;AACA;AACA,SAAS,MAAM;AACf,UAAU,OAAO,CAAC,KAAK,CAAC,CAAC,oBAAoB,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC;AAC9E,UAAU,OAAO,CAAC,KAAK,CAAC,CAAC;AACzB,SAAS;AACT,OAAO;AACP,KAAK,CAAC;AACN,IAAI,IAAI,CAAC,mBAAmB;AAC5B,MAAM,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACpC,QAAQ,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,kBAAkB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACxE,QAAQ,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;AACnC,UAAU,OAAO,CAAC,KAAK,CAAC,CAAC;AACzB;AACA,UAAU,OAAO,CAAC,KAAK,CAAC,CAAC,mBAAmB,GAAG,IAAI;AACnD,SAAS,MAAM;AACf,UAAU;AACV,UAAU,OAAO,CAAC,KAAK,CAAC,CAAC,qBAAqB,GAAG,EAAE,CAAC;AACpD;AACA;AACA;AACA,IAAI,IAAI,CAAC,UAAU,GAAG,SAAS;AAC/B,MAAM,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AAC/B,KAAK,CAAC;AACN,IAAI;AACJ;AACA,QAAQ,OAAO;AACf,MAAM,SAAS,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;AAC3C,KAAK,CAAC;AACN,IAAI,IAAI,CAAC,QAAQ,GAAG,SAAS,OAAO;AACpC,MAAM,IAAI,KAAK,KAAK,OAAO,CAAC,MAAM,GAAG,CAAC;AACtC,QAAQ,OAAO;AACf;AACA,KAAK,CAAC;AACN,IAAI,SAAS,SAAS,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE;AACtC,MAAM,MAAM,IAAI;AAChB,MAAM,MAAM,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;AAC5C;AACA,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AAC9B,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;AACxB,MAAM;AACN,MAAM;AACN,KAAK;AACL;AACA,IAAI,IAAI,CAAC,MAAM,GAAG,WAAW;AAC7B,MAAM,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,WAAW;AAC3C,QAAQ,MAAM,MAAM,GAAG;AACvB,UAAU,aAAa,EAAE,OAAO;AAChC,UAAU,OAAO,EAAE,WAAW,CAAC,IAAI;AACnC,UAAU,MAAM,EAAE,MAAM,CAAC,aAAa,CAAC,MAAM;AAC7C;AACA,UAAU,KAAK,EAAE,MAAM;AACvB,SAAS,CAAC;AACV,QAAQ,MAAM,CAAC;AACf,QAAQ,OAAO,wBAAwB,CAAC,mBAAmB,CAAC,MAAM,CAAC,aAAa;AAChF;AACA,KAAK,CAAC;AACN,IAAI,IAAI,CAAC,MAAM,GAAG,WAAW;AAC7B,MAAM;AACN,KAAK,CAAC;AACN,GAAG;AACH;AACA,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,gBAAgB;AACjD,EAAE,aAAa,CAAC,GAAG,CAAC;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrNA,MAAM,CAAC,uDAAuD,EAAE;AAChE;AACA,EAAE,qDAAqD;AACvD,CAAC,CAAC,CAAC,UAAU,CAAC,mCAAmC,EAAE;AACnD,EAAE,QAAQ;AACV,EAAE,mBAAmB;AACrB,EAAE,aAAa;AACf,EAAE,QAAQ;AACV,EAAE;AACF,EAAE,eAAe;AACjB,EAAE,aAAa;AACf,EAAE,SAAS;AACX,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC;AACtB,IAAI,MAAM,CAAC;AACX,IAAI,MAAM,CAAC,KAAK;AAChB,MAAM,QAAQ,EAAE,sEAAsE;AACtF,MAAM,OAAO,EAAE;AACf;AACA,IAAI,aAAa,CAAC,aAAa,GAAG,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC;AACtD;AACA,MAAM,IAAI,CAAC,SAAS;AACpB,MAAM,IAAI,CAAC;AACX,MAAM,OAAO;AACb,KAAK,CAAC;AACN;AACA,MAAM,cAAc,CAAC,oBAAoB,CAAC,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC;AACjF,QAAQ,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;AACjC,QAAQ,MAAM,CAAC,aAAa,CAAC,OAAO,GAAG;AACvC,QAAQ,IAAI,CAAC,UAAU,EAAE,CAAC;AAC1B,OAAO,CAAC,CAAC;AACT,KAAK,CAAC;AACN;AACA,MAAM,iBAAiB,CAAC,OAAO,EAAE,CAAC;AAClC,KAAK,CAAC;AACN,IAAI,IAAI,CAAC,UAAU,GAAG,WAAW;AACjC,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC;AACpC,MAAM,IAAI,KAAK,GAAG;AAClB,MAAM;AACN;AACA;AACA,MAAM,cAAc,CAAC,IAAI,GAAG;AAC5B,MAAM,MAAM,CAAC,WAAW,GAAG,KAAK,CAAC;AACjC,KAAK,CAAC;AACN;AACA,IAAI,MAAM,CAAC,KAAK,GAAG;AACnB,MAAM,wBAAwB,EAAE,KAAK;AACrC,KAAK,CAAC;AACN,IAAI,MAAM,CAAC,WAAW,GAAG,IAAI;AAC7B,MAAM,WAAW;AACjB,MAAM;AACN,MAAM,aAAa,EAAE;AACrB,MAAM,cAAc;AACpB,KAAK,CAAC;AACN;AACA,MAAM,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACjC;AACA,KAAK,CAAC,CAAC;AACP,IAAI,IAAI,CAAC,OAAO,GAAG,SAAS,OAAO,EAAE;AACrC,MAAM;AACN;AACA,QAAQ,QAAQ,EAAE,OAAO,CAAC,MAAM,KAAK,CAAC,GAAG;AACzC,QAAQ,QAAQ,EAAE,KAAK;AACvB,QAAQ,MAAM,EAAE,OAAO;AACvB,QAAQ,SAAS,EAAE,SAAS;AAC5B,QAAQ,mBAAmB,EAAE,GAAG;AAChC;AACA;AACA,QAAQ,oBAAoB,EAAE,WAAW;AACzC,QAAQ,SAAS,EAAE,IAAI;AACvB,QAAQ,OAAO,EAAE,IAAI;AACrB,OAAO;AACP;AACA,IAAI,SAAS,oBAAoB,GAAG;AACpC,MAAM,IAAI,MAAM,CAAC;AACjB,QAAQ,OAAO;AACf,OAAO;AACP,MAAM,iBAAiB,CAAC;AACxB,MAAM,MAAM;AACZ,QAAQ,IAAI,EAAE,MAAM,CAAC;AACrB,QAAQ,SAAS,EAAE,MAAM,CAAC;AAC1B,QAAQ,MAAM,EAAE,MAAM,CAAC;AACvB,QAAQ,QAAQ,EAAE,OAAO;AACzB,OAAO,CAAC;AACR,MAAM,IAAI,CAAC,MAAM,CAAC;AAClB,QAAQ,MAAM,CAAC,EAAE,CAAC;AAClB,OAAO;AACP;AACA;AACA,KAAK;AACL,IAAI,SAAS,cAAc,GAAG;AAC9B,MAAM,WAAW,CAAC;AAClB,MAAM;AACN,KAAK;AACL,IAAI,IAAI,CAAC,WAAW,GAAG,SAAS;AAChC,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC;AACrB,KAAK,CAAC;AACN,IAAI,IAAI,CAAC,UAAU,GAAG,SAAS,OAAO,EAAE,KAAK,EAAE;AAC/C,MAAM,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AAC/B,KAAK,CAAC;AACN,IAAI,IAAI;AACR,MAAM,IAAI,KAAK,KAAK,CAAC;AACrB,QAAQ,OAAO;AACf,MAAM;AACN,KAAK,CAAC;AACN,IAAI;AACJ;AACA;AACA,MAAM,SAAS,CAAC,OAAO,EAAE,KAAK;AAC9B,KAAK,CAAC;AACN,IAAI,SAAS,SAAS,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE;AACtC;AACA;AACA,MAAM,MAAM,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;AAC5C,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AAC9B,MAAM;AACN,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,SAAS,CAAC;AACtC,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG;AAC5B,KAAK;AACL,IAAI,IAAI,CAAC,MAAM,GAAG,WAAW;AAC7B,MAAM,MAAM,CAAC,WAAW,CAAC;AACzB,QAAQ,MAAM,MAAM,GAAG;AACvB;AACA,UAAU,OAAO,EAAE,WAAW,CAAC,IAAI;AACnC,UAAU,MAAM,EAAE,MAAM,CAAC,aAAa,CAAC,MAAM;AAC7C,UAAU,MAAM,EAAE,MAAM;AACxB;AACA,SAAS,CAAC;AACV,QAAQ,MAAM,CAAC,aAAa,CAAC;AAC7B,QAAQ,OAAO,wBAAwB,CAAC;AACxC,OAAO,CAAC,CAAC;AACT,KAAK,CAAC;AACN,GAAG;AACH,CAAC,CAAC,CAAC;AACH,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;AACtB,EAAE,aAAa,CAAC,GAAG,CAAC;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxJA,OAAO,CAAC,MAAM,CAAC,0DAA0D,EAAE;AAC3E;AACA,EAAE,qBAAqB;AACvB,EAAE,+CAA+C;AACjD,EAAE,uDAAuD;AACzD,CAAC,CAAC,CAAC;AACH,EAAE,QAAQ;AACV,EAAE,QAAQ;AACV,EAAE,uBAAuB;AACzB,EAAE,KAAK;AACP,EAAE,0BAA0B;AAC5B,EAAE;AACF,EAAE,WAAW;AACb,EAAE,SAAS;AACX,IAAI,MAAM;AACV,IAAI,MAAM,aAAa,GAAG;AAC1B,IAAI,MAAM;AACV,MAAM,OAAO,EAAE,IAAI;AACnB,KAAK,CAAC;AACN,IAAI,MAAM,CAAC;AACX,IAAI,SAAS,oBAAoB,GAAG;AACpC,MAAM,OAAO;AACb,QAAQ,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC;AACrC;AACA,UAAU,UAAU,EAAE;AACtB,SAAS,MAAM;AACf;AACA;AACA,OAAO,EAAE,WAAW;AACpB;AACA,OAAO,CAAC,CAAC;AACT,KAAK;AACL,IAAI,SAAS,UAAU,GAAG;AAC1B,MAAM,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;AACrB,KAAK;AACL,IAAI,oBAAoB,EAAE,CAAC,IAAI,CAAC;AAChC,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;AAC/B,QAAQ,GAAG,CAAC,cAAc,CAAC;AAC3B,OAAO;AACP,KAAK,CAAC,CAAC;AACP,IAAI,IAAI,CAAC;AACT,MAAM,SAAS,CAAC,IAAI,CAAC;AACrB,QAAQ,WAAW,EAAE;AACrB;AACA,QAAQ,OAAO,EAAE;AACjB,UAAU,aAAa,EAAE;AACzB,YAAY,OAAO;AACnB,WAAW;AACX,UAAU;AACV,YAAY;AACZ,WAAW;AACX,SAAS;AACT,OAAO,CAAC,CAAC;AACT,KAAK,CAAC;AACN,IAAI;AACJ;AACA,QAAQ,WAAW,EAAE;AACrB,QAAQ,UAAU,EAAE;AACpB;AACA;AACA,YAAY,MAAM,cAAc,GAAG;AACnC,YAAY,IAAI,cAAc,CAAC,MAAM,EAAE;AACvC,cAAc,cAAc,CAAC,OAAO,GAAG,CAAC;AACxC,aAAa;AACb,YAAY,OAAO,cAAc,CAAC;AAClC;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT,OAAO,CAAC,CAAC;AACT,KAAK,CAAC;AACN,IAAI,IAAI,CAAC;AACT,MAAM,MAAM,WAAW,GAAG;AAC1B,QAAQ,WAAW;AACnB,QAAQ,KAAK;AACb,OAAO,CAAC;AACR,MAAM,MAAM,YAAY,GAAG;AAC3B,QAAQ,MAAM;AACd,QAAQ;AACR,UAAU;AACV;AACA;AACA,OAAO,CAAC;AACR,MAAM;AACN,QAAQ,MAAM,EAAE;AAChB,QAAQ,UAAU,EAAE,SAAS,GAAG,aAAa,CAAC,IAAI;AAClD,QAAQ,OAAO,EAAE;AACjB,QAAQ,iBAAiB,EAAE,WAAW;AACtC,QAAQ,YAAY;AACpB,OAAO,CAAC,CAAC;AACT,KAAK,CAAC;AACN,IAAI,IAAI,GAAG,CAAC;AACZ,MAAM,GAAG,CAAC,cAAc,GAAG;AAC3B,QAAQ;AACR,OAAO,CAAC;AACR,KAAK;AACL,GAAG;AACH,CAAC,CAAC,CAAC;AACH,MAAM,CAAC;AACP,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC,CAAC;AACH,CAAC,CAAC,CAAC,CAAC;AACJ,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;AACjC,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC,CAAC;AACH,CAAC,CAAC,CAAC;;AC1II,MAAM,wCAAwC,GAAG,sCAAsC,CAAC;AAE/F,MAAM,CAAC,wCAAwC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,0BAA0B,EAAE,WAAW;AACpG,EAAE,SAAS,2BAA2B,CAAC,qBAAqB,EAAE,SAAS,EAAE,eAAe,EAAE;AAC1F,IAAI,MAAM,IAAI,GAAG,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC5C,IAAI,OAAO,qBAAqB,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;AAC7F,GAAG;AACH,EAAE,OAAO;AACT,IAAI,2BAA2B;AAC/B,GAAG,CAAC;AACJ,CAAC,CAAC;;ACVK,MAAM,6CAA6C,GAAG,2CAA2C,CAAC;AAEzG,MAAM,CAAC,6CAA6C,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,+BAA+B,EAAE,WAAW;AAC9G,EAAE,SAAS,sBAAsB,GAAG;AACpC,GAAG;AACH,EAAE,OAAO;AACT,IAAI,sBAAsB;AAC1B,GAAG,CAAC;AACJ,CAAC,CAAC;;ACRK,MAAM,0EAA0E,GAAG,oEAAoE,CAAC;AAE/J,MAAM,CAAC,0EAA0E,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,4BAA4B,EAAE;AAChI,EAAE,QAAQ;AACV,EAAE,qBAAqB;AACvB,EAAE,oBAAoB;AACtB,EAAE,SAAS,MAAM,EAAE,mBAAmB,EAAE,kBAAkB,EAAE;AAC5D,IAAI,MAAM,MAAM,GAAG,kBAAkB,CAAC,SAAS,EAAE,CAAC;AAClD,IAAI,MAAM,CAAC,MAAM,CAAC,mCAAmC,EAAE,WAAW;AAClE,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,eAAe,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,eAAe,KAAK,QAAQ,EAAE;AAC9G,QAAQ,MAAM,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;AAC5C,OAAO,MAAM;AACb,QAAQ,MAAM,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;AAC5C,QAAQ,MAAM,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;AAC7C,QAAQ,MAAM,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC;AAChD,OAAO;AACP,KAAK,CAAC,CAAC;AACP,IAAI,MAAM,CAAC,MAAM,CAAC,gCAAgC,EAAE,SAAS,MAAM,EAAE;AACrE,MAAM,IAAI,MAAM,EAAE;AAClB,QAAQ,MAAM,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;AAC7C,QAAQ,MAAM,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC;AAChD,OAAO;AACP,KAAK,CAAC,CAAC;AACP,GAAG;AACH,CAAC,CAAC;;ACxBK,MAAM,qEAAqE,GAAG,+DAA+D,CAAC;AAErJ,MAAM,CAAC,qEAAqE,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,uBAAuB,EAAE;AACtH,EAAE,QAAQ;AACV,EAAE,oBAAoB;AACtB,EAAE,SAAS,MAAM,EAAE,kBAAkB,EAAE;AACvC,IAAI,kBAAkB,CAAC,SAAS,EAAE,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC;AACjE,IAAI,kBAAkB,CAAC,SAAS,EAAE,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;AAC9D,GAAG;AACH,CAAC,CAAC;;ACTK,MAAM,0FAA0F,GAAG,kEAAkE,CAAC;AAE7K,MAAM,CAAC,0FAA0F,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,sCAAsC,EAAE;AAC1J,EAAE,QAAQ;AACV,EAAE,oBAAoB;AACtB,EAAE,SAAS,MAAM,EAAE,kBAAkB,EAAE;AACvC,IAAI,kBAAkB,CAAC,SAAS,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;AAC5D,IAAI,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE;AAClD,MAAM,IAAI,MAAM,EAAE;AAClB,QAAQ,kBAAkB,CAAC,SAAS,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;AAC7D,OAAO,MAAM;AACb,QAAQ,kBAAkB,CAAC,SAAS,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;AAC7D,OAAO;AACP,KAAK,CAAC,CAAC;AACP,GAAG;AACH,CAAC,CAAC;;ACfK,MAAM;AAEb,OAAO,CAAC,MAAM,CAAC,sFAAsF;AACrG,EAAE,OAAO;AACT,IAAI,QAAQ,EAAE,GAAG;AACjB,IAAI;AACJ,IAAI,KAAK,EAAE,EAAE;AACb,IAAI,gBAAgB,EAAE;AACtB,MAAM;AACN,KAAK;AACL,IAAI,YAAY,EAAE;AAClB,IAAI,UAAU,EAAE;AAChB,GAAG,CAAC;AACJ,CAAC,CAAC,CAAC,UAAU,CAAC;AACd,EAAE,IAAI,CAAC;AACP,IAAI,MAAM,YAAY,GAAG;AACzB,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC;AACjD,MAAM;AACN;AACA,QAAQ,WAAW,EAAE;AACrB,UAAU,kBAAkB,EAAE;AAC9B,SAAS;AACT,QAAQ,UAAU,EAAE,CAAC;AACrB,QAAQ;AACR,QAAQ;AACR,OAAO;AACP,KAAK,CAAC,CAAC;AACP,GAAG,CAAC;AACJ,EAAE,IAAI,CAAC,cAAc,GAAG;AACxB,IAAI,MAAM,YAAY,GAAG;AACzB,IAAI,YAAY,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;AAChC,IAAI,IAAI,CAAC;AACT,GAAG,CAAC;AACJ,CAAC,CAAC,CAAC;AACH;AACA,EAAE,aAAa,CAAC,GAAG,CAAC;AACpB;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvCO,MAAM,sEAAsE,GAAG,kEAAkE,CAAC;AAEzJ,MAAM,CAAC,sEAAsE,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,UAAU,EAAE,WAAW;AACjH,EAAE,OAAO,SAAS,KAAK,EAAE,cAAc,EAAE;AACzC,IAAI,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,KAAK,EAAE;AAC3C,MAAM,OAAO,KAAK,CAAC,MAAM,KAAK,cAAc,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC;AACtE,KAAK,CAAC,CAAC;AACP,GAAG,CAAC;AACJ,CAAC,CAAC;;ACLK,MAAM,oFAAoF,GAAG,qDAAqD,CAAC;AAE1J,OAAO,CAAC,MAAM,CAAC,oFAAoF,EAAE;AACrG,EAAE,kBAAkB;AACpB,EAAE,oBAAoB;AACtB,EAAE,sEAAsE;AACxE,EAAE,YAAY;AACd,CAAC,CAAC,CAAC,UAAU,CAAC,mCAAmC,EAAE;AACnD,EAAE,QAAQ;AACV,EAAE,aAAa;AACf,EAAE,gBAAgB;AAClB,EAAE,QAAQ;AACV,EAAE,aAAa;AACf,EAAE,SAAS,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,EAAE,WAAW,EAAE;AACrE,IAAI,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE;AAClD,MAAM,IAAI,MAAM,EAAE;AAClB,QAAQ,WAAW,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;AAChD,QAAQ,WAAW,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC;AACnD,OAAO,MAAM;AACb,QAAQ,WAAW,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC;AACrD,OAAO;AACP,KAAK,CAAC,CAAC;AACP,IAAI,IAAI,CAAC,YAAY,GAAG,CAAC,KAAK,KAAK;AACnC,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;AACjD,MAAM,MAAM,CAAC,OAAO,CAAC,aAAa,GAAG,KAAK,CAAC;AAC3C,MAAM,WAAW,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;AAC9C,KAAK,CAAC;AACN,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,oBAAoB,EAAE;AAC3D,MAAM,MAAM;AACZ,MAAM,WAAW;AACjB,MAAM,cAAc;AACpB,MAAM,MAAM;AACZ,KAAK,CAAC,CAAC,CAAC;AACR,IAAI,IAAI,CAAC,YAAY,GAAG;AACxB,MAAM,IAAI,EAAE,SAAS,KAAK,EAAE;AAC5B,QAAQ,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,iBAAiB,GAAG,4BAA4B,GAAG,gBAAgB,CAAC;AACrH,QAAQ,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACnC,OAAO;AACP,KAAK,CAAC;AACN,IAAI,IAAI,CAAC,aAAa,GAAG;AACzB,MAAM,IAAI,EAAE,SAAS,MAAM,EAAE;AAC7B,QAAQ,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,iBAAiB,GAAG,6BAA6B,GAAG,iBAAiB,CAAC;AACvH,QAAQ,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACpC,OAAO;AACP,KAAK,CAAC;AACN,GAAG;AACH,CAAC,CAAC;;AClDK,MAAM;AAEb,MAAM,CAAC,sEAAsE,EAAE,EAAE,CAAC,CAAC;AACnF,EAAE,OAAO;AACT,IAAI,QAAQ,EAAE,GAAG;AACjB,IAAI,WAAW,EAAE;AACjB,IAAI,KAAK,EAAE,EAAE;AACb,IAAI;AACJ,MAAM,OAAO,EAAE,GAAG;AAClB,KAAK;AACL,IAAI,YAAY;AAChB,IAAI,UAAU,EAAE;AAChB,GAAG,CAAC;AACJ,CAAC,CAAC,CAAC;AACH,CAAC,CAAC,CAAC;AACH,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,gBAAgB,EAAE;AACnD,EAAE;AACF;AACA;;;;;;;;;;;;;;;;;;;;;AClBO,MAAM,sFAAsF,GAAG,gEAAgE,CAAC;AAEvK,MAAM,CAAC,sFAAsF,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,oCAAoC,EAAE;AACpJ,EAAE,QAAQ;AACV,EAAE,SAAS,MAAM,EAAE;AACnB,IAAI,IAAI,OAAO,MAAM,CAAC,OAAO,CAAC,cAAc,KAAK,WAAW,EAAE;AAC9D,MAAM,MAAM,CAAC,OAAO,CAAC,cAAc,GAAG,EAAE,CAAC;AACzC,KAAK;AACL,IAAI,IAAI,CAAC,oBAAoB,GAAG;AAChC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE;AACxC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE;AAC3C,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE;AACzC,KAAK,CAAC;AACN,IAAI,IAAI,CAAC,uBAAuB,GAAG,WAAW;AAC9C,MAAM,OAAO,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,QAAQ,KAAK,MAAM,CAAC;AAC/D,KAAK,CAAC;AACN,IAAI,IAAI,CAAC,yBAAyB,GAAG,SAAS,WAAW,EAAE;AAC3D,MAAM,IAAI,WAAW,IAAI,IAAI,EAAE;AAC/B,QAAQ,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,QAAQ,GAAG,IAAI,CAAC;AACtD,QAAQ,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,GAAG,IAAI,CAAC;AAClD,QAAQ,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,WAAW,GAAG,IAAI,CAAC;AACzD,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,uBAAuB,EAAE,EAAE;AAClD,QAAQ,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,WAAW,GAAG,IAAI,CAAC;AACzD,OAAO;AACP,KAAK,CAAC;AACN,GAAG;AACH,CAAC,CAAC;;AC1BK,MAAM;AAEb,MAAM,CAAC,kFAAkF,EAAE,EAAE,CAAC,CAAC;AAC/F,EAAE,sCAAsC;AACxC,EAAE,WAAW;AACb,IAAI,OAAO;AACX,MAAM,QAAQ,EAAE,GAAG;AACnB;AACA,MAAM,KAAK,EAAE;AACb,QAAQ,OAAO,EAAE;AACjB,OAAO;AACP,KAAK,CAAC;AACN,GAAG;AACH,CAAC,CAAC,CAAC;AACH,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;AACtB,EAAE;AACF;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AClBO,MAAM,oFAAoF,GAAG,gEAAgE,CAAC;AAErK,MAAM,CAAC,oFAAoF,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,mCAAmC,EAAE;AACjJ,EAAE,QAAQ;AACV,EAAE,SAAS,MAAM,EAAE;AACnB,IAAI,IAAI,CAAC,UAAU,GAAG,WAAW;AACjC,MAAM,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,IAAI,KAAK,EAAE;AAClD,QAAQ,MAAM,CAAC,OAAO,CAAC,KAAK,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AACnD,OAAO,MAAM;AACb,QAAQ,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;AAC5D,OAAO;AACP,KAAK,CAAC;AACN,IAAI,WAAW,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC;AAC/C,IAAI,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE;AAClD,MAAM,IAAI,MAAM,EAAE;AAClB,QAAQ,WAAW,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;AAChD,OAAO,MAAM;AACb,QAAQ,WAAW,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;AAChD,OAAO;AACP,KAAK,CAAC,CAAC;AACP,GAAG;AACH,CAAC,CAAC;;ACtBK,MAAM;AAEb,MAAM,CAAC,wEAAwE,EAAE,EAAE,CAAC,CAAC;AACrF,EAAE,sCAAsC;AACxC,EAAE,WAAW;AACb,IAAI,OAAO;AACX,MAAM,QAAQ,EAAE,GAAG;AACnB;AACA,MAAM,KAAK,EAAE;AACb,QAAQ,OAAO,EAAE;AACjB,OAAO;AACP,KAAK,CAAC;AACN,GAAG;AACH,CAAC,CAAC,CAAC;AACH,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;AACtB,EAAE;AACF;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjBO,MAAM,oFAAoF,GAAG,+DAA+D,CAAC;AAEpK,MAAM,CAAC,oFAAoF,EAAE;AAC7F,EAAE,0BAA0B;AAC5B,CAAC,CAAC,CAAC,UAAU,CAAC,mCAAmC,EAAE;AACnD,EAAE,QAAQ;AACV,EAAE,oBAAoB;AACtB,EAAE,SAAS,MAAM,EAAE,kBAAkB,EAAE;AACvC,IAAI,WAAW,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;AAC5C,IAAI,SAAS,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE;AACzC,MAAM,kBAAkB,CAAC,sBAAsB,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,GAAG,EAAE;AACrI,QAAQ,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;AACtC,UAA+B,MAAM,CAAC,OAAO,CAAC,aAAa;AAC3D,UAAU,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC;AAC/D,UAAU,MAAM,CAAC,OAAO,CAAC,mBAAmB,GAAG,EAAE,CAAC;AAClD,UAAU,MAAM,CAAC,OAAO,CAAC,QAAQ,GAAG,EAAE,CAAC;AACvC,UAAU,aAAa,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,SAAS,KAAK,EAAE;AAC5D,YAAY,IAAI,KAAK,CAAC,KAAK,EAAE;AAC7B,cAAc,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,YAAY,KAAK;AACpD,gBAAgB,IAAI,YAAY,CAAC,OAAO,KAAK,MAAM,CAAC,OAAO,CAAC,WAAW,IAAI,YAAY,CAAC,MAAM,KAAK,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE;AAC1H,kBAAkB,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AAC7D,kBAAkB,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,MAAM,EAAE;AAC5D,oBAAoB,IAAI,SAAS,GAAG,IAAI,CAAC;AACzC,oBAAoB,IAAI,MAAM,CAAC,OAAO,EAAE;AACxC,sBAAsB,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,MAAM,EAAE;AAC1D,wBAAwB,IAAI,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,qBAAqB,EAAE;AAC7E,0BAA0B,SAAS,GAAG,KAAK,CAAC;AAC5C,yBAAyB;AACzB,uBAAuB,CAAC,CAAC;AACzB,qBAAqB;AACrB,oBAAoB,IAAI,SAAS,EAAE;AACnC,sBAAsB,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC3E,sBAAsB,IAAI,MAAM,CAAC,IAAI,KAAK,cAAc,EAAE;AAC1D,wBAAwB,MAAM,CAAC,OAAO,CAAC,cAAc,GAAG,cAAc,CAAC;AACvE,uBAAuB;AACvB,qBAAqB;AACrB,mBAAmB,CAAC,CAAC;AACrB,iBAAiB;AACjB,eAAe,CAAC,CAAC;AACjB,aAAa;AACb,WAAW,CAAC,CAAC;AACb,SAAS,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;AAC5C,UAAU,MAAM,oBAAoB,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AAC9C,UAAU,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC;AAC3D,UAAU,MAAM,CAAC,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;AAC7C,UAAU,MAAM,CAAC,OAAO,CAAC,mBAAmB,GAAG,EAAE,CAAC;AAClD,UAAU,MAAM,CAAC,OAAO,CAAC,QAAQ,GAAG,EAAE,CAAC;AACvC,UAAU,aAAa,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,SAAS,KAAK,EAAE;AAC5D,YAAY,IAAI,KAAK,CAAC,KAAK,EAAE;AAC7B,cAAc,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,YAAY,KAAK;AACpD,gBAAgB,IAAI,YAAY,CAAC,OAAO,KAAK,MAAM,CAAC,OAAO,CAAC,WAAW,IAAI,YAAY,CAAC,MAAM,KAAK,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE;AAC1H,kBAAkB,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AAC7D,iBAAiB;AACjB,gBAAgB,IAAI,YAAY,CAAC,OAAO,KAAK,MAAM,CAAC,OAAO,CAAC,WAAW,IAAI,YAAY,CAAC,MAAM,KAAK,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,IAAI,KAAK,2BAA2B,IAAI,YAAY,CAAC,IAAI,IAAI,oBAAoB,CAAC,IAAI,IAAI,IAAI,KAAK,qBAAqB,IAAI,YAAY,CAAC,IAAI,KAAK,YAAY,CAAC,IAAI,CAAC,EAAE;AACnS,kBAAkB,MAAM,CAAC,OAAO,CAAC,YAAY,GAAG,YAAY,CAAC;AAC7D,kBAAkB,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,MAAM,EAAE;AAC5D,oBAAoB,IAAI,SAAS,GAAG,IAAI,CAAC;AACzC,oBAAoB,IAAI,MAAM,CAAC,OAAO,EAAE;AACxC,sBAAsB,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,MAAM,EAAE;AAC1D,wBAAwB,IAAI,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,qBAAqB,EAAE;AAC7E,0BAA0B,SAAS,GAAG,KAAK,CAAC;AAC5C,yBAAyB;AACzB,uBAAuB,CAAC,CAAC;AACzB,qBAAqB;AACrB,oBAAoB,IAAI,SAAS,EAAE;AACnC,sBAAsB,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC3E,qBAAqB;AACrB,mBAAmB,CAAC,CAAC;AACrB,iBAAiB;AACjB,eAAe,CAAC,CAAC;AACjB,aAAa;AACb,WAAW,CAAC,CAAC;AACb,SAAS;AACT,OAAO,CAAC,CAAC;AACT,KAAK;AACL,IAAI,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE;AAC7D,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,yBAAyB,GAAG,IAAI,CAAC;AAChE,MAAM,MAAM,CAAC,OAAO,CAAC,mBAAmB,GAAG,EAAE,CAAC;AAC9C,MAAM,IAAI,MAAM,CAAC,OAAO,CAAC,gBAAgB,KAAK,IAAI,IAAI,OAAO,MAAM,CAAC,OAAO,CAAC,gBAAgB,KAAK,WAAW,EAAE;AAC9G,QAAQ,MAAM,CAAC,eAAe,GAAG,IAAI,CAAC;AACtC,OAAO;AACP,MAAM,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,gBAAgB,EAAE,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;AACxF,KAAK;AACL,IAAI,IAAI,CAAC,mBAAmB,GAAG,SAAS,IAAI,EAAE;AAC9C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,yBAAyB,GAAG,IAAI,CAAC;AAChE,MAAM,WAAW,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC;AACjD,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,aAAa,CAAC;AACrE,MAAM,IAAI,gBAAgB,GAAG,IAAI,CAAC;AAClC,MAAM,IAAI,aAAa,EAAE;AACzB,QAAQ,MAAM,kBAAkB,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AAChF,QAAQ,IAAI,kBAAkB,EAAE;AAChC,UAAU,gBAAgB,GAAG,OAAO,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC;AACnG,SAAS;AACT,OAAO;AACP,MAAM,IAAI,IAAI,KAAK,IAAI,EAAE;AACzB,QAAQ,MAAM,CAAC,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;AAC/C,OAAO;AACP,MAAM,MAAM,CAAC,OAAO,CAAC,mBAAmB,GAAG,EAAE,CAAC;AAC9C,MAAM,MAAM,CAAC,OAAO,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;AACzD,MAAM,oBAAoB,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AAClD,MAAM,eAAe,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;AAC9C,KAAK,CAAC;AACN,GAAG;AACH,CAAC,CAAC;;ACzGK,MAAM;AAEb,MAAM,CAAC,2FAA2F,EAAE,EAAE,CAAC,CAAC;AACxG,EAAE,sCAAsC;AACxC,EAAE,WAAW;AACb,IAAI,OAAO;AACX,MAAM,QAAQ,EAAE,GAAG;AACnB;AACA,QAAQ,OAAO,EAAE,GAAG;AACpB,OAAO;AACP,MAAM;AACN,KAAK,CAAC;AACN,GAAG;AACH,CAAC,CAAC,CAAC;AACH,MAAM,CAAC;AACP,EAAE,aAAa,CAAC,GAAG,CAAC,wGAA8D;AAClF;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AClBO,MAAM,wFAAwF,GAAG,kEAAkE,CAAC;AAE3K,MAAM,CAAC,wFAAwF,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,qCAAqC,EAAE;AACvJ,EAAE,QAAQ;AACV,EAAE,SAAS,MAAM,EAAE;AACnB,IAAI,WAAW,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;AAC9C,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,GAAG;AAClC,MAAM,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI;AAC/B,KAAK,CAAC;AACN,IAAI,MAAM,CAAC,OAAO,CAAC,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;AAC1D,IAAI,IAAI,CAAC,WAAW,GAAG,SAAS,IAAI,EAAE;AACtC,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;AACjC,MAAM,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;AACnE,MAAM,MAAM,CAAC,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC;AAC3E,KAAK,CAAC;AACN,IAAI,IAAI,CAAC,sBAAsB,GAAG,SAAS,IAAI,EAAE;AACjD,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC;AAC7D,MAAM,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;AACnC,MAAM,WAAW,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC;AACnD,KAAK,CAAC;AACN,IAAI,IAAI,CAAC,WAAW,GAAG,WAAW;AAClC,MAAM,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE;AACvC,QAAQ,OAAO,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC;AAChD,OAAO,MAAM;AACb,QAAQ,OAAO,kCAAkC,CAAC;AAClD,OAAO;AACP,KAAK,CAAC;AACN,GAAG;AACH,CAAC,CAAC;;AC7BK,MAAM;AAEb,MAAM,CAAC,+FAA+F,EAAE,EAAE,CAAC,CAAC;AAC5G,EAAE,OAAO;AACT,IAAI,QAAQ,EAAE,GAAG;AACjB,IAAI,KAAK,EAAE;AACX,MAAM,OAAO,EAAE,GAAG;AAClB,KAAK;AACL,IAAI;AACJ,GAAG,CAAC;AACJ,CAAC,CAAC,CAAC;AACH,MAAM,CAAC,OAAO,CAAC,MAAM;AACrB,EAAE;AACF;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACfO,MAAM,qFAAqF,GAAG,iEAAiE,CAAC;AAEvK,MAAM,CAAC,qFAAqF,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,oCAAoC,EAAE;AACnJ,EAAE,QAAQ;AACV,EAAE,SAAS,MAAM,EAAE;AACnB,IAAI,WAAW,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;AAC7C,IAAI,WAAW,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC;AAChD,IAAI,MAAM,CAAC,OAAO,CAAC,qBAAqB,GAAG;AAC3C,MAAM,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,iBAAiB;AAC1C,KAAK,CAAC;AACN,IAAI,IAAI,CAAC,oBAAoB,GAAG,SAAS,aAAa,EAAE;AACxD,MAAM,MAAM,CAAC,OAAO,CAAC,iBAAiB,GAAG,aAAa,CAAC,EAAE,CAAC;AAC1D,MAAM,WAAW,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC;AAClD,KAAK,CAAC;AACN,GAAG;AACH,CAAC,CAAC;;;ACbF;AACA,EAAE,sCAAsC;AACxC,EAAE,SAAS,oCAAoC,EAAE;AACjD,IAAI,OAAO;AACX,MAAM,QAAQ,EAAE,GAAG;AACnB,MAAM,KAAK,EAAE;AACb;AACA,OAAO;AACP,MAAM,WAAW,EAAE;AACnB,MAAM,IAAI,EAAE;AACZ,QAAQ,KAAK,CAAC;AACd,QAAQ,KAAK,CAAC;AACd,UAAU,OAAO;AACjB,SAAS,CAAC;AACV,QAAQ,KAAK,CAAC;AACd,UAAU,KAAK,CAAC,UAAU,GAAG;AAC7B,UAAU,oCAAoC,CAAC;AAC/C;AACA,WAAW,CAAC,CAAC;AACb,SAAS,CAAC;AACV,OAAO;AACP;AACA,GAAG;AACH,CAAC,CAAC,CAAC;AACH,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,gBAAgB,EAAE,SAAS,aAAa,EAAE;AAC3E,EAAE,aAAa,CAAC,GAAG,CAAC;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChCA;AACA,EAAE,OAAO;AACT,IAAI,QAAQ,EAAE,GAAG;AACjB,IAAI,WAAW,EAAE,yEAAyE;AAC1F,IAAI,KAAK,EAAE,EAAE;AACb,IAAI,gBAAgB,EAAE;AACtB,MAAM;AACN,KAAK;AACL,IAAI,YAAY,EAAE;AAClB,IAAI,UAAU,EAAE;AAChB,GAAG,CAAC;AACJ,CAAC,CAAC,CAAC,UAAU,CAAC;AACd,EAAE;AACF,EAAE,WAAW;AACb,IAAI,IAAI,CAAC,YAAY,GAAG,WAAW;AACnC,MAAM;AACN;AACA,GAAG;AACH,CAAC,CAAC,CAAC;AACH,MAAM,CAAC,OAAO,CAAC;AACf,EAAE,aAAa,CAAC,GAAG,CAAC;AACpB;AACA;AACA;AACA;;;;;;;;;;;;;;;AC3BO,MAAM;AAEb,MAAM,CAAC,+DAA+D,EAAE,EAAE,CAAC,CAAC;AAC5E,EAAE,OAAO;AACT,IAAI,QAAQ,EAAE,GAAG;AACjB,IAAI,WAAW,EAAE,0EAA0E;AAC3F,IAAI,KAAK;AACT,IAAI;AACJ,MAAM,OAAO,EAAE;AACf,KAAK;AACL,IAAI,YAAY,EAAE,IAAI;AACtB,IAAI,UAAU,EAAE;AAChB,MAAM;AACN,MAAM,SAAS,MAAM,EAAE;AACvB,QAAQ,IAAI,CAAC;AACb,UAAU,IAAI;AACd,YAAY,MAAM,CAAC,EAAE,CAAC;AACtB,WAAW;AACX,SAAS,CAAC;AACV,OAAO;AACP,KAAK;AACL,GAAG,CAAC;AACJ,CAAC,CAAC,CAAC;AACH,MAAM;AACN,EAAE;AACF;;;;;;;;;;;;;;;;;;;;;;;ACNO,MAAM,8DAA8D,GAAG,uCAAuC,CAAC;AAEtH,MAAM,CAAC,8DAA8D,EAAE;AACvE,EAAE,oFAAoF;AACtF,EAAE,oFAAoF;AACtF,EAAE,0EAA0E;AAC5E,EAAE,qEAAqE;AACvE,EAAE,qFAAqF;AACvF,EAAE,0FAA0F;AAC5F,EAAE,kFAAkF;AACpF,EAAE,wEAAwE;AAC1E,EAAE,oFAAoF;AACtF,EAAE,sFAAsF;AACxF,EAAE,2FAA2F;AAC7F,EAAE,sEAAsE;AACxE,EAAE,4FAA4F;AAC9F,EAAE,yCAAyC;AAC3C,EAAE,sFAAsF;AACxF,EAAE,wFAAwF;AAC1F,EAAE,+FAA+F;AACjG,EAAE,+DAA+D;AACjE,EAAE,8DAA8D;AAChE,CAAC,CAAC;;AChCK,MAAM,4DAA4D,GAAG,+CAA+C,CAAC;AAE5H,OAAO,CAAC,MAAM,CAAC,4DAA4D,EAAE;AAC7E,EAAE,wBAAwB;AAC1B,EAAE,0BAA0B;AAC5B,EAAE,qBAAqB;AACvB,EAAE,yBAAyB;AAC3B,EAAE,wCAAwC;AAC1C,CAAC,CAAC,CAAC,OAAO,CAAC,sCAAsC,EAAE;AACnD,EAAE,IAAI;AACN,EAAE,kBAAkB;AACpB,EAAE,qBAAqB;AACvB,EAAE,kBAAkB;AACpB,EAAE,oBAAoB;AACtB,EAAE,0BAA0B;AAC5B,EAAE,SAAS,EAAE,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,wBAAwB,EAAE;AACtH,IAAI,MAAM,aAAa,GAAG,CAAC,cAAc,EAAE,iBAAiB,EAAE,aAAa,CAAC,CAAC;AAC7E,IAAI,MAAM,oBAAoB,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;AACnE,IAAI,MAAM,gBAAgB,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAC5C,IAAI,MAAM,mBAAmB,GAAG;AAChC,MAAM,gBAAgB;AACtB,MAAM,gBAAgB;AACtB,MAAM,2BAA2B;AACjC,MAAM,2BAA2B;AACjC,MAAM,SAAS;AACf,KAAK,CAAC;AACN,IAAI,SAAS,sBAAsB,CAAC,OAAO,EAAE;AAC7C,MAAM,OAAO,CAAC,WAAW,GAAG;AAC5B,QAAQ,gBAAgB,EAAE,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC;AACxD,QAAQ,mBAAmB,EAAE,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC;AAC9D,OAAO,CAAC;AACR,KAAK;AACL,IAAI,SAAS,gBAAgB,CAAC,WAAW,EAAE,OAAO,EAAE;AACpD,MAAM,OAAO,EAAE,CAAC,GAAG,CAAC;AACpB,QAAQ,cAAc,CAAC,4BAA4B,CAAC,OAAO,CAAC;AAC5D,QAAQ,mBAAmB,CAAC,kBAAkB,EAAE;AAChD,QAAQ,kBAAkB,CAAC,iBAAiB,CAAC,WAAW,CAAC,IAAI,CAAC;AAC9D,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,yBAAyB,EAAE,cAAc,EAAE,aAAa,CAAC,EAAE;AACnF,QAAQ,OAAO,CAAC,WAAW,GAAG;AAC9B,UAAU,yBAAyB;AACnC,UAAU,cAAc;AACxB,UAAU,aAAa;AACvB,UAAU,aAAa,EAAE,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC;AACpD,UAAU,oBAAoB,EAAE,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC;AAClE,UAAU,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,yBAAyB,CAAC;AACrD,UAAU,QAAQ,EAAE,EAAE;AACtB,SAAS,CAAC;AACV,QAAQ,mBAAmB,CAAC,OAAO,CAAC,CAAC;AACrC,OAAO,CAAC,CAAC;AACT,KAAK;AACL,IAAI,SAAS,sBAAsB,CAAC,OAAO,EAAE;AAC7C,MAAM,MAAM,MAAM,GAAG;AACrB,QAAQ,KAAK,EAAE,EAAE;AACjB,OAAO,CAAC;AACR,MAAM,IAAI,OAAO,CAAC,MAAM,EAAE;AAC1B,QAAQ,MAAM,OAAO,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACvC,QAAQ,OAAO,CAAC,IAAI,CAAC,8BAA8B,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC;AACpE,QAAQ,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC;AACnC,OAAO,MAAM;AACb,QAAQ,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,aAAa,GAAG,EAAE,CAAC;AACxD,OAAO;AACP,MAAM,OAAO,MAAM,CAAC;AACpB,KAAK;AACL,IAAI,SAAS,8BAA8B,CAAC,OAAO,EAAE;AACrD,MAAM,MAAM,CAAC,GAAG,OAAO,CAAC;AACxB,MAAM,MAAM,MAAM,GAAG;AACrB,QAAQ,KAAK,EAAE,EAAE;AACjB,OAAO,CAAC;AACR,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AACnC,MAAM,MAAM,EAAE,yBAAyB,EAAE,GAAG,CAAC,CAAC,WAAW,CAAC;AAC1D,MAAM,MAAM,EAAE,0BAA0B,EAAE,GAAG,yBAAyB,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;AACtF,MAAM,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;AACtC,QAAQ,OAAO,MAAM,CAAC;AACtB,OAAO;AACP,MAAM,MAAM,QAAQ,GAAG,wBAAwB,CAAC,2BAA2B,CAAC,0BAA0B,EAAE,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5I,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,YAAY,CAAC;AAC1C,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,YAAY,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE;AAC/G,QAAQ,MAAM,CAAC,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC,YAAY,CAAC;AACnD,QAAQ,CAAC,CAAC,YAAY,GAAG,IAAI,CAAC;AAC9B,OAAO;AACP,MAAM,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,aAAa,GAAG,QAAQ,CAAC;AACtD,MAAM,OAAO,MAAM,CAAC;AACpB,KAAK;AACL,IAAI,SAAS,eAAe,CAAC,OAAO,EAAE;AACtC,MAAM,MAAM,MAAM,GAAG;AACrB,QAAQ,KAAK,EAAE,EAAE;AACjB,OAAO,CAAC;AACR,MAAM,IAAI,cAAc,GAAG,IAAI,CAAC;AAChC,MAAM,IAAI,OAAO,CAAC,SAAS,CAAC,qBAAqB,EAAE;AACnD,QAAQ,OAAO,MAAM,CAAC;AACtB,OAAO;AACP,MAAM,IAAI,OAAO,CAAC,MAAM,EAAE;AAC1B,QAAQ,cAAc,GAAG,OAAO,CAAC,WAAW,CAAC,aAAa,CAAC,MAAM,CAAC,SAAS,KAAK,EAAE;AAClF,UAAU,OAAO,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AAC1D,SAAS,CAAC,CAAC,GAAG,CAAC,SAAS,KAAK,EAAE;AAC/B,UAAU,OAAO;AACjB,YAAY,SAAS,EAAE,KAAK,CAAC,SAAS;AACtC,YAAY,GAAG,EAAE,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;AAClE,WAAW,CAAC;AACZ,SAAS,CAAC,CAAC;AACX,QAAQ,IAAI,OAAO,CAAC,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,KAAK,EAAE;AACpE,UAAU,OAAO,KAAK,CAAC,SAAS,KAAK,OAAO,CAAC,OAAO,CAAC;AACrD,SAAS,CAAC,EAAE;AACZ,UAAU,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;AACtC,UAAU,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;AACjC,SAAS;AACT,OAAO,MAAM;AACb,QAAQ,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;AAC/B,OAAO;AACP,MAAM,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,GAAG,cAAc,CAAC;AAC3D,MAAM,OAAO,MAAM,CAAC;AACpB,KAAK;AACL,IAAI,SAAS,cAAc,CAAC,OAAO,EAAE;AACrC,MAAM,MAAM,MAAM,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AACnC,MAAM,MAAM,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC;AACxD,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;AAC3B,QAAQ,OAAO,MAAM,CAAC;AACtB,OAAO;AACP,MAAM,IAAI,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,yBAAyB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;AAC1H,MAAM,mBAAmB,GAAG,mBAAmB,IAAI,EAAE,CAAC;AACtD,MAAM,iBAAiB,GAAG,iBAAiB,IAAI,EAAE,CAAC;AAClD,MAAM,YAAY,CAAC,KAAK,GAAG,mBAAmB,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,iBAAiB,GAAG,EAAE,CAAC;AACjG,MAAM,OAAO,MAAM,CAAC;AACpB,KAAK;AACL,IAAI,SAAS,yBAAyB,CAAC,OAAO,EAAE;AAChD,MAAM,MAAM,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,cAAc,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI;AAC3F,QAAQ,KAAK,EAAE,EAAE;AACjB,OAAO,CAAC;AACR,MAAM,OAAO,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC;AAC/E,KAAK;AACL,IAAI,SAAS,6BAA6B,CAAC,OAAO,EAAE;AACpD,MAAM,MAAM,MAAM,GAAG;AACrB,QAAQ,KAAK,EAAE,EAAE;AACjB,OAAO,CAAC;AACR,MAAM,IAAI,cAAc,CAAC;AACzB,MAAM,IAAI,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,EAAE;AACvD,QAAQ,cAAc,GAAG,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC;AACrE,OAAO;AACP,MAAM,MAAM,yBAAyB,GAAG,yBAAyB,CAAC,OAAO,CAAC,CAAC;AAC3E,MAAM,IAAI,OAAO,CAAC,qBAAqB,EAAE;AACzC,QAAQ,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC;AAC7C,QAAQ,MAAM,CAAC,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;AAC3C,OAAO;AACP,MAAM,IAAI,cAAc,IAAI,yBAAyB,EAAE;AACvD,QAAQ,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,GAAG,yBAAyB,CAAC;AAChF,QAAQ,MAAM,CAAC,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;AAC3C,OAAO;AACP,MAAM,IAAI,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,KAAK,EAAE,EAAE;AAC9D,QAAQ,OAAO,CAAC,SAAS,CAAC,wBAAwB,GAAG,KAAK,CAAC;AAC3D,OAAO,MAAM;AACb,QAAQ,OAAO,CAAC,SAAS,CAAC,wBAAwB,GAAG,IAAI,CAAC;AAC1D,OAAO;AACP,MAAM,OAAO,MAAM,CAAC;AACpB,KAAK;AACL,IAAI,SAAS,qBAAqB,CAAC,OAAO,EAAE,0BAA0B,EAAE;AACxE,MAAM,OAAO,gBAAgB,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,WAAW;AAC7E,QAAQ,OAAO,mBAAmB,CAAC,oBAAoB,EAAE,CAAC,IAAI,CAAC,SAAS,cAAc,EAAE;AACxF,UAAU,OAAO,CAAC,WAAW,CAAC,cAAc,GAAG,cAAc,CAAC;AAC9D,UAAU,IAAI,CAAC,0BAA0B,EAAE;AAC3C,YAAY,6BAA6B,CAAC,OAAO,CAAC,CAAC;AACnD,WAAW;AACX,SAAS,CAAC,CAAC;AACX,OAAO,CAAC,CAAC;AACT,KAAK;AACL,IAAI,SAAS,oBAAoB,CAAC,aAAa,EAAE;AACjD,MAAM,OAAO,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC;AACtE,KAAK;AACL,IAAI,SAAS,4BAA4B,CAAC,OAAO,EAAE;AACnD,MAAM,MAAM,MAAM,GAAG;AACrB,QAAQ,KAAK,EAAE,EAAE;AACjB,OAAO,CAAC;AACR,MAAM,MAAM,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC;AAC5C,MAAM,MAAM,gBAAgB,GAAG,oBAAoB,CAAC,OAAO,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;AACvF,MAAM,IAAI,OAAO,IAAI,OAAO,CAAC,aAAa,EAAE;AAC5C,QAAQ,MAAM,OAAO,GAAG,CAAC,CAAC,YAAY,CAAC,gBAAgB,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;AAChF,QAAQ,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAChD,QAAQ,OAAO,CAAC,aAAa,GAAG,OAAO,CAAC;AACxC,QAAQ,IAAI,OAAO,CAAC,MAAM,EAAE;AAC5B,UAAU,MAAM,CAAC,KAAK,CAAC,aAAa,GAAG,OAAO,CAAC;AAC/C,SAAS;AACT,OAAO;AACP,MAAM,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,aAAa,GAAG,gBAAgB,CAAC;AACpE,MAAM,OAAO,MAAM,CAAC;AACpB,KAAK;AACL,IAAI,SAAS,oBAAoB,CAAC,OAAO,EAAE,0BAA0B,EAAE;AACvE,MAAM,OAAO,kBAAkB,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,aAAa,EAAE;AACxF,QAAQ,OAAO,CAAC,WAAW,CAAC,aAAa,GAAG,aAAa,CAAC;AAC1D,QAAQ,IAAI,CAAC,0BAA0B,EAAE;AACzC,UAAU,4BAA4B,CAAC,OAAO,CAAC,CAAC;AAChD,SAAS;AACT,OAAO,CAAC,CAAC;AACT,KAAK;AACL,IAAI,SAAS,sBAAsB,CAAC,OAAO,EAAE;AAC7C,MAAM,MAAM,MAAM,GAAG;AACrB,QAAQ,KAAK,EAAE,EAAE;AACjB,OAAO,CAAC;AACR,MAAM,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC,aAAa,CAAC;AACrD,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE;AACrD,QAAQ,OAAO,EAAE,CAAC,OAAO,KAAK,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC;AAClF,OAAO,CAAC,CAAC;AACT,MAAM,OAAO,CAAC,aAAa,GAAG,oBAAoB,CAAC,UAAU,CAAC,CAAC;AAC/D,MAAM,OAAO,CAAC,SAAS,CAAC,uBAAuB,GAAG,IAAI,CAAC;AACvD,MAAM,OAAO,MAAM,CAAC;AACpB,KAAK;AACL,IAAI,SAAS,mBAAmB,CAAC,GAAG,EAAE;AACtC,MAAM,GAAG,CAAC,aAAa,GAAG,SAAS,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,EAAE;AAC1E,QAAQ,MAAM,MAAM,GAAG;AACvB,UAAU,KAAK,EAAE,EAAE;AACnB,SAAS,CAAC;AACV,QAAQ,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,WAAW,EAAE;AACnD,UAAU,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,sBAAsB,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC;AAC9E,UAAU,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,6BAA6B,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC;AACrF,UAAU,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,sBAAsB,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC;AAC9E,UAAU,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC;AACtE,SAAS;AACT,QAAQ,IAAI,CAAC,MAAM,EAAE;AACrB,UAAU,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;AAC1C,UAAU,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;AAC1C,UAAU,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;AAC9B,UAAU,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;AAC3C,UAAU,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;AAChC,UAAU,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;AACxC,UAAU,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;AACtC,UAAU,OAAO,CAAC,mBAAmB,GAAG,EAAE,CAAC;AAC3C,UAAU,OAAO,CAAC,SAAS,CAAC,yBAAyB,GAAG,KAAK,CAAC;AAC9D,UAAU,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC;AAC/C,UAAU,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;AAC3C,UAAU,OAAO,CAAC,YAAY,GAAG,KAAK,CAAC;AACvC,UAAU,OAAO,CAAC,KAAK,GAAG,EAAE,CAAC;AAC7B,SAAS;AACT,QAAQ,OAAO,MAAM,CAAC;AACtB,OAAO,CAAC;AACR,MAAM,GAAG,CAAC,kBAAkB,GAAG,SAAS,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE;AAC5E,QAAQ,MAAM,MAAM,GAAG;AACvB,UAAU,KAAK,EAAE,EAAE;AACnB,SAAS,CAAC;AACV,QAAQ,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;AAChD,QAAQ,IAAI,OAAO,CAAC,WAAW,EAAE;AACjC,UAAU,MAAM,iBAAiB,GAAG,WAAW,CAAC,yBAAyB,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI;AAClG,YAAY,OAAO,EAAE,EAAE;AACvB,YAAY,cAAc,EAAE,IAAI;AAChC,WAAW,CAAC;AACZ,UAAU,WAAW,CAAC,QAAQ,CAAC,OAAO,GAAG,iBAAiB,CAAC,OAAO,CAAC;AACnE,UAAU,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC;AAC1D,YAAY,IAAI,EAAE,OAAO,CAAC,MAAM;AAChC,WAAW,CAAC,CAAC,KAAK,EAAE,EAAE;AACtB,YAAY,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;AAClC,YAAY,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;AACvC,WAAW,MAAM;AACjB,YAAY,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC;AACvF,WAAW;AACX,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE;AAC9B,YAAY,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,sBAAsB,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC;AAChF,WAAW;AACX,UAAU,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,sBAAsB,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC;AAC9E,SAAS,MAAM;AACf,UAAU,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;AAChC,SAAS;AACT,QAAQ,OAAO,MAAM,CAAC;AACtB,OAAO,CAAC;AACR,KAAK;AACL,IAAI,SAAS,oBAAoB,CAAC,OAAO,EAAE;AAC3C,MAAM,OAAO,gBAAgB,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,WAAW;AAC5E,QAAQ,OAAO,wBAAwB,CAAC,mBAAmB,EAAE,CAAC,IAAI,CAAC,SAAS,aAAa,EAAE;AAC3F,UAAU,OAAO,CAAC,WAAW,CAAC,aAAa,GAAG,aAAa,CAAC;AAC5D,UAAU,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAC1C,SAAS,CAAC,CAAC;AACX,OAAO,CAAC,CAAC;AACT,KAAK;AACL,IAAI,OAAO;AACX,MAAM,sBAAsB;AAC5B,MAAM,gBAAgB;AACtB,MAAM,eAAe;AACrB,MAAM,6BAA6B;AACnC,MAAM,4BAA4B;AAClC,MAAM,oBAAoB;AAC1B,MAAM,qBAAqB;AAC3B,MAAM,yBAAyB;AAC/B,MAAM,oBAAoB;AAC1B,MAAM,cAAc;AACpB,KAAK,CAAC;AACN,GAAG;AACH,CAAC,CAAC;;AC9RK,MAAM,oEAAoE,GAAG;AAEpF,MAAM,CAAC;AACP;AACA,EAAE,4DAA4D;AAC9D,EAAE,yCAAyC;AAC3C,EAAE,mBAAmB;AACrB,CAAC,CAAC,CAAC,UAAU,CAAC,2BAA2B,EAAE;AAC3C,EAAE,QAAQ;AACV,EAAE,mBAAmB;AACrB,EAAE,IAAI;AACN,EAAE,QAAQ;AACV,EAAE,mBAAmB;AACrB,EAAE;AACF,EAAE,oBAAoB;AACtB,EAAE;AACF,EAAE,OAAO;AACT,EAAE,SAAS,MAAM,EAAE;AACnB,IAAI,MAAM,CAAC,KAAK,GAAG;AACnB,MAAM,iBAAiB;AACvB,MAAM;AACN,MAAM;AACN,MAAM;AACN,MAAM;AACN,MAAM,eAAe;AACrB,MAAM;AACN,MAAM;AACN,MAAM,KAAK,EAAE;AACb,MAAM,IAAI,EAAE;AACZ,MAAM,gBAAgB;AACtB,KAAK,CAAC;AACN,IAAI,MAAM;AACV,IAAI;AACJ,IAAI,MAAM,CAAC;AACX,IAAI,MAAM,CAAC,WAAW,GAAG;AACzB,IAAI,MAAM,CAAC,OAAO,GAAG;AACrB,IAAI,MAAM,CAAC,OAAO,CAAC;AACnB,IAAI,MAAM,CAAC,OAAO,CAAC;AACnB,IAAI,MAAM,CAAC,OAAO,CAAC;AACnB,IAAI,MAAM,CAAC,KAAK,GAAG;AACnB,MAAM,MAAM,EAAE,KAAK;AACnB,MAAM;AACN,KAAK,CAAC;AACN,IAAI,IAAI,CAAC;AACT,MAAM,MAAM,EAAE;AACd;AACA;AACA,QAAQ,cAAc,CAAC,GAAG,CAAC,WAAW,CAAC;AACvC;AACA,QAAQ;AACR;AACA,MAAM,SAAS,EAAE,EAAE;AACnB,MAAM,kBAAkB,EAAE;AAC1B,KAAK,CAAC;AACN;AACA,MAAM,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,IAAI,CAAC,8EAA8E,CAAC,CAAC;AAChI,KAAK;AACL,IAAI,SAAS,oBAAoB,GAAG;AACpC,MAAM,IAAI,MAAM,CAAC,WAAW,EAAE;AAC9B,QAAQ,OAAO;AACf;AACA,MAAM,MAAM;AACZ,MAAM,IAAI,UAAU;AACpB,QAAQ,MAAM,kBAAkB,GAAG,UAAU,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC,MAAM,CAAC;AACrF;AACA;AACA,YAAY,WAAW,EAAE;AACzB,YAAY;AACZ,YAAY,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM;AACzC,YAAY,QAAQ,EAAE;AACtB,WAAW,CAAC;AACZ,UAAU,IAAI;AACd,UAAU,IAAI,MAAM,CAAC,QAAQ,CAAC;AAC9B;AACA,WAAW;AACX,UAAU,IAAI,MAAM,CAAC;AACrB,YAAY,YAAY,GAAG,iBAAiB,CAAC;AAC7C;AACA;AACA,YAAY,YAAY,GAAG,cAAc,CAAC;AAC1C,WAAW;AACX,UAAU,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;AAClD;AACA;AACA;AACA,IAAI,SAAS,cAAc,GAAG;AAC9B,MAAM,WAAW,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;AACzC,MAAM,WAAW,CAAC,YAAY,CAAC;AAC/B,KAAK;AACL,IAAI;AACJ,MAAM,WAAW;AACjB,MAAM,KAAK,EAAE,4BAA4B;AACzC,MAAM,aAAa,EAAE,iBAAiB;AACtC,MAAM,cAAc;AACpB,KAAK,CAAC,CAAC;AACP,IAAI,SAAS,gBAAgB,GAAG;AAChC,MAAM,oCAAoC,CAAC;AAC3C,QAAQ,MAAM,IAAI,GAAG,kBAAkB,CAAC;AACxC,QAAQ,IAAI,IAAI,KAAK,OAAO;AAC5B,UAAU;AACV,SAAS;AACT,QAAQ,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;AACnC,QAAQ,qBAAqB,EAAE,CAAC;AAChC,QAAQ,uBAAuB,EAAE,CAAC;AAClC,QAAQ;AACR,OAAO,CAAC,CAAC;AACT,KAAK;AACL,IAAI,SAAS,qBAAqB,GAAG;AACrC,MAAM;AACN,MAAM,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK;AACvC,QAAQ,WAAW,CAAC,YAAY,CAAC;AACjC,QAAQ,WAAW,CAAC,YAAY,CAAC;AACjC,QAAQ;AACR,QAAQ,WAAW,CAAC,YAAY,CAAC,iBAAiB;AAClD,QAAQ;AACR;AACA;AACA;AACA,IAAI,SAAS,iBAAiB;AAC9B,MAAM,MAAM,CAAC,MAAM,CAAC,qBAAqB;AACzC,MAAM,MAAM,CAAC,MAAM,CAAC,gBAAgB,EAAE,qBAAqB,CAAC,MAAM,CAAC,OAAO,CAAC;AAC3E,KAAK;AACL;AACA,MAAM,0BAA0B,CAAC,MAAM,CAAC;AACxC,MAAM;AACN,KAAK;AACL,IAAI,SAAS,qBAAqB,CAAC;AACnC,MAAM,OAAO,SAAS,QAAQ,EAAE;AAChC;AACA;AACA,SAAS;AACT,OAAO,CAAC;AACR,KAAK;AACL,IAAI,SAAS,0BAA0B,CAAC,MAAM,EAAE;AAChD,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC,aAAa,EAAE;AACtC,QAAQ;AACR,QAAQ,WAAW,CAAC,SAAS,CAAC;AAC9B,OAAO;AACP,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC;AACvB,QAAQ,WAAW,CAAC;AACpB,OAAO;AACP;AACA;AACA,OAAO;AACP,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC,WAAW,IAAI,MAAM,CAAC,KAAK,CAAC;AACnD,QAAQ,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;AACvC,OAAO;AACP,KAAK;AACL,IAAI,IAAI,CAAC,MAAM,GAAG,WAAW;AAC7B,MAAM,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,KAAK;AAC5C,QAAQ,OAAO,iBAAiB,CAAC,KAAK,CAAC,MAAM,CAAC;AAC9C,OAAO;AACP,MAAM;AACN;AACA;AACA,KAAK,CAAC;AACN,IAAI,IAAI,CAAC,MAAM,GAAG,WAAW;AAC7B,MAAM,iBAAiB,CAAC,OAAO,EAAE,CAAC;AAClC,KAAK;AACL;AACA,MAAM,MAAM,CAAC,OAAO,CAAC,kBAAkB;AACvC,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAC9E,MAAM,IAAI,YAAY,KAAK,CAAC,CAAC,EAAE;AAC/B;AACA;AACA,QAAQ,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC;AAC1C,OAAO;AACP,KAAK,CAAC;AACN,IAAI,IAAI,CAAC,kBAAkB,GAAG,SAAS,OAAO,EAAE;AAChD,MAAM;AACN,KAAK,CAAC;AACN,IAAI;AACJ;AACA,KAAK,MAAM;AACX,MAAM,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;AACjC,KAAK;AACL,IAAI,IAAI,CAAC,gBAAgB,GAAG,MAAM;AAClC,MAAM;AACN,MAAM,gBAAgB,EAAE,CAAC;AACzB,KAAK,CAAC;AACN,IAAI;AACJ,MAAM,OAAO,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC;AACtC,KAAK,CAAC;AACN,GAAG;AACH,CAAC,CAAC,CAAC;AACH,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;AACjC,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC,CAAC;AACH,CAAC,CAAC,CAAC,CAAC;AACJ;AACA,EAAE,aAAa,CAAC,GAAG,CAAC;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpPO,MAAM,gBAAgB,SAAS,KAAK,CAAC,SAAS,CAAC;AACtD,EAAE,WAAW,CAAC,KAAK,EAAE;AACrB,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;AACjB,IAAI,IAAI,CAAC,KAAK,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AACrC,IAAI,IAAI,CAAC,kBAAkB,GAAG,CAAC,QAAQ,KAAK;AAC5C,MAAM,IAAI,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AAClC,KAAK,CAAC;AACN,GAAG;AACH,EAAE,MAAM,GAAG;AACX,IAAI,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;AAChE,IAAI,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;AACpC,IAAI,uBAAuB,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE;AACtD,MAAM,SAAS,EAAE,cAAc;AAC/B,KAAK,kBAAkB,KAAK,CAAC,aAAa,CAAC,gBAAgB,EAAE;AAC7D,MAAM,aAAa,EAAE,OAAO;AAC5B,MAAM,aAAa,EAAE,IAAI,CAAC,kBAAkB;AAC5C,KAAK,CAAC,kBAAkB,KAAK,CAAC,aAAa,CAAC,QAAQ,EAAE;AACtD,MAAM,SAAS,EAAE,iBAAiB;AAClC,MAAM,OAAO,EAAE,QAAQ;AACvB,KAAK,EAAE,QAAQ,CAAC,kBAAkB,KAAK,CAAC,aAAa,CAAC,QAAQ,EAAE;AAChE,MAAM,IAAI,EAAE,QAAQ;AACpB,MAAM,SAAS,EAAE,iBAAiB;AAClC,MAAM,OAAO,EAAE,QAAQ;AACvB,MAAM,QAAQ,EAAE,CAAC,OAAO,IAAI,CAAC,QAAQ;AACrC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;AAClB,GAAG;AACH;;ACfA,MAAM,8BAA8B,GAAG,cAAc,KAAK,CAAC,SAAS,CAAC;AACrE,EAAE,WAAW,CAAC,KAAK,EAAE;AACrB,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;AACjB,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,KAAK;AAC3B,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAChD,KAAK,CAAC;AACN,IAAI,IAAI,CAAC,MAAM,GAAG,MAAM;AACxB,MAAM,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;AAClD,MAAM,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;AACtD,MAAM,WAAW,CAAC,MAAM,CAAC,MAAM;AAC/B,QAAQ,OAAO,aAAa,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;AACtG,OAAO,CAAC,CAAC;AACT,KAAK,CAAC;AACN,IAAI,IAAI,CAAC,kBAAkB,GAAG,CAAC,oBAAoB,KAAK;AACxD,MAAM,MAAM,4BAA4B,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC,mBAAmB,KAAK,mBAAmB,CAAC,cAAc,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAC7L,MAAM,OAAO,4BAA4B,CAAC;AAC1C,KAAK,CAAC;AACN,IAAI,IAAI,CAAC,OAAO,GAAG,MAAM;AACzB,MAAM,MAAM,sBAAsB,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,sBAAsB,CAAC;AAC/F,MAAM,OAAO,sBAAsB,KAAK,KAAK,CAAC,CAAC;AAC/C,KAAK,CAAC;AACN,IAAI,IAAI,CAAC,uBAAuB,GAAG,CAAC,wBAAwB,KAAK;AACjE,MAAM,MAAM,EAAE,oBAAoB,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;AAClD,MAAM,MAAM,UAAU,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;AACnD,MAAM,UAAU,CAAC,eAAe,CAAC,sBAAsB,GAAG,wBAAwB,CAAC,KAAK,CAAC;AACzF,MAAM,MAAM,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC,oBAAoB,CAAC,CAAC,IAAI,CAAC,SAAS,mBAAmB,EAAE;AAClH,QAAQ,OAAO,mBAAmB,CAAC,IAAI,KAAK,wBAAwB,CAAC,KAAK,CAAC;AAC3E,OAAO,CAAC,CAAC;AACT,MAAM,UAAU,CAAC,UAAU,GAAG,kBAAkB,CAAC,QAAQ,CAAC,GAAG,CAAC;AAC9D,MAAM,IAAI,CAAC,QAAQ,CAAC;AACpB,QAAQ,OAAO,EAAE,UAAU;AAC3B,OAAO,CAAC,CAAC;AACT,KAAK,CAAC;AACN,IAAI,IAAI,CAAC,sBAAsB,GAAG,CAAC,UAAU,KAAK;AAClD,MAAM,MAAM,UAAU,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;AACnD,MAAM,UAAU,CAAC,MAAM,GAAG,UAAU,CAAC;AACrC,MAAM,IAAI,CAAC,QAAQ,CAAC;AACpB,QAAQ,OAAO,EAAE,UAAU;AAC3B,OAAO,CAAC,CAAC;AACT,KAAK,CAAC;AACN,IAAI,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC;AAC/C,IAAI,IAAI,CAAC,KAAK,GAAG;AACjB,MAAM,WAAW,EAAE,IAAI,WAAW,CAAC;AACnC,QAAQ,WAAW;AACnB,QAAQ,KAAK,EAAE,gCAAgC;AAC/C,QAAQ,aAAa,EAAE,WAAW,CAAC,sBAAsB,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;AAC1F,OAAO,CAAC;AACR,MAAM,UAAU,EAAE,IAAI;AACtB,MAAM,OAAO,EAAE;AACf,QAAQ,8BAA8B,EAAE,EAAE;AAC1C,QAAQ,YAAY,EAAE,UAAU;AAChC,QAAQ,eAAe,EAAE;AACzB,UAAU,uBAAuB,EAAE,WAAW,CAAC,IAAI;AACnD,UAAU,oBAAoB,EAAE,IAAI;AACpC,SAAS;AACT,OAAO;AACP,KAAK,CAAC;AACN,GAAG;AACH,EAAE,OAAO,IAAI,CAAC,KAAK,EAAE;AACrB,IAAI,MAAM,UAAU,GAAG,EAAE,CAAC;AAC1B,IAAI,OAAO,UAAU,CAAC,IAAI,CAAC,8BAA8B,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;AAC9E,GAAG;AACH,EAAE,MAAM,GAAG;AACX,IAAI,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;AAC5D,IAAI,MAAM,EAAE,WAAW,EAAE,oBAAoB,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;AAC7D,IAAI,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;AACrC,IAAI,MAAM,0BAA0B,GAAG,IAAI,CAAC,kBAAkB,CAAC,oBAAoB,CAAC,CAAC,GAAG,CAAC,CAAC,mBAAmB,MAAM;AACnH,MAAM,KAAK,EAAE,mBAAmB,CAAC,IAAI;AACrC,MAAM,KAAK,EAAE,mBAAmB,CAAC,IAAI;AACrC,KAAK,CAAC,CAAC,CAAC;AACR,IAAI,uBAAuB,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE;AACtD,MAAM,MAAM,EAAE,IAAI,CAAC,KAAK;AACxB,KAAK,kBAAkB,KAAK,CAAC,aAAa,CAAC,kBAAkB,EAAE;AAC/D,MAAM,OAAO,EAAE,WAAW;AAC1B,KAAK,CAAC,EAAE,UAAU,oBAAoB,KAAK,CAAC,aAAa,CAAC,MAAM,EAAE;AAClE,MAAM,IAAI,EAAE,MAAM;AAClB,KAAK,kBAAkB,KAAK,CAAC,aAAa,CAAC,UAAU,EAAE;AACvD,MAAM,OAAO,EAAE,IAAI,CAAC,KAAK;AACzB,KAAK,CAAC,kBAAkB,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,kBAAkB,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC,kBAAkB,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,kBAAkB,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE;AACzP,MAAM,SAAS,EAAE,KAAK;AACtB,KAAK,kBAAkB,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE;AAClD,MAAM,SAAS,EAAE,yBAAyB;AAC1C,KAAK,EAAE,YAAY,CAAC,kBAAkB,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE;AACjE,MAAM,SAAS,EAAE,UAAU;AAC3B,KAAK,kBAAkB,KAAK,CAAC,aAAa,CAAC,MAAM,EAAE;AACnD,MAAM,KAAK,EAAE,OAAO,CAAC,eAAe,CAAC,sBAAsB;AAC3D,MAAM,QAAQ,EAAE,IAAI,CAAC,uBAAuB;AAC5C,MAAM,OAAO,EAAE,0BAA0B;AACzC,KAAK,CAAC,CAAC,CAAC,kBAAkB,KAAK,CAAC,aAAa,CAAC,UAAU,EAAE;AAC1D,MAAM,MAAM,EAAE,OAAO,CAAC,UAAU;AAChC,MAAM,QAAQ,EAAE,IAAI,CAAC,sBAAsB;AAC3C,KAAK,CAAC,CAAC,kBAAkB,KAAK,CAAC,aAAa,CAAC,gBAAgB,EAAE;AAC/D,MAAM,QAAQ,EAAE,IAAI,CAAC,MAAM;AAC3B,MAAM,QAAQ,EAAE,IAAI,CAAC,KAAK;AAC1B,MAAM,OAAO,EAAE,SAAS;AACxB,MAAM,OAAO,EAAE,WAAW,CAAC,OAAO;AAClC,KAAK,CAAC,CAAC,CAAC,CAAC;AACT,GAAG;AACH,CAAC,CAAC;AACK,IAAI,6BAA6B,GAAG,8BAA8B,CAAC;AAC1E,6BAA6B,CAAC,YAAY,GAAG;AAC7C,EAAE,UAAU,EAAE,IAAI;AAClB,EAAE,YAAY,EAAE,IAAI;AACpB,CAAC;;ACtGM,MAAM;AAEb,OAAO,CAAC,MAAM,CAAC,6DAA6D,EAAE;AAC9E;AACA,EAAE,6DAA6D;AAC/D,EAAE,mBAAmB;AACrB,CAAC,CAAC,CAAC,UAAU,CAAC,6BAA6B,EAAE;AAC7C,EAAE;AACF,EAAE,QAAQ;AACV,EAAE,gBAAgB;AAClB,EAAE,KAAK;AACP,EAAE,aAAa;AACf,EAAE;AACF,EAAE,WAAW;AACb,EAAE;AACF,EAAE,SAAS;AACX,IAAI,MAAM,CAAC,KAAK,GAAG;AACnB,MAAM;AACN,KAAK,CAAC;AACN,IAAI,MAAM,CAAC,cAAc,GAAG;AAC5B,IAAI,IAAI,CAAC;AACT,IAAI,SAAS;AACb,MAAM,IAAI;AACV,QAAQ;AACR,OAAO,CAAC,CAAC;AACT,MAAM,IAAI,CAAC,OAAO,EAAE;AACpB,QAAQ;AACR,UAAU,IAAI;AACd,YAAY,OAAO,YAAY,CAAC;AAChC,cAAc;AACd,gBAAgB,OAAO;AACvB;AACA,eAAe;AACf,aAAa,CAAC,CAAC;AACf;AACA;AACA,OAAO;AACP;AACA,QAAQ,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;AACvB;AACA,MAAM,OAAO,OAAO,CAAC;AACrB,KAAK;AACL,IAAI,SAAS;AACb,MAAM,MAAM,OAAO,GAAG,yBAAyB;AAC/C,MAAM,OAAO,iBAAiB,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,EAAE;AACxD,QAAQ,YAAY,EAAE,CAAC;AACvB,QAAQ;AACR,QAAQ;AACR,QAAQ,MAAM,CAAC;AACf,QAAQ,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE;AAC5C,UAAU,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC;AAChE,UAAU,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE;AAC1D,YAAY,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC/D,YAAY,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,EAAE;AACvC,cAAc,MAAM,MAAM,GAAG;AAC7B,cAAc;AACd,gBAAgB;AAChB;AACA,aAAa;AACb;AACA,UAAU,IAAI,OAAO,CAAC;AACtB,YAAY,MAAM,CAAC;AACnB;AACA,gBAAgB;AAChB;AACA;AACA,eAAe,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AAC/B,gBAAgB,WAAW,EAAE,WAAW,CAAC,SAAS;AAClD,gBAAgB,MAAM,EAAE,WAAW,CAAC,MAAM;AAC1C,gBAAgB;AAChB,eAAe,CAAC,CAAC;AACjB,aAAa,CAAC,CAAC,OAAO,EAAE,CAAC;AACzB,WAAW;AACX,SAAS,MAAM;AACf,UAAU,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;AACzB;AACA,OAAO,CAAC,CAAC;AACT,KAAK;AACL;AACA,MAAM,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC;AACnC;AACA,IAAI,mBAAmB,EAAE,CAAC,IAAI,CAAC,MAAM;AACrC,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;AAC/B;AACA,OAAO;AACP,KAAK,CAAC,CAAC;AACP,IAAI,IAAI,CAAC,kBAAkB,GAAG,SAAS;AACvC,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,WAAW,CAAC;AAC9C,MAAM,MAAM,WAAW,GAAG;AAC1B,QAAQ,IAAI,EAAE,YAAY,CAAC,IAAI;AAC/B,QAAQ,SAAS;AACjB,QAAQ,MAAM,EAAE;AAChB,OAAO,CAAC;AACR;AACA,QAAQ,WAAW,EAAE,GAAG;AACxB,QAAQ,KAAK,EAAE,aAAa,GAAG,YAAY,CAAC,IAAI;AAChD,QAAQ,cAAc,EAAE,WAAW;AACnC,UAAU,IAAI,MAAM,CAAC;AACrB,YAAY,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;AAC3B,WAAW;AACX,SAAS;AACT,OAAO,CAAC;AACR,MAAM,MAAM,YAAY;AACxB,QAAQ,OAAO,iBAAiB,CAAC,kBAAkB,CAAC;AACpD,OAAO,CAAC;AACR,MAAM,MAAM,uBAAuB,GAAG;AACtC,QAAQ,MAAM,EAAE;AAChB,QAAQ,UAAU,EAAE;AACpB,QAAQ,OAAO,EAAE;AACjB,QAAQ;AACR,QAAQ,YAAY;AACpB,OAAO,CAAC;AACR,MAAM;AACN,MAAM;AACN,KAAK,CAAC;AACN,IAAI,IAAI,CAAC;AACT,MAAM;AACN,MAAM;AACN;AACA,QAAQ,KAAK,EAAE,YAAY,GAAG;AAC9B,OAAO,CAAC;AACR,MAAM;AACN;AACA,QAAQ,MAAM,EAAE,iBAAiB,GAAG;AACpC,QAAQ,UAAU,EAAE,UAAU,GAAG,YAAY,CAAC,IAAI;AAClD,QAAQ,OAAO,EAAE,YAAY,CAAC,OAAO;AACrC,QAAQ,iBAAiB,EAAE;AAC3B,QAAQ,YAAY;AACpB,OAAO,CAAC;AACR,MAAM;AACN;AACA,KAAK,CAAC;AACN,IAAI,IAAI,CAAC,iBAAiB,GAAG,SAAS;AACtC;AACA,MAAM,MAAM,WAAW,GAAG;AAC1B,QAAQ,WAAW,EAAE,GAAG;AACxB,QAAQ,KAAK,EAAE,WAAW,GAAG,YAAY;AACzC,OAAO,CAAC;AACR,MAAM;AACN;AACA,UAAU;AACV,SAAS,CAAC,CAAC,CAAC;AACZ,OAAO,CAAC;AACR,MAAM,wBAAwB,CAAC,OAAO,CAAC;AACvC,QAAQ,MAAM,EAAE,gBAAgB,GAAG,YAAY,CAAC,IAAI,GAAG,GAAG;AAC1D,QAAQ,UAAU,EAAE,SAAS;AAC7B,QAAQ;AACR,QAAQ;AACR,QAAQ;AACR;AACA,KAAK,CAAC;AACN,IAAI,IAAI,CAAC,mBAAmB,GAAG,MAAM;AACrC,MAAM;AACN;AACA,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC;AACrC,MAAM,6BAA6B,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE;AAC7D,KAAK,CAAC;AACN,IAAI,IAAI,CAAC,gBAAgB,GAAG,CAAC;AAC7B,MAAM,SAAS,CAAC,IAAI,CAAC;AACrB,QAAQ,WAAW,EAAE;AACrB,QAAQ;AACR;AACA,QAAQ,OAAO,EAAE;AACjB;AACA,UAAU,WAAW,EAAE,MAAM,GAAG;AAChC;AACA;AACA,OAAO,CAAC,CAAC;AACT,KAAK,CAAC;AACN;AACA,MAAM,IAAI,MAAM,CAAC,WAAW;AAC5B,QAAQ,OAAO,MAAM,CAAC;AACtB,OAAO;AACP,MAAM;AACN;AACA,GAAG;AACH;AACA,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;AACjC,EAAE,aAAa,CAAC,GAAG,CAAC;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC,CAAC;AACH,CAAC,CAAC,CAAC;;AC3PI,MAAM,oDAAoD,GAAG,2CAA2C,CAAC;AAEhH,MAAM,CAAC,oDAAoD,EAAE;AAC7D,EAAE,6DAA6D;AAC/D,CAAC,CAAC;;ACJK,MAAM,0CAA0C,GAAG,4CAA4C,CAAC;AAEvG,MAAM,CAAC,0CAA0C,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,+BAA+B,EAAE,WAAW;AAC3G,EAAE,SAAS,yBAAyB,CAAC,KAAK,EAAE,MAAM,EAAE;AACpD,IAAI,MAAM,OAAO,GAAG,2BAA2B,CAAC;AAChD,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AAC9B,MAAM,MAAM,CAAC,IAAI,CAAC,2HAA2H,CAAC,CAAC;AAC/I,KAAK;AACL,GAAG;AACH,EAAE,SAAS,QAAQ,CAAC,KAAK,EAAE;AAC3B,IAAI,MAAM,QAAQ,GAAG,EAAE,CAAC;AACxB,IAAI,MAAM,MAAM,GAAG,EAAE,CAAC;AACtB,IAAI,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE;AAC/B,MAAM,yBAAyB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AAC/C,KAAK;AACL,IAAI,OAAO;AACX,MAAM,QAAQ;AACd,MAAM,MAAM;AACZ,KAAK,CAAC;AACN,GAAG;AACH,EAAE,OAAO;AACT,IAAI,QAAQ;AACZ,GAAG,CAAC;AACJ,CAAC,CAAC,CAAC,GAAG,CAAC;AACP,EAAE,+BAA+B;AACjC,EAAE,SAAS,6BAA6B,EAAE;AAC1C,IAAI,wBAAwB,CAAC,iBAAiB,CAAC,OAAO,EAAE,6BAA6B,CAAC,CAAC;AACvF,GAAG;AACH,CAAC,CAAC;;AC/BF,SAAS,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE;AAC/B,EAAE,KAAK,GAAG,KAAK,KAAK,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC;AACjC,EAAE,IAAI,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;AAC9B;AACA,EAAE,IAAI,CAAC,GAAG,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE,EAAE,OAAO,EAAE;AAC1D;AACA,EAAE,IAAI,IAAI,GAAG,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AACvE,EAAE,IAAI,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AAC9C,EAAE,KAAK,CAAC,IAAI,GAAG,UAAU,CAAC;AAC1B;AACA,EAAE,IAAI,QAAQ,KAAK,KAAK,EAAE;AAC1B,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;AACzB,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AAChD,KAAK,MAAM;AACX,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AAC9B,KAAK;AACL,GAAG,MAAM;AACT,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AAC5B,GAAG;AACH;AACA,EAAE,IAAI,KAAK,CAAC,UAAU,EAAE;AACxB,IAAI,KAAK,CAAC,UAAU,CAAC,OAAO,GAAG,GAAG,CAAC;AACnC,GAAG,MAAM;AACT,IAAI,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;AACpD,GAAG;AACH;;;;;ACCY,MAAC,YAAY,GAAG,kBAAkB;AAC9C;AACA,EAAE;AACF;AACA,EAAE;AACF,EAAE;AACF,EAAE,oDAAoD;AACtD,EAAE,yCAAyC;AAC3C,EAAE;AACF,EAAE;AACF,EAAE,wCAAwC;AAC1C,EAAE;AACF,EAAE,wDAAwD;AAC1D,EAAE,0DAA0D;AAC5D,EAAE;AACF,EAAE;AACF,EAAE,qDAAqD;AACvD,EAAE,mDAAmD;AACrD,EAAE,6CAA6C;AAC/C,EAAE,wCAAwC;AAC1C,EAAE,wBAAwB;AAC1B,EAAE,0CAA0C;AAC5C,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW;AACrB,EAAE,qBAAqB,CAAC,gBAAgB,CAAC;AACzC,IAAI,IAAI,EAAE,OAAO;AACjB,IAAI,IAAI,EAAE;AACV,MAAM,IAAI,EAAE,IAAI;AAChB,KAAK;AACL,IAAI,KAAK,EAAE;AACX,MAAM;AACN,KAAK;AACL,IAAI;AACJ,MAAM;AACN,MAAM,kBAAkB,EAAE;AAC1B,MAAM;AACN,MAAM;AACN,MAAM,0BAA0B,EAAE;AAClC,MAAM,cAAc,EAAE;AACtB,MAAM,oBAAoB,EAAE;AAC5B,KAAK;AACL,IAAI,QAAQ,EAAE;AACd,MAAM,mBAAmB,EAAE,0BAA0B;AACrD,MAAM,kBAAkB,EAAE;AAC1B,MAAM;AACN,KAAK;AACL,IAAI,YAAY,EAAE;AAClB,MAAM,WAAW,EAAE;AACnB,MAAM,kBAAkB,EAAE;AAC1B,MAAM;AACN,MAAM;AACN,MAAM,4BAA4B,EAAE;AACpC,MAAM;AACN,KAAK;AACL,IAAI,aAAa,EAAE;AACnB,MAAM,WAAW,EAAE,+BAA+B;AAClD,MAAM,MAAM,EAAE,0BAA0B;AACxC,MAAM;AACN,MAAM;AACN,MAAM,8BAA8B,EAAE;AACtC,MAAM,6BAA6B,EAAE;AACrC,KAAK;AACL,GAAG,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AACH,0BAA0B,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;AACnE,MAAM;AACN,EAAE;AACF;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}