UNPKG

hdr-histogram-js

Version:
16 lines 94.2 kB
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("pako")):"function"==typeof define&&define.amd?define(["exports","pako"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).hdr={},t.pako)}(this,(function(exports,pako){"use strict";function _interopNamespace(t){if(t&&t.__esModule)return t;var e=Object.create(null);return t&&Object.keys(t).forEach((function(r){if("default"!==r){var n=Object.getOwnPropertyDescriptor(t,r);Object.defineProperty(e,r,n.get?n:{enumerable:!0,get:function(){return t[r]}})}})),e.default=t,Object.freeze(e)}var pako__namespace=_interopNamespace(pako);const{pow:pow$6,floor:floor$5}=Math,TWO_POW_32=pow$6(2,32);class ByteBuffer{constructor(t){this.position=0,this.data=t,this.int32ArrayForConvert=new Uint32Array(1),this.int8ArrayForConvert=new Uint8Array(this.int32ArrayForConvert.buffer)}static allocate(t=16){return new ByteBuffer(new Uint8Array(t))}put(t){if(this.position===this.data.length){const t=this.data;this.data=new Uint8Array(2*this.data.length),this.data.set(t)}this.data[this.position]=t,this.position++}putInt32(t){if(this.data.length-this.position<4){const t=this.data;this.data=new Uint8Array(2*this.data.length+4),this.data.set(t)}this.int32ArrayForConvert[0]=t,this.data.set(this.int8ArrayForConvert.reverse(),this.position),this.position+=4}putInt64(t){this.putInt32(floor$5(t/TWO_POW_32)),this.putInt32(t)}putArray(t){if(this.data.length-this.position<t.byteLength){const e=this.data;this.data=new Uint8Array(this.position+t.byteLength),this.data.set(e)}this.data.set(t,this.position),this.position+=t.byteLength}get(){const t=this.data[this.position];return this.position++,t}getInt32(){this.int8ArrayForConvert.set(this.data.slice(this.position,this.position+4).reverse());const t=this.int32ArrayForConvert[0];return this.position+=4,t}getInt64(){const t=this.getInt32(),e=this.getInt32();return t*TWO_POW_32+e}resetPosition(){this.position=0}}class HistogramIterationValue{constructor(){this.reset()}reset(){this.valueIteratedTo=0,this.valueIteratedFrom=0,this.countAtValueIteratedTo=0,this.countAddedInThisIterationStep=0,this.totalCountToThisValue=0,this.totalValueToThisValue=0,this.percentile=0,this.percentileLevelIteratedTo=0}}class JsHistogramIterator{constructor(){this.currentIterationValue=new HistogramIterationValue}resetIterator(t){this.histogram=t,this.savedHistogramTotalRawCount=t.totalCount,this.arrayTotalCount=t.totalCount,this.currentIndex=0,this.currentValueAtIndex=0,this.nextValueAtIndex=Math.pow(2,t.unitMagnitude),this.prevValueIteratedTo=0,this.totalCountToPrevIndex=0,this.totalCountToCurrentIndex=0,this.totalValueToCurrentIndex=0,this.countAtThisValue=0,this.freshSubBucket=!0,this.currentIterationValue.reset()}hasNext(){if(this.histogram.totalCount!==this.savedHistogramTotalRawCount)throw"Concurrent Modification Exception";return this.totalCountToCurrentIndex<this.arrayTotalCount}next(){for(;!this.exhaustedSubBuckets();){if(this.countAtThisValue=this.histogram.getCountAtIndex(this.currentIndex),this.freshSubBucket&&(this.totalCountToCurrentIndex+=this.countAtThisValue,this.totalValueToCurrentIndex+=this.countAtThisValue*this.histogram.highestEquivalentValue(this.currentValueAtIndex),this.freshSubBucket=!1),this.reachedIterationLevel()){const t=this.getValueIteratedTo();if(Object.assign(this.currentIterationValue,{valueIteratedTo:t,valueIteratedFrom:this.prevValueIteratedTo,countAtValueIteratedTo:this.countAtThisValue,countAddedInThisIterationStep:this.totalCountToCurrentIndex-this.totalCountToPrevIndex,totalCountToThisValue:this.totalCountToCurrentIndex,totalValueToThisValue:this.totalValueToCurrentIndex,percentile:100*this.totalCountToCurrentIndex/this.arrayTotalCount,percentileLevelIteratedTo:this.getPercentileIteratedTo()}),this.prevValueIteratedTo=t,this.totalCountToPrevIndex=this.totalCountToCurrentIndex,this.incrementIterationLevel(),this.histogram.totalCount!==this.savedHistogramTotalRawCount)throw new Error("Concurrent Modification Exception");return this.currentIterationValue}this.incrementSubBucket()}throw new Error("Index Out Of Bounds Exception")}getPercentileIteratedTo(){return 100*this.totalCountToCurrentIndex/this.arrayTotalCount}getPercentileIteratedFrom(){return 100*this.totalCountToPrevIndex/this.arrayTotalCount}getValueIteratedTo(){return this.histogram.highestEquivalentValue(this.currentValueAtIndex)}exhaustedSubBuckets(){return this.currentIndex>=this.histogram.countsArrayLength}incrementSubBucket(){this.freshSubBucket=!0,this.currentIndex++,this.currentValueAtIndex=this.histogram.valueFromIndex(this.currentIndex),this.nextValueAtIndex=this.histogram.valueFromIndex(this.currentIndex+1)}}class RecordedValuesIterator extends JsHistogramIterator{constructor(t){super(),this.doReset(t)}reset(){this.doReset(this.histogram)}doReset(t){super.resetIterator(t),this.visitedIndex=-1}incrementIterationLevel(){this.visitedIndex=this.currentIndex}reachedIterationLevel(){return 0!=this.histogram.getCountAtIndex(this.currentIndex)&&this.visitedIndex!==this.currentIndex}}const{pow:pow$5,floor:floor$4,log2:log2$2}=Math;class PercentileIterator extends JsHistogramIterator{constructor(t,e){super(),this.percentileTicksPerHalfDistance=0,this.percentileLevelToIterateTo=0,this.percentileLevelToIterateFrom=0,this.reachedLastRecordedValue=!1,this.doReset(t,e)}reset(t){this.doReset(this.histogram,t)}doReset(t,e){super.resetIterator(t),this.percentileTicksPerHalfDistance=e,this.percentileLevelToIterateTo=0,this.percentileLevelToIterateFrom=0,this.reachedLastRecordedValue=!1}hasNext(){return!!super.hasNext()||!this.reachedLastRecordedValue&&this.arrayTotalCount>0&&(this.percentileLevelToIterateTo=100,this.reachedLastRecordedValue=!0,!0)}incrementIterationLevel(){this.percentileLevelToIterateFrom=this.percentileLevelToIterateTo;const t=this.percentileTicksPerHalfDistance*pow$5(2,floor$4(log2$2(100/(100-this.percentileLevelToIterateTo)))+1);this.percentileLevelToIterateTo+=100/t}reachedIterationLevel(){if(0===this.countAtThisValue)return!1;return 100*this.totalCountToCurrentIndex/this.arrayTotalCount>=this.percentileLevelToIterateTo}getPercentileIteratedTo(){return this.percentileLevelToIterateTo}getPercentileIteratedFrom(){return this.percentileLevelToIterateFrom}}const leftPadding=t=>e=>e.length<t?" ".repeat(t-e.length)+e:e,integerFormatter=t=>{const e=leftPadding(t);return t=>e(""+t)},{floor:floor$3,log10:log10,pow:pow$4}=Math,numberOfDigits=t=>floor$3(log10(t)+1),keepSignificantDigits=t=>e=>{const r=numberOfDigits(e);if(r>t){return e-e%pow$4(10,r-t)}return e},floatFormatter=(t,e)=>{const r=new Intl.NumberFormat("en-US",{maximumFractionDigits:e,minimumFractionDigits:e,useGrouping:!1}),n=leftPadding(t);return t=>n(r.format(t))},ulp=t=>Math.pow(2,Math.floor(Math.log2(t))-52),NO_TAG="NO TAG",toSummary=t=>{const{totalCount:e,maxValue:r,numberOfSignificantValueDigits:n}=t,o=keepSignificantDigits(n);return{p50:o(t.getValueAtPercentile(50)),p75:o(t.getValueAtPercentile(75)),p90:o(t.getValueAtPercentile(90)),p97_5:o(t.getValueAtPercentile(97.5)),p99:o(t.getValueAtPercentile(99)),p99_9:o(t.getValueAtPercentile(99.9)),p99_99:o(t.getValueAtPercentile(99.99)),p99_999:o(t.getValueAtPercentile(99.999)),max:r,totalCount:e}},{pow:pow$3,floor:floor$2,ceil:ceil$1,log2:log2$1,max:max$2,min:min}=Math;class JsHistogram{constructor(t,e,r){if(this.autoResize=!1,this.startTimeStampMsec=Number.MAX_SAFE_INTEGER,this.endTimeStampMsec=0,this.tag=NO_TAG,this.maxValue=0,this.minNonZeroValue=Number.MAX_SAFE_INTEGER,this.identity=0,this.highestTrackableValue=0,this.lowestDiscernibleValue=0,this.numberOfSignificantValueDigits=0,this.bucketCount=0,this.subBucketCount=0,this.countsArrayLength=0,this.wordSizeInBytes=0,t<1)throw new Error("lowestDiscernibleValue must be >= 1");if(e<2*t)throw new Error(`highestTrackableValue must be >= 2 * lowestDiscernibleValue ( 2 * ${t} )`);if(r<0||r>5)throw new Error("numberOfSignificantValueDigits must be between 0 and 5");this.identity=JsHistogram.identityBuilder++,this.init(t,e,r)}incrementTotalCount(){this._totalCount++}addToTotalCount(t){this._totalCount+=t}setTotalCount(t){this._totalCount=t}get totalCount(){return this._totalCount}updatedMaxValue(t){const e=t+this.unitMagnitudeMask;this.maxValue=e}updateMinNonZeroValue(t){if(t<=this.unitMagnitudeMask)return;const e=floor$2(t/this.lowestDiscernibleValueRounded)*this.lowestDiscernibleValueRounded;this.minNonZeroValue=e}init(t,e,r){this.lowestDiscernibleValue=t,this.highestTrackableValue=e,this.numberOfSignificantValueDigits=r;const n=2*floor$2(pow$3(10,r));this.unitMagnitude=floor$2(log2$1(t)),this.lowestDiscernibleValueRounded=pow$3(2,this.unitMagnitude),this.unitMagnitudeMask=this.lowestDiscernibleValueRounded-1;const o=ceil$1(log2$1(n));this.subBucketHalfCountMagnitude=(o>1?o:1)-1,this.subBucketCount=pow$3(2,this.subBucketHalfCountMagnitude+1),this.subBucketHalfCount=this.subBucketCount/2,this.subBucketMask=(floor$2(this.subBucketCount)-1)*pow$3(2,this.unitMagnitude),this.establishSize(e),this.leadingZeroCountBase=53-this.unitMagnitude-this.subBucketHalfCountMagnitude-1,this.percentileIterator=new PercentileIterator(this,1),this.recordedValuesIterator=new RecordedValuesIterator(this)}establishSize(t){this.countsArrayLength=this.determineArrayLengthNeeded(t),this.bucketCount=this.getBucketsNeededToCoverValue(t),this.highestTrackableValue=t}determineArrayLengthNeeded(t){if(t<2*this.lowestDiscernibleValue)throw new Error("highestTrackableValue ("+t+") cannot be < (2 * lowestDiscernibleValue)");return this.getLengthForNumberOfBuckets(this.getBucketsNeededToCoverValue(t))}getLengthForNumberOfBuckets(t){return(t+1)*(this.subBucketCount/2)}getBucketsNeededToCoverValue(t){let e=this.subBucketCount*pow$3(2,this.unitMagnitude),r=1;for(;e<=t;){if(e>Number.MAX_SAFE_INTEGER/2)return r+1;e*=2,r++}return r}recordValue(t){this.recordSingleValue(t)}recordSingleValue(t){const e=this.countsArrayIndex(t);e>=this.countsArrayLength?this.handleRecordException(1,t):this.incrementCountAtIndex(e),this.updateMinAndMax(t),this.incrementTotalCount()}handleRecordException(t,e){if(!this.autoResize)throw new Error("Value "+e+" is outside of histogram covered range");this.resize(e);var r=this.countsArrayIndex(e);this.addToCountAtIndex(r,t),this.highestTrackableValue=this.highestEquivalentValue(this.valueFromIndex(this.countsArrayLength-1))}countsArrayIndex(t){if(t<0)throw new Error("Histogram recorded value cannot be negative.");const e=this.getBucketIndex(t),r=this.getSubBucketIndex(t,e);return this.computeCountsArrayIndex(e,r)}computeCountsArrayIndex(t,e){return(t+1)*pow$3(2,this.subBucketHalfCountMagnitude)+(e-this.subBucketHalfCount)}getBucketIndex(t){return max$2(floor$2(log2$1(t))-this.subBucketHalfCountMagnitude-this.unitMagnitude,0)}getSubBucketIndex(t,e){return floor$2(t/pow$3(2,e+this.unitMagnitude))}updateMinAndMax(t){t>this.maxValue&&this.updatedMaxValue(t),t<this.minNonZeroValue&&0!==t&&this.updateMinNonZeroValue(t)}getValueAtPercentile(t){const e=min(t,100)/100*this.totalCount,r=max$2(ceil$1(e-ulp(e)),1);let n=0;for(let e=0;e<this.countsArrayLength;e++)if(n+=this.getCountAtIndex(e),n>=r){var o=this.valueFromIndex(e);return 0===t?this.lowestEquivalentValue(o):this.highestEquivalentValue(o)}return 0}valueFromIndexes(t,e){return e*pow$3(2,t+this.unitMagnitude)}valueFromIndex(t){let e=floor$2(t/this.subBucketHalfCount)-1,r=t%this.subBucketHalfCount+this.subBucketHalfCount;return e<0&&(r-=this.subBucketHalfCount,e=0),this.valueFromIndexes(e,r)}lowestEquivalentValue(t){const e=this.getBucketIndex(t),r=this.getSubBucketIndex(t,e);return this.valueFromIndexes(e,r)}highestEquivalentValue(t){return this.nextNonEquivalentValue(t)-1}nextNonEquivalentValue(t){return this.lowestEquivalentValue(t)+this.sizeOfEquivalentValueRange(t)}sizeOfEquivalentValueRange(t){const e=this.getBucketIndex(t),r=this.getSubBucketIndex(t,e);return pow$3(2,this.unitMagnitude+(r>=this.subBucketCount?e+1:e))}medianEquivalentValue(t){return this.lowestEquivalentValue(t)+floor$2(this.sizeOfEquivalentValueRange(t)/2)}get mean(){if(0===this.totalCount)return 0;this.recordedValuesIterator.reset();let t=0;for(;this.recordedValuesIterator.hasNext();){const e=this.recordedValuesIterator.next();t+=this.medianEquivalentValue(e.valueIteratedTo)*e.countAtValueIteratedTo}return t/this.totalCount}getStdDeviation(t=this.mean){if(0===this.totalCount)return 0;let e=0;for(this.recordedValuesIterator.reset();this.recordedValuesIterator.hasNext();){const r=this.recordedValuesIterator.next(),n=this.medianEquivalentValue(r.valueIteratedTo)-t;e+=n*n*r.countAddedInThisIterationStep}return Math.sqrt(e/this.totalCount)}get stdDeviation(){if(0===this.totalCount)return 0;const t=this.mean;let e=0;for(this.recordedValuesIterator.reset();this.recordedValuesIterator.hasNext();){const r=this.recordedValuesIterator.next(),n=this.medianEquivalentValue(r.valueIteratedTo)-t;e+=n*n*r.countAddedInThisIterationStep}return Math.sqrt(e/this.totalCount)}outputPercentileDistribution(t=5,e=1,r=!1){let n="";n+=r?'"Value","Percentile","TotalCount","1/(1-Percentile)"\n':"       Value     Percentile TotalCount 1/(1-Percentile)\n\n";const o=this.percentileIterator;let i,s;if(o.reset(t),r){const t=floatFormatter(0,this.numberOfSignificantValueDigits),r=floatFormatter(0,12),n=floatFormatter(0,2);i=o=>t(o.valueIteratedTo/e)+","+r(o.percentileLevelIteratedTo/100)+","+o.totalCountToThisValue+","+n(1/(1-o.percentileLevelIteratedTo/100))+"\n",s=n=>t(n.valueIteratedTo/e)+","+r(n.percentileLevelIteratedTo/100)+","+n.totalCountToThisValue+",Infinity\n"}else{const t=floatFormatter(12,this.numberOfSignificantValueDigits),r=floatFormatter(2,12),n=integerFormatter(10),o=floatFormatter(14,2);i=i=>t(i.valueIteratedTo/e)+" "+r(i.percentileLevelIteratedTo/100)+" "+n(i.totalCountToThisValue)+" "+o(1/(1-i.percentileLevelIteratedTo/100))+"\n",s=o=>t(o.valueIteratedTo/e)+" "+r(o.percentileLevelIteratedTo/100)+" "+n(o.totalCountToThisValue)+"\n"}for(;o.hasNext();){const t=o.next();t.percentileLevelIteratedTo<100?n+=i(t):n+=s(t)}if(!r){const t=floatFormatter(12,this.numberOfSignificantValueDigits),r=this.mean,o=t(r/e),i=t(this.getStdDeviation(r)/e),s=t(this.maxValue/e),a=integerFormatter(12);n+=`#[Mean    = ${o}, StdDeviation   = ${i}]\n#[Max     = ${s}, Total count    = ${a(this.totalCount)}]\n#[Buckets = ${a(this.bucketCount)}, SubBuckets     = ${a(this.subBucketCount)}]\n`}return n}get summary(){return toSummary(this)}toJSON(){return this.summary}inspect(){return this.toString()}[Symbol.for("nodejs.util.inspect.custom")](){return this.toString()}get estimatedFootprintInBytes(){return this._getEstimatedFootprintInBytes()}recordSingleValueWithExpectedInterval(t,e){if(this.recordSingleValue(t),!(e<=0))for(let r=t-e;r>=e;r-=e)this.recordSingleValue(r)}recordCountAtValue(t,e){const r=this.countsArrayIndex(e);r>=this.countsArrayLength?this.handleRecordException(t,e):this.addToCountAtIndex(r,t),this.updateMinAndMax(e),this.addToTotalCount(t)}recordValueWithCount(t,e){this.recordCountAtValue(e,t)}recordValueWithExpectedInterval(t,e){this.recordSingleValueWithExpectedInterval(t,e)}recordValueWithCountAndExpectedInterval(t,e,r){if(this.recordCountAtValue(e,t),!(r<=0))for(let n=t-r;n>=r;n-=r)this.recordCountAtValue(e,n)}addWhileCorrectingForCoordinatedOmission(t,e){const r=this,n=new RecordedValuesIterator(t);for(;n.hasNext();){const t=n.next();r.recordValueWithCountAndExpectedInterval(t.valueIteratedTo,t.countAtValueIteratedTo,e)}}add(t){if(!(t instanceof JsHistogram))throw new Error("Cannot add a WASM histogram to a regular JS histogram");if(this.highestEquivalentValue(this.valueFromIndex(this.countsArrayLength-1))<t.maxValue){if(!this.autoResize)throw new Error("The other histogram includes values that do not fit in this histogram's range.");this.resize(t.maxValue)}if(this.bucketCount===t.bucketCount&&this.subBucketCount===t.subBucketCount&&this.unitMagnitude===t.unitMagnitude){let e=0;for(let r=0;r<t.countsArrayLength;r++){const n=t.getCountAtIndex(r);n>0&&(this.addToCountAtIndex(r,n),e+=n)}this.setTotalCount(this.totalCount+e),this.updatedMaxValue(max$2(this.maxValue,t.maxValue)),this.updateMinNonZeroValue(min(this.minNonZeroValue,t.minNonZeroValue))}else{const e=t.countsArrayIndex(t.maxValue);let r=t.getCountAtIndex(e);this.recordCountAtValue(r,t.valueFromIndex(e));for(let n=0;n<e;n++)r=t.getCountAtIndex(n),r>0&&this.recordCountAtValue(r,t.valueFromIndex(n))}this.startTimeStampMsec=min(this.startTimeStampMsec,t.startTimeStampMsec),this.endTimeStampMsec=max$2(this.endTimeStampMsec,t.endTimeStampMsec)}getCountAtValue(t){const e=min(max$2(0,this.countsArrayIndex(t)),this.countsArrayLength-1);return this.getCountAtIndex(e)}subtract(t){const e=this.valueFromIndex(this.countsArrayLength-1);if(!(t instanceof JsHistogram))throw new Error("Cannot subtract a WASM histogram to a regular JS histogram");if(e<t.maxValue){if(!this.autoResize)throw new Error("The other histogram includes values that do not fit in this histogram's range.");this.resize(t.maxValue)}if(this.bucketCount===t.bucketCount&&this.subBucketCount===t.subBucketCount&&this.unitMagnitude===t.unitMagnitude){let e=0;for(let r=0;r<t.countsArrayLength;r++){const n=t.getCountAtIndex(r);n>0&&(this.addToCountAtIndex(r,-n),e+=n)}this.setTotalCount(this.totalCount-e)}else for(let e=0;e<t.countsArrayLength;e++){const r=t.getCountAtIndex(e);if(r>0){const n=t.valueFromIndex(e);if(this.getCountAtValue(n)<r)throw new Error("otherHistogram count ("+r+") at value "+n+" is larger than this one's ("+this.getCountAtValue(n)+")");this.recordCountAtValue(-r,n)}}(this.getCountAtValue(this.maxValue)<=0||this.getCountAtValue(this.minNonZeroValue)<=0)&&this.establishInternalTackingValues()}establishInternalTackingValues(t=this.countsArrayLength){this.maxValue=0,this.minNonZeroValue=Number.MAX_VALUE;let e=-1,r=-1,n=0;for(let o=0;o<t;o++){const t=this.getCountAtIndex(o);t>0&&(n+=t,e=o,-1==r&&0!=o&&(r=o))}e>=0&&this.updatedMaxValue(this.highestEquivalentValue(this.valueFromIndex(e))),r>=0&&this.updateMinNonZeroValue(this.valueFromIndex(r)),this.setTotalCount(n)}reset(){this.clearCounts(),this.setTotalCount(0),this.startTimeStampMsec=0,this.endTimeStampMsec=0,this.tag=NO_TAG,this.maxValue=0,this.minNonZeroValue=Number.MAX_SAFE_INTEGER}destroy(){}}
/*! *****************************************************************************
  Copyright (c) Microsoft Corporation.

  Permission to use, copy, modify, and/or distribute this software for any
  purpose with or without fee is hereby granted.

  THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
  REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
  AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
  INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
  LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
  OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
  PERFORMANCE OF THIS SOFTWARE.
  ***************************************************************************** */function __awaiter(t,e,r,n){return new(r||(r=Promise))((function(o,i){function s(t){try{u(n.next(t))}catch(t){i(t)}}function a(t){try{u(n.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(s,a)}u((n=n.apply(t,e||[])).next())}))}const BINARY="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";for(var toByteArray_1=toByteArray,fromByteArray_1=fromByteArray,lookup=[],revLookup=[],Arr="undefined"!=typeof Uint8Array?Uint8Array:Array,code="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",i=0,len=code.length;i<len;++i)lookup[i]=code[i],revLookup[code.charCodeAt(i)]=i;function getLens(t){var e=t.length;if(e%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var r=t.indexOf("=");return-1===r&&(r=e),[r,r===e?0:4-r%4]}function _byteLength(t,e,r){return 3*(e+r)/4-r}function toByteArray(t){var e,r,n=getLens(t),o=n[0],i=n[1],s=new Arr(_byteLength(t,o,i)),a=0,u=i>0?o-4:o;for(r=0;r<u;r+=4)e=revLookup[t.charCodeAt(r)]<<18|revLookup[t.charCodeAt(r+1)]<<12|revLookup[t.charCodeAt(r+2)]<<6|revLookup[t.charCodeAt(r+3)],s[a++]=e>>16&255,s[a++]=e>>8&255,s[a++]=255&e;return 2===i&&(e=revLookup[t.charCodeAt(r)]<<2|revLookup[t.charCodeAt(r+1)]>>4,s[a++]=255&e),1===i&&(e=revLookup[t.charCodeAt(r)]<<10|revLookup[t.charCodeAt(r+1)]<<4|revLookup[t.charCodeAt(r+2)]>>2,s[a++]=e>>8&255,s[a++]=255&e),s}function tripletToBase64(t){return lookup[t>>18&63]+lookup[t>>12&63]+lookup[t>>6&63]+lookup[63&t]}function encodeChunk(t,e,r){for(var n,o=[],i=e;i<r;i+=3)n=(t[i]<<16&16711680)+(t[i+1]<<8&65280)+(255&t[i+2]),o.push(tripletToBase64(n));return o.join("")}function fromByteArray(t){for(var e,r=t.length,n=r%3,o=[],i=0,s=r-n;i<s;i+=16383)o.push(encodeChunk(t,i,i+16383>s?s:i+16383));return 1===n?(e=t[r-1],o.push(lookup[e>>2]+lookup[e<<4&63]+"==")):2===n&&(e=(t[r-2]<<8)+t[r-1],o.push(lookup[e>>10]+lookup[e>>4&63]+lookup[e<<2&63]+"=")),o.join("")}revLookup["-".charCodeAt(0)]=62,revLookup["_".charCodeAt(0)]=63;const ID_OFFSET=-8,SIZE_OFFSET=-4,ARRAYBUFFER_ID=0,STRING_ID=1,ARRAYBUFFERVIEW=1,ARRAY=2,STATICARRAY=4,VAL_ALIGN_OFFSET=6,VAL_SIGNED=2048,VAL_FLOAT=4096,VAL_MANAGED=16384,ARRAYBUFFERVIEW_BUFFER_OFFSET=0,ARRAYBUFFERVIEW_DATASTART_OFFSET=4,ARRAYBUFFERVIEW_BYTELENGTH_OFFSET=8,ARRAYBUFFERVIEW_SIZE=12,ARRAY_LENGTH_OFFSET=12,ARRAY_SIZE=16,E_NO_EXPORT_TABLE="Operation requires compiling with --exportTable",E_NO_EXPORT_RUNTIME="Operation requires compiling with --exportRuntime",F_NO_EXPORT_RUNTIME=()=>{throw Error(E_NO_EXPORT_RUNTIME)},BIGINT="undefined"!=typeof BigUint64Array,THIS=Symbol(),STRING_SMALLSIZE=192,STRING_CHUNKSIZE=1024,utf16=new TextDecoder("utf-16le",{fatal:!0});function getStringImpl(t,e){let r=new Uint32Array(t)[e+SIZE_OFFSET>>>2]>>>1;const n=new Uint16Array(t,e,r);if(r<=STRING_SMALLSIZE)return String.fromCharCode(...n);try{return utf16.decode(n)}catch{let t="",e=0;for(;r-e>STRING_CHUNKSIZE;)t+=String.fromCharCode(...n.subarray(e,e+=STRING_CHUNKSIZE));return t+String.fromCharCode(...n.subarray(e))}}function preInstantiate(t){const e={};function r(t,e){return t?getStringImpl(t.buffer,e):"<yet unknown>"}const n=t.env=t.env||{};return n.abort=n.abort||function(t,o,i,s){const a=e.memory||n.memory;throw Error(`abort: ${r(a,t)} at ${r(a,o)}:${i}:${s}`)},n.trace=n.trace||function(t,o,...i){const s=e.memory||n.memory;console.log(`trace: ${r(s,t)}${o?" ":""}${i.slice(0,o).join(", ")}`)},n.seed=n.seed||Date.now,t.Math=t.Math||Math,t.Date=t.Date||Date,e}function postInstantiate(t,e){const r=e.exports,n=r.memory,o=r.table,i=r.__new||F_NO_EXPORT_RUNTIME,s=r.__pin||F_NO_EXPORT_RUNTIME,a=r.__unpin||F_NO_EXPORT_RUNTIME,u=r.__collect||F_NO_EXPORT_RUNTIME,l=r.__rtti_base,h=l?t=>t[l>>>2]:F_NO_EXPORT_RUNTIME;function c(t){const e=new Uint32Array(n.buffer);if((t>>>=0)>=h(e))throw Error("invalid id: "+t);return e[(l+4>>>2)+(t<<1)+1]}function d(t){const e=function(t){const e=new Uint32Array(n.buffer);if((t>>>=0)>=h(e))throw Error("invalid id: "+t);return e[(l+4>>>2)+(t<<1)]}(t);if(!(e&(ARRAYBUFFERVIEW|ARRAY|STATICARRAY)))throw Error(`not an array: ${t}, flags=${e}`);return e}function g(t){return 31-Math.clz32(t>>>VAL_ALIGN_OFFSET&31)}function m(t,e,r){const o=n.buffer;if(r)switch(t){case 2:return new Float32Array(o);case 3:return new Float64Array(o)}else switch(t){case 0:return new(e?Int8Array:Uint8Array)(o);case 1:return new(e?Int16Array:Uint16Array)(o);case 2:return new(e?Int32Array:Uint32Array)(o);case 3:return new(e?BigInt64Array:BigUint64Array)(o)}throw Error("unsupported align: "+t)}function f(t){const e=new Uint32Array(n.buffer),r=d(e[t+ID_OFFSET>>>2]),o=g(r);let i=r&STATICARRAY?t:e[t+ARRAYBUFFERVIEW_DATASTART_OFFSET>>>2];const s=r&ARRAY?e[t+ARRAY_LENGTH_OFFSET>>>2]:e[i+SIZE_OFFSET>>>2]>>>o;return m(o,r&VAL_SIGNED,r&VAL_FLOAT).subarray(i>>>=o,i+s)}function p(t,e,r){return new t(I(t,e,r))}function I(t,e,r){const o=n.buffer,i=new Uint32Array(o);return new t(o,i[r+ARRAYBUFFERVIEW_DATASTART_OFFSET>>>2],i[r+ARRAYBUFFERVIEW_BYTELENGTH_OFFSET>>>2]>>>e)}function A(e,r,n){t["__get"+r]=p.bind(null,e,n),t[`__get${r}View`]=I.bind(null,e,n)}return t.__new=i,t.__pin=s,t.__unpin=a,t.__collect=u,t.__newString=function(t){if(null==t)return 0;const e=t.length,r=i(e<<1,STRING_ID),o=new Uint16Array(n.buffer);for(var s=0,a=r>>>1;s<e;++s)o[a+s]=t.charCodeAt(s);return r},t.__newArrayBuffer=function(t){if(null==t)return 0;const e=new Uint8Array(t),r=i(e.length,ARRAYBUFFER_ID);return new Uint8Array(n.buffer).set(e,r),r},t.__getString=function(t){if(!t)return null;const e=n.buffer;if(new Uint32Array(e)[t+ID_OFFSET>>>2]!==STRING_ID)throw Error("not a string: "+t);return getStringImpl(e,t)},t.__newArray=function(t,e=0){const r=e,o=d(t),u=g(o),l="number"!=typeof r,h=l?r.length:r,c=i(h<<u,o&STATICARRAY?t:ARRAYBUFFER_ID);let f;if(o&STATICARRAY)f=c;else{s(c);const e=i(o&ARRAY?ARRAY_SIZE:ARRAYBUFFERVIEW_SIZE,t);a(c);const r=new Uint32Array(n.buffer);r[e+ARRAYBUFFERVIEW_BUFFER_OFFSET>>>2]=c,r[e+ARRAYBUFFERVIEW_DATASTART_OFFSET>>>2]=c,r[e+ARRAYBUFFERVIEW_BYTELENGTH_OFFSET>>>2]=h<<u,o&ARRAY&&(r[e+ARRAY_LENGTH_OFFSET>>>2]=h),f=e}if(l){const t=m(u,o&VAL_SIGNED,o&VAL_FLOAT),e=c>>>u;if(o&VAL_MANAGED)for(let n=0;n<h;++n)t[e+n]=r[n];else t.set(r,e)}return f},t.__getArrayView=f,t.__getArray=function(t){const e=f(t),r=e.length,n=new Array(r);for(let t=0;t<r;t++)n[t]=e[t];return n},t.__getArrayBuffer=function(t){const e=n.buffer,r=new Uint32Array(e)[t+SIZE_OFFSET>>>2];return e.slice(t,t+r)},t.__getFunction=function(t){if(!o)throw Error(E_NO_EXPORT_TABLE);const e=new Uint32Array(n.buffer)[t>>>2];return o.get(e)},[Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array].forEach(t=>{A(t,t.name,31-Math.clz32(t.BYTES_PER_ELEMENT))}),BIGINT&&[BigUint64Array,BigInt64Array].forEach(t=>{A(t,t.name.slice(3),3)}),t.__instanceof=function(t,e){const r=new Uint32Array(n.buffer);let o=r[t+ID_OFFSET>>>2];if(o<=h(r))do{if(o==e)return!0;o=c(o)}while(o);return!1},t.memory=t.memory||n,t.table=t.table||o,demangle(r,t)}function isResponse(t){return"undefined"!=typeof Response&&t instanceof Response}function isModule(t){return t instanceof WebAssembly.Module}async function instantiate(t,e={}){if(isResponse(t=await t))return instantiateStreaming(t,e);const r=isModule(t)?t:await WebAssembly.compile(t),n=preInstantiate(e),o=await WebAssembly.instantiate(r,e);return{module:r,instance:o,exports:postInstantiate(n,o)}}function instantiateSync(t,e={}){const r=isModule(t)?t:new WebAssembly.Module(t),n=preInstantiate(e),o=new WebAssembly.Instance(r,e);return{module:r,instance:o,exports:postInstantiate(n,o)}}async function instantiateStreaming(t,e={}){if(!WebAssembly.instantiateStreaming)return instantiate(isResponse(t=await t)?t.arrayBuffer():t,e);const r=preInstantiate(e),n=await WebAssembly.instantiateStreaming(t,e),o=postInstantiate(r,n.instance);return{...n,exports:o}}function demangle(t,e={}){const r=t.__argumentsLength?e=>{t.__argumentsLength.value=e}:t.__setArgumentsLength||t.__setargc||(()=>{});for(let n of Object.keys(t)){const o=t[n];let i=n.split("."),s=e;for(;i.length>1;){let t=i.shift();Object.hasOwn(s,t)||(s[t]={}),s=s[t]}let a=i[0],u=a.indexOf("#");if(u>=0){const e=a.substring(0,u),i=s[e];if(void 0===i||!i.prototype){const t=function(...e){return t.wrap(t.prototype.constructor(0,...e))};t.prototype={valueOf(){return this[THIS]}},t.wrap=function(e){return Object.create(t.prototype,{[THIS]:{value:e,writable:!1}})},i&&Object.getOwnPropertyNames(i).forEach(e=>Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(i,e))),s[e]=t}if(a=a.substring(u+1),s=s[e].prototype,/^(get|set):/.test(a)){if(!Object.hasOwn(s,a=a.substring(4))){let e=t[n.replace("set:","get:")],r=t[n.replace("get:","set:")];Object.defineProperty(s,a,{get(){return e(this[THIS])},set(t){r(this[THIS],t)},enumerable:!0})}}else"constructor"===a?(s[a]=function(...t){return r(t.length),o(...t)}).original=o:(s[a]=function(...t){return r(t.length),o(this[THIS],...t)}).original=o}else/^(get|set):/.test(a)?Object.hasOwn(s,a=a.substring(4))||Object.defineProperty(s,a,{get:t[n.replace("set:","get:")],set:t[n.replace("get:","set:")],enumerable:!0}):"function"==typeof o&&o!==r?(s[a]=(...t)=>(r(t.length),o(...t))).original=o:s[a]=o}return e}Object.hasOwn=Object.hasOwn||function(t,e){return Object.prototype.hasOwnProperty.call(t,e)};const isNode="undefined"!=typeof process&&process.version,isWorker="function"==typeof importScripts,webAssemblyAvailable=(()=>{let t=!1;return t=isNode?"WebAssembly"in global:isWorker||"WebAssembly"in window,t})();let wasm=void 0;const initWebAssembly=()=>__awaiter(void 0,void 0,void 0,(function*(){if(!webAssemblyAvailable)throw new Error("WebAssembly not available here!");if(!wasm)return instantiate(pako__namespace.inflate(toByteArray_1(BINARY))).then(t=>wasm=t.exports||t)})),initWebAssemblySync=()=>{if(wasm)return;const t=instantiateSync(pako__namespace.inflate(toByteArray_1(BINARY)));wasm=t.exports||t},webAssemblyReady=()=>!!wasm,defaultRequest$1={bitBucketSize:32,autoResize:!0,lowestDiscernibleValue:1,highestTrackableValue:2,numberOfSignificantValueDigits:3},remoteHistogramClassFor=t=>"packed"===t?"PackedHistogram":"Histogram"+t,destroyedWasmHistogram=new Proxy({},{get:function(t,e){throw new Error("Cannot use a destroyed histogram")}});class WasmHistogram{constructor(t,e){this._wasmHistogram=t,this._remoteHistogramClass=e,this.tag=NO_TAG,wasm.__pin(this._wasmHistogram)}static build(t=defaultRequest$1){if(!webAssemblyReady())throw new Error("WebAssembly is not ready yet!");const e=Object.assign({},defaultRequest$1,t),r=remoteHistogramClassFor(e.bitBucketSize);return new WasmHistogram(new wasm[r](e.lowestDiscernibleValue,e.highestTrackableValue,e.numberOfSignificantValueDigits,e.autoResize),r)}static decode(t,e=32,r=0){if(!webAssemblyReady())throw new Error("WebAssembly is not ready yet!");const n=remoteHistogramClassFor(e),o="decode"+n,i=wasm.__newArray(wasm.UINT8ARRAY_ID,t);return new WasmHistogram(wasm[n].wrap(wasm[o](i,r)),n)}get numberOfSignificantValueDigits(){return this._wasmHistogram.numberOfSignificantValueDigits}get autoResize(){return!!this._wasmHistogram.autoResize}set autoResize(t){this._wasmHistogram.autoResize=t}get highestTrackableValue(){return this._wasmHistogram.highestTrackableValue}set highestTrackableValue(t){this._wasmHistogram.highestTrackableValue=t}get startTimeStampMsec(){return this._wasmHistogram.startTimeStampMsec}set startTimeStampMsec(t){this._wasmHistogram.startTimeStampMsec=t}get endTimeStampMsec(){return this._wasmHistogram.endTimeStampMsec}set endTimeStampMsec(t){this._wasmHistogram.endTimeStampMsec=t}get totalCount(){return this._wasmHistogram.totalCount}get stdDeviation(){return this._wasmHistogram.stdDeviation}get mean(){return this._wasmHistogram.mean}get estimatedFootprintInBytes(){return 192+this._wasmHistogram.estimatedFootprintInBytes}get minNonZeroValue(){return this._wasmHistogram.minNonZeroValue}get maxValue(){return this._wasmHistogram.maxValue}recordValue(t){this._wasmHistogram.recordValue(t)}recordValueWithCount(t,e){this._wasmHistogram.recordValueWithCount(t,e)}recordValueWithExpectedInterval(t,e){this._wasmHistogram.recordValueWithExpectedInterval(t,e)}getValueAtPercentile(t){return this._wasmHistogram.getValueAtPercentile(t)}outputPercentileDistribution(t=5,e=1,r=!1){if(r)throw new Error("CSV output not supported by wasm histograms");return wasm.__getString(this._wasmHistogram.outputPercentileDistribution(t,e))}isDestroyed(){return this._wasmHistogram===destroyedWasmHistogram}get summary(){return toSummary(this)}toJSON(){return this.summary}toString(){return this.isDestroyed()?"Destroyed WASM histogram":`WASM ${this._remoteHistogramClass} ${JSON.stringify(this,null,2)}`}inspect(){return this.toString()}[Symbol.for("nodejs.util.inspect.custom")](){return this.toString()}addWhileCorrectingForCoordinatedOmission(t,e){this._wasmHistogram.addWhileCorrectingForCoordinatedOmission(t,e)}copyCorrectedForCoordinatedOmission(t){return new WasmHistogram(wasm[this._remoteHistogramClass].wrap(this._wasmHistogram.copyCorrectedForCoordinatedOmission(t)),this._remoteHistogramClass)}add(t){if(!(t instanceof WasmHistogram))throw new Error("Cannot add a regular JS histogram to a WASM histogram");this._wasmHistogram["add"+t._remoteHistogramClass](t._wasmHistogram)}subtract(t){if(!(t instanceof WasmHistogram))throw new Error("Cannot subtract a regular JS histogram to a WASM histogram");this._wasmHistogram["subtract"+t._remoteHistogramClass](t._wasmHistogram)}encode(){const t=wasm.__pin(this._wasmHistogram.encode()),e=wasm.__getUint8Array(t);return wasm.__unpin(t),e}reset(){this.tag=NO_TAG,this._wasmHistogram.reset()}destroy(){wasm.__unpin(this._wasmHistogram),this._wasmHistogram=destroyedWasmHistogram}}const MINIMUM_INITIAL_PACKED_ARRAY_CAPACITY=16,MAX_SUPPORTED_PACKED_COUNTS_ARRAY_LENGTH=Math.pow(2,13)-1,SET_0_START_INDEX=0,NUMBER_OF_SETS$1=8,LEAF_LEVEL_SHIFT=3,NON_LEAF_ENTRY_SLOT_INDICATORS_OFFSET=0,NON_LEAF_ENTRY_HEADER_SIZE_IN_SHORTS=1,PACKED_ARRAY_GROWTH_INCREMENT=16,PACKED_ARRAY_GROWTH_FRACTION_POW2=4,{pow:pow$2,ceil:ceil,log2:log2,max:max$1}=Math,bitCount=t=>{for(var e=0;0!==t;)e+=bitCount32(0|t),t/=4294967296;return e},bitCount32=t=>16843009*((t=(858993459&(t-=t>>1&1431655765))+(t>>2&858993459))+(t>>4)&252645135)>>24;class PackedArrayContext{constructor(t,e){this.populatedShortLength=0,this.topLevelShift=Number.MAX_VALUE,this.physicalLength=Math.max(e,MINIMUM_INITIAL_PACKED_ARRAY_CAPACITY),this.isPacked=this.physicalLength<=MAX_SUPPORTED_PACKED_COUNTS_ARRAY_LENGTH,this.isPacked||(this.physicalLength=t),this.array=new ArrayBuffer(8*this.physicalLength),this.initArrayViews(this.array),this.init(t)}initArrayViews(t){this.byteArray=new Uint8Array(t),this.shortArray=new Uint16Array(t),this.longArray=new Float64Array(t)}init(t){if(this.isPacked){this.populatedShortLength=SET_0_START_INDEX+8;for(let t=0;t<NUMBER_OF_SETS$1;t++)this.setAtShortIndex(SET_0_START_INDEX+t,0);this.setVirtualLength(t)}else this.virtualLength=t}clear(){this.byteArray.fill(0),this.init(this.virtualLength)}copyAndIncreaseSize(t,e){const r=new PackedArrayContext(e,t);return this.isPacked&&r.populateEquivalentEntriesWithEntriesFromOther(this),r}getPopulatedShortLength(){return this.populatedShortLength}getPopulatedLongLength(){return this.getPopulatedShortLength()+3>>2}setAtByteIndex(t,e){this.byteArray[t]=e}getAtByteIndex(t){return this.byteArray[t]}addAtByteIndex(t,e){const r=this.byteArray[t]+e;return this.byteArray[t]=r,r}setPopulatedLongLength(t){this.populatedShortLength=t<<2}getVirtualLength(){return this.virtualLength}length(){return this.physicalLength}setAtShortIndex(t,e){this.shortArray[t]=e}setAtLongIndex(t,e){this.longArray[t]=e}getAtShortIndex(t){return this.shortArray[t]}getIndexAtShortIndex(t){return this.shortArray[t]}setPackedSlotIndicators(t,e){this.setAtShortIndex(t+NON_LEAF_ENTRY_SLOT_INDICATORS_OFFSET,e)}getPackedSlotIndicators(t){return 65535&this.shortArray[t+NON_LEAF_ENTRY_SLOT_INDICATORS_OFFSET]}getIndexAtEntrySlot(t,e){return this.getAtShortIndex(t+NON_LEAF_ENTRY_HEADER_SIZE_IN_SHORTS+e)}setIndexAtEntrySlot(t,e,r){this.setAtShortIndex(t+NON_LEAF_ENTRY_HEADER_SIZE_IN_SHORTS+e,r)}expandArrayIfNeeded(t){const e=this.length();if(e<this.getPopulatedLongLength()+t){const r=max$1(t,PACKED_ARRAY_GROWTH_INCREMENT,this.getPopulatedLongLength()>>PACKED_ARRAY_GROWTH_FRACTION_POW2);this.resizeArray(e+r)}}newEntry(t){const e=this.populatedShortLength;this.expandArrayIfNeeded(1+(t>>2)),this.populatedShortLength=e+t;for(let r=0;r<t;r++)this.setAtShortIndex(e+r,-1);return e}newLeafEntry(){let t;return t=this.getPopulatedLongLength(),this.expandArrayIfNeeded(1),this.setPopulatedLongLength(t+1),this.setAtLongIndex(t,0),t}consolidateEntry(t,e){const r=this.getPackedSlotIndicators(e),n=this.getPackedSlotIndicators(t),o=bitCount(n&(n^r)-1),i=bitCount(n);let s=0;for(let r=0;r<i;r++)if(r!==o){const n=this.getIndexAtEntrySlot(e,s);0!==n&&this.setIndexAtEntrySlot(t,r,n),s++}}expandEntry(t,e,r,n,o){let i=65535&this.getAtShortIndex(t);i|=n;const s=bitCount(i);if(r>=s)throw new Error("inserted slot index is out of range given provided masks");const a=s+NON_LEAF_ENTRY_HEADER_SIZE_IN_SHORTS;let u=0;o?u=this.newLeafEntry():(u=this.newEntry(NON_LEAF_ENTRY_HEADER_SIZE_IN_SHORTS),this.setPackedSlotIndicators(u,0));const l=u,h=this.newEntry(a);return this.setPackedSlotIndicators(h,i),this.setIndexAtEntrySlot(h,r,l),this.setAtShortIndex(e,h),this.consolidateEntry(h,t),h}getRootEntry(t,e=!1){const r=SET_0_START_INDEX+t;let n=this.getIndexAtShortIndex(r);if(0==n){if(!e)return 0;n=this.newEntry(NON_LEAF_ENTRY_HEADER_SIZE_IN_SHORTS),this.setPackedSlotIndicators(n,0),this.setAtShortIndex(r,n)}return n}getPackedIndex(t,e,r){if(e>=this.virtualLength)throw new Error(`Attempting access at index ${e}, beyond virtualLength ${this.virtualLength}`);let n=SET_0_START_INDEX+t,o=this.getRootEntry(t,r);if(0==o)return-1;for(let t=this.topLevelShift;t>=LEAF_LEVEL_SHIFT;t-=4){const i=t===LEAF_LEVEL_SHIFT,s=this.getPackedSlotIndicators(o),a=1<<(e/pow$2(2,t)&15),u=bitCount(s&a-1);if(0==(s&a)){if(!r)return-1;o=this.expandEntry(o,n,u,a,i)}n=o+NON_LEAF_ENTRY_HEADER_SIZE_IN_SHORTS+u,o=this.getIndexAtShortIndex(n)}return(o<<3)+(7&e)}determineTopLevelShiftForVirtualLength(t){const e=ceil(log2(t));let r=4*ceil((e-3)/4);r=max$1(r,8);return r-4+3}setVirtualLength(t){if(!this.isPacked)throw new Error("Should never be adjusting the virtual size of a non-packed context");this.topLevelShift=this.determineTopLevelShiftForVirtualLength(t),this.virtualLength=t}getTopLevelShift(){return this.topLevelShift}resizeArray(t){const e=new Uint8Array(8*t);e.set(this.byteArray),this.array=e.buffer,this.initArrayViews(this.array),this.physicalLength=t}populateEquivalentEntriesWithEntriesFromOther(t){if(this.virtualLength<t.getVirtualLength())throw new Error("Cannot populate array of smaller virtual length");for(let e=0;e<NUMBER_OF_SETS$1;e++){const r=t.getAtShortIndex(SET_0_START_INDEX+e);if(0==r)continue;let n=SET_0_START_INDEX+e;for(let e=this.topLevelShift;e>t.topLevelShift;e-=4){const t=NON_LEAF_ENTRY_HEADER_SIZE_IN_SHORTS+1,e=this.newEntry(t);this.setAtShortIndex(n,e),this.setPackedSlotIndicators(e,1),n=e+NON_LEAF_ENTRY_HEADER_SIZE_IN_SHORTS}this.copyEntriesAtLevelFromOther(t,r,n,t.topLevelShift)}}copyEntriesAtLevelFromOther(t,e,r,n){const o=n==LEAF_LEVEL_SHIFT,i=t.getPackedSlotIndicators(e),s=bitCount(i),a=NON_LEAF_ENTRY_HEADER_SIZE_IN_SHORTS+s,u=this.newEntry(a);this.setAtShortIndex(r,u),this.setAtShortIndex(u+NON_LEAF_ENTRY_SLOT_INDICATORS_OFFSET,i);for(let r=0;r<s;r++)if(o){const n=this.newLeafEntry();this.setIndexAtEntrySlot(u,r,n);const o=t.getIndexAtEntrySlot(e,r);this.longArray[n]=t.longArray[o]}else{const o=t.getIndexAtEntrySlot(e,r);this.copyEntriesAtLevelFromOther(t,o,u+NON_LEAF_ENTRY_HEADER_SIZE_IN_SHORTS+r,n-4)}}getAtUnpackedIndex(t){return this.longArray[t]}setAtUnpackedIndex(t,e){this.longArray[t]=e}lazysetAtUnpackedIndex(t,e){this.longArray[t]=e}incrementAndGetAtUnpackedIndex(t){return this.longArray[t]++,this.longArray[t]}addAndGetAtUnpackedIndex(t,e){return this.longArray[t]+=e,this.longArray[t]}nonLeafEntryToString(t,e,r){let n="";for(let t=0;t<r;t++)n+="  ";try{const o=this.getPackedSlotIndicators(t);n+=`slotIndiators: 0x${toHex(o)}, prevVersionIndex: 0: [ `;const i=bitCount(o);for(let e=0;e<i;e++)n+=this.getIndexAtEntrySlot(t,e),e<i-1&&(n+=", ");n+=` ] (indexShift = ${e})\n`;const s=e==LEAF_LEVEL_SHIFT;for(let o=0;o<i;o++){const i=this.getIndexAtEntrySlot(t,o);n+=s?this.leafEntryToString(i,r+4):this.nonLeafEntryToString(i,e-4,r+4)}}catch(r){n+=`Exception thrown at nonLeafEnty at index ${t} with indexShift ${e}\n`}return n}leafEntryToString(t,e){let r="";for(let t=0;t<e;t++)r+="  ";try{r+="Leaf bytes : ";for(let e=0;e<8;e++)r+=`0x${toHex(this.byteArray[8*t+e])} `;r+="\n"}catch(e){r+=`Exception thrown at leafEnty at index ${t}\n`}return r}toString(){let t="PackedArrayContext:\n";if(!this.isPacked)return t+"Context is unpacked:\n";for(let e=0;e<NUMBER_OF_SETS$1;e++)try{const r=SET_0_START_INDEX+e,n=this.getIndexAtShortIndex(r);if(t+=`Set ${e}: root = ${n} \n`,0==n)continue;t+=this.nonLeafEntryToString(n,this.topLevelShift,4)}catch(r){t+=`Exception thrown in set ${e}%d\n`}return t}}const toHex=t=>Number(t).toString(16).padStart(2,"0"),NUMBER_OF_SETS=8,{pow:pow$1,floor:floor$1}=Math;class PackedArray{constructor(t,e=MINIMUM_INITIAL_PACKED_ARRAY_CAPACITY){this.arrayContext=new PackedArrayContext(t,e)}setVirtualLength(t){if(t<this.length())throw new Error("Cannot set virtual length, as requested length "+t+" is smaller than the current virtual length "+this.length());const e=this.arrayContext;e.isPacked&&e.determineTopLevelShiftForVirtualLength(t)==e.getTopLevelShift()?e.setVirtualLength(t):this.arrayContext=e.copyAndIncreaseSize(this.getPhysicalLength(),t)}get(t){let e=0;for(let r=0;r<NUMBER_OF_SETS;r++){let n=0;if(!this.arrayContext.isPacked)return this.arrayContext.getAtUnpackedIndex(t);const o=this.arrayContext.getPackedIndex(r,t,!1);if(o<0)return e;n=this.arrayContext.getAtByteIndex(o)*pow$1(2,r<<3),e+=n}return e}increment(t){this.add(t,1)}safeGetPackedIndexgetPackedIndex(t,e){return this.arrayContext.getPackedIndex(t,e,!0)}add(t,e){let r=e;for(let n=0,o=0;n<NUMBER_OF_SETS;n++,o+=8){if(!this.arrayContext.isPacked)return void this.arrayContext.addAndGetAtUnpackedIndex(t,e);const o=this.safeGetPackedIndexgetPackedIndex(n,t),i=255&r,s=this.arrayContext.addAtByteIndex(o,i);if(r-=i,r/=pow$1(2,8),r+=floor$1(s/pow$1(2,8)),0==r)return}}set(t,e){let r=0,n=e;for(let o=0;o<NUMBER_OF_SETS;o++){if(!this.arrayContext.isPacked)return void this.arrayContext.setAtUnpackedIndex(t,e);if(0==n){if(this.arrayContext.getPackedIndex(o,t,!1)<0)return}const i=this.arrayContext.getPackedIndex(o,t,!0),s=255&n;n=floor$1(n/pow$1(2,8)),o<r||(this.arrayContext.setAtByteIndex(i,s),r++)}}getPhysicalLength(){return this.arrayContext.physicalLength}length(){return this.arrayContext.getVirtualLength()}clear(){this.arrayContext.clear()}toString(){let t="PackedArray:\n";return t+=this.arrayContext.toString(),t}}class PackedHistogram extends JsHistogram{constructor(t,e,r){super(t,e,r),this._totalCount=0,this.packedCounts=new PackedArray(this.countsArrayLength)}clearCounts(){this.packedCounts.clear()}incrementCountAtIndex(t){this.packedCounts.increment(t)}addToCountAtIndex(t,e){this.packedCounts.add(t,e)}setCountAtIndex(t,e){this.packedCounts.set(t,e)}resize(t){this.establishSize(t),this.packedCounts.setVirtualLength(this.countsArrayLength)}getCountAtIndex(t){return this.packedCounts.get(t)}_getEstimatedFootprintInBytes(){return 192+8*this.packedCounts.getPhysicalLength()}copyCorrectedForCoordinatedOmission(t){const e=new PackedHistogram(this.lowestDiscernibleValue,this.highestTrackableValue,this.numberOfSignificantValueDigits);return e.addWhileCorrectingForCoordinatedOmission(this,t),e}toString(){return"PackedHistogram "+JSON.stringify(this,null,2)}}class TypedArrayHistogram extends JsHistogram{constructor(t,e,r,n){super(e,r,n),this.arrayCtr=t,this._totalCount=0,this._counts=new t(this.countsArrayLength)}clearCounts(){this._counts.fill(0)}incrementCountAtIndex(t){const e=this._counts[t]+1;if(e<0)throw e+" would overflow short integer count";this._counts[t]=e}addToCountAtIndex(t,e){const r=this._counts[t]+e;if(r<Number.MIN_SAFE_INTEGER||r>Number.MAX_SAFE_INTEGER)throw r+" would overflow integer count";this._counts[t]=r}setCountAtIndex(t,e){if(e<Number.MIN_SAFE_INTEGER||e>Number.MAX_SAFE_INTEGER)throw e+" would overflow integer count";this._counts[t]=e}resize(t){this.establishSize(t);const e=new this.arrayCtr(this.countsArrayLength);e.set(this._counts),this._counts=e}getCountAtIndex(t){return this._counts[t]}_getEstimatedFootprintInBytes(){return 1024+this._counts.BYTES_PER_ELEMENT*this._counts.length}copyCorrectedForCoordinatedOmission(t){const e=new TypedArrayHistogram(this.arrayCtr,this.lowestDiscernibleValue,this.highestTrackableValue,this.numberOfSignificantValueDigits);return e.addWhileCorrectingForCoordinatedOmission(this,t),e}toString(){return`Histogram ${8*this._counts.BYTES_PER_ELEMENT}b ${JSON.stringify(this,null,2)}`}}class Int8Histogram extends TypedArrayHistogram{constructor(t,e,r){super(Uint8Array,t,e,r)}}class Int16Histogram extends TypedArrayHistogram{constructor(t,e,r){super(Uint16Array,t,e,r)}}class Int32Histogram extends TypedArrayHistogram{constructor(t,e,r){super(Uint32Array,t,e,r)}}class Float64Histogram extends TypedArrayHistogram{constructor(t,e,r){super(Float64Array,t,e,r)}}function constructorFromBucketSize(t){switch(t){case"packed":return PackedHistogram;case 8:return Int8Histogram;case 16:return Int16Histogram;case 32:return Int32Histogram;case 64:return Float64Histogram;default:throw new Error("Incorrect parameter bitBucketSize")}}const{pow:pow,floor:floor}=Math,TWO_POW_7=pow(2,7),TWO_POW_14=pow(2,14),TWO_POW_21=pow(2,21),TWO_POW_28=pow(2,28),TWO_POW_35=pow(2,35),TWO_POW_42=pow(2,42),TWO_POW_49=pow(2,49),TWO_POW_56=pow(2,56);class ZigZagEncoding{static encode(t,e){e>=0?e*=2:e=2*-e-1,e<TWO_POW_7?t.put(e):(t.put(128|e),e<TWO_POW_14?t.put(floor(e/TWO_POW_7)):(t.put(128|floor(e/TWO_POW_7)),e<TWO_POW_21?t.put(floor(e/TWO_POW_14)):(t.put(128|floor(e/TWO_POW_14)),e<TWO_POW_28?t.put(floor(e/TWO_POW_21)):(t.put(128|floor(e/TWO_POW_21)),e<TWO_POW_35?t.put(floor(e/TWO_POW_28)):(t.put(128|floor(e/TWO_POW_28)),e<TWO_POW_42?t.put(floor(e/TWO_POW_35)):(t.put(128|floor(e/TWO_POW_35)),e<TWO_POW_49?t.put(floor(e/TWO_POW_42)):(t.put(128|floor(e/TWO_POW_42)),e<TWO_POW_56?t.put(floor(e/TWO_POW_49)):(t.put(floor(e/TWO_POW_49)+128),t.put(floor(e/TWO_POW_56))))))))))}static decode(t){let e=t.get(),r=127&e;return 0!=(128&e)&&(e=t.get(),r+=(127&e)*TWO_POW_7,0!=(128&e)&&(e=t.get(),r+=(127&e)*TWO_POW_14,0!=(128&e)&&(e=t.get(),r+=(127&e)*TWO_POW_21,0!=(128&e)&&(e=t.get(),r+=(127&e)*TWO_POW_28,0!=(128&e)&&(e=t.get(),r+=(127&e)*TWO_POW_35,0!=(128&e)&&(e=t.get(),r+=(127&e)*TWO_POW_42,0!=(128&e)&&(e=t.get(),r+=(127&e)*TWO_POW_49,0!=(128&e)&&(e=t.get(),r+=(127&e)*TWO_POW_56)))))))),r%2==0?r/=2:r=-(r+1)/2,r}}const{max:max}=Math,V2EncodingCookieBase=478450435,V2CompressedEncodingCookieBase$1=478450436,V2maxWordSizeInBytes=9,encodingCookie=16|V2EncodingCookieBase,compressedEncodingCookie$1=16|V2CompressedEncodingCookieBase$1;function fillBufferFromCountsArray(t,e){const r=t.countsArrayIndex(t.maxValue)+1;let n=0;for(;n<r;){const o=t.getCountAtIndex(n++);if(o<0)throw new Error("Cannot encode histogram containing negative counts ("+o+") at index "+n+", corresponding the value range ["+t.lowestEquivalentValue(t.valueFromIndex(n))+","+t.nextNonEquivalentValue(t.valueFromIndex(n))+")");let i=0;if(0==o)for(i=1;n<r&&0==t.getCountAtIndex(n);)i++,n++;i>1?ZigZagEncoding.encode(e,-i):ZigZagEncoding.encode(e,o)}}function encodeIntoByteBuffer(t,e){const r=e.position;e.putInt32(encodingCookie),e.putInt32(0),e.putInt32(1),e.putInt32(t.numberOfSignificantValueDigits),e.putInt64(t.lowestDiscernibleValue),e.putInt64(t.highestTrackableValue),e.putInt64(1);const n=e.position;fillBufferFromCountsArray(t,e);const o=e.position;return e.position=r+4,e.putInt32(o-n),e.position=o,o-r}function fillCountsArrayFromSourceBuffer(t,e,r,n){if(2!=n&&4!=n&&8!=n&&n!=V2maxWordSizeInBytes)throw new Error("word size must be 2, 4, 8, or V2maxWordSizeInBytes ("+V2maxWordSizeInBytes+") bytes");let o=0;const i=e.position+r;for(;e.position<i;){let r=0,n=ZigZagEncoding.decode(e);n<0?(r=-n,o+=r):t.setCountAtIndex(o++,n)}return o}function getCookieBase(t){return-241&t}function getWordSizeInBytesFromCookie(t){if(getCookieBase(t)==V2EncodingCookieBase||getCookieBase(t)==V2CompressedEncodingCookieBase$1)return V2maxWordSizeInBytes;return 14&(240&t)>>4}function findDeflateFunction(){try{return eval('require("zlib").deflateSync')}catch(t){return pako__namespace?pako__namespace.deflate:()=>{throw new Error("pako library is mandatory for encoding/deconding on the browser side")}}}function findInflateFunction(){try{return eval('require("zlib").inflateSync')}catch(t){return pako__namespace?pako__namespace.inflate:()=>{throw new Error("pako library is mandatory for encoding/deconding on the browser side")}}}const deflate=findDeflateFunction(),inflate=findInflateFunction();function doDecode(t,e=32,r=0){const n=new ByteBuffer(t),o=n.getInt32();let i,s,a,u;if(getCookieBase(o)!==V2EncodingCookieBase)throw new Error("The buffer does not contain a Histogram (no valid V2 encoding cookie found)");if(getWordSizeInBytesFromCookie(o)!=V2maxWordSizeInBytes)throw new Error("The buffer does not contain a Histogram (no valid cookie found)");i=n.getInt32(),n.getInt32(),s=n.getInt32(),a=n.getInt64(),u=n.getInt64(),n.getInt64(),u=max(u,r);const l=new(constructorFromBucketSize(e))(a,u,s),h=fillCountsArrayFromSourceBuffer(l,n,i,V2maxWordSizeInBytes);return l.establishInternalTackingValues(h),l}function doEncodeIntoCompressedBase64(t){const e=t?{level:t}:{},r=ByteBuffer.allocate();r.putInt32(compressedEncodingCookie$1);const n=ByteBuffer.allocate(),o=encodeIntoByteBuffer(this,n),i=n.data.slice(0,o),s=deflate(i,e);return r.putInt32(s.byteLength),r.putArray(s),fromByteArray_1(r.data)}JsHistogram.decode=doDecode,JsHistogram.prototype.encodeIntoCompressedBase64=doEncodeIntoCompressedBase64;const V2CompressedEncodingCookieBase=478450436,compressedEncodingCookie=16|V2CompressedEncodingCookieBase;function decompress(t){const e=new ByteBuffer(t),r=e.position;if((-241&e.getInt32())!==V2CompressedEncodingCookieBase)throw new Error("Encoding not supported, only V2 is supported");const n=e.getInt32();return inflate(e.data.slice(r+8,r+8+n))}const decodeFromCompressedBase64=(t,e=32,r=!1,n=0)=>{const o=decompress(toByteArray_1(t.trim()));return r?WasmHistogram.decode(o,e,n):JsHistogram.decode(o,e,n)};function encodeWasmIntoCompressedBase64(t){const e=t?{level:t}:{},r=ByteBuffer.allocate();r.putInt32(compressedEncodingCookie);const n=this.encode(),o=deflate(n,e);return r.putInt32(o.byteLength),r.putArray(o),fromByteArray_1(r.data)}WasmHistogram.prototype.encodeIntoCompressedBase64=encodeWasmIntoCompressedBase64;const encodeIntoCompressedBase64=(t,e)=>{if(t instanceof WasmHistogram)return t.encodeIntoCompressedBase64(e);if(t instanceof JsHistogram)return t.encodeIntoCompressedBase64(e);throw new Error("Unsupported Histogram implementation")},TAG_PREFIX="Tag=",TAG_PREFIX_LENGTH="Tag=".length;class HistogramLogReader{constructor(t,e=32,r=!1){this.lines=splitLines(t),this.currentLineIndex=0,this.bitBucketSize=e,this.useWebAssembly=r}nextIntervalHistogram(t=0,e=Number.MAX_VALUE){for(;this.currentLineIndex<this.lines.length;){const r=this.lines[this.currentLineIndex];if(this.currentLineIndex++,r.startsWith("#[StartTime:"))this.parseStartTimeFromLine(r);else if(r.startsWith("#[BaseTime:"))this.parseBaseTimeFromLine(r);else if(r.startsWith("#")||r.startsWith('"StartTimestamp"'));else if(r.includes(",")){const n=r.split(","),[o]=n;let i;o.startsWith(TAG_PREFIX)?(i=o.substring(TAG_PREFIX_LENGTH),n.shift()):i=NO_TAG;const[s,a,,u]=n,l=Number.parseFloat(s);if(this.baseTimeSec||(l<this.startTimeSec-31536e3?this.baseTimeSec=this.startTimeSec:this.baseTimeSec=0),e<l)return null;if(l<t)continue;const h=decodeFromCompressedBase64(u,this.bitBucketSize,this.useWebAssembly);h.startTimeStampMsec=1e3*(this.baseTimeSec+l);const c=Number.parseFloat(a);return h.endTimeStampMsec=1e3*(this.baseTimeSec+l+c),h.tag=i,h}}return null}parseStartTimeFromLine(t){this.startTimeSec=Number.parseFloat(t.split(" ")[1])}parseBaseTimeFromLine(t){this.baseTimeSec=Number.parseFloat(t.split(" ")[1])}}const splitLines=t=>t.split(/\r\n|\r|\n/g),shouldIncludeNoTag=t=>t.find(t=>!t.startsWith("#")&&!t.startsWith('"')&&!t.startsWith(TAG_PREFIX)&&t.includes(",")),listTags=t=>{const e=splitLines(t),r=e.filter(t=>t.includes(",")&&t.startsWith(TAG_PREFIX)).map(t=>t.substring(TAG_PREFIX_LENGTH,t.indexOf(","))),n=new Set(r),o=Array.from(n);return shouldIncludeNoTag(e)&&o.unshift("NO TAG"),o},HISTOGRAM_LOG_FORMAT_VERSION="1.3",timeFormatter=floatFormatter(5,3);class HistogramLogWriter{constructor(t){this.log=t,this.baseTime=0}outputIntervalHistogram(t,e=(t.startTimeStampMsec-this.baseTime)/1e3,r=(t.endTimeStampMsec-this.baseTime)/1e3,n=1e3){const o=encodeIntoCompressedBase64(t),i=`${timeFormatter(e)},${timeFormatter(r-e)},${timeFormatter(t.maxValue/n)},${o}\n`;t.tag&&t.tag!==NO_TAG?this.log(`Tag=${t.tag},${i}`):this.log(i)}outputComment(t){this.log(`#${t}\n`)}outputStartTime(t){this.outputComment(`[StartTime: ${floatFormatter(5,3)(t/1e3)} (seconds since epoch), ${new Date(t)}]\n`)}outputLegend(){this.log('"StartTimestamp","Interval_Length","Interval_Max","Interval_Compressed_Histogram"\n')}outputLogFormatVersion(){this.outputComment("[Histogram log format version "+HISTOGRAM_LOG_FORMAT_VERSION+"]")}}const defaultRequest={bitBucketSize:32,autoResize:!0,lowestDiscernibleValue:1,highestTrackableValue:2,numberOfSignificantValueDigits:3,useWebAssembly:!1},build=(t=defaultRequest)=>{const e=Object.assign({},defaultRequest,t);if(t.useWebAssembly&&webAssemblyAvailable)return WasmHistogram.build(e);const r=new(constructorFromBucketSize(e.bitBucketSize))(e.lowestDiscernibleValue,e.highestTrackableValue,e.numberOfSignificantValueDigits);return r.autoResize=e.autoResize,r};class Recorder{constructor(t=defaultRequest,e=(()=>(new Date).getTime())){this.histogramBuildRequest=t,this.clock=e,this.activeHistogram=build(this.histogramBuildRequest),Recorder.idGenerator++,this.activeHistogram.containingInstanceId=Recorder.idGenerator,this.activeHistogram.startTimeStampMsec=e()}recordValue(t){this.activeHistogram.recordValue(t)}recordValueWithCount(t,e){this.activeHistogram.recordValueWithCount(t,e)}recordValueWithExpectedInterval(t,e){this.activeHistogram.recordValueWithExpectedInterval(t,e)}getIntervalHistogram(t){if(t){if(t.containingInstanceId!==this.activeHistogram.containingInstanceId)throw"replacement histogram must have been obtained via a previous getIntervalHistogram() call from this Recorder"}this.inactiveHistogram=t,this.performIntervalSample();const e=this.inactiveHistogram;return this.inactiveHistogram=null,e}getIntervalHistogramInto(t){this.performIntervalSample(),this.inactiveHistogram&&(t.add(this.inactiveHistogram),t.startTimeStampMsec=this.inactiveHistogram.startTimeStampMsec,t.endTimeStampMsec=this.inactiveHistogram.endTimeStampMsec)}reset(){this.activeHistogram.reset(),this.activeHistogram.startTimeStampMsec=this.clock()}performIntervalSample(){this.inactiveHistogram||(this.inactiveHistogram=build(this.histogramBuildRequest),this.inactiveHistogram.containingInstanceId=this.activeHistogram.containingInstanceId),this.inactiveHistogram.reset();const t=this.activeHistogram;this.activeHistogram=this.inactiveHistogram,this.inactiveHistogram=t;const e=this.clock();this.inactiveHistogram.endTimeStampMsec=e,this.activeHistogram.startTimeStampMsec=e}destroy(){var t;this.activeHistogram.destroy(),null===(t=this.inactiveHistogram)||void 0===t||t.destroy()}}Recorder.idGenerator=0,exports.ByteBuffer=ByteBuffer,exports.Float64Histogram=Float64Histogram,exports.HistogramLogReader=HistogramLogReader,exports.HistogramLogWriter=HistogramLogWriter,exports.Int16Histogram=Int16Histogram,exports.Int32Histogram=Int32Histogram,exports.Int8Histogram=Int8Histogram,exports.JsHistogram=JsHistogram,exports.PackedHistogram=PackedHistogram,exports.Recorder=Recorder,exports.WasmHistogram=WasmHistogram,exports.build=build,exports.decodeFromCompressedBase64=decodeFromCompressedBase64,exports.encodeIntoCompressedBase64=encodeIntoCompressedBase64,exports.initWebAssembly=initWebAssembly,exports.initWebAssemblySync=initWebAssemblySync,exports.listTags=listTags,Object.defineProperty(exports,"__esModule",{value:!0})}));