ag-psd 14.3.13 → 14.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +8 -0
- package/TODO +7 -0
- package/dist/abr.d.ts +3 -0
- package/dist/abr.js +72 -63
- package/dist/additionalInfo.js +638 -618
- package/dist/bundle.js +8091 -1275
- package/dist/csh.js +14 -14
- package/dist/descriptor.d.ts +7 -3
- package/dist/descriptor.js +119 -114
- package/dist/effectsHelpers.js +160 -140
- package/dist/engineData.js +4 -4
- package/dist/helpers.d.ts +2 -1
- package/dist/helpers.js +45 -14
- package/dist/imageResources.js +165 -165
- package/dist/index.js +15 -11
- package/dist/initializeCanvas.js +4 -4
- package/dist/jpeg.js +5 -5
- package/dist/psd.d.ts +10 -4
- package/dist/psd.js +1 -1
- package/dist/psdReader.d.ts +1 -0
- package/dist/psdReader.js +98 -79
- package/dist/psdWriter.js +68 -60
- package/dist/text.js +2 -2
- package/dist/utf8.js +2 -2
- package/dist-es/abr.d.ts +3 -0
- package/dist-es/abr.js +31 -22
- package/dist-es/additionalInfo.js +36 -16
- package/dist-es/descriptor.d.ts +7 -3
- package/dist-es/descriptor.js +30 -25
- package/dist-es/effectsHelpers.js +40 -20
- package/dist-es/engineData.js +4 -4
- package/dist-es/helpers.d.ts +2 -1
- package/dist-es/helpers.js +41 -11
- package/dist-es/imageResources.js +4 -4
- package/dist-es/jpeg.js +5 -5
- package/dist-es/psd.d.ts +10 -4
- package/dist-es/psd.js +1 -1
- package/dist-es/psdReader.d.ts +1 -0
- package/dist-es/psdReader.js +84 -66
- package/dist-es/psdWriter.js +62 -54
- package/dist-es/text.js +2 -2
- package/dist-es/utf8.js +2 -2
- package/package.json +7 -6
- package/tsconfig.json +1 -0
package/dist/jpeg.js
CHANGED
|
@@ -49,7 +49,7 @@ function requestMemoryAllocation(increaseAmount) {
|
|
|
49
49
|
var totalMemoryImpactBytes = totalBytesAllocated + increaseAmount;
|
|
50
50
|
if (totalMemoryImpactBytes > maxMemoryUsageBytes) {
|
|
51
51
|
var exceededAmount = Math.ceil((totalMemoryImpactBytes - maxMemoryUsageBytes) / 1024 / 1024);
|
|
52
|
-
throw new Error("Max memory limit exceeded by at least "
|
|
52
|
+
throw new Error("Max memory limit exceeded by at least ".concat(exceededAmount, "MB"));
|
|
53
53
|
}
|
|
54
54
|
totalBytesAllocated = totalMemoryImpactBytes;
|
|
55
55
|
}
|
|
@@ -104,7 +104,7 @@ function decodeScan(data, offset, frame, components, resetInterval, spectralStar
|
|
|
104
104
|
if (bitsData == 0xFF) {
|
|
105
105
|
var nextByte = data[offset++];
|
|
106
106
|
if (nextByte)
|
|
107
|
-
throw new Error("unexpected marker: "
|
|
107
|
+
throw new Error("unexpected marker: ".concat(((bitsData << 8) | nextByte).toString(16)));
|
|
108
108
|
// unstuff 0
|
|
109
109
|
}
|
|
110
110
|
bitsCount = 7;
|
|
@@ -714,7 +714,7 @@ function parse(data) {
|
|
|
714
714
|
var pixelsInFrame = frame.scanLines * frame.samplesPerLine;
|
|
715
715
|
if (pixelsInFrame > maxResolutionInPixels) {
|
|
716
716
|
var exceededAmount = Math.ceil((pixelsInFrame - maxResolutionInPixels) / 1e6);
|
|
717
|
-
throw new Error("maxResolutionInMP limit exceeded by "
|
|
717
|
+
throw new Error("maxResolutionInMP limit exceeded by ".concat(exceededAmount, "MP"));
|
|
718
718
|
}
|
|
719
719
|
var componentsCount = data[offset++];
|
|
720
720
|
for (var i = 0; i < componentsCount; i++) {
|
|
@@ -801,7 +801,7 @@ function parse(data) {
|
|
|
801
801
|
// Recover from malformed APP1 markers popular in some phone models.
|
|
802
802
|
// See https://github.com/eugeneware/jpeg-js/issues/82
|
|
803
803
|
if (malformedDataOffset !== -1) {
|
|
804
|
-
throw new Error("first unknown JPEG marker at offset "
|
|
804
|
+
throw new Error("first unknown JPEG marker at offset ".concat(malformedDataOffset.toString(16), ", second unknown JPEG marker ").concat(fileMarker.toString(16), " at offset ").concat((offset - 1).toString(16)));
|
|
805
805
|
}
|
|
806
806
|
malformedDataOffset = offset - 1;
|
|
807
807
|
var nextOffset = readUint16();
|
|
@@ -1020,4 +1020,4 @@ function decodeJpeg(encoded, createImageData) {
|
|
|
1020
1020
|
}
|
|
1021
1021
|
exports.decodeJpeg = decodeJpeg;
|
|
1022
1022
|
|
|
1023
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,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RyxHQUFDLENBQUM7Z0JBQ2YsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFDLENBQUM7Z0JBQ2YsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFDLENBQUM7Z0JBQ2YsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFDLENBQUM7Z0JBQ2YsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFDLENBQUM7Z0JBQ2YsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFDLENBQUM7Z0JBQ2YsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFDLENBQUM7Z0JBQ2YsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFDLENBQUM7Z0JBQ2YsU0FBUzthQUNWO1lBRUQsVUFBVTtZQUNWLElBQUksRUFBRSxHQUFHLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzVDLElBQUksRUFBRSxHQUFHLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzVDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7WUFDcEIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztZQUNwQixJQUFJLEVBQUUsR0FBRyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM3RCxJQUFJLEVBQUUsR0FBRyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcs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IGJhc2VkIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS9qcGVnLWpzL2pwZWctanNcclxuLypcclxuICAgQ29weXJpZ2h0IDIwMTEgbm90bWFzdGVyeWV0XHJcblxyXG4gICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xyXG4gICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXHJcbiAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxyXG5cclxuICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxyXG5cclxuICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxyXG4gICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXHJcbiAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxyXG4gICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXHJcbiAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxyXG4qL1xyXG5cclxuaW50ZXJmYWNlIERlY29kZWRDb21wb25lbnQge1xyXG4gIGxpbmVzOiBVaW50OEFycmF5W107XHJcbiAgc2NhbGVYOiBudW1iZXI7XHJcbiAgc2NhbGVZOiBudW1iZXI7XHJcbn1cclxuXHJcbmludGVyZmFjZSBEZWNvZGVkIHtcclxuICB3aWR0aDogbnVtYmVyO1xyXG4gIGhlaWdodDogbnVtYmVyO1xyXG4gIGNvbW1lbnRzOiBzdHJpbmdbXTtcclxuICBleGlmQnVmZmVyOiBVaW50OEFycmF5IHwgdW5kZWZpbmVkO1xyXG4gIGpmaWY6IGFueTtcclxuICBhZG9iZTogYW55O1xyXG4gIGNvbXBvbmVudHM6IERlY29kZWRDb21wb25lbnRbXTtcclxufVxyXG5cclxuaW50ZXJmYWNlIENvbXBvbmVudCB7XHJcbiAgaDogbnVtYmVyO1xyXG4gIHY6IG51bWJlcjtcclxuICBibG9ja3NQZXJMaW5lOiBudW1iZXI7XHJcbiAgYmxvY2tzUGVyQ29sdW1uOiBudW1iZXI7XHJcbiAgYmxvY2tzOiBJbnQzMkFycmF5W11bXTtcclxuICBwcmVkOiBudW1iZXI7IC8vID8/P1xyXG4gIHF1YW50aXphdGlvbklkeD86IG51bWJlcjtcclxuICBxdWFudGl6YXRpb25UYWJsZT86IEludDMyQXJyYXk7XHJcbiAgaHVmZm1hblRhYmxlREM/OiBudW1iZXJbXSB8IG51bWJlcltdW107XHJcbiAgaHVmZm1hblRhYmxlQUM/OiBudW1iZXJbXSB8IG51bWJlcltdW107XHJcbn1cclxuXHJcbmludGVyZmFjZSBGcmFtZSB7XHJcbiAgZXh0ZW5kZWQ6IGJvb2xlYW47XHJcbiAgcHJvZ3Jlc3NpdmU6IGJvb2xlYW47XHJcbiAgcHJlY2lzaW9uOiBudW1iZXI7XHJcbiAgc2NhbkxpbmVzOiBudW1iZXI7XHJcbiAgc2FtcGxlc1BlckxpbmU6IG51bWJlcjtcclxuICBjb21wb25lbnRzOiB7IFtrZXk6IG51bWJlcl06IENvbXBvbmVudDsgfTtcclxuICBjb21wb25lbnRzT3JkZXI6IG51bWJlcltdO1xyXG4gIG1heEg6IG51bWJlcjtcclxuICBtYXhWOiBudW1iZXI7XHJcbiAgbWN1c1BlckxpbmU6IG51bWJlcjtcclxuICBtY3VzUGVyQ29sdW1uOiBudW1iZXI7XHJcbn1cclxuXHJcbmNvbnN0IGRjdFppZ1phZyA9IG5ldyBJbnQzMkFycmF5KFtcclxuICAwLFxyXG4gIDEsIDgsXHJcbiAgMTYsIDksIDIsXHJcbiAgMywgMTAsIDE3LCAyNCxcclxuICAzMiwgMjUsIDE4LCAxMSwgNCxcclxuICA1LCAxMiwgMTksIDI2LCAzMywgNDAsXHJcbiAgNDgsIDQxLCAzNCwgMjcsIDIwLCAxMywgNixcclxuICA3LCAxNCwgMjEsIDI4LCAzNSwgNDIsIDQ5LCA1NixcclxuICA1NywgNTAsIDQzLCAzNiwgMjksIDIyLCAxNSxcclxuICAyMywgMzAsIDM3LCA0NCwgNTEsIDU4LFxyXG4gIDU5LCA1MiwgNDUsIDM4LCAzMSxcclxuICAzOSwgNDYsIDUzLCA2MCxcclxuICA2MSwgNTQsIDQ3LFxyXG4gIDU1LCA2MixcclxuICA2M1xyXG5dKTtcclxuY29uc3QgZGN0Q29zMSA9IDQwMTc7IC8vIGNvcyhwaS8xNilcclxuY29uc3QgZGN0U2luMSA9IDc5OTsgLy8gc2luKHBpLzE2KVxyXG5jb25zdCBkY3RDb3MzID0gMzQwNjsgLy8gY29zKDMqcGkvMTYpXHJcbmNvbnN0IGRjdFNpbjMgPSAyMjc2OyAvLyBzaW4oMypwaS8xNilcclxuY29uc3QgZGN0Q29zNiA9IDE1Njc7IC8vIGNvcyg2KnBpLzE2KVxyXG5jb25zdCBkY3RTaW42ID0gMzc4NDsgLy8gc2luKDYqcGkvMTYpXHJcbmNvbnN0IGRjdFNxcnQyID0gNTc5MzsgLy8gc3FydCgyKVxyXG5jb25zdCBkY3RTcXJ0MWQyID0gMjg5NjsgLy8gc3FydCgyKSAvIDJcclxuXHJcbmNvbnN0IG1heFJlc29sdXRpb25Jbk1QID0gMTAwOyAvLyBEb24ndCBkZWNvZGUgbW9yZSB0aGFuIDEwMCBtZWdhcGl4ZWxzXHJcbmNvbnN0IG1heE1lbW9yeVVzYWdlQnl0ZXMgPSA2NCAqIDEwMjQgKiAxMDI0OyAvLyBEb24ndCBkZWNvZGUgaWYgbWVtb3J5IGZvb3RwcmludCBpcyBtb3JlIHRoYW4gNjRNQlxyXG5sZXQgdG90YWxCeXRlc0FsbG9jYXRlZCA9IDA7IC8vIGF2b2lkIHVuZXhwZWN0ZWQgT09NcyBmcm9tIHVudHJ1c3RlZCBjb250ZW50LlxyXG5cclxuZnVuY3Rpb24gcmVxdWVzdE1lbW9yeUFsbG9jYXRpb24oaW5jcmVhc2VBbW91bnQ6IG51bWJlcikge1xyXG4gIGNvbnN0IHRvdGFsTWVtb3J5SW1wYWN0Qnl0ZXMgPSB0b3RhbEJ5dGVzQWxsb2NhdGVkICsgaW5jcmVhc2VBbW91bnQ7XHJcbiAgaWYgKHRvdGFsTWVtb3J5SW1wYWN0Qnl0ZXMgPiBtYXhNZW1vcnlVc2FnZUJ5dGVzKSB7XHJcbiAgICBjb25zdCBleGNlZWRlZEFtb3VudCA9IE1hdGguY2VpbCgodG90YWxNZW1vcnlJbXBhY3RCeXRlcyAtIG1heE1lbW9yeVVzYWdlQnl0ZXMpIC8gMTAyNCAvIDEwMjQpO1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKGBNYXggbWVtb3J5IGxpbWl0IGV4Y2VlZGVkIGJ5IGF0IGxlYXN0ICR7ZXhjZWVkZWRBbW91bnR9TUJgKTtcclxuICB9XHJcblxyXG4gIHRvdGFsQnl0ZXNBbGxvY2F0ZWQgPSB0b3RhbE1lbW9yeUltcGFjdEJ5dGVzO1xyXG59XHJcblxyXG5mdW5jdGlvbiBidWlsZEh1ZmZtYW5UYWJsZShjb2RlTGVuZ3RoczogVWludDhBcnJheSwgdmFsdWVzOiBVaW50OEFycmF5KSB7XHJcbiAgbGV0IGxlbmd0aCA9IDE2O1xyXG5cclxuICB3aGlsZSAobGVuZ3RoID4gMCAmJiAhY29kZUxlbmd0aHNbbGVuZ3RoIC0gMV0pIGxlbmd0aC0tO1xyXG5cclxuICBpbnRlcmZhY2UgQ29kZSB7XHJcbiAgICBjaGlsZHJlbjogbnVtYmVyW10gfCBudW1iZXJbXVtdO1xyXG4gICAgaW5kZXg6IG51bWJlcjtcclxuICB9XHJcblxyXG4gIGNvbnN0IGNvZGU6IENvZGVbXSA9IFt7IGNoaWxkcmVuOiBbXSwgaW5kZXg6IDAgfV07XHJcbiAgbGV0IGsgPSAwO1xyXG4gIGxldCBwID0gY29kZVswXTtcclxuXHJcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xyXG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBjb2RlTGVuZ3Roc1tpXTsgaisrKSB7XHJcbiAgICAgIHAgPSBjb2RlLnBvcCgpITtcclxuICAgICAgcC5jaGlsZHJlbltwLmluZGV4XSA9IHZhbHVlc1trXTtcclxuICAgICAgd2hpbGUgKHAuaW5kZXggPiAwKSB7XHJcbiAgICAgICAgaWYgKGNvZGUubGVuZ3RoID09PSAwKSB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCByZWNyZWF0ZSBIdWZmbWFuIFRhYmxlJyk7XHJcbiAgICAgICAgcCA9IGNvZGUucG9wKCkhO1xyXG4gICAgICB9XHJcbiAgICAgIHAuaW5kZXgrKztcclxuICAgICAgY29kZS5wdXNoKHApO1xyXG4gICAgICB3aGlsZSAoY29kZS5sZW5ndGggPD0gaSkge1xyXG4gICAgICAgIGNvbnN0IHE6IENvZGUgPSB7IGNoaWxkcmVuOiBbXSwgaW5kZXg6IDAgfTtcclxuICAgICAgICBjb2RlLnB1c2gocSk7XHJcbiAgICAgICAgcC5jaGlsZHJlbltwLmluZGV4XSA9IHEuY2hpbGRyZW4gYXMgbnVtYmVyW107XHJcbiAgICAgICAgcCA9IHE7XHJcbiAgICAgIH1cclxuICAgICAgaysrO1xyXG4gICAgfVxyXG4gICAgaWYgKGkgKyAxIDwgbGVuZ3RoKSB7XHJcbiAgICAgIC8vIHAgaGVyZSBwb2ludHMgdG8gbGFzdCBjb2RlXHJcbiAgICAgIGNvbnN0IHE6IENvZGUgPSB7IGNoaWxkcmVuOiBbXSwgaW5kZXg6IDAgfTtcclxuICAgICAgY29kZS5wdXNoKHEpO1xyXG4gICAgICBwLmNoaWxkcmVuW3AuaW5kZXhdID0gcS5jaGlsZHJlbiBhcyBudW1iZXJbXTtcclxuICAgICAgcCA9IHE7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gY29kZVswXS5jaGlsZHJlbjtcclxufVxyXG5cclxuZnVuY3Rpb24gZGVjb2RlU2NhbihcclxuICBkYXRhOiBVaW50OEFycmF5LCBvZmZzZXQ6IG51bWJlciwgZnJhbWU6IEZyYW1lLCBjb21wb25lbnRzOiBDb21wb25lbnRbXSwgcmVzZXRJbnRlcnZhbDogbnVtYmVyLFxyXG4gIHNwZWN0cmFsU3RhcnQ6IG51bWJlciwgc3BlY3RyYWxFbmQ6IG51bWJlciwgc3VjY2Vzc2l2ZVByZXY6IG51bWJlciwgc3VjY2Vzc2l2ZTogbnVtYmVyXHJcbikge1xyXG4gIGNvbnN0IG1jdXNQZXJMaW5lID0gZnJhbWUubWN1c1BlckxpbmU7XHJcbiAgY29uc3QgcHJvZ3Jlc3NpdmUgPSBmcmFtZS5wcm9ncmVzc2l2ZTtcclxuICBjb25zdCBzdGFydE9mZnNldCA9IG9mZnNldDtcclxuICBsZXQgYml0c0RhdGEgPSAwO1xyXG4gIGxldCBiaXRzQ291bnQgPSAwO1xyXG5cclxuICBmdW5jdGlvbiByZWFkQml0KCkge1xyXG4gICAgaWYgKGJpdHNDb3VudCA+IDApIHtcclxuICAgICAgYml0c0NvdW50LS07XHJcbiAgICAgIHJldHVybiAoYml0c0RhdGEgPj4gYml0c0NvdW50KSAmIDE7XHJcbiAgICB9XHJcblxyXG4gICAgYml0c0RhdGEgPSBkYXRhW29mZnNldCsrXTtcclxuXHJcbiAgICBpZiAoYml0c0RhdGEgPT0gMHhGRikge1xyXG4gICAgICBjb25zdCBuZXh0Qnl0ZSA9IGRhdGFbb2Zmc2V0KytdO1xyXG4gICAgICBpZiAobmV4dEJ5dGUpIHRocm93IG5ldyBFcnJvcihgdW5leHBlY3RlZCBtYXJrZXI6ICR7KChiaXRzRGF0YSA8PCA4KSB8IG5leHRCeXRlKS50b1N0cmluZygxNil9YCk7XHJcbiAgICAgIC8vIHVuc3R1ZmYgMFxyXG4gICAgfVxyXG5cclxuICAgIGJpdHNDb3VudCA9IDc7XHJcbiAgICByZXR1cm4gYml0c0RhdGEgPj4+IDc7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBkZWNvZGVIdWZmbWFuKHRyZWU6IG51bWJlcltdIHwgbnVtYmVyW11bXSkge1xyXG4gICAgbGV0IG5vZGU6IG51bWJlciB8IG51bWJlcltdIHwgbnVtYmVyW11bXSA9IHRyZWU7XHJcblxyXG4gICAgd2hpbGUgKHRydWUpIHtcclxuICAgICAgbm9kZSA9IG5vZGVbcmVhZEJpdCgpXTtcclxuICAgICAgaWYgKHR5cGVvZiBub2RlID09PSAnbnVtYmVyJykgcmV0dXJuIG5vZGU7XHJcbiAgICAgIGlmIChub2RlID09PSB1bmRlZmluZWQpIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBodWZmbWFuIHNlcXVlbmNlJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiByZWNlaXZlKGxlbmd0aDogbnVtYmVyKSB7XHJcbiAgICBsZXQgbiA9IDA7XHJcbiAgICB3aGlsZSAobGVuZ3RoID4gMCkge1xyXG4gICAgICBuID0gKG4gPDwgMSkgfCByZWFkQml0KCk7XHJcbiAgICAgIGxlbmd0aC0tO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG47XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiByZWNlaXZlQW5kRXh0ZW5kKGxlbmd0aDogbnVtYmVyKSB7XHJcbiAgICBsZXQgbiA9IHJlY2VpdmUobGVuZ3RoKTtcclxuICAgIGlmIChuID49IDEgPDwgKGxlbmd0aCAtIDEpKSByZXR1cm4gbjtcclxuICAgIHJldHVybiBuICsgKC0xIDw8IGxlbmd0aCkgKyAxO1xyXG4gIH1cclxuXHJcbiAgdHlwZSBEZWNvZGVGbiA9IChjb21wb25lbnQ6IENvbXBvbmVudCwgeno6IEludDMyQXJyYXkpID0+IHZvaWQ7XHJcblxyXG4gIGZ1bmN0aW9uIGRlY29kZUJhc2VsaW5lKGNvbXBvbmVudDogQ29tcG9uZW50LCB6ejogSW50MzJBcnJheSkge1xyXG4gICAgY29uc3QgdCA9IGRlY29kZUh1ZmZtYW4oY29tcG9uZW50Lmh1ZmZtYW5UYWJsZURDISk7XHJcbiAgICBjb25zdCBkaWZmID0gdCA9PT0gMCA/IDAgOiByZWNlaXZlQW5kRXh0ZW5kKHQpO1xyXG4gICAgenpbMF0gPSAoY29tcG9uZW50LnByZWQgKz0gZGlmZik7XHJcbiAgICBsZXQgayA9IDE7XHJcblxyXG4gICAgd2hpbGUgKGsgPCA2NCkge1xyXG4gICAgICBjb25zdCBycyA9IGRlY29kZUh1ZmZtYW4oY29tcG9uZW50Lmh1ZmZtYW5UYWJsZUFDISk7XHJcbiAgICAgIGNvbnN0IHMgPSBycyAmIDE1O1xyXG4gICAgICBjb25zdCByID0gcnMgPj4gNDtcclxuICAgICAgaWYgKHMgPT09IDApIHtcclxuICAgICAgICBpZiAociA8IDE1KSBicmVhaztcclxuICAgICAgICBrICs9IDE2O1xyXG4gICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGsgKz0gcjtcclxuICAgICAgY29uc3QgeiA9IGRjdFppZ1phZ1trXTtcclxuICAgICAgenpbel0gPSByZWNlaXZlQW5kRXh0ZW5kKHMpO1xyXG4gICAgICBrKys7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBkZWNvZGVEQ0ZpcnN0KGNvbXBvbmVudDogQ29tcG9uZW50LCB6ejogSW50MzJBcnJheSkge1xyXG4gICAgY29uc3QgdCA9IGRlY29kZUh1ZmZtYW4oY29tcG9uZW50Lmh1ZmZtYW5UYWJsZURDISk7XHJcbiAgICBjb25zdCBkaWZmID0gdCA9PT0gMCA/IDAgOiAocmVjZWl2ZUFuZEV4dGVuZCh0KSA8PCBzdWNjZXNzaXZlKTtcclxuICAgIHp6WzBdID0gKGNvbXBvbmVudC5wcmVkICs9IGRpZmYpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZGVjb2RlRENTdWNjZXNzaXZlKF9jb21wb25lbnQ6IENvbXBvbmVudCwgeno6IEludDMyQXJyYXkpIHtcclxuICAgIHp6WzBdIHw9IHJlYWRCaXQoKSA8PCBzdWNjZXNzaXZlO1xyXG4gIH1cclxuXHJcbiAgbGV0IGVvYnJ1biA9IDA7XHJcblxyXG4gIGZ1bmN0aW9uIGRlY29kZUFDRmlyc3QoY29tcG9uZW50OiBDb21wb25lbnQsIHp6OiBJbnQzMkFycmF5KSB7XHJcbiAgICBpZiAoZW9icnVuID4gMCkge1xyXG4gICAgICBlb2JydW4tLTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgbGV0IGsgPSBzcGVjdHJhbFN0YXJ0LCBlID0gc3BlY3RyYWxFbmQ7XHJcbiAgICB3aGlsZSAoayA8PSBlKSB7XHJcbiAgICAgIGNvbnN0IHJzID0gZGVjb2RlSHVmZm1hbihjb21wb25lbnQuaHVmZm1hblRhYmxlQUMhKTtcclxuICAgICAgY29uc3QgcyA9IHJzICYgMTU7XHJcbiAgICAgIGNvbnN0IHIgPSBycyA+PiA0O1xyXG4gICAgICBpZiAocyA9PT0gMCkge1xyXG4gICAgICAgIGlmIChyIDwgMTUpIHtcclxuICAgICAgICAgIGVvYnJ1biA9IHJlY2VpdmUocikgKyAoMSA8PCByKSAtIDE7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgayArPSAxNjtcclxuICAgICAgICBjb250aW51ZTtcclxuICAgICAgfVxyXG4gICAgICBrICs9IHI7XHJcbiAgICAgIGNvbnN0IHogPSBkY3RaaWdaYWdba107XHJcbiAgICAgIHp6W3pdID0gcmVjZWl2ZUFuZEV4dGVuZChzKSAqICgxIDw8IHN1Y2Nlc3NpdmUpO1xyXG4gICAgICBrKys7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBsZXQgc3VjY2Vzc2l2ZUFDU3RhdGUgPSAwO1xyXG4gIGxldCBzdWNjZXNzaXZlQUNOZXh0VmFsdWUgPSAwO1xyXG5cclxuICBmdW5jdGlvbiBkZWNvZGVBQ1N1Y2Nlc3NpdmUoY29tcG9uZW50OiBDb21wb25lbnQsIHp6OiBJbnQzMkFycmF5KSB7XHJcbiAgICBsZXQgayA9IHNwZWN0cmFsU3RhcnQ7XHJcbiAgICBsZXQgZSA9IHNwZWN0cmFsRW5kO1xyXG4gICAgbGV0IHIgPSAwO1xyXG5cclxuICAgIHdoaWxlIChrIDw9IGUpIHtcclxuICAgICAgY29uc3QgeiA9IGRjdFppZ1phZ1trXTtcclxuICAgICAgY29uc3QgZGlyZWN0aW9uID0genpbel0gPCAwID8gLTEgOiAxO1xyXG5cclxuICAgICAgc3dpdGNoIChzdWNjZXNzaXZlQUNTdGF0ZSkge1xyXG4gICAgICAgIGNhc2UgMDogLy8gaW5pdGlhbCBzdGF0ZVxyXG4gICAgICAgICAgY29uc3QgcnMgPSBkZWNvZGVIdWZmbWFuKGNvbXBvbmVudC5odWZmbWFuVGFibGVBQyEpO1xyXG4gICAgICAgICAgY29uc3QgcyA9IHJzICYgMTU7XHJcbiAgICAgICAgICByID0gcnMgPj4gNDsgLy8gdGhpcyB3YXMgbmV3IHZhcmlhYmxlIGluIG9sZCBjb2RlXHJcbiAgICAgICAgICBpZiAocyA9PT0gMCkge1xyXG4gICAgICAgICAgICBpZiAociA8IDE1KSB7XHJcbiAgICAgICAgICAgICAgZW9icnVuID0gcmVjZWl2ZShyKSArICgxIDw8IHIpO1xyXG4gICAgICAgICAgICAgIHN1Y2Nlc3NpdmVBQ1N0YXRlID0gNDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICByID0gMTY7XHJcbiAgICAgICAgICAgICAgc3VjY2Vzc2l2ZUFDU3RhdGUgPSAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAocyAhPT0gMSkgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIEFDbiBlbmNvZGluZycpO1xyXG4gICAgICAgICAgICBzdWNjZXNzaXZlQUNOZXh0VmFsdWUgPSByZWNlaXZlQW5kRXh0ZW5kKHMpO1xyXG4gICAgICAgICAgICBzdWNjZXNzaXZlQUNTdGF0ZSA9IHIgPyAyIDogMztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIGNhc2UgMTogLy8gc2tpcHBpbmcgciB6ZXJvIGl0ZW1zXHJcbiAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgaWYgKHp6W3pdKSB7XHJcbiAgICAgICAgICAgIHp6W3pdICs9IChyZWFkQml0KCkgPDwgc3VjY2Vzc2l2ZSkgKiBkaXJlY3Rpb247XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByLS07XHJcbiAgICAgICAgICAgIGlmIChyID09PSAwKSBzdWNjZXNzaXZlQUNTdGF0ZSA9IHN1Y2Nlc3NpdmVBQ1N0YXRlID09IDIgPyAzIDogMDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgMzogLy8gc2V0IHZhbHVlIGZvciBhIHplcm8gaXRlbVxyXG4gICAgICAgICAgaWYgKHp6W3pdKSB7XHJcbiAgICAgICAgICAgIHp6W3pdICs9IChyZWFkQml0KCkgPDwgc3VjY2Vzc2l2ZSkgKiBkaXJlY3Rpb247XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB6elt6XSA9IHN1Y2Nlc3NpdmVBQ05leHRWYWx1ZSA8PCBzdWNjZXNzaXZlO1xyXG4gICAgICAgICAgICBzdWNjZXNzaXZlQUNTdGF0ZSA9IDA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDQ6IC8vIGVvYlxyXG4gICAgICAgICAgaWYgKHp6W3pdKSB7XHJcbiAgICAgICAgICAgIHp6W3pdICs9IChyZWFkQml0KCkgPDwgc3VjY2Vzc2l2ZSkgKiBkaXJlY3Rpb247XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBrKys7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHN1Y2Nlc3NpdmVBQ1N0YXRlID09PSA0KSB7XHJcbiAgICAgIGVvYnJ1bi0tO1xyXG4gICAgICBpZiAoZW9icnVuID09PSAwKSBzdWNjZXNzaXZlQUNTdGF0ZSA9IDA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBkZWNvZGVNY3UoY29tcG9uZW50OiBDb21wb25lbnQsIGRlY29kZTogRGVjb2RlRm4sIG1jdTogbnVtYmVyLCByb3c6IG51bWJlciwgY29sOiBudW1iZXIpIHtcclxuICAgIGNvbnN0IG1jdVJvdyA9IChtY3UgLyBtY3VzUGVyTGluZSkgfCAwO1xyXG4gICAgY29uc3QgbWN1Q29sID0gbWN1ICUgbWN1c1BlckxpbmU7XHJcbiAgICBjb25zdCBibG9ja1JvdyA9IG1jdVJvdyAqIGNvbXBvbmVudC52ICsgcm93O1xyXG4gICAgY29uc3QgYmxvY2tDb2wgPSBtY3VDb2wgKiBjb21wb25lbnQuaCArIGNvbDtcclxuICAgIC8vIElmIHRoZSBibG9jayBpcyBtaXNzaW5nLCBqdXN0IHNraXAgaXQuXHJcbiAgICBpZiAoY29tcG9uZW50LmJsb2Nrc1tibG9ja1Jvd10gPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xyXG4gICAgZGVjb2RlKGNvbXBvbmVudCwgY29tcG9uZW50LmJsb2Nrc1tibG9ja1Jvd11bYmxvY2tDb2xdKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGRlY29kZUJsb2NrKGNvbXBvbmVudDogQ29tcG9uZW50LCBkZWNvZGU6IERlY29kZUZuLCBtY3U6IG51bWJlcikge1xyXG4gICAgY29uc3QgYmxvY2tSb3cgPSAobWN1IC8gY29tcG9uZW50LmJsb2Nrc1BlckxpbmUpIHwgMDtcclxuICAgIGNvbnN0IGJsb2NrQ29sID0gbWN1ICUgY29tcG9uZW50LmJsb2Nrc1BlckxpbmU7XHJcbiAgICAvLyBJZiB0aGUgYmxvY2sgaXMgbWlzc2luZywganVzdCBza2lwIGl0LlxyXG4gICAgaWYgKGNvbXBvbmVudC5ibG9ja3NbYmxvY2tSb3ddID09PSB1bmRlZmluZWQpIHJldHVybjtcclxuICAgIGRlY29kZShjb21wb25lbnQsIGNvbXBvbmVudC5ibG9ja3NbYmxvY2tSb3ddW2Jsb2NrQ29sXSk7XHJcbiAgfVxyXG5cclxuICBjb25zdCBjb21wb25lbnRzTGVuZ3RoID0gY29tcG9uZW50cy5sZW5ndGg7XHJcbiAgbGV0IGNvbXBvbmVudDogQ29tcG9uZW50O1xyXG4gIGxldCBkZWNvZGVGbjogRGVjb2RlRm47XHJcblxyXG4gIGlmIChwcm9ncmVzc2l2ZSkge1xyXG4gICAgaWYgKHNwZWN0cmFsU3RhcnQgPT09IDApIHtcclxuICAgICAgZGVjb2RlRm4gPSBzdWNjZXNzaXZlUHJldiA9PT0gMCA/IGRlY29kZURDRmlyc3QgOiBkZWNvZGVEQ1N1Y2Nlc3NpdmU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBkZWNvZGVGbiA9IHN1Y2Nlc3NpdmVQcmV2ID09PSAwID8gZGVjb2RlQUNGaXJzdCA6IGRlY29kZUFDU3VjY2Vzc2l2ZTtcclxuICAgIH1cclxuICB9IGVsc2Uge1xyXG4gICAgZGVjb2RlRm4gPSBkZWNvZGVCYXNlbGluZTtcclxuICB9XHJcblxyXG4gIGxldCBtY3UgPSAwO1xyXG4gIGxldCBtY3VFeHBlY3RlZDogbnVtYmVyO1xyXG5cclxuICBpZiAoY29tcG9uZW50c0xlbmd0aCA9PSAxKSB7XHJcbiAgICBtY3VFeHBlY3RlZCA9IGNvbXBvbmVudHNbMF0uYmxvY2tzUGVyTGluZSAqIGNvbXBvbmVudHNbMF0uYmxvY2tzUGVyQ29sdW1uO1xyXG4gIH0gZWxzZSB7XHJcbiAgICBtY3VFeHBlY3RlZCA9IG1jdXNQZXJMaW5lICogZnJhbWUubWN1c1BlckNvbHVtbjtcclxuICB9XHJcblxyXG4gIGlmICghcmVzZXRJbnRlcnZhbCkgcmVzZXRJbnRlcnZhbCA9IG1jdUV4cGVjdGVkO1xyXG5cclxuICBsZXQgaDogbnVtYmVyO1xyXG4gIGxldCB2OiBudW1iZXI7XHJcbiAgbGV0IG1hcmtlcjogbnVtYmVyO1xyXG5cclxuICB3aGlsZSAobWN1IDwgbWN1RXhwZWN0ZWQpIHtcclxuICAgIC8vIHJlc2V0IGludGVydmFsIHN0dWZmXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbXBvbmVudHNMZW5ndGg7IGkrKykgY29tcG9uZW50c1tpXS5wcmVkID0gMDtcclxuICAgIGVvYnJ1biA9IDA7XHJcblxyXG4gICAgaWYgKGNvbXBvbmVudHNMZW5ndGggPT0gMSkge1xyXG4gICAgICBjb21wb25lbnQgPSBjb21wb25lbnRzWzBdO1xyXG4gICAgICBmb3IgKGxldCBuID0gMDsgbiA8IHJlc2V0SW50ZXJ2YWw7IG4rKykge1xyXG4gICAgICAgIGRlY29kZUJsb2NrKGNvbXBvbmVudCwgZGVjb2RlRm4sIG1jdSk7XHJcbiAgICAgICAgbWN1Kys7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGZvciAobGV0IG4gPSAwOyBuIDwgcmVzZXRJbnRlcnZhbDsgbisrKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb21wb25lbnRzTGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGNvbXBvbmVudCA9IGNvbXBvbmVudHNbaV07XHJcbiAgICAgICAgICBoID0gY29tcG9uZW50Lmg7XHJcbiAgICAgICAgICB2ID0gY29tcG9uZW50LnY7XHJcbiAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHY7IGorKykge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IGg7IGsrKykge1xyXG4gICAgICAgICAgICAgIGRlY29kZU1jdShjb21wb25lbnQsIGRlY29kZUZuLCBtY3UsIGosIGspO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG1jdSsrO1xyXG5cclxuICAgICAgICAvLyBJZiB3ZSd2ZSByZWFjaGVkIG91ciBleHBlY3RlZCBNQ1Uncywgc3RvcCBkZWNvZGluZ1xyXG4gICAgICAgIGlmIChtY3UgPT09IG1jdUV4cGVjdGVkKSBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChtY3UgPT09IG1jdUV4cGVjdGVkKSB7XHJcbiAgICAgIC8vIFNraXAgdHJhaWxpbmcgYnl0ZXMgYXQgdGhlIGVuZCBvZiB0aGUgc2NhbiAtIHVudGlsIHdlIHJlYWNoIHRoZSBuZXh0IG1hcmtlclxyXG4gICAgICBkbyB7XHJcbiAgICAgICAgaWYgKGRhdGFbb2Zmc2V0XSA9PT0gMHhGRikge1xyXG4gICAgICAgICAgaWYgKGRhdGFbb2Zmc2V0ICsgMV0gIT09IDB4MDApIHtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG9mZnNldCArPSAxO1xyXG4gICAgICB9IHdoaWxlIChvZmZzZXQgPCBkYXRhLmxlbmd0aCAtIDIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGZpbmQgbWFya2VyXHJcbiAgICBiaXRzQ291bnQgPSAwO1xyXG4gICAgbWFya2VyID0gKGRhdGFbb2Zmc2V0XSA8PCA4KSB8IGRhdGFbb2Zmc2V0ICsgMV07XHJcblxyXG4gICAgaWYgKG1hcmtlciA8IDB4RkYwMCkgdGhyb3cgbmV3IEVycm9yKCdtYXJrZXIgd2FzIG5vdCBmb3VuZCcpO1xyXG5cclxuICAgIGlmIChtYXJrZXIgPj0gMHhGRkQwICYmIG1hcmtlciA8PSAweEZGRDcpIHsgLy8gUlNUeFxyXG4gICAgICBvZmZzZXQgKz0gMjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIG9mZnNldCAtIHN0YXJ0T2Zmc2V0O1xyXG59XHJcblxyXG5mdW5jdGlvbiBidWlsZENvbXBvbmVudERhdGEoY29tcG9uZW50OiBDb21wb25lbnQpIHtcclxuICBjb25zdCBsaW5lcyA9IFtdO1xyXG4gIGNvbnN0IGJsb2Nrc1BlckxpbmUgPSBjb21wb25lbnQuYmxvY2tzUGVyTGluZTtcclxuICBjb25zdCBibG9ja3NQZXJDb2x1bW4gPSBjb21wb25lbnQuYmxvY2tzUGVyQ29sdW1uO1xyXG4gIGNvbnN0IHNhbXBsZXNQZXJMaW5lID0gYmxvY2tzUGVyTGluZSA8PCAzO1xyXG4gIC8vIE9ubHkgMSB1c2VkIHBlciBpbnZvY2F0aW9uIG9mIHRoaXMgZnVuY3Rpb24gYW5kIGdhcmJhZ2UgY29sbGVjdGVkIGFmdGVyIGludm9jYXRpb24sIHNvIG5vIG5lZWQgdG8gYWNjb3VudCBmb3IgaXRzIG1lbW9yeSBmb290cHJpbnQuXHJcbiAgY29uc3QgUiA9IG5ldyBJbnQzMkFycmF5KDY0KTtcclxuICBjb25zdCByID0gbmV3IFVpbnQ4QXJyYXkoNjQpO1xyXG5cclxuICAvLyBBIHBvcnQgb2YgcG9wcGxlcidzIElEQ1QgbWV0aG9kIHdoaWNoIGluIHR1cm4gaXMgdGFrZW4gZnJvbTpcclxuICAvLyAgIENocmlzdG9waCBMb2VmZmxlciwgQWRyaWFhbiBMaWd0ZW5iZXJnLCBHZW9yZ2UgUy4gTW9zY2h5dHosXHJcbiAgLy8gICBcIlByYWN0aWNhbCBGYXN0IDEtRCBEQ1QgQWxnb3JpdGhtcyB3aXRoIDExIE11bHRpcGxpY2F0aW9uc1wiLFxyXG4gIC8vICAgSUVFRSBJbnRsLiBDb25mLiBvbiBBY291c3RpY3MsIFNwZWVjaCAmIFNpZ25hbCBQcm9jZXNzaW5nLCAxOTg5LFxyXG4gIC8vICAgOTg4LTk5MS5cclxuICBmdW5jdGlvbiBxdWFudGl6ZUFuZEludmVyc2Uoeno6IEludDMyQXJyYXksIGRhdGFPdXQ6IFVpbnQ4QXJyYXksIGRhdGFJbjogSW50MzJBcnJheSkge1xyXG4gICAgY29uc3QgcXQgPSBjb21wb25lbnQucXVhbnRpemF0aW9uVGFibGUhO1xyXG4gICAgY29uc3QgcCA9IGRhdGFJbjtcclxuXHJcbiAgICAvLyBkZXF1YW50XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDY0OyBpKyspIHtcclxuICAgICAgcFtpXSA9IHp6W2ldICogcXRbaV07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gaW52ZXJzZSBEQ1Qgb24gcm93c1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCA4OyArK2kpIHtcclxuICAgICAgY29uc3Qgcm93ID0gOCAqIGk7XHJcblxyXG4gICAgICAvLyBjaGVjayBmb3IgYWxsLXplcm8gQUMgY29lZmZpY2llbnRzXHJcbiAgICAgIGlmIChwWzEgKyByb3ddID09IDAgJiYgcFsyICsgcm93XSA9PSAwICYmIHBbMyArIHJvd10gPT0gMCAmJlxyXG4gICAgICAgIHBbNCArIHJvd10gPT0gMCAmJiBwWzUgKyByb3ddID09IDAgJiYgcFs2ICsgcm93XSA9PSAwICYmXHJcbiAgICAgICAgcFs3ICsgcm93XSA9PSAwKSB7XHJcbiAgICAgICAgY29uc3QgdCA9IChkY3RTcXJ0MiAqIHBbMCArIHJvd10gKyA1MTIpID4+IDEwO1xyXG4gICAgICAgIHBbMCArIHJvd10gPSB0O1xyXG4gICAgICAgIHBbMSArIHJvd10gPSB0O1xyXG4gICAgICAgIHBbMiArIHJvd10gPSB0O1xyXG4gICAgICAgIHBbMyArIHJvd10gPSB0O1xyXG4gICAgICAgIHBbNCArIHJvd10gPSB0O1xyXG4gICAgICAgIHBbNSArIHJvd10gPSB0O1xyXG4gICAgICAgIHBbNiArIHJvd10gPSB0O1xyXG4gICAgICAgIHBbNyArIHJvd10gPSB0O1xyXG4gICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBzdGFnZSA0XHJcbiAgICAgIGxldCB2MCA9IChkY3RTcXJ0MiAqIHBbMCArIHJvd10gKyAxMjgpID4+IDg7XHJcbiAgICAgIGxldCB2MSA9IChkY3RTcXJ0MiAqIHBbNCArIHJvd10gKyAxMjgpID4+IDg7XHJcbiAgICAgIGxldCB2MiA9IHBbMiArIHJvd107XHJcbiAgICAgIGxldCB2MyA9IHBbNiArIHJvd107XHJcbiAgICAgIGxldCB2NCA9IChkY3RTcXJ0MWQyICogKHBbMSArIHJvd10gLSBwWzcgKyByb3ddKSArIDEyOCkgPj4gODtcclxuICAgICAgbGV0IHY3ID0gKGRjdFNxcnQxZDIgKiAocFsxICsgcm93XSArIHBbNyArIHJvd10pICsgMTI4KSA+PiA4O1xyXG4gICAgICBsZXQgdjUgPSBwWzMgKyByb3ddIDw8IDQ7XHJcbiAgICAgIGxldCB2NiA9IHBbNSArIHJvd10gPDwgNDtcclxuXHJcbiAgICAgIC8vIHN0YWdlIDNcclxuICAgICAgbGV0IHQgPSAodjAgLSB2MSArIDEpID4+IDE7XHJcbiAgICAgIHYwID0gKHYwICsgdjEgKyAxKSA+PiAxO1xyXG4gICAgICB2MSA9IHQ7XHJcbiAgICAgIHQgPSAodjIgKiBkY3RTaW42ICsgdjMgKiBkY3RDb3M2ICsgMTI4KSA+PiA4O1xyXG4gICAgICB2MiA9ICh2MiAqIGRjdENvczYgLSB2MyAqIGRjdFNpbjYgKyAxMjgpID4+IDg7XHJcbiAgICAgIHYzID0gdDtcclxuICAgICAgdCA9ICh2NCAtIHY2ICsgMSkgPj4gMTtcclxuICAgICAgdjQgPSAodjQgKyB2NiArIDEpID4+IDE7XHJcbiAgICAgIHY2ID0gdDtcclxuICAgICAgdCA9ICh2NyArIHY1ICsgMSkgPj4gMTtcclxuICAgICAgdjUgPSAodjcgLSB2NSArIDEpID4+IDE7XHJcbiAgICAgIHY3ID0gdDtcclxuXHJcbiAgICAgIC8vIHN0YWdlIDJcclxuICAgICAgdCA9ICh2MCAtIHYzICsgMSkgPj4gMTtcclxuICAgICAgdjAgPSAodjAgKyB2MyArIDEpID4+IDE7XHJcbiAgICAgIHYzID0gdDtcclxuICAgICAgdCA9ICh2MSAtIHYyICsgMSkgPj4gMTtcclxuICAgICAgdjEgPSAodjEgKyB2MiArIDEpID4+IDE7XHJcbiAgICAgIHYyID0gdDtcclxuICAgICAgdCA9ICh2NCAqIGRjdFNpbjMgKyB2NyAqIGRjdENvczMgKyAyMDQ4KSA+PiAxMjtcclxuICAgICAgdjQgPSAodjQgKiBkY3RDb3MzIC0gdjcgKiBkY3RTaW4zICsgMjA0OCkgPj4gMTI7XHJcbiAgICAgIHY3ID0gdDtcclxuICAgICAgdCA9ICh2NSAqIGRjdFNpbjEgKyB2NiAqIGRjdENvczEgKyAyMDQ4KSA+PiAxMjtcclxuICAgICAgdjUgPSAodjUgKiBkY3RDb3MxIC0gdjYgKiBkY3RTaW4xICsgMjA0OCkgPj4gMTI7XHJcbiAgICAgIHY2ID0gdDtcclxuXHJcbiAgICAgIC8vIHN0YWdlIDFcclxuICAgICAgcFswICsgcm93XSA9IHYwICsgdjc7XHJcbiAgICAgIHBbNyArIHJvd10gPSB2MCAtIHY3O1xyXG4gICAgICBwWzEgKyByb3ddID0gdjEgKyB2NjtcclxuICAgICAgcFs2ICsgcm93XSA9IHYxIC0gdjY7XHJcbiAgICAgIHBbMiArIHJvd10gPSB2MiArIHY1O1xyXG4gICAgICBwWzUgKyByb3ddID0gdjIgLSB2NTtcclxuICAgICAgcFszICsgcm93XSA9IHYzICsgdjQ7XHJcbiAgICAgIHBbNCArIHJvd10gPSB2MyAtIHY0O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGludmVyc2UgRENUIG9uIGNvbHVtbnNcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgODsgKytpKSB7XHJcbiAgICAgIGNvbnN0IGNvbCA9IGk7XHJcblxyXG4gICAgICAvLyBjaGVjayBmb3IgYWxsLXplcm8gQUMgY29lZmZpY2llbnRzXHJcbiAgICAgIGlmIChwWzEgKiA4ICsgY29sXSA9PSAwICYmIHBbMiAqIDggKyBjb2xdID09IDAgJiYgcFszICogOCArIGNvbF0gPT0gMCAmJlxyXG4gICAgICAgIHBbNCAqIDggKyBjb2xdID09IDAgJiYgcFs1ICogOCArIGNvbF0gPT0gMCAmJiBwWzYgKiA4ICsgY29sXSA9PSAwICYmXHJcbiAgICAgICAgcFs3ICogOCArIGNvbF0gPT0gMCkge1xyXG4gICAgICAgIGNvbnN0IHQgPSAoZGN0U3FydDIgKiBkYXRhSW5baSArIDBdICsgODE5MikgPj4gMTQ7XHJcbiAgICAgICAgcFswICogOCArIGNvbF0gPSB0O1xyXG4gICAgICAgIHBbMSAqIDggKyBjb2xdID0gdDtcclxuICAgICAgICBwWzIgKiA4ICsgY29sXSA9IHQ7XHJcbiAgICAgICAgcFszICogOCArIGNvbF0gPSB0O1xyXG4gICAgICAgIHBbNCAqIDggKyBjb2xdID0gdDtcclxuICAgICAgICBwWzUgKiA4ICsgY29sXSA9IHQ7XHJcbiAgICAgICAgcFs2ICogOCArIGNvbF0gPSB0O1xyXG4gICAgICAgIHBbNyAqIDggKyBjb2xdID0gdDtcclxuICAgICAgICBjb250aW51ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gc3RhZ2UgNFxyXG4gICAgICBsZXQgdjAgPSAoZGN0U3FydDIgKiBwWzAgKiA4ICsgY29sXSArIDIwNDgpID4+IDEyO1xyXG4gICAgICBsZXQgdjEgPSAoZGN0U3FydDIgKiBwWzQgKiA4ICsgY29sXSArIDIwNDgpID4+IDEyO1xyXG4gICAgICBsZXQgdjIgPSBwWzIgKiA4ICsgY29sXTtcclxuICAgICAgbGV0IHYzID0gcFs2ICogOCArIGNvbF07XHJcbiAgICAgIGxldCB2NCA9IChkY3RTcXJ0MWQyICogKHBbMSAqIDggKyBjb2xdIC0gcFs3ICogOCArIGNvbF0pICsgMjA0OCkgPj4gMTI7XHJcbiAgICAgIGxldCB2NyA9IChkY3RTcXJ0MWQyICogKHBbMSAqIDggKyBjb2xdICsgcFs3ICogOCArIGNvbF0pICsgMjA0OCkgPj4gMTI7XHJcbiAgICAgIGxldCB2NSA9IHBbMyAqIDggKyBjb2xdO1xyXG4gICAgICBsZXQgdjYgPSBwWzUgKiA4ICsgY29sXTtcclxuXHJcbiAgICAgIC8vIHN0YWdlIDNcclxuICAgICAgbGV0IHQgPSAodjAgLSB2MSArIDEpID4+IDE7XHJcbiAgICAgIHYwID0gKHYwICsgdjEgKyAxKSA+PiAxO1xyXG4gICAgICB2MSA9IHQ7XHJcbiAgICAgIHQgPSAodjIgKiBkY3RTaW42ICsgdjMgKiBkY3RDb3M2ICsgMjA0OCkgPj4gMTI7XHJcbiAgICAgIHYyID0gKHYyICogZGN0Q29zNiAtIHYzICogZGN0U2luNiArIDIwNDgpID4+IDEyO1xyXG4gICAgICB2MyA9IHQ7XHJcbiAgICAgIHQgPSAodjQgLSB2NiArIDEpID4+IDE7XHJcbiAgICAgIHY0ID0gKHY0ICsgdjYgKyAxKSA+PiAxO1xyXG4gICAgICB2NiA9IHQ7XHJcbiAgICAgIHQgPSAodjcgKyB2NSArIDEpID4+IDE7XHJcbiAgICAgIHY1ID0gKHY3IC0gdjUgKyAxKSA+PiAxO1xyXG4gICAgICB2NyA9IHQ7XHJcblxyXG4gICAgICAvLyBzdGFnZSAyXHJcbiAgICAgIHQgPSAodjAgLSB2MyArIDEpID4+IDE7XHJcbiAgICAgIHYwID0gKHYwICsgdjMgKyAxKSA+PiAxO1xyXG4gICAgICB2MyA9IHQ7XHJcbiAgICAgIHQgPSAodjEgLSB2MiArIDEpID4+IDE7XHJcbiAgICAgIHYxID0gKHYxICsgdjIgKyAxKSA+PiAxO1xyXG4gICAgICB2MiA9IHQ7XHJcbiAgICAgIHQgPSAodjQgKiBkY3RTaW4zICsgdjcgKiBkY3RDb3MzICsgMjA0OCkgPj4gMTI7XHJcbiAgICAgIHY0ID0gKHY0ICogZGN0Q29zMyAtIHY3ICogZGN0U2luMyArIDIwNDgpID4+IDEyO1xyXG4gICAgICB2NyA9IHQ7XHJcbiAgICAgIHQgPSAodjUgKiBkY3RTaW4xICsgdjYgKiBkY3RDb3MxICsgMjA0OCkgPj4gMTI7XHJcbiAgICAgIHY1ID0gKHY1ICogZGN0Q29zMSAtIHY2ICogZGN0U2luMSArIDIwNDgpID4+IDEyO1xyXG4gICAgICB2NiA9IHQ7XHJcblxyXG4gICAgICAvLyBzdGFnZSAxXHJcbiAgICAgIHBbMCAqIDggKyBjb2xdID0gdjAgKyB2NztcclxuICAgICAgcFs3ICogOCArIGNvbF0gPSB2MCAtIHY3O1xyXG4gICAgICBwWzEgKiA4ICsgY29sXSA9IHYxICsgdjY7XHJcbiAgICAgIHBbNiAqIDggKyBjb2xdID0gdjEgLSB2NjtcclxuICAgICAgcFsyICogOCArIGNvbF0gPSB2MiArIHY1O1xyXG4gICAgICBwWzUgKiA4ICsgY29sXSA9IHYyIC0gdjU7XHJcbiAgICAgIHBbMyAqIDggKyBjb2xdID0gdjMgKyB2NDtcclxuICAgICAgcFs0ICogOCArIGNvbF0gPSB2MyAtIHY0O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGNvbnZlcnQgdG8gOC1iaXQgaW50ZWdlcnNcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNjQ7ICsraSkge1xyXG4gICAgICBjb25zdCBzYW1wbGUgPSAxMjggKyAoKHBbaV0gKyA4KSA+PiA0KTtcclxuICAgICAgZGF0YU91dFtpXSA9IHNhbXBsZSA8IDAgPyAwIDogc2FtcGxlID4gMHhGRiA/IDB4RkYgOiBzYW1wbGU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXF1ZXN0TWVtb3J5QWxsb2NhdGlvbihzYW1wbGVzUGVyTGluZSAqIGJsb2Nrc1BlckNvbHVtbiAqIDgpO1xyXG5cclxuICBmb3IgKGxldCBibG9ja1JvdyA9IDA7IGJsb2NrUm93IDwgYmxvY2tzUGVyQ29sdW1uOyBibG9ja1JvdysrKSB7XHJcbiAgICBjb25zdCBzY2FuTGluZSA9IGJsb2NrUm93IDw8IDM7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCA4OyBpKyspXHJcbiAgICAgIGxpbmVzLnB1c2gobmV3IFVpbnQ4QXJyYXkoc2FtcGxlc1BlckxpbmUpKTtcclxuXHJcbiAgICBmb3IgKGxldCBibG9ja0NvbCA9IDA7IGJsb2NrQ29sIDwgYmxvY2tzUGVyTGluZTsgYmxvY2tDb2wrKykge1xyXG4gICAgICBxdWFudGl6ZUFuZEludmVyc2UoY29tcG9uZW50LmJsb2Nrc1tibG9ja1Jvd11bYmxvY2tDb2xdLCByLCBSKTtcclxuXHJcbiAgICAgIGxldCBvZmZzZXQgPSAwO1xyXG4gICAgICBjb25zdCBzYW1wbGUgPSBibG9ja0NvbCA8PCAzO1xyXG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IDg7IGorKykge1xyXG4gICAgICAgIGNvbnN0IGxpbmUgPSBsaW5lc1tzY2FuTGluZSArIGpdO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgODsgaSsrKVxyXG4gICAgICAgICAgbGluZVtzYW1wbGUgKyBpXSA9IHJbb2Zmc2V0KytdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiBsaW5lcztcclxufVxyXG5cclxuZnVuY3Rpb24gY2xhbXBUbzhiaXQoYTogbnVtYmVyKSB7XHJcbiAgcmV0dXJuIGEgPCAwID8gMCA6IGEgPiAyNTUgPyAyNTUgOiBhO1xyXG59XHJcblxyXG5mdW5jdGlvbiBwYXJzZShkYXRhOiBVaW50OEFycmF5KSB7XHJcbiAgY29uc3Qgc2VsZjogRGVjb2RlZCA9IHtcclxuICAgIHdpZHRoOiAwLFxyXG4gICAgaGVpZ2h0OiAwLFxyXG4gICAgY29tbWVudHM6IFtdLFxyXG4gICAgYWRvYmU6IHVuZGVmaW5lZCxcclxuICAgIGNvbXBvbmVudHM6IFtdLFxyXG4gICAgZXhpZkJ1ZmZlcjogdW5kZWZpbmVkLFxyXG4gICAgamZpZjogdW5kZWZpbmVkLFxyXG4gIH07XHJcblxyXG4gIGNvbnN0IG1heFJlc29sdXRpb25JblBpeGVscyA9IG1heFJlc29sdXRpb25Jbk1QICogMTAwMCAqIDEwMDA7XHJcbiAgbGV0IG9mZnNldCA9IDA7XHJcblxyXG4gIGZ1bmN0aW9uIHJlYWRVaW50MTYoKSB7XHJcbiAgICBjb25zdCB2YWx1ZSA9IChkYXRhW29mZnNldF0gPDwgOCkgfCBkYXRhW29mZnNldCArIDFdO1xyXG4gICAgb2Zmc2V0ICs9IDI7XHJcbiAgICByZXR1cm4gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiByZWFkRGF0YUJsb2NrKCkge1xyXG4gICAgY29uc3QgbGVuZ3RoID0gcmVhZFVpbnQxNigpO1xyXG4gICAgY29uc3QgYXJyYXkgPSBkYXRhLnN1YmFycmF5KG9mZnNldCwgb2Zmc2V0ICsgbGVuZ3RoIC0gMik7XHJcbiAgICBvZmZzZXQgKz0gYXJyYXkubGVuZ3RoO1xyXG4gICAgcmV0dXJuIGFycmF5O1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gcHJlcGFyZUNvbXBvbmVudHMoZnJhbWU6IEZyYW1lKSB7XHJcbiAgICBsZXQgbWF4SCA9IDAsIG1heFYgPSAwO1xyXG5cclxuICAgIGZvciAobGV0IGNvbXBvbmVudElkIGluIGZyYW1lLmNvbXBvbmVudHMpIHtcclxuICAgICAgaWYgKGZyYW1lLmNvbXBvbmVudHMuaGFzT3duUHJvcGVydHkoY29tcG9uZW50SWQpKSB7XHJcbiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gZnJhbWUuY29tcG9uZW50c1tjb21wb25lbnRJZF07XHJcbiAgICAgICAgaWYgKG1heEggPCBjb21wb25lbnQuaCkgbWF4SCA9IGNvbXBvbmVudC5oO1xyXG4gICAgICAgIGlmIChtYXhWIDwgY29tcG9uZW50LnYpIG1heFYgPSBjb21wb25lbnQudjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG1jdXNQZXJMaW5lID0gTWF0aC5jZWlsKGZyYW1lLnNhbXBsZXNQZXJMaW5lIC8gOCAvIG1heEgpO1xyXG4gICAgY29uc3QgbWN1c1BlckNvbHVtbiA9IE1hdGguY2VpbChmcmFtZS5zY2FuTGluZXMgLyA4IC8gbWF4Vik7XHJcblxyXG4gICAgZm9yIChsZXQgY29tcG9uZW50SWQgaW4gZnJhbWUuY29tcG9uZW50cykge1xyXG4gICAgICBpZiAoZnJhbWUuY29tcG9uZW50cy5oYXNPd25Qcm9wZXJ0eShjb21wb25lbnRJZCkpIHtcclxuICAgICAgICBjb25zdCBjb21wb25lbnQgPSBmcmFtZS5jb21wb25lbnRzW2NvbXBvbmVudElkXTtcclxuICAgICAgICBjb25zdCBibG9ja3NQZXJMaW5lID0gTWF0aC5jZWlsKE1hdGguY2VpbChmcmFtZS5zYW1wbGVzUGVyTGluZSAvIDgpICogY29tcG9uZW50LmggLyBtYXhIKTtcclxuICAgICAgICBjb25zdCBibG9ja3NQZXJDb2x1bW4gPSBNYXRoLmNlaWwoTWF0aC5jZWlsKGZyYW1lLnNjYW5MaW5lcyAvIDgpICogY29tcG9uZW50LnYgLyBtYXhWKTtcclxuICAgICAgICBjb25zdCBibG9ja3NQZXJMaW5lRm9yTWN1ID0gbWN1c1BlckxpbmUgKiBjb21wb25lbnQuaDtcclxuICAgICAgICBjb25zdCBibG9ja3NQZXJDb2x1bW5Gb3JNY3UgPSBtY3VzUGVyQ29sdW1uICogY29tcG9uZW50LnY7XHJcbiAgICAgICAgY29uc3QgYmxvY2tzVG9BbGxvY2F0ZSA9IGJsb2Nrc1BlckNvbHVtbkZvck1jdSAqIGJsb2Nrc1BlckxpbmVGb3JNY3U7XHJcbiAgICAgICAgY29uc3QgYmxvY2tzOiBJbnQzMkFycmF5W11bXSA9IFtdO1xyXG5cclxuICAgICAgICAvLyBFYWNoIGJsb2NrIGlzIGEgSW50MzJBcnJheSBvZiBsZW5ndGggNjQgKDQgeCA2NCA9IDI1NiBieXRlcylcclxuICAgICAgICByZXF1ZXN0TWVtb3J5QWxsb2NhdGlvbihibG9ja3NUb0FsbG9jYXRlICogMjU2KTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBibG9ja3NQZXJDb2x1bW5Gb3JNY3U7IGkrKykge1xyXG4gICAgICAgICAgY29uc3Qgcm93OiBJbnQzMkFycmF5W10gPSBbXTtcclxuICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgYmxvY2tzUGVyTGluZUZvck1jdTsgaisrKSB7XHJcbiAgICAgICAgICAgIHJvdy5wdXNoKG5ldyBJbnQzMkFycmF5KDY0KSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBibG9ja3MucHVzaChyb3cpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb21wb25lbnQuYmxvY2tzUGVyTGluZSA9IGJsb2Nrc1BlckxpbmU7XHJcbiAgICAgICAgY29tcG9uZW50LmJsb2Nrc1BlckNvbHVtbiA9IGJsb2Nrc1BlckNvbHVtbjtcclxuICAgICAgICBjb21wb25lbnQuYmxvY2tzID0gYmxvY2tzO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnJhbWUubWF4SCA9IG1heEg7XHJcbiAgICBmcmFtZS5tYXhWID0gbWF4VjtcclxuICAgIGZyYW1lLm1jdXNQZXJMaW5lID0gbWN1c1BlckxpbmU7XHJcbiAgICBmcmFtZS5tY3VzUGVyQ29sdW1uID0gbWN1c1BlckNvbHVtbjtcclxuICB9XHJcblxyXG4gIGxldCBqZmlmID0gbnVsbDtcclxuICBsZXQgYWRvYmUgPSBudWxsO1xyXG4gIGxldCBmcmFtZTogRnJhbWUgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XHJcbiAgbGV0IHJlc2V0SW50ZXJ2YWwgPSAwO1xyXG4gIGxldCBxdWFudGl6YXRpb25UYWJsZXMgPSBbXTtcclxuICBsZXQgZnJhbWVzOiBGcmFtZVtdID0gW107XHJcbiAgbGV0IGh1ZmZtYW5UYWJsZXNBQzogKG51bWJlcltdIHwgbnVtYmVyW11bXSlbXSA9IFtdO1xyXG4gIGxldCBodWZmbWFuVGFibGVzREM6IChudW1iZXJbXSB8IG51bWJlcltdW10pW10gPSBbXTtcclxuICBsZXQgZmlsZU1hcmtlciA9IHJlYWRVaW50MTYoKTtcclxuICBsZXQgbWFsZm9ybWVkRGF0YU9mZnNldCA9IC0xO1xyXG5cclxuICBpZiAoZmlsZU1hcmtlciAhPSAweEZGRDgpIHsgLy8gU09JIChTdGFydCBvZiBJbWFnZSlcclxuICAgIHRocm93IG5ldyBFcnJvcignU09JIG5vdCBmb3VuZCcpO1xyXG4gIH1cclxuXHJcbiAgZmlsZU1hcmtlciA9IHJlYWRVaW50MTYoKTtcclxuICB3aGlsZSAoZmlsZU1hcmtlciAhPSAweEZGRDkpIHsgLy8gRU9JIChFbmQgb2YgaW1hZ2UpXHJcbiAgICBzd2l0Y2ggKGZpbGVNYXJrZXIpIHtcclxuICAgICAgY2FzZSAweEZGMDA6IGJyZWFrO1xyXG4gICAgICBjYXNlIDB4RkZFMDogLy8gQVBQMCAoQXBwbGljYXRpb24gU3BlY2lmaWMpXHJcbiAgICAgIGNhc2UgMHhGRkUxOiAvLyBBUFAxXHJcbiAgICAgIGNhc2UgMHhGRkUyOiAvLyBBUFAyXHJcbiAgICAgIGNhc2UgMHhGRkUzOiAvLyBBUFAzXHJcbiAgICAgIGNhc2UgMHhGRkU0OiAvLyBBUFA0XHJcbiAgICAgIGNhc2UgMHhGRkU1OiAvLyBBUFA1XHJcbiAgICAgIGNhc2UgMHhGRkU2OiAvLyBBUFA2XHJcbiAgICAgIGNhc2UgMHhGRkU3OiAvLyBBUFA3XHJcbiAgICAgIGNhc2UgMHhGRkU4OiAvLyBBUFA4XHJcbiAgICAgIGNhc2UgMHhGRkU5OiAvLyBBUFA5XHJcbiAgICAgIGNhc2UgMHhGRkVBOiAvLyBBUFAxMFxyXG4gICAgICBjYXNlIDB4RkZFQjogLy8gQVBQMTFcclxuICAgICAgY2FzZSAweEZGRUM6IC8vIEFQUDEyXHJcbiAgICAgIGNhc2UgMHhGRkVEOiAvLyBBUFAxM1xyXG4gICAgICBjYXNlIDB4RkZFRTogLy8gQVBQMTRcclxuICAgICAgY2FzZSAweEZGRUY6IC8vIEFQUDE1XHJcbiAgICAgIGNhc2UgMHhGRkZFOiB7IC8vIENPTSAoQ29tbWVudClcclxuICAgICAgICBjb25zdCBhcHBEYXRhID0gcmVhZERhdGFCbG9jaygpO1xyXG5cclxuICAgICAgICBpZiAoZmlsZU1hcmtlciA9PT0gMHhGRkZFKSB7XHJcbiAgICAgICAgICBsZXQgY29tbWVudCA9ICcnO1xyXG4gICAgICAgICAgZm9yIChsZXQgaWkgPSAwOyBpaSA8IGFwcERhdGEuYnl0ZUxlbmd0aDsgaWkrKykge1xyXG4gICAgICAgICAgICBjb21tZW50ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYXBwRGF0YVtpaV0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgc2VsZi5jb21tZW50cy5wdXNoKGNvbW1lbnQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGZpbGVNYXJrZXIgPT09IDB4RkZFMCkge1xyXG4gICAgICAgICAgaWYgKGFwcERhdGFbMF0gPT09IDB4NEEgJiYgYXBwRGF0YVsxXSA9PT0gMHg0NiAmJiBhcHBEYXRhWzJdID09PSAweDQ5ICYmXHJcbiAgICAgICAgICAgIGFwcERhdGFbM10gPT09IDB4NDYgJiYgYXBwRGF0YVs0XSA9PT0gMCkgeyAvLyAnSkZJRlxceDAwJ1xyXG4gICAgICAgICAgICBqZmlmID0ge1xyXG4gICAgICAgICAgICAgIHZlcnNpb246IHsgbWFqb3I6IGFwcERhdGFbNV0sIG1pbm9yOiBhcHBEYXRhWzZdIH0sXHJcbiAgICAgICAgICAgICAgZGVuc2l0eVVuaXRzOiBhcHBEYXRhWzddLFxyXG4gICAgICAgICAgICAgIHhEZW5zaXR5OiAoYXBwRGF0YVs4XSA8PCA4KSB8IGFwcERhdGFbOV0sXHJcbiAgICAgICAgICAgICAgeURlbnNpdHk6IChhcHBEYXRhWzEwXSA8PCA4KSB8IGFwcERhdGFbMTFdLFxyXG4gICAgICAgICAgICAgIHRodW1iV2lkdGg6IGFwcERhdGFbMTJdLFxyXG4gICAgICAgICAgICAgIHRodW1iSGVpZ2h0OiBhcHBEYXRhWzEzXSxcclxuICAgICAgICAgICAgICB0aHVtYkRhdGE6IGFwcERhdGEuc3ViYXJyYXkoMTQsIDE0ICsgMyAqIGFwcERhdGFbMTJdICogYXBwRGF0YVsxM10pXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIFRPRE8gQVBQMSAtIEV4aWZcclxuICAgICAgICBpZiAoZmlsZU1hcmtlciA9PT0gMHhGRkUxKSB7XHJcbiAgICAgICAgICBpZiAoYXBwRGF0YVswXSA9PT0gMHg0NSAmJlxyXG4gICAgICAgICAgICBhcHBEYXRhWzFdID09PSAweDc4ICYmXHJcbiAgICAgICAgICAgIGFwcERhdGFbMl0gPT09IDB4NjkgJiZcclxuICAgICAgICAgICAgYXBwRGF0YVszXSA9PT0gMHg2NiAmJlxyXG4gICAgICAgICAgICBhcHBEYXRhWzRdID09PSAwKSB7IC8vICdFWElGXFx4MDAnXHJcbiAgICAgICAgICAgIHNlbGYuZXhpZkJ1ZmZlciA9IGFwcERhdGEuc3ViYXJyYXkoNSwgYXBwRGF0YS5sZW5ndGgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGZpbGVNYXJrZXIgPT09IDB4RkZFRSkge1xyXG4gICAgICAgICAgaWYgKGFwcERhdGFbMF0gPT09IDB4NDEgJiYgYXBwRGF0YVsxXSA9PT0gMHg2NCAmJiBhcHBEYXRhWzJdID09PSAweDZGICYmXHJcbiAgICAgICAgICAgIGFwcERhdGFbM10gPT09IDB4NjIgJiYgYXBwRGF0YVs0XSA9PT0gMHg2NSAmJiBhcHBEYXRhWzVdID09PSAwKSB7IC8vICdBZG9iZVxceDAwJ1xyXG4gICAgICAgICAgICBhZG9iZSA9IHtcclxuICAgICAgICAgICAgICB2ZXJzaW9uOiBhcHBEYXRhWzZdLFxyXG4gICAgICAgICAgICAgIGZsYWdzMDogKGFwcERhdGFbN10gPDwgOCkgfCBhcHBEYXRhWzhdLFxyXG4gICAgICAgICAgICAgIGZsYWdzMTogKGFwcERhdGFbOV0gPDwgOCkgfCBhcHBEYXRhWzEwXSxcclxuICAgICAgICAgICAgICB0cmFuc2Zvcm1Db2RlOiBhcHBEYXRhWzExXVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlIDB4RkZEQjogeyAvLyBEUVQgKERlZmluZSBRdWFudGl6YXRpb24gVGFibGVzKVxyXG4gICAgICAgIGNvbnN0IHF1YW50aXphdGlvblRhYmxlc0xlbmd0aCA9IHJlYWRVaW50MTYoKTtcclxuICAgICAgICBjb25zdCBxdWFudGl6YXRpb25UYWJsZXNFbmQgPSBxdWFudGl6YXRpb25UYWJsZXNMZW5ndGggKyBvZmZzZXQgLSAyO1xyXG4gICAgICAgIHdoaWxlIChvZmZzZXQgPCBxdWFudGl6YXRpb25UYWJsZXNFbmQpIHtcclxuICAgICAgICAgIGNvbnN0IHF1YW50aXphdGlvblRhYmxlU3BlYyA9IGRhdGFbb2Zmc2V0KytdO1xyXG4gICAgICAgICAgcmVxdWVzdE1lbW9yeUFsbG9jYXRpb24oNjQgKiA0KTtcclxuICAgICAgICAgIGNvbnN0IHRhYmxlRGF0YSA9IG5ldyBJbnQzMkFycmF5KDY0KTtcclxuICAgICAgICAgIGlmICgocXVhbnRpemF0aW9uVGFibGVTcGVjID4+IDQpID09PSAwKSB7IC8vIDggYml0IHZhbHVlc1xyXG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IDY0OyBqKyspIHtcclxuICAgICAgICAgICAgICBjb25zdCB6ID0gZGN0WmlnWmFnW2pdO1xyXG4gICAgICAgICAgICAgIHRhYmxlRGF0YVt6XSA9IGRhdGFbb2Zmc2V0KytdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKChxdWFudGl6YXRpb25UYWJsZVNwZWMgPj4gNCkgPT09IDEpIHsgLy8xNiBiaXRcclxuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCA2NDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgeiA9IGRjdFppZ1phZ1tqXTtcclxuICAgICAgICAgICAgICB0YWJsZURhdGFbel0gPSByZWFkVWludDE2KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RRVDogaW52YWxpZCB0YWJsZSBzcGVjJyk7XHJcbiAgICAgICAgICBxdWFudGl6YXRpb25UYWJsZXNbcXVhbnRpemF0aW9uVGFibGVTcGVjICYgMTVdID0gdGFibGVEYXRhO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlIDB4RkZDMDogLy8gU09GMCAoU3RhcnQgb2YgRnJhbWUsIEJhc2VsaW5lIERDVClcclxuICAgICAgY2FzZSAweEZGQzE6IC8vIFNPRjEgKFN0YXJ0IG9mIEZyYW1lLCBFeHRlbmRlZCBEQ1QpXHJcbiAgICAgIGNhc2UgMHhGRkMyOiB7IC8vIFNPRjIgKFN0YXJ0IG9mIEZyYW1lLCBQcm9ncmVzc2l2ZSBEQ1QpXHJcbiAgICAgICAgcmVhZFVpbnQxNigpOyAvLyBza2lwIGRhdGEgbGVuZ3RoXHJcbiAgICAgICAgZnJhbWUgPSB7XHJcbiAgICAgICAgICBleHRlbmRlZDogKGZpbGVNYXJrZXIgPT09IDB4RkZDMSksXHJcbiAgICAgICAgICBwcm9ncmVzc2l2ZTogKGZpbGVNYXJrZXIgPT09IDB4RkZDMiksXHJcbiAgICAgICAgICBwcmVjaXNpb246IGRhdGFbb2Zmc2V0KytdLFxyXG4gICAgICAgICAgc2NhbkxpbmVzOiByZWFkVWludDE2KCksXHJcbiAgICAgICAgICBzYW1wbGVzUGVyTGluZTogcmVhZFVpbnQxNigpLFxyXG4gICAgICAgICAgY29tcG9uZW50czoge30sXHJcbiAgICAgICAgICBjb21wb25lbnRzT3JkZXI6IFtdLFxyXG4gICAgICAgICAgbWF4SDogMCxcclxuICAgICAgICAgIG1heFY6IDAsXHJcbiAgICAgICAgICBtY3VzUGVyTGluZTogMCxcclxuICAgICAgICAgIG1jdXNQZXJDb2x1bW46IDAsXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY29uc3QgcGl4ZWxzSW5GcmFtZSA9IGZyYW1lIS5zY2FuTGluZXMgKiBmcmFtZSEuc2FtcGxlc1BlckxpbmU7XHJcbiAgICAgICAgaWYgKHBpeGVsc0luRnJhbWUgPiBtYXhSZXNvbHV0aW9uSW5QaXhlbHMpIHtcclxuICAgICAgICAgIGNvbnN0IGV4Y2VlZGVkQW1vdW50ID0gTWF0aC5jZWlsKChwaXhlbHNJbkZyYW1lIC0gbWF4UmVzb2x1dGlvbkluUGl4ZWxzKSAvIDFlNik7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYG1heFJlc29sdXRpb25Jbk1QIGxpbWl0IGV4Y2VlZGVkIGJ5ICR7ZXhjZWVkZWRBbW91bnR9TVBgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHNDb3VudCA9IGRhdGFbb2Zmc2V0KytdO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbXBvbmVudHNDb3VudDsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCBjb21wb25lbnRJZCA9IGRhdGFbb2Zmc2V0XTtcclxuICAgICAgICAgIGNvbnN0IGggPSBkYXRhW29mZnNldCArIDFdID4+IDQ7XHJcbiAgICAgICAgICBjb25zdCB2ID0gZGF0YVtvZmZzZXQgKyAxXSAmIDE1O1xyXG4gICAgICAgICAgY29uc3QgcUlkID0gZGF0YVtvZmZzZXQgKyAyXTtcclxuICAgICAgICAgIGZyYW1lIS5jb21wb25lbnRzT3JkZXIucHVzaChjb21wb25lbnRJZCk7XHJcbiAgICAgICAgICBmcmFtZSEuY29tcG9uZW50c1tjb21wb25lbnRJZF0gPSB7XHJcbiAgICAgICAgICAgIGg6IGgsXHJcbiAgICAgICAgICAgIHY6IHYsXHJcbiAgICAgICAgICAgIHF1YW50aXphdGlvbklkeDogcUlkLFxyXG4gICAgICAgICAgICBibG9ja3NQZXJDb2x1bW46IDAsXHJcbiAgICAgICAgICAgIGJsb2Nrc1BlckxpbmU6IDAsXHJcbiAgICAgICAgICAgIGJsb2NrczogW10sXHJcbiAgICAgICAgICAgIHByZWQ6IDAsXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgb2Zmc2V0ICs9IDM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHByZXBhcmVDb21wb25lbnRzKGZyYW1lISk7XHJcbiAgICAgICAgZnJhbWVzLnB1c2goZnJhbWUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgMHhGRkM0OiB7Ly8gREhUIChEZWZpbmUgSHVmZm1hbiBUYWJsZXMpXHJcbiAgICAgICAgY29uc3QgaHVmZm1hbkxlbmd0aCA9IHJlYWRVaW50MTYoKTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDI7IGkgPCBodWZmbWFuTGVuZ3RoOykge1xyXG4gICAgICAgICAgY29uc3QgaHVmZm1hblRhYmxlU3BlYyA9IGRhdGFbb2Zmc2V0KytdO1xyXG4gICAgICAgICAgY29uc3QgY29kZUxlbmd0aHMgPSBuZXcgVWludDhBcnJheSgxNik7XHJcbiAgICAgICAgICBsZXQgY29kZUxlbmd0aFN1bSA9IDA7XHJcblxyXG4gICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCAxNjsgaisrLCBvZmZzZXQrKykge1xyXG4gICAgICAgICAgICBjb2RlTGVuZ3RoU3VtICs9IChjb2RlTGVuZ3Roc1tqXSA9IGRhdGFbb2Zmc2V0XSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgcmVxdWVzdE1lbW9yeUFsbG9jYXRpb24oMTYgKyBjb2RlTGVuZ3RoU3VtKTtcclxuICAgICAgICAgIGNvbnN0IGh1ZmZtYW5WYWx1ZXMgPSBuZXcgVWludDhBcnJheShjb2RlTGVuZ3RoU3VtKTtcclxuXHJcbiAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNvZGVMZW5ndGhTdW07IGorKywgb2Zmc2V0KyspIHtcclxuICAgICAgICAgICAgaHVmZm1hblZhbHVlc1tqXSA9IGRhdGFbb2Zmc2V0XTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpICs9IDE3ICsgY29kZUxlbmd0aFN1bTtcclxuXHJcbiAgICAgICAgICBjb25zdCBpbmRleCA9IGh1ZmZtYW5UYWJsZVNwZWMgJiAxNTtcclxuICAgICAgICAgIGNvbnN0IHRhYmxlID0gKGh1ZmZtYW5UYWJsZVNwZWMgPj4gNCkgPT09IDAgPyBodWZmbWFuVGFibGVzREMgOiBodWZmbWFuVGFibGVzQUM7XHJcbiAgICAgICAgICB0YWJsZVtpbmRleF0gPSBidWlsZEh1ZmZtYW5UYWJsZShjb2RlTGVuZ3RocywgaHVmZm1hblZhbHVlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgMHhGRkREOiAvLyBEUkkgKERlZmluZSBSZXN0YXJ0IEludGVydmFsKVxyXG4gICAgICAgIHJlYWRVaW50MTYoKTsgLy8gc2tpcCBkYXRhIGxlbmd0aFxyXG4gICAgICAgIHJlc2V0SW50ZXJ2YWwgPSByZWFkVWludDE2KCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMHhGRkRDOiAvLyBOdW1iZXIgb2YgTGluZXMgbWFya2VyXHJcbiAgICAgICAgcmVhZFVpbnQxNigpIC8vIHNraXAgZGF0YSBsZW5ndGhcclxuICAgICAgICByZWFkVWludDE2KCkgLy8gSWdub3JlIHRoaXMgZGF0YSBzaW5jZSBpdCByZXByZXNlbnRzIHRoZSBpbWFnZSBoZWlnaHRcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAweEZGREE6IHsgLy8gU09TIChTdGFydCBvZiBTY2FuKVxyXG4gICAgICAgIHJlYWRVaW50MTYoKTsgLy8gc2tpcCBkYXRhIGxlbmd0aFxyXG4gICAgICAgIGNvbnN0IHNlbGVjdG9yc0NvdW50ID0gZGF0YVtvZmZzZXQrK107XHJcbiAgICAgICAgY29uc3QgY29tcG9uZW50czogQ29tcG9uZW50W10gPSBbXTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlbGVjdG9yc0NvdW50OyBpKyspIHtcclxuICAgICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGZyYW1lIS5jb21wb25lbnRzW2RhdGFbb2Zmc2V0KytdXTtcclxuICAgICAgICAgIGNvbnN0IHRhYmxlU3BlYyA9IGRhdGFbb2Zmc2V0KytdO1xyXG4gICAgICAgICAgY29tcG9uZW50Lmh1ZmZtYW5UYWJsZURDID0gaHVmZm1hblRhYmxlc0RDW3RhYmxlU3BlYyA+PiA0XTtcclxuICAgICAgICAgIGNvbXBvbmVudC5odWZmbWFuVGFibGVBQyA9IGh1ZmZtYW5UYWJsZXNBQ1t0YWJsZVNwZWMgJiAxNV07XHJcbiAgICAgICAgICBjb21wb25lbnRzLnB1c2goY29tcG9uZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgc3BlY3RyYWxTdGFydCA9IGRhdGFbb2Zmc2V0KytdO1xyXG4gICAgICAgIGNvbnN0IHNwZWN0cmFsRW5kID0gZGF0YVtvZmZzZXQrK107XHJcbiAgICAgICAgY29uc3Qgc3VjY2Vzc2l2ZUFwcHJveGltYXRpb24gPSBkYXRhW29mZnNldCsrXTtcclxuICAgICAgICBjb25zdCBwcm9jZXNzZWQgPSBkZWNvZGVTY2FuKFxyXG4gICAgICAgICAgZGF0YSwgb2Zmc2V0LCBmcmFtZSEsIGNvbXBvbmVudHMsIHJlc2V0SW50ZXJ2YWwsIHNwZWN0cmFsU3RhcnQsIHNwZWN0cmFsRW5kLFxyXG4gICAgICAgICAgc3VjY2Vzc2l2ZUFwcHJveGltYXRpb24gPj4gNCwgc3VjY2Vzc2l2ZUFwcHJveGltYXRpb24gJiAxNSk7XHJcbiAgICAgICAgb2Zmc2V0ICs9IHByb2Nlc3NlZDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlIDB4RkZGRjogLy8gRmlsbCBieXRlc1xyXG4gICAgICAgIGlmIChkYXRhW29mZnNldF0gIT09IDB4RkYpIHsgLy8gQXZvaWQgc2tpcHBpbmcgYSB2YWxpZCBtYXJrZXIuXHJcbiAgICAgICAgICBvZmZzZXQtLTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6IHtcclxuICAgICAgICBpZiAoZGF0YVtvZmZzZXQgLSAzXSA9PSAweEZGICYmIGRhdGFbb2Zmc2V0IC0gMl0gPj0gMHhDMCAmJiBkYXRhW29mZnNldCAtIDJdIDw9IDB4RkUpIHtcclxuICAgICAgICAgIC8vIGNvdWxkIGJlIGluY29ycmVjdCBlbmNvZGluZyAtLSBsYXN0IDB4RkYgYnl0ZSBvZiB0aGUgcHJldmlvdXNcclxuICAgICAgICAgIC8vIGJsb2NrIHdhcyBlYXRlbiBieSB0aGUgZW5jb2RlclxyXG4gICAgICAgICAgb2Zmc2V0IC09IDM7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9IGVsc2UgaWYgKGZpbGVNYXJrZXIgPT09IDB4RTAgfHwgZmlsZU1hcmtlciA9PSAweEUxKSB7XHJcbiAgICAgICAgICAvLyBSZWNvdmVyIGZyb20gbWFsZm9ybWVkIEFQUDEgbWFya2VycyBwb3B1bGFyIGluIHNvbWUgcGhvbmUgbW9kZWxzLlxyXG4gICAgICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ldWdlbmV3YXJlL2pwZWctanMvaXNzdWVzLzgyXHJcbiAgICAgICAgICBpZiAobWFsZm9ybWVkRGF0YU9mZnNldCAhPT0gLTEpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBmaXJzdCB1bmtub3duIEpQRUcgbWFya2VyIGF0IG9mZnNldCAke21hbGZvcm1lZERhdGFPZmZzZXQudG9TdHJpbmcoMTYpfSwgc2Vjb25kIHVua25vd24gSlBFRyBtYXJrZXIgJHtmaWxlTWFya2VyLnRvU3RyaW5nKDE2KX0gYXQgb2Zmc2V0ICR7KG9mZnNldCAtIDEpLnRvU3RyaW5nKDE2KX1gKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIG1hbGZvcm1lZERhdGFPZmZzZXQgPSBvZmZzZXQgLSAxO1xyXG4gICAgICAgICAgY29uc3QgbmV4dE9mZnNldCA9IHJlYWRVaW50MTYoKTtcclxuICAgICAgICAgIGlmIChkYXRhW29mZnNldCArIG5leHRPZmZzZXQgLSAyXSA9PT0gMHhGRikge1xyXG4gICAgICAgICAgICBvZmZzZXQgKz0gbmV4dE9mZnNldCAtIDI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmtub3duIEpQRUcgbWFya2VyICcgKyBmaWxlTWFya2VyLnRvU3RyaW5nKDE2KSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmaWxlTWFya2VyID0gcmVhZFVpbnQxNigpO1xyXG4gIH1cclxuXHJcbiAgaWYgKGZyYW1lcy5sZW5ndGggIT0gMSkgdGhyb3cgbmV3IEVycm9yKCdvbmx5IHNpbmdsZSBmcmFtZSBKUEVHcyBzdXBwb3J0ZWQnKTtcclxuXHJcbiAgLy8gc2V0IGVhY2ggZnJhbWUncyBjb21wb25lbnRzIHF1YW50aXphdGlvbiB0YWJsZVxyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZnJhbWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICBjb25zdCBjcCA9IGZyYW1lc1tpXS5jb21wb25lbnRzO1xyXG4gICAgZm9yIChsZXQgaiBpbiBjcCkgeyAvLyBUT0RPOiBkb24ndCB1c2UgYGluYFxyXG4gICAgICBjcFtqXS5xdWFudGl6YXRpb25UYWJsZSA9IHF1YW50aXphdGlvblRhYmxlc1tjcFtqXS5xdWFudGl6YXRpb25JZHghXTtcclxuICAgICAgZGVsZXRlIGNwW2pdLnF1YW50aXphdGlvbklkeDsgLy8gVE9ETzogd2h5ID8/P1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2VsZi53aWR0aCA9IGZyYW1lIS5zYW1wbGVzUGVyTGluZTtcclxuICBzZWxmLmhlaWdodCA9IGZyYW1lIS5zY2FuTGluZXM7XHJcbiAgc2VsZi5qZmlmID0gamZpZjtcclxuICBzZWxmLmFkb2JlID0gYWRvYmU7XHJcbiAgc2VsZi5jb21wb25lbnRzID0gW107XHJcblxyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZnJhbWUhLmNvbXBvbmVudHNPcmRlci5sZW5ndGg7IGkrKykge1xyXG4gICAgY29uc3QgY29tcG9uZW50ID0gZnJhbWUhLmNvbXBvbmVudHNbZnJhbWUhLmNvbXBvbmVudHNPcmRlcltpXV07XHJcbiAgICBzZWxmLmNvbXBvbmVudHMucHVzaCh7XHJcbiAgICAgIGxpbmVzOiBidWlsZENvbXBvbmVudERhdGEoY29tcG9uZW50KSxcclxuICAgICAgc2NhbGVYOiBjb21wb25lbnQuaCAvIGZyYW1lIS5tYXhILFxyXG4gICAgICBzY2FsZVk6IGNvbXBvbmVudC52IC8gZnJhbWUhLm1heFZcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHNlbGY7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldERhdGEoZGVjb2RlZDogRGVjb2RlZCkge1xyXG4gIGxldCBvZmZzZXQgPSAwO1xyXG4gIGxldCBjb2xvclRyYW5zZm9ybSA9IGZhbHNlO1xyXG5cclxuICBjb25zdCB3aWR0aCA9IGRlY29kZWQud2lkdGg7XHJcbiAgY29uc3QgaGVpZ2h0ID0gZGVjb2RlZC5oZWlnaHQ7XHJcbiAgY29uc3QgZGF0YUxlbmd0aCA9IHdpZHRoICogaGVpZ2h0ICogZGVjb2RlZC5jb21wb25lbnRzLmxlbmd0aDtcclxuICByZXF1ZXN0TWVtb3J5QWxsb2NhdGlvbihkYXRhTGVuZ3RoKTtcclxuICBjb25zdCBkYXRhID0gbmV3IFVpbnQ4QXJyYXkoZGF0YUxlbmd0aCk7XHJcblxyXG4gIHN3aXRjaCAoZGVjb2RlZC5jb21wb25lbnRzLmxlbmd0aCkge1xyXG4gICAgY2FzZSAxOiB7XHJcbiAgICAgIGNvbnN0IGNvbXBvbmVudDEgPSBkZWNvZGVkLmNvbXBvbmVudHNbMF07XHJcblxyXG4gICAgICBmb3IgKGxldCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKSB7XHJcbiAgICAgICAgY29uc3QgY29tcG9uZW50MUxpbmUgPSBjb21wb25lbnQxLmxpbmVzWzAgfCAoeSAqIGNvbXBvbmVudDEuc2NhbGVZKV07XHJcblxyXG4gICAgICAgIGZvciAobGV0IHggPSAwOyB4IDwgd2lkdGg7IHgrKykge1xyXG4gICAgICAgICAgY29uc3QgWSA9IGNvbXBvbmVudDFMaW5lWzAgfCAoeCAqIGNvbXBvbmVudDEuc2NhbGVYKV07XHJcbiAgICAgICAgICBkYXRhW29mZnNldCsrXSA9IFk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgY2FzZSAyOiB7XHJcbiAgICAgIC8vIFBERiBtaWdodCBjb21wcmVzcyB0d28gY29tcG9uZW50IGRhdGEgaW4gY3VzdG9tIGNvbG9yc3BhY2VcclxuICAgICAgY29uc3QgY29tcG9uZW50MSA9IGRlY29kZWQuY29tcG9uZW50c1swXTtcclxuICAgICAgY29uc3QgY29tcG9uZW50MiA9IGRlY29kZWQuY29tcG9uZW50c1sxXTtcclxuXHJcbiAgICAgIGZvciAobGV0IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspIHtcclxuICAgICAgICBjb25zdCBjb21wb25lbnQxTGluZSA9IGNvbXBvbmVudDEubGluZXNbMCB8ICh5ICogY29tcG9uZW50MS5zY2FsZVkpXTtcclxuICAgICAgICBjb25zdCBjb21wb25lbnQyTGluZSA9IGNvbXBvbmVudDIubGluZXNbMCB8ICh5ICogY29tcG9uZW50Mi5zY2FsZVkpXTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7XHJcbiAgICAgICAgICBjb25zdCBZMSA9IGNvbXBvbmVudDFMaW5lWzAgfCAoeCAqIGNvbXBvbmVudDEuc2NhbGVYKV07XHJcbiAgICAgICAgICBkYXRhW29mZnNldCsrXSA9IFkxO1xyXG4gICAgICAgICAgY29uc3QgWTIgPSBjb21wb25lbnQyTGluZVswIHwgKHggKiBjb21wb25lbnQyLnNjYWxlWCldO1xyXG4gICAgICAgICAgZGF0YVtvZmZzZXQrK10gPSBZMjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICBjYXNlIDM6IHtcclxuICAgICAgLy8gVGhlIGRlZmF1bHQgdHJhbnNmb3JtIGZvciB0aHJlZSBjb21wb25lbnRzIGlzIHRydWVcclxuICAgICAgY29sb3JUcmFuc2Zvcm0gPSB0cnVlO1xyXG4gICAgICAvLyBUaGUgYWRvYmUgdHJhbnNmb3JtIG1hcmtlciBvdmVycmlkZXMgYW55IHByZXZpb3VzIHNldHRpbmdcclxuICAgICAgaWYgKGRlY29kZWQuYWRvYmUgJiYgZGVjb2RlZC5hZG9iZS50cmFuc2Zvcm1Db2RlKSBjb2xvclRyYW5zZm9ybSA9IHRydWU7XHJcblxyXG4gICAgICBjb25zdCBjb21wb25lbnQxID0gZGVjb2RlZC5jb21wb25lbnRzWzBdO1xyXG4gICAgICBjb25zdCBjb21wb25lbnQyID0gZGVjb2RlZC5jb21wb25lbnRzWzFdO1xyXG4gICAgICBjb25zdCBjb21wb25lbnQzID0gZGVjb2RlZC5jb21wb25lbnRzWzJdO1xyXG5cclxuICAgICAgZm9yIChsZXQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykge1xyXG4gICAgICAgIGNvbnN0IGNvbXBvbmVudDFMaW5lID0gY29tcG9uZW50MS5saW5lc1swIHwgKHkgKiBjb21wb25lbnQxLnNjYWxlWSldO1xyXG4gICAgICAgIGNvbnN0IGNvbXBvbmVudDJMaW5lID0gY29tcG9uZW50Mi5saW5lc1swIHwgKHkgKiBjb21wb25lbnQyLnNjYWxlWSldO1xyXG4gICAgICAgIGNvbnN0IGNvbXBvbmVudDNMaW5lID0gY29tcG9uZW50My5saW5lc1swIHwgKHkgKiBjb21wb25lbnQzLnNjYWxlWSldO1xyXG5cclxuICAgICAgICBmb3IgKGxldCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHtcclxuICAgICAgICAgIGxldCBZLCBDYiwgQ3IsIFIsIEcsIEI7XHJcblxyXG4gICAgICAgICAgaWYgKCFjb2xvclRyYW5zZm9ybSkge1xyXG4gICAgICAgICAgICBSID0gY29tcG9uZW50MUxpbmVbMCB8ICh4ICogY29tcG9uZW50MS5zY2FsZVgpXTtcclxuICAgICAgICAgICAgRyA9IGNvbXBvbmVudDJMaW5lWzAgfCAoeCAqIGNvbXBvbmVudDIuc2NhbGVYKV07XHJcbiAgICAgICAgICAgIEIgPSBjb21wb25lbnQzTGluZVswIHwgKHggKiBjb21wb25lbnQzLnNjYWxlWCldO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgWSA9IGNvbXBvbmVudDFMaW5lWzAgfCAoeCAqIGNvbXBvbmVudDEuc2NhbGVYKV07XHJcbiAgICAgICAgICAgIENiID0gY29tcG9uZW50MkxpbmVbMCB8ICh4ICogY29tcG9uZW50Mi5zY2FsZVgpXTtcclxuICAgICAgICAgICAgQ3IgPSBjb21wb25lbnQzTGluZVswIHwgKHggKiBjb21wb25lbnQzLnNjYWxlWCldO1xyXG5cclxuICAgICAgICAgICAgUiA9IGNsYW1wVG84Yml0KFkgKyAxLjQwMiAqIChDciAtIDEyOCkpO1xyXG4gICAgICAgICAgICBHID0gY2xhbXBUbzhiaXQoWSAtIDAuMzQ0MTM2MyAqIChDYiAtIDEyOCkgLSAwLjcxNDEzNjM2ICogKENyIC0gMTI4KSk7XHJcbiAgICAgICAgICAgIEIgPSBjbGFtcFRvOGJpdChZICsgMS43NzIgKiAoQ2IgLSAxMjgpKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBkYXRhW29mZnNldCsrXSA9IFI7XHJcbiAgICAgICAgICBkYXRhW29mZnNldCsrXSA9IEc7XHJcbiAgICAgICAgICBkYXRhW29mZnNldCsrXSA9IEI7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgY2FzZSA0OiB7XHJcbiAgICAgIGlmICghZGVjb2RlZC5hZG9iZSkgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBjb2xvciBtb2RlICg0IGNvbXBvbmVudHMpJyk7XHJcbiAgICAgIC8vIFRoZSBkZWZhdWx0IHRyYW5zZm9ybSBmb3IgZm91ciBjb21wb25lbnRzIGlzIGZhbHNlXHJcbiAgICAgIGNvbG9yVHJhbnNmb3JtID0gZmFsc2U7XHJcbiAgICAgIC8vIFRoZSBhZG9iZSB0cmFuc2Zvcm0gbWFya2VyIG92ZXJyaWRlcyBhbnkgcHJldmlvdXMgc2V0dGluZ1xyXG4gICAgICBpZiAoZGVjb2RlZC5hZG9iZSAmJiBkZWNvZGVkLmFkb2JlLnRyYW5zZm9ybUNvZGUpIGNvbG9yVHJhbnNmb3JtID0gdHJ1ZTtcclxuXHJcbiAgICAgIGNvbnN0IGNvbXBvbmVudDEgPSBkZWNvZGVkLmNvbXBvbmVudHNbMF07XHJcbiAgICAgIGNvbnN0IGNvbXBvbmVudDIgPSBkZWNvZGVkLmNvbXBvbmVudHNbMV07XHJcbiAgICAgIGNvbnN0IGNvbXBvbmVudDMgPSBkZWNvZGVkLmNvbXBvbmVudHNbMl07XHJcbiAgICAgIGNvbnN0IGNvbXBvbmVudDQgPSBkZWNvZGVkLmNvbXBvbmVudHNbM107XHJcblxyXG4gICAgICBmb3IgKGxldCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKSB7XHJcbiAgICAgICAgY29uc3QgY29tcG9uZW50MUxpbmUgPSBjb21wb25lbnQxLmxpbmVzWzAgfCAoeSAqIGNvbXBvbmVudDEuc2NhbGVZKV07XHJcbiAgICAgICAgY29uc3QgY29tcG9uZW50MkxpbmUgPSBjb21wb25lbnQyLmxpbmVzWzAgfCAoeSAqIGNvbXBvbmVudDIuc2NhbGVZKV07XHJcbiAgICAgICAgY29uc3QgY29tcG9uZW50M0xpbmUgPSBjb21wb25lbnQzLmxpbmVzWzAgfCAoeSAqIGNvbXBvbmVudDMuc2NhbGVZKV07XHJcbiAgICAgICAgY29uc3QgY29tcG9uZW50NExpbmUgPSBjb21wb25lbnQ0LmxpbmVzWzAgfCAoeSAqIGNvbXBvbmVudDQuc2NhbGVZKV07XHJcblxyXG4gICAgICAgIGZvciAobGV0IHggPSAwOyB4IDwgd2lkdGg7IHgrKykge1xyXG4gICAgICAgICAgbGV0IFksIENiLCBDciwgSywgQywgTSwgWWU7XHJcblxyXG4gICAgICAgICAgaWYgKCFjb2xvclRyYW5zZm9ybSkge1xyXG4gICAgICAgICAgICBDID0gY29tcG9uZW50MUxpbmVbMCB8ICh4ICogY29tcG9uZW50MS5zY2FsZVgpXTtcclxuICAgICAgICAgICAgTSA9IGNvbXBvbmVudDJMaW5lWzAgfCAoeCAqIGNvbXBvbmVudDIuc2NhbGVYKV07XHJcbiAgICAgICAgICAgIFllID0gY29tcG9uZW50M0xpbmVbMCB8ICh4ICogY29tcG9uZW50My5zY2FsZVgpXTtcclxuICAgICAgICAgICAgSyA9IGNvbXBvbmVudDRMaW5lWzAgfCAoeCAqIGNvbXBvbmVudDQuc2NhbGVYKV07XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBZID0gY29tcG9uZW50MUxpbmVbMCB8ICh4ICogY29tcG9uZW50MS5zY2FsZVgpXTtcclxuICAgICAgICAgICAgQ2IgPSBjb21wb25lbnQyTGluZVswIHwgKHggKiBjb21wb25lbnQyLnNjYWxlWCldO1xyXG4gICAgICAgICAgICBDciA9IGNvbXBvbmVudDNMaW5lWzAgfCAoeCAqIGNvbXBvbmVudDMuc2NhbGVYKV07XHJcbiAgICAgICAgICAgIEsgPSBjb21wb25lbnQ0TGluZVswIHwgKHggKiBjb21wb25lbnQ0LnNjYWxlWCldO1xyXG5cclxuICAgICAgICAgICAgQyA9IDI1NSAtIGNsYW1wVG84Yml0KFkgKyAxLjQwMiAqIChDciAtIDEyOCkpO1xyXG4gICAgICAgICAgICBNID0gMjU1IC0gY2xhbXBUbzhiaXQoWSAtIDAuMzQ0MTM2MyAqIChDYiAtIDEyOCkgLSAwLjcxNDEzNjM2ICogKENyIC0gMTI4KSk7XHJcbiAgICAgICAgICAgIFllID0gMjU1IC0gY2xhbXBUbzhiaXQoWSArIDEuNzcyICogKENiIC0gMTI4KSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBkYXRhW29mZnNldCsrXSA9IDI1NSAtIEM7XHJcbiAgICAgICAgICBkYXRhW29mZnNldCsrXSA9IDI1NSAtIE07XHJcbiAgICAgICAgICBkYXRhW29mZnNldCsrXSA9IDI1NSAtIFllO1xyXG4gICAgICAgICAgZGF0YVtvZmZzZXQrK10gPSAyNTUgLSBLO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBicmVhaztcclxuICAgIH1cclxuICAgIGRlZmF1bHQ6XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgY29sb3IgbW9kZScpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGRhdGE7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVKcGVnKGVuY29kZWQ6IFVpbnQ4QXJyYXksIGNyZWF0ZUltYWdlRGF0YTogKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSA9PiBJbWFnZURhdGEpIHtcclxuICB0b3RhbEJ5dGVzQWxsb2NhdGVkID0gMDtcclxuXHJcbiAgaWYgKGVuY29kZWQubGVuZ3RoID09PSAwKSB0aHJvdyBuZXcgRXJyb3IoJ0VtcHR5IGpwZWcgYnVmZmVyJyk7XHJcblxyXG4gIGNvbnN0IGRlY29kZWQgPSBwYXJzZShlbmNvZGVkKTtcclxuICByZXF1ZXN0TWVtb3J5QWxsb2NhdGlvbihkZWNvZGVkLndpZHRoICogZGVjb2RlZC5oZWlnaHQgKiA0KTtcclxuXHJcbiAgY29uc3QgZGF0YSA9IGdldERhdGEoZGVjb2RlZCk7XHJcblxyXG4gIGNvbnN0IGltYWdlRGF0YSA9IGNyZWF0ZUltYWdlRGF0YShkZWNvZGVkLndpZHRoLCBkZWNvZGVkLmhlaWdodCk7XHJcbiAgY29uc3Qgd2lkdGggPSBpbWFnZURhdGEud2lkdGg7XHJcbiAgY29uc3QgaGVpZ2h0ID0gaW1hZ2VEYXRhLmhlaWdodDtcclxuICBjb25zdCBpbWFnZURhdGFBcnJheSA9IGltYWdlRGF0YS5kYXRhO1xyXG5cclxuICBsZXQgaSA9IDA7XHJcbiAgbGV0IGogPSAwO1xyXG5cclxuICBzd2l0Y2ggKGRlY29kZWQuY29tcG9uZW50cy5sZW5ndGgpIHtcclxuICAgIGNhc2UgMTpcclxuICAgICAgZm9yIChsZXQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykge1xyXG4gICAgICAgIGZvciAobGV0IHggPSAwOyB4IDwgd2lkdGg7IHgrKykge1xyXG4gICAgICAgICAgY29uc3QgWSA9IGRhdGFbaSsrXTtcclxuXHJcbiAgICAgICAgICBpbWFnZURhdGFBcnJheVtqKytdID0gWTtcclxuICAgICAgICAgIGltYWdlRGF0YUFycmF5W2orK10gPSBZO1xyXG4gICAgICAgICAgaW1hZ2VEYXRhQXJyYXlbaisrXSA9IFk7XHJcbiAgICAgICAgICBpbWFnZURhdGFBcnJheVtqKytdID0gMjU1O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBicmVhaztcclxuICAgIGNhc2UgMzpcclxuICAgICAgZm9yIChsZXQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykge1xyXG4gICAgICAgIGZvciAobGV0IHggPSAwOyB4IDwgd2lkdGg7IHgrKykge1xyXG4gICAgICAgICAgY29uc3QgUiA9IGRhdGFbaSsrXTtcclxuICAgICAgICAgIGNvbnN0IEcgPSBkYXRhW2krK107XHJcbiAgICAgICAgICBjb25zdCBCID0gZGF0YVtpKytdO1xyXG5cclxuICAgICAgICAgIGltYWdlRGF0YUFycmF5W2orK10gPSBSO1xyXG4gICAgICAgICAgaW1hZ2VEYXRhQXJyYXlbaisrXSA9IEc7XHJcbiAgICAgICAgICBpbWFnZURhdGFBcnJheVtqKytdID0gQjtcclxuICAgICAgICAgIGltYWdlRGF0YUFycmF5W2orK10gPSAyNTU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGJyZWFrO1xyXG4gICAgY2FzZSA0OlxyXG4gICAgICBmb3IgKGxldCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKSB7XHJcbiAgICAgICAgZm9yIChsZXQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7XHJcbiAgICAgICAgICBjb25zdCBDID0gZGF0YVtpKytdO1xyXG4gICAgICAgICAgY29uc3QgTSA9IGRhdGFbaSsrXTtcclxuICAgICAgICAgIGNvbnN0IFkgPSBkYXRhW2krK107XHJcbiAgICAgICAgICBjb25zdCBLID0gZGF0YVtpKytdO1xyXG5cclxuICAgICAgICAgIGNvbnN0IFIgPSAyNTUgLSBjbGFtcFRvOGJpdChDICogKDEgLSBLIC8gMjU1KSArIEspO1xyXG4gICAgICAgICAgY29uc3QgRyA9IDI1NSAtIGNsYW1wVG84Yml0KE0gKiAoMSAtIEsgLyAyNTUpICsgSyk7XHJcbiAgICAgICAgICBjb25zdCBCID0gMjU1IC0gY2xhbXBUbzhiaXQoWSAqICgxIC0gSyAvIDI1NSkgKyBLKTtcclxuXHJcbiAgICAgICAgICBpbWFnZURhdGFBcnJheVtqKytdID0gUjtcclxuICAgICAgICAgIGltYWdlRGF0YUFycmF5W2orK10gPSBHO1xyXG4gICAgICAgICAgaW1hZ2VEYXRhQXJyYXlbaisrXSA9IEI7XHJcbiAgICAgICAgICBpbWFnZURhdGFBcnJheVtqKytdID0gMjU1O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBicmVhaztcclxuICAgIGRlZmF1bHQ6XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgY29sb3IgbW9kZScpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGltYWdlRGF0YTtcclxufVxyXG4iXSwic291cmNlUm9vdCI6IkM6XFxQcm9qZWN0c1xcZ2l0aHViXFxhZy1wc2RcXHNyYyJ9
|
|
1023
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,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QyxHQUFHLEdBQUMsQ0FBQztnQkFDZixDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUMsQ0FBQztnQkFDZixDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUMsQ0FBQztnQkFDZixDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUMsQ0FBQztnQkFDZixDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUMsQ0FBQztnQkFDZixDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUMsQ0FBQztnQkFDZixDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUMsQ0FBQztnQkFDZixDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUMsQ0FBQztnQkFDZixTQUFTO2FBQ1Y7WUFFRCxVQUFVO1lBQ1YsSUFBSSxFQUFFLEdBQUcsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDNUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDNUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztZQUNwQixJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1lBQ3BCLElBQUksRUFBRSxHQUFHLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzdELElBQUksRUFBRSxHQUFHLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzdELElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3pCLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRXpCLFVBQVU7WUFDVixJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzNCLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hCLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDUCxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsT0FBTyxHQUFHLEVBQUUsR0FBRyxPQUFPLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzdDLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxPQUFPLEdBQUcsRUFBRSxHQUFHLE9BQU8sR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDOUMsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNQLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3ZCLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hCLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDUCxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN2QixFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN4QixFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBRVAsVUFBVTtZQUNWLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3ZCLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hCLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDUCxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN2QixFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN4QixFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ1AsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLE9BQU8sR0FBRyxFQUFFLEdBQUcsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMvQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsT0FBTyxHQUFHLEVBQUUsR0FBRyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2hELEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDUCxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsT0FBTyxHQUFHLEVBQUUsR0FBRyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQy9DLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxPQUFPLEdBQUcsRUFBRSxHQUFHLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDaEQsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUVQLFVBQVU7WUFDVixDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDckIsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ3JCLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUNyQixDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDckIsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ3JCLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUNyQixDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDckIsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1NBQ3RCO1FBRUQseUJBQXlCO1FBQ3pCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7WUFDMUIsSUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDO1lBRWQscUNBQXFDO1lBQ3JDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO2dCQUNuRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7Z0JBQ2pFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDckIsSUFBTSxHQUFDLEdBQUcsQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ2xELENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUMsQ0FBQztnQkFDbkIsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBQyxDQUFDO2dCQUNuQixDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFDLENBQUM7Z0JBQ25CLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUMsQ0FBQztnQkFDbkIsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBQyxDQUFDO2dCQUNuQixDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFDLENBQUM7Z0JBQ25CLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUMsQ0FBQztnQkFDbkIsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBQyxDQUFDO2dCQUNuQixTQUFTO2FBQ1Y7WUFFRCxVQUFVO1lBQ1YsSUFBSSxFQUFFLEdBQUcsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2xELElBQUksRUFBRSxHQUFHLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNsRCxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztZQUN4QixJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztZQUN4QixJQUFJLEVBQUUsR0FBRyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3ZFLElBQUksRUFBRSxHQUFHLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDdkUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7WUFDeEIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7WUFFeEIsVUFBVTtZQUNWLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDM0IsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEIsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNQLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxPQUFPLEdBQUcsRUFBRSxHQUFHLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDL0MsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLE9BQU8sR0FBRyxFQUFFLEdBQUcsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNoRCxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ1AsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdkIsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEIsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNQLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3ZCLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hCLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFFUCxVQUFVO1lBQ1YsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdkIsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEIsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNQLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3ZCLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hCLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDUCxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsT0FBTyxHQUFHLEVBQUUsR0FBRyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQy9DLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxPQUFPLEdBQUcsRUFBRSxHQUFHLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDaEQsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNQLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxPQUFPLEdBQUcsRUFBRSxHQUFHLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDL0MsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLE9BQU8sR0FBRyxFQUFFLEdBQUcsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNoRCxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBRVAsVUFBVTtZQUNWLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDekIsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUN6QixDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ3pCLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDekIsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUN6QixDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ3pCLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDekIsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztTQUMxQjtRQUVELDRCQUE0QjtRQUM1QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFO1lBQzNCLElBQU0sTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ3ZDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1NBQzdEO0lBQ0gsQ0FBQztJQUVELHVCQUF1QixDQUFDLGNBQWMsR0FBRyxlQUFlLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFFOUQsS0FBSyxJQUFJLFFBQVEsR0FBRyxDQUFDLEVBQUUsUUFBUSxHQUFHLGVBQWUsRUFBRSxRQUFRLEVBQUUsRUFBRTtRQUM3RCxJQUFNLFFBQVEsR0FBRyxRQUFRLElBQUksQ0FBQyxDQUFDO1FBRS9CLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFO1lBQ3hCLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxVQUFVLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztRQUU3QyxLQUFLLElBQUksUUFBUSxHQUFHLENBQUMsRUFBRSxRQUFRLEdBQUcsYUFBYSxFQUFFLFFBQVEsRUFBRSxFQUFFO1lBQzNELGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBRS9ELElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztZQUNmLElBQU0sTUFBTSxHQUFHLFFBQVEsSUFBSSxDQUFDLENBQUM7WUFDN0IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDMUIsSUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDakMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUU7b0JBQ3hCLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7YUFDbEM7U0FDRjtLQUNGO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQsU0FBUyxXQUFXLENBQUMsQ0FBUztJQUM1QixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkMsQ0FBQztBQUVELFNBQVMsS0FBSyxDQUFDLElBQWdCO0lBQzdCLElBQU0sSUFBSSxHQUFZO1FBQ3BCLEtBQUssRUFBRSxDQUFDO1FBQ1IsTUFBTSxFQUFFLENBQUM7UUFDVCxRQUFRLEVBQUUsRUFBRTtRQUNaLEtBQUssRUFBRSxTQUFTO1FBQ2hCLFVBQVUsRUFBRSxFQUFFO1FBQ2QsVUFBVSxFQUFFLFNBQVM7UUFDckIsSUFBSSxFQUFFLFNBQVM7S0FDaEIsQ0FBQztJQUVGLElBQU0scUJBQXFCLEdBQUcsaUJBQWlCLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztJQUM5RCxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFFZixTQUFTLFVBQVU7UUFDakIsSUFBTSxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNyRCxNQUFNLElBQUksQ0FBQyxDQUFDO1FBQ1osT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsU0FBUyxhQUFhO1FBQ3BCLElBQU0sTUFBTSxHQUFHLFVBQVUsRUFBRSxDQUFDO1FBQzVCLElBQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLE1BQU0sR0FBRyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDekQsTUFBTSxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFDdkIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsU0FBUyxpQkFBaUIsQ0FBQyxLQUFZO1FBQ3JDLElBQUksSUFBSSxHQUFHLENBQUMsRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBRXZCLEtBQUssSUFBSSxXQUFXLElBQUksS0FBSyxDQUFDLFVBQVUsRUFBRTtZQUN4QyxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxFQUFFO2dCQUNoRCxJQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUNoRCxJQUFJLElBQUksR0FBRyxTQUFTLENBQUMsQ0FBQztvQkFBRSxJQUFJLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQztnQkFDM0MsSUFBSSxJQUFJLEdBQUcsU0FBUyxDQUFDLENBQUM7b0JBQUUsSUFBSSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUM7YUFDNUM7U0FDRjtRQUVELElBQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDL0QsSUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUU1RCxLQUFLLElBQUksV0FBVyxJQUFJLEtBQUssQ0FBQyxVQUFVLEVBQUU7WUFDeEMsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsRUFBRTtnQkFDaEQsSUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDaEQsSUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztnQkFDMUYsSUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztnQkFDdkYsSUFBTSxtQkFBbUIsR0FBRyxXQUFXLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQztnQkFDdEQsSUFBTSxxQkFBcUIsR0FBRyxhQUFhLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQztnQkFDMUQsSUFBTSxnQkFBZ0IsR0FBRyxxQkFBcUIsR0FBRyxtQkFBbUIsQ0FBQztnQkFDckUsSUFBTSxNQUFNLEdBQW1CLEVBQUUsQ0FBQztnQkFFbEMsK0RBQStEO2dCQUMvRCx1QkFBdUIsQ0FBQyxnQkFBZ0IsR0FBRyxHQUFHLENBQUMsQ0FBQztnQkFFaEQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLHFCQUFxQixFQUFFLENBQUMsRUFBRSxFQUFFO29CQUM5QyxJQUFNLEdBQUcsR0FBaUIsRUFBRSxDQUFDO29CQUM3QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsbUJBQW1CLEVBQUUsQ0FBQyxFQUFFLEVBQUU7d0JBQzVDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztxQkFDOUI7b0JBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztpQkFDbEI7Z0JBQ0QsU0FBUyxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7Z0JBQ3hDLFNBQVMsQ0FBQyxlQUFlLEdBQUcsZUFBZSxDQUFDO2dCQUM1QyxTQUFTLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQzthQUMzQjtTQUNGO1FBRUQsS0FBSyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDbEIsS0FBSyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDbEIsS0FBSyxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFDaEMsS0FBSyxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7SUFDdEMsQ0FBQztJQUVELElBQUksSUFBSSxHQUFHLElBQUksQ0FBQztJQUNoQixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUM7SUFDakIsSUFBSSxLQUFLLEdBQXNCLFNBQVMsQ0FBQztJQUN6QyxJQUFJLGFBQWEsR0FBRyxDQUFDLENBQUM7SUFDdEIsSUFBSSxrQkFBa0IsR0FBRyxFQUFFLENBQUM7SUFDNUIsSUFBSSxNQUFNLEdBQVksRUFBRSxDQUFDO0lBQ3pCLElBQUksZUFBZSxHQUE4QixFQUFFLENBQUM7SUFDcEQsSUFBSSxlQUFlLEdBQThCLEVBQUUsQ0FBQztJQUNwRCxJQUFJLFVBQVUsR0FBRyxVQUFVLEVBQUUsQ0FBQztJQUM5QixJQUFJLG1CQUFtQixHQUFHLENBQUMsQ0FBQyxDQUFDO0lBRTdCLElBQUksVUFBVSxJQUFJLE1BQU0sRUFBRSxFQUFFLHVCQUF1QjtRQUNqRCxNQUFNLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0tBQ2xDO0lBRUQsVUFBVSxHQUFHLFVBQVUsRUFBRSxDQUFDO0lBQzFCLE9BQU8sVUFBVSxJQUFJLE1BQU0sRUFBRSxFQUFFLHFCQUFxQjtRQUNsRCxRQUFRLFVBQVUsRUFBRTtZQUNsQixLQUFLLE1BQU0sQ0FBQyxDQUFDLE1BQU07WUFDbkIsS0FBSyxNQUFNLENBQUMsQ0FBQyw4QkFBOEI7WUFDM0MsS0FBSyxNQUFNLENBQUMsQ0FBQyxPQUFPO1lBQ3BCLEtBQUssTUFBTSxDQUFDLENBQUMsT0FBTztZQUNwQixLQUFLLE1BQU0sQ0FBQyxDQUFDLE9BQU87WUFDcEIsS0FBSyxNQUFNLENBQUMsQ0FBQyxPQUFPO1lBQ3BCLEtBQUssTUFBTSxDQUFDLENBQUMsT0FBTztZQUNwQixLQUFLLE1BQU0sQ0FBQyxDQUFDLE9BQU87WUFDcEIsS0FBSyxNQUFNLENBQUMsQ0FBQyxPQUFPO1lBQ3BCLEtBQUssTUFBTSxDQUFDLENBQUMsT0FBTztZQUNwQixLQUFLLE1BQU0sQ0FBQyxDQUFDLE9BQU87WUFDcEIsS0FBSyxNQUFNLENBQUMsQ0FBQyxRQUFRO1lBQ3JCLEtBQUssTUFBTSxDQUFDLENBQUMsUUFBUTtZQUNyQixLQUFLLE1BQU0sQ0FBQyxDQUFDLFFBQVE7WUFDckIsS0FBSyxNQUFNLENBQUMsQ0FBQyxRQUFRO1lBQ3JCLEtBQUssTUFBTSxDQUFDLENBQUMsUUFBUTtZQUNyQixLQUFLLE1BQU0sQ0FBQyxDQUFDLFFBQVE7WUFDckIsS0FBSyxNQUFNLENBQUMsQ0FBQyxFQUFFLGdCQUFnQjtnQkFDN0IsSUFBTSxPQUFPLEdBQUcsYUFBYSxFQUFFLENBQUM7Z0JBRWhDLElBQUksVUFBVSxLQUFLLE1BQU0sRUFBRTtvQkFDekIsSUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDO29CQUNqQixLQUFLLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLEVBQUUsRUFBRTt3QkFDOUMsT0FBTyxJQUFJLE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7cUJBQzdDO29CQUNELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2lCQUM3QjtnQkFFRCxJQUFJLFVBQVUsS0FBSyxNQUFNLEVBQUU7b0JBQ3pCLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJO3dCQUNuRSxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxhQUFhO3dCQUN4RCxJQUFJLEdBQUc7NEJBQ0wsT0FBTyxFQUFFLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFOzRCQUNqRCxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQzs0QkFDeEIsUUFBUSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUM7NEJBQ3hDLFFBQVEsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDOzRCQUMxQyxVQUFVLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQzs0QkFDdkIsV0FBVyxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUM7NEJBQ3hCLFNBQVMsRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7eUJBQ3BFLENBQUM7cUJBQ0g7aUJBQ0Y7Z0JBQ0QsbUJBQW1CO2dCQUNuQixJQUFJLFVBQVUsS0FBSyxNQUFNLEVBQUU7b0JBQ3pCLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUk7d0JBQ3JCLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJO3dCQUNuQixPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSTt3QkFDbkIsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUk7d0JBQ25CLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxhQUFhO3dCQUNqQyxJQUFJLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztxQkFDdkQ7aUJBQ0Y7Z0JBRUQsSUFBSSxVQUFVLEtBQUssTUFBTSxFQUFFO29CQUN6QixJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSTt3QkFDbkUsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxjQUFjO3dCQUNoRixLQUFLLEdBQUc7NEJBQ04sT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7NEJBQ25CLE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDOzRCQUN0QyxNQUFNLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQzs0QkFDdkMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUM7eUJBQzNCLENBQUM7cUJBQ0g7aUJBQ0Y7Z0JBQ0QsTUFBTTthQUNQO1lBQ0QsS0FBSyxNQUFNLENBQUMsQ0FBQyxFQUFFLG1DQUFtQztnQkFDaEQsSUFBTSx3QkFBd0IsR0FBRyxVQUFVLEVBQUUsQ0FBQztnQkFDOUMsSUFBTSxxQkFBcUIsR0FBRyx3QkFBd0IsR0FBRyxNQUFNLEdBQUcsQ0FBQyxDQUFDO2dCQUNwRSxPQUFPLE1BQU0sR0FBRyxxQkFBcUIsRUFBRTtvQkFDckMsSUFBTSxxQkFBcUIsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztvQkFDN0MsdUJBQXVCLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO29CQUNoQyxJQUFNLFNBQVMsR0FBRyxJQUFJLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDckMsSUFBSSxDQUFDLHFCQUFxQixJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLGVBQWU7d0JBQ3ZELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7NEJBQzNCLElBQU0sQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs0QkFDdkIsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO3lCQUMvQjtxQkFDRjt5QkFBTSxJQUFJLENBQUMscUJBQXFCLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsUUFBUTt3QkFDdkQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRTs0QkFDM0IsSUFBTSxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDOzRCQUN2QixTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxFQUFFLENBQUM7eUJBQzdCO3FCQUNGOzt3QkFDQyxNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7b0JBQzdDLGtCQUFrQixDQUFDLHFCQUFxQixHQUFHLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQztpQkFDNUQ7Z0JBQ0QsTUFBTTthQUNQO1lBQ0QsS0FBSyxNQUFNLENBQUMsQ0FBQyxzQ0FBc0M7WUFDbkQsS0FBSyxNQUFNLENBQUMsQ0FBQyxzQ0FBc0M7WUFDbkQsS0FBSyxNQUFNLENBQUMsQ0FBQyxFQUFFLHlDQUF5QztnQkFDdEQsVUFBVSxFQUFFLENBQUMsQ0FBQyxtQkFBbUI7Z0JBQ2pDLEtBQUssR0FBRztvQkFDTixRQUFRLEVBQUUsQ0FBQyxVQUFVLEtBQUssTUFBTSxDQUFDO29CQUNqQyxXQUFXLEVBQUUsQ0FBQyxVQUFVLEtBQUssTUFBTSxDQUFDO29CQUNwQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUN6QixTQUFTLEVBQUUsVUFBVSxFQUFFO29CQUN2QixjQUFjLEVBQUUsVUFBVSxFQUFFO29CQUM1QixVQUFVLEVBQUUsRUFBRTtvQkFDZCxlQUFlLEVBQUUsRUFBRTtvQkFDbkIsSUFBSSxFQUFFLENBQUM7b0JBQ1AsSUFBSSxFQUFFLENBQUM7b0JBQ1AsV0FBVyxFQUFFLENBQUM7b0JBQ2QsYUFBYSxFQUFFLENBQUM7aUJBQ2pCLENBQUM7Z0JBRUYsSUFBTSxhQUFhLEdBQUcsS0FBTSxDQUFDLFNBQVMsR0FBRyxLQUFNLENBQUMsY0FBYyxDQUFDO2dCQUMvRCxJQUFJLGFBQWEsR0FBRyxxQkFBcUIsRUFBRTtvQkFDekMsSUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLGFBQWEsR0FBRyxxQkFBcUIsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO29CQUNoRixNQUFNLElBQUksS0FBSyxDQUFDLDhDQUF1QyxjQUFjLE9BQUksQ0FBQyxDQUFDO2lCQUM1RTtnQkFFRCxJQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztnQkFFdkMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGVBQWUsRUFBRSxDQUFDLEVBQUUsRUFBRTtvQkFDeEMsSUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUNqQyxJQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDaEMsSUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQ2hDLElBQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQzdCLEtBQU0sQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO29CQUN6QyxLQUFNLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxHQUFHO3dCQUMvQixDQUFDLEVBQUUsQ0FBQzt3QkFDSixDQUFDLEVBQUUsQ0FBQzt3QkFDSixlQUFlLEVBQUUsR0FBRzt3QkFDcEIsZUFBZSxFQUFFLENBQUM7d0JBQ2xCLGFBQWEsRUFBRSxDQUFDO3dCQUNoQixNQUFNLEVBQUUsRUFBRTt3QkFDVixJQUFJLEVBQUUsQ0FBQztxQkFDUixDQUFDO29CQUNGLE1BQU0sSUFBSSxDQUFDLENBQUM7aUJBQ2I7Z0JBQ0QsaUJBQWlCLENBQUMsS0FBTSxDQUFDLENBQUM7Z0JBQzFCLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ25CLE1BQU07YUFDUDtZQUNELEtBQUssTUFBTSxDQUFDLENBQUMsRUFBQyw4QkFBOEI7Z0JBQzFDLElBQU0sYUFBYSxHQUFHLFVBQVUsRUFBRSxDQUFDO2dCQUVuQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsYUFBYSxHQUFHO29CQUNsQyxJQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO29CQUN4QyxJQUFNLFdBQVcsR0FBRyxJQUFJLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDdkMsSUFBSSxhQUFhLEdBQUcsQ0FBQyxDQUFDO29CQUV0QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFO3dCQUNyQyxhQUFhLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7cUJBQ2xEO29CQUVELHVCQUF1QixDQUFDLEVBQUUsR0FBRyxhQUFhLENBQUMsQ0FBQztvQkFDNUMsSUFBTSxhQUFhLEdBQUcsSUFBSSxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUM7b0JBRXBELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxhQUFhLEVBQUUsQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUU7d0JBQ2hELGFBQWEsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7cUJBQ2pDO29CQUVELENBQUMsSUFBSSxFQUFFLEdBQUcsYUFBYSxDQUFDO29CQUV4QixJQUFNLEtBQUssR0FBRyxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7b0JBQ3BDLElBQU0sS0FBSyxHQUFHLENBQUMsZ0JBQWdCLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQztvQkFDaEYsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLGlCQUFpQixDQUFDLFdBQVcsRUFBRSxhQUFhLENBQUMsQ0FBQztpQkFDOUQ7Z0JBQ0QsTUFBTTthQUNQO1lBQ0QsS0FBSyxNQUFNLEVBQUUsZ0NBQWdDO2dCQUMzQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLG1CQUFtQjtnQkFDakMsYUFBYSxHQUFHLFVBQVUsRUFBRSxDQUFDO2dCQUM3QixNQUFNO1lBQ1IsS0FBSyxNQUFNLEVBQUUseUJBQXlCO2dCQUNwQyxVQUFVLEVBQUUsQ0FBQSxDQUFDLG1CQUFtQjtnQkFDaEMsVUFBVSxFQUFFLENBQUEsQ0FBQyx3REFBd0Q7Z0JBQ3JFLE1BQU07WUFDUixLQUFLLE1BQU0sQ0FBQyxDQUFDLEVBQUUsc0JBQXNCO2dCQUNuQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLG1CQUFtQjtnQkFDakMsSUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7Z0JBQ3RDLElBQU0sVUFBVSxHQUFnQixFQUFFLENBQUM7Z0JBQ25DLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxjQUFjLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQ3ZDLElBQU0sU0FBUyxHQUFHLEtBQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDcEQsSUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7b0JBQ2pDLFNBQVMsQ0FBQyxjQUFjLEdBQUcsZUFBZSxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUMsQ0FBQztvQkFDM0QsU0FBUyxDQUFDLGNBQWMsR0FBRyxlQUFlLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQyxDQUFDO29CQUMzRCxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2lCQUM1QjtnQkFDRCxJQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztnQkFDckMsSUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7Z0JBQ25DLElBQU0sdUJBQXVCLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7Z0JBQy9DLElBQU0sU0FBUyxHQUFHLFVBQVUsQ0FDMUIsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFNLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUMzRSx1QkFBdUIsSUFBSSxDQUFDLEVBQUUsdUJBQXVCLEdBQUcsRUFBRSxDQUFDLENBQUM7Z0JBQzlELE1BQU0sSUFBSSxTQUFTLENBQUM7Z0JBQ3BCLE1BQU07YUFDUDtZQUNELEtBQUssTUFBTSxFQUFFLGFBQWE7Z0JBQ3hCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksRUFBRSxFQUFFLGlDQUFpQztvQkFDNUQsTUFBTSxFQUFFLENBQUM7aUJBQ1Y7Z0JBQ0QsTUFBTTtZQUNSLE9BQU8sQ0FBQyxDQUFDO2dCQUNQLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUU7b0JBQ3BGLGdFQUFnRTtvQkFDaEUsaUNBQWlDO29CQUNqQyxNQUFNLElBQUksQ0FBQyxDQUFDO29CQUNaLE1BQU07aUJBQ1A7cUJBQU0sSUFBSSxVQUFVLEtBQUssSUFBSSxJQUFJLFVBQVUsSUFBSSxJQUFJLEVBQUU7b0JBQ3BELG9FQUFvRTtvQkFDcEUsc0RBQXNEO29CQUN0RCxJQUFJLG1CQUFtQixLQUFLLENBQUMsQ0FBQyxFQUFFO3dCQUM5QixNQUFNLElBQUksS0FBSyxDQUFDLDhDQUF1QyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLDBDQUFnQyxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyx3QkFBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUUsQ0FBQyxDQUFDO3FCQUMxTDtvQkFDRCxtQkFBbUIsR0FBRyxNQUFNLEdBQUcsQ0FBQyxDQUFDO29CQUNqQyxJQUFNLFVBQVUsR0FBRyxVQUFVLEVBQUUsQ0FBQztvQkFDaEMsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLFVBQVUsR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUU7d0JBQzFDLE1BQU0sSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDO3dCQUN6QixNQUFNO3FCQUNQO2lCQUNGO2dCQUVELE1BQU0sSUFBSSxLQUFLLENBQUMsc0JBQXNCLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQ25FO1NBQ0Y7UUFFRCxVQUFVLEdBQUcsVUFBVSxFQUFFLENBQUM7S0FDM0I7SUFFRCxJQUFJLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQztRQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsbUNBQW1DLENBQUMsQ0FBQztJQUU3RSxpREFBaUQ7SUFDakQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDdEMsSUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQztRQUNoQyxLQUFLLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLHVCQUF1QjtZQUN6QyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLEdBQUcsa0JBQWtCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWdCLENBQUMsQ0FBQztZQUNyRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxnQkFBZ0I7U0FDL0M7S0FDRjtJQUVELElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBTSxDQUFDLGNBQWMsQ0FBQztJQUNuQyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQU0sQ0FBQyxTQUFTLENBQUM7SUFDL0IsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDakIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDbkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7SUFFckIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQU0sQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3RELElBQU0sU0FBUyxHQUFHLEtBQU0sQ0FBQyxVQUFVLENBQUMsS0FBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9ELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO1lBQ25CLEtBQUssRUFBRSxrQkFBa0IsQ0FBQyxTQUFTLENBQUM7WUFDcEMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDLEdBQUcsS0FBTSxDQUFDLElBQUk7WUFDakMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDLEdBQUcsS0FBTSxDQUFDLElBQUk7U0FDbEMsQ0FBQyxDQUFDO0tBQ0o7SUFFRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRCxTQUFTLE9BQU8sQ0FBQyxPQUFnQjtJQUMvQixJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDZixJQUFJLGNBQWMsR0FBRyxLQUFLLENBQUM7SUFFM0IsSUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztJQUM1QixJQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO0lBQzlCLElBQU0sVUFBVSxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUM7SUFDOUQsdUJBQXVCLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDcEMsSUFBTSxJQUFJLEdBQUcsSUFBSSxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFeEMsUUFBUSxPQUFPLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRTtRQUNqQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ04sSUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUV6QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUMvQixJQUFNLGNBQWMsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztnQkFFckUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRTtvQkFDOUIsSUFBTSxDQUFDLEdBQUcsY0FBYyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztvQkFDdEQsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2lCQUNwQjthQUNGO1lBQ0QsTUFBTTtTQUNQO1FBQ0QsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUNOLDZEQUE2RDtZQUM3RCxJQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3pDLElBQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFekMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDL0IsSUFBTSxjQUFjLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0JBQ3JFLElBQU0sY0FBYyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO2dCQUVyRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFO29CQUM5QixJQUFNLEVBQUUsR0FBRyxjQUFjLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO29CQUN2RCxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQ3BCLElBQU0sRUFBRSxHQUFHLGNBQWMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7b0JBQ3ZELElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztpQkFDckI7YUFDRjtZQUNELE1BQU07U0FDUDtRQUNELEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDTixxREFBcUQ7WUFDckQsY0FBYyxHQUFHLElBQUksQ0FBQztZQUN0Qiw0REFBNEQ7WUFDNUQsSUFBSSxPQUFPLENBQUMsS0FBSyxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsYUFBYTtnQkFBRSxjQUFjLEdBQUcsSUFBSSxDQUFDO1lBRXhFLElBQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDekMsSUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN6QyxJQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRXpDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQy9CLElBQU0sY0FBYyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO2dCQUNyRSxJQUFNLGNBQWMsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztnQkFDckUsSUFBTSxjQUFjLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0JBRXJFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQzlCLElBQUksQ0FBQyxTQUFBLEVBQUUsRUFBRSxTQUFBLEVBQUUsRUFBRSxTQUFBLEVBQUUsQ0FBQyxTQUFBLEVBQUUsQ0FBQyxTQUFBLEVBQUUsQ0FBQyxTQUFBLENBQUM7b0JBRXZCLElBQUksQ0FBQyxjQUFjLEVBQUU7d0JBQ25CLENBQUMsR0FBRyxjQUFjLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO3dCQUNoRCxDQUFDLEdBQUcsY0FBYyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQzt3QkFDaEQsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7cUJBQ2pEO3lCQUFNO3dCQUNMLENBQUMsR0FBRyxjQUFjLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO3dCQUNoRCxFQUFFLEdBQUcsY0FBYyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQzt3QkFDakQsRUFBRSxHQUFHLGNBQWMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7d0JBRWpELENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO3dCQUN4QyxDQUFDLEdBQUcsV0FBVyxDQUFDLENBQUMsR0FBRyxTQUFTLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsVUFBVSxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7d0JBQ3RFLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO3FCQUN6QztvQkFFRCxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ25CLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDbkIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2lCQUNwQjthQUNGO1lBQ0QsTUFBTTtTQUNQO1FBQ0QsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUNOLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSztnQkFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHVDQUF1QyxDQUFDLENBQUM7WUFDN0UscURBQXFEO1lBQ3JELGNBQWMsR0FBRyxLQUFLLENBQUM7WUFDdkIsNERBQTREO1lBQzVELElBQUksT0FBTyxDQUFDLEtBQUssSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLGFBQWE7Z0JBQUUsY0FBYyxHQUFHLElBQUksQ0FBQztZQUV4RSxJQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3pDLElBQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDekMsSUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN6QyxJQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRXpDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQy9CLElBQU0sY0FBYyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO2dCQUNyRSxJQUFNLGNBQWMsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztnQkFDckUsSUFBTSxjQUFjLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0JBQ3JFLElBQU0sY0FBYyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO2dCQUVyRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFO29CQUM5QixJQUFJLENBQUMsU0FBQSxFQUFFLEVBQUUsU0FBQSxFQUFFLEVBQUUsU0FBQSxFQUFFLENBQUMsU0FBQSxFQUFFLENBQUMsU0FBQSxFQUFFLENBQUMsU0FBQSxFQUFFLEVBQUUsU0FBQSxDQUFDO29CQUUzQixJQUFJLENBQUMsY0FBYyxFQUFFO3dCQUNuQixDQUFDLEdBQUcsY0FBYyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQzt3QkFDaEQsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7d0JBQ2hELEVBQUUsR0FBRyxjQUFjLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO3dCQUNqRCxDQUFDLEdBQUcsY0FBYyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztxQkFDakQ7eUJBQU07d0JBQ0wsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7d0JBQ2hELEVBQUUsR0FBRyxjQUFjLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO3dCQUNqRCxFQUFFLEdBQUcsY0FBYyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQzt3QkFDakQsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7d0JBRWhELENBQUMsR0FBRyxHQUFHLEdBQUcsV0FBVyxDQUFDLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQzt3QkFDOUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxXQUFXLENBQUMsQ0FBQyxHQUFHLFNBQVMsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxVQUFVLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQzt3QkFDNUUsRUFBRSxHQUFHLEdBQUcsR0FBRyxXQUFXLENBQUMsQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO3FCQUNoRDtvQkFDRCxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO29CQUN6QixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO29CQUN6QixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO29CQUMxQixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO2lCQUMxQjthQUNGO1lBQ0QsTUFBTTtTQUNQO1FBQ0Q7WUFDRSxNQUFNLElBQUksS0FBSyxDQUFDLHdCQUF3QixDQUFDLENBQUM7S0FDN0M7SUFFRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRCxTQUFnQixVQUFVLENBQUMsT0FBbUIsRUFBRSxlQUE2RDtJQUMzRyxtQkFBbUIsR0FBRyxDQUFDLENBQUM7SUFFeEIsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUM7UUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFFL0QsSUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQy9CLHVCQUF1QixDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztJQUU1RCxJQUFNLElBQUksR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFOUIsSUFBTSxTQUFTLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2pFLElBQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUM7SUFDOUIsSUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQztJQUNoQyxJQUFNLGNBQWMsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDO0lBRXRDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNWLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUVWLFFBQVEsT0FBTyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUU7UUFDakMsS0FBSyxDQUFDO1lBQ0osS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDL0IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRTtvQkFDOUIsSUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBRXBCLGNBQWMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDeEIsY0FBYyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUN4QixjQUFjLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ3hCLGNBQWMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztpQkFDM0I7YUFDRjtZQUNELE1BQU07UUFDUixLQUFLLENBQUM7WUFDSixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUMvQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFO29CQUM5QixJQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDcEIsSUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ3BCLElBQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUVwQixjQUFjLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ3hCLGNBQWMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDeEIsY0FBYyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUN4QixjQUFjLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7aUJBQzNCO2FBQ0Y7WUFDRCxNQUFNO1FBQ1IsS0FBSyxDQUFDO1lBQ0osS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDL0IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRTtvQkFDOUIsSUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ3BCLElBQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUNwQixJQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDcEIsSUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBRXBCLElBQU0sQ0FBQyxHQUFHLEdBQUcsR0FBRyxXQUFXLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztvQkFDbkQsSUFBTSxDQUFDLEdBQUcsR0FBRyxHQUFHLFdBQVcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO29CQUNuRCxJQUFNLENBQUMsR0FBRyxHQUFHLEdBQUcsV0FBVyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBRW5ELGNBQWMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDeEIsY0FBYyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUN4QixjQUFjLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ3hCLGNBQWMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztpQkFDM0I7YUFDRjtZQUNELE1BQU07UUFDUjtZQUNFLE1BQU0sSUFBSSxLQUFLLENBQUMsd0JBQXdCLENBQUMsQ0FBQztLQUM3QztJQUVELE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUM7QUFyRUQsZ0NBcUVDIiwiZmlsZSI6ImpwZWcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBiYXNlZCBvbiBodHRwczovL2dpdGh1Yi5jb20vanBlZy1qcy9qcGVnLWpzXHJcbi8qXHJcbiAgIENvcHlyaWdodCAyMDExIG5vdG1hc3RlcnlldFxyXG5cclxuICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcclxuICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxyXG4gICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcclxuXHJcbiAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcclxuXHJcbiAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcclxuICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxyXG4gICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cclxuICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxyXG4gICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cclxuKi9cclxuXHJcbmludGVyZmFjZSBEZWNvZGVkQ29tcG9uZW50IHtcclxuICBsaW5lczogVWludDhBcnJheVtdO1xyXG4gIHNjYWxlWDogbnVtYmVyO1xyXG4gIHNjYWxlWTogbnVtYmVyO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgRGVjb2RlZCB7XHJcbiAgd2lkdGg6IG51bWJlcjtcclxuICBoZWlnaHQ6IG51bWJlcjtcclxuICBjb21tZW50czogc3RyaW5nW107XHJcbiAgZXhpZkJ1ZmZlcjogVWludDhBcnJheSB8IHVuZGVmaW5lZDtcclxuICBqZmlmOiBhbnk7XHJcbiAgYWRvYmU6IGFueTtcclxuICBjb21wb25lbnRzOiBEZWNvZGVkQ29tcG9uZW50W107XHJcbn1cclxuXHJcbmludGVyZmFjZSBDb21wb25lbnQge1xyXG4gIGg6IG51bWJlcjtcclxuICB2OiBudW1iZXI7XHJcbiAgYmxvY2tzUGVyTGluZTogbnVtYmVyO1xyXG4gIGJsb2Nrc1BlckNvbHVtbjogbnVtYmVyO1xyXG4gIGJsb2NrczogSW50MzJBcnJheVtdW107XHJcbiAgcHJlZDogbnVtYmVyOyAvLyA/Pz9cclxuICBxdWFudGl6YXRpb25JZHg/OiBudW1iZXI7XHJcbiAgcXVhbnRpemF0aW9uVGFibGU/OiBJbnQzMkFycmF5O1xyXG4gIGh1ZmZtYW5UYWJsZURDPzogbnVtYmVyW10gfCBudW1iZXJbXVtdO1xyXG4gIGh1ZmZtYW5UYWJsZUFDPzogbnVtYmVyW10gfCBudW1iZXJbXVtdO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgRnJhbWUge1xyXG4gIGV4dGVuZGVkOiBib29sZWFuO1xyXG4gIHByb2dyZXNzaXZlOiBib29sZWFuO1xyXG4gIHByZWNpc2lvbjogbnVtYmVyO1xyXG4gIHNjYW5MaW5lczogbnVtYmVyO1xyXG4gIHNhbXBsZXNQZXJMaW5lOiBudW1iZXI7XHJcbiAgY29tcG9uZW50czogeyBba2V5OiBudW1iZXJdOiBDb21wb25lbnQ7IH07XHJcbiAgY29tcG9uZW50c09yZGVyOiBudW1iZXJbXTtcclxuICBtYXhIOiBudW1iZXI7XHJcbiAgbWF4VjogbnVtYmVyO1xyXG4gIG1jdXNQZXJMaW5lOiBudW1iZXI7XHJcbiAgbWN1c1BlckNvbHVtbjogbnVtYmVyO1xyXG59XHJcblxyXG5jb25zdCBkY3RaaWdaYWcgPSBuZXcgSW50MzJBcnJheShbXHJcbiAgMCxcclxuICAxLCA4LFxyXG4gIDE2LCA5LCAyLFxyXG4gIDMsIDEwLCAxNywgMjQsXHJcbiAgMzIsIDI1LCAxOCwgMTEsIDQsXHJcbiAgNSwgMTIsIDE5LCAyNiwgMzMsIDQwLFxyXG4gIDQ4LCA0MSwgMzQsIDI3LCAyMCwgMTMsIDYsXHJcbiAgNywgMTQsIDIxLCAyOCwgMzUsIDQyLCA0OSwgNTYsXHJcbiAgNTcsIDUwLCA0MywgMzYsIDI5LCAyMiwgMTUsXHJcbiAgMjMsIDMwLCAzNywgNDQsIDUxLCA1OCxcclxuICA1OSwgNTIsIDQ1LCAzOCwgMzEsXHJcbiAgMzksIDQ2LCA1MywgNjAsXHJcbiAgNjEsIDU0LCA0NyxcclxuICA1NSwgNjIsXHJcbiAgNjNcclxuXSk7XHJcbmNvbnN0IGRjdENvczEgPSA0MDE3OyAvLyBjb3MocGkvMTYpXHJcbmNvbnN0IGRjdFNpbjEgPSA3OTk7IC8vIHNpbihwaS8xNilcclxuY29uc3QgZGN0Q29zMyA9IDM0MDY7IC8vIGNvcygzKnBpLzE2KVxyXG5jb25zdCBkY3RTaW4zID0gMjI3NjsgLy8gc2luKDMqcGkvMTYpXHJcbmNvbnN0IGRjdENvczYgPSAxNTY3OyAvLyBjb3MoNipwaS8xNilcclxuY29uc3QgZGN0U2luNiA9IDM3ODQ7IC8vIHNpbig2KnBpLzE2KVxyXG5jb25zdCBkY3RTcXJ0MiA9IDU3OTM7IC8vIHNxcnQoMilcclxuY29uc3QgZGN0U3FydDFkMiA9IDI4OTY7IC8vIHNxcnQoMikgLyAyXHJcblxyXG5jb25zdCBtYXhSZXNvbHV0aW9uSW5NUCA9IDEwMDsgLy8gRG9uJ3QgZGVjb2RlIG1vcmUgdGhhbiAxMDAgbWVnYXBpeGVsc1xyXG5jb25zdCBtYXhNZW1vcnlVc2FnZUJ5dGVzID0gNjQgKiAxMDI0ICogMTAyNDsgLy8gRG9uJ3QgZGVjb2RlIGlmIG1lbW9yeSBmb290cHJpbnQgaXMgbW9yZSB0aGFuIDY0TUJcclxubGV0IHRvdGFsQnl0ZXNBbGxvY2F0ZWQgPSAwOyAvLyBhdm9pZCB1bmV4cGVjdGVkIE9PTXMgZnJvbSB1bnRydXN0ZWQgY29udGVudC5cclxuXHJcbmZ1bmN0aW9uIHJlcXVlc3RNZW1vcnlBbGxvY2F0aW9uKGluY3JlYXNlQW1vdW50OiBudW1iZXIpIHtcclxuICBjb25zdCB0b3RhbE1lbW9yeUltcGFjdEJ5dGVzID0gdG90YWxCeXRlc0FsbG9jYXRlZCArIGluY3JlYXNlQW1vdW50O1xyXG4gIGlmICh0b3RhbE1lbW9yeUltcGFjdEJ5dGVzID4gbWF4TWVtb3J5VXNhZ2VCeXRlcykge1xyXG4gICAgY29uc3QgZXhjZWVkZWRBbW91bnQgPSBNYXRoLmNlaWwoKHRvdGFsTWVtb3J5SW1wYWN0Qnl0ZXMgLSBtYXhNZW1vcnlVc2FnZUJ5dGVzKSAvIDEwMjQgLyAxMDI0KTtcclxuICAgIHRocm93IG5ldyBFcnJvcihgTWF4IG1lbW9yeSBsaW1pdCBleGNlZWRlZCBieSBhdCBsZWFzdCAke2V4Y2VlZGVkQW1vdW50fU1CYCk7XHJcbiAgfVxyXG5cclxuICB0b3RhbEJ5dGVzQWxsb2NhdGVkID0gdG90YWxNZW1vcnlJbXBhY3RCeXRlcztcclxufVxyXG5cclxuZnVuY3Rpb24gYnVpbGRIdWZmbWFuVGFibGUoY29kZUxlbmd0aHM6IFVpbnQ4QXJyYXksIHZhbHVlczogVWludDhBcnJheSkge1xyXG4gIGxldCBsZW5ndGggPSAxNjtcclxuXHJcbiAgd2hpbGUgKGxlbmd0aCA+IDAgJiYgIWNvZGVMZW5ndGhzW2xlbmd0aCAtIDFdKSBsZW5ndGgtLTtcclxuXHJcbiAgaW50ZXJmYWNlIENvZGUge1xyXG4gICAgY2hpbGRyZW46IG51bWJlcltdIHwgbnVtYmVyW11bXTtcclxuICAgIGluZGV4OiBudW1iZXI7XHJcbiAgfVxyXG5cclxuICBjb25zdCBjb2RlOiBDb2RlW10gPSBbeyBjaGlsZHJlbjogW10sIGluZGV4OiAwIH1dO1xyXG4gIGxldCBrID0gMDtcclxuICBsZXQgcCA9IGNvZGVbMF07XHJcblxyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcclxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgY29kZUxlbmd0aHNbaV07IGorKykge1xyXG4gICAgICBwID0gY29kZS5wb3AoKSE7XHJcbiAgICAgIHAuY2hpbGRyZW5bcC5pbmRleF0gPSB2YWx1ZXNba107XHJcbiAgICAgIHdoaWxlIChwLmluZGV4ID4gMCkge1xyXG4gICAgICAgIGlmIChjb2RlLmxlbmd0aCA9PT0gMCkgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgcmVjcmVhdGUgSHVmZm1hbiBUYWJsZScpO1xyXG4gICAgICAgIHAgPSBjb2RlLnBvcCgpITtcclxuICAgICAgfVxyXG4gICAgICBwLmluZGV4Kys7XHJcbiAgICAgIGNvZGUucHVzaChwKTtcclxuICAgICAgd2hpbGUgKGNvZGUubGVuZ3RoIDw9IGkpIHtcclxuICAgICAgICBjb25zdCBxOiBDb2RlID0geyBjaGlsZHJlbjogW10sIGluZGV4OiAwIH07XHJcbiAgICAgICAgY29kZS5wdXNoKHEpO1xyXG4gICAgICAgIHAuY2hpbGRyZW5bcC5pbmRleF0gPSBxLmNoaWxkcmVuIGFzIG51bWJlcltdO1xyXG4gICAgICAgIHAgPSBxO1xyXG4gICAgICB9XHJcbiAgICAgIGsrKztcclxuICAgIH1cclxuICAgIGlmIChpICsgMSA8IGxlbmd0aCkge1xyXG4gICAgICAvLyBwIGhlcmUgcG9pbnRzIHRvIGxhc3QgY29kZVxyXG4gICAgICBjb25zdCBxOiBDb2RlID0geyBjaGlsZHJlbjogW10sIGluZGV4OiAwIH07XHJcbiAgICAgIGNvZGUucHVzaChxKTtcclxuICAgICAgcC5jaGlsZHJlbltwLmluZGV4XSA9IHEuY2hpbGRyZW4gYXMgbnVtYmVyW107XHJcbiAgICAgIHAgPSBxO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGNvZGVbMF0uY2hpbGRyZW47XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGRlY29kZVNjYW4oXHJcbiAgZGF0YTogVWludDhBcnJheSwgb2Zmc2V0OiBudW1iZXIsIGZyYW1lOiBGcmFtZSwgY29tcG9uZW50czogQ29tcG9uZW50W10sIHJlc2V0SW50ZXJ2YWw6IG51bWJlcixcclxuICBzcGVjdHJhbFN0YXJ0OiBudW1iZXIsIHNwZWN0cmFsRW5kOiBudW1iZXIsIHN1Y2Nlc3NpdmVQcmV2OiBudW1iZXIsIHN1Y2Nlc3NpdmU6IG51bWJlclxyXG4pIHtcclxuICBjb25zdCBtY3VzUGVyTGluZSA9IGZyYW1lLm1jdXNQZXJMaW5lO1xyXG4gIGNvbnN0IHByb2dyZXNzaXZlID0gZnJhbWUucHJvZ3Jlc3NpdmU7XHJcbiAgY29uc3Qgc3RhcnRPZmZzZXQgPSBvZmZzZXQ7XHJcbiAgbGV0IGJpdHNEYXRhID0gMDtcclxuICBsZXQgYml0c0NvdW50ID0gMDtcclxuXHJcbiAgZnVuY3Rpb24gcmVhZEJpdCgpIHtcclxuICAgIGlmIChiaXRzQ291bnQgPiAwKSB7XHJcbiAgICAgIGJpdHNDb3VudC0tO1xyXG4gICAgICByZXR1cm4gKGJpdHNEYXRhID4+IGJpdHNDb3VudCkgJiAxO1xyXG4gICAgfVxyXG5cclxuICAgIGJpdHNEYXRhID0gZGF0YVtvZmZzZXQrK107XHJcblxyXG4gICAgaWYgKGJpdHNEYXRhID09IDB4RkYpIHtcclxuICAgICAgY29uc3QgbmV4dEJ5dGUgPSBkYXRhW29mZnNldCsrXTtcclxuICAgICAgaWYgKG5leHRCeXRlKSB0aHJvdyBuZXcgRXJyb3IoYHVuZXhwZWN0ZWQgbWFya2VyOiAkeygoYml0c0RhdGEgPDwgOCkgfCBuZXh0Qnl0ZSkudG9TdHJpbmcoMTYpfWApO1xyXG4gICAgICAvLyB1bnN0dWZmIDBcclxuICAgIH1cclxuXHJcbiAgICBiaXRzQ291bnQgPSA3O1xyXG4gICAgcmV0dXJuIGJpdHNEYXRhID4+PiA3O1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZGVjb2RlSHVmZm1hbih0cmVlOiBudW1iZXJbXSB8IG51bWJlcltdW10pIHtcclxuICAgIGxldCBub2RlOiBudW1iZXIgfCBudW1iZXJbXSB8IG51bWJlcltdW10gPSB0cmVlO1xyXG5cclxuICAgIHdoaWxlICh0cnVlKSB7XHJcbiAgICAgIG5vZGUgPSBub2RlW3JlYWRCaXQoKV07XHJcbiAgICAgIGlmICh0eXBlb2Ygbm9kZSA9PT0gJ251bWJlcicpIHJldHVybiBub2RlO1xyXG4gICAgICBpZiAobm9kZSA9PT0gdW5kZWZpbmVkKSB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgaHVmZm1hbiBzZXF1ZW5jZScpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gcmVjZWl2ZShsZW5ndGg6IG51bWJlcikge1xyXG4gICAgbGV0IG4gPSAwO1xyXG4gICAgd2hpbGUgKGxlbmd0aCA+IDApIHtcclxuICAgICAgbiA9IChuIDw8IDEpIHwgcmVhZEJpdCgpO1xyXG4gICAgICBsZW5ndGgtLTtcclxuICAgIH1cclxuICAgIHJldHVybiBuO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gcmVjZWl2ZUFuZEV4dGVuZChsZW5ndGg6IG51bWJlcikge1xyXG4gICAgbGV0IG4gPSByZWNlaXZlKGxlbmd0aCk7XHJcbiAgICBpZiAobiA+PSAxIDw8IChsZW5ndGggLSAxKSkgcmV0dXJuIG47XHJcbiAgICByZXR1cm4gbiArICgtMSA8PCBsZW5ndGgpICsgMTtcclxuICB9XHJcblxyXG4gIHR5cGUgRGVjb2RlRm4gPSAoY29tcG9uZW50OiBDb21wb25lbnQsIHp6OiBJbnQzMkFycmF5KSA9PiB2b2lkO1xyXG5cclxuICBmdW5jdGlvbiBkZWNvZGVCYXNlbGluZShjb21wb25lbnQ6IENvbXBvbmVudCwgeno6IEludDMyQXJyYXkpIHtcclxuICAgIGNvbnN0IHQgPSBkZWNvZGVIdWZmbWFuKGNvbXBvbmVudC5odWZmbWFuVGFibGVEQyEpO1xyXG4gICAgY29uc3QgZGlmZiA9IHQgPT09IDAgPyAwIDogcmVjZWl2ZUFuZEV4dGVuZCh0KTtcclxuICAgIHp6WzBdID0gKGNvbXBvbmVudC5wcmVkICs9IGRpZmYpO1xyXG4gICAgbGV0IGsgPSAxO1xyXG5cclxuICAgIHdoaWxlIChrIDwgNjQpIHtcclxuICAgICAgY29uc3QgcnMgPSBkZWNvZGVIdWZmbWFuKGNvbXBvbmVudC5odWZmbWFuVGFibGVBQyEpO1xyXG4gICAgICBjb25zdCBzID0gcnMgJiAxNTtcclxuICAgICAgY29uc3QgciA9IHJzID4+IDQ7XHJcbiAgICAgIGlmIChzID09PSAwKSB7XHJcbiAgICAgICAgaWYgKHIgPCAxNSkgYnJlYWs7XHJcbiAgICAgICAgayArPSAxNjtcclxuICAgICAgICBjb250aW51ZTtcclxuICAgICAgfVxyXG4gICAgICBrICs9IHI7XHJcbiAgICAgIGNvbnN0IHogPSBkY3RaaWdaYWdba107XHJcbiAgICAgIHp6W3pdID0gcmVjZWl2ZUFuZEV4dGVuZChzKTtcclxuICAgICAgaysrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZGVjb2RlRENGaXJzdChjb21wb25lbnQ6IENvbXBvbmVudCwgeno6IEludDMyQXJyYXkpIHtcclxuICAgIGNvbnN0IHQgPSBkZWNvZGVIdWZmbWFuKGNvbXBvbmVudC5odWZmbWFuVGFibGVEQyEpO1xyXG4gICAgY29uc3QgZGlmZiA9IHQgPT09IDAgPyAwIDogKHJlY2VpdmVBbmRFeHRlbmQodCkgPDwgc3VjY2Vzc2l2ZSk7XHJcbiAgICB6elswXSA9IChjb21wb25lbnQucHJlZCArPSBkaWZmKTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGRlY29kZURDU3VjY2Vzc2l2ZShfY29tcG9uZW50OiBDb21wb25lbnQsIHp6OiBJbnQzMkFycmF5KSB7XHJcbiAgICB6elswXSB8PSByZWFkQml0KCkgPDwgc3VjY2Vzc2l2ZTtcclxuICB9XHJcblxyXG4gIGxldCBlb2JydW4gPSAwO1xyXG5cclxuICBmdW5jdGlvbiBkZWNvZGVBQ0ZpcnN0KGNvbXBvbmVudDogQ29tcG9uZW50LCB6ejogSW50MzJBcnJheSkge1xyXG4gICAgaWYgKGVvYnJ1biA+IDApIHtcclxuICAgICAgZW9icnVuLS07XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGxldCBrID0gc3BlY3RyYWxTdGFydCwgZSA9IHNwZWN0cmFsRW5kO1xyXG4gICAgd2hpbGUgKGsgPD0gZSkge1xyXG4gICAgICBjb25zdCBycyA9IGRlY29kZUh1ZmZtYW4oY29tcG9uZW50Lmh1ZmZtYW5UYWJsZUFDISk7XHJcbiAgICAgIGNvbnN0IHMgPSBycyAmIDE1O1xyXG4gICAgICBjb25zdCByID0gcnMgPj4gNDtcclxuICAgICAgaWYgKHMgPT09IDApIHtcclxuICAgICAgICBpZiAociA8IDE1KSB7XHJcbiAgICAgICAgICBlb2JydW4gPSByZWNlaXZlKHIpICsgKDEgPDwgcikgLSAxO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGsgKz0gMTY7XHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIH1cclxuICAgICAgayArPSByO1xyXG4gICAgICBjb25zdCB6ID0gZGN0WmlnWmFnW2tdO1xyXG4gICAgICB6elt6XSA9IHJlY2VpdmVBbmRFeHRlbmQocykgKiAoMSA8PCBzdWNjZXNzaXZlKTtcclxuICAgICAgaysrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbGV0IHN1Y2Nlc3NpdmVBQ1N0YXRlID0gMDtcclxuICBsZXQgc3VjY2Vzc2l2ZUFDTmV4dFZhbHVlID0gMDtcclxuXHJcbiAgZnVuY3Rpb24gZGVjb2RlQUNTdWNjZXNzaXZlKGNvbXBvbmVudDogQ29tcG9uZW50LCB6ejogSW50MzJBcnJheSkge1xyXG4gICAgbGV0IGsgPSBzcGVjdHJhbFN0YXJ0O1xyXG4gICAgbGV0IGUgPSBzcGVjdHJhbEVuZDtcclxuICAgIGxldCByID0gMDtcclxuXHJcbiAgICB3aGlsZSAoayA8PSBlKSB7XHJcbiAgICAgIGNvbnN0IHogPSBkY3RaaWdaYWdba107XHJcbiAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IHp6W3pdIDwgMCA/IC0xIDogMTtcclxuXHJcbiAgICAgIHN3aXRjaCAoc3VjY2Vzc2l2ZUFDU3RhdGUpIHtcclxuICAgICAgICBjYXNlIDA6IC8vIGluaXRpYWwgc3RhdGVcclxuICAgICAgICAgIGNvbnN0IHJzID0gZGVjb2RlSHVmZm1hbihjb21wb25lbnQuaHVmZm1hblRhYmxlQUMhKTtcclxuICAgICAgICAgIGNvbnN0IHMgPSBycyAmIDE1O1xyXG4gICAgICAgICAgciA9IHJzID4+IDQ7IC8vIHRoaXMgd2FzIG5ldyB2YXJpYWJsZSBpbiBvbGQgY29kZVxyXG4gICAgICAgICAgaWYgKHMgPT09IDApIHtcclxuICAgICAgICAgICAgaWYgKHIgPCAxNSkge1xyXG4gICAgICAgICAgICAgIGVvYnJ1biA9IHJlY2VpdmUocikgKyAoMSA8PCByKTtcclxuICAgICAgICAgICAgICBzdWNjZXNzaXZlQUNTdGF0ZSA9IDQ7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgciA9IDE2O1xyXG4gICAgICAgICAgICAgIHN1Y2Nlc3NpdmVBQ1N0YXRlID0gMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHMgIT09IDEpIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBBQ24gZW5jb2RpbmcnKTtcclxuICAgICAgICAgICAgc3VjY2Vzc2l2ZUFDTmV4dFZhbHVlID0gcmVjZWl2ZUFuZEV4dGVuZChzKTtcclxuICAgICAgICAgICAgc3VjY2Vzc2l2ZUFDU3RhdGUgPSByID8gMiA6IDM7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICBjYXNlIDE6IC8vIHNraXBwaW5nIHIgemVybyBpdGVtc1xyXG4gICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgIGlmICh6elt6XSkge1xyXG4gICAgICAgICAgICB6elt6XSArPSAocmVhZEJpdCgpIDw8IHN1Y2Nlc3NpdmUpICogZGlyZWN0aW9uO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgci0tO1xyXG4gICAgICAgICAgICBpZiAociA9PT0gMCkgc3VjY2Vzc2l2ZUFDU3RhdGUgPSBzdWNjZXNzaXZlQUNTdGF0ZSA9PSAyID8gMyA6IDA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDM6IC8vIHNldCB2YWx1ZSBmb3IgYSB6ZXJvIGl0ZW1cclxuICAgICAgICAgIGlmICh6elt6XSkge1xyXG4gICAgICAgICAgICB6elt6XSArPSAocmVhZEJpdCgpIDw8IHN1Y2Nlc3NpdmUpICogZGlyZWN0aW9uO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgenpbel0gPSBzdWNjZXNzaXZlQUNOZXh0VmFsdWUgPDwgc3VjY2Vzc2l2ZTtcclxuICAgICAgICAgICAgc3VjY2Vzc2l2ZUFDU3RhdGUgPSAwO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSA0OiAvLyBlb2JcclxuICAgICAgICAgIGlmICh6elt6XSkge1xyXG4gICAgICAgICAgICB6elt6XSArPSAocmVhZEJpdCgpIDw8IHN1Y2Nlc3NpdmUpICogZGlyZWN0aW9uO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgaysrO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChzdWNjZXNzaXZlQUNTdGF0ZSA9PT0gNCkge1xyXG4gICAgICBlb2JydW4tLTtcclxuICAgICAgaWYgKGVvYnJ1biA9PT0gMCkgc3VjY2Vzc2l2ZUFDU3RhdGUgPSAwO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZGVjb2RlTWN1KGNvbXBvbmVudDogQ29tcG9uZW50LCBkZWNvZGU6IERlY29kZUZuLCBtY3U6IG51bWJlciwgcm93OiBudW1iZXIsIGNvbDogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBtY3VSb3cgPSAobWN1IC8gbWN1c1BlckxpbmUpIHwgMDtcclxuICAgIGNvbnN0IG1jdUNvbCA9IG1jdSAlIG1jdXNQZXJMaW5lO1xyXG4gICAgY29uc3QgYmxvY2tSb3cgPSBtY3VSb3cgKiBjb21wb25lbnQudiArIHJvdztcclxuICAgIGNvbnN0IGJsb2NrQ29sID0gbWN1Q29sICogY29tcG9uZW50LmggKyBjb2w7XHJcbiAgICAvLyBJZiB0aGUgYmxvY2sgaXMgbWlzc2luZywganVzdCBza2lwIGl0LlxyXG4gICAgaWYgKGNvbXBvbmVudC5ibG9ja3NbYmxvY2tSb3ddID09PSB1bmRlZmluZWQpIHJldHVybjtcclxuICAgIGRlY29kZShjb21wb25lbnQsIGNvbXBvbmVudC5ibG9ja3NbYmxvY2tSb3ddW2Jsb2NrQ29sXSk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBkZWNvZGVCbG9jayhjb21wb25lbnQ6IENvbXBvbmVudCwgZGVjb2RlOiBEZWNvZGVGbiwgbWN1OiBudW1iZXIpIHtcclxuICAgIGNvbnN0IGJsb2NrUm93ID0gKG1jdSAvIGNvbXBvbmVudC5ibG9ja3NQZXJMaW5lKSB8IDA7XHJcbiAgICBjb25zdCBibG9ja0NvbCA9IG1jdSAlIGNvbXBvbmVudC5ibG9ja3NQZXJMaW5lO1xyXG4gICAgLy8gSWYgdGhlIGJsb2NrIGlzIG1pc3NpbmcsIGp1c3Qgc2tpcCBpdC5cclxuICAgIGlmIChjb21wb25lbnQuYmxvY2tzW2Jsb2NrUm93XSA9PT0gdW5kZWZpbmVkKSByZXR1cm47XHJcbiAgICBkZWNvZGUoY29tcG9uZW50LCBjb21wb25lbnQuYmxvY2tzW2Jsb2NrUm93XVtibG9ja0NvbF0pO1xyXG4gIH1cclxuXHJcbiAgY29uc3QgY29tcG9uZW50c0xlbmd0aCA9IGNvbXBvbmVudHMubGVuZ3RoO1xyXG4gIGxldCBjb21wb25lbnQ6IENvbXBvbmVudDtcclxuICBsZXQgZGVjb2RlRm46IERlY29kZUZuO1xyXG5cclxuICBpZiAocHJvZ3Jlc3NpdmUpIHtcclxuICAgIGlmIChzcGVjdHJhbFN0YXJ0ID09PSAwKSB7XHJcbiAgICAgIGRlY29kZUZuID0gc3VjY2Vzc2l2ZVByZXYgPT09IDAgPyBkZWNvZGVEQ0ZpcnN0IDogZGVjb2RlRENTdWNjZXNzaXZlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZGVjb2RlRm4gPSBzdWNjZXNzaXZlUHJldiA9PT0gMCA/IGRlY29kZUFDRmlyc3QgOiBkZWNvZGVBQ1N1Y2Nlc3NpdmU7XHJcbiAgICB9XHJcbiAgfSBlbHNlIHtcclxuICAgIGRlY29kZUZuID0gZGVjb2RlQmFzZWxpbmU7XHJcbiAgfVxyXG5cclxuICBsZXQgbWN1ID0gMDtcclxuICBsZXQgbWN1RXhwZWN0ZWQ6IG51bWJlcjtcclxuXHJcbiAgaWYgKGNvbXBvbmVudHNMZW5ndGggPT0gMSkge1xyXG4gICAgbWN1RXhwZWN0ZWQgPSBjb21wb25lbnRzWzBdLmJsb2Nrc1BlckxpbmUgKiBjb21wb25lbnRzWzBdLmJsb2Nrc1BlckNvbHVtbjtcclxuICB9IGVsc2Uge1xyXG4gICAgbWN1RXhwZWN0ZWQgPSBtY3VzUGVyTGluZSAqIGZyYW1lLm1jdXNQZXJDb2x1bW47XHJcbiAgfVxyXG5cclxuICBpZiAoIXJlc2V0SW50ZXJ2YWwpIHJlc2V0SW50ZXJ2YWwgPSBtY3VFeHBlY3RlZDtcclxuXHJcbiAgbGV0IGg6IG51bWJlcjtcclxuICBsZXQgdjogbnVtYmVyO1xyXG4gIGxldCBtYXJrZXI6IG51bWJlcjtcclxuXHJcbiAgd2hpbGUgKG1jdSA8IG1jdUV4cGVjdGVkKSB7XHJcbiAgICAvLyByZXNldCBpbnRlcnZhbCBzdHVmZlxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb21wb25lbnRzTGVuZ3RoOyBpKyspIGNvbXBvbmVudHNbaV0ucHJlZCA9IDA7XHJcbiAgICBlb2JydW4gPSAwO1xyXG5cclxuICAgIGlmIChjb21wb25lbnRzTGVuZ3RoID09IDEpIHtcclxuICAgICAgY29tcG9uZW50ID0gY29tcG9uZW50c1swXTtcclxuICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCByZXNldEludGVydmFsOyBuKyspIHtcclxuICAgICAgICBkZWNvZGVCbG9jayhjb21wb25lbnQsIGRlY29kZUZuLCBtY3UpO1xyXG4gICAgICAgIG1jdSsrO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBmb3IgKGxldCBuID0gMDsgbiA8IHJlc2V0SW50ZXJ2YWw7IG4rKykge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29tcG9uZW50c0xlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBjb21wb25lbnQgPSBjb21wb25lbnRzW2ldO1xyXG4gICAgICAgICAgaCA9IGNvbXBvbmVudC5oO1xyXG4gICAgICAgICAgdiA9IGNvbXBvbmVudC52O1xyXG4gICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB2OyBqKyspIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBoOyBrKyspIHtcclxuICAgICAgICAgICAgICBkZWNvZGVNY3UoY29tcG9uZW50LCBkZWNvZGVGbiwgbWN1LCBqLCBrKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBtY3UrKztcclxuXHJcbiAgICAgICAgLy8gSWYgd2UndmUgcmVhY2hlZCBvdXIgZXhwZWN0ZWQgTUNVJ3MsIHN0b3AgZGVjb2RpbmdcclxuICAgICAgICBpZiAobWN1ID09PSBtY3VFeHBlY3RlZCkgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAobWN1ID09PSBtY3VFeHBlY3RlZCkge1xyXG4gICAgICAvLyBTa2lwIHRyYWlsaW5nIGJ5dGVzIGF0IHRoZSBlbmQgb2YgdGhlIHNjYW4gLSB1bnRpbCB3ZSByZWFjaCB0aGUgbmV4dCBtYXJrZXJcclxuICAgICAgZG8ge1xyXG4gICAgICAgIGlmIChkYXRhW29mZnNldF0gPT09IDB4RkYpIHtcclxuICAgICAgICAgIGlmIChkYXRhW29mZnNldCArIDFdICE9PSAweDAwKSB7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBvZmZzZXQgKz0gMTtcclxuICAgICAgfSB3aGlsZSAob2Zmc2V0IDwgZGF0YS5sZW5ndGggLSAyKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBmaW5kIG1hcmtlclxyXG4gICAgYml0c0NvdW50ID0gMDtcclxuICAgIG1hcmtlciA9IChkYXRhW29mZnNldF0gPDwgOCkgfCBkYXRhW29mZnNldCArIDFdO1xyXG5cclxuICAgIGlmIChtYXJrZXIgPCAweEZGMDApIHRocm93IG5ldyBFcnJvcignbWFya2VyIHdhcyBub3QgZm91bmQnKTtcclxuXHJcbiAgICBpZiAobWFya2VyID49IDB4RkZEMCAmJiBtYXJrZXIgPD0gMHhGRkQ3KSB7IC8vIFJTVHhcclxuICAgICAgb2Zmc2V0ICs9IDI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJldHVybiBvZmZzZXQgLSBzdGFydE9mZnNldDtcclxufVxyXG5cclxuZnVuY3Rpb24gYnVpbGRDb21wb25lbnREYXRhKGNvbXBvbmVudDogQ29tcG9uZW50KSB7XHJcbiAgY29uc3QgbGluZXMgPSBbXTtcclxuICBjb25zdCBibG9ja3NQZXJMaW5lID0gY29tcG9uZW50LmJsb2Nrc1BlckxpbmU7XHJcbiAgY29uc3QgYmxvY2tzUGVyQ29sdW1uID0gY29tcG9uZW50LmJsb2Nrc1BlckNvbHVtbjtcclxuICBjb25zdCBzYW1wbGVzUGVyTGluZSA9IGJsb2Nrc1BlckxpbmUgPDwgMztcclxuICAvLyBPbmx5IDEgdXNlZCBwZXIgaW52b2NhdGlvbiBvZiB0aGlzIGZ1bmN0aW9uIGFuZCBnYXJiYWdlIGNvbGxlY3RlZCBhZnRlciBpbnZvY2F0aW9uLCBzbyBubyBuZWVkIHRvIGFjY291bnQgZm9yIGl0cyBtZW1vcnkgZm9vdHByaW50LlxyXG4gIGNvbnN0IFIgPSBuZXcgSW50MzJBcnJheSg2NCk7XHJcbiAgY29uc3QgciA9IG5ldyBVaW50OEFycmF5KDY0KTtcclxuXHJcbiAgLy8gQSBwb3J0IG9mIHBvcHBsZXIncyBJRENUIG1ldGhvZCB3aGljaCBpbiB0dXJuIGlzIHRha2VuIGZyb206XHJcbiAgLy8gICBDaHJpc3RvcGggTG9lZmZsZXIsIEFkcmlhYW4gTGlndGVuYmVyZywgR2VvcmdlIFMuIE1vc2NoeXR6LFxyXG4gIC8vICAgXCJQcmFjdGljYWwgRmFzdCAxLUQgRENUIEFsZ29yaXRobXMgd2l0aCAxMSBNdWx0aXBsaWNhdGlvbnNcIixcclxuICAvLyAgIElFRUUgSW50bC4gQ29uZi4gb24gQWNvdXN0aWNzLCBTcGVlY2ggJiBTaWduYWwgUHJvY2Vzc2luZywgMTk4OSxcclxuICAvLyAgIDk4OC05OTEuXHJcbiAgZnVuY3Rpb24gcXVhbnRpemVBbmRJbnZlcnNlKHp6OiBJbnQzMkFycmF5LCBkYXRhT3V0OiBVaW50OEFycmF5LCBkYXRhSW46IEludDMyQXJyYXkpIHtcclxuICAgIGNvbnN0IHF0ID0gY29tcG9uZW50LnF1YW50aXphdGlvblRhYmxlITtcclxuICAgIGNvbnN0IHAgPSBkYXRhSW47XHJcblxyXG4gICAgLy8gZGVxdWFudFxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCA2NDsgaSsrKSB7XHJcbiAgICAgIHBbaV0gPSB6eltpXSAqIHF0W2ldO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGludmVyc2UgRENUIG9uIHJvd3NcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgODsgKytpKSB7XHJcbiAgICAgIGNvbnN0IHJvdyA9IDggKiBpO1xyXG5cclxuICAgICAgLy8gY2hlY2sgZm9yIGFsbC16ZXJvIEFDIGNvZWZmaWNpZW50c1xyXG4gICAgICBpZiAocFsxICsgcm93XSA9PSAwICYmIHBbMiArIHJvd10gPT0gMCAmJiBwWzMgKyByb3ddID09IDAgJiZcclxuICAgICAgICBwWzQgKyByb3ddID09IDAgJiYgcFs1ICsgcm93XSA9PSAwICYmIHBbNiArIHJvd10gPT0gMCAmJlxyXG4gICAgICAgIHBbNyArIHJvd10gPT0gMCkge1xyXG4gICAgICAgIGNvbnN0IHQgPSAoZGN0U3FydDIgKiBwWzAgKyByb3ddICsgNTEyKSA+PiAxMDtcclxuICAgICAgICBwWzAgKyByb3ddID0gdDtcclxuICAgICAgICBwWzEgKyByb3ddID0gdDtcclxuICAgICAgICBwWzIgKyByb3ddID0gdDtcclxuICAgICAgICBwWzMgKyByb3ddID0gdDtcclxuICAgICAgICBwWzQgKyByb3ddID0gdDtcclxuICAgICAgICBwWzUgKyByb3ddID0gdDtcclxuICAgICAgICBwWzYgKyByb3ddID0gdDtcclxuICAgICAgICBwWzcgKyByb3ddID0gdDtcclxuICAgICAgICBjb250aW51ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gc3RhZ2UgNFxyXG4gICAgICBsZXQgdjAgPSAoZGN0U3FydDIgKiBwWzAgKyByb3ddICsgMTI4KSA+PiA4O1xyXG4gICAgICBsZXQgdjEgPSAoZGN0U3FydDIgKiBwWzQgKyByb3ddICsgMTI4KSA+PiA4O1xyXG4gICAgICBsZXQgdjIgPSBwWzIgKyByb3ddO1xyXG4gICAgICBsZXQgdjMgPSBwWzYgKyByb3ddO1xyXG4gICAgICBsZXQgdjQgPSAoZGN0U3FydDFkMiAqIChwWzEgKyByb3ddIC0gcFs3ICsgcm93XSkgKyAxMjgpID4+IDg7XHJcbiAgICAgIGxldCB2NyA9IChkY3RTcXJ0MWQyICogKHBbMSArIHJvd10gKyBwWzcgKyByb3ddKSArIDEyOCkgPj4gODtcclxuICAgICAgbGV0IHY1ID0gcFszICsgcm93XSA8PCA0O1xyXG4gICAgICBsZXQgdjYgPSBwWzUgKyByb3ddIDw8IDQ7XHJcblxyXG4gICAgICAvLyBzdGFnZSAzXHJcbiAgICAgIGxldCB0ID0gKHYwIC0gdjEgKyAxKSA+PiAxO1xyXG4gICAgICB2MCA9ICh2MCArIHYxICsgMSkgPj4gMTtcclxuICAgICAgdjEgPSB0O1xyXG4gICAgICB0ID0gKHYyICogZGN0U2luNiArIHYzICogZGN0Q29zNiArIDEyOCkgPj4gODtcclxuICAgICAgdjIgPSAodjIgKiBkY3RDb3M2IC0gdjMgKiBkY3RTaW42ICsgMTI4KSA+PiA4O1xyXG4gICAgICB2MyA9IHQ7XHJcbiAgICAgIHQgPSAodjQgLSB2NiArIDEpID4+IDE7XHJcbiAgICAgIHY0ID0gKHY0ICsgdjYgKyAxKSA+PiAxO1xyXG4gICAgICB2NiA9IHQ7XHJcbiAgICAgIHQgPSAodjcgKyB2NSArIDEpID4+IDE7XHJcbiAgICAgIHY1ID0gKHY3IC0gdjUgKyAxKSA+PiAxO1xyXG4gICAgICB2NyA9IHQ7XHJcblxyXG4gICAgICAvLyBzdGFnZSAyXHJcbiAgICAgIHQgPSAodjAgLSB2MyArIDEpID4+IDE7XHJcbiAgICAgIHYwID0gKHYwICsgdjMgKyAxKSA+PiAxO1xyXG4gICAgICB2MyA9IHQ7XHJcbiAgICAgIHQgPSAodjEgLSB2MiArIDEpID4+IDE7XHJcbiAgICAgIHYxID0gKHYxICsgdjIgKyAxKSA+PiAxO1xyXG4gICAgICB2MiA9IHQ7XHJcbiAgICAgIHQgPSAodjQgKiBkY3RTaW4zICsgdjcgKiBkY3RDb3MzICsgMjA0OCkgPj4gMTI7XHJcbiAgICAgIHY0ID0gKHY0ICogZGN0Q29zMyAtIHY3ICogZGN0U2luMyArIDIwNDgpID4+IDEyO1xyXG4gICAgICB2NyA9IHQ7XHJcbiAgICAgIHQgPSAodjUgKiBkY3RTaW4xICsgdjYgKiBkY3RDb3MxICsgMjA0OCkgPj4gMTI7XHJcbiAgICAgIHY1ID0gKHY1ICogZGN0Q29zMSAtIHY2ICogZGN0U2luMSArIDIwNDgpID4+IDEyO1xyXG4gICAgICB2NiA9IHQ7XHJcblxyXG4gICAgICAvLyBzdGFnZSAxXHJcbiAgICAgIHBbMCArIHJvd10gPSB2MCArIHY3O1xyXG4gICAgICBwWzcgKyByb3ddID0gdjAgLSB2NztcclxuICAgICAgcFsxICsgcm93XSA9IHYxICsgdjY7XHJcbiAgICAgIHBbNiArIHJvd10gPSB2MSAtIHY2O1xyXG4gICAgICBwWzIgKyByb3ddID0gdjIgKyB2NTtcclxuICAgICAgcFs1ICsgcm93XSA9IHYyIC0gdjU7XHJcbiAgICAgIHBbMyArIHJvd10gPSB2MyArIHY0O1xyXG4gICAgICBwWzQgKyByb3ddID0gdjMgLSB2NDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBpbnZlcnNlIERDVCBvbiBjb2x1bW5zXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDg7ICsraSkge1xyXG4gICAgICBjb25zdCBjb2wgPSBpO1xyXG5cclxuICAgICAgLy8gY2hlY2sgZm9yIGFsbC16ZXJvIEFDIGNvZWZmaWNpZW50c1xyXG4gICAgICBpZiAocFsxICogOCArIGNvbF0gPT0gMCAmJiBwWzIgKiA4ICsgY29sXSA9PSAwICYmIHBbMyAqIDggKyBjb2xdID09IDAgJiZcclxuICAgICAgICBwWzQgKiA4ICsgY29sXSA9PSAwICYmIHBbNSAqIDggKyBjb2xdID09IDAgJiYgcFs2ICogOCArIGNvbF0gPT0gMCAmJlxyXG4gICAgICAgIHBbNyAqIDggKyBjb2xdID09IDApIHtcclxuICAgICAgICBjb25zdCB0ID0gKGRjdFNxcnQyICogZGF0YUluW2kgKyAwXSArIDgxOTIpID4+IDE0O1xyXG4gICAgICAgIHBbMCAqIDggKyBjb2xdID0gdDtcclxuICAgICAgICBwWzEgKiA4ICsgY29sXSA9IHQ7XHJcbiAgICAgICAgcFsyICogOCArIGNvbF0gPSB0O1xyXG4gICAgICAgIHBbMyAqIDggKyBjb2xdID0gdDtcclxuICAgICAgICBwWzQgKiA4ICsgY29sXSA9IHQ7XHJcbiAgICAgICAgcFs1ICogOCArIGNvbF0gPSB0O1xyXG4gICAgICAgIHBbNiAqIDggKyBjb2xdID0gdDtcclxuICAgICAgICBwWzcgKiA4ICsgY29sXSA9IHQ7XHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIHN0YWdlIDRcclxuICAgICAgbGV0IHYwID0gKGRjdFNxcnQyICogcFswICogOCArIGNvbF0gKyAyMDQ4KSA+PiAxMjtcclxuICAgICAgbGV0IHYxID0gKGRjdFNxcnQyICogcFs0ICogOCArIGNvbF0gKyAyMDQ4KSA+PiAxMjtcclxuICAgICAgbGV0IHYyID0gcFsyICogOCArIGNvbF07XHJcbiAgICAgIGxldCB2MyA9IHBbNiAqIDggKyBjb2xdO1xyXG4gICAgICBsZXQgdjQgPSAoZGN0U3FydDFkMiAqIChwWzEgKiA4ICsgY29sXSAtIHBbNyAqIDggKyBjb2xdKSArIDIwNDgpID4+IDEyO1xyXG4gICAgICBsZXQgdjcgPSAoZGN0U3FydDFkMiAqIChwWzEgKiA4ICsgY29sXSArIHBbNyAqIDggKyBjb2xdKSArIDIwNDgpID4+IDEyO1xyXG4gICAgICBsZXQgdjUgPSBwWzMgKiA4ICsgY29sXTtcclxuICAgICAgbGV0IHY2ID0gcFs1ICogOCArIGNvbF07XHJcblxyXG4gICAgICAvLyBzdGFnZSAzXHJcbiAgICAgIGxldCB0ID0gKHYwIC0gdjEgKyAxKSA+PiAxO1xyXG4gICAgICB2MCA9ICh2MCArIHYxICsgMSkgPj4gMTtcclxuICAgICAgdjEgPSB0O1xyXG4gICAgICB0ID0gKHYyICogZGN0U2luNiArIHYzICogZGN0Q29zNiArIDIwNDgpID4+IDEyO1xyXG4gICAgICB2MiA9ICh2MiAqIGRjdENvczYgLSB2MyAqIGRjdFNpbjYgKyAyMDQ4KSA+PiAxMjtcclxuICAgICAgdjMgPSB0O1xyXG4gICAgICB0ID0gKHY0IC0gdjYgKyAxKSA+PiAxO1xyXG4gICAgICB2NCA9ICh2NCArIHY2ICsgMSkgPj4gMTtcclxuICAgICAgdjYgPSB0O1xyXG4gICAgICB0ID0gKHY3ICsgdjUgKyAxKSA+PiAxO1xyXG4gICAgICB2NSA9ICh2NyAtIHY1ICsgMSkgPj4gMTtcclxuICAgICAgdjcgPSB0O1xyXG5cclxuICAgICAgLy8gc3RhZ2UgMlxyXG4gICAgICB0ID0gKHYwIC0gdjMgKyAxKSA+PiAxO1xyXG4gICAgICB2MCA9ICh2MCArIHYzICsgMSkgPj4gMTtcclxuICAgICAgdjMgPSB0O1xyXG4gICAgICB0ID0gKHYxIC0gdjIgKyAxKSA+PiAxO1xyXG4gICAgICB2MSA9ICh2MSArIHYyICsgMSkgPj4gMTtcclxuICAgICAgdjIgPSB0O1xyXG4gICAgICB0ID0gKHY0ICogZGN0U2luMyArIHY3ICogZGN0Q29zMyArIDIwNDgpID4+IDEyO1xyXG4gICAgICB2NCA9ICh2NCAqIGRjdENvczMgLSB2NyAqIGRjdFNpbjMgKyAyMDQ4KSA+PiAxMjtcclxuICAgICAgdjcgPSB0O1xyXG4gICAgICB0ID0gKHY1ICogZGN0U2luMSArIHY2ICogZGN0Q29zMSArIDIwNDgpID4+IDEyO1xyXG4gICAgICB2NSA9ICh2NSAqIGRjdENvczEgLSB2NiAqIGRjdFNpbjEgKyAyMDQ4KSA+PiAxMjtcclxuICAgICAgdjYgPSB0O1xyXG5cclxuICAgICAgLy8gc3RhZ2UgMVxyXG4gICAgICBwWzAgKiA4ICsgY29sXSA9IHYwICsgdjc7XHJcbiAgICAgIHBbNyAqIDggKyBjb2xdID0gdjAgLSB2NztcclxuICAgICAgcFsxICogOCArIGNvbF0gPSB2MSArIHY2O1xyXG4gICAgICBwWzYgKiA4ICsgY29sXSA9IHYxIC0gdjY7XHJcbiAgICAgIHBbMiAqIDggKyBjb2xdID0gdjIgKyB2NTtcclxuICAgICAgcFs1ICogOCArIGNvbF0gPSB2MiAtIHY1O1xyXG4gICAgICBwWzMgKiA4ICsgY29sXSA9IHYzICsgdjQ7XHJcbiAgICAgIHBbNCAqIDggKyBjb2xdID0gdjMgLSB2NDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBjb252ZXJ0IHRvIDgtYml0IGludGVnZXJzXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDY0OyArK2kpIHtcclxuICAgICAgY29uc3Qgc2FtcGxlID0gMTI4ICsgKChwW2ldICsgOCkgPj4gNCk7XHJcbiAgICAgIGRhdGFPdXRbaV0gPSBzYW1wbGUgPCAwID8gMCA6IHNhbXBsZSA+IDB4RkYgPyAweEZGIDogc2FtcGxlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVxdWVzdE1lbW9yeUFsbG9jYXRpb24oc2FtcGxlc1BlckxpbmUgKiBibG9ja3NQZXJDb2x1bW4gKiA4KTtcclxuXHJcbiAgZm9yIChsZXQgYmxvY2tSb3cgPSAwOyBibG9ja1JvdyA8IGJsb2Nrc1BlckNvbHVtbjsgYmxvY2tSb3crKykge1xyXG4gICAgY29uc3Qgc2NhbkxpbmUgPSBibG9ja1JvdyA8PCAzO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgODsgaSsrKVxyXG4gICAgICBsaW5lcy5wdXNoKG5ldyBVaW50OEFycmF5KHNhbXBsZXNQZXJMaW5lKSk7XHJcblxyXG4gICAgZm9yIChsZXQgYmxvY2tDb2wgPSAwOyBibG9ja0NvbCA8IGJsb2Nrc1BlckxpbmU7IGJsb2NrQ29sKyspIHtcclxuICAgICAgcXVhbnRpemVBbmRJbnZlcnNlKGNvbXBvbmVudC5ibG9ja3NbYmxvY2tSb3ddW2Jsb2NrQ29sXSwgciwgUik7XHJcblxyXG4gICAgICBsZXQgb2Zmc2V0ID0gMDtcclxuICAgICAgY29uc3Qgc2FtcGxlID0gYmxvY2tDb2wgPDwgMztcclxuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCA4OyBqKyspIHtcclxuICAgICAgICBjb25zdCBsaW5lID0gbGluZXNbc2NhbkxpbmUgKyBqXTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDg7IGkrKylcclxuICAgICAgICAgIGxpbmVbc2FtcGxlICsgaV0gPSByW29mZnNldCsrXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4gbGluZXM7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNsYW1wVG84Yml0KGE6IG51bWJlcikge1xyXG4gIHJldHVybiBhIDwgMCA/IDAgOiBhID4gMjU1ID8gMjU1IDogYTtcclxufVxyXG5cclxuZnVuY3Rpb24gcGFyc2UoZGF0YTogVWludDhBcnJheSkge1xyXG4gIGNvbnN0IHNlbGY6IERlY29kZWQgPSB7XHJcbiAgICB3aWR0aDogMCxcclxuICAgIGhlaWdodDogMCxcclxuICAgIGNvbW1lbnRzOiBbXSxcclxuICAgIGFkb2JlOiB1bmRlZmluZWQsXHJcbiAgICBjb21wb25lbnRzOiBbXSxcclxuICAgIGV4aWZCdWZmZXI6IHVuZGVmaW5lZCxcclxuICAgIGpmaWY6IHVuZGVmaW5lZCxcclxuICB9O1xyXG5cclxuICBjb25zdCBtYXhSZXNvbHV0aW9uSW5QaXhlbHMgPSBtYXhSZXNvbHV0aW9uSW5NUCAqIDEwMDAgKiAxMDAwO1xyXG4gIGxldCBvZmZzZXQgPSAwO1xyXG5cclxuICBmdW5jdGlvbiByZWFkVWludDE2KCkge1xyXG4gICAgY29uc3QgdmFsdWUgPSAoZGF0YVtvZmZzZXRdIDw8IDgpIHwgZGF0YVtvZmZzZXQgKyAxXTtcclxuICAgIG9mZnNldCArPSAyO1xyXG4gICAgcmV0dXJuIHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gcmVhZERhdGFCbG9jaygpIHtcclxuICAgIGNvbnN0IGxlbmd0aCA9IHJlYWRVaW50MTYoKTtcclxuICAgIGNvbnN0IGFycmF5ID0gZGF0YS5zdWJhcnJheShvZmZzZXQsIG9mZnNldCArIGxlbmd0aCAtIDIpO1xyXG4gICAgb2Zmc2V0ICs9IGFycmF5Lmxlbmd0aDtcclxuICAgIHJldHVybiBhcnJheTtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHByZXBhcmVDb21wb25lbnRzKGZyYW1lOiBGcmFtZSkge1xyXG4gICAgbGV0IG1heEggPSAwLCBtYXhWID0gMDtcclxuXHJcbiAgICBmb3IgKGxldCBjb21wb25lbnRJZCBpbiBmcmFtZS5jb21wb25lbnRzKSB7XHJcbiAgICAgIGlmIChmcmFtZS5jb21wb25lbnRzLmhhc093blByb3BlcnR5KGNvbXBvbmVudElkKSkge1xyXG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGZyYW1lLmNvbXBvbmVudHNbY29tcG9uZW50SWRdO1xyXG4gICAgICAgIGlmIChtYXhIIDwgY29tcG9uZW50LmgpIG1heEggPSBjb21wb25lbnQuaDtcclxuICAgICAgICBpZiAobWF4ViA8IGNvbXBvbmVudC52KSBtYXhWID0gY29tcG9uZW50LnY7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBtY3VzUGVyTGluZSA9IE1hdGguY2VpbChmcmFtZS5zYW1wbGVzUGVyTGluZSAvIDggLyBtYXhIKTtcclxuICAgIGNvbnN0IG1jdXNQZXJDb2x1bW4gPSBNYXRoLmNlaWwoZnJhbWUuc2NhbkxpbmVzIC8gOCAvIG1heFYpO1xyXG5cclxuICAgIGZvciAobGV0IGNvbXBvbmVudElkIGluIGZyYW1lLmNvbXBvbmVudHMpIHtcclxuICAgICAgaWYgKGZyYW1lLmNvbXBvbmVudHMuaGFzT3duUHJvcGVydHkoY29tcG9uZW50SWQpKSB7XHJcbiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gZnJhbWUuY29tcG9uZW50c1tjb21wb25lbnRJZF07XHJcbiAgICAgICAgY29uc3QgYmxvY2tzUGVyTGluZSA9IE1hdGguY2VpbChNYXRoLmNlaWwoZnJhbWUuc2FtcGxlc1BlckxpbmUgLyA4KSAqIGNvbXBvbmVudC5oIC8gbWF4SCk7XHJcbiAgICAgICAgY29uc3QgYmxvY2tzUGVyQ29sdW1uID0gTWF0aC5jZWlsKE1hdGguY2VpbChmcmFtZS5zY2FuTGluZXMgLyA4KSAqIGNvbXBvbmVudC52IC8gbWF4Vik7XHJcbiAgICAgICAgY29uc3QgYmxvY2tzUGVyTGluZUZvck1jdSA9IG1jdXNQZXJMaW5lICogY29tcG9uZW50Lmg7XHJcbiAgICAgICAgY29uc3QgYmxvY2tzUGVyQ29sdW1uRm9yTWN1ID0gbWN1c1BlckNvbHVtbiAqIGNvbXBvbmVudC52O1xyXG4gICAgICAgIGNvbnN0IGJsb2Nrc1RvQWxsb2NhdGUgPSBibG9ja3NQZXJDb2x1bW5Gb3JNY3UgKiBibG9ja3NQZXJMaW5lRm9yTWN1O1xyXG4gICAgICAgIGNvbnN0IGJsb2NrczogSW50MzJBcnJheVtdW10gPSBbXTtcclxuXHJcbiAgICAgICAgLy8gRWFjaCBibG9jayBpcyBhIEludDMyQXJyYXkgb2YgbGVuZ3RoIDY0ICg0IHggNjQgPSAyNTYgYnl0ZXMpXHJcbiAgICAgICAgcmVxdWVzdE1lbW9yeUFsbG9jYXRpb24oYmxvY2tzVG9BbGxvY2F0ZSAqIDI1Nik7XHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmxvY2tzUGVyQ29sdW1uRm9yTWN1OyBpKyspIHtcclxuICAgICAgICAgIGNvbnN0IHJvdzogSW50MzJBcnJheVtdID0gW107XHJcbiAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGJsb2Nrc1BlckxpbmVGb3JNY3U7IGorKykge1xyXG4gICAgICAgICAgICByb3cucHVzaChuZXcgSW50MzJBcnJheSg2NCkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYmxvY2tzLnB1c2gocm93KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29tcG9uZW50LmJsb2Nrc1BlckxpbmUgPSBibG9ja3NQZXJMaW5lO1xyXG4gICAgICAgIGNvbXBvbmVudC5ibG9ja3NQZXJDb2x1bW4gPSBibG9ja3NQZXJDb2x1bW47XHJcbiAgICAgICAgY29tcG9uZW50LmJsb2NrcyA9IGJsb2NrcztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZyYW1lLm1heEggPSBtYXhIO1xyXG4gICAgZnJhbWUubWF4ViA9IG1heFY7XHJcbiAgICBmcmFtZS5tY3VzUGVyTGluZSA9IG1jdXNQZXJMaW5lO1xyXG4gICAgZnJhbWUubWN1c1BlckNvbHVtbiA9IG1jdXNQZXJDb2x1bW47XHJcbiAgfVxyXG5cclxuICBsZXQgamZpZiA9IG51bGw7XHJcbiAgbGV0IGFkb2JlID0gbnVsbDtcclxuICBsZXQgZnJhbWU6IEZyYW1lIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xyXG4gIGxldCByZXNldEludGVydmFsID0gMDtcclxuICBsZXQgcXVhbnRpemF0aW9uVGFibGVzID0gW107XHJcbiAgbGV0IGZyYW1lczogRnJhbWVbXSA9IFtdO1xyXG4gIGxldCBodWZmbWFuVGFibGVzQUM6IChudW1iZXJbXSB8IG51bWJlcltdW10pW10gPSBbXTtcclxuICBsZXQgaHVmZm1hblRhYmxlc0RDOiAobnVtYmVyW10gfCBudW1iZXJbXVtdKVtdID0gW107XHJcbiAgbGV0IGZpbGVNYXJrZXIgPSByZWFkVWludDE2KCk7XHJcbiAgbGV0IG1hbGZvcm1lZERhdGFPZmZzZXQgPSAtMTtcclxuXHJcbiAgaWYgKGZpbGVNYXJrZXIgIT0gMHhGRkQ4KSB7IC8vIFNPSSAoU3RhcnQgb2YgSW1hZ2UpXHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1NPSSBub3QgZm91bmQnKTtcclxuICB9XHJcblxyXG4gIGZpbGVNYXJrZXIgPSByZWFkVWludDE2KCk7XHJcbiAgd2hpbGUgKGZpbGVNYXJrZXIgIT0gMHhGRkQ5KSB7IC8vIEVPSSAoRW5kIG9mIGltYWdlKVxyXG4gICAgc3dpdGNoIChmaWxlTWFya2VyKSB7XHJcbiAgICAgIGNhc2UgMHhGRjAwOiBicmVhaztcclxuICAgICAgY2FzZSAweEZGRTA6IC8vIEFQUDAgKEFwcGxpY2F0aW9uIFNwZWNpZmljKVxyXG4gICAgICBjYXNlIDB4RkZFMTogLy8gQVBQMVxyXG4gICAgICBjYXNlIDB4RkZFMjogLy8gQVBQMlxyXG4gICAgICBjYXNlIDB4RkZFMzogLy8gQVBQM1xyXG4gICAgICBjYXNlIDB4RkZFNDogLy8gQVBQNFxyXG4gICAgICBjYXNlIDB4RkZFNTogLy8gQVBQNVxyXG4gICAgICBjYXNlIDB4RkZFNjogLy8gQVBQNlxyXG4gICAgICBjYXNlIDB4RkZFNzogLy8gQVBQN1xyXG4gICAgICBjYXNlIDB4RkZFODogLy8gQVBQOFxyXG4gICAgICBjYXNlIDB4RkZFOTogLy8gQVBQOVxyXG4gICAgICBjYXNlIDB4RkZFQTogLy8gQVBQMTBcclxuICAgICAgY2FzZSAweEZGRUI6IC8vIEFQUDExXHJcbiAgICAgIGNhc2UgMHhGRkVDOiAvLyBBUFAxMlxyXG4gICAgICBjYXNlIDB4RkZFRDogLy8gQVBQMTNcclxuICAgICAgY2FzZSAweEZGRUU6IC8vIEFQUDE0XHJcbiAgICAgIGNhc2UgMHhGRkVGOiAvLyBBUFAxNVxyXG4gICAgICBjYXNlIDB4RkZGRTogeyAvLyBDT00gKENvbW1lbnQpXHJcbiAgICAgICAgY29uc3QgYXBwRGF0YSA9IHJlYWREYXRhQmxvY2soKTtcclxuXHJcbiAgICAgICAgaWYgKGZpbGVNYXJrZXIgPT09IDB4RkZGRSkge1xyXG4gICAgICAgICAgbGV0IGNvbW1lbnQgPSAnJztcclxuICAgICAgICAgIGZvciAobGV0IGlpID0gMDsgaWkgPCBhcHBEYXRhLmJ5dGVMZW5ndGg7IGlpKyspIHtcclxuICAgICAgICAgICAgY29tbWVudCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGFwcERhdGFbaWldKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHNlbGYuY29tbWVudHMucHVzaChjb21tZW50KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChmaWxlTWFya2VyID09PSAweEZGRTApIHtcclxuICAgICAgICAgIGlmIChhcHBEYXRhWzBdID09PSAweDRBICYmIGFwcERhdGFbMV0gPT09IDB4NDYgJiYgYXBwRGF0YVsyXSA9PT0gMHg0OSAmJlxyXG4gICAgICAgICAgICBhcHBEYXRhWzNdID09PSAweDQ2ICYmIGFwcERhdGFbNF0gPT09IDApIHsgLy8gJ0pGSUZcXHgwMCdcclxuICAgICAgICAgICAgamZpZiA9IHtcclxuICAgICAgICAgICAgICB2ZXJzaW9uOiB7IG1ham9yOiBhcHBEYXRhWzVdLCBtaW5vcjogYXBwRGF0YVs2XSB9LFxyXG4gICAgICAgICAgICAgIGRlbnNpdHlVbml0czogYXBwRGF0YVs3XSxcclxuICAgICAgICAgICAgICB4RGVuc2l0eTogKGFwcERhdGFbOF0gPDwgOCkgfCBhcHBEYXRhWzldLFxyXG4gICAgICAgICAgICAgIHlEZW5zaXR5OiAoYXBwRGF0YVsxMF0gPDwgOCkgfCBhcHBEYXRhWzExXSxcclxuICAgICAgICAgICAgICB0aHVtYldpZHRoOiBhcHBEYXRhWzEyXSxcclxuICAgICAgICAgICAgICB0aHVtYkhlaWdodDogYXBwRGF0YVsxM10sXHJcbiAgICAgICAgICAgICAgdGh1bWJEYXRhOiBhcHBEYXRhLnN1YmFycmF5KDE0LCAxNCArIDMgKiBhcHBEYXRhWzEyXSAqIGFwcERhdGFbMTNdKVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBUT0RPIEFQUDEgLSBFeGlmXHJcbiAgICAgICAgaWYgKGZpbGVNYXJrZXIgPT09IDB4RkZFMSkge1xyXG4gICAgICAgICAgaWYgKGFwcERhdGFbMF0gPT09IDB4NDUgJiZcclxuICAgICAgICAgICAgYXBwRGF0YVsxXSA9PT0gMHg3OCAmJlxyXG4gICAgICAgICAgICBhcHBEYXRhWzJdID09PSAweDY5ICYmXHJcbiAgICAgICAgICAgIGFwcERhdGFbM10gPT09IDB4NjYgJiZcclxuICAgICAgICAgICAgYXBwRGF0YVs0XSA9PT0gMCkgeyAvLyAnRVhJRlxceDAwJ1xyXG4gICAgICAgICAgICBzZWxmLmV4aWZCdWZmZXIgPSBhcHBEYXRhLnN1YmFycmF5KDUsIGFwcERhdGEubGVuZ3RoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChmaWxlTWFya2VyID09PSAweEZGRUUpIHtcclxuICAgICAgICAgIGlmIChhcHBEYXRhWzBdID09PSAweDQxICYmIGFwcERhdGFbMV0gPT09IDB4NjQgJiYgYXBwRGF0YVsyXSA9PT0gMHg2RiAmJlxyXG4gICAgICAgICAgICBhcHBEYXRhWzNdID09PSAweDYyICYmIGFwcERhdGFbNF0gPT09IDB4NjUgJiYgYXBwRGF0YVs1XSA9PT0gMCkgeyAvLyAnQWRvYmVcXHgwMCdcclxuICAgICAgICAgICAgYWRvYmUgPSB7XHJcbiAgICAgICAgICAgICAgdmVyc2lvbjogYXBwRGF0YVs2XSxcclxuICAgICAgICAgICAgICBmbGFnczA6IChhcHBEYXRhWzddIDw8IDgpIHwgYXBwRGF0YVs4XSxcclxuICAgICAgICAgICAgICBmbGFnczE6IChhcHBEYXRhWzldIDw8IDgpIHwgYXBwRGF0YVsxMF0sXHJcbiAgICAgICAgICAgICAgdHJhbnNmb3JtQ29kZTogYXBwRGF0YVsxMV1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAweEZGREI6IHsgLy8gRFFUIChEZWZpbmUgUXVhbnRpemF0aW9uIFRhYmxlcylcclxuICAgICAgICBjb25zdCBxdWFudGl6YXRpb25UYWJsZXNMZW5ndGggPSByZWFkVWludDE2KCk7XHJcbiAgICAgICAgY29uc3QgcXVhbnRpemF0aW9uVGFibGVzRW5kID0gcXVhbnRpemF0aW9uVGFibGVzTGVuZ3RoICsgb2Zmc2V0IC0gMjtcclxuICAgICAgICB3aGlsZSAob2Zmc2V0IDwgcXVhbnRpemF0aW9uVGFibGVzRW5kKSB7XHJcbiAgICAgICAgICBjb25zdCBxdWFudGl6YXRpb25UYWJsZVNwZWMgPSBkYXRhW29mZnNldCsrXTtcclxuICAgICAgICAgIHJlcXVlc3RNZW1vcnlBbGxvY2F0aW9uKDY0ICogNCk7XHJcbiAgICAgICAgICBjb25zdCB0YWJsZURhdGEgPSBuZXcgSW50MzJBcnJheSg2NCk7XHJcbiAgICAgICAgICBpZiAoKHF1YW50aXphdGlvblRhYmxlU3BlYyA+PiA0KSA9PT0gMCkgeyAvLyA4IGJpdCB2YWx1ZXNcclxuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCA2NDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgeiA9IGRjdFppZ1phZ1tqXTtcclxuICAgICAgICAgICAgICB0YWJsZURhdGFbel0gPSBkYXRhW29mZnNldCsrXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIGlmICgocXVhbnRpemF0aW9uVGFibGVTcGVjID4+IDQpID09PSAxKSB7IC8vMTYgYml0XHJcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgNjQ7IGorKykge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHogPSBkY3RaaWdaYWdbal07XHJcbiAgICAgICAgICAgICAgdGFibGVEYXRhW3pdID0gcmVhZFVpbnQxNigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2VcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdEUVQ6IGludmFsaWQgdGFibGUgc3BlYycpO1xyXG4gICAgICAgICAgcXVhbnRpemF0aW9uVGFibGVzW3F1YW50aXphdGlvblRhYmxlU3BlYyAmIDE1XSA9IHRhYmxlRGF0YTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAweEZGQzA6IC8vIFNPRjAgKFN0YXJ0IG9mIEZyYW1lLCBCYXNlbGluZSBEQ1QpXHJcbiAgICAgIGNhc2UgMHhGRkMxOiAvLyBTT0YxIChTdGFydCBvZiBGcmFtZSwgRXh0ZW5kZWQgRENUKVxyXG4gICAgICBjYXNlIDB4RkZDMjogeyAvLyBTT0YyIChTdGFydCBvZiBGcmFtZSwgUHJvZ3Jlc3NpdmUgRENUKVxyXG4gICAgICAgIHJlYWRVaW50MTYoKTsgLy8gc2tpcCBkYXRhIGxlbmd0aFxyXG4gICAgICAgIGZyYW1lID0ge1xyXG4gICAgICAgICAgZXh0ZW5kZWQ6IChmaWxlTWFya2VyID09PSAweEZGQzEpLFxyXG4gICAgICAgICAgcHJvZ3Jlc3NpdmU6IChmaWxlTWFya2VyID09PSAweEZGQzIpLFxyXG4gICAgICAgICAgcHJlY2lzaW9uOiBkYXRhW29mZnNldCsrXSxcclxuICAgICAgICAgIHNjYW5MaW5lczogcmVhZFVpbnQxNigpLFxyXG4gICAgICAgICAgc2FtcGxlc1BlckxpbmU6IHJlYWRVaW50MTYoKSxcclxuICAgICAgICAgIGNvbXBvbmVudHM6IHt9LFxyXG4gICAgICAgICAgY29tcG9uZW50c09yZGVyOiBbXSxcclxuICAgICAgICAgIG1heEg6IDAsXHJcbiAgICAgICAgICBtYXhWOiAwLFxyXG4gICAgICAgICAgbWN1c1BlckxpbmU6IDAsXHJcbiAgICAgICAgICBtY3VzUGVyQ29sdW1uOiAwLFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGNvbnN0IHBpeGVsc0luRnJhbWUgPSBmcmFtZSEuc2NhbkxpbmVzICogZnJhbWUhLnNhbXBsZXNQZXJMaW5lO1xyXG4gICAgICAgIGlmIChwaXhlbHNJbkZyYW1lID4gbWF4UmVzb2x1dGlvbkluUGl4ZWxzKSB7XHJcbiAgICAgICAgICBjb25zdCBleGNlZWRlZEFtb3VudCA9IE1hdGguY2VpbCgocGl4ZWxzSW5GcmFtZSAtIG1heFJlc29sdXRpb25JblBpeGVscykgLyAxZTYpO1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBtYXhSZXNvbHV0aW9uSW5NUCBsaW1pdCBleGNlZWRlZCBieSAke2V4Y2VlZGVkQW1vdW50fU1QYCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBjb21wb25lbnRzQ291bnQgPSBkYXRhW29mZnNldCsrXTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb21wb25lbnRzQ291bnQ7IGkrKykge1xyXG4gICAgICAgICAgY29uc3QgY29tcG9uZW50SWQgPSBkYXRhW29mZnNldF07XHJcbiAgICAgICAgICBjb25zdCBoID0gZGF0YVtvZmZzZXQgKyAxXSA+PiA0O1xyXG4gICAgICAgICAgY29uc3QgdiA9IGRhdGFbb2Zmc2V0ICsgMV0gJiAxNTtcclxuICAgICAgICAgIGNvbnN0IHFJZCA9IGRhdGFbb2Zmc2V0ICsgMl07XHJcbiAgICAgICAgICBmcmFtZSEuY29tcG9uZW50c09yZGVyLnB1c2goY29tcG9uZW50SWQpO1xyXG4gICAgICAgICAgZnJhbWUhLmNvbXBvbmVudHNbY29tcG9uZW50SWRdID0ge1xyXG4gICAgICAgICAgICBoOiBoLFxyXG4gICAgICAgICAgICB2OiB2LFxyXG4gICAgICAgICAgICBxdWFudGl6YXRpb25JZHg6IHFJZCxcclxuICAgICAgICAgICAgYmxvY2tzUGVyQ29sdW1uOiAwLFxyXG4gICAgICAgICAgICBibG9ja3NQZXJMaW5lOiAwLFxyXG4gICAgICAgICAgICBibG9ja3M6IFtdLFxyXG4gICAgICAgICAgICBwcmVkOiAwLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIG9mZnNldCArPSAzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBwcmVwYXJlQ29tcG9uZW50cyhmcmFtZSEpO1xyXG4gICAgICAgIGZyYW1lcy5wdXNoKGZyYW1lKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlIDB4RkZDNDogey8vIERIVCAoRGVmaW5lIEh1ZmZtYW4gVGFibGVzKVxyXG4gICAgICAgIGNvbnN0IGh1ZmZtYW5MZW5ndGggPSByZWFkVWludDE2KCk7XHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAyOyBpIDwgaHVmZm1hbkxlbmd0aDspIHtcclxuICAgICAgICAgIGNvbnN0IGh1ZmZtYW5UYWJsZVNwZWMgPSBkYXRhW29mZnNldCsrXTtcclxuICAgICAgICAgIGNvbnN0IGNvZGVMZW5ndGhzID0gbmV3IFVpbnQ4QXJyYXkoMTYpO1xyXG4gICAgICAgICAgbGV0IGNvZGVMZW5ndGhTdW0gPSAwO1xyXG5cclxuICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgMTY7IGorKywgb2Zmc2V0KyspIHtcclxuICAgICAgICAgICAgY29kZUxlbmd0aFN1bSArPSAoY29kZUxlbmd0aHNbal0gPSBkYXRhW29mZnNldF0pO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHJlcXVlc3RNZW1vcnlBbGxvY2F0aW9uKDE2ICsgY29kZUxlbmd0aFN1bSk7XHJcbiAgICAgICAgICBjb25zdCBodWZmbWFuVmFsdWVzID0gbmV3IFVpbnQ4QXJyYXkoY29kZUxlbmd0aFN1bSk7XHJcblxyXG4gICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjb2RlTGVuZ3RoU3VtOyBqKyssIG9mZnNldCsrKSB7XHJcbiAgICAgICAgICAgIGh1ZmZtYW5WYWx1ZXNbal0gPSBkYXRhW29mZnNldF07XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaSArPSAxNyArIGNvZGVMZW5ndGhTdW07XHJcblxyXG4gICAgICAgICAgY29uc3QgaW5kZXggPSBodWZmbWFuVGFibGVTcGVjICYgMTU7XHJcbiAgICAgICAgICBjb25zdCB0YWJsZSA9IChodWZmbWFuVGFibGVTcGVjID4+IDQpID09PSAwID8gaHVmZm1hblRhYmxlc0RDIDogaHVmZm1hblRhYmxlc0FDO1xyXG4gICAgICAgICAgdGFibGVbaW5kZXhdID0gYnVpbGRIdWZmbWFuVGFibGUoY29kZUxlbmd0aHMsIGh1ZmZtYW5WYWx1ZXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlIDB4RkZERDogLy8gRFJJIChEZWZpbmUgUmVzdGFydCBJbnRlcnZhbClcclxuICAgICAgICByZWFkVWludDE2KCk7IC8vIHNraXAgZGF0YSBsZW5ndGhcclxuICAgICAgICByZXNldEludGVydmFsID0gcmVhZFVpbnQxNigpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDB4RkZEQzogLy8gTnVtYmVyIG9mIExpbmVzIG1hcmtlclxyXG4gICAgICAgIHJlYWRVaW50MTYoKSAvLyBza2lwIGRhdGEgbGVuZ3RoXHJcbiAgICAgICAgcmVhZFVpbnQxNigpIC8vIElnbm9yZSB0aGlzIGRhdGEgc2luY2UgaXQgcmVwcmVzZW50cyB0aGUgaW1hZ2UgaGVpZ2h0XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMHhGRkRBOiB7IC8vIFNPUyAoU3RhcnQgb2YgU2NhbilcclxuICAgICAgICByZWFkVWludDE2KCk7IC8vIHNraXAgZGF0YSBsZW5ndGhcclxuICAgICAgICBjb25zdCBzZWxlY3RvcnNDb3VudCA9IGRhdGFbb2Zmc2V0KytdO1xyXG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHM6IENvbXBvbmVudFtdID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWxlY3RvcnNDb3VudDsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCBjb21wb25lbnQgPSBmcmFtZSEuY29tcG9uZW50c1tkYXRhW29mZnNldCsrXV07XHJcbiAgICAgICAgICBjb25zdCB0YWJsZVNwZWMgPSBkYXRhW29mZnNldCsrXTtcclxuICAgICAgICAgIGNvbXBvbmVudC5odWZmbWFuVGFibGVEQyA9IGh1ZmZtYW5UYWJsZXNEQ1t0YWJsZVNwZWMgPj4gNF07XHJcbiAgICAgICAgICBjb21wb25lbnQuaHVmZm1hblRhYmxlQUMgPSBodWZmbWFuVGFibGVzQUNbdGFibGVTcGVjICYgMTVdO1xyXG4gICAgICAgICAgY29tcG9uZW50cy5wdXNoKGNvbXBvbmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHNwZWN0cmFsU3RhcnQgPSBkYXRhW29mZnNldCsrXTtcclxuICAgICAgICBjb25zdCBzcGVjdHJhbEVuZCA9IGRhdGFbb2Zmc2V0KytdO1xyXG4gICAgICAgIGNvbnN0IHN1Y2Nlc3NpdmVBcHByb3hpbWF0aW9uID0gZGF0YVtvZmZzZXQrK107XHJcbiAgICAgICAgY29uc3QgcHJvY2Vzc2VkID0gZGVjb2RlU2NhbihcclxuICAgICAgICAgIGRhdGEsIG9mZnNldCwgZnJhbWUhLCBjb21wb25lbnRzLCByZXNldEludGVydmFsLCBzcGVjdHJhbFN0YXJ0LCBzcGVjdHJhbEVuZCxcclxuICAgICAgICAgIHN1Y2Nlc3NpdmVBcHByb3hpbWF0aW9uID4+IDQsIHN1Y2Nlc3NpdmVBcHByb3hpbWF0aW9uICYgMTUpO1xyXG4gICAgICAgIG9mZnNldCArPSBwcm9jZXNzZWQ7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAweEZGRkY6IC8vIEZpbGwgYnl0ZXNcclxuICAgICAgICBpZiAoZGF0YVtvZmZzZXRdICE9PSAweEZGKSB7IC8vIEF2b2lkIHNraXBwaW5nIGEgdmFsaWQgbWFya2VyLlxyXG4gICAgICAgICAgb2Zmc2V0LS07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OiB7XHJcbiAgICAgICAgaWYgKGRhdGFbb2Zmc2V0IC0gM10gPT0gMHhGRiAmJiBkYXRhW29mZnNldCAtIDJdID49IDB4QzAgJiYgZGF0YVtvZmZzZXQgLSAyXSA8PSAweEZFKSB7XHJcbiAgICAgICAgICAvLyBjb3VsZCBiZSBpbmNvcnJlY3QgZW5jb2RpbmcgLS0gbGFzdCAweEZGIGJ5dGUgb2YgdGhlIHByZXZpb3VzXHJcbiAgICAgICAgICAvLyBibG9jayB3YXMgZWF0ZW4gYnkgdGhlIGVuY29kZXJcclxuICAgICAgICAgIG9mZnNldCAtPSAzO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfSBlbHNlIGlmIChmaWxlTWFya2VyID09PSAweEUwIHx8IGZpbGVNYXJrZXIgPT0gMHhFMSkge1xyXG4gICAgICAgICAgLy8gUmVjb3ZlciBmcm9tIG1hbGZvcm1lZCBBUFAxIG1hcmtlcnMgcG9wdWxhciBpbiBzb21lIHBob25lIG1vZGVscy5cclxuICAgICAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZXVnZW5ld2FyZS9qcGVnLWpzL2lzc3Vlcy84MlxyXG4gICAgICAgICAgaWYgKG1hbGZvcm1lZERhdGFPZmZzZXQgIT09IC0xKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgZmlyc3QgdW5rbm93biBKUEVHIG1hcmtlciBhdCBvZmZzZXQgJHttYWxmb3JtZWREYXRhT2Zmc2V0LnRvU3RyaW5nKDE2KX0sIHNlY29uZCB1bmtub3duIEpQRUcgbWFya2VyICR7ZmlsZU1hcmtlci50b1N0cmluZygxNil9IGF0IG9mZnNldCAkeyhvZmZzZXQgLSAxKS50b1N0cmluZygxNil9YCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBtYWxmb3JtZWREYXRhT2Zmc2V0ID0gb2Zmc2V0IC0gMTtcclxuICAgICAgICAgIGNvbnN0IG5leHRPZmZzZXQgPSByZWFkVWludDE2KCk7XHJcbiAgICAgICAgICBpZiAoZGF0YVtvZmZzZXQgKyBuZXh0T2Zmc2V0IC0gMl0gPT09IDB4RkYpIHtcclxuICAgICAgICAgICAgb2Zmc2V0ICs9IG5leHRPZmZzZXQgLSAyO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcigndW5rbm93biBKUEVHIG1hcmtlciAnICsgZmlsZU1hcmtlci50b1N0cmluZygxNikpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZmlsZU1hcmtlciA9IHJlYWRVaW50MTYoKTtcclxuICB9XHJcblxyXG4gIGlmIChmcmFtZXMubGVuZ3RoICE9IDEpIHRocm93IG5ldyBFcnJvcignb25seSBzaW5nbGUgZnJhbWUgSlBFR3Mgc3VwcG9ydGVkJyk7XHJcblxyXG4gIC8vIHNldCBlYWNoIGZyYW1lJ3MgY29tcG9uZW50cyBxdWFudGl6YXRpb24gdGFibGVcclxuICBmb3IgKGxldCBpID0gMDsgaSA8IGZyYW1lcy5sZW5ndGg7IGkrKykge1xyXG4gICAgY29uc3QgY3AgPSBmcmFtZXNbaV0uY29tcG9uZW50cztcclxuICAgIGZvciAobGV0IGogaW4gY3ApIHsgLy8gVE9ETzogZG9uJ3QgdXNlIGBpbmBcclxuICAgICAgY3Bbal0ucXVhbnRpemF0aW9uVGFibGUgPSBxdWFudGl6YXRpb25UYWJsZXNbY3Bbal0ucXVhbnRpemF0aW9uSWR4IV07XHJcbiAgICAgIGRlbGV0ZSBjcFtqXS5xdWFudGl6YXRpb25JZHg7IC8vIFRPRE86IHdoeSA/Pz9cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNlbGYud2lkdGggPSBmcmFtZSEuc2FtcGxlc1BlckxpbmU7XHJcbiAgc2VsZi5oZWlnaHQgPSBmcmFtZSEuc2NhbkxpbmVzO1xyXG4gIHNlbGYuamZpZiA9IGpmaWY7XHJcbiAgc2VsZi5hZG9iZSA9IGFkb2JlO1xyXG4gIHNlbGYuY29tcG9uZW50cyA9IFtdO1xyXG5cclxuICBmb3IgKGxldCBpID0gMDsgaSA8IGZyYW1lIS5jb21wb25lbnRzT3JkZXIubGVuZ3RoOyBpKyspIHtcclxuICAgIGNvbnN0IGNvbXBvbmVudCA9IGZyYW1lIS5jb21wb25lbnRzW2ZyYW1lIS5jb21wb25lbnRzT3JkZXJbaV1dO1xyXG4gICAgc2VsZi5jb21wb25lbnRzLnB1c2goe1xyXG4gICAgICBsaW5lczogYnVpbGRDb21wb25lbnREYXRhKGNvbXBvbmVudCksXHJcbiAgICAgIHNjYWxlWDogY29tcG9uZW50LmggLyBmcmFtZSEubWF4SCxcclxuICAgICAgc2NhbGVZOiBjb21wb25lbnQudiAvIGZyYW1lIS5tYXhWXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHJldHVybiBzZWxmO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXREYXRhKGRlY29kZWQ6IERlY29kZWQpIHtcclxuICBsZXQgb2Zmc2V0ID0gMDtcclxuICBsZXQgY29sb3JUcmFuc2Zvcm0gPSBmYWxzZTtcclxuXHJcbiAgY29uc3Qgd2lkdGggPSBkZWNvZGVkLndpZHRoO1xyXG4gIGNvbnN0IGhlaWdodCA9IGRlY29kZWQuaGVpZ2h0O1xyXG4gIGNvbnN0IGRhdGFMZW5ndGggPSB3aWR0aCAqIGhlaWdodCAqIGRlY29kZWQuY29tcG9uZW50cy5sZW5ndGg7XHJcbiAgcmVxdWVzdE1lbW9yeUFsbG9jYXRpb24oZGF0YUxlbmd0aCk7XHJcbiAgY29uc3QgZGF0YSA9IG5ldyBVaW50OEFycmF5KGRhdGFMZW5ndGgpO1xyXG5cclxuICBzd2l0Y2ggKGRlY29kZWQuY29tcG9uZW50cy5sZW5ndGgpIHtcclxuICAgIGNhc2UgMToge1xyXG4gICAgICBjb25zdCBjb21wb25lbnQxID0gZGVjb2RlZC5jb21wb25lbnRzWzBdO1xyXG5cclxuICAgICAgZm9yIChsZXQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykge1xyXG4gICAgICAgIGNvbnN0IGNvbXBvbmVudDFMaW5lID0gY29tcG9uZW50MS5saW5lc1swIHwgKHkgKiBjb21wb25lbnQxLnNjYWxlWSldO1xyXG5cclxuICAgICAgICBmb3IgKGxldCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHtcclxuICAgICAgICAgIGNvbnN0IFkgPSBjb21wb25lbnQxTGluZVswIHwgKHggKiBjb21wb25lbnQxLnNjYWxlWCldO1xyXG4gICAgICAgICAgZGF0YVtvZmZzZXQrK10gPSBZO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBicmVhaztcclxuICAgIH1cclxuICAgIGNhc2UgMjoge1xyXG4gICAgICAvLyBQREYgbWlnaHQgY29tcHJlc3MgdHdvIGNvbXBvbmVudCBkYXRhIGluIGN1c3RvbSBjb2xvcnNwYWNlXHJcbiAgICAgIGNvbnN0IGNvbXBvbmVudDEgPSBkZWNvZGVkLmNvbXBvbmVudHNbMF07XHJcbiAgICAgIGNvbnN0IGNvbXBvbmVudDIgPSBkZWNvZGVkLmNvbXBvbmVudHNbMV07XHJcblxyXG4gICAgICBmb3IgKGxldCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKSB7XHJcbiAgICAgICAgY29uc3QgY29tcG9uZW50MUxpbmUgPSBjb21wb25lbnQxLmxpbmVzWzAgfCAoeSAqIGNvbXBvbmVudDEuc2NhbGVZKV07XHJcbiAgICAgICAgY29uc3QgY29tcG9uZW50MkxpbmUgPSBjb21wb25lbnQyLmxpbmVzWzAgfCAoeSAqIGNvbXBvbmVudDIuc2NhbGVZKV07XHJcblxyXG4gICAgICAgIGZvciAobGV0IHggPSAwOyB4IDwgd2lkdGg7IHgrKykge1xyXG4gICAgICAgICAgY29uc3QgWTEgPSBjb21wb25lbnQxTGluZVswIHwgKHggKiBjb21wb25lbnQxLnNjYWxlWCldO1xyXG4gICAgICAgICAgZGF0YVtvZmZzZXQrK10gPSBZMTtcclxuICAgICAgICAgIGNvbnN0IFkyID0gY29tcG9uZW50MkxpbmVbMCB8ICh4ICogY29tcG9uZW50Mi5zY2FsZVgpXTtcclxuICAgICAgICAgIGRhdGFbb2Zmc2V0KytdID0gWTI7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgY2FzZSAzOiB7XHJcbiAgICAgIC8vIFRoZSBkZWZhdWx0IHRyYW5zZm9ybSBmb3IgdGhyZWUgY29tcG9uZW50cyBpcyB0cnVlXHJcbiAgICAgIGNvbG9yVHJhbnNmb3JtID0gdHJ1ZTtcclxuICAgICAgLy8gVGhlIGFkb2JlIHRyYW5zZm9ybSBtYXJrZXIgb3ZlcnJpZGVzIGFueSBwcmV2aW91cyBzZXR0aW5nXHJcbiAgICAgIGlmIChkZWNvZGVkLmFkb2JlICYmIGRlY29kZWQuYWRvYmUudHJhbnNmb3JtQ29kZSkgY29sb3JUcmFuc2Zvcm0gPSB0cnVlO1xyXG5cclxuICAgICAgY29uc3QgY29tcG9uZW50MSA9IGRlY29kZWQuY29tcG9uZW50c1swXTtcclxuICAgICAgY29uc3QgY29tcG9uZW50MiA9IGRlY29kZWQuY29tcG9uZW50c1sxXTtcclxuICAgICAgY29uc3QgY29tcG9uZW50MyA9IGRlY29kZWQuY29tcG9uZW50c1syXTtcclxuXHJcbiAgICAgIGZvciAobGV0IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspIHtcclxuICAgICAgICBjb25zdCBjb21wb25lbnQxTGluZSA9IGNvbXBvbmVudDEubGluZXNbMCB8ICh5ICogY29tcG9uZW50MS5zY2FsZVkpXTtcclxuICAgICAgICBjb25zdCBjb21wb25lbnQyTGluZSA9IGNvbXBvbmVudDIubGluZXNbMCB8ICh5ICogY29tcG9uZW50Mi5zY2FsZVkpXTtcclxuICAgICAgICBjb25zdCBjb21wb25lbnQzTGluZSA9IGNvbXBvbmVudDMubGluZXNbMCB8ICh5ICogY29tcG9uZW50My5zY2FsZVkpXTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7XHJcbiAgICAgICAgICBsZXQgWSwgQ2IsIENyLCBSLCBHLCBCO1xyXG5cclxuICAgICAgICAgIGlmICghY29sb3JUcmFuc2Zvcm0pIHtcclxuICAgICAgICAgICAgUiA9IGNvbXBvbmVudDFMaW5lWzAgfCAoeCAqIGNvbXBvbmVudDEuc2NhbGVYKV07XHJcbiAgICAgICAgICAgIEcgPSBjb21wb25lbnQyTGluZVswIHwgKHggKiBjb21wb25lbnQyLnNjYWxlWCldO1xyXG4gICAgICAgICAgICBCID0gY29tcG9uZW50M0xpbmVbMCB8ICh4ICogY29tcG9uZW50My5zY2FsZVgpXTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIFkgPSBjb21wb25lbnQxTGluZVswIHwgKHggKiBjb21wb25lbnQxLnNjYWxlWCldO1xyXG4gICAgICAgICAgICBDYiA9IGNvbXBvbmVudDJMaW5lWzAgfCAoeCAqIGNvbXBvbmVudDIuc2NhbGVYKV07XHJcbiAgICAgICAgICAgIENyID0gY29tcG9uZW50M0xpbmVbMCB8ICh4ICogY29tcG9uZW50My5zY2FsZVgpXTtcclxuXHJcbiAgICAgICAgICAgIFIgPSBjbGFtcFRvOGJpdChZICsgMS40MDIgKiAoQ3IgLSAxMjgpKTtcclxuICAgICAgICAgICAgRyA9IGNsYW1wVG84Yml0KFkgLSAwLjM0NDEzNjMgKiAoQ2IgLSAxMjgpIC0gMC43MTQxMzYzNiAqIChDciAtIDEyOCkpO1xyXG4gICAgICAgICAgICBCID0gY2xhbXBUbzhiaXQoWSArIDEuNzcyICogKENiIC0gMTI4KSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgZGF0YVtvZmZzZXQrK10gPSBSO1xyXG4gICAgICAgICAgZGF0YVtvZmZzZXQrK10gPSBHO1xyXG4gICAgICAgICAgZGF0YVtvZmZzZXQrK10gPSBCO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBicmVhaztcclxuICAgIH1cclxuICAgIGNhc2UgNDoge1xyXG4gICAgICBpZiAoIWRlY29kZWQuYWRvYmUpIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgY29sb3IgbW9kZSAoNCBjb21wb25lbnRzKScpO1xyXG4gICAgICAvLyBUaGUgZGVmYXVsdCB0cmFuc2Zvcm0gZm9yIGZvdXIgY29tcG9uZW50cyBpcyBmYWxzZVxyXG4gICAgICBjb2xvclRyYW5zZm9ybSA9IGZhbHNlO1xyXG4gICAgICAvLyBUaGUgYWRvYmUgdHJhbnNmb3JtIG1hcmtlciBvdmVycmlkZXMgYW55IHByZXZpb3VzIHNldHRpbmdcclxuICAgICAgaWYgKGRlY29kZWQuYWRvYmUgJiYgZGVjb2RlZC5hZG9iZS50cmFuc2Zvcm1Db2RlKSBjb2xvclRyYW5zZm9ybSA9IHRydWU7XHJcblxyXG4gICAgICBjb25zdCBjb21wb25lbnQxID0gZGVjb2RlZC5jb21wb25lbnRzWzBdO1xyXG4gICAgICBjb25zdCBjb21wb25lbnQyID0gZGVjb2RlZC5jb21wb25lbnRzWzFdO1xyXG4gICAgICBjb25zdCBjb21wb25lbnQzID0gZGVjb2RlZC5jb21wb25lbnRzWzJdO1xyXG4gICAgICBjb25zdCBjb21wb25lbnQ0ID0gZGVjb2RlZC5jb21wb25lbnRzWzNdO1xyXG5cclxuICAgICAgZm9yIChsZXQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykge1xyXG4gICAgICAgIGNvbnN0IGNvbXBvbmVudDFMaW5lID0gY29tcG9uZW50MS5saW5lc1swIHwgKHkgKiBjb21wb25lbnQxLnNjYWxlWSldO1xyXG4gICAgICAgIGNvbnN0IGNvbXBvbmVudDJMaW5lID0gY29tcG9uZW50Mi5saW5lc1swIHwgKHkgKiBjb21wb25lbnQyLnNjYWxlWSldO1xyXG4gICAgICAgIGNvbnN0IGNvbXBvbmVudDNMaW5lID0gY29tcG9uZW50My5saW5lc1swIHwgKHkgKiBjb21wb25lbnQzLnNjYWxlWSldO1xyXG4gICAgICAgIGNvbnN0IGNvbXBvbmVudDRMaW5lID0gY29tcG9uZW50NC5saW5lc1swIHwgKHkgKiBjb21wb25lbnQ0LnNjYWxlWSldO1xyXG5cclxuICAgICAgICBmb3IgKGxldCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHtcclxuICAgICAgICAgIGxldCBZLCBDYiwgQ3IsIEssIEMsIE0sIFllO1xyXG5cclxuICAgICAgICAgIGlmICghY29sb3JUcmFuc2Zvcm0pIHtcclxuICAgICAgICAgICAgQyA9IGNvbXBvbmVudDFMaW5lWzAgfCAoeCAqIGNvbXBvbmVudDEuc2NhbGVYKV07XHJcbiAgICAgICAgICAgIE0gPSBjb21wb25lbnQyTGluZVswIHwgKHggKiBjb21wb25lbnQyLnNjYWxlWCldO1xyXG4gICAgICAgICAgICBZZSA9IGNvbXBvbmVudDNMaW5lWzAgfCAoeCAqIGNvbXBvbmVudDMuc2NhbGVYKV07XHJcbiAgICAgICAgICAgIEsgPSBjb21wb25lbnQ0TGluZVswIHwgKHggKiBjb21wb25lbnQ0LnNjYWxlWCldO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgWSA9IGNvbXBvbmVudDFMaW5lWzAgfCAoeCAqIGNvbXBvbmVudDEuc2NhbGVYKV07XHJcbiAgICAgICAgICAgIENiID0gY29tcG9uZW50MkxpbmVbMCB8ICh4ICogY29tcG9uZW50Mi5zY2FsZVgpXTtcclxuICAgICAgICAgICAgQ3IgPSBjb21wb25lbnQzTGluZVswIHwgKHggKiBjb21wb25lbnQzLnNjYWxlWCldO1xyXG4gICAgICAgICAgICBLID0gY29tcG9uZW50NExpbmVbMCB8ICh4ICogY29tcG9uZW50NC5zY2FsZVgpXTtcclxuXHJcbiAgICAgICAgICAgIEMgPSAyNTUgLSBjbGFtcFRvOGJpdChZICsgMS40MDIgKiAoQ3IgLSAxMjgpKTtcclxuICAgICAgICAgICAgTSA9IDI1NSAtIGNsYW1wVG84Yml0KFkgLSAwLjM0NDEzNjMgKiAoQ2IgLSAxMjgpIC0gMC43MTQxMzYzNiAqIChDciAtIDEyOCkpO1xyXG4gICAgICAgICAgICBZZSA9IDI1NSAtIGNsYW1wVG84Yml0KFkgKyAxLjc3MiAqIChDYiAtIDEyOCkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZGF0YVtvZmZzZXQrK10gPSAyNTUgLSBDO1xyXG4gICAgICAgICAgZGF0YVtvZmZzZXQrK10gPSAyNTUgLSBNO1xyXG4gICAgICAgICAgZGF0YVtvZmZzZXQrK10gPSAyNTUgLSBZZTtcclxuICAgICAgICAgIGRhdGFbb2Zmc2V0KytdID0gMjU1IC0gSztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICBkZWZhdWx0OlxyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIGNvbG9yIG1vZGUnKTtcclxuICB9XHJcblxyXG4gIHJldHVybiBkYXRhO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlSnBlZyhlbmNvZGVkOiBVaW50OEFycmF5LCBjcmVhdGVJbWFnZURhdGE6ICh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikgPT4gSW1hZ2VEYXRhKSB7XHJcbiAgdG90YWxCeXRlc0FsbG9jYXRlZCA9IDA7XHJcblxyXG4gIGlmIChlbmNvZGVkLmxlbmd0aCA9PT0gMCkgdGhyb3cgbmV3IEVycm9yKCdFbXB0eSBqcGVnIGJ1ZmZlcicpO1xyXG5cclxuICBjb25zdCBkZWNvZGVkID0gcGFyc2UoZW5jb2RlZCk7XHJcbiAgcmVxdWVzdE1lbW9yeUFsbG9jYXRpb24oZGVjb2RlZC53aWR0aCAqIGRlY29kZWQuaGVpZ2h0ICogNCk7XHJcblxyXG4gIGNvbnN0IGRhdGEgPSBnZXREYXRhKGRlY29kZWQpO1xyXG5cclxuICBjb25zdCBpbWFnZURhdGEgPSBjcmVhdGVJbWFnZURhdGEoZGVjb2RlZC53aWR0aCwgZGVjb2RlZC5oZWlnaHQpO1xyXG4gIGNvbnN0IHdpZHRoID0gaW1hZ2VEYXRhLndpZHRoO1xyXG4gIGNvbnN0IGhlaWdodCA9IGltYWdlRGF0YS5oZWlnaHQ7XHJcbiAgY29uc3QgaW1hZ2VEYXRhQXJyYXkgPSBpbWFnZURhdGEuZGF0YTtcclxuXHJcbiAgbGV0IGkgPSAwO1xyXG4gIGxldCBqID0gMDtcclxuXHJcbiAgc3dpdGNoIChkZWNvZGVkLmNvbXBvbmVudHMubGVuZ3RoKSB7XHJcbiAgICBjYXNlIDE6XHJcbiAgICAgIGZvciAobGV0IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspIHtcclxuICAgICAgICBmb3IgKGxldCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHtcclxuICAgICAgICAgIGNvbnN0IFkgPSBkYXRhW2krK107XHJcblxyXG4gICAgICAgICAgaW1hZ2VEYXRhQXJyYXlbaisrXSA9IFk7XHJcbiAgICAgICAgICBpbWFnZURhdGFBcnJheVtqKytdID0gWTtcclxuICAgICAgICAgIGltYWdlRGF0YUFycmF5W2orK10gPSBZO1xyXG4gICAgICAgICAgaW1hZ2VEYXRhQXJyYXlbaisrXSA9IDI1NTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgYnJlYWs7XHJcbiAgICBjYXNlIDM6XHJcbiAgICAgIGZvciAobGV0IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspIHtcclxuICAgICAgICBmb3IgKGxldCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHtcclxuICAgICAgICAgIGNvbnN0IFIgPSBkYXRhW2krK107XHJcbiAgICAgICAgICBjb25zdCBHID0gZGF0YVtpKytdO1xyXG4gICAgICAgICAgY29uc3QgQiA9IGRhdGFbaSsrXTtcclxuXHJcbiAgICAgICAgICBpbWFnZURhdGFBcnJheVtqKytdID0gUjtcclxuICAgICAgICAgIGltYWdlRGF0YUFycmF5W2orK10gPSBHO1xyXG4gICAgICAgICAgaW1hZ2VEYXRhQXJyYXlbaisrXSA9IEI7XHJcbiAgICAgICAgICBpbWFnZURhdGFBcnJheVtqKytdID0gMjU1O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBicmVhaztcclxuICAgIGNhc2UgNDpcclxuICAgICAgZm9yIChsZXQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykge1xyXG4gICAgICAgIGZvciAobGV0IHggPSAwOyB4IDwgd2lkdGg7IHgrKykge1xyXG4gICAgICAgICAgY29uc3QgQyA9IGRhdGFbaSsrXTtcclxuICAgICAgICAgIGNvbnN0IE0gPSBkYXRhW2krK107XHJcbiAgICAgICAgICBjb25zdCBZID0gZGF0YVtpKytdO1xyXG4gICAgICAgICAgY29uc3QgSyA9IGRhdGFbaSsrXTtcclxuXHJcbiAgICAgICAgICBjb25zdCBSID0gMjU1IC0gY2xhbXBUbzhiaXQoQyAqICgxIC0gSyAvIDI1NSkgKyBLKTtcclxuICAgICAgICAgIGNvbnN0IEcgPSAyNTUgLSBjbGFtcFRvOGJpdChNICogKDEgLSBLIC8gMjU1KSArIEspO1xyXG4gICAgICAgICAgY29uc3QgQiA9IDI1NSAtIGNsYW1wVG84Yml0KFkgKiAoMSAtIEsgLyAyNTUpICsgSyk7XHJcblxyXG4gICAgICAgICAgaW1hZ2VEYXRhQXJyYXlbaisrXSA9IFI7XHJcbiAgICAgICAgICBpbWFnZURhdGFBcnJheVtqKytdID0gRztcclxuICAgICAgICAgIGltYWdlRGF0YUFycmF5W2orK10gPSBCO1xyXG4gICAgICAgICAgaW1hZ2VEYXRhQXJyYXlbaisrXSA9IDI1NTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgYnJlYWs7XHJcbiAgICBkZWZhdWx0OlxyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIGNvbG9yIG1vZGUnKTtcclxuICB9XHJcblxyXG4gIHJldHVybiBpbWFnZURhdGE7XHJcbn1cclxuIl0sInNvdXJjZVJvb3QiOiJDOlxcUHJvamVjdHNcXGdpdGh1YlxcYWctcHNkXFxzcmMifQ==
|
package/dist/psd.d.ts
CHANGED
|
@@ -214,6 +214,7 @@ export interface LayerEffectGradientOverlay {
|
|
|
214
214
|
y: number;
|
|
215
215
|
};
|
|
216
216
|
gradient?: EffectSolidGradient | EffectNoiseGradient;
|
|
217
|
+
interpolationMethod?: InterpolationMethod;
|
|
217
218
|
}
|
|
218
219
|
export interface LayerEffectsInfo {
|
|
219
220
|
disabled?: boolean;
|
|
@@ -259,6 +260,7 @@ export declare type Justification = 'left' | 'right' | 'center';
|
|
|
259
260
|
export declare type LineCapType = 'butt' | 'round' | 'square';
|
|
260
261
|
export declare type LineJoinType = 'miter' | 'round' | 'bevel';
|
|
261
262
|
export declare type LineAlignment = 'inside' | 'center' | 'outside';
|
|
263
|
+
export declare type InterpolationMethod = 'classic' | 'perceptual' | 'linear';
|
|
262
264
|
export interface Warp {
|
|
263
265
|
style?: WarpStyle;
|
|
264
266
|
value?: number;
|
|
@@ -703,6 +705,7 @@ export interface LayerAdditionalInfo {
|
|
|
703
705
|
blendClippendElements?: boolean;
|
|
704
706
|
blendInteriorElements?: boolean;
|
|
705
707
|
knockout?: boolean;
|
|
708
|
+
layerMaskAsGlobalMask?: boolean;
|
|
706
709
|
protected?: {
|
|
707
710
|
transparency?: boolean;
|
|
708
711
|
composite?: boolean;
|
|
@@ -907,7 +910,7 @@ export interface Layer extends LayerAdditionalInfo {
|
|
|
907
910
|
canvas?: HTMLCanvasElement;
|
|
908
911
|
imageData?: ImageData;
|
|
909
912
|
children?: Layer[];
|
|
910
|
-
/**
|
|
913
|
+
/** Applies only for layer groups. */
|
|
911
914
|
opened?: boolean;
|
|
912
915
|
}
|
|
913
916
|
export interface Psd extends LayerAdditionalInfo {
|
|
@@ -961,7 +964,7 @@ export interface ReadOptions {
|
|
|
961
964
|
/** Loads thumbnail raw data instead of decoding it's content into canvas.
|
|
962
965
|
* `thumnailRaw` field is used instead. */
|
|
963
966
|
useRawThumbnail?: boolean;
|
|
964
|
-
/** Usend only for development */
|
|
967
|
+
/** Usend only for development. */
|
|
965
968
|
logDevFeatures?: boolean;
|
|
966
969
|
}
|
|
967
970
|
export interface WriteOptions {
|
|
@@ -975,8 +978,11 @@ export interface WriteOptions {
|
|
|
975
978
|
/** Logs if features are missing. */
|
|
976
979
|
logMissingFeatures?: boolean;
|
|
977
980
|
/** Forces bottom layer to be treated as layer and not background even when it's missing any transparency
|
|
978
|
-
* (by default Photoshop treats bottom layer as background it it doesn't have any transparent pixels) */
|
|
981
|
+
* (by default Photoshop treats bottom layer as background it it doesn't have any transparent pixels). */
|
|
979
982
|
noBackground?: boolean;
|
|
980
|
-
/** Saves document as PSB (Large Document Format) file */
|
|
983
|
+
/** Saves document as PSB (Large Document Format) file. */
|
|
981
984
|
psb?: boolean;
|
|
985
|
+
/** Uses zip compression when writing PSD file, will result in smaller file size but may be incompatible
|
|
986
|
+
* with some software. It may also be significantly slower. */
|
|
987
|
+
compress?: boolean;
|
|
982
988
|
}
|