@go-to-k/cdkd 0.290.12 → 0.290.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{asg-provider-Daqr0Ygq.js → asg-provider-CpUSth0q.js} +2 -2
- package/dist/{asg-provider-Daqr0Ygq.js.map → asg-provider-CpUSth0q.js.map} +1 -1
- package/dist/cli.js +2 -2
- package/dist/{deploy-engine-e6ZxOr56.js → deploy-engine-omGpC16W.js} +118 -7
- package/dist/deploy-engine-omGpC16W.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/{program-Cts1UWod.js → program-BDNXyKp5.js} +527 -325
- package/dist/{program-Cts1UWod.js.map → program-BDNXyKp5.js.map} +1 -1
- package/dist/{version-CEPJTaHl.js → version--dVnQSTI.js} +2 -2
- package/dist/{version-CEPJTaHl.js.map → version--dVnQSTI.js.map} +1 -1
- package/package.json +1 -1
- package/dist/deploy-engine-e6ZxOr56.js.map +0 -1
package/dist/cli.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { n as isVersionOnlyInvocation, t as getCdkdVersion } from "./version
|
|
2
|
+
import { n as isVersionOnlyInvocation, t as getCdkdVersion } from "./version--dVnQSTI.js";
|
|
3
3
|
|
|
4
4
|
//#region src/cli/pipe-close-handler.ts
|
|
5
5
|
/**
|
|
@@ -74,7 +74,7 @@ async function main() {
|
|
|
74
74
|
console.log(getCdkdVersion());
|
|
75
75
|
return;
|
|
76
76
|
}
|
|
77
|
-
const { buildProgram } = await import("./program-
|
|
77
|
+
const { buildProgram } = await import("./program-BDNXyKp5.js");
|
|
78
78
|
const program = buildProgram();
|
|
79
79
|
const args = reorderArgs(process.argv);
|
|
80
80
|
await program.parseAsync(args);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { C as displaySafe, S as displayIdent, d as applyDefaultNameForFallback, f as explicitNamePropertyFor, g as looksLikeCdkdGeneratedName, h as getCurrentStackName, m as generateResourceNameWithFallback, n as getLogger, p as generateResourceName, r as isStdoutReservedForPayload, s as getLiveRenderer, v as withStackName, x as UNRENDERABLE, y as withoutGeneratedFallbackName } from "./logger-C17H06QA.js";
|
|
2
2
|
import { t as awsClientDefaults } from "./aws-client-defaults-D-iYiIJ6.js";
|
|
3
|
-
import { t as getCdkdVersion } from "./version
|
|
3
|
+
import { t as getCdkdVersion } from "./version--dVnQSTI.js";
|
|
4
4
|
import { AsyncLocalStorage } from "node:async_hooks";
|
|
5
5
|
import { createHash, randomUUID } from "node:crypto";
|
|
6
6
|
import { CreateBucketCommand, DeleteObjectCommand, DeleteObjectsCommand, GetBucketLocationCommand, GetBucketReplicationCommand, GetObjectCommand, HeadBucketCommand, HeadObjectCommand, ListObjectVersionsCommand, ListObjectsV2Command, NoSuchKey, PutBucketEncryptionCommand, PutBucketPolicyCommand, PutObjectCommand, PutPublicAccessBlockCommand, S3Client, S3ServiceException } from "@aws-sdk/client-s3";
|
|
@@ -9133,6 +9133,53 @@ function shouldRetainResource(deletionPolicy) {
|
|
|
9133
9133
|
return deletionPolicy === "Retain" || deletionPolicy === "RetainExceptOnCreate";
|
|
9134
9134
|
}
|
|
9135
9135
|
/**
|
|
9136
|
+
* Can this container be read as the record map its type claims it is?
|
|
9137
|
+
*
|
|
9138
|
+
* THE single plain-object test behind every malformed-bag guard in the repo.
|
|
9139
|
+
* `parseStateBody` validates the root object and the schema version and
|
|
9140
|
+
* nothing inside, so a hand-edited or truncated record reaches a consumer with
|
|
9141
|
+
* `resources` / `outputs` / `attributes` / `properties` holding a string, a
|
|
9142
|
+
* list, a number or `null`. `Object.entries` walks a string or a list as
|
|
9143
|
+
* readily as a map, so either FABRICATES entries. `in` and `Object.hasOwn`
|
|
9144
|
+
* behave differently per shape and neither is a guard: `in` THROWS on a
|
|
9145
|
+
* string, a number and `null`, but ANSWERS on a list (`0 in [1,2]` and
|
|
9146
|
+
* `'length' in [1,2]` are both `true`), while `Object.hasOwn` ANSWERS on a
|
|
9147
|
+
* string and a list alike (`Object.hasOwn('abcdef', '0')` is `true`) and
|
|
9148
|
+
* throws ONLY on `null` / `undefined` — the one pair a `?? {}` upstream has
|
|
9149
|
+
* usually already absorbed, which is what makes it look like a guard. Do not
|
|
9150
|
+
* read a nearby `in` as already catching the list case. Widened past
|
|
9151
|
+
* `null` / `undefined` for
|
|
9152
|
+
* exactly that reason: `[]`, `5` and `"ab"` all survive `Object.entries` and
|
|
9153
|
+
* yield a bag that is empty or, for the string, absurd.
|
|
9154
|
+
*
|
|
9155
|
+
* WHY IT LIVES HERE rather than beside the guards that grew out of it. Its
|
|
9156
|
+
* first home was `src/state/malformed-resources-bag.ts`, which still re-exports
|
|
9157
|
+
* it so no importer moved; it came down to this module when
|
|
9158
|
+
* {@link importableOutputKeys} needed it (go-to-k/cdkd#3192). That helper sits
|
|
9159
|
+
* in `src/types/**`, the layer every other one imports and which imports
|
|
9160
|
+
* nothing itself, so the alternative — `src/types/state.ts` importing from
|
|
9161
|
+
* `src/state/**` — inverts the layering AND pulls that module's
|
|
9162
|
+
* `error-handler` / `display-safe` / `lock-contention-message` chain into the
|
|
9163
|
+
* one module the whole codebase depends on. Same move, same reason, as
|
|
9164
|
+
* `DEFAULT_STATE_PREFIX` in `src/state/state-prefix.ts`: home the leaf in the
|
|
9165
|
+
* layer that needs it, re-export from where it was.
|
|
9166
|
+
*
|
|
9167
|
+
* Spelling this test a second time at any call site is what the single export
|
|
9168
|
+
* exists to prevent: the copies could then drift, and the one that drifted
|
|
9169
|
+
* would fabricate again while looking guarded. Enumerate the consumers with
|
|
9170
|
+
* `grep -rn "isReadableBag" src/` rather than from a list here — three
|
|
9171
|
+
* successive enumerations of them, written by reasoning, came out incomplete.
|
|
9172
|
+
*
|
|
9173
|
+
* What it does NOT decide is whether a given container is malformed. That is a
|
|
9174
|
+
* per-container call, because ABSENCE means different things: an absent
|
|
9175
|
+
* `resources` bag is a defect, while an absent `outputs` bag is an ordinary
|
|
9176
|
+
* record `cdkd scrub` round-trips on purpose. Each caller pairs this predicate
|
|
9177
|
+
* with its own absence rule.
|
|
9178
|
+
*/
|
|
9179
|
+
function isReadableBag(container) {
|
|
9180
|
+
return typeof container === "object" && container !== null && !Array.isArray(container);
|
|
9181
|
+
}
|
|
9182
|
+
/**
|
|
9136
9183
|
* The keys of `state.outputs` an `Fn::ImportValue` may bind to (issue
|
|
9137
9184
|
* [#2193](https://github.com/go-to-k/cdkd/issues/2193)) — THE predicate
|
|
9138
9185
|
* behind "what does this stack export". Four readers used to answer that
|
|
@@ -9150,15 +9197,79 @@ function shouldRetainResource(deletionPolicy) {
|
|
|
9150
9197
|
*
|
|
9151
9198
|
* `outputs` is typed required but every consumer treats it as optional (a
|
|
9152
9199
|
* state file may simply have none), so it is read defensively here too.
|
|
9200
|
+
*
|
|
9201
|
+
* ## Two FAIL-CLOSED arms for a malformed record (go-to-k/cdkd#3192)
|
|
9202
|
+
*
|
|
9203
|
+
* Both answer `[]` — "this record exports nothing" — and neither repairs the
|
|
9204
|
+
* record or throws. The reasoning is the same for both and is a property of
|
|
9205
|
+
* WHERE this function sits: it is a pure predicate with no stack name, no
|
|
9206
|
+
* region and no writer of its own, reached from the exports-index rebuild, the
|
|
9207
|
+
* deploy-time resolver's state scan, `cdkd diff`'s no-change merge and the
|
|
9208
|
+
* local-command loader. Throwing here would be the bare `TypeError`
|
|
9209
|
+
* go-to-k/cdkd#3018 set out to remove, renamed; and refusing the whole
|
|
9210
|
+
* operation over ONE foreign record would take every OTHER stack's
|
|
9211
|
+
* `Fn::ImportValue` down with it. Publishing nothing from a record whose
|
|
9212
|
+
* export set cannot be read is the only answer that fabricates nothing and
|
|
9213
|
+
* destroys nothing — the damaged record is left exactly as it is, for the
|
|
9214
|
+
* write-capable commands (`cdkd orphan` / `import` / `scrub`) to REFUSE by
|
|
9215
|
+
* name.
|
|
9216
|
+
*
|
|
9217
|
+
* 1. `outputs` is not a readable bag. `Object.keys('abcdef')` is
|
|
9218
|
+
* `['0'...'5']`, so the pre-fix code published one fabricated export per
|
|
9219
|
+
* CHARACTER into `cdkd/_index/<region>/exports.json` — the shared index
|
|
9220
|
+
* every consumer's `Fn::ImportValue` binds against. {@link isReadableBag}
|
|
9221
|
+
* is the test, so an ABSENT bag keeps answering `[]` exactly as the old
|
|
9222
|
+
* `?? {}` did; no verdict moves on a healthy or an absent record.
|
|
9223
|
+
* 2. `exportNames` is present but not an array. `state.exportNames.filter(...)`
|
|
9224
|
+
* threw `TypeError: state.exportNames.filter is not a function` on a
|
|
9225
|
+
* hand-edited non-array or `null`, from `cdkd diff` among others. Falling
|
|
9226
|
+
* back to the `undefined` arm instead would be fail-OPEN in the one
|
|
9227
|
+
* direction #2193 exists to close — every plain Output name published as an
|
|
9228
|
+
* export — so a corrupt set is read as an EMPTY set, not as an unknown one.
|
|
9229
|
+
* A non-string element is dropped for the same reason: `Object.hasOwn` does
|
|
9230
|
+
* not throw on one, it COERCES, so `exportNames: [0]` would otherwise
|
|
9231
|
+
* publish the bag's `"0"` key. The filter is the identity on every healthy
|
|
9232
|
+
* `string[]`.
|
|
9153
9233
|
*/
|
|
9154
9234
|
function importableOutputKeys(state) {
|
|
9155
|
-
|
|
9235
|
+
if (!hasReadableExportSet(state)) return [];
|
|
9236
|
+
const outputs = state.outputs;
|
|
9156
9237
|
if (state.exportNames === void 0) return Object.keys(outputs);
|
|
9157
|
-
return state.exportNames.filter((name) => Object.hasOwn(outputs, name));
|
|
9238
|
+
return state.exportNames.filter((name) => typeof name === "string" && Object.hasOwn(outputs, name));
|
|
9239
|
+
}
|
|
9240
|
+
/**
|
|
9241
|
+
* Whether {@link importableOutputKeys} can answer from this record at all —
|
|
9242
|
+
* the two fail-closed arms of its own doc, as ONE predicate a caller can ask
|
|
9243
|
+
* (issue go-to-k/cdkd#3192).
|
|
9244
|
+
*
|
|
9245
|
+
* It exists because `[]` is a real answer: a stack that exports nothing and a
|
|
9246
|
+
* record whose export set could not be read produce the identical empty list,
|
|
9247
|
+
* and a caller that must SAY which one it got cannot re-derive the difference
|
|
9248
|
+
* from the list. `ExportIndexStore`'s rebuild is that caller — a silent
|
|
9249
|
+
* fail-closed there would leave the next `Fn::ImportValue` miss naming the
|
|
9250
|
+
* consumer rather than the damaged producer record.
|
|
9251
|
+
*
|
|
9252
|
+
* ONE spelling shared with {@link importableOutputKeys}, which calls this
|
|
9253
|
+
* rather than repeating the two tests: a second copy could drift, and the copy
|
|
9254
|
+
* that drifted would report a record readable while the key list stayed empty,
|
|
9255
|
+
* or the reverse.
|
|
9256
|
+
*
|
|
9257
|
+
* `outputs` absent answers FALSE here, unlike
|
|
9258
|
+
* `malformed-resources-bag.ts`'s `hasReadableOutputs`, and the difference is
|
|
9259
|
+
* the QUESTION rather than a disagreement: that one asks "is this record
|
|
9260
|
+
* damaged" (an absent bag is an ordinary record), this one asks "can an export
|
|
9261
|
+
* set be read off it" (it cannot). A caller that must tell absent from damaged
|
|
9262
|
+
* tests for absence first, as the exports-index rebuild does.
|
|
9263
|
+
*/
|
|
9264
|
+
function hasReadableExportSet(state) {
|
|
9265
|
+
if (!isReadableBag(state.outputs)) return false;
|
|
9266
|
+
if (state.exportNames === void 0) return true;
|
|
9267
|
+
if (!Array.isArray(state.exportNames)) return false;
|
|
9268
|
+
return state.exportNames.length === 0 || state.exportNames.some((n) => typeof n === "string");
|
|
9158
9269
|
}
|
|
9159
9270
|
/** `state.outputs` narrowed to its {@link importableOutputKeys}. */
|
|
9160
9271
|
function importableOutputs(state) {
|
|
9161
|
-
const outputs = state.outputs
|
|
9272
|
+
const outputs = isReadableBag(state.outputs) ? state.outputs : {};
|
|
9162
9273
|
const picked = Object.create(null);
|
|
9163
9274
|
for (const name of importableOutputKeys(state)) picked[name] = outputs[name];
|
|
9164
9275
|
return picked;
|
|
@@ -29310,7 +29421,7 @@ var CloudControlProvider = class {
|
|
|
29310
29421
|
const indeterminateGuard = await this.confirmDeleteTargetIdentity(logicalId, resourceType, physicalId, context);
|
|
29311
29422
|
if (context?.removeProtection === true && resourceType === "AWS::AutoScaling::AutoScalingGroup") {
|
|
29312
29423
|
this.logger.debug(`Delegating protected AutoScalingGroup ${logicalId} delete to the SDK ASGProvider (Cloud Control cannot force-delete a protected ASG)`);
|
|
29313
|
-
const { ASGProvider } = await import("./asg-provider-
|
|
29424
|
+
const { ASGProvider } = await import("./asg-provider-CpUSth0q.js").then((n) => n.n);
|
|
29314
29425
|
const asgProvider = new ASGProvider();
|
|
29315
29426
|
return withIndeterminateGuard(await asgProvider.delete(logicalId, physicalId, resourceType, _properties, context), indeterminateGuard);
|
|
29316
29427
|
}
|
|
@@ -42039,5 +42150,5 @@ var DeployEngine = class DeployEngine {
|
|
|
42039
42150
|
};
|
|
42040
42151
|
|
|
42041
42152
|
//#endregion
|
|
42042
|
-
export { secretBearing as $,
|
|
42043
|
-
//# sourceMappingURL=deploy-engine-
|
|
42153
|
+
export { secretBearing as $, BOOTSTRAP_MARKER_PREFIX as $n, getAwsClients as $r, s3BucketRegionalDomainName as $t, extractDeploymentEventError as A, markNonRetryable as Ai, buildForceUnlockCommand as An, resolveAutoAssetStorage as Ar, parameterTypeMayLoseSecretIdentity as At, toCfnInteger as B, importableOutputs as Bn, MIGRATE_TMP_PREFIX as Br, configIntegerRefusal as Bt, buildFinalSnapshotIdentifier as C, isCdkdError as Ci, recordMaskOnlyValue as Cn, AssetManifestLoader as Cr, IntrinsicFunctionResolver as Ct, refusesFinalSnapshot as D, isRetryableTransientError as Di, LockManager as Dn, getDefaultStateBucketName as Dr, getAccountInfo as Dt, isFinalSnapshotError as E, isMarkedNonRetryable as Ei, scrubResourceRecord as En, synthesisStatusMessage as Er, coerceParameterTypedValue as Et, isStatefulRecreateTargetSync as F, CUSTOM_RESOURCE_RESPONSE_PREFIX as Fn, resolveUseCdkBootstrapAssets as Fr, resolveExplicitPhysicalId as Ft, gray as G, AssetPublisher as Gn, PARTITION_TABLE as Gr, requireConfigObject as Gt, formatResourceLine as H, orphansAfterRollback as Hn, uploadCfnTemplate as Hr, readConfigString as Ht, renderStatefulReason as I, DEFAULT_STATE_PREFIX as In, stateBucketExistenceConfirmed as Ir, assertRegionMatch as It, yellow as J, buildAssetRedirectMap as Jn, AssemblyReader as Jr, producerRegionsFromState as Jt, green as K, stringifyValue as Kn, canonicalizeRegion as Kr, requireConfigString as Kt, WARM_THROUGHPUT_MEMBERS as L, exportNamesCarriedFrom as Ln, warnDeprecatedNoPrefixCliFlag as Lr, coerceCfnBoolean as Lt, planOrphanAdoption as M, retryClassificationText as Mi, forceQuitRecoveryClause as Mn, resolveSkipPrefix as Mr, isSettledInstanceState as Mt, MULTI_REGION_RECREATE_BLOCKED_TYPES as N, __exportAll as Ni, formatLockExpiry as Nn, resolveStateBucketWithDefault as Nr, WAFv2WebACLProvider as Nt, unsupportedFinalSnapshotError as O, isThrottlingError as Oi, S3StateBackend as On, getLegacyStateBucketName as Or, isImpossibleEmptyStoredAttribute as Ot, isStatefulRecreateTargetForReplace as P, shellQuote as Pn, resolveStateBucketWithDefaultAndSource as Pr, normalizeAwsTagsToCfn as Pt, isExportAliasCollision as Q, AssetModeResolver as Qn, AwsClients as Qr, s3BucketDualStackDomainName as Qt, coerceWarmThroughput as R, hasReadableExportSet as Rn, CFN_TEMPLATE_BODY_LIMIT as Rr, coerceCfnInteger as Rt, PRE_DELETE_SNAPSHOT_TYPES as S, formatError as Si, maskSecretsInText as Sn, stripControlChars as Sr, isTerminationProtectionPropagationError as St, createPreDeleteFinalSnapshot as T, withErrorHandling as Ti, redactSecretsForState as Tn, Synthesizer as Tr, cfnRefValueFromPhysicalId as Tt, bold as U, orphansCarriedFrom as Un, CUSTOM_RESOURCE_RESPONSE_OBJECT_DESCRIPTION as Ur, replayWarn as Ut, toFiniteNumber as V, isReadableBag as Vn, findLargeInlineResources as Vr, configStringRefusal as Vt, cyan as W, shouldRetainResource as Wn, expectedOwnerParam as Wr, requireConfigArray as Wt, collectPublishedOutputNames as X, loadPublishableAssetManifest as Xn, clearBucketRegionCache as Xr, s3BucketArn as Xt, collectDeclaredOutputNames as Y, createAssetRedirectResolver as Yn, processStackMessages as Yr, withSharedDrainBudget as Yt, exportAliasCollisionScrubWarning as Z, rewriteTemplateAssetReferences as Zn, resolveBucketRegion as Zr, s3BucketDomainName as Zt, isSecretBearingReferenceString as _, ResourceUpdateNotSupportedError as _i, errorCauseChain as _n, partitionSensitiveEnv as _r, slowCcOperationTimeoutMs as _t, DeploymentEventsStore as a, CrossAccountSecretRefusalError as ai, findSilentDropProperties as an, readBootstrapMarkerBody as ar, clearOnUpdateRemoval as at, bindingSkippedOutputs as b, StateError as bi, markSameGenerationBag as bn, runDockerStreaming as br, deleteSkipReason as bt, replayFailedOperations as c, DynamicReferenceRegionAmbiguousError as ci, DagBuilder as cn, buildDenyExternalAccessPolicy as cr, createMaskedRetryLogger as ct, updatePartialReason as d, LocalStartServiceError as di, STATE_SOURCED_CROSS_GENERATION_RULES as dn, describeDockerCapturedOutput as dr, beginCommandInterruptScope as dt, resetAwsClients as ei, s3BucketWebsiteUrl as en, assertAssetBucketRegion as er, secretBearingStateKeyWarning as et, withResourceDeadline as f, LockError as fi, STATE_SOURCED_READBACK_RULES as fn, describeDockerExecFailure as fr, endCommandInterruptScope as ft, bagHoldsSecretExpression as g, ResourceTimeoutError as gi, dynamicReferenceTokens as gn, getDockerCmd as gr, CloudControlProvider as gt, computeImplicitDeleteEdges as h, ProvisioningError as hi, createSecretMasker as hn, formatDockerLoginError as hr, startInterruptWatch as ht, DeploymentEventsReader as i, ConfigError as ii, findActionableSilentDrops as in, parseBootstrapMarker as ir, collectInlinePolicyNamesManagedBySiblings as it, makeSiblingClaimReader as j, markRedactedCause as ji, buildLockContentionMessage as jn, resolveCaptureObservedState as jr, refStateLookupFromResource as jt, makeCanonicalizePropertiesFn as k, isTransientServerError as ki, rebuildClientForBucketRegion as kn, resolveApp as kr, isUnboundTemplateParameter as kt, replayRollback as l, IntrinsicResolutionRefusalError as li, TemplateParser as ln, describeAwsFailure as lr, maskDeep as lt, IMPLICIT_DELETE_DEPENDENCIES as m, PartialFailureError as mi, carriesSecretMask as mn, dockerSpawnEnvWithSensitive as mr, isInterruptedWaitError as mt, DEFAULT_RESOURCE_WARN_AFTER_MS as n, AssetError as ni, DiffCalculator as nn, getBootstrapMarkerKey as nr, getCurrentResourceSecrets as nt, planFailedOps as o, DependencyError as oi, describeTypeWithThrottleRetry as on, validateAssetBucketName as or, ProviderRegistry as ot, maskingRetryLogger as p, NestedStackChildDirectDestroyError as pi, TEMPLATE_SOURCED_RULES as pn, describeDockerFailure as pr, interruptWatchListenerCount as pt, red as q, WorkGraph as qn, derivePartitionAndUrlSuffix as qr, classifyReplaySecretRegion as qt, DeployEngine as r, CdkdError as ri, INTRINSIC_KEYS as rn, isCrossRegionRedirect as rr, IAMRoleProvider as rt, planRollback as s, DeployCancelledError as si, withRetry as sn, validateContainerRepoName as sr, wouldReturnToSdkProvider as st, DEFAULT_RESOURCE_TIMEOUT_MS as t, setAwsClients as ti, applyRoleArnIfSet as tn, ensureAssetStorage as tr, secretSafeKeyDisplay as tt, updatePartialMessage as u, LocalInvokeBuildError as ui, STATE_SOURCED_BASELINE_RULES as un, buildDockerImage as ur, maskerOrIdentity as ut, keptWholeReasonText as v, StackHasActiveImportsError as vi, identityKeyFor as vn, redactDockerArgvValues as vr, UNSPECIFIED_SKIP_REASON as vt, ccRoutedFinalSnapshotError as w, normalizeAwsError as wi, recoverMaskedOutput as wn, getDockerImageBySourceHash as wr, carriesDynamicReference as wt, ATOMIC_FINAL_SNAPSHOT_TYPES as x, SynthesisError as xi, maskSecretsInError as xn, escapeRegExp$1 as xr, disableInstanceApiTermination as xt, mergeNoChangeOutputs as y, StackTerminationProtectionError as yi, isSingleDynamicReferenceToken as yn, runDockerForeground as yr, deleteIndeterminateGuards as yt, isWarmThroughputDecrease as z, importableOutputKeys as zn, CFN_TEMPLATE_URL_LIMIT as zr, configBooleanRefusal as zt };
|
|
42154
|
+
//# sourceMappingURL=deploy-engine-omGpC16W.js.map
|