phaser-matter-collision-plugin
Version:
A plugin for making it easier to manage collisions with Phaser + Matter.js
160 lines • 56.9 kB
JavaScript
/*
* ATTENTION: An "eval-source-map" devtool has been used.
* This devtool is neither made for production nor for readable output files.
* It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
* If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
* or disable the default devtool with "devtool: false".
* If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
*/
(function webpackUniversalModuleDefinition(root, factory) {
if(typeof exports === 'object' && typeof module === 'object')
module.exports = factory(require("phaser"));
else if(typeof define === 'function' && define.amd)
define(["phaser"], factory);
else if(typeof exports === 'object')
exports["PhaserMatterCollisionPlugin"] = factory(require("phaser"));
else
root["PhaserMatterCollisionPlugin"] = factory(root["Phaser"]);
})((typeof self !== "undefined" ? self : this), function(__WEBPACK_EXTERNAL_MODULE_phaser__) {
return /******/ (() => { // webpackBootstrap
/******/ "use strict";
/******/ var __webpack_modules__ = ({
/***/ "./index.ts":
/*!******************!*\
!*** ./index.ts ***!
\******************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"PhaserMatterCollisionPlugin\": () => (/* reexport safe */ _phaser_matter_collision_plugin__WEBPACK_IMPORTED_MODULE_0__.default),\n/* harmony export */ \"getRootBody\": () => (/* reexport safe */ _utils__WEBPACK_IMPORTED_MODULE_1__.getRootBody),\n/* harmony export */ \"isCollidingObject\": () => (/* reexport safe */ _valid_collision_object__WEBPACK_IMPORTED_MODULE_2__.isCollidingObject),\n/* harmony export */ \"isMatterBody\": () => (/* reexport safe */ _valid_collision_object__WEBPACK_IMPORTED_MODULE_2__.isMatterBody),\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _phaser_matter_collision_plugin__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./phaser-matter-collision-plugin */ \"./phaser-matter-collision-plugin.ts\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils */ \"./utils.ts\");\n/* harmony import */ var _valid_collision_object__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./valid-collision-object */ \"./valid-collision-object.ts\");\n\r\n\r\n\r\n\r\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_phaser_matter_collision_plugin__WEBPACK_IMPORTED_MODULE_0__.default);\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9QaGFzZXJNYXR0ZXJDb2xsaXNpb25QbHVnaW4vLi9pbmRleC50cz9hOTU5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQTJFO0FBQ3JDO0FBTUo7QUEyQmhDO0FBRUYsaUVBQWUsb0VBQTJCLEVBQUMiLCJmaWxlIjoiLi9pbmRleC50cy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBQaGFzZXJNYXR0ZXJDb2xsaXNpb25QbHVnaW4gZnJvbSBcIi4vcGhhc2VyLW1hdHRlci1jb2xsaXNpb24tcGx1Z2luXCI7XG5pbXBvcnQgeyBnZXRSb290Qm9keSB9IGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQge1xuICBpc0NvbGxpZGluZ09iamVjdCxcbiAgaXNNYXR0ZXJCb2R5LFxuICBPYmplY3RXaXRoQm9keSxcbiAgQ29sbGlkaW5nT2JqZWN0LFxufSBmcm9tIFwiLi92YWxpZC1jb2xsaXNpb24tb2JqZWN0XCI7XG5pbXBvcnQge1xuICBFeHRlbmRlZE1hdHRlckNvbGxpc2lvbkRhdGEsXG4gIENvbGxpc2lvbkV2ZW50LFxuICBFdmVudERhdGEsXG4gIENvbGxpZGVDYWxsYmFjayxcbiAgQ29sbGlkZUFDb25maWcsXG4gIENvbGxpZGVBQkNvbmZpZyxcbiAgQ29sbGlkZUNvbnRleHQsXG4gIFVuc3Vic2NyaWJlLFxufSBmcm9tIFwiLi9jb2xsaXNpb24tdHlwZXNcIjtcblxuZXhwb3J0IHtcbiAgUGhhc2VyTWF0dGVyQ29sbGlzaW9uUGx1Z2luLFxuICBnZXRSb290Qm9keSxcbiAgaXNDb2xsaWRpbmdPYmplY3QsXG4gIGlzTWF0dGVyQm9keSxcbiAgT2JqZWN0V2l0aEJvZHksXG4gIENvbGxpZGluZ09iamVjdCxcbiAgRXh0ZW5kZWRNYXR0ZXJDb2xsaXNpb25EYXRhLFxuICBDb2xsaXNpb25FdmVudCxcbiAgRXZlbnREYXRhLFxuICBDb2xsaWRlQ2FsbGJhY2ssXG4gIENvbGxpZGVBQ29uZmlnLFxuICBDb2xsaWRlQUJDb25maWcsXG4gIENvbGxpZGVDb250ZXh0LFxuICBVbnN1YnNjcmliZSxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFBoYXNlck1hdHRlckNvbGxpc2lvblBsdWdpbjtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./index.ts\n");
/***/ }),
/***/ "./logger.ts":
/*!*******************!*\
!*** ./logger.ts ***!
\*******************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\r\n log: console.log,\r\n warn: console.warn,\r\n error: console.error,\r\n});\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9QaGFzZXJNYXR0ZXJDb2xsaXNpb25QbHVnaW4vLi9sb2dnZXIudHM/Zjk0OSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsaUVBQWU7SUFDYixHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUc7SUFDaEIsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO0lBQ2xCLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSztDQUNyQixFQUFDIiwiZmlsZSI6Ii4vbG9nZ2VyLnRzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQge1xuICBsb2c6IGNvbnNvbGUubG9nLFxuICB3YXJuOiBjb25zb2xlLndhcm4sXG4gIGVycm9yOiBjb25zb2xlLmVycm9yLFxufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./logger.ts\n");
/***/ }),
/***/ "./phaser-matter-collision-plugin.ts":
/*!*******************************************!*\
!*** ./phaser-matter-collision-plugin.ts ***!
\*******************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ MatterCollisionPlugin)\n/* harmony export */ });\n/* harmony import */ var phaser__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! phaser */ \"phaser\");\n/* harmony import */ var phaser__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(phaser__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils */ \"./utils.ts\");\n/* harmony import */ var _logger__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./logger */ \"./logger.ts\");\n/* harmony import */ var _valid_collision_object__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./valid-collision-object */ \"./valid-collision-object.ts\");\n\r\n\r\n\r\n\r\nvar Matter = phaser__WEBPACK_IMPORTED_MODULE_0__.Physics.Matter;\r\nconst { START, DESTROY, SHUTDOWN } = phaser__WEBPACK_IMPORTED_MODULE_0__.Scenes.Events;\r\nconst { COLLISION_START, COLLISION_ACTIVE, COLLISION_END } = Matter.Events;\r\n/**\r\n * @export\r\n */\r\nclass MatterCollisionPlugin extends phaser__WEBPACK_IMPORTED_MODULE_0__.Plugins.ScenePlugin {\r\n constructor(scene, pluginManager, pluginKey) {\r\n super(scene, pluginManager, pluginKey);\r\n this.scene = scene;\r\n this.pluginManager = pluginManager;\r\n this.events = new phaser__WEBPACK_IMPORTED_MODULE_0__.Events.EventEmitter();\r\n this.collisionStartListeners = new Map();\r\n this.collisionEndListeners = new Map();\r\n this.collisionActiveListeners = new Map();\r\n this.scene = scene;\r\n this.scene.events.once(START, this.start, this);\r\n this.scene.events.once(DESTROY, this.destroy, this);\r\n }\r\n addOnCollideStart(config) {\r\n // Note: the order of overloads is important! TS matches the first one it can, so this needs\r\n // the most specific/constrained signature first.\r\n this.addOnCollide(this.collisionStartListeners, config);\r\n return () => this.removeOnCollide(this.collisionStartListeners, config);\r\n }\r\n addOnCollideEnd(config) {\r\n this.addOnCollide(this.collisionEndListeners, config);\r\n return () => this.removeOnCollide(this.collisionEndListeners, config);\r\n }\r\n addOnCollideActive(config) {\r\n this.addOnCollide(this.collisionActiveListeners, config);\r\n return () => this.removeOnCollide(this.collisionActiveListeners, config);\r\n }\r\n removeOnCollideStart(config) {\r\n this.removeOnCollide(this.collisionStartListeners, config);\r\n }\r\n removeOnCollideEnd(config) {\r\n this.removeOnCollide(this.collisionEndListeners, config);\r\n }\r\n removeOnCollideActive(config) {\r\n this.removeOnCollide(this.collisionActiveListeners, config);\r\n }\r\n /** Remove any listeners that were added with addOnCollideStart. */\r\n removeAllCollideStartListeners() {\r\n this.collisionStartListeners.clear();\r\n }\r\n /** Remove any listeners that were added with addOnCollideActive. */\r\n removeAllCollideActiveListeners() {\r\n this.collisionActiveListeners.clear();\r\n }\r\n /** Remove any listeners that were added with addOnCollideEnd. */\r\n removeAllCollideEndListeners() {\r\n this.collisionEndListeners.clear();\r\n }\r\n /**\r\n * Remove any listeners that were added with addOnCollideStart, addOnCollideActive or\r\n * addOnCollideEnd.\r\n */\r\n removeAllCollideListeners() {\r\n this.removeAllCollideStartListeners();\r\n this.removeAllCollideActiveListeners();\r\n this.removeAllCollideEndListeners();\r\n }\r\n addOnCollide(map, config) {\r\n const { context, callback, objectA, objectB } = config;\r\n if (!callback || typeof callback !== \"function\") {\r\n _logger__WEBPACK_IMPORTED_MODULE_2__.default.warn(`No valid callback specified. Received: ${callback}`);\r\n return;\r\n }\r\n const objectsA = Array.isArray(objectA) ? objectA : [objectA];\r\n const objectsB = Array.isArray(objectB) ? objectB : [objectB];\r\n objectsA.forEach((a) => {\r\n objectsB.forEach((b) => {\r\n this.addOnCollideObjectVsObject(map, a, b, callback, context);\r\n });\r\n });\r\n }\r\n removeOnCollide(map, config) {\r\n const { context, callback, objectA, objectB } = config;\r\n const objectsA = Array.isArray(objectA) ? objectA : [objectA];\r\n const objectsB = Array.isArray(objectB) ? objectB : [objectB];\r\n objectsA.forEach((a) => {\r\n const callbacks = map.get(a) || [];\r\n const remainingCallbacks = callbacks.filter((cb) => {\r\n // If anything doesn't match a provided config value (i.e. anything other than undefined),\r\n // we can bail and keep listener.\r\n if (context !== undefined && cb.context !== context)\r\n return true;\r\n if (callback !== undefined && cb.callback !== callback)\r\n return true;\r\n if (objectB !== undefined && !objectsB.includes(cb.target))\r\n return true;\r\n return false;\r\n });\r\n if (remainingCallbacks.length > 0)\r\n map.set(a, remainingCallbacks);\r\n else\r\n map.delete(a);\r\n });\r\n }\r\n addOnCollideObjectVsObject(map, objectA, objectB, callback, context) {\r\n // Can't do anything if the first object is not defined or invalid.\r\n if (!objectA || !(0,_valid_collision_object__WEBPACK_IMPORTED_MODULE_3__.isCollidingObject)(objectA)) {\r\n (0,_utils__WEBPACK_IMPORTED_MODULE_1__.warnInvalidObject)(objectA);\r\n return;\r\n }\r\n // The second object can be undefined or a valid body.\r\n if (objectB && !(0,_valid_collision_object__WEBPACK_IMPORTED_MODULE_3__.isCollidingObject)(objectB)) {\r\n (0,_utils__WEBPACK_IMPORTED_MODULE_1__.warnInvalidObject)(objectA);\r\n return;\r\n }\r\n const callbacks = map.get(objectA) || [];\r\n callbacks.push({ target: objectB, callback, context });\r\n map.set(objectA, callbacks);\r\n }\r\n onCollisionStart(event) {\r\n this.onCollisionEvent(this.collisionStartListeners, COLLISION_START, event);\r\n }\r\n onCollisionEnd(event) {\r\n this.onCollisionEvent(this.collisionEndListeners, COLLISION_END, event);\r\n }\r\n onCollisionActive(event) {\r\n this.onCollisionEvent(this.collisionActiveListeners, COLLISION_ACTIVE, event);\r\n }\r\n /**\r\n * Reusable handler for collisionstart, collisionend, collisionactive.\r\n * */\r\n onCollisionEvent(listenerMap, eventName, event) {\r\n const pairs = event.pairs;\r\n const pairEventName = \"pair\" + eventName;\r\n const eventData = { isReversed: false };\r\n const eventDataReversed = { isReversed: true };\r\n pairs.map((pair, i) => {\r\n var _a, _b;\r\n const { bodyA, bodyB } = pair;\r\n const rootBodyA = (0,_utils__WEBPACK_IMPORTED_MODULE_1__.getRootBody)(bodyA);\r\n const rootBodyB = (0,_utils__WEBPACK_IMPORTED_MODULE_1__.getRootBody)(bodyB);\r\n let gameObjectA = (_a = rootBodyA.gameObject) !== null && _a !== void 0 ? _a : undefined;\r\n let gameObjectB = (_b = rootBodyB.gameObject) !== null && _b !== void 0 ? _b : undefined;\r\n // Special case for tiles, where it's more useful to have a reference to the Tile object not\r\n // the TileBody. This is hot code, so use a property check instead of instanceof.\r\n if (gameObjectA && gameObjectA instanceof Matter.TileBody) {\r\n gameObjectA = gameObjectA.tile;\r\n }\r\n if (gameObjectB && gameObjectB instanceof Matter.TileBody) {\r\n gameObjectB = gameObjectB.tile;\r\n }\r\n pairs[i].gameObjectA = gameObjectA !== null && gameObjectA !== void 0 ? gameObjectA : undefined;\r\n pairs[i].gameObjectB = gameObjectB !== null && gameObjectB !== void 0 ? gameObjectB : undefined;\r\n eventData.bodyA = bodyA;\r\n eventData.bodyB = bodyB;\r\n eventData.gameObjectA = gameObjectA !== null && gameObjectA !== void 0 ? gameObjectA : undefined;\r\n eventData.gameObjectB = gameObjectB !== null && gameObjectB !== void 0 ? gameObjectB : undefined;\r\n eventData.pair = pair;\r\n this.events.emit(pairEventName, eventData);\r\n if (listenerMap.size > 0) {\r\n eventDataReversed.bodyB = bodyA;\r\n eventDataReversed.bodyA = bodyB;\r\n eventDataReversed.gameObjectB = gameObjectA;\r\n eventDataReversed.gameObjectA = gameObjectB;\r\n eventDataReversed.pair = pair;\r\n const data = eventData;\r\n const dataReversed = eventDataReversed;\r\n this.checkPairAndEmit(listenerMap, bodyA, bodyB, gameObjectB, data);\r\n this.checkPairAndEmit(listenerMap, bodyB, bodyA, gameObjectA, dataReversed);\r\n if (gameObjectA) {\r\n this.checkPairAndEmit(listenerMap, gameObjectA, bodyB, gameObjectB, data);\r\n }\r\n if (gameObjectB) {\r\n this.checkPairAndEmit(listenerMap, gameObjectB, bodyA, gameObjectA, dataReversed);\r\n }\r\n }\r\n });\r\n this.events.emit(eventName, event);\r\n }\r\n checkPairAndEmit(map, objectA, bodyB, gameObjectB, eventData) {\r\n const callbacks = map.get(objectA);\r\n if (callbacks) {\r\n callbacks.forEach(({ target, callback, context }) => {\r\n if (!target || target === bodyB || target === gameObjectB) {\r\n callback.call(context, eventData);\r\n }\r\n });\r\n }\r\n }\r\n subscribeMatterEvents() {\r\n const matter = this.scene.matter;\r\n if (!matter || !matter.world) {\r\n _logger__WEBPACK_IMPORTED_MODULE_2__.default.warn(\"Plugin requires matter!\");\r\n return;\r\n }\r\n matter.world.on(COLLISION_START, this.onCollisionStart, this);\r\n matter.world.on(COLLISION_ACTIVE, this.onCollisionActive, this);\r\n matter.world.on(COLLISION_END, this.onCollisionEnd, this);\r\n }\r\n unsubscribeMatterEvents() {\r\n // Don't unsub if matter next existing or if the game is destroyed (since the matter world will\r\n // be already gone)\r\n const matter = this.scene.matter;\r\n if (!matter || !matter.world)\r\n return;\r\n matter.world.off(COLLISION_START, this.onCollisionStart, this);\r\n matter.world.off(COLLISION_ACTIVE, this.onCollisionActive, this);\r\n matter.world.off(COLLISION_END, this.onCollisionEnd, this);\r\n }\r\n start() {\r\n // If restarting, unsubscribe before resubscribing to ensure only one listener is added\r\n this.scene.events.off(SHUTDOWN, this.shutdown, this);\r\n this.scene.events.on(SHUTDOWN, this.shutdown, this);\r\n this.subscribeMatterEvents();\r\n }\r\n shutdown() {\r\n this.removeAllCollideListeners();\r\n this.unsubscribeMatterEvents();\r\n // Resubscribe to start so that the plugin is started again after Matter\r\n this.scene.events.once(START, this.start, this);\r\n }\r\n destroy() {\r\n this.scene.events.off(DESTROY, this.destroy, this);\r\n this.scene.events.off(START, this.start, this);\r\n this.scene.events.off(SHUTDOWN, this.shutdown, this);\r\n this.removeAllCollideListeners();\r\n this.unsubscribeMatterEvents();\r\n }\r\n}\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9QaGFzZXJNYXR0ZXJDb2xsaXNpb25QbHVnaW4vLi9waGFzZXItbWF0dGVyLWNvbGxpc2lvbi1wbHVnaW4udHM/OGI5OCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBMkU7QUFDbEI7QUFDM0I7QUFDc0Q7QUFnQnBGLElBQU8sTUFBTSxHQUFHLGtEQUFjLENBQUM7QUFFL0IsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLEdBQUcsaURBQWEsQ0FBQztBQUNuRCxNQUFNLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFPM0U7O0dBRUc7QUFDWSxNQUFNLHFCQUFzQixTQUFRLHVEQUFtQjtJQU9wRSxZQUNZLEtBQVksRUFDWixhQUFvQyxFQUM5QyxTQUFpQjtRQUVqQixLQUFLLENBQUMsS0FBSyxFQUFFLGFBQWEsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUo3QixVQUFLLEdBQUwsS0FBSyxDQUFPO1FBQ1osa0JBQWEsR0FBYixhQUFhLENBQXVCO1FBUnpDLFdBQU0sR0FBRyxJQUFJLHVEQUFtQixFQUFFLENBQUM7UUFFbEMsNEJBQXVCLEdBQWdCLElBQUksR0FBRyxFQUFFLENBQUM7UUFDakQsMEJBQXFCLEdBQWdCLElBQUksR0FBRyxFQUFFLENBQUM7UUFDL0MsNkJBQXdCLEdBQWdCLElBQUksR0FBRyxFQUFFLENBQUM7UUFReEQsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lB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QUF5QixFQUFFLENBQUM7UUFDakMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7UUFDL0Isd0VBQXdFO1FBQ3hFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsT0FBTztRQUNMLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO0lBQ2pDLENBQUM7Q0FDRiIsImZpbGUiOiIuL3BoYXNlci1tYXR0ZXItY29sbGlzaW9uLXBsdWdpbi50cy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBoeXNpY3MsIFBsdWdpbnMsIFNjZW5lLCBFdmVudHMsIFNjZW5lcywgVGlsZW1hcHMgfSBmcm9tIFwicGhhc2VyXCI7XG5pbXBvcnQgeyBnZXRSb290Qm9keSwgd2FybkludmFsaWRPYmplY3QgfSBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IGxvZ2dlciBmcm9tIFwiLi9sb2dnZXJcIjtcbmltcG9ydCB7IENvbGxpZGluZ09iamVjdCBhcyBDTywgaXNDb2xsaWRpbmdPYmplY3QgfSBmcm9tIFwiLi92YWxpZC1jb2xsaXNpb24tb2JqZWN0XCI7XG5pbXBvcnQge1xuICBMaXN0ZW5lck1hcCxcbiAgQ29sbGlkZUFCQ29uZmlnIGFzIEFCQ29uZmlnLFxuICBVbnN1YnNjcmliZSxcbiAgQ29sbGlkZUNhbGxiYWNrLFxuICBDb2xsaWRlQ29udGV4dCxcbiAgRXh0ZW5kZWRNYXR0ZXJDb2xsaXNpb25EYXRhLFxuICBFdmVudERhdGEsXG4gIENvbGxpZGVBQ29uZmlnIGFzIEFDb25maWcsXG4gIEludGVybmFsQ29sbGlkZUNvbmZpZyxcbiAgUmVtb3ZlQ29sbGlkZUNvbmZpZ0EgYXMgUmVtb3ZlQUNvbmZpZyxcbiAgUmVtb3ZlQ29sbGlkZUNvbmZpZ0FCIGFzIFJlbW92ZUFCQ29uZmlnLFxuICBJbnRlcm5hbENvbGxpZGVSZW1vdmVDb25maWcsXG59IGZyb20gXCIuL2NvbGxpc2lvbi10eXBlc1wiO1xuXG5pbXBvcnQgTWF0dGVyID0gUGh5c2ljcy5NYXR0ZXI7XG5pbXBvcnQgTWF0dGVyRXZlbnRzID0gTWF0dGVyLkV2ZW50cztcbmNvbnN0IHsgU1RBUlQsIERFU1RST1ksIFNIVVRET1dOIH0gPSBTY2VuZXMuRXZlbnRzO1xuY29uc3QgeyBDT0xMSVNJT05fU1RBUlQsIENPTExJU0lPTl9BQ1RJVkUsIENPTExJU0lPTl9FTkQgfSA9IE1hdHRlci5FdmVudHM7XG5cbnR5cGUgTWF0dGVyQ29sbGlzaW9uRXZlbnQgPVxuICB8IE1hdHRlckV2ZW50cy5Db2xsaXNpb25BY3RpdmVFdmVudFxuICB8IE1hdHRlckV2ZW50cy5Db2xsaXNpb25FbmRFdmVudFxuICB8IE1hdHRlckV2ZW50cy5Db2xsaXNpb25BY3RpdmVFdmVudDtcblxuLyoqXG4gKiBAZXhwb3J0XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1hdHRlckNvbGxpc2lvblBsdWdpbiBleHRlbmRzIFBsdWdpbnMuU2NlbmVQbHVnaW4ge1xuICBwdWJsaWMgZXZlbnRzID0gbmV3IEV2ZW50cy5FdmVudEVtaXR0ZXIoKTtcblxuICBwcml2YXRlIGNvbGxpc2lvblN0YXJ0TGlzdGVuZXJzOiBMaXN0ZW5lck1hcCA9IG5ldyBNYXAoKTtcbiAgcHJpdmF0ZSBjb2xsaXNpb25FbmRMaXN0ZW5lcnM6IExpc3RlbmVyTWFwID0gbmV3IE1hcCgpO1xuICBwcml2YXRlIGNvbGxpc2lvbkFjdGl2ZUxpc3RlbmVyczogTGlzdGVuZXJNYXAgPSBuZXcgTWFwKCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHNjZW5lOiBTY2VuZSxcbiAgICBwcm90ZWN0ZWQgcGx1Z2luTWFuYWdlcjogUGx1Z2lucy5QbHVnaW5NYW5hZ2VyLFxuICAgIHBsdWdpbktleTogc3RyaW5nXG4gICkge1xuICAgIHN1cGVyKHNjZW5lLCBwbHVnaW5NYW5hZ2VyLCBwbHVnaW5LZXkpO1xuICAgIHRoaXMuc2NlbmUgPSBzY2VuZTtcbiAgICB0aGlzLnNjZW5lLmV2ZW50cy5vbmNlKFNUQVJULCB0aGlzLnN0YXJ0LCB0aGlzKTtcbiAgICB0aGlzLnNjZW5lLmV2ZW50cy5vbmNlKERFU1RST1ksIHRoaXMuZGVzdHJveSwgdGhpcyk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgbGlzdGVuZXIgZm9yIGNvbGxpZGVzdGFydCBldmVudHMgYmV0d2VlbiBvYmplY3RBIGFuZCBvYmplY3RCLiBUaGUgY29sbGlkZXN0YXJ0IGV2ZW50IGlzXG4gICAqIGZpcmVkIGJ5IE1hdHRlciB3aGVuIHR3byBib2RpZXMgc3RhcnQgY29sbGlkaW5nIHdpdGhpbiBhIHRpY2sgb2YgdGhlIGVuZ2luZS4gSWYgb2JqZWN0QiBpc1xuICAgKiBvbWl0dGVkLCBhbnkgY29sbGlzaW9ucyB3aXRoIG9iamVjdEEgd2lsbCBiZSBwYXNzZWQgYWxvbmcgdG8gdGhlIGxpc3RlbmVyLiBTZWVcbiAgICoge0BsaW5rIHBhaXJjb2xsaXNpb25zdGFydH0gZm9yIGluZm9ybWF0aW9uIG9uIGNhbGxiYWNrIHBhcmFtZXRlcnMuXG4gICAqL1xuICBwdWJsaWMgYWRkT25Db2xsaWRlU3RhcnQ8VCBleHRlbmRzIENPLCBLIGV4dGVuZHMgQ08+KGNvbmZpZzogQUJDb25maWc8VCwgSz4pOiBVbnN1YnNjcmliZTtcbiAgcHVibGljIGFkZE9uQ29sbGlkZVN0YXJ0PFQgZXh0ZW5kcyBDTz4oY29uZmlnOiBBQ29uZmlnPFQ+KTogVW5zdWJzY3JpYmU7XG4gIHB1YmxpYyBhZGRPbkNvbGxpZGVTdGFydChjb25maWc6IEludGVybmFsQ29sbGlkZUNvbmZpZyk6IFVuc3Vic2NyaWJlIHtcbiAgICAvLyBOb3RlOiB0aGUgb3JkZXIgb2Ygb3ZlcmxvYWRzIGlzIGltcG9ydGFudCEgVFMgbWF0Y2hlcyB0aGUgZmlyc3Qgb25lIGl0IGNhbiwgc28gdGhpcyBuZWVkc1xuICAgIC8vIHRoZSBtb3N0IHNwZWNpZmljL2NvbnN0cmFpbmVkIHNpZ25hdHVyZSBmaXJzdC5cbiAgICB0aGlzLmFkZE9uQ29sbGlkZSh0aGlzLmNvbGxpc2lvblN0YXJ0TGlzdGVuZXJzLCBjb25maWcpO1xuICAgIHJldHVybiAoKSA9PiB0aGlzLnJlbW92ZU9uQ29sbGlkZSh0aGlzLmNvbGxpc2lvblN0YXJ0TGlzdGVuZXJzLCBjb25maWcpO1xuICB9XG5cbiAgLyoqIFRoaXMgbWV0aG9kIG1pcnJvcnMge0BsaW5rIE1hdHRlckNvbGxpc2lvblBsdWdpbiNhZGRPbkNvbGxpZGVTdGFydH0gKi9cbiAgcHVibGljIGFkZE9uQ29sbGlkZUVuZDxUIGV4dGVuZHMgQ08sIEsgZXh0ZW5kcyBDTz4oY29uZmlnOiBBQkNvbmZpZzxULCBLPik6IFVuc3Vic2NyaWJlO1xuICBwdWJsaWMgYWRkT25Db2xsaWRlRW5kPFQgZXh0ZW5kcyBDTz4oY29uZmlnOiBBQ29uZmlnPFQ+KTogVW5zdWJzY3JpYmU7XG4gIHB1YmxpYyBhZGRPbkNvbGxpZGVFbmQoY29uZmlnOiBJbnRlcm5hbENvbGxpZGVDb25maWcpOiBVbnN1YnNjcmliZSB7XG4gICAgdGhpcy5hZGRPbkNvbGxpZGUodGhpcy5jb2xsaXNpb25FbmRMaXN0ZW5lcnMsIGNvbmZpZyk7XG4gICAgcmV0dXJuICgpID0+IHRoaXMucmVtb3ZlT25Db2xsaWRlKHRoaXMuY29sbGlzaW9uRW5kTGlzdGVuZXJzLCBjb25maWcpO1xuICB9XG5cbiAgLyoqIFRoaXMgbWV0aG9kIG1pcnJvcnMge0BsaW5rIE1hdHRlckNvbGxpc2lvblBsdWdpbiNhZGRPbkNvbGxpZGVTdGFydH0gKi9cbiAgcHVibGljIGFkZE9uQ29sbGlkZUFjdGl2ZTxUIGV4dGVuZHMgQ08sIEsgZXh0ZW5kcyBDTz4oY29uZmlnOiBBQkNvbmZpZzxULCBLPik6IFVuc3Vic2NyaWJlO1xuICBwdWJsaWMgYWRkT25Db2xsaWRlQWN0aXZlPFQgZXh0ZW5kcyBDTz4oY29uZmlnOiBBQ29uZmlnPFQ+KTogVW5zdWJzY3JpYmU7XG4gIHB1YmxpYyBhZGRPbkNvbGxpZGVBY3RpdmUoY29uZmlnOiBJbnRlcm5hbENvbGxpZGVDb25maWcpOiBVbnN1YnNjcmliZSB7XG4gICAgdGhpcy5hZGRPbkNvbGxpZGUodGhpcy5jb2xsaXNpb25BY3RpdmVMaXN0ZW5lcnMsIGNvbmZpZyk7XG4gICAgcmV0dXJuICgpID0+IHRoaXMucmVtb3ZlT25Db2xsaWRlKHRoaXMuY29sbGlzaW9uQWN0aXZlTGlzdGVuZXJzLCBjb25maWcpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhbnkgbGlzdGVuZXJzIHRoYXQgd2VyZSBhZGRlZCB3aXRoIGFkZE9uQ29sbGlkZVN0YXJ0LiBJZiBvYmplY3RCLCBjYWxsYmFjayBvciBjb250ZXh0XG4gICAqIHBhcmFtZXRlcnMgYXJlIG9taXR0ZWQsIGFueSBsaXN0ZW5lciBtYXRjaGluZyB0aGUgcmVtYWluaW5nIHBhcmFtZXRlcnMgd2lsbCBiZSByZW1vdmVkLiBFLmcuIGlmXG4gICAqIHlvdSBvbmx5IHNwZWNpZnkgb2JqZWN0QSBhbmQgb2JqZWN0QiwgYWxsIGxpc3RlbmVycyB3aXRoIG9iamVjdEEgJiBvYmplY3RCIHdpbGwgYmUgcmVtb3ZlZFxuICAgKiByZWdhcmRsZXNzIG9mIHRoZSBjYWxsYmFjayBvciBjb250ZXh0LlxuICAgKi9cbiAgcHVibGljIHJlbW92ZU9uQ29sbGlkZVN0YXJ0PFQgZXh0ZW5kcyBDTywgSyBleHRlbmRzIENPPihjb25maWc6IFJlbW92ZUFCQ29uZmlnPFQsIEs+KTogdm9pZDtcbiAgcHVibGljIHJlbW92ZU9uQ29sbGlkZVN0YXJ0PFQgZXh0ZW5kcyBDTz4oY29uZmlnOiBSZW1vdmVBQ29uZmlnPFQ+KTogdm9pZDtcbiAgcHVibGljIHJlbW92ZU9uQ29sbGlkZVN0YXJ0KGNvbmZpZzogSW50ZXJuYWxDb2xsaWRlUmVtb3ZlQ29uZmlnKSB7XG4gICAgdGhpcy5yZW1vdmVPbkNvbGxpZGUodGhpcy5jb2xsaXNpb25TdGFydExpc3RlbmVycywgY29uZmlnKTtcbiAgfVxuXG4gIC8qKiBUaGlzIG1ldGhvZCBtaXJyb3JzIHtAbGluayBNYXR0ZXJDb2xsaXNpb25QbHVnaW4jcmVtb3ZlT25Db2xsaWRlU3RhcnR9ICovXG4gIHB1YmxpYyByZW1vdmVPbkNvbGxpZGVFbmQ8VCBleHRlbmRzIENPLCBLIGV4dGVuZHMgQ08+KGNvbmZpZzogUmVtb3ZlQUJDb25maWc8VCwgSz4pOiB2b2lkO1xuICBwdWJsaWMgcmVtb3ZlT25Db2xsaWRlRW5kPFQgZXh0ZW5kcyBDTz4oY29uZmlnOiBSZW1vdmVBQ29uZmlnPFQ+KTogdm9pZDtcbiAgcHVibGljIHJlbW92ZU9uQ29sbGlkZUVuZChjb25maWc6IEludGVybmFsQ29sbGlkZVJlbW92ZUNvbmZpZykge1xuICAgIHRoaXMucmVtb3ZlT25Db2xsaWRlKHRoaXMuY29sbGlzaW9uRW5kTGlzdGVuZXJzLCBjb25maWcpO1xuICB9XG5cbiAgLyoqIFRoaXMgbWV0aG9kIG1pcnJvcnMge0BsaW5rIE1hdHRlckNvbGxpc2lvblBsdWdpbiNyZW1vdmVPbkNvbGxpZGVTdGFydH0gKi9cbiAgcHVibGljIHJlbW92ZU9uQ29sbGlkZUFjdGl2ZTxUIGV4dGVuZHMgQ08sIEsgZXh0ZW5kcyBDTz4oY29uZmlnOiBSZW1vdmVBQkNvbmZpZzxULCBLPik6IHZvaWQ7XG4gIHB1YmxpYyByZW1vdmVPbkNvbGxpZGVBY3RpdmU8VCBleHRlbmRzIENPPihjb25maWc6IFJlbW92ZUFDb25maWc8VD4pOiB2b2lkO1xuICBwdWJsaWMgcmVtb3ZlT25Db2xsaWRlQWN0aXZlKGNvbmZpZzogSW50ZXJuYWxDb2xsaWRlUmVtb3ZlQ29uZmlnKSB7XG4gICAgdGhpcy5yZW1vdmVPbkNvbGxpZGUodGhpcy5jb2xsaXNpb25BY3RpdmVMaXN0ZW5lcnMsIGNvbmZpZyk7XG4gIH1cblxuICAvKiogUmVtb3ZlIGFueSBsaXN0ZW5lcnMgdGhhdCB3ZXJlIGFkZGVkIHdpdGggYWRkT25Db2xsaWRlU3RhcnQuICovXG4gIHB1YmxpYyByZW1vdmVBbGxDb2xsaWRlU3RhcnRMaXN0ZW5lcnMoKSB7XG4gICAgdGhpcy5jb2xsaXNpb25TdGFydExpc3RlbmVycy5jbGVhcigpO1xuICB9XG5cbiAgLyoqIFJlbW92ZSBhbnkgbGlzdGVuZXJzIHRoYXQgd2VyZSBhZGRlZCB3aXRoIGFkZE9uQ29sbGlkZUFjdGl2ZS4gKi9cbiAgcHVibGljIHJlbW92ZUFsbENvbGxpZGVBY3RpdmVMaXN0ZW5lcnMoKSB7XG4gICAgdGhpcy5jb2xsaXNpb25BY3RpdmVMaXN0ZW5lcnMuY2xlYXIoKTtcbiAgfVxuXG4gIC8qKiBSZW1vdmUgYW55IGxpc3RlbmVycyB0aGF0IHdlcmUgYWRkZWQgd2l0aCBhZGRPbkNvbGxpZGVFbmQuICovXG4gIHB1YmxpYyByZW1vdmVBbGxDb2xsaWRlRW5kTGlzdGVuZXJzKCkge1xuICAgIHRoaXMuY29sbGlzaW9uRW5kTGlzdGVuZXJzLmNsZWFyKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGFueSBsaXN0ZW5lcnMgdGhhdCB3ZXJlIGFkZGVkIHdpdGggYWRkT25Db2xsaWRlU3RhcnQsIGFkZE9uQ29sbGlkZUFjdGl2ZSBvclxuICAgKiBhZGRPbkNvbGxpZGVFbmQuXG4gICAqL1xuICBwdWJsaWMgcmVtb3ZlQWxsQ29sbGlkZUxpc3RlbmVycygpIHtcbiAgICB0aGlzLnJlbW92ZUFsbENvbGxpZGVTdGFydExpc3RlbmVycygpO1xuICAgIHRoaXMucmVtb3ZlQWxsQ29sbGlkZUFjdGl2ZUxpc3RlbmVycygpO1xuICAgIHRoaXMucmVtb3ZlQWxsQ29sbGlkZUVuZExpc3RlbmVycygpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRPbkNvbGxpZGUobWFwOiBMaXN0ZW5lck1hcCwgY29uZmlnOiBJbnRlcm5hbENvbGxpZGVDb25maWcpOiB2b2lkIHtcbiAgICBjb25zdCB7IGNvbnRleHQsIGNhbGxiYWNrLCBvYmplY3RBLCBvYmplY3RCIH0gPSBjb25maWc7XG4gICAgaWYgKCFjYWxsYmFjayB8fCB0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgbG9nZ2VyLndhcm4oYE5vIHZhbGlkIGNhbGxiYWNrIHNwZWNpZmllZC4gUmVjZWl2ZWQ6ICR7Y2FsbGJhY2t9YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG9iamVjdHNBID0gQXJyYXkuaXNBcnJheShvYmplY3RBKSA/IG9iamVjdEEgOiBbb2JqZWN0QV07XG4gICAgY29uc3Qgb2JqZWN0c0IgPSBBcnJheS5pc0FycmF5KG9iamVjdEIpID8gb2JqZWN0QiA6IFtvYmplY3RCXTtcbiAgICBvYmplY3RzQS5mb3JFYWNoKChhKSA9PiB7XG4gICAgICBvYmplY3RzQi5mb3JFYWNoKChiKSA9PiB7XG4gICAgICAgIHRoaXMuYWRkT25Db2xsaWRlT2JqZWN0VnNPYmplY3QobWFwLCBhLCBiLCBjYWxsYmFjaywgY29udGV4dCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlT25Db2xsaWRlKG1hcDogTGlzdGVuZXJNYXAsIGNvbmZpZzogSW50ZXJuYWxDb2xsaWRlUmVtb3ZlQ29uZmlnKSB7XG4gICAgY29uc3QgeyBjb250ZXh0LCBjYWxsYmFjaywgb2JqZWN0QSwgb2JqZWN0QiB9ID0gY29uZmlnO1xuICAgIGNvbnN0IG9iamVjdHNBID0gQXJyYXkuaXNBcnJheShvYmplY3RBKSA/IG9iamVjdEEgOiBbb2JqZWN0QV07XG4gICAgY29uc3Qgb2JqZWN0c0IgPSBBcnJheS5pc0FycmF5KG9iamVjdEIpID8gb2JqZWN0QiA6IFtvYmplY3RCXTtcbiAgICBvYmplY3RzQS5mb3JFYWNoKChhKSA9PiB7XG4gICAgICBjb25zdCBjYWxsYmFja3MgPSBtYXAuZ2V0KGEpIHx8IFtdO1xuICAgICAgY29uc3QgcmVtYWluaW5nQ2FsbGJhY2tzID0gY2FsbGJhY2tzLmZpbHRlcigoY2IpID0+IHtcbiAgICAgICAgLy8gSWYgYW55dGhpbmcgZG9lc24ndCBtYXRjaCBhIHByb3ZpZGVkIGNvbmZpZyB2YWx1ZSAoaS5lLiBhbnl0aGluZyBvdGhlciB0aGFuIHVuZGVmaW5lZCksXG4gICAgICAgIC8vIHdlIGNhbiBiYWlsIGFuZCBrZWVwIGxpc3RlbmVyLlxuICAgICAgICBpZiAoY29udGV4dCAhPT0gdW5kZWZpbmVkICYmIGNiLmNvbnRleHQgIT09IGNvbnRleHQpIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAoY2FsbGJhY2sgIT09IHVuZGVmaW5lZCAmJiBjYi5jYWxsYmFjayAhPT0gY2FsbGJhY2spIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAob2JqZWN0QiAhPT0gdW5kZWZpbmVkICYmICFvYmplY3RzQi5pbmNsdWRlcyhjYi50YXJnZXQpKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSk7XG4gICAgICBpZiAocmVtYWluaW5nQ2FsbGJhY2tzLmxlbmd0aCA+IDApIG1hcC5zZXQoYSwgcmVtYWluaW5nQ2FsbGJhY2tzKTtcbiAgICAgIGVsc2UgbWFwLmRlbGV0ZShhKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkT25Db2xsaWRlT2JqZWN0VnNPYmplY3QoXG4gICAgbWFwOiBMaXN0ZW5lck1hcCxcbiAgICBvYmplY3RBOiBDTyxcbiAgICBvYmplY3RCOiBDTyB8IHVuZGVmaW5lZCxcbiAgICBjYWxsYmFjazogQ29sbGlkZUNhbGxiYWNrPENPLCBDTz4sXG4gICAgY29udGV4dDogQ29sbGlkZUNvbnRleHQgfCB1bmRlZmluZWRcbiAgKSB7XG4gICAgLy8gQ2FuJ3QgZG8gYW55dGhpbmcgaWYgdGhlIGZpcnN0IG9iamVjdCBpcyBub3QgZGVmaW5lZCBvciBpbnZhbGlkLlxuICAgIGlmICghb2JqZWN0QSB8fCAhaXNDb2xsaWRpbmdPYmplY3Qob2JqZWN0QSkpIHtcbiAgICAgIHdhcm5JbnZhbGlkT2JqZWN0KG9iamVjdEEpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFRoZSBzZWNvbmQgb2JqZWN0IGNhbiBiZSB1bmRlZmluZWQgb3IgYSB2YWxpZCBib2R5LlxuICAgIGlmIChvYmplY3RCICYmICFpc0NvbGxpZGluZ09iamVjdChvYmplY3RCKSkge1xuICAgICAgd2FybkludmFsaWRPYmplY3Qob2JqZWN0QSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY2FsbGJhY2tzID0gbWFwLmdldChvYmplY3RBKSB8fCBbXTtcbiAgICBjYWxsYmFja3MucHVzaCh7IHRhcmdldDogb2JqZWN0QiwgY2FsbGJhY2ssIGNvbnRleHQgfSk7XG4gICAgbWFwLnNldChvYmplY3RBLCBjYWxsYmFja3MpO1xuICB9XG5cbiAgcHJpdmF0ZSBvbkNvbGxpc2lvblN0YXJ0KGV2ZW50OiBNYXR0ZXJFdmVudHMuQ29sbGlzaW9uQWN0aXZlRXZlbnQpIHtcbiAgICB0aGlzLm9uQ29sbGlzaW9uRXZlbnQodGhpcy5jb2xsaXNpb25TdGFydExpc3RlbmVycywgQ09MTElTSU9OX1NUQVJULCBldmVudCk7XG4gIH1cblxuICBwcml2YXRlIG9uQ29sbGlzaW9uRW5kKGV2ZW50OiBNYXR0ZXJFdmVudHMuQ29sbGlzaW9uRW5kRXZlbnQpIHtcbiAgICB0aGlzLm9uQ29sbGlzaW9uRXZlbnQodGhpcy5jb2xsaXNpb25FbmRMaXN0ZW5lcnMsIENPTExJU0lPTl9FTkQsIGV2ZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgb25Db2xsaXNpb25BY3RpdmUoZXZlbnQ6IE1hdHRlckV2ZW50cy5Db2xsaXNpb25BY3RpdmVFdmVudCkge1xuICAgIHRoaXMub25Db2xsaXNpb25FdmVudCh0aGlzLmNvbGxpc2lvbkFjdGl2ZUxpc3RlbmVycywgQ09MTElTSU9OX0FDVElWRSwgZXZlbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldXNhYmxlIGhhbmRsZXIgZm9yIGNvbGxpc2lvbnN0YXJ0LCBjb2xsaXNpb25lbmQsIGNvbGxpc2lvbmFjdGl2ZS5cbiAgICogKi9cbiAgcHJpdmF0ZSBvbkNvbGxpc2lvbkV2ZW50KFxuICAgIGxpc3RlbmVyTWFwOiBMaXN0ZW5lck1hcCxcbiAgICBldmVudE5hbWU6IHN0cmluZyxcbiAgICBldmVudDogTWF0dGVyQ29sbGlzaW9uRXZlbnRcbiAgKSB7XG4gICAgY29uc3QgcGFpcnMgPSBldmVudC5wYWlycyBhcyBFeHRlbmRlZE1hdHRlckNvbGxpc2lvbkRhdGFbXTtcbiAgICBjb25zdCBwYWlyRXZlbnROYW1lID0gXCJwYWlyXCIgKyBldmVudE5hbWU7XG4gICAgY29uc3QgZXZlbnREYXRhOiBQYXJ0aWFsPEV2ZW50RGF0YTxDTywgQ08+PiA9IHsgaXNSZXZlcnNlZDogZmFsc2UgfTtcbiAgICBjb25zdCBldmVudERhdGFSZXZlcnNlZDogUGFydGlhbDxFdmVudERhdGE8Q08sIENPPj4gPSB7IGlzUmV2ZXJzZWQ6IHRydWUgfTtcblxuICAgIHBhaXJzLm1hcCgocGFpciwgaSkgPT4ge1xuICAgICAgY29uc3QgeyBib2R5QSwgYm9keUIgfSA9IHBhaXI7XG4gICAgICBjb25zdCByb290Qm9keUEgPSBnZXRSb290Qm9keShib2R5QSk7XG4gICAgICBjb25zdCByb290Qm9keUIgPSBnZXRSb290Qm9keShib2R5Qik7XG4gICAgICBsZXQgZ2FtZU9iamVjdEE6IENPIHwgdW5kZWZpbmVkID0gcm9vdEJvZHlBLmdhbWVPYmplY3QgPz8gdW5kZWZpbmVkO1xuICAgICAgbGV0IGdhbWVPYmplY3RCOiBDTyB8IHVuZGVmaW5lZCA9IHJvb3RCb2R5Qi5nYW1lT2JqZWN0ID8/IHVuZGVmaW5lZDtcblxuICAgICAgLy8gU3BlY2lhbCBjYXNlIGZvciB0aWxlcywgd2hlcmUgaXQncyBtb3JlIHVzZWZ1bCB0byBoYXZlIGEgcmVmZXJlbmNlIHRvIHRoZSBUaWxlIG9iamVjdCBub3RcbiAgICAgIC8vIHRoZSBUaWxlQm9keS4gVGhpcyBpcyBob3QgY29kZSwgc28gdXNlIGEgcHJvcGVydHkgY2hlY2sgaW5zdGVhZCBvZiBpbnN0YW5jZW9mLlxuICAgICAgaWYgKGdhbWVPYmplY3RBICYmIGdhbWVPYmplY3RBIGluc3RhbmNlb2YgTWF0dGVyLlRpbGVCb2R5KSB7XG4gICAgICAgIGdhbWVPYmplY3RBID0gZ2FtZU9iamVjdEEudGlsZTtcbiAgICAgIH1cbiAgICAgIGlmIChnYW1lT2JqZWN0QiAmJiBnYW1lT2JqZWN0QiBpbnN0YW5jZW9mIE1hdHRlci5UaWxlQm9keSkge1xuICAgICAgICBnYW1lT2JqZWN0QiA9IGdhbWVPYmplY3RCLnRpbGU7XG4gICAgICB9XG5cbiAgICAgIHBhaXJzW2ldLmdhbWVPYmplY3RBID0gZ2FtZU9iamVjdEEgPz8gdW5kZWZpbmVkO1xuICAgICAgcGFpcnNbaV0uZ2FtZU9iamVjdEIgPSBnYW1lT2JqZWN0QiA/PyB1bmRlZmluZWQ7XG5cbiAgICAgIGV2ZW50RGF0YS5ib2R5QSA9IGJvZHlBO1xuICAgICAgZXZlbnREYXRhLmJvZHlCID0gYm9keUI7XG4gICAgICBldmVudERhdGEuZ2FtZU9iamVjdEEgPSBnYW1lT2JqZWN0QSA/PyB1bmRlZmluZWQ7XG4gICAgICBldmVudERhdGEuZ2FtZU9iamVjdEIgPSBnYW1lT2JqZWN0QiA/PyB1bmRlZmluZWQ7XG4gICAgICBldmVudERhdGEucGFpciA9IHBhaXI7XG5cbiAgICAgIHRoaXMuZXZlbnRzLmVtaXQocGFpckV2ZW50TmFtZSwgZXZlbnREYXRhKTtcblxuICAgICAgaWYgKGxpc3RlbmVyTWFwLnNpemUgPiAwKSB7XG4gICAgICAgIGV2ZW50RGF0YVJldmVyc2VkLmJvZHlCID0gYm9keUE7XG4gICAgICAgIGV2ZW50RGF0YVJldmVyc2VkLmJvZHlBID0gYm9keUI7XG4gICAgICAgIGV2ZW50RGF0YVJldmVyc2VkLmdhbWVPYmplY3RCID0gZ2FtZU9iamVjdEE7XG4gICAgICAgIGV2ZW50RGF0YVJldmVyc2VkLmdhbWVPYmplY3RBID0gZ2FtZU9iamVjdEI7XG4gICAgICAgIGV2ZW50RGF0YVJldmVyc2VkLnBhaXIgPSBwYWlyO1xuXG4gICAgICAgIGNvbnN0IGRhdGEgPSBldmVudERhdGEgYXMgRXZlbnREYXRhPENPLCBDTz47XG4gICAgICAgIGNvbnN0IGRhdGFSZXZlcnNlZCA9IGV2ZW50RGF0YVJldmVyc2VkIGFzIEV2ZW50RGF0YTxDTywgQ08+O1xuXG4gICAgICAgIHRoaXMuY2hlY2tQYWlyQW5kRW1pdChsaXN0ZW5lck1hcCwgYm9keUEsIGJvZHlCLCBnYW1lT2JqZWN0QiwgZGF0YSk7XG4gICAgICAgIHRoaXMuY2hlY2tQYWlyQW5kRW1pdChsaXN0ZW5lck1hcCwgYm9keUIsIGJvZHlBLCBnYW1lT2JqZWN0QSwgZGF0YVJldmVyc2VkKTtcblxuICAgICAgICBpZiAoZ2FtZU9iamVjdEEpIHtcbiAgICAgICAgICB0aGlzLmNoZWNrUGFpckFuZEVtaXQobGlzdGVuZXJNYXAsIGdhbWVPYmplY3RBLCBib2R5QiwgZ2FtZU9iamVjdEIsIGRhdGEpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGdhbWVPYmplY3RCKSB7XG4gICAgICAgICAgdGhpcy5jaGVja1BhaXJBbmRFbWl0KGxpc3RlbmVyTWFwLCBnYW1lT2JqZWN0QiwgYm9keUEsIGdhbWVPYmplY3RBLCBkYXRhUmV2ZXJzZWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLmV2ZW50cy5lbWl0KGV2ZW50TmFtZSwgZXZlbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja1BhaXJBbmRFbWl0KFxuICAgIG1hcDogTGlzdGVuZXJNYXAsXG4gICAgb2JqZWN0QTogQ08sXG4gICAgYm9keUI6IE1hdHRlckpTLkJvZHksXG4gICAgZ2FtZU9iamVjdEI6IENPIHwgdW5kZWZpbmVkLFxuICAgIGV2ZW50RGF0YTogRXZlbnREYXRhPENPLCBDTz5cbiAgKSB7XG4gICAgY29uc3QgY2FsbGJhY2tzID0gbWFwLmdldChvYmplY3RBKTtcbiAgICBpZiAoY2FsbGJhY2tzKSB7XG4gICAgICBjYWxsYmFja3MuZm9yRWFjaCgoeyB0YXJnZXQsIGNhbGxiYWNrLCBjb250ZXh0IH0pID0+IHtcbiAgICAgICAgaWYgKCF0YXJnZXQgfHwgdGFyZ2V0ID09PSBib2R5QiB8fCB0YXJnZXQgPT09IGdhbWVPYmplY3RCKSB7XG4gICAgICAgICAgY2FsbGJhY2suY2FsbChjb250ZXh0LCBldmVudERhdGEpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBzdWJzY3JpYmVNYXR0ZXJFdmVudHMoKSB7XG4gICAgY29uc3QgbWF0dGVyID0gdGhpcy5zY2VuZS5tYXR0ZXI7XG4gICAgaWYgKCFtYXR0ZXIgfHwgIW1hdHRlci53b3JsZCkge1xuICAgICAgbG9nZ2VyLndhcm4oXCJQbHVnaW4gcmVxdWlyZXMgbWF0dGVyIVwiKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbWF0dGVyLndvcmxkLm9uKENPTExJU0lPTl9TVEFSVCwgdGhpcy5vbkNvbGxpc2lvblN0YXJ0LCB0aGlzKTtcbiAgICBtYXR0ZXIud29ybGQub24oQ09MTElTSU9OX0FDVElWRSwgdGhpcy5vbkNvbGxpc2lvbkFjdGl2ZSwgdGhpcyk7XG4gICAgbWF0dGVyLndvcmxkLm9uKENPTExJU0lPTl9FTkQsIHRoaXMub25Db2xsaXNpb25FbmQsIHRoaXMpO1xuICB9XG5cbiAgdW5zdWJzY3JpYmVNYXR0ZXJFdmVudHMoKSB7XG4gICAgLy8gRG9uJ3QgdW5zdWIgaWYgbWF0dGVyIG5leHQgZXhpc3Rpbmcgb3IgaWYgdGhlIGdhbWUgaXMgZGVzdHJveWVkIChzaW5jZSB0aGUgbWF0dGVyIHdvcmxkIHdpbGxcbiAgICAvLyBiZSBhbHJlYWR5IGdvbmUpXG4gICAgY29uc3QgbWF0dGVyID0gdGhpcy5zY2VuZS5tYXR0ZXI7XG4gICAgaWYgKCFtYXR0ZXIgfHwgIW1hdHRlci53b3JsZCkgcmV0dXJuO1xuICAgIG1hdHRlci53b3JsZC5vZmYoQ09MTElTSU9OX1NUQVJULCB0aGlzLm9uQ29sbGlzaW9uU3RhcnQsIHRoaXMpO1xuICAgIG1hdHRlci53b3JsZC5vZmYoQ09MTElTSU9OX0FDVElWRSwgdGhpcy5vbkNvbGxpc2lvbkFjdGl2ZSwgdGhpcyk7XG4gICAgbWF0dGVyLndvcmxkLm9mZihDT0xMSVNJT05fRU5ELCB0aGlzLm9uQ29sbGlzaW9uRW5kLCB0aGlzKTtcbiAgfVxuXG4gIHN0YXJ0KCkge1xuICAgIC8vIElmIHJlc3RhcnRpbmcsIHVuc3Vic2NyaWJlIGJlZm9yZSByZXN1YnNjcmliaW5nIHRvIGVuc3VyZSBvbmx5IG9uZSBsaXN0ZW5lciBpcyBhZGRlZFxuICAgIHRoaXMuc2NlbmUuZXZlbnRzLm9mZihTSFVURE9XTiwgdGhpcy5zaHV0ZG93biwgdGhpcyk7XG4gICAgdGhpcy5zY2VuZS5ldmVudHMub24oU0hVVERPV04sIHRoaXMuc2h1dGRvd24sIHRoaXMpO1xuICAgIHRoaXMuc3Vic2NyaWJlTWF0dGVyRXZlbnRzKCk7XG4gIH1cblxuICBzaHV0ZG93bigpIHtcbiAgICB0aGlzLnJlbW92ZUFsbENvbGxpZGVMaXN0ZW5lcnMoKTtcbiAgICB0aGlzLnVuc3Vic2NyaWJlTWF0dGVyRXZlbnRzKCk7XG4gICAgLy8gUmVzdWJzY3JpYmUgdG8gc3RhcnQgc28gdGhhdCB0aGUgcGx1Z2luIGlzIHN0YXJ0ZWQgYWdhaW4gYWZ0ZXIgTWF0dGVyXG4gICAgdGhpcy5zY2VuZS5ldmVudHMub25jZShTVEFSVCwgdGhpcy5zdGFydCwgdGhpcyk7XG4gIH1cblxuICBkZXN0cm95KCkge1xuICAgIHRoaXMuc2NlbmUuZXZlbnRzLm9mZihERVNUUk9ZLCB0aGlzLmRlc3Ryb3ksIHRoaXMpO1xuICAgIHRoaXMuc2NlbmUuZXZlbnRzLm9mZihTVEFSVCwgdGhpcy5zdGFydCwgdGhpcyk7XG4gICAgdGhpcy5zY2VuZS5ldmVudHMub2ZmKFNIVVRET1dOLCB0aGlzLnNodXRkb3duLCB0aGlzKTtcbiAgICB0aGlzLnJlbW92ZUFsbENvbGxpZGVMaXN0ZW5lcnMoKTtcbiAgICB0aGlzLnVuc3Vic2NyaWJlTWF0dGVyRXZlbnRzKCk7XG4gIH1cbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./phaser-matter-collision-plugin.ts\n");
/***/ }),
/***/ "./utils.ts":
/*!******************!*\
!*** ./utils.ts ***!
\******************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"getRootBody\": () => (/* binding */ getRootBody),\n/* harmony export */ \"warnInvalidObject\": () => (/* binding */ warnInvalidObject)\n/* harmony export */ });\n/* harmony import */ var _logger__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./logger */ \"./logger.ts\");\n\r\n/**\r\n * Get the root body of a compound Matter body.\r\n */\r\nfunction getRootBody(body) {\r\n while (body.parent !== body)\r\n body = body.parent;\r\n return body;\r\n}\r\n/**\r\n * @param obj\r\n */\r\nfunction warnInvalidObject(obj) {\r\n _logger__WEBPACK_IMPORTED_MODULE_0__.default.warn(`Expected a Matter body, a Tile, a GameObject, a Sprite, an Image, a TileBody, or an object with a body property, but instead, received: ${obj}`);\r\n}\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9QaGFzZXJNYXR0ZXJDb2xsaXNpb25QbHVnaW4vLi91dGlscy50cz84ODEzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUE4QjtBQUU5Qjs7R0FFRztBQUNJLFNBQVMsV0FBVyxDQUFDLElBQXVCO0lBQ2pELE9BQU8sSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJO1FBQUUsSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDaEQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQ7O0dBRUc7QUFDSSxTQUFTLGlCQUFpQixDQUFDLEdBQVE7SUFDeEMsaURBQVcsQ0FDVCwySUFBMkksR0FBRyxFQUFFLENBQ2pKLENBQUM7QUFDSixDQUFDIiwiZmlsZSI6Ii4vdXRpbHMudHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbG9nZ2VyIGZyb20gXCIuL2xvZ2dlclwiO1xuXG4vKipcbiAqIEdldCB0aGUgcm9vdCBib2R5IG9mIGEgY29tcG91bmQgTWF0dGVyIGJvZHkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRSb290Qm9keShib2R5OiBNYXR0ZXJKUy5Cb2R5VHlwZSkge1xuICB3aGlsZSAoYm9keS5wYXJlbnQgIT09IGJvZHkpIGJvZHkgPSBib2R5LnBhcmVudDtcbiAgcmV0dXJuIGJvZHk7XG59XG5cbi8qKlxuICogQHBhcmFtIG9ialxuICovXG5leHBvcnQgZnVuY3Rpb24gd2FybkludmFsaWRPYmplY3Qob2JqOiBhbnkpIHtcbiAgbG9nZ2VyLndhcm4oXG4gICAgYEV4cGVjdGVkIGEgTWF0dGVyIGJvZHksIGEgVGlsZSwgYSBHYW1lT2JqZWN0LCBhIFNwcml0ZSwgYW4gSW1hZ2UsIGEgVGlsZUJvZHksIG9yIGFuIG9iamVjdCB3aXRoIGEgYm9keSBwcm9wZXJ0eSwgYnV0IGluc3RlYWQsIHJlY2VpdmVkOiAke29ian1gXG4gICk7XG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./utils.ts\n");
/***/ }),
/***/ "./valid-collision-object.ts":
/*!***********************************!*\
!*** ./valid-collision-object.ts ***!
\***********************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"isMatterBody\": () => (/* binding */ isMatterBody),\n/* harmony export */ \"isCollidingObject\": () => (/* binding */ isCollidingObject)\n/* harmony export */ });\n/* harmony import */ var phaser__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! phaser */ \"phaser\");\n/* harmony import */ var phaser__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(phaser__WEBPACK_IMPORTED_MODULE_0__);\n\r\nvar Tile = phaser__WEBPACK_IMPORTED_MODULE_0__.Tilemaps.Tile;\r\n/** Duck type to check if the given object is a Matter body (because there isn't a prototype). */\r\nfunction isMatterBody(obj) {\r\n return (obj.hasOwnProperty(\"parts\") && obj.hasOwnProperty(\"slop\") && obj.hasOwnProperty(\"gameObject\"));\r\n}\r\n/**\r\n * Check if object is an acceptable physical object for this plugin - a Matter Body, a tile, or an\r\n * object with a body property.\r\n */\r\nfunction isCollidingObject(obj) {\r\n // GameObjects, images, sprites and tile bodies should all have a body property.\r\n return isMatterBody(obj) || obj.body || obj instanceof Tile;\r\n}\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9QaGFzZXJNYXR0ZXJDb2xsaXNpb25QbHVnaW4vLi92YWxpZC1jb2xsaXNpb24tb2JqZWN0LnRzP2QxM2YiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUF5QztBQUV6QyxJQUFPLElBQUksR0FBRyxpREFBYSxDQUFDO0FBYzVCLGlHQUFpRztBQUMxRixTQUFTLFlBQVksQ0FBQyxHQUFRO0lBQ25DLE9BQU8sQ0FDTCxHQUFHLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FDOUYsQ0FBQztBQUNKLENBQUM7QUFFRDs7O0dBR0c7QUFDSSxTQUFTLGlCQUFpQixDQUFDLEdBQVE7SUFDeEMsZ0ZBQWdGO0lBQ2hGLE9BQU8sWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLElBQUksR0FBRyxZQUFZLElBQUksQ0FBQztBQUM5RCxDQUFDIiwiZmlsZSI6Ii4vdmFsaWQtY29sbGlzaW9uLW9iamVjdC50cy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRpbGVtYXBzLCBUeXBlcyB9IGZyb20gXCJwaGFzZXJcIjtcblxuaW1wb3J0IFRpbGUgPSBUaWxlbWFwcy5UaWxlO1xuaW1wb3J0IE1hdHRlckJvZHkgPSBUeXBlcy5QaHlzaWNzLk1hdHRlci5NYXR0ZXJCb2R5O1xuXG4vKiogQSB2YWxpZCBwaHlzaWNzLWVuYWJsZWQgZ2FtZSBvYmplY3QsIG9yIGp1c3QgYW4gb2JqZWN0IHRoYXQgaGFzIFwiYm9keVwiIHByb3BlcnR5ICovXG5leHBvcnQgdHlwZSBPYmplY3RXaXRoQm9keSA9IHtcbiAgYm9keTogTWF0dGVySlMuQm9keVR5cGU7XG59O1xuXG4vKipcbiAqIEEgdW5pb24gb2YgYWxsIHRoZSB0eXBlcyBvZiBwaHlzaWNzIG9iamVjdHMgd2UgY291bGQgaGF2ZSBpbiB0aGUgc2ltdWxhdGlvbiAtIGZyb20gcmF3IE1hdHRlci5qc1xuICogYm9kaWVzIHRvIHRpbGVzIGFuZCBwaHlzaWNzLWVuYWJsZWQgUGhhc2VyIEdhbWVPYmplY3RzLlxuICovXG5leHBvcnQgdHlwZSBDb2xsaWRpbmdPYmplY3QgPSBNYXR0ZXJCb2R5IHwgTWF0dGVySlMuQm9keVR5cGUgfCBUaWxlIHwgT2JqZWN0V2l0aEJvZHk7XG5cbi8qKiBEdWNrIHR5cGUgdG8gY2hlY2sgaWYgdGhlIGdpdmVuIG9iamVjdCBpcyBhIE1hdHRlciBib2R5IChiZWNhdXNlIHRoZXJlIGlzbid0IGEgcHJvdG90eXBlKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc01hdHRlckJvZHkob2JqOiBhbnkpOiBvYmogaXMgTWF0dGVyQm9keSB7XG4gIHJldHVybiAoXG4gICAgb2JqLmhhc093blByb3BlcnR5KFwicGFydHNcIikgJiYgb2JqLmhhc093blByb3BlcnR5KFwic2xvcFwiKSAmJiBvYmouaGFzT3duUHJvcGVydHkoXCJnYW1lT2JqZWN0XCIpXG4gICk7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgb2JqZWN0IGlzIGFuIGFjY2VwdGFibGUgcGh5c2ljYWwgb2JqZWN0IGZvciB0aGlzIHBsdWdpbiAtIGEgTWF0dGVyIEJvZHksIGEgdGlsZSwgb3IgYW5cbiAqIG9iamVjdCB3aXRoIGEgYm9keSBwcm9wZXJ0eS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ29sbGlkaW5nT2JqZWN0KG9iajogYW55KTogb2JqIGlzIENvbGxpZGluZ09iamVjdCB7XG4gIC8vIEdhbWVPYmplY3RzLCBpbWFnZXMsIHNwcml0ZXMgYW5kIHRpbGUgYm9kaWVzIHNob3VsZCBhbGwgaGF2ZSBhIGJvZHkgcHJvcGVydHkuXG4gIHJldHVybiBpc01hdHRlckJvZHkob2JqKSB8fCBvYmouYm9keSB8fCBvYmogaW5zdGFuY2VvZiBUaWxlO1xufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./valid-collision-object.ts\n");
/***/ }),
/***/ "phaser":
/*!******************************************************************************************!*\
!*** external {"root":"Phaser","commonjs":"phaser","commonjs2":"phaser","amd":"phaser"} ***!
\******************************************************************************************/
/***/ ((module) => {
module.exports = __WEBPACK_EXTERNAL_MODULE_phaser__;
/***/ })
/******/ });
/************************************************************************/
/******/ // The module cache
/******/ var __webpack_module_cache__ = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/ // Check if module is in cache
/******/ var cachedModule = __webpack_module_cache__[moduleId];
/******/ if (cachedModule !== undefined) {
/******/ return cachedModule.exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = __webpack_module_cache__[moduleId] = {
/******/ // no module.id needed
/******/ // no module.loaded needed
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/************************************************************************/
/******/ /* webpack/runtime/compat get default export */
/******/ (() => {
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = (module) => {
/******/ var getter = module && module.__esModule ?
/******/ () => (module['default']) :
/******/ () => (module);
/******/ __webpack_require__.d(getter, { a: getter });
/******/ return getter;
/******/ };
/******/ })();
/******/
/******/ /* webpack/runtime/define property getters */
/******/ (() => {
/******/ // define getter functions for harmony exports
/******/ __webpack_require__.d = (exports, definition) => {
/******/ for(var key in definition) {
/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
/******/ }
/******/ }
/******/ };
/******/ })();
/******/
/******/ /* webpack/runtime/hasOwnProperty shorthand */
/******/ (() => {
/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
/******/ })();
/******/
/******/ /* webpack/runtime/make namespace object */
/******/ (() => {
/******/ // define __esModule on exports
/******/ __webpack_require__.r = (exports) => {
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ }
/******/ Object.defineProperty(exports, '__esModule', { value: true });
/******/ };
/******/ })();
/******/
/************************************************************************/
/******/
/******/ // startup
/******/ // Load entry module and return exports
/******/ // This entry module can't be inlined because the eval-source-map devtool is used.
/******/ var __webpack_exports__ = __webpack_require__("./index.ts");
/******/
/******/ return __webpack_exports__;
/******/ })()
;
});