Merge branch 'master' of github.com:hashicorp/terraform into nic-provider-docs

This commit is contained in:
Nic Jackson 2017-04-07 10:07:40 +01:00
commit 45cacd4a9e
No known key found for this signature in database
GPG Key ID: 2CD2E635F441E5E4
327 changed files with 8747 additions and 15705 deletions

View File

@ -5,6 +5,7 @@ FEATURES:
* **New Resource:** `aws_lightsail_static_ip` [GH-13175]
* **New Resource:** `aws_lightsail_static_ip_attachment` [GH-13207]
* **New Resource:** `aws_ses_domain_identity` [GH-13098]
* **New Resource**: `azurerm_managed_disk` [GH-12455]
* **New Resource:** `kubernetes_secret` [GH-12960]
* **New Data Source:** `aws_iam_role` [GH-13213]
@ -35,16 +36,18 @@ IMPROVEMENTS:
* provider/aws: Add support for treat_missing_data to cloudwatch_metric_alarm [GH-13358]
* provider/aws: Add support for evaluate_low_sample_count_percentiles to cloudwatch_metric_alarm [GH-13371]
* provider/aws: Fix `aws_s3_bucket` drift detection of logging options [GH-13281]
* provider/bitbucket: Improved error handling [GH-13390]
* provider/cloudstack: Do not force a new resource when updating `cloudstack_loadbalancer_rule` members [GH-11786]
* provider/github: Handle the case when issue labels already exist [GH-13182]
* provider/google: Mark `google_container_cluster`'s `client_key` & `password` inside `master_auth` as sensitive [GH-13148]
* provider/triton: Move to joyent/triton-go [GH-13225]
BUG FIXES:
* core: Escaped interpolation-like sequences (like `$${foo}`) now permitted in variable defaults [GH-13137]
* core: Fix strange issues with computed values in provider configuration that were worked around with `-input=false` [GH-11264], [GH-13264]
* core: Fix crash when providing nested maps as variable values in a `module` block [GH-13343]
* core: `connection` block attributes are now subject to basic validation of attribute names during validate walk [GH-13400]
* provider/aws: Add Support for maintenance_window and back_window to rds_cluster_instance [GH-13134]
* provider/aws: Increase timeout for AMI registration [GH-13159]
* provider/aws: Increase timeouts for ELB [GH-13161]
@ -67,6 +70,7 @@ BUG FIXES:
* provider/aws: Fix KMS Key reading with Exists method [GH-13348]
* provider/azurerm: Network Security Group - ignoring protocol casing at Import time [GH-13153]
* provider/azurerm: Fix crash when importing Local Network Gateways [GH-13261]
* provider/bitbucket: Fixed issue where provider would fail with an "EOF" error on some operations [GH-13390]
* provider/openstack: Refresh volume_attachment from state if NotFound [GH-13342]
* provider/profitbricks: Changed output type of ips variable of ip_block ProfitBricks resource [GH-13290]

View File

@ -121,16 +121,15 @@ func (c *RemoteClient) Lock(info *state.LockInfo) (string, error) {
default:
if c.lockCh != nil {
// we have an active lock already
return "", nil
return "", fmt.Errorf("state %q already locked", c.Path)
}
}
if c.consulLock == nil {
opts := &consulapi.LockOptions{
Key: c.Path + lockSuffix,
// We currently don't procide any options to block terraform and
// retry lock acquisition, but we can wait briefly in case the
// lock is about to be freed.
// only wait briefly, so terraform has the choice to fail fast or
// retry as needed.
LockWaitTime: time.Second,
LockTryOnce: true,
}
@ -191,6 +190,10 @@ func (c *RemoteClient) Unlock(id string) error {
err := c.consulLock.Unlock()
c.lockCh = nil
// This is only cleanup, and will fail if the lock was immediately taken by
// another client, so we don't report an error to the user here.
c.consulLock.Destroy()
kv := c.Client.KV()
_, delErr := kv.Delete(c.Path+lockInfoSuffix, nil)
if delErr != nil {

View File

@ -6,6 +6,7 @@ import (
"time"
"github.com/hashicorp/terraform/backend"
"github.com/hashicorp/terraform/state"
"github.com/hashicorp/terraform/state/remote"
)
@ -98,3 +99,43 @@ func TestConsul_stateLock(t *testing.T) {
remote.TestRemoteLocks(t, sA.(*remote.State).Client, sB.(*remote.State).Client)
}
func TestConsul_destroyLock(t *testing.T) {
srv := newConsulTestServer(t)
defer srv.Stop()
// Get the backend
b := backend.TestBackendConfig(t, New(), map[string]interface{}{
"address": srv.HTTPAddr,
"path": fmt.Sprintf("tf-unit/%s", time.Now().String()),
})
// Grab the client
s, err := b.State(backend.DefaultStateName)
if err != nil {
t.Fatalf("err: %s", err)
}
c := s.(*remote.State).Client.(*RemoteClient)
info := state.NewLockInfo()
id, err := c.Lock(info)
if err != nil {
t.Fatal(err)
}
lockPath := c.Path + lockSuffix
if err := c.Unlock(id); err != nil {
t.Fatal(err)
}
// get the lock val
pair, _, err := c.Client.KV().Get(lockPath, nil)
if err != nil {
t.Fatal(err)
}
if pair != nil {
t.Fatalf("lock key not cleaned up at: %s", pair.Key)
}
}

View File

@ -15,10 +15,10 @@ func TestAccAWSEcsDataSource_ecsTaskDefinition(t *testing.T) {
resource.TestStep{
Config: testAccCheckAwsEcsTaskDefinitionDataSourceConfig,
Check: resource.ComposeTestCheckFunc(
resource.TestMatchResourceAttr("data.aws_ecs_task_definition.mongo", "id", regexp.MustCompile("^arn:aws:ecs:us-west-2:[0-9]{12}:task-definition/mongodb:[1-9]*[0-9]$")),
resource.TestMatchResourceAttr("data.aws_ecs_task_definition.mongo", "id", regexp.MustCompile("^arn:aws:ecs:us-west-2:[0-9]{12}:task-definition/mongodb:[1-9][0-9]*$")),
resource.TestCheckResourceAttr("data.aws_ecs_task_definition.mongo", "family", "mongodb"),
resource.TestCheckResourceAttr("data.aws_ecs_task_definition.mongo", "network_mode", "bridge"),
resource.TestMatchResourceAttr("data.aws_ecs_task_definition.mongo", "revision", regexp.MustCompile("^[1-9]*[0-9]$")),
resource.TestMatchResourceAttr("data.aws_ecs_task_definition.mongo", "revision", regexp.MustCompile("^[1-9][0-9]*$")),
resource.TestCheckResourceAttr("data.aws_ecs_task_definition.mongo", "status", "ACTIVE"),
resource.TestMatchResourceAttr("data.aws_ecs_task_definition.mongo", "task_role_arn", regexp.MustCompile("^arn:aws:iam::[0-9]{12}:role/mongo_role$")),
),

View File

@ -446,7 +446,6 @@ func resourceAwsAutoscalingGroupRead(d *schema.ResourceData, meta interface{}) e
d.Set("health_check_type", g.HealthCheckType)
d.Set("launch_configuration", g.LaunchConfigurationName)
d.Set("load_balancers", flattenStringList(g.LoadBalancerNames))
d.Set("target_group_arns", flattenStringList(g.TargetGroupARNs))
if err := d.Set("suspended_processes", flattenAsgSuspendedProcesses(g.SuspendedProcesses)); err != nil {
log.Printf("[WARN] Error setting suspended_processes for %q: %s", d.Id(), err)

View File

@ -445,15 +445,6 @@ func TestAccAWSAutoScalingGroup_ALB_TargetGroups(t *testing.T) {
"aws_autoscaling_group.bar", "target_group_arns.#", "1"),
),
},
resource.TestStep{
Config: testAccAWSAutoScalingGroupConfig_ALB_TargetGroup_pre,
Check: resource.ComposeAggregateTestCheckFunc(
testAccCheckAWSAutoScalingGroupExists("aws_autoscaling_group.bar", &group),
resource.TestCheckResourceAttr(
"aws_autoscaling_group.bar", "target_group_arns.#", "0"),
),
},
},
})
}

View File

@ -11,6 +11,7 @@ import (
"github.com/Azure/azure-sdk-for-go/arm/compute"
"github.com/Azure/azure-sdk-for-go/arm/containerregistry"
"github.com/Azure/azure-sdk-for-go/arm/containerservice"
"github.com/Azure/azure-sdk-for-go/arm/disk"
"github.com/Azure/azure-sdk-for-go/arm/eventhub"
"github.com/Azure/azure-sdk-for-go/arm/keyvault"
"github.com/Azure/azure-sdk-for-go/arm/network"
@ -47,6 +48,8 @@ type ArmClient struct {
vmImageClient compute.VirtualMachineImagesClient
vmClient compute.VirtualMachinesClient
diskClient disk.DisksClient
appGatewayClient network.ApplicationGatewaysClient
ifaceClient network.InterfacesClient
loadBalancerClient network.LoadBalancersClient
@ -245,6 +248,12 @@ func (c *Config) getArmClient() (*ArmClient, error) {
csc.Sender = autorest.CreateSender(withRequestLogging())
client.containerServicesClient = csc
dkc := disk.NewDisksClientWithBaseURI(endpoint, c.SubscriptionID)
setUserAgent(&dkc.Client)
dkc.Authorizer = spt
dkc.Sender = autorest.CreateSender(withRequestLogging())
client.diskClient = dkc
ehc := eventhub.NewEventHubsClientWithBaseURI(endpoint, c.SubscriptionID)
setUserAgent(&ehc.Client)
ehc.Authorizer = spt

View File

@ -0,0 +1,30 @@
package azurerm
import (
"fmt"
"testing"
"github.com/hashicorp/terraform/helper/acctest"
"github.com/hashicorp/terraform/helper/resource"
)
func TestAccAzureRMManagedDisk_importEmpty(t *testing.T) {
ri := acctest.RandInt()
config := fmt.Sprintf(testAccAzureRMManagedDisk_empty, ri, ri)
resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
Providers: testAccProviders,
CheckDestroy: testCheckAzureRMManagedDiskDestroy,
Steps: []resource.TestStep{
{
Config: config,
},
{
ResourceName: "azurerm_managed_disk.test",
ImportState: true,
ImportStateVerify: true,
},
},
})
}

View File

@ -19,11 +19,39 @@ func TestAccAzureRMVirtualMachine_importBasic(t *testing.T) {
Providers: testAccProviders,
CheckDestroy: testCheckAzureRMVirtualMachineDestroy,
Steps: []resource.TestStep{
resource.TestStep{
{
Config: config,
},
resource.TestStep{
{
ResourceName: resourceName,
ImportState: true,
ImportStateVerify: true,
ImportStateVerifyIgnore: []string{
"delete_data_disks_on_termination",
"delete_os_disk_on_termination",
},
},
},
})
}
func TestAccAzureRMVirtualMachine_importBasic_managedDisk(t *testing.T) {
resourceName := "azurerm_virtual_machine.test"
ri := acctest.RandInt()
config := fmt.Sprintf(testAccAzureRMVirtualMachine_basicLinuxMachine_managedDisk_explicit, ri, ri, ri, ri, ri, ri, ri)
resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
Providers: testAccProviders,
CheckDestroy: testCheckAzureRMVirtualMachineDestroy,
Steps: []resource.TestStep{
{
Config: config,
},
{
ResourceName: resourceName,
ImportState: true,
ImportStateVerify: true,

View File

@ -85,6 +85,8 @@ func Provider() terraform.ResourceProvider {
"azurerm_lb_probe": resourceArmLoadBalancerProbe(),
"azurerm_lb_rule": resourceArmLoadBalancerRule(),
"azurerm_managed_disk": resourceArmManagedDisk(),
"azurerm_key_vault": resourceArmKeyVault(),
"azurerm_local_network_gateway": resourceArmLocalNetworkGateway(),
"azurerm_network_interface": resourceArmNetworkInterface(),

View File

@ -0,0 +1,238 @@
package azurerm
import (
"fmt"
"github.com/Azure/azure-sdk-for-go/arm/disk"
"github.com/hashicorp/terraform/helper/schema"
"github.com/hashicorp/terraform/helper/validation"
"log"
"net/http"
"strings"
)
func resourceArmManagedDisk() *schema.Resource {
return &schema.Resource{
Create: resourceArmManagedDiskCreate,
Read: resourceArmManagedDiskRead,
Update: resourceArmManagedDiskCreate,
Delete: resourceArmManagedDiskDelete,
Importer: &schema.ResourceImporter{
State: schema.ImportStatePassthrough,
},
Schema: map[string]*schema.Schema{
"name": {
Type: schema.TypeString,
Required: true,
ForceNew: true,
},
"location": locationSchema(),
"resource_group_name": {
Type: schema.TypeString,
Required: true,
ForceNew: true,
},
"storage_account_type": {
Type: schema.TypeString,
Required: true,
ValidateFunc: validation.StringInSlice([]string{
string(disk.PremiumLRS),
string(disk.StandardLRS),
}, true),
},
"create_option": {
Type: schema.TypeString,
Required: true,
ForceNew: true,
ValidateFunc: validation.StringInSlice([]string{
string(disk.Import),
string(disk.Empty),
string(disk.Copy),
}, true),
},
"source_uri": {
Type: schema.TypeString,
Optional: true,
Computed: true,
ForceNew: true,
},
"source_resource_id": {
Type: schema.TypeString,
Optional: true,
ForceNew: true,
},
"os_type": {
Type: schema.TypeString,
Optional: true,
ValidateFunc: validation.StringInSlice([]string{
string(disk.Windows),
string(disk.Linux),
}, true),
},
"disk_size_gb": {
Type: schema.TypeInt,
Required: true,
ValidateFunc: validateDiskSizeGB,
},
"tags": tagsSchema(),
},
}
}
func validateDiskSizeGB(v interface{}, k string) (ws []string, errors []error) {
value := v.(int)
if value < 1 || value > 1023 {
errors = append(errors, fmt.Errorf(
"The `disk_size_gb` can only be between 1 and 1023"))
}
return
}
func resourceArmManagedDiskCreate(d *schema.ResourceData, meta interface{}) error {
client := meta.(*ArmClient)
diskClient := client.diskClient
log.Printf("[INFO] preparing arguments for Azure ARM Managed Disk creation.")
name := d.Get("name").(string)
location := d.Get("location").(string)
resGroup := d.Get("resource_group_name").(string)
tags := d.Get("tags").(map[string]interface{})
expandedTags := expandTags(tags)
createDisk := disk.Model{
Name: &name,
Location: &location,
Tags: expandedTags,
}
storageAccountType := d.Get("storage_account_type").(string)
osType := d.Get("os_type").(string)
createDisk.Properties = &disk.Properties{
AccountType: disk.StorageAccountTypes(storageAccountType),
OsType: disk.OperatingSystemTypes(osType),
}
if v := d.Get("disk_size_gb"); v != 0 {
diskSize := int32(v.(int))
createDisk.Properties.DiskSizeGB = &diskSize
}
createOption := d.Get("create_option").(string)
creationData := &disk.CreationData{
CreateOption: disk.CreateOption(createOption),
}
if strings.EqualFold(createOption, string(disk.Import)) {
if sourceUri := d.Get("source_uri").(string); sourceUri != "" {
creationData.SourceURI = &sourceUri
} else {
return fmt.Errorf("[ERROR] source_uri must be specified when create_option is `%s`", disk.Import)
}
} else if strings.EqualFold(createOption, string(disk.Copy)) {
if sourceResourceId := d.Get("source_resource_id").(string); sourceResourceId != "" {
creationData.SourceResourceID = &sourceResourceId
} else {
return fmt.Errorf("[ERROR] source_resource_id must be specified when create_option is `%s`", disk.Copy)
}
}
createDisk.CreationData = creationData
_, diskErr := diskClient.CreateOrUpdate(resGroup, name, createDisk, make(chan struct{}))
if diskErr != nil {
return diskErr
}
read, err := diskClient.Get(resGroup, name)
if err != nil {
return err
}
if read.ID == nil {
return fmt.Errorf("[ERROR] Cannot read Managed Disk %s (resource group %s) ID", name, resGroup)
}
d.SetId(*read.ID)
return resourceArmManagedDiskRead(d, meta)
}
func resourceArmManagedDiskRead(d *schema.ResourceData, meta interface{}) error {
diskClient := meta.(*ArmClient).diskClient
id, err := parseAzureResourceID(d.Id())
if err != nil {
return err
}
resGroup := id.ResourceGroup
name := id.Path["disks"]
resp, err := diskClient.Get(resGroup, name)
if err != nil {
if resp.StatusCode == http.StatusNotFound {
d.SetId("")
return nil
}
return fmt.Errorf("[ERROR] Error making Read request on Azure Managed Disk %s (resource group %s): %s", name, resGroup, err)
}
d.Set("name", resp.Name)
d.Set("resource_group_name", resGroup)
d.Set("location", resp.Location)
if resp.Properties != nil {
flattenAzureRmManagedDiskProperties(d, resp.Properties)
}
if resp.CreationData != nil {
flattenAzureRmManagedDiskCreationData(d, resp.CreationData)
}
flattenAndSetTags(d, resp.Tags)
return nil
}
func resourceArmManagedDiskDelete(d *schema.ResourceData, meta interface{}) error {
diskClient := meta.(*ArmClient).diskClient
id, err := parseAzureResourceID(d.Id())
if err != nil {
return err
}
resGroup := id.ResourceGroup
name := id.Path["disks"]
if _, err = diskClient.Delete(resGroup, name, make(chan struct{})); err != nil {
return err
}
return nil
}
func flattenAzureRmManagedDiskProperties(d *schema.ResourceData, properties *disk.Properties) {
d.Set("storage_account_type", string(properties.AccountType))
if properties.DiskSizeGB != nil {
d.Set("disk_size_gb", *properties.DiskSizeGB)
}
if properties.OsType != "" {
d.Set("os_type", string(properties.OsType))
}
}
func flattenAzureRmManagedDiskCreationData(d *schema.ResourceData, creationData *disk.CreationData) {
d.Set("create_option", string(creationData.CreateOption))
if creationData.SourceURI != nil {
d.Set("source_uri", *creationData.SourceURI)
}
}

View File

@ -0,0 +1,321 @@
package azurerm
import (
"fmt"
"net/http"
"testing"
"github.com/Azure/azure-sdk-for-go/arm/compute"
"github.com/Azure/azure-sdk-for-go/arm/disk"
"github.com/hashicorp/terraform/helper/acctest"
"github.com/hashicorp/terraform/helper/resource"
"github.com/hashicorp/terraform/terraform"
)
func TestAccAzureRMManagedDisk_empty(t *testing.T) {
var d disk.Model
ri := acctest.RandInt()
config := fmt.Sprintf(testAccAzureRMManagedDisk_empty, ri, ri)
resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
Providers: testAccProviders,
CheckDestroy: testCheckAzureRMManagedDiskDestroy,
Steps: []resource.TestStep{
{
Config: config,
Check: resource.ComposeTestCheckFunc(
testCheckAzureRMManagedDiskExists("azurerm_managed_disk.test", &d, true),
),
},
},
})
}
func TestAccAzureRMManagedDisk_import(t *testing.T) {
var d disk.Model
var vm compute.VirtualMachine
ri := acctest.RandInt()
vmConfig := fmt.Sprintf(testAccAzureRMVirtualMachine_basicLinuxMachine, ri, ri, ri, ri, ri, ri, ri)
config := fmt.Sprintf(testAccAzureRMManagedDisk_import, ri, ri, ri)
resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
Providers: testAccProviders,
CheckDestroy: testCheckAzureRMManagedDiskDestroy,
Steps: []resource.TestStep{
{
//need to create a vm and then delete it so we can use the vhd to test import
Config: vmConfig,
Destroy: false,
ExpectNonEmptyPlan: true,
Check: resource.ComposeTestCheckFunc(
testCheckAzureRMVirtualMachineExists("azurerm_virtual_machine.test", &vm),
testDeleteAzureRMVirtualMachine("azurerm_virtual_machine.test"),
),
},
{
Config: config,
Check: resource.ComposeTestCheckFunc(
testCheckAzureRMManagedDiskExists("azurerm_managed_disk.test", &d, true),
),
},
},
})
}
func TestAccAzureRMManagedDisk_copy(t *testing.T) {
var d disk.Model
ri := acctest.RandInt()
config := fmt.Sprintf(testAccAzureRMManagedDisk_copy, ri, ri, ri)
resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
Providers: testAccProviders,
CheckDestroy: testCheckAzureRMManagedDiskDestroy,
Steps: []resource.TestStep{
{
Config: config,
Check: resource.ComposeTestCheckFunc(
testCheckAzureRMManagedDiskExists("azurerm_managed_disk.test", &d, true),
),
},
},
})
}
func TestAccAzureRMManagedDisk_update(t *testing.T) {
var d disk.Model
ri := acctest.RandInt()
preConfig := fmt.Sprintf(testAccAzureRMManagedDisk_empty, ri, ri)
postConfig := fmt.Sprintf(testAccAzureRMManagedDisk_empty_updated, ri, ri)
resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
Providers: testAccProviders,
CheckDestroy: testCheckAzureRMManagedDiskDestroy,
Steps: []resource.TestStep{
{
Config: preConfig,
Check: resource.ComposeTestCheckFunc(
testCheckAzureRMManagedDiskExists("azurerm_managed_disk.test", &d, true),
resource.TestCheckResourceAttr(
"azurerm_managed_disk.test", "tags.%", "2"),
resource.TestCheckResourceAttr(
"azurerm_managed_disk.test", "tags.environment", "acctest"),
resource.TestCheckResourceAttr(
"azurerm_managed_disk.test", "tags.cost-center", "ops"),
resource.TestCheckResourceAttr(
"azurerm_managed_disk.test", "disk_size_gb", "1"),
resource.TestCheckResourceAttr(
"azurerm_managed_disk.test", "storage_account_type", string(disk.StandardLRS)),
),
},
{
Config: postConfig,
Check: resource.ComposeTestCheckFunc(
testCheckAzureRMManagedDiskExists("azurerm_managed_disk.test", &d, true),
resource.TestCheckResourceAttr(
"azurerm_managed_disk.test", "tags.%", "1"),
resource.TestCheckResourceAttr(
"azurerm_managed_disk.test", "tags.environment", "acctest"),
resource.TestCheckResourceAttr(
"azurerm_managed_disk.test", "disk_size_gb", "2"),
resource.TestCheckResourceAttr(
"azurerm_managed_disk.test", "storage_account_type", string(disk.PremiumLRS)),
),
},
},
})
}
func testCheckAzureRMManagedDiskExists(name string, d *disk.Model, shouldExist bool) resource.TestCheckFunc {
return func(s *terraform.State) error {
rs, ok := s.RootModule().Resources[name]
if !ok {
return fmt.Errorf("Not found: %s", name)
}
dName := rs.Primary.Attributes["name"]
resourceGroup, hasResourceGroup := rs.Primary.Attributes["resource_group_name"]
if !hasResourceGroup {
return fmt.Errorf("Bad: no resource group found in state for disk: %s", dName)
}
conn := testAccProvider.Meta().(*ArmClient).diskClient
resp, err := conn.Get(resourceGroup, dName)
if err != nil {
return fmt.Errorf("Bad: Get on diskClient: %s", err)
}
if resp.StatusCode == http.StatusNotFound && shouldExist {
return fmt.Errorf("Bad: ManagedDisk %q (resource group %q) does not exist", dName, resourceGroup)
}
if resp.StatusCode != http.StatusNotFound && !shouldExist {
return fmt.Errorf("Bad: ManagedDisk %q (resource group %q) still exists", dName, resourceGroup)
}
*d = resp
return nil
}
}
func testCheckAzureRMManagedDiskDestroy(s *terraform.State) error {
conn := testAccProvider.Meta().(*ArmClient).diskClient
for _, rs := range s.RootModule().Resources {
if rs.Type != "azurerm_managed_disk" {
continue
}
name := rs.Primary.Attributes["name"]
resourceGroup := rs.Primary.Attributes["resource_group_name"]
resp, err := conn.Get(resourceGroup, name)
if err != nil {
return nil
}
if resp.StatusCode != http.StatusNotFound {
return fmt.Errorf("Managed Disk still exists: \n%#v", resp.Properties)
}
}
return nil
}
func testDeleteAzureRMVirtualMachine(name string) resource.TestCheckFunc {
return func(s *terraform.State) error {
rs, ok := s.RootModule().Resources[name]
if !ok {
return fmt.Errorf("Not found: %s", name)
}
vmName := rs.Primary.Attributes["name"]
resourceGroup, hasResourceGroup := rs.Primary.Attributes["resource_group_name"]
if !hasResourceGroup {
return fmt.Errorf("Bad: no resource group found in state for virtual machine: %s", vmName)
}
conn := testAccProvider.Meta().(*ArmClient).vmClient
_, err := conn.Delete(resourceGroup, vmName, make(chan struct{}))
if err != nil {
return fmt.Errorf("Bad: Delete on vmClient: %s", err)
}
return nil
}
}
var testAccAzureRMManagedDisk_empty = `
resource "azurerm_resource_group" "test" {
name = "acctestRG-%d"
location = "West US 2"
}
resource "azurerm_managed_disk" "test" {
name = "acctestd-%d"
location = "West US 2"
resource_group_name = "${azurerm_resource_group.test.name}"
storage_account_type = "Standard_LRS"
create_option = "Empty"
disk_size_gb = "1"
tags {
environment = "acctest"
cost-center = "ops"
}
}`
var testAccAzureRMManagedDisk_import = `
resource "azurerm_resource_group" "test" {
name = "acctestRG-%d"
location = "West US 2"
}
resource "azurerm_storage_account" "test" {
name = "accsa%d"
resource_group_name = "${azurerm_resource_group.test.name}"
location = "West US 2"
account_type = "Standard_LRS"
tags {
environment = "staging"
}
}
resource "azurerm_storage_container" "test" {
name = "vhds"
resource_group_name = "${azurerm_resource_group.test.name}"
storage_account_name = "${azurerm_storage_account.test.name}"
container_access_type = "private"
}
resource "azurerm_managed_disk" "test" {
name = "acctestd-%d"
location = "West US 2"
resource_group_name = "${azurerm_resource_group.test.name}"
storage_account_type = "Standard_LRS"
create_option = "Import"
source_uri = "${azurerm_storage_account.test.primary_blob_endpoint}${azurerm_storage_container.test.name}/myosdisk1.vhd"
disk_size_gb = "45"
tags {
environment = "acctest"
}
}`
var testAccAzureRMManagedDisk_copy = `
resource "azurerm_resource_group" "test" {
name = "acctestRG-%d"
location = "West US 2"
}
resource "azurerm_managed_disk" "source" {
name = "acctestd1-%d"
location = "West US 2"
resource_group_name = "${azurerm_resource_group.test.name}"
storage_account_type = "Standard_LRS"
create_option = "Empty"
disk_size_gb = "1"
tags {
environment = "acctest"
cost-center = "ops"
}
}
resource "azurerm_managed_disk" "test" {
name = "acctestd2-%d"
location = "West US 2"
resource_group_name = "${azurerm_resource_group.test.name}"
storage_account_type = "Standard_LRS"
create_option = "Copy"
source_resource_id = "${azurerm_managed_disk.source.id}"
disk_size_gb = "1"
tags {
environment = "acctest"
cost-center = "ops"
}
}`
var testAccAzureRMManagedDisk_empty_updated = `
resource "azurerm_resource_group" "test" {
name = "acctestRG-%d"
location = "West US 2"
}
resource "azurerm_managed_disk" "test" {
name = "acctestd-%d"
location = "West US 2"
resource_group_name = "${azurerm_resource_group.test.name}"
storage_account_type = "Premium_LRS"
create_option = "Empty"
disk_size_gb = "2"
tags {
environment = "acctest"
}
}`

View File

@ -1,7 +1,6 @@
package azurerm
import (
"context"
"fmt"
"log"
"net/http"
@ -188,10 +187,8 @@ func resourceArmStorageAccountCreate(d *schema.ResourceData, meta interface{}) e
}
// Create
cancelCtx, cancelFunc := context.WithTimeout(client.StopContext, 1*time.Hour)
_, createErr := storageClient.Create(
resourceGroupName, storageAccountName, opts, cancelCtx.Done())
cancelFunc()
resourceGroupName, storageAccountName, opts, make(chan struct{}))
// The only way to get the ID back apparently is to read the resource again
read, err := storageClient.GetProperties(resourceGroupName, storageAccountName)

View File

@ -11,6 +11,7 @@ import (
"github.com/Azure/azure-sdk-for-go/arm/compute"
"github.com/hashicorp/terraform/helper/hashcode"
"github.com/hashicorp/terraform/helper/schema"
"github.com/hashicorp/terraform/helper/validation"
riviera "github.com/jen20/riviera/azure"
)
@ -141,10 +142,29 @@ func resourceArmVirtualMachine() *schema.Resource {
"vhd_uri": {
Type: schema.TypeString,
Required: true,
Optional: true,
ForceNew: true,
},
"managed_disk_id": {
Type: schema.TypeString,
Optional: true,
ForceNew: true,
Computed: true,
ConflictsWith: []string{"storage_os_disk.vhd_uri"},
},
"managed_disk_type": {
Type: schema.TypeString,
Optional: true,
Computed: true,
ConflictsWith: []string{"storage_os_disk.vhd_uri"},
ValidateFunc: validation.StringInSlice([]string{
string(compute.PremiumLRS),
string(compute.StandardLRS),
}, true),
},
"image_uri": {
Type: schema.TypeString,
Optional: true,
@ -189,7 +209,26 @@ func resourceArmVirtualMachine() *schema.Resource {
"vhd_uri": {
Type: schema.TypeString,
Required: true,
Optional: true,
},
"managed_disk_id": {
Type: schema.TypeString,
Optional: true,
ForceNew: true,
Computed: true,
ConflictsWith: []string{"storage_data_disk.vhd_uri"},
},
"managed_disk_type": {
Type: schema.TypeString,
Optional: true,
Computed: true,
ConflictsWith: []string{"storage_data_disk.vhd_uri"},
ValidateFunc: validation.StringInSlice([]string{
string(compute.PremiumLRS),
string(compute.StandardLRS),
}, true),
},
"create_option": {
@ -204,9 +243,10 @@ func resourceArmVirtualMachine() *schema.Resource {
},
"disk_size_gb": {
Type: schema.TypeInt,
Optional: true,
Computed: true,
Type: schema.TypeInt,
Optional: true,
Computed: true,
ValidateFunc: validateDiskSizeGB,
},
"lun": {
@ -453,15 +493,6 @@ func validateLicenseType(v interface{}, k string) (ws []string, errors []error)
return
}
func validateDiskSizeGB(v interface{}, k string) (ws []string, errors []error) {
value := v.(int)
if value < 1 || value > 1023 {
errors = append(errors, fmt.Errorf(
"The `disk_size_gb` can only be between 1 and 1023"))
}
return
}
func resourceArmVirtualMachineCreate(d *schema.ResourceData, meta interface{}) error {
client := meta.(*ArmClient)
vmClient := client.vmClient
@ -685,21 +716,29 @@ func resourceArmVirtualMachineDelete(d *schema.ResourceData, meta interface{}) e
// delete OS Disk if opted in
if deleteOsDisk := d.Get("delete_os_disk_on_termination").(bool); deleteOsDisk {
log.Printf("[INFO] delete_os_disk_on_termination is enabled, deleting")
log.Printf("[INFO] delete_os_disk_on_termination is enabled, deleting disk from %s", name)
osDisk, err := expandAzureRmVirtualMachineOsDisk(d)
if err != nil {
return fmt.Errorf("Error expanding OS Disk: %s", err)
}
if err = resourceArmVirtualMachineDeleteVhd(*osDisk.Vhd.URI, meta); err != nil {
return fmt.Errorf("Error deleting OS Disk VHD: %s", err)
if osDisk.Vhd != nil {
if err = resourceArmVirtualMachineDeleteVhd(*osDisk.Vhd.URI, meta); err != nil {
return fmt.Errorf("Error deleting OS Disk VHD: %s", err)
}
} else if osDisk.ManagedDisk != nil {
if err = resourceArmVirtualMachineDeleteManagedDisk(*osDisk.ManagedDisk.ID, meta); err != nil {
return fmt.Errorf("Error deleting OS Managed Disk: %s", err)
}
} else {
return fmt.Errorf("Unable to locate OS managed disk properties from %s", name)
}
}
// delete Data disks if opted in
if deleteDataDisks := d.Get("delete_data_disks_on_termination").(bool); deleteDataDisks {
log.Printf("[INFO] delete_data_disks_on_termination is enabled, deleting each data disk")
log.Printf("[INFO] delete_data_disks_on_termination is enabled, deleting each data disk from %s", name)
disks, err := expandAzureRmVirtualMachineDataDisk(d)
if err != nil {
@ -707,8 +746,16 @@ func resourceArmVirtualMachineDelete(d *schema.ResourceData, meta interface{}) e
}
for _, disk := range disks {
if err = resourceArmVirtualMachineDeleteVhd(*disk.Vhd.URI, meta); err != nil {
return fmt.Errorf("Error deleting Data Disk VHD: %s", err)
if disk.Vhd != nil {
if err = resourceArmVirtualMachineDeleteVhd(*disk.Vhd.URI, meta); err != nil {
return fmt.Errorf("Error deleting Data Disk VHD: %s", err)
}
} else if disk.ManagedDisk != nil {
if err = resourceArmVirtualMachineDeleteManagedDisk(*disk.ManagedDisk.ID, meta); err != nil {
return fmt.Errorf("Error deleting Data Managed Disk: %s", err)
}
} else {
return fmt.Errorf("Unable to locate data managed disk properties from %s", name)
}
}
}
@ -752,6 +799,24 @@ func resourceArmVirtualMachineDeleteVhd(uri string, meta interface{}) error {
return nil
}
func resourceArmVirtualMachineDeleteManagedDisk(managedDiskID string, meta interface{}) error {
diskClient := meta.(*ArmClient).diskClient
id, err := parseAzureResourceID(managedDiskID)
if err != nil {
return err
}
resGroup := id.ResourceGroup
name := id.Path["disks"]
_, err = diskClient.Delete(resGroup, name, make(chan struct{}))
if err != nil {
return fmt.Errorf("Error deleting Managed Disk (%s %s) %s", name, resGroup, err)
}
return nil
}
func resourceArmVirtualMachinePlanHash(v interface{}) int {
var buf bytes.Buffer
m := v.(map[string]interface{})
@ -784,8 +849,9 @@ func resourceArmVirtualMachineStorageOsDiskHash(v interface{}) int {
var buf bytes.Buffer
m := v.(map[string]interface{})
buf.WriteString(fmt.Sprintf("%s-", m["name"].(string)))
buf.WriteString(fmt.Sprintf("%s-", m["vhd_uri"].(string)))
if m["vhd_uri"] != nil {
buf.WriteString(fmt.Sprintf("%s-", m["vhd_uri"].(string)))
}
return hashcode.String(buf.String())
}
@ -883,7 +949,13 @@ func flattenAzureRmVirtualMachineDataDisk(disks *[]compute.DataDisk) interface{}
for i, disk := range *disks {
l := make(map[string]interface{})
l["name"] = *disk.Name
l["vhd_uri"] = *disk.Vhd.URI
if disk.Vhd != nil {
l["vhd_uri"] = *disk.Vhd.URI
}
if disk.ManagedDisk != nil {
l["managed_disk_type"] = string(disk.ManagedDisk.StorageAccountType)
l["managed_disk_id"] = *disk.ManagedDisk.ID
}
l["create_option"] = disk.CreateOption
l["caching"] = string(disk.Caching)
if disk.DiskSizeGB != nil {
@ -982,7 +1054,13 @@ func flattenAzureRmVirtualMachineOsProfileLinuxConfiguration(config *compute.Lin
func flattenAzureRmVirtualMachineOsDisk(disk *compute.OSDisk) []interface{} {
result := make(map[string]interface{})
result["name"] = *disk.Name
result["vhd_uri"] = *disk.Vhd.URI
if disk.Vhd != nil {
result["vhd_uri"] = *disk.Vhd.URI
}
if disk.ManagedDisk != nil {
result["managed_disk_type"] = string(disk.ManagedDisk.StorageAccountType)
result["managed_disk_id"] = *disk.ManagedDisk.ID
}
result["create_option"] = disk.CreateOption
result["caching"] = disk.Caching
if disk.DiskSizeGB != nil {
@ -1157,22 +1235,22 @@ func expandAzureRmVirtualMachineOsProfileWindowsConfig(d *schema.ResourceData) (
if v := osProfileConfig["winrm"]; v != nil {
winRm := v.([]interface{})
if len(winRm) > 0 {
winRmListners := make([]compute.WinRMListener, 0, len(winRm))
winRmListeners := make([]compute.WinRMListener, 0, len(winRm))
for _, winRmConfig := range winRm {
config := winRmConfig.(map[string]interface{})
protocol := config["protocol"].(string)
winRmListner := compute.WinRMListener{
winRmListener := compute.WinRMListener{
Protocol: compute.ProtocolTypes(protocol),
}
if v := config["certificate_url"].(string); v != "" {
winRmListner.CertificateURL = &v
winRmListener.CertificateURL = &v
}
winRmListners = append(winRmListners, winRmListner)
winRmListeners = append(winRmListeners, winRmListener)
}
config.WinRM = &compute.WinRMConfiguration{
Listeners: &winRmListners,
Listeners: &winRmListeners,
}
}
}
@ -1209,19 +1287,48 @@ func expandAzureRmVirtualMachineDataDisk(d *schema.ResourceData) ([]compute.Data
config := disk_config.(map[string]interface{})
name := config["name"].(string)
vhd := config["vhd_uri"].(string)
createOption := config["create_option"].(string)
vhdURI := config["vhd_uri"].(string)
managedDiskType := config["managed_disk_type"].(string)
managedDiskID := config["managed_disk_id"].(string)
lun := int32(config["lun"].(int))
data_disk := compute.DataDisk{
Name: &name,
Vhd: &compute.VirtualHardDisk{
URI: &vhd,
},
Name: &name,
Lun: &lun,
CreateOption: compute.DiskCreateOptionTypes(createOption),
}
if vhdURI != "" {
data_disk.Vhd = &compute.VirtualHardDisk{
URI: &vhdURI,
}
}
managedDisk := &compute.ManagedDiskParameters{}
if managedDiskType != "" {
managedDisk.StorageAccountType = compute.StorageAccountTypes(managedDiskType)
data_disk.ManagedDisk = managedDisk
}
if managedDiskID != "" {
managedDisk.ID = &managedDiskID
data_disk.ManagedDisk = managedDisk
}
//BEGIN: code to be removed after GH-13016 is merged
if vhdURI != "" && managedDiskID != "" {
return nil, fmt.Errorf("[ERROR] Conflict between `vhd_uri` and `managed_disk_id` (only one or the other can be used)")
}
if vhdURI != "" && managedDiskType != "" {
return nil, fmt.Errorf("[ERROR] Conflict between `vhd_uri` and `managed_disk_type` (only one or the other can be used)")
}
//END: code to be removed after GH-13016 is merged
if managedDiskID == "" && strings.EqualFold(string(data_disk.CreateOption), string(compute.Attach)) {
return nil, fmt.Errorf("[ERROR] Must specify which disk to attach")
}
if v := config["caching"].(string); v != "" {
data_disk.Caching = compute.CachingTypes(v)
}
@ -1303,28 +1410,57 @@ func expandAzureRmVirtualMachineNetworkProfile(d *schema.ResourceData) compute.N
func expandAzureRmVirtualMachineOsDisk(d *schema.ResourceData) (*compute.OSDisk, error) {
disks := d.Get("storage_os_disk").(*schema.Set).List()
disk := disks[0].(map[string]interface{})
config := disks[0].(map[string]interface{})
name := disk["name"].(string)
vhdURI := disk["vhd_uri"].(string)
imageURI := disk["image_uri"].(string)
createOption := disk["create_option"].(string)
name := config["name"].(string)
imageURI := config["image_uri"].(string)
createOption := config["create_option"].(string)
vhdURI := config["vhd_uri"].(string)
managedDiskType := config["managed_disk_type"].(string)
managedDiskID := config["managed_disk_id"].(string)
osDisk := &compute.OSDisk{
Name: &name,
Vhd: &compute.VirtualHardDisk{
URI: &vhdURI,
},
Name: &name,
CreateOption: compute.DiskCreateOptionTypes(createOption),
}
if v := disk["image_uri"].(string); v != "" {
if vhdURI != "" {
osDisk.Vhd = &compute.VirtualHardDisk{
URI: &vhdURI,
}
}
managedDisk := &compute.ManagedDiskParameters{}
if managedDiskType != "" {
managedDisk.StorageAccountType = compute.StorageAccountTypes(managedDiskType)
osDisk.ManagedDisk = managedDisk
}
if managedDiskID != "" {
managedDisk.ID = &managedDiskID
osDisk.ManagedDisk = managedDisk
}
//BEGIN: code to be removed after GH-13016 is merged
if vhdURI != "" && managedDiskID != "" {
return nil, fmt.Errorf("[ERROR] Conflict between `vhd_uri` and `managed_disk_id` (only one or the other can be used)")
}
if vhdURI != "" && managedDiskType != "" {
return nil, fmt.Errorf("[ERROR] Conflict between `vhd_uri` and `managed_disk_type` (only one or the other can be used)")
}
//END: code to be removed after GH-13016 is merged
if managedDiskID == "" && strings.EqualFold(string(osDisk.CreateOption), string(compute.Attach)) {
return nil, fmt.Errorf("[ERROR] Must specify which disk to attach")
}
if v := config["image_uri"].(string); v != "" {
osDisk.Image = &compute.VirtualHardDisk{
URI: &imageURI,
}
}
if v := disk["os_type"].(string); v != "" {
if v := config["os_type"].(string); v != "" {
if v == "linux" {
osDisk.OsType = compute.Linux
} else if v == "windows" {
@ -1334,11 +1470,11 @@ func expandAzureRmVirtualMachineOsDisk(d *schema.ResourceData) (*compute.OSDisk,
}
}
if v := disk["caching"].(string); v != "" {
if v := config["caching"].(string); v != "" {
osDisk.Caching = compute.CachingTypes(v)
}
if v := disk["disk_size_gb"].(int); v != 0 {
if v := config["disk_size_gb"].(int); v != 0 {
diskSize := int32(v)
osDisk.DiskSizeGB = &diskSize
}

File diff suppressed because it is too large Load Diff

View File

@ -2,64 +2,107 @@ package bitbucket
import (
"bytes"
"encoding/json"
"fmt"
"io"
"io/ioutil"
"log"
"net/http"
)
// Error represents a error from the bitbucket api.
type Error struct {
APIError struct {
Message string `json:"message,omitempty"`
} `json:"error,omitempty"`
Type string `json:"type,omitempty"`
StatusCode int
Endpoint string
}
func (e Error) Error() string {
return fmt.Sprintf("API Error: %d %s %s", e.StatusCode, e.Endpoint, e.APIError.Message)
}
const (
// BitbucketEndpoint is the fqdn used to talk to bitbucket
BitbucketEndpoint string = "https://api.bitbucket.org/"
)
type BitbucketClient struct {
Username string
Password string
Username string
Password string
HTTPClient *http.Client
}
func (c *BitbucketClient) Do(method, endpoint string, payload *bytes.Buffer) (*http.Response, error) {
absoluteendpoint := BitbucketEndpoint + endpoint
log.Printf("[DEBUG] Sending request to %s %s", method, absoluteendpoint)
var bodyreader io.Reader
if payload != nil {
log.Printf("[DEBUG] With payload %s", payload.String())
bodyreader = payload
}
req, err := http.NewRequest(method, absoluteendpoint, bodyreader)
if err != nil {
return nil, err
}
req.SetBasicAuth(c.Username, c.Password)
if payload != nil {
// Can cause bad request when putting default reviews if set.
req.Header.Add("Content-Type", "application/json")
}
req.Close = true
resp, err := c.HTTPClient.Do(req)
log.Printf("[DEBUG] Resp: %v Err: %v", resp, err)
if resp.StatusCode >= 400 || resp.StatusCode < 200 {
apiError := Error{
StatusCode: resp.StatusCode,
Endpoint: endpoint,
}
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
return nil, err
}
log.Printf("[DEBUG] Resp Body: %s", string(body))
err = json.Unmarshal(body, &apiError)
if err != nil {
apiError.APIError.Message = string(body)
}
return resp, error(apiError)
}
return resp, err
}
func (c *BitbucketClient) Get(endpoint string) (*http.Response, error) {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://api.bitbucket.org/"+endpoint, nil)
if err != nil {
return nil, err
}
req.SetBasicAuth(c.Username, c.Password)
return client.Do(req)
return c.Do("GET", endpoint, nil)
}
func (c *BitbucketClient) Post(endpoint string, jsonpayload *bytes.Buffer) (*http.Response, error) {
client := &http.Client{}
req, err := http.NewRequest("POST", "https://api.bitbucket.org/"+endpoint, jsonpayload)
if err != nil {
return nil, err
}
req.SetBasicAuth(c.Username, c.Password)
req.Header.Add("content-type", "application/json")
return client.Do(req)
return c.Do("POST", endpoint, jsonpayload)
}
func (c *BitbucketClient) Put(endpoint string, jsonpayload *bytes.Buffer) (*http.Response, error) {
client := &http.Client{}
req, err := http.NewRequest("PUT", "https://api.bitbucket.org/"+endpoint, jsonpayload)
if err != nil {
return nil, err
}
req.SetBasicAuth(c.Username, c.Password)
req.Header.Add("content-type", "application/json")
return client.Do(req)
return c.Do("PUT", endpoint, jsonpayload)
}
func (c *BitbucketClient) PutOnly(endpoint string) (*http.Response, error) {
client := &http.Client{}
req, err := http.NewRequest("PUT", "https://api.bitbucket.org/"+endpoint, nil)
if err != nil {
return nil, err
}
req.SetBasicAuth(c.Username, c.Password)
return client.Do(req)
return c.Do("PUT", endpoint, nil)
}
func (c *BitbucketClient) Delete(endpoint string) (*http.Response, error) {
client := &http.Client{}
req, err := http.NewRequest("DELETE", "https://api.bitbucket.org/"+endpoint, nil)
if err != nil {
return nil, err
}
req.SetBasicAuth(c.Username, c.Password)
return client.Do(req)
return c.Do("DELETE", endpoint, nil)
}

View File

@ -1,6 +1,8 @@
package bitbucket
import (
"net/http"
"github.com/hashicorp/terraform/helper/schema"
"github.com/hashicorp/terraform/terraform"
)
@ -30,8 +32,9 @@ func Provider() terraform.ResourceProvider {
func providerConfigure(d *schema.ResourceData) (interface{}, error) {
client := &BitbucketClient{
Username: d.Get("username").(string),
Password: d.Get("password").(string),
Username: d.Get("username").(string),
Password: d.Get("password").(string),
HTTPClient: &http.Client{},
}
return client, nil

View File

@ -3,6 +3,7 @@ package bitbucket
import (
"encoding/json"
"fmt"
"github.com/hashicorp/terraform/helper/schema"
)
@ -49,7 +50,7 @@ func resourceDefaultReviewersCreate(d *schema.ResourceData, m interface{}) error
client := m.(*BitbucketClient)
for _, user := range d.Get("reviewers").(*schema.Set).List() {
reviewer_resp, err := client.PutOnly(fmt.Sprintf("2.0/repositories/%s/%s/default-reviewers/%s",
reviewerResp, err := client.PutOnly(fmt.Sprintf("2.0/repositories/%s/%s/default-reviewers/%s",
d.Get("owner").(string),
d.Get("repository").(string),
user,
@ -59,11 +60,11 @@ func resourceDefaultReviewersCreate(d *schema.ResourceData, m interface{}) error
return err
}
if reviewer_resp.StatusCode != 200 {
return fmt.Errorf("Failed to create reviewer %s got code %d", user.(string), reviewer_resp.StatusCode)
if reviewerResp.StatusCode != 200 {
return fmt.Errorf("Failed to create reviewer %s got code %d", user.(string), reviewerResp.StatusCode)
}
defer reviewer_resp.Body.Close()
defer reviewerResp.Body.Close()
}
d.SetId(fmt.Sprintf("%s/%s/reviewers", d.Get("owner").(string), d.Get("repository").(string)))
@ -72,26 +73,26 @@ func resourceDefaultReviewersCreate(d *schema.ResourceData, m interface{}) error
func resourceDefaultReviewersRead(d *schema.ResourceData, m interface{}) error {
client := m.(*BitbucketClient)
reviewers_response, err := client.Get(fmt.Sprintf("2.0/repositories/%s/%s/default-reviewers",
reviewersResponse, err := client.Get(fmt.Sprintf("2.0/repositories/%s/%s/default-reviewers",
d.Get("owner").(string),
d.Get("repository").(string),
))
var reviewers PaginatedReviewers
decoder := json.NewDecoder(reviewers_response.Body)
decoder := json.NewDecoder(reviewersResponse.Body)
err = decoder.Decode(&reviewers)
if err != nil {
return err
}
terraform_reviewers := make([]string, 0, len(reviewers.Values))
terraformReviewers := make([]string, 0, len(reviewers.Values))
for _, reviewer := range reviewers.Values {
terraform_reviewers = append(terraform_reviewers, reviewer.Username)
terraformReviewers = append(terraformReviewers, reviewer.Username)
}
d.Set("reviewers", terraform_reviewers)
d.Set("reviewers", terraformReviewers)
return nil
}

View File

@ -4,6 +4,10 @@ import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"log"
"net/url"
"github.com/hashicorp/terraform/helper/schema"
)
@ -81,86 +85,89 @@ func resourceHookCreate(d *schema.ResourceData, m interface{}) error {
client := m.(*BitbucketClient)
hook := createHook(d)
var jsonbuffer []byte
jsonpayload := bytes.NewBuffer(jsonbuffer)
enc := json.NewEncoder(jsonpayload)
enc.Encode(hook)
hook_req, err := client.Post(fmt.Sprintf("2.0/repositories/%s/%s/hooks",
d.Get("owner").(string),
d.Get("repository").(string),
), jsonpayload)
decoder := json.NewDecoder(hook_req.Body)
err = decoder.Decode(&hook)
payload, err := json.Marshal(hook)
if err != nil {
return err
}
hook_req, err := client.Post(fmt.Sprintf("2.0/repositories/%s/%s/hooks",
d.Get("owner").(string),
d.Get("repository").(string),
), bytes.NewBuffer(payload))
if err != nil {
return err
}
body, readerr := ioutil.ReadAll(hook_req.Body)
if readerr != nil {
return readerr
}
decodeerr := json.Unmarshal(body, &hook)
if decodeerr != nil {
return decodeerr
}
d.SetId(hook.Uuid)
d.Set("uuid", hook.Uuid)
return resourceHookRead(d, m)
}
func resourceHookRead(d *schema.ResourceData, m interface{}) error {
client := m.(*BitbucketClient)
hook_req, err := client.Get(fmt.Sprintf("2.0/repositories/%s/%s/hooks/%s",
hook_req, _ := client.Get(fmt.Sprintf("2.0/repositories/%s/%s/hooks/%s",
d.Get("owner").(string),
d.Get("repository").(string),
d.Get("uuid").(string),
url.PathEscape(d.Id()),
))
if err != nil {
return err
log.Printf("ID: %s", url.PathEscape(d.Id()))
if hook_req.StatusCode == 200 {
var hook Hook
body, readerr := ioutil.ReadAll(hook_req.Body)
if readerr != nil {
return readerr
}
decodeerr := json.Unmarshal(body, &hook)
if decodeerr != nil {
return decodeerr
}
d.Set("uuid", hook.Uuid)
d.Set("description", hook.Description)
d.Set("active", hook.Active)
d.Set("url", hook.Url)
eventsList := make([]string, 0, len(hook.Events))
for _, event := range hook.Events {
eventsList = append(eventsList, event)
}
d.Set("events", eventsList)
}
var hook Hook
decoder := json.NewDecoder(hook_req.Body)
err = decoder.Decode(&hook)
if err != nil {
return err
}
d.Set("uuid", hook.Uuid)
d.Set("description", hook.Description)
d.Set("active", hook.Active)
d.Set("url", hook.Url)
eventsList := make([]string, 0, len(hook.Events))
for _, event := range hook.Events {
eventsList = append(eventsList, event)
}
d.Set("events", eventsList)
return nil
}
func resourceHookUpdate(d *schema.ResourceData, m interface{}) error {
client := m.(*BitbucketClient)
hook := createHook(d)
var jsonbuffer []byte
jsonpayload := bytes.NewBuffer(jsonbuffer)
enc := json.NewEncoder(jsonpayload)
enc.Encode(hook)
hook_req, err := client.Put(fmt.Sprintf("2.0/repositories/%s/%s/hooks/%s",
d.Get("owner").(string),
d.Get("repository").(string),
d.Get("uuid").(string),
), jsonpayload)
payload, err := json.Marshal(hook)
if err != nil {
return err
}
decoder := json.NewDecoder(hook_req.Body)
err = decoder.Decode(&hook)
_, err = client.Put(fmt.Sprintf("2.0/repositories/%s/%s/hooks/%s",
d.Get("owner").(string),
d.Get("repository").(string),
url.PathEscape(d.Id()),
), bytes.NewBuffer(payload))
if err != nil {
return err
}
@ -174,7 +181,7 @@ func resourceHookExists(d *schema.ResourceData, m interface{}) (bool, error) {
hook_req, err := client.Get(fmt.Sprintf("2.0/repositories/%s/%s/hooks/%s",
d.Get("owner").(string),
d.Get("repository").(string),
d.Get("uuid").(string),
url.PathEscape(d.Id()),
))
if err != nil {
@ -182,15 +189,14 @@ func resourceHookExists(d *schema.ResourceData, m interface{}) (bool, error) {
}
if hook_req.StatusCode != 200 {
d.SetId("")
return false, nil
return false, err
}
return true, nil
} else {
return false, nil
}
return false, nil
}
func resourceHookDelete(d *schema.ResourceData, m interface{}) error {
@ -198,11 +204,9 @@ func resourceHookDelete(d *schema.ResourceData, m interface{}) error {
_, err := client.Delete(fmt.Sprintf("2.0/repositories/%s/%s/hooks/%s",
d.Get("owner").(string),
d.Get("repository").(string),
d.Get("uuid").(string),
url.PathEscape(d.Id()),
))
if err != nil {
return err
}
return nil
return err
}

View File

@ -2,6 +2,7 @@ package bitbucket
import (
"fmt"
"net/url"
"os"
"testing"
@ -16,7 +17,7 @@ func TestAccBitbucketHook_basic(t *testing.T) {
testAccBitbucketHookConfig := fmt.Sprintf(`
resource "bitbucket_repository" "test_repo" {
owner = "%s"
name = "test-repo"
name = "test-repo-for-webhook-test"
}
resource "bitbucket_hook" "test_repo_hook" {
owner = "%s"
@ -51,10 +52,10 @@ func testAccCheckBitbucketHookDestroy(s *terraform.State) error {
return fmt.Errorf("Not found %s", "bitbucket_hook.test_repo_hook")
}
response, err := client.Get(fmt.Sprintf("2.0/repositories/%s/%s/hooks/%s", rs.Primary.Attributes["owner"], rs.Primary.Attributes["repository"], rs.Primary.Attributes["uuid"]))
response, err := client.Get(fmt.Sprintf("2.0/repositories/%s/%s/hooks/%s", rs.Primary.Attributes["owner"], rs.Primary.Attributes["repository"], url.PathEscape(rs.Primary.Attributes["uuid"])))
if err != nil {
return err
if err == nil {
return fmt.Errorf("The resource was found should have errored")
}
if response.StatusCode != 404 {

View File

@ -4,8 +4,9 @@ import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"github.com/hashicorp/terraform/helper/schema"
"log"
)
type CloneUrl struct {
@ -131,7 +132,7 @@ func resourceRepositoryUpdate(d *schema.ResourceData, m interface{}) error {
enc := json.NewEncoder(jsonpayload)
enc.Encode(repository)
repository_response, err := client.Put(fmt.Sprintf("2.0/repositories/%s/%s",
_, err := client.Put(fmt.Sprintf("2.0/repositories/%s/%s",
d.Get("owner").(string),
d.Get("name").(string),
), jsonpayload)
@ -140,16 +141,6 @@ func resourceRepositoryUpdate(d *schema.ResourceData, m interface{}) error {
return err
}
if repository_response.StatusCode == 200 {
decoder := json.NewDecoder(repository_response.Body)
err = decoder.Decode(&repository)
if err != nil {
return err
}
} else {
return fmt.Errorf("Failed to put: %d", repository_response.StatusCode)
}
return resourceRepositoryRead(d, m)
}
@ -157,29 +148,19 @@ func resourceRepositoryCreate(d *schema.ResourceData, m interface{}) error {
client := m.(*BitbucketClient)
repo := newRepositoryFromResource(d)
var jsonbuffer []byte
bytedata, err := json.Marshal(repo)
jsonpayload := bytes.NewBuffer(jsonbuffer)
enc := json.NewEncoder(jsonpayload)
enc.Encode(repo)
log.Printf("Sending %s \n", jsonpayload)
repo_req, err := client.Post(fmt.Sprintf("2.0/repositories/%s/%s",
d.Get("owner").(string),
d.Get("name").(string),
), jsonpayload)
decoder := json.NewDecoder(repo_req.Body)
err = decoder.Decode(&repo)
if err != nil {
return err
}
log.Printf("Received %s \n", repo_req.Body)
_, err = client.Post(fmt.Sprintf("2.0/repositories/%s/%s",
d.Get("owner").(string),
d.Get("name").(string),
), bytes.NewBuffer(bytedata))
if repo_req.StatusCode != 200 {
return fmt.Errorf("Failed to create repository got status code %d", repo_req.StatusCode)
if err != nil {
return err
}
d.SetId(string(fmt.Sprintf("%s/%s", d.Get("owner").(string), d.Get("name").(string))))
@ -189,39 +170,42 @@ func resourceRepositoryCreate(d *schema.ResourceData, m interface{}) error {
func resourceRepositoryRead(d *schema.ResourceData, m interface{}) error {
client := m.(*BitbucketClient)
repo_req, err := client.Get(fmt.Sprintf("2.0/repositories/%s/%s",
repo_req, _ := client.Get(fmt.Sprintf("2.0/repositories/%s/%s",
d.Get("owner").(string),
d.Get("name").(string),
))
if err != nil {
return err
}
if repo_req.StatusCode == 200 {
var repo Repository
var repo Repository
decoder := json.NewDecoder(repo_req.Body)
err = decoder.Decode(&repo)
if err != nil {
return err
}
body, readerr := ioutil.ReadAll(repo_req.Body)
if readerr != nil {
return readerr
}
d.Set("scm", repo.SCM)
d.Set("is_private", repo.IsPrivate)
d.Set("has_wiki", repo.HasWiki)
d.Set("has_issues", repo.HasIssues)
d.Set("name", repo.Name)
d.Set("language", repo.Language)
d.Set("fork_policy", repo.ForkPolicy)
d.Set("website", repo.Website)
d.Set("description", repo.Description)
d.Set("project_key", repo.Project.Key)
decodeerr := json.Unmarshal(body, &repo)
if decodeerr != nil {
return decodeerr
}
for _, clone_url := range repo.Links.Clone {
if clone_url.Name == "https" {
d.Set("clone_https", clone_url.Href)
} else {
d.Set("clone_ssh", clone_url.Href)
d.Set("scm", repo.SCM)
d.Set("is_private", repo.IsPrivate)
d.Set("has_wiki", repo.HasWiki)
d.Set("has_issues", repo.HasIssues)
d.Set("name", repo.Name)
d.Set("language", repo.Language)
d.Set("fork_policy", repo.ForkPolicy)
d.Set("website", repo.Website)
d.Set("description", repo.Description)
d.Set("project_key", repo.Project.Key)
for _, clone_url := range repo.Links.Clone {
if clone_url.Name == "https" {
d.Set("clone_https", clone_url.Href)
} else {
d.Set("clone_ssh", clone_url.Href)
}
}
}
@ -230,18 +214,10 @@ func resourceRepositoryRead(d *schema.ResourceData, m interface{}) error {
func resourceRepositoryDelete(d *schema.ResourceData, m interface{}) error {
client := m.(*BitbucketClient)
delete_response, err := client.Delete(fmt.Sprintf("2.0/repositories/%s/%s",
_, err := client.Delete(fmt.Sprintf("2.0/repositories/%s/%s",
d.Get("owner").(string),
d.Get("name").(string),
))
if err != nil {
return err
}
if delete_response.StatusCode != 204 {
return fmt.Errorf("Failed to delete the repository got status code %d", delete_response.StatusCode)
}
return nil
return err
}

View File

@ -16,9 +16,9 @@ func TestAccBitbucketRepository_basic(t *testing.T) {
testAccBitbucketRepositoryConfig := fmt.Sprintf(`
resource "bitbucket_repository" "test_repo" {
owner = "%s"
name = "%s"
name = "test-repo-for-repository-test"
}
`, testUser, testRepo)
`, testUser)
resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
@ -42,11 +42,7 @@ func testAccCheckBitbucketRepositoryDestroy(s *terraform.State) error {
return fmt.Errorf("Not found %s", "bitbucket_repository.test_repo")
}
response, err := client.Get(fmt.Sprintf("2.0/repositories/%s/%s", rs.Primary.Attributes["owner"], rs.Primary.Attributes["name"]))
if err != nil {
return err
}
response, _ := client.Get(fmt.Sprintf("2.0/repositories/%s/%s", rs.Primary.Attributes["owner"], rs.Primary.Attributes["name"]))
if response.StatusCode != 404 {
return fmt.Errorf("Repository still exists")

View File

@ -62,10 +62,20 @@ type Schema struct {
DiffSuppressFunc SchemaDiffSuppressFunc
// If this is non-nil, then this will be a default value that is used
// when this item is not set in the configuration/state.
// when this item is not set in the configuration.
//
// DefaultFunc can be specified if you want a dynamic default value.
// Only one of Default or DefaultFunc can be set.
// DefaultFunc can be specified to compute a dynamic default.
// Only one of Default or DefaultFunc can be set. If DefaultFunc is
// used then its return value should be stable to avoid generating
// confusing/perpetual diffs.
//
// Changing either Default or the return value of DefaultFunc can be
// a breaking change, especially if the attribute in question has
// ForceNew set. If a default needs to change to align with changing
// assumptions in an upstream API then it may be necessary to also use
// the MigrateState function on the resource to change the state to match,
// or have the Read function adjust the state value to align with the
// new default.
//
// If Required is true above, then Default cannot be set. DefaultFunc
// can be set with Required. If the DefaultFunc returns nil, then there

View File

@ -4,6 +4,7 @@ import (
"fmt"
"github.com/hashicorp/terraform/config"
"github.com/mitchellh/mapstructure"
)
// EvalValidateError is the error structure returned if there were
@ -85,12 +86,31 @@ func (n *EvalValidateProvider) Eval(ctx EvalContext) (interface{}, error) {
type EvalValidateProvisioner struct {
Provisioner *ResourceProvisioner
Config **ResourceConfig
ConnConfig **ResourceConfig
}
func (n *EvalValidateProvisioner) Eval(ctx EvalContext) (interface{}, error) {
provisioner := *n.Provisioner
config := *n.Config
warns, errs := provisioner.Validate(config)
var warns []string
var errs []error
{
// Validate the provisioner's own config first
w, e := provisioner.Validate(config)
warns = append(warns, w...)
errs = append(errs, e...)
}
{
// Now validate the connection config, which might either be from
// the provisioner block itself or inherited from the resource's
// shared connection info.
w, e := n.validateConnConfig(*n.ConnConfig)
warns = append(warns, w...)
errs = append(errs, e...)
}
if len(warns) == 0 && len(errs) == 0 {
return nil, nil
}
@ -101,6 +121,64 @@ func (n *EvalValidateProvisioner) Eval(ctx EvalContext) (interface{}, error) {
}
}
func (n *EvalValidateProvisioner) validateConnConfig(connConfig *ResourceConfig) (warns []string, errs []error) {
// We can't comprehensively validate the connection config since its
// final structure is decided by the communicator and we can't instantiate
// that until we have a complete instance state. However, we *can* catch
// configuration keys that are not valid for *any* communicator, catching
// typos early rather than waiting until we actually try to run one of
// the resource's provisioners.
type connConfigSuperset struct {
// All attribute types are interface{} here because at this point we
// may still have unresolved interpolation expressions, which will
// appear as strings regardless of the final goal type.
Type interface{} `mapstructure:"type"`
User interface{} `mapstructure:"user"`
Password interface{} `mapstructure:"password"`
Host interface{} `mapstructure:"host"`
Port interface{} `mapstructure:"port"`
Timeout interface{} `mapstructure:"timeout"`
ScriptPath interface{} `mapstructure:"script_path"`
// For type=ssh only (enforced in ssh communicator)
PrivateKey interface{} `mapstructure:"private_key"`
Agent interface{} `mapstructure:"agent"`
BastionHost interface{} `mapstructure:"bastion_host"`
BastionPort interface{} `mapstructure:"bastion_port"`
BastionUser interface{} `mapstructure:"bastion_user"`
BastionPassword interface{} `mapstructure:"bastion_password"`
BastionPrivateKey interface{} `mapstructure:"bastion_private_key"`
// For type=winrm only (enforced in winrm communicator)
HTTPS interface{} `mapstructure:"https"`
Insecure interface{} `mapstructure:"insecure"`
CACert interface{} `mapstructure:"cacert"`
}
var metadata mapstructure.Metadata
decoder, err := mapstructure.NewDecoder(&mapstructure.DecoderConfig{
Metadata: &metadata,
Result: &connConfigSuperset{}, // result is disregarded; we only care about unused keys
})
if err != nil {
// should never happen
errs = append(errs, err)
return
}
if err := decoder.Decode(connConfig.Config); err != nil {
errs = append(errs, err)
return
}
for _, attrName := range metadata.Unused {
errs = append(errs, fmt.Errorf("unknown 'connection' argument %q", attrName))
}
return
}
// EvalValidateResource is an EvalNode implementation that validates
// the configuration of a resource.
type EvalValidateResource struct {

View File

@ -178,3 +178,117 @@ func TestEvalValidateResource_ignoreWarnings(t *testing.T) {
t.Fatalf("Expected no error, got: %s", err)
}
}
func TestEvalValidateProvisioner_valid(t *testing.T) {
mp := &MockResourceProvisioner{}
var p ResourceProvisioner = mp
ctx := &MockEvalContext{}
cfg := &ResourceConfig{}
connInfo, err := config.NewRawConfig(map[string]interface{}{})
if err != nil {
t.Fatalf("failed to make connInfo: %s", err)
}
connConfig := NewResourceConfig(connInfo)
node := &EvalValidateProvisioner{
Provisioner: &p,
Config: &cfg,
ConnConfig: &connConfig,
}
result, err := node.Eval(ctx)
if err != nil {
t.Fatalf("node.Eval failed: %s", err)
}
if result != nil {
t.Errorf("node.Eval returned non-nil result")
}
if !mp.ValidateCalled {
t.Fatalf("p.Config not called")
}
if mp.ValidateConfig != cfg {
t.Errorf("p.Config called with wrong config")
}
}
func TestEvalValidateProvisioner_warning(t *testing.T) {
mp := &MockResourceProvisioner{}
var p ResourceProvisioner = mp
ctx := &MockEvalContext{}
cfg := &ResourceConfig{}
connInfo, err := config.NewRawConfig(map[string]interface{}{})
if err != nil {
t.Fatalf("failed to make connInfo: %s", err)
}
connConfig := NewResourceConfig(connInfo)
node := &EvalValidateProvisioner{
Provisioner: &p,
Config: &cfg,
ConnConfig: &connConfig,
}
mp.ValidateReturnWarns = []string{"foo is deprecated"}
_, err = node.Eval(ctx)
if err == nil {
t.Fatalf("node.Eval succeeded; want error")
}
valErr, ok := err.(*EvalValidateError)
if !ok {
t.Fatalf("node.Eval error is %#v; want *EvalValidateError", valErr)
}
warns := valErr.Warnings
if warns == nil || len(warns) != 1 {
t.Fatalf("wrong number of warnings in %#v; want one warning", warns)
}
if warns[0] != mp.ValidateReturnWarns[0] {
t.Fatalf("wrong warning %q; want %q", warns[0], mp.ValidateReturnWarns[0])
}
}
func TestEvalValidateProvisioner_connectionInvalid(t *testing.T) {
var p ResourceProvisioner = &MockResourceProvisioner{}
ctx := &MockEvalContext{}
cfg := &ResourceConfig{}
connInfo, err := config.NewRawConfig(map[string]interface{}{
"bananananananana": "foo",
"bazaz": "bar",
})
if err != nil {
t.Fatalf("failed to make connInfo: %s", err)
}
connConfig := NewResourceConfig(connInfo)
node := &EvalValidateProvisioner{
Provisioner: &p,
Config: &cfg,
ConnConfig: &connConfig,
}
_, err = node.Eval(ctx)
if err == nil {
t.Fatalf("node.Eval succeeded; want error")
}
valErr, ok := err.(*EvalValidateError)
if !ok {
t.Fatalf("node.Eval error is %#v; want *EvalValidateError", valErr)
}
errs := valErr.Errors
if errs == nil || len(errs) != 2 {
t.Fatalf("wrong number of errors in %#v; want two errors", errs)
}
errStr := errs[0].Error()
if !(strings.Contains(errStr, "bananananananana") || strings.Contains(errStr, "bazaz")) {
t.Fatalf("wrong first error %q; want something about our invalid connInfo keys", errStr)
}
}

View File

@ -129,17 +129,29 @@ func (n *NodeValidatableResourceInstance) EvalTree() EvalNode {
// Validate all the provisioners
for _, p := range n.Config.Provisioners {
var provisioner ResourceProvisioner
seq.Nodes = append(seq.Nodes, &EvalGetProvisioner{
Name: p.Type,
Output: &provisioner,
}, &EvalInterpolate{
Config: p.RawConfig.Copy(),
Resource: resource,
Output: &config,
}, &EvalValidateProvisioner{
Provisioner: &provisioner,
Config: &config,
})
var connConfig *ResourceConfig
seq.Nodes = append(
seq.Nodes,
&EvalGetProvisioner{
Name: p.Type,
Output: &provisioner,
},
&EvalInterpolate{
Config: p.RawConfig.Copy(),
Resource: resource,
Output: &config,
},
&EvalInterpolate{
Config: p.ConnInfo.Copy(),
Resource: resource,
Output: &connConfig,
},
&EvalValidateProvisioner{
Provisioner: &provisioner,
Config: &config,
ConnConfig: &connConfig,
},
)
}
return seq

View File

@ -0,0 +1,58 @@
// Package disk implements the Azure ARM Disk service API version
// 2016-04-30-preview.
//
// The Disk Resource Provider Client.
package disk
// Copyright (c) Microsoft and contributors. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//
// See the License for the specific language governing permissions and
// limitations under the License.
//
// Code generated by Microsoft (R) AutoRest Code Generator 1.0.1.0
// Changes may cause incorrect behavior and will be lost if the code is
// regenerated.
import (
"github.com/Azure/go-autorest/autorest"
)
const (
// APIVersion is the version of the Disk
APIVersion = "2016-04-30-preview"
// DefaultBaseURI is the default URI used for the service Disk
DefaultBaseURI = "https://management.azure.com"
)
// ManagementClient is the base client for Disk.
type ManagementClient struct {
autorest.Client
BaseURI string
APIVersion string
SubscriptionID string
}
// New creates an instance of the ManagementClient client.
func New(subscriptionID string) ManagementClient {
return NewWithBaseURI(DefaultBaseURI, subscriptionID)
}
// NewWithBaseURI creates an instance of the ManagementClient client.
func NewWithBaseURI(baseURI string, subscriptionID string) ManagementClient {
return ManagementClient{
Client: autorest.NewClientWithUserAgent(UserAgent()),
BaseURI: baseURI,
APIVersion: APIVersion,
SubscriptionID: subscriptionID,
}
}

View File

@ -0,0 +1,638 @@
package disk
// Copyright (c) Microsoft and contributors. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//
// See the License for the specific language governing permissions and
// limitations under the License.
//
// Code generated by Microsoft (R) AutoRest Code Generator 1.0.1.0
// Changes may cause incorrect behavior and will be lost if the code is
// regenerated.
import (
"github.com/Azure/go-autorest/autorest"
"github.com/Azure/go-autorest/autorest/azure"
"github.com/Azure/go-autorest/autorest/validation"
"net/http"
)
// DisksClient is the the Disk Resource Provider Client.
type DisksClient struct {
ManagementClient
}
// NewDisksClient creates an instance of the DisksClient client.
func NewDisksClient(subscriptionID string) DisksClient {
return NewDisksClientWithBaseURI(DefaultBaseURI, subscriptionID)
}
// NewDisksClientWithBaseURI creates an instance of the DisksClient client.
func NewDisksClientWithBaseURI(baseURI string, subscriptionID string) DisksClient {
return DisksClient{NewWithBaseURI(baseURI, subscriptionID)}
}
// CreateOrUpdate creates or updates a disk. This method may poll for
// completion. Polling can be canceled by passing the cancel channel argument.
// The channel will be used to cancel polling and any outstanding HTTP
// requests.
//
// resourceGroupName is the name of the resource group. diskName is the name of
// the disk within the given subscription and resource group. diskParameter is
// disk object supplied in the body of the Put disk operation.
func (client DisksClient) CreateOrUpdate(resourceGroupName string, diskName string, diskParameter Model, cancel <-chan struct{}) (result autorest.Response, err error) {
if err := validation.Validate([]validation.Validation{
{TargetValue: diskParameter,
Constraints: []validation.Constraint{{Target: "diskParameter.Properties", Name: validation.Null, Rule: false,
Chain: []validation.Constraint{{Target: "diskParameter.Properties.CreationData", Name: validation.Null, Rule: true,
Chain: []validation.Constraint{{Target: "diskParameter.Properties.CreationData.ImageReference", Name: validation.Null, Rule: false,
Chain: []validation.Constraint{{Target: "diskParameter.Properties.CreationData.ImageReference.ID", Name: validation.Null, Rule: true, Chain: nil}}},
}},
{Target: "diskParameter.Properties.EncryptionSettings", Name: validation.Null, Rule: false,
Chain: []validation.Constraint{{Target: "diskParameter.Properties.EncryptionSettings.DiskEncryptionKey", Name: validation.Null, Rule: false,
Chain: []validation.Constraint{{Target: "diskParameter.Properties.EncryptionSettings.DiskEncryptionKey.SourceVault", Name: validation.Null, Rule: true, Chain: nil},
{Target: "diskParameter.Properties.EncryptionSettings.DiskEncryptionKey.SecretURL", Name: validation.Null, Rule: true, Chain: nil},
}},
{Target: "diskParameter.Properties.EncryptionSettings.KeyEncryptionKey", Name: validation.Null, Rule: false,
Chain: []validation.Constraint{{Target: "diskParameter.Properties.EncryptionSettings.KeyEncryptionKey.SourceVault", Name: validation.Null, Rule: true, Chain: nil},
{Target: "diskParameter.Properties.EncryptionSettings.KeyEncryptionKey.KeyURL", Name: validation.Null, Rule: true, Chain: nil},
}},
}},
}}}}}); err != nil {
return result, validation.NewErrorWithValidationError(err, "disk.DisksClient", "CreateOrUpdate")
}
req, err := client.CreateOrUpdatePreparer(resourceGroupName, diskName, diskParameter, cancel)
if err != nil {
return result, autorest.NewErrorWithError(err, "disk.DisksClient", "CreateOrUpdate", nil, "Failure preparing request")
}
resp, err := client.CreateOrUpdateSender(req)
if err != nil {
result.Response = resp
return result, autorest.NewErrorWithError(err, "disk.DisksClient", "CreateOrUpdate", resp, "Failure sending request")
}
result, err = client.CreateOrUpdateResponder(resp)
if err != nil {
err = autorest.NewErrorWithError(err, "disk.DisksClient", "CreateOrUpdate", resp, "Failure responding to request")
}
return
}
// CreateOrUpdatePreparer prepares the CreateOrUpdate request.
func (client DisksClient) CreateOrUpdatePreparer(resourceGroupName string, diskName string, diskParameter Model, cancel <-chan struct{}) (*http.Request, error) {
pathParameters := map[string]interface{}{
"diskName": autorest.Encode("path", diskName),
"resourceGroupName": autorest.Encode("path", resourceGroupName),
"subscriptionId": autorest.Encode("path", client.SubscriptionID),
}
queryParameters := map[string]interface{}{
"api-version": client.APIVersion,
}
preparer := autorest.CreatePreparer(
autorest.AsJSON(),
autorest.AsPut(),
autorest.WithBaseURL(client.BaseURI),
autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks/{diskName}", pathParameters),
autorest.WithJSON(diskParameter),
autorest.WithQueryParameters(queryParameters))
return preparer.Prepare(&http.Request{Cancel: cancel})
}
// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the
// http.Response Body if it receives an error.
func (client DisksClient) CreateOrUpdateSender(req *http.Request) (*http.Response, error) {
return autorest.SendWithSender(client,
req,
azure.DoPollForAsynchronous(client.PollingDelay))
}
// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always
// closes the http.Response Body.
func (client DisksClient) CreateOrUpdateResponder(resp *http.Response) (result autorest.Response, err error) {
err = autorest.Respond(
resp,
client.ByInspecting(),
azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted),
autorest.ByClosing())
result.Response = resp
return
}
// Delete deletes a disk. This method may poll for completion. Polling can be
// canceled by passing the cancel channel argument. The channel will be used to
// cancel polling and any outstanding HTTP requests.
//
// resourceGroupName is the name of the resource group. diskName is the name of
// the disk within the given subscription and resource group.
func (client DisksClient) Delete(resourceGroupName string, diskName string, cancel <-chan struct{}) (result autorest.Response, err error) {
req, err := client.DeletePreparer(resourceGroupName, diskName, cancel)
if err != nil {
return result, autorest.NewErrorWithError(err, "disk.DisksClient", "Delete", nil, "Failure preparing request")
}
resp, err := client.DeleteSender(req)
if err != nil {
result.Response = resp
return result, autorest.NewErrorWithError(err, "disk.DisksClient", "Delete", resp, "Failure sending request")
}
result, err = client.DeleteResponder(resp)
if err != nil {
err = autorest.NewErrorWithError(err, "disk.DisksClient", "Delete", resp, "Failure responding to request")
}
return
}
// DeletePreparer prepares the Delete request.
func (client DisksClient) DeletePreparer(resourceGroupName string, diskName string, cancel <-chan struct{}) (*http.Request, error) {
pathParameters := map[string]interface{}{
"diskName": autorest.Encode("path", diskName),
"resourceGroupName": autorest.Encode("path", resourceGroupName),
"subscriptionId": autorest.Encode("path", client.SubscriptionID),
}
queryParameters := map[string]interface{}{
"api-version": client.APIVersion,
}
preparer := autorest.CreatePreparer(
autorest.AsDelete(),
autorest.WithBaseURL(client.BaseURI),
autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks/{diskName}", pathParameters),
autorest.WithQueryParameters(queryParameters))
return preparer.Prepare(&http.Request{Cancel: cancel})
}
// DeleteSender sends the Delete request. The method will close the
// http.Response Body if it receives an error.
func (client DisksClient) DeleteSender(req *http.Request) (*http.Response, error) {
return autorest.SendWithSender(client,
req,
azure.DoPollForAsynchronous(client.PollingDelay))
}
// DeleteResponder handles the response to the Delete request. The method always
// closes the http.Response Body.
func (client DisksClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) {
err = autorest.Respond(
resp,
client.ByInspecting(),
azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent),
autorest.ByClosing())
result.Response = resp
return
}
// Get gets information about a disk.
//
// resourceGroupName is the name of the resource group. diskName is the name of
// the disk within the given subscription and resource group.
func (client DisksClient) Get(resourceGroupName string, diskName string) (result Model, err error) {
req, err := client.GetPreparer(resourceGroupName, diskName)
if err != nil {
return result, autorest.NewErrorWithError(err, "disk.DisksClient", "Get", nil, "Failure preparing request")
}
resp, err := client.GetSender(req)
if err != nil {
result.Response = autorest.Response{Response: resp}
return result, autorest.NewErrorWithError(err, "disk.DisksClient", "Get", resp, "Failure sending request")
}
result, err = client.GetResponder(resp)
if err != nil {
err = autorest.NewErrorWithError(err, "disk.DisksClient", "Get", resp, "Failure responding to request")
}
return
}
// GetPreparer prepares the Get request.
func (client DisksClient) GetPreparer(resourceGroupName string, diskName string) (*http.Request, error) {
pathParameters := map[string]interface{}{
"diskName": autorest.Encode("path", diskName),
"resourceGroupName": autorest.Encode("path", resourceGroupName),
"subscriptionId": autorest.Encode("path", client.SubscriptionID),
}
queryParameters := map[string]interface{}{
"api-version": client.APIVersion,
}
preparer := autorest.CreatePreparer(
autorest.AsGet(),
autorest.WithBaseURL(client.BaseURI),
autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks/{diskName}", pathParameters),
autorest.WithQueryParameters(queryParameters))
return preparer.Prepare(&http.Request{})
}
// GetSender sends the Get request. The method will close the
// http.Response Body if it receives an error.
func (client DisksClient) GetSender(req *http.Request) (*http.Response, error) {
return autorest.SendWithSender(client, req)
}
// GetResponder handles the response to the Get request. The method always
// closes the http.Response Body.
func (client DisksClient) GetResponder(resp *http.Response) (result Model, err error) {
err = autorest.Respond(
resp,
client.ByInspecting(),
azure.WithErrorUnlessStatusCode(http.StatusOK),
autorest.ByUnmarshallingJSON(&result),
autorest.ByClosing())
result.Response = autorest.Response{Response: resp}
return
}
// GrantAccess grants access to a disk. This method may poll for completion.
// Polling can be canceled by passing the cancel channel argument. The channel
// will be used to cancel polling and any outstanding HTTP requests.
//
// resourceGroupName is the name of the resource group. diskName is the name of
// the disk within the given subscription and resource group. grantAccessData
// is access data object supplied in the body of the get disk access operation.
func (client DisksClient) GrantAccess(resourceGroupName string, diskName string, grantAccessData GrantAccessData, cancel <-chan struct{}) (result autorest.Response, err error) {
if err := validation.Validate([]validation.Validation{
{TargetValue: grantAccessData,
Constraints: []validation.Constraint{{Target: "grantAccessData.DurationInSeconds", Name: validation.Null, Rule: true, Chain: nil}}}}); err != nil {
return result, validation.NewErrorWithValidationError(err, "disk.DisksClient", "GrantAccess")
}
req, err := client.GrantAccessPreparer(resourceGroupName, diskName, grantAccessData, cancel)
if err != nil {
return result, autorest.NewErrorWithError(err, "disk.DisksClient", "GrantAccess", nil, "Failure preparing request")
}
resp, err := client.GrantAccessSender(req)
if err != nil {
result.Response = resp
return result, autorest.NewErrorWithError(err, "disk.DisksClient", "GrantAccess", resp, "Failure sending request")
}
result, err = client.GrantAccessResponder(resp)
if err != nil {
err = autorest.NewErrorWithError(err, "disk.DisksClient", "GrantAccess", resp, "Failure responding to request")
}
return
}
// GrantAccessPreparer prepares the GrantAccess request.
func (client DisksClient) GrantAccessPreparer(resourceGroupName string, diskName string, grantAccessData GrantAccessData, cancel <-chan struct{}) (*http.Request, error) {
pathParameters := map[string]interface{}{
"diskName": autorest.Encode("path", diskName),
"resourceGroupName": autorest.Encode("path", resourceGroupName),
"subscriptionId": autorest.Encode("path", client.SubscriptionID),
}
queryParameters := map[string]interface{}{
"api-version": client.APIVersion,
}
preparer := autorest.CreatePreparer(
autorest.AsJSON(),
autorest.AsPost(),
autorest.WithBaseURL(client.BaseURI),
autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks/{diskName}/beginGetAccess", pathParameters),
autorest.WithJSON(grantAccessData),
autorest.WithQueryParameters(queryParameters))
return preparer.Prepare(&http.Request{Cancel: cancel})
}
// GrantAccessSender sends the GrantAccess request. The method will close the
// http.Response Body if it receives an error.
func (client DisksClient) GrantAccessSender(req *http.Request) (*http.Response, error) {
return autorest.SendWithSender(client,
req,
azure.DoPollForAsynchronous(client.PollingDelay))
}
// GrantAccessResponder handles the response to the GrantAccess request. The method always
// closes the http.Response Body.
func (client DisksClient) GrantAccessResponder(resp *http.Response) (result autorest.Response, err error) {
err = autorest.Respond(
resp,
client.ByInspecting(),
azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted),
autorest.ByClosing())
result.Response = resp
return
}
// List lists all the disks under a subscription.
func (client DisksClient) List() (result ListType, err error) {
req, err := client.ListPreparer()
if err != nil {
return result, autorest.NewErrorWithError(err, "disk.DisksClient", "List", nil, "Failure preparing request")
}
resp, err := client.ListSender(req)
if err != nil {
result.Response = autorest.Response{Response: resp}
return result, autorest.NewErrorWithError(err, "disk.DisksClient", "List", resp, "Failure sending request")
}
result, err = client.ListResponder(resp)
if err != nil {
err = autorest.NewErrorWithError(err, "disk.DisksClient", "List", resp, "Failure responding to request")
}
return
}
// ListPreparer prepares the List request.
func (client DisksClient) ListPreparer() (*http.Request, error) {
pathParameters := map[string]interface{}{
"subscriptionId": autorest.Encode("path", client.SubscriptionID),
}
queryParameters := map[string]interface{}{
"api-version": client.APIVersion,
}
preparer := autorest.CreatePreparer(
autorest.AsGet(),
autorest.WithBaseURL(client.BaseURI),
autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/disks", pathParameters),
autorest.WithQueryParameters(queryParameters))
return preparer.Prepare(&http.Request{})
}
// ListSender sends the List request. The method will close the
// http.Response Body if it receives an error.
func (client DisksClient) ListSender(req *http.Request) (*http.Response, error) {
return autorest.SendWithSender(client, req)
}
// ListResponder handles the response to the List request. The method always
// closes the http.Response Body.
func (client DisksClient) ListResponder(resp *http.Response) (result ListType, err error) {
err = autorest.Respond(
resp,
client.ByInspecting(),
azure.WithErrorUnlessStatusCode(http.StatusOK),
autorest.ByUnmarshallingJSON(&result),
autorest.ByClosing())
result.Response = autorest.Response{Response: resp}
return
}
// ListNextResults retrieves the next set of results, if any.
func (client DisksClient) ListNextResults(lastResults ListType) (result ListType, err error) {
req, err := lastResults.ListTypePreparer()
if err != nil {
return result, autorest.NewErrorWithError(err, "disk.DisksClient", "List", nil, "Failure preparing next results request")
}
if req == nil {
return
}
resp, err := client.ListSender(req)
if err != nil {
result.Response = autorest.Response{Response: resp}
return result, autorest.NewErrorWithError(err, "disk.DisksClient", "List", resp, "Failure sending next results request")
}
result, err = client.ListResponder(resp)
if err != nil {
err = autorest.NewErrorWithError(err, "disk.DisksClient", "List", resp, "Failure responding to next results request")
}
return
}
// ListByResourceGroup lists all the disks under a resource group.
//
// resourceGroupName is the name of the resource group.
func (client DisksClient) ListByResourceGroup(resourceGroupName string) (result ListType, err error) {
req, err := client.ListByResourceGroupPreparer(resourceGroupName)
if err != nil {
return result, autorest.NewErrorWithError(err, "disk.DisksClient", "ListByResourceGroup", nil, "Failure preparing request")
}
resp, err := client.ListByResourceGroupSender(req)
if err != nil {
result.Response = autorest.Response{Response: resp}
return result, autorest.NewErrorWithError(err, "disk.DisksClient", "ListByResourceGroup", resp, "Failure sending request")
}
result, err = client.ListByResourceGroupResponder(resp)
if err != nil {
err = autorest.NewErrorWithError(err, "disk.DisksClient", "ListByResourceGroup", resp, "Failure responding to request")
}
return
}
// ListByResourceGroupPreparer prepares the ListByResourceGroup request.
func (client DisksClient) ListByResourceGroupPreparer(resourceGroupName string) (*http.Request, error) {
pathParameters := map[string]interface{}{
"resourceGroupName": autorest.Encode("path", resourceGroupName),
"subscriptionId": autorest.Encode("path", client.SubscriptionID),
}
queryParameters := map[string]interface{}{
"api-version": client.APIVersion,
}
preparer := autorest.CreatePreparer(
autorest.AsGet(),
autorest.WithBaseURL(client.BaseURI),
autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks", pathParameters),
autorest.WithQueryParameters(queryParameters))
return preparer.Prepare(&http.Request{})
}
// ListByResourceGroupSender sends the ListByResourceGroup request. The method will close the
// http.Response Body if it receives an error.
func (client DisksClient) ListByResourceGroupSender(req *http.Request) (*http.Response, error) {
return autorest.SendWithSender(client, req)
}
// ListByResourceGroupResponder handles the response to the ListByResourceGroup request. The method always
// closes the http.Response Body.
func (client DisksClient) ListByResourceGroupResponder(resp *http.Response) (result ListType, err error) {
err = autorest.Respond(
resp,
client.ByInspecting(),
azure.WithErrorUnlessStatusCode(http.StatusOK),
autorest.ByUnmarshallingJSON(&result),
autorest.ByClosing())
result.Response = autorest.Response{Response: resp}
return
}
// ListByResourceGroupNextResults retrieves the next set of results, if any.
func (client DisksClient) ListByResourceGroupNextResults(lastResults ListType) (result ListType, err error) {
req, err := lastResults.ListTypePreparer()
if err != nil {
return result, autorest.NewErrorWithError(err, "disk.DisksClient", "ListByResourceGroup", nil, "Failure preparing next results request")
}
if req == nil {
return
}
resp, err := client.ListByResourceGroupSender(req)
if err != nil {
result.Response = autorest.Response{Response: resp}
return result, autorest.NewErrorWithError(err, "disk.DisksClient", "ListByResourceGroup", resp, "Failure sending next results request")
}
result, err = client.ListByResourceGroupResponder(resp)
if err != nil {
err = autorest.NewErrorWithError(err, "disk.DisksClient", "ListByResourceGroup", resp, "Failure responding to next results request")
}
return
}
// RevokeAccess revokes access to a disk. This method may poll for completion.
// Polling can be canceled by passing the cancel channel argument. The channel
// will be used to cancel polling and any outstanding HTTP requests.
//
// resourceGroupName is the name of the resource group. diskName is the name of
// the disk within the given subscription and resource group.
func (client DisksClient) RevokeAccess(resourceGroupName string, diskName string, cancel <-chan struct{}) (result autorest.Response, err error) {
req, err := client.RevokeAccessPreparer(resourceGroupName, diskName, cancel)
if err != nil {
return result, autorest.NewErrorWithError(err, "disk.DisksClient", "RevokeAccess", nil, "Failure preparing request")
}
resp, err := client.RevokeAccessSender(req)
if err != nil {
result.Response = resp
return result, autorest.NewErrorWithError(err, "disk.DisksClient", "RevokeAccess", resp, "Failure sending request")
}
result, err = client.RevokeAccessResponder(resp)
if err != nil {
err = autorest.NewErrorWithError(err, "disk.DisksClient", "RevokeAccess", resp, "Failure responding to request")
}
return
}
// RevokeAccessPreparer prepares the RevokeAccess request.
func (client DisksClient) RevokeAccessPreparer(resourceGroupName string, diskName string, cancel <-chan struct{}) (*http.Request, error) {
pathParameters := map[string]interface{}{
"diskName": autorest.Encode("path", diskName),
"resourceGroupName": autorest.Encode("path", resourceGroupName),
"subscriptionId": autorest.Encode("path", client.SubscriptionID),
}
queryParameters := map[string]interface{}{
"api-version": client.APIVersion,
}
preparer := autorest.CreatePreparer(
autorest.AsPost(),
autorest.WithBaseURL(client.BaseURI),
autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks/{diskName}/endGetAccess", pathParameters),
autorest.WithQueryParameters(queryParameters))
return preparer.Prepare(&http.Request{Cancel: cancel})
}
// RevokeAccessSender sends the RevokeAccess request. The method will close the
// http.Response Body if it receives an error.
func (client DisksClient) RevokeAccessSender(req *http.Request) (*http.Response, error) {
return autorest.SendWithSender(client,
req,
azure.DoPollForAsynchronous(client.PollingDelay))
}
// RevokeAccessResponder handles the response to the RevokeAccess request. The method always
// closes the http.Response Body.
func (client DisksClient) RevokeAccessResponder(resp *http.Response) (result autorest.Response, err error) {
err = autorest.Respond(
resp,
client.ByInspecting(),
azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted),
autorest.ByClosing())
result.Response = resp
return
}
// Update updates (patches) a disk. This method may poll for completion.
// Polling can be canceled by passing the cancel channel argument. The channel
// will be used to cancel polling and any outstanding HTTP requests.
//
// resourceGroupName is the name of the resource group. diskName is the name of
// the disk within the given subscription and resource group. diskParameter is
// disk object supplied in the body of the Patch disk operation.
func (client DisksClient) Update(resourceGroupName string, diskName string, diskParameter UpdateType, cancel <-chan struct{}) (result autorest.Response, err error) {
req, err := client.UpdatePreparer(resourceGroupName, diskName, diskParameter, cancel)
if err != nil {
return result, autorest.NewErrorWithError(err, "disk.DisksClient", "Update", nil, "Failure preparing request")
}
resp, err := client.UpdateSender(req)
if err != nil {
result.Response = resp
return result, autorest.NewErrorWithError(err, "disk.DisksClient", "Update", resp, "Failure sending request")
}
result, err = client.UpdateResponder(resp)
if err != nil {
err = autorest.NewErrorWithError(err, "disk.DisksClient", "Update", resp, "Failure responding to request")
}
return
}
// UpdatePreparer prepares the Update request.
func (client DisksClient) UpdatePreparer(resourceGroupName string, diskName string, diskParameter UpdateType, cancel <-chan struct{}) (*http.Request, error) {
pathParameters := map[string]interface{}{
"diskName": autorest.Encode("path", diskName),
"resourceGroupName": autorest.Encode("path", resourceGroupName),
"subscriptionId": autorest.Encode("path", client.SubscriptionID),
}
queryParameters := map[string]interface{}{
"api-version": client.APIVersion,
}
preparer := autorest.CreatePreparer(
autorest.AsJSON(),
autorest.AsPatch(),
autorest.WithBaseURL(client.BaseURI),
autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks/{diskName}", pathParameters),
autorest.WithJSON(diskParameter),
autorest.WithQueryParameters(queryParameters))
return preparer.Prepare(&http.Request{Cancel: cancel})
}
// UpdateSender sends the Update request. The method will close the
// http.Response Body if it receives an error.
func (client DisksClient) UpdateSender(req *http.Request) (*http.Response, error) {
return autorest.SendWithSender(client,
req,
azure.DoPollForAsynchronous(client.PollingDelay))
}
// UpdateResponder handles the response to the Update request. The method always
// closes the http.Response Body.
func (client DisksClient) UpdateResponder(resp *http.Response) (result autorest.Response, err error) {
err = autorest.Respond(
resp,
client.ByInspecting(),
azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted),
autorest.ByClosing())
result.Response = resp
return
}

View File

@ -0,0 +1,278 @@
package disk
// Copyright (c) Microsoft and contributors. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//
// See the License for the specific language governing permissions and
// limitations under the License.
//
// Code generated by Microsoft (R) AutoRest Code Generator 1.0.1.0
// Changes may cause incorrect behavior and will be lost if the code is
// regenerated.
import (
"github.com/Azure/go-autorest/autorest"
"github.com/Azure/go-autorest/autorest/date"
"github.com/Azure/go-autorest/autorest/to"
"net/http"
)
// AccessLevel enumerates the values for access level.
type AccessLevel string
const (
// None specifies the none state for access level.
None AccessLevel = "None"
// Read specifies the read state for access level.
Read AccessLevel = "Read"
)
// CreateOption enumerates the values for create option.
type CreateOption string
const (
// Attach specifies the attach state for create option.
Attach CreateOption = "Attach"
// Copy specifies the copy state for create option.
Copy CreateOption = "Copy"
// Empty specifies the empty state for create option.
Empty CreateOption = "Empty"
// FromImage specifies the from image state for create option.
FromImage CreateOption = "FromImage"
// Import specifies the import state for create option.
Import CreateOption = "Import"
// Restore specifies the restore state for create option.
Restore CreateOption = "Restore"
)
// OperatingSystemTypes enumerates the values for operating system types.
type OperatingSystemTypes string
const (
// Linux specifies the linux state for operating system types.
Linux OperatingSystemTypes = "Linux"
// Windows specifies the windows state for operating system types.
Windows OperatingSystemTypes = "Windows"
)
// StorageAccountTypes enumerates the values for storage account types.
type StorageAccountTypes string
const (
// PremiumLRS specifies the premium lrs state for storage account types.
PremiumLRS StorageAccountTypes = "Premium_LRS"
// StandardLRS specifies the standard lrs state for storage account types.
StandardLRS StorageAccountTypes = "Standard_LRS"
)
// AccessURI is a disk access SAS uri.
type AccessURI struct {
autorest.Response `json:"-"`
*AccessURIOutput `json:"properties,omitempty"`
}
// AccessURIOutput is azure properties, including output.
type AccessURIOutput struct {
*AccessURIRaw `json:"output,omitempty"`
}
// AccessURIRaw is this object gets 'bubbled up' through flattening.
type AccessURIRaw struct {
AccessSAS *string `json:"accessSAS,omitempty"`
}
// APIError is api error.
type APIError struct {
Details *[]APIErrorBase `json:"details,omitempty"`
Innererror *InnerError `json:"innererror,omitempty"`
Code *string `json:"code,omitempty"`
Target *string `json:"target,omitempty"`
Message *string `json:"message,omitempty"`
}
// APIErrorBase is api error base.
type APIErrorBase struct {
Code *string `json:"code,omitempty"`
Target *string `json:"target,omitempty"`
Message *string `json:"message,omitempty"`
}
// CreationData is data used when creating a disk.
type CreationData struct {
CreateOption CreateOption `json:"createOption,omitempty"`
StorageAccountID *string `json:"storageAccountId,omitempty"`
ImageReference *ImageDiskReference `json:"imageReference,omitempty"`
SourceURI *string `json:"sourceUri,omitempty"`
SourceResourceID *string `json:"sourceResourceId,omitempty"`
}
// EncryptionSettings is encryption settings for disk or snapshot
type EncryptionSettings struct {
Enabled *bool `json:"enabled,omitempty"`
DiskEncryptionKey *KeyVaultAndSecretReference `json:"diskEncryptionKey,omitempty"`
KeyEncryptionKey *KeyVaultAndKeyReference `json:"keyEncryptionKey,omitempty"`
}
// GrantAccessData is data used for requesting a SAS.
type GrantAccessData struct {
Access AccessLevel `json:"access,omitempty"`
DurationInSeconds *int32 `json:"durationInSeconds,omitempty"`
}
// ImageDiskReference is the source image used for creating the disk.
type ImageDiskReference struct {
ID *string `json:"id,omitempty"`
Lun *int32 `json:"lun,omitempty"`
}
// InnerError is inner error details.
type InnerError struct {
Exceptiontype *string `json:"exceptiontype,omitempty"`
Errordetail *string `json:"errordetail,omitempty"`
}
// KeyVaultAndKeyReference is key Vault Key Url and vault id of KeK, KeK is
// optional and when provided is used to unwrap the encryptionKey
type KeyVaultAndKeyReference struct {
SourceVault *SourceVault `json:"sourceVault,omitempty"`
KeyURL *string `json:"keyUrl,omitempty"`
}
// KeyVaultAndSecretReference is key Vault Secret Url and vault id of the
// encryption key
type KeyVaultAndSecretReference struct {
SourceVault *SourceVault `json:"sourceVault,omitempty"`
SecretURL *string `json:"secretUrl,omitempty"`
}
// ListType is the List Disks operation response.
type ListType struct {
autorest.Response `json:"-"`
Value *[]Model `json:"value,omitempty"`
NextLink *string `json:"nextLink,omitempty"`
}
// ListTypePreparer prepares a request to retrieve the next set of results. It returns
// nil if no more results exist.
func (client ListType) ListTypePreparer() (*http.Request, error) {
if client.NextLink == nil || len(to.String(client.NextLink)) <= 0 {
return nil, nil
}
return autorest.Prepare(&http.Request{},
autorest.AsJSON(),
autorest.AsGet(),
autorest.WithBaseURL(to.String(client.NextLink)))
}
// Model is disk resource.
type Model struct {
autorest.Response `json:"-"`
ID *string `json:"id,omitempty"`
Name *string `json:"name,omitempty"`
Type *string `json:"type,omitempty"`
Location *string `json:"location,omitempty"`
Tags *map[string]*string `json:"tags,omitempty"`
*Properties `json:"properties,omitempty"`
}
// OperationStatusResponse is operation status response
type OperationStatusResponse struct {
autorest.Response `json:"-"`
Name *string `json:"name,omitempty"`
Status *string `json:"status,omitempty"`
StartTime *date.Time `json:"startTime,omitempty"`
EndTime *date.Time `json:"endTime,omitempty"`
Error *APIError `json:"error,omitempty"`
}
// Properties is disk resource properties.
type Properties struct {
AccountType StorageAccountTypes `json:"accountType,omitempty"`
TimeCreated *date.Time `json:"timeCreated,omitempty"`
OsType OperatingSystemTypes `json:"osType,omitempty"`
CreationData *CreationData `json:"creationData,omitempty"`
DiskSizeGB *int32 `json:"diskSizeGB,omitempty"`
EncryptionSettings *EncryptionSettings `json:"encryptionSettings,omitempty"`
OwnerID *string `json:"ownerId,omitempty"`
ProvisioningState *string `json:"provisioningState,omitempty"`
}
// Resource is the Resource model definition.
type Resource struct {
ID *string `json:"id,omitempty"`
Name *string `json:"name,omitempty"`
Type *string `json:"type,omitempty"`
Location *string `json:"location,omitempty"`
Tags *map[string]*string `json:"tags,omitempty"`
}
// ResourceUpdate is the Resource model definition.
type ResourceUpdate struct {
Tags *map[string]*string `json:"tags,omitempty"`
}
// Snapshot is snapshot resource.
type Snapshot struct {
autorest.Response `json:"-"`
ID *string `json:"id,omitempty"`
Name *string `json:"name,omitempty"`
Type *string `json:"type,omitempty"`
Location *string `json:"location,omitempty"`
Tags *map[string]*string `json:"tags,omitempty"`
*Properties `json:"properties,omitempty"`
}
// SnapshotList is the List Snapshots operation response.
type SnapshotList struct {
autorest.Response `json:"-"`
Value *[]Snapshot `json:"value,omitempty"`
NextLink *string `json:"nextLink,omitempty"`
}
// SnapshotListPreparer prepares a request to retrieve the next set of results. It returns
// nil if no more results exist.
func (client SnapshotList) SnapshotListPreparer() (*http.Request, error) {
if client.NextLink == nil || len(to.String(client.NextLink)) <= 0 {
return nil, nil
}
return autorest.Prepare(&http.Request{},
autorest.AsJSON(),
autorest.AsGet(),
autorest.WithBaseURL(to.String(client.NextLink)))
}
// SnapshotUpdate is snapshot update resource.
type SnapshotUpdate struct {
Tags *map[string]*string `json:"tags,omitempty"`
*UpdateProperties `json:"properties,omitempty"`
}
// SourceVault is the vault id is an Azure Resource Manager Resoure id in the
// form
// /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.KeyVault/vaults/{vaultName}
type SourceVault struct {
ID *string `json:"id,omitempty"`
}
// UpdateProperties is disk resource update properties.
type UpdateProperties struct {
AccountType StorageAccountTypes `json:"accountType,omitempty"`
OsType OperatingSystemTypes `json:"osType,omitempty"`
CreationData *CreationData `json:"creationData,omitempty"`
DiskSizeGB *int32 `json:"diskSizeGB,omitempty"`
EncryptionSettings *EncryptionSettings `json:"encryptionSettings,omitempty"`
}
// UpdateType is disk update resource.
type UpdateType struct {
Tags *map[string]*string `json:"tags,omitempty"`
*UpdateProperties `json:"properties,omitempty"`
}

View File

@ -0,0 +1,643 @@
package disk
// Copyright (c) Microsoft and contributors. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//
// See the License for the specific language governing permissions and
// limitations under the License.
//
// Code generated by Microsoft (R) AutoRest Code Generator 1.0.1.0
// Changes may cause incorrect behavior and will be lost if the code is
// regenerated.
import (
"github.com/Azure/go-autorest/autorest"
"github.com/Azure/go-autorest/autorest/azure"
"github.com/Azure/go-autorest/autorest/validation"
"net/http"
)
// SnapshotsClient is the the Disk Resource Provider Client.
type SnapshotsClient struct {
ManagementClient
}
// NewSnapshotsClient creates an instance of the SnapshotsClient client.
func NewSnapshotsClient(subscriptionID string) SnapshotsClient {
return NewSnapshotsClientWithBaseURI(DefaultBaseURI, subscriptionID)
}
// NewSnapshotsClientWithBaseURI creates an instance of the SnapshotsClient
// client.
func NewSnapshotsClientWithBaseURI(baseURI string, subscriptionID string) SnapshotsClient {
return SnapshotsClient{NewWithBaseURI(baseURI, subscriptionID)}
}
// CreateOrUpdate creates or updates a snapshot. This method may poll for
// completion. Polling can be canceled by passing the cancel channel argument.
// The channel will be used to cancel polling and any outstanding HTTP
// requests.
//
// resourceGroupName is the name of the resource group. snapshotName is the
// name of the snapshot within the given subscription and resource group.
// snapshot is snapshot object supplied in the body of the Put disk operation.
func (client SnapshotsClient) CreateOrUpdate(resourceGroupName string, snapshotName string, snapshot Snapshot, cancel <-chan struct{}) (result autorest.Response, err error) {
if err := validation.Validate([]validation.Validation{
{TargetValue: snapshot,
Constraints: []validation.Constraint{{Target: "snapshot.Properties", Name: validation.Null, Rule: false,
Chain: []validation.Constraint{{Target: "snapshot.Properties.CreationData", Name: validation.Null, Rule: true,
Chain: []validation.Constraint{{Target: "snapshot.Properties.CreationData.ImageReference", Name: validation.Null, Rule: false,
Chain: []validation.Constraint{{Target: "snapshot.Properties.CreationData.ImageReference.ID", Name: validation.Null, Rule: true, Chain: nil}}},
}},
{Target: "snapshot.Properties.EncryptionSettings", Name: validation.Null, Rule: false,
Chain: []validation.Constraint{{Target: "snapshot.Properties.EncryptionSettings.DiskEncryptionKey", Name: validation.Null, Rule: false,
Chain: []validation.Constraint{{Target: "snapshot.Properties.EncryptionSettings.DiskEncryptionKey.SourceVault", Name: validation.Null, Rule: true, Chain: nil},
{Target: "snapshot.Properties.EncryptionSettings.DiskEncryptionKey.SecretURL", Name: validation.Null, Rule: true, Chain: nil},
}},
{Target: "snapshot.Properties.EncryptionSettings.KeyEncryptionKey", Name: validation.Null, Rule: false,
Chain: []validation.Constraint{{Target: "snapshot.Properties.EncryptionSettings.KeyEncryptionKey.SourceVault", Name: validation.Null, Rule: true, Chain: nil},
{Target: "snapshot.Properties.EncryptionSettings.KeyEncryptionKey.KeyURL", Name: validation.Null, Rule: true, Chain: nil},
}},
}},
}}}}}); err != nil {
return result, validation.NewErrorWithValidationError(err, "disk.SnapshotsClient", "CreateOrUpdate")
}
req, err := client.CreateOrUpdatePreparer(resourceGroupName, snapshotName, snapshot, cancel)
if err != nil {
return result, autorest.NewErrorWithError(err, "disk.SnapshotsClient", "CreateOrUpdate", nil, "Failure preparing request")
}
resp, err := client.CreateOrUpdateSender(req)
if err != nil {
result.Response = resp
return result, autorest.NewErrorWithError(err, "disk.SnapshotsClient", "CreateOrUpdate", resp, "Failure sending request")
}
result, err = client.CreateOrUpdateResponder(resp)
if err != nil {
err = autorest.NewErrorWithError(err, "disk.SnapshotsClient", "CreateOrUpdate", resp, "Failure responding to request")
}
return
}
// CreateOrUpdatePreparer prepares the CreateOrUpdate request.
func (client SnapshotsClient) CreateOrUpdatePreparer(resourceGroupName string, snapshotName string, snapshot Snapshot, cancel <-chan struct{}) (*http.Request, error) {
pathParameters := map[string]interface{}{
"resourceGroupName": autorest.Encode("path", resourceGroupName),
"snapshotName": autorest.Encode("path", snapshotName),
"subscriptionId": autorest.Encode("path", client.SubscriptionID),
}
queryParameters := map[string]interface{}{
"api-version": client.APIVersion,
}
preparer := autorest.CreatePreparer(
autorest.AsJSON(),
autorest.AsPut(),
autorest.WithBaseURL(client.BaseURI),
autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/snapshots/{snapshotName}", pathParameters),
autorest.WithJSON(snapshot),
autorest.WithQueryParameters(queryParameters))
return preparer.Prepare(&http.Request{Cancel: cancel})
}
// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the
// http.Response Body if it receives an error.
func (client SnapshotsClient) CreateOrUpdateSender(req *http.Request) (*http.Response, error) {
return autorest.SendWithSender(client,
req,
azure.DoPollForAsynchronous(client.PollingDelay))
}
// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always
// closes the http.Response Body.
func (client SnapshotsClient) CreateOrUpdateResponder(resp *http.Response) (result autorest.Response, err error) {
err = autorest.Respond(
resp,
client.ByInspecting(),
azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted),
autorest.ByClosing())
result.Response = resp
return
}
// Delete deletes a snapshot. This method may poll for completion. Polling can
// be canceled by passing the cancel channel argument. The channel will be used
// to cancel polling and any outstanding HTTP requests.
//
// resourceGroupName is the name of the resource group. snapshotName is the
// name of the snapshot within the given subscription and resource group.
func (client SnapshotsClient) Delete(resourceGroupName string, snapshotName string, cancel <-chan struct{}) (result autorest.Response, err error) {
req, err := client.DeletePreparer(resourceGroupName, snapshotName, cancel)
if err != nil {
return result, autorest.NewErrorWithError(err, "disk.SnapshotsClient", "Delete", nil, "Failure preparing request")
}
resp, err := client.DeleteSender(req)
if err != nil {
result.Response = resp
return result, autorest.NewErrorWithError(err, "disk.SnapshotsClient", "Delete", resp, "Failure sending request")
}
result, err = client.DeleteResponder(resp)
if err != nil {
err = autorest.NewErrorWithError(err, "disk.SnapshotsClient", "Delete", resp, "Failure responding to request")
}
return
}
// DeletePreparer prepares the Delete request.
func (client SnapshotsClient) DeletePreparer(resourceGroupName string, snapshotName string, cancel <-chan struct{}) (*http.Request, error) {
pathParameters := map[string]interface{}{
"resourceGroupName": autorest.Encode("path", resourceGroupName),
"snapshotName": autorest.Encode("path", snapshotName),
"subscriptionId": autorest.Encode("path", client.SubscriptionID),
}
queryParameters := map[string]interface{}{
"api-version": client.APIVersion,
}
preparer := autorest.CreatePreparer(
autorest.AsDelete(),
autorest.WithBaseURL(client.BaseURI),
autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/snapshots/{snapshotName}", pathParameters),
autorest.WithQueryParameters(queryParameters))
return preparer.Prepare(&http.Request{Cancel: cancel})
}
// DeleteSender sends the Delete request. The method will close the
// http.Response Body if it receives an error.
func (client SnapshotsClient) DeleteSender(req *http.Request) (*http.Response, error) {
return autorest.SendWithSender(client,
req,
azure.DoPollForAsynchronous(client.PollingDelay))
}
// DeleteResponder handles the response to the Delete request. The method always
// closes the http.Response Body.
func (client SnapshotsClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) {
err = autorest.Respond(
resp,
client.ByInspecting(),
azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent),
autorest.ByClosing())
result.Response = resp
return
}
// Get gets information about a snapshot.
//
// resourceGroupName is the name of the resource group. snapshotName is the
// name of the snapshot within the given subscription and resource group.
func (client SnapshotsClient) Get(resourceGroupName string, snapshotName string) (result Snapshot, err error) {
req, err := client.GetPreparer(resourceGroupName, snapshotName)
if err != nil {
return result, autorest.NewErrorWithError(err, "disk.SnapshotsClient", "Get", nil, "Failure preparing request")
}
resp, err := client.GetSender(req)
if err != nil {
result.Response = autorest.Response{Response: resp}
return result, autorest.NewErrorWithError(err, "disk.SnapshotsClient", "Get", resp, "Failure sending request")
}
result, err = client.GetResponder(resp)
if err != nil {
err = autorest.NewErrorWithError(err, "disk.SnapshotsClient", "Get", resp, "Failure responding to request")
}
return
}
// GetPreparer prepares the Get request.
func (client SnapshotsClient) GetPreparer(resourceGroupName string, snapshotName string) (*http.Request, error) {
pathParameters := map[string]interface{}{
"resourceGroupName": autorest.Encode("path", resourceGroupName),
"snapshotName": autorest.Encode("path", snapshotName),
"subscriptionId": autorest.Encode("path", client.SubscriptionID),
}
queryParameters := map[string]interface{}{
"api-version": client.APIVersion,
}
preparer := autorest.CreatePreparer(
autorest.AsGet(),
autorest.WithBaseURL(client.BaseURI),
autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/snapshots/{snapshotName}", pathParameters),
autorest.WithQueryParameters(queryParameters))
return preparer.Prepare(&http.Request{})
}
// GetSender sends the Get request. The method will close the
// http.Response Body if it receives an error.
func (client SnapshotsClient) GetSender(req *http.Request) (*http.Response, error) {
return autorest.SendWithSender(client, req)
}
// GetResponder handles the response to the Get request. The method always
// closes the http.Response Body.
func (client SnapshotsClient) GetResponder(resp *http.Response) (result Snapshot, err error) {
err = autorest.Respond(
resp,
client.ByInspecting(),
azure.WithErrorUnlessStatusCode(http.StatusOK),
autorest.ByUnmarshallingJSON(&result),
autorest.ByClosing())
result.Response = autorest.Response{Response: resp}
return
}
// GrantAccess grants access to a snapshot. This method may poll for
// completion. Polling can be canceled by passing the cancel channel argument.
// The channel will be used to cancel polling and any outstanding HTTP
// requests.
//
// resourceGroupName is the name of the resource group. snapshotName is the
// name of the snapshot within the given subscription and resource group.
// grantAccessData is access data object supplied in the body of the get
// snapshot access operation.
func (client SnapshotsClient) GrantAccess(resourceGroupName string, snapshotName string, grantAccessData GrantAccessData, cancel <-chan struct{}) (result autorest.Response, err error) {
if err := validation.Validate([]validation.Validation{
{TargetValue: grantAccessData,
Constraints: []validation.Constraint{{Target: "grantAccessData.DurationInSeconds", Name: validation.Null, Rule: true, Chain: nil}}}}); err != nil {
return result, validation.NewErrorWithValidationError(err, "disk.SnapshotsClient", "GrantAccess")
}
req, err := client.GrantAccessPreparer(resourceGroupName, snapshotName, grantAccessData, cancel)
if err != nil {
return result, autorest.NewErrorWithError(err, "disk.SnapshotsClient", "GrantAccess", nil, "Failure preparing request")
}
resp, err := client.GrantAccessSender(req)
if err != nil {
result.Response = resp
return result, autorest.NewErrorWithError(err, "disk.SnapshotsClient", "GrantAccess", resp, "Failure sending request")
}
result, err = client.GrantAccessResponder(resp)
if err != nil {
err = autorest.NewErrorWithError(err, "disk.SnapshotsClient", "GrantAccess", resp, "Failure responding to request")
}
return
}
// GrantAccessPreparer prepares the GrantAccess request.
func (client SnapshotsClient) GrantAccessPreparer(resourceGroupName string, snapshotName string, grantAccessData GrantAccessData, cancel <-chan struct{}) (*http.Request, error) {
pathParameters := map[string]interface{}{
"resourceGroupName": autorest.Encode("path", resourceGroupName),
"snapshotName": autorest.Encode("path", snapshotName),
"subscriptionId": autorest.Encode("path", client.SubscriptionID),
}
queryParameters := map[string]interface{}{
"api-version": client.APIVersion,
}
preparer := autorest.CreatePreparer(
autorest.AsJSON(),
autorest.AsPost(),
autorest.WithBaseURL(client.BaseURI),
autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/snapshots/{snapshotName}/beginGetAccess", pathParameters),
autorest.WithJSON(grantAccessData),
autorest.WithQueryParameters(queryParameters))
return preparer.Prepare(&http.Request{Cancel: cancel})
}
// GrantAccessSender sends the GrantAccess request. The method will close the
// http.Response Body if it receives an error.
func (client SnapshotsClient) GrantAccessSender(req *http.Request) (*http.Response, error) {
return autorest.SendWithSender(client,
req,
azure.DoPollForAsynchronous(client.PollingDelay))
}
// GrantAccessResponder handles the response to the GrantAccess request. The method always
// closes the http.Response Body.
func (client SnapshotsClient) GrantAccessResponder(resp *http.Response) (result autorest.Response, err error) {
err = autorest.Respond(
resp,
client.ByInspecting(),
azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted),
autorest.ByClosing())
result.Response = resp
return
}
// List lists snapshots under a subscription.
func (client SnapshotsClient) List() (result SnapshotList, err error) {
req, err := client.ListPreparer()
if err != nil {
return result, autorest.NewErrorWithError(err, "disk.SnapshotsClient", "List", nil, "Failure preparing request")
}
resp, err := client.ListSender(req)
if err != nil {
result.Response = autorest.Response{Response: resp}
return result, autorest.NewErrorWithError(err, "disk.SnapshotsClient", "List", resp, "Failure sending request")
}
result, err = client.ListResponder(resp)
if err != nil {
err = autorest.NewErrorWithError(err, "disk.SnapshotsClient", "List", resp, "Failure responding to request")
}
return
}
// ListPreparer prepares the List request.
func (client SnapshotsClient) ListPreparer() (*http.Request, error) {
pathParameters := map[string]interface{}{
"subscriptionId": autorest.Encode("path", client.SubscriptionID),
}
queryParameters := map[string]interface{}{
"api-version": client.APIVersion,
}
preparer := autorest.CreatePreparer(
autorest.AsGet(),
autorest.WithBaseURL(client.BaseURI),
autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/snapshots", pathParameters),
autorest.WithQueryParameters(queryParameters))
return preparer.Prepare(&http.Request{})
}
// ListSender sends the List request. The method will close the
// http.Response Body if it receives an error.
func (client SnapshotsClient) ListSender(req *http.Request) (*http.Response, error) {
return autorest.SendWithSender(client, req)
}
// ListResponder handles the response to the List request. The method always
// closes the http.Response Body.
func (client SnapshotsClient) ListResponder(resp *http.Response) (result SnapshotList, err error) {
err = autorest.Respond(
resp,
client.ByInspecting(),
azure.WithErrorUnlessStatusCode(http.StatusOK),
autorest.ByUnmarshallingJSON(&result),
autorest.ByClosing())
result.Response = autorest.Response{Response: resp}
return
}
// ListNextResults retrieves the next set of results, if any.
func (client SnapshotsClient) ListNextResults(lastResults SnapshotList) (result SnapshotList, err error) {
req, err := lastResults.SnapshotListPreparer()
if err != nil {
return result, autorest.NewErrorWithError(err, "disk.SnapshotsClient", "List", nil, "Failure preparing next results request")
}
if req == nil {
return
}
resp, err := client.ListSender(req)
if err != nil {
result.Response = autorest.Response{Response: resp}
return result, autorest.NewErrorWithError(err, "disk.SnapshotsClient", "List", resp, "Failure sending next results request")
}
result, err = client.ListResponder(resp)
if err != nil {
err = autorest.NewErrorWithError(err, "disk.SnapshotsClient", "List", resp, "Failure responding to next results request")
}
return
}
// ListByResourceGroup lists snapshots under a resource group.
//
// resourceGroupName is the name of the resource group.
func (client SnapshotsClient) ListByResourceGroup(resourceGroupName string) (result SnapshotList, err error) {
req, err := client.ListByResourceGroupPreparer(resourceGroupName)
if err != nil {
return result, autorest.NewErrorWithError(err, "disk.SnapshotsClient", "ListByResourceGroup", nil, "Failure preparing request")
}
resp, err := client.ListByResourceGroupSender(req)
if err != nil {
result.Response = autorest.Response{Response: resp}
return result, autorest.NewErrorWithError(err, "disk.SnapshotsClient", "ListByResourceGroup", resp, "Failure sending request")
}
result, err = client.ListByResourceGroupResponder(resp)
if err != nil {
err = autorest.NewErrorWithError(err, "disk.SnapshotsClient", "ListByResourceGroup", resp, "Failure responding to request")
}
return
}
// ListByResourceGroupPreparer prepares the ListByResourceGroup request.
func (client SnapshotsClient) ListByResourceGroupPreparer(resourceGroupName string) (*http.Request, error) {
pathParameters := map[string]interface{}{
"resourceGroupName": autorest.Encode("path", resourceGroupName),
"subscriptionId": autorest.Encode("path", client.SubscriptionID),
}
queryParameters := map[string]interface{}{
"api-version": client.APIVersion,
}
preparer := autorest.CreatePreparer(
autorest.AsGet(),
autorest.WithBaseURL(client.BaseURI),
autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/snapshots", pathParameters),
autorest.WithQueryParameters(queryParameters))
return preparer.Prepare(&http.Request{})
}
// ListByResourceGroupSender sends the ListByResourceGroup request. The method will close the
// http.Response Body if it receives an error.
func (client SnapshotsClient) ListByResourceGroupSender(req *http.Request) (*http.Response, error) {
return autorest.SendWithSender(client, req)
}
// ListByResourceGroupResponder handles the response to the ListByResourceGroup request. The method always
// closes the http.Response Body.
func (client SnapshotsClient) ListByResourceGroupResponder(resp *http.Response) (result SnapshotList, err error) {
err = autorest.Respond(
resp,
client.ByInspecting(),
azure.WithErrorUnlessStatusCode(http.StatusOK),
autorest.ByUnmarshallingJSON(&result),
autorest.ByClosing())
result.Response = autorest.Response{Response: resp}
return
}
// ListByResourceGroupNextResults retrieves the next set of results, if any.
func (client SnapshotsClient) ListByResourceGroupNextResults(lastResults SnapshotList) (result SnapshotList, err error) {
req, err := lastResults.SnapshotListPreparer()
if err != nil {
return result, autorest.NewErrorWithError(err, "disk.SnapshotsClient", "ListByResourceGroup", nil, "Failure preparing next results request")
}
if req == nil {
return
}
resp, err := client.ListByResourceGroupSender(req)
if err != nil {
result.Response = autorest.Response{Response: resp}
return result, autorest.NewErrorWithError(err, "disk.SnapshotsClient", "ListByResourceGroup", resp, "Failure sending next results request")
}
result, err = client.ListByResourceGroupResponder(resp)
if err != nil {
err = autorest.NewErrorWithError(err, "disk.SnapshotsClient", "ListByResourceGroup", resp, "Failure responding to next results request")
}
return
}
// RevokeAccess revokes access to a snapshot. This method may poll for
// completion. Polling can be canceled by passing the cancel channel argument.
// The channel will be used to cancel polling and any outstanding HTTP
// requests.
//
// resourceGroupName is the name of the resource group. snapshotName is the
// name of the snapshot within the given subscription and resource group.
func (client SnapshotsClient) RevokeAccess(resourceGroupName string, snapshotName string, cancel <-chan struct{}) (result autorest.Response, err error) {
req, err := client.RevokeAccessPreparer(resourceGroupName, snapshotName, cancel)
if err != nil {
return result, autorest.NewErrorWithError(err, "disk.SnapshotsClient", "RevokeAccess", nil, "Failure preparing request")
}
resp, err := client.RevokeAccessSender(req)
if err != nil {
result.Response = resp
return result, autorest.NewErrorWithError(err, "disk.SnapshotsClient", "RevokeAccess", resp, "Failure sending request")
}
result, err = client.RevokeAccessResponder(resp)
if err != nil {
err = autorest.NewErrorWithError(err, "disk.SnapshotsClient", "RevokeAccess", resp, "Failure responding to request")
}
return
}
// RevokeAccessPreparer prepares the RevokeAccess request.
func (client SnapshotsClient) RevokeAccessPreparer(resourceGroupName string, snapshotName string, cancel <-chan struct{}) (*http.Request, error) {
pathParameters := map[string]interface{}{
"resourceGroupName": autorest.Encode("path", resourceGroupName),
"snapshotName": autorest.Encode("path", snapshotName),
"subscriptionId": autorest.Encode("path", client.SubscriptionID),
}
queryParameters := map[string]interface{}{
"api-version": client.APIVersion,
}
preparer := autorest.CreatePreparer(
autorest.AsPost(),
autorest.WithBaseURL(client.BaseURI),
autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/snapshots/{snapshotName}/endGetAccess", pathParameters),
autorest.WithQueryParameters(queryParameters))
return preparer.Prepare(&http.Request{Cancel: cancel})
}
// RevokeAccessSender sends the RevokeAccess request. The method will close the
// http.Response Body if it receives an error.
func (client SnapshotsClient) RevokeAccessSender(req *http.Request) (*http.Response, error) {
return autorest.SendWithSender(client,
req,
azure.DoPollForAsynchronous(client.PollingDelay))
}
// RevokeAccessResponder handles the response to the RevokeAccess request. The method always
// closes the http.Response Body.
func (client SnapshotsClient) RevokeAccessResponder(resp *http.Response) (result autorest.Response, err error) {
err = autorest.Respond(
resp,
client.ByInspecting(),
azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted),
autorest.ByClosing())
result.Response = resp
return
}
// Update updates (patches) a snapshot. This method may poll for completion.
// Polling can be canceled by passing the cancel channel argument. The channel
// will be used to cancel polling and any outstanding HTTP requests.
//
// resourceGroupName is the name of the resource group. snapshotName is the
// name of the snapshot within the given subscription and resource group.
// snapshot is snapshot object supplied in the body of the Patch snapshot
// operation.
func (client SnapshotsClient) Update(resourceGroupName string, snapshotName string, snapshot SnapshotUpdate, cancel <-chan struct{}) (result autorest.Response, err error) {
req, err := client.UpdatePreparer(resourceGroupName, snapshotName, snapshot, cancel)
if err != nil {
return result, autorest.NewErrorWithError(err, "disk.SnapshotsClient", "Update", nil, "Failure preparing request")
}
resp, err := client.UpdateSender(req)
if err != nil {
result.Response = resp
return result, autorest.NewErrorWithError(err, "disk.SnapshotsClient", "Update", resp, "Failure sending request")
}
result, err = client.UpdateResponder(resp)
if err != nil {
err = autorest.NewErrorWithError(err, "disk.SnapshotsClient", "Update", resp, "Failure responding to request")
}
return
}
// UpdatePreparer prepares the Update request.
func (client SnapshotsClient) UpdatePreparer(resourceGroupName string, snapshotName string, snapshot SnapshotUpdate, cancel <-chan struct{}) (*http.Request, error) {
pathParameters := map[string]interface{}{
"resourceGroupName": autorest.Encode("path", resourceGroupName),
"snapshotName": autorest.Encode("path", snapshotName),
"subscriptionId": autorest.Encode("path", client.SubscriptionID),
}
queryParameters := map[string]interface{}{
"api-version": client.APIVersion,
}
preparer := autorest.CreatePreparer(
autorest.AsJSON(),
autorest.AsPatch(),
autorest.WithBaseURL(client.BaseURI),
autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/snapshots/{snapshotName}", pathParameters),
autorest.WithJSON(snapshot),
autorest.WithQueryParameters(queryParameters))
return preparer.Prepare(&http.Request{Cancel: cancel})
}
// UpdateSender sends the Update request. The method will close the
// http.Response Body if it receives an error.
func (client SnapshotsClient) UpdateSender(req *http.Request) (*http.Response, error) {
return autorest.SendWithSender(client,
req,
azure.DoPollForAsynchronous(client.PollingDelay))
}
// UpdateResponder handles the response to the Update request. The method always
// closes the http.Response Body.
func (client SnapshotsClient) UpdateResponder(resp *http.Response) (result autorest.Response, err error) {
err = autorest.Respond(
resp,
client.ByInspecting(),
azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted),
autorest.ByClosing())
result.Response = resp
return
}

View File

@ -0,0 +1,60 @@
package disk
// Copyright (c) Microsoft and contributors. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//
// See the License for the specific language governing permissions and
// limitations under the License.
//
// Code generated by Microsoft (R) AutoRest Code Generator 1.0.1.0
// Changes may cause incorrect behavior and will be lost if the code is
// regenerated.
import (
"bytes"
"fmt"
"strings"
)
const (
major = "8"
minor = "1"
patch = "0"
tag = "beta"
userAgentFormat = "Azure-SDK-For-Go/%s arm-%s/%s"
)
// cached results of UserAgent and Version to prevent repeated operations.
var (
userAgent string
version string
)
// UserAgent returns the UserAgent string to use when sending http.Requests.
func UserAgent() string {
if userAgent == "" {
userAgent = fmt.Sprintf(userAgentFormat, Version(), "disk", "2016-04-30-preview")
}
return userAgent
}
// Version returns the semantic version (see http://semver.org) of the client.
func Version() string {
if version == "" {
versionBuilder := bytes.NewBufferString(fmt.Sprintf("%s.%s.%s", major, minor, patch))
if tag != "" {
versionBuilder.WriteRune('-')
versionBuilder.WriteString(strings.TrimPrefix(tag, "-"))
}
version = string(versionBuilder.Bytes())
}
return version
}

8
vendor/vendor.json vendored
View File

@ -50,6 +50,14 @@
"version": "v8.1.0-beta",
"versionExact": "v8.1.0-beta"
},
{
"checksumSHA1": "iAZi+Mh1Tivk3bdBbAEz+bd5nPg=",
"path": "github.com/Azure/azure-sdk-for-go/arm/disk",
"revision": "ecf40e315d5ab0ca6d7b3b7f7fbb5c1577814813",
"revisionTime": "2017-03-02T00:14:02Z",
"version": "v8.1.0-beta",
"versionExact": "v8.1.0-beta"
},
{
"checksumSHA1": "ro1i9qoJcSgbWgV7D93wXhBwoL8=",
"comment": "v2.1.1-beta-8-gca4d906",

View File

@ -1,3 +1,3 @@
source "https://rubygems.org"
gem "middleman-hashicorp", "0.3.13"
gem "middleman-hashicorp", "0.3.22"

View File

@ -6,7 +6,7 @@ GEM
minitest (~> 5.1)
thread_safe (~> 0.3, >= 0.3.4)
tzinfo (~> 1.1)
autoprefixer-rails (6.7.6)
autoprefixer-rails (6.7.7.1)
execjs
bootstrap-sass (3.3.7)
autoprefixer-rails (>= 5.2.1)
@ -77,7 +77,7 @@ GEM
rack (>= 1.4.5, < 2.0)
thor (>= 0.15.2, < 2.0)
tilt (~> 1.4.1, < 2.0)
middleman-hashicorp (0.3.13)
middleman-hashicorp (0.3.22)
bootstrap-sass (~> 3.3)
builder (~> 3.2)
middleman (~> 3.4)
@ -103,7 +103,7 @@ GEM
mini_portile2 (2.1.0)
minitest (5.10.1)
multi_json (1.12.1)
nokogiri (1.7.0.1)
nokogiri (1.7.1)
mini_portile2 (~> 2.1.0)
padrino-helpers (0.12.8.1)
i18n (~> 0.6, >= 0.6.7)
@ -138,7 +138,7 @@ GEM
turbolinks (5.0.1)
turbolinks-source (~> 5)
turbolinks-source (5.0.0)
tzinfo (1.2.2)
tzinfo (1.2.3)
thread_safe (~> 0.1)
uber (0.0.15)
uglifier (2.7.2)
@ -151,7 +151,7 @@ PLATFORMS
ruby
DEPENDENCIES
middleman-hashicorp (= 0.3.13)
middleman-hashicorp (= 0.3.22)
BUNDLED WITH
1.14.6

View File

@ -1,14 +1,24 @@
VERSION?="0.3.13"
VERSION?="0.3.22"
build:
@echo "==> Starting build in Docker..."
@docker run \
--interactive \
--rm \
--tty \
--volume "$(shell pwd):/website" \
hashicorp/middleman-hashicorp:${VERSION} \
bundle exec middleman build --verbose --clean
website:
@echo "==> Starting website in Docker..."
@docker run \
--interactive \
--rm \
--interactive \
--rm \
--tty \
--publish "4567:4567" \
--publish "35729:35729" \
--volume "$(shell pwd):/website" \
hashicorp/middleman-hashicorp:${VERSION}
.PHONY: website
.PHONY: build website

View File

@ -7,6 +7,15 @@ activate :hashicorp do |h|
end
helpers do
# Returns the FQDN of the image URL.
#
# @param [String] path
#
# @return [String]
def image_url(path)
File.join(base_url, image_path(path))
end
# Get the title for the page.
#
# @param [Middleman::Page] page
@ -26,17 +35,66 @@ helpers do
#
# @return [String]
def description_for(page)
return escape_html(page.data.description || "")
description = (page.data.description || "")
.gsub('"', '')
.gsub(/\n+/, ' ')
.squeeze(' ')
return escape_html(description)
end
# This helps by setting the "active" class for sidebar nav elements
# if the YAML frontmatter matches the expected value.
def sidebar_current(expected)
current = current_page.data.sidebar_current || ""
if current == expected or (expected.is_a?(Regexp) and expected.match(current))
if current.start_with?(expected)
return " class=\"active\""
else
return ""
end
end
# Returns the id for this page.
# @return [String]
def body_id_for(page)
if !(name = page.data.sidebar_current).blank?
return "page-#{name.strip}"
end
if page.url == "/" || page.url == "/index.html"
return "page-home"
end
if !(title = page.data.page_title).blank?
return title
.downcase
.gsub('"', '')
.gsub(/[^\w]+/, '-')
.gsub(/_+/, '-')
.squeeze('-')
.squeeze(' ')
end
return ""
end
# Returns the list of classes for this page.
# @return [String]
def body_classes_for(page)
classes = []
if !(layout = page.data.layout).blank?
classes << "layout-#{page.data.layout}"
end
if !(title = page.data.page_title).blank?
title = title
.downcase
.gsub('"', '')
.gsub(/[^\w]+/, '-')
.gsub(/_+/, '-')
.squeeze('-')
.squeeze(' ')
classes << "page-#{title}"
end
return classes.join(" ")
end
end

View File

@ -8,7 +8,7 @@
"builders": [
{
"type": "docker",
"image": "hashicorp/middleman-hashicorp:0.3.13",
"image": "hashicorp/middleman-hashicorp:0.3.22",
"discard": "true",
"run_command": ["-d", "-i", "-t", "{{ .Image }}", "/bin/sh"]
}

View File

@ -1,2 +0,0 @@
# Source folder
node_modules/

View File

@ -1,11 +0,0 @@
---
layout: "inner"
noindex: true
page_title: "404"
---
<h1>Page not found</h1>
<p>
Unfortunately, the page you requested can't be found.
</p>

View File

@ -0,0 +1,14 @@
---
layout: "inner"
page_title: "Not Found"
noindex: true
description: |-
Page not found!
---
# Page Not Found
Sorry, the page you tried to visit does not exist. This could be our fault,
and if so we will fix that up right away.
Please go back, or go back to get back on track.

View File

@ -0,0 +1,18 @@
{
"name": "HashiCorp Terraform",
"icons": [
{
"src": "<%= image_path('favicons/android-chrome-192x192.png') %>",
"sizes": "192x192",
"type": "image/png"
},
{
"src": "<%= image_path('favicons/android-chrome-512x512.png') %>",
"sizes": "512x512",
"type": "image/png"
}
],
"theme_color": "#ffffff",
"background_color": "#ffffff",
"display": "standalone"
}

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 75 KiB

View File

@ -1,289 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 19.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 91.6 29.8" style="enable-background:new 0 0 91.6 29.8;" xml:space="preserve">
<style type="text/css">
.st0{clip-path:url(#SVGID_1_);}
.st1{clip-path:url(#SVGID_2_);fill:#FEFEFE;}
.st2{clip-path:url(#SVGID_3_);}
.st3{clip-path:url(#SVGID_4_);fill:#FEFEFE;}
.st4{clip-path:url(#SVGID_5_);}
.st5{clip-path:url(#SVGID_6_);fill:#FEFEFE;}
.st6{clip-path:url(#SVGID_7_);}
.st7{clip-path:url(#SVGID_8_);fill:#FEFEFE;}
.st8{clip-path:url(#SVGID_9_);}
.st9{clip-path:url(#SVGID_10_);fill:#FEFEFE;}
.st10{clip-path:url(#SVGID_11_);}
.st11{clip-path:url(#SVGID_12_);fill:#FEFEFE;}
.st12{clip-path:url(#SVGID_13_);}
.st13{clip-path:url(#SVGID_14_);fill:#FEFEFE;}
.st14{clip-path:url(#SVGID_15_);}
.st15{clip-path:url(#SVGID_16_);fill:#FEFEFE;}
.st16{clip-path:url(#SVGID_17_);}
.st17{clip-path:url(#SVGID_18_);fill:#FEFEFE;}
.st18{clip-path:url(#SVGID_19_);}
.st19{clip-path:url(#SVGID_20_);fill:#FEFEFE;}
.st20{clip-path:url(#SVGID_21_);}
.st21{clip-path:url(#SVGID_22_);fill:#FEFEFE;}
.st22{clip-path:url(#SVGID_23_);}
.st23{clip-path:url(#SVGID_24_);fill:#FEFEFE;}
.st24{clip-path:url(#SVGID_25_);}
.st25{clip-path:url(#SVGID_26_);fill:#FEFEFE;}
</style>
<g>
<defs>
<path id="SVGID_53_" d="M62.1,21.6C62.1,21.6,62.1,21.6,62.1,21.6c-3.9,2.5-8.5,5.1-13.5,7.9l-0.2,0.1c-0.1,0-0.1,0.1,0,0.2
c0,0.1,0.1,0.1,0.2,0l0.2-0.1c4.2-2,9.1-4.4,13.9-6.8c0,0,0.1,0,0.1,0C62.5,22.5,62.3,22,62.1,21.6 M87.7,2.8
C81.6-3.4,42,2.2,25.2,5.5l-0.4,0.1c-0.1,0-0.1,0.1-0.1,0.2c0,0.1,0.1,0.1,0.2,0.1l0.4-0.1C39.2,3.5,68.2,0.4,74.4,6
c1.9,1.7,1.4,3.9-0.8,6.5c1.2,0.7,2,1.8,2.4,3.1C84.7,10.5,90.5,5.5,87.7,2.8"/>
</defs>
<clipPath id="SVGID_1_">
<use xlink:href="#SVGID_53_" style="overflow:visible;"/>
</clipPath>
<g class="st0">
<defs>
<rect id="SVGID_55_" x="-836.3" y="-1474.9" width="1610.8" height="9218.9"/>
</defs>
<clipPath id="SVGID_2_">
<use xlink:href="#SVGID_55_" style="overflow:visible;"/>
</clipPath>
<rect x="19" y="-5.7" class="st1" width="75.1" height="41.2"/>
</g>
</g>
<g>
<defs>
<path id="SVGID_57_" d="M64.6,20c0.1,2.2,1.6,3.9,3.6,3.9c3.8,0,5.4-4.2,5.3-7.1c-0.1-2.2-1.6-3.9-3.6-3.9
C66.6,12.9,64.5,17.1,64.6,20 M62.6,19.8c-0.1-3.7,3-7.5,7.7-7.5c3.1,0,5.1,1.9,5.2,4.7c0.1,3.9-2.8,7.5-7.7,7.5
C64.8,24.6,62.7,22.7,62.6,19.8"/>
</defs>
<clipPath id="SVGID_3_">
<use xlink:href="#SVGID_57_" style="overflow:visible;"/>
</clipPath>
<g class="st2">
<defs>
<rect id="SVGID_59_" x="-836.3" y="-1474.9" width="1610.8" height="9218.9"/>
</defs>
<clipPath id="SVGID_4_">
<use xlink:href="#SVGID_59_" style="overflow:visible;"/>
</clipPath>
<rect x="56.9" y="6.7" class="st3" width="24.3" height="23.6"/>
</g>
</g>
<g>
<defs>
<path id="SVGID_61_" d="M18.7,18.9c-0.2,0.1-0.4,0.1-0.6,0.2c-0.3,0.1-0.7,0.1-1.4,0.2c-0.5,0.1-0.8,0.2-1,0.3
c-0.2,0.1-0.3,0.3-0.3,0.4c0,0.2,0,0.3,0.2,0.5c0.2,0.1,0.5,0.2,0.9,0.2c0.3,0,0.6,0,1-0.1c0.3-0.1,0.6-0.2,0.8-0.4
c0.2-0.1,0.3-0.3,0.3-0.4C18.6,19.5,18.7,19.3,18.7,18.9 M22.8,16.6c0,0.3-0.1,0.6-0.2,1.2l-0.7,3.5c-0.1,0.3,0.1,0.6,0.4,0.7
l0,0.1l-3.9,0l0-0.9c-0.6,0.3-1.3,0.6-1.9,0.7c-0.6,0.1-1.1,0.2-1.9,0.2c-1.3,0-2-0.1-2.5-0.5c-0.5-0.4-0.8-0.7-0.7-1.2
c0-0.3,0.2-0.7,0.5-1c0.3-0.3,0.6-0.5,1-0.7c0.4-0.2,0.9-0.3,1.6-0.4c0.7-0.1,1.7-0.2,2.9-0.3c0.7-0.1,1.1-0.2,1.3-0.3
c0.3-0.1,0.4-0.2,0.4-0.4c0.1-0.4-0.1-0.6-0.6-0.7c-1.4-0.3-4,0.2-5.4,0.5l0.7-1.8c1.8-0.2,3.5-0.4,5.2-0.4
C21.9,14.9,22.8,15.7,22.8,16.6"/>
</defs>
<clipPath id="SVGID_5_">
<use xlink:href="#SVGID_61_" style="overflow:visible;"/>
</clipPath>
<g class="st4">
<defs>
<rect id="SVGID_63_" x="-836.3" y="-1474.9" width="1610.8" height="9218.9"/>
</defs>
<clipPath id="SVGID_6_">
<use xlink:href="#SVGID_63_" style="overflow:visible;"/>
</clipPath>
<rect x="5.7" y="9.3" class="st5" width="22.7" height="18.5"/>
</g>
</g>
<g>
<defs>
<path id="SVGID_65_" d="M34.1,22.1l1.4-6.9h3.7l-1.4,6.9H34.1 M35.6,13.5c0.1-0.6,1.1-1,2.2-1c1.1,0,1.9,0.5,1.8,1
c-0.1,0.6-1.1,1-2.2,1C36.3,14.6,35.5,14.1,35.6,13.5"/>
</defs>
<clipPath id="SVGID_7_">
<use xlink:href="#SVGID_65_" style="overflow:visible;"/>
</clipPath>
<g class="st6">
<defs>
<rect id="SVGID_67_" x="-836.3" y="-1474.9" width="1610.8" height="9218.9"/>
</defs>
<clipPath id="SVGID_8_">
<use xlink:href="#SVGID_67_" style="overflow:visible;"/>
</clipPath>
<rect x="28.4" y="6.8" class="st7" width="16.9" height="20.9"/>
</g>
</g>
<g>
<defs>
<path id="SVGID_69_" d="M52.4,18.9C52.3,18.9,52,19,51.8,19c-0.3,0.1-0.7,0.1-1.5,0.2c-0.5,0.1-0.8,0.2-1,0.3
C49.1,19.7,49,19.8,49,20c0,0.2,0,0.3,0.2,0.5c0.2,0.1,0.5,0.2,0.9,0.2c0.3,0,0.6,0,1-0.1c0.3-0.1,0.6-0.2,0.8-0.4
c0.1-0.1,0.3-0.3,0.3-0.4C52.3,19.6,52.3,19.3,52.4,18.9 M56.4,16.6c0,0.3-0.1,0.6-0.2,1.2l-0.7,3.5c-0.1,0.3,0.1,0.5,0.4,0.7
l0,0.1l-3.9,0l0-0.9c-0.6,0.3-1.3,0.6-1.9,0.7c-0.6,0.1-1.1,0.2-1.9,0.2c-1.3,0-2-0.1-2.5-0.5c-0.5-0.4-0.8-0.7-0.7-1.2
c0-0.3,0.2-0.7,0.5-1c0.3-0.3,0.6-0.5,1-0.7c0.4-0.2,0.9-0.3,1.6-0.4c0.7-0.1,1.7-0.2,2.9-0.3c0.7-0.1,1.1-0.2,1.3-0.3
c0.3-0.1,0.4-0.2,0.4-0.4c0.1-0.4-0.1-0.6-0.6-0.7c-1.4-0.3-4,0.2-5.4,0.5l0.7-1.8c1.8-0.2,3.5-0.4,5.2-0.4
C55.6,14.9,56.5,15.7,56.4,16.6"/>
</defs>
<clipPath id="SVGID_9_">
<use xlink:href="#SVGID_69_" style="overflow:visible;"/>
</clipPath>
<g class="st8">
<defs>
<rect id="SVGID_71_" x="-836.3" y="-1474.9" width="1610.8" height="9218.9"/>
</defs>
<clipPath id="SVGID_10_">
<use xlink:href="#SVGID_71_" style="overflow:visible;"/>
</clipPath>
<rect x="39.4" y="9.3" class="st9" width="22.7" height="18.5"/>
</g>
</g>
<g>
<defs>
<path id="SVGID_73_" d="M10.9,19.6c-1.2,0.2-1.9,0.3-3.1,0.3c-1.8,0-3.2-0.8-3.1-2.3c0.1-1,1.3-3.1,4.6-3.1c1,0,1.8,0.2,2.9,0.7
l0.5-2.4c-1.5-0.5-2.4-0.6-3.7-0.6c-4.3,0-8.4,1.8-8.9,5.4c-0.5,3.6,4.4,4.6,6.6,4.5c1.3,0,2.6-0.1,3.8-0.2L10.9,19.6"/>
</defs>
<clipPath id="SVGID_11_">
<use xlink:href="#SVGID_73_" style="overflow:visible;"/>
</clipPath>
<g class="st10">
<defs>
<rect id="SVGID_75_" x="-836.3" y="-1474.9" width="1610.8" height="9218.9"/>
</defs>
<clipPath id="SVGID_12_">
<use xlink:href="#SVGID_75_" style="overflow:visible;"/>
</clipPath>
<rect x="-5.7" y="6.6" class="st11" width="23.9" height="21.3"/>
</g>
</g>
<g>
<defs>
<path id="SVGID_77_" d="M41.2,15.1l0.3-1.4l3.9-0.8L45,15.1h1.9l-0.4,1.4l-1.9,0l-1.1,5.6c0,0-3.8,0-3.8,0l1.1-5.6h-1.4l0.3-1.4
H41.2"/>
</defs>
<clipPath id="SVGID_13_">
<use xlink:href="#SVGID_77_" style="overflow:visible;"/>
</clipPath>
<g class="st12">
<defs>
<rect id="SVGID_79_" x="-836.3" y="-1474.9" width="1610.8" height="9218.9"/>
</defs>
<clipPath id="SVGID_14_">
<use xlink:href="#SVGID_79_" style="overflow:visible;"/>
</clipPath>
<rect x="33.8" y="7.2" class="st13" width="18.8" height="20.5"/>
</g>
</g>
<g>
<defs>
<polygon id="SVGID_81_" points="60.2,22.1 56.4,22.1 58.3,12.4 62.1,12.5 "/>
</defs>
<clipPath id="SVGID_15_">
<use xlink:href="#SVGID_81_" style="overflow:visible;"/>
</clipPath>
<g class="st14">
<defs>
<rect id="SVGID_83_" x="-836.3" y="-1474.9" width="1610.8" height="9218.9"/>
</defs>
<clipPath id="SVGID_16_">
<use xlink:href="#SVGID_83_" style="overflow:visible;"/>
</clipPath>
<rect x="50.8" y="6.7" class="st15" width="17" height="21"/>
</g>
</g>
<g>
<defs>
<path id="SVGID_85_" d="M29.1,16.8c-0.5,0-0.9,0.1-1.3,0.4c-0.4,0.3-0.6,0.7-0.7,1.2c-0.1,0.6,0,1,0.2,1.3
c0.3,0.3,0.7,0.4,1.2,0.4c0.3,0,0.7-0.1,1-0.2c0.3-0.2,0.5-0.3,0.7-0.6c0.2-0.3,0.3-0.6,0.4-0.9c0.1-0.5,0-1-0.3-1.2
C30,16.9,29.6,16.8,29.1,16.8z M22.3,24.5l1.8-9.3h3.3l-0.3,1.2c0.3-0.4,0.7-0.6,1.4-0.9c0.6-0.2,1.3-0.4,2.1-0.4
c0.9,0,1.4,0,2,0.3c0.6,0.3,1.1,0.7,1.3,1.3c0.2,0.6,0.3,1.2,0.2,1.9c-0.2,1.1-0.8,2-1.8,2.7c-1,0.7-1.9,0.8-3.2,0.8
c-0.5,0-0.8,0-1.2-0.1c-0.3-0.1-0.6-0.2-0.7-0.3c-0.2-0.1-0.4-0.3-0.6-0.5L26,24.5H22.3z"/>
</defs>
<clipPath id="SVGID_17_">
<use xlink:href="#SVGID_85_" style="overflow:visible;"/>
</clipPath>
<g class="st16">
<defs>
<rect id="SVGID_87_" x="-836.3" y="-1474.9" width="1610.8" height="9218.9"/>
</defs>
<clipPath id="SVGID_18_">
<use xlink:href="#SVGID_87_" style="overflow:visible;"/>
</clipPath>
<rect x="16.7" y="9.4" class="st17" width="23.3" height="20.7"/>
</g>
</g>
<g>
<defs>
<path id="SVGID_89_" d="M90.1,17.6c0-0.6-0.3-0.9-1-0.9c-1.5,0-3.2,2.7-3.4,3.8C88.2,20.5,90.2,19.1,90.1,17.6 M90.5,21.9l0.3,0.2
c-0.7,1.4-2.3,2.5-4.1,2.5c-1.5,0-2.7-0.9-2.7-2.5c-0.1-3,2.9-5.7,5.5-5.7c1.1,0,2.1,0.4,2.1,1.5c0.1,2.4-3.6,3.1-6,3.1
c-0.1,0.2-0.1,0.5-0.1,0.9c0,1,0.7,1.8,2,1.8C88.7,23.6,89.9,22.7,90.5,21.9"/>
</defs>
<clipPath id="SVGID_19_">
<use xlink:href="#SVGID_89_" style="overflow:visible;"/>
</clipPath>
<g class="st18">
<defs>
<rect id="SVGID_91_" x="-836.3" y="-1474.9" width="1610.8" height="9218.9"/>
</defs>
<clipPath id="SVGID_20_">
<use xlink:href="#SVGID_91_" style="overflow:visible;"/>
</clipPath>
<rect x="78.3" y="10.6" class="st19" width="18.9" height="19.6"/>
</g>
</g>
<g>
<defs>
<path id="SVGID_93_" d="M75.5,17.5c0.3,0,0.7-0.1,0.9-0.1c0.3,0,0.5,0,0.5,0.3c0,0.1-0.3,1.2-0.3,1.4L76,21.5
c-0.2,1-0.5,2-0.7,2.7h1.5l0.8-3.7c2.6-2.4,3.6-3.2,4.2-3.2c0.3,0,0.5,0.1,0.5,0.4c0,0.4-0.3,1.4-0.4,1.7L81,22.2
c-0.2,0.6-0.3,1.2-0.3,1.5c0,0.6,0.4,0.9,1,0.9c1.1,0,1.9-1,2.6-2.1L84,22.2c-0.3,0.4-0.9,1.3-1.4,1.3c-0.2,0-0.3-0.1-0.3-0.3
c0-0.3,0.1-0.8,0.2-1.1l1-3.2c0.3-0.9,0.4-1.4,0.4-1.7c0-0.6-0.4-0.9-1-0.9c-1,0-2.3,0.7-5.1,3.5h0l0.3-1.4
c0.2-0.8,0.4-1.6,0.6-2.1c-1,0.3-2.3,0.7-3.2,0.8L75.5,17.5"/>
</defs>
<clipPath id="SVGID_21_">
<use xlink:href="#SVGID_93_" style="overflow:visible;"/>
</clipPath>
<g class="st20">
<defs>
<rect id="SVGID_95_" x="-836.3" y="-1474.9" width="1610.8" height="9218.9"/>
</defs>
<clipPath id="SVGID_22_">
<use xlink:href="#SVGID_95_" style="overflow:visible;"/>
</clipPath>
<rect x="69.6" y="10.6" class="st21" width="20.3" height="19.6"/>
</g>
</g>
<g>
<defs>
<path id="SVGID_97_" d="M86.5,16c0,0.1,0,0.1,0,0.2c0.1,0.1,0.1,0.1,0.3,0.1c0.1,0,0.1,0,0.2,0c0.1,0,0.1-0.1,0.1-0.2
c0-0.1,0-0.1-0.1-0.1c0,0-0.1,0-0.2-0.1l-0.2,0c-0.1,0-0.2,0-0.2-0.1c-0.1,0-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0.1-0.2
c0.1-0.1,0.2-0.1,0.3-0.1c0.1,0,0.2,0,0.3,0.1c0.1,0.1,0.1,0.1,0.1,0.3h-0.2c0-0.1,0-0.1-0.1-0.1c0-0.1-0.1-0.1-0.2-0.1
c-0.1,0-0.2,0-0.2,0.1c0,0-0.1,0.1-0.1,0.1c0,0.1,0,0.1,0.1,0.1c0,0,0.1,0,0.2,0.1l0.2,0c0.1,0,0.1,0,0.2,0.1
c0.1,0.1,0.1,0.1,0.1,0.2c0,0.1,0,0.2-0.1,0.3c-0.1,0.1-0.2,0.1-0.3,0.1c-0.1,0-0.3,0-0.3-0.1c-0.1-0.1-0.1-0.2-0.1-0.3H86.5"/>
</defs>
<clipPath id="SVGID_23_">
<use xlink:href="#SVGID_97_" style="overflow:visible;"/>
</clipPath>
<g class="st22">
<defs>
<rect id="SVGID_99_" x="-731.8" y="-1298.4" width="1420" height="8127"/>
</defs>
<clipPath id="SVGID_24_">
<use xlink:href="#SVGID_99_" style="overflow:visible;"/>
</clipPath>
<rect x="81.4" y="10.2" class="st23" width="10.9" height="11.2"/>
</g>
</g>
<g>
<defs>
<path id="SVGID_101_" d="M87.5,15.2h0.2l0.4,0.9l0.3-0.9h0.2v1.1h-0.2v-0.7c0,0,0-0.1,0-0.1c0-0.1,0-0.1,0-0.2l-0.4,0.9H88
l-0.4-0.9v0c0,0,0,0.1,0,0.1c0,0.1,0,0.1,0,0.1v0.7h-0.2V15.2"/>
</defs>
<clipPath id="SVGID_25_">
<use xlink:href="#SVGID_101_" style="overflow:visible;"/>
</clipPath>
<g class="st24">
<defs>
<rect id="SVGID_103_" x="-731.8" y="-1298.4" width="1420" height="8127"/>
</defs>
<clipPath id="SVGID_26_">
<use xlink:href="#SVGID_103_" style="overflow:visible;"/>
</clipPath>
<rect x="82.5" y="10.2" class="st25" width="11.2" height="11.1"/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 12 KiB

View File

@ -1,18 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 19.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 61.5 24" style="enable-background:new 0 0 61.5 24;" xml:space="preserve">
<style type="text/css">
.st0{fill-rule:evenodd;clip-rule:evenodd;fill:#FFFFFF;}
</style>
<g>
<path class="st0" d="M48.9,16.5c2.6,0,4.8-2,4.8-4.6c0-2.5-2.1-4.6-4.8-4.6c-2.6,0-4.8,2-4.8,4.6C44.1,14.5,46.2,16.5,48.9,16.5"/>
<path class="st0" d="M48.9,0c-5.5,0-10.2,3.4-11.9,8c0.1-0.5,0.1-1,0.1-1.5c0-1.7-1-3.6-2.5-4.6c-1.4-1-2.8-1.5-4.5-1.5H19.2v23.6
h10.2c2,0,3.7-0.7,5.5-1.9c1.6-1.1,2.6-3,2.6-4.8c0-0.1,0-0.2,0-0.3c2,4.1,6.4,7,11.4,7c6.9,0,12.6-5.4,12.6-12
C61.5,5.4,55.9,0,48.9,0z M25.6,5.5h2.7c1.3,0,2.7,0.2,2.7,1.8c0.1,1.4-0.8,2.3-2.6,2.3l-2.7,0V5.5z M30.5,18.1
c-0.6,0.4-1.3,0.4-2,0.4h-3v-4.3h2.7c1.6,0,3,0.4,3.1,2.2C31.4,17,31,17.8,30.5,18.1z M36.5,13.6c-0.5-0.6-1.2-1.2-2.2-1.8
c1.2-0.6,1.9-1.3,2.3-2.2c-0.2,0.8-0.2,1.5-0.2,2.3C36.4,12.5,36.4,13.1,36.5,13.6z M48.9,18.2c-3.6,0-6.5-2.8-6.5-6.2
s2.9-6.2,6.5-6.2c3.6,0,6.5,2.8,6.5,6.2S52.5,18.2,48.9,18.2z"/>
<polygon class="st0" points="11.5,9 6.3,9 6.3,0.3 0,0.3 0,24 6.3,24 6.3,14.7 11.4,14.7 11.4,24 17.8,24 17.8,0.3 11.5,0.3 "/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.3 KiB

View File

@ -1,63 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 19.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 51 51" style="enable-background:new 0 0 51 51;" xml:space="preserve">
<style type="text/css">
.st0{fill-rule:evenodd;clip-rule:evenodd;fill:#FFFFFF;}
</style>
<g>
<path class="st0" d="M48.4,49.7c0.6,0,1.2-0.5,1.2-1.2c0-0.7-0.5-1.2-1.2-1.2c-0.7,0-1.2,0.5-1.2,1.2
C47.2,49.2,47.7,49.7,48.4,49.7z M48.4,47.6c0.4,0,0.6,0.1,0.6,0.5c0,0.3-0.2,0.4-0.4,0.5l0.5,0.7h-0.3l-0.4-0.7h-0.3l0,0.7h-0.2
l0-1.7H48.4z"/>
<path class="st0" d="M48.4,48.4c0.2,0,0.4,0,0.4-0.3c0-0.2-0.2-0.2-0.4-0.2h-0.3l0,0.5H48.4z"/>
<path class="st0" d="M9.2,49.6l-7.9-7.9c-0.6-0.6-0.6-0.7-1.3-0.3c0,0,0,0,0,0V51h9.5c0,0,0,0,0,0C9.9,50.2,9.8,50.2,9.2,49.6z"/>
<path class="st0" d="M49.2,7L51,8.7V0h-8.9l1.9,1.9C44,2,44.3,2.3,43.8,2.7c-0.3,0.3-0.5,0.2-0.8,0c-1.6-0.8-3.1-0.8-4.6,0.3
l-0.9-0.9L39.7,0H0v39.7l3.6-3.6c0.1-0.1,0.6-0.5,1-0.1c0.2,0.2,0.2,0.5,0.1,0.7c-0.4,0.7-0.3,0.8,0.3,1.3l7.9,7.9
c0.6,0.6,0.6,0.7,1.3,0.3c0.3-0.1,0.5-0.1,0.7,0.1c0.4,0.4,0,1-0.1,1L11.2,51h14.5c0-0.1,0.1-0.1,0.1-0.2c0.1-0.2-0.1-0.4-0.3-0.5
l-4.4-4.4c-0.1-0.1-0.3-0.4-0.5-0.3c-0.2,0.1-0.4,0.2-0.6,0c-0.2-0.2,0-0.5,0.1-0.6l2.2-2.2l6.3,6.3L26.7,51H51V26.7l-2,2
c0,0-0.3,0.3-0.6,0.1c-0.1-0.1-0.1-0.3,0-0.4c0.2-0.4,0.1-0.4-0.2-0.7l-5.4-5.4l2.1-2.1l5.4,5.4c0.3,0.3,0.4,0.4,0.7,0.2V11.2
l-2.2,2.2l-0.9-0.9c1.1-1.4,1.2-3.1,0.4-4.7c-0.1-0.3-0.3-0.7,0-0.9C48.8,6.4,49.2,6.9,49.2,7z M42.3,3.8c0.5-0.5,0.9,0.2,1.1,0.3
l3.2,3.2c0.1,0.1,0.7,0.6,0.3,1.1c-0.3,0.3-0.6,0.2-1,0c-0.7-0.4-1.6-0.7-2.4-0.3l-0.9-0.9c0.5-0.8,0.2-1.7-0.3-2.4
C42.1,4.5,42,4.2,42.3,3.8z M31.2,8.5c0.1-0.1,0.6-0.5,1-0.1c0.2,0.2,0.2,0.5,0.1,0.7c-0.4,0.7-0.3,0.8,0.3,1.3l7.9,7.9
c0.6,0.6,0.6,0.7,1.3,0.3c0.3-0.1,0.5-0.1,0.7,0.1c0.4,0.4,0,1-0.1,1L38.2,24c-0.1,0.1-0.6,0.5-1,0.1c-0.2-0.2-0.2-0.5-0.1-0.7
c0.4-0.7,0.3-0.8-0.3-1.3l-7-7l6.1,11.3l-0.4,0.4l-12.4-6.2c-0.3-0.2-0.6-0.3-0.9-0.4c-0.4-0.1-0.6-0.2-0.9,0
c-0.2,0.2-0.6,0.5-1,0.2c-0.5-0.5,0-0.9,0.2-1.1l3.8-3.8l6.2,3l0,0l-3.2-6L31.2,8.5z M31.1,38.1c-0.1-0.2-0.2-0.4,0-0.6
c0.3-0.3,0.5,0.1,0.6,0.2l1.8,1.8c0.1,0.1,0.4,0.3,0.2,0.6c-0.2,0.2-0.4,0.1-0.5,0c-0.4-0.2-0.9-0.4-1.3-0.2l-0.5-0.5
C31.5,39,31.3,38.5,31.1,38.1z M32,36.9c-0.1,0.1-0.3,0.1-0.4,0c-0.9-0.5-1.8-0.4-2.6,0.2l-0.5-0.5l1.9-1.9l1.7,1.7
C32.1,36.5,32.2,36.7,32,36.9z M25.7,33.1l-7.8-7.8C17.5,24.9,17,24.5,16,25l-0.9-0.9c3.5-2.9,7.5-1.8,10.5,1.2
c3,3,4.1,7.1,1.2,10.5L26,34.9C26.4,34,26,33.5,25.7,33.1z M29.9,27.5l-5.1-5.1l0,0l3.3,1.6l2.6,2.6c2.1,1.6,2.5,0.1,3.1,0.7
c0.5,0.5-0.2,1-0.3,1.2l-1.7,1.7c-0.2,0.2-0.7,0.8-1.2,0.3C30,30,31.6,29.6,29.9,27.5z M24.2,9.8c-0.1-0.2-0.1-0.3,0-0.5
c0.3-0.3,0.5,0,0.5,0l1.6,1.6l-1.8,1.8L24,12.3C24.6,11.6,24.7,10.7,24.2,9.8z M23.5,10.2c-0.2,0.2-0.3,0.1-0.5,0
c-0.4-0.2-0.8-0.4-1.3-0.1l-0.5-0.5c0.2-0.4,0.1-0.9-0.1-1.3c-0.1-0.2-0.2-0.3,0-0.5c0.2-0.2,0.5,0.1,0.6,0.1l1.7,1.7
C23.4,9.7,23.7,9.9,23.5,10.2z M20.3,5.1l1.6,1.6c0,0,0.2,0.2-0.1,0.4c-0.1,0.1-0.3,0.1-0.4,0c-0.9-0.4-1.6-0.4-2.5,0.2l-0.5-0.5
L20.3,5.1z M16.1,9.3l2.1-2.1l5.9,5.9L22,15.3c0,0-0.3,0.3-0.5,0c-0.1-0.1-0.1-0.3,0-0.4c0.2-0.4,0.1-0.4-0.2-0.7L17.1,10
c-0.3-0.3-0.3-0.3-0.7-0.2c-0.1,0.1-0.3,0.1-0.4,0C15.8,9.6,16.1,9.3,16.1,9.3z M13.1,12.3l2.2-2.2c0,0,0.3-0.3,0.5,0
c0.1,0.1,0.1,0.3,0,0.4c-0.2,0.4-0.1,0.4,0.2,0.7l4.2,4.2c0.3,0.3,0.3,0.3,0.7,0.2c0.1-0.1,0.3-0.1,0.4,0c0.2,0.2,0,0.5,0,0.5
L19,18.3c0,0-0.3,0.3-0.5,0c-0.1-0.1-0.1-0.3,0-0.4c0.2-0.4,0.1-0.4-0.2-0.7l-1.9-1.9L15.7,16l-0.5-0.5l0.7-0.7L14.1,13
c-0.3-0.3-0.3-0.3-0.7-0.2c-0.1,0.1-0.3,0.1-0.4,0C12.8,12.6,13.1,12.3,13.1,12.3z M10.1,15.3l2.3-2.3c0,0,0.3-0.3,0.5,0
c0.1,0.1,0.1,0.3,0,0.4c-0.2,0.4-0.1,0.4,0.2,0.7l4.2,4.2c0.3,0.3,0.3,0.3,0.7,0.2c0.1-0.1,0.3-0.1,0.4,0c0.2,0.2,0,0.5,0,0.5
L16,21.3c0,0-0.3,0.3-0.5,0c-0.1-0.1-0.1-0.3,0-0.4c0.2-0.4,0.1-0.4-0.2-0.7l-4.2-4.2c-0.3-0.3-0.3-0.3-0.7-0.2
c-0.1,0.1-0.3,0.1-0.4,0C9.8,15.6,10.1,15.3,10.1,15.3z M9.6,15.8l1.9,1.9c0,0,0.2,0.3,0,0.5c-0.2,0.2-0.5,0.1-0.7-0.1
c-0.5-0.3-1.1-0.8-1.8-0.6L8.4,17L9.6,15.8z M8.1,17.3l5.1,5.1c0.3,0.3,0.3,0.3,0.7,0.2c0.1-0.1,0.3-0.1,0.4,0c0.2,0.2,0,0.5,0,0.5
l-2.2,2.3c0,0-0.3,0.3-0.5,0c-0.1-0.1-0.1-0.3,0-0.4c0.2-0.4,0.1-0.4-0.2-0.7l-5.1-5.1L8.1,17.3z M4.6,20.8l1.1-1.1l0.5,0.5
c-0.1,0.7,0.3,1.3,0.6,1.8c0.2,0.2,0.3,0.4,0.1,0.7c-0.2,0.2-0.5,0.1-0.5,0L4.6,20.8z M20.5,41.7l-4.2,4.2c-0.1,0.1-0.6,0.5-1,0.1
c-0.2-0.2-0.2-0.5-0.1-0.7c0.4-0.7,0.3-0.8-0.3-1.3l-3.6-3.6L10,41.7l-0.9-0.9l1.3-1.3L7,36.1c-0.6-0.6-0.6-0.7-1.3-0.3
c-0.3,0.1-0.5,0.1-0.7-0.1c-0.4-0.4,0-1,0.1-1l4.2-4.2c0.1-0.1,0.6-0.5,1-0.1c0.2,0.2,0.2,0.5,0.1,0.7c-0.4,0.7-0.3,0.8,0.3,1.3
l7.9,7.9c0.6,0.6,0.6,0.7,1.3,0.3c0.3-0.1,0.5-0.1,0.7,0.1C21.1,41.1,20.6,41.6,20.5,41.7z M15.7,35.3c-3-3-4.1-7.1-1.2-10.5
l0.9,0.9c-0.5,1-0.1,1.5,0.3,1.8l7.8,7.8c0.4,0.4,0.9,0.8,1.8,0.3l0.9,0.9C22.7,39.4,18.7,38.3,15.7,35.3z M29,48.7l-0.5-0.5
c0.4-0.6,0-1.1-0.3-1.4l-3.6-3.6c-0.3-0.3-0.8-0.8-1.4-0.3l-0.5-0.5c1.4-1.5,3.6-1.7,5.9,0.4C30.6,44.7,30.4,47.3,29,48.7z
M32.1,45.6c0,0-0.3,0.3-0.6,0.1c-0.1-0.1-0.1-0.3,0-0.4c0.2-0.4,0.1-0.4-0.2-0.7L26.9,40c-0.3-0.3-0.4-0.4-0.7-0.2
c-0.1,0.1-0.3,0.1-0.4,0c-0.2-0.2,0-0.5,0.1-0.6L28,37l6.3,6.3L32.1,45.6z M34.7,43l-0.5-0.5c0.6-0.8,0.7-1.8,0.2-2.7
c-0.1-0.2-0.2-0.4,0-0.5c0.3-0.3,0.5,0,0.5,0l1.7,1.7L34.7,43z M39.7,38l-2.4,2.4c0,0-0.3,0.2-0.5,0c-0.1-0.1-0.1-0.3-0.1-0.4
c0.2-0.4,0.1-0.4-0.2-0.7l-4.4-4.4c-0.3-0.3-0.4-0.4-0.7-0.2c-0.1,0.1-0.3,0.1-0.4,0c-0.2-0.2,0-0.5,0.1-0.6l2.2-2.2l5.4,5.4
c0.3,0.3,0.4,0.4,0.7,0.2c0.1-0.1,0.3-0.1,0.4,0C40,37.7,39.7,38,39.7,38z M39.1,32.3c-0.1-0.1-0.2-0.2-0.3-0.4
c0.2,0.4,0.2,0.9,0.1,1.5c-0.2,0.6-0.6,1.2-1.4,2L37,34.9c0.4-0.6,0.1-1-0.3-1.4l-1.3-1.3c-0.4-0.4-0.8-0.7-1.3-0.3l-0.5-0.5
c0.8-0.8,1.4-1.2,2-1.4c1-0.2,1.8,0,2.5,0.7c-0.8-1.4-0.8-3,0.4-4.5l0.5,0.5c-0.3,0.5,0,0.8,0.2,1l4.4,4.4c0.2,0.2,0.5,0.4,1,0.2
l0.5,0.5C43.1,34.6,40.8,34,39.1,32.3z M48.4,47c0.8,0,1.4,0.6,1.4,1.4c0,0.8-0.7,1.4-1.4,1.4c-0.8,0-1.5-0.6-1.5-1.4
C46.9,47.6,47.6,47,48.4,47z M42.9,23.1c-0.1,0.8,0.3,1.4,0.7,2c0.2,0.2,0.3,0.5,0.1,0.7c0.4,0.2,0.7,0.5,1,0.9
c1.7,1.7,2.3,4,0.7,5.9l-0.5-0.5c0.3-0.5,0-0.8-0.2-1l-4.4-4.4c-0.2-0.2-0.5-0.4-1-0.2L38.8,26c1.2-1,2.5-1.2,3.7-0.8l-1.3-1.3
l1.2-1.2L42.9,23.1z M48.4,21.1c-0.2,0.2-0.5,0.1-0.7-0.1c-0.5-0.4-1.2-0.8-2-0.7l-0.5-0.5l1.2-1.2l2,2
C48.4,20.6,48.6,20.8,48.4,21.1z M48.1,14.1l-4,4c-0.1,0.1-0.6,0.5-1,0.1c-0.2-0.2-0.2-0.5-0.1-0.7c0.4-0.7,0.3-0.8-0.3-1.3
l-7.9-7.9c-0.6-0.6-0.6-0.7-1.3-0.3C33.3,8,33,8,32.8,7.8c-0.4-0.4,0-1,0.1-1l4-4L48.1,14.1z"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 6.5 KiB

View File

@ -1,50 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 19.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 123.4 16.7" style="enable-background:new 0 0 123.4 16.7;" xml:space="preserve">
<style type="text/css">
.st0{fill:#FFFFFF;}
</style>
<g>
<path id="XMLID_84_" class="st0" d="M72.2,13.7c-0.8,0-1.4,0.6-1.4,1.4c0,0.8,0.6,1.4,1.4,1.4c0.8,0,1.4-0.6,1.4-1.4
C73.6,14.3,73,13.7,72.2,13.7"/>
<path id="XMLID_76_" class="st0" d="M95,3.7c-0.6-0.2-1.2-0.2-1.8-0.2c-0.8,0-1.4,0.1-1.9,0.2c-2.6,0.7-4.4,2.9-4.6,5.9
c0,0.1,0,0.1,0,0.2c-1,2-3,4.7-6,4.6c-1.2,0-2.4-0.5-3.1-1.4c-0.6-0.7-0.9-1.8-0.9-2.9c0-2.6,1.7-4.4,4-4.4c0.9,0,2.1,0.2,3,1.3
c0.2,0.3,0.5,0.4,0.9,0.4c0.5,0,0.9-0.3,1.1-0.7c0.2-0.4,0.1-0.8-0.2-1.1c-1.3-1.5-2.7-2.1-4.6-2.1c-3.8,0-6.4,2.5-6.6,6.2
c-0.1,1.8,0.4,3.6,1.5,4.9c1.2,1.4,3.1,2.2,5,2.2c3.2,0,5.5-2.1,6.6-3.7c0.2,0.5,0.5,1,0.9,1.4c1.2,1.5,3,2.3,5,2.3
c2,0,3.8-0.8,5-2.3c1.1-1.3,1.6-2.9,1.5-4.8C99.4,6.7,97.7,4.5,95,3.7 M96.3,12.9c-0.8,0.9-2,1.4-3.1,1.4c-1.2,0-2.4-0.5-3.1-1.4
c-0.6-0.7-1-1.7-1-2.8C89.1,8,90.2,6.4,92,6c0.4-0.1,0.8-0.2,1.2-0.2c0.4,0,0.8,0.1,1.2,0.2c1.8,0.5,2.9,2.1,2.9,4.2
C97.3,11.1,96.9,12.2,96.3,12.9"/>
<path id="XMLID_73_" class="st0" d="M115.7,3.6c-1.7,0-3.5,0.7-4.6,2c-1.1-1.3-2.9-2-4.6-2c-2.8,0-5.8,1.9-5.8,5.4v6.3
c0,0.7,0.5,1.2,1.2,1.2c0.7,0,1.2-0.5,1.2-1.2V9.1c0-1.8,1.5-3.1,3.4-3.1c1.8,0,3.3,1.4,3.4,3.1v6.3c0,0.7,0.5,1.2,1.2,1.2h0h0
c0.7,0,1.2-0.5,1.2-1.2V9.1c0-1.8,1.5-3.1,3.4-3.1c1.8,0,3.3,1.4,3.4,3.1v6.3c0,0.7,0.5,1.2,1.2,1.2c0.7,0,1.2-0.5,1.2-1.2V9
C121.6,5.5,118.6,3.6,115.7,3.6"/>
<path id="XMLID_65_" class="st0" d="M46.3,3.4L46.3,3.4L46.3,3.4c-1.4-0.2-2.7-0.1-3.9,0.3c-2,0.7-3.5,2.3-4,4.4
c-0.4,1.5-0.3,3,0.2,4.4c-1,0.9-2.8,1.6-2.8,1.6l-0.1,0c-0.1,0.1-0.5,0.1-0.9,0.1c0,0-0.1,0-0.1,0c-1.1-0.1-1.5-0.7-1.5-2.4V6h2.2
c0.5,0,0.8-0.2,0.9-0.4c0.2-0.2,0.3-0.5,0.3-0.8c0-0.6-0.4-1.2-1.2-1.2h-2.2V1.3C33.3,0.5,32.6,0,32,0c-0.6,0-1.3,0.4-1.3,1.3v2.3
h-1.4c-0.8,0-1.2,0.6-1.2,1.2c0,0.3,0.1,0.6,0.3,0.8C28.6,5.8,28.9,6,29.3,6h1.4v5.9c0,2,0.4,4.6,4,4.8c0.1,0,0.2,0,0.3,0
c0.6,0,1.2-0.1,1.8-0.3c1.3-0.4,2.5-1.2,3.1-1.7c0,0.1,0.1,0.1,0.1,0.2c1.2,1.4,3.3,2.1,5.4,1.9c0,0,0.1,0,0.1,0
c1.8-0.1,3.3-0.8,4.3-1.9c0.4-0.5,0.5-1,0.3-1.4c-0.2-0.4-0.7-0.7-1.2-0.6c-0.3,0-0.6,0.2-0.9,0.4c-1,0.8-2.1,1.1-2.9,1.1
c-1.9,0.1-3.6-0.9-4.2-2.6l9.1-0.6c0.5,0,1-0.2,1.2-0.5c0.2-0.3,0.3-0.7,0.2-1.1C51.3,6.3,49.3,4,46.3,3.4 M40.7,9.5
c0.1-1.7,1.1-3.1,2.7-3.6c0.6-0.2,1.4-0.3,2.1-0.2l0.3,0C47.4,6.1,48.6,7.3,49,9L40.7,9.5z"/>
<path id="XMLID_62_" class="st0" d="M12.6,0c-0.6,0-1.2,0.4-1.2,1.2v6.1h-9V1.2C2.4,0.4,1.8,0,1.2,0C0.6,0,0,0.4,0,1.2v14.2
c0,0.4,0.1,0.7,0.4,0.9c0.2,0.2,0.5,0.3,0.8,0.3c0.6,0,1.2-0.4,1.2-1.2V9.5h9v5.9c0,0.5,0.2,0.8,0.4,0.9c0.2,0.2,0.5,0.3,0.8,0.3
c0.6,0,1.2-0.4,1.2-1.2V1.2C13.9,0.4,13.2,0,12.6,0"/>
<path id="XMLID_50_" class="st0" d="M23.8,3.7c-0.6-0.2-1.2-0.2-1.8-0.2c-0.8,0-1.4,0.1-1.9,0.2c-2.6,0.7-4.4,2.9-4.6,5.9
c-0.1,1.9,0.4,3.5,1.5,4.8c1.2,1.5,3,2.3,5,2.3c2,0,3.8-0.8,5-2.3c1.1-1.3,1.6-2.9,1.5-4.8C28.2,6.7,26.5,4.5,23.8,3.7 M25.1,12.9
c-0.8,0.9-2,1.4-3.1,1.4c-1.2,0-2.4-0.5-3.1-1.4c-0.6-0.7-1-1.7-1-2.8C17.9,8,19,6.4,20.8,6c0.4-0.1,0.8-0.2,1.2-0.2
c0.4,0,0.8,0.1,1.2,0.2c1.8,0.5,2.9,2.1,2.9,4.2C26.1,11.1,25.7,12.2,25.1,12.9"/>
<path id="XMLID_36_" class="st0" d="M54.3,0c-0.7,0-1.2,0.5-1.2,1.2v14.2c0,0.7,0.5,1.2,1.2,1.2c0.7,0,1.2-0.5,1.2-1.2V1.2
C55.5,0.5,55,0,54.3,0"/>
<path id="XMLID_27_" class="st0" d="M63.5,8.8L63.5,8.8c-0.2,0-0.4,0-0.5,0c-2-0.1-2.8-0.3-2.8-1.2c0-1.2,1.8-1.7,3.1-1.7
c1.9,0,2.9,0.4,3.2,1.2c0.2,0.4,0.6,0.7,1.1,0.7c0.4,0,0.8-0.2,1.1-0.5c0.2-0.3,0.3-0.7,0.2-1l0,0c-0.7-1.8-2.5-2.7-5.5-2.7
c-2.7,0-5.5,1.4-5.5,4c0,3.2,2.9,3.5,5.5,3.7l0.3,0c2,0.1,3.2,0.3,3.2,1.4c0,1.3-2.3,1.8-3.3,1.8c-1.8,0-3.3-0.6-3.5-1.3
c-0.1-0.6-0.6-1-1.1-1c-0.4,0-0.8,0.2-1,0.5c-0.2,0.3-0.3,0.6-0.2,0.9c0.6,2.8,4.3,3.1,5.8,3.1c2.1,0,5.7-0.9,5.7-4.1
C69.2,9.3,66.2,9,63.5,8.8"/>
<path id="XMLID_4_" class="st0" d="M122.5,2.4c0.5,0,0.9,0.4,0.9,0.9c0,0.5-0.4,0.9-0.9,0.9c-0.5,0-0.9-0.4-0.9-0.9
C121.6,2.8,122,2.4,122.5,2.4 M122.5,4.1c0.4,0,0.8-0.3,0.8-0.8c0-0.4-0.4-0.8-0.8-0.8c-0.4,0-0.8,0.4-0.8,0.8
C121.7,3.8,122.1,4.1,122.5,4.1 M122.3,3.8c0,0.1,0,0.1-0.1,0.1c0,0-0.1-0.1-0.1-0.1V2.9c0,0,0-0.1,0-0.1h0.4
c0.2,0,0.4,0.1,0.4,0.3c0,0.2-0.1,0.3-0.2,0.3l0.2,0.3c0,0,0,0.1,0,0.1c0,0,0,0.1-0.1,0.1c0,0-0.1,0-0.1-0.1l-0.3-0.4h-0.2V3.8z
M122.3,3.3h0.2c0.1,0,0.3,0,0.3-0.2c0-0.2-0.1-0.2-0.2-0.2h-0.2V3.3z"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 4.5 KiB

View File

@ -1,66 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 19.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 80.5 38.8" style="enable-background:new 0 0 80.5 38.8;" xml:space="preserve">
<style type="text/css">
.st0{clip-path:url(#SVGID_2_);}
.st1{clip-path:url(#SVGID_4_);fill:#FEFEFE;}
.st2{clip-path:url(#SVGID_6_);}
.st3{clip-path:url(#SVGID_8_);fill:#FEFEFE;}
.st4{clip-path:url(#SVGID_10_);}
.st5{clip-path:url(#SVGID_12_);fill:#FEFEFE;}
</style>
<g>
<defs>
<path id="SVGID_1_" d="M80,12.1c-0.1,0-10.7,2.7-23,5.7l0.6-1.6h-6l2-4.9h5L60,7.6h-5l1.7-4.2H62L63.4,0H53h0h-5.4l-5.4,6l2.5-6
h-5.2l-8.1,20.1h5.2l3.5-8.4l0.2,8.4l7.4,0C33.6,23.6,20.2,27,20.2,27c-7.5,2-16.1-2.3-9.9-13.8c-7.2,7.8-14,18.2-8,23
c5.8,4.6,13.1,1.9,18.1,0.1c5-1.8,59.8-23.8,59.8-23.8C80.7,12.2,80.6,11.9,80,12.1z M45,8.3l7.8-7.9l-7.5,18.4L45,8.3z"/>
</defs>
<clipPath id="SVGID_2_">
<use xlink:href="#SVGID_1_" style="overflow:visible;"/>
</clipPath>
<g class="st0">
<defs>
<rect id="SVGID_3_" x="-441" y="-1294.1" width="1420" height="8127"/>
</defs>
<clipPath id="SVGID_4_">
<use xlink:href="#SVGID_3_" style="overflow:visible;"/>
</clipPath>
<rect x="-5" y="-5" class="st1" width="90.5" height="48.8"/>
</g>
</g>
<g>
<defs>
<polygon id="SVGID_5_" points="19.7,11.2 19.1,20.1 24.6,20.1 32.8,0 27.6,0 24,9 24.6,0 19.1,0 10.9,20.1 16.1,20.1 "/>
</defs>
<clipPath id="SVGID_6_">
<use xlink:href="#SVGID_5_" style="overflow:visible;"/>
</clipPath>
<g class="st2">
<defs>
<rect id="SVGID_7_" x="-441" y="-1294.1" width="1420" height="8127"/>
</defs>
<clipPath id="SVGID_8_">
<use xlink:href="#SVGID_7_" style="overflow:visible;"/>
</clipPath>
<rect x="5.9" y="-5" class="st3" width="31.9" height="30.1"/>
</g>
</g>
<g>
<defs>
<polygon id="SVGID_9_" points="30.4,20.1 38.6,0 33.5,0 25.3,20.1 "/>
</defs>
<clipPath id="SVGID_10_">
<use xlink:href="#SVGID_9_" style="overflow:visible;"/>
</clipPath>
<g class="st4">
<defs>
<rect id="SVGID_11_" x="-441" y="-1294.1" width="1420" height="8127"/>
</defs>
<clipPath id="SVGID_12_">
<use xlink:href="#SVGID_11_" style="overflow:visible;"/>
</clipPath>
<rect x="20.3" y="-5" class="st5" width="23.4" height="30.1"/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 2.4 KiB

View File

@ -1,29 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 19.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 52.8 52.9" style="enable-background:new 0 0 52.8 52.9;" xml:space="preserve">
<style type="text/css">
.st0{clip-path:url(#SVGID_2_);}
.st1{clip-path:url(#SVGID_4_);fill:#FEFEFE;}
</style>
<g>
<defs>
<path id="SVGID_1_" d="M0,26.5C0,11.8,11.8,0,26.4,0C41,0,52.8,11.8,52.8,26.5c0,14.6-11.8,26.5-26.4,26.5
C11.8,52.9,0,41.1,0,26.5 M26.4,44c9.7,0,17.5-7.9,17.5-17.6c0-9.7-7.9-17.6-17.5-17.6S8.9,16.8,8.9,26.5
C8.9,36.2,16.7,44,26.4,44 M26.4,35.4c5,0,9.1-4.1,9.1-9.1c0-5-4.1-9.1-9.1-9.1c-5,0-9.1,4.1-9.1,9.1
C17.3,31.3,21.4,35.4,26.4,35.4"/>
</defs>
<clipPath id="SVGID_2_">
<use xlink:href="#SVGID_1_" style="overflow:visible;"/>
</clipPath>
<g class="st0">
<defs>
<rect id="SVGID_3_" x="-900" y="-1288" width="1420" height="8127"/>
</defs>
<clipPath id="SVGID_4_">
<use xlink:href="#SVGID_3_" style="overflow:visible;"/>
</clipPath>
<rect x="-5" y="-5" class="st1" width="62.8" height="62.9"/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 85 KiB

View File

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 20 KiB

View File

@ -0,0 +1,18 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 1543.2 1000">
<style type="text/css">
.st0{opacity:0.12;clip-path:url(#SVGID_2_);fill:#822FF7;}
.st1{opacity:8.000000e-02;clip-path:url(#SVGID_2_);fill:#822FF7;}
</style>
<g>
<defs>
<rect id="SVGID_1_" width="1543.2" height="1000"/>
</defs>
<clipPath id="SVGID_2_">
<use xlink:href="#SVGID_1_" style="overflow:visible;"/>
</clipPath>
<path class="st0" d="M-2.3,650.2l0,422.8l409.4,237.9c0,0,409.5-238,409.5-238l0-422.7L407.2,412.3l0,0L-2.3,650.2"/>
<polyline class="st1" points="305.1,772.2 305.1,1069.5 593,1236.8 881,1069.5 881,772.2 593.1,604.9 593,604.9 305.1,772.2 "/>
<path class="st1" d="M584.1,784.7l0,504.2l488.2,283.7c0,0,488.3-283.8,488.3-283.8l0-504L1072.4,501l0,0L584.1,784.7"/>
<path class="st1" d="M838.4,423.4l0,365.3l353.7,205.5c0,0,353.8-205.6,353.8-205.6l0-365.2l-353.8-205.6l0,0L838.4,423.4"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 953 B

View File

@ -1,21 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 19.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 1543.2 1000" style="enable-background:new 0 0 1543.2 1000;" xml:space="preserve">
<style type="text/css">
.st0{opacity:0.12;clip-path:url(#SVGID_2_);fill:#822FF7;}
.st1{opacity:8.000000e-02;clip-path:url(#SVGID_2_);fill:#822FF7;}
</style>
<g>
<defs>
<rect id="SVGID_1_" width="1543.2" height="1000"/>
</defs>
<clipPath id="SVGID_2_">
<use xlink:href="#SVGID_1_" style="overflow:visible;"/>
</clipPath>
<path class="st0" d="M-2.3,650.2l0,422.8l409.4,237.9c0,0,409.5-238,409.5-238l0-422.7L407.2,412.3l0,0L-2.3,650.2"/>
<polyline class="st1" points="305.1,772.2 305.1,1069.5 593,1236.8 881,1069.5 881,772.2 593.1,604.9 593,604.9 305.1,772.2 "/>
<path class="st1" d="M584.1,784.7l0,504.2l488.2,283.7c0,0,488.3-283.8,488.3-283.8l0-504L1072.4,501l0,0L584.1,784.7"/>
<path class="st1" d="M838.4,423.4l0,365.3l353.7,205.5c0,0,353.8-205.6,353.8-205.6l0-365.2l-353.8-205.6l0,0L838.4,423.4"/>
</g>
<svg viewBox="0 0 1564 777" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="enterprise-callout-bg" fill-rule="nonzero" fill="#5C4EE5">
<polyline opacity="0.12" points="0.7 433.2 0.7 856 410.1 1093.9 819.6 855.9 819.6 433.2 410.2 195.3 0.7 433.2"></polyline>
<polyline opacity="0.08" points="308.1 555.2 308.1 852.5 596 1019.8 884 852.5 884 555.2 596.1 387.9 596 387.9 308.1 555.2"></polyline>
<polyline opacity="0.08" points="587.1 567.7 587.1 1071.9 1075.3 1355.6 1563.6 1071.8 1563.6 567.8 1075.4 284 587.1 567.7"></polyline>
<polyline opacity="0.08" points="841.4 206.4 841.4 571.7 1195.1 777.2 1548.9 571.6 1548.9 206.4 1195.1 0.8 841.4 206.4"></polyline>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 744 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 479 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 806 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

View File

@ -0,0 +1,22 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
width="16.000000pt" height="16.000000pt" viewBox="0 0 16.000000 16.000000"
preserveAspectRatio="xMidYMid meet">
<metadata>
Created by potrace 1.11, written by Peter Selinger 2001-2013
</metadata>
<g transform="translate(0.000000,16.000000) scale(0.002286,-0.002286)"
fill="#000000" stroke="none">
<path d="M462 5894 l3 -1087 930 -538 c512 -296 933 -538 938 -539 4 0 7 487
7 1083 l0 1083 -882 509 c-485 281 -908 525 -940 543 l-58 33 2 -1087z"/>
<path d="M5578 5227 l-938 -542 0 -1087 0 -1086 940 541 940 542 0 1088 c0
598 -1 1087 -2 1087 -2 -1 -425 -245 -940 -543z"/>
<path d="M2550 4678 l0 -1083 892 -515 c491 -283 914 -527 940 -543 l48 -27
-2 1087 -3 1087 -930 538 c-511 295 -933 538 -937 538 -5 0 -8 -487 -8 -1082z"/>
<path d="M2550 2268 l0 -1085 908 -523 c499 -288 922 -533 940 -543 l32 -19
-2 1087 -3 1088 -925 534 c-509 294 -931 537 -937 540 -10 4 -13 -216 -13
-1079z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -1,15 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 19.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 275.8 75.8" style="enable-background:new 0 0 275.8 75.8;" xml:space="preserve">
<style type="text/css">
.st0{fill:#822FF7;}
</style>
<g>
<polygon class="st0" points="92.2,43.2 169.3,43.2 169.3,41.2 131.7,41.2 145.3,14.8 216,14.8 216,12.8 144.1,12.8 129.4,41.2
89.7,41.2 87.2,41.2 0,41.2 0,43.2 89.3,43.2 118.3,70.5 253.7,70.5 253.7,68.5 119.1,68.5 "/>
<polygon class="st0" points="266.9,55.8 258.5,60 258.5,71 266.9,75.2 275.3,71 275.3,60 "/>
<polygon class="st0" points="238.8,15.7 238.8,4.8 230.4,0.6 222,4.8 222,15.7 230.4,20 "/>
<polygon class="st0" points="176.9,42.8 185.3,47 193.7,42.8 193.7,31.8 185.3,27.6 176.9,31.8 "/>
</g>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 275 76">
<g fill="#5C4EE5">
<path d="M91.9 39.8H169v-2h-37.6L145 11.4h70.7v-2h-71.9l-14.7 28.4H-.3v2H89l29 27.3h135.4v-2H118.8L91.9 39.8zm174.7 16.6l-8.4 4.2v11l8.4 4.2 8.4-4.2v-11l-8.4-4.2zm-28.1-40.7V4.8L230.1.6l-8.4 4.2v10.9l8.4 4.3 8.4-4.3z"/>
<path d="M176.6 44.4l8.4 4.2 8.4-4.2v-11l-8.4-4.2-8.4 4.2"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 929 B

After

Width:  |  Height:  |  Size: 386 B

View File

@ -1,31 +1,3 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 19.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 360 20.7" style="enable-background:new 0 0 360 20.7;" xml:space="preserve">
<style type="text/css">
.st0{fill:#822FF7;}
.st1{fill:#FFFFFF;}
</style>
<rect y="9.4" class="st0" width="360" height="2"/>
<g>
<path class="st0" d="M83.3,19.7c-3.3,0-6.5-1.8-8.1-4.7c-2.6-4.5-1-10.2,3.4-12.8C80,1.4,81.7,1,83.3,1c3.3,0,6.5,1.8,8.1,4.7
c2.6,4.5,1,10.2-3.4,12.8C86.5,19.3,84.9,19.7,83.3,19.7C83.3,19.7,83.3,19.7,83.3,19.7z"/>
<path class="st1" d="M83.3,2c2.9,0,5.7,1.5,7.3,4.2c2.3,4,0.9,9.1-3.1,11.4c-1.3,0.8-2.7,1.1-4.2,1.1c-2.9,0-5.7-1.5-7.3-4.2
c-2.3-4-0.9-9.1,3.1-11.4C80.4,2.4,81.9,2,83.3,2 M83.3,0c-1.8,0-3.6,0.5-5.2,1.4c-4.9,2.9-6.7,9.2-3.8,14.1c1.8,3.2,5.3,5.2,9,5.2
c1.8,0,3.6-0.5,5.2-1.4c4.9-2.9,6.7-9.2,3.8-14.1C90.4,2,87,0,83.3,0L83.3,0z"/>
</g>
<g>
<path class="st0" d="M276.4,19.7c-3.3,0-6.5-1.8-8.1-4.7c-2.6-4.5-1-10.2,3.4-12.8c1.4-0.8,3-1.2,4.7-1.2c3.3,0,6.5,1.8,8.1,4.7
c1.2,2.2,1.6,4.7,0.9,7.1c-0.6,2.4-2.2,4.4-4.4,5.7C279.6,19.3,278,19.7,276.4,19.7C276.4,19.7,276.4,19.7,276.4,19.7z"/>
<path class="st1" d="M276.4,2c2.9,0,5.7,1.5,7.3,4.2c2.3,4,0.9,9.1-3.1,11.4c-1.3,0.8-2.7,1.1-4.2,1.1c-2.9,0-5.7-1.5-7.3-4.2
c-2.3-4-0.9-9.1,3.1-11.4C273.5,2.4,275,2,276.4,2 M276.4,0c-1.8,0-3.6,0.5-5.2,1.4c-4.9,2.9-6.7,9.2-3.8,14.1
c1.8,3.2,5.3,5.2,9,5.2c1.8,0,3.6-0.5,5.2-1.4c4.9-2.9,6.7-9.2,3.8-14.1C283.5,2,280.1,0,276.4,0L276.4,0z"/>
</g>
<g>
<path class="st0" d="M179.9,19.7c-3.3,0-6.5-1.8-8.1-4.7c-2.6-4.5-1-10.2,3.4-12.8c1.4-0.8,3-1.2,4.7-1.2c3.3,0,6.5,1.8,8.1,4.7
c1.2,2.2,1.6,4.7,0.9,7.1c-0.6,2.4-2.2,4.4-4.4,5.7C183.1,19.3,181.5,19.7,179.9,19.7C179.9,19.7,179.9,19.7,179.9,19.7z"/>
<path class="st1" d="M179.8,2c2.9,0,5.7,1.5,7.3,4.2c2.3,4,0.9,9.1-3.1,11.4c-1.3,0.8-2.7,1.1-4.2,1.1c-2.9,0-5.7-1.5-7.3-4.2
c-2.3-4-0.9-9.1,3.1-11.4C177,2.4,178.4,2,179.8,2 M179.8,0c-1.8,0-3.6,0.5-5.2,1.4c-4.9,2.9-6.7,9.2-3.8,14.1
c1.8,3.2,5.3,5.2,9,5.2c1.8,0,3.6-0.5,5.2-1.4c4.9-2.9,6.7-9.2,3.8-14.1C187,2,183.5,0,179.8,0L179.8,0z"/>
</g>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 275 76">
<path fill="#5C4EE5" fill-rule="nonzero" d="M53.99 37.8h71.02c-.027.665 0 1.333.08 2H53.91c.08-.662.11-1.33.082-2h-.002zm-24.98 0H-43v2h72.09c-.08-.667-.107-1.335-.08-2zm120.977 0h71.023c-.027.665 0 1.333.08 2h-71.18c.082-.66.108-1.33.077-2zm96 0H317v2h-71.09c.082-.66.108-1.33.077-2zM41.352 48.5c-3.3 0-6.5-1.8-8.1-4.7-2.6-4.5-1-10.2 3.4-12.8 1.4-.8 3-1.2 4.7-1.2 3.3 0 6.5 1.8 8.1 4.7 1.2 2.2 1.6 4.7.9 7.1-.6 2.4-2.2 4.4-4.4 5.7-1.4.8-3 1.2-4.6 1.2zm96 0c-3.3 0-6.5-1.8-8.1-4.7-2.6-4.5-1-10.2 3.4-12.8 1.4-.8 3-1.2 4.7-1.2 3.3 0 6.5 1.8 8.1 4.7 1.2 2.2 1.6 4.7.9 7.1-.6 2.4-2.2 4.4-4.4 5.7-1.4.8-3 1.2-4.6 1.2zm96 0c-3.3 0-6.5-1.8-8.1-4.7-2.6-4.5-1-10.2 3.4-12.8 1.4-.8 3-1.2 4.7-1.2 3.3 0 6.5 1.8 8.1 4.7 1.2 2.2 1.6 4.7.9 7.1-.6 2.4-2.2 4.4-4.4 5.7-1.4.8-3 1.2-4.6 1.2z"/>
</svg>

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 849 B

View File

@ -1,24 +1,3 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 19.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 289.9 54.4" style="enable-background:new 0 0 289.9 54.4;" xml:space="preserve">
<style type="text/css">
.st0{fill:#822FF7;}
</style>
<g>
<rect class="st0" width="32.6" height="2"/>
<rect x="39.6" class="st0" width="82.2" height="2"/>
<rect x="130.9" class="st0" width="87" height="2"/>
<rect y="13.1" class="st0" width="70" height="2"/>
<rect x="79.3" y="13.1" class="st0" width="25.4" height="2"/>
<rect x="113" y="13.1" class="st0" width="137" height="2"/>
<rect y="26.2" class="st0" width="78.5" height="2"/>
<rect x="87.3" y="26.2" class="st0" width="202.6" height="2"/>
<rect y="39.3" class="st0" width="38.5" height="2"/>
<rect x="51" y="39.3" class="st0" width="66.1" height="2"/>
<rect x="128.3" y="39.3" class="st0" width="109.1" height="2"/>
<rect y="52.4" class="st0" width="60.5" height="2"/>
<rect x="69" y="52.4" class="st0" width="73.4" height="2"/>
<rect x="152.6" y="52.4" class="st0" width="61.9" height="2"/>
</g>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 275 76">
<path fill="#5C4EE5" fill-rule="nonzero" d="M0 11.6h32.6v2H0v-2zm39.6 0h82.2v2H39.6v-2zm91.3 0h87v2h-87v-2zM0 24.7h70v2H0v-2zm79.3 0h25.4v2H79.3v-2zm33.7 0h137v2H113v-2zM0 37.8h78.5v2H0v-2zm87.3 0h202.6v2H87.3v-2zM0 50.9h38.5v2H0v-2zm51 0h66.1v2H51v-2zm77.3 0h109.1v2H128.3v-2zM0 64h60.5v2H0v-2zm69 0h73.4v2H69v-2zm83.6 0h61.9v2h-61.9v-2z"/>
</svg>

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 413 B

View File

@ -1,312 +1,45 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 19.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 810.6 633.6" style="enable-background:new 0 0 810.6 633.6;" xml:space="preserve">
<style type="text/css">
.st0{opacity:0.52;fill:url(#SVGID_1_);}
.st1{opacity:0.52;fill:url(#SVGID_2_);}
.st2{opacity:0.52;fill:url(#SVGID_3_);}
.st3{opacity:0.52;fill:url(#SVGID_4_);}
.st4{opacity:0.52;fill:url(#SVGID_5_);}
.st5{fill:url(#SVGID_6_);}
.st6{fill:#822FF7;}
.st7{clip-path:url(#SVGID_8_);}
.st8{clip-path:url(#SVGID_10_);fill:#822FF7;}
.st9{clip-path:url(#SVGID_12_);}
.st10{clip-path:url(#SVGID_14_);fill:#822FF7;}
.st11{clip-path:url(#SVGID_16_);}
.st12{clip-path:url(#SVGID_18_);fill:#822FF7;}
.st13{clip-path:url(#SVGID_20_);}
.st14{clip-path:url(#SVGID_22_);fill:#822FF7;}
</style>
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="315.2711" y1="104.6378" x2="628.9543" y2="104.6378">
<stop offset="0" style="stop-color:#FFFFFF"/>
<stop offset="5.420001e-02" style="stop-color:#FCF9FF;stop-opacity:0.9447"/>
<stop offset="0.1296" style="stop-color:#F4E7FF;stop-opacity:0.8678"/>
<stop offset="0.2174" style="stop-color:#E7C9FF;stop-opacity:0.7782"/>
<stop offset="0.3146" style="stop-color:#D4A0FF;stop-opacity:0.679"/>
<stop offset="0.4183" style="stop-color:#BC6CFF;stop-opacity:0.5732"/>
<stop offset="0.49" style="stop-color:#AA43FF;stop-opacity:0.5"/>
<stop offset="0.5514" style="stop-color:#BD6DFF;stop-opacity:0.5602"/>
<stop offset="0.6261" style="stop-color:#D199FF;stop-opacity:0.6334"/>
<stop offset="0.7017" style="stop-color:#E2BEFF;stop-opacity:0.7075"/>
<stop offset="0.7769" style="stop-color:#EEDAFF;stop-opacity:0.7813"/>
<stop offset="0.8519" style="stop-color:#F8EFFF;stop-opacity:0.8548"/>
<stop offset="0.9264" style="stop-color:#FDFBFF;stop-opacity:0.9278"/>
<stop offset="1" style="stop-color:#FFFFFF"/>
</linearGradient>
<path class="st0" d="M315.4,184L315.4,184c-0.2-0.4,0-1,0.4-1.2L628.2,24.8l0.8,1.6L316.5,184.4C316.1,184.6,315.6,184.5,315.4,184z
"/>
<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="562.3262" y1="357.9178" x2="786.2966" y2="357.9178">
<stop offset="0" style="stop-color:#FFFFFF"/>
<stop offset="5.420001e-02" style="stop-color:#FCF9FF;stop-opacity:0.9447"/>
<stop offset="0.1296" style="stop-color:#F4E7FF;stop-opacity:0.8678"/>
<stop offset="0.2174" style="stop-color:#E7C9FF;stop-opacity:0.7782"/>
<stop offset="0.3146" style="stop-color:#D4A0FF;stop-opacity:0.679"/>
<stop offset="0.4183" style="stop-color:#BC6CFF;stop-opacity:0.5732"/>
<stop offset="0.49" style="stop-color:#AA43FF;stop-opacity:0.5"/>
<stop offset="0.5514" style="stop-color:#BD6DFF;stop-opacity:0.5602"/>
<stop offset="0.6261" style="stop-color:#D199FF;stop-opacity:0.6334"/>
<stop offset="0.7017" style="stop-color:#E2BEFF;stop-opacity:0.7075"/>
<stop offset="0.7769" style="stop-color:#EEDAFF;stop-opacity:0.7813"/>
<stop offset="0.8519" style="stop-color:#F8EFFF;stop-opacity:0.8548"/>
<stop offset="0.9264" style="stop-color:#FDFBFF;stop-opacity:0.9278"/>
<stop offset="1" style="stop-color:#FFFFFF"/>
</linearGradient>
<path class="st1" d="M786.2,420.7c-0.2,0.4-0.8,0.6-1.2,0.3L562.8,296.4c-0.4-0.2-0.6-0.8-0.3-1.2l0,0c0.2-0.4,0.8-0.6,1.2-0.3
l222.2,124.6C786.3,419.7,786.4,420.2,786.2,420.7L786.2,420.7z"/>
<linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="5760.6606" y1="5576.5513" x2="5977.4663" y2="5576.5513" gradientTransform="matrix(-0.9952 -0.1382 0.134 -0.9995 5257.4233 6729.3804)">
<stop offset="0" style="stop-color:#FFFFFF"/>
<stop offset="5.420001e-02" style="stop-color:#FCF9FF;stop-opacity:0.9447"/>
<stop offset="0.1296" style="stop-color:#F4E7FF;stop-opacity:0.8678"/>
<stop offset="0.2174" style="stop-color:#E7C9FF;stop-opacity:0.7782"/>
<stop offset="0.3146" style="stop-color:#D4A0FF;stop-opacity:0.679"/>
<stop offset="0.4183" style="stop-color:#BC6CFF;stop-opacity:0.5732"/>
<stop offset="0.49" style="stop-color:#AA43FF;stop-opacity:0.5"/>
<stop offset="0.5514" style="stop-color:#BD6DFF;stop-opacity:0.5602"/>
<stop offset="0.6261" style="stop-color:#D199FF;stop-opacity:0.6334"/>
<stop offset="0.7017" style="stop-color:#E2BEFF;stop-opacity:0.7075"/>
<stop offset="0.7769" style="stop-color:#EEDAFF;stop-opacity:0.7813"/>
<stop offset="0.8519" style="stop-color:#F8EFFF;stop-opacity:0.8548"/>
<stop offset="0.9264" style="stop-color:#FDFBFF;stop-opacity:0.9278"/>
<stop offset="1" style="stop-color:#FFFFFF"/>
</linearGradient>
<polygon class="st2" points="265,403 61.3,287.8 62.2,286.3 265.9,401.5 "/>
<linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="89.4641" y1="464.9892" x2="511.7357" y2="464.9892">
<stop offset="0" style="stop-color:#FFFFFF"/>
<stop offset="5.420001e-02" style="stop-color:#FCF9FF;stop-opacity:0.9447"/>
<stop offset="0.1296" style="stop-color:#F4E7FF;stop-opacity:0.8678"/>
<stop offset="0.2174" style="stop-color:#E7C9FF;stop-opacity:0.7782"/>
<stop offset="0.3146" style="stop-color:#D4A0FF;stop-opacity:0.679"/>
<stop offset="0.4183" style="stop-color:#BC6CFF;stop-opacity:0.5732"/>
<stop offset="0.49" style="stop-color:#AA43FF;stop-opacity:0.5"/>
<stop offset="0.5514" style="stop-color:#BD6DFF;stop-opacity:0.5602"/>
<stop offset="0.6261" style="stop-color:#D199FF;stop-opacity:0.6334"/>
<stop offset="0.7017" style="stop-color:#E2BEFF;stop-opacity:0.7075"/>
<stop offset="0.7769" style="stop-color:#EEDAFF;stop-opacity:0.7813"/>
<stop offset="0.8519" style="stop-color:#F8EFFF;stop-opacity:0.8548"/>
<stop offset="0.9264" style="stop-color:#FDFBFF;stop-opacity:0.9278"/>
<stop offset="1" style="stop-color:#FFFFFF"/>
</linearGradient>
<polygon class="st3" points="90.3,585.2 89.5,583.7 510.9,344.8 511.7,346.3 "/>
<linearGradient id="SVGID_5_" gradientUnits="userSpaceOnUse" x1="4054.2095" y1="452.0744" x2="4379.9136" y2="452.0744" gradientTransform="matrix(0.4437 -0.8962 0.8962 0.4437 -1741.7764 3761.9136)">
<stop offset="0" style="stop-color:#FFFFFF"/>
<stop offset="5.420001e-02" style="stop-color:#FCF9FF;stop-opacity:0.9447"/>
<stop offset="0.1296" style="stop-color:#F4E7FF;stop-opacity:0.8678"/>
<stop offset="0.2174" style="stop-color:#E7C9FF;stop-opacity:0.7782"/>
<stop offset="0.3146" style="stop-color:#D4A0FF;stop-opacity:0.679"/>
<stop offset="0.4183" style="stop-color:#BC6CFF;stop-opacity:0.5732"/>
<stop offset="0.49" style="stop-color:#AA43FF;stop-opacity:0.5"/>
<stop offset="0.5514" style="stop-color:#BD6DFF;stop-opacity:0.5602"/>
<stop offset="0.6261" style="stop-color:#D199FF;stop-opacity:0.6334"/>
<stop offset="0.7017" style="stop-color:#E2BEFF;stop-opacity:0.7075"/>
<stop offset="0.7769" style="stop-color:#EEDAFF;stop-opacity:0.7813"/>
<stop offset="0.8519" style="stop-color:#F8EFFF;stop-opacity:0.8548"/>
<stop offset="0.9264" style="stop-color:#FDFBFF;stop-opacity:0.9278"/>
<stop offset="1" style="stop-color:#FFFFFF"/>
</linearGradient>
<rect x="533.5" y="2" class="st4" width="1.7" height="362.5"/>
<linearGradient id="SVGID_6_" gradientUnits="userSpaceOnUse" x1="3909.9014" y1="267.9263" x2="4172.8086" y2="267.9263" gradientTransform="matrix(0.4437 -0.8962 0.8962 0.4437 -1741.7764 3761.9136)">
<stop offset="0" style="stop-color:#FFFFFF"/>
<stop offset="5.420001e-02" style="stop-color:#FCF9FF;stop-opacity:0.9447"/>
<stop offset="0.1296" style="stop-color:#F4E7FF;stop-opacity:0.8678"/>
<stop offset="0.2174" style="stop-color:#E7C9FF;stop-opacity:0.7782"/>
<stop offset="0.3146" style="stop-color:#D4A0FF;stop-opacity:0.679"/>
<stop offset="0.4183" style="stop-color:#BC6CFF;stop-opacity:0.5732"/>
<stop offset="0.49" style="stop-color:#AA43FF;stop-opacity:0.5"/>
<stop offset="0.5514" style="stop-color:#BD6DFF;stop-opacity:0.5602"/>
<stop offset="0.6261" style="stop-color:#D199FF;stop-opacity:0.6334"/>
<stop offset="0.7017" style="stop-color:#E2BEFF;stop-opacity:0.7075"/>
<stop offset="0.7769" style="stop-color:#EEDAFF;stop-opacity:0.7813"/>
<stop offset="0.8519" style="stop-color:#F8EFFF;stop-opacity:0.8548"/>
<stop offset="0.9264" style="stop-color:#FDFBFF;stop-opacity:0.9278"/>
<stop offset="1" style="stop-color:#FFFFFF"/>
</linearGradient>
<rect x="290.6" y="112.8" class="st5" width="1.7" height="292.4"/>
<g>
<g>
<path class="st6" d="M111.2,158.2l33.5,19.4v38.7l-33.5,19.4l-33.5-19.4v-38.7L111.2,158.2 M111.2,155.9l-35.5,20.5v41l35.5,20.5
l35.5-20.5v-41L111.2,155.9L111.2,155.9z"/>
</g>
</g>
<g>
<g>
<path class="st6" d="M148,94.3l33.5,19.4v38.7L148,171.8l-33.5-19.4v-38.7L148,94.3 M148,92l-35.5,20.5v41l35.5,20.5l35.5-20.5
v-41L148,92L148,92z"/>
</g>
</g>
<g>
<g>
<path class="st6" d="M221.7,94.3l33.5,19.4v38.7l-33.5,19.4l-33.5-19.4v-38.7L221.7,94.3 M221.7,92l-35.5,20.5v41l35.5,20.5
l35.5-20.5v-41L221.7,92L221.7,92z"/>
</g>
</g>
<g>
<g>
<path class="st6" d="M148,222l33.5,19.4v38.7L148,299.4l-33.5-19.4v-38.7L148,222 M148,219.7l-35.5,20.5v41l35.5,20.5l35.5-20.5
v-41L148,219.7L148,219.7z"/>
</g>
</g>
<g>
<g>
<path class="st6" d="M37.5,159l32.8,19v37.9l-32.8,19l-32.8-19v-37.9L37.5,159 M37.5,156.7L2.6,176.8V217l34.8,20.1L72.3,217
v-40.2L37.5,156.7L37.5,156.7z"/>
</g>
</g>
<g>
<g>
<path class="st6" d="M184.8,158.2l33.5,19.4v38.7l-33.5,19.4l-33.5-19.4v-38.7L184.8,158.2 M184.8,155.9l-35.5,20.5v41l35.5,20.5
l35.5-20.5v-41L184.8,155.9L184.8,155.9z"/>
</g>
</g>
<g>
<g>
<path class="st6" d="M662.3,159.3l33.5,19.4v38.7l-33.5,19.4l-33.5-19.4v-38.7L662.3,159.3 M662.3,157l-35.5,20.5v41l35.5,20.5
l35.5-20.5v-41L662.3,157L662.3,157z"/>
</g>
</g>
<g>
<g>
<path class="st6" d="M699.2,95.5l33.5,19.4v38.7L699.2,173l-33.5-19.4v-38.7L699.2,95.5 M699.2,93.2l-35.5,20.5v41l35.5,20.5
l35.5-20.5v-41L699.2,93.2L699.2,93.2z"/>
</g>
</g>
<g>
<g>
<path class="st6" d="M772.8,95.5l33.5,19.4v38.7L772.8,173l-33.5-19.4v-38.7L772.8,95.5 M772.8,93.2l-35.5,20.5v41l35.5,20.5
l35.5-20.5v-41L772.8,93.2L772.8,93.2z"/>
</g>
</g>
<g>
<g>
<path class="st6" d="M699.2,223.1l33.5,19.4v38.7l-33.5,19.4l-33.5-19.4v-38.7L699.2,223.1 M699.2,220.8l-35.5,20.5v41l35.5,20.5
l35.5-20.5v-41L699.2,220.8L699.2,220.8z"/>
</g>
</g>
<g>
<g>
<path class="st6" d="M588.6,160.1l32.8,19V217l-32.8,19l-32.8-19v-37.9L588.6,160.1 M588.6,157.8l-34.8,20.1v40.2l34.8,20.1
l34.8-20.1v-40.2L588.6,157.8L588.6,157.8z"/>
</g>
</g>
<g>
<g>
<path class="st6" d="M736,159.3l33.5,19.4v38.7L736,236.8l-33.5-19.4v-38.7L736,159.3 M736,157l-35.5,20.5v41l35.5,20.5l35.5-20.5
v-41L736,157L736,157z"/>
</g>
</g>
<g>
<g>
<g>
<path class="st6" d="M400.7,488.7l33.5,19.4v38.7l-33.5,19.4l-33.5-19.4V508L400.7,488.7 M400.7,486.4l-35.5,20.5v41l35.5,20.5
l35.5-20.5v-41L400.7,486.4L400.7,486.4z"/>
</g>
</g>
<g>
<g>
<path class="st6" d="M437.6,424.9l33.5,19.4V483l-33.5,19.4L404,483v-38.7L437.6,424.9 M437.6,422.6L402,443.1v41l35.5,20.5
l35.5-20.5v-41L437.6,422.6L437.6,422.6z"/>
</g>
</g>
<g>
<g>
<path class="st6" d="M511.2,424.9l33.5,19.4V483l-33.5,19.4L477.7,483v-38.7L511.2,424.9 M511.2,422.6l-35.5,20.5v41l35.5,20.5
l35.5-20.5v-41L511.2,422.6L511.2,422.6z"/>
</g>
</g>
<g>
<g>
<path class="st6" d="M437.6,552.5l33.5,19.4v38.7l-33.5,19.4L404,610.6v-38.7L437.6,552.5 M437.6,550.2L402,570.7v41l35.5,20.5
l35.5-20.5v-41L437.6,550.2L437.6,550.2z"/>
</g>
</g>
<g>
<g>
<path class="st6" d="M327,489.5l32.8,19v37.9l-32.8,19l-32.8-19v-37.9L327,489.5 M327,487.2l-34.8,20.1v40.2l34.8,20.1l34.8-20.1
v-40.2L327,487.2L327,487.2z"/>
</g>
</g>
<g>
<g>
<path class="st6" d="M474.4,488.7l33.5,19.4v38.7l-33.5,19.4l-33.5-19.4V508L474.4,488.7 M474.4,486.4l-35.5,20.5v41l35.5,20.5
l35.5-20.5v-41L474.4,486.4L474.4,486.4z"/>
</g>
</g>
</g>
<g>
<defs>
<polygon id="SVGID_7_" points="396.5,227.2 433.9,249.1 433.9,292.5 396.5,270.7 "/>
</defs>
<use xlink:href="#SVGID_7_" style="overflow:visible;fill-rule:evenodd;clip-rule:evenodd;fill:#822FF7;"/>
<clipPath id="SVGID_8_">
<use xlink:href="#SVGID_7_" style="overflow:visible;"/>
</clipPath>
<g class="st7">
<defs>
<rect id="SVGID_9_" x="49.9" y="-1575" width="4031.2" height="2687.5"/>
</defs>
<use xlink:href="#SVGID_9_" style="overflow:visible;fill:#822FF7;"/>
<clipPath id="SVGID_10_">
<use xlink:href="#SVGID_9_" style="overflow:visible;"/>
</clipPath>
<rect x="379.7" y="210.4" class="st8" width="71" height="98.9"/>
</g>
</g>
<g>
<defs>
<polygon id="SVGID_11_" points="440.6,249.1 478,227.2 478,270.7 440.6,292.5 "/>
</defs>
<use xlink:href="#SVGID_11_" style="overflow:visible;fill-rule:evenodd;clip-rule:evenodd;fill:#822FF7;"/>
<clipPath id="SVGID_12_">
<use xlink:href="#SVGID_11_" style="overflow:visible;"/>
</clipPath>
<g class="st9">
<defs>
<rect id="SVGID_13_" x="49.9" y="-1575" width="4031.2" height="2687.5"/>
</defs>
<use xlink:href="#SVGID_13_" style="overflow:visible;fill:#822FF7;"/>
<clipPath id="SVGID_14_">
<use xlink:href="#SVGID_13_" style="overflow:visible;"/>
</clipPath>
<rect x="423.8" y="210.4" class="st10" width="71" height="98.9"/>
</g>
</g>
<g>
<defs>
<polygon id="SVGID_15_" points="352.2,202.1 352.2,245.6 389.6,267.4 389.6,224 "/>
</defs>
<use xlink:href="#SVGID_15_" style="overflow:visible;fill-rule:evenodd;clip-rule:evenodd;fill:#822FF7;"/>
<clipPath id="SVGID_16_">
<use xlink:href="#SVGID_15_" style="overflow:visible;"/>
</clipPath>
<g class="st11">
<defs>
<rect id="SVGID_17_" x="49.9" y="-1575" width="4031.2" height="2687.5"/>
</defs>
<use xlink:href="#SVGID_17_" style="overflow:visible;fill:#822FF7;"/>
<clipPath id="SVGID_18_">
<use xlink:href="#SVGID_17_" style="overflow:visible;"/>
</clipPath>
<rect x="335.4" y="185.3" class="st12" width="71" height="98.9"/>
</g>
</g>
<g>
<defs>
<polygon id="SVGID_19_" points="396.5,323.4 433.9,345.3 433.9,302.1 433.9,301.5 396.5,280 "/>
</defs>
<use xlink:href="#SVGID_19_" style="overflow:visible;fill-rule:evenodd;clip-rule:evenodd;fill:#822FF7;"/>
<clipPath id="SVGID_20_">
<use xlink:href="#SVGID_19_" style="overflow:visible;"/>
</clipPath>
<g class="st13">
<defs>
<rect id="SVGID_21_" x="49.9" y="-1575" width="4031.2" height="2687.5"/>
</defs>
<use xlink:href="#SVGID_21_" style="overflow:visible;fill:#822FF7;"/>
<clipPath id="SVGID_22_">
<use xlink:href="#SVGID_21_" style="overflow:visible;"/>
</clipPath>
<rect x="379.7" y="263.2" class="st14" width="71" height="98.9"/>
</g>
</g>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 806 618">
<defs>
<linearGradient id="create-a" x1="50%" x2="50%" y1="0%" y2="100%">
<stop stop-color="#FFF" stop-opacity=".1" offset="0%"/>
<stop stop-color="#5C4EE5" offset="49.139%"/>
<stop stop-color="#5C4EE5" stop-opacity=".1" offset="100%"/>
</linearGradient>
</defs>
<g fill="none" fill-rule="evenodd">
<g fill="#5C4EE5" fill-rule="nonzero">
<path d="M2.36 164.655v37.69L35 221.19l32.64-18.845v-37.69L35 145.81 2.36 164.654zM35 143.5l34.64 20v40L35 223.5l-34.64-20v-40l34.64-20z"/>
<path d="M76.36 164.655v37.69L109 221.19l32.64-18.845v-37.69L109 145.81l-32.64 18.845zM109 143.5l34.64 20v40l-34.64 20-34.64-20v-40l34.64-20z"/>
<path d="M113.36 101.155v37.69L146 157.69l32.64-18.845v-37.69L146 82.31l-32.64 18.845zM146 80l34.64 20v40L146 160l-34.64-20v-40L146 80z"/>
<path d="M186.36 101.155v37.69L219 157.69l32.64-18.845v-37.69L219 82.31l-32.64 18.845zM219 80l34.64 20v40L219 160l-34.64-20v-40L219 80z"/>
<path d="M182 145.81l-32.64 18.845v37.69L182 221.19l32.64-18.845v-37.69L182 145.81zm0-2.31l34.64 20v40l-34.64 20-34.64-20v-40l34.64-20z"/>
<path d="M113.36 228.155v37.69L146 284.69l32.64-18.845v-37.69L146 209.31l-32.64 18.845zM146 207l34.64 20v40L146 287l-34.64-20v-40L146 207z"/>
</g>
<g fill="#5C4EE5" fill-rule="nonzero">
<path d="M554.36 165.655v37.69L587 222.19l32.64-18.845v-37.69L587 146.81l-32.64 18.845zM587 144.5l34.64 20v40l-34.64 20-34.64-20v-40l34.64-20z"/>
<path d="M628.36 165.655v37.69L661 222.19l32.64-18.845v-37.69L661 146.81l-32.64 18.845zM661 144.5l34.64 20v40l-34.64 20-34.64-20v-40l34.64-20z"/>
<path d="M665.36 102.155v37.69L698 158.69l32.64-18.845v-37.69L698 83.31l-32.64 18.845zM698 81l34.64 20v40L698 161l-34.64-20v-40L698 81z"/>
<path d="M738.36 102.155v37.69L771 158.69l32.64-18.845v-37.69L771 83.31l-32.64 18.845zM771 81l34.64 20v40L771 161l-34.64-20v-40L771 81z"/>
<path d="M734 146.81l-32.64 18.845v37.69L734 222.19l32.64-18.845v-37.69L734 146.81zm0-2.31l34.64 20v40l-34.64 20-34.64-20v-40l34.64-20z"/>
<path d="M665.36 229.155v37.69L698 285.69l32.64-18.845v-37.69L698 210.31l-32.64 18.845zM698 208l34.64 20v40L698 288l-34.64-20v-40L698 208z"/>
</g>
<g fill="#5C4EE5" fill-rule="nonzero">
<path d="M292.36 495.655v37.69L325 552.19l32.64-18.845v-37.69L325 476.81l-32.64 18.845zM325 474.5l34.64 20v40l-34.64 20-34.64-20v-40l34.64-20z"/>
<path d="M366.36 495.655v37.69L399 552.19l32.64-18.845v-37.69L399 476.81l-32.64 18.845zM399 474.5l34.64 20v40l-34.64 20-34.64-20v-40l34.64-20z"/>
<path d="M403.36 432.155v37.69L436 488.69l32.64-18.845v-37.69L436 413.31l-32.64 18.845zM436 411l34.64 20v40L436 491l-34.64-20v-40L436 411z"/>
<path d="M476.36 432.155v37.69L509 488.69l32.64-18.845v-37.69L509 413.31l-32.64 18.845zM509 411l34.64 20v40L509 491l-34.64-20v-40L509 411z"/>
<path d="M439.36 495.655v37.69L472 552.19l32.64-18.845v-37.69L472 476.81l-32.64 18.845zM472 474.5l34.64 20v40l-34.64 20-34.64-20v-40l34.64-20z"/>
<path d="M436 540.31l-32.64 18.845v37.69L436 615.69l32.64-18.845v-37.69L436 540.31zm0-2.31l34.64 20v40L436 618l-34.64-20v-40L436 538z"/>
</g>
<path fill="#5C4EE5" d="M393.576 213.425l39.308 22.725v45.45l-39.308-22.725"/>
<path fill="#4040B2" d="M437.152 236.15v45.45l39.308-22.725v-45.45"/>
<path fill="#5C4EE5" d="M350 188v45.45l39.308 22.725v-45.45"/>
<path fill="#5C4EE5" d="M393.576 309.275L432.884 332v-45.45l-39.308-22.725"/>
<path stroke="url(#create-a)" d="M288.5 119.5l-.1 247.018" stroke-linecap="square"/>
<path stroke="url(#create-a)" d="M59 274l206 116" stroke-linecap="square"/>
<path stroke="url(#create-a)" d="M557 281l206 116" stroke-linecap="square"/>
<path stroke="url(#create-a)" d="M531.333 1l-.103 337" stroke-linecap="square"/>
<path stroke="url(#create-a)" d="M612 20L332 162.518" stroke-linecap="square"/>
<path stroke="url(#create-a)" d="M470 356L102 561.79" stroke-linecap="square"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 3.9 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 21 KiB

View File

@ -1,398 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 19.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 597.5 336.9" style="enable-background:new 0 0 597.5 336.9;" xml:space="preserve">
<style type="text/css">
.st0{fill:#822FF7;stroke:#FFFFFF;stroke-miterlimit:10;}
.st1{fill:#FFFFFF;}
.st2{fill:url(#SVGID_1_);}
.st3{fill:url(#SVGID_2_);}
.st4{fill:url(#SVGID_3_);}
.st5{fill:url(#SVGID_4_);}
.st6{fill:url(#SVGID_5_);}
.st7{fill:url(#SVGID_6_);}
.st8{fill:url(#SVGID_7_);}
.st9{fill:url(#SVGID_8_);}
.st10{fill:url(#SVGID_9_);}
.st11{fill:none;stroke:#FFFFFF;stroke-width:1.1135;stroke-miterlimit:10;}
</style>
<polygon id="_x3C_Orig_x3E__362_" class="st0" points="331.2,90.6 292.3,110.2 292.3,161.1 331.2,180.6 370.2,161 370.2,110.2 "/>
<polygon id="_x3C_Orig_x3E__3_" class="st0" points="373.3,165.4 334.3,184.9 334.3,235.8 373.3,255.4 412.3,235.8 412.3,184.9 "/>
<polygon id="_x3C_Orig_x3E__4_" class="st0" points="456.4,165.4 417.4,184.9 417.4,235.8 456.3,255.4 495.3,235.8 495.3,184.9 "/>
<polygon id="_x3C_Orig_x3E__1_" class="st0" points="414.5,90.6 375.5,110.2 375.5,161.1 414.4,180.6 453.4,161 453.4,110.2 "/>
<polygon id="_x3C_Orig_x3E__2_" class="st0" points="497.7,90.6 458.7,110.2 458.7,161.1 497.7,180.6 536.6,161 536.6,110.2 "/>
<polygon id="_x3C_Orig_x3E__5_" class="st0" points="455.9,15.3 416.9,34.9 416.9,85.8 455.9,105.3 494.8,85.7 494.8,34.9 "/>
<polygon id="_x3C_Orig_x3E__8_" class="st0" points="539.2,15.3 500.2,34.9 500.2,85.8 539.2,105.3 578.1,85.7 578.1,34.9 "/>
<polygon id="_x3C_Orig_x3E__6_" class="st0" points="415,240 376,259.6 376,310.5 415,330 453.9,310.4 453.9,259.6 "/>
<polygon class="st1" points="90.8,219.8 55.2,186.3 101.9,186.3 155.2,186.3 155.2,185 103.2,185 144.2,148.2 213.1,148.2
213.1,147 143.6,147 101.3,185 52,185 4,185 4.8,185 4.8,186.3 4,186.3 53.3,186.3 90.3,221.1 262.7,221.1 262.7,219.8 "/>
<radialGradient id="SVGID_1_" cx="226.5066" cy="4804.7939" r="23.4389" fx="226.9252" fy="4805.3696" gradientTransform="matrix(1 0 0 1 0 -4662)" gradientUnits="userSpaceOnUse">
<stop offset="0" style="stop-color:#822FF7"/>
<stop offset="1" style="stop-color:#822FF7;stop-opacity:0"/>
</radialGradient>
<circle class="st2" cx="227.1" cy="142.7" r="23.9"/>
<radialGradient id="SVGID_2_" cx="168.5066" cy="4842.6938" r="23.4389" fx="168.9252" fy="4843.2695" gradientTransform="matrix(1 0 0 1 0 -4662)" gradientUnits="userSpaceOnUse">
<stop offset="0" style="stop-color:#822FF7"/>
<stop offset="1" style="stop-color:#822FF7;stop-opacity:0"/>
</radialGradient>
<circle class="st3" cx="169.1" cy="180.6" r="23.9"/>
<radialGradient id="SVGID_3_" cx="167.5066" cy="4842.6938" r="23.4389" fx="167.9252" fy="4843.2695" gradientTransform="matrix(1 0 0 1 0 -4662)" gradientUnits="userSpaceOnUse">
<stop offset="0" style="stop-color:#822FF7"/>
<stop offset="1" style="stop-color:#822FF7;stop-opacity:0"/>
</radialGradient>
<circle class="st4" cx="168.1" cy="180.6" r="23.9"/>
<radialGradient id="SVGID_4_" cx="166.5066" cy="4842.6938" r="23.4389" fx="166.9252" fy="4843.2695" gradientTransform="matrix(1 0 0 1 0 -4662)" gradientUnits="userSpaceOnUse">
<stop offset="0" style="stop-color:#822FF7"/>
<stop offset="1" style="stop-color:#822FF7;stop-opacity:0"/>
</radialGradient>
<circle class="st5" cx="167.1" cy="180.6" r="23.9"/>
<radialGradient id="SVGID_5_" cx="168.5066" cy="4841.6938" r="23.4389" fx="168.9252" fy="4842.2695" gradientTransform="matrix(1 0 0 1 0 -4662)" gradientUnits="userSpaceOnUse">
<stop offset="0" style="stop-color:#822FF7"/>
<stop offset="1" style="stop-color:#822FF7;stop-opacity:0"/>
</radialGradient>
<circle class="st6" cx="169.1" cy="179.6" r="23.9"/>
<radialGradient id="SVGID_6_" cx="267.0067" cy="4876.4937" r="23.4389" fx="267.4253" fy="4877.0693" gradientTransform="matrix(1 0 0 1 0 -4662)" gradientUnits="userSpaceOnUse">
<stop offset="0" style="stop-color:#822FF7"/>
<stop offset="1" style="stop-color:#822FF7;stop-opacity:0"/>
</radialGradient>
<circle class="st7" cx="267.6" cy="214.4" r="23.9"/>
<linearGradient id="SVGID_7_" gradientUnits="userSpaceOnUse" x1="-1317.2921" y1="-4896.5537" x2="-1317.2921" y2="-4855.6196" gradientTransform="matrix(-1 0 0 -1 -818.4421 -4821.0278)">
<stop offset="0" style="stop-color:#822FF7;stop-opacity:0"/>
<stop offset="1" style="stop-color:#822FF7"/>
</linearGradient>
<rect x="400.2" class="st8" width="197.3" height="69.5"/>
<linearGradient id="SVGID_8_" gradientUnits="userSpaceOnUse" x1="37.67" y1="4474.436" x2="37.67" y2="4512.4839" gradientTransform="matrix(1 0 0 1 371.83 -4207.7773)">
<stop offset="0" style="stop-color:#822FF7;stop-opacity:0"/>
<stop offset="1" style="stop-color:#822FF7"/>
</linearGradient>
<polygon class="st9" points="310.9,272.3 508.1,272.3 508.1,336.9 310.9,336.9 "/>
<linearGradient id="SVGID_9_" gradientUnits="userSpaceOnUse" x1="57" y1="4858.3037" x2="2" y2="4858.3037" gradientTransform="matrix(1 0 0 1 0 -4662)">
<stop offset="0" style="stop-color:#822FF7;stop-opacity:0"/>
<stop offset="1" style="stop-color:#822FF7"/>
</linearGradient>
<polygon class="st10" points="81,97.7 81,294.9 0,294.9 0,97.7 "/>
<polygon id="_x3C_Orig_x3E__9_" class="st0" points="169.9,166.6 159.2,172 159.2,186 169.9,191.3 180.6,185.9 180.6,172 "/>
<polygon id="_x3C_Orig_x3E__10_" class="st0" points="277.3,201.7 266.6,207.1 266.6,221 277.3,226.4 288,221 288,207 "/>
<polygon id="_x3C_Orig_x3E__7_" class="st0" points="227.1,128.6 216.4,134 216.4,148 227.1,153.4 237.8,148 237.8,134 "/>
<g id="g10" transform="matrix(1.25,0,0,-1.25,0,217.5)">
<g id="g12" transform="scale(0.1,0.1)">
<path id="path14" class="st1" d="M3209.5,690.2l-27,9v39.1l27-8V690.2"/>
<path id="path16" class="st1" d="M3216.6,730.2l27,8l-0.1-39l-26.9-9V730.2"/>
<path id="path18" class="st1" d="M3238.1,742.5l-25.2,7.8l-24.9-7.8l24.9-6.7L3238.1,742.5"/>
<path id="path20" class="st1" d="M3277.6,690.2l-27,9v39.1l27-8V690.2"/>
<path id="path22" class="st1" d="M3284.7,730.2l27,8l-0.1-39l-26.9-9V730.2"/>
<path id="path24" class="st1" d="M3306.2,742.5l-25.2,7.8l-24.9-7.8l24.9-6.7L3306.2,742.5"/>
<path id="path26" class="st1" d="M3107.4,673.1l-27,8V642l27-9V673.1"/>
<path id="path28" class="st1" d="M3114.4,673.1l27,8l-0.1-39l-26.9-9V673.1"/>
<path id="path30" class="st1" d="M3135.9,685.4l-25.2,7.8l-24.9-7.8l24.9-6.7L3135.9,685.4"/>
<path id="path32" class="st1" d="M3175.5,633.1l-27,9v39.1l27-8V633.1"/>
<path id="path34" class="st1" d="M3182.5,673.1l27,8l-0.1-39l-26.9-9V673.1"/>
<path id="path36" class="st1" d="M3204,685.4l-25.2,7.8l-24.9-7.8l24.9-6.7L3204,685.4"/>
<path id="path38" class="st1" d="M3141.4,576l-27,9v39.1l27-8V576"/>
<path id="path40" class="st1" d="M3148.4,616.1l27,8l-0.1-39l-26.9-9V616.1"/>
<path id="path42" class="st1" d="M3170,628.3l-25.2,7.8l-24.9-7.8l24.9-6.7L3170,628.3"/>
<path id="path44" class="st1" d="M3261,610.5h-2c-0.7,0-1.7-0.5-1.9-1.3l-6-21.2l-6,21.2c-0.2,0.7-0.8,1.3-1.7,1.3h-2.4
c-0.8,0-1.5-0.7-1.6-1.4l-5.5-21l-5.7,21c-0.2,0.8-1.2,1.3-1.9,1.3h-2.9c-0.6,0-1.2-0.3-1.5-0.7c-0.2-0.3-0.3-0.6-0.2-0.9
l8.9-31.3c0.2-0.7,0.8-1.3,1.6-1.3h2.8c0.8,0,1.4,0.6,1.6,1.4l5.4,20.9l5.9-20.9c0.2-0.6,0.8-1.3,1.6-1.3h2.8
c0.8,0,1.4,0.5,1.6,1.3l8.5,31.3c0.1,0.3,0,0.6-0.2,0.9C3262.2,610.3,3261.6,610.5,3261,610.5"/>
<path id="path46" class="st1" d="M3285.6,597.2h-15c0.3,4.2,3.1,8.6,7.7,8.8C3283.2,605.8,3285.5,601.5,3285.6,597.2z
M3278.3,610.7c-10.1,0-14.8-9-14.8-17.3c0-10.4,5.7-17.1,14.6-17.1c6.4,0,11.2,3.2,13.3,8.8c0.1,0.3,0.1,0.7-0.1,1
c-0.2,0.4-0.6,0.7-1.1,0.8l-2.8,0.5c-0.8,0.1-1.6-0.3-1.9-1c-1.4-3.1-3.9-4.9-7-5c-3,0.1-5.8,1.9-7,4.6c-1,2.2-1.2,4.3-1.2,6.5
h20.4c0.4,0,0.9,0.2,1.2,0.5c0.3,0.3,0.4,0.6,0.4,0.9C3292.2,602.1,3288.5,610.7,3278.3,610.7"/>
<path id="path48" class="st1" d="M3317.4,593.4c0-1.9-0.3-11.5-7.2-11.7c-2.3,0.1-4.6,1.4-5.9,3.4c-0.9,1.5-1.5,3.6-1.6,6.1v5.6
c0.1,4.3,3.2,9.1,7.5,9.2C3317,605.8,3317.4,595.5,3317.4,593.4L3317.4,593.4z M3311.3,611h-0.5c-3.4,0-6-1.4-8-4.3v13.2
c0,0.7-0.8,1.4-1.6,1.4h-2.9c-0.8,0-1.6-0.6-1.6-1.4v-41.2c0-0.7,0.8-1.4,1.6-1.4h0.9c0.8,0,1.4,0.7,1.6,1.3l0.9,2.9
c2.1-3,5.3-4.8,8.8-4.8h0.5c9,0,13.1,8.8,13.1,17.5c0,4.3-1.1,8.5-2.9,11.4C3318.8,609,3315.1,611,3311.3,611"/>
<path id="path50" class="st1" d="M3356,594.3c-1.9,1.4-4.2,1.8-6.5,2.3l-4.4,0.8c-3.2,0.5-5,1.4-5,4.2c0,2.9,3.1,4.1,5.6,4.1
c3.2-0.1,5.5-1.5,6.7-4c0.3-0.6,0.9-1,1.5-1c0.1,0,0.2,0,0.3,0l2.7,0.6c0.4,0.1,0.9,0.4,1.1,0.8c0.2,0.3,0.2,0.7,0.1,1
c-1.7,4.9-6,7.5-12.4,7.5c-5.8,0-12.1-2.6-12.1-9.9c0-5,3.1-8.1,9.3-9.4l4.9-0.9c2.7-0.5,5.5-1.4,5.5-4.3c0-4.3-5-4.7-6.5-4.8
c-3.4,0.1-7.2,1.6-8.2,4.8c-0.2,0.7-1.1,1.2-1.9,1l-2.9-0.6c-0.4-0.1-0.8-0.4-1.1-0.8c-0.2-0.3-0.2-0.7-0.2-1
c1.5-5.3,6.6-8.5,13.7-8.6h0.2c6.4,0,13.2,2.7,13.2,10.4C3359.9,589.8,3358.5,592.6,3356,594.3"/>
<path id="path52" class="st1" d="M3385.1,597.2h-15c0.3,4.2,3.1,8.6,7.7,8.8C3382.7,605.8,3385,601.5,3385.1,597.2z M3377.8,610.7
c-10.1,0-14.8-9-14.8-17.3c0-10.4,5.7-17.1,14.6-17.1c6.4,0,11.2,3.2,13.3,8.8c0.1,0.3,0.1,0.7-0.1,1c-0.2,0.4-0.6,0.7-1.1,0.8
l-2.8,0.5c-0.7,0.1-1.6-0.2-1.9-1c-1.4-3.1-3.9-4.9-7-5c-3,0.1-5.8,1.9-7,4.6c-1,2.2-1.2,4.3-1.2,6.5h20.4c0.4,0,0.9,0.2,1.2,0.5
c0.3,0.3,0.4,0.6,0.4,0.9C3391.7,602.1,3388,610.7,3377.8,610.7"/>
<path id="path54" class="st1" d="M3411,610.3c-0.4,0-0.8,0.1-1.2,0.1c-3.4,0-6.2-1.9-8.1-5.4v3.1c0,0.8-0.8,1.4-1.6,1.4h-2.5
c-0.8,0-1.6-0.7-1.6-1.4v-30.2c0-0.8,0.7-1.4,1.6-1.4h3c0.8,0,1.6,0.6,1.7,1.4v15.2c0,2.5,0.2,4.4,1.4,6.6
c1.7,3.2,4.1,4.8,7.3,4.8c0.8,0,1.5,0.7,1.5,1.5v2.8C3412.5,609.6,3411.8,610.2,3411,610.3"/>
<path id="path56" class="st1" d="M3442.2,610.9h-2.3c-0.7,0-1.7-0.5-1.9-1.3l-7.6-23.9l-7.8,23.9c-0.2,0.8-1.2,1.3-1.9,1.3h-3.4
c-0.6,0-1.2-0.3-1.5-0.7c-0.2-0.3-0.3-0.6-0.2-0.9l10.6-31.5c0.2-0.6,0.7-1.4,1.6-1.4h4.1c0.7,0,1.4,0.5,1.6,1.4l10.3,31.5
c0.1,0.3,0,0.6-0.2,0.9C3443.4,610.7,3442.8,610.9,3442.2,610.9"/>
<path id="path58" class="st1" d="M3449.9,623.1c-2.2,0-3.9-1.8-3.9-3.9c0-2.2,1.8-3.9,3.9-3.9c2.2,0,3.9,1.8,3.9,3.9
C3453.9,621.3,3452.1,623.1,3449.9,623.1"/>
<path id="path60" class="st1" d="M3451.5,611.1h-3.2c-0.9,0-1.7-0.7-1.7-1.5v-32.1c0-0.4,0.2-0.8,0.5-1.1s0.7-0.4,1.1-0.4h3.2l0,0
c0.9,0,1.7,0.7,1.7,1.5v32.1C3453.2,610.4,3452.4,611.1,3451.5,611.1"/>
<path id="path62" class="st1" d="M3481.6,589.3h-2.7c-0.8,0-1.4-0.5-1.7-1.2c-1-4.2-3.2-6.4-6.6-6.5c-6.6,0.2-7.1,9.3-7.1,12.1
c0,5.6,1.9,11.6,7.3,11.8c3.3-0.1,5.6-2.4,6.3-6.2c0.1-0.8,0.7-1.4,1.5-1.5h2.9c0.9,0.1,1.5,0.7,1.5,1.5
c-1,6.9-5.8,11.3-12.2,11.3h-0.2h-0.2c-9.3,0-13.4-8.7-13.4-17.2c0-7.9,3.5-17,13.4-17h0.5c6.2,0,10.9,4.4,12.2,11.4
c0,0.3-0.1,0.7-0.3,0.9C3482.7,589.1,3482.2,589.3,3481.6,589.3"/>
<path id="path64" class="st1" d="M3508.2,597.2h-15c0.3,4.2,3.1,8.6,7.7,8.8C3505.8,605.8,3508.1,601.5,3508.2,597.2z
M3500.8,610.7c-10.1,0-14.8-9-14.8-17.3c0-10.4,5.7-17.1,14.6-17.1c6.4,0,11.2,3.2,13.3,8.8c0.1,0.3,0.1,0.7-0.1,1
c-0.2,0.4-0.6,0.7-1.1,0.8l-2.8,0.5c-0.7,0.1-1.6-0.2-1.9-1c-1.4-3.1-3.9-4.9-7-5c-3,0.1-5.8,1.9-7,4.6c-1,2.2-1.2,4.3-1.2,6.5
h20.4c0.4,0,0.9,0.2,1.2,0.5c0.3,0.3,0.4,0.6,0.4,0.9C3514.8,602.1,3511.1,610.7,3500.8,610.7"/>
<path id="path66" class="st1" d="M3540.4,594.3c-1.9,1.4-4.2,1.8-6.5,2.3l-4.4,0.8c-3.2,0.5-5,1.4-5,4.2c0,3.8,4.7,4.1,5.6,4.1
c3.2-0.1,5.5-1.5,6.7-4c0.3-0.6,0.9-1,1.5-1c0.1,0,0.2,0,0.3,0l2.7,0.6c0.4,0.1,0.9,0.4,1.1,0.8c0.2,0.3,0.2,0.7,0.1,1
c-1.7,4.9-6,7.5-12.4,7.5c-5.8,0-12.1-2.6-12.1-9.9c0-5,3.1-8.1,9.3-9.4l4.9-0.9c2.7-0.5,5.5-1.4,5.5-4.3c0-4.3-5-4.7-6.5-4.8
c-3.1,0.1-7.2,1.4-8.2,4.8c-0.2,0.7-1.1,1.2-1.9,1l-2.9-0.6c-0.4-0.1-0.8-0.4-1.1-0.8c-0.2-0.3-0.2-0.7-0.2-1
c1.5-5.3,6.6-8.5,13.7-8.6h0.2c6.4,0,13.2,2.7,13.2,10.4C3544.2,589.8,3542.8,592.6,3540.4,594.3"/>
<path id="path68" class="st1" d="M3409.6,672.9v7.3c0,1.1,0.8,1.8,1.9,1.8h32.7c1,0,1.9-0.8,1.9-1.8V674c0-1-0.9-2.4-2.5-4.6
l-16.9-24.2c6.3,0.1,12.9-0.8,18.6-4c1.3-0.7,1.6-1.8,1.7-2.8v-7.8c0-1.1-1.2-2.3-2.4-1.7c-10.1,5.3-23.4,5.8-34.5-0.1
c-1.1-0.6-2.3,0.6-2.3,1.7v7.4c0,1.2,0,3.2,1.2,5l19.6,28.1h-17.1C3410.4,671.1,3409.6,671.9,3409.6,672.9"/>
<path id="path70" class="st1" d="M3290.4,627.4h-9.9c-0.9,0.1-1.7,0.8-1.8,1.7v51c0,1,0.9,1.8,1.9,1.8h9.3c1-0.1,1.7-0.8,1.8-1.7
v-6.7h0.2c2.4,6.4,7,9.4,13.1,9.4c6.2,0,10.1-3,12.9-9.4c2.4,6.4,7.9,9.4,13.7,9.4c4.2,0,8.7-1.7,11.5-5.6
c3.2-4.3,2.5-10.5,2.5-16v-32.2c0-1-0.9-1.8-1.9-1.8h-9.9c-1,0.1-1.8,0.9-1.8,1.8v27c0,2.1,0.2,7.5-0.3,9.6
c-0.7,3.4-3,4.4-5.8,4.4c-2.4,0-4.9-1.6-5.9-4.2c-1-2.6-0.9-6.9-0.9-9.8v-27c0-1-0.9-1.8-1.9-1.8h-9.9c-1,0.1-1.8,0.9-1.8,1.8v27
c0,5.7,0.9,14.1-6.1,14.1c-7.1,0-6.9-8.2-6.9-14.1v-27C3292.3,628.2,3291.5,627.4,3290.4,627.4"/>
<path id="path72" class="st1" d="M3474.2,672.6c-7.3,0-7.8-10-7.8-16.2s-0.1-19.5,7.7-19.5c7.7,0,8.1,10.7,8.1,17.3
c0,4.3-0.2,9.4-1.5,13.5C3479.6,671.2,3477.3,672.6,3474.2,672.6z M3474.1,683c14.7,0,22.7-12.7,22.7-28.8
c0-15.6-8.8-27.9-22.7-27.9c-14.5,0-22.4,12.7-22.4,28.4C3451.7,670.7,3459.7,683,3474.1,683"/>
<path id="path74" class="st1" d="M3516,627.4h-9.9c-1,0.1-1.8,0.9-1.8,1.8v51c0.1,0.9,0.9,1.7,1.9,1.7h9.2c0.9,0,1.6-0.6,1.8-1.4
v-7.8h0.2c2.8,7,6.7,10.3,13.5,10.3c4.5,0,8.8-1.6,11.6-6c2.6-4.1,2.6-10.9,2.6-15.9V629c-0.1-0.9-0.9-1.6-1.9-1.6h-10
c-0.9,0.1-1.7,0.7-1.8,1.6v27.7c0,5.6,0.7,13.7-6.2,13.7c-2.4,0-4.6-1.6-5.7-4.1c-1.4-3.1-1.6-6.2-1.6-9.7v-27.5
C3517.9,628.2,3517,627.4,3516,627.4"/>
<path class="st1" d="M3401.2,636.8c-1.8,2.5-3.8,4.6-3.8,9.2v15.5c0,6.6,0.5,12.6-4.4,17.1c-3.8,3.7-10.1,4.9-15,4.9
c-9.5,0-20-3.5-22.2-15.2c-0.2-1.2,0.7-1.9,1.5-2.1l9.6-1c0.9,0,1.6,0.9,1.7,1.8c0.8,4,4.2,6,8,6c2,0,4.4-0.8,5.6-2.6
c1.4-2,1.2-4.8,1.2-7.2v-1.3c-5.8-0.6-13.3-1.1-18.7-3.4c-6.2-2.7-10.6-8.2-10.6-16.2c0-10.3,6.5-15.5,14.9-15.5
c7.1,0,10.9,1.7,16.4,7.2c1.8-2.6,2.4-3.9,5.7-6.6c0.7-0.4,1.7-0.4,2.3,0.2l0,0c2,1.8,5.6,4.9,7.6,6.6
C3402,634.8,3401.9,635.9,3401.2,636.8z M3381.7,641.2c-1.6-2.8-4.1-4.5-6.9-4.5c-3.8,0-6,2.9-6,7.2c0,8.5,7.6,10,14.8,10v-2.1
C3383.5,647.9,3383.6,644.7,3381.7,641.2z"/>
<path class="st1" d="M3270.9,636.8c-1.8,2.5-3.8,4.6-3.8,9.2v15.5c0,6.6,0.5,12.6-4.4,17.1c-3.8,3.7-10.1,4.9-15,4.9
c-9.5,0-20-3.5-22.2-15.2c-0.2-1.2,0.7-1.9,1.5-2.1l9.6-1c0.9,0,1.6,0.9,1.7,1.8c0.8,4,4.2,6,8,6c2,0,4.4-0.8,5.6-2.6
c1.4-2,1.2-4.8,1.2-7.2v-1.3c-5.8-0.6-13.3-1.1-18.7-3.4c-6.2-2.7-10.6-8.2-10.6-16.2c0-10.3,6.5-15.5,14.9-15.5
c7.1,0,10.9,1.7,16.4,7.2c1.8-2.6,2.4-3.9,5.7-6.6c0.7-0.4,1.7-0.4,2.4,0.2l0,0c2,1.8,5.6,4.9,7.6,6.6
C3271.7,634.8,3271.6,635.9,3270.9,636.8z M3251.4,641.2c-1.6-2.8-4.1-4.5-6.9-4.5c-3.8,0-6,2.9-6,7.2c0,8.5,7.6,10,14.8,10v-2.1
C3253.3,647.9,3253.3,644.7,3251.4,641.2z"/>
</g>
</g>
<g>
<circle class="st1" cx="330.9" cy="129.1" r="4.1"/>
<path class="st1" d="M345.9,127.7l-3.6-6.2c0,0,0,0,0-0.1l-2.7-4.7c-0.5-0.9-1.4-1.4-2.4-1.4h-12.6c-1,0-1.9,0.6-2.4,1.4l-3.6,6.2
l0,0l3.2,5.5l4.3-7.5h15c0.5,0,0.9,0.2,1.2,0.7H336l4.3,7.5l-4.7,8.2l0,0l-2.8,4.8c-0.2,0.4-0.7,0.7-1.2,0.7l3.2-5.5h-8.7l-4.4-7.6
l0,0l-0.4-0.6l0,0l-2.8-4.8c-0.2-0.4-0.3-0.9,0-1.4l-2.8,4.8c-0.5,0.9-0.5,1.9,0,2.7l6.3,11c0.5,0.9,1.4,1.4,2.4,1.4h7.1
c0.1,0,0.1,0,0.2,0h5.4c1,0,1.9-0.6,2.4-1.4l6.3-11C346.4,129.5,346.4,128.5,345.9,127.7z M324.6,119.1c-0.5,0-0.8-0.4-0.8-0.8
c0-0.5,0.4-0.8,0.8-0.8c0.5,0,0.8,0.4,0.8,0.8S325,119.1,324.6,119.1z M337.6,119c-0.4,0.2-0.9,0.1-1.1-0.3
c-0.2-0.4-0.1-0.9,0.3-1.1c0.4-0.2,0.9-0.1,1.1,0.3C338.1,118.2,338,118.7,337.6,119z M318.9,129.6c-0.2,0.4-0.7,0.5-1.1,0.3
c-0.4-0.2-0.5-0.7-0.3-1.1c0.2-0.4,0.7-0.5,1.1-0.3S319.2,129.2,318.9,129.6z M325,140.9c-0.4,0.2-0.9,0.1-1.1-0.3
c-0.2-0.4-0.1-0.9,0.3-1.1c0.4-0.2,0.9-0.1,1.1,0.3C325.5,140.1,325.4,140.6,325,140.9z M337.2,141c-0.5,0-0.8-0.4-0.8-0.8
c0-0.5,0.4-0.8,0.8-0.8c0.5,0,0.8,0.4,0.8,0.8S337.7,141,337.2,141z M344.2,129.6c-0.2,0.4-0.7,0.5-1.1,0.3
c-0.4-0.2-0.5-0.7-0.3-1.1c0.2-0.4,0.7-0.5,1.1-0.3S344.5,129.2,344.2,129.6z"/>
<g>
<g>
<path class="st1" d="M326.7,148.4c-0.5,0-0.9,0.2-1.2,0.5s-0.4,0.8-0.4,1.3c0,0.6,0.1,1,0.4,1.3c0.3,0.3,0.7,0.5,1.2,0.5
c0.3,0,0.7,0,0.9-0.1v0.2c-0.3,0.1-0.6,0.1-1,0.1c-0.6,0-1-0.2-1.3-0.6c-0.3-0.4-0.5-0.9-0.5-1.5c0-0.4,0.1-0.8,0.2-1.1
c0.2-0.3,0.4-0.6,0.7-0.7c0.3-0.2,0.6-0.3,1-0.3s0.7,0.1,1.1,0.2l-0.1,0.3C327.4,148.4,327,148.4,326.7,148.4"/>
</g>
<rect x="328.4" y="147.9" class="st1" width="0.3" height="4.3"/>
<g>
<path class="st1" d="M329.7,150.7c0,0.4,0.1,0.7,0.3,1c0.2,0.2,0.4,0.3,0.8,0.3c0.3,0,0.6-0.1,0.8-0.3s0.3-0.6,0.3-1
s-0.1-0.7-0.3-1c-0.2-0.2-0.4-0.3-0.8-0.3c-0.3,0-0.6,0.1-0.8,0.3C329.8,150,329.7,150.3,329.7,150.7 M332.1,150.7
c0,0.5-0.1,0.9-0.4,1.2c-0.2,0.3-0.6,0.4-1,0.4c-0.3,0-0.5-0.1-0.7-0.2c-0.2-0.1-0.4-0.3-0.5-0.5s-0.2-0.5-0.2-0.8
c0-0.5,0.1-0.9,0.4-1.1c0.2-0.3,0.6-0.4,1-0.4s0.7,0.1,1,0.4C332,149.8,332.1,150.2,332.1,150.7"/>
<path class="st1" d="M333.1,149.2v2c0,0.3,0.1,0.5,0.2,0.7c0.1,0.1,0.3,0.2,0.6,0.2c0.4,0,0.6-0.1,0.8-0.3s0.3-0.5,0.3-0.9v-1.7
h0.3v3h-0.2v-0.4l0,0c-0.2,0.3-0.5,0.5-1,0.5c-0.7,0-1-0.4-1-1.1L333.1,149.2L333.1,149.2z"/>
<path class="st1" d="M337.3,149.4c-0.3,0-0.6,0.1-0.7,0.3c-0.2,0.2-0.2,0.6-0.2,1c0,0.9,0.3,1.3,1,1.3c0.3,0,0.6-0.1,0.7-0.3
c0.2-0.2,0.2-0.5,0.2-1l0,0c0-0.5-0.1-0.8-0.2-1C337.9,149.5,337.6,149.4,337.3,149.4 M337.3,149.1c0.2,0,0.4,0,0.6,0.1
c0.2,0.1,0.3,0.2,0.4,0.4l0,0c0-0.2,0-0.5,0-0.7v-1.1h0.3v4.3h-0.2l-0.1-0.5l0,0c-0.2,0.3-0.6,0.5-1,0.5s-0.7-0.1-1-0.4
c-0.2-0.3-0.3-0.6-0.3-1.1s0.1-0.9,0.3-1.2C336.6,149.3,336.9,149.1,337.3,149.1"/>
<path class="st1" d="M341.3,150.3h0.6c0.5,0,0.8-0.1,1-0.2c0.2-0.2,0.3-0.4,0.3-0.7s-0.1-0.5-0.3-0.7s-0.5-0.2-0.9-0.2h-0.7
L341.3,150.3L341.3,150.3z M343.4,149.3c0,0.4-0.1,0.7-0.4,0.9c-0.3,0.2-0.6,0.3-1.1,0.3h-0.6v1.7H341v-4.1h1
C343,148.2,343.4,148.5,343.4,149.3"/>
</g>
<rect x="344.2" y="147.9" class="st1" width="0.3" height="4.3"/>
<path class="st1" d="M346.1,152c0.3,0,0.6-0.1,0.8-0.3s0.3-0.4,0.3-0.8v-0.3h-0.5c-0.4,0-0.7,0.1-0.9,0.2
c-0.2,0.1-0.3,0.3-0.3,0.5s0.1,0.3,0.2,0.4C345.8,152,345.9,152,346.1,152 M347.2,152.2l-0.1-0.5l0,0c-0.2,0.2-0.3,0.3-0.5,0.4
c-0.2,0.1-0.3,0.1-0.6,0.1s-0.5-0.1-0.7-0.2c-0.2-0.2-0.2-0.4-0.2-0.6c0-0.3,0.1-0.5,0.4-0.7c0.2-0.2,0.6-0.2,1.1-0.3h0.6v-0.2
c0-0.3-0.1-0.5-0.2-0.6c-0.1-0.1-0.3-0.2-0.6-0.2s-0.6,0.1-0.9,0.2l-0.1-0.2c0.3-0.2,0.7-0.2,1-0.2s0.6,0.1,0.7,0.3
c0.2,0.2,0.2,0.4,0.2,0.8v2h-0.1V152.2z"/>
<path class="st1" d="M349.2,152c0.2,0,0.3,0,0.5,0v0.2c-0.1,0-0.3,0.1-0.5,0.1c-0.3,0-0.5-0.1-0.6-0.2c-0.1-0.1-0.2-0.4-0.2-0.7
v-1.9H348v-0.2l0.4-0.1l0.1-0.7h0.1v0.7h0.9v0.2h-0.9v1.9c0,0.2,0,0.4,0.1,0.5C348.9,152,349,152,349.2,152"/>
<path class="st1" d="M351.3,149.4h-0.7v2.8h-0.3v-2.8h-0.5v-0.2l0.6-0.1v-0.2c0-0.4,0.1-0.6,0.2-0.8c0.1-0.2,0.4-0.3,0.7-0.3
c0.2,0,0.3,0,0.5,0.1l-0.1,0.2c-0.1,0-0.3-0.1-0.4-0.1c-0.2,0-0.4,0.1-0.5,0.2c-0.1,0.1-0.1,0.3-0.1,0.6v0.3h0.7v0.3H351.3z"/>
<path class="st1" d="M352,150.7c0,0.4,0.1,0.7,0.3,1c0.2,0.2,0.4,0.3,0.8,0.3c0.3,0,0.6-0.1,0.8-0.3s0.3-0.6,0.3-1s-0.1-0.7-0.3-1
c-0.2-0.2-0.4-0.3-0.8-0.3c-0.3,0-0.6,0.1-0.8,0.3C352.1,150,352,150.3,352,150.7 M354.4,150.7c0,0.5-0.1,0.9-0.4,1.2
c-0.2,0.3-0.6,0.4-1,0.4c-0.3,0-0.5-0.1-0.7-0.2c-0.2-0.1-0.4-0.3-0.5-0.5s-0.2-0.5-0.2-0.8c0-0.5,0.1-0.9,0.4-1.1
c0.2-0.3,0.6-0.4,1-0.4s0.7,0.1,1,0.4C354.2,149.8,354.4,150.2,354.4,150.7"/>
<path class="st1" d="M356.3,149.1c0.1,0,0.3,0,0.4,0l-0.1,0.3c-0.1,0-0.3,0-0.4,0c-0.3,0-0.5,0.1-0.6,0.3
c-0.2,0.2-0.2,0.5-0.2,0.8v1.7h-0.3v-3h0.2v0.5l0,0c0.1-0.2,0.3-0.4,0.4-0.5C355.9,149.2,356.1,149.1,356.3,149.1"/>
<path class="st1" d="M361.1,152.2v-2c0-0.3-0.1-0.5-0.2-0.6c-0.1-0.1-0.3-0.2-0.5-0.2c-0.3,0-0.5,0.1-0.7,0.3
c-0.1,0.2-0.2,0.4-0.2,0.8v1.8h-0.3v-2.1c0-0.5-0.2-0.8-0.7-0.8c-0.3,0-0.5,0.1-0.7,0.3c-0.1,0.2-0.2,0.5-0.2,0.9v1.7h-0.3v-3h0.2
l0.1,0.4l0,0c0.1-0.1,0.2-0.3,0.4-0.3c0.2-0.1,0.3-0.1,0.5-0.1c0.5,0,0.8,0.2,0.9,0.5l0,0c0.1-0.2,0.2-0.3,0.4-0.4
c0.2-0.1,0.4-0.1,0.6-0.1c0.3,0,0.6,0.1,0.7,0.3c0.2,0.2,0.2,0.5,0.2,0.8v2h-0.2V152.2z"/>
<path class="st1" d="M316.4,151c0.2-0.2,0.2-0.4,0.2-0.5c0-0.5-0.3-1.4-0.9-1.4c-0.2,0-0.4,0.1-0.5,0.2c-0.1,0.2-0.2,0.4-0.2,0.6
c0,0.5,0.3,1.3,0.9,1.3C316,151.3,316.2,151.2,316.4,151 M316.2,152.5c-0.1,0-0.1,0-0.2,0c-0.1,0-0.5,0-0.8,0.1
c-0.2,0.1-0.6,0.2-0.6,0.8c0,0.5,0.5,0.9,1.3,0.9c0.7,0,1.1-0.3,1.1-0.8C317,153.1,316.7,152.9,316.2,152.5 M316.7,149.1
c0.2,0.1,0.5,0.4,0.5,1s-0.3,0.8-0.6,1.1c-0.1,0.1-0.2,0.2-0.2,0.4s0.1,0.3,0.2,0.3l0.3,0.2c0.3,0.3,0.6,0.5,0.6,1
c0,0.7-0.7,1.4-2,1.4c-1.1,0-1.6-0.5-1.6-1.1c0-0.3,0.1-0.6,0.6-0.9c0.5-0.3,1.1-0.3,1.4-0.3c-0.1-0.1-0.2-0.3-0.2-0.5
c0-0.1,0-0.2,0.1-0.3c-0.1,0-0.2,0-0.2,0c-0.8,0-1.2-0.6-1.2-1.2c0-0.3,0.2-0.7,0.5-1c0.4-0.4,0.9-0.4,1.3-0.4h1.5l-0.5,0.3H316.7
z"/>
<path class="st1" d="M312.9,151.7c0.2-0.2,0.2-0.5,0.2-0.8c0-0.7-0.3-1.9-1.2-1.9c-0.2,0-0.5,0.1-0.7,0.3
c-0.3,0.3-0.3,0.6-0.3,0.9c0,0.7,0.4,2,1.3,2C312.5,152.1,312.8,152,312.9,151.7 M312,152.3c-1.2,0-1.8-0.9-1.8-1.8
c0-1,0.8-1.8,1.9-1.8c1.1,0,1.8,0.9,1.8,1.8C313.9,151.4,313.2,152.3,312,152.3"/>
<path class="st1" d="M308.9,151.7c0.2-0.2,0.2-0.5,0.2-0.8c0-0.7-0.3-1.9-1.2-1.9c-0.2,0-0.5,0.1-0.7,0.3
c-0.3,0.3-0.3,0.6-0.3,0.9c0,0.7,0.4,2,1.3,2C308.4,152.1,308.7,152,308.9,151.7 M308,152.3c-1.2,0-1.8-0.9-1.8-1.8
c0-1,0.8-1.8,1.9-1.8c1.1,0,1.8,0.9,1.8,1.8C309.9,151.4,309.2,152.3,308,152.3"/>
<path class="st1" d="M319,152c-0.2,0-0.3-0.1-0.3-0.4v-0.1v-4.2l0,0c0-0.3,0.1-0.3,0.3-0.4h-1.1l-0.6,0.3h0.6l0,0l0,0v4.4v0.2
c0,0.2,0,0.2-0.2,0.4h1.3l0.3-0.2C319.3,152,319.2,152,319,152"/>
<path class="st1" d="M321.4,149.9c0.1-0.1,0.2-0.1,0.2-0.2c0-0.3-0.3-0.6-0.7-0.6c-0.3,0-0.9,0.2-0.9,1c0,0.1,0,0.3,0,0.4
L321.4,149.9z M322.1,152.1c-0.1,0-0.2,0.1-0.2,0.1c-0.2,0.1-0.5,0.1-0.7,0.1s-0.6,0-1-0.3c-0.5-0.4-0.8-1-0.8-1.6
c0-1.2,0.9-1.7,1.7-1.7c0.3,0,0.5,0.1,0.8,0.2c0.4,0.2,0.5,0.6,0.5,0.7l-1.7,0.7h-0.6c0.2,0.9,0.8,1.5,1.5,1.5
c0.4,0,0.7-0.1,0.9-0.3L322.1,152.1z"/>
<path class="st1" d="M305.6,152.2l-1.1,0.2c-0.4,0.1-0.8,0.1-1.2,0.1c-2.1,0-2.8-1.5-2.8-2.7c0-1.5,1.1-2.8,3-2.8
c0.4,0,0.8,0.1,1.1,0.2c0.6,0.2,0.8,0.4,1,0.5l-0.6,0.6l-0.3,0.1l0.2-0.3c-0.3-0.2-0.7-0.7-1.6-0.7c-1.2,0-2.1,0.9-2.1,2.2
c0,1.4,1,2.7,2.6,2.7c0.5,0,0.7-0.1,0.9-0.2v-1.2l-1.1,0.1l0.6-0.3h1.6l-0.2,0.2c-0.1,0-0.1,0.1-0.1,0.1c0,0.1,0,0.3,0,0.4
L305.6,152.2L305.6,152.2z"/>
</g>
</g>
<g>
<path id="path4_5_" class="st1" d="M485.7,120.5l10-1.4v9.6l-10,0.1V120.5z M495.7,129.9v9.7l-10-1.4v-8.3H495.7z M496.9,119
l13.3-1.9v11.6l-13.3,0.1V119z M510.1,130v11.6l-13.3-1.9V130L510.1,130z"/>
<g>
<path id="svg_1_5_" class="st1" d="M476.2,151.7h-0.7v-4.1c0-0.3,0-0.7,0-1.2l0,0c-0.1,0.3-0.1,0.5-0.2,0.6l-2.1,4.6h-0.3l-2-4.6
c-0.1-0.1-0.1-0.3-0.2-0.6l0,0c0,0.2,0,0.6,0,1.2v4.1H470v-6h0.9l1.8,4.2c0.1,0.3,0.2,0.6,0.3,0.7l0,0c0.1-0.3,0.2-0.6,0.3-0.8
l1.9-4.2h0.9L476.2,151.7L476.2,151.7z"/>
<path id="svg_2_5_" class="st1" d="M477.9,146.3c-0.1,0-0.2,0-0.3-0.1s-0.1-0.2-0.1-0.3s0-0.2,0.1-0.3s0.2-0.1,0.3-0.1
s0.2,0,0.3,0.1s0.1,0.2,0.1,0.3s0,0.2-0.1,0.3S478,146.3,477.9,146.3z M478.2,151.7h-0.7v-4.3h0.7V151.7z"/>
<path id="svg_3_5_" class="st1" d="M482.3,151.5c-0.3,0.2-0.7,0.3-1.2,0.3c-0.6,0-1.1-0.2-1.5-0.6c-0.4-0.4-0.6-0.9-0.6-1.6
c0-0.7,0.2-1.3,0.6-1.7c0.5-0.4,1-0.6,1.7-0.6c0.4,0,0.7,0.1,1,0.2v0.7c-0.3-0.2-0.6-0.3-1-0.3s-0.8,0.2-1.1,0.5s-0.4,0.7-0.4,1.2
s0.1,0.9,0.4,1.2c0.3,0.3,0.6,0.4,1.1,0.4c0.4,0,0.7-0.1,1.1-0.4L482.3,151.5L482.3,151.5z"/>
<path id="svg_4_5_" class="st1" d="M485.4,148.1c-0.1-0.1-0.3-0.1-0.5-0.1c-0.3,0-0.5,0.1-0.8,0.4c-0.2,0.3-0.3,0.6-0.3,1.1v2.2
h-0.7v-4.3h0.7v0.9l0,0c0.1-0.3,0.2-0.5,0.4-0.7s0.4-0.2,0.7-0.2c0.2,0,0.3,0,0.4,0.1L485.4,148.1L485.4,148.1z"/>
<path id="svg_5_5_" class="st1" d="M487.6,151.8c-0.6,0-1.2-0.2-1.5-0.6s-0.6-0.9-0.6-1.6c0-0.7,0.2-1.3,0.6-1.7s1-0.6,1.6-0.6
s1.2,0.2,1.5,0.6c0.4,0.4,0.5,1,0.5,1.6s-0.2,1.2-0.6,1.6C488.8,151.6,488.3,151.8,487.6,151.8z M487.7,147.9
c-0.4,0-0.8,0.1-1.1,0.4s-0.4,0.7-0.4,1.3c0,0.5,0.1,0.9,0.4,1.2c0.3,0.3,0.6,0.4,1.1,0.4s0.8-0.1,1-0.4c0.2-0.3,0.4-0.7,0.4-1.2
s-0.1-1-0.4-1.2C488.5,148,488.1,147.9,487.7,147.9z"/>
<path id="svg_6_5_" class="st1" d="M490.4,151.6v-0.8c0.4,0.3,0.8,0.4,1.2,0.4c0.6,0,0.9-0.2,0.9-0.6c0-0.1,0-0.2-0.1-0.3
s-0.1-0.1-0.2-0.2c-0.1-0.1-0.2-0.1-0.3-0.2c-0.1,0-0.2-0.1-0.4-0.1c-0.2-0.1-0.3-0.1-0.5-0.2c-0.1-0.1-0.3-0.2-0.4-0.3
c-0.1-0.1-0.2-0.2-0.2-0.3s-0.1-0.3-0.1-0.4c0-0.2,0-0.4,0.1-0.5s0.2-0.2,0.3-0.3c0.2-0.1,0.3-0.2,0.5-0.2
c0.2-0.1,0.4-0.1,0.6-0.1c0.4,0,0.7,0.1,1,0.2v0.7c-0.3-0.2-0.7-0.3-1.1-0.3c-0.1,0-0.2,0-0.3,0s-0.2,0.1-0.3,0.1
s-0.1,0.1-0.2,0.2c0,0.1-0.1,0.2-0.1,0.2c0,0.1,0,0.2,0.1,0.3s0.1,0.1,0.2,0.2s0.2,0.1,0.3,0.2c0.1,0,0.2,0.1,0.4,0.2
c0.2,0.1,0.4,0.1,0.5,0.2c0.1,0.1,0.3,0.2,0.4,0.3c0.1,0.1,0.2,0.2,0.2,0.3c0.1,0.1,0.1,0.3,0.1,0.4c0,0.2,0,0.4-0.1,0.5
c-0.1,0.2-0.2,0.3-0.4,0.4c-0.2,0.1-0.3,0.2-0.5,0.2s-0.4,0.1-0.6,0.1C491.1,151.8,490.7,151.7,490.4,151.6z"/>
<path id="svg_7_5_" class="st1" d="M495.9,151.8c-0.6,0-1.2-0.2-1.5-0.6s-0.6-0.9-0.6-1.6c0-0.7,0.2-1.3,0.6-1.7
c0.4-0.4,1-0.6,1.6-0.6s1.2,0.2,1.5,0.6c0.4,0.4,0.5,1,0.5,1.6s-0.2,1.2-0.6,1.6C497.1,151.6,496.5,151.8,495.9,151.8z
M495.9,147.9c-0.4,0-0.8,0.1-1.1,0.4s-0.4,0.7-0.4,1.3c0,0.5,0.1,0.9,0.4,1.2c0.3,0.3,0.6,0.4,1.1,0.4s0.8-0.1,1-0.4
c0.2-0.3,0.4-0.7,0.4-1.2s-0.1-1-0.4-1.2C496.7,148,496.4,147.9,495.9,147.9z"/>
<path id="svg_8_5_" class="st1" d="M503.4,148v-0.6h-1.1v-1.3l-0.7,0.2v1.1h-0.9h-0.5h-0.4v-0.7c0-0.6,0.2-0.9,0.7-0.9
c0.2,0,0.3,0,0.4,0.1v-0.6c-0.1,0-0.3-0.1-0.5-0.1c-0.4,0-0.7,0.1-1,0.4s-0.4,0.6-0.4,1.1v0.7h-0.8v0.6h0.8v3.8h0.7V148h0.5h0.5
h0.9v2.6c0,0.9,0.4,1.3,1.1,1.3c0.3,0,0.5,0,0.6-0.1v-0.6c-0.1,0.1-0.3,0.1-0.4,0.1c-0.2,0-0.4-0.1-0.5-0.2
c-0.1-0.1-0.1-0.3-0.1-0.6V148H503.4z"/>
<path id="svg_9_5_" class="st1" d="M511,151.7h-0.8l-0.6-1.7H507l-0.6,1.7h-0.8l2.4-6h0.7L511,151.7z M509.4,149.4l-1-2.6
c0-0.1-0.1-0.2-0.1-0.4l0,0c0,0.2-0.1,0.3-0.1,0.4l-0.9,2.6H509.4z"/>
<path id="svg_10_5_" class="st1" d="M514.6,147.6l-2.6,3.5h2.5v0.6H511v-0.2l2.6-3.5h-2.3v-0.6h3.3V147.6L514.6,147.6z"/>
<path id="svg_11_5_" class="st1" d="M518.8,151.7h-0.7V151l0,0c-0.3,0.5-0.7,0.8-1.3,0.8c-1,0-1.5-0.6-1.5-1.8v-2.6h0.7v2.5
c0,0.9,0.3,1.4,1.1,1.4c0.3,0,0.6-0.1,0.8-0.4c0.2-0.2,0.3-0.6,0.3-1v-2.5h0.7L518.8,151.7L518.8,151.7z"/>
<path id="svg_12_5_" class="st1" d="M522.2,148.1c-0.1-0.1-0.3-0.1-0.5-0.1c-0.3,0-0.5,0.1-0.8,0.4c-0.2,0.3-0.3,0.6-0.3,1.1v2.2
h-0.7v-4.3h0.7v0.9l0,0c0.1-0.3,0.2-0.5,0.4-0.7s0.4-0.2,0.7-0.2c0.2,0,0.3,0,0.4,0.1L522.2,148.1L522.2,148.1L522.2,148.1z"/>
<path id="svg_13_5_" class="st1" d="M526.1,149.7h-3c0,0.5,0.1,0.9,0.4,1.1c0.2,0.3,0.6,0.4,1,0.4c0.5,0,0.9-0.2,1.3-0.5v0.6
c-0.4,0.3-0.9,0.4-1.5,0.4s-1.1-0.2-1.4-0.6c-0.3-0.4-0.5-1-0.5-1.6s0.2-1.2,0.6-1.6s0.9-0.6,1.4-0.6s1,0.2,1.3,0.5
c0.3,0.4,0.5,0.9,0.5,1.5L526.1,149.7L526.1,149.7z M525.4,149.1c0-0.4-0.1-0.7-0.3-0.9s-0.4-0.3-0.8-0.3c-0.3,0-0.6,0.1-0.8,0.3
s-0.4,0.5-0.4,0.9H525.4z"/>
</g>
</g>
<g>
<g>
<g>
<rect x="457.1" y="214.2" class="st1" width="5.4" height="0.9"/>
<rect x="449.2" y="214.2" class="st1" width="5.4" height="0.9"/>
<path class="st1" d="M455.9,213.9c-0.4,0-0.8,0.4-0.8,0.8s0.4,0.8,0.8,0.8c0.4,0,0.8-0.4,0.8-0.8S456.3,213.9,455.9,213.9z
M455.9,216.4c-0.9,0-1.7-0.7-1.7-1.7c0-0.9,0.7-1.7,1.7-1.7c0.9,0,1.7,0.7,1.7,1.7C457.6,215.6,456.8,216.4,455.9,216.4z"/>
<rect x="455.4" y="211.2" class="st1" width="0.9" height="2.2"/>
<g>
<rect x="450.5" y="198.5" class="st1" width="0.9" height="1.1"/>
<rect x="452.2" y="198.5" class="st1" width="0.9" height="1.1"/>
<rect x="457.3" y="198.6" class="st1" width="3.4" height="0.9"/>
</g>
<g>
<rect x="450.5" y="203.3" class="st1" width="0.9" height="1.1"/>
<rect x="452.2" y="203.3" class="st1" width="0.9" height="1.1"/>
<rect x="457.3" y="203.3" class="st1" width="3.4" height="0.9"/>
</g>
<g>
<rect x="450.5" y="208.1" class="st1" width="0.9" height="1.1"/>
<rect x="452.2" y="208.1" class="st1" width="0.9" height="1.1"/>
<rect x="457.3" y="208.2" class="st1" width="3.4" height="0.9"/>
</g>
<rect x="447.7" y="196.7" class="st11" width="16.2" height="4.8"/>
<rect x="447.7" y="201.4" class="st11" width="16.2" height="4.8"/>
<rect x="447.7" y="206.3" class="st11" width="16.2" height="4.8"/>
</g>
<g>
<g>
<path class="st1" d="M436.3,225.5h1.4c0.6,0,1.1,0.1,1.4,0.3c0.3,0.2,0.4,0.5,0.4,0.9c0,0.3-0.1,0.5-0.2,0.7s-0.3,0.3-0.6,0.3
l0,0c0.3,0.1,0.6,0.2,0.7,0.4c0.2,0.2,0.2,0.4,0.2,0.7c0,0.4-0.1,0.7-0.4,1c-0.3,0.2-0.7,0.3-1.2,0.3h-1.7L436.3,225.5
L436.3,225.5z M437.1,227.4h0.7c0.3,0,0.5,0,0.7-0.1c0.1-0.1,0.2-0.3,0.2-0.5s-0.1-0.4-0.2-0.5c-0.2-0.1-0.4-0.1-0.7-0.1h-0.6
v1.2H437.1z M437.1,228v1.5h0.8c0.3,0,0.6-0.1,0.7-0.2c0.2-0.1,0.2-0.3,0.2-0.6c0-0.2-0.1-0.4-0.2-0.5c-0.2-0.1-0.4-0.2-0.7-0.2
H437.1z"/>
<path class="st1" d="M443.7,230.1l-0.5-1.3h-1.8l-0.4,1.3h-0.8l1.7-4.6h0.8l1.7,4.6H443.7z M443.1,228.2l-0.4-1.2
c0-0.1-0.1-0.2-0.1-0.4s-0.1-0.3-0.1-0.4c-0.1,0.3-0.1,0.5-0.2,0.8l-0.4,1.2L443.1,228.2L443.1,228.2z"/>
<path class="st1" d="M446.2,228.2v1.8h-0.8v-4.6h1.3c0.6,0,1,0.1,1.3,0.3s0.4,0.6,0.4,1c0,0.6-0.3,1-0.9,1.2l1.3,2h-0.9
l-1.1-1.8h-0.6V228.2z M446.2,227.6h0.5c0.3,0,0.6-0.1,0.8-0.2s0.2-0.3,0.2-0.6s-0.1-0.4-0.3-0.6c-0.2-0.1-0.4-0.2-0.8-0.2h-0.5
L446.2,227.6L446.2,227.6z"/>
<path class="st1" d="M452.5,230.1h-2.6v-4.6h2.6v0.6h-1.8v1.2h1.7v0.6h-1.7v1.4h1.8V230.1z"/>
<path class="st1" d="M455.8,230.1l-1.3-3.8l0,0c0,0.6,0.1,1.1,0.1,1.6v2.2h-0.8v-4.6h1.1l1.3,3.6l0,0l1.3-3.6h1.1v4.6h-0.8v-2.3
c0-0.2,0-0.5,0-0.9s0-0.6,0-0.7l0,0l-1.4,3.8L455.8,230.1L455.8,230.1z"/>
<path class="st1" d="M462.6,230.1H460v-4.6h2.6v0.6h-1.8v1.2h1.7v0.6h-1.7v1.4h1.8V230.1z"/>
<path class="st1" d="M465.5,230.1h-0.7v-3.9h-1.3v-0.6h3.4v0.6h-1.3v3.9H465.5z"/>
<path class="st1" d="M470.7,230.1l-0.5-1.3h-1.8l-0.4,1.3h-0.8l1.7-4.6h0.8l1.7,4.6H470.7z M470.1,228.2l-0.4-1.2
c0-0.1-0.1-0.2-0.1-0.4s-0.1-0.3-0.1-0.4c-0.1,0.3-0.1,0.5-0.2,0.8l-0.4,1.2L470.1,228.2L470.1,228.2z"/>
<path class="st1" d="M472.5,230.1v-4.6h0.8v3.9h1.9v0.6h-2.7V230.1z"/>
</g>
</g>
</g>
</g>
<g>
<g>
<path class="st1" d="M357.9,227.8c0,2.2-1.1,2.9-2,2.9c-1.1,0-2-0.9-2-2.9s1-2.9,2-2.9C357,224.9,357.9,225.8,357.9,227.8z
M354.9,227.8c0,0.9,0.2,2.2,1.1,2.2c0.8,0,1-1.3,1-2.2s-0.2-2.2-1-2.2C355,225.6,354.9,226.9,354.9,227.8z"/>
<path class="st1" d="M359,226.7c0-0.9,0-1.4-0.1-1.8h0.9l0.1,0.7l0,0c0.3-0.6,0.8-0.8,1.3-0.8c1.1,0,1.8,1,1.8,2.9
c0,2.1-0.9,2.9-1.9,2.9c-0.6,0-0.9-0.3-1.1-0.7l0,0v2.8h-1V226.7z M359.9,228.5c0,0.2,0,0.3,0.1,0.5c0.2,0.8,0.6,0.9,0.9,0.9
c0.8,0,1.1-1,1.1-2.1c0-1.2-0.3-2.1-1.1-2.1c-0.4,0-0.8,0.5-0.9,1c0,0.1,0,0.3,0,0.4L359.9,228.5L359.9,228.5z"/>
<path class="st1" d="M364.7,227.9c0,1.7,0.7,2.1,1.4,2.1c0.4,0,0.8-0.1,1-0.2l0.2,0.6c-0.3,0.2-0.9,0.3-1.3,0.3
c-1.5,0-2.2-1.1-2.2-2.8c0-1.8,0.8-2.9,2.1-2.9c1.2,0,1.7,1.2,1.7,2.5c0,0.2,0,0.4,0,0.5h-2.9V227.9z M366.6,227.2
c0-1.1-0.4-1.6-0.9-1.6c-0.6,0-1,0.8-1,1.6H366.6z"/>
<path class="st1" d="M368.5,226.4c0-0.7,0-1-0.1-1.4h0.8l0.1,0.7l0,0c0.3-0.5,0.8-0.8,1.4-0.8c0.8,0,1.5,0.6,1.5,1.9v3.8h-1V227
c0-0.7-0.1-1.3-0.8-1.3c-0.4,0-0.8,0.3-0.9,0.9c0,0.1,0,0.3,0,0.5v3.5h-1V226.4z"/>
<path class="st1" d="M373.5,229.7c0.2,0.1,0.6,0.3,1,0.3c0.5,0,0.9-0.3,0.9-0.8c0-0.4-0.2-0.7-0.8-1.1c-0.8-0.5-1.2-1-1.2-1.6
c0-0.9,0.7-1.6,1.7-1.6c0.5,0,0.8,0.2,1.1,0.3l-0.3,0.7c-0.2-0.2-0.5-0.3-0.8-0.3c-0.5,0-0.8,0.3-0.8,0.7s0.2,0.6,0.8,1
c0.7,0.4,1.3,0.9,1.3,1.7c0,1.1-0.8,1.7-1.8,1.7c-0.4,0-0.9-0.1-1.2-0.3L373.5,229.7z"/>
<path class="st1" d="M378.4,223.7v1.3h1.2v0.7h-1.2v3.3c0,0.7,0.3,0.9,0.6,0.9c0.2,0,0.3,0,0.4,0l0.1,0.7
c-0.2,0.1-0.4,0.1-0.7,0.1c-0.4,0-0.7-0.1-1-0.3c-0.3-0.3-0.4-0.6-0.4-1.4v-3.3h-0.7V225h0.7v-1L378.4,223.7z"/>
<path class="st1" d="M383.7,229.3c0,0.4,0,0.9,0.1,1.3h-0.9l-0.1-0.6l0,0c-0.3,0.4-0.7,0.7-1.2,0.7c-0.8,0-1.4-0.6-1.4-1.6
c0-1.4,1.2-2,2.6-2v-0.2c0-0.8-0.2-1.3-1-1.3c-0.4,0-0.7,0.1-1,0.3l-0.2-0.6c0.3-0.2,0.8-0.4,1.4-0.4c1.2,0,1.7,0.7,1.7,2
L383.7,229.3L383.7,229.3z M382.7,227.7c-0.5,0-1.7,0.1-1.7,1.3c0,0.7,0.4,1,0.7,1c0.4,0,0.8-0.3,0.9-0.8c0-0.1,0-0.2,0-0.3
L382.7,227.7L382.7,227.7z"/>
<path class="st1" d="M388,230.4c-0.2,0.1-0.6,0.2-1,0.2c-1.3,0-2.2-1-2.2-2.8c0-1.6,0.9-2.9,2.4-2.9c0.3,0,0.7,0.1,0.9,0.2
l-0.2,0.7c-0.1-0.1-0.4-0.2-0.7-0.2c-1,0-1.4,1.1-1.4,2.2c0,1.3,0.5,2.1,1.4,2.1c0.3,0,0.5,0,0.7-0.2L388,230.4z"/>
<path class="st1" d="M389.8,227.6L389.8,227.6c0.1-0.2,0.2-0.4,0.4-0.6l1.2-2h1l-1.6,2.4l1.8,3.2h-1.1l-1.3-2.6l-0.4,0.5v2.1h-1
v-8h1L389.8,227.6L389.8,227.6z"/>
</g>
<g>
<path class="st1" d="M358.5,200.9l3.5,3.2c0.1-0.1,0.2-0.1,0.3-0.2l0.7-0.1l1.3-0.1l1.3-0.1l0.7-0.1c0.2,0.1,0.5,0.2,0.7,0.3
l-1.2-1.1l1.2-0.1v-1c0-0.5,0.4-0.9,0.9-0.9l10.2-0.9v7.7l1.1,1.1l-0.8,0.1l3.1,3.1l4.9-0.4l-0.8-0.8l1.1-0.1v-8.3
c-0.2,0.2-0.4,0.3-0.6,0.4l-0.7,0.1l-1.3,0.1l-1.3,0.1l-0.7,0.1c-0.1,0-0.2-0.1-0.3-0.1l-0.3-0.1c0,0-0.1,0-0.1-0.1l0,0l-3.1-2.8
h0.5l2.9,2.7c0.1-0.1,0.2-0.1,0.3-0.2l0.7-0.1l1.3-0.1l1.3-0.1l0.7-0.1c0.2,0.1,0.5,0.2,0.7,0.3l-1.1-1.1l1.2-0.1v-5.5
c-0.1-0.5-0.4-1-0.9-1.2c-0.2-0.1-0.5-0.1-0.7-0.1l-0.8,0.2l-3.2,0.3l-6.5,0.6l-6.5,0.6l-3.2,0.3h-1.6c-0.5,0-1,0.3-1.3,0.7
c0.2-0.5,0.7-0.9,1.3-1.1l1.6-0.3l3.2-0.3l6.5-0.6l6.5-0.6l3.2-0.3h0.8c0.2,0,0.4,0,0.5,0.1l-2.8-2.8c0,0,0,0-0.1-0.1l0,0l0,0l0,0
l0,0c0,0,0,0-0.1,0l0,0l0,0l0,0c0,0-0.1,0-0.1-0.1l0,0l0,0l0,0h-0.1c0,0,0,0-0.1,0l0,0l0,0h-0.1l0,0l0,0l0,0c0,0,0,0-0.1,0
c0,0,0,0-0.1,0l0,0l0,0H382l0,0l0,0l0,0h-0.1c0,0,0,0-0.1,0l-21.7,1.9H360c0,0,0,0-0.1,0s-0.2,0.1-0.4,0.1l0,0c0,0,0,0-0.1,0l0,0
h-0.1l0,0c-0.1,0-0.1,0.1-0.2,0.1l0,0c0,0-0.1,0-0.1,0.1l0,0l0,0l0,0l0,0l0,0l0,0c0,0,0,0-0.1,0.1l0,0l0,0l0,0c0,0,0,0-0.1,0.1
l0,0c0,0,0,0-0.1,0.1l0,0l0,0l0,0l0,0l0,0v0.1l0,0l0,0l0,0l0,0v0.1l0,0l0,0c0,0,0,0,0,0.1c0,0,0,0,0,0.1l0,0v0.1c0,0,0,0,0,0.1
l0,0l0,0v0.1v0.1l0,0v5.5l1.2,1.1L358.5,200.9z"/>
<path class="st1" d="M365.6,204.3l-1.3,0.1l-1.3,0.1l-0.7,0.1c-0.2-0.1-0.3-0.1-0.5-0.2l0,0l0,0c-0.1,0-0.1-0.1-0.2-0.1l0,0
l-3.5-3.2v8.1l1.1,1.1l-1,0.1l3.3,3.2v-0.1l5.6-0.5v1.6c0,0.1,0,0.2,0.1,0.3s0.2,0.1,0.3,0.1l12.9-1.1c0.3,0,0.5-0.3,0.5-0.6V212
l-3.1-3.1v1l0,0c0,0,0,0,0,0.1c0,0,0,0,0,0.1c0,0,0,0,0,0.1l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0l0,0
c0,0,0,0-0.1,0.1l0,0c0,0-0.1,0-0.1,0.1l0,0c-0.1,0-0.1,0.1-0.2,0.1h-0.1l0,0l-10.3,0.9v-7.8c-0.2,0.2-0.4,0.3-0.6,0.4
L365.6,204.3z"/>
<path class="st1" d="M381.8,212.4v0.9c0,0.7-0.5,1.2-1.2,1.3l-12.9,1.1h-0.1c-0.3,0-0.6-0.1-0.8-0.3s-0.4-0.5-0.4-0.9v-0.8
l-4.8,0.4l-3.5-3.4v5.3v0.1l0,0v0.1c0,0,0,0,0,0.1c0,0,0,0,0,0.1v0.1c0,0,0,0,0,0.1v0.1l0,0v0.1l0,0v0.1l0,0c0,0,0,0,0.1,0.1l0,0
l0.1,0.1l3.5,3.4l0,0l0.1,0.1l0,0l0.1,0.1l0,0c0,0,0.1,0,0.1,0.1l0,0c0,0,0.1,0,0.1,0.1l0,0h0.1l0,0h0.1l0,0h0.1l0,0
c0.1,0,0.1,0,0.2,0l21.7-1.9c0.9-0.1,1.7-0.9,1.7-1.8v-5.3L381.8,212.4z M361.7,219.6c0,0,0-0.1,0-0.2
C361.7,219.5,361.7,219.5,361.7,219.6L361.7,219.6z M361.7,219.7L361.7,219.7L361.7,219.7L361.7,219.7z M361.7,219.9
C361.7,219.8,361.7,219.8,361.7,219.9C361.7,219.8,361.7,219.8,361.7,219.9L361.7,219.9z M361.8,220L361.8,220L361.8,220
L361.8,220z M361.8,220.2C361.8,220.2,361.8,220.1,361.8,220.2C361.8,220.1,361.8,220.1,361.8,220.2
C361.8,220.1,361.8,220.1,361.8,220.2C361.8,220.1,361.8,220.2,361.8,220.2L361.8,220.2z M361.9,220.3L361.9,220.3
C361.9,220.2,361.9,220.2,361.9,220.3L361.9,220.3L361.9,220.3z M362,220.4L362,220.4L362,220.4L362,220.4L362,220.4z"/>
<path class="st1" d="M358.2,200.9L358.2,200.9L358.2,200.9z"/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 34 KiB

View File

@ -1,253 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 19.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 806 744" style="enable-background:new 0 0 806 744;" xml:space="preserve">
<style type="text/css">
.st0{fill:none;stroke:#E6E7E8;stroke-width:2;stroke-miterlimit:10;}
.st1{fill:url(#SVGID_1_);}
.st2{fill:url(#SVGID_2_);}
.st3{fill:#FFFFFF;stroke:#2A2733;stroke-width:1.5;stroke-miterlimit:10;}
.st4{fill:none;stroke:#2A2733;stroke-width:1.5;stroke-miterlimit:10;}
.st5{fill:#FFFFFF;}
.st6{fill:url(#SVGID_3_);}
.st7{fill:url(#SVGID_4_);}
.st8{fill:url(#SVGID_5_);}
.st9{fill:url(#SVGID_6_);}
.st10{fill:url(#SVGID_7_);}
.st11{fill:url(#SVGID_8_);}
.st12{fill:url(#SVGID_9_);}
.st13{fill:url(#SVGID_10_);}
.st14{fill:url(#SVGID_11_);}
.st15{fill:url(#SVGID_12_);}
.st16{fill:url(#SVGID_13_);}
.st17{fill:url(#SVGID_14_);}
.st18{fill:url(#SVGID_15_);}
.st19{fill:url(#SVGID_16_);}
.st20{fill:url(#SVGID_17_);}
.st21{fill:url(#SVGID_18_);}
.st22{fill:url(#SVGID_19_);}
.st23{fill:url(#SVGID_20_);}
.st24{fill:url(#SVGID_21_);}
</style>
<g>
<polygon class="st0" points="253.1,449.1 253.1,387 300.7,363.1 348.2,387 348.2,449.1 300.7,472.9 "/>
<polygon class="st0" points="401.8,472.9 354.2,449.1 354.2,387 401.8,363.1 449.4,387 449.4,449.1 "/>
<polygon class="st0" points="661.7,110.9 614.1,87.1 614.1,25 661.7,1.1 709.2,25 709.2,87.1 "/>
<polygon class="st0" points="250.7,562.9 203.1,539.1 203.1,477 250.7,453.1 298.2,477 298.2,539.1 "/>
<polygon class="st0" points="451.7,562.9 404.1,539.1 404.1,477 451.7,453.1 499.2,477 499.2,539.1 "/>
<polygon class="st0" points="153.1,629.1 153.1,567 167.5,559.7 200.7,543.1 248.2,567 248.2,629.1 200.7,652.9 "/>
<polygon class="st0" points="300.7,652.9 253.1,629.1 253.1,567 300.7,543.1 348.2,567 348.2,629.1 "/>
<polygon class="st0" points="150.7,742.9 103.1,719.1 103.1,657 150.7,633.1 198.2,657 198.2,719.1 "/>
<polygon class="st0" points="50.6,742.9 3,719.1 3,657 50.6,633.1 98.1,657 98.1,719.1 "/>
<polygon class="st0" points="149.7,563.9 102.1,540.1 102.1,478 149.7,454.1 197.2,478 197.2,540.1 "/>
<polygon class="st0" points="250.7,742.9 203.1,719.1 203.1,657 250.7,633.1 298.2,657 298.2,719.1 "/>
</g>
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="117.35" y1="-301.125" x2="117.35" y2="-280.125" gradientTransform="matrix(1 0 0 1 225.3 804)">
<stop offset="0" style="stop-color:#FFFFFF"/>
<stop offset="1" style="stop-color:#FCFCFC;stop-opacity:0"/>
</linearGradient>
<rect x="171.6" y="497.9" class="st1" width="342.1" height="36.5"/>
<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="-23.875" y1="-311.825" x2="-23.875" y2="-290.825" gradientTransform="matrix(4.489659e-11 1 -1 4.489659e-11 -163.225 461.175)">
<stop offset="0" style="stop-color:#FFFFFF"/>
<stop offset="1" style="stop-color:#FCFCFC;stop-opacity:0"/>
</linearGradient>
<polygon class="st2" points="117.1,487.5 117.1,387.1 153.6,387.1 153.6,487.5 "/>
<rect x="152.5" y="173.3" class="st3" width="440.8" height="324.6"/>
<line class="st4" x1="152.5" y1="200.2" x2="593.3" y2="200.2"/>
<circle class="st3" cx="171.6" cy="187.1" r="5.6"/>
<circle class="st3" cx="189.7" cy="187.1" r="5.6"/>
<circle class="st3" cx="207.8" cy="187.1" r="5.6"/>
<rect x="588.8" y="243.7" class="st5" width="13.9" height="201.3"/>
<g>
<linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="376.213" y1="4507.6616" x2="848.9944" y2="4507.6616" gradientTransform="matrix(1 0 0 1 0 -4253.9614)">
<stop offset="0" style="stop-color:#AA43FF"/>
<stop offset="3.900588e-03" style="stop-color:#A943FF"/>
<stop offset="0.1351" style="stop-color:#983AFB"/>
<stop offset="0.2932" style="stop-color:#8B34F9"/>
<stop offset="0.506" style="stop-color:#8430F7"/>
<stop offset="1" style="stop-color:#822FF7"/>
</linearGradient>
<rect x="183.8" y="250.8" class="st6" width="179.8" height="5.8"/>
<linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="376.213" y1="4507.6616" x2="848.9944" y2="4507.6616" gradientTransform="matrix(1 0 0 1 0 -4253.9614)">
<stop offset="0" style="stop-color:#AA43FF"/>
<stop offset="3.900588e-03" style="stop-color:#A943FF"/>
<stop offset="0.1351" style="stop-color:#983AFB"/>
<stop offset="0.2932" style="stop-color:#8B34F9"/>
<stop offset="0.506" style="stop-color:#8430F7"/>
<stop offset="1" style="stop-color:#822FF7"/>
</linearGradient>
<rect x="388.4" y="250.8" class="st7" width="232.3" height="5.8"/>
<linearGradient id="SVGID_5_" gradientUnits="userSpaceOnUse" x1="376.213" y1="4539.2617" x2="848.9944" y2="4539.2617" gradientTransform="matrix(1 0 0 1 0 -4253.9614)">
<stop offset="0" style="stop-color:#AA43FF"/>
<stop offset="3.900588e-03" style="stop-color:#A943FF"/>
<stop offset="0.1351" style="stop-color:#983AFB"/>
<stop offset="0.2932" style="stop-color:#8B34F9"/>
<stop offset="0.506" style="stop-color:#8430F7"/>
<stop offset="1" style="stop-color:#822FF7"/>
</linearGradient>
<rect x="183.8" y="282.4" class="st8" width="77.7" height="5.8"/>
<linearGradient id="SVGID_6_" gradientUnits="userSpaceOnUse" x1="376.213" y1="4539.2617" x2="848.9944" y2="4539.2617" gradientTransform="matrix(1 0 0 1 0 -4253.9614)">
<stop offset="0" style="stop-color:#AA43FF"/>
<stop offset="3.900588e-03" style="stop-color:#A943FF"/>
<stop offset="0.1351" style="stop-color:#983AFB"/>
<stop offset="0.2932" style="stop-color:#8B34F9"/>
<stop offset="0.506" style="stop-color:#8430F7"/>
<stop offset="1" style="stop-color:#822FF7"/>
</linearGradient>
<rect x="274.9" y="282.4" class="st9" width="191.5" height="5.8"/>
<linearGradient id="SVGID_7_" gradientUnits="userSpaceOnUse" x1="376.213" y1="4539.2617" x2="848.9944" y2="4539.2617" gradientTransform="matrix(1 0 0 1 0 -4253.9614)">
<stop offset="0" style="stop-color:#AA43FF"/>
<stop offset="3.900588e-03" style="stop-color:#A943FF"/>
<stop offset="0.1351" style="stop-color:#983AFB"/>
<stop offset="0.2932" style="stop-color:#8B34F9"/>
<stop offset="0.506" style="stop-color:#8430F7"/>
<stop offset="1" style="stop-color:#822FF7"/>
</linearGradient>
<rect x="484.5" y="282.4" class="st10" width="214.1" height="5.8"/>
<linearGradient id="SVGID_8_" gradientUnits="userSpaceOnUse" x1="376.213" y1="4569.3613" x2="848.9944" y2="4569.3613" gradientTransform="matrix(1 0 0 1 0 -4253.9614)">
<stop offset="0" style="stop-color:#AA43FF"/>
<stop offset="3.900588e-03" style="stop-color:#A943FF"/>
<stop offset="0.1351" style="stop-color:#983AFB"/>
<stop offset="0.2932" style="stop-color:#8B34F9"/>
<stop offset="0.506" style="stop-color:#8430F7"/>
<stop offset="1" style="stop-color:#822FF7"/>
</linearGradient>
<rect x="183.8" y="312.5" class="st11" width="163.6" height="5.8"/>
<linearGradient id="SVGID_9_" gradientUnits="userSpaceOnUse" x1="376.213" y1="4569.3613" x2="848.9944" y2="4569.3613" gradientTransform="matrix(1 0 0 1 0 -4253.9614)">
<stop offset="0" style="stop-color:#AA43FF"/>
<stop offset="3.900588e-03" style="stop-color:#A943FF"/>
<stop offset="0.1351" style="stop-color:#983AFB"/>
<stop offset="0.2932" style="stop-color:#8B34F9"/>
<stop offset="0.506" style="stop-color:#8430F7"/>
<stop offset="1" style="stop-color:#822FF7"/>
</linearGradient>
<rect x="365.9" y="312.5" class="st12" width="61.2" height="5.8"/>
<linearGradient id="SVGID_10_" gradientUnits="userSpaceOnUse" x1="376.213" y1="4569.3613" x2="848.9944" y2="4569.3613" gradientTransform="matrix(1 0 0 1 0 -4253.9614)">
<stop offset="0" style="stop-color:#AA43FF"/>
<stop offset="3.900588e-03" style="stop-color:#A943FF"/>
<stop offset="0.1351" style="stop-color:#983AFB"/>
<stop offset="0.2932" style="stop-color:#8B34F9"/>
<stop offset="0.506" style="stop-color:#8430F7"/>
<stop offset="1" style="stop-color:#822FF7"/>
</linearGradient>
<rect x="443.5" y="312.5" class="st13" width="362.5" height="5.8"/>
<linearGradient id="SVGID_11_" gradientUnits="userSpaceOnUse" x1="376.213" y1="4599.4614" x2="848.9944" y2="4599.4614" gradientTransform="matrix(1 0 0 1 0 -4253.9614)">
<stop offset="0" style="stop-color:#AA43FF"/>
<stop offset="3.900588e-03" style="stop-color:#A943FF"/>
<stop offset="0.1351" style="stop-color:#983AFB"/>
<stop offset="0.2932" style="stop-color:#8B34F9"/>
<stop offset="0.506" style="stop-color:#8430F7"/>
<stop offset="1" style="stop-color:#822FF7"/>
</linearGradient>
<rect x="183.8" y="342.6" class="st14" width="183.1" height="5.8"/>
<linearGradient id="SVGID_12_" gradientUnits="userSpaceOnUse" x1="376.213" y1="4599.4614" x2="848.9944" y2="4599.4614" gradientTransform="matrix(1 0 0 1 0 -4253.9614)">
<stop offset="0" style="stop-color:#AA43FF"/>
<stop offset="3.900588e-03" style="stop-color:#A943FF"/>
<stop offset="0.1351" style="stop-color:#983AFB"/>
<stop offset="0.2932" style="stop-color:#8B34F9"/>
<stop offset="0.506" style="stop-color:#8430F7"/>
<stop offset="1" style="stop-color:#822FF7"/>
</linearGradient>
<rect x="384.5" y="342.6" class="st15" width="295.7" height="5.8"/>
<linearGradient id="SVGID_13_" gradientUnits="userSpaceOnUse" x1="376.213" y1="4629.5615" x2="848.9944" y2="4629.5615" gradientTransform="matrix(1 0 0 1 0 -4253.9614)">
<stop offset="0" style="stop-color:#AA43FF"/>
<stop offset="3.900588e-03" style="stop-color:#A943FF"/>
<stop offset="0.1351" style="stop-color:#983AFB"/>
<stop offset="0.2932" style="stop-color:#8B34F9"/>
<stop offset="0.506" style="stop-color:#8430F7"/>
<stop offset="1" style="stop-color:#822FF7"/>
</linearGradient>
<rect x="183.8" y="372.7" class="st16" width="91.3" height="5.8"/>
<linearGradient id="SVGID_14_" gradientUnits="userSpaceOnUse" x1="376.213" y1="4629.5615" x2="848.9944" y2="4629.5615" gradientTransform="matrix(1 0 0 1 0 -4253.9614)">
<stop offset="0" style="stop-color:#AA43FF"/>
<stop offset="3.900588e-03" style="stop-color:#A943FF"/>
<stop offset="0.1351" style="stop-color:#983AFB"/>
<stop offset="0.2932" style="stop-color:#8B34F9"/>
<stop offset="0.506" style="stop-color:#8430F7"/>
<stop offset="1" style="stop-color:#822FF7"/>
</linearGradient>
<rect x="301" y="372.7" class="st17" width="154.8" height="5.8"/>
<linearGradient id="SVGID_15_" gradientUnits="userSpaceOnUse" x1="376.213" y1="4629.5615" x2="848.9944" y2="4629.5615" gradientTransform="matrix(1 0 0 1 0 -4253.9614)">
<stop offset="0" style="stop-color:#AA43FF"/>
<stop offset="3.900588e-03" style="stop-color:#A943FF"/>
<stop offset="0.1351" style="stop-color:#983AFB"/>
<stop offset="0.2932" style="stop-color:#8B34F9"/>
<stop offset="0.506" style="stop-color:#8430F7"/>
<stop offset="1" style="stop-color:#822FF7"/>
</linearGradient>
<rect x="478.6" y="372.7" class="st18" width="253.4" height="5.8"/>
<linearGradient id="SVGID_16_" gradientUnits="userSpaceOnUse" x1="376.213" y1="4659.6616" x2="848.9944" y2="4659.6616" gradientTransform="matrix(1 0 0 1 0 -4253.9614)">
<stop offset="0" style="stop-color:#AA43FF"/>
<stop offset="3.900588e-03" style="stop-color:#A943FF"/>
<stop offset="0.1351" style="stop-color:#983AFB"/>
<stop offset="0.2932" style="stop-color:#8B34F9"/>
<stop offset="0.506" style="stop-color:#8430F7"/>
<stop offset="1" style="stop-color:#822FF7"/>
</linearGradient>
<rect x="183.8" y="402.8" class="st19" width="141.7" height="5.8"/>
<linearGradient id="SVGID_17_" gradientUnits="userSpaceOnUse" x1="376.213" y1="4659.6616" x2="848.9944" y2="4659.6616" gradientTransform="matrix(1 0 0 1 0 -4253.9614)">
<stop offset="0" style="stop-color:#AA43FF"/>
<stop offset="3.900588e-03" style="stop-color:#A943FF"/>
<stop offset="0.1351" style="stop-color:#983AFB"/>
<stop offset="0.2932" style="stop-color:#8B34F9"/>
<stop offset="0.506" style="stop-color:#8430F7"/>
<stop offset="1" style="stop-color:#822FF7"/>
</linearGradient>
<rect x="342.3" y="402.8" class="st20" width="171.4" height="5.8"/>
<linearGradient id="SVGID_18_" gradientUnits="userSpaceOnUse" x1="3.5125" y1="4659.6616" x2="1590.2528" y2="4659.6616" gradientTransform="matrix(1 0 0 1 0 -4253.9614)">
<stop offset="0" style="stop-color:#AA43FF"/>
<stop offset="3.900588e-03" style="stop-color:#A943FF"/>
<stop offset="0.1351" style="stop-color:#983AFB"/>
<stop offset="0.2932" style="stop-color:#8B34F9"/>
<stop offset="0.506" style="stop-color:#8430F7"/>
<stop offset="1" style="stop-color:#822FF7"/>
</linearGradient>
<rect x="534.4" y="402.8" class="st21" width="108.8" height="5.8"/>
<linearGradient id="SVGID_19_" gradientUnits="userSpaceOnUse" x1="376.213" y1="4691.2617" x2="848.9944" y2="4691.2617" gradientTransform="matrix(1 0 0 1 0 -4253.9614)">
<stop offset="0" style="stop-color:#AA43FF"/>
<stop offset="3.900588e-03" style="stop-color:#A943FF"/>
<stop offset="0.1351" style="stop-color:#983AFB"/>
<stop offset="0.2932" style="stop-color:#8B34F9"/>
<stop offset="0.506" style="stop-color:#8430F7"/>
<stop offset="1" style="stop-color:#822FF7"/>
</linearGradient>
<rect x="183.8" y="434.4" class="st22" width="91.3" height="5.8"/>
<linearGradient id="SVGID_20_" gradientUnits="userSpaceOnUse" x1="376.213" y1="4691.2617" x2="848.9944" y2="4691.2617" gradientTransform="matrix(1 0 0 1 0 -4253.9614)">
<stop offset="0" style="stop-color:#AA43FF"/>
<stop offset="3.900588e-03" style="stop-color:#A943FF"/>
<stop offset="0.1351" style="stop-color:#983AFB"/>
<stop offset="0.2932" style="stop-color:#8B34F9"/>
<stop offset="0.506" style="stop-color:#8430F7"/>
<stop offset="1" style="stop-color:#822FF7"/>
</linearGradient>
<rect x="301.3" y="434.4" class="st23" width="102.5" height="5.8"/>
<linearGradient id="SVGID_21_" gradientUnits="userSpaceOnUse" x1="376.213" y1="4691.2617" x2="848.9944" y2="4691.2617" gradientTransform="matrix(1 0 0 1 0 -4253.9614)">
<stop offset="0" style="stop-color:#AA43FF"/>
<stop offset="3.900588e-03" style="stop-color:#A943FF"/>
<stop offset="0.1351" style="stop-color:#983AFB"/>
<stop offset="0.2932" style="stop-color:#8B34F9"/>
<stop offset="0.506" style="stop-color:#8430F7"/>
<stop offset="1" style="stop-color:#822FF7"/>
</linearGradient>
<rect x="424.3" y="434.4" class="st24" width="233.4" height="5.8"/>
</g>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 804 744" xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<path id="a" d="M592.05 232v-61.45h-444.3v328.1h444.3V456H578V232h14.05z"/>
<mask id="b" width="444.3" height="328.1" x="0" y="0" fill="#fff">
<use xlink:href="#a"/>
</mask>
</defs>
<g fill="none" fill-rule="evenodd" transform="translate(1 1)">
<path stroke="#000" stroke-opacity=".15" stroke-width="2" d="M250.1 448.1V386l47.6-23.9 47.5 23.9v62.1l-47.5 23.8zm148.7 23.8l-47.6-23.8V386l47.6-23.9 47.6 23.9v62.1zm259.9-362l-47.6-23.8V24L658.7.1 706.2 24v62.1zm-411 452l-47.6-23.8V476l47.6-23.9 47.5 23.9v62.1zm201 0l-47.6-23.8V476l47.6-23.9 47.5 23.9v62.1zm-298.6 66.2V566l14.4-7.3 33.2-16.6 47.5 23.9v62.1l-47.5 23.8zm147.6 23.8l-47.6-23.8V566l47.6-23.9 47.5 23.9v62.1zm-150 90l-47.6-23.8V656l47.6-23.9 47.5 23.9v62.1zm-100.1 0L0 718.1V656l47.6-23.9L95.1 656v62.1zm99.1-179l-47.6-23.8V477l47.6-23.9 47.5 23.9v62.1zm101 179l-47.6-23.8V656l47.6-23.9 47.5 23.9v62.1z"/>
<use fill-rule="nonzero" stroke="#000" stroke-width="4" mask="url(#b)" xlink:href="#a"/>
<path stroke="#000" stroke-width="2" d="M149.5 199h440.8"/>
<path fill="#FFF" d="M149.7 200h440.4v296.7H149.7z"/>
<circle cx="168.6" cy="186.1" r="5.6" fill="#FFF" fill-rule="nonzero" stroke="#2A2733" stroke-width="1.5"/>
<circle cx="186.7" cy="186.1" r="5.6" fill="#FFF" fill-rule="nonzero" stroke="#2A2733" stroke-width="1.5"/>
<circle cx="204.8" cy="186.1" r="5.6" fill="#FFF" fill-rule="nonzero" stroke="#2A2733" stroke-width="1.5"/>
<path fill="#5C4EE5" fill-rule="nonzero" d="M180.8 249.8h179.8v5.8H180.8zm204.6 0h232.3v5.8H385.4zm-204.6 31.6h77.7v5.8h-77.7zm91.1 0h191.5v5.8H271.9zm209.6 0h214.1v5.8H481.5zm-300.7 30.1h163.6v5.8H180.8zm182.1 0h61.2v5.8h-61.2zm77.6 0H803v5.8H440.5zm-259.7 30.1h183.1v5.8H180.8zm200.7 0h295.7v5.8H381.5zm-200.7 30.1h91.3v5.8h-91.3zm117.2 0h154.8v5.8H298zm177.6 0H729v5.8H475.6zm-294.8 30.1h141.7v5.8H180.8zm158.5 0h171.4v5.8H339.3zm192.1 0h108.8v5.8H531.4zm-350.6 31.6h91.3v5.8h-91.3zm117.5 0h102.5v5.8H298.3zm123 0h233.4v5.8H421.3z"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 700 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 977 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 784 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 162 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 248 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 193 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 314 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 177 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 253 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 MiB

View File

@ -1,142 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 19.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 1896.6 895.7" style="enable-background:new 0 0 1896.6 895.7;" xml:space="preserve">
<style type="text/css">
.st0{enable-background:new ;}
.st1{clip-path:url(#SVGID_2_);}
.st2{clip-path:url(#SVGID_4_);fill:none;stroke:#6311AA;stroke-width:1;stroke-miterlimit:10;}
.st3{fill:url(#SVGID_5_);}
</style>
<g class="st0">
<g>
<defs>
<rect id="SVGID_1_" x="-0.4" width="1891.2" height="895.7"/>
</defs>
<clipPath id="SVGID_2_">
<use xlink:href="#SVGID_1_" style="overflow:visible;"/>
</clipPath>
<g class="st1">
<defs>
<rect id="SVGID_3_" x="-0.4" width="1891.2" height="895.7"/>
</defs>
<clipPath id="SVGID_4_">
<use xlink:href="#SVGID_3_" style="overflow:visible;"/>
</clipPath>
<polygon class="st2" points="6.1,-437.2 -178.5,492.8 -61.6,-75.9 "/>
<polygon class="st2" points="1440.2,-172.5 1114.2,-150 1294.6,-4.4 "/>
<polygon class="st2" points="1440.2,-172.5 1294.6,-4.4 1565.5,-76 "/>
<polygon class="st2" points="1799.5,-142.5 1738.5,-52 1971,41.9 "/>
<polygon class="st2" points="1799.5,-142.5 1971,41.9 1989.4,-102.6 "/>
<polygon class="st2" points="244.7,-237.8 -61.6,-75.9 172.4,7.3 "/>
<polygon class="st2" points="244.7,-237.8 172.4,7.3 359.1,-226.3 "/>
<polygon class="st2" points="359.1,-226.3 172.4,7.3 348.8,81.8 "/>
<polygon class="st2" points="359.1,-226.3 348.8,81.8 617.4,-21.1 "/>
<polygon class="st2" points="788.6,-208.2 617.4,-21.1 682.3,52.2 "/>
<polygon class="st2" points="788.6,-208.2 682.3,52.2 870.4,69.9 "/>
<polygon class="st2" points="788.6,-208.2 870.4,69.9 999.1,-21.1 "/>
<polygon class="st2" points="999.1,-21.1 870.4,69.9 1120.3,148.4 "/>
<polygon class="st2" points="999.1,-21.1 1120.3,148.4 1294.6,-4.4 "/>
<polygon class="st2" points="999.1,-21.1 1294.6,-4.4 1114.2,-150 "/>
<polygon class="st2" points="1294.6,-4.4 1120.3,148.4 1380,125.5 "/>
<polygon class="st2" points="1294.6,-4.4 1380,125.5 1565.5,-76 "/>
<polygon class="st2" points="1565.5,-76 1380,125.5 1506,210.7 "/>
<polygon class="st2" points="1506,210.7 1700,144.2 1565.5,-76 "/>
<polygon class="st2" points="1565.5,-76 1700,144.2 1738.5,-52 "/>
<polygon class="st2" points="1738.5,-52 1700,144.2 1971,41.9 "/>
<polygon class="st2" points="1971,41.9 1700,144.2 1967.5,222.8 "/>
<polygon class="st2" points="-61.6,-75.9 -98.7,114.4 111.1,108.7 "/>
<polygon class="st2" points="-61.6,-75.9 111.1,108.7 172.4,7.3 "/>
<polygon class="st2" points="172.4,7.3 111.1,108.7 240.5,232.7 "/>
<polygon class="st2" points="172.4,7.3 240.5,232.7 348.8,81.8 "/>
<polygon class="st2" points="348.8,81.8 240.5,232.7 481.4,301.3 "/>
<polygon class="st2" points="348.8,81.8 481.4,301.3 617.4,-21.1 "/>
<polygon class="st2" points="617.4,-21.1 481.4,301.3 682.3,52.2 "/>
<polygon class="st2" points="682.3,52.2 481.4,301.3 748,195.7 "/>
<polygon class="st2" points="682.3,52.2 748,195.7 870.4,69.9 "/>
<polygon class="st2" points="870.4,69.9 748,195.7 948.4,346.5 "/>
<polygon class="st2" points="870.4,69.9 948.4,346.5 1027.4,324 "/>
<polygon class="st2" points="870.4,69.9 1027.4,324 1120.3,148.4 "/>
<polygon class="st2" points="1120.3,148.4 1027.4,324 1220.9,382.3 "/>
<polygon class="st2" points="1120.3,148.4 1220.9,382.3 1380,125.5 "/>
<polygon class="st2" points="1380,125.5 1220.9,382.3 1433.4,340.9 "/>
<polygon class="st2" points="1380,125.5 1433.4,340.9 1506,210.7 "/>
<polygon class="st2" points="1506,210.7 1433.4,340.9 1679.3,422.1 "/>
<polygon class="st2" points="1679.3,422.1 1700,144.2 1506,210.7 "/>
<polygon class="st2" points="1700,144.2 1679.3,422.1 1967.5,222.8 "/>
<polygon class="st2" points="1967.5,222.8 1679.3,422.1 1916.3,455.7 "/>
<polygon class="st2" points="1967.5,222.9 1907.8,509 1875.7,924.2 "/>
<polygon class="st2" points="-98.7,114.4 -46.9,335.4 111.1,108.7 "/>
<polygon class="st2" points="111.1,108.7 -46.9,335.4 155.3,323.9 "/>
<polygon class="st2" points="111.1,108.7 155.3,323.9 240.5,232.7 "/>
<polygon class="st2" points="240.5,232.7 155.3,323.9 203.4,436.6 "/>
<polygon class="st2" points="240.5,232.7 203.4,436.6 481.4,301.3 "/>
<polygon class="st2" points="481.4,301.3 203.4,436.6 542.4,463.8 "/>
<polygon class="st2" points="481.4,301.3 542.4,463.8 650.9,408.7 "/>
<polygon class="st2" points="481.4,301.3 650.9,408.7 748,195.7 "/>
<polygon class="st2" points="748,195.7 650.9,408.7 873,446.1 "/>
<polygon class="st2" points="748,195.7 873,446.1 948.4,346.5 "/>
<polygon class="st2" points="948.4,346.5 873,446.1 1109,536.2 "/>
<polygon class="st2" points="948.4,346.5 1109,536.2 1027.4,324 "/>
<polygon class="st2" points="1027.4,324 1109,536.2 1220.9,382.3 "/>
<polygon class="st2" points="1220.9,382.3 1109,536.2 1298.5,551.5 "/>
<polygon class="st2" points="1220.9,382.3 1298.5,551.5 1433.4,340.9 "/>
<polygon class="st2" points="1433.4,340.9 1298.5,551.5 1510.5,589.7 "/>
<polygon class="st2" points="1433.4,340.9 1510.5,589.7 1679.3,422.1 "/>
<polygon class="st2" points="1679.3,422.1 1510.5,589.7 1589.8,663.8 "/>
<polygon class="st2" points="1679.3,422.1 1589.8,663.8 1801.8,580.1 "/>
<polygon class="st2" points="1679.3,422.1 1801.8,580.1 1916.3,455.7 "/>
<polygon class="st2" points="1916.3,455.7 1801.8,580.1 1896.1,795.2 "/>
<polygon class="st2" points="-46.9,335.4 -15.6,575.2 203.4,436.6 "/>
<polygon class="st2" points="-46.9,335.4 203.4,436.6 155.3,323.9 "/>
<polygon class="st2" points="203.4,436.6 -15.6,575.2 226.1,528.6 "/>
<polygon class="st2" points="203.4,436.6 226.1,528.6 542.4,463.8 "/>
<polygon class="st2" points="542.4,463.8 226.1,528.6 531.7,569.5 "/>
<polygon class="st2" points="542.4,463.8 531.7,569.5 650.9,408.7 "/>
<polygon class="st2" points="650.9,408.7 531.7,569.5 713.2,698.7 "/>
<polygon class="st2" points="650.9,408.7 713.2,698.7 873,446.1 "/>
<polygon class="st2" points="873,446.1 713.2,698.7 811.2,717.8 "/>
<polygon class="st2" points="873,446.1 811.2,717.8 1109,536.2 "/>
<polygon class="st2" points="1109,536.2 811.2,717.8 1081.9,776.6 "/>
<polygon class="st2" points="1109,536.2 1081.9,776.6 1195.6,706.7 "/>
<polygon class="st2" points="1109,536.2 1195.6,706.7 1298.5,551.5 "/>
<polygon class="st2" points="1298.5,551.5 1195.6,706.7 1487.4,769.2 "/>
<polygon class="st2" points="1298.5,551.5 1487.4,769.2 1510.5,589.7 "/>
<polygon class="st2" points="1510.5,589.7 1487.4,769.2 1589.8,663.8 "/>
<polygon class="st2" points="1589.8,663.8 1487.4,769.2 1599,787.8 "/>
<polygon class="st2" points="1589.8,663.8 1599,787.8 1801.8,580.1 "/>
<polygon class="st2" points="1801.8,580.1 1598.9,787.8 1896.1,795.2 "/>
<polygon class="st2" points="-15.6,575.2 -7.7,762.4 226.1,528.6 "/>
<polygon class="st2" points="226.1,528.6 -7.7,762.4 226.1,838.9 "/>
<polygon class="st2" points="226.1,528.6 226.1,838.9 452.5,756.3 "/>
<polygon class="st2" points="226.1,528.6 452.5,756.3 531.7,569.5 "/>
<polygon class="st2" points="531.7,569.5 452.5,756.3 543.3,831 "/>
<polygon class="st2" points="531.7,569.5 543.3,831 713.2,698.7 "/>
<polygon class="st2" points="713.2,698.7 543.3,831 787.8,829 "/>
<polygon class="st2" points="713.2,698.7 787.8,829 811.2,717.8 "/>
<polygon class="st2" points="811.2,717.8 787.8,829 1081.9,776.6 "/>
<polygon class="st2" points="1081.9,776.6 787.8,829 1067.3,891.2 "/>
<polygon class="st2" points="1081.9,776.6 1067.3,891.2 1232.6,976.2 "/>
<polygon class="st2" points="1081.9,776.6 1232.6,976.2 1195.6,706.7 "/>
<polygon class="st2" points="1195.6,706.7 1232.6,976.2 1487.4,769.2 "/>
<polygon class="st2" points="1487.4,769.2 1232.6,976.2 1351.8,1038.1 "/>
<polygon class="st2" points="1487.4,769.2 1351.8,1038.1 1630.6,1025 "/>
<polygon class="st2" points="1487.4,769.2 1630.6,1025 1599,787.8 "/>
<polygon class="st2" points="1599,787.8 1630.6,1025 1896.1,795.2 "/>
<polygon class="st2" points="1896.1,795.2 1630.6,1025 1847.9,1098.6 "/>
<polygon class="st2" points="-139.5,793.1 1351.8,1038.1 226.1,838.9 "/>
<polygon class="st2" points="-139.5,793.1 226.1,838.9 -7.7,762.4 "/>
<polygon class="st2" points="226.1,838.9 1351.8,1038.1 543.3,831 "/>
<polygon class="st2" points="226.1,838.9 543.3,831 452.5,756.3 "/>
<polygon class="st2" points="543.3,831 1351.8,1038.1 1232.6,976.2 "/>
<polygon class="st2" points="543.3,831 1232.6,976.2 787.8,829 "/>
<polygon class="st2" points="787.8,829 1232.6,976.2 1067.3,891.2 "/>
</g>
</g>
</g>
<linearGradient id="SVGID_5_" gradientUnits="userSpaceOnUse" x1="948.6955" y1="868.5212" x2="948.6955" y2="-258.3916">
<stop offset="0" style="stop-color:#822FF7"/>
<stop offset="1" style="stop-color:#822FF7;stop-opacity:0"/>
</linearGradient>
<rect x="0.4" y="215.2" class="st3" width="1896.6" height="680.5"/>
</svg>

Before

Width:  |  Height:  |  Size: 9.2 KiB

View File

@ -0,0 +1,7 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 250 60.15">
<path class="text" d="M77.35 7.86V4.63h-3v3.23h-1.46V.11h1.51v3.25h3V.11h1.51v7.75zm7 0h-1.2l-.11-.38a3.28 3.28 0 0 1-1.7.52c-1.06 0-1.52-.7-1.52-1.66 0-1.14.51-1.57 1.7-1.57h1.4v-.62c0-.62-.18-.84-1.11-.84a8.46 8.46 0 0 0-1.61.17L80 2.42a7.89 7.89 0 0 1 2-.26c1.83 0 2.37.62 2.37 2zm-1.43-2.11h-1.08c-.48 0-.61.13-.61.55s.13.56.59.56a2.37 2.37 0 0 0 1.1-.29zM87.43 8a7.12 7.12 0 0 1-2-.32l.2-1.07a6.77 6.77 0 0 0 1.73.24c.65 0 .74-.14.74-.56s-.07-.52-1-.73c-1.42-.33-1.59-.68-1.59-1.76s.49-1.65 2.16-1.65a8 8 0 0 1 1.75.2l-.14 1.11a10.66 10.66 0 0 0-1.6-.16c-.63 0-.74.14-.74.48s0 .48.82.68c1.63.41 1.78.62 1.78 1.77S89.19 8 87.43 8zm6.68-.11V4c0-.3-.13-.45-.47-.45a4.14 4.14 0 0 0-1.52.45v3.86h-1.46V0l1.46.22v2.47a5.31 5.31 0 0 1 2.13-.54c1 0 1.32.65 1.32 1.65v4.06zm2.68-6.38V.11h1.46v1.37zm0 6.38V2.27h1.46v5.59zm2.62-5.54c0-1.4.85-2.22 2.83-2.22a9.37 9.37 0 0 1 2.16.25l-.17 1.25a12.21 12.21 0 0 0-1.95-.2c-1 0-1.37.34-1.37 1.16V5.5c0 .81.33 1.16 1.37 1.16a12.21 12.21 0 0 0 1.95-.2l.17 1.25a9.37 9.37 0 0 1-2.16.25c-2 0-2.83-.81-2.83-2.22zM107.63 8c-2 0-2.53-1.06-2.53-2.2V4.36c0-1.15.54-2.2 2.53-2.2s2.53 1.06 2.53 2.2v1.41c.01 1.15-.53 2.23-2.53 2.23zm0-4.63c-.78 0-1.08.33-1.08 1v1.5c0 .63.3 1 1.08 1s1.08-.33 1.08-1V4.31c0-.63-.3-.96-1.08-.96zm6.64.09a11.57 11.57 0 0 0-1.54.81v3.6h-1.46v-5.6h1.23l.1.62a6.63 6.63 0 0 1 1.53-.73zM120.1 6a1.73 1.73 0 0 1-1.92 2 8.36 8.36 0 0 1-1.55-.16v2.26l-1.46.22v-8h1.16l.14.47a3.15 3.15 0 0 1 1.84-.59c1.17 0 1.79.67 1.79 1.94zm-3.48.63a6.72 6.72 0 0 0 1.29.15c.53 0 .73-.24.73-.75v-2c0-.46-.18-.71-.72-.71a2.11 2.11 0 0 0-1.3.51zM81.78 19.54h-8.89v-5.31H96.7v5.31h-8.9v26.53h-6z"/>
<path class="text" d="M102.19 41.77a24.39 24.39 0 0 0 7.12-1.1l.91 4.4a25 25 0 0 1-8.56 1.48c-7.31 0-9.85-3.39-9.85-9V31.4c0-4.92 2.2-9.08 9.66-9.08s9.13 4.35 9.13 9.37v5h-13v1.2c.05 2.78 1.05 3.88 4.59 3.88zM97.65 32h7.41v-1.18c0-2.2-.67-3.73-3.54-3.73s-3.87 1.53-3.87 3.73zm28.54-4.33a45.65 45.65 0 0 0-6.19 3.39v15h-5.83V22.79h4.92l.38 2.58a26.09 26.09 0 0 1 6.12-3.06zm14.24 0a45.65 45.65 0 0 0-6.17 3.39v15h-5.83V22.79h4.92l.38 2.58a26.09 26.09 0 0 1 6.12-3.06zm19.51 18.4h-4.78l-.43-1.58a12.73 12.73 0 0 1-6.93 2.06c-4.25 0-6.07-2.92-6.07-6.93 0-4.73 2.06-6.55 6.79-6.55h5.59v-2.44c0-2.58-.72-3.49-4.45-3.49a32.53 32.53 0 0 0-6.45.72l-.72-4.45a30.38 30.38 0 0 1 8-1.1c7.31 0 9.47 2.58 9.47 8.41zm-5.83-8.8h-4.3c-1.91 0-2.44.53-2.44 2.29s.53 2.34 2.34 2.34a9.18 9.18 0 0 0 4.4-1.2zm23.75-19.79a17.11 17.11 0 0 0-3.35-.38c-2.29 0-2.63 1-2.63 2.77v2.92h5.93l-.33 4.64h-5.59v18.64h-5.83V27.43h-3.73v-4.64h3.73v-3.25c0-4.83 2.25-7.22 7.41-7.22a18.47 18.47 0 0 1 5 .67zm11.38 29.07c-8 0-10.13-4.4-10.13-9.18v-5.88c0-4.78 2.15-9.18 10.13-9.18s10.13 4.4 10.13 9.18v5.88c.01 4.78-2.15 9.18-10.13 9.18zm0-19.27c-3.11 0-4.3 1.39-4.3 4v6.26c0 2.63 1.2 4 4.3 4s4.3-1.39 4.3-4V31.3c0-2.63-1.19-4.02-4.3-4.02zm25.14.39a45.65 45.65 0 0 0-6.17 3.39v15h-5.83V22.79h4.92l.38 2.58a26.08 26.08 0 0 1 6.12-3.06zm16.02 18.4V29.82c0-1.24-.53-1.86-1.86-1.86a16.08 16.08 0 0 0-6.07 2v16.11h-5.83V22.79h4.45l.57 2a23.32 23.32 0 0 1 9.34-2.48 4.42 4.42 0 0 1 4.4 2.49 22.83 22.83 0 0 1 9.37-2.49c3.87 0 5.26 2.72 5.26 6.88v16.88h-5.83V29.82c0-1.24-.53-1.86-1.86-1.86a15.43 15.43 0 0 0-6.07 2v16.11z"/>
<path class="rect-light" d="M18.2 10.72l16.4 9.48v18.93l-16.4-9.47V10.72z"/>
<path class="rect-dark" d="M36.4 20.2v18.93l16.4-9.46V10.72L36.4 20.2z"/>
<path class="rect-light" d="M0 .15v18.94l16.4 9.47V9.62L0 .15zm18.2 50.53l16.4 9.47V41.21l-16.4-9.47v18.94z"/>
</svg>

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 973 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

View File

@ -1,30 +0,0 @@
<svg width="163px" height="42px" viewBox="402 367 263 68" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<desc>HashiCorp Terraform</desc>
<defs>
<polygon id="path-1" points="9.2949 0 0 0 0 32.199 18.5898 32.199 18.5898 0"></polygon>
</defs>
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" transform="translate(402.000000, 367.000000)">
<polygon id="Fill-1" fill="#FFFFFF" points="86.3558 25.3574 77.4268 25.3574 77.4268 20.0294 101.3338 20.0294 101.3338 25.3574 92.4048 25.3574 92.4048 52.0004 86.3558 52.0004"></polygon>
<g id="Group-27">
<path d="M109.0121,37.8389 L116.4521,37.8389 L116.4521,36.6869 C116.4521,34.4789 115.7811,32.9429 112.9001,32.9429 C110.0201,32.9429 109.0121,34.4789 109.0121,36.6869 L109.0121,37.8389 Z M113.5721,47.6799 C115.8281,47.6799 118.1801,47.3439 120.7251,46.5749 L121.6371,50.9919 C118.9961,51.9999 115.8281,52.4809 113.0441,52.4809 C105.6991,52.4809 103.1551,49.0709 103.1551,43.4549 L103.1551,37.2629 C103.1551,32.3179 105.3641,28.1419 112.8521,28.1419 C120.3401,28.1419 122.0211,32.5109 122.0211,37.5509 L122.0211,42.5429 L109.0121,42.5429 L109.0121,43.7429 C109.0121,46.5749 110.0201,47.6799 113.5721,47.6799 L113.5721,47.6799 Z" id="Fill-2" fill="#FFFFFF"></path>
<path d="M137.6663,33.5186 C135.4103,34.5266 133.5863,35.5826 131.4743,36.9266 L131.4743,51.9996 L125.6173,51.9996 L125.6173,28.6226 L130.5623,28.6226 L130.9453,31.2136 C132.2423,30.3506 135.0263,28.7176 137.0903,28.1416 L137.6663,33.5186 Z" id="Fill-4" fill="#FFFFFF"></path>
<path d="M151.97,33.5186 C149.714,34.5266 147.89,35.5826 145.778,36.9266 L145.778,51.9996 L139.921,51.9996 L139.921,28.6226 L144.866,28.6226 L145.249,31.2136 C146.545,30.3506 149.33,28.7176 151.394,28.1416 L151.97,33.5186 Z" id="Fill-6" fill="#FFFFFF"></path>
<path d="M165.6976,43.167 L161.3776,43.167 C159.4576,43.167 158.9286,43.695 158.9286,45.472 C158.9286,47.104 159.4576,47.823 161.2816,47.823 C163.0096,47.823 164.5936,47.248 165.6976,46.624 L165.6976,43.167 Z M171.5536,52 L166.7546,52 L166.3216,50.416 C164.2096,51.808 161.7136,52.48 159.3616,52.48 C155.0896,52.48 153.2646,49.552 153.2646,45.52 C153.2646,40.767 155.3296,38.942 160.0816,38.942 L165.6976,38.942 L165.6976,36.495 C165.6976,33.902 164.9776,32.99 161.2336,32.99 C159.1216,32.99 156.8166,33.278 154.7536,33.71 L154.0326,29.246 C156.2406,28.574 159.4576,28.142 162.0496,28.142 C169.3936,28.142 171.5536,30.734 171.5536,36.591 L171.5536,52 Z" id="Fill-8" fill="#FFFFFF"></path>
<path d="M189.554,23.2939 C188.45,23.0539 187.154,22.9089 186.194,22.9089 C183.889,22.9089 183.553,23.9179 183.553,25.6929 L183.553,28.6219 L189.506,28.6219 L189.169,33.2779 L183.553,33.2779 L183.553,51.9999 L177.697,51.9999 L177.697,33.2779 L173.952,33.2779 L173.952,28.6219 L177.697,28.6219 L177.697,25.3569 C177.697,20.5089 179.952,18.1089 185.137,18.1089 C186.961,18.1089 188.642,18.3489 190.178,18.7809 L189.554,23.2939 Z" id="Fill-10" fill="#FFFFFF"></path>
<path d="M200.9779,33.1348 C197.8569,33.1348 196.6579,34.5268 196.6579,37.1668 L196.6579,43.4548 C196.6579,46.0958 197.8569,47.4878 200.9779,47.4878 C204.0979,47.4878 205.2979,46.0958 205.2979,43.4548 L205.2979,37.1668 C205.2979,34.5268 204.0979,33.1348 200.9779,33.1348 M200.9779,52.4808 C192.9609,52.4808 190.8009,48.0638 190.8009,43.2638 L190.8009,37.3588 C190.8009,32.5588 192.9609,28.1418 200.9779,28.1418 C208.9949,28.1418 211.1549,32.5588 211.1549,37.3588 L211.1549,43.2638 C211.1549,48.0638 208.9949,52.4808 200.9779,52.4808" id="Fill-12" fill="#FFFFFF"></path>
<path d="M227.1849,33.5186 C224.9289,34.5266 223.1049,35.5826 220.9929,36.9266 L220.9929,51.9996 L215.1359,51.9996 L215.1359,28.6226 L220.0809,28.6226 L220.4639,31.2136 C221.7599,30.3506 224.5449,28.7176 226.6089,28.1416 L227.1849,33.5186 Z" id="Fill-14" fill="#FFFFFF"></path>
<path d="M243.264,52 L243.264,35.679 C243.264,34.431 242.736,33.807 241.392,33.807 C239.951,33.807 237.408,34.671 235.295,35.774 L235.295,52 L229.439,52 L229.439,28.622 L233.903,28.622 L234.479,30.59 C237.408,29.15 241.104,28.142 243.84,28.142 C246.096,28.142 247.489,29.054 248.256,30.638 C251.088,29.198 254.833,28.142 257.665,28.142 C261.553,28.142 262.946,30.878 262.946,35.055 L262.946,52 L257.089,52 L257.089,35.679 C257.089,34.431 256.561,33.807 255.217,33.807 C253.777,33.807 250.945,34.719 249.12,35.774 L249.12,52 L243.264,52 Z" id="Fill-16" fill="#FFFFFF"></path>
<polygon id="Fill-18" fill="#FFFFFF" points="20.6273 11.981 39.2173 22.714 39.2173 44.181 20.6273 33.448"></polygon>
<polygon id="Fill-20" fill-opacity="0.7" fill="#FFFFFF" points="41.2542 22.7148 41.2542 44.1808 59.8452 33.4478 59.8452 11.9808"></polygon>
<g id="Group-24">
<mask id="mask-2" fill="white">
<use xlink:href="#path-1"></use>
</mask>
<g id="Clip-23"></g>
<polygon id="Fill-22" fill="#FFFFFF" mask="url(#mask-2)" points="-0.0002 0 -0.0002 21.464 18.5898 32.199 18.5898 10.733"></polygon>
</g>
<polygon id="Fill-25" fill="#FFFFFF" points="20.6278 57.2656 39.2158 67.9996 39.2158 46.6756 39.2158 46.5336 20.6278 35.7996"></polygon>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 107 KiB

View File

@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 251 61">
<g fill="none" fill-rule="evenodd">
<path class="text" fill="#000" fill-rule="nonzero" d="M81.78 19.54h-8.89v-5.31H96.7v5.31h-8.9v26.53h-6"/>
<path class="text" fill="#000" fill-rule="nonzero" d="M102.19 41.77c2.415-.012 4.814-.383 7.12-1.1l.91 4.4c-2.745.99-5.642 1.49-8.56 1.48-7.31 0-9.85-3.39-9.85-9V31.4c0-4.92 2.2-9.08 9.66-9.08s9.13 4.35 9.13 9.37v5h-13v1.2c.05 2.78 1.05 3.88 4.59 3.88zM97.65 32h7.41v-1.18c0-2.2-.67-3.73-3.54-3.73s-3.87 1.53-3.87 3.73V32zm28.54-4.33c-2.148.97-4.217 2.102-6.19 3.39v15h-5.83V22.79h4.92l.38 2.58c1.897-1.284 3.955-2.313 6.12-3.06l.6 5.36zm14.24 0c-2.14.97-4.204 2.103-6.17 3.39v15h-5.83V22.79h4.92l.38 2.58c1.897-1.284 3.955-2.313 6.12-3.06l.58 5.36zm19.51 18.4h-4.78l-.43-1.58c-2.062 1.342-4.47 2.058-6.93 2.06-4.25 0-6.07-2.92-6.07-6.93 0-4.73 2.06-6.55 6.79-6.55h5.59v-2.44c0-2.58-.72-3.49-4.45-3.49-2.17.024-4.33.266-6.45.72l-.72-4.45c2.606-.72 5.296-1.09 8-1.1 7.31 0 9.47 2.58 9.47 8.41l-.02 15.35zm-5.83-8.8h-4.3c-1.91 0-2.44.53-2.44 2.29s.53 2.34 2.34 2.34c1.544-.024 3.058-.436 4.4-1.2v-3.43zm23.75-19.79c-1.1-.237-2.224-.364-3.35-.38-2.29 0-2.63 1-2.63 2.77v2.92h5.93l-.33 4.64h-5.59v18.64h-5.83V27.43h-3.73v-4.64h3.73v-3.25c0-4.83 2.25-7.22 7.41-7.22 1.69-.006 3.372.22 5 .67l-.61 4.49zm11.38 29.07c-8 0-10.13-4.4-10.13-9.18v-5.88c0-4.78 2.15-9.18 10.13-9.18s10.13 4.4 10.13 9.18v5.88c.01 4.78-2.15 9.18-10.13 9.18zm0-19.27c-3.11 0-4.3 1.39-4.3 4v6.26c0 2.63 1.2 4 4.3 4 3.1 0 4.3-1.39 4.3-4V31.3c0-2.63-1.19-4.02-4.3-4.02zm25.14.39c-2.14.97-4.204 2.103-6.17 3.39v15h-5.83V22.79h4.92l.38 2.58c1.897-1.284 3.954-2.313 6.12-3.06l.58 5.36zm16.02 18.4V29.82c0-1.24-.53-1.86-1.86-1.86-2.137.254-4.2.934-6.07 2v16.11h-5.83V22.79h4.45l.57 2c2.906-1.47 6.088-2.315 9.34-2.48 1.843-.174 3.6.82 4.4 2.49 2.91-1.49 6.104-2.34 9.37-2.49 3.87 0 5.26 2.72 5.26 6.88v16.88h-5.83V29.82c0-1.24-.53-1.86-1.86-1.86-2.14.236-4.208.917-6.07 2v16.11h-5.87z"/>
<path class="rect-dark" fill="#4040B2" d="M36.4 39.13l16.4-9.46V10.72L36.4 20.2"/>
<path class="rect-light" fill="#5C4EE5" d="M18.2 10.72l16.4 9.48v18.93l-16.4-9.47"/>
<path class="rect-light" fill="#5C4EE5" d="M0 19.09l16.4 9.47V9.62L0 .15m18.2 50.53l16.4 9.47V41.21l-16.4-9.47"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 163 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 264 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 63 KiB

View File

@ -1,47 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 19.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 357.3 38.4" style="enable-background:new 0 0 357.3 38.4;" xml:space="preserve">
<style type="text/css">
.st0{fill:#FFFFFF;}
</style>
<g>
<path class="st0" d="M7.8,6.3H0V1.7h20.9v4.7h-7.8v23.3H7.8V6.3z"/>
<path class="st0" d="M29.7,25.9c2,0,4-0.3,6.3-1l0.8,3.9c-2.3,0.9-5.1,1.3-7.5,1.3c-6.4,0-8.7-3-8.7-7.9v-5.4c0-4.3,1.9-8,8.5-8
s8,3.8,8,8.2v4.4H25.7v1.1C25.7,24.9,26.6,25.9,29.7,25.9z M25.7,17.3h6.5v-1c0-1.9-0.6-3.3-3.1-3.3s-3.4,1.3-3.4,3.3V17.3z"/>
<path class="st0" d="M52.3,13.5c-2,0.9-3.6,1.8-5.4,3v13.2h-5.1V9.2h4.3l0.3,2.3c1.1-0.8,3.6-2.2,5.4-2.7L52.3,13.5z"/>
<path class="st0" d="M66.3,13.5c-2,0.9-3.6,1.8-5.4,3v13.2h-5.1V9.2h4.3l0.3,2.3c1.1-0.8,3.6-2.2,5.4-2.7L66.3,13.5z"/>
<path class="st0" d="M84.8,29.7h-4.2l-0.4-1.4c-1.8,1.2-4,1.8-6.1,1.8c-3.7,0-5.3-2.6-5.3-6.1c0-4.2,1.8-5.8,6-5.8h4.9v-2.1
c0-2.3-0.6-3.1-3.9-3.1c-1.8,0-3.9,0.3-5.7,0.6l-0.6-3.9c1.9-0.6,4.7-1,7-1c6.4,0,8.3,2.3,8.3,7.4V29.7z M79.6,21.9h-3.8
c-1.7,0-2.1,0.5-2.1,2c0,1.4,0.5,2.1,2.1,2.1c1.5,0,2.9-0.5,3.9-1V21.9z"/>
<path class="st0" d="M102,4.5c-1-0.2-2.1-0.3-2.9-0.3c-2,0-2.3,0.9-2.3,2.4v2.6h5.2l-0.3,4.1h-4.9v16.4h-5.1V13.3h-3.3V9.2h3.3V6.3
c0-4.2,2-6.3,6.5-6.3c1.6,0,3.1,0.2,4.4,0.6L102,4.5z"/>
<path class="st0" d="M113.1,30.1c-7,0-8.9-3.9-8.9-8.1v-5.2c0-4.2,1.9-8.1,8.9-8.1s8.9,3.9,8.9,8.1V22
C122,26.2,120.1,30.1,113.1,30.1z M113.1,13.1c-2.7,0-3.8,1.2-3.8,3.5v5.5c0,2.3,1.1,3.5,3.8,3.5s3.8-1.2,3.8-3.5v-5.5
C116.9,14.4,115.8,13.1,113.1,13.1z"/>
<path class="st0" d="M137.5,13.5c-2,0.9-3.6,1.8-5.4,3v13.2H127V9.2h4.3l0.3,2.3c1.1-0.8,3.6-2.2,5.4-2.7L137.5,13.5z"/>
<path class="st0" d="M153,29.7V15.4c0-1.1-0.5-1.6-1.6-1.6c-1.3,0-3.5,0.8-5.3,1.7v14.2H141V9.2h3.9l0.5,1.7
c2.6-1.3,5.8-2.1,8.2-2.1c2,0,3.2,0.8,3.9,2.2c2.5-1.3,5.8-2.2,8.2-2.2c3.4,0,4.6,2.4,4.6,6v14.8h-5.1V15.4c0-1.1-0.5-1.6-1.6-1.6
c-1.3,0-3.7,0.8-5.3,1.7v14.2H153z"/>
<path class="st0" d="M185.6,1.7h16.5v3.2h-12.9v8.8h11.9v3.2h-11.9v9.5h12.9v3.2h-16.5V1.7z"/>
<path class="st0" d="M220.4,29.7V14c0-1.3-0.7-1.9-2-1.9c-1.5,0-4.7,0.9-6.8,2.1v15.5h-3.5V9.2h2.9l0.3,1.8
c2.3-1.1,5.8-2.2,8.2-2.2c3.3,0,4.5,2.1,4.5,5.2v15.7H220.4z"/>
<path class="st0" d="M241.1,29.3c-1.3,0.5-2.8,0.8-4.3,0.8c-3.4,0-5.1-1.3-5.1-4.7V12.1h-3.6V9.2h3.6v-5l3.5-0.5v5.5h5.8l-0.3,2.9
h-5.5v12.7c0,1.5,0.2,2.3,2.1,2.3c1,0,2-0.2,3.3-0.5L241.1,29.3z"/>
<path class="st0" d="M253.3,27.1c2,0,4.2-0.4,6.5-1l0.5,2.8c-1.9,0.7-4.7,1.2-7.2,1.2c-6,0-8.1-2.9-8.1-7.5v-6.1
c0-4.2,1.9-7.6,8-7.6c6,0,7.7,3.5,7.7,7.7v4.3h-12.2v1.7C248.4,25.8,249.3,27.1,253.3,27.1z M248.4,17.9h8.8v-1.7
c0-2.9-1-4.5-4.3-4.5c-3.3,0-4.5,1.6-4.5,4.5V17.9z"/>
<path class="st0" d="M275.5,12c-1.9,0.9-4.2,2.4-5.8,3.5v14.1h-3.5V9.2h3.1l0.2,2.9c1.5-1.2,3.6-2.4,5.6-3.3L275.5,12z"/>
<path class="st0" d="M295.1,23.4c0,4.1-1.8,6.7-6.6,6.7c-1.8,0-4.2-0.3-5.8-0.6v8.5l-3.5,0.5V9.2h3l0.3,1.8
c1.7-1.3,4.1-2.3,6.8-2.3c4,0,6,2.1,6,6.3V23.4z M282.6,26.3c1.9,0.4,4.2,0.6,5.6,0.6c2.4,0,3.3-1.1,3.3-3.6V15
c0-2.1-0.7-3.2-3.2-3.2c-2,0-4.3,1.1-5.8,2.4V26.3z"/>
<path class="st0" d="M310.4,12c-1.9,0.9-4.2,2.4-5.8,3.5v14.1h-3.5V9.2h3.1l0.2,2.9c1.5-1.2,3.6-2.4,5.6-3.3L310.4,12z"/>
<path class="st0" d="M314,5.9V0.8h3.5v5.1H314z M314,29.7V9.2h3.5v20.5H314z"/>
<path class="st0" d="M329.9,30.1c-2.1,0-4.9-0.5-6.5-1.1l0.5-2.8c1.8,0.5,4.1,0.8,5.8,0.8c3.2,0,3.8-0.6,3.8-2.8s-0.2-2.4-4.3-3.4
c-5.1-1.3-5.5-2.3-5.5-6.6c0-3.8,1.7-5.5,7.1-5.5c2,0,4.1,0.3,5.8,0.7l-0.3,2.9c-1.7-0.3-4-0.6-5.7-0.6c-3,0-3.4,0.7-3.4,2.6
c0,2.3,0,2.7,3.5,3.5c5.9,1.5,6.3,2.2,6.3,6.3C337,28.1,335.7,30.1,329.9,30.1z"/>
<path class="st0" d="M350,27.1c2,0,4.2-0.4,6.5-1l0.5,2.8c-1.9,0.7-4.7,1.2-7.2,1.2c-6,0-8.1-2.9-8.1-7.5v-6.1c0-4.2,1.9-7.6,8-7.6
c6,0,7.7,3.5,7.7,7.7v4.3h-12.2v1.7C345.2,25.8,346,27.1,350,27.1z M345.2,17.9h8.8v-1.7c0-2.9-1-4.5-4.3-4.5
c-3.3,0-4.5,1.6-4.5,4.5V17.9z"/>
</g>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 250 60">
<g fill="#FFFFFF">
<path d="M81.78 19.39h-8.89v-5.31H96.7v5.31h-8.9v26.53h-6z"/>
<path d="M102.19 41.62a24.39 24.39 0 0 0 7.12-1.1l.91 4.4a25 25 0 0 1-8.56 1.48c-7.31 0-9.85-3.39-9.85-9v-6.16c0-4.92 2.2-9.08 9.66-9.08s9.13 4.35 9.13 9.37v5h-13v1.2c.05 2.79 1.05 3.89 4.59 3.89zm-4.54-9.8h7.41v-1.15c0-2.2-.67-3.73-3.54-3.73s-3.87 1.53-3.87 3.73z"/>
<path d="M126.19 27.51a45.65 45.65 0 0 0-6.19 3.4v15h-5.83V22.64h4.92l.38 2.58a26.09 26.09 0 0 1 6.12-3.06z"/>
<path d="M140.43 27.51a45.65 45.65 0 0 0-6.17 3.39v15h-5.83V22.64h4.92l.38 2.58a26.09 26.09 0 0 1 6.12-3.06z"/>
<path d="M159.94 45.92h-4.78l-.43-1.58a12.73 12.73 0 0 1-6.93 2.06c-4.25 0-6.07-2.92-6.07-6.93 0-4.73 2.06-6.55 6.79-6.55h5.59v-2.44c0-2.58-.72-3.49-4.45-3.49a32.53 32.53 0 0 0-6.45.72l-.72-4.45a30.38 30.38 0 0 1 8-1.1c7.31 0 9.47 2.58 9.47 8.41zm-5.83-8.8h-4.3c-1.91 0-2.44.53-2.44 2.29s.53 2.34 2.34 2.34a9.18 9.18 0 0 0 4.4-1.2z"/>
<path d="M177.86 17.33a17.11 17.11 0 0 0-3.35-.38c-2.29 0-2.63 1-2.63 2.77v2.92h5.93l-.33 4.64h-5.59v18.64h-5.83V27.27h-3.73v-4.63h3.73v-3.25c0-4.83 2.25-7.22 7.41-7.22a18.47 18.47 0 0 1 5 .67z"/>
<path d="M189.24 46.4c-8 0-10.13-4.4-10.13-9.18v-5.88c0-4.78 2.15-9.18 10.13-9.18s10.13 4.4 10.13 9.18v5.88c.01 4.78-2.15 9.18-10.13 9.18zm0-19.27c-3.11 0-4.3 1.39-4.3 4v6.26c0 2.63 1.2 4 4.3 4s4.3-1.39 4.3-4v-6.24c0-2.63-1.19-4.02-4.3-4.02z"/>
<path d="M214.38 27.51a45.65 45.65 0 0 0-6.17 3.39v15h-5.83V22.64h4.92l.38 2.58a26.08 26.08 0 0 1 6.12-3.06z"/>
<path d="M230.4 45.92V29.66c0-1.24-.53-1.86-1.86-1.86a16.08 16.08 0 0 0-6.07 2v16.12h-5.83V22.64h4.45l.57 2a23.32 23.32 0 0 1 9.34-2.48 4.42 4.42 0 0 1 4.4 2.49 22.83 22.83 0 0 1 9.37-2.49c3.87 0 5.26 2.72 5.26 6.88v16.88h-5.83V29.66c0-1.24-.53-1.86-1.86-1.86a15.43 15.43 0 0 0-6.07 2v16.12z"/>
<path d="M18.2 10.57l16.4 9.47v18.94l-16.4-9.47V10.57z"/>
<path d="M36.4 20.04v18.94l16.4-9.47V10.57l-16.4 9.47z"/>
<path d="M0 0v18.94l16.4 9.47V9.47L0 0z"/>
<path d="M18.2 50.53L34.6 60V41.06l-16.4-9.47v18.94z"/>
<path d="M81.77 51.63h4.8v.94h-3.75v2.56h3.48v.94h-3.48v2.77h3.76v.94h-4.81z"/>
<path d="M90.11 52.85v6.95h-1v-8.17h1.45l3.55 7v-7h1v8.17h-1.44z"/>
<path d="M99.56 52.58h-2.43v-.94h5.93v.94h-2.44v7.22h-1.06z"/>
<path d="M105.07 51.63h4.8v.94h-3.75v2.56h3.48v.94h-3.48v2.77h3.76v.94h-4.82z"/>
<path d="M115.46 56.84h-2v3h-1.05v-8.21h3.11c1.75 0 2.37.76 2.37 2v1.18a1.72 1.72 0 0 1-1.3 1.9l2.12 3.08h-1.21zm0-4.27h-2v3.33h2c1 0 1.35-.28 1.35-1.08v-1.16c.03-.81-.32-1.08-1.32-1.08z"/>
<path d="M120.88 51.63h3c1.75 0 2.37.76 2.37 2v1.21c0 1.26-.61 2-2.37 2h-1.9v2.96h-1.05zm2.92.94h-1.86v3.36h1.86c1 0 1.35-.28 1.35-1.08v-1.2c0-.8-.34-1.07-1.35-1.07z"/>
<path d="M131.49 56.84h-2v3h-1.05v-8.21h3.11c1.75 0 2.37.76 2.37 2v1.18a1.72 1.72 0 0 1-1.3 1.9l2.12 3.08h-1.21zm0-4.27h-2v3.33h2c1 0 1.35-.28 1.35-1.08v-1.16c.02-.81-.32-1.08-1.33-1.08z"/>
<path d="M138 59.8h-1v-8.17h1z"/>
<path d="M143 59.92a7 7 0 0 1-2.43-.43l.17-.86A7.75 7.75 0 0 0 143 59c1.31 0 1.58-.34 1.58-1.27 0-1.1 0-1.2-1.69-1.58-2-.44-2.21-.82-2.21-2.51 0-1.42.59-2.11 2.61-2.11a9.3 9.3 0 0 1 2.21.27l-.09.89a10 10 0 0 0-2.1-.23c-1.34 0-1.58.27-1.58 1.21 0 1.13 0 1.18 1.62 1.58 2.17.54 2.28.86 2.28 2.45.04 1.41-.38 2.22-2.63 2.22z"/>
<path d="M148.23 51.63H153v.94h-3.75v2.56h3.48v.94h-3.48v2.77h3.76v.94h-4.82z"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 4.0 KiB

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 93 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 89 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 214 KiB

Some files were not shown because too many files have changed in this diff Show More