@azure/arm-elasticsan 1.0.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +5 -0
- package/LICENSE +21 -0
- package/README.md +109 -0
- package/dist/index.js +2897 -0
- package/dist/index.js.map +1 -0
- package/dist/index.min.js +1 -0
- package/dist/index.min.js.map +1 -0
- package/dist-esm/samples-dev/elasticSansCreateSample.d.ts +2 -0
- package/dist-esm/samples-dev/elasticSansCreateSample.d.ts.map +1 -0
- package/dist-esm/samples-dev/elasticSansCreateSample.js +62 -0
- package/dist-esm/samples-dev/elasticSansCreateSample.js.map +1 -0
- package/dist-esm/samples-dev/elasticSansDeleteSample.d.ts +2 -0
- package/dist-esm/samples-dev/elasticSansDeleteSample.d.ts.map +1 -0
- package/dist-esm/samples-dev/elasticSansDeleteSample.js +49 -0
- package/dist-esm/samples-dev/elasticSansDeleteSample.js.map +1 -0
- package/dist-esm/samples-dev/elasticSansGetSample.d.ts +2 -0
- package/dist-esm/samples-dev/elasticSansGetSample.d.ts.map +1 -0
- package/dist-esm/samples-dev/elasticSansGetSample.js +49 -0
- package/dist-esm/samples-dev/elasticSansGetSample.js.map +1 -0
- package/dist-esm/samples-dev/elasticSansListByResourceGroupSample.d.ts +2 -0
- package/dist-esm/samples-dev/elasticSansListByResourceGroupSample.d.ts.map +1 -0
- package/dist-esm/samples-dev/elasticSansListByResourceGroupSample.js +75 -0
- package/dist-esm/samples-dev/elasticSansListByResourceGroupSample.js.map +1 -0
- package/dist-esm/samples-dev/elasticSansListBySubscriptionSample.d.ts +2 -0
- package/dist-esm/samples-dev/elasticSansListBySubscriptionSample.d.ts.map +1 -0
- package/dist-esm/samples-dev/elasticSansListBySubscriptionSample.js +73 -0
- package/dist-esm/samples-dev/elasticSansListBySubscriptionSample.js.map +1 -0
- package/dist-esm/samples-dev/elasticSansUpdateSample.d.ts +2 -0
- package/dist-esm/samples-dev/elasticSansUpdateSample.d.ts.map +1 -0
- package/dist-esm/samples-dev/elasticSansUpdateSample.js +55 -0
- package/dist-esm/samples-dev/elasticSansUpdateSample.js.map +1 -0
- package/dist-esm/samples-dev/operationsListSample.d.ts +2 -0
- package/dist-esm/samples-dev/operationsListSample.d.ts.map +1 -0
- package/dist-esm/samples-dev/operationsListSample.js +73 -0
- package/dist-esm/samples-dev/operationsListSample.js.map +1 -0
- package/dist-esm/samples-dev/skusListSample.d.ts +2 -0
- package/dist-esm/samples-dev/skusListSample.d.ts.map +1 -0
- package/dist-esm/samples-dev/skusListSample.js +75 -0
- package/dist-esm/samples-dev/skusListSample.js.map +1 -0
- package/dist-esm/samples-dev/volumeGroupsCreateSample.d.ts +2 -0
- package/dist-esm/samples-dev/volumeGroupsCreateSample.d.ts.map +1 -0
- package/dist-esm/samples-dev/volumeGroupsCreateSample.js +62 -0
- package/dist-esm/samples-dev/volumeGroupsCreateSample.js.map +1 -0
- package/dist-esm/samples-dev/volumeGroupsDeleteSample.d.ts +2 -0
- package/dist-esm/samples-dev/volumeGroupsDeleteSample.d.ts.map +1 -0
- package/dist-esm/samples-dev/volumeGroupsDeleteSample.js +51 -0
- package/dist-esm/samples-dev/volumeGroupsDeleteSample.js.map +1 -0
- package/dist-esm/samples-dev/volumeGroupsGetSample.d.ts +2 -0
- package/dist-esm/samples-dev/volumeGroupsGetSample.d.ts.map +1 -0
- package/dist-esm/samples-dev/volumeGroupsGetSample.js +51 -0
- package/dist-esm/samples-dev/volumeGroupsGetSample.js.map +1 -0
- package/dist-esm/samples-dev/volumeGroupsListByElasticSanSample.d.ts +2 -0
- package/dist-esm/samples-dev/volumeGroupsListByElasticSanSample.d.ts.map +1 -0
- package/dist-esm/samples-dev/volumeGroupsListByElasticSanSample.js +77 -0
- package/dist-esm/samples-dev/volumeGroupsListByElasticSanSample.js.map +1 -0
- package/dist-esm/samples-dev/volumeGroupsUpdateSample.d.ts +2 -0
- package/dist-esm/samples-dev/volumeGroupsUpdateSample.d.ts.map +1 -0
- package/dist-esm/samples-dev/volumeGroupsUpdateSample.js +62 -0
- package/dist-esm/samples-dev/volumeGroupsUpdateSample.js.map +1 -0
- package/dist-esm/samples-dev/volumesCreateSample.d.ts +2 -0
- package/dist-esm/samples-dev/volumesCreateSample.d.ts.map +1 -0
- package/dist-esm/samples-dev/volumesCreateSample.js +59 -0
- package/dist-esm/samples-dev/volumesCreateSample.js.map +1 -0
- package/dist-esm/samples-dev/volumesDeleteSample.d.ts +2 -0
- package/dist-esm/samples-dev/volumesDeleteSample.d.ts.map +1 -0
- package/dist-esm/samples-dev/volumesDeleteSample.js +53 -0
- package/dist-esm/samples-dev/volumesDeleteSample.js.map +1 -0
- package/dist-esm/samples-dev/volumesGetSample.d.ts +2 -0
- package/dist-esm/samples-dev/volumesGetSample.d.ts.map +1 -0
- package/dist-esm/samples-dev/volumesGetSample.js +53 -0
- package/dist-esm/samples-dev/volumesGetSample.js.map +1 -0
- package/dist-esm/samples-dev/volumesListByVolumeGroupSample.d.ts +2 -0
- package/dist-esm/samples-dev/volumesListByVolumeGroupSample.d.ts.map +1 -0
- package/dist-esm/samples-dev/volumesListByVolumeGroupSample.js +79 -0
- package/dist-esm/samples-dev/volumesListByVolumeGroupSample.js.map +1 -0
- package/dist-esm/samples-dev/volumesUpdateSample.d.ts +2 -0
- package/dist-esm/samples-dev/volumesUpdateSample.d.ts.map +1 -0
- package/dist-esm/samples-dev/volumesUpdateSample.js +58 -0
- package/dist-esm/samples-dev/volumesUpdateSample.js.map +1 -0
- package/dist-esm/src/elasticSanManagement.d.ts +24 -0
- package/dist-esm/src/elasticSanManagement.d.ts.map +1 -0
- package/dist-esm/src/elasticSanManagement.js +107 -0
- package/dist-esm/src/elasticSanManagement.js.map +1 -0
- package/dist-esm/src/index.d.ts +5 -0
- package/dist-esm/src/index.d.ts.map +1 -0
- package/dist-esm/src/index.js +12 -0
- package/dist-esm/src/index.js.map +1 -0
- package/dist-esm/src/lroImpl.d.ts +16 -0
- package/dist-esm/src/lroImpl.d.ts.map +1 -0
- package/dist-esm/src/lroImpl.js +29 -0
- package/dist-esm/src/lroImpl.js.map +1 -0
- package/dist-esm/src/models/index.d.ts +691 -0
- package/dist-esm/src/models/index.d.ts.map +1 -0
- package/dist-esm/src/models/index.js +88 -0
- package/dist-esm/src/models/index.js.map +1 -0
- package/dist-esm/src/models/mappers.d.ts +29 -0
- package/dist-esm/src/models/mappers.d.ts.map +1 -0
- package/dist-esm/src/models/mappers.js +877 -0
- package/dist-esm/src/models/mappers.js.map +1 -0
- package/dist-esm/src/models/parameters.d.ts +19 -0
- package/dist-esm/src/models/parameters.d.ts.map +1 -0
- package/dist-esm/src/models/parameters.js +170 -0
- package/dist-esm/src/models/parameters.js.map +1 -0
- package/dist-esm/src/operations/elasticSans.d.ts +107 -0
- package/dist-esm/src/operations/elasticSans.d.ts.map +1 -0
- package/dist-esm/src/operations/elasticSans.js +509 -0
- package/dist-esm/src/operations/elasticSans.js.map +1 -0
- package/dist-esm/src/operations/index.d.ts +6 -0
- package/dist-esm/src/operations/index.d.ts.map +1 -0
- package/dist-esm/src/operations/index.js +13 -0
- package/dist-esm/src/operations/index.js.map +1 -0
- package/dist-esm/src/operations/operations.d.ts +26 -0
- package/dist-esm/src/operations/operations.d.ts.map +1 -0
- package/dist-esm/src/operations/operations.js +90 -0
- package/dist-esm/src/operations/operations.js.map +1 -0
- package/dist-esm/src/operations/skus.d.ts +26 -0
- package/dist-esm/src/operations/skus.d.ts.map +1 -0
- package/dist-esm/src/operations/skus.js +90 -0
- package/dist-esm/src/operations/skus.js.map +1 -0
- package/dist-esm/src/operations/volumeGroups.d.ts +99 -0
- package/dist-esm/src/operations/volumeGroups.d.ts.map +1 -0
- package/dist-esm/src/operations/volumeGroups.js +438 -0
- package/dist-esm/src/operations/volumeGroups.js.map +1 -0
- package/dist-esm/src/operations/volumes.d.ts +109 -0
- package/dist-esm/src/operations/volumes.d.ts.map +1 -0
- package/dist-esm/src/operations/volumes.js +468 -0
- package/dist-esm/src/operations/volumes.js.map +1 -0
- package/dist-esm/src/operationsInterfaces/elasticSans.d.ts +71 -0
- package/dist-esm/src/operationsInterfaces/elasticSans.d.ts.map +1 -0
- package/dist-esm/src/operationsInterfaces/elasticSans.js +9 -0
- package/dist-esm/src/operationsInterfaces/elasticSans.js.map +1 -0
- package/dist-esm/src/operationsInterfaces/index.d.ts +6 -0
- package/dist-esm/src/operationsInterfaces/index.d.ts.map +1 -0
- package/dist-esm/src/operationsInterfaces/index.js +13 -0
- package/dist-esm/src/operationsInterfaces/index.js.map +1 -0
- package/dist-esm/src/operationsInterfaces/operations.d.ts +11 -0
- package/dist-esm/src/operationsInterfaces/operations.d.ts.map +1 -0
- package/dist-esm/src/operationsInterfaces/operations.js +9 -0
- package/dist-esm/src/operationsInterfaces/operations.js.map +1 -0
- package/dist-esm/src/operationsInterfaces/skus.d.ts +11 -0
- package/dist-esm/src/operationsInterfaces/skus.d.ts.map +1 -0
- package/dist-esm/src/operationsInterfaces/skus.js +9 -0
- package/dist-esm/src/operationsInterfaces/skus.js.map +1 -0
- package/dist-esm/src/operationsInterfaces/volumeGroups.d.ts +74 -0
- package/dist-esm/src/operationsInterfaces/volumeGroups.d.ts.map +1 -0
- package/dist-esm/src/operationsInterfaces/volumeGroups.js +9 -0
- package/dist-esm/src/operationsInterfaces/volumeGroups.js.map +1 -0
- package/dist-esm/src/operationsInterfaces/volumes.d.ts +82 -0
- package/dist-esm/src/operationsInterfaces/volumes.d.ts.map +1 -0
- package/dist-esm/src/operationsInterfaces/volumes.js +9 -0
- package/dist-esm/src/operationsInterfaces/volumes.js.map +1 -0
- package/dist-esm/test/elasticsan_examples.spec.d.ts +4 -0
- package/dist-esm/test/elasticsan_examples.spec.d.ts.map +1 -0
- package/dist-esm/test/elasticsan_examples.spec.js +80 -0
- package/dist-esm/test/elasticsan_examples.spec.js.map +1 -0
- package/package.json +122 -0
- package/review/arm-elasticsan.api.md +536 -0
- package/rollup.config.js +122 -0
- package/src/elasticSanManagement.ts +161 -0
- package/src/index.ts +12 -0
- package/src/lroImpl.ts +34 -0
- package/src/models/index.ts +787 -0
- package/src/models/mappers.ts +935 -0
- package/src/models/parameters.ts +199 -0
- package/src/operations/elasticSans.ts +683 -0
- package/src/operations/index.ts +13 -0
- package/src/operations/operations.ts +98 -0
- package/src/operations/skus.ts +96 -0
- package/src/operations/volumeGroups.ts +629 -0
- package/src/operations/volumes.ts +673 -0
- package/src/operationsInterfaces/elasticSans.ts +139 -0
- package/src/operationsInterfaces/index.ts +13 -0
- package/src/operationsInterfaces/operations.ts +22 -0
- package/src/operationsInterfaces/skus.ts +22 -0
- package/src/operationsInterfaces/volumeGroups.ts +147 -0
- package/src/operationsInterfaces/volumes.ts +157 -0
- package/tsconfig.json +33 -0
- package/types/arm-elasticsan.d.ts +1036 -0
- package/types/tsdoc-metadata.json +11 -0
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Microsoft Corporation.
|
|
3
|
+
* Licensed under the MIT License.
|
|
4
|
+
*
|
|
5
|
+
* Code generated by Microsoft (R) AutoRest Code Generator.
|
|
6
|
+
* Changes may cause incorrect behavior and will be lost if the code is regenerated.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import * as coreClient from "@azure/core-client";
|
|
10
|
+
import * as coreRestPipeline from "@azure/core-rest-pipeline";
|
|
11
|
+
import {
|
|
12
|
+
PipelineRequest,
|
|
13
|
+
PipelineResponse,
|
|
14
|
+
SendRequest
|
|
15
|
+
} from "@azure/core-rest-pipeline";
|
|
16
|
+
import * as coreAuth from "@azure/core-auth";
|
|
17
|
+
import {
|
|
18
|
+
OperationsImpl,
|
|
19
|
+
SkusImpl,
|
|
20
|
+
ElasticSansImpl,
|
|
21
|
+
VolumeGroupsImpl,
|
|
22
|
+
VolumesImpl
|
|
23
|
+
} from "./operations";
|
|
24
|
+
import {
|
|
25
|
+
Operations,
|
|
26
|
+
Skus,
|
|
27
|
+
ElasticSans,
|
|
28
|
+
VolumeGroups,
|
|
29
|
+
Volumes
|
|
30
|
+
} from "./operationsInterfaces";
|
|
31
|
+
import { ElasticSanManagementOptionalParams } from "./models";
|
|
32
|
+
|
|
33
|
+
export class ElasticSanManagement extends coreClient.ServiceClient {
|
|
34
|
+
$host: string;
|
|
35
|
+
apiVersion: string;
|
|
36
|
+
subscriptionId: string;
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Initializes a new instance of the ElasticSanManagement class.
|
|
40
|
+
* @param credentials Subscription credentials which uniquely identify client subscription.
|
|
41
|
+
* @param subscriptionId The ID of the target subscription.
|
|
42
|
+
* @param options The parameter options
|
|
43
|
+
*/
|
|
44
|
+
constructor(
|
|
45
|
+
credentials: coreAuth.TokenCredential,
|
|
46
|
+
subscriptionId: string,
|
|
47
|
+
options?: ElasticSanManagementOptionalParams
|
|
48
|
+
) {
|
|
49
|
+
if (credentials === undefined) {
|
|
50
|
+
throw new Error("'credentials' cannot be null");
|
|
51
|
+
}
|
|
52
|
+
if (subscriptionId === undefined) {
|
|
53
|
+
throw new Error("'subscriptionId' cannot be null");
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// Initializing default values for options
|
|
57
|
+
if (!options) {
|
|
58
|
+
options = {};
|
|
59
|
+
}
|
|
60
|
+
const defaults: ElasticSanManagementOptionalParams = {
|
|
61
|
+
requestContentType: "application/json; charset=utf-8",
|
|
62
|
+
credential: credentials
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
const packageDetails = `azsdk-js-arm-elasticsan/1.0.0-beta.1`;
|
|
66
|
+
const userAgentPrefix =
|
|
67
|
+
options.userAgentOptions && options.userAgentOptions.userAgentPrefix
|
|
68
|
+
? `${options.userAgentOptions.userAgentPrefix} ${packageDetails}`
|
|
69
|
+
: `${packageDetails}`;
|
|
70
|
+
|
|
71
|
+
if (!options.credentialScopes) {
|
|
72
|
+
options.credentialScopes = ["https://management.azure.com/.default"];
|
|
73
|
+
}
|
|
74
|
+
const optionsWithDefaults = {
|
|
75
|
+
...defaults,
|
|
76
|
+
...options,
|
|
77
|
+
userAgentOptions: {
|
|
78
|
+
userAgentPrefix
|
|
79
|
+
},
|
|
80
|
+
baseUri:
|
|
81
|
+
options.endpoint ?? options.baseUri ?? "https://management.azure.com"
|
|
82
|
+
};
|
|
83
|
+
super(optionsWithDefaults);
|
|
84
|
+
|
|
85
|
+
let bearerTokenAuthenticationPolicyFound: boolean = false;
|
|
86
|
+
if (options?.pipeline && options.pipeline.getOrderedPolicies().length > 0) {
|
|
87
|
+
const pipelinePolicies: coreRestPipeline.PipelinePolicy[] = options.pipeline.getOrderedPolicies();
|
|
88
|
+
bearerTokenAuthenticationPolicyFound = pipelinePolicies.some(
|
|
89
|
+
(pipelinePolicy) =>
|
|
90
|
+
pipelinePolicy.name ===
|
|
91
|
+
coreRestPipeline.bearerTokenAuthenticationPolicyName
|
|
92
|
+
);
|
|
93
|
+
}
|
|
94
|
+
if (
|
|
95
|
+
!options ||
|
|
96
|
+
!options.pipeline ||
|
|
97
|
+
options.pipeline.getOrderedPolicies().length == 0 ||
|
|
98
|
+
!bearerTokenAuthenticationPolicyFound
|
|
99
|
+
) {
|
|
100
|
+
this.pipeline.removePolicy({
|
|
101
|
+
name: coreRestPipeline.bearerTokenAuthenticationPolicyName
|
|
102
|
+
});
|
|
103
|
+
this.pipeline.addPolicy(
|
|
104
|
+
coreRestPipeline.bearerTokenAuthenticationPolicy({
|
|
105
|
+
credential: credentials,
|
|
106
|
+
scopes: `${optionsWithDefaults.credentialScopes}`,
|
|
107
|
+
challengeCallbacks: {
|
|
108
|
+
authorizeRequestOnChallenge:
|
|
109
|
+
coreClient.authorizeRequestOnClaimChallenge
|
|
110
|
+
}
|
|
111
|
+
})
|
|
112
|
+
);
|
|
113
|
+
}
|
|
114
|
+
// Parameter assignments
|
|
115
|
+
this.subscriptionId = subscriptionId;
|
|
116
|
+
|
|
117
|
+
// Assigning values to Constant parameters
|
|
118
|
+
this.$host = options.$host || "https://management.azure.com";
|
|
119
|
+
this.apiVersion = options.apiVersion || "2021-11-20-preview";
|
|
120
|
+
this.operations = new OperationsImpl(this);
|
|
121
|
+
this.skus = new SkusImpl(this);
|
|
122
|
+
this.elasticSans = new ElasticSansImpl(this);
|
|
123
|
+
this.volumeGroups = new VolumeGroupsImpl(this);
|
|
124
|
+
this.volumes = new VolumesImpl(this);
|
|
125
|
+
this.addCustomApiVersionPolicy(options.apiVersion);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/** A function that adds a policy that sets the api-version (or equivalent) to reflect the library version. */
|
|
129
|
+
private addCustomApiVersionPolicy(apiVersion?: string) {
|
|
130
|
+
if (!apiVersion) {
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
const apiVersionPolicy = {
|
|
134
|
+
name: "CustomApiVersionPolicy",
|
|
135
|
+
async sendRequest(
|
|
136
|
+
request: PipelineRequest,
|
|
137
|
+
next: SendRequest
|
|
138
|
+
): Promise<PipelineResponse> {
|
|
139
|
+
const param = request.url.split("?");
|
|
140
|
+
if (param.length > 1) {
|
|
141
|
+
const newParams = param[1].split("&").map((item) => {
|
|
142
|
+
if (item.indexOf("api-version") > -1) {
|
|
143
|
+
return "api-version=" + apiVersion;
|
|
144
|
+
} else {
|
|
145
|
+
return item;
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
request.url = param[0] + "?" + newParams.join("&");
|
|
149
|
+
}
|
|
150
|
+
return next(request);
|
|
151
|
+
}
|
|
152
|
+
};
|
|
153
|
+
this.pipeline.addPolicy(apiVersionPolicy);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
operations: Operations;
|
|
157
|
+
skus: Skus;
|
|
158
|
+
elasticSans: ElasticSans;
|
|
159
|
+
volumeGroups: VolumeGroups;
|
|
160
|
+
volumes: Volumes;
|
|
161
|
+
}
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Microsoft Corporation.
|
|
3
|
+
* Licensed under the MIT License.
|
|
4
|
+
*
|
|
5
|
+
* Code generated by Microsoft (R) AutoRest Code Generator.
|
|
6
|
+
* Changes may cause incorrect behavior and will be lost if the code is regenerated.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
/// <reference lib="esnext.asynciterable" />
|
|
10
|
+
export * from "./models";
|
|
11
|
+
export { ElasticSanManagement } from "./elasticSanManagement";
|
|
12
|
+
export * from "./operationsInterfaces";
|
package/src/lroImpl.ts
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Microsoft Corporation.
|
|
3
|
+
* Licensed under the MIT License.
|
|
4
|
+
*
|
|
5
|
+
* Code generated by Microsoft (R) AutoRest Code Generator.
|
|
6
|
+
* Changes may cause incorrect behavior and will be lost if the code is regenerated.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import { LongRunningOperation, LroResponse } from "@azure/core-lro";
|
|
10
|
+
|
|
11
|
+
export class LroImpl<T> implements LongRunningOperation<T> {
|
|
12
|
+
constructor(
|
|
13
|
+
private sendOperationFn: (args: any, spec: any) => Promise<LroResponse<T>>,
|
|
14
|
+
private args: Record<string, unknown>,
|
|
15
|
+
private spec: {
|
|
16
|
+
readonly requestBody?: unknown;
|
|
17
|
+
readonly path?: string;
|
|
18
|
+
readonly httpMethod: string;
|
|
19
|
+
} & Record<string, any>,
|
|
20
|
+
public requestPath: string = spec.path!,
|
|
21
|
+
public requestMethod: string = spec.httpMethod
|
|
22
|
+
) {}
|
|
23
|
+
public async sendInitialRequest(): Promise<LroResponse<T>> {
|
|
24
|
+
return this.sendOperationFn(this.args, this.spec);
|
|
25
|
+
}
|
|
26
|
+
public async sendPollRequest(path: string): Promise<LroResponse<T>> {
|
|
27
|
+
const { requestBody, ...restSpec } = this.spec;
|
|
28
|
+
return this.sendOperationFn(this.args, {
|
|
29
|
+
...restSpec,
|
|
30
|
+
path,
|
|
31
|
+
httpMethod: "GET"
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
}
|