VaporShell.S3.Classes.ps1

using namespace System
using namespace System.Collections
using namespace System.Collections.Generic
using namespace System.IO
using namespace System.Management.Automation
[CmdletBinding()]
Param()

Write-Verbose "Importing class 'S3AccessPointPublicAccessBlockConfiguration'"

class S3AccessPointPublicAccessBlockConfiguration : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSS3AccessPointPublicAccessBlockConfiguration'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-accesspoint-publicaccessblockconfiguration.html'

    hidden [object] $_blockPublicAcls
    hidden [object] $_ignorePublicAcls
    hidden [object] $_blockPublicPolicy
    hidden [object] $_restrictPublicBuckets

    [bool] $BlockPublicAcls
    [bool] $IgnorePublicAcls
    [bool] $BlockPublicPolicy
    [bool] $RestrictPublicBuckets

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name BlockPublicAcls -Value {
            $this._blockPublicAcls
        } -SecondValue {
            param([ValidateType(([bool], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._blockPublicAcls = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name IgnorePublicAcls -Value {
            $this._ignorePublicAcls
        } -SecondValue {
            param([ValidateType(([bool], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._ignorePublicAcls = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name BlockPublicPolicy -Value {
            $this._blockPublicPolicy
        } -SecondValue {
            param([ValidateType(([bool], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._blockPublicPolicy = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name RestrictPublicBuckets -Value {
            $this._restrictPublicBuckets
        } -SecondValue {
            param([ValidateType(([bool], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._restrictPublicBuckets = $value
        }
    }

    S3AccessPointPublicAccessBlockConfiguration() : base() {}
    S3AccessPointPublicAccessBlockConfiguration([IDictionary] $props) : base($props) {}
    S3AccessPointPublicAccessBlockConfiguration([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'S3StorageLensPrefixLevelStorageMetrics'"

class S3StorageLensPrefixLevelStorageMetrics : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSS3StorageLensPrefixLevelStorageMetrics'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-storagelens-prefixlevelstoragemetrics.html'

    hidden [object] $_isEnabled
    hidden [object] $_selectionCriteria

    [bool] $IsEnabled
    [S3StorageLensSelectionCriteria] $SelectionCriteria

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name IsEnabled -Value {
            $this._isEnabled
        } -SecondValue {
            param([ValidateType(([bool], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._isEnabled = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name SelectionCriteria -Value {
            $this._selectionCriteria
        } -SecondValue {
            param([ValidateType(([S3StorageLensSelectionCriteria], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._selectionCriteria = $value
        }
    }

    S3StorageLensPrefixLevelStorageMetrics() : base() {}
    S3StorageLensPrefixLevelStorageMetrics([IDictionary] $props) : base($props) {}
    S3StorageLensPrefixLevelStorageMetrics([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'S3BucketOwnershipControls'"

class S3BucketOwnershipControls : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSS3BucketOwnershipControls'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-ownershipcontrols.html'

    hidden [object] $_rules

    [S3BucketOwnershipControlsRule[]] $Rules

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name Rules -Value {
            $this._rules
        } -SecondValue {
            param([ValidateType(([S3BucketOwnershipControlsRule], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this._rules = $value
        }
    }

    S3BucketOwnershipControls() : base() {}
    S3BucketOwnershipControls([IDictionary] $props) : base($props) {}
    S3BucketOwnershipControls([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'S3BucketReplicaModifications'"

class S3BucketReplicaModifications : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSS3BucketReplicaModifications'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-replicamodifications.html'

    hidden [object] $_status

    [string] $Status

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name Status -Value {
            $this._status
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._status = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
    }

    S3BucketReplicaModifications() : base() {}
    S3BucketReplicaModifications([IDictionary] $props) : base($props) {}
    S3BucketReplicaModifications([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'S3BucketCorsRule'"

class S3BucketCorsRule : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSS3BucketCorsRule'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-cors-corsrule.html'

    hidden [object] $_allowedHeaders
    hidden [object] $_allowedMethods
    hidden [object] $_allowedOrigins
    hidden [object] $_exposedHeaders
    hidden [object] $_id
    hidden [object] $_maxAge

    [string[]] $AllowedHeaders
    [string[]] $AllowedMethods
    [string[]] $AllowedOrigins
    [string[]] $ExposedHeaders
    [string] $Id
    [int] $MaxAge

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name AllowedHeaders -Value {
            $this._allowedHeaders
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this._allowedHeaders = @($value)
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name AllowedMethods -Value {
            $this._allowedMethods
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this._allowedMethods = @($value)
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name AllowedOrigins -Value {
            $this._allowedOrigins
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this._allowedOrigins = @($value)
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name ExposedHeaders -Value {
            $this._exposedHeaders
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this._exposedHeaders = @($value)
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Id -Value {
            $this._id
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._id = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name MaxAge -Value {
            $this._maxAge
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._maxAge = if ($cast = $value -as [int]) {
                $cast
            }
            else {
                $value
            }
        }
    }

    S3BucketCorsRule() : base() {}
    S3BucketCorsRule([IDictionary] $props) : base($props) {}
    S3BucketCorsRule([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'S3BucketDestination'"

class S3BucketDestination : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSS3BucketDestination'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-destination.html'

    hidden [object] $_bucketAccountId
    hidden [object] $_bucketArn
    hidden [object] $_format
    hidden [object] $_prefix

    [string] $BucketAccountId
    [string] $BucketArn
    [string] $Format
    [string] $Prefix

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name BucketAccountId -Value {
            $this._bucketAccountId
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._bucketAccountId = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name BucketArn -Value {
            $this._bucketArn
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._bucketArn = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Format -Value {
            $this._format
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._format = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Prefix -Value {
            $this._prefix
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._prefix = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
    }

    S3BucketDestination() : base() {}
    S3BucketDestination([IDictionary] $props) : base($props) {}
    S3BucketDestination([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'S3BucketOwnershipControlsRule'"

class S3BucketOwnershipControlsRule : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSS3BucketOwnershipControlsRule'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-ownershipcontrolsrule.html'

    hidden [object] $_objectOwnership

    [string] $ObjectOwnership

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name ObjectOwnership -Value {
            $this._objectOwnership
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._objectOwnership = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
    }

    S3BucketOwnershipControlsRule() : base() {}
    S3BucketOwnershipControlsRule([IDictionary] $props) : base($props) {}
    S3BucketOwnershipControlsRule([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'S3BucketAccessControlTranslation'"

class S3BucketAccessControlTranslation : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSS3BucketAccessControlTranslation'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-accesscontroltranslation.html'

    hidden [object] $_owner

    [string] $Owner

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name Owner -Value {
            $this._owner
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._owner = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
    }

    S3BucketAccessControlTranslation() : base() {}
    S3BucketAccessControlTranslation([IDictionary] $props) : base($props) {}
    S3BucketAccessControlTranslation([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'S3BucketVersioningConfiguration'"

class S3BucketVersioningConfiguration : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSS3BucketVersioningConfiguration'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-versioningconfig.html'

    hidden [object] $_status

    [string] $Status

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name Status -Value {
            $this._status
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._status = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
    }

    S3BucketVersioningConfiguration() : base() {}
    S3BucketVersioningConfiguration([IDictionary] $props) : base($props) {}
    S3BucketVersioningConfiguration([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'S3BucketReplicationTime'"

class S3BucketReplicationTime : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSS3BucketReplicationTime'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-replicationtime.html'

    hidden [object] $_status
    hidden [object] $_time

    [string] $Status
    [S3BucketReplicationTimeValue] $Time

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name Status -Value {
            $this._status
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._status = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Time -Value {
            $this._time
        } -SecondValue {
            param([ValidateType(([S3BucketReplicationTimeValue], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._time = $value
        }
    }

    S3BucketReplicationTime() : base() {}
    S3BucketReplicationTime([IDictionary] $props) : base($props) {}
    S3BucketReplicationTime([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'S3BucketServerSideEncryptionByDefault'"

class S3BucketServerSideEncryptionByDefault : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSS3BucketServerSideEncryptionByDefault'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-serversideencryptionbydefault.html'

    hidden [object] $_kMSMasterKeyID
    hidden [object] $_sSEAlgorithm

    [string] $KMSMasterKeyID
    [string] $SSEAlgorithm

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name KMSMasterKeyID -Value {
            $this._kMSMasterKeyID
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._kMSMasterKeyID = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name SSEAlgorithm -Value {
            $this._sSEAlgorithm
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._sSEAlgorithm = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
    }

    S3BucketServerSideEncryptionByDefault() : base() {}
    S3BucketServerSideEncryptionByDefault([IDictionary] $props) : base($props) {}
    S3BucketServerSideEncryptionByDefault([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'S3StorageLensSelectionCriteria'"

class S3StorageLensSelectionCriteria : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSS3StorageLensSelectionCriteria'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-storagelens-selectioncriteria.html'

    hidden [object] $_maxDepth
    hidden [object] $_delimiter
    hidden [object] $_minStorageBytesPercentage

    [int] $MaxDepth
    [string] $Delimiter
    [double] $MinStorageBytesPercentage

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name MaxDepth -Value {
            $this._maxDepth
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._maxDepth = if ($cast = $value -as [int]) {
                $cast
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Delimiter -Value {
            $this._delimiter
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._delimiter = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name MinStorageBytesPercentage -Value {
            $this._minStorageBytesPercentage
        } -SecondValue {
            param([ValidateType(([double], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._minStorageBytesPercentage = $value
        }
    }

    S3StorageLensSelectionCriteria() : base() {}
    S3StorageLensSelectionCriteria([IDictionary] $props) : base($props) {}
    S3StorageLensSelectionCriteria([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'S3BucketTiering'"

class S3BucketTiering : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSS3BucketTiering'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-tiering.html'

    hidden [object] $_accessTier
    hidden [object] $_days

    [string] $AccessTier
    [int] $Days

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name AccessTier -Value {
            $this._accessTier
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._accessTier = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Days -Value {
            $this._days
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._days = if ($cast = $value -as [int]) {
                $cast
            }
            else {
                $value
            }
        }
    }

    S3BucketTiering() : base() {}
    S3BucketTiering([IDictionary] $props) : base($props) {}
    S3BucketTiering([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'S3BucketSseKmsEncryptedObjects'"

class S3BucketSseKmsEncryptedObjects : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSS3BucketSseKmsEncryptedObjects'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-ssekmsencryptedobjects.html'

    hidden [object] $_status

    [string] $Status

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name Status -Value {
            $this._status
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._status = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
    }

    S3BucketSseKmsEncryptedObjects() : base() {}
    S3BucketSseKmsEncryptedObjects([IDictionary] $props) : base($props) {}
    S3BucketSseKmsEncryptedObjects([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'S3BucketQueueConfiguration'"

class S3BucketQueueConfiguration : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSS3BucketQueueConfiguration'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfig-queueconfig.html'

    hidden [object] $_event
    hidden [object] $_filter
    hidden [object] $_queue

    [string] $Event
    [S3BucketNotificationFilter] $Filter
    [string] $Queue

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name Event -Value {
            $this._event
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._event = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Filter -Value {
            $this._filter
        } -SecondValue {
            param([ValidateType(([S3BucketNotificationFilter], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._filter = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Queue -Value {
            $this._queue
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._queue = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
    }

    S3BucketQueueConfiguration() : base() {}
    S3BucketQueueConfiguration([IDictionary] $props) : base($props) {}
    S3BucketQueueConfiguration([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'S3BucketObjectLockConfiguration'"

class S3BucketObjectLockConfiguration : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSS3BucketObjectLockConfiguration'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-objectlockconfiguration.html'

    hidden [object] $_objectLockEnabled
    hidden [object] $_rule

    [string] $ObjectLockEnabled
    [S3BucketObjectLockRule] $Rule

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name ObjectLockEnabled -Value {
            $this._objectLockEnabled
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._objectLockEnabled = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Rule -Value {
            $this._rule
        } -SecondValue {
            param([ValidateType(([S3BucketObjectLockRule], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._rule = $value
        }
    }

    S3BucketObjectLockConfiguration() : base() {}
    S3BucketObjectLockConfiguration([IDictionary] $props) : base($props) {}
    S3BucketObjectLockConfiguration([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'S3StorageLensActivityMetrics'"

class S3StorageLensActivityMetrics : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSS3StorageLensActivityMetrics'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-storagelens-activitymetrics.html'

    hidden [object] $_isEnabled

    [bool] $IsEnabled

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name IsEnabled -Value {
            $this._isEnabled
        } -SecondValue {
            param([ValidateType(([bool], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._isEnabled = $value
        }
    }

    S3StorageLensActivityMetrics() : base() {}
    S3StorageLensActivityMetrics([IDictionary] $props) : base($props) {}
    S3StorageLensActivityMetrics([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'S3StorageLensBucketLevel'"

class S3StorageLensBucketLevel : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSS3StorageLensBucketLevel'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-storagelens-bucketlevel.html'

    hidden [object] $_activityMetrics
    hidden [object] $_prefixLevel

    [S3StorageLensActivityMetrics] $ActivityMetrics
    [S3StorageLensPrefixLevel] $PrefixLevel

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name ActivityMetrics -Value {
            $this._activityMetrics
        } -SecondValue {
            param([ValidateType(([S3StorageLensActivityMetrics], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._activityMetrics = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name PrefixLevel -Value {
            $this._prefixLevel
        } -SecondValue {
            param([ValidateType(([S3StorageLensPrefixLevel], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._prefixLevel = $value
        }
    }

    S3StorageLensBucketLevel() : base() {}
    S3StorageLensBucketLevel([IDictionary] $props) : base($props) {}
    S3StorageLensBucketLevel([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'S3StorageLensBucketsAndRegions'"

class S3StorageLensBucketsAndRegions : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSS3StorageLensBucketsAndRegions'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-storagelens-bucketsandregions.html'

    hidden [object] $_buckets
    hidden [object] $_regions

    [string[]] $Buckets
    [string[]] $Regions

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name Buckets -Value {
            $this._buckets
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this._buckets = @($value)
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Regions -Value {
            $this._regions
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this._regions = @($value)
        }
    }

    S3StorageLensBucketsAndRegions() : base() {}
    S3StorageLensBucketsAndRegions([IDictionary] $props) : base($props) {}
    S3StorageLensBucketsAndRegions([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'S3BucketAccelerateConfiguration'"

class S3BucketAccelerateConfiguration : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSS3BucketAccelerateConfiguration'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-accelerateconfiguration.html'

    hidden [object] $_accelerationStatus

    [string] $AccelerationStatus

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name AccelerationStatus -Value {
            $this._accelerationStatus
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._accelerationStatus = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
    }

    S3BucketAccelerateConfiguration() : base() {}
    S3BucketAccelerateConfiguration([IDictionary] $props) : base($props) {}
    S3BucketAccelerateConfiguration([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'S3StorageLensDataExport'"

class S3StorageLensDataExport : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSS3StorageLensDataExport'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-storagelens-dataexport.html'

    hidden [object] $_s3BucketDestination

    [S3StorageLensS3BucketDestination] $S3BucketDestination

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name S3BucketDestination -Value {
            $this._s3BucketDestination
        } -SecondValue {
            param([ValidateType(([S3StorageLensS3BucketDestination], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._s3BucketDestination = $value
        }
    }

    S3StorageLensDataExport() : base() {}
    S3StorageLensDataExport([IDictionary] $props) : base($props) {}
    S3StorageLensDataExport([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'S3BucketIntelligentTieringConfiguration'"

class S3BucketIntelligentTieringConfiguration : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSS3BucketIntelligentTieringConfiguration'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-intelligenttieringconfiguration.html'

    hidden [object] $_id
    hidden [object] $_prefix
    hidden [object] $_status
    hidden [object] $_tagFilters
    hidden [object] $_tierings

    [string] $Id
    [string] $Prefix
    [string] $Status
    [S3BucketTagFilter[]] $TagFilters
    [S3BucketTiering[]] $Tierings

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name Id -Value {
            $this._id
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._id = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Prefix -Value {
            $this._prefix
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._prefix = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Status -Value {
            $this._status
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._status = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name TagFilters -Value {
            $this._tagFilters
        } -SecondValue {
            param([ValidateType(([S3BucketTagFilter], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this._tagFilters = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Tierings -Value {
            $this._tierings
        } -SecondValue {
            param([ValidateType(([S3BucketTiering], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this._tierings = $value
        }
    }

    S3BucketIntelligentTieringConfiguration() : base() {}
    S3BucketIntelligentTieringConfiguration([IDictionary] $props) : base($props) {}
    S3BucketIntelligentTieringConfiguration([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'S3BucketAbortIncompleteMultipartUpload'"

class S3BucketAbortIncompleteMultipartUpload : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSS3BucketAbortIncompleteMultipartUpload'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-abortincompletemultipartupload.html'

    hidden [object] $_daysAfterInitiation

    [int] $DaysAfterInitiation

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name DaysAfterInitiation -Value {
            $this._daysAfterInitiation
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._daysAfterInitiation = if ($cast = $value -as [int]) {
                $cast
            }
            else {
                $value
            }
        }
    }

    S3BucketAbortIncompleteMultipartUpload() : base() {}
    S3BucketAbortIncompleteMultipartUpload([IDictionary] $props) : base($props) {}
    S3BucketAbortIncompleteMultipartUpload([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'S3BucketDeleteMarkerReplication'"

class S3BucketDeleteMarkerReplication : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSS3BucketDeleteMarkerReplication'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-deletemarkerreplication.html'

    hidden [object] $_status

    [string] $Status

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name Status -Value {
            $this._status
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._status = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
    }

    S3BucketDeleteMarkerReplication() : base() {}
    S3BucketDeleteMarkerReplication([IDictionary] $props) : base($props) {}
    S3BucketDeleteMarkerReplication([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'S3StorageLensAwsOrg'"

class S3StorageLensAwsOrg : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSS3StorageLensAwsOrg'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-storagelens-awsorg.html'

    hidden [object] $_arn

    [string] $Arn

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name Arn -Value {
            $this._arn
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._arn = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
    }

    S3StorageLensAwsOrg() : base() {}
    S3StorageLensAwsOrg([IDictionary] $props) : base($props) {}
    S3StorageLensAwsOrg([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'S3BucketPublicAccessBlockConfiguration'"

class S3BucketPublicAccessBlockConfiguration : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSS3BucketPublicAccessBlockConfiguration'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-publicaccessblockconfiguration.html'

    hidden [object] $_blockPublicAcls
    hidden [object] $_blockPublicPolicy
    hidden [object] $_ignorePublicAcls
    hidden [object] $_restrictPublicBuckets

    [bool] $BlockPublicAcls
    [bool] $BlockPublicPolicy
    [bool] $IgnorePublicAcls
    [bool] $RestrictPublicBuckets

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name BlockPublicAcls -Value {
            $this._blockPublicAcls
        } -SecondValue {
            param([ValidateType(([bool], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._blockPublicAcls = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name BlockPublicPolicy -Value {
            $this._blockPublicPolicy
        } -SecondValue {
            param([ValidateType(([bool], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._blockPublicPolicy = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name IgnorePublicAcls -Value {
            $this._ignorePublicAcls
        } -SecondValue {
            param([ValidateType(([bool], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._ignorePublicAcls = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name RestrictPublicBuckets -Value {
            $this._restrictPublicBuckets
        } -SecondValue {
            param([ValidateType(([bool], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._restrictPublicBuckets = $value
        }
    }

    S3BucketPublicAccessBlockConfiguration() : base() {}
    S3BucketPublicAccessBlockConfiguration([IDictionary] $props) : base($props) {}
    S3BucketPublicAccessBlockConfiguration([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'S3BucketReplicationRule'"

class S3BucketReplicationRule : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSS3BucketReplicationRule'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-replicationconfiguration-rules.html'

    hidden [object] $_deleteMarkerReplication
    hidden [object] $_destination
    hidden [object] $_filter
    hidden [object] $_id
    hidden [object] $_prefix
    hidden [object] $_priority
    hidden [object] $_sourceSelectionCriteria
    hidden [object] $_status

    [S3BucketDeleteMarkerReplication] $DeleteMarkerReplication
    [S3BucketReplicationDestination] $Destination
    [S3BucketReplicationRuleFilter] $Filter
    [string] $Id
    [string] $Prefix
    [int] $Priority
    [S3BucketSourceSelectionCriteria] $SourceSelectionCriteria
    [string] $Status

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name DeleteMarkerReplication -Value {
            $this._deleteMarkerReplication
        } -SecondValue {
            param([ValidateType(([S3BucketDeleteMarkerReplication], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._deleteMarkerReplication = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Destination -Value {
            $this._destination
        } -SecondValue {
            param([ValidateType(([S3BucketReplicationDestination], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._destination = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Filter -Value {
            $this._filter
        } -SecondValue {
            param([ValidateType(([S3BucketReplicationRuleFilter], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._filter = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Id -Value {
            $this._id
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._id = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Prefix -Value {
            $this._prefix
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._prefix = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Priority -Value {
            $this._priority
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._priority = if ($cast = $value -as [int]) {
                $cast
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name SourceSelectionCriteria -Value {
            $this._sourceSelectionCriteria
        } -SecondValue {
            param([ValidateType(([S3BucketSourceSelectionCriteria], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._sourceSelectionCriteria = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Status -Value {
            $this._status
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._status = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
    }

    S3BucketReplicationRule() : base() {}
    S3BucketReplicationRule([IDictionary] $props) : base($props) {}
    S3BucketReplicationRule([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'S3StorageLensPrefixLevel'"

class S3StorageLensPrefixLevel : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSS3StorageLensPrefixLevel'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-storagelens-prefixlevel.html'

    hidden [object] $_storageMetrics

    [S3StorageLensPrefixLevelStorageMetrics] $StorageMetrics

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name StorageMetrics -Value {
            $this._storageMetrics
        } -SecondValue {
            param([ValidateType(([S3StorageLensPrefixLevelStorageMetrics], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._storageMetrics = $value
        }
    }

    S3StorageLensPrefixLevel() : base() {}
    S3StorageLensPrefixLevel([IDictionary] $props) : base($props) {}
    S3StorageLensPrefixLevel([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'S3BucketSourceSelectionCriteria'"

class S3BucketSourceSelectionCriteria : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSS3BucketSourceSelectionCriteria'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-sourceselectioncriteria.html'

    hidden [object] $_replicaModifications
    hidden [object] $_sseKmsEncryptedObjects

    [S3BucketReplicaModifications] $ReplicaModifications
    [S3BucketSseKmsEncryptedObjects] $SseKmsEncryptedObjects

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name ReplicaModifications -Value {
            $this._replicaModifications
        } -SecondValue {
            param([ValidateType(([S3BucketReplicaModifications], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._replicaModifications = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name SseKmsEncryptedObjects -Value {
            $this._sseKmsEncryptedObjects
        } -SecondValue {
            param([ValidateType(([S3BucketSseKmsEncryptedObjects], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._sseKmsEncryptedObjects = $value
        }
    }

    S3BucketSourceSelectionCriteria() : base() {}
    S3BucketSourceSelectionCriteria([IDictionary] $props) : base($props) {}
    S3BucketSourceSelectionCriteria([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'S3BucketStorageClassAnalysis'"

class S3BucketStorageClassAnalysis : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSS3BucketStorageClassAnalysis'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-storageclassanalysis.html'

    hidden [object] $_dataExport

    [S3BucketDataExport] $DataExport

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name DataExport -Value {
            $this._dataExport
        } -SecondValue {
            param([ValidateType(([S3BucketDataExport], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._dataExport = $value
        }
    }

    S3BucketStorageClassAnalysis() : base() {}
    S3BucketStorageClassAnalysis([IDictionary] $props) : base($props) {}
    S3BucketStorageClassAnalysis([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'S3AccessPointVpcConfiguration'"

class S3AccessPointVpcConfiguration : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSS3AccessPointVpcConfiguration'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-accesspoint-vpcconfiguration.html'

    hidden [object] $_vpcId

    [string] $VpcId

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name VpcId -Value {
            $this._vpcId
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._vpcId = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
    }

    S3AccessPointVpcConfiguration() : base() {}
    S3AccessPointVpcConfiguration([IDictionary] $props) : base($props) {}
    S3AccessPointVpcConfiguration([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'S3BucketRedirectRule'"

class S3BucketRedirectRule : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSS3BucketRedirectRule'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-websiteconfiguration-routingrules-redirectrule.html'

    hidden [object] $_hostName
    hidden [object] $_httpRedirectCode
    hidden [object] $_protocol
    hidden [object] $_replaceKeyPrefixWith
    hidden [object] $_replaceKeyWith

    [string] $HostName
    [string] $HttpRedirectCode
    [string] $Protocol
    [string] $ReplaceKeyPrefixWith
    [string] $ReplaceKeyWith

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name HostName -Value {
            $this._hostName
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._hostName = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name HttpRedirectCode -Value {
            $this._httpRedirectCode
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._httpRedirectCode = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Protocol -Value {
            $this._protocol
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._protocol = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name ReplaceKeyPrefixWith -Value {
            $this._replaceKeyPrefixWith
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._replaceKeyPrefixWith = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name ReplaceKeyWith -Value {
            $this._replaceKeyWith
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._replaceKeyWith = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
    }

    S3BucketRedirectRule() : base() {}
    S3BucketRedirectRule([IDictionary] $props) : base($props) {}
    S3BucketRedirectRule([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'S3BucketObjectLockRule'"

class S3BucketObjectLockRule : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSS3BucketObjectLockRule'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-objectlockrule.html'

    hidden [object] $_defaultRetention

    [S3BucketDefaultRetention] $DefaultRetention

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name DefaultRetention -Value {
            $this._defaultRetention
        } -SecondValue {
            param([ValidateType(([S3BucketDefaultRetention], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._defaultRetention = $value
        }
    }

    S3BucketObjectLockRule() : base() {}
    S3BucketObjectLockRule([IDictionary] $props) : base($props) {}
    S3BucketObjectLockRule([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'S3BucketRule'"

class S3BucketRule : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSS3BucketRule'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-lifecycleconfig-rule.html'

    hidden [object] $_abortIncompleteMultipartUpload
    hidden [object] $_expirationDate
    hidden [object] $_expirationInDays
    hidden [object] $_id
    hidden [object] $_noncurrentVersionExpirationInDays
    hidden [object] $_noncurrentVersionTransition
    hidden [object] $_noncurrentVersionTransitions
    hidden [object] $_prefix
    hidden [object] $_status
    hidden [object] $_tagFilters
    hidden [object] $_transition
    hidden [object] $_transitions

    [S3BucketAbortIncompleteMultipartUpload] $AbortIncompleteMultipartUpload
    [VSTimestamp] $ExpirationDate
    [int] $ExpirationInDays
    [string] $Id
    [int] $NoncurrentVersionExpirationInDays
    [S3BucketNoncurrentVersionTransition] $NoncurrentVersionTransition
    [S3BucketNoncurrentVersionTransition[]] $NoncurrentVersionTransitions
    [string] $Prefix
    [string] $Status
    [S3BucketTagFilter[]] $TagFilters
    [S3BucketTransition] $Transition
    [S3BucketTransition[]] $Transitions

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name AbortIncompleteMultipartUpload -Value {
            $this._abortIncompleteMultipartUpload
        } -SecondValue {
            param([ValidateType(([S3BucketAbortIncompleteMultipartUpload], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._abortIncompleteMultipartUpload = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name ExpirationDate -Value {
            $this._expirationDate
        } -SecondValue {
            param([ValidateType(([VSTimestamp], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._expirationDate = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name ExpirationInDays -Value {
            $this._expirationInDays
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._expirationInDays = if ($cast = $value -as [int]) {
                $cast
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Id -Value {
            $this._id
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._id = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name NoncurrentVersionExpirationInDays -Value {
            $this._noncurrentVersionExpirationInDays
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._noncurrentVersionExpirationInDays = if ($cast = $value -as [int]) {
                $cast
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name NoncurrentVersionTransition -Value {
            $this._noncurrentVersionTransition
        } -SecondValue {
            param([ValidateType(([S3BucketNoncurrentVersionTransition], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._noncurrentVersionTransition = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name NoncurrentVersionTransitions -Value {
            $this._noncurrentVersionTransitions
        } -SecondValue {
            param([ValidateType(([S3BucketNoncurrentVersionTransition], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this._noncurrentVersionTransitions = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Prefix -Value {
            $this._prefix
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._prefix = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Status -Value {
            $this._status
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._status = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name TagFilters -Value {
            $this._tagFilters
        } -SecondValue {
            param([ValidateType(([S3BucketTagFilter], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this._tagFilters = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Transition -Value {
            $this._transition
        } -SecondValue {
            param([ValidateType(([S3BucketTransition], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._transition = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Transitions -Value {
            $this._transitions
        } -SecondValue {
            param([ValidateType(([S3BucketTransition], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this._transitions = $value
        }
    }

    S3BucketRule() : base() {}
    S3BucketRule([IDictionary] $props) : base($props) {}
    S3BucketRule([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'S3BucketMetricsConfiguration'"

class S3BucketMetricsConfiguration : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSS3BucketMetricsConfiguration'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-metricsconfiguration.html'

    hidden [object] $_id
    hidden [object] $_prefix
    hidden [object] $_tagFilters

    [string] $Id
    [string] $Prefix
    [S3BucketTagFilter[]] $TagFilters

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name Id -Value {
            $this._id
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._id = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Prefix -Value {
            $this._prefix
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._prefix = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name TagFilters -Value {
            $this._tagFilters
        } -SecondValue {
            param([ValidateType(([S3BucketTagFilter], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this._tagFilters = $value
        }
    }

    S3BucketMetricsConfiguration() : base() {}
    S3BucketMetricsConfiguration([IDictionary] $props) : base($props) {}
    S3BucketMetricsConfiguration([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'S3BucketDataExport'"

class S3BucketDataExport : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSS3BucketDataExport'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-dataexport.html'

    hidden [object] $_destination
    hidden [object] $_outputSchemaVersion

    [S3BucketDestination] $Destination
    [string] $OutputSchemaVersion

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name Destination -Value {
            $this._destination
        } -SecondValue {
            param([ValidateType(([S3BucketDestination], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._destination = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name OutputSchemaVersion -Value {
            $this._outputSchemaVersion
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._outputSchemaVersion = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
    }

    S3BucketDataExport() : base() {}
    S3BucketDataExport([IDictionary] $props) : base($props) {}
    S3BucketDataExport([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'S3BucketReplicationTimeValue'"

class S3BucketReplicationTimeValue : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSS3BucketReplicationTimeValue'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-replicationtimevalue.html'

    hidden [object] $_minutes

    [int] $Minutes

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name Minutes -Value {
            $this._minutes
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._minutes = if ($cast = $value -as [int]) {
                $cast
            }
            else {
                $value
            }
        }
    }

    S3BucketReplicationTimeValue() : base() {}
    S3BucketReplicationTimeValue([IDictionary] $props) : base($props) {}
    S3BucketReplicationTimeValue([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'S3BucketFilterRule'"

class S3BucketFilterRule : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSS3BucketFilterRule'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfiguration-config-filter-s3key-rules.html'

    hidden [object] $_name
    hidden [object] $_value

    [string] $Name
    [string] $Value

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name Name -Value {
            $this._name
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._name = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Value -Value {
            $this._value
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._value = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
    }

    S3BucketFilterRule() : base() {}
    S3BucketFilterRule([IDictionary] $props) : base($props) {}
    S3BucketFilterRule([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'S3BucketReplicationRuleAndOperator'"

class S3BucketReplicationRuleAndOperator : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSS3BucketReplicationRuleAndOperator'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-replicationruleandoperator.html'

    hidden [object] $_prefix
    hidden [object] $_tagFilters

    [string] $Prefix
    [S3BucketTagFilter[]] $TagFilters

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name Prefix -Value {
            $this._prefix
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._prefix = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name TagFilters -Value {
            $this._tagFilters
        } -SecondValue {
            param([ValidateType(([S3BucketTagFilter], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this._tagFilters = $value
        }
    }

    S3BucketReplicationRuleAndOperator() : base() {}
    S3BucketReplicationRuleAndOperator([IDictionary] $props) : base($props) {}
    S3BucketReplicationRuleAndOperator([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'S3BucketBucketEncryption'"

class S3BucketBucketEncryption : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSS3BucketBucketEncryption'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-bucketencryption.html'

    hidden [object] $_serverSideEncryptionConfiguration

    [S3BucketServerSideEncryptionRule[]] $ServerSideEncryptionConfiguration

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name ServerSideEncryptionConfiguration -Value {
            $this._serverSideEncryptionConfiguration
        } -SecondValue {
            param([ValidateType(([S3BucketServerSideEncryptionRule], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this._serverSideEncryptionConfiguration = $value
        }
    }

    S3BucketBucketEncryption() : base() {}
    S3BucketBucketEncryption([IDictionary] $props) : base($props) {}
    S3BucketBucketEncryption([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'S3BucketMetrics'"

class S3BucketMetrics : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSS3BucketMetrics'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-metrics.html'

    hidden [object] $_eventThreshold
    hidden [object] $_status

    [S3BucketReplicationTimeValue] $EventThreshold
    [string] $Status

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name EventThreshold -Value {
            $this._eventThreshold
        } -SecondValue {
            param([ValidateType(([S3BucketReplicationTimeValue], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._eventThreshold = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Status -Value {
            $this._status
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._status = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
    }

    S3BucketMetrics() : base() {}
    S3BucketMetrics([IDictionary] $props) : base($props) {}
    S3BucketMetrics([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'S3BucketRoutingRuleCondition'"

class S3BucketRoutingRuleCondition : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSS3BucketRoutingRuleCondition'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-websiteconfiguration-routingrules-routingrulecondition.html'

    hidden [object] $_httpErrorCodeReturnedEquals
    hidden [object] $_keyPrefixEquals

    [string] $HttpErrorCodeReturnedEquals
    [string] $KeyPrefixEquals

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name HttpErrorCodeReturnedEquals -Value {
            $this._httpErrorCodeReturnedEquals
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._httpErrorCodeReturnedEquals = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name KeyPrefixEquals -Value {
            $this._keyPrefixEquals
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._keyPrefixEquals = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
    }

    S3BucketRoutingRuleCondition() : base() {}
    S3BucketRoutingRuleCondition([IDictionary] $props) : base($props) {}
    S3BucketRoutingRuleCondition([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'S3BucketLifecycleConfiguration'"

class S3BucketLifecycleConfiguration : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSS3BucketLifecycleConfiguration'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-lifecycleconfig.html'

    hidden [object] $_rules

    [S3BucketRule[]] $Rules

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name Rules -Value {
            $this._rules
        } -SecondValue {
            param([ValidateType(([S3BucketRule], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this._rules = $value
        }
    }

    S3BucketLifecycleConfiguration() : base() {}
    S3BucketLifecycleConfiguration([IDictionary] $props) : base($props) {}
    S3BucketLifecycleConfiguration([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'S3BucketNotificationConfiguration'"

class S3BucketNotificationConfiguration : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSS3BucketNotificationConfiguration'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfig.html'

    hidden [object] $_lambdaConfigurations
    hidden [object] $_queueConfigurations
    hidden [object] $_topicConfigurations

    [S3BucketLambdaConfiguration[]] $LambdaConfigurations
    [S3BucketQueueConfiguration[]] $QueueConfigurations
    [S3BucketTopicConfiguration[]] $TopicConfigurations

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name LambdaConfigurations -Value {
            $this._lambdaConfigurations
        } -SecondValue {
            param([ValidateType(([S3BucketLambdaConfiguration], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this._lambdaConfigurations = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name QueueConfigurations -Value {
            $this._queueConfigurations
        } -SecondValue {
            param([ValidateType(([S3BucketQueueConfiguration], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this._queueConfigurations = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name TopicConfigurations -Value {
            $this._topicConfigurations
        } -SecondValue {
            param([ValidateType(([S3BucketTopicConfiguration], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this._topicConfigurations = $value
        }
    }

    S3BucketNotificationConfiguration() : base() {}
    S3BucketNotificationConfiguration([IDictionary] $props) : base($props) {}
    S3BucketNotificationConfiguration([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'S3BucketRedirectAllRequestsTo'"

class S3BucketRedirectAllRequestsTo : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSS3BucketRedirectAllRequestsTo'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-websiteconfiguration-redirectallrequeststo.html'

    hidden [object] $_hostName
    hidden [object] $_protocol

    [string] $HostName
    [string] $Protocol

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name HostName -Value {
            $this._hostName
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._hostName = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Protocol -Value {
            $this._protocol
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._protocol = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
    }

    S3BucketRedirectAllRequestsTo() : base() {}
    S3BucketRedirectAllRequestsTo([IDictionary] $props) : base($props) {}
    S3BucketRedirectAllRequestsTo([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'S3BucketS3KeyFilter'"

class S3BucketS3KeyFilter : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSS3BucketS3KeyFilter'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfiguration-config-filter-s3key.html'

    hidden [object] $_rules

    [S3BucketFilterRule[]] $Rules

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name Rules -Value {
            $this._rules
        } -SecondValue {
            param([ValidateType(([S3BucketFilterRule], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this._rules = $value
        }
    }

    S3BucketS3KeyFilter() : base() {}
    S3BucketS3KeyFilter([IDictionary] $props) : base($props) {}
    S3BucketS3KeyFilter([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'S3BucketInventoryConfiguration'"

class S3BucketInventoryConfiguration : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSS3BucketInventoryConfiguration'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-inventoryconfiguration.html'

    hidden [object] $_destination
    hidden [object] $_enabled
    hidden [object] $_id
    hidden [object] $_includedObjectVersions
    hidden [object] $_optionalFields
    hidden [object] $_prefix
    hidden [object] $_scheduleFrequency

    [S3BucketDestination] $Destination
    [bool] $Enabled
    [string] $Id
    [string] $IncludedObjectVersions
    [string[]] $OptionalFields
    [string] $Prefix
    [string] $ScheduleFrequency

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name Destination -Value {
            $this._destination
        } -SecondValue {
            param([ValidateType(([S3BucketDestination], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._destination = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Enabled -Value {
            $this._enabled
        } -SecondValue {
            param([ValidateType(([bool], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._enabled = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Id -Value {
            $this._id
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._id = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name IncludedObjectVersions -Value {
            $this._includedObjectVersions
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._includedObjectVersions = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name OptionalFields -Value {
            $this._optionalFields
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this._optionalFields = @($value)
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Prefix -Value {
            $this._prefix
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._prefix = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name ScheduleFrequency -Value {
            $this._scheduleFrequency
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._scheduleFrequency = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
    }

    S3BucketInventoryConfiguration() : base() {}
    S3BucketInventoryConfiguration([IDictionary] $props) : base($props) {}
    S3BucketInventoryConfiguration([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'S3BucketReplicationConfiguration'"

class S3BucketReplicationConfiguration : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSS3BucketReplicationConfiguration'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-replicationconfiguration.html'

    hidden [object] $_role
    hidden [object] $_rules

    [string] $Role
    [S3BucketReplicationRule[]] $Rules

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name Role -Value {
            $this._role
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._role = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Rules -Value {
            $this._rules
        } -SecondValue {
            param([ValidateType(([S3BucketReplicationRule], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this._rules = $value
        }
    }

    S3BucketReplicationConfiguration() : base() {}
    S3BucketReplicationConfiguration([IDictionary] $props) : base($props) {}
    S3BucketReplicationConfiguration([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'S3BucketCorsConfiguration'"

class S3BucketCorsConfiguration : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSS3BucketCorsConfiguration'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-cors.html'

    hidden [object] $_corsRules

    [S3BucketCorsRule[]] $CorsRules

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name CorsRules -Value {
            $this._corsRules
        } -SecondValue {
            param([ValidateType(([S3BucketCorsRule], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this._corsRules = $value
        }
    }

    S3BucketCorsConfiguration() : base() {}
    S3BucketCorsConfiguration([IDictionary] $props) : base($props) {}
    S3BucketCorsConfiguration([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'S3BucketReplicationDestination'"

class S3BucketReplicationDestination : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSS3BucketReplicationDestination'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-replicationconfiguration-rules-destination.html'

    hidden [object] $_accessControlTranslation
    hidden [object] $_account
    hidden [object] $_bucket
    hidden [object] $_encryptionConfiguration
    hidden [object] $_metrics
    hidden [object] $_replicationTime
    hidden [object] $_storageClass

    [S3BucketAccessControlTranslation] $AccessControlTranslation
    [string] $Account
    [string] $Bucket
    [S3BucketEncryptionConfiguration] $EncryptionConfiguration
    [S3BucketMetrics] $Metrics
    [S3BucketReplicationTime] $ReplicationTime
    [string] $StorageClass

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name AccessControlTranslation -Value {
            $this._accessControlTranslation
        } -SecondValue {
            param([ValidateType(([S3BucketAccessControlTranslation], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._accessControlTranslation = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Account -Value {
            $this._account
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._account = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Bucket -Value {
            $this._bucket
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._bucket = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name EncryptionConfiguration -Value {
            $this._encryptionConfiguration
        } -SecondValue {
            param([ValidateType(([S3BucketEncryptionConfiguration], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._encryptionConfiguration = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Metrics -Value {
            $this._metrics
        } -SecondValue {
            param([ValidateType(([S3BucketMetrics], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._metrics = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name ReplicationTime -Value {
            $this._replicationTime
        } -SecondValue {
            param([ValidateType(([S3BucketReplicationTime], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._replicationTime = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name StorageClass -Value {
            $this._storageClass
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._storageClass = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
    }

    S3BucketReplicationDestination() : base() {}
    S3BucketReplicationDestination([IDictionary] $props) : base($props) {}
    S3BucketReplicationDestination([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'S3BucketNoncurrentVersionTransition'"

class S3BucketNoncurrentVersionTransition : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSS3BucketNoncurrentVersionTransition'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-lifecycleconfig-rule-noncurrentversiontransition.html'

    hidden [object] $_storageClass
    hidden [object] $_transitionInDays

    [string] $StorageClass
    [int] $TransitionInDays

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name StorageClass -Value {
            $this._storageClass
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._storageClass = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name TransitionInDays -Value {
            $this._transitionInDays
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._transitionInDays = if ($cast = $value -as [int]) {
                $cast
            }
            else {
                $value
            }
        }
    }

    S3BucketNoncurrentVersionTransition() : base() {}
    S3BucketNoncurrentVersionTransition([IDictionary] $props) : base($props) {}
    S3BucketNoncurrentVersionTransition([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'S3StorageLensEncryption'"

class S3StorageLensEncryption : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSS3StorageLensEncryption'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-storagelens-encryption.html'



    hidden [void] _addAccessors() {
    }

    S3StorageLensEncryption() : base() {}
    S3StorageLensEncryption([IDictionary] $props) : base($props) {}
    S3StorageLensEncryption([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'S3BucketDefaultRetention'"

class S3BucketDefaultRetention : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSS3BucketDefaultRetention'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-defaultretention.html'

    hidden [object] $_days
    hidden [object] $_mode
    hidden [object] $_years

    [int] $Days
    [string] $Mode
    [int] $Years

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name Days -Value {
            $this._days
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._days = if ($cast = $value -as [int]) {
                $cast
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Mode -Value {
            $this._mode
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._mode = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Years -Value {
            $this._years
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._years = if ($cast = $value -as [int]) {
                $cast
            }
            else {
                $value
            }
        }
    }

    S3BucketDefaultRetention() : base() {}
    S3BucketDefaultRetention([IDictionary] $props) : base($props) {}
    S3BucketDefaultRetention([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'S3BucketNotificationFilter'"

class S3BucketNotificationFilter : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSS3BucketNotificationFilter'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfiguration-config-filter.html'

    hidden [object] $_s3Key

    [S3BucketS3KeyFilter] $S3Key

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name S3Key -Value {
            $this._s3Key
        } -SecondValue {
            param([ValidateType(([S3BucketS3KeyFilter], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._s3Key = $value
        }
    }

    S3BucketNotificationFilter() : base() {}
    S3BucketNotificationFilter([IDictionary] $props) : base($props) {}
    S3BucketNotificationFilter([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'S3BucketLambdaConfiguration'"

class S3BucketLambdaConfiguration : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSS3BucketLambdaConfiguration'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfig-lambdaconfig.html'

    hidden [object] $_event
    hidden [object] $_filter
    hidden [object] $_function

    [string] $Event
    [S3BucketNotificationFilter] $Filter
    [string] $Function

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name Event -Value {
            $this._event
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._event = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Filter -Value {
            $this._filter
        } -SecondValue {
            param([ValidateType(([S3BucketNotificationFilter], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._filter = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Function -Value {
            $this._function
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._function = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
    }

    S3BucketLambdaConfiguration() : base() {}
    S3BucketLambdaConfiguration([IDictionary] $props) : base($props) {}
    S3BucketLambdaConfiguration([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'S3BucketServerSideEncryptionRule'"

class S3BucketServerSideEncryptionRule : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSS3BucketServerSideEncryptionRule'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-serversideencryptionrule.html'

    hidden [object] $_bucketKeyEnabled
    hidden [object] $_serverSideEncryptionByDefault

    [bool] $BucketKeyEnabled
    [S3BucketServerSideEncryptionByDefault] $ServerSideEncryptionByDefault

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name BucketKeyEnabled -Value {
            $this._bucketKeyEnabled
        } -SecondValue {
            param([ValidateType(([bool], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._bucketKeyEnabled = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name ServerSideEncryptionByDefault -Value {
            $this._serverSideEncryptionByDefault
        } -SecondValue {
            param([ValidateType(([S3BucketServerSideEncryptionByDefault], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._serverSideEncryptionByDefault = $value
        }
    }

    S3BucketServerSideEncryptionRule() : base() {}
    S3BucketServerSideEncryptionRule([IDictionary] $props) : base($props) {}
    S3BucketServerSideEncryptionRule([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'S3BucketAnalyticsConfiguration'"

class S3BucketAnalyticsConfiguration : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSS3BucketAnalyticsConfiguration'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-analyticsconfiguration.html'

    hidden [object] $_id
    hidden [object] $_prefix
    hidden [object] $_storageClassAnalysis
    hidden [object] $_tagFilters

    [string] $Id
    [string] $Prefix
    [S3BucketStorageClassAnalysis] $StorageClassAnalysis
    [S3BucketTagFilter[]] $TagFilters

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name Id -Value {
            $this._id
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._id = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Prefix -Value {
            $this._prefix
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._prefix = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name StorageClassAnalysis -Value {
            $this._storageClassAnalysis
        } -SecondValue {
            param([ValidateType(([S3BucketStorageClassAnalysis], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._storageClassAnalysis = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name TagFilters -Value {
            $this._tagFilters
        } -SecondValue {
            param([ValidateType(([S3BucketTagFilter], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this._tagFilters = $value
        }
    }

    S3BucketAnalyticsConfiguration() : base() {}
    S3BucketAnalyticsConfiguration([IDictionary] $props) : base($props) {}
    S3BucketAnalyticsConfiguration([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'S3BucketLoggingConfiguration'"

class S3BucketLoggingConfiguration : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSS3BucketLoggingConfiguration'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-loggingconfig.html'

    hidden [object] $_destinationBucketName
    hidden [object] $_logFilePrefix

    [string] $DestinationBucketName
    [string] $LogFilePrefix

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name DestinationBucketName -Value {
            $this._destinationBucketName
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._destinationBucketName = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name LogFilePrefix -Value {
            $this._logFilePrefix
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._logFilePrefix = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
    }

    S3BucketLoggingConfiguration() : base() {}
    S3BucketLoggingConfiguration([IDictionary] $props) : base($props) {}
    S3BucketLoggingConfiguration([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'S3BucketRoutingRule'"

class S3BucketRoutingRule : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSS3BucketRoutingRule'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-websiteconfiguration-routingrules.html'

    hidden [object] $_redirectRule
    hidden [object] $_routingRuleCondition

    [S3BucketRedirectRule] $RedirectRule
    [S3BucketRoutingRuleCondition] $RoutingRuleCondition

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name RedirectRule -Value {
            $this._redirectRule
        } -SecondValue {
            param([ValidateType(([S3BucketRedirectRule], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._redirectRule = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name RoutingRuleCondition -Value {
            $this._routingRuleCondition
        } -SecondValue {
            param([ValidateType(([S3BucketRoutingRuleCondition], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._routingRuleCondition = $value
        }
    }

    S3BucketRoutingRule() : base() {}
    S3BucketRoutingRule([IDictionary] $props) : base($props) {}
    S3BucketRoutingRule([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'S3StorageLensS3BucketDestination'"

class S3StorageLensS3BucketDestination : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSS3StorageLensS3BucketDestination'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-storagelens-s3bucketdestination.html'

    hidden [object] $_outputSchemaVersion
    hidden [object] $_format
    hidden [object] $_accountId
    hidden [object] $_arn
    hidden [object] $_prefix
    hidden [object] $_encryption

    [string] $OutputSchemaVersion
    [string] $Format
    [string] $AccountId
    [string] $Arn
    [string] $Prefix
    [S3StorageLensEncryption] $Encryption

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name OutputSchemaVersion -Value {
            $this._outputSchemaVersion
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._outputSchemaVersion = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Format -Value {
            $this._format
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._format = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name AccountId -Value {
            $this._accountId
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._accountId = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Arn -Value {
            $this._arn
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._arn = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Prefix -Value {
            $this._prefix
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._prefix = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Encryption -Value {
            $this._encryption
        } -SecondValue {
            param([ValidateType(([S3StorageLensEncryption], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._encryption = $value
        }
    }

    S3StorageLensS3BucketDestination() : base() {}
    S3StorageLensS3BucketDestination([IDictionary] $props) : base($props) {}
    S3StorageLensS3BucketDestination([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'S3BucketEncryptionConfiguration'"

class S3BucketEncryptionConfiguration : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSS3BucketEncryptionConfiguration'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-encryptionconfiguration.html'

    hidden [object] $_replicaKmsKeyID

    [string] $ReplicaKmsKeyID

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name ReplicaKmsKeyID -Value {
            $this._replicaKmsKeyID
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._replicaKmsKeyID = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
    }

    S3BucketEncryptionConfiguration() : base() {}
    S3BucketEncryptionConfiguration([IDictionary] $props) : base($props) {}
    S3BucketEncryptionConfiguration([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'S3BucketWebsiteConfiguration'"

class S3BucketWebsiteConfiguration : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSS3BucketWebsiteConfiguration'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-websiteconfiguration.html'

    hidden [object] $_errorDocument
    hidden [object] $_indexDocument
    hidden [object] $_redirectAllRequestsTo
    hidden [object] $_routingRules

    [string] $ErrorDocument
    [string] $IndexDocument
    [S3BucketRedirectAllRequestsTo] $RedirectAllRequestsTo
    [S3BucketRoutingRule[]] $RoutingRules

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name ErrorDocument -Value {
            $this._errorDocument
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._errorDocument = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name IndexDocument -Value {
            $this._indexDocument
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._indexDocument = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name RedirectAllRequestsTo -Value {
            $this._redirectAllRequestsTo
        } -SecondValue {
            param([ValidateType(([S3BucketRedirectAllRequestsTo], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._redirectAllRequestsTo = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name RoutingRules -Value {
            $this._routingRules
        } -SecondValue {
            param([ValidateType(([S3BucketRoutingRule], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this._routingRules = $value
        }
    }

    S3BucketWebsiteConfiguration() : base() {}
    S3BucketWebsiteConfiguration([IDictionary] $props) : base($props) {}
    S3BucketWebsiteConfiguration([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'S3BucketTopicConfiguration'"

class S3BucketTopicConfiguration : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSS3BucketTopicConfiguration'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-notificationconfig-topicconfig.html'

    hidden [object] $_event
    hidden [object] $_filter
    hidden [object] $_topic

    [string] $Event
    [S3BucketNotificationFilter] $Filter
    [string] $Topic

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name Event -Value {
            $this._event
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._event = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Filter -Value {
            $this._filter
        } -SecondValue {
            param([ValidateType(([S3BucketNotificationFilter], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._filter = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Topic -Value {
            $this._topic
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._topic = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
    }

    S3BucketTopicConfiguration() : base() {}
    S3BucketTopicConfiguration([IDictionary] $props) : base($props) {}
    S3BucketTopicConfiguration([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'S3BucketTagFilter'"

class S3BucketTagFilter : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSS3BucketTagFilter'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-tagfilter.html'

    hidden [object] $_key
    hidden [object] $_value

    [string] $Key
    [string] $Value

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name Key -Value {
            $this._key
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._key = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Value -Value {
            $this._value
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._value = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
    }

    S3BucketTagFilter() : base() {}
    S3BucketTagFilter([IDictionary] $props) : base($props) {}
    S3BucketTagFilter([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'S3BucketTransition'"

class S3BucketTransition : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSS3BucketTransition'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-lifecycleconfig-rule-transition.html'

    hidden [object] $_storageClass
    hidden [object] $_transitionDate
    hidden [object] $_transitionInDays

    [string] $StorageClass
    [VSTimestamp] $TransitionDate
    [int] $TransitionInDays

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name StorageClass -Value {
            $this._storageClass
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._storageClass = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name TransitionDate -Value {
            $this._transitionDate
        } -SecondValue {
            param([ValidateType(([VSTimestamp], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._transitionDate = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name TransitionInDays -Value {
            $this._transitionInDays
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._transitionInDays = if ($cast = $value -as [int]) {
                $cast
            }
            else {
                $value
            }
        }
    }

    S3BucketTransition() : base() {}
    S3BucketTransition([IDictionary] $props) : base($props) {}
    S3BucketTransition([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'S3StorageLensStorageLensConfiguration'"

class S3StorageLensStorageLensConfiguration : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSS3StorageLensStorageLensConfiguration'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-storagelens-storagelensconfiguration.html'

    hidden [object] $_id
    hidden [object] $_include
    hidden [object] $_exclude
    hidden [object] $_awsOrg
    hidden [object] $_accountLevel
    hidden [object] $_dataExport
    hidden [object] $_isEnabled
    hidden [object] $_storageLensArn

    [string] $Id
    [S3StorageLensBucketsAndRegions] $Include
    [S3StorageLensBucketsAndRegions] $Exclude
    [S3StorageLensAwsOrg] $AwsOrg
    [S3StorageLensAccountLevel] $AccountLevel
    [S3StorageLensDataExport] $DataExport
    [bool] $IsEnabled
    [string] $StorageLensArn

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name Id -Value {
            $this._id
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._id = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Include -Value {
            $this._include
        } -SecondValue {
            param([ValidateType(([S3StorageLensBucketsAndRegions], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._include = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Exclude -Value {
            $this._exclude
        } -SecondValue {
            param([ValidateType(([S3StorageLensBucketsAndRegions], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._exclude = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name AwsOrg -Value {
            $this._awsOrg
        } -SecondValue {
            param([ValidateType(([S3StorageLensAwsOrg], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._awsOrg = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name AccountLevel -Value {
            $this._accountLevel
        } -SecondValue {
            param([ValidateType(([S3StorageLensAccountLevel], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._accountLevel = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name DataExport -Value {
            $this._dataExport
        } -SecondValue {
            param([ValidateType(([S3StorageLensDataExport], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._dataExport = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name IsEnabled -Value {
            $this._isEnabled
        } -SecondValue {
            param([ValidateType(([bool], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._isEnabled = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name StorageLensArn -Value {
            $this._storageLensArn
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._storageLensArn = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
    }

    S3StorageLensStorageLensConfiguration() : base() {}
    S3StorageLensStorageLensConfiguration([IDictionary] $props) : base($props) {}
    S3StorageLensStorageLensConfiguration([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'S3BucketReplicationRuleFilter'"

class S3BucketReplicationRuleFilter : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSS3BucketReplicationRuleFilter'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-replicationrulefilter.html'

    hidden [object] $_and
    hidden [object] $_prefix
    hidden [object] $_tagFilter

    [S3BucketReplicationRuleAndOperator] $And
    [string] $Prefix
    [S3BucketTagFilter] $TagFilter

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name And -Value {
            $this._and
        } -SecondValue {
            param([ValidateType(([S3BucketReplicationRuleAndOperator], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._and = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Prefix -Value {
            $this._prefix
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._prefix = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name TagFilter -Value {
            $this._tagFilter
        } -SecondValue {
            param([ValidateType(([S3BucketTagFilter], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._tagFilter = $value
        }
    }

    S3BucketReplicationRuleFilter() : base() {}
    S3BucketReplicationRuleFilter([IDictionary] $props) : base($props) {}
    S3BucketReplicationRuleFilter([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'S3StorageLensAccountLevel'"

class S3StorageLensAccountLevel : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSS3StorageLensAccountLevel'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-storagelens-accountlevel.html'

    hidden [object] $_activityMetrics
    hidden [object] $_bucketLevel

    [S3StorageLensActivityMetrics] $ActivityMetrics
    [S3StorageLensBucketLevel] $BucketLevel

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name ActivityMetrics -Value {
            $this._activityMetrics
        } -SecondValue {
            param([ValidateType(([S3StorageLensActivityMetrics], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._activityMetrics = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name BucketLevel -Value {
            $this._bucketLevel
        } -SecondValue {
            param([ValidateType(([S3StorageLensBucketLevel], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._bucketLevel = $value
        }
    }

    S3StorageLensAccountLevel() : base() {}
    S3StorageLensAccountLevel([IDictionary] $props) : base($props) {}
    S3StorageLensAccountLevel([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'S3AccessPoint'"

class S3AccessPoint : VSResource {
    hidden [string] $_vsFunctionName = 'New-VSS3AccessPoint'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-s3-accesspoint.html'

    hidden [string[]] $_attributes = @('NetworkOrigin')
    hidden [object] $_condition

    [string] $Type = 'AWS::S3::AccessPoint'
    [string] $Name
    [string] $Bucket
    [S3AccessPointVpcConfiguration] $VpcConfiguration
    [S3AccessPointPublicAccessBlockConfiguration] $PublicAccessBlockConfiguration
    [VSJson] $Policy
    [VSJson] $Metadata
    [UpdatePolicy] $UpdatePolicy
    [string] $Condition

    hidden [void] _addAccessors() {
        $this._addBaseAccessors()
        $this | Add-Member -Force -MemberType ScriptProperty -Name Name -Value {
            $this.Properties['Name']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['Name'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Bucket -Value {
            $this.Properties['Bucket']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['Bucket'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name VpcConfiguration -Value {
            $this.Properties['VpcConfiguration']
        } -SecondValue {
            param([ValidateType(([S3AccessPointVpcConfiguration], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['VpcConfiguration'] = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name PublicAccessBlockConfiguration -Value {
            $this.Properties['PublicAccessBlockConfiguration']
        } -SecondValue {
            param([ValidateType(([S3AccessPointPublicAccessBlockConfiguration], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['PublicAccessBlockConfiguration'] = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Policy -Value {
            $this.Properties['Policy']
        } -SecondValue {
            param([ValidateType(([string], [VSJson], [VSYaml], [psobject], [IDictionary]))][object] $value)
            $this.Properties['Policy'] = [VSJson]::Transform($value)
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Condition -Value {
            $this._condition
        } -SecondValue {
            param(
                [ValidateType(([string], [IntrinsicFunction], [ConditionFunction]))] [object]
                $value
            )
            $this._condition = $value
        }
    }

    S3AccessPoint() : base() {}
    S3AccessPoint([IDictionary] $props) : base($props) {}
    S3AccessPoint([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'S3StorageLens'"

class S3StorageLens : VSResource {
    hidden [string] $_vsFunctionName = 'New-VSS3StorageLens'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-s3-storagelens.html'

    hidden [string[]] $_attributes = @('StorageLensArn')
    hidden [object] $_condition

    [string] $Type = 'AWS::S3::StorageLens'
    [S3StorageLensStorageLensConfiguration] $StorageLensConfiguration
    [VSTag[]] $Tags
    [VSJson] $Metadata
    [UpdatePolicy] $UpdatePolicy
    [string] $Condition

    hidden [void] _addAccessors() {
        $this._addBaseAccessors()
        $this | Add-Member -Force -MemberType ScriptProperty -Name StorageLensConfiguration -Value {
            $this.Properties['StorageLensConfiguration']
        } -SecondValue {
            param([ValidateType(([S3StorageLensStorageLensConfiguration], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['StorageLensConfiguration'] = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Tags -Value {
            $this.Properties['Tags']
        } -SecondValue {
            param([TransformTag()] [ValidateType(([IDictionary], [psobject], [VSTag]))] [object] $value)
            $this.Properties['Tags'] = [VSTag]::TransformTag($value)
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Condition -Value {
            $this._condition
        } -SecondValue {
            param(
                [ValidateType(([string], [IntrinsicFunction], [ConditionFunction]))] [object]
                $value
            )
            $this._condition = $value
        }
    }

    S3StorageLens() : base() {}
    S3StorageLens([IDictionary] $props) : base($props) {}
    S3StorageLens([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'S3Bucket'"

class S3Bucket : VSResource {
    hidden [string] $_vsFunctionName = 'New-VSS3Bucket'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket.html'

    hidden [string[]] $_attributes = @('Arn','DomainName','DualStackDomainName','RegionalDomainName','WebsiteURL')
    hidden [object] $_condition

    [string] $Type = 'AWS::S3::Bucket'
    [S3BucketAccelerateConfiguration] $AccelerateConfiguration
    [string] $AccessControl
    [S3BucketAnalyticsConfiguration[]] $AnalyticsConfigurations
    [S3BucketBucketEncryption] $BucketEncryption
    [string] $BucketName
    [S3BucketCorsConfiguration] $CorsConfiguration
    [S3BucketIntelligentTieringConfiguration[]] $IntelligentTieringConfigurations
    [S3BucketInventoryConfiguration[]] $InventoryConfigurations
    [S3BucketLifecycleConfiguration] $LifecycleConfiguration
    [S3BucketLoggingConfiguration] $LoggingConfiguration
    [S3BucketMetricsConfiguration[]] $MetricsConfigurations
    [S3BucketNotificationConfiguration] $NotificationConfiguration
    [S3BucketObjectLockConfiguration] $ObjectLockConfiguration
    [bool] $ObjectLockEnabled
    [S3BucketOwnershipControls] $OwnershipControls
    [S3BucketPublicAccessBlockConfiguration] $PublicAccessBlockConfiguration
    [S3BucketReplicationConfiguration] $ReplicationConfiguration
    [VSTag[]] $Tags
    [S3BucketVersioningConfiguration] $VersioningConfiguration
    [S3BucketWebsiteConfiguration] $WebsiteConfiguration
    [VSJson] $Metadata
    [UpdatePolicy] $UpdatePolicy
    [string] $Condition

    hidden [void] _addAccessors() {
        $this._addBaseAccessors()
        $this | Add-Member -Force -MemberType ScriptProperty -Name AccelerateConfiguration -Value {
            $this.Properties['AccelerateConfiguration']
        } -SecondValue {
            param([ValidateType(([S3BucketAccelerateConfiguration], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['AccelerateConfiguration'] = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name AccessControl -Value {
            $this.Properties['AccessControl']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['AccessControl'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name AnalyticsConfigurations -Value {
            $this.Properties['AnalyticsConfigurations']
        } -SecondValue {
            param([ValidateType(([S3BucketAnalyticsConfiguration], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this.Properties['AnalyticsConfigurations'] = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name BucketEncryption -Value {
            $this.Properties['BucketEncryption']
        } -SecondValue {
            param([ValidateType(([S3BucketBucketEncryption], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['BucketEncryption'] = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name BucketName -Value {
            $this.Properties['BucketName']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['BucketName'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name CorsConfiguration -Value {
            $this.Properties['CorsConfiguration']
        } -SecondValue {
            param([ValidateType(([S3BucketCorsConfiguration], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['CorsConfiguration'] = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name IntelligentTieringConfigurations -Value {
            $this.Properties['IntelligentTieringConfigurations']
        } -SecondValue {
            param([ValidateType(([S3BucketIntelligentTieringConfiguration], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this.Properties['IntelligentTieringConfigurations'] = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name InventoryConfigurations -Value {
            $this.Properties['InventoryConfigurations']
        } -SecondValue {
            param([ValidateType(([S3BucketInventoryConfiguration], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this.Properties['InventoryConfigurations'] = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name LifecycleConfiguration -Value {
            $this.Properties['LifecycleConfiguration']
        } -SecondValue {
            param([ValidateType(([S3BucketLifecycleConfiguration], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['LifecycleConfiguration'] = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name LoggingConfiguration -Value {
            $this.Properties['LoggingConfiguration']
        } -SecondValue {
            param([ValidateType(([S3BucketLoggingConfiguration], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['LoggingConfiguration'] = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name MetricsConfigurations -Value {
            $this.Properties['MetricsConfigurations']
        } -SecondValue {
            param([ValidateType(([S3BucketMetricsConfiguration], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this.Properties['MetricsConfigurations'] = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name NotificationConfiguration -Value {
            $this.Properties['NotificationConfiguration']
        } -SecondValue {
            param([ValidateType(([S3BucketNotificationConfiguration], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['NotificationConfiguration'] = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name ObjectLockConfiguration -Value {
            $this.Properties['ObjectLockConfiguration']
        } -SecondValue {
            param([ValidateType(([S3BucketObjectLockConfiguration], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['ObjectLockConfiguration'] = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name ObjectLockEnabled -Value {
            $this.Properties['ObjectLockEnabled']
        } -SecondValue {
            param([ValidateType(([bool], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['ObjectLockEnabled'] = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name OwnershipControls -Value {
            $this.Properties['OwnershipControls']
        } -SecondValue {
            param([ValidateType(([S3BucketOwnershipControls], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['OwnershipControls'] = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name PublicAccessBlockConfiguration -Value {
            $this.Properties['PublicAccessBlockConfiguration']
        } -SecondValue {
            param([ValidateType(([S3BucketPublicAccessBlockConfiguration], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['PublicAccessBlockConfiguration'] = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name ReplicationConfiguration -Value {
            $this.Properties['ReplicationConfiguration']
        } -SecondValue {
            param([ValidateType(([S3BucketReplicationConfiguration], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['ReplicationConfiguration'] = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Tags -Value {
            $this.Properties['Tags']
        } -SecondValue {
            param([TransformTag()] [ValidateType(([IDictionary], [psobject], [VSTag]))] [object] $value)
            $this.Properties['Tags'] = [VSTag]::TransformTag($value)
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name VersioningConfiguration -Value {
            $this.Properties['VersioningConfiguration']
        } -SecondValue {
            param([ValidateType(([S3BucketVersioningConfiguration], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['VersioningConfiguration'] = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name WebsiteConfiguration -Value {
            $this.Properties['WebsiteConfiguration']
        } -SecondValue {
            param([ValidateType(([S3BucketWebsiteConfiguration], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['WebsiteConfiguration'] = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Condition -Value {
            $this._condition
        } -SecondValue {
            param(
                [ValidateType(([string], [IntrinsicFunction], [ConditionFunction]))] [object]
                $value
            )
            $this._condition = $value
        }
    }

    S3Bucket() : base() {}
    S3Bucket([IDictionary] $props) : base($props) {}
    S3Bucket([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'S3BucketPolicy'"

class S3BucketPolicy : VSResource {
    hidden [string] $_vsFunctionName = 'New-VSS3BucketPolicy'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-policy.html'

    hidden [object] $_condition

    [string] $Type = 'AWS::S3::BucketPolicy'
    [string] $Bucket
    [VSJson] $PolicyDocument
    [VSJson] $Metadata
    [UpdatePolicy] $UpdatePolicy
    [string] $Condition

    hidden [void] _addAccessors() {
        $this._addBaseAccessors()
        $this | Add-Member -Force -MemberType ScriptProperty -Name Bucket -Value {
            $this.Properties['Bucket']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['Bucket'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name PolicyDocument -Value {
            $this.Properties['PolicyDocument']
        } -SecondValue {
            param([ValidateType(([string], [VSJson], [VSYaml], [psobject], [IDictionary]))][object] $value)
            $this.Properties['PolicyDocument'] = [VSJson]::Transform($value)
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Condition -Value {
            $this._condition
        } -SecondValue {
            param(
                [ValidateType(([string], [IntrinsicFunction], [ConditionFunction]))] [object]
                $value
            )
            $this._condition = $value
        }
    }

    S3BucketPolicy() : base() {}
    S3BucketPolicy([IDictionary] $props) : base($props) {}
    S3BucketPolicy([psobject] $props) : base($props) {}
}