nadesiko3 3.6.26 → 3.6.27

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/core/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nadesiko3core",
3
- "version": "3.6.26",
3
+ "version": "3.6.27",
4
4
  "description": "Japanese Programming Language Nadesiko v3 core",
5
5
  "main": "index.mjs",
6
6
  "type": "module",
@@ -31,6 +31,7 @@ export type NodeType = 'nop'
31
31
  | 'break'
32
32
  | 'def_test'
33
33
  | 'let'
34
+ | 'let_prop' // #1793
34
35
  | 'let_array'
35
36
  | 'json_array'
36
37
  | 'json_obj'
@@ -50,6 +51,7 @@ export type NodeType = 'nop'
50
51
  | 'def_local_var'
51
52
  | 'def_local_varlist'
52
53
  | 'ref_array' // 配列参照
54
+ | 'ref_prop' // #1793 (プロパティ参照)
53
55
  | 'require'
54
56
  | 'performance_monitor'
55
57
  | 'speed_mode'
@@ -464,6 +464,12 @@ export class NakoGen {
464
464
  case 'let':
465
465
  code += this.convLet(node);
466
466
  break;
467
+ case 'let_prop':
468
+ code += this.convLetProp(node);
469
+ break;
470
+ case 'ref_prop':
471
+ code += this.convRefProp(node);
472
+ break;
467
473
  case 'inc':
468
474
  code += this.convInc(node);
469
475
  break;
@@ -977,6 +983,17 @@ export class NakoGen {
977
983
  }
978
984
  return code;
979
985
  }
986
+ convRefProp(node) {
987
+ const name = this._convGen(node.name, true);
988
+ const list = node.index;
989
+ if (!list || list.length <= 0) {
990
+ throw NakoSyntaxError.fromNode('プロパティがありません。', node);
991
+ }
992
+ const prop = list[0].value;
993
+ const code = `( (function(){ if (${name}.__getProp) { return ${name}.__getProp('${prop}', __self) } ` +
994
+ `else { return ${name}['${prop}'] } })() )`;
995
+ return code;
996
+ }
980
997
  convLetArray(node) {
981
998
  const id = this.loopId++;
982
999
  const valueNode = node.blocks[0];
@@ -1746,6 +1763,49 @@ export class NakoGen {
1746
1763
  }
1747
1764
  return ';' + this.convLineno(node, false) + code + '\n';
1748
1765
  }
1766
+ // プロパティへの代入式 (#1793)
1767
+ convLetProp(node) {
1768
+ if (!node.index || node.index.length == 0) {
1769
+ throw NakoSyntaxError.fromNode('代入する先のプロパティ名がありません。', node);
1770
+ }
1771
+ if (!node.blocks || node.blocks.length == 0) {
1772
+ throw NakoSyntaxError.fromNode('代入する値がありません。', node);
1773
+ }
1774
+ const astProp = node.index[0];
1775
+ const astValue = node.blocks[0];
1776
+ let prop = '';
1777
+ if (astProp) {
1778
+ prop = astProp.value;
1779
+ }
1780
+ else {
1781
+ throw NakoSyntaxError.fromNode('代入する先のプロパティ名がありません。', node);
1782
+ }
1783
+ let value = null;
1784
+ // 値のプログラムを生成
1785
+ if (astValue) {
1786
+ value = this._convGen(astValue, true);
1787
+ }
1788
+ else {
1789
+ throw NakoSyntaxError.fromNode('代入する値がありません。', node);
1790
+ }
1791
+ // 変数名
1792
+ const name = node.name;
1793
+ const res = this.findVar(name, value);
1794
+ let code = '/*[convLetProp]*/';
1795
+ // 変数が存在しないとき
1796
+ if (res === null) {
1797
+ throw NakoSyntaxError.fromNode('変数が見当たりません。', node);
1798
+ }
1799
+ // ネームスペースを削除
1800
+ if (prop.indexOf('__') >= 0) {
1801
+ prop = prop.split('__')[1];
1802
+ }
1803
+ // プロパティへの代入式を作る
1804
+ const propVar = `${res.js}['${prop}']`;
1805
+ code += `if (typeof ${res.js}.__setProp === 'function') { ${res.js}.__setProp('${prop}', ${value}, __self); } `;
1806
+ code += `else { ${propVar} = ${value} };`;
1807
+ return ';' + this.convLineno(node, false) + code + '\n';
1808
+ }
1749
1809
  convDefLocalVar(node) {
1750
1810
  const astValue = node.blocks[0];
1751
1811
  let value = '0';
@@ -540,6 +540,12 @@ export class NakoGen {
540
540
  case 'let':
541
541
  code += this.convLet(node as AstLet)
542
542
  break
543
+ case 'let_prop':
544
+ code += this.convLetProp(node as AstLet)
545
+ break
546
+ case 'ref_prop':
547
+ code += this.convRefProp(node as AstLet)
548
+ break
543
549
  case 'inc':
544
550
  code += this.convInc(node as AstBlocks)
545
551
  break
@@ -1053,6 +1059,19 @@ export class NakoGen {
1053
1059
  return code
1054
1060
  }
1055
1061
 
1062
+ convRefProp (node: Ast): string {
1063
+ const name = this._convGen(node.name as Ast, true)
1064
+ const list: Ast[] | undefined = node.index
1065
+ if (!list || list.length <= 0) {
1066
+ throw NakoSyntaxError.fromNode('プロパティがありません。', node)
1067
+ }
1068
+ const prop = (list[0] as AstStrValue).value
1069
+ const code =
1070
+ `( (function(){ if (${name}.__getProp) { return ${name}.__getProp('${prop}', __self) } ` +
1071
+ `else { return ${name}['${prop}'] } })() )`
1072
+ return code
1073
+ }
1074
+
1056
1075
  convLetArray (node: AstLetArray): string {
1057
1076
  const id = this.loopId++
1058
1077
  const valueNode: Ast = node.blocks[0]
@@ -1811,6 +1830,45 @@ export class NakoGen {
1811
1830
  return ';' + this.convLineno(node, false) + code + '\n'
1812
1831
  }
1813
1832
 
1833
+ // プロパティへの代入式 (#1793)
1834
+ convLetProp(node: AstLet): string {
1835
+ if (!node.index || node.index.length == 0) { throw NakoSyntaxError.fromNode('代入する先のプロパティ名がありません。', node) }
1836
+ if (!node.blocks || node.blocks.length == 0) { throw NakoSyntaxError.fromNode('代入する値がありません。', node) }
1837
+ const astProp = node.index[0]
1838
+ const astValue = node.blocks[0]
1839
+ let prop = ''
1840
+ if (astProp) {
1841
+ prop = (astProp as AstStrValue).value
1842
+ } else {
1843
+ throw NakoSyntaxError.fromNode('代入する先のプロパティ名がありません。', node)
1844
+ }
1845
+ let value = null
1846
+ // 値のプログラムを生成
1847
+ if (astValue) {
1848
+ value = this._convGen(astValue, true)
1849
+ } else {
1850
+ throw NakoSyntaxError.fromNode('代入する値がありません。', node)
1851
+ }
1852
+
1853
+ // 変数名
1854
+ const name: string = node.name
1855
+ const res = this.findVar(name, value)
1856
+ let code = '/*[convLetProp]*/'
1857
+ // 変数が存在しないとき
1858
+ if (res === null) {
1859
+ throw NakoSyntaxError.fromNode('変数が見当たりません。', node)
1860
+ }
1861
+ // ネームスペースを削除
1862
+ if (prop.indexOf('__') >= 0) {
1863
+ prop = prop.split('__')[1]
1864
+ }
1865
+ // プロパティへの代入式を作る
1866
+ const propVar = `${res.js}['${prop}']`
1867
+ code += `if (typeof ${res.js}.__setProp === 'function') { ${res.js}.__setProp('${prop}', ${value}, __self); } `
1868
+ code += `else { ${propVar} = ${value} };`
1869
+ return ';' + this.convLineno(node, false) + code + '\n'
1870
+ }
1871
+
1814
1872
  convDefLocalVar(node: AstDefVar): string {
1815
1873
  const astValue = node.blocks[0]
1816
1874
  let value = '0'
@@ -81,6 +81,7 @@ export const rules = [
81
81
  { name: ')', pattern: /^\)/, readJosi: true },
82
82
  { name: '|', pattern: /^\|/ },
83
83
  { name: '??', pattern: /^\?\?/ }, // 「表示」のエイリアス #1745
84
+ { name: '$', pattern: /^\$/ }, // #1793 プロパティアクセス
84
85
  { name: 'string', pattern: /^🌿/, cbParser: src => cbString('🌿', '🌿', src) },
85
86
  { name: 'string_ex', pattern: /^🌴/, cbParser: src => cbString('🌴', '🌴', src) },
86
87
  { name: 'string_ex', pattern: /^「/, cbParser: src => cbString('「', '」', src) },
@@ -101,6 +101,7 @@ export const rules: NakoLexRule[] = [
101
101
  { name: ')', pattern: /^\)/, readJosi: true },
102
102
  { name: '|', pattern: /^\|/ },
103
103
  { name: '??', pattern: /^\?\?/ }, // 「表示」のエイリアス #1745
104
+ { name: '$', pattern: /^\$/ }, // #1793 プロパティアクセス
104
105
  { name: 'string', pattern: /^🌿/, cbParser: src => cbString('🌿', '🌿', src) },
105
106
  { name: 'string_ex', pattern: /^🌴/, cbParser: src => cbString('🌴', '🌴', src) },
106
107
  { name: 'string_ex', pattern: /^「/, cbParser: src => cbString('「', '」', src) },
@@ -1789,6 +1789,39 @@ export class NakoParser extends NakoParserBase {
1789
1789
  throw NakoSyntaxError.fromNode(`${this.nodeToStr(word, { depth: 1 }, false)}への代入文で計算式に以下の書き間違いがあります。\n${err.message}`, map);
1790
1790
  }
1791
1791
  }
1792
+ // プロパティ代入文
1793
+ if (this.check2(['word', '$', 'word', 'eq'])) {
1794
+ const word = this.peek();
1795
+ let threw = false;
1796
+ try {
1797
+ if (this.accept(['word', '$', 'word', 'eq', this.yCalc])) {
1798
+ const nameToken = this.getVarName(this.y[0]);
1799
+ const propToken = this.getVarName(this.y[2]);
1800
+ const valueToken = this.y[4];
1801
+ return {
1802
+ type: 'let_prop',
1803
+ name: nameToken.value,
1804
+ index: [propToken],
1805
+ blocks: [valueToken],
1806
+ josi: '',
1807
+ ...map,
1808
+ end: this.peekSourceMap()
1809
+ };
1810
+ }
1811
+ else {
1812
+ threw = true;
1813
+ this.logger.debug(`${this.nodeToStr(word, { depth: 1 }, true)}への代入文で計算式に書き間違いがあります。`, word);
1814
+ throw NakoSyntaxError.fromNode(`${this.nodeToStr(word, { depth: 1 }, false)}への代入文で計算式に書き間違いがあります。`, map);
1815
+ }
1816
+ }
1817
+ catch (err) {
1818
+ if (threw) {
1819
+ throw err;
1820
+ }
1821
+ this.logger.debug(`${this.nodeToStr(word, { depth: 1 }, true)}への代入文で計算式に以下の書き間違いがあります。\n${err.message}`, word);
1822
+ throw NakoSyntaxError.fromNode(`${this.nodeToStr(word, { depth: 1 }, false)}への代入文で計算式に以下の書き間違いがあります。\n${err.message}`, map);
1823
+ }
1824
+ }
1792
1825
  // let_array ?
1793
1826
  if (this.check2(['word', '@'])) {
1794
1827
  const la = this.yLetArrayAt(map);
@@ -2581,6 +2614,19 @@ export class NakoParser extends NakoParserBase {
2581
2614
  }
2582
2615
  return ast;
2583
2616
  }
2617
+ // word$prop
2618
+ if (word.josi === '' && this.check2(['$', 'word'])) {
2619
+ this.get(); // skip '$'
2620
+ const prop = this.get();
2621
+ return {
2622
+ type: 'ref_prop', // プロパティ参照
2623
+ name: word,
2624
+ index: [prop],
2625
+ josi: prop.josi,
2626
+ ...map,
2627
+ end: this.peekSourceMap()
2628
+ };
2629
+ }
2584
2630
  return word; // Token to Ast
2585
2631
  }
2586
2632
  return null;
@@ -1556,6 +1556,37 @@ export class NakoParser extends NakoParserBase {
1556
1556
  throw NakoSyntaxError.fromNode(`${this.nodeToStr(word, { depth: 1 }, false)}への代入文で計算式に以下の書き間違いがあります。\n${err.message}`, map)
1557
1557
  }
1558
1558
  }
1559
+ // プロパティ代入文
1560
+ if (this.check2(['word', '$', 'word', 'eq'])) {
1561
+ const word = this.peek()
1562
+ let threw = false
1563
+ try {
1564
+ if (this.accept(['word', '$', 'word', 'eq', this.yCalc])) {
1565
+ const nameToken = this.getVarName(this.y[0])
1566
+ const propToken = this.getVarName(this.y[2])
1567
+ const valueToken = this.y[4]
1568
+ return {
1569
+ type: 'let_prop',
1570
+ name: (nameToken as AstStrValue).value,
1571
+ index: [propToken],
1572
+ blocks: [valueToken],
1573
+ josi: '',
1574
+ ...map,
1575
+ end: this.peekSourceMap()
1576
+ } as AstLet
1577
+ } else {
1578
+ threw = true
1579
+ this.logger.debug(`${this.nodeToStr(word, { depth: 1 }, true)}への代入文で計算式に書き間違いがあります。`, word)
1580
+ throw NakoSyntaxError.fromNode(`${this.nodeToStr(word, { depth: 1 }, false)}への代入文で計算式に書き間違いがあります。`, map)
1581
+ }
1582
+ } catch (err: any) {
1583
+ if (threw) {
1584
+ throw err
1585
+ }
1586
+ this.logger.debug(`${this.nodeToStr(word, { depth: 1 }, true)}への代入文で計算式に以下の書き間違いがあります。\n${err.message}`, word)
1587
+ throw NakoSyntaxError.fromNode(`${this.nodeToStr(word, { depth: 1 }, false)}への代入文で計算式に以下の書き間違いがあります。\n${err.message}`, map)
1588
+ }
1589
+ }
1559
1590
 
1560
1591
  // let_array ?
1561
1592
  if (this.check2(['word', '@'])) {
@@ -2291,6 +2322,20 @@ export class NakoParser extends NakoParserBase {
2291
2322
  if (ast.index && ast.index.length === 0) { throw NakoSyntaxError.fromNode(`配列『${word.value}』アクセスで指定ミス`, word) }
2292
2323
  return ast
2293
2324
  }
2325
+
2326
+ // word$prop
2327
+ if (word.josi === '' && this.check2(['$', 'word'])) {
2328
+ this.get() // skip '$'
2329
+ const prop = this.get() as Token
2330
+ return {
2331
+ type: 'ref_prop', // プロパティ参照
2332
+ name: word,
2333
+ index: [prop as Ast],
2334
+ josi: prop.josi,
2335
+ ...map,
2336
+ end: this.peekSourceMap()
2337
+ }
2338
+ }
2294
2339
  return word as any // Token to Ast
2295
2340
  }
2296
2341
  return null
@@ -118,10 +118,15 @@ export class NakoPrepare {
118
118
  // 読点は「,」に変換する (#877)
119
119
  [0x3001, ','], // 読点 --- JSON記法で「,」と「、」を区別したいので読点は変換しないことに。(#276)
120
120
  [0xFF0C, ','], // 読点 ',' 論文などで利用、ただし句点はドットと被るので変換しない (#735)
121
- [0x2716, '*'], // ×の絵文字 (#1183)
121
+ [0x2715, '*'], // ✕の絵文字 (#1781) @see https://ja.wikipedia.org/wiki/%C3%97#%E7%AC%A6%E5%8F%B7%E4%BD%8D%E7%BD%AE
122
+ [0x2716, '*'], // ✖の絵文字 (#1183)
123
+ [0x2717, '*'], // ✗の絵文字 (#1781)
124
+ [0x2718, '*'], // ✘の絵文字 (#1781)
125
+ [0x274C, '*'], // ❌の絵文字 (#1781) CROSS MARK
122
126
  [0x2795, '+'], // +の絵文字 (#1183)
123
127
  [0x2796, '-'], // -の絵文字 (#1183)
124
- [0x2797, '÷'] // ÷の絵文字 (#1183)
128
+ [0x2797, '÷'], // ÷の絵文字 (#1183)
129
+ [0x1F7F0, '='] //🟰の絵文字(#1781)
125
130
  ]);
126
131
  }
127
132
  // 一文字だけ変換
@@ -134,10 +134,15 @@ export class NakoPrepare {
134
134
  // 読点は「,」に変換する (#877)
135
135
  [0x3001, ','], // 読点 --- JSON記法で「,」と「、」を区別したいので読点は変換しないことに。(#276)
136
136
  [0xFF0C, ','], // 読点 ',' 論文などで利用、ただし句点はドットと被るので変換しない (#735)
137
- [0x2716, '*'], // ×の絵文字 (#1183)
137
+ [0x2715, '*'], // ✕の絵文字 (#1781) @see https://ja.wikipedia.org/wiki/%C3%97#%E7%AC%A6%E5%8F%B7%E4%BD%8D%E7%BD%AE
138
+ [0x2716, '*'], // ✖の絵文字 (#1183)
139
+ [0x2717, '*'], // ✗の絵文字 (#1781)
140
+ [0x2718, '*'], // ✘の絵文字 (#1781)
141
+ [0x274C, '*'], // ❌の絵文字 (#1781) CROSS MARK
138
142
  [0x2795, '+'], // +の絵文字 (#1183)
139
143
  [0x2796, '-'], // -の絵文字 (#1183)
140
- [0x2797, '÷'] // ÷の絵文字 (#1183)
144
+ [0x2797, '÷'], // ÷の絵文字 (#1183)
145
+ [0x1F7F0, '='] //🟰の絵文字(#1781)
141
146
  ])
142
147
  }
143
148
 
@@ -102,6 +102,7 @@ export type TokenType = '?'
102
102
  | '」' // error - エラーチェックのため
103
103
  | '』' // error - エラーチェックのため
104
104
  | '??' // 「表示」のエイリアス
105
+ | '$' // プロパティアクセス
105
106
 
106
107
  // トークン
107
108
  export interface Token {
@@ -372,4 +372,22 @@ describe('basic', async () => {
372
372
  await cmp('constructor=10;constructorを表示', '10')
373
373
  await cmp('super=10;superを表示', '10')
374
374
  })
375
+ it('オブジェクトを手軽に設定する-通常(#1793)', async () => {
376
+ await cmp('A={"幅":30};A$幅=50;A$幅を表示', '50')
377
+ await cmp('A={"高":30};A$高さ=50;A$高さを表示', '50') // 送り仮名の省略
378
+ })
379
+ it('オブジェクトを手軽に設定する-プロパティ関数(#1793)', async () => {
380
+ // プロパティの値を取得して10倍にして返す
381
+ await cmp(
382
+ '『 (function(prop, sys){ return this[prop] * 10 })』をJS実行してF_GETに代入。\n' +
383
+ '『 (function(prop, val, sys){ this[prop] = val })』をJS実行してF_SETに代入。\n' +
384
+ 'A={"幅": 3, "__setProp": F_SET, "__getProp": F_GET};\n' +
385
+ 'A$幅=5; A$幅を表示', '50')
386
+ // 値を10倍にして格納
387
+ await cmp(
388
+ '『 (function(prop, sys){ return this[prop] })』をJS実行してF_GETに代入。\n' +
389
+ '『 (function(prop, val, sys){ this[prop] = val*10 })』をJS実行してF_SETに代入。\n' +
390
+ 'A={"幅": 3, "__setProp": F_SET, "__getProp": F_GET};\n' +
391
+ 'A$幅=5; A$幅を表示', '50')
392
+ })
375
393
  })
@@ -237,4 +237,20 @@ describe('calc_test.js', async () => {
237
237
  await cmp('123456789012345678901234567890123456789n>>60nを表示', '107081695084215790682')
238
238
  })
239
239
 
240
+ it('似たフォント問題:なでしこ3で「✕」で掛け算させる #1781', async () => {
241
+ // multiple
242
+ await cmp('(2*3)を表示', '6')
243
+ await cmp('(2✕3)を表示', '6') // 0x2715
244
+ await cmp('(2✖3)を表示', '6') // 0x2716
245
+ await cmp('(2✗3)を表示', '6') // 0x2717
246
+ await cmp('(2✘3)を表示', '6') // 0x2718
247
+ await cmp('(2❌3)を表示', '6') // 0x274C
248
+ // others
249
+ await cmp('(2➕3)を表示', '5')
250
+ await cmp('(20➖3)を表示', '17')
251
+ await cmp('(21÷3)を表示', '7')
252
+ await cmp('(21➗3)を表示', '7')
253
+ await cmp('(20➖3)を表示', '17')
254
+ await cmp('A🟰3;Aを表示', '3')
255
+ })
240
256
  })
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nadesiko3",
3
- "version": "3.6.26",
3
+ "version": "3.6.27",
4
4
  "description": "Japanese Programming Language",
5
5
  "type": "module",
6
6
  "main": "src/index.mjs",
package/release/_hash.txt CHANGED
@@ -144,22 +144,22 @@ wnako3webworker.js:
144
144
  sha256(base64): zkHQ1vYOjoH4nffi+OulPeq/tql28XhdNuKpcaBCOKk=
145
145
  sha512(base64): cY0Mzrpoz/uEyY1n8MeJeWdDmm9vqI7dh28wEqJGtVRfYOJvDHiYDzzlfGndOWmzZmHUK6ZAE7YaUJ7zZxiZLw==
146
146
  version.js:
147
- md5(hex): 4dcd8058bfb73648ed5576ee57aa91fc
148
- sha256(hex): 188af568298176e4f3a6b9d8b6e42b2d3dcfdbbf94f352a43930642da33a4b3d
149
- sha256(base64): GIr1aCmBduTzprnYtuQrLT3P27+U81KkOTBkLaM6Sz0=
150
- sha512(base64): WVZAmS7b1jan9L6sMo0KKqvBQ0w+6fu8sIFIZ1mSL3YK1ZaVyYmvLBoR74q53tBmj0DpHy4dH1tYP3H1AKxRfA==
147
+ md5(hex): d708b19fdec6ffa1962f4f1dedfb439d
148
+ sha256(hex): 80642546f4dba459de18f9e60b210ffe9bee44bce615a2ff50cece5b27dada56
149
+ sha256(base64): gGQlRvTbpFneGPnmCyEP/pvuRLzmFaL/UM7OWyfa2lY=
150
+ sha512(base64): lFRH/BBFDXjIbZpt1VnQ9/8Ezkcv6C+DP2AE6DUf6eTQOJ+ygugwtfofhQnMsiJAXLrXkeJU2BKGxbzNREfmOA==
151
151
  version_main.js:
152
- md5(hex): 4dcd8058bfb73648ed5576ee57aa91fc
153
- sha256(hex): 188af568298176e4f3a6b9d8b6e42b2d3dcfdbbf94f352a43930642da33a4b3d
154
- sha256(base64): GIr1aCmBduTzprnYtuQrLT3P27+U81KkOTBkLaM6Sz0=
155
- sha512(base64): WVZAmS7b1jan9L6sMo0KKqvBQ0w+6fu8sIFIZ1mSL3YK1ZaVyYmvLBoR74q53tBmj0DpHy4dH1tYP3H1AKxRfA==
152
+ md5(hex): d708b19fdec6ffa1962f4f1dedfb439d
153
+ sha256(hex): 80642546f4dba459de18f9e60b210ffe9bee44bce615a2ff50cece5b27dada56
154
+ sha256(base64): gGQlRvTbpFneGPnmCyEP/pvuRLzmFaL/UM7OWyfa2lY=
155
+ sha512(base64): lFRH/BBFDXjIbZpt1VnQ9/8Ezkcv6C+DP2AE6DUf6eTQOJ+ygugwtfofhQnMsiJAXLrXkeJU2BKGxbzNREfmOA==
156
156
  wnako3.js:
157
- md5(hex): a079943124945820a2038a8b27e9fb97
158
- sha256(hex): de32439416e67e29c5eedbdf7ca4cb9f49b815b507d8d9ef9fcfed3114558224
159
- sha256(base64): 3jJDlBbmfinF7tvffKTLn0m4FbUH2Nnvn8/tMRRVgiQ=
160
- sha512(base64): 0ues2ygvTDqGJM8K5/NLeyMtaEjcJYUDirTb9yKqd1I6zFsDkdMd57yTFHEN1wODeBIule4m+YPuDk+Y2kaGLQ==
157
+ md5(hex): afd7e0beca390190fd467cda3298dba2
158
+ sha256(hex): 6f1497fa19664a28272b60391dafd7c5ad79e8e5fd19ea9d4aae37ec4688b106
159
+ sha256(base64): bxSX+hlmSignK2A5Ha/Xxa156OX9GeqdSq437EaIsQY=
160
+ sha512(base64): oEMOJ/hy8fwcssdBb6ns2r7sKH7YydaFjno6KIZik1oluaQWR6d8x4ES7N4OeUkPnjYTqgIocTzaSUDlp3lr2Q==
161
161
  wnako3webworker.js:
162
- md5(hex): f1c9ba619e403951ff1fb6cbf635f4aa
163
- sha256(hex): e85d19405170148c57bd84b8a450da56b82a2b074fef15c33a26feccf96efcf6
164
- sha256(base64): 6F0ZQFFwFIxXvYS4pFDaVrgqKwdP7xXDOib+zPlu/PY=
165
- sha512(base64): EqLTikBsPW3gvWogbfzhLXNszwDUAT4Rjl/rX/W/CdPxeeEGXvlPesVVlznaSvnT0Myo4kHf3YBFdX0HhJOdDA==
162
+ md5(hex): 99abf084a2620d7414ec52133446e91f
163
+ sha256(hex): 9d4d81ab046f64e39bf7ca1fa9ac359241b60ed382e92be7dcf0ed78d20af2ca
164
+ sha256(base64): nU2BqwRvZOOb98ofqaw1kkG2DtOC6Svn3PDteNIK8so=
165
+ sha512(base64): q5MQ15v2liUAGJBLcVSZWHVJF2ML5yDX3quIih0BaXk2TaqrFXx1l7HUoyBw3pBWkEhT+9sMnXc78wV/GJ4dEA==
@@ -1,33 +1,33 @@
1
- <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.26&f=release/command.json.js" integrity="sha512-rJ9Ms3FyvbYE6Nzu349h+OEPn56Ayw2JBT+gVB4CGg+wxRzGcmF+LjRDIcgLKGZv8+OtbXHpXPujLktT9+gxmw==" crossorigin="anonymous"></script>
2
- <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.26&f=release/core_src_nako_josi_list_mjs.js" integrity="sha512-0+LAeEfPy2Lrl+DeJMjbBIUda9Y5ttpLGy3/FW8rjSW8bN3udrALJa5V/bhjxU7mYouumV/QGN2wt3oxMCKy9g==" crossorigin="anonymous"></script>
3
- <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.26&f=release/core_src_nako_reserved_words_mjs.js" integrity="sha512-UzZigh2tIhgBO3+Sp1wnqKMvAGfhqSRdH2+ffmRy4+8CVNEeepddaDV0oKJ+vyvi28zQLmXeMsjRu+Frj3YlTg==" crossorigin="anonymous"></script>
4
- <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.26&f=release/edit_main.js" integrity="sha512-6c5sHItNnqjo1f+yNr/cjXoxeiVNNzVWTFAQ+jM5/tlpbM8Y+YorWSx9Zl5hMbCgFKx+SKxI8pNGr6AncaEBYQ==" crossorigin="anonymous"></script>
5
- <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.26&f=release/edit_main.js" integrity="sha512-VluJJhYbxG+I5sofn1bKqOuIqMXdCyUUM9dnSBEVAkUXUy/ENHfG6hQFTZULcHy9iNfqPHXTfWuCgyMzQ9Hxrg==" crossorigin="anonymous"></script>
6
- <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.26&f=release/version_main.js" integrity="sha512-KMEb25tO1BMsNxzECPwLM6bi1IIS5wX+VRN6mdzbqhtqPr7eY1K7Wwg66MpCmhrc45KoEJthR4NWyw9O7ODgLw==" crossorigin="anonymous"></script>
7
- <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.26&f=release/editor.js" integrity="sha512-6c5sHItNnqjo1f+yNr/cjXoxeiVNNzVWTFAQ+jM5/tlpbM8Y+YorWSx9Zl5hMbCgFKx+SKxI8pNGr6AncaEBYQ==" crossorigin="anonymous"></script>
8
- <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.26&f=release/nako_gen_async.js" integrity="sha512-/73lycspxJ921s+NmqaOKF58X9rCsgEZrZT4O4sW1aCe5CSXtQevIasAoGgIoL3a5RmlaghbaIVASwAgmoE3+g==" crossorigin="anonymous"></script>
9
- <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.26&f=release/plugin_caniuse.js" integrity="sha512-V6nOBHnhxPChu+S/LfB7elCeBk985ukLmBmkCyPk4ai5VfoJZuOIttg72PbZSxWfP5eQTrlLNajsorfwNw/vcA==" crossorigin="anonymous"></script>
10
- <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.26&f=release/plugin_datetime.js" integrity="sha512-ofb5jVaHjjTRoCAmHnbewc2fS8vr1oEkX/B3WoOCjYpDnZ3nnl3EDz6fdAS8CFFzGvuekCk2RFN5BuM9kX6FAg==" crossorigin="anonymous"></script>
11
- <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.26&f=release/plugin_kansuji.js" integrity="sha512-N+S8Th1yCiQy3q5jh0TFvlTOtrWNE82a4UJZ9O3ml3BGBYA141bpWlJR5c34dObTe1prbLJZ7v5WvV0vnDnr9A==" crossorigin="anonymous"></script>
12
- <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.26&f=release/plugin_keigo.js" integrity="sha512-u067+CeBvMb6+oINFY9Wz77GBk4NSxS2+k35GJ3RsFFmphJliwzwmV2ceID0gZ4mbjJ0xJHQX9WIypiyI6yfdA==" crossorigin="anonymous"></script>
13
- <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.26&f=release/plugin_markup.js" integrity="sha512-mEcV3CYWM6+zmuxgojP/9wbQNtkTPuPzFHo1KTG2TPaDbSfdPZCazFcNmdjJ95o7+VFfxs2Id7yB02bqSeBxNg==" crossorigin="anonymous"></script>
14
- <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.26&f=release/plugin_three.js" integrity="sha512-4loRkhlxZ9A9v5t3sk5VECW7T33axIVbBQgwkNdgcjk03yRqAvxut5OS4n3BBS4jnWWHOE3i0vj9qxOOp4uV3Q==" crossorigin="anonymous"></script>
15
- <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.26&f=release/plugin_toml.js" integrity="sha512-Z4JmOCY66VuyoD8m4dCzKttEbCTEUfqyuqlmcOhs69m/88skKcPYWXi+4W+Td5LdI3xqezn4BkN32F9ZkPzUpQ==" crossorigin="anonymous"></script>
16
- <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.26&f=release/plugin_turtle.js" integrity="sha512-LEewcTTM8JrZxmsVnP1ONF916UDoC1tQaYlqYNhuUnB4t1jfchtZic24rFNtNIaO6AcFsjxukV9Uj3WMefoU3Q==" crossorigin="anonymous"></script>
17
- <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.26&f=release/plugin_webworker.js" integrity="sha512-6UHX2dgMPRY4BuIxLXaERKaA8Wg5eK2pWy+OysU0/+gt2E15M7K5Vr8+4CQt6hylWnmzmJQJfgObIr+yjW5kPw==" crossorigin="anonymous"></script>
18
- <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.26&f=release/plugin_weykturtle3d.js" integrity="sha512-ONFdombPCdgdnXs7VMUAHpe8IBvTuLzSgzmERf1jEhHo4l06wDpkpRRCk3/9a1hiXRHQ+le2LZBT7XH4VA27sQ==" crossorigin="anonymous"></script>
19
- <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.26&f=release/plugin_caniuse.js" integrity="sha512-V6nOBHnhxPChu+S/LfB7elCeBk985ukLmBmkCyPk4ai5VfoJZuOIttg72PbZSxWfP5eQTrlLNajsorfwNw/vcA==" crossorigin="anonymous"></script>
20
- <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.26&f=release/plugin_datetime.js" integrity="sha512-ofb5jVaHjjTRoCAmHnbewc2fS8vr1oEkX/B3WoOCjYpDnZ3nnl3EDz6fdAS8CFFzGvuekCk2RFN5BuM9kX6FAg==" crossorigin="anonymous"></script>
21
- <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.26&f=release/plugin_kansuji.js" integrity="sha512-N+S8Th1yCiQy3q5jh0TFvlTOtrWNE82a4UJZ9O3ml3BGBYA141bpWlJR5c34dObTe1prbLJZ7v5WvV0vnDnr9A==" crossorigin="anonymous"></script>
22
- <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.26&f=release/plugin_keigo.js" integrity="sha512-u067+CeBvMb6+oINFY9Wz77GBk4NSxS2+k35GJ3RsFFmphJliwzwmV2ceID0gZ4mbjJ0xJHQX9WIypiyI6yfdA==" crossorigin="anonymous"></script>
23
- <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.26&f=release/plugin_markup.js" integrity="sha512-mEcV3CYWM6+zmuxgojP/9wbQNtkTPuPzFHo1KTG2TPaDbSfdPZCazFcNmdjJ95o7+VFfxs2Id7yB02bqSeBxNg==" crossorigin="anonymous"></script>
24
- <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.26&f=release/plugin_three.js" integrity="sha512-4loRkhlxZ9A9v5t3sk5VECW7T33axIVbBQgwkNdgcjk03yRqAvxut5OS4n3BBS4jnWWHOE3i0vj9qxOOp4uV3Q==" crossorigin="anonymous"></script>
25
- <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.26&f=release/plugin_turtle.js" integrity="sha512-ce8etr+HoC+UjUyXSgxJzy3+pOYhsBdt9jDzhks2H/eEPQ1gIz7M8hoeyP0223zLLZHBBzlHiL/a6mmJdoKQ+w==" crossorigin="anonymous"></script>
26
- <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.26&f=release/plugin_webworker.js" integrity="sha512-6UHX2dgMPRY4BuIxLXaERKaA8Wg5eK2pWy+OysU0/+gt2E15M7K5Vr8+4CQt6hylWnmzmJQJfgObIr+yjW5kPw==" crossorigin="anonymous"></script>
27
- <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.26&f=release/plugin_weykturtle3d.js" integrity="sha512-ONFdombPCdgdnXs7VMUAHpe8IBvTuLzSgzmERf1jEhHo4l06wDpkpRRCk3/9a1hiXRHQ+le2LZBT7XH4VA27sQ==" crossorigin="anonymous"></script>
28
- <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.26&f=release/wnako3.js" integrity="sha512-ZBC5fnWXr1/lcjLwXqmTj1OXfBewmzxlPqnz6ZnDhtVUY9invxAimbYuxMrgb3ZiFnopNLH7xPbgWlFJNB/jmQ==" crossorigin="anonymous"></script>
29
- <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.26&f=release/wnako3webworker.js" integrity="sha512-cY0Mzrpoz/uEyY1n8MeJeWdDmm9vqI7dh28wEqJGtVRfYOJvDHiYDzzlfGndOWmzZmHUK6ZAE7YaUJ7zZxiZLw==" crossorigin="anonymous"></script>
30
- <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.26&f=release/version.js" integrity="sha512-WVZAmS7b1jan9L6sMo0KKqvBQ0w+6fu8sIFIZ1mSL3YK1ZaVyYmvLBoR74q53tBmj0DpHy4dH1tYP3H1AKxRfA==" crossorigin="anonymous"></script>
31
- <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.26&f=release/version_main.js" integrity="sha512-WVZAmS7b1jan9L6sMo0KKqvBQ0w+6fu8sIFIZ1mSL3YK1ZaVyYmvLBoR74q53tBmj0DpHy4dH1tYP3H1AKxRfA==" crossorigin="anonymous"></script>
32
- <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.26&f=release/wnako3.js" integrity="sha512-0ues2ygvTDqGJM8K5/NLeyMtaEjcJYUDirTb9yKqd1I6zFsDkdMd57yTFHEN1wODeBIule4m+YPuDk+Y2kaGLQ==" crossorigin="anonymous"></script>
33
- <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.26&f=release/wnako3webworker.js" integrity="sha512-EqLTikBsPW3gvWogbfzhLXNszwDUAT4Rjl/rX/W/CdPxeeEGXvlPesVVlznaSvnT0Myo4kHf3YBFdX0HhJOdDA==" crossorigin="anonymous"></script>
1
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.27&f=release/command.json.js" integrity="sha512-rJ9Ms3FyvbYE6Nzu349h+OEPn56Ayw2JBT+gVB4CGg+wxRzGcmF+LjRDIcgLKGZv8+OtbXHpXPujLktT9+gxmw==" crossorigin="anonymous"></script>
2
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.27&f=release/core_src_nako_josi_list_mjs.js" integrity="sha512-0+LAeEfPy2Lrl+DeJMjbBIUda9Y5ttpLGy3/FW8rjSW8bN3udrALJa5V/bhjxU7mYouumV/QGN2wt3oxMCKy9g==" crossorigin="anonymous"></script>
3
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.27&f=release/core_src_nako_reserved_words_mjs.js" integrity="sha512-UzZigh2tIhgBO3+Sp1wnqKMvAGfhqSRdH2+ffmRy4+8CVNEeepddaDV0oKJ+vyvi28zQLmXeMsjRu+Frj3YlTg==" crossorigin="anonymous"></script>
4
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.27&f=release/edit_main.js" integrity="sha512-6c5sHItNnqjo1f+yNr/cjXoxeiVNNzVWTFAQ+jM5/tlpbM8Y+YorWSx9Zl5hMbCgFKx+SKxI8pNGr6AncaEBYQ==" crossorigin="anonymous"></script>
5
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.27&f=release/edit_main.js" integrity="sha512-VluJJhYbxG+I5sofn1bKqOuIqMXdCyUUM9dnSBEVAkUXUy/ENHfG6hQFTZULcHy9iNfqPHXTfWuCgyMzQ9Hxrg==" crossorigin="anonymous"></script>
6
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.27&f=release/version_main.js" integrity="sha512-KMEb25tO1BMsNxzECPwLM6bi1IIS5wX+VRN6mdzbqhtqPr7eY1K7Wwg66MpCmhrc45KoEJthR4NWyw9O7ODgLw==" crossorigin="anonymous"></script>
7
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.27&f=release/editor.js" integrity="sha512-6c5sHItNnqjo1f+yNr/cjXoxeiVNNzVWTFAQ+jM5/tlpbM8Y+YorWSx9Zl5hMbCgFKx+SKxI8pNGr6AncaEBYQ==" crossorigin="anonymous"></script>
8
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.27&f=release/nako_gen_async.js" integrity="sha512-/73lycspxJ921s+NmqaOKF58X9rCsgEZrZT4O4sW1aCe5CSXtQevIasAoGgIoL3a5RmlaghbaIVASwAgmoE3+g==" crossorigin="anonymous"></script>
9
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.27&f=release/plugin_caniuse.js" integrity="sha512-V6nOBHnhxPChu+S/LfB7elCeBk985ukLmBmkCyPk4ai5VfoJZuOIttg72PbZSxWfP5eQTrlLNajsorfwNw/vcA==" crossorigin="anonymous"></script>
10
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.27&f=release/plugin_datetime.js" integrity="sha512-ofb5jVaHjjTRoCAmHnbewc2fS8vr1oEkX/B3WoOCjYpDnZ3nnl3EDz6fdAS8CFFzGvuekCk2RFN5BuM9kX6FAg==" crossorigin="anonymous"></script>
11
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.27&f=release/plugin_kansuji.js" integrity="sha512-N+S8Th1yCiQy3q5jh0TFvlTOtrWNE82a4UJZ9O3ml3BGBYA141bpWlJR5c34dObTe1prbLJZ7v5WvV0vnDnr9A==" crossorigin="anonymous"></script>
12
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.27&f=release/plugin_keigo.js" integrity="sha512-u067+CeBvMb6+oINFY9Wz77GBk4NSxS2+k35GJ3RsFFmphJliwzwmV2ceID0gZ4mbjJ0xJHQX9WIypiyI6yfdA==" crossorigin="anonymous"></script>
13
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.27&f=release/plugin_markup.js" integrity="sha512-mEcV3CYWM6+zmuxgojP/9wbQNtkTPuPzFHo1KTG2TPaDbSfdPZCazFcNmdjJ95o7+VFfxs2Id7yB02bqSeBxNg==" crossorigin="anonymous"></script>
14
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.27&f=release/plugin_three.js" integrity="sha512-4loRkhlxZ9A9v5t3sk5VECW7T33axIVbBQgwkNdgcjk03yRqAvxut5OS4n3BBS4jnWWHOE3i0vj9qxOOp4uV3Q==" crossorigin="anonymous"></script>
15
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.27&f=release/plugin_toml.js" integrity="sha512-Z4JmOCY66VuyoD8m4dCzKttEbCTEUfqyuqlmcOhs69m/88skKcPYWXi+4W+Td5LdI3xqezn4BkN32F9ZkPzUpQ==" crossorigin="anonymous"></script>
16
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.27&f=release/plugin_turtle.js" integrity="sha512-LEewcTTM8JrZxmsVnP1ONF916UDoC1tQaYlqYNhuUnB4t1jfchtZic24rFNtNIaO6AcFsjxukV9Uj3WMefoU3Q==" crossorigin="anonymous"></script>
17
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.27&f=release/plugin_webworker.js" integrity="sha512-6UHX2dgMPRY4BuIxLXaERKaA8Wg5eK2pWy+OysU0/+gt2E15M7K5Vr8+4CQt6hylWnmzmJQJfgObIr+yjW5kPw==" crossorigin="anonymous"></script>
18
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.27&f=release/plugin_weykturtle3d.js" integrity="sha512-ONFdombPCdgdnXs7VMUAHpe8IBvTuLzSgzmERf1jEhHo4l06wDpkpRRCk3/9a1hiXRHQ+le2LZBT7XH4VA27sQ==" crossorigin="anonymous"></script>
19
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.27&f=release/plugin_caniuse.js" integrity="sha512-V6nOBHnhxPChu+S/LfB7elCeBk985ukLmBmkCyPk4ai5VfoJZuOIttg72PbZSxWfP5eQTrlLNajsorfwNw/vcA==" crossorigin="anonymous"></script>
20
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.27&f=release/plugin_datetime.js" integrity="sha512-ofb5jVaHjjTRoCAmHnbewc2fS8vr1oEkX/B3WoOCjYpDnZ3nnl3EDz6fdAS8CFFzGvuekCk2RFN5BuM9kX6FAg==" crossorigin="anonymous"></script>
21
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.27&f=release/plugin_kansuji.js" integrity="sha512-N+S8Th1yCiQy3q5jh0TFvlTOtrWNE82a4UJZ9O3ml3BGBYA141bpWlJR5c34dObTe1prbLJZ7v5WvV0vnDnr9A==" crossorigin="anonymous"></script>
22
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.27&f=release/plugin_keigo.js" integrity="sha512-u067+CeBvMb6+oINFY9Wz77GBk4NSxS2+k35GJ3RsFFmphJliwzwmV2ceID0gZ4mbjJ0xJHQX9WIypiyI6yfdA==" crossorigin="anonymous"></script>
23
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.27&f=release/plugin_markup.js" integrity="sha512-mEcV3CYWM6+zmuxgojP/9wbQNtkTPuPzFHo1KTG2TPaDbSfdPZCazFcNmdjJ95o7+VFfxs2Id7yB02bqSeBxNg==" crossorigin="anonymous"></script>
24
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.27&f=release/plugin_three.js" integrity="sha512-4loRkhlxZ9A9v5t3sk5VECW7T33axIVbBQgwkNdgcjk03yRqAvxut5OS4n3BBS4jnWWHOE3i0vj9qxOOp4uV3Q==" crossorigin="anonymous"></script>
25
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.27&f=release/plugin_turtle.js" integrity="sha512-ce8etr+HoC+UjUyXSgxJzy3+pOYhsBdt9jDzhks2H/eEPQ1gIz7M8hoeyP0223zLLZHBBzlHiL/a6mmJdoKQ+w==" crossorigin="anonymous"></script>
26
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.27&f=release/plugin_webworker.js" integrity="sha512-6UHX2dgMPRY4BuIxLXaERKaA8Wg5eK2pWy+OysU0/+gt2E15M7K5Vr8+4CQt6hylWnmzmJQJfgObIr+yjW5kPw==" crossorigin="anonymous"></script>
27
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.27&f=release/plugin_weykturtle3d.js" integrity="sha512-ONFdombPCdgdnXs7VMUAHpe8IBvTuLzSgzmERf1jEhHo4l06wDpkpRRCk3/9a1hiXRHQ+le2LZBT7XH4VA27sQ==" crossorigin="anonymous"></script>
28
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.27&f=release/wnako3.js" integrity="sha512-ZBC5fnWXr1/lcjLwXqmTj1OXfBewmzxlPqnz6ZnDhtVUY9invxAimbYuxMrgb3ZiFnopNLH7xPbgWlFJNB/jmQ==" crossorigin="anonymous"></script>
29
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.27&f=release/wnako3webworker.js" integrity="sha512-cY0Mzrpoz/uEyY1n8MeJeWdDmm9vqI7dh28wEqJGtVRfYOJvDHiYDzzlfGndOWmzZmHUK6ZAE7YaUJ7zZxiZLw==" crossorigin="anonymous"></script>
30
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.27&f=release/version.js" integrity="sha512-lFRH/BBFDXjIbZpt1VnQ9/8Ezkcv6C+DP2AE6DUf6eTQOJ+ygugwtfofhQnMsiJAXLrXkeJU2BKGxbzNREfmOA==" crossorigin="anonymous"></script>
31
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.27&f=release/version_main.js" integrity="sha512-lFRH/BBFDXjIbZpt1VnQ9/8Ezkcv6C+DP2AE6DUf6eTQOJ+ygugwtfofhQnMsiJAXLrXkeJU2BKGxbzNREfmOA==" crossorigin="anonymous"></script>
32
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.27&f=release/wnako3.js" integrity="sha512-oEMOJ/hy8fwcssdBb6ns2r7sKH7YydaFjno6KIZik1oluaQWR6d8x4ES7N4OeUkPnjYTqgIocTzaSUDlp3lr2Q==" crossorigin="anonymous"></script>
33
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.6.27&f=release/wnako3webworker.js" integrity="sha512-q5MQ15v2liUAGJBLcVSZWHVJF2ML5yDX3quIih0BaXk2TaqrFXx1l7HUoyBw3pBWkEhT+9sMnXc78wV/GJ4dEA==" crossorigin="anonymous"></script>