From 3fd2a753aee742c1a2b52709d38badd0ae395cba Mon Sep 17 00:00:00 2001 From: Pasha Shchukin Date: Mon, 11 Nov 2024 16:50:43 +0200 Subject: [PATCH 1/7] add task solution --- .github/workflows/test.yml-template | 29 ++++ README.md | 2 +- package-lock.json | 8 +- package.json | 2 +- src/index.html | 2 +- src/modules/Game.class.js | 205 ++++++++++++++++++++++++++-- src/scripts/main.js | 84 +++++++++++- 7 files changed, 311 insertions(+), 21 deletions(-) create mode 100644 .github/workflows/test.yml-template diff --git a/.github/workflows/test.yml-template b/.github/workflows/test.yml-template new file mode 100644 index 000000000..44ac4e963 --- /dev/null +++ b/.github/workflows/test.yml-template @@ -0,0 +1,29 @@ +name: Test + +on: + pull_request: + branches: [ master ] + +jobs: + build: + + runs-on: ubuntu-latest + + strategy: + matrix: + node-version: [20.x] + + steps: + - uses: actions/checkout@v2 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v1 + with: + node-version: ${{ matrix.node-version }} + - run: npm install + - run: npm start & sleep 5 && npm test + - name: Upload tests report(cypress mochaawesome merged HTML report) + if: ${{ always() }} + uses: actions/upload-artifact@v2 + with: + name: report + path: reports diff --git a/README.md b/README.md index 5aab92544..e40cec244 100644 --- a/README.md +++ b/README.md @@ -61,7 +61,7 @@ You can change the HTML/CSS layout if you need it. ## Deploy and Pull Request 1. Replace `` with your Github username in the link - - [DEMO LINK](https://.github.io/js_2048_game/) + - [DEMO LINK](https://pasha28091997.github.io/js_2048_game/) 2. Follow [this instructions](https://mate-academy.github.io/layout_task-guideline/) - Run `npm run test` command to test your code; - Run `npm run test:only -- -n` to run fast test ignoring linter; diff --git a/package-lock.json b/package-lock.json index f209cb6e0..755cd3c2e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,7 +14,7 @@ "@mate-academy/eslint-config": "latest", "@mate-academy/jest-mochawesome-reporter": "^1.0.0", "@mate-academy/linthtml-config": "latest", - "@mate-academy/scripts": "^1.8.5", + "@mate-academy/scripts": "^1.9.12", "@mate-academy/stylelint-config": "latest", "@parcel/transformer-sass": "^2.12.0", "cypress": "^13.13.0", @@ -1467,9 +1467,9 @@ "dev": true }, "node_modules/@mate-academy/scripts": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@mate-academy/scripts/-/scripts-1.8.5.tgz", - "integrity": "sha512-mHRY2FkuoYCf5U0ahIukkaRo5LSZsxrTSgMJheFoyf3VXsTvfM9OfWcZIDIDB521kdPrScHHnRp+JRNjCfUO5A==", + "version": "1.9.12", + "resolved": "https://registry.npmjs.org/@mate-academy/scripts/-/scripts-1.9.12.tgz", + "integrity": "sha512-/OcmxMa34lYLFlGx7Ig926W1U1qjrnXbjFJ2TzUcDaLmED+A5se652NcWwGOidXRuMAOYLPU2jNYBEkKyXrFJA==", "dev": true, "dependencies": { "@octokit/rest": "^17.11.2", diff --git a/package.json b/package.json index 0335978ca..05abe81e0 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,7 @@ "@mate-academy/eslint-config": "latest", "@mate-academy/jest-mochawesome-reporter": "^1.0.0", "@mate-academy/linthtml-config": "latest", - "@mate-academy/scripts": "^1.8.5", + "@mate-academy/scripts": "^1.9.12", "@mate-academy/stylelint-config": "latest", "@parcel/transformer-sass": "^2.12.0", "cypress": "^13.13.0", diff --git a/src/index.html b/src/index.html index aff3d1a98..1288441ad 100644 --- a/src/index.html +++ b/src/index.html @@ -65,6 +65,6 @@

2048

- + diff --git a/src/modules/Game.class.js b/src/modules/Game.class.js index 65cd219c9..4d57cc23a 100644 --- a/src/modules/Game.class.js +++ b/src/modules/Game.class.js @@ -1,3 +1,4 @@ +/* eslint-disable function-paren-newline */ 'use strict'; /** @@ -21,24 +22,147 @@ class Game { * initial state. */ constructor(initialState) { - // eslint-disable-next-line no-console - console.log(initialState); + this.board = initialState || this.createEmptyBoard(); + this.score = 0; + this.status = 'idle'; } - moveLeft() {} - moveRight() {} - moveUp() {} - moveDown() {} + createEmptyBoard() { + return Array(4) + .fill() + .map(() => Array(4).fill(0)); + } + + moveLeft() { + let moved = false; + + for (const row of this.board) { + const newRow = this.merge(this.slide(row)); + + if (!this.arraysEqual(row, newRow)) { + moved = true; + } + Object.assign(row, newRow); + } + + if (moved) { + this.addRandomTile(); + } + } + + moveRight() { + let moved = false; + + for (const row of this.board) { + const reversedRow = row.slice().reverse(); + const newRow = this.merge(this.slide(reversedRow)).reverse(); + + if (!this.arraysEqual(row, newRow)) { + moved = true; + + Object.assign(row, newRow); + } + } + + if (moved) { + this.addRandomTile(); + } + } + + moveUp() { + let moved = false; + + for (let col = 0; col < 4; col++) { + const column = this.getColumn(col); + const newColumn = this.merge(this.slide(column)); + + if (!this.arraysEqual(column, newColumn)) { + moved = true; + this.setColumn(col, newColumn); + } + } + + if (moved) { + this.addRandomTile(); + } + } + + moveDown() { + let moved = false; + + for (let col = 0; col < 4; col++) { + const column = this.getColumn(col).reverse(); + const newColumn = this.merge(this.slide(column)).reverse(); + + if (!this.arraysEqual(column, newColumn)) { + moved = true; + this.setColumn(col, newColumn); + } + } + + if (moved) { + this.addRandomTile(); + } + } + + getColumn(index) { + const column = []; + + for (let row = 0; row < 4; row++) { + column.push(this.board[row][index]); + } + + return column; + } + + setColumn(index, newColumn) { + for (let row = 0; row < 4; row++) { + this.board[row][index] = newColumn[row]; + } + } + + slide(row) { + const newRow = row.filter((value) => value !== 0); + + while (newRow.length < 4) { + newRow.push(0); + } + + return newRow; + } + + merge(row) { + for (let i = 0; i < row.length - 1; i++) { + if (row[i] !== 0 && row[i] === row[i + 1]) { + row[i] *= 2; + row[i + 1] = 0; + this.score += row[i]; + } + } + + return this.slide(row); + } + + arraysEqual(arr1, arr2) { + return ( + arr1.length === arr2.length && + arr1.every((value, index) => value === arr2[index]) + ); + } /** * @returns {number} */ - getScore() {} + getScore() { + return this.score; + } /** * @returns {number[][]} */ - getState() {} + getState() { + return this.board; + } /** * Returns the current game status. @@ -50,19 +174,74 @@ class Game { * `win` - the game is won; * `lose` - the game is lost */ - getStatus() {} + getStatus() { + if (this.board.some((row) => row.includes(2048))) { + return 'win'; + } + + const hasMoves = this.board.some((row, rowIndex) => + row.some((value, colIndex) => { + if (value === 0) { + return true; + } + + if (colIndex < 3 && value === row[colIndex + 1]) { + return true; + } + + if (rowIndex < 3 && value === this.board[rowIndex + 1][colIndex]) { + return true; + } + + return false; + }), + ); + + if (!hasMoves) { + return 'lose'; + } + + return 'playing'; + } /** * Starts the game. */ - start() {} + start() { + if (this.status === 'idle') { + this.status = 'playing'; + this.addRandomTile(); + this.addRandomTile(); + } + } /** * Resets the game. */ - restart() {} + restart() { + this.board = this.createEmptyBoard(); + this.score = 0; + this.status = 'idle'; + this.start(); + } - // Add your own methods here -} + addRandomTile() { + const emptyCells = []; + + for (let row = 0; row < this.board.length; row++) { + for (let col = 0; col < this.board[row].length; col++) { + if (this.board[row][col] === 0) { + emptyCells.push({ row, col }); + } + } + } + if (emptyCells.length > 0) { + const { row: newRow, col: newCol } = + emptyCells[Math.floor(Math.random() * emptyCells.length)]; + + this.board[newRow][newCol] = Math.random() < 0.9 ? 2 : 4; + } + } +} module.exports = Game; diff --git a/src/scripts/main.js b/src/scripts/main.js index dc7f045a3..d566229a5 100644 --- a/src/scripts/main.js +++ b/src/scripts/main.js @@ -4,4 +4,86 @@ // const Game = require('../modules/Game.class'); // const game = new Game(); -// Write your code here +import Game from '../modules/Game.class.js'; + +const game = new Game(); + +// eslint-disable-next-line no-shadow +document.addEventListener('keydown', (event) => { + // eslint-disable-next-line no-shadow + const status = game.getStatus(); + + if (status !== 'playing') { + return; + } + + switch (event.key) { + case 'ArrowLeft': + game.moveLeft(); + break; + case 'ArrowRight': + game.moveRight(); + break; + case 'ArrowUp': + game.moveUp(); + break; + case 'ArrowDown': + game.moveDown(); + break; + default: + return; + } + + updateUI(); +}); + +function updateUI() { + const board = game.getState(); + const score = game.getScore(); + // eslint-disable-next-line no-shadow + const status = game.getStatus(); + + document.querySelector('.game-score').textContent = score; + + const cells = document.querySelectorAll('.field-cell'); + let index = 0; + + for (const row of board) { + for (const value of row) { + const cell = cells[index]; + + cell.className = 'field-cell'; + + if (value !== 0) { + cell.classList.add(`field-cell--${value}`); + cell.textContent = value; + } else { + cell.textContent = ''; + } + index++; + } + } + + document.querySelector('.message-start').classList.add('hidden'); + + document + .querySelector('.message-lose') + .classList.toggle('hidden', status !== 'lose'); + + document + .querySelector('.message-win') + .classList.toggle('hidden', status !== 'win'); + + const startButton = document.querySelector('.button.start'); + + startButton.textContent = status === 'idle' ? 'Start' : 'Restart'; +} + +document.querySelector('.button.start').addEventListener('click', () => { + if (game.getStatus() === 'idle') { + game.start(); + } else { + game.restart(); + } + updateUI(); +}); From e656c783f588dfd193a33e309d20d54dcdadc555 Mon Sep 17 00:00:00 2001 From: Pasha Shchukin Date: Mon, 11 Nov 2024 20:24:37 +0200 Subject: [PATCH 2/7] add task solution --- src/index.html | 10 +++++++++- src/styles/main.scss | 1 + 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/index.html b/src/index.html index 1288441ad..c7446c220 100644 --- a/src/index.html +++ b/src/index.html @@ -11,6 +11,11 @@ rel="stylesheet" href="./styles/main.scss" /> +
@@ -65,6 +70,9 @@

2048

- + diff --git a/src/styles/main.scss b/src/styles/main.scss index c43f37dcf..7ba85d90a 100644 --- a/src/styles/main.scss +++ b/src/styles/main.scss @@ -148,6 +148,7 @@ h1 { .restart { background: #f1b2b2; + font-size: 16px; &:hover { background: #f87474; From 896c2f47e54fefff05a2e164707ad8b4ff6785cd Mon Sep 17 00:00:00 2001 From: Pasha Shchukin Date: Mon, 11 Nov 2024 20:38:10 +0200 Subject: [PATCH 3/7] add task solution --- src/scripts/main.js | 6 ++++++ src/styles/main.scss | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/scripts/main.js b/src/scripts/main.js index d566229a5..cfd0ad00a 100644 --- a/src/scripts/main.js +++ b/src/scripts/main.js @@ -7,9 +7,14 @@ import Game from '../modules/Game.class.js'; const game = new Game(); +let isGameStarted = false; // eslint-disable-next-line no-shadow document.addEventListener('keydown', (event) => { + if (!isGameStarted) { + return; + } + // eslint-disable-next-line no-shadow const status = game.getStatus(); @@ -82,6 +87,7 @@ function updateUI() { document.querySelector('.button.start').addEventListener('click', () => { if (game.getStatus() === 'idle') { game.start(); + isGameStarted = true; } else { game.restart(); } diff --git a/src/styles/main.scss b/src/styles/main.scss index 7ba85d90a..37fb5f801 100644 --- a/src/styles/main.scss +++ b/src/styles/main.scss @@ -148,7 +148,7 @@ h1 { .restart { background: #f1b2b2; - font-size: 16px; + font-size: 10px; &:hover { background: #f87474; From 40a7358c096e6f83be8de9f289caf414522aacb5 Mon Sep 17 00:00:00 2001 From: Pasha Shchukin Date: Thu, 14 Nov 2024 21:12:58 +0200 Subject: [PATCH 4/7] add task solution --- src/scripts/main.js | 8 +++++++- src/styles/main.scss | 1 - 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/scripts/main.js b/src/scripts/main.js index cfd0ad00a..e6244b58b 100644 --- a/src/scripts/main.js +++ b/src/scripts/main.js @@ -81,7 +81,13 @@ function updateUI() { const startButton = document.querySelector('.button.start'); - startButton.textContent = status === 'idle' ? 'Start' : 'Restart'; + if (status === 'idle') { + startButton.textContent = 'Start'; + startButton.classList.remove('restart'); + } else { + startButton.textContent = 'Restart'; + startButton.classList.add('restart'); + } } document.querySelector('.button.start').addEventListener('click', () => { diff --git a/src/styles/main.scss b/src/styles/main.scss index 37fb5f801..c43f37dcf 100644 --- a/src/styles/main.scss +++ b/src/styles/main.scss @@ -148,7 +148,6 @@ h1 { .restart { background: #f1b2b2; - font-size: 10px; &:hover { background: #f87474; From 6933827065d028347eb0374cb9682364f14b7953 Mon Sep 17 00:00:00 2001 From: Pasha Shchukin Date: Thu, 14 Nov 2024 21:34:39 +0200 Subject: [PATCH 5/7] add task solution --- src/scripts/main.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/scripts/main.js b/src/scripts/main.js index e6244b58b..822e82f1b 100644 --- a/src/scripts/main.js +++ b/src/scripts/main.js @@ -91,11 +91,15 @@ function updateUI() { } document.querySelector('.button.start').addEventListener('click', () => { + // eslint-disable-next-line no-console + console.log('Game started:', game.getStatus()); + if (game.getStatus() === 'idle') { game.start(); isGameStarted = true; } else { game.restart(); + isGameStarted = true; } updateUI(); }); From 278c8a3c77ba18af01d96b3e051b59ed6c611804 Mon Sep 17 00:00:00 2001 From: Pasha Shchukin Date: Thu, 14 Nov 2024 21:50:16 +0200 Subject: [PATCH 6/7] add task solution --- src/scripts/main.js | 3 --- src/styles/main.scss | 3 ++- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/scripts/main.js b/src/scripts/main.js index 822e82f1b..c8dfe576a 100644 --- a/src/scripts/main.js +++ b/src/scripts/main.js @@ -91,9 +91,6 @@ function updateUI() { } document.querySelector('.button.start').addEventListener('click', () => { - // eslint-disable-next-line no-console - console.log('Game started:', game.getStatus()); - if (game.getStatus() === 'idle') { game.start(); isGameStarted = true; diff --git a/src/styles/main.scss b/src/styles/main.scss index c43f37dcf..f206fdbc2 100644 --- a/src/styles/main.scss +++ b/src/styles/main.scss @@ -139,7 +139,7 @@ h1 { .start { background: #1dae28; - font-size: 20px; + font-size: 18px; &:hover { background: #179921; @@ -148,6 +148,7 @@ h1 { .restart { background: #f1b2b2; + font-size: 17px; &:hover { background: #f87474; From 310e467acac2ef6f9c79074c34ba9e9616e36805 Mon Sep 17 00:00:00 2001 From: Pasha Shchukin Date: Sat, 16 Nov 2024 14:39:59 +0200 Subject: [PATCH 7/7] add task solution --- src/images/41NgOgTVblL.png | Bin 0 -> 23602 bytes src/index.html | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 src/images/41NgOgTVblL.png diff --git a/src/images/41NgOgTVblL.png b/src/images/41NgOgTVblL.png new file mode 100644 index 0000000000000000000000000000000000000000..8e692c1b0104c099bdf2e98536c3bd47e805e3cc GIT binary patch literal 23602 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

2VhR9O`N@*CW$DkaaL*_!9g;)S-D@!k4Lgo zpooj6%M#3h!w#tlehxHg1fPpP^4F~lu+^qsv5=na_>n+`3C70s@$6QaAHeJkYxvg+ zR{QB8W8SOPSv)f~uwXc821BGFnt$&P0zh*l7;YjtPpOj_f#-@tkD{iF@x#vKb#y(M zvx3iC9|4y{WDn6C&iKDFV7GsvO#}gs|4Un!h~|OGJbxIJ7}ph0o}|JRK)(9&;Q0`+ zfDsLzz<^pDD?Ww*urMqBM2aEw(I{q8(h3W_=x2U=T1tVS>5uEJolxnA=A&$o>oVkyZNu9Ek7$qUWwrnp$7jiw4gC_3xB`@?O9S z2Ch0$Jt=9_zaqf@zY&Oem+q0Lt78wiPH_W=O?~bUiMQ<+Gk^C$5a%!cH$CQ9& zRg>&7a)e)#(u2(K2@$+PQ^c2#Bz`s{@;d^fqW7Jmgk6GB1(Hz(S+<2>d9qOp9U<_A zB)W&_zwdI6tT+V;3`i-#+0zX(biG8dDk3MWSro(P{26A%V=8eBK!-dHO)gJt_aX;N zfr8A-O(K3#tuW!Cqh-tByB_eG38YYPC;I6>u=+F4Y85QWR-Ld5e`TE0M$6!bau!ns zuN~I&HJ)b^V#M^0_ROFuwmG^W!A@D!VG!izzA_7Lm^oUxQ1C()*LFF@^a1>{1zTbe zWa*Z6QacD^qUxl_^UcZ&QpB&VqnP}tO?oQ@l18%PGtBn`oh^UT(0rrkgAg|PBY}d` z_+uzom|4`g8zXg0L=%9>!-sdlmu)N@WekmR4WYHgyDylVf`%}{Z@3`^%&EL@qWt7MG8EgPsUWG zFDY#1U*qt?im3jvFmXUYna4mNK2ZAz3f5sIgzu%nKGnv#_u`C~PXm@AZHbEX3nTd7 z0l4{;^W$p~g!i5UNQhntLzvB3|FuLWsY$gu2zWm`9OsTCLUB2e_qz@Eao8&2m1{!9o`>h@D# zSWtA&+u3)K{A|CI6FQB6HT+cya<^bR5&g@7O^AWa}Zq(}=2 zBE2bu&=u)IK!Q{i3n(3I6hS&DRS;0=y(mQiK{`t4B=7P&-#OoV&ihCH$=Q2%cJ8yY zGds`B%fAh>#E^+>)n+H4$R+)Yi}z6%oswP{);w4`PP5MDRRQLjVoYR$mM1V=>Fel)sCQ$< z=x6K)EU(AW2|6At`CCH#u`VciOd?Qi>J;PZ!LH#T9X{Be7ktW{%^aaT9DNZfV)ox} zYf8Ob6cb>1QRNG%wtz*5qEJ1=#<{a7TdzHNDg>apv}G>}+!)m~!&JF6sDr%*BS0HD zLZWz4OmtrY8jxv-*6NFTzf-MZF?O+PFd$)u51}84(>(g{+W{i+{aB#LGdx}tJmel- ztC?klRke9VTJ3=>b=RM!jkc7J+c5T%M|3zaI26;*gHBsOELAug+8|pd#QnVlnLP?+-gi1jCO>(XpeyOv0C% zZ=h&5=+t2@l&i(mY1WPN@<_1QYIG6p(XNDp>!@bGuFh?`w;NUuk6Kd#r{!7hz9EfJ zLOX(wQ``YOVYea-X^*}fp8v7X1Q?kUxS|hf9x7CH>XCCD5fuffC>|Hw9-YQhQ2U*dL2fX!r@_`p8O>xNl zdvyTgxDTBa)res6r@4$EVQf6Kq@{VjiE+J-@(etVmu=qi%fI)ePnWs!&`R4BEu_hQ zxih>wkYJ;?TJ?Sd9>59`@{w}P`%VA`LBI&H6(#wiw z+D&y~gO^y6ZMQoh^tnMW(WgUcU^uD@oQuQO4SnA@#H|D};)Ab|Gi^0X=~R^`s{oq& z#y0N9PIPFHWB^d*z{bZtA+-QtYaPugjje*5sNb>3QxOO6>3*Lr6OOx(TTV)S>$IXl zb9bk#I)hx3d@TYDtsT__c&+~Hvze3a7|wkb%KzM32PGpo`rVVY zpkdpsp4TqwHl(_lR}BPcE{Vu1c3cZBFB_cZHYYkaz+;oR+aJFuE0FJ@{v28Rgnpl1E{3SqQy|&M{9-zmxW;6v#CwWwzYf#8>yN>1w0qWc+RD7g-zmGe_un z3q1Jz(@iJykL;u>fDRq~?TvNc62b+!ab;%Z&$%>hOGMI7hf5^oRC;-+F9i?aN6F+^ z*_W6|OkMpFiG2Vy+HckkcKkFFYFbzc`+vsr@m)EVyQ-BDO{#K8mz{IUgB`(6E{Qsj zUwCe1P~XFMqch=8zzMc0zD3nVtHJTjjk-<6yoqvp?5b>WsJlJ3J9m2``}jw!&gdQ6 zIra30knCAt5%!4;e{zJZ-j~b8O>~Xjm3~@6$x$9v)~)?I9|TT6bBDcKC=v7`66}S! zwwq8+_Xq&b|2H7W$~Zl1GUJ~S9rsVPL=|%fq}!prkYoHnedgf&?U=nEfNOf_%x7dpb2w$% z8Dcm~+=8X9)Wo(GHkTI|BFA4qQ<> z^h)yEnp`Fjs%z7^f)-5UZJsFNHCuGOL2g@}Ybj7ZK#0NXZA*aAaRLB?0TnrhgSk}` zNt1dy%jK3Kx=t&h=b!e{$KTG~F*??**-G#~H|>LW0P;5WT)_Pi4c3{~_qEaAD zxYHU!@1Stp3>e_tZh_tA^|WvzPwIclZ_iYR%{IDVCrZ~F9}5u6s1NoII^}ICLbo#z zXiOz?>22erRnx+pQji%SfyCmvx&ICLclf_hyDICq0_<{Z>`12usTkWsJ2oI(aS;)^ zblTqN`2Kt%c4<>qEPvi*Z}Q$Re*F8pM4sg1;TJA{yfb8faCs%5_ldVa)syL&l89rC z4*45?l)Deyl?UCv1pnov^-i6L|GsN9tM6ea@Ims9)Dv#!hf@sS9Ue=98cHE;%C^QW zzETA$aOr`&9R{BArovz<+klp4da@($?2cD^at|5F`Mt4^lE0h5bN_h$2}x8}F7TJM zgf!vc6wb{OC}mq)L5{s`Z2KAx1X&L9>(02e8nM>_yvIjUj=-n`MfXVvMykqvkdz7c zAu}rNIzeNX;g3h7^D`gv3R888=xU)2wzW>GKzD!X=eGjCxYZ#m2525wit61HQ1$NQ zDb8Jb2NTTdFCuPA4UzfD)D z0-XHaHWk4+9e%j5XgtH8k)N{06@TAgF-4NXRPX>(_A29-_mk8i3}=~AB&*a#W*BQ# z(px&T``R%vsDdsIT%)iNY-N!_I&RK~Vr=Eko8Od-!-@v7=*5fWc#-b01eui#9W_eT*dJ7i`F!OtJ+r-CdE~ zmJ#zQ8H^Wp&;oV2LI;wv9id>1X`mAyPS=8}AZlZ z+HoV_4i<+i)8gVkts-MvexHG7Mg4Zrj*rAQ-#Uc{@o4w`b#EjT@0$BuE~ti;_%5%g z&t~kv(9C}b-ZOA|BHvm#SF+z@Ojizip3e)g${7O5RVvmbHY`*W@a6lRfcj&G?;8?M+8Oa`mFukEL6`n7rdYAo*0>f!$1gn?+*Hr8{ zqEw?WS*r(x@btx`>^?`7YiG8Y0z>e_d4o#(EKg~e`OxC9dp{#&4OdK(K(G^UN@hZd z=F7crvM`_KtSf3 z^c~g#9iR0nuk+SvYs2o;4G~clve2p^bm?9mFF%bizW<6UOtGKCURh}XrK}Mo4fQv4 ztHI3G1;*ET{!9i$zi5A!b!uHSPkdOB>y90(|$FTNm zj9=i^Tazph>0*2p3@*>EisZHqC-q5CCXIkh$)AjpL%9~`b2vwR(x078?KoGjqvqMcx z9h8%LN5Gg~33qdH-uc%n$fF&Zyx3|E-f(qi^OSGZnvSV=!tl-mI|yrzkdqGzjOBpG zdDjy-BMlq4x4O1v4w!Xs(Y2wq;`FGmrUuurH<#`UW9kddPd^}f-OxRkU4(#-C199F^6B0W4`z9c$*kVv?F&wZ+R$j{bdrYbJ{RA^ww zJCcaw4RN`3-e14ocaQmdlZ~ABs$J= zDQ?<|R~sc)!SVd|7zg^C$DZNL>J>uT;~2Jz;&7jeu}v77j#_u!M0)!?71j;sf1o5q z;jPgSj;5Ed;~2Fq_VcAT`y9+3RK%H6;tGn}5Y5lPY_EH2J>k0RRNSGVa*ADG@g;{2 z>5KQLn$$+Xg%V6%KJv6f#|NoUIO?Mdm_pxu1Mlx1qX zJuZ^7_Zww6GwGY=gGurZGi>%cl0E1xJ0XppjI|8`mm;bf97^J6d(78%xOQV2o?F5>RFI$E~ftxK*cLeN$>k2+M)O_6_%vU zkaL6=nTgAuls5wK99)Cu7OBn-gi0=ev6Q=#i&* z4eaZ=`n13g+JtIzXvRpT+1asWX`Ct7{|EO!O)Jndq*%;Bp}-4!5cu<%9U{m_xUDWz zwBst(6#sh16$;eVXh7F5&|z1UM)aQ+?5g9Nntud&MOq7Qx_;6#Flg0(*x~vxiK#Y9 z%?K26ectnaYk%XCV)DxOd%^SPrQSR^PGhcwyrO%)X8O}Pn_8@Yn(fKag~BpzN1j{5 z9=lGBu?TlAb-w#6`A5a%f6pMpvyQI=jeE zYijlWx~`f3^Km=WDEH=NZ)!DmsQ?KJZbo9>Z^L@aC;9qJaVys)9+0NLGB83yi%eLj zEt8xq=~>ce{{2GcH3#XIty%+QRj+>py=90r%9ZcW7Ea=UQVhpHvB+W^O!^v+ucGDW z`~v5|D=;;x{1aRb&L73i{=z2tVx0WD1<$2IU7n|)u)1__#%_I`<>>@xXEsfvCEh~i z+K61bq<;t$CP9*8A?ExeU3OR3N*ilInHYa+T|8CDEndT_OI`Eyyowe^*7Tg>Fzfqy z5`JZ8&91MeO1%tCSz>$UWBi@`52q<)&lllCxf86i5iX z1ze^xaGw3gwJBx7Obpf`RPp#y$227Tt5;vKi1aYGpQ2@RPJwe5=a*ZLp-El%^BRP0 ziQ%p`F^yNdWpTpJNr@kVW{M`cL48K#kX+)BTzmoCnYLmCWK^Xrn`!?lJ}p`xL37_ z5MIBEeC-eKG(c!83SU9!pZpQ?akbZN#(BKQrNBC7y>3y-e9ImEP~5SAkt*}uq5)?; zl<)xE_Ron|5~a)iN1>NsMWWr=7h30n=!-;VM(Y}=xP}SIg2YI(Aa5?7!Ao7rH-$IO zfpk2!L~MRn|Dy)ySHUQ6M-TdMF)`ZO9amH%F)8a1a#j{M2bQ5^cpS}qk?g|cQ_)PPJgx#NTr zk4}k9GZHJdl7441428WO2YvxX0?}M-u8y=Yy#|OjM~PG77O9k$($Oz z4qDXffVC(zT{03AZ^$IpdzA{mf6&>pltypKmCvUt6%&&t4vFMQiswk=q**nFiE7i4 zbbBF4|4-|VCnuaXcp7GVve8H9a$NdD8Z#m~s)D{Ig9=NUb|7-;BSkn-+QdA*M|gOl zlePuZ4f7||0X`8_j%CjvUz#M+z3dxSQ$KIM#MRV$Lc(;mV~t5Fy)n_zzJ<+6_AsQZ z?{!}@A2aO_Rn+faJSwEQbj(tc9$wsM3jM`N2bRV4mF3!n$Q^P-3XESP-K^GG|A%cE z1F`c)`ie4a2bt2h-(<25=~o^%OpGf+P&;BNL^}$D?qDhue5MI(6tN>`*>M7IfU2t4~zCKz0XB>ymV$8e49OgFbAD za6&|7zvfUEyfY%EoeZK-OeHCtDNyCF(h7v7*_eJ=)-4P=mw9DU=w@Wo_wIFjm-*8) z`;`9xqE&a<;G_qAE}sdNCbJPDI{r$4px1u^7Dgkp(m%K)-q{4Yw*~*#W~^J3kd5$t z{fq@U`;;h4u%QMmz`SBw@ST*fA|Xy)Xajc0PT&c)1A{>!;Z+pLLpF@OWfh%PkErm!ISE*6W4jY|<6NnazuB8JkG zVEmWpT*&Ec5TX5Vb9O5Y^JzeA%d-i)Sv9XY{eZ=CVz%ov-Y!xF$O~=)J$P=+*z7dN-C$;+%AH);k$3spWOm06urJlktEzJ zlA#!9E4=sYX9U}>C`VtoLJCtjSJL=Hu&~TI zV~Em);qxOY{WG{_Ed%_(e5(jT3^LQY;xZf6vAU(SZI)y-N-((?f=G z$eipQ@b#-c+29!M5J|(H3zn1+57K(s#L+c<$zTKUo{xzwqCl_zi#51}p-`aZTAKIL T?(tq=-$MqMOfV(dj#2*u>!7=M literal 0 HcmV?d00001 diff --git a/src/index.html b/src/index.html index c7446c220..cb8eaab14 100644 --- a/src/index.html +++ b/src/index.html @@ -13,7 +13,7 @@ />