@demouth/mb_strwidth
Version:
Calculates the width of a string, where halfwidth characters count as 1, and fullwidth characters count as 2.
150 lines (146 loc) • 14.9 kB
JavaScript
/**
* @license
* mb_strwidth.js v2.0.2
* Released under the MIT License.
*/
;
Object.defineProperty(exports, '__esModule', { value: true });
/**
* mb_strwidth
*
* The fullwidth characters are: U+1100-U+115F, U+11A3-U+11A7, U+11FA-U+11FF, U+2329-U+232A, U+2E80-U+2E99, U+2E9B-U+2EF3, U+2F00-U+2FD5, U+2FF0-U+2FFB, U+3000-U+303E, U+3041-U+3096, U+3099-U+30FF, U+3105-U+312D, U+3131-U+318E, U+3190-U+31BA, U+31C0-U+31E3, U+31F0-U+321E, U+3220-U+3247, U+3250-U+32FE, U+3300-U+4DBF, U+4E00-U+A48C, U+A490-U+A4C6, U+A960-U+A97C, U+AC00-U+D7A3, U+D7B0-U+D7C6, U+D7CB-U+D7FB, U+F900-U+FAFF, U+FE10-U+FE19, U+FE30-U+FE52, U+FE54-U+FE66, U+FE68-U+FE6B, U+FF01-U+FF60, U+FFE0-U+FFE6, U+1B000-U+1B001, U+1F200-U+1F202, U+1F210-U+1F23A, U+1F240-U+1F248, U+1F250-U+1F251, U+20000-U+2FFFD, U+30000-U+3FFFD. All other characters are halfwidth characters.
*
* @see https://www.php.net/manual/en/function.mb-strwidth.php
*/
var mb_strwidth = (str = '') => {
let length = 0;
const chars = Array.from(str);
for (const char of chars) {
const cp = char.codePointAt(0);
if (cp === undefined)
continue;
if (0x1100 <= cp && cp <= 0x115F) {
length += 2;
}
else if (0x11A3 <= cp && cp <= 0x11A7) {
length += 2;
}
else if (0x11FA <= cp && cp <= 0x11FF) {
length += 2;
}
else if (0x2329 <= cp && cp <= 0x232A) {
length += 2;
}
else if (0x2E80 <= cp && cp <= 0x2E99) {
length += 2;
}
else if (0x2E9B <= cp && cp <= 0x2EF3) {
length += 2;
}
else if (0x2F00 <= cp && cp <= 0x2FD5) {
length += 2;
}
else if (0x2FF0 <= cp && cp <= 0x2FFB) {
length += 2;
}
else if (0x3000 <= cp && cp <= 0x303E) {
length += 2;
}
else if (0x3041 <= cp && cp <= 0x3096) {
length += 2;
}
else if (0x3099 <= cp && cp <= 0x30FF) {
length += 2;
}
else if (0x3105 <= cp && cp <= 0x312D) {
length += 2;
}
else if (0x3131 <= cp && cp <= 0x318E) {
length += 2;
}
else if (0x3190 <= cp && cp <= 0x31BA) {
length += 2;
}
else if (0x31C0 <= cp && cp <= 0x31E3) {
length += 2;
}
else if (0x31F0 <= cp && cp <= 0x321E) {
length += 2;
}
else if (0x3220 <= cp && cp <= 0x3247) {
length += 2;
}
else if (0x3250 <= cp && cp <= 0x32FE) {
length += 2;
}
else if (0x3300 <= cp && cp <= 0x4DBF) {
length += 2;
}
else if (0x4E00 <= cp && cp <= 0xA48C) {
length += 2;
}
else if (0xA490 <= cp && cp <= 0xA4C6) {
length += 2;
}
else if (0xA960 <= cp && cp <= 0xA97C) {
length += 2;
}
else if (0xAC00 <= cp && cp <= 0xD7A3) {
length += 2;
}
else if (0xD7B0 <= cp && cp <= 0xD7C6) {
length += 2;
}
else if (0xD7CB <= cp && cp <= 0xD7FB) {
length += 2;
}
else if (0xF900 <= cp && cp <= 0xFAFF) {
length += 2;
}
else if (0xFE10 <= cp && cp <= 0xFE19) {
length += 2;
}
else if (0xFE30 <= cp && cp <= 0xFE52) {
length += 2;
}
else if (0xFE54 <= cp && cp <= 0xFE66) {
length += 2;
}
else if (0xFE68 <= cp && cp <= 0xFE6B) {
length += 2;
}
else if (0xFF01 <= cp && cp <= 0xFF60) {
length += 2;
}
else if (0xFFE0 <= cp && cp <= 0xFFE6) {
length += 2;
}
else if (0x1B000 <= cp && cp <= 0x1B001) {
length += 2;
}
else if (0x1F200 <= cp && cp <= 0x1F202) {
length += 2;
}
else if (0x1F210 <= cp && cp <= 0x1F23A) {
length += 2;
}
else if (0x1F240 <= cp && cp <= 0x1F248) {
length += 2;
}
else if (0x1F250 <= cp && cp <= 0x1F251) {
length += 2;
}
else if (0x20000 <= cp && cp <= 0x2FFFD) {
length += 2;
}
else if (0x30000 <= cp && cp <= 0x3FFFD) {
length += 2;
}
else {
length += 1;
}
}
return length;
};
exports.mb_strwidth = mb_strwidth;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbIi4uL3NyYy9tYl9zdHJ3aWR0aC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIG1iX3N0cndpZHRoXG4gKlxuICogVGhlIGZ1bGx3aWR0aCBjaGFyYWN0ZXJzIGFyZTogVSsxMTAwLVUrMTE1RiwgVSsxMUEzLVUrMTFBNywgVSsxMUZBLVUrMTFGRiwgVSsyMzI5LVUrMjMyQSwgVSsyRTgwLVUrMkU5OSwgVSsyRTlCLVUrMkVGMywgVSsyRjAwLVUrMkZENSwgVSsyRkYwLVUrMkZGQiwgVSszMDAwLVUrMzAzRSwgVSszMDQxLVUrMzA5NiwgVSszMDk5LVUrMzBGRiwgVSszMTA1LVUrMzEyRCwgVSszMTMxLVUrMzE4RSwgVSszMTkwLVUrMzFCQSwgVSszMUMwLVUrMzFFMywgVSszMUYwLVUrMzIxRSwgVSszMjIwLVUrMzI0NywgVSszMjUwLVUrMzJGRSwgVSszMzAwLVUrNERCRiwgVSs0RTAwLVUrQTQ4QywgVStBNDkwLVUrQTRDNiwgVStBOTYwLVUrQTk3QywgVStBQzAwLVUrRDdBMywgVStEN0IwLVUrRDdDNiwgVStEN0NCLVUrRDdGQiwgVStGOTAwLVUrRkFGRiwgVStGRTEwLVUrRkUxOSwgVStGRTMwLVUrRkU1MiwgVStGRTU0LVUrRkU2NiwgVStGRTY4LVUrRkU2QiwgVStGRjAxLVUrRkY2MCwgVStGRkUwLVUrRkZFNiwgVSsxQjAwMC1VKzFCMDAxLCBVKzFGMjAwLVUrMUYyMDIsIFUrMUYyMTAtVSsxRjIzQSwgVSsxRjI0MC1VKzFGMjQ4LCBVKzFGMjUwLVUrMUYyNTEsIFUrMjAwMDAtVSsyRkZGRCwgVSszMDAwMC1VKzNGRkZELiBBbGwgb3RoZXIgY2hhcmFjdGVycyBhcmUgaGFsZndpZHRoIGNoYXJhY3RlcnMuXG4gKlxuICogQHNlZSBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5tYi1zdHJ3aWR0aC5waHBcbiAqL1xuZXhwb3J0IGRlZmF1bHQgKHN0ciA9ICcnKTogbnVtYmVyID0+IHtcbiAgbGV0IGxlbmd0aCA9IDA7XG4gIGNvbnN0IGNoYXJzID0gQXJyYXkuZnJvbShzdHIpO1xuICBmb3IgKGNvbnN0IGNoYXIgb2YgY2hhcnMpIHtcbiAgICBjb25zdCBjcCA9IGNoYXIuY29kZVBvaW50QXQoMCk7XG4gICAgaWYgKGNwID09PSB1bmRlZmluZWQpIGNvbnRpbnVlO1xuXG4gICAgaWYgKDB4MTEwMCA8PSBjcCAmJiBjcCA8PSAweDExNUYpIHtcbiAgICAgIGxlbmd0aCArPSAyO1xuICAgIH0gZWxzZSBpZiAoMHgxMUEzIDw9IGNwICYmIGNwIDw9IDB4MTFBNykge1xuICAgICAgbGVuZ3RoICs9IDI7XG4gICAgfSBlbHNlIGlmICgweDExRkEgPD0gY3AgJiYgY3AgPD0gMHgxMUZGKSB7XG4gICAgICBsZW5ndGggKz0gMjtcbiAgICB9IGVsc2UgaWYgKDB4MjMyOSA8PSBjcCAmJiBjcCA8PSAweDIzMkEpIHtcbiAgICAgIGxlbmd0aCArPSAyO1xuICAgIH0gZWxzZSBpZiAoMHgyRTgwIDw9IGNwICYmIGNwIDw9IDB4MkU5OSkge1xuICAgICAgbGVuZ3RoICs9IDI7XG4gICAgfSBlbHNlIGlmICgweDJFOUIgPD0gY3AgJiYgY3AgPD0gMHgyRUYzKSB7XG4gICAgICBsZW5ndGggKz0gMjtcbiAgICB9IGVsc2UgaWYgKDB4MkYwMCA8PSBjcCAmJiBjcCA8PSAweDJGRDUpIHtcbiAgICAgIGxlbmd0aCArPSAyO1xuICAgIH0gZWxzZSBpZiAoMHgyRkYwIDw9IGNwICYmIGNwIDw9IDB4MkZGQikge1xuICAgICAgbGVuZ3RoICs9IDI7XG4gICAgfSBlbHNlIGlmICgweDMwMDAgPD0gY3AgJiYgY3AgPD0gMHgzMDNFKSB7XG4gICAgICBsZW5ndGggKz0gMjtcbiAgICB9IGVsc2UgaWYgKDB4MzA0MSA8PSBjcCAmJiBjcCA8PSAweDMwOTYpIHtcbiAgICAgIGxlbmd0aCArPSAyO1xuICAgIH0gZWxzZSBpZiAoMHgzMDk5IDw9IGNwICYmIGNwIDw9IDB4MzBGRikge1xuICAgICAgbGVuZ3RoICs9IDI7XG4gICAgfSBlbHNlIGlmICgweDMxMDUgPD0gY3AgJiYgY3AgPD0gMHgzMTJEKSB7XG4gICAgICBsZW5ndGggKz0gMjtcbiAgICB9IGVsc2UgaWYgKDB4MzEzMSA8PSBjcCAmJiBjcCA8PSAweDMxOEUpIHtcbiAgICAgIGxlbmd0aCArPSAyO1xuICAgIH0gZWxzZSBpZiAoMHgzMTkwIDw9IGNwICYmIGNwIDw9IDB4MzFCQSkge1xuICAgICAgbGVuZ3RoICs9IDI7XG4gICAgfSBlbHNlIGlmICgweDMxQzAgPD0gY3AgJiYgY3AgPD0gMHgzMUUzKSB7XG4gICAgICBsZW5ndGggKz0gMjtcbiAgICB9IGVsc2UgaWYgKDB4MzFGMCA8PSBjcCAmJiBjcCA8PSAweDMyMUUpIHtcbiAgICAgIGxlbmd0aCArPSAyO1xuICAgIH0gZWxzZSBpZiAoMHgzMjIwIDw9IGNwICYmIGNwIDw9IDB4MzI0Nykge1xuICAgICAgbGVuZ3RoICs9IDI7XG4gICAgfSBlbHNlIGlmICgweDMyNTAgPD0gY3AgJiYgY3AgPD0gMHgzMkZFKSB7XG4gICAgICBsZW5ndGggKz0gMjtcbiAgICB9IGVsc2UgaWYgKDB4MzMwMCA8PSBjcCAmJiBjcCA8PSAweDREQkYpIHtcbiAgICAgIGxlbmd0aCArPSAyO1xuICAgIH0gZWxzZSBpZiAoMHg0RTAwIDw9IGNwICYmIGNwIDw9IDB4QTQ4Qykge1xuICAgICAgbGVuZ3RoICs9IDI7XG4gICAgfSBlbHNlIGlmICgweEE0OTAgPD0gY3AgJiYgY3AgPD0gMHhBNEM2KSB7XG4gICAgICBsZW5ndGggKz0gMjtcbiAgICB9IGVsc2UgaWYgKDB4QTk2MCA8PSBjcCAmJiBjcCA8PSAweEE5N0MpIHtcbiAgICAgIGxlbmd0aCArPSAyO1xuICAgIH0gZWxzZSBpZiAoMHhBQzAwIDw9IGNwICYmIGNwIDw9IDB4RDdBMykge1xuICAgICAgbGVuZ3RoICs9IDI7XG4gICAgfSBlbHNlIGlmICgweEQ3QjAgPD0gY3AgJiYgY3AgPD0gMHhEN0M2KSB7XG4gICAgICBsZW5ndGggKz0gMjtcbiAgICB9IGVsc2UgaWYgKDB4RDdDQiA8PSBjcCAmJiBjcCA8PSAweEQ3RkIpIHtcbiAgICAgIGxlbmd0aCArPSAyO1xuICAgIH0gZWxzZSBpZiAoMHhGOTAwIDw9IGNwICYmIGNwIDw9IDB4RkFGRikge1xuICAgICAgbGVuZ3RoICs9IDI7XG4gICAgfSBlbHNlIGlmICgweEZFMTAgPD0gY3AgJiYgY3AgPD0gMHhGRTE5KSB7XG4gICAgICBsZW5ndGggKz0gMjtcbiAgICB9IGVsc2UgaWYgKDB4RkUzMCA8PSBjcCAmJiBjcCA8PSAweEZFNTIpIHtcbiAgICAgIGxlbmd0aCArPSAyO1xuICAgIH0gZWxzZSBpZiAoMHhGRTU0IDw9IGNwICYmIGNwIDw9IDB4RkU2Nikge1xuICAgICAgbGVuZ3RoICs9IDI7XG4gICAgfSBlbHNlIGlmICgweEZFNjggPD0gY3AgJiYgY3AgPD0gMHhGRTZCKSB7XG4gICAgICBsZW5ndGggKz0gMjtcbiAgICB9IGVsc2UgaWYgKDB4RkYwMSA8PSBjcCAmJiBjcCA8PSAweEZGNjApIHtcbiAgICAgIGxlbmd0aCArPSAyO1xuICAgIH0gZWxzZSBpZiAoMHhGRkUwIDw9IGNwICYmIGNwIDw9IDB4RkZFNikge1xuICAgICAgbGVuZ3RoICs9IDI7XG4gICAgfSBlbHNlIGlmICgweDFCMDAwIDw9IGNwICYmIGNwIDw9IDB4MUIwMDEpIHtcbiAgICAgIGxlbmd0aCArPSAyO1xuICAgIH0gZWxzZSBpZiAoMHgxRjIwMCA8PSBjcCAmJiBjcCA8PSAweDFGMjAyKSB7XG4gICAgICBsZW5ndGggKz0gMjtcbiAgICB9IGVsc2UgaWYgKDB4MUYyMTAgPD0gY3AgJiYgY3AgPD0gMHgxRjIzQSkge1xuICAgICAgbGVuZ3RoICs9IDI7XG4gICAgfSBlbHNlIGlmICgweDFGMjQwIDw9IGNwICYmIGNwIDw9IDB4MUYyNDgpIHtcbiAgICAgIGxlbmd0aCArPSAyO1xuICAgIH0gZWxzZSBpZiAoMHgxRjI1MCA8PSBjcCAmJiBjcCA8PSAweDFGMjUxKSB7XG4gICAgICBsZW5ndGggKz0gMjtcbiAgICB9IGVsc2UgaWYgKDB4MjAwMDAgPD0gY3AgJiYgY3AgPD0gMHgyRkZGRCkge1xuICAgICAgbGVuZ3RoICs9IDI7XG4gICAgfSBlbHNlIGlmICgweDMwMDAwIDw9IGNwICYmIGNwIDw9IDB4M0ZGRkQpIHtcbiAgICAgIGxlbmd0aCArPSAyO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZW5ndGggKz0gMTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGxlbmd0aDtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTs7Ozs7O0FBTUc7QUFDSCxrQkFBZSxDQUFDLEdBQUcsR0FBRyxFQUFFLEtBQVk7SUFDbEMsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ2YsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM5QixJQUFBLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFO1FBQ3hCLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0IsSUFBSSxFQUFFLEtBQUssU0FBUztZQUFFLFNBQVM7QUFFL0IsUUFBQSxJQUFJLE1BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLE1BQU0sRUFBRTtZQUNoQyxNQUFNLElBQUksQ0FBQyxDQUFDO0FBQ2IsU0FBQTtBQUFNLGFBQUEsSUFBSSxNQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxNQUFNLEVBQUU7WUFDdkMsTUFBTSxJQUFJLENBQUMsQ0FBQztBQUNiLFNBQUE7QUFBTSxhQUFBLElBQUksTUFBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksTUFBTSxFQUFFO1lBQ3ZDLE1BQU0sSUFBSSxDQUFDLENBQUM7QUFDYixTQUFBO0FBQU0sYUFBQSxJQUFJLE1BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLE1BQU0sRUFBRTtZQUN2QyxNQUFNLElBQUksQ0FBQyxDQUFDO0FBQ2IsU0FBQTtBQUFNLGFBQUEsSUFBSSxNQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxNQUFNLEVBQUU7WUFDdkMsTUFBTSxJQUFJLENBQUMsQ0FBQztBQUNiLFNBQUE7QUFBTSxhQUFBLElBQUksTUFBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksTUFBTSxFQUFFO1lBQ3ZDLE1BQU0sSUFBSSxDQUFDLENBQUM7QUFDYixTQUFBO0FBQU0sYUFBQSxJQUFJLE1BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLE1BQU0sRUFBRTtZQUN2QyxNQUFNLElBQUksQ0FBQyxDQUFDO0FBQ2IsU0FBQTtBQUFNLGFBQUEsSUFBSSxNQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxNQUFNLEVBQUU7WUFDdkMsTUFBTSxJQUFJLENBQUMsQ0FBQztBQUNiLFNBQUE7QUFBTSxhQUFBLElBQUksTUFBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksTUFBTSxFQUFFO1lBQ3ZDLE1BQU0sSUFBSSxDQUFDLENBQUM7QUFDYixTQUFBO0FBQU0sYUFBQSxJQUFJLE1BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLE1BQU0sRUFBRTtZQUN2QyxNQUFNLElBQUksQ0FBQyxDQUFDO0FBQ2IsU0FBQTtBQUFNLGFBQUEsSUFBSSxNQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxNQUFNLEVBQUU7WUFDdkMsTUFBTSxJQUFJLENBQUMsQ0FBQztBQUNiLFNBQUE7QUFBTSxhQUFBLElBQUksTUFBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksTUFBTSxFQUFFO1lBQ3ZDLE1BQU0sSUFBSSxDQUFDLENBQUM7QUFDYixTQUFBO0FBQU0sYUFBQSxJQUFJLE1BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLE1BQU0sRUFBRTtZQUN2QyxNQUFNLElBQUksQ0FBQyxDQUFDO0FBQ2IsU0FBQTtBQUFNLGFBQUEsSUFBSSxNQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxNQUFNLEVBQUU7WUFDdkMsTUFBTSxJQUFJLENBQUMsQ0FBQztBQUNiLFNBQUE7QUFBTSxhQUFBLElBQUksTUFBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksTUFBTSxFQUFFO1lBQ3ZDLE1BQU0sSUFBSSxDQUFDLENBQUM7QUFDYixTQUFBO0FBQU0sYUFBQSxJQUFJLE1BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLE1BQU0sRUFBRTtZQUN2QyxNQUFNLElBQUksQ0FBQyxDQUFDO0FBQ2IsU0FBQTtBQUFNLGFBQUEsSUFBSSxNQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxNQUFNLEVBQUU7WUFDdkMsTUFBTSxJQUFJLENBQUMsQ0FBQztBQUNiLFNBQUE7QUFBTSxhQUFBLElBQUksTUFBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksTUFBTSxFQUFFO1lBQ3ZDLE1BQU0sSUFBSSxDQUFDLENBQUM7QUFDYixTQUFBO0FBQU0sYUFBQSxJQUFJLE1BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLE1BQU0sRUFBRTtZQUN2QyxNQUFNLElBQUksQ0FBQyxDQUFDO0FBQ2IsU0FBQTtBQUFNLGFBQUEsSUFBSSxNQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxNQUFNLEVBQUU7WUFDdkMsTUFBTSxJQUFJLENBQUMsQ0FBQztBQUNiLFNBQUE7QUFBTSxhQUFBLElBQUksTUFBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksTUFBTSxFQUFFO1lBQ3ZDLE1BQU0sSUFBSSxDQUFDLENBQUM7QUFDYixTQUFBO0FBQU0sYUFBQSxJQUFJLE1BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLE1BQU0sRUFBRTtZQUN2QyxNQUFNLElBQUksQ0FBQyxDQUFDO0FBQ2IsU0FBQTtBQUFNLGFBQUEsSUFBSSxNQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxNQUFNLEVBQUU7WUFDdkMsTUFBTSxJQUFJLENBQUMsQ0FBQztBQUNiLFNBQUE7QUFBTSxhQUFBLElBQUksTUFBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksTUFBTSxFQUFFO1lBQ3ZDLE1BQU0sSUFBSSxDQUFDLENBQUM7QUFDYixTQUFBO0FBQU0sYUFBQSxJQUFJLE1BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLE1BQU0sRUFBRTtZQUN2QyxNQUFNLElBQUksQ0FBQyxDQUFDO0FBQ2IsU0FBQTtBQUFNLGFBQUEsSUFBSSxNQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxNQUFNLEVBQUU7WUFDdkMsTUFBTSxJQUFJLENBQUMsQ0FBQztBQUNiLFNBQUE7QUFBTSxhQUFBLElBQUksTUFBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksTUFBTSxFQUFFO1lBQ3ZDLE1BQU0sSUFBSSxDQUFDLENBQUM7QUFDYixTQUFBO0FBQU0sYUFBQSxJQUFJLE1BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLE1BQU0sRUFBRTtZQUN2QyxNQUFNLElBQUksQ0FBQyxDQUFDO0FBQ2IsU0FBQTtBQUFNLGFBQUEsSUFBSSxNQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxNQUFNLEVBQUU7WUFDdkMsTUFBTSxJQUFJLENBQUMsQ0FBQztBQUNiLFNBQUE7QUFBTSxhQUFBLElBQUksTUFBTSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksTUFBTSxFQUFFO1lBQ3ZDLE1BQU0sSUFBSSxDQUFDLENBQUM7QUFDYixTQUFBO0FBQU0sYUFBQSxJQUFJLE1BQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLE1BQU0sRUFBRTtZQUN2QyxNQUFNLElBQUksQ0FBQyxDQUFDO0FBQ2IsU0FBQTtBQUFNLGFBQUEsSUFBSSxNQUFNLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxNQUFNLEVBQUU7WUFDdkMsTUFBTSxJQUFJLENBQUMsQ0FBQztBQUNiLFNBQUE7QUFBTSxhQUFBLElBQUksT0FBTyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksT0FBTyxFQUFFO1lBQ3pDLE1BQU0sSUFBSSxDQUFDLENBQUM7QUFDYixTQUFBO0FBQU0sYUFBQSxJQUFJLE9BQU8sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLE9BQU8sRUFBRTtZQUN6QyxNQUFNLElBQUksQ0FBQyxDQUFDO0FBQ2IsU0FBQTtBQUFNLGFBQUEsSUFBSSxPQUFPLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxPQUFPLEVBQUU7WUFDekMsTUFBTSxJQUFJLENBQUMsQ0FBQztBQUNiLFNBQUE7QUFBTSxhQUFBLElBQUksT0FBTyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksT0FBTyxFQUFFO1lBQ3pDLE1BQU0sSUFBSSxDQUFDLENBQUM7QUFDYixTQUFBO0FBQU0sYUFBQSxJQUFJLE9BQU8sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLE9BQU8sRUFBRTtZQUN6QyxNQUFNLElBQUksQ0FBQyxDQUFDO0FBQ2IsU0FBQTtBQUFNLGFBQUEsSUFBSSxPQUFPLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxPQUFPLEVBQUU7WUFDekMsTUFBTSxJQUFJLENBQUMsQ0FBQztBQUNiLFNBQUE7QUFBTSxhQUFBLElBQUksT0FBTyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksT0FBTyxFQUFFO1lBQ3pDLE1BQU0sSUFBSSxDQUFDLENBQUM7QUFDYixTQUFBO0FBQU0sYUFBQTtZQUNMLE1BQU0sSUFBSSxDQUFDLENBQUM7QUFDYixTQUFBO0FBQ0YsS0FBQTtBQUNELElBQUEsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQzs7OzsifQ==