From d2cfabf5e12419a6d0ead15fdfa54b47779e3e4d Mon Sep 17 00:00:00 2001 From: chrisftian Date: Tue, 16 Apr 2024 15:29:05 +0800 Subject: [PATCH] Dev/cls report (#205) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * dev: 支持 cls 上报 --- demo/CIDemos/asr.js | 2 +- demo/CIDemos/fileProcess.js | 2 +- demo/CIDemos/picProcess.js | 2 +- dist/cos-js-sdk-v5.js | 645 +++++++++++++++++++++--------------- dist/cos-js-sdk-v5.min.js | 2 +- index.d.ts | 6 +- package.json | 2 +- src/advance.js | 35 +- src/base.js | 88 ++++- src/cos.js | 11 +- src/tracker.js | 390 +++++++++++----------- src/util.js | 18 +- 12 files changed, 708 insertions(+), 495 deletions(-) diff --git a/demo/CIDemos/asr.js b/demo/CIDemos/asr.js index b479f6c..582683b 100644 --- a/demo/CIDemos/asr.js +++ b/demo/CIDemos/asr.js @@ -135,7 +135,7 @@ export const getAsrQueue = { export const updateAsrQueue = { name: '更新语音识别队列', fn: function updateAsrQueue() { - // 任务所在的队列 ID,请使用查询队列(https://cloud.tencent.com/document/product/460/46946)获取或前往万象控制台(https://cloud.tencent.com/document/product/460/46487)在存储桶中查询 + // 任务所在的队列 ID,请使用查询队列(https://cloud.tencent.com/document/product/460/79394)获取或前往万象控制台(https://cloud.tencent.com/document/product/460/46487)在存储桶中查询 const queueId = 'pcc77499e85c311edb9865254008618d9'; const host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/asrqueue/' + queueId; const url = 'https://' + host; diff --git a/demo/CIDemos/fileProcess.js b/demo/CIDemos/fileProcess.js index 9669f64..d556773 100644 --- a/demo/CIDemos/fileProcess.js +++ b/demo/CIDemos/fileProcess.js @@ -346,7 +346,7 @@ export const describeFileProcessQueues = { export const updateFileProcessQueue = { name: '更新文件处理队列', fn: function updateFileProcessQueue() { - // 任务所在的队列 ID,请使用查询队列(https://cloud.tencent.com/document/product/460/46946)获取或前往万象控制台(https://cloud.tencent.com/document/product/460/46487)在存储桶中查询 + // 任务所在的队列 ID,请使用查询队列(https://cloud.tencent.com/document/product/460/86421)获取或前往万象控制台(https://cloud.tencent.com/document/product/460/46487)在存储桶中查询 const queueId = 'p6160ada105a7408e95aac015f4bf8xxx'; const host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/file_queue/' + queueId; const url = 'https://' + host; diff --git a/demo/CIDemos/picProcess.js b/demo/CIDemos/picProcess.js index cf5c63a..3c51fe1 100644 --- a/demo/CIDemos/picProcess.js +++ b/demo/CIDemos/picProcess.js @@ -404,7 +404,7 @@ export const describePicProcessQueues = { export const updatePicProcessQueue = { name: '更新图片处理队列', fn: function updatePicProcessQueue() { - // 任务所在的队列 ID,请使用查询队列(https://cloud.tencent.com/document/product/460/46946)获取或前往万象控制台(https://cloud.tencent.com/document/product/460/46487)在存储桶中查询 + // 任务所在的队列 ID,请使用查询队列(https://cloud.tencent.com/document/product/460/79395)获取或前往万象控制台(https://cloud.tencent.com/document/product/460/46487)在存储桶中查询 const queueId = 'p882d181160d84feca27d9376e17c4xxx'; const host = config.Bucket + '.ci.' + config.Region + '.myqcloud.com/picqueue/' + queueId; const url = 'https://' + host; diff --git a/dist/cos-js-sdk-v5.js b/dist/cos-js-sdk-v5.js index fbf51ad..13fd7e7 100644 --- a/dist/cos-js-sdk-v5.js +++ b/dist/cos-js-sdk-v5.js @@ -7283,7 +7283,7 @@ module.exports = function(module) { /*! exports provided: name, version, description, main, types, scripts, repository, keywords, author, license, bugs, homepage, dependencies, devDependencies, default */ /***/ (function(module) { -module.exports = JSON.parse("{\"name\":\"cos-js-sdk-v5\",\"version\":\"1.7.0\",\"description\":\"JavaScript SDK for [腾讯云对象存储](https://cloud.tencent.com/product/cos)\",\"main\":\"dist/cos-js-sdk-v5.js\",\"types\":\"index.d.ts\",\"scripts\":{\"prettier\":\"prettier --write src demo/demo.js demo/CIDemos/*.js test/test.js server/sts.js lib/request.js index.d.ts\",\"server\":\"node server/sts.js\",\"dev\":\"cross-env NODE_ENV=development webpack -w --mode=development\",\"build\":\"cross-env NODE_ENV=production webpack --mode=production\",\"cos-auth.min.js\":\"uglifyjs ./demo/common/cos-auth.js -o ./demo/common/cos-auth.min.js -c -m\",\"test\":\"jest --runInBand --coverage\"},\"repository\":{\"type\":\"git\",\"url\":\"git+https://github.com/tencentyun/cos-js-sdk-v5.git\"},\"keywords\":[],\"author\":\"carsonxu\",\"license\":\"ISC\",\"bugs\":{\"url\":\"https://github.com/tencentyun/cos-js-sdk-v5/issues\"},\"homepage\":\"https://github.com/tencentyun/cos-js-sdk-v5#readme\",\"dependencies\":{\"@xmldom/xmldom\":\"^0.8.6\"},\"devDependencies\":{\"@babel/core\":\"7.17.9\",\"@babel/plugin-transform-runtime\":\"7.18.10\",\"@babel/preset-env\":\"7.16.11\",\"babel-loader\":\"8.2.5\",\"body-parser\":\"^1.18.3\",\"cross-env\":\"^5.2.0\",\"express\":\"^4.16.4\",\"jest\":\"^29.3.1\",\"jest-environment-jsdom\":\"^29.3.1\",\"prettier\":\"^3.0.1\",\"qcloud-cos-sts\":\"^3.0.2\",\"request\":\"^2.87.0\",\"terser-webpack-plugin\":\"4.2.3\",\"uglifyjs\":\"^2.4.11\",\"webpack\":\"4.46.0\",\"webpack-cli\":\"4.10.0\"}}"); +module.exports = JSON.parse("{\"name\":\"cos-js-sdk-v5\",\"version\":\"1.7.1\",\"description\":\"JavaScript SDK for [腾讯云对象存储](https://cloud.tencent.com/product/cos)\",\"main\":\"dist/cos-js-sdk-v5.js\",\"types\":\"index.d.ts\",\"scripts\":{\"prettier\":\"prettier --write src demo/demo.js demo/CIDemos/*.js test/test.js server/sts.js lib/request.js index.d.ts\",\"server\":\"node server/sts.js\",\"dev\":\"cross-env NODE_ENV=development webpack -w --mode=development\",\"build\":\"cross-env NODE_ENV=production webpack --mode=production\",\"cos-auth.min.js\":\"uglifyjs ./demo/common/cos-auth.js -o ./demo/common/cos-auth.min.js -c -m\",\"test\":\"jest --runInBand --coverage\"},\"repository\":{\"type\":\"git\",\"url\":\"git+https://github.com/tencentyun/cos-js-sdk-v5.git\"},\"keywords\":[],\"author\":\"carsonxu\",\"license\":\"ISC\",\"bugs\":{\"url\":\"https://github.com/tencentyun/cos-js-sdk-v5/issues\"},\"homepage\":\"https://github.com/tencentyun/cos-js-sdk-v5#readme\",\"dependencies\":{\"@xmldom/xmldom\":\"^0.8.6\"},\"devDependencies\":{\"@babel/core\":\"7.17.9\",\"@babel/plugin-transform-runtime\":\"7.18.10\",\"@babel/preset-env\":\"7.16.11\",\"babel-loader\":\"8.2.5\",\"body-parser\":\"^1.18.3\",\"cross-env\":\"^5.2.0\",\"express\":\"^4.16.4\",\"jest\":\"^29.3.1\",\"jest-environment-jsdom\":\"^29.3.1\",\"prettier\":\"^3.0.1\",\"qcloud-cos-sts\":\"^3.0.2\",\"request\":\"^2.87.0\",\"terser-webpack-plugin\":\"4.2.3\",\"uglifyjs\":\"^2.4.11\",\"webpack\":\"4.46.0\",\"webpack-cli\":\"4.10.0\"}}"); /***/ }), @@ -8129,13 +8129,16 @@ function uploadFile(params, callback) { }; // 上传链路 - if (self.options.EnableTracker) { + if (self.options.EnableReporter) { var accelerate = self.options.UseAccelerate || typeof self.options.Domain === 'string' && self.options.Domain.includes('accelerate.'); + var realApi = FileSize > SliceSize ? 'sliceUploadFile' : 'putObject'; params.tracker = new Tracker({ - Beacon: self.options.Beacon, + Beacon: self.options.BeaconReporter, + clsReporter: self.options.ClsReporter, bucket: params.Bucket, region: params.Region, apiName: 'uploadFile', + realApi: realApi, fileKey: params.Key, fileSize: FileSize, accelerate: accelerate, @@ -8167,7 +8170,7 @@ function uploadFile(params, callback) { var _onFileFinish = params.onFileFinish; var onFileFinish = function onFileFinish(err, data) { // 格式化上报参数并上报 - params.tracker && params.tracker.formatResult(err, data); + params.tracker && params.tracker.report(err, data); _onFileFinish && _onFileFinish(err, data, fileInfo); callback && callback(err, data); }; @@ -8214,8 +8217,6 @@ function uploadFiles(params, callback) { var taskList = []; util.each(params.files, function (fileParams, index) { (function () { - // 对齐 nodejs 缩进 - var Body = fileParams.Body; var FileSize = Body.size || Body.length || 0; var fileInfo = { @@ -8232,13 +8233,16 @@ function uploadFiles(params, callback) { TotalSize += FileSize; // 单个文件上传链路 - if (self.options.EnableTracker) { + if (self.options.EnableReporter) { var accelerate = self.options.UseAccelerate || typeof self.options.Domain === 'string' && self.options.Domain.includes('accelerate.'); + var realApi = FileSize > SliceSize ? 'sliceUploadFile' : 'putObject'; fileParams.tracker = new Tracker({ - Beacon: self.options.Beacon, + Beacon: self.options.BeaconReporter, + clsReporter: self.options.ClsReporter, bucket: fileParams.Bucket, region: fileParams.Region, apiName: 'uploadFiles', + realApi: realApi, fileKey: fileParams.Key, fileSize: FileSize, accelerate: accelerate, @@ -8284,7 +8288,7 @@ function uploadFiles(params, callback) { var _onFileFinish = fileParams.onFileFinish; var onFileFinish = function onFileFinish(err, data) { // 格式化上报参数并上报 - fileParams.tracker && fileParams.tracker.formatResult(err, data); + fileParams.tracker && fileParams.tracker.report(err, data); _onFileFinish && _onFileFinish(err, data); onTotalFileFinish && onTotalFileFinish(err, data, fileInfo); }; @@ -8347,6 +8351,7 @@ function sliceCopyFile(params, callback) { Key: Key, UploadId: UploadData.UploadId, Parts: Parts, + tracker: params.tracker, calledBySdk: 'sliceCopyFile' }, tryCallback); }, function (err, data) { @@ -8387,7 +8392,9 @@ function sliceCopyFile(params, callback) { CopySource: CopySource, UploadId: UploadData.UploadId, PartNumber: PartNumber, - CopySourceRange: CopySourceRange + CopySourceRange: CopySourceRange, + tracker: params.tracker, + calledBySdk: 'sliceCopyFile' }, tryCallback); }, function (err, data) { if (err) return asyncCallback(err); @@ -8414,7 +8421,9 @@ function sliceCopyFile(params, callback) { Bucket: Bucket, Region: Region, Key: Key, - Headers: TargetHeader + Headers: TargetHeader, + tracker: params.tracker, + calledBySdk: 'sliceCopyFile' }, function (err, data) { if (err) return callback(err); params.UploadId = data.UploadId; @@ -8440,7 +8449,9 @@ function sliceCopyFile(params, callback) { Bucket: Bucket, Region: Region, Key: Key, - UploadId: UploadId + UploadId: UploadId, + tracker: params.tracker, + calledBySdk: 'sliceCopyFile' }, function (err, PartListData) { if (err) { // 如果 UploadId 获取会出错,跳过并删除 @@ -8533,7 +8544,9 @@ function sliceCopyFile(params, callback) { self.headObject({ Bucket: SourceBucket, Region: SourceRegion, - Key: SourceKey + Key: SourceKey, + tracker: params.tracker, + calledBySdk: 'sliceCopyFile' }, function (err, data) { if (err) { if (err.statusCode && err.statusCode === 404) { @@ -8550,6 +8563,9 @@ function sliceCopyFile(params, callback) { callback(util.error(new Error('get Content-Length error, please add "Content-Length" to CORS ExposeHeader setting.( 获取Content-Length失败,请在CORS ExposeHeader设置中添加Content-Length,请参考文档:https://cloud.tencent.com/document/product/436/13318 )'))); return; } + params.tracker && params.tracker.setParams({ + httpSize: FileSize + }); onProgress = util.throttleOnProgress.call(self, FileSize, params.onProgress); // 开始上传 @@ -8557,7 +8573,9 @@ function sliceCopyFile(params, callback) { if (!params.Headers['x-cos-metadata-directive']) { params.Headers['x-cos-metadata-directive'] = 'Copy'; } - self.putObjectCopy(params, function (err, data) { + self.putObjectCopy(Object.assign(params, { + calledBySdk: 'sliceCopyFile' + }), function (err, data) { if (err) { onProgress(null, true); return callback(err); @@ -8611,7 +8629,9 @@ function copySliceItem(params, callback) { CopySource: CopySource, UploadId: UploadId, PartNumber: PartNumber, - CopySourceRange: CopySourceRange + CopySourceRange: CopySourceRange, + tracker: params.tracker, + calledBySdk: params.calledBySdk }, function (err, data) { tryCallback(err || null, data); }); @@ -8748,7 +8768,8 @@ function getService(params, callback) { url: domain, method: 'GET', headers: params.Headers, - SignHost: SignHost + SignHost: SignHost, + tracker: params.tracker }, function (err, data) { if (err) return callback(err); var buckets = data && data.ListAllMyBucketsResult && data.ListAllMyBucketsResult.Buckets && data.ListAllMyBucketsResult.Buckets.Bucket || []; @@ -8794,7 +8815,8 @@ function putBucket(params, callback) { Bucket: params.Bucket, Region: params.Region, headers: params.Headers, - body: xml + body: xml, + tracker: params.tracker }, function (err, data) { if (err) return callback(err); var url = getUrl({ @@ -8829,7 +8851,8 @@ function headBucket(params, callback) { Bucket: params.Bucket, Region: params.Region, headers: params.Headers, - method: 'HEAD' + method: 'HEAD', + tracker: params.tracker }, callback); } @@ -8862,7 +8885,8 @@ function getBucket(params, callback) { Bucket: params.Bucket, Region: params.Region, headers: params.Headers, - qs: reqParams + qs: reqParams, + tracker: params.tracker }, function (err, data) { if (err) return callback(err); var ListBucketResult = data.ListBucketResult || {}; @@ -8897,7 +8921,8 @@ function deleteBucket(params, callback) { Bucket: params.Bucket, Region: params.Region, headers: params.Headers, - method: 'DELETE' + method: 'DELETE', + tracker: params.tracker }, function (err, data) { if (err && err.statusCode === 204) { return callback(null, { @@ -8958,7 +8983,8 @@ function putBucketAcl(params, callback) { Region: params.Region, headers: headers, action: 'acl', - body: xml + body: xml, + tracker: params.tracker }, function (err, data) { if (err) return callback(err); callback(null, { @@ -8985,7 +9011,8 @@ function getBucketAcl(params, callback) { Bucket: params.Bucket, Region: params.Region, headers: params.Headers, - action: 'acl' + action: 'acl', + tracker: params.tracker }, function (err, data) { if (err) return callback(err); var AccessControlPolicy = data.AccessControlPolicy || {}; @@ -9046,7 +9073,8 @@ function putBucketCors(params, callback) { Region: params.Region, body: xml, action: 'cors', - headers: headers + headers: headers, + tracker: params.tracker }, function (err, data) { if (err) return callback(err); callback(null, { @@ -9073,7 +9101,8 @@ function getBucketCors(params, callback) { Bucket: params.Bucket, Region: params.Region, headers: params.Headers, - action: 'cors' + action: 'cors', + tracker: params.tracker }, function (err, data) { if (err) { if (err.statusCode === 404 && err.error && err.error.Code === 'NoSuchCORSConfiguration') { @@ -9125,7 +9154,8 @@ function deleteBucketCors(params, callback) { Bucket: params.Bucket, Region: params.Region, headers: params.Headers, - action: 'cors' + action: 'cors', + tracker: params.tracker }, function (err, data) { if (err && err.statusCode === 204) { return callback(null, { @@ -9157,7 +9187,8 @@ function getBucketLocation(params, callback) { Bucket: params.Bucket, Region: params.Region, headers: params.Headers, - action: 'location' + action: 'location', + tracker: params.tracker }, callback); } function putBucketPolicy(params, callback) { @@ -9178,7 +9209,8 @@ function putBucketPolicy(params, callback) { Region: params.Region, action: 'policy', body: PolicyStr, - headers: headers + headers: headers, + tracker: params.tracker }, function (err, data) { if (err && err.statusCode === 204) { return callback(null, { @@ -9211,7 +9243,8 @@ function getBucketPolicy(params, callback) { Region: params.Region, headers: params.Headers, action: 'policy', - rawBody: true + rawBody: true, + tracker: params.tracker }, function (err, data) { if (err) { if (err.statusCode && err.statusCode === 403) { @@ -9259,7 +9292,8 @@ function deleteBucketPolicy(params, callback) { Bucket: params.Bucket, Region: params.Region, headers: params.Headers, - action: 'policy' + action: 'policy', + tracker: params.tracker }, function (err, data) { if (err && err.statusCode === 204) { return callback(null, { @@ -9306,7 +9340,8 @@ function putBucketTagging(params, callback) { Region: params.Region, body: xml, action: 'tagging', - headers: headers + headers: headers, + tracker: params.tracker }, function (err, data) { if (err && err.statusCode === 204) { return callback(null, { @@ -9338,7 +9373,8 @@ function getBucketTagging(params, callback) { Bucket: params.Bucket, Region: params.Region, headers: params.Headers, - action: 'tagging' + action: 'tagging', + tracker: params.tracker }, function (err, data) { if (err) { if (err.statusCode === 404 && err.error && (err.error === 'Not Found' || err.error.Code === 'NoSuchTagSet')) { @@ -9382,7 +9418,8 @@ function deleteBucketTagging(params, callback) { Bucket: params.Bucket, Region: params.Region, headers: params.Headers, - action: 'tagging' + action: 'tagging', + tracker: params.tracker }, function (err, data) { if (err && err.statusCode === 204) { return callback(null, { @@ -9416,7 +9453,8 @@ function putBucketLifecycle(params, callback) { Region: params.Region, body: xml, action: 'lifecycle', - headers: headers + headers: headers, + tracker: params.tracker }, function (err, data) { if (err && err.statusCode === 204) { return callback(null, { @@ -9438,7 +9476,8 @@ function getBucketLifecycle(params, callback) { Bucket: params.Bucket, Region: params.Region, headers: params.Headers, - action: 'lifecycle' + action: 'lifecycle', + tracker: params.tracker }, function (err, data) { if (err) { if (err.statusCode === 404 && err.error && err.error.Code === 'NoSuchLifecycleConfiguration') { @@ -9472,7 +9511,8 @@ function deleteBucketLifecycle(params, callback) { Bucket: params.Bucket, Region: params.Region, headers: params.Headers, - action: 'lifecycle' + action: 'lifecycle', + tracker: params.tracker }, function (err, data) { if (err && err.statusCode === 204) { return callback(null, { @@ -9506,7 +9546,8 @@ function putBucketVersioning(params, callback) { Region: params.Region, body: xml, action: 'versioning', - headers: headers + headers: headers, + tracker: params.tracker }, function (err, data) { if (err && err.statusCode === 204) { return callback(null, { @@ -9528,7 +9569,8 @@ function getBucketVersioning(params, callback) { Bucket: params.Bucket, Region: params.Region, headers: params.Headers, - action: 'versioning' + action: 'versioning', + tracker: params.tracker }, function (err, data) { if (!err) { !data.VersioningConfiguration && (data.VersioningConfiguration = {}); @@ -9553,7 +9595,8 @@ function putBucketReplication(params, callback) { Region: params.Region, body: xml, action: 'replication', - headers: headers + headers: headers, + tracker: params.tracker }, function (err, data) { if (err && err.statusCode === 204) { return callback(null, { @@ -9575,7 +9618,8 @@ function getBucketReplication(params, callback) { Bucket: params.Bucket, Region: params.Region, headers: params.Headers, - action: 'replication' + action: 'replication', + tracker: params.tracker }, function (err, data) { if (err) { if (err.statusCode === 404 && err.error && (err.error === 'Not Found' || err.error.Code === 'ReplicationConfigurationnotFoundError')) { @@ -9607,7 +9651,8 @@ function deleteBucketReplication(params, callback) { Bucket: params.Bucket, Region: params.Region, headers: params.Headers, - action: 'replication' + action: 'replication', + tracker: params.tracker }, function (err, data) { if (err && err.statusCode === 204) { return callback(null, { @@ -9663,7 +9708,8 @@ function putBucketWebsite(params, callback) { Region: params.Region, body: xml, action: 'website', - headers: headers + headers: headers, + tracker: params.tracker }, function (err, data) { if (err && err.statusCode === 204) { return callback(null, { @@ -9696,7 +9742,8 @@ function getBucketWebsite(params, callback) { Region: params.Region, Key: params.Key, headers: params.Headers, - action: 'website' + action: 'website', + tracker: params.tracker }, function (err, data) { if (err) { if (err.statusCode === 404 && err.error.Code === 'NoSuchWebsiteConfiguration') { @@ -9741,7 +9788,8 @@ function deleteBucketWebsite(params, callback) { Bucket: params.Bucket, Region: params.Region, headers: params.Headers, - action: 'website' + action: 'website', + tracker: params.tracker }, function (err, data) { if (err && err.statusCode === 204) { return callback(null, { @@ -9796,7 +9844,8 @@ function putBucketReferer(params, callback) { Region: params.Region, body: xml, action: 'referer', - headers: headers + headers: headers, + tracker: params.tracker }, function (err, data) { if (err && err.statusCode === 204) { return callback(null, { @@ -9829,7 +9878,8 @@ function getBucketReferer(params, callback) { Region: params.Region, Key: params.Key, headers: params.Headers, - action: 'referer' + action: 'referer', + tracker: params.tracker }, function (err, data) { if (err) { if (err.statusCode === 404 && err.error.Code === 'NoSuchRefererConfiguration') { @@ -9887,7 +9937,8 @@ function putBucketDomain(params, callback) { Region: params.Region, body: xml, action: 'domain', - headers: headers + headers: headers, + tracker: params.tracker }, function (err, data) { if (err && err.statusCode === 204) { return callback(null, { @@ -9919,7 +9970,8 @@ function getBucketDomain(params, callback) { Bucket: params.Bucket, Region: params.Region, headers: params.Headers, - action: 'domain' + action: 'domain', + tracker: params.tracker }, function (err, data) { if (err) return callback(err); var DomainRule = []; @@ -9951,7 +10003,8 @@ function deleteBucketDomain(params, callback) { Bucket: params.Bucket, Region: params.Region, headers: params.Headers, - action: 'domain' + action: 'domain', + tracker: params.tracker }, function (err, data) { if (err && err.statusCode === 204) { return callback(null, { @@ -9995,7 +10048,8 @@ function putBucketOrigin(params, callback) { Region: params.Region, body: xml, action: 'origin', - headers: headers + headers: headers, + tracker: params.tracker }, function (err, data) { if (err && err.statusCode === 204) { return callback(null, { @@ -10027,7 +10081,8 @@ function getBucketOrigin(params, callback) { Bucket: params.Bucket, Region: params.Region, headers: params.Headers, - action: 'origin' + action: 'origin', + tracker: params.tracker }, function (err, data) { if (err) return callback(err); var OriginRule = []; @@ -10059,7 +10114,8 @@ function deleteBucketOrigin(params, callback) { Bucket: params.Bucket, Region: params.Region, headers: params.Headers, - action: 'origin' + action: 'origin', + tracker: params.tracker }, function (err, data) { if (err && err.statusCode === 204) { return callback(null, { @@ -10099,7 +10155,8 @@ function putBucketLogging(params, callback) { Region: params.Region, body: xml, action: 'logging', - headers: headers + headers: headers, + tracker: params.tracker }, function (err, data) { if (err && err.statusCode === 204) { return callback(null, { @@ -10131,7 +10188,8 @@ function getBucketLogging(params, callback) { Bucket: params.Bucket, Region: params.Region, headers: params.Headers, - action: 'logging' + action: 'logging', + tracker: params.tracker }, function (err, data) { if (err) return callback(err); callback(null, { @@ -10185,7 +10243,8 @@ function submitBucketInventory(method, params, callback) { qs: { id: params['Id'] }, - headers: headers + headers: headers, + tracker: params.tracker }, function (err, data) { if (err && err.statusCode === 204) { return callback(null, { @@ -10235,7 +10294,8 @@ function getBucketInventory(params, callback) { action: 'inventory', qs: { id: params['Id'] - } + }, + tracker: params.tracker }, function (err, data) { if (err) return callback(err); var InventoryConfiguration = data['InventoryConfiguration']; @@ -10281,7 +10341,8 @@ function listBucketInventory(params, callback) { action: 'inventory', qs: { 'continuation-token': params['ContinuationToken'] - } + }, + tracker: params.tracker }, function (err, data) { if (err) return callback(err); var ListInventoryConfigurationResult = data['ListInventoryConfigurationResult']; @@ -10333,7 +10394,8 @@ function deleteBucketInventory(params, callback) { action: 'inventory', qs: { id: params['Id'] - } + }, + tracker: params.tracker }, function (err, data) { if (err && err.statusCode === 204) { return callback(null, { @@ -10369,7 +10431,8 @@ function putBucketAccelerate(params, callback) { Region: params.Region, body: xml, action: 'accelerate', - headers: headers + headers: headers, + tracker: params.tracker }, function (err, data) { if (err) return callback(err); callback(null, { @@ -10384,7 +10447,8 @@ function getBucketAccelerate(params, callback) { method: 'GET', Bucket: params.Bucket, Region: params.Region, - action: 'accelerate' + action: 'accelerate', + tracker: params.tracker }, function (err, data) { if (!err) { !data.AccelerateConfiguration && (data.AccelerateConfiguration = {}); @@ -10410,7 +10474,8 @@ function putBucketEncryption(params, callback) { Region: params.Region, body: xml, action: 'encryption', - headers: headers + headers: headers, + tracker: params.tracker }, function (err, data) { if (err && err.statusCode === 204) { return callback(null, { @@ -10432,7 +10497,8 @@ function getBucketEncryption(params, callback) { Bucket: params.Bucket, Region: params.Region, headers: params.Headers, - action: 'encryption' + action: 'encryption', + tracker: params.tracker }, function (err, data) { if (err) { if (err.statusCode === 404 && err.code === 'NoSuchEncryptionConfiguration') { @@ -10463,7 +10529,8 @@ function deleteBucketEncryption(params, callback) { Bucket: params.Bucket, Region: params.Region, headers: params.Headers, - action: 'encryption' + action: 'encryption', + tracker: params.tracker }, function (err, data) { if (err && err.statusCode === 204) { return callback(null, { @@ -10501,7 +10568,8 @@ function headObject(params, callback) { Region: params.Region, Key: params.Key, VersionId: params.VersionId, - headers: params.Headers + headers: params.Headers, + tracker: params.tracker }, function (err, data) { if (err) { var statusCode = err.statusCode; @@ -10533,7 +10601,8 @@ function listObjectVersions(params, callback) { Region: params.Region, headers: params.Headers, qs: reqParams, - action: 'versions' + action: 'versions', + tracker: params.tracker }, function (err, data) { if (err) return callback(err); var ListVersionsResult = data.ListVersionsResult || {}; @@ -10734,7 +10803,8 @@ function deleteObject(params, callback) { Key: params.Key, headers: params.Headers, VersionId: params.VersionId, - action: params.Recursive ? 'recursive' : '' + action: params.Recursive ? 'recursive' : '', + tracker: params.tracker }, function (err, data) { if (err) { var statusCode = err.statusCode; @@ -10778,7 +10848,8 @@ function getObjectAcl(params, callback) { Key: params.Key, headers: params.Headers, qs: reqParams, - action: 'acl' + action: 'acl', + tracker: params.tracker }, function (err, data) { if (err) return callback(err); var AccessControlPolicy = data.AccessControlPolicy || {}; @@ -10843,7 +10914,8 @@ function putObjectAcl(params, callback) { Key: params.Key, action: 'acl', headers: headers, - body: xml + body: xml, + tracker: params.tracker }, function (err, data) { if (err) return callback(err); callback(null, { @@ -10874,7 +10946,8 @@ function optionsObject(params, callback) { Bucket: params.Bucket, Region: params.Region, Key: params.Key, - headers: headers + headers: headers, + tracker: params.tracker }, function (err, data) { if (err) { if (err.statusCode && err.statusCode === 403) { @@ -10956,7 +11029,8 @@ function putObjectCopy(params, callback) { Region: params.Region, Key: params.Key, VersionId: params.VersionId, - headers: params.Headers + headers: params.Headers, + tracker: params.tracker }, function (err, data) { if (err) return callback(err); var result = util.clone(data.CopyObjectResult || {}); @@ -11008,7 +11082,8 @@ function uploadPartCopy(params, callback) { partNumber: params['PartNumber'], uploadId: params['UploadId'] }, - headers: params.Headers + headers: params.Headers, + tracker: params.tracker }, function (err, data) { if (err) return callback(err); var result = util.clone(data.CopyPartResult || {}); @@ -11047,7 +11122,8 @@ function deleteMultipleObject(params, callback) { Region: params.Region, body: xml, action: 'delete', - headers: headers + headers: headers, + tracker: params.tracker }, function (err, data) { if (err) return callback(err); var DeleteResult = data.DeleteResult || {}; @@ -11086,7 +11162,8 @@ function restoreObject(params, callback) { VersionId: params.VersionId, body: xml, action: 'restore', - headers: headers + headers: headers, + tracker: params.tracker }, callback); } @@ -11123,7 +11200,8 @@ function putObjectTagging(params, callback) { body: xml, action: 'tagging', headers: headers, - VersionId: params.VersionId + VersionId: params.VersionId, + tracker: params.tracker }, function (err, data) { if (err && err.statusCode === 204) { return callback(null, { @@ -11157,7 +11235,8 @@ function getObjectTagging(params, callback) { Region: params.Region, headers: params.Headers, action: 'tagging', - VersionId: params.VersionId + VersionId: params.VersionId, + tracker: params.tracker }, function (err, data) { if (err) { if (err.statusCode === 404 && err.error && (err.error === 'Not Found' || err.error.Code === 'NoSuchTagSet')) { @@ -11203,7 +11282,8 @@ function deleteObjectTagging(params, callback) { Key: params.Key, headers: params.Headers, action: 'tagging', - VersionId: params.VersionId + VersionId: params.VersionId, + tracker: params.tracker }, function (err, data) { if (err && err.statusCode === 204) { return callback(null, { @@ -11253,7 +11333,8 @@ function selectObjectContent(params, callback) { VersionId: params.VersionId, body: xml, DataType: 'arraybuffer', - rawBody: true + rawBody: true, + tracker: params.tracker }, function (err, data) { if (err && err.statusCode === 204) { return callback(null, { @@ -11584,7 +11665,8 @@ function multipartListPart(params, callback) { Region: params.Region, Key: params.Key, headers: params.Headers, - qs: reqParams + qs: reqParams, + tracker: tracker }, function (err, data) { if (err) { tracker && tracker.parent && tracker.parent.setParams({ @@ -11626,7 +11708,8 @@ function multipartAbort(params, callback) { Region: params.Region, Key: params.Key, headers: params.Headers, - qs: reqParams + qs: reqParams, + tracker: params.tracker }, function (err, data) { if (err) return callback(err); callback(null, { @@ -11659,7 +11742,8 @@ function request(params, callback) { body: params.Body, Url: params.Url, rawBody: params.RawBody, - DataType: params.DataType + DataType: params.DataType, + tracker: params.tracker }, function (err, data) { if (err) return callback(err); if (data && data.body) { @@ -11714,7 +11798,8 @@ function appendObject(params, callback) { qs: { position: params.Position }, - headers: params.Headers + headers: params.Headers, + tracker: params.tracker }, function (err, data) { if (err) return callback(err); callback(null, data); @@ -12265,7 +12350,7 @@ function submitRequest(params, callback) { var oldClockOffset = self.options.SystemClockOffset; tracker && tracker.setParams({ signStartTime: new Date().getTime(), - retryTimes: tryTimes - 1 + httpRetryTimes: tryTimes - 1 }); if (params.SwitchHost) { // 更换要签的host @@ -12360,6 +12445,7 @@ function _submitRequest(params, callback) { // 更换请求的url url = url.replace(/myqcloud.com/, 'tencentcos.cn'); } + var repoterUrl = object ? url : ''; if (params.action) { // 已知问题,某些版本的qq会对url自动拼接(比如/upload被拼接成/upload=(null))导致签名错误,这里做下兼容。 url = url + '?' + (util.isIOS_QQ ? "".concat(params.action, "=") : params.action); @@ -12424,15 +12510,22 @@ function _submitRequest(params, callback) { return "".concat(key, "=").concat(opt.qs[key]); }).join('&') : ''; var fullUrl = queryString ? opt.url + '?' + queryString : opt.url; - params.tracker && params.tracker.setParams({ - reqUrl: fullUrl, - accelerate: useAccelerate ? 'Y' : 'N' - }); - // 分块上传时给父级tracker设置url信息 - params.tracker && params.tracker.parent && params.tracker.parent.setParams({ - reqUrl: fullUrl, - accelerate: useAccelerate ? 'Y' : 'N' - }); + if (params.tracker) { + var _opt$body; + params.tracker.setParams({ + url: fullUrl, + httpMethod: opt.method, + accelerate: useAccelerate, + httpSize: ((_opt$body = opt.body) === null || _opt$body === void 0 ? void 0 : _opt$body.size) || 0 + }); + // 分块上传时给父级tracker设置url信息 + if (params.tracker.parent && !params.tracker.parent.params.url) { + params.tracker.parent.setParams({ + url: repoterUrl, + accelerate: useAccelerate + }); + } + } var sender = (self.options.Request || REQUEST)(opt, function (r) { if (r && r.error === 'abort') return; var receive = { @@ -12695,18 +12788,19 @@ var defaultOptions = { UseAccelerate: false, ForceSignHost: true, // 默认将host加入签名计算,关闭后可能导致越权风险,建议保持为true - EnableTracker: false, - // 默认关闭上报 + AutoSwitchHost: true, + CopySourceParser: null, + // 自定义拷贝源解析器 + /** 上报相关 **/ DeepTracker: false, // 上报时是否对每个分块上传做单独上报 - Beacon: null, - // 灯塔上报组件,如有需要请自行传入 TrackerDelay: 5000, // 周期性上报,单位毫秒。0代表实时上报 CustomId: '', // 自定义上报id - AutoSwitchHost: true, - CopySourceParser: null // 自定义拷贝源解析器 + BeaconReporter: null, + // 灯塔上报组件,如有需要请自行传入,传入即代表开启上报 + ClsReporter: null // cls 上报组件,如有需要请自行传入,传入即代表开启上报 }; // 对外暴露的类 @@ -12721,6 +12815,7 @@ var COS = function COS(options) { this.options.CopySliceSize = Math.max(0, this.options.CopySliceSize); this.options.MaxPartNumber = Math.max(1024, Math.min(10000, this.options.MaxPartNumber)); this.options.Timeout = Math.max(0, this.options.Timeout); + this.options.EnableReporter = this.options.BeaconReporter || this.options.ClsReporter; if (this.options.AppId) { console.warn('warning: AppId has been deprecated, Please put it at the end of parameter Bucket(E.g: "test-1250000000").'); } @@ -13193,11 +13288,11 @@ var beacon = null; var getBeacon = function getBeacon(Beacon, delay) { if (!beacon) { // 生成 beacon - if (!Beacon || typeof Beacon !== 'function') { + if (typeof Beacon !== 'function') { throw new Error('Beacon not found'); } beacon = new Beacon({ - appkey: '0AND0VEVB24UBGDU', + appkey: '0WEB05PY6MHRGK0U', versionCode: pkg.version, channelID: 'js_sdk', //渠道,选填 @@ -13215,6 +13310,12 @@ var getBeacon = function getBeacon(Beacon, delay) { return beacon; }; + +// 毫秒转秒 +var ms2s = function ms2s(ms) { + if (!ms || ms < 0) return 0; + return (ms / 1000).toFixed(3); +}; var utils = { // 生成uid 每个链路对应唯一一条uid getUid: function getUid() { @@ -13223,7 +13324,7 @@ var utils = { }; return S4() + S4() + '-' + S4() + '-' + S4() + '-' + S4() + '-' + S4() + S4() + S4(); }, - // 获取网络类型 + // 获取网络类型 4g | wifi getNetType: function getNetType() { if ((typeof navigator === "undefined" ? "undefined" : _typeof(navigator)) === 'object') { var connection = navigator.connection || navigator.mozConnection || navigator.webkitConnection; @@ -13231,6 +13332,13 @@ var utils = { } return 'unknown'; }, + // http | https + getProtocol: function getProtocol() { + if ((typeof location === "undefined" ? "undefined" : _typeof(location)) === 'object') { + return location.protocol.replace(/:/, ''); + } + return 'unknown protocol'; + }, // 获取pc端操作系统类型 getOsType: function getOsType() { if ((typeof navigator === "undefined" ? "undefined" : _typeof(navigator)) !== 'object') { @@ -13274,102 +13382,30 @@ var utils = { isOtherMobile: function isOtherMobile() { return isMobile && !isAndroid && !isIOS; }, - // 获取浏览器类型 - getDeviceName: function getDeviceName() { + getUA: function getUA() { if ((typeof navigator === "undefined" ? "undefined" : _typeof(navigator)) !== 'object') { return 'unknown device'; } - var explorer = navigator.userAgent.toLowerCase(); - // 腾讯会议内置浏览器 - if (explorer.includes('app/tencent_wemeet')) { - return 'tencent_wemeet'; - } - // 遨游浏览器 - if (explorer.indexOf('maxthon') >= 0) { - var match = explorer.match(/maxthon\/([\d.]+)/); - var ver = match && match[1] || ''; - return "\u50B2\u6E38\u6D4F\u89C8\u5668 ".concat(ver).trim(); - } - // QQ浏览器 - if (explorer.indexOf('qqbrowser') >= 0) { - var _match = explorer.match(/qqbrowser\/([\d.]+)/); - var _ver = _match && _match[1] || ''; - return "QQ\u6D4F\u89C8\u5668 ".concat(_ver).trim(); - } - // 搜狗浏览器 - if (explorer.indexOf('se 2.x') >= 0) { - return '搜狗浏览器'; - } - // 微信浏览器 - if (explorer.indexOf('wxwork') >= 0) { - return '微信内置浏览器'; - } - // ie - if (explorer.indexOf('msie') >= 0) { - var _match2 = explorer.match(/msie ([\d.]+)/); - var _ver2 = _match2 && _match2[1] || ''; - return "IE ".concat(_ver2).trim(); - } - // firefox - if (explorer.indexOf('firefox') >= 0) { - var _match3 = explorer.match(/firefox\/([\d.]+)/); - var _ver3 = _match3 && _match3[1] || ''; - return "Firefox ".concat(_ver3).trim(); - } - // Chrome - if (explorer.indexOf('chrome') >= 0) { - var _match4 = explorer.match(/chrome\/([\d.]+)/); - var _ver4 = _match4 && _match4[1] || ''; - return "Chrome ".concat(_ver4).trim(); - } - // Opera - if (explorer.indexOf('opera') >= 0) { - var _match5 = explorer.match(/opera.([\d.]+)/); - var _ver5 = _match5 && _match5[1] || ''; - return "Opera ".concat(_ver5).trim(); - } - // Safari - if (explorer.indexOf('safari') >= 0) { - var _match6 = explorer.match(/version\/([\d.]+)/); - var _ver6 = _match6 && _match6[1] || ''; - return "Safari ".concat(_ver6).trim(); - } - if (explorer.indexOf('edge') >= 0) { - var _match7 = explorer.match(/edge\/([\d.]+)/); - var _ver7 = _match7 && _match7[1] || ''; - return "edge ".concat(_ver7).trim(); - } - return explorer.substr(0, 200); + var explorer = navigator.userAgent; + return explorer; } }; -var constant = { - isMobile: utils.isMobile(), - isBrowser: !utils.isMobile(), - mobileOsType: utils.isAndroid() ? 'android' : utils.isIOS ? 'ios' : 'other_mobile', - pcOsType: utils.getOsType() -}; - -// 设备信息,只取一次值 -var deviceInfo = { - // ↓上报项 - deviceType: constant.isMobile ? 'mobile' : constant.isBrowser ? 'browser' : 'unknown', - devicePlatform: constant.isMobile ? constant.mobileOsType : constant.pcOsType, - deviceName: utils.getDeviceName() //浏览器名称 -}; - -// 分块上传原子方法 -var sliceUploadMethods = ['multipartInit', 'multipartUpload', 'multipartComplete', 'multipartList', 'multipartListPart', 'multipartAbort']; -var uploadApi = ['putObject', 'postObject', 'appendObject', 'sliceUploadFile', 'uploadFile', 'uploadFiles'].concat(sliceUploadMethods); -var downloadApi = ['getObject']; -function getEventCode(apiName) { - if (uploadApi.includes(apiName)) { - return 'cos_upload'; +var isMobile = utils.isMobile(); +var mobileOsType = utils.isAndroid() ? 'android' : utils.isIOS ? 'ios' : 'other_mobile'; +var pcOsType = utils.getOsType(); +var devicePlatform = isMobile ? mobileOsType : pcOsType; +var ua = utils.getUA(); +var protocol = utils.getProtocol(); +var transApiName = function transApiName(api) { + if (['putObject', 'sliceUploadFile', 'uploadFile', 'uploadFiles'].includes(api)) { + return 'UploadTask'; + } else if (api === 'getObject') { + return 'DownloadTask'; + } else if (['putObjectCopy', 'sliceCopyFile'].includes(api)) { + return 'CopyTask'; } - if (downloadApi.includes(apiName)) { - return 'cos_download'; - } - return 'base_service'; -} + return api; +}; // 上报参数驼峰改下划线 function camel2underline(key) { @@ -13377,15 +13413,16 @@ function camel2underline(key) { } function formatParams(params) { var formattedParams = {}; - var allReporterKeys = ['tracePlatform', 'cossdkVersion', 'region', 'networkType', 'host', 'accelerate', 'requestPath', 'size', 'httpMd5', 'httpSign', 'httpFull', 'name', 'result', 'tookTime', 'errorNode', 'errorCode', 'errorMessage', 'errorRequestId', 'errorStatusCode', 'errorServiceName', 'errorType', 'traceId', 'bucket', 'appid', 'partNumber', 'retryTimes', 'reqUrl', 'customId', 'fullError', 'deviceType', 'devicePlatform', 'deviceName']; - var successKeys = ['tracePlatform', 'cossdkVersion', 'region', 'bucket', 'appid', 'networkType', 'host', 'accelerate', 'requestPath', 'partNumber', 'size', 'name', 'result', 'tookTime', 'errorRequestId', 'retryTimes', 'reqUrl', 'customId', 'deviceType', 'devicePlatform', 'deviceName']; + var successKeys = ['sdkVersionName', 'sdkVersionCode', 'osName', 'networkType', 'requestName', 'requestResult', 'bucket', 'region', 'appid', 'accelerate', 'url', 'host', 'requestPath', 'userAgent', 'networkProtocol', 'httpMethod', 'httpSize', 'httpSpeed', 'httpTookTime', 'httpMd5', 'httpSign', 'httpFullTime', 'httpDomain', 'partNumber', 'httpRetryTimes', 'customId', 'traceId', 'realApi']; + var failureKeys = [].concat(successKeys, ['errorNode', 'errorCode', 'errorName', 'errorMessage', 'errorRequestId', 'errorHttpCode', 'errorServiceName', 'errorType', 'fullError']); // 需要上报的参数字段 - var reporterKeys = params.result === 'Success' ? successKeys : allReporterKeys; + var reporterKeys = params.requestResult === 'Success' ? successKeys : failureKeys; for (var key in params) { if (!reporterKeys.includes(key)) continue; var formattedKey = camel2underline(key); formattedParams[formattedKey] = params[key]; } + formattedParams['request_name'] = params.realApi ? transApiName(params.realApi) : params.requestName; return formattedParams; } @@ -13400,63 +13437,66 @@ var Tracker = /*#__PURE__*/function () { bucket = opt.bucket, region = opt.region, apiName = opt.apiName, + realApi = opt.realApi, + httpMethod = opt.httpMethod, fileKey = opt.fileKey, fileSize = opt.fileSize, accelerate = opt.accelerate, customId = opt.customId, delay = opt.delay, deepTracker = opt.deepTracker, - Beacon = opt.Beacon; + Beacon = opt.Beacon, + clsReporter = opt.clsReporter; var appid = bucket && bucket.substr(bucket.lastIndexOf('-') + 1) || ''; this.parent = parent; this.deepTracker = deepTracker; this.delay = delay; + if (clsReporter && !this.clsReporter) { + this.clsReporter = clsReporter; + } // 上报用到的字段 this.params = { // 通用字段 - cossdkVersion: pkg.version, - region: region, + sdkVersionName: 'cos-js-sdk-v5', + sdkVersionCode: pkg.version, + osName: devicePlatform, networkType: '', + requestName: apiName || '', + requestResult: '', + // sdk api调用结果Success、Failure + realApi: realApi, + bucket: bucket, + region: region, + accelerate: accelerate, + httpMethod: httpMethod, + url: '', + // 请求url host: '', - accelerate: accelerate ? 'Y' : 'N', + httpDomain: '', requestPath: fileKey || '', - size: fileSize || -1, - httpMd5: 0, - // MD5耗时 - httpSign: 0, - // 计算签名耗时 - httpFull: 0, - // http请求耗时 - name: apiName || '', - result: '', - // sdk api调用结果Success、Fail - tookTime: 0, - // 总耗时 - errorNode: '', + userAgent: ua, + networkProtocol: protocol, + errorType: '', errorCode: '', + errorName: '', errorMessage: '', errorRequestId: '', - errorStatusCode: 0, + errorHttpCode: 0, errorServiceName: '', - // js补充字段 - tracePlatform: 'cos-js-sdk-v5', - // 上报平台=js - traceId: traceId || utils.getUid(), - // 每条上报唯一标识 - bucket: bucket, - appid: appid, - partNumber: 0, - // 分块上传编号 - retryTimes: 0, - // sdk内部发起的请求重试 - reqUrl: '', - // 请求url - customId: customId || '', - // 业务id - deviceType: deviceInfo.deviceType, - // 设备类型 移动端浏览器、web浏览器 - devicePlatform: deviceInfo.devicePlatform, - deviceName: deviceInfo.deviceName, + errorNode: '', + httpTookTime: 0, + // http整体耗时 + httpSize: fileSize || 0, + // 主要是文件大小,大小 B + httpMd5: 0, + // MD5耗时 + httpSign: 0, + // 计算签名耗时 + httpFullTime: 0, + // 任务整体耗时(包括md5、签名等) + httpSpeed: 0, + // 主要关注上传速度,KB/s + md5StartTime: 0, // md5计算开始时间 md5EndTime: 0, @@ -13471,10 +13511,24 @@ var Tracker = /*#__PURE__*/function () { // 网路请求结束时间 startTime: new Date().getTime(), // sdk api调用起始时间,不是纯网络耗时 - endTime: 0 // sdk api调用结束时间,不是纯网络耗时 - }; + endTime: 0, + // sdk api调用结束时间,不是纯网络耗时 - this.beacon = getBeacon(Beacon, delay); + // js补充字段 + traceId: traceId || utils.getUid(), + // 每条上报唯一标识 + appid: appid, + partNumber: 0, + // 分块上传编号 + httpRetryTimes: 0, + // sdk内部发起的请求重试 + customId: customId || '', + // 业务id + partTime: 0 + }; + if (Beacon) { + this.beacon = getBeacon(Beacon, delay); + } } // 格式化sdk回调 @@ -13483,24 +13537,57 @@ var Tracker = /*#__PURE__*/function () { value: function formatResult(err, data) { var _err$error, _err$error2, _err$error3, _err$error4, _err$error5, _err$error6; var now = new Date().getTime(); - var tookTime = now - this.params.startTime; var networkType = utils.getNetType(); var errorCode = err ? (err === null || err === void 0 ? void 0 : err.code) || (err === null || err === void 0 ? void 0 : (_err$error = err.error) === null || _err$error === void 0 ? void 0 : _err$error.code) || (err === null || err === void 0 ? void 0 : (_err$error2 = err.error) === null || _err$error2 === void 0 ? void 0 : _err$error2.Code) : ''; var errorMessage = err ? (err === null || err === void 0 ? void 0 : err.message) || (err === null || err === void 0 ? void 0 : (_err$error3 = err.error) === null || _err$error3 === void 0 ? void 0 : _err$error3.message) || (err === null || err === void 0 ? void 0 : (_err$error4 = err.error) === null || _err$error4 === void 0 ? void 0 : _err$error4.Message) : ''; + var errorName = errorMessage; var errorServiceName = err ? (err === null || err === void 0 ? void 0 : err.resource) || (err === null || err === void 0 ? void 0 : (_err$error5 = err.error) === null || _err$error5 === void 0 ? void 0 : _err$error5.resource) || (err === null || err === void 0 ? void 0 : (_err$error6 = err.error) === null || _err$error6 === void 0 ? void 0 : _err$error6.Resource) : ''; - var errorStatusCode = err ? err === null || err === void 0 ? void 0 : err.statusCode : data.statusCode; + var errorHttpCode = err ? err === null || err === void 0 ? void 0 : err.statusCode : data.statusCode; var requestId = err ? (err === null || err === void 0 ? void 0 : err.headers) && (err === null || err === void 0 ? void 0 : err.headers['x-cos-request-id']) : (data === null || data === void 0 ? void 0 : data.headers) && (data === null || data === void 0 ? void 0 : data.headers['x-cos-request-id']); var errorType = err ? requestId ? 'Server' : 'Client' : ''; + if (this.params.requestName === 'getObject') { + this.params.httpSize = data ? data.headers && data.headers['content-length'] : 0; + } + + // 上报 sliceUploadFile || uploadFile || uploadFiles 命中分块上传时 + var isSliceUploadFile = this.params.realApi === 'sliceUploadFile'; + var isSliceCopyFile = this.params.realApi === 'sliceCopyFile'; + if (isSliceUploadFile || isSliceCopyFile) { + var speed = this.params.httpSize / 1024 / this.params.partTime; + Object.assign(this.params, { + httpSpeed: speed < 0 ? 0 : speed.toFixed(3) + }); + } else { + var httpFullTime = now - this.params.startTime; + var httpTookTime = this.params.httpEndTime - this.params.httpStartTime; + var _speed = this.params.httpSize / 1024 / (httpTookTime / 1000); + var httpMd5 = this.params.md5EndTime - this.params.md5StartTime; + var httpSign = this.params.signEndTime - this.params.signStartTime; + if (this.parent) { + this.parent.addParamValue('httpTookTime', ms2s(httpTookTime)); + this.parent.addParamValue('httpFullTime', ms2s(httpFullTime)); + this.parent.addParamValue('httpMd5', ms2s(httpMd5)); + this.parent.addParamValue('httpSign', ms2s(httpSign)); + if (['multipartUpload', 'uploadPartCopy', 'putObjectCopy'].includes(this.params.requestName)) { + // 只有小分块上传|复制才累计纯请求耗时,计算速度时用到 + this.parent.addParamValue('partTime', ms2s(httpTookTime)); + } + } + Object.assign(this.params, { + httpFullTime: ms2s(httpFullTime), + httpMd5: ms2s(httpMd5), + httpSign: ms2s(httpSign), + httpTookTime: ms2s(httpTookTime), + httpSpeed: _speed < 0 ? 0 : _speed.toFixed(3) + }); + } Object.assign(this.params, { - tookTime: tookTime, networkType: networkType, - httpMd5: this.params.md5EndTime - this.params.md5StartTime, - httpSign: this.params.signEndTime - this.params.signStartTime, - httpFull: this.params.httpEndTime - this.params.httpStartTime, - result: err ? 'Fail' : 'Success', + requestResult: err ? 'Failure' : 'Success', errorType: errorType, errorCode: errorCode, - errorStatusCode: errorStatusCode, + errorHttpCode: errorHttpCode, + errorName: errorName, errorMessage: errorMessage, errorServiceName: errorServiceName, errorRequestId: requestId @@ -13509,18 +13596,31 @@ var Tracker = /*#__PURE__*/function () { // 暂存全量err一段时间 观察是否所有err格式都可被解析 this.params.fullError = err ? JSON.stringify(err) : ''; } - if (this.params.name === 'getObject') { - this.params.size = data ? data.headers && data.headers['content-length'] : -1; - } - if (this.params.reqUrl) { + if (this.params.url) { try { - var execRes = /^http(s)?:\/\/(.*?)\//.exec(this.params.reqUrl); + var execRes = /^http(s)?:\/\/(.*?)\//.exec(this.params.url); this.params.host = execRes[2]; } catch (e) { - this.params.host = this.params.reqUrl; + this.params.host = this.params.url; } + this.params.httpDomain = this.params.host; + } + } + + // 上报 + }, { + key: "report", + value: function report(err, data) { + if (!this.beacon && !this.clsReporter) return; + this.formatResult(err, data); + var formattedParams = formatParams(this.params); + console.log(formattedParams); + if (this.beacon) { + this.sendEventsToBeacon(formattedParams); + } + if (this.clsReporter) { + this.sendEventsToCLS(formattedParams); } - this.sendEvents(); } // 设置当前链路的参数 @@ -13529,22 +13629,22 @@ var Tracker = /*#__PURE__*/function () { value: function setParams(params) { Object.assign(this.params, params); } + }, { + key: "addParamValue", + value: function addParamValue(key, value) { + this.params[key] = (+this.params[key] + +value).toFixed(3); + } - // 使用灯塔延时上报 + // 上报灯塔 }, { - key: "sendEvents", - value: function sendEvents() { + key: "sendEventsToBeacon", + value: function sendEventsToBeacon(formattedParams) { // DeepTracker模式下才会上报分块上传内部细节 - if (sliceUploadMethods.includes(this.params.name) && !this.deepTracker) { + var isSliceUploadFile = this.params.requestName === 'sliceUploadFile' || this.params.realApi === 'sliceUploadFile'; + if (isSliceUploadFile && !this.deepTracker) { return; } - var eventCode = getEventCode(this.params.name); - var formattedParams = formatParams(this.params); - - // 兜底处理 - if (!this.beacon) { - this.beacon = getBeacon(this.delay || 5000); - } + var eventCode = 'qcloud_track_cos_sdk'; if (this.delay === 0) { // 实时上报 this.beacon && this.beacon.onDirectUserAction(eventCode, formattedParams); @@ -13554,6 +13654,15 @@ var Tracker = /*#__PURE__*/function () { } } + // 上报 cls + }, { + key: "sendEventsToCLS", + value: function sendEventsToCLS(formattedParams) { + // 是否实时上报 + var immediate = !!(this.delay === 0); + this.clsReporter.log(formattedParams, immediate); + } + // 生成子实例,与父所属一个链路,可用于分块上传内部流程上报单个分块操作 }, { key: "generateSubTracker", @@ -13564,9 +13673,11 @@ var Tracker = /*#__PURE__*/function () { traceId: this.params.traceId, bucket: this.params.bucket, region: this.params.region, + accelerate: this.params.accelerate, fileKey: this.params.requestPath, customId: this.params.customId, - delay: this.delay + delay: this.delay, + clsReporter: this.clsReporter }); return new Tracker(subParams); } @@ -14092,8 +14203,8 @@ var apiWrapper = function apiWrapper(apiName, apiFn) { // tracker传递 var tracker; - if (self.options.EnableTracker) { - if (params.calledBySdk === 'sliceUploadFile') { + if (self.options.EnableReporter) { + if (params.calledBySdk === 'sliceUploadFile' || params.calledBySdk === 'sliceCopyFile') { // 分块上传内部方法使用sliceUploadFile的子链路 tracker = params.tracker && params.tracker.generateSubTracker({ apiName: apiName @@ -14102,15 +14213,19 @@ var apiWrapper = function apiWrapper(apiName, apiFn) { // uploadFile、uploadFiles方法在内部处理,此处不处理 tracker = null; } else { - var fileSize = -1; + var fileSize = 0; if (params.Body) { - fileSize = typeof params.Body === 'string' ? params.Body.length : params.Body.size || params.Body.byteLength || -1; + fileSize = typeof params.Body === 'string' ? params.Body.length : params.Body.size || params.Body.byteLength || 0; } + var accelerate = self.options.UseAccelerate || typeof self.options.Domain === 'string' && self.options.Domain.includes('accelerate.'); tracker = new Tracker({ - Beacon: self.options.Beacon, + Beacon: self.options.BeaconReporter, + clsReporter: self.options.ClsReporter, bucket: params.Bucket, region: params.Region, apiName: apiName, + realApi: apiName, + accelerate: accelerate, fileKey: params.Key, fileSize: fileSize, deepTracker: self.options.DeepTracker, @@ -14133,7 +14248,7 @@ var apiWrapper = function apiWrapper(apiName, apiFn) { }; var _callback = function _callback(err, data) { // 格式化上报参数并上报 - tracker && tracker.formatResult(err, data); + tracker && tracker.report(err, data); callback && callback(formatResult(err), formatResult(data)); }; var checkParams = function checkParams() { diff --git a/dist/cos-js-sdk-v5.min.js b/dist/cos-js-sdk-v5.min.js index b644227..e971de6 100644 --- a/dist/cos-js-sdk-v5.min.js +++ b/dist/cos-js-sdk-v5.min.js @@ -1 +1 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.COS=t():e.COS=t()}(this,(function(){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="/dist/",r(r.s=9)}([function(e,t){function r(t){return e.exports=r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},e.exports.__esModule=!0,e.exports.default=e.exports,r(t)}e.exports=r,e.exports.__esModule=!0,e.exports.default=e.exports},function(e,t,r){"use strict";(function(t){var n=r(0),o=r(12),i=r(14),a=r(15),s=r(20),c=r(21),u=r(5);function l(e){return encodeURIComponent(e).replace(/!/g,"%21").replace(/'/g,"%27").replace(/\(/g,"%28").replace(/\)/g,"%29").replace(/\*/g,"%2A")}function d(e,t){var r=[];for(var n in e)e.hasOwnProperty(n)&&r.push(t?l(n).toLowerCase():n);return r.sort((function(e,t){return(e=e.toLowerCase())===(t=t.toLowerCase())?0:e>t?1:-1}))}var p,f=["cache-control","content-disposition","content-encoding","content-length","content-md5","expect","expires","host","if-match","if-modified-since","if-none-match","if-unmodified-since","origin","range","transfer-encoding","pic-operations"],h=function(e,t,r){var n=t/8,o=e.slice(r,r+n);return new Uint8Array(o).reverse(),new{8:Uint8Array,16:Uint16Array,32:Uint32Array}[t](o)[0]},m=function(e,t,r,n){var o=e.slice(t,r),i="";return new Uint8Array(o).forEach((function(e){i+=String.fromCharCode(e)})),n&&(i=decodeURIComponent(escape(i))),i},g=function(){},y=function(e){var t={};for(var r in e)e.hasOwnProperty(r)&&void 0!==e[r]&&null!==e[r]&&(t[r]=e[r]);return t},v=(p=function(e,t){e=e.split("."),t=t.split(".");for(var r=0;rparseInt(t[r])?1:-1;return 0},function(e){if(!e)return!1;var t=(e.match(/Chrome\/([.\d]+)/)||[])[1],r=(e.match(/QBCore\/([.\d]+)/)||[])[1],n=(e.match(/QQBrowser\/([.\d]+)/)||[])[1];return t&&p(t,"53.0.2785.116")<0&&r&&p(r,"3.53.991.400")<0&&n&&p(n,"9.0.2524.400")<=0||!1}("undefined"!=typeof navigator&&navigator.userAgent)),b=1048576;function C(e){return w(e,(function(e){return"object"===n(e)&&null!==e?C(e):e}))}function k(e,t){return T(t,(function(r,n){e[n]=t[n]})),e}function S(e){return e instanceof Array}function T(e,t){for(var r in e)e.hasOwnProperty(r)&&t(e[r],r)}function w(e,t){var r=S(e)?[]:{};for(var n in e)e.hasOwnProperty(n)&&(r[n]=t(e[n],n));return r}var R=function(e,t){var r=t.Bucket,n=t.Region,o=t.Key,i=this.options.Domain,a=!i||"string"==typeof i&&i.indexOf("{Bucket}")>-1,s=!i||"string"==typeof i&&i.indexOf("{Region}")>-1;if(e.indexOf("Bucket")>-1||"deleteMultipleObject"===e||"multipartList"===e||"listObjectVersions"===e){if(a&&!r)return"Bucket";if(s&&!n)return"Region"}else if(e.indexOf("Object")>-1||e.indexOf("multipart")>-1||"sliceUploadFile"===e||"abortUploadTask"===e||"uploadFile"===e){if(a&&!r)return"Bucket";if(s&&!n)return"Region";if(!o)return"Key"}return!1},x=function(e,t){if(t=k({},t),"getAuth"!==e&&"getV4Auth"!==e&&"getObjectUrl"!==e){var r=t.Headers||{};if(t&&"object"===n(t)){!function(){for(var e in t)t.hasOwnProperty(e)&&e.indexOf("x-cos-")>-1&&(r[e]=t[e])}();D.each({"x-cos-mfa":"MFA","Content-MD5":"ContentMD5","Content-Length":"ContentLength","Content-Type":"ContentType",Expect:"Expect",Expires:"Expires","Cache-Control":"CacheControl","Content-Disposition":"ContentDisposition","Content-Encoding":"ContentEncoding",Range:"Range","If-Modified-Since":"IfModifiedSince","If-Unmodified-Since":"IfUnmodifiedSince","If-Match":"IfMatch","If-None-Match":"IfNoneMatch","x-cos-copy-source":"CopySource","x-cos-copy-source-Range":"CopySourceRange","x-cos-metadata-directive":"MetadataDirective","x-cos-copy-source-If-Modified-Since":"CopySourceIfModifiedSince","x-cos-copy-source-If-Unmodified-Since":"CopySourceIfUnmodifiedSince","x-cos-copy-source-If-Match":"CopySourceIfMatch","x-cos-copy-source-If-None-Match":"CopySourceIfNoneMatch","x-cos-acl":"ACL","x-cos-grant-read":"GrantRead","x-cos-grant-write":"GrantWrite","x-cos-grant-full-control":"GrantFullControl","x-cos-grant-read-acp":"GrantReadAcp","x-cos-grant-write-acp":"GrantWriteAcp","x-cos-storage-class":"StorageClass","x-cos-traffic-limit":"TrafficLimit","x-cos-mime-limit":"MimeLimit","x-cos-server-side-encryption-customer-algorithm":"SSECustomerAlgorithm","x-cos-server-side-encryption-customer-key":"SSECustomerKey","x-cos-server-side-encryption-customer-key-MD5":"SSECustomerKeyMD5","x-cos-server-side-encryption":"ServerSideEncryption","x-cos-server-side-encryption-cos-kms-key-id":"SSEKMSKeyId","x-cos-server-side-encryption-context":"SSEContext","Pic-Operations":"PicOperations"},(function(e,n){void 0!==t[e]&&(r[n]=t[e])})),t.Headers=y(r)}}return t},E=function(e){return Date.now()+(e||0)},A="object"===("undefined"==typeof navigator?"undefined":n(navigator))&&!!navigator.userAgent.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/),B="object"===("undefined"==typeof navigator?"undefined":n(navigator))&&/\sQQ/i.test(navigator.userAgent),D={noop:g,formatParams:x,apiWrapper:function(e,t){return function(r,n){var o,i=this;if("function"==typeof r&&(n=r,r={}),r=x(e,r),i.options.EnableTracker)if("sliceUploadFile"===r.calledBySdk)o=r.tracker&&r.tracker.generateSubTracker({apiName:e});else if(["uploadFile","uploadFiles"].includes(e))o=null;else{var a=-1;r.Body&&(a="string"==typeof r.Body?r.Body.length:r.Body.size||r.Body.byteLength||-1),o=new u({Beacon:i.options.Beacon,bucket:r.Bucket,region:r.Region,apiName:e,fileKey:r.Key,fileSize:a,deepTracker:i.options.DeepTracker,customId:i.options.CustomId,delay:i.options.TrackerDelay})}r.tracker=o;var s=function(e){return e&&e.headers&&(e.headers["x-cos-request-id"]&&(e.RequestId=e.headers["x-cos-request-id"]),e.headers["x-ci-request-id"]&&(e.RequestId=e.headers["x-ci-request-id"]),e.headers["x-cos-version-id"]&&(e.VersionId=e.headers["x-cos-version-id"]),e.headers["x-cos-delete-marker"]&&(e.DeleteMarker=e.headers["x-cos-delete-marker"])),e},c=function(e,t){o&&o.formatResult(e,t),n&&n(s(e),s(t))},l=function(){if("getService"!==e&&"abortUploadTask"!==e){var t=R.call(i,e,r);if(t)return"missing param "+t;if(r.Region){if(i.options.CompatibilityMode){if(!/^([a-z\d-.]+)$/.test(r.Region))return"Region format error."}else{if(r.Region.indexOf("cos.")>-1)return'param Region should not be start with "cos."';if(!/^([a-z\d-]+)$/.test(r.Region))return"Region format error."}!i.options.CompatibilityMode&&-1===r.Region.indexOf("-")&&"yfb"!==r.Region&&"default"!==r.Region&&r.Region}if(r.Bucket){if(!/^([a-z\d-]+)-(\d+)$/.test(r.Bucket))if(r.AppId)r.Bucket=r.Bucket+"-"+r.AppId;else{if(!i.options.AppId)return'Bucket should format as "test-1250000000".';r.Bucket=r.Bucket+"-"+i.options.AppId}r.AppId&&delete r.AppId}!i.options.UseRawKey&&r.Key&&"/"===r.Key.substr(0,1)&&(r.Key=r.Key.substr(1))}}(),d=["getAuth","getObjectUrl"].includes(e);if("function"==typeof Promise&&!d&&!n)return new Promise((function(e,o){if(n=function(t,r){t?o(t):e(r)},l)return c(D.error(new Error(l)));t.call(i,r,c)}));if(l)return c(D.error(new Error(l)));var p=t.call(i,r,c);return d?p:void 0}},xml2json:a,json2xml:s,md5:o,clearKey:y,fileSlice:function(e,t,r,n,o){var i;if(e.slice?i=e.slice(t,r):e.mozSlice?i=e.mozSlice(t,r):e.webkitSlice&&(i=e.webkitSlice(t,r)),n&&v){var a=new FileReader;a.onload=function(e){i=null,o(new Blob([a.result]))},a.readAsArrayBuffer(i)}else o(i)},getBodyMd5:function(e,t,r,n){r=r||g,e?"string"==typeof t?r(D.md5(t,!0)):Blob&&t instanceof Blob?D.getFileMd5(t,(function(e,t){r(t)}),n):r():r()},getFileMd5:function(e,t,r){var n=e.size,i=0,a=o.getCtx();!function o(s){if(s>=n){var c=a.digest("hex");t(null,c)}else{var u=Math.min(n,s+b);D.fileSlice(e,s,u,!1,(function(e){!function(e,t){var r,n=new FileReader;FileReader.prototype.readAsBinaryString?(r=FileReader.prototype.readAsBinaryString,n.onload=function(){t(this.result)}):FileReader.prototype.readAsArrayBuffer&&(r=function(e){var r="",n=new FileReader;n.onload=function(e){for(var o=new Uint8Array(n.result),i=o.byteLength,a=0;a-1||f.indexOf(n)>-1)&&(t[r]=e[r])}return t}(C(e.Headers||e.headers||{})),u=e.Key||"";e.UseRawKey?t=e.Pathname||e.pathname||"/"+u:0!==(t=e.Pathname||e.pathname||u).indexOf("/")&&(t="/"+t);var l=!1!==e.ForceSignHost;if(!c.Host&&!c.host&&e.Bucket&&e.Region&&l&&(c.Host=e.Bucket+".cos."+e.Region+".myqcloud.com"),!r)throw new Error("missing param SecretId");if(!n)throw new Error("missing param SecretKey");var p=Math.round(E(e.SystemClockOffset)/1e3)-1,h=p,m=e.Expires||e.expires;h+=void 0===m?900:1*m||0;var g=r,y=o||p+";"+h,v=o||p+";"+h,b=d(c,!0).join(";").toLowerCase(),k=d(s,!0).join(";").toLowerCase(),S=i.HmacSHA1(v,n).toString(),T=[a,t,D.obj2str(s,!0),D.obj2str(c,!0),""].join("\n"),w=["sha1",y,i.SHA1(T).toString(),""].join("\n");return["q-sign-algorithm=sha1","q-ak="+g,"q-sign-time="+y,"q-key-time="+v,"q-header-list="+b,"q-url-param-list="+k,"q-signature="+i.HmacSHA1(w,S).toString()].join("&")},parseSelectPayload:function(e){for(var t={},r=m(e),n={records:[]};e.byteLength;){var o,i=h(e,32,0),a=h(e,32,4),s=i-a-16,c=0;for(e=e.slice(12);c=0))throw new B(E,new Error(e.tagName+"@"+r));for(var o=t.length-1;n"==e&&">")||"&"==e&&"&"||'"'==e&&"""||"&#"+e.charCodeAt()+";"}function H(e,t){if(t(e))return!0;if(e=e.firstChild)do{if(H(e,t))return!0}while(e=e.nextSibling)}function j(){this.ownerDocument=this}function F(e,t,r,n){e&&e._inc++,r.namespaceURI===i.XMLNS&&delete t._nsMap[r.prefix?r.localName:""]}function K(e,t,r){if(e&&e._inc){e._inc++;var n=t.childNodes;if(r)n[n.length++]=r;else{for(var o=t.firstChild,i=0;o;)n[i++]=o,o=o.nextSibling;n.length=i,delete n[n.length]}}}function z(e,t){var r=t.previousSibling,n=t.nextSibling;return r?r.nextSibling=n:e.firstChild=n,n?n.previousSibling=r:e.lastChild=r,t.parentNode=null,t.previousSibling=null,t.nextSibling=null,K(e.ownerDocument,e),t}function G(e){return e&&e.nodeType===M.DOCUMENT_TYPE_NODE}function V(e){return e&&e.nodeType===M.ELEMENT_NODE}function Q(e){return e&&e.nodeType===M.TEXT_NODE}function W(e,t){var r=e.childNodes||[];if(o(r,V)||G(t))return!1;var n=o(r,G);return!(t&&n&&r.indexOf(n)>r.indexOf(t))}function X(e,t){var r=e.childNodes||[];if(o(r,(function(e){return V(e)&&e!==t})))return!1;var n=o(r,G);return!(t&&n&&r.indexOf(n)>r.indexOf(t))}function $(e,t,r){if(!function(e){return e&&(e.nodeType===M.DOCUMENT_NODE||e.nodeType===M.DOCUMENT_FRAGMENT_NODE||e.nodeType===M.ELEMENT_NODE)}(e))throw new B(x,"Unexpected parent node type "+e.nodeType);if(r&&r.parentNode!==e)throw new B(E,"child not in parent");if(!function(e){return e&&(V(e)||Q(e)||G(e)||e.nodeType===M.DOCUMENT_FRAGMENT_NODE||e.nodeType===M.COMMENT_NODE||e.nodeType===M.PROCESSING_INSTRUCTION_NODE)}(t)||G(t)&&e.nodeType!==M.DOCUMENT_NODE)throw new B(x,"Unexpected node type "+t.nodeType+" for parent node type "+e.nodeType)}function J(e,t,r){var n=e.childNodes||[],i=t.childNodes||[];if(t.nodeType===M.DOCUMENT_FRAGMENT_NODE){var a=i.filter(V);if(a.length>1||o(i,Q))throw new B(x,"More than one element or text in fragment");if(1===a.length&&!W(e,r))throw new B(x,"Element in fragment can not be inserted before doctype")}if(V(t)&&!W(e,r))throw new B(x,"Only one element can be added and only after doctype");if(G(t)){if(o(n,G))throw new B(x,"Only one doctype is allowed");var s=o(n,V);if(r&&n.indexOf(s)1||o(i,Q))throw new B(x,"More than one element or text in fragment");if(1===a.length&&!X(e,r))throw new B(x,"Element in fragment can not be inserted before doctype")}if(V(t)&&!X(e,r))throw new B(x,"Only one element can be added and only after doctype");if(G(t)){if(o(n,(function(e){return G(e)&&e!==r})))throw new B(x,"Only one doctype is allowed");var s=o(n,V);if(r&&n.indexOf(s)=0;T--){if(""===(w=o[T]).prefix&&w.namespace===e.namespaceURI){d=w.namespace;break}}if(d!==e.namespaceURI)for(T=o.length-1;T>=0;T--){var w;if((w=o[T]).namespace===e.namespaceURI){w.prefix&&(l=w.prefix+":"+u);break}}}t.push("<",l);for(var R=0;R"),r&&/^script$/i.test(u))for(;c;)c.data?t.push(c.data):ge(c,t,r,n,o.slice()),c=c.nextSibling;else for(;c;)ge(c,t,r,n,o.slice()),c=c.nextSibling;t.push("")}else t.push("/>");return;case C:case S:for(c=e.firstChild;c;)ge(c,t,r,n,o.slice()),c=c.nextSibling;return;case f:return me(t,e.name,e.value);case h:return t.push(e.data.replace(/[<&>]/g,q));case m:return t.push("");case b:return t.push("\x3c!--",e.data,"--\x3e");case k:var B=e.publicId,D=e.systemId;if(t.push("");else if(D&&"."!=D)t.push(" SYSTEM ",D,">");else{var N=e.internalSubset;N&&t.push(" [",N,"]"),t.push(">")}return;case v:return t.push("");case g:return t.push("&",e.nodeName,";");default:t.push("??",e.nodeName)}}function ye(e,t,r){var n;switch(t.nodeType){case p:(n=t.cloneNode(!1)).ownerDocument=e;case S:break;case f:r=!0}if(n||(n=t.cloneNode(!1)),n.ownerDocument=e,n.parentNode=null,r)for(var o=t.firstChild;o;)n.appendChild(ye(e,o,r)),o=o.nextSibling;return n}function ve(e,t,r){var n=new t.constructor;for(var o in t)if(Object.prototype.hasOwnProperty.call(t,o)){var i=t[o];"object"!=typeof i&&i!=n[o]&&(n[o]=i)}switch(t.childNodes&&(n.childNodes=new D),n.ownerDocument=e,n.nodeType){case p:var a=t.attributes,s=n.attributes=new I,c=a.length;s._ownerElement=n;for(var u=0;u=0&&e0},lookupPrefix:function(e){for(var t=this;t;){var r=t._nsMap;if(r)for(var n in r)if(Object.prototype.hasOwnProperty.call(r,n)&&r[n]===e)return n;t=t.nodeType==f?t.ownerDocument:t.parentNode}return null},lookupNamespaceURI:function(e){for(var t=this;t;){var r=t._nsMap;if(r&&Object.prototype.hasOwnProperty.call(r,e))return r[e];t=t.nodeType==f?t.ownerDocument:t.parentNode}return null},isDefaultNamespace:function(e){return null==this.lookupPrefix(e)}},u(d,M),u(d,M.prototype),j.prototype={nodeName:"#document",nodeType:C,doctype:null,documentElement:null,_inc:1,insertBefore:function(e,t){if(e.nodeType==S){for(var r=e.firstChild;r;){var n=r.nextSibling;this.insertBefore(r,t),r=n}return e}return Z(this,e,t),e.ownerDocument=this,null===this.documentElement&&e.nodeType===p&&(this.documentElement=e),e},removeChild:function(e){return this.documentElement==e&&(this.documentElement=null),z(this,e)},replaceChild:function(e,t){Z(this,e,t,Y),e.ownerDocument=this,t&&this.removeChild(t),V(e)&&(this.documentElement=e)},importNode:function(e,t){return ye(this,e,t)},getElementById:function(e){var t=null;return H(this.documentElement,(function(r){if(r.nodeType==p&&r.getAttribute("id")==e)return t=r,!0})),t},getElementsByClassName:function(e){var t=c(e);return new N(this,(function(r){var n=[];return t.length>0&&H(r.documentElement,(function(o){if(o!==r&&o.nodeType===p){var i=o.getAttribute("class");if(i){var a=e===i;if(!a){var s=c(i);a=t.every((u=s,function(e){return u&&-1!==u.indexOf(e)}))}a&&n.push(o)}}var u})),n}))},createElement:function(e){var t=new ee;return t.ownerDocument=this,t.nodeName=e,t.tagName=e,t.localName=e,t.childNodes=new D,(t.attributes=new I)._ownerElement=t,t},createDocumentFragment:function(){var e=new le;return e.ownerDocument=this,e.childNodes=new D,e},createTextNode:function(e){var t=new ne;return t.ownerDocument=this,t.appendData(e),t},createComment:function(e){var t=new oe;return t.ownerDocument=this,t.appendData(e),t},createCDATASection:function(e){var t=new ie;return t.ownerDocument=this,t.appendData(e),t},createProcessingInstruction:function(e,t){var r=new de;return r.ownerDocument=this,r.tagName=r.nodeName=r.target=e,r.nodeValue=r.data=t,r},createAttribute:function(e){var t=new te;return t.ownerDocument=this,t.name=e,t.nodeName=e,t.localName=e,t.specified=!0,t},createEntityReference:function(e){var t=new ue;return t.ownerDocument=this,t.nodeName=e,t},createElementNS:function(e,t){var r=new ee,n=t.split(":"),o=r.attributes=new I;return r.childNodes=new D,r.ownerDocument=this,r.nodeName=t,r.tagName=t,r.namespaceURI=e,2==n.length?(r.prefix=n[0],r.localName=n[1]):r.localName=t,o._ownerElement=r,r},createAttributeNS:function(e,t){var r=new te,n=t.split(":");return r.ownerDocument=this,r.nodeName=t,r.name=t,r.namespaceURI=e,r.specified=!0,2==n.length?(r.prefix=n[0],r.localName=n[1]):r.localName=t,r}},l(j,M),ee.prototype={nodeType:p,hasAttribute:function(e){return null!=this.getAttributeNode(e)},getAttribute:function(e){var t=this.getAttributeNode(e);return t&&t.value||""},getAttributeNode:function(e){return this.attributes.getNamedItem(e)},setAttribute:function(e,t){var r=this.ownerDocument.createAttribute(e);r.value=r.nodeValue=""+t,this.setAttributeNode(r)},removeAttribute:function(e){var t=this.getAttributeNode(e);t&&this.removeAttributeNode(t)},appendChild:function(e){return e.nodeType===S?this.insertBefore(e,null):function(e,t){return t.parentNode&&t.parentNode.removeChild(t),t.parentNode=e,t.previousSibling=e.lastChild,t.nextSibling=null,t.previousSibling?t.previousSibling.nextSibling=t:e.firstChild=t,e.lastChild=t,K(e.ownerDocument,e,t),t}(this,e)},setAttributeNode:function(e){return this.attributes.setNamedItem(e)},setAttributeNodeNS:function(e){return this.attributes.setNamedItemNS(e)},removeAttributeNode:function(e){return this.attributes.removeNamedItem(e.nodeName)},removeAttributeNS:function(e,t){var r=this.getAttributeNodeNS(e,t);r&&this.removeAttributeNode(r)},hasAttributeNS:function(e,t){return null!=this.getAttributeNodeNS(e,t)},getAttributeNS:function(e,t){var r=this.getAttributeNodeNS(e,t);return r&&r.value||""},setAttributeNS:function(e,t,r){var n=this.ownerDocument.createAttributeNS(e,t);n.value=n.nodeValue=""+r,this.setAttributeNode(n)},getAttributeNodeNS:function(e,t){return this.attributes.getNamedItemNS(e,t)},getElementsByTagName:function(e){return new N(this,(function(t){var r=[];return H(t,(function(n){n===t||n.nodeType!=p||"*"!==e&&n.tagName!=e||r.push(n)})),r}))},getElementsByTagNameNS:function(e,t){return new N(this,(function(r){var n=[];return H(r,(function(o){o===r||o.nodeType!==p||"*"!==e&&o.namespaceURI!==e||"*"!==t&&o.localName!=t||n.push(o)})),n}))}},j.prototype.getElementsByTagName=ee.prototype.getElementsByTagName,j.prototype.getElementsByTagNameNS=ee.prototype.getElementsByTagNameNS,l(ee,M),te.prototype.nodeType=f,l(te,M),re.prototype={data:"",substringData:function(e,t){return this.data.substring(e,e+t)},appendData:function(e){e=this.data+e,this.nodeValue=this.data=e,this.length=e.length},insertData:function(e,t){this.replaceData(e,0,t)},appendChild:function(e){throw new Error(R[x])},deleteData:function(e,t){this.replaceData(e,t,"")},replaceData:function(e,t,r){r=this.data.substring(0,e)+r+this.data.substring(e+t),this.nodeValue=this.data=r,this.length=r.length}},l(re,M),ne.prototype={nodeName:"#text",nodeType:h,splitText:function(e){var t=this.data,r=t.substring(e);t=t.substring(0,e),this.data=this.nodeValue=t,this.length=t.length;var n=this.ownerDocument.createTextNode(r);return this.parentNode&&this.parentNode.insertBefore(n,this.nextSibling),n}},l(ne,re),oe.prototype={nodeName:"#comment",nodeType:b},l(oe,re),ie.prototype={nodeName:"#cdata-section",nodeType:m},l(ie,re),ae.prototype.nodeType=k,l(ae,M),se.prototype.nodeType=T,l(se,M),ce.prototype.nodeType=y,l(ce,M),ue.prototype.nodeType=g,l(ue,M),le.prototype.nodeName="#document-fragment",le.prototype.nodeType=S,l(le,M),de.prototype.nodeType=v,l(de,M),pe.prototype.serializeToString=function(e,t,r){return fe.call(e,t,r)},M.prototype.toString=fe;try{if(Object.defineProperty){function Ce(e){switch(e.nodeType){case p:case S:var t=[];for(e=e.firstChild;e;)7!==e.nodeType&&8!==e.nodeType&&t.push(Ce(e)),e=e.nextSibling;return t.join("");default:return e.nodeValue}}Object.defineProperty(N.prototype,"length",{get:function(){return O(this),this.$$length}}),Object.defineProperty(M.prototype,"textContent",{get:function(){return Ce(this)},set:function(e){switch(this.nodeType){case p:case S:for(;this.firstChild;)this.removeChild(this.firstChild);(e||String(e))&&this.appendChild(this.ownerDocument.createTextNode(e));break;default:this.data=e,this.value=e,this.nodeValue=e}}}),be=function(e,t,r){e["$$"+t]=r}}}catch(ke){}t.DocumentType=ae,t.DOMException=B,t.DOMImplementation=_,t.Element=ee,t.Node=M,t.NodeList=D,t.XMLSerializer=pe},function(e,t,r){var n=r(22),o=r(23),i=r(0),a=r(6),s=null,c=function(e,t){if(!s){if(!e||"function"!=typeof e)throw new Error("Beacon not found");s=new e({appkey:"0AND0VEVB24UBGDU",versionCode:a.version,channelID:"js_sdk",openid:"openid",unionid:"unid",strictMode:!1,delay:t,sessionDuration:6e4})}return s},u=function(){var e=function(){return(65536*(1+Math.random())|0).toString(16).substring(1)};return e()+e()+"-"+e()+"-"+e()+"-"+e()+"-"+e()+e()+e()},l=function(){if("object"===("undefined"==typeof navigator?"undefined":i(navigator))){var e=navigator.connection||navigator.mozConnection||navigator.webkitConnection;return(null==e?void 0:e.type)||(null==e?void 0:e.effectiveType)||"unknown"}return"unknown"},d=function(){if("object"!==("undefined"==typeof navigator?"undefined":i(navigator)))return"unknown os";var e=navigator.userAgent.toLowerCase(),t=/macintosh|mac os x/i.test(navigator.userAgent);return e.indexOf("win32")>=0||e.indexOf("wow32")>=0?"win32":e.indexOf("win64")>=0||e.indexOf("wow64")>=0?"win64":t?"mac":"unknown os"},p=function(){return!("object"!==("undefined"==typeof navigator?"undefined":i(navigator))||!navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i))},f=function(){return!("object"!==("undefined"==typeof navigator?"undefined":i(navigator))||!navigator.userAgent.match(/(Android|Adr|Linux)/i))},h=function(){return!("object"!==("undefined"==typeof navigator?"undefined":i(navigator))||!navigator.userAgent.match(/(iPhone|iPod|iPad|iOS)/i))},m=function(){if("object"!==("undefined"==typeof navigator?"undefined":i(navigator)))return"unknown device";var e=navigator.userAgent.toLowerCase();if(e.includes("app/tencent_wemeet"))return"tencent_wemeet";if(e.indexOf("maxthon")>=0){var t=e.match(/maxthon\/([\d.]+)/),r=t&&t[1]||"";return"傲游浏览器 ".concat(r).trim()}if(e.indexOf("qqbrowser")>=0){var n=e.match(/qqbrowser\/([\d.]+)/),o=n&&n[1]||"";return"QQ浏览器 ".concat(o).trim()}if(e.indexOf("se 2.x")>=0)return"搜狗浏览器";if(e.indexOf("wxwork")>=0)return"微信内置浏览器";if(e.indexOf("msie")>=0){var a=e.match(/msie ([\d.]+)/),s=a&&a[1]||"";return"IE ".concat(s).trim()}if(e.indexOf("firefox")>=0){var c=e.match(/firefox\/([\d.]+)/),u=c&&c[1]||"";return"Firefox ".concat(u).trim()}if(e.indexOf("chrome")>=0){var l=e.match(/chrome\/([\d.]+)/),d=l&&l[1]||"";return"Chrome ".concat(d).trim()}if(e.indexOf("opera")>=0){var p=e.match(/opera.([\d.]+)/),f=p&&p[1]||"";return"Opera ".concat(f).trim()}if(e.indexOf("safari")>=0){var h=e.match(/version\/([\d.]+)/),m=h&&h[1]||"";return"Safari ".concat(m).trim()}if(e.indexOf("edge")>=0){var g=e.match(/edge\/([\d.]+)/),y=g&&g[1]||"";return"edge ".concat(y).trim()}return e.substr(0,200)},g={isMobile:p(),isBrowser:!p(),mobileOsType:f()?"android":h?"ios":"other_mobile",pcOsType:d()},y={deviceType:g.isMobile?"mobile":g.isBrowser?"browser":"unknown",devicePlatform:g.isMobile?g.mobileOsType:g.pcOsType,deviceName:m()},v=["multipartInit","multipartUpload","multipartComplete","multipartList","multipartListPart","multipartAbort"],b=["putObject","postObject","appendObject","sliceUploadFile","uploadFile","uploadFiles"].concat(v),C=["getObject"];function k(e){return e.replace(/([A-Z])/g,"_$1").toLowerCase()}var S=function(){"use strict";function e(t){n(this,e);var r=t.parent,o=t.traceId,i=t.bucket,s=t.region,l=t.apiName,d=t.fileKey,p=t.fileSize,f=t.accelerate,h=t.customId,m=t.delay,g=t.deepTracker,v=t.Beacon,b=i&&i.substr(i.lastIndexOf("-")+1)||"";this.parent=r,this.deepTracker=g,this.delay=m,this.params={cossdkVersion:a.version,region:s,networkType:"",host:"",accelerate:f?"Y":"N",requestPath:d||"",size:p||-1,httpMd5:0,httpSign:0,httpFull:0,name:l||"",result:"",tookTime:0,errorNode:"",errorCode:"",errorMessage:"",errorRequestId:"",errorStatusCode:0,errorServiceName:"",tracePlatform:"cos-js-sdk-v5",traceId:o||u(),bucket:i,appid:b,partNumber:0,retryTimes:0,reqUrl:"",customId:h||"",deviceType:y.deviceType,devicePlatform:y.devicePlatform,deviceName:y.deviceName,md5StartTime:0,md5EndTime:0,signStartTime:0,signEndTime:0,httpStartTime:0,httpEndTime:0,startTime:(new Date).getTime(),endTime:0},this.beacon=c(v,m)}return o(e,[{key:"formatResult",value:function(e,t){var r,n,o,i,a,s,c=(new Date).getTime()-this.params.startTime,u=l(),d=e?(null==e?void 0:e.code)||(null==e||null===(r=e.error)||void 0===r?void 0:r.code)||(null==e||null===(n=e.error)||void 0===n?void 0:n.Code):"",p=e?(null==e?void 0:e.message)||(null==e||null===(o=e.error)||void 0===o?void 0:o.message)||(null==e||null===(i=e.error)||void 0===i?void 0:i.Message):"",f=e?(null==e?void 0:e.resource)||(null==e||null===(a=e.error)||void 0===a?void 0:a.resource)||(null==e||null===(s=e.error)||void 0===s?void 0:s.Resource):"",h=e?null==e?void 0:e.statusCode:t.statusCode,m=e?(null==e?void 0:e.headers)&&(null==e?void 0:e.headers["x-cos-request-id"]):(null==t?void 0:t.headers)&&(null==t?void 0:t.headers["x-cos-request-id"]),g=e?m?"Server":"Client":"";if(Object.assign(this.params,{tookTime:c,networkType:u,httpMd5:this.params.md5EndTime-this.params.md5StartTime,httpSign:this.params.signEndTime-this.params.signStartTime,httpFull:this.params.httpEndTime-this.params.httpStartTime,result:e?"Fail":"Success",errorType:g,errorCode:d,errorStatusCode:h,errorMessage:p,errorServiceName:f,errorRequestId:m}),!e||d&&p||(this.params.fullError=e?JSON.stringify(e):""),"getObject"===this.params.name&&(this.params.size=t?t.headers&&t.headers["content-length"]:-1),this.params.reqUrl)try{var y=/^http(s)?:\/\/(.*?)\//.exec(this.params.reqUrl);this.params.host=y[2]}catch(e){this.params.host=this.params.reqUrl}this.sendEvents()}},{key:"setParams",value:function(e){Object.assign(this.params,e)}},{key:"sendEvents",value:function(){if(!v.includes(this.params.name)||this.deepTracker){var e,t=(e=this.params.name,b.includes(e)?"cos_upload":C.includes(e)?"cos_download":"base_service"),r=function(e){var t={},r="Success"===e.result?["tracePlatform","cossdkVersion","region","bucket","appid","networkType","host","accelerate","requestPath","partNumber","size","name","result","tookTime","errorRequestId","retryTimes","reqUrl","customId","deviceType","devicePlatform","deviceName"]:["tracePlatform","cossdkVersion","region","networkType","host","accelerate","requestPath","size","httpMd5","httpSign","httpFull","name","result","tookTime","errorNode","errorCode","errorMessage","errorRequestId","errorStatusCode","errorServiceName","errorType","traceId","bucket","appid","partNumber","retryTimes","reqUrl","customId","fullError","deviceType","devicePlatform","deviceName"];for(var n in e)r.includes(n)&&(t[k(n)]=e[n]);return t}(this.params);this.beacon||(this.beacon=c(this.delay||5e3)),0===this.delay?this.beacon&&this.beacon.onDirectUserAction(t,r):this.beacon&&this.beacon.onUserAction(t,r)}}},{key:"generateSubTracker",value:function(t){return Object.assign(t,{parent:this,deepTracker:this.deepTracker,traceId:this.params.traceId,bucket:this.params.bucket,region:this.params.region,fileKey:this.params.requestPath,customId:this.params.customId,delay:this.delay}),new e(t)}}]),e}();e.exports=S},function(e){e.exports=JSON.parse('{"name":"cos-js-sdk-v5","version":"1.7.0","description":"JavaScript SDK for [腾讯云对象存储](https://cloud.tencent.com/product/cos)","main":"dist/cos-js-sdk-v5.js","types":"index.d.ts","scripts":{"prettier":"prettier --write src demo/demo.js demo/CIDemos/*.js test/test.js server/sts.js lib/request.js index.d.ts","server":"node server/sts.js","dev":"cross-env NODE_ENV=development webpack -w --mode=development","build":"cross-env NODE_ENV=production webpack --mode=production","cos-auth.min.js":"uglifyjs ./demo/common/cos-auth.js -o ./demo/common/cos-auth.min.js -c -m","test":"jest --runInBand --coverage"},"repository":{"type":"git","url":"git+https://github.com/tencentyun/cos-js-sdk-v5.git"},"keywords":[],"author":"carsonxu","license":"ISC","bugs":{"url":"https://github.com/tencentyun/cos-js-sdk-v5/issues"},"homepage":"https://github.com/tencentyun/cos-js-sdk-v5#readme","dependencies":{"@xmldom/xmldom":"^0.8.6"},"devDependencies":{"@babel/core":"7.17.9","@babel/plugin-transform-runtime":"7.18.10","@babel/preset-env":"7.16.11","babel-loader":"8.2.5","body-parser":"^1.18.3","cross-env":"^5.2.0","express":"^4.16.4","jest":"^29.3.1","jest-environment-jsdom":"^29.3.1","prettier":"^3.0.1","qcloud-cos-sts":"^3.0.2","request":"^2.87.0","terser-webpack-plugin":"4.2.3","uglifyjs":"^2.4.11","webpack":"4.46.0","webpack-cli":"4.10.0"}}')},function(e,t){var r=function(e){var t={},r=function(e){return!t[e]&&(t[e]=[]),t[e]};e.on=function(e,t){r(e).push(t)},e.off=function(e,t){for(var n=r(e),o=n.length-1;o>=0;o--)t===n[o]&&n.splice(o,1)},e.emit=function(e,t){for(var n=r(e).map((function(e){return e})),o=0;o=0;r--){var o=n[r][2];(!o||o+2592e3=0;o--){var i=n[o];i[0]===e&&i[1]===t&&n.splice(o,1)}n.unshift([e,t,Math.round(Date.now()/1e3)]),n.length>r&&n.splice(r),l()}},removeUploadId:function(e){u.call(this),delete d.using[e];for(var t=n.length-1;t>=0;t--)n[t][1]===e&&n.splice(t,1);l()}};e.exports=d},function(e,t,r){var n=r(10);e.exports=n},function(e,t,r){"use strict";var n=r(1),o=r(7),i=r(26),a=r(27),s=r(29),c=r(6),u={AppId:"",SecretId:"",SecretKey:"",SecurityToken:"",ChunkRetryTimes:2,FileParallelLimit:3,ChunkParallelLimit:3,ChunkSize:1048576,SliceSize:1048576,CopyChunkParallelLimit:20,CopyChunkSize:10485760,CopySliceSize:10485760,MaxPartNumber:1e4,ProgressInterval:1e3,Domain:"",ServiceDomain:"",Protocol:"",CompatibilityMode:!1,ForcePathStyle:!1,UseRawKey:!1,Timeout:0,CorrectClockSkew:!0,SystemClockOffset:0,UploadCheckContentMd5:!1,UploadQueueSize:1e4,UploadAddMetaMd5:!1,UploadIdCacheLimit:50,UseAccelerate:!1,ForceSignHost:!0,EnableTracker:!1,DeepTracker:!1,Beacon:null,TrackerDelay:5e3,CustomId:"",AutoSwitchHost:!0,CopySourceParser:null},l=function(e){if(this.options=n.extend(n.clone(u),e||{}),this.options.FileParallelLimit=Math.max(1,this.options.FileParallelLimit),this.options.ChunkParallelLimit=Math.max(1,this.options.ChunkParallelLimit),this.options.ChunkRetryTimes=Math.max(0,this.options.ChunkRetryTimes),this.options.ChunkSize=Math.max(1048576,this.options.ChunkSize),this.options.CopyChunkParallelLimit=Math.max(1,this.options.CopyChunkParallelLimit),this.options.CopyChunkSize=Math.max(1048576,this.options.CopyChunkSize),this.options.CopySliceSize=Math.max(0,this.options.CopySliceSize),this.options.MaxPartNumber=Math.max(1024,Math.min(1e4,this.options.MaxPartNumber)),this.options.Timeout=Math.max(0,this.options.Timeout),this.options.AppId,this.options.SecretId&&this.options.SecretId.indexOf(" "),this.options.SecretKey&&this.options.SecretKey.indexOf(" "),n.isNode(),this.options.ForcePathStyle)throw new Error("ForcePathStyle is not supported");o.init(this),i.init(this)};a.init(l,i),s.init(l,i),l.util={md5:n.md5,xml2json:n.xml2json,json2xml:n.json2xml,encodeBase64:n.encodeBase64},l.getAuthorization=n.getAuth,l.version=c.version,e.exports=l},function(e,t){var r,n,o=e.exports={};function i(){throw new Error("setTimeout has not been defined")}function a(){throw new Error("clearTimeout has not been defined")}function s(e){if(r===setTimeout)return setTimeout(e,0);if((r===i||!r)&&setTimeout)return r=setTimeout,setTimeout(e,0);try{return r(e,0)}catch(t){try{return r.call(null,e,0)}catch(t){return r.call(this,e,0)}}}!function(){try{r="function"==typeof setTimeout?setTimeout:i}catch(e){r=i}try{n="function"==typeof clearTimeout?clearTimeout:a}catch(e){n=a}}();var c,u=[],l=!1,d=-1;function p(){l&&c&&(l=!1,c.length?u=c.concat(u):d=-1,u.length&&f())}function f(){if(!l){var e=s(p);l=!0;for(var t=u.length;t;){for(c=u,u=[];++d1)for(var r=1;r>6,s[n++]=128|63&r):r<55296||r>=57344?(s[n++]=224|r>>12,s[n++]=128|r>>6&63,s[n++]=128|63&r):(r=65536+((1023&r)<<10|1023&e.charCodeAt(++o)),s[n++]=240|r>>18,s[n++]=128|r>>12&63,s[n++]=128|r>>6&63,s[n++]=128|63&r);else for(n=this.start;o>2]|=r<>2]|=(192|r>>6)<>2]|=(128|63&r)<=57344?(a[n>>2]|=(224|r>>12)<>2]|=(128|r>>6&63)<>2]|=(128|63&r)<>2]|=(240|r>>18)<>2]|=(128|r>>12&63)<>2]|=(128|r>>6&63)<>2]|=(128|63&r)<=64?(this.start=n-64,this.hash(),this.hashed=!0):this.start=n}return this.bytes>4294967295&&(this.hBytes+=this.bytes/4294967296<<0,this.bytes=this.bytes%4294967296),this}},v.prototype.finalize=function(){if(!this.finalized){this.finalized=!0;var e=this.blocks,t=this.lastByteIndex;e[t>>2]|=d[3&t],t>=56&&(this.hashed||this.hash(),e[0]=e[16],e[16]=e[1]=e[2]=e[3]=e[4]=e[5]=e[6]=e[7]=e[8]=e[9]=e[10]=e[11]=e[12]=e[13]=e[14]=e[15]=0),e[14]=this.bytes<<3,e[15]=this.hBytes<<3|this.bytes>>>29,this.hash()}},v.prototype.hash=function(){var e,t,r,n,o,i,a=this.blocks;this.first?t=((t=((e=((e=a[0]-680876937)<<7|e>>>25)-271733879<<0)^(r=((r=(-271733879^(n=((n=(-1732584194^2004318071&e)+a[1]-117830708)<<12|n>>>20)+e<<0)&(-271733879^e))+a[2]-1126478375)<<17|r>>>15)+n<<0)&(n^e))+a[3]-1316259209)<<22|t>>>10)+r<<0:(e=this.h0,t=this.h1,r=this.h2,t=((t+=((e=((e+=((n=this.h3)^t&(r^n))+a[0]-680876936)<<7|e>>>25)+t<<0)^(r=((r+=(t^(n=((n+=(r^e&(t^r))+a[1]-389564586)<<12|n>>>20)+e<<0)&(e^t))+a[2]+606105819)<<17|r>>>15)+n<<0)&(n^e))+a[3]-1044525330)<<22|t>>>10)+r<<0),t=((t+=((e=((e+=(n^t&(r^n))+a[4]-176418897)<<7|e>>>25)+t<<0)^(r=((r+=(t^(n=((n+=(r^e&(t^r))+a[5]+1200080426)<<12|n>>>20)+e<<0)&(e^t))+a[6]-1473231341)<<17|r>>>15)+n<<0)&(n^e))+a[7]-45705983)<<22|t>>>10)+r<<0,t=((t+=((e=((e+=(n^t&(r^n))+a[8]+1770035416)<<7|e>>>25)+t<<0)^(r=((r+=(t^(n=((n+=(r^e&(t^r))+a[9]-1958414417)<<12|n>>>20)+e<<0)&(e^t))+a[10]-42063)<<17|r>>>15)+n<<0)&(n^e))+a[11]-1990404162)<<22|t>>>10)+r<<0,t=((t+=((e=((e+=(n^t&(r^n))+a[12]+1804603682)<<7|e>>>25)+t<<0)^(r=((r+=(t^(n=((n+=(r^e&(t^r))+a[13]-40341101)<<12|n>>>20)+e<<0)&(e^t))+a[14]-1502002290)<<17|r>>>15)+n<<0)&(n^e))+a[15]+1236535329)<<22|t>>>10)+r<<0,t=((t+=((n=((n+=(t^r&((e=((e+=(r^n&(t^r))+a[1]-165796510)<<5|e>>>27)+t<<0)^t))+a[6]-1069501632)<<9|n>>>23)+e<<0)^e&((r=((r+=(e^t&(n^e))+a[11]+643717713)<<14|r>>>18)+n<<0)^n))+a[0]-373897302)<<20|t>>>12)+r<<0,t=((t+=((n=((n+=(t^r&((e=((e+=(r^n&(t^r))+a[5]-701558691)<<5|e>>>27)+t<<0)^t))+a[10]+38016083)<<9|n>>>23)+e<<0)^e&((r=((r+=(e^t&(n^e))+a[15]-660478335)<<14|r>>>18)+n<<0)^n))+a[4]-405537848)<<20|t>>>12)+r<<0,t=((t+=((n=((n+=(t^r&((e=((e+=(r^n&(t^r))+a[9]+568446438)<<5|e>>>27)+t<<0)^t))+a[14]-1019803690)<<9|n>>>23)+e<<0)^e&((r=((r+=(e^t&(n^e))+a[3]-187363961)<<14|r>>>18)+n<<0)^n))+a[8]+1163531501)<<20|t>>>12)+r<<0,t=((t+=((n=((n+=(t^r&((e=((e+=(r^n&(t^r))+a[13]-1444681467)<<5|e>>>27)+t<<0)^t))+a[2]-51403784)<<9|n>>>23)+e<<0)^e&((r=((r+=(e^t&(n^e))+a[7]+1735328473)<<14|r>>>18)+n<<0)^n))+a[12]-1926607734)<<20|t>>>12)+r<<0,t=((t+=((i=(n=((n+=((o=t^r)^(e=((e+=(o^n)+a[5]-378558)<<4|e>>>28)+t<<0))+a[8]-2022574463)<<11|n>>>21)+e<<0)^e)^(r=((r+=(i^t)+a[11]+1839030562)<<16|r>>>16)+n<<0))+a[14]-35309556)<<23|t>>>9)+r<<0,t=((t+=((i=(n=((n+=((o=t^r)^(e=((e+=(o^n)+a[1]-1530992060)<<4|e>>>28)+t<<0))+a[4]+1272893353)<<11|n>>>21)+e<<0)^e)^(r=((r+=(i^t)+a[7]-155497632)<<16|r>>>16)+n<<0))+a[10]-1094730640)<<23|t>>>9)+r<<0,t=((t+=((i=(n=((n+=((o=t^r)^(e=((e+=(o^n)+a[13]+681279174)<<4|e>>>28)+t<<0))+a[0]-358537222)<<11|n>>>21)+e<<0)^e)^(r=((r+=(i^t)+a[3]-722521979)<<16|r>>>16)+n<<0))+a[6]+76029189)<<23|t>>>9)+r<<0,t=((t+=((i=(n=((n+=((o=t^r)^(e=((e+=(o^n)+a[9]-640364487)<<4|e>>>28)+t<<0))+a[12]-421815835)<<11|n>>>21)+e<<0)^e)^(r=((r+=(i^t)+a[15]+530742520)<<16|r>>>16)+n<<0))+a[2]-995338651)<<23|t>>>9)+r<<0,t=((t+=((n=((n+=(t^((e=((e+=(r^(t|~n))+a[0]-198630844)<<6|e>>>26)+t<<0)|~r))+a[7]+1126891415)<<10|n>>>22)+e<<0)^((r=((r+=(e^(n|~t))+a[14]-1416354905)<<15|r>>>17)+n<<0)|~e))+a[5]-57434055)<<21|t>>>11)+r<<0,t=((t+=((n=((n+=(t^((e=((e+=(r^(t|~n))+a[12]+1700485571)<<6|e>>>26)+t<<0)|~r))+a[3]-1894986606)<<10|n>>>22)+e<<0)^((r=((r+=(e^(n|~t))+a[10]-1051523)<<15|r>>>17)+n<<0)|~e))+a[1]-2054922799)<<21|t>>>11)+r<<0,t=((t+=((n=((n+=(t^((e=((e+=(r^(t|~n))+a[8]+1873313359)<<6|e>>>26)+t<<0)|~r))+a[15]-30611744)<<10|n>>>22)+e<<0)^((r=((r+=(e^(n|~t))+a[6]-1560198380)<<15|r>>>17)+n<<0)|~e))+a[13]+1309151649)<<21|t>>>11)+r<<0,t=((t+=((n=((n+=(t^((e=((e+=(r^(t|~n))+a[4]-145523070)<<6|e>>>26)+t<<0)|~r))+a[11]-1120210379)<<10|n>>>22)+e<<0)^((r=((r+=(e^(n|~t))+a[2]+718787259)<<15|r>>>17)+n<<0)|~e))+a[9]-343485551)<<21|t>>>11)+r<<0,this.first?(this.h0=e+1732584193<<0,this.h1=t-271733879<<0,this.h2=r-1732584194<<0,this.h3=n+271733878<<0,this.first=!1):(this.h0=this.h0+e<<0,this.h1=this.h1+t<<0,this.h2=this.h2+r<<0,this.h3=this.h3+n<<0)},v.prototype.hex=function(){this.finalize();var e=this.h0,t=this.h1,r=this.h2,n=this.h3;return l[e>>4&15]+l[15&e]+l[e>>12&15]+l[e>>8&15]+l[e>>20&15]+l[e>>16&15]+l[e>>28&15]+l[e>>24&15]+l[t>>4&15]+l[15&t]+l[t>>12&15]+l[t>>8&15]+l[t>>20&15]+l[t>>16&15]+l[t>>28&15]+l[t>>24&15]+l[r>>4&15]+l[15&r]+l[r>>12&15]+l[r>>8&15]+l[r>>20&15]+l[r>>16&15]+l[r>>28&15]+l[r>>24&15]+l[n>>4&15]+l[15&n]+l[n>>12&15]+l[n>>8&15]+l[n>>20&15]+l[n>>16&15]+l[n>>28&15]+l[n>>24&15]},v.prototype.toString=v.prototype.hex,v.prototype.digest=function(e){if("hex"===e)return this.hex();this.finalize();var t=this.h0,r=this.h1,n=this.h2,o=this.h3;return[255&t,t>>8&255,t>>16&255,t>>24&255,255&r,r>>8&255,r>>16&255,r>>24&255,255&n,n>>8&255,n>>16&255,n>>24&255,255&o,o>>8&255,o>>16&255,o>>24&255]},v.prototype.array=v.prototype.digest,v.prototype.arrayBuffer=function(){this.finalize();var e=new ArrayBuffer(16),t=new Uint32Array(e);return t[0]=this.h0,t[1]=this.h1,t[2]=this.h2,t[3]=this.h3,e},v.prototype.buffer=v.prototype.arrayBuffer,v.prototype.base64=function(){for(var e,t,r,n="",o=this.array(),i=0;i<15;)e=o[i++],t=o[i++],r=o[i++],n+=h[e>>>2]+h[63&(e<<4|t>>>4)]+h[63&(t<<2|r>>>6)]+h[63&r];return e=o[i],n+=h[e>>>2]+h[e<<4&63]+"=="};var b=function(){var e=y("hex");e.getCtx=e.create=function(){return new v},e.update=function(t){return e.create().update(t)};for(var t=0;t>>2]|=(r[o>>>2]>>>24-o%4*8&255)<<24-(n+o)%4*8;else if(65535>>2]=r[o>>>2];else t.push.apply(t,r);return this.sigBytes+=e,this},clamp:function(){var t=this.words,r=this.sigBytes;t[r>>>2]&=4294967295<<32-r%4*8,t.length=e.ceil(r/4)},clone:function(){var e=i.clone.call(this);return e.words=this.words.slice(0),e},random:function(t){for(var r=[],n=0;n>>2]>>>24-n%4*8&255;r.push((o>>>4).toString(16)),r.push((15&o).toString(16))}return r.join("")},parse:function(e){for(var t=e.length,r=[],n=0;n>>3]|=parseInt(e.substr(n,2),16)<<24-n%8*4;return new a.init(r,t/2)}},u=s.Latin1={stringify:function(e){var t=e.words;e=e.sigBytes;for(var r=[],n=0;n>>2]>>>24-n%4*8&255));return r.join("")},parse:function(e){for(var t=e.length,r=[],n=0;n>>2]|=(255&e.charCodeAt(n))<<24-n%4*8;return new a.init(r,t)}},l=s.Utf8={stringify:function(e){try{return decodeURIComponent(escape(u.stringify(e)))}catch(e){throw Error("Malformed UTF-8 data")}},parse:function(e){return u.parse(unescape(encodeURIComponent(e)))}},d=n.BufferedBlockAlgorithm=i.extend({reset:function(){this._data=new a.init,this._nDataBytes=0},_append:function(e){"string"==typeof e&&(e=l.parse(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function(t){var r=this._data,n=r.words,o=r.sigBytes,i=this.blockSize,s=o/(4*i);if(t=(s=t?e.ceil(s):e.max((0|s)-this._minBufferSize,0))*i,o=e.min(4*t,o),t){for(var c=0;cu;u++){if(16>u)i[u]=0|e[t+u];else{var l=i[u-3]^i[u-8]^i[u-14]^i[u-16];i[u]=l<<1|l>>>31}l=(n<<5|n>>>27)+c+i[u],l=20>u?l+(1518500249+(o&a|~o&s)):40>u?l+(1859775393+(o^a^s)):60>u?l+((o&a|o&s|a&s)-1894007588):l+((o^a^s)-899497514),c=s,s=a,a=o<<30|o>>>2,o=n,n=l}r[0]=r[0]+n|0,r[1]=r[1]+o|0,r[2]=r[2]+a|0,r[3]=r[3]+s|0,r[4]=r[4]+c|0},_doFinalize:function(){var e=this._data,t=e.words,r=8*this._nDataBytes,n=8*e.sigBytes;return t[n>>>5]|=128<<24-n%32,t[14+(n+64>>>9<<4)]=Math.floor(r/4294967296),t[15+(n+64>>>9<<4)]=r,e.sigBytes=4*t.length,this._process(),this._hash},clone:function(){var e=o.clone.call(this);return e._hash=this._hash.clone(),e}}),t.SHA1=o._createHelper(a),t.HmacSHA1=o._createHmacHelper(a),function(){var e=l,t=e.enc.Utf8;e.algo.HMAC=e.lib.Base.extend({init:function(e,r){e=this._hasher=new e.init,"string"==typeof r&&(r=t.parse(r));var n=e.blockSize,o=4*n;r.sigBytes>o&&(r=e.finalize(r)),r.clamp();for(var i=this._oKey=r.clone(),a=this._iKey=r.clone(),s=i.words,c=a.words,u=0;u>>2]>>>24-i%4*8&255)<<16|(t[i+1>>>2]>>>24-(i+1)%4*8&255)<<8|t[i+2>>>2]>>>24-(i+2)%4*8&255,s=0;s<4&&i+.75*s>>6*(3-s)&63));var c=n.charAt(64);if(c)for(;o.length%4;)o.push(c);return o.join("")},parse:function(e){var t=e.length,r=this._map,n=r.charAt(64);if(n){var o=e.indexOf(n);-1!=o&&(t=o)}for(var i=[],a=0,s=0;s>>6-s%4*2;i[a>>>2]|=(u|l)<<24-a%4*8,a++}return c.create(i,a)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="},"object"===u(e)?e.exports=l:window.CryptoJS=l}).call(this,r(3)(e))},function(e,t,r){var n=r(16).DOMParser,o=function(){this.version="1.3.5";var e={mergeCDATA:!0,normalize:!0,stripElemPrefix:!0},t=new RegExp(/(?!xmlns)^.*:/);new RegExp(/^\s+|\s+$/g);return this.grokType=function(e){return/^\s*$/.test(e)?null:/^(?:true|false)$/i.test(e)?"true"===e.toLowerCase():isFinite(e)?parseFloat(e):e},this.parseString=function(e,t){if(e){var r=this.stringToXML(e);return r.getElementsByTagName("parsererror").length?null:this.parseXML(r,t)}return null},this.parseXML=function(r,n){for(var i in n)e[i]=n[i];var a={},s=0,c="";if(r.childNodes.length)for(var u,l,d,p=0;p=t+r||t?new java.lang.String(e,t,r)+"":e}function g(e,t){e.currentElement?e.currentElement.appendChild(t):e.doc.appendChild(t)}p.prototype.parseFromString=function(e,t){var r=this.options,n=new l,o=r.domBuilder||new f,a=r.errorHandler,s=r.locator,u=r.xmlns||{},p=/\/x?html?$/.test(t),h=p?i.HTML_ENTITIES:i.XML_ENTITIES;s&&o.setDocumentLocator(s),n.errorHandler=function(e,t,r){if(!e){if(t instanceof f)return t;e=t}var n={},o=e instanceof Function;function i(t){var i=e[t];!i&&o&&(i=2==e.length?function(r){e(t,r)}:e),n[t]=i&&function(e){i("[xmldom "+t+"]\t"+e+function(e){if(e)return"\n@"+(e.systemId||"")+"#[line:"+e.lineNumber+",col:"+e.columnNumber+"]"}(r))}||function(){}}return r=r||{},i("warning"),i("error"),i("fatalError"),n}(a,o,s),n.domBuilder=r.domBuilder||o,p&&(u[""]=c.HTML),u.xml=u.xml||c.XML;var m=r.normalizeLineEndings||d;return e&&"string"==typeof e?n.parse(m(e),u,h):n.errorHandler.error("invalid doc source"),o.doc},f.prototype={startDocument:function(){this.doc=(new s).createDocument(null,null,null),this.locator&&(this.doc.documentURI=this.locator.systemId)},startElement:function(e,t,r,n){var o=this.doc,i=o.createElementNS(e,r||t),a=n.length;g(this,i),this.currentElement=i,this.locator&&h(this.locator,i);for(var s=0;s",lt:"<",quot:'"'}),t.HTML_ENTITIES=n({Aacute:"Á",aacute:"á",Abreve:"Ă",abreve:"ă",ac:"∾",acd:"∿",acE:"∾̳",Acirc:"Â",acirc:"â",acute:"´",Acy:"А",acy:"а",AElig:"Æ",aelig:"æ",af:"⁡",Afr:"𝔄",afr:"𝔞",Agrave:"À",agrave:"à",alefsym:"ℵ",aleph:"ℵ",Alpha:"Α",alpha:"α",Amacr:"Ā",amacr:"ā",amalg:"⨿",AMP:"&",amp:"&",And:"⩓",and:"∧",andand:"⩕",andd:"⩜",andslope:"⩘",andv:"⩚",ang:"∠",ange:"⦤",angle:"∠",angmsd:"∡",angmsdaa:"⦨",angmsdab:"⦩",angmsdac:"⦪",angmsdad:"⦫",angmsdae:"⦬",angmsdaf:"⦭",angmsdag:"⦮",angmsdah:"⦯",angrt:"∟",angrtvb:"⊾",angrtvbd:"⦝",angsph:"∢",angst:"Å",angzarr:"⍼",Aogon:"Ą",aogon:"ą",Aopf:"𝔸",aopf:"𝕒",ap:"≈",apacir:"⩯",apE:"⩰",ape:"≊",apid:"≋",apos:"'",ApplyFunction:"⁡",approx:"≈",approxeq:"≊",Aring:"Å",aring:"å",Ascr:"𝒜",ascr:"𝒶",Assign:"≔",ast:"*",asymp:"≈",asympeq:"≍",Atilde:"Ã",atilde:"ã",Auml:"Ä",auml:"ä",awconint:"∳",awint:"⨑",backcong:"≌",backepsilon:"϶",backprime:"‵",backsim:"∽",backsimeq:"⋍",Backslash:"∖",Barv:"⫧",barvee:"⊽",Barwed:"⌆",barwed:"⌅",barwedge:"⌅",bbrk:"⎵",bbrktbrk:"⎶",bcong:"≌",Bcy:"Б",bcy:"б",bdquo:"„",becaus:"∵",Because:"∵",because:"∵",bemptyv:"⦰",bepsi:"϶",bernou:"ℬ",Bernoullis:"ℬ",Beta:"Β",beta:"β",beth:"ℶ",between:"≬",Bfr:"𝔅",bfr:"𝔟",bigcap:"⋂",bigcirc:"◯",bigcup:"⋃",bigodot:"⨀",bigoplus:"⨁",bigotimes:"⨂",bigsqcup:"⨆",bigstar:"★",bigtriangledown:"▽",bigtriangleup:"△",biguplus:"⨄",bigvee:"⋁",bigwedge:"⋀",bkarow:"⤍",blacklozenge:"⧫",blacksquare:"▪",blacktriangle:"▴",blacktriangledown:"▾",blacktriangleleft:"◂",blacktriangleright:"▸",blank:"␣",blk12:"▒",blk14:"░",blk34:"▓",block:"█",bne:"=⃥",bnequiv:"≡⃥",bNot:"⫭",bnot:"⌐",Bopf:"𝔹",bopf:"𝕓",bot:"⊥",bottom:"⊥",bowtie:"⋈",boxbox:"⧉",boxDL:"╗",boxDl:"╖",boxdL:"╕",boxdl:"┐",boxDR:"╔",boxDr:"╓",boxdR:"╒",boxdr:"┌",boxH:"═",boxh:"─",boxHD:"╦",boxHd:"╤",boxhD:"╥",boxhd:"┬",boxHU:"╩",boxHu:"╧",boxhU:"╨",boxhu:"┴",boxminus:"⊟",boxplus:"⊞",boxtimes:"⊠",boxUL:"╝",boxUl:"╜",boxuL:"╛",boxul:"┘",boxUR:"╚",boxUr:"╙",boxuR:"╘",boxur:"└",boxV:"║",boxv:"│",boxVH:"╬",boxVh:"╫",boxvH:"╪",boxvh:"┼",boxVL:"╣",boxVl:"╢",boxvL:"╡",boxvl:"┤",boxVR:"╠",boxVr:"╟",boxvR:"╞",boxvr:"├",bprime:"‵",Breve:"˘",breve:"˘",brvbar:"¦",Bscr:"ℬ",bscr:"𝒷",bsemi:"⁏",bsim:"∽",bsime:"⋍",bsol:"\\",bsolb:"⧅",bsolhsub:"⟈",bull:"•",bullet:"•",bump:"≎",bumpE:"⪮",bumpe:"≏",Bumpeq:"≎",bumpeq:"≏",Cacute:"Ć",cacute:"ć",Cap:"⋒",cap:"∩",capand:"⩄",capbrcup:"⩉",capcap:"⩋",capcup:"⩇",capdot:"⩀",CapitalDifferentialD:"ⅅ",caps:"∩︀",caret:"⁁",caron:"ˇ",Cayleys:"ℭ",ccaps:"⩍",Ccaron:"Č",ccaron:"č",Ccedil:"Ç",ccedil:"ç",Ccirc:"Ĉ",ccirc:"ĉ",Cconint:"∰",ccups:"⩌",ccupssm:"⩐",Cdot:"Ċ",cdot:"ċ",cedil:"¸",Cedilla:"¸",cemptyv:"⦲",cent:"¢",CenterDot:"·",centerdot:"·",Cfr:"ℭ",cfr:"𝔠",CHcy:"Ч",chcy:"ч",check:"✓",checkmark:"✓",Chi:"Χ",chi:"χ",cir:"○",circ:"ˆ",circeq:"≗",circlearrowleft:"↺",circlearrowright:"↻",circledast:"⊛",circledcirc:"⊚",circleddash:"⊝",CircleDot:"⊙",circledR:"®",circledS:"Ⓢ",CircleMinus:"⊖",CirclePlus:"⊕",CircleTimes:"⊗",cirE:"⧃",cire:"≗",cirfnint:"⨐",cirmid:"⫯",cirscir:"⧂",ClockwiseContourIntegral:"∲",CloseCurlyDoubleQuote:"”",CloseCurlyQuote:"’",clubs:"♣",clubsuit:"♣",Colon:"∷",colon:":",Colone:"⩴",colone:"≔",coloneq:"≔",comma:",",commat:"@",comp:"∁",compfn:"∘",complement:"∁",complexes:"ℂ",cong:"≅",congdot:"⩭",Congruent:"≡",Conint:"∯",conint:"∮",ContourIntegral:"∮",Copf:"ℂ",copf:"𝕔",coprod:"∐",Coproduct:"∐",COPY:"©",copy:"©",copysr:"℗",CounterClockwiseContourIntegral:"∳",crarr:"↵",Cross:"⨯",cross:"✗",Cscr:"𝒞",cscr:"𝒸",csub:"⫏",csube:"⫑",csup:"⫐",csupe:"⫒",ctdot:"⋯",cudarrl:"⤸",cudarrr:"⤵",cuepr:"⋞",cuesc:"⋟",cularr:"↶",cularrp:"⤽",Cup:"⋓",cup:"∪",cupbrcap:"⩈",CupCap:"≍",cupcap:"⩆",cupcup:"⩊",cupdot:"⊍",cupor:"⩅",cups:"∪︀",curarr:"↷",curarrm:"⤼",curlyeqprec:"⋞",curlyeqsucc:"⋟",curlyvee:"⋎",curlywedge:"⋏",curren:"¤",curvearrowleft:"↶",curvearrowright:"↷",cuvee:"⋎",cuwed:"⋏",cwconint:"∲",cwint:"∱",cylcty:"⌭",Dagger:"‡",dagger:"†",daleth:"ℸ",Darr:"↡",dArr:"⇓",darr:"↓",dash:"‐",Dashv:"⫤",dashv:"⊣",dbkarow:"⤏",dblac:"˝",Dcaron:"Ď",dcaron:"ď",Dcy:"Д",dcy:"д",DD:"ⅅ",dd:"ⅆ",ddagger:"‡",ddarr:"⇊",DDotrahd:"⤑",ddotseq:"⩷",deg:"°",Del:"∇",Delta:"Δ",delta:"δ",demptyv:"⦱",dfisht:"⥿",Dfr:"𝔇",dfr:"𝔡",dHar:"⥥",dharl:"⇃",dharr:"⇂",DiacriticalAcute:"´",DiacriticalDot:"˙",DiacriticalDoubleAcute:"˝",DiacriticalGrave:"`",DiacriticalTilde:"˜",diam:"⋄",Diamond:"⋄",diamond:"⋄",diamondsuit:"♦",diams:"♦",die:"¨",DifferentialD:"ⅆ",digamma:"ϝ",disin:"⋲",div:"÷",divide:"÷",divideontimes:"⋇",divonx:"⋇",DJcy:"Ђ",djcy:"ђ",dlcorn:"⌞",dlcrop:"⌍",dollar:"$",Dopf:"𝔻",dopf:"𝕕",Dot:"¨",dot:"˙",DotDot:"⃜",doteq:"≐",doteqdot:"≑",DotEqual:"≐",dotminus:"∸",dotplus:"∔",dotsquare:"⊡",doublebarwedge:"⌆",DoubleContourIntegral:"∯",DoubleDot:"¨",DoubleDownArrow:"⇓",DoubleLeftArrow:"⇐",DoubleLeftRightArrow:"⇔",DoubleLeftTee:"⫤",DoubleLongLeftArrow:"⟸",DoubleLongLeftRightArrow:"⟺",DoubleLongRightArrow:"⟹",DoubleRightArrow:"⇒",DoubleRightTee:"⊨",DoubleUpArrow:"⇑",DoubleUpDownArrow:"⇕",DoubleVerticalBar:"∥",DownArrow:"↓",Downarrow:"⇓",downarrow:"↓",DownArrowBar:"⤓",DownArrowUpArrow:"⇵",DownBreve:"̑",downdownarrows:"⇊",downharpoonleft:"⇃",downharpoonright:"⇂",DownLeftRightVector:"⥐",DownLeftTeeVector:"⥞",DownLeftVector:"↽",DownLeftVectorBar:"⥖",DownRightTeeVector:"⥟",DownRightVector:"⇁",DownRightVectorBar:"⥗",DownTee:"⊤",DownTeeArrow:"↧",drbkarow:"⤐",drcorn:"⌟",drcrop:"⌌",Dscr:"𝒟",dscr:"𝒹",DScy:"Ѕ",dscy:"ѕ",dsol:"⧶",Dstrok:"Đ",dstrok:"đ",dtdot:"⋱",dtri:"▿",dtrif:"▾",duarr:"⇵",duhar:"⥯",dwangle:"⦦",DZcy:"Џ",dzcy:"џ",dzigrarr:"⟿",Eacute:"É",eacute:"é",easter:"⩮",Ecaron:"Ě",ecaron:"ě",ecir:"≖",Ecirc:"Ê",ecirc:"ê",ecolon:"≕",Ecy:"Э",ecy:"э",eDDot:"⩷",Edot:"Ė",eDot:"≑",edot:"ė",ee:"ⅇ",efDot:"≒",Efr:"𝔈",efr:"𝔢",eg:"⪚",Egrave:"È",egrave:"è",egs:"⪖",egsdot:"⪘",el:"⪙",Element:"∈",elinters:"⏧",ell:"ℓ",els:"⪕",elsdot:"⪗",Emacr:"Ē",emacr:"ē",empty:"∅",emptyset:"∅",EmptySmallSquare:"◻",emptyv:"∅",EmptyVerySmallSquare:"▫",emsp:" ",emsp13:" ",emsp14:" ",ENG:"Ŋ",eng:"ŋ",ensp:" ",Eogon:"Ę",eogon:"ę",Eopf:"𝔼",eopf:"𝕖",epar:"⋕",eparsl:"⧣",eplus:"⩱",epsi:"ε",Epsilon:"Ε",epsilon:"ε",epsiv:"ϵ",eqcirc:"≖",eqcolon:"≕",eqsim:"≂",eqslantgtr:"⪖",eqslantless:"⪕",Equal:"⩵",equals:"=",EqualTilde:"≂",equest:"≟",Equilibrium:"⇌",equiv:"≡",equivDD:"⩸",eqvparsl:"⧥",erarr:"⥱",erDot:"≓",Escr:"ℰ",escr:"ℯ",esdot:"≐",Esim:"⩳",esim:"≂",Eta:"Η",eta:"η",ETH:"Ð",eth:"ð",Euml:"Ë",euml:"ë",euro:"€",excl:"!",exist:"∃",Exists:"∃",expectation:"ℰ",ExponentialE:"ⅇ",exponentiale:"ⅇ",fallingdotseq:"≒",Fcy:"Ф",fcy:"ф",female:"♀",ffilig:"ffi",fflig:"ff",ffllig:"ffl",Ffr:"𝔉",ffr:"𝔣",filig:"fi",FilledSmallSquare:"◼",FilledVerySmallSquare:"▪",fjlig:"fj",flat:"♭",fllig:"fl",fltns:"▱",fnof:"ƒ",Fopf:"𝔽",fopf:"𝕗",ForAll:"∀",forall:"∀",fork:"⋔",forkv:"⫙",Fouriertrf:"ℱ",fpartint:"⨍",frac12:"½",frac13:"⅓",frac14:"¼",frac15:"⅕",frac16:"⅙",frac18:"⅛",frac23:"⅔",frac25:"⅖",frac34:"¾",frac35:"⅗",frac38:"⅜",frac45:"⅘",frac56:"⅚",frac58:"⅝",frac78:"⅞",frasl:"⁄",frown:"⌢",Fscr:"ℱ",fscr:"𝒻",gacute:"ǵ",Gamma:"Γ",gamma:"γ",Gammad:"Ϝ",gammad:"ϝ",gap:"⪆",Gbreve:"Ğ",gbreve:"ğ",Gcedil:"Ģ",Gcirc:"Ĝ",gcirc:"ĝ",Gcy:"Г",gcy:"г",Gdot:"Ġ",gdot:"ġ",gE:"≧",ge:"≥",gEl:"⪌",gel:"⋛",geq:"≥",geqq:"≧",geqslant:"⩾",ges:"⩾",gescc:"⪩",gesdot:"⪀",gesdoto:"⪂",gesdotol:"⪄",gesl:"⋛︀",gesles:"⪔",Gfr:"𝔊",gfr:"𝔤",Gg:"⋙",gg:"≫",ggg:"⋙",gimel:"ℷ",GJcy:"Ѓ",gjcy:"ѓ",gl:"≷",gla:"⪥",glE:"⪒",glj:"⪤",gnap:"⪊",gnapprox:"⪊",gnE:"≩",gne:"⪈",gneq:"⪈",gneqq:"≩",gnsim:"⋧",Gopf:"𝔾",gopf:"𝕘",grave:"`",GreaterEqual:"≥",GreaterEqualLess:"⋛",GreaterFullEqual:"≧",GreaterGreater:"⪢",GreaterLess:"≷",GreaterSlantEqual:"⩾",GreaterTilde:"≳",Gscr:"𝒢",gscr:"ℊ",gsim:"≳",gsime:"⪎",gsiml:"⪐",Gt:"≫",GT:">",gt:">",gtcc:"⪧",gtcir:"⩺",gtdot:"⋗",gtlPar:"⦕",gtquest:"⩼",gtrapprox:"⪆",gtrarr:"⥸",gtrdot:"⋗",gtreqless:"⋛",gtreqqless:"⪌",gtrless:"≷",gtrsim:"≳",gvertneqq:"≩︀",gvnE:"≩︀",Hacek:"ˇ",hairsp:" ",half:"½",hamilt:"ℋ",HARDcy:"Ъ",hardcy:"ъ",hArr:"⇔",harr:"↔",harrcir:"⥈",harrw:"↭",Hat:"^",hbar:"ℏ",Hcirc:"Ĥ",hcirc:"ĥ",hearts:"♥",heartsuit:"♥",hellip:"…",hercon:"⊹",Hfr:"ℌ",hfr:"𝔥",HilbertSpace:"ℋ",hksearow:"⤥",hkswarow:"⤦",hoarr:"⇿",homtht:"∻",hookleftarrow:"↩",hookrightarrow:"↪",Hopf:"ℍ",hopf:"𝕙",horbar:"―",HorizontalLine:"─",Hscr:"ℋ",hscr:"𝒽",hslash:"ℏ",Hstrok:"Ħ",hstrok:"ħ",HumpDownHump:"≎",HumpEqual:"≏",hybull:"⁃",hyphen:"‐",Iacute:"Í",iacute:"í",ic:"⁣",Icirc:"Î",icirc:"î",Icy:"И",icy:"и",Idot:"İ",IEcy:"Е",iecy:"е",iexcl:"¡",iff:"⇔",Ifr:"ℑ",ifr:"𝔦",Igrave:"Ì",igrave:"ì",ii:"ⅈ",iiiint:"⨌",iiint:"∭",iinfin:"⧜",iiota:"℩",IJlig:"IJ",ijlig:"ij",Im:"ℑ",Imacr:"Ī",imacr:"ī",image:"ℑ",ImaginaryI:"ⅈ",imagline:"ℐ",imagpart:"ℑ",imath:"ı",imof:"⊷",imped:"Ƶ",Implies:"⇒",in:"∈",incare:"℅",infin:"∞",infintie:"⧝",inodot:"ı",Int:"∬",int:"∫",intcal:"⊺",integers:"ℤ",Integral:"∫",intercal:"⊺",Intersection:"⋂",intlarhk:"⨗",intprod:"⨼",InvisibleComma:"⁣",InvisibleTimes:"⁢",IOcy:"Ё",iocy:"ё",Iogon:"Į",iogon:"į",Iopf:"𝕀",iopf:"𝕚",Iota:"Ι",iota:"ι",iprod:"⨼",iquest:"¿",Iscr:"ℐ",iscr:"𝒾",isin:"∈",isindot:"⋵",isinE:"⋹",isins:"⋴",isinsv:"⋳",isinv:"∈",it:"⁢",Itilde:"Ĩ",itilde:"ĩ",Iukcy:"І",iukcy:"і",Iuml:"Ï",iuml:"ï",Jcirc:"Ĵ",jcirc:"ĵ",Jcy:"Й",jcy:"й",Jfr:"𝔍",jfr:"𝔧",jmath:"ȷ",Jopf:"𝕁",jopf:"𝕛",Jscr:"𝒥",jscr:"𝒿",Jsercy:"Ј",jsercy:"ј",Jukcy:"Є",jukcy:"є",Kappa:"Κ",kappa:"κ",kappav:"ϰ",Kcedil:"Ķ",kcedil:"ķ",Kcy:"К",kcy:"к",Kfr:"𝔎",kfr:"𝔨",kgreen:"ĸ",KHcy:"Х",khcy:"х",KJcy:"Ќ",kjcy:"ќ",Kopf:"𝕂",kopf:"𝕜",Kscr:"𝒦",kscr:"𝓀",lAarr:"⇚",Lacute:"Ĺ",lacute:"ĺ",laemptyv:"⦴",lagran:"ℒ",Lambda:"Λ",lambda:"λ",Lang:"⟪",lang:"⟨",langd:"⦑",langle:"⟨",lap:"⪅",Laplacetrf:"ℒ",laquo:"«",Larr:"↞",lArr:"⇐",larr:"←",larrb:"⇤",larrbfs:"⤟",larrfs:"⤝",larrhk:"↩",larrlp:"↫",larrpl:"⤹",larrsim:"⥳",larrtl:"↢",lat:"⪫",lAtail:"⤛",latail:"⤙",late:"⪭",lates:"⪭︀",lBarr:"⤎",lbarr:"⤌",lbbrk:"❲",lbrace:"{",lbrack:"[",lbrke:"⦋",lbrksld:"⦏",lbrkslu:"⦍",Lcaron:"Ľ",lcaron:"ľ",Lcedil:"Ļ",lcedil:"ļ",lceil:"⌈",lcub:"{",Lcy:"Л",lcy:"л",ldca:"⤶",ldquo:"“",ldquor:"„",ldrdhar:"⥧",ldrushar:"⥋",ldsh:"↲",lE:"≦",le:"≤",LeftAngleBracket:"⟨",LeftArrow:"←",Leftarrow:"⇐",leftarrow:"←",LeftArrowBar:"⇤",LeftArrowRightArrow:"⇆",leftarrowtail:"↢",LeftCeiling:"⌈",LeftDoubleBracket:"⟦",LeftDownTeeVector:"⥡",LeftDownVector:"⇃",LeftDownVectorBar:"⥙",LeftFloor:"⌊",leftharpoondown:"↽",leftharpoonup:"↼",leftleftarrows:"⇇",LeftRightArrow:"↔",Leftrightarrow:"⇔",leftrightarrow:"↔",leftrightarrows:"⇆",leftrightharpoons:"⇋",leftrightsquigarrow:"↭",LeftRightVector:"⥎",LeftTee:"⊣",LeftTeeArrow:"↤",LeftTeeVector:"⥚",leftthreetimes:"⋋",LeftTriangle:"⊲",LeftTriangleBar:"⧏",LeftTriangleEqual:"⊴",LeftUpDownVector:"⥑",LeftUpTeeVector:"⥠",LeftUpVector:"↿",LeftUpVectorBar:"⥘",LeftVector:"↼",LeftVectorBar:"⥒",lEg:"⪋",leg:"⋚",leq:"≤",leqq:"≦",leqslant:"⩽",les:"⩽",lescc:"⪨",lesdot:"⩿",lesdoto:"⪁",lesdotor:"⪃",lesg:"⋚︀",lesges:"⪓",lessapprox:"⪅",lessdot:"⋖",lesseqgtr:"⋚",lesseqqgtr:"⪋",LessEqualGreater:"⋚",LessFullEqual:"≦",LessGreater:"≶",lessgtr:"≶",LessLess:"⪡",lesssim:"≲",LessSlantEqual:"⩽",LessTilde:"≲",lfisht:"⥼",lfloor:"⌊",Lfr:"𝔏",lfr:"𝔩",lg:"≶",lgE:"⪑",lHar:"⥢",lhard:"↽",lharu:"↼",lharul:"⥪",lhblk:"▄",LJcy:"Љ",ljcy:"љ",Ll:"⋘",ll:"≪",llarr:"⇇",llcorner:"⌞",Lleftarrow:"⇚",llhard:"⥫",lltri:"◺",Lmidot:"Ŀ",lmidot:"ŀ",lmoust:"⎰",lmoustache:"⎰",lnap:"⪉",lnapprox:"⪉",lnE:"≨",lne:"⪇",lneq:"⪇",lneqq:"≨",lnsim:"⋦",loang:"⟬",loarr:"⇽",lobrk:"⟦",LongLeftArrow:"⟵",Longleftarrow:"⟸",longleftarrow:"⟵",LongLeftRightArrow:"⟷",Longleftrightarrow:"⟺",longleftrightarrow:"⟷",longmapsto:"⟼",LongRightArrow:"⟶",Longrightarrow:"⟹",longrightarrow:"⟶",looparrowleft:"↫",looparrowright:"↬",lopar:"⦅",Lopf:"𝕃",lopf:"𝕝",loplus:"⨭",lotimes:"⨴",lowast:"∗",lowbar:"_",LowerLeftArrow:"↙",LowerRightArrow:"↘",loz:"◊",lozenge:"◊",lozf:"⧫",lpar:"(",lparlt:"⦓",lrarr:"⇆",lrcorner:"⌟",lrhar:"⇋",lrhard:"⥭",lrm:"‎",lrtri:"⊿",lsaquo:"‹",Lscr:"ℒ",lscr:"𝓁",Lsh:"↰",lsh:"↰",lsim:"≲",lsime:"⪍",lsimg:"⪏",lsqb:"[",lsquo:"‘",lsquor:"‚",Lstrok:"Ł",lstrok:"ł",Lt:"≪",LT:"<",lt:"<",ltcc:"⪦",ltcir:"⩹",ltdot:"⋖",lthree:"⋋",ltimes:"⋉",ltlarr:"⥶",ltquest:"⩻",ltri:"◃",ltrie:"⊴",ltrif:"◂",ltrPar:"⦖",lurdshar:"⥊",luruhar:"⥦",lvertneqq:"≨︀",lvnE:"≨︀",macr:"¯",male:"♂",malt:"✠",maltese:"✠",Map:"⤅",map:"↦",mapsto:"↦",mapstodown:"↧",mapstoleft:"↤",mapstoup:"↥",marker:"▮",mcomma:"⨩",Mcy:"М",mcy:"м",mdash:"—",mDDot:"∺",measuredangle:"∡",MediumSpace:" ",Mellintrf:"ℳ",Mfr:"𝔐",mfr:"𝔪",mho:"℧",micro:"µ",mid:"∣",midast:"*",midcir:"⫰",middot:"·",minus:"−",minusb:"⊟",minusd:"∸",minusdu:"⨪",MinusPlus:"∓",mlcp:"⫛",mldr:"…",mnplus:"∓",models:"⊧",Mopf:"𝕄",mopf:"𝕞",mp:"∓",Mscr:"ℳ",mscr:"𝓂",mstpos:"∾",Mu:"Μ",mu:"μ",multimap:"⊸",mumap:"⊸",nabla:"∇",Nacute:"Ń",nacute:"ń",nang:"∠⃒",nap:"≉",napE:"⩰̸",napid:"≋̸",napos:"ʼn",napprox:"≉",natur:"♮",natural:"♮",naturals:"ℕ",nbsp:" ",nbump:"≎̸",nbumpe:"≏̸",ncap:"⩃",Ncaron:"Ň",ncaron:"ň",Ncedil:"Ņ",ncedil:"ņ",ncong:"≇",ncongdot:"⩭̸",ncup:"⩂",Ncy:"Н",ncy:"н",ndash:"–",ne:"≠",nearhk:"⤤",neArr:"⇗",nearr:"↗",nearrow:"↗",nedot:"≐̸",NegativeMediumSpace:"​",NegativeThickSpace:"​",NegativeThinSpace:"​",NegativeVeryThinSpace:"​",nequiv:"≢",nesear:"⤨",nesim:"≂̸",NestedGreaterGreater:"≫",NestedLessLess:"≪",NewLine:"\n",nexist:"∄",nexists:"∄",Nfr:"𝔑",nfr:"𝔫",ngE:"≧̸",nge:"≱",ngeq:"≱",ngeqq:"≧̸",ngeqslant:"⩾̸",nges:"⩾̸",nGg:"⋙̸",ngsim:"≵",nGt:"≫⃒",ngt:"≯",ngtr:"≯",nGtv:"≫̸",nhArr:"⇎",nharr:"↮",nhpar:"⫲",ni:"∋",nis:"⋼",nisd:"⋺",niv:"∋",NJcy:"Њ",njcy:"њ",nlArr:"⇍",nlarr:"↚",nldr:"‥",nlE:"≦̸",nle:"≰",nLeftarrow:"⇍",nleftarrow:"↚",nLeftrightarrow:"⇎",nleftrightarrow:"↮",nleq:"≰",nleqq:"≦̸",nleqslant:"⩽̸",nles:"⩽̸",nless:"≮",nLl:"⋘̸",nlsim:"≴",nLt:"≪⃒",nlt:"≮",nltri:"⋪",nltrie:"⋬",nLtv:"≪̸",nmid:"∤",NoBreak:"⁠",NonBreakingSpace:" ",Nopf:"ℕ",nopf:"𝕟",Not:"⫬",not:"¬",NotCongruent:"≢",NotCupCap:"≭",NotDoubleVerticalBar:"∦",NotElement:"∉",NotEqual:"≠",NotEqualTilde:"≂̸",NotExists:"∄",NotGreater:"≯",NotGreaterEqual:"≱",NotGreaterFullEqual:"≧̸",NotGreaterGreater:"≫̸",NotGreaterLess:"≹",NotGreaterSlantEqual:"⩾̸",NotGreaterTilde:"≵",NotHumpDownHump:"≎̸",NotHumpEqual:"≏̸",notin:"∉",notindot:"⋵̸",notinE:"⋹̸",notinva:"∉",notinvb:"⋷",notinvc:"⋶",NotLeftTriangle:"⋪",NotLeftTriangleBar:"⧏̸",NotLeftTriangleEqual:"⋬",NotLess:"≮",NotLessEqual:"≰",NotLessGreater:"≸",NotLessLess:"≪̸",NotLessSlantEqual:"⩽̸",NotLessTilde:"≴",NotNestedGreaterGreater:"⪢̸",NotNestedLessLess:"⪡̸",notni:"∌",notniva:"∌",notnivb:"⋾",notnivc:"⋽",NotPrecedes:"⊀",NotPrecedesEqual:"⪯̸",NotPrecedesSlantEqual:"⋠",NotReverseElement:"∌",NotRightTriangle:"⋫",NotRightTriangleBar:"⧐̸",NotRightTriangleEqual:"⋭",NotSquareSubset:"⊏̸",NotSquareSubsetEqual:"⋢",NotSquareSuperset:"⊐̸",NotSquareSupersetEqual:"⋣",NotSubset:"⊂⃒",NotSubsetEqual:"⊈",NotSucceeds:"⊁",NotSucceedsEqual:"⪰̸",NotSucceedsSlantEqual:"⋡",NotSucceedsTilde:"≿̸",NotSuperset:"⊃⃒",NotSupersetEqual:"⊉",NotTilde:"≁",NotTildeEqual:"≄",NotTildeFullEqual:"≇",NotTildeTilde:"≉",NotVerticalBar:"∤",npar:"∦",nparallel:"∦",nparsl:"⫽⃥",npart:"∂̸",npolint:"⨔",npr:"⊀",nprcue:"⋠",npre:"⪯̸",nprec:"⊀",npreceq:"⪯̸",nrArr:"⇏",nrarr:"↛",nrarrc:"⤳̸",nrarrw:"↝̸",nRightarrow:"⇏",nrightarrow:"↛",nrtri:"⋫",nrtrie:"⋭",nsc:"⊁",nsccue:"⋡",nsce:"⪰̸",Nscr:"𝒩",nscr:"𝓃",nshortmid:"∤",nshortparallel:"∦",nsim:"≁",nsime:"≄",nsimeq:"≄",nsmid:"∤",nspar:"∦",nsqsube:"⋢",nsqsupe:"⋣",nsub:"⊄",nsubE:"⫅̸",nsube:"⊈",nsubset:"⊂⃒",nsubseteq:"⊈",nsubseteqq:"⫅̸",nsucc:"⊁",nsucceq:"⪰̸",nsup:"⊅",nsupE:"⫆̸",nsupe:"⊉",nsupset:"⊃⃒",nsupseteq:"⊉",nsupseteqq:"⫆̸",ntgl:"≹",Ntilde:"Ñ",ntilde:"ñ",ntlg:"≸",ntriangleleft:"⋪",ntrianglelefteq:"⋬",ntriangleright:"⋫",ntrianglerighteq:"⋭",Nu:"Ν",nu:"ν",num:"#",numero:"№",numsp:" ",nvap:"≍⃒",nVDash:"⊯",nVdash:"⊮",nvDash:"⊭",nvdash:"⊬",nvge:"≥⃒",nvgt:">⃒",nvHarr:"⤄",nvinfin:"⧞",nvlArr:"⤂",nvle:"≤⃒",nvlt:"<⃒",nvltrie:"⊴⃒",nvrArr:"⤃",nvrtrie:"⊵⃒",nvsim:"∼⃒",nwarhk:"⤣",nwArr:"⇖",nwarr:"↖",nwarrow:"↖",nwnear:"⤧",Oacute:"Ó",oacute:"ó",oast:"⊛",ocir:"⊚",Ocirc:"Ô",ocirc:"ô",Ocy:"О",ocy:"о",odash:"⊝",Odblac:"Ő",odblac:"ő",odiv:"⨸",odot:"⊙",odsold:"⦼",OElig:"Œ",oelig:"œ",ofcir:"⦿",Ofr:"𝔒",ofr:"𝔬",ogon:"˛",Ograve:"Ò",ograve:"ò",ogt:"⧁",ohbar:"⦵",ohm:"Ω",oint:"∮",olarr:"↺",olcir:"⦾",olcross:"⦻",oline:"‾",olt:"⧀",Omacr:"Ō",omacr:"ō",Omega:"Ω",omega:"ω",Omicron:"Ο",omicron:"ο",omid:"⦶",ominus:"⊖",Oopf:"𝕆",oopf:"𝕠",opar:"⦷",OpenCurlyDoubleQuote:"“",OpenCurlyQuote:"‘",operp:"⦹",oplus:"⊕",Or:"⩔",or:"∨",orarr:"↻",ord:"⩝",order:"ℴ",orderof:"ℴ",ordf:"ª",ordm:"º",origof:"⊶",oror:"⩖",orslope:"⩗",orv:"⩛",oS:"Ⓢ",Oscr:"𝒪",oscr:"ℴ",Oslash:"Ø",oslash:"ø",osol:"⊘",Otilde:"Õ",otilde:"õ",Otimes:"⨷",otimes:"⊗",otimesas:"⨶",Ouml:"Ö",ouml:"ö",ovbar:"⌽",OverBar:"‾",OverBrace:"⏞",OverBracket:"⎴",OverParenthesis:"⏜",par:"∥",para:"¶",parallel:"∥",parsim:"⫳",parsl:"⫽",part:"∂",PartialD:"∂",Pcy:"П",pcy:"п",percnt:"%",period:".",permil:"‰",perp:"⊥",pertenk:"‱",Pfr:"𝔓",pfr:"𝔭",Phi:"Φ",phi:"φ",phiv:"ϕ",phmmat:"ℳ",phone:"☎",Pi:"Π",pi:"π",pitchfork:"⋔",piv:"ϖ",planck:"ℏ",planckh:"ℎ",plankv:"ℏ",plus:"+",plusacir:"⨣",plusb:"⊞",pluscir:"⨢",plusdo:"∔",plusdu:"⨥",pluse:"⩲",PlusMinus:"±",plusmn:"±",plussim:"⨦",plustwo:"⨧",pm:"±",Poincareplane:"ℌ",pointint:"⨕",Popf:"ℙ",popf:"𝕡",pound:"£",Pr:"⪻",pr:"≺",prap:"⪷",prcue:"≼",prE:"⪳",pre:"⪯",prec:"≺",precapprox:"⪷",preccurlyeq:"≼",Precedes:"≺",PrecedesEqual:"⪯",PrecedesSlantEqual:"≼",PrecedesTilde:"≾",preceq:"⪯",precnapprox:"⪹",precneqq:"⪵",precnsim:"⋨",precsim:"≾",Prime:"″",prime:"′",primes:"ℙ",prnap:"⪹",prnE:"⪵",prnsim:"⋨",prod:"∏",Product:"∏",profalar:"⌮",profline:"⌒",profsurf:"⌓",prop:"∝",Proportion:"∷",Proportional:"∝",propto:"∝",prsim:"≾",prurel:"⊰",Pscr:"𝒫",pscr:"𝓅",Psi:"Ψ",psi:"ψ",puncsp:" ",Qfr:"𝔔",qfr:"𝔮",qint:"⨌",Qopf:"ℚ",qopf:"𝕢",qprime:"⁗",Qscr:"𝒬",qscr:"𝓆",quaternions:"ℍ",quatint:"⨖",quest:"?",questeq:"≟",QUOT:'"',quot:'"',rAarr:"⇛",race:"∽̱",Racute:"Ŕ",racute:"ŕ",radic:"√",raemptyv:"⦳",Rang:"⟫",rang:"⟩",rangd:"⦒",range:"⦥",rangle:"⟩",raquo:"»",Rarr:"↠",rArr:"⇒",rarr:"→",rarrap:"⥵",rarrb:"⇥",rarrbfs:"⤠",rarrc:"⤳",rarrfs:"⤞",rarrhk:"↪",rarrlp:"↬",rarrpl:"⥅",rarrsim:"⥴",Rarrtl:"⤖",rarrtl:"↣",rarrw:"↝",rAtail:"⤜",ratail:"⤚",ratio:"∶",rationals:"ℚ",RBarr:"⤐",rBarr:"⤏",rbarr:"⤍",rbbrk:"❳",rbrace:"}",rbrack:"]",rbrke:"⦌",rbrksld:"⦎",rbrkslu:"⦐",Rcaron:"Ř",rcaron:"ř",Rcedil:"Ŗ",rcedil:"ŗ",rceil:"⌉",rcub:"}",Rcy:"Р",rcy:"р",rdca:"⤷",rdldhar:"⥩",rdquo:"”",rdquor:"”",rdsh:"↳",Re:"ℜ",real:"ℜ",realine:"ℛ",realpart:"ℜ",reals:"ℝ",rect:"▭",REG:"®",reg:"®",ReverseElement:"∋",ReverseEquilibrium:"⇋",ReverseUpEquilibrium:"⥯",rfisht:"⥽",rfloor:"⌋",Rfr:"ℜ",rfr:"𝔯",rHar:"⥤",rhard:"⇁",rharu:"⇀",rharul:"⥬",Rho:"Ρ",rho:"ρ",rhov:"ϱ",RightAngleBracket:"⟩",RightArrow:"→",Rightarrow:"⇒",rightarrow:"→",RightArrowBar:"⇥",RightArrowLeftArrow:"⇄",rightarrowtail:"↣",RightCeiling:"⌉",RightDoubleBracket:"⟧",RightDownTeeVector:"⥝",RightDownVector:"⇂",RightDownVectorBar:"⥕",RightFloor:"⌋",rightharpoondown:"⇁",rightharpoonup:"⇀",rightleftarrows:"⇄",rightleftharpoons:"⇌",rightrightarrows:"⇉",rightsquigarrow:"↝",RightTee:"⊢",RightTeeArrow:"↦",RightTeeVector:"⥛",rightthreetimes:"⋌",RightTriangle:"⊳",RightTriangleBar:"⧐",RightTriangleEqual:"⊵",RightUpDownVector:"⥏",RightUpTeeVector:"⥜",RightUpVector:"↾",RightUpVectorBar:"⥔",RightVector:"⇀",RightVectorBar:"⥓",ring:"˚",risingdotseq:"≓",rlarr:"⇄",rlhar:"⇌",rlm:"‏",rmoust:"⎱",rmoustache:"⎱",rnmid:"⫮",roang:"⟭",roarr:"⇾",robrk:"⟧",ropar:"⦆",Ropf:"ℝ",ropf:"𝕣",roplus:"⨮",rotimes:"⨵",RoundImplies:"⥰",rpar:")",rpargt:"⦔",rppolint:"⨒",rrarr:"⇉",Rrightarrow:"⇛",rsaquo:"›",Rscr:"ℛ",rscr:"𝓇",Rsh:"↱",rsh:"↱",rsqb:"]",rsquo:"’",rsquor:"’",rthree:"⋌",rtimes:"⋊",rtri:"▹",rtrie:"⊵",rtrif:"▸",rtriltri:"⧎",RuleDelayed:"⧴",ruluhar:"⥨",rx:"℞",Sacute:"Ś",sacute:"ś",sbquo:"‚",Sc:"⪼",sc:"≻",scap:"⪸",Scaron:"Š",scaron:"š",sccue:"≽",scE:"⪴",sce:"⪰",Scedil:"Ş",scedil:"ş",Scirc:"Ŝ",scirc:"ŝ",scnap:"⪺",scnE:"⪶",scnsim:"⋩",scpolint:"⨓",scsim:"≿",Scy:"С",scy:"с",sdot:"⋅",sdotb:"⊡",sdote:"⩦",searhk:"⤥",seArr:"⇘",searr:"↘",searrow:"↘",sect:"§",semi:";",seswar:"⤩",setminus:"∖",setmn:"∖",sext:"✶",Sfr:"𝔖",sfr:"𝔰",sfrown:"⌢",sharp:"♯",SHCHcy:"Щ",shchcy:"щ",SHcy:"Ш",shcy:"ш",ShortDownArrow:"↓",ShortLeftArrow:"←",shortmid:"∣",shortparallel:"∥",ShortRightArrow:"→",ShortUpArrow:"↑",shy:"­",Sigma:"Σ",sigma:"σ",sigmaf:"ς",sigmav:"ς",sim:"∼",simdot:"⩪",sime:"≃",simeq:"≃",simg:"⪞",simgE:"⪠",siml:"⪝",simlE:"⪟",simne:"≆",simplus:"⨤",simrarr:"⥲",slarr:"←",SmallCircle:"∘",smallsetminus:"∖",smashp:"⨳",smeparsl:"⧤",smid:"∣",smile:"⌣",smt:"⪪",smte:"⪬",smtes:"⪬︀",SOFTcy:"Ь",softcy:"ь",sol:"/",solb:"⧄",solbar:"⌿",Sopf:"𝕊",sopf:"𝕤",spades:"♠",spadesuit:"♠",spar:"∥",sqcap:"⊓",sqcaps:"⊓︀",sqcup:"⊔",sqcups:"⊔︀",Sqrt:"√",sqsub:"⊏",sqsube:"⊑",sqsubset:"⊏",sqsubseteq:"⊑",sqsup:"⊐",sqsupe:"⊒",sqsupset:"⊐",sqsupseteq:"⊒",squ:"□",Square:"□",square:"□",SquareIntersection:"⊓",SquareSubset:"⊏",SquareSubsetEqual:"⊑",SquareSuperset:"⊐",SquareSupersetEqual:"⊒",SquareUnion:"⊔",squarf:"▪",squf:"▪",srarr:"→",Sscr:"𝒮",sscr:"𝓈",ssetmn:"∖",ssmile:"⌣",sstarf:"⋆",Star:"⋆",star:"☆",starf:"★",straightepsilon:"ϵ",straightphi:"ϕ",strns:"¯",Sub:"⋐",sub:"⊂",subdot:"⪽",subE:"⫅",sube:"⊆",subedot:"⫃",submult:"⫁",subnE:"⫋",subne:"⊊",subplus:"⪿",subrarr:"⥹",Subset:"⋐",subset:"⊂",subseteq:"⊆",subseteqq:"⫅",SubsetEqual:"⊆",subsetneq:"⊊",subsetneqq:"⫋",subsim:"⫇",subsub:"⫕",subsup:"⫓",succ:"≻",succapprox:"⪸",succcurlyeq:"≽",Succeeds:"≻",SucceedsEqual:"⪰",SucceedsSlantEqual:"≽",SucceedsTilde:"≿",succeq:"⪰",succnapprox:"⪺",succneqq:"⪶",succnsim:"⋩",succsim:"≿",SuchThat:"∋",Sum:"∑",sum:"∑",sung:"♪",Sup:"⋑",sup:"⊃",sup1:"¹",sup2:"²",sup3:"³",supdot:"⪾",supdsub:"⫘",supE:"⫆",supe:"⊇",supedot:"⫄",Superset:"⊃",SupersetEqual:"⊇",suphsol:"⟉",suphsub:"⫗",suplarr:"⥻",supmult:"⫂",supnE:"⫌",supne:"⊋",supplus:"⫀",Supset:"⋑",supset:"⊃",supseteq:"⊇",supseteqq:"⫆",supsetneq:"⊋",supsetneqq:"⫌",supsim:"⫈",supsub:"⫔",supsup:"⫖",swarhk:"⤦",swArr:"⇙",swarr:"↙",swarrow:"↙",swnwar:"⤪",szlig:"ß",Tab:"\t",target:"⌖",Tau:"Τ",tau:"τ",tbrk:"⎴",Tcaron:"Ť",tcaron:"ť",Tcedil:"Ţ",tcedil:"ţ",Tcy:"Т",tcy:"т",tdot:"⃛",telrec:"⌕",Tfr:"𝔗",tfr:"𝔱",there4:"∴",Therefore:"∴",therefore:"∴",Theta:"Θ",theta:"θ",thetasym:"ϑ",thetav:"ϑ",thickapprox:"≈",thicksim:"∼",ThickSpace:"  ",thinsp:" ",ThinSpace:" ",thkap:"≈",thksim:"∼",THORN:"Þ",thorn:"þ",Tilde:"∼",tilde:"˜",TildeEqual:"≃",TildeFullEqual:"≅",TildeTilde:"≈",times:"×",timesb:"⊠",timesbar:"⨱",timesd:"⨰",tint:"∭",toea:"⤨",top:"⊤",topbot:"⌶",topcir:"⫱",Topf:"𝕋",topf:"𝕥",topfork:"⫚",tosa:"⤩",tprime:"‴",TRADE:"™",trade:"™",triangle:"▵",triangledown:"▿",triangleleft:"◃",trianglelefteq:"⊴",triangleq:"≜",triangleright:"▹",trianglerighteq:"⊵",tridot:"◬",trie:"≜",triminus:"⨺",TripleDot:"⃛",triplus:"⨹",trisb:"⧍",tritime:"⨻",trpezium:"⏢",Tscr:"𝒯",tscr:"𝓉",TScy:"Ц",tscy:"ц",TSHcy:"Ћ",tshcy:"ћ",Tstrok:"Ŧ",tstrok:"ŧ",twixt:"≬",twoheadleftarrow:"↞",twoheadrightarrow:"↠",Uacute:"Ú",uacute:"ú",Uarr:"↟",uArr:"⇑",uarr:"↑",Uarrocir:"⥉",Ubrcy:"Ў",ubrcy:"ў",Ubreve:"Ŭ",ubreve:"ŭ",Ucirc:"Û",ucirc:"û",Ucy:"У",ucy:"у",udarr:"⇅",Udblac:"Ű",udblac:"ű",udhar:"⥮",ufisht:"⥾",Ufr:"𝔘",ufr:"𝔲",Ugrave:"Ù",ugrave:"ù",uHar:"⥣",uharl:"↿",uharr:"↾",uhblk:"▀",ulcorn:"⌜",ulcorner:"⌜",ulcrop:"⌏",ultri:"◸",Umacr:"Ū",umacr:"ū",uml:"¨",UnderBar:"_",UnderBrace:"⏟",UnderBracket:"⎵",UnderParenthesis:"⏝",Union:"⋃",UnionPlus:"⊎",Uogon:"Ų",uogon:"ų",Uopf:"𝕌",uopf:"𝕦",UpArrow:"↑",Uparrow:"⇑",uparrow:"↑",UpArrowBar:"⤒",UpArrowDownArrow:"⇅",UpDownArrow:"↕",Updownarrow:"⇕",updownarrow:"↕",UpEquilibrium:"⥮",upharpoonleft:"↿",upharpoonright:"↾",uplus:"⊎",UpperLeftArrow:"↖",UpperRightArrow:"↗",Upsi:"ϒ",upsi:"υ",upsih:"ϒ",Upsilon:"Υ",upsilon:"υ",UpTee:"⊥",UpTeeArrow:"↥",upuparrows:"⇈",urcorn:"⌝",urcorner:"⌝",urcrop:"⌎",Uring:"Ů",uring:"ů",urtri:"◹",Uscr:"𝒰",uscr:"𝓊",utdot:"⋰",Utilde:"Ũ",utilde:"ũ",utri:"▵",utrif:"▴",uuarr:"⇈",Uuml:"Ü",uuml:"ü",uwangle:"⦧",vangrt:"⦜",varepsilon:"ϵ",varkappa:"ϰ",varnothing:"∅",varphi:"ϕ",varpi:"ϖ",varpropto:"∝",vArr:"⇕",varr:"↕",varrho:"ϱ",varsigma:"ς",varsubsetneq:"⊊︀",varsubsetneqq:"⫋︀",varsupsetneq:"⊋︀",varsupsetneqq:"⫌︀",vartheta:"ϑ",vartriangleleft:"⊲",vartriangleright:"⊳",Vbar:"⫫",vBar:"⫨",vBarv:"⫩",Vcy:"В",vcy:"в",VDash:"⊫",Vdash:"⊩",vDash:"⊨",vdash:"⊢",Vdashl:"⫦",Vee:"⋁",vee:"∨",veebar:"⊻",veeeq:"≚",vellip:"⋮",Verbar:"‖",verbar:"|",Vert:"‖",vert:"|",VerticalBar:"∣",VerticalLine:"|",VerticalSeparator:"❘",VerticalTilde:"≀",VeryThinSpace:" ",Vfr:"𝔙",vfr:"𝔳",vltri:"⊲",vnsub:"⊂⃒",vnsup:"⊃⃒",Vopf:"𝕍",vopf:"𝕧",vprop:"∝",vrtri:"⊳",Vscr:"𝒱",vscr:"𝓋",vsubnE:"⫋︀",vsubne:"⊊︀",vsupnE:"⫌︀",vsupne:"⊋︀",Vvdash:"⊪",vzigzag:"⦚",Wcirc:"Ŵ",wcirc:"ŵ",wedbar:"⩟",Wedge:"⋀",wedge:"∧",wedgeq:"≙",weierp:"℘",Wfr:"𝔚",wfr:"𝔴",Wopf:"𝕎",wopf:"𝕨",wp:"℘",wr:"≀",wreath:"≀",Wscr:"𝒲",wscr:"𝓌",xcap:"⋂",xcirc:"◯",xcup:"⋃",xdtri:"▽",Xfr:"𝔛",xfr:"𝔵",xhArr:"⟺",xharr:"⟷",Xi:"Ξ",xi:"ξ",xlArr:"⟸",xlarr:"⟵",xmap:"⟼",xnis:"⋻",xodot:"⨀",Xopf:"𝕏",xopf:"𝕩",xoplus:"⨁",xotime:"⨂",xrArr:"⟹",xrarr:"⟶",Xscr:"𝒳",xscr:"𝓍",xsqcup:"⨆",xuplus:"⨄",xutri:"△",xvee:"⋁",xwedge:"⋀",Yacute:"Ý",yacute:"ý",YAcy:"Я",yacy:"я",Ycirc:"Ŷ",ycirc:"ŷ",Ycy:"Ы",ycy:"ы",yen:"¥",Yfr:"𝔜",yfr:"𝔶",YIcy:"Ї",yicy:"ї",Yopf:"𝕐",yopf:"𝕪",Yscr:"𝒴",yscr:"𝓎",YUcy:"Ю",yucy:"ю",Yuml:"Ÿ",yuml:"ÿ",Zacute:"Ź",zacute:"ź",Zcaron:"Ž",zcaron:"ž",Zcy:"З",zcy:"з",Zdot:"Ż",zdot:"ż",zeetrf:"ℨ",ZeroWidthSpace:"​",Zeta:"Ζ",zeta:"ζ",Zfr:"ℨ",zfr:"𝔷",ZHcy:"Ж",zhcy:"ж",zigrarr:"⇝",Zopf:"ℤ",zopf:"𝕫",Zscr:"𝒵",zscr:"𝓏",zwj:"‍",zwnj:"‌"}),t.entityMap=t.HTML_ENTITIES},function(e,t,r){var n=r(2).NAMESPACE,o=/[A-Z_a-z\xC0-\xD6\xD8-\xF6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/,i=new RegExp("[\\-\\.0-9"+o.source.slice(1,-1)+"\\u00B7\\u0300-\\u036F\\u203F-\\u2040]"),a=new RegExp("^"+o.source+i.source+"*(?::"+o.source+i.source+"*)?$"),s=0,c=1,u=2,l=3,d=4,p=5,f=6,h=7;function m(e,t){this.message=e,this.locator=t,Error.captureStackTrace&&Error.captureStackTrace(this,m)}function g(){}function y(e,t){return t.lineNumber=e.lineNumber,t.columnNumber=e.columnNumber,t}function v(e,t,r,o,i,a){function m(e,t,n){r.attributeNames.hasOwnProperty(e)&&a.fatalError("Attribute "+e+" redefined"),r.addValue(e,t.replace(/[\t\n\r]/g," ").replace(/&#?\w+;/g,i),n)}for(var g,y=++t,v=s;;){var b=e.charAt(y);switch(b){case"=":if(v===c)g=e.slice(t,y),v=l;else{if(v!==u)throw new Error("attribute equal must after attrName");v=l}break;case"'":case'"':if(v===l||v===c){if(v===c&&(a.warning('attribute value must after "="'),g=e.slice(t,y)),t=y+1,!((y=e.indexOf(b,t))>0))throw new Error("attribute value no end '"+b+"' match");m(g,C=e.slice(t,y),t-1),v=p}else{if(v!=d)throw new Error('attribute value must after "="');m(g,C=e.slice(t,y),t),a.warning('attribute "'+g+'" missed start quot('+b+")!!"),t=y+1,v=p}break;case"/":switch(v){case s:r.setTagName(e.slice(t,y));case p:case f:case h:v=h,r.closed=!0;case d:case c:break;case u:r.closed=!0;break;default:throw new Error("attribute invalid close char('/')")}break;case"":return a.error("unexpected end of input"),v==s&&r.setTagName(e.slice(t,y)),y;case">":switch(v){case s:r.setTagName(e.slice(t,y));case p:case f:case h:break;case d:case c:"/"===(C=e.slice(t,y)).slice(-1)&&(r.closed=!0,C=C.slice(0,-1));case u:v===u&&(C=g),v==d?(a.warning('attribute "'+C+'" missed quot(")!'),m(g,C,t)):(n.isHTML(o[""])&&C.match(/^(?:disabled|checked|selected)$/i)||a.warning('attribute "'+C+'" missed value!! "'+C+'" instead!!'),m(C,C,t));break;case l:throw new Error("attribute value missed!!")}return y;case"€":b=" ";default:if(b<=" ")switch(v){case s:r.setTagName(e.slice(t,y)),v=f;break;case c:g=e.slice(t,y),v=u;break;case d:var C=e.slice(t,y);a.warning('attribute "'+C+'" missed quot(")!!'),m(g,C,t);case p:v=f}else switch(v){case u:r.tagName;n.isHTML(o[""])&&g.match(/^(?:disabled|checked|selected)$/i)||a.warning('attribute "'+g+'" missed value!! "'+g+'" instead2!!'),m(g,g,t),t=y,v=c;break;case p:a.warning('attribute space is required"'+g+'"!!');case f:v=c,t=y;break;case l:v=d,t=y;break;case h:throw new Error("elements closed character '/' and '>' must be connected to")}}y++}}function b(e,t,r){for(var o=e.tagName,i=null,a=e.length;a--;){var s=e[a],c=s.qName,u=s.value;if((f=c.indexOf(":"))>0)var l=s.prefix=c.slice(0,f),d=c.slice(f+1),p="xmlns"===l&&d;else d=c,l=null,p="xmlns"===c&&"";s.localName=d,!1!==p&&(null==i&&(i={},S(r,r={})),r[p]=i[p]=u,s.uri=n.XMLNS,t.startPrefixMapping(p,u))}for(a=e.length;a--;){(l=(s=e[a]).prefix)&&("xml"===l&&(s.uri=n.XML),"xmlns"!==l&&(s.uri=r[l||""]))}var f;(f=o.indexOf(":"))>0?(l=e.prefix=o.slice(0,f),d=e.localName=o.slice(f+1)):(l=null,d=e.localName=o);var h=e.uri=r[l||""];if(t.startElement(h,d,o,e),!e.closed)return e.currentNSMap=r,e.localNSMap=i,!0;if(t.endElement(h,d,o),i)for(l in i)Object.prototype.hasOwnProperty.call(i,l)&&t.endPrefixMapping(l)}function C(e,t,r,n,o){if(/^(?:script|textarea)$/i.test(r)){var i=e.indexOf("",t),a=e.substring(t+1,i);if(/[&<]/.test(a))return/^script$/i.test(r)?(o.characters(a,0,a.length),i):(a=a.replace(/&#?\w+;/g,n),o.characters(a,0,a.length),i)}return t+1}function k(e,t,r,n){var o=n[r];return null==o&&((o=e.lastIndexOf(""))t?(r.comment(e,t+4,o-t-4),o+3):(n.error("Unclosed comment"),-1):-1;if("CDATA["==e.substr(t+3,6)){var o=e.indexOf("]]>",t+9);return r.startCDATA(),r.characters(e,t+9,o-t-9),r.endCDATA(),o+3}var i=function(e,t){var r,n=[],o=/'[^']+'|"[^"]+"|[^\s<>\/=]+=?|(\/?\s*>|<)/g;o.lastIndex=t,o.exec(e);for(;r=o.exec(e);)if(n.push(r),r[1])return n}(e,t),a=i.length;if(a>1&&/!doctype/i.test(i[0][0])){var s=i[1][0],c=!1,u=!1;a>3&&(/^public$/i.test(i[2][0])?(c=i[3][0],u=a>4&&i[4][0]):/^system$/i.test(i[2][0])&&(u=i[3][0]));var l=i[a-1];return r.startDTD(s,c,u),r.endDTD(),l.index+l[0].length}return-1}function w(e,t,r){var n=e.indexOf("?>",t);if(n){var o=e.substring(t,n).match(/^<\?(\S*)\s*([\s\S]*?)\s*$/);if(o){o[0].length;return r.processingInstruction(o[1],o[2]),n+2}return-1}return-1}function R(){this.attributeNames={}}m.prototype=new Error,m.prototype.name=m.name,g.prototype={parse:function(e,t,r){var o=this.domBuilder;o.startDocument(),S(t,t={}),function(e,t,r,o,i){function a(e){if(e>65535){var t=55296+((e-=65536)>>10),r=56320+(1023&e);return String.fromCharCode(t,r)}return String.fromCharCode(e)}function s(e){var t=e.slice(1,-1);return Object.hasOwnProperty.call(r,t)?r[t]:"#"===t.charAt(0)?a(parseInt(t.substr(1).replace("x","0x"))):(i.error("entity not found:"+e),e)}function c(t){if(t>S){var r=e.substring(S,t).replace(/&#?\w+;/g,s);f&&u(S),o.characters(r,0,t-S),S=t}}function u(t,r){for(;t>=d&&(r=p.exec(e));)l=r.index,d=l+r[0].length,f.lineNumber++;f.columnNumber=t-l+1}var l=0,d=0,p=/.*(?:\r\n?|\n)|.*$/g,f=o.locator,h=[{currentNSMap:t}],g={},S=0;for(;;){try{var x=e.indexOf("<",S);if(x<0){if(!e.substr(S).match(/^\s*$/)){var E=o.doc,A=E.createTextNode(e.substr(S));E.appendChild(A),o.currentElement=A}return}switch(x>S&&c(x),e.charAt(x+1)){case"/":var B=e.indexOf(">",x+3),D=e.substring(x+2,B).replace(/[ \t\n\r]+$/g,""),N=h.pop();B<0?(D=e.substring(x+2).replace(/[\s<].*/,""),i.error("end tag name: "+D+" is not complete:"+N.tagName),B=x+1+D.length):D.match(/\sS?S=B:c(Math.max(x,S)+1)}}(e,t,r,o,this.errorHandler),o.endDocument()}},R.prototype={setTagName:function(e){if(!a.test(e))throw new Error("invalid tagName:"+e);this.tagName=e},addValue:function(e,t,r){if(!a.test(e))throw new Error("invalid attribute:"+e);this.attributeNames[e]=this.length,this[this.length++]={qName:e,value:t,offset:r}},length:0,getLocalName:function(e){return this[e].localName},getLocator:function(e){return this[e].locator},getQName:function(e){return this[e].qName},getURI:function(e){return this[e].uri},getValue:function(e){return this[e].value}},t.XMLReader=g,t.ParseError=m},function(e,t,r){var n=r(0),o="a-zA-Z_À-ÖØ-öø-ÿͰ-ͽͿ-῿‌-‍⁰-↏Ⰰ-⿿、-퟿豈-﷏ﷰ-�",i=new RegExp("^([^"+o+"])|^((x|X)(m|M)(l|L))|([^"+o+"-.0-9·̀-ͯ‿⁀])","g"),a=/[^\x09\x0A\x0D\x20-\xFF\x85\xA0-\uD7FF\uE000-\uFDCF\uFDE0-\uFFFD]/gm,s=function(e){var t=[];if(e instanceof Object)for(var r in e)e.hasOwnProperty(r)&&t.push(r);return t},c=function(e,t){var r=function(e,r,n,o,a){var s=void 0!==t.indent?t.indent:"\t",c=t.prettyPrint?"\n"+new Array(o).join(s):"";t.removeIllegalNameCharacters&&(e=e.replace(i,"_"));var u=[c,"<",e,n||""];return r&&r.length>0?(u.push(">"),u.push(r),a&&u.push(c),u.push("")):u.push("/>"),u.join("")};return function e(o,i,c){var u=n(o);switch((Array.isArray?Array.isArray(o):o instanceof Array)?u="array":o instanceof Date&&(u="date"),u){case"array":var l=[];return o.map((function(t){l.push(e(t,1,c+1))})),t.prettyPrint&&l.push("\n"),l.join("");case"date":return o.toJSON?o.toJSON():o+"";case"object":var d=[];for(var p in o)if(o.hasOwnProperty(p))if(o[p]instanceof Array)for(var f=0;f0&&d.push("\n"),d.join("");case"function":return o();default:return t.escape?(""+o).replace(/&/g,"&").replace(//g,">").replace(/'/g,"'").replace(/"/g,""").replace(a,""):""+o}}(e,0,0)},u=function(e){var t=['"),t.join("")};e.exports=function(e,t){if(t||(t={xmlHeader:{standalone:!0},prettyPrint:!0,indent:" ",escape:!0}),"string"==typeof e)try{e=JSON.parse(e.toString())}catch(e){return!1}var r="",o="";return t&&("object"==n(t)?(t.xmlHeader&&(r=u(!!t.xmlHeader.standalone)),void 0!==t.docType&&(o="")):r=u()),[r,(t=t||{}).prettyPrint&&o?"\n":"",o,c(e,t)].join("").replace(/\n{2,}/g,"\n").replace(/\s+$/g,"")}},function(e,t){var r=function(e){var t=(e=e||{}).Base64,r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",n=function(e){for(var t={},r=0,n=e.length;r>>6)+o(128|63&t):o(224|t>>>12&15)+o(128|t>>>6&63)+o(128|63&t);var t=65536+1024*(e.charCodeAt(0)-55296)+(e.charCodeAt(1)-56320);return o(240|t>>>18&7)+o(128|t>>>12&63)+o(128|t>>>6&63)+o(128|63&t)},a=/[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g,s=function(e){return e.replace(a,i)},c=function(e){var t=[0,2,1][e.length%3],n=e.charCodeAt(0)<<16|(e.length>1?e.charCodeAt(1):0)<<8|(e.length>2?e.charCodeAt(2):0);return[r.charAt(n>>>18),r.charAt(n>>>12&63),t>=2?"=":r.charAt(n>>>6&63),t>=1?"=":r.charAt(63&n)].join("")},u=e.btoa?function(t){return e.btoa(t)}:function(e){return e.replace(/[\s\S]{1,3}/g,c)},l=function(e){return u(s(e))},d=function(e,t){return t?l(String(e)).replace(/[+\/]/g,(function(e){return"+"==e?"-":"_"})).replace(/=/g,""):l(String(e))},p=new RegExp(["[À-ß][€-¿]","[à-ï][€-¿]{2}","[ð-÷][€-¿]{3}"].join("|"),"g"),f=function(e){switch(e.length){case 4:var t=((7&e.charCodeAt(0))<<18|(63&e.charCodeAt(1))<<12|(63&e.charCodeAt(2))<<6|63&e.charCodeAt(3))-65536;return o(55296+(t>>>10))+o(56320+(1023&t));case 3:return o((15&e.charCodeAt(0))<<12|(63&e.charCodeAt(1))<<6|63&e.charCodeAt(2));default:return o((31&e.charCodeAt(0))<<6|63&e.charCodeAt(1))}},h=function(e){return e.replace(p,f)},m=function(e){var t=e.length,r=t%4,i=(t>0?n[e.charAt(0)]<<18:0)|(t>1?n[e.charAt(1)]<<12:0)|(t>2?n[e.charAt(2)]<<6:0)|(t>3?n[e.charAt(3)]:0),a=[o(i>>>16),o(i>>>8&255),o(255&i)];return a.length-=[0,0,2,1][r],a.join("")},g=e.atob?function(t){return e.atob(t)}:function(e){return e.replace(/[\s\S]{1,4}/g,m)},y=function(e){return h(g(e))},v=function(e){return y(String(e).replace(/[-_]/g,(function(e){return"-"==e?"+":"/"})).replace(/[^A-Za-z0-9\+\/]/g,""))};return{VERSION:"2.1.9",atob:g,btoa:u,fromBase64:v,toBase64:d,utob:s,encode:d,encodeURI:function(e){return d(e,!0)},btou:h,decode:v,noConflict:function(){var r=e.Base64;return e.Base64=t,r}}}();e.exports=r},function(e,t){e.exports=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},e.exports.__esModule=!0,e.exports.default=e.exports},function(e,t,r){var n=r(24);function o(e,t){for(var r=0;re.options.UploadQueueSize;){var r="waiting"===a[t].state||"checking"===a[t].state||"uploading"===a[t].state;a[t]&&r?t++:(s[a[t].id]&&delete s[a[t].id],a.splice(t,1),u--)}d()}},f=function t(){if(!(c>=e.options.FileParallelLimit)){for(;a[u]&&"waiting"!==a[u].state;)u++;if(!(u>=a.length)){var r=a[u];u++,c++,r.state="checking",r.params.onTaskStart&&r.params.onTaskStart(l(r)),!r.params.UploadData&&(r.params.UploadData={});var n=o.formatParams(r.api,r.params);i[r.api].call(e,n,(function(n,o){e._isRunningTask(r.id)&&("checking"!==r.state&&"uploading"!==r.state||(r.state=n?"error":"success",n&&(r.error=n),c--,d(),t(),r.callback&&r.callback(n,o),"success"===r.state&&(r.params&&(delete r.params.UploadData,delete r.params.Body,delete r.params),delete r.callback)),p())})),d(),setTimeout(t)}}},h=function(t,r){var o=s[t];if(o){var i=o&&"waiting"===o.state,a=o&&("checking"===o.state||"uploading"===o.state);if("canceled"===r&&"canceled"!==o.state||"paused"===r&&i||"paused"===r&&a){if("paused"===r&&o.params.Body&&"function"==typeof o.params.Body.pipe)return;o.state=r,e.emit("inner-kill-task",{TaskId:t,toState:r});try{var u=o&&o.params&&o.params.UploadData.UploadId}catch(e){}"canceled"===r&&u&&n.removeUsing(u),d(),a&&(c--,f()),"canceled"===r&&(o.params&&(delete o.params.UploadData,delete o.params.Body,delete o.params),delete o.callback)}p()}};e._addTasks=function(t){o.each(t,(function(t){e._addTask(t.api,t.params,t.callback,!0)})),d()};e._addTask=function(t,r,n,i){r=o.formatParams(t,r);var c=o.uuid();r.TaskId=c,r.onTaskReady&&r.onTaskReady(c),r.TaskReady&&(r.TaskReady(c),!1);var u={params:r,callback:n,api:t,index:a.length,id:c,Bucket:r.Bucket,Region:r.Region,Key:r.Key,FilePath:r.FilePath||"",state:"waiting",loaded:0,size:0,speed:0,percent:0,hashPercent:0,error:null,_custom:r._custom},l=r.onHashProgress;r.onHashProgress=function(t){e._isRunningTask(u.id)&&(u.hashPercent=t.percent,l&&l(t),d())};var h=r.onProgress;return r.onProgress=function(t){e._isRunningTask(u.id)&&("checking"===u.state&&(u.state="uploading"),u.loaded=t.loaded,u.speed=t.speed,u.percent=t.percent,h&&h(t),d())},o.getFileSize(t,r,(function(e,t){if(e)return n(o.error(e));s[c]=u,a.push(u),u.size=t,!i&&d(),f(),p()})),c},e._isRunningTask=function(e){var t=s[e];return!(!t||"checking"!==t.state&&"uploading"!==t.state)},e.getTaskList=function(){return o.map(a,l)},e.cancelTask=function(e){h(e,"canceled")},e.pauseTask=function(e){h(e,"paused")},e.restartTask=function(e){var t=s[e];!t||"paused"!==t.state&&"error"!==t.state||(t.state="waiting",d(),u=Math.min(u,t.index),f())},e.isUploadRunning=function(){return c||u-1&&(a["SSE-COS"]=a.SSECOS,delete a.SSECOS)}var s=i.json2xml({InventoryConfiguration:n}),c=t.Headers;c["Content-Type"]="application/xml",c["Content-MD5"]=i.b64(i.md5(s));var u="PUT"===e?"name/cos:PutBucketInventory":"name/cos:PostBucketInventory";h.call(this,{Action:u,method:e,Bucket:t.Bucket,Region:t.Region,body:s,action:"inventory",qs:{id:t.Id},headers:c},(function(e,t){return e&&204===e.statusCode?r(null,{statusCode:e.statusCode}):e?r(e):void r(null,{statusCode:t.statusCode,headers:t.headers})}))}function s(e){var t={GrantFullControl:[],GrantWrite:[],GrantRead:[],GrantReadAcp:[],GrantWriteAcp:[],ACL:""},r={FULL_CONTROL:"GrantFullControl",WRITE:"GrantWrite",READ:"GrantRead",READ_ACP:"GrantReadAcp",WRITE_ACP:"GrantWriteAcp"},n=(e&&e.AccessControlList||{}).Grant;n&&(n=i.isArray(n)?n:[n]);var o={READ:0,WRITE:0,FULL_CONTROL:0};return n&&n.length&&i.each(n,(function(n){"qcs::cam::anyone:anyone"===n.Grantee.ID||"http://cam.qcloud.com/groups/global/AllUsers"===n.Grantee.URI?o[n.Permission]=1:n.Grantee.ID!==e.Owner.ID&&t[r[n.Permission]].push('id="'+n.Grantee.ID+'"')})),o.FULL_CONTROL||o.WRITE&&o.READ?t.ACL="public-read-write":o.READ?t.ACL="public-read":t.ACL="private",i.each(r,(function(e){t[e]=c(t[e].join(","))})),t}function c(e){var t,r,n=e.split(","),o={};for(t=0;t-1?"{Region}.myqcloud.com":"cos.{Region}.myqcloud.com",e.ForcePathStyle||(s="{Bucket}."+s)),s=(s=s.replace(/\{\{AppId\}\}/gi,a).replace(/\{\{Bucket\}\}/gi,o).replace(/\{\{Region\}\}/gi,t).replace(/\{\{.*?\}\}/gi,"")).replace(/\{AppId\}/gi,a).replace(/\{BucketName\}/gi,o).replace(/\{Bucket\}/gi,r).replace(/\{Region\}/gi,t).replace(/\{.*?\}/gi,""),/^[a-zA-Z]+:\/\//.test(s)||(s=u+"//"+s),"/"===s.slice(-1)&&(s=s.slice(0,-1));var l=s;return e.ForcePathStyle&&(l+="/"+r),l+="/",c&&(l+=i.camSafeUrlEncode(c).replace(/%2F/g,"/")),e.isLocation&&(l=l.replace(/^https?:\/\//,"")),l}var l=function(e){if(!e.Bucket||!e.Region)return"";var t=void 0===e.UseAccelerate?this.options.UseAccelerate:e.UseAccelerate;return(e.Url||u({ForcePathStyle:this.options.ForcePathStyle,protocol:this.options.Protocol,domain:this.options.Domain,bucket:e.Bucket,region:t?"accelerate":e.Region})).replace(/^https?:\/\/([^/]+)(\/.*)?$/,"$1")};function d(e,t){var r=i.clone(e.Headers),n="";i.each(r,(function(e,t){(""===e||["content-type","cache-control","expires"].indexOf(t.toLowerCase())>-1)&&delete r[t],"host"===t.toLowerCase()&&(n=e)}));var o=!1!==e.ForceSignHost;!n&&e.SignHost&&o&&(r.Host=e.SignHost);var a=!1,s=function(e,r){a||(a=!0,r&&r.XCosSecurityToken&&!r.SecurityToken&&((r=i.clone(r)).SecurityToken=r.XCosSecurityToken,delete r.XCosSecurityToken),t&&t(e,r))},c=this,u=e.Bucket||"",l=e.Region||"",d=e.Key||"";c.options.ForcePathStyle&&u&&(d=u+"/"+d);var p="/"+d,f={},h=e.Scope;if(!h){var m=e.Action||"",g=e.ResourceKey||e.Key||"";h=e.Scope||[{action:m,bucket:u,region:l,prefix:g}]}var y=i.md5(JSON.stringify(h));c._StsCache=c._StsCache||[],function(){var e,t;for(e=c._StsCache.length-1;e>=0;e--){t=c._StsCache[e];var r=Math.round(i.getSkewTime(c.options.SystemClockOffset)/1e3)+30;if(t.StartTime&&r=t.ExpiredTime)c._StsCache.splice(e,1);else if(!t.ScopeLimit||t.ScopeLimit&&t.ScopeKey===y){f=t;break}}}();var v,b=function(){var t="";f.StartTime&&e.Expires?t=f.StartTime+";"+(f.StartTime+1*e.Expires):f.StartTime&&f.ExpiredTime&&(t=f.StartTime+";"+f.ExpiredTime);var n={Authorization:i.getAuth({SecretId:f.TmpSecretId,SecretKey:f.TmpSecretKey,Method:e.Method,Pathname:p,Query:e.Query,Headers:r,Expires:e.Expires,UseRawKey:c.options.UseRawKey,SystemClockOffset:c.options.SystemClockOffset,KeyTime:t,ForceSignHost:o}),SecurityToken:f.SecurityToken||f.XCosSecurityToken||"",Token:f.Token||"",ClientIP:f.ClientIP||"",ClientUA:f.ClientUA||"",SignFrom:"client"};s(null,n)},C=function(e){if(e.Authorization){var t=!1,r=e.Authorization;if(r)if(r.indexOf(" ")>-1)t=!1;else if(r.indexOf("q-sign-algorithm=")>-1&&r.indexOf("q-ak=")>-1&&r.indexOf("q-sign-time=")>-1&&r.indexOf("q-key-time=")>-1&&r.indexOf("q-url-param-list=")>-1)t=!0;else try{(r=atob(r)).indexOf("a=")>-1&&r.indexOf("k=")>-1&&r.indexOf("t=")>-1&&r.indexOf("r=")>-1&&r.indexOf("b=")>-1&&(t=!0)}catch(e){}if(!t)return i.error(new Error("getAuthorization callback params format error"))}else{if(!e.TmpSecretId)return i.error(new Error('getAuthorization callback params missing "TmpSecretId"'));if(!e.TmpSecretKey)return i.error(new Error('getAuthorization callback params missing "TmpSecretKey"'));if(!e.SecurityToken&&!e.XCosSecurityToken)return i.error(new Error('getAuthorization callback params missing "SecurityToken"'));if(!e.ExpiredTime)return i.error(new Error('getAuthorization callback params missing "ExpiredTime"'));if(e.ExpiredTime&&10!==e.ExpiredTime.toString().length)return i.error(new Error('getAuthorization callback params "ExpiredTime" should be 10 digits'));if(e.StartTime&&10!==e.StartTime.toString().length)return i.error(new Error('getAuthorization callback params "StartTime" should be 10 StartTime'))}return!1};if(f.ExpiredTime&&f.ExpiredTime-i.getSkewTime(c.options.SystemClockOffset)/1e3>60)b();else if(c.options.getAuthorization)c.options.getAuthorization.call(c,{Bucket:u,Region:l,Method:e.Method,Key:d,Pathname:p,Query:e.Query,Headers:r,Scope:h,SystemClockOffset:c.options.SystemClockOffset,ForceSignHost:o},(function(e){"string"==typeof e&&(e={Authorization:e});var t=C(e);if(t)return s(t);e.Authorization?s(null,e):((f=e||{}).Scope=h,f.ScopeKey=y,c._StsCache.push(f),b())}));else{if(!c.options.getSTS)return v={Authorization:i.getAuth({SecretId:e.SecretId||c.options.SecretId,SecretKey:e.SecretKey||c.options.SecretKey,Method:e.Method,Pathname:p,Query:e.Query,Headers:r,Expires:e.Expires,UseRawKey:c.options.UseRawKey,SystemClockOffset:c.options.SystemClockOffset,ForceSignHost:o}),SecurityToken:c.options.SecurityToken||c.options.XCosSecurityToken,SignFrom:"client"},s(null,v),v;c.options.getSTS.call(c,{Bucket:u,Region:l},(function(e){(f=e||{}).Scope=h,f.ScopeKey=y,f.TmpSecretId||(f.TmpSecretId=f.SecretId),f.TmpSecretKey||(f.TmpSecretKey=f.SecretKey);var t=C(f);if(t)return s(t);c._StsCache.push(f),b()}))}return""}function p(e){var t=!1,r=!1,n=!1,o=e.headers&&(e.headers.date||e.headers.Date)||e.error&&e.error.ServerTime;try{var a=e.error.Code,s=e.error.Message;("RequestTimeTooSkewed"===a||"AccessDenied"===a&&"Request has expired"===s)&&(r=!0)}catch(e){}if(e)if(r&&o){var c=Date.parse(o);this.options.CorrectClockSkew&&Math.abs(i.getSkewTime(this.options.SystemClockOffset)-c)>=3e4&&(this.options.SystemClockOffset=c-Date.now(),t=!0)}else 5===Math.floor(e.statusCode/100)?t=!0:"CORS blocked or network error"===e.message&&(n=!0,t=this.options.AutoSwitchHost);return{canRetry:t,networkError:n}}function f(e){var t=e.requestUrl,r=e.clientCalcSign,n=e.networkError;if(!this.options.AutoSwitchHost)return!1;if(!t)return!1;if(!r)return!1;if(!n)return!1;return/^https?:\/\/[^\/]*\.cos\.[^\/]*\.myqcloud\.com(\/.*)?$/.test(t)&&!/^https?:\/\/[^\/]*\.cos\.accelerate\.myqcloud\.com(\/.*)?$/.test(t)}function h(e,t){var r=this;!e.headers&&(e.headers={}),!e.qs&&(e.qs={}),e.VersionId&&(e.qs.versionId=e.VersionId),e.qs=i.clearKey(e.qs),e.headers&&(e.headers=i.clearKey(e.headers)),e.qs&&(e.qs=i.clearKey(e.qs));var n=i.clone(e.qs);e.action&&(n[e.action]="");var o=e.url||e.Url,a=e.SignHost||l.call(this,{Bucket:e.Bucket,Region:e.Region,Url:o}),s=e.tracker;!function o(i){var c=r.options.SystemClockOffset;s&&s.setParams({signStartTime:(new Date).getTime(),retryTimes:i-1}),e.SwitchHost&&(a=a.replace(/myqcloud.com/,"tencentcos.cn")),d.call(r,{Bucket:e.Bucket||"",Region:e.Region||"",Method:e.method,Key:e.Key,Query:n,Headers:e.headers,SignHost:a,Action:e.Action,ResourceKey:e.ResourceKey,Scope:e.Scope,ForceSignHost:r.options.ForceSignHost,SwitchHost:e.SwitchHost},(function(n,a){n?t(n):(s&&s.setParams({signEndTime:(new Date).getTime(),httpStartTime:(new Date).getTime()}),e.AuthData=a,m.call(r,e,(function(n,u){s&&s.setParams({httpEndTime:(new Date).getTime()});var l=!1,d=!1;if(n){var h=p.call(r,n);l=h.canRetry||c!==r.options.SystemClockOffset,d=h.networkError}if(n&&i<2&&l){e.headers&&(delete e.headers.Authorization,delete e.headers.token,delete e.headers.clientIP,delete e.headers.clientUA,e.headers["x-cos-security-token"]&&delete e.headers["x-cos-security-token"],e.headers["x-ci-security-token"]&&delete e.headers["x-ci-security-token"]);var m=f.call(r,{requestUrl:(null==n?void 0:n.url)||"",clientCalcSign:"client"===a.SignFrom,networkError:d});e.SwitchHost=m,o(i+1)}else t(n,u)})))}))}(1)}function m(e,t){var r=this,n=e.TaskId;if(!n||r._isRunningTask(n)){var a=e.Bucket,s=e.Region,c=e.Key,l=e.method||"GET",d=e.Url||e.url,p=e.body,f=e.rawBody;r.options.UseAccelerate&&(s="accelerate"),d=d||u({ForcePathStyle:r.options.ForcePathStyle,protocol:r.options.Protocol,domain:r.options.Domain,bucket:a,region:s,object:c}),e.SwitchHost&&(d=d.replace(/myqcloud.com/,"tencentcos.cn")),e.action&&(d=d+"?"+(i.isIOS_QQ?"".concat(e.action,"="):e.action)),e.qsStr&&(d=d.indexOf("?")>-1?d+"&"+e.qsStr:d+"?"+e.qsStr);var h={method:l,url:d,headers:e.headers,qs:e.qs,body:p},m="x-cos-security-token";if(i.isCIHost(d)&&(m="x-ci-security-token"),h.headers.Authorization=e.AuthData.Authorization,e.AuthData.Token&&(h.headers.token=e.AuthData.Token),e.AuthData.ClientIP&&(h.headers.clientIP=e.AuthData.ClientIP),e.AuthData.ClientUA&&(h.headers.clientUA=e.AuthData.ClientUA),e.AuthData.SecurityToken&&(h.headers[m]=e.AuthData.SecurityToken),h.headers&&(h.headers=i.clearKey(h.headers)),h=i.clearKey(h),e.onProgress&&"function"==typeof e.onProgress){var g=p&&(p.size||p.length)||0;h.onProgress=function(t){if(!n||r._isRunningTask(n)){var o=t?t.loaded:0;e.onProgress({loaded:o,total:g})}}}e.onDownloadProgress&&(h.onDownloadProgress=e.onDownloadProgress),e.DataType&&(h.dataType=e.DataType),this.options.Timeout&&(h.timeout=this.options.Timeout),r.options.ForcePathStyle&&(h.pathStyle=r.options.ForcePathStyle),r.emit("before-send",h);var y=h.url.includes("accelerate."),v=h.qs?Object.keys(h.qs).map((function(e){return"".concat(e,"=").concat(h.qs[e])})).join("&"):"",b=v?h.url+"?"+v:h.url;e.tracker&&e.tracker.setParams({reqUrl:b,accelerate:y?"Y":"N"}),e.tracker&&e.tracker.parent&&e.tracker.parent.setParams({reqUrl:b,accelerate:y?"Y":"N"});var C=(r.options.Request||o)(h,(function(e){if(!e||"abort"!==e.error){var o={options:h,error:e&&e.error,statusCode:e&&e.statusCode||0,statusMessage:e&&e.statusMessage||"",headers:e&&e.headers||{},body:e&&e.body};r.emit("after-receive",o);var a,s=o.error,c=o.body,u={statusCode:o.statusCode,statusMessage:o.statusMessage,headers:o.headers},l=function(e,o){if(n&&r.off("inner-kill-task",k),!a){a=!0;var s={};u&&u.statusCode&&(s.statusCode=u.statusCode),u&&u.headers&&(s.headers=u.headers),e?(h.url&&(s.url=h.url),h.method&&(s.method=h.method),e=i.extend(e||{},s),t(e,null)):(o=i.extend(o||{},s),t(null,o)),C=null}};if(s)return l(i.error(s));var d,p=u.statusCode,m=2===Math.floor(p/100);if(f&&m)return l(null,{body:c});try{d=c&&c.indexOf("<")>-1&&c.indexOf(">")>-1&&i.xml2json(c)||{}}catch(e){d={}}var g=d&&d.Error;m?l(null,d):g?l(i.error(new Error(g.Message),{code:g.Code,error:g})):p?l(i.error(new Error(u.statusMessage),{code:""+p})):p&&l(i.error(new Error("statusCode error")))}})),k=function e(t){t.TaskId===n&&(C&&C.abort&&C.abort(),r.off("inner-kill-task",e))};n&&r.on("inner-kill-task",k)}}var g={getService:function(e,t){"function"==typeof e&&(t=e,e={});var r=this.options.Protocol||(i.isBrowser&&"object"===("undefined"==typeof location?"undefined":n(location))&&"http:"===location.protocol?"http:":"https:"),o=this.options.ServiceDomain,a=e.AppId||this.options.appId,s=e.Region;o?(o=o.replace(/\{\{AppId\}\}/gi,a||"").replace(/\{\{Region\}\}/gi,s||"").replace(/\{\{.*?\}\}/gi,""),/^[a-zA-Z]+:\/\//.test(o)||(o=r+"//"+o),"/"===o.slice(-1)&&(o=o.slice(0,-1))):o=s?r+"//cos."+s+".myqcloud.com":r+"//service.cos.myqcloud.com";var c="",u=s?"cos."+s+".myqcloud.com":"service.cos.myqcloud.com";u===o.replace(/^https?:\/\/([^/]+)(\/.*)?$/,"$1")&&(c=u),h.call(this,{Action:"name/cos:GetService",url:o,method:"GET",headers:e.Headers,SignHost:c},(function(e,r){if(e)return t(e);var n=r&&r.ListAllMyBucketsResult&&r.ListAllMyBucketsResult.Buckets&&r.ListAllMyBucketsResult.Buckets.Bucket||[];n=i.isArray(n)?n:[n];var o=r&&r.ListAllMyBucketsResult&&r.ListAllMyBucketsResult.Owner||{};t(null,{Buckets:n,Owner:o,statusCode:r.statusCode,headers:r.headers})}))},putBucket:function(e,t){var r=this,n="";if(e.BucketAZConfig){var o={BucketAZConfig:e.BucketAZConfig};n=i.json2xml({CreateBucketConfiguration:o})}h.call(this,{Action:"name/cos:PutBucket",method:"PUT",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,body:n},(function(n,o){if(n)return t(n);var i=u({protocol:r.options.Protocol,domain:r.options.Domain,bucket:e.Bucket,region:e.Region,isLocation:!0});t(null,{Location:i,statusCode:o.statusCode,headers:o.headers})}))},headBucket:function(e,t){h.call(this,{Action:"name/cos:HeadBucket",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,method:"HEAD"},t)},getBucket:function(e,t){var r={};r.prefix=e.Prefix||"",r.delimiter=e.Delimiter,r.marker=e.Marker,r["max-keys"]=e.MaxKeys,r["encoding-type"]=e.EncodingType,h.call(this,{Action:"name/cos:GetBucket",ResourceKey:r.prefix,method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,qs:r},(function(e,r){if(e)return t(e);var n=r.ListBucketResult||{},o=n.Contents||[],a=n.CommonPrefixes||[];o=i.isArray(o)?o:[o],a=i.isArray(a)?a:[a];var s=i.clone(n);i.extend(s,{Contents:o,CommonPrefixes:a,statusCode:r.statusCode,headers:r.headers}),t(null,s)}))},deleteBucket:function(e,t){h.call(this,{Action:"name/cos:DeleteBucket",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,method:"DELETE"},(function(e,r){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:r.statusCode,headers:r.headers})}))},putBucketAcl:function(e,t){var r=e.Headers,n="";if(e.AccessControlPolicy){var o=i.clone(e.AccessControlPolicy||{}),a=o.Grants||o.Grant;a=i.isArray(a)?a:[a],delete o.Grant,delete o.Grants,o.AccessControlList={Grant:a},n=i.json2xml({AccessControlPolicy:o}),r["Content-Type"]="application/xml",r["Content-MD5"]=i.b64(i.md5(n))}i.each(r,(function(e,t){0===t.indexOf("x-cos-grant-")&&(r[t]=c(r[t]))})),h.call(this,{Action:"name/cos:PutBucketACL",method:"PUT",Bucket:e.Bucket,Region:e.Region,headers:r,action:"acl",body:n},(function(e,r){if(e)return t(e);t(null,{statusCode:r.statusCode,headers:r.headers})}))},getBucketAcl:function(e,t){h.call(this,{Action:"name/cos:GetBucketACL",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"acl"},(function(e,r){if(e)return t(e);var n=r.AccessControlPolicy||{},o=n.Owner||{},a=n.AccessControlList.Grant||[];a=i.isArray(a)?a:[a];var c=s(n);r.headers&&r.headers["x-cos-acl"]&&(c.ACL=r.headers["x-cos-acl"]),c=i.extend(c,{Owner:o,Grants:a,statusCode:r.statusCode,headers:r.headers}),t(null,c)}))},putBucketCors:function(e,t){var r=(e.CORSConfiguration||{}).CORSRules||e.CORSRules||[];r=i.clone(i.isArray(r)?r:[r]),i.each(r,(function(e){i.each(["AllowedOrigin","AllowedHeader","AllowedMethod","ExposeHeader"],(function(t){var r=t+"s",n=e[r]||e[t]||[];delete e[r],e[t]=i.isArray(n)?n:[n]}))}));var n={CORSRule:r};e.ResponseVary&&(n.ResponseVary=e.ResponseVary);var o=i.json2xml({CORSConfiguration:n}),a=e.Headers;a["Content-Type"]="application/xml",a["Content-MD5"]=i.b64(i.md5(o)),h.call(this,{Action:"name/cos:PutBucketCORS",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:o,action:"cors",headers:a},(function(e,r){if(e)return t(e);t(null,{statusCode:r.statusCode,headers:r.headers})}))},getBucketCors:function(e,t){h.call(this,{Action:"name/cos:GetBucketCORS",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"cors"},(function(e,r){if(e)if(404===e.statusCode&&e.error&&"NoSuchCORSConfiguration"===e.error.Code){var n={CORSRules:[],statusCode:e.statusCode};e.headers&&(n.headers=e.headers),t(null,n)}else t(e);else{var o=r.CORSConfiguration||{},a=o.CORSRules||o.CORSRule||[];a=i.clone(i.isArray(a)?a:[a]);var s=o.ResponseVary;i.each(a,(function(e){i.each(["AllowedOrigin","AllowedHeader","AllowedMethod","ExposeHeader"],(function(t){var r=t+"s",n=e[r]||e[t]||[];delete e[t],e[r]=i.isArray(n)?n:[n]}))})),t(null,{CORSRules:a,ResponseVary:s,statusCode:r.statusCode,headers:r.headers})}}))},deleteBucketCors:function(e,t){h.call(this,{Action:"name/cos:DeleteBucketCORS",method:"DELETE",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"cors"},(function(e,r){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:r.statusCode||e.statusCode,headers:r.headers})}))},getBucketLocation:function(e,t){h.call(this,{Action:"name/cos:GetBucketLocation",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"location"},t)},getBucketPolicy:function(e,t){h.call(this,{Action:"name/cos:GetBucketPolicy",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"policy",rawBody:!0},(function(e,r){if(e)return e.statusCode&&403===e.statusCode?t(i.error(e,{ErrorStatus:"Access Denied"})):e.statusCode&&405===e.statusCode?t(i.error(e,{ErrorStatus:"Method Not Allowed"})):e.statusCode&&404===e.statusCode?t(i.error(e,{ErrorStatus:"Policy Not Found"})):t(e);var n={};try{n=JSON.parse(r.body)}catch(e){}t(null,{Policy:n,statusCode:r.statusCode,headers:r.headers})}))},putBucketPolicy:function(e,t){var r=e.Policy;try{"string"==typeof r&&(r=JSON.parse(r))}catch(e){}if(!r||"string"==typeof r)return t(i.error(new Error("Policy format error")));var n=JSON.stringify(r);r.version||(r.version="2.0");var o=e.Headers;o["Content-Type"]="application/json",o["Content-MD5"]=i.b64(i.md5(n)),h.call(this,{Action:"name/cos:PutBucketPolicy",method:"PUT",Bucket:e.Bucket,Region:e.Region,action:"policy",body:n,headers:o},(function(e,r){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:r.statusCode,headers:r.headers})}))},deleteBucketPolicy:function(e,t){h.call(this,{Action:"name/cos:DeleteBucketPolicy",method:"DELETE",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"policy"},(function(e,r){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:r.statusCode||e.statusCode,headers:r.headers})}))},putBucketTagging:function(e,t){var r=e.Tagging||{},n=r.TagSet||r.Tags||e.Tags||[];n=i.clone(i.isArray(n)?n:[n]);var o=i.json2xml({Tagging:{TagSet:{Tag:n}}}),a=e.Headers;a["Content-Type"]="application/xml",a["Content-MD5"]=i.b64(i.md5(o)),h.call(this,{Action:"name/cos:PutBucketTagging",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:o,action:"tagging",headers:a},(function(e,r){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:r.statusCode,headers:r.headers})}))},getBucketTagging:function(e,t){h.call(this,{Action:"name/cos:GetBucketTagging",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"tagging"},(function(e,r){if(e)if(404!==e.statusCode||!e.error||"Not Found"!==e.error&&"NoSuchTagSet"!==e.error.Code)t(e);else{var n={Tags:[],statusCode:e.statusCode};e.headers&&(n.headers=e.headers),t(null,n)}else{var o=[];try{o=r.Tagging.TagSet.Tag||[]}catch(e){}o=i.clone(i.isArray(o)?o:[o]),t(null,{Tags:o,statusCode:r.statusCode,headers:r.headers})}}))},deleteBucketTagging:function(e,t){h.call(this,{Action:"name/cos:DeleteBucketTagging",method:"DELETE",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"tagging"},(function(e,r){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:r.statusCode,headers:r.headers})}))},putBucketLifecycle:function(e,t){var r=(e.LifecycleConfiguration||{}).Rules||e.Rules||[];r=i.clone(r);var n=i.json2xml({LifecycleConfiguration:{Rule:r}}),o=e.Headers;o["Content-Type"]="application/xml",o["Content-MD5"]=i.b64(i.md5(n)),h.call(this,{Action:"name/cos:PutBucketLifecycle",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:n,action:"lifecycle",headers:o},(function(e,r){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:r.statusCode,headers:r.headers})}))},getBucketLifecycle:function(e,t){h.call(this,{Action:"name/cos:GetBucketLifecycle",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"lifecycle"},(function(e,r){if(e)if(404===e.statusCode&&e.error&&"NoSuchLifecycleConfiguration"===e.error.Code){var n={Rules:[],statusCode:e.statusCode};e.headers&&(n.headers=e.headers),t(null,n)}else t(e);else{var o=[];try{o=r.LifecycleConfiguration.Rule||[]}catch(e){}o=i.clone(i.isArray(o)?o:[o]),t(null,{Rules:o,statusCode:r.statusCode,headers:r.headers})}}))},deleteBucketLifecycle:function(e,t){h.call(this,{Action:"name/cos:DeleteBucketLifecycle",method:"DELETE",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"lifecycle"},(function(e,r){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:r.statusCode,headers:r.headers})}))},putBucketVersioning:function(e,t){if(e.VersioningConfiguration){var r=e.VersioningConfiguration||{},n=i.json2xml({VersioningConfiguration:r}),o=e.Headers;o["Content-Type"]="application/xml",o["Content-MD5"]=i.b64(i.md5(n)),h.call(this,{Action:"name/cos:PutBucketVersioning",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:n,action:"versioning",headers:o},(function(e,r){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:r.statusCode,headers:r.headers})}))}else t(i.error(new Error("missing param VersioningConfiguration")))},getBucketVersioning:function(e,t){h.call(this,{Action:"name/cos:GetBucketVersioning",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"versioning"},(function(e,r){e||!r.VersioningConfiguration&&(r.VersioningConfiguration={}),t(e,r)}))},putBucketReplication:function(e,t){var r=i.clone(e.ReplicationConfiguration),n=i.json2xml({ReplicationConfiguration:r});n=(n=n.replace(/<(\/?)Rules>/gi,"<$1Rule>")).replace(/<(\/?)Tags>/gi,"<$1Tag>");var o=e.Headers;o["Content-Type"]="application/xml",o["Content-MD5"]=i.b64(i.md5(n)),h.call(this,{Action:"name/cos:PutBucketReplication",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:n,action:"replication",headers:o},(function(e,r){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:r.statusCode,headers:r.headers})}))},getBucketReplication:function(e,t){h.call(this,{Action:"name/cos:GetBucketReplication",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"replication"},(function(e,r){if(e)if(404!==e.statusCode||!e.error||"Not Found"!==e.error&&"ReplicationConfigurationnotFoundError"!==e.error.Code)t(e);else{var n={ReplicationConfiguration:{Rules:[]},statusCode:e.statusCode};e.headers&&(n.headers=e.headers),t(null,n)}else!r.ReplicationConfiguration&&(r.ReplicationConfiguration={}),r.ReplicationConfiguration.Rule&&(r.ReplicationConfiguration.Rules=i.makeArray(r.ReplicationConfiguration.Rule),delete r.ReplicationConfiguration.Rule),t(e,r)}))},deleteBucketReplication:function(e,t){h.call(this,{Action:"name/cos:DeleteBucketReplication",method:"DELETE",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"replication"},(function(e,r){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:r.statusCode,headers:r.headers})}))},putBucketWebsite:function(e,t){if(e.WebsiteConfiguration){var r=i.clone(e.WebsiteConfiguration||{}),n=r.RoutingRules||r.RoutingRule||[];n=i.isArray(n)?n:[n],delete r.RoutingRule,delete r.RoutingRules,n.length&&(r.RoutingRules={RoutingRule:n});var o=i.json2xml({WebsiteConfiguration:r}),a=e.Headers;a["Content-Type"]="application/xml",a["Content-MD5"]=i.b64(i.md5(o)),h.call(this,{Action:"name/cos:PutBucketWebsite",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:o,action:"website",headers:a},(function(e,r){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:r.statusCode,headers:r.headers})}))}else t(i.error(new Error("missing param WebsiteConfiguration")))},getBucketWebsite:function(e,t){h.call(this,{Action:"name/cos:GetBucketWebsite",method:"GET",Bucket:e.Bucket,Region:e.Region,Key:e.Key,headers:e.Headers,action:"website"},(function(e,r){if(e)if(404===e.statusCode&&"NoSuchWebsiteConfiguration"===e.error.Code){var n={WebsiteConfiguration:{},statusCode:e.statusCode};e.headers&&(n.headers=e.headers),t(null,n)}else t(e);else{var o=r.WebsiteConfiguration||{};if(o.RoutingRules){var a=i.clone(o.RoutingRules.RoutingRule||[]);a=i.makeArray(a),o.RoutingRules=a}t(null,{WebsiteConfiguration:o,statusCode:r.statusCode,headers:r.headers})}}))},deleteBucketWebsite:function(e,t){h.call(this,{Action:"name/cos:DeleteBucketWebsite",method:"DELETE",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"website"},(function(e,r){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:r.statusCode,headers:r.headers})}))},putBucketReferer:function(e,t){if(e.RefererConfiguration){var r=i.clone(e.RefererConfiguration||{}),n=r.DomainList||{},o=n.Domains||n.Domain||[];(o=i.isArray(o)?o:[o]).length&&(r.DomainList={Domain:o});var a=i.json2xml({RefererConfiguration:r}),s=e.Headers;s["Content-Type"]="application/xml",s["Content-MD5"]=i.b64(i.md5(a)),h.call(this,{Action:"name/cos:PutBucketReferer",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:a,action:"referer",headers:s},(function(e,r){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:r.statusCode,headers:r.headers})}))}else t(i.error(new Error("missing param RefererConfiguration")))},getBucketReferer:function(e,t){h.call(this,{Action:"name/cos:GetBucketReferer",method:"GET",Bucket:e.Bucket,Region:e.Region,Key:e.Key,headers:e.Headers,action:"referer"},(function(e,r){if(e)if(404===e.statusCode&&"NoSuchRefererConfiguration"===e.error.Code){var n={WebsiteConfiguration:{},statusCode:e.statusCode};e.headers&&(n.headers=e.headers),t(null,n)}else t(e);else{var o=r.RefererConfiguration||{};if(o.DomainList){var a=i.makeArray(o.DomainList.Domain||[]);o.DomainList={Domains:a}}t(null,{RefererConfiguration:o,statusCode:r.statusCode,headers:r.headers})}}))},putBucketDomain:function(e,t){var r=(e.DomainConfiguration||{}).DomainRule||e.DomainRule||[];r=i.clone(r);var n=i.json2xml({DomainConfiguration:{DomainRule:r}}),o=e.Headers;o["Content-Type"]="application/xml",o["Content-MD5"]=i.b64(i.md5(n)),h.call(this,{Action:"name/cos:PutBucketDomain",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:n,action:"domain",headers:o},(function(e,r){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:r.statusCode,headers:r.headers})}))},getBucketDomain:function(e,t){h.call(this,{Action:"name/cos:GetBucketDomain",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"domain"},(function(e,r){if(e)return t(e);var n=[];try{n=r.DomainConfiguration.DomainRule||[]}catch(e){}n=i.clone(i.isArray(n)?n:[n]),t(null,{DomainRule:n,statusCode:r.statusCode,headers:r.headers})}))},deleteBucketDomain:function(e,t){h.call(this,{Action:"name/cos:DeleteBucketDomain",method:"DELETE",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"domain"},(function(e,r){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:r.statusCode,headers:r.headers})}))},putBucketOrigin:function(e,t){var r=(e.OriginConfiguration||{}).OriginRule||e.OriginRule||[];r=i.clone(r);var n=i.json2xml({OriginConfiguration:{OriginRule:r}}),o=e.Headers;o["Content-Type"]="application/xml",o["Content-MD5"]=i.b64(i.md5(n)),h.call(this,{Action:"name/cos:PutBucketOrigin",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:n,action:"origin",headers:o},(function(e,r){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:r.statusCode,headers:r.headers})}))},getBucketOrigin:function(e,t){h.call(this,{Action:"name/cos:GetBucketOrigin",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"origin"},(function(e,r){if(e)return t(e);var n=[];try{n=r.OriginConfiguration.OriginRule||[]}catch(e){}n=i.clone(i.isArray(n)?n:[n]),t(null,{OriginRule:n,statusCode:r.statusCode,headers:r.headers})}))},deleteBucketOrigin:function(e,t){h.call(this,{Action:"name/cos:DeleteBucketOrigin",method:"DELETE",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"origin"},(function(e,r){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:r.statusCode,headers:r.headers})}))},putBucketLogging:function(e,t){var r=i.json2xml({BucketLoggingStatus:e.BucketLoggingStatus||""}),n=e.Headers;n["Content-Type"]="application/xml",n["Content-MD5"]=i.b64(i.md5(r)),h.call(this,{Action:"name/cos:PutBucketLogging",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:r,action:"logging",headers:n},(function(e,r){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:r.statusCode,headers:r.headers})}))},getBucketLogging:function(e,t){h.call(this,{Action:"name/cos:GetBucketLogging",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"logging"},(function(e,r){if(e)return t(e);t(null,{BucketLoggingStatus:r.BucketLoggingStatus,statusCode:r.statusCode,headers:r.headers})}))},putBucketInventory:function(e,t){return a.call(this,"PUT",e,t)},postBucketInventory:function(e,t){return a.call(this,"POST",e,t)},getBucketInventory:function(e,t){h.call(this,{Action:"name/cos:GetBucketInventory",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"inventory",qs:{id:e.Id}},(function(e,r){if(e)return t(e);var n=r.InventoryConfiguration;if(n&&n.OptionalFields&&n.OptionalFields.Field){var o=n.OptionalFields.Field;i.isArray(o)||(o=[o]),n.OptionalFields=o}if(n.Destination&&n.Destination.COSBucketDestination&&n.Destination.COSBucketDestination.Encryption){var a=n.Destination.COSBucketDestination.Encryption;Object.keys(a).indexOf("SSE-COS")>-1&&(a.SSECOS=a["SSE-COS"],delete a["SSE-COS"])}t(null,{InventoryConfiguration:n,statusCode:r.statusCode,headers:r.headers})}))},listBucketInventory:function(e,t){h.call(this,{Action:"name/cos:ListBucketInventory",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"inventory",qs:{"continuation-token":e.ContinuationToken}},(function(e,r){if(e)return t(e);var n=r.ListInventoryConfigurationResult,o=n.InventoryConfiguration||[];o=i.isArray(o)?o:[o],delete n.InventoryConfiguration,i.each(o,(function(e){if(e&&e.OptionalFields&&e.OptionalFields.Field){var t=e.OptionalFields.Field;i.isArray(t)||(t=[t]),e.OptionalFields=t}if(e.Destination&&e.Destination.COSBucketDestination&&e.Destination.COSBucketDestination.Encryption){var r=e.Destination.COSBucketDestination.Encryption;Object.keys(r).indexOf("SSE-COS")>-1&&(r.SSECOS=r["SSE-COS"],delete r["SSE-COS"])}})),n.InventoryConfigurations=o,i.extend(n,{statusCode:r.statusCode,headers:r.headers}),t(null,n)}))},deleteBucketInventory:function(e,t){h.call(this,{Action:"name/cos:DeleteBucketInventory",method:"DELETE",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"inventory",qs:{id:e.Id}},(function(e,r){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:r.statusCode,headers:r.headers})}))},putBucketAccelerate:function(e,t){if(e.AccelerateConfiguration){var r={AccelerateConfiguration:e.AccelerateConfiguration||{}},n=i.json2xml(r),o={"Content-Type":"application/xml"};o["Content-MD5"]=i.b64(i.md5(n)),h.call(this,{Action:"name/cos:PutBucketAccelerate",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:n,action:"accelerate",headers:o},(function(e,r){if(e)return t(e);t(null,{statusCode:r.statusCode,headers:r.headers})}))}else t(i.error(new Error("missing param AccelerateConfiguration")))},getBucketAccelerate:function(e,t){h.call(this,{Action:"name/cos:GetBucketAccelerate",method:"GET",Bucket:e.Bucket,Region:e.Region,action:"accelerate"},(function(e,r){e||!r.AccelerateConfiguration&&(r.AccelerateConfiguration={}),t(e,r)}))},putBucketEncryption:function(e,t){var r=e.ServerSideEncryptionConfiguration||{},n=r.Rule||r.Rules||[],o=i.json2xml({ServerSideEncryptionConfiguration:{Rule:n}}),a=e.Headers;a["Content-Type"]="application/xml",a["Content-MD5"]=i.b64(i.md5(o)),h.call(this,{Action:"name/cos:PutBucketEncryption",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:o,action:"encryption",headers:a},(function(e,r){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:r.statusCode,headers:r.headers})}))},getBucketEncryption:function(e,t){h.call(this,{Action:"name/cos:GetBucketEncryption",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"encryption"},(function(e,r){if(e)if(404===e.statusCode&&"NoSuchEncryptionConfiguration"===e.code){var n={EncryptionConfiguration:{Rules:[]},statusCode:e.statusCode};e.headers&&(n.headers=e.headers),t(null,n)}else t(e);else{var o=i.makeArray(r.EncryptionConfiguration&&r.EncryptionConfiguration.Rule||[]);r.EncryptionConfiguration={Rules:o},t(e,r)}}))},deleteBucketEncryption:function(e,t){h.call(this,{Action:"name/cos:DeleteBucketReplication",method:"DELETE",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"encryption"},(function(e,r){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:r.statusCode,headers:r.headers})}))},getObject:function(e,t){var r=e.Query||{},n=e.QueryString||"",o=i.throttleOnProgress.call(this,0,e.onProgress),a=e.tracker;a&&a.setParams({signStartTime:(new Date).getTime()}),r["response-content-type"]=e.ResponseContentType,r["response-content-language"]=e.ResponseContentLanguage,r["response-expires"]=e.ResponseExpires,r["response-cache-control"]=e.ResponseCacheControl,r["response-content-disposition"]=e.ResponseContentDisposition,r["response-content-encoding"]=e.ResponseContentEncoding,h.call(this,{Action:"name/cos:GetObject",method:"GET",Bucket:e.Bucket,Region:e.Region,Key:e.Key,VersionId:e.VersionId,DataType:e.DataType,headers:e.Headers,qs:r,qsStr:n,rawBody:!0,onDownloadProgress:o,tracker:a},(function(r,n){if(o(null,!0),r){var a=r.statusCode;return e.Headers["If-Modified-Since"]&&a&&304===a?t(null,{NotModified:!0}):t(r)}t(null,{Body:n.body,ETag:i.attr(n.headers,"etag",""),statusCode:n.statusCode,headers:n.headers})}))},headObject:function(e,t){h.call(this,{Action:"name/cos:HeadObject",method:"HEAD",Bucket:e.Bucket,Region:e.Region,Key:e.Key,VersionId:e.VersionId,headers:e.Headers},(function(r,n){if(r){var o=r.statusCode;return e.Headers["If-Modified-Since"]&&o&&304===o?t(null,{NotModified:!0,statusCode:o}):t(r)}n.ETag=i.attr(n.headers,"etag",""),t(null,n)}))},listObjectVersions:function(e,t){var r={};r.prefix=e.Prefix||"",r.delimiter=e.Delimiter,r["key-marker"]=e.KeyMarker,r["version-id-marker"]=e.VersionIdMarker,r["max-keys"]=e.MaxKeys,r["encoding-type"]=e.EncodingType,h.call(this,{Action:"name/cos:GetBucketObjectVersions",ResourceKey:r.prefix,method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,qs:r,action:"versions"},(function(e,r){if(e)return t(e);var n=r.ListVersionsResult||{},o=n.DeleteMarker||[];o=i.isArray(o)?o:[o];var a=n.Version||[];a=i.isArray(a)?a:[a];var s=i.clone(n);delete s.DeleteMarker,delete s.Version,i.extend(s,{DeleteMarkers:o,Versions:a,statusCode:r.statusCode,headers:r.headers}),t(null,s)}))},putObject:function(e,t){var r=this,n=e.ContentLength,o=i.throttleOnProgress.call(r,n,e.onProgress),a=e.Headers;a["Cache-Control"]||a["cache-control"]||(a["Cache-Control"]=""),a["Content-Type"]||a["content-type"]||(a["Content-Type"]=e.Body&&e.Body.type||"");var s=e.UploadAddMetaMd5||r.options.UploadAddMetaMd5||r.options.UploadCheckContentMd5,c=e.tracker;s&&c&&c.setParams({md5StartTime:(new Date).getTime()}),i.getBodyMd5(s,e.Body,(function(s){s&&(c&&c.setParams({md5EndTime:(new Date).getTime()}),r.options.UploadCheckContentMd5&&(a["Content-MD5"]=i.b64(s)),(e.UploadAddMetaMd5||r.options.UploadAddMetaMd5)&&(a["x-cos-meta-md5"]=s)),void 0!==e.ContentLength&&(a["Content-Length"]=e.ContentLength),o(null,!0),h.call(r,{Action:"name/cos:PutObject",TaskId:e.TaskId,method:"PUT",Bucket:e.Bucket,Region:e.Region,Key:e.Key,headers:e.Headers,qs:e.Query,body:e.Body,onProgress:o,tracker:c},(function(a,s){if(a)return o(null,!0),t(a);o({loaded:n,total:n},!0);var c=u({ForcePathStyle:r.options.ForcePathStyle,protocol:r.options.Protocol,domain:r.options.Domain,bucket:e.Bucket,region:r.options.UseAccelerate?"accelerate":e.Region,object:e.Key});c=c.substr(c.indexOf("://")+3),s.Location=c,s.ETag=i.attr(s.headers,"etag",""),t(null,s)}))}),e.onHashProgress)},deleteObject:function(e,t){h.call(this,{Action:"name/cos:DeleteObject",method:"DELETE",Bucket:e.Bucket,Region:e.Region,Key:e.Key,headers:e.Headers,VersionId:e.VersionId,action:e.Recursive?"recursive":""},(function(e,r){if(e){var n=e.statusCode;return n&&404===n?t(null,{BucketNotFound:!0,statusCode:n}):t(e)}t(null,{statusCode:r.statusCode,headers:r.headers})}))},getObjectAcl:function(e,t){var r={};e.VersionId&&(r.versionId=e.VersionId),h.call(this,{Action:"name/cos:GetObjectACL",method:"GET",Bucket:e.Bucket,Region:e.Region,Key:e.Key,headers:e.Headers,qs:r,action:"acl"},(function(e,r){if(e)return t(e);var n=r.AccessControlPolicy||{},o=n.Owner||{},a=n.AccessControlList&&n.AccessControlList.Grant||[];a=i.isArray(a)?a:[a];var c=s(n);delete c.GrantWrite,r.headers&&r.headers["x-cos-acl"]&&(c.ACL=r.headers["x-cos-acl"]),c=i.extend(c,{Owner:o,Grants:a,statusCode:r.statusCode,headers:r.headers}),t(null,c)}))},putObjectAcl:function(e,t){var r=e.Headers,n="";if(e.AccessControlPolicy){var o=i.clone(e.AccessControlPolicy||{}),a=o.Grants||o.Grant;a=i.isArray(a)?a:[a],delete o.Grant,delete o.Grants,o.AccessControlList={Grant:a},n=i.json2xml({AccessControlPolicy:o}),r["Content-Type"]="application/xml",r["Content-MD5"]=i.b64(i.md5(n))}i.each(r,(function(e,t){0===t.indexOf("x-cos-grant-")&&(r[t]=c(r[t]))})),h.call(this,{Action:"name/cos:PutObjectACL",method:"PUT",Bucket:e.Bucket,Region:e.Region,Key:e.Key,action:"acl",headers:r,body:n},(function(e,r){if(e)return t(e);t(null,{statusCode:r.statusCode,headers:r.headers})}))},optionsObject:function(e,t){var r=e.Headers;r.Origin=e.Origin,r["Access-Control-Request-Method"]=e.AccessControlRequestMethod,r["Access-Control-Request-Headers"]=e.AccessControlRequestHeaders,h.call(this,{Action:"name/cos:OptionsObject",method:"OPTIONS",Bucket:e.Bucket,Region:e.Region,Key:e.Key,headers:r},(function(e,r){if(e)return e.statusCode&&403===e.statusCode?t(null,{OptionsForbidden:!0,statusCode:e.statusCode}):t(e);var n=r.headers||{};t(null,{AccessControlAllowOrigin:n["access-control-allow-origin"],AccessControlAllowMethods:n["access-control-allow-methods"],AccessControlAllowHeaders:n["access-control-allow-headers"],AccessControlExposeHeaders:n["access-control-expose-headers"],AccessControlMaxAge:n["access-control-max-age"],statusCode:r.statusCode,headers:r.headers})}))},putObjectCopy:function(e,t){var r=this,n=e.Headers;n["Cache-Control"]||n["cache-control"]||(n["Cache-Control"]="");var o=e.CopySource||"",a=i.getSourceParams.call(this,o);if(a){var s=a.Bucket,c=a.Region,l=decodeURIComponent(a.Key);h.call(this,{Scope:[{action:"name/cos:GetObject",bucket:s,region:c,prefix:l},{action:"name/cos:PutObject",bucket:e.Bucket,region:e.Region,prefix:e.Key}],method:"PUT",Bucket:e.Bucket,Region:e.Region,Key:e.Key,VersionId:e.VersionId,headers:e.Headers},(function(n,o){if(n)return t(n);var a=i.clone(o.CopyObjectResult||{}),s=u({ForcePathStyle:r.options.ForcePathStyle,protocol:r.options.Protocol,domain:r.options.Domain,bucket:e.Bucket,region:e.Region,object:e.Key,isLocation:!0});i.extend(a,{Location:s,statusCode:o.statusCode,headers:o.headers}),t(null,a)}))}else t(i.error(new Error("CopySource format error")))},deleteMultipleObject:function(e,t){var r=e.Objects||[],n=e.Quiet;r=i.isArray(r)?r:[r];var o=i.json2xml({Delete:{Object:r,Quiet:n||!1}}),a=e.Headers;a["Content-Type"]="application/xml",a["Content-MD5"]=i.b64(i.md5(o));var s=i.map(r,(function(t){return{action:"name/cos:DeleteObject",bucket:e.Bucket,region:e.Region,prefix:t.Key}}));h.call(this,{Scope:s,method:"POST",Bucket:e.Bucket,Region:e.Region,body:o,action:"delete",headers:a},(function(e,r){if(e)return t(e);var n=r.DeleteResult||{},o=n.Deleted||[],a=n.Error||[];o=i.isArray(o)?o:[o],a=i.isArray(a)?a:[a];var s=i.clone(n);i.extend(s,{Error:a,Deleted:o,statusCode:r.statusCode,headers:r.headers}),t(null,s)}))},restoreObject:function(e,t){var r=e.Headers;if(e.RestoreRequest){var n=e.RestoreRequest||{},o=i.json2xml({RestoreRequest:n});r["Content-Type"]="application/xml",r["Content-MD5"]=i.b64(i.md5(o)),h.call(this,{Action:"name/cos:RestoreObject",method:"POST",Bucket:e.Bucket,Region:e.Region,Key:e.Key,VersionId:e.VersionId,body:o,action:"restore",headers:r},t)}else t(i.error(new Error("missing param RestoreRequest")))},putObjectTagging:function(e,t){var r=e.Tagging||{},n=r.TagSet||r.Tags||e.Tags||[];n=i.clone(i.isArray(n)?n:[n]);var o=i.json2xml({Tagging:{TagSet:{Tag:n}}}),a=e.Headers;a["Content-Type"]="application/xml",a["Content-MD5"]=i.b64(i.md5(o)),h.call(this,{Action:"name/cos:PutObjectTagging",method:"PUT",Bucket:e.Bucket,Key:e.Key,Region:e.Region,body:o,action:"tagging",headers:a,VersionId:e.VersionId},(function(e,r){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:r.statusCode,headers:r.headers})}))},getObjectTagging:function(e,t){h.call(this,{Action:"name/cos:GetObjectTagging",method:"GET",Key:e.Key,Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"tagging",VersionId:e.VersionId},(function(e,r){if(e)if(404!==e.statusCode||!e.error||"Not Found"!==e.error&&"NoSuchTagSet"!==e.error.Code)t(e);else{var n={Tags:[],statusCode:e.statusCode};e.headers&&(n.headers=e.headers),t(null,n)}else{var o=[];try{o=r.Tagging.TagSet.Tag||[]}catch(e){}o=i.clone(i.isArray(o)?o:[o]),t(null,{Tags:o,statusCode:r.statusCode,headers:r.headers})}}))},deleteObjectTagging:function(e,t){h.call(this,{Action:"name/cos:DeleteObjectTagging",method:"DELETE",Bucket:e.Bucket,Region:e.Region,Key:e.Key,headers:e.Headers,action:"tagging",VersionId:e.VersionId},(function(e,r){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:r.statusCode,headers:r.headers})}))},selectObjectContent:function(e,t){if(!e.SelectType)return t(i.error(new Error("missing param SelectType")));var r=e.SelectRequest||{},n=i.json2xml({SelectRequest:r}),o=e.Headers;o["Content-Type"]="application/xml",o["Content-MD5"]=i.b64(i.md5(n)),h.call(this,{Action:"name/cos:GetObject",method:"POST",Bucket:e.Bucket,Region:e.Region,Key:e.Key,headers:e.Headers,action:"select",qs:{"select-type":e.SelectType},VersionId:e.VersionId,body:n,DataType:"arraybuffer",rawBody:!0},(function(e,r){if(e&&204===e.statusCode)return t(null,{statusCode:e.statusCode});if(e)return t(e);var n=i.parseSelectPayload(r.body);t(null,{statusCode:r.statusCode,headers:r.headers,Body:n.body,Payload:n.payload})}))},appendObject:function(e,t){var r=e.Headers;r["Cache-Control"]||r["cache-control"]||(r["Cache-Control"]=""),r["Content-Type"]||r["content-type"]||(r["Content-Type"]=e.Body&&e.Body.type||""),h.call(this,{Action:"name/cos:AppendObject",method:"POST",Bucket:e.Bucket,Region:e.Region,action:"append",Key:e.Key,body:e.Body,qs:{position:e.Position},headers:e.Headers},(function(e,r){if(e)return t(e);t(null,r)}))},uploadPartCopy:function(e,t){var r=e.CopySource||"",n=i.getSourceParams.call(this,r);if(n){var o=n.Bucket,a=n.Region,s=decodeURIComponent(n.Key);h.call(this,{Scope:[{action:"name/cos:GetObject",bucket:o,region:a,prefix:s},{action:"name/cos:PutObject",bucket:e.Bucket,region:e.Region,prefix:e.Key}],method:"PUT",Bucket:e.Bucket,Region:e.Region,Key:e.Key,VersionId:e.VersionId,qs:{partNumber:e.PartNumber,uploadId:e.UploadId},headers:e.Headers},(function(e,r){if(e)return t(e);var n=i.clone(r.CopyPartResult||{});i.extend(n,{statusCode:r.statusCode,headers:r.headers}),t(null,n)}))}else t(i.error(new Error("CopySource format error")))},multipartInit:function(e,t){var r=this,n=e.Headers,o=e.tracker;n["Cache-Control"]||n["cache-control"]||(n["Cache-Control"]=""),n["Content-Type"]||n["content-type"]||(n["Content-Type"]=e.Body&&e.Body.type||"");var a=e.Body&&(e.UploadAddMetaMd5||r.options.UploadAddMetaMd5);a&&o&&o.setParams({md5StartTime:(new Date).getTime()}),i.getBodyMd5(a,e.Body,(function(n){n&&(e.Headers["x-cos-meta-md5"]=n),a&&o&&o.setParams({md5EndTime:(new Date).getTime()}),h.call(r,{Action:"name/cos:InitiateMultipartUpload",method:"POST",Bucket:e.Bucket,Region:e.Region,Key:e.Key,action:"uploads",headers:e.Headers,qs:e.Query,tracker:o},(function(e,r){return e?(o&&o.parent&&o.parent.setParams({errorNode:"multipartInit"}),t(e)):(r=i.clone(r||{}))&&r.InitiateMultipartUploadResult?t(null,i.extend(r.InitiateMultipartUploadResult,{statusCode:r.statusCode,headers:r.headers})):void t(null,r)}))}),e.onHashProgress)},multipartUpload:function(e,t){var r=this;i.getFileSize("multipartUpload",e,(function(){var n=e.tracker,o=r.options.UploadCheckContentMd5;o&&n&&n.setParams({md5StartTime:(new Date).getTime()}),i.getBodyMd5(o,e.Body,(function(a){a&&(e.Headers["Content-MD5"]=i.b64(a)),o&&n&&n.setParams({md5EndTime:(new Date).getTime()}),n&&n.setParams({partNumber:e.PartNumber}),h.call(r,{Action:"name/cos:UploadPart",TaskId:e.TaskId,method:"PUT",Bucket:e.Bucket,Region:e.Region,Key:e.Key,qs:{partNumber:e.PartNumber,uploadId:e.UploadId},headers:e.Headers,onProgress:e.onProgress,body:e.Body||null,tracker:n},(function(e,r){if(e)return n&&n.parent&&n.parent.setParams({errorNode:"multipartUpload"}),t(e);t(null,{ETag:i.attr(r.headers,"etag",""),statusCode:r.statusCode,headers:r.headers})}))}))}))},multipartComplete:function(e,t){for(var r=this,n=e.UploadId,o=e.Parts,a=e.tracker,s=0,c=o.length;s-1?function(e){var t=e.match(/q-url-param-list.*?(?=&)/g)[0],r="q-url-param-list="+encodeURIComponent(t.replace(/q-url-param-list=/,"")).toLowerCase(),n=new RegExp(t,"g");return e.replace(n,r)}(r.Authorization):"sign="+encodeURIComponent(r.Authorization)),r.SecurityToken&&(n+="&x-cos-security-token="+r.SecurityToken),r.ClientIP&&(n+="&clientIP="+r.ClientIP),r.ClientUA&&(n+="&clientUA="+r.ClientUA),r.Token&&(n+="&token="+r.Token),a&&(n+="&"+a),setTimeout((function(){t(null,{Url:n})}))}}));return p?(s+="?"+p.Authorization+(p.SecurityToken?"&x-cos-security-token="+p.SecurityToken:""),a&&(s+="&"+a)):a&&(s+="?"+a),s},getAuth:function(e){return i.getAuth({SecretId:e.SecretId||this.options.SecretId||"",SecretKey:e.SecretKey||this.options.SecretKey||"",Bucket:e.Bucket,Region:e.Region,Method:e.Method,Key:e.Key,Query:e.Query,Headers:e.Headers,Expires:e.Expires,UseRawKey:this.options.UseRawKey,SystemClockOffset:this.options.SystemClockOffset})}};e.exports.init=function(e,t){t.transferToTaskMethod(g,"putObject"),i.each(g,(function(t,r){e.prototype[r]=i.apiWrapper(r,t),function(e,t,r){i.each(["Cors","Acl"],(function(n){if(e.slice(-n.length)===n){var o=e.slice(0,-n.length)+n.toUpperCase(),a=i.apiWrapper(e,t);r[o]=function(){a.apply(this,arguments)}}}))}(r,t,e.prototype)}))}},function(e,t,r){var n=r(0),o=function(e){switch(n(e)){case"string":return e;case"boolean":return e?"true":"false";case"number":return isFinite(e)?e:"";default:return""}},i=function(e,t,r){var n={},o=t.getAllResponseHeaders();return o&&o.length>0&&o.trim().split("\n").forEach((function(e){if(e){var t=e.indexOf(":"),r=e.substr(0,t).trim().toLowerCase(),o=e.substr(t+1).trim();n[r]=o}})),{error:e,statusCode:t.status,statusMessage:t.statusText,headers:n,body:r}},a=function(e,t){return t||"text"!==t?e.response:e.responseText};e.exports=function(e,t){var r,s,c,u,l=(e.method||"GET").toUpperCase(),d=e.url;if(e.qs){var p=(r=e.qs,s=s||"&",c=c||"=",null===r&&(r=void 0),"object"===n(r)?Object.keys(r).map((function(e){var t=encodeURIComponent(o(e))+c;return Array.isArray(r[e])?r[e].map((function(e){return t+encodeURIComponent(o(e))})).join(s):t+encodeURIComponent(o(r[e]))})).filter(Boolean).join(s):u?encodeURIComponent(o(u))+c+encodeURIComponent(o(r)):"");p&&(d+=(-1===d.indexOf("?")?"?":"&")+p)}var f=new XMLHttpRequest;if(f.open(l,d,!0),f.responseType=e.dataType||"text",e.xhrFields)for(var h in e.xhrFields)f[h]=e.xhrFields[h];var m=e.headers;if(m)for(var g in m)m.hasOwnProperty(g)&&"content-length"!==g.toLowerCase()&&"user-agent"!==g.toLowerCase()&&"origin"!==g.toLowerCase()&&"host"!==g.toLowerCase()&&f.setRequestHeader(g,m[g]);return e.onProgress&&f.upload&&(f.upload.onprogress=e.onProgress),e.onDownloadProgress&&(f.onprogress=e.onDownloadProgress),e.timeout&&(f.timeout=e.timeout),f.ontimeout=function(e){var r=new Error("timeout");t(i(r,f))},f.onload=function(){t(i(null,f,a(f,e.dataType)))},f.onerror=function(r){var n=a(f,e.dataType);if(n)t(i(null,f,n));else{var o=f.statusText;o||0!==f.status||(o=new Error("CORS blocked or network error")),t(i(o,f,n))}},f.send(e.body||""),f}},function(e,t,r){var n=r(0),o=r(8),i=r(30),a=r(7).EventProxy,s=r(1),c=r(5);function u(e,t){var r=e.TaskId,n=e.Bucket,c=e.Region,u=e.Key,p=e.StorageClass,f=this,h={},m=e.FileSize,g=e.SliceSize,y=Math.ceil(m/g),v=0,b=s.throttleOnProgress.call(f,m,e.onHashProgress),C=function(t,r){var n=t.length;if(0===n)return r(null,!0);if(n>y)return r(null,!1);if(n>1&&Math.max(t[0].Size,t[1].Size)!==g)return r(null,!1);!function o(i){if(i=a.length)k.emit("has_and_check_upload_id",t);else{var p=a[l];if(!s.isInArray(t,p))return o.removeUploadId.call(f,p),void i(l+1);o.using[p]?i(l+1):d.call(f,{Bucket:n,Region:c,Key:u,UploadId:p,tracker:e.tracker},(function(e,t){f._isRunningTask(r)&&(e?(o.removeUploadId.call(f,p),i(l+1)):k.emit("upload_id_available",{UploadId:p,PartList:t.PartList}))}))}}(0)}else k.emit("has_and_check_upload_id",t)})),k.on("get_remote_upload_id_list",(function(){l.call(f,{Bucket:n,Region:c,Key:u,tracker:e.tracker},(function(t,i){if(f._isRunningTask(r)){if(t)return k.emit("error",t);var a=s.filter(i.UploadList,(function(e){return e.Key===u&&(!p||e.StorageClass.toUpperCase()===p.toUpperCase())})).reverse().map((function(e){return e.UploadId||e.UploadID}));if(a.length)k.emit("seek_local_avail_upload_id",a);else{var c,l=o.getFileId(e.Body,e.ChunkSize,n,u);l&&(c=o.getUploadIdList.call(f,l))&&s.each(c,(function(e){o.removeUploadId.call(f,e)})),k.emit("no_available_upload_id")}}}))})),k.emit("get_remote_upload_id_list")}function l(e,t){var r=this,n=[],o={Bucket:e.Bucket,Region:e.Region,Prefix:e.Key,calledBySdk:e.calledBySdk||"sliceUploadFile",tracker:e.tracker};!function e(){r.multipartList(o,(function(r,i){if(r)return t(r);n.push.apply(n,i.Upload||[]),"true"===i.IsTruncated?(o.KeyMarker=i.NextKeyMarker,o.UploadIdMarker=i.NextUploadIdMarker,e()):t(null,{UploadList:n})}))}()}function d(e,t){var r=this,n=[],o={Bucket:e.Bucket,Region:e.Region,Key:e.Key,UploadId:e.UploadId,calledBySdk:"sliceUploadFile",tracker:e.tracker};!function e(){r.multipartListPart(o,(function(r,i){if(r)return t(r);n.push.apply(n,i.Part||[]),"true"===i.IsTruncated?(o.PartNumberMarker=i.NextPartNumberMarker,e()):t(null,{PartList:n})}))}()}function p(e,t){var r=this,n=e.TaskId,o=e.Bucket,a=e.Region,c=e.Key,u=e.UploadData,l=e.FileSize,d=e.SliceSize,p=Math.min(e.AsyncLimit||r.options.ChunkParallelLimit||1,256),h=e.Body,m=Math.ceil(l/d),g=0,y=e.ServerSideEncryption,v=e.Headers,b=s.filter(u.PartList,(function(e){return e.Uploaded&&(g+=e.PartNumber>=m&&l%d||d),!e.Uploaded})),C=e.onProgress;i.eachLimit(b,p,(function(t,i){if(r._isRunningTask(n)){var s=t.PartNumber,p=Math.min(l,t.PartNumber*d)-(t.PartNumber-1)*d,m=0;f.call(r,{TaskId:n,Bucket:o,Region:a,Key:c,SliceSize:d,FileSize:l,PartNumber:s,ServerSideEncryption:y,Body:h,UploadData:u,Headers:v,onProgress:function(e){g+=e.loaded-m,m=e.loaded,C({loaded:g,total:l})},tracker:e.tracker},(function(e,o){r._isRunningTask(n)&&(e||o.ETag||(e='get ETag error, please add "ETag" to CORS ExposeHeader setting.( 获取ETag失败,请在CORS ExposeHeader设置中添加ETag,请参考文档:https://cloud.tencent.com/document/product/436/13318 )'),e?g-=m:(g+=p-m,t.ETag=o.ETag),C({loaded:g,total:l}),i(e||null,o))}))}}),(function(e){if(r._isRunningTask(n))return e?t(e):void t(null,{UploadId:u.UploadId,SliceList:u.PartList})}))}function f(e,t){var r=this,n=e.TaskId,o=e.Bucket,a=e.Region,c=e.Key,u=e.FileSize,l=e.Body,d=1*e.PartNumber,p=e.SliceSize,f=e.ServerSideEncryption,h=e.UploadData,m=e.Headers||{},g=r.options.ChunkRetryTimes+1,y=p*(d-1),v=p,b=y+p;b>u&&(v=(b=u)-y);var C=["x-cos-traffic-limit","x-cos-mime-limit"],k={};s.each(m,(function(e,t){C.indexOf(t)>-1&&(k[t]=e)}));var S=h.PartList[d-1];i.retry(g,(function(t){r._isRunningTask(n)&&s.fileSlice(l,y,b,!0,(function(i){r.multipartUpload({TaskId:n,Bucket:o,Region:a,Key:c,ContentLength:v,PartNumber:d,UploadId:h.UploadId,ServerSideEncryption:f,Body:i,Headers:k,onProgress:e.onProgress,calledBySdk:"sliceUploadFile",tracker:e.tracker},(function(e,o){if(r._isRunningTask(n))return e?t(e):(S.Uploaded=!0,t(null,o))}))}))}),(function(e,o){if(r._isRunningTask(n))return t(e,o)}))}function h(e,t){var r=e.Bucket,n=e.Region,o=e.Key,a=e.UploadId,s=e.SliceList,c=this,u=this.options.ChunkRetryTimes+1,l=e.Headers,d=s.map((function(e){return{PartNumber:e.PartNumber,ETag:e.ETag}}));i.retry(u,(function(t){c.multipartComplete({Bucket:r,Region:n,Key:o,UploadId:a,Parts:d,Headers:l,calledBySdk:"sliceUploadFile",tracker:e.tracker},t)}),(function(e,r){t(e,r)}))}function m(e,t){var r=e.Bucket,n=e.Region,o=e.Key,a=e.AbortArray,s=e.AsyncLimit||1,c=this,u=0,l=new Array(a.length);i.eachLimit(a,s,(function(t,i){var a=u;if(o&&o!==t.Key)return l[a]={error:{KeyNotMatch:!0}},void i(null);var s=t.UploadId||t.UploadID;c.multipartAbort({Bucket:r,Region:n,Key:t.Key,Headers:e.Headers,UploadId:s},(function(e){var o={Bucket:r,Region:n,Key:t.Key,UploadId:s};l[a]={error:e,task:o},i(null)})),u++}),(function(e){if(e)return t(e);for(var r=[],n=[],o=0,i=l.length;oo?"sliceUploadFile":"putObject",h=e.onFileFinish;i.push({api:f,params:e,callback:function(r,n){e.tracker&&e.tracker.formatResult(r,n),h&&h(r,n,l),t&&t(r,n)}}),r._addTasks(i)},uploadFiles:function(e,t){var r=this,o=void 0===e.SliceSize?r.options.SliceSize:e.SliceSize,i=0,a=0,u=s.throttleOnProgress.call(r,a,e.onProgress),l=e.files.length,d=e.onFileFinish,p=Array(l),f=function(e,r,n){u(null,!0),d&&d(e,r,n),p[n.Index]={options:n,error:e,data:r},--l<=0&&t&&t(null,{files:p})},h=[];s.each(e.files,(function(e,t){!function(){var l=e.Body,d=l.size||l.length||0,p={Index:t,TaskId:""};if(!r.options.UseRawKey&&e.Key&&"/"===e.Key.substr(0,1)&&(e.Key=e.Key.substr(1)),i+=d,r.options.EnableTracker){var m=r.options.UseAccelerate||"string"==typeof r.options.Domain&&r.options.Domain.includes("accelerate.");e.tracker=new c({Beacon:r.options.Beacon,bucket:e.Bucket,region:e.Region,apiName:"uploadFiles",fileKey:e.Key,fileSize:d,accelerate:m,deepTracker:r.options.DeepTracker,customId:r.options.CustomId,delay:r.options.TrackerDelay})}s.each(e,(function(e,t){"object"!==n(e)&&"function"!=typeof e&&(p[t]=e)}));var g=e.onTaskReady;e.onTaskReady=function(e){p.TaskId=e,g&&g(e)};var y=0,v=e.onProgress;e.onProgress=function(e){a=a-y+e.loaded,y=e.loaded,v&&v(e),u({loaded:a,total:i})};var b=d>o?"sliceUploadFile":"putObject",C=e.onFileFinish;h.push({api:b,params:e,callback:function(t,r){e.tracker&&e.tracker.formatResult(t,r),C&&C(t,r),f&&f(t,r,p)}})}()})),r._addTasks(h)},sliceCopyFile:function(e,t){var r=new a,n=this,c=e.Bucket,u=e.Region,l=e.Key,p=e.CopySource,f=s.getSourceParams.call(this,p);if(f){var h=f.Bucket,m=f.Region,y=decodeURIComponent(f.Key),v=void 0===e.CopySliceSize?n.options.CopySliceSize:e.CopySliceSize;v=Math.max(0,v);var b,C,k=e.CopyChunkSize||this.options.CopyChunkSize,S=this.options.CopyChunkParallelLimit,T=this.options.ChunkRetryTimes+1,w=0,R=0,x={},E={},A={};r.on("copy_slice_complete",(function(r){var a={};s.each(e.Headers,(function(e,t){0===t.toLowerCase().indexOf("x-cos-meta-")&&(a[t]=e)}));var d=s.map(r.PartList,(function(e){return{PartNumber:e.PartNumber,ETag:e.ETag}}));i.retry(T,(function(e){n.multipartComplete({Bucket:c,Region:u,Key:l,UploadId:r.UploadId,Parts:d,calledBySdk:"sliceCopyFile"},e)}),(function(e,n){if(o.removeUsing(r.UploadId),e)return C(null,!0),t(e);o.removeUploadId(r.UploadId),C({loaded:b,total:b},!0),t(null,n)}))})),r.on("get_copy_data_finish",(function(e){var a=o.getCopyFileId(p,x,k,c,l);a&&o.saveUploadId(a,e.UploadId,n.options.UploadIdCacheLimit),o.setUsing(e.UploadId);var d=s.filter(e.PartList,(function(e){return e.Uploaded&&(R+=e.PartNumber>=w&&b%k||k),!e.Uploaded}));i.eachLimit(d,S,(function(t,r){var o=t.PartNumber,a=t.CopySourceRange,s=t.end-t.start;i.retry(T,(function(t){g.call(n,{Bucket:c,Region:u,Key:l,CopySource:p,UploadId:e.UploadId,PartNumber:o,CopySourceRange:a},t)}),(function(e,n){if(e)return r(e);C({loaded:R+=s,total:b}),t.ETag=n.ETag,r(e||null,n)}))}),(function(n){if(n)return o.removeUsing(e.UploadId),C(null,!0),t(n);r.emit("copy_slice_complete",e)}))})),r.on("get_chunk_size_finish",(function(){var i=function(){n.multipartInit({Bucket:c,Region:u,Key:l,Headers:A},(function(n,o){if(n)return t(n);e.UploadId=o.UploadId,r.emit("get_copy_data_finish",{UploadId:e.UploadId,PartList:e.PartList})}))},a=o.getCopyFileId(p,x,k,c,l),f=o.getUploadIdList(a);if(!a||!f)return i();!function t(a){if(a>=f.length)return i();var p=f[a];if(o.using[p])return t(a+1);d.call(n,{Bucket:c,Region:u,Key:l,UploadId:p},(function(n,i){if(n)o.removeUploadId(p),t(a+1);else{if(o.using[p])return t(a+1);var c={},u=0;s.each(i.PartList,(function(e){var t=parseInt(e.Size),r=u+t-1;c[e.PartNumber+"|"+u+"|"+r]=e.ETag,u+=t})),s.each(e.PartList,(function(e){var t=c[e.PartNumber+"|"+e.start+"|"+e.end];t&&(e.ETag=t,e.Uploaded=!0)})),r.emit("get_copy_data_finish",{UploadId:p,PartList:e.PartList})}}))}(0)})),r.on("get_file_size_finish",(function(){if(function(){for(var t=[1,2,4,8,16,32,64,128,256,512,1024,2048,4096,5120],r=1048576,o=0;o11&&(E[t]=e)})),r.emit("get_file_size_finish")}else t(s.error(new Error('get Content-Length error, please add "Content-Length" to CORS ExposeHeader setting.( 获取Content-Length失败,请在CORS ExposeHeader设置中添加Content-Length,请参考文档:https://cloud.tencent.com/document/product/436/13318 )')))}))}else t(s.error(new Error("CopySource format error")))}};e.exports.init=function(e,t){t.transferToTaskMethod(y,"sliceUploadFile"),s.each(y,(function(t,r){e.prototype[r]=s.apiWrapper(r,t)}))}},function(e,t){var r={eachLimit:function(e,t,r,n){if(n=n||function(){},!e.length||t<=0)return n();var o=0,i=0,a=0;!function s(){if(o>=e.length)return n();for(;a=e.length?n():s())}))}()},retry:function(e,t,r){e<1?r():function n(o){t((function(t,i){t&&ot?1:-1}))}var p,f=["cache-control","content-disposition","content-encoding","content-length","content-md5","expect","expires","host","if-match","if-modified-since","if-none-match","if-unmodified-since","origin","range","transfer-encoding","pic-operations"],h=function(e,t,r){var n=t/8,o=e.slice(r,r+n);return new Uint8Array(o).reverse(),new{8:Uint8Array,16:Uint16Array,32:Uint32Array}[t](o)[0]},g=function(e,t,r,n){var o=e.slice(t,r),a="";return new Uint8Array(o).forEach((function(e){a+=String.fromCharCode(e)})),n&&(a=decodeURIComponent(escape(a))),a},m=function(){},y=function(e){var t={};for(var r in e)e.hasOwnProperty(r)&&void 0!==e[r]&&null!==e[r]&&(t[r]=e[r]);return t},v=(p=function(e,t){e=e.split("."),t=t.split(".");for(var r=0;rparseInt(t[r])?1:-1;return 0},function(e){if(!e)return!1;var t=(e.match(/Chrome\/([.\d]+)/)||[])[1],r=(e.match(/QBCore\/([.\d]+)/)||[])[1],n=(e.match(/QQBrowser\/([.\d]+)/)||[])[1];return t&&p(t,"53.0.2785.116")<0&&r&&p(r,"3.53.991.400")<0&&n&&p(n,"9.0.2524.400")<=0||!1}("undefined"!=typeof navigator&&navigator.userAgent)),k=1048576;function C(e){return w(e,(function(e){return"object"===n(e)&&null!==e?C(e):e}))}function b(e,t){return T(t,(function(r,n){e[n]=t[n]})),e}function S(e){return e instanceof Array}function T(e,t){for(var r in e)e.hasOwnProperty(r)&&t(e[r],r)}function w(e,t){var r=S(e)?[]:{};for(var n in e)e.hasOwnProperty(n)&&(r[n]=t(e[n],n));return r}var R=function(e,t){var r=t.Bucket,n=t.Region,o=t.Key,a=this.options.Domain,i=!a||"string"==typeof a&&a.indexOf("{Bucket}")>-1,s=!a||"string"==typeof a&&a.indexOf("{Region}")>-1;if(e.indexOf("Bucket")>-1||"deleteMultipleObject"===e||"multipartList"===e||"listObjectVersions"===e){if(i&&!r)return"Bucket";if(s&&!n)return"Region"}else if(e.indexOf("Object")>-1||e.indexOf("multipart")>-1||"sliceUploadFile"===e||"abortUploadTask"===e||"uploadFile"===e){if(i&&!r)return"Bucket";if(s&&!n)return"Region";if(!o)return"Key"}return!1},x=function(e,t){if(t=b({},t),"getAuth"!==e&&"getV4Auth"!==e&&"getObjectUrl"!==e){var r=t.Headers||{};if(t&&"object"===n(t)){!function(){for(var e in t)t.hasOwnProperty(e)&&e.indexOf("x-cos-")>-1&&(r[e]=t[e])}();D.each({"x-cos-mfa":"MFA","Content-MD5":"ContentMD5","Content-Length":"ContentLength","Content-Type":"ContentType",Expect:"Expect",Expires:"Expires","Cache-Control":"CacheControl","Content-Disposition":"ContentDisposition","Content-Encoding":"ContentEncoding",Range:"Range","If-Modified-Since":"IfModifiedSince","If-Unmodified-Since":"IfUnmodifiedSince","If-Match":"IfMatch","If-None-Match":"IfNoneMatch","x-cos-copy-source":"CopySource","x-cos-copy-source-Range":"CopySourceRange","x-cos-metadata-directive":"MetadataDirective","x-cos-copy-source-If-Modified-Since":"CopySourceIfModifiedSince","x-cos-copy-source-If-Unmodified-Since":"CopySourceIfUnmodifiedSince","x-cos-copy-source-If-Match":"CopySourceIfMatch","x-cos-copy-source-If-None-Match":"CopySourceIfNoneMatch","x-cos-acl":"ACL","x-cos-grant-read":"GrantRead","x-cos-grant-write":"GrantWrite","x-cos-grant-full-control":"GrantFullControl","x-cos-grant-read-acp":"GrantReadAcp","x-cos-grant-write-acp":"GrantWriteAcp","x-cos-storage-class":"StorageClass","x-cos-traffic-limit":"TrafficLimit","x-cos-mime-limit":"MimeLimit","x-cos-server-side-encryption-customer-algorithm":"SSECustomerAlgorithm","x-cos-server-side-encryption-customer-key":"SSECustomerKey","x-cos-server-side-encryption-customer-key-MD5":"SSECustomerKeyMD5","x-cos-server-side-encryption":"ServerSideEncryption","x-cos-server-side-encryption-cos-kms-key-id":"SSEKMSKeyId","x-cos-server-side-encryption-context":"SSEContext","Pic-Operations":"PicOperations"},(function(e,n){void 0!==t[e]&&(r[n]=t[e])})),t.Headers=y(r)}}return t},A=function(e){return Date.now()+(e||0)},E="object"===("undefined"==typeof navigator?"undefined":n(navigator))&&!!navigator.userAgent.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/),B="object"===("undefined"==typeof navigator?"undefined":n(navigator))&&/\sQQ/i.test(navigator.userAgent),D={noop:m,formatParams:x,apiWrapper:function(e,t){return function(r,n){var o,a=this;if("function"==typeof r&&(n=r,r={}),r=x(e,r),a.options.EnableReporter)if("sliceUploadFile"===r.calledBySdk||"sliceCopyFile"===r.calledBySdk)o=r.tracker&&r.tracker.generateSubTracker({apiName:e});else if(["uploadFile","uploadFiles"].includes(e))o=null;else{var i=0;r.Body&&(i="string"==typeof r.Body?r.Body.length:r.Body.size||r.Body.byteLength||0);var s=a.options.UseAccelerate||"string"==typeof a.options.Domain&&a.options.Domain.includes("accelerate.");o=new u({Beacon:a.options.BeaconReporter,clsReporter:a.options.ClsReporter,bucket:r.Bucket,region:r.Region,apiName:e,realApi:e,accelerate:s,fileKey:r.Key,fileSize:i,deepTracker:a.options.DeepTracker,customId:a.options.CustomId,delay:a.options.TrackerDelay})}r.tracker=o;var c=function(e){return e&&e.headers&&(e.headers["x-cos-request-id"]&&(e.RequestId=e.headers["x-cos-request-id"]),e.headers["x-ci-request-id"]&&(e.RequestId=e.headers["x-ci-request-id"]),e.headers["x-cos-version-id"]&&(e.VersionId=e.headers["x-cos-version-id"]),e.headers["x-cos-delete-marker"]&&(e.DeleteMarker=e.headers["x-cos-delete-marker"])),e},l=function(e,t){o&&o.report(e,t),n&&n(c(e),c(t))},d=function(){if("getService"!==e&&"abortUploadTask"!==e){var t=R.call(a,e,r);if(t)return"missing param "+t;if(r.Region){if(a.options.CompatibilityMode){if(!/^([a-z\d-.]+)$/.test(r.Region))return"Region format error."}else{if(r.Region.indexOf("cos.")>-1)return'param Region should not be start with "cos."';if(!/^([a-z\d-]+)$/.test(r.Region))return"Region format error."}!a.options.CompatibilityMode&&-1===r.Region.indexOf("-")&&"yfb"!==r.Region&&"default"!==r.Region&&r.Region}if(r.Bucket){if(!/^([a-z\d-]+)-(\d+)$/.test(r.Bucket))if(r.AppId)r.Bucket=r.Bucket+"-"+r.AppId;else{if(!a.options.AppId)return'Bucket should format as "test-1250000000".';r.Bucket=r.Bucket+"-"+a.options.AppId}r.AppId&&delete r.AppId}!a.options.UseRawKey&&r.Key&&"/"===r.Key.substr(0,1)&&(r.Key=r.Key.substr(1))}}(),p=["getAuth","getObjectUrl"].includes(e);if("function"==typeof Promise&&!p&&!n)return new Promise((function(e,o){if(n=function(t,r){t?o(t):e(r)},d)return l(D.error(new Error(d)));t.call(a,r,l)}));if(d)return l(D.error(new Error(d)));var f=t.call(a,r,l);return p?f:void 0}},xml2json:i,json2xml:s,md5:o,clearKey:y,fileSlice:function(e,t,r,n,o){var a;if(e.slice?a=e.slice(t,r):e.mozSlice?a=e.mozSlice(t,r):e.webkitSlice&&(a=e.webkitSlice(t,r)),n&&v){var i=new FileReader;i.onload=function(e){a=null,o(new Blob([i.result]))},i.readAsArrayBuffer(a)}else o(a)},getBodyMd5:function(e,t,r,n){r=r||m,e?"string"==typeof t?r(D.md5(t,!0)):Blob&&t instanceof Blob?D.getFileMd5(t,(function(e,t){r(t)}),n):r():r()},getFileMd5:function(e,t,r){var n=e.size,a=0,i=o.getCtx();!function o(s){if(s>=n){var c=i.digest("hex");t(null,c)}else{var u=Math.min(n,s+k);D.fileSlice(e,s,u,!1,(function(e){!function(e,t){var r,n=new FileReader;FileReader.prototype.readAsBinaryString?(r=FileReader.prototype.readAsBinaryString,n.onload=function(){t(this.result)}):FileReader.prototype.readAsArrayBuffer&&(r=function(e){var r="",n=new FileReader;n.onload=function(e){for(var o=new Uint8Array(n.result),a=o.byteLength,i=0;i-1||f.indexOf(n)>-1)&&(t[r]=e[r])}return t}(C(e.Headers||e.headers||{})),u=e.Key||"";e.UseRawKey?t=e.Pathname||e.pathname||"/"+u:0!==(t=e.Pathname||e.pathname||u).indexOf("/")&&(t="/"+t);var l=!1!==e.ForceSignHost;if(!c.Host&&!c.host&&e.Bucket&&e.Region&&l&&(c.Host=e.Bucket+".cos."+e.Region+".myqcloud.com"),!r)throw new Error("missing param SecretId");if(!n)throw new Error("missing param SecretKey");var p=Math.round(A(e.SystemClockOffset)/1e3)-1,h=p,g=e.Expires||e.expires;h+=void 0===g?900:1*g||0;var m=r,y=o||p+";"+h,v=o||p+";"+h,k=d(c,!0).join(";").toLowerCase(),b=d(s,!0).join(";").toLowerCase(),S=a.HmacSHA1(v,n).toString(),T=[i,t,D.obj2str(s,!0),D.obj2str(c,!0),""].join("\n"),w=["sha1",y,a.SHA1(T).toString(),""].join("\n");return["q-sign-algorithm=sha1","q-ak="+m,"q-sign-time="+y,"q-key-time="+v,"q-header-list="+k,"q-url-param-list="+b,"q-signature="+a.HmacSHA1(w,S).toString()].join("&")},parseSelectPayload:function(e){for(var t={},r=g(e),n={records:[]};e.byteLength;){var o,a=h(e,32,0),i=h(e,32,4),s=a-i-16,c=0;for(e=e.slice(12);c=0))throw new B(A,new Error(e.tagName+"@"+r));for(var o=t.length-1;n"==e&&">")||"&"==e&&"&"||'"'==e&&"""||"&#"+e.charCodeAt()+";"}function H(e,t){if(t(e))return!0;if(e=e.firstChild)do{if(H(e,t))return!0}while(e=e.nextSibling)}function j(){this.ownerDocument=this}function F(e,t,r,n){e&&e._inc++,r.namespaceURI===a.XMLNS&&delete t._nsMap[r.prefix?r.localName:""]}function K(e,t,r){if(e&&e._inc){e._inc++;var n=t.childNodes;if(r)n[n.length++]=r;else{for(var o=t.firstChild,a=0;o;)n[a++]=o,o=o.nextSibling;n.length=a,delete n[n.length]}}}function z(e,t){var r=t.previousSibling,n=t.nextSibling;return r?r.nextSibling=n:e.firstChild=n,n?n.previousSibling=r:e.lastChild=r,t.parentNode=null,t.previousSibling=null,t.nextSibling=null,K(e.ownerDocument,e),t}function V(e){return e&&e.nodeType===M.DOCUMENT_TYPE_NODE}function G(e){return e&&e.nodeType===M.ELEMENT_NODE}function W(e){return e&&e.nodeType===M.TEXT_NODE}function Q(e,t){var r=e.childNodes||[];if(o(r,G)||V(t))return!1;var n=o(r,V);return!(t&&n&&r.indexOf(n)>r.indexOf(t))}function X(e,t){var r=e.childNodes||[];if(o(r,(function(e){return G(e)&&e!==t})))return!1;var n=o(r,V);return!(t&&n&&r.indexOf(n)>r.indexOf(t))}function $(e,t,r){if(!function(e){return e&&(e.nodeType===M.DOCUMENT_NODE||e.nodeType===M.DOCUMENT_FRAGMENT_NODE||e.nodeType===M.ELEMENT_NODE)}(e))throw new B(x,"Unexpected parent node type "+e.nodeType);if(r&&r.parentNode!==e)throw new B(A,"child not in parent");if(!function(e){return e&&(G(e)||W(e)||V(e)||e.nodeType===M.DOCUMENT_FRAGMENT_NODE||e.nodeType===M.COMMENT_NODE||e.nodeType===M.PROCESSING_INSTRUCTION_NODE)}(t)||V(t)&&e.nodeType!==M.DOCUMENT_NODE)throw new B(x,"Unexpected node type "+t.nodeType+" for parent node type "+e.nodeType)}function J(e,t,r){var n=e.childNodes||[],a=t.childNodes||[];if(t.nodeType===M.DOCUMENT_FRAGMENT_NODE){var i=a.filter(G);if(i.length>1||o(a,W))throw new B(x,"More than one element or text in fragment");if(1===i.length&&!Q(e,r))throw new B(x,"Element in fragment can not be inserted before doctype")}if(G(t)&&!Q(e,r))throw new B(x,"Only one element can be added and only after doctype");if(V(t)){if(o(n,V))throw new B(x,"Only one doctype is allowed");var s=o(n,G);if(r&&n.indexOf(s)1||o(a,W))throw new B(x,"More than one element or text in fragment");if(1===i.length&&!X(e,r))throw new B(x,"Element in fragment can not be inserted before doctype")}if(G(t)&&!X(e,r))throw new B(x,"Only one element can be added and only after doctype");if(V(t)){if(o(n,(function(e){return V(e)&&e!==r})))throw new B(x,"Only one doctype is allowed");var s=o(n,G);if(r&&n.indexOf(s)=0;T--){if(""===(w=o[T]).prefix&&w.namespace===e.namespaceURI){d=w.namespace;break}}if(d!==e.namespaceURI)for(T=o.length-1;T>=0;T--){var w;if((w=o[T]).namespace===e.namespaceURI){w.prefix&&(l=w.prefix+":"+u);break}}}t.push("<",l);for(var R=0;R"),r&&/^script$/i.test(u))for(;c;)c.data?t.push(c.data):me(c,t,r,n,o.slice()),c=c.nextSibling;else for(;c;)me(c,t,r,n,o.slice()),c=c.nextSibling;t.push("")}else t.push("/>");return;case C:case S:for(c=e.firstChild;c;)me(c,t,r,n,o.slice()),c=c.nextSibling;return;case f:return ge(t,e.name,e.value);case h:return t.push(e.data.replace(/[<&>]/g,q));case g:return t.push("");case k:return t.push("\x3c!--",e.data,"--\x3e");case b:var B=e.publicId,D=e.systemId;if(t.push("");else if(D&&"."!=D)t.push(" SYSTEM ",D,">");else{var N=e.internalSubset;N&&t.push(" [",N,"]"),t.push(">")}return;case v:return t.push("");case m:return t.push("&",e.nodeName,";");default:t.push("??",e.nodeName)}}function ye(e,t,r){var n;switch(t.nodeType){case p:(n=t.cloneNode(!1)).ownerDocument=e;case S:break;case f:r=!0}if(n||(n=t.cloneNode(!1)),n.ownerDocument=e,n.parentNode=null,r)for(var o=t.firstChild;o;)n.appendChild(ye(e,o,r)),o=o.nextSibling;return n}function ve(e,t,r){var n=new t.constructor;for(var o in t)if(Object.prototype.hasOwnProperty.call(t,o)){var a=t[o];"object"!=typeof a&&a!=n[o]&&(n[o]=a)}switch(t.childNodes&&(n.childNodes=new D),n.ownerDocument=e,n.nodeType){case p:var i=t.attributes,s=n.attributes=new I,c=i.length;s._ownerElement=n;for(var u=0;u=0&&e0},lookupPrefix:function(e){for(var t=this;t;){var r=t._nsMap;if(r)for(var n in r)if(Object.prototype.hasOwnProperty.call(r,n)&&r[n]===e)return n;t=t.nodeType==f?t.ownerDocument:t.parentNode}return null},lookupNamespaceURI:function(e){for(var t=this;t;){var r=t._nsMap;if(r&&Object.prototype.hasOwnProperty.call(r,e))return r[e];t=t.nodeType==f?t.ownerDocument:t.parentNode}return null},isDefaultNamespace:function(e){return null==this.lookupPrefix(e)}},u(d,M),u(d,M.prototype),j.prototype={nodeName:"#document",nodeType:C,doctype:null,documentElement:null,_inc:1,insertBefore:function(e,t){if(e.nodeType==S){for(var r=e.firstChild;r;){var n=r.nextSibling;this.insertBefore(r,t),r=n}return e}return Z(this,e,t),e.ownerDocument=this,null===this.documentElement&&e.nodeType===p&&(this.documentElement=e),e},removeChild:function(e){return this.documentElement==e&&(this.documentElement=null),z(this,e)},replaceChild:function(e,t){Z(this,e,t,Y),e.ownerDocument=this,t&&this.removeChild(t),G(e)&&(this.documentElement=e)},importNode:function(e,t){return ye(this,e,t)},getElementById:function(e){var t=null;return H(this.documentElement,(function(r){if(r.nodeType==p&&r.getAttribute("id")==e)return t=r,!0})),t},getElementsByClassName:function(e){var t=c(e);return new N(this,(function(r){var n=[];return t.length>0&&H(r.documentElement,(function(o){if(o!==r&&o.nodeType===p){var a=o.getAttribute("class");if(a){var i=e===a;if(!i){var s=c(a);i=t.every((u=s,function(e){return u&&-1!==u.indexOf(e)}))}i&&n.push(o)}}var u})),n}))},createElement:function(e){var t=new ee;return t.ownerDocument=this,t.nodeName=e,t.tagName=e,t.localName=e,t.childNodes=new D,(t.attributes=new I)._ownerElement=t,t},createDocumentFragment:function(){var e=new le;return e.ownerDocument=this,e.childNodes=new D,e},createTextNode:function(e){var t=new ne;return t.ownerDocument=this,t.appendData(e),t},createComment:function(e){var t=new oe;return t.ownerDocument=this,t.appendData(e),t},createCDATASection:function(e){var t=new ae;return t.ownerDocument=this,t.appendData(e),t},createProcessingInstruction:function(e,t){var r=new de;return r.ownerDocument=this,r.tagName=r.nodeName=r.target=e,r.nodeValue=r.data=t,r},createAttribute:function(e){var t=new te;return t.ownerDocument=this,t.name=e,t.nodeName=e,t.localName=e,t.specified=!0,t},createEntityReference:function(e){var t=new ue;return t.ownerDocument=this,t.nodeName=e,t},createElementNS:function(e,t){var r=new ee,n=t.split(":"),o=r.attributes=new I;return r.childNodes=new D,r.ownerDocument=this,r.nodeName=t,r.tagName=t,r.namespaceURI=e,2==n.length?(r.prefix=n[0],r.localName=n[1]):r.localName=t,o._ownerElement=r,r},createAttributeNS:function(e,t){var r=new te,n=t.split(":");return r.ownerDocument=this,r.nodeName=t,r.name=t,r.namespaceURI=e,r.specified=!0,2==n.length?(r.prefix=n[0],r.localName=n[1]):r.localName=t,r}},l(j,M),ee.prototype={nodeType:p,hasAttribute:function(e){return null!=this.getAttributeNode(e)},getAttribute:function(e){var t=this.getAttributeNode(e);return t&&t.value||""},getAttributeNode:function(e){return this.attributes.getNamedItem(e)},setAttribute:function(e,t){var r=this.ownerDocument.createAttribute(e);r.value=r.nodeValue=""+t,this.setAttributeNode(r)},removeAttribute:function(e){var t=this.getAttributeNode(e);t&&this.removeAttributeNode(t)},appendChild:function(e){return e.nodeType===S?this.insertBefore(e,null):function(e,t){return t.parentNode&&t.parentNode.removeChild(t),t.parentNode=e,t.previousSibling=e.lastChild,t.nextSibling=null,t.previousSibling?t.previousSibling.nextSibling=t:e.firstChild=t,e.lastChild=t,K(e.ownerDocument,e,t),t}(this,e)},setAttributeNode:function(e){return this.attributes.setNamedItem(e)},setAttributeNodeNS:function(e){return this.attributes.setNamedItemNS(e)},removeAttributeNode:function(e){return this.attributes.removeNamedItem(e.nodeName)},removeAttributeNS:function(e,t){var r=this.getAttributeNodeNS(e,t);r&&this.removeAttributeNode(r)},hasAttributeNS:function(e,t){return null!=this.getAttributeNodeNS(e,t)},getAttributeNS:function(e,t){var r=this.getAttributeNodeNS(e,t);return r&&r.value||""},setAttributeNS:function(e,t,r){var n=this.ownerDocument.createAttributeNS(e,t);n.value=n.nodeValue=""+r,this.setAttributeNode(n)},getAttributeNodeNS:function(e,t){return this.attributes.getNamedItemNS(e,t)},getElementsByTagName:function(e){return new N(this,(function(t){var r=[];return H(t,(function(n){n===t||n.nodeType!=p||"*"!==e&&n.tagName!=e||r.push(n)})),r}))},getElementsByTagNameNS:function(e,t){return new N(this,(function(r){var n=[];return H(r,(function(o){o===r||o.nodeType!==p||"*"!==e&&o.namespaceURI!==e||"*"!==t&&o.localName!=t||n.push(o)})),n}))}},j.prototype.getElementsByTagName=ee.prototype.getElementsByTagName,j.prototype.getElementsByTagNameNS=ee.prototype.getElementsByTagNameNS,l(ee,M),te.prototype.nodeType=f,l(te,M),re.prototype={data:"",substringData:function(e,t){return this.data.substring(e,e+t)},appendData:function(e){e=this.data+e,this.nodeValue=this.data=e,this.length=e.length},insertData:function(e,t){this.replaceData(e,0,t)},appendChild:function(e){throw new Error(R[x])},deleteData:function(e,t){this.replaceData(e,t,"")},replaceData:function(e,t,r){r=this.data.substring(0,e)+r+this.data.substring(e+t),this.nodeValue=this.data=r,this.length=r.length}},l(re,M),ne.prototype={nodeName:"#text",nodeType:h,splitText:function(e){var t=this.data,r=t.substring(e);t=t.substring(0,e),this.data=this.nodeValue=t,this.length=t.length;var n=this.ownerDocument.createTextNode(r);return this.parentNode&&this.parentNode.insertBefore(n,this.nextSibling),n}},l(ne,re),oe.prototype={nodeName:"#comment",nodeType:k},l(oe,re),ae.prototype={nodeName:"#cdata-section",nodeType:g},l(ae,re),ie.prototype.nodeType=b,l(ie,M),se.prototype.nodeType=T,l(se,M),ce.prototype.nodeType=y,l(ce,M),ue.prototype.nodeType=m,l(ue,M),le.prototype.nodeName="#document-fragment",le.prototype.nodeType=S,l(le,M),de.prototype.nodeType=v,l(de,M),pe.prototype.serializeToString=function(e,t,r){return fe.call(e,t,r)},M.prototype.toString=fe;try{if(Object.defineProperty){function Ce(e){switch(e.nodeType){case p:case S:var t=[];for(e=e.firstChild;e;)7!==e.nodeType&&8!==e.nodeType&&t.push(Ce(e)),e=e.nextSibling;return t.join("");default:return e.nodeValue}}Object.defineProperty(N.prototype,"length",{get:function(){return O(this),this.$$length}}),Object.defineProperty(M.prototype,"textContent",{get:function(){return Ce(this)},set:function(e){switch(this.nodeType){case p:case S:for(;this.firstChild;)this.removeChild(this.firstChild);(e||String(e))&&this.appendChild(this.ownerDocument.createTextNode(e));break;default:this.data=e,this.value=e,this.nodeValue=e}}}),ke=function(e,t,r){e["$$"+t]=r}}}catch(be){}t.DocumentType=ie,t.DOMException=B,t.DOMImplementation=_,t.Element=ee,t.Node=M,t.NodeList=D,t.XMLSerializer=pe},function(e,t,r){var n=r(22),o=r(23),a=r(0),i=r(6),s=null,c=function(e){return!e||e<0?0:(e/1e3).toFixed(3)},u=function(){var e=function(){return(65536*(1+Math.random())|0).toString(16).substring(1)};return e()+e()+"-"+e()+"-"+e()+"-"+e()+"-"+e()+e()+e()},l=function(){if("object"===("undefined"==typeof navigator?"undefined":a(navigator))){var e=navigator.connection||navigator.mozConnection||navigator.webkitConnection;return(null==e?void 0:e.type)||(null==e?void 0:e.effectiveType)||"unknown"}return"unknown"},d=function(){return"object"===("undefined"==typeof location?"undefined":a(location))?location.protocol.replace(/:/,""):"unknown protocol"},p=function(){if("object"!==("undefined"==typeof navigator?"undefined":a(navigator)))return"unknown os";var e=navigator.userAgent.toLowerCase(),t=/macintosh|mac os x/i.test(navigator.userAgent);return e.indexOf("win32")>=0||e.indexOf("wow32")>=0?"win32":e.indexOf("win64")>=0||e.indexOf("wow64")>=0?"win64":t?"mac":"unknown os"},f=function(){return!("object"!==("undefined"==typeof navigator?"undefined":a(navigator))||!navigator.userAgent.match(/(Android|Adr|Linux)/i))},h=function(){return!("object"!==("undefined"==typeof navigator?"undefined":a(navigator))||!navigator.userAgent.match(/(iPhone|iPod|iPad|iOS)/i))},g=function(){return"object"!==("undefined"==typeof navigator?"undefined":a(navigator))?"unknown device":navigator.userAgent},m=function(){return!("object"!==("undefined"==typeof navigator?"undefined":a(navigator))||!navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i))}(),y=f()?"android":h?"ios":"other_mobile",v=p(),k=m?y:v,C=g(),b=d();function S(e){return e.replace(/([A-Z])/g,"_$1").toLowerCase()}var T=function(){"use strict";function e(t){n(this,e);var r=t.parent,o=t.traceId,a=t.bucket,c=t.region,l=t.apiName,d=t.realApi,p=t.httpMethod,f=t.fileKey,h=t.fileSize,g=t.accelerate,m=t.customId,y=t.delay,v=t.deepTracker,S=t.Beacon,T=t.clsReporter,w=a&&a.substr(a.lastIndexOf("-")+1)||"";this.parent=r,this.deepTracker=v,this.delay=y,T&&!this.clsReporter&&(this.clsReporter=T),this.params={sdkVersionName:"cos-js-sdk-v5",sdkVersionCode:i.version,osName:k,networkType:"",requestName:l||"",requestResult:"",realApi:d,bucket:a,region:c,accelerate:g,httpMethod:p,url:"",host:"",httpDomain:"",requestPath:f||"",userAgent:C,networkProtocol:b,errorType:"",errorCode:"",errorName:"",errorMessage:"",errorRequestId:"",errorHttpCode:0,errorServiceName:"",errorNode:"",httpTookTime:0,httpSize:h||0,httpMd5:0,httpSign:0,httpFullTime:0,httpSpeed:0,md5StartTime:0,md5EndTime:0,signStartTime:0,signEndTime:0,httpStartTime:0,httpEndTime:0,startTime:(new Date).getTime(),endTime:0,traceId:o||u(),appid:w,partNumber:0,httpRetryTimes:0,customId:m||"",partTime:0},S&&(this.beacon=function(e,t){if(!s){if("function"!=typeof e)throw new Error("Beacon not found");s=new e({appkey:"0WEB05PY6MHRGK0U",versionCode:i.version,channelID:"js_sdk",openid:"openid",unionid:"unid",strictMode:!1,delay:t,sessionDuration:6e4})}return s}(S,y))}return o(e,[{key:"formatResult",value:function(e,t){var r,n,o,a,i,s,u=(new Date).getTime(),d=l(),p=e?(null==e?void 0:e.code)||(null==e||null===(r=e.error)||void 0===r?void 0:r.code)||(null==e||null===(n=e.error)||void 0===n?void 0:n.Code):"",f=e?(null==e?void 0:e.message)||(null==e||null===(o=e.error)||void 0===o?void 0:o.message)||(null==e||null===(a=e.error)||void 0===a?void 0:a.Message):"",h=f,g=e?(null==e?void 0:e.resource)||(null==e||null===(i=e.error)||void 0===i?void 0:i.resource)||(null==e||null===(s=e.error)||void 0===s?void 0:s.Resource):"",m=e?null==e?void 0:e.statusCode:t.statusCode,y=e?(null==e?void 0:e.headers)&&(null==e?void 0:e.headers["x-cos-request-id"]):(null==t?void 0:t.headers)&&(null==t?void 0:t.headers["x-cos-request-id"]),v=e?y?"Server":"Client":"";"getObject"===this.params.requestName&&(this.params.httpSize=t?t.headers&&t.headers["content-length"]:0);var k="sliceUploadFile"===this.params.realApi,C="sliceCopyFile"===this.params.realApi;if(k||C){var b=this.params.httpSize/1024/this.params.partTime;Object.assign(this.params,{httpSpeed:b<0?0:b.toFixed(3)})}else{var S=u-this.params.startTime,T=this.params.httpEndTime-this.params.httpStartTime,w=this.params.httpSize/1024/(T/1e3),R=this.params.md5EndTime-this.params.md5StartTime,x=this.params.signEndTime-this.params.signStartTime;this.parent&&(this.parent.addParamValue("httpTookTime",c(T)),this.parent.addParamValue("httpFullTime",c(S)),this.parent.addParamValue("httpMd5",c(R)),this.parent.addParamValue("httpSign",c(x)),["multipartUpload","uploadPartCopy","putObjectCopy"].includes(this.params.requestName)&&this.parent.addParamValue("partTime",c(T))),Object.assign(this.params,{httpFullTime:c(S),httpMd5:c(R),httpSign:c(x),httpTookTime:c(T),httpSpeed:w<0?0:w.toFixed(3)})}if(Object.assign(this.params,{networkType:d,requestResult:e?"Failure":"Success",errorType:v,errorCode:p,errorHttpCode:m,errorName:h,errorMessage:f,errorServiceName:g,errorRequestId:y}),!e||p&&f||(this.params.fullError=e?JSON.stringify(e):""),this.params.url){try{var A=/^http(s)?:\/\/(.*?)\//.exec(this.params.url);this.params.host=A[2]}catch(e){this.params.host=this.params.url}this.params.httpDomain=this.params.host}}},{key:"report",value:function(e,t){if(this.beacon||this.clsReporter){this.formatResult(e,t);var r=function(e){var t,r={},n=["sdkVersionName","sdkVersionCode","osName","networkType","requestName","requestResult","bucket","region","appid","accelerate","url","host","requestPath","userAgent","networkProtocol","httpMethod","httpSize","httpSpeed","httpTookTime","httpMd5","httpSign","httpFullTime","httpDomain","partNumber","httpRetryTimes","customId","traceId","realApi"],o=[].concat(n,["errorNode","errorCode","errorName","errorMessage","errorRequestId","errorHttpCode","errorServiceName","errorType","fullError"]),a="Success"===e.requestResult?n:o;for(var i in e)a.includes(i)&&(r[S(i)]=e[i]);return r.request_name=e.realApi?(t=e.realApi,["putObject","sliceUploadFile","uploadFile","uploadFiles"].includes(t)?"UploadTask":"getObject"===t?"DownloadTask":["putObjectCopy","sliceCopyFile"].includes(t)?"CopyTask":t):e.requestName,r}(this.params);this.beacon&&this.sendEventsToBeacon(r),this.clsReporter&&this.sendEventsToCLS(r)}}},{key:"setParams",value:function(e){Object.assign(this.params,e)}},{key:"addParamValue",value:function(e,t){this.params[e]=(+this.params[e]+ +t).toFixed(3)}},{key:"sendEventsToBeacon",value:function(e){if(!("sliceUploadFile"===this.params.requestName||"sliceUploadFile"===this.params.realApi)||this.deepTracker){var t="qcloud_track_cos_sdk";0===this.delay?this.beacon&&this.beacon.onDirectUserAction(t,e):this.beacon&&this.beacon.onUserAction(t,e)}}},{key:"sendEventsToCLS",value:function(e){var t=!(0!==this.delay);this.clsReporter.log(e,t)}},{key:"generateSubTracker",value:function(t){return Object.assign(t,{parent:this,deepTracker:this.deepTracker,traceId:this.params.traceId,bucket:this.params.bucket,region:this.params.region,accelerate:this.params.accelerate,fileKey:this.params.requestPath,customId:this.params.customId,delay:this.delay,clsReporter:this.clsReporter}),new e(t)}}]),e}();e.exports=T},function(e){e.exports=JSON.parse('{"name":"cos-js-sdk-v5","version":"1.7.1","description":"JavaScript SDK for [腾讯云对象存储](https://cloud.tencent.com/product/cos)","main":"dist/cos-js-sdk-v5.js","types":"index.d.ts","scripts":{"prettier":"prettier --write src demo/demo.js demo/CIDemos/*.js test/test.js server/sts.js lib/request.js index.d.ts","server":"node server/sts.js","dev":"cross-env NODE_ENV=development webpack -w --mode=development","build":"cross-env NODE_ENV=production webpack --mode=production","cos-auth.min.js":"uglifyjs ./demo/common/cos-auth.js -o ./demo/common/cos-auth.min.js -c -m","test":"jest --runInBand --coverage"},"repository":{"type":"git","url":"git+https://github.com/tencentyun/cos-js-sdk-v5.git"},"keywords":[],"author":"carsonxu","license":"ISC","bugs":{"url":"https://github.com/tencentyun/cos-js-sdk-v5/issues"},"homepage":"https://github.com/tencentyun/cos-js-sdk-v5#readme","dependencies":{"@xmldom/xmldom":"^0.8.6"},"devDependencies":{"@babel/core":"7.17.9","@babel/plugin-transform-runtime":"7.18.10","@babel/preset-env":"7.16.11","babel-loader":"8.2.5","body-parser":"^1.18.3","cross-env":"^5.2.0","express":"^4.16.4","jest":"^29.3.1","jest-environment-jsdom":"^29.3.1","prettier":"^3.0.1","qcloud-cos-sts":"^3.0.2","request":"^2.87.0","terser-webpack-plugin":"4.2.3","uglifyjs":"^2.4.11","webpack":"4.46.0","webpack-cli":"4.10.0"}}')},function(e,t){var r=function(e){var t={},r=function(e){return!t[e]&&(t[e]=[]),t[e]};e.on=function(e,t){r(e).push(t)},e.off=function(e,t){for(var n=r(e),o=n.length-1;o>=0;o--)t===n[o]&&n.splice(o,1)},e.emit=function(e,t){for(var n=r(e).map((function(e){return e})),o=0;o=0;r--){var o=n[r][2];(!o||o+2592e3=0;o--){var a=n[o];a[0]===e&&a[1]===t&&n.splice(o,1)}n.unshift([e,t,Math.round(Date.now()/1e3)]),n.length>r&&n.splice(r),l()}},removeUploadId:function(e){u.call(this),delete d.using[e];for(var t=n.length-1;t>=0;t--)n[t][1]===e&&n.splice(t,1);l()}};e.exports=d},function(e,t,r){var n=r(10);e.exports=n},function(e,t,r){"use strict";var n=r(1),o=r(7),a=r(26),i=r(27),s=r(29),c=r(6),u={AppId:"",SecretId:"",SecretKey:"",SecurityToken:"",ChunkRetryTimes:2,FileParallelLimit:3,ChunkParallelLimit:3,ChunkSize:1048576,SliceSize:1048576,CopyChunkParallelLimit:20,CopyChunkSize:10485760,CopySliceSize:10485760,MaxPartNumber:1e4,ProgressInterval:1e3,Domain:"",ServiceDomain:"",Protocol:"",CompatibilityMode:!1,ForcePathStyle:!1,UseRawKey:!1,Timeout:0,CorrectClockSkew:!0,SystemClockOffset:0,UploadCheckContentMd5:!1,UploadQueueSize:1e4,UploadAddMetaMd5:!1,UploadIdCacheLimit:50,UseAccelerate:!1,ForceSignHost:!0,AutoSwitchHost:!0,CopySourceParser:null,DeepTracker:!1,TrackerDelay:5e3,CustomId:"",BeaconReporter:null,ClsReporter:null},l=function(e){if(this.options=n.extend(n.clone(u),e||{}),this.options.FileParallelLimit=Math.max(1,this.options.FileParallelLimit),this.options.ChunkParallelLimit=Math.max(1,this.options.ChunkParallelLimit),this.options.ChunkRetryTimes=Math.max(0,this.options.ChunkRetryTimes),this.options.ChunkSize=Math.max(1048576,this.options.ChunkSize),this.options.CopyChunkParallelLimit=Math.max(1,this.options.CopyChunkParallelLimit),this.options.CopyChunkSize=Math.max(1048576,this.options.CopyChunkSize),this.options.CopySliceSize=Math.max(0,this.options.CopySliceSize),this.options.MaxPartNumber=Math.max(1024,Math.min(1e4,this.options.MaxPartNumber)),this.options.Timeout=Math.max(0,this.options.Timeout),this.options.EnableReporter=this.options.BeaconReporter||this.options.ClsReporter,this.options.AppId,this.options.SecretId&&this.options.SecretId.indexOf(" "),this.options.SecretKey&&this.options.SecretKey.indexOf(" "),n.isNode(),this.options.ForcePathStyle)throw new Error("ForcePathStyle is not supported");o.init(this),a.init(this)};i.init(l,a),s.init(l,a),l.util={md5:n.md5,xml2json:n.xml2json,json2xml:n.json2xml,encodeBase64:n.encodeBase64},l.getAuthorization=n.getAuth,l.version=c.version,e.exports=l},function(e,t){var r,n,o=e.exports={};function a(){throw new Error("setTimeout has not been defined")}function i(){throw new Error("clearTimeout has not been defined")}function s(e){if(r===setTimeout)return setTimeout(e,0);if((r===a||!r)&&setTimeout)return r=setTimeout,setTimeout(e,0);try{return r(e,0)}catch(t){try{return r.call(null,e,0)}catch(t){return r.call(this,e,0)}}}!function(){try{r="function"==typeof setTimeout?setTimeout:a}catch(e){r=a}try{n="function"==typeof clearTimeout?clearTimeout:i}catch(e){n=i}}();var c,u=[],l=!1,d=-1;function p(){l&&c&&(l=!1,c.length?u=c.concat(u):d=-1,u.length&&f())}function f(){if(!l){var e=s(p);l=!0;for(var t=u.length;t;){for(c=u,u=[];++d1)for(var r=1;r>6,s[n++]=128|63&r):r<55296||r>=57344?(s[n++]=224|r>>12,s[n++]=128|r>>6&63,s[n++]=128|63&r):(r=65536+((1023&r)<<10|1023&e.charCodeAt(++o)),s[n++]=240|r>>18,s[n++]=128|r>>12&63,s[n++]=128|r>>6&63,s[n++]=128|63&r);else for(n=this.start;o>2]|=r<>2]|=(192|r>>6)<>2]|=(128|63&r)<=57344?(i[n>>2]|=(224|r>>12)<>2]|=(128|r>>6&63)<>2]|=(128|63&r)<>2]|=(240|r>>18)<>2]|=(128|r>>12&63)<>2]|=(128|r>>6&63)<>2]|=(128|63&r)<=64?(this.start=n-64,this.hash(),this.hashed=!0):this.start=n}return this.bytes>4294967295&&(this.hBytes+=this.bytes/4294967296<<0,this.bytes=this.bytes%4294967296),this}},v.prototype.finalize=function(){if(!this.finalized){this.finalized=!0;var e=this.blocks,t=this.lastByteIndex;e[t>>2]|=d[3&t],t>=56&&(this.hashed||this.hash(),e[0]=e[16],e[16]=e[1]=e[2]=e[3]=e[4]=e[5]=e[6]=e[7]=e[8]=e[9]=e[10]=e[11]=e[12]=e[13]=e[14]=e[15]=0),e[14]=this.bytes<<3,e[15]=this.hBytes<<3|this.bytes>>>29,this.hash()}},v.prototype.hash=function(){var e,t,r,n,o,a,i=this.blocks;this.first?t=((t=((e=((e=i[0]-680876937)<<7|e>>>25)-271733879<<0)^(r=((r=(-271733879^(n=((n=(-1732584194^2004318071&e)+i[1]-117830708)<<12|n>>>20)+e<<0)&(-271733879^e))+i[2]-1126478375)<<17|r>>>15)+n<<0)&(n^e))+i[3]-1316259209)<<22|t>>>10)+r<<0:(e=this.h0,t=this.h1,r=this.h2,t=((t+=((e=((e+=((n=this.h3)^t&(r^n))+i[0]-680876936)<<7|e>>>25)+t<<0)^(r=((r+=(t^(n=((n+=(r^e&(t^r))+i[1]-389564586)<<12|n>>>20)+e<<0)&(e^t))+i[2]+606105819)<<17|r>>>15)+n<<0)&(n^e))+i[3]-1044525330)<<22|t>>>10)+r<<0),t=((t+=((e=((e+=(n^t&(r^n))+i[4]-176418897)<<7|e>>>25)+t<<0)^(r=((r+=(t^(n=((n+=(r^e&(t^r))+i[5]+1200080426)<<12|n>>>20)+e<<0)&(e^t))+i[6]-1473231341)<<17|r>>>15)+n<<0)&(n^e))+i[7]-45705983)<<22|t>>>10)+r<<0,t=((t+=((e=((e+=(n^t&(r^n))+i[8]+1770035416)<<7|e>>>25)+t<<0)^(r=((r+=(t^(n=((n+=(r^e&(t^r))+i[9]-1958414417)<<12|n>>>20)+e<<0)&(e^t))+i[10]-42063)<<17|r>>>15)+n<<0)&(n^e))+i[11]-1990404162)<<22|t>>>10)+r<<0,t=((t+=((e=((e+=(n^t&(r^n))+i[12]+1804603682)<<7|e>>>25)+t<<0)^(r=((r+=(t^(n=((n+=(r^e&(t^r))+i[13]-40341101)<<12|n>>>20)+e<<0)&(e^t))+i[14]-1502002290)<<17|r>>>15)+n<<0)&(n^e))+i[15]+1236535329)<<22|t>>>10)+r<<0,t=((t+=((n=((n+=(t^r&((e=((e+=(r^n&(t^r))+i[1]-165796510)<<5|e>>>27)+t<<0)^t))+i[6]-1069501632)<<9|n>>>23)+e<<0)^e&((r=((r+=(e^t&(n^e))+i[11]+643717713)<<14|r>>>18)+n<<0)^n))+i[0]-373897302)<<20|t>>>12)+r<<0,t=((t+=((n=((n+=(t^r&((e=((e+=(r^n&(t^r))+i[5]-701558691)<<5|e>>>27)+t<<0)^t))+i[10]+38016083)<<9|n>>>23)+e<<0)^e&((r=((r+=(e^t&(n^e))+i[15]-660478335)<<14|r>>>18)+n<<0)^n))+i[4]-405537848)<<20|t>>>12)+r<<0,t=((t+=((n=((n+=(t^r&((e=((e+=(r^n&(t^r))+i[9]+568446438)<<5|e>>>27)+t<<0)^t))+i[14]-1019803690)<<9|n>>>23)+e<<0)^e&((r=((r+=(e^t&(n^e))+i[3]-187363961)<<14|r>>>18)+n<<0)^n))+i[8]+1163531501)<<20|t>>>12)+r<<0,t=((t+=((n=((n+=(t^r&((e=((e+=(r^n&(t^r))+i[13]-1444681467)<<5|e>>>27)+t<<0)^t))+i[2]-51403784)<<9|n>>>23)+e<<0)^e&((r=((r+=(e^t&(n^e))+i[7]+1735328473)<<14|r>>>18)+n<<0)^n))+i[12]-1926607734)<<20|t>>>12)+r<<0,t=((t+=((a=(n=((n+=((o=t^r)^(e=((e+=(o^n)+i[5]-378558)<<4|e>>>28)+t<<0))+i[8]-2022574463)<<11|n>>>21)+e<<0)^e)^(r=((r+=(a^t)+i[11]+1839030562)<<16|r>>>16)+n<<0))+i[14]-35309556)<<23|t>>>9)+r<<0,t=((t+=((a=(n=((n+=((o=t^r)^(e=((e+=(o^n)+i[1]-1530992060)<<4|e>>>28)+t<<0))+i[4]+1272893353)<<11|n>>>21)+e<<0)^e)^(r=((r+=(a^t)+i[7]-155497632)<<16|r>>>16)+n<<0))+i[10]-1094730640)<<23|t>>>9)+r<<0,t=((t+=((a=(n=((n+=((o=t^r)^(e=((e+=(o^n)+i[13]+681279174)<<4|e>>>28)+t<<0))+i[0]-358537222)<<11|n>>>21)+e<<0)^e)^(r=((r+=(a^t)+i[3]-722521979)<<16|r>>>16)+n<<0))+i[6]+76029189)<<23|t>>>9)+r<<0,t=((t+=((a=(n=((n+=((o=t^r)^(e=((e+=(o^n)+i[9]-640364487)<<4|e>>>28)+t<<0))+i[12]-421815835)<<11|n>>>21)+e<<0)^e)^(r=((r+=(a^t)+i[15]+530742520)<<16|r>>>16)+n<<0))+i[2]-995338651)<<23|t>>>9)+r<<0,t=((t+=((n=((n+=(t^((e=((e+=(r^(t|~n))+i[0]-198630844)<<6|e>>>26)+t<<0)|~r))+i[7]+1126891415)<<10|n>>>22)+e<<0)^((r=((r+=(e^(n|~t))+i[14]-1416354905)<<15|r>>>17)+n<<0)|~e))+i[5]-57434055)<<21|t>>>11)+r<<0,t=((t+=((n=((n+=(t^((e=((e+=(r^(t|~n))+i[12]+1700485571)<<6|e>>>26)+t<<0)|~r))+i[3]-1894986606)<<10|n>>>22)+e<<0)^((r=((r+=(e^(n|~t))+i[10]-1051523)<<15|r>>>17)+n<<0)|~e))+i[1]-2054922799)<<21|t>>>11)+r<<0,t=((t+=((n=((n+=(t^((e=((e+=(r^(t|~n))+i[8]+1873313359)<<6|e>>>26)+t<<0)|~r))+i[15]-30611744)<<10|n>>>22)+e<<0)^((r=((r+=(e^(n|~t))+i[6]-1560198380)<<15|r>>>17)+n<<0)|~e))+i[13]+1309151649)<<21|t>>>11)+r<<0,t=((t+=((n=((n+=(t^((e=((e+=(r^(t|~n))+i[4]-145523070)<<6|e>>>26)+t<<0)|~r))+i[11]-1120210379)<<10|n>>>22)+e<<0)^((r=((r+=(e^(n|~t))+i[2]+718787259)<<15|r>>>17)+n<<0)|~e))+i[9]-343485551)<<21|t>>>11)+r<<0,this.first?(this.h0=e+1732584193<<0,this.h1=t-271733879<<0,this.h2=r-1732584194<<0,this.h3=n+271733878<<0,this.first=!1):(this.h0=this.h0+e<<0,this.h1=this.h1+t<<0,this.h2=this.h2+r<<0,this.h3=this.h3+n<<0)},v.prototype.hex=function(){this.finalize();var e=this.h0,t=this.h1,r=this.h2,n=this.h3;return l[e>>4&15]+l[15&e]+l[e>>12&15]+l[e>>8&15]+l[e>>20&15]+l[e>>16&15]+l[e>>28&15]+l[e>>24&15]+l[t>>4&15]+l[15&t]+l[t>>12&15]+l[t>>8&15]+l[t>>20&15]+l[t>>16&15]+l[t>>28&15]+l[t>>24&15]+l[r>>4&15]+l[15&r]+l[r>>12&15]+l[r>>8&15]+l[r>>20&15]+l[r>>16&15]+l[r>>28&15]+l[r>>24&15]+l[n>>4&15]+l[15&n]+l[n>>12&15]+l[n>>8&15]+l[n>>20&15]+l[n>>16&15]+l[n>>28&15]+l[n>>24&15]},v.prototype.toString=v.prototype.hex,v.prototype.digest=function(e){if("hex"===e)return this.hex();this.finalize();var t=this.h0,r=this.h1,n=this.h2,o=this.h3;return[255&t,t>>8&255,t>>16&255,t>>24&255,255&r,r>>8&255,r>>16&255,r>>24&255,255&n,n>>8&255,n>>16&255,n>>24&255,255&o,o>>8&255,o>>16&255,o>>24&255]},v.prototype.array=v.prototype.digest,v.prototype.arrayBuffer=function(){this.finalize();var e=new ArrayBuffer(16),t=new Uint32Array(e);return t[0]=this.h0,t[1]=this.h1,t[2]=this.h2,t[3]=this.h3,e},v.prototype.buffer=v.prototype.arrayBuffer,v.prototype.base64=function(){for(var e,t,r,n="",o=this.array(),a=0;a<15;)e=o[a++],t=o[a++],r=o[a++],n+=h[e>>>2]+h[63&(e<<4|t>>>4)]+h[63&(t<<2|r>>>6)]+h[63&r];return e=o[a],n+=h[e>>>2]+h[e<<4&63]+"=="};var k=function(){var e=y("hex");e.getCtx=e.create=function(){return new v},e.update=function(t){return e.create().update(t)};for(var t=0;t>>2]|=(r[o>>>2]>>>24-o%4*8&255)<<24-(n+o)%4*8;else if(65535>>2]=r[o>>>2];else t.push.apply(t,r);return this.sigBytes+=e,this},clamp:function(){var t=this.words,r=this.sigBytes;t[r>>>2]&=4294967295<<32-r%4*8,t.length=e.ceil(r/4)},clone:function(){var e=a.clone.call(this);return e.words=this.words.slice(0),e},random:function(t){for(var r=[],n=0;n>>2]>>>24-n%4*8&255;r.push((o>>>4).toString(16)),r.push((15&o).toString(16))}return r.join("")},parse:function(e){for(var t=e.length,r=[],n=0;n>>3]|=parseInt(e.substr(n,2),16)<<24-n%8*4;return new i.init(r,t/2)}},u=s.Latin1={stringify:function(e){var t=e.words;e=e.sigBytes;for(var r=[],n=0;n>>2]>>>24-n%4*8&255));return r.join("")},parse:function(e){for(var t=e.length,r=[],n=0;n>>2]|=(255&e.charCodeAt(n))<<24-n%4*8;return new i.init(r,t)}},l=s.Utf8={stringify:function(e){try{return decodeURIComponent(escape(u.stringify(e)))}catch(e){throw Error("Malformed UTF-8 data")}},parse:function(e){return u.parse(unescape(encodeURIComponent(e)))}},d=n.BufferedBlockAlgorithm=a.extend({reset:function(){this._data=new i.init,this._nDataBytes=0},_append:function(e){"string"==typeof e&&(e=l.parse(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function(t){var r=this._data,n=r.words,o=r.sigBytes,a=this.blockSize,s=o/(4*a);if(t=(s=t?e.ceil(s):e.max((0|s)-this._minBufferSize,0))*a,o=e.min(4*t,o),t){for(var c=0;cu;u++){if(16>u)a[u]=0|e[t+u];else{var l=a[u-3]^a[u-8]^a[u-14]^a[u-16];a[u]=l<<1|l>>>31}l=(n<<5|n>>>27)+c+a[u],l=20>u?l+(1518500249+(o&i|~o&s)):40>u?l+(1859775393+(o^i^s)):60>u?l+((o&i|o&s|i&s)-1894007588):l+((o^i^s)-899497514),c=s,s=i,i=o<<30|o>>>2,o=n,n=l}r[0]=r[0]+n|0,r[1]=r[1]+o|0,r[2]=r[2]+i|0,r[3]=r[3]+s|0,r[4]=r[4]+c|0},_doFinalize:function(){var e=this._data,t=e.words,r=8*this._nDataBytes,n=8*e.sigBytes;return t[n>>>5]|=128<<24-n%32,t[14+(n+64>>>9<<4)]=Math.floor(r/4294967296),t[15+(n+64>>>9<<4)]=r,e.sigBytes=4*t.length,this._process(),this._hash},clone:function(){var e=o.clone.call(this);return e._hash=this._hash.clone(),e}}),t.SHA1=o._createHelper(i),t.HmacSHA1=o._createHmacHelper(i),function(){var e=l,t=e.enc.Utf8;e.algo.HMAC=e.lib.Base.extend({init:function(e,r){e=this._hasher=new e.init,"string"==typeof r&&(r=t.parse(r));var n=e.blockSize,o=4*n;r.sigBytes>o&&(r=e.finalize(r)),r.clamp();for(var a=this._oKey=r.clone(),i=this._iKey=r.clone(),s=a.words,c=i.words,u=0;u>>2]>>>24-a%4*8&255)<<16|(t[a+1>>>2]>>>24-(a+1)%4*8&255)<<8|t[a+2>>>2]>>>24-(a+2)%4*8&255,s=0;s<4&&a+.75*s>>6*(3-s)&63));var c=n.charAt(64);if(c)for(;o.length%4;)o.push(c);return o.join("")},parse:function(e){var t=e.length,r=this._map,n=r.charAt(64);if(n){var o=e.indexOf(n);-1!=o&&(t=o)}for(var a=[],i=0,s=0;s>>6-s%4*2;a[i>>>2]|=(u|l)<<24-i%4*8,i++}return c.create(a,i)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="},"object"===u(e)?e.exports=l:window.CryptoJS=l}).call(this,r(3)(e))},function(e,t,r){var n=r(16).DOMParser,o=function(){this.version="1.3.5";var e={mergeCDATA:!0,normalize:!0,stripElemPrefix:!0},t=new RegExp(/(?!xmlns)^.*:/);new RegExp(/^\s+|\s+$/g);return this.grokType=function(e){return/^\s*$/.test(e)?null:/^(?:true|false)$/i.test(e)?"true"===e.toLowerCase():isFinite(e)?parseFloat(e):e},this.parseString=function(e,t){if(e){var r=this.stringToXML(e);return r.getElementsByTagName("parsererror").length?null:this.parseXML(r,t)}return null},this.parseXML=function(r,n){for(var a in n)e[a]=n[a];var i={},s=0,c="";if(r.childNodes.length)for(var u,l,d,p=0;p=t+r||t?new java.lang.String(e,t,r)+"":e}function m(e,t){e.currentElement?e.currentElement.appendChild(t):e.doc.appendChild(t)}p.prototype.parseFromString=function(e,t){var r=this.options,n=new l,o=r.domBuilder||new f,i=r.errorHandler,s=r.locator,u=r.xmlns||{},p=/\/x?html?$/.test(t),h=p?a.HTML_ENTITIES:a.XML_ENTITIES;s&&o.setDocumentLocator(s),n.errorHandler=function(e,t,r){if(!e){if(t instanceof f)return t;e=t}var n={},o=e instanceof Function;function a(t){var a=e[t];!a&&o&&(a=2==e.length?function(r){e(t,r)}:e),n[t]=a&&function(e){a("[xmldom "+t+"]\t"+e+function(e){if(e)return"\n@"+(e.systemId||"")+"#[line:"+e.lineNumber+",col:"+e.columnNumber+"]"}(r))}||function(){}}return r=r||{},a("warning"),a("error"),a("fatalError"),n}(i,o,s),n.domBuilder=r.domBuilder||o,p&&(u[""]=c.HTML),u.xml=u.xml||c.XML;var g=r.normalizeLineEndings||d;return e&&"string"==typeof e?n.parse(g(e),u,h):n.errorHandler.error("invalid doc source"),o.doc},f.prototype={startDocument:function(){this.doc=(new s).createDocument(null,null,null),this.locator&&(this.doc.documentURI=this.locator.systemId)},startElement:function(e,t,r,n){var o=this.doc,a=o.createElementNS(e,r||t),i=n.length;m(this,a),this.currentElement=a,this.locator&&h(this.locator,a);for(var s=0;s",lt:"<",quot:'"'}),t.HTML_ENTITIES=n({Aacute:"Á",aacute:"á",Abreve:"Ă",abreve:"ă",ac:"∾",acd:"∿",acE:"∾̳",Acirc:"Â",acirc:"â",acute:"´",Acy:"А",acy:"а",AElig:"Æ",aelig:"æ",af:"⁡",Afr:"𝔄",afr:"𝔞",Agrave:"À",agrave:"à",alefsym:"ℵ",aleph:"ℵ",Alpha:"Α",alpha:"α",Amacr:"Ā",amacr:"ā",amalg:"⨿",AMP:"&",amp:"&",And:"⩓",and:"∧",andand:"⩕",andd:"⩜",andslope:"⩘",andv:"⩚",ang:"∠",ange:"⦤",angle:"∠",angmsd:"∡",angmsdaa:"⦨",angmsdab:"⦩",angmsdac:"⦪",angmsdad:"⦫",angmsdae:"⦬",angmsdaf:"⦭",angmsdag:"⦮",angmsdah:"⦯",angrt:"∟",angrtvb:"⊾",angrtvbd:"⦝",angsph:"∢",angst:"Å",angzarr:"⍼",Aogon:"Ą",aogon:"ą",Aopf:"𝔸",aopf:"𝕒",ap:"≈",apacir:"⩯",apE:"⩰",ape:"≊",apid:"≋",apos:"'",ApplyFunction:"⁡",approx:"≈",approxeq:"≊",Aring:"Å",aring:"å",Ascr:"𝒜",ascr:"𝒶",Assign:"≔",ast:"*",asymp:"≈",asympeq:"≍",Atilde:"Ã",atilde:"ã",Auml:"Ä",auml:"ä",awconint:"∳",awint:"⨑",backcong:"≌",backepsilon:"϶",backprime:"‵",backsim:"∽",backsimeq:"⋍",Backslash:"∖",Barv:"⫧",barvee:"⊽",Barwed:"⌆",barwed:"⌅",barwedge:"⌅",bbrk:"⎵",bbrktbrk:"⎶",bcong:"≌",Bcy:"Б",bcy:"б",bdquo:"„",becaus:"∵",Because:"∵",because:"∵",bemptyv:"⦰",bepsi:"϶",bernou:"ℬ",Bernoullis:"ℬ",Beta:"Β",beta:"β",beth:"ℶ",between:"≬",Bfr:"𝔅",bfr:"𝔟",bigcap:"⋂",bigcirc:"◯",bigcup:"⋃",bigodot:"⨀",bigoplus:"⨁",bigotimes:"⨂",bigsqcup:"⨆",bigstar:"★",bigtriangledown:"▽",bigtriangleup:"△",biguplus:"⨄",bigvee:"⋁",bigwedge:"⋀",bkarow:"⤍",blacklozenge:"⧫",blacksquare:"▪",blacktriangle:"▴",blacktriangledown:"▾",blacktriangleleft:"◂",blacktriangleright:"▸",blank:"␣",blk12:"▒",blk14:"░",blk34:"▓",block:"█",bne:"=⃥",bnequiv:"≡⃥",bNot:"⫭",bnot:"⌐",Bopf:"𝔹",bopf:"𝕓",bot:"⊥",bottom:"⊥",bowtie:"⋈",boxbox:"⧉",boxDL:"╗",boxDl:"╖",boxdL:"╕",boxdl:"┐",boxDR:"╔",boxDr:"╓",boxdR:"╒",boxdr:"┌",boxH:"═",boxh:"─",boxHD:"╦",boxHd:"╤",boxhD:"╥",boxhd:"┬",boxHU:"╩",boxHu:"╧",boxhU:"╨",boxhu:"┴",boxminus:"⊟",boxplus:"⊞",boxtimes:"⊠",boxUL:"╝",boxUl:"╜",boxuL:"╛",boxul:"┘",boxUR:"╚",boxUr:"╙",boxuR:"╘",boxur:"└",boxV:"║",boxv:"│",boxVH:"╬",boxVh:"╫",boxvH:"╪",boxvh:"┼",boxVL:"╣",boxVl:"╢",boxvL:"╡",boxvl:"┤",boxVR:"╠",boxVr:"╟",boxvR:"╞",boxvr:"├",bprime:"‵",Breve:"˘",breve:"˘",brvbar:"¦",Bscr:"ℬ",bscr:"𝒷",bsemi:"⁏",bsim:"∽",bsime:"⋍",bsol:"\\",bsolb:"⧅",bsolhsub:"⟈",bull:"•",bullet:"•",bump:"≎",bumpE:"⪮",bumpe:"≏",Bumpeq:"≎",bumpeq:"≏",Cacute:"Ć",cacute:"ć",Cap:"⋒",cap:"∩",capand:"⩄",capbrcup:"⩉",capcap:"⩋",capcup:"⩇",capdot:"⩀",CapitalDifferentialD:"ⅅ",caps:"∩︀",caret:"⁁",caron:"ˇ",Cayleys:"ℭ",ccaps:"⩍",Ccaron:"Č",ccaron:"č",Ccedil:"Ç",ccedil:"ç",Ccirc:"Ĉ",ccirc:"ĉ",Cconint:"∰",ccups:"⩌",ccupssm:"⩐",Cdot:"Ċ",cdot:"ċ",cedil:"¸",Cedilla:"¸",cemptyv:"⦲",cent:"¢",CenterDot:"·",centerdot:"·",Cfr:"ℭ",cfr:"𝔠",CHcy:"Ч",chcy:"ч",check:"✓",checkmark:"✓",Chi:"Χ",chi:"χ",cir:"○",circ:"ˆ",circeq:"≗",circlearrowleft:"↺",circlearrowright:"↻",circledast:"⊛",circledcirc:"⊚",circleddash:"⊝",CircleDot:"⊙",circledR:"®",circledS:"Ⓢ",CircleMinus:"⊖",CirclePlus:"⊕",CircleTimes:"⊗",cirE:"⧃",cire:"≗",cirfnint:"⨐",cirmid:"⫯",cirscir:"⧂",ClockwiseContourIntegral:"∲",CloseCurlyDoubleQuote:"”",CloseCurlyQuote:"’",clubs:"♣",clubsuit:"♣",Colon:"∷",colon:":",Colone:"⩴",colone:"≔",coloneq:"≔",comma:",",commat:"@",comp:"∁",compfn:"∘",complement:"∁",complexes:"ℂ",cong:"≅",congdot:"⩭",Congruent:"≡",Conint:"∯",conint:"∮",ContourIntegral:"∮",Copf:"ℂ",copf:"𝕔",coprod:"∐",Coproduct:"∐",COPY:"©",copy:"©",copysr:"℗",CounterClockwiseContourIntegral:"∳",crarr:"↵",Cross:"⨯",cross:"✗",Cscr:"𝒞",cscr:"𝒸",csub:"⫏",csube:"⫑",csup:"⫐",csupe:"⫒",ctdot:"⋯",cudarrl:"⤸",cudarrr:"⤵",cuepr:"⋞",cuesc:"⋟",cularr:"↶",cularrp:"⤽",Cup:"⋓",cup:"∪",cupbrcap:"⩈",CupCap:"≍",cupcap:"⩆",cupcup:"⩊",cupdot:"⊍",cupor:"⩅",cups:"∪︀",curarr:"↷",curarrm:"⤼",curlyeqprec:"⋞",curlyeqsucc:"⋟",curlyvee:"⋎",curlywedge:"⋏",curren:"¤",curvearrowleft:"↶",curvearrowright:"↷",cuvee:"⋎",cuwed:"⋏",cwconint:"∲",cwint:"∱",cylcty:"⌭",Dagger:"‡",dagger:"†",daleth:"ℸ",Darr:"↡",dArr:"⇓",darr:"↓",dash:"‐",Dashv:"⫤",dashv:"⊣",dbkarow:"⤏",dblac:"˝",Dcaron:"Ď",dcaron:"ď",Dcy:"Д",dcy:"д",DD:"ⅅ",dd:"ⅆ",ddagger:"‡",ddarr:"⇊",DDotrahd:"⤑",ddotseq:"⩷",deg:"°",Del:"∇",Delta:"Δ",delta:"δ",demptyv:"⦱",dfisht:"⥿",Dfr:"𝔇",dfr:"𝔡",dHar:"⥥",dharl:"⇃",dharr:"⇂",DiacriticalAcute:"´",DiacriticalDot:"˙",DiacriticalDoubleAcute:"˝",DiacriticalGrave:"`",DiacriticalTilde:"˜",diam:"⋄",Diamond:"⋄",diamond:"⋄",diamondsuit:"♦",diams:"♦",die:"¨",DifferentialD:"ⅆ",digamma:"ϝ",disin:"⋲",div:"÷",divide:"÷",divideontimes:"⋇",divonx:"⋇",DJcy:"Ђ",djcy:"ђ",dlcorn:"⌞",dlcrop:"⌍",dollar:"$",Dopf:"𝔻",dopf:"𝕕",Dot:"¨",dot:"˙",DotDot:"⃜",doteq:"≐",doteqdot:"≑",DotEqual:"≐",dotminus:"∸",dotplus:"∔",dotsquare:"⊡",doublebarwedge:"⌆",DoubleContourIntegral:"∯",DoubleDot:"¨",DoubleDownArrow:"⇓",DoubleLeftArrow:"⇐",DoubleLeftRightArrow:"⇔",DoubleLeftTee:"⫤",DoubleLongLeftArrow:"⟸",DoubleLongLeftRightArrow:"⟺",DoubleLongRightArrow:"⟹",DoubleRightArrow:"⇒",DoubleRightTee:"⊨",DoubleUpArrow:"⇑",DoubleUpDownArrow:"⇕",DoubleVerticalBar:"∥",DownArrow:"↓",Downarrow:"⇓",downarrow:"↓",DownArrowBar:"⤓",DownArrowUpArrow:"⇵",DownBreve:"̑",downdownarrows:"⇊",downharpoonleft:"⇃",downharpoonright:"⇂",DownLeftRightVector:"⥐",DownLeftTeeVector:"⥞",DownLeftVector:"↽",DownLeftVectorBar:"⥖",DownRightTeeVector:"⥟",DownRightVector:"⇁",DownRightVectorBar:"⥗",DownTee:"⊤",DownTeeArrow:"↧",drbkarow:"⤐",drcorn:"⌟",drcrop:"⌌",Dscr:"𝒟",dscr:"𝒹",DScy:"Ѕ",dscy:"ѕ",dsol:"⧶",Dstrok:"Đ",dstrok:"đ",dtdot:"⋱",dtri:"▿",dtrif:"▾",duarr:"⇵",duhar:"⥯",dwangle:"⦦",DZcy:"Џ",dzcy:"џ",dzigrarr:"⟿",Eacute:"É",eacute:"é",easter:"⩮",Ecaron:"Ě",ecaron:"ě",ecir:"≖",Ecirc:"Ê",ecirc:"ê",ecolon:"≕",Ecy:"Э",ecy:"э",eDDot:"⩷",Edot:"Ė",eDot:"≑",edot:"ė",ee:"ⅇ",efDot:"≒",Efr:"𝔈",efr:"𝔢",eg:"⪚",Egrave:"È",egrave:"è",egs:"⪖",egsdot:"⪘",el:"⪙",Element:"∈",elinters:"⏧",ell:"ℓ",els:"⪕",elsdot:"⪗",Emacr:"Ē",emacr:"ē",empty:"∅",emptyset:"∅",EmptySmallSquare:"◻",emptyv:"∅",EmptyVerySmallSquare:"▫",emsp:" ",emsp13:" ",emsp14:" ",ENG:"Ŋ",eng:"ŋ",ensp:" ",Eogon:"Ę",eogon:"ę",Eopf:"𝔼",eopf:"𝕖",epar:"⋕",eparsl:"⧣",eplus:"⩱",epsi:"ε",Epsilon:"Ε",epsilon:"ε",epsiv:"ϵ",eqcirc:"≖",eqcolon:"≕",eqsim:"≂",eqslantgtr:"⪖",eqslantless:"⪕",Equal:"⩵",equals:"=",EqualTilde:"≂",equest:"≟",Equilibrium:"⇌",equiv:"≡",equivDD:"⩸",eqvparsl:"⧥",erarr:"⥱",erDot:"≓",Escr:"ℰ",escr:"ℯ",esdot:"≐",Esim:"⩳",esim:"≂",Eta:"Η",eta:"η",ETH:"Ð",eth:"ð",Euml:"Ë",euml:"ë",euro:"€",excl:"!",exist:"∃",Exists:"∃",expectation:"ℰ",ExponentialE:"ⅇ",exponentiale:"ⅇ",fallingdotseq:"≒",Fcy:"Ф",fcy:"ф",female:"♀",ffilig:"ffi",fflig:"ff",ffllig:"ffl",Ffr:"𝔉",ffr:"𝔣",filig:"fi",FilledSmallSquare:"◼",FilledVerySmallSquare:"▪",fjlig:"fj",flat:"♭",fllig:"fl",fltns:"▱",fnof:"ƒ",Fopf:"𝔽",fopf:"𝕗",ForAll:"∀",forall:"∀",fork:"⋔",forkv:"⫙",Fouriertrf:"ℱ",fpartint:"⨍",frac12:"½",frac13:"⅓",frac14:"¼",frac15:"⅕",frac16:"⅙",frac18:"⅛",frac23:"⅔",frac25:"⅖",frac34:"¾",frac35:"⅗",frac38:"⅜",frac45:"⅘",frac56:"⅚",frac58:"⅝",frac78:"⅞",frasl:"⁄",frown:"⌢",Fscr:"ℱ",fscr:"𝒻",gacute:"ǵ",Gamma:"Γ",gamma:"γ",Gammad:"Ϝ",gammad:"ϝ",gap:"⪆",Gbreve:"Ğ",gbreve:"ğ",Gcedil:"Ģ",Gcirc:"Ĝ",gcirc:"ĝ",Gcy:"Г",gcy:"г",Gdot:"Ġ",gdot:"ġ",gE:"≧",ge:"≥",gEl:"⪌",gel:"⋛",geq:"≥",geqq:"≧",geqslant:"⩾",ges:"⩾",gescc:"⪩",gesdot:"⪀",gesdoto:"⪂",gesdotol:"⪄",gesl:"⋛︀",gesles:"⪔",Gfr:"𝔊",gfr:"𝔤",Gg:"⋙",gg:"≫",ggg:"⋙",gimel:"ℷ",GJcy:"Ѓ",gjcy:"ѓ",gl:"≷",gla:"⪥",glE:"⪒",glj:"⪤",gnap:"⪊",gnapprox:"⪊",gnE:"≩",gne:"⪈",gneq:"⪈",gneqq:"≩",gnsim:"⋧",Gopf:"𝔾",gopf:"𝕘",grave:"`",GreaterEqual:"≥",GreaterEqualLess:"⋛",GreaterFullEqual:"≧",GreaterGreater:"⪢",GreaterLess:"≷",GreaterSlantEqual:"⩾",GreaterTilde:"≳",Gscr:"𝒢",gscr:"ℊ",gsim:"≳",gsime:"⪎",gsiml:"⪐",Gt:"≫",GT:">",gt:">",gtcc:"⪧",gtcir:"⩺",gtdot:"⋗",gtlPar:"⦕",gtquest:"⩼",gtrapprox:"⪆",gtrarr:"⥸",gtrdot:"⋗",gtreqless:"⋛",gtreqqless:"⪌",gtrless:"≷",gtrsim:"≳",gvertneqq:"≩︀",gvnE:"≩︀",Hacek:"ˇ",hairsp:" ",half:"½",hamilt:"ℋ",HARDcy:"Ъ",hardcy:"ъ",hArr:"⇔",harr:"↔",harrcir:"⥈",harrw:"↭",Hat:"^",hbar:"ℏ",Hcirc:"Ĥ",hcirc:"ĥ",hearts:"♥",heartsuit:"♥",hellip:"…",hercon:"⊹",Hfr:"ℌ",hfr:"𝔥",HilbertSpace:"ℋ",hksearow:"⤥",hkswarow:"⤦",hoarr:"⇿",homtht:"∻",hookleftarrow:"↩",hookrightarrow:"↪",Hopf:"ℍ",hopf:"𝕙",horbar:"―",HorizontalLine:"─",Hscr:"ℋ",hscr:"𝒽",hslash:"ℏ",Hstrok:"Ħ",hstrok:"ħ",HumpDownHump:"≎",HumpEqual:"≏",hybull:"⁃",hyphen:"‐",Iacute:"Í",iacute:"í",ic:"⁣",Icirc:"Î",icirc:"î",Icy:"И",icy:"и",Idot:"İ",IEcy:"Е",iecy:"е",iexcl:"¡",iff:"⇔",Ifr:"ℑ",ifr:"𝔦",Igrave:"Ì",igrave:"ì",ii:"ⅈ",iiiint:"⨌",iiint:"∭",iinfin:"⧜",iiota:"℩",IJlig:"IJ",ijlig:"ij",Im:"ℑ",Imacr:"Ī",imacr:"ī",image:"ℑ",ImaginaryI:"ⅈ",imagline:"ℐ",imagpart:"ℑ",imath:"ı",imof:"⊷",imped:"Ƶ",Implies:"⇒",in:"∈",incare:"℅",infin:"∞",infintie:"⧝",inodot:"ı",Int:"∬",int:"∫",intcal:"⊺",integers:"ℤ",Integral:"∫",intercal:"⊺",Intersection:"⋂",intlarhk:"⨗",intprod:"⨼",InvisibleComma:"⁣",InvisibleTimes:"⁢",IOcy:"Ё",iocy:"ё",Iogon:"Į",iogon:"į",Iopf:"𝕀",iopf:"𝕚",Iota:"Ι",iota:"ι",iprod:"⨼",iquest:"¿",Iscr:"ℐ",iscr:"𝒾",isin:"∈",isindot:"⋵",isinE:"⋹",isins:"⋴",isinsv:"⋳",isinv:"∈",it:"⁢",Itilde:"Ĩ",itilde:"ĩ",Iukcy:"І",iukcy:"і",Iuml:"Ï",iuml:"ï",Jcirc:"Ĵ",jcirc:"ĵ",Jcy:"Й",jcy:"й",Jfr:"𝔍",jfr:"𝔧",jmath:"ȷ",Jopf:"𝕁",jopf:"𝕛",Jscr:"𝒥",jscr:"𝒿",Jsercy:"Ј",jsercy:"ј",Jukcy:"Є",jukcy:"є",Kappa:"Κ",kappa:"κ",kappav:"ϰ",Kcedil:"Ķ",kcedil:"ķ",Kcy:"К",kcy:"к",Kfr:"𝔎",kfr:"𝔨",kgreen:"ĸ",KHcy:"Х",khcy:"х",KJcy:"Ќ",kjcy:"ќ",Kopf:"𝕂",kopf:"𝕜",Kscr:"𝒦",kscr:"𝓀",lAarr:"⇚",Lacute:"Ĺ",lacute:"ĺ",laemptyv:"⦴",lagran:"ℒ",Lambda:"Λ",lambda:"λ",Lang:"⟪",lang:"⟨",langd:"⦑",langle:"⟨",lap:"⪅",Laplacetrf:"ℒ",laquo:"«",Larr:"↞",lArr:"⇐",larr:"←",larrb:"⇤",larrbfs:"⤟",larrfs:"⤝",larrhk:"↩",larrlp:"↫",larrpl:"⤹",larrsim:"⥳",larrtl:"↢",lat:"⪫",lAtail:"⤛",latail:"⤙",late:"⪭",lates:"⪭︀",lBarr:"⤎",lbarr:"⤌",lbbrk:"❲",lbrace:"{",lbrack:"[",lbrke:"⦋",lbrksld:"⦏",lbrkslu:"⦍",Lcaron:"Ľ",lcaron:"ľ",Lcedil:"Ļ",lcedil:"ļ",lceil:"⌈",lcub:"{",Lcy:"Л",lcy:"л",ldca:"⤶",ldquo:"“",ldquor:"„",ldrdhar:"⥧",ldrushar:"⥋",ldsh:"↲",lE:"≦",le:"≤",LeftAngleBracket:"⟨",LeftArrow:"←",Leftarrow:"⇐",leftarrow:"←",LeftArrowBar:"⇤",LeftArrowRightArrow:"⇆",leftarrowtail:"↢",LeftCeiling:"⌈",LeftDoubleBracket:"⟦",LeftDownTeeVector:"⥡",LeftDownVector:"⇃",LeftDownVectorBar:"⥙",LeftFloor:"⌊",leftharpoondown:"↽",leftharpoonup:"↼",leftleftarrows:"⇇",LeftRightArrow:"↔",Leftrightarrow:"⇔",leftrightarrow:"↔",leftrightarrows:"⇆",leftrightharpoons:"⇋",leftrightsquigarrow:"↭",LeftRightVector:"⥎",LeftTee:"⊣",LeftTeeArrow:"↤",LeftTeeVector:"⥚",leftthreetimes:"⋋",LeftTriangle:"⊲",LeftTriangleBar:"⧏",LeftTriangleEqual:"⊴",LeftUpDownVector:"⥑",LeftUpTeeVector:"⥠",LeftUpVector:"↿",LeftUpVectorBar:"⥘",LeftVector:"↼",LeftVectorBar:"⥒",lEg:"⪋",leg:"⋚",leq:"≤",leqq:"≦",leqslant:"⩽",les:"⩽",lescc:"⪨",lesdot:"⩿",lesdoto:"⪁",lesdotor:"⪃",lesg:"⋚︀",lesges:"⪓",lessapprox:"⪅",lessdot:"⋖",lesseqgtr:"⋚",lesseqqgtr:"⪋",LessEqualGreater:"⋚",LessFullEqual:"≦",LessGreater:"≶",lessgtr:"≶",LessLess:"⪡",lesssim:"≲",LessSlantEqual:"⩽",LessTilde:"≲",lfisht:"⥼",lfloor:"⌊",Lfr:"𝔏",lfr:"𝔩",lg:"≶",lgE:"⪑",lHar:"⥢",lhard:"↽",lharu:"↼",lharul:"⥪",lhblk:"▄",LJcy:"Љ",ljcy:"љ",Ll:"⋘",ll:"≪",llarr:"⇇",llcorner:"⌞",Lleftarrow:"⇚",llhard:"⥫",lltri:"◺",Lmidot:"Ŀ",lmidot:"ŀ",lmoust:"⎰",lmoustache:"⎰",lnap:"⪉",lnapprox:"⪉",lnE:"≨",lne:"⪇",lneq:"⪇",lneqq:"≨",lnsim:"⋦",loang:"⟬",loarr:"⇽",lobrk:"⟦",LongLeftArrow:"⟵",Longleftarrow:"⟸",longleftarrow:"⟵",LongLeftRightArrow:"⟷",Longleftrightarrow:"⟺",longleftrightarrow:"⟷",longmapsto:"⟼",LongRightArrow:"⟶",Longrightarrow:"⟹",longrightarrow:"⟶",looparrowleft:"↫",looparrowright:"↬",lopar:"⦅",Lopf:"𝕃",lopf:"𝕝",loplus:"⨭",lotimes:"⨴",lowast:"∗",lowbar:"_",LowerLeftArrow:"↙",LowerRightArrow:"↘",loz:"◊",lozenge:"◊",lozf:"⧫",lpar:"(",lparlt:"⦓",lrarr:"⇆",lrcorner:"⌟",lrhar:"⇋",lrhard:"⥭",lrm:"‎",lrtri:"⊿",lsaquo:"‹",Lscr:"ℒ",lscr:"𝓁",Lsh:"↰",lsh:"↰",lsim:"≲",lsime:"⪍",lsimg:"⪏",lsqb:"[",lsquo:"‘",lsquor:"‚",Lstrok:"Ł",lstrok:"ł",Lt:"≪",LT:"<",lt:"<",ltcc:"⪦",ltcir:"⩹",ltdot:"⋖",lthree:"⋋",ltimes:"⋉",ltlarr:"⥶",ltquest:"⩻",ltri:"◃",ltrie:"⊴",ltrif:"◂",ltrPar:"⦖",lurdshar:"⥊",luruhar:"⥦",lvertneqq:"≨︀",lvnE:"≨︀",macr:"¯",male:"♂",malt:"✠",maltese:"✠",Map:"⤅",map:"↦",mapsto:"↦",mapstodown:"↧",mapstoleft:"↤",mapstoup:"↥",marker:"▮",mcomma:"⨩",Mcy:"М",mcy:"м",mdash:"—",mDDot:"∺",measuredangle:"∡",MediumSpace:" ",Mellintrf:"ℳ",Mfr:"𝔐",mfr:"𝔪",mho:"℧",micro:"µ",mid:"∣",midast:"*",midcir:"⫰",middot:"·",minus:"−",minusb:"⊟",minusd:"∸",minusdu:"⨪",MinusPlus:"∓",mlcp:"⫛",mldr:"…",mnplus:"∓",models:"⊧",Mopf:"𝕄",mopf:"𝕞",mp:"∓",Mscr:"ℳ",mscr:"𝓂",mstpos:"∾",Mu:"Μ",mu:"μ",multimap:"⊸",mumap:"⊸",nabla:"∇",Nacute:"Ń",nacute:"ń",nang:"∠⃒",nap:"≉",napE:"⩰̸",napid:"≋̸",napos:"ʼn",napprox:"≉",natur:"♮",natural:"♮",naturals:"ℕ",nbsp:" ",nbump:"≎̸",nbumpe:"≏̸",ncap:"⩃",Ncaron:"Ň",ncaron:"ň",Ncedil:"Ņ",ncedil:"ņ",ncong:"≇",ncongdot:"⩭̸",ncup:"⩂",Ncy:"Н",ncy:"н",ndash:"–",ne:"≠",nearhk:"⤤",neArr:"⇗",nearr:"↗",nearrow:"↗",nedot:"≐̸",NegativeMediumSpace:"​",NegativeThickSpace:"​",NegativeThinSpace:"​",NegativeVeryThinSpace:"​",nequiv:"≢",nesear:"⤨",nesim:"≂̸",NestedGreaterGreater:"≫",NestedLessLess:"≪",NewLine:"\n",nexist:"∄",nexists:"∄",Nfr:"𝔑",nfr:"𝔫",ngE:"≧̸",nge:"≱",ngeq:"≱",ngeqq:"≧̸",ngeqslant:"⩾̸",nges:"⩾̸",nGg:"⋙̸",ngsim:"≵",nGt:"≫⃒",ngt:"≯",ngtr:"≯",nGtv:"≫̸",nhArr:"⇎",nharr:"↮",nhpar:"⫲",ni:"∋",nis:"⋼",nisd:"⋺",niv:"∋",NJcy:"Њ",njcy:"њ",nlArr:"⇍",nlarr:"↚",nldr:"‥",nlE:"≦̸",nle:"≰",nLeftarrow:"⇍",nleftarrow:"↚",nLeftrightarrow:"⇎",nleftrightarrow:"↮",nleq:"≰",nleqq:"≦̸",nleqslant:"⩽̸",nles:"⩽̸",nless:"≮",nLl:"⋘̸",nlsim:"≴",nLt:"≪⃒",nlt:"≮",nltri:"⋪",nltrie:"⋬",nLtv:"≪̸",nmid:"∤",NoBreak:"⁠",NonBreakingSpace:" ",Nopf:"ℕ",nopf:"𝕟",Not:"⫬",not:"¬",NotCongruent:"≢",NotCupCap:"≭",NotDoubleVerticalBar:"∦",NotElement:"∉",NotEqual:"≠",NotEqualTilde:"≂̸",NotExists:"∄",NotGreater:"≯",NotGreaterEqual:"≱",NotGreaterFullEqual:"≧̸",NotGreaterGreater:"≫̸",NotGreaterLess:"≹",NotGreaterSlantEqual:"⩾̸",NotGreaterTilde:"≵",NotHumpDownHump:"≎̸",NotHumpEqual:"≏̸",notin:"∉",notindot:"⋵̸",notinE:"⋹̸",notinva:"∉",notinvb:"⋷",notinvc:"⋶",NotLeftTriangle:"⋪",NotLeftTriangleBar:"⧏̸",NotLeftTriangleEqual:"⋬",NotLess:"≮",NotLessEqual:"≰",NotLessGreater:"≸",NotLessLess:"≪̸",NotLessSlantEqual:"⩽̸",NotLessTilde:"≴",NotNestedGreaterGreater:"⪢̸",NotNestedLessLess:"⪡̸",notni:"∌",notniva:"∌",notnivb:"⋾",notnivc:"⋽",NotPrecedes:"⊀",NotPrecedesEqual:"⪯̸",NotPrecedesSlantEqual:"⋠",NotReverseElement:"∌",NotRightTriangle:"⋫",NotRightTriangleBar:"⧐̸",NotRightTriangleEqual:"⋭",NotSquareSubset:"⊏̸",NotSquareSubsetEqual:"⋢",NotSquareSuperset:"⊐̸",NotSquareSupersetEqual:"⋣",NotSubset:"⊂⃒",NotSubsetEqual:"⊈",NotSucceeds:"⊁",NotSucceedsEqual:"⪰̸",NotSucceedsSlantEqual:"⋡",NotSucceedsTilde:"≿̸",NotSuperset:"⊃⃒",NotSupersetEqual:"⊉",NotTilde:"≁",NotTildeEqual:"≄",NotTildeFullEqual:"≇",NotTildeTilde:"≉",NotVerticalBar:"∤",npar:"∦",nparallel:"∦",nparsl:"⫽⃥",npart:"∂̸",npolint:"⨔",npr:"⊀",nprcue:"⋠",npre:"⪯̸",nprec:"⊀",npreceq:"⪯̸",nrArr:"⇏",nrarr:"↛",nrarrc:"⤳̸",nrarrw:"↝̸",nRightarrow:"⇏",nrightarrow:"↛",nrtri:"⋫",nrtrie:"⋭",nsc:"⊁",nsccue:"⋡",nsce:"⪰̸",Nscr:"𝒩",nscr:"𝓃",nshortmid:"∤",nshortparallel:"∦",nsim:"≁",nsime:"≄",nsimeq:"≄",nsmid:"∤",nspar:"∦",nsqsube:"⋢",nsqsupe:"⋣",nsub:"⊄",nsubE:"⫅̸",nsube:"⊈",nsubset:"⊂⃒",nsubseteq:"⊈",nsubseteqq:"⫅̸",nsucc:"⊁",nsucceq:"⪰̸",nsup:"⊅",nsupE:"⫆̸",nsupe:"⊉",nsupset:"⊃⃒",nsupseteq:"⊉",nsupseteqq:"⫆̸",ntgl:"≹",Ntilde:"Ñ",ntilde:"ñ",ntlg:"≸",ntriangleleft:"⋪",ntrianglelefteq:"⋬",ntriangleright:"⋫",ntrianglerighteq:"⋭",Nu:"Ν",nu:"ν",num:"#",numero:"№",numsp:" ",nvap:"≍⃒",nVDash:"⊯",nVdash:"⊮",nvDash:"⊭",nvdash:"⊬",nvge:"≥⃒",nvgt:">⃒",nvHarr:"⤄",nvinfin:"⧞",nvlArr:"⤂",nvle:"≤⃒",nvlt:"<⃒",nvltrie:"⊴⃒",nvrArr:"⤃",nvrtrie:"⊵⃒",nvsim:"∼⃒",nwarhk:"⤣",nwArr:"⇖",nwarr:"↖",nwarrow:"↖",nwnear:"⤧",Oacute:"Ó",oacute:"ó",oast:"⊛",ocir:"⊚",Ocirc:"Ô",ocirc:"ô",Ocy:"О",ocy:"о",odash:"⊝",Odblac:"Ő",odblac:"ő",odiv:"⨸",odot:"⊙",odsold:"⦼",OElig:"Œ",oelig:"œ",ofcir:"⦿",Ofr:"𝔒",ofr:"𝔬",ogon:"˛",Ograve:"Ò",ograve:"ò",ogt:"⧁",ohbar:"⦵",ohm:"Ω",oint:"∮",olarr:"↺",olcir:"⦾",olcross:"⦻",oline:"‾",olt:"⧀",Omacr:"Ō",omacr:"ō",Omega:"Ω",omega:"ω",Omicron:"Ο",omicron:"ο",omid:"⦶",ominus:"⊖",Oopf:"𝕆",oopf:"𝕠",opar:"⦷",OpenCurlyDoubleQuote:"“",OpenCurlyQuote:"‘",operp:"⦹",oplus:"⊕",Or:"⩔",or:"∨",orarr:"↻",ord:"⩝",order:"ℴ",orderof:"ℴ",ordf:"ª",ordm:"º",origof:"⊶",oror:"⩖",orslope:"⩗",orv:"⩛",oS:"Ⓢ",Oscr:"𝒪",oscr:"ℴ",Oslash:"Ø",oslash:"ø",osol:"⊘",Otilde:"Õ",otilde:"õ",Otimes:"⨷",otimes:"⊗",otimesas:"⨶",Ouml:"Ö",ouml:"ö",ovbar:"⌽",OverBar:"‾",OverBrace:"⏞",OverBracket:"⎴",OverParenthesis:"⏜",par:"∥",para:"¶",parallel:"∥",parsim:"⫳",parsl:"⫽",part:"∂",PartialD:"∂",Pcy:"П",pcy:"п",percnt:"%",period:".",permil:"‰",perp:"⊥",pertenk:"‱",Pfr:"𝔓",pfr:"𝔭",Phi:"Φ",phi:"φ",phiv:"ϕ",phmmat:"ℳ",phone:"☎",Pi:"Π",pi:"π",pitchfork:"⋔",piv:"ϖ",planck:"ℏ",planckh:"ℎ",plankv:"ℏ",plus:"+",plusacir:"⨣",plusb:"⊞",pluscir:"⨢",plusdo:"∔",plusdu:"⨥",pluse:"⩲",PlusMinus:"±",plusmn:"±",plussim:"⨦",plustwo:"⨧",pm:"±",Poincareplane:"ℌ",pointint:"⨕",Popf:"ℙ",popf:"𝕡",pound:"£",Pr:"⪻",pr:"≺",prap:"⪷",prcue:"≼",prE:"⪳",pre:"⪯",prec:"≺",precapprox:"⪷",preccurlyeq:"≼",Precedes:"≺",PrecedesEqual:"⪯",PrecedesSlantEqual:"≼",PrecedesTilde:"≾",preceq:"⪯",precnapprox:"⪹",precneqq:"⪵",precnsim:"⋨",precsim:"≾",Prime:"″",prime:"′",primes:"ℙ",prnap:"⪹",prnE:"⪵",prnsim:"⋨",prod:"∏",Product:"∏",profalar:"⌮",profline:"⌒",profsurf:"⌓",prop:"∝",Proportion:"∷",Proportional:"∝",propto:"∝",prsim:"≾",prurel:"⊰",Pscr:"𝒫",pscr:"𝓅",Psi:"Ψ",psi:"ψ",puncsp:" ",Qfr:"𝔔",qfr:"𝔮",qint:"⨌",Qopf:"ℚ",qopf:"𝕢",qprime:"⁗",Qscr:"𝒬",qscr:"𝓆",quaternions:"ℍ",quatint:"⨖",quest:"?",questeq:"≟",QUOT:'"',quot:'"',rAarr:"⇛",race:"∽̱",Racute:"Ŕ",racute:"ŕ",radic:"√",raemptyv:"⦳",Rang:"⟫",rang:"⟩",rangd:"⦒",range:"⦥",rangle:"⟩",raquo:"»",Rarr:"↠",rArr:"⇒",rarr:"→",rarrap:"⥵",rarrb:"⇥",rarrbfs:"⤠",rarrc:"⤳",rarrfs:"⤞",rarrhk:"↪",rarrlp:"↬",rarrpl:"⥅",rarrsim:"⥴",Rarrtl:"⤖",rarrtl:"↣",rarrw:"↝",rAtail:"⤜",ratail:"⤚",ratio:"∶",rationals:"ℚ",RBarr:"⤐",rBarr:"⤏",rbarr:"⤍",rbbrk:"❳",rbrace:"}",rbrack:"]",rbrke:"⦌",rbrksld:"⦎",rbrkslu:"⦐",Rcaron:"Ř",rcaron:"ř",Rcedil:"Ŗ",rcedil:"ŗ",rceil:"⌉",rcub:"}",Rcy:"Р",rcy:"р",rdca:"⤷",rdldhar:"⥩",rdquo:"”",rdquor:"”",rdsh:"↳",Re:"ℜ",real:"ℜ",realine:"ℛ",realpart:"ℜ",reals:"ℝ",rect:"▭",REG:"®",reg:"®",ReverseElement:"∋",ReverseEquilibrium:"⇋",ReverseUpEquilibrium:"⥯",rfisht:"⥽",rfloor:"⌋",Rfr:"ℜ",rfr:"𝔯",rHar:"⥤",rhard:"⇁",rharu:"⇀",rharul:"⥬",Rho:"Ρ",rho:"ρ",rhov:"ϱ",RightAngleBracket:"⟩",RightArrow:"→",Rightarrow:"⇒",rightarrow:"→",RightArrowBar:"⇥",RightArrowLeftArrow:"⇄",rightarrowtail:"↣",RightCeiling:"⌉",RightDoubleBracket:"⟧",RightDownTeeVector:"⥝",RightDownVector:"⇂",RightDownVectorBar:"⥕",RightFloor:"⌋",rightharpoondown:"⇁",rightharpoonup:"⇀",rightleftarrows:"⇄",rightleftharpoons:"⇌",rightrightarrows:"⇉",rightsquigarrow:"↝",RightTee:"⊢",RightTeeArrow:"↦",RightTeeVector:"⥛",rightthreetimes:"⋌",RightTriangle:"⊳",RightTriangleBar:"⧐",RightTriangleEqual:"⊵",RightUpDownVector:"⥏",RightUpTeeVector:"⥜",RightUpVector:"↾",RightUpVectorBar:"⥔",RightVector:"⇀",RightVectorBar:"⥓",ring:"˚",risingdotseq:"≓",rlarr:"⇄",rlhar:"⇌",rlm:"‏",rmoust:"⎱",rmoustache:"⎱",rnmid:"⫮",roang:"⟭",roarr:"⇾",robrk:"⟧",ropar:"⦆",Ropf:"ℝ",ropf:"𝕣",roplus:"⨮",rotimes:"⨵",RoundImplies:"⥰",rpar:")",rpargt:"⦔",rppolint:"⨒",rrarr:"⇉",Rrightarrow:"⇛",rsaquo:"›",Rscr:"ℛ",rscr:"𝓇",Rsh:"↱",rsh:"↱",rsqb:"]",rsquo:"’",rsquor:"’",rthree:"⋌",rtimes:"⋊",rtri:"▹",rtrie:"⊵",rtrif:"▸",rtriltri:"⧎",RuleDelayed:"⧴",ruluhar:"⥨",rx:"℞",Sacute:"Ś",sacute:"ś",sbquo:"‚",Sc:"⪼",sc:"≻",scap:"⪸",Scaron:"Š",scaron:"š",sccue:"≽",scE:"⪴",sce:"⪰",Scedil:"Ş",scedil:"ş",Scirc:"Ŝ",scirc:"ŝ",scnap:"⪺",scnE:"⪶",scnsim:"⋩",scpolint:"⨓",scsim:"≿",Scy:"С",scy:"с",sdot:"⋅",sdotb:"⊡",sdote:"⩦",searhk:"⤥",seArr:"⇘",searr:"↘",searrow:"↘",sect:"§",semi:";",seswar:"⤩",setminus:"∖",setmn:"∖",sext:"✶",Sfr:"𝔖",sfr:"𝔰",sfrown:"⌢",sharp:"♯",SHCHcy:"Щ",shchcy:"щ",SHcy:"Ш",shcy:"ш",ShortDownArrow:"↓",ShortLeftArrow:"←",shortmid:"∣",shortparallel:"∥",ShortRightArrow:"→",ShortUpArrow:"↑",shy:"­",Sigma:"Σ",sigma:"σ",sigmaf:"ς",sigmav:"ς",sim:"∼",simdot:"⩪",sime:"≃",simeq:"≃",simg:"⪞",simgE:"⪠",siml:"⪝",simlE:"⪟",simne:"≆",simplus:"⨤",simrarr:"⥲",slarr:"←",SmallCircle:"∘",smallsetminus:"∖",smashp:"⨳",smeparsl:"⧤",smid:"∣",smile:"⌣",smt:"⪪",smte:"⪬",smtes:"⪬︀",SOFTcy:"Ь",softcy:"ь",sol:"/",solb:"⧄",solbar:"⌿",Sopf:"𝕊",sopf:"𝕤",spades:"♠",spadesuit:"♠",spar:"∥",sqcap:"⊓",sqcaps:"⊓︀",sqcup:"⊔",sqcups:"⊔︀",Sqrt:"√",sqsub:"⊏",sqsube:"⊑",sqsubset:"⊏",sqsubseteq:"⊑",sqsup:"⊐",sqsupe:"⊒",sqsupset:"⊐",sqsupseteq:"⊒",squ:"□",Square:"□",square:"□",SquareIntersection:"⊓",SquareSubset:"⊏",SquareSubsetEqual:"⊑",SquareSuperset:"⊐",SquareSupersetEqual:"⊒",SquareUnion:"⊔",squarf:"▪",squf:"▪",srarr:"→",Sscr:"𝒮",sscr:"𝓈",ssetmn:"∖",ssmile:"⌣",sstarf:"⋆",Star:"⋆",star:"☆",starf:"★",straightepsilon:"ϵ",straightphi:"ϕ",strns:"¯",Sub:"⋐",sub:"⊂",subdot:"⪽",subE:"⫅",sube:"⊆",subedot:"⫃",submult:"⫁",subnE:"⫋",subne:"⊊",subplus:"⪿",subrarr:"⥹",Subset:"⋐",subset:"⊂",subseteq:"⊆",subseteqq:"⫅",SubsetEqual:"⊆",subsetneq:"⊊",subsetneqq:"⫋",subsim:"⫇",subsub:"⫕",subsup:"⫓",succ:"≻",succapprox:"⪸",succcurlyeq:"≽",Succeeds:"≻",SucceedsEqual:"⪰",SucceedsSlantEqual:"≽",SucceedsTilde:"≿",succeq:"⪰",succnapprox:"⪺",succneqq:"⪶",succnsim:"⋩",succsim:"≿",SuchThat:"∋",Sum:"∑",sum:"∑",sung:"♪",Sup:"⋑",sup:"⊃",sup1:"¹",sup2:"²",sup3:"³",supdot:"⪾",supdsub:"⫘",supE:"⫆",supe:"⊇",supedot:"⫄",Superset:"⊃",SupersetEqual:"⊇",suphsol:"⟉",suphsub:"⫗",suplarr:"⥻",supmult:"⫂",supnE:"⫌",supne:"⊋",supplus:"⫀",Supset:"⋑",supset:"⊃",supseteq:"⊇",supseteqq:"⫆",supsetneq:"⊋",supsetneqq:"⫌",supsim:"⫈",supsub:"⫔",supsup:"⫖",swarhk:"⤦",swArr:"⇙",swarr:"↙",swarrow:"↙",swnwar:"⤪",szlig:"ß",Tab:"\t",target:"⌖",Tau:"Τ",tau:"τ",tbrk:"⎴",Tcaron:"Ť",tcaron:"ť",Tcedil:"Ţ",tcedil:"ţ",Tcy:"Т",tcy:"т",tdot:"⃛",telrec:"⌕",Tfr:"𝔗",tfr:"𝔱",there4:"∴",Therefore:"∴",therefore:"∴",Theta:"Θ",theta:"θ",thetasym:"ϑ",thetav:"ϑ",thickapprox:"≈",thicksim:"∼",ThickSpace:"  ",thinsp:" ",ThinSpace:" ",thkap:"≈",thksim:"∼",THORN:"Þ",thorn:"þ",Tilde:"∼",tilde:"˜",TildeEqual:"≃",TildeFullEqual:"≅",TildeTilde:"≈",times:"×",timesb:"⊠",timesbar:"⨱",timesd:"⨰",tint:"∭",toea:"⤨",top:"⊤",topbot:"⌶",topcir:"⫱",Topf:"𝕋",topf:"𝕥",topfork:"⫚",tosa:"⤩",tprime:"‴",TRADE:"™",trade:"™",triangle:"▵",triangledown:"▿",triangleleft:"◃",trianglelefteq:"⊴",triangleq:"≜",triangleright:"▹",trianglerighteq:"⊵",tridot:"◬",trie:"≜",triminus:"⨺",TripleDot:"⃛",triplus:"⨹",trisb:"⧍",tritime:"⨻",trpezium:"⏢",Tscr:"𝒯",tscr:"𝓉",TScy:"Ц",tscy:"ц",TSHcy:"Ћ",tshcy:"ћ",Tstrok:"Ŧ",tstrok:"ŧ",twixt:"≬",twoheadleftarrow:"↞",twoheadrightarrow:"↠",Uacute:"Ú",uacute:"ú",Uarr:"↟",uArr:"⇑",uarr:"↑",Uarrocir:"⥉",Ubrcy:"Ў",ubrcy:"ў",Ubreve:"Ŭ",ubreve:"ŭ",Ucirc:"Û",ucirc:"û",Ucy:"У",ucy:"у",udarr:"⇅",Udblac:"Ű",udblac:"ű",udhar:"⥮",ufisht:"⥾",Ufr:"𝔘",ufr:"𝔲",Ugrave:"Ù",ugrave:"ù",uHar:"⥣",uharl:"↿",uharr:"↾",uhblk:"▀",ulcorn:"⌜",ulcorner:"⌜",ulcrop:"⌏",ultri:"◸",Umacr:"Ū",umacr:"ū",uml:"¨",UnderBar:"_",UnderBrace:"⏟",UnderBracket:"⎵",UnderParenthesis:"⏝",Union:"⋃",UnionPlus:"⊎",Uogon:"Ų",uogon:"ų",Uopf:"𝕌",uopf:"𝕦",UpArrow:"↑",Uparrow:"⇑",uparrow:"↑",UpArrowBar:"⤒",UpArrowDownArrow:"⇅",UpDownArrow:"↕",Updownarrow:"⇕",updownarrow:"↕",UpEquilibrium:"⥮",upharpoonleft:"↿",upharpoonright:"↾",uplus:"⊎",UpperLeftArrow:"↖",UpperRightArrow:"↗",Upsi:"ϒ",upsi:"υ",upsih:"ϒ",Upsilon:"Υ",upsilon:"υ",UpTee:"⊥",UpTeeArrow:"↥",upuparrows:"⇈",urcorn:"⌝",urcorner:"⌝",urcrop:"⌎",Uring:"Ů",uring:"ů",urtri:"◹",Uscr:"𝒰",uscr:"𝓊",utdot:"⋰",Utilde:"Ũ",utilde:"ũ",utri:"▵",utrif:"▴",uuarr:"⇈",Uuml:"Ü",uuml:"ü",uwangle:"⦧",vangrt:"⦜",varepsilon:"ϵ",varkappa:"ϰ",varnothing:"∅",varphi:"ϕ",varpi:"ϖ",varpropto:"∝",vArr:"⇕",varr:"↕",varrho:"ϱ",varsigma:"ς",varsubsetneq:"⊊︀",varsubsetneqq:"⫋︀",varsupsetneq:"⊋︀",varsupsetneqq:"⫌︀",vartheta:"ϑ",vartriangleleft:"⊲",vartriangleright:"⊳",Vbar:"⫫",vBar:"⫨",vBarv:"⫩",Vcy:"В",vcy:"в",VDash:"⊫",Vdash:"⊩",vDash:"⊨",vdash:"⊢",Vdashl:"⫦",Vee:"⋁",vee:"∨",veebar:"⊻",veeeq:"≚",vellip:"⋮",Verbar:"‖",verbar:"|",Vert:"‖",vert:"|",VerticalBar:"∣",VerticalLine:"|",VerticalSeparator:"❘",VerticalTilde:"≀",VeryThinSpace:" ",Vfr:"𝔙",vfr:"𝔳",vltri:"⊲",vnsub:"⊂⃒",vnsup:"⊃⃒",Vopf:"𝕍",vopf:"𝕧",vprop:"∝",vrtri:"⊳",Vscr:"𝒱",vscr:"𝓋",vsubnE:"⫋︀",vsubne:"⊊︀",vsupnE:"⫌︀",vsupne:"⊋︀",Vvdash:"⊪",vzigzag:"⦚",Wcirc:"Ŵ",wcirc:"ŵ",wedbar:"⩟",Wedge:"⋀",wedge:"∧",wedgeq:"≙",weierp:"℘",Wfr:"𝔚",wfr:"𝔴",Wopf:"𝕎",wopf:"𝕨",wp:"℘",wr:"≀",wreath:"≀",Wscr:"𝒲",wscr:"𝓌",xcap:"⋂",xcirc:"◯",xcup:"⋃",xdtri:"▽",Xfr:"𝔛",xfr:"𝔵",xhArr:"⟺",xharr:"⟷",Xi:"Ξ",xi:"ξ",xlArr:"⟸",xlarr:"⟵",xmap:"⟼",xnis:"⋻",xodot:"⨀",Xopf:"𝕏",xopf:"𝕩",xoplus:"⨁",xotime:"⨂",xrArr:"⟹",xrarr:"⟶",Xscr:"𝒳",xscr:"𝓍",xsqcup:"⨆",xuplus:"⨄",xutri:"△",xvee:"⋁",xwedge:"⋀",Yacute:"Ý",yacute:"ý",YAcy:"Я",yacy:"я",Ycirc:"Ŷ",ycirc:"ŷ",Ycy:"Ы",ycy:"ы",yen:"¥",Yfr:"𝔜",yfr:"𝔶",YIcy:"Ї",yicy:"ї",Yopf:"𝕐",yopf:"𝕪",Yscr:"𝒴",yscr:"𝓎",YUcy:"Ю",yucy:"ю",Yuml:"Ÿ",yuml:"ÿ",Zacute:"Ź",zacute:"ź",Zcaron:"Ž",zcaron:"ž",Zcy:"З",zcy:"з",Zdot:"Ż",zdot:"ż",zeetrf:"ℨ",ZeroWidthSpace:"​",Zeta:"Ζ",zeta:"ζ",Zfr:"ℨ",zfr:"𝔷",ZHcy:"Ж",zhcy:"ж",zigrarr:"⇝",Zopf:"ℤ",zopf:"𝕫",Zscr:"𝒵",zscr:"𝓏",zwj:"‍",zwnj:"‌"}),t.entityMap=t.HTML_ENTITIES},function(e,t,r){var n=r(2).NAMESPACE,o=/[A-Z_a-z\xC0-\xD6\xD8-\xF6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/,a=new RegExp("[\\-\\.0-9"+o.source.slice(1,-1)+"\\u00B7\\u0300-\\u036F\\u203F-\\u2040]"),i=new RegExp("^"+o.source+a.source+"*(?::"+o.source+a.source+"*)?$"),s=0,c=1,u=2,l=3,d=4,p=5,f=6,h=7;function g(e,t){this.message=e,this.locator=t,Error.captureStackTrace&&Error.captureStackTrace(this,g)}function m(){}function y(e,t){return t.lineNumber=e.lineNumber,t.columnNumber=e.columnNumber,t}function v(e,t,r,o,a,i){function g(e,t,n){r.attributeNames.hasOwnProperty(e)&&i.fatalError("Attribute "+e+" redefined"),r.addValue(e,t.replace(/[\t\n\r]/g," ").replace(/&#?\w+;/g,a),n)}for(var m,y=++t,v=s;;){var k=e.charAt(y);switch(k){case"=":if(v===c)m=e.slice(t,y),v=l;else{if(v!==u)throw new Error("attribute equal must after attrName");v=l}break;case"'":case'"':if(v===l||v===c){if(v===c&&(i.warning('attribute value must after "="'),m=e.slice(t,y)),t=y+1,!((y=e.indexOf(k,t))>0))throw new Error("attribute value no end '"+k+"' match");g(m,C=e.slice(t,y),t-1),v=p}else{if(v!=d)throw new Error('attribute value must after "="');g(m,C=e.slice(t,y),t),i.warning('attribute "'+m+'" missed start quot('+k+")!!"),t=y+1,v=p}break;case"/":switch(v){case s:r.setTagName(e.slice(t,y));case p:case f:case h:v=h,r.closed=!0;case d:case c:break;case u:r.closed=!0;break;default:throw new Error("attribute invalid close char('/')")}break;case"":return i.error("unexpected end of input"),v==s&&r.setTagName(e.slice(t,y)),y;case">":switch(v){case s:r.setTagName(e.slice(t,y));case p:case f:case h:break;case d:case c:"/"===(C=e.slice(t,y)).slice(-1)&&(r.closed=!0,C=C.slice(0,-1));case u:v===u&&(C=m),v==d?(i.warning('attribute "'+C+'" missed quot(")!'),g(m,C,t)):(n.isHTML(o[""])&&C.match(/^(?:disabled|checked|selected)$/i)||i.warning('attribute "'+C+'" missed value!! "'+C+'" instead!!'),g(C,C,t));break;case l:throw new Error("attribute value missed!!")}return y;case"€":k=" ";default:if(k<=" ")switch(v){case s:r.setTagName(e.slice(t,y)),v=f;break;case c:m=e.slice(t,y),v=u;break;case d:var C=e.slice(t,y);i.warning('attribute "'+C+'" missed quot(")!!'),g(m,C,t);case p:v=f}else switch(v){case u:r.tagName;n.isHTML(o[""])&&m.match(/^(?:disabled|checked|selected)$/i)||i.warning('attribute "'+m+'" missed value!! "'+m+'" instead2!!'),g(m,m,t),t=y,v=c;break;case p:i.warning('attribute space is required"'+m+'"!!');case f:v=c,t=y;break;case l:v=d,t=y;break;case h:throw new Error("elements closed character '/' and '>' must be connected to")}}y++}}function k(e,t,r){for(var o=e.tagName,a=null,i=e.length;i--;){var s=e[i],c=s.qName,u=s.value;if((f=c.indexOf(":"))>0)var l=s.prefix=c.slice(0,f),d=c.slice(f+1),p="xmlns"===l&&d;else d=c,l=null,p="xmlns"===c&&"";s.localName=d,!1!==p&&(null==a&&(a={},S(r,r={})),r[p]=a[p]=u,s.uri=n.XMLNS,t.startPrefixMapping(p,u))}for(i=e.length;i--;){(l=(s=e[i]).prefix)&&("xml"===l&&(s.uri=n.XML),"xmlns"!==l&&(s.uri=r[l||""]))}var f;(f=o.indexOf(":"))>0?(l=e.prefix=o.slice(0,f),d=e.localName=o.slice(f+1)):(l=null,d=e.localName=o);var h=e.uri=r[l||""];if(t.startElement(h,d,o,e),!e.closed)return e.currentNSMap=r,e.localNSMap=a,!0;if(t.endElement(h,d,o),a)for(l in a)Object.prototype.hasOwnProperty.call(a,l)&&t.endPrefixMapping(l)}function C(e,t,r,n,o){if(/^(?:script|textarea)$/i.test(r)){var a=e.indexOf("",t),i=e.substring(t+1,a);if(/[&<]/.test(i))return/^script$/i.test(r)?(o.characters(i,0,i.length),a):(i=i.replace(/&#?\w+;/g,n),o.characters(i,0,i.length),a)}return t+1}function b(e,t,r,n){var o=n[r];return null==o&&((o=e.lastIndexOf(""))t?(r.comment(e,t+4,o-t-4),o+3):(n.error("Unclosed comment"),-1):-1;if("CDATA["==e.substr(t+3,6)){var o=e.indexOf("]]>",t+9);return r.startCDATA(),r.characters(e,t+9,o-t-9),r.endCDATA(),o+3}var a=function(e,t){var r,n=[],o=/'[^']+'|"[^"]+"|[^\s<>\/=]+=?|(\/?\s*>|<)/g;o.lastIndex=t,o.exec(e);for(;r=o.exec(e);)if(n.push(r),r[1])return n}(e,t),i=a.length;if(i>1&&/!doctype/i.test(a[0][0])){var s=a[1][0],c=!1,u=!1;i>3&&(/^public$/i.test(a[2][0])?(c=a[3][0],u=i>4&&a[4][0]):/^system$/i.test(a[2][0])&&(u=a[3][0]));var l=a[i-1];return r.startDTD(s,c,u),r.endDTD(),l.index+l[0].length}return-1}function w(e,t,r){var n=e.indexOf("?>",t);if(n){var o=e.substring(t,n).match(/^<\?(\S*)\s*([\s\S]*?)\s*$/);if(o){o[0].length;return r.processingInstruction(o[1],o[2]),n+2}return-1}return-1}function R(){this.attributeNames={}}g.prototype=new Error,g.prototype.name=g.name,m.prototype={parse:function(e,t,r){var o=this.domBuilder;o.startDocument(),S(t,t={}),function(e,t,r,o,a){function i(e){if(e>65535){var t=55296+((e-=65536)>>10),r=56320+(1023&e);return String.fromCharCode(t,r)}return String.fromCharCode(e)}function s(e){var t=e.slice(1,-1);return Object.hasOwnProperty.call(r,t)?r[t]:"#"===t.charAt(0)?i(parseInt(t.substr(1).replace("x","0x"))):(a.error("entity not found:"+e),e)}function c(t){if(t>S){var r=e.substring(S,t).replace(/&#?\w+;/g,s);f&&u(S),o.characters(r,0,t-S),S=t}}function u(t,r){for(;t>=d&&(r=p.exec(e));)l=r.index,d=l+r[0].length,f.lineNumber++;f.columnNumber=t-l+1}var l=0,d=0,p=/.*(?:\r\n?|\n)|.*$/g,f=o.locator,h=[{currentNSMap:t}],m={},S=0;for(;;){try{var x=e.indexOf("<",S);if(x<0){if(!e.substr(S).match(/^\s*$/)){var A=o.doc,E=A.createTextNode(e.substr(S));A.appendChild(E),o.currentElement=E}return}switch(x>S&&c(x),e.charAt(x+1)){case"/":var B=e.indexOf(">",x+3),D=e.substring(x+2,B).replace(/[ \t\n\r]+$/g,""),N=h.pop();B<0?(D=e.substring(x+2).replace(/[\s<].*/,""),a.error("end tag name: "+D+" is not complete:"+N.tagName),B=x+1+D.length):D.match(/\sS?S=B:c(Math.max(x,S)+1)}}(e,t,r,o,this.errorHandler),o.endDocument()}},R.prototype={setTagName:function(e){if(!i.test(e))throw new Error("invalid tagName:"+e);this.tagName=e},addValue:function(e,t,r){if(!i.test(e))throw new Error("invalid attribute:"+e);this.attributeNames[e]=this.length,this[this.length++]={qName:e,value:t,offset:r}},length:0,getLocalName:function(e){return this[e].localName},getLocator:function(e){return this[e].locator},getQName:function(e){return this[e].qName},getURI:function(e){return this[e].uri},getValue:function(e){return this[e].value}},t.XMLReader=m,t.ParseError=g},function(e,t,r){var n=r(0),o="a-zA-Z_À-ÖØ-öø-ÿͰ-ͽͿ-῿‌-‍⁰-↏Ⰰ-⿿、-퟿豈-﷏ﷰ-�",a=new RegExp("^([^"+o+"])|^((x|X)(m|M)(l|L))|([^"+o+"-.0-9·̀-ͯ‿⁀])","g"),i=/[^\x09\x0A\x0D\x20-\xFF\x85\xA0-\uD7FF\uE000-\uFDCF\uFDE0-\uFFFD]/gm,s=function(e){var t=[];if(e instanceof Object)for(var r in e)e.hasOwnProperty(r)&&t.push(r);return t},c=function(e,t){var r=function(e,r,n,o,i){var s=void 0!==t.indent?t.indent:"\t",c=t.prettyPrint?"\n"+new Array(o).join(s):"";t.removeIllegalNameCharacters&&(e=e.replace(a,"_"));var u=[c,"<",e,n||""];return r&&r.length>0?(u.push(">"),u.push(r),i&&u.push(c),u.push("")):u.push("/>"),u.join("")};return function e(o,a,c){var u=n(o);switch((Array.isArray?Array.isArray(o):o instanceof Array)?u="array":o instanceof Date&&(u="date"),u){case"array":var l=[];return o.map((function(t){l.push(e(t,1,c+1))})),t.prettyPrint&&l.push("\n"),l.join("");case"date":return o.toJSON?o.toJSON():o+"";case"object":var d=[];for(var p in o)if(o.hasOwnProperty(p))if(o[p]instanceof Array)for(var f=0;f0&&d.push("\n"),d.join("");case"function":return o();default:return t.escape?(""+o).replace(/&/g,"&").replace(//g,">").replace(/'/g,"'").replace(/"/g,""").replace(i,""):""+o}}(e,0,0)},u=function(e){var t=['"),t.join("")};e.exports=function(e,t){if(t||(t={xmlHeader:{standalone:!0},prettyPrint:!0,indent:" ",escape:!0}),"string"==typeof e)try{e=JSON.parse(e.toString())}catch(e){return!1}var r="",o="";return t&&("object"==n(t)?(t.xmlHeader&&(r=u(!!t.xmlHeader.standalone)),void 0!==t.docType&&(o="")):r=u()),[r,(t=t||{}).prettyPrint&&o?"\n":"",o,c(e,t)].join("").replace(/\n{2,}/g,"\n").replace(/\s+$/g,"")}},function(e,t){var r=function(e){var t=(e=e||{}).Base64,r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",n=function(e){for(var t={},r=0,n=e.length;r>>6)+o(128|63&t):o(224|t>>>12&15)+o(128|t>>>6&63)+o(128|63&t);var t=65536+1024*(e.charCodeAt(0)-55296)+(e.charCodeAt(1)-56320);return o(240|t>>>18&7)+o(128|t>>>12&63)+o(128|t>>>6&63)+o(128|63&t)},i=/[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g,s=function(e){return e.replace(i,a)},c=function(e){var t=[0,2,1][e.length%3],n=e.charCodeAt(0)<<16|(e.length>1?e.charCodeAt(1):0)<<8|(e.length>2?e.charCodeAt(2):0);return[r.charAt(n>>>18),r.charAt(n>>>12&63),t>=2?"=":r.charAt(n>>>6&63),t>=1?"=":r.charAt(63&n)].join("")},u=e.btoa?function(t){return e.btoa(t)}:function(e){return e.replace(/[\s\S]{1,3}/g,c)},l=function(e){return u(s(e))},d=function(e,t){return t?l(String(e)).replace(/[+\/]/g,(function(e){return"+"==e?"-":"_"})).replace(/=/g,""):l(String(e))},p=new RegExp(["[À-ß][€-¿]","[à-ï][€-¿]{2}","[ð-÷][€-¿]{3}"].join("|"),"g"),f=function(e){switch(e.length){case 4:var t=((7&e.charCodeAt(0))<<18|(63&e.charCodeAt(1))<<12|(63&e.charCodeAt(2))<<6|63&e.charCodeAt(3))-65536;return o(55296+(t>>>10))+o(56320+(1023&t));case 3:return o((15&e.charCodeAt(0))<<12|(63&e.charCodeAt(1))<<6|63&e.charCodeAt(2));default:return o((31&e.charCodeAt(0))<<6|63&e.charCodeAt(1))}},h=function(e){return e.replace(p,f)},g=function(e){var t=e.length,r=t%4,a=(t>0?n[e.charAt(0)]<<18:0)|(t>1?n[e.charAt(1)]<<12:0)|(t>2?n[e.charAt(2)]<<6:0)|(t>3?n[e.charAt(3)]:0),i=[o(a>>>16),o(a>>>8&255),o(255&a)];return i.length-=[0,0,2,1][r],i.join("")},m=e.atob?function(t){return e.atob(t)}:function(e){return e.replace(/[\s\S]{1,4}/g,g)},y=function(e){return h(m(e))},v=function(e){return y(String(e).replace(/[-_]/g,(function(e){return"-"==e?"+":"/"})).replace(/[^A-Za-z0-9\+\/]/g,""))};return{VERSION:"2.1.9",atob:m,btoa:u,fromBase64:v,toBase64:d,utob:s,encode:d,encodeURI:function(e){return d(e,!0)},btou:h,decode:v,noConflict:function(){var r=e.Base64;return e.Base64=t,r}}}();e.exports=r},function(e,t){e.exports=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},e.exports.__esModule=!0,e.exports.default=e.exports},function(e,t,r){var n=r(24);function o(e,t){for(var r=0;re.options.UploadQueueSize;){var r="waiting"===i[t].state||"checking"===i[t].state||"uploading"===i[t].state;i[t]&&r?t++:(s[i[t].id]&&delete s[i[t].id],i.splice(t,1),u--)}d()}},f=function t(){if(!(c>=e.options.FileParallelLimit)){for(;i[u]&&"waiting"!==i[u].state;)u++;if(!(u>=i.length)){var r=i[u];u++,c++,r.state="checking",r.params.onTaskStart&&r.params.onTaskStart(l(r)),!r.params.UploadData&&(r.params.UploadData={});var n=o.formatParams(r.api,r.params);a[r.api].call(e,n,(function(n,o){e._isRunningTask(r.id)&&("checking"!==r.state&&"uploading"!==r.state||(r.state=n?"error":"success",n&&(r.error=n),c--,d(),t(),r.callback&&r.callback(n,o),"success"===r.state&&(r.params&&(delete r.params.UploadData,delete r.params.Body,delete r.params),delete r.callback)),p())})),d(),setTimeout(t)}}},h=function(t,r){var o=s[t];if(o){var a=o&&"waiting"===o.state,i=o&&("checking"===o.state||"uploading"===o.state);if("canceled"===r&&"canceled"!==o.state||"paused"===r&&a||"paused"===r&&i){if("paused"===r&&o.params.Body&&"function"==typeof o.params.Body.pipe)return;o.state=r,e.emit("inner-kill-task",{TaskId:t,toState:r});try{var u=o&&o.params&&o.params.UploadData.UploadId}catch(e){}"canceled"===r&&u&&n.removeUsing(u),d(),i&&(c--,f()),"canceled"===r&&(o.params&&(delete o.params.UploadData,delete o.params.Body,delete o.params),delete o.callback)}p()}};e._addTasks=function(t){o.each(t,(function(t){e._addTask(t.api,t.params,t.callback,!0)})),d()};e._addTask=function(t,r,n,a){r=o.formatParams(t,r);var c=o.uuid();r.TaskId=c,r.onTaskReady&&r.onTaskReady(c),r.TaskReady&&(r.TaskReady(c),!1);var u={params:r,callback:n,api:t,index:i.length,id:c,Bucket:r.Bucket,Region:r.Region,Key:r.Key,FilePath:r.FilePath||"",state:"waiting",loaded:0,size:0,speed:0,percent:0,hashPercent:0,error:null,_custom:r._custom},l=r.onHashProgress;r.onHashProgress=function(t){e._isRunningTask(u.id)&&(u.hashPercent=t.percent,l&&l(t),d())};var h=r.onProgress;return r.onProgress=function(t){e._isRunningTask(u.id)&&("checking"===u.state&&(u.state="uploading"),u.loaded=t.loaded,u.speed=t.speed,u.percent=t.percent,h&&h(t),d())},o.getFileSize(t,r,(function(e,t){if(e)return n(o.error(e));s[c]=u,i.push(u),u.size=t,!a&&d(),f(),p()})),c},e._isRunningTask=function(e){var t=s[e];return!(!t||"checking"!==t.state&&"uploading"!==t.state)},e.getTaskList=function(){return o.map(i,l)},e.cancelTask=function(e){h(e,"canceled")},e.pauseTask=function(e){h(e,"paused")},e.restartTask=function(e){var t=s[e];!t||"paused"!==t.state&&"error"!==t.state||(t.state="waiting",d(),u=Math.min(u,t.index),f())},e.isUploadRunning=function(){return c||u-1&&(i["SSE-COS"]=i.SSECOS,delete i.SSECOS)}var s=a.json2xml({InventoryConfiguration:n}),c=t.Headers;c["Content-Type"]="application/xml",c["Content-MD5"]=a.b64(a.md5(s));var u="PUT"===e?"name/cos:PutBucketInventory":"name/cos:PostBucketInventory";h.call(this,{Action:u,method:e,Bucket:t.Bucket,Region:t.Region,body:s,action:"inventory",qs:{id:t.Id},headers:c,tracker:t.tracker},(function(e,t){return e&&204===e.statusCode?r(null,{statusCode:e.statusCode}):e?r(e):void r(null,{statusCode:t.statusCode,headers:t.headers})}))}function s(e){var t={GrantFullControl:[],GrantWrite:[],GrantRead:[],GrantReadAcp:[],GrantWriteAcp:[],ACL:""},r={FULL_CONTROL:"GrantFullControl",WRITE:"GrantWrite",READ:"GrantRead",READ_ACP:"GrantReadAcp",WRITE_ACP:"GrantWriteAcp"},n=(e&&e.AccessControlList||{}).Grant;n&&(n=a.isArray(n)?n:[n]);var o={READ:0,WRITE:0,FULL_CONTROL:0};return n&&n.length&&a.each(n,(function(n){"qcs::cam::anyone:anyone"===n.Grantee.ID||"http://cam.qcloud.com/groups/global/AllUsers"===n.Grantee.URI?o[n.Permission]=1:n.Grantee.ID!==e.Owner.ID&&t[r[n.Permission]].push('id="'+n.Grantee.ID+'"')})),o.FULL_CONTROL||o.WRITE&&o.READ?t.ACL="public-read-write":o.READ?t.ACL="public-read":t.ACL="private",a.each(r,(function(e){t[e]=c(t[e].join(","))})),t}function c(e){var t,r,n=e.split(","),o={};for(t=0;t-1?"{Region}.myqcloud.com":"cos.{Region}.myqcloud.com",e.ForcePathStyle||(s="{Bucket}."+s)),s=(s=s.replace(/\{\{AppId\}\}/gi,i).replace(/\{\{Bucket\}\}/gi,o).replace(/\{\{Region\}\}/gi,t).replace(/\{\{.*?\}\}/gi,"")).replace(/\{AppId\}/gi,i).replace(/\{BucketName\}/gi,o).replace(/\{Bucket\}/gi,r).replace(/\{Region\}/gi,t).replace(/\{.*?\}/gi,""),/^[a-zA-Z]+:\/\//.test(s)||(s=u+"//"+s),"/"===s.slice(-1)&&(s=s.slice(0,-1));var l=s;return e.ForcePathStyle&&(l+="/"+r),l+="/",c&&(l+=a.camSafeUrlEncode(c).replace(/%2F/g,"/")),e.isLocation&&(l=l.replace(/^https?:\/\//,"")),l}var l=function(e){if(!e.Bucket||!e.Region)return"";var t=void 0===e.UseAccelerate?this.options.UseAccelerate:e.UseAccelerate;return(e.Url||u({ForcePathStyle:this.options.ForcePathStyle,protocol:this.options.Protocol,domain:this.options.Domain,bucket:e.Bucket,region:t?"accelerate":e.Region})).replace(/^https?:\/\/([^/]+)(\/.*)?$/,"$1")};function d(e,t){var r=a.clone(e.Headers),n="";a.each(r,(function(e,t){(""===e||["content-type","cache-control","expires"].indexOf(t.toLowerCase())>-1)&&delete r[t],"host"===t.toLowerCase()&&(n=e)}));var o=!1!==e.ForceSignHost;!n&&e.SignHost&&o&&(r.Host=e.SignHost);var i=!1,s=function(e,r){i||(i=!0,r&&r.XCosSecurityToken&&!r.SecurityToken&&((r=a.clone(r)).SecurityToken=r.XCosSecurityToken,delete r.XCosSecurityToken),t&&t(e,r))},c=this,u=e.Bucket||"",l=e.Region||"",d=e.Key||"";c.options.ForcePathStyle&&u&&(d=u+"/"+d);var p="/"+d,f={},h=e.Scope;if(!h){var g=e.Action||"",m=e.ResourceKey||e.Key||"";h=e.Scope||[{action:g,bucket:u,region:l,prefix:m}]}var y=a.md5(JSON.stringify(h));c._StsCache=c._StsCache||[],function(){var e,t;for(e=c._StsCache.length-1;e>=0;e--){t=c._StsCache[e];var r=Math.round(a.getSkewTime(c.options.SystemClockOffset)/1e3)+30;if(t.StartTime&&r=t.ExpiredTime)c._StsCache.splice(e,1);else if(!t.ScopeLimit||t.ScopeLimit&&t.ScopeKey===y){f=t;break}}}();var v,k=function(){var t="";f.StartTime&&e.Expires?t=f.StartTime+";"+(f.StartTime+1*e.Expires):f.StartTime&&f.ExpiredTime&&(t=f.StartTime+";"+f.ExpiredTime);var n={Authorization:a.getAuth({SecretId:f.TmpSecretId,SecretKey:f.TmpSecretKey,Method:e.Method,Pathname:p,Query:e.Query,Headers:r,Expires:e.Expires,UseRawKey:c.options.UseRawKey,SystemClockOffset:c.options.SystemClockOffset,KeyTime:t,ForceSignHost:o}),SecurityToken:f.SecurityToken||f.XCosSecurityToken||"",Token:f.Token||"",ClientIP:f.ClientIP||"",ClientUA:f.ClientUA||"",SignFrom:"client"};s(null,n)},C=function(e){if(e.Authorization){var t=!1,r=e.Authorization;if(r)if(r.indexOf(" ")>-1)t=!1;else if(r.indexOf("q-sign-algorithm=")>-1&&r.indexOf("q-ak=")>-1&&r.indexOf("q-sign-time=")>-1&&r.indexOf("q-key-time=")>-1&&r.indexOf("q-url-param-list=")>-1)t=!0;else try{(r=atob(r)).indexOf("a=")>-1&&r.indexOf("k=")>-1&&r.indexOf("t=")>-1&&r.indexOf("r=")>-1&&r.indexOf("b=")>-1&&(t=!0)}catch(e){}if(!t)return a.error(new Error("getAuthorization callback params format error"))}else{if(!e.TmpSecretId)return a.error(new Error('getAuthorization callback params missing "TmpSecretId"'));if(!e.TmpSecretKey)return a.error(new Error('getAuthorization callback params missing "TmpSecretKey"'));if(!e.SecurityToken&&!e.XCosSecurityToken)return a.error(new Error('getAuthorization callback params missing "SecurityToken"'));if(!e.ExpiredTime)return a.error(new Error('getAuthorization callback params missing "ExpiredTime"'));if(e.ExpiredTime&&10!==e.ExpiredTime.toString().length)return a.error(new Error('getAuthorization callback params "ExpiredTime" should be 10 digits'));if(e.StartTime&&10!==e.StartTime.toString().length)return a.error(new Error('getAuthorization callback params "StartTime" should be 10 StartTime'))}return!1};if(f.ExpiredTime&&f.ExpiredTime-a.getSkewTime(c.options.SystemClockOffset)/1e3>60)k();else if(c.options.getAuthorization)c.options.getAuthorization.call(c,{Bucket:u,Region:l,Method:e.Method,Key:d,Pathname:p,Query:e.Query,Headers:r,Scope:h,SystemClockOffset:c.options.SystemClockOffset,ForceSignHost:o},(function(e){"string"==typeof e&&(e={Authorization:e});var t=C(e);if(t)return s(t);e.Authorization?s(null,e):((f=e||{}).Scope=h,f.ScopeKey=y,c._StsCache.push(f),k())}));else{if(!c.options.getSTS)return v={Authorization:a.getAuth({SecretId:e.SecretId||c.options.SecretId,SecretKey:e.SecretKey||c.options.SecretKey,Method:e.Method,Pathname:p,Query:e.Query,Headers:r,Expires:e.Expires,UseRawKey:c.options.UseRawKey,SystemClockOffset:c.options.SystemClockOffset,ForceSignHost:o}),SecurityToken:c.options.SecurityToken||c.options.XCosSecurityToken,SignFrom:"client"},s(null,v),v;c.options.getSTS.call(c,{Bucket:u,Region:l},(function(e){(f=e||{}).Scope=h,f.ScopeKey=y,f.TmpSecretId||(f.TmpSecretId=f.SecretId),f.TmpSecretKey||(f.TmpSecretKey=f.SecretKey);var t=C(f);if(t)return s(t);c._StsCache.push(f),k()}))}return""}function p(e){var t=!1,r=!1,n=!1,o=e.headers&&(e.headers.date||e.headers.Date)||e.error&&e.error.ServerTime;try{var i=e.error.Code,s=e.error.Message;("RequestTimeTooSkewed"===i||"AccessDenied"===i&&"Request has expired"===s)&&(r=!0)}catch(e){}if(e)if(r&&o){var c=Date.parse(o);this.options.CorrectClockSkew&&Math.abs(a.getSkewTime(this.options.SystemClockOffset)-c)>=3e4&&(this.options.SystemClockOffset=c-Date.now(),t=!0)}else 5===Math.floor(e.statusCode/100)?t=!0:"CORS blocked or network error"===e.message&&(n=!0,t=this.options.AutoSwitchHost);return{canRetry:t,networkError:n}}function f(e){var t=e.requestUrl,r=e.clientCalcSign,n=e.networkError;if(!this.options.AutoSwitchHost)return!1;if(!t)return!1;if(!r)return!1;if(!n)return!1;return/^https?:\/\/[^\/]*\.cos\.[^\/]*\.myqcloud\.com(\/.*)?$/.test(t)&&!/^https?:\/\/[^\/]*\.cos\.accelerate\.myqcloud\.com(\/.*)?$/.test(t)}function h(e,t){var r=this;!e.headers&&(e.headers={}),!e.qs&&(e.qs={}),e.VersionId&&(e.qs.versionId=e.VersionId),e.qs=a.clearKey(e.qs),e.headers&&(e.headers=a.clearKey(e.headers)),e.qs&&(e.qs=a.clearKey(e.qs));var n=a.clone(e.qs);e.action&&(n[e.action]="");var o=e.url||e.Url,i=e.SignHost||l.call(this,{Bucket:e.Bucket,Region:e.Region,Url:o}),s=e.tracker;!function o(a){var c=r.options.SystemClockOffset;s&&s.setParams({signStartTime:(new Date).getTime(),httpRetryTimes:a-1}),e.SwitchHost&&(i=i.replace(/myqcloud.com/,"tencentcos.cn")),d.call(r,{Bucket:e.Bucket||"",Region:e.Region||"",Method:e.method,Key:e.Key,Query:n,Headers:e.headers,SignHost:i,Action:e.Action,ResourceKey:e.ResourceKey,Scope:e.Scope,ForceSignHost:r.options.ForceSignHost,SwitchHost:e.SwitchHost},(function(n,i){n?t(n):(s&&s.setParams({signEndTime:(new Date).getTime(),httpStartTime:(new Date).getTime()}),e.AuthData=i,g.call(r,e,(function(n,u){s&&s.setParams({httpEndTime:(new Date).getTime()});var l=!1,d=!1;if(n){var h=p.call(r,n);l=h.canRetry||c!==r.options.SystemClockOffset,d=h.networkError}if(n&&a<2&&l){e.headers&&(delete e.headers.Authorization,delete e.headers.token,delete e.headers.clientIP,delete e.headers.clientUA,e.headers["x-cos-security-token"]&&delete e.headers["x-cos-security-token"],e.headers["x-ci-security-token"]&&delete e.headers["x-ci-security-token"]);var g=f.call(r,{requestUrl:(null==n?void 0:n.url)||"",clientCalcSign:"client"===i.SignFrom,networkError:d});e.SwitchHost=g,o(a+1)}else t(n,u)})))}))}(1)}function g(e,t){var r=this,n=e.TaskId;if(!n||r._isRunningTask(n)){var i=e.Bucket,s=e.Region,c=e.Key,l=e.method||"GET",d=e.Url||e.url,p=e.body,f=e.rawBody;r.options.UseAccelerate&&(s="accelerate"),d=d||u({ForcePathStyle:r.options.ForcePathStyle,protocol:r.options.Protocol,domain:r.options.Domain,bucket:i,region:s,object:c}),e.SwitchHost&&(d=d.replace(/myqcloud.com/,"tencentcos.cn"));var h=c?d:"";e.action&&(d=d+"?"+(a.isIOS_QQ?"".concat(e.action,"="):e.action)),e.qsStr&&(d=d.indexOf("?")>-1?d+"&"+e.qsStr:d+"?"+e.qsStr);var g={method:l,url:d,headers:e.headers,qs:e.qs,body:p},m="x-cos-security-token";if(a.isCIHost(d)&&(m="x-ci-security-token"),g.headers.Authorization=e.AuthData.Authorization,e.AuthData.Token&&(g.headers.token=e.AuthData.Token),e.AuthData.ClientIP&&(g.headers.clientIP=e.AuthData.ClientIP),e.AuthData.ClientUA&&(g.headers.clientUA=e.AuthData.ClientUA),e.AuthData.SecurityToken&&(g.headers[m]=e.AuthData.SecurityToken),g.headers&&(g.headers=a.clearKey(g.headers)),g=a.clearKey(g),e.onProgress&&"function"==typeof e.onProgress){var y=p&&(p.size||p.length)||0;g.onProgress=function(t){if(!n||r._isRunningTask(n)){var o=t?t.loaded:0;e.onProgress({loaded:o,total:y})}}}e.onDownloadProgress&&(g.onDownloadProgress=e.onDownloadProgress),e.DataType&&(g.dataType=e.DataType),this.options.Timeout&&(g.timeout=this.options.Timeout),r.options.ForcePathStyle&&(g.pathStyle=r.options.ForcePathStyle),r.emit("before-send",g);var v,k=g.url.includes("accelerate."),C=g.qs?Object.keys(g.qs).map((function(e){return"".concat(e,"=").concat(g.qs[e])})).join("&"):"",b=C?g.url+"?"+C:g.url;if(e.tracker)e.tracker.setParams({url:b,httpMethod:g.method,accelerate:k,httpSize:(null===(v=g.body)||void 0===v?void 0:v.size)||0}),e.tracker.parent&&!e.tracker.parent.params.url&&e.tracker.parent.setParams({url:h,accelerate:k});var S=(r.options.Request||o)(g,(function(e){if(!e||"abort"!==e.error){var o={options:g,error:e&&e.error,statusCode:e&&e.statusCode||0,statusMessage:e&&e.statusMessage||"",headers:e&&e.headers||{},body:e&&e.body};r.emit("after-receive",o);var i,s=o.error,c=o.body,u={statusCode:o.statusCode,statusMessage:o.statusMessage,headers:o.headers},l=function(e,o){if(n&&r.off("inner-kill-task",T),!i){i=!0;var s={};u&&u.statusCode&&(s.statusCode=u.statusCode),u&&u.headers&&(s.headers=u.headers),e?(g.url&&(s.url=g.url),g.method&&(s.method=g.method),e=a.extend(e||{},s),t(e,null)):(o=a.extend(o||{},s),t(null,o)),S=null}};if(s)return l(a.error(s));var d,p=u.statusCode,h=2===Math.floor(p/100);if(f&&h)return l(null,{body:c});try{d=c&&c.indexOf("<")>-1&&c.indexOf(">")>-1&&a.xml2json(c)||{}}catch(e){d={}}var m=d&&d.Error;h?l(null,d):m?l(a.error(new Error(m.Message),{code:m.Code,error:m})):p?l(a.error(new Error(u.statusMessage),{code:""+p})):p&&l(a.error(new Error("statusCode error")))}})),T=function e(t){t.TaskId===n&&(S&&S.abort&&S.abort(),r.off("inner-kill-task",e))};n&&r.on("inner-kill-task",T)}}var m={getService:function(e,t){"function"==typeof e&&(t=e,e={});var r=this.options.Protocol||(a.isBrowser&&"object"===("undefined"==typeof location?"undefined":n(location))&&"http:"===location.protocol?"http:":"https:"),o=this.options.ServiceDomain,i=e.AppId||this.options.appId,s=e.Region;o?(o=o.replace(/\{\{AppId\}\}/gi,i||"").replace(/\{\{Region\}\}/gi,s||"").replace(/\{\{.*?\}\}/gi,""),/^[a-zA-Z]+:\/\//.test(o)||(o=r+"//"+o),"/"===o.slice(-1)&&(o=o.slice(0,-1))):o=s?r+"//cos."+s+".myqcloud.com":r+"//service.cos.myqcloud.com";var c="",u=s?"cos."+s+".myqcloud.com":"service.cos.myqcloud.com";u===o.replace(/^https?:\/\/([^/]+)(\/.*)?$/,"$1")&&(c=u),h.call(this,{Action:"name/cos:GetService",url:o,method:"GET",headers:e.Headers,SignHost:c,tracker:e.tracker},(function(e,r){if(e)return t(e);var n=r&&r.ListAllMyBucketsResult&&r.ListAllMyBucketsResult.Buckets&&r.ListAllMyBucketsResult.Buckets.Bucket||[];n=a.isArray(n)?n:[n];var o=r&&r.ListAllMyBucketsResult&&r.ListAllMyBucketsResult.Owner||{};t(null,{Buckets:n,Owner:o,statusCode:r.statusCode,headers:r.headers})}))},putBucket:function(e,t){var r=this,n="";if(e.BucketAZConfig){var o={BucketAZConfig:e.BucketAZConfig};n=a.json2xml({CreateBucketConfiguration:o})}h.call(this,{Action:"name/cos:PutBucket",method:"PUT",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,body:n,tracker:e.tracker},(function(n,o){if(n)return t(n);var a=u({protocol:r.options.Protocol,domain:r.options.Domain,bucket:e.Bucket,region:e.Region,isLocation:!0});t(null,{Location:a,statusCode:o.statusCode,headers:o.headers})}))},headBucket:function(e,t){h.call(this,{Action:"name/cos:HeadBucket",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,method:"HEAD",tracker:e.tracker},t)},getBucket:function(e,t){var r={};r.prefix=e.Prefix||"",r.delimiter=e.Delimiter,r.marker=e.Marker,r["max-keys"]=e.MaxKeys,r["encoding-type"]=e.EncodingType,h.call(this,{Action:"name/cos:GetBucket",ResourceKey:r.prefix,method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,qs:r,tracker:e.tracker},(function(e,r){if(e)return t(e);var n=r.ListBucketResult||{},o=n.Contents||[],i=n.CommonPrefixes||[];o=a.isArray(o)?o:[o],i=a.isArray(i)?i:[i];var s=a.clone(n);a.extend(s,{Contents:o,CommonPrefixes:i,statusCode:r.statusCode,headers:r.headers}),t(null,s)}))},deleteBucket:function(e,t){h.call(this,{Action:"name/cos:DeleteBucket",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,method:"DELETE",tracker:e.tracker},(function(e,r){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:r.statusCode,headers:r.headers})}))},putBucketAcl:function(e,t){var r=e.Headers,n="";if(e.AccessControlPolicy){var o=a.clone(e.AccessControlPolicy||{}),i=o.Grants||o.Grant;i=a.isArray(i)?i:[i],delete o.Grant,delete o.Grants,o.AccessControlList={Grant:i},n=a.json2xml({AccessControlPolicy:o}),r["Content-Type"]="application/xml",r["Content-MD5"]=a.b64(a.md5(n))}a.each(r,(function(e,t){0===t.indexOf("x-cos-grant-")&&(r[t]=c(r[t]))})),h.call(this,{Action:"name/cos:PutBucketACL",method:"PUT",Bucket:e.Bucket,Region:e.Region,headers:r,action:"acl",body:n,tracker:e.tracker},(function(e,r){if(e)return t(e);t(null,{statusCode:r.statusCode,headers:r.headers})}))},getBucketAcl:function(e,t){h.call(this,{Action:"name/cos:GetBucketACL",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"acl",tracker:e.tracker},(function(e,r){if(e)return t(e);var n=r.AccessControlPolicy||{},o=n.Owner||{},i=n.AccessControlList.Grant||[];i=a.isArray(i)?i:[i];var c=s(n);r.headers&&r.headers["x-cos-acl"]&&(c.ACL=r.headers["x-cos-acl"]),c=a.extend(c,{Owner:o,Grants:i,statusCode:r.statusCode,headers:r.headers}),t(null,c)}))},putBucketCors:function(e,t){var r=(e.CORSConfiguration||{}).CORSRules||e.CORSRules||[];r=a.clone(a.isArray(r)?r:[r]),a.each(r,(function(e){a.each(["AllowedOrigin","AllowedHeader","AllowedMethod","ExposeHeader"],(function(t){var r=t+"s",n=e[r]||e[t]||[];delete e[r],e[t]=a.isArray(n)?n:[n]}))}));var n={CORSRule:r};e.ResponseVary&&(n.ResponseVary=e.ResponseVary);var o=a.json2xml({CORSConfiguration:n}),i=e.Headers;i["Content-Type"]="application/xml",i["Content-MD5"]=a.b64(a.md5(o)),h.call(this,{Action:"name/cos:PutBucketCORS",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:o,action:"cors",headers:i,tracker:e.tracker},(function(e,r){if(e)return t(e);t(null,{statusCode:r.statusCode,headers:r.headers})}))},getBucketCors:function(e,t){h.call(this,{Action:"name/cos:GetBucketCORS",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"cors",tracker:e.tracker},(function(e,r){if(e)if(404===e.statusCode&&e.error&&"NoSuchCORSConfiguration"===e.error.Code){var n={CORSRules:[],statusCode:e.statusCode};e.headers&&(n.headers=e.headers),t(null,n)}else t(e);else{var o=r.CORSConfiguration||{},i=o.CORSRules||o.CORSRule||[];i=a.clone(a.isArray(i)?i:[i]);var s=o.ResponseVary;a.each(i,(function(e){a.each(["AllowedOrigin","AllowedHeader","AllowedMethod","ExposeHeader"],(function(t){var r=t+"s",n=e[r]||e[t]||[];delete e[t],e[r]=a.isArray(n)?n:[n]}))})),t(null,{CORSRules:i,ResponseVary:s,statusCode:r.statusCode,headers:r.headers})}}))},deleteBucketCors:function(e,t){h.call(this,{Action:"name/cos:DeleteBucketCORS",method:"DELETE",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"cors",tracker:e.tracker},(function(e,r){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:r.statusCode||e.statusCode,headers:r.headers})}))},getBucketLocation:function(e,t){h.call(this,{Action:"name/cos:GetBucketLocation",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"location",tracker:e.tracker},t)},getBucketPolicy:function(e,t){h.call(this,{Action:"name/cos:GetBucketPolicy",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"policy",rawBody:!0,tracker:e.tracker},(function(e,r){if(e)return e.statusCode&&403===e.statusCode?t(a.error(e,{ErrorStatus:"Access Denied"})):e.statusCode&&405===e.statusCode?t(a.error(e,{ErrorStatus:"Method Not Allowed"})):e.statusCode&&404===e.statusCode?t(a.error(e,{ErrorStatus:"Policy Not Found"})):t(e);var n={};try{n=JSON.parse(r.body)}catch(e){}t(null,{Policy:n,statusCode:r.statusCode,headers:r.headers})}))},putBucketPolicy:function(e,t){var r=e.Policy;try{"string"==typeof r&&(r=JSON.parse(r))}catch(e){}if(!r||"string"==typeof r)return t(a.error(new Error("Policy format error")));var n=JSON.stringify(r);r.version||(r.version="2.0");var o=e.Headers;o["Content-Type"]="application/json",o["Content-MD5"]=a.b64(a.md5(n)),h.call(this,{Action:"name/cos:PutBucketPolicy",method:"PUT",Bucket:e.Bucket,Region:e.Region,action:"policy",body:n,headers:o,tracker:e.tracker},(function(e,r){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:r.statusCode,headers:r.headers})}))},deleteBucketPolicy:function(e,t){h.call(this,{Action:"name/cos:DeleteBucketPolicy",method:"DELETE",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"policy",tracker:e.tracker},(function(e,r){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:r.statusCode||e.statusCode,headers:r.headers})}))},putBucketTagging:function(e,t){var r=e.Tagging||{},n=r.TagSet||r.Tags||e.Tags||[];n=a.clone(a.isArray(n)?n:[n]);var o=a.json2xml({Tagging:{TagSet:{Tag:n}}}),i=e.Headers;i["Content-Type"]="application/xml",i["Content-MD5"]=a.b64(a.md5(o)),h.call(this,{Action:"name/cos:PutBucketTagging",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:o,action:"tagging",headers:i,tracker:e.tracker},(function(e,r){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:r.statusCode,headers:r.headers})}))},getBucketTagging:function(e,t){h.call(this,{Action:"name/cos:GetBucketTagging",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"tagging",tracker:e.tracker},(function(e,r){if(e)if(404!==e.statusCode||!e.error||"Not Found"!==e.error&&"NoSuchTagSet"!==e.error.Code)t(e);else{var n={Tags:[],statusCode:e.statusCode};e.headers&&(n.headers=e.headers),t(null,n)}else{var o=[];try{o=r.Tagging.TagSet.Tag||[]}catch(e){}o=a.clone(a.isArray(o)?o:[o]),t(null,{Tags:o,statusCode:r.statusCode,headers:r.headers})}}))},deleteBucketTagging:function(e,t){h.call(this,{Action:"name/cos:DeleteBucketTagging",method:"DELETE",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"tagging",tracker:e.tracker},(function(e,r){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:r.statusCode,headers:r.headers})}))},putBucketLifecycle:function(e,t){var r=(e.LifecycleConfiguration||{}).Rules||e.Rules||[];r=a.clone(r);var n=a.json2xml({LifecycleConfiguration:{Rule:r}}),o=e.Headers;o["Content-Type"]="application/xml",o["Content-MD5"]=a.b64(a.md5(n)),h.call(this,{Action:"name/cos:PutBucketLifecycle",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:n,action:"lifecycle",headers:o,tracker:e.tracker},(function(e,r){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:r.statusCode,headers:r.headers})}))},getBucketLifecycle:function(e,t){h.call(this,{Action:"name/cos:GetBucketLifecycle",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"lifecycle",tracker:e.tracker},(function(e,r){if(e)if(404===e.statusCode&&e.error&&"NoSuchLifecycleConfiguration"===e.error.Code){var n={Rules:[],statusCode:e.statusCode};e.headers&&(n.headers=e.headers),t(null,n)}else t(e);else{var o=[];try{o=r.LifecycleConfiguration.Rule||[]}catch(e){}o=a.clone(a.isArray(o)?o:[o]),t(null,{Rules:o,statusCode:r.statusCode,headers:r.headers})}}))},deleteBucketLifecycle:function(e,t){h.call(this,{Action:"name/cos:DeleteBucketLifecycle",method:"DELETE",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"lifecycle",tracker:e.tracker},(function(e,r){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:r.statusCode,headers:r.headers})}))},putBucketVersioning:function(e,t){if(e.VersioningConfiguration){var r=e.VersioningConfiguration||{},n=a.json2xml({VersioningConfiguration:r}),o=e.Headers;o["Content-Type"]="application/xml",o["Content-MD5"]=a.b64(a.md5(n)),h.call(this,{Action:"name/cos:PutBucketVersioning",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:n,action:"versioning",headers:o,tracker:e.tracker},(function(e,r){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:r.statusCode,headers:r.headers})}))}else t(a.error(new Error("missing param VersioningConfiguration")))},getBucketVersioning:function(e,t){h.call(this,{Action:"name/cos:GetBucketVersioning",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"versioning",tracker:e.tracker},(function(e,r){e||!r.VersioningConfiguration&&(r.VersioningConfiguration={}),t(e,r)}))},putBucketReplication:function(e,t){var r=a.clone(e.ReplicationConfiguration),n=a.json2xml({ReplicationConfiguration:r});n=(n=n.replace(/<(\/?)Rules>/gi,"<$1Rule>")).replace(/<(\/?)Tags>/gi,"<$1Tag>");var o=e.Headers;o["Content-Type"]="application/xml",o["Content-MD5"]=a.b64(a.md5(n)),h.call(this,{Action:"name/cos:PutBucketReplication",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:n,action:"replication",headers:o,tracker:e.tracker},(function(e,r){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:r.statusCode,headers:r.headers})}))},getBucketReplication:function(e,t){h.call(this,{Action:"name/cos:GetBucketReplication",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"replication",tracker:e.tracker},(function(e,r){if(e)if(404!==e.statusCode||!e.error||"Not Found"!==e.error&&"ReplicationConfigurationnotFoundError"!==e.error.Code)t(e);else{var n={ReplicationConfiguration:{Rules:[]},statusCode:e.statusCode};e.headers&&(n.headers=e.headers),t(null,n)}else!r.ReplicationConfiguration&&(r.ReplicationConfiguration={}),r.ReplicationConfiguration.Rule&&(r.ReplicationConfiguration.Rules=a.makeArray(r.ReplicationConfiguration.Rule),delete r.ReplicationConfiguration.Rule),t(e,r)}))},deleteBucketReplication:function(e,t){h.call(this,{Action:"name/cos:DeleteBucketReplication",method:"DELETE",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"replication",tracker:e.tracker},(function(e,r){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:r.statusCode,headers:r.headers})}))},putBucketWebsite:function(e,t){if(e.WebsiteConfiguration){var r=a.clone(e.WebsiteConfiguration||{}),n=r.RoutingRules||r.RoutingRule||[];n=a.isArray(n)?n:[n],delete r.RoutingRule,delete r.RoutingRules,n.length&&(r.RoutingRules={RoutingRule:n});var o=a.json2xml({WebsiteConfiguration:r}),i=e.Headers;i["Content-Type"]="application/xml",i["Content-MD5"]=a.b64(a.md5(o)),h.call(this,{Action:"name/cos:PutBucketWebsite",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:o,action:"website",headers:i,tracker:e.tracker},(function(e,r){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:r.statusCode,headers:r.headers})}))}else t(a.error(new Error("missing param WebsiteConfiguration")))},getBucketWebsite:function(e,t){h.call(this,{Action:"name/cos:GetBucketWebsite",method:"GET",Bucket:e.Bucket,Region:e.Region,Key:e.Key,headers:e.Headers,action:"website",tracker:e.tracker},(function(e,r){if(e)if(404===e.statusCode&&"NoSuchWebsiteConfiguration"===e.error.Code){var n={WebsiteConfiguration:{},statusCode:e.statusCode};e.headers&&(n.headers=e.headers),t(null,n)}else t(e);else{var o=r.WebsiteConfiguration||{};if(o.RoutingRules){var i=a.clone(o.RoutingRules.RoutingRule||[]);i=a.makeArray(i),o.RoutingRules=i}t(null,{WebsiteConfiguration:o,statusCode:r.statusCode,headers:r.headers})}}))},deleteBucketWebsite:function(e,t){h.call(this,{Action:"name/cos:DeleteBucketWebsite",method:"DELETE",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"website",tracker:e.tracker},(function(e,r){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:r.statusCode,headers:r.headers})}))},putBucketReferer:function(e,t){if(e.RefererConfiguration){var r=a.clone(e.RefererConfiguration||{}),n=r.DomainList||{},o=n.Domains||n.Domain||[];(o=a.isArray(o)?o:[o]).length&&(r.DomainList={Domain:o});var i=a.json2xml({RefererConfiguration:r}),s=e.Headers;s["Content-Type"]="application/xml",s["Content-MD5"]=a.b64(a.md5(i)),h.call(this,{Action:"name/cos:PutBucketReferer",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:i,action:"referer",headers:s,tracker:e.tracker},(function(e,r){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:r.statusCode,headers:r.headers})}))}else t(a.error(new Error("missing param RefererConfiguration")))},getBucketReferer:function(e,t){h.call(this,{Action:"name/cos:GetBucketReferer",method:"GET",Bucket:e.Bucket,Region:e.Region,Key:e.Key,headers:e.Headers,action:"referer",tracker:e.tracker},(function(e,r){if(e)if(404===e.statusCode&&"NoSuchRefererConfiguration"===e.error.Code){var n={WebsiteConfiguration:{},statusCode:e.statusCode};e.headers&&(n.headers=e.headers),t(null,n)}else t(e);else{var o=r.RefererConfiguration||{};if(o.DomainList){var i=a.makeArray(o.DomainList.Domain||[]);o.DomainList={Domains:i}}t(null,{RefererConfiguration:o,statusCode:r.statusCode,headers:r.headers})}}))},putBucketDomain:function(e,t){var r=(e.DomainConfiguration||{}).DomainRule||e.DomainRule||[];r=a.clone(r);var n=a.json2xml({DomainConfiguration:{DomainRule:r}}),o=e.Headers;o["Content-Type"]="application/xml",o["Content-MD5"]=a.b64(a.md5(n)),h.call(this,{Action:"name/cos:PutBucketDomain",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:n,action:"domain",headers:o,tracker:e.tracker},(function(e,r){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:r.statusCode,headers:r.headers})}))},getBucketDomain:function(e,t){h.call(this,{Action:"name/cos:GetBucketDomain",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"domain",tracker:e.tracker},(function(e,r){if(e)return t(e);var n=[];try{n=r.DomainConfiguration.DomainRule||[]}catch(e){}n=a.clone(a.isArray(n)?n:[n]),t(null,{DomainRule:n,statusCode:r.statusCode,headers:r.headers})}))},deleteBucketDomain:function(e,t){h.call(this,{Action:"name/cos:DeleteBucketDomain",method:"DELETE",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"domain",tracker:e.tracker},(function(e,r){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:r.statusCode,headers:r.headers})}))},putBucketOrigin:function(e,t){var r=(e.OriginConfiguration||{}).OriginRule||e.OriginRule||[];r=a.clone(r);var n=a.json2xml({OriginConfiguration:{OriginRule:r}}),o=e.Headers;o["Content-Type"]="application/xml",o["Content-MD5"]=a.b64(a.md5(n)),h.call(this,{Action:"name/cos:PutBucketOrigin",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:n,action:"origin",headers:o,tracker:e.tracker},(function(e,r){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:r.statusCode,headers:r.headers})}))},getBucketOrigin:function(e,t){h.call(this,{Action:"name/cos:GetBucketOrigin",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"origin",tracker:e.tracker},(function(e,r){if(e)return t(e);var n=[];try{n=r.OriginConfiguration.OriginRule||[]}catch(e){}n=a.clone(a.isArray(n)?n:[n]),t(null,{OriginRule:n,statusCode:r.statusCode,headers:r.headers})}))},deleteBucketOrigin:function(e,t){h.call(this,{Action:"name/cos:DeleteBucketOrigin",method:"DELETE",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"origin",tracker:e.tracker},(function(e,r){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:r.statusCode,headers:r.headers})}))},putBucketLogging:function(e,t){var r=a.json2xml({BucketLoggingStatus:e.BucketLoggingStatus||""}),n=e.Headers;n["Content-Type"]="application/xml",n["Content-MD5"]=a.b64(a.md5(r)),h.call(this,{Action:"name/cos:PutBucketLogging",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:r,action:"logging",headers:n,tracker:e.tracker},(function(e,r){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:r.statusCode,headers:r.headers})}))},getBucketLogging:function(e,t){h.call(this,{Action:"name/cos:GetBucketLogging",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"logging",tracker:e.tracker},(function(e,r){if(e)return t(e);t(null,{BucketLoggingStatus:r.BucketLoggingStatus,statusCode:r.statusCode,headers:r.headers})}))},putBucketInventory:function(e,t){return i.call(this,"PUT",e,t)},postBucketInventory:function(e,t){return i.call(this,"POST",e,t)},getBucketInventory:function(e,t){h.call(this,{Action:"name/cos:GetBucketInventory",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"inventory",qs:{id:e.Id},tracker:e.tracker},(function(e,r){if(e)return t(e);var n=r.InventoryConfiguration;if(n&&n.OptionalFields&&n.OptionalFields.Field){var o=n.OptionalFields.Field;a.isArray(o)||(o=[o]),n.OptionalFields=o}if(n.Destination&&n.Destination.COSBucketDestination&&n.Destination.COSBucketDestination.Encryption){var i=n.Destination.COSBucketDestination.Encryption;Object.keys(i).indexOf("SSE-COS")>-1&&(i.SSECOS=i["SSE-COS"],delete i["SSE-COS"])}t(null,{InventoryConfiguration:n,statusCode:r.statusCode,headers:r.headers})}))},listBucketInventory:function(e,t){h.call(this,{Action:"name/cos:ListBucketInventory",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"inventory",qs:{"continuation-token":e.ContinuationToken},tracker:e.tracker},(function(e,r){if(e)return t(e);var n=r.ListInventoryConfigurationResult,o=n.InventoryConfiguration||[];o=a.isArray(o)?o:[o],delete n.InventoryConfiguration,a.each(o,(function(e){if(e&&e.OptionalFields&&e.OptionalFields.Field){var t=e.OptionalFields.Field;a.isArray(t)||(t=[t]),e.OptionalFields=t}if(e.Destination&&e.Destination.COSBucketDestination&&e.Destination.COSBucketDestination.Encryption){var r=e.Destination.COSBucketDestination.Encryption;Object.keys(r).indexOf("SSE-COS")>-1&&(r.SSECOS=r["SSE-COS"],delete r["SSE-COS"])}})),n.InventoryConfigurations=o,a.extend(n,{statusCode:r.statusCode,headers:r.headers}),t(null,n)}))},deleteBucketInventory:function(e,t){h.call(this,{Action:"name/cos:DeleteBucketInventory",method:"DELETE",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"inventory",qs:{id:e.Id},tracker:e.tracker},(function(e,r){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:r.statusCode,headers:r.headers})}))},putBucketAccelerate:function(e,t){if(e.AccelerateConfiguration){var r={AccelerateConfiguration:e.AccelerateConfiguration||{}},n=a.json2xml(r),o={"Content-Type":"application/xml"};o["Content-MD5"]=a.b64(a.md5(n)),h.call(this,{Action:"name/cos:PutBucketAccelerate",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:n,action:"accelerate",headers:o,tracker:e.tracker},(function(e,r){if(e)return t(e);t(null,{statusCode:r.statusCode,headers:r.headers})}))}else t(a.error(new Error("missing param AccelerateConfiguration")))},getBucketAccelerate:function(e,t){h.call(this,{Action:"name/cos:GetBucketAccelerate",method:"GET",Bucket:e.Bucket,Region:e.Region,action:"accelerate",tracker:e.tracker},(function(e,r){e||!r.AccelerateConfiguration&&(r.AccelerateConfiguration={}),t(e,r)}))},putBucketEncryption:function(e,t){var r=e.ServerSideEncryptionConfiguration||{},n=r.Rule||r.Rules||[],o=a.json2xml({ServerSideEncryptionConfiguration:{Rule:n}}),i=e.Headers;i["Content-Type"]="application/xml",i["Content-MD5"]=a.b64(a.md5(o)),h.call(this,{Action:"name/cos:PutBucketEncryption",method:"PUT",Bucket:e.Bucket,Region:e.Region,body:o,action:"encryption",headers:i,tracker:e.tracker},(function(e,r){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:r.statusCode,headers:r.headers})}))},getBucketEncryption:function(e,t){h.call(this,{Action:"name/cos:GetBucketEncryption",method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"encryption",tracker:e.tracker},(function(e,r){if(e)if(404===e.statusCode&&"NoSuchEncryptionConfiguration"===e.code){var n={EncryptionConfiguration:{Rules:[]},statusCode:e.statusCode};e.headers&&(n.headers=e.headers),t(null,n)}else t(e);else{var o=a.makeArray(r.EncryptionConfiguration&&r.EncryptionConfiguration.Rule||[]);r.EncryptionConfiguration={Rules:o},t(e,r)}}))},deleteBucketEncryption:function(e,t){h.call(this,{Action:"name/cos:DeleteBucketReplication",method:"DELETE",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"encryption",tracker:e.tracker},(function(e,r){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:r.statusCode,headers:r.headers})}))},getObject:function(e,t){var r=e.Query||{},n=e.QueryString||"",o=a.throttleOnProgress.call(this,0,e.onProgress),i=e.tracker;i&&i.setParams({signStartTime:(new Date).getTime()}),r["response-content-type"]=e.ResponseContentType,r["response-content-language"]=e.ResponseContentLanguage,r["response-expires"]=e.ResponseExpires,r["response-cache-control"]=e.ResponseCacheControl,r["response-content-disposition"]=e.ResponseContentDisposition,r["response-content-encoding"]=e.ResponseContentEncoding,h.call(this,{Action:"name/cos:GetObject",method:"GET",Bucket:e.Bucket,Region:e.Region,Key:e.Key,VersionId:e.VersionId,DataType:e.DataType,headers:e.Headers,qs:r,qsStr:n,rawBody:!0,onDownloadProgress:o,tracker:i},(function(r,n){if(o(null,!0),r){var i=r.statusCode;return e.Headers["If-Modified-Since"]&&i&&304===i?t(null,{NotModified:!0}):t(r)}t(null,{Body:n.body,ETag:a.attr(n.headers,"etag",""),statusCode:n.statusCode,headers:n.headers})}))},headObject:function(e,t){h.call(this,{Action:"name/cos:HeadObject",method:"HEAD",Bucket:e.Bucket,Region:e.Region,Key:e.Key,VersionId:e.VersionId,headers:e.Headers,tracker:e.tracker},(function(r,n){if(r){var o=r.statusCode;return e.Headers["If-Modified-Since"]&&o&&304===o?t(null,{NotModified:!0,statusCode:o}):t(r)}n.ETag=a.attr(n.headers,"etag",""),t(null,n)}))},listObjectVersions:function(e,t){var r={};r.prefix=e.Prefix||"",r.delimiter=e.Delimiter,r["key-marker"]=e.KeyMarker,r["version-id-marker"]=e.VersionIdMarker,r["max-keys"]=e.MaxKeys,r["encoding-type"]=e.EncodingType,h.call(this,{Action:"name/cos:GetBucketObjectVersions",ResourceKey:r.prefix,method:"GET",Bucket:e.Bucket,Region:e.Region,headers:e.Headers,qs:r,action:"versions",tracker:e.tracker},(function(e,r){if(e)return t(e);var n=r.ListVersionsResult||{},o=n.DeleteMarker||[];o=a.isArray(o)?o:[o];var i=n.Version||[];i=a.isArray(i)?i:[i];var s=a.clone(n);delete s.DeleteMarker,delete s.Version,a.extend(s,{DeleteMarkers:o,Versions:i,statusCode:r.statusCode,headers:r.headers}),t(null,s)}))},putObject:function(e,t){var r=this,n=e.ContentLength,o=a.throttleOnProgress.call(r,n,e.onProgress),i=e.Headers;i["Cache-Control"]||i["cache-control"]||(i["Cache-Control"]=""),i["Content-Type"]||i["content-type"]||(i["Content-Type"]=e.Body&&e.Body.type||"");var s=e.UploadAddMetaMd5||r.options.UploadAddMetaMd5||r.options.UploadCheckContentMd5,c=e.tracker;s&&c&&c.setParams({md5StartTime:(new Date).getTime()}),a.getBodyMd5(s,e.Body,(function(s){s&&(c&&c.setParams({md5EndTime:(new Date).getTime()}),r.options.UploadCheckContentMd5&&(i["Content-MD5"]=a.b64(s)),(e.UploadAddMetaMd5||r.options.UploadAddMetaMd5)&&(i["x-cos-meta-md5"]=s)),void 0!==e.ContentLength&&(i["Content-Length"]=e.ContentLength),o(null,!0),h.call(r,{Action:"name/cos:PutObject",TaskId:e.TaskId,method:"PUT",Bucket:e.Bucket,Region:e.Region,Key:e.Key,headers:e.Headers,qs:e.Query,body:e.Body,onProgress:o,tracker:c},(function(i,s){if(i)return o(null,!0),t(i);o({loaded:n,total:n},!0);var c=u({ForcePathStyle:r.options.ForcePathStyle,protocol:r.options.Protocol,domain:r.options.Domain,bucket:e.Bucket,region:r.options.UseAccelerate?"accelerate":e.Region,object:e.Key});c=c.substr(c.indexOf("://")+3),s.Location=c,s.ETag=a.attr(s.headers,"etag",""),t(null,s)}))}),e.onHashProgress)},deleteObject:function(e,t){h.call(this,{Action:"name/cos:DeleteObject",method:"DELETE",Bucket:e.Bucket,Region:e.Region,Key:e.Key,headers:e.Headers,VersionId:e.VersionId,action:e.Recursive?"recursive":"",tracker:e.tracker},(function(e,r){if(e){var n=e.statusCode;return n&&404===n?t(null,{BucketNotFound:!0,statusCode:n}):t(e)}t(null,{statusCode:r.statusCode,headers:r.headers})}))},getObjectAcl:function(e,t){var r={};e.VersionId&&(r.versionId=e.VersionId),h.call(this,{Action:"name/cos:GetObjectACL",method:"GET",Bucket:e.Bucket,Region:e.Region,Key:e.Key,headers:e.Headers,qs:r,action:"acl",tracker:e.tracker},(function(e,r){if(e)return t(e);var n=r.AccessControlPolicy||{},o=n.Owner||{},i=n.AccessControlList&&n.AccessControlList.Grant||[];i=a.isArray(i)?i:[i];var c=s(n);delete c.GrantWrite,r.headers&&r.headers["x-cos-acl"]&&(c.ACL=r.headers["x-cos-acl"]),c=a.extend(c,{Owner:o,Grants:i,statusCode:r.statusCode,headers:r.headers}),t(null,c)}))},putObjectAcl:function(e,t){var r=e.Headers,n="";if(e.AccessControlPolicy){var o=a.clone(e.AccessControlPolicy||{}),i=o.Grants||o.Grant;i=a.isArray(i)?i:[i],delete o.Grant,delete o.Grants,o.AccessControlList={Grant:i},n=a.json2xml({AccessControlPolicy:o}),r["Content-Type"]="application/xml",r["Content-MD5"]=a.b64(a.md5(n))}a.each(r,(function(e,t){0===t.indexOf("x-cos-grant-")&&(r[t]=c(r[t]))})),h.call(this,{Action:"name/cos:PutObjectACL",method:"PUT",Bucket:e.Bucket,Region:e.Region,Key:e.Key,action:"acl",headers:r,body:n,tracker:e.tracker},(function(e,r){if(e)return t(e);t(null,{statusCode:r.statusCode,headers:r.headers})}))},optionsObject:function(e,t){var r=e.Headers;r.Origin=e.Origin,r["Access-Control-Request-Method"]=e.AccessControlRequestMethod,r["Access-Control-Request-Headers"]=e.AccessControlRequestHeaders,h.call(this,{Action:"name/cos:OptionsObject",method:"OPTIONS",Bucket:e.Bucket,Region:e.Region,Key:e.Key,headers:r,tracker:e.tracker},(function(e,r){if(e)return e.statusCode&&403===e.statusCode?t(null,{OptionsForbidden:!0,statusCode:e.statusCode}):t(e);var n=r.headers||{};t(null,{AccessControlAllowOrigin:n["access-control-allow-origin"],AccessControlAllowMethods:n["access-control-allow-methods"],AccessControlAllowHeaders:n["access-control-allow-headers"],AccessControlExposeHeaders:n["access-control-expose-headers"],AccessControlMaxAge:n["access-control-max-age"],statusCode:r.statusCode,headers:r.headers})}))},putObjectCopy:function(e,t){var r=this,n=e.Headers;n["Cache-Control"]||n["cache-control"]||(n["Cache-Control"]="");var o=e.CopySource||"",i=a.getSourceParams.call(this,o);if(i){var s=i.Bucket,c=i.Region,l=decodeURIComponent(i.Key);h.call(this,{Scope:[{action:"name/cos:GetObject",bucket:s,region:c,prefix:l},{action:"name/cos:PutObject",bucket:e.Bucket,region:e.Region,prefix:e.Key}],method:"PUT",Bucket:e.Bucket,Region:e.Region,Key:e.Key,VersionId:e.VersionId,headers:e.Headers,tracker:e.tracker},(function(n,o){if(n)return t(n);var i=a.clone(o.CopyObjectResult||{}),s=u({ForcePathStyle:r.options.ForcePathStyle,protocol:r.options.Protocol,domain:r.options.Domain,bucket:e.Bucket,region:e.Region,object:e.Key,isLocation:!0});a.extend(i,{Location:s,statusCode:o.statusCode,headers:o.headers}),t(null,i)}))}else t(a.error(new Error("CopySource format error")))},deleteMultipleObject:function(e,t){var r=e.Objects||[],n=e.Quiet;r=a.isArray(r)?r:[r];var o=a.json2xml({Delete:{Object:r,Quiet:n||!1}}),i=e.Headers;i["Content-Type"]="application/xml",i["Content-MD5"]=a.b64(a.md5(o));var s=a.map(r,(function(t){return{action:"name/cos:DeleteObject",bucket:e.Bucket,region:e.Region,prefix:t.Key}}));h.call(this,{Scope:s,method:"POST",Bucket:e.Bucket,Region:e.Region,body:o,action:"delete",headers:i,tracker:e.tracker},(function(e,r){if(e)return t(e);var n=r.DeleteResult||{},o=n.Deleted||[],i=n.Error||[];o=a.isArray(o)?o:[o],i=a.isArray(i)?i:[i];var s=a.clone(n);a.extend(s,{Error:i,Deleted:o,statusCode:r.statusCode,headers:r.headers}),t(null,s)}))},restoreObject:function(e,t){var r=e.Headers;if(e.RestoreRequest){var n=e.RestoreRequest||{},o=a.json2xml({RestoreRequest:n});r["Content-Type"]="application/xml",r["Content-MD5"]=a.b64(a.md5(o)),h.call(this,{Action:"name/cos:RestoreObject",method:"POST",Bucket:e.Bucket,Region:e.Region,Key:e.Key,VersionId:e.VersionId,body:o,action:"restore",headers:r,tracker:e.tracker},t)}else t(a.error(new Error("missing param RestoreRequest")))},putObjectTagging:function(e,t){var r=e.Tagging||{},n=r.TagSet||r.Tags||e.Tags||[];n=a.clone(a.isArray(n)?n:[n]);var o=a.json2xml({Tagging:{TagSet:{Tag:n}}}),i=e.Headers;i["Content-Type"]="application/xml",i["Content-MD5"]=a.b64(a.md5(o)),h.call(this,{Action:"name/cos:PutObjectTagging",method:"PUT",Bucket:e.Bucket,Key:e.Key,Region:e.Region,body:o,action:"tagging",headers:i,VersionId:e.VersionId,tracker:e.tracker},(function(e,r){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:r.statusCode,headers:r.headers})}))},getObjectTagging:function(e,t){h.call(this,{Action:"name/cos:GetObjectTagging",method:"GET",Key:e.Key,Bucket:e.Bucket,Region:e.Region,headers:e.Headers,action:"tagging",VersionId:e.VersionId,tracker:e.tracker},(function(e,r){if(e)if(404!==e.statusCode||!e.error||"Not Found"!==e.error&&"NoSuchTagSet"!==e.error.Code)t(e);else{var n={Tags:[],statusCode:e.statusCode};e.headers&&(n.headers=e.headers),t(null,n)}else{var o=[];try{o=r.Tagging.TagSet.Tag||[]}catch(e){}o=a.clone(a.isArray(o)?o:[o]),t(null,{Tags:o,statusCode:r.statusCode,headers:r.headers})}}))},deleteObjectTagging:function(e,t){h.call(this,{Action:"name/cos:DeleteObjectTagging",method:"DELETE",Bucket:e.Bucket,Region:e.Region,Key:e.Key,headers:e.Headers,action:"tagging",VersionId:e.VersionId,tracker:e.tracker},(function(e,r){return e&&204===e.statusCode?t(null,{statusCode:e.statusCode}):e?t(e):void t(null,{statusCode:r.statusCode,headers:r.headers})}))},selectObjectContent:function(e,t){if(!e.SelectType)return t(a.error(new Error("missing param SelectType")));var r=e.SelectRequest||{},n=a.json2xml({SelectRequest:r}),o=e.Headers;o["Content-Type"]="application/xml",o["Content-MD5"]=a.b64(a.md5(n)),h.call(this,{Action:"name/cos:GetObject",method:"POST",Bucket:e.Bucket,Region:e.Region,Key:e.Key,headers:e.Headers,action:"select",qs:{"select-type":e.SelectType},VersionId:e.VersionId,body:n,DataType:"arraybuffer",rawBody:!0,tracker:e.tracker},(function(e,r){if(e&&204===e.statusCode)return t(null,{statusCode:e.statusCode});if(e)return t(e);var n=a.parseSelectPayload(r.body);t(null,{statusCode:r.statusCode,headers:r.headers,Body:n.body,Payload:n.payload})}))},appendObject:function(e,t){var r=e.Headers;r["Cache-Control"]||r["cache-control"]||(r["Cache-Control"]=""),r["Content-Type"]||r["content-type"]||(r["Content-Type"]=e.Body&&e.Body.type||""),h.call(this,{Action:"name/cos:AppendObject",method:"POST",Bucket:e.Bucket,Region:e.Region,action:"append",Key:e.Key,body:e.Body,qs:{position:e.Position},headers:e.Headers,tracker:e.tracker},(function(e,r){if(e)return t(e);t(null,r)}))},uploadPartCopy:function(e,t){var r=e.CopySource||"",n=a.getSourceParams.call(this,r);if(n){var o=n.Bucket,i=n.Region,s=decodeURIComponent(n.Key);h.call(this,{Scope:[{action:"name/cos:GetObject",bucket:o,region:i,prefix:s},{action:"name/cos:PutObject",bucket:e.Bucket,region:e.Region,prefix:e.Key}],method:"PUT",Bucket:e.Bucket,Region:e.Region,Key:e.Key,VersionId:e.VersionId,qs:{partNumber:e.PartNumber,uploadId:e.UploadId},headers:e.Headers,tracker:e.tracker},(function(e,r){if(e)return t(e);var n=a.clone(r.CopyPartResult||{});a.extend(n,{statusCode:r.statusCode,headers:r.headers}),t(null,n)}))}else t(a.error(new Error("CopySource format error")))},multipartInit:function(e,t){var r=this,n=e.Headers,o=e.tracker;n["Cache-Control"]||n["cache-control"]||(n["Cache-Control"]=""),n["Content-Type"]||n["content-type"]||(n["Content-Type"]=e.Body&&e.Body.type||"");var i=e.Body&&(e.UploadAddMetaMd5||r.options.UploadAddMetaMd5);i&&o&&o.setParams({md5StartTime:(new Date).getTime()}),a.getBodyMd5(i,e.Body,(function(n){n&&(e.Headers["x-cos-meta-md5"]=n),i&&o&&o.setParams({md5EndTime:(new Date).getTime()}),h.call(r,{Action:"name/cos:InitiateMultipartUpload",method:"POST",Bucket:e.Bucket,Region:e.Region,Key:e.Key,action:"uploads",headers:e.Headers,qs:e.Query,tracker:o},(function(e,r){return e?(o&&o.parent&&o.parent.setParams({errorNode:"multipartInit"}),t(e)):(r=a.clone(r||{}))&&r.InitiateMultipartUploadResult?t(null,a.extend(r.InitiateMultipartUploadResult,{statusCode:r.statusCode,headers:r.headers})):void t(null,r)}))}),e.onHashProgress)},multipartUpload:function(e,t){var r=this;a.getFileSize("multipartUpload",e,(function(){var n=e.tracker,o=r.options.UploadCheckContentMd5;o&&n&&n.setParams({md5StartTime:(new Date).getTime()}),a.getBodyMd5(o,e.Body,(function(i){i&&(e.Headers["Content-MD5"]=a.b64(i)),o&&n&&n.setParams({md5EndTime:(new Date).getTime()}),n&&n.setParams({partNumber:e.PartNumber}),h.call(r,{Action:"name/cos:UploadPart",TaskId:e.TaskId,method:"PUT",Bucket:e.Bucket,Region:e.Region,Key:e.Key,qs:{partNumber:e.PartNumber,uploadId:e.UploadId},headers:e.Headers,onProgress:e.onProgress,body:e.Body||null,tracker:n},(function(e,r){if(e)return n&&n.parent&&n.parent.setParams({errorNode:"multipartUpload"}),t(e);t(null,{ETag:a.attr(r.headers,"etag",""),statusCode:r.statusCode,headers:r.headers})}))}))}))},multipartComplete:function(e,t){for(var r=this,n=e.UploadId,o=e.Parts,i=e.tracker,s=0,c=o.length;s-1?function(e){var t=e.match(/q-url-param-list.*?(?=&)/g)[0],r="q-url-param-list="+encodeURIComponent(t.replace(/q-url-param-list=/,"")).toLowerCase(),n=new RegExp(t,"g");return e.replace(n,r)}(r.Authorization):"sign="+encodeURIComponent(r.Authorization)),r.SecurityToken&&(n+="&x-cos-security-token="+r.SecurityToken),r.ClientIP&&(n+="&clientIP="+r.ClientIP),r.ClientUA&&(n+="&clientUA="+r.ClientUA),r.Token&&(n+="&token="+r.Token),i&&(n+="&"+i),setTimeout((function(){t(null,{Url:n})}))}}));return p?(s+="?"+p.Authorization+(p.SecurityToken?"&x-cos-security-token="+p.SecurityToken:""),i&&(s+="&"+i)):i&&(s+="?"+i),s},getAuth:function(e){return a.getAuth({SecretId:e.SecretId||this.options.SecretId||"",SecretKey:e.SecretKey||this.options.SecretKey||"",Bucket:e.Bucket,Region:e.Region,Method:e.Method,Key:e.Key,Query:e.Query,Headers:e.Headers,Expires:e.Expires,UseRawKey:this.options.UseRawKey,SystemClockOffset:this.options.SystemClockOffset})}};e.exports.init=function(e,t){t.transferToTaskMethod(m,"putObject"),a.each(m,(function(t,r){e.prototype[r]=a.apiWrapper(r,t),function(e,t,r){a.each(["Cors","Acl"],(function(n){if(e.slice(-n.length)===n){var o=e.slice(0,-n.length)+n.toUpperCase(),i=a.apiWrapper(e,t);r[o]=function(){i.apply(this,arguments)}}}))}(r,t,e.prototype)}))}},function(e,t,r){var n=r(0),o=function(e){switch(n(e)){case"string":return e;case"boolean":return e?"true":"false";case"number":return isFinite(e)?e:"";default:return""}},a=function(e,t,r){var n={},o=t.getAllResponseHeaders();return o&&o.length>0&&o.trim().split("\n").forEach((function(e){if(e){var t=e.indexOf(":"),r=e.substr(0,t).trim().toLowerCase(),o=e.substr(t+1).trim();n[r]=o}})),{error:e,statusCode:t.status,statusMessage:t.statusText,headers:n,body:r}},i=function(e,t){return t||"text"!==t?e.response:e.responseText};e.exports=function(e,t){var r,s,c,u,l=(e.method||"GET").toUpperCase(),d=e.url;if(e.qs){var p=(r=e.qs,s=s||"&",c=c||"=",null===r&&(r=void 0),"object"===n(r)?Object.keys(r).map((function(e){var t=encodeURIComponent(o(e))+c;return Array.isArray(r[e])?r[e].map((function(e){return t+encodeURIComponent(o(e))})).join(s):t+encodeURIComponent(o(r[e]))})).filter(Boolean).join(s):u?encodeURIComponent(o(u))+c+encodeURIComponent(o(r)):"");p&&(d+=(-1===d.indexOf("?")?"?":"&")+p)}var f=new XMLHttpRequest;if(f.open(l,d,!0),f.responseType=e.dataType||"text",e.xhrFields)for(var h in e.xhrFields)f[h]=e.xhrFields[h];var g=e.headers;if(g)for(var m in g)g.hasOwnProperty(m)&&"content-length"!==m.toLowerCase()&&"user-agent"!==m.toLowerCase()&&"origin"!==m.toLowerCase()&&"host"!==m.toLowerCase()&&f.setRequestHeader(m,g[m]);return e.onProgress&&f.upload&&(f.upload.onprogress=e.onProgress),e.onDownloadProgress&&(f.onprogress=e.onDownloadProgress),e.timeout&&(f.timeout=e.timeout),f.ontimeout=function(e){var r=new Error("timeout");t(a(r,f))},f.onload=function(){t(a(null,f,i(f,e.dataType)))},f.onerror=function(r){var n=i(f,e.dataType);if(n)t(a(null,f,n));else{var o=f.statusText;o||0!==f.status||(o=new Error("CORS blocked or network error")),t(a(o,f,n))}},f.send(e.body||""),f}},function(e,t,r){var n=r(0),o=r(8),a=r(30),i=r(7).EventProxy,s=r(1),c=r(5);function u(e,t){var r=e.TaskId,n=e.Bucket,c=e.Region,u=e.Key,p=e.StorageClass,f=this,h={},g=e.FileSize,m=e.SliceSize,y=Math.ceil(g/m),v=0,k=s.throttleOnProgress.call(f,g,e.onHashProgress),C=function(t,r){var n=t.length;if(0===n)return r(null,!0);if(n>y)return r(null,!1);if(n>1&&Math.max(t[0].Size,t[1].Size)!==m)return r(null,!1);!function o(a){if(a=i.length)b.emit("has_and_check_upload_id",t);else{var p=i[l];if(!s.isInArray(t,p))return o.removeUploadId.call(f,p),void a(l+1);o.using[p]?a(l+1):d.call(f,{Bucket:n,Region:c,Key:u,UploadId:p,tracker:e.tracker},(function(e,t){f._isRunningTask(r)&&(e?(o.removeUploadId.call(f,p),a(l+1)):b.emit("upload_id_available",{UploadId:p,PartList:t.PartList}))}))}}(0)}else b.emit("has_and_check_upload_id",t)})),b.on("get_remote_upload_id_list",(function(){l.call(f,{Bucket:n,Region:c,Key:u,tracker:e.tracker},(function(t,a){if(f._isRunningTask(r)){if(t)return b.emit("error",t);var i=s.filter(a.UploadList,(function(e){return e.Key===u&&(!p||e.StorageClass.toUpperCase()===p.toUpperCase())})).reverse().map((function(e){return e.UploadId||e.UploadID}));if(i.length)b.emit("seek_local_avail_upload_id",i);else{var c,l=o.getFileId(e.Body,e.ChunkSize,n,u);l&&(c=o.getUploadIdList.call(f,l))&&s.each(c,(function(e){o.removeUploadId.call(f,e)})),b.emit("no_available_upload_id")}}}))})),b.emit("get_remote_upload_id_list")}function l(e,t){var r=this,n=[],o={Bucket:e.Bucket,Region:e.Region,Prefix:e.Key,calledBySdk:e.calledBySdk||"sliceUploadFile",tracker:e.tracker};!function e(){r.multipartList(o,(function(r,a){if(r)return t(r);n.push.apply(n,a.Upload||[]),"true"===a.IsTruncated?(o.KeyMarker=a.NextKeyMarker,o.UploadIdMarker=a.NextUploadIdMarker,e()):t(null,{UploadList:n})}))}()}function d(e,t){var r=this,n=[],o={Bucket:e.Bucket,Region:e.Region,Key:e.Key,UploadId:e.UploadId,calledBySdk:"sliceUploadFile",tracker:e.tracker};!function e(){r.multipartListPart(o,(function(r,a){if(r)return t(r);n.push.apply(n,a.Part||[]),"true"===a.IsTruncated?(o.PartNumberMarker=a.NextPartNumberMarker,e()):t(null,{PartList:n})}))}()}function p(e,t){var r=this,n=e.TaskId,o=e.Bucket,i=e.Region,c=e.Key,u=e.UploadData,l=e.FileSize,d=e.SliceSize,p=Math.min(e.AsyncLimit||r.options.ChunkParallelLimit||1,256),h=e.Body,g=Math.ceil(l/d),m=0,y=e.ServerSideEncryption,v=e.Headers,k=s.filter(u.PartList,(function(e){return e.Uploaded&&(m+=e.PartNumber>=g&&l%d||d),!e.Uploaded})),C=e.onProgress;a.eachLimit(k,p,(function(t,a){if(r._isRunningTask(n)){var s=t.PartNumber,p=Math.min(l,t.PartNumber*d)-(t.PartNumber-1)*d,g=0;f.call(r,{TaskId:n,Bucket:o,Region:i,Key:c,SliceSize:d,FileSize:l,PartNumber:s,ServerSideEncryption:y,Body:h,UploadData:u,Headers:v,onProgress:function(e){m+=e.loaded-g,g=e.loaded,C({loaded:m,total:l})},tracker:e.tracker},(function(e,o){r._isRunningTask(n)&&(e||o.ETag||(e='get ETag error, please add "ETag" to CORS ExposeHeader setting.( 获取ETag失败,请在CORS ExposeHeader设置中添加ETag,请参考文档:https://cloud.tencent.com/document/product/436/13318 )'),e?m-=g:(m+=p-g,t.ETag=o.ETag),C({loaded:m,total:l}),a(e||null,o))}))}}),(function(e){if(r._isRunningTask(n))return e?t(e):void t(null,{UploadId:u.UploadId,SliceList:u.PartList})}))}function f(e,t){var r=this,n=e.TaskId,o=e.Bucket,i=e.Region,c=e.Key,u=e.FileSize,l=e.Body,d=1*e.PartNumber,p=e.SliceSize,f=e.ServerSideEncryption,h=e.UploadData,g=e.Headers||{},m=r.options.ChunkRetryTimes+1,y=p*(d-1),v=p,k=y+p;k>u&&(v=(k=u)-y);var C=["x-cos-traffic-limit","x-cos-mime-limit"],b={};s.each(g,(function(e,t){C.indexOf(t)>-1&&(b[t]=e)}));var S=h.PartList[d-1];a.retry(m,(function(t){r._isRunningTask(n)&&s.fileSlice(l,y,k,!0,(function(a){r.multipartUpload({TaskId:n,Bucket:o,Region:i,Key:c,ContentLength:v,PartNumber:d,UploadId:h.UploadId,ServerSideEncryption:f,Body:a,Headers:b,onProgress:e.onProgress,calledBySdk:"sliceUploadFile",tracker:e.tracker},(function(e,o){if(r._isRunningTask(n))return e?t(e):(S.Uploaded=!0,t(null,o))}))}))}),(function(e,o){if(r._isRunningTask(n))return t(e,o)}))}function h(e,t){var r=e.Bucket,n=e.Region,o=e.Key,i=e.UploadId,s=e.SliceList,c=this,u=this.options.ChunkRetryTimes+1,l=e.Headers,d=s.map((function(e){return{PartNumber:e.PartNumber,ETag:e.ETag}}));a.retry(u,(function(t){c.multipartComplete({Bucket:r,Region:n,Key:o,UploadId:i,Parts:d,Headers:l,calledBySdk:"sliceUploadFile",tracker:e.tracker},t)}),(function(e,r){t(e,r)}))}function g(e,t){var r=e.Bucket,n=e.Region,o=e.Key,i=e.AbortArray,s=e.AsyncLimit||1,c=this,u=0,l=new Array(i.length);a.eachLimit(i,s,(function(t,a){var i=u;if(o&&o!==t.Key)return l[i]={error:{KeyNotMatch:!0}},void a(null);var s=t.UploadId||t.UploadID;c.multipartAbort({Bucket:r,Region:n,Key:t.Key,Headers:e.Headers,UploadId:s},(function(e){var o={Bucket:r,Region:n,Key:t.Key,UploadId:s};l[i]={error:e,task:o},a(null)})),u++}),(function(e){if(e)return t(e);for(var r=[],n=[],o=0,a=l.length;oo?"sliceUploadFile":"putObject";e.tracker=new c({Beacon:r.options.BeaconReporter,clsReporter:r.options.ClsReporter,bucket:e.Bucket,region:e.Region,apiName:"uploadFile",realApi:p,fileKey:e.Key,fileSize:u,accelerate:d,deepTracker:r.options.DeepTracker,customId:r.options.CustomId,delay:r.options.TrackerDelay})}s.each(e,(function(e,t){"object"!==n(e)&&"function"!=typeof e&&(l[t]=e)}));var f=e.onTaskReady;e.onTaskReady=function(e){l.TaskId=e,f&&f(e)};var h=u>o?"sliceUploadFile":"putObject",g=e.onFileFinish;a.push({api:h,params:e,callback:function(r,n){e.tracker&&e.tracker.report(r,n),g&&g(r,n,l),t&&t(r,n)}}),r._addTasks(a)},uploadFiles:function(e,t){var r=this,o=void 0===e.SliceSize?r.options.SliceSize:e.SliceSize,a=0,i=0,u=s.throttleOnProgress.call(r,i,e.onProgress),l=e.files.length,d=e.onFileFinish,p=Array(l),f=function(e,r,n){u(null,!0),d&&d(e,r,n),p[n.Index]={options:n,error:e,data:r},--l<=0&&t&&t(null,{files:p})},h=[];s.each(e.files,(function(e,t){!function(){var l=e.Body,d=l.size||l.length||0,p={Index:t,TaskId:""};if(!r.options.UseRawKey&&e.Key&&"/"===e.Key.substr(0,1)&&(e.Key=e.Key.substr(1)),a+=d,r.options.EnableReporter){var g=r.options.UseAccelerate||"string"==typeof r.options.Domain&&r.options.Domain.includes("accelerate."),m=d>o?"sliceUploadFile":"putObject";e.tracker=new c({Beacon:r.options.BeaconReporter,clsReporter:r.options.ClsReporter,bucket:e.Bucket,region:e.Region,apiName:"uploadFiles",realApi:m,fileKey:e.Key,fileSize:d,accelerate:g,deepTracker:r.options.DeepTracker,customId:r.options.CustomId,delay:r.options.TrackerDelay})}s.each(e,(function(e,t){"object"!==n(e)&&"function"!=typeof e&&(p[t]=e)}));var y=e.onTaskReady;e.onTaskReady=function(e){p.TaskId=e,y&&y(e)};var v=0,k=e.onProgress;e.onProgress=function(e){i=i-v+e.loaded,v=e.loaded,k&&k(e),u({loaded:i,total:a})};var C=d>o?"sliceUploadFile":"putObject",b=e.onFileFinish;h.push({api:C,params:e,callback:function(t,r){e.tracker&&e.tracker.report(t,r),b&&b(t,r),f&&f(t,r,p)}})}()})),r._addTasks(h)},sliceCopyFile:function(e,t){var r=new i,n=this,c=e.Bucket,u=e.Region,l=e.Key,p=e.CopySource,f=s.getSourceParams.call(this,p);if(f){var h=f.Bucket,g=f.Region,y=decodeURIComponent(f.Key),v=void 0===e.CopySliceSize?n.options.CopySliceSize:e.CopySliceSize;v=Math.max(0,v);var k,C,b=e.CopyChunkSize||this.options.CopyChunkSize,S=this.options.CopyChunkParallelLimit,T=this.options.ChunkRetryTimes+1,w=0,R=0,x={},A={},E={};r.on("copy_slice_complete",(function(r){var i={};s.each(e.Headers,(function(e,t){0===t.toLowerCase().indexOf("x-cos-meta-")&&(i[t]=e)}));var d=s.map(r.PartList,(function(e){return{PartNumber:e.PartNumber,ETag:e.ETag}}));a.retry(T,(function(t){n.multipartComplete({Bucket:c,Region:u,Key:l,UploadId:r.UploadId,Parts:d,tracker:e.tracker,calledBySdk:"sliceCopyFile"},t)}),(function(e,n){if(o.removeUsing(r.UploadId),e)return C(null,!0),t(e);o.removeUploadId(r.UploadId),C({loaded:k,total:k},!0),t(null,n)}))})),r.on("get_copy_data_finish",(function(i){var d=o.getCopyFileId(p,x,b,c,l);d&&o.saveUploadId(d,i.UploadId,n.options.UploadIdCacheLimit),o.setUsing(i.UploadId);var f=s.filter(i.PartList,(function(e){return e.Uploaded&&(R+=e.PartNumber>=w&&k%b||b),!e.Uploaded}));a.eachLimit(f,S,(function(t,r){var o=t.PartNumber,s=t.CopySourceRange,d=t.end-t.start;a.retry(T,(function(t){m.call(n,{Bucket:c,Region:u,Key:l,CopySource:p,UploadId:i.UploadId,PartNumber:o,CopySourceRange:s,tracker:e.tracker,calledBySdk:"sliceCopyFile"},t)}),(function(e,n){if(e)return r(e);C({loaded:R+=d,total:k}),t.ETag=n.ETag,r(e||null,n)}))}),(function(e){if(e)return o.removeUsing(i.UploadId),C(null,!0),t(e);r.emit("copy_slice_complete",i)}))})),r.on("get_chunk_size_finish",(function(){var a=function(){n.multipartInit({Bucket:c,Region:u,Key:l,Headers:E,tracker:e.tracker,calledBySdk:"sliceCopyFile"},(function(n,o){if(n)return t(n);e.UploadId=o.UploadId,r.emit("get_copy_data_finish",{UploadId:e.UploadId,PartList:e.PartList})}))},i=o.getCopyFileId(p,x,b,c,l),f=o.getUploadIdList(i);if(!i||!f)return a();!function t(i){if(i>=f.length)return a();var p=f[i];if(o.using[p])return t(i+1);d.call(n,{Bucket:c,Region:u,Key:l,UploadId:p,tracker:e.tracker,calledBySdk:"sliceCopyFile"},(function(n,a){if(n)o.removeUploadId(p),t(i+1);else{if(o.using[p])return t(i+1);var c={},u=0;s.each(a.PartList,(function(e){var t=parseInt(e.Size),r=u+t-1;c[e.PartNumber+"|"+u+"|"+r]=e.ETag,u+=t})),s.each(e.PartList,(function(e){var t=c[e.PartNumber+"|"+e.start+"|"+e.end];t&&(e.ETag=t,e.Uploaded=!0)})),r.emit("get_copy_data_finish",{UploadId:p,PartList:e.PartList})}}))}(0)})),r.on("get_file_size_finish",(function(){if(function(){for(var t=[1,2,4,8,16,32,64,128,256,512,1024,2048,4096,5120],r=1048576,o=0;o11&&(A[t]=e)})),r.emit("get_file_size_finish")}else t(s.error(new Error('get Content-Length error, please add "Content-Length" to CORS ExposeHeader setting.( 获取Content-Length失败,请在CORS ExposeHeader设置中添加Content-Length,请参考文档:https://cloud.tencent.com/document/product/436/13318 )')))}))}else t(s.error(new Error("CopySource format error")))}};e.exports.init=function(e,t){t.transferToTaskMethod(y,"sliceUploadFile"),s.each(y,(function(t,r){e.prototype[r]=s.apiWrapper(r,t)}))}},function(e,t){var r={eachLimit:function(e,t,r,n){if(n=n||function(){},!e.length||t<=0)return n();var o=0,a=0,i=0;!function s(){if(o>=e.length)return n();for(;i=e.length?n():s())}))}()},retry:function(e,t,r){e<1?r():function n(o){t((function(t,a){t&&o SliceSize ? 'sliceUploadFile' : 'putObject'; params.tracker = new Tracker({ - Beacon: self.options.Beacon, + Beacon: self.options.BeaconReporter, + clsReporter: self.options.ClsReporter, bucket: params.Bucket, region: params.Region, apiName: 'uploadFile', + realApi, fileKey: params.Key, fileSize: FileSize, accelerate, @@ -951,7 +954,7 @@ function uploadFile(params, callback) { var _onFileFinish = params.onFileFinish; var onFileFinish = function (err, data) { // 格式化上报参数并上报 - params.tracker && params.tracker.formatResult(err, data); + params.tracker && params.tracker.report(err, data); _onFileFinish && _onFileFinish(err, data, fileInfo); callback && callback(err, data); }; @@ -998,8 +1001,6 @@ function uploadFiles(params, callback) { var taskList = []; util.each(params.files, function (fileParams, index) { (function () { - // 对齐 nodejs 缩进 - var Body = fileParams.Body; var FileSize = Body.size || Body.length || 0; var fileInfo = { Index: index, TaskId: '' }; @@ -1013,15 +1014,18 @@ function uploadFiles(params, callback) { TotalSize += FileSize; // 单个文件上传链路 - if (self.options.EnableTracker) { + if (self.options.EnableReporter) { const accelerate = self.options.UseAccelerate || (typeof self.options.Domain === 'string' && self.options.Domain.includes('accelerate.')); + const realApi = FileSize > SliceSize ? 'sliceUploadFile' : 'putObject'; fileParams.tracker = new Tracker({ - Beacon: self.options.Beacon, + Beacon: self.options.BeaconReporter, + clsReporter: self.options.ClsReporter, bucket: fileParams.Bucket, region: fileParams.Region, apiName: 'uploadFiles', + realApi, fileKey: fileParams.Key, fileSize: FileSize, accelerate, @@ -1064,7 +1068,7 @@ function uploadFiles(params, callback) { var _onFileFinish = fileParams.onFileFinish; var onFileFinish = function (err, data) { // 格式化上报参数并上报 - fileParams.tracker && fileParams.tracker.formatResult(err, data); + fileParams.tracker && fileParams.tracker.report(err, data); _onFileFinish && _onFileFinish(err, data); onTotalFileFinish && onTotalFileFinish(err, data, fileInfo); }; @@ -1135,6 +1139,7 @@ function sliceCopyFile(params, callback) { Key: Key, UploadId: UploadData.UploadId, Parts: Parts, + tracker: params.tracker, calledBySdk: 'sliceCopyFile', }, tryCallback @@ -1185,6 +1190,8 @@ function sliceCopyFile(params, callback) { UploadId: UploadData.UploadId, PartNumber: PartNumber, CopySourceRange: CopySourceRange, + tracker: params.tracker, + calledBySdk: 'sliceCopyFile', }, tryCallback ); @@ -1217,6 +1224,8 @@ function sliceCopyFile(params, callback) { Region: Region, Key: Key, Headers: TargetHeader, + tracker: params.tracker, + calledBySdk: 'sliceCopyFile', }, function (err, data) { if (err) return callback(err); @@ -1245,6 +1254,8 @@ function sliceCopyFile(params, callback) { Region: Region, Key: Key, UploadId: UploadId, + tracker: params.tracker, + calledBySdk: 'sliceCopyFile', }, function (err, PartListData) { if (err) { @@ -1341,6 +1352,8 @@ function sliceCopyFile(params, callback) { Bucket: SourceBucket, Region: SourceRegion, Key: SourceKey, + tracker: params.tracker, + calledBySdk: 'sliceCopyFile', }, function (err, data) { if (err) { @@ -1364,6 +1377,8 @@ function sliceCopyFile(params, callback) { return; } + params.tracker && params.tracker.setParams({ httpSize: FileSize }); + onProgress = util.throttleOnProgress.call(self, FileSize, params.onProgress); // 开始上传 @@ -1371,7 +1386,7 @@ function sliceCopyFile(params, callback) { if (!params.Headers['x-cos-metadata-directive']) { params.Headers['x-cos-metadata-directive'] = 'Copy'; } - self.putObjectCopy(params, function (err, data) { + self.putObjectCopy(Object.assign(params, { calledBySdk: 'sliceCopyFile' }), function (err, data) { if (err) { onProgress(null, true); return callback(err); @@ -1429,6 +1444,8 @@ function copySliceItem(params, callback) { UploadId: UploadId, PartNumber: PartNumber, CopySourceRange: CopySourceRange, + tracker: params.tracker, + calledBySdk: params.calledBySdk, }, function (err, data) { tryCallback(err || null, data); diff --git a/src/base.js b/src/base.js index 2454070..2799357 100644 --- a/src/base.js +++ b/src/base.js @@ -50,6 +50,7 @@ function getService(params, callback) { method: 'GET', headers: params.Headers, SignHost: SignHost, + tracker: params.tracker, }, function (err, data) { if (err) return callback(err); @@ -105,6 +106,7 @@ function putBucket(params, callback) { Region: params.Region, headers: params.Headers, body: xml, + tracker: params.tracker, }, function (err, data) { if (err) return callback(err); @@ -144,6 +146,7 @@ function headBucket(params, callback) { Region: params.Region, headers: params.Headers, method: 'HEAD', + tracker: params.tracker, }, callback ); @@ -182,6 +185,7 @@ function getBucket(params, callback) { Region: params.Region, headers: params.Headers, qs: reqParams, + tracker: params.tracker, }, function (err, data) { if (err) return callback(err); @@ -224,6 +228,7 @@ function deleteBucket(params, callback) { Region: params.Region, headers: params.Headers, method: 'DELETE', + tracker: params.tracker, }, function (err, data) { if (err && err.statusCode === 204) { @@ -286,6 +291,7 @@ function putBucketAcl(params, callback) { headers: headers, action: 'acl', body: xml, + tracker: params.tracker, }, function (err, data) { if (err) return callback(err); @@ -317,6 +323,7 @@ function getBucketAcl(params, callback) { Region: params.Region, headers: params.Headers, action: 'acl', + tracker: params.tracker, }, function (err, data) { if (err) return callback(err); @@ -382,6 +389,7 @@ function putBucketCors(params, callback) { body: xml, action: 'cors', headers: headers, + tracker: params.tracker, }, function (err, data) { if (err) return callback(err); @@ -413,6 +421,7 @@ function getBucketCors(params, callback) { Region: params.Region, headers: params.Headers, action: 'cors', + tracker: params.tracker, }, function (err, data) { if (err) { @@ -471,6 +480,7 @@ function deleteBucketCors(params, callback) { Region: params.Region, headers: params.Headers, action: 'cors', + tracker: params.tracker, }, function (err, data) { if (err && err.statusCode === 204) { @@ -505,6 +515,7 @@ function getBucketLocation(params, callback) { Region: params.Region, headers: params.Headers, action: 'location', + tracker: params.tracker, }, callback ); @@ -533,6 +544,7 @@ function putBucketPolicy(params, callback) { action: 'policy', body: PolicyStr, headers: headers, + tracker: params.tracker, }, function (err, data) { if (err && err.statusCode === 204) { @@ -568,6 +580,7 @@ function getBucketPolicy(params, callback) { headers: params.Headers, action: 'policy', rawBody: true, + tracker: params.tracker, }, function (err, data) { if (err) { @@ -614,6 +627,7 @@ function deleteBucketPolicy(params, callback) { Region: params.Region, headers: params.Headers, action: 'policy', + tracker: params.tracker, }, function (err, data) { if (err && err.statusCode === 204) { @@ -659,6 +673,7 @@ function putBucketTagging(params, callback) { body: xml, action: 'tagging', headers: headers, + tracker: params.tracker, }, function (err, data) { if (err && err.statusCode === 204) { @@ -693,6 +708,7 @@ function getBucketTagging(params, callback) { Region: params.Region, headers: params.Headers, action: 'tagging', + tracker: params.tracker, }, function (err, data) { if (err) { @@ -741,6 +757,7 @@ function deleteBucketTagging(params, callback) { Region: params.Region, headers: params.Headers, action: 'tagging', + tracker: params.tracker, }, function (err, data) { if (err && err.statusCode === 204) { @@ -776,6 +793,7 @@ function putBucketLifecycle(params, callback) { body: xml, action: 'lifecycle', headers: headers, + tracker: params.tracker, }, function (err, data) { if (err && err.statusCode === 204) { @@ -801,6 +819,7 @@ function getBucketLifecycle(params, callback) { Region: params.Region, headers: params.Headers, action: 'lifecycle', + tracker: params.tracker, }, function (err, data) { if (err) { @@ -840,6 +859,7 @@ function deleteBucketLifecycle(params, callback) { Region: params.Region, headers: params.Headers, action: 'lifecycle', + tracker: params.tracker, }, function (err, data) { if (err && err.statusCode === 204) { @@ -877,6 +897,7 @@ function putBucketVersioning(params, callback) { body: xml, action: 'versioning', headers: headers, + tracker: params.tracker, }, function (err, data) { if (err && err.statusCode === 204) { @@ -902,6 +923,7 @@ function getBucketVersioning(params, callback) { Region: params.Region, headers: params.Headers, action: 'versioning', + tracker: params.tracker, }, function (err, data) { if (!err) { @@ -932,6 +954,7 @@ function putBucketReplication(params, callback) { body: xml, action: 'replication', headers: headers, + tracker: params.tracker, }, function (err, data) { if (err && err.statusCode === 204) { @@ -957,6 +980,7 @@ function getBucketReplication(params, callback) { Region: params.Region, headers: params.Headers, action: 'replication', + tracker: params.tracker, }, function (err, data) { if (err) { @@ -996,6 +1020,7 @@ function deleteBucketReplication(params, callback) { Region: params.Region, headers: params.Headers, action: 'replication', + tracker: params.tracker, }, function (err, data) { if (err && err.statusCode === 204) { @@ -1053,6 +1078,7 @@ function putBucketWebsite(params, callback) { body: xml, action: 'website', headers: headers, + tracker: params.tracker, }, function (err, data) { if (err && err.statusCode === 204) { @@ -1088,6 +1114,7 @@ function getBucketWebsite(params, callback) { Key: params.Key, headers: params.Headers, action: 'website', + tracker: params.tracker, }, function (err, data) { if (err) { @@ -1139,6 +1166,7 @@ function deleteBucketWebsite(params, callback) { Region: params.Region, headers: params.Headers, action: 'website', + tracker: params.tracker, }, function (err, data) { if (err && err.statusCode === 204) { @@ -1195,6 +1223,7 @@ function putBucketReferer(params, callback) { body: xml, action: 'referer', headers: headers, + tracker: params.tracker, }, function (err, data) { if (err && err.statusCode === 204) { @@ -1230,6 +1259,7 @@ function getBucketReferer(params, callback) { Key: params.Key, headers: params.Headers, action: 'referer', + tracker: params.tracker, }, function (err, data) { if (err) { @@ -1290,6 +1320,7 @@ function putBucketDomain(params, callback) { body: xml, action: 'domain', headers: headers, + tracker: params.tracker, }, function (err, data) { if (err && err.statusCode === 204) { @@ -1324,6 +1355,7 @@ function getBucketDomain(params, callback) { Region: params.Region, headers: params.Headers, action: 'domain', + tracker: params.tracker, }, function (err, data) { if (err) return callback(err); @@ -1361,6 +1393,7 @@ function deleteBucketDomain(params, callback) { Region: params.Region, headers: params.Headers, action: 'domain', + tracker: params.tracker, }, function (err, data) { if (err && err.statusCode === 204) { @@ -1405,6 +1438,7 @@ function putBucketOrigin(params, callback) { body: xml, action: 'origin', headers: headers, + tracker: params.tracker, }, function (err, data) { if (err && err.statusCode === 204) { @@ -1439,6 +1473,7 @@ function getBucketOrigin(params, callback) { Region: params.Region, headers: params.Headers, action: 'origin', + tracker: params.tracker, }, function (err, data) { if (err) return callback(err); @@ -1476,6 +1511,7 @@ function deleteBucketOrigin(params, callback) { Region: params.Region, headers: params.Headers, action: 'origin', + tracker: params.tracker, }, function (err, data) { if (err && err.statusCode === 204) { @@ -1520,6 +1556,7 @@ function putBucketLogging(params, callback) { body: xml, action: 'logging', headers: headers, + tracker: params.tracker, }, function (err, data) { if (err && err.statusCode === 204) { @@ -1554,6 +1591,7 @@ function getBucketLogging(params, callback) { Region: params.Region, headers: params.Headers, action: 'logging', + tracker: params.tracker, }, function (err, data) { if (err) return callback(err); @@ -1622,6 +1660,7 @@ function submitBucketInventory(method, params, callback) { id: params['Id'], }, headers: headers, + tracker: params.tracker, }, function (err, data) { if (err && err.statusCode === 204) { @@ -1674,6 +1713,7 @@ function getBucketInventory(params, callback) { qs: { id: params['Id'], }, + tracker: params.tracker, }, function (err, data) { if (err) return callback(err); @@ -1734,6 +1774,7 @@ function listBucketInventory(params, callback) { qs: { 'continuation-token': params['ContinuationToken'], }, + tracker: params.tracker, }, function (err, data) { if (err) return callback(err); @@ -1801,6 +1842,7 @@ function deleteBucketInventory(params, callback) { qs: { id: params['Id'], }, + tracker: params.tracker, }, function (err, data) { if (err && err.statusCode === 204) { @@ -1841,6 +1883,7 @@ function putBucketAccelerate(params, callback) { body: xml, action: 'accelerate', headers: headers, + tracker: params.tracker, }, function (err, data) { if (err) return callback(err); @@ -1861,6 +1904,7 @@ function getBucketAccelerate(params, callback) { Bucket: params.Bucket, Region: params.Region, action: 'accelerate', + tracker: params.tracker, }, function (err, data) { if (!err) { @@ -1890,6 +1934,7 @@ function putBucketEncryption(params, callback) { body: xml, action: 'encryption', headers: headers, + tracker: params.tracker, }, function (err, data) { if (err && err.statusCode === 204) { @@ -1915,6 +1960,7 @@ function getBucketEncryption(params, callback) { Region: params.Region, headers: params.Headers, action: 'encryption', + tracker: params.tracker, }, function (err, data) { if (err) { @@ -1947,6 +1993,7 @@ function deleteBucketEncryption(params, callback) { Region: params.Region, headers: params.Headers, action: 'encryption', + tracker: params.tracker, }, function (err, data) { if (err && err.statusCode === 204) { @@ -1987,6 +2034,7 @@ function headObject(params, callback) { Key: params.Key, VersionId: params.VersionId, headers: params.Headers, + tracker: params.tracker, }, function (err, data) { if (err) { @@ -2025,6 +2073,7 @@ function listObjectVersions(params, callback) { headers: params.Headers, qs: reqParams, action: 'versions', + tracker: params.tracker, }, function (err, data) { if (err) return callback(err); @@ -2240,6 +2289,7 @@ function deleteObject(params, callback) { headers: params.Headers, VersionId: params.VersionId, action: params.Recursive ? 'recursive' : '', + tracker: params.tracker, }, function (err, data) { if (err) { @@ -2285,6 +2335,7 @@ function getObjectAcl(params, callback) { headers: params.Headers, qs: reqParams, action: 'acl', + tracker: params.tracker, }, function (err, data) { if (err) return callback(err); @@ -2353,6 +2404,7 @@ function putObjectAcl(params, callback) { action: 'acl', headers: headers, body: xml, + tracker: params.tracker, }, function (err, data) { if (err) return callback(err); @@ -2389,6 +2441,7 @@ function optionsObject(params, callback) { Region: params.Region, Key: params.Key, headers: headers, + tracker: params.tracker, }, function (err, data) { if (err) { @@ -2482,6 +2535,7 @@ function putObjectCopy(params, callback) { Key: params.Key, VersionId: params.VersionId, headers: params.Headers, + tracker: params.tracker, }, function (err, data) { if (err) return callback(err); @@ -2544,6 +2598,7 @@ function uploadPartCopy(params, callback) { uploadId: params['UploadId'], }, headers: params.Headers, + tracker: params.tracker, }, function (err, data) { if (err) return callback(err); @@ -2587,6 +2642,7 @@ function deleteMultipleObject(params, callback) { body: xml, action: 'delete', headers: headers, + tracker: params.tracker, }, function (err, data) { if (err) return callback(err); @@ -2634,6 +2690,7 @@ function restoreObject(params, callback) { body: xml, action: 'restore', headers: headers, + tracker: params.tracker, }, callback ); @@ -2671,6 +2728,7 @@ function putObjectTagging(params, callback) { action: 'tagging', headers: headers, VersionId: params.VersionId, + tracker: params.tracker, }, function (err, data) { if (err && err.statusCode === 204) { @@ -2707,6 +2765,7 @@ function getObjectTagging(params, callback) { headers: params.Headers, action: 'tagging', VersionId: params.VersionId, + tracker: params.tracker, }, function (err, data) { if (err) { @@ -2757,6 +2816,7 @@ function deleteObjectTagging(params, callback) { headers: params.Headers, action: 'tagging', VersionId: params.VersionId, + tracker: params.tracker, }, function (err, data) { if (err && err.statusCode === 204) { @@ -2810,6 +2870,7 @@ function selectObjectContent(params, callback) { body: xml, DataType: 'arraybuffer', rawBody: true, + tracker: params.tracker, }, function (err, data) { if (err && err.statusCode === 204) { @@ -3162,6 +3223,7 @@ function multipartListPart(params, callback) { Key: params.Key, headers: params.Headers, qs: reqParams, + tracker, }, function (err, data) { if (err) { @@ -3208,6 +3270,7 @@ function multipartAbort(params, callback) { Key: params.Key, headers: params.Headers, qs: reqParams, + tracker: params.tracker, }, function (err, data) { if (err) return callback(err); @@ -3245,6 +3308,7 @@ function request(params, callback) { Url: params.Url, rawBody: params.RawBody, DataType: params.DataType, + tracker: params.tracker, }, function (err, data) { if (err) return callback(err); @@ -3305,6 +3369,7 @@ function appendObject(params, callback) { position: params.Position, }, headers: params.Headers, + tracker: params.tracker, }, function (err, data) { if (err) return callback(err); @@ -3904,7 +3969,7 @@ function submitRequest(params, callback) { var tracker = params.tracker; var next = function (tryTimes) { var oldClockOffset = self.options.SystemClockOffset; - tracker && tracker.setParams({ signStartTime: new Date().getTime(), retryTimes: tryTimes - 1 }); + tracker && tracker.setParams({ signStartTime: new Date().getTime(), httpRetryTimes: tryTimes - 1 }); if (params.SwitchHost) { // 更换要签的host SignHost = SignHost.replace(/myqcloud.com/, 'tencentcos.cn'); @@ -4001,6 +4066,8 @@ function _submitRequest(params, callback) { // 更换请求的url url = url.replace(/myqcloud.com/, 'tencentcos.cn'); } + const repoterUrl = object ? url : ''; + if (params.action) { // 已知问题,某些版本的qq会对url自动拼接(比如/upload被拼接成/upload=(null))导致签名错误,这里做下兼容。 url = url + '?' + (util.isIOS_QQ ? `${params.action}=` : params.action); @@ -4066,11 +4133,20 @@ function _submitRequest(params, callback) { .join('&') : ''; var fullUrl = queryString ? opt.url + '?' + queryString : opt.url; - params.tracker && params.tracker.setParams({ reqUrl: fullUrl, accelerate: useAccelerate ? 'Y' : 'N' }); - // 分块上传时给父级tracker设置url信息 - params.tracker && - params.tracker.parent && - params.tracker.parent.setParams({ reqUrl: fullUrl, accelerate: useAccelerate ? 'Y' : 'N' }); + + if (params.tracker) { + params.tracker.setParams({ + url: fullUrl, + httpMethod: opt.method, + accelerate: useAccelerate, + httpSize: opt.body?.size || 0, + }); + // 分块上传时给父级tracker设置url信息 + if (params.tracker.parent && !params.tracker.parent.params.url) { + params.tracker.parent.setParams({ url: repoterUrl, accelerate: useAccelerate }); + } + } + var sender = (self.options.Request || REQUEST)(opt, function (r) { if (r && r.error === 'abort') return; diff --git a/src/cos.js b/src/cos.js index d5b0181..341de1c 100644 --- a/src/cos.js +++ b/src/cos.js @@ -37,13 +37,14 @@ var defaultOptions = { UploadIdCacheLimit: 50, UseAccelerate: false, ForceSignHost: true, // 默认将host加入签名计算,关闭后可能导致越权风险,建议保持为true - EnableTracker: false, // 默认关闭上报 + AutoSwitchHost: true, + CopySourceParser: null, // 自定义拷贝源解析器 + /** 上报相关 **/ DeepTracker: false, // 上报时是否对每个分块上传做单独上报 - Beacon: null, // 灯塔上报组件,如有需要请自行传入 TrackerDelay: 5000, // 周期性上报,单位毫秒。0代表实时上报 CustomId: '', // 自定义上报id - AutoSwitchHost: true, - CopySourceParser: null, // 自定义拷贝源解析器 + BeaconReporter: null, // 灯塔上报组件,如有需要请自行传入,传入即代表开启上报 + ClsReporter: null, // cls 上报组件,如有需要请自行传入,传入即代表开启上报 }; // 对外暴露的类 @@ -58,6 +59,8 @@ var COS = function (options) { this.options.CopySliceSize = Math.max(0, this.options.CopySliceSize); this.options.MaxPartNumber = Math.max(1024, Math.min(10000, this.options.MaxPartNumber)); this.options.Timeout = Math.max(0, this.options.Timeout); + this.options.EnableReporter = this.options.BeaconReporter || this.options.ClsReporter; + if (this.options.AppId) { console.warn( 'warning: AppId has been deprecated, Please put it at the end of parameter Bucket(E.g: "test-1250000000").' diff --git a/src/tracker.js b/src/tracker.js index 04702dc..67f544a 100644 --- a/src/tracker.js +++ b/src/tracker.js @@ -4,11 +4,11 @@ let beacon = null; const getBeacon = (Beacon, delay) => { if (!beacon) { // 生成 beacon - if (!Beacon || typeof Beacon !== 'function') { + if (typeof Beacon !== 'function') { throw new Error('Beacon not found'); } beacon = new Beacon({ - appkey: '0AND0VEVB24UBGDU', + appkey: '0WEB05PY6MHRGK0U', versionCode: pkg.version, channelID: 'js_sdk', //渠道,选填 openid: 'openid', // 用户id, 选填 @@ -21,6 +21,12 @@ const getBeacon = (Beacon, delay) => { return beacon; }; +// 毫秒转秒 +const ms2s = function (ms) { + if (!ms || ms < 0) return 0; + return (ms / 1000).toFixed(3); +}; + const utils = { // 生成uid 每个链路对应唯一一条uid getUid() { @@ -29,7 +35,7 @@ const utils = { }; return S4() + S4() + '-' + S4() + '-' + S4() + '-' + S4() + '-' + S4() + S4() + S4(); }, - // 获取网络类型 + // 获取网络类型 4g | wifi getNetType() { if (typeof navigator === 'object') { const connection = navigator.connection || navigator.mozConnection || navigator.webkitConnection; @@ -37,6 +43,13 @@ const utils = { } return 'unknown'; }, + // http | https + getProtocol() { + if (typeof location === 'object') { + return location.protocol.replace(/:/, ''); + } + return 'unknown protocol'; + }, // 获取pc端操作系统类型 getOsType() { if (typeof navigator !== 'object') { @@ -80,114 +93,32 @@ const utils = { isOtherMobile() { return isMobile && !isAndroid && !isIOS; }, - // 获取浏览器类型 - getDeviceName() { + getUA() { if (typeof navigator !== 'object') { return 'unknown device'; } - const explorer = navigator.userAgent.toLowerCase(); - // 腾讯会议内置浏览器 - if (explorer.includes('app/tencent_wemeet')) { - return 'tencent_wemeet'; - } - // 遨游浏览器 - if (explorer.indexOf('maxthon') >= 0) { - const match = explorer.match(/maxthon\/([\d.]+)/); - const ver = (match && match[1]) || ''; - return `傲游浏览器 ${ver}`.trim(); - } - // QQ浏览器 - if (explorer.indexOf('qqbrowser') >= 0) { - const match = explorer.match(/qqbrowser\/([\d.]+)/); - const ver = (match && match[1]) || ''; - return `QQ浏览器 ${ver}`.trim(); - } - // 搜狗浏览器 - if (explorer.indexOf('se 2.x') >= 0) { - return '搜狗浏览器'; - } - // 微信浏览器 - if (explorer.indexOf('wxwork') >= 0) { - return '微信内置浏览器'; - } - // ie - if (explorer.indexOf('msie') >= 0) { - const match = explorer.match(/msie ([\d.]+)/); - const ver = (match && match[1]) || ''; - return `IE ${ver}`.trim(); - } - // firefox - if (explorer.indexOf('firefox') >= 0) { - const match = explorer.match(/firefox\/([\d.]+)/); - const ver = (match && match[1]) || ''; - return `Firefox ${ver}`.trim(); - } - // Chrome - if (explorer.indexOf('chrome') >= 0) { - const match = explorer.match(/chrome\/([\d.]+)/); - const ver = (match && match[1]) || ''; - return `Chrome ${ver}`.trim(); - } - // Opera - if (explorer.indexOf('opera') >= 0) { - const match = explorer.match(/opera.([\d.]+)/); - const ver = (match && match[1]) || ''; - return `Opera ${ver}`.trim(); - } - // Safari - if (explorer.indexOf('safari') >= 0) { - const match = explorer.match(/version\/([\d.]+)/); - const ver = (match && match[1]) || ''; - return `Safari ${ver}`.trim(); - } - if (explorer.indexOf('edge') >= 0) { - const match = explorer.match(/edge\/([\d.]+)/); - const ver = (match && match[1]) || ''; - return `edge ${ver}`.trim(); - } - return explorer.substr(0, 200); + const explorer = navigator.userAgent; + return explorer; }, }; -const constant = { - isMobile: utils.isMobile(), - isBrowser: !utils.isMobile(), - mobileOsType: utils.isAndroid() ? 'android' : utils.isIOS ? 'ios' : 'other_mobile', - pcOsType: utils.getOsType(), -}; - -// 设备信息,只取一次值 -const deviceInfo = { - // ↓上报项 - deviceType: constant.isMobile ? 'mobile' : constant.isBrowser ? 'browser' : 'unknown', - devicePlatform: constant.isMobile ? constant.mobileOsType : constant.pcOsType, - deviceName: utils.getDeviceName(), //浏览器名称 -}; - -// 分块上传原子方法 -const sliceUploadMethods = [ - 'multipartInit', - 'multipartUpload', - 'multipartComplete', - 'multipartList', - 'multipartListPart', - 'multipartAbort', -]; - -const uploadApi = ['putObject', 'postObject', 'appendObject', 'sliceUploadFile', 'uploadFile', 'uploadFiles'].concat( - sliceUploadMethods -); -const downloadApi = ['getObject']; +const isMobile = utils.isMobile(); +const mobileOsType = utils.isAndroid() ? 'android' : utils.isIOS ? 'ios' : 'other_mobile'; +const pcOsType = utils.getOsType(); +const devicePlatform = isMobile ? mobileOsType : pcOsType; +const ua = utils.getUA(); +const protocol = utils.getProtocol(); -function getEventCode(apiName) { - if (uploadApi.includes(apiName)) { - return 'cos_upload'; +const transApiName = (api) => { + if (['putObject', 'sliceUploadFile', 'uploadFile', 'uploadFiles'].includes(api)) { + return 'UploadTask'; + } else if (api === 'getObject') { + return 'DownloadTask'; + } else if (['putObjectCopy', 'sliceCopyFile'].includes(api)) { + return 'CopyTask'; } - if (downloadApi.includes(apiName)) { - return 'cos_download'; - } - return 'base_service'; -} + return api; +}; // 上报参数驼峰改下划线 function camel2underline(key) { @@ -195,70 +126,56 @@ function camel2underline(key) { } function formatParams(params) { const formattedParams = {}; - const allReporterKeys = [ - 'tracePlatform', - 'cossdkVersion', - 'region', + const successKeys = [ + 'sdkVersionName', + 'sdkVersionCode', + 'osName', 'networkType', - 'host', + 'requestName', + 'requestResult', + 'bucket', + 'region', + 'appid', 'accelerate', + 'url', + 'host', 'requestPath', - 'size', + 'userAgent', + 'networkProtocol', + 'httpMethod', + 'httpSize', + 'httpSpeed', + 'httpTookTime', 'httpMd5', 'httpSign', - 'httpFull', - 'name', - 'result', - 'tookTime', + 'httpFullTime', + 'httpDomain', + 'partNumber', + 'httpRetryTimes', + 'customId', + 'traceId', + 'realApi', + ]; + const failureKeys = [ + ...successKeys, 'errorNode', 'errorCode', + 'errorName', 'errorMessage', 'errorRequestId', - 'errorStatusCode', + 'errorHttpCode', 'errorServiceName', 'errorType', - 'traceId', - 'bucket', - 'appid', - 'partNumber', - 'retryTimes', - 'reqUrl', - 'customId', 'fullError', - 'deviceType', - 'devicePlatform', - 'deviceName', - ]; - const successKeys = [ - 'tracePlatform', - 'cossdkVersion', - 'region', - 'bucket', - 'appid', - 'networkType', - 'host', - 'accelerate', - 'requestPath', - 'partNumber', - 'size', - 'name', - 'result', - 'tookTime', - 'errorRequestId', - 'retryTimes', - 'reqUrl', - 'customId', - 'deviceType', - 'devicePlatform', - 'deviceName', ]; // 需要上报的参数字段 - const reporterKeys = params.result === 'Success' ? successKeys : allReporterKeys; + const reporterKeys = params.requestResult === 'Success' ? successKeys : failureKeys; for (let key in params) { if (!reporterKeys.includes(key)) continue; const formattedKey = camel2underline(key); formattedParams[formattedKey] = params[key]; } + formattedParams['request_name'] = params.realApi ? transApiName(params.realApi) : params.requestName; return formattedParams; } @@ -271,6 +188,8 @@ class Tracker { bucket, region, apiName, + realApi, + httpMethod, fileKey, fileSize, accelerate, @@ -278,46 +197,53 @@ class Tracker { delay, deepTracker, Beacon, + clsReporter, } = opt; const appid = (bucket && bucket.substr(bucket.lastIndexOf('-') + 1)) || ''; this.parent = parent; this.deepTracker = deepTracker; this.delay = delay; + if (clsReporter && !this.clsReporter) { + this.clsReporter = clsReporter; + } // 上报用到的字段 this.params = { // 通用字段 - cossdkVersion: pkg.version, - region, + sdkVersionName: 'cos-js-sdk-v5', + sdkVersionCode: pkg.version, + osName: devicePlatform, networkType: '', + + requestName: apiName || '', + requestResult: '', // sdk api调用结果Success、Failure + realApi, + + bucket, + region, + accelerate, + httpMethod, + url: '', // 请求url host: '', - accelerate: accelerate ? 'Y' : 'N', + httpDomain: '', requestPath: fileKey || '', - size: fileSize || -1, - httpMd5: 0, // MD5耗时 - httpSign: 0, // 计算签名耗时 - httpFull: 0, // http请求耗时 - name: apiName || '', - result: '', // sdk api调用结果Success、Fail - tookTime: 0, // 总耗时 - errorNode: '', + userAgent: ua, + networkProtocol: protocol, + + errorType: '', errorCode: '', + errorName: '', errorMessage: '', errorRequestId: '', - errorStatusCode: 0, + errorHttpCode: 0, errorServiceName: '', + errorNode: '', - // js补充字段 - tracePlatform: 'cos-js-sdk-v5', // 上报平台=js - traceId: traceId || utils.getUid(), // 每条上报唯一标识 - bucket, - appid, - partNumber: 0, // 分块上传编号 - retryTimes: 0, // sdk内部发起的请求重试 - reqUrl: '', // 请求url - customId: customId || '', // 业务id - deviceType: deviceInfo.deviceType, // 设备类型 移动端浏览器、web浏览器 - devicePlatform: deviceInfo.devicePlatform, - deviceName: deviceInfo.deviceName, + httpTookTime: 0, // http整体耗时 + httpSize: fileSize || 0, // 主要是文件大小,大小 B + httpMd5: 0, // MD5耗时 + httpSign: 0, // 计算签名耗时 + httpFullTime: 0, // 任务整体耗时(包括md5、签名等) + httpSpeed: 0, // 主要关注上传速度,KB/s md5StartTime: 0, // md5计算开始时间 md5EndTime: 0, // md5计算结束时间 @@ -327,53 +253,111 @@ class Tracker { httpEndTime: 0, // 网路请求结束时间 startTime: new Date().getTime(), // sdk api调用起始时间,不是纯网络耗时 endTime: 0, // sdk api调用结束时间,不是纯网络耗时 + + // js补充字段 + traceId: traceId || utils.getUid(), // 每条上报唯一标识 + appid, + partNumber: 0, // 分块上传编号 + httpRetryTimes: 0, // sdk内部发起的请求重试 + customId: customId || '', // 业务id + partTime: 0, }; - this.beacon = getBeacon(Beacon, delay); + if (Beacon) { + this.beacon = getBeacon(Beacon, delay); + } } // 格式化sdk回调 formatResult(err, data) { const now = new Date().getTime(); - const tookTime = now - this.params.startTime; const networkType = utils.getNetType(); const errorCode = err ? err?.code || err?.error?.code || err?.error?.Code : ''; const errorMessage = err ? err?.message || err?.error?.message || err?.error?.Message : ''; + const errorName = errorMessage; const errorServiceName = err ? err?.resource || err?.error?.resource || err?.error?.Resource : ''; - const errorStatusCode = err ? err?.statusCode : data.statusCode; + const errorHttpCode = err ? err?.statusCode : data.statusCode; const requestId = err ? err?.headers && err?.headers['x-cos-request-id'] : data?.headers && data?.headers['x-cos-request-id']; const errorType = err ? (requestId ? 'Server' : 'Client') : ''; + + if (this.params.requestName === 'getObject') { + this.params.httpSize = data ? data.headers && data.headers['content-length'] : 0; + } + + // 上报 sliceUploadFile || uploadFile || uploadFiles 命中分块上传时 + const isSliceUploadFile = this.params.realApi === 'sliceUploadFile'; + const isSliceCopyFile = this.params.realApi === 'sliceCopyFile'; + + if (isSliceUploadFile || isSliceCopyFile) { + const speed = this.params.httpSize / 1024 / this.params.partTime; + Object.assign(this.params, { httpSpeed: speed < 0 ? 0 : speed.toFixed(3) }); + } else { + const httpFullTime = now - this.params.startTime; + const httpTookTime = this.params.httpEndTime - this.params.httpStartTime; + const speed = this.params.httpSize / 1024 / (httpTookTime / 1000); + const httpMd5 = this.params.md5EndTime - this.params.md5StartTime; + const httpSign = this.params.signEndTime - this.params.signStartTime; + + if (this.parent) { + this.parent.addParamValue('httpTookTime', ms2s(httpTookTime)); + this.parent.addParamValue('httpFullTime', ms2s(httpFullTime)); + this.parent.addParamValue('httpMd5', ms2s(httpMd5)); + this.parent.addParamValue('httpSign', ms2s(httpSign)); + if (['multipartUpload', 'uploadPartCopy', 'putObjectCopy'].includes(this.params.requestName)) { + // 只有小分块上传|复制才累计纯请求耗时,计算速度时用到 + this.parent.addParamValue('partTime', ms2s(httpTookTime)); + } + } + Object.assign(this.params, { + httpFullTime: ms2s(httpFullTime), + httpMd5: ms2s(httpMd5), + httpSign: ms2s(httpSign), + httpTookTime: ms2s(httpTookTime), + httpSpeed: speed < 0 ? 0 : speed.toFixed(3), + }); + } + Object.assign(this.params, { - tookTime, networkType, - httpMd5: this.params.md5EndTime - this.params.md5StartTime, - httpSign: this.params.signEndTime - this.params.signStartTime, - httpFull: this.params.httpEndTime - this.params.httpStartTime, - result: err ? 'Fail' : 'Success', + requestResult: err ? 'Failure' : 'Success', errorType, errorCode, - errorStatusCode, + errorHttpCode, + errorName, errorMessage, errorServiceName, errorRequestId: requestId, }); + if (err && (!errorCode || !errorMessage)) { // 暂存全量err一段时间 观察是否所有err格式都可被解析 this.params.fullError = err ? JSON.stringify(err) : ''; } - if (this.params.name === 'getObject') { - this.params.size = data ? data.headers && data.headers['content-length'] : -1; - } - if (this.params.reqUrl) { + + if (this.params.url) { try { - const execRes = /^http(s)?:\/\/(.*?)\//.exec(this.params.reqUrl); + const execRes = /^http(s)?:\/\/(.*?)\//.exec(this.params.url); this.params.host = execRes[2]; } catch (e) { - this.params.host = this.params.reqUrl; + this.params.host = this.params.url; } + this.params.httpDomain = this.params.host; + } + } + + // 上报 + report(err, data) { + if (!this.beacon && !this.clsReporter) return; + this.formatResult(err, data); + const formattedParams = formatParams(this.params); + console.log(formattedParams); + if (this.beacon) { + this.sendEventsToBeacon(formattedParams); + } + if (this.clsReporter) { + this.sendEventsToCLS(formattedParams); } - this.sendEvents(); } // 设置当前链路的参数 @@ -381,19 +365,19 @@ class Tracker { Object.assign(this.params, params); } - // 使用灯塔延时上报 - sendEvents() { + addParamValue(key, value) { + this.params[key] = (+this.params[key] + +value).toFixed(3); + } + + // 上报灯塔 + sendEventsToBeacon(formattedParams) { // DeepTracker模式下才会上报分块上传内部细节 - if (sliceUploadMethods.includes(this.params.name) && !this.deepTracker) { + const isSliceUploadFile = + this.params.requestName === 'sliceUploadFile' || this.params.realApi === 'sliceUploadFile'; + if (isSliceUploadFile && !this.deepTracker) { return; } - const eventCode = getEventCode(this.params.name); - const formattedParams = formatParams(this.params); - - // 兜底处理 - if (!this.beacon) { - this.beacon = getBeacon(this.delay || 5000); - } + const eventCode = 'qcloud_track_cos_sdk'; if (this.delay === 0) { // 实时上报 @@ -404,6 +388,14 @@ class Tracker { } } + // 上报 cls + sendEventsToCLS(formattedParams) { + // 是否实时上报 + const immediate = !!(this.delay === 0); + + this.clsReporter.log(formattedParams, immediate); + } + // 生成子实例,与父所属一个链路,可用于分块上传内部流程上报单个分块操作 generateSubTracker(subParams) { Object.assign(subParams, { @@ -412,9 +404,11 @@ class Tracker { traceId: this.params.traceId, bucket: this.params.bucket, region: this.params.region, + accelerate: this.params.accelerate, fileKey: this.params.requestPath, customId: this.params.customId, delay: this.delay, + clsReporter: this.clsReporter, }); return new Tracker(subParams); } diff --git a/src/util.js b/src/util.js index 030e9a4..c0e3c75 100644 --- a/src/util.js +++ b/src/util.js @@ -579,24 +579,30 @@ var apiWrapper = function (apiName, apiFn) { // tracker传递 var tracker; - if (self.options.EnableTracker) { - if (params.calledBySdk === 'sliceUploadFile') { + if (self.options.EnableReporter) { + if (params.calledBySdk === 'sliceUploadFile' || params.calledBySdk === 'sliceCopyFile') { // 分块上传内部方法使用sliceUploadFile的子链路 tracker = params.tracker && params.tracker.generateSubTracker({ apiName }); } else if (['uploadFile', 'uploadFiles'].includes(apiName)) { // uploadFile、uploadFiles方法在内部处理,此处不处理 tracker = null; } else { - var fileSize = -1; + var fileSize = 0; if (params.Body) { fileSize = - typeof params.Body === 'string' ? params.Body.length : params.Body.size || params.Body.byteLength || -1; + typeof params.Body === 'string' ? params.Body.length : params.Body.size || params.Body.byteLength || 0; } + const accelerate = + self.options.UseAccelerate || + (typeof self.options.Domain === 'string' && self.options.Domain.includes('accelerate.')); tracker = new Tracker({ - Beacon: self.options.Beacon, + Beacon: self.options.BeaconReporter, + clsReporter: self.options.ClsReporter, bucket: params.Bucket, region: params.Region, apiName: apiName, + realApi: apiName, + accelerate, fileKey: params.Key, fileSize: fileSize, deepTracker: self.options.DeepTracker, @@ -619,7 +625,7 @@ var apiWrapper = function (apiName, apiFn) { }; var _callback = function (err, data) { // 格式化上报参数并上报 - tracker && tracker.formatResult(err, data); + tracker && tracker.report(err, data); callback && callback(formatResult(err), formatResult(data)); };