diff --git a/dist/main.css b/dist/main.css index daedcff..874d817 100644 --- a/dist/main.css +++ b/dist/main.css @@ -7,15 +7,6 @@ } body { - /* background: rgb(236,190,70); - background: radial-gradient(circle, rgba(170, 168, 161, 0.942) 6%, rgb(241, 236, 225) 90%); */ - /* background-color: #EEEE; */ - /* background-color: #b8c6db; - background-image: linear-gradient(315deg, #b8c6db 0%, #f5f7fa 74%); */ - /* background-color: #ffffff; - background-image: linear-gradient(315deg, #ffffff 0%, #d7e1ec 74%); */ - /* background-color: #2f4353; - background-image: linear-gradient(315deg, #2f4353 0%, #d2ccc4 74%); */ background-color: #aee1f9; background-image: linear-gradient(315deg, #aee1f9 0%, #f6ebe6 74%); margin: 1px; @@ -60,8 +51,8 @@ header { #board { display: grid; grid-template-columns: repeat(5, 1fr); - /* five equal 'fractioned' tracks */ - box-sizing: border-box; + /* equal 'fractioned' tracks */ + box-sizing: content-box; /*within container */ padding: 0px; /* border: 2px solid black; */ @@ -145,7 +136,7 @@ header { .modal__howTo { height: 100%; - width: 100%; + max-width: 100%; display: flex; position: fixed; background-color: rgba(0, 0, 0, 0.25); @@ -169,7 +160,7 @@ header { font-size: 1rem; color: #302f2f; z-index: 4; - overflow-y: scroll; + overflow: auto; } .modal__fill-active { diff --git a/dist/main.js b/dist/main.js index 7180c1b..04587ed 100644 --- a/dist/main.js +++ b/dist/main.js @@ -27,7 +27,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var core /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ Board; }\n/* harmony export */ });\n/* harmony import */ var core_js_modules_es_array_concat_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.concat.js */ \"./node_modules/core-js/modules/es.array.concat.js\");\n/* harmony import */ var core_js_modules_es_array_concat_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_concat_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _piece__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./piece */ \"./src/scripts/piece.js\");\n\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\n // import { Player } from \"./player\";\n\nvar Board = /*#__PURE__*/function () {\n function Board() {\n _classCallCheck(this, Board);\n\n // this.player = currentPlayer;\n this.grid = [];\n\n for (var i = 0; i < 5; i++) {\n var row = [];\n\n for (var j = 0; j < 5; j++) {\n var col = null;\n row.push(col);\n }\n\n this.grid.push(row);\n }\n\n window.Piece = _piece__WEBPACK_IMPORTED_MODULE_1__[\"default\"]; // add to window\n } // out of bounds only\n\n\n _createClass(Board, [{\n key: \"validPos\",\n value: function validPos(pos) {\n if (pos[0] < 0 || pos[0] > 4) return false;\n if (pos[1] < 0 || pos[1] > 4) return false;\n return true;\n } // returns true or color\n\n }, {\n key: \"isEmpty\",\n value: function isEmpty(pos) {\n var that = this;\n var gridPos = that.grid[pos[0]][pos[1]];\n\n if (gridPos === null) {\n return true;\n } else {\n return that.getPiece(pos).color;\n }\n }\n }, {\n key: \"getPiece\",\n value: function getPiece(pos) {\n return this.grid[pos[0]][pos[1]];\n }\n }, {\n key: \"viewPlacePiece\",\n value: function viewPlacePiece(pos, piece) {\n var that = this;\n var posStr = JSON.stringify(pos);\n var square = document.getElementById(posStr);\n var setPiece = document.createElement('div');\n setPiece.className = \"\".concat(piece.color, \"-\").concat(piece.type, \"-piece inactive-pawn\");\n setPiece.id = \"pawn\";\n square.appendChild(setPiece);\n that.grid[pos[0]][pos[1]] = piece; // redundant?\n } // after move gets rid of piece view\n\n }, {\n key: \"viewRemovePiece\",\n value: function viewRemovePiece(pos) {\n var that = this; // debugger;\n\n var posStr = JSON.stringify(pos);\n var square = document.getElementById(posStr);\n var child = square.firstChild; // setTimeout(() => square.child.style = 'opacity = 0.5' , 500);\n // setTimeout(() => square.child.style = 'opacity = 0.3' , 1000);\n // setTimeout(() => square.child.style = 'opacity = 0.2' , 2000);\n\n setTimeout(function () {\n return square.removeChild(child);\n }, 3000);\n }\n }, {\n key: \"placePiece\",\n value: function placePiece(pos, piece) {\n var that = this;\n\n if (that.isEmpty(pos)) {\n that.viewPlacePiece(pos, piece);\n piece.position = pos;\n return that.grid[pos[0]][pos[1]] = piece;\n } else {\n throw new Error('That position is not valid');\n }\n }\n }, {\n key: \"removePiece\",\n value: function removePiece(pos) {\n return this.grid[pos[0]][pos[1]] = null;\n }\n }, {\n key: \"movePiece\",\n value: function movePiece(posStart, posEnd) {\n // posStart = clicked piece\n // posEnd = clicked space (highlighted)\n // if current player color = selected piece color\n // if selected end position = valid (highlighted)\n // if move options include (highlighted)\n var pawn = this.getPiece(posStart);\n this.removePiece(posStart);\n return this.placePiece(posEnd, pawn);\n }\n }, {\n key: \"setBoard\",\n value: function setBoard() {\n var pawnB1 = new _piece__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('student', 'blue');\n var pawnB2 = new _piece__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('student', 'blue');\n var pawnB3 = new _piece__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('master', 'blue');\n var pawnB4 = new _piece__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('student', 'blue');\n var pawnB5 = new _piece__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('student', 'blue');\n this.placePiece([0, 0], pawnB1);\n this.placePiece([0, 1], pawnB2);\n this.placePiece([0, 2], pawnB3);\n this.placePiece([0, 3], pawnB4);\n this.placePiece([0, 4], pawnB5);\n var pawnR1 = new _piece__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('student', 'red');\n var pawnR2 = new _piece__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('student', 'red');\n var pawnR3 = new _piece__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('master', 'red');\n var pawnR4 = new _piece__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('student', 'red');\n var pawnR5 = new _piece__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('student', 'red');\n this.placePiece([4, 0], pawnR1);\n this.placePiece([4, 1], pawnR2);\n this.placePiece([4, 2], pawnR3);\n this.placePiece([4, 3], pawnR4);\n this.placePiece([4, 4], pawnR5);\n }\n }, {\n key: \"sayHi\",\n value: function sayHi() {\n console.log('hiiiiii');\n }\n }]);\n\n return Board;\n}(); // export default Board; \n//confirmed by printing below with fill: let col = [`[${i},${j}]`];\n// let board1 = new Board();\n// // assignment works!\n// board1.grid[1][1] = 'hello' // assign\n// console.log(board1.grid);\n// console.log(board1.grid[0][0]);\n// //validPos() works!\n// if (board1.validPos([1, 1])) {\n// console.log('valid!'); //valid\n// } else {\n// console.log('invalid!');\n// }\n// // getPiece() works!\n// console.log(board1.getPiece([1, 1]));\n// // isEmpty() works!\n// console.log(board1.isEmpty([1, 1]));\n// Board should appear: \n// TOP OPPONENT\n// [4, 0] [4, 1] [4, 2] [4, 3] [4, 4] \n// [3, 0] [3, 1] [3, 2] [3, 3] [3, 4] \n// [2, 0] [2, 1] [2, 2] [2, 3] [2, 4] \n// [1, 0] [1, 1] [1, 2] [1, 3] [1, 4] \n// [0, 0] [0, 1] [0, 2] [0, 3] [0, 4] \n// BOTTOM PLAYER\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvc2NyaXB0cy9ib2FyZC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Q0FDQTs7SUFFcUJDO0FBQ25CLG1CQUFjO0FBQUE7O0FBQ1o7QUFDQSxTQUFLQyxJQUFMLEdBQVksRUFBWjs7QUFDQSxTQUFLLElBQUlDLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUcsQ0FBcEIsRUFBdUJBLENBQUMsRUFBeEIsRUFBNEI7QUFDMUIsVUFBSUMsR0FBRyxHQUFHLEVBQVY7O0FBQ0EsV0FBSyxJQUFJQyxDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHLENBQXBCLEVBQXVCQSxDQUFDLEVBQXhCLEVBQTRCO0FBQzFCLFlBQUlDLEdBQUcsR0FBRyxJQUFWO0FBRUFGLFFBQUFBLEdBQUcsQ0FBQ0csSUFBSixDQUFTRCxHQUFUO0FBQ0Q7O0FBQ0QsV0FBS0osSUFBTCxDQUFVSyxJQUFWLENBQWVILEdBQWY7QUFDRDs7QUFDREksSUFBQUEsTUFBTSxDQUFDUixLQUFQLEdBQWVBLDhDQUFmLENBWlksQ0FZVztBQUN4QixJQUVEOzs7OztXQUNBLGtCQUFTUyxHQUFULEVBQWM7QUFDWixVQUFJQSxHQUFHLENBQUMsQ0FBRCxDQUFILEdBQVMsQ0FBVCxJQUFjQSxHQUFHLENBQUMsQ0FBRCxDQUFILEdBQVMsQ0FBM0IsRUFBOEIsT0FBTyxLQUFQO0FBQzlCLFVBQUlBLEdBQUcsQ0FBQyxDQUFELENBQUgsR0FBUyxDQUFULElBQWNBLEdBQUcsQ0FBQyxDQUFELENBQUgsR0FBUyxDQUEzQixFQUE4QixPQUFPLEtBQVA7QUFDOUIsYUFBTyxJQUFQO0FBQ0QsTUFFRDs7OztXQUNBLGlCQUFRQSxHQUFSLEVBQWE7QUFDWCxVQUFJQyxJQUFJLEdBQUcsSUFBWDtBQUNBLFVBQUlDLE9BQU8sR0FBR0QsSUFBSSxDQUFDUixJQUFMLENBQVVPLEdBQUcsQ0FBQyxDQUFELENBQWIsRUFBa0JBLEdBQUcsQ0FBQyxDQUFELENBQXJCLENBQWQ7O0FBQ0EsVUFBSUUsT0FBTyxLQUFLLElBQWhCLEVBQXNCO0FBQ3BCLGVBQU8sSUFBUDtBQUNELE9BRkQsTUFFTztBQUNMLGVBQVFELElBQUksQ0FBQ0UsUUFBTCxDQUFjSCxHQUFkLENBQUQsQ0FBcUJJLEtBQTVCO0FBQ0Q7QUFDRjs7O1dBRUQsa0JBQVNKLEdBQVQsRUFBYztBQUNaLGFBQU8sS0FBS1AsSUFBTCxDQUFVTyxHQUFHLENBQUMsQ0FBRCxDQUFiLEVBQWtCQSxHQUFHLENBQUMsQ0FBRCxDQUFyQixDQUFQO0FBQ0Q7OztXQUVELHdCQUFlQSxHQUFmLEVBQW9CSyxLQUFwQixFQUEyQjtBQUN6QixVQUFJSixJQUFJLEdBQUcsSUFBWDtBQUNBLFVBQUlLLE1BQU0sR0FBR0MsSUFBSSxDQUFDQyxTQUFMLENBQWVSLEdBQWYsQ0FBYjtBQUNBLFVBQUlTLE1BQU0sR0FBR0MsUUFBUSxDQUFDQyxjQUFULENBQXdCTCxNQUF4QixDQUFiO0FBQ0EsVUFBSU0sUUFBUSxHQUFHRixRQUFRLENBQUNHLGFBQVQsQ0FBdUIsS0FBdkIsQ0FBZjtBQUNBRCxNQUFBQSxRQUFRLENBQUNFLFNBQVQsYUFBd0JULEtBQUssQ0FBQ0QsS0FBOUIsY0FBdUNDLEtBQUssQ0FBQ1UsSUFBN0M7QUFDQUgsTUFBQUEsUUFBUSxDQUFDSSxFQUFULEdBQWMsTUFBZDtBQUNBUCxNQUFBQSxNQUFNLENBQUNRLFdBQVAsQ0FBbUJMLFFBQW5CO0FBQ0FYLE1BQUFBLElBQUksQ0FBQ1IsSUFBTCxDQUFVTyxHQUFHLENBQUMsQ0FBRCxDQUFiLEVBQWtCQSxHQUFHLENBQUMsQ0FBRCxDQUFyQixJQUE0QkssS0FBNUIsQ0FSeUIsQ0FRVTtBQUNwQyxNQUVEOzs7O1dBQ0EseUJBQWdCTCxHQUFoQixFQUFxQjtBQUNuQixVQUFJQyxJQUFJLEdBQUcsSUFBWCxDQURtQixDQUVuQjs7QUFDQSxVQUFJSyxNQUFNLEdBQUdDLElBQUksQ0FBQ0MsU0FBTCxDQUFlUixHQUFmLENBQWI7QUFDQSxVQUFJUyxNQUFNLEdBQUdDLFFBQVEsQ0FBQ0MsY0FBVCxDQUF3QkwsTUFBeEIsQ0FBYjtBQUNBLFVBQUlZLEtBQUssR0FBR1QsTUFBTSxDQUFDVSxVQUFuQixDQUxtQixDQU9uQjtBQUNBO0FBQ0E7O0FBQ0FDLE1BQUFBLFVBQVUsQ0FBQztBQUFBLGVBQU1YLE1BQU0sQ0FBQ1ksV0FBUCxDQUFtQkgsS0FBbkIsQ0FBTjtBQUFBLE9BQUQsRUFBa0MsSUFBbEMsQ0FBVjtBQUVEOzs7V0FFRCxvQkFBV2xCLEdBQVgsRUFBZ0JLLEtBQWhCLEVBQXVCO0FBQ3JCLFVBQUlKLElBQUksR0FBRyxJQUFYOztBQUNBLFVBQUlBLElBQUksQ0FBQ3FCLE9BQUwsQ0FBYXRCLEdBQWIsQ0FBSixFQUF1QjtBQUNyQkMsUUFBQUEsSUFBSSxDQUFDc0IsY0FBTCxDQUFvQnZCLEdBQXBCLEVBQXlCSyxLQUF6QjtBQUNBQSxRQUFBQSxLQUFLLENBQUNtQixRQUFOLEdBQWlCeEIsR0FBakI7QUFDQSxlQUFRQyxJQUFJLENBQUNSLElBQUwsQ0FBVU8sR0FBRyxDQUFDLENBQUQsQ0FBYixFQUFrQkEsR0FBRyxDQUFDLENBQUQsQ0FBckIsSUFBNEJLLEtBQXBDO0FBQ0QsT0FKRCxNQUlPO0FBQ0wsY0FBTSxJQUFJb0IsS0FBSixDQUFVLDRCQUFWLENBQU47QUFDRDtBQUNGOzs7V0FFRCxxQkFBWXpCLEdBQVosRUFBaUI7QUFDZixhQUFRLEtBQUtQLElBQUwsQ0FBVU8sR0FBRyxDQUFDLENBQUQsQ0FBYixFQUFrQkEsR0FBRyxDQUFDLENBQUQsQ0FBckIsSUFBNEIsSUFBcEM7QUFDRDs7O1dBRUQsbUJBQVUwQixRQUFWLEVBQW9CQyxNQUFwQixFQUE0QjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBSUMsSUFBSSxHQUFHLEtBQUt6QixRQUFMLENBQWN1QixRQUFkLENBQVg7QUFDQSxXQUFLRyxXQUFMLENBQWlCSCxRQUFqQjtBQUNBLGFBQU8sS0FBS0ksVUFBTCxDQUFnQkgsTUFBaEIsRUFBd0JDLElBQXhCLENBQVA7QUFDRDs7O1dBR0Qsb0JBQVc7QUFDVCxVQUFNRyxNQUFNLEdBQUcsSUFBSXhDLDhDQUFKLENBQVUsU0FBVixFQUFxQixNQUFyQixDQUFmO0FBQ0EsVUFBTXlDLE1BQU0sR0FBRyxJQUFJekMsOENBQUosQ0FBVSxTQUFWLEVBQXFCLE1BQXJCLENBQWY7QUFDQSxVQUFNMEMsTUFBTSxHQUFHLElBQUkxQyw4Q0FBSixDQUFVLFFBQVYsRUFBb0IsTUFBcEIsQ0FBZjtBQUNBLFVBQU0yQyxNQUFNLEdBQUcsSUFBSTNDLDhDQUFKLENBQVUsU0FBVixFQUFxQixNQUFyQixDQUFmO0FBQ0EsVUFBTTRDLE1BQU0sR0FBRyxJQUFJNUMsOENBQUosQ0FBVSxTQUFWLEVBQXFCLE1BQXJCLENBQWY7QUFFQSxXQUFLdUMsVUFBTCxDQUFnQixDQUFDLENBQUQsRUFBSSxDQUFKLENBQWhCLEVBQXdCQyxNQUF4QjtBQUVBLFdBQUtELFVBQUwsQ0FBZ0IsQ0FBQyxDQUFELEVBQUksQ0FBSixDQUFoQixFQUF3QkUsTUFBeEI7QUFDQSxXQUFLRixVQUFMLENBQWdCLENBQUMsQ0FBRCxFQUFJLENBQUosQ0FBaEIsRUFBd0JHLE1BQXhCO0FBQ0EsV0FBS0gsVUFBTCxDQUFnQixDQUFDLENBQUQsRUFBSSxDQUFKLENBQWhCLEVBQXdCSSxNQUF4QjtBQUNBLFdBQUtKLFVBQUwsQ0FBZ0IsQ0FBQyxDQUFELEVBQUksQ0FBSixDQUFoQixFQUF3QkssTUFBeEI7QUFFQSxVQUFNQyxNQUFNLEdBQUcsSUFBSTdDLDhDQUFKLENBQVUsU0FBVixFQUFxQixLQUFyQixDQUFmO0FBQ0EsVUFBTThDLE1BQU0sR0FBRyxJQUFJOUMsOENBQUosQ0FBVSxTQUFWLEVBQXFCLEtBQXJCLENBQWY7QUFDQSxVQUFNK0MsTUFBTSxHQUFHLElBQUkvQyw4Q0FBSixDQUFVLFFBQVYsRUFBb0IsS0FBcEIsQ0FBZjtBQUNBLFVBQU1nRCxNQUFNLEdBQUcsSUFBSWhELDhDQUFKLENBQVUsU0FBVixFQUFxQixLQUFyQixDQUFmO0FBQ0EsVUFBTWlELE1BQU0sR0FBRyxJQUFJakQsOENBQUosQ0FBVSxTQUFWLEVBQXFCLEtBQXJCLENBQWY7QUFFQSxXQUFLdUMsVUFBTCxDQUFnQixDQUFDLENBQUQsRUFBSSxDQUFKLENBQWhCLEVBQXdCTSxNQUF4QjtBQUNBLFdBQUtOLFVBQUwsQ0FBZ0IsQ0FBQyxDQUFELEVBQUksQ0FBSixDQUFoQixFQUF3Qk8sTUFBeEI7QUFDQSxXQUFLUCxVQUFMLENBQWdCLENBQUMsQ0FBRCxFQUFJLENBQUosQ0FBaEIsRUFBd0JRLE1BQXhCO0FBQ0EsV0FBS1IsVUFBTCxDQUFnQixDQUFDLENBQUQsRUFBSSxDQUFKLENBQWhCLEVBQXdCUyxNQUF4QjtBQUNBLFdBQUtULFVBQUwsQ0FBZ0IsQ0FBQyxDQUFELEVBQUksQ0FBSixDQUFoQixFQUF3QlUsTUFBeEI7QUFFRDs7O1dBRUQsaUJBQVE7QUFDTkMsTUFBQUEsT0FBTyxDQUFDQyxHQUFSLENBQVksU0FBWjtBQUNEOzs7O0tBS0g7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9vbml0YW1hX2pzLy4vc3JjL3NjcmlwdHMvYm9hcmQuanM/YmNiMCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUGllY2UgZnJvbSBcIi4vcGllY2VcIjtcbi8vIGltcG9ydCB7IFBsYXllciB9IGZyb20gXCIuL3BsYXllclwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCb2FyZCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIC8vIHRoaXMucGxheWVyID0gY3VycmVudFBsYXllcjtcbiAgICB0aGlzLmdyaWQgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDU7IGkrKykge1xuICAgICAgbGV0IHJvdyA9IFtdO1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCA1OyBqKyspIHtcbiAgICAgICAgbGV0IGNvbCA9IG51bGw7XG5cbiAgICAgICAgcm93LnB1c2goY29sKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZ3JpZC5wdXNoKHJvdyk7XG4gICAgfVxuICAgIHdpbmRvdy5QaWVjZSA9IFBpZWNlOyAgLy8gYWRkIHRvIHdpbmRvd1xuICB9XG5cbiAgLy8gb3V0IG9mIGJvdW5kcyBvbmx5XG4gIHZhbGlkUG9zKHBvcykge1xuICAgIGlmIChwb3NbMF0gPCAwIHx8IHBvc1swXSA+IDQpIHJldHVybiBmYWxzZTtcbiAgICBpZiAocG9zWzFdIDwgMCB8fCBwb3NbMV0gPiA0KSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyByZXR1cm5zIHRydWUgb3IgY29sb3JcbiAgaXNFbXB0eShwb3MpIHtcbiAgICBsZXQgdGhhdCA9IHRoaXM7XG4gICAgbGV0IGdyaWRQb3MgPSB0aGF0LmdyaWRbcG9zWzBdXVtwb3NbMV1dO1xuICAgIGlmIChncmlkUG9zID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICh0aGF0LmdldFBpZWNlKHBvcykpLmNvbG9yO1xuICAgIH1cbiAgfVxuXG4gIGdldFBpZWNlKHBvcykge1xuICAgIHJldHVybiB0aGlzLmdyaWRbcG9zWzBdXVtwb3NbMV1dO1xuICB9XG5cbiAgdmlld1BsYWNlUGllY2UocG9zLCBwaWVjZSkge1xuICAgIGxldCB0aGF0ID0gdGhpcztcbiAgICBsZXQgcG9zU3RyID0gSlNPTi5zdHJpbmdpZnkocG9zKTtcbiAgICBsZXQgc3F1YXJlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocG9zU3RyKTtcbiAgICBsZXQgc2V0UGllY2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBzZXRQaWVjZS5jbGFzc05hbWUgPSBgJHtwaWVjZS5jb2xvcn0tJHtwaWVjZS50eXBlfS1waWVjZSBpbmFjdGl2ZS1wYXduYDtcbiAgICBzZXRQaWVjZS5pZCA9IFwicGF3blwiO1xuICAgIHNxdWFyZS5hcHBlbmRDaGlsZChzZXRQaWVjZSk7XG4gICAgdGhhdC5ncmlkW3Bvc1swXV1bcG9zWzFdXSA9IHBpZWNlOyAvLyByZWR1bmRhbnQ/XG4gIH1cblxuICAvLyBhZnRlciBtb3ZlIGdldHMgcmlkIG9mIHBpZWNlIHZpZXdcbiAgdmlld1JlbW92ZVBpZWNlKHBvcykge1xuICAgIGxldCB0aGF0ID0gdGhpcztcbiAgICAvLyBkZWJ1Z2dlcjtcbiAgICBsZXQgcG9zU3RyID0gSlNPTi5zdHJpbmdpZnkocG9zKTtcbiAgICBsZXQgc3F1YXJlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocG9zU3RyKTtcbiAgICBsZXQgY2hpbGQgPSBzcXVhcmUuZmlyc3RDaGlsZDtcblxuICAgIC8vIHNldFRpbWVvdXQoKCkgPT4gc3F1YXJlLmNoaWxkLnN0eWxlID0gJ29wYWNpdHkgPSAwLjUnICwgNTAwKTtcbiAgICAvLyBzZXRUaW1lb3V0KCgpID0+IHNxdWFyZS5jaGlsZC5zdHlsZSA9ICdvcGFjaXR5ID0gMC4zJyAsIDEwMDApO1xuICAgIC8vIHNldFRpbWVvdXQoKCkgPT4gc3F1YXJlLmNoaWxkLnN0eWxlID0gJ29wYWNpdHkgPSAwLjInICwgMjAwMCk7XG4gICAgc2V0VGltZW91dCgoKSA9PiBzcXVhcmUucmVtb3ZlQ2hpbGQoY2hpbGQpLCAzMDAwKTtcblxuICB9XG5cbiAgcGxhY2VQaWVjZShwb3MsIHBpZWNlKSB7XG4gICAgbGV0IHRoYXQgPSB0aGlzO1xuICAgIGlmICh0aGF0LmlzRW1wdHkocG9zKSkge1xuICAgICAgdGhhdC52aWV3UGxhY2VQaWVjZShwb3MsIHBpZWNlKTtcbiAgICAgIHBpZWNlLnBvc2l0aW9uID0gcG9zO1xuICAgICAgcmV0dXJuICh0aGF0LmdyaWRbcG9zWzBdXVtwb3NbMV1dID0gcGllY2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoYXQgcG9zaXRpb24gaXMgbm90IHZhbGlkJyk7XG4gICAgfVxuICB9XG5cbiAgcmVtb3ZlUGllY2UocG9zKSB7XG4gICAgcmV0dXJuICh0aGlzLmdyaWRbcG9zWzBdXVtwb3NbMV1dID0gbnVsbCk7XG4gIH1cblxuICBtb3ZlUGllY2UocG9zU3RhcnQsIHBvc0VuZCkge1xuICAgIC8vIHBvc1N0YXJ0ID0gY2xpY2tlZCBwaWVjZVxuICAgIC8vIHBvc0VuZCA9IGNsaWNrZWQgc3BhY2UgKGhpZ2hsaWdodGVkKVxuICAgIC8vIGlmIGN1cnJlbnQgcGxheWVyIGNvbG9yID0gc2VsZWN0ZWQgcGllY2UgY29sb3JcbiAgICAvLyBpZiBzZWxlY3RlZCBlbmQgcG9zaXRpb24gPSB2YWxpZCAoaGlnaGxpZ2h0ZWQpXG4gICAgLy8gaWYgbW92ZSBvcHRpb25zIGluY2x1ZGUgKGhpZ2hsaWdodGVkKVxuICAgIGxldCBwYXduID0gdGhpcy5nZXRQaWVjZShwb3NTdGFydCk7XG4gICAgdGhpcy5yZW1vdmVQaWVjZShwb3NTdGFydCk7XG4gICAgcmV0dXJuIHRoaXMucGxhY2VQaWVjZShwb3NFbmQsIHBhd24pO1xuICB9XG5cblxuICBzZXRCb2FyZCgpIHtcbiAgICBjb25zdCBwYXduQjEgPSBuZXcgUGllY2UoJ3N0dWRlbnQnLCAnYmx1ZScpO1xuICAgIGNvbnN0IHBhd25CMiA9IG5ldyBQaWVjZSgnc3R1ZGVudCcsICdibHVlJyk7XG4gICAgY29uc3QgcGF3bkIzID0gbmV3IFBpZWNlKCdtYXN0ZXInLCAnYmx1ZScpO1xuICAgIGNvbnN0IHBhd25CNCA9IG5ldyBQaWVjZSgnc3R1ZGVudCcsICdibHVlJyk7XG4gICAgY29uc3QgcGF3bkI1ID0gbmV3IFBpZWNlKCdzdHVkZW50JywgJ2JsdWUnKTtcblxuICAgIHRoaXMucGxhY2VQaWVjZShbMCwgMF0sIHBhd25CMSk7XG5cbiAgICB0aGlzLnBsYWNlUGllY2UoWzAsIDFdLCBwYXduQjIpO1xuICAgIHRoaXMucGxhY2VQaWVjZShbMCwgMl0sIHBhd25CMyk7XG4gICAgdGhpcy5wbGFjZVBpZWNlKFswLCAzXSwgcGF3bkI0KTtcbiAgICB0aGlzLnBsYWNlUGllY2UoWzAsIDRdLCBwYXduQjUpO1xuXG4gICAgY29uc3QgcGF3blIxID0gbmV3IFBpZWNlKCdzdHVkZW50JywgJ3JlZCcpO1xuICAgIGNvbnN0IHBhd25SMiA9IG5ldyBQaWVjZSgnc3R1ZGVudCcsICdyZWQnKTtcbiAgICBjb25zdCBwYXduUjMgPSBuZXcgUGllY2UoJ21hc3RlcicsICdyZWQnKTtcbiAgICBjb25zdCBwYXduUjQgPSBuZXcgUGllY2UoJ3N0dWRlbnQnLCAncmVkJyk7XG4gICAgY29uc3QgcGF3blI1ID0gbmV3IFBpZWNlKCdzdHVkZW50JywgJ3JlZCcpO1xuXG4gICAgdGhpcy5wbGFjZVBpZWNlKFs0LCAwXSwgcGF3blIxKTtcbiAgICB0aGlzLnBsYWNlUGllY2UoWzQsIDFdLCBwYXduUjIpO1xuICAgIHRoaXMucGxhY2VQaWVjZShbNCwgMl0sIHBhd25SMyk7XG4gICAgdGhpcy5wbGFjZVBpZWNlKFs0LCAzXSwgcGF3blI0KTtcbiAgICB0aGlzLnBsYWNlUGllY2UoWzQsIDRdLCBwYXduUjUpO1xuXG4gIH1cblxuICBzYXlIaSgpIHtcbiAgICBjb25zb2xlLmxvZygnaGlpaWlpaScpO1xuICB9XG5cblxufVxuXG4vLyBleHBvcnQgZGVmYXVsdCBCb2FyZDsgXG5cbi8vY29uZmlybWVkIGJ5IHByaW50aW5nIGJlbG93IHdpdGggZmlsbDogbGV0IGNvbCA9IFtgWyR7aX0sJHtqfV1gXTtcbi8vIGxldCBib2FyZDEgPSBuZXcgQm9hcmQoKTtcblxuLy8gLy8gYXNzaWdubWVudCB3b3JrcyFcbi8vIGJvYXJkMS5ncmlkWzFdWzFdID0gJ2hlbGxvJyAvLyBhc3NpZ25cbi8vIGNvbnNvbGUubG9nKGJvYXJkMS5ncmlkKTtcbi8vIGNvbnNvbGUubG9nKGJvYXJkMS5ncmlkWzBdWzBdKTtcblxuXG4vLyAvL3ZhbGlkUG9zKCkgd29ya3MhXG4vLyAgaWYgKGJvYXJkMS52YWxpZFBvcyhbMSwgMV0pKSB7XG4vLyAgIGNvbnNvbGUubG9nKCd2YWxpZCEnKTsgIC8vdmFsaWRcbi8vIH0gZWxzZSB7XG4vLyAgIGNvbnNvbGUubG9nKCdpbnZhbGlkIScpO1xuLy8gfVxuXG4vLyAvLyBnZXRQaWVjZSgpIHdvcmtzIVxuLy8gY29uc29sZS5sb2coYm9hcmQxLmdldFBpZWNlKFsxLCAxXSkpO1xuXG4vLyAvLyBpc0VtcHR5KCkgd29ya3MhXG4vLyBjb25zb2xlLmxvZyhib2FyZDEuaXNFbXB0eShbMSwgMV0pKTtcblxuXG5cblxuXG5cbi8vIEJvYXJkIHNob3VsZCBhcHBlYXI6IFxuLy8gIFRPUCAgICAgICAgICAgT1BQT05FTlRcbi8vIFs0LCAwXSAgWzQsIDFdICBbNCwgMl0gIFs0LCAzXSAgWzQsIDRdICBcbi8vIFszLCAwXSAgWzMsIDFdICBbMywgMl0gIFszLCAzXSAgWzMsIDRdICBcbi8vIFsyLCAwXSAgWzIsIDFdICBbMiwgMl0gIFsyLCAzXSAgWzIsIDRdICBcbi8vIFsxLCAwXSAgWzEsIDFdICBbMSwgMl0gIFsxLCAzXSAgWzEsIDRdICBcbi8vIFswLCAwXSAgWzAsIDFdICBbMCwgMl0gIFswLCAzXSAgWzAsIDRdICBcbi8vIEJPVFRPTSAgICAgICAgICBQTEFZRVIiXSwibmFtZXMiOlsiUGllY2UiLCJCb2FyZCIsImdyaWQiLCJpIiwicm93IiwiaiIsImNvbCIsInB1c2giLCJ3aW5kb3ciLCJwb3MiLCJ0aGF0IiwiZ3JpZFBvcyIsImdldFBpZWNlIiwiY29sb3IiLCJwaWVjZSIsInBvc1N0ciIsIkpTT04iLCJzdHJpbmdpZnkiLCJzcXVhcmUiLCJkb2N1bWVudCIsImdldEVsZW1lbnRCeUlkIiwic2V0UGllY2UiLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NOYW1lIiwidHlwZSIsImlkIiwiYXBwZW5kQ2hpbGQiLCJjaGlsZCIsImZpcnN0Q2hpbGQiLCJzZXRUaW1lb3V0IiwicmVtb3ZlQ2hpbGQiLCJpc0VtcHR5Iiwidmlld1BsYWNlUGllY2UiLCJwb3NpdGlvbiIsIkVycm9yIiwicG9zU3RhcnQiLCJwb3NFbmQiLCJwYXduIiwicmVtb3ZlUGllY2UiLCJwbGFjZVBpZWNlIiwicGF3bkIxIiwicGF3bkIyIiwicGF3bkIzIiwicGF3bkI0IiwicGF3bkI1IiwicGF3blIxIiwicGF3blIyIiwicGF3blIzIiwicGF3blI0IiwicGF3blI1IiwiY29uc29sZSIsImxvZyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/scripts/board.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ Board; }\n/* harmony export */ });\n/* harmony import */ var core_js_modules_es_array_concat_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.concat.js */ \"./node_modules/core-js/modules/es.array.concat.js\");\n/* harmony import */ var core_js_modules_es_array_concat_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_concat_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _piece__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./piece */ \"./src/scripts/piece.js\");\n\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\n // import { Player } from \"./player\";\n\nvar Board = /*#__PURE__*/function () {\n function Board() {\n _classCallCheck(this, Board);\n\n // this.player = currentPlayer;\n this.grid = [];\n\n for (var i = 0; i < 5; i++) {\n var row = [];\n\n for (var j = 0; j < 5; j++) {\n var col = null;\n row.push(col);\n }\n\n this.grid.push(row);\n }\n\n this.redShrine = this.grid[4][2];\n this.blueShrine = this.grid[0][2];\n this.winStone = null;\n this.winStream = null;\n window.Piece = _piece__WEBPACK_IMPORTED_MODULE_1__[\"default\"]; // add to window\n } // out of bounds only\n\n\n _createClass(Board, [{\n key: \"validPos\",\n value: function validPos(pos) {\n if (pos[0] < 0 || pos[0] > 4) return false;\n if (pos[1] < 0 || pos[1] > 4) return false;\n return true;\n } // returns true or color\n\n }, {\n key: \"isEmpty\",\n value: function isEmpty(pos) {\n var that = this;\n var gridPos = that.grid[pos[0]][pos[1]];\n\n if (gridPos === null) {\n return true;\n } else {\n return that.getPiece(pos).color;\n }\n }\n }, {\n key: \"getPiece\",\n value: function getPiece(pos) {\n return this.grid[pos[0]][pos[1]];\n }\n }, {\n key: \"viewPlacePiece\",\n value: function viewPlacePiece(pos, piece) {\n var that = this;\n var posStr = JSON.stringify(pos);\n var square = document.getElementById(posStr);\n var setPiece = document.createElement('div');\n setPiece.className = \"\".concat(piece.color, \"-\").concat(piece.type, \"-piece inactive-pawn\");\n setPiece.id = \"pawn\";\n square.appendChild(setPiece);\n that.grid[pos[0]][pos[1]] = piece; // redundant?\n } // after move gets rid of piece view\n\n }, {\n key: \"viewRemovePiece\",\n value: function viewRemovePiece(pos) {\n var that = this;\n var posStr = JSON.stringify(pos);\n var square = document.getElementById(posStr);\n var child = square.firstChild;\n setTimeout(function () {\n return square.removeChild(child);\n }, 2000);\n }\n }, {\n key: \"placePiece\",\n value: function placePiece(pos, piece) {\n var that = this;\n\n if (that.isEmpty(pos)) {\n that.viewPlacePiece(pos, piece);\n piece.position = pos;\n return that.grid[pos[0]][pos[1]] = piece;\n }\n } // win condition capture\n\n }, {\n key: \"winStone\",\n value: function winStone(endPos, piece) {} // win condition shrine\n\n }, {\n key: \"winStream\",\n value: function winStream(endPos, piece) {\n if (piece.type === \"master\" && piece.color === \"blue\" && pos === this.redShrine) {\n this.winStream === \"blue\";\n } else if (piece.type === \"master\" && piece.color === \"red\" && pos === this.blueShrine) {\n this.winStream === \"red\";\n }\n }\n }, {\n key: \"removePiece\",\n value: function removePiece(pos) {\n return this.grid[pos[0]][pos[1]] = null;\n }\n }, {\n key: \"movePiece\",\n value: function movePiece(posStart, posEnd) {\n var pawn = this.getPiece(posStart);\n this.removePiece(posStart);\n return this.placePiece(posEnd, pawn);\n }\n }, {\n key: \"setBoard\",\n value: function setBoard() {\n var pawnB1 = new _piece__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('student', 'blue');\n var pawnB2 = new _piece__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('student', 'blue');\n var pawnB3 = new _piece__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('master', 'blue');\n var pawnB4 = new _piece__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('student', 'blue');\n var pawnB5 = new _piece__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('student', 'blue');\n this.placePiece([0, 0], pawnB1);\n this.placePiece([0, 1], pawnB2);\n this.placePiece([0, 2], pawnB3);\n this.placePiece([0, 3], pawnB4);\n this.placePiece([0, 4], pawnB5);\n var pawnR1 = new _piece__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('student', 'red');\n var pawnR2 = new _piece__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('student', 'red');\n var pawnR3 = new _piece__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('master', 'red');\n var pawnR4 = new _piece__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('student', 'red');\n var pawnR5 = new _piece__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('student', 'red');\n this.placePiece([4, 0], pawnR1);\n this.placePiece([4, 1], pawnR2);\n this.placePiece([4, 2], pawnR3);\n this.placePiece([4, 3], pawnR4);\n this.placePiece([4, 4], pawnR5);\n }\n }, {\n key: \"sayHi\",\n value: function sayHi() {\n console.log('hiiiiii');\n }\n }]);\n\n return Board;\n}(); // export default Board; \n//confirmed by printing below with fill: let col = [`[${i},${j}]`];\n// let board1 = new Board();\n// // assignment works!\n// board1.grid[1][1] = 'hello' // assign\n// console.log(board1.grid);\n// console.log(board1.grid[0][0]);\n// //validPos() works!\n// if (board1.validPos([1, 1])) {\n// console.log('valid!'); //valid\n// } else {\n// console.log('invalid!');\n// }\n// // getPiece() works!\n// console.log(board1.getPiece([1, 1]));\n// // isEmpty() works!\n// console.log(board1.isEmpty([1, 1]));\n// Board should appear: \n// TOP OPPONENT\n// [4, 0] [4, 1] [4, 2] [4, 3] [4, 4] \n// [3, 0] [3, 1] [3, 2] [3, 3] [3, 4] \n// [2, 0] [2, 1] [2, 2] [2, 3] [2, 4] \n// [1, 0] [1, 1] [1, 2] [1, 3] [1, 4] \n// [0, 0] [0, 1] [0, 2] [0, 3] [0, 4] \n// BOTTOM PLAYER\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QTtBQUNBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL29uaXRhbWFfanMvLi9zcmMvc2NyaXB0cy9ib2FyZC5qcz9iY2IwIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBQaWVjZSBmcm9tIFwiLi9waWVjZVwiO1xuLy8gaW1wb3J0IHsgUGxheWVyIH0gZnJvbSBcIi4vcGxheWVyXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJvYXJkIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgLy8gdGhpcy5wbGF5ZXIgPSBjdXJyZW50UGxheWVyO1xuICAgIHRoaXMuZ3JpZCA9IFtdOyAgIFxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNTsgaSsrKSB7XG4gICAgICBsZXQgcm93ID0gW107XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IDU7IGorKykge1xuICAgICAgICBsZXQgY29sID0gbnVsbDtcblxuICAgICAgICByb3cucHVzaChjb2wpO1xuICAgICAgfVxuICAgICAgdGhpcy5ncmlkLnB1c2gocm93KTtcbiAgICB9XG4gICAgdGhpcy5yZWRTaHJpbmUgPSB0aGlzLmdyaWRbNF1bMl07XG4gICAgdGhpcy5ibHVlU2hyaW5lID0gdGhpcy5ncmlkWzBdWzJdO1xuICAgIHRoaXMud2luU3RvbmUgPSBudWxsO1xuICAgIHRoaXMud2luU3RyZWFtID0gbnVsbDtcbiAgICB3aW5kb3cuUGllY2UgPSBQaWVjZTsgIC8vIGFkZCB0byB3aW5kb3dcbiAgfVxuXG4gIC8vIG91dCBvZiBib3VuZHMgb25seVxuICB2YWxpZFBvcyhwb3MpIHtcbiAgICBpZiAocG9zWzBdIDwgMCB8fCBwb3NbMF0gPiA0KSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHBvc1sxXSA8IDAgfHwgcG9zWzFdID4gNCkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gcmV0dXJucyB0cnVlIG9yIGNvbG9yXG4gIGlzRW1wdHkocG9zKSB7XG4gICAgbGV0IHRoYXQgPSB0aGlzO1xuICAgIGxldCBncmlkUG9zID0gdGhhdC5ncmlkW3Bvc1swXV1bcG9zWzFdXTtcbiAgICBpZiAoZ3JpZFBvcyA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAodGhhdC5nZXRQaWVjZShwb3MpKS5jb2xvcjtcbiAgICB9XG4gIH1cblxuICBnZXRQaWVjZShwb3MpIHtcbiAgICByZXR1cm4gdGhpcy5ncmlkW3Bvc1swXV1bcG9zWzFdXTtcbiAgfVxuXG4gIHZpZXdQbGFjZVBpZWNlKHBvcywgcGllY2UpIHtcbiAgICBsZXQgdGhhdCA9IHRoaXM7XG4gICAgbGV0IHBvc1N0ciA9IEpTT04uc3RyaW5naWZ5KHBvcyk7XG4gICAgbGV0IHNxdWFyZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHBvc1N0cik7XG4gICAgbGV0IHNldFBpZWNlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgc2V0UGllY2UuY2xhc3NOYW1lID0gYCR7cGllY2UuY29sb3J9LSR7cGllY2UudHlwZX0tcGllY2UgaW5hY3RpdmUtcGF3bmA7XG4gICAgc2V0UGllY2UuaWQgPSBcInBhd25cIjtcbiAgICBzcXVhcmUuYXBwZW5kQ2hpbGQoc2V0UGllY2UpO1xuICAgIHRoYXQuZ3JpZFtwb3NbMF1dW3Bvc1sxXV0gPSBwaWVjZTsgLy8gcmVkdW5kYW50P1xuICB9XG5cbiAgLy8gYWZ0ZXIgbW92ZSBnZXRzIHJpZCBvZiBwaWVjZSB2aWV3XG4gIHZpZXdSZW1vdmVQaWVjZShwb3MpIHtcbiAgICBsZXQgdGhhdCA9IHRoaXM7XG4gICAgbGV0IHBvc1N0ciA9IEpTT04uc3RyaW5naWZ5KHBvcyk7XG4gICAgbGV0IHNxdWFyZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHBvc1N0cik7XG4gICAgbGV0IGNoaWxkID0gc3F1YXJlLmZpcnN0Q2hpbGQ7XG4gICAgc2V0VGltZW91dCgoKSA9PiBzcXVhcmUucmVtb3ZlQ2hpbGQoY2hpbGQpLCAyMDAwKTtcbiAgfVxuXG4gIHBsYWNlUGllY2UocG9zLCBwaWVjZSkge1xuICAgIGxldCB0aGF0ID0gdGhpcztcbiAgICBpZiAodGhhdC5pc0VtcHR5KHBvcykpIHtcbiAgICAgIHRoYXQudmlld1BsYWNlUGllY2UocG9zLCBwaWVjZSk7XG4gICAgICBwaWVjZS5wb3NpdGlvbiA9IHBvcztcbiAgICAgIHJldHVybiAodGhhdC5ncmlkW3Bvc1swXV1bcG9zWzFdXSA9IHBpZWNlKTtcbiAgICB9XG4gIH1cbiAgXG4gIFxuICAvLyB3aW4gY29uZGl0aW9uIGNhcHR1cmVcbiAgd2luU3RvbmUoZW5kUG9zLCBwaWVjZSkge1xuXG4gIH1cblxuICAvLyB3aW4gY29uZGl0aW9uIHNocmluZVxuICB3aW5TdHJlYW0oZW5kUG9zLCBwaWVjZSkge1xuICAgIGlmIChwaWVjZS50eXBlID09PSBcIm1hc3RlclwiICYmIHBpZWNlLmNvbG9yID09PSBcImJsdWVcIiAmJiBwb3MgPT09IHRoaXMucmVkU2hyaW5lKSB7IFxuICAgICAgdGhpcy53aW5TdHJlYW0gPT09IFwiYmx1ZVwiO1xuICAgIH0gZWxzZSBpZiAocGllY2UudHlwZSA9PT0gXCJtYXN0ZXJcIiAmJiBwaWVjZS5jb2xvciA9PT0gXCJyZWRcIiAmJiBwb3MgPT09IHRoaXMuYmx1ZVNocmluZSkge1xuICAgICAgdGhpcy53aW5TdHJlYW0gPT09IFwicmVkXCI7XG4gICAgfVxuICB9XG5cbiAgcmVtb3ZlUGllY2UocG9zKSB7XG4gICAgcmV0dXJuICh0aGlzLmdyaWRbcG9zWzBdXVtwb3NbMV1dID0gbnVsbCk7XG4gIH1cblxuICBtb3ZlUGllY2UocG9zU3RhcnQsIHBvc0VuZCkge1xuICAgIGxldCBwYXduID0gdGhpcy5nZXRQaWVjZShwb3NTdGFydCk7XG4gICAgdGhpcy5yZW1vdmVQaWVjZShwb3NTdGFydCk7XG4gICAgcmV0dXJuIHRoaXMucGxhY2VQaWVjZShwb3NFbmQsIHBhd24pO1xuICB9XG5cblxuICBzZXRCb2FyZCgpIHtcbiAgICBjb25zdCBwYXduQjEgPSBuZXcgUGllY2UoJ3N0dWRlbnQnLCAnYmx1ZScpO1xuICAgIGNvbnN0IHBhd25CMiA9IG5ldyBQaWVjZSgnc3R1ZGVudCcsICdibHVlJyk7XG4gICAgY29uc3QgcGF3bkIzID0gbmV3IFBpZWNlKCdtYXN0ZXInLCAnYmx1ZScpO1xuICAgIGNvbnN0IHBhd25CNCA9IG5ldyBQaWVjZSgnc3R1ZGVudCcsICdibHVlJyk7XG4gICAgY29uc3QgcGF3bkI1ID0gbmV3IFBpZWNlKCdzdHVkZW50JywgJ2JsdWUnKTtcblxuICAgIHRoaXMucGxhY2VQaWVjZShbMCwgMF0sIHBhd25CMSk7XG5cbiAgICB0aGlzLnBsYWNlUGllY2UoWzAsIDFdLCBwYXduQjIpO1xuICAgIHRoaXMucGxhY2VQaWVjZShbMCwgMl0sIHBhd25CMyk7XG4gICAgdGhpcy5wbGFjZVBpZWNlKFswLCAzXSwgcGF3bkI0KTtcbiAgICB0aGlzLnBsYWNlUGllY2UoWzAsIDRdLCBwYXduQjUpO1xuXG4gICAgY29uc3QgcGF3blIxID0gbmV3IFBpZWNlKCdzdHVkZW50JywgJ3JlZCcpO1xuICAgIGNvbnN0IHBhd25SMiA9IG5ldyBQaWVjZSgnc3R1ZGVudCcsICdyZWQnKTtcbiAgICBjb25zdCBwYXduUjMgPSBuZXcgUGllY2UoJ21hc3RlcicsICdyZWQnKTtcbiAgICBjb25zdCBwYXduUjQgPSBuZXcgUGllY2UoJ3N0dWRlbnQnLCAncmVkJyk7XG4gICAgY29uc3QgcGF3blI1ID0gbmV3IFBpZWNlKCdzdHVkZW50JywgJ3JlZCcpO1xuXG4gICAgdGhpcy5wbGFjZVBpZWNlKFs0LCAwXSwgcGF3blIxKTtcbiAgICB0aGlzLnBsYWNlUGllY2UoWzQsIDFdLCBwYXduUjIpO1xuICAgIHRoaXMucGxhY2VQaWVjZShbNCwgMl0sIHBhd25SMyk7XG4gICAgdGhpcy5wbGFjZVBpZWNlKFs0LCAzXSwgcGF3blI0KTtcbiAgICB0aGlzLnBsYWNlUGllY2UoWzQsIDRdLCBwYXduUjUpO1xuXG4gIH1cblxuICBzYXlIaSgpIHtcbiAgICBjb25zb2xlLmxvZygnaGlpaWlpaScpO1xuICB9XG5cblxufVxuXG4vLyBleHBvcnQgZGVmYXVsdCBCb2FyZDsgXG5cbi8vY29uZmlybWVkIGJ5IHByaW50aW5nIGJlbG93IHdpdGggZmlsbDogbGV0IGNvbCA9IFtgWyR7aX0sJHtqfV1gXTtcbi8vIGxldCBib2FyZDEgPSBuZXcgQm9hcmQoKTtcblxuLy8gLy8gYXNzaWdubWVudCB3b3JrcyFcbi8vIGJvYXJkMS5ncmlkWzFdWzFdID0gJ2hlbGxvJyAvLyBhc3NpZ25cbi8vIGNvbnNvbGUubG9nKGJvYXJkMS5ncmlkKTtcbi8vIGNvbnNvbGUubG9nKGJvYXJkMS5ncmlkWzBdWzBdKTtcblxuXG4vLyAvL3ZhbGlkUG9zKCkgd29ya3MhXG4vLyAgaWYgKGJvYXJkMS52YWxpZFBvcyhbMSwgMV0pKSB7XG4vLyAgIGNvbnNvbGUubG9nKCd2YWxpZCEnKTsgIC8vdmFsaWRcbi8vIH0gZWxzZSB7XG4vLyAgIGNvbnNvbGUubG9nKCdpbnZhbGlkIScpO1xuLy8gfVxuXG4vLyAvLyBnZXRQaWVjZSgpIHdvcmtzIVxuLy8gY29uc29sZS5sb2coYm9hcmQxLmdldFBpZWNlKFsxLCAxXSkpO1xuXG4vLyAvLyBpc0VtcHR5KCkgd29ya3MhXG4vLyBjb25zb2xlLmxvZyhib2FyZDEuaXNFbXB0eShbMSwgMV0pKTtcblxuXG5cblxuXG5cbi8vIEJvYXJkIHNob3VsZCBhcHBlYXI6IFxuLy8gIFRPUCAgICAgICAgICAgT1BQT05FTlRcbi8vIFs0LCAwXSAgWzQsIDFdICBbNCwgMl0gIFs0LCAzXSAgWzQsIDRdICBcbi8vIFszLCAwXSAgWzMsIDFdICBbMywgMl0gIFszLCAzXSAgWzMsIDRdICBcbi8vIFsyLCAwXSAgWzIsIDFdICBbMiwgMl0gIFsyLCAzXSAgWzIsIDRdICBcbi8vIFsxLCAwXSAgWzEsIDFdICBbMSwgMl0gIFsxLCAzXSAgWzEsIDRdICBcbi8vIFswLCAwXSAgWzAsIDFdICBbMCwgMl0gIFswLCAzXSAgWzAsIDRdICBcbi8vIEJPVFRPTSAgICAgICAgICBQTEFZRVIiXSwibmFtZXMiOlsiUGllY2UiLCJCb2FyZCIsImdyaWQiLCJpIiwicm93IiwiaiIsImNvbCIsInB1c2giLCJyZWRTaHJpbmUiLCJibHVlU2hyaW5lIiwid2luU3RvbmUiLCJ3aW5TdHJlYW0iLCJ3aW5kb3ciLCJwb3MiLCJ0aGF0IiwiZ3JpZFBvcyIsImdldFBpZWNlIiwiY29sb3IiLCJwaWVjZSIsInBvc1N0ciIsIkpTT04iLCJzdHJpbmdpZnkiLCJzcXVhcmUiLCJkb2N1bWVudCIsImdldEVsZW1lbnRCeUlkIiwic2V0UGllY2UiLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NOYW1lIiwidHlwZSIsImlkIiwiYXBwZW5kQ2hpbGQiLCJjaGlsZCIsImZpcnN0Q2hpbGQiLCJzZXRUaW1lb3V0IiwicmVtb3ZlQ2hpbGQiLCJpc0VtcHR5Iiwidmlld1BsYWNlUGllY2UiLCJwb3NpdGlvbiIsImVuZFBvcyIsInBvc1N0YXJ0IiwicG9zRW5kIiwicGF3biIsInJlbW92ZVBpZWNlIiwicGxhY2VQaWVjZSIsInBhd25CMSIsInBhd25CMiIsInBhd25CMyIsInBhd25CNCIsInBhd25CNSIsInBhd25SMSIsInBhd25SMiIsInBhd25SMyIsInBhd25SNCIsInBhd25SNSIsImNvbnNvbGUiLCJsb2ciXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/scripts/board.js\n"); /***/ }), @@ -49,7 +49,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ Game; }\n/* harmony export */ });\n/* harmony import */ var core_js_modules_es_array_slice_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.slice.js */ \"./node_modules/core-js/modules/es.array.slice.js\");\n/* harmony import */ var core_js_modules_es_array_slice_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_slice_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.object.to-string.js */ \"./node_modules/core-js/modules/es.object.to-string.js\");\n/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/web.dom-collections.for-each.js */ \"./node_modules/core-js/modules/web.dom-collections.for-each.js\");\n/* harmony import */ var core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.regexp.exec.js */ \"./node_modules/core-js/modules/es.regexp.exec.js\");\n/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var core_js_modules_es_string_split_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.string.split.js */ \"./node_modules/core-js/modules/es.string.split.js\");\n/* harmony import */ var core_js_modules_es_string_split_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_split_js__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/es.promise.js */ \"./node_modules/core-js/modules/es.promise.js\");\n/* harmony import */ var core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var regenerator_runtime_runtime_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! regenerator-runtime/runtime.js */ \"./node_modules/regenerator-runtime/runtime.js\");\n/* harmony import */ var regenerator_runtime_runtime_js__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(regenerator_runtime_runtime_js__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _deck_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./deck.js */ \"./src/scripts/deck.js\");\n/* harmony import */ var _board_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./board.js */ \"./src/scripts/board.js\");\n/* harmony import */ var _player__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./player */ \"./src/scripts/player.js\");\n\n\n\n\n\n\n\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\n// import Player from './player.js';\n\n\n\n\nvar Game = /*#__PURE__*/function () {\n function Game() {\n _classCallCheck(this, Game);\n\n this.activeGame = false;\n this.targetPos = null; // checkHighlight\n\n this.targetCard = null;\n this.targetMoves = null;\n this.activePawn = null; // checkHighlight\n\n this.activeCard = null; // checkHighlight\n\n this.currentPlayerIdx = 0; // aid with dealing cards\n\n this.players = [new _player__WEBPACK_IMPORTED_MODULE_9__[\"default\"](\"Player 1\", \"Blue\"), new _player__WEBPACK_IMPORTED_MODULE_9__[\"default\"](\"Player 2\", \"Red\")];\n this.player = this.currentPlayer;\n this.deck = new _deck_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"]();\n this.board = new _board_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"](); // Window debugging:\n\n window.board = this.board;\n window.deck = this.deck;\n window.players = this.players;\n window.player = this.player;\n window.otherPlayer = this.otherPlayer;\n } // getter access like a property:\n\n\n _createClass(Game, [{\n key: \"currentPlayer\",\n get: function get() {\n return this.players[this.currentPlayerIdx];\n }\n }, {\n key: \"otherPlayer\",\n get: function get() {\n return this.players[(this.currentPlayerIdx + 1) % 2];\n } // always 0 or 1 using %\n\n }, {\n key: \"swapTurn\",\n value: function () {\n var _swapTurn = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {\n return regeneratorRuntime.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n this.currentPlayerIdx = (this.currentPlayerIdx + 1) % 2;\n this.player = this.currentPlayer;\n window.player = this.player;\n\n case 3:\n case \"end\":\n return _context.stop();\n }\n }\n }, _callee, this);\n }));\n\n function swapTurn() {\n return _swapTurn.apply(this, arguments);\n }\n\n return swapTurn;\n }() // deal alternates between players until 4, then on-deck\n\n }, {\n key: \"dealCard\",\n value: function dealCard() {\n var card = this.deck.deal();\n this.currentPlayer.dealCard(card);\n this.swapTurn();\n } // event handled in index.js \n\n }, {\n key: \"start\",\n value: function start() {\n for (var i = 0; i < 4; i++) {\n this.dealCard();\n }\n\n this.onDeckCard = this.deck.deal();\n this.activeGame = true;\n this.board.setBoard();\n } // all moves\n\n }, {\n key: \"possibleMoves\",\n value: function possibleMoves(card, startPos) {\n // all possible\n var that = this;\n\n if (that.currentPlayerIdx === 0) {\n return that.blueMoves(card, startPos);\n } else {\n return that.redMoves(card, startPos);\n }\n } // limits actual moves by empty and color\n\n }, {\n key: \"allowedMoves\",\n value: function allowedMoves(card, startPos) {\n var that = this;\n if (!that.board.validPos(startPos)) return false;\n var allMoves = that.possibleMoves(card, startPos); // \n\n var realMoves = [];\n\n for (var i = 0; i < allMoves.length; i++) {\n // ;\n if (that.board.validPos(allMoves[i])) {\n if (that.board.isEmpty(allMoves[i]) === true) {\n realMoves.push(allMoves[i]);\n } else {\n if (that.board.getPiece(allMoves[i]).color !== that.player.color.toLowerCase()) {\n realMoves.push(allMoves[i]);\n }\n }\n }\n }\n\n return realMoves;\n }\n }, {\n key: \"blueMoves\",\n value: function blueMoves(card, startPos) {\n var that = this;\n\n for (var i = 0; i < that.player.hand.length; i++) {\n if (that.player.hand[i] === card) {\n // changed from includes\n console.log(\"ok\");\n var moves = that.player.hand[i].slice(1);\n var possiblePos = [];\n\n for (var j = 0; j < moves.length; j++) {\n var row = startPos[0] + moves[j][0];\n var col = startPos[1] + moves[j][1];\n possiblePos.push([row, col]);\n }\n\n return possiblePos;\n } else {\n console.log(\"Card is not in your hand\"); // all returning else\n }\n }\n }\n }, {\n key: \"oppMoves\",\n value: function oppMoves(moves) {\n // flips opponent possible pos \n var newMoves = [];\n console.log(moves);\n\n for (var i = 0; i < moves.length; i++) {\n var subArr = [];\n\n for (var j = 0; j < moves[0].length; j++) {\n var ele = moves[i][j];\n\n if (ele === 0) {\n subArr.push(ele);\n } else {\n subArr.push(moves[i][j] * -1);\n }\n }\n\n newMoves.push(subArr);\n }\n\n return newMoves;\n }\n }, {\n key: \"redMoves\",\n value: function redMoves(card, startPos) {\n var that = this;\n\n for (var i = 0; i < that.player.hand.length; i++) {\n if (that.player.hand[i] === card) {\n // changed from .includes \n var moves = that.player.hand[i].slice(1);\n var movesRev = that.oppMoves(moves);\n var possiblePos = [];\n\n for (var j = 0; j < movesRev.length; j++) {\n var row = startPos[0] + movesRev[j][0];\n var col = startPos[1] + movesRev[j][1];\n possiblePos.push([row, col]);\n }\n\n return possiblePos;\n } else {\n console.log(\"Card is not in your hand\");\n }\n }\n }\n }, {\n key: \"checkHighlight\",\n value: function checkHighlight() {\n var allCards = document.querySelectorAll(\".back\");\n var allPawns = document.querySelectorAll(\"#pawn\");\n var that = this;\n allPawns.forEach(function (pawn) {\n if (pawn.classList.contains(\"active-pawn\")) {\n that.activePawn = pawn;\n that.targetPos = that.currentPos(pawn);\n console.log(\"Found active pawn!\");\n }\n });\n allCards.forEach(function (card) {\n if (card.classList.contains(\"active-card\")) {\n console.log(\"Found active card!\");\n that.activeCard = card;\n that.targetCard = that.currentCard(card);\n }\n });\n\n if (that.activePawn !== null && that.activeCard !== null) {\n console.log(\"Both Active!\");\n that.targetMoves = that.viewMoves(); // highlight pos \n } else {\n return false;\n } // debugger\n\n } // sets game.targetPos in checkHighlight\n\n }, {\n key: \"currentPos\",\n value: function currentPos(pawnEl) {\n // const that = this;\n var pos = [];\n var posStr = pawnEl.parentElement.id;\n var strArr = posStr.slice(1, posStr.length).split(\",\");\n\n for (var i = 0; i < strArr.length; i++) {\n pos.push(parseInt(strArr[i]));\n }\n\n return pos;\n } // sets game.targetCard in checkHighlight\n\n }, {\n key: \"currentCard\",\n value: function currentCard(cardEl) {\n console.log(\"in currentCard\");\n var that = this;\n var cardStr = cardEl.id.slice(4);\n var cardNum = parseInt(cardStr);\n if (cardNum === 1) return that.players[0].hand[0];\n if (cardNum === 2) return that.players[0].hand[1];\n if (cardNum === 3) return null; // need onDeck? Maybe not.\n\n if (cardNum === 4) return that.players[1].hand[0];\n if (cardNum === 5) return that.players[1].hand[1];\n }\n }, {\n key: \"viewMovePiece\",\n value: function viewMovePiece(posEndEle) {\n var that = this;\n var posStart = that.currentPos(that.activePawn);\n var posEnd = that.convertStrPos(posEndEle.id); // debugger;\n\n if (board.grid[posEnd[0]][posEnd[1]] !== null) {\n that.board.removePiece(posEnd);\n that.board.viewRemovePiece(posEnd); // takes piece\n }\n\n that.board.movePiece(posStart, posEnd); // coded movePiece calls viewPlacePiece\n\n var piece = that.board.getPiece(posEnd); // Piece\n // debugger\n\n that.board.viewRemovePiece(posStart); // remove old pos\n // TURN SWAP \n\n setTimeout(function () {\n that.viewSwapTurn();\n }, 2000);\n }\n }, {\n key: \"viewSwapUsedCard\",\n value: function () {\n var _viewSwapUsedCard = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2(playedCardEl, deckCardEl) {\n var that, currentHand, playedCard, deckCard, playedCardIdx, i, newPlayerCard, newDeckCard;\n return regeneratorRuntime.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n console.log(\"in swap used\");\n that = this;\n currentHand = that.player.hand;\n playedCard = that.currentCard(playedCardEl);\n deckCard = that.onDeckCard;\n playedCardIdx = null;\n\n for (i = 0; i < currentHand.length; i++) {\n // debugger\n if (playedCard === currentHand[i]) playedCardIdx = i;\n } // board swap\n\n\n newPlayerCard = deckCard;\n newDeckCard = playedCard;\n currentHand[playedCardIdx] = newPlayerCard;\n deckCard = newDeckCard;\n this.onDeckCard = newDeckCard; // new\n // debugger;\n // view swap\n\n that.deck.viewDealSwap(newPlayerCard, playedCardEl);\n that.deck.viewDealSwap(newDeckCard, deckCardEl);\n\n case 14:\n case \"end\":\n return _context2.stop();\n }\n }\n }, _callee2, this);\n }));\n\n function viewSwapUsedCard(_x, _x2) {\n return _viewSwapUsedCard.apply(this, arguments);\n }\n\n return viewSwapUsedCard;\n }()\n }, {\n key: \"viewSwapTurn\",\n value: function viewSwapTurn() {\n var that = this;\n var playedCard = document.querySelector(\".active-card\");\n var deckCard = document.querySelector(\"#back3\"); // squares remove highlight\n\n var allSquares = document.getElementsByClassName('square');\n\n for (var i = 0; i < allSquares.length; i++) {\n allSquares[i].classList.remove(\"active\");\n allSquares[i].classList.add(\"inactive\");\n } // pawns remove highlight\n\n\n var allPawns = document.querySelectorAll(\"#pawn\");\n allPawns.forEach(function (pawn) {\n if (pawn.classList.contains(\"active-pawn\")) {\n pawn.classList.remove(\"active-pawn\");\n pawn.classList.add(\"inactive-pawn\");\n }\n }); // hide used cards\n\n setTimeout(function () {\n // flip used\n that.deck.viewToggleFlipTurn().then(setTimeout(function () {\n // swap used\n that.viewSwapUsedCard(playedCard, deckCard).then(setTimeout(function () {\n // flip back\n that.deck.viewToggleFlipTurn().then(setTimeout(function () {\n // rm highlight\n that.viewRemoveCardHighlight().then( // swap turn @ board\n that.swapTurn());\n }, 600));\n }, 600));\n }, 600));\n }, 1000);\n } // card remove highlight\n\n }, {\n key: \"viewRemoveCardHighlight\",\n value: function () {\n var _viewRemoveCardHighlight = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee3() {\n var allCards;\n return regeneratorRuntime.wrap(function _callee3$(_context3) {\n while (1) {\n switch (_context3.prev = _context3.next) {\n case 0:\n allCards = document.querySelectorAll(\".back\");\n allCards.forEach(function (card) {\n card.classList.remove(\"active-card\");\n card.classList.add(\"inactive-card\");\n });\n\n case 2:\n case \"end\":\n return _context3.stop();\n }\n }\n }, _callee3);\n }));\n\n function viewRemoveCardHighlight() {\n return _viewRemoveCardHighlight.apply(this, arguments);\n }\n\n return viewRemoveCardHighlight;\n }()\n }, {\n key: \"viewMoves\",\n value: function viewMoves() {\n var that = this;\n var highlightMoves = that.allowedMoves(that.targetCard, that.targetPos);\n var viewSquares = [];\n\n for (var i = 0; i < highlightMoves.length; i++) {\n var squareSelector = JSON.stringify(highlightMoves[i]);\n var square = document.getElementById(squareSelector);\n viewSquares.push(square);\n }\n\n var allSquares = document.getElementsByClassName('square');\n\n for (var _i = 0; _i < allSquares.length; _i++) {\n allSquares[_i].classList.remove(\"active\");\n\n allSquares[_i].classList.add(\"inactive\");\n }\n\n for (var _i2 = 0; _i2 < viewSquares.length; _i2++) {\n viewSquares[_i2].classList.add(\"active\");\n\n viewSquares[_i2].classList.remove(\"inactive\");\n }\n\n return highlightMoves;\n } // '[1,2]' to [1,2]\n\n }, {\n key: \"convertStrPos\",\n value: function convertStrPos(strPos) {\n var arr = [];\n var strArr = strPos.slice(1, 4).split(','); // ['1', '2']\n\n strArr.forEach(function (ele) {\n arr.push(parseInt(ele));\n });\n return arr;\n }\n }]);\n\n return Game;\n}(); // consider adding a KEY:value list of variables like pawn, master, or player \n// also where to keep card objects?\n// function addGlobalEventListener(type, selector, callback) {\n// document.addEventListener(type, e => {\n// if (e.target.matches(selector)) callback(e);\n// });\n// }\n// function createGrid() {\n// const gameBoard = document.getElementById(\"board\");\n// for (let i = 0; i < 5; i++) {\n// for (let j = 0; j < 5; j++) {\n// let square = document.createElement(\"div\");\n// square.classList.add(\"square\");\n// square.setAttribute(\"id\", [i, j]);\n// // gameBoard.appendChild(square);\n// }\n// }\n// }\n// createGrid();\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvc2NyaXB0cy9nYW1lLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBOztJQUVxQkc7QUFDbkIsa0JBQWM7QUFBQTs7QUFDWixTQUFLQyxVQUFMLEdBQWtCLEtBQWxCO0FBQ0EsU0FBS0MsU0FBTCxHQUFpQixJQUFqQixDQUZZLENBRWM7O0FBQzFCLFNBQUtDLFVBQUwsR0FBa0IsSUFBbEI7QUFDQSxTQUFLQyxXQUFMLEdBQW1CLElBQW5CO0FBQ0EsU0FBS0MsVUFBTCxHQUFrQixJQUFsQixDQUxZLENBS2M7O0FBQzFCLFNBQUtDLFVBQUwsR0FBa0IsSUFBbEIsQ0FOWSxDQU1jOztBQUMxQixTQUFLQyxnQkFBTCxHQUF3QixDQUF4QixDQVBZLENBT2dCOztBQUM1QixTQUFLQyxPQUFMLEdBQWUsQ0FBQyxJQUFJVCwrQ0FBSixDQUFXLFVBQVgsRUFBdUIsTUFBdkIsQ0FBRCxFQUFpQyxJQUFJQSwrQ0FBSixDQUFXLFVBQVgsRUFBdUIsS0FBdkIsQ0FBakMsQ0FBZjtBQUNBLFNBQUtVLE1BQUwsR0FBYyxLQUFLQyxhQUFuQjtBQUNBLFNBQUtDLElBQUwsR0FBWSxJQUFJZCxnREFBSixFQUFaO0FBQ0EsU0FBS2UsS0FBTCxHQUFhLElBQUlkLGlEQUFKLEVBQWIsQ0FYWSxDQWFaOztBQUNBZSxJQUFBQSxNQUFNLENBQUNELEtBQVAsR0FBZSxLQUFLQSxLQUFwQjtBQUNBQyxJQUFBQSxNQUFNLENBQUNGLElBQVAsR0FBYyxLQUFLQSxJQUFuQjtBQUNBRSxJQUFBQSxNQUFNLENBQUNMLE9BQVAsR0FBaUIsS0FBS0EsT0FBdEI7QUFDQUssSUFBQUEsTUFBTSxDQUFDSixNQUFQLEdBQWdCLEtBQUtBLE1BQXJCO0FBQ0FJLElBQUFBLE1BQU0sQ0FBQ0MsV0FBUCxHQUFxQixLQUFLQSxXQUExQjtBQUVELElBRUQ7Ozs7O1NBQ0EsZUFBb0I7QUFDbEIsYUFBTyxLQUFLTixPQUFMLENBQWEsS0FBS0QsZ0JBQWxCLENBQVA7QUFDRDs7O1NBRUQsZUFBa0I7QUFDaEIsYUFBTyxLQUFLQyxPQUFMLENBQWMsQ0FBQyxLQUFLRCxnQkFBTCxHQUF3QixDQUF6QixJQUE4QixDQUE1QyxDQUFQO0FBQ0QsTUFFRDs7Ozs7OEVBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNFLHFCQUFLQSxnQkFBTCxHQUF3QixDQUFDLEtBQUtBLGdCQUFMLEdBQXdCLENBQXpCLElBQThCLENBQXREO0FBQ0EscUJBQUtFLE1BQUwsR0FBYyxLQUFLQyxhQUFuQjtBQUNBRyxnQkFBQUEsTUFBTSxDQUFDSixNQUFQLEdBQWdCLEtBQUtBLE1BQXJCOztBQUhGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOzs7Ozs7O1FBTUE7Ozs7V0FDQSxvQkFBVztBQUNULFVBQUlNLElBQUksR0FBRyxLQUFLSixJQUFMLENBQVVLLElBQVYsRUFBWDtBQUNBLFdBQUtOLGFBQUwsQ0FBbUJPLFFBQW5CLENBQTRCRixJQUE1QjtBQUNBLFdBQUtHLFFBQUw7QUFDRCxNQUVEOzs7O1dBQ0EsaUJBQVE7QUFDTixXQUFLLElBQUlDLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUcsQ0FBcEIsRUFBdUJBLENBQUMsRUFBeEIsRUFBNEI7QUFDMUIsYUFBS0YsUUFBTDtBQUNEOztBQUNELFdBQUtHLFVBQUwsR0FBa0IsS0FBS1QsSUFBTCxDQUFVSyxJQUFWLEVBQWxCO0FBQ0EsV0FBS2YsVUFBTCxHQUFrQixJQUFsQjtBQUNBLFdBQUtXLEtBQUwsQ0FBV1MsUUFBWDtBQUVELE1BRUQ7Ozs7V0FDQSx1QkFBY04sSUFBZCxFQUFvQk8sUUFBcEIsRUFBOEI7QUFBRztBQUMvQixVQUFJQyxJQUFJLEdBQUcsSUFBWDs7QUFDQSxVQUFJQSxJQUFJLENBQUNoQixnQkFBTCxLQUEwQixDQUE5QixFQUFpQztBQUMvQixlQUFPZ0IsSUFBSSxDQUFDQyxTQUFMLENBQWVULElBQWYsRUFBcUJPLFFBQXJCLENBQVA7QUFDRCxPQUZELE1BRU87QUFDTCxlQUFPQyxJQUFJLENBQUNFLFFBQUwsQ0FBY1YsSUFBZCxFQUFvQk8sUUFBcEIsQ0FBUDtBQUNEO0FBQ0YsTUFFRDs7OztXQUNBLHNCQUFhUCxJQUFiLEVBQW1CTyxRQUFuQixFQUE2QjtBQUMzQixVQUFJQyxJQUFJLEdBQUcsSUFBWDtBQUVBLFVBQUksQ0FBQ0EsSUFBSSxDQUFDWCxLQUFMLENBQVdjLFFBQVgsQ0FBb0JKLFFBQXBCLENBQUwsRUFBb0MsT0FBTyxLQUFQO0FBQ3BDLFVBQUlLLFFBQVEsR0FBR0osSUFBSSxDQUFDSyxhQUFMLENBQW1CYixJQUFuQixFQUF5Qk8sUUFBekIsQ0FBZixDQUoyQixDQUszQjs7QUFDQSxVQUFJTyxTQUFTLEdBQUcsRUFBaEI7O0FBQ0EsV0FBSyxJQUFJVixDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHUSxRQUFRLENBQUNHLE1BQTdCLEVBQXFDWCxDQUFDLEVBQXRDLEVBQTBDO0FBQ3hDO0FBQ0EsWUFBSUksSUFBSSxDQUFDWCxLQUFMLENBQVdjLFFBQVgsQ0FBb0JDLFFBQVEsQ0FBQ1IsQ0FBRCxDQUE1QixDQUFKLEVBQXNDO0FBQ3BDLGNBQUlJLElBQUksQ0FBQ1gsS0FBTCxDQUFXbUIsT0FBWCxDQUFtQkosUUFBUSxDQUFDUixDQUFELENBQTNCLE1BQW9DLElBQXhDLEVBQThDO0FBQzVDVSxZQUFBQSxTQUFTLENBQUNHLElBQVYsQ0FBZUwsUUFBUSxDQUFDUixDQUFELENBQXZCO0FBQ0QsV0FGRCxNQUVPO0FBRUwsZ0JBQUtJLElBQUksQ0FBQ1gsS0FBTCxDQUFXcUIsUUFBWCxDQUFvQk4sUUFBUSxDQUFDUixDQUFELENBQTVCLENBQUQsQ0FBbUNlLEtBQW5DLEtBQTZDWCxJQUFJLENBQUNkLE1BQUwsQ0FBWXlCLEtBQVosQ0FBa0JDLFdBQWxCLEVBQWpELEVBQWtGO0FBQ2hGTixjQUFBQSxTQUFTLENBQUNHLElBQVYsQ0FBZUwsUUFBUSxDQUFDUixDQUFELENBQXZCO0FBQ0Q7QUFDRjtBQUNGO0FBQ0Y7O0FBQ0QsYUFBT1UsU0FBUDtBQUNEOzs7V0FFRCxtQkFBVWQsSUFBVixFQUFnQk8sUUFBaEIsRUFBMEI7QUFDeEIsVUFBSUMsSUFBSSxHQUFHLElBQVg7O0FBQ0EsV0FBSyxJQUFJSixDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHSSxJQUFJLENBQUNkLE1BQUwsQ0FBWTJCLElBQVosQ0FBaUJOLE1BQXJDLEVBQTZDWCxDQUFDLEVBQTlDLEVBQWtEO0FBQ2hELFlBQUlJLElBQUksQ0FBQ2QsTUFBTCxDQUFZMkIsSUFBWixDQUFpQmpCLENBQWpCLE1BQXdCSixJQUE1QixFQUFrQztBQUFHO0FBQ25Dc0IsVUFBQUEsT0FBTyxDQUFDQyxHQUFSLENBQVksSUFBWjtBQUNBLGNBQUlDLEtBQUssR0FBR2hCLElBQUksQ0FBQ2QsTUFBTCxDQUFZMkIsSUFBWixDQUFpQmpCLENBQWpCLEVBQW9CcUIsS0FBcEIsQ0FBMEIsQ0FBMUIsQ0FBWjtBQUNBLGNBQUlDLFdBQVcsR0FBRyxFQUFsQjs7QUFDQSxlQUFLLElBQUlDLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUdILEtBQUssQ0FBQ1QsTUFBMUIsRUFBa0NZLENBQUMsRUFBbkMsRUFBdUM7QUFDckMsZ0JBQUlDLEdBQUcsR0FBR3JCLFFBQVEsQ0FBQyxDQUFELENBQVIsR0FBY2lCLEtBQUssQ0FBQ0csQ0FBRCxDQUFMLENBQVMsQ0FBVCxDQUF4QjtBQUNBLGdCQUFJRSxHQUFHLEdBQUd0QixRQUFRLENBQUMsQ0FBRCxDQUFSLEdBQWNpQixLQUFLLENBQUNHLENBQUQsQ0FBTCxDQUFTLENBQVQsQ0FBeEI7QUFDQUQsWUFBQUEsV0FBVyxDQUFDVCxJQUFaLENBQWlCLENBQUNXLEdBQUQsRUFBTUMsR0FBTixDQUFqQjtBQUNEOztBQUVELGlCQUFPSCxXQUFQO0FBQ0QsU0FYRCxNQVdPO0FBQ0xKLFVBQUFBLE9BQU8sQ0FBQ0MsR0FBUixDQUFZLDBCQUFaLEVBREssQ0FDcUM7QUFDM0M7QUFDRjtBQUNGOzs7V0FFRCxrQkFBU0MsS0FBVCxFQUFnQjtBQUFHO0FBQ2pCLFVBQUlNLFFBQVEsR0FBRyxFQUFmO0FBQ0FSLE1BQUFBLE9BQU8sQ0FBQ0MsR0FBUixDQUFZQyxLQUFaOztBQUNBLFdBQUssSUFBSXBCLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUdvQixLQUFLLENBQUNULE1BQTFCLEVBQWtDWCxDQUFDLEVBQW5DLEVBQXVDO0FBQ3JDLFlBQUkyQixNQUFNLEdBQUcsRUFBYjs7QUFDQSxhQUFLLElBQUlKLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUdILEtBQUssQ0FBQyxDQUFELENBQUwsQ0FBU1QsTUFBN0IsRUFBcUNZLENBQUMsRUFBdEMsRUFBMEM7QUFDeEMsY0FBSUssR0FBRyxHQUFHUixLQUFLLENBQUNwQixDQUFELENBQUwsQ0FBU3VCLENBQVQsQ0FBVjs7QUFDQSxjQUFJSyxHQUFHLEtBQUssQ0FBWixFQUFlO0FBQ2JELFlBQUFBLE1BQU0sQ0FBQ2QsSUFBUCxDQUFZZSxHQUFaO0FBQ0QsV0FGRCxNQUVPO0FBQ0xELFlBQUFBLE1BQU0sQ0FBQ2QsSUFBUCxDQUFZTyxLQUFLLENBQUNwQixDQUFELENBQUwsQ0FBU3VCLENBQVQsSUFBYyxDQUFDLENBQTNCO0FBQ0Q7QUFDRjs7QUFDREcsUUFBQUEsUUFBUSxDQUFDYixJQUFULENBQWNjLE1BQWQ7QUFDRDs7QUFDRCxhQUFPRCxRQUFQO0FBQ0Q7OztXQUVELGtCQUFTOUIsSUFBVCxFQUFlTyxRQUFmLEVBQXlCO0FBQ3ZCLFVBQUlDLElBQUksR0FBRyxJQUFYOztBQUNBLFdBQUssSUFBSUosQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBR0ksSUFBSSxDQUFDZCxNQUFMLENBQVkyQixJQUFaLENBQWlCTixNQUFyQyxFQUE2Q1gsQ0FBQyxFQUE5QyxFQUFrRDtBQUNoRCxZQUFJSSxJQUFJLENBQUNkLE1BQUwsQ0FBWTJCLElBQVosQ0FBaUJqQixDQUFqQixNQUF3QkosSUFBNUIsRUFBa0M7QUFBRztBQUNuQyxjQUFJd0IsS0FBSyxHQUFHaEIsSUFBSSxDQUFDZCxNQUFMLENBQVkyQixJQUFaLENBQWlCakIsQ0FBakIsRUFBb0JxQixLQUFwQixDQUEwQixDQUExQixDQUFaO0FBQ0EsY0FBSVEsUUFBUSxHQUFJekIsSUFBSSxDQUFDMEIsUUFBTCxDQUFjVixLQUFkLENBQWhCO0FBQ0EsY0FBSUUsV0FBVyxHQUFHLEVBQWxCOztBQUNBLGVBQUssSUFBSUMsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBR00sUUFBUSxDQUFDbEIsTUFBN0IsRUFBcUNZLENBQUMsRUFBdEMsRUFBMEM7QUFDeEMsZ0JBQUlDLEdBQUcsR0FBR3JCLFFBQVEsQ0FBQyxDQUFELENBQVIsR0FBYzBCLFFBQVEsQ0FBQ04sQ0FBRCxDQUFSLENBQVksQ0FBWixDQUF4QjtBQUNBLGdCQUFJRSxHQUFHLEdBQUd0QixRQUFRLENBQUMsQ0FBRCxDQUFSLEdBQWMwQixRQUFRLENBQUNOLENBQUQsQ0FBUixDQUFZLENBQVosQ0FBeEI7QUFDQUQsWUFBQUEsV0FBVyxDQUFDVCxJQUFaLENBQWlCLENBQUNXLEdBQUQsRUFBTUMsR0FBTixDQUFqQjtBQUNEOztBQUNELGlCQUFPSCxXQUFQO0FBQ0QsU0FWRCxNQVVPO0FBQ0xKLFVBQUFBLE9BQU8sQ0FBQ0MsR0FBUixDQUFZLDBCQUFaO0FBQ0Q7QUFDRjtBQUNGOzs7V0FFRCwwQkFBaUI7QUFDZixVQUFJWSxRQUFRLEdBQUdDLFFBQVEsQ0FBQ0MsZ0JBQVQsQ0FBMEIsT0FBMUIsQ0FBZjtBQUNBLFVBQUlDLFFBQVEsR0FBR0YsUUFBUSxDQUFDQyxnQkFBVCxDQUEwQixPQUExQixDQUFmO0FBQ0EsVUFBSTdCLElBQUksR0FBRyxJQUFYO0FBQ0E4QixNQUFBQSxRQUFRLENBQUNDLE9BQVQsQ0FBaUIsVUFBVUMsSUFBVixFQUFnQjtBQUMvQixZQUFJQSxJQUFJLENBQUNDLFNBQUwsQ0FBZUMsUUFBZixDQUF3QixhQUF4QixDQUFKLEVBQTRDO0FBQzFDbEMsVUFBQUEsSUFBSSxDQUFDbEIsVUFBTCxHQUFrQmtELElBQWxCO0FBQ0FoQyxVQUFBQSxJQUFJLENBQUNyQixTQUFMLEdBQWlCcUIsSUFBSSxDQUFDbUMsVUFBTCxDQUFnQkgsSUFBaEIsQ0FBakI7QUFDQWxCLFVBQUFBLE9BQU8sQ0FBQ0MsR0FBUixDQUFZLG9CQUFaO0FBQ0Q7QUFDRixPQU5EO0FBUUFZLE1BQUFBLFFBQVEsQ0FBQ0ksT0FBVCxDQUFpQixVQUFVdkMsSUFBVixFQUFnQjtBQUMvQixZQUFJQSxJQUFJLENBQUN5QyxTQUFMLENBQWVDLFFBQWYsQ0FBd0IsYUFBeEIsQ0FBSixFQUE0QztBQUMxQ3BCLFVBQUFBLE9BQU8sQ0FBQ0MsR0FBUixDQUFZLG9CQUFaO0FBQ0FmLFVBQUFBLElBQUksQ0FBQ2pCLFVBQUwsR0FBa0JTLElBQWxCO0FBQ0FRLFVBQUFBLElBQUksQ0FBQ3BCLFVBQUwsR0FBa0JvQixJQUFJLENBQUNvQyxXQUFMLENBQWlCNUMsSUFBakIsQ0FBbEI7QUFDRDtBQUNGLE9BTkQ7O0FBUUEsVUFBSVEsSUFBSSxDQUFDbEIsVUFBTCxLQUFvQixJQUFwQixJQUE0QmtCLElBQUksQ0FBQ2pCLFVBQUwsS0FBb0IsSUFBcEQsRUFBMEQ7QUFDeEQrQixRQUFBQSxPQUFPLENBQUNDLEdBQVIsQ0FBWSxjQUFaO0FBQ0FmLFFBQUFBLElBQUksQ0FBQ25CLFdBQUwsR0FBbUJtQixJQUFJLENBQUNxQyxTQUFMLEVBQW5CLENBRndELENBRWxCO0FBQ3ZDLE9BSEQsTUFHTztBQUNMLGVBQU8sS0FBUDtBQUNELE9BekJjLENBMEJmOztBQUNELE1BRUQ7Ozs7V0FDQSxvQkFBV0MsTUFBWCxFQUFtQjtBQUNqQjtBQUNBLFVBQUlDLEdBQUcsR0FBRyxFQUFWO0FBQ0EsVUFBSUMsTUFBTSxHQUFHRixNQUFNLENBQUNHLGFBQVAsQ0FBcUJDLEVBQWxDO0FBQ0EsVUFBSUMsTUFBTSxHQUFHSCxNQUFNLENBQUN2QixLQUFQLENBQWEsQ0FBYixFQUFnQnVCLE1BQU0sQ0FBQ2pDLE1BQXZCLEVBQStCcUMsS0FBL0IsQ0FBcUMsR0FBckMsQ0FBYjs7QUFDQSxXQUFLLElBQUloRCxDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHK0MsTUFBTSxDQUFDcEMsTUFBM0IsRUFBbUNYLENBQUMsRUFBcEMsRUFBd0M7QUFDdEMyQyxRQUFBQSxHQUFHLENBQUM5QixJQUFKLENBQVVvQyxRQUFRLENBQUNGLE1BQU0sQ0FBQy9DLENBQUQsQ0FBUCxDQUFsQjtBQUNEOztBQUNELGFBQU8yQyxHQUFQO0FBQ0QsTUFFRDs7OztXQUNBLHFCQUFZTyxNQUFaLEVBQW9CO0FBQ2xCaEMsTUFBQUEsT0FBTyxDQUFDQyxHQUFSLENBQVksZ0JBQVo7QUFDQSxVQUFJZixJQUFJLEdBQUcsSUFBWDtBQUNBLFVBQUkrQyxPQUFPLEdBQUdELE1BQU0sQ0FBQ0osRUFBUCxDQUFVekIsS0FBVixDQUFnQixDQUFoQixDQUFkO0FBQ0EsVUFBSStCLE9BQU8sR0FBR0gsUUFBUSxDQUFDRSxPQUFELENBQXRCO0FBQ0EsVUFBSUMsT0FBTyxLQUFLLENBQWhCLEVBQW1CLE9BQU9oRCxJQUFJLENBQUNmLE9BQUwsQ0FBYSxDQUFiLEVBQWdCNEIsSUFBaEIsQ0FBcUIsQ0FBckIsQ0FBUDtBQUNuQixVQUFJbUMsT0FBTyxLQUFLLENBQWhCLEVBQW1CLE9BQU9oRCxJQUFJLENBQUNmLE9BQUwsQ0FBYSxDQUFiLEVBQWdCNEIsSUFBaEIsQ0FBcUIsQ0FBckIsQ0FBUDtBQUNuQixVQUFJbUMsT0FBTyxLQUFLLENBQWhCLEVBQW1CLE9BQU8sSUFBUCxDQVBELENBT2M7O0FBQ2hDLFVBQUlBLE9BQU8sS0FBSyxDQUFoQixFQUFtQixPQUFPaEQsSUFBSSxDQUFDZixPQUFMLENBQWEsQ0FBYixFQUFnQjRCLElBQWhCLENBQXFCLENBQXJCLENBQVA7QUFDbkIsVUFBSW1DLE9BQU8sS0FBSyxDQUFoQixFQUFtQixPQUFPaEQsSUFBSSxDQUFDZixPQUFMLENBQWEsQ0FBYixFQUFnQjRCLElBQWhCLENBQXFCLENBQXJCLENBQVA7QUFDcEI7OztXQUVELHVCQUFjb0MsU0FBZCxFQUF5QjtBQUN2QixVQUFJakQsSUFBSSxHQUFHLElBQVg7QUFDQSxVQUFJa0QsUUFBUSxHQUFHbEQsSUFBSSxDQUFDbUMsVUFBTCxDQUFnQm5DLElBQUksQ0FBQ2xCLFVBQXJCLENBQWY7QUFDQSxVQUFJcUUsTUFBTSxHQUFHbkQsSUFBSSxDQUFDb0QsYUFBTCxDQUFtQkgsU0FBUyxDQUFDUCxFQUE3QixDQUFiLENBSHVCLENBSXZCOztBQUNBLFVBQUlyRCxLQUFLLENBQUNnRSxJQUFOLENBQVdGLE1BQU0sQ0FBQyxDQUFELENBQWpCLEVBQXNCQSxNQUFNLENBQUMsQ0FBRCxDQUE1QixNQUFxQyxJQUF6QyxFQUErQztBQUM3Q25ELFFBQUFBLElBQUksQ0FBQ1gsS0FBTCxDQUFXaUUsV0FBWCxDQUF1QkgsTUFBdkI7QUFDQW5ELFFBQUFBLElBQUksQ0FBQ1gsS0FBTCxDQUFXa0UsZUFBWCxDQUEyQkosTUFBM0IsRUFGNkMsQ0FFUjtBQUN0Qzs7QUFDRG5ELE1BQUFBLElBQUksQ0FBQ1gsS0FBTCxDQUFXbUUsU0FBWCxDQUFxQk4sUUFBckIsRUFBK0JDLE1BQS9CLEVBVHVCLENBVXZCOztBQUNBLFVBQUlNLEtBQUssR0FBR3pELElBQUksQ0FBQ1gsS0FBTCxDQUFXcUIsUUFBWCxDQUFvQnlDLE1BQXBCLENBQVosQ0FYdUIsQ0FXa0I7QUFDekM7O0FBQ0FuRCxNQUFBQSxJQUFJLENBQUNYLEtBQUwsQ0FBV2tFLGVBQVgsQ0FBMkJMLFFBQTNCLEVBYnVCLENBYWU7QUFDdEM7O0FBQ0FRLE1BQUFBLFVBQVUsQ0FBQyxZQUFNO0FBQ2YxRCxRQUFBQSxJQUFJLENBQUMyRCxZQUFMO0FBQ0QsT0FGUyxFQUVQLElBRk8sQ0FBVjtBQUdEOzs7O3NGQUVELGtCQUF1QkMsWUFBdkIsRUFBcUNDLFVBQXJDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNFL0MsZ0JBQUFBLE9BQU8sQ0FBQ0MsR0FBUixDQUFZLGNBQVo7QUFDSWYsZ0JBQUFBLElBRk4sR0FFYSxJQUZiO0FBR004RCxnQkFBQUEsV0FITixHQUdvQjlELElBQUksQ0FBQ2QsTUFBTCxDQUFZMkIsSUFIaEM7QUFJTWtELGdCQUFBQSxVQUpOLEdBSW1CL0QsSUFBSSxDQUFDb0MsV0FBTCxDQUFpQndCLFlBQWpCLENBSm5CO0FBS01JLGdCQUFBQSxRQUxOLEdBS2lCaEUsSUFBSSxDQUFDSCxVQUx0QjtBQU1Nb0UsZ0JBQUFBLGFBTk4sR0FNc0IsSUFOdEI7O0FBT0UscUJBQVNyRSxDQUFULEdBQWEsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHa0UsV0FBVyxDQUFDdkQsTUFBaEMsRUFBd0NYLENBQUMsRUFBekMsRUFBNkM7QUFDM0M7QUFDQSxzQkFBSW1FLFVBQVUsS0FBS0QsV0FBVyxDQUFDbEUsQ0FBRCxDQUE5QixFQUFtQ3FFLGFBQWEsR0FBR3JFLENBQWhCO0FBQ3BDLGlCQVZILENBV0U7OztBQUNJc0UsZ0JBQUFBLGFBWk4sR0FZc0JGLFFBWnRCO0FBYU1HLGdCQUFBQSxXQWJOLEdBYW9CSixVQWJwQjtBQWNFRCxnQkFBQUEsV0FBVyxDQUFDRyxhQUFELENBQVgsR0FBNkJDLGFBQTdCO0FBQ0FGLGdCQUFBQSxRQUFRLEdBQUdHLFdBQVg7QUFDQSxxQkFBS3RFLFVBQUwsR0FBa0JzRSxXQUFsQixDQWhCRixDQWdCaUM7QUFDL0I7QUFFQTs7QUFDQW5FLGdCQUFBQSxJQUFJLENBQUNaLElBQUwsQ0FBVWdGLFlBQVYsQ0FBdUJGLGFBQXZCLEVBQXNDTixZQUF0QztBQUNBNUQsZ0JBQUFBLElBQUksQ0FBQ1osSUFBTCxDQUFVZ0YsWUFBVixDQUF1QkQsV0FBdkIsRUFBb0NOLFVBQXBDOztBQXJCRjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7OztXQXlCQSx3QkFBZTtBQUNiLFVBQUk3RCxJQUFJLEdBQUcsSUFBWDtBQUVBLFVBQUkrRCxVQUFVLEdBQUduQyxRQUFRLENBQUN5QyxhQUFULENBQXVCLGNBQXZCLENBQWpCO0FBQ0EsVUFBSUwsUUFBUSxHQUFHcEMsUUFBUSxDQUFDeUMsYUFBVCxDQUF1QixRQUF2QixDQUFmLENBSmEsQ0FPYjs7QUFDQSxVQUFJQyxVQUFVLEdBQUcxQyxRQUFRLENBQUMyQyxzQkFBVCxDQUFnQyxRQUFoQyxDQUFqQjs7QUFDQSxXQUFLLElBQUkzRSxDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHMEUsVUFBVSxDQUFDL0QsTUFBL0IsRUFBdUNYLENBQUMsRUFBeEMsRUFBNEM7QUFDMUMwRSxRQUFBQSxVQUFVLENBQUMxRSxDQUFELENBQVYsQ0FBY3FDLFNBQWQsQ0FBd0J1QyxNQUF4QixDQUErQixRQUEvQjtBQUNBRixRQUFBQSxVQUFVLENBQUMxRSxDQUFELENBQVYsQ0FBY3FDLFNBQWQsQ0FBd0J3QyxHQUF4QixDQUE0QixVQUE1QjtBQUNELE9BWlksQ0FjYjs7O0FBQ0EsVUFBSTNDLFFBQVEsR0FBR0YsUUFBUSxDQUFDQyxnQkFBVCxDQUEwQixPQUExQixDQUFmO0FBQ0FDLE1BQUFBLFFBQVEsQ0FBQ0MsT0FBVCxDQUFpQixVQUFVQyxJQUFWLEVBQWdCO0FBQy9CLFlBQUlBLElBQUksQ0FBQ0MsU0FBTCxDQUFlQyxRQUFmLENBQXdCLGFBQXhCLENBQUosRUFBNEM7QUFDMUNGLFVBQUFBLElBQUksQ0FBQ0MsU0FBTCxDQUFldUMsTUFBZixDQUFzQixhQUF0QjtBQUNBeEMsVUFBQUEsSUFBSSxDQUFDQyxTQUFMLENBQWV3QyxHQUFmLENBQW1CLGVBQW5CO0FBQ0Q7QUFDRixPQUxELEVBaEJhLENBdUJiOztBQUNBZixNQUFBQSxVQUFVLENBQUMsWUFBTTtBQUNmO0FBQ0ExRCxRQUFBQSxJQUFJLENBQUNaLElBQUwsQ0FBVXNGLGtCQUFWLEdBQStCQyxJQUEvQixDQUNFakIsVUFBVSxDQUFDLFlBQU07QUFDZjtBQUNBMUQsVUFBQUEsSUFBSSxDQUFDNEUsZ0JBQUwsQ0FBc0JiLFVBQXRCLEVBQWtDQyxRQUFsQyxFQUE0Q1csSUFBNUMsQ0FDRWpCLFVBQVUsQ0FBQyxZQUFNO0FBQ2Y7QUFDQTFELFlBQUFBLElBQUksQ0FBQ1osSUFBTCxDQUFVc0Ysa0JBQVYsR0FBK0JDLElBQS9CLENBQ0VqQixVQUFVLENBQUMsWUFBTTtBQUNmO0FBQ0ExRCxjQUFBQSxJQUFJLENBQUM2RSx1QkFBTCxHQUErQkYsSUFBL0IsRUFDRTtBQUNBM0UsY0FBQUEsSUFBSSxDQUFDTCxRQUFMLEVBRkY7QUFJRCxhQU5TLEVBTVAsR0FOTyxDQURaO0FBU0QsV0FYUyxFQVdQLEdBWE8sQ0FEWjtBQWNELFNBaEJTLEVBZ0JQLEdBaEJPLENBRFo7QUFtQkQsT0FyQlMsRUFxQlAsSUFyQk8sQ0FBVjtBQXNCRCxNQUVEOzs7Ozs2RkFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDTWdDLGdCQUFBQSxRQUROLEdBQ2lCQyxRQUFRLENBQUNDLGdCQUFULENBQTBCLE9BQTFCLENBRGpCO0FBRUVGLGdCQUFBQSxRQUFRLENBQUNJLE9BQVQsQ0FBaUIsVUFBVXZDLElBQVYsRUFBZ0I7QUFDL0JBLGtCQUFBQSxJQUFJLENBQUN5QyxTQUFMLENBQWV1QyxNQUFmLENBQXNCLGFBQXRCO0FBQ0FoRixrQkFBQUEsSUFBSSxDQUFDeUMsU0FBTCxDQUFld0MsR0FBZixDQUFtQixlQUFuQjtBQUNELGlCQUhEOztBQUZGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7O1dBU0EscUJBQVk7QUFDVixVQUFJekUsSUFBSSxHQUFHLElBQVg7QUFDQSxVQUFJOEUsY0FBYyxHQUFHOUUsSUFBSSxDQUFDK0UsWUFBTCxDQUFrQi9FLElBQUksQ0FBQ3BCLFVBQXZCLEVBQW1Db0IsSUFBSSxDQUFDckIsU0FBeEMsQ0FBckI7QUFDQSxVQUFJcUcsV0FBVyxHQUFHLEVBQWxCOztBQUNBLFdBQUssSUFBSXBGLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUdrRixjQUFjLENBQUN2RSxNQUFuQyxFQUEyQ1gsQ0FBQyxFQUE1QyxFQUFnRDtBQUM5QyxZQUFJcUYsY0FBYyxHQUFHQyxJQUFJLENBQUNDLFNBQUwsQ0FBZUwsY0FBYyxDQUFDbEYsQ0FBRCxDQUE3QixDQUFyQjtBQUNBLFlBQUl3RixNQUFNLEdBQUd4RCxRQUFRLENBQUN5RCxjQUFULENBQXdCSixjQUF4QixDQUFiO0FBQ0FELFFBQUFBLFdBQVcsQ0FBQ3ZFLElBQVosQ0FBaUIyRSxNQUFqQjtBQUNEOztBQUNELFVBQUlkLFVBQVUsR0FBRzFDLFFBQVEsQ0FBQzJDLHNCQUFULENBQWdDLFFBQWhDLENBQWpCOztBQUNBLFdBQUssSUFBSTNFLEVBQUMsR0FBRyxDQUFiLEVBQWdCQSxFQUFDLEdBQUcwRSxVQUFVLENBQUMvRCxNQUEvQixFQUF1Q1gsRUFBQyxFQUF4QyxFQUE0QztBQUMxQzBFLFFBQUFBLFVBQVUsQ0FBQzFFLEVBQUQsQ0FBVixDQUFjcUMsU0FBZCxDQUF3QnVDLE1BQXhCLENBQStCLFFBQS9COztBQUNBRixRQUFBQSxVQUFVLENBQUMxRSxFQUFELENBQVYsQ0FBY3FDLFNBQWQsQ0FBd0J3QyxHQUF4QixDQUE0QixVQUE1QjtBQUNEOztBQUNELFdBQUssSUFBSTdFLEdBQUMsR0FBRyxDQUFiLEVBQWdCQSxHQUFDLEdBQUdvRixXQUFXLENBQUN6RSxNQUFoQyxFQUF3Q1gsR0FBQyxFQUF6QyxFQUE2QztBQUMzQ29GLFFBQUFBLFdBQVcsQ0FBQ3BGLEdBQUQsQ0FBWCxDQUFlcUMsU0FBZixDQUF5QndDLEdBQXpCLENBQTZCLFFBQTdCOztBQUNBTyxRQUFBQSxXQUFXLENBQUNwRixHQUFELENBQVgsQ0FBZXFDLFNBQWYsQ0FBeUJ1QyxNQUF6QixDQUFnQyxVQUFoQztBQUNEOztBQUVELGFBQU9NLGNBQVA7QUFDRCxNQUVEOzs7O1dBQ0EsdUJBQWNRLE1BQWQsRUFBc0I7QUFDcEIsVUFBSUMsR0FBRyxHQUFHLEVBQVY7QUFDQSxVQUFJNUMsTUFBTSxHQUFHMkMsTUFBTSxDQUFDckUsS0FBUCxDQUFhLENBQWIsRUFBZ0IsQ0FBaEIsRUFBbUIyQixLQUFuQixDQUF5QixHQUF6QixDQUFiLENBRm9CLENBR3BCOztBQUNBRCxNQUFBQSxNQUFNLENBQUNaLE9BQVAsQ0FBZSxVQUFDUCxHQUFELEVBQVM7QUFDdEIrRCxRQUFBQSxHQUFHLENBQUM5RSxJQUFKLENBQVNvQyxRQUFRLENBQUNyQixHQUFELENBQWpCO0FBQ0QsT0FGRDtBQUdBLGFBQU8rRCxHQUFQO0FBQ0Q7Ozs7S0FRSDtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL29uaXRhbWFfanMvLi9zcmMvc2NyaXB0cy9nYW1lLmpzP2NkYzAiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gaW1wb3J0IFBsYXllciBmcm9tICcuL3BsYXllci5qcyc7XG5pbXBvcnQgRGVjayBmcm9tICcuL2RlY2suanMnO1xuaW1wb3J0IEJvYXJkIGZyb20gXCIuL2JvYXJkLmpzXCI7XG5pbXBvcnQgUGxheWVyIGZyb20gXCIuL3BsYXllclwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBHYW1lIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5hY3RpdmVHYW1lID0gZmFsc2U7XG4gICAgdGhpcy50YXJnZXRQb3MgPSBudWxsOyAgICAvLyBjaGVja0hpZ2hsaWdodFxuICAgIHRoaXMudGFyZ2V0Q2FyZCA9IG51bGw7XG4gICAgdGhpcy50YXJnZXRNb3ZlcyA9IG51bGw7XG4gICAgdGhpcy5hY3RpdmVQYXduID0gbnVsbDsgICAvLyBjaGVja0hpZ2hsaWdodFxuICAgIHRoaXMuYWN0aXZlQ2FyZCA9IG51bGw7ICAgLy8gY2hlY2tIaWdobGlnaHRcbiAgICB0aGlzLmN1cnJlbnRQbGF5ZXJJZHggPSAwOyAgLy8gYWlkIHdpdGggZGVhbGluZyBjYXJkc1xuICAgIHRoaXMucGxheWVycyA9IFtuZXcgUGxheWVyKFwiUGxheWVyIDFcIiwgXCJCbHVlXCIpLCBuZXcgUGxheWVyKFwiUGxheWVyIDJcIiwgXCJSZWRcIildO1xuICAgIHRoaXMucGxheWVyID0gdGhpcy5jdXJyZW50UGxheWVyO1xuICAgIHRoaXMuZGVjayA9IG5ldyBEZWNrKCk7XG4gICAgdGhpcy5ib2FyZCA9IG5ldyBCb2FyZCgpO1xuXG4gICAgLy8gV2luZG93IGRlYnVnZ2luZzpcbiAgICB3aW5kb3cuYm9hcmQgPSB0aGlzLmJvYXJkO1xuICAgIHdpbmRvdy5kZWNrID0gdGhpcy5kZWNrO1xuICAgIHdpbmRvdy5wbGF5ZXJzID0gdGhpcy5wbGF5ZXJzO1xuICAgIHdpbmRvdy5wbGF5ZXIgPSB0aGlzLnBsYXllcjtcbiAgICB3aW5kb3cub3RoZXJQbGF5ZXIgPSB0aGlzLm90aGVyUGxheWVyO1xuXG4gIH1cblxuICAvLyBnZXR0ZXIgYWNjZXNzIGxpa2UgYSBwcm9wZXJ0eTpcbiAgZ2V0IGN1cnJlbnRQbGF5ZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMucGxheWVyc1t0aGlzLmN1cnJlbnRQbGF5ZXJJZHhdO1xuICB9XG5cbiAgZ2V0IG90aGVyUGxheWVyKCkge1xuICAgIHJldHVybiB0aGlzLnBsYXllcnNbKCh0aGlzLmN1cnJlbnRQbGF5ZXJJZHggKyAxKSAlIDIpXTtcbiAgfVxuXG4gIC8vIGFsd2F5cyAwIG9yIDEgdXNpbmcgJVxuICBhc3luYyBzd2FwVHVybigpIHtcbiAgICB0aGlzLmN1cnJlbnRQbGF5ZXJJZHggPSAodGhpcy5jdXJyZW50UGxheWVySWR4ICsgMSkgJSAyO1xuICAgIHRoaXMucGxheWVyID0gdGhpcy5jdXJyZW50UGxheWVyO1xuICAgIHdpbmRvdy5wbGF5ZXIgPSB0aGlzLnBsYXllcjtcbiAgfVxuXG4gIC8vIGRlYWwgYWx0ZXJuYXRlcyBiZXR3ZWVuIHBsYXllcnMgdW50aWwgNCwgdGhlbiBvbi1kZWNrXG4gIGRlYWxDYXJkKCkge1xuICAgIGxldCBjYXJkID0gdGhpcy5kZWNrLmRlYWwoKTtcbiAgICB0aGlzLmN1cnJlbnRQbGF5ZXIuZGVhbENhcmQoY2FyZCk7XG4gICAgdGhpcy5zd2FwVHVybigpO1xuICB9XG5cbiAgLy8gZXZlbnQgaGFuZGxlZCBpbiBpbmRleC5qcyBcbiAgc3RhcnQoKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCA0OyBpKyspIHtcbiAgICAgIHRoaXMuZGVhbENhcmQoKTtcbiAgICB9XG4gICAgdGhpcy5vbkRlY2tDYXJkID0gdGhpcy5kZWNrLmRlYWwoKTtcbiAgICB0aGlzLmFjdGl2ZUdhbWUgPSB0cnVlO1xuICAgIHRoaXMuYm9hcmQuc2V0Qm9hcmQoKTtcblxuICB9XG5cbiAgLy8gYWxsIG1vdmVzXG4gIHBvc3NpYmxlTW92ZXMoY2FyZCwgc3RhcnRQb3MpIHsgIC8vIGFsbCBwb3NzaWJsZVxuICAgIGxldCB0aGF0ID0gdGhpcztcbiAgICBpZiAodGhhdC5jdXJyZW50UGxheWVySWR4ID09PSAwKSB7XG4gICAgICByZXR1cm4gdGhhdC5ibHVlTW92ZXMoY2FyZCwgc3RhcnRQb3MpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhhdC5yZWRNb3ZlcyhjYXJkLCBzdGFydFBvcyk7XG4gICAgfVxuICB9XG5cbiAgLy8gbGltaXRzIGFjdHVhbCBtb3ZlcyBieSBlbXB0eSBhbmQgY29sb3JcbiAgYWxsb3dlZE1vdmVzKGNhcmQsIHN0YXJ0UG9zKSB7XG4gICAgbGV0IHRoYXQgPSB0aGlzO1xuXG4gICAgaWYgKCF0aGF0LmJvYXJkLnZhbGlkUG9zKHN0YXJ0UG9zKSkgcmV0dXJuIGZhbHNlO1xuICAgIGxldCBhbGxNb3ZlcyA9IHRoYXQucG9zc2libGVNb3ZlcyhjYXJkLCBzdGFydFBvcyk7XG4gICAgLy8gXG4gICAgbGV0IHJlYWxNb3ZlcyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWxsTW92ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIC8vIDtcbiAgICAgIGlmICh0aGF0LmJvYXJkLnZhbGlkUG9zKGFsbE1vdmVzW2ldKSkge1xuICAgICAgICBpZiAodGhhdC5ib2FyZC5pc0VtcHR5KGFsbE1vdmVzW2ldKSA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHJlYWxNb3Zlcy5wdXNoKGFsbE1vdmVzW2ldKTtcbiAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgIGlmICgodGhhdC5ib2FyZC5nZXRQaWVjZShhbGxNb3Zlc1tpXSkpLmNvbG9yICE9PSB0aGF0LnBsYXllci5jb2xvci50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICByZWFsTW92ZXMucHVzaChhbGxNb3Zlc1tpXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZWFsTW92ZXM7XG4gIH1cblxuICBibHVlTW92ZXMoY2FyZCwgc3RhcnRQb3MpIHtcbiAgICBsZXQgdGhhdCA9IHRoaXM7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGF0LnBsYXllci5oYW5kLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhhdC5wbGF5ZXIuaGFuZFtpXSA9PT0gY2FyZCkgeyAgLy8gY2hhbmdlZCBmcm9tIGluY2x1ZGVzXG4gICAgICAgIGNvbnNvbGUubG9nKFwib2tcIik7XG4gICAgICAgIGxldCBtb3ZlcyA9IHRoYXQucGxheWVyLmhhbmRbaV0uc2xpY2UoMSk7XG4gICAgICAgIGxldCBwb3NzaWJsZVBvcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG1vdmVzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgbGV0IHJvdyA9IHN0YXJ0UG9zWzBdICsgbW92ZXNbal1bMF07XG4gICAgICAgICAgbGV0IGNvbCA9IHN0YXJ0UG9zWzFdICsgbW92ZXNbal1bMV07XG4gICAgICAgICAgcG9zc2libGVQb3MucHVzaChbcm93LCBjb2xdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwb3NzaWJsZVBvcztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiQ2FyZCBpcyBub3QgaW4geW91ciBoYW5kXCIpOyAgLy8gYWxsIHJldHVybmluZyBlbHNlXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb3BwTW92ZXMobW92ZXMpIHsgIC8vIGZsaXBzIG9wcG9uZW50IHBvc3NpYmxlIHBvcyBcbiAgICBsZXQgbmV3TW92ZXMgPSBbXTtcbiAgICBjb25zb2xlLmxvZyhtb3Zlcyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb3Zlcy5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IHN1YkFyciA9IFtdO1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBtb3Zlc1swXS5sZW5ndGg7IGorKykge1xuICAgICAgICBsZXQgZWxlID0gbW92ZXNbaV1bal07XG4gICAgICAgIGlmIChlbGUgPT09IDApIHtcbiAgICAgICAgICBzdWJBcnIucHVzaChlbGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN1YkFyci5wdXNoKG1vdmVzW2ldW2pdICogLTEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBuZXdNb3Zlcy5wdXNoKHN1YkFycik7XG4gICAgfVxuICAgIHJldHVybiBuZXdNb3ZlcztcbiAgfVxuXG4gIHJlZE1vdmVzKGNhcmQsIHN0YXJ0UG9zKSB7XG4gICAgbGV0IHRoYXQgPSB0aGlzO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhhdC5wbGF5ZXIuaGFuZC5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRoYXQucGxheWVyLmhhbmRbaV0gPT09IGNhcmQpIHsgIC8vIGNoYW5nZWQgZnJvbSAuaW5jbHVkZXMgXG4gICAgICAgIGxldCBtb3ZlcyA9IHRoYXQucGxheWVyLmhhbmRbaV0uc2xpY2UoMSk7XG4gICAgICAgIGxldCBtb3Zlc1JldiA9ICh0aGF0Lm9wcE1vdmVzKG1vdmVzKSk7XG4gICAgICAgIGxldCBwb3NzaWJsZVBvcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG1vdmVzUmV2Lmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgbGV0IHJvdyA9IHN0YXJ0UG9zWzBdICsgbW92ZXNSZXZbal1bMF07XG4gICAgICAgICAgbGV0IGNvbCA9IHN0YXJ0UG9zWzFdICsgbW92ZXNSZXZbal1bMV07XG4gICAgICAgICAgcG9zc2libGVQb3MucHVzaChbcm93LCBjb2xdKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcG9zc2libGVQb3M7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZyhcIkNhcmQgaXMgbm90IGluIHlvdXIgaGFuZFwiKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjaGVja0hpZ2hsaWdodCgpIHtcbiAgICBsZXQgYWxsQ2FyZHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLmJhY2tcIik7XG4gICAgbGV0IGFsbFBhd25zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIiNwYXduXCIpO1xuICAgIGxldCB0aGF0ID0gdGhpcztcbiAgICBhbGxQYXducy5mb3JFYWNoKGZ1bmN0aW9uIChwYXduKSB7XG4gICAgICBpZiAocGF3bi5jbGFzc0xpc3QuY29udGFpbnMoXCJhY3RpdmUtcGF3blwiKSkge1xuICAgICAgICB0aGF0LmFjdGl2ZVBhd24gPSBwYXduO1xuICAgICAgICB0aGF0LnRhcmdldFBvcyA9IHRoYXQuY3VycmVudFBvcyhwYXduKTtcbiAgICAgICAgY29uc29sZS5sb2coXCJGb3VuZCBhY3RpdmUgcGF3biFcIik7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBhbGxDYXJkcy5mb3JFYWNoKGZ1bmN0aW9uIChjYXJkKSB7XG4gICAgICBpZiAoY2FyZC5jbGFzc0xpc3QuY29udGFpbnMoXCJhY3RpdmUtY2FyZFwiKSkge1xuICAgICAgICBjb25zb2xlLmxvZyhcIkZvdW5kIGFjdGl2ZSBjYXJkIVwiKTtcbiAgICAgICAgdGhhdC5hY3RpdmVDYXJkID0gY2FyZDtcbiAgICAgICAgdGhhdC50YXJnZXRDYXJkID0gdGhhdC5jdXJyZW50Q2FyZChjYXJkKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmICh0aGF0LmFjdGl2ZVBhd24gIT09IG51bGwgJiYgdGhhdC5hY3RpdmVDYXJkICE9PSBudWxsKSB7XG4gICAgICBjb25zb2xlLmxvZyhcIkJvdGggQWN0aXZlIVwiKTtcbiAgICAgIHRoYXQudGFyZ2V0TW92ZXMgPSB0aGF0LnZpZXdNb3ZlcygpOyAgLy8gaGlnaGxpZ2h0IHBvcyBcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvLyBkZWJ1Z2dlclxuICB9XG5cbiAgLy8gc2V0cyBnYW1lLnRhcmdldFBvcyBpbiBjaGVja0hpZ2hsaWdodFxuICBjdXJyZW50UG9zKHBhd25FbCkge1xuICAgIC8vIGNvbnN0IHRoYXQgPSB0aGlzO1xuICAgIGxldCBwb3MgPSBbXTtcbiAgICBsZXQgcG9zU3RyID0gcGF3bkVsLnBhcmVudEVsZW1lbnQuaWQ7XG4gICAgbGV0IHN0ckFyciA9IHBvc1N0ci5zbGljZSgxLCBwb3NTdHIubGVuZ3RoKS5zcGxpdChcIixcIik7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHJBcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgIHBvcy5wdXNoKChwYXJzZUludChzdHJBcnJbaV0pKSk7XG4gICAgfVxuICAgIHJldHVybiBwb3M7XG4gIH1cblxuICAvLyBzZXRzIGdhbWUudGFyZ2V0Q2FyZCBpbiBjaGVja0hpZ2hsaWdodFxuICBjdXJyZW50Q2FyZChjYXJkRWwpIHtcbiAgICBjb25zb2xlLmxvZyhcImluIGN1cnJlbnRDYXJkXCIpO1xuICAgIGxldCB0aGF0ID0gdGhpcztcbiAgICBsZXQgY2FyZFN0ciA9IGNhcmRFbC5pZC5zbGljZSg0KTtcbiAgICBsZXQgY2FyZE51bSA9IHBhcnNlSW50KGNhcmRTdHIpO1xuICAgIGlmIChjYXJkTnVtID09PSAxKSByZXR1cm4gdGhhdC5wbGF5ZXJzWzBdLmhhbmRbMF07XG4gICAgaWYgKGNhcmROdW0gPT09IDIpIHJldHVybiB0aGF0LnBsYXllcnNbMF0uaGFuZFsxXTtcbiAgICBpZiAoY2FyZE51bSA9PT0gMykgcmV0dXJuIG51bGw7IC8vIG5lZWQgb25EZWNrPyBNYXliZSBub3QuXG4gICAgaWYgKGNhcmROdW0gPT09IDQpIHJldHVybiB0aGF0LnBsYXllcnNbMV0uaGFuZFswXTtcbiAgICBpZiAoY2FyZE51bSA9PT0gNSkgcmV0dXJuIHRoYXQucGxheWVyc1sxXS5oYW5kWzFdO1xuICB9XG5cbiAgdmlld01vdmVQaWVjZShwb3NFbmRFbGUpIHtcbiAgICBsZXQgdGhhdCA9IHRoaXM7XG4gICAgbGV0IHBvc1N0YXJ0ID0gdGhhdC5jdXJyZW50UG9zKHRoYXQuYWN0aXZlUGF3bik7XG4gICAgbGV0IHBvc0VuZCA9IHRoYXQuY29udmVydFN0clBvcyhwb3NFbmRFbGUuaWQpO1xuICAgIC8vIGRlYnVnZ2VyO1xuICAgIGlmIChib2FyZC5ncmlkW3Bvc0VuZFswXV1bcG9zRW5kWzFdXSAhPT0gbnVsbCkge1xuICAgICAgdGhhdC5ib2FyZC5yZW1vdmVQaWVjZShwb3NFbmQpO1xuICAgICAgdGhhdC5ib2FyZC52aWV3UmVtb3ZlUGllY2UocG9zRW5kKTsgIC8vIHRha2VzIHBpZWNlXG4gICAgfVxuICAgIHRoYXQuYm9hcmQubW92ZVBpZWNlKHBvc1N0YXJ0LCBwb3NFbmQpO1xuICAgIC8vIGNvZGVkIG1vdmVQaWVjZSBjYWxscyB2aWV3UGxhY2VQaWVjZVxuICAgIGxldCBwaWVjZSA9IHRoYXQuYm9hcmQuZ2V0UGllY2UocG9zRW5kKTsgLy8gUGllY2VcbiAgICAvLyBkZWJ1Z2dlclxuICAgIHRoYXQuYm9hcmQudmlld1JlbW92ZVBpZWNlKHBvc1N0YXJ0KTsgLy8gcmVtb3ZlIG9sZCBwb3NcbiAgICAvLyBUVVJOIFNXQVAgXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGF0LnZpZXdTd2FwVHVybigpO1xuICAgIH0sIDIwMDApO1xuICB9XG5cbiAgYXN5bmMgdmlld1N3YXBVc2VkQ2FyZChwbGF5ZWRDYXJkRWwsIGRlY2tDYXJkRWwpIHtcbiAgICBjb25zb2xlLmxvZyhcImluIHN3YXAgdXNlZFwiKTtcbiAgICBsZXQgdGhhdCA9IHRoaXM7XG4gICAgbGV0IGN1cnJlbnRIYW5kID0gdGhhdC5wbGF5ZXIuaGFuZDtcbiAgICBsZXQgcGxheWVkQ2FyZCA9IHRoYXQuY3VycmVudENhcmQocGxheWVkQ2FyZEVsKTtcbiAgICBsZXQgZGVja0NhcmQgPSB0aGF0Lm9uRGVja0NhcmQ7XG4gICAgbGV0IHBsYXllZENhcmRJZHggPSBudWxsO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY3VycmVudEhhbmQubGVuZ3RoOyBpKyspIHtcbiAgICAgIC8vIGRlYnVnZ2VyXG4gICAgICBpZiAocGxheWVkQ2FyZCA9PT0gY3VycmVudEhhbmRbaV0pIHBsYXllZENhcmRJZHggPSBpO1xuICAgIH1cbiAgICAvLyBib2FyZCBzd2FwXG4gICAgbGV0IG5ld1BsYXllckNhcmQgPSBkZWNrQ2FyZDtcbiAgICBsZXQgbmV3RGVja0NhcmQgPSBwbGF5ZWRDYXJkO1xuICAgIGN1cnJlbnRIYW5kW3BsYXllZENhcmRJZHhdID0gbmV3UGxheWVyQ2FyZDtcbiAgICBkZWNrQ2FyZCA9IG5ld0RlY2tDYXJkO1xuICAgIHRoaXMub25EZWNrQ2FyZCA9IG5ld0RlY2tDYXJkOyAvLyBuZXdcbiAgICAvLyBkZWJ1Z2dlcjtcblxuICAgIC8vIHZpZXcgc3dhcFxuICAgIHRoYXQuZGVjay52aWV3RGVhbFN3YXAobmV3UGxheWVyQ2FyZCwgcGxheWVkQ2FyZEVsKTtcbiAgICB0aGF0LmRlY2sudmlld0RlYWxTd2FwKG5ld0RlY2tDYXJkLCBkZWNrQ2FyZEVsKTtcbiAgfVxuXG5cbiAgdmlld1N3YXBUdXJuKCkge1xuICAgIGxldCB0aGF0ID0gdGhpcztcblxuICAgIGxldCBwbGF5ZWRDYXJkID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5hY3RpdmUtY2FyZFwiKTtcbiAgICBsZXQgZGVja0NhcmQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI2JhY2szXCIpO1xuXG5cbiAgICAvLyBzcXVhcmVzIHJlbW92ZSBoaWdobGlnaHRcbiAgICBsZXQgYWxsU3F1YXJlcyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3NxdWFyZScpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWxsU3F1YXJlcy5sZW5ndGg7IGkrKykge1xuICAgICAgYWxsU3F1YXJlc1tpXS5jbGFzc0xpc3QucmVtb3ZlKFwiYWN0aXZlXCIpO1xuICAgICAgYWxsU3F1YXJlc1tpXS5jbGFzc0xpc3QuYWRkKFwiaW5hY3RpdmVcIik7XG4gICAgfVxuXG4gICAgLy8gcGF3bnMgcmVtb3ZlIGhpZ2hsaWdodFxuICAgIGxldCBhbGxQYXducyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIjcGF3blwiKTtcbiAgICBhbGxQYXducy5mb3JFYWNoKGZ1bmN0aW9uIChwYXduKSB7XG4gICAgICBpZiAocGF3bi5jbGFzc0xpc3QuY29udGFpbnMoXCJhY3RpdmUtcGF3blwiKSkge1xuICAgICAgICBwYXduLmNsYXNzTGlzdC5yZW1vdmUoXCJhY3RpdmUtcGF3blwiKTtcbiAgICAgICAgcGF3bi5jbGFzc0xpc3QuYWRkKFwiaW5hY3RpdmUtcGF3blwiKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIGhpZGUgdXNlZCBjYXJkc1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgLy8gZmxpcCB1c2VkXG4gICAgICB0aGF0LmRlY2sudmlld1RvZ2dsZUZsaXBUdXJuKCkudGhlbihcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgLy8gc3dhcCB1c2VkXG4gICAgICAgICAgdGhhdC52aWV3U3dhcFVzZWRDYXJkKHBsYXllZENhcmQsIGRlY2tDYXJkKS50aGVuKFxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIC8vIGZsaXAgYmFja1xuICAgICAgICAgICAgICB0aGF0LmRlY2sudmlld1RvZ2dsZUZsaXBUdXJuKCkudGhlbihcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgIC8vIHJtIGhpZ2hsaWdodFxuICAgICAgICAgICAgICAgICAgdGhhdC52aWV3UmVtb3ZlQ2FyZEhpZ2hsaWdodCgpLnRoZW4oXG4gICAgICAgICAgICAgICAgICAgIC8vIHN3YXAgdHVybiBAIGJvYXJkXG4gICAgICAgICAgICAgICAgICAgIHRoYXQuc3dhcFR1cm4oKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfSwgNjAwKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9LCA2MDApXG4gICAgICAgICAgKVxuICAgICAgICB9LCA2MDApXG4gICAgICApXG4gICAgfSwgMTAwMCk7XG4gIH1cblxuICAvLyBjYXJkIHJlbW92ZSBoaWdobGlnaHRcbiAgYXN5bmMgdmlld1JlbW92ZUNhcmRIaWdobGlnaHQoKSB7XG4gICAgbGV0IGFsbENhcmRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5iYWNrXCIpO1xuICAgIGFsbENhcmRzLmZvckVhY2goZnVuY3Rpb24gKGNhcmQpIHtcbiAgICAgIGNhcmQuY2xhc3NMaXN0LnJlbW92ZShcImFjdGl2ZS1jYXJkXCIpO1xuICAgICAgY2FyZC5jbGFzc0xpc3QuYWRkKFwiaW5hY3RpdmUtY2FyZFwiKTtcbiAgICB9KTtcbiAgfVxuXG5cbiAgdmlld01vdmVzKCkge1xuICAgIGxldCB0aGF0ID0gdGhpcztcbiAgICBsZXQgaGlnaGxpZ2h0TW92ZXMgPSB0aGF0LmFsbG93ZWRNb3Zlcyh0aGF0LnRhcmdldENhcmQsIHRoYXQudGFyZ2V0UG9zKTtcbiAgICBsZXQgdmlld1NxdWFyZXMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhpZ2hsaWdodE1vdmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgc3F1YXJlU2VsZWN0b3IgPSBKU09OLnN0cmluZ2lmeShoaWdobGlnaHRNb3Zlc1tpXSk7XG4gICAgICBsZXQgc3F1YXJlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoc3F1YXJlU2VsZWN0b3IpO1xuICAgICAgdmlld1NxdWFyZXMucHVzaChzcXVhcmUpO1xuICAgIH1cbiAgICBsZXQgYWxsU3F1YXJlcyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3NxdWFyZScpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWxsU3F1YXJlcy5sZW5ndGg7IGkrKykge1xuICAgICAgYWxsU3F1YXJlc1tpXS5jbGFzc0xpc3QucmVtb3ZlKFwiYWN0aXZlXCIpO1xuICAgICAgYWxsU3F1YXJlc1tpXS5jbGFzc0xpc3QuYWRkKFwiaW5hY3RpdmVcIik7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmlld1NxdWFyZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZpZXdTcXVhcmVzW2ldLmNsYXNzTGlzdC5hZGQoXCJhY3RpdmVcIik7XG4gICAgICB2aWV3U3F1YXJlc1tpXS5jbGFzc0xpc3QucmVtb3ZlKFwiaW5hY3RpdmVcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGhpZ2hsaWdodE1vdmVzO1xuICB9XG5cbiAgLy8gJ1sxLDJdJyB0byBbMSwyXVxuICBjb252ZXJ0U3RyUG9zKHN0clBvcykge1xuICAgIGxldCBhcnIgPSBbXTtcbiAgICBsZXQgc3RyQXJyID0gc3RyUG9zLnNsaWNlKDEsIDQpLnNwbGl0KCcsJyk7XG4gICAgLy8gWycxJywgJzInXVxuICAgIHN0ckFyci5mb3JFYWNoKChlbGUpID0+IHtcbiAgICAgIGFyci5wdXNoKHBhcnNlSW50KGVsZSkpO1xuICAgIH0pO1xuICAgIHJldHVybiBhcnI7XG4gIH1cblxufVxuXG5cblxuXG5cbi8vIGNvbnNpZGVyIGFkZGluZyBhIEtFWTp2YWx1ZSBsaXN0IG9mIHZhcmlhYmxlcyBsaWtlIHBhd24sIG1hc3Rlciwgb3IgcGxheWVyIFxuLy8gYWxzbyB3aGVyZSB0byBrZWVwIGNhcmQgb2JqZWN0cz9cblxuXG5cbi8vIGZ1bmN0aW9uIGFkZEdsb2JhbEV2ZW50TGlzdGVuZXIodHlwZSwgc2VsZWN0b3IsIGNhbGxiYWNrKSB7XG4vLyAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgZSA9PiB7XG4vLyAgICAgaWYgKGUudGFyZ2V0Lm1hdGNoZXMoc2VsZWN0b3IpKSBjYWxsYmFjayhlKTtcbi8vICAgfSk7XG4vLyB9XG5cblxuLy8gZnVuY3Rpb24gY3JlYXRlR3JpZCgpIHtcbi8vICAgY29uc3QgZ2FtZUJvYXJkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJib2FyZFwiKTtcblxuLy8gICBmb3IgKGxldCBpID0gMDsgaSA8IDU7IGkrKykge1xuLy8gICAgIGZvciAobGV0IGogPSAwOyBqIDwgNTsgaisrKSB7XG4vLyAgICAgICBsZXQgc3F1YXJlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbi8vICAgICAgIHNxdWFyZS5jbGFzc0xpc3QuYWRkKFwic3F1YXJlXCIpO1xuLy8gICAgICAgc3F1YXJlLnNldEF0dHJpYnV0ZShcImlkXCIsIFtpLCBqXSk7XG4vLyAgICAgICAvLyBnYW1lQm9hcmQuYXBwZW5kQ2hpbGQoc3F1YXJlKTtcbi8vICAgICB9XG4vLyAgIH1cbi8vIH1cblxuLy8gY3JlYXRlR3JpZCgpOyJdLCJuYW1lcyI6WyJEZWNrIiwiQm9hcmQiLCJQbGF5ZXIiLCJHYW1lIiwiYWN0aXZlR2FtZSIsInRhcmdldFBvcyIsInRhcmdldENhcmQiLCJ0YXJnZXRNb3ZlcyIsImFjdGl2ZVBhd24iLCJhY3RpdmVDYXJkIiwiY3VycmVudFBsYXllcklkeCIsInBsYXllcnMiLCJwbGF5ZXIiLCJjdXJyZW50UGxheWVyIiwiZGVjayIsImJvYXJkIiwid2luZG93Iiwib3RoZXJQbGF5ZXIiLCJjYXJkIiwiZGVhbCIsImRlYWxDYXJkIiwic3dhcFR1cm4iLCJpIiwib25EZWNrQ2FyZCIsInNldEJvYXJkIiwic3RhcnRQb3MiLCJ0aGF0IiwiYmx1ZU1vdmVzIiwicmVkTW92ZXMiLCJ2YWxpZFBvcyIsImFsbE1vdmVzIiwicG9zc2libGVNb3ZlcyIsInJlYWxNb3ZlcyIsImxlbmd0aCIsImlzRW1wdHkiLCJwdXNoIiwiZ2V0UGllY2UiLCJjb2xvciIsInRvTG93ZXJDYXNlIiwiaGFuZCIsImNvbnNvbGUiLCJsb2ciLCJtb3ZlcyIsInNsaWNlIiwicG9zc2libGVQb3MiLCJqIiwicm93IiwiY29sIiwibmV3TW92ZXMiLCJzdWJBcnIiLCJlbGUiLCJtb3Zlc1JldiIsIm9wcE1vdmVzIiwiYWxsQ2FyZHMiLCJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJhbGxQYXducyIsImZvckVhY2giLCJwYXduIiwiY2xhc3NMaXN0IiwiY29udGFpbnMiLCJjdXJyZW50UG9zIiwiY3VycmVudENhcmQiLCJ2aWV3TW92ZXMiLCJwYXduRWwiLCJwb3MiLCJwb3NTdHIiLCJwYXJlbnRFbGVtZW50IiwiaWQiLCJzdHJBcnIiLCJzcGxpdCIsInBhcnNlSW50IiwiY2FyZEVsIiwiY2FyZFN0ciIsImNhcmROdW0iLCJwb3NFbmRFbGUiLCJwb3NTdGFydCIsInBvc0VuZCIsImNvbnZlcnRTdHJQb3MiLCJncmlkIiwicmVtb3ZlUGllY2UiLCJ2aWV3UmVtb3ZlUGllY2UiLCJtb3ZlUGllY2UiLCJwaWVjZSIsInNldFRpbWVvdXQiLCJ2aWV3U3dhcFR1cm4iLCJwbGF5ZWRDYXJkRWwiLCJkZWNrQ2FyZEVsIiwiY3VycmVudEhhbmQiLCJwbGF5ZWRDYXJkIiwiZGVja0NhcmQiLCJwbGF5ZWRDYXJkSWR4IiwibmV3UGxheWVyQ2FyZCIsIm5ld0RlY2tDYXJkIiwidmlld0RlYWxTd2FwIiwicXVlcnlTZWxlY3RvciIsImFsbFNxdWFyZXMiLCJnZXRFbGVtZW50c0J5Q2xhc3NOYW1lIiwicmVtb3ZlIiwiYWRkIiwidmlld1RvZ2dsZUZsaXBUdXJuIiwidGhlbiIsInZpZXdTd2FwVXNlZENhcmQiLCJ2aWV3UmVtb3ZlQ2FyZEhpZ2hsaWdodCIsImhpZ2hsaWdodE1vdmVzIiwiYWxsb3dlZE1vdmVzIiwidmlld1NxdWFyZXMiLCJzcXVhcmVTZWxlY3RvciIsIkpTT04iLCJzdHJpbmdpZnkiLCJzcXVhcmUiLCJnZXRFbGVtZW50QnlJZCIsInN0clBvcyIsImFyciJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/scripts/game.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ Game; }\n/* harmony export */ });\n/* harmony import */ var core_js_modules_es_array_slice_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.slice.js */ \"./node_modules/core-js/modules/es.array.slice.js\");\n/* harmony import */ var core_js_modules_es_array_slice_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_slice_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.object.to-string.js */ \"./node_modules/core-js/modules/es.object.to-string.js\");\n/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/web.dom-collections.for-each.js */ \"./node_modules/core-js/modules/web.dom-collections.for-each.js\");\n/* harmony import */ var core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.regexp.exec.js */ \"./node_modules/core-js/modules/es.regexp.exec.js\");\n/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var core_js_modules_es_string_split_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.string.split.js */ \"./node_modules/core-js/modules/es.string.split.js\");\n/* harmony import */ var core_js_modules_es_string_split_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_split_js__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/es.promise.js */ \"./node_modules/core-js/modules/es.promise.js\");\n/* harmony import */ var core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var regenerator_runtime_runtime_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! regenerator-runtime/runtime.js */ \"./node_modules/regenerator-runtime/runtime.js\");\n/* harmony import */ var regenerator_runtime_runtime_js__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(regenerator_runtime_runtime_js__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _deck_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./deck.js */ \"./src/scripts/deck.js\");\n/* harmony import */ var _board_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./board.js */ \"./src/scripts/board.js\");\n/* harmony import */ var _player__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./player */ \"./src/scripts/player.js\");\n\n\n\n\n\n\n\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\n// import Player from './player.js';\n\n\n\n\nvar Game = /*#__PURE__*/function () {\n function Game() {\n _classCallCheck(this, Game);\n\n this.activeGame = false;\n this.targetPos = null; // checkHighlight\n\n this.targetCard = null;\n this.targetMoves = null;\n this.activePawn = null; // checkHighlight\n\n this.activeCard = null; // checkHighlight\n\n this.currentPlayerIdx = 0; // aid with dealing cards\n\n this.players = [new _player__WEBPACK_IMPORTED_MODULE_9__[\"default\"](\"Player 1\", \"Blue\"), new _player__WEBPACK_IMPORTED_MODULE_9__[\"default\"](\"Player 2\", \"Red\")];\n this.player = this.currentPlayer;\n this.deck = new _deck_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"]();\n this.board = new _board_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"](); // Window debugging:\n\n window.board = this.board;\n window.deck = this.deck;\n window.players = this.players;\n window.player = this.player;\n window.otherPlayer = this.otherPlayer;\n } // getter access like a property:\n\n\n _createClass(Game, [{\n key: \"currentPlayer\",\n get: function get() {\n return this.players[this.currentPlayerIdx];\n }\n }, {\n key: \"otherPlayer\",\n get: function get() {\n return this.players[(this.currentPlayerIdx + 1) % 2];\n } // always 0 or 1 using %\n\n }, {\n key: \"swapTurn\",\n value: function () {\n var _swapTurn = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {\n return regeneratorRuntime.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n this.currentPlayerIdx = (this.currentPlayerIdx + 1) % 2;\n this.player = this.currentPlayer;\n window.player = this.player;\n\n case 3:\n case \"end\":\n return _context.stop();\n }\n }\n }, _callee, this);\n }));\n\n function swapTurn() {\n return _swapTurn.apply(this, arguments);\n }\n\n return swapTurn;\n }() // deal alternates between players until 4, then on-deck\n\n }, {\n key: \"dealCard\",\n value: function dealCard() {\n var card = this.deck.deal();\n this.currentPlayer.dealCard(card);\n this.swapTurn();\n } // event handled in index.js \n\n }, {\n key: \"start\",\n value: function start() {\n for (var i = 0; i < 4; i++) {\n this.dealCard();\n }\n\n this.onDeckCard = this.deck.deal();\n this.activeGame = true;\n this.board.setBoard();\n } // all moves\n\n }, {\n key: \"possibleMoves\",\n value: function possibleMoves(card, startPos) {\n // all possible\n var that = this;\n\n if (that.currentPlayerIdx === 0) {\n return that.blueMoves(card, startPos);\n } else {\n return that.redMoves(card, startPos);\n }\n } // limits actual moves by empty and color\n\n }, {\n key: \"allowedMoves\",\n value: function allowedMoves(card, startPos) {\n var that = this;\n if (!that.board.validPos(startPos)) return false;\n var allMoves = that.possibleMoves(card, startPos); // \n\n var realMoves = [];\n\n for (var i = 0; i < allMoves.length; i++) {\n // ;\n if (that.board.validPos(allMoves[i])) {\n if (that.board.isEmpty(allMoves[i]) === true) {\n realMoves.push(allMoves[i]);\n } else {\n if (that.board.getPiece(allMoves[i]).color !== that.player.color.toLowerCase()) {\n realMoves.push(allMoves[i]);\n }\n }\n }\n }\n\n return realMoves;\n }\n }, {\n key: \"blueMoves\",\n value: function blueMoves(card, startPos) {\n var that = this;\n\n for (var i = 0; i < that.player.hand.length; i++) {\n if (that.player.hand[i] === card) {\n // changed from includes\n console.log(\"ok\");\n var moves = that.player.hand[i].slice(1);\n var possiblePos = [];\n\n for (var j = 0; j < moves.length; j++) {\n var row = startPos[0] + moves[j][0];\n var col = startPos[1] + moves[j][1];\n possiblePos.push([row, col]);\n }\n\n return possiblePos;\n } else {\n console.log(\"Card is not in your hand\"); // all returning else\n }\n }\n }\n }, {\n key: \"oppMoves\",\n value: function oppMoves(moves) {\n // flips opponent possible pos \n var newMoves = [];\n console.log(moves);\n\n for (var i = 0; i < moves.length; i++) {\n var subArr = [];\n\n for (var j = 0; j < moves[0].length; j++) {\n var ele = moves[i][j];\n\n if (ele === 0) {\n subArr.push(ele);\n } else {\n subArr.push(moves[i][j] * -1);\n }\n }\n\n newMoves.push(subArr);\n }\n\n return newMoves;\n }\n }, {\n key: \"redMoves\",\n value: function redMoves(card, startPos) {\n var that = this;\n\n for (var i = 0; i < that.player.hand.length; i++) {\n if (that.player.hand[i] === card) {\n // changed from .includes \n var moves = that.player.hand[i].slice(1);\n var movesRev = that.oppMoves(moves);\n var possiblePos = [];\n\n for (var j = 0; j < movesRev.length; j++) {\n var row = startPos[0] + movesRev[j][0];\n var col = startPos[1] + movesRev[j][1];\n possiblePos.push([row, col]);\n }\n\n return possiblePos;\n } else {\n console.log(\"Card is not in your hand\");\n }\n }\n }\n }, {\n key: \"checkHighlight\",\n value: function checkHighlight() {\n var allCards = document.querySelectorAll(\".back\");\n var allPawns = document.querySelectorAll(\"#pawn\");\n var that = this;\n allPawns.forEach(function (pawn) {\n if (pawn.classList.contains(\"active-pawn\")) {\n that.activePawn = pawn;\n that.targetPos = that.currentPos(pawn);\n console.log(\"Found active pawn!\");\n }\n });\n allCards.forEach(function (card) {\n if (card.classList.contains(\"active-card\")) {\n console.log(\"Found active card!\");\n that.activeCard = card;\n that.targetCard = that.currentCard(card);\n }\n });\n\n if (that.activePawn !== null && that.activeCard !== null) {\n console.log(\"Both Active!\");\n that.targetMoves = that.viewMoves(); // highlight pos \n } else {\n return false;\n } // debugger\n\n } // sets game.targetPos in checkHighlight\n\n }, {\n key: \"currentPos\",\n value: function currentPos(pawnEl) {\n // const that = this;\n var pos = [];\n var posStr = pawnEl.parentElement.id;\n var strArr = posStr.slice(1, posStr.length).split(\",\");\n\n for (var i = 0; i < strArr.length; i++) {\n pos.push(parseInt(strArr[i]));\n }\n\n return pos;\n } // sets game.targetCard in checkHighlight\n\n }, {\n key: \"currentCard\",\n value: function currentCard(cardEl) {\n console.log(\"in currentCard\");\n var that = this;\n var cardStr = cardEl.id.slice(4);\n var cardNum = parseInt(cardStr);\n if (cardNum === 1) return that.players[0].hand[0];\n if (cardNum === 2) return that.players[0].hand[1];\n if (cardNum === 3) return null; // need onDeck? Maybe not.\n\n if (cardNum === 4) return that.players[1].hand[0];\n if (cardNum === 5) return that.players[1].hand[1];\n }\n }, {\n key: \"viewMovePiece\",\n value: function viewMovePiece(posEndEle) {\n var that = this;\n var posStart = that.currentPos(that.activePawn);\n var posEnd = that.convertStrPos(posEndEle.id); // debugger;\n\n if (board.grid[posEnd[0]][posEnd[1]] !== null) {\n that.board.removePiece(posEnd);\n that.board.viewRemovePiece(posEnd); // takes piece\n }\n\n that.board.movePiece(posStart, posEnd); // coded movePiece calls viewPlacePiece\n\n var piece = that.board.getPiece(posEnd); // Piece\n // debugger\n\n that.board.viewRemovePiece(posStart); // remove old pos\n // TURN SWAP \n\n setTimeout(function () {\n that.viewSwapTurn();\n }, 2000);\n }\n }, {\n key: \"viewSwapUsedCard\",\n value: function () {\n var _viewSwapUsedCard = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2(playedCardEl, deckCardEl) {\n var that, currentHand, playedCard, deckCard, playedCardIdx, i, newPlayerCard, newDeckCard;\n return regeneratorRuntime.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n console.log(\"in swap used\");\n that = this;\n currentHand = that.player.hand;\n playedCard = that.currentCard(playedCardEl);\n deckCard = that.onDeckCard;\n playedCardIdx = null;\n\n for (i = 0; i < currentHand.length; i++) {\n // debugger\n if (playedCard === currentHand[i]) playedCardIdx = i;\n } // board swap\n\n\n newPlayerCard = deckCard;\n newDeckCard = playedCard;\n currentHand[playedCardIdx] = newPlayerCard;\n deckCard = newDeckCard;\n this.onDeckCard = newDeckCard; // new\n // debugger;\n // view swap\n\n that.deck.viewDealSwap(newPlayerCard, playedCardEl);\n that.deck.viewDealSwap(newDeckCard, deckCardEl);\n\n case 14:\n case \"end\":\n return _context2.stop();\n }\n }\n }, _callee2, this);\n }));\n\n function viewSwapUsedCard(_x, _x2) {\n return _viewSwapUsedCard.apply(this, arguments);\n }\n\n return viewSwapUsedCard;\n }()\n }, {\n key: \"viewSwapTurn\",\n value: function viewSwapTurn() {\n var that = this;\n var playedCard = document.querySelector(\".active-card\");\n var deckCard = document.querySelector(\"#back3\"); // squares remove highlight\n\n var allSquares = document.getElementsByClassName('square');\n\n for (var i = 0; i < allSquares.length; i++) {\n allSquares[i].classList.remove(\"active\");\n allSquares[i].classList.add(\"inactive\");\n } // pawns remove highlight\n\n\n var allPawns = document.querySelectorAll(\"#pawn\");\n allPawns.forEach(function (pawn) {\n if (pawn.classList.contains(\"active-pawn\")) {\n pawn.classList.remove(\"active-pawn\");\n pawn.classList.add(\"inactive-pawn\");\n }\n }); // hide used cards\n\n setTimeout(function () {\n // flip used\n that.deck.viewToggleFlipTurn().then(setTimeout(function () {\n // swap used\n that.viewSwapUsedCard(playedCard, deckCard).then(setTimeout(function () {\n // flip back\n that.deck.viewToggleFlipTurn().then(setTimeout(function () {\n // rm highlight\n that.viewRemoveCardHighlight().then( // swap turn @ board\n that.swapTurn());\n }, 600));\n }, 600));\n }, 600));\n }, 1000);\n } // card remove highlight\n\n }, {\n key: \"viewRemoveCardHighlight\",\n value: function () {\n var _viewRemoveCardHighlight = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee3() {\n var allCards;\n return regeneratorRuntime.wrap(function _callee3$(_context3) {\n while (1) {\n switch (_context3.prev = _context3.next) {\n case 0:\n allCards = document.querySelectorAll(\".back\");\n allCards.forEach(function (card) {\n card.classList.remove(\"active-card\");\n card.classList.add(\"inactive-card\");\n });\n\n case 2:\n case \"end\":\n return _context3.stop();\n }\n }\n }, _callee3);\n }));\n\n function viewRemoveCardHighlight() {\n return _viewRemoveCardHighlight.apply(this, arguments);\n }\n\n return viewRemoveCardHighlight;\n }()\n }, {\n key: \"viewMoves\",\n value: function viewMoves() {\n var that = this;\n var highlightMoves = that.allowedMoves(that.targetCard, that.targetPos);\n var viewSquares = [];\n\n for (var i = 0; i < highlightMoves.length; i++) {\n var squareSelector = JSON.stringify(highlightMoves[i]);\n var square = document.getElementById(squareSelector);\n viewSquares.push(square);\n }\n\n var allSquares = document.getElementsByClassName('square');\n\n for (var _i = 0; _i < allSquares.length; _i++) {\n allSquares[_i].classList.remove(\"active\");\n\n allSquares[_i].classList.add(\"inactive\");\n }\n\n for (var _i2 = 0; _i2 < viewSquares.length; _i2++) {\n viewSquares[_i2].classList.add(\"active\");\n\n viewSquares[_i2].classList.remove(\"inactive\");\n }\n\n return highlightMoves;\n } // '[1,2]' to [1,2]\n\n }, {\n key: \"convertStrPos\",\n value: function convertStrPos(strPos) {\n var arr = [];\n var strArr = strPos.slice(1, 4).split(','); // ['1', '2']\n\n strArr.forEach(function (ele) {\n arr.push(parseInt(ele));\n });\n return arr;\n }\n }]);\n\n return Game;\n}(); // consider adding a KEY:value list of variables like pawn, master, or player \n// also where to keep card objects?\n// function addGlobalEventListener(type, selector, callback) {\n// document.addEventListener(type, e => {\n// if (e.target.matches(selector)) callback(e);\n// });\n// }\n// function createGrid() {\n// const gameBoard = document.getElementById(\"board\");\n// for (let i = 0; i < 5; i++) {\n// for (let j = 0; j < 5; j++) {\n// let square = document.createElement(\"div\");\n// square.classList.add(\"square\");\n// square.setAttribute(\"id\", [i, j]);\n// // gameBoard.appendChild(square);\n// }\n// }\n// }\n// createGrid();\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvc2NyaXB0cy9nYW1lLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBOztJQUVxQkc7QUFDbkIsa0JBQWM7QUFBQTs7QUFDWixTQUFLQyxVQUFMLEdBQWtCLEtBQWxCO0FBQ0EsU0FBS0MsU0FBTCxHQUFpQixJQUFqQixDQUZZLENBRWM7O0FBQzFCLFNBQUtDLFVBQUwsR0FBa0IsSUFBbEI7QUFDQSxTQUFLQyxXQUFMLEdBQW1CLElBQW5CO0FBQ0EsU0FBS0MsVUFBTCxHQUFrQixJQUFsQixDQUxZLENBS2M7O0FBQzFCLFNBQUtDLFVBQUwsR0FBa0IsSUFBbEIsQ0FOWSxDQU1jOztBQUMxQixTQUFLQyxnQkFBTCxHQUF3QixDQUF4QixDQVBZLENBT2dCOztBQUM1QixTQUFLQyxPQUFMLEdBQWUsQ0FBQyxJQUFJVCwrQ0FBSixDQUFXLFVBQVgsRUFBdUIsTUFBdkIsQ0FBRCxFQUFpQyxJQUFJQSwrQ0FBSixDQUFXLFVBQVgsRUFBdUIsS0FBdkIsQ0FBakMsQ0FBZjtBQUNBLFNBQUtVLE1BQUwsR0FBYyxLQUFLQyxhQUFuQjtBQUNBLFNBQUtDLElBQUwsR0FBWSxJQUFJZCxnREFBSixFQUFaO0FBQ0EsU0FBS2UsS0FBTCxHQUFhLElBQUlkLGlEQUFKLEVBQWIsQ0FYWSxDQWFaOztBQUNBZSxJQUFBQSxNQUFNLENBQUNELEtBQVAsR0FBZSxLQUFLQSxLQUFwQjtBQUNBQyxJQUFBQSxNQUFNLENBQUNGLElBQVAsR0FBYyxLQUFLQSxJQUFuQjtBQUNBRSxJQUFBQSxNQUFNLENBQUNMLE9BQVAsR0FBaUIsS0FBS0EsT0FBdEI7QUFDQUssSUFBQUEsTUFBTSxDQUFDSixNQUFQLEdBQWdCLEtBQUtBLE1BQXJCO0FBQ0FJLElBQUFBLE1BQU0sQ0FBQ0MsV0FBUCxHQUFxQixLQUFLQSxXQUExQjtBQUVELElBRUQ7Ozs7O1NBQ0EsZUFBb0I7QUFDbEIsYUFBTyxLQUFLTixPQUFMLENBQWEsS0FBS0QsZ0JBQWxCLENBQVA7QUFDRDs7O1NBRUQsZUFBa0I7QUFDaEIsYUFBTyxLQUFLQyxPQUFMLENBQWMsQ0FBQyxLQUFLRCxnQkFBTCxHQUF3QixDQUF6QixJQUE4QixDQUE1QyxDQUFQO0FBQ0QsTUFFRDs7Ozs7OEVBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNFLHFCQUFLQSxnQkFBTCxHQUF3QixDQUFDLEtBQUtBLGdCQUFMLEdBQXdCLENBQXpCLElBQThCLENBQXREO0FBQ0EscUJBQUtFLE1BQUwsR0FBYyxLQUFLQyxhQUFuQjtBQUNBRyxnQkFBQUEsTUFBTSxDQUFDSixNQUFQLEdBQWdCLEtBQUtBLE1BQXJCOztBQUhGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOzs7Ozs7O1FBTUE7Ozs7V0FDQSxvQkFBVztBQUNULFVBQUlNLElBQUksR0FBRyxLQUFLSixJQUFMLENBQVVLLElBQVYsRUFBWDtBQUNBLFdBQUtOLGFBQUwsQ0FBbUJPLFFBQW5CLENBQTRCRixJQUE1QjtBQUNBLFdBQUtHLFFBQUw7QUFDRCxNQUVEOzs7O1dBQ0EsaUJBQVE7QUFDTixXQUFLLElBQUlDLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUcsQ0FBcEIsRUFBdUJBLENBQUMsRUFBeEIsRUFBNEI7QUFDMUIsYUFBS0YsUUFBTDtBQUNEOztBQUNELFdBQUtHLFVBQUwsR0FBa0IsS0FBS1QsSUFBTCxDQUFVSyxJQUFWLEVBQWxCO0FBQ0EsV0FBS2YsVUFBTCxHQUFrQixJQUFsQjtBQUNBLFdBQUtXLEtBQUwsQ0FBV1MsUUFBWDtBQUNELE1BRUQ7Ozs7V0FDQSx1QkFBY04sSUFBZCxFQUFvQk8sUUFBcEIsRUFBOEI7QUFBRztBQUMvQixVQUFJQyxJQUFJLEdBQUcsSUFBWDs7QUFDQSxVQUFJQSxJQUFJLENBQUNoQixnQkFBTCxLQUEwQixDQUE5QixFQUFpQztBQUMvQixlQUFPZ0IsSUFBSSxDQUFDQyxTQUFMLENBQWVULElBQWYsRUFBcUJPLFFBQXJCLENBQVA7QUFDRCxPQUZELE1BRU87QUFDTCxlQUFPQyxJQUFJLENBQUNFLFFBQUwsQ0FBY1YsSUFBZCxFQUFvQk8sUUFBcEIsQ0FBUDtBQUNEO0FBQ0YsTUFFRDs7OztXQUNBLHNCQUFhUCxJQUFiLEVBQW1CTyxRQUFuQixFQUE2QjtBQUMzQixVQUFJQyxJQUFJLEdBQUcsSUFBWDtBQUVBLFVBQUksQ0FBQ0EsSUFBSSxDQUFDWCxLQUFMLENBQVdjLFFBQVgsQ0FBb0JKLFFBQXBCLENBQUwsRUFBb0MsT0FBTyxLQUFQO0FBQ3BDLFVBQUlLLFFBQVEsR0FBR0osSUFBSSxDQUFDSyxhQUFMLENBQW1CYixJQUFuQixFQUF5Qk8sUUFBekIsQ0FBZixDQUoyQixDQUszQjs7QUFDQSxVQUFJTyxTQUFTLEdBQUcsRUFBaEI7O0FBQ0EsV0FBSyxJQUFJVixDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHUSxRQUFRLENBQUNHLE1BQTdCLEVBQXFDWCxDQUFDLEVBQXRDLEVBQTBDO0FBQ3hDO0FBQ0EsWUFBSUksSUFBSSxDQUFDWCxLQUFMLENBQVdjLFFBQVgsQ0FBb0JDLFFBQVEsQ0FBQ1IsQ0FBRCxDQUE1QixDQUFKLEVBQXNDO0FBQ3BDLGNBQUlJLElBQUksQ0FBQ1gsS0FBTCxDQUFXbUIsT0FBWCxDQUFtQkosUUFBUSxDQUFDUixDQUFELENBQTNCLE1BQW9DLElBQXhDLEVBQThDO0FBQzVDVSxZQUFBQSxTQUFTLENBQUNHLElBQVYsQ0FBZUwsUUFBUSxDQUFDUixDQUFELENBQXZCO0FBQ0QsV0FGRCxNQUVPO0FBRUwsZ0JBQUtJLElBQUksQ0FBQ1gsS0FBTCxDQUFXcUIsUUFBWCxDQUFvQk4sUUFBUSxDQUFDUixDQUFELENBQTVCLENBQUQsQ0FBbUNlLEtBQW5DLEtBQTZDWCxJQUFJLENBQUNkLE1BQUwsQ0FBWXlCLEtBQVosQ0FBa0JDLFdBQWxCLEVBQWpELEVBQWtGO0FBQ2hGTixjQUFBQSxTQUFTLENBQUNHLElBQVYsQ0FBZUwsUUFBUSxDQUFDUixDQUFELENBQXZCO0FBQ0Q7QUFDRjtBQUNGO0FBQ0Y7O0FBQ0QsYUFBT1UsU0FBUDtBQUNEOzs7V0FFRCxtQkFBVWQsSUFBVixFQUFnQk8sUUFBaEIsRUFBMEI7QUFDeEIsVUFBSUMsSUFBSSxHQUFHLElBQVg7O0FBQ0EsV0FBSyxJQUFJSixDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHSSxJQUFJLENBQUNkLE1BQUwsQ0FBWTJCLElBQVosQ0FBaUJOLE1BQXJDLEVBQTZDWCxDQUFDLEVBQTlDLEVBQWtEO0FBQ2hELFlBQUlJLElBQUksQ0FBQ2QsTUFBTCxDQUFZMkIsSUFBWixDQUFpQmpCLENBQWpCLE1BQXdCSixJQUE1QixFQUFrQztBQUFHO0FBQ25Dc0IsVUFBQUEsT0FBTyxDQUFDQyxHQUFSLENBQVksSUFBWjtBQUNBLGNBQUlDLEtBQUssR0FBR2hCLElBQUksQ0FBQ2QsTUFBTCxDQUFZMkIsSUFBWixDQUFpQmpCLENBQWpCLEVBQW9CcUIsS0FBcEIsQ0FBMEIsQ0FBMUIsQ0FBWjtBQUNBLGNBQUlDLFdBQVcsR0FBRyxFQUFsQjs7QUFDQSxlQUFLLElBQUlDLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUdILEtBQUssQ0FBQ1QsTUFBMUIsRUFBa0NZLENBQUMsRUFBbkMsRUFBdUM7QUFDckMsZ0JBQUlDLEdBQUcsR0FBR3JCLFFBQVEsQ0FBQyxDQUFELENBQVIsR0FBY2lCLEtBQUssQ0FBQ0csQ0FBRCxDQUFMLENBQVMsQ0FBVCxDQUF4QjtBQUNBLGdCQUFJRSxHQUFHLEdBQUd0QixRQUFRLENBQUMsQ0FBRCxDQUFSLEdBQWNpQixLQUFLLENBQUNHLENBQUQsQ0FBTCxDQUFTLENBQVQsQ0FBeEI7QUFDQUQsWUFBQUEsV0FBVyxDQUFDVCxJQUFaLENBQWlCLENBQUNXLEdBQUQsRUFBTUMsR0FBTixDQUFqQjtBQUNEOztBQUVELGlCQUFPSCxXQUFQO0FBQ0QsU0FYRCxNQVdPO0FBQ0xKLFVBQUFBLE9BQU8sQ0FBQ0MsR0FBUixDQUFZLDBCQUFaLEVBREssQ0FDcUM7QUFDM0M7QUFDRjtBQUNGOzs7V0FFRCxrQkFBU0MsS0FBVCxFQUFnQjtBQUFHO0FBQ2pCLFVBQUlNLFFBQVEsR0FBRyxFQUFmO0FBQ0FSLE1BQUFBLE9BQU8sQ0FBQ0MsR0FBUixDQUFZQyxLQUFaOztBQUNBLFdBQUssSUFBSXBCLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUdvQixLQUFLLENBQUNULE1BQTFCLEVBQWtDWCxDQUFDLEVBQW5DLEVBQXVDO0FBQ3JDLFlBQUkyQixNQUFNLEdBQUcsRUFBYjs7QUFDQSxhQUFLLElBQUlKLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUdILEtBQUssQ0FBQyxDQUFELENBQUwsQ0FBU1QsTUFBN0IsRUFBcUNZLENBQUMsRUFBdEMsRUFBMEM7QUFDeEMsY0FBSUssR0FBRyxHQUFHUixLQUFLLENBQUNwQixDQUFELENBQUwsQ0FBU3VCLENBQVQsQ0FBVjs7QUFDQSxjQUFJSyxHQUFHLEtBQUssQ0FBWixFQUFlO0FBQ2JELFlBQUFBLE1BQU0sQ0FBQ2QsSUFBUCxDQUFZZSxHQUFaO0FBQ0QsV0FGRCxNQUVPO0FBQ0xELFlBQUFBLE1BQU0sQ0FBQ2QsSUFBUCxDQUFZTyxLQUFLLENBQUNwQixDQUFELENBQUwsQ0FBU3VCLENBQVQsSUFBYyxDQUFDLENBQTNCO0FBQ0Q7QUFDRjs7QUFDREcsUUFBQUEsUUFBUSxDQUFDYixJQUFULENBQWNjLE1BQWQ7QUFDRDs7QUFDRCxhQUFPRCxRQUFQO0FBQ0Q7OztXQUVELGtCQUFTOUIsSUFBVCxFQUFlTyxRQUFmLEVBQXlCO0FBQ3ZCLFVBQUlDLElBQUksR0FBRyxJQUFYOztBQUNBLFdBQUssSUFBSUosQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBR0ksSUFBSSxDQUFDZCxNQUFMLENBQVkyQixJQUFaLENBQWlCTixNQUFyQyxFQUE2Q1gsQ0FBQyxFQUE5QyxFQUFrRDtBQUNoRCxZQUFJSSxJQUFJLENBQUNkLE1BQUwsQ0FBWTJCLElBQVosQ0FBaUJqQixDQUFqQixNQUF3QkosSUFBNUIsRUFBa0M7QUFBRztBQUNuQyxjQUFJd0IsS0FBSyxHQUFHaEIsSUFBSSxDQUFDZCxNQUFMLENBQVkyQixJQUFaLENBQWlCakIsQ0FBakIsRUFBb0JxQixLQUFwQixDQUEwQixDQUExQixDQUFaO0FBQ0EsY0FBSVEsUUFBUSxHQUFJekIsSUFBSSxDQUFDMEIsUUFBTCxDQUFjVixLQUFkLENBQWhCO0FBQ0EsY0FBSUUsV0FBVyxHQUFHLEVBQWxCOztBQUNBLGVBQUssSUFBSUMsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBR00sUUFBUSxDQUFDbEIsTUFBN0IsRUFBcUNZLENBQUMsRUFBdEMsRUFBMEM7QUFDeEMsZ0JBQUlDLEdBQUcsR0FBR3JCLFFBQVEsQ0FBQyxDQUFELENBQVIsR0FBYzBCLFFBQVEsQ0FBQ04sQ0FBRCxDQUFSLENBQVksQ0FBWixDQUF4QjtBQUNBLGdCQUFJRSxHQUFHLEdBQUd0QixRQUFRLENBQUMsQ0FBRCxDQUFSLEdBQWMwQixRQUFRLENBQUNOLENBQUQsQ0FBUixDQUFZLENBQVosQ0FBeEI7QUFDQUQsWUFBQUEsV0FBVyxDQUFDVCxJQUFaLENBQWlCLENBQUNXLEdBQUQsRUFBTUMsR0FBTixDQUFqQjtBQUNEOztBQUNELGlCQUFPSCxXQUFQO0FBQ0QsU0FWRCxNQVVPO0FBQ0xKLFVBQUFBLE9BQU8sQ0FBQ0MsR0FBUixDQUFZLDBCQUFaO0FBQ0Q7QUFDRjtBQUNGOzs7V0FFRCwwQkFBaUI7QUFDZixVQUFJWSxRQUFRLEdBQUdDLFFBQVEsQ0FBQ0MsZ0JBQVQsQ0FBMEIsT0FBMUIsQ0FBZjtBQUNBLFVBQUlDLFFBQVEsR0FBR0YsUUFBUSxDQUFDQyxnQkFBVCxDQUEwQixPQUExQixDQUFmO0FBQ0EsVUFBSTdCLElBQUksR0FBRyxJQUFYO0FBQ0E4QixNQUFBQSxRQUFRLENBQUNDLE9BQVQsQ0FBaUIsVUFBVUMsSUFBVixFQUFnQjtBQUMvQixZQUFJQSxJQUFJLENBQUNDLFNBQUwsQ0FBZUMsUUFBZixDQUF3QixhQUF4QixDQUFKLEVBQTRDO0FBQzFDbEMsVUFBQUEsSUFBSSxDQUFDbEIsVUFBTCxHQUFrQmtELElBQWxCO0FBQ0FoQyxVQUFBQSxJQUFJLENBQUNyQixTQUFMLEdBQWlCcUIsSUFBSSxDQUFDbUMsVUFBTCxDQUFnQkgsSUFBaEIsQ0FBakI7QUFDQWxCLFVBQUFBLE9BQU8sQ0FBQ0MsR0FBUixDQUFZLG9CQUFaO0FBQ0Q7QUFDRixPQU5EO0FBUUFZLE1BQUFBLFFBQVEsQ0FBQ0ksT0FBVCxDQUFpQixVQUFVdkMsSUFBVixFQUFnQjtBQUMvQixZQUFJQSxJQUFJLENBQUN5QyxTQUFMLENBQWVDLFFBQWYsQ0FBd0IsYUFBeEIsQ0FBSixFQUE0QztBQUMxQ3BCLFVBQUFBLE9BQU8sQ0FBQ0MsR0FBUixDQUFZLG9CQUFaO0FBQ0FmLFVBQUFBLElBQUksQ0FBQ2pCLFVBQUwsR0FBa0JTLElBQWxCO0FBQ0FRLFVBQUFBLElBQUksQ0FBQ3BCLFVBQUwsR0FBa0JvQixJQUFJLENBQUNvQyxXQUFMLENBQWlCNUMsSUFBakIsQ0FBbEI7QUFDRDtBQUNGLE9BTkQ7O0FBUUEsVUFBSVEsSUFBSSxDQUFDbEIsVUFBTCxLQUFvQixJQUFwQixJQUE0QmtCLElBQUksQ0FBQ2pCLFVBQUwsS0FBb0IsSUFBcEQsRUFBMEQ7QUFDeEQrQixRQUFBQSxPQUFPLENBQUNDLEdBQVIsQ0FBWSxjQUFaO0FBQ0FmLFFBQUFBLElBQUksQ0FBQ25CLFdBQUwsR0FBbUJtQixJQUFJLENBQUNxQyxTQUFMLEVBQW5CLENBRndELENBRWxCO0FBQ3ZDLE9BSEQsTUFHTztBQUNMLGVBQU8sS0FBUDtBQUNELE9BekJjLENBMEJmOztBQUNELE1BRUQ7Ozs7V0FDQSxvQkFBV0MsTUFBWCxFQUFtQjtBQUNqQjtBQUNBLFVBQUlDLEdBQUcsR0FBRyxFQUFWO0FBQ0EsVUFBSUMsTUFBTSxHQUFHRixNQUFNLENBQUNHLGFBQVAsQ0FBcUJDLEVBQWxDO0FBQ0EsVUFBSUMsTUFBTSxHQUFHSCxNQUFNLENBQUN2QixLQUFQLENBQWEsQ0FBYixFQUFnQnVCLE1BQU0sQ0FBQ2pDLE1BQXZCLEVBQStCcUMsS0FBL0IsQ0FBcUMsR0FBckMsQ0FBYjs7QUFDQSxXQUFLLElBQUloRCxDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHK0MsTUFBTSxDQUFDcEMsTUFBM0IsRUFBbUNYLENBQUMsRUFBcEMsRUFBd0M7QUFDdEMyQyxRQUFBQSxHQUFHLENBQUM5QixJQUFKLENBQVVvQyxRQUFRLENBQUNGLE1BQU0sQ0FBQy9DLENBQUQsQ0FBUCxDQUFsQjtBQUNEOztBQUNELGFBQU8yQyxHQUFQO0FBQ0QsTUFFRDs7OztXQUNBLHFCQUFZTyxNQUFaLEVBQW9CO0FBQ2xCaEMsTUFBQUEsT0FBTyxDQUFDQyxHQUFSLENBQVksZ0JBQVo7QUFDQSxVQUFJZixJQUFJLEdBQUcsSUFBWDtBQUNBLFVBQUkrQyxPQUFPLEdBQUdELE1BQU0sQ0FBQ0osRUFBUCxDQUFVekIsS0FBVixDQUFnQixDQUFoQixDQUFkO0FBQ0EsVUFBSStCLE9BQU8sR0FBR0gsUUFBUSxDQUFDRSxPQUFELENBQXRCO0FBQ0EsVUFBSUMsT0FBTyxLQUFLLENBQWhCLEVBQW1CLE9BQU9oRCxJQUFJLENBQUNmLE9BQUwsQ0FBYSxDQUFiLEVBQWdCNEIsSUFBaEIsQ0FBcUIsQ0FBckIsQ0FBUDtBQUNuQixVQUFJbUMsT0FBTyxLQUFLLENBQWhCLEVBQW1CLE9BQU9oRCxJQUFJLENBQUNmLE9BQUwsQ0FBYSxDQUFiLEVBQWdCNEIsSUFBaEIsQ0FBcUIsQ0FBckIsQ0FBUDtBQUNuQixVQUFJbUMsT0FBTyxLQUFLLENBQWhCLEVBQW1CLE9BQU8sSUFBUCxDQVBELENBT2M7O0FBQ2hDLFVBQUlBLE9BQU8sS0FBSyxDQUFoQixFQUFtQixPQUFPaEQsSUFBSSxDQUFDZixPQUFMLENBQWEsQ0FBYixFQUFnQjRCLElBQWhCLENBQXFCLENBQXJCLENBQVA7QUFDbkIsVUFBSW1DLE9BQU8sS0FBSyxDQUFoQixFQUFtQixPQUFPaEQsSUFBSSxDQUFDZixPQUFMLENBQWEsQ0FBYixFQUFnQjRCLElBQWhCLENBQXFCLENBQXJCLENBQVA7QUFDcEI7OztXQUVELHVCQUFjb0MsU0FBZCxFQUF5QjtBQUN2QixVQUFJakQsSUFBSSxHQUFHLElBQVg7QUFDQSxVQUFJa0QsUUFBUSxHQUFHbEQsSUFBSSxDQUFDbUMsVUFBTCxDQUFnQm5DLElBQUksQ0FBQ2xCLFVBQXJCLENBQWY7QUFDQSxVQUFJcUUsTUFBTSxHQUFHbkQsSUFBSSxDQUFDb0QsYUFBTCxDQUFtQkgsU0FBUyxDQUFDUCxFQUE3QixDQUFiLENBSHVCLENBSXZCOztBQUNBLFVBQUlyRCxLQUFLLENBQUNnRSxJQUFOLENBQVdGLE1BQU0sQ0FBQyxDQUFELENBQWpCLEVBQXNCQSxNQUFNLENBQUMsQ0FBRCxDQUE1QixNQUFxQyxJQUF6QyxFQUErQztBQUM3Q25ELFFBQUFBLElBQUksQ0FBQ1gsS0FBTCxDQUFXaUUsV0FBWCxDQUF1QkgsTUFBdkI7QUFDQW5ELFFBQUFBLElBQUksQ0FBQ1gsS0FBTCxDQUFXa0UsZUFBWCxDQUEyQkosTUFBM0IsRUFGNkMsQ0FFUjtBQUN0Qzs7QUFDRG5ELE1BQUFBLElBQUksQ0FBQ1gsS0FBTCxDQUFXbUUsU0FBWCxDQUFxQk4sUUFBckIsRUFBK0JDLE1BQS9CLEVBVHVCLENBVXZCOztBQUNBLFVBQUlNLEtBQUssR0FBR3pELElBQUksQ0FBQ1gsS0FBTCxDQUFXcUIsUUFBWCxDQUFvQnlDLE1BQXBCLENBQVosQ0FYdUIsQ0FXa0I7QUFDekM7O0FBQ0FuRCxNQUFBQSxJQUFJLENBQUNYLEtBQUwsQ0FBV2tFLGVBQVgsQ0FBMkJMLFFBQTNCLEVBYnVCLENBYWU7QUFDdEM7O0FBQ0FRLE1BQUFBLFVBQVUsQ0FBQyxZQUFNO0FBQ2YxRCxRQUFBQSxJQUFJLENBQUMyRCxZQUFMO0FBQ0QsT0FGUyxFQUVQLElBRk8sQ0FBVjtBQUdEOzs7O3NGQUVELGtCQUF1QkMsWUFBdkIsRUFBcUNDLFVBQXJDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNFL0MsZ0JBQUFBLE9BQU8sQ0FBQ0MsR0FBUixDQUFZLGNBQVo7QUFDSWYsZ0JBQUFBLElBRk4sR0FFYSxJQUZiO0FBR004RCxnQkFBQUEsV0FITixHQUdvQjlELElBQUksQ0FBQ2QsTUFBTCxDQUFZMkIsSUFIaEM7QUFJTWtELGdCQUFBQSxVQUpOLEdBSW1CL0QsSUFBSSxDQUFDb0MsV0FBTCxDQUFpQndCLFlBQWpCLENBSm5CO0FBS01JLGdCQUFBQSxRQUxOLEdBS2lCaEUsSUFBSSxDQUFDSCxVQUx0QjtBQU1Nb0UsZ0JBQUFBLGFBTk4sR0FNc0IsSUFOdEI7O0FBT0UscUJBQVNyRSxDQUFULEdBQWEsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHa0UsV0FBVyxDQUFDdkQsTUFBaEMsRUFBd0NYLENBQUMsRUFBekMsRUFBNkM7QUFDM0M7QUFDQSxzQkFBSW1FLFVBQVUsS0FBS0QsV0FBVyxDQUFDbEUsQ0FBRCxDQUE5QixFQUFtQ3FFLGFBQWEsR0FBR3JFLENBQWhCO0FBQ3BDLGlCQVZILENBV0U7OztBQUNJc0UsZ0JBQUFBLGFBWk4sR0FZc0JGLFFBWnRCO0FBYU1HLGdCQUFBQSxXQWJOLEdBYW9CSixVQWJwQjtBQWNFRCxnQkFBQUEsV0FBVyxDQUFDRyxhQUFELENBQVgsR0FBNkJDLGFBQTdCO0FBQ0FGLGdCQUFBQSxRQUFRLEdBQUdHLFdBQVg7QUFDQSxxQkFBS3RFLFVBQUwsR0FBa0JzRSxXQUFsQixDQWhCRixDQWdCaUM7QUFDL0I7QUFFQTs7QUFDQW5FLGdCQUFBQSxJQUFJLENBQUNaLElBQUwsQ0FBVWdGLFlBQVYsQ0FBdUJGLGFBQXZCLEVBQXNDTixZQUF0QztBQUNBNUQsZ0JBQUFBLElBQUksQ0FBQ1osSUFBTCxDQUFVZ0YsWUFBVixDQUF1QkQsV0FBdkIsRUFBb0NOLFVBQXBDOztBQXJCRjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7OztXQXlCQSx3QkFBZTtBQUNiLFVBQUk3RCxJQUFJLEdBQUcsSUFBWDtBQUVBLFVBQUkrRCxVQUFVLEdBQUduQyxRQUFRLENBQUN5QyxhQUFULENBQXVCLGNBQXZCLENBQWpCO0FBQ0EsVUFBSUwsUUFBUSxHQUFHcEMsUUFBUSxDQUFDeUMsYUFBVCxDQUF1QixRQUF2QixDQUFmLENBSmEsQ0FPYjs7QUFDQSxVQUFJQyxVQUFVLEdBQUcxQyxRQUFRLENBQUMyQyxzQkFBVCxDQUFnQyxRQUFoQyxDQUFqQjs7QUFDQSxXQUFLLElBQUkzRSxDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHMEUsVUFBVSxDQUFDL0QsTUFBL0IsRUFBdUNYLENBQUMsRUFBeEMsRUFBNEM7QUFDMUMwRSxRQUFBQSxVQUFVLENBQUMxRSxDQUFELENBQVYsQ0FBY3FDLFNBQWQsQ0FBd0J1QyxNQUF4QixDQUErQixRQUEvQjtBQUNBRixRQUFBQSxVQUFVLENBQUMxRSxDQUFELENBQVYsQ0FBY3FDLFNBQWQsQ0FBd0J3QyxHQUF4QixDQUE0QixVQUE1QjtBQUNELE9BWlksQ0FjYjs7O0FBQ0EsVUFBSTNDLFFBQVEsR0FBR0YsUUFBUSxDQUFDQyxnQkFBVCxDQUEwQixPQUExQixDQUFmO0FBQ0FDLE1BQUFBLFFBQVEsQ0FBQ0MsT0FBVCxDQUFpQixVQUFVQyxJQUFWLEVBQWdCO0FBQy9CLFlBQUlBLElBQUksQ0FBQ0MsU0FBTCxDQUFlQyxRQUFmLENBQXdCLGFBQXhCLENBQUosRUFBNEM7QUFDMUNGLFVBQUFBLElBQUksQ0FBQ0MsU0FBTCxDQUFldUMsTUFBZixDQUFzQixhQUF0QjtBQUNBeEMsVUFBQUEsSUFBSSxDQUFDQyxTQUFMLENBQWV3QyxHQUFmLENBQW1CLGVBQW5CO0FBQ0Q7QUFDRixPQUxELEVBaEJhLENBdUJiOztBQUNBZixNQUFBQSxVQUFVLENBQUMsWUFBTTtBQUNmO0FBQ0ExRCxRQUFBQSxJQUFJLENBQUNaLElBQUwsQ0FBVXNGLGtCQUFWLEdBQStCQyxJQUEvQixDQUNFakIsVUFBVSxDQUFDLFlBQU07QUFDZjtBQUNBMUQsVUFBQUEsSUFBSSxDQUFDNEUsZ0JBQUwsQ0FBc0JiLFVBQXRCLEVBQWtDQyxRQUFsQyxFQUE0Q1csSUFBNUMsQ0FDRWpCLFVBQVUsQ0FBQyxZQUFNO0FBQ2Y7QUFDQTFELFlBQUFBLElBQUksQ0FBQ1osSUFBTCxDQUFVc0Ysa0JBQVYsR0FBK0JDLElBQS9CLENBQ0VqQixVQUFVLENBQUMsWUFBTTtBQUNmO0FBQ0ExRCxjQUFBQSxJQUFJLENBQUM2RSx1QkFBTCxHQUErQkYsSUFBL0IsRUFDRTtBQUNBM0UsY0FBQUEsSUFBSSxDQUFDTCxRQUFMLEVBRkY7QUFJRCxhQU5TLEVBTVAsR0FOTyxDQURaO0FBU0QsV0FYUyxFQVdQLEdBWE8sQ0FEWjtBQWNELFNBaEJTLEVBZ0JQLEdBaEJPLENBRFo7QUFtQkQsT0FyQlMsRUFxQlAsSUFyQk8sQ0FBVjtBQXNCRCxNQUVEOzs7Ozs2RkFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDTWdDLGdCQUFBQSxRQUROLEdBQ2lCQyxRQUFRLENBQUNDLGdCQUFULENBQTBCLE9BQTFCLENBRGpCO0FBRUVGLGdCQUFBQSxRQUFRLENBQUNJLE9BQVQsQ0FBaUIsVUFBVXZDLElBQVYsRUFBZ0I7QUFDL0JBLGtCQUFBQSxJQUFJLENBQUN5QyxTQUFMLENBQWV1QyxNQUFmLENBQXNCLGFBQXRCO0FBQ0FoRixrQkFBQUEsSUFBSSxDQUFDeUMsU0FBTCxDQUFld0MsR0FBZixDQUFtQixlQUFuQjtBQUNELGlCQUhEOztBQUZGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7O1dBU0EscUJBQVk7QUFDVixVQUFJekUsSUFBSSxHQUFHLElBQVg7QUFDQSxVQUFJOEUsY0FBYyxHQUFHOUUsSUFBSSxDQUFDK0UsWUFBTCxDQUFrQi9FLElBQUksQ0FBQ3BCLFVBQXZCLEVBQW1Db0IsSUFBSSxDQUFDckIsU0FBeEMsQ0FBckI7QUFDQSxVQUFJcUcsV0FBVyxHQUFHLEVBQWxCOztBQUNBLFdBQUssSUFBSXBGLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUdrRixjQUFjLENBQUN2RSxNQUFuQyxFQUEyQ1gsQ0FBQyxFQUE1QyxFQUFnRDtBQUM5QyxZQUFJcUYsY0FBYyxHQUFHQyxJQUFJLENBQUNDLFNBQUwsQ0FBZUwsY0FBYyxDQUFDbEYsQ0FBRCxDQUE3QixDQUFyQjtBQUNBLFlBQUl3RixNQUFNLEdBQUd4RCxRQUFRLENBQUN5RCxjQUFULENBQXdCSixjQUF4QixDQUFiO0FBQ0FELFFBQUFBLFdBQVcsQ0FBQ3ZFLElBQVosQ0FBaUIyRSxNQUFqQjtBQUNEOztBQUNELFVBQUlkLFVBQVUsR0FBRzFDLFFBQVEsQ0FBQzJDLHNCQUFULENBQWdDLFFBQWhDLENBQWpCOztBQUNBLFdBQUssSUFBSTNFLEVBQUMsR0FBRyxDQUFiLEVBQWdCQSxFQUFDLEdBQUcwRSxVQUFVLENBQUMvRCxNQUEvQixFQUF1Q1gsRUFBQyxFQUF4QyxFQUE0QztBQUMxQzBFLFFBQUFBLFVBQVUsQ0FBQzFFLEVBQUQsQ0FBVixDQUFjcUMsU0FBZCxDQUF3QnVDLE1BQXhCLENBQStCLFFBQS9COztBQUNBRixRQUFBQSxVQUFVLENBQUMxRSxFQUFELENBQVYsQ0FBY3FDLFNBQWQsQ0FBd0J3QyxHQUF4QixDQUE0QixVQUE1QjtBQUNEOztBQUNELFdBQUssSUFBSTdFLEdBQUMsR0FBRyxDQUFiLEVBQWdCQSxHQUFDLEdBQUdvRixXQUFXLENBQUN6RSxNQUFoQyxFQUF3Q1gsR0FBQyxFQUF6QyxFQUE2QztBQUMzQ29GLFFBQUFBLFdBQVcsQ0FBQ3BGLEdBQUQsQ0FBWCxDQUFlcUMsU0FBZixDQUF5QndDLEdBQXpCLENBQTZCLFFBQTdCOztBQUNBTyxRQUFBQSxXQUFXLENBQUNwRixHQUFELENBQVgsQ0FBZXFDLFNBQWYsQ0FBeUJ1QyxNQUF6QixDQUFnQyxVQUFoQztBQUNEOztBQUVELGFBQU9NLGNBQVA7QUFDRCxNQUVEOzs7O1dBQ0EsdUJBQWNRLE1BQWQsRUFBc0I7QUFDcEIsVUFBSUMsR0FBRyxHQUFHLEVBQVY7QUFDQSxVQUFJNUMsTUFBTSxHQUFHMkMsTUFBTSxDQUFDckUsS0FBUCxDQUFhLENBQWIsRUFBZ0IsQ0FBaEIsRUFBbUIyQixLQUFuQixDQUF5QixHQUF6QixDQUFiLENBRm9CLENBR3BCOztBQUNBRCxNQUFBQSxNQUFNLENBQUNaLE9BQVAsQ0FBZSxVQUFDUCxHQUFELEVBQVM7QUFDdEIrRCxRQUFBQSxHQUFHLENBQUM5RSxJQUFKLENBQVNvQyxRQUFRLENBQUNyQixHQUFELENBQWpCO0FBQ0QsT0FGRDtBQUdBLGFBQU8rRCxHQUFQO0FBQ0Q7Ozs7S0FRSDtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL29uaXRhbWFfanMvLi9zcmMvc2NyaXB0cy9nYW1lLmpzP2NkYzAiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gaW1wb3J0IFBsYXllciBmcm9tICcuL3BsYXllci5qcyc7XG5pbXBvcnQgRGVjayBmcm9tICcuL2RlY2suanMnO1xuaW1wb3J0IEJvYXJkIGZyb20gXCIuL2JvYXJkLmpzXCI7XG5pbXBvcnQgUGxheWVyIGZyb20gXCIuL3BsYXllclwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBHYW1lIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5hY3RpdmVHYW1lID0gZmFsc2U7XG4gICAgdGhpcy50YXJnZXRQb3MgPSBudWxsOyAgICAvLyBjaGVja0hpZ2hsaWdodFxuICAgIHRoaXMudGFyZ2V0Q2FyZCA9IG51bGw7XG4gICAgdGhpcy50YXJnZXRNb3ZlcyA9IG51bGw7XG4gICAgdGhpcy5hY3RpdmVQYXduID0gbnVsbDsgICAvLyBjaGVja0hpZ2hsaWdodFxuICAgIHRoaXMuYWN0aXZlQ2FyZCA9IG51bGw7ICAgLy8gY2hlY2tIaWdobGlnaHRcbiAgICB0aGlzLmN1cnJlbnRQbGF5ZXJJZHggPSAwOyAgLy8gYWlkIHdpdGggZGVhbGluZyBjYXJkc1xuICAgIHRoaXMucGxheWVycyA9IFtuZXcgUGxheWVyKFwiUGxheWVyIDFcIiwgXCJCbHVlXCIpLCBuZXcgUGxheWVyKFwiUGxheWVyIDJcIiwgXCJSZWRcIildO1xuICAgIHRoaXMucGxheWVyID0gdGhpcy5jdXJyZW50UGxheWVyO1xuICAgIHRoaXMuZGVjayA9IG5ldyBEZWNrKCk7XG4gICAgdGhpcy5ib2FyZCA9IG5ldyBCb2FyZCgpO1xuXG4gICAgLy8gV2luZG93IGRlYnVnZ2luZzpcbiAgICB3aW5kb3cuYm9hcmQgPSB0aGlzLmJvYXJkO1xuICAgIHdpbmRvdy5kZWNrID0gdGhpcy5kZWNrO1xuICAgIHdpbmRvdy5wbGF5ZXJzID0gdGhpcy5wbGF5ZXJzO1xuICAgIHdpbmRvdy5wbGF5ZXIgPSB0aGlzLnBsYXllcjtcbiAgICB3aW5kb3cub3RoZXJQbGF5ZXIgPSB0aGlzLm90aGVyUGxheWVyO1xuXG4gIH1cblxuICAvLyBnZXR0ZXIgYWNjZXNzIGxpa2UgYSBwcm9wZXJ0eTpcbiAgZ2V0IGN1cnJlbnRQbGF5ZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMucGxheWVyc1t0aGlzLmN1cnJlbnRQbGF5ZXJJZHhdO1xuICB9XG5cbiAgZ2V0IG90aGVyUGxheWVyKCkge1xuICAgIHJldHVybiB0aGlzLnBsYXllcnNbKCh0aGlzLmN1cnJlbnRQbGF5ZXJJZHggKyAxKSAlIDIpXTtcbiAgfVxuXG4gIC8vIGFsd2F5cyAwIG9yIDEgdXNpbmcgJVxuICBhc3luYyBzd2FwVHVybigpIHtcbiAgICB0aGlzLmN1cnJlbnRQbGF5ZXJJZHggPSAodGhpcy5jdXJyZW50UGxheWVySWR4ICsgMSkgJSAyO1xuICAgIHRoaXMucGxheWVyID0gdGhpcy5jdXJyZW50UGxheWVyO1xuICAgIHdpbmRvdy5wbGF5ZXIgPSB0aGlzLnBsYXllcjtcbiAgfVxuXG4gIC8vIGRlYWwgYWx0ZXJuYXRlcyBiZXR3ZWVuIHBsYXllcnMgdW50aWwgNCwgdGhlbiBvbi1kZWNrXG4gIGRlYWxDYXJkKCkge1xuICAgIGxldCBjYXJkID0gdGhpcy5kZWNrLmRlYWwoKTtcbiAgICB0aGlzLmN1cnJlbnRQbGF5ZXIuZGVhbENhcmQoY2FyZCk7XG4gICAgdGhpcy5zd2FwVHVybigpO1xuICB9XG5cbiAgLy8gZXZlbnQgaGFuZGxlZCBpbiBpbmRleC5qcyBcbiAgc3RhcnQoKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCA0OyBpKyspIHtcbiAgICAgIHRoaXMuZGVhbENhcmQoKTtcbiAgICB9XG4gICAgdGhpcy5vbkRlY2tDYXJkID0gdGhpcy5kZWNrLmRlYWwoKTtcbiAgICB0aGlzLmFjdGl2ZUdhbWUgPSB0cnVlO1xuICAgIHRoaXMuYm9hcmQuc2V0Qm9hcmQoKTtcbiAgfVxuXG4gIC8vIGFsbCBtb3Zlc1xuICBwb3NzaWJsZU1vdmVzKGNhcmQsIHN0YXJ0UG9zKSB7ICAvLyBhbGwgcG9zc2libGVcbiAgICBsZXQgdGhhdCA9IHRoaXM7XG4gICAgaWYgKHRoYXQuY3VycmVudFBsYXllcklkeCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRoYXQuYmx1ZU1vdmVzKGNhcmQsIHN0YXJ0UG9zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoYXQucmVkTW92ZXMoY2FyZCwgc3RhcnRQb3MpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGxpbWl0cyBhY3R1YWwgbW92ZXMgYnkgZW1wdHkgYW5kIGNvbG9yXG4gIGFsbG93ZWRNb3ZlcyhjYXJkLCBzdGFydFBvcykge1xuICAgIGxldCB0aGF0ID0gdGhpcztcblxuICAgIGlmICghdGhhdC5ib2FyZC52YWxpZFBvcyhzdGFydFBvcykpIHJldHVybiBmYWxzZTtcbiAgICBsZXQgYWxsTW92ZXMgPSB0aGF0LnBvc3NpYmxlTW92ZXMoY2FyZCwgc3RhcnRQb3MpO1xuICAgIC8vIFxuICAgIGxldCByZWFsTW92ZXMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFsbE1vdmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAvLyA7XG4gICAgICBpZiAodGhhdC5ib2FyZC52YWxpZFBvcyhhbGxNb3Zlc1tpXSkpIHtcbiAgICAgICAgaWYgKHRoYXQuYm9hcmQuaXNFbXB0eShhbGxNb3Zlc1tpXSkgPT09IHRydWUpIHtcbiAgICAgICAgICByZWFsTW92ZXMucHVzaChhbGxNb3Zlc1tpXSk7XG4gICAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgICBpZiAoKHRoYXQuYm9hcmQuZ2V0UGllY2UoYWxsTW92ZXNbaV0pKS5jb2xvciAhPT0gdGhhdC5wbGF5ZXIuY29sb3IudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgcmVhbE1vdmVzLnB1c2goYWxsTW92ZXNbaV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVhbE1vdmVzO1xuICB9XG5cbiAgYmx1ZU1vdmVzKGNhcmQsIHN0YXJ0UG9zKSB7XG4gICAgbGV0IHRoYXQgPSB0aGlzO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhhdC5wbGF5ZXIuaGFuZC5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRoYXQucGxheWVyLmhhbmRbaV0gPT09IGNhcmQpIHsgIC8vIGNoYW5nZWQgZnJvbSBpbmNsdWRlc1xuICAgICAgICBjb25zb2xlLmxvZyhcIm9rXCIpO1xuICAgICAgICBsZXQgbW92ZXMgPSB0aGF0LnBsYXllci5oYW5kW2ldLnNsaWNlKDEpO1xuICAgICAgICBsZXQgcG9zc2libGVQb3MgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBtb3Zlcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgIGxldCByb3cgPSBzdGFydFBvc1swXSArIG1vdmVzW2pdWzBdO1xuICAgICAgICAgIGxldCBjb2wgPSBzdGFydFBvc1sxXSArIG1vdmVzW2pdWzFdO1xuICAgICAgICAgIHBvc3NpYmxlUG9zLnB1c2goW3JvdywgY29sXSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcG9zc2libGVQb3M7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZyhcIkNhcmQgaXMgbm90IGluIHlvdXIgaGFuZFwiKTsgIC8vIGFsbCByZXR1cm5pbmcgZWxzZVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9wcE1vdmVzKG1vdmVzKSB7ICAvLyBmbGlwcyBvcHBvbmVudCBwb3NzaWJsZSBwb3MgXG4gICAgbGV0IG5ld01vdmVzID0gW107XG4gICAgY29uc29sZS5sb2cobW92ZXMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW92ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGxldCBzdWJBcnIgPSBbXTtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbW92ZXNbMF0ubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgbGV0IGVsZSA9IG1vdmVzW2ldW2pdO1xuICAgICAgICBpZiAoZWxlID09PSAwKSB7XG4gICAgICAgICAgc3ViQXJyLnB1c2goZWxlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdWJBcnIucHVzaChtb3Zlc1tpXVtqXSAqIC0xKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbmV3TW92ZXMucHVzaChzdWJBcnIpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3TW92ZXM7XG4gIH1cblxuICByZWRNb3ZlcyhjYXJkLCBzdGFydFBvcykge1xuICAgIGxldCB0aGF0ID0gdGhpcztcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoYXQucGxheWVyLmhhbmQubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0aGF0LnBsYXllci5oYW5kW2ldID09PSBjYXJkKSB7ICAvLyBjaGFuZ2VkIGZyb20gLmluY2x1ZGVzIFxuICAgICAgICBsZXQgbW92ZXMgPSB0aGF0LnBsYXllci5oYW5kW2ldLnNsaWNlKDEpO1xuICAgICAgICBsZXQgbW92ZXNSZXYgPSAodGhhdC5vcHBNb3Zlcyhtb3ZlcykpO1xuICAgICAgICBsZXQgcG9zc2libGVQb3MgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBtb3Zlc1Jldi5sZW5ndGg7IGorKykge1xuICAgICAgICAgIGxldCByb3cgPSBzdGFydFBvc1swXSArIG1vdmVzUmV2W2pdWzBdO1xuICAgICAgICAgIGxldCBjb2wgPSBzdGFydFBvc1sxXSArIG1vdmVzUmV2W2pdWzFdO1xuICAgICAgICAgIHBvc3NpYmxlUG9zLnB1c2goW3JvdywgY29sXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBvc3NpYmxlUG9zO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJDYXJkIGlzIG5vdCBpbiB5b3VyIGhhbmRcIik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2hlY2tIaWdobGlnaHQoKSB7XG4gICAgbGV0IGFsbENhcmRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5iYWNrXCIpO1xuICAgIGxldCBhbGxQYXducyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIjcGF3blwiKTtcbiAgICBsZXQgdGhhdCA9IHRoaXM7XG4gICAgYWxsUGF3bnMuZm9yRWFjaChmdW5jdGlvbiAocGF3bikge1xuICAgICAgaWYgKHBhd24uY2xhc3NMaXN0LmNvbnRhaW5zKFwiYWN0aXZlLXBhd25cIikpIHtcbiAgICAgICAgdGhhdC5hY3RpdmVQYXduID0gcGF3bjtcbiAgICAgICAgdGhhdC50YXJnZXRQb3MgPSB0aGF0LmN1cnJlbnRQb3MocGF3bik7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiRm91bmQgYWN0aXZlIHBhd24hXCIpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgYWxsQ2FyZHMuZm9yRWFjaChmdW5jdGlvbiAoY2FyZCkge1xuICAgICAgaWYgKGNhcmQuY2xhc3NMaXN0LmNvbnRhaW5zKFwiYWN0aXZlLWNhcmRcIikpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJGb3VuZCBhY3RpdmUgY2FyZCFcIik7XG4gICAgICAgIHRoYXQuYWN0aXZlQ2FyZCA9IGNhcmQ7XG4gICAgICAgIHRoYXQudGFyZ2V0Q2FyZCA9IHRoYXQuY3VycmVudENhcmQoY2FyZCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAodGhhdC5hY3RpdmVQYXduICE9PSBudWxsICYmIHRoYXQuYWN0aXZlQ2FyZCAhPT0gbnVsbCkge1xuICAgICAgY29uc29sZS5sb2coXCJCb3RoIEFjdGl2ZSFcIik7XG4gICAgICB0aGF0LnRhcmdldE1vdmVzID0gdGhhdC52aWV3TW92ZXMoKTsgIC8vIGhpZ2hsaWdodCBwb3MgXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLy8gZGVidWdnZXJcbiAgfVxuXG4gIC8vIHNldHMgZ2FtZS50YXJnZXRQb3MgaW4gY2hlY2tIaWdobGlnaHRcbiAgY3VycmVudFBvcyhwYXduRWwpIHtcbiAgICAvLyBjb25zdCB0aGF0ID0gdGhpcztcbiAgICBsZXQgcG9zID0gW107XG4gICAgbGV0IHBvc1N0ciA9IHBhd25FbC5wYXJlbnRFbGVtZW50LmlkO1xuICAgIGxldCBzdHJBcnIgPSBwb3NTdHIuc2xpY2UoMSwgcG9zU3RyLmxlbmd0aCkuc3BsaXQoXCIsXCIpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyQXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICBwb3MucHVzaCgocGFyc2VJbnQoc3RyQXJyW2ldKSkpO1xuICAgIH1cbiAgICByZXR1cm4gcG9zO1xuICB9XG5cbiAgLy8gc2V0cyBnYW1lLnRhcmdldENhcmQgaW4gY2hlY2tIaWdobGlnaHRcbiAgY3VycmVudENhcmQoY2FyZEVsKSB7XG4gICAgY29uc29sZS5sb2coXCJpbiBjdXJyZW50Q2FyZFwiKTtcbiAgICBsZXQgdGhhdCA9IHRoaXM7XG4gICAgbGV0IGNhcmRTdHIgPSBjYXJkRWwuaWQuc2xpY2UoNCk7XG4gICAgbGV0IGNhcmROdW0gPSBwYXJzZUludChjYXJkU3RyKTtcbiAgICBpZiAoY2FyZE51bSA9PT0gMSkgcmV0dXJuIHRoYXQucGxheWVyc1swXS5oYW5kWzBdO1xuICAgIGlmIChjYXJkTnVtID09PSAyKSByZXR1cm4gdGhhdC5wbGF5ZXJzWzBdLmhhbmRbMV07XG4gICAgaWYgKGNhcmROdW0gPT09IDMpIHJldHVybiBudWxsOyAvLyBuZWVkIG9uRGVjaz8gTWF5YmUgbm90LlxuICAgIGlmIChjYXJkTnVtID09PSA0KSByZXR1cm4gdGhhdC5wbGF5ZXJzWzFdLmhhbmRbMF07XG4gICAgaWYgKGNhcmROdW0gPT09IDUpIHJldHVybiB0aGF0LnBsYXllcnNbMV0uaGFuZFsxXTtcbiAgfVxuXG4gIHZpZXdNb3ZlUGllY2UocG9zRW5kRWxlKSB7XG4gICAgbGV0IHRoYXQgPSB0aGlzO1xuICAgIGxldCBwb3NTdGFydCA9IHRoYXQuY3VycmVudFBvcyh0aGF0LmFjdGl2ZVBhd24pO1xuICAgIGxldCBwb3NFbmQgPSB0aGF0LmNvbnZlcnRTdHJQb3MocG9zRW5kRWxlLmlkKTtcbiAgICAvLyBkZWJ1Z2dlcjtcbiAgICBpZiAoYm9hcmQuZ3JpZFtwb3NFbmRbMF1dW3Bvc0VuZFsxXV0gIT09IG51bGwpIHtcbiAgICAgIHRoYXQuYm9hcmQucmVtb3ZlUGllY2UocG9zRW5kKTtcbiAgICAgIHRoYXQuYm9hcmQudmlld1JlbW92ZVBpZWNlKHBvc0VuZCk7ICAvLyB0YWtlcyBwaWVjZVxuICAgIH1cbiAgICB0aGF0LmJvYXJkLm1vdmVQaWVjZShwb3NTdGFydCwgcG9zRW5kKTtcbiAgICAvLyBjb2RlZCBtb3ZlUGllY2UgY2FsbHMgdmlld1BsYWNlUGllY2VcbiAgICBsZXQgcGllY2UgPSB0aGF0LmJvYXJkLmdldFBpZWNlKHBvc0VuZCk7IC8vIFBpZWNlXG4gICAgLy8gZGVidWdnZXJcbiAgICB0aGF0LmJvYXJkLnZpZXdSZW1vdmVQaWVjZShwb3NTdGFydCk7IC8vIHJlbW92ZSBvbGQgcG9zXG4gICAgLy8gVFVSTiBTV0FQIFxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhhdC52aWV3U3dhcFR1cm4oKTtcbiAgICB9LCAyMDAwKTtcbiAgfVxuXG4gIGFzeW5jIHZpZXdTd2FwVXNlZENhcmQocGxheWVkQ2FyZEVsLCBkZWNrQ2FyZEVsKSB7XG4gICAgY29uc29sZS5sb2coXCJpbiBzd2FwIHVzZWRcIik7XG4gICAgbGV0IHRoYXQgPSB0aGlzO1xuICAgIGxldCBjdXJyZW50SGFuZCA9IHRoYXQucGxheWVyLmhhbmQ7XG4gICAgbGV0IHBsYXllZENhcmQgPSB0aGF0LmN1cnJlbnRDYXJkKHBsYXllZENhcmRFbCk7XG4gICAgbGV0IGRlY2tDYXJkID0gdGhhdC5vbkRlY2tDYXJkO1xuICAgIGxldCBwbGF5ZWRDYXJkSWR4ID0gbnVsbDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGN1cnJlbnRIYW5kLmxlbmd0aDsgaSsrKSB7XG4gICAgICAvLyBkZWJ1Z2dlclxuICAgICAgaWYgKHBsYXllZENhcmQgPT09IGN1cnJlbnRIYW5kW2ldKSBwbGF5ZWRDYXJkSWR4ID0gaTtcbiAgICB9XG4gICAgLy8gYm9hcmQgc3dhcFxuICAgIGxldCBuZXdQbGF5ZXJDYXJkID0gZGVja0NhcmQ7XG4gICAgbGV0IG5ld0RlY2tDYXJkID0gcGxheWVkQ2FyZDtcbiAgICBjdXJyZW50SGFuZFtwbGF5ZWRDYXJkSWR4XSA9IG5ld1BsYXllckNhcmQ7XG4gICAgZGVja0NhcmQgPSBuZXdEZWNrQ2FyZDtcbiAgICB0aGlzLm9uRGVja0NhcmQgPSBuZXdEZWNrQ2FyZDsgLy8gbmV3XG4gICAgLy8gZGVidWdnZXI7XG5cbiAgICAvLyB2aWV3IHN3YXBcbiAgICB0aGF0LmRlY2sudmlld0RlYWxTd2FwKG5ld1BsYXllckNhcmQsIHBsYXllZENhcmRFbCk7XG4gICAgdGhhdC5kZWNrLnZpZXdEZWFsU3dhcChuZXdEZWNrQ2FyZCwgZGVja0NhcmRFbCk7XG4gIH1cblxuXG4gIHZpZXdTd2FwVHVybigpIHtcbiAgICBsZXQgdGhhdCA9IHRoaXM7XG5cbiAgICBsZXQgcGxheWVkQ2FyZCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuYWN0aXZlLWNhcmRcIik7XG4gICAgbGV0IGRlY2tDYXJkID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNiYWNrM1wiKTtcblxuXG4gICAgLy8gc3F1YXJlcyByZW1vdmUgaGlnaGxpZ2h0XG4gICAgbGV0IGFsbFNxdWFyZXMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdzcXVhcmUnKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFsbFNxdWFyZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGFsbFNxdWFyZXNbaV0uY2xhc3NMaXN0LnJlbW92ZShcImFjdGl2ZVwiKTtcbiAgICAgIGFsbFNxdWFyZXNbaV0uY2xhc3NMaXN0LmFkZChcImluYWN0aXZlXCIpO1xuICAgIH1cblxuICAgIC8vIHBhd25zIHJlbW92ZSBoaWdobGlnaHRcbiAgICBsZXQgYWxsUGF3bnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiI3Bhd25cIik7XG4gICAgYWxsUGF3bnMuZm9yRWFjaChmdW5jdGlvbiAocGF3bikge1xuICAgICAgaWYgKHBhd24uY2xhc3NMaXN0LmNvbnRhaW5zKFwiYWN0aXZlLXBhd25cIikpIHtcbiAgICAgICAgcGF3bi5jbGFzc0xpc3QucmVtb3ZlKFwiYWN0aXZlLXBhd25cIik7XG4gICAgICAgIHBhd24uY2xhc3NMaXN0LmFkZChcImluYWN0aXZlLXBhd25cIik7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBoaWRlIHVzZWQgY2FyZHNcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIC8vIGZsaXAgdXNlZFxuICAgICAgdGhhdC5kZWNrLnZpZXdUb2dnbGVGbGlwVHVybigpLnRoZW4oXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIC8vIHN3YXAgdXNlZFxuICAgICAgICAgIHRoYXQudmlld1N3YXBVc2VkQ2FyZChwbGF5ZWRDYXJkLCBkZWNrQ2FyZCkudGhlbihcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAvLyBmbGlwIGJhY2tcbiAgICAgICAgICAgICAgdGhhdC5kZWNrLnZpZXdUb2dnbGVGbGlwVHVybigpLnRoZW4oXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAvLyBybSBoaWdobGlnaHRcbiAgICAgICAgICAgICAgICAgIHRoYXQudmlld1JlbW92ZUNhcmRIaWdobGlnaHQoKS50aGVuKFxuICAgICAgICAgICAgICAgICAgICAvLyBzd2FwIHR1cm4gQCBib2FyZFxuICAgICAgICAgICAgICAgICAgICB0aGF0LnN3YXBUdXJuKClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH0sIDYwMClcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSwgNjAwKVxuICAgICAgICAgIClcbiAgICAgICAgfSwgNjAwKVxuICAgICAgKVxuICAgIH0sIDEwMDApO1xuICB9XG5cbiAgLy8gY2FyZCByZW1vdmUgaGlnaGxpZ2h0XG4gIGFzeW5jIHZpZXdSZW1vdmVDYXJkSGlnaGxpZ2h0KCkge1xuICAgIGxldCBhbGxDYXJkcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIuYmFja1wiKTtcbiAgICBhbGxDYXJkcy5mb3JFYWNoKGZ1bmN0aW9uIChjYXJkKSB7XG4gICAgICBjYXJkLmNsYXNzTGlzdC5yZW1vdmUoXCJhY3RpdmUtY2FyZFwiKTtcbiAgICAgIGNhcmQuY2xhc3NMaXN0LmFkZChcImluYWN0aXZlLWNhcmRcIik7XG4gICAgfSk7XG4gIH1cblxuXG4gIHZpZXdNb3ZlcygpIHtcbiAgICBsZXQgdGhhdCA9IHRoaXM7XG4gICAgbGV0IGhpZ2hsaWdodE1vdmVzID0gdGhhdC5hbGxvd2VkTW92ZXModGhhdC50YXJnZXRDYXJkLCB0aGF0LnRhcmdldFBvcyk7XG4gICAgbGV0IHZpZXdTcXVhcmVzID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoaWdobGlnaHRNb3Zlcy5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IHNxdWFyZVNlbGVjdG9yID0gSlNPTi5zdHJpbmdpZnkoaGlnaGxpZ2h0TW92ZXNbaV0pO1xuICAgICAgbGV0IHNxdWFyZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHNxdWFyZVNlbGVjdG9yKTtcbiAgICAgIHZpZXdTcXVhcmVzLnB1c2goc3F1YXJlKTtcbiAgICB9XG4gICAgbGV0IGFsbFNxdWFyZXMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdzcXVhcmUnKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFsbFNxdWFyZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGFsbFNxdWFyZXNbaV0uY2xhc3NMaXN0LnJlbW92ZShcImFjdGl2ZVwiKTtcbiAgICAgIGFsbFNxdWFyZXNbaV0uY2xhc3NMaXN0LmFkZChcImluYWN0aXZlXCIpO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZpZXdTcXVhcmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2aWV3U3F1YXJlc1tpXS5jbGFzc0xpc3QuYWRkKFwiYWN0aXZlXCIpO1xuICAgICAgdmlld1NxdWFyZXNbaV0uY2xhc3NMaXN0LnJlbW92ZShcImluYWN0aXZlXCIpO1xuICAgIH1cblxuICAgIHJldHVybiBoaWdobGlnaHRNb3ZlcztcbiAgfVxuXG4gIC8vICdbMSwyXScgdG8gWzEsMl1cbiAgY29udmVydFN0clBvcyhzdHJQb3MpIHtcbiAgICBsZXQgYXJyID0gW107XG4gICAgbGV0IHN0ckFyciA9IHN0clBvcy5zbGljZSgxLCA0KS5zcGxpdCgnLCcpO1xuICAgIC8vIFsnMScsICcyJ11cbiAgICBzdHJBcnIuZm9yRWFjaCgoZWxlKSA9PiB7XG4gICAgICBhcnIucHVzaChwYXJzZUludChlbGUpKTtcbiAgICB9KTtcbiAgICByZXR1cm4gYXJyO1xuICB9XG5cbn1cblxuXG5cblxuXG4vLyBjb25zaWRlciBhZGRpbmcgYSBLRVk6dmFsdWUgbGlzdCBvZiB2YXJpYWJsZXMgbGlrZSBwYXduLCBtYXN0ZXIsIG9yIHBsYXllciBcbi8vIGFsc28gd2hlcmUgdG8ga2VlcCBjYXJkIG9iamVjdHM/XG5cblxuXG4vLyBmdW5jdGlvbiBhZGRHbG9iYWxFdmVudExpc3RlbmVyKHR5cGUsIHNlbGVjdG9yLCBjYWxsYmFjaykge1xuLy8gICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGUgPT4ge1xuLy8gICAgIGlmIChlLnRhcmdldC5tYXRjaGVzKHNlbGVjdG9yKSkgY2FsbGJhY2soZSk7XG4vLyAgIH0pO1xuLy8gfVxuXG5cbi8vIGZ1bmN0aW9uIGNyZWF0ZUdyaWQoKSB7XG4vLyAgIGNvbnN0IGdhbWVCb2FyZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYm9hcmRcIik7XG5cbi8vICAgZm9yIChsZXQgaSA9IDA7IGkgPCA1OyBpKyspIHtcbi8vICAgICBmb3IgKGxldCBqID0gMDsgaiA8IDU7IGorKykge1xuLy8gICAgICAgbGV0IHNxdWFyZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4vLyAgICAgICBzcXVhcmUuY2xhc3NMaXN0LmFkZChcInNxdWFyZVwiKTtcbi8vICAgICAgIHNxdWFyZS5zZXRBdHRyaWJ1dGUoXCJpZFwiLCBbaSwgal0pO1xuLy8gICAgICAgLy8gZ2FtZUJvYXJkLmFwcGVuZENoaWxkKHNxdWFyZSk7XG4vLyAgICAgfVxuLy8gICB9XG4vLyB9XG5cbi8vIGNyZWF0ZUdyaWQoKTsiXSwibmFtZXMiOlsiRGVjayIsIkJvYXJkIiwiUGxheWVyIiwiR2FtZSIsImFjdGl2ZUdhbWUiLCJ0YXJnZXRQb3MiLCJ0YXJnZXRDYXJkIiwidGFyZ2V0TW92ZXMiLCJhY3RpdmVQYXduIiwiYWN0aXZlQ2FyZCIsImN1cnJlbnRQbGF5ZXJJZHgiLCJwbGF5ZXJzIiwicGxheWVyIiwiY3VycmVudFBsYXllciIsImRlY2siLCJib2FyZCIsIndpbmRvdyIsIm90aGVyUGxheWVyIiwiY2FyZCIsImRlYWwiLCJkZWFsQ2FyZCIsInN3YXBUdXJuIiwiaSIsIm9uRGVja0NhcmQiLCJzZXRCb2FyZCIsInN0YXJ0UG9zIiwidGhhdCIsImJsdWVNb3ZlcyIsInJlZE1vdmVzIiwidmFsaWRQb3MiLCJhbGxNb3ZlcyIsInBvc3NpYmxlTW92ZXMiLCJyZWFsTW92ZXMiLCJsZW5ndGgiLCJpc0VtcHR5IiwicHVzaCIsImdldFBpZWNlIiwiY29sb3IiLCJ0b0xvd2VyQ2FzZSIsImhhbmQiLCJjb25zb2xlIiwibG9nIiwibW92ZXMiLCJzbGljZSIsInBvc3NpYmxlUG9zIiwiaiIsInJvdyIsImNvbCIsIm5ld01vdmVzIiwic3ViQXJyIiwiZWxlIiwibW92ZXNSZXYiLCJvcHBNb3ZlcyIsImFsbENhcmRzIiwiZG9jdW1lbnQiLCJxdWVyeVNlbGVjdG9yQWxsIiwiYWxsUGF3bnMiLCJmb3JFYWNoIiwicGF3biIsImNsYXNzTGlzdCIsImNvbnRhaW5zIiwiY3VycmVudFBvcyIsImN1cnJlbnRDYXJkIiwidmlld01vdmVzIiwicGF3bkVsIiwicG9zIiwicG9zU3RyIiwicGFyZW50RWxlbWVudCIsImlkIiwic3RyQXJyIiwic3BsaXQiLCJwYXJzZUludCIsImNhcmRFbCIsImNhcmRTdHIiLCJjYXJkTnVtIiwicG9zRW5kRWxlIiwicG9zU3RhcnQiLCJwb3NFbmQiLCJjb252ZXJ0U3RyUG9zIiwiZ3JpZCIsInJlbW92ZVBpZWNlIiwidmlld1JlbW92ZVBpZWNlIiwibW92ZVBpZWNlIiwicGllY2UiLCJzZXRUaW1lb3V0Iiwidmlld1N3YXBUdXJuIiwicGxheWVkQ2FyZEVsIiwiZGVja0NhcmRFbCIsImN1cnJlbnRIYW5kIiwicGxheWVkQ2FyZCIsImRlY2tDYXJkIiwicGxheWVkQ2FyZElkeCIsIm5ld1BsYXllckNhcmQiLCJuZXdEZWNrQ2FyZCIsInZpZXdEZWFsU3dhcCIsInF1ZXJ5U2VsZWN0b3IiLCJhbGxTcXVhcmVzIiwiZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSIsInJlbW92ZSIsImFkZCIsInZpZXdUb2dnbGVGbGlwVHVybiIsInRoZW4iLCJ2aWV3U3dhcFVzZWRDYXJkIiwidmlld1JlbW92ZUNhcmRIaWdobGlnaHQiLCJoaWdobGlnaHRNb3ZlcyIsImFsbG93ZWRNb3ZlcyIsInZpZXdTcXVhcmVzIiwic3F1YXJlU2VsZWN0b3IiLCJKU09OIiwic3RyaW5naWZ5Iiwic3F1YXJlIiwiZ2V0RWxlbWVudEJ5SWQiLCJzdHJQb3MiLCJhcnIiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/scripts/game.js\n"); /***/ }), @@ -60,7 +60,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"modalFill\": function() { return /* binding */ modalFill; }\n/* harmony export */ });\nvar modalFill = \"\\n
\\n Onitama is simple and quick variation on chess. Games typically take 5-15 minutes.\\n\\n
\\n Onitama is simple and quick variation on chess. Games typically take 5-15 minutes.\\n
\\n
Onitama is simple and quick variation on chess. Games typically take 5-15 minutes.
-
+