Skip to content

Commit e026017

Browse files
Update generated code (#2034)
update generated code
1 parent 3af705d commit e026017

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+830
-40
lines changed

manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"variables": {
3-
"${LATEST}": "3.369.22"
3+
"${LATEST}": "3.369.26"
44
},
55
"endpoints": "https://raw.githubusercontent.com/aws/aws-sdk-php/${LATEST}/src/data/endpoints.json",
66
"services": {

src/Service/DynamoDb/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22

33
## NOT RELEASED
44

5+
### Added
6+
7+
- AWS api-change: This change supports the creation of multi-account global tables. It adds two new arguments to CreateTable, GlobalTableSourceArn and GlobalTableSettingsReplicationMode. DescribeTable is also updated to include information about GlobalTableSettingsReplicationMode.
8+
59
## 3.9.0
610

711
### Added

src/Service/DynamoDb/composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
},
3838
"extra": {
3939
"branch-alias": {
40-
"dev-master": "3.9-dev"
40+
"dev-master": "3.10-dev"
4141
}
4242
}
4343
}

src/Service/DynamoDb/src/DynamoDbClient.php

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
use AsyncAws\Core\RequestContext;
1010
use AsyncAws\DynamoDb\Enum\BillingMode;
1111
use AsyncAws\DynamoDb\Enum\ConditionalOperator;
12+
use AsyncAws\DynamoDb\Enum\GlobalTableSettingsReplicationMode;
1213
use AsyncAws\DynamoDb\Enum\MultiRegionConsistency;
1314
use AsyncAws\DynamoDb\Enum\ReturnConsumedCapacity;
1415
use AsyncAws\DynamoDb\Enum\ReturnItemCollectionMetrics;
@@ -285,9 +286,9 @@ public function batchWriteItem($input): BatchWriteItemOutput
285286
* @see https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-dynamodb-2012-08-10.html#createtable
286287
*
287288
* @param array{
288-
* AttributeDefinitions: array<AttributeDefinition|array>,
289+
* AttributeDefinitions?: array<AttributeDefinition|array>|null,
289290
* TableName: string,
290-
* KeySchema: array<KeySchemaElement|array>,
291+
* KeySchema?: array<KeySchemaElement|array>|null,
291292
* LocalSecondaryIndexes?: array<LocalSecondaryIndex|array>|null,
292293
* GlobalSecondaryIndexes?: array<GlobalSecondaryIndex|array>|null,
293294
* BillingMode?: BillingMode::*|null,
@@ -300,6 +301,8 @@ public function batchWriteItem($input): BatchWriteItemOutput
300301
* WarmThroughput?: WarmThroughput|array|null,
301302
* ResourcePolicy?: string|null,
302303
* OnDemandThroughput?: OnDemandThroughput|array|null,
304+
* GlobalTableSourceArn?: string|null,
305+
* GlobalTableSettingsReplicationMode?: GlobalTableSettingsReplicationMode::*|null,
303306
* '@region'?: string|null,
304307
* }|CreateTableInput $input
305308
*
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?php
2+
3+
namespace AsyncAws\DynamoDb\Enum;
4+
5+
final class GlobalTableSettingsReplicationMode
6+
{
7+
public const DISABLED = 'DISABLED';
8+
public const ENABLED = 'ENABLED';
9+
public const ENABLED_WITH_OVERRIDES = 'ENABLED_WITH_OVERRIDES';
10+
public const UNKNOWN_TO_SDK = 'UNKNOWN_TO_SDK';
11+
12+
/**
13+
* @psalm-assert-if-true self::* $value
14+
*/
15+
public static function exists(string $value): bool
16+
{
17+
return isset([
18+
self::DISABLED => true,
19+
self::ENABLED => true,
20+
self::ENABLED_WITH_OVERRIDES => true,
21+
][$value]);
22+
}
23+
}

src/Service/DynamoDb/src/Exception/TransactionCanceledException.php

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,8 @@
3131
* - There is insufficient provisioned capacity for the transaction to be completed.
3232
* - There is a user error, such as an invalid data format.
3333
*
34-
* > If using Java, DynamoDB lists the cancellation reasons on the `CancellationReasons` property. This property is not
35-
* > set for other languages. Transaction cancellation reasons are ordered in the order of requested items, if an item
36-
* > has no error it will have `None` code and `Null` message.
34+
* > DynamoDB lists the cancellation reasons on the `CancellationReasons` property. Transaction cancellation reasons are
35+
* > ordered in the order of requested items, if an item has no error it will have `None` code and `Null` message.
3736
*
3837
* Cancellation reason codes and possible error messages:
3938
*

src/Service/DynamoDb/src/Input/CreateTableInput.php

Lines changed: 83 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
use AsyncAws\Core\Request;
88
use AsyncAws\Core\Stream\StreamFactory;
99
use AsyncAws\DynamoDb\Enum\BillingMode;
10+
use AsyncAws\DynamoDb\Enum\GlobalTableSettingsReplicationMode;
1011
use AsyncAws\DynamoDb\Enum\TableClass;
1112
use AsyncAws\DynamoDb\ValueObject\AttributeDefinition;
1213
use AsyncAws\DynamoDb\ValueObject\GlobalSecondaryIndex;
@@ -27,8 +28,6 @@ final class CreateTableInput extends Input
2728
/**
2829
* An array of attributes that describe the key schema for the table and indexes.
2930
*
30-
* @required
31-
*
3231
* @var AttributeDefinition[]|null
3332
*/
3433
private $attributeDefinitions;
@@ -73,8 +72,6 @@ final class CreateTableInput extends Input
7372
* [^1]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DataModel.html
7473
* [^2]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/WorkingWithTables.html#WorkingWithTables.primary.key
7574
*
76-
* @required
77-
*
7875
* @var KeySchemaElement[]|null
7976
*/
8077
private $keySchema;
@@ -116,7 +113,8 @@ final class CreateTableInput extends Input
116113
* the array includes the following:
117114
*
118115
* - `IndexName` - The name of the global secondary index. Must be unique only for this table.
119-
* - `KeySchema` - Specifies the key schema for the global secondary index.
116+
* - `KeySchema` - Specifies the key schema for the global secondary index. Each global secondary index supports up to 4
117+
* partition keys and up to 4 sort keys.
120118
* - `Projection` - Specifies attributes that are copied (projected) from the table into the index. These are in
121119
* addition to the primary key attributes and index key attributes, which are automatically projected. Each attribute
122120
* specification is composed of:
@@ -253,11 +251,27 @@ final class CreateTableInput extends Input
253251
*/
254252
private $onDemandThroughput;
255253

254+
/**
255+
* The Amazon Resource Name (ARN) of the source table used for the creation of a multi-account global table.
256+
*
257+
* @var string|null
258+
*/
259+
private $globalTableSourceArn;
260+
261+
/**
262+
* Controls the settings synchronization mode for the global table. For multi-account global tables, this parameter is
263+
* required and the only supported value is ENABLED. For same-account global tables, this parameter is set to
264+
* ENABLED_WITH_OVERRIDES.
265+
*
266+
* @var GlobalTableSettingsReplicationMode::*|null
267+
*/
268+
private $globalTableSettingsReplicationMode;
269+
256270
/**
257271
* @param array{
258-
* AttributeDefinitions?: array<AttributeDefinition|array>,
272+
* AttributeDefinitions?: array<AttributeDefinition|array>|null,
259273
* TableName?: string,
260-
* KeySchema?: array<KeySchemaElement|array>,
274+
* KeySchema?: array<KeySchemaElement|array>|null,
261275
* LocalSecondaryIndexes?: array<LocalSecondaryIndex|array>|null,
262276
* GlobalSecondaryIndexes?: array<GlobalSecondaryIndex|array>|null,
263277
* BillingMode?: BillingMode::*|null,
@@ -270,6 +284,8 @@ final class CreateTableInput extends Input
270284
* WarmThroughput?: WarmThroughput|array|null,
271285
* ResourcePolicy?: string|null,
272286
* OnDemandThroughput?: OnDemandThroughput|array|null,
287+
* GlobalTableSourceArn?: string|null,
288+
* GlobalTableSettingsReplicationMode?: GlobalTableSettingsReplicationMode::*|null,
273289
* '@region'?: string|null,
274290
* } $input
275291
*/
@@ -290,14 +306,16 @@ public function __construct(array $input = [])
290306
$this->warmThroughput = isset($input['WarmThroughput']) ? WarmThroughput::create($input['WarmThroughput']) : null;
291307
$this->resourcePolicy = $input['ResourcePolicy'] ?? null;
292308
$this->onDemandThroughput = isset($input['OnDemandThroughput']) ? OnDemandThroughput::create($input['OnDemandThroughput']) : null;
309+
$this->globalTableSourceArn = $input['GlobalTableSourceArn'] ?? null;
310+
$this->globalTableSettingsReplicationMode = $input['GlobalTableSettingsReplicationMode'] ?? null;
293311
parent::__construct($input);
294312
}
295313

296314
/**
297315
* @param array{
298-
* AttributeDefinitions?: array<AttributeDefinition|array>,
316+
* AttributeDefinitions?: array<AttributeDefinition|array>|null,
299317
* TableName?: string,
300-
* KeySchema?: array<KeySchemaElement|array>,
318+
* KeySchema?: array<KeySchemaElement|array>|null,
301319
* LocalSecondaryIndexes?: array<LocalSecondaryIndex|array>|null,
302320
* GlobalSecondaryIndexes?: array<GlobalSecondaryIndex|array>|null,
303321
* BillingMode?: BillingMode::*|null,
@@ -310,6 +328,8 @@ public function __construct(array $input = [])
310328
* WarmThroughput?: WarmThroughput|array|null,
311329
* ResourcePolicy?: string|null,
312330
* OnDemandThroughput?: OnDemandThroughput|array|null,
331+
* GlobalTableSourceArn?: string|null,
332+
* GlobalTableSettingsReplicationMode?: GlobalTableSettingsReplicationMode::*|null,
313333
* '@region'?: string|null,
314334
* }|CreateTableInput $input
315335
*/
@@ -347,6 +367,19 @@ public function getGlobalSecondaryIndexes(): array
347367
return $this->globalSecondaryIndexes ?? [];
348368
}
349369

370+
/**
371+
* @return GlobalTableSettingsReplicationMode::*|null
372+
*/
373+
public function getGlobalTableSettingsReplicationMode(): ?string
374+
{
375+
return $this->globalTableSettingsReplicationMode;
376+
}
377+
378+
public function getGlobalTableSourceArn(): ?string
379+
{
380+
return $this->globalTableSourceArn;
381+
}
382+
350383
/**
351384
* @return KeySchemaElement[]
352385
*/
@@ -477,6 +510,23 @@ public function setGlobalSecondaryIndexes(array $value): self
477510
return $this;
478511
}
479512

513+
/**
514+
* @param GlobalTableSettingsReplicationMode::*|null $value
515+
*/
516+
public function setGlobalTableSettingsReplicationMode(?string $value): self
517+
{
518+
$this->globalTableSettingsReplicationMode = $value;
519+
520+
return $this;
521+
}
522+
523+
public function setGlobalTableSourceArn(?string $value): self
524+
{
525+
$this->globalTableSourceArn = $value;
526+
527+
return $this;
528+
}
529+
480530
/**
481531
* @param KeySchemaElement[] $value
482532
*/
@@ -569,32 +619,26 @@ public function setWarmThroughput(?WarmThroughput $value): self
569619
private function requestBody(): array
570620
{
571621
$payload = [];
572-
if (null === $v = $this->attributeDefinitions) {
573-
throw new InvalidArgument(\sprintf('Missing parameter "AttributeDefinitions" for "%s". The value cannot be null.', __CLASS__));
574-
}
575-
576-
$index = -1;
577-
$payload['AttributeDefinitions'] = [];
578-
foreach ($v as $listValue) {
579-
++$index;
580-
$payload['AttributeDefinitions'][$index] = $listValue->requestBody();
622+
if (null !== $v = $this->attributeDefinitions) {
623+
$index = -1;
624+
$payload['AttributeDefinitions'] = [];
625+
foreach ($v as $listValue) {
626+
++$index;
627+
$payload['AttributeDefinitions'][$index] = $listValue->requestBody();
628+
}
581629
}
582-
583630
if (null === $v = $this->tableName) {
584631
throw new InvalidArgument(\sprintf('Missing parameter "TableName" for "%s". The value cannot be null.', __CLASS__));
585632
}
586633
$payload['TableName'] = $v;
587-
if (null === $v = $this->keySchema) {
588-
throw new InvalidArgument(\sprintf('Missing parameter "KeySchema" for "%s". The value cannot be null.', __CLASS__));
589-
}
590-
591-
$index = -1;
592-
$payload['KeySchema'] = [];
593-
foreach ($v as $listValue) {
594-
++$index;
595-
$payload['KeySchema'][$index] = $listValue->requestBody();
634+
if (null !== $v = $this->keySchema) {
635+
$index = -1;
636+
$payload['KeySchema'] = [];
637+
foreach ($v as $listValue) {
638+
++$index;
639+
$payload['KeySchema'][$index] = $listValue->requestBody();
640+
}
596641
}
597-
598642
if (null !== $v = $this->localSecondaryIndexes) {
599643
$index = -1;
600644
$payload['LocalSecondaryIndexes'] = [];
@@ -654,6 +698,16 @@ private function requestBody(): array
654698
if (null !== $v = $this->onDemandThroughput) {
655699
$payload['OnDemandThroughput'] = $v->requestBody();
656700
}
701+
if (null !== $v = $this->globalTableSourceArn) {
702+
$payload['GlobalTableSourceArn'] = $v;
703+
}
704+
if (null !== $v = $this->globalTableSettingsReplicationMode) {
705+
if (!GlobalTableSettingsReplicationMode::exists($v)) {
706+
/** @psalm-suppress NoValue */
707+
throw new InvalidArgument(\sprintf('Invalid parameter "GlobalTableSettingsReplicationMode" for "%s". The value "%s" is not a valid "GlobalTableSettingsReplicationMode".', __CLASS__, $v));
708+
}
709+
$payload['GlobalTableSettingsReplicationMode'] = $v;
710+
}
657711

658712
return $payload;
659713
}

src/Service/DynamoDb/src/Result/CreateTableOutput.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
use AsyncAws\Core\Response;
66
use AsyncAws\Core\Result;
77
use AsyncAws\DynamoDb\Enum\BillingMode;
8+
use AsyncAws\DynamoDb\Enum\GlobalTableSettingsReplicationMode;
89
use AsyncAws\DynamoDb\Enum\IndexStatus;
910
use AsyncAws\DynamoDb\Enum\KeyType;
1011
use AsyncAws\DynamoDb\Enum\MultiRegionConsistency;
@@ -280,6 +281,7 @@ private function populateResultReplicaDescription(array $json): ReplicaDescripti
280281
'GlobalSecondaryIndexes' => !isset($json['GlobalSecondaryIndexes']) ? null : $this->populateResultReplicaGlobalSecondaryIndexDescriptionList($json['GlobalSecondaryIndexes']),
281282
'ReplicaInaccessibleDateTime' => (isset($json['ReplicaInaccessibleDateTime']) && ($d = \DateTimeImmutable::createFromFormat('U.u', \sprintf('%.6F', $json['ReplicaInaccessibleDateTime'])))) ? $d : null,
282283
'ReplicaTableClassSummary' => empty($json['ReplicaTableClassSummary']) ? null : $this->populateResultTableClassSummary($json['ReplicaTableClassSummary']),
284+
'GlobalTableSettingsReplicationMode' => isset($json['GlobalTableSettingsReplicationMode']) ? (!GlobalTableSettingsReplicationMode::exists((string) $json['GlobalTableSettingsReplicationMode']) ? GlobalTableSettingsReplicationMode::UNKNOWN_TO_SDK : (string) $json['GlobalTableSettingsReplicationMode']) : null,
283285
]);
284286
}
285287

@@ -377,6 +379,7 @@ private function populateResultTableDescription(array $json): TableDescription
377379
'GlobalTableVersion' => isset($json['GlobalTableVersion']) ? (string) $json['GlobalTableVersion'] : null,
378380
'Replicas' => !isset($json['Replicas']) ? null : $this->populateResultReplicaDescriptionList($json['Replicas']),
379381
'GlobalTableWitnesses' => !isset($json['GlobalTableWitnesses']) ? null : $this->populateResultGlobalTableWitnessDescriptionList($json['GlobalTableWitnesses']),
382+
'GlobalTableSettingsReplicationMode' => isset($json['GlobalTableSettingsReplicationMode']) ? (!GlobalTableSettingsReplicationMode::exists((string) $json['GlobalTableSettingsReplicationMode']) ? GlobalTableSettingsReplicationMode::UNKNOWN_TO_SDK : (string) $json['GlobalTableSettingsReplicationMode']) : null,
380383
'RestoreSummary' => empty($json['RestoreSummary']) ? null : $this->populateResultRestoreSummary($json['RestoreSummary']),
381384
'SSEDescription' => empty($json['SSEDescription']) ? null : $this->populateResultSSEDescription($json['SSEDescription']),
382385
'ArchivalSummary' => empty($json['ArchivalSummary']) ? null : $this->populateResultArchivalSummary($json['ArchivalSummary']),

src/Service/DynamoDb/src/Result/DeleteTableOutput.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
use AsyncAws\Core\Response;
66
use AsyncAws\Core\Result;
77
use AsyncAws\DynamoDb\Enum\BillingMode;
8+
use AsyncAws\DynamoDb\Enum\GlobalTableSettingsReplicationMode;
89
use AsyncAws\DynamoDb\Enum\IndexStatus;
910
use AsyncAws\DynamoDb\Enum\KeyType;
1011
use AsyncAws\DynamoDb\Enum\MultiRegionConsistency;
@@ -280,6 +281,7 @@ private function populateResultReplicaDescription(array $json): ReplicaDescripti
280281
'GlobalSecondaryIndexes' => !isset($json['GlobalSecondaryIndexes']) ? null : $this->populateResultReplicaGlobalSecondaryIndexDescriptionList($json['GlobalSecondaryIndexes']),
281282
'ReplicaInaccessibleDateTime' => (isset($json['ReplicaInaccessibleDateTime']) && ($d = \DateTimeImmutable::createFromFormat('U.u', \sprintf('%.6F', $json['ReplicaInaccessibleDateTime'])))) ? $d : null,
282283
'ReplicaTableClassSummary' => empty($json['ReplicaTableClassSummary']) ? null : $this->populateResultTableClassSummary($json['ReplicaTableClassSummary']),
284+
'GlobalTableSettingsReplicationMode' => isset($json['GlobalTableSettingsReplicationMode']) ? (!GlobalTableSettingsReplicationMode::exists((string) $json['GlobalTableSettingsReplicationMode']) ? GlobalTableSettingsReplicationMode::UNKNOWN_TO_SDK : (string) $json['GlobalTableSettingsReplicationMode']) : null,
283285
]);
284286
}
285287

@@ -377,6 +379,7 @@ private function populateResultTableDescription(array $json): TableDescription
377379
'GlobalTableVersion' => isset($json['GlobalTableVersion']) ? (string) $json['GlobalTableVersion'] : null,
378380
'Replicas' => !isset($json['Replicas']) ? null : $this->populateResultReplicaDescriptionList($json['Replicas']),
379381
'GlobalTableWitnesses' => !isset($json['GlobalTableWitnesses']) ? null : $this->populateResultGlobalTableWitnessDescriptionList($json['GlobalTableWitnesses']),
382+
'GlobalTableSettingsReplicationMode' => isset($json['GlobalTableSettingsReplicationMode']) ? (!GlobalTableSettingsReplicationMode::exists((string) $json['GlobalTableSettingsReplicationMode']) ? GlobalTableSettingsReplicationMode::UNKNOWN_TO_SDK : (string) $json['GlobalTableSettingsReplicationMode']) : null,
380383
'RestoreSummary' => empty($json['RestoreSummary']) ? null : $this->populateResultRestoreSummary($json['RestoreSummary']),
381384
'SSEDescription' => empty($json['SSEDescription']) ? null : $this->populateResultSSEDescription($json['SSEDescription']),
382385
'ArchivalSummary' => empty($json['ArchivalSummary']) ? null : $this->populateResultArchivalSummary($json['ArchivalSummary']),

src/Service/DynamoDb/src/Result/DescribeTableOutput.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
use AsyncAws\Core\Response;
66
use AsyncAws\Core\Result;
77
use AsyncAws\DynamoDb\Enum\BillingMode;
8+
use AsyncAws\DynamoDb\Enum\GlobalTableSettingsReplicationMode;
89
use AsyncAws\DynamoDb\Enum\IndexStatus;
910
use AsyncAws\DynamoDb\Enum\KeyType;
1011
use AsyncAws\DynamoDb\Enum\MultiRegionConsistency;
@@ -280,6 +281,7 @@ private function populateResultReplicaDescription(array $json): ReplicaDescripti
280281
'GlobalSecondaryIndexes' => !isset($json['GlobalSecondaryIndexes']) ? null : $this->populateResultReplicaGlobalSecondaryIndexDescriptionList($json['GlobalSecondaryIndexes']),
281282
'ReplicaInaccessibleDateTime' => (isset($json['ReplicaInaccessibleDateTime']) && ($d = \DateTimeImmutable::createFromFormat('U.u', \sprintf('%.6F', $json['ReplicaInaccessibleDateTime'])))) ? $d : null,
282283
'ReplicaTableClassSummary' => empty($json['ReplicaTableClassSummary']) ? null : $this->populateResultTableClassSummary($json['ReplicaTableClassSummary']),
284+
'GlobalTableSettingsReplicationMode' => isset($json['GlobalTableSettingsReplicationMode']) ? (!GlobalTableSettingsReplicationMode::exists((string) $json['GlobalTableSettingsReplicationMode']) ? GlobalTableSettingsReplicationMode::UNKNOWN_TO_SDK : (string) $json['GlobalTableSettingsReplicationMode']) : null,
283285
]);
284286
}
285287

@@ -377,6 +379,7 @@ private function populateResultTableDescription(array $json): TableDescription
377379
'GlobalTableVersion' => isset($json['GlobalTableVersion']) ? (string) $json['GlobalTableVersion'] : null,
378380
'Replicas' => !isset($json['Replicas']) ? null : $this->populateResultReplicaDescriptionList($json['Replicas']),
379381
'GlobalTableWitnesses' => !isset($json['GlobalTableWitnesses']) ? null : $this->populateResultGlobalTableWitnessDescriptionList($json['GlobalTableWitnesses']),
382+
'GlobalTableSettingsReplicationMode' => isset($json['GlobalTableSettingsReplicationMode']) ? (!GlobalTableSettingsReplicationMode::exists((string) $json['GlobalTableSettingsReplicationMode']) ? GlobalTableSettingsReplicationMode::UNKNOWN_TO_SDK : (string) $json['GlobalTableSettingsReplicationMode']) : null,
380383
'RestoreSummary' => empty($json['RestoreSummary']) ? null : $this->populateResultRestoreSummary($json['RestoreSummary']),
381384
'SSEDescription' => empty($json['SSEDescription']) ? null : $this->populateResultSSEDescription($json['SSEDescription']),
382385
'ArchivalSummary' => empty($json['ArchivalSummary']) ? null : $this->populateResultArchivalSummary($json['ArchivalSummary']),

0 commit comments

Comments
 (0)