@microsoft/1ds-core-js 4.4.0-nightlybeta3.2602-27 → 4.4.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/README.md +56 -0
- package/bundle/es5/{ms.core-4.4.0-nightlybeta3.2602-27.gbl.js → ms.core-4.4.1.gbl.js} +498 -511
- package/bundle/es5/ms.core-4.4.1.gbl.js.map +1 -0
- package/bundle/es5/ms.core-4.4.1.gbl.min.js +7 -0
- package/bundle/es5/ms.core-4.4.1.gbl.min.js.map +1 -0
- package/bundle/es5/ms.core-4.4.1.integrity.json +46 -0
- package/bundle/es5/{ms.core-4.4.0-nightlybeta3.2602-27.js → ms.core-4.4.1.js} +498 -511
- package/bundle/es5/ms.core-4.4.1.js.map +1 -0
- package/bundle/es5/ms.core-4.4.1.min.js +7 -0
- package/bundle/es5/ms.core-4.4.1.min.js.map +1 -0
- package/bundle/es5/ms.core.gbl.js +497 -510
- package/bundle/es5/ms.core.gbl.js.map +1 -1
- package/bundle/es5/ms.core.gbl.min.js +2 -2
- package/bundle/es5/ms.core.gbl.min.js.map +1 -1
- package/bundle/es5/ms.core.integrity.json +17 -17
- package/bundle/es5/ms.core.js +497 -510
- package/bundle/es5/ms.core.js.map +1 -1
- package/bundle/es5/ms.core.min.js +2 -2
- package/bundle/es5/ms.core.min.js.map +1 -1
- package/dist/es5/ms.core.js +495 -508
- package/dist/es5/ms.core.js.map +1 -1
- package/dist/es5/ms.core.min.js +2 -2
- package/dist/es5/ms.core.min.js.map +1 -1
- package/dist-es5/Index.js +9 -22
- package/dist-es5/Index.js.map +1 -1
- package/package.json +69 -72
- package/types/1ds-core-js.d.ts +110 -691
- package/types/1ds-core-js.namespaced.d.ts +54 -5
- package/bundle/es5/ms.core-4.4.0-nightlybeta3.2602-27.gbl.js.map +0 -1
- package/bundle/es5/ms.core-4.4.0-nightlybeta3.2602-27.gbl.min.js +0 -7
- package/bundle/es5/ms.core-4.4.0-nightlybeta3.2602-27.gbl.min.js.map +0 -1
- package/bundle/es5/ms.core-4.4.0-nightlybeta3.2602-27.integrity.json +0 -46
- package/bundle/es5/ms.core-4.4.0-nightlybeta3.2602-27.js.map +0 -1
- package/bundle/es5/ms.core-4.4.0-nightlybeta3.2602-27.min.js +0 -7
- package/bundle/es5/ms.core-4.4.0-nightlybeta3.2602-27.min.js.map +0 -1
- package/dist-es5/AppInsightsCore.js +0 -96
- package/dist-es5/AppInsightsCore.js.map +0 -1
- package/dist-es5/BaseCore.js +0 -67
- package/dist-es5/BaseCore.js.map +0 -1
- package/dist-es5/DataModels.js +0 -7
- package/dist-es5/DataModels.js.map +0 -1
- package/dist-es5/Enums.js +0 -92
- package/dist-es5/Enums.js.map +0 -1
- package/dist-es5/InternalConstants.js +0 -19
- package/dist-es5/InternalConstants.js.map +0 -1
- package/dist-es5/Utils.js +0 -397
- package/dist-es5/Utils.js.map +0 -1
- package/dist-es5/ValueSanitizer.js +0 -262
- package/dist-es5/ValueSanitizer.js.map +0 -1
- package/dist-es5/__DynamicConstants.js +0 -28
- package/dist-es5/__DynamicConstants.js.map +0 -1
- package/dist-es5/extSpanUtils.js +0 -308
- package/dist-es5/extSpanUtils.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"extSpanUtils.js.map","sources":["extSpanUtils.js"],"sourcesContent":["// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT License.\r\nimport { ATTR_CLIENT_ADDRESS, ATTR_CLIENT_PORT, ATTR_ENDUSER_ID, ATTR_ENDUSER_PSEUDO_ID, ATTR_ERROR_TYPE, ATTR_EXCEPTION_MESSAGE, ATTR_EXCEPTION_STACKTRACE, ATTR_EXCEPTION_TYPE, ATTR_HTTP_REQUEST_METHOD, ATTR_HTTP_RESPONSE_STATUS_CODE, ATTR_NETWORK_LOCAL_ADDRESS, ATTR_NETWORK_LOCAL_PORT, ATTR_NETWORK_PEER_ADDRESS, ATTR_NETWORK_PEER_PORT, ATTR_NETWORK_PROTOCOL_NAME, ATTR_NETWORK_PROTOCOL_VERSION, ATTR_NETWORK_TRANSPORT, ATTR_SERVER_ADDRESS, ATTR_SERVER_PORT, ATTR_URL_FULL, ATTR_URL_PATH, ATTR_URL_QUERY, ATTR_URL_SCHEME, ATTR_USER_AGENT_ORIGINAL, EXP_ATTR_ENDUSER_ID, EXP_ATTR_ENDUSER_PSEUDO_ID, EXP_ATTR_SYNTHETIC_TYPE, SEMATTRS_DB_NAME, SEMATTRS_DB_OPERATION, SEMATTRS_DB_STATEMENT, SEMATTRS_DB_SYSTEM, SEMATTRS_ENDUSER_ID, SEMATTRS_EXCEPTION_MESSAGE, SEMATTRS_EXCEPTION_STACKTRACE, SEMATTRS_EXCEPTION_TYPE, SEMATTRS_HTTP_CLIENT_IP, SEMATTRS_HTTP_FLAVOR, SEMATTRS_HTTP_HOST, SEMATTRS_HTTP_METHOD, SEMATTRS_HTTP_ROUTE, SEMATTRS_HTTP_SCHEME, SEMATTRS_HTTP_STATUS_CODE, SEMATTRS_HTTP_TARGET, SEMATTRS_HTTP_URL, SEMATTRS_HTTP_USER_AGENT, SEMATTRS_NET_HOST_IP, SEMATTRS_NET_HOST_NAME, SEMATTRS_NET_HOST_PORT, SEMATTRS_NET_PEER_IP, SEMATTRS_NET_PEER_NAME, SEMATTRS_NET_PEER_PORT, SEMATTRS_NET_TRANSPORT, SEMATTRS_PEER_SERVICE, SEMATTRS_RPC_GRPC_STATUS_CODE, SEMATTRS_RPC_SYSTEM, createAttributeContainer, fieldRedaction, getHttpClientIp, getHttpHost, getHttpMethod, getHttpScheme, getHttpStatusCode, getHttpUrl, getSyntheticType, getUserAgent, hrTimeToMilliseconds, toISOString } from \"@microsoft/applicationinsights-core-js\";\r\nimport { arrIncludes, asString, getLazy, getNavigator, isBoolean, isNullOrUndefined, isNumber, isString, strLower, strStartsWith, throwError } from \"@nevware21/ts-utils\";\r\nimport { STR_NOT_SPECIFIED } from \"./InternalConstants\";\r\nimport { _DYN_BASE_DATA, _DYN_KIND } from \"./__DynamicConstants\";\r\n/**\r\n * Azure SDK namespace.\r\n * @internal\r\n */\r\nvar AzNamespace = \"az.namespace\";\r\nvar AzResourceNamespace = \"azure.resource_provider.namespace\";\r\nvar PORT_REGEX = ( /*#__PURE__*/getLazy(function () { return new RegExp(/(https?)(:\\/\\/.*)(:\\d+)(\\S*)/); }));\r\nvar HTTP_DOT = \"http.\";\r\nvar _MS_PROCESSED_BY_METRICS_EXTRACTORS = \"_MS.ProcessedByMetricExtractors\";\r\n/**\r\n * Legacy HTTP semantic convention values\r\n * @internal\r\n */\r\nvar _ignoreSemanticValues = ( /* #__PURE__*/getLazy(_initIgnoreSemanticValues));\r\n/* #__NO_SIDE_EFFECTS__ */\r\nfunction _initIgnoreSemanticValues() {\r\n return [\r\n // Internal Microsoft attributes\r\n _MS_PROCESSED_BY_METRICS_EXTRACTORS,\r\n // Legacy HTTP semantic values\r\n SEMATTRS_NET_PEER_IP,\r\n SEMATTRS_NET_PEER_NAME,\r\n SEMATTRS_NET_HOST_IP,\r\n SEMATTRS_PEER_SERVICE,\r\n SEMATTRS_HTTP_USER_AGENT,\r\n SEMATTRS_HTTP_METHOD,\r\n SEMATTRS_HTTP_URL,\r\n SEMATTRS_HTTP_STATUS_CODE,\r\n SEMATTRS_HTTP_ROUTE,\r\n SEMATTRS_HTTP_HOST,\r\n SEMATTRS_DB_SYSTEM,\r\n SEMATTRS_DB_STATEMENT,\r\n SEMATTRS_DB_OPERATION,\r\n SEMATTRS_DB_NAME,\r\n SEMATTRS_RPC_SYSTEM,\r\n SEMATTRS_RPC_GRPC_STATUS_CODE,\r\n SEMATTRS_EXCEPTION_TYPE,\r\n SEMATTRS_EXCEPTION_MESSAGE,\r\n SEMATTRS_EXCEPTION_STACKTRACE,\r\n SEMATTRS_HTTP_SCHEME,\r\n SEMATTRS_HTTP_TARGET,\r\n SEMATTRS_HTTP_FLAVOR,\r\n SEMATTRS_NET_TRANSPORT,\r\n SEMATTRS_NET_HOST_NAME,\r\n SEMATTRS_NET_HOST_PORT,\r\n SEMATTRS_NET_PEER_PORT,\r\n SEMATTRS_HTTP_CLIENT_IP,\r\n SEMATTRS_ENDUSER_ID,\r\n HTTP_DOT + \"status_text\",\r\n // http Semabtic conventions\r\n ATTR_CLIENT_ADDRESS,\r\n ATTR_CLIENT_PORT,\r\n ATTR_SERVER_ADDRESS,\r\n ATTR_SERVER_PORT,\r\n ATTR_URL_FULL,\r\n ATTR_URL_PATH,\r\n ATTR_URL_QUERY,\r\n ATTR_URL_SCHEME,\r\n ATTR_ERROR_TYPE,\r\n ATTR_NETWORK_LOCAL_ADDRESS,\r\n ATTR_NETWORK_LOCAL_PORT,\r\n ATTR_NETWORK_PROTOCOL_NAME,\r\n ATTR_NETWORK_PEER_ADDRESS,\r\n ATTR_NETWORK_PEER_PORT,\r\n ATTR_NETWORK_PROTOCOL_VERSION,\r\n ATTR_NETWORK_TRANSPORT,\r\n ATTR_USER_AGENT_ORIGINAL,\r\n ATTR_HTTP_REQUEST_METHOD,\r\n ATTR_HTTP_RESPONSE_STATUS_CODE,\r\n ATTR_EXCEPTION_TYPE,\r\n ATTR_EXCEPTION_MESSAGE,\r\n ATTR_EXCEPTION_STACKTRACE,\r\n EXP_ATTR_ENDUSER_ID,\r\n EXP_ATTR_ENDUSER_PSEUDO_ID,\r\n EXP_ATTR_SYNTHETIC_TYPE,\r\n // Azure SDK attributes are not included as they are not part of the span attributes\r\n AzNamespace,\r\n AzResourceNamespace,\r\n \"az.client_request_id\",\r\n \"azure.client.id\",\r\n \"az.service_request_id\",\r\n \"azure.service.request.id\"\r\n ];\r\n}\r\nfunction _applyExtValue(ext, extName, name, value, overwriteExt) {\r\n if (isString(value) || isNumber(value) || isBoolean(value)) {\r\n var target = ext[extName] = ext[extName] || {};\r\n _applyValue(target, name, value, overwriteExt);\r\n }\r\n}\r\nfunction _applyValue(target, name, value, overwriteTarget) {\r\n if (target) {\r\n if (isString(value) || isNumber(value) || isBoolean(value)) {\r\n var targetValue = target[name];\r\n if (!overwriteTarget && (targetValue || isString(targetValue) || isNumber(targetValue) || isBoolean(targetValue))) {\r\n value = targetValue;\r\n }\r\n target[name] = value;\r\n }\r\n }\r\n return target;\r\n}\r\nfunction _populateExtensionsFromSpan(telemetryItem, span, container) {\r\n var ext = telemetryItem.ext = telemetryItem.ext || {};\r\n // Map OpenTelemetry enduser attributes to Application Insights user attributes\r\n var endUserId = container.get(ATTR_ENDUSER_ID);\r\n if (endUserId) {\r\n _applyExtValue(ext, \"user\", \"authId\", asString(endUserId), false);\r\n }\r\n var endUserPseudoId = container.get(ATTR_ENDUSER_PSEUDO_ID);\r\n if (endUserPseudoId) {\r\n _applyExtValue(ext, \"user\", \"id\", asString(endUserPseudoId), false);\r\n }\r\n}\r\n/**\r\n * Check to see if the key is in the list of known properties to ignore (exclude)\r\n * from part C properties population.\r\n * @param key - the property key to check\r\n * @param contextKeys - The current context keys\r\n * @returns true if the key should be ignored, false otherwise\r\n */\r\nfunction _isIgnorePartCKey(key) {\r\n var result = false;\r\n if (arrIncludes(_ignoreSemanticValues.v, key)) {\r\n // The key is in set of known keys to ignore\r\n result = true;\r\n }\r\n else if (strStartsWith(key, \"microsoft.\")) {\r\n // Ignoring all ALL keys starting with \"microsoft.\"\r\n result = true;\r\n }\r\n return result;\r\n}\r\nfunction _populatePartC(item, container) {\r\n if (container) {\r\n var partC_1 = item.data = (item.data || {});\r\n _applyValue(partC_1, \"httpHost\", getHttpHost(container), false);\r\n _applyValue(partC_1, \"httpScheme\", getHttpScheme(container), false);\r\n _applyValue(partC_1, \"httpClientIp\", getHttpClientIp(container), false);\r\n _applyValue(partC_1, \"httpUserAgent\", getUserAgent(container), false);\r\n _applyValue(partC_1, \"httpRoute\", container.get(SEMATTRS_HTTP_ROUTE), false);\r\n _applyValue(partC_1, \"netPeerName\", container.get(SEMATTRS_NET_PEER_NAME), false);\r\n _applyValue(partC_1, \"netPeerPort\", container.get(SEMATTRS_NET_PEER_PORT), false);\r\n _applyValue(partC_1, \"netPeerIp\", container.get(SEMATTRS_NET_PEER_IP), false);\r\n _applyValue(partC_1, \"peerService\", container.get(\"service.name\") || container.get(SEMATTRS_PEER_SERVICE), false);\r\n var syntheticSource = getSyntheticType(container);\r\n if (!!syntheticSource) {\r\n _applyValue(partC_1, \"userAgentSyntheticType\", syntheticSource, false);\r\n }\r\n var nav = getNavigator();\r\n if (nav && nav.userAgent) {\r\n _applyValue(partC_1, \"userAgentOriginal\", nav.userAgent, false);\r\n }\r\n // Azure SDK fields\r\n _applyValue(partC_1, \"azureClientRequestId\", container.get(\"azure.client.id\") || container.get(\"az.client_request_id\"), false);\r\n _applyValue(partC_1, \"azureServiceRequestId\", container.get(\"azure.service.request.id\") || container.get(\"az.service_request_id\"), false);\r\n var sampleRate = container.get(\"microsoft.sample_rate\");\r\n if (!isNullOrUndefined(sampleRate)) {\r\n _applyValue(partC_1, \"sampleRate\", sampleRate, false);\r\n }\r\n container.forEach(function (key, value) {\r\n // Avoid duplication ignoring fields already mapped.\r\n if (!_isIgnorePartCKey(key)) {\r\n partC_1[key] = value;\r\n }\r\n });\r\n }\r\n}\r\nfunction _populateHttpProperties(otelSpanTelemetry, container, httpMethod, config) {\r\n if (httpMethod) {\r\n // Step the HTTP method\r\n _applyValue(otelSpanTelemetry, \"httpMethod\", httpMethod, false);\r\n // HTTP Dependency\r\n var httpUrl = getHttpUrl(container);\r\n if (httpUrl) {\r\n try {\r\n // Remove default port\r\n var res = PORT_REGEX.v.exec(asString(httpUrl));\r\n if (res !== null) {\r\n var protocol = res[1];\r\n var port = res[3];\r\n if ((protocol === \"https\" && port === \":443\") ||\r\n (protocol === \"http\" && port === \":80\")) {\r\n // Drop port\r\n httpUrl = res[1] + res[2] + res[4];\r\n }\r\n }\r\n }\r\n catch (_a) {\r\n /* no-op */\r\n }\r\n _applyValue(otelSpanTelemetry, \"httpUrl\", fieldRedaction(asString(httpUrl), config), false);\r\n }\r\n var httpStatusCode = getHttpStatusCode(container);\r\n if (httpStatusCode) {\r\n _applyValue(otelSpanTelemetry, \"httpStatusCode\", httpStatusCode, false);\r\n }\r\n }\r\n}\r\nfunction _populateDbProperties(otelSpanTelemetry, container, dbSystem) {\r\n if (dbSystem) {\r\n _applyValue(otelSpanTelemetry, \"dbSystem\", dbSystem, false);\r\n // Set the statement\r\n _applyValue(otelSpanTelemetry, \"dbStatement\", container.get(SEMATTRS_DB_STATEMENT) || container.get(SEMATTRS_DB_OPERATION), false);\r\n _applyValue(otelSpanTelemetry, \"dbName\", container.get(SEMATTRS_DB_NAME) || dbSystem || \"<undefined>\", false);\r\n }\r\n}\r\nfunction _populateRpcDependencyProperties(otelSpanTelemetry, container, rpcSystem) {\r\n if (rpcSystem) {\r\n _applyValue(otelSpanTelemetry, \"rpcSystem\", strLower(rpcSystem), false);\r\n _applyValue(otelSpanTelemetry, \"rpcGrpcStatusCode\", container.get(SEMATTRS_RPC_GRPC_STATUS_CODE), false);\r\n }\r\n}\r\nfunction _createOTelSpanTelemetryItem(core, span) {\r\n var container = span.attribContainer || createAttributeContainer(span.attributes);\r\n var spanCtx = span.spanContext();\r\n var statusCode = span.status ? span.status.code : 0 /* eOTelSpanStatusCode.UNSET */;\r\n var spanTelemetry = {\r\n name: span.name,\r\n kind: span[_DYN_KIND /* @min:%2ekind */],\r\n startTime: toISOString(new Date(hrTimeToMilliseconds(span.startTime))),\r\n success: statusCode !== 0 /* eOTelSpanStatusCode.UNSET */ ? statusCode !== 2 /* eOTelSpanStatusCode.ERROR */ : (Number(getHttpStatusCode(container)) || 0) < 400,\r\n duration: hrTimeToMilliseconds(span.duration)\r\n //azureResourceProvider: undefined, // Not currently supported\r\n //links: UNDEFINED_VALUE, // Not currently supported\r\n };\r\n // Set the parentId if available\r\n var parentCtx = span.parentSpanContext || (spanCtx ? spanCtx.parentCtx : null);\r\n _applyValue(spanTelemetry, \"parentId\", span.parentSpanId || (parentCtx ? parentCtx.spanId : null), false);\r\n if (spanCtx) {\r\n var traceState = spanCtx.traceState;\r\n if (traceState && !traceState.isEmpty) {\r\n _applyValue(spanTelemetry, \"traceState\", traceState.hdrs(1)[0], false);\r\n }\r\n }\r\n _populateHttpProperties(spanTelemetry, container, getHttpMethod(container), core.config);\r\n _populateDbProperties(spanTelemetry, container, container.get(SEMATTRS_DB_SYSTEM));\r\n _populateRpcDependencyProperties(spanTelemetry, container, container.get(SEMATTRS_RPC_SYSTEM));\r\n _applyValue(spanTelemetry, \"azureResourceProvider\", container.get(AzResourceNamespace) || container.get(AzNamespace), false);\r\n return _createTelemetryItem(spanTelemetry, span, \"OTelSpan\", \"Ms.Web.Span\");\r\n}\r\nfunction _createTelemetryItem(item, span, baseType, eventName) {\r\n eventName = eventName || STR_NOT_SPECIFIED;\r\n if (isNullOrUndefined(item) ||\r\n isNullOrUndefined(baseType) ||\r\n isNullOrUndefined(eventName)) {\r\n throwError(\"Input doesn't contain all required fields\");\r\n }\r\n var iKey = \"\";\r\n if (item.iKey) {\r\n iKey = item.iKey;\r\n delete item.iKey;\r\n }\r\n var telemetryItem = {\r\n name: eventName,\r\n time: toISOString(span.endTime ? new Date(hrTimeToMilliseconds(span.endTime)) : new Date()),\r\n iKey: iKey,\r\n ext: {},\r\n baseType: baseType,\r\n baseData: item,\r\n data: {} // part C\r\n };\r\n return telemetryItem;\r\n}\r\n/**\r\n * Create an extended common schema telemetry item from the provided span\r\n * @param core - The app insights core instance\r\n * @param span - The span to create the telemetry item from\r\n * @returns A new extended telemetry item or null if the span kind is not supported\r\n */\r\nexport function createExtendedTelemetryItemFromSpan(core, span) {\r\n var telemetryItem = _createOTelSpanTelemetryItem(core, span);\r\n var container = span.attribContainer || createAttributeContainer(span.attributes);\r\n if (telemetryItem) {\r\n // Set the Span common schema fields\r\n // Set start time for the telemetry item from the event, not the time it is being processed (the default)\r\n // The channel envelope creator uses this value when creating the envelope only when defined, otherwise it\r\n // uses the time when the item is being processed\r\n var partB = telemetryItem[_DYN_BASE_DATA /* @min:%2ebaseData */] = telemetryItem[_DYN_BASE_DATA /* @min:%2ebaseData */] || {};\r\n partB.startTime = new Date(hrTimeToMilliseconds(span.startTime));\r\n var spanContext = span.spanContext();\r\n if (spanContext) {\r\n // Add dt extension to the telemetry item\r\n var ext = telemetryItem.ext = telemetryItem.ext || {};\r\n var dt = ext[\"dt\"] = ext[\"dt\"] || {};\r\n // Don't overwrite any existing values\r\n _applyValue(dt, \"spanId\", spanContext.spanId, false);\r\n _applyValue(dt, \"traceId\", spanContext.traceId, false);\r\n _applyValue(dt, \"traceFlags\", spanContext.traceFlags, false);\r\n }\r\n _populateExtensionsFromSpan(telemetryItem, span, container);\r\n _populatePartC(telemetryItem, container);\r\n // Azure SDK\r\n }\r\n return telemetryItem;\r\n}\r\n//# sourceMappingURL=extSpanUtils.js.map"],"names":[],"mappings":";;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA"}
|