Proyectos de Subversion Moodle

Rev

Rev 1 | Mostrar el archivo completo | | | Autoría | Ultima modificación | Ver Log |

Rev 1 Rev 1441
Línea -... Línea 1...
-
 
1
// These are filled with ranges (rangeFrom[i] up to but not including
-
 
2
// rangeTo[i]) of code points that count as extending characters.
-
 
3
let rangeFrom = [], rangeTo = []
-
 
4
 
-
 
5
;(() => {
-
 
6
  // Compressed representation of the Grapheme_Cluster_Break=Extend
-
 
7
  // information from
-
 
8
  // http://www.unicode.org/Public/16.0.0/ucd/auxiliary/GraphemeBreakProperty.txt.
-
 
9
  // Each pair of elements represents a range, as an offet from the
-
 
10
  // previous range and a length. Numbers are in base-36, with the empty
-
 
11
  // string being a shorthand for 1.
-
 
12
  let numbers = "lc,34,7n,7,7b,19,,,,2,,2,,,20,b,1c,l,g,,2t,7,2,6,2,2,,4,z,,u,r,2j,b,1m,9,9,,o,4,,9,,3,,5,17,3,3b,f,,w,1j,,,,4,8,4,,3,7,a,2,t,,1m,,,,2,4,8,,9,,a,2,q,,2,2,1l,,4,2,4,2,2,3,3,,u,2,3,,b,2,1l,,4,5,,2,4,,k,2,m,6,,,1m,,,2,,4,8,,7,3,a,2,u,,1n,,,,c,,9,,14,,3,,1l,3,5,3,,4,7,2,b,2,t,,1m,,2,,2,,3,,5,2,7,2,b,2,s,2,1l,2,,,2,4,8,,9,,a,2,t,,20,,4,,2,3,,,8,,29,,2,7,c,8,2q,,2,9,b,6,22,2,r,,,,,,1j,e,,5,,2,5,b,,10,9,,2u,4,,6,,2,2,2,p,2,4,3,g,4,d,,2,2,6,,f,,jj,3,qa,3,t,3,t,2,u,2,1s,2,,7,8,,2,b,9,,19,3,3b,2,y,,3a,3,4,2,9,,6,3,63,2,2,,1m,,,7,,,,,2,8,6,a,2,,1c,h,1r,4,1c,7,,,5,,14,9,c,2,w,4,2,2,,3,1k,,,2,3,,,3,1m,8,2,2,48,3,,d,,7,4,,6,,3,2,5i,1m,,5,ek,,5f,x,2da,3,3x,,2o,w,fe,6,2x,2,n9w,4,,a,w,2,28,2,7k,,3,,4,,p,2,5,,47,2,q,i,d,,12,8,p,b,1a,3,1c,,2,4,2,2,13,,1v,6,2,2,2,2,c,,8,,1b,,1f,,,3,2,2,5,2,,,16,2,8,,6m,,2,,4,,fn4,,kh,g,g,g,a6,2,gt,,6a,,45,5,1ae,3,,2,5,4,14,3,4,,4l,2,fx,4,ar,2,49,b,4w,,1i,f,1k,3,1d,4,2,2,1x,3,10,5,,8,1q,,c,2,1g,9,a,4,2,,2n,3,2,,,2,6,,4g,,3,8,l,2,1l,2,,,,,m,,e,7,3,5,5f,8,2,3,,,n,,29,,2,6,,,2,,,2,,2,6j,,2,4,6,2,,2,r,2,2d,8,2,,,2,2y,,,,2,6,,,2t,3,2,4,,5,77,9,,2,6t,,a,2,,,4,,40,4,2,2,4,,w,a,14,6,2,4,8,,9,6,2,3,1a,d,,2,ba,7,,6,,,2a,m,2,7,,2,,2,3e,6,3,,,2,,7,,,20,2,3,,,,9n,2,f0b,5,1n,7,t4,,1r,4,29,,f5k,2,43q,,,3,4,5,8,8,2,7,u,4,44,3,1iz,1j,4,1e,8,,e,,m,5,,f,11s,7,,h,2,7,,2,,5,79,7,c5,4,15s,7,31,7,240,5,gx7k,2o,3k,6o".split(",").map(s => s ? parseInt(s, 36) : 1);
-
 
13
  for (let i = 0, n = 0; i < numbers.length; i++)
-
 
14
    (i % 2 ? rangeTo : rangeFrom).push(n = n + numbers[i]);
-
 
15
})();
-
 
16
 
-
 
17
function isExtendingChar(code) {
-
 
18
  if (code < 768) return false
-
 
19
  for (let from = 0, to = rangeFrom.length;;) {
-
 
20
    let mid = (from + to) >> 1;
-
 
21
    if (code < rangeFrom[mid]) to = mid;
-
 
22
    else if (code >= rangeTo[mid]) from = mid + 1;
-
 
23
    else return true
-
 
24
    if (from == to) return false
-
 
25
  }
-
 
26
}
-
 
27
 
-
 
28
function isRegionalIndicator(code) {
-
 
29
  return code >= 0x1F1E6 && code <= 0x1F1FF
-
 
30
}
-
 
31
 
-
 
32
const ZWJ = 0x200d;
-
 
33
 
-
 
34
function findClusterBreak$1(str, pos, forward = true, includeExtending = true) {
-
 
35
  return (forward ? nextClusterBreak : prevClusterBreak)(str, pos, includeExtending)
-
 
36
}
-
 
37
 
-
 
38
function nextClusterBreak(str, pos, includeExtending) {
-
 
39
  if (pos == str.length) return pos
-
 
40
  // If pos is in the middle of a surrogate pair, move to its start
-
 
41
  if (pos && surrogateLow$1(str.charCodeAt(pos)) && surrogateHigh$1(str.charCodeAt(pos - 1))) pos--;
-
 
42
  let prev = codePointAt$1(str, pos);
-
 
43
  pos += codePointSize$1(prev);
-
 
44
  while (pos < str.length) {
-
 
45
    let next = codePointAt$1(str, pos);
-
 
46
    if (prev == ZWJ || next == ZWJ || includeExtending && isExtendingChar(next)) {
-
 
47
      pos += codePointSize$1(next);
-
 
48
      prev = next;
-
 
49
    } else if (isRegionalIndicator(next)) {
-
 
50
      let countBefore = 0, i = pos - 2;
-
 
51
      while (i >= 0 && isRegionalIndicator(codePointAt$1(str, i))) { countBefore++; i -= 2; }
-
 
52
      if (countBefore % 2 == 0) break
-
 
53
      else pos += 2;
-
 
54
    } else {
-
 
55
      break
-
 
56
    }
-
 
57
  }
-
 
58
  return pos
-
 
59
}
-
 
60
 
-
 
61
function prevClusterBreak(str, pos, includeExtending) {
-
 
62
  while (pos > 0) {
-
 
63
    let found = nextClusterBreak(str, pos - 2, includeExtending);
-
 
64
    if (found < pos) return found
-
 
65
    pos--;
-
 
66
  }
-
 
67
  return 0
-
 
68
}
-
 
69
 
-
 
70
function codePointAt$1(str, pos) {
-
 
71
  let code0 = str.charCodeAt(pos);
-
 
72
  if (!surrogateHigh$1(code0) || pos + 1 == str.length) return code0
-
 
73
  let code1 = str.charCodeAt(pos + 1);
-
 
74
  if (!surrogateLow$1(code1)) return code0
-
 
75
  return ((code0 - 0xd800) << 10) + (code1 - 0xdc00) + 0x10000
-
 
76
}
-
 
77
 
-
 
78
function surrogateLow$1(ch) { return ch >= 0xDC00 && ch < 0xE000 }
-
 
79
function surrogateHigh$1(ch) { return ch >= 0xD800 && ch < 0xDC00 }
-
 
80
function codePointSize$1(code) { return code < 0x10000 ? 1 : 2 }
-
 
81
 
1
/**
82
/**
2
The data structure for documents. @nonabstract
83
The data structure for documents. @nonabstract
3
*/
84
*/
4
class Text {
85
class Text {
5
    /**
86
    /**
Línea 558... Línea 639...
558
function clip(text, from, to) {
639
function clip(text, from, to) {
559
    from = Math.max(0, Math.min(text.length, from));
640
    from = Math.max(0, Math.min(text.length, from));
560
    return [from, Math.max(from, Math.min(text.length, to))];
641
    return [from, Math.max(from, Math.min(text.length, to))];
561
}
642
}
Línea 562... Línea -...
562
 
-
 
563
// Compressed representation of the Grapheme_Cluster_Break=Extend
-
 
564
// information from
-
 
565
// http://www.unicode.org/Public/13.0.0/ucd/auxiliary/GraphemeBreakProperty.txt.
-
 
566
// Each pair of elements represents a range, as an offet from the
-
 
567
// previous range and a length. Numbers are in base-36, with the empty
-
 
568
// string being a shorthand for 1.
-
 
569
let extend = /*@__PURE__*/"lc,34,7n,7,7b,19,,,,2,,2,,,20,b,1c,l,g,,2t,7,2,6,2,2,,4,z,,u,r,2j,b,1m,9,9,,o,4,,9,,3,,5,17,3,3b,f,,w,1j,,,,4,8,4,,3,7,a,2,t,,1m,,,,2,4,8,,9,,a,2,q,,2,2,1l,,4,2,4,2,2,3,3,,u,2,3,,b,2,1l,,4,5,,2,4,,k,2,m,6,,,1m,,,2,,4,8,,7,3,a,2,u,,1n,,,,c,,9,,14,,3,,1l,3,5,3,,4,7,2,b,2,t,,1m,,2,,2,,3,,5,2,7,2,b,2,s,2,1l,2,,,2,4,8,,9,,a,2,t,,20,,4,,2,3,,,8,,29,,2,7,c,8,2q,,2,9,b,6,22,2,r,,,,,,1j,e,,5,,2,5,b,,10,9,,2u,4,,6,,2,2,2,p,2,4,3,g,4,d,,2,2,6,,f,,jj,3,qa,3,t,3,t,2,u,2,1s,2,,7,8,,2,b,9,,19,3,3b,2,y,,3a,3,4,2,9,,6,3,63,2,2,,1m,,,7,,,,,2,8,6,a,2,,1c,h,1r,4,1c,7,,,5,,14,9,c,2,w,4,2,2,,3,1k,,,2,3,,,3,1m,8,2,2,48,3,,d,,7,4,,6,,3,2,5i,1m,,5,ek,,5f,x,2da,3,3x,,2o,w,fe,6,2x,2,n9w,4,,a,w,2,28,2,7k,,3,,4,,p,2,5,,47,2,q,i,d,,12,8,p,b,1a,3,1c,,2,4,2,2,13,,1v,6,2,2,2,2,c,,8,,1b,,1f,,,3,2,2,5,2,,,16,2,8,,6m,,2,,4,,fn4,,kh,g,g,g,a6,2,gt,,6a,,45,5,1ae,3,,2,5,4,14,3,4,,4l,2,fx,4,ar,2,49,b,4w,,1i,f,1k,3,1d,4,2,2,1x,3,10,5,,8,1q,,c,2,1g,9,a,4,2,,2n,3,2,,,2,6,,4g,,3,8,l,2,1l,2,,,,,m,,e,7,3,5,5f,8,2,3,,,n,,29,,2,6,,,2,,,2,,2,6j,,2,4,6,2,,2,r,2,2d,8,2,,,2,2y,,,,2,6,,,2t,3,2,4,,5,77,9,,2,6t,,a,2,,,4,,40,4,2,2,4,,w,a,14,6,2,4,8,,9,6,2,3,1a,d,,2,ba,7,,6,,,2a,m,2,7,,2,,2,3e,6,3,,,2,,7,,,20,2,3,,,,9n,2,f0b,5,1n,7,t4,,1r,4,29,,f5k,2,43q,,,3,4,5,8,8,2,7,u,4,44,3,1iz,1j,4,1e,8,,e,,m,5,,f,11s,7,,h,2,7,,2,,5,79,7,c5,4,15s,7,31,7,240,5,gx7k,2o,3k,6o".split(",").map(s => s ? parseInt(s, 36) : 1);
-
 
570
// Convert offsets into absolute values
-
 
571
for (let i = 1; i < extend.length; i++)
-
 
572
    extend[i] += extend[i - 1];
-
 
573
function isExtendingChar(code) {
-
 
574
    for (let i = 1; i < extend.length; i += 2)
-
 
575
        if (extend[i] > code)
-
 
576
            return extend[i - 1] <= code;
-
 
577
    return false;
-
 
578
}
-
 
579
function isRegionalIndicator(code) {
-
 
580
    return code >= 0x1F1E6 && code <= 0x1F1FF;
-
 
581
}
-
 
582
const ZWJ = 0x200d;
643
 
583
/**
644
/**
584
Returns a next grapheme cluster break _after_ (not equal to)
645
Returns a next grapheme cluster break _after_ (not equal to)
585
`pos`, if `forward` is true, or before otherwise. Returns `pos`
646
`pos`, if `forward` is true, or before otherwise. Returns `pos`
586
itself if no further cluster break is available in the string.
647
itself if no further cluster break is available in the string.
587
Moves across surrogate pairs, extending characters (when
648
Moves across surrogate pairs, extending characters (when
588
`includeExtending` is true), characters joined with zero-width
649
`includeExtending` is true), characters joined with zero-width
589
joiners, and flag emoji.
650
joiners, and flag emoji.
590
*/
651
*/
591
function findClusterBreak(str, pos, forward = true, includeExtending = true) {
-
 
592
    return (forward ? nextClusterBreak : prevClusterBreak)(str, pos, includeExtending);
-
 
593
}
-
 
594
function nextClusterBreak(str, pos, includeExtending) {
-
 
595
    if (pos == str.length)
-
 
596
        return pos;
-
 
597
    // If pos is in the middle of a surrogate pair, move to its start
-
 
598
    if (pos && surrogateLow(str.charCodeAt(pos)) && surrogateHigh(str.charCodeAt(pos - 1)))
-
 
599
        pos--;
-
 
600
    let prev = codePointAt(str, pos);
-
 
601
    pos += codePointSize(prev);
-
 
602
    while (pos < str.length) {
-
 
603
        let next = codePointAt(str, pos);
-
 
604
        if (prev == ZWJ || next == ZWJ || includeExtending && isExtendingChar(next)) {
-
 
605
            pos += codePointSize(next);
-
 
606
            prev = next;
-
 
607
        }
-
 
608
        else if (isRegionalIndicator(next)) {
-
 
609
            let countBefore = 0, i = pos - 2;
-
 
610
            while (i >= 0 && isRegionalIndicator(codePointAt(str, i))) {
-
 
611
                countBefore++;
-
 
612
                i -= 2;
-
 
613
            }
-
 
614
            if (countBefore % 2 == 0)
-
 
615
                break;
-
 
616
            else
-
 
617
                pos += 2;
-
 
618
        }
-
 
619
        else {
-
 
620
            break;
-
 
621
        }
-
 
622
    }
-
 
623
    return pos;
-
 
624
}
-
 
625
function prevClusterBreak(str, pos, includeExtending) {
-
 
626
    while (pos > 0) {
652
function findClusterBreak(str, pos, forward = true, includeExtending = true) {
627
        let found = nextClusterBreak(str, pos - 2, includeExtending);
-
 
628
        if (found < pos)
-
 
629
            return found;
-
 
630
        pos--;
-
 
631
    }
-
 
632
    return 0;
653
    return findClusterBreak$1(str, pos, forward, includeExtending);
633
}
654
}
634
function surrogateLow(ch) { return ch >= 0xDC00 && ch < 0xE000; }
655
function surrogateLow(ch) { return ch >= 0xDC00 && ch < 0xE000; }
635
function surrogateHigh(ch) { return ch >= 0xD800 && ch < 0xDC00; }
656
function surrogateHigh(ch) { return ch >= 0xD800 && ch < 0xDC00; }
636
/**
657
/**
Línea 657... Línea 678...
657
        return String.fromCharCode(code);
678
        return String.fromCharCode(code);
658
    code -= 0x10000;
679
    code -= 0x10000;
659
    return String.fromCharCode((code >> 10) + 0xd800, (code & 1023) + 0xdc00);
680
    return String.fromCharCode((code >> 10) + 0xd800, (code & 1023) + 0xdc00);
660
}
681
}
661
/**
682
/**
662
The amount of positions a character takes up a JavaScript string.
683
The amount of positions a character takes up in a JavaScript string.
663
*/
684
*/
664
function codePointSize(code) { return code < 0x10000 ? 1 : 2; }
685
function codePointSize(code) { return code < 0x10000 ? 1 : 2; }
Línea 665... Línea 686...
665
 
686
 
666
const DefaultSplit = /\r\n?|\n/;
687
const DefaultSplit = /\r\n?|\n/;
Línea 786... Línea 807...
786
    composeDesc(other) { return this.empty ? other : other.empty ? this : composeSets(this, other); }
807
    composeDesc(other) { return this.empty ? other : other.empty ? this : composeSets(this, other); }
787
    /**
808
    /**
788
    Map this description, which should start with the same document
809
    Map this description, which should start with the same document
789
    as `other`, over another set of changes, so that it can be
810
    as `other`, over another set of changes, so that it can be
790
    applied after it. When `before` is true, map as if the changes
811
    applied after it. When `before` is true, map as if the changes
791
    in `other` happened before the ones in `this`.
812
    in `this` happened before the ones in `other`.
792
    */
813
    */
793
    mapDesc(other, before = false) { return other.empty ? this : mapSet(this, other, before); }
814
    mapDesc(other, before = false) { return other.empty ? this : mapSet(this, other, before); }
794
    mapPos(pos, assoc = -1, mode = MapMode.Simple) {
815
    mapPos(pos, assoc = -1, mode = MapMode.Simple) {
795
        let posA = 0, posB = 0;
816
        let posA = 0, posB = 0;
796
        for (let i = 0; i < this.sections.length;) {
817
        for (let i = 0; i < this.sections.length;) {
Línea 1089... Línea 1110...
1089
    if (len == 0 && ins <= 0)
1110
    if (len == 0 && ins <= 0)
1090
        return;
1111
        return;
1091
    let last = sections.length - 2;
1112
    let last = sections.length - 2;
1092
    if (last >= 0 && ins <= 0 && ins == sections[last + 1])
1113
    if (last >= 0 && ins <= 0 && ins == sections[last + 1])
1093
        sections[last] += len;
1114
        sections[last] += len;
1094
    else if (len == 0 && sections[last] == 0)
1115
    else if (last >= 0 && len == 0 && sections[last] == 0)
1095
        sections[last + 1] += ins;
1116
        sections[last + 1] += ins;
1096
    else if (forceJoin) {
1117
    else if (forceJoin) {
1097
        sections[last] += len;
1118
        sections[last] += len;
1098
        sections[last + 1] += ins;
1119
        sections[last + 1] += ins;
1099
    }
1120
    }
Línea 1147... Línea 1168...
1147
    // Iterate over both sets in parallel. inserted tracks, for changes
1168
    // Iterate over both sets in parallel. inserted tracks, for changes
1148
    // in A that have to be processed piece-by-piece, whether their
1169
    // in A that have to be processed piece-by-piece, whether their
1149
    // content has been inserted already, and refers to the section
1170
    // content has been inserted already, and refers to the section
1150
    // index.
1171
    // index.
1151
    for (let inserted = -1;;) {
1172
    for (let inserted = -1;;) {
-
 
1173
        if (a.done && b.len || b.done && a.len) {
-
 
1174
            throw new Error("Mismatched change set lengths");
-
 
1175
        }
1152
        if (a.ins == -1 && b.ins == -1) {
1176
        else if (a.ins == -1 && b.ins == -1) {
1153
            // Move across ranges skipped by both sets.
1177
            // Move across ranges skipped by both sets.
1154
            let len = Math.min(a.len, b.len);
1178
            let len = Math.min(a.len, b.len);
1155
            addSection(sections, len, -1);
1179
            addSection(sections, len, -1);
1156
            a.forward(len);
1180
            a.forward(len);
1157
            b.forward(len);
1181
            b.forward(len);
Línea 1827... Línea 1851...
1827
                    return 0;
1851
                    return 0;
1828
                state.values[idx] = value;
1852
                state.values[idx] = value;
1829
                return 1 /* SlotStatus.Changed */;
1853
                return 1 /* SlotStatus.Changed */;
1830
            },
1854
            },
1831
            reconfigure: (state, oldState) => {
1855
            reconfigure: (state, oldState) => {
-
 
1856
                let init = state.facet(initField), oldInit = oldState.facet(initField), reInit;
-
 
1857
                if ((reInit = init.find(i => i.field == this)) && reInit != oldInit.find(i => i.field == this)) {
-
 
1858
                    state.values[idx] = reInit.create(state);
-
 
1859
                    return 1 /* SlotStatus.Changed */;
-
 
1860
                }
1832
                if (oldState.config.address[this.id] != null) {
1861
                if (oldState.config.address[this.id] != null) {
1833
                    state.values[idx] = oldState.field(this);
1862
                    state.values[idx] = oldState.field(this);
1834
                    return 0;
1863
                    return 0;
1835
                }
1864
                }
1836
                state.values[idx] = this.create(state);
1865
                state.values[idx] = this.create(state);
Línea 3119... Línea 3148...
3119
            else
3148
            else
3120
                lo = mid + 1;
3149
                lo = mid + 1;
3121
        }
3150
        }
3122
    }
3151
    }
3123
    between(offset, from, to, f) {
3152
    between(offset, from, to, f) {
3124
        for (let i = this.findIndex(from, -1000000000 /* C.Far */, true), e = this.findIndex(to, 1000000000 /* C.Far */, false, i); i < e; i++)
3153
        for (let i = this.findIndex(from, -1e9 /* C.Far */, true), e = this.findIndex(to, 1000000000 /* C.Far */, false, i); i < e; i++)
3125
            if (f(this.from[i] + offset, this.to[i] + offset, this.value[i]) === false)
3154
            if (f(this.from[i] + offset, this.to[i] + offset, this.value[i]) === false)
3126
                return false;
3155
                return false;
3127
    }
3156
    }
3128
    map(offset, changes) {
3157
    map(offset, changes) {
3129
        let value = [], from = [], to = [], newPos = -1, maxPoint = -1;
3158
        let value = [], from = [], to = [], newPos = -1, maxPoint = -1;
Línea 3474... Línea 3503...
3474
    constructor() {
3503
    constructor() {
3475
        this.chunks = [];
3504
        this.chunks = [];
3476
        this.chunkPos = [];
3505
        this.chunkPos = [];
3477
        this.chunkStart = -1;
3506
        this.chunkStart = -1;
3478
        this.last = null;
3507
        this.last = null;
3479
        this.lastFrom = -1000000000 /* C.Far */;
3508
        this.lastFrom = -1e9 /* C.Far */;
3480
        this.lastTo = -1000000000 /* C.Far */;
3509
        this.lastTo = -1e9 /* C.Far */;
3481
        this.from = [];
3510
        this.from = [];
3482
        this.to = [];
3511
        this.to = [];
3483
        this.value = [];
3512
        this.value = [];
3484
        this.maxPoint = -1;
3513
        this.maxPoint = -1;
3485
        this.setMaxPoint = -1;
3514
        this.setMaxPoint = -1;
Línea 3574... Línea 3603...
3574
        this.minPoint = minPoint;
3603
        this.minPoint = minPoint;
3575
        this.rank = rank;
3604
        this.rank = rank;
3576
    }
3605
    }
3577
    get startSide() { return this.value ? this.value.startSide : 0; }
3606
    get startSide() { return this.value ? this.value.startSide : 0; }
3578
    get endSide() { return this.value ? this.value.endSide : 0; }
3607
    get endSide() { return this.value ? this.value.endSide : 0; }
3579
    goto(pos, side = -1000000000 /* C.Far */) {
3608
    goto(pos, side = -1e9 /* C.Far */) {
3580
        this.chunkIndex = this.rangeIndex = 0;
3609
        this.chunkIndex = this.rangeIndex = 0;
3581
        this.gotoInner(pos, side, false);
3610
        this.gotoInner(pos, side, false);
3582
        return this;
3611
        return this;
3583
    }
3612
    }
3584
    gotoInner(pos, side, forward) {
3613
    gotoInner(pos, side, forward) {
Línea 3657... Línea 3686...
3657
            }
3686
            }
3658
        }
3687
        }
3659
        return heap.length == 1 ? heap[0] : new HeapCursor(heap);
3688
        return heap.length == 1 ? heap[0] : new HeapCursor(heap);
3660
    }
3689
    }
3661
    get startSide() { return this.value ? this.value.startSide : 0; }
3690
    get startSide() { return this.value ? this.value.startSide : 0; }
3662
    goto(pos, side = -1000000000 /* C.Far */) {
3691
    goto(pos, side = -1e9 /* C.Far */) {
3663
        for (let cur of this.heap)
3692
        for (let cur of this.heap)
3664
            cur.goto(pos, side);
3693
            cur.goto(pos, side);
3665
        for (let i = this.heap.length >> 1; i >= 0; i--)
3694
        for (let i = this.heap.length >> 1; i >= 0; i--)
3666
            heapBubble(this.heap, i);
3695
            heapBubble(this.heap, i);
3667
        this.next();
3696
        this.next();
Línea 3719... Línea 3748...
3719
        this.minActive = -1;
3748
        this.minActive = -1;
3720
        // A currently active point range, if any
3749
        // A currently active point range, if any
3721
        this.point = null;
3750
        this.point = null;
3722
        this.pointFrom = 0;
3751
        this.pointFrom = 0;
3723
        this.pointRank = 0;
3752
        this.pointRank = 0;
3724
        this.to = -1000000000 /* C.Far */;
3753
        this.to = -1e9 /* C.Far */;
3725
        this.endSide = 0;
3754
        this.endSide = 0;
3726
        // The amount of open active ranges at the start of the iterator.
3755
        // The amount of open active ranges at the start of the iterator.
3727
        // Not including points.
3756
        // Not including points.
3728
        this.openStart = -1;
3757
        this.openStart = -1;
3729
        this.cursor = HeapCursor.from(sets, skip, minPoint);
3758
        this.cursor = HeapCursor.from(sets, skip, minPoint);
3730
    }
3759
    }
3731
    goto(pos, side = -1000000000 /* C.Far */) {
3760
    goto(pos, side = -1e9 /* C.Far */) {
3732
        this.cursor.goto(pos, side);
3761
        this.cursor.goto(pos, side);
3733
        this.active.length = this.activeTo.length = this.activeRank.length = 0;
3762
        this.active.length = this.activeTo.length = this.activeRank.length = 0;
3734
        this.minActive = -1;
3763
        this.minActive = -1;
3735
        this.to = pos;
3764
        this.to = pos;
3736
        this.endSide = side;
3765
        this.endSide = side;
Línea 3839... Línea 3868...
3839
    a.goto(startA);
3868
    a.goto(startA);
3840
    b.goto(startB);
3869
    b.goto(startB);
3841
    let endB = startB + length;
3870
    let endB = startB + length;
3842
    let pos = startB, dPos = startB - startA;
3871
    let pos = startB, dPos = startB - startA;
3843
    for (;;) {
3872
    for (;;) {
3844
        let diff = (a.to + dPos) - b.to || a.endSide - b.endSide;
3873
        let dEnd = (a.to + dPos) - b.to, diff = dEnd || a.endSide - b.endSide;
3845
        let end = diff < 0 ? a.to + dPos : b.to, clipEnd = Math.min(end, endB);
3874
        let end = diff < 0 ? a.to + dPos : b.to, clipEnd = Math.min(end, endB);
3846
        if (a.point || b.point) {
3875
        if (a.point || b.point) {
3847
            if (!(a.point && b.point && (a.point == b.point || a.point.eq(b.point)) &&
3876
            if (!(a.point && b.point && (a.point == b.point || a.point.eq(b.point)) &&
3848
                sameValues(a.activeForPoint(a.to), b.activeForPoint(b.to))))
3877
                sameValues(a.activeForPoint(a.to), b.activeForPoint(b.to))))
3849
                comparator.comparePoint(pos, clipEnd, a.point, b.point);
3878
                comparator.comparePoint(pos, clipEnd, a.point, b.point);
Línea 3852... Línea 3881...
3852
            if (clipEnd > pos && !sameValues(a.active, b.active))
3881
            if (clipEnd > pos && !sameValues(a.active, b.active))
3853
                comparator.compareRange(pos, clipEnd, a.active, b.active);
3882
                comparator.compareRange(pos, clipEnd, a.active, b.active);
3854
        }
3883
        }
3855
        if (end > endB)
3884
        if (end > endB)
3856
            break;
3885
            break;
-
 
3886
        if ((dEnd || a.openEnd != b.openEnd) && comparator.boundChange)
-
 
3887
            comparator.boundChange(end);
3857
        pos = end;
3888
        pos = end;
3858
        if (diff <= 0)
3889
        if (diff <= 0)
3859
            a.next();
3890
            a.next();
3860
        if (diff >= 0)
3891
        if (diff >= 0)
3861
            b.next();
3892
            b.next();
Línea 3893... Línea 3924...
3893
Count the column position at the given offset into the string,
3924
Count the column position at the given offset into the string,
3894
taking extending characters and tab size into account.
3925
taking extending characters and tab size into account.
3895
*/
3926
*/
3896
function countColumn(string, tabSize, to = string.length) {
3927
function countColumn(string, tabSize, to = string.length) {
3897
    let n = 0;
3928
    let n = 0;
3898
    for (let i = 0; i < to;) {
3929
    for (let i = 0; i < to && i < string.length;) {
3899
        if (string.charCodeAt(i) == 9) {
3930
        if (string.charCodeAt(i) == 9) {
3900
            n += tabSize - (n % tabSize);
3931
            n += tabSize - (n % tabSize);
3901
            i++;
3932
            i++;
3902
        }
3933
        }
3903
        else {
3934
        else {
Línea 4233... Línea 4264...
4233
    return target.getSelection();
4264
    return target.getSelection();
4234
}
4265
}
4235
function contains(dom, node) {
4266
function contains(dom, node) {
4236
    return node ? dom == node || dom.contains(node.nodeType != 1 ? node.parentNode : node) : false;
4267
    return node ? dom == node || dom.contains(node.nodeType != 1 ? node.parentNode : node) : false;
4237
}
4268
}
4238
function deepActiveElement(doc) {
-
 
4239
    let elt = doc.activeElement;
-
 
4240
    while (elt && elt.shadowRoot)
-
 
4241
        elt = elt.shadowRoot.activeElement;
-
 
4242
    return elt;
-
 
4243
}
-
 
4244
function hasSelection(dom, selection) {
4269
function hasSelection(dom, selection) {
4245
    if (!selection.anchorNode)
4270
    if (!selection.anchorNode)
4246
        return false;
4271
        return false;
4247
    try {
4272
    try {
4248
        // Firefox will raise 'permission denied' errors when accessing
4273
        // Firefox will raise 'permission denied' errors when accessing
Línea 4352... Línea 4377...
4352
                    top: rect.top, bottom: rect.top + cur.clientHeight * scaleY };
4377
                    top: rect.top, bottom: rect.top + cur.clientHeight * scaleY };
4353
            }
4378
            }
4354
            let moveX = 0, moveY = 0;
4379
            let moveX = 0, moveY = 0;
4355
            if (y == "nearest") {
4380
            if (y == "nearest") {
4356
                if (rect.top < bounding.top) {
4381
                if (rect.top < bounding.top) {
4357
                    moveY = -(bounding.top - rect.top + yMargin);
4382
                    moveY = rect.top - (bounding.top + yMargin);
4358
                    if (side > 0 && rect.bottom > bounding.bottom + moveY)
4383
                    if (side > 0 && rect.bottom > bounding.bottom + moveY)
4359
                        moveY = rect.bottom - bounding.bottom + moveY + yMargin;
4384
                        moveY = rect.bottom - bounding.bottom + yMargin;
4360
                }
4385
                }
4361
                else if (rect.bottom > bounding.bottom) {
4386
                else if (rect.bottom > bounding.bottom) {
4362
                    moveY = rect.bottom - bounding.bottom + yMargin;
4387
                    moveY = rect.bottom - bounding.bottom + yMargin;
4363
                    if (side < 0 && (rect.top - moveY) < bounding.top)
4388
                    if (side < 0 && (rect.top - moveY) < bounding.top)
4364
                        moveY = -(bounding.top + moveY - rect.top + yMargin);
4389
                        moveY = rect.top - (bounding.top + yMargin);
4365
                }
4390
                }
4366
            }
4391
            }
4367
            else {
4392
            else {
4368
                let rectHeight = rect.bottom - rect.top, boundingHeight = bounding.bottom - bounding.top;
4393
                let rectHeight = rect.bottom - rect.top, boundingHeight = bounding.bottom - bounding.top;
4369
                let targetTop = y == "center" && rectHeight <= boundingHeight ? rect.top + rectHeight / 2 - boundingHeight / 2 :
4394
                let targetTop = y == "center" && rectHeight <= boundingHeight ? rect.top + rectHeight / 2 - boundingHeight / 2 :
Línea 4371... Línea 4396...
4371
                        rect.bottom - boundingHeight + yMargin;
4396
                        rect.bottom - boundingHeight + yMargin;
4372
                moveY = targetTop - bounding.top;
4397
                moveY = targetTop - bounding.top;
4373
            }
4398
            }
4374
            if (x == "nearest") {
4399
            if (x == "nearest") {
4375
                if (rect.left < bounding.left) {
4400
                if (rect.left < bounding.left) {
4376
                    moveX = -(bounding.left - rect.left + xMargin);
4401
                    moveX = rect.left - (bounding.left + xMargin);
4377
                    if (side > 0 && rect.right > bounding.right + moveX)
4402
                    if (side > 0 && rect.right > bounding.right + moveX)
4378
                        moveX = rect.right - bounding.right + moveX + xMargin;
4403
                        moveX = rect.right - bounding.right + xMargin;
4379
                }
4404
                }
4380
                else if (rect.right > bounding.right) {
4405
                else if (rect.right > bounding.right) {
4381
                    moveX = rect.right - bounding.right + xMargin;
4406
                    moveX = rect.right - bounding.right + xMargin;
4382
                    if (side < 0 && rect.left < bounding.left + moveX)
4407
                    if (side < 0 && rect.left < bounding.left + moveX)
4383
                        moveX = -(bounding.left + moveX - rect.left + xMargin);
4408
                        moveX = rect.left - (bounding.left + xMargin);
4384
                }
4409
                }
4385
            }
4410
            }
4386
            else {
4411
            else {
4387
                let targetLeft = x == "center" ? rect.left + (rect.right - rect.left) / 2 - (bounding.right - bounding.left) / 2 :
4412
                let targetLeft = x == "center" ? rect.left + (rect.right - rect.left) / 2 - (bounding.right - bounding.left) / 2 :
4388
                    (x == "start") == ltr ? rect.left - xMargin :
4413
                    (x == "start") == ltr ? rect.left - xMargin :
Línea 4413... Línea 4438...
4413
                        y = "nearest";
4438
                        y = "nearest";
4414
                }
4439
                }
4415
            }
4440
            }
4416
            if (top)
4441
            if (top)
4417
                break;
4442
                break;
-
 
4443
            if (rect.top < bounding.top || rect.bottom > bounding.bottom ||
-
 
4444
                rect.left < bounding.left || rect.right > bounding.right)
-
 
4445
                rect = { left: Math.max(rect.left, bounding.left), right: Math.min(rect.right, bounding.right),
-
 
4446
                    top: Math.max(rect.top, bounding.top), bottom: Math.min(rect.bottom, bounding.bottom) };
4418
            cur = cur.assignedSlot || cur.parentNode;
4447
            cur = cur.assignedSlot || cur.parentNode;
4419
        }
4448
        }
4420
        else if (cur.nodeType == 11) { // A shadow root
4449
        else if (cur.nodeType == 11) { // A shadow root
4421
            cur = cur.host;
4450
            cur = cur.host;
4422
        }
4451
        }
4423
        else {
4452
        else {
4424
            break;
4453
            break;
4425
        }
4454
        }
4426
    }
4455
    }
4427
}
4456
}
4428
function scrollableParent(dom) {
4457
function scrollableParents(dom) {
4429
    let doc = dom.ownerDocument;
4458
    let doc = dom.ownerDocument, x, y;
4430
    for (let cur = dom.parentNode; cur;) {
4459
    for (let cur = dom.parentNode; cur;) {
4431
        if (cur == doc.body) {
4460
        if (cur == doc.body || (x && y)) {
4432
            break;
4461
            break;
4433
        }
4462
        }
4434
        else if (cur.nodeType == 1) {
4463
        else if (cur.nodeType == 1) {
-
 
4464
            if (!y && cur.scrollHeight > cur.clientHeight)
-
 
4465
                y = cur;
4435
            if (cur.scrollHeight > cur.clientHeight || cur.scrollWidth > cur.clientWidth)
4466
            if (!x && cur.scrollWidth > cur.clientWidth)
4436
                return cur;
4467
                x = cur;
4437
            cur = cur.assignedSlot || cur.parentNode;
4468
            cur = cur.assignedSlot || cur.parentNode;
4438
        }
4469
        }
4439
        else if (cur.nodeType == 11) {
4470
        else if (cur.nodeType == 11) {
4440
            cur = cur.host;
4471
            cur = cur.host;
4441
        }
4472
        }
4442
        else {
4473
        else {
4443
            break;
4474
            break;
4444
        }
4475
        }
4445
    }
4476
    }
4446
    return null;
4477
    return { x, y };
4447
}
4478
}
4448
class DOMSelectionState {
4479
class DOMSelectionState {
4449
    constructor() {
4480
    constructor() {
4450
        this.anchorNode = null;
4481
        this.anchorNode = null;
4451
        this.anchorOffset = 0;
4482
        this.anchorOffset = 0;
Línea 4646... Línea 4677...
4646
                        let contentView = ContentView.get(next);
4677
                        let contentView = ContentView.get(next);
4647
                        if (!contentView || !contentView.parent && contentView.canReuseDOM(child))
4678
                        if (!contentView || !contentView.parent && contentView.canReuseDOM(child))
4648
                            child.reuseDOM(next);
4679
                            child.reuseDOM(next);
4649
                    }
4680
                    }
4650
                    child.sync(view, track);
4681
                    child.sync(view, track);
4651
                    child.flags &= ~7 /* ViewFlag.Dirty */;
4682
                    child.flags &= -8 /* ViewFlag.Dirty */;
4652
                }
4683
                }
4653
                next = prev ? prev.nextSibling : parent.firstChild;
4684
                next = prev ? prev.nextSibling : parent.firstChild;
4654
                if (track && !track.written && track.node == parent && next != child.dom)
4685
                if (track && !track.written && track.node == parent && next != child.dom)
4655
                    track.written = true;
4686
                    track.written = true;
4656
                if (child.dom.parentNode == parent) {
4687
                if (child.dom.parentNode == parent) {
Línea 4670... Línea 4701...
4670
        }
4701
        }
4671
        else if (this.flags & 1 /* ViewFlag.ChildDirty */) {
4702
        else if (this.flags & 1 /* ViewFlag.ChildDirty */) {
4672
            for (let child of this.children)
4703
            for (let child of this.children)
4673
                if (child.flags & 7 /* ViewFlag.Dirty */) {
4704
                if (child.flags & 7 /* ViewFlag.Dirty */) {
4674
                    child.sync(view, track);
4705
                    child.sync(view, track);
4675
                    child.flags &= ~7 /* ViewFlag.Dirty */;
4706
                    child.flags &= -8 /* ViewFlag.Dirty */;
4676
                }
4707
                }
4677
        }
4708
        }
4678
    }
4709
    }
4679
    reuseDOM(_dom) { }
4710
    reuseDOM(_dom) { }
4680
    localPosFromDOM(node, offset) {
4711
    localPosFromDOM(node, offset) {
Línea 4778... Línea 4809...
4778
        for (let i = from; i < to; i++) {
4809
        for (let i = from; i < to; i++) {
4779
            let child = this.children[i];
4810
            let child = this.children[i];
4780
            if (child.parent == this && children.indexOf(child) < 0)
4811
            if (child.parent == this && children.indexOf(child) < 0)
4781
                child.destroy();
4812
                child.destroy();
4782
        }
4813
        }
-
 
4814
        if (children.length < 250)
4783
        this.children.splice(from, to - from, ...children);
4815
            this.children.splice(from, to - from, ...children);
-
 
4816
        else
-
 
4817
            this.children = [].concat(this.children.slice(0, from), children, this.children.slice(to));
4784
        for (let i = 0; i < children.length; i++)
4818
        for (let i = 0; i < children.length; i++)
4785
            children[i].setParent(this);
4819
            children[i].setParent(this);
4786
    }
4820
    }
4787
    ignoreMutation(_rec) { return false; }
4821
    ignoreMutation(_rec) { return false; }
4788
    ignoreEvent(_event) { return false; }
4822
    ignoreEvent(_event) { return false; }
Línea 4958... Línea 4992...
4958
    chrome_version: chrome ? +chrome[1] : 0,
4992
    chrome_version: chrome ? +chrome[1] : 0,
4959
    ios,
4993
    ios,
4960
    android: /*@__PURE__*//Android\b/.test(nav.userAgent),
4994
    android: /*@__PURE__*//Android\b/.test(nav.userAgent),
4961
    webkit,
4995
    webkit,
4962
    safari,
4996
    safari,
4963
    webkit_version: webkit ? +(/*@__PURE__*//\bAppleWebKit\/(\d+)/.exec(navigator.userAgent) || [0, 0])[1] : 0,
4997
    webkit_version: webkit ? +(/*@__PURE__*//\bAppleWebKit\/(\d+)/.exec(nav.userAgent) || [0, 0])[1] : 0,
4964
    tabSize: doc.documentElement.style.tabSize != null ? "tab-size" : "-moz-tab-size"
4998
    tabSize: doc.documentElement.style.tabSize != null ? "tab-size" : "-moz-tab-size"
4965
};
4999
};
Línea 4966... Línea 5000...
4966
 
5000
 
4967
const MaxJoinLen = 256;
5001
const MaxJoinLen = 256;
Línea 5320... Línea 5354...
5320
        else
5354
        else
5321
            target[name] = source[name];
5355
            target[name] = source[name];
5322
    }
5356
    }
5323
    return target;
5357
    return target;
5324
}
5358
}
5325
const noAttrs = /*@__PURE__*/Object.create(null);
5359
const noAttrs$1 = /*@__PURE__*/Object.create(null);
5326
function attrsEq(a, b, ignore) {
5360
function attrsEq(a, b, ignore) {
5327
    if (a == b)
5361
    if (a == b)
5328
        return true;
5362
        return true;
5329
    if (!a)
5363
    if (!a)
5330
        a = noAttrs;
5364
        a = noAttrs$1;
5331
    if (!b)
5365
    if (!b)
5332
        b = noAttrs;
5366
        b = noAttrs$1;
5333
    let keysA = Object.keys(a), keysB = Object.keys(b);
5367
    let keysA = Object.keys(a), keysB = Object.keys(b);
5334
    if (keysA.length - (ignore && keysA.indexOf(ignore) > -1 ? 1 : 0) !=
5368
    if (keysA.length - (ignore && keysA.indexOf(ignore) > -1 ? 1 : 0) !=
5335
        keysB.length - (ignore && keysB.indexOf(ignore) > -1 ? 1 : 0))
5369
        keysB.length - (ignore && keysB.indexOf(ignore) > -1 ? 1 : 0))
5336
        return false;
5370
        return false;
5337
    for (let key of keysA) {
5371
    for (let key of keysA) {
Línea 5369... Línea 5403...
5369
        attrs[attr.name] = attr.value;
5403
        attrs[attr.name] = attr.value;
5370
    }
5404
    }
5371
    return attrs;
5405
    return attrs;
5372
}
5406
}
Línea 5373... Línea -...
5373
 
-
 
5374
class LineView extends ContentView {
-
 
5375
    constructor() {
-
 
5376
        super(...arguments);
-
 
5377
        this.children = [];
-
 
5378
        this.length = 0;
-
 
5379
        this.prevAttrs = undefined;
-
 
5380
        this.attrs = null;
-
 
5381
        this.breakAfter = 0;
-
 
5382
    }
-
 
5383
    // Consumes source
-
 
5384
    merge(from, to, source, hasStart, openStart, openEnd) {
-
 
5385
        if (source) {
-
 
5386
            if (!(source instanceof LineView))
-
 
5387
                return false;
-
 
5388
            if (!this.dom)
-
 
5389
                source.transferDOM(this); // Reuse source.dom when appropriate
-
 
5390
        }
-
 
5391
        if (hasStart)
-
 
5392
            this.setDeco(source ? source.attrs : null);
-
 
5393
        mergeChildrenInto(this, from, to, source ? source.children.slice() : [], openStart, openEnd);
-
 
5394
        return true;
-
 
5395
    }
-
 
5396
    split(at) {
-
 
5397
        let end = new LineView;
-
 
5398
        end.breakAfter = this.breakAfter;
-
 
5399
        if (this.length == 0)
-
 
5400
            return end;
-
 
5401
        let { i, off } = this.childPos(at);
-
 
5402
        if (off) {
-
 
5403
            end.append(this.children[i].split(off), 0);
-
 
5404
            this.children[i].merge(off, this.children[i].length, null, false, 0, 0);
-
 
5405
            i++;
-
 
5406
        }
-
 
5407
        for (let j = i; j < this.children.length; j++)
-
 
5408
            end.append(this.children[j], 0);
-
 
5409
        while (i > 0 && this.children[i - 1].length == 0)
-
 
5410
            this.children[--i].destroy();
-
 
5411
        this.children.length = i;
-
 
5412
        this.markDirty();
-
 
5413
        this.length = at;
-
 
5414
        return end;
-
 
5415
    }
-
 
5416
    transferDOM(other) {
-
 
5417
        if (!this.dom)
-
 
5418
            return;
-
 
5419
        this.markDirty();
-
 
5420
        other.setDOM(this.dom);
-
 
5421
        other.prevAttrs = this.prevAttrs === undefined ? this.attrs : this.prevAttrs;
-
 
5422
        this.prevAttrs = undefined;
-
 
5423
        this.dom = null;
-
 
5424
    }
-
 
5425
    setDeco(attrs) {
-
 
5426
        if (!attrsEq(this.attrs, attrs)) {
-
 
5427
            if (this.dom) {
-
 
5428
                this.prevAttrs = this.attrs;
-
 
5429
                this.markDirty();
-
 
5430
            }
-
 
5431
            this.attrs = attrs;
-
 
5432
        }
-
 
5433
    }
-
 
5434
    append(child, openStart) {
-
 
5435
        joinInlineInto(this, child, openStart);
-
 
5436
    }
-
 
5437
    // Only called when building a line view in ContentBuilder
-
 
5438
    addLineDeco(deco) {
-
 
5439
        let attrs = deco.spec.attributes, cls = deco.spec.class;
-
 
5440
        if (attrs)
-
 
5441
            this.attrs = combineAttrs(attrs, this.attrs || {});
-
 
5442
        if (cls)
-
 
5443
            this.attrs = combineAttrs({ class: cls }, this.attrs || {});
-
 
5444
    }
-
 
5445
    domAtPos(pos) {
-
 
5446
        return inlineDOMAtPos(this, pos);
-
 
5447
    }
-
 
5448
    reuseDOM(node) {
-
 
5449
        if (node.nodeName == "DIV") {
-
 
5450
            this.setDOM(node);
-
 
5451
            this.flags |= 4 /* ViewFlag.AttrsDirty */ | 2 /* ViewFlag.NodeDirty */;
-
 
5452
        }
-
 
5453
    }
-
 
5454
    sync(view, track) {
-
 
5455
        var _a;
-
 
5456
        if (!this.dom) {
-
 
5457
            this.setDOM(document.createElement("div"));
-
 
5458
            this.dom.className = "cm-line";
-
 
5459
            this.prevAttrs = this.attrs ? null : undefined;
-
 
5460
        }
-
 
5461
        else if (this.flags & 4 /* ViewFlag.AttrsDirty */) {
-
 
5462
            clearAttributes(this.dom);
-
 
5463
            this.dom.className = "cm-line";
-
 
5464
            this.prevAttrs = this.attrs ? null : undefined;
-
 
5465
        }
-
 
5466
        if (this.prevAttrs !== undefined) {
-
 
5467
            updateAttrs(this.dom, this.prevAttrs, this.attrs);
-
 
5468
            this.dom.classList.add("cm-line");
-
 
5469
            this.prevAttrs = undefined;
-
 
5470
        }
-
 
5471
        super.sync(view, track);
-
 
5472
        let last = this.dom.lastChild;
-
 
5473
        while (last && ContentView.get(last) instanceof MarkView)
-
 
5474
            last = last.lastChild;
-
 
5475
        if (!last || !this.length ||
-
 
5476
            last.nodeName != "BR" && ((_a = ContentView.get(last)) === null || _a === void 0 ? void 0 : _a.isEditable) == false &&
-
 
5477
                (!browser.ios || !this.children.some(ch => ch instanceof TextView))) {
-
 
5478
            let hack = document.createElement("BR");
-
 
5479
            hack.cmIgnore = true;
-
 
5480
            this.dom.appendChild(hack);
-
 
5481
        }
-
 
5482
    }
-
 
5483
    measureTextSize() {
-
 
5484
        if (this.children.length == 0 || this.length > 20)
-
 
5485
            return null;
-
 
5486
        let totalWidth = 0, textHeight;
-
 
5487
        for (let child of this.children) {
-
 
5488
            if (!(child instanceof TextView) || /[^ -~]/.test(child.text))
-
 
5489
                return null;
-
 
5490
            let rects = clientRectsFor(child.dom);
-
 
5491
            if (rects.length != 1)
-
 
5492
                return null;
-
 
5493
            totalWidth += rects[0].width;
-
 
5494
            textHeight = rects[0].height;
-
 
5495
        }
-
 
5496
        return !totalWidth ? null : {
-
 
5497
            lineHeight: this.dom.getBoundingClientRect().height,
-
 
5498
            charWidth: totalWidth / this.length,
-
 
5499
            textHeight
-
 
5500
        };
-
 
5501
    }
-
 
5502
    coordsAt(pos, side) {
-
 
5503
        let rect = coordsInChildren(this, pos, side);
-
 
5504
        // Correct rectangle height for empty lines when the returned
-
 
5505
        // height is larger than the text height.
-
 
5506
        if (!this.children.length && rect && this.parent) {
-
 
5507
            let { heightOracle } = this.parent.view.viewState, height = rect.bottom - rect.top;
-
 
5508
            if (Math.abs(height - heightOracle.lineHeight) < 2 && heightOracle.textHeight < height) {
-
 
5509
                let dist = (height - heightOracle.textHeight) / 2;
-
 
5510
                return { top: rect.top + dist, bottom: rect.bottom - dist, left: rect.left, right: rect.left };
-
 
5511
            }
-
 
5512
        }
-
 
5513
        return rect;
-
 
5514
    }
-
 
5515
    become(_other) { return false; }
-
 
5516
    covers() { return true; }
-
 
5517
    static find(docView, pos) {
-
 
5518
        for (let i = 0, off = 0; i < docView.children.length; i++) {
-
 
5519
            let block = docView.children[i], end = off + block.length;
-
 
5520
            if (end >= pos) {
-
 
5521
                if (block instanceof LineView)
-
 
5522
                    return block;
-
 
5523
                if (end > pos)
-
 
5524
                    break;
-
 
5525
            }
-
 
5526
            off = end + block.breakAfter;
-
 
5527
        }
-
 
5528
        return null;
-
 
5529
    }
-
 
5530
}
-
 
5531
class BlockWidgetView extends ContentView {
-
 
5532
    constructor(widget, length, deco) {
-
 
5533
        super();
-
 
5534
        this.widget = widget;
-
 
5535
        this.length = length;
-
 
5536
        this.deco = deco;
-
 
5537
        this.breakAfter = 0;
-
 
5538
        this.prevWidget = null;
-
 
5539
    }
-
 
5540
    merge(from, to, source, _takeDeco, openStart, openEnd) {
-
 
5541
        if (source && (!(source instanceof BlockWidgetView) || !this.widget.compare(source.widget) ||
-
 
5542
            from > 0 && openStart <= 0 || to < this.length && openEnd <= 0))
-
 
5543
            return false;
-
 
5544
        this.length = from + (source ? source.length : 0) + (this.length - to);
-
 
5545
        return true;
-
 
5546
    }
-
 
5547
    domAtPos(pos) {
-
 
5548
        return pos == 0 ? DOMPos.before(this.dom) : DOMPos.after(this.dom, pos == this.length);
-
 
5549
    }
-
 
5550
    split(at) {
-
 
5551
        let len = this.length - at;
-
 
5552
        this.length = at;
-
 
5553
        let end = new BlockWidgetView(this.widget, len, this.deco);
-
 
5554
        end.breakAfter = this.breakAfter;
-
 
5555
        return end;
-
 
5556
    }
-
 
5557
    get children() { return noChildren; }
-
 
5558
    sync(view) {
-
 
5559
        if (!this.dom || !this.widget.updateDOM(this.dom, view)) {
-
 
5560
            if (this.dom && this.prevWidget)
-
 
5561
                this.prevWidget.destroy(this.dom);
-
 
5562
            this.prevWidget = null;
-
 
5563
            this.setDOM(this.widget.toDOM(view));
-
 
5564
            if (!this.widget.editable)
-
 
5565
                this.dom.contentEditable = "false";
-
 
5566
        }
-
 
5567
    }
-
 
5568
    get overrideDOMText() {
-
 
5569
        return this.parent ? this.parent.view.state.doc.slice(this.posAtStart, this.posAtEnd) : Text.empty;
-
 
5570
    }
-
 
5571
    domBoundsAround() { return null; }
-
 
5572
    become(other) {
-
 
5573
        if (other instanceof BlockWidgetView &&
-
 
5574
            other.widget.constructor == this.widget.constructor) {
-
 
5575
            if (!other.widget.compare(this.widget))
-
 
5576
                this.markDirty(true);
-
 
5577
            if (this.dom && !this.prevWidget)
-
 
5578
                this.prevWidget = this.widget;
-
 
5579
            this.widget = other.widget;
-
 
5580
            this.length = other.length;
-
 
5581
            this.deco = other.deco;
-
 
5582
            this.breakAfter = other.breakAfter;
-
 
5583
            return true;
-
 
5584
        }
-
 
5585
        return false;
-
 
5586
    }
-
 
5587
    ignoreMutation() { return true; }
-
 
5588
    ignoreEvent(event) { return this.widget.ignoreEvent(event); }
-
 
5589
    get isEditable() { return false; }
-
 
5590
    get isWidget() { return true; }
-
 
5591
    coordsAt(pos, side) {
-
 
5592
        return this.widget.coordsAt(this.dom, pos, side);
-
 
5593
    }
-
 
5594
    destroy() {
-
 
5595
        super.destroy();
-
 
5596
        if (this.dom)
-
 
5597
            this.widget.destroy(this.dom);
-
 
5598
    }
-
 
5599
    covers(side) {
-
 
5600
        let { startSide, endSide } = this.deco;
-
 
5601
        return startSide == endSide ? false : side < 0 ? startSide < 0 : endSide > 0;
-
 
5602
    }
-
 
5603
}
-
 
5604
 
5407
 
5605
/**
5408
/**
5606
Widgets added to the content are described by subclasses of this
5409
Widgets added to the content are described by subclasses of this
5607
class. Using a description object like that makes it possible to
5410
class. Using a description object like that makes it possible to
5608
delay creating of the DOM structure for a widget until it is
5411
delay creating of the DOM structure for a widget until it is
Línea 5748... Línea 5551...
5748
    /**
5551
    /**
5749
    Create a widget decoration, which displays a DOM element at the
5552
    Create a widget decoration, which displays a DOM element at the
5750
    given position.
5553
    given position.
5751
    */
5554
    */
5752
    static widget(spec) {
5555
    static widget(spec) {
5753
        let side = Math.max(-10000, Math.min(10000, spec.side || 0)), block = !!spec.block;
5556
        let side = Math.max(-1e4, Math.min(10000, spec.side || 0)), block = !!spec.block;
5754
        side += (block && !spec.inlineOrder)
5557
        side += (block && !spec.inlineOrder)
5755
            ? (side > 0 ? 300000000 /* Side.BlockAfter */ : -400000000 /* Side.BlockBefore */)
5558
            ? (side > 0 ? 300000000 /* Side.BlockAfter */ : -4e8 /* Side.BlockBefore */)
5756
            : (side > 0 ? 100000000 /* Side.InlineAfter */ : -100000000 /* Side.InlineBefore */);
5559
            : (side > 0 ? 100000000 /* Side.InlineAfter */ : -1e8 /* Side.InlineBefore */);
5757
        return new PointDecoration(spec, side, side, block, spec.widget || null, false);
5560
        return new PointDecoration(spec, side, side, block, spec.widget || null, false);
5758
    }
5561
    }
5759
    /**
5562
    /**
5760
    Create a replace decoration which replaces the given range with
5563
    Create a replace decoration which replaces the given range with
5761
    a widget, or simply hides it.
5564
    a widget, or simply hides it.
5762
    */
5565
    */
5763
    static replace(spec) {
5566
    static replace(spec) {
5764
        let block = !!spec.block, startSide, endSide;
5567
        let block = !!spec.block, startSide, endSide;
5765
        if (spec.isBlockGap) {
5568
        if (spec.isBlockGap) {
5766
            startSide = -500000000 /* Side.GapStart */;
5569
            startSide = -5e8 /* Side.GapStart */;
5767
            endSide = 400000000 /* Side.GapEnd */;
5570
            endSide = 400000000 /* Side.GapEnd */;
5768
        }
5571
        }
5769
        else {
5572
        else {
5770
            let { start, end } = getInclusive(spec, block);
5573
            let { start, end } = getInclusive(spec, block);
5771
            startSide = (start ? (block ? -300000000 /* Side.BlockIncStart */ : -1 /* Side.InlineIncStart */) : 500000000 /* Side.NonIncStart */) - 1;
5574
            startSide = (start ? (block ? -3e8 /* Side.BlockIncStart */ : -1 /* Side.InlineIncStart */) : 500000000 /* Side.NonIncStart */) - 1;
5772
            endSide = (end ? (block ? 200000000 /* Side.BlockIncEnd */ : 1 /* Side.InlineIncEnd */) : -600000000 /* Side.NonIncEnd */) + 1;
5575
            endSide = (end ? (block ? 200000000 /* Side.BlockIncEnd */ : 1 /* Side.InlineIncEnd */) : -6e8 /* Side.NonIncEnd */) + 1;
5773
        }
5576
        }
5774
        return new PointDecoration(spec, startSide, endSide, block, spec.widget || null, true);
5577
        return new PointDecoration(spec, startSide, endSide, block, spec.widget || null, true);
5775
    }
5578
    }
5776
    /**
5579
    /**
5777
    Create a line decoration, which can add DOM attributes to the
5580
    Create a line decoration, which can add DOM attributes to the
Línea 5798... Línea 5601...
5798
*/
5601
*/
5799
Decoration.none = RangeSet.empty;
5602
Decoration.none = RangeSet.empty;
5800
class MarkDecoration extends Decoration {
5603
class MarkDecoration extends Decoration {
5801
    constructor(spec) {
5604
    constructor(spec) {
5802
        let { start, end } = getInclusive(spec);
5605
        let { start, end } = getInclusive(spec);
5803
        super(start ? -1 /* Side.InlineIncStart */ : 500000000 /* Side.NonIncStart */, end ? 1 /* Side.InlineIncEnd */ : -600000000 /* Side.NonIncEnd */, null, spec);
5606
        super(start ? -1 /* Side.InlineIncStart */ : 500000000 /* Side.NonIncStart */, end ? 1 /* Side.InlineIncEnd */ : -6e8 /* Side.NonIncEnd */, null, spec);
5804
        this.tagName = spec.tagName || "span";
5607
        this.tagName = spec.tagName || "span";
5805
        this.class = spec.class || "";
5608
        this.class = spec.class || "";
5806
        this.attrs = spec.attributes || null;
5609
        this.attrs = spec.attributes || null;
5807
    }
5610
    }
5808
    eq(other) {
5611
    eq(other) {
Línea 5820... Línea 5623...
5820
    }
5623
    }
5821
}
5624
}
5822
MarkDecoration.prototype.point = false;
5625
MarkDecoration.prototype.point = false;
5823
class LineDecoration extends Decoration {
5626
class LineDecoration extends Decoration {
5824
    constructor(spec) {
5627
    constructor(spec) {
5825
        super(-200000000 /* Side.Line */, -200000000 /* Side.Line */, null, spec);
5628
        super(-2e8 /* Side.Line */, -2e8 /* Side.Line */, null, spec);
5826
    }
5629
    }
5827
    eq(other) {
5630
    eq(other) {
5828
        return other instanceof LineDecoration &&
5631
        return other instanceof LineDecoration &&
5829
            this.spec.class == other.spec.class &&
5632
            this.spec.class == other.spec.class &&
5830
            attrsEq(this.spec.attributes, other.spec.attributes);
5633
            attrsEq(this.spec.attributes, other.spec.attributes);
Línea 5884... Línea 5687...
5884
        ranges[last] = Math.max(ranges[last], to);
5687
        ranges[last] = Math.max(ranges[last], to);
5885
    else
5688
    else
5886
        ranges.push(from, to);
5689
        ranges.push(from, to);
5887
}
5690
}
Línea -... Línea 5691...
-
 
5691
 
-
 
5692
class LineView extends ContentView {
-
 
5693
    constructor() {
-
 
5694
        super(...arguments);
-
 
5695
        this.children = [];
-
 
5696
        this.length = 0;
-
 
5697
        this.prevAttrs = undefined;
-
 
5698
        this.attrs = null;
-
 
5699
        this.breakAfter = 0;
-
 
5700
    }
-
 
5701
    // Consumes source
-
 
5702
    merge(from, to, source, hasStart, openStart, openEnd) {
-
 
5703
        if (source) {
-
 
5704
            if (!(source instanceof LineView))
-
 
5705
                return false;
-
 
5706
            if (!this.dom)
-
 
5707
                source.transferDOM(this); // Reuse source.dom when appropriate
-
 
5708
        }
-
 
5709
        if (hasStart)
-
 
5710
            this.setDeco(source ? source.attrs : null);
-
 
5711
        mergeChildrenInto(this, from, to, source ? source.children.slice() : [], openStart, openEnd);
-
 
5712
        return true;
-
 
5713
    }
-
 
5714
    split(at) {
-
 
5715
        let end = new LineView;
-
 
5716
        end.breakAfter = this.breakAfter;
-
 
5717
        if (this.length == 0)
-
 
5718
            return end;
-
 
5719
        let { i, off } = this.childPos(at);
-
 
5720
        if (off) {
-
 
5721
            end.append(this.children[i].split(off), 0);
-
 
5722
            this.children[i].merge(off, this.children[i].length, null, false, 0, 0);
-
 
5723
            i++;
-
 
5724
        }
-
 
5725
        for (let j = i; j < this.children.length; j++)
-
 
5726
            end.append(this.children[j], 0);
-
 
5727
        while (i > 0 && this.children[i - 1].length == 0)
-
 
5728
            this.children[--i].destroy();
-
 
5729
        this.children.length = i;
-
 
5730
        this.markDirty();
-
 
5731
        this.length = at;
-
 
5732
        return end;
-
 
5733
    }
-
 
5734
    transferDOM(other) {
-
 
5735
        if (!this.dom)
-
 
5736
            return;
-
 
5737
        this.markDirty();
-
 
5738
        other.setDOM(this.dom);
-
 
5739
        other.prevAttrs = this.prevAttrs === undefined ? this.attrs : this.prevAttrs;
-
 
5740
        this.prevAttrs = undefined;
-
 
5741
        this.dom = null;
-
 
5742
    }
-
 
5743
    setDeco(attrs) {
-
 
5744
        if (!attrsEq(this.attrs, attrs)) {
-
 
5745
            if (this.dom) {
-
 
5746
                this.prevAttrs = this.attrs;
-
 
5747
                this.markDirty();
-
 
5748
            }
-
 
5749
            this.attrs = attrs;
-
 
5750
        }
-
 
5751
    }
-
 
5752
    append(child, openStart) {
-
 
5753
        joinInlineInto(this, child, openStart);
-
 
5754
    }
-
 
5755
    // Only called when building a line view in ContentBuilder
-
 
5756
    addLineDeco(deco) {
-
 
5757
        let attrs = deco.spec.attributes, cls = deco.spec.class;
-
 
5758
        if (attrs)
-
 
5759
            this.attrs = combineAttrs(attrs, this.attrs || {});
-
 
5760
        if (cls)
-
 
5761
            this.attrs = combineAttrs({ class: cls }, this.attrs || {});
-
 
5762
    }
-
 
5763
    domAtPos(pos) {
-
 
5764
        return inlineDOMAtPos(this, pos);
-
 
5765
    }
-
 
5766
    reuseDOM(node) {
-
 
5767
        if (node.nodeName == "DIV") {
-
 
5768
            this.setDOM(node);
-
 
5769
            this.flags |= 4 /* ViewFlag.AttrsDirty */ | 2 /* ViewFlag.NodeDirty */;
-
 
5770
        }
-
 
5771
    }
-
 
5772
    sync(view, track) {
-
 
5773
        var _a;
-
 
5774
        if (!this.dom) {
-
 
5775
            this.setDOM(document.createElement("div"));
-
 
5776
            this.dom.className = "cm-line";
-
 
5777
            this.prevAttrs = this.attrs ? null : undefined;
-
 
5778
        }
-
 
5779
        else if (this.flags & 4 /* ViewFlag.AttrsDirty */) {
-
 
5780
            clearAttributes(this.dom);
-
 
5781
            this.dom.className = "cm-line";
-
 
5782
            this.prevAttrs = this.attrs ? null : undefined;
-
 
5783
        }
-
 
5784
        if (this.prevAttrs !== undefined) {
-
 
5785
            updateAttrs(this.dom, this.prevAttrs, this.attrs);
-
 
5786
            this.dom.classList.add("cm-line");
-
 
5787
            this.prevAttrs = undefined;
-
 
5788
        }
-
 
5789
        super.sync(view, track);
-
 
5790
        let last = this.dom.lastChild;
-
 
5791
        while (last && ContentView.get(last) instanceof MarkView)
-
 
5792
            last = last.lastChild;
-
 
5793
        if (!last || !this.length ||
-
 
5794
            last.nodeName != "BR" && ((_a = ContentView.get(last)) === null || _a === void 0 ? void 0 : _a.isEditable) == false &&
-
 
5795
                (!browser.ios || !this.children.some(ch => ch instanceof TextView))) {
-
 
5796
            let hack = document.createElement("BR");
-
 
5797
            hack.cmIgnore = true;
-
 
5798
            this.dom.appendChild(hack);
-
 
5799
        }
-
 
5800
    }
-
 
5801
    measureTextSize() {
-
 
5802
        if (this.children.length == 0 || this.length > 20)
-
 
5803
            return null;
-
 
5804
        let totalWidth = 0, textHeight;
-
 
5805
        for (let child of this.children) {
-
 
5806
            if (!(child instanceof TextView) || /[^ -~]/.test(child.text))
-
 
5807
                return null;
-
 
5808
            let rects = clientRectsFor(child.dom);
-
 
5809
            if (rects.length != 1)
-
 
5810
                return null;
-
 
5811
            totalWidth += rects[0].width;
-
 
5812
            textHeight = rects[0].height;
-
 
5813
        }
-
 
5814
        return !totalWidth ? null : {
-
 
5815
            lineHeight: this.dom.getBoundingClientRect().height,
-
 
5816
            charWidth: totalWidth / this.length,
-
 
5817
            textHeight
-
 
5818
        };
-
 
5819
    }
-
 
5820
    coordsAt(pos, side) {
-
 
5821
        let rect = coordsInChildren(this, pos, side);
-
 
5822
        // Correct rectangle height for empty lines when the returned
-
 
5823
        // height is larger than the text height.
-
 
5824
        if (!this.children.length && rect && this.parent) {
-
 
5825
            let { heightOracle } = this.parent.view.viewState, height = rect.bottom - rect.top;
-
 
5826
            if (Math.abs(height - heightOracle.lineHeight) < 2 && heightOracle.textHeight < height) {
-
 
5827
                let dist = (height - heightOracle.textHeight) / 2;
-
 
5828
                return { top: rect.top + dist, bottom: rect.bottom - dist, left: rect.left, right: rect.left };
-
 
5829
            }
-
 
5830
        }
-
 
5831
        return rect;
-
 
5832
    }
-
 
5833
    become(other) {
-
 
5834
        return other instanceof LineView && this.children.length == 0 && other.children.length == 0 &&
-
 
5835
            attrsEq(this.attrs, other.attrs) && this.breakAfter == other.breakAfter;
-
 
5836
    }
-
 
5837
    covers() { return true; }
-
 
5838
    static find(docView, pos) {
-
 
5839
        for (let i = 0, off = 0; i < docView.children.length; i++) {
-
 
5840
            let block = docView.children[i], end = off + block.length;
-
 
5841
            if (end >= pos) {
-
 
5842
                if (block instanceof LineView)
-
 
5843
                    return block;
-
 
5844
                if (end > pos)
-
 
5845
                    break;
-
 
5846
            }
-
 
5847
            off = end + block.breakAfter;
-
 
5848
        }
-
 
5849
        return null;
-
 
5850
    }
-
 
5851
}
-
 
5852
class BlockWidgetView extends ContentView {
-
 
5853
    constructor(widget, length, deco) {
-
 
5854
        super();
-
 
5855
        this.widget = widget;
-
 
5856
        this.length = length;
-
 
5857
        this.deco = deco;
-
 
5858
        this.breakAfter = 0;
-
 
5859
        this.prevWidget = null;
-
 
5860
    }
-
 
5861
    merge(from, to, source, _takeDeco, openStart, openEnd) {
-
 
5862
        if (source && (!(source instanceof BlockWidgetView) || !this.widget.compare(source.widget) ||
-
 
5863
            from > 0 && openStart <= 0 || to < this.length && openEnd <= 0))
-
 
5864
            return false;
-
 
5865
        this.length = from + (source ? source.length : 0) + (this.length - to);
-
 
5866
        return true;
-
 
5867
    }
-
 
5868
    domAtPos(pos) {
-
 
5869
        return pos == 0 ? DOMPos.before(this.dom) : DOMPos.after(this.dom, pos == this.length);
-
 
5870
    }
-
 
5871
    split(at) {
-
 
5872
        let len = this.length - at;
-
 
5873
        this.length = at;
-
 
5874
        let end = new BlockWidgetView(this.widget, len, this.deco);
-
 
5875
        end.breakAfter = this.breakAfter;
-
 
5876
        return end;
-
 
5877
    }
-
 
5878
    get children() { return noChildren; }
-
 
5879
    sync(view) {
-
 
5880
        if (!this.dom || !this.widget.updateDOM(this.dom, view)) {
-
 
5881
            if (this.dom && this.prevWidget)
-
 
5882
                this.prevWidget.destroy(this.dom);
-
 
5883
            this.prevWidget = null;
-
 
5884
            this.setDOM(this.widget.toDOM(view));
-
 
5885
            if (!this.widget.editable)
-
 
5886
                this.dom.contentEditable = "false";
-
 
5887
        }
-
 
5888
    }
-
 
5889
    get overrideDOMText() {
-
 
5890
        return this.parent ? this.parent.view.state.doc.slice(this.posAtStart, this.posAtEnd) : Text.empty;
-
 
5891
    }
-
 
5892
    domBoundsAround() { return null; }
-
 
5893
    become(other) {
-
 
5894
        if (other instanceof BlockWidgetView &&
-
 
5895
            other.widget.constructor == this.widget.constructor) {
-
 
5896
            if (!other.widget.compare(this.widget))
-
 
5897
                this.markDirty(true);
-
 
5898
            if (this.dom && !this.prevWidget)
-
 
5899
                this.prevWidget = this.widget;
-
 
5900
            this.widget = other.widget;
-
 
5901
            this.length = other.length;
-
 
5902
            this.deco = other.deco;
-
 
5903
            this.breakAfter = other.breakAfter;
-
 
5904
            return true;
-
 
5905
        }
-
 
5906
        return false;
-
 
5907
    }
-
 
5908
    ignoreMutation() { return true; }
-
 
5909
    ignoreEvent(event) { return this.widget.ignoreEvent(event); }
-
 
5910
    get isEditable() { return false; }
-
 
5911
    get isWidget() { return true; }
-
 
5912
    coordsAt(pos, side) {
-
 
5913
        let custom = this.widget.coordsAt(this.dom, pos, side);
-
 
5914
        if (custom)
-
 
5915
            return custom;
-
 
5916
        if (this.widget instanceof BlockGapWidget)
-
 
5917
            return null;
-
 
5918
        return flattenRect(this.dom.getBoundingClientRect(), this.length ? pos == 0 : side <= 0);
-
 
5919
    }
-
 
5920
    destroy() {
-
 
5921
        super.destroy();
-
 
5922
        if (this.dom)
-
 
5923
            this.widget.destroy(this.dom);
-
 
5924
    }
-
 
5925
    covers(side) {
-
 
5926
        let { startSide, endSide } = this.deco;
-
 
5927
        return startSide == endSide ? false : side < 0 ? startSide < 0 : endSide > 0;
-
 
5928
    }
-
 
5929
}
-
 
5930
class BlockGapWidget extends WidgetType {
-
 
5931
    constructor(height) {
-
 
5932
        super();
-
 
5933
        this.height = height;
-
 
5934
    }
-
 
5935
    toDOM() {
-
 
5936
        let elt = document.createElement("div");
-
 
5937
        elt.className = "cm-gap";
-
 
5938
        this.updateDOM(elt);
-
 
5939
        return elt;
-
 
5940
    }
-
 
5941
    eq(other) { return other.height == this.height; }
-
 
5942
    updateDOM(elt) {
-
 
5943
        elt.style.height = this.height + "px";
-
 
5944
        return true;
-
 
5945
    }
-
 
5946
    get editable() { return true; }
-
 
5947
    get estimatedHeight() { return this.height; }
-
 
5948
    ignoreEvent() { return false; }
-
 
5949
}
5888
 
5950
 
5889
class ContentBuilder {
5951
class ContentBuilder {
5890
    constructor(doc, pos, end, disallowBlockEffectsFor) {
5952
    constructor(doc, pos, end, disallowBlockEffectsFor) {
5891
        this.doc = doc;
5953
        this.doc = doc;
5892
        this.pos = pos;
5954
        this.pos = pos;
Línea 6546... Línea 6608...
6546
const mouseSelectionStyle = /*@__PURE__*/Facet.define();
6608
const mouseSelectionStyle = /*@__PURE__*/Facet.define();
6547
const exceptionSink = /*@__PURE__*/Facet.define();
6609
const exceptionSink = /*@__PURE__*/Facet.define();
6548
const updateListener = /*@__PURE__*/Facet.define();
6610
const updateListener = /*@__PURE__*/Facet.define();
6549
const inputHandler$1 = /*@__PURE__*/Facet.define();
6611
const inputHandler$1 = /*@__PURE__*/Facet.define();
6550
const focusChangeEffect = /*@__PURE__*/Facet.define();
6612
const focusChangeEffect = /*@__PURE__*/Facet.define();
-
 
6613
const clipboardInputFilter = /*@__PURE__*/Facet.define();
-
 
6614
const clipboardOutputFilter = /*@__PURE__*/Facet.define();
6551
const perLineTextDirection = /*@__PURE__*/Facet.define({
6615
const perLineTextDirection = /*@__PURE__*/Facet.define({
6552
    combine: values => values.some(x => x)
6616
    combine: values => values.some(x => x)
6553
});
6617
});
6554
const nativeSelectionHidden = /*@__PURE__*/Facet.define({
6618
const nativeSelectionHidden = /*@__PURE__*/Facet.define({
6555
    combine: values => values.some(x => x)
6619
    combine: values => values.some(x => x)
Línea 6579... Línea 6643...
6579
        return this.range.to <= state.doc.length ? this :
6643
        return this.range.to <= state.doc.length ? this :
6580
            new ScrollTarget(EditorSelection.cursor(state.doc.length), this.y, this.x, this.yMargin, this.xMargin, this.isSnapshot);
6644
            new ScrollTarget(EditorSelection.cursor(state.doc.length), this.y, this.x, this.yMargin, this.xMargin, this.isSnapshot);
6581
    }
6645
    }
6582
}
6646
}
6583
const scrollIntoView$1 = /*@__PURE__*/StateEffect.define({ map: (t, ch) => t.map(ch) });
6647
const scrollIntoView$1 = /*@__PURE__*/StateEffect.define({ map: (t, ch) => t.map(ch) });
-
 
6648
const setEditContextFormatting = /*@__PURE__*/StateEffect.define();
6584
/**
6649
/**
6585
Log or report an unhandled exception in client code. Should
6650
Log or report an unhandled exception in client code. Should
6586
probably only be used by extension code that allows client code to
6651
probably only be used by extension code that allows client code to
6587
provide functions, and calls those functions in a context where an
6652
provide functions, and calls those functions in a context where an
6588
exception can't be propagated to calling code in a reasonable way
6653
exception can't be propagated to calling code in a reasonable way
Línea 6872... Línea 6937...
6872
    */
6937
    */
6873
    get viewportChanged() {
6938
    get viewportChanged() {
6874
        return (this.flags & 4 /* UpdateFlag.Viewport */) > 0;
6939
        return (this.flags & 4 /* UpdateFlag.Viewport */) > 0;
6875
    }
6940
    }
6876
    /**
6941
    /**
-
 
6942
    Returns true when
-
 
6943
    [`viewportChanged`](https://codemirror.net/6/docs/ref/#view.ViewUpdate.viewportChanged) is true
-
 
6944
    and the viewport change is not just the result of mapping it in
-
 
6945
    response to document changes.
-
 
6946
    */
-
 
6947
    get viewportMoved() {
-
 
6948
        return (this.flags & 8 /* UpdateFlag.ViewportMoved */) > 0;
-
 
6949
    }
-
 
6950
    /**
6877
    Indicates whether the height of a block element in the editor
6951
    Indicates whether the height of a block element in the editor
6878
    changed in this update.
6952
    changed in this update.
6879
    */
6953
    */
6880
    get heightChanged() {
6954
    get heightChanged() {
6881
        return (this.flags & 2 /* UpdateFlag.Height */) > 0;
6955
        return (this.flags & 2 /* UpdateFlag.Height */) > 0;
Línea 6883... Línea 6957...
6883
    /**
6957
    /**
6884
    Returns true when the document was modified or the size of the
6958
    Returns true when the document was modified or the size of the
6885
    editor, or elements within the editor, changed.
6959
    editor, or elements within the editor, changed.
6886
    */
6960
    */
6887
    get geometryChanged() {
6961
    get geometryChanged() {
6888
        return this.docChanged || (this.flags & (8 /* UpdateFlag.Geometry */ | 2 /* UpdateFlag.Height */)) > 0;
6962
        return this.docChanged || (this.flags & (16 /* UpdateFlag.Geometry */ | 2 /* UpdateFlag.Height */)) > 0;
6889
    }
6963
    }
6890
    /**
6964
    /**
6891
    True when this update indicates a focus change.
6965
    True when this update indicates a focus change.
6892
    */
6966
    */
6893
    get focusChanged() {
6967
    get focusChanged() {
Línea 6915... Línea 6989...
6915
    get length() { return this.view.state.doc.length; }
6989
    get length() { return this.view.state.doc.length; }
6916
    constructor(view) {
6990
    constructor(view) {
6917
        super();
6991
        super();
6918
        this.view = view;
6992
        this.view = view;
6919
        this.decorations = [];
6993
        this.decorations = [];
6920
        this.dynamicDecorationMap = [];
6994
        this.dynamicDecorationMap = [false];
6921
        this.domChanged = null;
6995
        this.domChanged = null;
6922
        this.hasComposition = null;
6996
        this.hasComposition = null;
6923
        this.markedForComposition = new Set;
6997
        this.markedForComposition = new Set;
-
 
6998
        this.editContextFormatting = Decoration.none;
6924
        this.lastCompositionAfterCursor = false;
6999
        this.lastCompositionAfterCursor = false;
6925
        // Track a minimum width for the editor. When measuring sizes in
7000
        // Track a minimum width for the editor. When measuring sizes in
6926
        // measureVisibleLineHeights, this is updated to point at the width
7001
        // measureVisibleLineHeights, this is updated to point at the width
6927
        // of a given element and its extent in the document. When a change
7002
        // of a given element and its extent in the document. When a change
6928
        // happens in that range, these are reset. That way, once we've seen
7003
        // happens in that range, these are reset. That way, once we've seen
Línea 6957... Línea 7032...
6957
            else {
7032
            else {
6958
                this.minWidthFrom = update.changes.mapPos(this.minWidthFrom, 1);
7033
                this.minWidthFrom = update.changes.mapPos(this.minWidthFrom, 1);
6959
                this.minWidthTo = update.changes.mapPos(this.minWidthTo, 1);
7034
                this.minWidthTo = update.changes.mapPos(this.minWidthTo, 1);
6960
            }
7035
            }
6961
        }
7036
        }
-
 
7037
        this.updateEditContextFormatting(update);
6962
        let readCompositionAt = -1;
7038
        let readCompositionAt = -1;
6963
        if (this.view.inputState.composing >= 0) {
7039
        if (this.view.inputState.composing >= 0 && !this.view.observer.editContext) {
6964
            if ((_a = this.domChanged) === null || _a === void 0 ? void 0 : _a.newSel)
7040
            if ((_a = this.domChanged) === null || _a === void 0 ? void 0 : _a.newSel)
6965
                readCompositionAt = this.domChanged.newSel.head;
7041
                readCompositionAt = this.domChanged.newSel.head;
6966
            else if (!touchesComposition(update.changes, this.hasComposition) && !update.selectionSet)
7042
            else if (!touchesComposition(update.changes, this.hasComposition) && !update.selectionSet)
6967
                readCompositionAt = update.state.selection.main.head;
7043
                readCompositionAt = update.state.selection.main.head;
6968
        }
7044
        }
Línea 7013... Línea 7089...
7013
            // around the selection, get confused and report a different
7089
            // around the selection, get confused and report a different
7014
            // selection from the one it displays (issue #218). This tries
7090
            // selection from the one it displays (issue #218). This tries
7015
            // to detect that situation.
7091
            // to detect that situation.
7016
            let track = browser.chrome || browser.ios ? { node: observer.selectionRange.focusNode, written: false } : undefined;
7092
            let track = browser.chrome || browser.ios ? { node: observer.selectionRange.focusNode, written: false } : undefined;
7017
            this.sync(this.view, track);
7093
            this.sync(this.view, track);
7018
            this.flags &= ~7 /* ViewFlag.Dirty */;
7094
            this.flags &= -8 /* ViewFlag.Dirty */;
7019
            if (track && (track.written || observer.selectionRange.focusNode != track.node))
7095
            if (track && (track.written || observer.selectionRange.focusNode != track.node))
7020
                this.forceSelection = true;
7096
                this.forceSelection = true;
7021
            this.dom.style.height = "";
7097
            this.dom.style.height = "";
7022
        });
7098
        });
7023
        this.markedForComposition.forEach(cView => cView.flags &= ~8 /* ViewFlag.Composition */);
7099
        this.markedForComposition.forEach(cView => cView.flags &= -9 /* ViewFlag.Composition */);
7024
        let gaps = [];
7100
        let gaps = [];
7025
        if (this.view.viewport.from || this.view.viewport.to < this.view.state.doc.length)
7101
        if (this.view.viewport.from || this.view.viewport.to < this.view.state.doc.length)
7026
            for (let child of this.children)
7102
            for (let child of this.children)
7027
                if (child instanceof BlockWidgetView && child.widget instanceof BlockGapWidget)
7103
                if (child instanceof BlockWidgetView && child.widget instanceof BlockGapWidget)
7028
                    gaps.push(child.dom);
7104
                    gaps.push(child.dom);
Línea 7066... Línea 7142...
7066
            replaceRange(this, fromI, fromOff, toI, toOff, content, breakAtStart, openStart, openEnd);
7142
            replaceRange(this, fromI, fromOff, toI, toOff, content, breakAtStart, openStart, openEnd);
7067
        }
7143
        }
7068
        if (composition)
7144
        if (composition)
7069
            this.fixCompositionDOM(composition);
7145
            this.fixCompositionDOM(composition);
7070
    }
7146
    }
-
 
7147
    updateEditContextFormatting(update) {
-
 
7148
        this.editContextFormatting = this.editContextFormatting.map(update.changes);
-
 
7149
        for (let tr of update.transactions)
-
 
7150
            for (let effect of tr.effects)
-
 
7151
                if (effect.is(setEditContextFormatting)) {
-
 
7152
                    this.editContextFormatting = effect.value;
-
 
7153
                }
-
 
7154
    }
7071
    compositionView(composition) {
7155
    compositionView(composition) {
7072
        let cur = new TextView(composition.text.nodeValue);
7156
        let cur = new TextView(composition.text.nodeValue);
7073
        cur.flags |= 8 /* ViewFlag.Composition */;
7157
        cur.flags |= 8 /* ViewFlag.Composition */;
7074
        for (let { deco } of composition.marks)
7158
        for (let { deco } of composition.marks)
7075
            cur = new MarkView(deco, [cur], cur.length);
7159
            cur = new MarkView(deco, [cur], cur.length);
Línea 7098... Línea 7182...
7098
    // Sync the DOM selection to this.state.selection
7182
    // Sync the DOM selection to this.state.selection
7099
    updateSelection(mustRead = false, fromPointer = false) {
7183
    updateSelection(mustRead = false, fromPointer = false) {
7100
        if (mustRead || !this.view.observer.selectionRange.focusNode)
7184
        if (mustRead || !this.view.observer.selectionRange.focusNode)
7101
            this.view.observer.readSelectionRange();
7185
            this.view.observer.readSelectionRange();
7102
        let activeElt = this.view.root.activeElement, focused = activeElt == this.dom;
7186
        let activeElt = this.view.root.activeElement, focused = activeElt == this.dom;
7103
        let selectionNotFocus = !focused &&
7187
        let selectionNotFocus = !focused && !(this.view.state.facet(editable) || this.dom.tabIndex > -1) &&
7104
            hasSelection(this.dom, this.view.observer.selectionRange) && !(activeElt && this.dom.contains(activeElt));
7188
            hasSelection(this.dom, this.view.observer.selectionRange) && !(activeElt && this.dom.contains(activeElt));
7105
        if (!(focused || fromPointer || selectionNotFocus))
7189
        if (!(focused || fromPointer || selectionNotFocus))
7106
            return;
7190
            return;
7107
        let force = this.forceSelection;
7191
        let force = this.forceSelection;
7108
        this.forceSelection = false;
7192
        this.forceSelection = false;
Línea 7271... Línea 7355...
7271
            if (start <= pos && (start < pos || child.covers(-1)) && (end > pos || child.covers(1)) &&
7355
            if (start <= pos && (start < pos || child.covers(-1)) && (end > pos || child.covers(1)) &&
7272
                (!best || child instanceof LineView && !(best instanceof LineView && side >= 0))) {
7356
                (!best || child instanceof LineView && !(best instanceof LineView && side >= 0))) {
7273
                best = child;
7357
                best = child;
7274
                bestPos = start;
7358
                bestPos = start;
7275
            }
7359
            }
-
 
7360
            else if (best && start == pos && end == pos && child instanceof BlockWidgetView && Math.abs(side) < 2) {
-
 
7361
                if (child.deco.startSide < 0)
-
 
7362
                    break;
-
 
7363
                else if (i)
-
 
7364
                    best = null;
-
 
7365
            }
7276
            off = start;
7366
            off = start;
7277
        }
7367
        }
7278
        return best ? best.coordsAt(pos - bestPos, side) : null;
7368
        return best ? best.coordsAt(pos - bestPos, side) : null;
7279
    }
7369
    }
7280
    coordsForChar(pos) {
7370
    coordsForChar(pos) {
Línea 7391... Línea 7481...
7391
            pos = next.to + 1;
7481
            pos = next.to + 1;
7392
        }
7482
        }
7393
        return Decoration.set(deco);
7483
        return Decoration.set(deco);
7394
    }
7484
    }
7395
    updateDeco() {
7485
    updateDeco() {
7396
        let i = 0;
7486
        let i = 1;
7397
        let allDeco = this.view.state.facet(decorations).map(d => {
7487
        let allDeco = this.view.state.facet(decorations).map(d => {
7398
            let dynamic = this.dynamicDecorationMap[i++] = typeof d == "function";
7488
            let dynamic = this.dynamicDecorationMap[i++] = typeof d == "function";
7399
            return dynamic ? d(this.view) : d;
7489
            return dynamic ? d(this.view) : d;
7400
        });
7490
        });
7401
        let dynamicOuter = false, outerDeco = this.view.state.facet(outerDecorations).map((d, i) => {
7491
        let dynamicOuter = false, outerDeco = this.view.state.facet(outerDecorations).map((d, i) => {
Línea 7407... Línea 7497...
7407
        if (outerDeco.length) {
7497
        if (outerDeco.length) {
7408
            this.dynamicDecorationMap[i++] = dynamicOuter;
7498
            this.dynamicDecorationMap[i++] = dynamicOuter;
7409
            allDeco.push(RangeSet.join(outerDeco));
7499
            allDeco.push(RangeSet.join(outerDeco));
7410
        }
7500
        }
7411
        this.decorations = [
7501
        this.decorations = [
-
 
7502
            this.editContextFormatting,
7412
            ...allDeco,
7503
            ...allDeco,
7413
            this.computeBlockGapDeco(),
7504
            this.computeBlockGapDeco(),
7414
            this.view.viewState.lineGapDeco
7505
            this.view.viewState.lineGapDeco
7415
        ];
7506
        ];
7416
        while (i < this.decorations.length)
7507
        while (i < this.decorations.length)
Línea 7452... Línea 7543...
7452
function betweenUneditable(pos) {
7543
function betweenUneditable(pos) {
7453
    return pos.node.nodeType == 1 && pos.node.firstChild &&
7544
    return pos.node.nodeType == 1 && pos.node.firstChild &&
7454
        (pos.offset == 0 || pos.node.childNodes[pos.offset - 1].contentEditable == "false") &&
7545
        (pos.offset == 0 || pos.node.childNodes[pos.offset - 1].contentEditable == "false") &&
7455
        (pos.offset == pos.node.childNodes.length || pos.node.childNodes[pos.offset].contentEditable == "false");
7546
        (pos.offset == pos.node.childNodes.length || pos.node.childNodes[pos.offset].contentEditable == "false");
7456
}
7547
}
7457
class BlockGapWidget extends WidgetType {
-
 
7458
    constructor(height) {
-
 
7459
        super();
-
 
7460
        this.height = height;
-
 
7461
    }
-
 
7462
    toDOM() {
-
 
7463
        let elt = document.createElement("div");
-
 
7464
        elt.className = "cm-gap";
-
 
7465
        this.updateDOM(elt);
-
 
7466
        return elt;
-
 
7467
    }
-
 
7468
    eq(other) { return other.height == this.height; }
-
 
7469
    updateDOM(elt) {
-
 
7470
        elt.style.height = this.height + "px";
-
 
7471
        return true;
-
 
7472
    }
-
 
7473
    get editable() { return true; }
-
 
7474
    get estimatedHeight() { return this.height; }
-
 
7475
    ignoreEvent() { return false; }
-
 
7476
}
-
 
7477
function findCompositionNode(view, headPos) {
7548
function findCompositionNode(view, headPos) {
7478
    let sel = view.observer.selectionRange;
7549
    let sel = view.observer.selectionRange;
7479
    if (!sel.focusNode)
7550
    if (!sel.focusNode)
7480
        return null;
7551
        return null;
7481
    let textBefore = textNodeBefore(sel.focusNode, sel.focusOffset);
7552
    let textBefore = textNodeBefore(sel.focusNode, sel.focusOffset);
Línea 7537... Línea 7608...
7537
    constructor() {
7608
    constructor() {
7538
        this.changes = [];
7609
        this.changes = [];
7539
    }
7610
    }
7540
    compareRange(from, to) { addRange(from, to, this.changes); }
7611
    compareRange(from, to) { addRange(from, to, this.changes); }
7541
    comparePoint(from, to) { addRange(from, to, this.changes); }
7612
    comparePoint(from, to) { addRange(from, to, this.changes); }
-
 
7613
    boundChange(pos) { addRange(pos, pos, this.changes); }
7542
};
7614
};
7543
function findChangedDeco(a, b, diff) {
7615
function findChangedDeco(a, b, diff) {
7544
    let comp = new DecorationComparator$1;
7616
    let comp = new DecorationComparator$1;
7545
    RangeSet.compare(a, b, diff, comp);
7617
    RangeSet.compare(a, b, diff, comp);
7546
    return comp.changes;
7618
    return comp.changes;
Línea 7762... Línea 7834...
7762
                    browser.safari && isSuspiciousSafariCaretResult(node, offset, x) ||
7834
                    browser.safari && isSuspiciousSafariCaretResult(node, offset, x) ||
7763
                    browser.chrome && isSuspiciousChromeCaretResult(node, offset, x))
7835
                    browser.chrome && isSuspiciousChromeCaretResult(node, offset, x))
7764
                    node = undefined;
7836
                    node = undefined;
7765
            }
7837
            }
7766
        }
7838
        }
-
 
7839
        // Chrome will return offsets into <input> elements without child
-
 
7840
        // nodes, which will lead to a null deref below, so clip the
-
 
7841
        // offset to the node size.
-
 
7842
        if (node)
-
 
7843
            offset = Math.min(maxOffset(node), offset);
7767
    }
7844
    }
7768
    // No luck, do our own (potentially expensive) search
7845
    // No luck, do our own (potentially expensive) search
7769
    if (!node || !view.docView.dom.contains(node)) {
7846
    if (!node || !view.docView.dom.contains(node)) {
7770
        let line = LineView.find(view.docView, lineStart);
7847
        let line = LineView.find(view.docView, lineStart);
7771
        if (!line)
7848
        if (!line)
Línea 7929... Línea 8006...
7929
function skipAtoms(view, oldPos, pos) {
8006
function skipAtoms(view, oldPos, pos) {
7930
    let newPos = skipAtomicRanges(view.state.facet(atomicRanges).map(f => f(view)), pos.from, oldPos.head > pos.from ? -1 : 1);
8007
    let newPos = skipAtomicRanges(view.state.facet(atomicRanges).map(f => f(view)), pos.from, oldPos.head > pos.from ? -1 : 1);
7931
    return newPos == pos.from ? pos : EditorSelection.cursor(newPos, newPos < pos.from ? 1 : -1);
8008
    return newPos == pos.from ? pos : EditorSelection.cursor(newPos, newPos < pos.from ? 1 : -1);
7932
}
8009
}
Línea -... Línea 8010...
-
 
8010
 
-
 
8011
const LineBreakPlaceholder = "\uffff";
-
 
8012
class DOMReader {
-
 
8013
    constructor(points, state) {
-
 
8014
        this.points = points;
-
 
8015
        this.text = "";
-
 
8016
        this.lineSeparator = state.facet(EditorState.lineSeparator);
-
 
8017
    }
-
 
8018
    append(text) {
-
 
8019
        this.text += text;
-
 
8020
    }
-
 
8021
    lineBreak() {
-
 
8022
        this.text += LineBreakPlaceholder;
-
 
8023
    }
-
 
8024
    readRange(start, end) {
-
 
8025
        if (!start)
-
 
8026
            return this;
-
 
8027
        let parent = start.parentNode;
-
 
8028
        for (let cur = start;;) {
-
 
8029
            this.findPointBefore(parent, cur);
-
 
8030
            let oldLen = this.text.length;
-
 
8031
            this.readNode(cur);
-
 
8032
            let next = cur.nextSibling;
-
 
8033
            if (next == end)
-
 
8034
                break;
-
 
8035
            let view = ContentView.get(cur), nextView = ContentView.get(next);
-
 
8036
            if (view && nextView ? view.breakAfter :
-
 
8037
                (view ? view.breakAfter : isBlockElement(cur)) ||
-
 
8038
                    (isBlockElement(next) && (cur.nodeName != "BR" || cur.cmIgnore) && this.text.length > oldLen))
-
 
8039
                this.lineBreak();
-
 
8040
            cur = next;
-
 
8041
        }
-
 
8042
        this.findPointBefore(parent, end);
-
 
8043
        return this;
-
 
8044
    }
-
 
8045
    readTextNode(node) {
-
 
8046
        let text = node.nodeValue;
-
 
8047
        for (let point of this.points)
-
 
8048
            if (point.node == node)
-
 
8049
                point.pos = this.text.length + Math.min(point.offset, text.length);
-
 
8050
        for (let off = 0, re = this.lineSeparator ? null : /\r\n?|\n/g;;) {
-
 
8051
            let nextBreak = -1, breakSize = 1, m;
-
 
8052
            if (this.lineSeparator) {
-
 
8053
                nextBreak = text.indexOf(this.lineSeparator, off);
-
 
8054
                breakSize = this.lineSeparator.length;
-
 
8055
            }
-
 
8056
            else if (m = re.exec(text)) {
-
 
8057
                nextBreak = m.index;
-
 
8058
                breakSize = m[0].length;
-
 
8059
            }
-
 
8060
            this.append(text.slice(off, nextBreak < 0 ? text.length : nextBreak));
-
 
8061
            if (nextBreak < 0)
-
 
8062
                break;
-
 
8063
            this.lineBreak();
-
 
8064
            if (breakSize > 1)
-
 
8065
                for (let point of this.points)
-
 
8066
                    if (point.node == node && point.pos > this.text.length)
-
 
8067
                        point.pos -= breakSize - 1;
-
 
8068
            off = nextBreak + breakSize;
-
 
8069
        }
-
 
8070
    }
-
 
8071
    readNode(node) {
-
 
8072
        if (node.cmIgnore)
-
 
8073
            return;
-
 
8074
        let view = ContentView.get(node);
-
 
8075
        let fromView = view && view.overrideDOMText;
-
 
8076
        if (fromView != null) {
-
 
8077
            this.findPointInside(node, fromView.length);
-
 
8078
            for (let i = fromView.iter(); !i.next().done;) {
-
 
8079
                if (i.lineBreak)
-
 
8080
                    this.lineBreak();
-
 
8081
                else
-
 
8082
                    this.append(i.value);
-
 
8083
            }
-
 
8084
        }
-
 
8085
        else if (node.nodeType == 3) {
-
 
8086
            this.readTextNode(node);
-
 
8087
        }
-
 
8088
        else if (node.nodeName == "BR") {
-
 
8089
            if (node.nextSibling)
-
 
8090
                this.lineBreak();
-
 
8091
        }
-
 
8092
        else if (node.nodeType == 1) {
-
 
8093
            this.readRange(node.firstChild, null);
-
 
8094
        }
-
 
8095
    }
-
 
8096
    findPointBefore(node, next) {
-
 
8097
        for (let point of this.points)
-
 
8098
            if (point.node == node && node.childNodes[point.offset] == next)
-
 
8099
                point.pos = this.text.length;
-
 
8100
    }
-
 
8101
    findPointInside(node, length) {
-
 
8102
        for (let point of this.points)
-
 
8103
            if (node.nodeType == 3 ? point.node == node : node.contains(point.node))
-
 
8104
                point.pos = this.text.length + (isAtEnd(node, point.node, point.offset) ? length : 0);
-
 
8105
    }
-
 
8106
}
-
 
8107
function isAtEnd(parent, node, offset) {
-
 
8108
    for (;;) {
-
 
8109
        if (!node || offset < maxOffset(node))
-
 
8110
            return false;
-
 
8111
        if (node == parent)
-
 
8112
            return true;
-
 
8113
        offset = domIndex(node) + 1;
-
 
8114
        node = node.parentNode;
-
 
8115
    }
-
 
8116
}
-
 
8117
class DOMPoint {
-
 
8118
    constructor(node, offset) {
-
 
8119
        this.node = node;
-
 
8120
        this.offset = offset;
-
 
8121
        this.pos = -1;
-
 
8122
    }
-
 
8123
}
-
 
8124
 
-
 
8125
class DOMChange {
-
 
8126
    constructor(view, start, end, typeOver) {
-
 
8127
        this.typeOver = typeOver;
-
 
8128
        this.bounds = null;
-
 
8129
        this.text = "";
-
 
8130
        this.domChanged = start > -1;
-
 
8131
        let { impreciseHead: iHead, impreciseAnchor: iAnchor } = view.docView;
-
 
8132
        if (view.state.readOnly && start > -1) {
-
 
8133
            // Ignore changes when the editor is read-only
-
 
8134
            this.newSel = null;
-
 
8135
        }
-
 
8136
        else if (start > -1 && (this.bounds = view.docView.domBoundsAround(start, end, 0))) {
-
 
8137
            let selPoints = iHead || iAnchor ? [] : selectionPoints(view);
-
 
8138
            let reader = new DOMReader(selPoints, view.state);
-
 
8139
            reader.readRange(this.bounds.startDOM, this.bounds.endDOM);
-
 
8140
            this.text = reader.text;
-
 
8141
            this.newSel = selectionFromPoints(selPoints, this.bounds.from);
-
 
8142
        }
-
 
8143
        else {
-
 
8144
            let domSel = view.observer.selectionRange;
-
 
8145
            let head = iHead && iHead.node == domSel.focusNode && iHead.offset == domSel.focusOffset ||
-
 
8146
                !contains(view.contentDOM, domSel.focusNode)
-
 
8147
                ? view.state.selection.main.head
-
 
8148
                : view.docView.posFromDOM(domSel.focusNode, domSel.focusOffset);
-
 
8149
            let anchor = iAnchor && iAnchor.node == domSel.anchorNode && iAnchor.offset == domSel.anchorOffset ||
-
 
8150
                !contains(view.contentDOM, domSel.anchorNode)
-
 
8151
                ? view.state.selection.main.anchor
-
 
8152
                : view.docView.posFromDOM(domSel.anchorNode, domSel.anchorOffset);
-
 
8153
            // iOS will refuse to select the block gaps when doing
-
 
8154
            // select-all.
-
 
8155
            // Chrome will put the selection *inside* them, confusing
-
 
8156
            // posFromDOM
-
 
8157
            let vp = view.viewport;
-
 
8158
            if ((browser.ios || browser.chrome) && view.state.selection.main.empty && head != anchor &&
-
 
8159
                (vp.from > 0 || vp.to < view.state.doc.length)) {
-
 
8160
                let from = Math.min(head, anchor), to = Math.max(head, anchor);
-
 
8161
                let offFrom = vp.from - from, offTo = vp.to - to;
-
 
8162
                if ((offFrom == 0 || offFrom == 1 || from == 0) && (offTo == 0 || offTo == -1 || to == view.state.doc.length)) {
-
 
8163
                    head = 0;
-
 
8164
                    anchor = view.state.doc.length;
-
 
8165
                }
-
 
8166
            }
-
 
8167
            this.newSel = EditorSelection.single(anchor, head);
-
 
8168
        }
-
 
8169
    }
-
 
8170
}
-
 
8171
function applyDOMChange(view, domChange) {
-
 
8172
    let change;
-
 
8173
    let { newSel } = domChange, sel = view.state.selection.main;
-
 
8174
    let lastKey = view.inputState.lastKeyTime > Date.now() - 100 ? view.inputState.lastKeyCode : -1;
-
 
8175
    if (domChange.bounds) {
-
 
8176
        let { from, to } = domChange.bounds;
-
 
8177
        let preferredPos = sel.from, preferredSide = null;
-
 
8178
        // Prefer anchoring to end when Backspace is pressed (or, on
-
 
8179
        // Android, when something was deleted)
-
 
8180
        if (lastKey === 8 || browser.android && domChange.text.length < to - from) {
-
 
8181
            preferredPos = sel.to;
-
 
8182
            preferredSide = "end";
-
 
8183
        }
-
 
8184
        let diff = findDiff(view.state.doc.sliceString(from, to, LineBreakPlaceholder), domChange.text, preferredPos - from, preferredSide);
-
 
8185
        if (diff) {
-
 
8186
            // Chrome inserts two newlines when pressing shift-enter at the
-
 
8187
            // end of a line. DomChange drops one of those.
-
 
8188
            if (browser.chrome && lastKey == 13 &&
-
 
8189
                diff.toB == diff.from + 2 && domChange.text.slice(diff.from, diff.toB) == LineBreakPlaceholder + LineBreakPlaceholder)
-
 
8190
                diff.toB--;
-
 
8191
            change = { from: from + diff.from, to: from + diff.toA,
-
 
8192
                insert: Text.of(domChange.text.slice(diff.from, diff.toB).split(LineBreakPlaceholder)) };
-
 
8193
        }
-
 
8194
    }
-
 
8195
    else if (newSel && (!view.hasFocus && view.state.facet(editable) || newSel.main.eq(sel))) {
-
 
8196
        newSel = null;
-
 
8197
    }
-
 
8198
    if (!change && !newSel)
-
 
8199
        return false;
-
 
8200
    if (!change && domChange.typeOver && !sel.empty && newSel && newSel.main.empty) {
-
 
8201
        // Heuristic to notice typing over a selected character
-
 
8202
        change = { from: sel.from, to: sel.to, insert: view.state.doc.slice(sel.from, sel.to) };
-
 
8203
    }
-
 
8204
    else if ((browser.mac || browser.android) && change && change.from == change.to && change.from == sel.head - 1 &&
-
 
8205
        /^\. ?$/.test(change.insert.toString()) && view.contentDOM.getAttribute("autocorrect") == "off") {
-
 
8206
        // Detect insert-period-on-double-space Mac and Android behavior,
-
 
8207
        // and transform it into a regular space insert.
-
 
8208
        if (newSel && change.insert.length == 2)
-
 
8209
            newSel = EditorSelection.single(newSel.main.anchor - 1, newSel.main.head - 1);
-
 
8210
        change = { from: change.from, to: change.to, insert: Text.of([change.insert.toString().replace(".", " ")]) };
-
 
8211
    }
-
 
8212
    else if (change && change.from >= sel.from && change.to <= sel.to &&
-
 
8213
        (change.from != sel.from || change.to != sel.to) &&
-
 
8214
        (sel.to - sel.from) - (change.to - change.from) <= 4) {
-
 
8215
        // If the change is inside the selection and covers most of it,
-
 
8216
        // assume it is a selection replace (with identical characters at
-
 
8217
        // the start/end not included in the diff)
-
 
8218
        change = {
-
 
8219
            from: sel.from, to: sel.to,
-
 
8220
            insert: view.state.doc.slice(sel.from, change.from).append(change.insert).append(view.state.doc.slice(change.to, sel.to))
-
 
8221
        };
-
 
8222
    }
-
 
8223
    else if (browser.chrome && change && change.from == change.to && change.from == sel.head &&
-
 
8224
        change.insert.toString() == "\n " && view.lineWrapping) {
-
 
8225
        // In Chrome, if you insert a space at the start of a wrapped
-
 
8226
        // line, it will actually insert a newline and a space, causing a
-
 
8227
        // bogus new line to be created in CodeMirror (#968)
-
 
8228
        if (newSel)
-
 
8229
            newSel = EditorSelection.single(newSel.main.anchor - 1, newSel.main.head - 1);
-
 
8230
        change = { from: sel.from, to: sel.to, insert: Text.of([" "]) };
-
 
8231
    }
-
 
8232
    if (change) {
-
 
8233
        return applyDOMChangeInner(view, change, newSel, lastKey);
-
 
8234
    }
-
 
8235
    else if (newSel && !newSel.main.eq(sel)) {
-
 
8236
        let scrollIntoView = false, userEvent = "select";
-
 
8237
        if (view.inputState.lastSelectionTime > Date.now() - 50) {
-
 
8238
            if (view.inputState.lastSelectionOrigin == "select")
-
 
8239
                scrollIntoView = true;
-
 
8240
            userEvent = view.inputState.lastSelectionOrigin;
-
 
8241
        }
-
 
8242
        view.dispatch({ selection: newSel, scrollIntoView, userEvent });
-
 
8243
        return true;
-
 
8244
    }
-
 
8245
    else {
-
 
8246
        return false;
-
 
8247
    }
-
 
8248
}
-
 
8249
function applyDOMChangeInner(view, change, newSel, lastKey = -1) {
-
 
8250
    if (browser.ios && view.inputState.flushIOSKey(change))
-
 
8251
        return true;
-
 
8252
    let sel = view.state.selection.main;
-
 
8253
    // Android browsers don't fire reasonable key events for enter,
7933
 
8254
    // backspace, or delete. So this detects changes that look like
-
 
8255
    // they're caused by those keys, and reinterprets them as key
-
 
8256
    // events. (Some of these keys are also handled by beforeinput
-
 
8257
    // events and the pendingAndroidKey mechanism, but that's not
-
 
8258
    // reliable in all situations.)
-
 
8259
    if (browser.android &&
-
 
8260
        ((change.to == sel.to &&
-
 
8261
            // GBoard will sometimes remove a space it just inserted
-
 
8262
            // after a completion when you press enter
-
 
8263
            (change.from == sel.from || change.from == sel.from - 1 && view.state.sliceDoc(change.from, sel.from) == " ") &&
-
 
8264
            change.insert.length == 1 && change.insert.lines == 2 &&
-
 
8265
            dispatchKey(view.contentDOM, "Enter", 13)) ||
-
 
8266
            ((change.from == sel.from - 1 && change.to == sel.to && change.insert.length == 0 ||
-
 
8267
                lastKey == 8 && change.insert.length < change.to - change.from && change.to > sel.head) &&
-
 
8268
                dispatchKey(view.contentDOM, "Backspace", 8)) ||
-
 
8269
            (change.from == sel.from && change.to == sel.to + 1 && change.insert.length == 0 &&
-
 
8270
                dispatchKey(view.contentDOM, "Delete", 46))))
-
 
8271
        return true;
-
 
8272
    let text = change.insert.toString();
-
 
8273
    if (view.inputState.composing >= 0)
-
 
8274
        view.inputState.composing++;
-
 
8275
    let defaultTr;
-
 
8276
    let defaultInsert = () => defaultTr || (defaultTr = applyDefaultInsert(view, change, newSel));
-
 
8277
    if (!view.state.facet(inputHandler$1).some(h => h(view, change.from, change.to, text, defaultInsert)))
-
 
8278
        view.dispatch(defaultInsert());
-
 
8279
    return true;
-
 
8280
}
-
 
8281
function applyDefaultInsert(view, change, newSel) {
-
 
8282
    let tr, startState = view.state, sel = startState.selection.main;
-
 
8283
    if (change.from >= sel.from && change.to <= sel.to && change.to - change.from >= (sel.to - sel.from) / 3 &&
-
 
8284
        (!newSel || newSel.main.empty && newSel.main.from == change.from + change.insert.length) &&
-
 
8285
        view.inputState.composing < 0) {
-
 
8286
        let before = sel.from < change.from ? startState.sliceDoc(sel.from, change.from) : "";
-
 
8287
        let after = sel.to > change.to ? startState.sliceDoc(change.to, sel.to) : "";
-
 
8288
        tr = startState.replaceSelection(view.state.toText(before + change.insert.sliceString(0, undefined, view.state.lineBreak) + after));
-
 
8289
    }
-
 
8290
    else {
-
 
8291
        let changes = startState.changes(change);
-
 
8292
        let mainSel = newSel && newSel.main.to <= changes.newLength ? newSel.main : undefined;
-
 
8293
        // Try to apply a composition change to all cursors
-
 
8294
        if (startState.selection.ranges.length > 1 && view.inputState.composing >= 0 &&
-
 
8295
            change.to <= sel.to && change.to >= sel.to - 10) {
-
 
8296
            let replaced = view.state.sliceDoc(change.from, change.to);
-
 
8297
            let compositionRange, composition = newSel && findCompositionNode(view, newSel.main.head);
-
 
8298
            if (composition) {
-
 
8299
                let dLen = change.insert.length - (change.to - change.from);
-
 
8300
                compositionRange = { from: composition.from, to: composition.to - dLen };
-
 
8301
            }
-
 
8302
            else {
-
 
8303
                compositionRange = view.state.doc.lineAt(sel.head);
-
 
8304
            }
-
 
8305
            let offset = sel.to - change.to, size = sel.to - sel.from;
-
 
8306
            tr = startState.changeByRange(range => {
-
 
8307
                if (range.from == sel.from && range.to == sel.to)
-
 
8308
                    return { changes, range: mainSel || range.map(changes) };
-
 
8309
                let to = range.to - offset, from = to - replaced.length;
-
 
8310
                if (range.to - range.from != size || view.state.sliceDoc(from, to) != replaced ||
-
 
8311
                    // Unfortunately, there's no way to make multiple
-
 
8312
                    // changes in the same node work without aborting
-
 
8313
                    // composition, so cursors in the composition range are
-
 
8314
                    // ignored.
-
 
8315
                    range.to >= compositionRange.from && range.from <= compositionRange.to)
-
 
8316
                    return { range };
-
 
8317
                let rangeChanges = startState.changes({ from, to, insert: change.insert }), selOff = range.to - sel.to;
-
 
8318
                return {
-
 
8319
                    changes: rangeChanges,
-
 
8320
                    range: !mainSel ? range.map(rangeChanges) :
-
 
8321
                        EditorSelection.range(Math.max(0, mainSel.anchor + selOff), Math.max(0, mainSel.head + selOff))
-
 
8322
                };
-
 
8323
            });
-
 
8324
        }
-
 
8325
        else {
-
 
8326
            tr = {
-
 
8327
                changes,
-
 
8328
                selection: mainSel && startState.selection.replaceRange(mainSel)
-
 
8329
            };
-
 
8330
        }
-
 
8331
    }
-
 
8332
    let userEvent = "input.type";
-
 
8333
    if (view.composing ||
-
 
8334
        view.inputState.compositionPendingChange && view.inputState.compositionEndedAt > Date.now() - 50) {
-
 
8335
        view.inputState.compositionPendingChange = false;
-
 
8336
        userEvent += ".compose";
-
 
8337
        if (view.inputState.compositionFirstChange) {
-
 
8338
            userEvent += ".start";
-
 
8339
            view.inputState.compositionFirstChange = false;
-
 
8340
        }
-
 
8341
    }
-
 
8342
    return startState.update(tr, { userEvent, scrollIntoView: true });
-
 
8343
}
-
 
8344
function findDiff(a, b, preferredPos, preferredSide) {
-
 
8345
    let minLen = Math.min(a.length, b.length);
-
 
8346
    let from = 0;
-
 
8347
    while (from < minLen && a.charCodeAt(from) == b.charCodeAt(from))
-
 
8348
        from++;
-
 
8349
    if (from == minLen && a.length == b.length)
-
 
8350
        return null;
-
 
8351
    let toA = a.length, toB = b.length;
-
 
8352
    while (toA > 0 && toB > 0 && a.charCodeAt(toA - 1) == b.charCodeAt(toB - 1)) {
-
 
8353
        toA--;
-
 
8354
        toB--;
-
 
8355
    }
-
 
8356
    if (preferredSide == "end") {
-
 
8357
        let adjust = Math.max(0, from - Math.min(toA, toB));
-
 
8358
        preferredPos -= toA + adjust - from;
-
 
8359
    }
-
 
8360
    if (toA < from && a.length < b.length) {
-
 
8361
        let move = preferredPos <= from && preferredPos >= toA ? from - preferredPos : 0;
-
 
8362
        from -= move;
-
 
8363
        toB = from + (toB - toA);
-
 
8364
        toA = from;
-
 
8365
    }
-
 
8366
    else if (toB < from) {
-
 
8367
        let move = preferredPos <= from && preferredPos >= toB ? from - preferredPos : 0;
-
 
8368
        from -= move;
-
 
8369
        toA = from + (toA - toB);
-
 
8370
        toB = from;
-
 
8371
    }
-
 
8372
    return { from, toA, toB };
-
 
8373
}
-
 
8374
function selectionPoints(view) {
-
 
8375
    let result = [];
-
 
8376
    if (view.root.activeElement != view.contentDOM)
-
 
8377
        return result;
-
 
8378
    let { anchorNode, anchorOffset, focusNode, focusOffset } = view.observer.selectionRange;
-
 
8379
    if (anchorNode) {
-
 
8380
        result.push(new DOMPoint(anchorNode, anchorOffset));
-
 
8381
        if (focusNode != anchorNode || focusOffset != anchorOffset)
-
 
8382
            result.push(new DOMPoint(focusNode, focusOffset));
-
 
8383
    }
-
 
8384
    return result;
-
 
8385
}
-
 
8386
function selectionFromPoints(points, base) {
-
 
8387
    if (points.length == 0)
-
 
8388
        return null;
-
 
8389
    let anchor = points[0].pos, head = points.length == 2 ? points[1].pos : anchor;
-
 
8390
    return anchor > -1 && head > -1 ? EditorSelection.single(anchor + base, head + base) : null;
-
 
8391
}
7934
// This will also be where dragging info and such goes
8392
 
7935
class InputState {
8393
class InputState {
7936
    setSelectionOrigin(origin) {
8394
    setSelectionOrigin(origin) {
7937
        this.lastSelectionOrigin = origin;
8395
        this.lastSelectionOrigin = origin;
7938
        this.lastSelectionTime = Date.now();
8396
        this.lastSelectionTime = Date.now();
Línea 7947... Línea 8405...
7947
        this.lastScrollLeft = 0;
8405
        this.lastScrollLeft = 0;
7948
        // On iOS, some keys need to have their default behavior happen
8406
        // On iOS, some keys need to have their default behavior happen
7949
        // (after which we retroactively handle them and reset the DOM) to
8407
        // (after which we retroactively handle them and reset the DOM) to
7950
        // avoid messing up the virtual keyboard state.
8408
        // avoid messing up the virtual keyboard state.
7951
        this.pendingIOSKey = undefined;
8409
        this.pendingIOSKey = undefined;
-
 
8410
        /**
-
 
8411
        When enabled (>-1), tab presses are not given to key handlers,
-
 
8412
        leaving the browser's default behavior. If >0, the mode expires
-
 
8413
        at that timestamp, and any other keypress clears it.
-
 
8414
        Esc enables temporary tab focus mode for two seconds when not
-
 
8415
        otherwise handled.
-
 
8416
        */
-
 
8417
        this.tabFocusMode = -1;
7952
        this.lastSelectionOrigin = null;
8418
        this.lastSelectionOrigin = null;
7953
        this.lastSelectionTime = 0;
8419
        this.lastSelectionTime = 0;
7954
        this.lastEscPress = 0;
-
 
7955
        this.lastContextMenu = 0;
8420
        this.lastContextMenu = 0;
7956
        this.scrollHandlers = [];
8421
        this.scrollHandlers = [];
7957
        this.handlers = Object.create(null);
8422
        this.handlers = Object.create(null);
7958
        // -1 means not in a composition. Otherwise, this counts the number
8423
        // -1 means not in a composition. Otherwise, this counts the number
7959
        // of changes made during the composition. The count is used to
8424
        // of changes made during the composition. The count is used to
Línea 7990... Línea 8455...
7990
    handleEvent(event) {
8455
    handleEvent(event) {
7991
        if (!eventBelongsToEditor(this.view, event) || this.ignoreDuringComposition(event))
8456
        if (!eventBelongsToEditor(this.view, event) || this.ignoreDuringComposition(event))
7992
            return;
8457
            return;
7993
        if (event.type == "keydown" && this.keydown(event))
8458
        if (event.type == "keydown" && this.keydown(event))
7994
            return;
8459
            return;
-
 
8460
        if (this.view.updateState != 0 /* UpdateState.Idle */)
-
 
8461
            Promise.resolve().then(() => this.runHandlers(event.type, event));
-
 
8462
        else
7995
        this.runHandlers(event.type, event);
8463
            this.runHandlers(event.type, event);
7996
    }
8464
    }
7997
    runHandlers(type, event) {
8465
    runHandlers(type, event) {
7998
        let handlers = this.handlers[type];
8466
        let handlers = this.handlers[type];
7999
        if (handlers) {
8467
        if (handlers) {
8000
            for (let observer of handlers.observers)
8468
            for (let observer of handlers.observers)
Línea 8029... Línea 8497...
8029
    }
8497
    }
8030
    keydown(event) {
8498
    keydown(event) {
8031
        // Must always run, even if a custom handler handled the event
8499
        // Must always run, even if a custom handler handled the event
8032
        this.lastKeyCode = event.keyCode;
8500
        this.lastKeyCode = event.keyCode;
8033
        this.lastKeyTime = Date.now();
8501
        this.lastKeyTime = Date.now();
8034
        if (event.keyCode == 9 && Date.now() < this.lastEscPress + 2000)
8502
        if (event.keyCode == 9 && this.tabFocusMode > -1 && (!this.tabFocusMode || Date.now() <= this.tabFocusMode))
8035
            return true;
8503
            return true;
8036
        if (event.keyCode != 27 && modifierCodes.indexOf(event.keyCode) < 0)
8504
        if (this.tabFocusMode > 0 && event.keyCode != 27 && modifierCodes.indexOf(event.keyCode) < 0)
8037
            this.view.inputState.lastEscPress = 0;
8505
            this.tabFocusMode = -1;
8038
        // Chrome for Android usually doesn't fire proper key events, but
8506
        // Chrome for Android usually doesn't fire proper key events, but
8039
        // occasionally does, usually surrounded by a bunch of complicated
8507
        // occasionally does, usually surrounded by a bunch of complicated
8040
        // composition changes. When an enter or backspace key event is
8508
        // composition changes. When an enter or backspace key event is
8041
        // seen, hold off on handling DOM events for a bit, and then
8509
        // seen, hold off on handling DOM events for a bit, and then
8042
        // dispatch it.
8510
        // dispatch it.
Línea 8093... Línea 8561...
8093
        if (this.mouseSelection)
8561
        if (this.mouseSelection)
8094
            this.mouseSelection.destroy();
8562
            this.mouseSelection.destroy();
8095
        this.mouseSelection = mouseSelection;
8563
        this.mouseSelection = mouseSelection;
8096
    }
8564
    }
8097
    update(update) {
8565
    update(update) {
-
 
8566
        this.view.observer.update(update);
8098
        if (this.mouseSelection)
8567
        if (this.mouseSelection)
8099
            this.mouseSelection.update(update);
8568
            this.mouseSelection.update(update);
8100
        if (this.draggedContent && update.docChanged)
8569
        if (this.draggedContent && update.docChanged)
8101
            this.draggedContent = this.draggedContent.map(update.changes);
8570
            this.draggedContent = this.draggedContent.map(update.changes);
8102
        if (update.transactions.length)
8571
        if (update.transactions.length)
Línea 8166... Línea 8635...
8166
        this.style = style;
8635
        this.style = style;
8167
        this.mustSelect = mustSelect;
8636
        this.mustSelect = mustSelect;
8168
        this.scrollSpeed = { x: 0, y: 0 };
8637
        this.scrollSpeed = { x: 0, y: 0 };
8169
        this.scrolling = -1;
8638
        this.scrolling = -1;
8170
        this.lastEvent = startEvent;
8639
        this.lastEvent = startEvent;
8171
        this.scrollParent = scrollableParent(view.contentDOM);
8640
        this.scrollParents = scrollableParents(view.contentDOM);
8172
        this.atoms = view.state.facet(atomicRanges).map(f => f(view));
8641
        this.atoms = view.state.facet(atomicRanges).map(f => f(view));
8173
        let doc = view.contentDOM.ownerDocument;
8642
        let doc = view.contentDOM.ownerDocument;
8174
        doc.addEventListener("mousemove", this.move = this.move.bind(this));
8643
        doc.addEventListener("mousemove", this.move = this.move.bind(this));
8175
        doc.addEventListener("mouseup", this.up = this.up.bind(this));
8644
        doc.addEventListener("mouseup", this.up = this.up.bind(this));
8176
        this.extend = startEvent.shiftKey;
8645
        this.extend = startEvent.shiftKey;
Línea 8182... Línea 8651...
8182
        // effect of starting the selection
8651
        // effect of starting the selection
8183
        if (this.dragging === false)
8652
        if (this.dragging === false)
8184
            this.select(event);
8653
            this.select(event);
8185
    }
8654
    }
8186
    move(event) {
8655
    move(event) {
8187
        var _a;
-
 
8188
        if (event.buttons == 0)
8656
        if (event.buttons == 0)
8189
            return this.destroy();
8657
            return this.destroy();
8190
        if (this.dragging || this.dragging == null && dist(this.startEvent, event) < 10)
8658
        if (this.dragging || this.dragging == null && dist(this.startEvent, event) < 10)
8191
            return;
8659
            return;
8192
        this.select(this.lastEvent = event);
8660
        this.select(this.lastEvent = event);
8193
        let sx = 0, sy = 0;
8661
        let sx = 0, sy = 0;
-
 
8662
        let left = 0, top = 0, right = this.view.win.innerWidth, bottom = this.view.win.innerHeight;
-
 
8663
        if (this.scrollParents.x)
8194
        let rect = ((_a = this.scrollParent) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect())
8664
            ({ left, right } = this.scrollParents.x.getBoundingClientRect());
-
 
8665
        if (this.scrollParents.y)
8195
            || { left: 0, top: 0, right: this.view.win.innerWidth, bottom: this.view.win.innerHeight };
8666
            ({ top, bottom } = this.scrollParents.y.getBoundingClientRect());
8196
        let margins = getScrollMargins(this.view);
8667
        let margins = getScrollMargins(this.view);
8197
        if (event.clientX - margins.left <= rect.left + dragScrollMargin)
8668
        if (event.clientX - margins.left <= left + dragScrollMargin)
8198
            sx = -dragScrollSpeed(rect.left - event.clientX);
8669
            sx = -dragScrollSpeed(left - event.clientX);
8199
        else if (event.clientX + margins.right >= rect.right - dragScrollMargin)
8670
        else if (event.clientX + margins.right >= right - dragScrollMargin)
8200
            sx = dragScrollSpeed(event.clientX - rect.right);
8671
            sx = dragScrollSpeed(event.clientX - right);
8201
        if (event.clientY - margins.top <= rect.top + dragScrollMargin)
8672
        if (event.clientY - margins.top <= top + dragScrollMargin)
8202
            sy = -dragScrollSpeed(rect.top - event.clientY);
8673
            sy = -dragScrollSpeed(top - event.clientY);
8203
        else if (event.clientY + margins.bottom >= rect.bottom - dragScrollMargin)
8674
        else if (event.clientY + margins.bottom >= bottom - dragScrollMargin)
8204
            sy = dragScrollSpeed(event.clientY - rect.bottom);
8675
            sy = dragScrollSpeed(event.clientY - bottom);
8205
        this.setScrollSpeed(sx, sy);
8676
        this.setScrollSpeed(sx, sy);
8206
    }
8677
    }
8207
    up(event) {
8678
    up(event) {
8208
        if (this.dragging == null)
8679
        if (this.dragging == null)
8209
            this.select(this.lastEvent);
8680
            this.select(this.lastEvent);
Línea 8228... Línea 8699...
8228
            clearInterval(this.scrolling);
8699
            clearInterval(this.scrolling);
8229
            this.scrolling = -1;
8700
            this.scrolling = -1;
8230
        }
8701
        }
8231
    }
8702
    }
8232
    scroll() {
8703
    scroll() {
-
 
8704
        let { x, y } = this.scrollSpeed;
8233
        if (this.scrollParent) {
8705
        if (x && this.scrollParents.x) {
8234
            this.scrollParent.scrollLeft += this.scrollSpeed.x;
8706
            this.scrollParents.x.scrollLeft += x;
8235
            this.scrollParent.scrollTop += this.scrollSpeed.y;
8707
            x = 0;
8236
        }
8708
        }
8237
        else {
8709
        if (y && this.scrollParents.y) {
8238
            this.view.win.scrollBy(this.scrollSpeed.x, this.scrollSpeed.y);
8710
            this.scrollParents.y.scrollTop += y;
-
 
8711
            y = 0;
8239
        }
8712
        }
-
 
8713
        if (x || y)
-
 
8714
            this.view.win.scrollBy(x, y);
8240
        if (this.dragging === false)
8715
        if (this.dragging === false)
8241
            this.select(this.lastEvent);
8716
            this.select(this.lastEvent);
8242
    }
8717
    }
8243
    skipAtoms(sel) {
8718
    skipAtoms(sel) {
8244
        let ranges = null;
8719
        let ranges = null;
Línea 8271... Línea 8746...
8271
                userEvent: "select.pointer"
8746
                userEvent: "select.pointer"
8272
            });
8747
            });
8273
        this.mustSelect = false;
8748
        this.mustSelect = false;
8274
    }
8749
    }
8275
    update(update) {
8750
    update(update) {
-
 
8751
        if (update.transactions.some(tr => tr.isUserEvent("input.type")))
-
 
8752
            this.destroy();
8276
        if (this.style.update(update))
8753
        else if (this.style.update(update))
8277
            setTimeout(() => this.select(this.lastEvent), 20);
8754
            setTimeout(() => this.select(this.lastEvent), 20);
8278
    }
8755
    }
8279
}
8756
}
8280
function addsSelectionRange(view, event) {
8757
function addsSelectionRange(view, event) {
8281
    let facet = view.state.facet(clickAddsSelectionRange);
8758
    let facet = view.state.facet(clickAddsSelectionRange);
Línea 8331... Línea 8808...
8331
        view.focus();
8808
        view.focus();
8332
        target.remove();
8809
        target.remove();
8333
        doPaste(view, target.value);
8810
        doPaste(view, target.value);
8334
    }, 50);
8811
    }, 50);
8335
}
8812
}
-
 
8813
function textFilter(state, facet, text) {
-
 
8814
    for (let filter of state.facet(facet))
-
 
8815
        text = filter(text, state);
-
 
8816
    return text;
-
 
8817
}
8336
function doPaste(view, input) {
8818
function doPaste(view, input) {
-
 
8819
    input = textFilter(view.state, clipboardInputFilter, input);
8337
    let { state } = view, changes, i = 1, text = state.toText(input);
8820
    let { state } = view, changes, i = 1, text = state.toText(input);
8338
    let byLine = text.lines == state.selection.ranges.length;
8821
    let byLine = text.lines == state.selection.ranges.length;
8339
    let linewise = lastLinewiseCopy != null && state.selection.ranges.every(r => r.empty) && lastLinewiseCopy == text.toString();
8822
    let linewise = lastLinewiseCopy != null && state.selection.ranges.every(r => r.empty) && lastLinewiseCopy == text.toString();
8340
    if (linewise) {
8823
    if (linewise) {
8341
        let lastLine = -1;
8824
        let lastLine = -1;
Línea 8368... Línea 8851...
8368
    view.inputState.lastScrollTop = view.scrollDOM.scrollTop;
8851
    view.inputState.lastScrollTop = view.scrollDOM.scrollTop;
8369
    view.inputState.lastScrollLeft = view.scrollDOM.scrollLeft;
8852
    view.inputState.lastScrollLeft = view.scrollDOM.scrollLeft;
8370
};
8853
};
8371
handlers.keydown = (view, event) => {
8854
handlers.keydown = (view, event) => {
8372
    view.inputState.setSelectionOrigin("select");
8855
    view.inputState.setSelectionOrigin("select");
8373
    if (event.keyCode == 27)
8856
    if (event.keyCode == 27 && view.inputState.tabFocusMode != 0)
8374
        view.inputState.lastEscPress = Date.now();
8857
        view.inputState.tabFocusMode = Date.now() + 2000;
8375
    return false;
8858
    return false;
8376
};
8859
};
8377
observers.touchstart = (view, e) => {
8860
observers.touchstart = (view, e) => {
8378
    view.inputState.lastTouchTime = Date.now();
8861
    view.inputState.lastTouchTime = Date.now();
8379
    view.inputState.setSelectionOrigin("select.pointer");
8862
    view.inputState.setSelectionOrigin("select.pointer");
Línea 8395... Línea 8878...
8395
        style = basicMouseSelection(view, event);
8878
        style = basicMouseSelection(view, event);
8396
    if (style) {
8879
    if (style) {
8397
        let mustFocus = !view.hasFocus;
8880
        let mustFocus = !view.hasFocus;
8398
        view.inputState.startMouseSelection(new MouseSelection(view, event, style, mustFocus));
8881
        view.inputState.startMouseSelection(new MouseSelection(view, event, style, mustFocus));
8399
        if (mustFocus)
8882
        if (mustFocus)
-
 
8883
            view.observer.ignore(() => {
8400
            view.observer.ignore(() => focusPreventScroll(view.contentDOM));
8884
                focusPreventScroll(view.contentDOM);
-
 
8885
                let active = view.root.activeElement;
-
 
8886
                if (active && !active.contains(view.contentDOM))
-
 
8887
                    active.blur();
-
 
8888
            });
8401
        let mouseSel = view.inputState.mouseSelection;
8889
        let mouseSel = view.inputState.mouseSelection;
8402
        if (mouseSel) {
8890
        if (mouseSel) {
8403
            mouseSel.start(event);
8891
            mouseSel.start(event);
8404
            return mouseSel.dragging === false;
8892
            return mouseSel.dragging === false;
8405
        }
8893
        }
Línea 8419... Línea 8907...
8419
        if (to < view.state.doc.length && to == line.to)
8907
        if (to < view.state.doc.length && to == line.to)
8420
            to++;
8908
            to++;
8421
        return EditorSelection.range(from, to);
8909
        return EditorSelection.range(from, to);
8422
    }
8910
    }
8423
}
8911
}
8424
let insideY = (y, rect) => y >= rect.top && y <= rect.bottom;
-
 
8425
let inside = (x, y, rect) => insideY(y, rect) && x >= rect.left && x <= rect.right;
8912
let inside = (x, y, rect) => y >= rect.top && y <= rect.bottom && x >= rect.left && x <= rect.right;
8426
// Try to determine, for the given coordinates, associated with the
8913
// Try to determine, for the given coordinates, associated with the
8427
// given position, whether they are related to the element before or
8914
// given position, whether they are related to the element before or
8428
// the element after the position.
8915
// the element after the position.
8429
function findPositionSide(view, pos, x, y) {
8916
function findPositionSide(view, pos, x, y) {
8430
    let line = LineView.find(view.docView, pos);
8917
    let line = LineView.find(view.docView, pos);
Línea 8442... Línea 8929...
8442
        return -1;
8929
        return -1;
8443
    let after = line.coordsAt(off, 1);
8930
    let after = line.coordsAt(off, 1);
8444
    if (after && inside(x, y, after))
8931
    if (after && inside(x, y, after))
8445
        return 1;
8932
        return 1;
8446
    // This is probably a line wrap point. Pick before if the point is
8933
    // This is probably a line wrap point. Pick before if the point is
8447
    // beside it.
8934
    // above its bottom.
8448
    return before && insideY(y, before) ? -1 : 1;
8935
    return before && before.bottom >= y ? -1 : 1;
8449
}
8936
}
8450
function queryPos(view, event) {
8937
function queryPos(view, event) {
8451
    let pos = view.posAtCoords({ x: event.clientX, y: event.clientY }, false);
8938
    let pos = view.posAtCoords({ x: event.clientX, y: event.clientY }, false);
8452
    return { pos, bias: findPositionSide(view, pos, event.clientX, event.clientY) };
8939
    return { pos, bias: findPositionSide(view, pos, event.clientX, event.clientY) };
8453
}
8940
}
Línea 8512... Línea 8999...
8512
    let { inputState } = view;
8999
    let { inputState } = view;
8513
    if (inputState.mouseSelection)
9000
    if (inputState.mouseSelection)
8514
        inputState.mouseSelection.dragging = true;
9001
        inputState.mouseSelection.dragging = true;
8515
    inputState.draggedContent = range;
9002
    inputState.draggedContent = range;
8516
    if (event.dataTransfer) {
9003
    if (event.dataTransfer) {
8517
        event.dataTransfer.setData("Text", view.state.sliceDoc(range.from, range.to));
9004
        event.dataTransfer.setData("Text", textFilter(view.state, clipboardOutputFilter, view.state.sliceDoc(range.from, range.to)));
8518
        event.dataTransfer.effectAllowed = "copyMove";
9005
        event.dataTransfer.effectAllowed = "copyMove";
8519
    }
9006
    }
8520
    return false;
9007
    return false;
8521
};
9008
};
8522
handlers.dragend = view => {
9009
handlers.dragend = view => {
8523
    view.inputState.draggedContent = null;
9010
    view.inputState.draggedContent = null;
8524
    return false;
9011
    return false;
8525
};
9012
};
8526
function dropText(view, event, text, direct) {
9013
function dropText(view, event, text, direct) {
-
 
9014
    text = textFilter(view.state, clipboardInputFilter, text);
8527
    if (!text)
9015
    if (!text)
8528
        return;
9016
        return;
8529
    let dropPos = view.posAtCoords({ x: event.clientX, y: event.clientY }, false);
9017
    let dropPos = view.posAtCoords({ x: event.clientX, y: event.clientY }, false);
8530
    let { draggedContent } = view.inputState;
9018
    let { draggedContent } = view.inputState;
8531
    let del = direct && draggedContent && dragMovesSelection(view, event)
9019
    let del = direct && draggedContent && dragMovesSelection(view, event)
Línea 8622... Línea 9110...
8622
            }
9110
            }
8623
            upto = line.number;
9111
            upto = line.number;
8624
        }
9112
        }
8625
        linewise = true;
9113
        linewise = true;
8626
    }
9114
    }
8627
    return { text: content.join(state.lineBreak), ranges, linewise };
9115
    return { text: textFilter(state, clipboardOutputFilter, content.join(state.lineBreak)), ranges, linewise };
8628
}
9116
}
8629
let lastLinewiseCopy = null;
9117
let lastLinewiseCopy = null;
8630
handlers.copy = handlers.cut = (view, event) => {
9118
handlers.copy = handlers.cut = (view, event) => {
8631
    let { text, ranges, linewise } = copiedRange(view.state);
9119
    let { text, ranges, linewise } = copiedRange(view.state);
8632
    if (!text && !linewise)
9120
    if (!text && !linewise)
Línea 8683... Línea 9171...
8683
observers.blur = view => {
9171
observers.blur = view => {
8684
    view.observer.clearSelectionRange();
9172
    view.observer.clearSelectionRange();
8685
    updateForFocusChange(view);
9173
    updateForFocusChange(view);
8686
};
9174
};
8687
observers.compositionstart = observers.compositionupdate = view => {
9175
observers.compositionstart = observers.compositionupdate = view => {
-
 
9176
    if (view.observer.editContext)
-
 
9177
        return; // Composition handled by edit context
8688
    if (view.inputState.compositionFirstChange == null)
9178
    if (view.inputState.compositionFirstChange == null)
8689
        view.inputState.compositionFirstChange = true;
9179
        view.inputState.compositionFirstChange = true;
8690
    if (view.inputState.composing < 0) {
9180
    if (view.inputState.composing < 0) {
8691
        // FIXME possibly set a timeout to clear it again on Android
9181
        // FIXME possibly set a timeout to clear it again on Android
8692
        view.inputState.composing = 0;
9182
        view.inputState.composing = 0;
8693
    }
9183
    }
8694
};
9184
};
8695
observers.compositionend = view => {
9185
observers.compositionend = view => {
-
 
9186
    if (view.observer.editContext)
-
 
9187
        return; // Composition handled by edit context
8696
    view.inputState.composing = -1;
9188
    view.inputState.composing = -1;
8697
    view.inputState.compositionEndedAt = Date.now();
9189
    view.inputState.compositionEndedAt = Date.now();
8698
    view.inputState.compositionPendingKey = true;
9190
    view.inputState.compositionPendingKey = true;
8699
    view.inputState.compositionPendingChange = view.observer.pendingRecords().length > 0;
9191
    view.inputState.compositionPendingChange = view.observer.pendingRecords().length > 0;
8700
    view.inputState.compositionFirstChange = null;
9192
    view.inputState.compositionFirstChange = null;
Línea 8718... Línea 9210...
8718
};
9210
};
8719
observers.contextmenu = view => {
9211
observers.contextmenu = view => {
8720
    view.inputState.lastContextMenu = Date.now();
9212
    view.inputState.lastContextMenu = Date.now();
8721
};
9213
};
8722
handlers.beforeinput = (view, event) => {
9214
handlers.beforeinput = (view, event) => {
8723
    var _a;
9215
    var _a, _b;
-
 
9216
    // In EditContext mode, we must handle insertReplacementText events
-
 
9217
    // directly, to make spell checking corrections work
-
 
9218
    if (event.inputType == "insertReplacementText" && view.observer.editContext) {
-
 
9219
        let text = (_a = event.dataTransfer) === null || _a === void 0 ? void 0 : _a.getData("text/plain"), ranges = event.getTargetRanges();
-
 
9220
        if (text && ranges.length) {
-
 
9221
            let r = ranges[0];
-
 
9222
            let from = view.posAtDOM(r.startContainer, r.startOffset), to = view.posAtDOM(r.endContainer, r.endOffset);
-
 
9223
            applyDOMChangeInner(view, { from, to, insert: view.state.toText(text) }, null);
-
 
9224
            return true;
-
 
9225
        }
-
 
9226
    }
8724
    // Because Chrome Android doesn't fire useful key events, use
9227
    // Because Chrome Android doesn't fire useful key events, use
8725
    // beforeinput to detect backspace (and possibly enter and delete,
9228
    // beforeinput to detect backspace (and possibly enter and delete,
8726
    // but those usually don't even seem to fire beforeinput events at
9229
    // but those usually don't even seem to fire beforeinput events at
8727
    // the moment) and fake a key event for it.
9230
    // the moment) and fake a key event for it.
8728
    //
9231
    //
Línea 8730... Línea 9233...
8730
    // seems to do nothing at all on Chrome).
9233
    // seems to do nothing at all on Chrome).
8731
    let pending;
9234
    let pending;
8732
    if (browser.chrome && browser.android && (pending = PendingKeys.find(key => key.inputType == event.inputType))) {
9235
    if (browser.chrome && browser.android && (pending = PendingKeys.find(key => key.inputType == event.inputType))) {
8733
        view.observer.delayAndroidKey(pending.key, pending.keyCode);
9236
        view.observer.delayAndroidKey(pending.key, pending.keyCode);
8734
        if (pending.key == "Backspace" || pending.key == "Delete") {
9237
        if (pending.key == "Backspace" || pending.key == "Delete") {
8735
            let startViewHeight = ((_a = window.visualViewport) === null || _a === void 0 ? void 0 : _a.height) || 0;
9238
            let startViewHeight = ((_b = window.visualViewport) === null || _b === void 0 ? void 0 : _b.height) || 0;
8736
            setTimeout(() => {
9239
            setTimeout(() => {
8737
                var _a;
9240
                var _a;
8738
                // Backspacing near uneditable nodes on Chrome Android sometimes
9241
                // Backspacing near uneditable nodes on Chrome Android sometimes
8739
                // closes the virtual keyboard. This tries to crudely detect
9242
                // closes the virtual keyboard. This tries to crudely detect
8740
                // that and refocus to get it back.
9243
                // that and refocus to get it back.
Línea 8769... Línea 9272...
8769
        doc.addEventListener("cut", () => { });
9272
        doc.addEventListener("cut", () => { });
8770
    }
9273
    }
8771
}
9274
}
Línea 8772... Línea 9275...
8772
 
9275
 
-
 
9276
const wrappingWhiteSpace = ["pre-wrap", "normal", "pre-line", "break-spaces"];
-
 
9277
// Used to track, during updateHeight, if any actual heights changed
-
 
9278
let heightChangeFlag = false;
8773
const wrappingWhiteSpace = ["pre-wrap", "normal", "pre-line", "break-spaces"];
9279
function clearHeightChangeFlag() { heightChangeFlag = false; }
8774
class HeightOracle {
9280
class HeightOracle {
8775
    constructor(lineWrapping) {
9281
    constructor(lineWrapping) {
8776
        this.lineWrapping = lineWrapping;
9282
        this.lineWrapping = lineWrapping;
8777
        this.doc = Text.empty;
9283
        this.doc = Text.empty;
8778
        this.heightSamples = {};
9284
        this.heightSamples = {};
8779
        this.lineHeight = 14; // The height of an entire line (line-height)
9285
        this.lineHeight = 14; // The height of an entire line (line-height)
8780
        this.charWidth = 7;
9286
        this.charWidth = 7;
8781
        this.textHeight = 14; // The height of the actual font (font-size)
9287
        this.textHeight = 14; // The height of the actual font (font-size)
8782
        this.lineLength = 30;
-
 
8783
        // Used to track, during updateHeight, if any actual heights changed
-
 
8784
        this.heightChanged = false;
9288
        this.lineLength = 30;
8785
    }
9289
    }
8786
    heightForGap(from, to) {
9290
    heightForGap(from, to) {
8787
        let lines = this.doc.lineAt(to).number - this.doc.lineAt(from).number + 1;
9291
        let lines = this.doc.lineAt(to).number - this.doc.lineAt(from).number + 1;
8788
        if (this.lineWrapping)
9292
        if (this.lineWrapping)
Línea 8936... Línea 9440...
8936
        this.length = length;
9440
        this.length = length;
8937
        this.height = height;
9441
        this.height = height;
8938
        this.flags = flags;
9442
        this.flags = flags;
8939
    }
9443
    }
8940
    get outdated() { return (this.flags & 2 /* Flag.Outdated */) > 0; }
9444
    get outdated() { return (this.flags & 2 /* Flag.Outdated */) > 0; }
8941
    set outdated(value) { this.flags = (value ? 2 /* Flag.Outdated */ : 0) | (this.flags & ~2 /* Flag.Outdated */); }
9445
    set outdated(value) { this.flags = (value ? 2 /* Flag.Outdated */ : 0) | (this.flags & -3 /* Flag.Outdated */); }
8942
    setHeight(oracle, height) {
9446
    setHeight(height) {
8943
        if (this.height != height) {
9447
        if (this.height != height) {
8944
            if (Math.abs(this.height - height) > Epsilon)
9448
            if (Math.abs(this.height - height) > Epsilon)
8945
                oracle.heightChanged = true;
9449
                heightChangeFlag = true;
8946
            this.height = height;
9450
            this.height = height;
8947
        }
9451
        }
8948
    }
9452
    }
8949
    // Base case is to replace a leaf node, which simply builds a tree
9453
    // Base case is to replace a leaf node, which simply builds a tree
8950
    // from the new nodes and returns that (HeightMapBranch and
9454
    // from the new nodes and returns that (HeightMapBranch and
Línea 8971... Línea 9475...
8971
                    start = me.lineAt(fromA, QueryType$1.ByPosNoHeight, oracle, 0, 0);
9475
                    start = me.lineAt(fromA, QueryType$1.ByPosNoHeight, oracle, 0, 0);
8972
            }
9476
            }
8973
            fromB += start.from - fromA;
9477
            fromB += start.from - fromA;
8974
            fromA = start.from;
9478
            fromA = start.from;
8975
            let nodes = NodeBuilder.build(oracle.setDoc(doc), decorations, fromB, toB);
9479
            let nodes = NodeBuilder.build(oracle.setDoc(doc), decorations, fromB, toB);
8976
            me = me.replace(fromA, toA, nodes);
9480
            me = replace(me, me.replace(fromA, toA, nodes));
8977
        }
9481
        }
8978
        return me.updateHeight(oracle, 0);
9482
        return me.updateHeight(oracle, 0);
8979
    }
9483
    }
8980
    static empty() { return new HeightMapText(0, 0); }
9484
    static empty() { return new HeightMapText(0, 0); }
8981
    // nodes uses null values to indicate the position of line breaks.
9485
    // nodes uses null values to indicate the position of line breaks.
Línea 9031... Línea 9535...
9031
            j++;
9535
            j++;
9032
        }
9536
        }
9033
        return new HeightMapBranch(HeightMap.of(nodes.slice(0, i)), brk, HeightMap.of(nodes.slice(j)));
9537
        return new HeightMapBranch(HeightMap.of(nodes.slice(0, i)), brk, HeightMap.of(nodes.slice(j)));
9034
    }
9538
    }
9035
}
9539
}
-
 
9540
function replace(old, val) {
-
 
9541
    if (old == val)
-
 
9542
        return old;
-
 
9543
    if (old.constructor != val.constructor)
-
 
9544
        heightChangeFlag = true;
-
 
9545
    return val;
-
 
9546
}
9036
HeightMap.prototype.size = 1;
9547
HeightMap.prototype.size = 1;
9037
class HeightMapBlock extends HeightMap {
9548
class HeightMapBlock extends HeightMap {
9038
    constructor(length, height, deco) {
9549
    constructor(length, height, deco) {
9039
        super(length, height);
9550
        super(length, height);
9040
        this.deco = deco;
9551
        this.deco = deco;
Línea 9049... Línea 9560...
9049
        if (from <= offset + this.length && to >= offset)
9560
        if (from <= offset + this.length && to >= offset)
9050
            f(this.blockAt(0, oracle, top, offset));
9561
            f(this.blockAt(0, oracle, top, offset));
9051
    }
9562
    }
9052
    updateHeight(oracle, offset = 0, _force = false, measured) {
9563
    updateHeight(oracle, offset = 0, _force = false, measured) {
9053
        if (measured && measured.from <= offset && measured.more)
9564
        if (measured && measured.from <= offset && measured.more)
9054
            this.setHeight(oracle, measured.heights[measured.index++]);
9565
            this.setHeight(measured.heights[measured.index++]);
9055
        this.outdated = false;
9566
        this.outdated = false;
9056
        return this;
9567
        return this;
9057
    }
9568
    }
9058
    toString() { return `block(${this.length})`; }
9569
    toString() { return `block(${this.length})`; }
9059
}
9570
}
Línea 9083... Línea 9594...
9083
            return HeightMap.of(nodes);
9594
            return HeightMap.of(nodes);
9084
        }
9595
        }
9085
    }
9596
    }
9086
    updateHeight(oracle, offset = 0, force = false, measured) {
9597
    updateHeight(oracle, offset = 0, force = false, measured) {
9087
        if (measured && measured.from <= offset && measured.more)
9598
        if (measured && measured.from <= offset && measured.more)
9088
            this.setHeight(oracle, measured.heights[measured.index++]);
9599
            this.setHeight(measured.heights[measured.index++]);
9089
        else if (force || this.outdated)
9600
        else if (force || this.outdated)
9090
            this.setHeight(oracle, Math.max(this.widgetHeight, oracle.heightForLine(this.length - this.collapsed)) +
9601
            this.setHeight(Math.max(this.widgetHeight, oracle.heightForLine(this.length - this.collapsed)) +
9091
                this.breaks * oracle.lineHeight);
9602
                this.breaks * oracle.lineHeight);
9092
        this.outdated = false;
9603
        this.outdated = false;
9093
        return this;
9604
        return this;
9094
    }
9605
    }
9095
    toString() {
9606
    toString() {
Línea 9208... Línea 9719...
9208
            if (pos <= end)
9719
            if (pos <= end)
9209
                nodes.push(null, new HeightMapGap(end - pos).updateHeight(oracle, pos));
9720
                nodes.push(null, new HeightMapGap(end - pos).updateHeight(oracle, pos));
9210
            let result = HeightMap.of(nodes);
9721
            let result = HeightMap.of(nodes);
9211
            if (singleHeight < 0 || Math.abs(result.height - this.height) >= Epsilon ||
9722
            if (singleHeight < 0 || Math.abs(result.height - this.height) >= Epsilon ||
9212
                Math.abs(singleHeight - this.heightMetrics(oracle, offset).perLine) >= Epsilon)
9723
                Math.abs(singleHeight - this.heightMetrics(oracle, offset).perLine) >= Epsilon)
9213
                oracle.heightChanged = true;
9724
                heightChangeFlag = true;
9214
            return result;
9725
            return replace(this, result);
9215
        }
9726
        }
9216
        else if (force || this.outdated) {
9727
        else if (force || this.outdated) {
9217
            this.setHeight(oracle, oracle.heightForGap(offset, offset + this.length));
9728
            this.setHeight(oracle.heightForGap(offset, offset + this.length));
9218
            this.outdated = false;
9729
            this.outdated = false;
9219
        }
9730
        }
9220
        return this;
9731
        return this;
9221
    }
9732
    }
9222
    toString() { return `gap(${this.length})`; }
9733
    toString() { return `gap(${this.length})`; }
Línea 9310... Línea 9821...
9310
        result.push(this.right);
9821
        result.push(this.right);
9311
    }
9822
    }
9312
    balanced(left, right) {
9823
    balanced(left, right) {
9313
        if (left.size > 2 * right.size || right.size > 2 * left.size)
9824
        if (left.size > 2 * right.size || right.size > 2 * left.size)
9314
            return HeightMap.of(this.break ? [left, null, right] : [left, right]);
9825
            return HeightMap.of(this.break ? [left, null, right] : [left, right]);
9315
        this.left = left;
9826
        this.left = replace(this.left, left);
9316
        this.right = right;
9827
        this.right = replace(this.right, right);
9317
        this.height = left.height + right.height;
9828
        this.setHeight(left.height + right.height);
9318
        this.outdated = left.outdated || right.outdated;
9829
        this.outdated = left.outdated || right.outdated;
9319
        this.size = left.size + right.size;
9830
        this.size = left.size + right.size;
9320
        this.length = left.length + this.break + right.length;
9831
        this.length = left.length + this.break + right.length;
9321
        return this;
9832
        return this;
9322
    }
9833
    }
Línea 9497... Línea 10008...
9497
                style.overflow != "visible") {
10008
                style.overflow != "visible") {
9498
                let parentRect = elt.getBoundingClientRect();
10009
                let parentRect = elt.getBoundingClientRect();
9499
                left = Math.max(left, parentRect.left);
10010
                left = Math.max(left, parentRect.left);
9500
                right = Math.min(right, parentRect.right);
10011
                right = Math.min(right, parentRect.right);
9501
                top = Math.max(top, parentRect.top);
10012
                top = Math.max(top, parentRect.top);
9502
                bottom = parent == dom.parentNode ? parentRect.bottom : Math.min(bottom, parentRect.bottom);
10013
                bottom = Math.min(parent == dom.parentNode ? win.innerHeight : bottom, parentRect.bottom);
9503
            }
10014
            }
9504
            parent = style.position == "absolute" || style.position == "fixed" ? elt.offsetParent : elt.parentNode;
10015
            parent = style.position == "absolute" || style.position == "fixed" ? elt.offsetParent : elt.parentNode;
9505
        }
10016
        }
9506
        else if (parent.nodeType == 11) { // Shadow root
10017
        else if (parent.nodeType == 11) { // Shadow root
9507
            parent = parent.host;
10018
            parent = parent.host;
Línea 9511... Línea 10022...
9511
        }
10022
        }
9512
    }
10023
    }
9513
    return { left: left - rect.left, right: Math.max(left, right) - rect.left,
10024
    return { left: left - rect.left, right: Math.max(left, right) - rect.left,
9514
        top: top - (rect.top + paddingTop), bottom: Math.max(top, bottom) - (rect.top + paddingTop) };
10025
        top: top - (rect.top + paddingTop), bottom: Math.max(top, bottom) - (rect.top + paddingTop) };
9515
}
10026
}
-
 
10027
function inWindow(elt) {
-
 
10028
    let rect = elt.getBoundingClientRect(), win = elt.ownerDocument.defaultView || window;
-
 
10029
    return rect.left < win.innerWidth && rect.right > 0 &&
-
 
10030
        rect.top < win.innerHeight && rect.bottom > 0;
-
 
10031
}
9516
function fullPixelRange(dom, paddingTop) {
10032
function fullPixelRange(dom, paddingTop) {
9517
    let rect = dom.getBoundingClientRect();
10033
    let rect = dom.getBoundingClientRect();
9518
    return { left: 0, right: rect.right - rect.left,
10034
    return { left: 0, right: rect.right - rect.left,
9519
        top: paddingTop, bottom: rect.bottom - (rect.top + paddingTop) };
10035
        top: paddingTop, bottom: rect.bottom - (rect.top + paddingTop) };
9520
}
10036
}
9521
// Line gaps are placeholder widgets used to hide pieces of overlong
10037
// Line gaps are placeholder widgets used to hide pieces of overlong
9522
// lines within the viewport, as a kludge to keep the editor
10038
// lines within the viewport, as a kludge to keep the editor
9523
// responsive when a ridiculously long line is loaded into it.
10039
// responsive when a ridiculously long line is loaded into it.
9524
class LineGap {
10040
class LineGap {
9525
    constructor(from, to, size) {
10041
    constructor(from, to, size, displaySize) {
9526
        this.from = from;
10042
        this.from = from;
9527
        this.to = to;
10043
        this.to = to;
9528
        this.size = size;
10044
        this.size = size;
-
 
10045
        this.displaySize = displaySize;
9529
    }
10046
    }
9530
    static same(a, b) {
10047
    static same(a, b) {
9531
        if (a.length != b.length)
10048
        if (a.length != b.length)
9532
            return false;
10049
            return false;
9533
        for (let i = 0; i < a.length; i++) {
10050
        for (let i = 0; i < a.length; i++) {
Línea 9537... Línea 10054...
9537
        }
10054
        }
9538
        return true;
10055
        return true;
9539
    }
10056
    }
9540
    draw(viewState, wrapping) {
10057
    draw(viewState, wrapping) {
9541
        return Decoration.replace({
10058
        return Decoration.replace({
9542
            widget: new LineGapWidget(this.size * (wrapping ? viewState.scaleY : viewState.scaleX), wrapping)
10059
            widget: new LineGapWidget(this.displaySize * (wrapping ? viewState.scaleY : viewState.scaleX), wrapping)
9543
        }).range(this.from, this.to);
10060
        }).range(this.from, this.to);
9544
    }
10061
    }
9545
}
10062
}
9546
class LineGapWidget extends WidgetType {
10063
class LineGapWidget extends WidgetType {
9547
    constructor(size, vertical) {
10064
    constructor(size, vertical) {
Línea 9575... Línea 10092...
9575
        this.contentDOMWidth = 0; // contentDOM.getBoundingClientRect().width
10092
        this.contentDOMWidth = 0; // contentDOM.getBoundingClientRect().width
9576
        this.contentDOMHeight = 0; // contentDOM.getBoundingClientRect().height
10093
        this.contentDOMHeight = 0; // contentDOM.getBoundingClientRect().height
9577
        this.editorHeight = 0; // scrollDOM.clientHeight, unscaled
10094
        this.editorHeight = 0; // scrollDOM.clientHeight, unscaled
9578
        this.editorWidth = 0; // scrollDOM.clientWidth, unscaled
10095
        this.editorWidth = 0; // scrollDOM.clientWidth, unscaled
9579
        this.scrollTop = 0; // Last seen scrollDOM.scrollTop, scaled
10096
        this.scrollTop = 0; // Last seen scrollDOM.scrollTop, scaled
9580
        this.scrolledToBottom = true;
10097
        this.scrolledToBottom = false;
9581
        // The CSS-transformation scale of the editor (transformed size /
10098
        // The CSS-transformation scale of the editor (transformed size /
9582
        // concrete size)
10099
        // concrete size)
9583
        this.scaleX = 1;
10100
        this.scaleX = 1;
9584
        this.scaleY = 1;
10101
        this.scaleY = 1;
9585
        // The vertical position (document-relative) to which to anchor the
10102
        // The vertical position (document-relative) to which to anchor the
Línea 9609... Línea 10126...
9609
        this.mustEnforceCursorAssoc = false;
10126
        this.mustEnforceCursorAssoc = false;
9610
        let guessWrapping = state.facet(contentAttributes).some(v => typeof v != "function" && v.class == "cm-lineWrapping");
10127
        let guessWrapping = state.facet(contentAttributes).some(v => typeof v != "function" && v.class == "cm-lineWrapping");
9611
        this.heightOracle = new HeightOracle(guessWrapping);
10128
        this.heightOracle = new HeightOracle(guessWrapping);
9612
        this.stateDeco = state.facet(decorations).filter(d => typeof d != "function");
10129
        this.stateDeco = state.facet(decorations).filter(d => typeof d != "function");
9613
        this.heightMap = HeightMap.empty().applyChanges(this.stateDeco, Text.empty, this.heightOracle.setDoc(state.doc), [new ChangedRange(0, 0, 0, state.doc.length)]);
10130
        this.heightMap = HeightMap.empty().applyChanges(this.stateDeco, Text.empty, this.heightOracle.setDoc(state.doc), [new ChangedRange(0, 0, 0, state.doc.length)]);
-
 
10131
        for (let i = 0; i < 2; i++) {
9614
        this.viewport = this.getViewport(0, null);
10132
            this.viewport = this.getViewport(0, null);
-
 
10133
            if (!this.updateForViewport())
-
 
10134
                break;
-
 
10135
        }
9615
        this.updateViewportLines();
10136
        this.updateViewportLines();
9616
        this.updateForViewport();
-
 
9617
        this.lineGaps = this.ensureLineGaps([]);
10137
        this.lineGaps = this.ensureLineGaps([]);
9618
        this.lineGapDeco = Decoration.set(this.lineGaps.map(gap => gap.draw(this, false)));
10138
        this.lineGapDeco = Decoration.set(this.lineGaps.map(gap => gap.draw(this, false)));
9619
        this.computeVisibleRanges();
10139
        this.computeVisibleRanges();
9620
    }
10140
    }
9621
    updateForViewport() {
10141
    updateForViewport() {
Línea 9626... Línea 10146...
9626
                let { from, to } = this.lineBlockAt(pos);
10146
                let { from, to } = this.lineBlockAt(pos);
9627
                viewports.push(new Viewport(from, to));
10147
                viewports.push(new Viewport(from, to));
9628
            }
10148
            }
9629
        }
10149
        }
9630
        this.viewports = viewports.sort((a, b) => a.from - b.from);
10150
        this.viewports = viewports.sort((a, b) => a.from - b.from);
-
 
10151
        return this.updateScaler();
-
 
10152
    }
-
 
10153
    updateScaler() {
-
 
10154
        let scaler = this.scaler;
9631
        this.scaler = this.heightMap.height <= 7000000 /* VP.MaxDOMHeight */ ? IdScaler :
10155
        this.scaler = this.heightMap.height <= 7000000 /* VP.MaxDOMHeight */ ? IdScaler :
9632
            new BigScaler(this.heightOracle, this.heightMap, this.viewports);
10156
            new BigScaler(this.heightOracle, this.heightMap, this.viewports);
-
 
10157
        return scaler.eq(this.scaler) ? 0 : 2 /* UpdateFlag.Height */;
9633
    }
10158
    }
9634
    updateViewportLines() {
10159
    updateViewportLines() {
9635
        this.viewportLines = [];
10160
        this.viewportLines = [];
9636
        this.heightMap.forEachLine(this.viewport.from, this.viewport.to, this.heightOracle.setDoc(this.state.doc), 0, 0, block => {
10161
        this.heightMap.forEachLine(this.viewport.from, this.viewport.to, this.heightOracle.setDoc(this.state.doc), 0, 0, block => {
9637
            this.viewportLines.push(this.scaler.scale == 1 ? block : scaleBlock(block, this.scaler));
10162
            this.viewportLines.push(scaleBlock(block, this.scaler));
9638
        });
10163
        });
9639
    }
10164
    }
9640
    update(update, scrollTarget = null) {
10165
    update(update, scrollTarget = null) {
9641
        this.state = update.state;
10166
        this.state = update.state;
9642
        let prevDeco = this.stateDeco;
10167
        let prevDeco = this.stateDeco;
9643
        this.stateDeco = this.state.facet(decorations).filter(d => typeof d != "function");
10168
        this.stateDeco = this.state.facet(decorations).filter(d => typeof d != "function");
9644
        let contentChanges = update.changedRanges;
10169
        let contentChanges = update.changedRanges;
9645
        let heightChanges = ChangedRange.extendWithRanges(contentChanges, heightRelevantDecoChanges(prevDeco, this.stateDeco, update ? update.changes : ChangeSet.empty(this.state.doc.length)));
10170
        let heightChanges = ChangedRange.extendWithRanges(contentChanges, heightRelevantDecoChanges(prevDeco, this.stateDeco, update ? update.changes : ChangeSet.empty(this.state.doc.length)));
9646
        let prevHeight = this.heightMap.height;
10171
        let prevHeight = this.heightMap.height;
9647
        let scrollAnchor = this.scrolledToBottom ? null : this.scrollAnchorAt(this.scrollTop);
10172
        let scrollAnchor = this.scrolledToBottom ? null : this.scrollAnchorAt(this.scrollTop);
-
 
10173
        clearHeightChangeFlag();
9648
        this.heightMap = this.heightMap.applyChanges(this.stateDeco, update.startState.doc, this.heightOracle.setDoc(this.state.doc), heightChanges);
10174
        this.heightMap = this.heightMap.applyChanges(this.stateDeco, update.startState.doc, this.heightOracle.setDoc(this.state.doc), heightChanges);
9649
        if (this.heightMap.height != prevHeight)
10175
        if (this.heightMap.height != prevHeight || heightChangeFlag)
9650
            update.flags |= 2 /* UpdateFlag.Height */;
10176
            update.flags |= 2 /* UpdateFlag.Height */;
9651
        if (scrollAnchor) {
10177
        if (scrollAnchor) {
9652
            this.scrollAnchorPos = update.changes.mapPos(scrollAnchor.from, -1);
10178
            this.scrollAnchorPos = update.changes.mapPos(scrollAnchor.from, -1);
9653
            this.scrollAnchorHeight = scrollAnchor.top;
10179
            this.scrollAnchorHeight = scrollAnchor.top;
9654
        }
10180
        }
Línea 9658... Línea 10184...
9658
        }
10184
        }
9659
        let viewport = heightChanges.length ? this.mapViewport(this.viewport, update.changes) : this.viewport;
10185
        let viewport = heightChanges.length ? this.mapViewport(this.viewport, update.changes) : this.viewport;
9660
        if (scrollTarget && (scrollTarget.range.head < viewport.from || scrollTarget.range.head > viewport.to) ||
10186
        if (scrollTarget && (scrollTarget.range.head < viewport.from || scrollTarget.range.head > viewport.to) ||
9661
            !this.viewportIsAppropriate(viewport))
10187
            !this.viewportIsAppropriate(viewport))
9662
            viewport = this.getViewport(0, scrollTarget);
10188
            viewport = this.getViewport(0, scrollTarget);
9663
        let updateLines = !update.changes.empty || (update.flags & 2 /* UpdateFlag.Height */) ||
-
 
9664
            viewport.from != this.viewport.from || viewport.to != this.viewport.to;
10189
        let viewportChange = viewport.from != this.viewport.from || viewport.to != this.viewport.to;
9665
        this.viewport = viewport;
10190
        this.viewport = viewport;
9666
        this.updateForViewport();
10191
        update.flags |= this.updateForViewport();
9667
        if (updateLines)
10192
        if (viewportChange || !update.changes.empty || (update.flags & 2 /* UpdateFlag.Height */))
9668
            this.updateViewportLines();
10193
            this.updateViewportLines();
9669
        if (this.lineGaps.length || this.viewport.to - this.viewport.from > (2000 /* LG.Margin */ << 1))
10194
        if (this.lineGaps.length || this.viewport.to - this.viewport.from > (2000 /* LG.Margin */ << 1))
9670
            this.updateLineGaps(this.ensureLineGaps(this.mapLineGaps(this.lineGaps, update.changes)));
10195
            this.updateLineGaps(this.ensureLineGaps(this.mapLineGaps(this.lineGaps, update.changes)));
9671
        update.flags |= this.computeVisibleRanges();
10196
        update.flags |= this.computeVisibleRanges(update.changes);
9672
        if (scrollTarget)
10197
        if (scrollTarget)
9673
            this.scrollTarget = scrollTarget;
10198
            this.scrollTarget = scrollTarget;
9674
        if (!this.mustEnforceCursorAssoc && update.selectionSet && update.view.lineWrapping &&
10199
        if (!this.mustEnforceCursorAssoc && update.selectionSet && update.view.lineWrapping &&
9675
            update.state.selection.main.empty && update.state.selection.main.assoc &&
10200
            update.state.selection.main.empty && update.state.selection.main.assoc &&
9676
            !update.state.facet(nativeSelectionHidden))
10201
            !update.state.facet(nativeSelectionHidden))
Línea 9691... Línea 10216...
9691
            let { scaleX, scaleY } = getScale(dom, domRect);
10216
            let { scaleX, scaleY } = getScale(dom, domRect);
9692
            if (scaleX > .005 && Math.abs(this.scaleX - scaleX) > .005 ||
10217
            if (scaleX > .005 && Math.abs(this.scaleX - scaleX) > .005 ||
9693
                scaleY > .005 && Math.abs(this.scaleY - scaleY) > .005) {
10218
                scaleY > .005 && Math.abs(this.scaleY - scaleY) > .005) {
9694
                this.scaleX = scaleX;
10219
                this.scaleX = scaleX;
9695
                this.scaleY = scaleY;
10220
                this.scaleY = scaleY;
9696
                result |= 8 /* UpdateFlag.Geometry */;
10221
                result |= 16 /* UpdateFlag.Geometry */;
9697
                refresh = measureContent = true;
10222
                refresh = measureContent = true;
9698
            }
10223
            }
9699
        }
10224
        }
9700
        // Vertical padding
10225
        // Vertical padding
9701
        let paddingTop = (parseInt(style.paddingTop) || 0) * this.scaleY;
10226
        let paddingTop = (parseInt(style.paddingTop) || 0) * this.scaleY;
9702
        let paddingBottom = (parseInt(style.paddingBottom) || 0) * this.scaleY;
10227
        let paddingBottom = (parseInt(style.paddingBottom) || 0) * this.scaleY;
9703
        if (this.paddingTop != paddingTop || this.paddingBottom != paddingBottom) {
10228
        if (this.paddingTop != paddingTop || this.paddingBottom != paddingBottom) {
9704
            this.paddingTop = paddingTop;
10229
            this.paddingTop = paddingTop;
9705
            this.paddingBottom = paddingBottom;
10230
            this.paddingBottom = paddingBottom;
9706
            result |= 8 /* UpdateFlag.Geometry */ | 2 /* UpdateFlag.Height */;
10231
            result |= 16 /* UpdateFlag.Geometry */ | 2 /* UpdateFlag.Height */;
9707
        }
10232
        }
9708
        if (this.editorWidth != view.scrollDOM.clientWidth) {
10233
        if (this.editorWidth != view.scrollDOM.clientWidth) {
9709
            if (oracle.lineWrapping)
10234
            if (oracle.lineWrapping)
9710
                measureContent = true;
10235
                measureContent = true;
9711
            this.editorWidth = view.scrollDOM.clientWidth;
10236
            this.editorWidth = view.scrollDOM.clientWidth;
9712
            result |= 8 /* UpdateFlag.Geometry */;
10237
            result |= 16 /* UpdateFlag.Geometry */;
9713
        }
10238
        }
9714
        let scrollTop = view.scrollDOM.scrollTop * this.scaleY;
10239
        let scrollTop = view.scrollDOM.scrollTop * this.scaleY;
9715
        if (this.scrollTop != scrollTop) {
10240
        if (this.scrollTop != scrollTop) {
9716
            this.scrollAnchorHeight = -1;
10241
            this.scrollAnchorHeight = -1;
9717
            this.scrollTop = scrollTop;
10242
            this.scrollTop = scrollTop;
Línea 9725... Línea 10250...
9725
        if (inView != this.inView) {
10250
        if (inView != this.inView) {
9726
            this.inView = inView;
10251
            this.inView = inView;
9727
            if (inView)
10252
            if (inView)
9728
                measureContent = true;
10253
                measureContent = true;
9729
        }
10254
        }
9730
        if (!this.inView && !this.scrollTarget)
10255
        if (!this.inView && !this.scrollTarget && !inWindow(view.dom))
9731
            return 0;
10256
            return 0;
9732
        let contentWidth = domRect.width;
10257
        let contentWidth = domRect.width;
9733
        if (this.contentDOMWidth != contentWidth || this.editorHeight != view.scrollDOM.clientHeight) {
10258
        if (this.contentDOMWidth != contentWidth || this.editorHeight != view.scrollDOM.clientHeight) {
9734
            this.contentDOMWidth = domRect.width;
10259
            this.contentDOMWidth = domRect.width;
9735
            this.editorHeight = view.scrollDOM.clientHeight;
10260
            this.editorHeight = view.scrollDOM.clientHeight;
9736
            result |= 8 /* UpdateFlag.Geometry */;
10261
            result |= 16 /* UpdateFlag.Geometry */;
9737
        }
10262
        }
9738
        if (measureContent) {
10263
        if (measureContent) {
9739
            let lineHeights = view.docView.measureVisibleLineHeights(this.viewport);
10264
            let lineHeights = view.docView.measureVisibleLineHeights(this.viewport);
9740
            if (oracle.mustRefreshForHeights(lineHeights))
10265
            if (oracle.mustRefreshForHeights(lineHeights))
9741
                refresh = true;
10266
                refresh = true;
9742
            if (refresh || oracle.lineWrapping && Math.abs(contentWidth - this.contentDOMWidth) > oracle.charWidth) {
10267
            if (refresh || oracle.lineWrapping && Math.abs(contentWidth - this.contentDOMWidth) > oracle.charWidth) {
9743
                let { lineHeight, charWidth, textHeight } = view.docView.measureTextSize();
10268
                let { lineHeight, charWidth, textHeight } = view.docView.measureTextSize();
9744
                refresh = lineHeight > 0 && oracle.refresh(whiteSpace, lineHeight, charWidth, textHeight, contentWidth / charWidth, lineHeights);
10269
                refresh = lineHeight > 0 && oracle.refresh(whiteSpace, lineHeight, charWidth, textHeight, contentWidth / charWidth, lineHeights);
9745
                if (refresh) {
10270
                if (refresh) {
9746
                    view.docView.minWidth = 0;
10271
                    view.docView.minWidth = 0;
9747
                    result |= 8 /* UpdateFlag.Geometry */;
10272
                    result |= 16 /* UpdateFlag.Geometry */;
9748
                }
10273
                }
9749
            }
10274
            }
9750
            if (dTop > 0 && dBottom > 0)
10275
            if (dTop > 0 && dBottom > 0)
9751
                bias = Math.max(dTop, dBottom);
10276
                bias = Math.max(dTop, dBottom);
9752
            else if (dTop < 0 && dBottom < 0)
10277
            else if (dTop < 0 && dBottom < 0)
9753
                bias = Math.min(dTop, dBottom);
10278
                bias = Math.min(dTop, dBottom);
9754
            oracle.heightChanged = false;
10279
            clearHeightChangeFlag();
9755
            for (let vp of this.viewports) {
10280
            for (let vp of this.viewports) {
9756
                let heights = vp.from == this.viewport.from ? lineHeights : view.docView.measureVisibleLineHeights(vp);
10281
                let heights = vp.from == this.viewport.from ? lineHeights : view.docView.measureVisibleLineHeights(vp);
9757
                this.heightMap = (refresh ? HeightMap.empty().applyChanges(this.stateDeco, Text.empty, this.heightOracle, [new ChangedRange(0, 0, 0, view.state.doc.length)]) : this.heightMap).updateHeight(oracle, 0, refresh, new MeasuredHeights(vp.from, heights));
10282
                this.heightMap = (refresh ? HeightMap.empty().applyChanges(this.stateDeco, Text.empty, this.heightOracle, [new ChangedRange(0, 0, 0, view.state.doc.length)]) : this.heightMap).updateHeight(oracle, 0, refresh, new MeasuredHeights(vp.from, heights));
9758
            }
10283
            }
9759
            if (oracle.heightChanged)
10284
            if (heightChangeFlag)
9760
                result |= 2 /* UpdateFlag.Height */;
10285
                result |= 2 /* UpdateFlag.Height */;
9761
        }
10286
        }
9762
        let viewportChange = !this.viewportIsAppropriate(this.viewport, bias) ||
10287
        let viewportChange = !this.viewportIsAppropriate(this.viewport, bias) ||
9763
            this.scrollTarget && (this.scrollTarget.range.head < this.viewport.from ||
10288
            this.scrollTarget && (this.scrollTarget.range.head < this.viewport.from ||
9764
                this.scrollTarget.range.head > this.viewport.to);
10289
                this.scrollTarget.range.head > this.viewport.to);
9765
        if (viewportChange)
10290
        if (viewportChange) {
-
 
10291
            if (result & 2 /* UpdateFlag.Height */)
-
 
10292
                result |= this.updateScaler();
9766
            this.viewport = this.getViewport(bias, this.scrollTarget);
10293
            this.viewport = this.getViewport(bias, this.scrollTarget);
9767
        this.updateForViewport();
10294
            result |= this.updateForViewport();
-
 
10295
        }
9768
        if ((result & 2 /* UpdateFlag.Height */) || viewportChange)
10296
        if ((result & 2 /* UpdateFlag.Height */) || viewportChange)
9769
            this.updateViewportLines();
10297
            this.updateViewportLines();
9770
        if (this.lineGaps.length || this.viewport.to - this.viewport.from > (2000 /* LG.Margin */ << 1))
10298
        if (this.lineGaps.length || this.viewport.to - this.viewport.from > (2000 /* LG.Margin */ << 1))
9771
            this.updateLineGaps(this.ensureLineGaps(refresh ? [] : this.lineGaps, view));
10299
            this.updateLineGaps(this.ensureLineGaps(refresh ? [] : this.lineGaps, view));
9772
        result |= this.computeVisibleRanges();
10300
        result |= this.computeVisibleRanges();
Línea 9828... Línea 10356...
9828
        if (!gaps.length || changes.empty)
10356
        if (!gaps.length || changes.empty)
9829
            return gaps;
10357
            return gaps;
9830
        let mapped = [];
10358
        let mapped = [];
9831
        for (let gap of gaps)
10359
        for (let gap of gaps)
9832
            if (!changes.touchesRange(gap.from, gap.to))
10360
            if (!changes.touchesRange(gap.from, gap.to))
9833
                mapped.push(new LineGap(changes.mapPos(gap.from), changes.mapPos(gap.to), gap.size));
10361
                mapped.push(new LineGap(changes.mapPos(gap.from), changes.mapPos(gap.to), gap.size, gap.displaySize));
9834
        return mapped;
10362
        return mapped;
9835
    }
10363
    }
9836
    // Computes positions in the viewport where the start or end of a
10364
    // Computes positions in the viewport where the start or end of a
9837
    // line should be hidden, trying to reuse existing line gaps when
10365
    // line should be hidden, trying to reuse existing line gaps when
9838
    // appropriate to avoid unneccesary redraws.
10366
    // appropriate to avoid unneccesary redraws.
Línea 9869... Línea 10397...
9869
                    mayMeasure.visibleRanges.some(r => r.from <= to && r.to >= to)) {
10397
                    mayMeasure.visibleRanges.some(r => r.from <= to && r.to >= to)) {
9870
                    let lineStart = mayMeasure.moveToLineBoundary(EditorSelection.cursor(to), false, true).head;
10398
                    let lineStart = mayMeasure.moveToLineBoundary(EditorSelection.cursor(to), false, true).head;
9871
                    if (lineStart > from)
10399
                    if (lineStart > from)
9872
                        to = lineStart;
10400
                        to = lineStart;
9873
                }
10401
                }
9874
                gap = new LineGap(from, to, this.gapSize(line, from, to, structure));
10402
                let size = this.gapSize(line, from, to, structure);
-
 
10403
                let displaySize = wrapping || size < 2000000 /* VP.MaxHorizGap */ ? size : 2000000 /* VP.MaxHorizGap */;
-
 
10404
                gap = new LineGap(from, to, size, displaySize);
9875
            }
10405
            }
9876
            gaps.push(gap);
10406
            gaps.push(gap);
9877
        };
10407
        };
9878
        for (let line of this.viewportLines) {
10408
        let checkLine = (line) => {
9879
            if (line.length < doubleMargin)
10409
            if (line.length < doubleMargin || line.type != BlockType.Text)
9880
                continue;
10410
                return;
9881
            let structure = lineStructure(line.from, line.to, this.stateDeco);
10411
            let structure = lineStructure(line.from, line.to, this.stateDeco);
9882
            if (structure.total < doubleMargin)
10412
            if (structure.total < doubleMargin)
9883
                continue;
10413
                return;
9884
            let target = this.scrollTarget ? this.scrollTarget.range.head : null;
10414
            let target = this.scrollTarget ? this.scrollTarget.range.head : null;
9885
            let viewFrom, viewTo;
10415
            let viewFrom, viewTo;
9886
            if (wrapping) {
10416
            if (wrapping) {
9887
                let marginHeight = (margin / this.heightOracle.lineLength) * this.heightOracle.lineHeight;
10417
                let marginHeight = (margin / this.heightOracle.lineLength) * this.heightOracle.lineHeight;
9888
                let top, bot;
10418
                let top, bot;
Línea 9900... Línea 10430...
9900
                viewTo = findPosition(structure, bot);
10430
                viewTo = findPosition(structure, bot);
9901
            }
10431
            }
9902
            else {
10432
            else {
9903
                let totalWidth = structure.total * this.heightOracle.charWidth;
10433
                let totalWidth = structure.total * this.heightOracle.charWidth;
9904
                let marginWidth = margin * this.heightOracle.charWidth;
10434
                let marginWidth = margin * this.heightOracle.charWidth;
-
 
10435
                let horizOffset = 0;
-
 
10436
                if (totalWidth > 2000000 /* VP.MaxHorizGap */)
-
 
10437
                    for (let old of current) {
-
 
10438
                        if (old.from >= line.from && old.from < line.to && old.size != old.displaySize &&
-
 
10439
                            old.from * this.heightOracle.charWidth + horizOffset < this.pixelViewport.left)
-
 
10440
                            horizOffset = old.size - old.displaySize;
-
 
10441
                    }
-
 
10442
                let pxLeft = this.pixelViewport.left + horizOffset, pxRight = this.pixelViewport.right + horizOffset;
9905
                let left, right;
10443
                let left, right;
9906
                if (target != null) {
10444
                if (target != null) {
9907
                    let targetFrac = findFraction(structure, target);
10445
                    let targetFrac = findFraction(structure, target);
9908
                    let spaceFrac = ((this.pixelViewport.right - this.pixelViewport.left) / 2 + marginWidth) / totalWidth;
10446
                    let spaceFrac = ((pxRight - pxLeft) / 2 + marginWidth) / totalWidth;
9909
                    left = targetFrac - spaceFrac;
10447
                    left = targetFrac - spaceFrac;
9910
                    right = targetFrac + spaceFrac;
10448
                    right = targetFrac + spaceFrac;
9911
                }
10449
                }
9912
                else {
10450
                else {
9913
                    left = (this.pixelViewport.left - marginWidth) / totalWidth;
10451
                    left = (pxLeft - marginWidth) / totalWidth;
9914
                    right = (this.pixelViewport.right + marginWidth) / totalWidth;
10452
                    right = (pxRight + marginWidth) / totalWidth;
9915
                }
10453
                }
9916
                viewFrom = findPosition(structure, left);
10454
                viewFrom = findPosition(structure, left);
9917
                viewTo = findPosition(structure, right);
10455
                viewTo = findPosition(structure, right);
9918
            }
10456
            }
9919
            if (viewFrom > line.from)
10457
            if (viewFrom > line.from)
9920
                addGap(line.from, viewFrom, line, structure);
10458
                addGap(line.from, viewFrom, line, structure);
9921
            if (viewTo < line.to)
10459
            if (viewTo < line.to)
9922
                addGap(viewTo, line.to, line, structure);
10460
                addGap(viewTo, line.to, line, structure);
-
 
10461
        };
-
 
10462
        for (let line of this.viewportLines) {
-
 
10463
            if (Array.isArray(line.type))
-
 
10464
                line.type.forEach(checkLine);
-
 
10465
            else
-
 
10466
                checkLine(line);
9923
        }
10467
        }
9924
        return gaps;
10468
        return gaps;
9925
    }
10469
    }
9926
    gapSize(line, from, to, structure) {
10470
    gapSize(line, from, to, structure) {
9927
        let fraction = findFraction(structure, to) - findFraction(structure, from);
10471
        let fraction = findFraction(structure, to) - findFraction(structure, from);
Línea 9936... Línea 10480...
9936
        if (!LineGap.same(gaps, this.lineGaps)) {
10480
        if (!LineGap.same(gaps, this.lineGaps)) {
9937
            this.lineGaps = gaps;
10481
            this.lineGaps = gaps;
9938
            this.lineGapDeco = Decoration.set(gaps.map(gap => gap.draw(this, this.heightOracle.lineWrapping)));
10482
            this.lineGapDeco = Decoration.set(gaps.map(gap => gap.draw(this, this.heightOracle.lineWrapping)));
9939
        }
10483
        }
9940
    }
10484
    }
9941
    computeVisibleRanges() {
10485
    computeVisibleRanges(changes) {
9942
        let deco = this.stateDeco;
10486
        let deco = this.stateDeco;
9943
        if (this.lineGaps.length)
10487
        if (this.lineGaps.length)
9944
            deco = deco.concat(this.lineGapDeco);
10488
            deco = deco.concat(this.lineGapDeco);
9945
        let ranges = [];
10489
        let ranges = [];
9946
        RangeSet.spans(deco, this.viewport.from, this.viewport.to, {
10490
        RangeSet.spans(deco, this.viewport.from, this.viewport.to, {
9947
            span(from, to) { ranges.push({ from, to }); },
10491
            span(from, to) { ranges.push({ from, to }); },
9948
            point() { }
10492
            point() { }
9949
        }, 20);
10493
        }, 20);
-
 
10494
        let changed = 0;
9950
        let changed = ranges.length != this.visibleRanges.length ||
10495
        if (ranges.length != this.visibleRanges.length) {
-
 
10496
            changed = 8 /* UpdateFlag.ViewportMoved */ | 4 /* UpdateFlag.Viewport */;
-
 
10497
        }
-
 
10498
        else {
-
 
10499
            for (let i = 0; i < ranges.length && !(changed & 8 /* UpdateFlag.ViewportMoved */); i++) {
-
 
10500
                let old = this.visibleRanges[i], nw = ranges[i];
-
 
10501
                if (old.from != nw.from || old.to != nw.to) {
-
 
10502
                    changed |= 4 /* UpdateFlag.Viewport */;
9951
            this.visibleRanges.some((r, i) => r.from != ranges[i].from || r.to != ranges[i].to);
10503
                    if (!(changes && changes.mapPos(old.from, -1) == nw.from && changes.mapPos(old.to, 1) == nw.to))
-
 
10504
                        changed |= 8 /* UpdateFlag.ViewportMoved */;
-
 
10505
                }
-
 
10506
            }
-
 
10507
        }
9952
        this.visibleRanges = ranges;
10508
        this.visibleRanges = ranges;
9953
        return changed ? 4 /* UpdateFlag.Viewport */ : 0;
10509
        return changed;
9954
    }
10510
    }
9955
    lineBlockAt(pos) {
10511
    lineBlockAt(pos) {
-
 
10512
        return (pos >= this.viewport.from && pos <= this.viewport.to &&
9956
        return (pos >= this.viewport.from && pos <= this.viewport.to && this.viewportLines.find(b => b.from <= pos && b.to >= pos)) ||
10513
            this.viewportLines.find(b => b.from <= pos && b.to >= pos)) ||
9957
            scaleBlock(this.heightMap.lineAt(pos, QueryType$1.ByPos, this.heightOracle, 0, 0), this.scaler);
10514
            scaleBlock(this.heightMap.lineAt(pos, QueryType$1.ByPos, this.heightOracle, 0, 0), this.scaler);
9958
    }
10515
    }
9959
    lineBlockAtHeight(height) {
10516
    lineBlockAtHeight(height) {
-
 
10517
        return (height >= this.viewportLines[0].top && height <= this.viewportLines[this.viewportLines.length - 1].bottom &&
-
 
10518
            this.viewportLines.find(l => l.top <= height && l.bottom >= height)) ||
9960
        return scaleBlock(this.heightMap.lineAt(this.scaler.fromDOM(height), QueryType$1.ByHeight, this.heightOracle, 0, 0), this.scaler);
10519
            scaleBlock(this.heightMap.lineAt(this.scaler.fromDOM(height), QueryType$1.ByHeight, this.heightOracle, 0, 0), this.scaler);
9961
    }
10520
    }
9962
    scrollAnchorAt(scrollTop) {
10521
    scrollAnchorAt(scrollTop) {
9963
        let block = this.lineBlockAtHeight(scrollTop + 8);
10522
        let block = this.lineBlockAtHeight(scrollTop + 8);
9964
        return block.from >= this.viewport.from || this.viewportLines[0].top - scrollTop > 200 ? block : this.viewportLines[0];
10523
        return block.from >= this.viewport.from || this.viewportLines[0].top - scrollTop > 200 ? block : this.viewportLines[0];
9965
    }
10524
    }
Línea 10030... Línea 10589...
10030
// Don't scale when the document height is within the range of what
10589
// Don't scale when the document height is within the range of what
10031
// the DOM can handle.
10590
// the DOM can handle.
10032
const IdScaler = {
10591
const IdScaler = {
10033
    toDOM(n) { return n; },
10592
    toDOM(n) { return n; },
10034
    fromDOM(n) { return n; },
10593
    fromDOM(n) { return n; },
10035
    scale: 1
10594
    scale: 1,
-
 
10595
    eq(other) { return other == this; }
10036
};
10596
};
10037
// When the height is too big (> VP.MaxDOMHeight), scale down the
10597
// When the height is too big (> VP.MaxDOMHeight), scale down the
10038
// regions outside the viewports so that the total height is
10598
// regions outside the viewports so that the total height is
10039
// VP.MaxDOMHeight.
10599
// VP.MaxDOMHeight.
10040
class BigScaler {
10600
class BigScaler {
Línea 10073... Línea 10633...
10073
                return vp.top + (n - vp.domTop);
10633
                return vp.top + (n - vp.domTop);
10074
            base = vp.bottom;
10634
            base = vp.bottom;
10075
            domBase = vp.domBottom;
10635
            domBase = vp.domBottom;
10076
        }
10636
        }
10077
    }
10637
    }
-
 
10638
    eq(other) {
-
 
10639
        if (!(other instanceof BigScaler))
-
 
10640
            return false;
-
 
10641
        return this.scale == other.scale && this.viewports.length == other.viewports.length &&
-
 
10642
            this.viewports.every((vp, i) => vp.from == other.viewports[i].from && vp.to == other.viewports[i].to);
-
 
10643
    }
10078
}
10644
}
10079
function scaleBlock(block, scaler) {
10645
function scaleBlock(block, scaler) {
10080
    if (scaler.scale == 1)
10646
    if (scaler.scale == 1)
10081
        return block;
10647
        return block;
10082
    let bTop = scaler.toDOM(block.top), bBottom = scaler.toDOM(block.bottom);
10648
    let bTop = scaler.toDOM(block.top), bBottom = scaler.toDOM(block.bottom);
Línea 10124... Línea 10690...
10124
        fontFamily: "monospace",
10690
        fontFamily: "monospace",
10125
        lineHeight: 1.4,
10691
        lineHeight: 1.4,
10126
        height: "100%",
10692
        height: "100%",
10127
        overflowX: "auto",
10693
        overflowX: "auto",
10128
        position: "relative",
10694
        position: "relative",
10129
        zIndex: 0
10695
        zIndex: 0,
-
 
10696
        overflowAnchor: "none",
10130
    },
10697
    },
10131
    ".cm-content": {
10698
    ".cm-content": {
10132
        margin: 0,
10699
        margin: 0,
10133
        flexGrow: 2,
10700
        flexGrow: 2,
10134
        flexShrink: 0,
10701
        flexShrink: 0,
Línea 10195... Línea 10762...
10195
    },
10762
    },
10196
    ".cm-cursor": {
10763
    ".cm-cursor": {
10197
        display: "none"
10764
        display: "none"
10198
    },
10765
    },
10199
    "&dark .cm-cursor": {
10766
    "&dark .cm-cursor": {
10200
        borderLeftColor: "#444"
10767
        borderLeftColor: "#ddd"
10201
    },
10768
    },
10202
    ".cm-dropCursor": {
10769
    ".cm-dropCursor": {
10203
        position: "absolute"
10770
        position: "absolute"
10204
    },
10771
    },
10205
    "&.cm-focused > .cm-scroller > .cm-cursorLayer .cm-cursor": {
10772
    "&.cm-focused > .cm-scroller > .cm-cursorLayer .cm-cursor": {
Línea 10261... Línea 10828...
10261
    },
10828
    },
10262
    ".cm-panels": {
10829
    ".cm-panels": {
10263
        boxSizing: "border-box",
10830
        boxSizing: "border-box",
10264
        position: "sticky",
10831
        position: "sticky",
10265
        left: 0,
10832
        left: 0,
10266
        right: 0
10833
        right: 0,
-
 
10834
        zIndex: 300
10267
    },
10835
    },
10268
    "&light .cm-panels": {
10836
    "&light .cm-panels": {
10269
        backgroundColor: "#f5f5f5",
10837
        backgroundColor: "#f5f5f5",
10270
        color: "black"
10838
        color: "black"
10271
    },
10839
    },
Línea 10293... Línea 10861...
10293
    ".cm-placeholder": {
10861
    ".cm-placeholder": {
10294
        color: "#888",
10862
        color: "#888",
10295
        display: "inline-block",
10863
        display: "inline-block",
10296
        verticalAlign: "top",
10864
        verticalAlign: "top",
10297
    },
10865
    },
10298
    ".cm-highlightSpace:before": {
10866
    ".cm-highlightSpace": {
10299
        content: "attr(data-display)",
10867
        backgroundImage: "radial-gradient(circle at 50% 55%, #aaa 20%, transparent 5%)",
10300
        position: "absolute",
10868
        backgroundPosition: "center",
10301
        pointerEvents: "none",
-
 
10302
        color: "#888"
-
 
10303
    },
10869
    },
10304
    ".cm-highlightTab": {
10870
    ".cm-highlightTab": {
10305
        backgroundImage: `url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="200" height="20"><path stroke="%23888" stroke-width="1" fill="none" d="M1 10H196L190 5M190 15L196 10M197 4L197 16"/></svg>')`,
10871
        backgroundImage: `url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="200" height="20"><path stroke="%23888" stroke-width="1" fill="none" d="M1 10H196L190 5M190 15L196 10M197 4L197 16"/></svg>')`,
10306
        backgroundSize: "auto 100%",
10872
        backgroundSize: "auto 100%",
10307
        backgroundPosition: "right 90%",
10873
        backgroundPosition: "right 90%",
Línea 10345... Línea 10911...
10345
        border: "1px solid #555",
10911
        border: "1px solid #555",
10346
        backgroundColor: "inherit"
10912
        backgroundColor: "inherit"
10347
    }
10913
    }
10348
}, lightDarkIDs);
10914
}, lightDarkIDs);
Línea 10349... Línea -...
10349
 
-
 
10350
const LineBreakPlaceholder = "\uffff";
-
 
10351
class DOMReader {
-
 
10352
    constructor(points, state) {
-
 
10353
        this.points = points;
-
 
10354
        this.text = "";
-
 
10355
        this.lineSeparator = state.facet(EditorState.lineSeparator);
-
 
10356
    }
-
 
10357
    append(text) {
-
 
10358
        this.text += text;
-
 
10359
    }
-
 
10360
    lineBreak() {
-
 
10361
        this.text += LineBreakPlaceholder;
-
 
10362
    }
-
 
10363
    readRange(start, end) {
-
 
10364
        if (!start)
-
 
10365
            return this;
-
 
10366
        let parent = start.parentNode;
-
 
10367
        for (let cur = start;;) {
-
 
10368
            this.findPointBefore(parent, cur);
-
 
10369
            let oldLen = this.text.length;
-
 
10370
            this.readNode(cur);
-
 
10371
            let next = cur.nextSibling;
-
 
10372
            if (next == end)
-
 
10373
                break;
-
 
10374
            let view = ContentView.get(cur), nextView = ContentView.get(next);
-
 
10375
            if (view && nextView ? view.breakAfter :
-
 
10376
                (view ? view.breakAfter : isBlockElement(cur)) ||
-
 
10377
                    (isBlockElement(next) && (cur.nodeName != "BR" || cur.cmIgnore) && this.text.length > oldLen))
-
 
10378
                this.lineBreak();
-
 
10379
            cur = next;
-
 
10380
        }
-
 
10381
        this.findPointBefore(parent, end);
-
 
10382
        return this;
-
 
10383
    }
-
 
10384
    readTextNode(node) {
-
 
10385
        let text = node.nodeValue;
-
 
10386
        for (let point of this.points)
-
 
10387
            if (point.node == node)
-
 
10388
                point.pos = this.text.length + Math.min(point.offset, text.length);
-
 
10389
        for (let off = 0, re = this.lineSeparator ? null : /\r\n?|\n/g;;) {
-
 
10390
            let nextBreak = -1, breakSize = 1, m;
-
 
10391
            if (this.lineSeparator) {
-
 
10392
                nextBreak = text.indexOf(this.lineSeparator, off);
-
 
10393
                breakSize = this.lineSeparator.length;
-
 
10394
            }
-
 
10395
            else if (m = re.exec(text)) {
-
 
10396
                nextBreak = m.index;
-
 
10397
                breakSize = m[0].length;
-
 
10398
            }
-
 
10399
            this.append(text.slice(off, nextBreak < 0 ? text.length : nextBreak));
-
 
10400
            if (nextBreak < 0)
-
 
10401
                break;
-
 
10402
            this.lineBreak();
-
 
10403
            if (breakSize > 1)
-
 
10404
                for (let point of this.points)
-
 
10405
                    if (point.node == node && point.pos > this.text.length)
-
 
10406
                        point.pos -= breakSize - 1;
-
 
10407
            off = nextBreak + breakSize;
-
 
10408
        }
-
 
10409
    }
-
 
10410
    readNode(node) {
-
 
10411
        if (node.cmIgnore)
-
 
10412
            return;
-
 
10413
        let view = ContentView.get(node);
-
 
10414
        let fromView = view && view.overrideDOMText;
-
 
10415
        if (fromView != null) {
-
 
10416
            this.findPointInside(node, fromView.length);
-
 
10417
            for (let i = fromView.iter(); !i.next().done;) {
-
 
10418
                if (i.lineBreak)
-
 
10419
                    this.lineBreak();
-
 
10420
                else
-
 
10421
                    this.append(i.value);
-
 
10422
            }
-
 
10423
        }
-
 
10424
        else if (node.nodeType == 3) {
-
 
10425
            this.readTextNode(node);
-
 
10426
        }
-
 
10427
        else if (node.nodeName == "BR") {
-
 
10428
            if (node.nextSibling)
-
 
10429
                this.lineBreak();
-
 
10430
        }
-
 
10431
        else if (node.nodeType == 1) {
-
 
10432
            this.readRange(node.firstChild, null);
-
 
10433
        }
-
 
10434
    }
-
 
10435
    findPointBefore(node, next) {
-
 
10436
        for (let point of this.points)
-
 
10437
            if (point.node == node && node.childNodes[point.offset] == next)
-
 
10438
                point.pos = this.text.length;
-
 
10439
    }
-
 
10440
    findPointInside(node, length) {
-
 
10441
        for (let point of this.points)
-
 
10442
            if (node.nodeType == 3 ? point.node == node : node.contains(point.node))
-
 
10443
                point.pos = this.text.length + (isAtEnd(node, point.node, point.offset) ? length : 0);
-
 
10444
    }
-
 
10445
}
-
 
10446
function isAtEnd(parent, node, offset) {
-
 
10447
    for (;;) {
-
 
10448
        if (!node || offset < maxOffset(node))
-
 
10449
            return false;
-
 
10450
        if (node == parent)
-
 
10451
            return true;
-
 
10452
        offset = domIndex(node) + 1;
-
 
10453
        node = node.parentNode;
-
 
10454
    }
-
 
10455
}
-
 
10456
class DOMPoint {
-
 
10457
    constructor(node, offset) {
-
 
10458
        this.node = node;
-
 
10459
        this.offset = offset;
-
 
10460
        this.pos = -1;
-
 
10461
    }
-
 
10462
}
-
 
10463
 
-
 
10464
class DOMChange {
-
 
10465
    constructor(view, start, end, typeOver) {
-
 
10466
        this.typeOver = typeOver;
-
 
10467
        this.bounds = null;
-
 
10468
        this.text = "";
-
 
10469
        let { impreciseHead: iHead, impreciseAnchor: iAnchor } = view.docView;
-
 
10470
        if (view.state.readOnly && start > -1) {
-
 
10471
            // Ignore changes when the editor is read-only
-
 
10472
            this.newSel = null;
-
 
10473
        }
-
 
10474
        else if (start > -1 && (this.bounds = view.docView.domBoundsAround(start, end, 0))) {
-
 
10475
            let selPoints = iHead || iAnchor ? [] : selectionPoints(view);
-
 
10476
            let reader = new DOMReader(selPoints, view.state);
-
 
10477
            reader.readRange(this.bounds.startDOM, this.bounds.endDOM);
-
 
10478
            this.text = reader.text;
-
 
10479
            this.newSel = selectionFromPoints(selPoints, this.bounds.from);
-
 
10480
        }
-
 
10481
        else {
-
 
10482
            let domSel = view.observer.selectionRange;
-
 
10483
            let head = iHead && iHead.node == domSel.focusNode && iHead.offset == domSel.focusOffset ||
-
 
10484
                !contains(view.contentDOM, domSel.focusNode)
-
 
10485
                ? view.state.selection.main.head
-
 
10486
                : view.docView.posFromDOM(domSel.focusNode, domSel.focusOffset);
-
 
10487
            let anchor = iAnchor && iAnchor.node == domSel.anchorNode && iAnchor.offset == domSel.anchorOffset ||
-
 
10488
                !contains(view.contentDOM, domSel.anchorNode)
-
 
10489
                ? view.state.selection.main.anchor
-
 
10490
                : view.docView.posFromDOM(domSel.anchorNode, domSel.anchorOffset);
-
 
10491
            // iOS will refuse to select the block gaps when doing
-
 
10492
            // select-all.
-
 
10493
            // Chrome will put the selection *inside* them, confusing
-
 
10494
            // posFromDOM
-
 
10495
            let vp = view.viewport;
-
 
10496
            if ((browser.ios || browser.chrome) && view.state.selection.main.empty && head != anchor &&
-
 
10497
                (vp.from > 0 || vp.to < view.state.doc.length)) {
-
 
10498
                let from = Math.min(head, anchor), to = Math.max(head, anchor);
-
 
10499
                let offFrom = vp.from - from, offTo = vp.to - to;
-
 
10500
                if ((offFrom == 0 || offFrom == 1 || from == 0) && (offTo == 0 || offTo == -1 || to == view.state.doc.length)) {
-
 
10501
                    head = 0;
-
 
10502
                    anchor = view.state.doc.length;
-
 
10503
                }
-
 
10504
            }
-
 
10505
            this.newSel = EditorSelection.single(anchor, head);
-
 
10506
        }
-
 
10507
    }
-
 
10508
}
-
 
10509
function applyDOMChange(view, domChange) {
-
 
10510
    let change;
-
 
10511
    let { newSel } = domChange, sel = view.state.selection.main;
-
 
10512
    let lastKey = view.inputState.lastKeyTime > Date.now() - 100 ? view.inputState.lastKeyCode : -1;
-
 
10513
    if (domChange.bounds) {
-
 
10514
        let { from, to } = domChange.bounds;
-
 
10515
        let preferredPos = sel.from, preferredSide = null;
-
 
10516
        // Prefer anchoring to end when Backspace is pressed (or, on
-
 
10517
        // Android, when something was deleted)
-
 
10518
        if (lastKey === 8 || browser.android && domChange.text.length < to - from) {
-
 
10519
            preferredPos = sel.to;
-
 
10520
            preferredSide = "end";
-
 
10521
        }
-
 
10522
        let diff = findDiff(view.state.doc.sliceString(from, to, LineBreakPlaceholder), domChange.text, preferredPos - from, preferredSide);
-
 
10523
        if (diff) {
-
 
10524
            // Chrome inserts two newlines when pressing shift-enter at the
-
 
10525
            // end of a line. DomChange drops one of those.
-
 
10526
            if (browser.chrome && lastKey == 13 &&
-
 
10527
                diff.toB == diff.from + 2 && domChange.text.slice(diff.from, diff.toB) == LineBreakPlaceholder + LineBreakPlaceholder)
-
 
10528
                diff.toB--;
-
 
10529
            change = { from: from + diff.from, to: from + diff.toA,
-
 
10530
                insert: Text.of(domChange.text.slice(diff.from, diff.toB).split(LineBreakPlaceholder)) };
-
 
10531
        }
-
 
10532
    }
-
 
10533
    else if (newSel && (!view.hasFocus && view.state.facet(editable) || newSel.main.eq(sel))) {
-
 
10534
        newSel = null;
-
 
10535
    }
-
 
10536
    if (!change && !newSel)
-
 
10537
        return false;
-
 
10538
    if (!change && domChange.typeOver && !sel.empty && newSel && newSel.main.empty) {
-
 
10539
        // Heuristic to notice typing over a selected character
-
 
10540
        change = { from: sel.from, to: sel.to, insert: view.state.doc.slice(sel.from, sel.to) };
-
 
10541
    }
-
 
10542
    else if (change && change.from >= sel.from && change.to <= sel.to &&
-
 
10543
        (change.from != sel.from || change.to != sel.to) &&
-
 
10544
        (sel.to - sel.from) - (change.to - change.from) <= 4) {
-
 
10545
        // If the change is inside the selection and covers most of it,
-
 
10546
        // assume it is a selection replace (with identical characters at
-
 
10547
        // the start/end not included in the diff)
-
 
10548
        change = {
-
 
10549
            from: sel.from, to: sel.to,
-
 
10550
            insert: view.state.doc.slice(sel.from, change.from).append(change.insert).append(view.state.doc.slice(change.to, sel.to))
-
 
10551
        };
-
 
10552
    }
-
 
10553
    else if ((browser.mac || browser.android) && change && change.from == change.to && change.from == sel.head - 1 &&
-
 
10554
        /^\. ?$/.test(change.insert.toString()) && view.contentDOM.getAttribute("autocorrect") == "off") {
-
 
10555
        // Detect insert-period-on-double-space Mac and Android behavior,
-
 
10556
        // and transform it into a regular space insert.
-
 
10557
        if (newSel && change.insert.length == 2)
-
 
10558
            newSel = EditorSelection.single(newSel.main.anchor - 1, newSel.main.head - 1);
-
 
10559
        change = { from: sel.from, to: sel.to, insert: Text.of([" "]) };
-
 
10560
    }
-
 
10561
    else if (browser.chrome && change && change.from == change.to && change.from == sel.head &&
-
 
10562
        change.insert.toString() == "\n " && view.lineWrapping) {
-
 
10563
        // In Chrome, if you insert a space at the start of a wrapped
-
 
10564
        // line, it will actually insert a newline and a space, causing a
-
 
10565
        // bogus new line to be created in CodeMirror (#968)
-
 
10566
        if (newSel)
-
 
10567
            newSel = EditorSelection.single(newSel.main.anchor - 1, newSel.main.head - 1);
-
 
10568
        change = { from: sel.from, to: sel.to, insert: Text.of([" "]) };
-
 
10569
    }
-
 
10570
    if (change) {
-
 
10571
        if (browser.ios && view.inputState.flushIOSKey(change))
-
 
10572
            return true;
-
 
10573
        // Android browsers don't fire reasonable key events for enter,
-
 
10574
        // backspace, or delete. So this detects changes that look like
-
 
10575
        // they're caused by those keys, and reinterprets them as key
-
 
10576
        // events. (Some of these keys are also handled by beforeinput
-
 
10577
        // events and the pendingAndroidKey mechanism, but that's not
-
 
10578
        // reliable in all situations.)
-
 
10579
        if (browser.android &&
-
 
10580
            ((change.to == sel.to &&
-
 
10581
                // GBoard will sometimes remove a space it just inserted
-
 
10582
                // after a completion when you press enter
-
 
10583
                (change.from == sel.from || change.from == sel.from - 1 && view.state.sliceDoc(change.from, sel.from) == " ") &&
-
 
10584
                change.insert.length == 1 && change.insert.lines == 2 &&
-
 
10585
                dispatchKey(view.contentDOM, "Enter", 13)) ||
-
 
10586
                ((change.from == sel.from - 1 && change.to == sel.to && change.insert.length == 0 ||
-
 
10587
                    lastKey == 8 && change.insert.length < change.to - change.from && change.to > sel.head) &&
-
 
10588
                    dispatchKey(view.contentDOM, "Backspace", 8)) ||
-
 
10589
                (change.from == sel.from && change.to == sel.to + 1 && change.insert.length == 0 &&
-
 
10590
                    dispatchKey(view.contentDOM, "Delete", 46))))
-
 
10591
            return true;
-
 
10592
        let text = change.insert.toString();
-
 
10593
        if (view.inputState.composing >= 0)
-
 
10594
            view.inputState.composing++;
-
 
10595
        let defaultTr;
-
 
10596
        let defaultInsert = () => defaultTr || (defaultTr = applyDefaultInsert(view, change, newSel));
-
 
10597
        if (!view.state.facet(inputHandler$1).some(h => h(view, change.from, change.to, text, defaultInsert)))
-
 
10598
            view.dispatch(defaultInsert());
-
 
10599
        return true;
-
 
10600
    }
-
 
10601
    else if (newSel && !newSel.main.eq(sel)) {
-
 
10602
        let scrollIntoView = false, userEvent = "select";
-
 
10603
        if (view.inputState.lastSelectionTime > Date.now() - 50) {
-
 
10604
            if (view.inputState.lastSelectionOrigin == "select")
-
 
10605
                scrollIntoView = true;
-
 
10606
            userEvent = view.inputState.lastSelectionOrigin;
-
 
10607
        }
-
 
10608
        view.dispatch({ selection: newSel, scrollIntoView, userEvent });
-
 
10609
        return true;
-
 
10610
    }
-
 
10611
    else {
-
 
10612
        return false;
-
 
10613
    }
-
 
10614
}
-
 
10615
function applyDefaultInsert(view, change, newSel) {
-
 
10616
    let tr, startState = view.state, sel = startState.selection.main;
-
 
10617
    if (change.from >= sel.from && change.to <= sel.to && change.to - change.from >= (sel.to - sel.from) / 3 &&
-
 
10618
        (!newSel || newSel.main.empty && newSel.main.from == change.from + change.insert.length) &&
-
 
10619
        view.inputState.composing < 0) {
-
 
10620
        let before = sel.from < change.from ? startState.sliceDoc(sel.from, change.from) : "";
-
 
10621
        let after = sel.to > change.to ? startState.sliceDoc(change.to, sel.to) : "";
-
 
10622
        tr = startState.replaceSelection(view.state.toText(before + change.insert.sliceString(0, undefined, view.state.lineBreak) + after));
-
 
10623
    }
-
 
10624
    else {
-
 
10625
        let changes = startState.changes(change);
-
 
10626
        let mainSel = newSel && newSel.main.to <= changes.newLength ? newSel.main : undefined;
-
 
10627
        // Try to apply a composition change to all cursors
-
 
10628
        if (startState.selection.ranges.length > 1 && view.inputState.composing >= 0 &&
-
 
10629
            change.to <= sel.to && change.to >= sel.to - 10) {
-
 
10630
            let replaced = view.state.sliceDoc(change.from, change.to);
-
 
10631
            let compositionRange, composition = newSel && findCompositionNode(view, newSel.main.head);
-
 
10632
            if (composition) {
-
 
10633
                let dLen = change.insert.length - (change.to - change.from);
-
 
10634
                compositionRange = { from: composition.from, to: composition.to - dLen };
-
 
10635
            }
-
 
10636
            else {
-
 
10637
                compositionRange = view.state.doc.lineAt(sel.head);
-
 
10638
            }
-
 
10639
            let offset = sel.to - change.to, size = sel.to - sel.from;
-
 
10640
            tr = startState.changeByRange(range => {
-
 
10641
                if (range.from == sel.from && range.to == sel.to)
-
 
10642
                    return { changes, range: mainSel || range.map(changes) };
-
 
10643
                let to = range.to - offset, from = to - replaced.length;
-
 
10644
                if (range.to - range.from != size || view.state.sliceDoc(from, to) != replaced ||
-
 
10645
                    // Unfortunately, there's no way to make multiple
-
 
10646
                    // changes in the same node work without aborting
-
 
10647
                    // composition, so cursors in the composition range are
-
 
10648
                    // ignored.
-
 
10649
                    range.to >= compositionRange.from && range.from <= compositionRange.to)
-
 
10650
                    return { range };
-
 
10651
                let rangeChanges = startState.changes({ from, to, insert: change.insert }), selOff = range.to - sel.to;
-
 
10652
                return {
-
 
10653
                    changes: rangeChanges,
-
 
10654
                    range: !mainSel ? range.map(rangeChanges) :
-
 
10655
                        EditorSelection.range(Math.max(0, mainSel.anchor + selOff), Math.max(0, mainSel.head + selOff))
-
 
10656
                };
-
 
10657
            });
-
 
10658
        }
-
 
10659
        else {
-
 
10660
            tr = {
-
 
10661
                changes,
-
 
10662
                selection: mainSel && startState.selection.replaceRange(mainSel)
-
 
10663
            };
-
 
10664
        }
-
 
10665
    }
-
 
10666
    let userEvent = "input.type";
-
 
10667
    if (view.composing ||
-
 
10668
        view.inputState.compositionPendingChange && view.inputState.compositionEndedAt > Date.now() - 50) {
-
 
10669
        view.inputState.compositionPendingChange = false;
-
 
10670
        userEvent += ".compose";
-
 
10671
        if (view.inputState.compositionFirstChange) {
-
 
10672
            userEvent += ".start";
-
 
10673
            view.inputState.compositionFirstChange = false;
-
 
10674
        }
-
 
10675
    }
-
 
10676
    return startState.update(tr, { userEvent, scrollIntoView: true });
-
 
10677
}
-
 
10678
function findDiff(a, b, preferredPos, preferredSide) {
-
 
10679
    let minLen = Math.min(a.length, b.length);
-
 
10680
    let from = 0;
-
 
10681
    while (from < minLen && a.charCodeAt(from) == b.charCodeAt(from))
-
 
10682
        from++;
-
 
10683
    if (from == minLen && a.length == b.length)
-
 
10684
        return null;
-
 
10685
    let toA = a.length, toB = b.length;
-
 
10686
    while (toA > 0 && toB > 0 && a.charCodeAt(toA - 1) == b.charCodeAt(toB - 1)) {
-
 
10687
        toA--;
-
 
10688
        toB--;
-
 
10689
    }
-
 
10690
    if (preferredSide == "end") {
-
 
10691
        let adjust = Math.max(0, from - Math.min(toA, toB));
-
 
10692
        preferredPos -= toA + adjust - from;
-
 
10693
    }
-
 
10694
    if (toA < from && a.length < b.length) {
-
 
10695
        let move = preferredPos <= from && preferredPos >= toA ? from - preferredPos : 0;
-
 
10696
        from -= move;
-
 
10697
        toB = from + (toB - toA);
-
 
10698
        toA = from;
-
 
10699
    }
-
 
10700
    else if (toB < from) {
-
 
10701
        let move = preferredPos <= from && preferredPos >= toB ? from - preferredPos : 0;
-
 
10702
        from -= move;
-
 
10703
        toA = from + (toA - toB);
-
 
10704
        toB = from;
-
 
10705
    }
-
 
10706
    return { from, toA, toB };
-
 
10707
}
-
 
10708
function selectionPoints(view) {
-
 
10709
    let result = [];
-
 
10710
    if (view.root.activeElement != view.contentDOM)
-
 
10711
        return result;
-
 
10712
    let { anchorNode, anchorOffset, focusNode, focusOffset } = view.observer.selectionRange;
-
 
10713
    if (anchorNode) {
-
 
10714
        result.push(new DOMPoint(anchorNode, anchorOffset));
-
 
10715
        if (focusNode != anchorNode || focusOffset != anchorOffset)
-
 
10716
            result.push(new DOMPoint(focusNode, focusOffset));
-
 
10717
    }
-
 
10718
    return result;
-
 
10719
}
-
 
10720
function selectionFromPoints(points, base) {
-
 
10721
    if (points.length == 0)
-
 
10722
        return null;
-
 
10723
    let anchor = points[0].pos, head = points.length == 2 ? points[1].pos : anchor;
-
 
10724
    return anchor > -1 && head > -1 ? EditorSelection.single(anchor + base, head + base) : null;
-
 
10725
}
-
 
10726
 
10915
 
10727
const observeOptions = {
10916
const observeOptions = {
10728
    childList: true,
10917
    childList: true,
10729
    characterData: true,
10918
    characterData: true,
10730
    subtree: true,
10919
    subtree: true,
Línea 10736... Línea 10925...
10736
const useCharData = browser.ie && browser.ie_version <= 11;
10925
const useCharData = browser.ie && browser.ie_version <= 11;
10737
class DOMObserver {
10926
class DOMObserver {
10738
    constructor(view) {
10927
    constructor(view) {
10739
        this.view = view;
10928
        this.view = view;
10740
        this.active = false;
10929
        this.active = false;
-
 
10930
        this.editContext = null;
10741
        // The known selection. Kept in our own object, as opposed to just
10931
        // The known selection. Kept in our own object, as opposed to just
10742
        // directly accessing the selection because:
10932
        // directly accessing the selection because:
10743
        //  - Safari doesn't report the right selection in shadow DOM
10933
        //  - Safari doesn't report the right selection in shadow DOM
10744
        //  - Reading from the selection forces a DOM layout
10934
        //  - Reading from the selection forces a DOM layout
10745
        //  - This way, we can ignore selectionchange events if we have
10935
        //  - This way, we can ignore selectionchange events if we have
Línea 10780... Línea 10970...
10780
                    m.type == "characterData" && m.oldValue.length > m.target.nodeValue.length))
10970
                    m.type == "characterData" && m.oldValue.length > m.target.nodeValue.length))
10781
                this.flushSoon();
10971
                this.flushSoon();
10782
            else
10972
            else
10783
                this.flush();
10973
                this.flush();
10784
        });
10974
        });
-
 
10975
        if (window.EditContext && view.constructor.EDIT_CONTEXT !== false &&
-
 
10976
            // Chrome <126 doesn't support inverted selections in edit context (#1392)
-
 
10977
            !(browser.chrome && browser.chrome_version < 126)) {
-
 
10978
            this.editContext = new EditContextManager(view);
-
 
10979
            if (view.state.facet(editable))
-
 
10980
                view.contentDOM.editContext = this.editContext.editContext;
-
 
10981
        }
10785
        if (useCharData)
10982
        if (useCharData)
10786
            this.onCharData = (event) => {
10983
            this.onCharData = (event) => {
10787
                this.queue.push({ target: event.target,
10984
                this.queue.push({ target: event.target,
10788
                    type: "characterData",
10985
                    type: "characterData",
10789
                    oldValue: event.prevValue });
10986
                    oldValue: event.prevValue });
Línea 10830... Línea 11027...
10830
            this.view.measure();
11027
            this.view.measure();
10831
    }
11028
    }
10832
    onScroll(e) {
11029
    onScroll(e) {
10833
        if (this.intersecting)
11030
        if (this.intersecting)
10834
            this.flush(false);
11031
            this.flush(false);
-
 
11032
        if (this.editContext)
-
 
11033
            this.view.requestMeasure(this.editContext.measureReq);
10835
        this.onScrollChanged(e);
11034
        this.onScrollChanged(e);
10836
    }
11035
    }
10837
    onResize() {
11036
    onResize() {
10838
        if (this.resizeTimeout < 0)
11037
        if (this.resizeTimeout < 0)
10839
            this.resizeTimeout = setTimeout(() => {
11038
            this.resizeTimeout = setTimeout(() => {
10840
                this.resizeTimeout = -1;
11039
                this.resizeTimeout = -1;
10841
                this.view.requestMeasure();
11040
                this.view.requestMeasure();
10842
            }, 50);
11041
            }, 50);
10843
    }
11042
    }
10844
    onPrint(event) {
11043
    onPrint(event) {
10845
        if (event.type == "change" && !event.matches)
11044
        if ((event.type == "change" || !event.type) && !event.matches)
10846
            return;
11045
            return;
10847
        this.view.viewState.printing = true;
11046
        this.view.viewState.printing = true;
10848
        this.view.measure();
11047
        this.view.measure();
10849
        setTimeout(() => {
11048
        setTimeout(() => {
10850
            this.view.viewState.printing = false;
11049
            this.view.viewState.printing = false;
Línea 10862... Línea 11061...
10862
    onSelectionChange(event) {
11061
    onSelectionChange(event) {
10863
        let wasChanged = this.selectionChanged;
11062
        let wasChanged = this.selectionChanged;
10864
        if (!this.readSelectionRange() || this.delayedAndroidKey)
11063
        if (!this.readSelectionRange() || this.delayedAndroidKey)
10865
            return;
11064
            return;
10866
        let { view } = this, sel = this.selectionRange;
11065
        let { view } = this, sel = this.selectionRange;
10867
        if (view.state.facet(editable) ? view.root.activeElement != this.dom : !hasSelection(view.dom, sel))
11066
        if (view.state.facet(editable) ? view.root.activeElement != this.dom : !hasSelection(this.dom, sel))
10868
            return;
11067
            return;
10869
        let context = sel.anchorNode && view.docView.nearest(sel.anchorNode);
11068
        let context = sel.anchorNode && view.docView.nearest(sel.anchorNode);
10870
        if (context && context.ignoreEvent(event)) {
11069
        if (context && context.ignoreEvent(event)) {
10871
            if (!wasChanged)
11070
            if (!wasChanged)
10872
                this.selectionChanged = false;
11071
                this.selectionChanged = false;
Línea 10890... Línea 11089...
10890
        // https://github.com/codemirror/dev/issues/414
11089
        // https://github.com/codemirror/dev/issues/414
10891
        let selection = getSelection(view.root);
11090
        let selection = getSelection(view.root);
10892
        if (!selection)
11091
        if (!selection)
10893
            return false;
11092
            return false;
10894
        let range = browser.safari && view.root.nodeType == 11 &&
11093
        let range = browser.safari && view.root.nodeType == 11 &&
10895
            deepActiveElement(this.dom.ownerDocument) == this.dom &&
11094
            view.root.activeElement == this.dom &&
10896
            safariSelectionRangeHack(this.view, selection) || selection;
11095
            safariSelectionRangeHack(this.view, selection) || selection;
10897
        if (!range || this.selectionRange.eq(range))
11096
        if (!range || this.selectionRange.eq(range))
10898
            return false;
11097
            return false;
10899
        let local = hasSelection(this.dom, range);
11098
        let local = hasSelection(this.dom, range);
10900
        // Detect the situation where the browser has, on focus, moved the
11099
        // Detect the situation where the browser has, on focus, moved the
Línea 11088... Línea 11287...
11088
            this.view.requestMeasure();
11287
            this.view.requestMeasure();
11089
            return false;
11288
            return false;
11090
        }
11289
        }
11091
        let startState = this.view.state;
11290
        let startState = this.view.state;
11092
        let handled = applyDOMChange(this.view, domChange);
11291
        let handled = applyDOMChange(this.view, domChange);
11093
        // The view wasn't updated
11292
        // The view wasn't updated but DOM/selection changes were seen. Reset the view.
11094
        if (this.view.state == startState)
11293
        if (this.view.state == startState &&
-
 
11294
            (domChange.domChanged || domChange.newSel && !domChange.newSel.main.eq(this.view.state.selection.main)))
11095
            this.view.update([]);
11295
            this.view.update([]);
11096
        return handled;
11296
        return handled;
11097
    }
11297
    }
11098
    readMutation(rec) {
11298
    readMutation(rec) {
11099
        let cView = this.view.docView.nearest(rec.target);
11299
        let cView = this.view.docView.nearest(rec.target);
Línea 11122... Línea 11322...
11122
            this.addWindowListeners(this.win);
11322
            this.addWindowListeners(this.win);
11123
        }
11323
        }
11124
    }
11324
    }
11125
    addWindowListeners(win) {
11325
    addWindowListeners(win) {
11126
        win.addEventListener("resize", this.onResize);
11326
        win.addEventListener("resize", this.onResize);
11127
        if (this.printQuery)
11327
        if (this.printQuery) {
-
 
11328
            if (this.printQuery.addEventListener)
11128
            this.printQuery.addEventListener("change", this.onPrint);
11329
                this.printQuery.addEventListener("change", this.onPrint);
-
 
11330
            else
-
 
11331
                this.printQuery.addListener(this.onPrint);
-
 
11332
        }
11129
        else
11333
        else
11130
            win.addEventListener("beforeprint", this.onPrint);
11334
            win.addEventListener("beforeprint", this.onPrint);
11131
        win.addEventListener("scroll", this.onScroll);
11335
        win.addEventListener("scroll", this.onScroll);
11132
        win.document.addEventListener("selectionchange", this.onSelectionChange);
11336
        win.document.addEventListener("selectionchange", this.onSelectionChange);
11133
    }
11337
    }
11134
    removeWindowListeners(win) {
11338
    removeWindowListeners(win) {
11135
        win.removeEventListener("scroll", this.onScroll);
11339
        win.removeEventListener("scroll", this.onScroll);
11136
        win.removeEventListener("resize", this.onResize);
11340
        win.removeEventListener("resize", this.onResize);
11137
        if (this.printQuery)
11341
        if (this.printQuery) {
-
 
11342
            if (this.printQuery.removeEventListener)
11138
            this.printQuery.removeEventListener("change", this.onPrint);
11343
                this.printQuery.removeEventListener("change", this.onPrint);
-
 
11344
            else
-
 
11345
                this.printQuery.removeListener(this.onPrint);
-
 
11346
        }
11139
        else
11347
        else
11140
            win.removeEventListener("beforeprint", this.onPrint);
11348
            win.removeEventListener("beforeprint", this.onPrint);
11141
        win.document.removeEventListener("selectionchange", this.onSelectionChange);
11349
        win.document.removeEventListener("selectionchange", this.onSelectionChange);
11142
    }
11350
    }
-
 
11351
    update(update) {
-
 
11352
        if (this.editContext) {
-
 
11353
            this.editContext.update(update);
-
 
11354
            if (update.startState.facet(editable) != update.state.facet(editable))
-
 
11355
                update.view.contentDOM.editContext = update.state.facet(editable) ? this.editContext.editContext : null;
-
 
11356
        }
-
 
11357
    }
11143
    destroy() {
11358
    destroy() {
11144
        var _a, _b, _c;
11359
        var _a, _b, _c;
11145
        this.stop();
11360
        this.stop();
11146
        (_a = this.intersection) === null || _a === void 0 ? void 0 : _a.disconnect();
11361
        (_a = this.intersection) === null || _a === void 0 ? void 0 : _a.disconnect();
11147
        (_b = this.gapIntersection) === null || _b === void 0 ? void 0 : _b.disconnect();
11362
        (_b = this.gapIntersection) === null || _b === void 0 ? void 0 : _b.disconnect();
Línea 11151... Línea 11366...
11151
        this.removeWindowListeners(this.win);
11366
        this.removeWindowListeners(this.win);
11152
        clearTimeout(this.parentCheck);
11367
        clearTimeout(this.parentCheck);
11153
        clearTimeout(this.resizeTimeout);
11368
        clearTimeout(this.resizeTimeout);
11154
        this.win.cancelAnimationFrame(this.delayedFlush);
11369
        this.win.cancelAnimationFrame(this.delayedFlush);
11155
        this.win.cancelAnimationFrame(this.flushingAndroidKey);
11370
        this.win.cancelAnimationFrame(this.flushingAndroidKey);
-
 
11371
        if (this.editContext) {
-
 
11372
            this.view.contentDOM.editContext = null;
-
 
11373
            this.editContext.destroy();
-
 
11374
        }
11156
    }
11375
    }
11157
}
11376
}
11158
function findChild(cView, dom, dir) {
11377
function findChild(cView, dom, dir) {
11159
    while (dom) {
11378
    while (dom) {
11160
        let curView = ContentView.get(dom);
11379
        let curView = ContentView.get(dom);
Línea 11197... Línea 11416...
11197
    view.contentDOM.addEventListener("beforeinput", read, true);
11416
    view.contentDOM.addEventListener("beforeinput", read, true);
11198
    view.dom.ownerDocument.execCommand("indent");
11417
    view.dom.ownerDocument.execCommand("indent");
11199
    view.contentDOM.removeEventListener("beforeinput", read, true);
11418
    view.contentDOM.removeEventListener("beforeinput", read, true);
11200
    return found ? buildSelectionRangeFromRange(view, found) : null;
11419
    return found ? buildSelectionRangeFromRange(view, found) : null;
11201
}
11420
}
-
 
11421
class EditContextManager {
-
 
11422
    constructor(view) {
-
 
11423
        // The document window for which the text in the context is
-
 
11424
        // maintained. For large documents, this may be smaller than the
-
 
11425
        // editor document. This window always includes the selection head.
-
 
11426
        this.from = 0;
-
 
11427
        this.to = 0;
-
 
11428
        // When applying a transaction, this is used to compare the change
-
 
11429
        // made to the context content to the change in the transaction in
-
 
11430
        // order to make the minimal changes to the context (since touching
-
 
11431
        // that sometimes breaks series of multiple edits made for a single
-
 
11432
        // user action on some Android keyboards)
-
 
11433
        this.pendingContextChange = null;
-
 
11434
        this.handlers = Object.create(null);
-
 
11435
        // Kludge to work around the fact that EditContext does not respond
-
 
11436
        // well to having its content updated during a composition (see #1472)
-
 
11437
        this.composing = null;
-
 
11438
        this.resetRange(view.state);
-
 
11439
        let context = this.editContext = new window.EditContext({
-
 
11440
            text: view.state.doc.sliceString(this.from, this.to),
-
 
11441
            selectionStart: this.toContextPos(Math.max(this.from, Math.min(this.to, view.state.selection.main.anchor))),
-
 
11442
            selectionEnd: this.toContextPos(view.state.selection.main.head)
-
 
11443
        });
-
 
11444
        this.handlers.textupdate = e => {
-
 
11445
            let main = view.state.selection.main, { anchor, head } = main;
-
 
11446
            let from = this.toEditorPos(e.updateRangeStart), to = this.toEditorPos(e.updateRangeEnd);
-
 
11447
            if (view.inputState.composing >= 0 && !this.composing)
-
 
11448
                this.composing = { contextBase: e.updateRangeStart, editorBase: from, drifted: false };
-
 
11449
            let change = { from, to, insert: Text.of(e.text.split("\n")) };
-
 
11450
            // If the window doesn't include the anchor, assume changes
-
 
11451
            // adjacent to a side go up to the anchor.
-
 
11452
            if (change.from == this.from && anchor < this.from)
-
 
11453
                change.from = anchor;
-
 
11454
            else if (change.to == this.to && anchor > this.to)
-
 
11455
                change.to = anchor;
-
 
11456
            // Edit contexts sometimes fire empty changes
-
 
11457
            if (change.from == change.to && !change.insert.length) {
-
 
11458
                let newSel = EditorSelection.single(this.toEditorPos(e.selectionStart), this.toEditorPos(e.selectionEnd));
-
 
11459
                if (!newSel.main.eq(main))
-
 
11460
                    view.dispatch({ selection: newSel, userEvent: "select" });
-
 
11461
                return;
-
 
11462
            }
-
 
11463
            if ((browser.mac || browser.android) && change.from == head - 1 &&
-
 
11464
                /^\. ?$/.test(e.text) && view.contentDOM.getAttribute("autocorrect") == "off")
-
 
11465
                change = { from, to, insert: Text.of([e.text.replace(".", " ")]) };
-
 
11466
            this.pendingContextChange = change;
-
 
11467
            if (!view.state.readOnly) {
-
 
11468
                let newLen = this.to - this.from + (change.to - change.from + change.insert.length);
-
 
11469
                applyDOMChangeInner(view, change, EditorSelection.single(this.toEditorPos(e.selectionStart, newLen), this.toEditorPos(e.selectionEnd, newLen)));
-
 
11470
            }
-
 
11471
            // If the transaction didn't flush our change, revert it so
-
 
11472
            // that the context is in sync with the editor state again.
-
 
11473
            if (this.pendingContextChange) {
-
 
11474
                this.revertPending(view.state);
-
 
11475
                this.setSelection(view.state);
-
 
11476
            }
-
 
11477
        };
-
 
11478
        this.handlers.characterboundsupdate = e => {
-
 
11479
            let rects = [], prev = null;
-
 
11480
            for (let i = this.toEditorPos(e.rangeStart), end = this.toEditorPos(e.rangeEnd); i < end; i++) {
-
 
11481
                let rect = view.coordsForChar(i);
-
 
11482
                prev = (rect && new DOMRect(rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top))
-
 
11483
                    || prev || new DOMRect;
-
 
11484
                rects.push(prev);
-
 
11485
            }
-
 
11486
            context.updateCharacterBounds(e.rangeStart, rects);
-
 
11487
        };
-
 
11488
        this.handlers.textformatupdate = e => {
-
 
11489
            let deco = [];
-
 
11490
            for (let format of e.getTextFormats()) {
-
 
11491
                let lineStyle = format.underlineStyle, thickness = format.underlineThickness;
-
 
11492
                if (lineStyle != "None" && thickness != "None") {
-
 
11493
                    let from = this.toEditorPos(format.rangeStart), to = this.toEditorPos(format.rangeEnd);
-
 
11494
                    if (from < to) {
-
 
11495
                        let style = `text-decoration: underline ${lineStyle == "Dashed" ? "dashed " : lineStyle == "Squiggle" ? "wavy " : ""}${thickness == "Thin" ? 1 : 2}px`;
-
 
11496
                        deco.push(Decoration.mark({ attributes: { style } }).range(from, to));
-
 
11497
                    }
-
 
11498
                }
-
 
11499
            }
-
 
11500
            view.dispatch({ effects: setEditContextFormatting.of(Decoration.set(deco)) });
-
 
11501
        };
-
 
11502
        this.handlers.compositionstart = () => {
-
 
11503
            if (view.inputState.composing < 0) {
-
 
11504
                view.inputState.composing = 0;
-
 
11505
                view.inputState.compositionFirstChange = true;
-
 
11506
            }
-
 
11507
        };
-
 
11508
        this.handlers.compositionend = () => {
-
 
11509
            view.inputState.composing = -1;
-
 
11510
            view.inputState.compositionFirstChange = null;
-
 
11511
            if (this.composing) {
-
 
11512
                let { drifted } = this.composing;
-
 
11513
                this.composing = null;
-
 
11514
                if (drifted)
-
 
11515
                    this.reset(view.state);
-
 
11516
            }
-
 
11517
        };
-
 
11518
        for (let event in this.handlers)
-
 
11519
            context.addEventListener(event, this.handlers[event]);
-
 
11520
        this.measureReq = { read: view => {
-
 
11521
                this.editContext.updateControlBounds(view.contentDOM.getBoundingClientRect());
-
 
11522
                let sel = getSelection(view.root);
-
 
11523
                if (sel && sel.rangeCount)
-
 
11524
                    this.editContext.updateSelectionBounds(sel.getRangeAt(0).getBoundingClientRect());
-
 
11525
            } };
-
 
11526
    }
-
 
11527
    applyEdits(update) {
-
 
11528
        let off = 0, abort = false, pending = this.pendingContextChange;
-
 
11529
        update.changes.iterChanges((fromA, toA, _fromB, _toB, insert) => {
-
 
11530
            if (abort)
-
 
11531
                return;
-
 
11532
            let dLen = insert.length - (toA - fromA);
-
 
11533
            if (pending && toA >= pending.to) {
-
 
11534
                if (pending.from == fromA && pending.to == toA && pending.insert.eq(insert)) {
-
 
11535
                    pending = this.pendingContextChange = null; // Match
-
 
11536
                    off += dLen;
-
 
11537
                    this.to += dLen;
-
 
11538
                    return;
-
 
11539
                }
-
 
11540
                else { // Mismatch, revert
-
 
11541
                    pending = null;
-
 
11542
                    this.revertPending(update.state);
-
 
11543
                }
-
 
11544
            }
-
 
11545
            fromA += off;
-
 
11546
            toA += off;
-
 
11547
            if (toA <= this.from) { // Before the window
-
 
11548
                this.from += dLen;
-
 
11549
                this.to += dLen;
-
 
11550
            }
-
 
11551
            else if (fromA < this.to) { // Overlaps with window
-
 
11552
                if (fromA < this.from || toA > this.to || (this.to - this.from) + insert.length > 30000 /* CxVp.MaxSize */) {
-
 
11553
                    abort = true;
-
 
11554
                    return;
-
 
11555
                }
-
 
11556
                this.editContext.updateText(this.toContextPos(fromA), this.toContextPos(toA), insert.toString());
-
 
11557
                this.to += dLen;
-
 
11558
            }
-
 
11559
            off += dLen;
-
 
11560
        });
-
 
11561
        if (pending && !abort)
-
 
11562
            this.revertPending(update.state);
-
 
11563
        return !abort;
-
 
11564
    }
-
 
11565
    update(update) {
-
 
11566
        let reverted = this.pendingContextChange, startSel = update.startState.selection.main;
-
 
11567
        if (this.composing &&
-
 
11568
            (this.composing.drifted ||
-
 
11569
                (!update.changes.touchesRange(startSel.from, startSel.to) &&
-
 
11570
                    update.transactions.some(tr => !tr.isUserEvent("input.type") && tr.changes.touchesRange(this.from, this.to))))) {
-
 
11571
            this.composing.drifted = true;
-
 
11572
            this.composing.editorBase = update.changes.mapPos(this.composing.editorBase);
-
 
11573
        }
-
 
11574
        else if (!this.applyEdits(update) || !this.rangeIsValid(update.state)) {
-
 
11575
            this.pendingContextChange = null;
-
 
11576
            this.reset(update.state);
-
 
11577
        }
-
 
11578
        else if (update.docChanged || update.selectionSet || reverted) {
-
 
11579
            this.setSelection(update.state);
-
 
11580
        }
-
 
11581
        if (update.geometryChanged || update.docChanged || update.selectionSet)
-
 
11582
            update.view.requestMeasure(this.measureReq);
-
 
11583
    }
-
 
11584
    resetRange(state) {
-
 
11585
        let { head } = state.selection.main;
-
 
11586
        this.from = Math.max(0, head - 10000 /* CxVp.Margin */);
-
 
11587
        this.to = Math.min(state.doc.length, head + 10000 /* CxVp.Margin */);
-
 
11588
    }
-
 
11589
    reset(state) {
-
 
11590
        this.resetRange(state);
-
 
11591
        this.editContext.updateText(0, this.editContext.text.length, state.doc.sliceString(this.from, this.to));
-
 
11592
        this.setSelection(state);
-
 
11593
    }
-
 
11594
    revertPending(state) {
-
 
11595
        let pending = this.pendingContextChange;
-
 
11596
        this.pendingContextChange = null;
-
 
11597
        this.editContext.updateText(this.toContextPos(pending.from), this.toContextPos(pending.from + pending.insert.length), state.doc.sliceString(pending.from, pending.to));
-
 
11598
    }
-
 
11599
    setSelection(state) {
-
 
11600
        let { main } = state.selection;
-
 
11601
        let start = this.toContextPos(Math.max(this.from, Math.min(this.to, main.anchor)));
-
 
11602
        let end = this.toContextPos(main.head);
-
 
11603
        if (this.editContext.selectionStart != start || this.editContext.selectionEnd != end)
-
 
11604
            this.editContext.updateSelection(start, end);
-
 
11605
    }
-
 
11606
    rangeIsValid(state) {
-
 
11607
        let { head } = state.selection.main;
-
 
11608
        return !(this.from > 0 && head - this.from < 500 /* CxVp.MinMargin */ ||
-
 
11609
            this.to < state.doc.length && this.to - head < 500 /* CxVp.MinMargin */ ||
-
 
11610
            this.to - this.from > 10000 /* CxVp.Margin */ * 3);
-
 
11611
    }
-
 
11612
    toEditorPos(contextPos, clipLen = this.to - this.from) {
-
 
11613
        contextPos = Math.min(contextPos, clipLen);
-
 
11614
        let c = this.composing;
-
 
11615
        return c && c.drifted ? c.editorBase + (contextPos - c.contextBase) : contextPos + this.from;
-
 
11616
    }
-
 
11617
    toContextPos(editorPos) {
-
 
11618
        let c = this.composing;
-
 
11619
        return c && c.drifted ? c.contextBase + (editorPos - c.editorBase) : editorPos - this.from;
-
 
11620
    }
-
 
11621
    destroy() {
-
 
11622
        for (let event in this.handlers)
-
 
11623
            this.editContext.removeEventListener(event, this.handlers[event]);
-
 
11624
    }
-
 
11625
}
Línea 11202... Línea 11626...
11202
 
11626
 
11203
// The editor's update state machine looks something like this:
11627
// The editor's update state machine looks something like this:
11204
//
11628
//
11205
//     Idle → Updating ⇆ Idle (unchecked) → Measuring → Idle
11629
//     Idle → Updating ⇆ Idle (unchecked) → Measuring → Idle
Línea 11271... Línea 11695...
11271
    Construct a new view. You'll want to either provide a `parent`
11695
    Construct a new view. You'll want to either provide a `parent`
11272
    option, or put `view.dom` into your document after creating a
11696
    option, or put `view.dom` into your document after creating a
11273
    view, so that the user can see the editor.
11697
    view, so that the user can see the editor.
11274
    */
11698
    */
11275
    constructor(config = {}) {
11699
    constructor(config = {}) {
-
 
11700
        var _a;
11276
        this.plugins = [];
11701
        this.plugins = [];
11277
        this.pluginMap = new Map;
11702
        this.pluginMap = new Map;
11278
        this.editorAttrs = {};
11703
        this.editorAttrs = {};
11279
        this.contentAttrs = {};
11704
        this.contentAttrs = {};
11280
        this.bidiCache = [];
11705
        this.bidiCache = [];
Línea 11322... Línea 11747...
11322
        this.docView = new DocView(this);
11747
        this.docView = new DocView(this);
11323
        this.mountStyles();
11748
        this.mountStyles();
11324
        this.updateAttrs();
11749
        this.updateAttrs();
11325
        this.updateState = 0 /* UpdateState.Idle */;
11750
        this.updateState = 0 /* UpdateState.Idle */;
11326
        this.requestMeasure();
11751
        this.requestMeasure();
-
 
11752
        if ((_a = document.fonts) === null || _a === void 0 ? void 0 : _a.ready)
-
 
11753
            document.fonts.ready.then(() => this.requestMeasure());
11327
    }
11754
    }
11328
    dispatch(...input) {
11755
    dispatch(...input) {
11329
        let trs = input.length == 1 && input[0] instanceof Transaction ? input
11756
        let trs = input.length == 1 && input[0] instanceof Transaction ? input
11330
            : input.length == 1 && Array.isArray(input[0]) ? input[0]
11757
            : input.length == 1 && Array.isArray(input[0]) ? input[0]
11331
                : [this.state.update(...input)];
11758
                : [this.state.update(...input)];
Línea 11654... Línea 12081...
11654
        });
12081
        });
11655
        let contentAttrs = {
12082
        let contentAttrs = {
11656
            spellcheck: "false",
12083
            spellcheck: "false",
11657
            autocorrect: "off",
12084
            autocorrect: "off",
11658
            autocapitalize: "off",
12085
            autocapitalize: "off",
-
 
12086
            writingsuggestions: "false",
11659
            translate: "no",
12087
            translate: "no",
11660
            contenteditable: !this.state.facet(editable) ? "false" : "true",
12088
            contenteditable: !this.state.facet(editable) ? "false" : "true",
11661
            class: "cm-content",
12089
            class: "cm-content",
11662
            style: `${browser.tabSize}: ${this.state.tabSize}`,
12090
            style: `${browser.tabSize}: ${this.state.tabSize}`,
11663
            role: "textbox",
12091
            role: "textbox",
Línea 11787... Línea 12215...
11787
        return this.viewState.viewportLines;
12215
        return this.viewState.viewportLines;
11788
    }
12216
    }
11789
    /**
12217
    /**
11790
    Find the line block around the given document position. A line
12218
    Find the line block around the given document position. A line
11791
    block is a range delimited on both sides by either a
12219
    block is a range delimited on both sides by either a
11792
    non-[hidden](https://codemirror.net/6/docs/ref/#view.Decoration^replace) line breaks, or the
12220
    non-[hidden](https://codemirror.net/6/docs/ref/#view.Decoration^replace) line break, or the
11793
    start/end of the document. It will usually just hold a line of
12221
    start/end of the document. It will usually just hold a line of
11794
    text, but may be broken into multiple textblocks by block
12222
    text, but may be broken into multiple textblocks by block
11795
    widgets.
12223
    widgets.
11796
    */
12224
    */
11797
    lineBlockAt(pos) {
12225
    lineBlockAt(pos) {
Línea 12019... Línea 12447...
12019
    document, unregistering event handlers, and notifying
12447
    document, unregistering event handlers, and notifying
12020
    plugins. The view instance can no longer be used after
12448
    plugins. The view instance can no longer be used after
12021
    calling this.
12449
    calling this.
12022
    */
12450
    */
12023
    destroy() {
12451
    destroy() {
-
 
12452
        if (this.root.activeElement == this.contentDOM)
-
 
12453
            this.contentDOM.blur();
12024
        for (let plugin of this.plugins)
12454
        for (let plugin of this.plugins)
12025
            plugin.destroy(this);
12455
            plugin.destroy(this);
12026
        this.plugins = [];
12456
        this.plugins = [];
12027
        this.inputState.destroy();
12457
        this.inputState.destroy();
12028
        this.docView.destroy();
12458
        this.docView.destroy();
Línea 12056... Línea 12486...
12056
        let { scrollTop, scrollLeft } = this.scrollDOM;
12486
        let { scrollTop, scrollLeft } = this.scrollDOM;
12057
        let ref = this.viewState.scrollAnchorAt(scrollTop);
12487
        let ref = this.viewState.scrollAnchorAt(scrollTop);
12058
        return scrollIntoView$1.of(new ScrollTarget(EditorSelection.cursor(ref.from), "start", "start", ref.top - scrollTop, scrollLeft, true));
12488
        return scrollIntoView$1.of(new ScrollTarget(EditorSelection.cursor(ref.from), "start", "start", ref.top - scrollTop, scrollLeft, true));
12059
    }
12489
    }
12060
    /**
12490
    /**
-
 
12491
    Enable or disable tab-focus mode, which disables key bindings
-
 
12492
    for Tab and Shift-Tab, letting the browser's default
-
 
12493
    focus-changing behavior go through instead. This is useful to
-
 
12494
    prevent trapping keyboard users in your editor.
-
 
12495
    
-
 
12496
    Without argument, this toggles the mode. With a boolean, it
-
 
12497
    enables (true) or disables it (false). Given a number, it
-
 
12498
    temporarily enables the mode until that number of milliseconds
-
 
12499
    have passed or another non-Tab key is pressed.
-
 
12500
    */
-
 
12501
    setTabFocusMode(to) {
-
 
12502
        if (to == null)
-
 
12503
            this.inputState.tabFocusMode = this.inputState.tabFocusMode < 0 ? 0 : -1;
-
 
12504
        else if (typeof to == "boolean")
-
 
12505
            this.inputState.tabFocusMode = to ? 0 : -1;
-
 
12506
        else if (this.inputState.tabFocusMode != 0)
-
 
12507
            this.inputState.tabFocusMode = Date.now() + to;
-
 
12508
    }
-
 
12509
    /**
12061
    Returns an extension that can be used to add DOM event handlers.
12510
    Returns an extension that can be used to add DOM event handlers.
12062
    The value should be an object mapping event names to handler
12511
    The value should be an object mapping event names to handler
12063
    functions. For any given event, such functions are ordered by
12512
    functions. For any given event, such functions are ordered by
12064
    extension precedence, and the first handler to return true will
12513
    extension precedence, and the first handler to return true will
12065
    be assumed to have handled that event, and no other handlers or
12514
    be assumed to have handled that event, and no other handlers or
Línea 12148... Línea 12597...
12148
that would be applied for this input. This can be useful when
12597
that would be applied for this input. This can be useful when
12149
dispatching the custom behavior as a separate transaction.
12598
dispatching the custom behavior as a separate transaction.
12150
*/
12599
*/
12151
EditorView.inputHandler = inputHandler$1;
12600
EditorView.inputHandler = inputHandler$1;
12152
/**
12601
/**
-
 
12602
Functions provided in this facet will be used to transform text
-
 
12603
pasted or dropped into the editor.
-
 
12604
*/
-
 
12605
EditorView.clipboardInputFilter = clipboardInputFilter;
-
 
12606
/**
-
 
12607
Transform text copied or dragged from the editor.
-
 
12608
*/
-
 
12609
EditorView.clipboardOutputFilter = clipboardOutputFilter;
-
 
12610
/**
12153
Scroll handlers can override how things are scrolled into view.
12611
Scroll handlers can override how things are scrolled into view.
12154
If they return `true`, no further handling happens for the
12612
If they return `true`, no further handling happens for the
12155
scrolling. If they return false, the default scroll behavior is
12613
scrolling. If they return false, the default scroll behavior is
12156
applied. Scroll handlers should never initiate editor updates.
12614
applied. Scroll handlers should never initiate editor updates.
12157
*/
12615
*/
Línea 12467... Línea 12925...
12467
        if (b.any)
12925
        if (b.any)
12468
            for (let scope of scopes) {
12926
            for (let scope of scopes) {
12469
                let scopeObj = bound[scope] || (bound[scope] = Object.create(null));
12927
                let scopeObj = bound[scope] || (bound[scope] = Object.create(null));
12470
                if (!scopeObj._any)
12928
                if (!scopeObj._any)
12471
                    scopeObj._any = { preventDefault: false, stopPropagation: false, run: [] };
12929
                    scopeObj._any = { preventDefault: false, stopPropagation: false, run: [] };
-
 
12930
                let { any } = b;
12472
                for (let key in scopeObj)
12931
                for (let key in scopeObj)
12473
                    scopeObj[key].run.push(b.any);
12932
                    scopeObj[key].run.push(view => any(view, currentKeyEvent));
12474
            }
12933
            }
12475
        let name = b[platform] || b.key;
12934
        let name = b[platform] || b.key;
12476
        if (!name)
12935
        if (!name)
12477
            continue;
12936
            continue;
12478
        for (let scope of scopes) {
12937
        for (let scope of scopes) {
Línea 12481... Línea 12940...
12481
                add(scope, "Shift-" + name, b.shift, b.preventDefault, b.stopPropagation);
12940
                add(scope, "Shift-" + name, b.shift, b.preventDefault, b.stopPropagation);
12482
        }
12941
        }
12483
    }
12942
    }
12484
    return bound;
12943
    return bound;
12485
}
12944
}
-
 
12945
let currentKeyEvent = null;
12486
function runHandlers(map, event, view, scope) {
12946
function runHandlers(map, event, view, scope) {
-
 
12947
    currentKeyEvent = event;
12487
    let name = keyName(event);
12948
    let name = keyName(event);
12488
    let charCode = codePointAt(name, 0), isChar = codePointSize(charCode) == name.length && name != " ";
12949
    let charCode = codePointAt(name, 0), isChar = codePointSize(charCode) == name.length && name != " ";
12489
    let prefix = "", handled = false, prevented = false, stopPropagation = false;
12950
    let prefix = "", handled = false, prevented = false, stopPropagation = false;
12490
    if (storedPrefix && storedPrefix.view == view && storedPrefix.scope == scope) {
12951
    if (storedPrefix && storedPrefix.view == view && storedPrefix.scope == scope) {
12491
        prefix = storedPrefix.prefix + " ";
12952
        prefix = storedPrefix.prefix + " ";
Línea 12498... Línea 12959...
12498
    let runFor = (binding) => {
12959
    let runFor = (binding) => {
12499
        if (binding) {
12960
        if (binding) {
12500
            for (let cmd of binding.run)
12961
            for (let cmd of binding.run)
12501
                if (!ran.has(cmd)) {
12962
                if (!ran.has(cmd)) {
12502
                    ran.add(cmd);
12963
                    ran.add(cmd);
12503
                    if (cmd(view, event)) {
12964
                    if (cmd(view)) {
12504
                        if (binding.stopPropagation)
12965
                        if (binding.stopPropagation)
12505
                            stopPropagation = true;
12966
                            stopPropagation = true;
12506
                        return true;
12967
                        return true;
12507
                    }
12968
                    }
12508
                }
12969
                }
Línea 12540... Línea 13001...
12540
    }
13001
    }
12541
    if (prevented)
13002
    if (prevented)
12542
        handled = true;
13003
        handled = true;
12543
    if (handled && stopPropagation)
13004
    if (handled && stopPropagation)
12544
        event.stopPropagation();
13005
        event.stopPropagation();
-
 
13006
    currentKeyEvent = null;
12545
    return handled;
13007
    return handled;
12546
}
13008
}
Línea 12547... Línea 13009...
12547
 
13009
 
12548
/**
13010
/**
Línea 12623... Línea 13085...
12623
function getBase(view) {
13085
function getBase(view) {
12624
    let rect = view.scrollDOM.getBoundingClientRect();
13086
    let rect = view.scrollDOM.getBoundingClientRect();
12625
    let left = view.textDirection == Direction.LTR ? rect.left : rect.right - view.scrollDOM.clientWidth * view.scaleX;
13087
    let left = view.textDirection == Direction.LTR ? rect.left : rect.right - view.scrollDOM.clientWidth * view.scaleX;
12626
    return { left: left - view.scrollDOM.scrollLeft * view.scaleX, top: rect.top - view.scrollDOM.scrollTop * view.scaleY };
13088
    return { left: left - view.scrollDOM.scrollLeft * view.scaleX, top: rect.top - view.scrollDOM.scrollTop * view.scaleY };
12627
}
13089
}
12628
function wrappedLine(view, pos, inside) {
13090
function wrappedLine(view, pos, side, inside) {
12629
    let range = EditorSelection.cursor(pos);
13091
    let coords = view.coordsAtPos(pos, side * 2);
-
 
13092
    if (!coords)
-
 
13093
        return inside;
12630
    return { from: Math.max(inside.from, view.moveToLineBoundary(range, false, true).from),
13094
    let editorRect = view.dom.getBoundingClientRect();
-
 
13095
    let y = (coords.top + coords.bottom) / 2;
12631
        to: Math.min(inside.to, view.moveToLineBoundary(range, true, true).from),
13096
    let left = view.posAtCoords({ x: editorRect.left + 1, y });
-
 
13097
    let right = view.posAtCoords({ x: editorRect.right - 1, y });
-
 
13098
    if (left == null || right == null)
12632
        type: BlockType.Text };
13099
        return inside;
-
 
13100
    return { from: Math.max(inside.from, Math.min(left, right)), to: Math.min(inside.to, Math.max(left, right)) };
12633
}
13101
}
12634
function rectanglesForRange(view, className, range) {
13102
function rectanglesForRange(view, className, range) {
12635
    if (range.to <= view.viewport.from || range.from >= view.viewport.to)
13103
    if (range.to <= view.viewport.from || range.from >= view.viewport.to)
12636
        return [];
13104
        return [];
12637
    let from = Math.max(range.from, view.viewport.from), to = Math.min(range.to, view.viewport.to);
13105
    let from = Math.max(range.from, view.viewport.from), to = Math.min(range.to, view.viewport.to);
Línea 12643... Línea 13111...
12643
    let rightSide = contentRect.right - (lineStyle ? parseInt(lineStyle.paddingRight) : 0);
13111
    let rightSide = contentRect.right - (lineStyle ? parseInt(lineStyle.paddingRight) : 0);
12644
    let startBlock = blockAt(view, from), endBlock = blockAt(view, to);
13112
    let startBlock = blockAt(view, from), endBlock = blockAt(view, to);
12645
    let visualStart = startBlock.type == BlockType.Text ? startBlock : null;
13113
    let visualStart = startBlock.type == BlockType.Text ? startBlock : null;
12646
    let visualEnd = endBlock.type == BlockType.Text ? endBlock : null;
13114
    let visualEnd = endBlock.type == BlockType.Text ? endBlock : null;
12647
    if (visualStart && (view.lineWrapping || startBlock.widgetLineBreaks))
13115
    if (visualStart && (view.lineWrapping || startBlock.widgetLineBreaks))
12648
        visualStart = wrappedLine(view, from, visualStart);
13116
        visualStart = wrappedLine(view, from, 1, visualStart);
12649
    if (visualEnd && (view.lineWrapping || endBlock.widgetLineBreaks))
13117
    if (visualEnd && (view.lineWrapping || endBlock.widgetLineBreaks))
12650
        visualEnd = wrappedLine(view, to, visualEnd);
13118
        visualEnd = wrappedLine(view, to, -1, visualEnd);
12651
    if (visualStart && visualEnd && visualStart.from == visualEnd.from) {
13119
    if (visualStart && visualEnd && visualStart.from == visualEnd.from && visualStart.to == visualEnd.to) {
12652
        return pieces(drawForLine(range.from, range.to, visualStart));
13120
        return pieces(drawForLine(range.from, range.to, visualStart));
12653
    }
13121
    }
12654
    else {
13122
    else {
12655
        let top = visualStart ? drawForLine(range.from, null, visualStart) : drawForWidget(startBlock, false);
13123
        let top = visualStart ? drawForLine(range.from, null, visualStart) : drawForWidget(startBlock, false);
12656
        let bottom = visualEnd ? drawForLine(null, range.to, visualEnd) : drawForWidget(endBlock, true);
13124
        let bottom = visualEnd ? drawForLine(null, range.to, visualEnd) : drawForWidget(endBlock, true);
Línea 12661... Línea 13129...
12661
        else if (top.bottom < bottom.top && view.elementAtHeight((top.bottom + bottom.top) / 2).type == BlockType.Text)
13129
        else if (top.bottom < bottom.top && view.elementAtHeight((top.bottom + bottom.top) / 2).type == BlockType.Text)
12662
            top.bottom = bottom.top = (top.bottom + bottom.top) / 2;
13130
            top.bottom = bottom.top = (top.bottom + bottom.top) / 2;
12663
        return pieces(top).concat(between).concat(pieces(bottom));
13131
        return pieces(top).concat(between).concat(pieces(bottom));
12664
    }
13132
    }
12665
    function piece(left, top, right, bottom) {
13133
    function piece(left, top, right, bottom) {
12666
        return new RectangleMarker(className, left - base.left, top - base.top - 0.01 /* C.Epsilon */, right - left, bottom - top + 0.01 /* C.Epsilon */);
13134
        return new RectangleMarker(className, left - base.left, top - base.top, right - left, bottom - top);
12667
    }
13135
    }
12668
    function pieces({ top, bottom, horizontal }) {
13136
    function pieces({ top, bottom, horizontal }) {
12669
        let pieces = [];
13137
        let pieces = [];
12670
        for (let i = 0; i < horizontal.length; i += 2)
13138
        for (let i = 0; i < horizontal.length; i += 2)
12671
            pieces.push(piece(horizontal[i], top, horizontal[i + 1], bottom));
13139
            pieces.push(piece(horizontal[i], top, horizontal[i + 1], bottom));
Línea 12806... Línea 13274...
12806
        ViewPlugin.define(v => new LayerView(v, config)),
13274
        ViewPlugin.define(v => new LayerView(v, config)),
12807
        layerOrder.of(config)
13275
        layerOrder.of(config)
12808
    ];
13276
    ];
12809
}
13277
}
Línea 12810... Línea 13278...
12810
 
13278
 
12811
const CanHidePrimary = !browser.ios; // FIXME test IE
13279
const CanHidePrimary = !(browser.ios && browser.webkit && browser.webkit_version < 534);
12812
const selectionConfig = /*@__PURE__*/Facet.define({
13280
const selectionConfig = /*@__PURE__*/Facet.define({
12813
    combine(configs) {
13281
    combine(configs) {
12814
        return combineConfig(configs, {
13282
        return combineConfig(configs, {
12815
            cursorBlinkRate: 1200,
13283
            cursorBlinkRate: 1200,
Línea 12893... Línea 13361...
12893
    },
13361
    },
12894
    class: "cm-selectionLayer"
13362
    class: "cm-selectionLayer"
12895
});
13363
});
12896
const themeSpec = {
13364
const themeSpec = {
12897
    ".cm-line": {
13365
    ".cm-line": {
12898
        "& ::selection": { backgroundColor: "transparent !important" },
13366
        "& ::selection, &::selection": { backgroundColor: "transparent !important" },
-
 
13367
    },
-
 
13368
    ".cm-content": {
-
 
13369
        "& :focus": {
-
 
13370
            caretColor: "initial !important",
-
 
13371
            "&::selection, & ::selection": {
12899
        "&::selection": { backgroundColor: "transparent !important" }
13372
                backgroundColor: "Highlight !important"
-
 
13373
            }
-
 
13374
        }
12900
    }
13375
    }
12901
};
13376
};
12902
if (CanHidePrimary) {
13377
if (CanHidePrimary)
12903
    themeSpec[".cm-line"].caretColor = "transparent !important";
13378
    themeSpec[".cm-line"].caretColor = themeSpec[".cm-content"].caretColor = "transparent !important";
12904
    themeSpec[".cm-content"] = { caretColor: "transparent !important" };
-
 
12905
}
-
 
12906
const hideNativeSelection = /*@__PURE__*/Prec.highest(/*@__PURE__*/EditorView.theme(themeSpec));
13379
const hideNativeSelection = /*@__PURE__*/Prec.highest(/*@__PURE__*/EditorView.theme(themeSpec));
Línea 12907... Línea 13380...
12907
 
13380
 
12908
const setDropCursorPos = /*@__PURE__*/StateEffect.define({
13381
const setDropCursorPos = /*@__PURE__*/StateEffect.define({
12909
    map(pos, mapping) { return pos == null ? null : mapping.mapPos(pos); }
13382
    map(pos, mapping) { return pos == null ? null : mapping.mapPos(pos); }
Línea 13075... Línea 13548...
13075
    */
13548
    */
13076
    updateDeco(update, deco) {
13549
    updateDeco(update, deco) {
13077
        let changeFrom = 1e9, changeTo = -1;
13550
        let changeFrom = 1e9, changeTo = -1;
13078
        if (update.docChanged)
13551
        if (update.docChanged)
13079
            update.changes.iterChanges((_f, _t, from, to) => {
13552
            update.changes.iterChanges((_f, _t, from, to) => {
13080
                if (to > update.view.viewport.from && from < update.view.viewport.to) {
13553
                if (to >= update.view.viewport.from && from <= update.view.viewport.to) {
13081
                    changeFrom = Math.min(from, changeFrom);
13554
                    changeFrom = Math.min(from, changeFrom);
13082
                    changeTo = Math.max(to, changeTo);
13555
                    changeTo = Math.max(to, changeTo);
13083
                }
13556
                }
13084
            });
13557
            });
13085
        if (update.viewportChanged || changeTo - changeFrom > 1000)
13558
        if (update.viewportMoved || changeTo - changeFrom > 1000)
13086
            return this.createDeco(update.view);
13559
            return this.createDeco(update.view);
13087
        if (changeTo > -1)
13560
        if (changeTo > -1)
13088
            return this.updateRange(update.view, deco.map(update.changes), changeFrom, changeTo);
13561
            return this.updateRange(update.view, deco.map(update.changes), changeFrom, changeTo);
13089
        return deco;
13562
        return deco;
13090
    }
13563
    }
Línea 13379... Línea 13852...
13379
down. When such a selection occurs, the text within the rectangle
13852
down. When such a selection occurs, the text within the rectangle
13380
that was dragged over will be selected, as one selection
13853
that was dragged over will be selected, as one selection
13381
[range](https://codemirror.net/6/docs/ref/#state.SelectionRange) per line.
13854
[range](https://codemirror.net/6/docs/ref/#state.SelectionRange) per line.
13382
*/
13855
*/
13383
function rectangularSelection(options) {
13856
function rectangularSelection(options) {
13384
    let filter = (options === null || options === void 0 ? void 0 : options.eventFilter) || (e => e.altKey && e.button == 0);
13857
    let filter = (e => e.altKey && e.button == 0);
13385
    return EditorView.mouseSelectionStyle.of((view, event) => filter(event) ? rectangleSelectionStyle(view, event) : null);
13858
    return EditorView.mouseSelectionStyle.of((view, event) => filter(event) ? rectangleSelectionStyle(view, event) : null);
13386
}
13859
}
13387
const keys = {
13860
const keys = {
13388
    Alt: [18, e => !!e.altKey],
13861
    Alt: [18, e => !!e.altKey],
13389
    Control: [17, e => !!e.ctrlKey],
13862
    Control: [17, e => !!e.ctrlKey],
Línea 13489... Línea 13962...
13489
        this.tooltipViews = tooltipViews;
13962
        this.tooltipViews = tooltipViews;
13490
        return true;
13963
        return true;
13491
    }
13964
    }
13492
}
13965
}
13493
function windowSpace(view) {
13966
function windowSpace(view) {
13494
    let { win } = view;
13967
    let docElt = view.dom.ownerDocument.documentElement;
13495
    return { top: 0, left: 0, bottom: win.innerHeight, right: win.innerWidth };
13968
    return { top: 0, left: 0, bottom: docElt.clientHeight, right: docElt.clientWidth };
13496
}
13969
}
13497
const tooltipConfig = /*@__PURE__*/Facet.define({
13970
const tooltipConfig = /*@__PURE__*/Facet.define({
13498
    combine: values => {
13971
    combine: values => {
13499
        var _a, _b, _c;
13972
        var _a, _b, _c;
13500
        return ({
13973
        return ({
Línea 13594... Línea 14067...
13594
        let before = prev ? prev.dom : null;
14067
        let before = prev ? prev.dom : null;
13595
        tooltipView.dom.classList.add("cm-tooltip");
14068
        tooltipView.dom.classList.add("cm-tooltip");
13596
        if (tooltip.arrow && !tooltipView.dom.querySelector(".cm-tooltip > .cm-tooltip-arrow")) {
14069
        if (tooltip.arrow && !tooltipView.dom.querySelector(".cm-tooltip > .cm-tooltip-arrow")) {
13597
            let arrow = document.createElement("div");
14070
            let arrow = document.createElement("div");
13598
            arrow.className = "cm-tooltip-arrow";
14071
            arrow.className = "cm-tooltip-arrow";
13599
            tooltipView.dom.insertBefore(arrow, before);
14072
            tooltipView.dom.appendChild(arrow);
13600
        }
14073
        }
13601
        tooltipView.dom.style.position = this.position;
14074
        tooltipView.dom.style.position = this.position;
13602
        tooltipView.dom.style.top = Outside;
14075
        tooltipView.dom.style.top = Outside;
13603
        tooltipView.dom.style.left = "0px";
14076
        tooltipView.dom.style.left = "0px";
13604
        this.container.insertBefore(tooltipView.dom, before);
14077
        this.container.insertBefore(tooltipView.dom, before);
Línea 13620... Línea 14093...
13620
        (_b = this.resizeObserver) === null || _b === void 0 ? void 0 : _b.disconnect();
14093
        (_b = this.resizeObserver) === null || _b === void 0 ? void 0 : _b.disconnect();
13621
        (_c = this.intersectionObserver) === null || _c === void 0 ? void 0 : _c.disconnect();
14094
        (_c = this.intersectionObserver) === null || _c === void 0 ? void 0 : _c.disconnect();
13622
        clearTimeout(this.measureTimeout);
14095
        clearTimeout(this.measureTimeout);
13623
    }
14096
    }
13624
    readMeasure() {
14097
    readMeasure() {
13625
        let editor = this.view.dom.getBoundingClientRect();
-
 
13626
        let scaleX = 1, scaleY = 1, makeAbsolute = false;
14098
        let scaleX = 1, scaleY = 1, makeAbsolute = false;
13627
        if (this.position == "fixed" && this.manager.tooltipViews.length) {
14099
        if (this.position == "fixed" && this.manager.tooltipViews.length) {
13628
            let { dom } = this.manager.tooltipViews[0];
14100
            let { dom } = this.manager.tooltipViews[0];
13629
            if (browser.gecko) {
14101
            if (browser.gecko) {
13630
                // Firefox sets the element's `offsetParent` to the
14102
                // Firefox sets the element's `offsetParent` to the
Línea 13649... Línea 14121...
13649
            }
14121
            }
13650
            else {
14122
            else {
13651
                ({ scaleX, scaleY } = this.view.viewState);
14123
                ({ scaleX, scaleY } = this.view.viewState);
13652
            }
14124
            }
13653
        }
14125
        }
-
 
14126
        let visible = this.view.scrollDOM.getBoundingClientRect(), margins = getScrollMargins(this.view);
13654
        return {
14127
        return {
-
 
14128
            visible: {
-
 
14129
                left: visible.left + margins.left, top: visible.top + margins.top,
-
 
14130
                right: visible.right - margins.right, bottom: visible.bottom - margins.bottom
13655
            editor,
14131
            },
13656
            parent: this.parent ? this.container.getBoundingClientRect() : editor,
14132
            parent: this.parent ? this.container.getBoundingClientRect() : this.view.dom.getBoundingClientRect(),
13657
            pos: this.manager.tooltips.map((t, i) => {
14133
            pos: this.manager.tooltips.map((t, i) => {
13658
                let tv = this.manager.tooltipViews[i];
14134
                let tv = this.manager.tooltipViews[i];
13659
                return tv.getCoords ? tv.getCoords(t.pos) : this.view.coordsAtPos(t.pos);
14135
                return tv.getCoords ? tv.getCoords(t.pos) : this.view.coordsAtPos(t.pos);
13660
            }),
14136
            }),
13661
            size: this.manager.tooltipViews.map(({ dom }) => dom.getBoundingClientRect()),
14137
            size: this.manager.tooltipViews.map(({ dom }) => dom.getBoundingClientRect()),
Línea 13669... Línea 14145...
13669
            this.madeAbsolute = true;
14145
            this.madeAbsolute = true;
13670
            this.position = "absolute";
14146
            this.position = "absolute";
13671
            for (let t of this.manager.tooltipViews)
14147
            for (let t of this.manager.tooltipViews)
13672
                t.dom.style.position = "absolute";
14148
                t.dom.style.position = "absolute";
13673
        }
14149
        }
13674
        let { editor, space, scaleX, scaleY } = measured;
14150
        let { visible, space, scaleX, scaleY } = measured;
13675
        let others = [];
14151
        let others = [];
13676
        for (let i = 0; i < this.manager.tooltips.length; i++) {
14152
        for (let i = 0; i < this.manager.tooltips.length; i++) {
13677
            let tooltip = this.manager.tooltips[i], tView = this.manager.tooltipViews[i], { dom } = tView;
14153
            let tooltip = this.manager.tooltips[i], tView = this.manager.tooltipViews[i], { dom } = tView;
13678
            let pos = measured.pos[i], size = measured.size[i];
14154
            let pos = measured.pos[i], size = measured.size[i];
13679
            // Hide tooltips that are outside of the editor.
14155
            // Hide tooltips that are outside of the editor.
13680
            if (!pos || pos.bottom <= Math.max(editor.top, space.top) ||
14156
            if (!pos || tooltip.clip !== false && (pos.bottom <= Math.max(visible.top, space.top) ||
13681
                pos.top >= Math.min(editor.bottom, space.bottom) ||
14157
                pos.top >= Math.min(visible.bottom, space.bottom) ||
13682
                pos.right < Math.max(editor.left, space.left) - .1 ||
14158
                pos.right < Math.max(visible.left, space.left) - .1 ||
13683
                pos.left > Math.min(editor.right, space.right) + .1) {
14159
                pos.left > Math.min(visible.right, space.right) + .1)) {
13684
                dom.style.top = Outside;
14160
                dom.style.top = Outside;
13685
                continue;
14161
                continue;
13686
            }
14162
            }
13687
            let arrow = tooltip.arrow ? tView.dom.querySelector(".cm-tooltip-arrow") : null;
14163
            let arrow = tooltip.arrow ? tView.dom.querySelector(".cm-tooltip-arrow") : null;
13688
            let arrowHeight = arrow ? 7 /* Arrow.Size */ : 0;
14164
            let arrowHeight = arrow ? 7 /* Arrow.Size */ : 0;
13689
            let width = size.right - size.left, height = (_a = knownHeight.get(tView)) !== null && _a !== void 0 ? _a : size.bottom - size.top;
14165
            let width = size.right - size.left, height = (_a = knownHeight.get(tView)) !== null && _a !== void 0 ? _a : size.bottom - size.top;
13690
            let offset = tView.offset || noOffset, ltr = this.view.textDirection == Direction.LTR;
14166
            let offset = tView.offset || noOffset, ltr = this.view.textDirection == Direction.LTR;
-
 
14167
            let left = size.width > space.right - space.left
13691
            let left = size.width > space.right - space.left ? (ltr ? space.left : space.right - size.width)
14168
                ? (ltr ? space.left : space.right - size.width)
13692
                : ltr ? Math.min(pos.left - (arrow ? 14 /* Arrow.Offset */ : 0) + offset.x, space.right - width)
14169
                : ltr ? Math.max(space.left, Math.min(pos.left - (arrow ? 14 /* Arrow.Offset */ : 0) + offset.x, space.right - width))
13693
                    : Math.max(space.left, pos.left - width + (arrow ? 14 /* Arrow.Offset */ : 0) - offset.x);
14170
                    : Math.min(Math.max(space.left, pos.left - width + (arrow ? 14 /* Arrow.Offset */ : 0) - offset.x), space.right - width);
13694
            let above = this.above[i];
14171
            let above = this.above[i];
13695
            if (!tooltip.strictSide && (above
14172
            if (!tooltip.strictSide && (above
13696
                ? pos.top - (size.bottom - size.top) - offset.y < space.top
14173
                ? pos.top - height - arrowHeight - offset.y < space.top
13697
                : pos.bottom + (size.bottom - size.top) + offset.y > space.bottom) &&
14174
                : pos.bottom + height + arrowHeight + offset.y > space.bottom) &&
13698
                above == (space.bottom - pos.bottom > pos.top - space.top))
14175
                above == (space.bottom - pos.bottom > pos.top - space.top))
13699
                above = this.above[i] = !above;
14176
                above = this.above[i] = !above;
13700
            let spaceVert = (above ? pos.top - space.top : space.bottom - pos.bottom) - arrowHeight;
14177
            let spaceVert = (above ? pos.top - space.top : space.bottom - pos.bottom) - arrowHeight;
13701
            if (spaceVert < height && tView.resize !== false) {
14178
            if (spaceVert < height && tView.resize !== false) {
13702
                if (spaceVert < this.view.defaultLineHeight) {
14179
                if (spaceVert < this.view.defaultLineHeight) {
Línea 13715... Línea 14192...
13715
                for (let r of others)
14192
                for (let r of others)
13716
                    if (r.left < right && r.right > left && r.top < top + height && r.bottom > top)
14193
                    if (r.left < right && r.right > left && r.top < top + height && r.bottom > top)
13717
                        top = above ? r.top - height - 2 - arrowHeight : r.bottom + arrowHeight + 2;
14194
                        top = above ? r.top - height - 2 - arrowHeight : r.bottom + arrowHeight + 2;
13718
            if (this.position == "absolute") {
14195
            if (this.position == "absolute") {
13719
                dom.style.top = (top - measured.parent.top) / scaleY + "px";
14196
                dom.style.top = (top - measured.parent.top) / scaleY + "px";
13720
                dom.style.left = (left - measured.parent.left) / scaleX + "px";
14197
                setLeftStyle(dom, (left - measured.parent.left) / scaleX);
13721
            }
14198
            }
13722
            else {
14199
            else {
13723
                dom.style.top = top / scaleY + "px";
14200
                dom.style.top = top / scaleY + "px";
13724
                dom.style.left = left / scaleX + "px";
14201
                setLeftStyle(dom, left / scaleX);
13725
            }
14202
            }
13726
            if (arrow) {
14203
            if (arrow) {
13727
                let arrowLeft = pos.left + (ltr ? offset.x : -offset.x) - (left + 14 /* Arrow.Offset */ - 7 /* Arrow.Size */);
14204
                let arrowLeft = pos.left + (ltr ? offset.x : -offset.x) - (left + 14 /* Arrow.Offset */ - 7 /* Arrow.Size */);
13728
                arrow.style.left = arrowLeft / scaleX + "px";
14205
                arrow.style.left = arrowLeft / scaleX + "px";
13729
            }
14206
            }
Línea 13750... Línea 14227...
13750
}, {
14227
}, {
13751
    eventObservers: {
14228
    eventObservers: {
13752
        scroll() { this.maybeMeasure(); }
14229
        scroll() { this.maybeMeasure(); }
13753
    }
14230
    }
13754
});
14231
});
-
 
14232
function setLeftStyle(elt, value) {
-
 
14233
    let current = parseInt(elt.style.left, 10);
-
 
14234
    if (isNaN(current) || Math.abs(value - current) > 1)
-
 
14235
        elt.style.left = value + "px";
-
 
14236
}
13755
const baseTheme$4 = /*@__PURE__*/EditorView.baseTheme({
14237
const baseTheme$4 = /*@__PURE__*/EditorView.baseTheme({
13756
    ".cm-tooltip": {
14238
    ".cm-tooltip": {
13757
        zIndex: 100,
14239
        zIndex: 500,
13758
        boxSizing: "border-box"
14240
        boxSizing: "border-box"
13759
    },
14241
    },
13760
    "&light .cm-tooltip": {
14242
    "&light .cm-tooltip": {
13761
        border: "1px solid #bbb",
14243
        border: "1px solid #bbb",
13762
        backgroundColor: "#f5f5f5"
14244
        backgroundColor: "#f5f5f5"
Línea 14016... Línea 14498...
14016
        this.view.dom.removeEventListener("mousemove", this.mousemove);
14498
        this.view.dom.removeEventListener("mousemove", this.mousemove);
14017
    }
14499
    }
14018
}
14500
}
14019
const tooltipMargin = 4;
14501
const tooltipMargin = 4;
14020
function isInTooltip(tooltip, event) {
14502
function isInTooltip(tooltip, event) {
-
 
14503
    let { left, right, top, bottom } = tooltip.getBoundingClientRect(), arrow;
-
 
14504
    if (arrow = tooltip.querySelector(".cm-tooltip-arrow")) {
14021
    let rect = tooltip.getBoundingClientRect();
14505
        let arrowRect = arrow.getBoundingClientRect();
-
 
14506
        top = Math.min(arrowRect.top, top);
-
 
14507
        bottom = Math.max(arrowRect.bottom, bottom);
-
 
14508
    }
14022
    return event.clientX >= rect.left - tooltipMargin && event.clientX <= rect.right + tooltipMargin &&
14509
    return event.clientX >= left - tooltipMargin && event.clientX <= right + tooltipMargin &&
14023
        event.clientY >= rect.top - tooltipMargin && event.clientY <= rect.bottom + tooltipMargin;
14510
        event.clientY >= top - tooltipMargin && event.clientY <= bottom + tooltipMargin;
14024
}
14511
}
14025
function isOverRange(view, from, to, x, y, margin) {
14512
function isOverRange(view, from, to, x, y, margin) {
14026
    let rect = view.scrollDOM.getBoundingClientRect();
14513
    let rect = view.scrollDOM.getBoundingClientRect();
14027
    let docBottom = view.documentTop + view.documentPadding.top + view.contentHeight;
14514
    let docBottom = view.documentTop + view.documentPadding.top + view.contentHeight;
14028
    if (rect.left > x || rect.right < x || rect.top > y || Math.min(rect.bottom, docBottom) < y)
14515
    if (rect.left > x || rect.right < x || rect.top > y || Math.min(rect.bottom, docBottom) < y)
Línea 14040... Línea 14527...
14040
pointer is before the position, 1 if after the position.
14527
pointer is before the position, 1 if after the position.
Línea 14041... Línea 14528...
14041
 
14528
 
14042
Note that all hover tooltips are hosted within a single tooltip
14529
Note that all hover tooltips are hosted within a single tooltip
14043
container element. This allows multiple tooltips over the same
14530
container element. This allows multiple tooltips over the same
-
 
14531
range to be "merged" together without overlapping.
-
 
14532
 
-
 
14533
The return value is a valid [editor extension](https://codemirror.net/6/docs/ref/#state.Extension)
-
 
14534
but also provides an `active` property holding a state field that
-
 
14535
can be used to read the currently active tooltips produced by this
14044
range to be "merged" together without overlapping.
14536
extension.
14045
*/
14537
*/
14046
function hoverTooltip(source, options = {}) {
14538
function hoverTooltip(source, options = {}) {
14047
    let setHover = StateEffect.define();
14539
    let setHover = StateEffect.define();
14048
    let hoverState = StateField.define({
14540
    let hoverState = StateField.define({
Línea 14076... Línea 14568...
14076
            }
14568
            }
14077
            return value;
14569
            return value;
14078
        },
14570
        },
14079
        provide: f => showHoverTooltip.from(f)
14571
        provide: f => showHoverTooltip.from(f)
14080
    });
14572
    });
14081
    return [
14573
    return {
-
 
14574
        active: hoverState,
-
 
14575
        extension: [
14082
        hoverState,
14576
            hoverState,
14083
        ViewPlugin.define(view => new HoverPlugin(view, source, hoverState, setHover, options.hoverTime || 300 /* Hover.Time */)),
14577
            ViewPlugin.define(view => new HoverPlugin(view, source, hoverState, setHover, options.hoverTime || 300 /* Hover.Time */)),
14084
        showHoverTooltipHost
14578
            showHoverTooltipHost
-
 
14579
        ]
14085
    ];
14580
    };
14086
}
14581
}
14087
/**
14582
/**
14088
Get the active tooltip view for a given tooltip, if available.
14583
Get the active tooltip view for a given tooltip, if available.
14089
*/
14584
*/
14090
function getTooltip(view, tooltip) {
14585
function getTooltip(view, tooltip) {
Línea 14298... Línea 14793...
14298
[`elementclass`](https://codemirror.net/6/docs/ref/#view.GutterMarker.elementClass), not a
14793
[`elementclass`](https://codemirror.net/6/docs/ref/#view.GutterMarker.elementClass), not a
14299
[`toDOM`](https://codemirror.net/6/docs/ref/#view.GutterMarker.toDOM) (or the marker will appear
14794
[`toDOM`](https://codemirror.net/6/docs/ref/#view.GutterMarker.toDOM) (or the marker will appear
14300
in all gutters for the line).
14795
in all gutters for the line).
14301
*/
14796
*/
14302
const gutterLineClass = /*@__PURE__*/Facet.define();
14797
const gutterLineClass = /*@__PURE__*/Facet.define();
-
 
14798
/**
-
 
14799
Facet used to add a class to all gutter elements next to a widget.
-
 
14800
Should not provide widgets with a `toDOM` method.
-
 
14801
*/
-
 
14802
const gutterWidgetClass = /*@__PURE__*/Facet.define();
14303
const defaults$1 = {
14803
const defaults$1 = {
14304
    class: "",
14804
    class: "",
14305
    renderEmptyElements: false,
14805
    renderEmptyElements: false,
14306
    elementStyle: "",
14806
    elementStyle: "",
14307
    markers: () => RangeSet.empty,
14807
    markers: () => RangeSet.empty,
Línea 14335... Línea 14835...
14335
*/
14835
*/
14336
function gutters(config) {
14836
function gutters(config) {
14337
    let result = [
14837
    let result = [
14338
        gutterView,
14838
        gutterView,
14339
    ];
14839
    ];
14340
    if (config && config.fixed === false)
-
 
14341
        result.push(unfixGutters.of(true));
-
 
14342
    return result;
14840
    return result;
14343
}
14841
}
14344
const gutterView = /*@__PURE__*/ViewPlugin.fromClass(class {
14842
const gutterView = /*@__PURE__*/ViewPlugin.fromClass(class {
14345
    constructor(view) {
14843
    constructor(view) {
14346
        this.view = view;
14844
        this.view = view;
Línea 14508... Línea 15006...
14508
        if (localMarkers.length == 0 && !gutter.config.renderEmptyElements)
15006
        if (localMarkers.length == 0 && !gutter.config.renderEmptyElements)
14509
            return;
15007
            return;
14510
        this.addElement(view, line, localMarkers);
15008
        this.addElement(view, line, localMarkers);
14511
    }
15009
    }
14512
    widget(view, block) {
15010
    widget(view, block) {
14513
        let marker = this.gutter.config.widgetMarker(view, block.widget, block);
15011
        let marker = this.gutter.config.widgetMarker(view, block.widget, block), markers = marker ? [marker] : null;
-
 
15012
        for (let cls of view.state.facet(gutterWidgetClass)) {
-
 
15013
            let marker = cls(view, block.widget, block);
-
 
15014
            if (marker)
-
 
15015
                (markers || (markers = [])).push(marker);
-
 
15016
        }
14514
        if (marker)
15017
        if (markers)
14515
            this.addElement(view, block, [marker]);
15018
            this.addElement(view, block, markers);
14516
    }
15019
    }
14517
    finish() {
15020
    finish() {
14518
        let gutter = this.gutter;
15021
        let gutter = this.gutter;
14519
        while (gutter.elements.length > this.i) {
15022
        while (gutter.elements.length > this.i) {
14520
            let last = gutter.elements.pop();
15023
            let last = gutter.elements.pop();
Línea 14646... Línea 15149...
14646
}
15149
}
14647
/**
15150
/**
14648
Facet used to provide markers to the line number gutter.
15151
Facet used to provide markers to the line number gutter.
14649
*/
15152
*/
14650
const lineNumberMarkers = /*@__PURE__*/Facet.define();
15153
const lineNumberMarkers = /*@__PURE__*/Facet.define();
-
 
15154
/**
-
 
15155
Facet used to create markers in the line number gutter next to widgets.
-
 
15156
*/
-
 
15157
const lineNumberWidgetMarker = /*@__PURE__*/Facet.define();
14651
const lineNumberConfig = /*@__PURE__*/Facet.define({
15158
const lineNumberConfig = /*@__PURE__*/Facet.define({
14652
    combine(values) {
15159
    combine(values) {
14653
        return combineConfig(values, { formatNumber: String, domEventHandlers: {} }, {
15160
        return combineConfig(values, { formatNumber: String, domEventHandlers: {} }, {
14654
            domEventHandlers(a, b) {
15161
            domEventHandlers(a, b) {
14655
                let result = Object.assign({}, a);
15162
                let result = Object.assign({}, a);
Línea 14680... Línea 15187...
14680
    lineMarker(view, line, others) {
15187
    lineMarker(view, line, others) {
14681
        if (others.some(m => m.toDOM))
15188
        if (others.some(m => m.toDOM))
14682
            return null;
15189
            return null;
14683
        return new NumberMarker(formatNumber(view, view.state.doc.lineAt(line.from).number));
15190
        return new NumberMarker(formatNumber(view, view.state.doc.lineAt(line.from).number));
14684
    },
15191
    },
14685
    widgetMarker: () => null,
15192
    widgetMarker: (view, widget, block) => {
-
 
15193
        for (let m of view.state.facet(lineNumberWidgetMarker)) {
-
 
15194
            let result = m(view, widget, block);
-
 
15195
            if (result)
-
 
15196
                return result;
-
 
15197
        }
-
 
15198
        return null;
-
 
15199
    },
14686
    lineMarkerChange: update => update.startState.facet(lineNumberConfig) != update.state.facet(lineNumberConfig),
15200
    lineMarkerChange: update => update.startState.facet(lineNumberConfig) != update.state.facet(lineNumberConfig),
14687
    initialSpacer(view) {
15201
    initialSpacer(view) {
14688
        return new NumberMarker(formatNumber(view, maxLineNumber(view.state.doc.lines)));
15202
        return new NumberMarker(formatNumber(view, maxLineNumber(view.state.doc.lines)));
14689
    },
15203
    },
14690
    updateSpacer(spacer, update) {
15204
    updateSpacer(spacer, update) {
Línea 15425... Línea 15939...
15425
    }
15939
    }
15426
    resolveInner(pos, side = 0) {
15940
    resolveInner(pos, side = 0) {
15427
        return resolveNode(this, pos, side, true);
15941
        return resolveNode(this, pos, side, true);
15428
    }
15942
    }
15429
    matchContext(context) {
15943
    matchContext(context) {
15430
        return matchNodeContext(this, context);
15944
        return matchNodeContext(this.parent, context);
15431
    }
15945
    }
15432
    enterUnfinishedNodesBefore(pos) {
15946
    enterUnfinishedNodesBefore(pos) {
15433
        let scan = this.childBefore(pos), node = this;
15947
        let scan = this.childBefore(pos), node = this;
15434
        while (scan) {
15948
        while (scan) {
15435
            let last = scan.lastChild;
15949
            let last = scan.lastChild;
Línea 15550... Línea 16064...
15550
        if (!cur.nextSibling())
16064
        if (!cur.nextSibling())
15551
            return after == null ? result : [];
16065
            return after == null ? result : [];
15552
    }
16066
    }
15553
}
16067
}
15554
function matchNodeContext(node, context, i = context.length - 1) {
16068
function matchNodeContext(node, context, i = context.length - 1) {
15555
    for (let p = node.parent; i >= 0; p = p.parent) {
16069
    for (let p = node; i >= 0; p = p.parent) {
15556
        if (!p)
16070
        if (!p)
15557
            return false;
16071
            return false;
15558
        if (!p.type.isAnonymous) {
16072
        if (!p.type.isAnonymous) {
15559
            if (context[i] && context[i] != p.name)
16073
            if (context[i] && context[i] != p.name)
15560
                return false;
16074
                return false;
Línea 15886... Línea 16400...
15886
    current node is empty or `enter` is false, its next sibling or
16400
    current node is empty or `enter` is false, its next sibling or
15887
    the next sibling of the first parent node that has one.
16401
    the next sibling of the first parent node that has one.
15888
    */
16402
    */
15889
    next(enter = true) { return this.move(1, enter); }
16403
    next(enter = true) { return this.move(1, enter); }
15890
    /**
16404
    /**
15891
    Move to the next node in a last-to-first pre-order traveral. A
16405
    Move to the next node in a last-to-first pre-order traversal. A
15892
    node is followed by its last child or, if it has none, its
16406
    node is followed by its last child or, if it has none, its
15893
    previous sibling or the previous sibling of the first parent
16407
    previous sibling or the previous sibling of the first parent
15894
    node that has one.
16408
    node that has one.
15895
    */
16409
    */
15896
    prev(enter = true) { return this.move(-1, enter); }
16410
    prev(enter = true) { return this.move(-1, enter); }
Línea 15962... Línea 16476...
15962
            }
16476
            }
15963
            for (;;) {
16477
            for (;;) {
15964
                if (mustLeave && leave)
16478
                if (mustLeave && leave)
15965
                    leave(this);
16479
                    leave(this);
15966
                mustLeave = this.type.isAnonymous;
16480
                mustLeave = this.type.isAnonymous;
15967
                if (this.nextSibling())
-
 
15968
                    break;
-
 
15969
                if (!depth)
16481
                if (!depth)
15970
                    return;
16482
                    return;
-
 
16483
                if (this.nextSibling())
-
 
16484
                    break;
15971
                this.parent();
16485
                this.parent();
15972
                depth--;
16486
                depth--;
15973
                mustLeave = true;
16487
                mustLeave = true;
15974
            }
16488
            }
15975
        }
16489
        }
Línea 15979... Línea 16493...
15979
    of direct parent node names. Empty strings in the context array
16493
    of direct parent node names. Empty strings in the context array
15980
    are treated as wildcards.
16494
    are treated as wildcards.
15981
    */
16495
    */
15982
    matchContext(context) {
16496
    matchContext(context) {
15983
        if (!this.buffer)
16497
        if (!this.buffer)
15984
            return matchNodeContext(this.node, context);
16498
            return matchNodeContext(this.node.parent, context);
15985
        let { buffer } = this.buffer, { types } = buffer.set;
16499
        let { buffer } = this.buffer, { types } = buffer.set;
15986
        for (let i = context.length - 1, d = this.stack.length - 1; i >= 0; d--) {
16500
        for (let i = context.length - 1, d = this.stack.length - 1; i >= 0; d--) {
15987
            if (d < 0)
16501
            if (d < 0)
15988
                return matchNodeContext(this.node, context, i);
16502
                return matchNodeContext(this._tree, context, i);
15989
            let type = types[buffer.buffer[this.stack[d]]];
16503
            let type = types[buffer.buffer[this.stack[d]]];
15990
            if (!type.isAnonymous) {
16504
            if (!type.isAnonymous) {
15991
                if (context[i] && context[i] != type.name)
16505
                if (context[i] && context[i] != type.name)
15992
                    return false;
16506
                    return false;
15993
                i--;
16507
                i--;
Línea 16005... Línea 16519...
16005
    let cursor = Array.isArray(buffer) ? new FlatBufferCursor(buffer, buffer.length) : buffer;
16519
    let cursor = Array.isArray(buffer) ? new FlatBufferCursor(buffer, buffer.length) : buffer;
16006
    let types = nodeSet.types;
16520
    let types = nodeSet.types;
16007
    let contextHash = 0, lookAhead = 0;
16521
    let contextHash = 0, lookAhead = 0;
16008
    function takeNode(parentStart, minPos, children, positions, inRepeat, depth) {
16522
    function takeNode(parentStart, minPos, children, positions, inRepeat, depth) {
16009
        let { id, start, end, size } = cursor;
16523
        let { id, start, end, size } = cursor;
16010
        let lookAheadAtStart = lookAhead;
16524
        let lookAheadAtStart = lookAhead, contextAtStart = contextHash;
16011
        while (size < 0) {
16525
        while (size < 0) {
16012
            cursor.next();
16526
            cursor.next();
16013
            if (size == -1 /* SpecialRecord.Reuse */) {
16527
            if (size == -1 /* SpecialRecord.Reuse */) {
16014
                let node = reused[id];
16528
                let node = reused[id];
16015
                children.push(node);
16529
                children.push(node);
Línea 16046... Línea 16560...
16046
            let localInRepeat = id >= minRepeatType ? id : -1;
16560
            let localInRepeat = id >= minRepeatType ? id : -1;
16047
            let lastGroup = 0, lastEnd = end;
16561
            let lastGroup = 0, lastEnd = end;
16048
            while (cursor.pos > endPos) {
16562
            while (cursor.pos > endPos) {
16049
                if (localInRepeat >= 0 && cursor.id == localInRepeat && cursor.size >= 0) {
16563
                if (localInRepeat >= 0 && cursor.id == localInRepeat && cursor.size >= 0) {
16050
                    if (cursor.end <= lastEnd - maxBufferLength) {
16564
                    if (cursor.end <= lastEnd - maxBufferLength) {
16051
                        makeRepeatLeaf(localChildren, localPositions, start, lastGroup, cursor.end, lastEnd, localInRepeat, lookAheadAtStart);
16565
                        makeRepeatLeaf(localChildren, localPositions, start, lastGroup, cursor.end, lastEnd, localInRepeat, lookAheadAtStart, contextAtStart);
16052
                        lastGroup = localChildren.length;
16566
                        lastGroup = localChildren.length;
16053
                        lastEnd = cursor.end;
16567
                        lastEnd = cursor.end;
16054
                    }
16568
                    }
16055
                    cursor.next();
16569
                    cursor.next();
16056
                }
16570
                }
Línea 16060... Línea 16574...
16060
                else {
16574
                else {
16061
                    takeNode(start, endPos, localChildren, localPositions, localInRepeat, depth + 1);
16575
                    takeNode(start, endPos, localChildren, localPositions, localInRepeat, depth + 1);
16062
                }
16576
                }
16063
            }
16577
            }
16064
            if (localInRepeat >= 0 && lastGroup > 0 && lastGroup < localChildren.length)
16578
            if (localInRepeat >= 0 && lastGroup > 0 && lastGroup < localChildren.length)
16065
                makeRepeatLeaf(localChildren, localPositions, start, lastGroup, start, lastEnd, localInRepeat, lookAheadAtStart);
16579
                makeRepeatLeaf(localChildren, localPositions, start, lastGroup, start, lastEnd, localInRepeat, lookAheadAtStart, contextAtStart);
16066
            localChildren.reverse();
16580
            localChildren.reverse();
16067
            localPositions.reverse();
16581
            localPositions.reverse();
16068
            if (localInRepeat > -1 && lastGroup > 0) {
16582
            if (localInRepeat > -1 && lastGroup > 0) {
16069
                let make = makeBalanced(type);
16583
                let make = makeBalanced(type, contextAtStart);
16070
                node = balanceRange(type, localChildren, localPositions, 0, localChildren.length, 0, end - start, make, make);
16584
                node = balanceRange(type, localChildren, localPositions, 0, localChildren.length, 0, end - start, make, make);
16071
            }
16585
            }
16072
            else {
16586
            else {
16073
                node = makeTree(type, localChildren, localPositions, end - start, lookAheadAtStart - end);
16587
                node = makeTree(type, localChildren, localPositions, end - start, lookAheadAtStart - end, contextAtStart);
16074
            }
16588
            }
16075
        }
16589
        }
16076
        children.push(node);
16590
        children.push(node);
16077
        positions.push(startPos);
16591
        positions.push(startPos);
16078
    }
16592
    }
Línea 16106... Línea 16620...
16106
            }
16620
            }
16107
            children.push(new TreeBuffer(buffer, nodes[2] - start, nodeSet));
16621
            children.push(new TreeBuffer(buffer, nodes[2] - start, nodeSet));
16108
            positions.push(start - parentStart);
16622
            positions.push(start - parentStart);
16109
        }
16623
        }
16110
    }
16624
    }
16111
    function makeBalanced(type) {
16625
    function makeBalanced(type, contextHash) {
16112
        return (children, positions, length) => {
16626
        return (children, positions, length) => {
16113
            let lookAhead = 0, lastI = children.length - 1, last, lookAheadProp;
16627
            let lookAhead = 0, lastI = children.length - 1, last, lookAheadProp;
16114
            if (lastI >= 0 && (last = children[lastI]) instanceof Tree) {
16628
            if (lastI >= 0 && (last = children[lastI]) instanceof Tree) {
16115
                if (!lastI && last.type == type && last.length == length)
16629
                if (!lastI && last.type == type && last.length == length)
16116
                    return last;
16630
                    return last;
16117
                if (lookAheadProp = last.prop(NodeProp.lookAhead))
16631
                if (lookAheadProp = last.prop(NodeProp.lookAhead))
16118
                    lookAhead = positions[lastI] + last.length + lookAheadProp;
16632
                    lookAhead = positions[lastI] + last.length + lookAheadProp;
16119
            }
16633
            }
16120
            return makeTree(type, children, positions, length, lookAhead);
16634
            return makeTree(type, children, positions, length, lookAhead, contextHash);
16121
        };
16635
        };
16122
    }
16636
    }
16123
    function makeRepeatLeaf(children, positions, base, i, from, to, type, lookAhead) {
16637
    function makeRepeatLeaf(children, positions, base, i, from, to, type, lookAhead, contextHash) {
16124
        let localChildren = [], localPositions = [];
16638
        let localChildren = [], localPositions = [];
16125
        while (children.length > i) {
16639
        while (children.length > i) {
16126
            localChildren.push(children.pop());
16640
            localChildren.push(children.pop());
16127
            localPositions.push(positions.pop() + base - from);
16641
            localPositions.push(positions.pop() + base - from);
16128
        }
16642
        }
16129
        children.push(makeTree(nodeSet.types[type], localChildren, localPositions, to - from, lookAhead - to));
16643
        children.push(makeTree(nodeSet.types[type], localChildren, localPositions, to - from, lookAhead - to, contextHash));
16130
        positions.push(from - base);
16644
        positions.push(from - base);
16131
    }
16645
    }
16132
    function makeTree(type, children, positions, length, lookAhead = 0, props) {
16646
    function makeTree(type, children, positions, length, lookAhead, contextHash, props) {
16133
        if (contextHash) {
16647
        if (contextHash) {
16134
            let pair = [NodeProp.contextHash, contextHash];
16648
            let pair = [NodeProp.contextHash, contextHash];
16135
            props = props ? [pair].concat(props) : [pair];
16649
            props = props ? [pair].concat(props) : [pair];
16136
        }
16650
        }
16137
        if (lookAhead > 25) {
16651
        if (lookAhead > 25) {
Línea 16634... Línea 17148...
16634
                }
17148
                }
16635
            }
17149
            }
16636
            else if (overlay && (range = overlay.predicate(cursor))) {
17150
            else if (overlay && (range = overlay.predicate(cursor))) {
16637
                if (range === true)
17151
                if (range === true)
16638
                    range = new Range(cursor.from, cursor.to);
17152
                    range = new Range(cursor.from, cursor.to);
16639
                if (range.from < range.to)
17153
                if (range.from < range.to) {
-
 
17154
                    let last = overlay.ranges.length - 1;
-
 
17155
                    if (last >= 0 && overlay.ranges[last].to == range.from)
-
 
17156
                        overlay.ranges[last] = { from: overlay.ranges[last].from, to: range.to };
-
 
17157
                    else
16640
                    overlay.ranges.push(range);
17158
                        overlay.ranges.push(range);
-
 
17159
                }
16641
            }
17160
            }
16642
            if (enter && cursor.firstChild()) {
17161
            if (enter && cursor.firstChild()) {
16643
                if (overlay)
17162
                if (overlay)
16644
                    overlay.depth++;
17163
                    overlay.depth++;
16645
                if (covered)
17164
                if (covered)
Línea 16921... Línea 17440...
16921
    /**
17440
    /**
16922
    @internal
17441
    @internal
16923
    */
17442
    */
16924
    constructor(
17443
    constructor(
16925
    /**
17444
    /**
-
 
17445
    The optional name of the base tag @internal
-
 
17446
    */
-
 
17447
    name, 
-
 
17448
    /**
16926
    The set of this tag and all its parent tags, starting with
17449
    The set of this tag and all its parent tags, starting with
16927
    this one itself and sorted in order of decreasing specificity.
17450
    this one itself and sorted in order of decreasing specificity.
16928
    */
17451
    */
16929
    set, 
17452
    set, 
16930
    /**
17453
    /**
Línea 16934... Línea 17457...
16934
    base, 
17457
    base, 
16935
    /**
17458
    /**
16936
    The modifiers applied to this.base @internal
17459
    The modifiers applied to this.base @internal
16937
    */
17460
    */
16938
    modified) {
17461
    modified) {
-
 
17462
        this.name = name;
16939
        this.set = set;
17463
        this.set = set;
16940
        this.base = base;
17464
        this.base = base;
16941
        this.modified = modified;
17465
        this.modified = modified;
16942
        /**
17466
        /**
16943
        @internal
17467
        @internal
16944
        */
17468
        */
16945
        this.id = nextTagID++;
17469
        this.id = nextTagID++;
16946
    }
17470
    }
16947
    /**
17471
    toString() {
16948
    Define a new tag. If `parent` is given, the tag is treated as a
17472
        let { name } = this;
16949
    sub-tag of that parent, and
17473
        for (let mod of this.modified)
16950
    [highlighters](#highlight.tagHighlighter) that don't mention
17474
            if (mod.name)
16951
    this tag will try to fall back to the parent tag (or grandparent
17475
                name = `${mod.name}(${name})`;
16952
    tag, etc).
17476
        return name;
16953
    */
17477
    }
16954
    static define(parent) {
17478
    static define(nameOrParent, parent) {
-
 
17479
        let name = typeof nameOrParent == "string" ? nameOrParent : "?";
-
 
17480
        if (nameOrParent instanceof Tag)
-
 
17481
            parent = nameOrParent;
16955
        if (parent === null || parent === void 0 ? void 0 : parent.base)
17482
        if (parent === null || parent === void 0 ? void 0 : parent.base)
16956
            throw new Error("Can not derive from a modified tag");
17483
            throw new Error("Can not derive from a modified tag");
16957
        let tag = new Tag([], null, []);
17484
        let tag = new Tag(name, [], null, []);
16958
        tag.set.push(tag);
17485
        tag.set.push(tag);
16959
        if (parent)
17486
        if (parent)
16960
            for (let t of parent.set)
17487
            for (let t of parent.set)
16961
                tag.set.push(t);
17488
                tag.set.push(t);
16962
        return tag;
17489
        return tag;
Línea 16971... Línea 17498...
16971
    When multiple modifiers are applied to a given base tag, each
17498
    When multiple modifiers are applied to a given base tag, each
16972
    smaller set of modifiers is registered as a parent, so that for
17499
    smaller set of modifiers is registered as a parent, so that for
16973
    example `m1(m2(m3(t1)))` is a subtype of `m1(m2(t1))`,
17500
    example `m1(m2(m3(t1)))` is a subtype of `m1(m2(t1))`,
16974
    `m1(m3(t1)`, and so on.
17501
    `m1(m3(t1)`, and so on.
16975
    */
17502
    */
16976
    static defineModifier() {
17503
    static defineModifier(name) {
16977
        let mod = new Modifier;
17504
        let mod = new Modifier(name);
16978
        return (tag) => {
17505
        return (tag) => {
16979
            if (tag.modified.indexOf(mod) > -1)
17506
            if (tag.modified.indexOf(mod) > -1)
16980
                return tag;
17507
                return tag;
16981
            return Modifier.get(tag.base || tag, tag.modified.concat(mod).sort((a, b) => a.id - b.id));
17508
            return Modifier.get(tag.base || tag, tag.modified.concat(mod).sort((a, b) => a.id - b.id));
16982
        };
17509
        };
16983
    }
17510
    }
16984
}
17511
}
16985
let nextModifierID = 0;
17512
let nextModifierID = 0;
16986
class Modifier {
17513
class Modifier {
16987
    constructor() {
17514
    constructor(name) {
-
 
17515
        this.name = name;
16988
        this.instances = [];
17516
        this.instances = [];
16989
        this.id = nextModifierID++;
17517
        this.id = nextModifierID++;
16990
    }
17518
    }
16991
    static get(base, mods) {
17519
    static get(base, mods) {
16992
        if (!mods.length)
17520
        if (!mods.length)
16993
            return base;
17521
            return base;
16994
        let exists = mods[0].instances.find(t => t.base == base && sameArray(mods, t.modified));
17522
        let exists = mods[0].instances.find(t => t.base == base && sameArray(mods, t.modified));
16995
        if (exists)
17523
        if (exists)
16996
            return exists;
17524
            return exists;
16997
        let set = [], tag = new Tag(set, base, mods);
17525
        let set = [], tag = new Tag(base.name, set, base, mods);
16998
        for (let m of mods)
17526
        for (let m of mods)
16999
            m.instances.push(tag);
17527
            m.instances.push(tag);
17000
        let configs = powerSet(mods);
17528
        let configs = powerSet(mods);
17001
        for (let parent of base.set)
17529
        for (let parent of base.set)
17002
            if (!parent.modified.length)
17530
            if (!parent.modified.length)
Línea 17564... Línea 18092...
17564
    /**
18092
    /**
17565
    A level 6 [heading](#highlight.tags.heading).
18093
    A level 6 [heading](#highlight.tags.heading).
17566
    */
18094
    */
17567
    heading6: t(heading),
18095
    heading6: t(heading),
17568
    /**
18096
    /**
17569
    A prose separator (such as a horizontal rule).
18097
    A prose [content](#highlight.tags.content) separator (such as a horizontal rule).
17570
    */
18098
    */
17571
    contentSeparator: t(content),
18099
    contentSeparator: t(content),
17572
    /**
18100
    /**
17573
    [Content](#highlight.tags.content) that represents a list.
18101
    [Content](#highlight.tags.content) that represents a list.
17574
    */
18102
    */
Línea 17637... Línea 18165...
17637
    /**
18165
    /**
17638
    [Modifier](#highlight.Tag^defineModifier) that indicates that a
18166
    [Modifier](#highlight.Tag^defineModifier) that indicates that a
17639
    given element is being defined. Expected to be used with the
18167
    given element is being defined. Expected to be used with the
17640
    various [name](#highlight.tags.name) tags.
18168
    various [name](#highlight.tags.name) tags.
17641
    */
18169
    */
17642
    definition: Tag.defineModifier(),
18170
    definition: Tag.defineModifier("definition"),
17643
    /**
18171
    /**
17644
    [Modifier](#highlight.Tag^defineModifier) that indicates that
18172
    [Modifier](#highlight.Tag^defineModifier) that indicates that
17645
    something is constant. Mostly expected to be used with
18173
    something is constant. Mostly expected to be used with
17646
    [variable names](#highlight.tags.variableName).
18174
    [variable names](#highlight.tags.variableName).
17647
    */
18175
    */
17648
    constant: Tag.defineModifier(),
18176
    constant: Tag.defineModifier("constant"),
17649
    /**
18177
    /**
17650
    [Modifier](#highlight.Tag^defineModifier) used to indicate that
18178
    [Modifier](#highlight.Tag^defineModifier) used to indicate that
17651
    a [variable](#highlight.tags.variableName) or [property
18179
    a [variable](#highlight.tags.variableName) or [property
17652
    name](#highlight.tags.propertyName) is being called or defined
18180
    name](#highlight.tags.propertyName) is being called or defined
17653
    as a function.
18181
    as a function.
17654
    */
18182
    */
17655
    function: Tag.defineModifier(),
18183
    function: Tag.defineModifier("function"),
17656
    /**
18184
    /**
17657
    [Modifier](#highlight.Tag^defineModifier) that can be applied to
18185
    [Modifier](#highlight.Tag^defineModifier) that can be applied to
17658
    [names](#highlight.tags.name) to indicate that they belong to
18186
    [names](#highlight.tags.name) to indicate that they belong to
17659
    the language's standard environment.
18187
    the language's standard environment.
17660
    */
18188
    */
17661
    standard: Tag.defineModifier(),
18189
    standard: Tag.defineModifier("standard"),
17662
    /**
18190
    /**
17663
    [Modifier](#highlight.Tag^defineModifier) that indicates a given
18191
    [Modifier](#highlight.Tag^defineModifier) that indicates a given
17664
    [names](#highlight.tags.name) is local to some scope.
18192
    [names](#highlight.tags.name) is local to some scope.
17665
    */
18193
    */
17666
    local: Tag.defineModifier(),
18194
    local: Tag.defineModifier("local"),
17667
    /**
18195
    /**
17668
    A generic variant [modifier](#highlight.Tag^defineModifier) that
18196
    A generic variant [modifier](#highlight.Tag^defineModifier) that
17669
    can be used to tag language-specific alternative variants of
18197
    can be used to tag language-specific alternative variants of
17670
    some common tag. It is recommended for themes to define special
18198
    some common tag. It is recommended for themes to define special
17671
    forms of at least the [string](#highlight.tags.string) and
18199
    forms of at least the [string](#highlight.tags.string) and
17672
    [variable name](#highlight.tags.variableName) tags, since those
18200
    [variable name](#highlight.tags.variableName) tags, since those
17673
    come up a lot.
18201
    come up a lot.
17674
    */
18202
    */
17675
    special: Tag.defineModifier()
18203
    special: Tag.defineModifier("special")
17676
};
18204
};
-
 
18205
for (let name in tags$1) {
-
 
18206
    let val = tags$1[name];
-
 
18207
    if (val instanceof Tag)
-
 
18208
        val.name = name;
-
 
18209
}
17677
/**
18210
/**
17678
This is a highlighter that adds stable, predictable classes to
18211
This is a highlighter that adds stable, predictable classes to
17679
tokens, for styling with external CSS.
18212
tokens, for styling with external CSS.
Línea 17680... Línea 18213...
17680
 
18213
 
Línea 18568... Línea 19101...
18568
*/
19101
*/
18569
const indentNodeProp = /*@__PURE__*/new NodeProp();
19102
const indentNodeProp = /*@__PURE__*/new NodeProp();
18570
// Compute the indentation for a given position from the syntax tree.
19103
// Compute the indentation for a given position from the syntax tree.
18571
function syntaxIndentation(cx, ast, pos) {
19104
function syntaxIndentation(cx, ast, pos) {
18572
    let stack = ast.resolveStack(pos);
19105
    let stack = ast.resolveStack(pos);
18573
    let inner = stack.node.enterUnfinishedNodesBefore(pos);
19106
    let inner = ast.resolveInner(pos, -1).resolve(pos, 0).enterUnfinishedNodesBefore(pos);
18574
    if (inner != stack.node) {
19107
    if (inner != stack.node) {
18575
        let add = [];
19108
        let add = [];
18576
        for (let cur = inner; cur != stack.node; cur = cur.parent)
19109
        for (let cur = inner; cur && !(cur.from == stack.node.from && cur.type == stack.node.type); cur = cur.parent)
18577
            add.push(cur);
19110
            add.push(cur);
18578
        for (let i = add.length - 1; i >= 0; i--)
19111
        for (let i = add.length - 1; i >= 0; i--)
18579
            stack = { node: add[i], next: stack };
19112
            stack = { node: add[i], next: stack };
18580
    }
19113
    }
18581
    return indentFor(stack, cx, pos);
19114
    return indentFor(stack, cx, pos);
Línea 18694... Línea 19227...
18694
    let lineEnd = sim == null || sim <= openLine.from ? openLine.to : Math.min(openLine.to, sim);
19227
    let lineEnd = sim == null || sim <= openLine.from ? openLine.to : Math.min(openLine.to, sim);
18695
    for (let pos = openToken.to;;) {
19228
    for (let pos = openToken.to;;) {
18696
        let next = tree.childAfter(pos);
19229
        let next = tree.childAfter(pos);
18697
        if (!next || next == last)
19230
        if (!next || next == last)
18698
            return null;
19231
            return null;
18699
        if (!next.type.isSkipped)
19232
        if (!next.type.isSkipped) {
-
 
19233
            if (next.from >= lineEnd)
-
 
19234
                return null;
-
 
19235
            let space = /^ */.exec(openLine.text.slice(openToken.to - openLine.from))[0].length;
18700
            return next.from < lineEnd ? openToken : null;
19236
            return { from: openToken.from, to: openToken.to + space };
-
 
19237
        }
18701
        pos = next.to;
19238
        pos = next.to;
18702
    }
19239
    }
18703
}
19240
}
18704
/**
19241
/**
18705
An indentation strategy for delimited (usually bracketed) nodes.
19242
An indentation strategy for delimited (usually bracketed) nodes.
Línea 19043... Línea 19580...
19043
/**
19580
/**
19044
Create an extension that configures code folding.
19581
Create an extension that configures code folding.
19045
*/
19582
*/
19046
function codeFolding(config) {
19583
function codeFolding(config) {
19047
    let result = [foldState, baseTheme$1$2];
19584
    let result = [foldState, baseTheme$1$2];
19048
    if (config)
-
 
19049
        result.push(foldConfig.of(config));
-
 
19050
    return result;
19585
    return result;
19051
}
19586
}
19052
function widgetToDOM(view, prepared) {
19587
function widgetToDOM(view, prepared) {
19053
    let { state } = view, conf = state.facet(foldConfig);
19588
    let { state } = view, conf = state.facet(foldConfig);
19054
    let onclick = (event) => {
19589
    let onclick = (event) => {
Línea 19567... Línea 20102...
19567
    typeArray.push(type);
20102
    typeArray.push(type);
19568
    return type.id;
20103
    return type.id;
19569
}
20104
}
19570
({
20105
({
19571
    rtl: /*@__PURE__*/Decoration.mark({ class: "cm-iso", inclusive: true, attributes: { dir: "rtl" }, bidiIsolate: Direction.RTL }),
20106
    rtl: /*@__PURE__*/Decoration.mark({ class: "cm-iso", inclusive: true, attributes: { dir: "rtl" }, bidiIsolate: Direction.RTL }),
19572
    ltr: /*@__PURE__*/Decoration.mark({ class: "cm-iso", inclusive: true, attributes: { dir: "ltr" }, bidiIsolate: Direction.LTR }),
20107
    ltr: /*@__PURE__*/Decoration.mark({ class: "cm-iso", inclusive: true, attributes: { dir: "ltr" }, bidiIsolate: Direction.LTR })});
19573
    auto: /*@__PURE__*/Decoration.mark({ class: "cm-iso", inclusive: true, attributes: { dir: "auto" }, bidiIsolate: null })
-
 
19574
});
-
 
Línea 19575... Línea 20108...
19575
 
20108
 
19576
/**
20109
/**
19577
Comment or uncomment the current selection. Will use line comments
20110
Comment or uncomment the current selection. Will use line comments
19578
if available, otherwise falling back to block comments.
20111
if available, otherwise falling back to block comments.
Línea 19652... Línea 20185...
19652
function selectedLineRanges(state) {
20185
function selectedLineRanges(state) {
19653
    let ranges = [];
20186
    let ranges = [];
19654
    for (let r of state.selection.ranges) {
20187
    for (let r of state.selection.ranges) {
19655
        let fromLine = state.doc.lineAt(r.from);
20188
        let fromLine = state.doc.lineAt(r.from);
19656
        let toLine = r.to <= fromLine.to ? fromLine : state.doc.lineAt(r.to);
20189
        let toLine = r.to <= fromLine.to ? fromLine : state.doc.lineAt(r.to);
-
 
20190
        if (toLine.from > fromLine.from && toLine.from == r.to)
-
 
20191
            toLine = r.to == fromLine.to + 1 ? fromLine : state.doc.lineAt(r.to - 1);
19657
        let last = ranges.length - 1;
20192
        let last = ranges.length - 1;
19658
        if (last >= 0 && ranges[last].to > fromLine.from)
20193
        if (last >= 0 && ranges[last].to > fromLine.from)
19659
            ranges[last].to = toLine.to;
20194
            ranges[last].to = toLine.to;
19660
        else
20195
        else
19661
            ranges.push({ from: fromLine.from + /^\s*/.exec(fromLine.text)[0].length, to: toLine.to });
20196
            ranges.push({ from: fromLine.from + /^\s*/.exec(fromLine.text)[0].length, to: toLine.to });
Línea 20011... Línea 20546...
20011
            ((!lastEvent.selectionsAfter.length &&
20546
            ((!lastEvent.selectionsAfter.length &&
20012
                time - this.prevTime < config.newGroupDelay &&
20547
                time - this.prevTime < config.newGroupDelay &&
20013
                config.joinToEvent(tr, isAdjacent(lastEvent.changes, event.changes))) ||
20548
                config.joinToEvent(tr, isAdjacent(lastEvent.changes, event.changes))) ||
20014
                // For compose (but not compose.start) events, always join with previous event
20549
                // For compose (but not compose.start) events, always join with previous event
20015
                userEvent == "input.type.compose")) {
20550
                userEvent == "input.type.compose")) {
20016
            done = updateBranch(done, done.length - 1, config.minDepth, new HistEvent(event.changes.compose(lastEvent.changes), conc(event.effects, lastEvent.effects), lastEvent.mapped, lastEvent.startSelection, none$1));
20551
            done = updateBranch(done, done.length - 1, config.minDepth, new HistEvent(event.changes.compose(lastEvent.changes), conc(StateEffect.mapEffects(event.effects, lastEvent.changes), lastEvent.effects), lastEvent.mapped, lastEvent.startSelection, none$1));
20017
        }
20552
        }
20018
        else {
20553
        else {
20019
            done = updateBranch(done, done.length, config.minDepth, event);
20554
            done = updateBranch(done, done.length, config.minDepth, event);
20020
        }
20555
        }
20021
        return new HistoryState(done, none$1, time, userEvent);
20556
        return new HistoryState(done, none$1, time, userEvent);
Línea 20268... Línea 20803...
20268
            || (range.head < state.doc.length && matchBrackets(state, range.head + 1, -1));
20803
            || (range.head < state.doc.length && matchBrackets(state, range.head + 1, -1));
20269
        if (!matching || !matching.end)
20804
        if (!matching || !matching.end)
20270
            return range;
20805
            return range;
20271
        found = true;
20806
        found = true;
20272
        let head = matching.start.from == range.head ? matching.end.to : matching.end.from;
20807
        let head = matching.start.from == range.head ? matching.end.to : matching.end.from;
20273
        return extend ? EditorSelection.range(range.anchor, head) : EditorSelection.cursor(head);
20808
        return EditorSelection.cursor(head);
20274
    });
20809
    });
20275
    if (!found)
20810
    if (!found)
20276
        return false;
20811
        return false;
20277
    dispatch(setSel(state, selection));
20812
    dispatch(setSel(state, selection));
20278
    return true;
20813
    return true;
20279
}
20814
}
20280
/**
20815
/**
20281
Move the selection to the bracket matching the one it is currently
20816
Move the selection to the bracket matching the one it is currently
20282
on, if any.
20817
on, if any.
20283
*/
20818
*/
20284
const cursorMatchingBracket = ({ state, dispatch }) => toMatchingBracket(state, dispatch, false);
20819
const cursorMatchingBracket = ({ state, dispatch }) => toMatchingBracket(state, dispatch);
20285
function extendSel(view, how) {
20820
function extendSel(target, how) {
20286
    let selection = updateSel(view.state.selection, range => {
20821
    let selection = updateSel(target.state.selection, range => {
20287
        let head = how(range);
20822
        let head = how(range);
20288
        return EditorSelection.range(range.anchor, head.head, head.goalColumn, head.bidiLevel || undefined);
20823
        return EditorSelection.range(range.anchor, head.head, head.goalColumn, head.bidiLevel || undefined);
20289
    });
20824
    });
20290
    if (selection.eq(view.state.selection))
20825
    if (selection.eq(target.state.selection))
20291
        return false;
20826
        return false;
20292
    view.dispatch(setSel(view.state, selection));
20827
    target.dispatch(setSel(target.state, selection));
20293
    return true;
20828
    return true;
20294
}
20829
}
20295
function selectByChar(view, forward) {
20830
function selectByChar(view, forward) {
20296
    return extendSel(view, range => view.moveByChar(range, forward));
20831
    return extendSel(view, range => view.moveByChar(range, forward));
20297
}
20832
}
Línea 20419... Línea 20954...
20419
[provider](https://codemirror.net/6/docs/ref/#language.language) you use builds up a full
20954
[provider](https://codemirror.net/6/docs/ref/#language.language) you use builds up a full
20420
syntax tree.
20955
syntax tree.
20421
*/
20956
*/
20422
const selectParentSyntax = ({ state, dispatch }) => {
20957
const selectParentSyntax = ({ state, dispatch }) => {
20423
    let selection = updateSel(state.selection, range => {
20958
    let selection = updateSel(state.selection, range => {
-
 
20959
        let tree = syntaxTree(state), stack = tree.resolveStack(range.from, 1);
20424
        var _a;
20960
        if (range.empty) {
20425
        let stack = syntaxTree(state).resolveStack(range.from, 1);
20961
            let stackBefore = tree.resolveStack(range.from, -1);
-
 
20962
            if (stackBefore.node.from >= stack.node.from && stackBefore.node.to <= stack.node.to)
-
 
20963
                stack = stackBefore;
-
 
20964
        }
20426
        for (let cur = stack; cur; cur = cur.next) {
20965
        for (let cur = stack; cur; cur = cur.next) {
20427
            let { node } = cur;
20966
            let { node } = cur;
20428
            if (((node.from < range.from && node.to >= range.to) ||
20967
            if (((node.from < range.from && node.to >= range.to) ||
20429
                (node.to > range.to && node.from <= range.from)) &&
20968
                (node.to > range.to && node.from <= range.from)) &&
20430
                ((_a = node.parent) === null || _a === void 0 ? void 0 : _a.parent))
20969
                cur.next)
20431
                return EditorSelection.range(node.to, node.from);
20970
                return EditorSelection.range(node.to, node.from);
20432
        }
20971
        }
20433
        return range;
20972
        return range;
20434
    });
20973
    });
-
 
20974
    if (selection.eq(state.selection))
-
 
20975
        return false;
20435
    dispatch(setSel(state, selection));
20976
    dispatch(setSel(state, selection));
20436
    return true;
20977
    return true;
20437
};
20978
};
20438
/**
20979
/**
20439
Simplify the current selection. When multiple ranges are selected,
20980
Simplify the current selection. When multiple ranges are selected,
Línea 20492... Línea 21033...
20492
                if (from < pos && to > pos)
21033
                if (from < pos && to > pos)
20493
                    pos = forward ? to : from;
21034
                    pos = forward ? to : from;
20494
            });
21035
            });
20495
    return pos;
21036
    return pos;
20496
}
21037
}
20497
const deleteByChar = (target, forward) => deleteBy(target, range => {
21038
const deleteByChar = (target, forward, byIndentUnit) => deleteBy(target, range => {
20498
    let pos = range.from, { state } = target, line = state.doc.lineAt(pos), before, targetPos;
21039
    let pos = range.from, { state } = target, line = state.doc.lineAt(pos), before, targetPos;
20499
    if (!forward && pos > line.from && pos < line.from + 200 &&
21040
    if (byIndentUnit && !forward && pos > line.from && pos < line.from + 200 &&
20500
        !/[^ \t]/.test(before = line.text.slice(0, pos - line.from))) {
21041
        !/[^ \t]/.test(before = line.text.slice(0, pos - line.from))) {
20501
        if (before[before.length - 1] == "\t")
21042
        if (before[before.length - 1] == "\t")
20502
            return pos - 1;
21043
            return pos - 1;
20503
        let col = countColumn(before, state.tabSize), drop = col % getIndentUnit(state) || getIndentUnit(state);
21044
        let col = countColumn(before, state.tabSize), drop = col % getIndentUnit(state) || getIndentUnit(state);
20504
        for (let i = 0; i < drop && before[before.length - 1 - i] == " "; i++)
21045
        for (let i = 0; i < drop && before[before.length - 1 - i] == " "; i++)
Línea 20513... Línea 21054...
20513
            targetPos = findClusterBreak(line.text, targetPos - line.from, false, false) + line.from;
21054
            targetPos = findClusterBreak(line.text, targetPos - line.from, false, false) + line.from;
20514
    }
21055
    }
20515
    return targetPos;
21056
    return targetPos;
20516
});
21057
});
20517
/**
21058
/**
20518
Delete the selection, or, for cursor selections, the character
21059
Delete the selection, or, for cursor selections, the character or
20519
before the cursor.
21060
indentation unit before the cursor.
20520
*/
21061
*/
20521
const deleteCharBackward = view => deleteByChar(view, false);
21062
const deleteCharBackward = view => deleteByChar(view, false, true);
20522
/**
21063
/**
20523
Delete the selection or the character after the cursor.
21064
Delete the selection or the character after the cursor.
20524
*/
21065
*/
20525
const deleteCharForward = view => deleteByChar(view, true);
21066
const deleteCharForward = view => deleteByChar(view, true, false);
20526
const deleteByGroup = (target, forward) => deleteBy(target, range => {
21067
const deleteByGroup = (target, forward) => deleteBy(target, range => {
20527
    let pos = range.head, { state } = target, line = state.doc.lineAt(pos);
21068
    let pos = range.head, { state } = target, line = state.doc.lineAt(pos);
20528
    let categorize = state.charCategorizer(pos);
21069
    let categorize = state.charCategorizer(pos);
20529
    for (let cat = null;;) {
21070
    for (let cat = null;;) {
20530
        if (pos == (forward ? line.to : line.from)) {
21071
        if (pos == (forward ? line.to : line.from)) {
Línea 20700... Línea 21241...
20700
            from--;
21241
            from--;
20701
        else if (to < state.doc.length)
21242
        else if (to < state.doc.length)
20702
            to++;
21243
            to++;
20703
        return { from, to };
21244
        return { from, to };
20704
    }));
21245
    }));
20705
    let selection = updateSel(state.selection, range => view.moveVertically(range, true)).map(changes);
21246
    let selection = updateSel(state.selection, range => {
-
 
21247
        let dist = undefined;
-
 
21248
        if (view.lineWrapping) {
-
 
21249
            let block = view.lineBlockAt(range.head), pos = view.coordsAtPos(range.head, range.assoc || 1);
-
 
21250
            if (pos)
-
 
21251
                dist = (block.bottom + view.documentTop) - pos.bottom + view.defaultLineHeight / 2;
-
 
21252
        }
-
 
21253
        return view.moveVertically(range, true, dist);
-
 
21254
    }).map(changes);
20706
    view.dispatch({ changes, selection, scrollIntoView: true, userEvent: "delete.line" });
21255
    view.dispatch({ changes, selection, scrollIntoView: true, userEvent: "delete.line" });
20707
    return true;
21256
    return true;
20708
};
21257
};
20709
function isBetweenBrackets(state, pos) {
21258
function isBetweenBrackets(state, pos) {
20710
    if (/\(\)|\[\]|\{\}/.test(state.sliceDoc(pos - 1, pos + 1)))
21259
    if (/\(\)|\[\]|\{\}/.test(state.sliceDoc(pos - 1, pos + 1)))
Línea 20836... Línea 21385...
20836
        changes.push({ from: line.from + keep, to: line.from + space.length, insert: insert.slice(keep) });
21385
        changes.push({ from: line.from + keep, to: line.from + space.length, insert: insert.slice(keep) });
20837
    }), { userEvent: "delete.dedent" }));
21386
    }), { userEvent: "delete.dedent" }));
20838
    return true;
21387
    return true;
20839
};
21388
};
20840
/**
21389
/**
-
 
21390
Enables or disables
-
 
21391
[tab-focus mode](https://codemirror.net/6/docs/ref/#view.EditorView.setTabFocusMode). While on, this
-
 
21392
prevents the editor's key bindings from capturing Tab or
-
 
21393
Shift-Tab, making it possible for the user to move focus out of
-
 
21394
the editor with the keyboard.
-
 
21395
*/
-
 
21396
const toggleTabFocusMode = view => {
-
 
21397
    view.setTabFocusMode();
-
 
21398
    return true;
-
 
21399
};
-
 
21400
/**
20841
Array of key bindings containing the Emacs-style bindings that are
21401
Array of key bindings containing the Emacs-style bindings that are
20842
available on macOS by default.
21402
available on macOS by default.
Línea 20843... Línea 21403...
20843
 
21403
 
20844
 - Ctrl-b: [`cursorCharLeft`](https://codemirror.net/6/docs/ref/#commands.cursorCharLeft) ([`selectCharLeft`](https://codemirror.net/6/docs/ref/#commands.selectCharLeft) with Shift)
21404
 - Ctrl-b: [`cursorCharLeft`](https://codemirror.net/6/docs/ref/#commands.cursorCharLeft) ([`selectCharLeft`](https://codemirror.net/6/docs/ref/#commands.selectCharLeft) with Shift)
Línea 20893... Línea 21453...
20893
 - PageDown: [`cursorPageDown`](https://codemirror.net/6/docs/ref/#commands.cursorPageDown) ([`selectPageDown`](https://codemirror.net/6/docs/ref/#commands.selectPageDown) with Shift)
21453
 - PageDown: [`cursorPageDown`](https://codemirror.net/6/docs/ref/#commands.cursorPageDown) ([`selectPageDown`](https://codemirror.net/6/docs/ref/#commands.selectPageDown) with Shift)
20894
 - Home: [`cursorLineBoundaryBackward`](https://codemirror.net/6/docs/ref/#commands.cursorLineBoundaryBackward) ([`selectLineBoundaryBackward`](https://codemirror.net/6/docs/ref/#commands.selectLineBoundaryBackward) with Shift)
21454
 - Home: [`cursorLineBoundaryBackward`](https://codemirror.net/6/docs/ref/#commands.cursorLineBoundaryBackward) ([`selectLineBoundaryBackward`](https://codemirror.net/6/docs/ref/#commands.selectLineBoundaryBackward) with Shift)
20895
 - End: [`cursorLineBoundaryForward`](https://codemirror.net/6/docs/ref/#commands.cursorLineBoundaryForward) ([`selectLineBoundaryForward`](https://codemirror.net/6/docs/ref/#commands.selectLineBoundaryForward) with Shift)
21455
 - End: [`cursorLineBoundaryForward`](https://codemirror.net/6/docs/ref/#commands.cursorLineBoundaryForward) ([`selectLineBoundaryForward`](https://codemirror.net/6/docs/ref/#commands.selectLineBoundaryForward) with Shift)
20896
 - Ctrl-Home (Cmd-Home on macOS): [`cursorDocStart`](https://codemirror.net/6/docs/ref/#commands.cursorDocStart) ([`selectDocStart`](https://codemirror.net/6/docs/ref/#commands.selectDocStart) with Shift)
21456
 - Ctrl-Home (Cmd-Home on macOS): [`cursorDocStart`](https://codemirror.net/6/docs/ref/#commands.cursorDocStart) ([`selectDocStart`](https://codemirror.net/6/docs/ref/#commands.selectDocStart) with Shift)
20897
 - Ctrl-End (Cmd-Home on macOS): [`cursorDocEnd`](https://codemirror.net/6/docs/ref/#commands.cursorDocEnd) ([`selectDocEnd`](https://codemirror.net/6/docs/ref/#commands.selectDocEnd) with Shift)
21457
 - Ctrl-End (Cmd-Home on macOS): [`cursorDocEnd`](https://codemirror.net/6/docs/ref/#commands.cursorDocEnd) ([`selectDocEnd`](https://codemirror.net/6/docs/ref/#commands.selectDocEnd) with Shift)
20898
 - Enter: [`insertNewlineAndIndent`](https://codemirror.net/6/docs/ref/#commands.insertNewlineAndIndent)
21458
 - Enter and Shift-Enter: [`insertNewlineAndIndent`](https://codemirror.net/6/docs/ref/#commands.insertNewlineAndIndent)
20899
 - Ctrl-a (Cmd-a on macOS): [`selectAll`](https://codemirror.net/6/docs/ref/#commands.selectAll)
21459
 - Ctrl-a (Cmd-a on macOS): [`selectAll`](https://codemirror.net/6/docs/ref/#commands.selectAll)
20900
 - Backspace: [`deleteCharBackward`](https://codemirror.net/6/docs/ref/#commands.deleteCharBackward)
21460
 - Backspace: [`deleteCharBackward`](https://codemirror.net/6/docs/ref/#commands.deleteCharBackward)
20901
 - Delete: [`deleteCharForward`](https://codemirror.net/6/docs/ref/#commands.deleteCharForward)
21461
 - Delete: [`deleteCharForward`](https://codemirror.net/6/docs/ref/#commands.deleteCharForward)
20902
 - Ctrl-Backspace (Alt-Backspace on macOS): [`deleteGroupBackward`](https://codemirror.net/6/docs/ref/#commands.deleteGroupBackward)
21462
 - Ctrl-Backspace (Alt-Backspace on macOS): [`deleteGroupBackward`](https://codemirror.net/6/docs/ref/#commands.deleteGroupBackward)
20903
 - Ctrl-Delete (Alt-Delete on macOS): [`deleteGroupForward`](https://codemirror.net/6/docs/ref/#commands.deleteGroupForward)
21463
 - Ctrl-Delete (Alt-Delete on macOS): [`deleteGroupForward`](https://codemirror.net/6/docs/ref/#commands.deleteGroupForward)
Línea 20921... Línea 21481...
20921
    { key: "PageDown", run: cursorPageDown, shift: selectPageDown },
21481
    { key: "PageDown", run: cursorPageDown, shift: selectPageDown },
20922
    { key: "Home", run: cursorLineBoundaryBackward, shift: selectLineBoundaryBackward, preventDefault: true },
21482
    { key: "Home", run: cursorLineBoundaryBackward, shift: selectLineBoundaryBackward, preventDefault: true },
20923
    { key: "Mod-Home", run: cursorDocStart, shift: selectDocStart },
21483
    { key: "Mod-Home", run: cursorDocStart, shift: selectDocStart },
20924
    { key: "End", run: cursorLineBoundaryForward, shift: selectLineBoundaryForward, preventDefault: true },
21484
    { key: "End", run: cursorLineBoundaryForward, shift: selectLineBoundaryForward, preventDefault: true },
20925
    { key: "Mod-End", run: cursorDocEnd, shift: selectDocEnd },
21485
    { key: "Mod-End", run: cursorDocEnd, shift: selectDocEnd },
20926
    { key: "Enter", run: insertNewlineAndIndent },
21486
    { key: "Enter", run: insertNewlineAndIndent, shift: insertNewlineAndIndent },
20927
    { key: "Mod-a", run: selectAll },
21487
    { key: "Mod-a", run: selectAll },
20928
    { key: "Backspace", run: deleteCharBackward, shift: deleteCharBackward },
21488
    { key: "Backspace", run: deleteCharBackward, shift: deleteCharBackward },
20929
    { key: "Delete", run: deleteCharForward },
21489
    { key: "Delete", run: deleteCharForward },
20930
    { key: "Mod-Backspace", mac: "Alt-Backspace", run: deleteGroupBackward },
21490
    { key: "Mod-Backspace", mac: "Alt-Backspace", run: deleteGroupBackward },
20931
    { key: "Mod-Delete", mac: "Alt-Delete", run: deleteGroupForward },
21491
    { key: "Mod-Delete", mac: "Alt-Delete", run: deleteGroupForward },
Línea 20951... Línea 21511...
20951
- Ctrl-Alt-\\ (Cmd-Alt-\\ on macOS): [`indentSelection`](https://codemirror.net/6/docs/ref/#commands.indentSelection)
21511
- Ctrl-Alt-\\ (Cmd-Alt-\\ on macOS): [`indentSelection`](https://codemirror.net/6/docs/ref/#commands.indentSelection)
20952
- Shift-Ctrl-k (Shift-Cmd-k on macOS): [`deleteLine`](https://codemirror.net/6/docs/ref/#commands.deleteLine)
21512
- Shift-Ctrl-k (Shift-Cmd-k on macOS): [`deleteLine`](https://codemirror.net/6/docs/ref/#commands.deleteLine)
20953
- Shift-Ctrl-\\ (Shift-Cmd-\\ on macOS): [`cursorMatchingBracket`](https://codemirror.net/6/docs/ref/#commands.cursorMatchingBracket)
21513
- Shift-Ctrl-\\ (Shift-Cmd-\\ on macOS): [`cursorMatchingBracket`](https://codemirror.net/6/docs/ref/#commands.cursorMatchingBracket)
20954
- Ctrl-/ (Cmd-/ on macOS): [`toggleComment`](https://codemirror.net/6/docs/ref/#commands.toggleComment).
21514
- Ctrl-/ (Cmd-/ on macOS): [`toggleComment`](https://codemirror.net/6/docs/ref/#commands.toggleComment).
20955
- Shift-Alt-a: [`toggleBlockComment`](https://codemirror.net/6/docs/ref/#commands.toggleBlockComment).
21515
- Shift-Alt-a: [`toggleBlockComment`](https://codemirror.net/6/docs/ref/#commands.toggleBlockComment).
-
 
21516
- Ctrl-m (Alt-Shift-m on macOS): [`toggleTabFocusMode`](https://codemirror.net/6/docs/ref/#commands.toggleTabFocusMode).
20956
*/
21517
*/
20957
const defaultKeymap = /*@__PURE__*/[
21518
const defaultKeymap = /*@__PURE__*/[
20958
    { key: "Alt-ArrowLeft", mac: "Ctrl-ArrowLeft", run: cursorSyntaxLeft, shift: selectSyntaxLeft },
21519
    { key: "Alt-ArrowLeft", mac: "Ctrl-ArrowLeft", run: cursorSyntaxLeft, shift: selectSyntaxLeft },
20959
    { key: "Alt-ArrowRight", mac: "Ctrl-ArrowRight", run: cursorSyntaxRight, shift: selectSyntaxRight },
21520
    { key: "Alt-ArrowRight", mac: "Ctrl-ArrowRight", run: cursorSyntaxRight, shift: selectSyntaxRight },
20960
    { key: "Alt-ArrowUp", run: moveLineUp },
21521
    { key: "Alt-ArrowUp", run: moveLineUp },
Línea 20969... Línea 21530...
20969
    { key: "Mod-]", run: indentMore },
21530
    { key: "Mod-]", run: indentMore },
20970
    { key: "Mod-Alt-\\", run: indentSelection },
21531
    { key: "Mod-Alt-\\", run: indentSelection },
20971
    { key: "Shift-Mod-k", run: deleteLine },
21532
    { key: "Shift-Mod-k", run: deleteLine },
20972
    { key: "Shift-Mod-\\", run: cursorMatchingBracket },
21533
    { key: "Shift-Mod-\\", run: cursorMatchingBracket },
20973
    { key: "Mod-/", run: toggleComment },
21534
    { key: "Mod-/", run: toggleComment },
20974
    { key: "Alt-A", run: toggleBlockComment }
21535
    { key: "Alt-A", run: toggleBlockComment },
-
 
21536
    { key: "Ctrl-m", mac: "Shift-Alt-m", run: toggleTabFocusMode },
20975
].concat(standardKeymap);
21537
].concat(standardKeymap);
Línea 20976... Línea 21538...
20976
 
21538
 
20977
function crelt() {
21539
function crelt() {
20978
  var elt = arguments[0];
21540
  var elt = arguments[0];
Línea 21077... Línea 21639...
21077
                return this;
21639
                return this;
21078
            }
21640
            }
21079
            let str = fromCodePoint(next), start = this.bufferStart + this.bufferPos;
21641
            let str = fromCodePoint(next), start = this.bufferStart + this.bufferPos;
21080
            this.bufferPos += codePointSize(next);
21642
            this.bufferPos += codePointSize(next);
21081
            let norm = this.normalize(str);
21643
            let norm = this.normalize(str);
-
 
21644
            if (norm.length)
21082
            for (let i = 0, pos = start;; i++) {
21645
                for (let i = 0, pos = start;; i++) {
21083
                let code = norm.charCodeAt(i);
21646
                    let code = norm.charCodeAt(i);
21084
                let match = this.match(code, pos, this.bufferPos + this.bufferStart);
21647
                    let match = this.match(code, pos, this.bufferPos + this.bufferStart);
21085
                if (i == norm.length - 1) {
21648
                    if (i == norm.length - 1) {
21086
                    if (match) {
21649
                        if (match) {
21087
                        this.value = match;
21650
                            this.value = match;
21088
                        return this;
21651
                            return this;
-
 
21652
                        }
-
 
21653
                        break;
21089
                    }
21654
                    }
-
 
21655
                    if (pos == start && i < str.length && str.charCodeAt(i) == code)
21090
                    break;
21656
                        pos++;
21091
                }
21657
                }
21092
                if (pos == start && i < str.length && str.charCodeAt(i) == code)
-
 
21093
                    pos++;
-
 
21094
            }
-
 
21095
        }
21658
        }
21096
    }
21659
    }
21097
    match(code, pos, end) {
21660
    match(code, pos, end) {
21098
        let match = null;
21661
        let match = null;
21099
        for (let i = 0; i < this.matches.length; i += 2) {
21662
        for (let i = 0; i < this.matches.length; i += 2) {
Línea 21323... Línea 21886...
21323
        },
21886
        },
21324
        onsubmit: (event) => {
21887
        onsubmit: (event) => {
21325
            event.preventDefault();
21888
            event.preventDefault();
21326
            go();
21889
            go();
21327
        }
21890
        }
21328
    }, crelt("label", view.state.phrase("Go to line"), ": ", input), " ", crelt("button", { class: "cm-button", type: "submit" }, view.state.phrase("go")));
21891
    }, crelt("label", view.state.phrase("Go to line"), ": ", input), " ", crelt("button", { class: "cm-button", type: "submit" }, view.state.phrase("go")), crelt("button", {
-
 
21892
        name: "close",
-
 
21893
        onclick: () => {
-
 
21894
            view.dispatch({ effects: dialogEffect.of(false) });
-
 
21895
            view.focus();
-
 
21896
        },
-
 
21897
        "aria-label": view.state.phrase("close"),
-
 
21898
        type: "button"
-
 
21899
    }, ["×"]));
21329
    function go() {
21900
    function go() {
21330
        let match = /^([+-])?(\d+)?(:\d+)?(%)?$/.exec(input.value);
21901
        let match = /^([+-])?(\d+)?(:\d+)?(%)?$/.exec(input.value);
21331
        if (!match)
21902
        if (!match)
21332
            return;
21903
            return;
21333
        let { state } = view, startLine = state.doc.lineAt(state.selection.main.head);
21904
        let { state } = view, startLine = state.doc.lineAt(state.selection.main.head);
Línea 21387... Línea 21958...
21387
    return true;
21958
    return true;
21388
};
21959
};
21389
const baseTheme$1$1 = /*@__PURE__*/EditorView.baseTheme({
21960
const baseTheme$1$1 = /*@__PURE__*/EditorView.baseTheme({
21390
    ".cm-panel.cm-gotoLine": {
21961
    ".cm-panel.cm-gotoLine": {
21391
        padding: "2px 6px 4px",
21962
        padding: "2px 6px 4px",
-
 
21963
        position: "relative",
21392
        "& label": { fontSize: "80%" }
21964
        "& label": { fontSize: "80%" },
-
 
21965
        "& [name=close]": {
-
 
21966
            position: "absolute",
-
 
21967
            top: "0", bottom: "0",
-
 
21968
            right: "4px",
-
 
21969
            backgroundColor: "inherit",
-
 
21970
            border: "none",
-
 
21971
            font: "inherit",
-
 
21972
            padding: "0"
-
 
21973
        }
21393
    }
21974
    }
21394
});
21975
});
Línea 21395... Línea 21976...
21395
 
21976
 
21396
const defaultHighlightOptions = {
21977
const defaultHighlightOptions = {
Línea 21414... Línea 21995...
21414
`highlightWordAroundCursor` is enabled, the word at the cursor
21995
`highlightWordAroundCursor` is enabled, the word at the cursor
21415
itself will be highlighted with `"cm-selectionMatch-main"`.
21996
itself will be highlighted with `"cm-selectionMatch-main"`.
21416
*/
21997
*/
21417
function highlightSelectionMatches(options) {
21998
function highlightSelectionMatches(options) {
21418
    let ext = [defaultTheme, matchHighlighter];
21999
    let ext = [defaultTheme, matchHighlighter];
21419
    if (options)
-
 
21420
        ext.push(highlightConfig.of(options));
-
 
21421
    return ext;
22000
    return ext;
21422
}
22001
}
21423
const matchDeco = /*@__PURE__*/Decoration.mark({ class: "cm-selectionMatch" });
22002
const matchDeco = /*@__PURE__*/Decoration.mark({ class: "cm-selectionMatch" });
21424
const mainMatchDeco = /*@__PURE__*/Decoration.mark({ class: "cm-selectionMatch cm-selectionMatch-main" });
22003
const mainMatchDeco = /*@__PURE__*/Decoration.mark({ class: "cm-selectionMatch cm-selectionMatch-main" });
21425
// Whether the characters directly outside the given positions are non-word characters
22004
// Whether the characters directly outside the given positions are non-word characters
Línea 21637... Línea 22216...
21637
    constructor(spec) {
22216
    constructor(spec) {
21638
        super(spec);
22217
        super(spec);
21639
    }
22218
    }
21640
    nextMatch(state, curFrom, curTo) {
22219
    nextMatch(state, curFrom, curTo) {
21641
        let cursor = stringCursor(this.spec, state, curTo, state.doc.length).nextOverlapping();
22220
        let cursor = stringCursor(this.spec, state, curTo, state.doc.length).nextOverlapping();
21642
        if (cursor.done)
22221
        if (cursor.done) {
-
 
22222
            let end = Math.min(state.doc.length, curFrom + this.spec.unquoted.length);
21643
            cursor = stringCursor(this.spec, state, 0, curFrom).nextOverlapping();
22223
            cursor = stringCursor(this.spec, state, 0, end).nextOverlapping();
-
 
22224
        }
21644
        return cursor.done ? null : cursor.value;
22225
        return cursor.done || cursor.value.from == curFrom && cursor.value.to == curTo ? null : cursor.value;
21645
    }
22226
    }
21646
    // Searching in reverse is, rather than implementing an inverted search
22227
    // Searching in reverse is, rather than implementing an inverted search
21647
    // cursor, done by scanning chunk after chunk forward.
22228
    // cursor, done by scanning chunk after chunk forward.
21648
    prevMatchInRange(state, from, to) {
22229
    prevMatchInRange(state, from, to) {
21649
        for (let pos = to;;) {
22230
        for (let pos = to;;) {
Línea 21657... Línea 22238...
21657
                return null;
22238
                return null;
21658
            pos -= 10000 /* FindPrev.ChunkSize */;
22239
            pos -= 10000 /* FindPrev.ChunkSize */;
21659
        }
22240
        }
21660
    }
22241
    }
21661
    prevMatch(state, curFrom, curTo) {
22242
    prevMatch(state, curFrom, curTo) {
21662
        return this.prevMatchInRange(state, 0, curFrom) ||
22243
        let found = this.prevMatchInRange(state, 0, curFrom);
-
 
22244
        if (!found)
21663
            this.prevMatchInRange(state, curTo, state.doc.length);
22245
            found = this.prevMatchInRange(state, Math.max(0, curTo - this.spec.unquoted.length), state.doc.length);
-
 
22246
        return found && (found.from != curFrom || found.to != curTo) ? found : null;
21664
    }
22247
    }
21665
    getReplacement(_result) { return this.spec.unquote(this.spec.replace); }
22248
    getReplacement(_result) { return this.spec.unquote(this.spec.replace); }
21666
    matchAll(state, limit) {
22249
    matchAll(state, limit) {
21667
        let cursor = stringCursor(this.spec, state, 0, state.doc.length), ranges = [];
22250
        let cursor = stringCursor(this.spec, state, 0, state.doc.length), ranges = [];
21668
        while (!cursor.next().done) {
22251
        while (!cursor.next().done) {
Línea 21719... Línea 22302...
21719
    prevMatch(state, curFrom, curTo) {
22302
    prevMatch(state, curFrom, curTo) {
21720
        return this.prevMatchInRange(state, 0, curFrom) ||
22303
        return this.prevMatchInRange(state, 0, curFrom) ||
21721
            this.prevMatchInRange(state, curTo, state.doc.length);
22304
            this.prevMatchInRange(state, curTo, state.doc.length);
21722
    }
22305
    }
21723
    getReplacement(result) {
22306
    getReplacement(result) {
21724
        return this.spec.unquote(this.spec.replace).replace(/\$([$&\d+])/g, (m, i) => i == "$" ? "$"
22307
        return this.spec.unquote(this.spec.replace).replace(/\$([$&]|\d+)/g, (m, i) => {
-
 
22308
            if (i == "&")
21725
            : i == "&" ? result.match[0]
22309
                return result.match[0];
-
 
22310
            if (i == "$")
-
 
22311
                return "$";
-
 
22312
            for (let l = i.length; l > 0; l--) {
-
 
22313
                let n = +i.slice(0, l);
21726
                : i != "0" && +i < result.match.length ? result.match[i]
22314
                if (n > 0 && n < result.match.length)
-
 
22315
                    return result.match[n] + i.slice(l);
-
 
22316
            }
21727
                    : m);
22317
            return m;
-
 
22318
        });
21728
    }
22319
    }
21729
    matchAll(state, limit) {
22320
    matchAll(state, limit) {
21730
        let cursor = regexpCursor(this.spec, state, 0, state.doc.length), ranges = [];
22321
        let cursor = regexpCursor(this.spec, state, 0, state.doc.length), ranges = [];
21731
        while (!cursor.next().done) {
22322
        while (!cursor.next().done) {
21732
            if (ranges.length >= limit)
22323
            if (ranges.length >= limit)
Línea 21888... Línea 22479...
21888
*/
22479
*/
21889
const replaceNext = /*@__PURE__*/searchCommand((view, { query }) => {
22480
const replaceNext = /*@__PURE__*/searchCommand((view, { query }) => {
21890
    let { state } = view, { from, to } = state.selection.main;
22481
    let { state } = view, { from, to } = state.selection.main;
21891
    if (state.readOnly)
22482
    if (state.readOnly)
21892
        return false;
22483
        return false;
21893
    let next = query.nextMatch(state, from, from);
22484
    let match = query.nextMatch(state, from, from);
21894
    if (!next)
22485
    if (!match)
21895
        return false;
22486
        return false;
-
 
22487
    let next = match;
21896
    let changes = [], selection, replacement;
22488
    let changes = [], selection, replacement;
21897
    let effects = [];
22489
    let effects = [];
21898
    if (next.from == from && next.to == to) {
22490
    if (next.from == from && next.to == to) {
21899
        replacement = state.toText(query.getReplacement(next));
22491
        replacement = state.toText(query.getReplacement(next));
21900
        changes.push({ from: next.from, to: next.to, insert: replacement });
22492
        changes.push({ from: next.from, to: next.to, insert: replacement });
21901
        next = query.nextMatch(state, next.from, next.to);
22493
        next = query.nextMatch(state, next.from, next.to);
21902
        effects.push(EditorView.announce.of(state.phrase("replaced match on line $", state.doc.lineAt(from).number) + "."));
22494
        effects.push(EditorView.announce.of(state.phrase("replaced match on line $", state.doc.lineAt(from).number) + "."));
21903
    }
22495
    }
21904
    if (next) {
22496
    if (next) {
21905
        let off = changes.length == 0 || changes[0].from >= next.to ? 0 : next.to - next.from - replacement.length;
22497
        let off = changes.length == 0 || changes[0].from >= match.to ? 0 : match.to - match.from - replacement.length;
21906
        selection = EditorSelection.single(next.from - off, next.to - off);
22498
        selection = EditorSelection.single(next.from - off, next.to - off);
21907
        effects.push(announceMatch(view, next));
22499
        effects.push(announceMatch(view, next));
21908
        effects.push(state.facet(searchConfigFacet).scrollToMatch(selection.main, view));
22500
        effects.push(state.facet(searchConfigFacet).scrollToMatch(selection.main, view));
21909
    }
22501
    }
21910
    view.dispatch({
22502
    view.dispatch({
Línea 22215... Línea 22807...
22215
    Indicates whether completion was activated explicitly, or
22807
    Indicates whether completion was activated explicitly, or
22216
    implicitly by typing. The usual way to respond to this is to
22808
    implicitly by typing. The usual way to respond to this is to
22217
    only return completions when either there is part of a
22809
    only return completions when either there is part of a
22218
    completable entity before the cursor, or `explicit` is true.
22810
    completable entity before the cursor, or `explicit` is true.
22219
    */
22811
    */
22220
    explicit) {
22812
    explicit, 
-
 
22813
    /**
-
 
22814
    The editor view. May be undefined if the context was created
-
 
22815
    in a situation where there is no such view available, such as
-
 
22816
    in synchronous updates via
-
 
22817
    [`CompletionResult.update`](https://codemirror.net/6/docs/ref/#autocomplete.CompletionResult.update)
-
 
22818
    or when called by test code.
-
 
22819
    */
-
 
22820
    view) {
22221
        this.state = state;
22821
        this.state = state;
22222
        this.pos = pos;
22822
        this.pos = pos;
22223
        this.explicit = explicit;
22823
        this.explicit = explicit;
-
 
22824
        this.view = view;
22224
        /**
22825
        /**
22225
        @internal
22826
        @internal
22226
        */
22827
        */
22227
        this.abortListeners = [];
22828
        this.abortListeners = [];
-
 
22829
        /**
-
 
22830
        @internal
-
 
22831
        */
-
 
22832
        this.abortOnDocChange = false;
22228
    }
22833
    }
22229
    /**
22834
    /**
22230
    Get the extent, content, and (if there is a token) type of the
22835
    Get the extent, content, and (if there is a token) type of the
22231
    token before `this.pos`.
22836
    token before `this.pos`.
22232
    */
22837
    */
Línea 22256... Línea 22861...
22256
    get aborted() { return this.abortListeners == null; }
22861
    get aborted() { return this.abortListeners == null; }
22257
    /**
22862
    /**
22258
    Allows you to register abort handlers, which will be called when
22863
    Allows you to register abort handlers, which will be called when
22259
    the query is
22864
    the query is
22260
    [aborted](https://codemirror.net/6/docs/ref/#autocomplete.CompletionContext.aborted).
22865
    [aborted](https://codemirror.net/6/docs/ref/#autocomplete.CompletionContext.aborted).
-
 
22866
    
-
 
22867
    By default, running queries will not be aborted for regular
-
 
22868
    typing or backspacing, on the assumption that they are likely to
-
 
22869
    return a result with a
-
 
22870
    [`validFor`](https://codemirror.net/6/docs/ref/#autocomplete.CompletionResult.validFor) field that
-
 
22871
    allows the result to be used after all. Passing `onDocChange:
-
 
22872
    true` will cause this query to be aborted for any document
-
 
22873
    change.
22261
    */
22874
    */
22262
    addEventListener(type, listener) {
22875
    addEventListener(type, listener, options) {
22263
        if (type == "abort" && this.abortListeners)
22876
        if (type == "abort" && this.abortListeners) {
22264
            this.abortListeners.push(listener);
22877
            this.abortListeners.push(listener);
-
 
22878
            if (options && options.onDocChange)
-
 
22879
                this.abortOnDocChange = true;
-
 
22880
        }
22265
    }
22881
    }
22266
}
22882
}
22267
function toSet(chars) {
22883
function toSet(chars) {
22268
    let flat = Object.keys(chars).join("");
22884
    let flat = Object.keys(chars).join("");
22269
    let words = /\w/.test(flat);
22885
    let words = /\w/.test(flat);
Línea 22341... Línea 22957...
22341
    let { main } = state.selection, fromOff = from - main.from, toOff = to - main.from;
22957
    let { main } = state.selection, fromOff = from - main.from, toOff = to - main.from;
22342
    return Object.assign(Object.assign({}, state.changeByRange(range => {
22958
    return Object.assign(Object.assign({}, state.changeByRange(range => {
22343
        if (range != main && from != to &&
22959
        if (range != main && from != to &&
22344
            state.sliceDoc(range.from + fromOff, range.from + toOff) != state.sliceDoc(from, to))
22960
            state.sliceDoc(range.from + fromOff, range.from + toOff) != state.sliceDoc(from, to))
22345
            return { range };
22961
            return { range };
-
 
22962
        let lines = state.toText(text);
22346
        return {
22963
        return {
22347
            changes: { from: range.from + fromOff, to: to == main.from ? range.to : range.from + toOff, insert: text },
22964
            changes: { from: range.from + fromOff, to: to == main.from ? range.to : range.from + toOff, insert: lines },
22348
            range: EditorSelection.cursor(range.from + fromOff + text.length)
22965
            range: EditorSelection.cursor(range.from + fromOff + lines.length)
22349
        };
22966
        };
22350
    })), { scrollIntoView: true, userEvent: "input.complete" });
22967
    })), { scrollIntoView: true, userEvent: "input.complete" });
22351
}
22968
}
22352
const SourceCache = /*@__PURE__*/new WeakMap();
22969
const SourceCache = /*@__PURE__*/new WeakMap();
22353
function asSource(source) {
22970
function asSource(source) {
Línea 22520... Línea 23137...
22520
 
23137
 
22521
const completionConfig = /*@__PURE__*/Facet.define({
23138
const completionConfig = /*@__PURE__*/Facet.define({
22522
    combine(configs) {
23139
    combine(configs) {
22523
        return combineConfig(configs, {
23140
        return combineConfig(configs, {
-
 
23141
            activateOnTyping: true,
22524
            activateOnTyping: true,
23142
            activateOnCompletion: () => false,
22525
            activateOnTypingDelay: 100,
23143
            activateOnTypingDelay: 100,
22526
            selectOnOpen: true,
23144
            selectOnOpen: true,
22527
            override: null,
23145
            override: null,
22528
            closeOnBlur: true,
23146
            closeOnBlur: true,
Línea 22798... Línea 23416...
22798
        let listRect = this.dom.getBoundingClientRect();
23416
        let listRect = this.dom.getBoundingClientRect();
22799
        let infoRect = this.info.getBoundingClientRect();
23417
        let infoRect = this.info.getBoundingClientRect();
22800
        let selRect = sel.getBoundingClientRect();
23418
        let selRect = sel.getBoundingClientRect();
22801
        let space = this.space;
23419
        let space = this.space;
22802
        if (!space) {
23420
        if (!space) {
22803
            let win = this.dom.ownerDocument.defaultView || window;
23421
            let docElt = this.dom.ownerDocument.documentElement;
22804
            space = { left: 0, top: 0, right: win.innerWidth, bottom: win.innerHeight };
23422
            space = { left: 0, top: 0, right: docElt.clientWidth, bottom: docElt.clientHeight };
22805
        }
23423
        }
22806
        if (selRect.top > Math.min(space.bottom, listRect.bottom) - 10 ||
23424
        if (selRect.top > Math.min(space.bottom, listRect.bottom) - 10 ||
22807
            selRect.bottom < Math.max(space.top, listRect.top) + 10)
23425
            selRect.bottom < Math.max(space.top, listRect.top) + 10)
22808
            return null;
23426
            return null;
22809
        return this.view.state.facet(completionConfig).positionInfo(this.view, listRect, selRect, infoRect, space, this.dom);
23427
        return this.view.state.facet(completionConfig).positionInfo(this.view, listRect, selRect, infoRect, space, this.dom);
Línea 22824... Línea 23442...
22824
        const ul = document.createElement("ul");
23442
        const ul = document.createElement("ul");
22825
        ul.id = id;
23443
        ul.id = id;
22826
        ul.setAttribute("role", "listbox");
23444
        ul.setAttribute("role", "listbox");
22827
        ul.setAttribute("aria-expanded", "true");
23445
        ul.setAttribute("aria-expanded", "true");
22828
        ul.setAttribute("aria-label", this.view.state.phrase("Completions"));
23446
        ul.setAttribute("aria-label", this.view.state.phrase("Completions"));
-
 
23447
        ul.addEventListener("mousedown", e => {
-
 
23448
            // Prevent focus change when clicking the scrollbar
-
 
23449
            if (e.target == ul)
-
 
23450
                e.preventDefault();
-
 
23451
        });
22829
        let curSection = null;
23452
        let curSection = null;
22830
        for (let i = range.from; i < range.to; i++) {
23453
        for (let i = range.from; i < range.to; i++) {
22831
            let { completion, match } = options[i], { section } = completion;
23454
            let { completion, match } = options[i], { section } = completion;
22832
            if (section) {
23455
            if (section) {
22833
                let name = typeof section == "string" ? section : section.name;
23456
                let name = typeof section == "string" ? section : section.name;
Línea 22962... Línea 23585...
22962
    }
23585
    }
22963
    setSelected(selected, id) {
23586
    setSelected(selected, id) {
22964
        return selected == this.selected || selected >= this.options.length ? this
23587
        return selected == this.selected || selected >= this.options.length ? this
22965
            : new CompletionDialog(this.options, makeAttrs(id, selected), this.tooltip, this.timestamp, selected, this.disabled);
23588
            : new CompletionDialog(this.options, makeAttrs(id, selected), this.tooltip, this.timestamp, selected, this.disabled);
22966
    }
23589
    }
22967
    static build(active, state, id, prev, conf) {
23590
    static build(active, state, id, prev, conf, didSetActive) {
-
 
23591
        if (prev && !didSetActive && active.some(s => s.isPending))
-
 
23592
            return prev.setDisabled();
22968
        let options = sortOptions(active, state);
23593
        let options = sortOptions(active, state);
22969
        if (!options.length) {
23594
        if (!options.length)
22970
            return prev && active.some(a => a.state == 1 /* State.Pending */) ?
23595
            return prev && active.some(a => a.isPending) ? prev.setDisabled() : null;
22971
                new CompletionDialog(prev.options, prev.attrs, prev.tooltip, prev.timestamp, prev.selected, true) : null;
-
 
22972
        }
-
 
22973
        let selected = state.facet(completionConfig).selectOnOpen ? 0 : -1;
23596
        let selected = state.facet(completionConfig).selectOnOpen ? 0 : -1;
22974
        if (prev && prev.selected != selected && prev.selected != -1) {
23597
        if (prev && prev.selected != selected && prev.selected != -1) {
22975
            let selectedValue = prev.options[prev.selected].completion;
23598
            let selectedValue = prev.options[prev.selected].completion;
22976
            for (let i = 0; i < options.length; i++)
23599
            for (let i = 0; i < options.length; i++)
22977
                if (options[i].completion == selectedValue) {
23600
                if (options[i].completion == selectedValue) {
Línea 22986... Línea 23609...
22986
        }, prev ? prev.timestamp : Date.now(), selected, false);
23609
        }, prev ? prev.timestamp : Date.now(), selected, false);
22987
    }
23610
    }
22988
    map(changes) {
23611
    map(changes) {
22989
        return new CompletionDialog(this.options, this.attrs, Object.assign(Object.assign({}, this.tooltip), { pos: changes.mapPos(this.tooltip.pos) }), this.timestamp, this.selected, this.disabled);
23612
        return new CompletionDialog(this.options, this.attrs, Object.assign(Object.assign({}, this.tooltip), { pos: changes.mapPos(this.tooltip.pos) }), this.timestamp, this.selected, this.disabled);
22990
    }
23613
    }
-
 
23614
    setDisabled() {
-
 
23615
        return new CompletionDialog(this.options, this.attrs, this.tooltip, this.timestamp, this.selected, true);
-
 
23616
    }
22991
}
23617
}
22992
class CompletionState {
23618
class CompletionState {
22993
    constructor(active, id, open) {
23619
    constructor(active, id, open) {
22994
        this.active = active;
23620
        this.active = active;
22995
        this.id = id;
23621
        this.id = id;
Línea 23007... Línea 23633...
23007
                new ActiveSource(source, this.active.some(a => a.state != 0 /* State.Inactive */) ? 1 /* State.Pending */ : 0 /* State.Inactive */);
23633
                new ActiveSource(source, this.active.some(a => a.state != 0 /* State.Inactive */) ? 1 /* State.Pending */ : 0 /* State.Inactive */);
23008
            return value.update(tr, conf);
23634
            return value.update(tr, conf);
23009
        });
23635
        });
23010
        if (active.length == this.active.length && active.every((a, i) => a == this.active[i]))
23636
        if (active.length == this.active.length && active.every((a, i) => a == this.active[i]))
23011
            active = this.active;
23637
            active = this.active;
23012
        let open = this.open;
23638
        let open = this.open, didSet = tr.effects.some(e => e.is(setActiveEffect));
23013
        if (open && tr.docChanged)
23639
        if (open && tr.docChanged)
23014
            open = open.map(tr.changes);
23640
            open = open.map(tr.changes);
23015
        if (tr.selection || active.some(a => a.hasResult() && tr.changes.touchesRange(a.from, a.to)) ||
23641
        if (tr.selection || active.some(a => a.hasResult() && tr.changes.touchesRange(a.from, a.to)) ||
23016
            !sameResults(active, this.active))
23642
            !sameResults(active, this.active) || didSet)
23017
            open = CompletionDialog.build(active, state, this.id, open, conf);
23643
            open = CompletionDialog.build(active, state, this.id, open, conf, didSet);
23018
        else if (open && open.disabled && !active.some(a => a.state == 1 /* State.Pending */))
23644
        else if (open && open.disabled && !active.some(a => a.isPending))
23019
            open = null;
23645
            open = null;
23020
        if (!open && active.every(a => a.state != 1 /* State.Pending */) && active.some(a => a.hasResult()))
23646
        if (!open && active.every(a => !a.isPending) && active.some(a => a.hasResult()))
23021
            active = active.map(a => a.hasResult() ? new ActiveSource(a.source, 0 /* State.Inactive */) : a);
23647
            active = active.map(a => a.hasResult() ? new ActiveSource(a.source, 0 /* State.Inactive */) : a);
23022
        for (let effect of tr.effects)
23648
        for (let effect of tr.effects)
23023
            if (effect.is(setSelectedEffect))
23649
            if (effect.is(setSelectedEffect))
23024
                open = open && open.setSelected(effect.value, this.id);
23650
                open = open && open.setSelected(effect.value, this.id);
23025
        return active == this.active && open == this.open ? this : new CompletionState(active, this.id, open);
23651
        return active == this.active && open == this.open ? this : new CompletionState(active, this.id, open);
23026
    }
23652
    }
23027
    get tooltip() { return this.open ? this.open.tooltip : null; }
23653
    get tooltip() { return this.open ? this.open.tooltip : null; }
23028
    get attrs() { return this.open ? this.open.attrs : baseAttrs; }
23654
    get attrs() { return this.open ? this.open.attrs : this.active.length ? baseAttrs : noAttrs; }
23029
}
23655
}
23030
function sameResults(a, b) {
23656
function sameResults(a, b) {
23031
    if (a == b)
23657
    if (a == b)
23032
        return true;
23658
        return true;
23033
    for (let iA = 0, iB = 0;;) {
23659
    for (let iA = 0, iB = 0;;) {
23034
        while (iA < a.length && !a[iA].hasResult)
23660
        while (iA < a.length && !a[iA].hasResult())
23035
            iA++;
23661
            iA++;
23036
        while (iB < b.length && !b[iB].hasResult)
23662
        while (iB < b.length && !b[iB].hasResult())
23037
            iB++;
23663
            iB++;
23038
        let endA = iA == a.length, endB = iB == b.length;
23664
        let endA = iA == a.length, endB = iB == b.length;
23039
        if (endA || endB)
23665
        if (endA || endB)
23040
            return endA == endB;
23666
            return endA == endB;
23041
        if (a[iA++].result != b[iB++].result)
23667
        if (a[iA++].result != b[iB++].result)
Línea 23043... Línea 23669...
23043
    }
23669
    }
23044
}
23670
}
23045
const baseAttrs = {
23671
const baseAttrs = {
23046
    "aria-autocomplete": "list"
23672
    "aria-autocomplete": "list"
23047
};
23673
};
-
 
23674
const noAttrs = {};
23048
function makeAttrs(id, selected) {
23675
function makeAttrs(id, selected) {
23049
    let result = {
23676
    let result = {
23050
        "aria-autocomplete": "list",
23677
        "aria-autocomplete": "list",
23051
        "aria-haspopup": "listbox",
23678
        "aria-haspopup": "listbox",
23052
        "aria-controls": id
23679
        "aria-controls": id
Línea 23054... Línea 23681...
23054
    if (selected > -1)
23681
    if (selected > -1)
23055
        result["aria-activedescendant"] = id + "-" + selected;
23682
        result["aria-activedescendant"] = id + "-" + selected;
23056
    return result;
23683
    return result;
23057
}
23684
}
23058
const none = [];
23685
const none = [];
23059
function getUserEvent(tr) {
23686
function getUpdateType(tr, conf) {
-
 
23687
    if (tr.isUserEvent("input.complete")) {
-
 
23688
        let completion = tr.annotation(pickedCompletion);
-
 
23689
        if (completion && conf.activateOnCompletion(completion))
-
 
23690
            return 4 /* UpdateType.Activate */ | 8 /* UpdateType.Reset */;
-
 
23691
    }
-
 
23692
    let typing = tr.isUserEvent("input.type");
-
 
23693
    return typing && conf.activateOnTyping ? 4 /* UpdateType.Activate */ | 1 /* UpdateType.Typing */
-
 
23694
        : typing ? 1 /* UpdateType.Typing */
23060
    return tr.isUserEvent("input.type") ? "input" : tr.isUserEvent("delete.backward") ? "delete" : null;
23695
            : tr.isUserEvent("delete.backward") ? 2 /* UpdateType.Backspacing */
-
 
23696
                : tr.selection ? 8 /* UpdateType.Reset */
-
 
23697
                    : tr.docChanged ? 16 /* UpdateType.ResetIfTouching */ : 0 /* UpdateType.None */;
23061
}
23698
}
23062
class ActiveSource {
23699
class ActiveSource {
23063
    constructor(source, state, explicitPos = -1) {
23700
    constructor(source, state, explicit = false) {
23064
        this.source = source;
23701
        this.source = source;
23065
        this.state = state;
23702
        this.state = state;
23066
        this.explicitPos = explicitPos;
23703
        this.explicit = explicit;
23067
    }
23704
    }
23068
    hasResult() { return false; }
23705
    hasResult() { return false; }
-
 
23706
    get isPending() { return this.state == 1 /* State.Pending */; }
23069
    update(tr, conf) {
23707
    update(tr, conf) {
23070
        let event = getUserEvent(tr), value = this;
23708
        let type = getUpdateType(tr, conf), value = this;
23071
        if (event)
-
 
23072
            value = value.handleUserEvent(tr, event, conf);
-
 
23073
        else if (tr.docChanged)
-
 
23074
            value = value.handleChange(tr);
-
 
23075
        else if (tr.selection && value.state != 0 /* State.Inactive */)
23709
        if ((type & 8 /* UpdateType.Reset */) || (type & 16 /* UpdateType.ResetIfTouching */) && this.touches(tr))
23076
            value = new ActiveSource(value.source, 0 /* State.Inactive */);
23710
            value = new ActiveSource(value.source, 0 /* State.Inactive */);
-
 
23711
        if ((type & 4 /* UpdateType.Activate */) && value.state == 0 /* State.Inactive */)
-
 
23712
            value = new ActiveSource(this.source, 1 /* State.Pending */);
-
 
23713
        value = value.updateFor(tr, type);
23077
        for (let effect of tr.effects) {
23714
        for (let effect of tr.effects) {
23078
            if (effect.is(startCompletionEffect))
23715
            if (effect.is(startCompletionEffect))
23079
                value = new ActiveSource(value.source, 1 /* State.Pending */, effect.value ? cur(tr.state) : -1);
23716
                value = new ActiveSource(value.source, 1 /* State.Pending */, effect.value);
23080
            else if (effect.is(closeCompletionEffect))
23717
            else if (effect.is(closeCompletionEffect))
23081
                value = new ActiveSource(value.source, 0 /* State.Inactive */);
23718
                value = new ActiveSource(value.source, 0 /* State.Inactive */);
23082
            else if (effect.is(setActiveEffect))
23719
            else if (effect.is(setActiveEffect))
23083
                for (let active of effect.value)
23720
                for (let active of effect.value)
23084
                    if (active.source == value.source)
23721
                    if (active.source == value.source)
23085
                        value = active;
23722
                        value = active;
23086
        }
23723
        }
23087
        return value;
23724
        return value;
23088
    }
23725
    }
23089
    handleUserEvent(tr, type, conf) {
23726
    updateFor(tr, type) { return this.map(tr.changes); }
23090
        return type == "delete" || !conf.activateOnTyping ? this.map(tr.changes) : new ActiveSource(this.source, 1 /* State.Pending */);
-
 
23091
    }
-
 
23092
    handleChange(tr) {
23727
    map(changes) { return this; }
23093
        return tr.changes.touchesRange(cur(tr.startState)) ? new ActiveSource(this.source, 0 /* State.Inactive */) : this.map(tr.changes);
-
 
23094
    }
-
 
23095
    map(changes) {
23728
    touches(tr) {
23096
        return changes.empty || this.explicitPos < 0 ? this : new ActiveSource(this.source, this.state, changes.mapPos(this.explicitPos));
23729
        return tr.changes.touchesRange(cur(tr.state));
23097
    }
23730
    }
23098
}
23731
}
23099
class ActiveResult extends ActiveSource {
23732
class ActiveResult extends ActiveSource {
23100
    constructor(source, explicitPos, result, from, to) {
23733
    constructor(source, explicit, limit, result, from, to) {
23101
        super(source, 2 /* State.Result */, explicitPos);
23734
        super(source, 3 /* State.Result */, explicit);
-
 
23735
        this.limit = limit;
23102
        this.result = result;
23736
        this.result = result;
23103
        this.from = from;
23737
        this.from = from;
23104
        this.to = to;
23738
        this.to = to;
23105
    }
23739
    }
23106
    hasResult() { return true; }
23740
    hasResult() { return true; }
23107
    handleUserEvent(tr, type, conf) {
23741
    updateFor(tr, type) {
23108
        var _a;
23742
        var _a;
-
 
23743
        if (!(type & 3 /* UpdateType.SimpleInteraction */))
-
 
23744
            return this.map(tr.changes);
23109
        let result = this.result;
23745
        let result = this.result;
23110
        if (result.map && !tr.changes.empty)
23746
        if (result.map && !tr.changes.empty)
23111
            result = result.map(result, tr.changes);
23747
            result = result.map(result, tr.changes);
23112
        let from = tr.changes.mapPos(this.from), to = tr.changes.mapPos(this.to, 1);
23748
        let from = tr.changes.mapPos(this.from), to = tr.changes.mapPos(this.to, 1);
23113
        let pos = cur(tr.state);
23749
        let pos = cur(tr.state);
23114
        if ((this.explicitPos < 0 ? pos <= from : pos < this.from) ||
-
 
23115
            pos > to || !result ||
23750
        if (pos > to || !result ||
23116
            type == "delete" && cur(tr.startState) == this.from)
23751
            (type & 2 /* UpdateType.Backspacing */) && (cur(tr.startState) == this.from || pos < this.limit))
23117
            return new ActiveSource(this.source, type == "input" && conf.activateOnTyping ? 1 /* State.Pending */ : 0 /* State.Inactive */);
23752
            return new ActiveSource(this.source, type & 4 /* UpdateType.Activate */ ? 1 /* State.Pending */ : 0 /* State.Inactive */);
23118
        let explicitPos = this.explicitPos < 0 ? -1 : tr.changes.mapPos(this.explicitPos);
23753
        let limit = tr.changes.mapPos(this.limit);
23119
        if (checkValid(result.validFor, tr.state, from, to))
23754
        if (checkValid(result.validFor, tr.state, from, to))
23120
            return new ActiveResult(this.source, explicitPos, result, from, to);
23755
            return new ActiveResult(this.source, this.explicit, limit, result, from, to);
23121
        if (result.update &&
23756
        if (result.update &&
23122
            (result = result.update(result, from, to, new CompletionContext(tr.state, pos, explicitPos >= 0))))
23757
            (result = result.update(result, from, to, new CompletionContext(tr.state, pos, false))))
23123
            return new ActiveResult(this.source, explicitPos, result, result.from, (_a = result.to) !== null && _a !== void 0 ? _a : cur(tr.state));
23758
            return new ActiveResult(this.source, this.explicit, limit, result, result.from, (_a = result.to) !== null && _a !== void 0 ? _a : cur(tr.state));
23124
        return new ActiveSource(this.source, 1 /* State.Pending */, explicitPos);
23759
        return new ActiveSource(this.source, 1 /* State.Pending */, this.explicit);
23125
    }
-
 
23126
    handleChange(tr) {
-
 
23127
        return tr.changes.touchesRange(this.from, this.to) ? new ActiveSource(this.source, 0 /* State.Inactive */) : this.map(tr.changes);
-
 
23128
    }
23760
    }
23129
    map(mapping) {
23761
    map(mapping) {
23130
        if (mapping.empty)
23762
        if (mapping.empty)
23131
            return this;
23763
            return this;
23132
        let result = this.result.map ? this.result.map(this.result, mapping) : this.result;
23764
        let result = this.result.map ? this.result.map(this.result, mapping) : this.result;
23133
        if (!result)
23765
        if (!result)
23134
            return new ActiveSource(this.source, 0 /* State.Inactive */);
23766
            return new ActiveSource(this.source, 0 /* State.Inactive */);
23135
        return new ActiveResult(this.source, this.explicitPos < 0 ? -1 : mapping.mapPos(this.explicitPos), this.result, mapping.mapPos(this.from), mapping.mapPos(this.to, 1));
23767
        return new ActiveResult(this.source, this.explicit, mapping.mapPos(this.limit), this.result, mapping.mapPos(this.from), mapping.mapPos(this.to, 1));
-
 
23768
    }
-
 
23769
    touches(tr) {
-
 
23770
        return tr.changes.touchesRange(this.from, this.to);
23136
    }
23771
    }
23137
}
23772
}
23138
function checkValid(validFor, state, from, to) {
23773
function checkValid(validFor, state, from, to) {
23139
    if (!validFor)
23774
    if (!validFor)
23140
        return false;
23775
        return false;
Línea 23239... Línea 23874...
23239
        this.running = [];
23874
        this.running = [];
23240
        this.debounceAccept = -1;
23875
        this.debounceAccept = -1;
23241
        this.pendingStart = false;
23876
        this.pendingStart = false;
23242
        this.composing = 0 /* CompositionState.None */;
23877
        this.composing = 0 /* CompositionState.None */;
23243
        for (let active of view.state.field(completionState).active)
23878
        for (let active of view.state.field(completionState).active)
23244
            if (active.state == 1 /* State.Pending */)
23879
            if (active.isPending)
23245
                this.startQuery(active);
23880
                this.startQuery(active);
23246
    }
23881
    }
23247
    update(update) {
23882
    update(update) {
23248
        let cState = update.state.field(completionState);
23883
        let cState = update.state.field(completionState);
-
 
23884
        let conf = update.state.facet(completionConfig);
23249
        if (!update.selectionSet && !update.docChanged && update.startState.field(completionState) == cState)
23885
        if (!update.selectionSet && !update.docChanged && update.startState.field(completionState) == cState)
23250
            return;
23886
            return;
23251
        let doesReset = update.transactions.some(tr => {
23887
        let doesReset = update.transactions.some(tr => {
-
 
23888
            let type = getUpdateType(tr, conf);
23252
            return (tr.selection || tr.docChanged) && !getUserEvent(tr);
23889
            return (type & 8 /* UpdateType.Reset */) || (tr.selection || tr.docChanged) && !(type & 3 /* UpdateType.SimpleInteraction */);
23253
        });
23890
        });
23254
        for (let i = 0; i < this.running.length; i++) {
23891
        for (let i = 0; i < this.running.length; i++) {
23255
            let query = this.running[i];
23892
            let query = this.running[i];
23256
            if (doesReset ||
23893
            if (doesReset ||
-
 
23894
                query.context.abortOnDocChange && update.docChanged ||
23257
                query.updates.length + update.transactions.length > MaxUpdateCount && Date.now() - query.time > MinAbortTime) {
23895
                query.updates.length + update.transactions.length > MaxUpdateCount && Date.now() - query.time > MinAbortTime) {
23258
                for (let handler of query.context.abortListeners) {
23896
                for (let handler of query.context.abortListeners) {
23259
                    try {
23897
                    try {
23260
                        handler();
23898
                        handler();
23261
                    }
23899
                    }
Línea 23272... Línea 23910...
23272
        }
23910
        }
23273
        if (this.debounceUpdate > -1)
23911
        if (this.debounceUpdate > -1)
23274
            clearTimeout(this.debounceUpdate);
23912
            clearTimeout(this.debounceUpdate);
23275
        if (update.transactions.some(tr => tr.effects.some(e => e.is(startCompletionEffect))))
23913
        if (update.transactions.some(tr => tr.effects.some(e => e.is(startCompletionEffect))))
23276
            this.pendingStart = true;
23914
            this.pendingStart = true;
23277
        let delay = this.pendingStart ? 50 : update.state.facet(completionConfig).activateOnTypingDelay;
23915
        let delay = this.pendingStart ? 50 : conf.activateOnTypingDelay;
23278
        this.debounceUpdate = cState.active.some(a => a.state == 1 /* State.Pending */ && !this.running.some(q => q.active.source == a.source))
23916
        this.debounceUpdate = cState.active.some(a => a.isPending && !this.running.some(q => q.active.source == a.source))
23279
            ? setTimeout(() => this.startUpdate(), delay) : -1;
23917
            ? setTimeout(() => this.startUpdate(), delay) : -1;
23280
        if (this.composing != 0 /* CompositionState.None */)
23918
        if (this.composing != 0 /* CompositionState.None */)
23281
            for (let tr of update.transactions) {
23919
            for (let tr of update.transactions) {
23282
                if (getUserEvent(tr) == "input")
23920
                if (tr.isUserEvent("input.type"))
23283
                    this.composing = 2 /* CompositionState.Changed */;
23921
                    this.composing = 2 /* CompositionState.Changed */;
23284
                else if (this.composing == 2 /* CompositionState.Changed */ && tr.selection)
23922
                else if (this.composing == 2 /* CompositionState.Changed */ && tr.selection)
23285
                    this.composing = 3 /* CompositionState.ChangedAndMoved */;
23923
                    this.composing = 3 /* CompositionState.ChangedAndMoved */;
23286
            }
23924
            }
23287
    }
23925
    }
23288
    startUpdate() {
23926
    startUpdate() {
23289
        this.debounceUpdate = -1;
23927
        this.debounceUpdate = -1;
23290
        this.pendingStart = false;
23928
        this.pendingStart = false;
23291
        let { state } = this.view, cState = state.field(completionState);
23929
        let { state } = this.view, cState = state.field(completionState);
23292
        for (let active of cState.active) {
23930
        for (let active of cState.active) {
23293
            if (active.state == 1 /* State.Pending */ && !this.running.some(r => r.active.source == active.source))
23931
            if (active.isPending && !this.running.some(r => r.active.source == active.source))
23294
                this.startQuery(active);
23932
                this.startQuery(active);
23295
        }
23933
        }
-
 
23934
        if (this.running.length && cState.open && cState.open.disabled)
-
 
23935
            this.debounceAccept = setTimeout(() => this.accept(), this.view.state.facet(completionConfig).updateSyncTime);
23296
    }
23936
    }
23297
    startQuery(active) {
23937
    startQuery(active) {
23298
        let { state } = this.view, pos = cur(state);
23938
        let { state } = this.view, pos = cur(state);
23299
        let context = new CompletionContext(state, pos, active.explicitPos == pos);
23939
        let context = new CompletionContext(state, pos, active.explicit, this.view);
23300
        let pending = new RunningQuery(active, context);
23940
        let pending = new RunningQuery(active, context);
23301
        this.running.push(pending);
23941
        this.running.push(pending);
23302
        Promise.resolve(active.source(context)).then(result => {
23942
        Promise.resolve(active.source(context)).then(result => {
23303
            if (!pending.context.aborted) {
23943
            if (!pending.context.aborted) {
23304
                pending.done = result || null;
23944
                pending.done = result || null;
Línea 23321... Línea 23961...
23321
        var _a;
23961
        var _a;
23322
        if (this.debounceAccept > -1)
23962
        if (this.debounceAccept > -1)
23323
            clearTimeout(this.debounceAccept);
23963
            clearTimeout(this.debounceAccept);
23324
        this.debounceAccept = -1;
23964
        this.debounceAccept = -1;
23325
        let updated = [];
23965
        let updated = [];
23326
        let conf = this.view.state.facet(completionConfig);
23966
        let conf = this.view.state.facet(completionConfig), cState = this.view.state.field(completionState);
23327
        for (let i = 0; i < this.running.length; i++) {
23967
        for (let i = 0; i < this.running.length; i++) {
23328
            let query = this.running[i];
23968
            let query = this.running[i];
23329
            if (query.done === undefined)
23969
            if (query.done === undefined)
23330
                continue;
23970
                continue;
23331
            this.running.splice(i--, 1);
23971
            this.running.splice(i--, 1);
23332
            if (query.done) {
23972
            if (query.done) {
-
 
23973
                let pos = cur(query.updates.length ? query.updates[0].startState : this.view.state);
-
 
23974
                let limit = Math.min(pos, query.done.from + (query.active.explicit ? 0 : 1));
23333
                let active = new ActiveResult(query.active.source, query.active.explicitPos, query.done, query.done.from, (_a = query.done.to) !== null && _a !== void 0 ? _a : cur(query.updates.length ? query.updates[0].startState : this.view.state));
23975
                let active = new ActiveResult(query.active.source, query.active.explicit, limit, query.done, query.done.from, (_a = query.done.to) !== null && _a !== void 0 ? _a : pos);
23334
                // Replay the transactions that happened since the start of
23976
                // Replay the transactions that happened since the start of
23335
                // the request and see if that preserves the result
23977
                // the request and see if that preserves the result
23336
                for (let tr of query.updates)
23978
                for (let tr of query.updates)
23337
                    active = active.update(tr, conf);
23979
                    active = active.update(tr, conf);
23338
                if (active.hasResult()) {
23980
                if (active.hasResult()) {
23339
                    updated.push(active);
23981
                    updated.push(active);
23340
                    continue;
23982
                    continue;
23341
                }
23983
                }
23342
            }
23984
            }
23343
            let current = this.view.state.field(completionState).active.find(a => a.source == query.active.source);
23985
            let current = cState.active.find(a => a.source == query.active.source);
23344
            if (current && current.state == 1 /* State.Pending */) {
23986
            if (current && current.isPending) {
23345
                if (query.done == null) {
23987
                if (query.done == null) {
23346
                    // Explicitly failed. Should clear the pending status if it
23988
                    // Explicitly failed. Should clear the pending status if it
23347
                    // hasn't been re-set in the meantime.
23989
                    // hasn't been re-set in the meantime.
23348
                    let active = new ActiveSource(query.active.source, 0 /* State.Inactive */);
23990
                    let active = new ActiveSource(query.active.source, 0 /* State.Inactive */);
23349
                    for (let tr of query.updates)
23991
                    for (let tr of query.updates)
23350
                        active = active.update(tr, conf);
23992
                        active = active.update(tr, conf);
23351
                    if (active.state != 1 /* State.Pending */)
23993
                    if (!active.isPending)
23352
                        updated.push(active);
23994
                        updated.push(active);
23353
                }
23995
                }
23354
                else {
23996
                else {
23355
                    // Cleared by subsequent transactions. Restart.
23997
                    // Cleared by subsequent transactions. Restart.
23356
                    this.startQuery(current);
23998
                    this.startQuery(current);
23357
                }
23999
                }
23358
            }
24000
            }
23359
        }
24001
        }
23360
        if (updated.length)
24002
        if (updated.length || cState.open && cState.open.disabled)
23361
            this.view.dispatch({ effects: setActiveEffect.of(updated) });
24003
            this.view.dispatch({ effects: setActiveEffect.of(updated) });
23362
    }
24004
    }
23363
}, {
24005
}, {
23364
    eventHandlers: {
24006
    eventHandlers: {
23365
        blur(event) {
24007
        blur(event) {
Línea 23453... Línea 24095...
23453
    ".cm-tooltip.cm-completionInfo": {
24095
    ".cm-tooltip.cm-completionInfo": {
23454
        position: "absolute",
24096
        position: "absolute",
23455
        padding: "3px 9px",
24097
        padding: "3px 9px",
23456
        width: "max-content",
24098
        width: "max-content",
23457
        maxWidth: `${400 /* Info.Width */}px`,
24099
        maxWidth: `${400 /* Info.Width */}px`,
23458
        boxSizing: "border-box"
24100
        boxSizing: "border-box",
-
 
24101
        whiteSpace: "pre-line"
23459
    },
24102
    },
23460
    ".cm-completionInfo.cm-completionInfo-left": { right: "100%" },
24103
    ".cm-completionInfo.cm-completionInfo-left": { right: "100%" },
23461
    ".cm-completionInfo.cm-completionInfo-right": { left: "100%" },
24104
    ".cm-completionInfo.cm-completionInfo-right": { left: "100%" },
23462
    ".cm-completionInfo.cm-completionInfo-left-narrow": { right: `${30 /* Info.Margin */}px` },
24105
    ".cm-completionInfo.cm-completionInfo-left-narrow": { right: `${30 /* Info.Margin */}px` },
23463
    ".cm-completionInfo.cm-completionInfo-right-narrow": { left: `${30 /* Info.Margin */}px` },
24106
    ".cm-completionInfo.cm-completionInfo-right-narrow": { left: `${30 /* Info.Margin */}px` },
Línea 23566... Línea 24209...
23566
    }
24209
    }
23567
    static parse(template) {
24210
    static parse(template) {
23568
        let fields = [];
24211
        let fields = [];
23569
        let lines = [], positions = [], m;
24212
        let lines = [], positions = [], m;
23570
        for (let line of template.split(/\r\n?|\n/)) {
24213
        for (let line of template.split(/\r\n?|\n/)) {
23571
            while (m = /[#$]\{(?:(\d+)(?::([^}]*))?|([^}]*))\}/.exec(line)) {
24214
            while (m = /[#$]\{(?:(\d+)(?::([^}]*))?|((?:\\[{}]|[^}])*))\}/.exec(line)) {
23572
                let seq = m[1] ? +m[1] : null, name = m[2] || m[3] || "", found = -1;
24215
                let seq = m[1] ? +m[1] : null, rawName = m[2] || m[3] || "", found = -1;
-
 
24216
                let name = rawName.replace(/\\[{}]/g, m => m[1]);
23573
                for (let i = 0; i < fields.length; i++) {
24217
                for (let i = 0; i < fields.length; i++) {
23574
                    if (seq != null ? fields[i].seq == seq : name ? fields[i].name == name : false)
24218
                    if (seq != null ? fields[i].seq == seq : name ? fields[i].name == name : false)
23575
                        found = i;
24219
                        found = i;
23576
                }
24220
                }
23577
                if (found < 0) {
24221
                if (found < 0) {
Línea 23583... Línea 24227...
23583
                    for (let pos of positions)
24227
                    for (let pos of positions)
23584
                        if (pos.field >= found)
24228
                        if (pos.field >= found)
23585
                            pos.field++;
24229
                            pos.field++;
23586
                }
24230
                }
23587
                positions.push(new FieldPos(found, lines.length, m.index, m.index + name.length));
24231
                positions.push(new FieldPos(found, lines.length, m.index, m.index + name.length));
23588
                line = line.slice(0, m.index) + name + line.slice(m.index + m[0].length);
24232
                line = line.slice(0, m.index) + rawName + line.slice(m.index + m[0].length);
23589
            }
24233
            }
23590
            for (let esc; esc = /\\([{}])/.exec(line);) {
24234
            line = line.replace(/\\([{}])/g, (_, brace, index) => {
23591
                line = line.slice(0, esc.index) + esc[1] + line.slice(esc.index + esc[0].length);
-
 
23592
                for (let pos of positions)
24235
                for (let pos of positions)
23593
                    if (pos.line == lines.length && pos.from > esc.index) {
24236
                    if (pos.line == lines.length && pos.from > index) {
23594
                        pos.from--;
24237
                        pos.from--;
23595
                        pos.to--;
24238
                        pos.to--;
23596
                    }
24239
                    }
-
 
24240
                return brace;
23597
            }
24241
            });
23598
            lines.push(line);
24242
            lines.push(line);
23599
        }
24243
        }
23600
        return new Snippet(lines, positions);
24244
        return new Snippet(lines, positions);
23601
    }
24245
    }
23602
}
24246
}
Línea 23685... Línea 24329...
23685
*/
24329
*/
23686
function snippet(template) {
24330
function snippet(template) {
23687
    let snippet = Snippet.parse(template);
24331
    let snippet = Snippet.parse(template);
23688
    return (editor, completion, from, to) => {
24332
    return (editor, completion, from, to) => {
23689
        let { text, ranges } = snippet.instantiate(editor.state, from);
24333
        let { text, ranges } = snippet.instantiate(editor.state, from);
-
 
24334
        let { main } = editor.state.selection;
23690
        let spec = {
24335
        let spec = {
23691
            changes: { from, to, insert: Text.of(text) },
24336
            changes: { from, to: to == main.from ? main.to : to, insert: Text.of(text) },
23692
            scrollIntoView: true,
24337
            scrollIntoView: true,
23693
            annotations: completion ? [pickedCompletion.of(completion), Transaction.userEvent.of("input.complete")] : undefined
24338
            annotations: completion ? [pickedCompletion.of(completion), Transaction.userEvent.of("input.complete")] : undefined
23694
        };
24339
        };
23695
        if (ranges.length)
24340
        if (ranges.length)
23696
            spec.selection = fieldSelection(ranges, 0);
24341
            spec.selection = fieldSelection(ranges, 0);
Línea 23813... Línea 24458...
23813
that bracket.
24458
that bracket.
23814
*/
24459
*/
23815
function closeBrackets() {
24460
function closeBrackets() {
23816
    return [inputHandler, bracketState];
24461
    return [inputHandler, bracketState];
23817
}
24462
}
23818
const definedClosing = "()[]{}<>";
24463
const definedClosing = "()[]{}<>«»»«[]{}";
23819
function closing(ch) {
24464
function closing(ch) {
23820
    for (let i = 0; i < definedClosing.length; i += 2)
24465
    for (let i = 0; i < definedClosing.length; i += 2)
23821
        if (definedClosing.charCodeAt(i) == ch)
24466
        if (definedClosing.charCodeAt(i) == ch)
23822
            return definedClosing.charAt(i + 1);
24467
            return definedClosing.charAt(i + 1);
23823
    return fromCodePoint(ch < 128 ? ch : ch + 1);
24468
    return fromCodePoint(ch < 128 ? ch : ch + 1);
Línea 24035... Línea 24680...
24035
    ];
24680
    ];
24036
}
24681
}
24037
/**
24682
/**
24038
Basic keybindings for autocompletion.
24683
Basic keybindings for autocompletion.
Línea 24039... Línea 24684...
24039
 
24684
 
24040
 - Ctrl-Space: [`startCompletion`](https://codemirror.net/6/docs/ref/#autocomplete.startCompletion)
24685
 - Ctrl-Space (and Alt-\` on macOS): [`startCompletion`](https://codemirror.net/6/docs/ref/#autocomplete.startCompletion)
24041
 - Escape: [`closeCompletion`](https://codemirror.net/6/docs/ref/#autocomplete.closeCompletion)
24686
 - Escape: [`closeCompletion`](https://codemirror.net/6/docs/ref/#autocomplete.closeCompletion)
24042
 - ArrowDown: [`moveCompletionSelection`](https://codemirror.net/6/docs/ref/#autocomplete.moveCompletionSelection)`(true)`
24687
 - ArrowDown: [`moveCompletionSelection`](https://codemirror.net/6/docs/ref/#autocomplete.moveCompletionSelection)`(true)`
24043
 - ArrowUp: [`moveCompletionSelection`](https://codemirror.net/6/docs/ref/#autocomplete.moveCompletionSelection)`(false)`
24688
 - ArrowUp: [`moveCompletionSelection`](https://codemirror.net/6/docs/ref/#autocomplete.moveCompletionSelection)`(false)`
24044
 - PageDown: [`moveCompletionSelection`](https://codemirror.net/6/docs/ref/#autocomplete.moveCompletionSelection)`(true, "page")`
24689
 - PageDown: [`moveCompletionSelection`](https://codemirror.net/6/docs/ref/#autocomplete.moveCompletionSelection)`(true, "page")`
24045
 - PageDown: [`moveCompletionSelection`](https://codemirror.net/6/docs/ref/#autocomplete.moveCompletionSelection)`(true, "page")`
24690
 - PageDown: [`moveCompletionSelection`](https://codemirror.net/6/docs/ref/#autocomplete.moveCompletionSelection)`(true, "page")`
24046
 - Enter: [`acceptCompletion`](https://codemirror.net/6/docs/ref/#autocomplete.acceptCompletion)
24691
 - Enter: [`acceptCompletion`](https://codemirror.net/6/docs/ref/#autocomplete.acceptCompletion)
24047
*/
24692
*/
24048
const completionKeymap = [
24693
const completionKeymap = [
-
 
24694
    { key: "Ctrl-Space", run: startCompletion },
24049
    { key: "Ctrl-Space", run: startCompletion },
24695
    { mac: "Alt-`", run: startCompletion },
24050
    { key: "Escape", run: closeCompletion },
24696
    { key: "Escape", run: closeCompletion },
24051
    { key: "ArrowDown", run: /*@__PURE__*/moveCompletionSelection(true) },
24697
    { key: "ArrowDown", run: /*@__PURE__*/moveCompletionSelection(true) },
24052
    { key: "ArrowUp", run: /*@__PURE__*/moveCompletionSelection(false) },
24698
    { key: "ArrowUp", run: /*@__PURE__*/moveCompletionSelection(false) },
24053
    { key: "PageDown", run: /*@__PURE__*/moveCompletionSelection(true, "page") },
24699
    { key: "PageDown", run: /*@__PURE__*/moveCompletionSelection(true, "page") },
Línea 24073... Línea 24719...
24073
        // Filter the list of diagnostics for which to create markers
24719
        // Filter the list of diagnostics for which to create markers
24074
        let markedDiagnostics = diagnostics;
24720
        let markedDiagnostics = diagnostics;
24075
        let diagnosticFilter = state.facet(lintConfig).markerFilter;
24721
        let diagnosticFilter = state.facet(lintConfig).markerFilter;
24076
        if (diagnosticFilter)
24722
        if (diagnosticFilter)
24077
            markedDiagnostics = diagnosticFilter(markedDiagnostics, state);
24723
            markedDiagnostics = diagnosticFilter(markedDiagnostics, state);
-
 
24724
        let sorted = diagnostics.slice().sort((a, b) => a.from - b.from || a.to - b.to);
24078
        let ranges = Decoration.set(markedDiagnostics.map((d) => {
24725
        let deco = new RangeSetBuilder(), active = [], pos = 0;
-
 
24726
        for (let i = 0;;) {
-
 
24727
            let next = i == sorted.length ? null : sorted[i];
-
 
24728
            if (!next && !active.length)
-
 
24729
                break;
-
 
24730
            let from, to;
-
 
24731
            if (active.length) {
-
 
24732
                from = pos;
-
 
24733
                to = active.reduce((p, d) => Math.min(p, d.to), next && next.from > from ? next.from : 1e8);
-
 
24734
            }
-
 
24735
            else {
-
 
24736
                from = next.from;
-
 
24737
                to = next.to;
-
 
24738
                active.push(next);
-
 
24739
                i++;
-
 
24740
            }
-
 
24741
            while (i < sorted.length) {
-
 
24742
                let next = sorted[i];
24079
            // For zero-length ranges or ranges covering only a line break, create a widget
24743
                if (next.from == from && (next.to > next.from || next.to == from)) {
-
 
24744
                    active.push(next);
-
 
24745
                    i++;
-
 
24746
                    to = Math.min(next.to, to);
-
 
24747
                }
-
 
24748
                else {
-
 
24749
                    to = Math.min(next.from, to);
-
 
24750
                    break;
-
 
24751
                }
-
 
24752
            }
-
 
24753
            let sev = maxSeverity(active);
24080
            return d.from == d.to || (d.from == d.to - 1 && state.doc.lineAt(d.from).to == d.from)
24754
            if (active.some(d => d.from == d.to || (d.from == d.to - 1 && state.doc.lineAt(d.from).to == d.from))) {
24081
                ? Decoration.widget({
24755
                deco.add(from, from, Decoration.widget({
24082
                    widget: new DiagnosticWidget(d),
24756
                    widget: new DiagnosticWidget(sev),
24083
                    diagnostic: d
24757
                    diagnostics: active.slice()
24084
                }).range(d.from)
24758
                }));
-
 
24759
            }
-
 
24760
            else {
-
 
24761
                let markClass = active.reduce((c, d) => d.markClass ? c + " " + d.markClass : c, "");
24085
                : Decoration.mark({
24762
                deco.add(from, to, Decoration.mark({
24086
                    attributes: { class: "cm-lintRange cm-lintRange-" + d.severity + (d.markClass ? " " + d.markClass : "") },
24763
                    class: "cm-lintRange cm-lintRange-" + sev + markClass,
24087
                    diagnostic: d,
24764
                    diagnostics: active.slice(),
-
 
24765
                    inclusiveEnd: active.some(a => a.to > to)
-
 
24766
                }));
-
 
24767
            }
-
 
24768
            pos = to;
-
 
24769
            for (let i = 0; i < active.length; i++)
24088
                    inclusive: true
24770
                if (active[i].to <= pos)
24089
                }).range(d.from, d.to);
24771
                    active.splice(i--, 1);
24090
        }), true);
24772
        }
-
 
24773
        let set = deco.finish();
24091
        return new LintState(ranges, panel, findDiagnostic(ranges));
24774
        return new LintState(set, panel, findDiagnostic(set));
24092
    }
24775
    }
24093
}
24776
}
24094
function findDiagnostic(diagnostics, diagnostic = null, after = 0) {
24777
function findDiagnostic(diagnostics, diagnostic = null, after = 0) {
24095
    let found = null;
24778
    let found = null;
24096
    diagnostics.between(after, 1e9, (from, to, { spec }) => {
24779
    diagnostics.between(after, 1e9, (from, to, { spec }) => {
24097
        if (diagnostic && spec.diagnostic != diagnostic)
24780
        if (diagnostic && spec.diagnostics.indexOf(diagnostic) < 0)
24098
            return;
24781
            return;
-
 
24782
        if (!found)
24099
        found = new SelectedDiagnostic(from, to, spec.diagnostic);
24783
            found = new SelectedDiagnostic(from, to, diagnostic || spec.diagnostics[0]);
-
 
24784
        else if (spec.diagnostics.indexOf(found.diagnostic) < 0)
24100
        return false;
24785
            return false;
-
 
24786
        else
-
 
24787
            found = new SelectedDiagnostic(found.from, to, found.diagnostic);
24101
    });
24788
    });
24102
    return found;
24789
    return found;
24103
}
24790
}
24104
function hideTooltip(tr, tooltip) {
24791
function hideTooltip(tr, tooltip) {
-
 
24792
    let from = tooltip.pos, to = tooltip.end || from;
-
 
24793
    let result = tr.state.facet(lintConfig).hideOn(tr, from, to);
-
 
24794
    if (result != null)
-
 
24795
        return result;
24105
    let line = tr.startState.doc.lineAt(tooltip.pos);
24796
    let line = tr.startState.doc.lineAt(tooltip.pos);
24106
    return !!(tr.effects.some(e => e.is(setDiagnosticsEffect)) || tr.changes.touchesRange(line.from, line.to));
24797
    return !!(tr.effects.some(e => e.is(setDiagnosticsEffect)) || tr.changes.touchesRange(line.from, Math.max(line.to, to)));
24107
}
24798
}
24108
function maybeEnableLint(state, effects) {
24799
function maybeEnableLint(state, effects) {
24109
    return state.field(lintState, false) ? effects : effects.concat(StateEffect.appendConfig.of(lintExtensions));
24800
    return state.field(lintState, false) ? effects : effects.concat(StateEffect.appendConfig.of(lintExtensions));
24110
}
24801
}
24111
/**
24802
/**
Línea 24118... Línea 24809...
24118
const lintState = /*@__PURE__*/StateField.define({
24809
const lintState = /*@__PURE__*/StateField.define({
24119
    create() {
24810
    create() {
24120
        return new LintState(Decoration.none, null, null);
24811
        return new LintState(Decoration.none, null, null);
24121
    },
24812
    },
24122
    update(value, tr) {
24813
    update(value, tr) {
24123
        if (tr.docChanged) {
24814
        if (tr.docChanged && value.diagnostics.size) {
24124
            let mapped = value.diagnostics.map(tr.changes), selected = null;
24815
            let mapped = value.diagnostics.map(tr.changes), selected = null, panel = value.panel;
24125
            if (value.selected) {
24816
            if (value.selected) {
24126
                let selPos = tr.changes.mapPos(value.selected.from, 1);
24817
                let selPos = tr.changes.mapPos(value.selected.from, 1);
24127
                selected = findDiagnostic(mapped, value.selected.diagnostic, selPos) || findDiagnostic(mapped, null, selPos);
24818
                selected = findDiagnostic(mapped, value.selected.diagnostic, selPos) || findDiagnostic(mapped, null, selPos);
24128
            }
24819
            }
-
 
24820
            if (!mapped.size && panel && tr.state.facet(lintConfig).autoPanel)
-
 
24821
                panel = null;
24129
            value = new LintState(mapped, value.panel, selected);
24822
            value = new LintState(mapped, panel, selected);
24130
        }
24823
        }
24131
        for (let effect of tr.effects) {
24824
        for (let effect of tr.effects) {
24132
            if (effect.is(setDiagnosticsEffect)) {
24825
            if (effect.is(setDiagnosticsEffect)) {
-
 
24826
                let panel = !tr.state.facet(lintConfig).autoPanel ? value.panel : effect.value.length ? LintPanel.open : null;
24133
                value = LintState.init(effect.value, value.panel, tr.state);
24827
                value = LintState.init(effect.value, panel, tr.state);
24134
            }
24828
            }
24135
            else if (effect.is(togglePanel)) {
24829
            else if (effect.is(togglePanel)) {
24136
                value = new LintState(value.diagnostics, effect.value ? LintPanel.open : null, value.selected);
24830
                value = new LintState(value.diagnostics, effect.value ? LintPanel.open : null, value.selected);
24137
            }
24831
            }
24138
            else if (effect.is(movePanelSelection)) {
24832
            else if (effect.is(movePanelSelection)) {
Línea 24142... Línea 24836...
24142
        return value;
24836
        return value;
24143
    },
24837
    },
24144
    provide: f => [showPanel.from(f, val => val.panel),
24838
    provide: f => [showPanel.from(f, val => val.panel),
24145
        EditorView.decorations.from(f, s => s.diagnostics)]
24839
        EditorView.decorations.from(f, s => s.diagnostics)]
24146
});
24840
});
24147
const activeMark = /*@__PURE__*/Decoration.mark({ class: "cm-lintRange cm-lintRange-active", inclusive: true });
24841
const activeMark = /*@__PURE__*/Decoration.mark({ class: "cm-lintRange cm-lintRange-active" });
24148
function lintTooltip(view, pos, side) {
24842
function lintTooltip(view, pos, side) {
24149
    let { diagnostics } = view.state.field(lintState);
24843
    let { diagnostics } = view.state.field(lintState);
24150
    let found = [], stackStart = 2e8, stackEnd = 0;
24844
    let found, start = -1, end = -1;
24151
    diagnostics.between(pos - (side < 0 ? 1 : 0), pos + (side > 0 ? 1 : 0), (from, to, { spec }) => {
24845
    diagnostics.between(pos - (side < 0 ? 1 : 0), pos + (side > 0 ? 1 : 0), (from, to, { spec }) => {
24152
        if (pos >= from && pos <= to &&
24846
        if (pos >= from && pos <= to &&
24153
            (from == to || ((pos > from || side > 0) && (pos < to || side < 0)))) {
24847
            (from == to || ((pos > from || side > 0) && (pos < to || side < 0)))) {
24154
            found.push(spec.diagnostic);
24848
            found = spec.diagnostics;
24155
            stackStart = Math.min(from, stackStart);
24849
            start = from;
24156
            stackEnd = Math.max(to, stackEnd);
24850
            end = to;
-
 
24851
            return false;
24157
        }
24852
        }
24158
    });
24853
    });
24159
    let diagnosticFilter = view.state.facet(lintConfig).tooltipFilter;
24854
    let diagnosticFilter = view.state.facet(lintConfig).tooltipFilter;
24160
    if (diagnosticFilter)
24855
    if (found && diagnosticFilter)
24161
        found = diagnosticFilter(found, view.state);
24856
        found = diagnosticFilter(found, view.state);
24162
    if (!found.length)
24857
    if (!found)
24163
        return null;
24858
        return null;
24164
    return {
24859
    return {
24165
        pos: stackStart,
24860
        pos: start,
24166
        end: stackEnd,
24861
        end: end,
24167
        above: view.state.doc.lineAt(stackStart).to < stackEnd,
24862
        above: view.state.doc.lineAt(start).to < end,
24168
        create() {
24863
        create() {
24169
            return { dom: diagnosticsTooltip(view, found) };
24864
            return { dom: diagnosticsTooltip(view, found) };
24170
        }
24865
        }
24171
    };
24866
    };
24172
}
24867
}
Línea 24225... Línea 24920...
24225
    combine(input) {
24920
    combine(input) {
24226
        return Object.assign({ sources: input.map(i => i.source).filter(x => x != null) }, combineConfig(input.map(i => i.config), {
24921
        return Object.assign({ sources: input.map(i => i.source).filter(x => x != null) }, combineConfig(input.map(i => i.config), {
24227
            delay: 750,
24922
            delay: 750,
24228
            markerFilter: null,
24923
            markerFilter: null,
24229
            tooltipFilter: null,
24924
            tooltipFilter: null,
24230
            needsRefresh: null
24925
            needsRefresh: null,
-
 
24926
            hideOn: () => null,
24231
        }, {
24927
        }, {
24232
            needsRefresh: (a, b) => !a ? b : !b ? a : u => a(u) || b(u)
24928
            needsRefresh: (a, b) => !a ? b : !b ? a : u => a(u) || b(u)
24233
        }));
24929
        }));
24234
    }
24930
    }
24235
});
24931
});
Línea 24249... Línea 24945...
24249
    return assigned;
24945
    return assigned;
24250
}
24946
}
24251
function renderDiagnostic(view, diagnostic, inPanel) {
24947
function renderDiagnostic(view, diagnostic, inPanel) {
24252
    var _a;
24948
    var _a;
24253
    let keys = inPanel ? assignKeys(diagnostic.actions) : [];
24949
    let keys = inPanel ? assignKeys(diagnostic.actions) : [];
24254
    return crelt("li", { class: "cm-diagnostic cm-diagnostic-" + diagnostic.severity }, crelt("span", { class: "cm-diagnosticText" }, diagnostic.renderMessage ? diagnostic.renderMessage() : diagnostic.message), (_a = diagnostic.actions) === null || _a === void 0 ? void 0 : _a.map((action, i) => {
24950
    return crelt("li", { class: "cm-diagnostic cm-diagnostic-" + diagnostic.severity }, crelt("span", { class: "cm-diagnosticText" }, diagnostic.renderMessage ? diagnostic.renderMessage(view) : diagnostic.message), (_a = diagnostic.actions) === null || _a === void 0 ? void 0 : _a.map((action, i) => {
24255
        let fired = false, click = (e) => {
24951
        let fired = false, click = (e) => {
24256
            e.preventDefault();
24952
            e.preventDefault();
24257
            if (fired)
24953
            if (fired)
24258
                return;
24954
                return;
24259
            fired = true;
24955
            fired = true;
Línea 24273... Línea 24969...
24273
            "aria-label": ` Action: ${name}${keyIndex < 0 ? "" : ` (access key "${keys[i]})"`}.`
24969
            "aria-label": ` Action: ${name}${keyIndex < 0 ? "" : ` (access key "${keys[i]})"`}.`
24274
        }, nameElt);
24970
        }, nameElt);
24275
    }), diagnostic.source && crelt("div", { class: "cm-diagnosticSource" }, diagnostic.source));
24971
    }), diagnostic.source && crelt("div", { class: "cm-diagnosticSource" }, diagnostic.source));
24276
}
24972
}
24277
class DiagnosticWidget extends WidgetType {
24973
class DiagnosticWidget extends WidgetType {
24278
    constructor(diagnostic) {
24974
    constructor(sev) {
24279
        super();
24975
        super();
24280
        this.diagnostic = diagnostic;
24976
        this.sev = sev;
24281
    }
24977
    }
24282
    eq(other) { return other.diagnostic == this.diagnostic; }
24978
    eq(other) { return other.sev == this.sev; }
24283
    toDOM() {
24979
    toDOM() {
24284
        return crelt("span", { class: "cm-lintPoint cm-lintPoint-" + this.diagnostic.severity });
24980
        return crelt("span", { class: "cm-lintPoint cm-lintPoint-" + this.sev });
24285
    }
24981
    }
24286
}
24982
}
24287
class PanelItem {
24983
class PanelItem {
24288
    constructor(view, diagnostic) {
24984
    constructor(view, diagnostic) {
24289
        this.diagnostic = diagnostic;
24985
        this.diagnostic = diagnostic;
Línea 24362... Línea 25058...
24362
        return -1;
25058
        return -1;
24363
    }
25059
    }
24364
    update() {
25060
    update() {
24365
        let { diagnostics, selected } = this.view.state.field(lintState);
25061
        let { diagnostics, selected } = this.view.state.field(lintState);
24366
        let i = 0, needsSync = false, newSelectedItem = null;
25062
        let i = 0, needsSync = false, newSelectedItem = null;
-
 
25063
        let seen = new Set();
24367
        diagnostics.between(0, this.view.state.doc.length, (_start, _end, { spec }) => {
25064
        diagnostics.between(0, this.view.state.doc.length, (_start, _end, { spec }) => {
24368
            let found = -1, item;
-
 
24369
            for (let j = i; j < this.items.length; j++)
25065
            for (let diagnostic of spec.diagnostics) {
24370
                if (this.items[j].diagnostic == spec.diagnostic) {
25066
                if (seen.has(diagnostic))
24371
                    found = j;
25067
                    continue;
24372
                    break;
25068
                seen.add(diagnostic);
24373
                }
-
 
24374
            if (found < 0) {
25069
                let found = -1, item;
24375
                item = new PanelItem(this.view, spec.diagnostic);
25070
                for (let j = i; j < this.items.length; j++)
24376
                this.items.splice(i, 0, item);
25071
                    if (this.items[j].diagnostic == diagnostic) {
24377
                needsSync = true;
25072
                        found = j;
24378
            }
25073
                        break;
24379
            else {
25074
                    }
24380
                item = this.items[found];
25075
                if (found < 0) {
24381
                if (found > i) {
25076
                    item = new PanelItem(this.view, diagnostic);
24382
                    this.items.splice(i, found - i);
25077
                    this.items.splice(i, 0, item);
24383
                    needsSync = true;
25078
                    needsSync = true;
24384
                }
25079
                }
24385
            }
25080
                else {
24386
            if (selected && item.diagnostic == selected.diagnostic) {
25081
                    item = this.items[found];
24387
                if (!item.dom.hasAttribute("aria-selected")) {
25082
                    if (found > i) {
24388
                    item.dom.setAttribute("aria-selected", "true");
25083
                        this.items.splice(i, found - i);
24389
                    newSelectedItem = item;
25084
                        needsSync = true;
-
 
25085
                    }
24390
                }
25086
                }
-
 
25087
                if (selected && item.diagnostic == selected.diagnostic) {
-
 
25088
                    if (!item.dom.hasAttribute("aria-selected")) {
-
 
25089
                        item.dom.setAttribute("aria-selected", "true");
-
 
25090
                        newSelectedItem = item;
-
 
25091
                    }
-
 
25092
                }
-
 
25093
                else if (item.dom.hasAttribute("aria-selected")) {
-
 
25094
                    item.dom.removeAttribute("aria-selected");
-
 
25095
                }
-
 
25096
                i++;
24391
            }
25097
            }
24392
            else if (item.dom.hasAttribute("aria-selected")) {
-
 
24393
                item.dom.removeAttribute("aria-selected");
-
 
24394
            }
-
 
24395
            i++;
-
 
24396
        });
25098
        });
24397
        while (i < this.items.length && !(this.items.length == 1 && this.items[0].diagnostic.from < 0)) {
25099
        while (i < this.items.length && !(this.items.length == 1 && this.items[0].diagnostic.from < 0)) {
24398
            needsSync = true;
25100
            needsSync = true;
24399
            this.items.pop();
25101
            this.items.pop();
24400
        }
25102
        }
Línea 24556... Línea 25258...
24556
            padding: 0,
25258
            padding: 0,
24557
            margin: 0
25259
            margin: 0
24558
        }
25260
        }
24559
    }
25261
    }
24560
});
25262
});
-
 
25263
function severityWeight(sev) {
-
 
25264
    return sev == "error" ? 4 : sev == "warning" ? 3 : sev == "info" ? 2 : 1;
-
 
25265
}
-
 
25266
function maxSeverity(diagnostics) {
-
 
25267
    let sev = "hint", weight = 1;
-
 
25268
    for (let d of diagnostics) {
-
 
25269
        let w = severityWeight(d.severity);
-
 
25270
        if (w > weight) {
-
 
25271
            weight = w;
-
 
25272
            sev = d.severity;
-
 
25273
        }
-
 
25274
    }
-
 
25275
    return sev;
-
 
25276
}
24561
const lintExtensions = [
25277
const lintExtensions = [
24562
    lintState,
25278
    lintState,
24563
    /*@__PURE__*/EditorView.decorations.compute([lintState], state => {
25279
    /*@__PURE__*/EditorView.decorations.compute([lintState], state => {
24564
        let { selected, panel } = state.field(lintState);
25280
        let { selected, panel } = state.field(lintState);
24565
        return !selected || !panel || selected.from == selected.to ? Decoration.none : Decoration.set([
25281
        return !selected || !panel || selected.from == selected.to ? Decoration.none : Decoration.set([
Línea 24760... Línea 25476...
24760
    */
25476
    */
24761
    reduce(action) {
25477
    reduce(action) {
24762
        var _a;
25478
        var _a;
24763
        let depth = action >> 19 /* Action.ReduceDepthShift */, type = action & 65535 /* Action.ValueMask */;
25479
        let depth = action >> 19 /* Action.ReduceDepthShift */, type = action & 65535 /* Action.ValueMask */;
24764
        let { parser } = this.p;
25480
        let { parser } = this.p;
-
 
25481
        let lookaheadRecord = this.reducePos < this.pos - 25 /* Lookahead.Margin */;
-
 
25482
        if (lookaheadRecord)
-
 
25483
            this.setLookAhead(this.pos);
24765
        let dPrec = parser.dynamicPrecedence(type);
25484
        let dPrec = parser.dynamicPrecedence(type);
24766
        if (dPrec)
25485
        if (dPrec)
24767
            this.score += dPrec;
25486
            this.score += dPrec;
24768
        if (depth == 0) {
25487
        if (depth == 0) {
24769
            this.pushState(parser.getGoto(this.state, type, true), this.reducePos);
25488
            this.pushState(parser.getGoto(this.state, type, true), this.reducePos);
24770
            // Zero-depth reductions are a special case—they add stuff to
25489
            // Zero-depth reductions are a special case—they add stuff to
24771
            // the stack without popping anything off.
25490
            // the stack without popping anything off.
24772
            if (type < parser.minRepeatTerm)
25491
            if (type < parser.minRepeatTerm)
24773
                this.storeNode(type, this.reducePos, this.reducePos, 4, true);
25492
                this.storeNode(type, this.reducePos, this.reducePos, lookaheadRecord ? 8 : 4, true);
24774
            this.reduceContext(type, this.reducePos);
25493
            this.reduceContext(type, this.reducePos);
24775
            return;
25494
            return;
24776
        }
25495
        }
24777
        // Find the base index into `this.stack`, content after which will
25496
        // Find the base index into `this.stack`, content after which will
24778
        // be dropped. Note that with `StayFlag` reductions we need to
25497
        // be dropped. Note that with `StayFlag` reductions we need to
Línea 24814... Línea 25533...
24814
    }
25533
    }
24815
    // Shift a value into the buffer
25534
    // Shift a value into the buffer
24816
    /**
25535
    /**
24817
    @internal
25536
    @internal
24818
    */
25537
    */
24819
    storeNode(term, start, end, size = 4, isReduce = false) {
25538
    storeNode(term, start, end, size = 4, mustSink = false) {
24820
        if (term == 0 /* Term.Err */ &&
25539
        if (term == 0 /* Term.Err */ &&
24821
            (!this.stack.length || this.stack[this.stack.length - 1] < this.buffer.length + this.bufferBase)) {
25540
            (!this.stack.length || this.stack[this.stack.length - 1] < this.buffer.length + this.bufferBase)) {
24822
            // Try to omit/merge adjacent error nodes
25541
            // Try to omit/merge adjacent error nodes
24823
            let cur = this, top = this.buffer.length;
25542
            let cur = this, top = this.buffer.length;
24824
            if (top == 0 && cur.parent) {
25543
            if (top == 0 && cur.parent) {
Línea 24832... Línea 25551...
24832
                    cur.buffer[top - 2] = end;
25551
                    cur.buffer[top - 2] = end;
24833
                    return;
25552
                    return;
24834
                }
25553
                }
24835
            }
25554
            }
24836
        }
25555
        }
24837
        if (!isReduce || this.pos == end) { // Simple case, just append
25556
        if (!mustSink || this.pos == end) { // Simple case, just append
24838
            this.buffer.push(term, start, end, size);
25557
            this.buffer.push(term, start, end, size);
24839
        }
25558
        }
24840
        else { // There may be skipped nodes that have to be moved forward
25559
        else { // There may be skipped nodes that have to be moved forward
24841
            let index = this.buffer.length;
25560
            let index = this.buffer.length;
24842
            if (index > 0 && this.buffer[index - 4] != 0 /* Term.Err */)
25561
            if (index > 0 && this.buffer[index - 4] != 0 /* Term.Err */) {
24843
                while (index > 0 && this.buffer[index - 2] > end) {
-
 
24844
                    // Move this record forward
25562
                let mustMove = false;
24845
                    this.buffer[index] = this.buffer[index - 4];
-
 
24846
                    this.buffer[index + 1] = this.buffer[index - 3];
-
 
24847
                    this.buffer[index + 2] = this.buffer[index - 2];
25563
                for (let scan = index; scan > 0 && this.buffer[scan - 2] > end; scan -= 4) {
24848
                    this.buffer[index + 3] = this.buffer[index - 1];
25564
                    if (this.buffer[scan - 1] >= 0) {
24849
                    index -= 4;
25565
                        mustMove = true;
24850
                    if (size > 4)
25566
                        break;
24851
                        size -= 4;
25567
                    }
24852
                }
25568
                }
-
 
25569
                if (mustMove)
-
 
25570
                    while (index > 0 && this.buffer[index - 2] > end) {
-
 
25571
                        // Move this record forward
-
 
25572
                        this.buffer[index] = this.buffer[index - 4];
-
 
25573
                        this.buffer[index + 1] = this.buffer[index - 3];
-
 
25574
                        this.buffer[index + 2] = this.buffer[index - 2];
-
 
25575
                        this.buffer[index + 3] = this.buffer[index - 1];
-
 
25576
                        index -= 4;
-
 
25577
                        if (size > 4)
-
 
25578
                            size -= 4;
-
 
25579
                    }
-
 
25580
            }
24853
            this.buffer[index] = term;
25581
            this.buffer[index] = term;
24854
            this.buffer[index + 1] = start;
25582
            this.buffer[index + 1] = start;
24855
            this.buffer[index + 2] = end;
25583
            this.buffer[index + 2] = end;
24856
            this.buffer[index + 3] = size;
25584
            this.buffer[index + 3] = size;
24857
        }
25585
        }
Línea 25669... Línea 26397...
25669
    cursor.moveTo(pos);
26397
    cursor.moveTo(pos);
25670
    for (;;) {
26398
    for (;;) {
25671
        if (!(side < 0 ? cursor.childBefore(pos) : cursor.childAfter(pos)))
26399
        if (!(side < 0 ? cursor.childBefore(pos) : cursor.childAfter(pos)))
25672
            for (;;) {
26400
            for (;;) {
25673
                if ((side < 0 ? cursor.to < pos : cursor.from > pos) && !cursor.type.isError)
26401
                if ((side < 0 ? cursor.to < pos : cursor.from > pos) && !cursor.type.isError)
25674
                    return side < 0 ? Math.max(0, Math.min(cursor.to - 1, pos - 25 /* Safety.Margin */))
26402
                    return side < 0 ? Math.max(0, Math.min(cursor.to - 1, pos - 25 /* Lookahead.Margin */))
25675
                        : Math.min(tree.length, Math.max(cursor.from + 1, pos + 25 /* Safety.Margin */));
26403
                        : Math.min(tree.length, Math.max(cursor.from + 1, pos + 25 /* Lookahead.Margin */));
25676
                if (side < 0 ? cursor.prevSibling() : cursor.nextSibling())
26404
                if (side < 0 ? cursor.prevSibling() : cursor.nextSibling())
25677
                    break;
26405
                    break;
25678
                if (!cursor.parent())
26406
                if (!cursor.parent())
25679
                    return side < 0 ? 0 : tree.length;
26407
                    return side < 0 ? 0 : tree.length;
25680
            }
26408
            }
Línea 25788... Línea 26516...
25788
            if (tokenizer.contextual || token.start != stack.pos || token.mask != mask || token.context != context) {
26516
            if (tokenizer.contextual || token.start != stack.pos || token.mask != mask || token.context != context) {
25789
                this.updateCachedToken(token, tokenizer, stack);
26517
                this.updateCachedToken(token, tokenizer, stack);
25790
                token.mask = mask;
26518
                token.mask = mask;
25791
                token.context = context;
26519
                token.context = context;
25792
            }
26520
            }
25793
            if (token.lookAhead > token.end + 25 /* Safety.Margin */)
26521
            if (token.lookAhead > token.end + 25 /* Lookahead.Margin */)
25794
                lookAhead = Math.max(token.lookAhead, lookAhead);
26522
                lookAhead = Math.max(token.lookAhead, lookAhead);
25795
            if (token.value != 0 /* Term.Err */) {
26523
            if (token.value != 0 /* Term.Err */) {
25796
                let startIndex = actionIndex;
26524
                let startIndex = actionIndex;
25797
                if (token.extended > -1)
26525
                if (token.extended > -1)
25798
                    actionIndex = this.addActions(stack, token.extended, token.end, actionIndex);
26526
                    actionIndex = this.addActions(stack, token.extended, token.end, actionIndex);
Línea 26598... Línea 27326...
26598
    name += String.fromCharCode(next);
27326
    name += String.fromCharCode(next);
26599
    next = input.peek(++offset);
27327
    next = input.peek(++offset);
26600
  }
27328
  }
26601
  // Undefined to signal there's a <? or <!, null for just missing
27329
  // Undefined to signal there's a <? or <!, null for just missing
26602
  cachedInput$1 = input; cachedPos$1 = pos;
27330
  cachedInput$1 = input; cachedPos$1 = pos;
26603
  return cachedName$1 = name ? name.toLowerCase() : next == question || next == bang ? undefined : null
27331
  return cachedName$1 = name ? name.toLowerCase() : next == question$1 || next == bang ? undefined : null
26604
}
27332
}
Línea 26605... Línea 27333...
26605
 
27333
 
Línea 26606... Línea 27334...
26606
const lessThan = 60, greaterThan = 62, slash$1 = 47, question = 63, bang = 33, dash$1 = 45;
27334
const lessThan = 60, greaterThan = 62, slash$1 = 47, question$1 = 63, bang = 33, dash$1 = 45;
26607
 
27335
 
26608
function ElementContext$1(name, parent) {
27336
function ElementContext$1(name, parent) {
26609
  this.name = name;
-
 
26610
  this.parent = parent;
-
 
26611
  this.hash = parent ? parent.hash : 0;
27337
  this.name = name;
Línea 26612... Línea 27338...
26612
  for (let i = 0; i < name.length; i++) this.hash += (this.hash << 4) + name.charCodeAt(i) + (name.charCodeAt(i) << 8);
27338
  this.parent = parent;
Línea 26613... Línea 27339...
26613
}
27339
}
Línea 26625... Línea 27351...
26625
  reuse(context, node, stack, input) {
27351
  reuse(context, node, stack, input) {
26626
    let type = node.type.id;
27352
    let type = node.type.id;
26627
    return type == StartTag$1 || type == OpenTag$1
27353
    return type == StartTag$1 || type == OpenTag$1
26628
      ? new ElementContext$1(tagNameAfter$1(input, 1) || "", context) : context
27354
      ? new ElementContext$1(tagNameAfter$1(input, 1) || "", context) : context
26629
  },
27355
  },
26630
  hash(context) { return context ? context.hash : 0 },
-
 
26631
  strict: false
27356
  strict: false
26632
});
27357
});
Línea 26633... Línea 27358...
26633
 
27358
 
26634
const tagStart = new ExternalTokenizer((input, stack) => {
27359
const tagStart = new ExternalTokenizer((input, stack) => {
Línea 26828... Línea 27553...
26828
    if (id == TextareaText) return maybeNest(node, input, textarea)
27553
    if (id == TextareaText) return maybeNest(node, input, textarea)
Línea 26829... Línea 27554...
26829
 
27554
 
26830
    if (id == Element$2 && other.length) {
27555
    if (id == Element$2 && other.length) {
26831
      let n = node.node, open = n.firstChild, tagName = open && findTagName(open, input), attrs;
27556
      let n = node.node, open = n.firstChild, tagName = open && findTagName(open, input), attrs;
26832
      if (tagName) for (let tag of other) {
27557
      if (tagName) for (let tag of other) {
26833
        if (tag.tag == tagName && (!tag.attrs || tag.attrs(attrs || (attrs = getAttrs(n, input))))) {
27558
        if (tag.tag == tagName && (!tag.attrs || tag.attrs(attrs || (attrs = getAttrs(open, input))))) {
26834
          let close = n.lastChild;
27559
          let close = n.lastChild;
26835
          let to = close.type.id == CloseTag ? close.from : n.to;
27560
          let to = close.type.id == CloseTag ? close.from : n.to;
26836
          if (to > open.to)
27561
          if (to > open.to)
26837
            return {parser: tag.parser, overlay: [{from: open.to, to}]}
27562
            return {parser: tag.parser, overlay: [{from: open.to, to}]}
Línea 26859... Línea 27584...
26859
    return null
27584
    return null
26860
  })
27585
  })
26861
}
27586
}
Línea 26862... Línea 27587...
26862
 
27587
 
26863
// This file was generated by lezer-generator. You probably shouldn't edit it.
27588
// This file was generated by lezer-generator. You probably shouldn't edit it.
26864
const descendantOp = 99,
27589
const descendantOp = 100,
26865
  Unit = 1,
27590
  Unit = 1,
26866
  callee = 100,
27591
  callee = 101,
26867
  identifier$2 = 101,
27592
  identifier$2 = 102,
Línea 26868... Línea 27593...
26868
  VariableName = 2;
27593
  VariableName = 2;
26869
 
27594
 
Línea 26870... Línea 27595...
26870
/* Hand-written tokenizers for CSS tokens that can't be
27595
/* Hand-written tokenizers for CSS tokens that can't be
26871
   expressed by Lezer's built-in tokenizer. */
27596
   expressed by Lezer's built-in tokenizer. */
26872
 
27597
 
26873
const space$1 = [9, 10, 11, 12, 13, 32, 133, 160, 5760, 8192, 8193, 8194, 8195, 8196, 8197,
27598
const space$1 = [9, 10, 11, 12, 13, 32, 133, 160, 5760, 8192, 8193, 8194, 8195, 8196, 8197,
Línea 26874... Línea 27599...
26874
               8198, 8199, 8200, 8201, 8202, 8232, 8233, 8239, 8287, 12288];
27599
               8198, 8199, 8200, 8201, 8202, 8232, 8233, 8239, 8287, 12288];
Línea 26875... Línea 27600...
26875
const colon = 58, parenL = 40, underscore = 95, bracketL = 91, dash = 45, period = 46,
27600
const colon = 58, parenL = 40, underscore = 95, bracketL$1 = 91, dash = 45, period = 46,
Línea 26900... Línea 27625...
26900
 
27625
 
26901
const descendant = new ExternalTokenizer(input => {
27626
const descendant = new ExternalTokenizer(input => {
26902
  if (space$1.includes(input.peek(-1))) {
27627
  if (space$1.includes(input.peek(-1))) {
26903
    let {next} = input;
27628
    let {next} = input;
26904
    if (isAlpha(next) || next == underscore || next == hash || next == period ||
27629
    if (isAlpha(next) || next == underscore || next == hash || next == period ||
26905
        next == bracketL || next == colon && isAlpha(input.peek(1)) ||
27630
        next == bracketL$1 || next == colon && isAlpha(input.peek(1)) ||
26906
        next == dash || next == ampersand)
27631
        next == dash || next == ampersand)
26907
      input.acceptToken(descendantOp);
27632
      input.acceptToken(descendantOp);
26908
  }
27633
  }
Línea 26953... Línea 27678...
26953
  "[ ]": tags$1.squareBracket,
27678
  "[ ]": tags$1.squareBracket,
26954
  "{ }": tags$1.brace
27679
  "{ }": tags$1.brace
26955
});
27680
});
Línea 26956... Línea 27681...
26956
 
27681
 
26957
// This file was generated by lezer-generator. You probably shouldn't edit it.
27682
// This file was generated by lezer-generator. You probably shouldn't edit it.
26958
const spec_callee = {__proto__:null,lang:32, "nth-child":32, "nth-last-child":32, "nth-of-type":32, "nth-last-of-type":32, dir:32, "host-context":32, url:60, "url-prefix":60, domain:60, regexp:60, selector:138};
27683
const spec_callee = {__proto__:null,lang:34, "nth-child":34, "nth-last-child":34, "nth-of-type":34, "nth-last-of-type":34, dir:34, "host-context":34, url:62, "url-prefix":62, domain:62, regexp:62, selector:140};
26959
const spec_AtKeyword = {__proto__:null,"@import":118, "@media":142, "@charset":146, "@namespace":150, "@keyframes":156, "@supports":168};
27684
const spec_AtKeyword = {__proto__:null,"@import":120, "@media":144, "@charset":148, "@namespace":152, "@keyframes":158, "@supports":170};
26960
const spec_identifier$1 = {__proto__:null,not:132, only:132};
27685
const spec_identifier$1 = {__proto__:null,not:134, only:134};
26961
const parser$2 = LRParser.deserialize({
27686
const parser$2 = LRParser.deserialize({
26962
  version: 14,
27687
  version: 14,
26963
  states: ":^QYQ[OOO#_Q[OOP#fOWOOOOQP'#Cd'#CdOOQP'#Cc'#CcO#kQ[O'#CfO$_QXO'#CaO$fQ[O'#ChO$qQ[O'#DTO$vQ[O'#DWOOQP'#Em'#EmO${QdO'#DgO%jQ[O'#DtO${QdO'#DvO%{Q[O'#DxO&WQ[O'#D{O&`Q[O'#ERO&nQ[O'#ETOOQS'#El'#ElOOQS'#EW'#EWQYQ[OOO&uQXO'#CdO'jQWO'#DcO'oQWO'#EsO'zQ[O'#EsQOQWOOP(UO#tO'#C_POOO)C@[)C@[OOQP'#Cg'#CgOOQP,59Q,59QO#kQ[O,59QO(aQ[O'#E[O({QWO,58{O)TQ[O,59SO$qQ[O,59oO$vQ[O,59rO(aQ[O,59uO(aQ[O,59wO(aQ[O,59xO)`Q[O'#DbOOQS,58{,58{OOQP'#Ck'#CkOOQO'#DR'#DROOQP,59S,59SO)gQWO,59SO)lQWO,59SOOQP'#DV'#DVOOQP,59o,59oOOQO'#DX'#DXO)qQ`O,59rOOQS'#Cp'#CpO${QdO'#CqO)yQvO'#CsO+ZQtO,5:ROOQO'#Cx'#CxO)lQWO'#CwO+oQWO'#CyO+tQ[O'#DOOOQS'#Ep'#EpOOQO'#Dj'#DjO+|Q[O'#DqO,[QWO'#EtO&`Q[O'#DoO,jQWO'#DrOOQO'#Eu'#EuO)OQWO,5:`O,oQpO,5:bOOQS'#Dz'#DzO,wQWO,5:dO,|Q[O,5:dOOQO'#D}'#D}O-UQWO,5:gO-ZQWO,5:mO-cQWO,5:oOOQS-E8U-E8UO${QdO,59}O-kQ[O'#E^O-xQWO,5;_O-xQWO,5;_POOO'#EV'#EVP.TO#tO,58yPOOO,58y,58yOOQP1G.l1G.lO.zQXO,5:vOOQO-E8Y-E8YOOQS1G.g1G.gOOQP1G.n1G.nO)gQWO1G.nO)lQWO1G.nOOQP1G/Z1G/ZO/XQ`O1G/^O/rQXO1G/aO0YQXO1G/cO0pQXO1G/dO1WQWO,59|O1]Q[O'#DSO1dQdO'#CoOOQP1G/^1G/^O${QdO1G/^O1kQpO,59]OOQS,59_,59_O${QdO,59aO1sQWO1G/mOOQS,59c,59cO1xQ!bO,59eOOQS'#DP'#DPOOQS'#EY'#EYO2QQ[O,59jOOQS,59j,59jO2YQWO'#DjO2eQWO,5:VO2jQWO,5:]O&`Q[O,5:XO&`Q[O'#E_O2rQWO,5;`O2}QWO,5:ZO(aQ[O,5:^OOQS1G/z1G/zOOQS1G/|1G/|OOQS1G0O1G0OO3`QWO1G0OO3eQdO'#EOOOQS1G0R1G0ROOQS1G0X1G0XOOQS1G0Z1G0ZO3pQtO1G/iOOQO,5:x,5:xO4WQ[O,5:xOOQO-E8[-E8[O4eQWO1G0yPOOO-E8T-E8TPOOO1G.e1G.eOOQP7+$Y7+$YOOQP7+$x7+$xO${QdO7+$xOOQS1G/h1G/hO4pQXO'#ErO4wQWO,59nO4|QtO'#EXO5tQdO'#EoO6OQWO,59ZO6TQpO7+$xOOQS1G.w1G.wOOQS1G.{1G.{OOQS7+%X7+%XO6]QWO1G/POOQS-E8W-E8WOOQS1G/U1G/UO${QdO1G/qOOQO1G/w1G/wOOQO1G/s1G/sO6bQWO,5:yOOQO-E8]-E8]O6pQXO1G/xOOQS7+%j7+%jO6wQYO'#CsOOQO'#EQ'#EQO7SQ`O'#EPOOQO'#EP'#EPO7_QWO'#E`O7gQdO,5:jOOQS,5:j,5:jO7rQtO'#E]O${QdO'#E]O8sQdO7+%TOOQO7+%T7+%TOOQO1G0d1G0dO9WQpO<<HdO9`QWO,5;^OOQP1G/Y1G/YOOQS-E8V-E8VO${QdO'#EZO9hQWO,5;ZOOQT1G.u1G.uOOQP<<Hd<<HdOOQS7+$k7+$kO9pQdO7+%]OOQO7+%d7+%dOOQO,5:k,5:kO3hQdO'#EaO7_QWO,5:zOOQS,5:z,5:zOOQS-E8^-E8^OOQS1G0U1G0UO9wQtO,5:wOOQS-E8Z-E8ZOOQO<<Ho<<HoOOQPAN>OAN>OO:xQdO,5:uOOQO-E8X-E8XOOQO<<Hw<<HwOOQO,5:{,5:{OOQO-E8_-E8_OOQS1G0f1G0f",
27688
  states: ":jQYQ[OOO#_Q[OOP#fOWOOOOQP'#Cd'#CdOOQP'#Cc'#CcO#kQ[O'#CfO$_QXO'#CaO$fQ[O'#CiO$qQ[O'#DUO$vQ[O'#DXOOQP'#En'#EnO${QdO'#DhO%jQ[O'#DuO${QdO'#DwO%{Q[O'#DyO&WQ[O'#D|O&`Q[O'#ESO&nQ[O'#EUOOQS'#Em'#EmOOQS'#EX'#EXQYQ[OOO&uQXO'#CdO'jQWO'#DdO'oQWO'#EsO'zQ[O'#EsQOQWOOP(UO#tO'#C_POOO)C@])C@]OOQP'#Ch'#ChOOQP,59Q,59QO#kQ[O,59QO(aQ[O'#E]O({QWO,58{O)TQ[O,59TO$qQ[O,59pO$vQ[O,59sO(aQ[O,59vO(aQ[O,59xO(aQ[O,59yO)`Q[O'#DcOOQS,58{,58{OOQP'#Cl'#ClOOQO'#DS'#DSOOQP,59T,59TO)gQWO,59TO)lQWO,59TOOQP'#DW'#DWOOQP,59p,59pOOQO'#DY'#DYO)qQ`O,59sOOQS'#Cq'#CqO${QdO'#CrO)yQvO'#CtO+ZQtO,5:SOOQO'#Cy'#CyO)lQWO'#CxO+oQWO'#CzO+tQ[O'#DPOOQS'#Ep'#EpOOQO'#Dk'#DkO+|Q[O'#DrO,[QWO'#EtO&`Q[O'#DpO,jQWO'#DsOOQO'#Eu'#EuO)OQWO,5:aO,oQpO,5:cOOQS'#D{'#D{O,wQWO,5:eO,|Q[O,5:eOOQO'#EO'#EOO-UQWO,5:hO-ZQWO,5:nO-cQWO,5:pOOQS-E8V-E8VO-kQdO,5:OO-{Q[O'#E_O.YQWO,5;_O.YQWO,5;_POOO'#EW'#EWP.eO#tO,58yPOOO,58y,58yOOQP1G.l1G.lO/[QXO,5:wOOQO-E8Z-E8ZOOQS1G.g1G.gOOQP1G.o1G.oO)gQWO1G.oO)lQWO1G.oOOQP1G/[1G/[O/iQ`O1G/_O0SQXO1G/bO0jQXO1G/dO1QQXO1G/eO1hQWO,59}O1mQ[O'#DTO1tQdO'#CpOOQP1G/_1G/_O${QdO1G/_O1{QpO,59^OOQS,59`,59`O${QdO,59bO2TQWO1G/nOOQS,59d,59dO2YQ!bO,59fOOQS'#DQ'#DQOOQS'#EZ'#EZO2eQ[O,59kOOQS,59k,59kO2mQWO'#DkO2xQWO,5:WO2}QWO,5:^O&`Q[O,5:YO&`Q[O'#E`O3VQWO,5;`O3bQWO,5:[O(aQ[O,5:_OOQS1G/{1G/{OOQS1G/}1G/}OOQS1G0P1G0PO3sQWO1G0PO3xQdO'#EPOOQS1G0S1G0SOOQS1G0Y1G0YOOQS1G0[1G0[O4TQtO1G/jOOQO1G/j1G/jOOQO,5:y,5:yO4kQ[O,5:yOOQO-E8]-E8]O4xQWO1G0yPOOO-E8U-E8UPOOO1G.e1G.eOOQP7+$Z7+$ZOOQP7+$y7+$yO${QdO7+$yOOQS1G/i1G/iO5TQXO'#ErO5[QWO,59oO5aQtO'#EYO6XQdO'#EoO6cQWO,59[O6hQpO7+$yOOQS1G.x1G.xOOQS1G.|1G.|OOQS7+%Y7+%YOOQS1G/Q1G/QO6pQWO1G/QOOQS-E8X-E8XOOQS1G/V1G/VO${QdO1G/rOOQO1G/x1G/xOOQO1G/t1G/tO6uQWO,5:zOOQO-E8^-E8^O7TQXO1G/yOOQS7+%k7+%kO7[QYO'#CtOOQO'#ER'#ERO7gQ`O'#EQOOQO'#EQ'#EQO7rQWO'#EaO7zQdO,5:kOOQS,5:k,5:kO8VQtO'#E^O${QdO'#E^O9WQdO7+%UOOQO7+%U7+%UOOQO1G0e1G0eO9kQpO<<HeO9sQWO,5;^OOQP1G/Z1G/ZOOQS-E8W-E8WO${QdO'#E[O9{QWO,5;ZOOQT1G.v1G.vOOQP<<He<<HeOOQS7+$l7+$lO:TQdO7+%^OOQO7+%e7+%eOOQO,5:l,5:lO3{QdO'#EbO7rQWO,5:{OOQS,5:{,5:{OOQS-E8_-E8_OOQS1G0V1G0VO:[QtO,5:xOOQS-E8[-E8[OOQO<<Hp<<HpOOQPAN>PAN>PO;]QdO,5:vOOQO-E8Y-E8YOOQO<<Hx<<HxOOQO,5:|,5:|OOQO-E8`-E8`OOQS1G0g1G0g",
26964
  stateData: ";[~O#ZOS#[QQ~OUYOXYO]VO^VOqXOxWO![aO!]ZO!i[O!k]O!m^O!p_O!v`O#XRO#bTO~OQfOUYOXYO]VO^VOqXOxWO![aO!]ZO!i[O!k]O!m^O!p_O!v`O#XeO#bTO~O#U#gP~P!ZO#[jO~O#XlO~O]qO^qOqsOtoOxrO!OtO!RvO#VuO#bnO~O!TwO~P#pO`}O#WzO#XyO~O#X!OO~O#X!QO~OQ![Ob!TOf![Oh![On!YOq!ZO#W!WO#X!SO#e!UO~Ob!^O!d!`O!g!aO#X!]O!T#hP~Oh!fOn!YO#X!eO~Oh!hO#X!hO~Ob!^O!d!`O!g!aO#X!]O~O!Y#hP~P%jO]WX]!WX^WXqWXtWXxWX!OWX!RWX!TWX#VWX#bWX~O]!mO~O!Y!nO#U#gX!S#gX~O#U#gX!S#gX~P!ZO#]!qO#^!qO#_!sO~OUYOXYO]VO^VOqXOxWO#XRO#bTO~OtoO!TwO~O`!zO#WzO#XyO~O!S#gP~P!ZOb#RO~Ob#SO~Op#TO|#UO~OP#WObgXjgX!YgX!dgX!ggX#XgXagXQgXfgXhgXngXqgXtgX!XgX#UgX#WgX#egXpgX!SgX~Ob!^Oj#XO!d!`O!g!aO#X!]O!Y#hP~Ob#[O~Op#`O#X#]O~Ob!^O!d!`O!g!aO#X#aO~Ot#eO!b#dO!T#hX!Y#hX~Ob#hO~Oj#XO!Y#jO~O!Y#kO~Oh#lOn!YO~O!T#mO~O!TwO!b#dO~O!TwO!Y#pO~O!Y#QX#U#QX!S#QX~P!ZO!Y!nO#U#ga!S#ga~O#]!qO#^!qO#_#wO~O]qO^qOqsOxrO!OtO!RvO#VuO#bnO~Ot#Oa!T#Oaa#Oa~P.`Op#yO|#zO~O]qO^qOqsOxrO#bnO~Ot}i!O}i!R}i!T}i#V}ia}i~P/aOt!Pi!O!Pi!R!Pi!T!Pi#V!Pia!Pi~P/aOt!Qi!O!Qi!R!Qi!T!Qi#V!Qia!Qi~P/aO!S#{O~Oa#fP~P(aOa#cP~P${Oa$SOj#XO~O!Y$UO~Oh$VOo$VO~Op$XO#X#]O~O]!`Xa!^X!b!^X~O]$YO~Oa$ZO!b#dO~Ot#eO!T#ha!Y#ha~O!b#dOt!ca!T!ca!Y!caa!ca~O!Y$`O~O!S$gO#X$bO#e$aO~Oj#XOt$iO!X$kO!Y!Vi#U!Vi!S!Vi~P${O!Y#Qa#U#Qa!S#Qa~P!ZO!Y!nO#U#gi!S#gi~Oa#fX~P#pOa$oO~Oj#XOQ!{Xa!{Xb!{Xf!{Xh!{Xn!{Xq!{Xt!{X#W!{X#X!{X#e!{X~Ot$qOa#cX~P${Oa$sO~Oj#XOp$tO~Oa$uO~O!b#dOt#Ra!T#Ra!Y#Ra~Oa$wO~P.`OP#WOtgX!TgX~O#e$aOt!sX!T!sX~Ot$yO!TwO~O!S$}O#X$bO#e$aO~Oj#XOQ#PXb#PXf#PXh#PXn#PXq#PXt#PX!X#PX!Y#PX#U#PX#W#PX#X#PX#e#PX!S#PX~Ot$iO!X%QO!Y!Vq#U!Vq!S!Vq~P${Oj#XOp%RO~OtoOa#fa~Ot$qOa#ca~Oa%UO~P${Oj#XOQ#Pab#Paf#Pah#Pan#Paq#Pat#Pa!X#Pa!Y#Pa#U#Pa#W#Pa#X#Pa#e#Pa!S#Pa~Oa!}at!}a~P${O#Zo#[#ej!R#e~",
27689
  stateData: ";o~O#[OS#]QQ~OUYOXYOZTO^VO_VOrXOyWO!]aO!^ZO!j[O!l]O!n^O!q_O!w`O#YRO~OQfOUYOXYOZTO^VO_VOrXOyWO!]aO!^ZO!j[O!l]O!n^O!q_O!w`O#YeO~O#V#gP~P!ZO#]jO~O#YlO~OZnO^qO_qOrsOuoOyrO!PtO!SvO#WuO~O!UwO~P#pOa}O#XzO#YyO~O#Y!OO~O#Y!QO~OQ![Oc!TOg![Oi![Oo!YOr!ZO#X!WO#Y!SO#e!UO~Oc!^O!e!`O!h!aO#Y!]O!U#hP~Oi!fOo!YO#Y!eO~Oi!hO#Y!hO~Oc!^O!e!`O!h!aO#Y!]O~O!Z#hP~P%jOZWX^WX^!XX_WXrWXuWXyWX!PWX!SWX!UWX#WWX~O^!mO~O!Z!nO#V#gX!T#gX~O#V#gX!T#gX~P!ZO#^!qO#_!qO#`!sO~OUYOXYOZTO^VO_VOrXOyWO#YRO~OuoO!UwO~Oa!zO#XzO#YyO~O!T#gP~P!ZOc#RO~Oc#SO~Oq#TO}#UO~OP#WOchXkhX!ZhX!ehX!hhX#YhXbhXQhXghXihXohXrhXuhX!YhX#VhX#XhX#ehXqhX!ThX~Oc!^Ok#XO!e!`O!h!aO#Y!]O!Z#hP~Oc#[O~Oq#`O#Y#]O~Oc!^O!e!`O!h!aO#Y#aO~Ou#eO!c#dO!U#hX!Z#hX~Oc#hO~Ok#XO!Z#jO~O!Z#kO~Oi#lOo!YO~O!U#mO~O!UwO!c#dO~O!UwO!Z#pO~O!Y#rO!Z!Wa#V!Wa!T!Wa~P${O!Z#RX#V#RX!T#RX~P!ZO!Z!nO#V#ga!T#ga~O#^!qO#_!qO#`#xO~OZnO^qO_qOrsOyrO!PtO!SvO#WuO~Ou#Pa!U#Pab#Pa~P.pOq#zO}#{O~OZnO^qO_qOrsOyrO~Ou!Oi!P!Oi!S!Oi!U!Oi#W!Oib!Oi~P/qOu!Qi!P!Qi!S!Qi!U!Qi#W!Qib!Qi~P/qOu!Ri!P!Ri!S!Ri!U!Ri#W!Rib!Ri~P/qO!T#|O~Ob#fP~P(aOb#cP~P${Ob$TOk#XO~O!Z$VO~Ob$WOi$XOp$XO~Oq$ZO#Y#]O~O^!aXb!_X!c!_X~O^$[O~Ob$]O!c#dO~Ou#eO!U#ha!Z#ha~O!c#dOu!da!U!da!Z!dab!da~O!Z$bO~O!T$iO#Y$dO#e$cO~Ok#XOu$kO!Y$mO!Z!Wi#V!Wi!T!Wi~P${O!Z#Ra#V#Ra!T#Ra~P!ZO!Z!nO#V#gi!T#gi~Ob#fX~P#pOb$qO~Ok#XOQ!|Xb!|Xc!|Xg!|Xi!|Xo!|Xr!|Xu!|X#X!|X#Y!|X#e!|X~Ou$sOb#cX~P${Ob$uO~Ok#XOq$vO~Ob$wO~O!c#dOu#Sa!U#Sa!Z#Sa~Ob$yO~P.pOP#WOuhX!UhX~O#e$cOu!tX!U!tX~Ou${O!UwO~O!T%PO#Y$dO#e$cO~Ok#XOQ#QXc#QXg#QXi#QXo#QXr#QXu#QX!Y#QX!Z#QX#V#QX#X#QX#Y#QX#e#QX!T#QX~Ou$kO!Y%SO!Z!Wq#V!Wq!T!Wq~P${Ok#XOq%TO~OuoOb#fa~Ou$sOb#ca~Ob%WO~P${Ok#XOQ#Qac#Qag#Qai#Qao#Qar#Qau#Qa!Y#Qa!Z#Qa#V#Qa#X#Qa#Y#Qa#e#Qa!T#Qa~Ob#Oau#Oa~P${O#[p#]#ek!S#e~",
26965
  goto: "-g#jPPP#kP#nP#w$WP#w$g#wPP$mPPP$s$|$|P%`P$|P$|%z&^PPPP$|&vP&z'Q#wP'W#w'^P#wP#w#wPPP'd'y(WPP#nPP(_(_(i(_P(_P(_(_P#nP#nP#nP(l#nP(o(r(u(|#nP#nP)R)X)h)v)|*S*^*d*n*t*zPPPPPPPPPP+Q+ZP+v+yP,o,r,x-RRkQ_bOPdhw!n#skYOPdhotuvw!n#R#h#skSOPdhotuvw!n#R#h#sQmTR!tnQ{VR!xqQ!x}Q#Z!XR#x!zq![Z]!T!m#S#U#X#q#z$P$Y$i$j$q$v%Sp![Z]!T!m#S#U#X#q#z$P$Y$i$j$q$v%SU$d#m$f$yR$x$cq!XZ]!T!m#S#U#X#q#z$P$Y$i$j$q$v%Sp![Z]!T!m#S#U#X#q#z$P$Y$i$j$q$v%SQ!f^R#l!gT#^!Z#_Q|VR!yqQ!x|R#x!yQ!PWR!{rQ!RXR!|sQxUQ!wpQ#i!cQ#o!jQ#p!kQ${$eR%X$zSgPwQ!phQ#r!nR$l#sZfPhw!n#sa!b[`a!V!^!`#d#eR#b!^R!g^R!i_R#n!iS$e#m$fR%V$yV$c#m$f$yQ!rjR#v!rQdOShPwU!ldh#sR#s!nQ$P#SU$p$P$v%SQ$v$YR%S$qQ#_!ZR$W#_Q$r$PR%T$rQpUS!vp$nR$n#|Q$j#qR%P$jQ!ogS#t!o#uR#u!pQ#f!_R$^#fQ$f#mR$|$fQ$z$eR%W$z_cOPdhw!n#s^UOPdhw!n#sQ!uoQ!}tQ#OuQ#PvQ#|#RR$_#hR$Q#SQ!VZQ!d]Q#V!TQ#q!m[$O#S$P$Y$q$v%SQ$R#UQ$T#XS$h#q$jQ$m#zR%O$iR#}#RQiPR#QwQ!c[Q!kaR#Y!VU!_[a!VQ!j`Q#c!^Q#g!`Q$[#dR$]#e",
27690
  goto: "-g#jPPP#kP#nP#w$WP#wP$g#wPP$mPPP$s$|$|P%`P$|P$|%z&^PPPP$|&vP&z'Q#wP'W#w'^P#wP#w#wPPP'd'y(WPP#nPP(_(_(i(_P(_P(_(_P#nP#nP#nP(l#nP(o(r(u(|#nP#nP)R)X)h)v)|*S*^*d*n*t*zPPPPPPPPPP+Q+Z+v+yP,o,r,x-RRkQ_bOPdhw!n#tkYOPdhotuvw!n#R#h#tkSOPdhotuvw!n#R#h#tQmTR!tnQ{VR!xqQ!x}Q#Z!XR#y!zq![Z]!T!m#S#U#X#q#{$Q$[$k$l$s$x%Up![Z]!T!m#S#U#X#q#{$Q$[$k$l$s$x%UU$f#m$h${R$z$eq!XZ]!T!m#S#U#X#q#{$Q$[$k$l$s$x%Up![Z]!T!m#S#U#X#q#{$Q$[$k$l$s$x%UQ!f^R#l!gT#^!Z#_Q|VR!yqQ!x|R#y!yQ!PWR!{rQ!RXR!|sQxUQ!wpQ#i!cQ#o!jQ#p!kQ$}$gR%Z$|SgPwQ!phQ#s!nR$n#tZfPhw!n#ta!b[`a!V!^!`#d#eR#b!^R!g^R!i_R#n!iS$g#m$hR%X${V$e#m$h${Q!rjR#w!rQdOShPwU!ldh#tR#t!nQ$Q#SU$r$Q$x%UQ$x$[R%U$sQ#_!ZR$Y#_Q$t$QR%V$tQpUS!vp$pR$p#}Q$l#qR%R$lQ!ogS#u!o#vR#v!pQ#f!_R$`#fQ$h#mR%O$hQ$|$gR%Y$|_cOPdhw!n#t^UOPdhw!n#tQ!uoQ!}tQ#OuQ#PvQ#}#RR$a#hR$R#SQ!VZQ!d]Q#V!TQ#q!m[$P#S$Q$[$s$x%UQ$S#UQ$U#XS$j#q$lQ$o#{R%Q$kR$O#RQiPR#QwQ!c[Q!kaR#Y!VU!_[a!VQ!j`Q#c!^Q#g!`Q$^#dR$_#e",
26966
  nodeNames: "⚠ Unit VariableName Comment StyleSheet RuleSet UniversalSelector TagSelector TagName NestingSelector ClassSelector ClassName PseudoClassSelector : :: PseudoClassName PseudoClassName ) ( ArgList ValueName ParenthesizedValue ColorLiteral NumberLiteral StringLiteral BinaryExpression BinOp CallExpression Callee CallLiteral CallTag ParenthesizedContent ] [ LineNames LineName , PseudoClassName ArgList IdSelector # IdName AttributeSelector AttributeName MatchOp ChildSelector ChildOp DescendantSelector SiblingSelector SiblingOp } { Block Declaration PropertyName Important ; ImportStatement AtKeyword import KeywordQuery FeatureQuery FeatureName BinaryQuery LogicOp UnaryQuery UnaryQueryOp ParenthesizedQuery SelectorQuery selector MediaStatement media CharsetStatement charset NamespaceStatement namespace NamespaceName KeyframesStatement keyframes KeyframeName KeyframeList KeyframeSelector KeyframeRangeName SupportsStatement supports AtRule Styles",
27691
  nodeNames: "⚠ Unit VariableName Comment StyleSheet RuleSet UniversalSelector TagSelector TagName NestingSelector ClassSelector . ClassName PseudoClassSelector : :: PseudoClassName PseudoClassName ) ( ArgList ValueName ParenthesizedValue ColorLiteral NumberLiteral StringLiteral BinaryExpression BinOp CallExpression Callee CallLiteral CallTag ParenthesizedContent ] [ LineNames LineName , PseudoClassName ArgList IdSelector # IdName AttributeSelector AttributeName MatchOp ChildSelector ChildOp DescendantSelector SiblingSelector SiblingOp } { Block Declaration PropertyName Important ; ImportStatement AtKeyword import KeywordQuery FeatureQuery FeatureName BinaryQuery LogicOp UnaryQuery UnaryQueryOp ParenthesizedQuery SelectorQuery selector MediaStatement media CharsetStatement charset NamespaceStatement namespace NamespaceName KeyframesStatement keyframes KeyframeName KeyframeList KeyframeSelector KeyframeRangeName SupportsStatement supports AtRule Styles",
26967
  maxTerm: 117,
27692
  maxTerm: 117,
26968
  nodeProps: [
27693
  nodeProps: [
26969
    ["isolate", -2,3,24,""],
27694
    ["isolate", -2,3,25,""],
26970
    ["openedBy", 17,"(",32,"[",50,"{"],
27695
    ["openedBy", 18,"(",33,"[",51,"{"],
26971
    ["closedBy", 18,")",33,"]",51,"}"]
27696
    ["closedBy", 19,")",34,"]",52,"}"]
26972
  ],
27697
  ],
26973
  propSources: [cssHighlighting],
27698
  propSources: [cssHighlighting],
26974
  skippedNodes: [0,3,87],
27699
  skippedNodes: [0,3,88],
26975
  repeatNodeCount: 11,
27700
  repeatNodeCount: 11,
26976
  tokenData: "J^~R!^OX$}X^%u^p$}pq%uqr)Xrs.Rst/utu6duv$}vw7^wx7oxy9^yz9oz{9t{|:_|}?Q}!O?c!O!P@Q!P!Q@i!Q![Ab![!]B]!]!^CX!^!_$}!_!`Cj!`!aC{!a!b$}!b!cDw!c!}$}!}#OFa#O#P$}#P#QFr#Q#R6d#R#T$}#T#UGT#U#c$}#c#dHf#d#o$}#o#pH{#p#q6d#q#rI^#r#sIo#s#y$}#y#z%u#z$f$}$f$g%u$g#BY$}#BY#BZ%u#BZ$IS$}$IS$I_%u$I_$I|$}$I|$JO%u$JO$JT$}$JT$JU%u$JU$KV$}$KV$KW%u$KW&FU$}&FU&FV%u&FV;'S$};'S;=`JW<%lO$}`%QSOy%^z;'S%^;'S;=`%o<%lO%^`%cSo`Oy%^z;'S%^;'S;=`%o<%lO%^`%rP;=`<%l%^~%zh#Z~OX%^X^'f^p%^pq'fqy%^z#y%^#y#z'f#z$f%^$f$g'f$g#BY%^#BY#BZ'f#BZ$IS%^$IS$I_'f$I_$I|%^$I|$JO'f$JO$JT%^$JT$JU'f$JU$KV%^$KV$KW'f$KW&FU%^&FU&FV'f&FV;'S%^;'S;=`%o<%lO%^~'mh#Z~o`OX%^X^'f^p%^pq'fqy%^z#y%^#y#z'f#z$f%^$f$g'f$g#BY%^#BY#BZ'f#BZ$IS%^$IS$I_'f$I_$I|%^$I|$JO'f$JO$JT%^$JT$JU'f$JU$KV%^$KV$KW'f$KW&FU%^&FU&FV'f&FV;'S%^;'S;=`%o<%lO%^l)[UOy%^z#]%^#]#^)n#^;'S%^;'S;=`%o<%lO%^l)sUo`Oy%^z#a%^#a#b*V#b;'S%^;'S;=`%o<%lO%^l*[Uo`Oy%^z#d%^#d#e*n#e;'S%^;'S;=`%o<%lO%^l*sUo`Oy%^z#c%^#c#d+V#d;'S%^;'S;=`%o<%lO%^l+[Uo`Oy%^z#f%^#f#g+n#g;'S%^;'S;=`%o<%lO%^l+sUo`Oy%^z#h%^#h#i,V#i;'S%^;'S;=`%o<%lO%^l,[Uo`Oy%^z#T%^#T#U,n#U;'S%^;'S;=`%o<%lO%^l,sUo`Oy%^z#b%^#b#c-V#c;'S%^;'S;=`%o<%lO%^l-[Uo`Oy%^z#h%^#h#i-n#i;'S%^;'S;=`%o<%lO%^l-uS!X[o`Oy%^z;'S%^;'S;=`%o<%lO%^~.UWOY.RZr.Rrs.ns#O.R#O#P.s#P;'S.R;'S;=`/o<%lO.R~.sOh~~.vRO;'S.R;'S;=`/P;=`O.R~/SXOY.RZr.Rrs.ns#O.R#O#P.s#P;'S.R;'S;=`/o;=`<%l.R<%lO.R~/rP;=`<%l.Rn/zYxQOy%^z!Q%^!Q![0j![!c%^!c!i0j!i#T%^#T#Z0j#Z;'S%^;'S;=`%o<%lO%^l0oYo`Oy%^z!Q%^!Q![1_![!c%^!c!i1_!i#T%^#T#Z1_#Z;'S%^;'S;=`%o<%lO%^l1dYo`Oy%^z!Q%^!Q![2S![!c%^!c!i2S!i#T%^#T#Z2S#Z;'S%^;'S;=`%o<%lO%^l2ZYf[o`Oy%^z!Q%^!Q![2y![!c%^!c!i2y!i#T%^#T#Z2y#Z;'S%^;'S;=`%o<%lO%^l3QYf[o`Oy%^z!Q%^!Q![3p![!c%^!c!i3p!i#T%^#T#Z3p#Z;'S%^;'S;=`%o<%lO%^l3uYo`Oy%^z!Q%^!Q![4e![!c%^!c!i4e!i#T%^#T#Z4e#Z;'S%^;'S;=`%o<%lO%^l4lYf[o`Oy%^z!Q%^!Q![5[![!c%^!c!i5[!i#T%^#T#Z5[#Z;'S%^;'S;=`%o<%lO%^l5aYo`Oy%^z!Q%^!Q![6P![!c%^!c!i6P!i#T%^#T#Z6P#Z;'S%^;'S;=`%o<%lO%^l6WSf[o`Oy%^z;'S%^;'S;=`%o<%lO%^d6gUOy%^z!_%^!_!`6y!`;'S%^;'S;=`%o<%lO%^d7QS|So`Oy%^z;'S%^;'S;=`%o<%lO%^b7cSXQOy%^z;'S%^;'S;=`%o<%lO%^~7rWOY7oZw7owx.nx#O7o#O#P8[#P;'S7o;'S;=`9W<%lO7o~8_RO;'S7o;'S;=`8h;=`O7o~8kXOY7oZw7owx.nx#O7o#O#P8[#P;'S7o;'S;=`9W;=`<%l7o<%lO7o~9ZP;=`<%l7on9cSb^Oy%^z;'S%^;'S;=`%o<%lO%^~9tOa~n9{UUQjWOy%^z!_%^!_!`6y!`;'S%^;'S;=`%o<%lO%^n:fWjW!RQOy%^z!O%^!O!P;O!P!Q%^!Q![>T![;'S%^;'S;=`%o<%lO%^l;TUo`Oy%^z!Q%^!Q![;g![;'S%^;'S;=`%o<%lO%^l;nYo`#e[Oy%^z!Q%^!Q![;g![!g%^!g!h<^!h#X%^#X#Y<^#Y;'S%^;'S;=`%o<%lO%^l<cYo`Oy%^z{%^{|=R|}%^}!O=R!O!Q%^!Q![=j![;'S%^;'S;=`%o<%lO%^l=WUo`Oy%^z!Q%^!Q![=j![;'S%^;'S;=`%o<%lO%^l=qUo`#e[Oy%^z!Q%^!Q![=j![;'S%^;'S;=`%o<%lO%^l>[[o`#e[Oy%^z!O%^!O!P;g!P!Q%^!Q![>T![!g%^!g!h<^!h#X%^#X#Y<^#Y;'S%^;'S;=`%o<%lO%^n?VSt^Oy%^z;'S%^;'S;=`%o<%lO%^l?hWjWOy%^z!O%^!O!P;O!P!Q%^!Q![>T![;'S%^;'S;=`%o<%lO%^n@VU#bQOy%^z!Q%^!Q![;g![;'S%^;'S;=`%o<%lO%^~@nTjWOy%^z{@}{;'S%^;'S;=`%o<%lO%^~AUSo`#[~Oy%^z;'S%^;'S;=`%o<%lO%^lAg[#e[Oy%^z!O%^!O!P;g!P!Q%^!Q![>T![!g%^!g!h<^!h#X%^#X#Y<^#Y;'S%^;'S;=`%o<%lO%^bBbU]QOy%^z![%^![!]Bt!];'S%^;'S;=`%o<%lO%^bB{S^Qo`Oy%^z;'S%^;'S;=`%o<%lO%^nC^S!Y^Oy%^z;'S%^;'S;=`%o<%lO%^dCoS|SOy%^z;'S%^;'S;=`%o<%lO%^bDQU!OQOy%^z!`%^!`!aDd!a;'S%^;'S;=`%o<%lO%^bDkS!OQo`Oy%^z;'S%^;'S;=`%o<%lO%^bDzWOy%^z!c%^!c!}Ed!}#T%^#T#oEd#o;'S%^;'S;=`%o<%lO%^bEk[![Qo`Oy%^z}%^}!OEd!O!Q%^!Q![Ed![!c%^!c!}Ed!}#T%^#T#oEd#o;'S%^;'S;=`%o<%lO%^nFfSq^Oy%^z;'S%^;'S;=`%o<%lO%^nFwSp^Oy%^z;'S%^;'S;=`%o<%lO%^bGWUOy%^z#b%^#b#cGj#c;'S%^;'S;=`%o<%lO%^bGoUo`Oy%^z#W%^#W#XHR#X;'S%^;'S;=`%o<%lO%^bHYS!bQo`Oy%^z;'S%^;'S;=`%o<%lO%^bHiUOy%^z#f%^#f#gHR#g;'S%^;'S;=`%o<%lO%^fIQS!TUOy%^z;'S%^;'S;=`%o<%lO%^nIcS!S^Oy%^z;'S%^;'S;=`%o<%lO%^fItU!RQOy%^z!_%^!_!`6y!`;'S%^;'S;=`%o<%lO%^`JZP;=`<%l$}",
27701
  tokenData: "J^~R!^OX$}X^%u^p$}pq%uqr)Xrs.Rst/utu6duv$}vw7^wx7oxy9^yz9oz{9t{|:_|}?Q}!O?c!O!P@Q!P!Q@i!Q![Ab![!]B]!]!^CX!^!_$}!_!`Cj!`!aC{!a!b$}!b!cDw!c!}$}!}#OFa#O#P$}#P#QFr#Q#R6d#R#T$}#T#UGT#U#c$}#c#dHf#d#o$}#o#pH{#p#q6d#q#rI^#r#sIo#s#y$}#y#z%u#z$f$}$f$g%u$g#BY$}#BY#BZ%u#BZ$IS$}$IS$I_%u$I_$I|$}$I|$JO%u$JO$JT$}$JT$JU%u$JU$KV$}$KV$KW%u$KW&FU$}&FU&FV%u&FV;'S$};'S;=`JW<%lO$}`%QSOy%^z;'S%^;'S;=`%o<%lO%^`%cSp`Oy%^z;'S%^;'S;=`%o<%lO%^`%rP;=`<%l%^~%zh#[~OX%^X^'f^p%^pq'fqy%^z#y%^#y#z'f#z$f%^$f$g'f$g#BY%^#BY#BZ'f#BZ$IS%^$IS$I_'f$I_$I|%^$I|$JO'f$JO$JT%^$JT$JU'f$JU$KV%^$KV$KW'f$KW&FU%^&FU&FV'f&FV;'S%^;'S;=`%o<%lO%^~'mh#[~p`OX%^X^'f^p%^pq'fqy%^z#y%^#y#z'f#z$f%^$f$g'f$g#BY%^#BY#BZ'f#BZ$IS%^$IS$I_'f$I_$I|%^$I|$JO'f$JO$JT%^$JT$JU'f$JU$KV%^$KV$KW'f$KW&FU%^&FU&FV'f&FV;'S%^;'S;=`%o<%lO%^l)[UOy%^z#]%^#]#^)n#^;'S%^;'S;=`%o<%lO%^l)sUp`Oy%^z#a%^#a#b*V#b;'S%^;'S;=`%o<%lO%^l*[Up`Oy%^z#d%^#d#e*n#e;'S%^;'S;=`%o<%lO%^l*sUp`Oy%^z#c%^#c#d+V#d;'S%^;'S;=`%o<%lO%^l+[Up`Oy%^z#f%^#f#g+n#g;'S%^;'S;=`%o<%lO%^l+sUp`Oy%^z#h%^#h#i,V#i;'S%^;'S;=`%o<%lO%^l,[Up`Oy%^z#T%^#T#U,n#U;'S%^;'S;=`%o<%lO%^l,sUp`Oy%^z#b%^#b#c-V#c;'S%^;'S;=`%o<%lO%^l-[Up`Oy%^z#h%^#h#i-n#i;'S%^;'S;=`%o<%lO%^l-uS!Y[p`Oy%^z;'S%^;'S;=`%o<%lO%^~.UWOY.RZr.Rrs.ns#O.R#O#P.s#P;'S.R;'S;=`/o<%lO.R~.sOi~~.vRO;'S.R;'S;=`/P;=`O.R~/SXOY.RZr.Rrs.ns#O.R#O#P.s#P;'S.R;'S;=`/o;=`<%l.R<%lO.R~/rP;=`<%l.Rn/zYyQOy%^z!Q%^!Q![0j![!c%^!c!i0j!i#T%^#T#Z0j#Z;'S%^;'S;=`%o<%lO%^l0oYp`Oy%^z!Q%^!Q![1_![!c%^!c!i1_!i#T%^#T#Z1_#Z;'S%^;'S;=`%o<%lO%^l1dYp`Oy%^z!Q%^!Q![2S![!c%^!c!i2S!i#T%^#T#Z2S#Z;'S%^;'S;=`%o<%lO%^l2ZYg[p`Oy%^z!Q%^!Q![2y![!c%^!c!i2y!i#T%^#T#Z2y#Z;'S%^;'S;=`%o<%lO%^l3QYg[p`Oy%^z!Q%^!Q![3p![!c%^!c!i3p!i#T%^#T#Z3p#Z;'S%^;'S;=`%o<%lO%^l3uYp`Oy%^z!Q%^!Q![4e![!c%^!c!i4e!i#T%^#T#Z4e#Z;'S%^;'S;=`%o<%lO%^l4lYg[p`Oy%^z!Q%^!Q![5[![!c%^!c!i5[!i#T%^#T#Z5[#Z;'S%^;'S;=`%o<%lO%^l5aYp`Oy%^z!Q%^!Q![6P![!c%^!c!i6P!i#T%^#T#Z6P#Z;'S%^;'S;=`%o<%lO%^l6WSg[p`Oy%^z;'S%^;'S;=`%o<%lO%^d6gUOy%^z!_%^!_!`6y!`;'S%^;'S;=`%o<%lO%^d7QS}Sp`Oy%^z;'S%^;'S;=`%o<%lO%^b7cSXQOy%^z;'S%^;'S;=`%o<%lO%^~7rWOY7oZw7owx.nx#O7o#O#P8[#P;'S7o;'S;=`9W<%lO7o~8_RO;'S7o;'S;=`8h;=`O7o~8kXOY7oZw7owx.nx#O7o#O#P8[#P;'S7o;'S;=`9W;=`<%l7o<%lO7o~9ZP;=`<%l7on9cSc^Oy%^z;'S%^;'S;=`%o<%lO%^~9tOb~n9{UUQkWOy%^z!_%^!_!`6y!`;'S%^;'S;=`%o<%lO%^n:fWkW!SQOy%^z!O%^!O!P;O!P!Q%^!Q![>T![;'S%^;'S;=`%o<%lO%^l;TUp`Oy%^z!Q%^!Q![;g![;'S%^;'S;=`%o<%lO%^l;nYp`#e[Oy%^z!Q%^!Q![;g![!g%^!g!h<^!h#X%^#X#Y<^#Y;'S%^;'S;=`%o<%lO%^l<cYp`Oy%^z{%^{|=R|}%^}!O=R!O!Q%^!Q![=j![;'S%^;'S;=`%o<%lO%^l=WUp`Oy%^z!Q%^!Q![=j![;'S%^;'S;=`%o<%lO%^l=qUp`#e[Oy%^z!Q%^!Q![=j![;'S%^;'S;=`%o<%lO%^l>[[p`#e[Oy%^z!O%^!O!P;g!P!Q%^!Q![>T![!g%^!g!h<^!h#X%^#X#Y<^#Y;'S%^;'S;=`%o<%lO%^n?VSu^Oy%^z;'S%^;'S;=`%o<%lO%^l?hWkWOy%^z!O%^!O!P;O!P!Q%^!Q![>T![;'S%^;'S;=`%o<%lO%^n@VUZQOy%^z!Q%^!Q![;g![;'S%^;'S;=`%o<%lO%^~@nTkWOy%^z{@}{;'S%^;'S;=`%o<%lO%^~AUSp`#]~Oy%^z;'S%^;'S;=`%o<%lO%^lAg[#e[Oy%^z!O%^!O!P;g!P!Q%^!Q![>T![!g%^!g!h<^!h#X%^#X#Y<^#Y;'S%^;'S;=`%o<%lO%^bBbU^QOy%^z![%^![!]Bt!];'S%^;'S;=`%o<%lO%^bB{S_Qp`Oy%^z;'S%^;'S;=`%o<%lO%^nC^S!Z^Oy%^z;'S%^;'S;=`%o<%lO%^dCoS}SOy%^z;'S%^;'S;=`%o<%lO%^bDQU!PQOy%^z!`%^!`!aDd!a;'S%^;'S;=`%o<%lO%^bDkS!PQp`Oy%^z;'S%^;'S;=`%o<%lO%^bDzWOy%^z!c%^!c!}Ed!}#T%^#T#oEd#o;'S%^;'S;=`%o<%lO%^bEk[!]Qp`Oy%^z}%^}!OEd!O!Q%^!Q![Ed![!c%^!c!}Ed!}#T%^#T#oEd#o;'S%^;'S;=`%o<%lO%^nFfSr^Oy%^z;'S%^;'S;=`%o<%lO%^nFwSq^Oy%^z;'S%^;'S;=`%o<%lO%^bGWUOy%^z#b%^#b#cGj#c;'S%^;'S;=`%o<%lO%^bGoUp`Oy%^z#W%^#W#XHR#X;'S%^;'S;=`%o<%lO%^bHYS!cQp`Oy%^z;'S%^;'S;=`%o<%lO%^bHiUOy%^z#f%^#f#gHR#g;'S%^;'S;=`%o<%lO%^fIQS!UUOy%^z;'S%^;'S;=`%o<%lO%^nIcS!T^Oy%^z;'S%^;'S;=`%o<%lO%^fItU!SQOy%^z!_%^!_!`6y!`;'S%^;'S;=`%o<%lO%^`JZP;=`<%l$}",
26977
  tokenizers: [descendant, unitToken, identifiers, 1, 2, 3, 4, new LocalTokenGroup("m~RRYZ[z{a~~g~aO#^~~dP!P!Qg~lO#_~~", 28, 105)],
27702
  tokenizers: [descendant, unitToken, identifiers, 1, 2, 3, 4, new LocalTokenGroup("m~RRYZ[z{a~~g~aO#_~~dP!P!Qg~lO#`~~", 28, 106)],
26978
  topRules: {"StyleSheet":[0,4],"Styles":[1,86]},
27703
  topRules: {"StyleSheet":[0,4],"Styles":[1,87]},
26979
  specialized: [{term: 100, get: (value) => spec_callee[value] || -1},{term: 58, get: (value) => spec_AtKeyword[value] || -1},{term: 101, get: (value) => spec_identifier$1[value] || -1}],
27704
  specialized: [{term: 101, get: (value) => spec_callee[value] || -1},{term: 59, get: (value) => spec_AtKeyword[value] || -1},{term: 102, get: (value) => spec_identifier$1[value] || -1}],
26980
  tokenPrec: 1200
27705
  tokenPrec: 1219
Línea 26981... Línea 27706...
26981
});
27706
});
26982
 
27707
 
26983
let _properties = null;
27708
let _properties = null;
Línea 26993... Línea 27718...
26993
                        names.push(prop);
27718
                        names.push(prop);
26994
                        seen.add(prop);
27719
                        seen.add(prop);
26995
                    }
27720
                    }
26996
                }
27721
                }
26997
            }
27722
            }
26998
        _properties = names.sort().map(name => ({ type: "property", label: name }));
27723
        _properties = names.sort().map(name => ({ type: "property", label: name, apply: name + ": " }));
26999
    }
27724
    }
27000
    return _properties || [];
27725
    return _properties || [];
27001
}
27726
}
27002
const pseudoClasses = /*@__PURE__*/[
27727
const pseudoClasses = /*@__PURE__*/[
27003
    "active", "after", "any-link", "autofill", "backdrop", "before",
27728
    "active", "after", "any-link", "autofill", "backdrop", "before",
Línea 27104... Línea 27829...
27104
    "form", "header", "hgroup", "h1", "h2", "h3", "h4", "h5", "h6", "hr", "html", "i", "iframe",
27829
    "form", "header", "hgroup", "h1", "h2", "h3", "h4", "h5", "h6", "hr", "html", "i", "iframe",
27105
    "img", "input", "ins", "kbd", "label", "legend", "li", "main", "meter", "nav", "ol", "output",
27830
    "img", "input", "ins", "kbd", "label", "legend", "li", "main", "meter", "nav", "ol", "output",
27106
    "p", "pre", "ruby", "section", "select", "small", "source", "span", "strong", "sub", "summary",
27831
    "p", "pre", "ruby", "section", "select", "small", "source", "span", "strong", "sub", "summary",
27107
    "sup", "table", "tbody", "td", "template", "textarea", "tfoot", "th", "thead", "tr", "u", "ul"
27832
    "sup", "table", "tbody", "td", "template", "textarea", "tfoot", "th", "thead", "tr", "u", "ul"
27108
].map(name => ({ type: "type", label: name }));
27833
].map(name => ({ type: "type", label: name }));
-
 
27834
const atRules = /*@__PURE__*/[
-
 
27835
    "@charset", "@color-profile", "@container", "@counter-style", "@font-face", "@font-feature-values",
-
 
27836
    "@font-palette-values", "@import", "@keyframes", "@layer", "@media", "@namespace", "@page",
-
 
27837
    "@position-try", "@property", "@scope", "@starting-style", "@supports", "@view-transition"
-
 
27838
].map(label => ({ type: "keyword", label }));
27109
const identifier$1 = /^(\w[\w-]*|-\w[\w-]*|)$/, variable = /^-(-[\w-]*)?$/;
27839
const identifier$1 = /^(\w[\w-]*|-\w[\w-]*|)$/, variable = /^-(-[\w-]*)?$/;
27110
function isVarArg(node, doc) {
27840
function isVarArg(node, doc) {
27111
    var _a;
27841
    var _a;
27112
    if (node.name == "(" || node.type.isError)
27842
    if (node.name == "(" || node.type.isError)
27113
        node = node.parent || node;
27843
        node = node.parent || node;
Línea 27184... Línea 27914...
27184
        for (let { parent } = node; parent; parent = parent.parent)
27914
        for (let { parent } = node; parent; parent = parent.parent)
27185
            if (parent.name == "Block")
27915
            if (parent.name == "Block")
27186
                return { from: node.from, options: properties(), validFor: identifier$1 };
27916
                return { from: node.from, options: properties(), validFor: identifier$1 };
27187
        return { from: node.from, options: tags, validFor: identifier$1 };
27917
        return { from: node.from, options: tags, validFor: identifier$1 };
27188
    }
27918
    }
-
 
27919
    if (node.name == "AtKeyword")
-
 
27920
        return { from: node.from, options: atRules, validFor: identifier$1 };
27189
    if (!context.explicit)
27921
    if (!context.explicit)
27190
        return null;
27922
        return null;
27191
    let above = node.resolve(pos), before = above.childBefore(pos);
27923
    let above = node.resolve(pos), before = above.childBefore(pos);
27192
    if (before && before.name == ":" && above.name == "PseudoClassSelector")
27924
    if (before && before.name == ":" && above.name == "PseudoClassSelector")
27193
        return { from: pos, options: pseudoClasses, validFor: identifier$1 };
27925
        return { from: pos, options: pseudoClasses, validFor: identifier$1 };
Línea 27231... Línea 27963...
27231
function css() {
27963
function css() {
27232
    return new LanguageSupport(cssLanguage, cssLanguage.data.of({ autocomplete: cssCompletionSource }));
27964
    return new LanguageSupport(cssLanguage, cssLanguage.data.of({ autocomplete: cssCompletionSource }));
27233
}
27965
}
Línea 27234... Línea 27966...
27234
 
27966
 
27235
// This file was generated by lezer-generator. You probably shouldn't edit it.
27967
// This file was generated by lezer-generator. You probably shouldn't edit it.
-
 
27968
const noSemi = 314,
27236
const noSemi = 309,
27969
  noSemiType = 315,
27237
  incdec = 1,
27970
  incdec = 1,
-
 
27971
  incdecPrefix = 2,
27238
  incdecPrefix = 2,
27972
  questionDot = 3,
27239
  JSXStartTag = 3,
27973
  JSXStartTag = 4,
27240
  insertSemi = 310,
27974
  insertSemi = 316,
27241
  spaces = 312,
27975
  spaces = 318,
27242
  newline = 313,
27976
  newline = 319,
27243
  LineComment = 4,
27977
  LineComment = 5,
27244
  BlockComment = 5,
27978
  BlockComment = 6,
Línea 27245... Línea 27979...
27245
  Dialect_jsx = 0;
27979
  Dialect_jsx = 0;
27246
 
27980
 
Línea 27247... Línea 27981...
27247
/* Hand-written tokenizers for JavaScript tokens that can't be
27981
/* Hand-written tokenizers for JavaScript tokens that can't be
27248
   expressed by lezer's built-in tokenizer. */
27982
   expressed by lezer's built-in tokenizer. */
Línea 27249... Línea 27983...
27249
 
27983
 
-
 
27984
const space = [9, 10, 11, 12, 13, 32, 133, 160, 5760, 8192, 8193, 8194, 8195, 8196, 8197, 8198, 8199, 8200,
Línea 27250... Línea 27985...
27250
const space = [9, 10, 11, 12, 13, 32, 133, 160, 5760, 8192, 8193, 8194, 8195, 8196, 8197, 8198, 8199, 8200,
27985
               8201, 8202, 8232, 8233, 8239, 8287, 12288];
27251
               8201, 8202, 8232, 8233, 8239, 8287, 12288];
27986
 
27252
 
27987
const braceR = 125, semicolon = 59, slash = 47, star = 42, plus = 43, minus = 45, lt = 60, comma = 44,
27253
const braceR = 125, semicolon = 59, slash = 47, star = 42, plus = 43, minus = 45, lt = 60, comma = 44;
27988
      question = 63, dot = 46, bracketL = 91;
Línea 27272... Línea 28007...
27272
  if (next == slash && ((after = input.peek(1)) == slash || after == star)) return
28007
  if (next == slash && ((after = input.peek(1)) == slash || after == star)) return
27273
  if (next != braceR && next != semicolon && next != -1 && !stack.context)
28008
  if (next != braceR && next != semicolon && next != -1 && !stack.context)
27274
    input.acceptToken(noSemi);
28009
    input.acceptToken(noSemi);
27275
}, {contextual: true});
28010
}, {contextual: true});
Línea -... Línea 28011...
-
 
28011
 
-
 
28012
const noSemicolonType = new ExternalTokenizer((input, stack) => {
-
 
28013
  if (input.next == bracketL && !stack.context) input.acceptToken(noSemiType);
-
 
28014
}, {contextual: true});
27276
 
28015
 
27277
const incdecToken = new ExternalTokenizer((input, stack) => {
28016
const operatorToken = new ExternalTokenizer((input, stack) => {
27278
  let {next} = input;
28017
  let {next} = input;
27279
  if (next == plus || next == minus) {
28018
  if (next == plus || next == minus) {
27280
    input.advance();
28019
    input.advance();
27281
    if (next == input.next) {
28020
    if (next == input.next) {
27282
      input.advance();
28021
      input.advance();
27283
      let mayPostfix = !stack.context && stack.canShift(incdec);
28022
      let mayPostfix = !stack.context && stack.canShift(incdec);
27284
      input.acceptToken(mayPostfix ? incdec : incdecPrefix);
28023
      input.acceptToken(mayPostfix ? incdec : incdecPrefix);
-
 
28024
    }
-
 
28025
  } else if (next == question && input.peek(1) == dot) {
-
 
28026
    input.advance(); input.advance();
-
 
28027
    if (input.next < 48 || input.next > 57) // No digit after
27285
    }
28028
      input.acceptToken(questionDot);
27286
  }
28029
  }
Línea 27287... Línea 28030...
27287
}, {contextual: true});
28030
}, {contextual: true});
27288
 
28031
 
Línea 27338... Línea 28081...
27338
  PropertyName: tags$1.propertyName,
28081
  PropertyName: tags$1.propertyName,
27339
  PrivatePropertyName: tags$1.special(tags$1.propertyName),
28082
  PrivatePropertyName: tags$1.special(tags$1.propertyName),
27340
  "CallExpression/MemberExpression/PropertyName": tags$1.function(tags$1.propertyName),
28083
  "CallExpression/MemberExpression/PropertyName": tags$1.function(tags$1.propertyName),
27341
  "FunctionDeclaration/VariableDefinition": tags$1.function(tags$1.definition(tags$1.variableName)),
28084
  "FunctionDeclaration/VariableDefinition": tags$1.function(tags$1.definition(tags$1.variableName)),
27342
  "ClassDeclaration/VariableDefinition": tags$1.definition(tags$1.className),
28085
  "ClassDeclaration/VariableDefinition": tags$1.definition(tags$1.className),
-
 
28086
  "NewExpression/VariableName": tags$1.className,
27343
  PropertyDefinition: tags$1.definition(tags$1.propertyName),
28087
  PropertyDefinition: tags$1.definition(tags$1.propertyName),
27344
  PrivatePropertyDefinition: tags$1.definition(tags$1.special(tags$1.propertyName)),
28088
  PrivatePropertyDefinition: tags$1.definition(tags$1.special(tags$1.propertyName)),
27345
  UpdateOp: tags$1.updateOperator,
28089
  UpdateOp: tags$1.updateOperator,
27346
  "LineComment Hashbang": tags$1.lineComment,
28090
  "LineComment Hashbang": tags$1.lineComment,
27347
  BlockComment: tags$1.blockComment,
28091
  BlockComment: tags$1.blockComment,
Línea 27366... Línea 28110...
27366
 
28110
 
27367
  TypeName: tags$1.typeName,
28111
  TypeName: tags$1.typeName,
27368
  TypeDefinition: tags$1.definition(tags$1.typeName),
28112
  TypeDefinition: tags$1.definition(tags$1.typeName),
27369
  "type enum interface implements namespace module declare": tags$1.definitionKeyword,
28113
  "type enum interface implements namespace module declare": tags$1.definitionKeyword,
27370
  "abstract global Privacy readonly override": tags$1.modifier,
28114
  "abstract global Privacy readonly override": tags$1.modifier,
Línea 27371... Línea 28115...
27371
  "is keyof unique infer": tags$1.operatorKeyword,
28115
  "is keyof unique infer asserts": tags$1.operatorKeyword,
27372
 
28116
 
27373
  JSXAttributeValue: tags$1.attributeValue,
28117
  JSXAttributeValue: tags$1.attributeValue,
27374
  JSXText: tags$1.content,
28118
  JSXText: tags$1.content,
27375
  "JSXStartTag JSXStartCloseTag JSXSelfCloseEndTag JSXEndTag": tags$1.angleBracket,
28119
  "JSXStartTag JSXStartCloseTag JSXSelfCloseEndTag JSXEndTag": tags$1.angleBracket,
27376
  "JSXIdentifier JSXNameSpacedName": tags$1.tagName,
28120
  "JSXIdentifier JSXNameSpacedName": tags$1.tagName,
27377
  "JSXAttribute/JSXIdentifier JSXAttribute/JSXNameSpacedName": tags$1.attributeName,
28121
  "JSXAttribute/JSXIdentifier JSXAttribute/JSXNameSpacedName": tags$1.attributeName,
Línea 27378... Línea 28122...
27378
  "JSXBuiltin/JSXIdentifier": tags$1.standard(tags$1.tagName)
28122
  "JSXBuiltin/JSXIdentifier": tags$1.standard(tags$1.tagName)
27379
});
28123
});
27380
 
28124
 
27381
// This file was generated by lezer-generator. You probably shouldn't edit it.
28125
// This file was generated by lezer-generator. You probably shouldn't edit it.
27382
const spec_identifier = {__proto__:null,export:18, as:23, from:31, default:34, async:39, function:40, extends:52, this:56, true:64, false:64, null:76, void:80, typeof:84, super:102, new:136, delete:152, yield:161, await:165, class:170, public:227, private:227, protected:227, readonly:229, instanceof:248, satisfies:251, in:252, const:254, import:286, keyof:339, unique:343, infer:349, is:385, abstract:405, implements:407, type:409, let:412, var:414, using:417, interface:423, enum:427, namespace:433, module:435, declare:439, global:443, for:462, of:471, while:474, with:478, do:482, if:486, else:488, switch:492, case:498, try:504, catch:508, finally:512, return:516, throw:520, break:524, continue:528, debugger:532};
28126
const spec_identifier = {__proto__:null,export:20, as:25, from:33, default:36, async:41, function:42, const:52, extends:56, this:60, true:68, false:68, null:80, void:84, typeof:88, super:104, new:138, delete:150, yield:159, await:163, class:168, public:231, private:231, protected:231, readonly:233, instanceof:252, satisfies:255, in:256, import:290, keyof:347, unique:351, infer:357, asserts:393, is:395, abstract:415, implements:417, type:419, let:422, var:424, using:427, interface:433, enum:437, namespace:443, module:445, declare:449, global:453, for:472, of:481, while:484, with:488, do:492, if:496, else:498, switch:502, case:508, try:514, catch:518, finally:522, return:526, throw:530, break:534, continue:538, debugger:542};
27383
const spec_word = {__proto__:null,async:123, get:125, set:127, declare:187, public:189, private:189, protected:189, static:191, abstract:193, override:195, readonly:201, accessor:203, new:389};
28127
const spec_word = {__proto__:null,async:125, get:127, set:129, declare:191, public:193, private:193, protected:193, static:195, abstract:197, override:199, readonly:205, accessor:207, new:399};
27384
const spec_LessThan = {__proto__:null,"<":143};
28128
const spec_LessThan = {__proto__:null,"<":189};
27385
const parser$1 = LRParser.deserialize({
28129
const parser$1 = LRParser.deserialize({
27386
  version: 14,
28130
  version: 14,
27387
  states: "$=WO%TQ^OOO%[Q^OOO'_Q`OOP(lOWOOO*zQ08SO'#ChO+RO!bO'#CiO+aO#tO'#CiO+oO?MpO'#D^O.QQ^O'#DdO.bQ^O'#DoO%[Q^O'#DyO0fQ^O'#EROOQ07b'#EZ'#EZO1PQWO'#EWOOQO'#El'#ElOOQO'#Ie'#IeO1XQWO'#GmO1dQWO'#EkO1iQWO'#EkO3kQ08SO'#JiO6[Q08SO'#JjO6xQWO'#FZO6}Q&jO'#FqOOQ07b'#Fc'#FcO7YO,YO'#FcO7hQ7[O'#FxO9UQWO'#FwOOQ07b'#Jj'#JjOOQ07`'#Ji'#JiO9ZQWO'#GqOOQU'#KV'#KVO9fQWO'#IRO9kQ07hO'#ISOOQU'#JW'#JWOOQU'#IW'#IWQ`Q^OOO`Q^OOO%[Q^O'#DqO9sQ^O'#D}O9zQ^O'#EPO9aQWO'#GmO:RQ7[O'#CnO:aQWO'#EjO:lQWO'#EuO:qQ7[O'#FbO;`QWO'#GmOOQO'#KW'#KWO;eQWO'#KWO;sQWO'#GuO;sQWO'#GvO;sQWO'#GxO9aQWO'#G{O<jQWO'#HOO>RQWO'#CdO>cQWO'#H[O>kQWO'#HbO>kQWO'#HdO`Q^O'#HfO>kQWO'#HhO>kQWO'#HkO>pQWO'#HqO>uQ07iO'#HwO%[Q^O'#HyO?QQ07iO'#H{O?]Q07iO'#H}O9kQ07hO'#IPO?hQ08SO'#ChO@jQ`O'#DiQOQWOOO%[Q^O'#EPOAQQWO'#ESO:RQ7[O'#EjOA]QWO'#EjOAhQpO'#FbOOQU'#Cf'#CfOOQ07`'#Dn'#DnOOQ07`'#Jm'#JmO%[Q^O'#JmOOQO'#Jq'#JqOOQO'#Ib'#IbOBhQ`O'#EcOOQ07`'#Eb'#EbOOQ07`'#Jt'#JtOCdQ07pO'#EcOCnQ`O'#EVOOQO'#Jp'#JpODSQ`O'#JqOEaQ`O'#EVOCnQ`O'#EcPEnO!0LbO'#CaPOOO)CDu)CDuOOOO'#IX'#IXOEyO!bO,59TOOQ07b,59T,59TOOOO'#IY'#IYOFXO#tO,59TO%[Q^O'#D`OOOO'#I['#I[OFgO?MpO,59xOOQ07b,59x,59xOFuQ^O'#I]OGYQWO'#JkOI[QrO'#JkO+}Q^O'#JkOIcQWO,5:OOIyQWO'#ElOJWQWO'#JzOJcQWO'#JyOJcQWO'#JyOJkQWO,5;YOJpQWO'#JxOOQ07f,5:Z,5:ZOJwQ^O,5:ZOLxQ08SO,5:eOMiQWO,5:mONSQ07hO'#JwONZQWO'#JvO9ZQWO'#JvONoQWO'#JvONwQWO,5;XON|QWO'#JvO!#UQrO'#JjOOQ07b'#Ch'#ChO%[Q^O'#ERO!#tQpO,5:rOOQO'#Jr'#JrOOQO-E<c-E<cO9aQWO,5=XO!$[QWO,5=XO!$aQ^O,5;VO!&dQ7[O'#EgO!'}QWO,5;VO!)mQ7[O'#DsO!)tQ^O'#DxO!*OQ`O,5;`O!*WQ`O,5;`O%[Q^O,5;`OOQU'#FR'#FROOQU'#FT'#FTO%[Q^O,5;aO%[Q^O,5;aO%[Q^O,5;aO%[Q^O,5;aO%[Q^O,5;aO%[Q^O,5;aO%[Q^O,5;aO%[Q^O,5;aO%[Q^O,5;aO%[Q^O,5;aO%[Q^O,5;aOOQU'#FX'#FXO!*fQ^O,5;rOOQ07b,5;w,5;wOOQ07b,5;x,5;xO!,iQWO,5;xOOQ07b,5;y,5;yO%[Q^O'#IiO!,qQ07hO,5<eO!&dQ7[O,5;aO!-`Q7[O,5;aO%[Q^O,5;uO!-gQ&jO'#FgO!.dQ&jO'#KOO!.OQ&jO'#KOO!.kQ&jO'#KOOOQO'#KO'#KOO!/PQ&jO,5<POOOS,5<],5<]O!/bQ^O'#FsOOOS'#Ih'#IhO7YO,YO,5;}O!/iQ&jO'#FuOOQ07b,5;},5;}O!0YQMhO'#CuOOQ07b'#Cy'#CyO!0mQWO'#CyO!0rO?MpO'#C}O!1`Q7[O,5<bO!1gQWO,5<dO!3SQ!LQO'#GSO!3aQWO'#GTO!3fQWO'#GTO!5UQ!LQO'#GXO!6QQ`O'#G]OOQO'#Gh'#GhO!(SQ7[O'#GgOOQO'#Gj'#GjO!(SQ7[O'#GiO!6sQMhO'#JdOOQ07b'#Jd'#JdO!6}QWO'#JcO!7]QWO'#JbO!7eQWO'#CtOOQ07b'#Cw'#CwOOQ07b'#DR'#DROOQ07b'#DT'#DTO1SQWO'#DVO!(SQ7[O'#FzO!(SQ7[O'#F|O!7mQWO'#GOO!7rQWO'#GPO!3fQWO'#GVO!(SQ7[O'#G[O!7wQWO'#EmO!8fQWO,5<cOOQ07`'#Cq'#CqO!8nQWO'#EnO!9hQ`O'#EoOOQ07`'#Jx'#JxO!9oQ07hO'#KXO9kQ07hO,5=]O`Q^O,5>mOOQU'#J`'#J`OOQU,5>n,5>nOOQU-E<U-E<UO!;qQ08SO,5:]O!>_Q08SO,5:iO%[Q^O,5:iO!@xQ08SO,5:kOOQO,5@r,5@rO!AiQ7[O,5=XO!AwQ07hO'#JaO9UQWO'#JaO!BYQ07hO,59YO!BeQ`O,59YO!BmQ7[O,59YO:RQ7[O,59YO!BxQWO,5;VO!CQQWO'#HZO!CfQWO'#K[O%[Q^O,5;zO!9cQ`O,5;|O!CnQWO,5=tO!CsQWO,5=tO!CxQWO,5=tO9kQ07hO,5=tO;sQWO,5=dOOQO'#Cu'#CuO!DWQ`O,5=aO!D`Q7[O,5=bO!DkQWO,5=dO!DpQpO,5=gO!DxQWO'#KWO>pQWO'#HQO9aQWO'#HSO!D}QWO'#HSO:RQ7[O'#HUO!ESQWO'#HUOOQU,5=j,5=jO!EXQWO'#HVO!EjQWO'#CnO!EoQWO,59OO!EyQWO,59OO!HOQ^O,59OOOQU,59O,59OO!H`Q07hO,59OO%[Q^O,59OO!JkQ^O'#H^OOQU'#H_'#H_OOQU'#H`'#H`O`Q^O,5=vO!KRQWO,5=vO`Q^O,5=|O`Q^O,5>OO!KWQWO,5>QO`Q^O,5>SO!K]QWO,5>VO!KbQ^O,5>]OOQU,5>c,5>cO%[Q^O,5>cO9kQ07hO,5>eOOQU,5>g,5>gO# lQWO,5>gOOQU,5>i,5>iO# lQWO,5>iOOQU,5>k,5>kO#!YQ`O'#D[O%[Q^O'#JmO#!dQ`O'#JmO##RQ`O'#DjO##dQ`O'#DjO#%uQ^O'#DjO#%|QWO'#JlO#&UQWO,5:TO#&ZQWO'#EpO#&iQWO'#J{O#&qQWO,5;ZO#&vQ`O'#DjO#'TQ`O'#EUOOQ07b,5:n,5:nO%[Q^O,5:nO#'[QWO,5:nO>pQWO,5;UO!BeQ`O,5;UO!BmQ7[O,5;UO:RQ7[O,5;UO#'dQWO,5@XO#'iQ$ISO,5:rOOQO-E<`-E<`O#(oQ07pO,5:}OCnQ`O,5:qO#(yQ`O,5:qOCnQ`O,5:}O!BYQ07hO,5:qOOQ07`'#Ef'#EfOOQO,5:},5:}O%[Q^O,5:}O#)WQ07hO,5:}O#)cQ07hO,5:}O!BeQ`O,5:qOOQO,5;T,5;TO#)qQ07hO,5:}POOO'#IV'#IVP#*VO!0LbO,58{POOO,58{,58{OOOO-E<V-E<VOOQ07b1G.o1G.oOOOO-E<W-E<WO#*bQpO,59zOOOO-E<Y-E<YOOQ07b1G/d1G/dO#*gQrO,5>wO+}Q^O,5>wOOQO,5>},5>}O#*qQ^O'#I]OOQO-E<Z-E<ZO#+OQWO,5@VO#+WQrO,5@VO#+_QWO,5@eOOQ07b1G/j1G/jO%[Q^O,5@fO#+gQWO'#IcOOQO-E<a-E<aO#+_QWO,5@eOOQ07`1G0t1G0tOOQ07f1G/u1G/uOOQ07f1G0X1G0XO%[Q^O,5@cO#+{Q07hO,5@cO#,^Q07hO,5@cO#,eQWO,5@bO9ZQWO,5@bO#,mQWO,5@bO#,{QWO'#IfO#,eQWO,5@bOOQ07`1G0s1G0sO!*OQ`O,5:tO!*ZQ`O,5:tOOQO,5:v,5:vO#-mQWO,5:vO#-uQ7[O1G2sO9aQWO1G2sOOQ07b1G0q1G0qO#.TQ08SO1G0qO#/YQ08QO,5;ROOQ07b'#GR'#GRO#/vQ08SO'#JdO!$aQ^O1G0qO#2OQ7[O'#JnO#2YQWO,5:_O#2_QrO'#JoO%[Q^O'#JoO#2iQWO,5:dOOQ07b'#D['#D[OOQ07b1G0z1G0zO%[Q^O1G0zOOQ07b1G1d1G1dO#2nQWO1G0zO#5VQ08SO1G0{O#5^Q08SO1G0{O#7wQ08SO1G0{O#8OQ08SO1G0{O#:YQ08SO1G0{O#:pQ08SO1G0{O#=jQ08SO1G0{O#=qQ08SO1G0{O#@UQ08SO1G0{O#@cQ08SO1G0{O#BaQ08SO1G0{O#EaQ(CYO'#ChO#G_Q(CYO1G1^O#GfQ(CYO'#JjO!,lQWO1G1dO#GvQ08SO,5?TOOQ07`-E<g-E<gO#HjQ08SO1G0{OOQ07b1G0{1G0{O#JuQ08SO1G1aO#KiQ&jO,5<TO#KqQ&jO,5<UO#KyQ&jO'#FlO#LbQWO'#FkOOQO'#KP'#KPOOQO'#Ig'#IgO#LgQ&jO1G1kOOQ07b1G1k1G1kOOOS1G1v1G1vO#LxQ(CYO'#JiO#MSQWO,5<_O!*fQ^O,5<_OOOS-E<f-E<fOOQ07b1G1i1G1iO#MXQ`O'#KOOOQ07b,5<a,5<aO#MaQ`O,5<aOOQ07b,59e,59eO!&dQ7[O'#DPOOOO'#IZ'#IZO#MfO?MpO,59iOOQ07b,59i,59iO%[Q^O1G1|O!7rQWO'#IkO#MqQ7[O,5<uOOQ07b,5<r,5<rO!(SQ7[O'#InO#NaQ7[O,5=RO!(SQ7[O'#IpO$ SQ7[O,5=TO!&dQ7[O,5=VOOQO1G2O1G2OO$ ^QpO'#CqO$ qQ!LQO'#EnO$!pQ`O'#G]O$#^QpO,5<nO$#eQWO'#KSO9ZQWO'#KSO$#sQWO,5<pO!(SQ7[O,5<oO$#xQWO'#GUO$$ZQWO,5<oO$$`QpO'#GRO$$mQpO'#KTO$$wQWO'#KTO!&dQ7[O'#KTO$$|QWO,5<sO$%RQ`O'#G^O!5{Q`O'#G^O$%dQWO'#G`O$%iQWO'#GbO!3fQWO'#GeO$%nQ07hO'#ImO$%yQ`O,5<wOOQ07f,5<w,5<wO$&QQ`O'#G^O$&`Q`O'#G_O$&hQ`O'#G_O$&mQ7[O,5=RO$&}Q7[O,5=TOOQ07b,5=W,5=WO!(SQ7[O,5?}O!(SQ7[O,5?}O$'_QWO'#IrO$'jQWO,5?|O$'rQWO,59`O$(cQ7[O,59qOOQ07b,59q,59qO$)UQ7[O,5<fO$)wQ7[O,5<hO@bQWO,5<jOOQ07b,5<k,5<kO$*RQWO,5<qO$*WQ7[O,5<vO$*hQWO'#JvO!$aQ^O1G1}O$*mQWO1G1}O9ZQWO'#JyO9ZQWO'#EpO%[Q^O'#EpO9ZQWO'#ItO$*rQ07hO,5@sOOQU1G2w1G2wOOQU1G4X1G4XOOQ07b1G/w1G/wO!,iQWO1G/wO$,wQ08SO1G0TOOQU1G2s1G2sO!&dQ7[O1G2sO%[Q^O1G2sO#-xQWO1G2sO$.{Q7[O'#EgOOQ07`,5?{,5?{O$/VQ07hO,5?{OOQU1G.t1G.tO!BYQ07hO1G.tO!BeQ`O1G.tO!BmQ7[O1G.tO$/hQWO1G0qO$/mQWO'#ChO$/xQWO'#K]O$0QQWO,5=uO$0VQWO'#K]O$0[QWO'#K]O$0jQWO'#IzO$0xQWO,5@vO$1QQrO1G1fOOQ07b1G1h1G1hO9aQWO1G3`O@bQWO1G3`O$1XQWO1G3`O$1^QWO1G3`OOQU1G3`1G3`O!DkQWO1G3OO!&dQ7[O1G2{O$1cQWO1G2{OOQU1G2|1G2|O!&dQ7[O1G2|O$1hQWO1G2|O$1pQ`O'#GzOOQU1G3O1G3OO!5{Q`O'#IvO!DpQpO1G3ROOQU1G3R1G3ROOQU,5=l,5=lO$1xQ7[O,5=nO9aQWO,5=nO$%iQWO,5=pO9UQWO,5=pO!BeQ`O,5=pO!BmQ7[O,5=pO:RQ7[O,5=pO$2WQWO'#KZO$2cQWO,5=qOOQU1G.j1G.jO$2hQ07hO1G.jO@bQWO1G.jO$2sQWO1G.jO9kQ07hO1G.jO$4xQrO,5@xO$5YQWO,5@xO9ZQWO,5@xO$5eQ^O,5=xO$5lQWO,5=xOOQU1G3b1G3bO`Q^O1G3bOOQU1G3h1G3hOOQU1G3j1G3jO>kQWO1G3lO$5qQ^O1G3nO$9uQ^O'#HmOOQU1G3q1G3qO$:SQWO'#HsO>pQWO'#HuOOQU1G3w1G3wO$:[Q^O1G3wO9kQ07hO1G3}OOQU1G4P1G4POOQ07`'#GY'#GYO9kQ07hO1G4RO9kQ07hO1G4TO$>cQWO,5@XO!*fQ^O,5;[O9ZQWO,5;[O>pQWO,5:UO!*fQ^O,5:UO!BeQ`O,5:UO$>hQ(CYO,5:UOOQO,5;[,5;[O$>rQ`O'#I^O$?YQWO,5@WOOQ07b1G/o1G/oO$?bQ`O'#IdO$?lQWO,5@gOOQ07`1G0u1G0uO##dQ`O,5:UOOQO'#Ia'#IaO$?tQ`O,5:pOOQ07f,5:p,5:pO#'_QWO1G0YOOQ07b1G0Y1G0YO%[Q^O1G0YOOQ07b1G0p1G0pO>pQWO1G0pO!BeQ`O1G0pO!BmQ7[O1G0pOOQ07`1G5s1G5sO!BYQ07hO1G0]OOQO1G0i1G0iO%[Q^O1G0iO$?{Q07hO1G0iO$@WQ07hO1G0iO!BeQ`O1G0]OCnQ`O1G0]O$@fQ07hO1G0iOOQO1G0]1G0]O$@zQ08SO1G0iPOOO-E<T-E<TPOOO1G.g1G.gOOOO1G/f1G/fO$AUQpO,5<eO$A^QrO1G4cOOQO1G4i1G4iO%[Q^O,5>wO$AhQWO1G5qO$ApQWO1G6PO$AxQrO1G6QO9ZQWO,5>}O$BSQ08SO1G5}O%[Q^O1G5}O$BdQ07hO1G5}O$BuQWO1G5|O$BuQWO1G5|O9ZQWO1G5|O$B}QWO,5?QO9ZQWO,5?QOOQO,5?Q,5?QO$CcQWO,5?QO$*hQWO,5?QOOQO-E<d-E<dOOQO1G0`1G0`OOQO1G0b1G0bO!,lQWO1G0bOOQU7+(_7+(_O!&dQ7[O7+(_O%[Q^O7+(_O$CqQWO7+(_O$C|Q7[O7+(_O$D[Q08SO,5=RO$FgQ08SO,5=TO$HrQ08SO,5=RO$KTQ08SO,5=TO$MfQ08SO,59qO% nQ08SO,5<fO%#yQ08SO,5<hO%&UQ08SO,5<vOOQ07b7+&]7+&]O%(gQ08SO7+&]O%)ZQ7[O'#I_O%)eQWO,5@YOOQ07b1G/y1G/yO%)mQ^O'#I`O%)zQWO,5@ZO%*SQrO,5@ZOOQ07b1G0O1G0OO%*^QWO7+&fOOQ07b7+&f7+&fO%*cQ(CYO,5:eO%[Q^O7+&xO%*mQ(CYO,5:]O%*zQ(CYO,5:iO%+UQ(CYO,5:kOOQ07b7+'O7+'OOOQO1G1o1G1oOOQO1G1p1G1pO%+`QtO,5<WO!*fQ^O,5<VOOQO-E<e-E<eOOQ07b7+'V7+'VOOOS7+'b7+'bOOOS1G1y1G1yO%+kQWO1G1yOOQ07b1G1{1G1{O%+pQpO,59kOOOO-E<X-E<XOOQ07b1G/T1G/TO%+wQ08SO7+'hOOQ07b,5?V,5?VO%,kQpO,5?VOOQ07b1G2a1G2aP!&dQ7[O'#IkPOQ07b-E<i-E<iO%-ZQ7[O,5?YOOQ07b-E<l-E<lO%-|Q7[O,5?[OOQ07b-E<n-E<nO%.WQpO1G2qO%._QpO'#CqO%.uQ7[O'#JyO%.|Q^O'#EpOOQ07b1G2Y1G2YO%/WQWO'#IjO%/lQWO,5@nO%/lQWO,5@nO%/tQWO,5@nO%0PQWO,5@nOOQO1G2[1G2[O%0_Q7[O1G2ZO!(SQ7[O1G2ZO%0oQ!LQO'#IlO%0|QWO,5@oO!&dQ7[O,5@oO%1UQpO,5@oOOQ07b1G2_1G2_OOQ07`,5<x,5<xOOQ07`,5<y,5<yO$*hQWO,5<yOC_QWO,5<yO!BeQ`O,5<xOOQO'#Ga'#GaO%1`QWO,5<zOOQ07`,5<|,5<|O$*hQWO,5=POOQO,5?X,5?XOOQO-E<k-E<kOOQ07f1G2c1G2cO!5{Q`O,5<xO%1hQWO,5<yO$%dQWO,5<zO!5{Q`O,5<yO!(SQ7[O'#InO%2[Q7[O1G2mO!(SQ7[O'#IpO%2}Q7[O1G2oO%3XQ7[O1G5iO%3cQ7[O1G5iOOQO,5?^,5?^OOQO-E<p-E<pOOQO1G.z1G.zO!9cQ`O,59sO%[Q^O,59sO%3pQWO1G2UO!(SQ7[O1G2]O%3uQ08SO7+'iOOQ07b7+'i7+'iO!$aQ^O7+'iO%4iQWO,5;[OOQ07`,5?`,5?`OOQ07`-E<r-E<rOOQ07b7+%c7+%cO%4nQpO'#KUO#'_QWO7+(_O%4xQrO7+(_O$CtQWO7+(_O%5PQ08QO'#ChO%5dQ08QO,5<}O%6UQWO,5<}OOQ07`1G5g1G5gOOQU7+$`7+$`O!BYQ07hO7+$`O!BeQ`O7+$`O!$aQ^O7+&]O%6ZQWO'#IyO%6rQWO,5@wOOQO1G3a1G3aO9aQWO,5@wO%6rQWO,5@wO%6zQWO,5@wOOQO,5?f,5?fOOQO-E<x-E<xOOQ07b7+'Q7+'QO%7PQWO7+(zO9kQ07hO7+(zO9aQWO7+(zO@bQWO7+(zOOQU7+(j7+(jO%7UQ08QO7+(gO!&dQ7[O7+(gO%7`QpO7+(hOOQU7+(h7+(hO!&dQ7[O7+(hO%7gQWO'#KYO%7rQWO,5=fOOQO,5?b,5?bOOQO-E<t-E<tOOQU7+(m7+(mO%9RQ`O'#HTOOQU1G3Y1G3YO!&dQ7[O1G3YO%[Q^O1G3YO%9YQWO1G3YO%9eQ7[O1G3YO9kQ07hO1G3[O$%iQWO1G3[O9UQWO1G3[O!BeQ`O1G3[O!BmQ7[O1G3[O%9sQWO'#IxO%:XQWO,5@uO%:aQ`O,5@uOOQ07`1G3]1G3]OOQU7+$U7+$UO@bQWO7+$UO9kQ07hO7+$UO%:lQWO7+$UO%[Q^O1G6dO%[Q^O1G6eO%:qQ07hO1G6dO%:{Q^O1G3dO%;SQWO1G3dO%;XQ^O1G3dOOQU7+(|7+(|O9kQ07hO7+)WO`Q^O7+)YOOQU'#K`'#K`OOQU'#I{'#I{O%;`Q^O,5>XOOQU,5>X,5>XO%[Q^O'#HnO%;mQWO'#HpOOQU,5>_,5>_O9ZQWO,5>_OOQU,5>a,5>aOOQU7+)c7+)cOOQU7+)i7+)iOOQU7+)m7+)mOOQU7+)o7+)oO%;rQ`O1G5sO%<WQ(CYO1G0vO%<bQWO1G0vOOQO1G/p1G/pO%<mQ(CYO1G/pO>pQWO1G/pO!*fQ^O'#DjOOQO,5>x,5>xOOQO-E<[-E<[OOQO,5?O,5?OOOQO-E<b-E<bO!BeQ`O1G/pOOQO-E<_-E<_OOQ07f1G0[1G0[OOQ07b7+%t7+%tO#'_QWO7+%tOOQ07b7+&[7+&[O>pQWO7+&[O!BeQ`O7+&[OOQO7+%w7+%wO$@zQ08SO7+&TOOQO7+&T7+&TO%[Q^O7+&TO%<wQ07hO7+&TO!BYQ07hO7+%wO!BeQ`O7+%wO%=SQ07hO7+&TO%=bQ08SO7++iO%[Q^O7++iO%=rQWO7++hO%=rQWO7++hOOQO1G4l1G4lO9ZQWO1G4lO%=zQWO1G4lOOQO7+%|7+%|O#'_QWO<<KyO%4xQrO<<KyO%>YQWO<<KyOOQU<<Ky<<KyO!&dQ7[O<<KyO%[Q^O<<KyO%>bQWO<<KyO%>mQ08SO,5?YO%@xQ08SO,5?[O%CTQ08SO1G2ZO%EfQ08SO1G2mO%GqQ08SO1G2oO%I|Q7[O,5>yOOQO-E<]-E<]O%JWQrO,5>zO%[Q^O,5>zOOQO-E<^-E<^O%JbQWO1G5uOOQ07b<<JQ<<JQO%JjQ(CYO1G0qO%LtQ(CYO1G0{O%L{Q(CYO1G0{O& PQ(CYO1G0{O& WQ(CYO1G0{O&!{Q(CYO1G0{O&#cQ(CYO1G0{O&%vQ(CYO1G0{O&%}Q(CYO1G0{O&'{Q(CYO1G0{O&(YQ(CYO1G0{O&*WQ(CYO1G0{O&*kQ08SO<<JdO&+pQ(CYO1G0{O&-fQ(CYO'#JdO&/iQ(CYO1G1aO&/vQ(CYO1G0TO!*fQ^O'#FnOOQO'#KQ'#KQOOQO1G1r1G1rO&0QQWO1G1qO&0VQ(CYO,5?TOOOS7+'e7+'eOOOO1G/V1G/VOOQ07b1G4q1G4qO!(SQ7[O7+(]O&2gQrO'#ChO&2qQWO,5?UO9ZQWO,5?UOOQO-E<h-E<hO&3PQWO1G6YO&3PQWO1G6YO&3XQWO1G6YO&3dQ7[O7+'uO&3tQpO,5?WO&4OQWO,5?WO!&dQ7[O,5?WOOQO-E<j-E<jO&4TQpO1G6ZO&4_QWO1G6ZOOQ07`1G2e1G2eO$*hQWO1G2eOOQ07`1G2d1G2dO&4gQWO1G2fO!&dQ7[O1G2fOOQ07`1G2k1G2kO!BeQ`O1G2dOC_QWO1G2eO&4lQWO1G2fO&4tQWO1G2eO&5hQ7[O,5?YOOQ07b-E<m-E<mO&6ZQ7[O,5?[OOQ07b-E<o-E<oO!(SQ7[O7++TOOQ07b1G/_1G/_O&6eQWO1G/_OOQ07b7+'p7+'pO&6jQ7[O7+'wO&6zQ08SO<<KTOOQ07b<<KT<<KTO&7nQWO1G0vO!&dQ7[O'#IsO&7sQWO,5@pO!&dQ7[O1G2iOOQU<<Gz<<GzO!BYQ07hO<<GzO&7{Q08SO<<IwOOQ07b<<Iw<<IwOOQO,5?e,5?eO&8oQWO,5?eO&8tQWO,5?eOOQO-E<w-E<wO&9SQWO1G6cO&9SQWO1G6cO9aQWO1G6cO@bQWO<<LfOOQU<<Lf<<LfO&9[QWO<<LfO9kQ07hO<<LfOOQU<<LR<<LRO%7UQ08QO<<LROOQU<<LS<<LSO%7`QpO<<LSO&9aQ`O'#IuO&9lQWO,5@tO!*fQ^O,5@tOOQU1G3Q1G3QO%.|Q^O'#JmOOQO'#Iw'#IwO9kQ07hO'#IwO&9tQ`O,5=oOOQU,5=o,5=oO&9{Q`O'#EcO&:aQWO7+(tO&:fQWO7+(tOOQU7+(t7+(tO!&dQ7[O7+(tO%[Q^O7+(tO&:nQWO7+(tOOQU7+(v7+(vO9kQ07hO7+(vO$%iQWO7+(vO9UQWO7+(vO!BeQ`O7+(vO&:yQWO,5?dOOQO-E<v-E<vOOQO'#HW'#HWO&;UQWO1G6aO9kQ07hO<<GpOOQU<<Gp<<GpO@bQWO<<GpO&;^QWO7+,OO&;cQWO7+,PO%[Q^O7+,OO%[Q^O7+,POOQU7+)O7+)OO&;hQWO7+)OO&;mQ^O7+)OO&;tQWO7+)OOOQU<<Lr<<LrOOQU<<Lt<<LtOOQU-E<y-E<yOOQU1G3s1G3sO&;yQWO,5>YOOQU,5>[,5>[O&<OQWO1G3yO9ZQWO7+&bO!*fQ^O7+&bOOQO7+%[7+%[O&<TQ(CYO1G6QO>pQWO7+%[OOQ07b<<I`<<I`OOQ07b<<Iv<<IvO>pQWO<<IvOOQO<<Io<<IoO$@zQ08SO<<IoO%[Q^O<<IoOOQO<<Ic<<IcO!BYQ07hO<<IcO&<_Q07hO<<IoO&<jQ08SO<= TO&<zQWO<= SOOQO7+*W7+*WO9ZQWO7+*WOOQUANAeANAeO&=SQWOANAeO!&dQ7[OANAeO#'_QWOANAeO%4xQrOANAeO%[Q^OANAeO&=[Q08SO7+'uO&?mQ08SO,5?YO&AxQ08SO,5?[O&DTQ08SO7+'wO&FfQrO1G4fO&FpQ(CYO7+&]O&HtQ(CYO,5=RO&J{Q(CYO,5=TO&K]Q(CYO,5=RO&KmQ(CYO,5=TO&K}Q(CYO,59qO&NQQ(CYO,5<fO'!TQ(CYO,5<hO'$WQ(CYO,5<vO'%|Q(CYO7+'hO'&ZQ(CYO7+'iO'&hQWO,5<YOOQO7+']7+']O'&mQ7[O<<KwOOQO1G4p1G4pO'&tQWO1G4pO''PQWO1G4pO''_QWO7++tO''_QWO7++tO!&dQ7[O1G4rO''gQpO1G4rO''qQWO7++uOOQ07`7+(P7+(PO$*hQWO7+(QO''yQpO7+(QOOQ07`7+(O7+(OO$*hQWO7+(PO'(QQWO7+(QO!&dQ7[O7+(QOC_QWO7+(PO'(VQ7[O<<NoOOQ07b7+$y7+$yO'(aQpO,5?_OOQO-E<q-E<qO'(kQ08QO7+(TOOQUAN=fAN=fO9aQWO1G5POOQO1G5P1G5PO'({QWO1G5PO')QQWO7++}O')QQWO7++}O9kQ07hOANBQO@bQWOANBQOOQUANBQANBQOOQUANAmANAmOOQUANAnANAnO')YQWO,5?aOOQO-E<s-E<sO')eQ(CYO1G6`OOQO,5?c,5?cOOQO-E<u-E<uOOQU1G3Z1G3ZO%.|Q^O,5<zOOQU<<L`<<L`O!&dQ7[O<<L`O&:aQWO<<L`O')oQWO<<L`O%[Q^O<<L`OOQU<<Lb<<LbO9kQ07hO<<LbO$%iQWO<<LbO9UQWO<<LbO')wQ`O1G5OO'*SQWO7++{OOQUAN=[AN=[O9kQ07hOAN=[OOQU<= j<= jOOQU<= k<= kO'*[QWO<= jO'*aQWO<= kOOQU<<Lj<<LjO'*fQWO<<LjO'*kQ^O<<LjOOQU1G3t1G3tO>pQWO7+)eO'*rQWO<<I|O'*}Q(CYO<<I|OOQO<<Hv<<HvOOQ07bAN?bAN?bOOQOAN?ZAN?ZO$@zQ08SOAN?ZOOQOAN>}AN>}O%[Q^OAN?ZOOQO<<Mr<<MrOOQUG27PG27PO!&dQ7[OG27PO#'_QWOG27PO'+XQWOG27PO%4xQrOG27PO'+aQ(CYO<<JdO'+nQ(CYO1G2ZO'-dQ(CYO,5?YO'/gQ(CYO,5?[O'1jQ(CYO1G2mO'3mQ(CYO1G2oO'5pQ(CYO<<KTO'5}Q(CYO<<IwOOQO1G1t1G1tO!(SQ7[OANAcOOQO7+*[7+*[O'6[QWO7+*[O'6gQWO<= `O'6oQpO7+*^OOQ07`<<Kl<<KlO$*hQWO<<KlOOQ07`<<Kk<<KkO'6yQpO<<KlO$*hQWO<<KkOOQO7+*k7+*kO9aQWO7+*kO'7QQWO<= iOOQUG27lG27lO9kQ07hOG27lO!*fQ^O1G4{O'7YQWO7++zO&:aQWOANAzOOQUANAzANAzO!&dQ7[OANAzO'7bQWOANAzOOQUANA|ANA|O9kQ07hOANA|O$%iQWOANA|OOQO'#HX'#HXOOQO7+*j7+*jOOQUG22vG22vOOQUANEUANEUOOQUANEVANEVOOQUANBUANBUO'7jQWOANBUOOQU<<MP<<MPO!*fQ^OAN?hOOQOG24uG24uO$@zQ08SOG24uO#'_QWOLD,kOOQULD,kLD,kO!&dQ7[OLD,kO'7oQWOLD,kO'7wQ(CYO7+'uO'9mQ(CYO,5?YO';pQ(CYO,5?[O'=sQ(CYO7+'wO'?iQ7[OG26}OOQO<<Mv<<MvOOQ07`ANAWANAWO$*hQWOANAWOOQ07`ANAVANAVOOQO<<NV<<NVOOQULD-WLD-WO'?yQ(CYO7+*gOOQUG27fG27fO&:aQWOG27fO!&dQ7[OG27fOOQUG27hG27hO9kQ07hOG27hOOQUG27pG27pO'@TQ(CYOG25SOOQOLD*aLD*aOOQU!$(!V!$(!VO#'_QWO!$(!VO!&dQ7[O!$(!VO'@_Q08SOG26}OOQ07`G26rG26rOOQULD-QLD-QO&:aQWOLD-QOOQULD-SLD-SOOQU!)9Eq!)9EqO#'_QWO!)9EqOOQU!$(!l!$(!lOOQU!.K;]!.K;]O'BpQ(CYOG26}O!*fQ^O'#DyO1PQWO'#EWO'DfQrO'#JiO!*fQ^O'#DqO'DmQ^O'#D}O'DtQrO'#ChO'G[QrO'#ChO!*fQ^O'#EPO'GlQ^O,5;VO!*fQ^O,5;aO!*fQ^O,5;aO!*fQ^O,5;aO!*fQ^O,5;aO!*fQ^O,5;aO!*fQ^O,5;aO!*fQ^O,5;aO!*fQ^O,5;aO!*fQ^O,5;aO!*fQ^O,5;aO!*fQ^O,5;aO!*fQ^O'#IiO'IoQWO,5<eO'IwQ7[O,5;aO'KbQ7[O,5;aO!*fQ^O,5;uO!&dQ7[O'#GgO'IwQ7[O'#GgO!&dQ7[O'#GiO'IwQ7[O'#GiO1SQWO'#DVO1SQWO'#DVO!&dQ7[O'#FzO'IwQ7[O'#FzO!&dQ7[O'#F|O'IwQ7[O'#F|O!&dQ7[O'#G[O'IwQ7[O'#G[O!*fQ^O,5:iO'KiQ`O'#D[O!*fQ^O,5@fO'GlQ^O1G0qO'KsQ(CYO'#ChO!*fQ^O1G1|O!&dQ7[O'#InO'IwQ7[O'#InO!&dQ7[O'#IpO'IwQ7[O'#IpO'K}QpO'#CqO!&dQ7[O,5<oO'IwQ7[O,5<oO'GlQ^O1G1}O!*fQ^O7+&xO!&dQ7[O1G2ZO'IwQ7[O1G2ZO!&dQ7[O'#InO'IwQ7[O'#InO!&dQ7[O'#IpO'IwQ7[O'#IpO!&dQ7[O1G2]O'IwQ7[O1G2]O'GlQ^O7+'iO'GlQ^O7+&]O!&dQ7[OANAcO'IwQ7[OANAcO'LbQWO'#EkO'LgQWO'#EkO'LoQWO'#FZO'LtQWO'#EuO'LyQWO'#JzO'MUQWO'#JxO'MaQWO,5;VO'MfQ7[O,5<bO'MmQWO'#GTO'MrQWO'#GTO'MwQWO,5<cO'NPQWO,5;VO'NXQ(CYO1G1^O'N`QWO,5<oO'NeQWO,5<oO'NjQWO,5<qO'NoQWO,5<qO'NtQWO1G1}O'NyQWO1G0qO( OQ7[O<<KwO( VQ7[O<<KwO7hQ7[O'#FxO9UQWO'#FwOA]QWO'#EjO!*fQ^O,5;rO!3fQWO'#GTO!3fQWO'#GTO!3fQWO'#GVO!3fQWO'#GVO!(SQ7[O7+(]O!(SQ7[O7+(]O%.WQpO1G2qO%.WQpO1G2qO!&dQ7[O,5=VO!&dQ7[O,5=V",
28131
  states: "$EOQ%TQlOOO%[QlOOO'_QpOOP(lO`OOO*zQ!0MxO'#CiO+RO#tO'#CjO+aO&jO'#CjO+oO#@ItO'#D_O.QQlO'#DeO.bQlO'#DpO%[QlO'#DxO0fQlO'#EQOOQ!0Lf'#EY'#EYO1PQ`O'#EVOOQO'#En'#EnOOQO'#Ij'#IjO1XQ`O'#GrO1dQ`O'#EmO1iQ`O'#EmO3hQ!0MxO'#JpO6[Q!0MxO'#JqO6uQ`O'#F[O6zQ,UO'#FsOOQ!0Lf'#Fe'#FeO7VO7dO'#FeO7eQMhO'#F{O9UQ`O'#FzOOQ!0Lf'#Jq'#JqOOQ!0Lb'#Jp'#JpO9ZQ`O'#GvOOQ['#K]'#K]O9fQ`O'#IWO9kQ!0LrO'#IXOOQ['#J^'#J^OOQ['#I]'#I]Q`QlOOQ`QlOOO9sQ!L^O'#DtO9zQlO'#D|O:RQlO'#EOO9aQ`O'#GrO:YQMhO'#CoO:hQ`O'#ElO:sQ`O'#EwO:xQMhO'#FdO;gQ`O'#GrOOQO'#K^'#K^O;lQ`O'#K^O;zQ`O'#GzO;zQ`O'#G{O;zQ`O'#G}O9aQ`O'#HQO<qQ`O'#HTO>YQ`O'#CeO>jQ`O'#HaO>rQ`O'#HgO>rQ`O'#HiO`QlO'#HkO>rQ`O'#HmO>rQ`O'#HpO>wQ`O'#HvO>|Q!0LsO'#H|O%[QlO'#IOO?XQ!0LsO'#IQO?dQ!0LsO'#ISO9kQ!0LrO'#IUO?oQ!0MxO'#CiO@qQpO'#DjQOQ`OOO%[QlO'#EOOAXQ`O'#ERO:YQMhO'#ElOAdQ`O'#ElOAoQ!bO'#FdOOQ['#Cg'#CgOOQ!0Lb'#Do'#DoOOQ!0Lb'#Jt'#JtO%[QlO'#JtOOQO'#Jw'#JwOOQO'#If'#IfOBoQpO'#EeOOQ!0Lb'#Ed'#EdOOQ!0Lb'#J{'#J{OCkQ!0MSO'#EeOCuQpO'#EUOOQO'#Jv'#JvODZQpO'#JwOEhQpO'#EUOCuQpO'#EePEuO&2DjO'#CbPOOO)CD{)CD{OOOO'#I^'#I^OFQO#tO,59UOOQ!0Lh,59U,59UOOOO'#I_'#I_OF`O&jO,59UOFnQ!L^O'#DaOOOO'#Ia'#IaOFuO#@ItO,59yOOQ!0Lf,59y,59yOGTQlO'#IbOGhQ`O'#JrOIgQ!fO'#JrO+}QlO'#JrOInQ`O,5:POJUQ`O'#EnOJcQ`O'#KROJnQ`O'#KQOJnQ`O'#KQOJvQ`O,5;[OJ{Q`O'#KPOOQ!0Ln,5:[,5:[OKSQlO,5:[OMQQ!0MxO,5:dOMqQ`O,5:lON[Q!0LrO'#KOONcQ`O'#J}O9ZQ`O'#J}ONwQ`O'#J}O! PQ`O,5;ZO! UQ`O'#J}O!#ZQ!fO'#JqOOQ!0Lh'#Ci'#CiO%[QlO'#EQO!#yQ!fO,5:qOOQS'#Jx'#JxOOQO-E<h-E<hO9aQ`O,5=^O!$aQ`O,5=^O!$fQlO,5;XO!&iQMhO'#EiO!(SQ`O,5;XO!(XQlO'#DwO!(cQpO,5;bO!(kQpO,5;bO%[QlO,5;bOOQ['#FS'#FSOOQ['#FU'#FUO%[QlO,5;cO%[QlO,5;cO%[QlO,5;cO%[QlO,5;cO%[QlO,5;cO%[QlO,5;cO%[QlO,5;cO%[QlO,5;cO%[QlO,5;cO%[QlO,5;cOOQ['#FY'#FYO!(yQlO,5;sOOQ!0Lf,5;x,5;xOOQ!0Lf,5;y,5;yOOQ!0Lf,5;{,5;{O%[QlO'#InO!*|Q!0LrO,5<hO%[QlO,5;cO!&iQMhO,5;cO!+kQMhO,5;cO!-]QMhO'#E[O%[QlO,5;vOOQ!0Lf,5;z,5;zO!-dQ,UO'#FiO!.aQ,UO'#KVO!-{Q,UO'#KVO!.hQ,UO'#KVOOQO'#KV'#KVO!.|Q,UO,5<ROOOW,5<_,5<_O!/_QlO'#FuOOOW'#Im'#ImO7VO7dO,5<PO!/fQ,UO'#FwOOQ!0Lf,5<P,5<PO!0VQ$IUO'#CwOOQ!0Lh'#C{'#C{O!0jO#@ItO'#DPO!1WQMjO,5<dO!1_Q`O,5<gO!2zQ(CWO'#GWO!3XQ`O'#GXO!3^Q`O'#GXO!4|Q(CWO'#G]O!6RQpO'#GaOOQO'#Gm'#GmO!+rQMhO'#GlOOQO'#Go'#GoO!+rQMhO'#GnO!6tQ$IUO'#JjOOQ!0Lh'#Jj'#JjO!7OQ`O'#JiO!7^Q`O'#JhO!7fQ`O'#CuOOQ!0Lh'#Cy'#CyO!7qQ`O'#C{OOQ!0Lh'#DT'#DTOOQ!0Lh'#DV'#DVO1SQ`O'#DXO!+rQMhO'#GOO!+rQMhO'#GQO!7vQ`O'#GSO!7{Q`O'#GTO!3^Q`O'#GZO!+rQMhO'#G`O;zQ`O'#JiO!8QQ`O'#EoO!8oQ`O,5<fOOQ!0Lb'#Cr'#CrO!8wQ`O'#EpO!9qQpO'#EqOOQ!0Lb'#KP'#KPO!9xQ!0LrO'#K_O9kQ!0LrO,5=bO`QlO,5>rOOQ['#Jf'#JfOOQ[,5>s,5>sOOQ[-E<Z-E<ZO!;wQ!0MxO,5:`O!9lQpO,5:^O!>bQ!0MxO,5:hO%[QlO,5:hO!@xQ!0MxO,5:jOOQO,5@x,5@xO!AiQMhO,5=^O!AwQ!0LrO'#JgO9UQ`O'#JgO!BYQ!0LrO,59ZO!BeQpO,59ZO!BmQMhO,59ZO:YQMhO,59ZO!BxQ`O,5;XO!CQQ`O'#H`O!CfQ`O'#KbO%[QlO,5;|O!9lQpO,5<OO!CnQ`O,5=yO!CsQ`O,5=yO!CxQ`O,5=yO9kQ!0LrO,5=yO;zQ`O,5=iOOQO'#Cw'#CwO!DWQpO,5=fO!D`QMhO,5=gO!DkQ`O,5=iO!DpQ!bO,5=lO!DxQ`O'#K^O>wQ`O'#HVO9aQ`O'#HXO!D}Q`O'#HXO:YQMhO'#HZO!ESQ`O'#HZOOQ[,5=o,5=oO!EXQ`O'#H[O!EjQ`O'#CoO!EoQ`O,59PO!EyQ`O,59PO!HOQlO,59POOQ[,59P,59PO!H`Q!0LrO,59PO%[QlO,59PO!JkQlO'#HcOOQ['#Hd'#HdOOQ['#He'#HeO`QlO,5={O!KRQ`O,5={O`QlO,5>RO`QlO,5>TO!KWQ`O,5>VO`QlO,5>XO!K]Q`O,5>[O!KbQlO,5>bOOQ[,5>h,5>hO%[QlO,5>hO9kQ!0LrO,5>jOOQ[,5>l,5>lO# lQ`O,5>lOOQ[,5>n,5>nO# lQ`O,5>nOOQ[,5>p,5>pO#!YQpO'#D]O%[QlO'#JtO#!{QpO'#JtO##VQpO'#DkO##hQpO'#DkO#%yQlO'#DkO#&QQ`O'#JsO#&YQ`O,5:UO#&_Q`O'#ErO#&mQ`O'#KSO#&uQ`O,5;]O#&zQpO'#DkO#'XQpO'#ETOOQ!0Lf,5:m,5:mO%[QlO,5:mO#'`Q`O,5:mO>wQ`O,5;WO!BeQpO,5;WO!BmQMhO,5;WO:YQMhO,5;WO#'hQ`O,5@`O#'mQ07dO,5:qOOQO-E<d-E<dO#(sQ!0MSO,5;POCuQpO,5:pO#(}QpO,5:pOCuQpO,5;PO!BYQ!0LrO,5:pOOQ!0Lb'#Eh'#EhOOQO,5;P,5;PO%[QlO,5;PO#)[Q!0LrO,5;PO#)gQ!0LrO,5;PO!BeQpO,5:pOOQO,5;V,5;VO#)uQ!0LrO,5;PPOOO'#I['#I[P#*ZO&2DjO,58|POOO,58|,58|OOOO-E<[-E<[OOQ!0Lh1G.p1G.pOOOO-E<]-E<]OOOO,59{,59{O#*fQ!bO,59{OOOO-E<_-E<_OOQ!0Lf1G/e1G/eO#*kQ!fO,5>|O+}QlO,5>|OOQO,5?S,5?SO#*uQlO'#IbOOQO-E<`-E<`O#+SQ`O,5@^O#+[Q!fO,5@^O#+cQ`O,5@lOOQ!0Lf1G/k1G/kO%[QlO,5@mO#+kQ`O'#IhOOQO-E<f-E<fO#+cQ`O,5@lOOQ!0Lb1G0v1G0vOOQ!0Ln1G/v1G/vOOQ!0Ln1G0W1G0WO%[QlO,5@jO#,PQ!0LrO,5@jO#,bQ!0LrO,5@jO#,iQ`O,5@iO9ZQ`O,5@iO#,qQ`O,5@iO#-PQ`O'#IkO#,iQ`O,5@iOOQ!0Lb1G0u1G0uO!(cQpO,5:sO!(nQpO,5:sOOQS,5:u,5:uO#-qQdO,5:uO#-yQMhO1G2xO9aQ`O1G2xOOQ!0Lf1G0s1G0sO#.XQ!0MxO1G0sO#/^Q!0MvO,5;TOOQ!0Lh'#GV'#GVO#/zQ!0MzO'#JjO!$fQlO1G0sO#2VQ!fO'#JuO%[QlO'#JuO#2aQ`O,5:cOOQ!0Lh'#D]'#D]OOQ!0Lf1G0|1G0|O%[QlO1G0|OOQ!0Lf1G1e1G1eO#2fQ`O1G0|O#4zQ!0MxO1G0}O#5RQ!0MxO1G0}O#7iQ!0MxO1G0}O#7pQ!0MxO1G0}O#:WQ!0MxO1G0}O#<nQ!0MxO1G0}O#<uQ!0MxO1G0}O#<|Q!0MxO1G0}O#?dQ!0MxO1G0}O#?kQ!0MxO1G0}O#AxQ?MtO'#CiO#CsQ?MtO1G1_O#CzQ?MtO'#JqO#D_Q!0MxO,5?YOOQ!0Lb-E<l-E<lO#FlQ!0MxO1G0}O#GiQ!0MzO1G0}OOQ!0Lf1G0}1G0}O#HlQMjO'#JzO#HvQ`O,5:vO#H{Q!0MxO1G1bO#IoQ,UO,5<VO#IwQ,UO,5<WO#JPQ,UO'#FnO#JhQ`O'#FmOOQO'#KW'#KWOOQO'#Il'#IlO#JmQ,UO1G1mOOQ!0Lf1G1m1G1mOOOW1G1x1G1xO#KOQ?MtO'#JpO#KYQ`O,5<aO!(yQlO,5<aOOOW-E<k-E<kOOQ!0Lf1G1k1G1kO#K_QpO'#KVOOQ!0Lf,5<c,5<cO#KgQpO,5<cO#KlQMhO'#DROOOO'#I`'#I`O#KsO#@ItO,59kOOQ!0Lh,59k,59kO%[QlO1G2OO!7{Q`O'#IpO#LOQ`O,5<yOOQ!0Lh,5<v,5<vO!+rQMhO'#IsO#LlQMjO,5=WO!+rQMhO'#IuO#M_QMjO,5=YO!&iQMhO,5=[OOQO1G2R1G2RO#MiQ!dO'#CrO#M|Q(CWO'#EpO$ RQpO'#GaO$ iQ!dO,5<rO$ pQ`O'#KYO9ZQ`O'#KYO$!OQ`O,5<tO!+rQMhO,5<sO$!TQ`O'#GYO$!fQ`O,5<sO$!kQ!dO'#GVO$!xQ!dO'#KZO$#SQ`O'#KZO!&iQMhO'#KZO$#XQ`O,5<wO$#^QlO'#JtO$#hQpO'#GbO##hQpO'#GbO$#yQ`O'#GfO!3^Q`O'#GjO$$OQ!0LrO'#IrO$$ZQpO,5<{OOQ!0Lp,5<{,5<{O$$bQpO'#GbO$$oQpO'#GcO$%QQpO'#GcO$%VQMjO,5=WO$%gQMjO,5=YOOQ!0Lh,5=],5=]O!+rQMhO,5@TO!+rQMhO,5@TO$%wQ`O'#IwO$&VQ`O,5@SO$&_Q`O,59aOOQ!0Lh,59g,59gO$'UQ$IYO,59sOOQ!0Lh'#Jn'#JnO$'wQMjO,5<jO$(jQMjO,5<lO@iQ`O,5<nOOQ!0Lh,5<o,5<oO$(tQ`O,5<uO$(yQMjO,5<zO$)ZQ`O,5@TO$)iQ`O'#J}O!$fQlO1G2QO$)nQ`O1G2QO9ZQ`O'#KQO9ZQ`O'#ErO%[QlO'#ErO9ZQ`O'#IyO$)sQ!0LrO,5@yOOQ[1G2|1G2|OOQ[1G4^1G4^OOQ!0Lf1G/z1G/zOOQ!0Lf1G/x1G/xO$+uQ!0MxO1G0SOOQ[1G2x1G2xO!&iQMhO1G2xO%[QlO1G2xO#-|Q`O1G2xO$-yQMhO'#EiOOQ!0Lb,5@R,5@RO$.WQ!0LrO,5@ROOQ[1G.u1G.uO!BYQ!0LrO1G.uO!BeQpO1G.uO!BmQMhO1G.uO$.iQ`O1G0sO$.nQ`O'#CiO$.yQ`O'#KcO$/RQ`O,5=zO$/WQ`O'#KcO$/]Q`O'#KcO$/kQ`O'#JPO$/yQ`O,5@|O$0RQ!fO1G1hOOQ!0Lf1G1j1G1jO9aQ`O1G3eO@iQ`O1G3eO$0YQ`O1G3eO$0_Q`O1G3eOOQ[1G3e1G3eO!DkQ`O1G3TO!&iQMhO1G3QO$0dQ`O1G3QOOQ[1G3R1G3RO!&iQMhO1G3RO$0iQ`O1G3RO$0qQpO'#HPOOQ[1G3T1G3TO!5|QpO'#I{O!DpQ!bO1G3WOOQ[1G3W1G3WOOQ[,5=q,5=qO$0yQMhO,5=sO9aQ`O,5=sO$#yQ`O,5=uO9UQ`O,5=uO!BeQpO,5=uO!BmQMhO,5=uO:YQMhO,5=uO$1XQ`O'#KaO$1dQ`O,5=vOOQ[1G.k1G.kO$1iQ!0LrO1G.kO@iQ`O1G.kO$1tQ`O1G.kO9kQ!0LrO1G.kO$3|Q!fO,5AOO$4ZQ`O,5AOO9ZQ`O,5AOO$4fQlO,5=}O$4mQ`O,5=}OOQ[1G3g1G3gO`QlO1G3gOOQ[1G3m1G3mOOQ[1G3o1G3oO>rQ`O1G3qO$4rQlO1G3sO$8vQlO'#HrOOQ[1G3v1G3vO$9TQ`O'#HxO>wQ`O'#HzOOQ[1G3|1G3|O$9]QlO1G3|O9kQ!0LrO1G4SOOQ[1G4U1G4UOOQ!0Lb'#G^'#G^O9kQ!0LrO1G4WO9kQ!0LrO1G4YO$=dQ`O,5@`O!(yQlO,5;^O9ZQ`O,5;^O>wQ`O,5:VO!(yQlO,5:VO!BeQpO,5:VO$=iQ?MtO,5:VOOQO,5;^,5;^O$=sQpO'#IcO$>ZQ`O,5@_OOQ!0Lf1G/p1G/pO$>cQpO'#IiO$>mQ`O,5@nOOQ!0Lb1G0w1G0wO##hQpO,5:VOOQO'#Ie'#IeO$>uQpO,5:oOOQ!0Ln,5:o,5:oO#'cQ`O1G0XOOQ!0Lf1G0X1G0XO%[QlO1G0XOOQ!0Lf1G0r1G0rO>wQ`O1G0rO!BeQpO1G0rO!BmQMhO1G0rOOQ!0Lb1G5z1G5zO!BYQ!0LrO1G0[OOQO1G0k1G0kO%[QlO1G0kO$>|Q!0LrO1G0kO$?XQ!0LrO1G0kO!BeQpO1G0[OCuQpO1G0[O$?gQ!0LrO1G0kOOQO1G0[1G0[O$?{Q!0MxO1G0kPOOO-E<Y-E<YPOOO1G.h1G.hOOOO1G/g1G/gO$@VQ!bO,5<hO$@_Q!fO1G4hOOQO1G4n1G4nO%[QlO,5>|O$@iQ`O1G5xO$@qQ`O1G6WO$@yQ!fO1G6XO9ZQ`O,5?SO$ATQ!0MxO1G6UO%[QlO1G6UO$AeQ!0LrO1G6UO$AvQ`O1G6TO$AvQ`O1G6TO9ZQ`O1G6TO$BOQ`O,5?VO9ZQ`O,5?VOOQO,5?V,5?VO$BdQ`O,5?VO$)iQ`O,5?VOOQO-E<i-E<iOOQS1G0_1G0_OOQS1G0a1G0aO#-tQ`O1G0aOOQ[7+(d7+(dO!&iQMhO7+(dO%[QlO7+(dO$BrQ`O7+(dO$B}QMhO7+(dO$C]Q!0MzO,5=WO$EhQ!0MzO,5=YO$GsQ!0MzO,5=WO$JUQ!0MzO,5=YO$LgQ!0MzO,59sO$NlQ!0MzO,5<jO%!wQ!0MzO,5<lO%%SQ!0MzO,5<zOOQ!0Lf7+&_7+&_O%'eQ!0MxO7+&_O%(XQlO'#IdO%(fQ`O,5@aO%(nQ!fO,5@aOOQ!0Lf1G/}1G/}O%(xQ`O7+&hOOQ!0Lf7+&h7+&hO%(}Q?MtO,5:dO%[QlO7+&yO%)XQ?MtO,5:`O%)fQ?MtO,5:hO%)pQ?MtO,5:jO%)zQMhO'#IgO%*UQ`O,5@fOOQ!0Lh1G0b1G0bOOQO1G1q1G1qOOQO1G1r1G1rO%*^Q!jO,5<YO!(yQlO,5<XOOQO-E<j-E<jOOQ!0Lf7+'X7+'XOOOW7+'d7+'dOOOW1G1{1G1{O%*iQ`O1G1{OOQ!0Lf1G1}1G1}OOOO,59m,59mO%*nQ!dO,59mOOOO-E<^-E<^OOQ!0Lh1G/V1G/VO%*uQ!0MxO7+'jOOQ!0Lh,5?[,5?[O%+iQMhO1G2eP%+pQ`O'#IpPOQ!0Lh-E<n-E<nO%,^QMjO,5?_OOQ!0Lh-E<q-E<qO%-PQMjO,5?aOOQ!0Lh-E<s-E<sO%-ZQ!dO1G2vO%-bQ!dO'#CrO%-xQMhO'#KQO$#^QlO'#JtOOQ!0Lh1G2^1G2^O%.PQ`O'#IoO%.eQ`O,5@tO%.eQ`O,5@tO%.mQ`O,5@tO%.xQ`O,5@tOOQO1G2`1G2`O%/WQMjO1G2_O!+rQMhO1G2_O%/hQ(CWO'#IqO%/uQ`O,5@uO!&iQMhO,5@uO%/}Q!dO,5@uOOQ!0Lh1G2c1G2cO%2_Q!fO'#CiO%2iQ`O,5=OOOQ!0Lb,5<|,5<|O%2qQpO,5<|OOQ!0Lb,5<},5<}OCfQ`O,5<|O%2|QpO,5<|OOQ!0Lb,5=Q,5=QO$)iQ`O,5=UOOQO,5?^,5?^OOQO-E<p-E<pOOQ!0Lp1G2g1G2gO##hQpO,5<|O$#^QlO,5=OO%3[Q`O,5<}O%3gQpO,5<}O!+rQMhO'#IsO%4aQMjO1G2rO!+rQMhO'#IuO%5SQMjO1G2tO%5^QMjO1G5oO%5hQMjO1G5oOOQO,5?c,5?cOOQO-E<u-E<uOOQO1G.{1G.{O!9lQpO,59uO%[QlO,59uOOQ!0Lh,5<i,5<iO%5uQ`O1G2YO!+rQMhO1G2aO!+rQMhO1G5oO!+rQMhO1G5oO%5zQ!0MxO7+'lOOQ!0Lf7+'l7+'lO!$fQlO7+'lO%6nQ`O,5;^OOQ!0Lb,5?e,5?eOOQ!0Lb-E<w-E<wO%6sQ!dO'#K[O#'cQ`O7+(dO4UQ!fO7+(dO$BuQ`O7+(dO%6}Q!0MvO'#CiO%7nQ!0LrO,5=RO%8PQ!0MvO,5=RO%8dQ`O,5=ROOQ!0Lb1G5m1G5mOOQ[7+$a7+$aO!BYQ!0LrO7+$aO!BeQpO7+$aO!$fQlO7+&_O%8lQ`O'#JOO%9TQ`O,5@}OOQO1G3f1G3fO9aQ`O,5@}O%9TQ`O,5@}O%9]Q`O,5@}OOQO,5?k,5?kOOQO-E<}-E<}OOQ!0Lf7+'S7+'SO%9bQ`O7+)PO9kQ!0LrO7+)PO9aQ`O7+)PO@iQ`O7+)POOQ[7+(o7+(oO%9gQ!0MvO7+(lO!&iQMhO7+(lO!DfQ`O7+(mOOQ[7+(m7+(mO!&iQMhO7+(mO%9qQ`O'#K`O%9|Q`O,5=kOOQO,5?g,5?gOOQO-E<y-E<yOOQ[7+(r7+(rO%;`QpO'#HYOOQ[1G3_1G3_O!&iQMhO1G3_O%[QlO1G3_O%;gQ`O1G3_O%;rQMhO1G3_O9kQ!0LrO1G3aO$#yQ`O1G3aO9UQ`O1G3aO!BeQpO1G3aO!BmQMhO1G3aO%<QQ`O'#I}O%<fQ`O,5@{O%<nQpO,5@{OOQ!0Lb1G3b1G3bOOQ[7+$V7+$VO@iQ`O7+$VO9kQ!0LrO7+$VO%<yQ`O7+$VO%[QlO1G6jO%[QlO1G6kO%=OQ!0LrO1G6jO%=YQlO1G3iO%=aQ`O1G3iO%=fQlO1G3iOOQ[7+)R7+)RO9kQ!0LrO7+)]O`QlO7+)_OOQ['#Kf'#KfOOQ['#JQ'#JQO%=mQlO,5>^OOQ[,5>^,5>^O%[QlO'#HsO%=zQ`O'#HuOOQ[,5>d,5>dO9ZQ`O,5>dOOQ[,5>f,5>fOOQ[7+)h7+)hOOQ[7+)n7+)nOOQ[7+)r7+)rOOQ[7+)t7+)tO%>PQpO1G5zO%>kQ?MtO1G0xO%>uQ`O1G0xOOQO1G/q1G/qO%?QQ?MtO1G/qO>wQ`O1G/qO!(yQlO'#DkOOQO,5>},5>}OOQO-E<a-E<aOOQO,5?T,5?TOOQO-E<g-E<gO!BeQpO1G/qOOQO-E<c-E<cOOQ!0Ln1G0Z1G0ZOOQ!0Lf7+%s7+%sO#'cQ`O7+%sOOQ!0Lf7+&^7+&^O>wQ`O7+&^O!BeQpO7+&^OOQO7+%v7+%vO$?{Q!0MxO7+&VOOQO7+&V7+&VO%[QlO7+&VO%?[Q!0LrO7+&VO!BYQ!0LrO7+%vO!BeQpO7+%vO%?gQ!0LrO7+&VO%?uQ!0MxO7++pO%[QlO7++pO%@VQ`O7++oO%@VQ`O7++oOOQO1G4q1G4qO9ZQ`O1G4qO%@_Q`O1G4qOOQS7+%{7+%{O#'cQ`O<<LOO4UQ!fO<<LOO%@mQ`O<<LOOOQ[<<LO<<LOO!&iQMhO<<LOO%[QlO<<LOO%@uQ`O<<LOO%AQQ!0MzO,5?_O%C]Q!0MzO,5?aO%EhQ!0MzO1G2_O%GyQ!0MzO1G2rO%JUQ!0MzO1G2tO%LaQ!fO,5?OO%[QlO,5?OOOQO-E<b-E<bO%LkQ`O1G5{OOQ!0Lf<<JS<<JSO%LsQ?MtO1G0sO%NzQ?MtO1G0}O& RQ?MtO1G0}O&#SQ?MtO1G0}O&#ZQ?MtO1G0}O&%[Q?MtO1G0}O&']Q?MtO1G0}O&'dQ?MtO1G0}O&'kQ?MtO1G0}O&)lQ?MtO1G0}O&)sQ?MtO1G0}O&)zQ!0MxO<<JeO&+rQ?MtO1G0}O&,oQ?MvO1G0}O&-rQ?MvO'#JjO&/xQ?MtO1G1bO&0VQ?MtO1G0SO&0aQMjO,5?ROOQO-E<e-E<eO!(yQlO'#FpOOQO'#KX'#KXOOQO1G1t1G1tO&0kQ`O1G1sO&0pQ?MtO,5?YOOOW7+'g7+'gOOOO1G/X1G/XO&0zQ!dO1G4vOOQ!0Lh7+(P7+(PP!&iQMhO,5?[O!+rQMhO7+(bO&1RQ`O,5?ZO9ZQ`O,5?ZOOQO-E<m-E<mO&1aQ`O1G6`O&1aQ`O1G6`O&1iQ`O1G6`O&1tQMjO7+'yO&2UQ!dO,5?]O&2`Q`O,5?]O!&iQMhO,5?]OOQO-E<o-E<oO&2eQ!dO1G6aO&2oQ`O1G6aO&2wQ`O1G2jO!&iQMhO1G2jOOQ!0Lb1G2h1G2hOOQ!0Lb1G2i1G2iO%2qQpO1G2hO!BeQpO1G2hOCfQ`O1G2hOOQ!0Lb1G2p1G2pO&2|QpO1G2hO&3[Q`O1G2jO$)iQ`O1G2iOCfQ`O1G2iO$#^QlO1G2jO&3dQ`O1G2iO&4WQMjO,5?_OOQ!0Lh-E<r-E<rO&4yQMjO,5?aOOQ!0Lh-E<t-E<tO!+rQMhO7++ZOOQ!0Lh1G/a1G/aO&5TQ`O1G/aOOQ!0Lh7+'t7+'tO&5YQMjO7+'{O&5jQMjO7++ZO&5tQMjO7++ZO&6RQ!0MxO<<KWOOQ!0Lf<<KW<<KWO&6uQ`O1G0xO!&iQMhO'#IxO&6zQ`O,5@vO&8|Q!fO<<LOO!&iQMhO1G2mO&9TQ!0LrO1G2mOOQ[<<G{<<G{O!BYQ!0LrO<<G{O&9fQ!0MxO<<IyOOQ!0Lf<<Iy<<IyOOQO,5?j,5?jO&:YQ`O,5?jO&:_Q`O,5?jOOQO-E<|-E<|O&:mQ`O1G6iO&:mQ`O1G6iO9aQ`O1G6iO@iQ`O<<LkOOQ[<<Lk<<LkO&:uQ`O<<LkO9kQ!0LrO<<LkOOQ[<<LW<<LWO%9gQ!0MvO<<LWOOQ[<<LX<<LXO!DfQ`O<<LXO&:zQpO'#IzO&;VQ`O,5@zO!(yQlO,5@zOOQ[1G3V1G3VOOQO'#I|'#I|O9kQ!0LrO'#I|O&;_QpO,5=tOOQ[,5=t,5=tO&;fQpO'#EeO&;mQpO'#GdO&;rQ`O7+(yO&;wQ`O7+(yOOQ[7+(y7+(yO!&iQMhO7+(yO%[QlO7+(yO&<PQ`O7+(yOOQ[7+({7+({O9kQ!0LrO7+({O$#yQ`O7+({O9UQ`O7+({O!BeQpO7+({O&<[Q`O,5?iOOQO-E<{-E<{OOQO'#H]'#H]O&<gQ`O1G6gO9kQ!0LrO<<GqOOQ[<<Gq<<GqO@iQ`O<<GqO&<oQ`O7+,UO&<tQ`O7+,VO%[QlO7+,UO%[QlO7+,VOOQ[7+)T7+)TO&<yQ`O7+)TO&=OQlO7+)TO&=VQ`O7+)TOOQ[<<Lw<<LwOOQ[<<Ly<<LyOOQ[-E=O-E=OOOQ[1G3x1G3xO&=[Q`O,5>_OOQ[,5>a,5>aO&=aQ`O1G4OO9ZQ`O7+&dO!(yQlO7+&dOOQO7+%]7+%]O&=fQ?MtO1G6XO>wQ`O7+%]OOQ!0Lf<<I_<<I_OOQ!0Lf<<Ix<<IxO>wQ`O<<IxOOQO<<Iq<<IqO$?{Q!0MxO<<IqO%[QlO<<IqOOQO<<Ib<<IbO!BYQ!0LrO<<IbO&=pQ!0LrO<<IqO&={Q!0MxO<= [O&>]Q`O<= ZOOQO7+*]7+*]O9ZQ`O7+*]OOQ[ANAjANAjO&>eQ!fOANAjO!&iQMhOANAjO#'cQ`OANAjO4UQ!fOANAjO&>lQ`OANAjO%[QlOANAjO&>tQ!0MzO7+'yO&AVQ!0MzO,5?_O&CbQ!0MzO,5?aO&EmQ!0MzO7+'{O&HOQ!fO1G4jO&HYQ?MtO7+&_O&J^Q?MvO,5=WO&LeQ?MvO,5=YO&LuQ?MvO,5=WO&MVQ?MvO,5=YO&MgQ?MvO,59sO' mQ?MvO,5<jO'#pQ?MvO,5<lO'&UQ?MvO,5<zO''zQ?MtO7+'jO'(XQ?MtO7+'lO'(fQ`O,5<[OOQO7+'_7+'_OOQ!0Lh7+*b7+*bO'(kQMjO<<K|OOQO1G4u1G4uO'(rQ`O1G4uO'(}Q`O1G4uO')]Q`O7++zO')]Q`O7++zO!&iQMhO1G4wO')eQ!dO1G4wO')oQ`O7++{O')wQ`O7+(UO'*SQ!dO7+(UOOQ!0Lb7+(S7+(SOOQ!0Lb7+(T7+(TO!BeQpO7+(SOCfQ`O7+(SO'*^Q`O7+(UO!&iQMhO7+(UO$)iQ`O7+(TO'*cQ`O7+(UOCfQ`O7+(TO'*kQMjO<<NuOOQ!0Lh7+${7+${O!+rQMhO<<NuO'*uQ!dO,5?dOOQO-E<v-E<vO'+PQ!0MvO7+(XO!&iQMhO7+(XOOQ[AN=gAN=gO9aQ`O1G5UOOQO1G5U1G5UO'+aQ`O1G5UO'+fQ`O7+,TO'+fQ`O7+,TO9kQ!0LrOANBVO@iQ`OANBVOOQ[ANBVANBVOOQ[ANArANArOOQ[ANAsANAsO'+nQ`O,5?fOOQO-E<x-E<xO'+yQ?MtO1G6fOOQO,5?h,5?hOOQO-E<z-E<zOOQ[1G3`1G3`O',TQ`O,5=OOOQ[<<Le<<LeO!&iQMhO<<LeO&;rQ`O<<LeO',YQ`O<<LeO%[QlO<<LeOOQ[<<Lg<<LgO9kQ!0LrO<<LgO$#yQ`O<<LgO9UQ`O<<LgO',bQpO1G5TO',mQ`O7+,ROOQ[AN=]AN=]O9kQ!0LrOAN=]OOQ[<= p<= pOOQ[<= q<= qO',uQ`O<= pO',zQ`O<= qOOQ[<<Lo<<LoO'-PQ`O<<LoO'-UQlO<<LoOOQ[1G3y1G3yO>wQ`O7+)jO'-]Q`O<<JOO'-hQ?MtO<<JOOOQO<<Hw<<HwOOQ!0LfAN?dAN?dOOQOAN?]AN?]O$?{Q!0MxOAN?]OOQOAN>|AN>|O%[QlOAN?]OOQO<<Mw<<MwOOQ[G27UG27UO!&iQMhOG27UO#'cQ`OG27UO'-rQ!fOG27UO4UQ!fOG27UO'-yQ`OG27UO'.RQ?MtO<<JeO'.`Q?MvO1G2_O'0UQ?MvO,5?_O'2XQ?MvO,5?aO'4[Q?MvO1G2rO'6_Q?MvO1G2tO'8bQ?MtO<<KWO'8oQ?MtO<<IyOOQO1G1v1G1vO!+rQMhOANAhOOQO7+*a7+*aO'8|Q`O7+*aO'9XQ`O<= fO'9aQ!dO7+*cOOQ!0Lb<<Kp<<KpO$)iQ`O<<KpOCfQ`O<<KpO'9kQ`O<<KpO!&iQMhO<<KpOOQ!0Lb<<Kn<<KnO!BeQpO<<KnO'9vQ!dO<<KpOOQ!0Lb<<Ko<<KoO':QQ`O<<KpO!&iQMhO<<KpO$)iQ`O<<KoO':VQMjOANDaO':aQ!0MvO<<KsOOQO7+*p7+*pO9aQ`O7+*pO':qQ`O<= oOOQ[G27qG27qO9kQ!0LrOG27qO!(yQlO1G5QO':yQ`O7+,QO';RQ`O1G2jO&;rQ`OANBPOOQ[ANBPANBPO!&iQMhOANBPO';WQ`OANBPOOQ[ANBRANBRO9kQ!0LrOANBRO$#yQ`OANBROOQO'#H^'#H^OOQO7+*o7+*oOOQ[G22wG22wOOQ[ANE[ANE[OOQ[ANE]ANE]OOQ[ANBZANBZO';`Q`OANBZOOQ[<<MU<<MUO!(yQlOAN?jOOQOG24wG24wO$?{Q!0MxOG24wO#'cQ`OLD,pOOQ[LD,pLD,pO!&iQMhOLD,pO';eQ!fOLD,pO';lQ?MvO7+'yO'=bQ?MvO,5?_O'?eQ?MvO,5?aO'AhQ?MvO7+'{O'C^QMjOG27SOOQO<<M{<<M{OOQ!0LbANA[ANA[O$)iQ`OANA[OCfQ`OANA[O'CnQ!dOANA[OOQ!0LbANAYANAYO'CuQ`OANA[O!&iQMhOANA[O'DQQ!dOANA[OOQ!0LbANAZANAZOOQO<<N[<<N[OOQ[LD-]LD-]O'D[Q?MtO7+*lOOQO'#Ge'#GeOOQ[G27kG27kO&;rQ`OG27kO!&iQMhOG27kOOQ[G27mG27mO9kQ!0LrOG27mOOQ[G27uG27uO'DfQ?MtOG25UOOQOLD*cLD*cOOQ[!$(![!$(![O#'cQ`O!$(![O!&iQMhO!$(![O'DpQ!0MzOG27SOOQ!0LbG26vG26vO$)iQ`OG26vO'GRQ`OG26vOCfQ`OG26vO'G^Q!dOG26vO!&iQMhOG26vOOQ[LD-VLD-VO&;rQ`OLD-VOOQ[LD-XLD-XOOQ[!)9Ev!)9EvO#'cQ`O!)9EvOOQ!0LbLD,bLD,bO$)iQ`OLD,bOCfQ`OLD,bO'GeQ`OLD,bO'GpQ!dOLD,bOOQ[!$(!q!$(!qOOQ[!.K;b!.K;bO'GwQ?MvOG27SOOQ!0Lb!$( |!$( |O$)iQ`O!$( |OCfQ`O!$( |O'ImQ`O!$( |OOQ!0Lb!)9Eh!)9EhO$)iQ`O!)9EhOCfQ`O!)9EhOOQ!0Lb!.K;S!.K;SO$)iQ`O!.K;SOOQ!0Lb!4/0n!4/0nO!(yQlO'#DxO1PQ`O'#EVO'IxQ!fO'#JpO'JPQ!L^O'#DtO'JWQlO'#D|O'J_Q!fO'#CiO'LuQ!fO'#CiO!(yQlO'#EOO'MVQlO,5;XO!(yQlO,5;cO!(yQlO,5;cO!(yQlO,5;cO!(yQlO,5;cO!(yQlO,5;cO!(yQlO,5;cO!(yQlO,5;cO!(yQlO,5;cO!(yQlO,5;cO!(yQlO,5;cO!(yQlO'#InO( YQ`O,5<hO!(yQlO,5;cO( bQMhO,5;cO(!{QMhO,5;cO!(yQlO,5;vO!&iQMhO'#GlO( bQMhO'#GlO!&iQMhO'#GnO( bQMhO'#GnO1SQ`O'#DXO1SQ`O'#DXO!&iQMhO'#GOO( bQMhO'#GOO!&iQMhO'#GQO( bQMhO'#GQO!&iQMhO'#G`O( bQMhO'#G`O!(yQlO,5:hO(#SQpO'#D]O(#^QpO'#JtO!(yQlO,5@mO'MVQlO1G0sO(#hQ?MtO'#CiO!(yQlO1G2OO!&iQMhO'#IsO( bQMhO'#IsO!&iQMhO'#IuO( bQMhO'#IuO(#rQ!dO'#CrO!&iQMhO,5<sO( bQMhO,5<sO'MVQlO1G2QO!(yQlO7+&yO!&iQMhO1G2_O( bQMhO1G2_O!&iQMhO'#IsO( bQMhO'#IsO!&iQMhO'#IuO( bQMhO'#IuO!&iQMhO1G2aO( bQMhO1G2aO'MVQlO7+'lO'MVQlO7+&_O!&iQMhOANAhO( bQMhOANAhO($VQ`O'#EmO($[Q`O'#EmO($dQ`O'#F[O($iQ`O'#EwO($nQ`O'#KRO($yQ`O'#KPO(%UQ`O,5;XO(%ZQMjO,5<dO(%bQ`O'#GXO(%gQ`O'#GXO(%lQ`O,5<fO(%tQ`O,5;XO(%|Q?MtO1G1_O(&TQ`O,5<sO(&YQ`O,5<sO(&_Q`O,5<uO(&dQ`O,5<uO(&iQ`O1G2QO(&nQ`O1G0sO(&sQMjO<<K|O(&zQMjO<<K|O7eQMhO'#F{O9UQ`O'#FzOAdQ`O'#ElO!(yQlO,5;sO!3^Q`O'#GXO!3^Q`O'#GXO!3^Q`O'#GZO!3^Q`O'#GZO!+rQMhO7+(bO!+rQMhO7+(bO%-ZQ!dO1G2vO%-ZQ!dO1G2vO!&iQMhO,5=[O!&iQMhO,5=[",
27388
  stateData: "(!Z~O'tOS'uOSSOS'vRQ~OPYOQYORfOX!VO`qOczOdyOlkOnYOokOpkOvkOxYOzYO!PWO!TkO!UkO![XO!fuO!kZO!nYO!oYO!pYO!rvO!twO!wxO!{]O#s!PO$T|O%b}O%d!QO%f!OO%g!OO%h!OO%k!RO%m!SO%p!TO%q!TO%s!UO&P!WO&V!XO&X!YO&Z!ZO&]![O&`!]O&f!^O&l!_O&n!`O&p!aO&r!bO&t!cO'{SO'}TO(QUO(XVO(g[O(uiO~OVtO~P`OPYOQYORfOc!jOd!iOlkOnYOokOpkOvkOxYOzYO!PWO!TkO!UkO![!eO!fuO!kZO!nYO!oYO!pYO!rvO!t!gO!w!hO$T!kO'{!dO'}TO(QUO(XVO(g[O(uiO~O`!wOo!nO!P!oO!_!yO!`!vO!a!vO!{:jO#P!pO#Q!pO#R!xO#S!pO#T!pO#W!zO#X!zO'|!lO'}TO(QUO([!mO(g!sO~O'v!{O~OP[XZ[X`[Xn[X|[X}[X!P[X!Y[X!h[X!i[X!k[X!o[X#[[X#geX#j[X#k[X#l[X#m[X#n[X#o[X#p[X#q[X#r[X#t[X#v[X#x[X#y[X$O[X'r[X(X[X(i[X(p[X(q[X~O!d$|X~P(qO^!}O'}#PO(O!}O(P#PO~O^#QO(P#PO(Q#PO(R#QO~Ot#SO!R#TO(Y#TO(Z#VO~OPYOQYORfOc!jOd!iOlkOnYOokOpkOvkOxYOzYO!PWO!TkO!UkO![!eO!fuO!kZO!nYO!oYO!pYO!rvO!t!gO!w!hO$T!kO'{:nO'}TO(QUO(XVO(g[O(uiO~O!X#ZO!Y#WO!V(_P!V(mP~P+}O!Z#cO~P`OPYOQYORfOc!jOd!iOnYOokOpkOvkOxYOzYO!PWO!TkO!UkO![!eO!fuO!kZO!nYO!oYO!pYO!rvO!t!gO!w!hO$T!kO'}TO(QUO(XVO(g[O(uiO~Ol#mO!X#iO!{]O#e#lO#f#iO'{:oO!j(jP~P.iO!k#oO'{#nO~O!w#sO!{]O%b#tO~O#g#uO~O!d#vO#g#uO~OP$^OZ$eOn$RO|#zO}#{O!P#|O!Y$bO!h$TO!i#xO!k#yO!o$^O#j$PO#k$QO#l$QO#m$QO#n$SO#o$TO#p$TO#q$dO#r$TO#t$UO#v$WO#x$YO#y$ZO(XVO(i$[O(p#}O(q$OO~O`(]X'r(]X'p(]X!j(]X!V(]X![(]X%c(]X!d(]X~P1qO#[$fO$O$fOP(^XZ(^Xn(^X|(^X}(^X!P(^X!Y(^X!h(^X!k(^X!o(^X#j(^X#k(^X#l(^X#m(^X#n(^X#o(^X#p(^X#q(^X#r(^X#t(^X#v(^X#x(^X#y(^X(X(^X(i(^X(p(^X(q(^X![(^X%c(^X~O`(^X!i(^X'r(^X'p(^X!V(^X!j(^Xr(^X!d(^X~P4XO#[$fO~O$Y$hO$[$gO$c$mO~ORfO![$nO$f$oO$h$qO~Og%WOl%XOn$uOo$tOp$tOv%YOx%ZOz%[O!P$|O![$}O!f%aO!k$yO#f%bO$T%_O$o%]O$q%^O$t%`O'{$sO'}TO(QUO(X$vO(p%OO(q%QOf(UP~O!k%cO~O!P%fO![%gO'{%eO~O!d%kO~O`%lO'r%lO~O'|!lO~P%[O%h%sO~P%[Og%WO!k%cO'{%eO'|!lO~Od%zO!k%cO'{%eO~O#r$TO~O|&PO![%|O!k&OO%d&SO'{%eO'|!lO'}TO(QUO_)OP~O!w#sO~O%m&UO!P(zX![(zX'{(zX~O'{&VO~O!t&[O#s!PO%d!QO%f!OO%g!OO%h!OO%k!RO%m!SO%p!TO%q!TO~Oc&aOd&`O!w&^O%b&_O%u&]O~P;xOc&dOdyO![&cO!t&[O!wxO!{]O#s!PO%b}O%f!OO%g!OO%h!OO%k!RO%m!SO%p!TO%q!TO%s!UO~Oa&gO#[&jO%d&eO'|!lO~P<}O!k&kO!t&oO~O!k#oO~O![XO~O`%lO'q&wO'r%lO~O`%lO'q&zO'r%lO~O`%lO'q&|O'r%lO~O'p[X!V[Xr[X!j[X&T[X![[X%c[X!d[X~P(qO!_'ZO!`'SO!a'SO'|!lO'}TO(QUO~Oo'QO!P'PO!X'TO(['OO!Z(`P!Z(oP~P@UOj'^O!['[O'{%eO~Od'cO!k%cO'{%eO~O|&PO!k&OO~Oo!nO!P!oO!{:jO#P!pO#Q!pO#S!pO#T!pO'|!lO'}TO(QUO([!mO(g!sO~O!_'iO!`'hO!a'hO#R!pO#W'jO#X'jO~PApO`%lOg%WO!d#vO!k%cO'r%lO(i'lO~O!o'pO#['nO~PCOOo!nO!P!oO'}TO(QUO([!mO(g!sO~O![XOo(eX!P(eX!_(eX!`(eX!a(eX!{(eX#P(eX#Q(eX#R(eX#S(eX#T(eX#W(eX#X(eX'|(eX'}(eX(Q(eX([(eX(g(eX~O!`'hO!a'hO'|!lO~PCnO'w'tO'x'tO'y'vO~O^!}O'}'xO(O!}O(P'xO~O^#QO(P'xO(Q'xO(R#QO~Ot#SO!R#TO(Y#TO(Z'|O~O!X(OO!V'PX!V'VX!Y'PX!Y'VX~P+}O!Y(QO!V(_X~OP$^OZ$eOn$RO|#zO}#{O!P#|O!Y(QO!h$TO!i#xO!k#yO!o$^O#j$PO#k$QO#l$QO#m$QO#n$SO#o$TO#p$TO#q$dO#r$TO#t$UO#v$WO#x$YO#y$ZO(XVO(i$[O(p#}O(q$OO~O!V(_X~PGbO!V(VO~O!V(lX!Y(lX!d(lX!j(lX(i(lX~O#[(lX#g#`X!Z(lX~PIhO#[(WO!V(nX!Y(nX~O!Y(XO!V(mX~O!V([O~O#[$fO~PIhO!Z(]O~P`O|#zO}#{O!P#|O!i#xO!k#yO(XVOP!maZ!man!ma!Y!ma!h!ma!o!ma#j!ma#k!ma#l!ma#m!ma#n!ma#o!ma#p!ma#q!ma#r!ma#t!ma#v!ma#x!ma#y!ma(i!ma(p!ma(q!ma~O`!ma'r!ma'p!ma!V!ma!j!mar!ma![!ma%c!ma!d!ma~PKOO!j(^O~O!d#vO#[(_O(i'lO!Y(kX`(kX'r(kX~O!j(kX~PMnO!P%fO![%gO!{]O#e(dO#f(cO'{%eO~O!Y(eO!j(jX~O!j(gO~O!P%fO![%gO#f(cO'{%eO~OP(^XZ(^Xn(^X|(^X}(^X!P(^X!Y(^X!h(^X!i(^X!k(^X!o(^X#j(^X#k(^X#l(^X#m(^X#n(^X#o(^X#p(^X#q(^X#r(^X#t(^X#v(^X#x(^X#y(^X(X(^X(i(^X(p(^X(q(^X~O!d#vO!j(^X~P! [O|(hO}(iO!i#xO!k#yO!{!za!P!za~O!w!za%b!za![!za#e!za#f!za'{!za~P!#`O!w(mO~OPYOQYORfOc!jOd!iOlkOnYOokOpkOvkOxYOzYO!PWO!TkO!UkO![XO!fuO!kZO!nYO!oYO!pYO!rvO!t!gO!w!hO$T!kO'{!dO'}TO(QUO(XVO(g[O(uiO~Og%WOl%XOn$uOo$tOp$tOv%YOx%ZOz;WO!P$|O![$}O!f<hO!k$yO#f;^O$T%_O$o;YO$q;[O$t%`O'{(qO'}TO(QUO(X$vO(p%OO(q%QO~O#g(sO~Og%WOl%XOn$uOo$tOp$tOv%YOx%ZOz%[O!P$|O![$}O!f%aO!k$yO#f%bO$T%_O$o%]O$q%^O$t%`O'{(qO'}TO(QUO(X$vO(p%OO(q%QO~Of(bP~P!(SO!X(wO!j(cP~P%[O([(yO(g[O~O!P({O!k#yO([(yO(g[O~OP:iOQ:iORfOc<dOd!iOlkOn:iOokOpkOvkOx:iOz:iO!PWO!TkO!UkO![!eO!f:lO!kZO!n:iO!o:iO!p:iO!r:mO!t:pO!w!hO$T!kO'{)ZO'}TO(QUO(XVO(g[O(u<bO~O})^O!k#yO~O!Y$bO`$ma'r$ma'p$ma!j$ma!V$ma![$ma%c$ma!d$ma~O#s)bO~P!&dO|)eO!d)dO![$ZX$W$ZX$Y$ZX$[$ZX$c$ZX~O!d)dO![(rX$W(rX$Y(rX$[(rX$c(rX~O|)eO~P!.OO|)eO![(rX$W(rX$Y(rX$[(rX$c(rX~O![)gO$W)kO$Y)fO$[)fO$c)lO~O!X)oO~P!*fO$Y$hO$[$gO$c)sO~Oj$uX|$uX!P$uX!i$uX(p$uX(q$uX~OfiXf$uXjiX!YiX#[iX~P!/tOo)uO~Ot)vO(Y)wO(Z)yO~Oj*SO|){O!P)|O(p%OO(q%QO~Of)zO~P!0}Of*TO~Og%WOl%XOn$uOo$tOp$tOv%YOx%ZOz;WO!P*VO![*WO!f<hO!k$yO#f;^O$T%_O$o;YO$q;[O$t%`O'}TO(QUO(X$vO(p%OO(q%QO~O!X*ZO'{*UO!j(vP~P!1lO#g*]O~O!k*^O~Og%WOl%XOn$uOo$tOp$tOv%YOx%ZOz;WO!P$|O![$}O!f<hO!k$yO#f;^O$T%_O$o;YO$q;[O$t%`O'{*`O'}TO(QUO(X$vO(p%OO(q%QO~O!X*cO!V(wP~P!3kOn*oO!P*gO!_*mO!`*fO!a*fO!k*^O#W*nO%Y*iO'|!lO([!mO~O!Z*lO~P!5`O!i#xOj(WX|(WX!P(WX(p(WX(q(WX!Y(WX#[(WX~Of(WX#|(WX~P!6XOj*tO#[*sOf(VX!Y(VX~O!Y*uOf(UX~O'{&VOf(UP~O!k*|O~O'{(qO~Ol+QO!P%fO!X#iO![%gO!{]O#e#lO#f#iO'{%eO!j(jP~O!d#vO#g+RO~O!P%fO!X+TO!Y(XO![%gO'{%eO!V(mP~Oo'WO!P+VO!X+UO'}TO(QUO([(yO~O!Z(oP~P!9SO!Y+WO`({X'r({X~OP$^OZ$eOn$RO|#zO}#{O!P#|O!h$TO!i#xO!k#yO!o$^O#j$PO#k$QO#l$QO#m$QO#n$SO#o$TO#p$TO#q$dO#r$TO#t$UO#v$WO#x$YO#y$ZO(XVO(i$[O(p#}O(q$OO~O`!ea!Y!ea'r!ea'p!ea!V!ea!j!ear!ea![!ea%c!ea!d!ea~P!9zO|#zO}#{O!P#|O!i#xO!k#yO(XVOP!qaZ!qan!qa!Y!qa!h!qa!o!qa#j!qa#k!qa#l!qa#m!qa#n!qa#o!qa#p!qa#q!qa#r!qa#t!qa#v!qa#x!qa#y!qa(i!qa(p!qa(q!qa~O`!qa'r!qa'p!qa!V!qa!j!qar!qa![!qa%c!qa!d!qa~P!<eO|#zO}#{O!P#|O!i#xO!k#yO(XVOP!saZ!san!sa!Y!sa!h!sa!o!sa#j!sa#k!sa#l!sa#m!sa#n!sa#o!sa#p!sa#q!sa#r!sa#t!sa#v!sa#x!sa#y!sa(i!sa(p!sa(q!sa~O`!sa'r!sa'p!sa!V!sa!j!sar!sa![!sa%c!sa!d!sa~P!?OOg%WOj+aO!['[O%c+`O~O!d+cO`(TX![(TX'r(TX!Y(TX~O`%lO![XO'r%lO~Og%WO!k%cO~Og%WO!k%cO'{%eO~O!d#vO#g(sO~Oa+nO%d+oO'{+kO'}TO(QUO!Z)PP~O!Y+pO_)OX~OZ+tO~O_+uO~O![%|O'{%eO'|!lO_)OP~Og%WO#[+zO~Og%WOj+}O![$}O~O![,PO~O|,RO![XO~O%h%sO~O!w,WO~Od,]O~Oa,^O'{#nO'}TO(QUO!Z(}P~Od%zO~O%d!QO'{&VO~P<}OZ,cO_,bO~OPYOQYORfOczOdyOlkOnYOokOpkOvkOxYOzYO!PWO!TkO!UkO!fuO!kZO!nYO!oYO!pYO!rvO!wxO!{]O%b}O'}TO(QUO(XVO(g[O(uiO~O![!eO!t!gO$T!kO'{!dO~P!FRO_,bO`%lO'r%lO~OPYOQYORfOc!jOd!iOlkOnYOokOpkOvkOxYOzYO!PWO!TkO!UkO![!eO!fuO!kZO!nYO!oYO!pYO!rvO!w!hO$T!kO'{!dO'}TO(QUO(XVO(g[O(uiO~O`,hO!twO#s!OO%f!OO%g!OO%h!OO~P!HkO!k&kO~O&V,nO~O![,pO~O&h,rO&j,sOP&eaQ&eaR&eaX&ea`&eac&ead&eal&ean&eao&eap&eav&eax&eaz&ea!P&ea!T&ea!U&ea![&ea!f&ea!k&ea!n&ea!o&ea!p&ea!r&ea!t&ea!w&ea!{&ea#s&ea$T&ea%b&ea%d&ea%f&ea%g&ea%h&ea%k&ea%m&ea%p&ea%q&ea%s&ea&P&ea&V&ea&X&ea&Z&ea&]&ea&`&ea&f&ea&l&ea&n&ea&p&ea&r&ea&t&ea'p&ea'{&ea'}&ea(Q&ea(X&ea(g&ea(u&ea!Z&ea&^&eaa&ea&c&ea~O'{,xO~Og!bX!Y!OX!Z!OX!d!OX!d!bX!k!bX#[!OX~O!Y!bX!Z!bX~P# qO!d,}O#[,|Og(aX!Y#dX!Y(aX!Z#dX!Z(aX!d(aX!k(aX~Og%WO!d-PO!k%cO!Y!^X!Z!^X~Oo!nO!P!oO'}TO(QUO([!mO~OP:iOQ:iORfOc<dOd!iOlkOn:iOokOpkOvkOx:iOz:iO!PWO!TkO!UkO![!eO!f:lO!kZO!n:iO!o:iO!p:iO!r:mO!t:pO!w!hO$T!kO'}TO(QUO(XVO(g[O(u<bO~O'{;dO~P##uO!Y-TO!Z(`X~O!Z-VO~O!d,}O#[,|O!Y#dX!Z#dX~O!Y-WO!Z(oX~O!Z-YO~O!`-ZO!a-ZO'|!lO~P##dO!Z-^O~P'_Oj-aO!['[O~O!V-fO~Oo!za!_!za!`!za!a!za#P!za#Q!za#R!za#S!za#T!za#W!za#X!za'|!za'}!za(Q!za([!za(g!za~P!#`O!o-kO#[-iO~PCOO!`-mO!a-mO'|!lO~PCnO`%lO#[-iO'r%lO~O`%lO!d#vO#[-iO'r%lO~O`%lO!d#vO!o-kO#[-iO'r%lO(i'lO~O'w'tO'x'tO'y-rO~Or-sO~O!V'Pa!Y'Pa~P!9zO!X-wO!V'PX!Y'PX~P%[O!Y(QO!V(_a~O!V(_a~PGbO!Y(XO!V(ma~O!P%fO!X-{O![%gO'{%eO!V'VX!Y'VX~O#[-}O!Y(ka!j(ka`(ka'r(ka~O!d#vO~P#+{O!Y(eO!j(ja~O!P%fO![%gO#f.RO'{%eO~Ol.WO!P%fO!X.TO![%gO!{]O#e.VO#f.TO'{%eO!Y'YX!j'YX~O}.[O!k#yO~Og%WOj._O!['[O%c.^O~O`#_i!Y#_i'r#_i'p#_i!V#_i!j#_ir#_i![#_i%c#_i!d#_i~P!9zOj<nO|){O!P)|O(p%OO(q%QO~O#g#Za`#Za#[#Za'r#Za!Y#Za!j#Za![#Za!V#Za~P#.wO#g(WXP(WXZ(WX`(WXn(WX}(WX!h(WX!k(WX!o(WX#j(WX#k(WX#l(WX#m(WX#n(WX#o(WX#p(WX#q(WX#r(WX#t(WX#v(WX#x(WX#y(WX'r(WX(X(WX(i(WX!j(WX!V(WX'p(WXr(WX![(WX%c(WX!d(WX~P!6XO!Y.lOf(bX~P!0}Of.nO~O!Y.oO!j(cX~P!9zO!j.rO~O!V.tO~OP$^O|#zO}#{O!P#|O!i#xO!k#yO!o$^O(XVOZ#ii`#iin#ii!Y#ii!h#ii#k#ii#l#ii#m#ii#n#ii#o#ii#p#ii#q#ii#r#ii#t#ii#v#ii#x#ii#y#ii'r#ii(i#ii(p#ii(q#ii'p#ii!V#ii!j#iir#ii![#ii%c#ii!d#ii~O#j#ii~P#2sO#j$PO~P#2sOP$^O|#zO}#{O!P#|O!i#xO!k#yO!o$^O#j$PO#k$QO#l$QO#m$QO(XVOZ#ii`#ii!Y#ii!h#ii#n#ii#o#ii#p#ii#q#ii#r#ii#t#ii#v#ii#x#ii#y#ii'r#ii(i#ii(p#ii(q#ii'p#ii!V#ii!j#iir#ii![#ii%c#ii!d#ii~On#ii~P#5eOn$RO~P#5eOP$^On$RO|#zO}#{O!P#|O!i#xO!k#yO!o$^O#j$PO#k$QO#l$QO#m$QO#n$SO(XVO`#ii!Y#ii#t#ii#v#ii#x#ii#y#ii'r#ii(i#ii(p#ii(q#ii'p#ii!V#ii!j#iir#ii![#ii%c#ii!d#ii~OZ#ii!h#ii#o#ii#p#ii#q#ii#r#ii~P#8VOZ$eO!h$TO#o$TO#p$TO#q$dO#r$TO~P#8VOP$^OZ$eOn$RO|#zO}#{O!P#|O!h$TO!i#xO!k#yO!o$^O#j$PO#k$QO#l$QO#m$QO#n$SO#o$TO#p$TO#q$dO#r$TO#t$UO(XVO(q$OO`#ii!Y#ii#x#ii#y#ii'r#ii(i#ii(p#ii'p#ii!V#ii!j#iir#ii![#ii%c#ii!d#ii~O#v$WO~P#;WO#v#ii~P#;WOP$^OZ$eOn$RO|#zO}#{O!P#|O!h$TO!i#xO!k#yO!o$^O#j$PO#k$QO#l$QO#m$QO#n$SO#o$TO#p$TO#q$dO#r$TO#t$UO(XVO`#ii!Y#ii#x#ii#y#ii'r#ii(i#ii'p#ii!V#ii!j#iir#ii![#ii%c#ii!d#ii~O#v#ii(p#ii(q#ii~P#=xO#v$WO(p#}O(q$OO~P#=xOP$^OZ$eOn$RO|#zO}#{O!P#|O!h$TO!i#xO!k#yO!o$^O#j$PO#k$QO#l$QO#m$QO#n$SO#o$TO#p$TO#q$dO#r$TO#t$UO#v$WO#x$YO(XVO(p#}O(q$OO~O`#ii!Y#ii#y#ii'r#ii(i#ii'p#ii!V#ii!j#iir#ii![#ii%c#ii!d#ii~P#@pOP[XZ[Xn[X|[X}[X!P[X!h[X!i[X!k[X!o[X#[[X#geX#j[X#k[X#l[X#m[X#n[X#o[X#p[X#q[X#r[X#t[X#v[X#x[X#y[X$O[X(X[X(i[X(p[X(q[X!Y[X!Z[X~O#|[X~P#CZOP$^OZ;QOn:tO|#zO}#{O!P#|O!h:vO!i#xO!k#yO!o$^O#j:rO#k:sO#l:sO#m:sO#n:uO#o:vO#p:vO#q;PO#r:vO#t:wO#v:yO#x:{O#y:|O(XVO(i$[O(p#}O(q$OO~O#|.vO~P#EhO#[;RO$O;RO#|(^X!Z(^X~P! [O`']a!Y']a'r']a'p']a!j']a!V']ar']a![']a%c']a!d']a~P!9zOP#iiZ#ii`#iin#ii}#ii!Y#ii!h#ii!i#ii!k#ii!o#ii#j#ii#k#ii#l#ii#m#ii#n#ii#o#ii#p#ii#q#ii#r#ii#t#ii#v#ii#x#ii#y#ii'r#ii(X#ii(i#ii'p#ii!V#ii!j#iir#ii![#ii%c#ii!d#ii~P#.wO`#}i!Y#}i'r#}i'p#}i!V#}i!j#}ir#}i![#}i%c#}i!d#}i~P!9zO$Y.{O$[.{O~O$Y.|O$[.|O~O!d)dO#[.}O![$`X$W$`X$Y$`X$[$`X$c$`X~O!X/OO~O![)gO$W/QO$Y)fO$[)fO$c/RO~O!Y:}O!Z(]X~P#EhO!Z/SO~O!d)dO$c(rX~O$c/UO~Ot)vO(Y)wO(Z/XO~O!V/]O~P!&dO(p%OOj%Za|%Za!P%Za(q%Za!Y%Za#[%Za~Of%Za#|%Za~P#MxO(q%QOj%]a|%]a!P%]a(p%]a!Y%]a#[%]a~Of%]a#|%]a~P#NkO!YeX!deX!jeX!j$uX(ieX~P!/tO!X/fO!Y(XO'{/eO!V(mP!V(wP~P!1lOn*oO!_*mO!`*fO!a*fO!k*^O#W*nO%Y*iO'|!lO~Oo'WO!P/gO!X+UO!Z*lO'}TO(QUO([;aO!Z(oP~P$!UO!j/hO~P#.wO!Y/iO!d#vO(i'lO!j(vX~O!j/nO~O!P%fO!X*ZO![%gO'{%eO!j(vP~O#g/pO~O!V$uX!Y$uX!d$|X~P!/tO!Y/qO!V(wX~P#.wO!d/sO~O!V/uO~Og%WOn/yO!d#vO!k%cO(i'lO~O'{/{O~O!d+cO~O`%lO!Y0PO'r%lO~O!Z0RO~P!5`O!`0SO!a0SO'|!lO([!mO~O!P0UO([!mO~O#W0VO~Of%Za!Y%Za#[%Za#|%Za~P!0}Of%]a!Y%]a#[%]a#|%]a~P!0}O'{&VOf'fX!Y'fX~O!Y*uOf(Ua~Of0`O~O|0aO}0aO!P0bOjya(pya(qya!Yya#[ya~Ofya#|ya~P$'wO|){O!P)|Oj$na(p$na(q$na!Y$na#[$na~Of$na#|$na~P$(mO|){O!P)|Oj$pa(p$pa(q$pa!Y$pa#[$pa~Of$pa#|$pa~P$)`O#g0dO~Of%Oa!Y%Oa#[%Oa#|%Oa~P!0}O!d#vO~O#g0gO~O!Y+WO`({a'r({a~O|#zO}#{O!P#|O!i#xO!k#yO(XVOP!qiZ!qin!qi!Y!qi!h!qi!o!qi#j!qi#k!qi#l!qi#m!qi#n!qi#o!qi#p!qi#q!qi#r!qi#t!qi#v!qi#x!qi#y!qi(i!qi(p!qi(q!qi~O`!qi'r!qi'p!qi!V!qi!j!qir!qi![!qi%c!qi!d!qi~P$*}Og%WOn$uOo$tOp$tOv%YOx%ZOz;WO!P$|O![$}O!f<hO!k$yO#f;^O$T%_O$o;YO$q;[O$t%`O'}TO(QUO(X$vO(p%OO(q%QO~Ol0qO'{0pO~P$-hO!d+cO`(Ta![(Ta'r(Ta!Y(Ta~O#g0wO~OZ[X!YeX!ZeX~O!Y0xO!Z)PX~O!Z0zO~OZ0{O~Oa0}O'{+kO'}TO(QUO~O![%|O'{%eO_'nX!Y'nX~O!Y+pO_)Oa~O!j1QO~P!9zOZ1TO~O_1UO~O#[1XO~Oj1[O![$}O~O([(yO!Z(|P~Og%WOj1eO![1bO%c1dO~OZ1oO!Y1mO!Z(}X~O!Z1pO~O_1rO`%lO'r%lO~O'{#nO'}TO(QUO~O#[$fO$O$fOP(^XZ(^Xn(^X|(^X}(^X!P(^X!Y(^X!h(^X!k(^X!o(^X#j(^X#k(^X#l(^X#m(^X#n(^X#o(^X#p(^X#q(^X#t(^X#v(^X#x(^X#y(^X(X(^X(i(^X(p(^X(q(^X~O#r1uO&T1vO`(^X!i(^X~P$3OO#[$fO#r1uO&T1vO~O`1xO~P%[O`1zO~O&^1}OP&[iQ&[iR&[iX&[i`&[ic&[id&[il&[in&[io&[ip&[iv&[ix&[iz&[i!P&[i!T&[i!U&[i![&[i!f&[i!k&[i!n&[i!o&[i!p&[i!r&[i!t&[i!w&[i!{&[i#s&[i$T&[i%b&[i%d&[i%f&[i%g&[i%h&[i%k&[i%m&[i%p&[i%q&[i%s&[i&P&[i&V&[i&X&[i&Z&[i&]&[i&`&[i&f&[i&l&[i&n&[i&p&[i&r&[i&t&[i'p&[i'{&[i'}&[i(Q&[i(X&[i(g&[i(u&[i!Z&[ia&[i&c&[i~Oa2TO!Z2RO&c2SO~P`O![XO!k2VO~O&j,sOP&eiQ&eiR&eiX&ei`&eic&eid&eil&ein&eio&eip&eiv&eix&eiz&ei!P&ei!T&ei!U&ei![&ei!f&ei!k&ei!n&ei!o&ei!p&ei!r&ei!t&ei!w&ei!{&ei#s&ei$T&ei%b&ei%d&ei%f&ei%g&ei%h&ei%k&ei%m&ei%p&ei%q&ei%s&ei&P&ei&V&ei&X&ei&Z&ei&]&ei&`&ei&f&ei&l&ei&n&ei&p&ei&r&ei&t&ei'p&ei'{&ei'}&ei(Q&ei(X&ei(g&ei(u&ei!Z&ei&^&eia&ei&c&ei~O!V2]O~O!Y!^a!Z!^a~P#EhOo!nO!P!oO!X2cO([!mO!Y'QX!Z'QX~P@UO!Y-TO!Z(`a~O!Y'WX!Z'WX~P!9SO!Y-WO!Z(oa~O!Z2jO~P'_O`%lO#[2sO'r%lO~O`%lO!d#vO#[2sO'r%lO~O`%lO!d#vO!o2wO#[2sO'r%lO(i'lO~O`%lO'r%lO~P!9zO!Y$bOr$ma~O!V'Pi!Y'Pi~P!9zO!Y(QO!V(_i~O!Y(XO!V(mi~O!V(ni!Y(ni~P!9zO!Y(ki!j(ki`(ki'r(ki~P!9zO#[2yO!Y(ki!j(ki`(ki'r(ki~O!Y(eO!j(ji~O!P%fO![%gO!{]O#e3OO#f2}O'{%eO~O!P%fO![%gO#f2}O'{%eO~Oj3VO!['[O%c3UO~Og%WOj3VO!['[O%c3UO~O#g%ZaP%ZaZ%Za`%Zan%Za}%Za!h%Za!i%Za!k%Za!o%Za#j%Za#k%Za#l%Za#m%Za#n%Za#o%Za#p%Za#q%Za#r%Za#t%Za#v%Za#x%Za#y%Za'r%Za(X%Za(i%Za!j%Za!V%Za'p%Zar%Za![%Za%c%Za!d%Za~P#MxO#g%]aP%]aZ%]a`%]an%]a}%]a!h%]a!i%]a!k%]a!o%]a#j%]a#k%]a#l%]a#m%]a#n%]a#o%]a#p%]a#q%]a#r%]a#t%]a#v%]a#x%]a#y%]a'r%]a(X%]a(i%]a!j%]a!V%]a'p%]ar%]a![%]a%c%]a!d%]a~P#NkO#g%ZaP%ZaZ%Za`%Zan%Za}%Za!Y%Za!h%Za!i%Za!k%Za!o%Za#j%Za#k%Za#l%Za#m%Za#n%Za#o%Za#p%Za#q%Za#r%Za#t%Za#v%Za#x%Za#y%Za'r%Za(X%Za(i%Za!j%Za!V%Za'p%Za#[%Zar%Za![%Za%c%Za!d%Za~P#.wO#g%]aP%]aZ%]a`%]an%]a}%]a!Y%]a!h%]a!i%]a!k%]a!o%]a#j%]a#k%]a#l%]a#m%]a#n%]a#o%]a#p%]a#q%]a#r%]a#t%]a#v%]a#x%]a#y%]a'r%]a(X%]a(i%]a!j%]a!V%]a'p%]a#[%]ar%]a![%]a%c%]a!d%]a~P#.wO#gyaPyaZya`yanya!hya!iya!kya!oya#jya#kya#lya#mya#nya#oya#pya#qya#rya#tya#vya#xya#yya'rya(Xya(iya!jya!Vya'pyarya![ya%cya!dya~P$'wO#g$naP$naZ$na`$nan$na}$na!h$na!i$na!k$na!o$na#j$na#k$na#l$na#m$na#n$na#o$na#p$na#q$na#r$na#t$na#v$na#x$na#y$na'r$na(X$na(i$na!j$na!V$na'p$nar$na![$na%c$na!d$na~P$(mO#g$paP$paZ$pa`$pan$pa}$pa!h$pa!i$pa!k$pa!o$pa#j$pa#k$pa#l$pa#m$pa#n$pa#o$pa#p$pa#q$pa#r$pa#t$pa#v$pa#x$pa#y$pa'r$pa(X$pa(i$pa!j$pa!V$pa'p$par$pa![$pa%c$pa!d$pa~P$)`O#g%OaP%OaZ%Oa`%Oan%Oa}%Oa!Y%Oa!h%Oa!i%Oa!k%Oa!o%Oa#j%Oa#k%Oa#l%Oa#m%Oa#n%Oa#o%Oa#p%Oa#q%Oa#r%Oa#t%Oa#v%Oa#x%Oa#y%Oa'r%Oa(X%Oa(i%Oa!j%Oa!V%Oa'p%Oa#[%Oar%Oa![%Oa%c%Oa!d%Oa~P#.wO`#_q!Y#_q'r#_q'p#_q!V#_q!j#_qr#_q![#_q%c#_q!d#_q~P!9zOf'RX!Y'RX~P!(SO!Y.lOf(ba~O!X3aO!Y'SX!j'SX~P%[O!Y.oO!j(ca~O!Y.oO!j(ca~P!9zO!V3dO~O#|!ma!Z!ma~PKOO#|!ea!Y!ea!Z!ea~P#EhO#|!qa!Z!qa~P!<eO#|!sa!Z!sa~P!?OORfO![3vO$a3wO~O!Z3{O~Or3|O~P#.wO`$jq!Y$jq'r$jq'p$jq!V$jq!j$jqr$jq![$jq%c$jq!d$jq~P!9zO!V3}O~P#.wO|){O!P)|O(q%QOj'ba(p'ba!Y'ba#['ba~Of'ba#|'ba~P%,rO|){O!P)|Oj'da(p'da(q'da!Y'da#['da~Of'da#|'da~P%-eO(i$[O~P#.wO!VeX!V$uX!YeX!Y$uX!d$|X#[eX~P!/tO'{;jO~P!1lOlkO'{4PO~P.iO!P%fO!X4RO![%gO'{%eO!Y'^X!j'^X~O!Y/iO!j(va~O!Y/iO!d#vO!j(va~O!Y/iO!d#vO(i'lO!j(va~Of$wi!Y$wi#[$wi#|$wi~P!0}O!X4ZO!V'`X!Y'`X~P!3kO!Y/qO!V(wa~O!Y/qO!V(wa~P#.wO!d#vO#r4cO~On4fO!d#vO(i'lO~O(p%OOj%Zi|%Zi!P%Zi(q%Zi!Y%Zi#[%Zi~Of%Zi#|%Zi~P%1sO(q%QOj%]i|%]i!P%]i(p%]i!Y%]i#[%]i~Of%]i#|%]i~P%2fOf(Vi!Y(Vi~P!0}O#[4mOf(Vi!Y(Vi~P!0}O!j4pO~O`$kq!Y$kq'r$kq'p$kq!V$kq!j$kqr$kq![$kq%c$kq!d$kq~P!9zO!V4tO~O!Y4uO![(xX~P#.wO!i#xO~P4XO`$uX![$uX%W[X'r$uX!Y$uX~P!/tO%W4wO`kXjkX|kX!PkX![kX'rkX(pkX(qkX!YkX~O%W4wO~Oa4}O%d5OO'{+kO'}TO(QUO!Y'mX!Z'mX~O!Y0xO!Z)Pa~OZ5SO~O_5TO~O`%lO'r%lO~P#.wO![$}O~P#.wO!Y5]O#[5_O!Z(|X~O!Z5`O~Oo!nO!P5aO!_!yO!`!vO!a!vO!{:jO#P!pO#Q!pO#R!pO#S!pO#T!pO#W5fO#X!zO'|!lO'}TO(QUO([!mO(g!sO~O!Z5eO~P%7wOj5kO![1bO%c5jO~Og%WOj5kO![1bO%c5jO~Oa5rO'{#nO'}TO(QUO!Y'lX!Z'lX~O!Y1mO!Z(}a~O'}TO(QUO([5tO~O_5xO~O#r5{O&T5|O~PMnO!j5}O~P%[O`6PO~O`6PO~P%[Oa2TO!Z6UO&c2SO~P`O!d6WO~O!d6YOg(ai!Y(ai!Z(ai!d(ai!k(ai~O!Y#di!Z#di~P#EhO#[6ZO!Y#di!Z#di~O!Y!^i!Z!^i~P#EhO`%lO#[6dO'r%lO~O`%lO!d#vO#[6dO'r%lO~O!Y(kq!j(kq`(kq'r(kq~P!9zO!Y(eO!j(jq~O!P%fO![%gO#f6kO'{%eO~O!['[O%c6nO~Oj6qO!['[O%c6nO~O#g'baP'baZ'ba`'ban'ba}'ba!h'ba!i'ba!k'ba!o'ba#j'ba#k'ba#l'ba#m'ba#n'ba#o'ba#p'ba#q'ba#r'ba#t'ba#v'ba#x'ba#y'ba'r'ba(X'ba(i'ba!j'ba!V'ba'p'bar'ba!['ba%c'ba!d'ba~P%,rO#g'daP'daZ'da`'dan'da}'da!h'da!i'da!k'da!o'da#j'da#k'da#l'da#m'da#n'da#o'da#p'da#q'da#r'da#t'da#v'da#x'da#y'da'r'da(X'da(i'da!j'da!V'da'p'dar'da!['da%c'da!d'da~P%-eO#g$wiP$wiZ$wi`$win$wi}$wi!Y$wi!h$wi!i$wi!k$wi!o$wi#j$wi#k$wi#l$wi#m$wi#n$wi#o$wi#p$wi#q$wi#r$wi#t$wi#v$wi#x$wi#y$wi'r$wi(X$wi(i$wi!j$wi!V$wi'p$wi#[$wir$wi![$wi%c$wi!d$wi~P#.wO#g%ZiP%ZiZ%Zi`%Zin%Zi}%Zi!h%Zi!i%Zi!k%Zi!o%Zi#j%Zi#k%Zi#l%Zi#m%Zi#n%Zi#o%Zi#p%Zi#q%Zi#r%Zi#t%Zi#v%Zi#x%Zi#y%Zi'r%Zi(X%Zi(i%Zi!j%Zi!V%Zi'p%Zir%Zi![%Zi%c%Zi!d%Zi~P%1sO#g%]iP%]iZ%]i`%]in%]i}%]i!h%]i!i%]i!k%]i!o%]i#j%]i#k%]i#l%]i#m%]i#n%]i#o%]i#p%]i#q%]i#r%]i#t%]i#v%]i#x%]i#y%]i'r%]i(X%]i(i%]i!j%]i!V%]i'p%]ir%]i![%]i%c%]i!d%]i~P%2fOf'Ra!Y'Ra~P!0}O!Y'Sa!j'Sa~P!9zO!Y.oO!j(ci~O#|#_i!Y#_i!Z#_i~P#EhOP$^O|#zO}#{O!P#|O!i#xO!k#yO!o$^O(XVOZ#iin#ii!h#ii#k#ii#l#ii#m#ii#n#ii#o#ii#p#ii#q#ii#r#ii#t#ii#v#ii#x#ii#y#ii#|#ii(i#ii(p#ii(q#ii!Y#ii!Z#ii~O#j#ii~P%JwO#j:rO~P%JwOP$^O|#zO}#{O!P#|O!i#xO!k#yO!o$^O#j:rO#k:sO#l:sO#m:sO(XVOZ#ii!h#ii#n#ii#o#ii#p#ii#q#ii#r#ii#t#ii#v#ii#x#ii#y#ii#|#ii(i#ii(p#ii(q#ii!Y#ii!Z#ii~On#ii~P%MSOn:tO~P%MSOP$^On:tO|#zO}#{O!P#|O!i#xO!k#yO!o$^O#j:rO#k:sO#l:sO#m:sO#n:uO(XVO#t#ii#v#ii#x#ii#y#ii#|#ii(i#ii(p#ii(q#ii!Y#ii!Z#ii~OZ#ii!h#ii#o#ii#p#ii#q#ii#r#ii~P& _OZ;QO!h:vO#o:vO#p:vO#q;PO#r:vO~P& _OP$^OZ;QOn:tO|#zO}#{O!P#|O!h:vO!i#xO!k#yO!o$^O#j:rO#k:sO#l:sO#m:sO#n:uO#o:vO#p:vO#q;PO#r:vO#t:wO(XVO(q$OO#x#ii#y#ii#|#ii(i#ii(p#ii!Y#ii!Z#ii~O#v:yO~P&#yO#v#ii~P&#yOP$^OZ;QOn:tO|#zO}#{O!P#|O!h:vO!i#xO!k#yO!o$^O#j:rO#k:sO#l:sO#m:sO#n:uO#o:vO#p:vO#q;PO#r:vO#t:wO(XVO#x#ii#y#ii#|#ii(i#ii!Y#ii!Z#ii~O#v#ii(p#ii(q#ii~P&&UO#v:yO(p#}O(q$OO~P&&UOP$^OZ;QOn:tO|#zO}#{O!P#|O!h:vO!i#xO!k#yO!o$^O#j:rO#k:sO#l:sO#m:sO#n:uO#o:vO#p:vO#q;PO#r:vO#t:wO#v:yO#x:{O(XVO(p#}O(q$OO~O#y#ii#|#ii(i#ii!Y#ii!Z#ii~P&(gO`#zy!Y#zy'r#zy'p#zy!V#zy!j#zyr#zy![#zy%c#zy!d#zy~P!9zOj<oO|){O!P)|O(p%OO(q%QO~OP#iiZ#iin#ii}#ii!h#ii!i#ii!k#ii!o#ii#j#ii#k#ii#l#ii#m#ii#n#ii#o#ii#p#ii#q#ii#r#ii#t#ii#v#ii#x#ii#y#ii#|#ii(X#ii(i#ii!Y#ii!Z#ii~P&+_O!i#xOP(WXZ(WXj(WXn(WX|(WX}(WX!P(WX!h(WX!k(WX!o(WX#j(WX#k(WX#l(WX#m(WX#n(WX#o(WX#p(WX#q(WX#r(WX#t(WX#v(WX#x(WX#y(WX#|(WX(X(WX(i(WX(p(WX(q(WX!Y(WX!Z(WX~O#|#}i!Y#}i!Z#}i~P#EhO#|!qi!Z!qi~P$*}O!Z7TO~O!Y']a!Z']a~P#EhOP[XZ[Xn[X|[X}[X!P[X!V[X!Y[X!h[X!i[X!k[X!o[X#[[X#geX#j[X#k[X#l[X#m[X#n[X#o[X#p[X#q[X#r[X#t[X#v[X#x[X#y[X$O[X(X[X(i[X(p[X(q[X~O!d%TX#r%TX~P&0aO!d#vO(i'lO!Y'^a!j'^a~O!Y/iO!j(vi~O!Y/iO!d#vO!j(vi~Of$wq!Y$wq#[$wq#|$wq~P!0}O!V'`a!Y'`a~P#.wO!d7[O~O!Y/qO!V(wi~P#.wO!Y/qO!V(wi~O!V7`O~O!d#vO#r7eO~On7fO!d#vO(i'lO~O|){O!P)|O(q%QOj'ca(p'ca!Y'ca#['ca~Of'ca#|'ca~P&5PO|){O!P)|Oj'ea(p'ea(q'ea!Y'ea#['ea~Of'ea#|'ea~P&5rO!V7hO~Of$yq!Y$yq#[$yq#|$yq~P!0}O`$ky!Y$ky'r$ky'p$ky!V$ky!j$kyr$ky![$ky%c$ky!d$ky~P!9zO!d6YO~O!Y4uO![(xa~O`#_y!Y#_y'r#_y'p#_y!V#_y!j#_yr#_y![#_y%c#_y!d#_y~P!9zOZ7mO~Oa7oO'{+kO'}TO(QUO~O!Y0xO!Z)Pi~O_7sO~O([(yO!Y'iX!Z'iX~O!Y5]O!Z(|a~O!Z7|O~P%7wOo!nO!P7}O'}TO(QUO([!mO(g!sO~O![1bO~O![1bO%c8PO~Oj8SO![1bO%c8PO~OZ8XO!Y'la!Z'la~O!Y1mO!Z(}i~O!j8]O~O!j8^O~O!j8aO~O!j8aO~P%[O`8cO~O!d8dO~O!j8eO~O!Y(ni!Z(ni~P#EhO`%lO#[8mO'r%lO~O!Y(ky!j(ky`(ky'r(ky~P!9zO!Y(eO!j(jy~O!['[O%c8pO~O#g$wqP$wqZ$wq`$wqn$wq}$wq!Y$wq!h$wq!i$wq!k$wq!o$wq#j$wq#k$wq#l$wq#m$wq#n$wq#o$wq#p$wq#q$wq#r$wq#t$wq#v$wq#x$wq#y$wq'r$wq(X$wq(i$wq!j$wq!V$wq'p$wq#[$wqr$wq![$wq%c$wq!d$wq~P#.wO#g'caP'caZ'ca`'can'ca}'ca!h'ca!i'ca!k'ca!o'ca#j'ca#k'ca#l'ca#m'ca#n'ca#o'ca#p'ca#q'ca#r'ca#t'ca#v'ca#x'ca#y'ca'r'ca(X'ca(i'ca!j'ca!V'ca'p'car'ca!['ca%c'ca!d'ca~P&5PO#g'eaP'eaZ'ea`'ean'ea}'ea!h'ea!i'ea!k'ea!o'ea#j'ea#k'ea#l'ea#m'ea#n'ea#o'ea#p'ea#q'ea#r'ea#t'ea#v'ea#x'ea#y'ea'r'ea(X'ea(i'ea!j'ea!V'ea'p'ear'ea!['ea%c'ea!d'ea~P&5rO#g$yqP$yqZ$yq`$yqn$yq}$yq!Y$yq!h$yq!i$yq!k$yq!o$yq#j$yq#k$yq#l$yq#m$yq#n$yq#o$yq#p$yq#q$yq#r$yq#t$yq#v$yq#x$yq#y$yq'r$yq(X$yq(i$yq!j$yq!V$yq'p$yq#[$yqr$yq![$yq%c$yq!d$yq~P#.wO!Y'Si!j'Si~P!9zO#|#_q!Y#_q!Z#_q~P#EhO(p%OOP%ZaZ%Zan%Za}%Za!h%Za!i%Za!k%Za!o%Za#j%Za#k%Za#l%Za#m%Za#n%Za#o%Za#p%Za#q%Za#r%Za#t%Za#v%Za#x%Za#y%Za#|%Za(X%Za(i%Za!Y%Za!Z%Za~Oj%Za|%Za!P%Za(q%Za~P&F}O(q%QOP%]aZ%]an%]a}%]a!h%]a!i%]a!k%]a!o%]a#j%]a#k%]a#l%]a#m%]a#n%]a#o%]a#p%]a#q%]a#r%]a#t%]a#v%]a#x%]a#y%]a#|%]a(X%]a(i%]a!Y%]a!Z%]a~Oj%]a|%]a!P%]a(p%]a~P&IUOj<oO|){O!P)|O(q%QO~P&F}Oj<oO|){O!P)|O(p%OO~P&IUO|0aO}0aO!P0bOPyaZyajyanya!hya!iya!kya!oya#jya#kya#lya#mya#nya#oya#pya#qya#rya#tya#vya#xya#yya#|ya(Xya(iya(pya(qya!Yya!Zya~O|){O!P)|OP$naZ$naj$nan$na}$na!h$na!i$na!k$na!o$na#j$na#k$na#l$na#m$na#n$na#o$na#p$na#q$na#r$na#t$na#v$na#x$na#y$na#|$na(X$na(i$na(p$na(q$na!Y$na!Z$na~O|){O!P)|OP$paZ$paj$pan$pa}$pa!h$pa!i$pa!k$pa!o$pa#j$pa#k$pa#l$pa#m$pa#n$pa#o$pa#p$pa#q$pa#r$pa#t$pa#v$pa#x$pa#y$pa#|$pa(X$pa(i$pa(p$pa(q$pa!Y$pa!Z$pa~OP%OaZ%Oan%Oa}%Oa!h%Oa!i%Oa!k%Oa!o%Oa#j%Oa#k%Oa#l%Oa#m%Oa#n%Oa#o%Oa#p%Oa#q%Oa#r%Oa#t%Oa#v%Oa#x%Oa#y%Oa#|%Oa(X%Oa(i%Oa!Y%Oa!Z%Oa~P&+_O#|$jq!Y$jq!Z$jq~P#EhO#|$kq!Y$kq!Z$kq~P#EhO!Z8|O~O#|8}O~P!0}O!d#vO!Y'^i!j'^i~O!d#vO(i'lO!Y'^i!j'^i~O!Y/iO!j(vq~O!V'`i!Y'`i~P#.wO!Y/qO!V(wq~O!V9TO~P#.wO!V9TO~Of(Vy!Y(Vy~P!0}O!Y'ga!['ga~P#.wO`%Vq![%Vq'r%Vq!Y%Vq~P#.wOZ9YO~O!Y0xO!Z)Pq~O#[9^O!Y'ia!Z'ia~O!Y5]O!Z(|i~P#EhO![1bO%c9bO~O'}TO(QUO([9gO~O!Y1mO!Z(}q~O!j9jO~O!j9kO~O!j9lO~O!j9lO~P%[O#[9oO!Y#dy!Z#dy~O!Y#dy!Z#dy~P#EhO!['[O%c9tO~O#|#zy!Y#zy!Z#zy~P#EhOP$wiZ$win$wi}$wi!h$wi!i$wi!k$wi!o$wi#j$wi#k$wi#l$wi#m$wi#n$wi#o$wi#p$wi#q$wi#r$wi#t$wi#v$wi#x$wi#y$wi#|$wi(X$wi(i$wi!Y$wi!Z$wi~P&+_O|){O!P)|O(q%QOP'baZ'baj'ban'ba}'ba!h'ba!i'ba!k'ba!o'ba#j'ba#k'ba#l'ba#m'ba#n'ba#o'ba#p'ba#q'ba#r'ba#t'ba#v'ba#x'ba#y'ba#|'ba(X'ba(i'ba(p'ba!Y'ba!Z'ba~O|){O!P)|OP'daZ'daj'dan'da}'da!h'da!i'da!k'da!o'da#j'da#k'da#l'da#m'da#n'da#o'da#p'da#q'da#r'da#t'da#v'da#x'da#y'da#|'da(X'da(i'da(p'da(q'da!Y'da!Z'da~O(p%OOP%ZiZ%Zij%Zin%Zi|%Zi}%Zi!P%Zi!h%Zi!i%Zi!k%Zi!o%Zi#j%Zi#k%Zi#l%Zi#m%Zi#n%Zi#o%Zi#p%Zi#q%Zi#r%Zi#t%Zi#v%Zi#x%Zi#y%Zi#|%Zi(X%Zi(i%Zi(q%Zi!Y%Zi!Z%Zi~O(q%QOP%]iZ%]ij%]in%]i|%]i}%]i!P%]i!h%]i!i%]i!k%]i!o%]i#j%]i#k%]i#l%]i#m%]i#n%]i#o%]i#p%]i#q%]i#r%]i#t%]i#v%]i#x%]i#y%]i#|%]i(X%]i(i%]i(p%]i!Y%]i!Z%]i~O#|$ky!Y$ky!Z$ky~P#EhO#|#_y!Y#_y!Z#_y~P#EhO!d#vO!Y'^q!j'^q~O!Y/iO!j(vy~O!V'`q!Y'`q~P#.wO!V9}O~P#.wO!Y0xO!Z)Py~O!Y5]O!Z(|q~O![1bO%c:UO~O!j:XO~O!['[O%c:^O~OP$wqZ$wqn$wq}$wq!h$wq!i$wq!k$wq!o$wq#j$wq#k$wq#l$wq#m$wq#n$wq#o$wq#p$wq#q$wq#r$wq#t$wq#v$wq#x$wq#y$wq#|$wq(X$wq(i$wq!Y$wq!Z$wq~P&+_O|){O!P)|O(q%QOP'caZ'caj'can'ca}'ca!h'ca!i'ca!k'ca!o'ca#j'ca#k'ca#l'ca#m'ca#n'ca#o'ca#p'ca#q'ca#r'ca#t'ca#v'ca#x'ca#y'ca#|'ca(X'ca(i'ca(p'ca!Y'ca!Z'ca~O|){O!P)|OP'eaZ'eaj'ean'ea}'ea!h'ea!i'ea!k'ea!o'ea#j'ea#k'ea#l'ea#m'ea#n'ea#o'ea#p'ea#q'ea#r'ea#t'ea#v'ea#x'ea#y'ea#|'ea(X'ea(i'ea(p'ea(q'ea!Y'ea!Z'ea~OP$yqZ$yqn$yq}$yq!h$yq!i$yq!k$yq!o$yq#j$yq#k$yq#l$yq#m$yq#n$yq#o$yq#p$yq#q$yq#r$yq#t$yq#v$yq#x$yq#y$yq#|$yq(X$yq(i$yq!Y$yq!Z$yq~P&+_Of%_!Z!Y%_!Z#[%_!Z#|%_!Z~P!0}O!Y'iq!Z'iq~P#EhO!Y#d!Z!Z#d!Z~P#EhO#g%_!ZP%_!ZZ%_!Z`%_!Zn%_!Z}%_!Z!Y%_!Z!h%_!Z!i%_!Z!k%_!Z!o%_!Z#j%_!Z#k%_!Z#l%_!Z#m%_!Z#n%_!Z#o%_!Z#p%_!Z#q%_!Z#r%_!Z#t%_!Z#v%_!Z#x%_!Z#y%_!Z'r%_!Z(X%_!Z(i%_!Z!j%_!Z!V%_!Z'p%_!Z#[%_!Zr%_!Z![%_!Z%c%_!Z!d%_!Z~P#.wOP%_!ZZ%_!Zn%_!Z}%_!Z!h%_!Z!i%_!Z!k%_!Z!o%_!Z#j%_!Z#k%_!Z#l%_!Z#m%_!Z#n%_!Z#o%_!Z#p%_!Z#q%_!Z#r%_!Z#t%_!Z#v%_!Z#x%_!Z#y%_!Z#|%_!Z(X%_!Z(i%_!Z!Y%_!Z!Z%_!Z~P&+_Or(]X~P1qO'|!lO~P!*fO!VeX!YeX#[eX~P&0aOP[XZ[Xn[X|[X}[X!P[X!Y[X!YeX!h[X!i[X!k[X!o[X#[[X#[eX#geX#j[X#k[X#l[X#m[X#n[X#o[X#p[X#q[X#r[X#t[X#v[X#x[X#y[X$O[X(X[X(i[X(p[X(q[X~O!deX!j[X!jeX(ieX~P'EROP:iOQ:iORfOc<dOd!iOlkOn:iOokOpkOvkOx:iOz:iO!PWO!TkO!UkO![XO!f:lO!kZO!n:iO!o:iO!p:iO!r:mO!t:pO!w!hO$T!kO'{)ZO'}TO(QUO(XVO(g[O(u<bO~O!Y:}O!Z$ma~Og%WOl%XOn$uOo$tOp$tOv%YOx%ZOz;XO!P$|O![$}O!f<iO!k$yO#f;_O$T%_O$o;ZO$q;]O$t%`O'{(qO'}TO(QUO(X$vO(p%OO(q%QO~O#s)bO~P'IwOn!bX(i!bX~P# qO!Z[X!ZeX~P'ERO!VeX!V$uX!YeX!Y$uX#[eX~P!/tO#g:qO~O!d#vO#g:qO~O#[;RO~O#r:vO~O#[;bO!Y(nX!Z(nX~O#[;RO!Y(lX!Z(lX~O#g;cO~Of;eO~P!0}O#g;kO~O#g;lO~O!d#vO#g;mO~O!d#vO#g;cO~O#|;nO~P#EhO#g;oO~O#g;pO~O#g;uO~O#g;vO~O#g;wO~O#g;xO~O#|;yO~P!0}O#|;zO~P!0}O!i#P#Q#S#T#W#e#f#q(u$o$q$t%W%b%c%d%k%m%p%q%s%u~'vS#k!U't'|#lo#j#mn|'u$Y'u'{$[([~",
28132
  stateData: "((P~O'zOS'{OSTOS'|RQ~OPYOQYOSfOY!VOaqOdzOeyOj!POnkOpYOqkOrkOxkOzYO|YO!QWO!UkO!VkO!]XO!guO!jZO!mYO!nYO!oYO!qvO!swO!vxO!z]O$V|O$miO%g}O%i!QO%k!OO%l!OO%m!OO%p!RO%r!SO%u!TO%v!TO%x!UO&U!WO&[!XO&^!YO&`!ZO&b![O&e!]O&k!^O&q!_O&s!`O&u!aO&w!bO&y!cO(RSO(TTO(WUO(_VO(m[O~OWtO~P`OPYOQYOSfOd!jOe!iOnkOpYOqkOrkOxkOzYO|YO!QWO!UkO!VkO!]!eO!guO!jZO!mYO!nYO!oYO!qvO!s!gO!v!hO$V!kO$miO(R!dO(TTO(WUO(_VO(m[O~Oa!wOq!nO!Q!oO!`!yO!a!vO!b!vO!z;wO#R!pO#S!pO#T!xO#U!pO#V!pO#Y!zO#Z!zO(S!lO(TTO(WUO(c!mO(m!sO~O'|!{O~OP]XR]X[]Xa]Xp]X!O]X!Q]X!Z]X!j]X!n]X#P]X#Q]X#^]X#ifX#l]X#m]X#n]X#o]X#p]X#q]X#r]X#s]X#t]X#u]X#w]X#y]X#z]X$P]X'x]X(_]X(p]X(w]X(x]X~O!e%QX~P(qO_!}O(T#PO(U!}O(V#PO~O_#QO(V#PO(W#PO(X#QO~Ov#SO!S#TO(`#TO(a#VO~OPYOQYOSfOd!jOe!iOnkOpYOqkOrkOxkOzYO|YO!QWO!UkO!VkO!]!eO!guO!jZO!mYO!nYO!oYO!qvO!s!gO!v!hO$V!kO$miO(R;{O(TTO(WUO(_VO(m[O~O!Y#ZO!Z#WO!W(fP!W(tP~P+}O![#cO~P`OPYOQYOSfOd!jOe!iOpYOqkOrkOxkOzYO|YO!QWO!UkO!VkO!]!eO!guO!jZO!mYO!nYO!oYO!qvO!s!gO!v!hO$V!kO$miO(TTO(WUO(_VO(m[O~On#mO!Y#iO!z]O#g#lO#h#iO(R;|O!i(qP~P.iO!j#oO(R#nO~O!v#sO!z]O%g#tO~O#i#uO~O!e#vO#i#uO~OP$[OR#zO[$cOp$aO!O#yO!Q#{O!Z$_O!j#xO!n$[O#P$RO#l$OO#m$PO#n$PO#o$PO#p$QO#q$RO#r$RO#s$bO#t$RO#u$SO#w$UO#y$WO#z$XO(_VO(p$YO(w#|O(x#}O~Oa(dX'x(dX'u(dX!i(dX!W(dX!](dX%h(dX!e(dX~P1qO#Q$dO#^$eO$P$eOP(eXR(eX[(eXp(eX!O(eX!Q(eX!Z(eX!j(eX!n(eX#P(eX#l(eX#m(eX#n(eX#o(eX#p(eX#q(eX#r(eX#s(eX#t(eX#u(eX#w(eX#y(eX#z(eX(_(eX(p(eX(w(eX(x(eX!](eX%h(eX~Oa(eX'x(eX'u(eX!W(eX!i(eXt(eX!e(eX~P4UO#^$eO~O$[$hO$^$gO$e$mO~OSfO!]$nO$h$oO$j$qO~Oh%VOj%cOn%WOp%XOq$tOr$tOx%YOz%ZO|%[O!Q${O!]$|O!g%aO!j$xO#h%bO$V%_O$s%]O$u%^O$x%`O(R$sO(TTO(WUO(_$uO(w$}O(x%POg([P~O!j%dO~O!Q%gO!]%hO(R%fO~O!e%lO~Oa%mO'x%mO~O!O%qO~P%[O(S!lO~P%[O%m%uO~P%[Oh%VO!j%dO(R%fO(S!lO~Oe%|O!j%dO(R%fO~O#t$RO~O!O&RO!]&OO!j&QO%i&UO(R%fO(S!lO(TTO(WUO`)UP~O!v#sO~O%r&WO!Q)QX!])QX(R)QX~O(R&XO~Oj!PO!s&^O%i!QO%k!OO%l!OO%m!OO%p!RO%r!SO%u!TO%v!TO~Od&cOe&bO!v&`O%g&aO%z&_O~P<POd&fOeyOj!PO!]&eO!s&^O!vxO!z]O%g}O%k!OO%l!OO%m!OO%p!RO%r!SO%u!TO%v!TO%x!UO~Ob&iO#^&lO%i&gO(S!lO~P=UO!j&mO!s&qO~O!j#oO~O!]XO~Oa%mO'v&yO'x%mO~Oa%mO'v&|O'x%mO~Oa%mO'v'OO'x%mO~O'u]X!W]Xt]X!i]X&Y]X!]]X%h]X!e]X~P(qO!`']O!a'UO!b'UO(S!lO(TTO(WUO~Oq'SO!Q'RO!Y'VO(c'QO![(gP![(vP~P@]Ol'`O!]'^O(R%fO~Oe'eO!j%dO(R%fO~O!O&RO!j&QO~Oq!nO!Q!oO!z;wO#R!pO#S!pO#U!pO#V!pO(S!lO(TTO(WUO(c!mO(m!sO~O!`'kO!a'jO!b'jO#T!pO#Y'lO#Z'lO~PAwOa%mOh%VO!e#vO!j%dO'x%mO(p'nO~O!n'rO#^'pO~PCVOq!nO!Q!oO(TTO(WUO(c!mO(m!sO~O!]XOq(kX!Q(kX!`(kX!a(kX!b(kX!z(kX#R(kX#S(kX#T(kX#U(kX#V(kX#Y(kX#Z(kX(S(kX(T(kX(W(kX(c(kX(m(kX~O!a'jO!b'jO(S!lO~PCuO'}'vO(O'vO(P'xO~O_!}O(T'zO(U!}O(V'zO~O_#QO(V'zO(W'zO(X#QO~Ot'|O~P%[Ov#SO!S#TO(`#TO(a(PO~O!Y(RO!W'UX!W'[X!Z'UX!Z'[X~P+}O!Z(TO!W(fX~OP$[OR#zO[$cOp$aO!O#yO!Q#{O!Z(TO!j#xO!n$[O#P$RO#l$OO#m$PO#n$PO#o$PO#p$QO#q$RO#r$RO#s$bO#t$RO#u$SO#w$UO#y$WO#z$XO(_VO(p$YO(w#|O(x#}O~O!W(fX~PGpO!W(YO~O!W(sX!Z(sX!e(sX!i(sX(p(sX~O#^(sX#i#bX![(sX~PIsO#^(ZO!W(uX!Z(uX~O!Z([O!W(tX~O!W(_O~O#^$eO~PIsO![(`O~P`OR#zO!O#yO!Q#{O!j#xO(_VOP!la[!lap!la!Z!la!n!la#P!la#l!la#m!la#n!la#o!la#p!la#q!la#r!la#s!la#t!la#u!la#w!la#y!la#z!la(p!la(w!la(x!la~Oa!la'x!la'u!la!W!la!i!lat!la!]!la%h!la!e!la~PKZO!i(aO~O!e#vO#^(bO(p'nO!Z(rXa(rX'x(rX~O!i(rX~PMvO!Q%gO!]%hO!z]O#g(gO#h(fO(R%fO~O!Z(hO!i(qX~O!i(jO~O!Q%gO!]%hO#h(fO(R%fO~OP(eXR(eX[(eXp(eX!O(eX!Q(eX!Z(eX!j(eX!n(eX#P(eX#l(eX#m(eX#n(eX#o(eX#p(eX#q(eX#r(eX#s(eX#t(eX#u(eX#w(eX#y(eX#z(eX(_(eX(p(eX(w(eX(x(eX~O!e#vO!i(eX~P! dOR(lO!O(kO!j#xO#Q$dO!z!ya!Q!ya~O!v!ya%g!ya!]!ya#g!ya#h!ya(R!ya~P!#eO!v(pO~OPYOQYOSfOd!jOe!iOnkOpYOqkOrkOxkOzYO|YO!QWO!UkO!VkO!]XO!guO!jZO!mYO!nYO!oYO!qvO!s!gO!v!hO$V!kO$miO(R!dO(TTO(WUO(_VO(m[O~Oh%VOn%WOp%XOq$tOr$tOx%YOz%ZO|<eO!Q${O!]$|O!g=vO!j$xO#h<kO$V%_O$s<gO$u<iO$x%`O(R(tO(TTO(WUO(_$uO(w$}O(x%PO~O#i(vO~O!Y(xO!i(iP~P%[O(c(zO(m[O~O!Q(|O!j#xO(c(zO(m[O~OP;vOQ;vOSfOd=rOe!iOnkOp;vOqkOrkOxkOz;vO|;vO!QWO!UkO!VkO!]!eO!g;yO!jZO!m;vO!n;vO!o;vO!q;zO!s;}O!v!hO$V!kO$m=pO(R)ZO(TTO(WUO(_VO(m[O~O!Z$_Oa$pa'x$pa'u$pa!i$pa!W$pa!]$pa%h$pa!e$pa~Oj)bO~P!&iOh%VOn%WOp%XOq$tOr$tOx%YOz%ZO|%[O!Q${O!]$|O!g%aO!j$xO#h%bO$V%_O$s%]O$u%^O$x%`O(R(tO(TTO(WUO(_$uO(w$}O(x%PO~Og(nP~P!+rO!O)gO!e)fO!]$]X$Y$]X$[$]X$^$]X$e$]X~O!e)fO!](yX$Y(yX$[(yX$^(yX$e(yX~O!O)gO~P!-{O!O)gO!](yX$Y(yX$[(yX$^(yX$e(yX~O!])iO$Y)mO$[)hO$^)hO$e)nO~O!Y)qO~P!(yO$[$hO$^$gO$e)uO~Ol$yX!O$yX#Q$yX'w$yX(w$yX(x$yX~OgkXg$yXlkX!ZkX#^kX~P!/qOv)wO(`)xO(a)zO~Ol*TO!O)|O'w)}O(w$}O(x%PO~Og){O~P!0uOg*UO~Oh%VOn%WOp%XOq$tOr$tOx%YOz%ZO|<eO!Q*WO!]*XO!g=vO!j$xO#h<kO$V%_O$s<gO$u<iO$x%`O(TTO(WUO(_$uO(w$}O(x%PO~O!Y*[O(R*VO!i(|P~P!1dO#i*^O~O!j*_O~Oh%VOn%WOp%XOq$tOr$tOx%YOz%ZO|<eO!Q${O!]$|O!g=vO!j$xO#h<kO$V%_O$s<gO$u<iO$x%`O(R*aO(TTO(WUO(_$uO(w$}O(x%PO~O!Y*dO!W(}P~P!3cOp*pOq!nO!Q*fO!`*nO!a*hO!b*hO!j*_O#Y*oO%_*jO(S!lO(TTO(WUO(c!mO~O![*mO~P!5WO#Q$dOl(^X!O(^X'w(^X(w(^X(x(^X!Z(^X#^(^X~Og(^X#}(^X~P!6YOl*uO#^*tOg(]X!Z(]X~O!Z*vOg([X~Oj%cO(R&XOg([P~Oq*yO~O!j+OO~O(R(tO~On+TO!Q%gO!Y#iO!]%hO!z]O#g#lO#h#iO(R%fO!i(qP~O!e#vO#i+UO~O!Q%gO!Y+WO!Z([O!]%hO(R%fO!W(tP~Oq'YO!Q+YO!Y+XO(TTO(WUO(c(zO~O![(vP~P!9]O!Z+ZOa)RX'x)RX~OP$[OR#zO[$cOp$aO!O#yO!Q#{O!j#xO!n$[O#P$RO#l$OO#m$PO#n$PO#o$PO#p$QO#q$RO#r$RO#s$bO#t$RO#u$SO#w$UO#y$WO#z$XO(_VO(p$YO(w#|O(x#}O~Oa!ha!Z!ha'x!ha'u!ha!W!ha!i!hat!ha!]!ha%h!ha!e!ha~P!:TOR#zO!O#yO!Q#{O!j#xO(_VOP!pa[!pap!pa!Z!pa!n!pa#P!pa#l!pa#m!pa#n!pa#o!pa#p!pa#q!pa#r!pa#s!pa#t!pa#u!pa#w!pa#y!pa#z!pa(p!pa(w!pa(x!pa~Oa!pa'x!pa'u!pa!W!pa!i!pat!pa!]!pa%h!pa!e!pa~P!<kOR#zO!O#yO!Q#{O!j#xO(_VOP!ra[!rap!ra!Z!ra!n!ra#P!ra#l!ra#m!ra#n!ra#o!ra#p!ra#q!ra#r!ra#s!ra#t!ra#u!ra#w!ra#y!ra#z!ra(p!ra(w!ra(x!ra~Oa!ra'x!ra'u!ra!W!ra!i!rat!ra!]!ra%h!ra!e!ra~P!?ROh%VOl+dO!]'^O%h+cO~O!e+fOa(ZX!](ZX'x(ZX!Z(ZX~Oa%mO!]XO'x%mO~Oh%VO!j%dO~Oh%VO!j%dO(R%fO~O!e#vO#i(vO~Ob+qO%i+rO(R+nO(TTO(WUO![)VP~O!Z+sO`)UX~O[+wO~O`+xO~O!]&OO(R%fO(S!lO`)UP~Oh%VO#^+}O~Oh%VOl,QO!]$|O~O!],SO~O!O,UO!]XO~O%m%uO~O!v,ZO~Oe,`O~Ob,aO(R#nO(TTO(WUO![)TP~Oe%|O~O%i!QO(R&XO~P=UO[,fO`,eO~OPYOQYOSfOdzOeyOnkOpYOqkOrkOxkOzYO|YO!QWO!UkO!VkO!guO!jZO!mYO!nYO!oYO!qvO!vxO!z]O$miO%g}O(TTO(WUO(_VO(m[O~O!]!eO!s!gO$V!kO(R!dO~P!FRO`,eOa%mO'x%mO~OPYOQYOSfOd!jOe!iOnkOpYOqkOrkOxkOzYO|YO!QWO!UkO!VkO!]!eO!guO!jZO!mYO!nYO!oYO!qvO!v!hO$V!kO$miO(R!dO(TTO(WUO(_VO(m[O~Oa,kOj!OO!swO%k!OO%l!OO%m!OO~P!HkO!j&mO~O&[,qO~O!],sO~O&m,uO&o,vOP&jaQ&jaS&jaY&jaa&jad&jae&jaj&jan&jap&jaq&jar&jax&jaz&ja|&ja!Q&ja!U&ja!V&ja!]&ja!g&ja!j&ja!m&ja!n&ja!o&ja!q&ja!s&ja!v&ja!z&ja$V&ja$m&ja%g&ja%i&ja%k&ja%l&ja%m&ja%p&ja%r&ja%u&ja%v&ja%x&ja&U&ja&[&ja&^&ja&`&ja&b&ja&e&ja&k&ja&q&ja&s&ja&u&ja&w&ja&y&ja'u&ja(R&ja(T&ja(W&ja(_&ja(m&ja![&ja&c&jab&ja&h&ja~O(R,{O~Oh!cX!Z!PX![!PX!e!PX!e!cX!j!cX#^!PX~O!Z!cX![!cX~P# qO!e-QO#^-POh(hX!Z#fX![#fX!e(hX!j(hX~O!Z(hX![(hX~P#!dOh%VO!e-SO!j%dO!Z!_X![!_X~Oq!nO!Q!oO(TTO(WUO(c!mO~OP;vOQ;vOSfOd=rOe!iOnkOp;vOqkOrkOxkOz;vO|;vO!QWO!UkO!VkO!]!eO!g;yO!jZO!m;vO!n;vO!o;vO!q;zO!s;}O!v!hO$V!kO$m=pO(TTO(WUO(_VO(m[O~O(R<rO~P##yO!Z-WO![(gX~O![-YO~O!e-QO#^-PO!Z#fX![#fX~O!Z-ZO![(vX~O![-]O~O!a-^O!b-^O(S!lO~P##hO![-aO~P'_Ol-dO!]'^O~O!W-iO~Oq!ya!`!ya!a!ya!b!ya#R!ya#S!ya#T!ya#U!ya#V!ya#Y!ya#Z!ya(S!ya(T!ya(W!ya(c!ya(m!ya~P!#eO!n-nO#^-lO~PCVO!a-pO!b-pO(S!lO~PCuOa%mO#^-lO'x%mO~Oa%mO!e#vO#^-lO'x%mO~Oa%mO!e#vO!n-nO#^-lO'x%mO(p'nO~O'}'vO(O'vO(P-uO~Ot-vO~O!W'Ua!Z'Ua~P!:TO!Y-zO!W'UX!Z'UX~P%[O!Z(TO!W(fa~O!W(fa~PGpO!Z([O!W(ta~O!Q%gO!Y.OO!]%hO(R%fO!W'[X!Z'[X~O#^.QO!Z(ra!i(raa(ra'x(ra~O!e#vO~P#,PO!Z(hO!i(qa~O!Q%gO!]%hO#h.UO(R%fO~On.ZO!Q%gO!Y.WO!]%hO!z]O#g.YO#h.WO(R%fO!Z'_X!i'_X~OR._O!j#xO~Oh%VOl.bO!]'^O%h.aO~Oa#ai!Z#ai'x#ai'u#ai!W#ai!i#ait#ai!]#ai%h#ai!e#ai~P!:TOl=|O!O)|O'w)}O(w$}O(x%PO~O#i#]aa#]a#^#]a'x#]a!Z#]a!i#]a!]#]a!W#]a~P#.{O#i(^XP(^XR(^X[(^Xa(^Xp(^X!Q(^X!j(^X!n(^X#P(^X#l(^X#m(^X#n(^X#o(^X#p(^X#q(^X#r(^X#s(^X#t(^X#u(^X#w(^X#y(^X#z(^X'x(^X(_(^X(p(^X!i(^X!W(^X'u(^Xt(^X!](^X%h(^X!e(^X~P!6YO!Z.oO!i(iX~P!:TO!i.rO~O!W.tO~OP$[OR#zO!O#yO!Q#{O!j#xO!n$[O(_VO[#kia#kip#ki!Z#ki#P#ki#m#ki#n#ki#o#ki#p#ki#q#ki#r#ki#s#ki#t#ki#u#ki#w#ki#y#ki#z#ki'x#ki(p#ki(w#ki(x#ki'u#ki!W#ki!i#kit#ki!]#ki%h#ki!e#ki~O#l#ki~P#2kO#l$OO~P#2kOP$[OR#zOp$aO!O#yO!Q#{O!j#xO!n$[O#l$OO#m$PO#n$PO#o$PO(_VO[#kia#ki!Z#ki#P#ki#q#ki#r#ki#s#ki#t#ki#u#ki#w#ki#y#ki#z#ki'x#ki(p#ki(w#ki(x#ki'u#ki!W#ki!i#kit#ki!]#ki%h#ki!e#ki~O#p#ki~P#5YO#p$QO~P#5YOP$[OR#zO[$cOp$aO!O#yO!Q#{O!j#xO!n$[O#P$RO#l$OO#m$PO#n$PO#o$PO#p$QO#q$RO#r$RO#s$bO#t$RO(_VOa#ki!Z#ki#w#ki#y#ki#z#ki'x#ki(p#ki(w#ki(x#ki'u#ki!W#ki!i#kit#ki!]#ki%h#ki!e#ki~O#u#ki~P#7wOP$[OR#zO[$cOp$aO!O#yO!Q#{O!j#xO!n$[O#P$RO#l$OO#m$PO#n$PO#o$PO#p$QO#q$RO#r$RO#s$bO#t$RO#u$SO(_VO(x#}Oa#ki!Z#ki#y#ki#z#ki'x#ki(p#ki(w#ki'u#ki!W#ki!i#kit#ki!]#ki%h#ki!e#ki~O#w$UO~P#:_O#w#ki~P#:_O#u$SO~P#7wOP$[OR#zO[$cOp$aO!O#yO!Q#{O!j#xO!n$[O#P$RO#l$OO#m$PO#n$PO#o$PO#p$QO#q$RO#r$RO#s$bO#t$RO#u$SO#w$UO(_VO(w#|O(x#}Oa#ki!Z#ki#z#ki'x#ki(p#ki'u#ki!W#ki!i#kit#ki!]#ki%h#ki!e#ki~O#y#ki~P#=TO#y$WO~P#=TOP]XR]X[]Xp]X!O]X!Q]X!j]X!n]X#P]X#Q]X#^]X#ifX#l]X#m]X#n]X#o]X#p]X#q]X#r]X#s]X#t]X#u]X#w]X#y]X#z]X$P]X(_]X(p]X(w]X(x]X!Z]X![]X~O#}]X~P#?rOP$[OR#zO[<_Op<]O!O#yO!Q#{O!j#xO!n$[O#P<SO#l<PO#m<QO#n<QO#o<QO#p<RO#q<SO#r<SO#s<^O#t<SO#u<TO#w<VO#y<XO#z<YO(_VO(p$YO(w#|O(x#}O~O#}.vO~P#BPO#Q$dO#^<`O$P<`O#}(eX![(eX~P! dOa'ba!Z'ba'x'ba'u'ba!i'ba!W'bat'ba!]'ba%h'ba!e'ba~P!:TO[#kia#kip#ki!Z#ki#P#ki#p#ki#q#ki#r#ki#s#ki#t#ki#u#ki#w#ki#y#ki#z#ki'x#ki(p#ki'u#ki!W#ki!i#kit#ki!]#ki%h#ki!e#ki~OP$[OR#zO!O#yO!Q#{O!j#xO!n$[O#l$OO#m$PO#n$PO#o$PO(_VO(w#ki(x#ki~P#EROl=|O!O)|O'w)}O(w$}O(x%POP#kiR#ki!Q#ki!j#ki!n#ki#l#ki#m#ki#n#ki#o#ki(_#ki~P#ERO!Z.zOg(nX~P!0uOg.|O~Oa$Oi!Z$Oi'x$Oi'u$Oi!W$Oi!i$Oit$Oi!]$Oi%h$Oi!e$Oi~P!:TO$[.}O$^.}O~O$[/OO$^/OO~O!e)fO#^/PO!]$bX$Y$bX$[$bX$^$bX$e$bX~O!Y/QO~O!])iO$Y/SO$[)hO$^)hO$e/TO~O!Z<ZO![(dX~P#BPO![/UO~O!e)fO$e(yX~O$e/WO~Ot/XO~P!&iOv)wO(`)xO(a/[O~O!Q/_O~O(w$}Ol%`a!O%`a'w%`a(x%`a!Z%`a#^%`a~Og%`a#}%`a~P#LTO(x%POl%ba!O%ba'w%ba(w%ba!Z%ba#^%ba~Og%ba#}%ba~P#LvO!ZfX!efX!ifX!i$yX(pfX~P!/qO!Y/hO!Z([O(R/gO!W(tP!W(}P~P!1dOp*pO!`*nO!a*hO!b*hO!j*_O#Y*oO%_*jO(S!lO(TTO(WUO~Oq<oO!Q/iO!Y+XO![*mO(c<nO![(vP~P#NaO!i/jO~P#.{O!Z/kO!e#vO(p'nO!i(|X~O!i/pO~O!Q%gO!Y*[O!]%hO(R%fO!i(|P~O#i/rO~O!W$yX!Z$yX!e%QX~P!/qO!Z/sO!W(}X~P#.{O!e/uO~O!W/wO~OnkO(R/xO~P.iOh%VOp/}O!e#vO!j%dO(p'nO~O!e+fO~Oa%mO!Z0RO'x%mO~O![0TO~P!5WO!a0UO!b0UO(S!lO~P##hOq!nO!Q0VO(TTO(WUO(c!mO~O#Y0XO~Og%`a!Z%`a#^%`a#}%`a~P!0uOg%ba!Z%ba#^%ba#}%ba~P!0uOj%cO(R&XOg'kX!Z'kX~O!Z*vOg([a~Og0bO~OR0cO!O0cO!Q0dO#Q$dOl{a'w{a(w{a(x{a!Z{a#^{a~Og{a#}{a~P$&dO!O)|O'w)}Ol$ra(w$ra(x$ra!Z$ra#^$ra~Og$ra#}$ra~P$'`O!O)|O'w)}Ol$ta(w$ta(x$ta!Z$ta#^$ta~Og$ta#}$ta~P$(RO#i0gO~Og%Sa!Z%Sa#^%Sa#}%Sa~P!0uOl0iO#^0hOg(]a!Z(]a~O!e#vO~O#i0lO~O!Z+ZOa)Ra'x)Ra~OR#zO!O#yO!Q#{O!j#xO(_VOP!pi[!pip!pi!Z!pi!n!pi#P!pi#l!pi#m!pi#n!pi#o!pi#p!pi#q!pi#r!pi#s!pi#t!pi#u!pi#w!pi#y!pi#z!pi(p!pi(w!pi(x!pi~Oa!pi'x!pi'u!pi!W!pi!i!pit!pi!]!pi%h!pi!e!pi~P$*OOh%VOp%XOq$tOr$tOx%YOz%ZO|<eO!Q${O!]$|O!g=vO!j$xO#h<kO$V%_O$s<gO$u<iO$x%`O(TTO(WUO(_$uO(w$}O(x%PO~On0vO%[0wO(R0tO~P$,fO!e+fOa(Za!](Za'x(Za!Z(Za~O#i0|O~O[]X!ZfX![fX~O!Z0}O![)VX~O![1PO~O[1QO~Ob1SO(R+nO(TTO(WUO~O!]&OO(R%fO`'sX!Z'sX~O!Z+sO`)Ua~O!i1VO~P!:TO[1YO~O`1ZO~O#^1^O~Ol1aO!]$|O~O(c(zO![)SP~Oh%VOl1jO!]1gO%h1iO~O[1tO!Z1rO![)TX~O![1uO~O`1wOa%mO'x%mO~O(R#nO(TTO(WUO~O#Q$dO#^$eO$P$eOP(eXR(eX[(eXp(eX!O(eX!Q(eX!Z(eX!j(eX!n(eX#P(eX#l(eX#m(eX#n(eX#o(eX#p(eX#q(eX#r(eX#s(eX#u(eX#w(eX#y(eX#z(eX(_(eX(p(eX(w(eX(x(eX~O#t1zO&Y1{Oa(eX~P$2PO#^$eO#t1zO&Y1{O~Oa1}O~P%[Oa2PO~O&c2SOP&aiQ&aiS&aiY&aia&aid&aie&aij&ain&aip&aiq&air&aix&aiz&ai|&ai!Q&ai!U&ai!V&ai!]&ai!g&ai!j&ai!m&ai!n&ai!o&ai!q&ai!s&ai!v&ai!z&ai$V&ai$m&ai%g&ai%i&ai%k&ai%l&ai%m&ai%p&ai%r&ai%u&ai%v&ai%x&ai&U&ai&[&ai&^&ai&`&ai&b&ai&e&ai&k&ai&q&ai&s&ai&u&ai&w&ai&y&ai'u&ai(R&ai(T&ai(W&ai(_&ai(m&ai![&aib&ai&h&ai~Ob2YO![2WO&h2XO~P`O!]XO!j2[O~O&o,vOP&jiQ&jiS&jiY&jia&jid&jie&jij&jin&jip&jiq&jir&jix&jiz&ji|&ji!Q&ji!U&ji!V&ji!]&ji!g&ji!j&ji!m&ji!n&ji!o&ji!q&ji!s&ji!v&ji!z&ji$V&ji$m&ji%g&ji%i&ji%k&ji%l&ji%m&ji%p&ji%r&ji%u&ji%v&ji%x&ji&U&ji&[&ji&^&ji&`&ji&b&ji&e&ji&k&ji&q&ji&s&ji&u&ji&w&ji&y&ji'u&ji(R&ji(T&ji(W&ji(_&ji(m&ji![&ji&c&jib&ji&h&ji~O!W2bO~O!Z!_a![!_a~P#BPOq!nO!Q!oO!Y2hO(c!mO!Z'VX!['VX~P@]O!Z-WO![(ga~O!Z']X![']X~P!9]O!Z-ZO![(va~O![2oO~P'_Oa%mO#^2xO'x%mO~Oa%mO!e#vO#^2xO'x%mO~Oa%mO!e#vO!n2|O#^2xO'x%mO(p'nO~Oa%mO'x%mO~P!:TO!Z$_Ot$pa~O!W'Ui!Z'Ui~P!:TO!Z(TO!W(fi~O!Z([O!W(ti~O!W(ui!Z(ui~P!:TO!Z(ri!i(ria(ri'x(ri~P!:TO#^3OO!Z(ri!i(ria(ri'x(ri~O!Z(hO!i(qi~O!Q%gO!]%hO!z]O#g3TO#h3SO(R%fO~O!Q%gO!]%hO#h3SO(R%fO~Ol3[O!]'^O%h3ZO~Oh%VOl3[O!]'^O%h3ZO~O#i%`aP%`aR%`a[%`aa%`ap%`a!Q%`a!j%`a!n%`a#P%`a#l%`a#m%`a#n%`a#o%`a#p%`a#q%`a#r%`a#s%`a#t%`a#u%`a#w%`a#y%`a#z%`a'x%`a(_%`a(p%`a!i%`a!W%`a'u%`at%`a!]%`a%h%`a!e%`a~P#LTO#i%baP%baR%ba[%baa%bap%ba!Q%ba!j%ba!n%ba#P%ba#l%ba#m%ba#n%ba#o%ba#p%ba#q%ba#r%ba#s%ba#t%ba#u%ba#w%ba#y%ba#z%ba'x%ba(_%ba(p%ba!i%ba!W%ba'u%bat%ba!]%ba%h%ba!e%ba~P#LvO#i%`aP%`aR%`a[%`aa%`ap%`a!Q%`a!Z%`a!j%`a!n%`a#P%`a#l%`a#m%`a#n%`a#o%`a#p%`a#q%`a#r%`a#s%`a#t%`a#u%`a#w%`a#y%`a#z%`a'x%`a(_%`a(p%`a!i%`a!W%`a'u%`a#^%`at%`a!]%`a%h%`a!e%`a~P#.{O#i%baP%baR%ba[%baa%bap%ba!Q%ba!Z%ba!j%ba!n%ba#P%ba#l%ba#m%ba#n%ba#o%ba#p%ba#q%ba#r%ba#s%ba#t%ba#u%ba#w%ba#y%ba#z%ba'x%ba(_%ba(p%ba!i%ba!W%ba'u%ba#^%bat%ba!]%ba%h%ba!e%ba~P#.{O#i{aP{a[{aa{ap{a!j{a!n{a#P{a#l{a#m{a#n{a#o{a#p{a#q{a#r{a#s{a#t{a#u{a#w{a#y{a#z{a'x{a(_{a(p{a!i{a!W{a'u{at{a!]{a%h{a!e{a~P$&dO#i$raP$raR$ra[$raa$rap$ra!Q$ra!j$ra!n$ra#P$ra#l$ra#m$ra#n$ra#o$ra#p$ra#q$ra#r$ra#s$ra#t$ra#u$ra#w$ra#y$ra#z$ra'x$ra(_$ra(p$ra!i$ra!W$ra'u$rat$ra!]$ra%h$ra!e$ra~P$'`O#i$taP$taR$ta[$taa$tap$ta!Q$ta!j$ta!n$ta#P$ta#l$ta#m$ta#n$ta#o$ta#p$ta#q$ta#r$ta#s$ta#t$ta#u$ta#w$ta#y$ta#z$ta'x$ta(_$ta(p$ta!i$ta!W$ta'u$tat$ta!]$ta%h$ta!e$ta~P$(RO#i%SaP%SaR%Sa[%Saa%Sap%Sa!Q%Sa!Z%Sa!j%Sa!n%Sa#P%Sa#l%Sa#m%Sa#n%Sa#o%Sa#p%Sa#q%Sa#r%Sa#s%Sa#t%Sa#u%Sa#w%Sa#y%Sa#z%Sa'x%Sa(_%Sa(p%Sa!i%Sa!W%Sa'u%Sa#^%Sat%Sa!]%Sa%h%Sa!e%Sa~P#.{Oa#aq!Z#aq'x#aq'u#aq!W#aq!i#aqt#aq!]#aq%h#aq!e#aq~P!:TO!Y3dO!Z'WX!i'WX~P%[O!Z.oO!i(ia~O!Z.oO!i(ia~P!:TO!W3gO~O#}!la![!la~PKZO#}!ha!Z!ha![!ha~P#BPO#}!pa![!pa~P!<kO#}!ra![!ra~P!?ROg'ZX!Z'ZX~P!+rO!Z.zOg(na~OSfO!]3{O$c3|O~O![4QO~Ot4RO~P#.{Oa$lq!Z$lq'x$lq'u$lq!W$lq!i$lqt$lq!]$lq%h$lq!e$lq~P!:TO!W4TO~P!&iO!Q4UO~O!O)|O'w)}O(x%POl'ga(w'ga!Z'ga#^'ga~Og'ga#}'ga~P%+uO!O)|O'w)}Ol'ia(w'ia(x'ia!Z'ia#^'ia~Og'ia#}'ia~P%,hO(p$YO~P#.{O!WfX!W$yX!ZfX!Z$yX!e%QX#^fX~P!/qO(R<xO~P!1dO!Q%gO!Y4XO!]%hO(R%fO!Z'cX!i'cX~O!Z/kO!i(|a~O!Z/kO!e#vO!i(|a~O!Z/kO!e#vO(p'nO!i(|a~Og${i!Z${i#^${i#}${i~P!0uO!Y4aO!W'eX!Z'eX~P!3cO!Z/sO!W(}a~O!Z/sO!W(}a~P#.{OP]XR]X[]Xp]X!O]X!Q]X!W]X!Z]X!j]X!n]X#P]X#Q]X#^]X#ifX#l]X#m]X#n]X#o]X#p]X#q]X#r]X#s]X#t]X#u]X#w]X#y]X#z]X$P]X(_]X(p]X(w]X(x]X~O!e%XX#t%XX~P%0XO!e#vO#t4fO~Oh%VO!e#vO!j%dO~Oh%VOp4kO!j%dO(p'nO~Op4pO!e#vO(p'nO~Oq!nO!Q4qO(TTO(WUO(c!mO~O(w$}Ol%`i!O%`i'w%`i(x%`i!Z%`i#^%`i~Og%`i#}%`i~P%3xO(x%POl%bi!O%bi'w%bi(w%bi!Z%bi#^%bi~Og%bi#}%bi~P%4kOg(]i!Z(]i~P!0uO#^4wOg(]i!Z(]i~P!0uO!i4zO~Oa$nq!Z$nq'x$nq'u$nq!W$nq!i$nqt$nq!]$nq%h$nq!e$nq~P!:TO!W5QO~O!Z5RO!])OX~P#.{Oa]Xa$yX!]]X!]$yX%]]X'x]X'x$yX!Z]X!Z$yX~P!/qO%]5UOa%Za!]%Za'x%Za!Z%Za~OlmX!OmX'wmX(wmX(xmX~P%7nOn5VO(R#nO~Ob5]O%i5^O(R+nO(TTO(WUO!Z'rX!['rX~O!Z0}O![)Va~O[5bO~O`5cO~Oa%mO'x%mO~P#.{O!Z5kO#^5mO![)SX~O![5nO~Op5tOq!nO!Q*fO!`!yO!a!vO!b!vO!z;wO#R!pO#S!pO#T!pO#U!pO#V!pO#Y5sO#Z!zO(S!lO(TTO(WUO(c!mO(m!sO~O![5rO~P%:ROl5yO!]1gO%h5xO~Oh%VOl5yO!]1gO%h5xO~Ob6QO(R#nO(TTO(WUO!Z'qX!['qX~O!Z1rO![)Ta~O(TTO(WUO(c6SO~O`6WO~O#t6ZO&Y6[O~PMvO!i6]O~P%[Oa6_O~Oa6_O~P%[Ob2YO![6dO&h2XO~P`O!e6fO~O!e6hOh(hi!Z(hi![(hi!e(hi!j(hip(hi(p(hi~O!Z#fi![#fi~P#BPO#^6iO!Z#fi![#fi~O!Z!_i![!_i~P#BPOa%mO#^6rO'x%mO~Oa%mO!e#vO#^6rO'x%mO~O!Z(rq!i(rqa(rq'x(rq~P!:TO!Z(hO!i(qq~O!Q%gO!]%hO#h6yO(R%fO~O!]'^O%h6|O~Ol7QO!]'^O%h6|O~O#i'gaP'gaR'ga['gaa'gap'ga!Q'ga!j'ga!n'ga#P'ga#l'ga#m'ga#n'ga#o'ga#p'ga#q'ga#r'ga#s'ga#t'ga#u'ga#w'ga#y'ga#z'ga'x'ga(_'ga(p'ga!i'ga!W'ga'u'gat'ga!]'ga%h'ga!e'ga~P%+uO#i'iaP'iaR'ia['iaa'iap'ia!Q'ia!j'ia!n'ia#P'ia#l'ia#m'ia#n'ia#o'ia#p'ia#q'ia#r'ia#s'ia#t'ia#u'ia#w'ia#y'ia#z'ia'x'ia(_'ia(p'ia!i'ia!W'ia'u'iat'ia!]'ia%h'ia!e'ia~P%,hO#i${iP${iR${i[${ia${ip${i!Q${i!Z${i!j${i!n${i#P${i#l${i#m${i#n${i#o${i#p${i#q${i#r${i#s${i#t${i#u${i#w${i#y${i#z${i'x${i(_${i(p${i!i${i!W${i'u${i#^${it${i!]${i%h${i!e${i~P#.{O#i%`iP%`iR%`i[%`ia%`ip%`i!Q%`i!j%`i!n%`i#P%`i#l%`i#m%`i#n%`i#o%`i#p%`i#q%`i#r%`i#s%`i#t%`i#u%`i#w%`i#y%`i#z%`i'x%`i(_%`i(p%`i!i%`i!W%`i'u%`it%`i!]%`i%h%`i!e%`i~P%3xO#i%biP%biR%bi[%bia%bip%bi!Q%bi!j%bi!n%bi#P%bi#l%bi#m%bi#n%bi#o%bi#p%bi#q%bi#r%bi#s%bi#t%bi#u%bi#w%bi#y%bi#z%bi'x%bi(_%bi(p%bi!i%bi!W%bi'u%bit%bi!]%bi%h%bi!e%bi~P%4kO!Z'Wa!i'Wa~P!:TO!Z.oO!i(ii~O#}#ai!Z#ai![#ai~P#BPOP$[OR#zO!O#yO!Q#{O!j#xO!n$[O(_VO[#kip#ki#P#ki#m#ki#n#ki#o#ki#p#ki#q#ki#r#ki#s#ki#t#ki#u#ki#w#ki#y#ki#z#ki#}#ki(p#ki(w#ki(x#ki!Z#ki![#ki~O#l#ki~P%MQO#l<PO~P%MQOP$[OR#zOp<]O!O#yO!Q#{O!j#xO!n$[O#l<PO#m<QO#n<QO#o<QO(_VO[#ki#P#ki#q#ki#r#ki#s#ki#t#ki#u#ki#w#ki#y#ki#z#ki#}#ki(p#ki(w#ki(x#ki!Z#ki![#ki~O#p#ki~P& YO#p<RO~P& YOP$[OR#zO[<_Op<]O!O#yO!Q#{O!j#xO!n$[O#P<SO#l<PO#m<QO#n<QO#o<QO#p<RO#q<SO#r<SO#s<^O#t<SO(_VO#w#ki#y#ki#z#ki#}#ki(p#ki(w#ki(x#ki!Z#ki![#ki~O#u#ki~P&#bOP$[OR#zO[<_Op<]O!O#yO!Q#{O!j#xO!n$[O#P<SO#l<PO#m<QO#n<QO#o<QO#p<RO#q<SO#r<SO#s<^O#t<SO#u<TO(_VO(x#}O#y#ki#z#ki#}#ki(p#ki(w#ki!Z#ki![#ki~O#w<VO~P&%cO#w#ki~P&%cO#u<TO~P&#bOP$[OR#zO[<_Op<]O!O#yO!Q#{O!j#xO!n$[O#P<SO#l<PO#m<QO#n<QO#o<QO#p<RO#q<SO#r<SO#s<^O#t<SO#u<TO#w<VO(_VO(w#|O(x#}O#z#ki#}#ki(p#ki!Z#ki![#ki~O#y#ki~P&'rO#y<XO~P&'rOa#{y!Z#{y'x#{y'u#{y!W#{y!i#{yt#{y!]#{y%h#{y!e#{y~P!:TO[#kip#ki#P#ki#p#ki#q#ki#r#ki#s#ki#t#ki#u#ki#w#ki#y#ki#z#ki#}#ki(p#ki!Z#ki![#ki~OP$[OR#zO!O#yO!Q#{O!j#xO!n$[O#l<PO#m<QO#n<QO#o<QO(_VO(w#ki(x#ki~P&*nOl=}O!O)|O'w)}O(w$}O(x%POP#kiR#ki!Q#ki!j#ki!n#ki#l#ki#m#ki#n#ki#o#ki(_#ki~P&*nO#Q$dOP(^XR(^X[(^Xl(^Xp(^X!O(^X!Q(^X!j(^X!n(^X#P(^X#l(^X#m(^X#n(^X#o(^X#p(^X#q(^X#r(^X#s(^X#t(^X#u(^X#w(^X#y(^X#z(^X#}(^X'w(^X(_(^X(p(^X(w(^X(x(^X!Z(^X![(^X~O#}$Oi!Z$Oi![$Oi~P#BPO#}!pi![!pi~P$*OOg'Za!Z'Za~P!0uO![7dO~O!Z'ba!['ba~P#BPO!W7eO~P#.{O!e#vO(p'nO!Z'ca!i'ca~O!Z/kO!i(|i~O!Z/kO!e#vO!i(|i~Og${q!Z${q#^${q#}${q~P!0uO!W'ea!Z'ea~P#.{O!e7lO~O!Z/sO!W(}i~P#.{O!Z/sO!W(}i~O!W7oO~Oh%VOp7tO!j%dO(p'nO~O!e#vO#t7vO~Op7yO!e#vO(p'nO~O!O)|O'w)}O(x%POl'ha(w'ha!Z'ha#^'ha~Og'ha#}'ha~P&3oO!O)|O'w)}Ol'ja(w'ja(x'ja!Z'ja#^'ja~Og'ja#}'ja~P&4bO!W7{O~Og$}q!Z$}q#^$}q#}$}q~P!0uOg(]q!Z(]q~P!0uO#^7|Og(]q!Z(]q~P!0uOa$ny!Z$ny'x$ny'u$ny!W$ny!i$nyt$ny!]$ny%h$ny!e$ny~P!:TO!e6hO~O!Z5RO!])Oa~O!]'^OP$SaR$Sa[$Sap$Sa!O$Sa!Q$Sa!Z$Sa!j$Sa!n$Sa#P$Sa#l$Sa#m$Sa#n$Sa#o$Sa#p$Sa#q$Sa#r$Sa#s$Sa#t$Sa#u$Sa#w$Sa#y$Sa#z$Sa(_$Sa(p$Sa(w$Sa(x$Sa~O%h6|O~P&7SO%]8QOa%Zi!]%Zi'x%Zi!Z%Zi~Oa#ay!Z#ay'x#ay'u#ay!W#ay!i#ayt#ay!]#ay%h#ay!e#ay~P!:TO[8SO~Ob8UO(R+nO(TTO(WUO~O!Z0}O![)Vi~O`8YO~O(c(zO!Z'nX!['nX~O!Z5kO![)Sa~O![8cO~P%:RO(m!sO~P$$oO#Y8dO~O!]1gO~O!]1gO%h8fO~Ol8iO!]1gO%h8fO~O[8nO!Z'qa!['qa~O!Z1rO![)Ti~O!i8rO~O!i8sO~O!i8vO~O!i8vO~P%[Oa8xO~O!e8yO~O!i8zO~O!Z(ui![(ui~P#BPOa%mO#^9SO'x%mO~O!Z(ry!i(rya(ry'x(ry~P!:TO!Z(hO!i(qy~O%h9VO~P&7SO!]'^O%h9VO~O#i${qP${qR${q[${qa${qp${q!Q${q!Z${q!j${q!n${q#P${q#l${q#m${q#n${q#o${q#p${q#q${q#r${q#s${q#t${q#u${q#w${q#y${q#z${q'x${q(_${q(p${q!i${q!W${q'u${q#^${qt${q!]${q%h${q!e${q~P#.{O#i'haP'haR'ha['haa'hap'ha!Q'ha!j'ha!n'ha#P'ha#l'ha#m'ha#n'ha#o'ha#p'ha#q'ha#r'ha#s'ha#t'ha#u'ha#w'ha#y'ha#z'ha'x'ha(_'ha(p'ha!i'ha!W'ha'u'hat'ha!]'ha%h'ha!e'ha~P&3oO#i'jaP'jaR'ja['jaa'jap'ja!Q'ja!j'ja!n'ja#P'ja#l'ja#m'ja#n'ja#o'ja#p'ja#q'ja#r'ja#s'ja#t'ja#u'ja#w'ja#y'ja#z'ja'x'ja(_'ja(p'ja!i'ja!W'ja'u'jat'ja!]'ja%h'ja!e'ja~P&4bO#i$}qP$}qR$}q[$}qa$}qp$}q!Q$}q!Z$}q!j$}q!n$}q#P$}q#l$}q#m$}q#n$}q#o$}q#p$}q#q$}q#r$}q#s$}q#t$}q#u$}q#w$}q#y$}q#z$}q'x$}q(_$}q(p$}q!i$}q!W$}q'u$}q#^$}qt$}q!]$}q%h$}q!e$}q~P#.{O!Z'Wi!i'Wi~P!:TO#}#aq!Z#aq![#aq~P#BPO(w$}OP%`aR%`a[%`ap%`a!Q%`a!j%`a!n%`a#P%`a#l%`a#m%`a#n%`a#o%`a#p%`a#q%`a#r%`a#s%`a#t%`a#u%`a#w%`a#y%`a#z%`a#}%`a(_%`a(p%`a!Z%`a![%`a~Ol%`a!O%`a'w%`a(x%`a~P&HgO(x%POP%baR%ba[%bap%ba!Q%ba!j%ba!n%ba#P%ba#l%ba#m%ba#n%ba#o%ba#p%ba#q%ba#r%ba#s%ba#t%ba#u%ba#w%ba#y%ba#z%ba#}%ba(_%ba(p%ba!Z%ba![%ba~Ol%ba!O%ba'w%ba(w%ba~P&JnOl=}O!O)|O'w)}O(x%PO~P&HgOl=}O!O)|O'w)}O(w$}O~P&JnOR0cO!O0cO!Q0dO#Q$dOP{a[{al{ap{a!j{a!n{a#P{a#l{a#m{a#n{a#o{a#p{a#q{a#r{a#s{a#t{a#u{a#w{a#y{a#z{a#}{a'w{a(_{a(p{a(w{a(x{a!Z{a![{a~O!O)|O'w)}OP$raR$ra[$ral$rap$ra!Q$ra!j$ra!n$ra#P$ra#l$ra#m$ra#n$ra#o$ra#p$ra#q$ra#r$ra#s$ra#t$ra#u$ra#w$ra#y$ra#z$ra#}$ra(_$ra(p$ra(w$ra(x$ra!Z$ra![$ra~O!O)|O'w)}OP$taR$ta[$tal$tap$ta!Q$ta!j$ta!n$ta#P$ta#l$ta#m$ta#n$ta#o$ta#p$ta#q$ta#r$ta#s$ta#t$ta#u$ta#w$ta#y$ta#z$ta#}$ta(_$ta(p$ta(w$ta(x$ta!Z$ta![$ta~Ol=}O!O)|O'w)}O(w$}O(x%PO~OP%SaR%Sa[%Sap%Sa!Q%Sa!j%Sa!n%Sa#P%Sa#l%Sa#m%Sa#n%Sa#o%Sa#p%Sa#q%Sa#r%Sa#s%Sa#t%Sa#u%Sa#w%Sa#y%Sa#z%Sa#}%Sa(_%Sa(p%Sa!Z%Sa![%Sa~P'%sO#}$lq!Z$lq![$lq~P#BPO#}$nq!Z$nq![$nq~P#BPO![9dO~O#}9eO~P!0uO!e#vO!Z'ci!i'ci~O!e#vO(p'nO!Z'ci!i'ci~O!Z/kO!i(|q~O!W'ei!Z'ei~P#.{O!Z/sO!W(}q~Op9lO!e#vO(p'nO~O[9nO!W9mO~P#.{O!W9mO~O!e#vO#t9tO~Og(]y!Z(]y~P!0uO!Z'la!]'la~P#.{Oa%Zq!]%Zq'x%Zq!Z%Zq~P#.{O[9yO~O!Z0}O![)Vq~O#^9}O!Z'na!['na~O!Z5kO![)Si~P#BPO!Q:PO~O!]1gO%h:SO~O(TTO(WUO(c:XO~O!Z1rO![)Tq~O!i:[O~O!i:]O~O!i:^O~O!i:^O~P%[O#^:aO!Z#fy![#fy~O!Z#fy![#fy~P#BPO%h:fO~P&7SO!]'^O%h:fO~O#}#{y!Z#{y![#{y~P#BPOP${iR${i[${ip${i!Q${i!j${i!n${i#P${i#l${i#m${i#n${i#o${i#p${i#q${i#r${i#s${i#t${i#u${i#w${i#y${i#z${i#}${i(_${i(p${i!Z${i![${i~P'%sO!O)|O'w)}O(x%POP'gaR'ga['gal'gap'ga!Q'ga!j'ga!n'ga#P'ga#l'ga#m'ga#n'ga#o'ga#p'ga#q'ga#r'ga#s'ga#t'ga#u'ga#w'ga#y'ga#z'ga#}'ga(_'ga(p'ga(w'ga!Z'ga!['ga~O!O)|O'w)}OP'iaR'ia['ial'iap'ia!Q'ia!j'ia!n'ia#P'ia#l'ia#m'ia#n'ia#o'ia#p'ia#q'ia#r'ia#s'ia#t'ia#u'ia#w'ia#y'ia#z'ia#}'ia(_'ia(p'ia(w'ia(x'ia!Z'ia!['ia~O(w$}OP%`iR%`i[%`il%`ip%`i!O%`i!Q%`i!j%`i!n%`i#P%`i#l%`i#m%`i#n%`i#o%`i#p%`i#q%`i#r%`i#s%`i#t%`i#u%`i#w%`i#y%`i#z%`i#}%`i'w%`i(_%`i(p%`i(x%`i!Z%`i![%`i~O(x%POP%biR%bi[%bil%bip%bi!O%bi!Q%bi!j%bi!n%bi#P%bi#l%bi#m%bi#n%bi#o%bi#p%bi#q%bi#r%bi#s%bi#t%bi#u%bi#w%bi#y%bi#z%bi#}%bi'w%bi(_%bi(p%bi(w%bi!Z%bi![%bi~O#}$ny!Z$ny![$ny~P#BPO#}#ay!Z#ay![#ay~P#BPO!e#vO!Z'cq!i'cq~O!Z/kO!i(|y~O!W'eq!Z'eq~P#.{Op:pO!e#vO(p'nO~O[:tO!W:sO~P#.{O!W:sO~Og(]!R!Z(]!R~P!0uOa%Zy!]%Zy'x%Zy!Z%Zy~P#.{O!Z0}O![)Vy~O!Z5kO![)Sq~O(R:zO~O!]1gO%h:}O~O!i;QO~O%h;VO~P&7SOP${qR${q[${qp${q!Q${q!j${q!n${q#P${q#l${q#m${q#n${q#o${q#p${q#q${q#r${q#s${q#t${q#u${q#w${q#y${q#z${q#}${q(_${q(p${q!Z${q![${q~P'%sO!O)|O'w)}O(x%POP'haR'ha['hal'hap'ha!Q'ha!j'ha!n'ha#P'ha#l'ha#m'ha#n'ha#o'ha#p'ha#q'ha#r'ha#s'ha#t'ha#u'ha#w'ha#y'ha#z'ha#}'ha(_'ha(p'ha(w'ha!Z'ha!['ha~O!O)|O'w)}OP'jaR'ja['jal'jap'ja!Q'ja!j'ja!n'ja#P'ja#l'ja#m'ja#n'ja#o'ja#p'ja#q'ja#r'ja#s'ja#t'ja#u'ja#w'ja#y'ja#z'ja#}'ja(_'ja(p'ja(w'ja(x'ja!Z'ja!['ja~OP$}qR$}q[$}qp$}q!Q$}q!j$}q!n$}q#P$}q#l$}q#m$}q#n$}q#o$}q#p$}q#q$}q#r$}q#s$}q#t$}q#u$}q#w$}q#y$}q#z$}q#}$}q(_$}q(p$}q!Z$}q![$}q~P'%sOg%d!Z!Z%d!Z#^%d!Z#}%d!Z~P!0uO!W;ZO~P#.{Op;[O!e#vO(p'nO~O[;^O!W;ZO~P#.{O!Z'nq!['nq~P#BPO!Z#f!Z![#f!Z~P#BPO#i%d!ZP%d!ZR%d!Z[%d!Za%d!Zp%d!Z!Q%d!Z!Z%d!Z!j%d!Z!n%d!Z#P%d!Z#l%d!Z#m%d!Z#n%d!Z#o%d!Z#p%d!Z#q%d!Z#r%d!Z#s%d!Z#t%d!Z#u%d!Z#w%d!Z#y%d!Z#z%d!Z'x%d!Z(_%d!Z(p%d!Z!i%d!Z!W%d!Z'u%d!Z#^%d!Zt%d!Z!]%d!Z%h%d!Z!e%d!Z~P#.{Op;fO!e#vO(p'nO~O!W;gO~P#.{Op;nO!e#vO(p'nO~O!W;oO~P#.{OP%d!ZR%d!Z[%d!Zp%d!Z!Q%d!Z!j%d!Z!n%d!Z#P%d!Z#l%d!Z#m%d!Z#n%d!Z#o%d!Z#p%d!Z#q%d!Z#r%d!Z#s%d!Z#t%d!Z#u%d!Z#w%d!Z#y%d!Z#z%d!Z#}%d!Z(_%d!Z(p%d!Z!Z%d!Z![%d!Z~P'%sOp;rO!e#vO(p'nO~Ot(dX~P1qO!O%qO~P!(yO(S!lO~P!(yO!WfX!ZfX#^fX~P%0XOP]XR]X[]Xp]X!O]X!Q]X!Z]X!ZfX!j]X!n]X#P]X#Q]X#^]X#^fX#ifX#l]X#m]X#n]X#o]X#p]X#q]X#r]X#s]X#t]X#u]X#w]X#y]X#z]X$P]X(_]X(p]X(w]X(x]X~O!efX!i]X!ifX(pfX~P'JlOP;vOQ;vOSfOd=rOe!iOnkOp;vOqkOrkOxkOz;vO|;vO!QWO!UkO!VkO!]XO!g;yO!jZO!m;vO!n;vO!o;vO!q;zO!s;}O!v!hO$V!kO$m=pO(R)ZO(TTO(WUO(_VO(m[O~O!Z<ZO![$pa~Oh%VOn%WOp%XOq$tOr$tOx%YOz%ZO|<fO!Q${O!]$|O!g=wO!j$xO#h<lO$V%_O$s<hO$u<jO$x%`O(R(tO(TTO(WUO(_$uO(w$}O(x%PO~Oj)bO~P( bOp!cX(p!cX~P# qOp(hX(p(hX~P#!dO![]X![fX~P'JlO!WfX!W$yX!ZfX!Z$yX#^fX~P!/qO#i<OO~O!e#vO#i<OO~O#^<`O~O#t<SO~O#^<pO!Z(uX![(uX~O#^<`O!Z(sX![(sX~O#i<qO~Og<sO~P!0uO#i<yO~O#i<zO~O!e#vO#i<{O~O!e#vO#i<qO~O#}<|O~P#BPO#i<}O~O#i=OO~O#i=TO~O#i=UO~O#i=VO~O#i=WO~O#}=XO~P!0uO#}=YO~P!0uO#Q#R#S#U#V#Y#g#h#s$m$s$u$x%[%]%g%h%i%p%r%u%v%x%z~'|T#m!V'z(S#nq#l#op!O'{$['{(R$^(c~",
27389
  goto: "$4`)TPPPPP)UPP)XP)jP*z/PPPPP5wPP6_PP<U?kP@OP@OPPP@OPBOP@OP@OP@OPBSPPBXPBsPGlPPPGpPPPPGpJrPPPJxKtPGpPNSPPPP!!bGpPPPGpPGpP!$pGpP!(V!)X!)bP!*U!*Y!*UPPPPP!-f!)XPP!-v!.pP!1dGpGp!1i!4t!9[!9[!=YPPP!=bGpPPPPPPPPPPP!@pP!A}PPGp!C`PGpPGpGpGpGpPGp!DrP!G{P!KQP!KU!K`!Kd!KdP!GxP!Kh!KhP!NmP!NqGpGp!Nw##{@OP@OP@O@OP#%X@O@O#'c@O#*R@O#,V@O@O#,u#/R#/R#/W#/a#/R#/jP#/RP@O#0S@O#3s@O@O5wPPP#7jPPP#8T#8TP#8TP#8k#8TPP#8qP#8hP#8h#9U#8h#9p#9v5t)X#9y)XP#:Q#:Q#:QP)XP)XP)XP)XPP)XP#:W#:ZP#:Z)XP#:_P#:bP)XP)XP)XP)XP)XP)X)XPP#:h#:n#:y#;P#;V#;]#;c#;q#;w#;}#<X#<_#<i#<y#=P#=q#>T#>Z#>a#>o#?U#@s#AR#AY#Bn#B|#Dh#Dv#D|#ES#EY#Ed#Ej#Ep#Ez#F^#FdPPPPPPPPPP#FjPPPPPPP#G_#Jf#Ku#K|#LUPPPP$#[$&S$,l$,o$,r$-_$-b$-e$-l$-tP$-zP$.h$.l$/d$0r$0w$1_PP$1d$1j$1nP$1q$1u$1y$2o$3W$3o$3s$3v$3y$4P$4S$4W$4[R!|RoqOXst!Z#d%k&n&p&q&s,k,p1}2QY!vQ'[-]1b5dQ%qvQ%yyQ&Q|Q&f!VS'S!e-TQ'b!iS'h!r!yU*f$}*W*kQ+i%zQ+v&SQ,[&`Q-Z'ZQ-e'cQ-m'iQ0S*mQ1l,]R;`:m%QdOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#y#|$P$Q$R$S$T$U$V$W$X$Y$Z$b$f%k%q&O&g&j&n&p&q&s&w'P'^'n(O(Q(W(_(s(w({)z+R+V,h,k,p-a-i-w-}.o.v/g0b0g0w1e1u1v1x1z1}2Q2S2s2y3a5a5k5{5|6P6d7}8S8c8mS#q]:j!r)]$]$n'T)o,|-P/O2c3v5_6Z9^9o:i:l:m:p:q:r:s:t:u:v:w:x:y:z:{:|:};R;`;b;c;e;m;n;w;x<eQ*x%[Q+n%|Q,^&cQ,e&kQ.f;WQ0n+aQ0r+cQ0}+oQ1t,cQ3R._Q4}0xQ5r1mQ6p3VQ6|;XQ7o5OR8s6q'OkOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#y#|$P$Q$R$S$T$U$V$W$X$Y$Z$]$b$f$n%k%q&O&g&j&k&n&p&q&s&w'P'T'^'n(O(Q(W(_(s(w({)o)z+R+V+a,h,k,p,|-P-a-i-w-}._.o.v/O/g0b0g0w1e1u1v1x1z1}2Q2S2c2s2y3V3a3v5_5a5k5{5|6P6Z6d6q7}8S8c8m9^9o:i:l:m:p:q:r:s:t:u:v:w:x:y:z:{:|:};R;`;b;c;e;m;n;w;x<et!nQ!r!v!y!z'S'Z'['h'i'j-T-Z-]-m1b5d5f$z$ti#v#x$d$e$y$|%P%R%]%^%b)v)|*O*Q*S*V*]*c*s*t+`+c+z+}.^.l/^/f/p/q/s0W0Y0d1X1[1d3U4O4Z4c4m4u4w5j6n7[7e8P8p8}9b9t:U:^;P;Q;S;T;U;V;Y;Z;[;];^;_;f;g;h;i;k;l;o;p;q;r;s;t;u;v;y;z<b<j<k<n<oQ&T|Q'Q!eU'W%g*W-WQ+n%|Q,^&cQ0c*|Q0}+oQ1S+uQ1s,bQ1t,cQ4}0xQ5W1UQ5r1mQ5u1oQ5v1rQ7o5OQ7r5TQ8[5xQ9]7sR9h8XrnOXst!V!Z#d%k&e&n&p&q&s,k,p1}2QR,`&g&x^OPXYstuvwz!Z!`!g!j!o#S#d#o#u#y#|$P$Q$R$S$T$U$V$W$X$Y$Z$]$b$f$n%k%q&O&g&j&k&n&p&q&s&w'P'^'n(Q(W(_(s(w({)o)z+R+V+a,h,k,p,|-P-a-i-w-}._.o.v/O/g0b0g0w1e1u1v1x1z1}2Q2S2c2s2y3V3a3v5_5a5k5{5|6P6Z6d6q7}8S8c8m9^9o:i:l:m:p:q:r:s:t:u:v:w:x:y:z:{:|:};R;`;b;c;e;m;n;w;x<d<e[#]WZ#W#Z'T(O!b%hm#h#i#l$y%c%f(X(c(d(e*V*Z*^+T+U+W,g,}-{.R.S.T.V/f/i2V2}3O4R6Y6kQ%txQ%xyS%}|&SQ&Z!TQ'_!hQ'a!iQ(l#sS+h%y%zQ+l%|Q,V&^Q,Z&`S-d'b'cQ.a(mQ0v+iQ0|+oQ1O+pQ1R+tQ1g,WS1k,[,]Q2o-eQ4|0xQ5Q0{Q5V1TQ5q1lQ7n5OQ7q5SQ9X7mR:P9Y!O${i#x%P%R%]%^%b*O*Q*]*s*t.l/p0W0Y0d4O4m8}<b<j<k!S%vy!i!u%x%y%z'R'a'b'c'g'q*e+h+i-Q-d-e-l/z0v2h2o2v4eQ+b%tQ+{&WQ,O&XQ,Y&`Q.`(lQ1f,VU1j,Z,[,]Q3W.aQ5l1gS5p1k1lQ8W5q#[<f#v$d$e$y$|)v)|*S*V*c+`+c+z+}.^/^/f/q/s1X1[1d3U4Z4c4u4w5j6n7[7e8P8p9b9t:U:^;S;U;Y;[;^;f;h;k;o;q;s;u;y<n<oo<g;P;Q;T;V;Z;];_;g;i;l;p;r;t;v;zW%Ui%W*u<bS&W!Q&eQ&X!RQ&Y!SR+y&U${%Ti#v#x$d$e$y$|%P%R%]%^%b)v)|*O*Q*S*V*]*c*s*t+`+c+z+}.^.l/^/f/p/q/s0W0Y0d1X1[1d3U4O4Z4c4m4u4w5j6n7[7e8P8p8}9b9t:U:^;P;Q;S;T;U;V;Y;Z;[;];^;_;f;g;h;i;k;l;o;p;q;r;s;t;u;v;y;z<b<j<k<n<oT)w$v)xV*y%[;W;XW'W!e%g*W-WS(z#z#{Q+s&PS.Y(h(iQ1],PQ4n0aR7w5]'OkOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#y#|$P$Q$R$S$T$U$V$W$X$Y$Z$]$b$f$n%k%q&O&g&j&k&n&p&q&s&w'P'T'^'n(O(Q(W(_(s(w({)o)z+R+V+a,h,k,p,|-P-a-i-w-}._.o.v/O/g0b0g0w1e1u1v1x1z1}2Q2S2c2s2y3V3a3v5_5a5k5{5|6P6Z6d6q7}8S8c8m9^9o:i:l:m:p:q:r:s:t:u:v:w:x:y:z:{:|:};R;`;b;c;e;m;n;w;x<e$i$ac#Y#e%o%p%r'}(T(o(v)O)P)Q)R)S)T)U)V)W)X)Y)[)_)c)m+^+r-R-p-u-z-|.k.q.u.w.x.y/Y0e2^2a2q2x3`3e3f3g3h3i3j3k3l3m3n3o3p3q3t3u3z4r4z6]6c6h6v6w7Q7R7y8g8k8t8z8{9q:R:Y:k<XT#TV#U'PkOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#y#|$P$Q$R$S$T$U$V$W$X$Y$Z$]$b$f$n%k%q&O&g&j&k&n&p&q&s&w'P'T'^'n(O(Q(W(_(s(w({)o)z+R+V+a,h,k,p,|-P-a-i-w-}._.o.v/O/g0b0g0w1e1u1v1x1z1}2Q2S2c2s2y3V3a3v5_5a5k5{5|6P6Z6d6q7}8S8c8m9^9o:i:l:m:p:q:r:s:t:u:v:w:x:y:z:{:|:};R;`;b;c;e;m;n;w;x<eQ'U!eR2d-Tv!nQ!e!r!v!y!z'S'Z'['h'i'j-T-Z-]-m1b5d5fU*e$}*W*kS/z*f*mQ0T*nQ1_,RQ4e0SR4h0VnqOXst!Z#d%k&n&p&q&s,k,p1}2QQ&u!^Q'r!xS(n#u:qQ+f%wQ,T&ZQ,U&]Q-b'`Q-o'kS.j(s;cS0f+R;mQ0t+gQ1a,SQ2U,rQ2W,sQ2`-OQ2m-cQ2p-gS4s0g;wQ4x0uS4{0w;xQ6[2bQ6`2nQ6e2uQ7l4yQ8h6^Q8i6aQ8l6fR9n8e$d$`c#Y#e%p%r'}(T(o(v)O)P)Q)R)S)T)U)V)W)X)Y)[)_)c)m+^+r-R-p-u-z-|.k.q.u.x.y/Y0e2^2a2q2x3`3e3f3g3h3i3j3k3l3m3n3o3p3q3t3u3z4r4z6]6c6h6v6w7Q7R7y8g8k8t8z8{9q:R:Y:k<XS(k#p'eU*r%S(r3sS+]%o.wQ3S0nQ6m3RQ8r6pR9u8s$d$_c#Y#e%p%r'}(T(o(v)O)P)Q)R)S)T)U)V)W)X)Y)[)_)c)m+^+r-R-p-u-z-|.k.q.u.x.y/Y0e2^2a2q2x3`3e3f3g3h3i3j3k3l3m3n3o3p3q3t3u3z4r4z6]6c6h6v6w7Q7R7y8g8k8t8z8{9q:R:Y:k<XS(j#p'eS(|#{$`S+[%o.wS.Z(i(kQ.z)^Q0k+]R3P.['OkOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#y#|$P$Q$R$S$T$U$V$W$X$Y$Z$]$b$f$n%k%q&O&g&j&k&n&p&q&s&w'P'T'^'n(O(Q(W(_(s(w({)o)z+R+V+a,h,k,p,|-P-a-i-w-}._.o.v/O/g0b0g0w1e1u1v1x1z1}2Q2S2c2s2y3V3a3v5_5a5k5{5|6P6Z6d6q7}8S8c8m9^9o:i:l:m:p:q:r:s:t:u:v:w:x:y:z:{:|:};R;`;b;c;e;m;n;w;x<eS#q]:jQ&p!XQ&q!YQ&s![Q&t!]R1|,nQ']!hQ+_%tQ-`'_S.](l+bQ2k-_W3T.`.a0m0oQ6_2lU6l3Q3S3WS8o6m6oS9s8q8rS:[9r9uQ:d:]R:g:eU!wQ'[-]T5b1b5d!Q_OXZ`st!V!Z#d#h%c%k&e&g&n&p&q&s(e,k,p.S1}2Q]!pQ!r'[-]1b5dT#q]:j%[{OPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#y#|$P$Q$R$S$T$U$V$W$X$Y$Z$b$f%k%q&O&g&j&k&n&p&q&s&w'P'^'n(O(Q(W(_(s(w({)z+R+V+a,h,k,p-a-i-w-}._.o.v/g0b0g0w1e1u1v1x1z1}2Q2S2s2y3V3a5a5k5{5|6P6d6q7}8S8c8mS(z#z#{S.Y(h(i!s<O$]$n'T)o,|-P/O2c3v5_6Z9^9o:i:l:m:p:q:r:s:t:u:v:w:x:y:z:{:|:};R;`;b;c;e;m;n;w;x<em!tQ!r!v!y!z'['h'i'j-]-m1b5d5fQ'p!uS(a#g1wS-k'g'sQ/l*YQ/x*eQ2w-nQ4V/mS4`/y0TQ7W4QS7c4f4hQ9P7XR9W7fQ#wbQ'o!uS(`#g1wS(b#m+QQ+S%dQ+d%uQ+j%{U-j'g'p'sQ.O(aQ/k*YQ/w*eQ/}*hQ0s+eQ1h,XS2t-k-nQ2|.WS4U/l/mS4_/x0TQ4b/|Q4d0OQ5n1iQ6g2wQ7V4QQ7Z4VS7_4`4hQ7d4gQ8U5oS9O7W7XQ9S7`Q9U7cQ9e8VQ9{9PQ9|9TQ:O9WQ:W9fQ:`9}Q<R;|Q<^<VR<_<WV!wQ'[-]%[aOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#y#|$P$Q$R$S$T$U$V$W$X$Y$Z$b$f%k%q&O&g&j&k&n&p&q&s&w'P'^'n(O(Q(W(_(s(w({)z+R+V+a,h,k,p-a-i-w-}._.o.v/g0b0g0w1e1u1v1x1z1}2Q2S2s2y3V3a5a5k5{5|6P6d6q7}8S8c8mS#wz!j!r;{$]$n'T)o,|-P/O2c3v5_6Z9^9o:i:l:m:p:q:r:s:t:u:v:w:x:y:z:{:|:};R;`;b;c;e;m;n;w;x<eR<R<d%[bOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#y#|$P$Q$R$S$T$U$V$W$X$Y$Z$b$f%k%q&O&g&j&k&n&p&q&s&w'P'^'n(O(Q(W(_(s(w({)z+R+V+a,h,k,p-a-i-w-}._.o.v/g0b0g0w1e1u1v1x1z1}2Q2S2s2y3V3a5a5k5{5|6P6d6q7}8S8c8mQ%dj!S%uy!i!u%x%y%z'R'a'b'c'g'q*e+h+i-Q-d-e-l/z0v2h2o2v4eS%{z!jQ+e%vQ,X&`W1i,Y,Z,[,]U5o1j1k1lS8V5p5qQ9f8W!r;|$]$n'T)o,|-P/O2c3v5_6Z9^9o:i:l:m:p:q:r:s:t:u:v:w:x:y:z:{:|:};R;`;b;c;e;m;n;w;x<eQ<V<cR<W<d%OeOPXYstuvw!Z!`!g!o#S#d#o#u#y#|$P$Q$R$S$T$U$V$W$X$Y$Z$b$f%k%q&O&g&j&n&p&q&s&w'P'^'n(Q(W(_(s(w({)z+R+V+a,h,k,p-a-i-w-}._.o.v/g0b0g0w1e1u1v1x1z1}2Q2S2s2y3V3a5a5k5{5|6P6d6q7}8S8c8mY#bWZ#W#Z(O!b%hm#h#i#l$y%c%f(X(c(d(e*V*Z*^+T+U+W,g,}-{.R.S.T.V/f/i2V2}3O4R6Y6kQ,f&k!p;}$]$n)o,|-P/O2c3v5_6Z9^9o:i:l:m:p:q:r:s:t:u:v:w:x:y:z:{:|:};R;`;b;c;e;m;n;w;x<eR<Q'TU'X!e%g*WR2f-W%QdOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#y#|$P$Q$R$S$T$U$V$W$X$Y$Z$b$f%k%q&O&g&j&n&p&q&s&w'P'^'n(O(Q(W(_(s(w({)z+R+V,h,k,p-a-i-w-}.o.v/g0b0g0w1e1u1v1x1z1}2Q2S2s2y3a5a5k5{5|6P6d7}8S8c8m!r)]$]$n'T)o,|-P/O2c3v5_6Z9^9o:i:l:m:p:q:r:s:t:u:v:w:x:y:z:{:|:};R;`;b;c;e;m;n;w;x<eQ,e&kQ0n+aQ3R._Q6p3VR8s6q!b$Vc#Y%o'}(T(o(v)X)Y)_)c+r-p-u-z-|.k.q/Y0e2q2x3`3q4r4z6c6h6v8k9q:k!P:x)[)m-R.w2^2a3e3o3p3t3z6]6w7Q7R7y8g8t8z8{:R:Y<X!f$Xc#Y%o'}(T(o(v)U)V)X)Y)_)c+r-p-u-z-|.k.q/Y0e2q2x3`3q4r4z6c6h6v8k9q:k!T:z)[)m-R.w2^2a3e3l3m3o3p3t3z6]6w7Q7R7y8g8t8z8{:R:Y<X!^$]c#Y%o'}(T(o(v)_)c+r-p-u-z-|.k.q/Y0e2q2x3`3q4r4z6c6h6v8k9q:kQ4O/dz<e)[)m-R.w2^2a3e3t3z6]6w7Q7R7y8g8t8z8{:R:Y<XQ<j<lR<k<m'OkOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#y#|$P$Q$R$S$T$U$V$W$X$Y$Z$]$b$f$n%k%q&O&g&j&k&n&p&q&s&w'P'T'^'n(O(Q(W(_(s(w({)o)z+R+V+a,h,k,p,|-P-a-i-w-}._.o.v/O/g0b0g0w1e1u1v1x1z1}2Q2S2c2s2y3V3a3v5_5a5k5{5|6P6Z6d6q7}8S8c8m9^9o:i:l:m:p:q:r:s:t:u:v:w:x:y:z:{:|:};R;`;b;c;e;m;n;w;x<eS$oh$pR3w.}'VgOPWXYZhstuvw!Z!`!g!o#S#W#Z#d#o#u#y#|$P$Q$R$S$T$U$V$W$X$Y$Z$]$b$f$n$p%k%q&O&g&j&k&n&p&q&s&w'P'T'^'n(O(Q(W(_(s(w({)o)z+R+V+a,h,k,p,|-P-a-i-w-}._.o.v.}/O/g0b0g0w1e1u1v1x1z1}2Q2S2c2s2y3V3a3v5_5a5k5{5|6P6Z6d6q7}8S8c8m9^9o:i:l:m:p:q:r:s:t:u:v:w:x:y:z:{:|:};R;`;b;c;e;m;n;w;x<eT$kf$qQ$ifS)f$l)jR)r$qT$jf$qT)h$l)j'VhOPWXYZhstuvw!Z!`!g!o#S#W#Z#d#o#u#y#|$P$Q$R$S$T$U$V$W$X$Y$Z$]$b$f$n$p%k%q&O&g&j&k&n&p&q&s&w'P'T'^'n(O(Q(W(_(s(w({)o)z+R+V+a,h,k,p,|-P-a-i-w-}._.o.v.}/O/g0b0g0w1e1u1v1x1z1}2Q2S2c2s2y3V3a3v5_5a5k5{5|6P6Z6d6q7}8S8c8m9^9o:i:l:m:p:q:r:s:t:u:v:w:x:y:z:{:|:};R;`;b;c;e;m;n;w;x<eT$oh$pQ$rhR)q$p%[jOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#y#|$P$Q$R$S$T$U$V$W$X$Y$Z$b$f%k%q&O&g&j&k&n&p&q&s&w'P'^'n(O(Q(W(_(s(w({)z+R+V+a,h,k,p-a-i-w-}._.o.v/g0b0g0w1e1u1v1x1z1}2Q2S2s2y3V3a5a5k5{5|6P6d6q7}8S8c8m!s<c$]$n'T)o,|-P/O2c3v5_6Z9^9o:i:l:m:p:q:r:s:t:u:v:w:x:y:z:{:|:};R;`;b;c;e;m;n;w;x<e#elOPXZst!Z!`!o#S#d#o#|$n%k&g&j&k&n&p&q&s&w'P'^({)o+V+a,h,k,p-a._/O/g0b1e1u1v1x1z1}2Q2S3V3v5a5k5{5|6P6q7}8S8c!O%Si#x%P%R%]%^%b*O*Q*]*s*t.l/p0W0Y0d4O4m8}<b<j<k#[(r#v$d$e$y$|)v)|*S*V*c+`+c+z+}.^/^/f/q/s1X1[1d3U4Z4c4u4w5j6n7[7e8P8p9b9t:U:^;S;U;Y;[;^;f;h;k;o;q;s;u;y<n<oQ*}%`Q/Z){o3s;P;Q;T;V;Z;];_;g;i;l;p;r;t;v;z!O$zi#x%P%R%]%^%b*O*Q*]*s*t.l/p0W0Y0d4O4m8}<b<j<kQ*_${U*h$}*W*kQ+O%aQ0O*i#[<T#v$d$e$y$|)v)|*S*V*c+`+c+z+}.^/^/f/q/s1X1[1d3U4Z4c4u4w5j6n7[7e8P8p9b9t:U:^;S;U;Y;[;^;f;h;k;o;q;s;u;y<n<on<U;P;Q;T;V;Z;];_;g;i;l;p;r;t;v;zQ<Y<fQ<Z<gQ<[<hR<]<i!O%Si#x%P%R%]%^%b*O*Q*]*s*t.l/p0W0Y0d4O4m8}<b<j<k#[(r#v$d$e$y$|)v)|*S*V*c+`+c+z+}.^/^/f/q/s1X1[1d3U4Z4c4u4w5j6n7[7e8P8p9b9t:U:^;S;U;Y;[;^;f;h;k;o;q;s;u;y<n<oo3s;P;Q;T;V;Z;];_;g;i;l;p;r;t;v;znoOXst!Z#d%k&n&p&q&s,k,p1}2QS*b$|*VQ,y&zQ,z&|R4Y/q$z%Ti#v#x$d$e$y$|%P%R%]%^%b)v)|*O*Q*S*V*]*c*s*t+`+c+z+}.^.l/^/f/p/q/s0W0Y0d1X1[1d3U4O4Z4c4m4u4w5j6n7[7e8P8p8}9b9t:U:^;P;Q;S;T;U;V;Y;Z;[;];^;_;f;g;h;i;k;l;o;p;q;r;s;t;u;v;y;z<b<j<k<n<oQ+|&XQ1Z,OQ5Z1YR7v5[V*j$}*W*kU*j$}*W*kT5c1b5dU/|*g/g5aT4g0U7}Q+d%uQ/}*hQ0s+eQ1h,XQ5n1iQ8U5oQ9e8VR:W9f!O%Pi#x%P%R%]%^%b*O*Q*]*s*t.l/p0W0Y0d4O4m8}<b<j<kr*O$w(t*P*q+P/o0[0]3^4W4q7U7g9z<S<`<aS0W*p0X#[;S#v$d$e$y$|)v)|*S*V*c+`+c+z+}.^/^/f/q/s1X1[1d3U4Z4c4u4w5j6n7[7e8P8p9b9t:U:^;S;U;Y;[;^;f;h;k;o;q;s;u;y<n<on;T;P;Q;T;V;Z;];_;g;i;l;p;r;t;v;z!^;f(p)a*X*a.b.e.i/V/[/d/t0l1W1Y3Z4X4]5Y5[6r6u7]7a7i7k9R9V:_<l<m`;g3r6x6{7P8u9v9y:hS;q.d3[T;r6z8x!O%Ri#x%P%R%]%^%b*O*Q*]*s*t.l/p0W0Y0d4O4m8}<b<j<kv*Q$w(t*R*p+P/`/o0[0]3^4W4i4q7U7g9z<S<`<aS0Y*q0Z#[;U#v$d$e$y$|)v)|*S*V*c+`+c+z+}.^/^/f/q/s1X1[1d3U4Z4c4u4w5j6n7[7e8P8p9b9t:U:^;S;U;Y;[;^;f;h;k;o;q;s;u;y<n<on;V;P;Q;T;V;Z;];_;g;i;l;p;r;t;v;z!b;h(p)a*X*a.c.d.i/V/[/d/t0l1W1Y3X3Z4X4]5Y5[6r6s6u7]7a7i7k9R9V:_<l<md;i3r6y6z7P8u8v9v9w9y:hS;s.e3]T;t6{8yrnOXst!V!Z#d%k&e&n&p&q&s,k,p1}2QQ&b!UR,h&krnOXst!V!Z#d%k&e&n&p&q&s,k,p1}2QR&b!UQ,Q&YR1V+ysnOXst!V!Z#d%k&e&n&p&q&s,k,p1}2QQ1c,VS5i1f1gU8O5g5h5lS9a8Q8RS:S9`9cQ:a:TR:f:bQ&i!VR,a&eR5u1oS%}|&SR1O+pQ&n!WR,k&oR,q&tT2O,p2QR,u&uQ,t&uR2X,uQ'u!{R-q'uSsOtQ#dXT%ns#dQ#OTR'w#OQ#RUR'y#RQ)x$vR/W)xQ#UVR'{#UQ#XWU(R#X(S-xQ(S#YR-x(TQ-U'UR2e-UQ.m(tR3_.mQ.p(vS3b.p3cR3c.qQ-]'[R2i-]Y!rQ'[-]1b5dR'f!rU#_W%f*VU(Y#_(Z-yQ(Z#`R-y(UQ-X'XR2g-Xt`OXst!V!Z#d%k&e&g&n&p&q&s,k,p1}2QS#hZ%cU#r`#h.SR.S(eQ(f#jQ.P(bW.X(f.P2z6iQ2z.QR6i2{Q)j$lR/P)jQ$phR)p$pQ$ccU)`$c-t;OQ-t:kR;O)mQ/j*YW4S/j4T7Y9QU4T/k/l/mS7Y4U4VR9Q7Z$X)}$w(p(t)a*X*a*p*q*z*{+P.d.e.g.h.i/V/[/`/b/d/o/t0[0]0l1W1Y3X3Y3Z3^3r4W4X4]4i4k4q5Y5[6r6s6t6u6z6{6}7O7P7U7]7a7g7i7k8u8v8w9R9V9v9w9x9y9z:_:h<S<`<a<l<mQ/r*aU4[/r4^7^Q4^/tR7^4]S*k$}*WR0Q*kr*P$w(t*p*q+P/o0[0]3^4W4q7U7g9z<S<`<a!^.b(p)a*X*a.d.e.i/V/[/d/t0l1W1Y3Z4X4]5Y5[6r6u7]7a7i7k9R9V:_<l<mU/a*P.b6xa6x3r6z6{7P8u9v9y:hQ0X*pQ3[.dU4j0X3[8xR8x6zv*R$w(t*p*q+P/`/o0[0]3^4W4i4q7U7g9z<S<`<a!b.c(p)a*X*a.d.e.i/V/[/d/t0l1W1Y3X3Z4X4]5Y5[6r6s6u7]7a7i7k9R9V:_<l<mU/c*R.c6ye6y3r6z6{7P8u8v9v9w9y:hQ0Z*qQ3].eU4l0Z3]8yR8y6{Q*v%VR0_*vQ4v0lR7j4vQ+X%iR0j+XQ5^1]S7x5^9_R9_7yQ,S&ZR1`,SQ5d1bR7{5dQ1n,^S5s1n8YR8Y5uQ0y+lW5P0y5R7p9ZQ5R0|Q7p5QR9Z7qQ+q%}R1P+qQ2Q,pR6T2QYrOXst#dQ&r!ZQ+Z%kQ,j&nQ,l&pQ,m&qQ,o&sQ1{,kS2O,p2QR6S1}Q%mpQ&v!_Q&y!aQ&{!bQ&}!cQ'm!uQ+Y%jQ+f%wQ+x&TQ,`&iQ,w&xW-h'g'o'p'sQ-o'kQ0P*jQ0t+gS1q,a,dQ2Y,vQ2Z,yQ2[,zQ2p-gW2r-j-k-n-pQ4x0uQ5U1SQ5X1WQ5m1hQ5w1sQ6R1|U6b2q2t2wQ6e2uQ7l4yQ7t5WQ7u5YQ7z5cQ8T5nQ8Z5vS8j6c6gQ8l6fQ9[7rQ9d8UQ9i8[Q9p8kQ:Q9]Q:V9eQ:Z9qR:c:WQ%wyQ'`!iQ'k!uU+g%x%y%zQ-O'RU-c'a'b'cS-g'g'qQ/v*eS0u+h+iQ2b-QS2n-d-eQ2u-lQ4a/zQ4y0vQ6^2hQ6a2oQ6f2vR7b4eS$xi<bR*w%WU%Vi%W<bR0^*uQ$wiS(p#v+cQ(t#xS)a$d$eQ*X$yS*a$|*VQ*p%PQ*q%RQ*z%]Q*{%^Q+P%bQ.d;SQ.e;UQ.g;YQ.h;[Q.i;^Q/V)vS/[)|/^Q/`*OQ/b*QQ/d*SQ/o*]S/t*c/fQ0[*sQ0]*th0l+`.^1d3U5j6n8P8p9b9t:U:^Q1W+zQ1Y+}Q3X;fQ3Y;hQ3Z;kQ3^.lS3r;P;QQ4W/pQ4X/qQ4]/sQ4i0WQ4k0YQ4q0dQ5Y1XQ5[1[Q6r;oQ6s;qQ6t;sQ6u;uQ6z;TQ6{;VQ6};ZQ7O;]Q7P;_Q7U4OQ7]4ZQ7a4cQ7g4mQ7i4uQ7k4wQ8u;lQ8v;gQ8w;iQ9R7[Q9V7eQ9v;pQ9w;rQ9x;tQ9y;vQ9z8}Q:_;yQ:h;zQ<S<bQ<`<jQ<a<kQ<l<nR<m<onpOXst!Z#d%k&n&p&q&s,k,p1}2QQ!fPS#fZ#oQ&x!`U'd!o5a7}Q'z#SQ(}#|Q)n$nS,d&g&jQ,i&kQ,v&wQ,{'PQ-_'^Q.s({Q/T)oS0h+V/gQ0o+aQ1y,hQ2l-aQ3S._Q3y/OQ4o0bQ5h1eQ5y1uQ5z1vQ6O1xQ6Q1zQ6V2SQ6m3VQ7S3vQ8R5kQ8_5{Q8`5|Q8b6PQ8r6qQ9c8SR9m8c#YcOPXZst!Z!`!o#d#o#|%k&g&j&k&n&p&q&s&w'P'^({+V+a,h,k,p-a._/g0b1e1u1v1x1z1}2Q2S3V5a5k5{5|6P6q7}8S8cQ#YWQ#eYQ%ouQ%pvS%rw!gS'}#W(QQ(T#ZQ(o#uQ(v#yQ)O$PQ)P$QQ)Q$RQ)R$SQ)S$TQ)T$UQ)U$VQ)V$WQ)W$XQ)X$YQ)Y$ZQ)[$]Q)_$bQ)c$fW)m$n)o/O3vQ+^%qQ+r&OS-R'T2cQ-p'nS-u(O-wQ-z(WQ-|(_Q.k(sQ.q(wQ.u:iQ.w:lQ.x:mQ.y:pQ/Y)zQ0e+RQ2^,|Q2a-PQ2q-iQ2x-}Q3`.oQ3e:qQ3f:rQ3g:sQ3h:tQ3i:uQ3j:vQ3k:wQ3l:xQ3m:yQ3n:zQ3o:{Q3p:|Q3q.vQ3t;RQ3u;`Q3z:}Q4r0gQ4z0wQ6];bQ6c2sQ6h2yQ6v3aQ6w;cQ7Q;eQ7R;mQ7y5_Q8g6ZQ8k6dQ8t;nQ8z;wQ8{;xQ9q8mQ:R9^Q:Y9oQ:k#SR<X<eR#[WR'V!el!tQ!r!v!y!z'['h'i'j-]-m1b5d5fS'R!e-TS-Q'S'ZR2h-ZR(u#xR(x#yQ!fQT-['[-]]!qQ!r'[-]1b5dQ#p]R'e:jY!uQ'[-]1b5dQ'g!rS'q!v!yS's!z5fS-l'h'iQ-n'jR2v-mT#kZ%cS#jZ%cS%im,gU(b#h#i#lS.Q(c(dQ.U(eQ0i+WQ2{.RU2|.S.T.VS6j2}3OR8n6kd#^W#W#Z%f(O(X*V+T-{/fr#gZm#h#i#l%c(c(d(e+W.R.S.T.V2}3O6kS*Y$y*^Q/m*ZQ1w,gQ2_,}Q4Q/iQ6X2VQ7X4RQ8f6YT<P'T+UV#aW%f*VU#`W%f*VS(P#W(XU(U#Z+T/fS-S'T+UT-v(O-{V'Y!e%g*WQ$lfR)t$qT)i$l)jR3x.}T*[$y*^T*d$|*VQ0m+`Q3Q.^Q5g1dQ6o3UQ8Q5jQ8q6nQ9`8PQ9r8pQ:T9bQ:]9tQ:b:UR:e:^nqOXst!Z#d%k&n&p&q&s,k,p1}2QQ&h!VR,`&etmOXst!U!V!Z#d%k&e&n&p&q&s,k,p1}2QR,g&kT%jm,gR1^,PR,_&cQ&R|R+w&SR+m%|T&l!W&oT&m!W&oT2P,p2Q",
28133
  goto: "$8f)ZPPPPPP)[PP)_P)pP+Q/VPPPP6aPP6wPP<oP@cP@yP@yPPP@yPCRP@yP@yP@yPCVPC[PCyPHsPPPHwPPPPHwKzPPPLQLrPHwPHwPP! QHwPPPHwPHwP!#XHwP!&o!'t!'}P!(q!(u!(q!,SPPPPPPP!,s!'tPP!-T!.uP!2RHwHw!2W!5d!:Q!:Q!>PPPP!>XHwPPPPPPPPPP!AhP!BuPPHw!DWPHwPHwHwHwHwHwPHw!EjP!HtP!KzP!LO!LY!L^!L^P!HqP!Lb!LbP# hP# lHwPHw# r#$wCV@yP@yP@y@yP#&U@y@y#(h@y#+`@y#-l@y@y#.[#0p#0p#0u#1O#0p#1ZPP#0pP@y#1s@y#5r@y@y6aPPP#9wPPP#:b#:bP#:bP#:x#:bPP#;OP#:uP#:u#;c#:u#;}#<T#<W)_#<Z)_P#<b#<b#<bP)_P)_P)_P)_PP)_P#<h#<kP#<k)_P#<oP#<rP)_P)_P)_P)_P)_P)_)_PP#<x#=O#=Z#=a#=g#=m#=s#>R#>X#>c#>i#>s#>y#?Z#?a#@R#@e#@k#@q#AP#Af#CZ#Ci#Cp#E[#Ej#G[#Gj#Gp#Gv#G|#HW#H^#Hd#Hn#IQ#IWPPPPPPPPPPP#I^PPPPPPP#JR#MY#Nr#Ny$ RPPP$&mP$&v$)o$0Y$0]$0`$1_$1b$1i$1qP$1w$1zP$2h$2l$3d$4r$4w$5_PP$5d$5j$5n$5q$5u$5y$6u$7^$7u$7y$7|$8P$8V$8Y$8^$8bR!|RoqOXst!Z#d%l&p&r&s&u,n,s2S2VY!vQ'^-`1g5qQ%svQ%{yQ&S|Q&h!VS'U!e-WQ'd!iS'j!r!yU*h$|*X*lQ+l%|Q+y&UQ,_&bQ-^']Q-h'eQ-p'kQ0U*nQ1q,`R<m;z%SdOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%l%s&Q&i&l&p&r&s&u&y'R'`'p(R(T(Z(b(v(x(|){*f+U+Y,k,n,s-d-l-z.Q.o.v/i0V0d0l0|1j1z1{1}2P2S2V2X2x3O3d4q5y6Z6[6_6r8i8x9SS#q];w!r)]$Z$n'V)q-P-S/Q2h3{5m6i9}:a;v;y;z;}<O<P<Q<R<S<T<U<V<W<X<Y<Z<]<`<m<p<q<s<{<|=V=W=sU*{%[<e<fQ+q&OQ,a&eQ,h&mQ0r+dQ0u+fQ1S+rQ1y,fQ3W.bQ5V0wQ5]0}Q6Q1rQ7O3[Q8U5^R9Y7Q'QkOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n%l%s&Q&i&l&m&p&r&s&u&y'R'V'`'p(R(T(Z(b(v(x(|)q){*f+U+Y+d,k,n,s-P-S-d-l-z.Q.b.o.v/Q/i0V0d0l0|1j1z1{1}2P2S2V2X2h2x3O3[3d3{4q5m5y6Z6[6_6i6r7Q8i8x9S9}:a;v;y;z;}<O<P<Q<R<S<T<U<V<W<X<Y<Z<]<`<m<p<q<s<{<|=V=W=s!S!nQ!r!v!y!z$|'U']'^'j'k'l*h*l*n*o-W-^-`-p0U0X1g5q5s%[$ti#v$b$c$d$x${%O%Q%]%^%b)w*P*R*T*W*^*d*t*u+c+f+},Q.a.z/_/h/r/s/u0Y0[0g0h0i1^1a1i3Z4U4V4a4f4w5R5U5x6|7l7v7|8Q8f9V9e9n9t:S:f:t:};V;^<^<_<a<b<c<d<g<h<i<j<k<l<t<u<v<w<y<z<}=O=P=Q=R=S=T=U=X=Y=p=x=y=|=}Q&V|Q'S!eS'Y%h-ZQ+q&OQ,a&eQ0f+OQ1S+rQ1X+xQ1x,eQ1y,fQ5]0}Q5f1ZQ6Q1rQ6T1tQ6U1wQ8U5^Q8X5cQ8q6WQ9|8YQ:Y8nR<o*XrnOXst!V!Z#d%l&g&p&r&s&u,n,s2S2VR,c&i&z^OPXYstuvwz!Z!`!g!j!o#S#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n%l%s&Q&i&l&m&p&r&s&u&y'R'`'p(T(Z(b(v(x(|)q){*f+U+Y+d,k,n,s-P-S-d-l-z.Q.b.o.v/Q/i0V0d0l0|1j1z1{1}2P2S2V2X2h2x3O3[3d3{4q5m5y6Z6[6_6i6r7Q8i8x9S9}:a;v;y;z;}<O<P<Q<R<S<T<U<V<W<X<Y<Z<]<`<m<p<q<s<{<|=V=W=r=s[#]WZ#W#Z'V(R!b%im#h#i#l$x%d%g([(f(g(h*W*[*_+W+X+Z,j-Q.O.U.V.W.Y/h/k2[3S3T4X6h6yQ%vxQ%zyS&P|&UQ&]!TQ'a!hQ'c!iQ(o#sS+k%{%|Q+o&OQ,Y&`Q,^&bS-g'd'eQ.d(pQ0{+lQ1R+rQ1T+sQ1W+wQ1l,ZS1p,_,`Q2t-hQ5[0}Q5`1QQ5e1YQ6P1qQ8T5^Q8W5bQ9x8SR:w9y!U$zi$d%O%Q%]%^%b*P*R*^*t*u.z/r0Y0[0g0h0i4V4w7|9e=p=x=y!^%xy!i!u%z%{%|'T'c'd'e'i's*g+k+l-T-g-h-o/{0O0{2m2t2{4i4j4m7s9pQ+e%vQ,O&YQ,R&ZQ,]&bQ.c(oQ1k,YU1o,^,_,`Q3].dQ5z1lS6O1p1qQ8m6P#f=t#v$b$c$x${)w*T*W*d+c+f+},Q.a/_/h/s/u1^1a1i3Z4U4a4f5R5U5x6|7l7v8Q8f9V9n9t:S:f:t:};V;^<a<c<g<i<k<t<v<y<}=P=R=T=X=|=}o=u<^<_<b<d<h<j<l<u<w<z=O=Q=S=U=YW%Ti%V*v=pS&Y!Q&gQ&Z!RQ&[!SQ+S%cR+|&W%]%Si#v$b$c$d$x${%O%Q%]%^%b)w*P*R*T*W*^*d*t*u+c+f+},Q.a.z/_/h/r/s/u0Y0[0g0h0i1^1a1i3Z4U4V4a4f4w5R5U5x6|7l7v7|8Q8f9V9e9n9t:S:f:t:};V;^<^<_<a<b<c<d<g<h<i<j<k<l<t<u<v<w<y<z<}=O=P=Q=R=S=T=U=X=Y=p=x=y=|=}T)x$u)yV*{%[<e<fW'Y!e%h*X-ZS({#y#zQ+`%qQ+v&RS.](k(lQ1b,SQ4x0cR8^5k'QkOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n%l%s&Q&i&l&m&p&r&s&u&y'R'V'`'p(R(T(Z(b(v(x(|)q){*f+U+Y+d,k,n,s-P-S-d-l-z.Q.b.o.v/Q/i0V0d0l0|1j1z1{1}2P2S2V2X2h2x3O3[3d3{4q5m5y6Z6[6_6i6r7Q8i8x9S9}:a;v;y;z;}<O<P<Q<R<S<T<U<V<W<X<Y<Z<]<`<m<p<q<s<{<|=V=W=s$i$^c#Y#e%p%r%t(Q(W(r(w)P)Q)R)S)T)U)V)W)X)Y)[)^)`)e)o+a+u-U-s-x-}.P.n.q.u.w.x.y/]0j2c2f2v2}3c3h3i3j3k3l3m3n3o3p3q3r3s3t3w3x4P5O5Y6k6q6v7V7W7a7b8`8|9Q9[9b9c:c:y;R;x=gT#TV#U'RkOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n%l%s&Q&i&l&m&p&r&s&u&y'R'V'`'p(R(T(Z(b(v(x(|)q){*f+U+Y+d,k,n,s-P-S-d-l-z.Q.b.o.v/Q/i0V0d0l0|1j1z1{1}2P2S2V2X2h2x3O3[3d3{4q5m5y6Z6[6_6i6r7Q8i8x9S9}:a;v;y;z;}<O<P<Q<R<S<T<U<V<W<X<Y<Z<]<`<m<p<q<s<{<|=V=W=sQ'W!eR2i-W!W!nQ!e!r!v!y!z$|'U']'^'j'k'l*X*h*l*n*o-W-^-`-p0U0X1g5q5sR1d,UnqOXst!Z#d%l&p&r&s&u,n,s2S2VQ&w!^Q't!xS(q#u<OQ+i%yQ,W&]Q,X&_Q-e'bQ-r'mS.m(v<qS0k+U<{Q0y+jQ1f,VQ2Z,uQ2],vQ2e-RQ2r-fQ2u-jS5P0l=VQ5W0zS5Z0|=WQ6j2gQ6n2sQ6s2zQ8R5XQ8}6lQ9O6oQ9R6tR:`8z$d$]c#Y#e%r%t(Q(W(r(w)P)Q)R)S)T)U)V)W)X)Y)[)^)`)e)o+a+u-U-s-x-}.P.n.q.u.x.y/]0j2c2f2v2}3c3h3i3j3k3l3m3n3o3p3q3r3s3t3w3x4P5O5Y6k6q6v7V7W7a7b8`8|9Q9[9b9c:c:y;R;x=gS(m#p'gQ(}#zS+_%p.wS.^(l(nR3U._'QkOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n%l%s&Q&i&l&m&p&r&s&u&y'R'V'`'p(R(T(Z(b(v(x(|)q){*f+U+Y+d,k,n,s-P-S-d-l-z.Q.b.o.v/Q/i0V0d0l0|1j1z1{1}2P2S2V2X2h2x3O3[3d3{4q5m5y6Z6[6_6i6r7Q8i8x9S9}:a;v;y;z;}<O<P<Q<R<S<T<U<V<W<X<Y<Z<]<`<m<p<q<s<{<|=V=W=sS#q];wQ&r!XQ&s!YQ&u![Q&v!]R2R,qQ'_!hQ+b%vQ-c'aS.`(o+eQ2p-bW3Y.c.d0q0sQ6m2qW6z3V3X3]5TU9U6{6}7PU:e9W9X9ZS;T:d:gQ;b;UR;j;cU!wQ'^-`T5o1g5q!Q_OXZ`st!V!Z#d#h%d%l&g&i&p&r&s&u(h,n,s.V2S2V]!pQ!r'^-`1g5qT#q];w%^{OPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%l%s&Q&i&l&m&p&r&s&u&y'R'`'p(R(T(Z(b(v(x(|){*f+U+Y+d,k,n,s-d-l-z.Q.b.o.v/i0V0d0l0|1j1z1{1}2P2S2V2X2x3O3[3d4q5y6Z6[6_6r7Q8i8x9SS({#y#zS.](k(l!s=^$Z$n'V)q-P-S/Q2h3{5m6i9}:a;v;y;z;}<O<P<Q<R<S<T<U<V<W<X<Y<Z<]<`<m<p<q<s<{<|=V=W=sU$fd)],hS(n#p'gU*s%R(u3vU0e*z.i7]Q5T0rQ6{3WQ9X7OR:g9Ym!tQ!r!v!y!z'^'j'k'l-`-p1g5q5sQ'r!uS(d#g1|S-n'i'uQ/n*ZQ/{*gQ2|-qQ4]/oQ4i/}Q4j0OQ4o0WQ7h4WS7s4k4mS7w4p4rQ9g7iQ9k7oQ9p7tQ9u7yS:o9l9mS;Y:p:sS;e;Z;[S;m;f;gS;q;n;oR;t;rQ#wbQ'q!uS(c#g1|S(e#m+TQ+V%eQ+g%wQ+m%}U-m'i'r'uQ.R(dQ/m*ZQ/|*gQ0P*iQ0x+hQ1m,[S2y-n-qQ3R.ZS4[/n/oQ4e/yS4h/{0WQ4l0QQ5|1nQ6u2|Q7g4WQ7k4]U7r4i4o4rQ7u4nQ8k5}S9f7h7iQ9j7oQ9r7wQ9s7xQ:V8lQ:m9gS:n9k9mQ:v9uQ;P:WS;X:o:sS;d;Y;ZS;l;e;gS;p;m;oQ;s;qQ;u;tQ=a=[Q=l=eR=m=fV!wQ'^-`%^aOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%l%s&Q&i&l&m&p&r&s&u&y'R'`'p(R(T(Z(b(v(x(|){*f+U+Y+d,k,n,s-d-l-z.Q.b.o.v/i0V0d0l0|1j1z1{1}2P2S2V2X2x3O3[3d4q5y6Z6[6_6r7Q8i8x9SS#wz!j!r=Z$Z$n'V)q-P-S/Q2h3{5m6i9}:a;v;y;z;}<O<P<Q<R<S<T<U<V<W<X<Y<Z<]<`<m<p<q<s<{<|=V=W=sR=a=r%^bOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%l%s&Q&i&l&m&p&r&s&u&y'R'`'p(R(T(Z(b(v(x(|){*f+U+Y+d,k,n,s-d-l-z.Q.b.o.v/i0V0d0l0|1j1z1{1}2P2S2V2X2x3O3[3d4q5y6Z6[6_6r7Q8i8x9SQ%ej!^%wy!i!u%z%{%|'T'c'd'e'i's*g+k+l-T-g-h-o/{0O0{2m2t2{4i4j4m7s9pS%}z!jQ+h%xQ,[&bW1n,],^,_,`U5}1o1p1qS8l6O6PQ:W8m!r=[$Z$n'V)q-P-S/Q2h3{5m6i9}:a;v;y;z;}<O<P<Q<R<S<T<U<V<W<X<Y<Z<]<`<m<p<q<s<{<|=V=W=sQ=e=qR=f=r%QeOPXYstuvw!Z!`!g!o#S#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%l%s&Q&i&l&p&r&s&u&y'R'`'p(T(Z(b(v(x(|){*f+U+Y+d,k,n,s-d-l-z.Q.b.o.v/i0V0d0l0|1j1z1{1}2P2S2V2X2x3O3[3d4q5y6Z6[6_6r7Q8i8x9SY#bWZ#W#Z(R!b%im#h#i#l$x%d%g([(f(g(h*W*[*_+W+X+Z,j-Q.O.U.V.W.Y/h/k2[3S3T4X6h6yQ,i&m!p=]$Z$n)q-P-S/Q2h3{5m6i9}:a;v;y;z;}<O<P<Q<R<S<T<U<V<W<X<Y<Z<]<`<m<p<q<s<{<|=V=W=sR=`'VU'Z!e%h*XR2k-Z%SdOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%l%s&Q&i&l&p&r&s&u&y'R'`'p(R(T(Z(b(v(x(|){*f+U+Y,k,n,s-d-l-z.Q.o.v/i0V0d0l0|1j1z1{1}2P2S2V2X2x3O3d4q5y6Z6[6_6r8i8x9S!r)]$Z$n'V)q-P-S/Q2h3{5m6i9}:a;v;y;z;}<O<P<Q<R<S<T<U<V<W<X<Y<Z<]<`<m<p<q<s<{<|=V=W=sQ,h&mQ0r+dQ3W.bQ7O3[R9Y7Q!b$Tc#Y%p(Q(W(r(w)X)Y)^)e+u-s-x-}.P.n.q/]0j2v2}3c3s5O5Y6q6v7V9Q:c;x!P<U)[)o-U.w2c2f3h3q3r3w4P6k7W7a7b8`8|9[9b9c:y;R=g!f$Vc#Y%p(Q(W(r(w)U)V)X)Y)^)e+u-s-x-}.P.n.q/]0j2v2}3c3s5O5Y6q6v7V9Q:c;x!T<W)[)o-U.w2c2f3h3n3o3q3r3w4P6k7W7a7b8`8|9[9b9c:y;R=g!^$Zc#Y%p(Q(W(r(w)^)e+u-s-x-}.P.n.q/]0j2v2}3c3s5O5Y6q6v7V9Q:c;xQ4V/fz=s)[)o-U.w2c2f3h3w4P6k7W7a7b8`8|9[9b9c:y;R=gQ=x=zR=y={'QkOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n%l%s&Q&i&l&m&p&r&s&u&y'R'V'`'p(R(T(Z(b(v(x(|)q){*f+U+Y+d,k,n,s-P-S-d-l-z.Q.b.o.v/Q/i0V0d0l0|1j1z1{1}2P2S2V2X2h2x3O3[3d3{4q5m5y6Z6[6_6i6r7Q8i8x9S9}:a;v;y;z;}<O<P<Q<R<S<T<U<V<W<X<Y<Z<]<`<m<p<q<s<{<|=V=W=sS$oh$pR3|/P'XgOPWXYZhstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n$p%l%s&Q&i&l&m&p&r&s&u&y'R'V'`'p(R(T(Z(b(v(x(|)q){*f+U+Y+d,k,n,s-P-S-d-l-z.Q.b.o.v/P/Q/i0V0d0l0|1j1z1{1}2P2S2V2X2h2x3O3[3d3{4q5m5y6Z6[6_6i6r7Q8i8x9S9}:a;v;y;z;}<O<P<Q<R<S<T<U<V<W<X<Y<Z<]<`<m<p<q<s<{<|=V=W=sT$kf$qQ$ifS)h$l)lR)t$qT$jf$qT)j$l)l'XhOPWXYZhstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n$p%l%s&Q&i&l&m&p&r&s&u&y'R'V'`'p(R(T(Z(b(v(x(|)q){*f+U+Y+d,k,n,s-P-S-d-l-z.Q.b.o.v/P/Q/i0V0d0l0|1j1z1{1}2P2S2V2X2h2x3O3[3d3{4q5m5y6Z6[6_6i6r7Q8i8x9S9}:a;v;y;z;}<O<P<Q<R<S<T<U<V<W<X<Y<Z<]<`<m<p<q<s<{<|=V=W=sT$oh$pQ$rhR)s$p%^jOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%l%s&Q&i&l&m&p&r&s&u&y'R'`'p(R(T(Z(b(v(x(|){*f+U+Y+d,k,n,s-d-l-z.Q.b.o.v/i0V0d0l0|1j1z1{1}2P2S2V2X2x3O3[3d4q5y6Z6[6_6r7Q8i8x9S!s=q$Z$n'V)q-P-S/Q2h3{5m6i9}:a;v;y;z;}<O<P<Q<R<S<T<U<V<W<X<Y<Z<]<`<m<p<q<s<{<|=V=W=s#glOPXZst!Z!`!o#S#d#o#{$n%l&i&l&m&p&r&s&u&y'R'`(|)q*f+Y+d,k,n,s-d.b/Q/i0V0d1j1z1{1}2P2S2V2X3[3{4q5y6Z6[6_7Q8i8x!U%Ri$d%O%Q%]%^%b*P*R*^*t*u.z/r0Y0[0g0h0i4V4w7|9e=p=x=y#f(u#v$b$c$x${)w*T*W*d+c+f+},Q.a/_/h/s/u1^1a1i3Z4U4a4f5R5U5x6|7l7v8Q8f9V9n9t:S:f:t:};V;^<a<c<g<i<k<t<v<y<}=P=R=T=X=|=}Q+P%`Q/^)|o3v<^<_<b<d<h<j<l<u<w<z=O=Q=S=U=Y!U$yi$d%O%Q%]%^%b*P*R*^*t*u.z/r0Y0[0g0h0i4V4w7|9e=p=x=yQ*`$zU*i$|*X*lQ+Q%aQ0Q*j#f=c#v$b$c$x${)w*T*W*d+c+f+},Q.a/_/h/s/u1^1a1i3Z4U4a4f5R5U5x6|7l7v8Q8f9V9n9t:S:f:t:};V;^<a<c<g<i<k<t<v<y<}=P=R=T=X=|=}n=d<^<_<b<d<h<j<l<u<w<z=O=Q=S=U=YQ=h=tQ=i=uQ=j=vR=k=w!U%Ri$d%O%Q%]%^%b*P*R*^*t*u.z/r0Y0[0g0h0i4V4w7|9e=p=x=y#f(u#v$b$c$x${)w*T*W*d+c+f+},Q.a/_/h/s/u1^1a1i3Z4U4a4f5R5U5x6|7l7v8Q8f9V9n9t:S:f:t:};V;^<a<c<g<i<k<t<v<y<}=P=R=T=X=|=}o3v<^<_<b<d<h<j<l<u<w<z=O=Q=S=U=YnoOXst!Z#d%l&p&r&s&u,n,s2S2VS*c${*WQ,|&|Q,}'OR4`/s%[%Si#v$b$c$d$x${%O%Q%]%^%b)w*P*R*T*W*^*d*t*u+c+f+},Q.a.z/_/h/r/s/u0Y0[0g0h0i1^1a1i3Z4U4V4a4f4w5R5U5x6|7l7v7|8Q8f9V9e9n9t:S:f:t:};V;^<^<_<a<b<c<d<g<h<i<j<k<l<t<u<v<w<y<z<}=O=P=Q=R=S=T=U=X=Y=p=x=y=|=}Q,P&ZQ1`,RQ5i1_R8]5jV*k$|*X*lU*k$|*X*lT5p1g5qS/y*f/iQ4n0VT7x4q:PQ+g%wQ0P*iQ0x+hQ1m,[Q5|1nQ8k5}Q:V8lR;P:W!U%Oi$d%O%Q%]%^%b*P*R*^*t*u.z/r0Y0[0g0h0i4V4w7|9e=p=x=yx*P$v)c*Q*r+R/q0^0_3y4^4{4|4}7f7z9v:l=b=n=oS0Y*q0Z#f<a#v$b$c$x${)w*T*W*d+c+f+},Q.a/_/h/s/u1^1a1i3Z4U4a4f5R5U5x6|7l7v8Q8f9V9n9t:S:f:t:};V;^<a<c<g<i<k<t<v<y<}=P=R=T=X=|=}n<b<^<_<b<d<h<j<l<u<w<z=O=Q=S=U=Y!d<t(s)a*Y*b.e.h.l/Y/f/v0p1]3`4S4_4c5h7R7U7m7p7}8P9i9q9w:q:u;W;];h=z={`<u3u7X7[7`9]:h:k;kS=P.g3aT=Q7Z9`!U%Qi$d%O%Q%]%^%b*P*R*^*t*u.z/r0Y0[0g0h0i4V4w7|9e=p=x=y|*R$v)c*S*q+R/b/q0^0_3y4^4s4{4|4}7f7z9v:l=b=n=oS0[*r0]#f<c#v$b$c$x${)w*T*W*d+c+f+},Q.a/_/h/s/u1^1a1i3Z4U4a4f5R5U5x6|7l7v8Q8f9V9n9t:S:f:t:};V;^<a<c<g<i<k<t<v<y<}=P=R=T=X=|=}n<d<^<_<b<d<h<j<l<u<w<z=O=Q=S=U=Y!h<v(s)a*Y*b.f.g.l/Y/f/v0p1]3^3`4S4_4c5h7R7S7U7m7p7}8P9i9q9w:q:u;W;];h=z={d<w3u7Y7Z7`9]9^:h:i:k;kS=R.h3bT=S7[9arnOXst!V!Z#d%l&g&p&r&s&u,n,s2S2VQ&d!UR,k&mrnOXst!V!Z#d%l&g&p&r&s&u,n,s2S2VR&d!UQ,T&[R1[+|snOXst!V!Z#d%l&g&p&r&s&u,n,s2S2VQ1h,YS5w1k1lU8e5u5v5zS:R8g8hS:{:Q:TQ;_:|R;i;`Q&k!VR,d&gR6T1tR:Y8nS&P|&UR1T+sQ&p!WR,n&qR,t&vT2T,s2VR,x&wQ,w&wR2^,xQ'w!{R-t'wSsOtQ#dXT%os#dQ#OTR'y#OQ#RUR'{#RQ)y$uR/Z)yQ#UVR(O#UQ#XWU(U#X(V-{Q(V#YR-{(WQ-X'WR2j-XQ.p(wS3e.p3fR3f.qQ-`'^R2n-`Y!rQ'^-`1g5qR'h!rQ.{)cR3z.{U#_W%g*WU(]#_(^-|Q(^#`R-|(XQ-['ZR2l-[t`OXst!V!Z#d%l&g&i&p&r&s&u,n,s2S2VS#hZ%dU#r`#h.VR.V(hQ(i#jQ.S(eW.[(i.S3P6wQ3P.TR6w3QQ)l$lR/R)lQ$phR)r$pQ$`cU)_$`-w<[Q-w;xR<[)oQ/l*ZW4Y/l4Z7j9hU4Z/m/n/oS7j4[4]R9h7k$e*O$v(s)a)c*Y*b*q*r*|*}+R.g.h.j.k.l/Y/b/d/f/q/v0^0_0p1]3^3_3`3u3y4S4^4_4c4s4u4{4|4}5h7R7S7T7U7Z7[7^7_7`7f7m7p7z7}8P9]9^9_9i9q9v9w:h:i:j:k:l:q:u;W;];h;k=b=n=o=z={Q/t*bU4b/t4d7nQ4d/vR7n4cS*l$|*XR0S*lx*Q$v)c*q*r+R/q0^0_3y4^4{4|4}7f7z9v:l=b=n=o!d.e(s)a*Y*b.g.h.l/Y/f/v0p1]3`4S4_4c5h7R7U7m7p7}8P9i9q9w:q:u;W;];h=z={U/c*Q.e7Xa7X3u7Z7[7`9]:h:k;kQ0Z*qQ3a.gU4t0Z3a9`R9`7Z|*S$v)c*q*r+R/b/q0^0_3y4^4s4{4|4}7f7z9v:l=b=n=o!h.f(s)a*Y*b.g.h.l/Y/f/v0p1]3^3`4S4_4c5h7R7S7U7m7p7}8P9i9q9w:q:u;W;];h=z={U/e*S.f7Ye7Y3u7Z7[7`9]9^:h:i:k;kQ0]*rQ3b.hU4v0]3b9aR9a7[Q*w%UR0a*wQ5S0pR8O5SQ+[%jR0o+[Q5l1bS8_5l:OR:O8`Q,V&]R1e,VQ5q1gR8b5qQ1s,aS6R1s8oR8o6TQ1O+oW5_1O5a8V9zQ5a1RQ8V5`R9z8WQ+t&PR1U+tQ2V,sR6c2VYrOXst#dQ&t!ZQ+^%lQ,m&pQ,o&rQ,p&sQ,r&uQ2Q,nS2T,s2VR6b2SQ%npQ&x!_Q&{!aQ&}!bQ'P!cQ'o!uQ+]%kQ+i%yQ+{&VQ,c&kQ,z&zW-k'i'q'r'uQ-r'mQ0R*kQ0y+jS1v,d,gQ2_,yQ2`,|Q2a,}Q2u-jW2w-m-n-q-sQ5W0zQ5d1XQ5g1]Q5{1mQ6V1xQ6a2RU6p2v2y2|Q6s2zQ8R5XQ8Z5fQ8[5hQ8a5pQ8j5|Q8p6US9P6q6uQ9R6tQ9{8XQ:U8kQ:Z8qQ:b9QQ:x9|Q;O:VQ;S:cR;a;PQ%yyQ'b!iQ'm!uU+j%z%{%|Q-R'TU-f'c'd'eS-j'i'sQ/z*gS0z+k+lQ2g-TS2s-g-hQ2z-oS4g/{0OQ5X0{Q6l2mQ6o2tQ6t2{U7q4i4j4mQ9o7sR:r9pS$wi=pR*x%VU%Ui%V=pR0`*vQ$viS(s#v+fS)a$b$cQ)c$dQ*Y$xS*b${*WQ*q%OQ*r%QQ*|%]Q*}%^Q+R%bQ.g<aQ.h<cQ.j<gQ.k<iQ.l<kQ/Y)wQ/b*PQ/d*RQ/f*TQ/q*^S/v*d/hQ0^*tQ0_*ul0p+c,Q.a1a1i3Z5x6|8f9V:S:f:};VQ1]+}Q3^<tQ3_<vQ3`<yS3u<^<_Q3y.zS4S/_4UQ4^/rQ4_/sQ4c/uQ4s0YQ4u0[Q4{0gQ4|0hQ4}0iQ5h1^Q7R<}Q7S=PQ7T=RQ7U=TQ7Z<bQ7[<dQ7^<hQ7_<jQ7`<lQ7f4VQ7m4aQ7p4fQ7z4wQ7}5RQ8P5UQ9]<zQ9^<uQ9_<wQ9i7lQ9q7vQ9v7|Q9w8QQ:h=OQ:i=QQ:j=SQ:k=UQ:l9eQ:q9nQ:u9tQ;W=XQ;]:tQ;h;^Q;k=YQ=b=pQ=n=xQ=o=yQ=z=|R={=}Q*z%[Q.i<eR7]<fnpOXst!Z#d%l&p&r&s&u,n,s2S2VQ!fPS#fZ#oQ&z!`W'f!o*f0V4qQ'}#SQ)O#{Q)p$nS,g&i&lQ,l&mQ,y&yS-O'R/iQ-b'`Q.s(|Q/V)qQ0m+YQ0s+dQ2O,kQ2q-dQ3X.bQ4O/QQ4y0dQ5v1jQ6X1zQ6Y1{Q6^1}Q6`2PQ6e2XQ7P3[Q7c3{Q8h5yQ8t6ZQ8u6[Q8w6_Q9Z7QQ:T8iR:_8x#[cOPXZst!Z!`!o#d#o#{%l&i&l&m&p&r&s&u&y'R'`(|*f+Y+d,k,n,s-d.b/i0V0d1j1z1{1}2P2S2V2X3[4q5y6Z6[6_7Q8i8xQ#YWQ#eYQ%puQ%rvS%tw!gS(Q#W(TQ(W#ZQ(r#uQ(w#xQ)P$OQ)Q$PQ)R$QQ)S$RQ)T$SQ)U$TQ)V$UQ)W$VQ)X$WQ)Y$XQ)[$ZQ)^$_Q)`$aQ)e$eW)o$n)q/Q3{Q+a%sQ+u&QS-U'V2hQ-s'pS-x(R-zQ-}(ZQ.P(bQ.n(vQ.q(xQ.u;vQ.w;yQ.x;zQ.y;}Q/]){Q0j+UQ2c-PQ2f-SQ2v-lQ2}.QQ3c.oQ3h<OQ3i<PQ3j<QQ3k<RQ3l<SQ3m<TQ3n<UQ3o<VQ3p<WQ3q<XQ3r<YQ3s.vQ3t<]Q3w<`Q3x<mQ4P<ZQ5O0lQ5Y0|Q6k<pQ6q2xQ6v3OQ7V3dQ7W<qQ7a<sQ7b<{Q8`5mQ8|6iQ9Q6rQ9[<|Q9b=VQ9c=WQ:c9SQ:y9}Q;R:aQ;x#SR=g=sR#[WR'X!el!tQ!r!v!y!z'^'j'k'l-`-p1g5q5sS'T!e-WU*g$|*X*lS-T'U']S0O*h*nQ0W*oQ2m-^Q4m0UR4r0XR(y#xQ!fQT-_'^-`]!qQ!r'^-`1g5qQ#p]R'g;wR)d$dY!uQ'^-`1g5qQ'i!rS's!v!yS'u!z5sS-o'j'kQ-q'lR2{-pT#kZ%dS#jZ%dS%jm,jU(e#h#i#lS.T(f(gQ.X(hQ0n+ZQ3Q.UU3R.V.W.YS6x3S3TR9T6yd#^W#W#Z%g(R([*W+W.O/hr#gZm#h#i#l%d(f(g(h+Z.U.V.W.Y3S3T6yS*Z$x*_Q/o*[Q1|,jQ2d-QQ4W/kQ6g2[Q7i4XQ8{6hT=_'V+XV#aW%g*WU#`W%g*WS(S#W([U(X#Z+W/hS-V'V+XT-y(R.OV'[!e%h*XQ$lfR)v$qT)k$l)lR3}/PT*]$x*_T*e${*WQ0q+cQ1_,QQ3V.aQ5j1aQ5u1iQ6}3ZQ8g5xQ9W6|Q:Q8fQ:d9VQ:|:SQ;U:fQ;`:}R;c;VnqOXst!Z#d%l&p&r&s&u,n,s2S2VQ&j!VR,c&gtmOXst!U!V!Z#d%l&g&p&r&s&u,n,s2S2VR,j&mT%km,jR1c,SR,b&eQ&T|R+z&UR+p&OT&n!W&qT&o!W&qT2U,s2V",
27390
  nodeNames: "⚠ ArithOp ArithOp JSXStartTag LineComment BlockComment Script Hashbang ExportDeclaration export Star as VariableName String Escape from ; default FunctionDeclaration async function VariableDefinition > < TypeParamList TypeDefinition extends ThisType this LiteralType ArithOp Number BooleanLiteral TemplateType InterpolationEnd Interpolation InterpolationStart NullType null VoidType void TypeofType typeof MemberExpression . ?. PropertyName [ TemplateString Escape Interpolation super RegExp ] ArrayExpression Spread , } { ObjectExpression Property async get set PropertyDefinition Block : NewExpression new TypeArgList CompareOp < ) ( ArgList UnaryExpression delete LogicOp BitOp YieldExpression yield AwaitExpression await ParenthesizedExpression ClassExpression class ClassBody MethodDeclaration Decorator @ MemberExpression PrivatePropertyName CallExpression declare Privacy static abstract override PrivatePropertyDefinition PropertyDeclaration readonly accessor Optional TypeAnnotation Equals StaticBlock FunctionExpression ArrowFunction ParamList ParamList ArrayPattern ObjectPattern PatternProperty Privacy readonly Arrow MemberExpression BinaryExpression ArithOp ArithOp ArithOp ArithOp BitOp CompareOp instanceof satisfies in const CompareOp BitOp BitOp BitOp LogicOp LogicOp ConditionalExpression LogicOp LogicOp AssignmentExpression UpdateOp PostfixExpression CallExpression TaggedTemplateExpression DynamicImport import ImportMeta JSXElement JSXSelfCloseEndTag JSXSelfClosingTag JSXIdentifier JSXBuiltin JSXIdentifier JSXNamespacedName JSXMemberExpression JSXSpreadAttribute JSXAttribute JSXAttributeValue JSXEscape JSXEndTag JSXOpenTag JSXFragmentTag JSXText JSXEscape JSXStartCloseTag JSXCloseTag PrefixCast ArrowFunction TypeParamList SequenceExpression KeyofType keyof UniqueType unique ImportType InferredType infer TypeName ParenthesizedType FunctionSignature ParamList NewSignature IndexedType TupleType Label ArrayType ReadonlyType ObjectType MethodType PropertyType IndexSignature PropertyDefinition CallSignature TypePredicate is NewSignature new UnionType LogicOp IntersectionType LogicOp ConditionalType ParameterizedType ClassDeclaration abstract implements type VariableDeclaration let var using TypeAliasDeclaration InterfaceDeclaration interface EnumDeclaration enum EnumBody NamespaceDeclaration namespace module AmbientDeclaration declare GlobalDeclaration global ClassDeclaration ClassBody AmbientFunctionDeclaration ExportGroup VariableName VariableName ImportDeclaration ImportGroup ForStatement for ForSpec ForInSpec ForOfSpec of WhileStatement while WithStatement with DoStatement do IfStatement if else SwitchStatement switch SwitchBody CaseLabel case DefaultLabel TryStatement try CatchClause catch FinallyClause finally ReturnStatement return ThrowStatement throw BreakStatement break ContinueStatement continue DebuggerStatement debugger LabeledStatement ExpressionStatement SingleExpression SingleClassItem",
28134
  nodeNames: "⚠ ArithOp ArithOp ?. JSXStartTag LineComment BlockComment Script Hashbang ExportDeclaration export Star as VariableName String Escape from ; default FunctionDeclaration async function VariableDefinition > < TypeParamList const TypeDefinition extends ThisType this LiteralType ArithOp Number BooleanLiteral TemplateType InterpolationEnd Interpolation InterpolationStart NullType null VoidType void TypeofType typeof MemberExpression . PropertyName [ TemplateString Escape Interpolation super RegExp ] ArrayExpression Spread , } { ObjectExpression Property async get set PropertyDefinition Block : NewTarget new NewExpression ) ( ArgList UnaryExpression delete LogicOp BitOp YieldExpression yield AwaitExpression await ParenthesizedExpression ClassExpression class ClassBody MethodDeclaration Decorator @ MemberExpression PrivatePropertyName CallExpression TypeArgList CompareOp < declare Privacy static abstract override PrivatePropertyDefinition PropertyDeclaration readonly accessor Optional TypeAnnotation Equals StaticBlock FunctionExpression ArrowFunction ParamList ParamList ArrayPattern ObjectPattern PatternProperty Privacy readonly Arrow MemberExpression BinaryExpression ArithOp ArithOp ArithOp ArithOp BitOp CompareOp instanceof satisfies in CompareOp BitOp BitOp BitOp LogicOp LogicOp ConditionalExpression LogicOp LogicOp AssignmentExpression UpdateOp PostfixExpression CallExpression InstantiationExpression TaggedTemplateExpression DynamicImport import ImportMeta JSXElement JSXSelfCloseEndTag JSXSelfClosingTag JSXIdentifier JSXBuiltin JSXIdentifier JSXNamespacedName JSXMemberExpression JSXSpreadAttribute JSXAttribute JSXAttributeValue JSXEscape JSXEndTag JSXOpenTag JSXFragmentTag JSXText JSXEscape JSXStartCloseTag JSXCloseTag PrefixCast < ArrowFunction TypeParamList SequenceExpression InstantiationExpression KeyofType keyof UniqueType unique ImportType InferredType infer TypeName ParenthesizedType FunctionSignature ParamList NewSignature IndexedType TupleType Label ArrayType ReadonlyType ObjectType MethodType PropertyType IndexSignature PropertyDefinition CallSignature TypePredicate asserts is NewSignature new UnionType LogicOp IntersectionType LogicOp ConditionalType ParameterizedType ClassDeclaration abstract implements type VariableDeclaration let var using TypeAliasDeclaration InterfaceDeclaration interface EnumDeclaration enum EnumBody NamespaceDeclaration namespace module AmbientDeclaration declare GlobalDeclaration global ClassDeclaration ClassBody AmbientFunctionDeclaration ExportGroup VariableName VariableName ImportDeclaration ImportGroup ForStatement for ForSpec ForInSpec ForOfSpec of WhileStatement while WithStatement with DoStatement do IfStatement if else SwitchStatement switch SwitchBody CaseLabel case DefaultLabel TryStatement try CatchClause catch FinallyClause finally ReturnStatement return ThrowStatement throw BreakStatement break ContinueStatement continue DebuggerStatement debugger LabeledStatement ExpressionStatement SingleExpression SingleClassItem",
27391
  maxTerm: 372,
28135
  maxTerm: 378,
27392
  context: trackNewline,
28136
  context: trackNewline,
27393
  nodeProps: [
28137
  nodeProps: [
27394
    ["isolate", -8,4,5,13,33,35,48,50,52,""],
28138
    ["isolate", -8,5,6,14,35,37,49,51,53,""],
27395
    ["group", -26,8,16,18,65,201,205,209,210,212,215,218,228,230,236,238,240,242,245,251,257,259,261,263,265,267,268,"Statement",-32,12,13,28,31,32,38,48,51,52,54,59,67,75,79,81,83,84,106,107,116,117,134,137,139,140,141,142,144,145,164,165,167,"Expression",-23,27,29,33,37,39,41,168,170,172,173,175,176,177,179,180,181,183,184,185,195,197,199,200,"Type",-3,87,99,105,"ClassItem"],
28139
    ["group", -26,9,17,19,66,206,210,214,215,217,220,223,233,235,241,243,245,247,250,256,262,264,266,268,270,272,273,"Statement",-34,13,14,30,33,34,40,49,52,53,55,60,68,70,74,78,80,82,83,108,109,118,119,135,138,140,141,142,143,144,146,147,166,168,170,"Expression",-23,29,31,35,39,41,43,172,174,176,177,179,180,181,183,184,185,187,188,189,200,202,204,205,"Type",-3,86,101,107,"ClassItem"],
27396
    ["openedBy", 22,"<",34,"InterpolationStart",53,"[",57,"{",72,"(",157,"JSXStartCloseTag"],
28140
    ["openedBy", 23,"<",36,"InterpolationStart",54,"[",58,"{",71,"(",159,"JSXStartCloseTag"],
27397
    ["closedBy", 23,">",36,"InterpolationEnd",47,"]",58,"}",73,")",162,"JSXEndTag"]
28141
    ["closedBy", -2,24,167,">",38,"InterpolationEnd",48,"]",59,"}",72,")",164,"JSXEndTag"]
27398
  ],
28142
  ],
27399
  propSources: [jsHighlight],
28143
  propSources: [jsHighlight],
27400
  skippedNodes: [0,4,5,271],
28144
  skippedNodes: [0,5,6,276],
27401
  repeatNodeCount: 37,
28145
  repeatNodeCount: 37,
27402
  tokenData: "$HR(CSR!bOX%ZXY+gYZ-yZ[+g[]%Z]^.c^p%Zpq+gqr/mrs3cst:_tuEruvJSvwLkwx! Yxy!'iyz!(sz{!)}{|!,q|}!.O}!O!,q!O!P!/Y!P!Q!9j!Q!R#:O!R![#<_![!]#I_!]!^#Jk!^!_#Ku!_!`$![!`!a$$v!a!b$*T!b!c$.S!c!}Er!}#O$/^#O#P$0h#P#Q$6P#Q#R$7Z#R#SEr#S#T$8h#T#o$9r#o#p$>S#p#q$>x#q#r$@Y#r#s$Af#s$f%Z$f$g+g$g#BYEr#BY#BZ$Bp#BZ$ISEr$IS$I_$Bp$I_$I|Er$I|$I}$E{$I}$JO$E{$JO$JTEr$JT$JU$Bp$JU$KVEr$KV$KW$Bp$KW&FUEr&FU&FV$Bp&FV;'SEr;'S;=`I|<%l?HTEr?HT?HU$Bp?HUOEr(n%d_$f&j(Op(R!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z&j&hT$f&jO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c&j&zP;=`<%l&c'|'U]$f&j(R!bOY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}!b(SU(R!bOY'}Zw'}x#O'}#P;'S'};'S;=`(f<%lO'}!b(iP;=`<%l'}'|(oP;=`<%l&}'[(y]$f&j(OpOY(rYZ&cZr(rrs&cs!^(r!^!_)r!_#O(r#O#P&c#P#o(r#o#p)r#p;'S(r;'S;=`*a<%lO(rp)wU(OpOY)rZr)rs#O)r#P;'S)r;'S;=`*Z<%lO)rp*^P;=`<%l)r'[*dP;=`<%l(r#S*nX(Op(R!bOY*gZr*grs'}sw*gwx)rx#O*g#P;'S*g;'S;=`+Z<%lO*g#S+^P;=`<%l*g(n+dP;=`<%l%Z(CS+rq$f&j(Op(R!b't(;dOX%ZXY+gYZ&cZ[+g[p%Zpq+gqr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p$f%Z$f$g+g$g#BY%Z#BY#BZ+g#BZ$IS%Z$IS$I_+g$I_$JT%Z$JT$JU+g$JU$KV%Z$KV$KW+g$KW&FU%Z&FU&FV+g&FV;'S%Z;'S;=`+a<%l?HT%Z?HT?HU+g?HUO%Z(CS.ST(P#S$f&j'u(;dO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c(CS.n_$f&j(Op(R!b'u(;dOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z%#`/x`$f&j!o$Ip(Op(R!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`0z!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z%#S1V`#t$Id$f&j(Op(R!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`2X!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z%#S2d_#t$Id$f&j(Op(R!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z$/|3l_'}$(n$f&j(R!bOY4kYZ5qZr4krs7nsw4kwx5qx!^4k!^!_8p!_#O4k#O#P5q#P#o4k#o#p8p#p;'S4k;'S;=`:X<%lO4k(^4r_$f&j(R!bOY4kYZ5qZr4krs7nsw4kwx5qx!^4k!^!_8p!_#O4k#O#P5q#P#o4k#o#p8p#p;'S4k;'S;=`:X<%lO4k&z5vX$f&jOr5qrs6cs!^5q!^!_6y!_#o5q#o#p6y#p;'S5q;'S;=`7h<%lO5q&z6jT$a`$f&jO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c`6|TOr6yrs7]s;'S6y;'S;=`7b<%lO6y`7bO$a``7eP;=`<%l6y&z7kP;=`<%l5q(^7w]$a`$f&j(R!bOY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}!r8uZ(R!bOY8pYZ6yZr8prs9hsw8pwx6yx#O8p#O#P6y#P;'S8p;'S;=`:R<%lO8p!r9oU$a`(R!bOY'}Zw'}x#O'}#P;'S'};'S;=`(f<%lO'}!r:UP;=`<%l8p(^:[P;=`<%l4k#%|:hh$f&j(Op(R!bOY%ZYZ&cZq%Zqr<Srs&}st%ZtuCruw%Zwx(rx!^%Z!^!_*g!_!c%Z!c!}Cr!}#O%Z#O#P&c#P#R%Z#R#SCr#S#T%Z#T#oCr#o#p*g#p$g%Z$g;'SCr;'S;=`El<%lOCr(r<__VS$f&j(Op(R!bOY<SYZ&cZr<Srs=^sw<Swx@nx!^<S!^!_Bm!_#O<S#O#P>`#P#o<S#o#pBm#p;'S<S;'S;=`Cl<%lO<S(Q=g]VS$f&j(R!bOY=^YZ&cZw=^wx>`x!^=^!^!_?q!_#O=^#O#P>`#P#o=^#o#p?q#p;'S=^;'S;=`@h<%lO=^&n>gXVS$f&jOY>`YZ&cZ!^>`!^!_?S!_#o>`#o#p?S#p;'S>`;'S;=`?k<%lO>`S?XSVSOY?SZ;'S?S;'S;=`?e<%lO?SS?hP;=`<%l?S&n?nP;=`<%l>`!f?xWVS(R!bOY?qZw?qwx?Sx#O?q#O#P?S#P;'S?q;'S;=`@b<%lO?q!f@eP;=`<%l?q(Q@kP;=`<%l=^'`@w]VS$f&j(OpOY@nYZ&cZr@nrs>`s!^@n!^!_Ap!_#O@n#O#P>`#P#o@n#o#pAp#p;'S@n;'S;=`Bg<%lO@ntAwWVS(OpOYApZrAprs?Ss#OAp#O#P?S#P;'SAp;'S;=`Ba<%lOAptBdP;=`<%lAp'`BjP;=`<%l@n#WBvYVS(Op(R!bOYBmZrBmrs?qswBmwxApx#OBm#O#P?S#P;'SBm;'S;=`Cf<%lOBm#WCiP;=`<%lBm(rCoP;=`<%l<S#%|C}i$f&j(g!L^(Op(R!bOY%ZYZ&cZr%Zrs&}st%ZtuCruw%Zwx(rx!Q%Z!Q![Cr![!^%Z!^!_*g!_!c%Z!c!}Cr!}#O%Z#O#P&c#P#R%Z#R#SCr#S#T%Z#T#oCr#o#p*g#p$g%Z$g;'SCr;'S;=`El<%lOCr#%|EoP;=`<%lCr(CSFRk$f&j(Op(R!b$Y#t'{&;d([!LYOY%ZYZ&cZr%Zrs&}st%ZtuEruw%Zwx(rx}%Z}!OGv!O!Q%Z!Q![Er![!^%Z!^!_*g!_!c%Z!c!}Er!}#O%Z#O#P&c#P#R%Z#R#SEr#S#T%Z#T#oEr#o#p*g#p$g%Z$g;'SEr;'S;=`I|<%lOEr+dHRk$f&j(Op(R!b$Y#tOY%ZYZ&cZr%Zrs&}st%ZtuGvuw%Zwx(rx}%Z}!OGv!O!Q%Z!Q![Gv![!^%Z!^!_*g!_!c%Z!c!}Gv!}#O%Z#O#P&c#P#R%Z#R#SGv#S#T%Z#T#oGv#o#p*g#p$g%Z$g;'SGv;'S;=`Iv<%lOGv+dIyP;=`<%lGv(CSJPP;=`<%lEr%#SJ_`$f&j(Op(R!b#l$IdOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z%#SKl_$f&j$O$Id(Op(R!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z&COLva(q&;`$f&j(Op(R!bOY%ZYZ&cZr%Zrs&}sv%ZvwM{wx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z%#SNW`$f&j#x$Id(Op(R!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z$/|! c_(Q$)`$f&j(OpOY!!bYZ!#hZr!!brs!#hsw!!bwx!$xx!^!!b!^!_!%z!_#O!!b#O#P!#h#P#o!!b#o#p!%z#p;'S!!b;'S;=`!'c<%lO!!b'l!!i_$f&j(OpOY!!bYZ!#hZr!!brs!#hsw!!bwx!$xx!^!!b!^!_!%z!_#O!!b#O#P!#h#P#o!!b#o#p!%z#p;'S!!b;'S;=`!'c<%lO!!b&z!#mX$f&jOw!#hwx6cx!^!#h!^!_!$Y!_#o!#h#o#p!$Y#p;'S!#h;'S;=`!$r<%lO!#h`!$]TOw!$Ywx7]x;'S!$Y;'S;=`!$l<%lO!$Y`!$oP;=`<%l!$Y&z!$uP;=`<%l!#h'l!%R]$a`$f&j(OpOY(rYZ&cZr(rrs&cs!^(r!^!_)r!_#O(r#O#P&c#P#o(r#o#p)r#p;'S(r;'S;=`*a<%lO(r!Q!&PZ(OpOY!%zYZ!$YZr!%zrs!$Ysw!%zwx!&rx#O!%z#O#P!$Y#P;'S!%z;'S;=`!']<%lO!%z!Q!&yU$a`(OpOY)rZr)rs#O)r#P;'S)r;'S;=`*Z<%lO)r!Q!'`P;=`<%l!%z'l!'fP;=`<%l!!b(*Q!'t_!k(!b$f&j(Op(R!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z!'l!)O_!jM|$f&j(Op(R!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'+h!*[b$f&j(Op(R!b'|#)d#m$IdOY%ZYZ&cZr%Zrs&}sw%Zwx(rxz%Zz{!+d{!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z%#S!+o`$f&j(Op(R!b#j$IdOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z&-O!,|`$f&j(Op(R!bn&%`OY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z&C[!.Z_!Y&;l$f&j(Op(R!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(CS!/ec$f&j(Op(R!b|'<nOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!O%Z!O!P!0p!P!Q%Z!Q![!3Y![!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z!'d!0ya$f&j(Op(R!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!O%Z!O!P!2O!P!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z!'d!2Z_!XMt$f&j(Op(R!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z$/l!3eg$f&j(Op(R!bo$'|OY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![!3Y![!^%Z!^!_*g!_!g%Z!g!h!4|!h#O%Z#O#P&c#P#R%Z#R#S!3Y#S#X%Z#X#Y!4|#Y#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z$/l!5Vg$f&j(Op(R!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx{%Z{|!6n|}%Z}!O!6n!O!Q%Z!Q![!8S![!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S!8S#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z$/l!6wc$f&j(Op(R!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![!8S![!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S!8S#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z$/l!8_c$f&j(Op(R!bo$'|OY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![!8S![!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S!8S#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(CS!9uf$f&j(Op(R!b#k$IdOY!;ZYZ&cZr!;Zrs!<nsw!;Zwx!Lcxz!;Zz{#-}{!P!;Z!P!Q#/d!Q!^!;Z!^!_#(i!_!`#7S!`!a#8i!a!}!;Z!}#O#,f#O#P!Dy#P#o!;Z#o#p#(i#p;'S!;Z;'S;=`#-w<%lO!;Z(r!;fb$f&j(Op(R!b!USOY!;ZYZ&cZr!;Zrs!<nsw!;Zwx!Lcx!P!;Z!P!Q#&`!Q!^!;Z!^!_#(i!_!}!;Z!}#O#,f#O#P!Dy#P#o!;Z#o#p#(i#p;'S!;Z;'S;=`#-w<%lO!;Z(Q!<w`$f&j(R!b!USOY!<nYZ&cZw!<nwx!=yx!P!<n!P!Q!Eq!Q!^!<n!^!_!Gr!_!}!<n!}#O!KS#O#P!Dy#P#o!<n#o#p!Gr#p;'S!<n;'S;=`!L]<%lO!<n&n!>Q^$f&j!USOY!=yYZ&cZ!P!=y!P!Q!>|!Q!^!=y!^!_!@c!_!}!=y!}#O!CW#O#P!Dy#P#o!=y#o#p!@c#p;'S!=y;'S;=`!Ek<%lO!=y&n!?Td$f&j!USO!^&c!_#W&c#W#X!>|#X#Z&c#Z#[!>|#[#]&c#]#^!>|#^#a&c#a#b!>|#b#g&c#g#h!>|#h#i&c#i#j!>|#j#k!>|#k#m&c#m#n!>|#n#o&c#p;'S&c;'S;=`&w<%lO&cS!@hX!USOY!@cZ!P!@c!P!Q!AT!Q!}!@c!}#O!Ar#O#P!Bq#P;'S!@c;'S;=`!CQ<%lO!@cS!AYW!US#W#X!AT#Z#[!AT#]#^!AT#a#b!AT#g#h!AT#i#j!AT#j#k!AT#m#n!ATS!AuVOY!ArZ#O!Ar#O#P!B[#P#Q!@c#Q;'S!Ar;'S;=`!Bk<%lO!ArS!B_SOY!ArZ;'S!Ar;'S;=`!Bk<%lO!ArS!BnP;=`<%l!ArS!BtSOY!@cZ;'S!@c;'S;=`!CQ<%lO!@cS!CTP;=`<%l!@c&n!C][$f&jOY!CWYZ&cZ!^!CW!^!_!Ar!_#O!CW#O#P!DR#P#Q!=y#Q#o!CW#o#p!Ar#p;'S!CW;'S;=`!Ds<%lO!CW&n!DWX$f&jOY!CWYZ&cZ!^!CW!^!_!Ar!_#o!CW#o#p!Ar#p;'S!CW;'S;=`!Ds<%lO!CW&n!DvP;=`<%l!CW&n!EOX$f&jOY!=yYZ&cZ!^!=y!^!_!@c!_#o!=y#o#p!@c#p;'S!=y;'S;=`!Ek<%lO!=y&n!EnP;=`<%l!=y(Q!Ezl$f&j(R!b!USOY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#W&}#W#X!Eq#X#Z&}#Z#[!Eq#[#]&}#]#^!Eq#^#a&}#a#b!Eq#b#g&}#g#h!Eq#h#i&}#i#j!Eq#j#k!Eq#k#m&}#m#n!Eq#n#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}!f!GyZ(R!b!USOY!GrZw!Grwx!@cx!P!Gr!P!Q!Hl!Q!}!Gr!}#O!JU#O#P!Bq#P;'S!Gr;'S;=`!J|<%lO!Gr!f!Hse(R!b!USOY'}Zw'}x#O'}#P#W'}#W#X!Hl#X#Z'}#Z#[!Hl#[#]'}#]#^!Hl#^#a'}#a#b!Hl#b#g'}#g#h!Hl#h#i'}#i#j!Hl#j#k!Hl#k#m'}#m#n!Hl#n;'S'};'S;=`(f<%lO'}!f!JZX(R!bOY!JUZw!JUwx!Arx#O!JU#O#P!B[#P#Q!Gr#Q;'S!JU;'S;=`!Jv<%lO!JU!f!JyP;=`<%l!JU!f!KPP;=`<%l!Gr(Q!KZ^$f&j(R!bOY!KSYZ&cZw!KSwx!CWx!^!KS!^!_!JU!_#O!KS#O#P!DR#P#Q!<n#Q#o!KS#o#p!JU#p;'S!KS;'S;=`!LV<%lO!KS(Q!LYP;=`<%l!KS(Q!L`P;=`<%l!<n'`!Ll`$f&j(Op!USOY!LcYZ&cZr!Lcrs!=ys!P!Lc!P!Q!Mn!Q!^!Lc!^!_# o!_!}!Lc!}#O#%P#O#P!Dy#P#o!Lc#o#p# o#p;'S!Lc;'S;=`#&Y<%lO!Lc'`!Mwl$f&j(Op!USOY(rYZ&cZr(rrs&cs!^(r!^!_)r!_#O(r#O#P&c#P#W(r#W#X!Mn#X#Z(r#Z#[!Mn#[#](r#]#^!Mn#^#a(r#a#b!Mn#b#g(r#g#h!Mn#h#i(r#i#j!Mn#j#k!Mn#k#m(r#m#n!Mn#n#o(r#o#p)r#p;'S(r;'S;=`*a<%lO(rt# vZ(Op!USOY# oZr# ors!@cs!P# o!P!Q#!i!Q!}# o!}#O#$R#O#P!Bq#P;'S# o;'S;=`#$y<%lO# ot#!pe(Op!USOY)rZr)rs#O)r#P#W)r#W#X#!i#X#Z)r#Z#[#!i#[#])r#]#^#!i#^#a)r#a#b#!i#b#g)r#g#h#!i#h#i)r#i#j#!i#j#k#!i#k#m)r#m#n#!i#n;'S)r;'S;=`*Z<%lO)rt#$WX(OpOY#$RZr#$Rrs!Ars#O#$R#O#P!B[#P#Q# o#Q;'S#$R;'S;=`#$s<%lO#$Rt#$vP;=`<%l#$Rt#$|P;=`<%l# o'`#%W^$f&j(OpOY#%PYZ&cZr#%Prs!CWs!^#%P!^!_#$R!_#O#%P#O#P!DR#P#Q!Lc#Q#o#%P#o#p#$R#p;'S#%P;'S;=`#&S<%lO#%P'`#&VP;=`<%l#%P'`#&]P;=`<%l!Lc(r#&kn$f&j(Op(R!b!USOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#W%Z#W#X#&`#X#Z%Z#Z#[#&`#[#]%Z#]#^#&`#^#a%Z#a#b#&`#b#g%Z#g#h#&`#h#i%Z#i#j#&`#j#k#&`#k#m%Z#m#n#&`#n#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z#W#(r](Op(R!b!USOY#(iZr#(irs!Grsw#(iwx# ox!P#(i!P!Q#)k!Q!}#(i!}#O#+`#O#P!Bq#P;'S#(i;'S;=`#,`<%lO#(i#W#)th(Op(R!b!USOY*gZr*grs'}sw*gwx)rx#O*g#P#W*g#W#X#)k#X#Z*g#Z#[#)k#[#]*g#]#^#)k#^#a*g#a#b#)k#b#g*g#g#h#)k#h#i*g#i#j#)k#j#k#)k#k#m*g#m#n#)k#n;'S*g;'S;=`+Z<%lO*g#W#+gZ(Op(R!bOY#+`Zr#+`rs!JUsw#+`wx#$Rx#O#+`#O#P!B[#P#Q#(i#Q;'S#+`;'S;=`#,Y<%lO#+`#W#,]P;=`<%l#+`#W#,cP;=`<%l#(i(r#,o`$f&j(Op(R!bOY#,fYZ&cZr#,frs!KSsw#,fwx#%Px!^#,f!^!_#+`!_#O#,f#O#P!DR#P#Q!;Z#Q#o#,f#o#p#+`#p;'S#,f;'S;=`#-q<%lO#,f(r#-tP;=`<%l#,f(r#-zP;=`<%l!;Z(CS#.[b$f&j(Op(R!b'v(;d!USOY!;ZYZ&cZr!;Zrs!<nsw!;Zwx!Lcx!P!;Z!P!Q#&`!Q!^!;Z!^!_#(i!_!}!;Z!}#O#,f#O#P!Dy#P#o!;Z#o#p#(i#p;'S!;Z;'S;=`#-w<%lO!;Z(CS#/o_$f&j(Op(R!bS(;dOY#/dYZ&cZr#/drs#0nsw#/dwx#4Ox!^#/d!^!_#5}!_#O#/d#O#P#1p#P#o#/d#o#p#5}#p;'S#/d;'S;=`#6|<%lO#/d(Bb#0w]$f&j(R!bS(;dOY#0nYZ&cZw#0nwx#1px!^#0n!^!_#3R!_#O#0n#O#P#1p#P#o#0n#o#p#3R#p;'S#0n;'S;=`#3x<%lO#0n(AO#1wX$f&jS(;dOY#1pYZ&cZ!^#1p!^!_#2d!_#o#1p#o#p#2d#p;'S#1p;'S;=`#2{<%lO#1p(;d#2iSS(;dOY#2dZ;'S#2d;'S;=`#2u<%lO#2d(;d#2xP;=`<%l#2d(AO#3OP;=`<%l#1p(<v#3YW(R!bS(;dOY#3RZw#3Rwx#2dx#O#3R#O#P#2d#P;'S#3R;'S;=`#3r<%lO#3R(<v#3uP;=`<%l#3R(Bb#3{P;=`<%l#0n(Ap#4X]$f&j(OpS(;dOY#4OYZ&cZr#4Ors#1ps!^#4O!^!_#5Q!_#O#4O#O#P#1p#P#o#4O#o#p#5Q#p;'S#4O;'S;=`#5w<%lO#4O(<U#5XW(OpS(;dOY#5QZr#5Qrs#2ds#O#5Q#O#P#2d#P;'S#5Q;'S;=`#5q<%lO#5Q(<U#5tP;=`<%l#5Q(Ap#5zP;=`<%l#4O(=h#6WY(Op(R!bS(;dOY#5}Zr#5}rs#3Rsw#5}wx#5Qx#O#5}#O#P#2d#P;'S#5};'S;=`#6v<%lO#5}(=h#6yP;=`<%l#5}(CS#7PP;=`<%l#/d%#W#7ab$f&j$O$Id(Op(R!b!USOY!;ZYZ&cZr!;Zrs!<nsw!;Zwx!Lcx!P!;Z!P!Q#&`!Q!^!;Z!^!_#(i!_!}!;Z!}#O#,f#O#P!Dy#P#o!;Z#o#p#(i#p;'S!;Z;'S;=`#-w<%lO!;Z+h#8vb$W#t$f&j(Op(R!b!USOY!;ZYZ&cZr!;Zrs!<nsw!;Zwx!Lcx!P!;Z!P!Q#&`!Q!^!;Z!^!_#(i!_!}!;Z!}#O#,f#O#P!Dy#P#o!;Z#o#p#(i#p;'S!;Z;'S;=`#-w<%lO!;Z$/l#:Zp$f&j(Op(R!bo$'|OY%ZYZ&cZr%Zrs&}sw%Zwx(rx!O%Z!O!P!3Y!P!Q%Z!Q![#<_![!^%Z!^!_*g!_!g%Z!g!h!4|!h#O%Z#O#P&c#P#R%Z#R#S#<_#S#U%Z#U#V#?i#V#X%Z#X#Y!4|#Y#b%Z#b#c#>_#c#d#Bq#d#l%Z#l#m#Es#m#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z$/l#<jk$f&j(Op(R!bo$'|OY%ZYZ&cZr%Zrs&}sw%Zwx(rx!O%Z!O!P!3Y!P!Q%Z!Q![#<_![!^%Z!^!_*g!_!g%Z!g!h!4|!h#O%Z#O#P&c#P#R%Z#R#S#<_#S#X%Z#X#Y!4|#Y#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z$/l#>j_$f&j(Op(R!bo$'|OY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z$/l#?rd$f&j(Op(R!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!R#AQ!R!S#AQ!S!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#AQ#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z$/l#A]f$f&j(Op(R!bo$'|OY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!R#AQ!R!S#AQ!S!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#AQ#S#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z$/l#Bzc$f&j(Op(R!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!Y#DV!Y!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#DV#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z$/l#Dbe$f&j(Op(R!bo$'|OY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!Y#DV!Y!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#DV#S#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z$/l#E|g$f&j(Op(R!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![#Ge![!^%Z!^!_*g!_!c%Z!c!i#Ge!i#O%Z#O#P&c#P#R%Z#R#S#Ge#S#T%Z#T#Z#Ge#Z#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z$/l#Gpi$f&j(Op(R!bo$'|OY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![#Ge![!^%Z!^!_*g!_!c%Z!c!i#Ge!i#O%Z#O#P&c#P#R%Z#R#S#Ge#S#T%Z#T#Z#Ge#Z#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z%Gh#Il_!d$b$f&j#|%<f(Op(R!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z)[#Jv_`l$f&j(Op(R!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(@^#LS^g!*v!h'.r(Op(R!b(uSOY*gZr*grs'}sw*gwx)rx!P*g!P!Q#MO!Q!^*g!^!_#Mt!_!`$ f!`#O*g#P;'S*g;'S;=`+Z<%lO*g(n#MXX$h&j(Op(R!bOY*gZr*grs'}sw*gwx)rx#O*g#P;'S*g;'S;=`+Z<%lO*g$Kh#M}Z#n$Id(Op(R!bOY*gZr*grs'}sw*gwx)rx!_*g!_!`#Np!`#O*g#P;'S*g;'S;=`+Z<%lO*g$Kh#NyX$O$Id(Op(R!bOY*gZr*grs'}sw*gwx)rx#O*g#P;'S*g;'S;=`+Z<%lO*g$Kh$ oX#o$Id(Op(R!bOY*gZr*grs'}sw*gwx)rx#O*g#P;'S*g;'S;=`+Z<%lO*g%Gh$!ga#[%?x$f&j(Op(R!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`0z!`!a$#l!a#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z%#W$#w_#g$Ih$f&j(Op(R!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z%Gh$%VafBf#o$Id$c#|$f&j(Op(R!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`$&[!`!a$'f!a#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z%#S$&g_#o$Id$f&j(Op(R!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z%#S$'qa#n$Id$f&j(Op(R!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`!a$(v!a#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z%#S$)R`#n$Id$f&j(Op(R!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'+h$*`c(i$Ip$f&j(Op(R!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!O%Z!O!P$+k!P!^%Z!^!_*g!_!a%Z!a!b$,u!b#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'+`$+v_}'#p$f&j(Op(R!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z%#S$-Q`$f&j#y$Id(Op(R!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z#&^$.__!{!Ln$f&j(Op(R!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(@^$/i_!P(8n$f&j(Op(R!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(n$0mZ$f&jO!^$1`!^!_$1v!_#i$1`#i#j$1{#j#l$1`#l#m$3n#m#o$1`#o#p$1v#p;'S$1`;'S;=`$5y<%lO$1`(n$1gT^#S$f&jO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c#S$1{O^#S(n$2Q[$f&jO!Q&c!Q![$2v![!^&c!_!c&c!c!i$2v!i#T&c#T#Z$2v#Z#o&c#o#p$5^#p;'S&c;'S;=`&w<%lO&c(n$2{Z$f&jO!Q&c!Q![$3n![!^&c!_!c&c!c!i$3n!i#T&c#T#Z$3n#Z#o&c#p;'S&c;'S;=`&w<%lO&c(n$3sZ$f&jO!Q&c!Q![$4f![!^&c!_!c&c!c!i$4f!i#T&c#T#Z$4f#Z#o&c#p;'S&c;'S;=`&w<%lO&c(n$4kZ$f&jO!Q&c!Q![$1`![!^&c!_!c&c!c!i$1`!i#T&c#T#Z$1`#Z#o&c#p;'S&c;'S;=`&w<%lO&c#S$5aR!Q![$5j!c!i$5j#T#Z$5j#S$5mS!Q![$5j!c!i$5j#T#Z$5j#q#r$1v(n$5|P;=`<%l$1`!2r$6[_!V!+S$f&j(Op(R!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z%#S$7f`#v$Id$f&j(Op(R!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z&,v$8s_$f&j(Op(R!b(X&%WOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(CS$:Rk$f&j(Op(R!b'{&;d$[#t([!LYOY%ZYZ&cZr%Zrs&}st%Ztu$9ruw%Zwx(rx}%Z}!O$;v!O!Q%Z!Q![$9r![!^%Z!^!_*g!_!c%Z!c!}$9r!}#O%Z#O#P&c#P#R%Z#R#S$9r#S#T%Z#T#o$9r#o#p*g#p$g%Z$g;'S$9r;'S;=`$=|<%lO$9r+d$<Rk$f&j(Op(R!b$[#tOY%ZYZ&cZr%Zrs&}st%Ztu$;vuw%Zwx(rx}%Z}!O$;v!O!Q%Z!Q![$;v![!^%Z!^!_*g!_!c%Z!c!}$;v!}#O%Z#O#P&c#P#R%Z#R#S$;v#S#T%Z#T#o$;v#o#p*g#p$g%Z$g;'S$;v;'S;=`$=v<%lO$;v+d$=yP;=`<%l$;v(CS$>PP;=`<%l$9r!5p$>]X![!3l(Op(R!bOY*gZr*grs'}sw*gwx)rx#O*g#P;'S*g;'S;=`+Z<%lO*g&CO$?Ta(p&;`$f&j(Op(R!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p#q$,u#q;'S%Z;'S;=`+a<%lO%Z%#`$@g_!Z$I`r`$f&j(Op(R!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(r$Aq_!pS$f&j(Op(R!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(CS$CR|$f&j(Op(R!b't(;d$Y#t'{&;d([!LYOX%ZXY+gYZ&cZ[+g[p%Zpq+gqr%Zrs&}st%ZtuEruw%Zwx(rx}%Z}!OGv!O!Q%Z!Q![Er![!^%Z!^!_*g!_!c%Z!c!}Er!}#O%Z#O#P&c#P#R%Z#R#SEr#S#T%Z#T#oEr#o#p*g#p$f%Z$f$g+g$g#BYEr#BY#BZ$Bp#BZ$ISEr$IS$I_$Bp$I_$JTEr$JT$JU$Bp$JU$KVEr$KV$KW$Bp$KW&FUEr&FU&FV$Bp&FV;'SEr;'S;=`I|<%l?HTEr?HT?HU$Bp?HUOEr(CS$F^k$f&j(Op(R!b'u(;d$Y#t'{&;d([!LYOY%ZYZ&cZr%Zrs&}st%ZtuEruw%Zwx(rx}%Z}!OGv!O!Q%Z!Q![Er![!^%Z!^!_*g!_!c%Z!c!}Er!}#O%Z#O#P&c#P#R%Z#R#SEr#S#T%Z#T#oEr#o#p*g#p$g%Z$g;'SEr;'S;=`I|<%lOEr",
28146
  tokenData: "$Fq07[R!bOX%ZXY+gYZ-yZ[+g[]%Z]^.c^p%Zpq+gqr/mrs3cst:_tuEruvJSvwLkwx! Yxy!'iyz!(sz{!)}{|!,q|}!.O}!O!,q!O!P!/Y!P!Q!9j!Q!R#:O!R![#<_![!]#I_!]!^#Jk!^!_#Ku!_!`$![!`!a$$v!a!b$*T!b!c$,r!c!}Er!}#O$-|#O#P$/W#P#Q$4o#Q#R$5y#R#SEr#S#T$7W#T#o$8b#o#p$<r#p#q$=h#q#r$>x#r#s$@U#s$f%Z$f$g+g$g#BYEr#BY#BZ$A`#BZ$ISEr$IS$I_$A`$I_$I|Er$I|$I}$Dk$I}$JO$Dk$JO$JTEr$JT$JU$A`$JU$KVEr$KV$KW$A`$KW&FUEr&FU&FV$A`&FV;'SEr;'S;=`I|<%l?HTEr?HT?HU$A`?HUOEr(n%d_$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z&j&hT$h&jO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c&j&zP;=`<%l&c'|'U]$h&j(X!bOY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}!b(SU(X!bOY'}Zw'}x#O'}#P;'S'};'S;=`(f<%lO'}!b(iP;=`<%l'}'|(oP;=`<%l&}'[(y]$h&j(UpOY(rYZ&cZr(rrs&cs!^(r!^!_)r!_#O(r#O#P&c#P#o(r#o#p)r#p;'S(r;'S;=`*a<%lO(rp)wU(UpOY)rZr)rs#O)r#P;'S)r;'S;=`*Z<%lO)rp*^P;=`<%l)r'[*dP;=`<%l(r#S*nX(Up(X!bOY*gZr*grs'}sw*gwx)rx#O*g#P;'S*g;'S;=`+Z<%lO*g#S+^P;=`<%l*g(n+dP;=`<%l%Z07[+rq$h&j(Up(X!b'z0/lOX%ZXY+gYZ&cZ[+g[p%Zpq+gqr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p$f%Z$f$g+g$g#BY%Z#BY#BZ+g#BZ$IS%Z$IS$I_+g$I_$JT%Z$JT$JU+g$JU$KV%Z$KV$KW+g$KW&FU%Z&FU&FV+g&FV;'S%Z;'S;=`+a<%l?HT%Z?HT?HU+g?HUO%Z07[.ST(V#S$h&j'{0/lO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c07[.n_$h&j(Up(X!b'{0/lOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z)3p/x`$h&j!n),Q(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`0z!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW1V`#u(Ch$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`2X!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW2d_#u(Ch$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'At3l_(T':f$h&j(X!bOY4kYZ5qZr4krs7nsw4kwx5qx!^4k!^!_8p!_#O4k#O#P5q#P#o4k#o#p8p#p;'S4k;'S;=`:X<%lO4k(^4r_$h&j(X!bOY4kYZ5qZr4krs7nsw4kwx5qx!^4k!^!_8p!_#O4k#O#P5q#P#o4k#o#p8p#p;'S4k;'S;=`:X<%lO4k&z5vX$h&jOr5qrs6cs!^5q!^!_6y!_#o5q#o#p6y#p;'S5q;'S;=`7h<%lO5q&z6jT$c`$h&jO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c`6|TOr6yrs7]s;'S6y;'S;=`7b<%lO6y`7bO$c``7eP;=`<%l6y&z7kP;=`<%l5q(^7w]$c`$h&j(X!bOY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}!r8uZ(X!bOY8pYZ6yZr8prs9hsw8pwx6yx#O8p#O#P6y#P;'S8p;'S;=`:R<%lO8p!r9oU$c`(X!bOY'}Zw'}x#O'}#P;'S'};'S;=`(f<%lO'}!r:UP;=`<%l8p(^:[P;=`<%l4k%9[:hh$h&j(Up(X!bOY%ZYZ&cZq%Zqr<Srs&}st%ZtuCruw%Zwx(rx!^%Z!^!_*g!_!c%Z!c!}Cr!}#O%Z#O#P&c#P#R%Z#R#SCr#S#T%Z#T#oCr#o#p*g#p$g%Z$g;'SCr;'S;=`El<%lOCr(r<__WS$h&j(Up(X!bOY<SYZ&cZr<Srs=^sw<Swx@nx!^<S!^!_Bm!_#O<S#O#P>`#P#o<S#o#pBm#p;'S<S;'S;=`Cl<%lO<S(Q=g]WS$h&j(X!bOY=^YZ&cZw=^wx>`x!^=^!^!_?q!_#O=^#O#P>`#P#o=^#o#p?q#p;'S=^;'S;=`@h<%lO=^&n>gXWS$h&jOY>`YZ&cZ!^>`!^!_?S!_#o>`#o#p?S#p;'S>`;'S;=`?k<%lO>`S?XSWSOY?SZ;'S?S;'S;=`?e<%lO?SS?hP;=`<%l?S&n?nP;=`<%l>`!f?xWWS(X!bOY?qZw?qwx?Sx#O?q#O#P?S#P;'S?q;'S;=`@b<%lO?q!f@eP;=`<%l?q(Q@kP;=`<%l=^'`@w]WS$h&j(UpOY@nYZ&cZr@nrs>`s!^@n!^!_Ap!_#O@n#O#P>`#P#o@n#o#pAp#p;'S@n;'S;=`Bg<%lO@ntAwWWS(UpOYApZrAprs?Ss#OAp#O#P?S#P;'SAp;'S;=`Ba<%lOAptBdP;=`<%lAp'`BjP;=`<%l@n#WBvYWS(Up(X!bOYBmZrBmrs?qswBmwxApx#OBm#O#P?S#P;'SBm;'S;=`Cf<%lOBm#WCiP;=`<%lBm(rCoP;=`<%l<S%9[C}i$h&j(m%1l(Up(X!bOY%ZYZ&cZr%Zrs&}st%ZtuCruw%Zwx(rx!Q%Z!Q![Cr![!^%Z!^!_*g!_!c%Z!c!}Cr!}#O%Z#O#P&c#P#R%Z#R#SCr#S#T%Z#T#oCr#o#p*g#p$g%Z$g;'SCr;'S;=`El<%lOCr%9[EoP;=`<%lCr07[FRk$h&j(Up(X!b$[#t(R,2j(c$I[OY%ZYZ&cZr%Zrs&}st%ZtuEruw%Zwx(rx}%Z}!OGv!O!Q%Z!Q![Er![!^%Z!^!_*g!_!c%Z!c!}Er!}#O%Z#O#P&c#P#R%Z#R#SEr#S#T%Z#T#oEr#o#p*g#p$g%Z$g;'SEr;'S;=`I|<%lOEr+dHRk$h&j(Up(X!b$[#tOY%ZYZ&cZr%Zrs&}st%ZtuGvuw%Zwx(rx}%Z}!OGv!O!Q%Z!Q![Gv![!^%Z!^!_*g!_!c%Z!c!}Gv!}#O%Z#O#P&c#P#R%Z#R#SGv#S#T%Z#T#oGv#o#p*g#p$g%Z$g;'SGv;'S;=`Iv<%lOGv+dIyP;=`<%lGv07[JPP;=`<%lEr(KWJ_`$h&j(Up(X!b#n(ChOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KWKl_$h&j$P(Ch(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z,#xLva(x+JY$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sv%ZvwM{wx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KWNW`$h&j#y(Ch(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'At! c_(W';W$h&j(UpOY!!bYZ!#hZr!!brs!#hsw!!bwx!$xx!^!!b!^!_!%z!_#O!!b#O#P!#h#P#o!!b#o#p!%z#p;'S!!b;'S;=`!'c<%lO!!b'l!!i_$h&j(UpOY!!bYZ!#hZr!!brs!#hsw!!bwx!$xx!^!!b!^!_!%z!_#O!!b#O#P!#h#P#o!!b#o#p!%z#p;'S!!b;'S;=`!'c<%lO!!b&z!#mX$h&jOw!#hwx6cx!^!#h!^!_!$Y!_#o!#h#o#p!$Y#p;'S!#h;'S;=`!$r<%lO!#h`!$]TOw!$Ywx7]x;'S!$Y;'S;=`!$l<%lO!$Y`!$oP;=`<%l!$Y&z!$uP;=`<%l!#h'l!%R]$c`$h&j(UpOY(rYZ&cZr(rrs&cs!^(r!^!_)r!_#O(r#O#P&c#P#o(r#o#p)r#p;'S(r;'S;=`*a<%lO(r!Q!&PZ(UpOY!%zYZ!$YZr!%zrs!$Ysw!%zwx!&rx#O!%z#O#P!$Y#P;'S!%z;'S;=`!']<%lO!%z!Q!&yU$c`(UpOY)rZr)rs#O)r#P;'S)r;'S;=`*Z<%lO)r!Q!'`P;=`<%l!%z'l!'fP;=`<%l!!b/5|!'t_!j/.^$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z#&U!)O_!i!Lf$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z-!n!*[b$h&j(Up(X!b(S%&f#o(ChOY%ZYZ&cZr%Zrs&}sw%Zwx(rxz%Zz{!+d{!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW!+o`$h&j(Up(X!b#l(ChOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z+;x!,|`$h&j(Up(X!bp+4YOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z,$U!.Z_!Z+Jf$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z07[!/ec$h&j(Up(X!b!O.2^OY%ZYZ&cZr%Zrs&}sw%Zwx(rx!O%Z!O!P!0p!P!Q%Z!Q![!3Y![!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z#%|!0ya$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!O%Z!O!P!2O!P!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z#%|!2Z_!Y!L^$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad!3eg$h&j(Up(X!bq'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![!3Y![!^%Z!^!_*g!_!g%Z!g!h!4|!h#O%Z#O#P&c#P#R%Z#R#S!3Y#S#X%Z#X#Y!4|#Y#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad!5Vg$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx{%Z{|!6n|}%Z}!O!6n!O!Q%Z!Q![!8S![!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S!8S#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad!6wc$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![!8S![!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S!8S#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad!8_c$h&j(Up(X!bq'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![!8S![!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S!8S#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z07[!9uf$h&j(Up(X!b#m(ChOY!;ZYZ&cZr!;Zrs!<nsw!;Zwx!Lcxz!;Zz{#-}{!P!;Z!P!Q#/d!Q!^!;Z!^!_#(i!_!`#7S!`!a#8i!a!}!;Z!}#O#,f#O#P!Dy#P#o!;Z#o#p#(i#p;'S!;Z;'S;=`#-w<%lO!;Z?O!;fb$h&j(Up(X!b!V7`OY!;ZYZ&cZr!;Zrs!<nsw!;Zwx!Lcx!P!;Z!P!Q#&`!Q!^!;Z!^!_#(i!_!}!;Z!}#O#,f#O#P!Dy#P#o!;Z#o#p#(i#p;'S!;Z;'S;=`#-w<%lO!;Z>^!<w`$h&j(X!b!V7`OY!<nYZ&cZw!<nwx!=yx!P!<n!P!Q!Eq!Q!^!<n!^!_!Gr!_!}!<n!}#O!KS#O#P!Dy#P#o!<n#o#p!Gr#p;'S!<n;'S;=`!L]<%lO!<n<z!>Q^$h&j!V7`OY!=yYZ&cZ!P!=y!P!Q!>|!Q!^!=y!^!_!@c!_!}!=y!}#O!CW#O#P!Dy#P#o!=y#o#p!@c#p;'S!=y;'S;=`!Ek<%lO!=y<z!?Td$h&j!V7`O!^&c!_#W&c#W#X!>|#X#Z&c#Z#[!>|#[#]&c#]#^!>|#^#a&c#a#b!>|#b#g&c#g#h!>|#h#i&c#i#j!>|#j#k!>|#k#m&c#m#n!>|#n#o&c#p;'S&c;'S;=`&w<%lO&c7`!@hX!V7`OY!@cZ!P!@c!P!Q!AT!Q!}!@c!}#O!Ar#O#P!Bq#P;'S!@c;'S;=`!CQ<%lO!@c7`!AYW!V7`#W#X!AT#Z#[!AT#]#^!AT#a#b!AT#g#h!AT#i#j!AT#j#k!AT#m#n!AT7`!AuVOY!ArZ#O!Ar#O#P!B[#P#Q!@c#Q;'S!Ar;'S;=`!Bk<%lO!Ar7`!B_SOY!ArZ;'S!Ar;'S;=`!Bk<%lO!Ar7`!BnP;=`<%l!Ar7`!BtSOY!@cZ;'S!@c;'S;=`!CQ<%lO!@c7`!CTP;=`<%l!@c<z!C][$h&jOY!CWYZ&cZ!^!CW!^!_!Ar!_#O!CW#O#P!DR#P#Q!=y#Q#o!CW#o#p!Ar#p;'S!CW;'S;=`!Ds<%lO!CW<z!DWX$h&jOY!CWYZ&cZ!^!CW!^!_!Ar!_#o!CW#o#p!Ar#p;'S!CW;'S;=`!Ds<%lO!CW<z!DvP;=`<%l!CW<z!EOX$h&jOY!=yYZ&cZ!^!=y!^!_!@c!_#o!=y#o#p!@c#p;'S!=y;'S;=`!Ek<%lO!=y<z!EnP;=`<%l!=y>^!Ezl$h&j(X!b!V7`OY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#W&}#W#X!Eq#X#Z&}#Z#[!Eq#[#]&}#]#^!Eq#^#a&}#a#b!Eq#b#g&}#g#h!Eq#h#i&}#i#j!Eq#j#k!Eq#k#m&}#m#n!Eq#n#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}8r!GyZ(X!b!V7`OY!GrZw!Grwx!@cx!P!Gr!P!Q!Hl!Q!}!Gr!}#O!JU#O#P!Bq#P;'S!Gr;'S;=`!J|<%lO!Gr8r!Hse(X!b!V7`OY'}Zw'}x#O'}#P#W'}#W#X!Hl#X#Z'}#Z#[!Hl#[#]'}#]#^!Hl#^#a'}#a#b!Hl#b#g'}#g#h!Hl#h#i'}#i#j!Hl#j#k!Hl#k#m'}#m#n!Hl#n;'S'};'S;=`(f<%lO'}8r!JZX(X!bOY!JUZw!JUwx!Arx#O!JU#O#P!B[#P#Q!Gr#Q;'S!JU;'S;=`!Jv<%lO!JU8r!JyP;=`<%l!JU8r!KPP;=`<%l!Gr>^!KZ^$h&j(X!bOY!KSYZ&cZw!KSwx!CWx!^!KS!^!_!JU!_#O!KS#O#P!DR#P#Q!<n#Q#o!KS#o#p!JU#p;'S!KS;'S;=`!LV<%lO!KS>^!LYP;=`<%l!KS>^!L`P;=`<%l!<n=l!Ll`$h&j(Up!V7`OY!LcYZ&cZr!Lcrs!=ys!P!Lc!P!Q!Mn!Q!^!Lc!^!_# o!_!}!Lc!}#O#%P#O#P!Dy#P#o!Lc#o#p# o#p;'S!Lc;'S;=`#&Y<%lO!Lc=l!Mwl$h&j(Up!V7`OY(rYZ&cZr(rrs&cs!^(r!^!_)r!_#O(r#O#P&c#P#W(r#W#X!Mn#X#Z(r#Z#[!Mn#[#](r#]#^!Mn#^#a(r#a#b!Mn#b#g(r#g#h!Mn#h#i(r#i#j!Mn#j#k!Mn#k#m(r#m#n!Mn#n#o(r#o#p)r#p;'S(r;'S;=`*a<%lO(r8Q# vZ(Up!V7`OY# oZr# ors!@cs!P# o!P!Q#!i!Q!}# o!}#O#$R#O#P!Bq#P;'S# o;'S;=`#$y<%lO# o8Q#!pe(Up!V7`OY)rZr)rs#O)r#P#W)r#W#X#!i#X#Z)r#Z#[#!i#[#])r#]#^#!i#^#a)r#a#b#!i#b#g)r#g#h#!i#h#i)r#i#j#!i#j#k#!i#k#m)r#m#n#!i#n;'S)r;'S;=`*Z<%lO)r8Q#$WX(UpOY#$RZr#$Rrs!Ars#O#$R#O#P!B[#P#Q# o#Q;'S#$R;'S;=`#$s<%lO#$R8Q#$vP;=`<%l#$R8Q#$|P;=`<%l# o=l#%W^$h&j(UpOY#%PYZ&cZr#%Prs!CWs!^#%P!^!_#$R!_#O#%P#O#P!DR#P#Q!Lc#Q#o#%P#o#p#$R#p;'S#%P;'S;=`#&S<%lO#%P=l#&VP;=`<%l#%P=l#&]P;=`<%l!Lc?O#&kn$h&j(Up(X!b!V7`OY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#W%Z#W#X#&`#X#Z%Z#Z#[#&`#[#]%Z#]#^#&`#^#a%Z#a#b#&`#b#g%Z#g#h#&`#h#i%Z#i#j#&`#j#k#&`#k#m%Z#m#n#&`#n#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z9d#(r](Up(X!b!V7`OY#(iZr#(irs!Grsw#(iwx# ox!P#(i!P!Q#)k!Q!}#(i!}#O#+`#O#P!Bq#P;'S#(i;'S;=`#,`<%lO#(i9d#)th(Up(X!b!V7`OY*gZr*grs'}sw*gwx)rx#O*g#P#W*g#W#X#)k#X#Z*g#Z#[#)k#[#]*g#]#^#)k#^#a*g#a#b#)k#b#g*g#g#h#)k#h#i*g#i#j#)k#j#k#)k#k#m*g#m#n#)k#n;'S*g;'S;=`+Z<%lO*g9d#+gZ(Up(X!bOY#+`Zr#+`rs!JUsw#+`wx#$Rx#O#+`#O#P!B[#P#Q#(i#Q;'S#+`;'S;=`#,Y<%lO#+`9d#,]P;=`<%l#+`9d#,cP;=`<%l#(i?O#,o`$h&j(Up(X!bOY#,fYZ&cZr#,frs!KSsw#,fwx#%Px!^#,f!^!_#+`!_#O#,f#O#P!DR#P#Q!;Z#Q#o#,f#o#p#+`#p;'S#,f;'S;=`#-q<%lO#,f?O#-tP;=`<%l#,f?O#-zP;=`<%l!;Z07[#.[b$h&j(Up(X!b'|0/l!V7`OY!;ZYZ&cZr!;Zrs!<nsw!;Zwx!Lcx!P!;Z!P!Q#&`!Q!^!;Z!^!_#(i!_!}!;Z!}#O#,f#O#P!Dy#P#o!;Z#o#p#(i#p;'S!;Z;'S;=`#-w<%lO!;Z07[#/o_$h&j(Up(X!bT0/lOY#/dYZ&cZr#/drs#0nsw#/dwx#4Ox!^#/d!^!_#5}!_#O#/d#O#P#1p#P#o#/d#o#p#5}#p;'S#/d;'S;=`#6|<%lO#/d06j#0w]$h&j(X!bT0/lOY#0nYZ&cZw#0nwx#1px!^#0n!^!_#3R!_#O#0n#O#P#1p#P#o#0n#o#p#3R#p;'S#0n;'S;=`#3x<%lO#0n05W#1wX$h&jT0/lOY#1pYZ&cZ!^#1p!^!_#2d!_#o#1p#o#p#2d#p;'S#1p;'S;=`#2{<%lO#1p0/l#2iST0/lOY#2dZ;'S#2d;'S;=`#2u<%lO#2d0/l#2xP;=`<%l#2d05W#3OP;=`<%l#1p01O#3YW(X!bT0/lOY#3RZw#3Rwx#2dx#O#3R#O#P#2d#P;'S#3R;'S;=`#3r<%lO#3R01O#3uP;=`<%l#3R06j#3{P;=`<%l#0n05x#4X]$h&j(UpT0/lOY#4OYZ&cZr#4Ors#1ps!^#4O!^!_#5Q!_#O#4O#O#P#1p#P#o#4O#o#p#5Q#p;'S#4O;'S;=`#5w<%lO#4O00^#5XW(UpT0/lOY#5QZr#5Qrs#2ds#O#5Q#O#P#2d#P;'S#5Q;'S;=`#5q<%lO#5Q00^#5tP;=`<%l#5Q05x#5zP;=`<%l#4O01p#6WY(Up(X!bT0/lOY#5}Zr#5}rs#3Rsw#5}wx#5Qx#O#5}#O#P#2d#P;'S#5};'S;=`#6v<%lO#5}01p#6yP;=`<%l#5}07[#7PP;=`<%l#/d)3h#7ab$h&j$P(Ch(Up(X!b!V7`OY!;ZYZ&cZr!;Zrs!<nsw!;Zwx!Lcx!P!;Z!P!Q#&`!Q!^!;Z!^!_#(i!_!}!;Z!}#O#,f#O#P!Dy#P#o!;Z#o#p#(i#p;'S!;Z;'S;=`#-w<%lO!;ZAt#8vb$Y#t$h&j(Up(X!b!V7`OY!;ZYZ&cZr!;Zrs!<nsw!;Zwx!Lcx!P!;Z!P!Q#&`!Q!^!;Z!^!_#(i!_!}!;Z!}#O#,f#O#P!Dy#P#o!;Z#o#p#(i#p;'S!;Z;'S;=`#-w<%lO!;Z'Ad#:Zp$h&j(Up(X!bq'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!O%Z!O!P!3Y!P!Q%Z!Q![#<_![!^%Z!^!_*g!_!g%Z!g!h!4|!h#O%Z#O#P&c#P#R%Z#R#S#<_#S#U%Z#U#V#?i#V#X%Z#X#Y!4|#Y#b%Z#b#c#>_#c#d#Bq#d#l%Z#l#m#Es#m#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#<jk$h&j(Up(X!bq'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!O%Z!O!P!3Y!P!Q%Z!Q![#<_![!^%Z!^!_*g!_!g%Z!g!h!4|!h#O%Z#O#P&c#P#R%Z#R#S#<_#S#X%Z#X#Y!4|#Y#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#>j_$h&j(Up(X!bq'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#?rd$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!R#AQ!R!S#AQ!S!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#AQ#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#A]f$h&j(Up(X!bq'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!R#AQ!R!S#AQ!S!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#AQ#S#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#Bzc$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!Y#DV!Y!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#DV#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#Dbe$h&j(Up(X!bq'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!Y#DV!Y!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#DV#S#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#E|g$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![#Ge![!^%Z!^!_*g!_!c%Z!c!i#Ge!i#O%Z#O#P&c#P#R%Z#R#S#Ge#S#T%Z#T#Z#Ge#Z#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#Gpi$h&j(Up(X!bq'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![#Ge![!^%Z!^!_*g!_!c%Z!c!i#Ge!i#O%Z#O#P&c#P#R%Z#R#S#Ge#S#T%Z#T#Z#Ge#Z#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z*)x#Il_!e$b$h&j#})Lv(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z)[#Jv_al$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z04f#LS^h#)`#P-<U(Up(X!b$m7`OY*gZr*grs'}sw*gwx)rx!P*g!P!Q#MO!Q!^*g!^!_#Mt!_!`$ f!`#O*g#P;'S*g;'S;=`+Z<%lO*g(n#MXX$j&j(Up(X!bOY*gZr*grs'}sw*gwx)rx#O*g#P;'S*g;'S;=`+Z<%lO*g(El#M}Z#p(Ch(Up(X!bOY*gZr*grs'}sw*gwx)rx!_*g!_!`#Np!`#O*g#P;'S*g;'S;=`+Z<%lO*g(El#NyX$P(Ch(Up(X!bOY*gZr*grs'}sw*gwx)rx#O*g#P;'S*g;'S;=`+Z<%lO*g(El$ oX#q(Ch(Up(X!bOY*gZr*grs'}sw*gwx)rx#O*g#P;'S*g;'S;=`+Z<%lO*g*)x$!ga#^*!Y$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`0z!`!a$#l!a#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(K[$#w_#i(Cl$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z*)x$%Vag!*r#q(Ch$e#|$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`$&[!`!a$'f!a#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW$&g_#q(Ch$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW$'qa#p(Ch$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`!a$(v!a#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW$)R`#p(Ch$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(Kd$*`a(p(Ct$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!a%Z!a!b$+e!b#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW$+p`$h&j#z(Ch(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z%#`$,}_!z$Ip$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z04f$.X_!Q0,v$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(n$/]Z$h&jO!^$0O!^!_$0f!_#i$0O#i#j$0k#j#l$0O#l#m$2^#m#o$0O#o#p$0f#p;'S$0O;'S;=`$4i<%lO$0O(n$0VT_#S$h&jO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c#S$0kO_#S(n$0p[$h&jO!Q&c!Q![$1f![!^&c!_!c&c!c!i$1f!i#T&c#T#Z$1f#Z#o&c#o#p$3|#p;'S&c;'S;=`&w<%lO&c(n$1kZ$h&jO!Q&c!Q![$2^![!^&c!_!c&c!c!i$2^!i#T&c#T#Z$2^#Z#o&c#p;'S&c;'S;=`&w<%lO&c(n$2cZ$h&jO!Q&c!Q![$3U![!^&c!_!c&c!c!i$3U!i#T&c#T#Z$3U#Z#o&c#p;'S&c;'S;=`&w<%lO&c(n$3ZZ$h&jO!Q&c!Q![$0O![!^&c!_!c&c!c!i$0O!i#T&c#T#Z$0O#Z#o&c#p;'S&c;'S;=`&w<%lO&c#S$4PR!Q![$4Y!c!i$4Y#T#Z$4Y#S$4]S!Q![$4Y!c!i$4Y#T#Z$4Y#q#r$0f(n$4lP;=`<%l$0O#1[$4z_!W#)l$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW$6U`#w(Ch$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z+;p$7c_$h&j(Up(X!b(_+4QOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z07[$8qk$h&j(Up(X!b(R,2j$^#t(c$I[OY%ZYZ&cZr%Zrs&}st%Ztu$8buw%Zwx(rx}%Z}!O$:f!O!Q%Z!Q![$8b![!^%Z!^!_*g!_!c%Z!c!}$8b!}#O%Z#O#P&c#P#R%Z#R#S$8b#S#T%Z#T#o$8b#o#p*g#p$g%Z$g;'S$8b;'S;=`$<l<%lO$8b+d$:qk$h&j(Up(X!b$^#tOY%ZYZ&cZr%Zrs&}st%Ztu$:fuw%Zwx(rx}%Z}!O$:f!O!Q%Z!Q![$:f![!^%Z!^!_*g!_!c%Z!c!}$:f!}#O%Z#O#P&c#P#R%Z#R#S$:f#S#T%Z#T#o$:f#o#p*g#p$g%Z$g;'S$:f;'S;=`$<f<%lO$:f+d$<iP;=`<%l$:f07[$<oP;=`<%l$8b#Jf$<{X!]#Hb(Up(X!bOY*gZr*grs'}sw*gwx)rx#O*g#P;'S*g;'S;=`+Z<%lO*g,#x$=sa(w+JY$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p#q$+e#q;'S%Z;'S;=`+a<%lO%Z)>v$?V_![(CdtBr$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z?O$@a_!o7`$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z07[$Aq|$h&j(Up(X!b'z0/l$[#t(R,2j(c$I[OX%ZXY+gYZ&cZ[+g[p%Zpq+gqr%Zrs&}st%ZtuEruw%Zwx(rx}%Z}!OGv!O!Q%Z!Q![Er![!^%Z!^!_*g!_!c%Z!c!}Er!}#O%Z#O#P&c#P#R%Z#R#SEr#S#T%Z#T#oEr#o#p*g#p$f%Z$f$g+g$g#BYEr#BY#BZ$A`#BZ$ISEr$IS$I_$A`$I_$JTEr$JT$JU$A`$JU$KVEr$KV$KW$A`$KW&FUEr&FU&FV$A`&FV;'SEr;'S;=`I|<%l?HTEr?HT?HU$A`?HUOEr07[$D|k$h&j(Up(X!b'{0/l$[#t(R,2j(c$I[OY%ZYZ&cZr%Zrs&}st%ZtuEruw%Zwx(rx}%Z}!OGv!O!Q%Z!Q![Er![!^%Z!^!_*g!_!c%Z!c!}Er!}#O%Z#O#P&c#P#R%Z#R#SEr#S#T%Z#T#oEr#o#p*g#p$g%Z$g;'SEr;'S;=`I|<%lOEr",
27403
  tokenizers: [noSemicolon, incdecToken, jsx, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, insertSemicolon, new LocalTokenGroup("$S~RRtu[#O#Pg#S#T#|~_P#o#pb~gOt~~jVO#i!P#i#j!U#j#l!P#l#m!q#m;'S!P;'S;=`#v<%lO!P~!UO!R~~!XS!Q![!e!c!i!e#T#Z!e#o#p#Z~!hR!Q![!q!c!i!q#T#Z!q~!tR!Q![!}!c!i!}#T#Z!}~#QR!Q![!P!c!i!P#T#Z!P~#^R!Q![#g!c!i#g#T#Z#g~#jS!Q![#g!c!i#g#T#Z#g#q#r!P~#yP;=`<%l!P~$RO(Z~~", 141, 332), new LocalTokenGroup("j~RQYZXz{^~^O'x~~aP!P!Qd~iO'y~~", 25, 315)],
28147
  tokenizers: [noSemicolon, noSemicolonType, operatorToken, jsx, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, insertSemicolon, new LocalTokenGroup("$S~RRtu[#O#Pg#S#T#|~_P#o#pb~gOv~~jVO#i!P#i#j!U#j#l!P#l#m!q#m;'S!P;'S;=`#v<%lO!P~!UO!S~~!XS!Q![!e!c!i!e#T#Z!e#o#p#Z~!hR!Q![!q!c!i!q#T#Z!q~!tR!Q![!}!c!i!}#T#Z!}~#QR!Q![!P!c!i!P#T#Z!P~#^R!Q![#g!c!i#g#T#Z#g~#jS!Q![#g!c!i#g#T#Z#g#q#r!P~#yP;=`<%l!P~$RO(a~~", 141, 338), new LocalTokenGroup("j~RQYZXz{^~^O(O~~aP!P!Qd~iO(P~~", 25, 321)],
27404
  topRules: {"Script":[0,6],"SingleExpression":[1,269],"SingleClassItem":[2,270]},
28148
  topRules: {"Script":[0,7],"SingleExpression":[1,274],"SingleClassItem":[2,275]},
27405
  dialects: {jsx: 0, ts: 14826},
28149
  dialects: {jsx: 0, ts: 15091},
27406
  dynamicPrecedences: {"69":1,"79":1,"81":1,"165":1,"193":1},
28150
  dynamicPrecedences: {"78":1,"80":1,"92":1,"168":1,"198":1},
Línea 27407... Línea 28151...
27407
  specialized: [{term: 319, get: (value) => spec_identifier[value] || -1},{term: 334, get: (value) => spec_word[value] || -1},{term: 70, get: (value) => spec_LessThan[value] || -1}],
28151
  specialized: [{term: 325, get: (value) => spec_identifier[value] || -1},{term: 341, get: (value) => spec_word[value] || -1},{term: 93, get: (value) => spec_LessThan[value] || -1}],
27408
  tokenPrec: 14850
28152
  tokenPrec: 15116
27409
});
28153
});
Línea 27551... Línea 28295...
27551
    "TemplateString", "String", "RegExp",
28295
    "TemplateString", "String", "RegExp",
27552
    "LineComment", "BlockComment",
28296
    "LineComment", "BlockComment",
27553
    "VariableDefinition", "TypeDefinition", "Label",
28297
    "VariableDefinition", "TypeDefinition", "Label",
27554
    "PropertyDefinition", "PropertyName",
28298
    "PropertyDefinition", "PropertyName",
27555
    "PrivatePropertyDefinition", "PrivatePropertyName",
28299
    "PrivatePropertyDefinition", "PrivatePropertyName",
-
 
28300
    "JSXText", "JSXAttributeValue", "JSXOpenTag", "JSXCloseTag", "JSXSelfClosingTag",
27556
    ".", "?."
28301
    ".", "?."
27557
];
28302
];
27558
/**
28303
/**
27559
Completion source that looks up locally defined names in
28304
Completion source that looks up locally defined names in
27560
JavaScript code.
28305
JavaScript code.
Línea 28344... Línea 29089...
28344
        return false;
29089
        return false;
28345
    let base = insertTransaction(), { state } = base;
29090
    let base = insertTransaction(), { state } = base;
28346
    let closeTags = state.changeByRange(range => {
29091
    let closeTags = state.changeByRange(range => {
28347
        var _a, _b, _c;
29092
        var _a, _b, _c;
28348
        let didType = state.doc.sliceString(range.from - 1, range.to) == text;
29093
        let didType = state.doc.sliceString(range.from - 1, range.to) == text;
28349
        let { head } = range, around = syntaxTree(state).resolveInner(head - 1, -1), name;
29094
        let { head } = range, after = syntaxTree(state).resolveInner(head, -1), name;
28350
        if (around.name == "TagName" || around.name == "StartTag")
29095
        if (didType && text == ">" && after.name == "EndTag") {
28351
            around = around.parent;
29096
            let tag = after.parent;
28352
        if (didType && text == ">" && around.name == "OpenTag") {
-
 
28353
            if (((_b = (_a = around.parent) === null || _a === void 0 ? void 0 : _a.lastChild) === null || _b === void 0 ? void 0 : _b.name) != "CloseTag" &&
29097
            if (((_b = (_a = tag.parent) === null || _a === void 0 ? void 0 : _a.lastChild) === null || _b === void 0 ? void 0 : _b.name) != "CloseTag" &&
28354
                (name = elementName$2(state.doc, around.parent, head)) &&
29098
                (name = elementName$2(state.doc, tag.parent, head)) &&
28355
                !selfClosers.has(name)) {
29099
                !selfClosers.has(name)) {
28356
                let to = head + (state.doc.sliceString(head, head + 1) === ">" ? 1 : 0);
29100
                let to = head + (state.doc.sliceString(head, head + 1) === ">" ? 1 : 0);
28357
                let insert = `</${name}>`;
29101
                let insert = `</${name}>`;
28358
                return { range, changes: { from: head, to, insert } };
29102
                return { range, changes: { from: head, to, insert } };
28359
            }
29103
            }
28360
        }
29104
        }
28361
        else if (didType && text == "/" && around.name == "IncompleteCloseTag") {
29105
        else if (didType && text == "/" && after.name == "IncompleteCloseTag") {
28362
            let base = around.parent;
29106
            let tag = after.parent;
28363
            if (around.from == head - 2 && ((_c = base.lastChild) === null || _c === void 0 ? void 0 : _c.name) != "CloseTag" &&
29107
            if (after.from == head - 2 && ((_c = tag.lastChild) === null || _c === void 0 ? void 0 : _c.name) != "CloseTag" &&
28364
                (name = elementName$2(state.doc, base, head)) && !selfClosers.has(name)) {
29108
                (name = elementName$2(state.doc, tag, head)) && !selfClosers.has(name)) {
28365
                let to = head + (state.doc.sliceString(head, head + 1) === ">" ? 1 : 0);
29109
                let to = head + (state.doc.sliceString(head, head + 1) === ">" ? 1 : 0);
28366
                let insert = `${name}>`;
29110
                let insert = `${name}>`;
28367
                return {
29111
                return {
28368
                    range: EditorSelection.cursor(head + insert.length, -1),
29112
                    range: EditorSelection.cursor(head + insert.length, -1),
28369
                    changes: { from: head, to, insert }
29113
                    changes: { from: head, to, insert }
Línea 28388... Línea 29132...
28388
const StartTag = 1,
29132
const StartTag = 1,
28389
  StartCloseTag = 2,
29133
  StartCloseTag = 2,
28390
  MissingCloseTag = 3,
29134
  MissingCloseTag = 3,
28391
  mismatchedStartCloseTag = 4,
29135
  mismatchedStartCloseTag = 4,
28392
  incompleteStartCloseTag = 5,
29136
  incompleteStartCloseTag = 5,
28393
  commentContent$1 = 35,
29137
  commentContent$1 = 36,
28394
  piContent$1 = 36,
29138
  piContent$1 = 37,
28395
  cdataContent$1 = 37,
29139
  cdataContent$1 = 38,
28396
  Element$1 = 11,
29140
  Element$1 = 11,
28397
  OpenTag = 13;
29141
  OpenTag = 13;
Línea 28398... Línea 29142...
28398
 
29142
 
Línea 28423... Línea 29167...
28423
}
29167
}
Línea 28424... Línea 29168...
28424
 
29168
 
28425
function ElementContext(name, parent) {
29169
function ElementContext(name, parent) {
28426
  this.name = name;
29170
  this.name = name;
28427
  this.parent = parent;
-
 
28428
  this.hash = parent ? parent.hash : 0;
-
 
28429
  for (let i = 0; i < name.length; i++) this.hash += (this.hash << 4) + name.charCodeAt(i) + (name.charCodeAt(i) << 8);
29171
  this.parent = parent;
Línea 28430... Línea 29172...
28430
}
29172
}
28431
 
29173
 
28432
const elementContext = new ContextTracker({
29174
const elementContext = new ContextTracker({
Línea 28440... Línea 29182...
28440
  reuse(context, node, _stack, input) {
29182
  reuse(context, node, _stack, input) {
28441
    let type = node.type.id;
29183
    let type = node.type.id;
28442
    return type == StartTag || type == OpenTag
29184
    return type == StartTag || type == OpenTag
28443
      ? new ElementContext(tagNameAfter(input, 1) || "", context) : context
29185
      ? new ElementContext(tagNameAfter(input, 1) || "", context) : context
28444
  },
29186
  },
28445
  hash(context) { return context ? context.hash : 0 },
-
 
28446
  strict: false
29187
  strict: false
28447
});
29188
});
Línea 28448... Línea 29189...
28448
 
29189
 
28449
const startTag = new ExternalTokenizer((input, stack) => {
29190
const startTag = new ExternalTokenizer((input, stack) => {
Línea 28496... Línea 29237...
28496
});
29237
});
Línea 28497... Línea 29238...
28497
 
29238
 
28498
// This file was generated by lezer-generator. You probably shouldn't edit it.
29239
// This file was generated by lezer-generator. You probably shouldn't edit it.
28499
const parser = LRParser.deserialize({
29240
const parser = LRParser.deserialize({
28500
  version: 14,
29241
  version: 14,
28501
  states: ",SOQOaOOOrOxO'#CfOzOpO'#CiO!tOaO'#CgOOOP'#Cg'#CgO!{OrO'#CrO#TOtO'#CsO#]OpO'#CtOOOP'#DS'#DSOOOP'#Cv'#CvQQOaOOOOOW'#Cw'#CwO#eOxO,59QOOOP,59Q,59QOOOO'#Cx'#CxO#mOpO,59TO#uO!bO,59TOOOP'#C{'#C{O$TOaO,59RO$[OpO'#CoOOOP,59R,59ROOOQ'#C|'#C|O$dOrO,59^OOOP,59^,59^OOOS'#C}'#C}O$lOtO,59_OOOP,59_,59_O$tOpO,59`O$|OpO,59`OOOP-E6t-E6tOOOW-E6u-E6uOOOP1G.l1G.lOOOO-E6v-E6vO%UO!bO1G.oO%UO!bO1G.oO%dOpO'#CkO%lO!bO'#CyO%zO!bO1G.oOOOP1G.o1G.oOOOP1G.w1G.wOOOP-E6y-E6yOOOP1G.m1G.mO&VOpO,59ZO&_OpO,59ZOOOQ-E6z-E6zOOOP1G.x1G.xOOOS-E6{-E6{OOOP1G.y1G.yO&gOpO1G.zO&gOpO1G.zOOOP1G.z1G.zO&oO!bO7+$ZO&}O!bO7+$ZOOOP7+$Z7+$ZOOOP7+$c7+$cO'YOpO,59VO'bOpO,59VO'jO!bO,59eOOOO-E6w-E6wO'xOpO1G.uO'xOpO1G.uOOOP1G.u1G.uO(QOpO7+$fOOOP7+$f7+$fO(YO!bO<<GuOOOP<<Gu<<GuOOOP<<G}<<G}O'bOpO1G.qO'bOpO1G.qO(eO#tO'#CnOOOO1G.q1G.qO(sOpO7+$aOOOP7+$a7+$aOOOP<<HQ<<HQOOOPAN=aAN=aOOOPAN=iAN=iO'bOpO7+$]OOOO7+$]7+$]OOOO'#Cz'#CzO({O#tO,59YOOOO,59Y,59YOOOP<<G{<<G{OOOO<<Gw<<GwOOOO-E6x-E6xOOOO1G.t1G.t",
29242
  states: ",lOQOaOOOrOxO'#CfOzOpO'#CiO!tOaO'#CgOOOP'#Cg'#CgO!{OrO'#CrO#TOtO'#CsO#]OpO'#CtOOOP'#DT'#DTOOOP'#Cv'#CvQQOaOOOOOW'#Cw'#CwO#eOxO,59QOOOP,59Q,59QOOOO'#Cx'#CxO#mOpO,59TO#uO!bO,59TOOOP'#C|'#C|O$TOaO,59RO$[OpO'#CoOOOP,59R,59ROOOQ'#C}'#C}O$dOrO,59^OOOP,59^,59^OOOS'#DO'#DOO$lOtO,59_OOOP,59_,59_O$tOpO,59`O$|OpO,59`OOOP-E6t-E6tOOOW-E6u-E6uOOOP1G.l1G.lOOOO-E6v-E6vO%UO!bO1G.oO%UO!bO1G.oO%dOpO'#CkO%lO!bO'#CyO%zO!bO1G.oOOOP1G.o1G.oOOOP1G.w1G.wOOOP-E6z-E6zOOOP1G.m1G.mO&VOpO,59ZO&_OpO,59ZOOOQ-E6{-E6{OOOP1G.x1G.xOOOS-E6|-E6|OOOP1G.y1G.yO&gOpO1G.zO&gOpO1G.zOOOP1G.z1G.zO&oO!bO7+$ZO&}O!bO7+$ZOOOP7+$Z7+$ZOOOP7+$c7+$cO'YOpO,59VO'bOpO,59VO'mO!bO,59eOOOO-E6w-E6wO'{OpO1G.uO'{OpO1G.uOOOP1G.u1G.uO(TOpO7+$fOOOP7+$f7+$fO(]O!bO<<GuOOOP<<Gu<<GuOOOP<<G}<<G}O'bOpO1G.qO'bOpO1G.qO(hO#tO'#CnO(vO&jO'#CnOOOO1G.q1G.qO)UOpO7+$aOOOP7+$a7+$aOOOP<<HQ<<HQOOOPAN=aAN=aOOOPAN=iAN=iO'bOpO7+$]OOOO7+$]7+$]OOOO'#Cz'#CzO)^O#tO,59YOOOO,59Y,59YOOOO'#C{'#C{O)lO&jO,59YOOOP<<G{<<G{OOOO<<Gw<<GwOOOO-E6x-E6xOOOO1G.t1G.tOOOO-E6y-E6y",
28502
  stateData: ")Z~OPQOSVOTWOVWOWWOXWOiXOxPO}TO!PUO~OuZOw]O~O^`Oy^O~OPQOQcOSVOTWOVWOWWOXWOxPO}TO!PUO~ORdO~P!SOseO|gO~OthO!OjO~O^lOy^O~OuZOwoO~O^qOy^O~O[vO`sOdwOy^O~ORyO~P!SO^{Oy^O~OseO|}O~OthO!O!PO~O^!QOy^O~O[!SOy^O~O[!VO`sOd!WOy^O~Oa!YOy^O~Oy^O[mX`mXdmX~O[!VO`sOd!WO~O^!]Oy^O~O[!_Oy^O~O[!aOy^O~O[!cO`sOd!dOy^O~O[!cO`sOd!dO~Oa!eOy^O~Oy^Oz!gO~Oy^O[ma`madma~O[!jOy^O~O[!kOy^O~O[!lO`sOd!mO~OW!pOX!pOz!rO{!pO~O[!sOy^O~OW!pOX!pOz!vO{!pO~O",
29243
  stateData: ")z~OPQOSVOTWOVWOWWOXWOiXOyPO!QTO!SUO~OvZOx]O~O^`Oz^O~OPQOQcOSVOTWOVWOWWOXWOyPO!QTO!SUO~ORdO~P!SOteO!PgO~OuhO!RjO~O^lOz^O~OvZOxoO~O^qOz^O~O[vO`sOdwOz^O~ORyO~P!SO^{Oz^O~OteO!P}O~OuhO!R!PO~O^!QOz^O~O[!SOz^O~O[!VO`sOd!WOz^O~Oa!YOz^O~Oz^O[mX`mXdmX~O[!VO`sOd!WO~O^!]Oz^O~O[!_Oz^O~O[!aOz^O~O[!cO`sOd!dOz^O~O[!cO`sOd!dO~Oa!eOz^O~Oz^O{!gO}!hO~Oz^O[ma`madma~O[!kOz^O~O[!lOz^O~O[!mO`sOd!nO~OW!qOX!qO{!sO|!qO~OW!tOX!tO}!sO!O!tO~O[!vOz^O~OW!qOX!qO{!yO|!qO~OW!tOX!tO}!yO!O!tO~O",
28503
  goto: "%[wPPPPPPPPPPxxP!OP!UPP!_!iP!oxxxP!u!{#R$Z$j$p$v$|PPPP%SXWORYbXRORYb_t`qru!T!U!bQ!h!YS!o!e!fR!t!nQdRRybXSORYbQYORmYQ[PRn[Q_QQkVjp_krz!R!T!X!Z!^!`!f!i!nQr`QzcQ!RlQ!TqQ!XsQ!ZtQ!^{Q!`!QQ!f!YQ!i!]R!n!eQu`S!UqrU![u!U!bR!b!TQ!q!gR!u!qQbRRxbQfTR|fQiUR!OiSXOYTaRb",
29244
  goto: "%cxPPPPPPPPPPyyP!PP!VPP!`!jP!pyyyP!v!|#S$[$k$q$w$}%TPPPP%ZXWORYbXRORYb_t`qru!T!U!bQ!i!YS!p!e!fR!w!oQdRRybXSORYbQYORmYQ[PRn[Q_QQkVjp_krz!R!T!X!Z!^!`!f!j!oQr`QzcQ!RlQ!TqQ!XsQ!ZtQ!^{Q!`!QQ!f!YQ!j!]R!o!eQu`S!UqrU![u!U!bR!b!TQ!r!gR!x!rQ!u!hR!z!uQbRRxbQfTR|fQiUR!OiSXOYTaRb",
28504
  nodeNames: "⚠ StartTag StartCloseTag MissingCloseTag StartCloseTag StartCloseTag Document Text EntityReference CharacterReference Cdata Element EndTag OpenTag TagName Attribute AttributeName Is AttributeValue CloseTag SelfCloseEndTag SelfClosingTag Comment ProcessingInst MismatchedCloseTag DoctypeDecl",
29245
  nodeNames: "⚠ StartTag StartCloseTag MissingCloseTag StartCloseTag StartCloseTag Document Text EntityReference CharacterReference Cdata Element EndTag OpenTag TagName Attribute AttributeName Is AttributeValue CloseTag SelfCloseEndTag SelfClosingTag Comment ProcessingInst MismatchedCloseTag DoctypeDecl",
28505
  maxTerm: 47,
29246
  maxTerm: 50,
28506
  context: elementContext,
29247
  context: elementContext,
28507
  nodeProps: [
29248
  nodeProps: [
28508
    ["closedBy", 1,"SelfCloseEndTag EndTag",13,"CloseTag MissingCloseTag"],
29249
    ["closedBy", 1,"SelfCloseEndTag EndTag",13,"CloseTag MissingCloseTag"],
28509
    ["openedBy", 12,"StartTag StartCloseTag",19,"OpenTag",20,"StartTag"],
29250
    ["openedBy", 12,"StartTag StartCloseTag",19,"OpenTag",20,"StartTag"],
28510
    ["isolate", -6,13,18,19,21,22,24,""]
29251
    ["isolate", -6,13,18,19,21,22,24,""]
28511
  ],
29252
  ],
28512
  propSources: [xmlHighlighting],
29253
  propSources: [xmlHighlighting],
28513
  skippedNodes: [0],
29254
  skippedNodes: [0],
28514
  repeatNodeCount: 8,
29255
  repeatNodeCount: 9,
28515
  tokenData: "Jy~R!XOX$nXY&kYZ&kZ]$n]^&k^p$npq&kqr$nrs'ssv$nvw(Zw}$n}!O,^!O!P$n!P!Q.m!Q![$n![!]0V!]!^$n!^!_3h!_!`El!`!aF_!a!bGQ!b!c$n!c!}0V!}#P$n#P#QHj#Q#R$n#R#S0V#S#T$n#T#o0V#o%W$n%W%o0V%o%p$n%p&a0V&a&b$n&b1p0V1p4U$n4U4d0V4d4e$n4e$IS0V$IS$I`$n$I`$Ib0V$Ib$Kh$n$Kh%#t0V%#t&/x$n&/x&Et0V&Et&FV$n&FV;'S0V;'S;:j3b;:j;=`&e<%l?&r$n?&r?Ah0V?Ah?BY$n?BY?Mn0V?MnO$nX$uWVP{WOr$nrs%_sv$nw!^$n!^!_%y!_;'S$n;'S;=`&e<%lO$nP%dTVPOv%_w!^%_!_;'S%_;'S;=`%s<%lO%_P%vP;=`<%l%_W&OT{WOr%ysv%yw;'S%y;'S;=`&_<%lO%yW&bP;=`<%l%yX&hP;=`<%l$n_&t_VP{WyUOX$nXY&kYZ&kZ]$n]^&k^p$npq&kqr$nrs%_sv$nw!^$n!^!_%y!_;'S$n;'S;=`&e<%lO$nZ'zTzYVPOv%_w!^%_!_;'S%_;'S;=`%s<%lO%_~(^ast)c![!]*g!c!}*g#R#S*g#T#o*g%W%o*g%p&a*g&b1p*g4U4d*g4e$IS*g$I`$Ib*g$Kh%#t*g&/x&Et*g&FV;'S*g;'S;:j,W?&r?Ah*g?BY?Mn*g~)fQ!Q![)l#l#m)z~)oQ!Q![)l!]!^)u~)zOX~~)}R!Q![*W!c!i*W#T#Z*W~*ZS!Q![*W!]!^)u!c!i*W#T#Z*W~*jg}!O*g!O!P*g!Q![*g![!]*g!]!^,R!c!}*g#R#S*g#T#o*g$}%O*g%W%o*g%p&a*g&b1p*g1p4U*g4U4d*g4e$IS*g$I`$Ib*g$Je$Jg*g$Kh%#t*g&/x&Et*g&FV;'S*g;'S;:j,W?&r?Ah*g?BY?Mn*g~,WOW~~,ZP;=`<%l*gZ,eYVP{WOr$nrs%_sv$nw}$n}!O-T!O!^$n!^!_%y!_;'S$n;'S;=`&e<%lO$nZ-[YVP{WOr$nrs%_sv$nw!^$n!^!_%y!_!`$n!`!a-z!a;'S$n;'S;=`&e<%lO$nZ.TW|QVP{WOr$nrs%_sv$nw!^$n!^!_%y!_;'S$n;'S;=`&e<%lO$n].tYVP{WOr$nrs%_sv$nw!^$n!^!_%y!_!`$n!`!a/d!a;'S$n;'S;=`&e<%lO$n]/mWdSVP{WOr$nrs%_sv$nw!^$n!^!_%y!_;'S$n;'S;=`&e<%lO$n_0b!O`S^QVP{WOr$nrs%_sv$nw}$n}!O0V!O!P0V!P!Q$n!Q![0V![!]0V!]!^$n!^!_%y!_!c$n!c!}0V!}#R$n#R#S0V#S#T$n#T#o0V#o$}$n$}%O0V%O%W$n%W%o0V%o%p$n%p&a0V&a&b$n&b1p0V1p4U0V4U4d0V4d4e$n4e$IS0V$IS$I`$n$I`$Ib0V$Ib$Je$n$Je$Jg0V$Jg$Kh$n$Kh%#t0V%#t&/x$n&/x&Et0V&Et&FV$n&FV;'S0V;'S;:j3b;:j;=`&e<%l?&r$n?&r?Ah0V?Ah?BY$n?BY?Mn0V?MnO$n_3eP;=`<%l0VX3mW{WOq%yqr4Vsv%yw!a%y!a!bEU!b;'S%y;'S;=`&_<%lO%yX4[]{WOr%ysv%yw}%y}!O5T!O!f%y!f!g6V!g!}%y!}#O;f#O#W%y#W#XAr#X;'S%y;'S;=`&_<%lO%yX5YV{WOr%ysv%yw}%y}!O5o!O;'S%y;'S;=`&_<%lO%yX5vT}P{WOr%ysv%yw;'S%y;'S;=`&_<%lO%yX6[V{WOr%ysv%yw!q%y!q!r6q!r;'S%y;'S;=`&_<%lO%yX6vV{WOr%ysv%yw!e%y!e!f7]!f;'S%y;'S;=`&_<%lO%yX7bV{WOr%ysv%yw!v%y!v!w7w!w;'S%y;'S;=`&_<%lO%yX7|V{WOr%ysv%yw!{%y!{!|8c!|;'S%y;'S;=`&_<%lO%yX8hV{WOr%ysv%yw!r%y!r!s8}!s;'S%y;'S;=`&_<%lO%yX9SV{WOr%ysv%yw!g%y!g!h9i!h;'S%y;'S;=`&_<%lO%yX9nX{WOr9irs:Zsv9ivw:Zw!`9i!`!a:x!a;'S9i;'S;=`;`<%lO9iP:^TO!`:Z!`!a:m!a;'S:Z;'S;=`:r<%lO:ZP:rOiPP:uP;=`<%l:ZX;PTiP{WOr%ysv%yw;'S%y;'S;=`&_<%lO%yX;cP;=`<%l9iX;kX{WOr%ysv%yw!e%y!e!f<W!f#V%y#V#W?f#W;'S%y;'S;=`&_<%lO%yX<]V{WOr%ysv%yw!f%y!f!g<r!g;'S%y;'S;=`&_<%lO%yX<wV{WOr%ysv%yw!c%y!c!d=^!d;'S%y;'S;=`&_<%lO%yX=cV{WOr%ysv%yw!v%y!v!w=x!w;'S%y;'S;=`&_<%lO%yX=}V{WOr%ysv%yw!c%y!c!d>d!d;'S%y;'S;=`&_<%lO%yX>iV{WOr%ysv%yw!}%y!}#O?O#O;'S%y;'S;=`&_<%lO%yX?VT{WxPOr%ysv%yw;'S%y;'S;=`&_<%lO%yX?kV{WOr%ysv%yw#W%y#W#X@Q#X;'S%y;'S;=`&_<%lO%yX@VV{WOr%ysv%yw#T%y#T#U@l#U;'S%y;'S;=`&_<%lO%yX@qV{WOr%ysv%yw#h%y#h#iAW#i;'S%y;'S;=`&_<%lO%yXA]V{WOr%ysv%yw#T%y#T#U>d#U;'S%y;'S;=`&_<%lO%yXAwV{WOr%ysv%yw#c%y#c#dB^#d;'S%y;'S;=`&_<%lO%yXBcV{WOr%ysv%yw#V%y#V#WBx#W;'S%y;'S;=`&_<%lO%yXB}V{WOr%ysv%yw#h%y#h#iCd#i;'S%y;'S;=`&_<%lO%yXCiV{WOr%ysv%yw#m%y#m#nDO#n;'S%y;'S;=`&_<%lO%yXDTV{WOr%ysv%yw#d%y#d#eDj#e;'S%y;'S;=`&_<%lO%yXDoV{WOr%ysv%yw#X%y#X#Y9i#Y;'S%y;'S;=`&_<%lO%yXE]T!PP{WOr%ysv%yw;'S%y;'S;=`&_<%lO%yZEuWaQVP{WOr$nrs%_sv$nw!^$n!^!_%y!_;'S$n;'S;=`&e<%lO$n_FhW[UVP{WOr$nrs%_sv$nw!^$n!^!_%y!_;'S$n;'S;=`&e<%lO$nZGXYVP{WOr$nrs%_sv$nw!^$n!^!_%y!_!`$n!`!aGw!a;'S$n;'S;=`&e<%lO$nZHQW!OQVP{WOr$nrs%_sv$nw!^$n!^!_%y!_;'S$n;'S;=`&e<%lO$nZHqYVP{WOr$nrs%_sv$nw!^$n!^!_%y!_#P$n#P#QIa#Q;'S$n;'S;=`&e<%lO$nZIhYVP{WOr$nrs%_sv$nw!^$n!^!_%y!_!`$n!`!aJW!a;'S$n;'S;=`&e<%lO$nZJaWwQVP{WOr$nrs%_sv$nw!^$n!^!_%y!_;'S$n;'S;=`&e<%lO$n",
29256
  tokenData: "!)v~R!YOX$qXY)iYZ)iZ]$q]^)i^p$qpq)iqr$qrs*vsv$qvw+fwx/ix}$q}!O0[!O!P$q!P!Q2z!Q![$q![!]4n!]!^$q!^!_8U!_!`!#t!`!a!$l!a!b!%d!b!c$q!c!}4n!}#P$q#P#Q!'W#Q#R$q#R#S4n#S#T$q#T#o4n#o%W$q%W%o4n%o%p$q%p&a4n&a&b$q&b1p4n1p4U$q4U4d4n4d4e$q4e$IS4n$IS$I`$q$I`$Ib4n$Ib$Kh$q$Kh%#t4n%#t&/x$q&/x&Et4n&Et&FV$q&FV;'S4n;'S;:j8O;:j;=`)c<%l?&r$q?&r?Ah4n?Ah?BY$q?BY?Mn4n?MnO$qi$zXVP|W!O`Or$qrs%gsv$qwx'^x!^$q!^!_(o!_;'S$q;'S;=`)c<%lO$qa%nVVP!O`Ov%gwx&Tx!^%g!^!_&o!_;'S%g;'S;=`'W<%lO%gP&YTVPOv&Tw!^&T!_;'S&T;'S;=`&i<%lO&TP&lP;=`<%l&T`&tS!O`Ov&ox;'S&o;'S;=`'Q<%lO&o`'TP;=`<%l&oa'ZP;=`<%l%gX'eWVP|WOr'^rs&Tsv'^w!^'^!^!_'}!_;'S'^;'S;=`(i<%lO'^W(ST|WOr'}sv'}w;'S'};'S;=`(c<%lO'}W(fP;=`<%l'}X(lP;=`<%l'^h(vV|W!O`Or(ors&osv(owx'}x;'S(o;'S;=`)]<%lO(oh)`P;=`<%l(oi)fP;=`<%l$qo)t`VP|W!O`zUOX$qXY)iYZ)iZ]$q]^)i^p$qpq)iqr$qrs%gsv$qwx'^x!^$q!^!_(o!_;'S$q;'S;=`)c<%lO$qk+PV{YVP!O`Ov%gwx&Tx!^%g!^!_&o!_;'S%g;'S;=`'W<%lO%g~+iast,n![!]-r!c!}-r#R#S-r#T#o-r%W%o-r%p&a-r&b1p-r4U4d-r4e$IS-r$I`$Ib-r$Kh%#t-r&/x&Et-r&FV;'S-r;'S;:j/c?&r?Ah-r?BY?Mn-r~,qQ!Q![,w#l#m-V~,zQ!Q![,w!]!^-Q~-VOX~~-YR!Q![-c!c!i-c#T#Z-c~-fS!Q![-c!]!^-Q!c!i-c#T#Z-c~-ug}!O-r!O!P-r!Q![-r![!]-r!]!^/^!c!}-r#R#S-r#T#o-r$}%O-r%W%o-r%p&a-r&b1p-r1p4U-r4U4d-r4e$IS-r$I`$Ib-r$Je$Jg-r$Kh%#t-r&/x&Et-r&FV;'S-r;'S;:j/c?&r?Ah-r?BY?Mn-r~/cOW~~/fP;=`<%l-rk/rW}bVP|WOr'^rs&Tsv'^w!^'^!^!_'}!_;'S'^;'S;=`(i<%lO'^k0eZVP|W!O`Or$qrs%gsv$qwx'^x}$q}!O1W!O!^$q!^!_(o!_;'S$q;'S;=`)c<%lO$qk1aZVP|W!O`Or$qrs%gsv$qwx'^x!^$q!^!_(o!_!`$q!`!a2S!a;'S$q;'S;=`)c<%lO$qk2_X!PQVP|W!O`Or$qrs%gsv$qwx'^x!^$q!^!_(o!_;'S$q;'S;=`)c<%lO$qm3TZVP|W!O`Or$qrs%gsv$qwx'^x!^$q!^!_(o!_!`$q!`!a3v!a;'S$q;'S;=`)c<%lO$qm4RXdSVP|W!O`Or$qrs%gsv$qwx'^x!^$q!^!_(o!_;'S$q;'S;=`)c<%lO$qo4{!P`S^QVP|W!O`Or$qrs%gsv$qwx'^x}$q}!O4n!O!P4n!P!Q$q!Q![4n![!]4n!]!^$q!^!_(o!_!c$q!c!}4n!}#R$q#R#S4n#S#T$q#T#o4n#o$}$q$}%O4n%O%W$q%W%o4n%o%p$q%p&a4n&a&b$q&b1p4n1p4U4n4U4d4n4d4e$q4e$IS4n$IS$I`$q$I`$Ib4n$Ib$Je$q$Je$Jg4n$Jg$Kh$q$Kh%#t4n%#t&/x$q&/x&Et4n&Et&FV$q&FV;'S4n;'S;:j8O;:j;=`)c<%l?&r$q?&r?Ah4n?Ah?BY$q?BY?Mn4n?MnO$qo8RP;=`<%l4ni8]Y|W!O`Oq(oqr8{rs&osv(owx'}x!a(o!a!b!#U!b;'S(o;'S;=`)]<%lO(oi9S_|W!O`Or(ors&osv(owx'}x}(o}!O:R!O!f(o!f!g;e!g!}(o!}#ODh#O#W(o#W#XLp#X;'S(o;'S;=`)]<%lO(oi:YX|W!O`Or(ors&osv(owx'}x}(o}!O:u!O;'S(o;'S;=`)]<%lO(oi;OV!QP|W!O`Or(ors&osv(owx'}x;'S(o;'S;=`)]<%lO(oi;lX|W!O`Or(ors&osv(owx'}x!q(o!q!r<X!r;'S(o;'S;=`)]<%lO(oi<`X|W!O`Or(ors&osv(owx'}x!e(o!e!f<{!f;'S(o;'S;=`)]<%lO(oi=SX|W!O`Or(ors&osv(owx'}x!v(o!v!w=o!w;'S(o;'S;=`)]<%lO(oi=vX|W!O`Or(ors&osv(owx'}x!{(o!{!|>c!|;'S(o;'S;=`)]<%lO(oi>jX|W!O`Or(ors&osv(owx'}x!r(o!r!s?V!s;'S(o;'S;=`)]<%lO(oi?^X|W!O`Or(ors&osv(owx'}x!g(o!g!h?y!h;'S(o;'S;=`)]<%lO(oi@QY|W!O`Or?yrs@psv?yvwA[wxBdx!`?y!`!aCr!a;'S?y;'S;=`Db<%lO?ya@uV!O`Ov@pvxA[x!`@p!`!aAy!a;'S@p;'S;=`B^<%lO@pPA_TO!`A[!`!aAn!a;'SA[;'S;=`As<%lOA[PAsOiPPAvP;=`<%lA[aBQSiP!O`Ov&ox;'S&o;'S;=`'Q<%lO&oaBaP;=`<%l@pXBiX|WOrBdrsA[svBdvwA[w!`Bd!`!aCU!a;'SBd;'S;=`Cl<%lOBdXC]TiP|WOr'}sv'}w;'S'};'S;=`(c<%lO'}XCoP;=`<%lBdiC{ViP|W!O`Or(ors&osv(owx'}x;'S(o;'S;=`)]<%lO(oiDeP;=`<%l?yiDoZ|W!O`Or(ors&osv(owx'}x!e(o!e!fEb!f#V(o#V#WIr#W;'S(o;'S;=`)]<%lO(oiEiX|W!O`Or(ors&osv(owx'}x!f(o!f!gFU!g;'S(o;'S;=`)]<%lO(oiF]X|W!O`Or(ors&osv(owx'}x!c(o!c!dFx!d;'S(o;'S;=`)]<%lO(oiGPX|W!O`Or(ors&osv(owx'}x!v(o!v!wGl!w;'S(o;'S;=`)]<%lO(oiGsX|W!O`Or(ors&osv(owx'}x!c(o!c!dH`!d;'S(o;'S;=`)]<%lO(oiHgX|W!O`Or(ors&osv(owx'}x!}(o!}#OIS#O;'S(o;'S;=`)]<%lO(oiI]V|W!O`yPOr(ors&osv(owx'}x;'S(o;'S;=`)]<%lO(oiIyX|W!O`Or(ors&osv(owx'}x#W(o#W#XJf#X;'S(o;'S;=`)]<%lO(oiJmX|W!O`Or(ors&osv(owx'}x#T(o#T#UKY#U;'S(o;'S;=`)]<%lO(oiKaX|W!O`Or(ors&osv(owx'}x#h(o#h#iK|#i;'S(o;'S;=`)]<%lO(oiLTX|W!O`Or(ors&osv(owx'}x#T(o#T#UH`#U;'S(o;'S;=`)]<%lO(oiLwX|W!O`Or(ors&osv(owx'}x#c(o#c#dMd#d;'S(o;'S;=`)]<%lO(oiMkX|W!O`Or(ors&osv(owx'}x#V(o#V#WNW#W;'S(o;'S;=`)]<%lO(oiN_X|W!O`Or(ors&osv(owx'}x#h(o#h#iNz#i;'S(o;'S;=`)]<%lO(oi! RX|W!O`Or(ors&osv(owx'}x#m(o#m#n! n#n;'S(o;'S;=`)]<%lO(oi! uX|W!O`Or(ors&osv(owx'}x#d(o#d#e!!b#e;'S(o;'S;=`)]<%lO(oi!!iX|W!O`Or(ors&osv(owx'}x#X(o#X#Y?y#Y;'S(o;'S;=`)]<%lO(oi!#_V!SP|W!O`Or(ors&osv(owx'}x;'S(o;'S;=`)]<%lO(ok!$PXaQVP|W!O`Or$qrs%gsv$qwx'^x!^$q!^!_(o!_;'S$q;'S;=`)c<%lO$qo!$wX[UVP|W!O`Or$qrs%gsv$qwx'^x!^$q!^!_(o!_;'S$q;'S;=`)c<%lO$qk!%mZVP|W!O`Or$qrs%gsv$qwx'^x!^$q!^!_(o!_!`$q!`!a!&`!a;'S$q;'S;=`)c<%lO$qk!&kX!RQVP|W!O`Or$qrs%gsv$qwx'^x!^$q!^!_(o!_;'S$q;'S;=`)c<%lO$qk!'aZVP|W!O`Or$qrs%gsv$qwx'^x!^$q!^!_(o!_#P$q#P#Q!(S#Q;'S$q;'S;=`)c<%lO$qk!(]ZVP|W!O`Or$qrs%gsv$qwx'^x!^$q!^!_(o!_!`$q!`!a!)O!a;'S$q;'S;=`)c<%lO$qk!)ZXxQVP|W!O`Or$qrs%gsv$qwx'^x!^$q!^!_(o!_;'S$q;'S;=`)c<%lO$q",
28516
  tokenizers: [startTag, commentContent, piContent, cdataContent, 0, 1, 2, 3],
29257
  tokenizers: [startTag, commentContent, piContent, cdataContent, 0, 1, 2, 3, 4],
28517
  topRules: {"Document":[0,6]},
29258
  topRules: {"Document":[0,6]},
28518
  tokenPrec: 0
29259
  tokenPrec: 0
Línea 28519... Línea 29260...
28519
});
29260
});