<commit_before>'use strict';

[{
  zoneRegex: {
    en: /^Eden's Verse: Iconoclasm \(Savage\)$/,
    ko: /^희망의 낙원 에덴: 공명편\(영웅\) \(3\)$/,
  },
  timelineFile: 'e7s.txt',
  timelineTriggers: [
    {
      id: 'E7S Tornado Spots',
      regex: /Words Of Fervor/,
      beforeSeconds: 10,
      infoText: {
        en: 'Dark NW, Light NE, one pair S',
        cn: '黑左前 白右前 两人后',
        de: 'Dunkel NW, Licht NO, ein Paar S',
      },
    },
  ],
  triggers: [
    {
      id: 'E7S Empty Wave',
      regex: Regexes.startsUsing({ source: 'The Idol Of Darkness', id: '4C8A', capture: false }),
      regexDe: Regexes.startsUsing({ source: 'Götzenbild Der Dunkelheit', id: '4C8A', capture: false }),
      regexFr: Regexes.startsUsing({ source: 'Idole Des Ténèbres', id: '4C8A', capture: false }),
      regexJa: Regexes.startsUsing({ source: 'ダークアイドル', id: '4C8A', capture: false }),
      condition: function(data) {
        return data.role == 'healer' || data.role == 'tank' || data.CanAddle();
      },
      response: Responses.aoe(),
    },
    {
      id: 'E7S Unshadowed Stake',
      regex: Regexes.tether({ source: 'The Idol Of Darkness', id: '0025' }),
      regexDe: Regexes.tether({ source: 'Götzenbild Der Dunkelheit', id: '0025' }),
      regexFr: Regexes.tether({ source: 'Idole Des Ténèbres', id: '0025' }),
      regexJa: Regexes.tether({ source: 'ダークアイドル', id: '0025' }),
      condition: function(data) {
        return data.role == 'tank' || data.role == 'healer';
      },
      response: Responses.tankBuster(),
    },
    {
      id: 'E7S Betwixt Worlds',
      regex: Regexes.startsUsing({ source: 'The Idol Of Darkness', id: '4CFD', capture: false }),
      regexDe: Regexes.startsUsing({ source: 'Götzenbild Der Dunkelheit', id: '4CFD', capture: false }),
      regexFr: Regexes.startsUsing({ source: 'Idole Des Ténèbres', id: '4CFD', capture: false }),
      regexJa: Regexes.startsUsing({ source: 'ダークアイドル', id: '4CFD', capture: false }),
      run: function(data) {
        data.phase = 'betwixtWorlds';
      },
    },
    {
      id: 'E7S Betwixt Worlds Tether',
      regex: Regexes.tether({ source: 'The Idol Of Darkness', id: '0011' }),
      regexDe: Regexes.tether({ source: 'Götzenbild Der Dunkelheit', id: '0011' }),
      regexFr: Regexes.tether({ source: 'Idole Des Ténèbres', id: '0011' }),
      regexJa: Regexes.tether({ source: 'ダークアイドル', id: '0011' }),
      condition: function(data, matches) {
        return data.phase == 'betwixtWorlds' && data.me == matches.target;
      },
      preRun: function(data, matches) {
        data.betwixtWorldsTethers = data.betwixtWorldsTethers || [];
        data.betwixtWorldsTethers.push(matches.target);
      },
      infoText: {
        en: 'Tether on YOU',
        de: 'Verbindung auf DIR',
        fr: 'Lien sur VOUS',
        ko: '선 대상자',
        cn: '连线点名',
      },
    },
    {
      id: 'E7S Betwixt Worlds Stack',
      regex: Regexes.headMarker({ id: '0064' }),
      condition: function(data) {
        return data.phase == 'betwixtWorlds';
      },
      preRun: function(data, matches) {
        data.betwixtWorldsStack = data.betwixtWorldsStack || [];
        data.betwixtWorldsStack.push(matches.target);
      },
      alertText: function(data, matches) {
        if (data.betwixtWorldsTethers.indexOf(data.me))
          return;
        if (data.me == matches.target) {
          return {
            en: 'Stack on YOU',
            de: 'Sammeln auf DIR',
            ja: '自分にシェア',
            fr: 'Package sur VOUS',
            ko: '나에게 모이기',
            cn: '分摊点名',
          };
        }
        if (data.betwixtWorldsStack.length == 1)
          return;
        let names = data.betwixtWorldsStack.map((x) => data.ShortName(x)).sort();
        return {
          en: 'Stack (' + names.join(', ') + ')',
          de: 'Sammeln (' + names.join(', ') + ')',
          ko: '모이기 (' + names.join(', ') + ')',
          cn: '分摊 (' + names.join(', ') + ')',
        };
      },
    },
    {
      id: 'E7S Left With Thee',
      regex: Regexes.gainsEffect({ effect: 'Left With Thee' }),
      regexDe: Regexes.gainsEffect({ effect: 'Deportation: Links' }),
      regexFr: Regexes.gainsEffect({ effect: 'Translation Gauche' }),
      regexJa: Regexes.gainsEffect({ effect: '強制転移：左' }),
      condition: Conditions.targetIsYou(),
      infoText: {
        en: 'Teleporting Left',
        de: 'Teleportation Links',
        fr: 'Téléportation à gauche',
        ko: '왼쪽으로 순간이동',
        cn: '向左传送',
      },
    },
    {
      id: 'E7S Left With Right',
      regex: Regexes.gainsEffect({ effect: 'Right With Thee' }),
      regexDe: Regexes.gainsEffect({ effect: 'Deportation: Rechts' }),
      regexFr: Regexes.gainsEffect({ effect: 'Translation Droite' }),
      regexJa: Regexes.gainsEffect({ effect: '強制転移：右' }),
      condition: Conditions.targetIsYou(),
      infoText: {
        en: 'Teleporting Right',
        de: 'Teleportation Rechts',
        fr: 'Téléportation à droite',
        ko: '오른쪽으로 순간이동',
        cn: '向右传送',
      },
    },
    {
      id: 'E7S Forward With Thee',
      regex: Regexes.gainsEffect({ effect: 'Forward With Thee' }),
      regexDe: Regexes.gainsEffect({ effect: 'Deportation: Vorne' }),
      regexFr: Regexes.gainsEffect({ effect: 'Translation Avant' }),
      regexJa: Regexes.gainsEffect({ effect: '強制転移：前' }),
      condition: Conditions.targetIsYou(),
      infoText: {
        en: 'Teleporting Forward',
        de: 'Teleportation Vorwärts',
        fr: 'Téléportation devant',
        ko: '앞으로 순간이동',
        cn: '向前传送',
      },
    },
    {
      id: 'E7S Back With Thee',
      regex: Regexes.gainsEffect({ effect: 'Back With Thee' }),
      regexDe: Regexes.gainsEffect({ effect: 'Deportation: Hinten' }),
      regexFr: Regexes.gainsEffect({ effect: 'Translation Arrière' }),
      regexJa: Regexes.gainsEffect({ effect: '強制転移：後' }),
      condition: Conditions.targetIsYou(),
      infoText: {
        en: 'Teleporting Back',
        de: 'Teleportation Rückwärts',
        fr: 'Téléportation derrière',
        ko: '뒤로 순간이동',
        cn: '向后传送',
      },
    },
    {
      id: 'E7S False Midnight',
      regex: Regexes.startsUsing({ source: 'The Idol Of Darkness', id: '4C99', capture: false }),
      regexDe: Regexes.startsUsing({ source: 'Götzenbild Der Dunkelheit', id: '4C99', capture: false }),
      regexFr: Regexes.startsUsing({ source: 'Idole Des Ténèbres', id: '4C99', capture: false }),
      regexJa: Regexes.startsUsing({ source: 'ダークアイドル', id: '4C99', capture: false }),
      run: function(data) {
        data.phase = 'falseMidnight';
      },
    },
    {
      id: 'E7S Silver Shot',
      regex: Regexes.headMarker({ id: '0065' }),
      condition: function(data, matches) {
        return data.phase == 'falseMidnight' && data.me == matches.target;
      },
      preRun: function(data, matches) {
        data.falseMidnightSpread = data.falseMidnightSpread || [];
        data.falseMidnightSpread.push(matches.target);
      },
      response: Responses.spread(),
    },
    {
      id: 'E7S Silver Sledge',
      regex: Regexes.headMarker({ id: '0064' }),
      condition: function(data) {
        return data.phase == 'falseMidnight';
      },
      alertText: function(data, matches) {
        if (data.falseMidnightSpread.indexOf(data.me))
          return;
        if (data.me == matches.target) {
          return {
            en: 'Stack on YOU',
            de: 'Sammeln auf DIR',
            ja: '自分にシェア',
            fr: 'Package sur VOUS',
            ko: '나에게 모이기',
            cn: '分摊点名',
          };
        }
        return {
          en: 'Stack on ' + data.ShortName(target),
          de: 'Auf ' + data.ShortName(target) + ' sammeln',
          fr: 'Package sur ' + data.ShortName(target),
          ja: data.ShortName(target) + 'にスタック',
          cn: '靠近 ' + data.ShortName(target) + '集合',
          ko: '쉐어징 → ' + data.ShortName(target),
        };
      },
    },
    {
      id: 'E7S Adds',
      regex: Regexes.addedCombatant({ name: 'Blasphemy', capture: false }),
      regexDe: Regexes.addedCombatant({ name: 'Blasphemie', capture: false }),
      regexFr: Regexes.addedCombatant({ name: 'Vol D\'idolâtries Impardonnables', capture: false }),
      regexJa: Regexes.addedCombatant({ name: 'ブラスヒーム', capture: false }),
      suppressSeconds: 1,
      run: function(data) {
        data.phase = 'adds';
      },
    },
    {
      id: 'E7S Advent Of Light',
      regex: Regexes.startsUsing({ source: 'Idolatry', id: '4C6E' }),
      regexDe: Regexes.startsUsing({ source: 'Idolatrie', id: '4C6E' }),
      regexFr: Regexes.startsUsing({ source: 'Vol D\'Idolâtries Impardonnables', id: '4C6E' }),
      regexJa: Regexes.startsUsing({ source: 'アイドラトリー', id: '4C6E' }),
      condition: (data) => data.CanSilence(),
      suppressSeconds: 1,
      response: Responses.interrupt('alarm'),
    },
    {
      id: 'E7S Insatiable Light Stack',
      regex: Regexes.headMarker({ id: '0064' }),<commit_msg>raidboss: Fix E7S Betwixt Worlds Tether Condition (#1166)<commit_after>'use strict';

[{
  zoneRegex: {
    en: /^Eden's Verse: Iconoclasm \(Savage\)$/,
    ko: /^희망의 낙원 에덴: 공명편\(영웅\) \(3\)$/,
  },
  timelineFile: 'e7s.txt',
  timelineTriggers: [
    {
      id: 'E7S Tornado Spots',
      regex: /Words Of Fervor/,
      beforeSeconds: 10,
      infoText: {
        en: 'Dark NW, Light NE, one pair S',
        cn: '黑左前 白右前 两人后',
        de: 'Dunkel NW, Licht NO, ein Paar S',
      },
    },
  ],
  triggers: [
    {
      id: 'E7S Empty Wave',
      regex: Regexes.startsUsing({ source: 'The Idol Of Darkness', id: '4C8A', capture: false }),
      regexDe: Regexes.startsUsing({ source: 'Götzenbild Der Dunkelheit', id: '4C8A', capture: false }),
      regexFr: Regexes.startsUsing({ source: 'Idole Des Ténèbres', id: '4C8A', capture: false }),
      regexJa: Regexes.startsUsing({ source: 'ダークアイドル', id: '4C8A', capture: false }),
      condition: function(data) {
        return data.role == 'healer' || data.role == 'tank' || data.CanAddle();
      },
      response: Responses.aoe(),
    },
    {
      id: 'E7S Unshadowed Stake',
      regex: Regexes.tether({ source: 'The Idol Of Darkness', id: '0025' }),
      regexDe: Regexes.tether({ source: 'Götzenbild Der Dunkelheit', id: '0025' }),
      regexFr: Regexes.tether({ source: 'Idole Des Ténèbres', id: '0025' }),
      regexJa: Regexes.tether({ source: 'ダークアイドル', id: '0025' }),
      condition: function(data) {
        return data.role == 'tank' || data.role == 'healer';
      },
      response: Responses.tankBuster(),
    },
    {
      id: 'E7S Betwixt Worlds',
      regex: Regexes.startsUsing({ source: 'The Idol Of Darkness', id: '4CFD', capture: false }),
      regexDe: Regexes.startsUsing({ source: 'Götzenbild Der Dunkelheit', id: '4CFD', capture: false }),
      regexFr: Regexes.startsUsing({ source: 'Idole Des Ténèbres', id: '4CFD', capture: false }),
      regexJa: Regexes.startsUsing({ source: 'ダークアイドル', id: '4CFD', capture: false }),
      run: function(data) {
        data.phase = 'betwixtWorlds';
      },
    },
    {
      id: 'E7S Betwixt Worlds Tether',
      regex: Regexes.tether({ source: 'The Idol Of Darkness', id: '0011' }),
      regexDe: Regexes.tether({ source: 'Götzenbild Der Dunkelheit', id: '0011' }),
      regexFr: Regexes.tether({ source: 'Idole Des Ténèbres', id: '0011' }),
      regexJa: Regexes.tether({ source: 'ダークアイドル', id: '0011' }),
      condition: function(data) {
        return data.phase == 'betwixtWorlds';
      },
      preRun: function(data, matches) {
        data.betwixtWorldsTethers = data.betwixtWorldsTethers || [];
        data.betwixtWorldsTethers.push(matches.target);
      },
      infoText: function(data, matches) {
        if (data.me == matches.target) {
          return {
            en: 'Tether on YOU',
            de: 'Verbindung auf DIR',
            fr: 'Lien sur VOUS',
            ko: '선 대상자',
            cn: '连线点名',
          };
        }
      },
    },
    {
      id: 'E7S Betwixt Worlds Stack',
      regex: Regexes.headMarker({ id: '0064' }),
      condition: function(data) {
        return data.phase == 'betwixtWorlds';
      },
      preRun: function(data, matches) {
        data.betwixtWorldsStack = data.betwixtWorldsStack || [];
        data.betwixtWorldsStack.push(matches.target);
      },
      alertText: function(data, matches) {
        if (data.betwixtWorldsTethers.indexOf(data.me))
          return;
        if (data.me == matches.target) {
          return {
            en: 'Stack on YOU',
            de: 'Sammeln auf DIR',
            ja: '自分にシェア',
            fr: 'Package sur VOUS',
            ko: '나에게 모이기',
            cn: '分摊点名',
          };
        }
        if (data.betwixtWorldsStack.length == 1)
          return;
        let names = data.betwixtWorldsStack.map((x) => data.ShortName(x)).sort();
        return {
          en: 'Stack (' + names.join(', ') + ')',
          de: 'Sammeln (' + names.join(', ') + ')',
          ko: '모이기 (' + names.join(', ') + ')',
          cn: '分摊 (' + names.join(', ') + ')',
        };
      },
    },
    {
      id: 'E7S Left With Thee',
      regex: Regexes.gainsEffect({ effect: 'Left With Thee' }),
      regexDe: Regexes.gainsEffect({ effect: 'Deportation: Links' }),
      regexFr: Regexes.gainsEffect({ effect: 'Translation Gauche' }),
      regexJa: Regexes.gainsEffect({ effect: '強制転移：左' }),
      condition: Conditions.targetIsYou(),
      infoText: {
        en: 'Teleporting Left',
        de: 'Teleportation Links',
        fr: 'Téléportation à gauche',
        ko: '왼쪽으로 순간이동',
        cn: '向左传送',
      },
    },
    {
      id: 'E7S Left With Right',
      regex: Regexes.gainsEffect({ effect: 'Right With Thee' }),
      regexDe: Regexes.gainsEffect({ effect: 'Deportation: Rechts' }),
      regexFr: Regexes.gainsEffect({ effect: 'Translation Droite' }),
      regexJa: Regexes.gainsEffect({ effect: '強制転移：右' }),
      condition: Conditions.targetIsYou(),
      infoText: {
        en: 'Teleporting Right',
        de: 'Teleportation Rechts',
        fr: 'Téléportation à droite',
        ko: '오른쪽으로 순간이동',
        cn: '向右传送',
      },
    },
    {
      id: 'E7S Forward With Thee',
      regex: Regexes.gainsEffect({ effect: 'Forward With Thee' }),
      regexDe: Regexes.gainsEffect({ effect: 'Deportation: Vorne' }),
      regexFr: Regexes.gainsEffect({ effect: 'Translation Avant' }),
      regexJa: Regexes.gainsEffect({ effect: '強制転移：前' }),
      condition: Conditions.targetIsYou(),
      infoText: {
        en: 'Teleporting Forward',
        de: 'Teleportation Vorwärts',
        fr: 'Téléportation devant',
        ko: '앞으로 순간이동',
        cn: '向前传送',
      },
    },
    {
      id: 'E7S Back With Thee',
      regex: Regexes.gainsEffect({ effect: 'Back With Thee' }),
      regexDe: Regexes.gainsEffect({ effect: 'Deportation: Hinten' }),
      regexFr: Regexes.gainsEffect({ effect: 'Translation Arrière' }),
      regexJa: Regexes.gainsEffect({ effect: '強制転移：後' }),
      condition: Conditions.targetIsYou(),
      infoText: {
        en: 'Teleporting Back',
        de: 'Teleportation Rückwärts',
        fr: 'Téléportation derrière',
        ko: '뒤로 순간이동',
        cn: '向后传送',
      },
    },
    {
      id: 'E7S False Midnight',
      regex: Regexes.startsUsing({ source: 'The Idol Of Darkness', id: '4C99', capture: false }),
      regexDe: Regexes.startsUsing({ source: 'Götzenbild Der Dunkelheit', id: '4C99', capture: false }),
      regexFr: Regexes.startsUsing({ source: 'Idole Des Ténèbres', id: '4C99', capture: false }),
      regexJa: Regexes.startsUsing({ source: 'ダークアイドル', id: '4C99', capture: false }),
      run: function(data) {
        data.phase = 'falseMidnight';
      },
    },
    {
      id: 'E7S Silver Shot',
      regex: Regexes.headMarker({ id: '0065' }),
      condition: function(data) {
        return data.phase == 'falseMidnight';
      },
      preRun: function(data, matches) {
        data.falseMidnightSpread = data.falseMidnightSpread || [];
        data.falseMidnightSpread.push(matches.target);
      },
      infoText: function(data, matches) {
        if (data.me == matches.target) {
          return {
            en: 'Spread',
            de: 'Verteilen',
            ja: '散開',
            fr: 'Dispersez-vous',
            ko: '산개',
            cn: '分散',
          };
        }
      },
    },
    {
      id: 'E7S Silver Sledge',
      regex: Regexes.headMarker({ id: '0064' }),
      condition: function(data) {
        return data.phase == 'falseMidnight';
      },
      alertText: function(data, matches) {
        if (data.falseMidnightSpread.indexOf(data.me))
          return;
        if (data.me == matches.target) {
          return {
            en: 'Stack on YOU',
            de: 'Sammeln auf DIR',
            ja: '自分にシェア',
            fr: 'Package sur VOUS',
            ko: '나에게 모이기',
            cn: '分摊点名',
          };
        }
        return {
          en: 'Stack on ' + data.ShortName(matches.target),
          de: 'Auf ' + data.ShortName(matches.target) + ' sammeln',
          fr: 'Package sur ' + data.ShortName(matches.target),
          ja: data.ShortName(matches.target) + 'にスタック',
          cn: '靠近 ' + data.ShortName(matches.target) + '集合',
          ko: '쉐어징 → ' + data.ShortName(matches.target),
        };
      },
    },
    {
      id: 'E7S Adds',
      regex: Regexes.addedCombatant({ name: 'Blasphemy', capture: false }),
      regexDe: Regexes.addedCombatant({ name: 'Blasphemie', capture: false }),
      regexFr: Regexes.addedCombatant({ name: 'Vol D\'idolâtries Impardonnables', capture: false }),
      regexJa: Regexes.addedCombatant({ name: 'ブラスヒーム', capture: false }),
      suppressSeconds: 1,
      run: function(data) {
        data.phase = 'adds';
      },
    },
    {
      id: 'E7S Advent Of Light',
      regex: Regexes.startsUsing({ source: 'Idolatry', id: '4C6E' }),
      regexDe: Regexes.startsUsing({ source: 'Idolatrie', id: '4C6E' }),
      regexFr: Regexes.startsUsing({ source: 'Vol D\'Idolâtries Impardonnables', id: '4C6E' }),
      regexJa: Regexes.startsUsing({ source: 'アイドラトリー', id: '4C6E' }),
      condition: (data) => data.CanSilence(),
      suppressSeconds: 1,
      response: Responses.interrupt('alarm'),
    },
    {
      id: 'E7S Insatiable Light Stack',
      regex: Regexes.headMarker({ id: '0064' }),
{'fraction_non_alphanumeric': 0.1581810269799826, 'fraction_numerical': 0.011477371627502175, 'mean_word_length': 2.3336355394378967, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 7, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1063545', 'n_tokens_mistral': 6760, 'n_tokens_neox': 6825, 'n_words': 1464}