@open-flash/stream
Advanced tools
Comparing version 0.1.0 to 0.1.1-build.13
@@ -5,2 +5,4 @@ import { Incident } from "incident"; | ||
const UTF8_DECODER: TextDecoder = new TextDecoder("UTF-8", {fatal: true}); | ||
/** | ||
@@ -50,5 +52,15 @@ * Represents a non-byte-aligned stream | ||
readString(byteLength: UintSize): string; | ||
/** | ||
* Read the next `byteLength` bytes as an UTF-8 string. | ||
* | ||
* @param byteLength Length of the string in bytes. | ||
*/ | ||
readUtf8(byteLength: UintSize): string; | ||
readCString(): string; | ||
/** | ||
* Read the next bytes as an UTF-8 string, up to NUL. | ||
* | ||
* The `NUL` byte is consumed but not included in the result. | ||
*/ | ||
readNulTerminatedUtf8(): string; | ||
@@ -322,3 +334,3 @@ readUint8(): Uint8; | ||
readString(byteLength: number): string { | ||
readUtf8(byteLength: number): string { | ||
const endOfString: number = this.bytePos + byteLength; | ||
@@ -328,5 +340,4 @@ if (endOfString > this.bytes.length) { | ||
} | ||
// TODO(demurgos): Remove type cast | ||
const strBuffer: Buffer = Buffer.from(this.bytes.subarray(this.bytePos, endOfString) as Buffer); | ||
const result: string = strBuffer.toString("utf8"); | ||
const slice: Uint8Array = this.bytes.subarray(this.bytePos, endOfString); | ||
const result: string = UTF8_DECODER.decode(slice); | ||
this.bytePos = endOfString; | ||
@@ -336,3 +347,3 @@ return result; | ||
readCString(): string { | ||
readNulTerminatedUtf8(): string { | ||
const endOfString: number = this.bytes.indexOf(0, this.bytePos); | ||
@@ -342,5 +353,4 @@ if (endOfString < 0) { | ||
} | ||
// TODO(demurgos): Remove type cast | ||
const strBuffer: Buffer = Buffer.from(this.bytes.subarray(this.bytePos, endOfString) as Buffer); | ||
const result: string = strBuffer.toString("utf8"); | ||
const slice: Uint8Array = this.bytes.subarray(this.bytePos, endOfString); | ||
const result: string = UTF8_DECODER.decode(slice); | ||
this.bytePos = endOfString + 1; | ||
@@ -347,0 +357,0 @@ return result; |
@@ -5,2 +5,4 @@ import { Incident } from "incident"; | ||
const UTF8_ENCODER: TextEncoder = new TextEncoder(); | ||
/** | ||
@@ -44,5 +46,5 @@ * Represents a non-byte-aligned stream | ||
writeString(value: string): void; | ||
writeUtf8(value: string): void; | ||
writeCString(value: string): void; | ||
writeNulTerminatedUtf8(value: string): void; | ||
@@ -258,5 +260,5 @@ writeUint8(value: Uint8): void; | ||
const chunk: Uint8[] = []; | ||
do { | ||
let nextByte: Uint8 = value & 0x7f; | ||
value = value >> 7; | ||
while (value !== 0 || chunk.length === 0) { | ||
let nextByte: Uint8 = value % 0x80; // value & 0x7f | ||
value = (value - nextByte) / 0x80; // value >> 7 | ||
if (value !== 0) { | ||
@@ -266,3 +268,3 @@ nextByte |= 0x80; | ||
chunk.push(nextByte); | ||
} while (value !== 0); | ||
} | ||
this.chunks.push(new Uint8Array(chunk)); | ||
@@ -272,8 +274,8 @@ this.bytePos += chunk.length; | ||
writeString(value: string): void { | ||
this.writeBytes(Buffer.from(value, "utf8")); | ||
writeUtf8(value: string): void { | ||
this.writeBytes(UTF8_ENCODER.encode(value)); | ||
} | ||
writeCString(value: string): void { | ||
this.writeBytes(Buffer.from(value, "utf8")); | ||
writeNulTerminatedUtf8(value: string): void { | ||
this.writeBytes(UTF8_ENCODER.encode(value)); | ||
this.writeUint8(0); | ||
@@ -280,0 +282,0 @@ } |
{ | ||
"name": "@open-flash/stream", | ||
"version": "0.1.0", | ||
"version": "0.1.1-build.13", | ||
"homepage": "https://github.com/open-flash/stream", | ||
@@ -21,22 +21,28 @@ "description": "Streams for Open Flash", | ||
"license": "MIT", | ||
"pre-commit": { | ||
"run": [ | ||
"lint" | ||
] | ||
}, | ||
"engines": { | ||
"node": ">=13.2" | ||
}, | ||
"dependencies": { | ||
"incident": "^3.1.1", | ||
"kryo": "^0.7.0", | ||
"semantic-types": "^0.1.1", | ||
"ts-tagged": "^1.0.0" | ||
"incident": "^3.2.0", | ||
"semantic-types": "^0.1.1" | ||
}, | ||
"devDependencies": { | ||
"@types/chai": "^4.1.7", | ||
"@types/gulp": "^4.0.5", | ||
"@types/chai": "^4.2.5", | ||
"@types/gulp": "^4.0.6", | ||
"@types/minimist": "^1.2.0", | ||
"@types/mocha": "^5.2.5", | ||
"@types/node": "^10.12.18", | ||
"@types/mocha": "^5.2.7", | ||
"@types/node": "^12.12.12", | ||
"chai": "^4.2.0", | ||
"gulp": "^4.0.0", | ||
"gulp-cli": "^2.0.1", | ||
"gulp": "^4.0.2", | ||
"gulp-cli": "^2.2.0", | ||
"minimist": "^1.2.0", | ||
"ts-node": "^7.0.1", | ||
"tslint": "^5.12.1", | ||
"turbo-gulp": "^0.18.0", | ||
"typescript": "^3.2.4" | ||
"ts-node": "^8.5.2", | ||
"tslint": "^5.20.1", | ||
"turbo-gulp": "^0.20.2", | ||
"typescript": "^3.7.2" | ||
}, | ||
@@ -49,3 +55,3 @@ "c88": { | ||
}, | ||
"gitHead": "1286f6ec8ff3f5ccbd3d30eaeb956bfa3bbbbfa5" | ||
"gitHead": "70dec5137d8ecf38fc17c346a672135879178ae4" | ||
} |
@@ -29,4 +29,14 @@ import { Float16, Float32, Float64, Sint16, Sint32, Sint8, Uint16, Uint32, Uint8, UintSize } from "semantic-types"; | ||
takeBytes(length: UintSize): Uint8Array; | ||
readString(byteLength: UintSize): string; | ||
readCString(): string; | ||
/** | ||
* Read the next `byteLength` bytes as an UTF-8 string. | ||
* | ||
* @param byteLength Length of the string in bytes. | ||
*/ | ||
readUtf8(byteLength: UintSize): string; | ||
/** | ||
* Read the next bytes as an UTF-8 string, up to NUL. | ||
* | ||
* The `NUL` byte is consumed but not included in the result. | ||
*/ | ||
readNulTerminatedUtf8(): string; | ||
readUint8(): Uint8; | ||
@@ -106,6 +116,6 @@ peekUint8(): Uint8; | ||
readUint32Leb128(): Uint32; | ||
readString(byteLength: number): string; | ||
readCString(): string; | ||
readUtf8(byteLength: number): string; | ||
readNulTerminatedUtf8(): string; | ||
private readUintBits; | ||
private readIntBits; | ||
} |
@@ -5,2 +5,3 @@ "use strict"; | ||
const incomplete_stream_1 = require("./errors/incomplete-stream"); | ||
const UTF8_DECODER = new TextDecoder("UTF-8", { fatal: true }); | ||
class ReadableStream { | ||
@@ -194,3 +195,3 @@ constructor(bytes, _byteOffset = 0, bitOffset = 0) { | ||
} | ||
readString(byteLength) { | ||
readUtf8(byteLength) { | ||
const endOfString = this.bytePos + byteLength; | ||
@@ -200,9 +201,8 @@ if (endOfString > this.bytes.length) { | ||
} | ||
// TODO(demurgos): Remove type cast | ||
const strBuffer = Buffer.from(this.bytes.subarray(this.bytePos, endOfString)); | ||
const result = strBuffer.toString("utf8"); | ||
const slice = this.bytes.subarray(this.bytePos, endOfString); | ||
const result = UTF8_DECODER.decode(slice); | ||
this.bytePos = endOfString; | ||
return result; | ||
} | ||
readCString() { | ||
readNulTerminatedUtf8() { | ||
const endOfString = this.bytes.indexOf(0, this.bytePos); | ||
@@ -212,5 +212,4 @@ if (endOfString < 0) { | ||
} | ||
// TODO(demurgos): Remove type cast | ||
const strBuffer = Buffer.from(this.bytes.subarray(this.bytePos, endOfString)); | ||
const result = strBuffer.toString("utf8"); | ||
const slice = this.bytes.subarray(this.bytePos, endOfString); | ||
const result = UTF8_DECODER.decode(slice); | ||
this.bytePos = endOfString + 1; | ||
@@ -275,2 +274,2 @@ return result; | ||
//# sourceMappingURL=data:application/json;charset=utf8;base64,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O0lBQ3RELE1BQU0sUUFBUSxHQUFXLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLG9DQUFvQztJQUNwRixNQUFNLFFBQVEsR0FBWSxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUMsa0NBQWtDO0lBQzFFLElBQUksUUFBUSxLQUFLLENBQUMsRUFBRTtRQUNsQixPQUFPLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxDQUFDO0tBQ3BEO1NBQU0sSUFBSSxRQUFRLEtBQUssSUFBSSxFQUFFLEVBQUUsZ0NBQWdDO1FBQzlELE9BQU8sUUFBUSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0tBQy9DO1NBQU07UUFDTCxPQUFPLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxRQUFRLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztLQUNwRTtBQUNILENBQUMiLCJmaWxlIjoicmVhZGFibGUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmNpZGVudCB9IGZyb20gXCJpbmNpZGVudFwiO1xuaW1wb3J0IHsgRmxvYXQxNiwgRmxvYXQzMiwgRmxvYXQ2NCwgU2ludDE2LCBTaW50MzIsIFNpbnQ4LCBVaW50MTYsIFVpbnQzMiwgVWludDgsIFVpbnRTaXplIH0gZnJvbSBcInNlbWFudGljLXR5cGVzXCI7XG5pbXBvcnQgeyBjcmVhdGVJbmNvbXBsZXRlU3RyZWFtRXJyb3IgfSBmcm9tIFwiLi9lcnJvcnMvaW5jb21wbGV0ZS1zdHJlYW1cIjtcblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgbm9uLWJ5dGUtYWxpZ25lZCBzdHJlYW1cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWFkYWJsZUJpdFN0cmVhbSB7XG4gIGJ5dGVQb3M6IFVpbnRTaXplO1xuICBiaXRQb3M6IFVpbnRTaXplO1xuXG4gIGFsaWduKCk6IHZvaWQ7XG5cbiAgYXNCeXRlU3RyZWFtKCk6IFJlYWRhYmxlQnl0ZVN0cmVhbTtcblxuICBza2lwQml0cyhuOiBVaW50U2l6ZSk6IHZvaWQ7XG5cbiAgcmVhZEJvb2xCaXRzKCk6IGJvb2xlYW47XG5cbiAgcmVhZFNpbnQxNkJpdHMobjogVWludFNpemUpOiBTaW50MTY7XG5cbiAgcmVhZFNpbnQzMkJpdHMobjogVWludFNpemUpOiBTaW50MzI7XG5cbiAgcmVhZFVpbnQxNkJpdHMobjogVWludFNpemUpOiBVaW50MTY7XG5cbiAgcmVhZFVpbnQzMkJpdHMobjogVWludFNpemUpOiBVaW50MzI7XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIGJ5dGUtYWxpZ25lZCBzdHJlYW1cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWFkYWJsZUJ5dGVTdHJlYW0ge1xuICBieXRlUG9zOiBVaW50U2l6ZTtcblxuICBza2lwKHNpemU6IFVpbnRTaXplKTogdm9pZDtcblxuICBhbGlnbigpOiB2b2lkO1xuXG4gIGF2YWlsYWJsZSgpOiBVaW50U2l6ZTtcblxuICB0YWlsQnl0ZXMoKTogVWludDhBcnJheTtcblxuICBhc0JpdFN0cmVhbSgpOiBSZWFkYWJsZUJpdFN0cmVhbTtcblxuICB0YWtlKGxlbmd0aDogVWludFNpemUpOiBSZWFkYWJsZUJ5dGVTdHJlYW07XG5cbiAgdGFrZUJ5dGVzKGxlbmd0aDogVWludFNpemUpOiBVaW50OEFycmF5O1xuXG4gIHJlYWRTdHJpbmcoYnl0ZUxlbmd0aDogVWludFNpemUpOiBzdHJpbmc7XG5cbiAgcmVhZENTdHJpbmcoKTogc3RyaW5nO1xuXG4gIHJlYWRVaW50OCgpOiBVaW50ODtcblxuICBwZWVrVWludDgoKTogVWludDg7XG5cbiAgcmVhZFVpbnQxNkJFKCk6IFVpbnQxNjtcblxuICByZWFkVWludDE2TEUoKTogVWludDE2O1xuXG4gIHJlYWRVaW50MzJCRSgpOiBVaW50MzI7XG5cbiAgcmVhZFVpbnQzMkxFKCk6IFVpbnQzMjtcblxuICByZWFkVWludDMyTGViMTI4KCk6IFVpbnQzMjtcblxuICByZWFkU2ludDgoKTogU2ludDg7XG5cbiAgcmVhZFNpbnQxNkxFKCk6IFNpbnQxNjtcblxuICByZWFkU2ludDMyTEUoKTogU2ludDMyO1xuXG4gIC8qKlxuICAgKiBZb3UgcHJvYmFibHkgZG9uJ3Qgd2FudCB0byB1c2UgdGhpcyBidXQgRmxvYXQxNkxFIGZvciBTV0YgZmlsZXMuXG4gICAqL1xuICByZWFkRmxvYXQxNkJFKCk6IEZsb2F0MTY7XG5cbiAgcmVhZEZsb2F0MTZMRSgpOiBGbG9hdDE2O1xuXG4gIC8qKlxuICAgKiBZb3UgcHJvYmFibHkgZG9uJ3Qgd2FudCB0byB1c2UgdGhpcyBidXQgRmxvYXQzMkxFZm9yIFNXRiBmaWxlcy5cbiAgICovXG4gIHJlYWRGbG9hdDMyQkUoKTogRmxvYXQzMjtcblxuICByZWFkRmxvYXQzMkxFKCk6IEZsb2F0MzI7XG5cbiAgLyoqXG4gICAqIFlvdSBwcm9iYWJseSBkb24ndCB3YW50IHRvIHVzZSB0aGlzIGJ1dCBGbG9hdDY0TEVmb3IgU1dGIGZpbGVzLlxuICAgKi9cbiAgcmVhZEZsb2F0NjRCRSgpOiBGbG9hdDY0O1xuXG4gIHJlYWRGbG9hdDY0TEUoKTogRmxvYXQ2NDtcbn1cblxuZXhwb3J0IGNsYXNzIFJlYWRhYmxlU3RyZWFtIGltcGxlbWVudHMgUmVhZGFibGVCaXRTdHJlYW0sIFJlYWRhYmxlQnl0ZVN0cmVhbSB7XG4gIGJ5dGVzOiBVaW50OEFycmF5O1xuICB2aWV3OiBEYXRhVmlldztcbiAgYnl0ZVBvczogVWludFNpemU7XG4gIGJ5dGVFbmQ6IFVpbnRTaXplO1xuICBiaXRQb3M6IFVpbnRTaXplO1xuXG4gIGNvbnN0cnVjdG9yKGJ5dGVzOiBVaW50OEFycmF5LCBfYnl0ZU9mZnNldDogVWludFNpemUgPSAwLCBiaXRPZmZzZXQ6IFVpbnRTaXplID0gMCkge1xuICAgIHRoaXMuYnl0ZXMgPSBieXRlcztcbiAgICB0aGlzLnZpZXcgPSBuZXcgRGF0YVZpZXcoYnl0ZXMuYnVmZmVyLCBieXRlcy5ieXRlT2Zmc2V0LCBieXRlcy5sZW5ndGgpO1xuICAgIHRoaXMuYnl0ZVBvcyA9IDA7XG4gICAgdGhpcy5iaXRQb3MgPSBiaXRPZmZzZXQ7XG4gICAgdGhpcy5ieXRlRW5kID0gYnl0ZXMubGVuZ3RoO1xuICB9XG5cbiAgc3RhdGljIGVxdWFscyhsZWZ0OiBSZWFkYWJsZVN0cmVhbSwgcmlnaHQ6IFJlYWRhYmxlU3RyZWFtKTogYm9vbGVhbiB7XG4gICAgaWYgKGxlZnQuYml0UG9zICE9PSByaWdodC5iaXRQb3MpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgbGVmdExlbjogbnVtYmVyID0gbGVmdC5ieXRlRW5kIC0gbGVmdC5ieXRlUG9zO1xuICAgIGNvbnN0IHJpZ2h0TGVuOiBudW1iZXIgPSByaWdodC5ieXRlRW5kIC0gcmlnaHQuYnl0ZVBvcztcbiAgICBpZiAobGVmdExlbiAhPT0gcmlnaHRMZW4pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2UgaWYgKGxlZnRMZW4gPT09IDApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBsZXQgaTogbnVtYmVyID0gMDtcbiAgICBpZiAobGVmdC5iaXRQb3MgIT09IDApIHtcbiAgICAgIGkgPSAxO1xuICAgICAgY29uc3QgbGVmdFBhcnRpYWxCeXRlOiBVaW50OCA9IGxlZnQuYnl0ZXNbbGVmdC5ieXRlUG9zXTtcbiAgICAgIGNvbnN0IHJpZ2h0UGFydGlhbEJ5dGU6IFVpbnQ4ID0gcmlnaHQuYnl0ZXNbcmlnaHQuYnl0ZVBvc107XG4gICAgICBjb25zdCBtYXNrOiBVaW50OCA9ICgxIDw8ICg4IC0gbGVmdC5iaXRQb3MpKSAtIDE7XG4gICAgICBpZiAoKGxlZnRQYXJ0aWFsQnl0ZSAmIG1hc2spICE9PSAocmlnaHRQYXJ0aWFsQnl0ZSAmIG1hc2spKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yICg7IGkgPCBsZWZ0TGVuOyBpKyspIHtcbiAgICAgIGlmIChsZWZ0LmJ5dGVzW2xlZnQuYnl0ZVBvcyArIGldICE9PSByaWdodC5ieXRlc1tyaWdodC5ieXRlUG9zICsgaV0pIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGFzQml0U3RyZWFtKCk6IHRoaXMge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgYXNCeXRlU3RyZWFtKCk6IHRoaXMge1xuICAgIHRoaXMuYWxpZ24oKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGFsaWduKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmJpdFBvcyAhPT0gMCkge1xuICAgICAgdGhpcy5iaXRQb3MgPSAwO1xuICAgICAgdGhpcy5ieXRlUG9zKys7XG4gICAgfVxuICB9XG5cbiAgdGFpbCgpOiBSZWFkYWJsZVN0cmVhbSB7XG4gICAgcmV0dXJuIG5ldyBSZWFkYWJsZVN0cmVhbSh0aGlzLnRhaWxCeXRlcygpLCAwLCB0aGlzLmJpdFBvcyk7XG4gIH1cblxuICB0YWlsQnl0ZXMoKTogVWludDhBcnJheSB7XG4gICAgY29uc3QgcmVzdWx0OiBVaW50OEFycmF5ID0gdGhpcy5ieXRlcy5zdWJhcnJheSh0aGlzLmJ5dGVQb3MpO1xuICAgIHRoaXMuYnl0ZVBvcyA9IHRoaXMuYnl0ZUVuZDtcbiAgICB0aGlzLmJpdFBvcyA9IDA7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGF2YWlsYWJsZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmJ5dGVFbmQgLSB0aGlzLmJ5dGVQb3M7XG4gIH1cblxuICB0YWtlKGxlbmd0aDogVWludFNpemUpOiBSZWFkYWJsZVN0cmVhbSB7XG4gICAgcmV0dXJuIG5ldyBSZWFkYWJsZVN0cmVhbSh0aGlzLnRha2VCeXRlcyhsZW5ndGgpLCAwLCAwKTtcbiAgfVxuXG4gIHRha2VCeXRlcyhsZW5ndGg6IFVpbnRTaXplKTogVWludDhBcnJheSB7XG4gICAgY29uc3QgcmVzdWx0OiBVaW50OEFycmF5ID0gdGhpcy5ieXRlcy5zdWJhcnJheSh0aGlzLmJ5dGVQb3MsIHRoaXMuYnl0ZVBvcyArIGxlbmd0aCk7XG4gICAgdGhpcy5ieXRlUG9zICs9IGxlbmd0aDtcbiAgICB0aGlzLmJpdFBvcyA9IDA7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHJlYWRTaW50OCgpOiBTaW50OCB7XG4gICAgcmV0dXJuIHRoaXMudmlldy5nZXRJbnQ4KHRoaXMuYnl0ZVBvcysrKTtcbiAgfVxuXG4gIHJlYWRTaW50MTZMRSgpOiBTaW50MTYge1xuICAgIGNvbnN0IHJlc3VsdDogU2ludDE2ID0gdGhpcy52aWV3LmdldEludDE2KHRoaXMuYnl0ZVBvcywgdHJ1ZSk7XG4gICAgdGhpcy5ieXRlUG9zICs9IDI7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHJlYWRTaW50MzJMRSgpOiBTaW50MzIge1xuICAgIGNvbnN0IHJlc3VsdDogU2ludDMyID0gdGhpcy52aWV3LmdldEludDMyKHRoaXMuYnl0ZVBvcywgdHJ1ZSk7XG4gICAgdGhpcy5ieXRlUG9zICs9IDQ7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHJlYWRVaW50OCgpOiBVaW50OCB7XG4gICAgcmV0dXJuIHRoaXMudmlldy5nZXRVaW50OCh0aGlzLmJ5dGVQb3MrKyk7XG4gIH1cblxuICBwZWVrVWludDgoKTogVWludDgge1xuICAgIHJldHVybiB0aGlzLnZpZXcuZ2V0VWludDgodGhpcy5ieXRlUG9zKTtcbiAgfVxuXG4gIHJlYWRVaW50MTZCRSgpOiBVaW50MTYge1xuICAgIGNvbnN0IHJlc3VsdDogVWludDE2ID0gdGhpcy52aWV3LmdldFVpbnQxNih0aGlzLmJ5dGVQb3MsIGZhbHNlKTtcbiAgICB0aGlzLmJ5dGVQb3MgKz0gMjtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcmVhZFVpbnQxNkxFKCk6IFVpbnQxNiB7XG4gICAgY29uc3QgcmVzdWx0OiBVaW50MTYgPSB0aGlzLnZpZXcuZ2V0VWludDE2KHRoaXMuYnl0ZVBvcywgdHJ1ZSk7XG4gICAgdGhpcy5ieXRlUG9zICs9IDI7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHJlYWRVaW50MzJCRSgpOiBVaW50MzIge1xuICAgIGNvbnN0IHJlc3VsdDogVWludDMyID0gdGhpcy52aWV3LmdldFVpbnQzMih0aGlzLmJ5dGVQb3MsIGZhbHNlKTtcbiAgICB0aGlzLmJ5dGVQb3MgKz0gNDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcmVhZFVpbnQzMkxFKCk6IFVpbnQzMiB7XG4gICAgY29uc3QgcmVzdWx0OiBVaW50MzIgPSB0aGlzLnZpZXcuZ2V0VWludDMyKHRoaXMuYnl0ZVBvcywgdHJ1ZSk7XG4gICAgdGhpcy5ieXRlUG9zICs9IDQ7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHJlYWRGbG9hdDE2QkUoKTogRmxvYXQxNiB7XG4gICAgY29uc3QgdTE2OiBVaW50MTYgPSB0aGlzLnZpZXcuZ2V0VWludDE2KHRoaXMuYnl0ZVBvcywgZmFsc2UpO1xuICAgIHRoaXMuYnl0ZVBvcyArPSAyO1xuICAgIHJldHVybiByZWludGVycHJldFVpbnQxNkFzRmxvYXQxNih1MTYpO1xuICB9XG5cbiAgcmVhZEZsb2F0MTZMRSgpOiBGbG9hdDE2IHtcbiAgICBjb25zdCB1MTY6IFVpbnQxNiA9IHRoaXMudmlldy5nZXRVaW50MTYodGhpcy5ieXRlUG9zLCB0cnVlKTtcbiAgICB0aGlzLmJ5dGVQb3MgKz0gMjtcbiAgICByZXR1cm4gcmVpbnRlcnByZXRVaW50MTZBc0Zsb2F0MTYodTE2KTtcbiAgfVxuXG4gIHJlYWRGbG9hdDMyQkUoKTogRmxvYXQzMiB7XG4gICAgY29uc3QgcmVzdWx0OiBGbG9hdDMyID0gdGhpcy52aWV3LmdldEZsb2F0MzIodGhpcy5ieXRlUG9zLCBmYWxzZSk7XG4gICAgdGhpcy5ieXRlUG9zICs9IDQ7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHJlYWRGbG9hdDMyTEUoKTogRmxvYXQzMiB7XG4gICAgY29uc3QgcmVzdWx0OiBGbG9hdDMyID0gdGhpcy52aWV3LmdldEZsb2F0MzIodGhpcy5ieXRlUG9zLCB0cnVlKTtcbiAgICB0aGlzLmJ5dGVQb3MgKz0gNDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcmVhZEZsb2F0NjRCRSgpOiBGbG9hdDY0IHtcbiAgICBjb25zdCByZXN1bHQ6IEZsb2F0NjQgPSB0aGlzLnZpZXcuZ2V0RmxvYXQ2NCh0aGlzLmJ5dGVQb3MsIGZhbHNlKTtcbiAgICB0aGlzLmJ5dGVQb3MgKz0gODtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcmVhZEZsb2F0NjRMRSgpOiBGbG9hdDY0IHtcbiAgICBjb25zdCByZXN1bHQ6IEZsb2F0NjQgPSB0aGlzLnZpZXcuZ2V0RmxvYXQ2NCh0aGlzLmJ5dGVQb3MsIHRydWUpO1xuICAgIHRoaXMuYnl0ZVBvcyArPSA4O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBza2lwKHNpemU6IFVpbnRTaXplKTogdm9pZCB7XG4gICAgdGhpcy5ieXRlUG9zICs9IHNpemU7XG4gIH1cblxuICBza2lwQml0cyhuOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnJlYWRVaW50Qml0cyhuKTtcbiAgfVxuXG4gIHJlYWRCb29sQml0cygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkVWludEJpdHMoMSkgPiAwO1xuICB9XG5cbiAgcmVhZFNpbnQxNkJpdHMobjogbnVtYmVyKTogU2ludDE2IHtcbiAgICByZXR1cm4gdGhpcy5yZWFkSW50Qml0cyhuKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTQltuXVxuICAgKi9cbiAgcmVhZFNpbnQzMkJpdHMobjogVWludFNpemUpOiBTaW50MzIge1xuICAgIHJldHVybiB0aGlzLnJlYWRJbnRCaXRzKG4pO1xuICB9XG5cbiAgcmVhZFVpbnQxNkJpdHMobjogVWludFNpemUpOiBVaW50MTYge1xuICAgIHJldHVybiB0aGlzLnJlYWRVaW50Qml0cyhuKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVQltuXVxuICAgKi9cbiAgcmVhZFVpbnQzMkJpdHMobjogVWludFNpemUpOiBVaW50MzIge1xuICAgIHJldHVybiB0aGlzLnJlYWRVaW50Qml0cyhuKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMRUIxMjgtZW5jb2RlZCBVaW50MzIgKDEgdG8gNSBieXRlcylcbiAgICovXG4gIHJlYWRVaW50MzJMZWIxMjgoKTogVWludDMyIHtcbiAgICBsZXQgcmVzdWx0OiBVaW50MzIgPSAwO1xuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCA1OyBpKyspIHtcbiAgICAgIGNvbnN0IG5leHRCeXRlOiBVaW50OCA9IHRoaXMuYnl0ZXNbdGhpcy5ieXRlUG9zKytdO1xuICAgICAgaWYgKGkgPCA0KSB7XG4gICAgICAgIC8vIEJpdC1zaGlmdCBpcyBzYWZlXG4gICAgICAgIHJlc3VsdCArPSAobmV4dEJ5dGUgJiAweDdmKSA8PCAoNyAqIGkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQml0LXNoaWZ0IGlzIHVuc2FmZSwgdXNlIGAqIE1hdGgucG93YFxuICAgICAgICByZXN1bHQgKz0gKG5leHRCeXRlICYgMHgwZikgKiBNYXRoLnBvdygyLCAyOCk7XG4gICAgICB9XG4gICAgICBpZiAoKG5leHRCeXRlICYgKDEgPDwgNykpID09PSAwKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICByZWFkU3RyaW5nKGJ5dGVMZW5ndGg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgY29uc3QgZW5kT2ZTdHJpbmc6IG51bWJlciA9IHRoaXMuYnl0ZVBvcyArIGJ5dGVMZW5ndGg7XG4gICAgaWYgKGVuZE9mU3RyaW5nID4gdGhpcy5ieXRlcy5sZW5ndGgpIHtcbiAgICAgIHRocm93IGNyZWF0ZUluY29tcGxldGVTdHJlYW1FcnJvcigpO1xuICAgIH1cbiAgICAvLyBUT0RPKGRlbXVyZ29zKTogUmVtb3ZlIHR5cGUgY2FzdFxuICAgIGNvbnN0IHN0ckJ1ZmZlcjogQnVmZmVyID0gQnVmZmVyLmZyb20odGhpcy5ieXRlcy5zdWJhcnJheSh0aGlzLmJ5dGVQb3MsIGVuZE9mU3RyaW5nKSBhcyBCdWZmZXIpO1xuICAgIGNvbnN0IHJlc3VsdDogc3RyaW5nID0gc3RyQnVmZmVyLnRvU3RyaW5nKFwidXRmOFwiKTtcbiAgICB0aGlzLmJ5dGVQb3MgPSBlbmRPZlN0cmluZztcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcmVhZENTdHJpbmcoKTogc3RyaW5nIHtcbiAgICBjb25zdCBlbmRPZlN0cmluZzogbnVtYmVyID0gdGhpcy5ieXRlcy5pbmRleE9mKDAsIHRoaXMuYnl0ZVBvcyk7XG4gICAgaWYgKGVuZE9mU3RyaW5nIDwgMCkge1xuICAgICAgdGhyb3cgY3JlYXRlSW5jb21wbGV0ZVN0cmVhbUVycm9yKCk7XG4gICAgfVxuICAgIC8vIFRPRE8oZGVtdXJnb3MpOiBSZW1vdmUgdHlwZSBjYXN0XG4gICAgY29uc3Qgc3RyQnVmZmVyOiBCdWZmZXIgPSBCdWZmZXIuZnJvbSh0aGlzLmJ5dGVzLnN1YmFycmF5KHRoaXMuYnl0ZVBvcywgZW5kT2ZTdHJpbmcpIGFzIEJ1ZmZlcik7XG4gICAgY29uc3QgcmVzdWx0OiBzdHJpbmcgPSBzdHJCdWZmZXIudG9TdHJpbmcoXCJ1dGY4XCIpO1xuICAgIHRoaXMuYnl0ZVBvcyA9IGVuZE9mU3RyaW5nICsgMTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkVWludEJpdHMobjogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBpZiAobiA+IDMyKSB7XG4gICAgICAvLyBFdmVuIGlmIHdlIGNvdWxkIHJlYWQgdXAgdG8gNTMgYml0cywgd2UgcmVzdHJpY3QgaXQgdG8gMzIgYml0cyAod2hpY2ggaXMgYWxyZWFkeSB1bnNhZmVcbiAgICAgIC8vIGlmIHdlIGNvbnNpZGVyIHRoYXQgdGhlIG1heCBwb3NpdGl2ZSBudW1iZXIgc2FmZSByZWdhcmRpbmcgYml0IG9wZXJhdGlvbnMgaXMgMl4zMSAtIDEpXG4gICAgICB0aHJvdyBuZXcgSW5jaWRlbnQoXCJCaXRPdmVyZmxvd1wiLCBcIkNhbm5vdCByZWFkIGFib3ZlIDMyIGJpdHMgd2l0aG91dCBvdmVyZmxvd1wiKTtcbiAgICB9XG4gICAgbGV0IHJlc3VsdDogbnVtYmVyID0gMDtcbiAgICB3aGlsZSAobiA+IDApIHtcbiAgICAgIGlmICh0aGlzLmJpdFBvcyArIG4gPCA4KSB7XG4gICAgICAgIGNvbnN0IGVuZEJpdFBvczogbnVtYmVyID0gdGhpcy5iaXRQb3MgKyBuO1xuICAgICAgICBjb25zdCBzaGlmdDogbnVtYmVyID0gMSA8PCAoZW5kQml0UG9zIC0gdGhpcy5iaXRQb3MpO1xuICAgICAgICBjb25zdCBjdXI6IG51bWJlciA9ICh0aGlzLmJ5dGVzW3RoaXMuYnl0ZVBvc10gPj4+IDggLSBlbmRCaXRQb3MpICYgKHNoaWZ0IC0gMSk7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdCAqIHNoaWZ0ICsgY3VyO1xuICAgICAgICBuID0gMDtcbiAgICAgICAgdGhpcy5iaXRQb3MgPSBlbmRCaXRQb3M7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBzaGlmdDogbnVtYmVyID0gMSA8PCAoOCAtIHRoaXMuYml0UG9zKTtcbiAgICAgICAgY29uc3QgY3VyOiBudW1iZXIgPSB0aGlzLmJ5dGVzW3RoaXMuYnl0ZVBvc10gJiAoc2hpZnQgLSAxKTtcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICogc2hpZnQgKyBjdXI7XG4gICAgICAgIG4gLT0gKDggLSB0aGlzLmJpdFBvcyk7XG4gICAgICAgIHRoaXMuYml0UG9zID0gMDtcbiAgICAgICAgdGhpcy5ieXRlUG9zKys7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIHJlYWRJbnRCaXRzKG46IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKG4gPT09IDApIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICBjb25zdCB1bnNpZ25lZDogbnVtYmVyID0gdGhpcy5yZWFkVWludEJpdHMobik7XG4gICAgaWYgKHVuc2lnbmVkIDwgTWF0aC5wb3coMiwgbiAtIDEpKSB7XG4gICAgICByZXR1cm4gdW5zaWduZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAtTWF0aC5wb3coMiwgbikgKyB1bnNpZ25lZDtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVpbnRlcnByZXRVaW50MTZBc0Zsb2F0MTYodTE2OiBVaW50MTYpOiBGbG9hdDE2IHtcbiAgY29uc3Qgc2lnbjogLTEgfCAxID0gKHUxNiAmICgxIDw8IDE1KSkgIT09IDAgPyAtMSA6IDE7XG4gIGNvbnN0IGV4cG9uZW50OiBTaW50MzIgPSAodTE2ICYgMHg3YzAwKSA+Pj4gMTA7IC8vIDB4N2MwMDogYml0cyAxMCB0byAxNCAoaW5jbHVzaXZlKVxuICBjb25zdCBmcmFjdGlvbjogRmxvYXQ2NCA9IHUxNiAmIDB4MDNmZjsgLy8gMHgwM2ZmOiBiaXRzIDAgdG8gOSAoaW5jbHVzaXZlKVxuICBpZiAoZXhwb25lbnQgPT09IDApIHtcbiAgICByZXR1cm4gc2lnbiAqIE1hdGgucG93KDIsIC0xNCkgKiAoZnJhY3Rpb24gLyAxMDI0KTtcbiAgfSBlbHNlIGlmIChleHBvbmVudCA9PT0gMHgxZikgeyAvLyAweDFmOiBiaXRzIDAgdG8gNCAoaW5jbHVzaXZlKVxuICAgIHJldHVybiBmcmFjdGlvbiA9PT0gMCA/IHNpZ24gKiBJbmZpbml0eSA6IE5hTjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gc2lnbiAqIE1hdGgucG93KDIsIGV4cG9uZW50IC0gMTUpICogKDEgKyAoZnJhY3Rpb24gLyAxMDI0KSk7XG4gIH1cbn1cbiJdLCJzb3VyY2VSb290IjoiIn0= | ||
//# sourceMappingURL=data:application/json;charset=utf8;base64,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Q0FBQyxDQUFDO0lBQ3RELE1BQU0sUUFBUSxHQUFXLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLG9DQUFvQztJQUNwRixNQUFNLFFBQVEsR0FBWSxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUMsa0NBQWtDO0lBQzFFLElBQUksUUFBUSxLQUFLLENBQUMsRUFBRTtRQUNsQixPQUFPLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxDQUFDO0tBQ3BEO1NBQU0sSUFBSSxRQUFRLEtBQUssSUFBSSxFQUFFLEVBQUUsZ0NBQWdDO1FBQzlELE9BQU8sUUFBUSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0tBQy9DO1NBQU07UUFDTCxPQUFPLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxRQUFRLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztLQUNwRTtBQUNILENBQUMiLCJmaWxlIjoicmVhZGFibGUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmNpZGVudCB9IGZyb20gXCJpbmNpZGVudFwiO1xuaW1wb3J0IHsgRmxvYXQxNiwgRmxvYXQzMiwgRmxvYXQ2NCwgU2ludDE2LCBTaW50MzIsIFNpbnQ4LCBVaW50MTYsIFVpbnQzMiwgVWludDgsIFVpbnRTaXplIH0gZnJvbSBcInNlbWFudGljLXR5cGVzXCI7XG5pbXBvcnQgeyBjcmVhdGVJbmNvbXBsZXRlU3RyZWFtRXJyb3IgfSBmcm9tIFwiLi9lcnJvcnMvaW5jb21wbGV0ZS1zdHJlYW1cIjtcblxuY29uc3QgVVRGOF9ERUNPREVSOiBUZXh0RGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcihcIlVURi04XCIsIHtmYXRhbDogdHJ1ZX0pO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBub24tYnl0ZS1hbGlnbmVkIHN0cmVhbVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlYWRhYmxlQml0U3RyZWFtIHtcbiAgYnl0ZVBvczogVWludFNpemU7XG4gIGJpdFBvczogVWludFNpemU7XG5cbiAgYWxpZ24oKTogdm9pZDtcblxuICBhc0J5dGVTdHJlYW0oKTogUmVhZGFibGVCeXRlU3RyZWFtO1xuXG4gIHNraXBCaXRzKG46IFVpbnRTaXplKTogdm9pZDtcblxuICByZWFkQm9vbEJpdHMoKTogYm9vbGVhbjtcblxuICByZWFkU2ludDE2Qml0cyhuOiBVaW50U2l6ZSk6IFNpbnQxNjtcblxuICByZWFkU2ludDMyQml0cyhuOiBVaW50U2l6ZSk6IFNpbnQzMjtcblxuICByZWFkVWludDE2Qml0cyhuOiBVaW50U2l6ZSk6IFVpbnQxNjtcblxuICByZWFkVWludDMyQml0cyhuOiBVaW50U2l6ZSk6IFVpbnQzMjtcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgYnl0ZS1hbGlnbmVkIHN0cmVhbVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlYWRhYmxlQnl0ZVN0cmVhbSB7XG4gIGJ5dGVQb3M6IFVpbnRTaXplO1xuXG4gIHNraXAoc2l6ZTogVWludFNpemUpOiB2b2lkO1xuXG4gIGFsaWduKCk6IHZvaWQ7XG5cbiAgYXZhaWxhYmxlKCk6IFVpbnRTaXplO1xuXG4gIHRhaWxCeXRlcygpOiBVaW50OEFycmF5O1xuXG4gIGFzQml0U3RyZWFtKCk6IFJlYWRhYmxlQml0U3RyZWFtO1xuXG4gIHRha2UobGVuZ3RoOiBVaW50U2l6ZSk6IFJlYWRhYmxlQnl0ZVN0cmVhbTtcblxuICB0YWtlQnl0ZXMobGVuZ3RoOiBVaW50U2l6ZSk6IFVpbnQ4QXJyYXk7XG5cbiAgLyoqXG4gICAqIFJlYWQgdGhlIG5leHQgYGJ5dGVMZW5ndGhgIGJ5dGVzIGFzIGFuIFVURi04IHN0cmluZy5cbiAgICpcbiAgICogQHBhcmFtIGJ5dGVMZW5ndGggTGVuZ3RoIG9mIHRoZSBzdHJpbmcgaW4gYnl0ZXMuXG4gICAqL1xuICByZWFkVXRmOChieXRlTGVuZ3RoOiBVaW50U2l6ZSk6IHN0cmluZztcblxuICAvKipcbiAgICogUmVhZCB0aGUgbmV4dCBieXRlcyBhcyBhbiBVVEYtOCBzdHJpbmcsIHVwIHRvIE5VTC5cbiAgICpcbiAgICogVGhlIGBOVUxgIGJ5dGUgaXMgY29uc3VtZWQgYnV0IG5vdCBpbmNsdWRlZCBpbiB0aGUgcmVzdWx0LlxuICAgKi9cbiAgcmVhZE51bFRlcm1pbmF0ZWRVdGY4KCk6IHN0cmluZztcblxuICByZWFkVWludDgoKTogVWludDg7XG5cbiAgcGVla1VpbnQ4KCk6IFVpbnQ4O1xuXG4gIHJlYWRVaW50MTZCRSgpOiBVaW50MTY7XG5cbiAgcmVhZFVpbnQxNkxFKCk6IFVpbnQxNjtcblxuICByZWFkVWludDMyQkUoKTogVWludDMyO1xuXG4gIHJlYWRVaW50MzJMRSgpOiBVaW50MzI7XG5cbiAgcmVhZFVpbnQzMkxlYjEyOCgpOiBVaW50MzI7XG5cbiAgcmVhZFNpbnQ4KCk6IFNpbnQ4O1xuXG4gIHJlYWRTaW50MTZMRSgpOiBTaW50MTY7XG5cbiAgcmVhZFNpbnQzMkxFKCk6IFNpbnQzMjtcblxuICAvKipcbiAgICogWW91IHByb2JhYmx5IGRvbid0IHdhbnQgdG8gdXNlIHRoaXMgYnV0IEZsb2F0MTZMRSBmb3IgU1dGIGZpbGVzLlxuICAgKi9cbiAgcmVhZEZsb2F0MTZCRSgpOiBGbG9hdDE2O1xuXG4gIHJlYWRGbG9hdDE2TEUoKTogRmxvYXQxNjtcblxuICAvKipcbiAgICogWW91IHByb2JhYmx5IGRvbid0IHdhbnQgdG8gdXNlIHRoaXMgYnV0IEZsb2F0MzJMRWZvciBTV0YgZmlsZXMuXG4gICAqL1xuICByZWFkRmxvYXQzMkJFKCk6IEZsb2F0MzI7XG5cbiAgcmVhZEZsb2F0MzJMRSgpOiBGbG9hdDMyO1xuXG4gIC8qKlxuICAgKiBZb3UgcHJvYmFibHkgZG9uJ3Qgd2FudCB0byB1c2UgdGhpcyBidXQgRmxvYXQ2NExFZm9yIFNXRiBmaWxlcy5cbiAgICovXG4gIHJlYWRGbG9hdDY0QkUoKTogRmxvYXQ2NDtcblxuICByZWFkRmxvYXQ2NExFKCk6IEZsb2F0NjQ7XG59XG5cbmV4cG9ydCBjbGFzcyBSZWFkYWJsZVN0cmVhbSBpbXBsZW1lbnRzIFJlYWRhYmxlQml0U3RyZWFtLCBSZWFkYWJsZUJ5dGVTdHJlYW0ge1xuICBieXRlczogVWludDhBcnJheTtcbiAgdmlldzogRGF0YVZpZXc7XG4gIGJ5dGVQb3M6IFVpbnRTaXplO1xuICBieXRlRW5kOiBVaW50U2l6ZTtcbiAgYml0UG9zOiBVaW50U2l6ZTtcblxuICBjb25zdHJ1Y3RvcihieXRlczogVWludDhBcnJheSwgX2J5dGVPZmZzZXQ6IFVpbnRTaXplID0gMCwgYml0T2Zmc2V0OiBVaW50U2l6ZSA9IDApIHtcbiAgICB0aGlzLmJ5dGVzID0gYnl0ZXM7XG4gICAgdGhpcy52aWV3ID0gbmV3IERhdGFWaWV3KGJ5dGVzLmJ1ZmZlciwgYnl0ZXMuYnl0ZU9mZnNldCwgYnl0ZXMubGVuZ3RoKTtcbiAgICB0aGlzLmJ5dGVQb3MgPSAwO1xuICAgIHRoaXMuYml0UG9zID0gYml0T2Zmc2V0O1xuICAgIHRoaXMuYnl0ZUVuZCA9IGJ5dGVzLmxlbmd0aDtcbiAgfVxuXG4gIHN0YXRpYyBlcXVhbHMobGVmdDogUmVhZGFibGVTdHJlYW0sIHJpZ2h0OiBSZWFkYWJsZVN0cmVhbSk6IGJvb2xlYW4ge1xuICAgIGlmIChsZWZ0LmJpdFBvcyAhPT0gcmlnaHQuYml0UG9zKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGxlZnRMZW46IG51bWJlciA9IGxlZnQuYnl0ZUVuZCAtIGxlZnQuYnl0ZVBvcztcbiAgICBjb25zdCByaWdodExlbjogbnVtYmVyID0gcmlnaHQuYnl0ZUVuZCAtIHJpZ2h0LmJ5dGVQb3M7XG4gICAgaWYgKGxlZnRMZW4gIT09IHJpZ2h0TGVuKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIGlmIChsZWZ0TGVuID09PSAwKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgbGV0IGk6IG51bWJlciA9IDA7XG4gICAgaWYgKGxlZnQuYml0UG9zICE9PSAwKSB7XG4gICAgICBpID0gMTtcbiAgICAgIGNvbnN0IGxlZnRQYXJ0aWFsQnl0ZTogVWludDggPSBsZWZ0LmJ5dGVzW2xlZnQuYnl0ZVBvc107XG4gICAgICBjb25zdCByaWdodFBhcnRpYWxCeXRlOiBVaW50OCA9IHJpZ2h0LmJ5dGVzW3JpZ2h0LmJ5dGVQb3NdO1xuICAgICAgY29uc3QgbWFzazogVWludDggPSAoMSA8PCAoOCAtIGxlZnQuYml0UG9zKSkgLSAxO1xuICAgICAgaWYgKChsZWZ0UGFydGlhbEJ5dGUgJiBtYXNrKSAhPT0gKHJpZ2h0UGFydGlhbEJ5dGUgJiBtYXNrKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAoOyBpIDwgbGVmdExlbjsgaSsrKSB7XG4gICAgICBpZiAobGVmdC5ieXRlc1tsZWZ0LmJ5dGVQb3MgKyBpXSAhPT0gcmlnaHQuYnl0ZXNbcmlnaHQuYnl0ZVBvcyArIGldKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBhc0JpdFN0cmVhbSgpOiB0aGlzIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGFzQnl0ZVN0cmVhbSgpOiB0aGlzIHtcbiAgICB0aGlzLmFsaWduKCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBhbGlnbigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5iaXRQb3MgIT09IDApIHtcbiAgICAgIHRoaXMuYml0UG9zID0gMDtcbiAgICAgIHRoaXMuYnl0ZVBvcysrO1xuICAgIH1cbiAgfVxuXG4gIHRhaWwoKTogUmVhZGFibGVTdHJlYW0ge1xuICAgIHJldHVybiBuZXcgUmVhZGFibGVTdHJlYW0odGhpcy50YWlsQnl0ZXMoKSwgMCwgdGhpcy5iaXRQb3MpO1xuICB9XG5cbiAgdGFpbEJ5dGVzKCk6IFVpbnQ4QXJyYXkge1xuICAgIGNvbnN0IHJlc3VsdDogVWludDhBcnJheSA9IHRoaXMuYnl0ZXMuc3ViYXJyYXkodGhpcy5ieXRlUG9zKTtcbiAgICB0aGlzLmJ5dGVQb3MgPSB0aGlzLmJ5dGVFbmQ7XG4gICAgdGhpcy5iaXRQb3MgPSAwO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBhdmFpbGFibGUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5ieXRlRW5kIC0gdGhpcy5ieXRlUG9zO1xuICB9XG5cbiAgdGFrZShsZW5ndGg6IFVpbnRTaXplKTogUmVhZGFibGVTdHJlYW0ge1xuICAgIHJldHVybiBuZXcgUmVhZGFibGVTdHJlYW0odGhpcy50YWtlQnl0ZXMobGVuZ3RoKSwgMCwgMCk7XG4gIH1cblxuICB0YWtlQnl0ZXMobGVuZ3RoOiBVaW50U2l6ZSk6IFVpbnQ4QXJyYXkge1xuICAgIGNvbnN0IHJlc3VsdDogVWludDhBcnJheSA9IHRoaXMuYnl0ZXMuc3ViYXJyYXkodGhpcy5ieXRlUG9zLCB0aGlzLmJ5dGVQb3MgKyBsZW5ndGgpO1xuICAgIHRoaXMuYnl0ZVBvcyArPSBsZW5ndGg7XG4gICAgdGhpcy5iaXRQb3MgPSAwO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICByZWFkU2ludDgoKTogU2ludDgge1xuICAgIHJldHVybiB0aGlzLnZpZXcuZ2V0SW50OCh0aGlzLmJ5dGVQb3MrKyk7XG4gIH1cblxuICByZWFkU2ludDE2TEUoKTogU2ludDE2IHtcbiAgICBjb25zdCByZXN1bHQ6IFNpbnQxNiA9IHRoaXMudmlldy5nZXRJbnQxNih0aGlzLmJ5dGVQb3MsIHRydWUpO1xuICAgIHRoaXMuYnl0ZVBvcyArPSAyO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICByZWFkU2ludDMyTEUoKTogU2ludDMyIHtcbiAgICBjb25zdCByZXN1bHQ6IFNpbnQzMiA9IHRoaXMudmlldy5nZXRJbnQzMih0aGlzLmJ5dGVQb3MsIHRydWUpO1xuICAgIHRoaXMuYnl0ZVBvcyArPSA0O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICByZWFkVWludDgoKTogVWludDgge1xuICAgIHJldHVybiB0aGlzLnZpZXcuZ2V0VWludDgodGhpcy5ieXRlUG9zKyspO1xuICB9XG5cbiAgcGVla1VpbnQ4KCk6IFVpbnQ4IHtcbiAgICByZXR1cm4gdGhpcy52aWV3LmdldFVpbnQ4KHRoaXMuYnl0ZVBvcyk7XG4gIH1cblxuICByZWFkVWludDE2QkUoKTogVWludDE2IHtcbiAgICBjb25zdCByZXN1bHQ6IFVpbnQxNiA9IHRoaXMudmlldy5nZXRVaW50MTYodGhpcy5ieXRlUG9zLCBmYWxzZSk7XG4gICAgdGhpcy5ieXRlUG9zICs9IDI7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHJlYWRVaW50MTZMRSgpOiBVaW50MTYge1xuICAgIGNvbnN0IHJlc3VsdDogVWludDE2ID0gdGhpcy52aWV3LmdldFVpbnQxNih0aGlzLmJ5dGVQb3MsIHRydWUpO1xuICAgIHRoaXMuYnl0ZVBvcyArPSAyO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICByZWFkVWludDMyQkUoKTogVWludDMyIHtcbiAgICBjb25zdCByZXN1bHQ6IFVpbnQzMiA9IHRoaXMudmlldy5nZXRVaW50MzIodGhpcy5ieXRlUG9zLCBmYWxzZSk7XG4gICAgdGhpcy5ieXRlUG9zICs9IDQ7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHJlYWRVaW50MzJMRSgpOiBVaW50MzIge1xuICAgIGNvbnN0IHJlc3VsdDogVWludDMyID0gdGhpcy52aWV3LmdldFVpbnQzMih0aGlzLmJ5dGVQb3MsIHRydWUpO1xuICAgIHRoaXMuYnl0ZVBvcyArPSA0O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICByZWFkRmxvYXQxNkJFKCk6IEZsb2F0MTYge1xuICAgIGNvbnN0IHUxNjogVWludDE2ID0gdGhpcy52aWV3LmdldFVpbnQxNih0aGlzLmJ5dGVQb3MsIGZhbHNlKTtcbiAgICB0aGlzLmJ5dGVQb3MgKz0gMjtcbiAgICByZXR1cm4gcmVpbnRlcnByZXRVaW50MTZBc0Zsb2F0MTYodTE2KTtcbiAgfVxuXG4gIHJlYWRGbG9hdDE2TEUoKTogRmxvYXQxNiB7XG4gICAgY29uc3QgdTE2OiBVaW50MTYgPSB0aGlzLnZpZXcuZ2V0VWludDE2KHRoaXMuYnl0ZVBvcywgdHJ1ZSk7XG4gICAgdGhpcy5ieXRlUG9zICs9IDI7XG4gICAgcmV0dXJuIHJlaW50ZXJwcmV0VWludDE2QXNGbG9hdDE2KHUxNik7XG4gIH1cblxuICByZWFkRmxvYXQzMkJFKCk6IEZsb2F0MzIge1xuICAgIGNvbnN0IHJlc3VsdDogRmxvYXQzMiA9IHRoaXMudmlldy5nZXRGbG9hdDMyKHRoaXMuYnl0ZVBvcywgZmFsc2UpO1xuICAgIHRoaXMuYnl0ZVBvcyArPSA0O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICByZWFkRmxvYXQzMkxFKCk6IEZsb2F0MzIge1xuICAgIGNvbnN0IHJlc3VsdDogRmxvYXQzMiA9IHRoaXMudmlldy5nZXRGbG9hdDMyKHRoaXMuYnl0ZVBvcywgdHJ1ZSk7XG4gICAgdGhpcy5ieXRlUG9zICs9IDQ7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHJlYWRGbG9hdDY0QkUoKTogRmxvYXQ2NCB7XG4gICAgY29uc3QgcmVzdWx0OiBGbG9hdDY0ID0gdGhpcy52aWV3LmdldEZsb2F0NjQodGhpcy5ieXRlUG9zLCBmYWxzZSk7XG4gICAgdGhpcy5ieXRlUG9zICs9IDg7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHJlYWRGbG9hdDY0TEUoKTogRmxvYXQ2NCB7XG4gICAgY29uc3QgcmVzdWx0OiBGbG9hdDY0ID0gdGhpcy52aWV3LmdldEZsb2F0NjQodGhpcy5ieXRlUG9zLCB0cnVlKTtcbiAgICB0aGlzLmJ5dGVQb3MgKz0gODtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgc2tpcChzaXplOiBVaW50U2l6ZSk6IHZvaWQge1xuICAgIHRoaXMuYnl0ZVBvcyArPSBzaXplO1xuICB9XG5cbiAgc2tpcEJpdHMobjogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5yZWFkVWludEJpdHMobik7XG4gIH1cblxuICByZWFkQm9vbEJpdHMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucmVhZFVpbnRCaXRzKDEpID4gMDtcbiAgfVxuXG4gIHJlYWRTaW50MTZCaXRzKG46IG51bWJlcik6IFNpbnQxNiB7XG4gICAgcmV0dXJuIHRoaXMucmVhZEludEJpdHMobik7XG4gIH1cblxuICAvKipcbiAgICogU0Jbbl1cbiAgICovXG4gIHJlYWRTaW50MzJCaXRzKG46IFVpbnRTaXplKTogU2ludDMyIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkSW50Qml0cyhuKTtcbiAgfVxuXG4gIHJlYWRVaW50MTZCaXRzKG46IFVpbnRTaXplKTogVWludDE2IHtcbiAgICByZXR1cm4gdGhpcy5yZWFkVWludEJpdHMobik7XG4gIH1cblxuICAvKipcbiAgICogVUJbbl1cbiAgICovXG4gIHJlYWRVaW50MzJCaXRzKG46IFVpbnRTaXplKTogVWludDMyIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkVWludEJpdHMobik7XG4gIH1cblxuICAvKipcbiAgICogTEVCMTI4LWVuY29kZWQgVWludDMyICgxIHRvIDUgYnl0ZXMpXG4gICAqL1xuICByZWFkVWludDMyTGViMTI4KCk6IFVpbnQzMiB7XG4gICAgbGV0IHJlc3VsdDogVWludDMyID0gMDtcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgNTsgaSsrKSB7XG4gICAgICBjb25zdCBuZXh0Qnl0ZTogVWludDggPSB0aGlzLmJ5dGVzW3RoaXMuYnl0ZVBvcysrXTtcbiAgICAgIGlmIChpIDwgNCkge1xuICAgICAgICAvLyBCaXQtc2hpZnQgaXMgc2FmZVxuICAgICAgICByZXN1bHQgKz0gKG5leHRCeXRlICYgMHg3ZikgPDwgKDcgKiBpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEJpdC1zaGlmdCBpcyB1bnNhZmUsIHVzZSBgKiBNYXRoLnBvd2BcbiAgICAgICAgcmVzdWx0ICs9IChuZXh0Qnl0ZSAmIDB4MGYpICogTWF0aC5wb3coMiwgMjgpO1xuICAgICAgfVxuICAgICAgaWYgKChuZXh0Qnl0ZSAmICgxIDw8IDcpKSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcmVhZFV0ZjgoYnl0ZUxlbmd0aDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCBlbmRPZlN0cmluZzogbnVtYmVyID0gdGhpcy5ieXRlUG9zICsgYnl0ZUxlbmd0aDtcbiAgICBpZiAoZW5kT2ZTdHJpbmcgPiB0aGlzLmJ5dGVzLmxlbmd0aCkge1xuICAgICAgdGhyb3cgY3JlYXRlSW5jb21wbGV0ZVN0cmVhbUVycm9yKCk7XG4gICAgfVxuICAgIGNvbnN0IHNsaWNlOiBVaW50OEFycmF5ID0gdGhpcy5ieXRlcy5zdWJhcnJheSh0aGlzLmJ5dGVQb3MsIGVuZE9mU3RyaW5nKTtcbiAgICBjb25zdCByZXN1bHQ6IHN0cmluZyA9IFVURjhfREVDT0RFUi5kZWNvZGUoc2xpY2UpO1xuICAgIHRoaXMuYnl0ZVBvcyA9IGVuZE9mU3RyaW5nO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICByZWFkTnVsVGVybWluYXRlZFV0ZjgoKTogc3RyaW5nIHtcbiAgICBjb25zdCBlbmRPZlN0cmluZzogbnVtYmVyID0gdGhpcy5ieXRlcy5pbmRleE9mKDAsIHRoaXMuYnl0ZVBvcyk7XG4gICAgaWYgKGVuZE9mU3RyaW5nIDwgMCkge1xuICAgICAgdGhyb3cgY3JlYXRlSW5jb21wbGV0ZVN0cmVhbUVycm9yKCk7XG4gICAgfVxuICAgIGNvbnN0IHNsaWNlOiBVaW50OEFycmF5ID0gdGhpcy5ieXRlcy5zdWJhcnJheSh0aGlzLmJ5dGVQb3MsIGVuZE9mU3RyaW5nKTtcbiAgICBjb25zdCByZXN1bHQ6IHN0cmluZyA9IFVURjhfREVDT0RFUi5kZWNvZGUoc2xpY2UpO1xuICAgIHRoaXMuYnl0ZVBvcyA9IGVuZE9mU3RyaW5nICsgMTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkVWludEJpdHMobjogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBpZiAobiA+IDMyKSB7XG4gICAgICAvLyBFdmVuIGlmIHdlIGNvdWxkIHJlYWQgdXAgdG8gNTMgYml0cywgd2UgcmVzdHJpY3QgaXQgdG8gMzIgYml0cyAod2hpY2ggaXMgYWxyZWFkeSB1bnNhZmVcbiAgICAgIC8vIGlmIHdlIGNvbnNpZGVyIHRoYXQgdGhlIG1heCBwb3NpdGl2ZSBudW1iZXIgc2FmZSByZWdhcmRpbmcgYml0IG9wZXJhdGlvbnMgaXMgMl4zMSAtIDEpXG4gICAgICB0aHJvdyBuZXcgSW5jaWRlbnQoXCJCaXRPdmVyZmxvd1wiLCBcIkNhbm5vdCByZWFkIGFib3ZlIDMyIGJpdHMgd2l0aG91dCBvdmVyZmxvd1wiKTtcbiAgICB9XG4gICAgbGV0IHJlc3VsdDogbnVtYmVyID0gMDtcbiAgICB3aGlsZSAobiA+IDApIHtcbiAgICAgIGlmICh0aGlzLmJpdFBvcyArIG4gPCA4KSB7XG4gICAgICAgIGNvbnN0IGVuZEJpdFBvczogbnVtYmVyID0gdGhpcy5iaXRQb3MgKyBuO1xuICAgICAgICBjb25zdCBzaGlmdDogbnVtYmVyID0gMSA8PCAoZW5kQml0UG9zIC0gdGhpcy5iaXRQb3MpO1xuICAgICAgICBjb25zdCBjdXI6IG51bWJlciA9ICh0aGlzLmJ5dGVzW3RoaXMuYnl0ZVBvc10gPj4+IDggLSBlbmRCaXRQb3MpICYgKHNoaWZ0IC0gMSk7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdCAqIHNoaWZ0ICsgY3VyO1xuICAgICAgICBuID0gMDtcbiAgICAgICAgdGhpcy5iaXRQb3MgPSBlbmRCaXRQb3M7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBzaGlmdDogbnVtYmVyID0gMSA8PCAoOCAtIHRoaXMuYml0UG9zKTtcbiAgICAgICAgY29uc3QgY3VyOiBudW1iZXIgPSB0aGlzLmJ5dGVzW3RoaXMuYnl0ZVBvc10gJiAoc2hpZnQgLSAxKTtcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICogc2hpZnQgKyBjdXI7XG4gICAgICAgIG4gLT0gKDggLSB0aGlzLmJpdFBvcyk7XG4gICAgICAgIHRoaXMuYml0UG9zID0gMDtcbiAgICAgICAgdGhpcy5ieXRlUG9zKys7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIHJlYWRJbnRCaXRzKG46IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKG4gPT09IDApIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICBjb25zdCB1bnNpZ25lZDogbnVtYmVyID0gdGhpcy5yZWFkVWludEJpdHMobik7XG4gICAgaWYgKHVuc2lnbmVkIDwgTWF0aC5wb3coMiwgbiAtIDEpKSB7XG4gICAgICByZXR1cm4gdW5zaWduZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAtTWF0aC5wb3coMiwgbikgKyB1bnNpZ25lZDtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVpbnRlcnByZXRVaW50MTZBc0Zsb2F0MTYodTE2OiBVaW50MTYpOiBGbG9hdDE2IHtcbiAgY29uc3Qgc2lnbjogLTEgfCAxID0gKHUxNiAmICgxIDw8IDE1KSkgIT09IDAgPyAtMSA6IDE7XG4gIGNvbnN0IGV4cG9uZW50OiBTaW50MzIgPSAodTE2ICYgMHg3YzAwKSA+Pj4gMTA7IC8vIDB4N2MwMDogYml0cyAxMCB0byAxNCAoaW5jbHVzaXZlKVxuICBjb25zdCBmcmFjdGlvbjogRmxvYXQ2NCA9IHUxNiAmIDB4MDNmZjsgLy8gMHgwM2ZmOiBiaXRzIDAgdG8gOSAoaW5jbHVzaXZlKVxuICBpZiAoZXhwb25lbnQgPT09IDApIHtcbiAgICByZXR1cm4gc2lnbiAqIE1hdGgucG93KDIsIC0xNCkgKiAoZnJhY3Rpb24gLyAxMDI0KTtcbiAgfSBlbHNlIGlmIChleHBvbmVudCA9PT0gMHgxZikgeyAvLyAweDFmOiBiaXRzIDAgdG8gNCAoaW5jbHVzaXZlKVxuICAgIHJldHVybiBmcmFjdGlvbiA9PT0gMCA/IHNpZ24gKiBJbmZpbml0eSA6IE5hTjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gc2lnbiAqIE1hdGgucG93KDIsIGV4cG9uZW50IC0gMTUpICogKDEgKyAoZnJhY3Rpb24gLyAxMDI0KSk7XG4gIH1cbn1cbiJdLCJzb3VyY2VSb290IjoiIn0= |
@@ -0,1 +1,16 @@ | ||
<a href="https://github.com/open-flash/open-flash"> | ||
<img src="https://raw.githubusercontent.com/open-flash/open-flash/master/logo.png" | ||
alt="Open Flash logo" title="Open Flash" align="right" width="64" height="64" /> | ||
</a> | ||
# Open Flash Stream | ||
[](https://www.npmjs.com/package/@open-flash/stream) | ||
[](https://github.com/open-flash/stream) | ||
[](https://travis-ci.com/open-flash/stream) | ||
Read and write methods on a buffer for parsers and emitters. | ||
This library is part of the [Open Flash][ofl] project. | ||
[ofl]: https://github.com/open-flash/open-flash |
@@ -26,4 +26,4 @@ import { Float16, Float32, Float64, Sint16, Sint32, Sint8, Uint16, Uint32, Uint8, UintSize } from "semantic-types"; | ||
writeBytes(value: Uint8Array): void; | ||
writeString(value: string): void; | ||
writeCString(value: string): void; | ||
writeUtf8(value: string): void; | ||
writeNulTerminatedUtf8(value: string): void; | ||
writeUint8(value: Uint8): void; | ||
@@ -85,4 +85,4 @@ writeUint16BE(value: Uint16): void; | ||
writeUint32Leb128(value: Uint32): void; | ||
writeString(value: string): void; | ||
writeCString(value: string): void; | ||
writeUtf8(value: string): void; | ||
writeNulTerminatedUtf8(value: string): void; | ||
getBytes(): Uint8Array; | ||
@@ -89,0 +89,0 @@ private writeUintBits; |
@@ -5,2 +5,3 @@ "use strict"; | ||
const concat_bytes_1 = require("./concat-bytes"); | ||
const UTF8_ENCODER = new TextEncoder(); | ||
const TMP_BUFFER = new ArrayBuffer(8); | ||
@@ -146,5 +147,5 @@ const TMP_DATA_VIEW = new DataView(TMP_BUFFER); | ||
const chunk = []; | ||
do { | ||
let nextByte = value & 0x7f; | ||
value = value >> 7; | ||
while (value !== 0 || chunk.length === 0) { | ||
let nextByte = value % 0x80; // value & 0x7f | ||
value = (value - nextByte) / 0x80; // value >> 7 | ||
if (value !== 0) { | ||
@@ -154,11 +155,11 @@ nextByte |= 0x80; | ||
chunk.push(nextByte); | ||
} while (value !== 0); | ||
} | ||
this.chunks.push(new Uint8Array(chunk)); | ||
this.bytePos += chunk.length; | ||
} | ||
writeString(value) { | ||
this.writeBytes(Buffer.from(value, "utf8")); | ||
writeUtf8(value) { | ||
this.writeBytes(UTF8_ENCODER.encode(value)); | ||
} | ||
writeCString(value) { | ||
this.writeBytes(Buffer.from(value, "utf8")); | ||
writeNulTerminatedUtf8(value) { | ||
this.writeBytes(UTF8_ENCODER.encode(value)); | ||
this.writeUint8(0); | ||
@@ -233,2 +234,2 @@ } | ||
//# sourceMappingURL=data:application/json;charset=utf8;base64,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UUFDckUsUUFBUSxFQUFFLENBQUM7S0FDWjtJQUNELElBQUksUUFBUSxLQUFLLFlBQVksRUFBRTtRQUM3QixPQUFPLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVztLQUMzRDtTQUFNO1FBQ0wsTUFBTSxRQUFRLEdBQVcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxRQUFRLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxRQUFRLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN2RyxPQUFPLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxDQUFDO0tBQ2pFO0FBQ0gsQ0FBQyIsImZpbGUiOiJ3cml0YWJsZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluY2lkZW50IH0gZnJvbSBcImluY2lkZW50XCI7XG5pbXBvcnQgeyBGbG9hdDE2LCBGbG9hdDMyLCBGbG9hdDY0LCBTaW50MTYsIFNpbnQzMiwgU2ludDgsIFVpbnQxNiwgVWludDMyLCBVaW50OCwgVWludFNpemUgfSBmcm9tIFwic2VtYW50aWMtdHlwZXNcIjtcbmltcG9ydCB7IGNvbmNhdEJ5dGVzIH0gZnJvbSBcIi4vY29uY2F0LWJ5dGVzXCI7XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIG5vbi1ieXRlLWFsaWduZWQgc3RyZWFtXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV3JpdGFibGVCaXRTdHJlYW0ge1xuICBieXRlUG9zOiBVaW50U2l6ZTtcbiAgYml0UG9zOiBVaW50U2l6ZTtcblxuICBhbGlnbigpOiB2b2lkO1xuXG4gIGFzQnl0ZVN0cmVhbSgpOiBXcml0YWJsZUJ5dGVTdHJlYW07XG5cbiAgd3JpdGVaZXJvc0JpdHMobjogVWludFNpemUpOiB2b2lkO1xuXG4gIHdyaXRlQm9vbEJpdHModmFsdWU6IGJvb2xlYW4pOiB2b2lkO1xuXG4gIHdyaXRlU2ludDE2Qml0cyhuOiBVaW50U2l6ZSwgdmFsdWU6IFNpbnQxNik6IHZvaWQ7XG5cbiAgd3JpdGVTaW50MzJCaXRzKG46IFVpbnRTaXplLCB2YWx1ZTogU2ludDMyKTogdm9pZDtcblxuICB3cml0ZVVpbnQxNkJpdHMobjogVWludFNpemUsIHZhbHVlOiBVaW50MTYpOiB2b2lkO1xuXG4gIHdyaXRlVWludDMyQml0cyhuOiBVaW50U2l6ZSwgdmFsdWU6IFVpbnQzMik6IHZvaWQ7XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIGJ5dGUtYWxpZ25lZCBzdHJlYW1cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXcml0YWJsZUJ5dGVTdHJlYW0ge1xuICBieXRlUG9zOiBVaW50U2l6ZTtcblxuICB3cml0ZVplcm9zKHNpemU6IFVpbnRTaXplKTogdm9pZDtcblxuICBhc0JpdFN0cmVhbSgpOiBXcml0YWJsZUJpdFN0cmVhbTtcblxuICB3cml0ZSh2YWx1ZTogV3JpdGFibGVCeXRlU3RyZWFtKTogdm9pZDtcblxuICB3cml0ZUJ5dGVzKHZhbHVlOiBVaW50OEFycmF5KTogdm9pZDtcblxuICB3cml0ZVN0cmluZyh2YWx1ZTogc3RyaW5nKTogdm9pZDtcblxuICB3cml0ZUNTdHJpbmcodmFsdWU6IHN0cmluZyk6IHZvaWQ7XG5cbiAgd3JpdGVVaW50OCh2YWx1ZTogVWludDgpOiB2b2lkO1xuXG4gIHdyaXRlVWludDE2QkUodmFsdWU6IFVpbnQxNik6IHZvaWQ7XG5cbiAgd3JpdGVVaW50MTZMRSh2YWx1ZTogVWludDE2KTogdm9pZDtcblxuICB3cml0ZVVpbnQzMkJFKHZhbHVlOiBVaW50MzIpOiB2b2lkO1xuXG4gIHdyaXRlVWludDMyTEUodmFsdWU6IFVpbnQzMik6IHZvaWQ7XG5cbiAgd3JpdGVVaW50MzJMZWIxMjgodmFsdWU6IFVpbnQzMik6IHZvaWQ7XG5cbiAgd3JpdGVTaW50OCh2YWx1ZTogU2ludDgpOiB2b2lkO1xuXG4gIHdyaXRlU2ludDE2TEUodmFsdWU6IFNpbnQxNik6IHZvaWQ7XG5cbiAgd3JpdGVTaW50MzJMRSh2YWx1ZTogU2ludDMyKTogdm9pZDtcblxuICB3cml0ZUZsb2F0MTZCRSh2YWx1ZTogRmxvYXQxNik6IHZvaWQ7XG5cbiAgd3JpdGVGbG9hdDE2TEUodmFsdWU6IEZsb2F0MTYpOiB2b2lkO1xuXG4gIHdyaXRlRmxvYXQzMkJFKHZhbHVlOiBGbG9hdDMyKTogdm9pZDtcblxuICB3cml0ZUZsb2F0MzJMRSh2YWx1ZTogRmxvYXQzMik6IHZvaWQ7XG5cbiAgd3JpdGVGbG9hdDY0QkUodmFsdWU6IEZsb2F0NjQpOiB2b2lkO1xuXG4gIHdyaXRlRmxvYXQ2NExFKHZhbHVlOiBGbG9hdDY0KTogdm9pZDtcblxuICBnZXRCeXRlcygpOiBVaW50OEFycmF5O1xufVxuXG5jb25zdCBUTVBfQlVGRkVSOiBBcnJheUJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcig4KTtcbmNvbnN0IFRNUF9EQVRBX1ZJRVc6IERhdGFWaWV3ID0gbmV3IERhdGFWaWV3KFRNUF9CVUZGRVIpO1xuXG5leHBvcnQgY2xhc3MgV3JpdGFibGVTdHJlYW0gaW1wbGVtZW50cyBXcml0YWJsZUJpdFN0cmVhbSwgV3JpdGFibGVCeXRlU3RyZWFtIHtcbiAgYnl0ZVBvczogVWludFNpemU7XG4gIGJpdFBvczogVWludFNpemU7XG5cbiAgcHJpdmF0ZSBjaHVua3M6IFVpbnQ4QXJyYXlbXTtcbiAgcHJpdmF0ZSBiaXRzQnVmZmVyOiBVaW50ODtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmJ5dGVQb3MgPSAwO1xuICAgIHRoaXMuYml0UG9zID0gMDtcbiAgICB0aGlzLmJpdHNCdWZmZXIgPSAwO1xuICAgIHRoaXMuY2h1bmtzID0gW107XG4gIH1cblxuICBhc0JpdFN0cmVhbSgpOiB0aGlzIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGFzQnl0ZVN0cmVhbSgpOiB0aGlzIHtcbiAgICB0aGlzLmFsaWduKCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBhbGlnbigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5iaXRQb3MgIT09IDApIHtcbiAgICAgIHRoaXMud3JpdGVVaW50OCh0aGlzLmJpdHNCdWZmZXIpOyAvLyBJbmNyZW1lbnRzIGB0aGlzLmJ5dGVQb3NgXG4gICAgICB0aGlzLmJpdFBvcyA9IDA7XG4gICAgICB0aGlzLmJpdHNCdWZmZXIgPSAwO1xuICAgIH1cbiAgfVxuXG4gIHdyaXRlKHZhbHVlOiBXcml0YWJsZUJ5dGVTdHJlYW0pOiB2b2lkIHtcbiAgICB0aGlzLndyaXRlQnl0ZXModmFsdWUuZ2V0Qnl0ZXMoKSk7XG4gIH1cblxuICB3cml0ZUJ5dGVzKHZhbHVlOiBVaW50OEFycmF5KTogdm9pZCB7XG4gICAgdGhpcy5jaHVua3MucHVzaCh2YWx1ZSk7XG4gICAgdGhpcy5ieXRlUG9zICs9IHZhbHVlLmxlbmd0aDtcbiAgfVxuXG4gIHdyaXRlWmVyb3Moc2l6ZTogVWludFNpemUpOiB2b2lkIHtcbiAgICB0aGlzLmNodW5rcy5wdXNoKG5ldyBVaW50OEFycmF5KHNpemUpKTtcbiAgICB0aGlzLmJ5dGVQb3MgKz0gc2l6ZTtcbiAgfVxuXG4gIHdyaXRlWmVyb3NCaXRzKHNpemU6IFVpbnRTaXplKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYml0UG9zICsgc2l6ZSA8IDgpIHtcbiAgICAgIHRoaXMuYml0UG9zICs9IHNpemU7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy53cml0ZVVpbnQ4KHRoaXMuYml0c0J1ZmZlcik7XG4gICAgdGhpcy5iaXRzQnVmZmVyID0gMDtcbiAgICBzaXplIC09IDggLSB0aGlzLmJpdFBvcztcblxuICAgIGNvbnN0IGJpdFBvczogVWludFNpemUgPSBzaXplICUgODtcbiAgICB0aGlzLndyaXRlWmVyb3MoKHNpemUgLSBiaXRQb3MpIC8gOCk7XG4gICAgdGhpcy5iaXRQb3MgPSBiaXRQb3M7XG4gIH1cblxuICB3cml0ZVNpbnQ4KHZhbHVlOiBTaW50OCk6IHZvaWQge1xuICAgIHRoaXMud3JpdGVVaW50OCh2YWx1ZSA8IDAgPyAoMSA8PCA4KSArIHZhbHVlIDogdmFsdWUpO1xuICB9XG5cbiAgd3JpdGVTaW50MTZMRSh2YWx1ZTogU2ludDE2KTogdm9pZCB7XG4gICAgdGhpcy53cml0ZVVpbnQxNkxFKHZhbHVlIDwgMCA/ICgxIDw8IDE2KSArIHZhbHVlIDogdmFsdWUpO1xuICB9XG5cbiAgd3JpdGVTaW50MzJMRSh2YWx1ZTogU2ludDMyKTogdm9pZCB7XG4gICAgdGhpcy5jaHVua3MucHVzaChCdWZmZXIuZnJvbShbXG4gICAgICAodmFsdWUgPj4+IDApICYgMHhmZixcbiAgICAgICh2YWx1ZSA+Pj4gOCkgJiAweGZmLFxuICAgICAgKHZhbHVlID4+PiAxNikgJiAweGZmLFxuICAgICAgKHZhbHVlID4+PiAyNCkgJiAweGZmLFxuICAgIF0pKTtcbiAgICB0aGlzLmJ5dGVQb3MgKz0gNDtcbiAgfVxuXG4gIHdyaXRlVWludDgodmFsdWU6IFVpbnQ4KTogdm9pZCB7XG4gICAgdGhpcy5jaHVua3MucHVzaChCdWZmZXIuZnJvbShbdmFsdWUgJiAweGZmXSkpO1xuICAgIHRoaXMuYnl0ZVBvcysrO1xuICB9XG5cbiAgd3JpdGVVaW50MTZCRSh2YWx1ZTogVWludDE2KTogdm9pZCB7XG4gICAgdGhpcy5jaHVua3MucHVzaChCdWZmZXIuZnJvbShbXG4gICAgICAodmFsdWUgPj4+IDgpICYgMHhmZixcbiAgICAgICh2YWx1ZSA+Pj4gMCkgJiAweGZmLFxuICAgIF0pKTtcbiAgICB0aGlzLmJ5dGVQb3MgKz0gMjtcbiAgfVxuXG4gIHdyaXRlVWludDE2TEUodmFsdWU6IFVpbnQxNik6IHZvaWQge1xuICAgIHRoaXMuY2h1bmtzLnB1c2goQnVmZmVyLmZyb20oW1xuICAgICAgKHZhbHVlID4+PiAwKSAmIDB4ZmYsXG4gICAgICAodmFsdWUgPj4+IDgpICYgMHhmZixcbiAgICBdKSk7XG4gICAgdGhpcy5ieXRlUG9zICs9IDI7XG4gIH1cblxuICB3cml0ZVVpbnQzMkJFKHZhbHVlOiBVaW50MzIpOiB2b2lkIHtcbiAgICB0aGlzLmNodW5rcy5wdXNoKEJ1ZmZlci5mcm9tKFtcbiAgICAgICh2YWx1ZSA+Pj4gMjQpICYgMHhmZixcbiAgICAgICh2YWx1ZSA+Pj4gMTYpICYgMHhmZixcbiAgICAgICh2YWx1ZSA+Pj4gOCkgJiAweGZmLFxuICAgICAgKHZhbHVlID4+PiAwKSAmIDB4ZmYsXG4gICAgXSkpO1xuICAgIHRoaXMuYnl0ZVBvcyArPSA0O1xuICB9XG5cbiAgd3JpdGVVaW50MzJMRSh2YWx1ZTogVWludDMyKTogdm9pZCB7XG4gICAgdGhpcy53cml0ZVNpbnQzMkxFKHZhbHVlIHwgMCk7XG4gIH1cblxuICB3cml0ZUZsb2F0MTZCRSh2YWx1ZTogRmxvYXQxNik6IHZvaWQge1xuICAgIHRoaXMud3JpdGVVaW50MTZCRShyZWludGVycHJldEZsb2F0MTZBc1VpbnQxNih2YWx1ZSkpO1xuICB9XG5cbiAgd3JpdGVGbG9hdDE2TEUodmFsdWU6IEZsb2F0MTYpOiB2b2lkIHtcbiAgICB0aGlzLndyaXRlVWludDE2TEUocmVpbnRlcnByZXRGbG9hdDE2QXNVaW50MTYodmFsdWUpKTtcbiAgfVxuXG4gIHdyaXRlRmxvYXQzMkJFKHZhbHVlOiBGbG9hdDMyKTogdm9pZCB7XG4gICAgVE1QX0RBVEFfVklFVy5zZXRGbG9hdDMyKDAsIHZhbHVlLCBmYWxzZSk7XG4gICAgdGhpcy5jaHVua3MucHVzaChuZXcgVWludDhBcnJheShUTVBfQlVGRkVSLnNsaWNlKDAsIDQpKSk7XG4gICAgdGhpcy5ieXRlUG9zICs9IDQ7XG4gIH1cblxuICB3cml0ZUZsb2F0MzJMRSh2YWx1ZTogRmxvYXQzMik6IHZvaWQge1xuICAgIFRNUF9EQVRBX1ZJRVcuc2V0RmxvYXQzMigwLCB2YWx1ZSwgdHJ1ZSk7XG4gICAgdGhpcy5jaHVua3MucHVzaChuZXcgVWludDhBcnJheShUTVBfQlVGRkVSLnNsaWNlKDAsIDQpKSk7XG4gICAgdGhpcy5ieXRlUG9zICs9IDQ7XG4gIH1cblxuICB3cml0ZUZsb2F0NjRCRSh2YWx1ZTogRmxvYXQ2NCk6IHZvaWQge1xuICAgIFRNUF9EQVRBX1ZJRVcuc2V0RmxvYXQ2NCgwLCB2YWx1ZSwgZmFsc2UpO1xuICAgIHRoaXMuY2h1bmtzLnB1c2gobmV3IFVpbnQ4QXJyYXkoVE1QX0JVRkZFUi5zbGljZSgwLCA4KSkpO1xuICAgIHRoaXMuYnl0ZVBvcyArPSA4O1xuICB9XG5cbiAgd3JpdGVGbG9hdDY0TEUodmFsdWU6IEZsb2F0NjQpOiB2b2lkIHtcbiAgICBUTVBfREFUQV9WSUVXLnNldEZsb2F0NjQoMCwgdmFsdWUsIHRydWUpO1xuICAgIHRoaXMuY2h1bmtzLnB1c2gobmV3IFVpbnQ4QXJyYXkoVE1QX0JVRkZFUi5zbGljZSgwLCA4KSkpO1xuICAgIHRoaXMuYnl0ZVBvcyArPSA4O1xuICB9XG5cbiAgd3JpdGVCb29sQml0cyh2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHJldHVybiB0aGlzLndyaXRlVWludEJpdHMoMSwgdmFsdWUgPyAxIDogMCk7XG4gIH1cblxuICB3cml0ZVNpbnQxNkJpdHMobjogbnVtYmVyLCB2YWx1ZTogU2ludDE2KTogdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMud3JpdGVTaW50Qml0cyhuLCB2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogU0Jbbl1cbiAgICovXG4gIHdyaXRlU2ludDMyQml0cyhuOiBVaW50U2l6ZSwgdmFsdWU6IFNpbnQzMik6IHZvaWQge1xuICAgIHJldHVybiB0aGlzLndyaXRlU2ludEJpdHMobiwgdmFsdWUpO1xuICB9XG5cbiAgd3JpdGVVaW50MTZCaXRzKG46IFVpbnRTaXplLCB2YWx1ZTogVWludDE2KTogdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMud3JpdGVVaW50Qml0cyhuLCB2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogVUJbbl1cbiAgICovXG4gIHdyaXRlVWludDMyQml0cyhuOiBVaW50U2l6ZSwgdmFsdWU6IFVpbnQzMik6IHZvaWQge1xuICAgIHRoaXMud3JpdGVVaW50Qml0cyhuLCB2YWx1ZSk7XG4gIH1cblxuICB3cml0ZVVpbnQzMkxlYjEyOCh2YWx1ZTogVWludDMyKTogdm9pZCB7XG4gICAgY29uc3QgY2h1bms6IFVpbnQ4W10gPSBbXTtcbiAgICBkbyB7XG4gICAgICBsZXQgbmV4dEJ5dGU6IFVpbnQ4ID0gdmFsdWUgJiAweDdmO1xuICAgICAgdmFsdWUgPSB2YWx1ZSA+PiA3O1xuICAgICAgaWYgKHZhbHVlICE9PSAwKSB7XG4gICAgICAgIG5leHRCeXRlIHw9IDB4ODA7XG4gICAgICB9XG4gICAgICBjaHVuay5wdXNoKG5leHRCeXRlKTtcbiAgICB9IHdoaWxlICh2YWx1ZSAhPT0gMCk7XG4gICAgdGhpcy5jaHVua3MucHVzaChuZXcgVWludDhBcnJheShjaHVuaykpO1xuICAgIHRoaXMuYnl0ZVBvcyArPSBjaHVuay5sZW5ndGg7XG4gIH1cblxuICB3cml0ZVN0cmluZyh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy53cml0ZUJ5dGVzKEJ1ZmZlci5mcm9tKHZhbHVlLCBcInV0ZjhcIikpO1xuICB9XG5cbiAgd3JpdGVDU3RyaW5nKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLndyaXRlQnl0ZXMoQnVmZmVyLmZyb20odmFsdWUsIFwidXRmOFwiKSk7XG4gICAgdGhpcy53cml0ZVVpbnQ4KDApO1xuICB9XG5cbiAgZ2V0Qnl0ZXMoKTogVWludDhBcnJheSB7XG4gICAgY29uc3QgYnl0ZXM6IFVpbnQ4QXJyYXkgPSBjb25jYXRCeXRlcyh0aGlzLmNodW5rcyk7XG4gICAgdGhpcy5jaHVua3MgPSBbYnl0ZXNdO1xuICAgIHJldHVybiBieXRlcztcbiAgfVxuXG4gIHByaXZhdGUgd3JpdGVVaW50Qml0cyhiaXRzOiBudW1iZXIsIHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoYml0cyA+IDMyKSB7XG4gICAgICAvLyBFdmVuIGlmIHdlIGNvdWxkIHJlYWQgdXAgdG8gNTMgYml0cywgd2UgcmVzdHJpY3QgaXQgdG8gMzIgYml0cyAod2hpY2ggaXMgYWxyZWFkeSB1bnNhZmVcbiAgICAgIC8vIGlmIHdlIGNvbnNpZGVyIHRoYXQgdGhlIG1heCBwb3NpdGl2ZSBudW1iZXIgc2FmZSByZWdhcmRpbmcgYml0IG9wZXJhdGlvbnMgaXMgMl4zMSAtIDEpXG4gICAgICB0aHJvdyBuZXcgSW5jaWRlbnQoXCJCaXRPdmVyZmxvd1wiLCBcIkNhbm5vdCByZWFkIGFib3ZlIDMyIGJpdHMgd2l0aG91dCBvdmVyZmxvd1wiKTtcbiAgICB9XG4gICAgd2hpbGUgKGJpdHMgPiAwKSB7XG4gICAgICBjb25zdCBhdmFpbGFibGVCaXRzOiBudW1iZXIgPSA4IC0gdGhpcy5iaXRQb3M7XG5cbiAgICAgIGNvbnN0IGNvbnN1bWVkQml0czogbnVtYmVyID0gTWF0aC5taW4oYXZhaWxhYmxlQml0cywgYml0cyk7XG4gICAgICBjb25zdCBjaHVuazogbnVtYmVyID0gKHZhbHVlID4+PiAoYml0cyAtIGNvbnN1bWVkQml0cykpICYgKCgxIDw8IGNvbnN1bWVkQml0cykgLSAxKTtcbiAgICAgIHRoaXMuYml0c0J1ZmZlciA9IHRoaXMuYml0c0J1ZmZlciB8IChjaHVuayA8PCAoYXZhaWxhYmxlQml0cyAtIGNvbnN1bWVkQml0cykpO1xuICAgICAgYml0cyAtPSBjb25zdW1lZEJpdHM7XG4gICAgICB0aGlzLmJpdFBvcyArPSBjb25zdW1lZEJpdHM7XG4gICAgICBpZiAodGhpcy5iaXRQb3MgPT09IDgpIHtcbiAgICAgICAgdGhpcy53cml0ZVVpbnQ4KHRoaXMuYml0c0J1ZmZlcik7XG4gICAgICAgIHRoaXMuYml0c0J1ZmZlciA9IDA7XG4gICAgICAgIHRoaXMuYml0UG9zID0gMDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHdyaXRlU2ludEJpdHMoYml0czogbnVtYmVyLCB2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHZhbHVlIDwgMCkge1xuICAgICAgdGhpcy53cml0ZVVpbnRCaXRzKGJpdHMsIDIgKiogYml0cyArIHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy53cml0ZVVpbnRCaXRzKGJpdHMsIHZhbHVlKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBGbG9hdDE2OlxuICogMSBzaWduIGJpdCAoUylcbiAqIDUgZXhwb25lbnQgYml0cyAoRSlcbiAqIDEwIGZyYWN0aW9uIGJpdHMgKEYpXG4gKlxuICogRm9ybWF0OiBTRUVFRUVGRkZGRkZGRkZGXG4gKi9cbmZ1bmN0aW9uIHJlaW50ZXJwcmV0RmxvYXQxNkFzVWludDE2KHZhbHVlOiBGbG9hdDE2KTogVWludDE2IHtcbiAgaWYgKGlzTmFOKHZhbHVlKSkge1xuICAgIHJldHVybiAweGZmZmY7XG4gIH1cbiAgY29uc3Qgc2lnbkJpdDogMCB8IDEgPSAodmFsdWUgPCAwIHx8IE9iamVjdC5pcyh2YWx1ZSwgLTApKSA/IDEgOiAwO1xuICB2YWx1ZSA9IE1hdGguYWJzKHZhbHVlKTtcbiAgaWYgKHZhbHVlIDwgTWF0aC5wb3coMiwgLTE0KSkge1xuICAgIGNvbnN0IGZyYWN0aW9uOiBVaW50MTYgPSBNYXRoLmZsb29yKHZhbHVlIC8gTWF0aC5wb3coMiwgLTI0KSk7XG4gICAgcmV0dXJuIChzaWduQml0IDw8IDE1KSB8IChmcmFjdGlvbiAmIDB4MDNmZik7XG4gIH1cbiAgY29uc3QgTUFYX0VYUE9ORU5UOiBudW1iZXIgPSAweDFmO1xuICBsZXQgZXhwb25lbnQ6IG51bWJlciA9IDE7XG4gIHdoaWxlIChleHBvbmVudCA8IE1BWF9FWFBPTkVOVCAmJiB2YWx1ZSA+PSBNYXRoLnBvdygyLCBleHBvbmVudCAtIDE0KSkge1xuICAgIGV4cG9uZW50Kys7XG4gIH1cbiAgaWYgKGV4cG9uZW50ID09PSBNQVhfRVhQT05FTlQpIHtcbiAgICByZXR1cm4gKHNpZ25CaXQgPDwgMTUpIHwgKE1BWF9FWFBPTkVOVCA8PCAxMCk7IC8vIEluZmluaXR5XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZnJhY3Rpb246IG51bWJlciA9IE1hdGguZmxvb3IoKHZhbHVlIC0gTWF0aC5wb3coMiwgZXhwb25lbnQgLSAxNSkpIC8gTWF0aC5wb3coMiwgZXhwb25lbnQgLSAyNSkpO1xuICAgIHJldHVybiAoc2lnbkJpdCA8PCAxNSkgfCAoZXhwb25lbnQgPDwgMTApIHwgKGZyYWN0aW9uICYgMHgwM2ZmKTtcbiAgfVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ== | ||
//# sourceMappingURL=data:application/json;charset=utf8;base64,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QUFPLFFBQVEsR0FBRyxZQUFZLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLFFBQVEsR0FBRyxFQUFFLENBQUMsRUFBRTtRQUNyRSxRQUFRLEVBQUUsQ0FBQztLQUNaO0lBQ0QsSUFBSSxRQUFRLEtBQUssWUFBWSxFQUFFO1FBQzdCLE9BQU8sQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxZQUFZLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXO0tBQzNEO1NBQU07UUFDTCxNQUFNLFFBQVEsR0FBVyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLFFBQVEsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLFFBQVEsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3ZHLE9BQU8sQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLENBQUM7S0FDakU7QUFDSCxDQUFDIiwiZmlsZSI6IndyaXRhYmxlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5jaWRlbnQgfSBmcm9tIFwiaW5jaWRlbnRcIjtcbmltcG9ydCB7IEZsb2F0MTYsIEZsb2F0MzIsIEZsb2F0NjQsIFNpbnQxNiwgU2ludDMyLCBTaW50OCwgVWludDE2LCBVaW50MzIsIFVpbnQ4LCBVaW50U2l6ZSB9IGZyb20gXCJzZW1hbnRpYy10eXBlc1wiO1xuaW1wb3J0IHsgY29uY2F0Qnl0ZXMgfSBmcm9tIFwiLi9jb25jYXQtYnl0ZXNcIjtcblxuY29uc3QgVVRGOF9FTkNPREVSOiBUZXh0RW5jb2RlciA9IG5ldyBUZXh0RW5jb2RlcigpO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBub24tYnl0ZS1hbGlnbmVkIHN0cmVhbVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdyaXRhYmxlQml0U3RyZWFtIHtcbiAgYnl0ZVBvczogVWludFNpemU7XG4gIGJpdFBvczogVWludFNpemU7XG5cbiAgYWxpZ24oKTogdm9pZDtcblxuICBhc0J5dGVTdHJlYW0oKTogV3JpdGFibGVCeXRlU3RyZWFtO1xuXG4gIHdyaXRlWmVyb3NCaXRzKG46IFVpbnRTaXplKTogdm9pZDtcblxuICB3cml0ZUJvb2xCaXRzKHZhbHVlOiBib29sZWFuKTogdm9pZDtcblxuICB3cml0ZVNpbnQxNkJpdHMobjogVWludFNpemUsIHZhbHVlOiBTaW50MTYpOiB2b2lkO1xuXG4gIHdyaXRlU2ludDMyQml0cyhuOiBVaW50U2l6ZSwgdmFsdWU6IFNpbnQzMik6IHZvaWQ7XG5cbiAgd3JpdGVVaW50MTZCaXRzKG46IFVpbnRTaXplLCB2YWx1ZTogVWludDE2KTogdm9pZDtcblxuICB3cml0ZVVpbnQzMkJpdHMobjogVWludFNpemUsIHZhbHVlOiBVaW50MzIpOiB2b2lkO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBieXRlLWFsaWduZWQgc3RyZWFtXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV3JpdGFibGVCeXRlU3RyZWFtIHtcbiAgYnl0ZVBvczogVWludFNpemU7XG5cbiAgd3JpdGVaZXJvcyhzaXplOiBVaW50U2l6ZSk6IHZvaWQ7XG5cbiAgYXNCaXRTdHJlYW0oKTogV3JpdGFibGVCaXRTdHJlYW07XG5cbiAgd3JpdGUodmFsdWU6IFdyaXRhYmxlQnl0ZVN0cmVhbSk6IHZvaWQ7XG5cbiAgd3JpdGVCeXRlcyh2YWx1ZTogVWludDhBcnJheSk6IHZvaWQ7XG5cbiAgd3JpdGVVdGY4KHZhbHVlOiBzdHJpbmcpOiB2b2lkO1xuXG4gIHdyaXRlTnVsVGVybWluYXRlZFV0ZjgodmFsdWU6IHN0cmluZyk6IHZvaWQ7XG5cbiAgd3JpdGVVaW50OCh2YWx1ZTogVWludDgpOiB2b2lkO1xuXG4gIHdyaXRlVWludDE2QkUodmFsdWU6IFVpbnQxNik6IHZvaWQ7XG5cbiAgd3JpdGVVaW50MTZMRSh2YWx1ZTogVWludDE2KTogdm9pZDtcblxuICB3cml0ZVVpbnQzMkJFKHZhbHVlOiBVaW50MzIpOiB2b2lkO1xuXG4gIHdyaXRlVWludDMyTEUodmFsdWU6IFVpbnQzMik6IHZvaWQ7XG5cbiAgd3JpdGVVaW50MzJMZWIxMjgodmFsdWU6IFVpbnQzMik6IHZvaWQ7XG5cbiAgd3JpdGVTaW50OCh2YWx1ZTogU2ludDgpOiB2b2lkO1xuXG4gIHdyaXRlU2ludDE2TEUodmFsdWU6IFNpbnQxNik6IHZvaWQ7XG5cbiAgd3JpdGVTaW50MzJMRSh2YWx1ZTogU2ludDMyKTogdm9pZDtcblxuICB3cml0ZUZsb2F0MTZCRSh2YWx1ZTogRmxvYXQxNik6IHZvaWQ7XG5cbiAgd3JpdGVGbG9hdDE2TEUodmFsdWU6IEZsb2F0MTYpOiB2b2lkO1xuXG4gIHdyaXRlRmxvYXQzMkJFKHZhbHVlOiBGbG9hdDMyKTogdm9pZDtcblxuICB3cml0ZUZsb2F0MzJMRSh2YWx1ZTogRmxvYXQzMik6IHZvaWQ7XG5cbiAgd3JpdGVGbG9hdDY0QkUodmFsdWU6IEZsb2F0NjQpOiB2b2lkO1xuXG4gIHdyaXRlRmxvYXQ2NExFKHZhbHVlOiBGbG9hdDY0KTogdm9pZDtcblxuICBnZXRCeXRlcygpOiBVaW50OEFycmF5O1xufVxuXG5jb25zdCBUTVBfQlVGRkVSOiBBcnJheUJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcig4KTtcbmNvbnN0IFRNUF9EQVRBX1ZJRVc6IERhdGFWaWV3ID0gbmV3IERhdGFWaWV3KFRNUF9CVUZGRVIpO1xuXG5leHBvcnQgY2xhc3MgV3JpdGFibGVTdHJlYW0gaW1wbGVtZW50cyBXcml0YWJsZUJpdFN0cmVhbSwgV3JpdGFibGVCeXRlU3RyZWFtIHtcbiAgYnl0ZVBvczogVWludFNpemU7XG4gIGJpdFBvczogVWludFNpemU7XG5cbiAgcHJpdmF0ZSBjaHVua3M6IFVpbnQ4QXJyYXlbXTtcbiAgcHJpdmF0ZSBiaXRzQnVmZmVyOiBVaW50ODtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmJ5dGVQb3MgPSAwO1xuICAgIHRoaXMuYml0UG9zID0gMDtcbiAgICB0aGlzLmJpdHNCdWZmZXIgPSAwO1xuICAgIHRoaXMuY2h1bmtzID0gW107XG4gIH1cblxuICBhc0JpdFN0cmVhbSgpOiB0aGlzIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGFzQnl0ZVN0cmVhbSgpOiB0aGlzIHtcbiAgICB0aGlzLmFsaWduKCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBhbGlnbigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5iaXRQb3MgIT09IDApIHtcbiAgICAgIHRoaXMud3JpdGVVaW50OCh0aGlzLmJpdHNCdWZmZXIpOyAvLyBJbmNyZW1lbnRzIGB0aGlzLmJ5dGVQb3NgXG4gICAgICB0aGlzLmJpdFBvcyA9IDA7XG4gICAgICB0aGlzLmJpdHNCdWZmZXIgPSAwO1xuICAgIH1cbiAgfVxuXG4gIHdyaXRlKHZhbHVlOiBXcml0YWJsZUJ5dGVTdHJlYW0pOiB2b2lkIHtcbiAgICB0aGlzLndyaXRlQnl0ZXModmFsdWUuZ2V0Qnl0ZXMoKSk7XG4gIH1cblxuICB3cml0ZUJ5dGVzKHZhbHVlOiBVaW50OEFycmF5KTogdm9pZCB7XG4gICAgdGhpcy5jaHVua3MucHVzaCh2YWx1ZSk7XG4gICAgdGhpcy5ieXRlUG9zICs9IHZhbHVlLmxlbmd0aDtcbiAgfVxuXG4gIHdyaXRlWmVyb3Moc2l6ZTogVWludFNpemUpOiB2b2lkIHtcbiAgICB0aGlzLmNodW5rcy5wdXNoKG5ldyBVaW50OEFycmF5KHNpemUpKTtcbiAgICB0aGlzLmJ5dGVQb3MgKz0gc2l6ZTtcbiAgfVxuXG4gIHdyaXRlWmVyb3NCaXRzKHNpemU6IFVpbnRTaXplKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYml0UG9zICsgc2l6ZSA8IDgpIHtcbiAgICAgIHRoaXMuYml0UG9zICs9IHNpemU7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy53cml0ZVVpbnQ4KHRoaXMuYml0c0J1ZmZlcik7XG4gICAgdGhpcy5iaXRzQnVmZmVyID0gMDtcbiAgICBzaXplIC09IDggLSB0aGlzLmJpdFBvcztcblxuICAgIGNvbnN0IGJpdFBvczogVWludFNpemUgPSBzaXplICUgODtcbiAgICB0aGlzLndyaXRlWmVyb3MoKHNpemUgLSBiaXRQb3MpIC8gOCk7XG4gICAgdGhpcy5iaXRQb3MgPSBiaXRQb3M7XG4gIH1cblxuICB3cml0ZVNpbnQ4KHZhbHVlOiBTaW50OCk6IHZvaWQge1xuICAgIHRoaXMud3JpdGVVaW50OCh2YWx1ZSA8IDAgPyAoMSA8PCA4KSArIHZhbHVlIDogdmFsdWUpO1xuICB9XG5cbiAgd3JpdGVTaW50MTZMRSh2YWx1ZTogU2ludDE2KTogdm9pZCB7XG4gICAgdGhpcy53cml0ZVVpbnQxNkxFKHZhbHVlIDwgMCA/ICgxIDw8IDE2KSArIHZhbHVlIDogdmFsdWUpO1xuICB9XG5cbiAgd3JpdGVTaW50MzJMRSh2YWx1ZTogU2ludDMyKTogdm9pZCB7XG4gICAgdGhpcy5jaHVua3MucHVzaChCdWZmZXIuZnJvbShbXG4gICAgICAodmFsdWUgPj4+IDApICYgMHhmZixcbiAgICAgICh2YWx1ZSA+Pj4gOCkgJiAweGZmLFxuICAgICAgKHZhbHVlID4+PiAxNikgJiAweGZmLFxuICAgICAgKHZhbHVlID4+PiAyNCkgJiAweGZmLFxuICAgIF0pKTtcbiAgICB0aGlzLmJ5dGVQb3MgKz0gNDtcbiAgfVxuXG4gIHdyaXRlVWludDgodmFsdWU6IFVpbnQ4KTogdm9pZCB7XG4gICAgdGhpcy5jaHVua3MucHVzaChCdWZmZXIuZnJvbShbdmFsdWUgJiAweGZmXSkpO1xuICAgIHRoaXMuYnl0ZVBvcysrO1xuICB9XG5cbiAgd3JpdGVVaW50MTZCRSh2YWx1ZTogVWludDE2KTogdm9pZCB7XG4gICAgdGhpcy5jaHVua3MucHVzaChCdWZmZXIuZnJvbShbXG4gICAgICAodmFsdWUgPj4+IDgpICYgMHhmZixcbiAgICAgICh2YWx1ZSA+Pj4gMCkgJiAweGZmLFxuICAgIF0pKTtcbiAgICB0aGlzLmJ5dGVQb3MgKz0gMjtcbiAgfVxuXG4gIHdyaXRlVWludDE2TEUodmFsdWU6IFVpbnQxNik6IHZvaWQge1xuICAgIHRoaXMuY2h1bmtzLnB1c2goQnVmZmVyLmZyb20oW1xuICAgICAgKHZhbHVlID4+PiAwKSAmIDB4ZmYsXG4gICAgICAodmFsdWUgPj4+IDgpICYgMHhmZixcbiAgICBdKSk7XG4gICAgdGhpcy5ieXRlUG9zICs9IDI7XG4gIH1cblxuICB3cml0ZVVpbnQzMkJFKHZhbHVlOiBVaW50MzIpOiB2b2lkIHtcbiAgICB0aGlzLmNodW5rcy5wdXNoKEJ1ZmZlci5mcm9tKFtcbiAgICAgICh2YWx1ZSA+Pj4gMjQpICYgMHhmZixcbiAgICAgICh2YWx1ZSA+Pj4gMTYpICYgMHhmZixcbiAgICAgICh2YWx1ZSA+Pj4gOCkgJiAweGZmLFxuICAgICAgKHZhbHVlID4+PiAwKSAmIDB4ZmYsXG4gICAgXSkpO1xuICAgIHRoaXMuYnl0ZVBvcyArPSA0O1xuICB9XG5cbiAgd3JpdGVVaW50MzJMRSh2YWx1ZTogVWludDMyKTogdm9pZCB7XG4gICAgdGhpcy53cml0ZVNpbnQzMkxFKHZhbHVlIHwgMCk7XG4gIH1cblxuICB3cml0ZUZsb2F0MTZCRSh2YWx1ZTogRmxvYXQxNik6IHZvaWQge1xuICAgIHRoaXMud3JpdGVVaW50MTZCRShyZWludGVycHJldEZsb2F0MTZBc1VpbnQxNih2YWx1ZSkpO1xuICB9XG5cbiAgd3JpdGVGbG9hdDE2TEUodmFsdWU6IEZsb2F0MTYpOiB2b2lkIHtcbiAgICB0aGlzLndyaXRlVWludDE2TEUocmVpbnRlcnByZXRGbG9hdDE2QXNVaW50MTYodmFsdWUpKTtcbiAgfVxuXG4gIHdyaXRlRmxvYXQzMkJFKHZhbHVlOiBGbG9hdDMyKTogdm9pZCB7XG4gICAgVE1QX0RBVEFfVklFVy5zZXRGbG9hdDMyKDAsIHZhbHVlLCBmYWxzZSk7XG4gICAgdGhpcy5jaHVua3MucHVzaChuZXcgVWludDhBcnJheShUTVBfQlVGRkVSLnNsaWNlKDAsIDQpKSk7XG4gICAgdGhpcy5ieXRlUG9zICs9IDQ7XG4gIH1cblxuICB3cml0ZUZsb2F0MzJMRSh2YWx1ZTogRmxvYXQzMik6IHZvaWQge1xuICAgIFRNUF9EQVRBX1ZJRVcuc2V0RmxvYXQzMigwLCB2YWx1ZSwgdHJ1ZSk7XG4gICAgdGhpcy5jaHVua3MucHVzaChuZXcgVWludDhBcnJheShUTVBfQlVGRkVSLnNsaWNlKDAsIDQpKSk7XG4gICAgdGhpcy5ieXRlUG9zICs9IDQ7XG4gIH1cblxuICB3cml0ZUZsb2F0NjRCRSh2YWx1ZTogRmxvYXQ2NCk6IHZvaWQge1xuICAgIFRNUF9EQVRBX1ZJRVcuc2V0RmxvYXQ2NCgwLCB2YWx1ZSwgZmFsc2UpO1xuICAgIHRoaXMuY2h1bmtzLnB1c2gobmV3IFVpbnQ4QXJyYXkoVE1QX0JVRkZFUi5zbGljZSgwLCA4KSkpO1xuICAgIHRoaXMuYnl0ZVBvcyArPSA4O1xuICB9XG5cbiAgd3JpdGVGbG9hdDY0TEUodmFsdWU6IEZsb2F0NjQpOiB2b2lkIHtcbiAgICBUTVBfREFUQV9WSUVXLnNldEZsb2F0NjQoMCwgdmFsdWUsIHRydWUpO1xuICAgIHRoaXMuY2h1bmtzLnB1c2gobmV3IFVpbnQ4QXJyYXkoVE1QX0JVRkZFUi5zbGljZSgwLCA4KSkpO1xuICAgIHRoaXMuYnl0ZVBvcyArPSA4O1xuICB9XG5cbiAgd3JpdGVCb29sQml0cyh2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHJldHVybiB0aGlzLndyaXRlVWludEJpdHMoMSwgdmFsdWUgPyAxIDogMCk7XG4gIH1cblxuICB3cml0ZVNpbnQxNkJpdHMobjogbnVtYmVyLCB2YWx1ZTogU2ludDE2KTogdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMud3JpdGVTaW50Qml0cyhuLCB2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogU0Jbbl1cbiAgICovXG4gIHdyaXRlU2ludDMyQml0cyhuOiBVaW50U2l6ZSwgdmFsdWU6IFNpbnQzMik6IHZvaWQge1xuICAgIHJldHVybiB0aGlzLndyaXRlU2ludEJpdHMobiwgdmFsdWUpO1xuICB9XG5cbiAgd3JpdGVVaW50MTZCaXRzKG46IFVpbnRTaXplLCB2YWx1ZTogVWludDE2KTogdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMud3JpdGVVaW50Qml0cyhuLCB2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogVUJbbl1cbiAgICovXG4gIHdyaXRlVWludDMyQml0cyhuOiBVaW50U2l6ZSwgdmFsdWU6IFVpbnQzMik6IHZvaWQge1xuICAgIHRoaXMud3JpdGVVaW50Qml0cyhuLCB2YWx1ZSk7XG4gIH1cblxuICB3cml0ZVVpbnQzMkxlYjEyOCh2YWx1ZTogVWludDMyKTogdm9pZCB7XG4gICAgY29uc3QgY2h1bms6IFVpbnQ4W10gPSBbXTtcbiAgICB3aGlsZSAodmFsdWUgIT09IDAgfHwgY2h1bmsubGVuZ3RoID09PSAwKSB7XG4gICAgICBsZXQgbmV4dEJ5dGU6IFVpbnQ4ID0gdmFsdWUgJSAweDgwOyAvLyB2YWx1ZSAmIDB4N2ZcbiAgICAgIHZhbHVlID0gKHZhbHVlIC0gbmV4dEJ5dGUpIC8gMHg4MDsgLy8gdmFsdWUgPj4gN1xuICAgICAgaWYgKHZhbHVlICE9PSAwKSB7XG4gICAgICAgIG5leHRCeXRlIHw9IDB4ODA7XG4gICAgICB9XG4gICAgICBjaHVuay5wdXNoKG5leHRCeXRlKTtcbiAgICB9XG4gICAgdGhpcy5jaHVua3MucHVzaChuZXcgVWludDhBcnJheShjaHVuaykpO1xuICAgIHRoaXMuYnl0ZVBvcyArPSBjaHVuay5sZW5ndGg7XG4gIH1cblxuICB3cml0ZVV0ZjgodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMud3JpdGVCeXRlcyhVVEY4X0VOQ09ERVIuZW5jb2RlKHZhbHVlKSk7XG4gIH1cblxuICB3cml0ZU51bFRlcm1pbmF0ZWRVdGY4KHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLndyaXRlQnl0ZXMoVVRGOF9FTkNPREVSLmVuY29kZSh2YWx1ZSkpO1xuICAgIHRoaXMud3JpdGVVaW50OCgwKTtcbiAgfVxuXG4gIGdldEJ5dGVzKCk6IFVpbnQ4QXJyYXkge1xuICAgIGNvbnN0IGJ5dGVzOiBVaW50OEFycmF5ID0gY29uY2F0Qnl0ZXModGhpcy5jaHVua3MpO1xuICAgIHRoaXMuY2h1bmtzID0gW2J5dGVzXTtcbiAgICByZXR1cm4gYnl0ZXM7XG4gIH1cblxuICBwcml2YXRlIHdyaXRlVWludEJpdHMoYml0czogbnVtYmVyLCB2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKGJpdHMgPiAzMikge1xuICAgICAgLy8gRXZlbiBpZiB3ZSBjb3VsZCByZWFkIHVwIHRvIDUzIGJpdHMsIHdlIHJlc3RyaWN0IGl0IHRvIDMyIGJpdHMgKHdoaWNoIGlzIGFscmVhZHkgdW5zYWZlXG4gICAgICAvLyBpZiB3ZSBjb25zaWRlciB0aGF0IHRoZSBtYXggcG9zaXRpdmUgbnVtYmVyIHNhZmUgcmVnYXJkaW5nIGJpdCBvcGVyYXRpb25zIGlzIDJeMzEgLSAxKVxuICAgICAgdGhyb3cgbmV3IEluY2lkZW50KFwiQml0T3ZlcmZsb3dcIiwgXCJDYW5ub3QgcmVhZCBhYm92ZSAzMiBiaXRzIHdpdGhvdXQgb3ZlcmZsb3dcIik7XG4gICAgfVxuICAgIHdoaWxlIChiaXRzID4gMCkge1xuICAgICAgY29uc3QgYXZhaWxhYmxlQml0czogbnVtYmVyID0gOCAtIHRoaXMuYml0UG9zO1xuXG4gICAgICBjb25zdCBjb25zdW1lZEJpdHM6IG51bWJlciA9IE1hdGgubWluKGF2YWlsYWJsZUJpdHMsIGJpdHMpO1xuICAgICAgY29uc3QgY2h1bms6IG51bWJlciA9ICh2YWx1ZSA+Pj4gKGJpdHMgLSBjb25zdW1lZEJpdHMpKSAmICgoMSA8PCBjb25zdW1lZEJpdHMpIC0gMSk7XG4gICAgICB0aGlzLmJpdHNCdWZmZXIgPSB0aGlzLmJpdHNCdWZmZXIgfCAoY2h1bmsgPDwgKGF2YWlsYWJsZUJpdHMgLSBjb25zdW1lZEJpdHMpKTtcbiAgICAgIGJpdHMgLT0gY29uc3VtZWRCaXRzO1xuICAgICAgdGhpcy5iaXRQb3MgKz0gY29uc3VtZWRCaXRzO1xuICAgICAgaWYgKHRoaXMuYml0UG9zID09PSA4KSB7XG4gICAgICAgIHRoaXMud3JpdGVVaW50OCh0aGlzLmJpdHNCdWZmZXIpO1xuICAgICAgICB0aGlzLmJpdHNCdWZmZXIgPSAwO1xuICAgICAgICB0aGlzLmJpdFBvcyA9IDA7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB3cml0ZVNpbnRCaXRzKGJpdHM6IG51bWJlciwgdmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICh2YWx1ZSA8IDApIHtcbiAgICAgIHRoaXMud3JpdGVVaW50Qml0cyhiaXRzLCAyICoqIGJpdHMgKyB2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMud3JpdGVVaW50Qml0cyhiaXRzLCB2YWx1ZSk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogRmxvYXQxNjpcbiAqIDEgc2lnbiBiaXQgKFMpXG4gKiA1IGV4cG9uZW50IGJpdHMgKEUpXG4gKiAxMCBmcmFjdGlvbiBiaXRzIChGKVxuICpcbiAqIEZvcm1hdDogU0VFRUVFRkZGRkZGRkZGRlxuICovXG5mdW5jdGlvbiByZWludGVycHJldEZsb2F0MTZBc1VpbnQxNih2YWx1ZTogRmxvYXQxNik6IFVpbnQxNiB7XG4gIGlmIChpc05hTih2YWx1ZSkpIHtcbiAgICByZXR1cm4gMHhmZmZmO1xuICB9XG4gIGNvbnN0IHNpZ25CaXQ6IDAgfCAxID0gKHZhbHVlIDwgMCB8fCBPYmplY3QuaXModmFsdWUsIC0wKSkgPyAxIDogMDtcbiAgdmFsdWUgPSBNYXRoLmFicyh2YWx1ZSk7XG4gIGlmICh2YWx1ZSA8IE1hdGgucG93KDIsIC0xNCkpIHtcbiAgICBjb25zdCBmcmFjdGlvbjogVWludDE2ID0gTWF0aC5mbG9vcih2YWx1ZSAvIE1hdGgucG93KDIsIC0yNCkpO1xuICAgIHJldHVybiAoc2lnbkJpdCA8PCAxNSkgfCAoZnJhY3Rpb24gJiAweDAzZmYpO1xuICB9XG4gIGNvbnN0IE1BWF9FWFBPTkVOVDogbnVtYmVyID0gMHgxZjtcbiAgbGV0IGV4cG9uZW50OiBudW1iZXIgPSAxO1xuICB3aGlsZSAoZXhwb25lbnQgPCBNQVhfRVhQT05FTlQgJiYgdmFsdWUgPj0gTWF0aC5wb3coMiwgZXhwb25lbnQgLSAxNCkpIHtcbiAgICBleHBvbmVudCsrO1xuICB9XG4gIGlmIChleHBvbmVudCA9PT0gTUFYX0VYUE9ORU5UKSB7XG4gICAgcmV0dXJuIChzaWduQml0IDw8IDE1KSB8IChNQVhfRVhQT05FTlQgPDwgMTApOyAvLyBJbmZpbml0eVxuICB9IGVsc2Uge1xuICAgIGNvbnN0IGZyYWN0aW9uOiBudW1iZXIgPSBNYXRoLmZsb29yKCh2YWx1ZSAtIE1hdGgucG93KDIsIGV4cG9uZW50IC0gMTUpKSAvIE1hdGgucG93KDIsIGV4cG9uZW50IC0gMjUpKTtcbiAgICByZXR1cm4gKHNpZ25CaXQgPDwgMTUpIHwgKGV4cG9uZW50IDw8IDEwKSB8IChmcmFjdGlvbiAmIDB4MDNmZik7XG4gIH1cbn1cbiJdLCJzb3VyY2VSb290IjoiIn0= |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
164117
2
17
2302
- Removedkryo@^0.7.0
- Removedts-tagged@^1.0.0
- Removed@types/bson@1.0.11(transitive)
- Removed@types/node@22.13.4(transitive)
- Removed@types/unorm@1.3.31(transitive)
- Removedbson@1.1.6(transitive)
- Removedkryo@0.7.0(transitive)
- Removedts-tagged@1.0.0(transitive)
- Removedundici-types@6.20.0(transitive)
- Removedunorm@1.6.0(transitive)
Updatedincident@^3.2.0